[FIX] hr_contract: fix auto pending/auto close
Before this commit, create a contract which expire in 2 months. The cron will check all contracts that have a date_end >= tomorrow. All contract with a end_date will be close. Now we check all contracts that have a end_date <= yesterday and close it
This commit is contained in:
@@ -104,8 +104,8 @@ class Contract(models.Model):
|
||||
soon_expired_contracts = self.search([
|
||||
('state', '=', 'open'),
|
||||
'|',
|
||||
('date_end', '>=', fields.Date.to_string(date.today() + relativedelta(days=-7))),
|
||||
('visa_expire', '>=', fields.Date.to_string(date.today() + relativedelta(days=-60)))
|
||||
('date_end', '<=', fields.Date.to_string(date.today() + relativedelta(days=7))),
|
||||
('visa_expire', '<=', fields.Date.to_string(date.today() + relativedelta(days=60)))
|
||||
])
|
||||
return soon_expired_contracts.write({
|
||||
'state': 'pending'
|
||||
@@ -114,9 +114,10 @@ class Contract(models.Model):
|
||||
@api.model
|
||||
def update_to_close(self):
|
||||
expired_contracts = self.search([
|
||||
('state', '!=', 'close'),
|
||||
'|',
|
||||
('date_end', '>=', fields.Date.to_string(date.today() + relativedelta(days=1))),
|
||||
('visa_expire', '>=', fields.Date.to_string(date.today() + relativedelta(days=1)))
|
||||
('date_end', '<=', fields.Date.to_string(date.today() + relativedelta(days=-1))),
|
||||
('visa_expire', '<=', fields.Date.to_string(date.today() + relativedelta(days=-1)))
|
||||
])
|
||||
return expired_contracts.write({
|
||||
'state': 'close'
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import test_auto_status
|
||||
@@ -0,0 +1,54 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
from datetime import datetime
|
||||
from odoo.tests.common import TransactionCase
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
|
||||
class TestHrContracts(TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestHrContracts, self).setUp()
|
||||
self.contracts = self.env['hr.contract'].with_context(tracking_disable=True)
|
||||
self.employee = self.env.ref('hr.employee_root')
|
||||
self.test_contract = dict(name='Test', wage=1, employee_id=self.employee.id, state='open')
|
||||
|
||||
def apply_cron(self):
|
||||
self.env.ref('hr_contract.ir_cron_data_contract_update_to_pending').method_direct_trigger()
|
||||
self.env.ref('hr_contract.ir_cron_data_contract_update_to_close').method_direct_trigger()
|
||||
|
||||
def test_contract_enddate(self):
|
||||
self.test_contract.update(dict(date_end=datetime.now() + relativedelta(days=100)))
|
||||
self.contract = self.contracts.create(self.test_contract)
|
||||
self.apply_cron()
|
||||
self.assertEquals(self.contract.state, 'open')
|
||||
|
||||
self.test_contract.update(dict(date_end=datetime.now() + relativedelta(days=5)))
|
||||
self.contract.write(self.test_contract)
|
||||
self.apply_cron()
|
||||
self.assertEquals(self.contract.state, 'pending')
|
||||
|
||||
self.test_contract.update({
|
||||
'date_start': datetime.now() + relativedelta(days=-50),
|
||||
'date_end': datetime.now() + relativedelta(days=-1),
|
||||
'state': 'pending',
|
||||
})
|
||||
self.contract.write(self.test_contract)
|
||||
self.apply_cron()
|
||||
self.assertEquals(self.contract.state, 'close')
|
||||
|
||||
def test_contract_pending_visa_expire(self):
|
||||
self.employee.visa_expire = datetime.now() + relativedelta(days=30)
|
||||
self.test_contract.update(dict(date_end=False))
|
||||
self.contract = self.contracts.create(self.test_contract)
|
||||
self.apply_cron()
|
||||
self.assertEquals(self.contract.state, 'pending')
|
||||
|
||||
self.employee.visa_expire = datetime.now() + relativedelta(days=-5)
|
||||
self.test_contract.update({
|
||||
'date_start': datetime.now() + relativedelta(days=-50),
|
||||
'state': 'pending',
|
||||
})
|
||||
self.contract.write(self.test_contract)
|
||||
self.apply_cron()
|
||||
self.assertEquals(self.contract.state, 'close')
|
||||
Reference in New Issue
Block a user