Merge pull request #47734 from frappe/perf_item_import

perf: speedup item import
This commit is contained in:
Ankush Menat
2025-05-26 15:43:26 +05:30
committed by GitHub

View File

@@ -226,7 +226,10 @@ class Item(Document):
def validate_description(self): def validate_description(self):
"""Clean HTML description if set""" """Clean HTML description if set"""
if cint(frappe.db.get_single_value("Stock Settings", "clean_description_html")): if (
cint(frappe.db.get_single_value("Stock Settings", "clean_description_html"))
and self.description != self.item_name # perf: Avoid cleaning up a fallback
):
self.description = clean_html(self.description) self.description = clean_html(self.description)
def validate_customer_provided_part(self): def validate_customer_provided_part(self):
@@ -306,7 +309,7 @@ class Item(Document):
if self.stock_ledger_created(): if self.stock_ledger_created():
frappe.throw(_("Cannot be a fixed asset item as Stock Ledger is created.")) frappe.throw(_("Cannot be a fixed asset item as Stock Ledger is created."))
if not self.is_fixed_asset: if not self.is_fixed_asset and not self.is_new():
asset = frappe.db.get_all("Asset", filters={"item_code": self.name, "docstatus": 1}, limit=1) asset = frappe.db.get_all("Asset", filters={"item_code": self.name, "docstatus": 1}, limit=1)
if asset: if asset:
frappe.throw( frappe.throw(
@@ -526,6 +529,9 @@ class Item(Document):
return self._stock_ledger_created return self._stock_ledger_created
def update_item_price(self): def update_item_price(self):
if self.is_new():
return
frappe.db.sql( frappe.db.sql(
""" """
UPDATE `tabItem Price` UPDATE `tabItem Price`
@@ -722,23 +728,9 @@ class Item(Document):
if self.item_defaults or not self.item_group: if self.item_defaults or not self.item_group:
return return
item_defaults = frappe.db.get_values( item_group = frappe.get_cached_doc("Item Group", self.item_group)
"Item Default", if item_group.item_group_defaults:
{"parent": self.item_group}, for item in item_group.item_group_defaults:
[
"company",
"default_warehouse",
"default_price_list",
"buying_cost_center",
"default_supplier",
"expense_account",
"selling_cost_center",
"income_account",
],
as_dict=1,
)
if item_defaults:
for item in item_defaults:
self.append( self.append(
"item_defaults", "item_defaults",
{ {
@@ -759,9 +751,8 @@ class Item(Document):
if ( if (
defaults.get("default_warehouse") defaults.get("default_warehouse")
and defaults.company and defaults.company
and frappe.db.exists( and defaults.company
"Warehouse", {"name": defaults.default_warehouse, "company": defaults.company} == frappe.get_cached_value("Warehouse", defaults.default_warehouse, "company")
)
): ):
self.append( self.append(
"item_defaults", "item_defaults",
@@ -790,7 +781,10 @@ class Item(Document):
) )
def validate_has_variants(self): def validate_has_variants(self):
if not self.has_variants and frappe.db.get_value("Item", self.name, "has_variants"): if self.is_new():
return
if not self.has_variants and self.has_value_changed("has_variants"):
if frappe.db.exists("Item", {"variant_of": self.name}): if frappe.db.exists("Item", {"variant_of": self.name}):
frappe.throw(_("Item has variants.")) frappe.throw(_("Item has variants."))