From 1adeb66bdc0e0b46df2e4df8461402c670604ab0 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Sat, 1 Aug 2026 08:52:23 +0530 Subject: [PATCH] feat: alert when Required By falls back to today Items whose requested date has passed silently got today as Required By, which is a date the buyer never asked for. A toast now says so. (cherry picked from commit 53e09dfdd67eca10e552276dfd7933661a2aea93) --- erpnext/stock/doctype/material_request/mapper.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/material_request/mapper.py b/erpnext/stock/doctype/material_request/mapper.py index cb96075cb21..7cc608bc1f0 100644 --- a/erpnext/stock/doctype/material_request/mapper.py +++ b/erpnext/stock/doctype/material_request/mapper.py @@ -227,6 +227,7 @@ def make_purchase_orders_by_supplier(source_name: str, item_suppliers: str | lis items_by_supplier.setdefault(row.supplier, {})[row.material_request_item] = flt(row.qty) purchase_orders = [] + is_rescheduled = False for supplier, requested_qty in items_by_supplier.items(): purchase_order = make_purchase_order( source_name, @@ -237,11 +238,21 @@ def make_purchase_orders_by_supplier(source_name: str, item_suppliers: str | lis }, ) for item in purchase_order.items: - item.schedule_date = item.schedule_date or nowdate() + if not item.schedule_date: + item.schedule_date = nowdate() + is_rescheduled = True purchase_order.insert() purchase_orders.append(purchase_order.name) + if is_rescheduled: + frappe.toast( + _("{0} was set to today for items whose requested date has passed").format( + _(frappe.get_meta("Purchase Order Item").get_label("schedule_date")) + ), + indicator="orange", + ) + frappe.msgprint( _("{0} created").format( comma_and([get_link_to_form("Purchase Order", name) for name in purchase_orders])