[FIX] hr_work_entry_contract: Improve work entries generation perf
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user