跳至內容
選單
此問題已被標幟
2 回覆
6919 瀏覽次數

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
6月 17
23223
3
9月 23
2296
2
3月 15
5767
1
2月 24
1426
1
3月 15
4262