Skip to Content
Menu
This question has been flagged
2 Replies
6141 Views

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!

Avatar
Discard
Author Best Answer

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)

Avatar
Discard
Best Answer

Something like:

distance = fields.Float(string='Distance', compute='_compute_distance')
  @api.depends('address')
def _compute_distance(self):
     ...code
     self.distance = X
Avatar
Discard
Related Posts Replies Views Activity
6
Jun 17
21779
3
Sep 23
803
2
Mar 15
4850
1
Feb 24
381
1
Mar 15
3359