[FIX] mail: avoid unbatched read of activity's deadline

__getitem__() of BaseModel, reset the prefetch set of the recordset.
Fix _compute_activity_date_deadline, to batched the reading of
activity's deadline.

closes odoo/odoo#154860

X-original-commit: ef7226aaa2f0ad135133fe27bdf1414b7ebf2a92
Signed-off-by: Rémy Voet (ryv) <ryv@odoo.com>
This commit is contained in:
Rémy Voet (ryv)
2024-02-23 13:09:57 +00:00
parent 65338960a9
commit bb7f0c86ae
3 changed files with 20 additions and 2 deletions
@@ -15,4 +15,4 @@ class MailActivityMixin(models.AbstractModel):
"""This computes the calendar event of the next activity.
It evaluates to false if there is no such event."""
for record in self:
record.activity_calendar_event_id = record.activity_ids[:1].calendar_event_id
record.activity_calendar_event_id = fields.first(record.activity_ids).calendar_event_id
+1 -1
View File
@@ -201,7 +201,7 @@ class MailActivityMixin(models.AbstractModel):
@api.depends('activity_ids.date_deadline')
def _compute_activity_date_deadline(self):
for record in self:
record.activity_date_deadline = record.activity_ids[:1].date_deadline
record.activity_date_deadline = fields.first(record.activity_ids).date_deadline
def _search_activity_date_deadline(self, operator, operand):
if operator == '=' and not operand:
@@ -289,6 +289,24 @@ class TestBaseAPIPerformance(BaseMailPerformance):
with self.assertQueryCount(admin=13, employee=13):
activity.action_feedback(feedback='Zizisse Done !')
@warmup
def test_adv_activity_mixin_batched(self):
records = self.env['mail.test.activity'].create([{'name': 'Test'}] * 10)
MailActivity = self.env['mail.activity'].with_context({
'default_res_model': 'mail.test.activity',
})
activity_type = self.env.ref('mail.mail_activity_data_todo')
MailActivity.create([{
'summary': 'Test Activity',
'res_id': record.id,
'activity_type_id': activity_type.id,
} for record in records])
self.env.invalidate_all()
with self.assertQueryCount(3):
records.mapped('activity_date_deadline')
@users('admin', 'employee')
@warmup
@mute_logger('odoo.models.unlink')