summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Seinlet <nse@openerp.com>2018-12-05 15:17:59 +0000
committerNicolas Seinlet <nse@openerp.com>2019-01-23 09:41:50 +0000
commitf22fef1776e6c09321c367dc5ccf102e2c95a992 (patch)
treeae1c4012f4c11022db85e89cacec6318421a9d2d
parentc8ac1b40f258a2de72437ada292ec7256db36c3f (diff)
[IMP] fleet: search on name of auto joined driver
Instead of searching for the driver name and return thousands of partner ids in the vehicule search, use a database join and a search on the driver name. closes odoo/odoo#29288
-rw-r--r--addons/fleet/models/fleet_vehicle.py9
1 files changed, 2 insertions, 7 deletions
diff --git a/addons/fleet/models/fleet_vehicle.py b/addons/fleet/models/fleet_vehicle.py
index 6be09a1da8a..040b92200a7 100644
--- a/addons/fleet/models/fleet_vehicle.py
+++ b/addons/fleet/models/fleet_vehicle.py
@@ -23,7 +23,7 @@ class FleetVehicle(models.Model):
license_plate = fields.Char(track_visibility="onchange",
help='License plate number of the vehicle (i = plate number for a car)')
vin_sn = fields.Char('Chassis Number', help='Unique number written on the vehicle motor (VIN/SN number)', copy=False)
- driver_id = fields.Many2one('res.partner', 'Driver', track_visibility="onchange", help='Driver of the vehicle', copy=False)
+ driver_id = fields.Many2one('res.partner', 'Driver', track_visibility="onchange", help='Driver of the vehicle', copy=False, auto_join=True)
model_id = fields.Many2one('fleet.vehicle.model', 'Model',
track_visibility="onchange", required=True, help='Model of the vehicle')
brand_id = fields.Many2one('fleet.vehicle.model.brand', 'Brand', related="model_id.brand_id", store=True, readonly=False)
@@ -229,12 +229,7 @@ class FleetVehicle(models.Model):
@api.model
def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):
domain = args or []
- domain = expression.AND([domain, [('name', operator, name)]])
- # we don't want to override the domain's filter on driver_id if present
- if not any(['driver_id' in element for element in domain]):
- partner_ids = self.env['res.partner']._search([('name', operator, name)], access_rights_uid=name_get_uid)
- if partner_ids:
- domain = expression.OR([domain, ['|', ('driver_id', 'in', partner_ids), ('driver_id', '=', False)]])
+ domain = expression.AND([domain, ['|', ('name', operator, name), ('driver_id.name', operator, name)]])
rec = self._search(domain, limit=limit, access_rights_uid=name_get_uid)
return self.browse(rec).name_get()