test: tests for loan status Disbursed, Settled and on payment Entry for attached invoices
diff --git a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.py b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.py
index 2777d0b..7b1dcd4 100644
--- a/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.py
+++ b/erpnext/accounts/doctype/invoice_discounting/invoice_discounting.py
@@ -103,7 +103,6 @@
"reference_type": "Invoice Discounting",
"reference_name": self.name
})
-
for d in self.invoices:
je.append("accounts", {
"account": self.accounts_receivable_discounted,
@@ -123,7 +122,7 @@
"party": d.customer
})
- return je.as_dict()
+ return je
def close_loan(self):
je = frappe.new_doc("Journal Entry")
@@ -163,7 +162,7 @@
"party": d.customer
})
- return je.as_dict()
+ return je
@frappe.whitelist()
def get_invoices(filters):
diff --git a/erpnext/accounts/doctype/invoice_discounting/test_invoice_discounting.py b/erpnext/accounts/doctype/invoice_discounting/test_invoice_discounting.py
index 96e3991..3e19448 100644
--- a/erpnext/accounts/doctype/invoice_discounting/test_invoice_discounting.py
+++ b/erpnext/accounts/doctype/invoice_discounting/test_invoice_discounting.py
@@ -4,12 +4,12 @@
from __future__ import unicode_literals
import frappe
-from frappe.utils import nowdate, add_days
+from frappe.utils import nowdate, add_days, flt
import unittest
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import get_gl_entries
from erpnext.accounts.doctype.account.test_account import create_account
-
+from erpnext.accounts.doctype.journal_entry.journal_entry import get_payment_entry_against_invoice
class TestInvoiceDiscounting(unittest.TestCase):
def setUp(self):
self.ar_credit = create_account(account_name="_Test Accounts Receivable Credit", parent_account = "Accounts Receivable - _TC")
@@ -19,7 +19,6 @@
self.bank_account = create_account(account_name="_Test Bank 2", parent_account = "Bank Accounts - _TC" )
self.bank_charges_account = create_account(account_name="_Test Bank Charges Account", parent_account = "Expenses - _TC")
-
def test_total_amount(self):
inv1 = create_sales_invoice(rate=200)
inv2 = create_sales_invoice(rate=500)
@@ -70,8 +69,9 @@
self.assertEqual(inv_disc.status, "Sanctioned")
self.assertEqual(inv_disc.loan_end_date, add_days(inv_disc.loan_start_date, inv_disc.loan_period))
- '''def test_on_disbursed(self):
- inv = create_sales_invoice(rate=300)
+
+ def test_on_disbursed(self):
+ inv = create_sales_invoice(rate=500)
inv_disc = create_invoice_discounting([inv.name],
accounts_receivable_credit=self.ar_credit,
accounts_receivable_discounted=self.ar_discounted,
@@ -79,14 +79,149 @@
short_term_loan=self.short_term_loan,
bank_charges_account=self.bank_charges_account,
bank_account=self.bank_account,
- set_status='Disbursed'
)
- gle = get_gl_entries("Invoice Discounting", inv_disc.name)
- from pprint import pprint
- pprint(gle)'''
+ je = inv_disc.create_disbursement_entry()
- def test_on_invoice_payment
+ self.assertEqual(je.accounts[0].account, self.bank_account)
+ self.assertEqual(je.accounts[0].debit_in_account_currency, flt(inv_disc.total_amount) - flt(inv_disc.bank_charges))
+
+ self.assertEqual(je.accounts[1].account, self.bank_charges_account)
+ self.assertEqual(je.accounts[1].debit_in_account_currency, flt(inv_disc.bank_charges))
+
+ self.assertEqual(je.accounts[2].account, self.short_term_loan)
+ self.assertEqual(je.accounts[2].credit_in_account_currency, flt(inv_disc.total_amount))
+
+ self.assertEqual(je.accounts[3].account, self.ar_discounted)
+ self.assertEqual(je.accounts[3].debit_in_account_currency, flt(inv.outstanding_amount))
+
+ self.assertEqual(je.accounts[4].account, self.ar_credit)
+ self.assertEqual(je.accounts[4].credit_in_account_currency, flt(inv.outstanding_amount))
+
+
+ je.posting_date = nowdate()
+ je.submit()
+
+ inv_disc.reload()
+
+ self.assertEqual(inv_disc.status, "Disbursed")
+
+ def test_on_close_after_loan_period(self):
+ inv = create_sales_invoice(rate=600)
+ inv_disc = create_invoice_discounting([inv.name],
+ accounts_receivable_credit=self.ar_credit,
+ accounts_receivable_discounted=self.ar_discounted,
+ accounts_receivable_unpaid=self.ar_unpaid,
+ short_term_loan=self.short_term_loan,
+ bank_charges_account=self.bank_charges_account,
+ bank_account=self.bank_account,
+ start=nowdate(),
+ period=60
+ )
+
+ inv_disc.create_disbursement_entry()
+ je = inv_disc.close_loan()
+
+ self.assertEqual(je.accounts[0].account, self.short_term_loan)
+ self.assertEqual(je.accounts[0].debit_in_account_currency, flt(inv_disc.total_amount))
+
+ self.assertEqual(je.accounts[1].account, self.bank_account)
+ self.assertEqual(je.accounts[1].credit_in_account_currency, flt(inv_disc.total_amount))
+
+ self.assertEqual(je.accounts[2].account, self.ar_discounted)
+ self.assertEqual(je.accounts[2].credit_in_account_currency, flt(inv.outstanding_amount))
+
+ self.assertEqual(je.accounts[3].account, self.ar_unpaid)
+ self.assertEqual(je.accounts[3].debit_in_account_currency, flt(inv.outstanding_amount))
+
+ je.posting_date = nowdate()
+ je.submit()
+ inv_disc.reload()
+
+ self.assertEqual(inv_disc.status, "Settled")
+
+ def test_on_close_before_loan_period(self):
+ inv = create_sales_invoice(rate=700)
+ inv_disc = create_invoice_discounting([inv.name],
+ accounts_receivable_credit=self.ar_credit,
+ accounts_receivable_discounted=self.ar_discounted,
+ accounts_receivable_unpaid=self.ar_unpaid,
+ short_term_loan=self.short_term_loan,
+ bank_charges_account=self.bank_charges_account,
+ bank_account=self.bank_account,
+ start=add_days(nowdate(), -80),
+ period=60
+ )
+
+ inv_disc.create_disbursement_entry()
+ je = inv_disc.close_loan()
+
+ je.posting_date = nowdate()
+ je.submit()
+
+ self.assertEqual(je.accounts[0].account, self.short_term_loan)
+ self.assertEqual(je.accounts[0].debit_in_account_currency, flt(inv_disc.total_amount))
+
+ self.assertEqual(je.accounts[1].account, self.bank_account)
+ self.assertEqual(je.accounts[1].credit_in_account_currency, flt(inv_disc.total_amount))
+
+ inv_disc.reload()
+
+ self.assertEqual(inv_disc.status, "Settled")
+
+ def test_make_payment_before_loan_period(self):
+ #it has problem
+ inv = create_sales_invoice(rate=700)
+ inv_disc = create_invoice_discounting([inv.name],
+ accounts_receivable_credit=self.ar_credit,
+ accounts_receivable_discounted=self.ar_discounted,
+ accounts_receivable_unpaid=self.ar_unpaid,
+ short_term_loan=self.short_term_loan,
+ bank_charges_account=self.bank_charges_account,
+ bank_account=self.bank_account
+ )
+ je = inv_disc.create_disbursement_entry()
+ inv_disc.reload()
+ je.posting_date = nowdate()
+ je.submit()
+
+ je_on_payment = get_payment_entry_against_invoice("Sales Invoice", inv.name)
+
+ self.assertEqual(je_on_payment.accounts[0].account, self.ar_discounted)
+ self.assertEqual(je_on_payment.accounts[0].credit_in_account_currency, flt(inv.outstanding_amount))
+ #self.assertEqual(je_on_payment.accounts[0].account, self.bank_account)
+ self.assertEqual(je_on_payment.accounts[1].debit_in_account_currency, flt(inv.outstanding_amount))
+
+ def test_make_payment_before_after_period(self):
+ #it has problem
+ inv = create_sales_invoice(rate=700)
+ inv_disc = create_invoice_discounting([inv.name],
+ accounts_receivable_credit=self.ar_credit,
+ accounts_receivable_discounted=self.ar_discounted,
+ accounts_receivable_unpaid=self.ar_unpaid,
+ short_term_loan=self.short_term_loan,
+ bank_charges_account=self.bank_charges_account,
+ bank_account=self.bank_account,
+ loan_start_date=add_days(nowdate(), -10),
+ period=5
+ )
+ je = inv_disc.create_disbursement_entry()
+ inv_disc.reload()
+ je.posting_date = nowdate()
+ je.submit()
+
+ je = inv_disc.close_loan()
+ inv_disc.reload()
+ je.posting_date = nowdate()
+ je.submit()
+
+ je_on_payment = get_payment_entry_against_invoice("Sales Invoice", inv.name)
+
+ self.assertEqual(je_on_payment.accounts[0].account, self.ar_unpaid)
+ self.assertEqual(je_on_payment.accounts[0].credit_in_account_currency, flt(inv.outstanding_amount))
+ #self.assertEqual(je_on_payment.accounts[0].account, self.bank_account)
+ self.assertEqual(je_on_payment.accounts[1].debit_in_account_currency, flt(inv.outstanding_amount))
+
def create_invoice_discounting(invoices, **args):
args = frappe._dict(args)
@@ -113,7 +248,4 @@
if not args.do_not_submit:
inv_disc.submit()
- if args.set_status:
- inv_disc.status = args.set_status
-
return inv_disc