Esempio n. 1
0
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()
Esempio n. 2
0
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()
Esempio n. 3
0
    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")
Esempio n. 4
0
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
Esempio n. 5
0
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()
Esempio n. 6
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)