diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 50a3c4c531e8..5467b7c61c6f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -88,7 +88,7 @@ jobs: sudo npm install -g less less-plugin-clean-css pip install -q -r odoo/requirements.txt pip install --ignore-installed \ - git+https://github.com/OCA/openupgradelib.git@master + git+https://github.com/duong77476/openupgradelib.git@master_imp_boostrap4_to_5_transformation # this is for v15 l10n_eg_edi_eta which crashes without it pip install asn1crypto - name: Test data diff --git a/docsource/modules150-160.rst b/docsource/modules150-160.rst index 0ae83651db1f..75b85f038496 100644 --- a/docsource/modules150-160.rst +++ b/docsource/modules150-160.rst @@ -800,7 +800,7 @@ Module coverage 15.0 -> 16.0 +-------------------------------------------------+----------------------+-------------------------------------------------+ | web_unsplash | Nothing to do | | +-------------------------------------------------+----------------------+-------------------------------------------------+ -| website | | | +| website | Done | | +-------------------------------------------------+----------------------+-------------------------------------------------+ | website_blog | Nothing to do | | +-------------------------------------------------+----------------------+-------------------------------------------------+ diff --git a/openupgrade_scripts/scripts/website/16.0.1.0/post-migration.py b/openupgrade_scripts/scripts/website/16.0.1.0/post-migration.py new file mode 100644 index 000000000000..f0da611d290c --- /dev/null +++ b/openupgrade_scripts/scripts/website/16.0.1.0/post-migration.py @@ -0,0 +1,6 @@ +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.load_data(env.cr, "website", "16.0.1.0/noupdate_changes.xml") diff --git a/openupgrade_scripts/scripts/website/16.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/website/16.0.1.0/pre-migration.py new file mode 100644 index 000000000000..6a636c54e505 --- /dev/null +++ b/openupgrade_scripts/scripts/website/16.0.1.0/pre-migration.py @@ -0,0 +1,106 @@ +from itertools import chain + +from openupgradelib import openupgrade +from openupgradelib.openupgrade_160 import convert_string_bootstrap_4to5 + +_xmlids_renames = [ + ( + "website.group_website_publisher", + "website.group_website_restricted_editor", + ), + ( + "website_sale.menu_reporting", + "website.menu_reporting", + ), +] + +# delete xml xpath for odoo add it again +_xmlids_delete = [ + "website.website_configurator", + "website.website_menu", +] + + +def delete_constraint_website_visitor_partner_uniq(env): + openupgrade.delete_sql_constraint_safely( + env, + "website", + "website_visitor", + "partner_uniq", + ) + + +def _fill_partner_id_if_null(env): + openupgrade.logged_query( + env.cr, + """ + UPDATE website_visitor v + SET partner_id = p.id + FROM res_partner p + WHERE v.partner_id IS NULL + AND length(v.access_token) != 32 + AND p.id = CAST(v.access_token AS integer); + """, + ) + + +def _fill_language_ids_if_null(env): + openupgrade.logged_query( + env.cr, + """ + INSERT INTO website_lang_rel (website_id, lang_id) + SELECT w.id, w.default_lang_id + FROM website w + WHERE NOT EXISTS ( + SELECT 1 + FROM website_lang_rel wlr + WHERE wlr.website_id = w.id + ); + """, + ) + + +def _fill_homepage_url(env): + openupgrade.logged_query( + env.cr, + """ + ALTER TABLE website + ADD COLUMN IF NOT EXISTS homepage_url CHARACTER VARYING + """, + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE website + SET homepage_url = website_page.url + FROM website_page + WHERE website_page.id = website.homepage_id + """, + ) + + +def boostrap_5_migration(env): + """Convert customized website views to Bootstrap 5.""" + # Find views to convert + env.cr.execute( + """ + SELECT iuv.id FROM ir_ui_view iuv JOIN website w on w.id = iuv.website_id + WHERE iuv.type = 'qweb' AND iuv.website_id IS NOT NULL + """ + ) + view_ids = list(chain.from_iterable(env.cr.fetchall())) + all_view_need_bs5_migration = env["ir.ui.view"].browse(view_ids) + for view in all_view_need_bs5_migration: + new_arch = convert_string_bootstrap_4to5(view.arch_db) + view.arch_db = new_arch + + +@openupgrade.migrate() +def migrate(env, version): + _fill_partner_id_if_null(env) + _fill_language_ids_if_null(env) + openupgrade.rename_xmlids(env.cr, _xmlids_renames) + openupgrade.delete_records_safely_by_xml_id(env, _xmlids_delete) + delete_constraint_website_visitor_partner_uniq(env) + boostrap_5_migration(env) + _fill_homepage_url(env) diff --git a/openupgrade_scripts/scripts/website/16.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website/16.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..2d7729bb3bfc --- /dev/null +++ b/openupgrade_scripts/scripts/website/16.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,117 @@ +---Models in module 'website'--- +---Fields in module 'website'--- +website / theme.website.menu / mega_menu_classes (char) : NEW +website / theme.website.menu / mega_menu_content (html) : NEW +website / theme.website.menu / use_main_menu_as_parent (boolean): NEW hasdefault: default +website / theme.website.page / footer_visible (boolean) : NEW hasdefault: default +website / theme.website.page / header_color (char) : NEW +website / theme.website.page / header_overlay (boolean) : NEW +website / theme.website.page / header_visible (boolean) : NEW hasdefault: default +website / theme.website.page / is_published (boolean) : NEW + +# NOTHING TO DO + +website / website / country_group_ids (many2many) : DEL relation: res.country.group +website / website / google_management_client_id (char): DEL +website / website / google_management_client_secret (char): DEL +website / website / homepage_id (many2one) : DEL relation: website.page +website / website / homepage_url (char) : NEW + +# NOTHING TO DO + +website / website / language_ids (many2many) : now required + +# DONE: Fill language_ids if null + +website / website / plausible_shared_key (char) : NEW +website / website / plausible_site (char) : NEW +website / website.menu / group_ids (many2many) : DEL relation: res.groups +website / website.page / cache_key_expr (char) : DEL +website / website.page / cache_time (integer) : DEL +website / website.visitor / _order : _order is now 'id DESC' ('last_connection_datetime DESC') +website / website.visitor / active (boolean) : DEL +website / website.visitor / name (char) : not stored anymore +website / website.visitor / name (char) : now related + +# NOTHING TO DO + +website / website.visitor / partner_id (many2one) : now a function + +# DONE: Fill partner id if null + +---XML records in module 'website'--- +DEL ir.actions.act_url: website.start_configurator_act_url +NEW ir.actions.client: website.action_open_website_configurator +NEW ir.actions.client: website.website_configurator +NEW ir.actions.client: website.website_preview +NEW ir.actions.server: website.ir_actions_server_website_analytics +DEL ir.actions.server: website.ir_actions_server_website_google_analytics +NEW ir.asset: website.s_countdown_000_xml +NEW ir.asset: website.s_dynamic_snippet_000_xml +NEW ir.asset: website.s_dynamic_snippet_carousel_000_xml +NEW ir.asset: website.s_image_gallery_000_xml +NEW ir.asset: website.s_map_000_js +NEW ir.asset: website.s_process_steps_001_scss +NEW ir.asset: website.s_searchbar_000_xml +NEW ir.asset: website.s_social_media_000_scss +NEW ir.asset: website.s_website_form_xml +NEW ir.model.access: website.access_website_ir_ui_view_restricted_editor +DEL ir.model.access: website.access_website_ir_ui_view_publisher + +# NOTHING TO DO + +NEW ir.model.constraint: website.constraint_website_domain_unique +DEL ir.model.constraint: website.constraint_website_visitor_partner_uniq + +# DONE: safely delete pre-migration + +DEL ir.rule: website.website_menu (noupdate) + +# DONE: safely delete in pre-migration + +NEW ir.ui.menu: website.custom_menu_edit_menu +NEW ir.ui.menu: website.menu_ace_editor +NEW ir.ui.menu: website.menu_content +NEW ir.ui.menu: website.menu_current_page +NEW ir.ui.menu: website.menu_edit_menu +NEW ir.ui.menu: website.menu_optimize_seo +NEW ir.ui.menu: website.menu_page_properties + +# NOTHING TO DO + +NEW ir.ui.menu: website.menu_reporting [renamed from website_sale module] + +# DONE: rename in pre-migration + +NEW ir.ui.menu: website.menu_site +NEW ir.ui.menu: website.menu_website_analytics +NEW ir.ui.menu: website.menu_website_preview +DEL ir.ui.menu: website.menu_dashboard +DEL ir.ui.menu: website.menu_visitor_sub_menu +DEL ir.ui.menu: website.menu_website_google_analytics +NEW ir.ui.view: website.404_plausible +NEW ir.ui.view: website.iframefallback +NEW ir.ui.view: website.neutralize_ribbon +NEW ir.ui.view: website.res_config_settings_view_form_inherit_auth_signup +NEW ir.ui.view: website.s_process_steps_options +NEW ir.ui.view: website.s_social_media +NEW ir.ui.view: website.s_social_media_options +NEW ir.ui.view: website.website_page_properties_view_form +NEW ir.ui.view: website.website_pages_kanban_view +DEL ir.ui.view: website.compiled_assets_wysiwyg +DEL ir.ui.view: website.index_management +DEL ir.ui.view: website.list_website_pages +DEL ir.ui.view: website.one_page_line +DEL ir.ui.view: website.publish_short +DEL ir.ui.view: website.s_share_options +DEL ir.ui.view: website.snippet_options_header_brand +DEL ir.ui.view: website.user_navbar +DEL ir.ui.view: website.website_configurator +DEL ir.ui.view: website.website_publisher + +# NOTHING TO DO + +NEW res.groups: website.group_website_restricted_editor +DEL res.groups: website.group_website_publisher + +# DONE: rename group in pre-migration