From e6ee1fd5705a21abd4ff4a7b2d25517ec3cddc80 Mon Sep 17 00:00:00 2001 From: David Alonso // Solvos Date: Fri, 14 Jun 2024 13:05:38 +0200 Subject: [PATCH] [FIX] purchase_order_type: preserve order type when matches company Before this fix, when onchange event for company_id was fired, type for purchase order was always set, then sometimes overwritten, even if former order type was compatible with the new company. This cause an incompatibility with e.g. purchase_order_type_dashboard. When PO creation form is accesed coming from PO dashboard, selected order type was actually igored, because onchange for company was fired and order type overwritten. This fix it. --- purchase_order_type/models/purchase_order.py | 6 +++++- purchase_order_type/tests/test_purchase_order_type.py | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/purchase_order_type/models/purchase_order.py b/purchase_order_type/models/purchase_order.py index 19e7d075106..d8d720f226d 100644 --- a/purchase_order_type/models/purchase_order.py +++ b/purchase_order_type/models/purchase_order.py @@ -64,4 +64,8 @@ def _default_order_type(self): @api.onchange("company_id") def _onchange_company(self): - self.order_type = self._default_order_type() + if not self.order_type or ( + self.order_type + and self.order_type.company_id not in [self.company_id, False] + ): + self.order_type = self._default_order_type() diff --git a/purchase_order_type/tests/test_purchase_order_type.py b/purchase_order_type/tests/test_purchase_order_type.py index eb576f80c4d..2be90537345 100644 --- a/purchase_order_type/tests/test_purchase_order_type.py +++ b/purchase_order_type/tests/test_purchase_order_type.py @@ -75,6 +75,9 @@ def test_purchase_order_change_company(self): order.onchange_partner_id() self.assertEqual(order.order_type, self.type2) order._onchange_company() + self.assertEqual(order.order_type, self.type2) + order.write({"order_type": False}) + order._onchange_company() self.assertEqual(order.order_type, order._default_order_type()) def test_purchase_order_type_company_error(self):