Skip to content

Commit 7608303

Browse files
committed
[ADD] sale_order_wh_from_delivery_carrier: Module added.
1 parent 05fe2ce commit 7608303

15 files changed

+171
-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,14 @@
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+
"data": [
10+
"views/delivery_carrier_views.xml",
11+
],
12+
"installable": True,
13+
"license": "AGPL-3",
14+
}
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,11 @@
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",
9+
string="SO Warehouse",
10+
help="Default Warehouse for sale where uses current Delivery Carrier",
11+
)
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,4 @@
1+
* Cetmix <cetmix.com>
2+
3+
* Ivan Sokolov
4+
* Maksim Shurupov
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,88 @@
1+
from odoo.tests import Form, TransactionCase, tagged
2+
3+
4+
@tagged("post_install", "-at_install")
5+
class TestModuleFlow(TransactionCase):
6+
@classmethod
7+
def setUpClass(cls):
8+
super().setUpClass()
9+
cls.local_delivery = cls.env.ref(
10+
"delivery.delivery_local_delivery", raise_if_not_found=False
11+
)
12+
cls.poste_delivery = cls.env.ref(
13+
"delivery.delivery_carrier", raise_if_not_found=False
14+
)
15+
cls.warehouse0 = cls.env["stock.warehouse"].create(
16+
{
17+
"name": "Test Warehouse #1",
18+
"code": "TWH-1",
19+
}
20+
)
21+
cls.warehouse1 = cls.env["stock.warehouse"].create(
22+
{
23+
"name": "Test Warehouse #2",
24+
"code": "TWH-2",
25+
}
26+
)
27+
cls.local_delivery.write({"so_warehouse_id": cls.warehouse0.id})
28+
cls.poste_delivery.write({"so_warehouse_id": cls.warehouse1.id})
29+
cls.saleperson_warehouse = cls.env.user._get_default_warehouse_id()
30+
31+
form = Form(
32+
cls.env["sale.order"],
33+
)
34+
form.partner_id = cls.env.ref("base.res_partner_2", raise_if_not_found=False)
35+
with form.order_line.new() as line:
36+
line.product_id = cls.env.ref(
37+
"product.product_product_25", raise_if_not_found=False
38+
)
39+
cls.sale_order = form.save()
40+
41+
def _set_shipping_method(self, delivery_method):
42+
form = Form(
43+
self.env["choose.delivery.carrier"].with_context(
44+
default_order_id=self.sale_order.id,
45+
),
46+
view="delivery.choose_delivery_carrier_view_form",
47+
)
48+
form.carrier_id = delivery_method
49+
shipping = form.save()
50+
shipping.button_confirm()
51+
52+
def test_sale_order_warehouse_default(self):
53+
"""Test flow when set order warehouse by default"""
54+
self.assertEqual(
55+
self.saleperson_warehouse,
56+
self.sale_order.warehouse_id,
57+
msg="Order Warehouse must be equal to saleperson default warehouse",
58+
)
59+
60+
def test_sale_order_warehouse_custom(self):
61+
"""Test flow when set order warehouse by 'Shipping Method' record"""
62+
self._set_shipping_method(self.local_delivery)
63+
self.assertEqual(
64+
self.warehouse0,
65+
self.sale_order.warehouse_id,
66+
msg="Order Warehouse must be equal to 'Test Warehouse #1'",
67+
)
68+
69+
def test_sale_order_carrier_id_confirmation(self):
70+
"""Test flow when change 'Shipping Method' after confirmation"""
71+
self._set_shipping_method(self.local_delivery)
72+
self.assertEqual(
73+
self.sale_order.warehouse_id.id,
74+
self.warehouse0.id,
75+
msg="Order Warehouse must be equal to 'Test Warehouse #1'",
76+
)
77+
self.sale_order.action_confirm()
78+
self._set_shipping_method(self.poste_delivery)
79+
self.assertNotEqual(
80+
self.sale_order.warehouse_id.id,
81+
self.warehouse1.id,
82+
msg="Order Warehouse must not be equal to 'Test Warehouse #2'",
83+
)
84+
self.assertEqual(
85+
self.sale_order.warehouse_id.id,
86+
self.warehouse0.id,
87+
msg="Order Warehouse must be equal to 'Test Warehouse #1'",
88+
)
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+
)

test-requirements.txt

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
odoo-test-helper
22
vcrpy
33
vcrpy-unittest
4+
odoo-addon-delivery_roulier @ git+https://github.com/OCA/delivery-carrier.git@refs/pull/731/head#subdirectory=setup/delivery_roulier
5+
odoo-addon-stock_picking_report_delivery_cost @ git+https://github.com/OCA/delivery-carrier.git@refs/pull/731/head#subdirectory=setup/stock_picking_report_delivery_cost

0 commit comments

Comments
 (0)