From 9084570d18cbd9927e043703083364b3d0f0e8c7 Mon Sep 17 00:00:00 2001 From: yash14023 Date: Sun, 31 May 2026 11:22:32 +0530 Subject: [PATCH] fix: add docstrings and unify update_stock visibility in JS --- erpnext/accounts/doctype/sales_invoice/sales_invoice.js | 8 ++++---- erpnext/accounts/doctype/sales_invoice/sales_invoice.py | 1 + .../accounts/doctype/sales_invoice/test_sales_invoice.py | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index bd11f5316ce..b7de176c502 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -567,7 +567,8 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends ( set_dynamic_labels() { super.set_dynamic_labels(); this.frm.events.hide_fields(this.frm); - this.frm.set_df_property("update_stock", "hidden", cint(this.frm.doc.is_debit_note)); + const hide_update_stock = cint(this.frm.doc.is_debit_note) || cint(this.frm.doc.has_subcontracted); + this.frm.set_df_property("update_stock", "hidden", hide_update_stock); } items_on_form_rendered() { @@ -1160,8 +1161,8 @@ frappe.ui.form.on("Sales Invoice", { if (frm.doc.is_debit_note) { frm.set_value("update_stock", 0); } - frm.set_df_property("update_stock", "hidden", cint(frm.doc.is_debit_note)); - frm.refresh_field("update_stock"); + // visibility handled by set_dynamic_labels() + frm.cscript.set_dynamic_labels(); }, refresh: function (frm) { @@ -1170,7 +1171,6 @@ frappe.ui.form.on("Sales Invoice", { } frm.set_df_property("update_stock", "read_only", frm.doc.has_subcontracted); - frm.toggle_display("update_stock", !frm.doc.has_subcontracted); }, }); diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 08a9a35c4e0..d622ae8cc3d 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -1286,6 +1286,7 @@ class SalesInvoice(SellingController): msgprint(_("Please enter Account for Change Amount"), raise_exception=1) def validate_debit_note_with_update_stock(self): + """Prevent stock update when Sales Invoice is marked as Debit Note.""" if self.is_debit_note and cint(self.update_stock): frappe.throw( _( diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index f56562ab330..c9688955ffc 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -4863,6 +4863,7 @@ class TestSalesInvoice(ERPNextTestSuite): frappe.db.set_value("Company", "_Test Company 1", "cost_center", cost_center) def test_debit_note_with_update_stock_validation(self): + """Test that saving a Debit Note with Update Stock enabled raises ValidationError.""" si = create_sales_invoice(do_not_save=True) si.is_debit_note = 1 si.update_stock = 1