From 2738ade92d1cd897e346eac73510aab5fbea33fc Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Thu, 16 Jan 2025 08:25:32 -0500 Subject: [PATCH] further fixes to purchase_customer_requisition --- .../models/purchase_order_line.py | 18 +++---- .../tests/test_purchase_order.py | 51 +++++++++++++++++-- 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/purchase_customer_requisition/models/purchase_order_line.py b/purchase_customer_requisition/models/purchase_order_line.py index c596d61..b431e73 100644 --- a/purchase_customer_requisition/models/purchase_order_line.py +++ b/purchase_customer_requisition/models/purchase_order_line.py @@ -12,11 +12,6 @@ class PurchaseOrderLine(models.Model): inverse="_inverse_requisition_id", ) - requisition_name = fields.Char( - related="requisition_id.name", - string="Agreement", - ) - @api.model_create_multi def create(self, vals_list): return super().create(vals_list) @@ -33,7 +28,7 @@ class PurchaseOrderLine(models.Model): "|", ("requisition_id.vendor_id", "=", line.order_id.partner_id.id), ( - "requisition_id.vendor_id.child_ids.commercial_partner_id", + "requisition_id.vendor_id.commercial_partner_id", "=", line.order_id.partner_id.id, ), @@ -58,15 +53,16 @@ class PurchaseOrderLine(models.Model): ] requisition_lines = self.env["purchase.requisition.line"].search(domain) # If the current order's requisition_id is in the possible lines, use it + req_id = False if line.order_id.requisition_id and requisition_lines: - line.requisition_id = requisition_lines.filtered( + req_id = requisition_lines.filtered( lambda req_line: req_line.requisition_id == line.order_id.requisition_id ).requisition_id - if not line.requisition_id and requisition_lines: - line.requisition_id = requisition_lines[0].requisition_id - else: - line.requisition_id = False + if not req_id and requisition_lines: + req_id = requisition_lines[0].requisition_id + line.requisition_id = req_id + # TODO: Try to guess based on the other lines on the PO if there is no linked SO line but there are other SOs in the purchase order's _get_sale_orders() def _inverse_requisition_id(self): pass diff --git a/purchase_customer_requisition/tests/test_purchase_order.py b/purchase_customer_requisition/tests/test_purchase_order.py index a03a623..4137610 100644 --- a/purchase_customer_requisition/tests/test_purchase_order.py +++ b/purchase_customer_requisition/tests/test_purchase_order.py @@ -24,7 +24,7 @@ class TestPurchaseOrder(TransactionCase): Command.create( { "partner_id": cls.supplier.id, - "price": 1000, + "price": 3000, }, ) ], @@ -40,7 +40,7 @@ class TestPurchaseOrder(TransactionCase): Command.create( { "partner_id": cls.supplier.id, - "price": 2000, + "price": 5000, }, ) ], @@ -49,7 +49,6 @@ class TestPurchaseOrder(TransactionCase): cls.agreement_1 = cls.env["purchase.requisition"].create( { - "name": "ATRACK 123", "vendor_id": cls.supplier.id, "customer_ids": [Command.set([cls.client_1.id, cls.client_2.id])], "line_ids": [ @@ -75,7 +74,6 @@ class TestPurchaseOrder(TransactionCase): cls.agreement_1.action_confirm() cls.agreement_2 = cls.env["purchase.requisition"].create( { - "name": "ATRACK 456", "vendor_id": cls.supplier.id, "customer_ids": [Command.set([cls.client_3.id])], "line_ids": [ @@ -113,3 +111,48 @@ class TestPurchaseOrder(TransactionCase): purchase_line = sale_order._get_purchase_orders()[0].order_line[0] self.assertEqual(purchase_line.order_id.partner_id, self.supplier) self.assertEqual(purchase_line.requisition_id, self.agreement_1) + + def test_competing_sale_orders_get_two_lines(self): + sale_order_1 = self.env["sale.order"].create( + { + "partner_id": self.client_1.id, + "order_line": [ + Command.create( + { + "product_id": self.product_1.id, + "product_uom_qty": 50, + } + ) + ], + } + ) + sale_order_1.action_confirm() + sale_order_2 = self.env["sale.order"].create( + { + "partner_id": self.client_2.id, + "order_line": [ + Command.create( + { + "product_id": self.product_1.id, + "product_uom_qty": 50, + } + ) + ], + } + ) + sale_order_2.action_confirm() + + purchase_order = sale_order_1._get_purchase_orders()[0] + self.assertEqual(len(purchase_order.order_line), 2) + self.assertEqual( + purchase_order.order_line[0].requisition_id, + self.agreement_1, + f"PO line for Partner 1 should have requisition {self.agreement_1.name}, not {purchase_order.order_line[0].requisition_id.name}", + ) + self.assertEqual( + purchase_order.order_line[1].requisition_id, + self.agreement_2, + f"PO line for Partner 2 should have requisition {self.agreement_2.name}, not {purchase_order.order_line[1].requisition_id.name}" + f"PO line has sale order {purchase_order.order_line[1].sale_order_id} and sale line {purchase_order.order_line[1].sale_line_id}" + f"PO has sales orders {purchase_order._get_sale_orders()}", + )