def test_loan_repayment_salary_slip(self): from erpnext.loan_management.doctype.loan.test_loan import create_loan_type, create_loan, make_loan_disbursement_entry, create_loan_accounts from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import process_loan_interest_accrual_for_term_loans applicant = make_employee("*****@*****.**", company="_Test Company") create_loan_accounts() create_loan_type("Car Loan", 500000, 8.4, is_term_loan=1, mode_of_payment='Cash', payment_account='Payment Account - _TC', loan_account='Loan Account - _TC', interest_income_account='Interest Income Account - _TC', penalty_income_account='Penalty Income Account - _TC') loan = create_loan(applicant, "Car Loan", 11000, "Repay Over Number of Periods", 20, posting_date=add_months(nowdate(), -1)) loan.repay_from_salary = 1 loan.submit() make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=add_months(nowdate(), -1)) process_loan_interest_accrual_for_term_loans(posting_date=nowdate()) ss = make_employee_salary_slip("*****@*****.**", "Monthly") ss.submit() self.assertEqual(ss.total_loan_repayment, 592) self.assertEqual(ss.net_pay, (flt(ss.gross_pay) - (flt(ss.total_deduction) + flt(ss.total_loan_repayment))))
def setUp(self): create_loan_accounts() create_loan_type("Home Loan", 500000, 9.2, 0, 1, 0, 'Cash', 'Payment Account - _TC', 'Loan Account - _TC', 'Interest Income Account - _TC', 'Penalty Income Account - _TC', 'Repay Over Number of Periods', 18) self.applicant = make_employee("*****@*****.**", "_Test Company") make_salary_structure("Test Salary Structure Loan", "Monthly", employee=self.applicant, currency='INR') self.create_loan_application()
def setUp(self): create_loan_accounts() create_loan_type("Demand Loan", 2000000, 13.5, 25, 0, 5, 'Cash', 'Payment Account - _TC', 'Loan Account - _TC', 'Interest Income Account - _TC', 'Penalty Income Account - _TC') create_loan_security_type() create_loan_security() create_loan_security_price( "Test Security 1", 500, "Nos", get_datetime(), get_datetime(add_to_date(nowdate(), hours=24))) create_loan_security_price( "Test Security 2", 250, "Nos", get_datetime(), get_datetime(add_to_date(nowdate(), hours=24))) if not frappe.db.exists("Customer", "_Test Loan Customer"): frappe.get_doc(get_customer_dict('_Test Loan Customer')).insert( ignore_permissions=True) self.applicant = frappe.db.get_value("Customer", {'name': '_Test Loan Customer'}, 'name')
def setUp(self): create_loan_accounts() create_loan_type( "Demand Loan", 2000000, 13.5, 25, 0, 5, "Cash", "Disbursement Account - _TC", "Payment Account - _TC", "Loan Account - _TC", "Interest Income Account - _TC", "Penalty Income Account - _TC", ) create_loan_security_type() create_loan_security() create_loan_security_price( "Test Security 1", 500, "Nos", get_datetime(), get_datetime(add_to_date(nowdate(), hours=24))) if not frappe.db.exists("Customer", "_Test Loan Customer"): frappe.get_doc(get_customer_dict("_Test Loan Customer")).insert( ignore_permissions=True) self.applicant = frappe.db.get_value("Customer", {"name": "_Test Loan Customer"}, "name")
def setUp(self): create_loan_accounts() create_loan_type("Home Loan", 500000, 9.2, 0, 1, 0, 'Cash', 'Payment Account - _TC', 'Loan Account - _TC', 'Interest Income Account - _TC', 'Penalty Income Account - _TC', 'Repay Over Number of Periods', 18) self.applicant = make_employee("*****@*****.**", "_Test Company") self.create_loan_application()
def test_loan_repayment_salary_slip(self): from erpnext.loan_management.doctype.loan.test_loan import create_loan_type, create_loan, make_loan_disbursement_entry, create_loan_accounts from erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual import process_loan_interest_accrual_for_term_loans from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure applicant = make_employee("*****@*****.**", company="_Test Company") create_loan_accounts() create_loan_type( "Car Loan", 500000, 8.4, is_term_loan=1, mode_of_payment='Cash', payment_account='Payment Account - _TC', loan_account='Loan Account - _TC', interest_income_account='Interest Income Account - _TC', penalty_income_account='Penalty Income Account - _TC') payroll_period = create_payroll_period(name="_Test Payroll Period 1", company="_Test Company") make_salary_structure("Test Loan Repayment Salary Structure", "Monthly", employee=applicant, currency='INR', payroll_period=payroll_period) frappe.db.sql("""delete from `tabLoan""") loan = create_loan(applicant, "Car Loan", 11000, "Repay Over Number of Periods", 20, posting_date=add_months(nowdate(), -1)) loan.repay_from_salary = 1 loan.submit() make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=add_months( nowdate(), -1)) process_loan_interest_accrual_for_term_loans(posting_date=nowdate()) ss = make_employee_salary_slip( "*****@*****.**", "Monthly", "Test Loan Repayment Salary Structure") ss.submit() self.assertEqual(ss.total_loan_repayment, 592) self.assertEqual( ss.net_pay, (flt(ss.gross_pay) - (flt(ss.total_deduction) + flt(ss.total_loan_repayment))))
def setUp(self): create_loan_accounts() create_loan_type( "Home Loan", 500000, 9.2, 0, 1, 0, "Cash", "Disbursement Account - _TC", "Payment Account - _TC", "Loan Account - _TC", "Interest Income Account - _TC", "Penalty Income Account - _TC", "Repay Over Number of Periods", 18, ) self.applicant = make_employee("*****@*****.**", "_Test Company") make_salary_structure("Test Salary Structure Loan", "Monthly", employee=self.applicant, currency="INR") self.create_loan_application()
def test_loan(self): branch = "Test Employee Branch" applicant = make_employee("*****@*****.**", company="_Test Company") company = "_Test Company" holiday_list = make_holiday("test holiday for loan") company_doc = frappe.get_doc("Company", company) if not company_doc.default_payroll_payable_account: company_doc.default_payroll_payable_account = frappe.db.get_value( "Account", { "company": company, "root_type": "Liability", "account_type": "" }, "name") company_doc.save() if not frappe.db.exists("Branch", branch): frappe.get_doc({"doctype": "Branch", "branch": branch}).insert() employee_doc = frappe.get_doc("Employee", applicant) employee_doc.branch = branch employee_doc.holiday_list = holiday_list employee_doc.save() salary_structure = "Test Salary Structure for Loan" make_salary_structure( salary_structure, "Monthly", employee=employee_doc.name, company="_Test Company", currency=company_doc.default_currency, ) if not frappe.db.exists("Loan Type", "Car Loan"): create_loan_accounts() create_loan_type( "Car Loan", 500000, 8.4, is_term_loan=1, mode_of_payment="Cash", disbursement_account="Disbursement Account - _TC", payment_account="Payment Account - _TC", loan_account="Loan Account - _TC", interest_income_account="Interest Income Account - _TC", penalty_income_account="Penalty Income Account - _TC", ) loan = create_loan( applicant, "Car Loan", 280000, "Repay Over Number of Periods", 20, posting_date=add_months(nowdate(), -1), ) loan.repay_from_salary = 1 loan.submit() make_loan_disbursement_entry(loan.name, loan.loan_amount, disbursement_date=add_months( nowdate(), -1)) process_loan_interest_accrual_for_term_loans(posting_date=nowdate()) dates = get_start_end_dates("Monthly", nowdate()) make_payroll_entry( company="_Test Company", start_date=dates.start_date, payable_account=company_doc.default_payroll_payable_account, currency=company_doc.default_currency, end_date=dates.end_date, branch=branch, cost_center="Main - _TC", payment_account="Cash - _TC", ) name = frappe.db.get_value("Salary Slip", { "posting_date": nowdate(), "employee": applicant }, "name") salary_slip = frappe.get_doc("Salary Slip", name) for row in salary_slip.loans: if row.loan == loan.name: interest_amount = (280000 * 8.4) / (12 * 100) principal_amount = loan.monthly_repayment_amount - interest_amount self.assertEqual(row.interest_amount, interest_amount) self.assertEqual(row.principal_amount, principal_amount) self.assertEqual(row.total_payment, interest_amount + principal_amount) if salary_slip.docstatus == 0: frappe.delete_doc("Salary Slip", name)