summaryrefslogtreecommitdiff
path: root/addons/base_geolocalize
diff options
context:
space:
mode:
authorJeremy Kersten <jke@odoo.com>2018-09-12 17:05:44 +0200
committerJeremy Kersten <jke@odoo.com>2018-09-12 17:07:23 +0200
commite6ca846c65bd94bf4c3ecb57847e93ae8ecaa9e9 (patch)
tree5c3ea4f298a59345b14c2feea4abdfc65731107a /addons/base_geolocalize
parent72d7dd8994f21978379f6a80c0c21d56719f342f (diff)
[FIX] base_geolocalize, website_crm_partner_assign: API keys are now required
Google Important Updated: API keys are now required We began enforcing the use of API keys, effective June 11th 2018. Keyless usage will result in a degraded experience, or an error. https://developers.google.com/maps/billing/important-updates
Diffstat (limited to 'addons/base_geolocalize')
-rw-r--r--addons/base_geolocalize/models/res_partner.py44
1 files changed, 30 insertions, 14 deletions
diff --git a/addons/base_geolocalize/models/res_partner.py b/addons/base_geolocalize/models/res_partner.py
index 44fa8d9692f..4c36ffe9207 100644
--- a/addons/base_geolocalize/models/res_partner.py
+++ b/addons/base_geolocalize/models/res_partner.py
@@ -1,16 +1,26 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import json
+import logging
import urllib2
from odoo import api, fields, models, tools, _
from odoo.exceptions import UserError
+_logger = logging.getLogger(__name__)
-def geo_find(addr):
+
+def geo_find(addr, apikey=False):
if not addr:
return None
- url = 'https://maps.googleapis.com/maps/api/geocode/json?sensor=false&address='
+
+ if not apikey:
+ raise UserError(_('''API key for GeoCoding (Places) required.\n
+ Save this key in System Parameters with key: google.api_key_geocode, value: <your api key>
+ Visit https://developers.google.com/maps/documentation/geocoding/get-api-key for more information.
+ '''))
+
+ url = "https://maps.googleapis.com/maps/api/geocode/json?key=%s&sensor=false&address=" % apikey
url += urllib2.quote(addr.encode('utf8'))
try:
@@ -19,6 +29,8 @@ def geo_find(addr):
raise UserError(_('Cannot contact geolocation servers. Please make sure that your Internet connection is up and running (%s).') % e)
if result['status'] != 'OK':
+ if result.get('error_message'):
+ _logger.error(result['error_message'])
return None
try:
@@ -46,22 +58,26 @@ class ResPartner(models.Model):
partner_longitude = fields.Float(string='Geo Longitude', digits=(16, 5))
date_localization = fields.Date(string='Geolocation Date')
+ @classmethod
+ def _geo_localize(cls, apikey, street='', zip='', city='', state='', country=''):
+ search = geo_query_address(street=street, zip=zip, city=city, state=state, country=country)
+ result = geo_find(search, apikey)
+ if result is None:
+ search = geo_query_address(city=city, state=state, country=country)
+ result = geo_find(search, apikey)
+ return result
+
@api.multi
def geo_localize(self):
# We need country names in English below
+ apikey = self.env['ir.config_parameter'].sudo().get_param('google.api_key_geocode')
for partner in self.with_context(lang='en_US'):
- result = geo_find(geo_query_address(street=partner.street,
- zip=partner.zip,
- city=partner.city,
- state=partner.state_id.name,
- country=partner.country_id.name))
- if result is None:
- result = geo_find(geo_query_address(
- city=partner.city,
- state=partner.state_id.name,
- country=partner.country_id.name
- ))
-
+ result = partner._geo_localize(apikey,
+ partner.street,
+ partner.zip,
+ partner.city,
+ partner.state_id.name,
+ partner.country_id.name)
if result:
partner.write({
'partner_latitude': result[0],