From 10825af5312ff903d2bf90001846c3899cd86be1 Mon Sep 17 00:00:00 2001 From: iamkhanraheel Date: Mon, 16 Jun 2025 14:59:49 +0530 Subject: [PATCH] fix: update schedule date in items child table, prevent selecting past dates in schedule date --- .../doctype/purchase_order/purchase_order.js | 26 ++++++++++++++++--- .../material_request/material_request.js | 18 ++++++++++--- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js index 49558c8af37..01418f3c9fa 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.js +++ b/erpnext/buying/doctype/purchase_order/purchase_order.js @@ -59,6 +59,19 @@ frappe.ui.form.on("Purchase Order", { erpnext.accounts.dimensions.update_dimension(frm, frm.doctype); }, + schedule_date(frm) { + if (frm.doc.schedule_date) { + frm.doc.items.forEach((d) => { + frappe.model.set_value(d.doctype, d.name, "schedule_date", frm.doc.schedule_date); + }); + } + }, + + transaction_date(frm){ + prevent_past_schedule_dates(frm); + frm.set_value('schedule_date', '') + }, + refresh: function (frm) { if (frm.doc.is_old_subcontracting_flow) { frm.trigger("get_materials_from_supplier"); @@ -75,6 +88,7 @@ frappe.ui.form.on("Purchase Order", { if (frm.doc.docstatus == 0) { erpnext.set_unit_price_items_note(frm); } + prevent_past_schedule_dates(frm); }, supplier: function (frm) { @@ -776,10 +790,6 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends ( items_on_form_rendered() { set_schedule_date(this.frm); } - - schedule_date() { - set_schedule_date(this.frm); - } }; // for backward compatibility: combine new and previous states @@ -835,3 +845,11 @@ frappe.ui.form.on("Purchase Order", "is_subcontracted", function (frm) { erpnext.buying.get_default_bom(frm); } }); + +function prevent_past_schedule_dates(frm) { + if (frm.doc.transaction_date){ + frm.fields_dict['schedule_date'].datepicker.update({ + minDate: new Date(frm.doc.transaction_date) + }); + } +} \ No newline at end of file diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js index e33cc63e20c..e49bae47d82 100644 --- a/erpnext/stock/doctype/material_request/material_request.js +++ b/erpnext/stock/doctype/material_request/material_request.js @@ -91,6 +91,12 @@ frappe.ui.form.on("Material Request", { refresh: function (frm) { frm.events.make_custom_buttons(frm); frm.toggle_reqd("customer", frm.doc.material_request_type == "Customer Provided"); + prevent_past_schedule_dates(frm); + }, + + transaction_date(frm) { + prevent_past_schedule_dates(frm); + frm.set_value('schedule_date', '') }, set_from_warehouse: function (frm) { @@ -602,10 +608,6 @@ erpnext.buying.MaterialRequestController = class MaterialRequestController exten set_schedule_date(this.frm); } - schedule_date() { - set_schedule_date(this.frm); - } - qty(doc, cdt, cdn) { var row = frappe.get_doc(cdt, cdn); row.amount = flt(row.qty) * flt(row.rate); @@ -628,3 +630,11 @@ function set_schedule_date(frm) { ); } } + +function prevent_past_schedule_dates(frm) { + if (frm.doc.transaction_date){ + frm.fields_dict['schedule_date'].datepicker.update({ + minDate: new Date(frm.doc.transaction_date) + }); + } +} \ No newline at end of file