diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 3fffade9bb5..4bbb3e9e702 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -527,3 +527,4 @@ erpnext.patches.v11_0.rename_field_max_days_allowed erpnext.patches.v11_0.create_salary_structure_assignments erpnext.patches.v11_0.rename_health_insurance erpnext.patches.v11_0.rebuild_tree_for_company +erpnext.patches.v11_0.create_department_records_for_each_company diff --git a/erpnext/patches/v11_0/create_department_records_for_each_company.py b/erpnext/patches/v11_0/create_department_records_for_each_company.py new file mode 100644 index 00000000000..514c7090716 --- /dev/null +++ b/erpnext/patches/v11_0/create_department_records_for_each_company.py @@ -0,0 +1,51 @@ +import frappe +from frappe.utils.nestedset import rebuild_tree + +def execute(): + frappe.reload_doc("hr", "doctype", "department") + companies = frappe.db.get_all("Company", fields=["name", "abbr"]) + departments = frappe.db.get_all("Department") + comp_dict = {} + + # create a blank list for each company + for company in companies: + comp_dict[company.name] = {} + + for department in departments: + # skip root node + if department.name == "All Departments": + continue + + # for each company, create a copy of the doc + department_doc = frappe.get_doc("Department", department) + for company in companies: + copy_doc = frappe.copy_doc(department_doc) + copy_doc.update({"company": company.name}) + copy_doc.insert() + + # append list of new department for each company + comp_dict[company.name][department.name] = copy_doc.name + + rebuild_tree('Department', 'parent_department') + doctypes = ["Asset", "Employee", "Leave Period", "Payroll Entry", "Staffing Plan", "Job Opening"] + + for d in doctypes: + update_records(d, comp_dict) + +def update_records(doctype, comp_dict): + when_then = [] + for company in comp_dict: + records = comp_dict[company] + + for department in records: + when_then.append(''' + WHEN company = "%s" and department = "%s" + THEN "%s" + '''%(company, department, records[department])) + + frappe.db.sql(""" + update + `tab%s` + set + department = CASE %s END + """%(doctype, " ".join(when_then)), debug=1)