From 72886a6210cd4503a8939ea95b7139df5b6bb731 Mon Sep 17 00:00:00 2001 From: Kevin Baptiste Date: Fri, 6 May 2022 08:37:03 +0000 Subject: [PATCH] [IMP] hr_contract: automatically expire contract when past end date Automatically closes contracts when the end date is set in the past. closes odoo/odoo#90714 Taskid: 2845368 Related: odoo/enterprise#27037 Signed-off-by: Kevin Baptiste --- addons/hr_contract/models/hr_contract.py | 4 ++++ addons/hr_contract/tests/test_auto_status.py | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/addons/hr_contract/models/hr_contract.py b/addons/hr_contract/models/hr_contract.py index 72c1597fe8d..9ec04562253 100644 --- a/addons/hr_contract/models/hr_contract.py +++ b/addons/hr_contract/models/hr_contract.py @@ -221,6 +221,10 @@ class Contract(models.Model): if vals.get('state') == 'close': for contract in self.filtered(lambda c: not c.date_end): contract.date_end = max(date.today(), contract.date_start) + date_end = vals.get('date_end') + if self.env.context.get('close_contract', True) and date_end and fields.Date.from_string(date_end) < fields.Date.context_today(self): + for contract in self.filtered(lambda c: c.state == 'open'): + contract.state = 'close' calendar = vals.get('resource_calendar_id') if calendar: diff --git a/addons/hr_contract/tests/test_auto_status.py b/addons/hr_contract/tests/test_auto_status.py index 54b5654daa4..abcee0d757d 100644 --- a/addons/hr_contract/tests/test_auto_status.py +++ b/addons/hr_contract/tests/test_auto_status.py @@ -67,3 +67,12 @@ class TestHrContracts(TestContractCommon): self.contract = self.contracts.create(self.test_contract) self.apply_cron() self.assertEqual(self.contract.state, 'open') + + def test_contract_auto_expire(self): + self.test_contract.update(dict(date_start=date.today() - relativedelta(days=10), state='open')) + self.contract = self.contracts.create(self.test_contract) + self.apply_cron() + self.assertEqual(self.contract.state, 'open') + + self.contract.date_end = date.today() - relativedelta(days=3) + self.assertEqual(self.contract.state, 'close')