From 5d66cc4c4a3a91af0d306f24c0b35f69a9b2966e Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Thu, 10 Mar 2022 12:22:37 +0530 Subject: [PATCH] fix: Add cost center in loan document --- erpnext/loan_management/doctype/loan/loan.json | 15 ++++++++++++++- erpnext/loan_management/doctype/loan/loan.py | 8 ++++++++ .../loan_interest_accrual.py | 7 ++++--- erpnext/patches.txt | 3 ++- .../patches/v13_0/add_cost_center_in_loans.py | 16 ++++++++++++++++ 5 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 erpnext/patches/v13_0/add_cost_center_in_loans.py diff --git a/erpnext/loan_management/doctype/loan/loan.json b/erpnext/loan_management/doctype/loan/loan.json index 196f36f0f46..ef78a640aa0 100644 --- a/erpnext/loan_management/doctype/loan/loan.json +++ b/erpnext/loan_management/doctype/loan/loan.json @@ -32,6 +32,8 @@ "monthly_repayment_amount", "repayment_start_date", "is_term_loan", + "accounting_dimensions_section", + "cost_center", "account_info", "mode_of_payment", "disbursement_account", @@ -366,12 +368,23 @@ "options": "Account", "read_only": 1, "reqd": 1 + }, + { + "fieldname": "accounting_dimensions_section", + "fieldtype": "Section Break", + "label": "Accounting Dimensions" + }, + { + "fieldname": "cost_center", + "fieldtype": "Link", + "label": "Cost Center", + "options": "Cost Center" } ], "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2022-01-25 16:29:16.325501", + "modified": "2022-03-10 11:50:31.957360", "modified_by": "Administrator", "module": "Loan Management", "name": "Loan", diff --git a/erpnext/loan_management/doctype/loan/loan.py b/erpnext/loan_management/doctype/loan/loan.py index b798e088b4f..0fe9947472b 100644 --- a/erpnext/loan_management/doctype/loan/loan.py +++ b/erpnext/loan_management/doctype/loan/loan.py @@ -25,6 +25,7 @@ class Loan(AccountsController): self.set_loan_amount() self.validate_loan_amount() self.set_missing_fields() + self.validate_cost_center() self.validate_accounts() self.check_sanctioned_amount_limit() self.validate_repay_from_salary() @@ -45,6 +46,13 @@ class Loan(AccountsController): frappe.throw(_("Account {0} does not belongs to company {1}").format(frappe.bold(self.get(fieldname)), frappe.bold(self.company))) + def validate_cost_center(self): + if not self.cost_center and self.rate_of_interest != 0: + self.cost_center = frappe.db.get_value('Company', self.company, 'cost_center') + + if not self.cost_center: + frappe.throw(_('Cost center is mandatory for loans having rate of interest greater than 0')) + def on_submit(self): self.link_loan_security_pledge() diff --git a/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.py b/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.py index 1c800a06da0..f6a3ededcbe 100644 --- a/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.py +++ b/erpnext/loan_management/doctype/loan_interest_accrual/loan_interest_accrual.py @@ -6,7 +6,6 @@ import frappe from frappe import _ from frappe.utils import add_days, cint, date_diff, flt, get_datetime, getdate, nowdate -import erpnext from erpnext.accounts.general_ledger import make_gl_entries from erpnext.controllers.accounts_controller import AccountsController @@ -41,6 +40,8 @@ class LoanInterestAccrual(AccountsController): def make_gl_entries(self, cancel=0, adv_adj=0): gle_map = [] + cost_center = frappe.db.get_value('Loan', self.loan, 'cost_center') + if self.interest_amount: gle_map.append( self.get_gl_dict({ @@ -54,7 +55,7 @@ class LoanInterestAccrual(AccountsController): "against_voucher": self.loan, "remarks": _("Interest accrued from {0} to {1} against loan: {2}").format( self.last_accrual_date, self.posting_date, self.loan), - "cost_center": erpnext.get_default_cost_center(self.company), + "cost_center": cost_center, "posting_date": self.posting_date }) ) @@ -69,7 +70,7 @@ class LoanInterestAccrual(AccountsController): "against_voucher": self.loan, "remarks": ("Interest accrued from {0} to {1} against loan: {2}").format( self.last_accrual_date, self.posting_date, self.loan), - "cost_center": erpnext.get_default_cost_center(self.company), + "cost_center": cost_center, "posting_date": self.posting_date }) ) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 13f0e7b872e..ebda8058e02 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -357,4 +357,5 @@ erpnext.patches.v13_0.set_work_order_qty_in_so_from_mr erpnext.patches.v13_0.update_accounts_in_loan_docs erpnext.patches.v14_0.update_batch_valuation_flag erpnext.patches.v14_0.delete_non_profit_doctypes -erpnext.patches.v14_0.update_employee_advance_status \ No newline at end of file +erpnext.patches.v14_0.update_employee_advance_status +erpnext.patches.v13_0.add_cost_center_in_loans \ No newline at end of file diff --git a/erpnext/patches/v13_0/add_cost_center_in_loans.py b/erpnext/patches/v13_0/add_cost_center_in_loans.py new file mode 100644 index 00000000000..25e1722a4ff --- /dev/null +++ b/erpnext/patches/v13_0/add_cost_center_in_loans.py @@ -0,0 +1,16 @@ +import frappe + + +def execute(): + frappe.reload_doc('loan_management', 'doctype', 'loan') + loan = frappe.qb.DocType('Loan') + + for company in frappe.get_all('Company', pluck='name'): + default_cost_center = frappe.db.get_value('Company', company, 'cost_center') + frappe.qb.update( + loan + ).set( + loan.cost_center, default_cost_center + ).where( + loan.company == company + ).run() \ No newline at end of file