fix: Add test for loan top up

This commit is contained in:
Deepesh Garg 2020-10-21 22:15:18 +05:30
parent 8f9bab79a7
commit 3f177bffac
4 changed files with 55 additions and 9 deletions

View File

@ -320,7 +320,7 @@ class TestLoan(unittest.TestCase):
amounts = amounts = calculate_amounts(loan.name, add_days(last_date, 6))
self.assertTrue(amounts['pending_principal_amount'] < 0)
self.assertTrue(amounts['payable_principal_amount'] < 0)
self.assertEquals(amounts['payable_principal_amount'], 0.0)
self.assertEqual(amounts['interest_amount'], 0)
def test_disbursal_check_with_shortfall(self):
@ -706,7 +706,7 @@ def create_loan_security():
"haircut": 50.00,
}).insert(ignore_permissions=True)
def create_loan_security_pledge(applicant, pledges, loan_application):
def create_loan_security_pledge(applicant, pledges, loan_application=None, loan=None):
lsp = frappe.new_doc("Loan Security Pledge")
lsp.applicant_type = 'Customer'
@ -714,11 +714,13 @@ def create_loan_security_pledge(applicant, pledges, loan_application):
lsp.company = "_Test Company"
lsp.loan_application = loan_application
if loan:
lsp.loan = loan
for pledge in pledges:
lsp.append('securities', {
"loan_security": pledge['loan_security'],
"qty": pledge['qty'],
"haircut": pledge['haircut']
"qty": pledge['qty']
})
lsp.save()

View File

@ -8,9 +8,10 @@ from frappe.utils import (nowdate, add_days, get_datetime, get_first_day, get_la
from erpnext.loan_management.doctype.loan.test_loan import (create_loan_type, create_loan_security_pledge, create_repayment_entry, create_loan_application,
make_loan_disbursement_entry, create_loan_accounts, create_loan_security_type, create_loan_security, create_demand_loan, create_loan_security_price)
from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import process_loan_interest_accrual_for_demand_loans
from erpnext.loan_management.doctype.loan_interest_accrual.loan_interest_accrual import days_in_year
from erpnext.loan_management.doctype.loan_interest_accrual.loan_interest_accrual import days_in_year, get_per_day_interest
from erpnext.selling.doctype.customer.test_customer import get_customer_dict
from erpnext.loan_management.doctype.loan_application.loan_application import create_pledge
from erpnext.loan_management.doctype.loan_repayment.loan_repayment import calculate_amounts
class TestLoanDisbursement(unittest.TestCase):
@ -68,3 +69,44 @@ class TestLoanDisbursement(unittest.TestCase):
# After repayment loan disbursement entry should go through
make_loan_disbursement_entry(loan.name, 500000, disbursement_date=add_days(last_date, 16))
def test_loan_topup_with_additional_pledge(self):
pledge = [{
"loan_security": "Test Security 1",
"qty": 4000.00
}]
loan_application = create_loan_application('_Test Company', self.applicant, 'Demand Loan', pledge)
create_pledge(loan_application)
loan = create_demand_loan(self.applicant, "Demand Loan", loan_application, posting_date='2019-10-01')
loan.submit()
self.assertEquals(loan.loan_amount, 1000000)
first_date = '2019-10-01'
last_date = '2019-10-30'
# Disbursed 10,00,000 amount
make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=first_date)
process_loan_interest_accrual_for_demand_loans(posting_date = last_date)
amounts = calculate_amounts(loan.name, add_days(last_date, 1))
previous_interest = amounts['interest_amount']
pledge1 = [{
"loan_security": "Test Security 1",
"qty": 2000.00
}]
create_loan_security_pledge(self.applicant, pledge1, loan=loan.name)
# Topup 500000
make_loan_disbursement_entry(loan.name, 500000, disbursement_date=add_days(last_date, 1))
process_loan_interest_accrual_for_demand_loans(posting_date = add_days(last_date, 15))
amounts = calculate_amounts(loan.name, add_days(last_date, 15))
per_day_interest = get_per_day_interest(1500000, 13.5, '2019-10-30')
interest = per_day_interest * 15
self.assertEquals(amounts['pending_principal_amount'], 1500000)
self.assertEquals(amounts['interest_amount'], flt(interest + previous_interest, 2))

View File

@ -5,7 +5,7 @@ from __future__ import unicode_literals
import frappe
import unittest
from frappe.utils import (nowdate, add_days, get_datetime, get_first_day, get_last_day, date_diff, flt, add_to_date)
from erpnext.loan_management.doctype.loan.test_loan import (create_loan_type, create_loan_security_pledge, create_loan_security_price,
from erpnext.loan_management.doctype.loan.test_loan import (create_loan_type, create_loan_security_price,
make_loan_disbursement_entry, create_loan_accounts, create_loan_security_type, create_loan_security, create_demand_loan, create_loan_application)
from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import process_loan_interest_accrual_for_demand_loans
from erpnext.loan_management.doctype.loan_interest_accrual.loan_interest_accrual import days_in_year

View File

@ -357,8 +357,8 @@ def get_amounts(amounts, against_loan, posting_date):
pending_days = date_diff(posting_date, against_loan_doc.disbursement_date) + 1
if pending_days > 0:
payable_principal_amount = flt(pending_principal_amount, precision)
per_day_interest = get_per_day_interest(payable_principal_amount, loan_type_details.rate_of_interest, posting_date)
principal_amount = flt(pending_principal_amount, precision)
per_day_interest = get_per_day_interest(principal_amount, loan_type_details.rate_of_interest, posting_date)
unaccrued_interest += (pending_days * flt(per_day_interest, precision))
amounts["pending_principal_amount"] = flt(pending_principal_amount, precision)
@ -389,9 +389,11 @@ def calculate_amounts(against_loan, posting_date, payment_type=''):
amounts = get_amounts(amounts, against_loan, posting_date)
# update values for closure
if payment_type == 'Loan Closure':
amounts['payable_amount'] += amounts['unaccrued_interest']
amounts['payable_principal_amount'] = amounts['pending_principal_amount']
amounts['interest_amount'] += amounts['unaccrued_interest']
amounts['payable_amount'] = amounts['payable_principal_amount'] + amounts['interest_amount']
return amounts