diff --git a/purchase_sale_inter_company/models/res_company.py b/purchase_sale_inter_company/models/res_company.py
index cab6b7e9f49..26e5d2da575 100644
--- a/purchase_sale_inter_company/models/res_company.py
+++ b/purchase_sale_inter_company/models/res_company.py
@@ -47,6 +47,13 @@ class ResCompany(models.Model):
default="raise",
help="Pick action to perform on sync picking failure",
)
+ sync_picking_state = fields.Boolean(
+ string="Sync the receipt state with the delivery state",
+ default=lambda p: p.sync_picking,
+ help="State of receipt picking syncs with state of the delivery "
+ "from the source company. Note this disallows user to manually "
+ "correct or change a picking that did not sync properly.",
+ )
block_po_manual_picking_validation = fields.Boolean(
string="Block manual validation of picking in the destination company",
)
diff --git a/purchase_sale_inter_company/models/res_config.py b/purchase_sale_inter_company/models/res_config.py
index 3116b653a12..cb717b11c89 100644
--- a/purchase_sale_inter_company/models/res_config.py
+++ b/purchase_sale_inter_company/models/res_config.py
@@ -49,6 +49,9 @@ class InterCompanyRulesConfig(models.TransientModel):
)
sync_picking_failure_action = fields.Selection(
related="company_id.sync_picking_failure_action",
+ )
+ sync_picking_state = fields.Boolean(
+ related="company_id.sync_picking_state",
readonly=False,
)
block_po_manual_picking_validation = fields.Boolean(
diff --git a/purchase_sale_inter_company/models/stock_picking.py b/purchase_sale_inter_company/models/stock_picking.py
index 1df7f835fb9..409bd4f6f0c 100644
--- a/purchase_sale_inter_company/models/stock_picking.py
+++ b/purchase_sale_inter_company/models/stock_picking.py
@@ -21,7 +21,8 @@ def _compute_state(self):
res = super()._compute_state()
for picking in self:
if (
- picking.intercompany_picking_id
+ picking.company_id.sync_picking_state
+ and picking.intercompany_picking_id
and picking.picking_type_code == "incoming"
and picking.state not in ["done", "cancel"]
):
diff --git a/purchase_sale_inter_company/tests/test_inter_company_purchase_sale.py b/purchase_sale_inter_company/tests/test_inter_company_purchase_sale.py
index 379148567da..55017d9e83b 100644
--- a/purchase_sale_inter_company/tests/test_inter_company_purchase_sale.py
+++ b/purchase_sale_inter_company/tests/test_inter_company_purchase_sale.py
@@ -326,6 +326,8 @@ def test_confirm_several_picking(self):
def test_sync_picking(self):
self.company_a.sync_picking = True
self.company_b.sync_picking = True
+ self.company_a.sync_picking_state = True
+ self.company_b.sync_picking_state = True
purchase = self._create_purchase_order(
self.partner_company_b, self.consumable_product
@@ -378,10 +380,15 @@ def test_sync_picking(self):
# A backorder should have been made for both
self.assertTrue(len(sale.picking_ids) > 1)
self.assertEqual(len(purchase.picking_ids), len(sale.picking_ids))
+ # The original orders should now be done.
+ self.assertEqual(so_picking_id.state, "done")
+ self.assertEqual(po_picking_id.state, "done")
def test_sync_picking_no_backorder(self):
self.company_a.sync_picking = True
self.company_b.sync_picking = True
+ self.company_a.sync_picking_state = True
+ self.company_b.sync_picking_state = True
purchase = self._create_purchase_order(
self.partner_company_b, self.consumable_product
@@ -455,6 +462,8 @@ def test_sync_picking_lot(self):
)
self.company_a.sync_picking = True
self.company_b.sync_picking = True
+ self.company_a.sync_picking_state = True
+ self.company_b.sync_picking_state = True
purchase = self._create_purchase_order(
self.partner_company_b,
@@ -529,6 +538,9 @@ def test_sync_picking_lot(self):
# A backorder should have been made for both
self.assertTrue(len(sale.picking_ids) > 1)
self.assertEqual(len(purchase.picking_ids), len(sale.picking_ids))
+ # The original orders should now be done.
+ self.assertEqual(so_picking_id.state, "done")
+ self.assertEqual(po_picking_id.state, "done")
def test_sync_picking_same_product_multiple_lines(self):
"""
@@ -661,6 +673,10 @@ def test_update_open_sale_order(self):
"3.0 Units of Consumable Product 2.+instead of 8.0 Units", re.DOTALL
),
)
+ print(so_picking_id.state)
+ po_picking_id = purchase.picking_ids
+ print(po_picking_id.state)
+ # Upon confirm, I expect here an issue
def test_block_manual_validation(self):
"""
@@ -669,6 +685,8 @@ def test_block_manual_validation(self):
"""
self.company_a.sync_picking = True
self.company_b.sync_picking = True
+ self.company_a.sync_picking_state = True
+ self.company_b.sync_picking_state = True
self.company_a.block_po_manual_picking_validation = True
self.company_b.block_po_manual_picking_validation = True
purchase = self._create_purchase_order(
diff --git a/purchase_sale_inter_company/views/res_config_view.xml b/purchase_sale_inter_company/views/res_config_view.xml
index 46f1f59ef0f..e8601893730 100644
--- a/purchase_sale_inter_company/views/res_config_view.xml
+++ b/purchase_sale_inter_company/views/res_config_view.xml
@@ -62,6 +62,12 @@
attrs="{'invisible': [('sync_picking_failure_action', '!=', 'notify')], 'required': [('sync_picking_failure_action', '=', 'notify')]}"
class="oe_inline"
/>
+
+