Skip to content
Snippets Groups Projects
Commit 53bacb11 authored by Yannick Tivisse's avatar Yannick Tivisse
Browse files

[FIX] hr_work_entry_contract: Improve perf on _get_work_entries_values

Purpose
=======

Both list comprehensions are quite heavy (+- 20 seconds to generate
work entries for 1000 employees over 1 month), because they are O(n²)

X-original-commit: 21fb4786b329916cdabd0a49674d93179295cd32
parent fffac54c
Branches
Tags
No related merge requests found
......@@ -159,18 +159,24 @@ class HrContract(models.Model):
"""
contract_vals = self._get_contract_work_entries_values(date_start, date_stop)
# {contract_id: ([dates_start], [dates_stop])}
mapped_contract_dates = defaultdict(lambda: ([], []))
for x in contract_vals:
mapped_contract_dates[x['contract_id']][0].append(x['date_start'])
mapped_contract_dates[x['contract_id']][1].append(x['date_stop'])
for contract in self:
# If we generate work_entries which exceeds date_start or date_stop, we change boundaries on contract
if contract_vals:
#Handle empty work entries for certain contracts, could happen on an attendance based contract
#NOTE: this does not handle date_stop or date_start not being present in vals
dates_stop = [x['date_stop'] for x in contract_vals if x['contract_id'] == contract.id]
dates_stop = mapped_contract_dates[contract.id][1]
if dates_stop:
date_stop_max = max(dates_stop)
if date_stop_max > contract.date_generated_to:
contract.date_generated_to = date_stop_max
dates_start = [x['date_start'] for x in contract_vals if x['contract_id'] == contract.id]
dates_start = mapped_contract_dates[contract.id][0]
if dates_start:
date_start_min = min(dates_start)
if date_start_min < contract.date_generated_from:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment