From b57272794c6f4779154aedee2d207bcfe3a96477 Mon Sep 17 00:00:00 2001 From: Yannick Tivisse Date: Mon, 8 Mar 2021 10:14:08 +0000 Subject: [PATCH] [IMP] hr_work_entry_contract: Reduce _generate_work_entries queries --- addons/hr_work_entry_contract/models/hr_contract.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/addons/hr_work_entry_contract/models/hr_contract.py b/addons/hr_work_entry_contract/models/hr_contract.py index 7b733ef283b..21a7802f48e 100644 --- a/addons/hr_work_entry_contract/models/hr_contract.py +++ b/addons/hr_work_entry_contract/models/hr_contract.py @@ -173,6 +173,7 @@ class HrContract(models.Model): date_start = fields.Datetime.to_datetime(date_start) date_stop = datetime.combine(fields.Datetime.to_datetime(date_stop), datetime.max.time()) + intervals_to_generate = defaultdict(lambda: self.env['hr.contract']) for contract in self: contract_start = fields.Datetime.to_datetime(contract.date_start) contract_stop = datetime.combine(fields.Datetime.to_datetime(contract.date_end or datetime.max.date()), @@ -180,7 +181,7 @@ class HrContract(models.Model): date_start_work_entries = max(date_start, contract_start) date_stop_work_entries = min(date_stop, contract_stop) if force: - vals_list.extend(contract._get_work_entries_values(date_start_work_entries, date_stop_work_entries)) + intervals_to_generate[(date_start_work_entries, date_stop_work_entries)] |= contract continue # In case the date_generated_from == date_generated_to, move it to the date_start to @@ -195,12 +196,16 @@ class HrContract(models.Model): last_generated_from = min(contract.date_generated_from, contract_stop) if last_generated_from > date_start_work_entries: contract.date_generated_from = date_start_work_entries - vals_list.extend(contract._get_work_entries_values(date_start_work_entries, last_generated_from)) + intervals_to_generate[(date_start_work_entries, last_generated_from)] |= contract last_generated_to = max(contract.date_generated_to, contract_start) if last_generated_to < date_stop_work_entries: contract.date_generated_to = date_stop_work_entries - vals_list.extend(contract._get_work_entries_values(last_generated_to, date_stop_work_entries)) + intervals_to_generate[(last_generated_to, date_stop_work_entries)] |= contract + + for interval, contracts in intervals_to_generate.items(): + date_from, date_to = interval + vals_list.extend(contracts._get_work_entries_values(date_from, date_to)) if not vals_list: return self.env['hr.work.entry']