65 lines
2.7 KiB
Python
65 lines
2.7 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
from dateutil.relativedelta import relativedelta
|
|
|
|
from odoo import fields, Command
|
|
from odoo.tests import TransactionCase
|
|
|
|
|
|
class CommonTestPayslips(TransactionCase):
|
|
@classmethod
|
|
def create_payslip_run(cls):
|
|
def create_employee_with_bank_account(employee_name):
|
|
employee_id = cls.env['hr.employee'].create({
|
|
'name': employee_name
|
|
})
|
|
# Create employee bank account
|
|
bank_account = cls.env["res.partner.bank"].create({
|
|
"partner_id": employee_id.work_contact_id.id,
|
|
"acc_number": "GB94BARC10201530093459",
|
|
"clearing_number": "123456780",
|
|
'allow_out_payment': True,
|
|
})
|
|
employee_id.bank_account_ids = [Command.link(bank_account.id)]
|
|
return employee_id
|
|
|
|
def create_contract(contract_name, wage, start, employee):
|
|
employee.version_id.write({
|
|
'name': contract_name,
|
|
'wage': wage,
|
|
'contract_date_start': start,
|
|
'date_version': start,
|
|
})
|
|
return employee.version_id
|
|
|
|
def create_employees_with_contracts(no_employees):
|
|
employees = cls.env['hr.employee']
|
|
versions = cls.env['hr.version']
|
|
contract_start_date = fields.Date.start_of(fields.Date.today(), "year")
|
|
for i in range(1, no_employees + 1):
|
|
employee = create_employee_with_bank_account('employee_' + str(i))
|
|
version = create_contract('contract_' + str(i), i * 2000, contract_start_date, employee)
|
|
employees |= employee
|
|
versions |= version
|
|
return employees
|
|
|
|
def create_and_compute_payslip_run(employee_ids):
|
|
payslip_date = fields.Date.today() + relativedelta(day=1)
|
|
payslip_run_id = cls.env['hr.payslip.run'].create({
|
|
'name': 'Payslip Run',
|
|
'date_start': payslip_date
|
|
})
|
|
for employee_id in employee_ids:
|
|
# Create the employee's payslip and link it to the payslip_run_id
|
|
payslip_id = cls.env['hr.payslip'].create({
|
|
'name': employee_id.name + '_payslip',
|
|
'employee_id': employee_id.id,
|
|
'payslip_run_id': payslip_run_id.id,
|
|
'struct_id': cls.env.ref('hr_payroll.default_structure', False).id,
|
|
"date_from": payslip_date,
|
|
})
|
|
payslip_id.compute_sheet()
|
|
return payslip_run_id
|
|
|
|
employees = create_employees_with_contracts(no_employees=2)
|
|
return create_and_compute_payslip_run(employees)
|