oca-technical/odoo-bringout-oca-ddmrp-ddmrp/ddmrp/report/mrp_report_bom_structure.py
2025-08-29 15:43:03 +02:00

100 lines
2.9 KiB
Python

# Copyright 2017-23 ForgeFlow S.L. (http://www.forgeflow.com)
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
from odoo import api, models
class BomStructureReport(models.AbstractModel):
_inherit = "report.mrp.report_bom_structure"
def _get_pdf_doc(self, bom_id, data, quantity, product_variant_id=None):
doc = super()._get_pdf_doc(bom_id, data, quantity, product_variant_id)
doc["show_buffered"] = (
True if data and data.get("show_buffered") == "true" else False
)
return doc
@api.model
def _get_bom_data(
self,
bom,
warehouse,
product=False,
line_qty=False,
bom_line=False,
level=0,
parent_bom=False,
index=0,
product_info=False,
ignore_stock=False,
):
res = super(BomStructureReport, self)._get_bom_data(
bom,
warehouse,
product=product,
line_qty=line_qty,
bom_line=bom_line,
level=level,
parent_bom=parent_bom,
index=index,
product_info=product_info,
ignore_stock=ignore_stock,
)
res["is_buffered"] = bom.is_buffered
res["dlt"] = bom.dlt
return res
@api.model
def _get_component_data(
self,
parent_bom,
warehouse,
bom_line,
line_quantity,
level,
index,
product_info,
ignore_stock=False,
):
res = super(BomStructureReport, self)._get_component_data(
parent_bom,
warehouse,
bom_line,
line_quantity,
level,
index,
product_info,
ignore_stock=ignore_stock,
)
if bom_line.product_id.bom_ids:
lead_time = bom_line.product_id.produce_delay
else:
lead_time = (
bom_line.product_id.seller_ids
and bom_line.product_id.seller_ids[0].delay
or 0.0
)
res["is_buffered"] = bom_line.is_buffered
res["lead_time"] = lead_time or False
res["dlt"] = bom_line.dlt
return res
def _get_bom_array_lines(
self, data, level, unfolded_ids, unfolded, parent_unfolded
):
lines = super()._get_bom_array_lines(
data, level, unfolded_ids, unfolded, parent_unfolded
)
for component in data.get("components", []):
bom_line = next(
filter(
lambda line: line.get("bom_id", False) == component["bom_id"]
and line.get("name", False) == component["name"]
and line.get("level", False) == component["level"],
lines,
)
)
if bom_line:
bom_line["is_buffered"] = component["is_buffered"]
bom_line["dlt"] = component["dlt"]
return lines