From d933d0b47880ff688a24b9d02240912a97a9bc13 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 10 Feb 2025 20:33:27 +0530 Subject: [PATCH] refactor: handle budget for material request --- erpnext/controllers/budget_controller.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/erpnext/controllers/budget_controller.py b/erpnext/controllers/budget_controller.py index 33a7f5e286d..d21079a914f 100644 --- a/erpnext/controllers/budget_controller.py +++ b/erpnext/controllers/budget_controller.py @@ -18,7 +18,9 @@ class BudgetValidation: self.doc = doc self.company = doc.get("company") self.doc_date = ( - doc.get("transaction_date") if doc.get("doctype") == "Purchase Order" else doc.get("posting_date") + doc.get("transaction_date") + if doc.get("doctype") in ["Purchase Order", "Material Request"] + else doc.get("posting_date") ) fy = get_fiscal_year(self.doc_date) self.fiscal_year = fy[0] @@ -167,7 +169,6 @@ class BudgetValidation: conditions.append(mr.material_request_type.eq("Purchase")) conditions.append(mr.status.ne("Stopped")) conditions.append(mr.transaction_date[self.fy_start_date : self.fy_end_date]) - conditions.append(mri.amount.gt(mri.billed_amt)) conditions.append(mri.expense_account.isin(exp_accounts)) conditions.append(mri.item_code.isin(items)) @@ -200,6 +201,20 @@ class BudgetValidation: ) frappe.throw(_msg, BudgetExceededError, title=_("Budget Exceeded")) + if budget.applicable_on_material_request and v_map.get("requested_amount") > v_map.get( + "budget_amount" + ): + # TODO: handle monthly accumulation + # action_if_accumulated_monthly_budget_exceeded_on_po, + if budget.action_if_annual_budget_exceeded_on_po == "Warn": + msg.append("some warning message") + + if budget.action_if_annual_budget_exceeded_on_po == "Stop": + _msg = _( + "Expenses have gone above budget: {}".format(get_link_to_form("Budget", budget.name)) + ) + frappe.throw(_msg, BudgetExceededError, title=_("Budget Exceeded")) + def validate_for_overbooking(self): # TODO: Need to fetch historical amount and add them to the current document; GL effect is pending # TODO: handle applicable checkboxes