From d0af0ddcc78d4226ac2c3339ddb1403dfe50d0cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Mottet=20=28oms=29?= Date: Thu, 23 Apr 2020 10:05:33 +0000 Subject: [PATCH] [IMP] fleet: add 3 fields specific to bike vehicle type The three following fields have been added to fleet.vehicle: - frame_type (Selection) - frame_size (Float) - electric_assistance (Boolean) These fields are specific to bikes and are only displayed in form view when vehicle_type = bike Number of doors is now set to 0 instead of 5 when the vehicle is a bike. "plan_to_change_bike" boolean field has been added to the res.partner model and has also been added as related field in fleet.vehicle model. Task ID: 2238055 closes odoo/odoo#50064 Related: odoo/upgrade#1718 Related: odoo/enterprise#10152 Signed-off-by: Yannick Tivisse (yti) --- addons/fleet/models/fleet_vehicle.py | 26 ++++++++++++++++++---- addons/fleet/models/res_partner.py | 1 + addons/fleet/views/fleet_vehicle_views.xml | 13 ++++++++--- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/addons/fleet/models/fleet_vehicle.py b/addons/fleet/models/fleet_vehicle.py index a74add5e386..fc880e94d49 100644 --- a/addons/fleet/models/fleet_vehicle.py +++ b/addons/fleet/models/fleet_vehicle.py @@ -58,7 +58,7 @@ class FleetVehicle(models.Model): location = fields.Char(help='Location of the vehicle (garage, ...)') seats = fields.Integer('Seats Number', help='Number of seats of the vehicle') model_year = fields.Char('Model Year', help='Year of the model') - doors = fields.Integer('Doors Number', help='Number of doors of the vehicle', default=5) + doors = fields.Integer('Doors Number', help='Number of doors of the vehicle', compute="_compute_doors", store=True, readonly=True) tag_ids = fields.Many2many('fleet.vehicle.tag', 'fleet_vehicle_vehicle_tag_rel', 'vehicle_tag_id', 'tag_id', 'Tags', copy=False) odometer = fields.Float(compute='_get_odometer', inverse='_set_odometer', string='Last Odometer', help='Odometer measure of the vehicle at the moment of this log') @@ -89,7 +89,16 @@ class FleetVehicle(models.Model): net_car_value = fields.Float(string="Purchase Value", help="Purchase value of the vehicle") residual_value = fields.Float() plan_to_change_car = fields.Boolean(related='driver_id.plan_to_change_car', store=True, readonly=False) + plan_to_change_bike = fields.Boolean(related='driver_id.plan_to_change_bike', store=True, readonly=False) vehicle_type = fields.Selection(related='model_id.vehicle_type') + frame_type = fields.Selection([('diamant', 'Diamant'), ('trapez', 'Trapez'), ('wave', 'Wave')], help="Frame type of the bike") + electric_assistance = fields.Boolean() + frame_size = fields.Float() + + @api.depends('vehicle_type') + def _compute_doors(self): + for record in self: + record.doors = 5 if record.model_id.vehicle_type == 'car' else 0 @api.depends('model_id.brand_id.name', 'model_id.name', 'license_plate') def _compute_vehicle_name(self): @@ -208,7 +217,10 @@ class FleetVehicle(models.Model): states = res.mapped('state_id').ids if not state_waiting_list or state_waiting_list.id not in states: future_driver = self.env['res.partner'].browse(vals['future_driver_id']) - future_driver.sudo().write({'plan_to_change_car': True}) + if self.vehicle_type == 'bike': + future_driver.sudo().write({'plan_to_change_bike': True}) + if self.vehicle_type == 'car': + future_driver.sudo().write({'plan_to_change_car': True}) return res def write(self, vals): @@ -221,7 +233,10 @@ class FleetVehicle(models.Model): states = self.mapped('state_id').ids if 'state_id' not in vals else [vals['state_id']] if not state_waiting_list or state_waiting_list.id not in states: future_driver = self.env['res.partner'].browse(vals['future_driver_id']) - future_driver.sudo().write({'plan_to_change_car': True}) + if self.vehicle_type == 'bike': + future_driver.sudo().write({'plan_to_change_bike': True}) + if self.vehicle_type == 'car': + future_driver.sudo().write({'plan_to_change_car': True}) res = super(FleetVehicle, self).write(vals) if 'active' in vals and not vals['active']: @@ -252,7 +267,10 @@ class FleetVehicle(models.Model): vehicles._close_driver_history() for vehicle in self: - vehicle.future_driver_id.sudo().write({'plan_to_change_car': False}) + if vehicle.vehicle_type == 'bike': + vehicle.future_driver_id.sudo().write({'plan_to_change_bike': False}) + if vehicle.vehicle_type == 'car': + vehicle.future_driver_id.sudo().write({'plan_to_change_car': False}) vehicle.driver_id = vehicle.future_driver_id vehicle.future_driver_id = False diff --git a/addons/fleet/models/res_partner.py b/addons/fleet/models/res_partner.py index e2cb7c1b72b..95f80e6622c 100644 --- a/addons/fleet/models/res_partner.py +++ b/addons/fleet/models/res_partner.py @@ -8,3 +8,4 @@ class ResPartner(models.Model): _inherit = 'res.partner' plan_to_change_car = fields.Boolean('Plan To Change Car', default=False) + plan_to_change_bike = fields.Boolean('Plan To Change Bike', default=False) diff --git a/addons/fleet/views/fleet_vehicle_views.xml b/addons/fleet/views/fleet_vehicle_views.xml index b1ce1286c54..dc66bb3f983 100644 --- a/addons/fleet/views/fleet_vehicle_views.xml +++ b/addons/fleet/views/fleet_vehicle_views.xml @@ -72,7 +72,8 @@ name="action_accept_driver_change" attrs="{'invisible': [('future_driver_id', '=', False)]}"/> - + + @@ -98,6 +99,12 @@ + +