Files
enterprise-addons/l10n_ch_hr_payroll/tests/test_payslip_entry_date.py
T

83 lines
3.8 KiB
Python

from .common import TestSwissdecCommon
from odoo import fields
from odoo.tests.common import tagged
from freezegun import freeze_time
from dateutil.relativedelta import relativedelta
from datetime import date
@tagged('post_install_l10n', 'post_install', '-at_install')
class TestPayslipEntryDate(TestSwissdecCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
# Create
# 1) An employee with two separated working periods in the company
# 2) An employee with only 1 continuous working period
# 3) An employee with no contract
cls.gap_employee = cls.env['hr.employee'].create({
'name': "Gap Employee",
})
cls.no_gap_employee = cls.env['hr.employee'].create({
'name': "No Gap Employee",
})
cls.no_contract_employee = cls.env['hr.employee'].create({
'name': "No Contract Employee",
})
with freeze_time("2026-01-01"):
# Create working contracts with gap
cls.gap_employee.create_version({
'contract_date_start': fields.Date.today(),
'contract_date_end': fields.Date.today() + relativedelta(days=5),
'date_version': fields.Date.today(),
})
cls.gap_employee.create_version({
'contract_date_start': fields.Date.today() + relativedelta(days=6),
'contract_date_end': fields.Date.today() + relativedelta(days=15),
'date_version': fields.Date.today() + relativedelta(days=6),
})
cls.gap_employee.create_version({
'contract_date_start': fields.Date.today() + relativedelta(months=1),
'contract_date_end': False,
'date_version': fields.Date.today() + relativedelta(months=1),
})
# Create working contracts with no gap
cls.no_gap_employee.create_version({
'contract_date_start': fields.Date.today(),
'contract_date_end': fields.Date.today() + relativedelta(months=1, days=-1),
'date_version': fields.Date.today(),
})
cls.no_gap_employee.create_version({
'contract_date_start': fields.Date.today() + relativedelta(months=1),
'contract_date_end': False,
'date_version': fields.Date.today() + relativedelta(months=1),
})
def test_payslip_entry_date(self):
# Simulate generating January Payslip on the 27th of Jan
with freeze_time("2026-01-27"):
entry_date_gap_january = self.gap_employee.with_context(before_date=fields.Date.today())._get_first_contract_date()
entry_date_no_gap_january = self.no_gap_employee.with_context(before_date=fields.Date.today())._get_first_contract_date()
entry_date_no_contract_january = self.no_contract_employee.with_context(before_date=fields.Date.today())._get_first_contract_date()
# Simulate generating February Payslip on the 27th of Feb
with freeze_time("2026-02-27"):
entry_date_gap_february = self.gap_employee.with_context(before_date=fields.Date.today())._get_first_contract_date()
entry_date_no_gap_february = self.no_gap_employee.with_context(before_date=fields.Date.today())._get_first_contract_date()
entry_date_no_contract_february = self.no_contract_employee.with_context(before_date=fields.Date.today())._get_first_contract_date()
self.assertEqual(entry_date_gap_january, date(2026, 1, 1))
self.assertEqual(entry_date_no_gap_january, date(2026, 1, 1))
self.assertFalse(entry_date_no_contract_january)
self.assertEqual(entry_date_gap_february, date(2026, 2, 1))
self.assertEqual(entry_date_no_gap_february, date(2026, 1, 1))
self.assertFalse(entry_date_no_contract_february)