brotherton-erpnext/erpnext/patches/v11_0/add_item_group_defaults.py
2022-03-28 18:52:46 +05:30

79 lines
2.5 KiB
Python

# Copyright (c) 2018, Frappe and Contributors
# License: GNU General Public License v3. See license.txt
import frappe
def execute():
"""
Fields to move from item group to item defaults child table
[ default_cost_center, default_expense_account, default_income_account ]
"""
frappe.reload_doc("stock", "doctype", "item_default")
frappe.reload_doc("setup", "doctype", "item_group")
companies = frappe.get_all("Company")
item_groups = frappe.db.sql(
"""select name, default_income_account, default_expense_account,\
default_cost_center from `tabItem Group`""",
as_dict=True,
)
if len(companies) == 1:
for item_group in item_groups:
doc = frappe.get_doc("Item Group", item_group.get("name"))
item_group_defaults = []
item_group_defaults.append(
{
"company": companies[0].name,
"income_account": item_group.get("default_income_account"),
"expense_account": item_group.get("default_expense_account"),
"buying_cost_center": item_group.get("default_cost_center"),
"selling_cost_center": item_group.get("default_cost_center"),
}
)
doc.extend("item_group_defaults", item_group_defaults)
for child_doc in doc.item_group_defaults:
child_doc.db_insert()
else:
item_group_dict = {
"default_expense_account": ["expense_account"],
"default_income_account": ["income_account"],
"default_cost_center": ["buying_cost_center", "selling_cost_center"],
}
for item_group in item_groups:
item_group_defaults = []
def insert_into_item_defaults(doc_field_name, doc_field_value, company):
for d in item_group_defaults:
if d.get("company") == company:
d[doc_field_name[0]] = doc_field_value
if len(doc_field_name) > 1:
d[doc_field_name[1]] = doc_field_value
return
item_group_defaults.append({"company": company, doc_field_name[0]: doc_field_value})
if len(doc_field_name) > 1:
item_group_defaults[len(item_group_defaults) - 1][doc_field_name[1]] = doc_field_value
for d in [
["default_expense_account", "Account"],
["default_income_account", "Account"],
["default_cost_center", "Cost Center"],
]:
if item_group.get(d[0]):
company = frappe.get_value(d[1], item_group.get(d[0]), "company", cache=True)
doc_field_name = item_group_dict.get(d[0])
insert_into_item_defaults(doc_field_name, item_group.get(d[0]), company)
doc = frappe.get_doc("Item Group", item_group.get("name"))
doc.extend("item_group_defaults", item_group_defaults)
for child_doc in doc.item_group_defaults:
child_doc.db_insert()