diff options
| author | Jeremy Kersten <jke@odoo.com> | 2017-08-28 14:06:23 +0200 |
|---|---|---|
| committer | Jeremy Kersten <jke@odoo.com> | 2017-08-28 15:40:41 +0200 |
| commit | 5d3cbf4d7a2223afcfc8ed61457b8f6843e41c81 (patch) | |
| tree | e1b74223cd9994a190ed4fbe085dcf28fc366b1f | |
| parent | 4ac347735d4de252678b557afab7cac3c3eb75de (diff) | |
[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
| -rw-r--r-- | addons/hr_contract/models/hr_contract.py | 9 | ||||
| -rw-r--r-- | addons/hr_contract/tests/__init__.py | 4 | ||||
| -rw-r--r-- | addons/hr_contract/tests/test_auto_status.py | 54 |
3 files changed, 63 insertions, 4 deletions
diff --git a/addons/hr_contract/models/hr_contract.py b/addons/hr_contract/models/hr_contract.py index 086d5dc94db..2e59cbfcf6a 100644 --- a/addons/hr_contract/models/hr_contract.py +++ b/addons/hr_contract/models/hr_contract.py @@ -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' diff --git a/addons/hr_contract/tests/__init__.py b/addons/hr_contract/tests/__init__.py new file mode 100644 index 00000000000..6f1832811c2 --- /dev/null +++ b/addons/hr_contract/tests/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import test_auto_status diff --git a/addons/hr_contract/tests/test_auto_status.py b/addons/hr_contract/tests/test_auto_status.py new file mode 100644 index 00000000000..010524924d3 --- /dev/null +++ b/addons/hr_contract/tests/test_auto_status.py @@ -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') |
