From 2e4f399e90bf01c893aa92105443afb74942238c Mon Sep 17 00:00:00 2001 From: Yannick Tivisse Date: Tue, 13 Dec 2022 14:13:59 +0100 Subject: [PATCH] [IMP] hr_work_entry_contract: Add method to ease inheritance --- .../models/hr_contract.py | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/addons/hr_work_entry_contract/models/hr_contract.py b/addons/hr_work_entry_contract/models/hr_contract.py index ac317ea7158..d3c4eff144f 100644 --- a/addons/hr_work_entry_contract/models/hr_contract.py +++ b/addons/hr_work_entry_contract/models/hr_contract.py @@ -90,6 +90,16 @@ class HrContract(models.Model): )) return result + def _get_interval_work_entry_type(self, interval): + self.ensure_one() + if 'work_entry_type_id' in interval[2] and interval[2].work_entry_type_id[:1]: + return interval[2].work_entry_type_id[:1] + return self._get_default_work_entry_type() + + def _get_valid_leave_intervals(self, attendances, interval): + self.ensure_one() + return [interval] + def _get_contract_work_entries_values(self, date_start, date_stop): start_dt = pytz.utc.localize(date_start) if not date_start.tzinfo else date_start end_dt = pytz.utc.localize(date_stop) if not date_stop.tzinfo else date_stop @@ -138,7 +148,12 @@ class HrContract(models.Model): tz_dates[(tz, end_dt)] = end dt0 = string_to_datetime(leave.date_from).astimezone(tz) dt1 = string_to_datetime(leave.date_to).astimezone(tz) - result[resource.id].append((max(start, dt0), min(end, dt1), leave)) + leave_start_dt = max(start, dt0) + leave_end_dt = min(end, dt1) + leave_interval = (leave_start_dt, leave_end_dt, leave) + leave_interval = contract._get_valid_leave_intervals(attendances, leave_interval) + if leave_interval: + result[resource.id] += leave_interval mapped_leaves = {r.id: Intervals(result[r.id]) for r in resources_list} leaves = mapped_leaves[resource.id] @@ -175,10 +190,8 @@ class HrContract(models.Model): leaves = split_leaves # Attendances - default_work_entry_type = contract._get_default_work_entry_type() for interval in real_attendances: - work_entry_type = 'work_entry_type_id' in interval[2] and interval[2].work_entry_type_id[:1]\ - or default_work_entry_type + work_entry_type = contract._get_interval_work_entry_type(interval) # All benefits generated here are using datetimes converted from the employee's timezone contract_vals += [dict([ ('name', "%s: %s" % (work_entry_type.name, employee.name)),