fix: consistency in display reserved_stock checkbox on Sales Order Item according global settings and item.is_stock_item (#38322)
* fix: consistency in display reserved_stock checkbox on Sales Order Item according global settings and item.is_stock_item
* fix: evaluate depends_on for fdata visibility in grid
* fix: evaluate depends_on for fdata visibility in grid
* chore: change after review
* chore: change for review
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index b206e3f..56c745c 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -94,6 +94,9 @@
frm.set_value("reserve_stock", 0);
frm.set_df_property("reserve_stock", "read_only", 1);
frm.set_df_property("reserve_stock", "hidden", 1);
+ frm.fields_dict.items.grid.update_docfield_property('reserve_stock', 'hidden', 1);
+ frm.fields_dict.items.grid.update_docfield_property('reserve_stock', 'default', 0);
+ frm.fields_dict.items.grid.update_docfield_property('reserve_stock', 'read_only', 1);
}
})
}
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 9542361..5ef2c50 100755
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -200,6 +200,7 @@
self.validate_for_items()
self.validate_warehouse()
self.validate_drop_ship()
+ self.validate_reserved_stock()
self.validate_serial_no_based_delivery()
validate_against_blanket_order(self)
validate_inter_company_party(
@@ -660,6 +661,17 @@
).format(item.item_code)
)
+ def validate_reserved_stock(self):
+ """Clean reserved stock flag for non-stock Item"""
+
+ enable_stock_reservation = frappe.db.get_single_value(
+ "Stock Settings", "enable_stock_reservation"
+ )
+
+ for item in self.items:
+ if item.reserve_stock and (not enable_stock_reservation or not cint(item.is_stock_item)):
+ item.reserve_stock = 0
+
def has_unreserved_stock(self) -> bool:
"""Returns True if there is any unreserved item in the Sales Order."""
diff --git a/erpnext/selling/doctype/sales_order_item/sales_order_item.json b/erpnext/selling/doctype/sales_order_item/sales_order_item.json
index d4ccfc4..87aeeac 100644
--- a/erpnext/selling/doctype/sales_order_item/sales_order_item.json
+++ b/erpnext/selling/doctype/sales_order_item/sales_order_item.json
@@ -10,6 +10,7 @@
"item_code",
"customer_item_code",
"ensure_delivery_based_on_produced_serial_no",
+ "is_stock_item",
"reserve_stock",
"col_break1",
"delivery_date",
@@ -867,6 +868,7 @@
{
"allow_on_submit": 1,
"default": "1",
+ "depends_on": "eval:doc.is_stock_item",
"fieldname": "reserve_stock",
"fieldtype": "Check",
"label": "Reserve Stock",
@@ -891,6 +893,16 @@
"label": "Production Plan Qty",
"no_copy": 1,
"read_only": 1
+ },
+ {
+ "default": "0",
+ "fetch_from": "item_code.is_stock_item",
+ "fieldname": "is_stock_item",
+ "fieldtype": "Check",
+ "hidden": 1,
+ "label": "Is Stock Item",
+ "print_hide": 1,
+ "report_hide": 1
}
],
"idx": 1,