diff --git a/odoo_project_migration/README.rst b/odoo_project_migration/README.rst new file mode 100644 index 00000000..fe06845a --- /dev/null +++ b/odoo_project_migration/README.rst @@ -0,0 +1,81 @@ +=========================== +Odoo Project Migration Data +=========================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:21842ccdbd98a7cd36911f18bb9ba9dd7c99182d1a09ffc8c4681d5985e3e281 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmodule--composition--analysis-lightgray.png?logo=github + :target: https://github.com/OCA/module-composition-analysis/tree/18.0/odoo_project_migration + :alt: OCA/module-composition-analysis +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/module-composition-analysis-18-0/module-composition-analysis-18-0-odoo_project_migration + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/module-composition-analysis&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module integrates the migration data collected by +``odoo_repository_migration`` module in your Odoo projects. It allows to +generate migration reports, giving some hints about the effort to +provide to migrate the project to a newer Odoo version. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Camptocamp + +Contributors +------------ + +- Camptocamp + + - Sébastien Alix + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/module-composition-analysis `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo_project_migration/__init__.py b/odoo_project_migration/__init__.py new file mode 100644 index 00000000..aee8895e --- /dev/null +++ b/odoo_project_migration/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizards diff --git a/odoo_project_migration/__manifest__.py b/odoo_project_migration/__manifest__.py new file mode 100644 index 00000000..373b1e70 --- /dev/null +++ b/odoo_project_migration/__manifest__.py @@ -0,0 +1,24 @@ +# Copyright 2023 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) +{ + "name": "Odoo Project Migration Data", + "summary": "Analyze your Odoo project migrations.", + "version": "18.0.1.0.0", + "category": "Tools", + "author": "Camptocamp, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/module-composition-analysis", + "data": [ + "security/ir.model.access.csv", + "views/odoo_module_branch_migration.xml", + "views/odoo_project.xml", + "views/odoo_project_module_migration.xml", + "wizards/generate_migration_data.xml", + "wizards/export_migration_report.xml", + ], + "installable": True, + "depends": [ + "odoo_project", + "odoo_repository_migration", + ], + "license": "AGPL-3", +} diff --git a/odoo_project_migration/i18n/it.po b/odoo_project_migration/i18n/it.po new file mode 100644 index 00000000..c120e009 --- /dev/null +++ b/odoo_project_migration/i18n/it.po @@ -0,0 +1,618 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * odoo_project_migration +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_view_form +msgid " Migration Data" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__addons_path +msgid "Addons Path" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__branch_name +msgid "" +"An Odoo version is also used as an Odoo branch name in generic repositories " +"(Odoo, OCA...)." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__application +msgid "Application" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__author_ids +msgid "Authors" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__auto_install +msgid "Auto-Install" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__available +msgid "Available" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__available_migration_path_ids +msgid "Available Migration Paths" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__branch_name +msgid "Branch Name" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__branch_sequence +msgid "Branch Sequence" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__sloc_css +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_tree +msgid "CSS" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__sloc_css +msgid "CSS source lines of code" +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_export_migration_report_view_form +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_generate_migration_data_view_form +msgid "Cancel" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__category_id +msgid "Category" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__is_community +msgid "Community?" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__create_uid +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__create_uid +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__create_uid +msgid "Created by" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__create_date +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__create_date +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__create_date +msgid "Created on" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__dependency_ids +msgid "Dependencies" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__non_std_dependency_level +msgid "Dependency level excluding all standard Odoo modules." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__global_dependency_level +msgid "Dependency level including all standard Odoo modules." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__odoo_project_module_ids +msgid "Deployed Modules" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__title +msgid "Descriptive name" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__development_status_id +msgid "Develoment Status" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__display_name +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__display_name +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__display_name +msgid "Display Name" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__is_enterprise +msgid "Enterprise?" +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_generate_migration_data_view_form +msgid "Existing data for the selected migration path will be removed." +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_export_migration_report_view_form +msgid "Export" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.actions.act_window,name:odoo_project_migration.odoo_project_export_migration_report_action +msgid "Export a migration report" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model,name:odoo_project_migration.model_odoo_project_export_migration_report +msgid "Export a migration report for an Odoo project" +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_view_form +msgid "Export migration report" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__external_dependencies +msgid "External Dependencies" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__full_path +msgid "Full Path" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__fully_ported +msgid "Fully Ported" +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_generate_migration_data_view_form +msgid "Generate" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.actions.act_window,name:odoo_project_migration.odoo_project_generate_migration_data_action +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_view_form +msgid "Generate migration data" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model,name:odoo_project_migration.model_odoo_project_generate_migration_data +msgid "Generate migration data for an Odoo project" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__global_dependency_level +msgid "Global Dep. Level" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__id +msgid "ID" +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_form +msgid "Info" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__installable +msgid "Installable" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__project_module_id +msgid "Installed Module" +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_module_branch_migration_view_search +msgid "Installed in projects" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__is_community +msgid "Is this module a contribution of the community?" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__is_enterprise +msgid "Is this module designed for Odoo Enterprise only?" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__is_standard +msgid "Is this module part of Odoo standard?" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__sloc_js +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_tree +msgid "JS" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__sloc_js +msgid "JavaScript source lines of code" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report____last_update +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data____last_update +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration____last_update +msgid "Last Modified on" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__last_scanned_commit +msgid "Last Scanned Commit" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__write_uid +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__write_uid +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__write_date +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__write_date +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__write_date +msgid "Last Updated on" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__version +msgid "Last version" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__license_id +msgid "License" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__maintainer_ids +msgid "Maintainers" +msgstr "" + +#. module: odoo_project_migration +#. odoo-python +#: code:addons/odoo_project_migration/models/odoo_project.py:0 +#: code:addons/odoo_project_migration/wizards/generate_migration_data.py:0 +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__module_migration_id +#, python-format +msgid "Migration" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project__module_migration_ids +msgid "Migration Data" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__migration_path_id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__migration_path_id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__migration_path_id +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_search +msgid "Migration Path" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__migration_scan +msgid "Migration Scan" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__migration_script_ids +msgid "Migration Scripts" +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_search +msgid "Migration Status" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model,name:odoo_project_migration.model_odoo_module_branch_migration +msgid "Migration data for a module of a given branch." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__migration_script_ids +msgid "" +"Migration scripts available between the installed version and the last version available on the target branch.\n" +"Ones that rework the database schema or data could be mandatory." +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_form +msgid "Migration scripts to consider" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__state +msgid "Migration status" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.actions.act_window,name:odoo_project_migration.odoo_project_module_migration_action +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__migration_ids +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_view_form +msgid "Migrations" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project__migrations_count +msgid "Migrations Count" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__module_name +msgid "Module Technical Name" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model,name:odoo_project_migration.model_odoo_project_module_migration +msgid "Module migration line of an Odoo Project" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__specific +msgid "" +"Module specific to a project repository.It cannot be used across different " +"projects." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__moved_to_oca +msgid "Moved to OCA" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__moved_to_generic +msgid "Moved to generic repo" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__moved_to_standard +msgid "Moved to standard?" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__next_odoo_version_module_branch_id +msgid "Next Odoo Version Module Branch" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__non_std_dependency_level +msgid "Non-Std Dep. Level" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model,name:odoo_project_migration.model_odoo_project +msgid "Odoo Project" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model,name:odoo_project_migration.model_odoo_project_module +msgid "Odoo Project Module" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__odoo_version_id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__odoo_version_id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__branch_id +msgid "Odoo Version" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__org_id +msgid "Organization" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__pr_url +msgid "PR URL" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__port_commits +msgid "Ported (missing commits?)" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__odoo_project_id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__odoo_project_id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__odoo_project_id +msgid "Project" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_module_branch_migration__odoo_project_ids +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__odoo_project_ids +msgid "Projects" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__sloc_python +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_tree +msgid "Python" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__python_dependency_ids +msgid "Python Dependencies" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__sloc_python +msgid "Python source lines of code" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__removed +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__removed +msgid "Removed" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__replaced +msgid "Replaced" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__repository_id +msgid "Repository" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__repository_branch_id +msgid "Repository Branch" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__results_text +msgid "Results Text" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__reverse_dependency_ids +msgid "Reverse Dependencies" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__repository_sequence +msgid "Sequence" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__source_module_branch_id +msgid "Source" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__specific +msgid "Specific" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__is_standard +msgid "Standard?" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__summary +msgid "Summary" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__target_module_branch_id +msgid "Target" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__name +msgid "Techname" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__module_name +msgid "Technical Name" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__migration_scan +msgid "" +"Technical field telling if this module is elligible for a migration scan." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__addons_path +msgid "Technical field. Where the module is located in the repository." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__module_id +msgid "Technical name" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.constraint,message:odoo_project_migration.constraint_odoo_project_module_migration_uniq +msgid "This module migration path already exists." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__timeline_ids +msgid "Timeline" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__title +msgid "Title" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__migrate +msgid "To migrate" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__review_migration +msgid "To review" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__url +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_form +msgid "URL" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__project_module_id +msgid "Version of the module installed in the project." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__version_ids +msgid "Versions" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__sloc_xml +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_tree +msgid "XML" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__sloc_xml +msgid "XML source lines of code" +msgstr "" diff --git a/odoo_project_migration/i18n/odoo_project_migration.pot b/odoo_project_migration/i18n/odoo_project_migration.pot new file mode 100644 index 00000000..0c054546 --- /dev/null +++ b/odoo_project_migration/i18n/odoo_project_migration.pot @@ -0,0 +1,617 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * odoo_project_migration +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_view_form +msgid " Migration Data" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__addons_path +msgid "Addons Path" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__branch_name +msgid "" +"An Odoo version is also used as an Odoo branch name in generic repositories " +"(Odoo, OCA...)." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__application +msgid "Application" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__author_ids +msgid "Authors" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__auto_install +msgid "Auto-Install" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__available +msgid "Available" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__available_migration_path_ids +msgid "Available Migration Paths" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__branch_name +msgid "Branch Name" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__branch_sequence +msgid "Branch Sequence" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__sloc_css +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_tree +msgid "CSS" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__sloc_css +msgid "CSS source lines of code" +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_export_migration_report_view_form +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_generate_migration_data_view_form +msgid "Cancel" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__category_id +msgid "Category" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__is_community +msgid "Community?" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__create_uid +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__create_uid +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__create_uid +msgid "Created by" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__create_date +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__create_date +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__create_date +msgid "Created on" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__dependency_ids +msgid "Dependencies" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__non_std_dependency_level +msgid "Dependency level excluding all standard Odoo modules." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__global_dependency_level +msgid "Dependency level including all standard Odoo modules." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__odoo_project_module_ids +msgid "Deployed Modules" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__title +msgid "Descriptive name" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__development_status_id +msgid "Develoment Status" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__display_name +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__display_name +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__display_name +msgid "Display Name" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__is_enterprise +msgid "Enterprise?" +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_generate_migration_data_view_form +msgid "Existing data for the selected migration path will be removed." +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_export_migration_report_view_form +msgid "Export" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.actions.act_window,name:odoo_project_migration.odoo_project_export_migration_report_action +msgid "Export a migration report" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model,name:odoo_project_migration.model_odoo_project_export_migration_report +msgid "Export a migration report for an Odoo project" +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_view_form +msgid "Export migration report" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__external_dependencies +msgid "External Dependencies" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__full_path +msgid "Full Path" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__fully_ported +msgid "Fully Ported" +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_generate_migration_data_view_form +msgid "Generate" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.actions.act_window,name:odoo_project_migration.odoo_project_generate_migration_data_action +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_view_form +msgid "Generate migration data" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model,name:odoo_project_migration.model_odoo_project_generate_migration_data +msgid "Generate migration data for an Odoo project" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__global_dependency_level +msgid "Global Dep. Level" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__id +msgid "ID" +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_form +msgid "Info" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__installable +msgid "Installable" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__project_module_id +msgid "Installed Module" +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_module_branch_migration_view_search +msgid "Installed in projects" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__is_community +msgid "Is this module a contribution of the community?" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__is_enterprise +msgid "Is this module designed for Odoo Enterprise only?" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__is_standard +msgid "Is this module part of Odoo standard?" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__sloc_js +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_tree +msgid "JS" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__sloc_js +msgid "JavaScript source lines of code" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report____last_update +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data____last_update +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration____last_update +msgid "Last Modified on" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__last_scanned_commit +msgid "Last Scanned Commit" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__write_uid +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__write_uid +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__write_date +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__write_date +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__write_date +msgid "Last Updated on" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__version +msgid "Last version" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__license_id +msgid "License" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__maintainer_ids +msgid "Maintainers" +msgstr "" + +#. module: odoo_project_migration +#. odoo-python +#: code:addons/odoo_project_migration/models/odoo_project.py:0 +#: code:addons/odoo_project_migration/wizards/generate_migration_data.py:0 +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__module_migration_id +#, python-format +msgid "Migration" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project__module_migration_ids +msgid "Migration Data" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__migration_path_id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__migration_path_id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__migration_path_id +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_search +msgid "Migration Path" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__migration_scan +msgid "Migration Scan" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__migration_script_ids +msgid "Migration Scripts" +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_search +msgid "Migration Status" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model,name:odoo_project_migration.model_odoo_module_branch_migration +msgid "Migration data for a module of a given branch." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__migration_script_ids +msgid "" +"Migration scripts available between the installed version and the last version available on the target branch.\n" +"Ones that rework the database schema or data could be mandatory." +msgstr "" + +#. module: odoo_project_migration +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_form +msgid "Migration scripts to consider" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__state +msgid "Migration status" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.actions.act_window,name:odoo_project_migration.odoo_project_module_migration_action +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__migration_ids +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_view_form +msgid "Migrations" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project__migrations_count +msgid "Migrations Count" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__module_name +msgid "Module Technical Name" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model,name:odoo_project_migration.model_odoo_project_module_migration +msgid "Module migration line of an Odoo Project" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__specific +msgid "" +"Module specific to a project repository.It cannot be used across different " +"projects." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__moved_to_oca +msgid "Moved to OCA" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__moved_to_generic +msgid "Moved to generic repo" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__moved_to_standard +msgid "Moved to standard?" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__next_odoo_version_module_branch_id +msgid "Next Odoo Version Module Branch" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__non_std_dependency_level +msgid "Non-Std Dep. Level" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model,name:odoo_project_migration.model_odoo_project +msgid "Odoo Project" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model,name:odoo_project_migration.model_odoo_project_module +msgid "Odoo Project Module" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__odoo_version_id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__odoo_version_id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__branch_id +msgid "Odoo Version" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__org_id +msgid "Organization" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__pr_url +msgid "PR URL" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__port_commits +msgid "Ported (missing commits?)" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_export_migration_report__odoo_project_id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_generate_migration_data__odoo_project_id +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__odoo_project_id +msgid "Project" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_module_branch_migration__odoo_project_ids +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__odoo_project_ids +msgid "Projects" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__sloc_python +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_tree +msgid "Python" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__python_dependency_ids +msgid "Python Dependencies" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__sloc_python +msgid "Python source lines of code" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__removed +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__removed +msgid "Removed" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__replaced +msgid "Replaced" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__repository_id +msgid "Repository" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__repository_branch_id +msgid "Repository Branch" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__results_text +msgid "Results Text" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__reverse_dependency_ids +msgid "Reverse Dependencies" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__repository_sequence +msgid "Sequence" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__source_module_branch_id +msgid "Source" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__specific +msgid "Specific" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__is_standard +msgid "Standard?" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__summary +msgid "Summary" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__target_module_branch_id +msgid "Target" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__name +msgid "Techname" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__module_name +msgid "Technical Name" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__migration_scan +msgid "" +"Technical field telling if this module is elligible for a migration scan." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__addons_path +msgid "Technical field. Where the module is located in the repository." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__module_id +msgid "Technical name" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.constraint,message:odoo_project_migration.constraint_odoo_project_module_migration_uniq +msgid "This module migration path already exists." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__timeline_ids +msgid "Timeline" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__title +msgid "Title" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__migrate +msgid "To migrate" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields.selection,name:odoo_project_migration.selection__odoo_project_module_migration__state__review_migration +msgid "To review" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__url +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_form +msgid "URL" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__project_module_id +msgid "Version of the module installed in the project." +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__version_ids +msgid "Versions" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,field_description:odoo_project_migration.field_odoo_project_module_migration__sloc_xml +#: model_terms:ir.ui.view,arch_db:odoo_project_migration.odoo_project_module_migration_view_tree +msgid "XML" +msgstr "" + +#. module: odoo_project_migration +#: model:ir.model.fields,help:odoo_project_migration.field_odoo_project_module_migration__sloc_xml +msgid "XML source lines of code" +msgstr "" diff --git a/odoo_project_migration/models/__init__.py b/odoo_project_migration/models/__init__.py new file mode 100644 index 00000000..def3f96b --- /dev/null +++ b/odoo_project_migration/models/__init__.py @@ -0,0 +1,4 @@ +from . import odoo_module_branch_migration +from . import odoo_project_module +from . import odoo_project_module_migration +from . import odoo_project diff --git a/odoo_project_migration/models/odoo_module_branch_migration.py b/odoo_project_migration/models/odoo_module_branch_migration.py new file mode 100644 index 00000000..e8492f4e --- /dev/null +++ b/odoo_project_migration/models/odoo_module_branch_migration.py @@ -0,0 +1,10 @@ +# Copyright 2025 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo import fields, models + + +class OdooModuleBranchMigration(models.Model): + _inherit = "odoo.module.branch.migration" + + odoo_project_ids = fields.Many2many(related="module_branch_id.odoo_project_ids") diff --git a/odoo_project_migration/models/odoo_project.py b/odoo_project_migration/models/odoo_project.py new file mode 100644 index 00000000..97fea22b --- /dev/null +++ b/odoo_project_migration/models/odoo_project.py @@ -0,0 +1,78 @@ +# Copyright 2023 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +import ast + +from odoo import _, api, fields, models + + +class OdooProject(models.Model): + _inherit = "odoo.project" + + module_migration_ids = fields.One2many( + comodel_name="odoo.project.module.migration", + inverse_name="odoo_project_id", + string="Migration Data", + ) + migrations_count = fields.Integer(compute="_compute_migrations_count") + + @api.depends("module_migration_ids") + def _compute_migrations_count(self): + for rec in self: + rec.migrations_count = len(rec.module_migration_ids) + + def open_generate_migration_data(self): + self.ensure_one() + action = self.env["ir.actions.actions"]._for_xml_id( + "odoo_project_migration.odoo_project_generate_migration_data_action" + ) + ctx = action.get("context", {}) + if isinstance(ctx, str): + ctx = ast.literal_eval(ctx) + ctx["default_odoo_project_id"] = self.id + action["context"] = ctx + return action + + def open_export_migration_report(self): + self.ensure_one() + action = self.env["ir.actions.actions"]._for_xml_id( + "odoo_project_migration.odoo_project_export_migration_report_action" + ) + ctx = action.get("context", {}) + if isinstance(ctx, str): + ctx = ast.literal_eval(ctx) + ctx["default_odoo_project_id"] = self.id + action["context"] = ctx + return action + + def open_migration_data(self): + self.ensure_one() + action = self.env["ir.actions.actions"]._for_xml_id( + "odoo_project_migration.odoo_project_module_migration_action" + ) + ctx = action.get("context", {}) + if isinstance(ctx, str): + ctx = ast.literal_eval(ctx) + action["domain"] = [("odoo_project_id", "=", self.id)] + migration_paths = self.module_migration_ids.migration_path_id + if len(migration_paths) == 1: + action["display_name"] = _("Migration") + f" {migration_paths.name}" + else: + ctx["search_default_group_by_migration_path_id"] = 1 + ctx["search_default_group_by_org_id"] = 2 + ctx["search_default_group_by_state"] = 3 + action["context"] = ctx + return action + + def _get_branches_to_scan(self): + # Override to include migration paths branches used for this project + # E.g. the project is running on 15.0, and we used '15.0 -> 16.0 and + # '15.0.-> 17.0' migration paths to get migration data for 16.0 and 17.0. + # This method will then return the branches 15.0, 16.0 and 17.0 + branches = super()._get_branches_to_scan() + migration_paths = self.module_migration_ids.migration_path_id + migration_branches = ( + migration_paths.source_branch_id | migration_paths.target_branch_id + ) + branches |= migration_branches + return branches diff --git a/odoo_project_migration/models/odoo_project_module.py b/odoo_project_migration/models/odoo_project_module.py new file mode 100644 index 00000000..22afcd16 --- /dev/null +++ b/odoo_project_migration/models/odoo_project_module.py @@ -0,0 +1,12 @@ +# Copyright 2025 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo import models + + +class OdooProjectModule(models.Model): + _inherit = "odoo.project.module" + + def open_next_module_branches(self): + self.ensure_one() + return self.module_branch_id.open_next_module_branches() diff --git a/odoo_project_migration/models/odoo_project_module_migration.py b/odoo_project_migration/models/odoo_project_module_migration.py new file mode 100644 index 00000000..13d8bbfb --- /dev/null +++ b/odoo_project_migration/models/odoo_project_module_migration.py @@ -0,0 +1,203 @@ +# Copyright 2023 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo import api, fields, models + + +class OdooProjectModuleMigration(models.Model): + _name = "odoo.project.module.migration" + _inherits = {"odoo.module.branch": "source_module_branch_id"} + _description = "Module migration line of an Odoo Project" + _order = ( + "is_standard DESC, is_enterprise, is_community DESC, repository_id, module_name" + ) + + _sql_constraints = [ + ( + "uniq", + "UNIQUE (odoo_project_id, migration_path_id, source_module_branch_id)", + "This module migration path already exists.", + ), + ] + + odoo_project_id = fields.Many2one( + comodel_name="odoo.project", + ondelete="cascade", + string="Project", + required=True, + index=True, + readonly=True, + ) + migration_path_id = fields.Many2one( + comodel_name="odoo.migration.path", + ondelete="restrict", + string="Migration Path", + required=True, + index=True, + readonly=True, + ) + source_module_branch_id = fields.Many2one( + comodel_name="odoo.module.branch", + ondelete="restrict", + string="Source", + required=True, + index=True, + readonly=True, + ) + project_module_id = fields.Many2one( + comodel_name="odoo.project.module", + ondelete="cascade", + string="Installed Module", + help="Version of the module installed in the project.", + compute="_compute_project_module_id", + store=True, + index=True, + ) + target_module_branch_id = fields.Many2one( + comodel_name="odoo.module.branch", + ondelete="restrict", + string="Target", + compute="_compute_target_module_branch_id", + store=True, + index=True, + ) + module_id = fields.Many2one( + related="source_module_branch_id.module_id", + store=True, + index=True, + ) + module_migration_id = fields.Many2one( + comodel_name="odoo.module.branch.migration", + ondelete="restrict", + string="Migration", + compute="_compute_module_migration_id", + store=True, + index=True, + ) + migration_script_ids = fields.One2many( + comodel_name="odoo.module.branch.version", + string="Migration Scripts", + help=( + "Migration scripts available between the installed version and " + "the last version available on the target branch.\n" + "Ones that rework the database schema or data could be mandatory." + ), + compute="_compute_migration_script_ids", + ) + state = fields.Selection( + # Same as in 'odoo.module.branch.migration' but set a state even for + # modules with no migration data, could be Odoo S.A. std modules + # or project specific ones. + selection=[ + ("fully_ported", "Fully Ported"), + ("migrate", "To migrate"), + ("port_commits", "Ported (missing commits?)"), + ("review_migration", "To review"), + ("replaced", "Replaced"), + ("moved_to_standard", "Moved to standard?"), + ("moved_to_oca", "Moved to OCA"), + ("moved_to_generic", "Moved to generic repo"), + # New states to qualify modules without migration data + ("available", "Available"), + ("removed", "Removed"), + ], + string="Migration status", + compute="_compute_state", + store=True, + index=True, + ) + results_text = fields.Text(related="module_migration_id.results_text") + pr_url = fields.Char(related="module_migration_id.pr_url") + + @api.depends("odoo_project_id", "source_module_branch_id") + def _compute_project_module_id(self): + for rec in self: + project_module = self.env["odoo.project.module"].search( + [ + ("odoo_project_id", "=", rec.odoo_project_id.id), + ("module_branch_id", "=", rec.source_module_branch_id.id), + ], + limit=1, + ) + rec.project_module_id = project_module + + @api.depends( + "source_module_branch_id", + "migration_path_id", + "module_migration_id.replaced_by_module_id", + "module_migration_id.renamed_to_module_id", + ) + def _compute_target_module_branch_id(self): + module_branch_model = self.env["odoo.module.branch"] + for rec in self: + # Look for the right module technical name + module = ( + rec.module_migration_id.replaced_by_module_id + or rec.module_migration_id.renamed_to_module_id + or rec.source_module_branch_id.module_id + ) + rec.target_module_branch_id = module_branch_model._find( + rec.migration_path_id.target_branch_id, + module, + rec.odoo_project_id.repository_id, + domain=[("installable", "=", True)], + ) + + # NOTE: 'migration_scan' is here to re-trigger the computation + # each time the source module has its state updated regarding migration. + # FIXME: this could trigger too much computations on irrelevant records + # (one not related to the updated migration path), we should switch to + # component events to handle such cases. + @api.depends("migration_path_id", "source_module_branch_id.migration_scan") + def _compute_module_migration_id(self): + migration_model = self.env["odoo.module.branch.migration"] + for rec in self: + rec.module_migration_id = migration_model.search( + [ + ("migration_path_id", "=", rec.migration_path_id.id), + ("module_branch_id", "=", rec.source_module_branch_id.id), + ] + ) + + @api.depends("project_module_id") + def _compute_migration_script_ids(self): + for rec in self: + version_model = rec.env["odoo.module.branch.version"] + current_release_versions = version_model.search( + [ + ("module_branch_id", "=", rec.source_module_branch_id.id), + ( + "sequence", + ">", + rec.project_module_id.installed_version_id.sequence, + ), + ("has_migration_script", "=", True), + ], + order="sequence", + ) + # Collect versions with migration scripts accross next modules + # taking into account module renaming/replacement + target_branch = rec.migration_path_id.target_branch_id + next_modules = rec.source_module_branch_id._get_next_module_branches( + target_branch + ) + new_release_versions = next_modules.version_ids.filtered( + "has_migration_script" + ).sorted(key=lambda v: (v.branch_sequence, v.sequence)) + rec.migration_script_ids = current_release_versions | new_release_versions + + @api.depends("module_migration_id.state") + def _compute_state(self): + for rec in self: + rec.state = rec.module_migration_id.state + if not rec.module_migration_id: + # Default state (used by project specific modules) + rec.state = "migrate" + if rec.source_module_branch_id.is_standard: + # Odoo S.A. modules + rec.state = ( + "available" if rec.target_module_branch_id else "removed" + ) + elif rec.target_module_branch_id: + # repo with collect_migration_data = False + rec.state = "available" diff --git a/odoo_project_migration/pyproject.toml b/odoo_project_migration/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/odoo_project_migration/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/odoo_project_migration/readme/CONTRIBUTORS.md b/odoo_project_migration/readme/CONTRIBUTORS.md new file mode 100644 index 00000000..17752927 --- /dev/null +++ b/odoo_project_migration/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- Camptocamp + - Sébastien Alix \ diff --git a/odoo_project_migration/readme/DESCRIPTION.md b/odoo_project_migration/readme/DESCRIPTION.md new file mode 100644 index 00000000..c32b2e03 --- /dev/null +++ b/odoo_project_migration/readme/DESCRIPTION.md @@ -0,0 +1,2 @@ +This module integrates the migration data collected by `odoo_repository_migration` module in your Odoo projects. +It allows to generate migration reports, giving some hints about the effort to provide to migrate the project to a newer Odoo version. diff --git a/odoo_project_migration/security/ir.model.access.csv b/odoo_project_migration/security/ir.model.access.csv new file mode 100644 index 00000000..98e90b49 --- /dev/null +++ b/odoo_project_migration/security/ir.model.access.csv @@ -0,0 +1,4 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_odoo_project_module_migration_user,odoo_project_module_migration_user,model_odoo_project_module_migration,odoo_repository.group_odoo_repository_user,1,0,0,0 +access_odoo_project_generate_migration_data_user,odoo_project_generate_migration_data_user,model_odoo_project_generate_migration_data,odoo_repository.group_odoo_repository_user,1,1,1,1 +access_odoo_project_export_migration_report_user,odoo_project_export_migration_report_user,model_odoo_project_export_migration_report,odoo_repository.group_odoo_repository_user,1,1,1,1 diff --git a/odoo_project_migration/static/description/icon.png b/odoo_project_migration/static/description/icon.png new file mode 100644 index 00000000..1dcc49c2 Binary files /dev/null and b/odoo_project_migration/static/description/icon.png differ diff --git a/odoo_project_migration/static/description/index.html b/odoo_project_migration/static/description/index.html new file mode 100644 index 00000000..adda2101 --- /dev/null +++ b/odoo_project_migration/static/description/index.html @@ -0,0 +1,429 @@ + + + + + +Odoo Project Migration Data + + + +
+

