From af80d253dbf5d1502f3df4a18b234d392bd96556 Mon Sep 17 00:00:00 2001 From: HENRY Florian Date: Wed, 17 Jan 2024 06:13:36 +0100 Subject: [PATCH] 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 --- erpnext/selling/doctype/sales_order/sales_order.js | 3 +++ erpnext/selling/doctype/sales_order/sales_order.py | 12 ++++++++++++ .../doctype/sales_order_item/sales_order_item.json | 12 ++++++++++++ 3 files changed, 27 insertions(+) diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js index b206e3fe33..56c745c00a 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.js +++ b/erpnext/selling/doctype/sales_order/sales_order.js @@ -94,6 +94,9 @@ frappe.ui.form.on("Sales Order", { 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 95423612c8..5ef2c50146 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -200,6 +200,7 @@ class SalesOrder(SellingController): 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 @@ class SalesOrder(SellingController): ).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 d4ccfc4753..87aeeac368 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,