Files
erpnext/erpnext/patches/v16_0/make_workstation_operating_components.py
2025-08-19 13:29:32 +05:30

80 lines
2.0 KiB
Python

import frappe
from frappe import _
def get_operating_cost_account(company):
company_details = frappe.db.get_value(
"Company", company, ["default_operating_cost_account", "default_expense_account"], as_dict=True
)
return company_details.get("default_operating_cost_account") or company_details.get(
"default_expense_account"
)
def execute():
components = [
"Electricity",
"Consumables",
"Rent",
"Wages",
]
companies = frappe.get_all("Company", filters={"is_group": 0}, pluck="name")
for component in components:
component = _(component)
if not frappe.db.exists("Workstation Operating Component", component):
doc = frappe.new_doc("Workstation Operating Component")
doc.component_name = component
for company in companies:
operating_cost_account = get_operating_cost_account(company)
doc.append("accounts", {"company": company, "expense_account": operating_cost_account})
doc.insert()
workstations = frappe.get_all("Workstation", filters={"hour_rate": (">", 0.0)}, pluck="name") or []
workstation_types = (
frappe.get_all("Workstation Type", filters={"hour_rate": (">", 0.0)}, pluck="name") or []
)
if not workstations and not workstation_types:
return
components_map = {
"hour_rate_electricity": _("Electricity"),
"hour_rate_consumable": _("Consumables"),
"hour_rate_rent": _("Rent"),
"hour_rate_labour": _("Wages"),
}
for workstation in workstations:
doc = frappe.get_doc("Workstation", workstation)
for field, component in components_map.items():
if doc.get(field):
doc.append(
"workstation_costs",
{
"operating_component": component,
"operating_cost": doc.get(field),
},
)
doc.save()
for workstation_type in workstation_types:
doc = frappe.get_doc("Workstation Type", workstation_type)
for field, component in components_map.items():
if doc.get(field):
doc.append(
"workstation_costs",
{
"operating_component": component,
"operating_cost": doc.get(field),
},
)
doc.save()