Files

45 lines
1.9 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from datetime import date
from dateutil.relativedelta import relativedelta
from odoo.fields import Datetime
from dateutil.rrule import rrule, MONTHLY
def _generate_payslips(env):
# Do this only when demo data is activated
if env.ref('base.demo_company_hk', raise_if_not_found=False):
anthony = env.ref('l10n_hk_hr_payroll.hr_employee_anthony', raise_if_not_found=False)
natalie = env.ref('l10n_hk_hr_payroll.hr_employee_natalie', raise_if_not_found=False)
if not anthony and not natalie:
return
# Anthony, last year's payslip from june to december
if anthony:
_prepare_demo_batches(env, anthony, Datetime.now() + relativedelta(years=-1, month=6), Datetime.now() + relativedelta(years=-1, month=12))
# Both employees, current year's payslip from January to this month.
employees = anthony | natalie
if employees:
_prepare_demo_batches(env, employees, Datetime.now() + relativedelta(month=1))
def _prepare_demo_batches(env, employees, start_month, end_month=False):
payrun_date = start_month + relativedelta(day=1)
end_date = end_month or date.today()
payruns_data = []
for dt in rrule(MONTHLY, dtstart=payrun_date, until=end_date):
payruns_data.append({
'date_start': dt,
'date_end': dt + relativedelta(day=31),
})
payruns = env['hr.payslip.run'].with_company(env.ref('base.demo_company_hk')).create(payruns_data)
for i, payrun in enumerate(payruns):
payrun.generate_payslips(employee_ids=employees.ids)
if i < (len(payruns) - 1) or end_date != date.today():
# We process all payruns one at a time, because otherwise rules depending on the previous payslips being validated wouldn't work.
payrun.action_validate()
payrun.action_paid()