fix: validation for delivery schedule

This commit is contained in:
Rohit Waghchaure
2025-11-12 23:53:11 +05:30
parent be826dba3b
commit 31ae91f313
4 changed files with 38 additions and 10 deletions

View File

@@ -58,6 +58,12 @@ frappe.ui.form.on("Sales Order", {
},
refresh: function (frm) {
frm.fields_dict["items"].grid.update_docfield_property(
"add_schedule",
"hidden",
frm.is_new() || frm.doc.docstatus === 1 ? true : false
);
if (frm.doc.docstatus === 1) {
if (
frm.doc.status !== "Closed" &&
@@ -849,6 +855,10 @@ frappe.ui.form.on("Sales Order Item", {
add_schedule(frm, cdt, cdn) {
let row = locals[cdt][cdn];
if (row.__islocal) {
frappe.throw(__("Please save the Sales Order before adding a delivery schedule."));
}
frappe.call({
method: "get_delivery_schedule",
doc: frm.doc,

View File

@@ -481,6 +481,7 @@ class SalesOrder(SellingController):
def on_submit(self):
self.check_credit_limit()
self.update_reserved_qty()
self.delete_removed_delivery_schedule_items()
frappe.get_cached_doc("Authorization Control").validate_approving_authority(
self.doctype, self.company, self.base_grand_total, self
@@ -499,6 +500,13 @@ class SalesOrder(SellingController):
if self.get("reserve_stock") and not self.get("is_subcontracted"):
self.create_stock_reservation_entries()
def delete_removed_delivery_schedule_items(self):
items = [d.name for d in self.get("items")]
doctype = frappe.qb.DocType("Delivery Schedule Item")
frappe.qb.from_(doctype).delete().where(
(doctype.sales_order == self.name) & (doctype.sales_order_item.notin(items))
).run()
def on_cancel(self):
self.ignore_linked_doctypes = (
"GL Entry",
@@ -901,7 +909,7 @@ class SalesOrder(SellingController):
names.append(doc.name)
if names:
self.delete_delivery_schedule_items(names)
self.delete_delivery_schedule_items(child_row.name, names)
if first_delivery_date:
self.update_delivery_date_based_on_schedule(child_row, first_delivery_date)
@@ -915,7 +923,7 @@ class SalesOrder(SellingController):
self.save()
def delete_delivery_schedule_items(self, ignore_names=None):
def delete_delivery_schedule_items(self, sales_order_item=None, ignore_names=None):
"""Delete delivery schedule items."""
doctype = frappe.qb.DocType("Delivery Schedule Item")
@@ -924,6 +932,9 @@ class SalesOrder(SellingController):
if ignore_names:
query = query.where(doctype.name.notin(ignore_names))
if sales_order_item:
query = query.where(doctype.sales_order_item == sales_order_item)
query.run()