# Copyright 2011-2020 Camptocamp SA # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) from datetime import datetime from pyproj import Transformer from shapely.geometry import Point from odoo import fields, models, api class ResPartner(models.Model): """Add geo_point to partner using a function filed""" _inherit = "res.partner" geo_point = fields.GeoPoint("Geopoint") @api.onchange('partner_latitude', 'partner_longitude') def _(self): odoo_proj = 'epsg:3857' gps_proj = 'epsg:4326' transformer = Transformer.from_crs(gps_proj, odoo_proj) odoo_coords = transformer.transform( self.partner_longitude, self.partner_latitude ) if self.partner_longitude and self.partner_latitude: print(vars(self.geo_point)) self.geo_point = ( '{"type": "Point", "coordinates": [' + f"{odoo_coords[0]},{odoo_coords[1]}" + ']}' ) print(vars(self.geo_point)) else: return False """ TODO: Add a call to redraw the widget on change; Currently you have to cycle between edit and save buttons. """ @api.onchange('geo_point') def _onchange_geo_point(self): odoo_proj = 'epsg:3857' gps_proj = 'epsg:4326' transformer = Transformer.from_crs(odoo_proj, gps_proj) gps_point = transformer.transform( self.geo_point.context[0], self.geo_point.context[1]) print(vars(self.geo_point)) self.partner_longitude = gps_point[0] self.partner_latitude = gps_point[1] self.date_localization = datetime.today() def navigate_from_noc(self): NOC_LONGITUDE = 34.1244 NOC_LATITUDE = 35.6666 longitude = self.partner_longitude latitude = self.partner_latitude url = "https://www.openstreetmap.org/directions?engine=" + \ f"fossgis_osrm_car&route={NOC_LONGITUDE}%2C{NOC_LATITUDE}" + \ f"%3B{longitude}%2C{latitude}" return { 'type': 'ir.actions.act_url', 'name': 'Navigate From NOC', "url" : url, 'target': 'new', }