تخطي للذهاب إلى المحتوى
القائمة
لقد تم الإبلاغ عن هذا السؤال
2 الردود
6918 أدوات العرض

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!

الصورة الرمزية
إهمال
الكاتب أفضل إجابة

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)

الصورة الرمزية
إهمال
أفضل إجابة

Something like:

distance = fields.Float(string='Distance', compute='_compute_distance')
  @api.depends('address')
def _compute_distance(self):
     ...code
     self.distance = X
الصورة الرمزية
إهمال
المنشورات ذات الصلة الردود أدوات العرض النشاط
6
يونيو 17
23223
3
سبتمبر 23
2296
2
مارس 15
5767
1
فبراير 24
1426
1
مارس 15
4262