Merge pull request #25546 from deepeshgarg007/loan_schedule_fixes
fix: Minor fixes in loan
This commit is contained in:
commit
84ec295b43
@ -71,7 +71,6 @@ class Loan(AccountsController):
|
||||
frappe.throw(_("Repay From Salary can be selected only for term loans"))
|
||||
|
||||
def make_repayment_schedule(self):
|
||||
|
||||
if not self.repayment_start_date:
|
||||
frappe.throw(_("Repayment Start Date is mandatory for term loans"))
|
||||
|
||||
@ -79,10 +78,9 @@ class Loan(AccountsController):
|
||||
payment_date = self.repayment_start_date
|
||||
balance_amount = self.loan_amount
|
||||
while(balance_amount > 0):
|
||||
interest_amount = rounded(balance_amount * flt(self.rate_of_interest) / (12*100))
|
||||
interest_amount = flt(balance_amount * flt(self.rate_of_interest) / (12*100))
|
||||
principal_amount = self.monthly_repayment_amount - interest_amount
|
||||
balance_amount = rounded(balance_amount + interest_amount - self.monthly_repayment_amount)
|
||||
|
||||
balance_amount = flt(balance_amount + interest_amount - self.monthly_repayment_amount)
|
||||
if balance_amount < 0:
|
||||
principal_amount += balance_amount
|
||||
balance_amount = 0.0
|
||||
@ -196,7 +194,8 @@ def request_loan_closure(loan, posting_date=None):
|
||||
posting_date = getdate()
|
||||
|
||||
amounts = calculate_amounts(loan, posting_date)
|
||||
pending_amount = amounts['payable_amount'] + amounts['unaccrued_interest']
|
||||
pending_amount = amounts['pending_principal_amount'] + amounts['unaccrued_interest'] + \
|
||||
amounts['interest_amount'] + amounts['penalty_amount']
|
||||
|
||||
loan_type = frappe.get_value('Loan', loan, 'loan_type')
|
||||
write_off_limit = frappe.get_value('Loan Type', loan_type, 'write_off_amount')
|
||||
|
@ -56,25 +56,25 @@ class TestLoan(unittest.TestCase):
|
||||
def test_loan(self):
|
||||
loan = frappe.get_doc("Loan", {"applicant":self.applicant1})
|
||||
self.assertEquals(loan.monthly_repayment_amount, 15052)
|
||||
self.assertEquals(loan.total_interest_payable, 21034)
|
||||
self.assertEquals(loan.total_payment, 301034)
|
||||
self.assertEquals(flt(loan.total_interest_payable, 0), 21034)
|
||||
self.assertEquals(flt(loan.total_payment, 0), 301034)
|
||||
|
||||
schedule = loan.repayment_schedule
|
||||
|
||||
self.assertEqual(len(schedule), 20)
|
||||
|
||||
for idx, principal_amount, interest_amount, balance_loan_amount in [[3, 13369, 1683, 227079], [19, 14941, 105, 0], [17, 14740, 312, 29785]]:
|
||||
self.assertEqual(schedule[idx].principal_amount, principal_amount)
|
||||
self.assertEqual(schedule[idx].interest_amount, interest_amount)
|
||||
self.assertEqual(schedule[idx].balance_loan_amount, balance_loan_amount)
|
||||
for idx, principal_amount, interest_amount, balance_loan_amount in [[3, 13369, 1683, 227080], [19, 14941, 105, 0], [17, 14740, 312, 29785]]:
|
||||
self.assertEqual(flt(schedule[idx].principal_amount, 0), principal_amount)
|
||||
self.assertEqual(flt(schedule[idx].interest_amount, 0), interest_amount)
|
||||
self.assertEqual(flt(schedule[idx].balance_loan_amount, 0), balance_loan_amount)
|
||||
|
||||
loan.repayment_method = "Repay Fixed Amount per Period"
|
||||
loan.monthly_repayment_amount = 14000
|
||||
loan.save()
|
||||
|
||||
self.assertEquals(len(loan.repayment_schedule), 22)
|
||||
self.assertEquals(loan.total_interest_payable, 22712)
|
||||
self.assertEquals(loan.total_payment, 302712)
|
||||
self.assertEquals(flt(loan.total_interest_payable, 0), 22712)
|
||||
self.assertEquals(flt(loan.total_payment, 0), 302712)
|
||||
|
||||
def test_loan_with_security(self):
|
||||
|
||||
|
@ -435,7 +435,6 @@ def get_amounts(amounts, against_loan, posting_date):
|
||||
|
||||
@frappe.whitelist()
|
||||
def calculate_amounts(against_loan, posting_date, payment_type=''):
|
||||
|
||||
amounts = {
|
||||
'penalty_amount': 0.0,
|
||||
'interest_amount': 0.0,
|
||||
|
Loading…
x
Reference in New Issue
Block a user