def test_loan_repayment_salary_slip(self): from erpnext.hr.doctype.loan.test_loan import create_loan_type, create_loan applicant = make_employee("*****@*****.**") create_loan_type("Car Loan", 500000, 6.4) loan = create_loan(applicant, "Car Loan", 11000, "Repay Over Number of Periods", 20) loan.repay_from_salary = 1 loan.submit() ss = make_employee_salary_slip("*****@*****.**", "Monthly") ss.submit() self.assertEqual(ss.total_loan_repayment, 582) self.assertEqual(ss.net_pay, (flt(ss.gross_pay) - (flt(ss.total_deduction) + flt(ss.total_loan_repayment))))
def test_loan(self): branch = "Test Employee Branch" applicant = make_employee("*****@*****.**") company = erpnext.get_default_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() loan = create_loan(applicant, "Personal Loan", 280000, "Repay Over Number of Periods", 20) loan.repay_from_salary = 1 loan.submit() salary_structure = "Test Salary Structure for Loan" make_salary_structure(salary_structure, "Monthly", employee_doc.name) dates = get_start_end_dates('Monthly', nowdate()) make_payroll_entry(start_date=dates.start_date, end_date=dates.end_date, branch=branch) 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)
def test_loan(self): branch = "Test Employee Branch" applicant = make_employee("*****@*****.**") company = erpnext.get_default_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() loan = create_loan(applicant, "Personal Loan", 280000, "Repay Over Number of Periods", 20) loan.repay_from_salary = 1 loan.submit() salary_structure = "Test Salary Structure for Loan" make_salary_structure(salary_structure, "Monthly", employee_doc.name) dates = get_start_end_dates('Monthly', nowdate()) make_payroll_entry(start_date=dates.start_date, end_date=dates.end_date, branch=branch) 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)
def test_loan(self): from erpnext.hr.doctype.salary_structure.test_salary_structure import ( make_employee, make_salary_structure) from erpnext.hr.doctype.loan.test_loan import create_loan branch = "Test Employee Branch" applicant = make_employee("*****@*****.**") company = erpnext.get_default_company() holiday_list = make_holiday("test holiday for loan") if not frappe.db.exists('Salary Component', 'Basic Salary'): frappe.get_doc({ 'doctype': 'Salary Component', 'salary_component': 'Basic Salary', 'salary_component_abbr': 'BS', 'type': 'Earning', 'accounts': [{ 'company': company, 'default_account': frappe.db.get_value( 'Account', { 'company': company, 'root_type': 'Expense', 'account_type': '' }, 'name') }] }).insert() if not frappe.db.get_value('Salary Component Account', { 'parent': 'Basic Salary', 'company': company }): salary_component = frappe.get_doc('Salary Component', 'Basic Salary') salary_component.append( 'accounts', { 'company': company, 'default_account': "Salary - " + frappe.db.get_value('Company', company, 'abbr') }) 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() loan = create_loan(applicant, "Personal Loan", 280000, "Repay Over Number of Periods", 20) loan.repay_from_salary = 1 loan.submit() salary_strcture = "Test Salary Structure for Loan" if not frappe.db.exists('Salary Structure', salary_strcture): salary_strcture = make_salary_structure( salary_strcture, [{ 'employee': applicant, 'from_date': '2017-01-01', 'base': 30000 }]) salary_strcture = frappe.get_doc('Salary Structure', salary_strcture) salary_strcture.set('earnings', [{ 'salary_component': 'Basic Salary', 'abbr': 'BS', 'amount_based_on_formula': 1, 'formula': 'base*.5' }]) salary_strcture.save() dates = get_start_end_dates('Monthly', nowdate()) make_payroll_entry(start_date=dates.start_date, end_date=dates.end_date, branch=branch) 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) loan.cancel() frappe.delete_doc('Loan', loan.name)