diff --git a/purchase_customer_requisition/__manifest__.py b/purchase_customer_requisition/__manifest__.py index f6bbe42..69abb3d 100644 --- a/purchase_customer_requisition/__manifest__.py +++ b/purchase_customer_requisition/__manifest__.py @@ -18,7 +18,6 @@ "purchase_requisition", ], "data": [ - "security/ir.model.access.csv", "views/purchase_views.xml", "views/purchase_requisition_views.xml", ], diff --git a/purchase_customer_requisition/models/purchase_order_line.py b/purchase_customer_requisition/models/purchase_order_line.py index 214188d..1b2631d 100644 --- a/purchase_customer_requisition/models/purchase_order_line.py +++ b/purchase_customer_requisition/models/purchase_order_line.py @@ -1,7 +1,5 @@ from odoo import models, fields, api -import logging - -_logger = logging.getLogger(__name__) +from odoo.addons.purchase.models.purchase_order_line import PurchaseOrderLine as BasePOL class PurchaseOrderLine(models.Model): @@ -28,6 +26,21 @@ class PurchaseOrderLine(models.Model): line.price_unit = line.requisition_line_id.price_unit return res + def _compute_price_unit_and_date_planned_and_name(self): + super()._compute_price_unit_and_date_planned_and_name() + po_lines_with_requisition = self.filtered("requisition_id") + for line in po_lines_with_requisition: + line.price_unit = line.requisition_line_id.price_unit + po_lines_without_requisition = self - po_lines_with_requisition + to_compute_basic = self.env["purchase.order.line"] + for line in po_lines_without_requisition: + po_agreement_customers = line.order_id.requisition_id.customer_ids + customer = line._get_customer() + if po_agreement_customers and customer not in po_agreement_customers: + to_compute_basic |= line + func = BasePOL._compute_price_unit_and_date_planned_and_name + func(to_compute_basic) + @api.depends("requisition_id") def _compute_requisition_line_id(self): for line in self: @@ -39,11 +52,7 @@ class PurchaseOrderLine(models.Model): @api.depends("order_id.requisition_id", "product_id") def _compute_requisition_id(self): for line in self: - customer = line.sale_order_id.partner_id or line.group_id.partner_id - if not customer: - sale_order = line.move_dest_ids.group_id.sale_id - if len(sale_order) == 1: - customer = sale_order.partner_id + customer = self._get_customer() domain = [ "|", ("requisition_id.vendor_id", "=", line.order_id.partner_id.id), @@ -83,8 +92,17 @@ class PurchaseOrderLine(models.Model): req_id = requisition_lines[0].requisition_id line.requisition_id = req_id + def _get_customer(self): + self.ensure_one() + customer = self.sale_order_id.partner_id or self.group_id.partner_id + if not customer: + sale_order = self.move_dest_ids.group_id.sale_id + if len(sale_order) == 1: + customer = sale_order.partner_id + return customer + def _inverse_requisition_id(self): - pass + self._compute_price_unit_and_date_planned_and_name() def _find_candidate( self, diff --git a/purchase_customer_requisition/security/ir.model.access.csv b/purchase_customer_requisition/security/ir.model.access.csv deleted file mode 100644 index 97dd8b9..0000000 --- a/purchase_customer_requisition/security/ir.model.access.csv +++ /dev/null @@ -1 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink diff --git a/purchase_customer_requisition/tests/test_purchase_order.py b/purchase_customer_requisition/tests/test_purchase_order.py index ab4802a..4995ff5 100644 --- a/purchase_customer_requisition/tests/test_purchase_order.py +++ b/purchase_customer_requisition/tests/test_purchase_order.py @@ -1,7 +1,7 @@ from odoo.addons.sale_purchase_inter_company_rules.models.purchase_order import ( purchase_order, ) -from odoo.tests import TransactionCase, tagged +from odoo.tests import TransactionCase, tagged, Form from odoo import Command, fields from datetime import timedelta @@ -169,3 +169,12 @@ class TestPurchaseOrder(TransactionCase): self.assertEqual(purchase_order.order_line[0].price_unit, 1000) self.assertEqual(purchase_order.order_line[1].price_unit, 1500) + + def test_removing_line_agreement_recomputes_pricing(self): + purchase_order = self._generate_2_sales_1_purchase_clients_1_3() + purchase_order.requisition_id = False + + line = purchase_order.order_line[0] + line.requisition_id = False + + self.assertEqual(purchase_order.order_line[0].price_unit, 3000)