Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e807ab2

Browse files
geomer198ivs-cetmix
authored andcommittedOct 14, 2023
[ADD] sale_order_wh_from_delivery_carrier: Module added.
1 parent 27d67a5 commit e807ab2

File tree

14 files changed

+163
-0
lines changed

14 files changed

+163
-0
lines changed
 

‎sale_order_wh_from_delivery_carrier/README.rst

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import models
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"name": "Sale Order WH from Delivery Carrier",
3+
"version": "16.0.1.0.0",
4+
"category": "Delivery",
5+
"summary": "Sale Order WH from Delivery Carrier",
6+
"depends": ["sale_stock", "delivery"],
7+
"website": "https://github.com/OCA/delivery-carrier",
8+
"author": "Cetmix, Odoo Community Association (OCA)",
9+
"maintainers": ["geomer198", "CetmixGitDrone"],
10+
"data": [
11+
"views/delivery_carrier_views.xml",
12+
],
13+
"installable": True,
14+
"license": "AGPL-3",
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from . import delivery_carrier
2+
from . import sale_order
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from odoo import fields, models
2+
3+
4+
class DeliveryCarrier(models.Model):
5+
_inherit = "delivery.carrier"
6+
7+
so_warehouse_id = fields.Many2one(
8+
comodel_name="stock.warehouse", string="SO Warehouse"
9+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from odoo import api, models
2+
3+
4+
class SaleOrder(models.Model):
5+
_inherit = "sale.order"
6+
7+
@api.depends(
8+
"user_id", "company_id", "state", "carrier_id", "carrier_id.so_warehouse_id"
9+
)
10+
def _compute_warehouse_id(self):
11+
# Set warehouse by shipping method
12+
so_with_shipping = self.filtered("carrier_id")
13+
for order in so_with_shipping:
14+
if order.state == "draft" and order.carrier_id.so_warehouse_id:
15+
order.warehouse_id = order.carrier_id.so_warehouse_id
16+
return super(SaleOrder, self - so_with_shipping)._compute_warehouse_id()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Go to `Sales` -> `Settings` -> `Shipping methods` and select a shipping method
2+
3+
Set warehouse in the "SO Warehouse" field.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* Cetmix <https://cetmix.com/>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Create a new quotation and select a shipping method.
2+
3+
If selected shipping method has a SO warehouse defined
4+
this warehouse will be automatically set in the quotation.
5+
6+
**Note**:
7+
warehouse will be NOT updated if Sales Order is already confirmed.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import test_module_flow
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
from odoo.tests import Form, TransactionCase
2+
3+
4+
class TestModuleFlow(TransactionCase):
5+
def setUp(self):
6+
super(TestModuleFlow, self).setUp()
7+
self.local_delivery = self.env.ref(
8+
"delivery.delivery_local_delivery", raise_if_not_found=False
9+
)
10+
self.poste_delivery = self.env.ref(
11+
"delivery.delivery_carrier", raise_if_not_found=False
12+
)
13+
self.warehouse0 = self.env["stock.warehouse"].create(
14+
{
15+
"name": "Test Warehouse #1",
16+
"code": "TWH-1",
17+
}
18+
)
19+
self.warehouse1 = self.env["stock.warehouse"].create(
20+
{
21+
"name": "Test Warehouse #2",
22+
"code": "TWH-2",
23+
}
24+
)
25+
self.local_delivery.write({"so_warehouse_id": self.warehouse0.id})
26+
self.poste_delivery.write({"so_warehouse_id": self.warehouse1.id})
27+
self.saleperson_warehouse = self.env.user._get_default_warehouse_id()
28+
29+
form = Form(
30+
self.env["sale.order"],
31+
)
32+
form.partner_id = self.env.ref("base.res_partner_2", raise_if_not_found=False)
33+
with form.order_line.new() as line:
34+
line.product_id = self.env.ref(
35+
"product.product_product_25", raise_if_not_found=False
36+
)
37+
self.sale_order = form.save()
38+
39+
def _set_shipping_method(self, delivery_method):
40+
form = Form(
41+
self.env["choose.delivery.carrier"].with_context(
42+
default_order_id=self.sale_order.id,
43+
),
44+
view="delivery.choose_delivery_carrier_view_form",
45+
)
46+
form.carrier_id = delivery_method
47+
shipping = form.save()
48+
shipping.button_confirm()
49+
50+
def test_sale_order_warehouse_default(self):
51+
"""Test flow when set order warehouse by default"""
52+
self.assertEqual(
53+
self.saleperson_warehouse,
54+
self.sale_order.warehouse_id,
55+
msg="Order Warehouse must be equal to saleperson default warehouse",
56+
)
57+
58+
def test_sale_order_warehouse_custom(self):
59+
"""Test flow when set order warehouse by 'Shipping Method' record"""
60+
self._set_shipping_method(self.local_delivery)
61+
self.assertEqual(
62+
self.warehouse0,
63+
self.sale_order.warehouse_id,
64+
msg="Order Warehouse must be equal to 'Test Warehouse #1'",
65+
)
66+
67+
def test_sale_order_carrier_id_confirmation(self):
68+
"""Test flow when change 'Shipping Method' after confirmation"""
69+
self._set_shipping_method(self.local_delivery)
70+
self.assertEqual(
71+
self.sale_order.warehouse_id.id,
72+
self.warehouse0.id,
73+
msg="Order Warehouse must be equal to 'Test Warehouse #1'",
74+
)
75+
self.sale_order.action_confirm()
76+
self._set_shipping_method(self.poste_delivery)
77+
self.assertNotEqual(
78+
self.sale_order.warehouse_id.id,
79+
self.warehouse1.id,
80+
msg="Order Warehouse must not be equal to 'Test Warehouse #2'",
81+
)
82+
self.assertEqual(
83+
self.sale_order.warehouse_id.id,
84+
self.warehouse0.id,
85+
msg="Order Warehouse must be equal to 'Test Warehouse #1'",
86+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<odoo>
3+
4+
<record id="view_delivery_carrier_form" model="ir.ui.view">
5+
<field name="name">delivery.carrier.so.warehouse.form</field>
6+
<field name="model">delivery.carrier</field>
7+
<field name="inherit_id" ref="delivery.view_delivery_carrier_form" />
8+
<field name="arch" type="xml">
9+
<field name="amount" position="after">
10+
<field name="so_warehouse_id" />
11+
</field>
12+
</field>
13+
</record>
14+
15+
</odoo>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../../../sale_order_wh_from_delivery_carrier
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import setuptools
2+
3+
setuptools.setup(
4+
setup_requires=['setuptools-odoo'],
5+
odoo_addon=True,
6+
)

0 commit comments

Comments
 (0)
Please sign in to comment.