def get_month_dates(doc): date_details = get_start_end_dates(doc.payroll_frequency, doc.start_date or doc.posting_date) doc.start_date = date_details.start_date doc.end_date = date_details.end_date msd = date_details.start_date med = date_details.end_date return msd, med
def get_date_details(self): date_details = get_start_end_dates(self.payroll_frequency, self.start_date or self.posting_date) self.start_date = date_details.start_date self.end_date = date_details.end_date
def get_date_details(self): date_details = get_start_end_dates( self.payroll_frequency, self.start_date or self.posting_date) self.start_date = date_details.start_date self.end_date = date_details.end_date
def test_employee_loan(self): from erpnext.hr.doctype.salary_structure.test_salary_structure import ( make_employee, make_salary_structure) from erpnext.hr.doctype.employee_loan.test_employee_loan import create_employee_loan branch = "Test Employee Branch" employee = 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 - WP' }) 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', employee) employee_doc.branch = branch employee_doc.holiday_list = holiday_list employee_doc.save() employee_loan = create_employee_loan(employee, "Personal Loan", 280000, "Repay Over Number of Periods", 20) employee_loan.repay_from_salary = 1 employee_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': employee, '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_process_payroll(start_date=dates.start_date, end_date=dates.end_date, branch=branch) name = frappe.db.get_value('Salary Slip', { 'posting_date': nowdate(), 'employee': employee }, 'name') salary_slip = frappe.get_doc('Salary Slip', name) for row in salary_slip.loans: if row.employee_loan == employee_loan.name: interest_amount = (280000 * 8.4) / (12 * 100) principal_amount = employee_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) employee_loan.cancel() frappe.delete_doc('Employee Loan', employee_loan.name)