mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
39 lines
1.6 KiB
Python
39 lines
1.6 KiB
Python
from odoo import api, fields, models
|
|
from odoo.addons.sale_planner.wizard.order_planner import distance
|
|
|
|
|
|
class SaleOrderMakePlan(models.TransientModel):
|
|
_inherit = 'sale.order.make.plan'
|
|
|
|
def generate_base_option(self, order_fake):
|
|
option = super(SaleOrderMakePlan, self).generate_base_option(order_fake)
|
|
option['delivery_route_id'] = self.find_closest_route(option, order_fake)
|
|
return option
|
|
|
|
def find_closest_route(self, option, order_fake):
|
|
warehouse = self.env['stock.warehouse'].browse(option['warehouse_id'])
|
|
if warehouse.delivery_route_ids:
|
|
partner = order_fake.partner_shipping_id
|
|
if not partner.date_localization:
|
|
partner.geo_localize()
|
|
return self._find_closest_route_id(warehouse.delivery_route_ids,
|
|
partner.partner_latitude,
|
|
partner.partner_longitude)
|
|
return False
|
|
|
|
def _find_closest_route_id(self, routes, latitude, longitude):
|
|
distances = {distance(latitude, longitude, route.latitude, route.longitude): route.id for route in routes}
|
|
route_id = distances[min(distances)]
|
|
return route_id
|
|
|
|
def _order_fields_for_option(self, option):
|
|
vals = super(SaleOrderMakePlan, self)._order_fields_for_option(option)
|
|
vals['delivery_route_id'] = option.delivery_route_id.id
|
|
return vals
|
|
|
|
|
|
class SaleOrderPlanningOption(models.TransientModel):
|
|
_inherit = 'sale.order.planning.option'
|
|
|
|
delivery_route_id = fields.Many2one('stock.warehouse.delivery.route', string='Delivery Route')
|