Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docsource/modules180-190.rst
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ Module coverage 18.0 -> 19.0
+---------------------------------------------------+----------------------+-------------------------------------------------+
| event_sms | |No DB layout changes. |
+---------------------------------------------------+----------------------+-------------------------------------------------+
| fleet | | |
| fleet |Done | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
| gamification |Done | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
Expand Down
37 changes: 37 additions & 0 deletions openupgrade_scripts/scripts/fleet/19.0.0.1/end-migration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Copyright 2026 Hunki Enterprises BV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from openupgradelib import openupgrade


def model_year(env):
"""
fleet.vehicle{,.model}#model_year has been changed to a selection field.
As the ORM chokes on values not in the selection, null those values, but
copy the original values first
"""
openupgrade.copy_columns(
env.cr,
{
"fleet_vehicle": [
("model_year", None, None),
],
"fleet_vehicle_model": [
("model_year", None, None),
],
},
)
selection_values = tuple(
value for value, _display in env["fleet.vehicle"]._get_year_selection()
)
for table in ("fleet_vehicle", "fleet_vehicle_model"):
openupgrade.logged_query(
env.cr,
f"UPDATE {table} SET model_year=NULL WHERE model_year NOT IN %s",
(selection_values,),
)


@openupgrade.migrate()
def migrate(env, version):
model_year(env)
21 changes: 21 additions & 0 deletions openupgrade_scripts/scripts/fleet/19.0.0.1/post-migration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Copyright 2026 Hunki Enterprises BV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from openupgradelib import openupgrade

deleted_xmlids = [
"fleet.fleet_rule_contract_visibility_user",
"fleet.fleet_rule_odometer_visibility_user",
"fleet.fleet_rule_service_visibility_user",
"fleet.fleet_rule_vehicle_visibility_user",
]


@openupgrade.migrate()
def migrate(env, version):
openupgrade.load_data(
env,
"fleet",
"19.0.0.1/noupdate_changes.xml",
)
openupgrade.delete_records_safely_by_xml_id(env, deleted_xmlids)
134 changes: 134 additions & 0 deletions openupgrade_scripts/scripts/fleet/19.0.0.1/pre-migration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
# Copyright 2026 Hunki Enterprises BV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from openupgradelib import openupgrade


def fleet_vehicle(env):
"""
Handle new fields in fleet.vehicle:
- create range_unit with default km
- create co2_emission_unit and fill via SQL
- rename first_contract_date to contract_date_start
"""
openupgrade.add_columns(
env,
[
(
"fleet.vehicle",
"range_unit",
"selection",
"km",
"fleet_vehicle",
),
(
"fleet.vehicle",
"co2_emission_unit",
"selection",
"g/km",
"fleet_vehicle",
),
],
)
openupgrade.rename_fields(
env,
[
(
"fleet.vehicle",
"fleet_vehicle",
"first_contract_date",
"contract_date_start",
)
],
)
openupgrade.logged_query(
env.cr,
"""
UPDATE fleet_vehicle
SET co2_emission_unit='g/mi'
WHERE
range_unit <> 'km'
AND co2_emission_unit IS NULL
""",
)


def fleet_vehicle_log_services(env):
"""
Add new stored related columns and fill with SQL
"""
openupgrade.add_columns(
env,
[
(
"fleet.vehicle.log.services",
"brand_id",
"many2one",
None,
"fleet_vehicle_log_services",
),
(
"fleet.vehicle.log.services",
"model_id",
"many2one",
None,
"fleet_vehicle_log_services",
),
],
)
openupgrade.logged_query(
env.cr,
"""
UPDATE
fleet_vehicle_log_services
SET
model_id=fleet_vehicle.model_id,
brand_id=fleet_vehicle_model.brand_id
FROM
fleet_vehicle
LEFT JOIN
fleet_vehicle_model
ON fleet_vehicle.model_id=fleet_vehicle_model.id
WHERE
vehicle_id=fleet_vehicle.id
""",
)


def fleet_vehicle_odometer(env):
"""
Add and fill fleet.vehicle.odometer#driver_id column
"""
openupgrade.add_columns(
env,
[
(
"fleet.vehicle.odometer",
"driver_id",
"many2one",
None,
"fleet_vehicle_odometer",
),
],
)
openupgrade.logged_query(
env.cr,
"""
UPDATE
fleet_vehicle_odometer
SET
driver_id=fleet_vehicle.driver_id
FROM
fleet_vehicle
WHERE
fleet_vehicle_odometer.vehicle_id=fleet_vehicle.id
AND fleet_vehicle_odometer.driver_id IS NULL
""",
)


