Merge pull request #56343 from mihir-kandoi/pg-mrp-leadtime-intdiv

fix(manufacturing): keep MRP lead-time fractional across engines
This commit is contained in:
Mihir Kandoi
2026-06-23 10:26:51 +05:30
committed by GitHub
2 changed files with 31 additions and 1 deletions

View File

@@ -1219,7 +1219,7 @@ def get_item_lead_time(item_code, type_of_material):
.when(
(doctype.manufacturing_time_in_mins.isnull() | (doctype.manufacturing_time_in_mins <= 0)), 0
)
.else_(1440 / doctype.manufacturing_time_in_mins + doctype.buffer_time)
.else_(1440.0 / doctype.manufacturing_time_in_mins + doctype.buffer_time)
.as_("lead_time")
)
else:

View File

@@ -0,0 +1,30 @@
# Copyright (c) 2024, Frappe Technologies Pvt. Ltd. and Contributors
# See license.txt
import frappe
from erpnext.manufacturing.report.material_requirements_planning_report.material_requirements_planning_report import (
get_item_lead_time,
)
from erpnext.stock.doctype.item.test_item import make_item
from erpnext.tests.utils import ERPNextTestSuite
class TestMaterialRequirementsPlanningReport(ERPNextTestSuite):
def test_manufacture_lead_time_is_not_int_truncated(self):
"""lead_time = 1440 / manufacturing_time_in_mins + buffer_time. Both columns are Int;
integer/integer division truncates on Postgres (1440/7 -> 205) while MariaDB yields a
decimal, so the computed lead time (and the derived release date) diverged by engine."""
item = make_item("_Test MRP Lead Time Item", {"is_stock_item": 1}).name
frappe.get_doc(
{
"doctype": "Item Lead Time",
"item_code": item,
"manufacturing_time_in_mins": 7,
"buffer_time": 2,
}
).insert()
lead_time = get_item_lead_time(item, "Manufacture")
# 1440 / 7 + 2 = 207.714...; a truncating integer division on Postgres would give 207.
self.assertAlmostEqual(float(lead_time), 1440 / 7 + 2, places=2)