mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
[IMP] mrp_bom_attribute_match: improve setUpClass
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
from odoo import Command
|
||||
from odoo.models import BaseModel
|
||||
from odoo.tests import Form, TransactionCase
|
||||
|
||||
|
||||
@@ -5,130 +7,162 @@ class TestMrpBomAttributeMatchBase(TransactionCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls._create_products(cls)
|
||||
cls._create_boms(cls)
|
||||
|
||||
def _create_products(self):
|
||||
self.warehouse = self.env.ref("stock.warehouse0")
|
||||
route_manufacture = self.warehouse.manufacture_pull_id.route_id.id
|
||||
self.product_sword = self.env["product.template"].create(
|
||||
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
|
||||
cls.warehouse = cls.env.ref("stock.warehouse0")
|
||||
cls.route_manufacture = cls.warehouse.manufacture_pull_id.route_id
|
||||
# Create products
|
||||
cls.product_sword = cls.env["product.template"].create(
|
||||
{
|
||||
"name": "Plastic Sword",
|
||||
"type": "product",
|
||||
}
|
||||
)
|
||||
self.product_surf = self.env["product.template"].create(
|
||||
cls.product_surf = cls.env["product.template"].create(
|
||||
{
|
||||
"name": "Surf",
|
||||
"type": "product",
|
||||
}
|
||||
)
|
||||
self.product_fin = self.env["product.template"].create(
|
||||
cls.product_fin = cls.env["product.template"].create(
|
||||
{
|
||||
"name": "Surf Fin",
|
||||
"type": "product",
|
||||
}
|
||||
)
|
||||
self.product_plastic = self.env["product.template"].create(
|
||||
cls.product_plastic = cls.env["product.template"].create(
|
||||
{
|
||||
"name": "Plastic Component",
|
||||
"type": "product",
|
||||
}
|
||||
)
|
||||
self.p1 = self.env["product.template"].create(
|
||||
cls.p1 = cls.env["product.template"].create(
|
||||
{
|
||||
"name": "P1",
|
||||
"type": "product",
|
||||
"route_ids": [(6, 0, [route_manufacture])],
|
||||
"route_ids": [Command.link(cls.route_manufacture.id)],
|
||||
}
|
||||
)
|
||||
self.p2 = self.env["product.template"].create(
|
||||
cls.p2 = cls.env["product.template"].create(
|
||||
{
|
||||
"name": "P2",
|
||||
"type": "product",
|
||||
"route_ids": [(6, 0, [route_manufacture])],
|
||||
"route_ids": [Command.link(cls.route_manufacture.id)],
|
||||
}
|
||||
)
|
||||
self.p3 = self.env["product.template"].create(
|
||||
cls.p3 = cls.env["product.template"].create(
|
||||
{
|
||||
"name": "P3",
|
||||
"type": "product",
|
||||
"route_ids": [(6, 0, [route_manufacture])],
|
||||
"route_ids": [Command.link(cls.route_manufacture.id)],
|
||||
}
|
||||
)
|
||||
self.product_9 = self.env["product.product"].create(
|
||||
cls.product_9 = cls.env["product.product"].create(
|
||||
{
|
||||
"name": "Paper",
|
||||
}
|
||||
)
|
||||
self.product_10 = self.env["product.product"].create(
|
||||
cls.product_10 = cls.env["product.product"].create(
|
||||
{
|
||||
"name": "Stone",
|
||||
}
|
||||
)
|
||||
self.product_attribute = self.env["product.attribute"].create(
|
||||
cls.product_attribute = cls.env["product.attribute"].create(
|
||||
{"name": "Colour", "display_type": "radio", "create_variant": "always"}
|
||||
)
|
||||
self.attribute_value_ids = self.env["product.attribute.value"].create(
|
||||
cls.attribute_value_ids = cls.env["product.attribute.value"].create(
|
||||
[
|
||||
{"name": "Cyan", "attribute_id": self.product_attribute.id},
|
||||
{"name": "Magenta", "attribute_id": self.product_attribute.id},
|
||||
{"name": "Cyan", "attribute_id": cls.product_attribute.id},
|
||||
{"name": "Magenta", "attribute_id": cls.product_attribute.id},
|
||||
]
|
||||
)
|
||||
self.plastic_attrs = self.env["product.template.attribute.line"].create(
|
||||
cls.plastic_attrs = cls.env["product.template.attribute.line"].create(
|
||||
{
|
||||
"attribute_id": self.product_attribute.id,
|
||||
"product_tmpl_id": self.product_plastic.id,
|
||||
"value_ids": [(6, 0, self.product_attribute.value_ids.ids)],
|
||||
"attribute_id": cls.product_attribute.id,
|
||||
"product_tmpl_id": cls.product_plastic.id,
|
||||
"value_ids": [Command.set(cls.product_attribute.value_ids.ids)],
|
||||
}
|
||||
)
|
||||
self.sword_attrs = self.env["product.template.attribute.line"].create(
|
||||
cls.sword_attrs = cls.env["product.template.attribute.line"].create(
|
||||
{
|
||||
"attribute_id": self.product_attribute.id,
|
||||
"product_tmpl_id": self.product_sword.id,
|
||||
"value_ids": [(6, 0, self.product_attribute.value_ids.ids)],
|
||||
"attribute_id": cls.product_attribute.id,
|
||||
"product_tmpl_id": cls.product_sword.id,
|
||||
"value_ids": [Command.set(cls.product_attribute.value_ids.ids)],
|
||||
}
|
||||
)
|
||||
# Create boms
|
||||
cls.bom_id = cls._create_bom(
|
||||
cls.product_sword,
|
||||
[
|
||||
dict(
|
||||
component_template_id=cls.product_plastic.id,
|
||||
product_qty=1,
|
||||
),
|
||||
],
|
||||
)
|
||||
cls.fin_bom_id = cls._create_bom(
|
||||
cls.product_fin,
|
||||
[
|
||||
dict(
|
||||
product_id=cls.product_plastic.product_variant_ids[0],
|
||||
product_qty=1,
|
||||
),
|
||||
],
|
||||
)
|
||||
cls.surf_bom_id = cls._create_bom(
|
||||
cls.product_surf,
|
||||
[
|
||||
dict(
|
||||
product_id=cls.product_fin.product_variant_ids[0],
|
||||
product_qty=1,
|
||||
),
|
||||
],
|
||||
)
|
||||
cls.p1_bom_id = cls._create_bom(
|
||||
cls.p1,
|
||||
[
|
||||
dict(
|
||||
product_id=cls.p2.product_variant_ids[0],
|
||||
product_qty=1,
|
||||
),
|
||||
],
|
||||
)
|
||||
cls.p2_bom_id = cls._create_bom(
|
||||
cls.p2,
|
||||
[
|
||||
dict(
|
||||
product_id=cls.p3.product_variant_ids[0],
|
||||
product_qty=1,
|
||||
),
|
||||
],
|
||||
)
|
||||
cls.p3_bom_id = cls._create_bom(
|
||||
cls.p3,
|
||||
[
|
||||
dict(
|
||||
product_id=cls.p1.product_variant_ids[0],
|
||||
product_qty=1,
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
def _create_boms(self):
|
||||
mrp_bom_form = Form(self.env["mrp.bom"])
|
||||
mrp_bom_form.product_tmpl_id = self.product_sword
|
||||
with mrp_bom_form.bom_line_ids.new() as line_form:
|
||||
line_form.component_template_id = self.product_plastic
|
||||
line_form.product_qty = 1
|
||||
self.bom_id = mrp_bom_form.save()
|
||||
|
||||
mrp_bom_form = Form(self.env["mrp.bom"])
|
||||
mrp_bom_form.product_tmpl_id = self.product_fin
|
||||
with mrp_bom_form.bom_line_ids.new() as line_form:
|
||||
line_form.product_id = self.product_plastic.product_variant_ids[0]
|
||||
line_form.product_qty = 1
|
||||
self.fin_bom_id = mrp_bom_form.save()
|
||||
|
||||
mrp_bom_form = Form(self.env["mrp.bom"])
|
||||
mrp_bom_form.product_tmpl_id = self.product_surf
|
||||
with mrp_bom_form.bom_line_ids.new() as line_form:
|
||||
line_form.product_id = self.product_fin.product_variant_ids[0]
|
||||
line_form.product_qty = 1
|
||||
self.surf_bom_id = mrp_bom_form.save()
|
||||
|
||||
mrp_bom_form = Form(self.env["mrp.bom"])
|
||||
mrp_bom_form.product_tmpl_id = self.p1
|
||||
with mrp_bom_form.bom_line_ids.new() as line_form:
|
||||
line_form.product_id = self.p2.product_variant_ids[0]
|
||||
line_form.product_qty = 1
|
||||
self.p1_bom_id = mrp_bom_form.save()
|
||||
|
||||
mrp_bom_form = Form(self.env["mrp.bom"])
|
||||
mrp_bom_form.product_tmpl_id = self.p2
|
||||
with mrp_bom_form.bom_line_ids.new() as line_form:
|
||||
line_form.product_id = self.p3.product_variant_ids[0]
|
||||
line_form.product_qty = 1
|
||||
self.p2_bom_id = mrp_bom_form.save()
|
||||
|
||||
mrp_bom_form = Form(self.env["mrp.bom"])
|
||||
mrp_bom_form.product_tmpl_id = self.p3
|
||||
with mrp_bom_form.bom_line_ids.new() as line_form:
|
||||
line_form.product_id = self.p1.product_variant_ids[0]
|
||||
line_form.product_qty = 1
|
||||
self.p3_bom_id = mrp_bom_form.save()
|
||||
@classmethod
|
||||
def _create_bom(cls, product, line_form_vals):
|
||||
if product._name == "product.template":
|
||||
template = product
|
||||
product = cls.env["product.product"]
|
||||
else:
|
||||
template = product.product_tmpl_id
|
||||
with Form(cls.env["mrp.bom"]) as form:
|
||||
form.product_tmpl_id = template
|
||||
form.product_id = product
|
||||
for vals in line_form_vals:
|
||||
with form.bom_line_ids.new() as line_form:
|
||||
for key, value in vals.items():
|
||||
field = line_form._model._fields.get(key)
|
||||
if field and field.relational: # pragma: no cover
|
||||
if value and not isinstance(value, BaseModel):
|
||||
value = cls.env[field.comodel_name].browse(value)
|
||||
elif not value:
|
||||
value = cls.env[field.comodel_name]
|
||||
setattr(line_form, key, value)
|
||||
return form.save()
|
||||
|
||||
Reference in New Issue
Block a user