50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import frappe
 | |
| from frappe.utils import today
 | |
| 
 | |
| 
 | |
| def execute():
 | |
| 	for dt in ("cost_center_allocation", "cost_center_allocation_percentage"):
 | |
| 		frappe.reload_doc("accounts", "doctype", dt)
 | |
| 
 | |
| 	cc_allocations = get_existing_cost_center_allocations()
 | |
| 	if cc_allocations:
 | |
| 		create_new_cost_center_allocation_records(cc_allocations)
 | |
| 
 | |
| 	frappe.delete_doc("DocType", "Distributed Cost Center", ignore_missing=True)
 | |
| 
 | |
| 
 | |
| def create_new_cost_center_allocation_records(cc_allocations):
 | |
| 	for main_cc, allocations in cc_allocations.items():
 | |
| 		cca = frappe.new_doc("Cost Center Allocation")
 | |
| 		cca.main_cost_center = main_cc
 | |
| 		cca.valid_from = today()
 | |
| 
 | |
| 		for child_cc, percentage in allocations.items():
 | |
| 			cca.append("allocation_percentages", ({"cost_center": child_cc, "percentage": percentage}))
 | |
| 		cca.save()
 | |
| 		cca.submit()
 | |
| 
 | |
| 
 | |
| def get_existing_cost_center_allocations():
 | |
| 	if not frappe.db.exists("DocType", "Distributed Cost Center"):
 | |
| 		return
 | |
| 
 | |
| 	par = frappe.qb.DocType("Cost Center")
 | |
| 	child = frappe.qb.DocType("Distributed Cost Center")
 | |
| 
 | |
| 	records = (
 | |
| 		frappe.qb.from_(par)
 | |
| 		.inner_join(child)
 | |
| 		.on(par.name == child.parent)
 | |
| 		.select(par.name, child.cost_center, child.percentage_allocation)
 | |
| 		.where(par.enable_distributed_cost_center == 1)
 | |
| 	).run(as_dict=True)
 | |
| 
 | |
| 	cc_allocations = frappe._dict()
 | |
| 	for d in records:
 | |
| 		cc_allocations.setdefault(d.name, frappe._dict()).setdefault(
 | |
| 			d.cost_center, d.percentage_allocation
 | |
| 		)
 | |
| 
 | |
| 	return cc_allocations
 |