def test_claimed_status(self): # CLAIMED Status check, full amount claimed payable_account = get_payable_account("_Test Company") claim = make_expense_claim(payable_account, 1000, 1000, "_Test Company", "Travel Expenses - _TC", do_not_submit=True) advance = make_employee_advance(claim.employee) pe = make_payment_entry(advance) pe.submit() claim = get_advances_for_claim(claim, advance.name) claim.save() claim.submit() advance.reload() self.assertEqual(advance.claimed_amount, 1000) self.assertEqual(advance.status, "Claimed") # advance should not be shown in claims advances = get_advances(claim.employee) advances = [entry.name for entry in advances] self.assertTrue(advance.name not in advances) # cancel claim; status should be Paid claim.cancel() advance.reload() self.assertEqual(advance.claimed_amount, 0) self.assertEqual(advance.status, "Paid")
def test_payment_entry_against_ec(self): payable = frappe.db.get_value('Company', "_Test Company", 'default_payable_account') ec = make_expense_claim(payable, 300, 300, "_Test Company", "Travel Expenses - _TC") pe = get_payment_entry("Expense Claim", ec.name, bank_account="_Test Bank USD - _TC", bank_amount=300) pe.reference_no = "1" pe.reference_date = "2016-01-01" pe.source_exchange_rate = 1 pe.paid_to = payable pe.insert() pe.submit() expected_gle = dict((d[0], d) for d in [[payable, 300, 0, ec.name], ["_Test Bank USD - _TC", 0, 300, None]]) self.validate_gl_entries(pe.name, expected_gle) outstanding_amount = flt(frappe.db.get_value("Expense Claim", ec.name, "total_sanctioned_amount")) - \ flt(frappe.db.get_value("Expense Claim", ec.name, "total_amount_reimbursed")) self.assertEqual(outstanding_amount, 0)
def test_payment_entry_against_ec(self): payable = frappe.db.get_value('Company', "_Test Company", 'default_payable_account') ec = make_expense_claim(payable, 300, 300, "_Test Company","Travel Expenses - _TC") pe = get_payment_entry("Expense Claim", ec.name, bank_account="_Test Bank USD - _TC", bank_amount=300) pe.reference_no = "1" pe.reference_date = "2016-01-01" pe.source_exchange_rate = 1 pe.insert() pe.submit() expected_gle = dict((d[0], d) for d in [ [payable, 300, 0, ec.name], ["_Test Bank USD - _TC", 0, 300, None] ]) self.validate_gl_entries(pe.name, expected_gle) outstanding_amount = flt(frappe.db.get_value("Expense Claim", ec.name, "total_sanctioned_amount")) - \ flt(frappe.db.get_value("Expense Claim", ec.name, "total_amount_reimbursed")) self.assertEqual(outstanding_amount, 0)
def test_partly_claimed_and_returned_status(self): payable_account = get_payable_account("_Test Company") claim = make_expense_claim(payable_account, 1000, 1000, "_Test Company", "Travel Expenses - _TC", do_not_submit=True) advance = make_employee_advance(claim.employee) pe = make_payment_entry(advance) pe.submit() # PARTLY CLAIMED AND RETURNED status check # 500 Claimed, 500 Returned claim = make_expense_claim(payable_account, 500, 500, "_Test Company", "Travel Expenses - _TC", do_not_submit=True) advance = make_employee_advance(claim.employee) pe = make_payment_entry(advance) pe.submit() claim = get_advances_for_claim(claim, advance.name, amount=500) claim.save() claim.submit() advance.reload() self.assertEqual(advance.claimed_amount, 500) self.assertEqual(advance.status, "Paid") entry = make_return_entry( employee=advance.employee, company=advance.company, employee_advance_name=advance.name, return_amount=flt(advance.paid_amount - advance.claimed_amount), advance_account=advance.advance_account, mode_of_payment=advance.mode_of_payment, currency=advance.currency, exchange_rate=advance.exchange_rate, ) entry = frappe.get_doc(entry) entry.insert() entry.submit() advance.reload() self.assertEqual(advance.return_amount, 500) self.assertEqual(advance.status, "Partly Claimed and Returned") # advance should not be shown in claims advances = get_advances(claim.employee) advances = [entry.name for entry in advances] self.assertTrue(advance.name not in advances) # Cancel return entry; status should change to PAID entry.cancel() advance.reload() self.assertEqual(advance.return_amount, 0) self.assertEqual(advance.status, "Paid") # advance should be shown in claims advances = get_advances(claim.employee) advances = [entry.name for entry in advances] self.assertTrue(advance.name in advances)