optimize the patch
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index 2a22b32..feee067 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -340,10 +340,22 @@
def check_active_sales_items(obj):
for d in obj.get("items"):
if d.item_code:
- item = frappe.db.sql("""select docstatus,
- income_account from tabItem where name = %s""",
- d.item_code, as_dict=True)[0]
+ item = frappe.db.sql("""select i.docstatus, id.income_account
+ from `tabItem` i, `tabItem Default` id
+ where i.name=%s and id.parent=i.name and id.company=%s""",
+ (d.item_code,obj.company), as_dict=True)[0]
+ income_account_set = False
if getattr(d, "income_account", None) and not item.income_account:
- frappe.db.set_value("Item", d.item_code, "income_account",
- d.income_account)
+ doc = frappe.get_doc("Item", d.item_code)
+ for default in doc.item_defaults:
+ if default.company == obj.company:
+ default.income_account = d.income_account
+ income_account_set = True
+ else:
+ if not income_account_set:
+ doc.append("item_defaults", {
+ "company": obj.company,
+ "income_account": d.income_account
+ })
+ doc.save()
\ No newline at end of file
diff --git a/erpnext/patches/v11_0/move_item_defaults_to_child_table_for_multicompany.py b/erpnext/patches/v11_0/move_item_defaults_to_child_table_for_multicompany.py
index a78d2d6..8e17ea6 100644
--- a/erpnext/patches/v11_0/move_item_defaults_to_child_table_for_multicompany.py
+++ b/erpnext/patches/v11_0/move_item_defaults_to_child_table_for_multicompany.py
@@ -15,50 +15,45 @@
frappe.reload_doc('stock', 'doctype', 'item_default')
frappe.reload_doc('stock', 'doctype', 'item')
- item_details = frappe.get_all("Item", fields=["name", "default_warehouse", "buying_cost_center",
- "expense_account", "selling_cost_center", "income_account"], limit=100)
+ companies = frappe.get_all("Company")
+ if len(companies) == 1:
+ frappe.db.sql('''
+ INSERT INTO `tabItem Default`
+ (name, parent, parenttype, parentfield, idx, company, default_warehouse,
+ buying_cost_center, selling_cost_center, expense_account, income_account, default_supplier)
+ SELECT
+ SUBSTRING(SHA2(name,224), 1, 10) as name, name as parent, 'Item' as parenttype,
+ 'item_defaults' as parentfield, 1 as idx, %s as company, default_warehouse,
+ buying_cost_center, selling_cost_center, expense_account, income_account, default_supplier
+ FROM `tabItem`;
+ ''', companies[0].name)
+ else:
+ item_details = frappe.get_all("Item", fields=["name", "default_warehouse", "buying_cost_center",
+ "expense_account", "selling_cost_center", "income_account"], limit=100)
- for item in item_details:
- item_defaults = []
+ for item in item_details:
+ item_defaults = []
- def insert_into_item_defaults(doc_field_name, doc_field_value, company):
- for d in item_defaults:
- if d.get("company") == company:
- d[doc_field_name] = doc_field_value
- return
- item_defaults.append({
- "company": company,
- doc_field_name: doc_field_value
- })
+ def insert_into_item_defaults(doc_field_name, doc_field_value, company):
+ for d in item_defaults:
+ if d.get("company") == company:
+ d[doc_field_name] = doc_field_value
+ return
+ item_defaults.append({
+ "company": company,
+ doc_field_name: doc_field_value
+ })
- if item.default_warehouse:
- default_warehouse_company = frappe.get_value("Warehouse", item.default_warehouse, "company", cache=True)
- insert_into_item_defaults("default_warehouse", item.default_warehouse, default_warehouse_company)
+ for d in [
+ ["default_warehouse", "Warehouse"], ["expense_account", "Account"], ["expense_account", "Account"],
+ ["buying_cost_center", "Cost Center"], ["selling_cost_center", "Cost Center"]
+ ]:
+ if item.get(d[0]):
+ company = frappe.get_value(d[1], item.get(d[0]), "company", cache=True)
+ insert_into_item_defaults(d[0], item.get(d[0]), company)
- if item.buying_cost_center:
- buying_cost_center_company = get_cost_center_company(item.buying_cost_center)
- insert_into_item_defaults("buying_cost_center", item.buying_cost_center, buying_cost_center_company)
+ doc = frappe.get_doc("Item", item.name)
+ doc.extend("item_defaults", item_defaults)
- if item.selling_cost_center:
- selling_cost_center_company = get_cost_center_company(item.buying_cost_center)
- insert_into_item_defaults("selling_cost_center", item.selling_cost_center, selling_cost_center_company)
-
- if item.expense_account:
- expense_account_company = get_account_company(item.expense_account)
- insert_into_item_defaults("expense_account", item.expense_account, expense_account_company)
-
- if item.income_account:
- income_account_company = get_account_company(item.income_account)
- insert_into_item_defaults("income_account", item.income_account, income_account_company)
-
- doc = frappe.get_doc("Item", item.name)
- doc.extend("item_defaults", item_defaults)
-
- for child_doc in doc.item_defaults:
- child_doc.db_update()
-
-def get_account_company(account_name):
- return frappe.get_value("Account", account_name, "company", cache=True)
-
-def get_cost_center_company(cost_center):
- return frappe.get_value("Cost Center", cost_center, "company", cache=True)
+ for child_doc in doc.item_defaults:
+ child_doc.db_insert()
\ No newline at end of file
diff --git a/erpnext/selling/doctype/quotation/test_quotation.py b/erpnext/selling/doctype/quotation/test_quotation.py
index ced5ebf..3b36a2d 100644
--- a/erpnext/selling/doctype/quotation/test_quotation.py
+++ b/erpnext/selling/doctype/quotation/test_quotation.py
@@ -150,12 +150,10 @@
from erpnext.stock.doctype.item.test_item import make_item
first_item = make_item("_Test Laptop",
- {"is_stock_item": 1, "expense_account": "_Test Account Cost for Goods Sold - _TC",
- "cost_center": "_Test Cost Center - _TC"})
+ {"is_stock_item": 1})
second_item = make_item("_Test CPU",
- {"is_stock_item": 1, "expense_account": "_Test Account Cost for Goods Sold - _TC",
- "cost_center": "_Test Cost Center - _TC"})
+ {"is_stock_item": 1})
qo_item1 = [
{
diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py
index c5f7ef2..8388941 100644
--- a/erpnext/selling/doctype/sales_order/test_sales_order.py
+++ b/erpnext/selling/doctype/sales_order/test_sales_order.py
@@ -359,14 +359,9 @@
make_stock_entry(target="_Test Warehouse - _TC", qty=10, rate=100)
- po_item = make_item("_Test Item for Drop Shipping", {"is_stock_item": 1, "delivered_by_supplier": 1,
- 'default_supplier': '_Test Supplier',
- "expense_account": "_Test Account Cost for Goods Sold - _TC",
- "cost_center": "_Test Cost Center - _TC"
- })
+ po_item = make_item("_Test Item for Drop Shipping", {"is_stock_item": 1, "delivered_by_supplier": 1})
- dn_item = make_item("_Test Regular Item", {"is_stock_item": 1, "expense_account": "_Test Account Cost for Goods Sold - _TC",
- "cost_center": "_Test Cost Center - _TC"})
+ dn_item = make_item("_Test Regular Item", {"is_stock_item": 1})
so_items = [
{