mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
When defining a single BOM for a product template having multiple product variants, we can have different components where the lot number must be propagated for different product variants. Therefore we need to allow to mark multiple BOM line with propagate_lot_number, and to avoid complicating the check function on the BOM lines, we ensure at the manufacturing order confirmation that only a single component is set to propagate its lot number.
73 lines
3.0 KiB
Python
73 lines
3.0 KiB
Python
# Copyright 2022 Camptocamp SA
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
|
|
from odoo.exceptions import ValidationError
|
|
from odoo.tests.common import Form
|
|
|
|
from .common import Common
|
|
|
|
|
|
class TestMrpBom(Common):
|
|
def test_bom_display_lot_number_propagation(self):
|
|
self.assertTrue(self.bom.display_lot_number_propagation)
|
|
self.bom.product_tmpl_id.tracking = "none"
|
|
self.assertFalse(self.bom.display_lot_number_propagation)
|
|
|
|
def test_bom_line_check_propagate_lot_number_not_tracked(self):
|
|
form = Form(self.bom)
|
|
form.lot_number_propagation = True
|
|
# Flag a line that can't be propagated
|
|
line_form = form.bom_line_ids.edit(2) # line without tracking
|
|
line_form.propagate_lot_number = True
|
|
line_form.save()
|
|
with self.assertRaisesRegex(ValidationError, "Only components tracked"):
|
|
form.save()
|
|
|
|
def test_bom_line_check_propagate_lot_number_tracked_by_lot(self):
|
|
form = Form(self.bom)
|
|
form.lot_number_propagation = True
|
|
# Flag a line tracked by lot (not SN) which is not supported
|
|
line_form = form.bom_line_ids.edit(1)
|
|
line_form.propagate_lot_number = True
|
|
line_form.save()
|
|
with self.assertRaisesRegex(ValidationError, "Only components tracked"):
|
|
form.save()
|
|
|
|
def test_bom_line_check_propagate_lot_number_same_tracking(self):
|
|
form = Form(self.bom)
|
|
form.lot_number_propagation = True
|
|
# Flag a line whose tracking type is the same than the finished product
|
|
line_form = form.bom_line_ids.edit(0)
|
|
line_form.propagate_lot_number = True
|
|
line_form.save()
|
|
form.save()
|
|
|
|
def test_bom_check_propagate_lot_number(self):
|
|
# Configure the BoM to propagate the lot/SN without enabling any line
|
|
with self.assertRaisesRegex(ValidationError, "a line has to be configured"):
|
|
self.bom.lot_number_propagation = True
|
|
|
|
def test_reset_tracking_on_bom_product(self):
|
|
# Configure the BoM to propagate the lot/SN
|
|
with Form(self.bom) as form:
|
|
form.lot_number_propagation = True
|
|
line_form = form.bom_line_ids.edit(0) # Line tracked by SN
|
|
line_form.propagate_lot_number = True
|
|
line_form.save()
|
|
form.save()
|
|
# Reset the tracking on the finished product
|
|
with self.assertRaisesRegex(ValidationError, "A BoM propagating"):
|
|
self.bom.product_tmpl_id.tracking = "none"
|
|
|
|
def test_reset_tracking_on_bom_component(self):
|
|
# Configure the BoM to propagate the lot/SN
|
|
with Form(self.bom) as form:
|
|
form.lot_number_propagation = True
|
|
line_form = form.bom_line_ids.edit(0) # Line tracked by SN
|
|
line_form.propagate_lot_number = True
|
|
line_form.save()
|
|
form.save()
|
|
# Reset the tracking on the component which propagates the SN
|
|
with self.assertRaisesRegex(ValidationError, "This component is"):
|
|
self.line_tracked_by_sn.product_id.tracking = "none"
|