mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-19 09:28:46 +00:00
perf(stock): skip item metadata rewrite when settings unchanged
Every Stock Settings save rewrote the Item naming property setters and the barcode visibility property setters. make_property_setter without a doctype fans out to every doctype that has the fieldname and clears each doctype's cache, and set_by_naming_series also backfills tabItem. Gate both on has_value_changed. Item naming behaviour is unaffected: it reads the item_naming_by default, which is still set on every save.
This commit is contained in:
@@ -84,22 +84,8 @@ class StockSettings(Document):
|
||||
]:
|
||||
frappe.db.set_default(key, self.get(key, ""))
|
||||
|
||||
from erpnext.utilities.naming import set_by_naming_series
|
||||
|
||||
set_by_naming_series(
|
||||
"Item",
|
||||
"item_code",
|
||||
self.get("item_naming_by") == "Naming Series",
|
||||
hide_name_field=True,
|
||||
make_mandatory=0,
|
||||
)
|
||||
|
||||
# show/hide barcode field
|
||||
for name in ["barcode", "barcodes", "scan_barcode"]:
|
||||
frappe.make_property_setter(
|
||||
{"fieldname": name, "property": "hidden", "value": 0 if self.show_barcode_field else 1},
|
||||
validate_fields_for_doctype=False,
|
||||
)
|
||||
self.update_item_naming_settings()
|
||||
self.update_barcode_field_visibility()
|
||||
|
||||
self.validate_over_delivery_receipt_allowance()
|
||||
self.validate_serial_and_batch_no_settings()
|
||||
@@ -113,6 +99,30 @@ class StockSettings(Document):
|
||||
self.change_precision_for_stock_entry()
|
||||
self.validate_do_not_use_batchwise_valuation()
|
||||
|
||||
def update_item_naming_settings(self):
|
||||
if not self.has_value_changed("item_naming_by"):
|
||||
return
|
||||
|
||||
from erpnext.utilities.naming import set_by_naming_series
|
||||
|
||||
set_by_naming_series(
|
||||
"Item",
|
||||
"item_code",
|
||||
self.get("item_naming_by") == "Naming Series",
|
||||
hide_name_field=True,
|
||||
make_mandatory=0,
|
||||
)
|
||||
|
||||
def update_barcode_field_visibility(self):
|
||||
if not self.has_value_changed("show_barcode_field"):
|
||||
return
|
||||
|
||||
for name in ["barcode", "barcodes", "scan_barcode"]:
|
||||
frappe.make_property_setter(
|
||||
{"fieldname": name, "property": "hidden", "value": 0 if self.show_barcode_field else 1},
|
||||
validate_fields_for_doctype=False,
|
||||
)
|
||||
|
||||
def validate_over_delivery_receipt_allowance(self):
|
||||
if not self.over_delivery_receipt_allowance:
|
||||
self.role_allowed_to_over_deliver_receive = None
|
||||
|
||||
Reference in New Issue
Block a user