diff --git a/erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py b/erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py index ee93cdc27e5..9a17948362a 100644 --- a/erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py +++ b/erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py @@ -454,7 +454,6 @@ class MaterialRequirementsPlanningReport: row[field] = rm_details.get(field) self.update_required_qty(row) - row.release_date = add_days(row.delivery_date, row.lead_time * -1) if i != 0: data.append(frappe._dict({})) @@ -463,7 +462,15 @@ class MaterialRequirementsPlanningReport: if rm_details.raw_materials: row.capacity = get_item_capacity(row.item_code, self.filters.bucket_size) row.type_of_material = "Manufacture" + if row.lead_time and row.required_qty: + row.lead_time = math.ceil(row.required_qty / row.lead_time) + elif not row.required_qty: + row.lead_time = 0 + if not row.lead_time and rm_details.raw_materials: + row.lead_time = self.get_lead_time_from_raw_materials(rm_details.raw_materials) + + row.release_date = add_days(row.delivery_date, row.lead_time * -1) data.append(row) if rm_details.raw_materials: self.update_rm_details( @@ -472,6 +479,15 @@ class MaterialRequirementsPlanningReport: return data + def get_lead_time_from_raw_materials(self, raw_materials): + lead_time = 0 + for material in raw_materials: + lead_time += math.ceil(material.lead_time) + if material.raw_materials: + lead_time += self.get_lead_time_from_raw_materials(material.raw_materials) + + return lead_time + def add_non_planned_so(self, row): if so_details := self._so_details.get((row.item_code, row.delivery_date)): row.adhoc_qty = so_details.qty @@ -1199,8 +1215,10 @@ def get_item_lead_time(item_code, type_of_material): if type_of_material == "Manufacture": query = query.select( Case() - .when(doctype.manufacturing_time_in_mins.isnull(), 0) - .else_(doctype.manufacturing_time_in_mins / 1440 + doctype.buffer_time) + .when( + (doctype.manufacturing_time_in_mins.isnull() | (doctype.manufacturing_time_in_mins <= 0)), 0 + ) + .else_(1440 / doctype.manufacturing_time_in_mins + doctype.buffer_time) .as_("lead_time") ) else: diff --git a/erpnext/workspace_sidebar/manufacturing.json b/erpnext/workspace_sidebar/manufacturing.json index 3c2a4a3dd9d..3570184eb5e 100644 --- a/erpnext/workspace_sidebar/manufacturing.json +++ b/erpnext/workspace_sidebar/manufacturing.json @@ -89,6 +89,18 @@ "show_arrow": 0, "type": "Section Break" }, + { + "child": 1, + "collapsible": 1, + "icon": "", + "indent": 0, + "keep_closed": 0, + "label": "Item Lead Time", + "link_to": "Item Lead Time", + "link_type": "DocType", + "show_arrow": 0, + "type": "Link" + }, { "child": 1, "collapsible": 1, @@ -425,7 +437,7 @@ "type": "Link" } ], - "modified": "2026-01-10 00:06:13.058137", + "modified": "2026-01-29 16:41:40.416652", "modified_by": "Administrator", "module": "Manufacturing", "name": "Manufacturing",