fix: Reserve and Unreserve buttons visibility in SO
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index 37c2294..417e93b 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -66,18 +66,16 @@
}
if (frm.is_new()) {
- frappe.db.get_single_value("Stock Settings", "enable_stock_reservation").then((value) => {
- if (value) {
- frappe.db.get_single_value("Stock Settings", "reserve_stock_on_sales_order_submission").then((value) => {
- // If `Reserve Stock on Sales Order Submission` is enabled in Stock Settings, set Reserve Stock to 1 else 0.
- frm.set_value("reserve_stock", value ? 1 : 0);
- })
- } else {
- // If `Stock Reservation` is disabled in Stock Settings, set Reserve Stock to 0 and read only.
- frm.set_value("reserve_stock", 0);
- frm.set_df_property("reserve_stock", "read_only", 1);
+ if (frm.doc.__onload && frm.doc.__onload.enable_stock_reservation) {
+ if (frm.doc.__onload.reserve_stock_on_so_submission) {
+ // If `Reserve Stock on Sales Order Submission` is enabled in Stock Settings, set Reserve Stock to 1 else 0.
+ frm.set_value("reserve_stock", value ? 1 : 0);
}
- })
+ } else {
+ // If `Stock Reservation` is disabled in Stock Settings, set Reserve Stock to 0 and read only.
+ frm.set_value("reserve_stock", 0);
+ frm.set_df_property("reserve_stock", "read_only", 1);
+ }
}
}
},
@@ -289,7 +287,7 @@
}
// Stock Reservation > Reserve button will be only visible if the SO has unreserved stock.
- if (this.frm.doc.__onload && this.frm.doc.__onload.has_unreserved_stock) {
+ if (this.frm.doc.__onload && this.frm.doc.__onload.enable_stock_reservation && this.frm.doc.__onload.has_unreserved_stock) {
this.frm.add_custom_button(__('Reserve'), () => this.create_stock_reservation_entries(), __('Stock Reservation'));
}
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index d6afd10..6abb8ed 100755
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -33,6 +33,7 @@
from erpnext.stock.doctype.stock_reservation_entry.stock_reservation_entry import (
cancel_stock_reservation_entries,
get_sre_reserved_qty_details_for_voucher,
+ has_reserved_stock,
)
from erpnext.stock.get_item_details import get_default_bom, get_price_list_rate
from erpnext.stock.stock_balance import get_reserved_qty, update_bin_qty
@@ -49,16 +50,13 @@
super(SalesOrder, self).__init__(*args, **kwargs)
def onload(self) -> None:
- if frappe.get_cached_value("Stock Settings", None, "enable_stock_reservation"):
- from erpnext.stock.doctype.stock_reservation_entry.stock_reservation_entry import (
- has_reserved_stock,
- )
-
- if has_reserved_stock(self.doctype, self.name):
- self.set_onload("has_reserved_stock", True)
-
- if self.has_unreserved_stock():
- self.set_onload("has_unreserved_stock", True)
+ stock_settings = frappe.get_doc("Stock Settings")
+ self.set_onload("enable_stock_reservation", stock_settings.enable_stock_reservation)
+ self.set_onload(
+ "reserve_stock_on_so_submission", stock_settings.reserve_stock_on_sales_order_submission
+ )
+ self.set_onload("has_reserved_stock", has_reserved_stock(self.doctype, self.name))
+ self.set_onload("has_unreserved_stock", self.has_unreserved_stock())
def validate(self):
super(SalesOrder, self).validate()