|
|
@ -4,7 +4,7 @@ from __future__ import unicode_literals |
|
|
|
|
|
|
|
import frappe |
|
|
|
import unittest |
|
|
|
from frappe.utils import random_string, nowdate |
|
|
|
from frappe.utils import random_string, nowdate, flt |
|
|
|
from erpnext.hr.doctype.expense_claim.expense_claim import make_bank_entry |
|
|
|
from erpnext.accounts.doctype.account.test_account import create_account |
|
|
|
from erpnext.hr.doctype.employee.test_employee import make_employee |
|
|
@ -138,6 +138,31 @@ class TestExpenseClaim(unittest.TestCase): |
|
|
|
expense_claim.submit() |
|
|
|
frappe.set_user("Administrator") |
|
|
|
|
|
|
|
def test_multiple_payment_entries_against_expense(self): |
|
|
|
# Creating expense claim |
|
|
|
payable_account = get_payable_account("_Test Company") |
|
|
|
expense_claim = make_expense_claim(payable_account, 5500, 5500, "_Test Company", "Travel Expenses - _TC") |
|
|
|
expense_claim.save() |
|
|
|
expense_claim.submit() |
|
|
|
|
|
|
|
# Payment entry 1: paying 500 |
|
|
|
make_payment_entry(expense_claim, payable_account,500) |
|
|
|
outstanding_amount, total_amount_reimbursed = get_outstanding_and_total_reimbursed_amounts(expense_claim) |
|
|
|
self.assertEqual(outstanding_amount, 5000) |
|
|
|
self.assertEqual(total_amount_reimbursed, 500) |
|
|
|
|
|
|
|
# Payment entry 1: paying 2000 |
|
|
|
make_payment_entry(expense_claim, payable_account,2000) |
|
|
|
outstanding_amount, total_amount_reimbursed = get_outstanding_and_total_reimbursed_amounts(expense_claim) |
|
|
|
self.assertEqual(outstanding_amount, 3000) |
|
|
|
self.assertEqual(total_amount_reimbursed, 2500) |
|
|
|
|
|
|
|
# Payment entry 1: paying 3000 |
|
|
|
make_payment_entry(expense_claim, payable_account,3000) |
|
|
|
outstanding_amount, total_amount_reimbursed = get_outstanding_and_total_reimbursed_amounts(expense_claim) |
|
|
|
self.assertEqual(outstanding_amount, 0) |
|
|
|
self.assertEqual(total_amount_reimbursed, 5500) |
|
|
|
|
|
|
|
|
|
|
|
def get_payable_account(company): |
|
|
|
return frappe.get_cached_value('Company', company, 'default_payable_account') |
|
|
@ -191,3 +216,23 @@ def make_expense_claim(payable_account, amount, sanctioned_amount, company, acco |
|
|
|
return expense_claim |
|
|
|
expense_claim.submit() |
|
|
|
return expense_claim |
|
|
|
|
|
|
|
def get_outstanding_and_total_reimbursed_amounts(expense_claim): |
|
|
|
outstanding_amount = flt(frappe.db.get_value("Expense Claim", expense_claim.name, "total_sanctioned_amount")) - \ |
|
|
|
flt(frappe.db.get_value("Expense Claim", expense_claim.name, "total_amount_reimbursed")) |
|
|
|
total_amount_reimbursed = flt(frappe.db.get_value("Expense Claim", expense_claim.name, "total_amount_reimbursed")) |
|
|
|
|
|
|
|
return outstanding_amount,total_amount_reimbursed |
|
|
|
|
|
|
|
def make_payment_entry(expense_claim, payable_account, amt): |
|
|
|
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry |
|
|
|
|
|
|
|
pe = get_payment_entry("Expense Claim", expense_claim.name, bank_account="_Test Bank USD - _TC", bank_amount=amt) |
|
|
|
pe.reference_no = "1" |
|
|
|
pe.reference_date = nowdate() |
|
|
|
pe.source_exchange_rate = 1 |
|
|
|
pe.paid_to = payable_account |
|
|
|
pe.references[0].allocated_amount = amt |
|
|
|
pe.insert() |
|
|
|
pe.submit() |
|
|
|
|
|
|
|