diff --git a/mrp_bom/__init__.py b/mrp_bom/__init__.py new file mode 100644 index 00000000000..4c4f242fa03 --- /dev/null +++ b/mrp_bom/__init__.py @@ -0,0 +1 @@ +from . import report diff --git a/mrp_bom/__manifest__.py b/mrp_bom/__manifest__.py new file mode 100644 index 00000000000..51240873ad4 --- /dev/null +++ b/mrp_bom/__manifest__.py @@ -0,0 +1,12 @@ +{ + "name": "Mrp Bom", + "author": "Ayush Chavda", + "depends": ["base", "mrp"], + "data": [], + "assets": { + "web.assets_backend": ["mrp_bom/static/src/**/*"], + }, + "license": "LGPL-3", + "installable": True, + "application": True, +} diff --git a/mrp_bom/report/__init__.py b/mrp_bom/report/__init__.py new file mode 100644 index 00000000000..d5f0e0470e2 --- /dev/null +++ b/mrp_bom/report/__init__.py @@ -0,0 +1 @@ +from . import mrp_report_bom_structure diff --git a/mrp_bom/report/mrp_report_bom_structure.py b/mrp_bom/report/mrp_report_bom_structure.py new file mode 100644 index 00000000000..a02b116df63 --- /dev/null +++ b/mrp_bom/report/mrp_report_bom_structure.py @@ -0,0 +1,26 @@ +from odoo import _, models +import math + + +class MrpBom(models.AbstractModel): + _inherit = "report.mrp.report_bom_structure" + + def _get_bom_data(self, *args, **kwargs): + result = super()._get_bom_data(*args, **kwargs) + self._modify_bom_result(result) + return result + + def _modify_bom_result(self, data): + if data.get("producible_qty") is not None: + qty = math.floor(data["producible_qty"]) + data["producible_qty"] = qty + + if data.get("level") == 0 and qty > 0: + data["status"] = _("%(qty)s Ready To Produce", qty=qty) + + for component in data.get("components", []): + if component.get("is_storable"): + component["status"] = component.get("availability_display") + + if component.get("components"): + self._modify_bom_result(component) diff --git a/mrp_bom/static/src/components/bom_overview_line/bom_heading_patch.xml b/mrp_bom/static/src/components/bom_overview_line/bom_heading_patch.xml new file mode 100644 index 00000000000..047f392a174 --- /dev/null +++ b/mrp_bom/static/src/components/bom_overview_line/bom_heading_patch.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/mrp_bom/static/src/components/bom_overview_line/bom_overview_line.js b/mrp_bom/static/src/components/bom_overview_line/bom_overview_line.js new file mode 100644 index 00000000000..8395ca1d4df --- /dev/null +++ b/mrp_bom/static/src/components/bom_overview_line/bom_overview_line.js @@ -0,0 +1,27 @@ +/** @odoo-module **/ + +import { patch } from "@web/core/utils/patch"; +import { BomOverviewLine } from "@mrp/components/bom_overview_line/mrp_bom_overview_line"; + +patch(BomOverviewLine.prototype, { + get statusBackgroundClass() { + if (this.data.level === 0 && this.data.producible_qty > 0) { + return "text-bg-success"; + } + + if (this.data.level === 0 && this.data.producible_qty <= 0) { + return "text-bg-dark"; + } + + switch (this.data.availability_state) { + case "available": + return "text-bg-success"; + case "expected": + return "text-bg-warning"; + case "estimated": + return "text-bg-secondary"; + case "unavailable": + return "text-bg-danger"; + } + }, +}); diff --git a/mrp_bom/static/src/components/bom_overview_line/bom_overview_line.xml b/mrp_bom/static/src/components/bom_overview_line/bom_overview_line.xml new file mode 100644 index 00000000000..a00d4aafcd3 --- /dev/null +++ b/mrp_bom/static/src/components/bom_overview_line/bom_overview_line.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +