Skip to Content
Meniu
Trebuie să fiți înregistrat pentru a interacționa cu comunitatea.
Această întrebare a fost marcată
2 Răspunsuri
6916 Vizualizări

In our lead model/forms we have two addresses and would like to automatically compute the driving distance between them and display/store it in another field. I've done this in Python before by calling Google's Distance Matrix API (outside of Odoo).

My question is, what is the easiest way to integrate a bit of Python code to compute a field via an API? Possibly a trigger when the lead/opportunity is updated? If so, how can that be done?

Thank you!

Imagine profil
Abandonează
Autor Cel mai bun răspuns

Thanks Mai for your comment which put me on the right track...

I ended up creating a module that extends the crm.lead model. Here's a simplified version:

# -*- coding: utf-8 -*-
from odoo import models, fields, api
class DistanceLead(models.Model):
    _inherit = 'crm.lead'
    address1 = fields.Char(string='Start Address')
    address2 = fields.Char(string='End Address')
    distance = fields.Float(string='Driving Distance', compute='_compute_distance')
    
    
    @staticmethod
    def get_distance_km(start_addr, end_addr):
        if start_addr=='' or end_addr=='':
            return 0
        import googlemaps
        client = googlemaps.Client("YOUR-API-KEY")
        try:
            matrix = client.distance_matrix([start_addr], [end_addr])
            distance_km = matrix['rows'][0]['elements'][0]['distance']['value'] / 1000.00
            return distance_km
        except:
            return 0


    @api.depends('address1', 'address2')
    def _compute_distance(self):
        self.distance = DistanceLead.get_distance_km(self.address1, self.address2)

Imagine profil
Abandonează
Cel mai bun răspuns

Something like:

distance = fields.Float(string='Distance', compute='_compute_distance')
  @api.depends('address')
def _compute_distance(self):
     ...code
     self.distance = X
Imagine profil
Abandonează
Related Posts Răspunsuri Vizualizări Activitate
6
iun. 17
23222
3
sept. 23
2296
2
mar. 15
5767
1
feb. 24
1426
1
mar. 15
4261