mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
172 lines
5.6 KiB
Python
172 lines
5.6 KiB
Python
from odoo.models import BaseModel
|
|
from odoo.tests import Form, SavepointCase
|
|
|
|
|
|
class TestMrpBomAttributeMatchBase(SavepointCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
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",
|
|
}
|
|
)
|
|
cls.product_surf = cls.env["product.template"].create(
|
|
{
|
|
"name": "Surf",
|
|
"type": "product",
|
|
}
|
|
)
|
|
cls.product_fin = cls.env["product.template"].create(
|
|
{
|
|
"name": "Surf Fin",
|
|
"type": "product",
|
|
}
|
|
)
|
|
cls.product_plastic = cls.env["product.template"].create(
|
|
{
|
|
"name": "Plastic Component",
|
|
"type": "product",
|
|
}
|
|
)
|
|
cls.p1 = cls.env["product.template"].create(
|
|
{
|
|
"name": "P1",
|
|
"type": "product",
|
|
"route_ids": [(6, 0, cls.route_manufacture.ids)],
|
|
}
|
|
)
|
|
cls.p2 = cls.env["product.template"].create(
|
|
{
|
|
"name": "P2",
|
|
"type": "product",
|
|
"route_ids": [(6, 0, cls.route_manufacture.ids)],
|
|
}
|
|
)
|
|
cls.p3 = cls.env["product.template"].create(
|
|
{
|
|
"name": "P3",
|
|
"type": "product",
|
|
"route_ids": [(6, 0, cls.route_manufacture.ids)],
|
|
}
|
|
)
|
|
cls.product_9 = cls.env["product.product"].create(
|
|
{
|
|
"name": "Paper",
|
|
}
|
|
)
|
|
cls.product_10 = cls.env["product.product"].create(
|
|
{
|
|
"name": "Stone",
|
|
}
|
|
)
|
|
cls.product_attribute = cls.env["product.attribute"].create(
|
|
{"name": "Colour", "display_type": "radio", "create_variant": "always"}
|
|
)
|
|
cls.attribute_value_ids = cls.env["product.attribute.value"].create(
|
|
[
|
|
{"name": "Cyan", "attribute_id": cls.product_attribute.id},
|
|
{"name": "Magenta", "attribute_id": cls.product_attribute.id},
|
|
]
|
|
)
|
|
cls.plastic_attrs = cls.env["product.template.attribute.line"].create(
|
|
{
|
|
"attribute_id": cls.product_attribute.id,
|
|
"product_tmpl_id": cls.product_plastic.id,
|
|
"value_ids": [(6, 0, cls.product_attribute.value_ids.ids)],
|
|
}
|
|
)
|
|
cls.sword_attrs = cls.env["product.template.attribute.line"].create(
|
|
{
|
|
"attribute_id": cls.product_attribute.id,
|
|
"product_tmpl_id": cls.product_sword.id,
|
|
"value_ids": [(6, 0, 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,
|
|
),
|
|
dict(
|
|
product_id=cls.product_9,
|
|
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,
|
|
),
|
|
],
|
|
)
|
|
|
|
@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()
|