summaryrefslogtreecommitdiff
path: root/addons/base_geolocalize
diff options
context:
space:
mode:
authorMartin Trigaux <mat@odoo.com>2019-07-12 13:09:45 +0000
committerMartin Trigaux <mat@odoo.com>2019-07-12 13:59:35 +0000
commit1f5a4649a67908ecb6acfec37673c8149de0471f (patch)
tree2a8ac12942b2e6227459a236309054982a01158f /addons/base_geolocalize
parent6532b8716520d8cddc23a1e42c5c602b0c9c3c88 (diff)
parent87fc1554d6a1823ac9061aab089adfd052190d21 (diff)
[MERGE] Forward port of saas-12.3 to saas-12.4 up to 87fc1554d6a1823
closes odoo/odoo#34820 Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
Diffstat (limited to 'addons/base_geolocalize')
-rw-r--r--addons/base_geolocalize/models/base_geocoder.py14
-rw-r--r--addons/base_geolocalize/models/res_partner.py4
2 files changed, 10 insertions, 8 deletions
diff --git a/addons/base_geolocalize/models/base_geocoder.py b/addons/base_geolocalize/models/base_geocoder.py
index 17a10f7e0e5..5c2cee79cca 100644
--- a/addons/base_geolocalize/models/base_geocoder.py
+++ b/addons/base_geolocalize/models/base_geocoder.py
@@ -55,7 +55,7 @@ class GeoCoder(models.AbstractModel):
return self._geo_query_address_default(street=street, zip=zip, city=city, state=state, country=country)
@api.model
- def geo_find(self, addr):
+ def geo_find(self, addr, **kw):
"""Use a location provider API to convert an address string into a latitude, longitude tuple.
Here we use Openstreetmap Nominatim by default.
:param addr: Address string passed to API
@@ -64,7 +64,7 @@ class GeoCoder(models.AbstractModel):
provider = self._get_provider().tech_name
try:
service = getattr(self, '_call_' + provider)
- result = service(addr)
+ result = service(addr, **kw)
except AttributeError:
raise UserError(_(
'Provider %s is not implemented for geolocation service.'
@@ -77,7 +77,7 @@ class GeoCoder(models.AbstractModel):
return result
@api.model
- def _call_openstreetmap(self, addr):
+ def _call_openstreetmap(self, addr, **kw):
"""
Use Openstreemap Nominatim service to retrieve location
:return: (latitude, longitude) or None if not found
@@ -95,7 +95,7 @@ class GeoCoder(models.AbstractModel):
return float(geo['lat']), float(geo['lon'])
@api.model
- def _call_googlemap(self, addr):
+ def _call_googlemap(self, addr, **kw):
""" Use google maps API. It won't work without a valid API key.
:return: (latitude, longitude) or None if not found
"""
@@ -106,8 +106,11 @@ class GeoCoder(models.AbstractModel):
"Visit https://developers.google.com/maps/documentation/geocoding/get-api-key for more information."
))
url = "https://maps.googleapis.com/maps/api/geocode/json"
+ params = {'sensor': 'false', 'address': addr, 'key': apikey}
+ if kw.get('force_country'):
+ params['components'] = 'country:%s' % kw['force_country']
try:
- result = requests.get(url, params={'sensor': 'false', 'address': addr, 'key': apikey}).json()
+ result = requests.get(url, params).json()
except Exception as e:
self._raise_query_error(e)
@@ -151,4 +154,3 @@ class GeoCoder(models.AbstractModel):
def _raise_query_error(self, error):
raise UserError(_('Error with geolocation server:') + ' %s' % error)
-
diff --git a/addons/base_geolocalize/models/res_partner.py b/addons/base_geolocalize/models/res_partner.py
index a92c7af7df4..a0c887a1adb 100644
--- a/addons/base_geolocalize/models/res_partner.py
+++ b/addons/base_geolocalize/models/res_partner.py
@@ -10,10 +10,10 @@ class ResPartner(models.Model):
def _geo_localize(self, street='', zip='', city='', state='', country=''):
geo_obj = self.env['base.geocoder']
search = geo_obj.geo_query_address(street=street, zip=zip, city=city, state=state, country=country)
- result = geo_obj.geo_find(search)
+ result = geo_obj.geo_find(search, force_country=country)
if result is None:
search = geo_obj.geo_query_address(city=city, state=state, country=country)
- result = geo_obj.geo_find(search)
+ result = geo_obj.geo_find(search, force_country=country)
return result
@api.multi