def work(): frappe.set_user(frappe.db.get_global('demo_hr_user')) year, month = frappe.flags.current_date.strftime("%Y-%m").split("-") mark_attendance() make_leave_application() # payroll entry if not frappe.db.sql('select name from `tabSalary Slip` where month(adddate(start_date, interval 1 month))=month(curdate())'): # process payroll for previous month payroll_entry = frappe.new_doc("Payroll Entry") payroll_entry.company = frappe.flags.company payroll_entry.payroll_frequency = 'Monthly' # select a posting date from the previous month payroll_entry.posting_date = get_last_day(getdate(frappe.flags.current_date) - datetime.timedelta(days=10)) payroll_entry.payment_account = frappe.get_value('Account', {'account_type': 'Cash', 'company': erpnext.get_default_company(),'is_group':0}, "name") payroll_entry.set_start_end_dates() # based on frequency payroll_entry.salary_slip_based_on_timesheet = 0 payroll_entry.create_salary_slips() payroll_entry.submit_salary_slips() payroll_entry.make_accrual_jv_entry() # payroll_entry.make_journal_entry(reference_date=frappe.flags.current_date, # reference_number=random_string(10)) payroll_entry.salary_slip_based_on_timesheet = 1 payroll_entry.create_salary_slips() payroll_entry.submit_salary_slips() payroll_entry.make_accrual_jv_entry() # payroll_entry.make_journal_entry(reference_date=frappe.flags.current_date, # reference_number=random_string(10)) if frappe.db.get_global('demo_hr_user'): make_timesheet_records() #expense claim expense_claim = frappe.new_doc("Expense Claim") expense_claim.extend('expenses', get_expenses()) expense_claim.employee = get_random("Employee") expense_claim.company = frappe.flags.company expense_claim.payable_account = get_payable_account(expense_claim.company) expense_claim.posting_date = frappe.flags.current_date expense_claim.insert() rand = random.random() if rand < 0.4: update_sanctioned_amount(expense_claim) expense_claim.submit() if random.randint(0, 1): #make journal entry against expense claim je = frappe.get_doc(make_bank_entry("Expense Claim", expense_claim.name)) je.posting_date = frappe.flags.current_date je.cheque_no = random_string(10) je.cheque_date = frappe.flags.current_date je.flags.ignore_permissions = 1 je.submit()
def work(): frappe.set_user(frappe.db.get_global('demo_hr_user')) frappe.set_user_lang(frappe.db.get_global('demo_hr_user')) year, month = frappe.flags.current_date.strftime("%Y-%m").split("-") setup_department_approvers() mark_attendance() make_leave_application() # payroll entry if not frappe.db.sql('select name from `tabSalary Slip` where month(adddate(start_date, interval 1 month))=month(curdate())'): # based on frequency payroll_entry = get_payroll_entry() payroll_entry.salary_slip_based_on_timesheet = 0 payroll_entry.save() payroll_entry.create_salary_slips() payroll_entry.submit_salary_slips() payroll_entry.make_accrual_jv_entry() payroll_entry.submit() # payroll_entry.make_journal_entry(reference_date=frappe.flags.current_date, # reference_number=random_string(10)) # based on timesheet payroll_entry = get_payroll_entry() payroll_entry.salary_slip_based_on_timesheet = 1 payroll_entry.save() payroll_entry.create_salary_slips() payroll_entry.submit_salary_slips() payroll_entry.make_accrual_jv_entry() payroll_entry.submit() # payroll_entry.make_journal_entry(reference_date=frappe.flags.current_date, # reference_number=random_string(10)) if frappe.db.get_global('demo_hr_user'): make_timesheet_records() #expense claim expense_claim = frappe.new_doc("Expense Claim") expense_claim.extend('expenses', get_expenses()) expense_claim.employee = get_random("Employee") expense_claim.company = frappe.flags.company expense_claim.payable_account = get_payable_account(expense_claim.company) expense_claim.posting_date = frappe.flags.current_date expense_claim.expense_approver = frappe.db.get_global('demo_hr_user') expense_claim.save() rand = random.random() if rand < 0.4: update_sanctioned_amount(expense_claim) expense_claim.approval_status = 'Approved' expense_claim.submit() if random.randint(0, 1): #make journal entry against expense claim je = frappe.get_doc(make_bank_entry("Expense Claim", expense_claim.name)) je.posting_date = frappe.flags.current_date je.cheque_no = random_string(10) je.cheque_date = frappe.flags.current_date je.flags.ignore_permissions = 1 je.submit()
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 create_gratuity(**args): if args: args = frappe._dict(args) gratuity = frappe.new_doc("Gratuity") gratuity.employee = args.employee gratuity.posting_date = getdate() gratuity.gratuity_rule = args.rule or "Rule Under Limited Contract (UAE)" gratuity.pay_via_salary_slip = args.pay_via_salary_slip or 0 if gratuity.pay_via_salary_slip: gratuity.payroll_date = getdate() gratuity.salary_component = "Performance Bonus" else: gratuity.expense_account = args.expense_account or 'Payment Account - _TC' gratuity.payable_account = args.payable_account or get_payable_account("_Test Company") gratuity.mode_of_payment = args.mode_of_payment or 'Cash' gratuity.save() gratuity.submit() return gratuity
def work(): frappe.set_user(frappe.db.get_global('demo_hr_user')) year, month = frappe.flags.current_date.strftime("%Y-%m").split("-") mark_attendance() make_leave_application() # payroll entry if not frappe.db.sql('select name from `tabSalary Slip` where month(adddate(start_date, interval 1 month))=month(curdate())'): # process payroll for previous month payroll_entry = frappe.new_doc("Payroll Entry") payroll_entry.company = frappe.flags.company payroll_entry.payroll_frequency = 'Monthly' # select a posting date from the previous month payroll_entry.posting_date = get_last_day(getdate(frappe.flags.current_date) - datetime.timedelta(days=10)) payroll_entry.payment_account = frappe.get_value('Account', {'account_type': 'Cash', 'company': erpnext.get_default_company(),'is_group':0}, "name") payroll_entry.set_start_end_dates() # based on frequency payroll_entry.salary_slip_based_on_timesheet = 0 payroll_entry.create_salary_slips() payroll_entry.submit_salary_slips() payroll_entry.make_accural_jv_entry() # payroll_entry.make_journal_entry(reference_date=frappe.flags.current_date, # reference_number=random_string(10)) payroll_entry.salary_slip_based_on_timesheet = 1 payroll_entry.create_salary_slips() payroll_entry.submit_salary_slips() payroll_entry.make_accural_jv_entry() # payroll_entry.make_journal_entry(reference_date=frappe.flags.current_date, # reference_number=random_string(10)) if frappe.db.get_global('demo_hr_user'): make_timesheet_records() #expense claim expense_claim = frappe.new_doc("Expense Claim") expense_claim.extend('expenses', get_expenses()) expense_claim.employee = get_random("Employee") expense_claim.company = frappe.flags.company expense_claim.payable_account = get_payable_account(expense_claim.company) expense_claim.posting_date = frappe.flags.current_date expense_claim.exp_approver = filter((lambda x: x[0] != 'Administrator'), get_expense_approver(None, '', None, 0, 20, None))[0][0] expense_claim.insert() rand = random.random() if rand < 0.4: expense_claim.approval_status = "Approved" update_sanctioned_amount(expense_claim) expense_claim.submit() if random.randint(0, 1): #make journal entry against expense claim je = frappe.get_doc(make_bank_entry("Expense Claim", expense_claim.name)) je.posting_date = frappe.flags.current_date je.cheque_no = random_string(10) je.cheque_date = frappe.flags.current_date je.flags.ignore_permissions = 1 je.submit() elif rand < 0.2: expense_claim.approval_status = "Rejected" expense_claim.submit()
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)