diff --git a/docsource/modules160-170.rst b/docsource/modules160-170.rst index 6af81bfe5af4..e18bf6aec9ab 100644 --- a/docsource/modules160-170.rst +++ b/docsource/modules160-170.rst @@ -638,7 +638,7 @@ Module coverage 16.0 -> 17.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | mail_plugin | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| maintenance | | | +| maintenance | Done | | +---------------------------------------------------+----------------------+-------------------------------------------------+ | mass_mailing | | | +---------------------------------------------------+----------------------+-------------------------------------------------+ diff --git a/openupgrade_scripts/apriori.py b/openupgrade_scripts/apriori.py index 7928be527508..bdacea3d3fb1 100644 --- a/openupgrade_scripts/apriori.py +++ b/openupgrade_scripts/apriori.py @@ -39,6 +39,8 @@ # OCA/l10n-spain "l10n_es_irnr": "l10n_es", "l10n_es_irnr_sii": "l10n_es_aeat_sii_oca", + # OCA/maintenance + "maintenance_plan": "maintenance", # OCA/purchase-workflow "purchase_discount": "purchase", # OCA/social diff --git a/openupgrade_scripts/scripts/maintenance/17.0.1.0/post-migration.py b/openupgrade_scripts/scripts/maintenance/17.0.1.0/post-migration.py new file mode 100644 index 000000000000..fcfef5c349e3 --- /dev/null +++ b/openupgrade_scripts/scripts/maintenance/17.0.1.0/post-migration.py @@ -0,0 +1,38 @@ +# Copyright 2024-2025 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + +_deleted_xml_records = ["maintenance.mail_alias_equipment"] + + +def _maintenance_plan(env): + """Compatibility with maintenance_plan, we convert the request and + the recurrence field the way it is done in core. + """ + if openupgrade.column_exists(env.cr, "maintenance_request", "maintenance_plan_id"): + # Update all the data of the linked requests + openupgrade.logged_query( + env.cr, + """UPDATE maintenance_request mr + SET recurring_maintenance = True, + repeat_interval = COALESCE(mp.interval, 1), + repeat_unit = COALESCE(mp.interval_step, 'year'), + repeat_type='until', + repeat_until = ( + CURRENT_DATE + interval '' + || COALESCE(mp.maintenance_plan_horizon, 1) || ' ' + || COALESCE(mp.planning_step, 'year') + )::date + FROM maintenance_plan mp + WHERE mr.maintenance_plan_id = mp.id""", + ) + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.load_data(env, "maintenance", "17.0.1.0/noupdate_changes.xml") + openupgrade.delete_records_safely_by_xml_id( + env, + _deleted_xml_records, + ) + _maintenance_plan(env) diff --git a/openupgrade_scripts/scripts/maintenance/17.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/maintenance/17.0.1.0/pre-migration.py new file mode 100644 index 000000000000..13f0336ca46f --- /dev/null +++ b/openupgrade_scripts/scripts/maintenance/17.0.1.0/pre-migration.py @@ -0,0 +1,36 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + + +def _maintenance_request_company_id(env): + """We set the company_id value for requests that do not have it. + We get the value of what will be deductively most appropriate (equipment, team or + user). + """ + openupgrade.logged_query( + env.cr, + """UPDATE maintenance_request AS request + SET company_id = equipment.company_id + FROM maintenance_equipment AS equipment + WHERE request.company_id IS NULL AND request.equipment_id = equipment.id""", + ) + openupgrade.logged_query( + env.cr, + """UPDATE maintenance_request AS request + SET company_id = team.company_id + FROM maintenance_team AS team + WHERE request.company_id IS NULL AND request.maintenance_team_id = team.id""", + ) + openupgrade.logged_query( + env.cr, + """UPDATE maintenance_request AS request + SET company_id = u.company_id + FROM res_users AS u + WHERE request.company_id IS NULL AND request.user_id = u.id""", + ) + + +@openupgrade.migrate() +def migrate(env, version): + _maintenance_request_company_id(env) diff --git a/openupgrade_scripts/scripts/maintenance/17.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/maintenance/17.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..30aee22fab54 --- /dev/null +++ b/openupgrade_scripts/scripts/maintenance/17.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,37 @@ +---Models in module 'maintenance'--- +new model maintenance.mixin [abstract] +---Fields in module 'maintenance'--- +maintenance / maintenance.equipment / activity_user_id (many2one) : not related anymore +maintenance / maintenance.equipment / activity_user_id (many2one) : now a function +maintenance / maintenance.equipment / expected_mtbf (integer) : NEW +maintenance / maintenance.equipment / maintenance_duration (float) : DEL +maintenance / maintenance.equipment / message_main_attachment_id (many2one): DEL relation: ir.attachment +maintenance / maintenance.equipment / next_action_date (date) : DEL +maintenance / maintenance.equipment / period (integer) : DEL +maintenance / maintenance.equipment.category / message_main_attachment_id (many2one): DEL relation: ir.attachment +maintenance / maintenance.request / activity_user_id (many2one) : not related anymore +maintenance / maintenance.request / activity_user_id (many2one) : now a function +# NOTHING TO DO +maintenance / maintenance.request / company_id (many2one) : now required +# DONE: pre-migration: Define the most appropriate value +maintenance / maintenance.request / instruction_google_slide (char): NEW +maintenance / maintenance.request / instruction_pdf (binary) : NEW attachment: True +maintenance / maintenance.request / instruction_text (html) : NEW +maintenance / maintenance.request / instruction_type (selection) : NEW selection_keys: ['google_slide', 'pdf', 'text'], hasdefault: default +maintenance / maintenance.request / message_main_attachment_id (many2one): DEL relation: ir.attachment +# NOTHING TO DO +maintenance / maintenance.request / recurring_maintenance (boolean): NEW hasdefault: compute +maintenance / maintenance.request / repeat_interval (integer) : NEW hasdefault: default +maintenance / maintenance.request / repeat_type (selection) : NEW selection_keys: ['forever', 'until'], hasdefault: default +maintenance / maintenance.request / repeat_unit (selection) : NEW selection_keys: ['day', 'month', 'week', 'year'], hasdefault: default +maintenance / maintenance.request / repeat_until (date) : NEW +# DONE: post-migration: maintenance_plan compatibility +---XML records in module 'maintenance'--- +NEW ir.actions.act_window: maintenance.action_maintenance_configuration +DEL ir.cron: maintenance.maintenance_requests_cron +NEW ir.ui.menu: maintenance.menu_maintenance_config +NEW ir.ui.view: maintenance.maintenance_request_view_activity +NEW ir.ui.view: maintenance.res_config_settings_view_form +# NOTHING TO DO +DEL mail.alias: maintenance.mail_alias_equipment (noupdate) +# DONE: removed in post-migration