Skip to content
Extraits de code Groupes Projets
Valider 433f691d rédigé par Benjamin - Le Filament's avatar Benjamin - Le Filament
Parcourir les fichiers

[init] module init

parent
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
.*
*.pyc
!.gitignore
Ce diff est replié.
Partner geolocalize
===================
Contacts geolocation API to convert partner addresses into GPS coordinates.
Configure
---------
You can configure in General Settings the default provider of the geolocation API service.
A method `_call_<service>` should be implemented in object `base.geocoder` that accepts an address string as parameter and return (latitude, longitude) tuple for this to work.
If no default provider is set, the first one will be used by default.
An optional method `_geo_query_address_<service>` which takes address fields as parameters can be defined to encode the query string for the provider.
\ No newline at end of file
# © 2022 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import models
# © 2022 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
'name': 'Partners Geolocation - API Data Gouv',
'version': '0.0',
'category': 'Hidden/Tools',
'depends': ['base_geolocalize'],
'data': [
'data/data.xml',
],
'installable': True,
}
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="geoprovider_adresse_data_gouv" model="base.geo_provider">
<field name="tech_name">adressedatagouv</field>
<field name="name">Adresse Data Gouv</field>
</record>
</odoo>
# © 2022 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import base_geocoder
# © 2022 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import requests
import logging
from odoo import api, models, tools
_logger = logging.getLogger(__name__)
class GeoCoder(models.AbstractModel):
_inherit = "base.geocoder"
def _geo_query_address_adressedatagouv(self, street=None, zip=None, city=None, state=None, country=None):
address = ("%s %s %s %s" % (street or '', zip or '', city or '', 'France')).strip()
addr = address.replace(' ', '+')
if zip:
addr += '&postcode=%s' % zip
return addr
def _call_adressedatagouv(self, addr, **kw):
"""
Use French Address API Data Gouv service to retrieve location
:return: (latitude, longitude) or None if not found
"""
if not addr:
_logger.info('invalid address given')
return None
url = 'https://api-adresse.data.gouv.fr/search/?q='
try:
response = requests.get(url + addr)
_logger.info('Address API Gouv service called')
if response.status_code != 200:
_logger.error('Request to Address API Gouv failed.\nCode: %s\nContent: %s'
% (response.status_code, response.content))
result = response.json()
except Exception as e:
self._raise_query_error(e)
if result.get('features', False):
geo = result.get('features')[0].get('geometry').get('coordinates')
return float(geo[1]), float(geo[0])
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import test_geolocalize
# © 2022 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo.tests import TransactionCase
from odoo.exceptions import UserError
import odoo.tests
@odoo.tests.tagged('external', '-standard')
class TestGeoLocalize(TransactionCase):
def test_default_adressedatagouv(self):
""" Test that adressedatagouv localize service works. """
test_partner = self.env.ref('base.res_partner_2')
test_partner.geo_localize()
self.assertTrue(test_partner.partner_longitude)
self.assertTrue(test_partner.partner_latitude)
self.assertTrue(test_partner.date_localization)
# we don't check here that the localization is at right place
# but just that result is realistic float coordonates
self.assertTrue(float(test_partner.partner_longitude) != 0.0)
self.assertTrue(float(test_partner.partner_latitude) != 0.0)
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter