further fixes to purchase_customer_requisition
This commit is contained in:
parent
f54ff1496f
commit
2738ade92d
2 changed files with 54 additions and 15 deletions
|
|
@ -12,11 +12,6 @@ class PurchaseOrderLine(models.Model):
|
||||||
inverse="_inverse_requisition_id",
|
inverse="_inverse_requisition_id",
|
||||||
)
|
)
|
||||||
|
|
||||||
requisition_name = fields.Char(
|
|
||||||
related="requisition_id.name",
|
|
||||||
string="Agreement",
|
|
||||||
)
|
|
||||||
|
|
||||||
@api.model_create_multi
|
@api.model_create_multi
|
||||||
def create(self, vals_list):
|
def create(self, vals_list):
|
||||||
return super().create(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", "=", 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,
|
line.order_id.partner_id.id,
|
||||||
),
|
),
|
||||||
|
|
@ -58,15 +53,16 @@ class PurchaseOrderLine(models.Model):
|
||||||
]
|
]
|
||||||
requisition_lines = self.env["purchase.requisition.line"].search(domain)
|
requisition_lines = self.env["purchase.requisition.line"].search(domain)
|
||||||
# If the current order's requisition_id is in the possible lines, use it
|
# 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:
|
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
|
lambda req_line: req_line.requisition_id
|
||||||
== line.order_id.requisition_id
|
== line.order_id.requisition_id
|
||||||
).requisition_id
|
).requisition_id
|
||||||
if not line.requisition_id and requisition_lines:
|
if not req_id and requisition_lines:
|
||||||
line.requisition_id = requisition_lines[0].requisition_id
|
req_id = requisition_lines[0].requisition_id
|
||||||
else:
|
line.requisition_id = req_id
|
||||||
line.requisition_id = False
|
# 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):
|
def _inverse_requisition_id(self):
|
||||||
pass
|
pass
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ class TestPurchaseOrder(TransactionCase):
|
||||||
Command.create(
|
Command.create(
|
||||||
{
|
{
|
||||||
"partner_id": cls.supplier.id,
|
"partner_id": cls.supplier.id,
|
||||||
"price": 1000,
|
"price": 3000,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
|
@ -40,7 +40,7 @@ class TestPurchaseOrder(TransactionCase):
|
||||||
Command.create(
|
Command.create(
|
||||||
{
|
{
|
||||||
"partner_id": cls.supplier.id,
|
"partner_id": cls.supplier.id,
|
||||||
"price": 2000,
|
"price": 5000,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
|
|
@ -49,7 +49,6 @@ class TestPurchaseOrder(TransactionCase):
|
||||||
|
|
||||||
cls.agreement_1 = cls.env["purchase.requisition"].create(
|
cls.agreement_1 = cls.env["purchase.requisition"].create(
|
||||||
{
|
{
|
||||||
"name": "ATRACK 123",
|
|
||||||
"vendor_id": cls.supplier.id,
|
"vendor_id": cls.supplier.id,
|
||||||
"customer_ids": [Command.set([cls.client_1.id, cls.client_2.id])],
|
"customer_ids": [Command.set([cls.client_1.id, cls.client_2.id])],
|
||||||
"line_ids": [
|
"line_ids": [
|
||||||
|
|
@ -75,7 +74,6 @@ class TestPurchaseOrder(TransactionCase):
|
||||||
cls.agreement_1.action_confirm()
|
cls.agreement_1.action_confirm()
|
||||||
cls.agreement_2 = cls.env["purchase.requisition"].create(
|
cls.agreement_2 = cls.env["purchase.requisition"].create(
|
||||||
{
|
{
|
||||||
"name": "ATRACK 456",
|
|
||||||
"vendor_id": cls.supplier.id,
|
"vendor_id": cls.supplier.id,
|
||||||
"customer_ids": [Command.set([cls.client_3.id])],
|
"customer_ids": [Command.set([cls.client_3.id])],
|
||||||
"line_ids": [
|
"line_ids": [
|
||||||
|
|
@ -113,3 +111,48 @@ class TestPurchaseOrder(TransactionCase):
|
||||||
purchase_line = sale_order._get_purchase_orders()[0].order_line[0]
|
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.order_id.partner_id, self.supplier)
|
||||||
self.assertEqual(purchase_line.requisition_id, self.agreement_1)
|
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()}",
|
||||||
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue