diff options
| author | Jeremy Kersten <jke@odoo.com> | 2018-09-12 17:05:44 +0200 |
|---|---|---|
| committer | Jeremy Kersten <jke@odoo.com> | 2018-09-12 17:07:23 +0200 |
| commit | e6ca846c65bd94bf4c3ecb57847e93ae8ecaa9e9 (patch) | |
| tree | 5c3ea4f298a59345b14c2feea4abdfc65731107a /addons/base_geolocalize | |
| parent | 72d7dd8994f21978379f6a80c0c21d56719f342f (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.py | 44 |
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], |
