[FIX] hr_work_entry_contract: Improve work entries generation perf

This commit is contained in:
Yannick Tivisse
2023-02-03 10:25:00 +01:00
parent 3bdfbe31c0
commit 3ee6b735fe
3 changed files with 10 additions and 7 deletions
@@ -11,6 +11,7 @@ from dateutil.relativedelta import relativedelta
from odoo import api, fields, models, _
from odoo.addons.resource.models.utils import string_to_datetime, Intervals
from odoo.osv import expression
from odoo.tools import ormcache
from odoo.exceptions import UserError
@@ -32,8 +33,10 @@ class HrContract(models.Model):
'''
)
def _get_default_work_entry_type(self):
return self.env.ref('hr_work_entry.work_entry_type_attendance', raise_if_not_found=False)
@ormcache('self.structure_type_id')
def _get_default_work_entry_type_id(self):
attendance = self.env.ref('hr_work_entry.work_entry_type_attendance', raise_if_not_found=False)
return attendance.id if attendance else False
def _get_leave_work_entry_type_dates(self, leave, date_from, date_to, employee):
return self._get_leave_work_entry_type(leave)
@@ -110,7 +113,7 @@ class HrContract(models.Model):
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()
return self.env['hr.work.entry.type'].browse(self._get_default_work_entry_type_id())
def _get_valid_leave_intervals(self, attendances, interval):
self.ensure_one()
@@ -29,7 +29,7 @@ class TestGlobalTimeOff(TestWorkEntryBase):
contract.date_generated_from = start
contract.date_generated_to = start
work_entries = contract._generate_work_entries(start, end)
self.assertEqual(work_entries.work_entry_type_id, contract._get_default_work_entry_type())
self.assertEqual(work_entries.work_entry_type_id.id, contract._get_default_work_entry_type_id())
work_entries.unlink()
contract.date_generated_from = start
contract.date_generated_to = start
@@ -6,7 +6,7 @@ from odoo.addons.hr_work_entry_holidays.tests.common import TestWorkEntryHoliday
from odoo.tests.common import users, warmup, tagged
@tagged('work_entry_perf')
@tagged('work_entry_holidays_perf')
class TestWorkEntryHolidaysPerformance(TestWorkEntryHolidaysBase):
@classmethod
@@ -32,7 +32,7 @@ class TestWorkEntryHolidaysPerformance(TestWorkEntryHolidaysBase):
self.richard_emp.generate_work_entries(date(2018, 1, 1), date(2018, 1, 2))
leave = self.create_leave(datetime(2018, 1, 1, 7, 0), datetime(2018, 1, 1, 18, 0))
with self.assertQueryCount(__system__=91, admin=93):
with self.assertQueryCount(__system__=91, admin=95):
leave.action_validate()
leave.action_refuse()
@@ -112,7 +112,7 @@ class TestWorkEntryHolidaysPerformancesBigData(TestWorkEntryHolidaysBase):
def test_work_entries_generation_perf(self):
# Test Case 7: Try to generate work entries for
# a hundred employees over a month
with self.assertQueryCount(__system__=500, admin=2807):
with self.assertQueryCount(__system__=406, admin=406):
work_entries = self.contracts._generate_work_entries(date(2020, 7, 1), date(2020, 8, 31))
# Original work entries to generate when we don't adapt date_generated_from and