working on purchase_customer_requisition
This commit is contained in:
parent
99dca038d3
commit
ed848863f9
2 changed files with 89 additions and 42 deletions
|
|
@ -4,15 +4,12 @@ from odoo import models, fields, api
|
|||
class PurchaseOrderLine(models.Model):
|
||||
_inherit = "purchase.order.line"
|
||||
|
||||
customer_ids = fields.Many2many(
|
||||
# related='order_id.requisition_id.customer_ids',
|
||||
string="Customers",
|
||||
store=True,
|
||||
help="Customers associated with this purchase order line",
|
||||
)
|
||||
|
||||
requisition_id = fields.Many2one(
|
||||
related="order_id.requisition_id", string="Purchase Requisition", store=True
|
||||
comodel_name="purchase.requisition",
|
||||
string="Agreement",
|
||||
store=True,
|
||||
compute="_compute_requisition_id",
|
||||
inverse="_inverse_requisition_id",
|
||||
)
|
||||
|
||||
requisition_name = fields.Char(
|
||||
|
|
@ -20,13 +17,49 @@ class PurchaseOrderLine(models.Model):
|
|||
string="Agreement",
|
||||
)
|
||||
|
||||
def _get_product_purchase_description(self, product_lang):
|
||||
name = super()._get_product_purchase_description(product_lang)
|
||||
if self.requisition_id:
|
||||
name = f"[REQ/{self.requisition_id.name}] {name}"
|
||||
if self.customer_ids:
|
||||
name = f"[{', '.join(self.customer_ids.mapped('name'))}] {name}"
|
||||
return name
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
return super().create(vals_list)
|
||||
|
||||
@api.depends("order_id.requisition_id", "product_id")
|
||||
def _compute_requisition_id(self):
|
||||
for line in self:
|
||||
customer = line.sale_order_id.partner_id
|
||||
domain = [
|
||||
("requisition_id.vendor_id", "=", line.order_id.partner_id.id),
|
||||
("product_id", "=", line.product_id.id),
|
||||
]
|
||||
requisition = self.order_id.requisition_id
|
||||
if customer:
|
||||
domain += [
|
||||
"|",
|
||||
("requisition_id.customer_ids", "in", [customer.id]),
|
||||
("requisition_id.customer_ids", "=", False),
|
||||
]
|
||||
else:
|
||||
domain += [
|
||||
"|",
|
||||
(
|
||||
"requisition_id",
|
||||
"=",
|
||||
requisition.id,
|
||||
),
|
||||
("requisition_id.customer_ids", "=", False),
|
||||
]
|
||||
requisition_lines = self.env["purchase.requisition.line"].search(domain)
|
||||
# If the current order's requisition_id is in the possible lines, use it
|
||||
if line.order_id.requisition_id and requisition_lines:
|
||||
line.requisition_id = requisition_lines.filtered(
|
||||
lambda req_line: req_line.requisition_id
|
||||
== line.order_id.requisition_id
|
||||
)
|
||||
if not line.requisition_id and requisition_lines:
|
||||
line.requisition_id = requisition_lines[0]
|
||||
else:
|
||||
line.requisition_id = False
|
||||
|
||||
def _inverse_requisition_id(self):
|
||||
pass
|
||||
|
||||
@api.model
|
||||
def _prepare_purchase_order_line(
|
||||
|
|
@ -48,19 +81,6 @@ class PurchaseOrderLine(models.Model):
|
|||
res["product_qty"] = product_qty
|
||||
return res
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
lines = super().create(vals_list)
|
||||
for line in lines:
|
||||
if line.name:
|
||||
name = line.name
|
||||
if line.requisition_id:
|
||||
name = f"[REQ/{line.requisition_id.name}] {name}"
|
||||
if line.customer_ids:
|
||||
name = f"[{', '.join(line.customer_ids.mapped('name'))}] {name}"
|
||||
line.name = name
|
||||
return lines
|
||||
|
||||
def _find_candidate(
|
||||
self,
|
||||
product_id,
|
||||
|
|
|
|||
|
|
@ -8,34 +8,59 @@ class TestPurchaseOrder(TransactionCase):
|
|||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.mto_route = cls.env.ref("stock.route_warehouse0_mto")
|
||||
cls.buy_route = cls.env.ref("purchase_stock.route_warehouse0_buy")
|
||||
cls.mto_route.active = True
|
||||
cls.supplier = cls.env.ref("base.res_partner_18")
|
||||
cls.client_1 = cls.env.ref("base.res_partner_2")
|
||||
cls.client_2 = cls.env.ref("base.res_partner_3")
|
||||
cls.client_3 = cls.env.ref("base.res_partner_4")
|
||||
cls.product_1 = cls.env.ref("product.product_delivery_01")
|
||||
cls.product_2 = cls.env.ref("product.product_delivery_02")
|
||||
cls.product_1 = cls.env["product.product"].create(
|
||||
{
|
||||
"name": "SuperProduct",
|
||||
"is_storable": True,
|
||||
"route_ids": [(6, 0, (cls.mto_route + cls.buy_route).ids)],
|
||||
"seller_ids": [
|
||||
(
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"partner_id": cls.supplier.id,
|
||||
},
|
||||
)
|
||||
],
|
||||
}
|
||||
)
|
||||
|
||||
cls.env["stock.rule"].search(
|
||||
[
|
||||
("action", "=", "pull"),
|
||||
(
|
||||
"location_dest_id",
|
||||
"=",
|
||||
cls.env.ref("stock.stock_location_customers").id,
|
||||
),
|
||||
]
|
||||
).write({"procure_method": "mts_else_mto"})
|
||||
cls.product_2 = cls.env["product.product"].create(
|
||||
{
|
||||
"name": "SuperProduct2",
|
||||
"is_storable": True,
|
||||
"route_ids": [(6, 0, (cls.mto_route + cls.buy_route).ids)],
|
||||
"seller_ids": [
|
||||
(
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"partner_id": cls.supplier.id,
|
||||
},
|
||||
)
|
||||
],
|
||||
}
|
||||
)
|
||||
|
||||
cls.env["product.supplierinfo"].create(
|
||||
[
|
||||
{
|
||||
"partner_id": cls.supplier.id,
|
||||
"product_id": cls.product_1.id,
|
||||
"product_tmpl_id": cls.product_1.product_tmpl_id.id,
|
||||
"price": 2000,
|
||||
},
|
||||
{
|
||||
"partner_id": cls.supplier.id,
|
||||
"product_id": cls.product_2.id,
|
||||
"product_tmpl_id": cls.product_1.product_tmpl_id.id,
|
||||
"price": 3000,
|
||||
},
|
||||
]
|
||||
|
|
@ -44,7 +69,7 @@ class TestPurchaseOrder(TransactionCase):
|
|||
cls.agreement_1 = cls.env["purchase.requisition"].create(
|
||||
{
|
||||
"name": "ATRACK 123",
|
||||
"vendor_id": 1,
|
||||
"vendor_id": cls.supplier.id,
|
||||
"customer_ids": [Command.set([cls.client_1.id, cls.client_2.id])],
|
||||
"line_ids": [
|
||||
Command.create(
|
||||
|
|
@ -70,7 +95,7 @@ class TestPurchaseOrder(TransactionCase):
|
|||
cls.agreement_2 = cls.env["purchase.requisition"].create(
|
||||
{
|
||||
"name": "ATRACK 456",
|
||||
"vendor_id": 1,
|
||||
"vendor_id": cls.supplier.id,
|
||||
"customer_ids": [Command.set([cls.client_3.id])],
|
||||
"line_ids": [
|
||||
Command.create(
|
||||
|
|
@ -104,4 +129,6 @@ class TestPurchaseOrder(TransactionCase):
|
|||
sale_order.action_confirm()
|
||||
|
||||
purchase_line = sale_order.order_line[0].purchase_line_ids
|
||||
self.assertTrue(purchase_line)
|
||||
self.assertEqual(purchase_line.order_id.partner_id, self.supplier)
|
||||
self.assertEqual(purchase_line.requisition_id, self.agreement_1)
|
||||
|
|
|
|||
Loading…
Reference in a new issue