Odoo Project Migration Data

+ + +

Beta License: AGPL-3 OCA/module-composition-analysis Translate me on Weblate Try me on Runboat

+

This module integrates the migration data collected by +odoo_repository_migration module in your Odoo projects. It allows to +generate migration reports, giving some hints about the effort to +provide to migrate the project to a newer Odoo version.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Camptocamp
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/module-composition-analysis project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/odoo_project_migration/views/odoo_module_branch_migration.xml b/odoo_project_migration/views/odoo_module_branch_migration.xml new file mode 100644 index 00000000..295e5cfa --- /dev/null +++ b/odoo_project_migration/views/odoo_module_branch_migration.xml @@ -0,0 +1,58 @@ + + + + + odoo.module.branch.migration.form.inherit + odoo.module.branch.migration + + + + + + + + + + odoo.module.branch.migration.list.inherit + odoo.module.branch.migration + + + + + + + + + + odoo.module.branch.migration.search.inherit + odoo.module.branch.migration + + + + + + + + + + + + diff --git a/odoo_project_migration/views/odoo_project.xml b/odoo_project_migration/views/odoo_project.xml new file mode 100644 index 00000000..cf2ca075 --- /dev/null +++ b/odoo_project_migration/views/odoo_project.xml @@ -0,0 +1,44 @@ + + + + + odoo.project.form.inherit + odoo.project + + +
+ +
+
+ +
+
+
+
diff --git a/odoo_project_migration/views/odoo_project_module_migration.xml b/odoo_project_migration/views/odoo_project_module_migration.xml new file mode 100644 index 00000000..75b4f202 --- /dev/null +++ b/odoo_project_migration/views/odoo_project_module_migration.xml @@ -0,0 +1,107 @@ + + + + + odoo.project.module.migration.form + odoo.project.module.migration + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + odoo.project.module.migration.list + odoo.project.module.migration + + + + + + + + + + + + + + + + + + + + + + + + + odoo.project.module.migration.search + odoo.project.module.migration + + primary + + + + + + + + + + + + + Migrations + ir.actions.act_window + odoo.project.module.migration + + +
diff --git a/odoo_project_migration/wizards/__init__.py b/odoo_project_migration/wizards/__init__.py new file mode 100644 index 00000000..d5cc0d5e --- /dev/null +++ b/odoo_project_migration/wizards/__init__.py @@ -0,0 +1,2 @@ +from . import generate_migration_data +from . import export_migration_report diff --git a/odoo_project_migration/wizards/export_migration_report.py b/odoo_project_migration/wizards/export_migration_report.py new file mode 100644 index 00000000..d8a8758a --- /dev/null +++ b/odoo_project_migration/wizards/export_migration_report.py @@ -0,0 +1,172 @@ +# Copyright 2023 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +import base64 +import csv +import io + +from odoo import api, fields, models + + +class OdooProjectExportMigrationReport(models.TransientModel): + _name = "odoo.project.export.migration.report" + _description = "Export a migration report for an Odoo project" + + odoo_project_id = fields.Many2one( + comodel_name="odoo.project", + string="Project", + required=True, + ) + odoo_version_id = fields.Many2one(related="odoo_project_id.odoo_version_id") + available_migration_path_ids = fields.One2many( + comodel_name="odoo.migration.path", + compute="_compute_available_migration_path_ids", + string="Available Migration Paths", + ) + migration_path_id = fields.Many2one( + comodel_name="odoo.migration.path", + string="Migration Path", + required=True, + ) + + @api.depends("odoo_project_id") + def _compute_available_migration_path_ids(self): + for rec in self: + rec.available_migration_path_ids = ( + rec.odoo_project_id.module_migration_ids.migration_path_id + ) + + def action_export_report(self): + """Export a migration report in CSV format.""" + self.ensure_one() + migration_path_str = ( + f"{self.migration_path_id.source_branch_id.name}_" + f"{self.migration_path_id.target_branch_id.name}" + ) + now_str = fields.Datetime.now().strftime("%Y%m%d-%Hh%M") + content = self._get_csv_content() + values = { + "res_model": self.odoo_project_id._name, + "res_id": self.odoo_project_id.id, + "name": ( + f"{self.odoo_project_id.display_name}_" + f"{migration_path_str}_{now_str}.csv" + ), + "type": "binary", + "datas": base64.b64encode(content.encode()), + } + attachment = self.env["ir.attachment"].create(values) + # self.odoo_project_id.attachment_ids |= attachment + attachment_url = ( + f"web/content/?model=ir.attachment&id={attachment.id}" + "&filename_field=name&field=datas&download=true" + f"&name={attachment.name}" + ) + action = {"type": "ir.actions.act_url", "url": attachment_url, "target": "self"} + return action + + def _get_csv_content(self): + with io.StringIO() as csvfile: + header = self._get_csv_header() + writer = csv.DictWriter(csvfile, fieldnames=header) + writer.writeheader() + for line in self._get_csv_lines(): + writer.writerow(line) + csvfile.seek(0) + return csvfile.getvalue() + + def _get_csv_lines(self): + # org_model = self.env["odoo.repository.org"] + project_module_mig_model = self.env["odoo.project.module.migration"] + repo_model = self.env["odoo.repository"] + group_by_repo = project_module_mig_model._read_group( + [ + ("odoo_project_id", "=", self.odoo_project_id.id), + ("migration_path_id", "=", self.migration_path_id.id), + ], + ["repository_id"], + ["__count"], + ) + for group_repo in group_by_repo: + # Put the repository on its own line + if group_repo["repository_id"]: + repo_id = group_repo["repository_id"][0] + repo = repo_model.browse(repo_id) + yield {"Repository": repo.display_name} + else: + yield {"Repository": "Unknown"} + domain_with_repo = group_repo["__domain"] + modules = project_module_mig_model.search(domain_with_repo) + for module in modules: + yield self._prepare_csv_module_line(module) + + def _get_csv_header(self): + return [ + "Repository", + "Module", + "Dependencies", + "Global Dep. Level", + "Non-Std Dep. Level", + "Python", + "XML", + "JavaScript", + "CSS", + "Status", + "Info", + "Warning", + ] + + def _prepare_csv_module_line(self, module): + line = { + "Module": module.module_name, + "Dependencies": "\n".join(module.dependency_ids.mapped("module_name")), + "Global Dep. Level": module.global_dependency_level, + "Non-Std Dep. Level": module.non_std_dependency_level, + "Python": module.sloc_python, + "XML": module.sloc_xml, + "JavaScript": module.sloc_js, + "CSS": module.sloc_css, + "Status": module.state, + "Info": self._get_csv_module_info(module), + "Warning": self._get_csv_module_warning(module), + } + return line + + def _get_csv_module_info(self, module): + migration = module.module_migration_id + info = [] + # Module renamed or replaced by another one + if migration.renamed_to_module_id: + info.append(f"Renamed to {migration.target_module_branch_id.module_name}") + elif migration.replaced_by_module_id: + info.append( + f"Replaced by {migration.target_module_branch_id.module_name} " + f"(in {migration.target_module_branch_id.repository_id.display_name})" + ) + # Migration to review or commits/PRs to port + if migration.state == "review_migration": + if migration.pr_url: + info.append(f"PR to review: {migration.pr_url}") + elif migration.process == "port_commits": + nb_prs = len(migration.results) + msg = f"{nb_prs} PR(s) to check/port" + msg = "\n".join( + [msg] + [f"- {pr['url']}" for pr in migration.results.values()] + ) + info.append(msg) + # Migration scripts + if module.migration_script_ids: + nb_scripts = len(module.migration_script_ids) + info_mig = f"\n\n{nb_scripts} migration script(s) to consider:" + info_mig = "\n".join( + [info_mig] + + [f"- {sc.migration_script_url}" for sc in module.migration_script_ids] + ) + info.append(info_mig) + return "\n\n".join(info) + + def _get_csv_module_warning(self, module): + warning = "" + if not module.repository_id or module.pr_url: + warning = f"Not merged in {module.branch_id.name} yet" + return warning diff --git a/odoo_project_migration/wizards/export_migration_report.xml b/odoo_project_migration/wizards/export_migration_report.xml new file mode 100644 index 00000000..b3ac38bd --- /dev/null +++ b/odoo_project_migration/wizards/export_migration_report.xml @@ -0,0 +1,44 @@ + + + + + odoo.project.export.migration.report.form + odoo.project.export.migration.report + +
+ + + + + + + + +
+
+
+
+
+ + + Export a migration report + ir.actions.act_window + odoo.project.export.migration.report + form + new + +
diff --git a/odoo_project_migration/wizards/generate_migration_data.py b/odoo_project_migration/wizards/generate_migration_data.py new file mode 100644 index 00000000..81203f04 --- /dev/null +++ b/odoo_project_migration/wizards/generate_migration_data.py @@ -0,0 +1,51 @@ +# Copyright 2023 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo import _, fields, models + + +class OdooProjectGenerateMigrationData(models.TransientModel): + _name = "odoo.project.generate.migration.data" + _description = "Generate migration data for an Odoo project" + + odoo_project_id = fields.Many2one( + comodel_name="odoo.project", + string="Project", + required=True, + ) + odoo_version_id = fields.Many2one(related="odoo_project_id.odoo_version_id") + migration_path_id = fields.Many2one( + comodel_name="odoo.migration.path", + string="Migration Path", + required=True, + ) + + def action_generate_data(self): + """Generate migration data for the given Odoo project.""" + self.ensure_one() + module_migration_model = self.env["odoo.project.module.migration"] + module_migrations_to_unlink = module_migration_model.search( + [ + ("odoo_project_id", "=", self.odoo_project_id.id), + ("migration_path_id", "=", self.migration_path_id.id), + ] + ) + module_migrations_to_unlink.sudo().unlink() + values_list = [] + modules_branch = self.odoo_project_id.project_module_ids.module_branch_id + for module_branch in modules_branch: + values = self._prepare_module_migration_values(module_branch) + values_list.append(values) + module_migration_model.sudo().create(values_list) + # Open the generated migration data + action = self.odoo_project_id.open_migration_data() + action["domain"].append(("migration_path_id", "=", self.migration_path_id.id)) + action["display_name"] = _("Migration") + f" {self.migration_path_id.name}" + return action + + def _prepare_module_migration_values(self, module_branch): + return { + "odoo_project_id": self.odoo_project_id.id, + "migration_path_id": self.migration_path_id.id, + "source_module_branch_id": module_branch.id, + } diff --git a/odoo_project_migration/wizards/generate_migration_data.xml b/odoo_project_migration/wizards/generate_migration_data.xml new file mode 100644 index 00000000..ac4e34d5 --- /dev/null +++ b/odoo_project_migration/wizards/generate_migration_data.xml @@ -0,0 +1,47 @@ + + + + + odoo.project.generate.migration.data.form + odoo.project.generate.migration.data + +
+ + + + + + + + +
+
+
+
+
+ + + Generate migration data + ir.actions.act_window + odoo.project.generate.migration.data + form + new + +