mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
This module allows and encourages the use of packaging within MRP, both to manufacture products or to create kits. @moduon MT-4506
68 lines
2.5 KiB
Python
68 lines
2.5 KiB
Python
# Copyright 2023 Moduon Team S.L.
|
|
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0)
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class MrpBomLine(models.Model):
|
|
_inherit = "mrp.bom.line"
|
|
|
|
product_packaging_id = fields.Many2one(
|
|
comodel_name="product.packaging",
|
|
string="Packaging",
|
|
compute="_compute_product_packaging",
|
|
store=True,
|
|
readonly=False,
|
|
domain="[('product_id', '=', product_id)]",
|
|
check_company=True,
|
|
)
|
|
product_packaging_qty = fields.Float(
|
|
string="Packaging Qty.",
|
|
compute="_compute_product_packaging",
|
|
digits="Product Unit of Measure",
|
|
store=True,
|
|
readonly=False,
|
|
)
|
|
|
|
@api.depends("product_id", "product_qty", "product_uom_id")
|
|
def _compute_product_packaging(self):
|
|
"""Set the appropriate packaging for the product qty."""
|
|
for one in self:
|
|
one.product_packaging_id = (
|
|
one.product_id.packaging_ids._find_suitable_product_packaging(
|
|
one.product_qty, one.product_uom_id
|
|
)
|
|
)
|
|
if not one.product_packaging_id:
|
|
one.product_packaging_qty = 0
|
|
continue
|
|
uom_qty_per_package = (
|
|
one.product_packaging_id.product_uom_id._compute_quantity(
|
|
one.product_packaging_id.qty, one.product_uom_id
|
|
)
|
|
)
|
|
one.product_packaging_qty = (
|
|
one.product_packaging_id._check_qty(one.product_qty, one.product_uom_id)
|
|
/ uom_qty_per_package
|
|
)
|
|
|
|
@api.onchange("product_packaging_id", "product_packaging_qty")
|
|
def _onchange_product_packaging_set_qty(self):
|
|
"""When interactively setting a new packaging, set default qty values."""
|
|
if not self.product_packaging_id:
|
|
return
|
|
self.product_qty = (
|
|
self.product_packaging_qty
|
|
* self.product_uom_id._compute_quantity(
|
|
self.product_packaging_id.qty,
|
|
self.product_packaging_id.product_uom_id,
|
|
)
|
|
)
|
|
|
|
@api.onchange("product_id")
|
|
def _onchange_product_set_qty_from_packaging(self):
|
|
"""When interactively setting a new product, set default packaging values."""
|
|
default_packaging = self.product_id.packaging_ids[:1]
|
|
if default_packaging:
|
|
self.product_uom_id = default_packaging.product_uom_id
|
|
self.product_qty = default_packaging.qty
|