79 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			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()
 |