[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) <yti@odoo.com>
This commit is contained in:
Sébastien Mottet (oms)
2020-08-31 08:49:03 +00:00
committed by Yannick Tivisse
parent 0ee9d0dadb
commit d0af0ddcc7
3 changed files with 33 additions and 7 deletions
+22 -4
View File
@@ -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
+1
View File
@@ -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)
+10 -3
View File
@@ -72,7 +72,8 @@
name="action_accept_driver_change"
attrs="{'invisible': [('future_driver_id', '=', False)]}"/>
</div>
<field name="plan_to_change_car" groups="fleet.fleet_group_manager"/>
<field name="plan_to_change_car" groups="fleet.fleet_group_manager" attrs="{'invisible': [('vehicle_type', '!=', 'car')]}"/>
<field name="plan_to_change_bike" groups="fleet.fleet_group_manager" attrs="{'invisible': [('vehicle_type', '!=', 'bike')]}"/>
<field name="next_assignation_date"/>
<field name="location"/>
</group>
@@ -98,6 +99,12 @@
<field name="doors" attrs="{'invisible': [('vehicle_type', '!=', 'car')]}"/>
<field name="color"/>
<field name="model_year"/>
<field name="frame_type" attrs="{'invisible': [('vehicle_type', '!=', 'bike')]}"/>
<label for="frame_size" attrs="{'invisible': [('vehicle_type', '!=', 'bike')]}"/>
<div class="o_row" attrs="{'invisible': [('vehicle_type', '!=', 'bike')]}">
<field name="frame_size" /><span>cm</span>
</div>
<field name="electric_assistance" attrs="{'invisible': [('vehicle_type', '!=', 'bike')]}"/>
</group>
<group string="Engine" attrs="{'invisible': [('vehicle_type', '!=', 'car')]}">
<field name="transmission"/>
@@ -168,8 +175,8 @@
<field name="location"/>
<field string="Status" name="state_id"/>
<filter string="Available" name="available"
domain="['&amp;', ('future_driver_id', '=', False), '|', ('driver_id', '=', False), ('plan_to_change_car', '=', True)]"/>
<filter name="planned" string="Planned for Change" domain="[('plan_to_change_car', '=', True)]"/>
domain="['&amp;', ('future_driver_id', '=', False), '|', ('driver_id', '=', False), '|', '&amp;', ('plan_to_change_car', '=', True), ('vehicle_type', '=', 'car'), '&amp;', ('plan_to_change_bike', '=', True), ('vehicle_type', '=', 'bike')]"/>
<filter name="planned" string="Planned for Change" domain="['|', '&amp;', ('vehicle_type', '=', 'bike'), ('plan_to_change_bike', '=', True), '&amp;', ('vehicle_type', '=', 'car'), ('plan_to_change_car', '=', True)]"/>
<separator/>
<filter string="Need Action" name="alert_true" domain="['|', ('contract_renewal_due_soon', '=', True), ('contract_renewal_overdue', '=', True)]"/>
<separator/>