From a4061afe0dda2777cc3663b4f7763c460fa8795b Mon Sep 17 00:00:00 2001 From: "Nicolas (vin)" Date: Wed, 1 Dec 2021 13:44:40 +0000 Subject: [PATCH] [FIX] account_fleet: Improve performances MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Performances issues have been noticed in account_fleet when computing the move_ids of vehicles. This change has been made in order to fix this issue. Task id #2700407 closes odoo/odoo#80755 X-original-commit: 2860051b3cbfa7bcd7df76d05b4e5770e9a4c2d0 Signed-off-by: William André (wan) --- addons/account_fleet/models/account_move.py | 2 +- addons/account_fleet/models/fleet_vehicle.py | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/addons/account_fleet/models/account_move.py b/addons/account_fleet/models/account_move.py index 646e4ae5df0..c42fab740bd 100644 --- a/addons/account_fleet/models/account_move.py +++ b/addons/account_fleet/models/account_move.py @@ -39,7 +39,7 @@ class AccountMove(models.Model): class AccountMoveLine(models.Model): _inherit = 'account.move.line' - vehicle_id = fields.Many2one('fleet.vehicle', string='Vehicle') + vehicle_id = fields.Many2one('fleet.vehicle', string='Vehicle', index=True) need_vehicle = fields.Boolean(compute='_compute_need_vehicle', help="Technical field to decide whether the vehicle_id field is editable") diff --git a/addons/account_fleet/models/fleet_vehicle.py b/addons/account_fleet/models/fleet_vehicle.py index ef0dbabd842..739dd389170 100644 --- a/addons/account_fleet/models/fleet_vehicle.py +++ b/addons/account_fleet/models/fleet_vehicle.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import models, fields +from odoo import Command, models, fields class FleetVehicle(models.Model): @@ -16,8 +16,14 @@ class FleetVehicle(models.Model): self.bill_count = 0 return + moves = self.env['account.move.line'].read_group( + domain=[('vehicle_id', 'in', self.ids), ('move_id.state', '!=', 'cancel')], + fields=['vehicle_id', 'move_id:array_agg'], + groupby=['vehicle_id'], + ) + vehicle_move_mapping = {move['vehicle_id'][0]: set(move['move_id']) for move in moves} for vehicle in self: - vehicle.account_move_ids = self.env['account.move.line'].search([('vehicle_id', '=', vehicle.id), ('move_id.state', '!=', 'cancel')]).move_id + vehicle.account_move_ids = [Command.set(vehicle_move_mapping.get(vehicle.id, []))] vehicle.bill_count = len(vehicle.account_move_ids) def action_view_bills(self):