83 lines
3.8 KiB
Python
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)
|