@openupgrade.migrate()
def migrate(env, version):
fleet_vehicle(env)
fleet_vehicle_log_services(env)
fleet_vehicle_odometer(env)
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
---Models in module 'fleet'---
new model fleet.vehicle.odometer.report [sql_view]
# NOTHING TO DO

---Fields in module 'fleet'---
fleet / fleet.vehicle / co2_emission_unit (selection) : NEW required, selection_keys: ['g/km', 'g/mi'], isfunction: function, stored
# DONE: added column and SQL computation in pre-migration

fleet / fleet.vehicle / contract_date_start (date) : NEW hasdefault: default
fleet / fleet.vehicle / first_contract_date (date) : DEL
# DONE: renamed in pre-migration

fleet / fleet.vehicle / horsepower (integer) : type is now 'float' ('integer')
# NOTHING TO DO

fleet / fleet.vehicle / model_year (char) : selection_keys is now 'function' ('False')
fleet / fleet.vehicle / model_year (char) : type is now 'selection' ('char')
# DONE: normalized value in end-migration

fleet / fleet.vehicle / plan_to_change_bike (boolean) : not related anymore
fleet / fleet.vehicle / plan_to_change_car (boolean) : not related anymore
# NOTHING TO DO: has been stored before

fleet / fleet.vehicle / power (integer) : type is now 'float' ('integer')
# NOTHING TO DO

fleet / fleet.vehicle / range_unit (selection) : NEW required, selection_keys: ['km', 'mi'], hasdefault: default
# DONE: added column with default km

fleet / fleet.vehicle.log.services / brand_id (many2one) : NEW relation: fleet.vehicle.model.brand, isrelated: related, stored
fleet / fleet.vehicle.log.services / model_id (many2one) : NEW relation: fleet.vehicle.model, isrelated: related, stored
# DONE: added in pre-migration and filled with SQL

fleet / fleet.vehicle.model / drive_type (selection) : NEW selection_keys: ['4wd', 'awd', 'fwd', 'rwd']
fleet / fleet.vehicle.model / horsepower (integer) : type is now 'float' ('integer')
# NOTHING TO DO

fleet / fleet.vehicle.model / model_year (integer) : selection_keys is now 'function' ('False')
fleet / fleet.vehicle.model / model_year (integer) : type is now 'selection' ('integer')
# DONE: normalized value in end-migration

fleet / fleet.vehicle.model / power (integer) : type is now 'float' ('integer')
fleet / fleet.vehicle.model / range_unit (selection) : NEW required, selection_keys: ['km', 'mi'], hasdefault: default
# NOTHING TO DO

fleet / fleet.vehicle.odometer / driver_id (many2one) : is now stored
fleet / fleet.vehicle.odometer / driver_id (many2one) : not related anymore
# DONE: added column and filled with SQL in pre-migration

fleet / fleet.vehicle.state / fold (boolean) : NEW
fleet / res.partner / plan_to_change_bike (boolean) : DEL
fleet / res.partner / plan_to_change_car (boolean) : DEL
# NOTHING TO DO

---XML records in module 'fleet'---
NEW fleet.vehicle.model.brand: fleet.brand_gmc
NEW ir.actions.act_window: fleet.fleet_vehicle_odometer_reporting_action
NEW ir.model.access: fleet.access_fleet_vehicle_odometer_report_manager
DEL ir.module.category: fleet.module_fleet_category
# NOTHING TO DO

DEL ir.rule: fleet.fleet_rule_contract_visibility_user (noupdate)
DEL ir.rule: fleet.fleet_rule_odometer_visibility_user (noupdate)
DEL ir.rule: fleet.fleet_rule_service_visibility_user (noupdate)
DEL ir.rule: fleet.fleet_rule_vehicle_visibility_user (noupdate)
# DONE: deleted in post-migration

NEW ir.ui.menu: fleet.menu_fleet_odometer_reporting_odometer
NEW ir.ui.view: fleet.fleet_vehicle_odometer_report_view_graph
NEW ir.ui.view: fleet.fleet_vehicle_odometer_report_view_search
NEW ir.ui.view: fleet.fleet_vehicle_view_form_quick_create
DEL ir.ui.view: fleet.fleet_vehicle_odometer_view_kanban
NEW res.groups.privilege: fleet.res_groups_privilege_fleet
# NOTHING TO DO
Loading