mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
IMP mrp_bom_add Optionally replace all existing lines on BoM for the selected product.
This commit is contained in:
committed by
Mishael Navarro
parent
ec9a0417cb
commit
301f741591
@@ -2,14 +2,19 @@
|
|||||||
'name': 'BoM Mass Add',
|
'name': 'BoM Mass Add',
|
||||||
'author': 'Hibou Corp. <hello@hibou.io>',
|
'author': 'Hibou Corp. <hello@hibou.io>',
|
||||||
'category': 'Hidden',
|
'category': 'Hidden',
|
||||||
'version': '12.0.1.0.0',
|
'version': '12.0.1.1.0',
|
||||||
'description':
|
'description':
|
||||||
"""
|
"""
|
||||||
Bill of Materials Mass Component Adder
|
Bill of Materials Mass Component Adder
|
||||||
======================================
|
======================================
|
||||||
|
|
||||||
Helper to add all variants of a Product to a BoM filtered by the attributes on that product.
|
Helper to add all variants of a Product to a BoM filtered by the attributes on that product.
|
||||||
Adds a button under BoM components named "Add Bulk". This lets you configure a product
|
Adds a button under BoM components named "Add Bulk". This lets you select a product template
|
||||||
|
and add one BoM line for every variant of that product.
|
||||||
|
|
||||||
|
Optionally you can choose to only add the variants that could be selected by the attributes
|
||||||
|
on the produced product itself. You can also replace all of the lines for the slected product
|
||||||
|
to allow you to quickly re-configure qty or operation for bulk products.
|
||||||
""",
|
""",
|
||||||
'depends': [
|
'depends': [
|
||||||
'mrp',
|
'mrp',
|
||||||
|
|||||||
@@ -113,3 +113,25 @@ class TestMRPBOMAdd(TransactionCase):
|
|||||||
wizard.add_variants()
|
wizard.add_variants()
|
||||||
self.assertEqual(len(self.bom.bom_line_ids), 2)
|
self.assertEqual(len(self.bom.bom_line_ids), 2)
|
||||||
|
|
||||||
|
def test_replace(self):
|
||||||
|
# Ensure BoM is empty
|
||||||
|
self.assertEqual(len(self.bom.bom_line_ids), 0)
|
||||||
|
|
||||||
|
wizard = self.env['mrp.bom.add'].create({
|
||||||
|
'bom_id': self.bom.id,
|
||||||
|
})
|
||||||
|
|
||||||
|
wizard.product_tmpl_id = self.component
|
||||||
|
self.assertEqual(wizard.product_variant_count, 4)
|
||||||
|
|
||||||
|
wizard.add_variants()
|
||||||
|
self.assertEqual(len(self.bom.bom_line_ids), 4)
|
||||||
|
|
||||||
|
# Additive
|
||||||
|
wizard.add_variants()
|
||||||
|
self.assertEqual(len(self.bom.bom_line_ids), 8)
|
||||||
|
|
||||||
|
# remove those 8 lines when adding new ones
|
||||||
|
wizard.replace_existing = True
|
||||||
|
wizard.add_variants()
|
||||||
|
self.assertEqual(len(self.bom.bom_line_ids), 4)
|
||||||
|
|||||||
@@ -8,9 +8,14 @@ class ProgramOutputView(models.TransientModel):
|
|||||||
bom_id = fields.Many2one('mrp.bom', string='Bill of Materials')
|
bom_id = fields.Many2one('mrp.bom', string='Bill of Materials')
|
||||||
bom_product_tmpl_id = fields.Many2one('product.template', string='BoM Product', related='bom_id.product_tmpl_id')
|
bom_product_tmpl_id = fields.Many2one('product.template', string='BoM Product', related='bom_id.product_tmpl_id')
|
||||||
product_tmpl_id = fields.Many2one('product.template', string='Product')
|
product_tmpl_id = fields.Many2one('product.template', string='Product')
|
||||||
product_variant_count = fields.Integer(string='Variant Count', compute='_compute_variant_count')
|
product_variant_count = fields.Integer(string='Variant Count',
|
||||||
|
compute='_compute_variant_count')
|
||||||
limit_possible = fields.Boolean(string='Limit to possible variants',
|
limit_possible = fields.Boolean(string='Limit to possible variants',
|
||||||
help='Only add variants that can be selected by BoM Product')
|
help='Only add variants that can be selected by BoM Product')
|
||||||
|
replace_existing = fields.Boolean(string='Replace existing BoM lines for this template.')
|
||||||
|
existing_line_count = fields.Integer(string='Existing Lines',
|
||||||
|
help='Remove any existing lines for this Product Template.',
|
||||||
|
compute='_compute_variant_count')
|
||||||
product_qty = fields.Float(string='Quantity to Consume', default=1.0)
|
product_qty = fields.Float(string='Quantity to Consume', default=1.0)
|
||||||
product_uom_id = fields.Many2one('uom.uom', string='Consume Unit of Measure')
|
product_uom_id = fields.Many2one('uom.uom', string='Consume Unit of Measure')
|
||||||
bom_routing_id = fields.Many2one('mrp.routing', related='bom_id.routing_id')
|
bom_routing_id = fields.Many2one('mrp.routing', related='bom_id.routing_id')
|
||||||
@@ -22,9 +27,12 @@ class ProgramOutputView(models.TransientModel):
|
|||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
if not self.product_tmpl_id or not self.bom_product_tmpl_id:
|
if not self.product_tmpl_id or not self.bom_product_tmpl_id:
|
||||||
self.product_variant_count = 0
|
self.product_variant_count = 0
|
||||||
|
self.existing_line_count = 0
|
||||||
else:
|
else:
|
||||||
products = self._compute_product_ids()
|
products = self._compute_product_ids()
|
||||||
|
lines = self._compute_existing_line_ids()
|
||||||
self.product_variant_count = len(products)
|
self.product_variant_count = len(products)
|
||||||
|
self.existing_line_count = len(lines)
|
||||||
|
|
||||||
@api.onchange('product_tmpl_id')
|
@api.onchange('product_tmpl_id')
|
||||||
def _onchange_default_product_uom(self):
|
def _onchange_default_product_uom(self):
|
||||||
@@ -51,7 +59,14 @@ class ProgramOutputView(models.TransientModel):
|
|||||||
products += p
|
products += p
|
||||||
return products
|
return products
|
||||||
|
|
||||||
|
def _compute_existing_line_ids(self):
|
||||||
|
return self.bom_id.bom_line_ids.filtered(lambda l: l.product_id.product_tmpl_id == self.product_tmpl_id)
|
||||||
|
|
||||||
def add_variants(self):
|
def add_variants(self):
|
||||||
|
if self.replace_existing:
|
||||||
|
lines = self._compute_existing_line_ids()
|
||||||
|
lines.unlink()
|
||||||
|
|
||||||
attribute_values = self._compute_attribute_value_ids()
|
attribute_values = self._compute_attribute_value_ids()
|
||||||
products = self._compute_product_ids()
|
products = self._compute_product_ids()
|
||||||
if not self.product_uom_id:
|
if not self.product_uom_id:
|
||||||
|
|||||||
@@ -14,6 +14,8 @@
|
|||||||
<field name="product_tmpl_id"/>
|
<field name="product_tmpl_id"/>
|
||||||
<field name="limit_possible"/>
|
<field name="limit_possible"/>
|
||||||
<field name="product_variant_count"/>
|
<field name="product_variant_count"/>
|
||||||
|
<field name="replace_existing"/>
|
||||||
|
<field name="existing_line_count"/>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<field name="product_qty"/>
|
<field name="product_qty"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user