Purpose ======= This field is used for several things, like the simple holiday pay recovery. Normally, we expect the HR officers to create a new employee, instead of unarchiving the old one, but this could happen. If someone leaves the company, and come back, take the new entry date as first contract date instead of the original one. closes odoo/odoo#83493 Taskid: 2745947 X-original-commit: a17c601fffca149a5c4d7be2924fb581ae408299 Related: odoo/enterprise#23790 Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
104 lines
4.5 KiB
Python
104 lines
4.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from datetime import datetime, date
|
|
from odoo.exceptions import ValidationError
|
|
from odoo.addons.hr_contract.tests.common import TestContractCommon
|
|
|
|
|
|
class TestHrContracts(TestContractCommon):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super(TestHrContracts, cls).setUpClass()
|
|
cls.contracts = cls.env['hr.contract'].with_context(tracking_disable=True)
|
|
|
|
def create_contract(self, state, kanban_state, start, end=None):
|
|
return self.env['hr.contract'].create({
|
|
'name': 'Contract',
|
|
'employee_id': self.employee.id,
|
|
'state': state,
|
|
'kanban_state': kanban_state,
|
|
'wage': 1,
|
|
'date_start': start,
|
|
'date_end': end,
|
|
})
|
|
|
|
def test_incoming_overlapping_contract(self):
|
|
start = datetime.strptime('2015-11-01', '%Y-%m-%d').date()
|
|
end = datetime.strptime('2015-11-30', '%Y-%m-%d').date()
|
|
self.create_contract('open', 'normal', start, end)
|
|
|
|
# Incoming contract
|
|
with self.assertRaises(ValidationError, msg="It should not create two contract in state open or incoming"):
|
|
start = datetime.strptime('2015-11-15', '%Y-%m-%d').date()
|
|
end = datetime.strptime('2015-12-30', '%Y-%m-%d').date()
|
|
self.create_contract('draft', 'done', start, end)
|
|
|
|
def test_pending_overlapping_contract(self):
|
|
start = datetime.strptime('2015-11-01', '%Y-%m-%d').date()
|
|
end = datetime.strptime('2015-11-30', '%Y-%m-%d').date()
|
|
self.create_contract('open', 'normal', start, end)
|
|
|
|
# Pending contract
|
|
with self.assertRaises(ValidationError, msg="It should not create two contract in state open or pending"):
|
|
start = datetime.strptime('2015-11-15', '%Y-%m-%d').date()
|
|
end = datetime.strptime('2015-12-30', '%Y-%m-%d').date()
|
|
self.create_contract('open', 'blocked', start, end)
|
|
|
|
# Draft contract -> should not raise
|
|
start = datetime.strptime('2015-11-15', '%Y-%m-%d').date()
|
|
end = datetime.strptime('2015-12-30', '%Y-%m-%d').date()
|
|
self.create_contract('draft', 'normal', start, end)
|
|
|
|
def test_draft_overlapping_contract(self):
|
|
start = datetime.strptime('2015-11-01', '%Y-%m-%d').date()
|
|
end = datetime.strptime('2015-11-30', '%Y-%m-%d').date()
|
|
self.create_contract('open', 'normal', start, end)
|
|
|
|
# Draft contract -> should not raise even if overlapping
|
|
start = datetime.strptime('2015-11-15', '%Y-%m-%d').date()
|
|
end = datetime.strptime('2015-12-30', '%Y-%m-%d').date()
|
|
self.create_contract('draft', 'normal', start, end)
|
|
|
|
def test_overlapping_contract_no_end(self):
|
|
|
|
# No end date
|
|
self.create_contract('open', 'normal', datetime.strptime('2015-11-01', '%Y-%m-%d').date())
|
|
|
|
with self.assertRaises(ValidationError):
|
|
start = datetime.strptime('2015-11-15', '%Y-%m-%d').date()
|
|
end = datetime.strptime('2015-12-30', '%Y-%m-%d').date()
|
|
self.create_contract('draft', 'done', start, end)
|
|
|
|
def test_overlapping_contract_no_end2(self):
|
|
|
|
start = datetime.strptime('2015-11-01', '%Y-%m-%d').date()
|
|
end = datetime.strptime('2015-12-30', '%Y-%m-%d').date()
|
|
self.create_contract('open', 'normal', start, end)
|
|
|
|
with self.assertRaises(ValidationError):
|
|
# No end
|
|
self.create_contract('draft', 'done', datetime.strptime('2015-01-01', '%Y-%m-%d').date())
|
|
|
|
def test_set_employee_contract_create(self):
|
|
contract = self.create_contract('open', 'normal', date(2018, 1, 1), date(2018, 1, 2))
|
|
self.assertEqual(self.employee.contract_id, contract)
|
|
|
|
def test_set_employee_contract_write(self):
|
|
contract = self.create_contract('draft', 'normal', date(2018, 1, 1), date(2018, 1, 2))
|
|
contract.state = 'open'
|
|
self.assertEqual(self.employee.contract_id, contract)
|
|
|
|
def test_first_contract_date(self):
|
|
self.create_contract('open', 'normal', date(2018, 1, 1), date(2018, 1, 31))
|
|
self.assertEqual(self.employee.first_contract_date, date(2018, 1, 1))
|
|
|
|
# New contract, no gap
|
|
self.create_contract('open', 'normal', date(2017, 1, 1), date(2017, 12, 31))
|
|
self.assertEqual(self.employee.first_contract_date, date(2017, 1, 1))
|
|
|
|
# New contract, with gap
|
|
self.create_contract('open', 'normal', date(2016, 1, 1), date(2016, 1, 31))
|
|
self.assertEqual(self.employee.first_contract_date, date(2017, 1, 1))
|