mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
[REM] sale_planner_delivery_route: available in professional
H14528
This commit is contained in:
@@ -1,15 +0,0 @@
|
||||
**************************************************
|
||||
Hibou - Sale Planner with Warehouse Delivery Route
|
||||
**************************************************
|
||||
|
||||
Calculates the closest delivery route during order planning.
|
||||
|
||||
For more information and add-ons, visit `Hibou.io <https://hibou.io/>`_.
|
||||
|
||||
|
||||
=======
|
||||
License
|
||||
=======
|
||||
|
||||
Please see `LICENSE <https://github.com/hibou-io/hibou-odoo-suite/blob/master/LICENSE>`_.
|
||||
Copyright Hibou Corp. 2018
|
||||
@@ -1,2 +0,0 @@
|
||||
from . import wizard
|
||||
from . import models
|
||||
@@ -1,29 +0,0 @@
|
||||
{
|
||||
'name': 'Sale Order Planner - Delivery Route',
|
||||
'summary': 'Plans to the closest delivery route.',
|
||||
'version': '15.0.1.0.0',
|
||||
'author': "Hibou Corp.",
|
||||
'category': 'Sale',
|
||||
'license': 'LGPL-3',
|
||||
'complexity': 'expert',
|
||||
'images': [],
|
||||
'website': "https://hibou.io",
|
||||
'description': """
|
||||
Sale Order Planner - Delivery Route
|
||||
===================================
|
||||
|
||||
Plans to the closest delivery route.
|
||||
|
||||
""",
|
||||
'depends': [
|
||||
'stock_delivery_route',
|
||||
'sale_planner',
|
||||
],
|
||||
'demo': [],
|
||||
'data': [
|
||||
'wizard/order_planner_views.xml',
|
||||
'views/stock_views.xml',
|
||||
],
|
||||
'auto_install': True,
|
||||
'installable': True,
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * sale_planner_delivery_route
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 15.0+e\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-10-12 01:40+0000\n"
|
||||
"PO-Revision-Date: 2021-10-12 01:40+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: sale_planner_delivery_route
|
||||
#: model:ir.model.fields,field_description:sale_planner_delivery_route.field_sale_order_planning_option__delivery_route_id
|
||||
msgid "Delivery Route"
|
||||
msgstr "Ruta de Entrega"
|
||||
|
||||
#. module: sale_planner_delivery_route
|
||||
#: model:ir.model.fields,field_description:sale_planner_delivery_route.field_stock_warehouse_delivery_route__latitude
|
||||
msgid "Latitude"
|
||||
msgstr "Latitud"
|
||||
|
||||
#. module: sale_planner_delivery_route
|
||||
#: model:ir.model.fields,field_description:sale_planner_delivery_route.field_stock_warehouse_delivery_route__longitude
|
||||
msgid "Longitude"
|
||||
msgstr "Longitud"
|
||||
|
||||
#. module: sale_planner_delivery_route
|
||||
#: model:ir.model,name:sale_planner_delivery_route.model_sale_order_planning_option
|
||||
msgid "Order Planning Option"
|
||||
msgstr "Opciones del planificador de Pedidos"
|
||||
|
||||
#. module: sale_planner_delivery_route
|
||||
#: model:ir.model,name:sale_planner_delivery_route.model_sale_order_make_plan
|
||||
msgid "Plan Order"
|
||||
msgstr "Planificar Orden"
|
||||
|
||||
#. module: sale_planner_delivery_route
|
||||
#: model:ir.model,name:sale_planner_delivery_route.model_stock_warehouse_delivery_route
|
||||
msgid "stock.warehouse.delivery.route"
|
||||
msgstr "stock.warehouse.delivery.route"
|
||||
@@ -1 +0,0 @@
|
||||
from . import stock
|
||||
@@ -1,8 +0,0 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class DeliveryRoute(models.Model):
|
||||
_inherit = 'stock.warehouse.delivery.route'
|
||||
|
||||
latitude = fields.Float(string='Latitude', digits=(12, 6))
|
||||
longitude = fields.Float(string='Longitude', digits=(12, 6))
|
||||
@@ -1 +0,0 @@
|
||||
from . import test_planner
|
||||
@@ -1,34 +0,0 @@
|
||||
from odoo.addons.sale_planner.tests.test_planner import TestPlanner
|
||||
|
||||
|
||||
class TestPlannerRoute(TestPlanner):
|
||||
def setUp(self):
|
||||
super(TestPlannerRoute, self).setUp()
|
||||
self.route_near = self.env['stock.warehouse.delivery.route'].create({
|
||||
'name': 'Route 1',
|
||||
'warehouse_id': self.warehouse_1.id,
|
||||
'latitude': 48.02995,
|
||||
'longitude': -122.14771,
|
||||
})
|
||||
self.route_far = self.env['stock.warehouse.delivery.route'].create({
|
||||
'name': 'Route Far',
|
||||
'warehouse_id': self.warehouse_1.id,
|
||||
'latitude': 47.82093,
|
||||
'longitude': -122.31513,
|
||||
})
|
||||
|
||||
def test_planner_creation(self):
|
||||
self.env['sale.order.line'].create({
|
||||
'order_id': self.so.id,
|
||||
'product_id': self.product_1.id,
|
||||
'name': 'demo',
|
||||
})
|
||||
both_wh_ids = self.both_wh_ids()
|
||||
planner = self.env['sale.order.make.plan'].with_context(warehouse_domain=[('id', 'in', both_wh_ids)],
|
||||
skip_plan_shipping=True).create({'order_id': self.so.id})
|
||||
self.assertTrue(planner.planning_option_ids, 'Must have one or more plans.')
|
||||
self.assertEqual(planner.planning_option_ids.delivery_route_id, self.route_near)
|
||||
self.so.partner_id.partner_latitude = 47.82093
|
||||
planner = self.env['sale.order.make.plan'].with_context(warehouse_domain=[('id', 'in', both_wh_ids)],
|
||||
skip_plan_shipping=True).create({'order_id': self.so.id})
|
||||
self.assertEqual(planner.planning_option_ids.delivery_route_id, self.route_far)
|
||||
@@ -1,18 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<record id="view_warehouse_inherit" model="ir.ui.view">
|
||||
<field name="name">stock.warehouse.inherit</field>
|
||||
<field name="model">stock.warehouse</field>
|
||||
<field name="inherit_id" ref="stock_delivery_route.view_warehouse_inherit" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='delivery_route_ids']/tree" position="inside">
|
||||
<field name="latitude"/>
|
||||
<field name="longitude"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='delivery_route_ids']/form//field[@name='warehouse_id']" position="after">
|
||||
<field name="latitude"/>
|
||||
<field name="longitude"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -1 +0,0 @@
|
||||
from . import order_planner
|
||||
@@ -1,38 +0,0 @@
|
||||
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')
|
||||
@@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<record id="view_plan_sale_order_inherit" model="ir.ui.view">
|
||||
<field name="name">view.plan.sale.order.inherit</field>
|
||||
<field name="model">sale.order.make.plan</field>
|
||||
<field name="inherit_id" ref="sale_planner.view_plan_sale_order"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='warehouse_id']" position="after">
|
||||
<field name="delivery_route_id"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user