diff --git a/addons/mrp/report/mrp_report_bom_structure.py b/addons/mrp/report/mrp_report_bom_structure.py index ebff4ea6a1d..374e4b3a16f 100644 --- a/addons/mrp/report/mrp_report_bom_structure.py +++ b/addons/mrp/report/mrp_report_bom_structure.py @@ -237,7 +237,7 @@ class ReportBomStructure(models.AbstractModel): bom_report_line['byproducts_total'] = sum(byproduct['quantity'] for byproduct in byproducts) bom_report_line['bom_cost'] *= bom_report_line['cost_share'] - availabilities = self._get_availabilities(product, current_quantity, product_info, bom_key, quantities_info, level, ignore_stock, components) + availabilities = self._get_availabilities(product, current_quantity, product_info, bom_key, quantities_info, level, ignore_stock, components, bom_report_line) bom_report_line.update(availabilities) if level == 0: @@ -514,7 +514,7 @@ class ReportBomStructure(models.AbstractModel): return {} @api.model - def _get_availabilities(self, product, quantity, product_info, bom_key, quantities_info, level, ignore_stock=False, components=False): + def _get_availabilities(self, product, quantity, product_info, bom_key, quantities_info, level, ignore_stock=False, components=False, report_line=False): # Get availabilities according to stock (today & forecasted). stock_state, stock_delay = ('unavailable', False) if not ignore_stock: @@ -529,6 +529,10 @@ class ReportBomStructure(models.AbstractModel): elif route_info: resupply_state, resupply_delay = self._get_resupply_availability(route_info, components) + if resupply_state == "unavailable" and route_info == {} and components and report_line: + val = self._get_last_availability(report_line) + return val + base = { 'resupply_avail_delay': resupply_delay, 'stock_avail_state': stock_state, @@ -608,7 +612,6 @@ class ReportBomStructure(models.AbstractModel): def _has_attachments(self, data): return data['attachment_ids'] or any(self._has_attachments(component) for component in data.get('components', [])) - @api.model def _merge_components(self, component_1, component_2): qty = component_2['quantity'] component_1["quantity"] = component_1["quantity"] + qty @@ -619,3 +622,19 @@ class ReportBomStructure(models.AbstractModel): return for index in range(len(component_1.get("components"))): self._merge_components(component_1["components"][index], component_2["components"][index]) + + def _get_last_availability(self, report_line): + delay = 0 + component_max_delay = False + for component in report_line["components"]: + if component["availability_delay"] is False: + component_max_delay = component + break + elif component["availability_delay"] >= delay: + component_max_delay = component + delay = component["availability_delay"] + return {'resupply_avail_delay': component_max_delay['resupply_avail_delay'], + 'stock_avail_state': component_max_delay['stock_avail_state'], + 'availability_display': component_max_delay['availability_display'], + 'availability_state': component_max_delay['availability_state'], + 'availability_delay': component_max_delay['availability_delay']} diff --git a/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.xml b/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.xml index 862fe3a532a..5d7b5d1764b 100644 --- a/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.xml +++ b/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.xml @@ -19,13 +19,13 @@
-
+
Quantity
Quantity
- +
Variant: