From 430617cb6841c49f7f8302296fa9245edadfe8d8 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Fri, 22 Oct 2021 10:46:56 +0530 Subject: [PATCH] fix: Loan repayment schedule date (cherry picked from commit 1a5f0da6cafa7001373a5463f04c09fcbd0dd29e) --- erpnext/loan_management/doctype/loan/loan.py | 10 ++++++++-- .../doctype/loan_repayment/loan_repayment.py | 7 +++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/erpnext/loan_management/doctype/loan/loan.py b/erpnext/loan_management/doctype/loan/loan.py index 325f6fdfddd..94e0c55a775 100644 --- a/erpnext/loan_management/doctype/loan/loan.py +++ b/erpnext/loan_management/doctype/loan/loan.py @@ -7,7 +7,7 @@ import math import frappe from frappe import _ -from frappe.utils import add_months, flt, getdate, now_datetime, nowdate +from frappe.utils import add_months, flt, get_last_day, getdate, now_datetime, nowdate from six import string_types import erpnext @@ -100,7 +100,7 @@ class Loan(AccountsController): "total_payment": total_payment, "balance_loan_amount": balance_amount }) - next_payment_date = add_months(payment_date, 1) + next_payment_date = add_single_month(payment_date) payment_date = next_payment_date def set_repayment_period(self): @@ -396,3 +396,9 @@ def get_shortfall_applicants(): "value": len(applicants), "fieldtype": "Int" } + +def add_single_month(date): + if getdate(date) == get_last_day(date): + return get_last_day(add_months(date, 1)) + else: + return add_months(date, 1) \ No newline at end of file diff --git a/erpnext/loan_management/doctype/loan_repayment/loan_repayment.py b/erpnext/loan_management/doctype/loan_repayment/loan_repayment.py index b8faea00fcc..d6c6899ce12 100644 --- a/erpnext/loan_management/doctype/loan_repayment/loan_repayment.py +++ b/erpnext/loan_management/doctype/loan_repayment/loan_repayment.py @@ -412,7 +412,10 @@ def get_penalty_details(against_loan): return None, 0 def regenerate_repayment_schedule(loan): - from erpnext.loan_management.doctype.loan.loan import get_monthly_repayment_amount + from erpnext.loan_management.doctype.loan.loan import ( + add_single_month, + get_monthly_repayment_amount, + ) loan_doc = frappe.get_doc('Loan', loan) next_accrual_date = None @@ -454,7 +457,7 @@ def regenerate_repayment_schedule(loan): "total_payment": total_payment, "balance_loan_amount": balance_amount }) - next_payment_date = add_months(payment_date, 1) + next_payment_date = add_single_month(payment_date) payment_date = next_payment_date loan_doc.save()