diff --git a/github_connector_odoo/README.rst b/github_connector_odoo/README.rst new file mode 100644 index 00000000..01f2bde3 --- /dev/null +++ b/github_connector_odoo/README.rst @@ -0,0 +1,194 @@ +======================= +Github Connector - Odoo +======================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:04725d9223195564f0324b1845c0395271f93a92df2969fc07d414572db446ef + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Finterface--github-lightgray.png?logo=github + :target: https://github.com/OCA/interface-github/tree/18.0/github_connector_odoo + :alt: OCA/interface-github +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/interface-github-18-0/interface-github-18-0-github_connector_odoo + :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/interface-github&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module was written to extend the functionality of 'Github +Connector' Module if your repositories contain Odoo Modules. + +It extends 'Analysis' features to parse code files (readme / manifest +files) and add new models and menus. + +|menu| + +.. |menu| image:: https://raw.githubusercontent.com/OCA/interface-github/18.0/github_connector_odoo/static/description/menu.png + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +- Once installed, go to your organization, and set extra settings: + +1. The name of your organization in the author keys of the manifest odoo + modules (in the **Default Author Text** field) +2. The URL of the file that contains IDs of your repositories for the + runbot + +|github_organization_form| + +If you had analyzed previously your repositories with the 'github +Connector' module, you should launch again the Analysis Process for all +your Repository Branches. + +.. |github_organization_form| image:: https://raw.githubusercontent.com/OCA/interface-github/18.0/github_connector_odoo/static/description/github_organization_form.png + +Usage +===== + +**Odoo Modules** + +|odoo_module_kanban| + +In each module, you can see the description of the module, the authors, +the available series, and the list of the modules that depend on the +current module. + +|odoo_module_form| + +**Odoo Authors** + +|odoo_author| + +This list is based on the 'author' key of the manifest file. + +**Odoo License** + +This list is based on the 'license' key of the manifest file. + +|odoo_license| + +**Odoo Bin Libs** + +This list is based on the 'external_dependencies' / 'bin' key of the +manifest file. + +|odoo_bin_libs| + +**Odoo Python Libs** + +This list is based on the 'external_dependencies' / 'python' key of the +manifest file. + +|odoo_python_libs| + +**Analysis source code** + +Implements Analysis source code in odoo module versions, now add new +field called "has_odoo_addons" (boolean) in Analysis rule that allow (if +defined) analyze odoo_module_versions and save info about it + +**Soource code analysis** + +Implements Source code analysis odoo module versions, now addiing new +field called "has_odoo_addons" (boolean) in Analysis rule that (if +defined) allows to analyze odoo_module_versions and save info about it + +In 'Repository Branch' / 'Code Analysis', shows the info related to +odoo_module_versions rules analysis too. + +**Reporting** + +This module provide a new reporting. + +**Modules by Serie (and Licenses)** + +|reporting_module_by_serie| + +.. |odoo_module_kanban| image:: https://raw.githubusercontent.com/OCA/interface-github/18.0/github_connector_odoo/static/description/odoo_module_kanban.png +.. |odoo_module_form| image:: https://raw.githubusercontent.com/OCA/interface-github/18.0/github_connector_odoo/static/description/odoo_module_form.png +.. |odoo_author| image:: https://raw.githubusercontent.com/OCA/interface-github/18.0/github_connector_odoo/static/description/odoo_author.png +.. |odoo_license| image:: https://raw.githubusercontent.com/OCA/interface-github/18.0/github_connector_odoo/static/description/odoo_license.png +.. |odoo_bin_libs| image:: https://raw.githubusercontent.com/OCA/interface-github/18.0/github_connector_odoo/static/description/odoo_bin_libs.png +.. |odoo_python_libs| image:: https://raw.githubusercontent.com/OCA/interface-github/18.0/github_connector_odoo/static/description/odoo_python_libs.png +.. |reporting_module_by_serie| image:: https://raw.githubusercontent.com/OCA/interface-github/18.0/github_connector_odoo/static/description/reporting_module_by_serie.png + +Known issues / Roadmap +====================== + +Possible improvements : + +- Implement deep code source analysis, like the website + http://odoo-code-search.com/ and specially: + +1. Possibility to search by field or by model name. (Ex: + field:invoice_id) +2. Possibility to display the number of XML, Python, Yaml, HTML, CSS + lines + +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 +------- + +* Sylvain LE GAL +* GRAP + +Contributors +------------ + +- Sylvain LE GAL (https://twitter.com/legalsylvain) +- `Tecnativa `__: + + - Vicent Cubells + - Alexandre Díaz + - Pedro M. Baeza + - Ernesto Tejeda + - Víctor Martínez + - Carolina Fernandez + +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/interface-github `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/github_connector_odoo/__init__.py b/github_connector_odoo/__init__.py new file mode 100644 index 00000000..27d75a59 --- /dev/null +++ b/github_connector_odoo/__init__.py @@ -0,0 +1,3 @@ +from . import monkeypatching +from . import models +from . import report diff --git a/github_connector_odoo/__manifest__.py b/github_connector_odoo/__manifest__.py new file mode 100644 index 00000000..708d9941 --- /dev/null +++ b/github_connector_odoo/__manifest__.py @@ -0,0 +1,43 @@ +# Copyright (C) 2016-Today: Odoo Community Association (OCA) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# Copyright 2024 Tecnativa - Carolina Fernandez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + "name": "Github Connector - Odoo", + "summary": "Analyze Odoo modules information from Github repositories", + "version": "18.0.1.0.0", + "category": "Connector", + "license": "AGPL-3", + "author": "Odoo Community Association (OCA), Sylvain LE GAL, GRAP", + "website": "https://github.com/OCA/interface-github", + "depends": ["github_connector"], + "data": [ + "security/ir.model.access.csv", + "data/function.xml", + "views/view_reporting.xml", + "views/action.xml", + "views/menu.xml", + "views/view_odoo_license.xml", + "views/view_odoo_author.xml", + "views/view_odoo_lib_bin.xml", + "views/view_odoo_lib_python.xml", + "views/view_odoo_module.xml", + "views/view_odoo_module_version.xml", + "views/view_github_analysis_rule.xml", + "views/view_github_organization.xml", + "views/view_github_repository.xml", + "views/view_github_repository_branch.xml", + "data/odoo_licence.xml", + "data/odoo_category_data.xml", + "data/odoo_manifest_key_data.xml", + "data/ir_cron.xml", + "report/odoo_module_version_rule_info_report_view.xml", + ], + "demo": [ + "demo/github_analysis_rule_group_demo.xml", + "demo/github_analysis_rule_demo.xml", + "demo/github_organization.xml", + ], + "installable": True, + "external_dependencies": {"python": ["pathspec"]}, +} diff --git a/github_connector_odoo/data/function.xml b/github_connector_odoo/data/function.xml new file mode 100644 index 00000000..38b289c1 --- /dev/null +++ b/github_connector_odoo/data/function.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/github_connector_odoo/data/ir_cron.xml b/github_connector_odoo/data/ir_cron.xml new file mode 100644 index 00000000..02a2d467 --- /dev/null +++ b/github_connector_odoo/data/ir_cron.xml @@ -0,0 +1,18 @@ + + + + + Clean Odoo Module Version + 1 + + + days + code + + model.cron_clean_odoo_module_version() + + diff --git a/github_connector_odoo/data/oca.png b/github_connector_odoo/data/oca.png new file mode 100644 index 00000000..3a0328b5 Binary files /dev/null and b/github_connector_odoo/data/oca.png differ diff --git a/github_connector_odoo/data/odoo_category_data.xml b/github_connector_odoo/data/odoo_category_data.xml new file mode 100644 index 00000000..1c1b7036 --- /dev/null +++ b/github_connector_odoo/data/odoo_category_data.xml @@ -0,0 +1,59 @@ + + + + + Accounting + + + Discuss + + + Document Management + + + eCommerce + + + Human Resources + + + Industries + + + Localization + + + Manufacturing + + + Point of Sale + + + Productivity + + + Project + + + Purchases + + + Sales + + + Warehouse + + + Website + + + Extra Tools + + + Other + + diff --git a/github_connector_odoo/data/odoo_licence.xml b/github_connector_odoo/data/odoo_licence.xml new file mode 100644 index 00000000..c1a3fa39 --- /dev/null +++ b/github_connector_odoo/data/odoo_licence.xml @@ -0,0 +1,44 @@ + + + + + GPL-3 + http://www.gnu.org/licenses/gpl-3.0.html + + You may copy, distribute and modify the software as long as you track changes/dates in source files. Any modifications to or software including (via compiler) GPL-licensed code must also be made available under the GPL along with build and install instructions. + + + LGPL-3 + http://www.gnu.org/licenses/lgpl-3.0.html + + This license is mainly applied to libraries. You may copy, distribute and modify the software provided that modifications are described and licensed for free under LGPL. Derivatives works (including modifications or anything statically linked to the library) can only be redistributed under LGPL, but applications that use the library don't have to be. + + + AGPL-3 + http://www.gnu.org/licenses/agpl-3.0.html + + The AGPL license differs from the other GNU licenses in that it was built for network software. You can distribute modified versions if you keep track of the changes and the date you made them. As per usual with GNU licenses, you must license derivatives under AGPL. It provides the same restrictions and freedoms as the GPLv3 but with an additional clause which makes it so that source code must be distributed along with web publication. Since web sites and services are never distributed in the traditional sense, the AGPL is the GPL of the web. + + diff --git a/github_connector_odoo/data/odoo_manifest_key_data.xml b/github_connector_odoo/data/odoo_manifest_key_data.xml new file mode 100644 index 00000000..5a830c06 --- /dev/null +++ b/github_connector_odoo/data/odoo_manifest_key_data.xml @@ -0,0 +1,12 @@ + + + + + data + + + demo + + diff --git a/github_connector_odoo/demo/github_analysis_rule_demo.xml b/github_connector_odoo/demo/github_analysis_rule_demo.xml new file mode 100644 index 00000000..5b6f9e3f --- /dev/null +++ b/github_connector_odoo/demo/github_analysis_rule_demo.xml @@ -0,0 +1,76 @@ + + + + + Python files (misc) + + + +*.py +!/tests/*.py + + + + Test python files (misc) + + + /tests/*.py + + + XML files (misc) + + + *.xml + + + JS files (misc) + + + +*.js +!/lib/ + + + + Test js files (misc) + + + /tests/*.js + + + Css files (misc) + + + +*.css +*.scss +*.less +*.sass + + + + Demo data (misc) + + + *.xml + + + diff --git a/github_connector_odoo/demo/github_analysis_rule_group_demo.xml b/github_connector_odoo/demo/github_analysis_rule_group_demo.xml new file mode 100644 index 00000000..b331b9b5 --- /dev/null +++ b/github_connector_odoo/demo/github_analysis_rule_group_demo.xml @@ -0,0 +1,10 @@ + + + + + Misc addons + + diff --git a/github_connector_odoo/demo/github_organization.xml b/github_connector_odoo/demo/github_organization.xml new file mode 100644 index 00000000..14b36ffa --- /dev/null +++ b/github_connector_odoo/demo/github_organization.xml @@ -0,0 +1,17 @@ + + + + + https://raw.githubusercontent.com/OCA/maintainer-tools/master/tools/repos_with_ids.txt + Odoo Community Association (OCA) + https://runbot.odoo-community.org/runbot/{runbot_id_external}/{branch_name} + + diff --git a/github_connector_odoo/i18n/es.po b/github_connector_odoo/i18n/es.po new file mode 100644 index 00000000..511a094b --- /dev/null +++ b/github_connector_odoo/i18n/es.po @@ -0,0 +1,832 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * github_connector_odoo +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-03-13 11:14+0000\n" +"PO-Revision-Date: 2024-03-13 12:14+0100\n" +"Last-Translator: Víctor Martínez \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Poedit 3.0.1\n" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__code_count +msgid "# Code" +msgstr "# Código" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__documentation_count +msgid "# Doc." +msgstr "# Doc." + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__empty_count +msgid "# Empty" +msgstr "# Vacío" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__total_count +msgid "# Total" +msgstr "# Total" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_abstract_action_mixin +msgid "Abstract Action Mixin" +msgstr "Mixin de acción abstracta" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__active +msgid "Active" +msgstr "Activo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__analysis_rule_id +msgid "Analysis Rule" +msgstr "Regla de análisis" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__analysis_rule_info_ids +msgid "Analysis Rule Info ids" +msgstr "Análisis Regla Información ids" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch__module_version_analysis_rule_info_ids +msgid "Analysis Rule Info ids (module version)" +msgstr "Análisis Regla Información ids (versión de módulo)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__analysis_rule_id +msgid "Analysis Rule id" +msgstr "Análisis Regla id" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_license_form +msgid "Archived" +msgstr "Archivado" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__author +msgid "Author (Manifest)" +msgstr "Autor (manifiesto)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__author_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__author_ids +msgid "Authors" +msgstr "Autores" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__author_ids_description +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__author_ids_description +msgid "Authors (Text)" +msgstr "Autores (Texto)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__auto_install +msgid "Auto Install" +msgstr "Auto Instalación" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_form +msgid "Available for" +msgstr "Disponible para" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_tree +msgid "Bin Lib" +msgstr "Bin Lib" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__lib_bin_ids +msgid "Bin Lib Dependencies" +msgstr "Dependencias Bin Lib" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__lib_bin_ids_description +msgid "Bin Lib Dependencies (Text)" +msgstr "Dependencias Bin Lib (Texto)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__category_id +msgid "Category" +msgstr "Categoría" + +#. module: github_connector_odoo +#: model:ir.actions.server,name:github_connector_odoo.cron_clean_odoo_module_version_ir_actions_server +#: model:ir.cron,cron_name:github_connector_odoo.cron_clean_odoo_module_version +msgid "Clean Odoo Module Version" +msgstr "Limpiar la versión del módulo de Odoo" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_form +msgid "Code Analysis" +msgstr "Análisis de código" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__code_count +msgid "Code Count" +msgstr "Total de código" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__complete_name +msgid "Complete Name" +msgstr "Nombre completo" + +#. module: github_connector_odoo +#: model:ir.model.fields.selection,name:github_connector_odoo.selection__odoo_module_version__odoo_type__connector +msgid "Connector" +msgstr "Conector" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_organization__default_author_text +msgid "Default Author Text" +msgstr "Texto del autor por defecto" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__dependency_module_ids +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_form +msgid "Dependencies" +msgstr "Dependencias" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__depends +msgid "Dependencies (Manifest)" +msgstr "Dependencias (manifiesto)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__description +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_license_form +msgid "Description" +msgstr "Descripción" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_form +msgid "Descriptions" +msgstr "Descripciones" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__documentation_count +msgid "Documentation Count" +msgstr "Total documentación" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__empty_count +msgid "Empty Count" +msgstr "Total vacío" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__external_dependencies +msgid "External Dependencies (Manifest)" +msgstr "Dependencias externas (manifiesto)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__full_module_path +msgid "Full Local Path to the module" +msgstr "Ruta local completa al módulo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_github_analysis_rule +msgid "Github Analysis Rule" +msgstr "Regla de análisis de Github" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_github_repository +msgid "Github Repository" +msgstr "Repositorio Github" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_github_repository_branch +msgid "Github Repository Branch" +msgstr "Rama de repositorio Github" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__github_url +msgid "Github URL" +msgstr "URL Github" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_github_organization +msgid "Github organization" +msgstr "Organización Github" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__group_id +msgid "Group" +msgstr "Grupo" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_search +msgid "Group By" +msgstr "Grupo por" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__group_id +msgid "Group id" +msgstr "Id grupo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__description_rst_html +msgid "HTML of the RST Description of the last Version" +msgstr "HTML del RST Descripción de la última versión" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__description_rst_html +msgid "HTML the RST Description" +msgstr "HTML la descripción de RST" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_analysis_rule__has_odoo_addons +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch_rule_info_report__has_odoo_addons +msgid "Has odoo addons?" +msgstr "¿Tiene addons de Odoo?" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__id +msgid "ID" +msgstr "ID" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository__runbot_id_external +#: model:ir.model.fields,field_description:github_connector_odoo.field_wizard_create_repository__runbot_id_external +msgid "ID For Runbot" +msgstr "ID para Runbot" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__image +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__image +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__image +msgid "Icon Image" +msgstr "Imagen de icono" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__icon +msgid "Icon Path (Manifest)" +msgstr "Ruta de icono (Manifiesto)" + +#. module: github_connector_odoo +#. odoo-python +#: code:addons/github_connector_odoo/models/odoo_module_version.py:0 +#, python-format +msgid "Incorrect RST Description" +msgstr "Descripción RST incorrecta" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_license_form +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_form +msgid "Information" +msgstr "Información" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report____last_update +msgid "Last Modified on" +msgstr "Última modificación el" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__license_id +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_search +msgid "License" +msgstr "Licencia" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__license +msgid "License (Manifest)" +msgstr "Licencia (Manifiesto)" + +#. module: github_connector_odoo +#: model:ir.model.fields.selection,name:github_connector_odoo.selection__odoo_module_version__odoo_type__localization +msgid "Localization" +msgstr "Localización" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__maintainers +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__maintainers +msgid "Maintainers (Manifest)" +msgstr "Mantenedores (Manifiesto)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_analysis_rule__manifest_key_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch_rule_info_report__manifest_key_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__manifest_key_ids +msgid "Manifest keys" +msgstr "Claves de manifiesto" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__manifest_keys +msgid "Manifest keys (Manifest)" +msgstr "Claves de manifiesto (Manifiesto)" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_lib_bin_form +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_lib_python_form +msgid "Mod. Versions" +msgstr "Mod. Versiones" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__module_id +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_search +msgid "Module" +msgstr "Módulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch__module_paths +msgid "Module Paths" +msgstr "Rutas de módulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__module_version_id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__module_version_id +msgid "Module Version" +msgstr "Versión del módulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__module_version_name +msgid "Module Version name" +msgstr "Nombre de versión del módulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch__module_version_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__module_version_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__module_version_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__module_version_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__module_version_ids +msgid "Module Versions" +msgstr "Versiones del módulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__dependence_module_version_ids +msgid "Module Versions that depend on this module" +msgstr "Versiones de módulos que dependen de este módulo" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_module_version_rule_info_report +#: model:ir.ui.menu,name:github_connector_odoo.menu_action_odoo_module_version_rule_info_report +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.action_odoo_module_version_rule_info_report_graph +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.action_odoo_module_version_rule_info_report_pivot +msgid "Module version analysis rule" +msgstr "Regla de análisis de versión de módulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__module_ids +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_kanban +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_oca_author_form +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_license_form +msgid "Modules" +msgstr "Módulos" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_module_version_by_serie +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_module_version_by_serie +msgid "Modules by Serie" +msgstr "Módulos por serie" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__name +msgid "Name" +msgstr "Nombre" + +#. module: github_connector_odoo +#: model:ir.model.constraint,message:github_connector_odoo.constraint_odoo_license_name_uniq +msgid "Name already exists !" +msgstr "¡El nombre ya existe!" + +#. module: github_connector_odoo +#. odoo-python +#: code:addons/github_connector_odoo/models/odoo_module.py:0 +#: code:addons/github_connector_odoo/models/odoo_module_version.py:0 +#, python-format +msgid "No Version Found" +msgstr "No se ha encontrado ninguna versión" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch__module_version_qty +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__module_version_qty +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__module_version_qty +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__module_version_qty +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__module_version_qty +msgid "Number of Module Versions" +msgstr "Número de versiones del módulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__dependence_module_version_qty +msgid "Number of Module Versions that depend on this module" +msgstr "Número de versiones de módulos que dependen de este módulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__module_qty +msgid "Number of Modules" +msgstr "Número de módulos" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_kanban +msgid "Number of modules" +msgstr "Número de módulos" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_author +msgid "Odoo Author" +msgstr "Autor Odoo" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_lib_bin +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_lib_bin +msgid "Odoo Bin Libs" +msgstr "Bin Libs Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_category +msgid "Odoo Category" +msgstr "Categoría Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_lib_bin +msgid "Odoo Lib Bin" +msgstr "Lib Bin Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_lib_python +msgid "Odoo Lib Python" +msgstr "Lib Python Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_license +msgid "Odoo License" +msgstr "Licencia Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_manifest_key +msgid "Odoo Manifest Key" +msgstr "Clave de manifiesto Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_module +msgid "Odoo Module" +msgstr "Módulo Odoo" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_author +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_author +msgid "Odoo Module Authors" +msgstr "Autores de módulo Odoo" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_license +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_license +msgid "Odoo Module Licenses" +msgstr "Licencias de módulo Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_module_version +msgid "Odoo Module Version" +msgstr "Versión del módulo Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_module_version_rule_info_report +msgid "Odoo Module Version Rule Info Report" +msgstr "Informe de información sobre la versión del módulo de Odoo" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_module_version +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_module_version +msgid "Odoo Module Versions" +msgstr "Versiones de módulo Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_module_version_rule_info +msgid "Odoo Module Vesion Rule Info" +msgstr "Información de regla de versión de módulo Odoo" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_module +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_module +msgid "Odoo Modules" +msgstr "Módulos Odoo" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_lib_python +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_lib_python +msgid "Odoo Python Libs" +msgstr "Python Libs Odoo" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_organization_form +msgid "Odoo Settings" +msgstr "Ajustes Odoo" + +#. module: github_connector_odoo +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo +msgid "Odoo Source Code" +msgstr "Código fuente de Odoo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__odoo_type +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_search +msgid "Odoo Type" +msgstr "Tipo Odoo" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_kanban +msgid "Open on github" +msgstr "Abrir en github" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__organization_serie_id +msgid "Organization Serie" +msgstr "Serie Organización" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__organization_serie_id +msgid "Organization serie" +msgstr "Serie Organización" + +#. module: github_connector_odoo +#: model:ir.model.fields.selection,name:github_connector_odoo.selection__odoo_module_version__odoo_type__other +msgid "Other" +msgstr "Otro" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_tree +msgid "Python Lib" +msgstr "Python Lib" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__lib_python_ids +msgid "Python Lib Dependencies" +msgstr "Dependencias Python Lib" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__lib_python_ids_description +msgid "Python Lib Dependencies (Text)" +msgstr "Dependencias Python Lib (Texto)" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_tree +msgid "Qty" +msgstr "Cantidad" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__description_rst +msgid "RST Description (Manifest)" +msgstr "Descripción RST (Manifiesto)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__description_rst +msgid "RST Description of the last Version" +msgstr "Descripción RST de la última versión" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__repository_id +msgid "Repository" +msgstr "Repositorio" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__repository_branch_id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__repository_branch_id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__repository_branch_id +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_search +msgid "Repository Branch" +msgstr "Rama de repositorio" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch__runbot_url +msgid "Runbot URL" +msgstr "URL Runbot" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_organization__runbot_url_pattern +msgid "Runbot URL Pattern" +msgstr "Patrón de URL de Runbot" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__scanned_files +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__scanned_files +msgid "Scanned Files" +msgstr "Archivos escaneados" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_tree +msgid "Serie" +msgstr "Serie" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__organization_serie_ids +msgid "Series" +msgstr "Series" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__organization_serie_ids_description +msgid "Series (Text)" +msgstr "Series (Texto)" + +#. module: github_connector_odoo +#: model:ir.model.fields,help:github_connector_odoo.field_github_repository_branch__module_paths +msgid "" +"Set here extra relative paths you want to scan to find modules. If not set, " +"root path will be scanned. One repository per line. Example:\n" +"./addons/\n" +"./openerp/addons/" +msgstr "" +"Establezca aquí las rutas relativas adicionales que desea escanear para " +"encontrar módulos. Si no se establece, se buscará la ruta raíz. Un " +"repositorio por línea. Ejemplo:\n" +"./addons/\n" +"./openerp/addons/" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__summary +msgid "Summary (Manifest)" +msgstr "Resumen (Manifiesto)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__technical_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__technical_name +msgid "Technical Name" +msgstr "Nombre técnico" + +#. module: github_connector_odoo +#: model:ir.model.fields,help:github_connector_odoo.field_odoo_module_version__technical_name +msgid "Technical Name of the Module (Folder name)." +msgstr "Nombre técnico del módulo (nombre de la carpeta)" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_form +msgid "Technical information (Manifest)" +msgstr "Información técnica (Manifiesto)" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_author_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_lib_bin_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_lib_python_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_license_tree +msgid "Total" +msgstr "Total" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__total_count +msgid "Total Count" +msgstr "Total recuento" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.odoo_module_version_rule_info_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +msgid "Total code" +msgstr "Total código" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.odoo_module_version_rule_info_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +msgid "Total documentation" +msgstr "Total documentación" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.odoo_module_version_rule_info_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +msgid "Total empty" +msgstr "Total vacío" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.odoo_module_version_rule_info_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +msgid "Total scanned" +msgstr "Total escaneados" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.odoo_module_version_rule_info_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +msgid "Total total" +msgstr "Total total" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_organization__runbot_parse_url +msgid "URL For Runbot Ids" +msgstr "URL Para Runbot Ids" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__version +msgid "Version (Manifest)" +msgstr "Versión (Manifiesto)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__module_version_ids +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_form +msgid "Versions" +msgstr "Versiones" + +#. module: github_connector_odoo +#: model:ir.model.fields.selection,name:github_connector_odoo.selection__odoo_module_version__odoo_type__verticalization +msgid "Vertical Solutions" +msgstr "Soluciones verticales" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__website +msgid "Website" +msgstr "Sitio web" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__website +msgid "Website (Manifest)" +msgstr "Sitio web (Manifiesto)" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_search +msgid "With Version" +msgstr "Con versión" diff --git a/github_connector_odoo/i18n/github_connector_odoo.pot b/github_connector_odoo/i18n/github_connector_odoo.pot new file mode 100644 index 00000000..8411db73 --- /dev/null +++ b/github_connector_odoo/i18n/github_connector_odoo.pot @@ -0,0 +1,807 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * github_connector_odoo +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.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: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__code_count +msgid "# Code" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__documentation_count +msgid "# Doc." +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__empty_count +msgid "# Empty" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__total_count +msgid "# Total" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_abstract_action_mixin +msgid "Abstract Action Mixin" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__active +msgid "Active" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__analysis_rule_id +msgid "Analysis Rule" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__analysis_rule_info_ids +msgid "Analysis Rule Info ids" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch__module_version_analysis_rule_info_ids +msgid "Analysis Rule Info ids (module version)" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__analysis_rule_id +msgid "Analysis Rule id" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_license_form +msgid "Archived" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__author +msgid "Author (Manifest)" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__author_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__author_ids +msgid "Authors" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__author_ids_description +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__author_ids_description +msgid "Authors (Text)" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__auto_install +msgid "Auto Install" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_form +msgid "Available for" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_tree +msgid "Bin Lib" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__lib_bin_ids +msgid "Bin Lib Dependencies" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__lib_bin_ids_description +msgid "Bin Lib Dependencies (Text)" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__category_id +msgid "Category" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.actions.server,name:github_connector_odoo.cron_clean_odoo_module_version_ir_actions_server +msgid "Clean Odoo Module Version" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_form +msgid "Code Analysis" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__code_count +msgid "Code Count" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__complete_name +msgid "Complete Name" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields.selection,name:github_connector_odoo.selection__odoo_module_version__odoo_type__connector +msgid "Connector" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__create_uid +msgid "Created by" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__create_date +msgid "Created on" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_organization__default_author_text +msgid "Default Author Text" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__dependency_module_ids +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_form +msgid "Dependencies" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__depends +msgid "Dependencies (Manifest)" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__description +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_license_form +msgid "Description" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_form +msgid "Descriptions" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__display_name +msgid "Display Name" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__documentation_count +msgid "Documentation Count" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__empty_count +msgid "Empty Count" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__external_dependencies +msgid "External Dependencies (Manifest)" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__full_module_path +msgid "Full Local Path to the module" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_github_analysis_rule +msgid "Github Analysis Rule" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_github_repository +msgid "Github Repository" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_github_repository_branch +msgid "Github Repository Branch" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__github_url +msgid "Github URL" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_github_organization +msgid "Github organization" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__group_id +msgid "Group" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_search +msgid "Group By" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__group_id +msgid "Group id" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__description_rst_html +msgid "HTML of the RST Description of the last Version" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__description_rst_html +msgid "HTML the RST Description" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_analysis_rule__has_odoo_addons +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch_rule_info_report__has_odoo_addons +msgid "Has odoo addons?" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__id +msgid "ID" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository__runbot_id_external +#: model:ir.model.fields,field_description:github_connector_odoo.field_wizard_create_repository__runbot_id_external +msgid "ID For Runbot" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__image +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__image +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__image +msgid "Icon Image" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__icon +msgid "Icon Path (Manifest)" +msgstr "" + +#. module: github_connector_odoo +#. odoo-python +#: code:addons/github_connector_odoo/models/odoo_module_version.py:0 +#, python-format +msgid "Incorrect RST Description" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_license_form +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_form +msgid "Information" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__write_date +msgid "Last Updated on" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__license_id +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_search +msgid "License" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__license +msgid "License (Manifest)" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields.selection,name:github_connector_odoo.selection__odoo_module_version__odoo_type__localization +msgid "Localization" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__maintainers +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__maintainers +msgid "Maintainers (Manifest)" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_analysis_rule__manifest_key_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch_rule_info_report__manifest_key_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__manifest_key_ids +msgid "Manifest keys" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__manifest_keys +msgid "Manifest keys (Manifest)" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_lib_bin_form +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_lib_python_form +msgid "Mod. Versions" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__module_id +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_search +msgid "Module" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch__module_paths +msgid "Module Paths" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__module_version_id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__module_version_id +msgid "Module Version" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__module_version_name +msgid "Module Version name" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch__module_version_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__module_version_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__module_version_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__module_version_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__module_version_ids +msgid "Module Versions" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__dependence_module_version_ids +msgid "Module Versions that depend on this module" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_module_version_rule_info_report +#: model:ir.ui.menu,name:github_connector_odoo.menu_action_odoo_module_version_rule_info_report +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.action_odoo_module_version_rule_info_report_graph +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.action_odoo_module_version_rule_info_report_pivot +msgid "Module version analysis rule" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__module_ids +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_kanban +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_oca_author_form +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_license_form +msgid "Modules" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_module_version_by_serie +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_module_version_by_serie +msgid "Modules by Serie" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__name +msgid "Name" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.constraint,message:github_connector_odoo.constraint_odoo_license_name_uniq +msgid "Name already exists !" +msgstr "" + +#. module: github_connector_odoo +#. odoo-python +#: code:addons/github_connector_odoo/models/odoo_module.py:0 +#: code:addons/github_connector_odoo/models/odoo_module_version.py:0 +#, python-format +msgid "No Version Found" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch__module_version_qty +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__module_version_qty +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__module_version_qty +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__module_version_qty +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__module_version_qty +msgid "Number of Module Versions" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__dependence_module_version_qty +msgid "Number of Module Versions that depend on this module" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__module_qty +msgid "Number of Modules" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_kanban +msgid "Number of modules" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_author +msgid "Odoo Author" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_lib_bin +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_lib_bin +msgid "Odoo Bin Libs" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_category +msgid "Odoo Category" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_lib_bin +msgid "Odoo Lib Bin" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_lib_python +msgid "Odoo Lib Python" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_license +msgid "Odoo License" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_manifest_key +msgid "Odoo Manifest Key" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_module +msgid "Odoo Module" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_author +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_author +msgid "Odoo Module Authors" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_license +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_license +msgid "Odoo Module Licenses" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_module_version +msgid "Odoo Module Version" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_module_version_rule_info_report +msgid "Odoo Module Version Rule Info Report" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_module_version +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_module_version +msgid "Odoo Module Versions" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_module_version_rule_info +msgid "Odoo Module Vesion Rule Info" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_module +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_module +msgid "Odoo Modules" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_lib_python +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_lib_python +msgid "Odoo Python Libs" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_organization_form +msgid "Odoo Settings" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo +msgid "Odoo Source Code" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__odoo_type +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_search +msgid "Odoo Type" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_kanban +msgid "Open on github" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__organization_serie_id +msgid "Organization Serie" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__organization_serie_id +msgid "Organization serie" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields.selection,name:github_connector_odoo.selection__odoo_module_version__odoo_type__other +msgid "Other" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_tree +msgid "Python Lib" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__lib_python_ids +msgid "Python Lib Dependencies" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__lib_python_ids_description +msgid "Python Lib Dependencies (Text)" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_tree +msgid "Qty" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__description_rst +msgid "RST Description (Manifest)" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__description_rst +msgid "RST Description of the last Version" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__repository_id +msgid "Repository" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__repository_branch_id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__repository_branch_id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__repository_branch_id +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_search +msgid "Repository Branch" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch__runbot_url +msgid "Runbot URL" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_organization__runbot_url_pattern +msgid "Runbot URL Pattern" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__scanned_files +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__scanned_files +msgid "Scanned Files" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_tree +msgid "Serie" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__organization_serie_ids +msgid "Series" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__organization_serie_ids_description +msgid "Series (Text)" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,help:github_connector_odoo.field_github_repository_branch__module_paths +msgid "" +"Set here extra relative paths you want to scan to find modules. If not set, root path will be scanned. One repository per line. Example:\n" +"./addons/\n" +"./openerp/addons/" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__summary +msgid "Summary (Manifest)" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__technical_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__technical_name +msgid "Technical Name" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,help:github_connector_odoo.field_odoo_module_version__technical_name +msgid "Technical Name of the Module (Folder name)." +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_form +msgid "Technical information (Manifest)" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_author_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_lib_bin_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_lib_python_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_license_tree +msgid "Total" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__total_count +msgid "Total Count" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.odoo_module_version_rule_info_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +msgid "Total code" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.odoo_module_version_rule_info_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +msgid "Total documentation" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.odoo_module_version_rule_info_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +msgid "Total empty" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.odoo_module_version_rule_info_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +msgid "Total scanned" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.odoo_module_version_rule_info_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +msgid "Total total" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_organization__runbot_parse_url +msgid "URL For Runbot Ids" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__version +msgid "Version (Manifest)" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__module_version_ids +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_form +msgid "Versions" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields.selection,name:github_connector_odoo.selection__odoo_module_version__odoo_type__verticalization +msgid "Vertical Solutions" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__website +msgid "Website" +msgstr "" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__website +msgid "Website (Manifest)" +msgstr "" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_search +msgid "With Version" +msgstr "" diff --git a/github_connector_odoo/i18n/it.po b/github_connector_odoo/i18n/it.po new file mode 100644 index 00000000..51c73bc4 --- /dev/null +++ b/github_connector_odoo/i18n/it.po @@ -0,0 +1,830 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * github_connector_odoo +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-03-20 16:33+0000\n" +"Last-Translator: mymage \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" +"X-Generator: Weblate 4.17\n" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__code_count +msgid "# Code" +msgstr "N° codice" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__documentation_count +msgid "# Doc." +msgstr "N° doc." + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__empty_count +msgid "# Empty" +msgstr "N° vuoti" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__total_count +msgid "# Total" +msgstr "N° totali" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_abstract_action_mixin +msgid "Abstract Action Mixin" +msgstr "Mixin azione astratto" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__active +msgid "Active" +msgstr "Attiva" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__analysis_rule_id +msgid "Analysis Rule" +msgstr "Regola analisi" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__analysis_rule_info_ids +msgid "Analysis Rule Info ids" +msgstr "ID informazione regola analisi" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch__module_version_analysis_rule_info_ids +msgid "Analysis Rule Info ids (module version)" +msgstr "ID informazione regola analisi (versione modulo)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__analysis_rule_id +msgid "Analysis Rule id" +msgstr "ID regola analisi" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_license_form +msgid "Archived" +msgstr "In archivio" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__author +msgid "Author (Manifest)" +msgstr "Autore (manifest)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__author_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__author_ids +msgid "Authors" +msgstr "Autori" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__author_ids_description +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__author_ids_description +msgid "Authors (Text)" +msgstr "Autori (testo)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__auto_install +msgid "Auto Install" +msgstr "Auto install" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_form +msgid "Available for" +msgstr "Disponibile per" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_tree +msgid "Bin Lib" +msgstr "Bin Lib" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__lib_bin_ids +msgid "Bin Lib Dependencies" +msgstr "Dipendenza bin lib" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__lib_bin_ids_description +msgid "Bin Lib Dependencies (Text)" +msgstr "Dipendenze bin lib (testo)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__category_id +msgid "Category" +msgstr "Categoria" + +#. module: github_connector_odoo +#: model:ir.actions.server,name:github_connector_odoo.cron_clean_odoo_module_version_ir_actions_server +#: model:ir.cron,cron_name:github_connector_odoo.cron_clean_odoo_module_version +msgid "Clean Odoo Module Version" +msgstr "Pulisci versione modulo Odoo" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_form +msgid "Code Analysis" +msgstr "Analisi codice" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__code_count +msgid "Code Count" +msgstr "Conteggio codice" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__complete_name +msgid "Complete Name" +msgstr "Nome completo" + +#. module: github_connector_odoo +#: model:ir.model.fields.selection,name:github_connector_odoo.selection__odoo_module_version__odoo_type__connector +msgid "Connector" +msgstr "Connettore" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__create_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__create_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_organization__default_author_text +msgid "Default Author Text" +msgstr "Testo autore predefinito" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__dependency_module_ids +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_form +msgid "Dependencies" +msgstr "Dipendenze" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__depends +msgid "Dependencies (Manifest)" +msgstr "Dipendenze (manifest)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__description +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_license_form +msgid "Description" +msgstr "Descrizione" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_form +msgid "Descriptions" +msgstr "Descrizioni" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__display_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__documentation_count +msgid "Documentation Count" +msgstr "Conteggio documentazione" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__empty_count +msgid "Empty Count" +msgstr "Conteggio vuoti" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__external_dependencies +msgid "External Dependencies (Manifest)" +msgstr "Dipendenze esterne (manifest)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__full_module_path +msgid "Full Local Path to the module" +msgstr "Percorso locale completo al modulo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_github_analysis_rule +msgid "Github Analysis Rule" +msgstr "Regola analisi GitHub" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_github_repository +msgid "Github Repository" +msgstr "Repository GitHub" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_github_repository_branch +msgid "Github Repository Branch" +msgstr "Branch repository GitHub" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__github_url +msgid "Github URL" +msgstr "URL GitHub" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_github_organization +msgid "Github organization" +msgstr "Organizzazione GitHub" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__group_id +msgid "Group" +msgstr "Gruppo" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_search +msgid "Group By" +msgstr "Raggruppa per" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__group_id +msgid "Group id" +msgstr "ID gruppo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__description_rst_html +msgid "HTML of the RST Description of the last Version" +msgstr "HTML della descrizione RST dell'ultima versione" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__description_rst_html +msgid "HTML the RST Description" +msgstr "HTML della descrizione RST" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_analysis_rule__has_odoo_addons +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch_rule_info_report__has_odoo_addons +msgid "Has odoo addons?" +msgstr "Ha addons Odoo?" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__id +msgid "ID" +msgstr "ID" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository__runbot_id_external +#: model:ir.model.fields,field_description:github_connector_odoo.field_wizard_create_repository__runbot_id_external +msgid "ID For Runbot" +msgstr "ID per Runbot" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__image +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__image +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__image +msgid "Icon Image" +msgstr "Immagine icona" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__icon +msgid "Icon Path (Manifest)" +msgstr "Percorso icona (manifest)" + +#. module: github_connector_odoo +#. odoo-python +#: code:addons/github_connector_odoo/models/odoo_module_version.py:0 +#, python-format +msgid "Incorrect RST Description" +msgstr "Descrizione RST errata" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_license_form +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_form +msgid "Information" +msgstr "Informazione" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info____last_update +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__write_uid +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__write_date +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__license_id +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_search +msgid "License" +msgstr "Licenza" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__license +msgid "License (Manifest)" +msgstr "Licenza (manifest)" + +#. module: github_connector_odoo +#: model:ir.model.fields.selection,name:github_connector_odoo.selection__odoo_module_version__odoo_type__localization +msgid "Localization" +msgstr "Localizzazione" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__maintainers +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__maintainers +msgid "Maintainers (Manifest)" +msgstr "Maintainer (manifest)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_analysis_rule__manifest_key_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch_rule_info_report__manifest_key_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__manifest_key_ids +msgid "Manifest keys" +msgstr "Chiavi manifest" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__manifest_keys +msgid "Manifest keys (Manifest)" +msgstr "Chiavi manifest (manifest)" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_lib_bin_form +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_lib_python_form +msgid "Mod. Versions" +msgstr "Versioni modulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__module_id +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_search +msgid "Module" +msgstr "Modulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch__module_paths +msgid "Module Paths" +msgstr "Percorso modulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__module_version_id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__module_version_id +msgid "Module Version" +msgstr "Versione modulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__module_version_name +msgid "Module Version name" +msgstr "Nome versione modulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch__module_version_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__module_version_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__module_version_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__module_version_ids +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__module_version_ids +msgid "Module Versions" +msgstr "Versioni modulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__dependence_module_version_ids +msgid "Module Versions that depend on this module" +msgstr "Versioni modulo che dipendono da questo modulo" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_module_version_rule_info_report +#: model:ir.ui.menu,name:github_connector_odoo.menu_action_odoo_module_version_rule_info_report +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.action_odoo_module_version_rule_info_report_graph +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.action_odoo_module_version_rule_info_report_pivot +msgid "Module version analysis rule" +msgstr "Regola analisi versione modulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__module_ids +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_kanban +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_oca_author_form +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_license_form +msgid "Modules" +msgstr "Moduli" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_module_version_by_serie +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_module_version_by_serie +msgid "Modules by Serie" +msgstr "Moduli per serie" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_category__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_manifest_key__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__name +msgid "Name" +msgstr "Nome" + +#. module: github_connector_odoo +#: model:ir.model.constraint,message:github_connector_odoo.constraint_odoo_license_name_uniq +msgid "Name already exists !" +msgstr "Il nome esiste già!" + +#. module: github_connector_odoo +#. odoo-python +#: code:addons/github_connector_odoo/models/odoo_module.py:0 +#: code:addons/github_connector_odoo/models/odoo_module_version.py:0 +#, python-format +msgid "No Version Found" +msgstr "Nessuna versione trovata" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch__module_version_qty +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_bin__module_version_qty +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_lib_python__module_version_qty +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__module_version_qty +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__module_version_qty +msgid "Number of Module Versions" +msgstr "Numero di versioni modulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__dependence_module_version_qty +msgid "Number of Module Versions that depend on this module" +msgstr "Numero di versioni modulo che dipendono da questo modulo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_author__module_qty +msgid "Number of Modules" +msgstr "Numero di moduli" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_kanban +msgid "Number of modules" +msgstr "Numero di moduli" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_author +msgid "Odoo Author" +msgstr "Autore Odoo" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_lib_bin +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_lib_bin +msgid "Odoo Bin Libs" +msgstr "Bin lib Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_category +msgid "Odoo Category" +msgstr "Categoria Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_lib_bin +msgid "Odoo Lib Bin" +msgstr "Bon lib Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_lib_python +msgid "Odoo Lib Python" +msgstr "Lib Python Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_license +msgid "Odoo License" +msgstr "Licenza Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_manifest_key +msgid "Odoo Manifest Key" +msgstr "Chiave manifest Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_module +msgid "Odoo Module" +msgstr "Modulo Odoo" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_author +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_author +msgid "Odoo Module Authors" +msgstr "Autori modulo Odoo" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_license +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_license +msgid "Odoo Module Licenses" +msgstr "Licenze modulo Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_module_version +msgid "Odoo Module Version" +msgstr "Verisione modulo Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_module_version_rule_info_report +msgid "Odoo Module Version Rule Info Report" +msgstr "resoconto informazioni regola versione modulo Odoo" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_module_version +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_module_version +msgid "Odoo Module Versions" +msgstr "Versioni modulo Odoo" + +#. module: github_connector_odoo +#: model:ir.model,name:github_connector_odoo.model_odoo_module_version_rule_info +msgid "Odoo Module Vesion Rule Info" +msgstr "Informazioni regola versione modulo Odoo" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_module +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_module +msgid "Odoo Modules" +msgstr "Moduli Odoo" + +#. module: github_connector_odoo +#: model:ir.actions.act_window,name:github_connector_odoo.action_odoo_lib_python +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo_lib_python +msgid "Odoo Python Libs" +msgstr "Python lib Odoo" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_organization_form +msgid "Odoo Settings" +msgstr "Impostazioni Odoo" + +#. module: github_connector_odoo +#: model:ir.ui.menu,name:github_connector_odoo.menu_odoo +msgid "Odoo Source Code" +msgstr "Codice sorgente Odoo" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__odoo_type +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_search +msgid "Odoo Type" +msgstr "Tipo Odoo" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_kanban +msgid "Open on github" +msgstr "Apri su GitHub" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__organization_serie_id +msgid "Organization Serie" +msgstr "Serie organizzazione" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__organization_serie_id +msgid "Organization serie" +msgstr "Serie organizzazione" + +#. module: github_connector_odoo +#: model:ir.model.fields.selection,name:github_connector_odoo.selection__odoo_module_version__odoo_type__other +msgid "Other" +msgstr "Altro" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_tree +msgid "Python Lib" +msgstr "Lib Python" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__lib_python_ids +msgid "Python Lib Dependencies" +msgstr "Dipendenza lib Python" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__lib_python_ids_description +msgid "Python Lib Dependencies (Text)" +msgstr "Dipendenze lib Python (testo)" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_tree +msgid "Qty" +msgstr "Q.tà" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__description_rst +msgid "RST Description (Manifest)" +msgstr "Descrizione RST (testo)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__description_rst +msgid "RST Description of the last Version" +msgstr "Descrizione RST dell'ultima versione" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__repository_id +msgid "Repository" +msgstr "Repository" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__repository_branch_id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__repository_branch_id +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__repository_branch_id +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_search +msgid "Repository Branch" +msgstr "Branch repository" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_repository_branch__runbot_url +msgid "Runbot URL" +msgstr "URL Runbot" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_organization__runbot_url_pattern +msgid "Runbot URL Pattern" +msgstr "Schema URL Runbot" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info__scanned_files +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__scanned_files +msgid "Scanned Files" +msgstr "File scansionati" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_tree +msgid "Serie" +msgstr "Serie" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__organization_serie_ids +msgid "Series" +msgstr "Serie" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__organization_serie_ids_description +msgid "Series (Text)" +msgstr "Serie (testo)" + +#. module: github_connector_odoo +#: model:ir.model.fields,help:github_connector_odoo.field_github_repository_branch__module_paths +msgid "" +"Set here extra relative paths you want to scan to find modules. If not set, root path will be scanned. One repository per line. Example:\n" +"./addons/\n" +"./openerp/addons/" +msgstr "" +"Impostare qui i percorsi relativi che si vogliono scansionare per cercare " +"moduli. Se non impostato, verrà scansionato il percorso radice. Un " +"repository per riga. Esempio:\n" +"./addons/\n" +"./openerp/addons/" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__summary +msgid "Summary (Manifest)" +msgstr "Riepilogo (manifest)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__technical_name +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__technical_name +msgid "Technical Name" +msgstr "Nome tecnico" + +#. module: github_connector_odoo +#: model:ir.model.fields,help:github_connector_odoo.field_odoo_module_version__technical_name +msgid "Technical Name of the Module (Folder name)." +msgstr "Nome tecnico del modulo (nome della cartella)." + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_version_form +msgid "Technical information (Manifest)" +msgstr "Informazioni tecniche (manifest)" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_author_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_lib_bin_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_lib_python_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_license_tree +msgid "Total" +msgstr "Totale" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version_rule_info_report__total_count +msgid "Total Count" +msgstr "Conteggio totale" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.odoo_module_version_rule_info_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +msgid "Total code" +msgstr "Totale codice" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.odoo_module_version_rule_info_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +msgid "Total documentation" +msgstr "Totale documentazione" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.odoo_module_version_rule_info_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +msgid "Total empty" +msgstr "Totale vuoti" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.odoo_module_version_rule_info_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +msgid "Total scanned" +msgstr "Totale scansionati" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.odoo_module_version_rule_info_tree +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_github_repository_branch_form +msgid "Total total" +msgstr "Totale totali" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_github_organization__runbot_parse_url +msgid "URL For Runbot Ids" +msgstr "ID degli URL per il Runbot" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__version +msgid "Version (Manifest)" +msgstr "Versione (manifest)" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module__module_version_ids +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_form +msgid "Versions" +msgstr "Versioni" + +#. module: github_connector_odoo +#: model:ir.model.fields.selection,name:github_connector_odoo.selection__odoo_module_version__odoo_type__verticalization +msgid "Vertical Solutions" +msgstr "Soluzione verticale" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_license__website +msgid "Website" +msgstr "Sito web" + +#. module: github_connector_odoo +#: model:ir.model.fields,field_description:github_connector_odoo.field_odoo_module_version__website +msgid "Website (Manifest)" +msgstr "Sito web (manifest)" + +#. module: github_connector_odoo +#: model_terms:ir.ui.view,arch_db:github_connector_odoo.view_odoo_module_search +msgid "With Version" +msgstr "Con versione" diff --git a/github_connector_odoo/models/__init__.py b/github_connector_odoo/models/__init__.py new file mode 100644 index 00000000..918fee6b --- /dev/null +++ b/github_connector_odoo/models/__init__.py @@ -0,0 +1,15 @@ +from . import abstract_action_mixin +from . import odoo_author +from . import odoo_category +from . import odoo_license +from . import odoo_lib_bin +from . import odoo_lib_python +from . import odoo_manifest_key + +from . import odoo_module +from . import odoo_module_version + +from . import github_analysis_rule +from . import github_organization +from . import github_repository +from . import github_repository_branch diff --git a/github_connector_odoo/models/abstract_action_mixin.py b/github_connector_odoo/models/abstract_action_mixin.py new file mode 100644 index 00000000..f1661f2c --- /dev/null +++ b/github_connector_odoo/models/abstract_action_mixin.py @@ -0,0 +1,18 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import models + + +class AbstractActionMixin(models.AbstractModel): + _name = "abstract.action.mixin" + _description = "Abstract Action Mixin" + + def action_open(self): + self.ensure_one() + action = self.env["ir.actions.act_window"]._for_xml_id( + f"github_connector_odoo.{self._context.get('xml_id')}" + ) + action["context"] = dict(self.env.context) + action["context"].pop("group_by", None) + action["context"]["search_default_" + self._context.get("field_name")] = self.id + return action diff --git a/github_connector_odoo/models/github_analysis_rule.py b/github_connector_odoo/models/github_analysis_rule.py new file mode 100644 index 00000000..058abe62 --- /dev/null +++ b/github_connector_odoo/models/github_analysis_rule.py @@ -0,0 +1,27 @@ +# Copyright 2021 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + + +from odoo import fields, models + + +class GithubAnalysisRule(models.Model): + _inherit = "github.analysis.rule" + + has_odoo_addons = fields.Boolean(string="Has odoo addons?") + manifest_key_ids = fields.Many2many( + comodel_name="odoo.manifest.key", string="Manifest keys" + ) + + def _get_matches(self, path): + """ + Override according to has_odoo_addons rules + """ + if self.has_odoo_addons: + spec = self._set_spec(["*"]) + file_paths = [] + for path_item in spec.match_tree(path): + file_paths.append(f"{path}/{path_item}") + spec = self._set_spec(self.paths.splitlines()) + return spec.match_files(file_paths) + return super()._get_matches(path) diff --git a/github_connector_odoo/models/github_organization.py b/github_connector_odoo/models/github_organization.py new file mode 100644 index 00000000..65c9b81a --- /dev/null +++ b/github_connector_odoo/models/github_organization.py @@ -0,0 +1,14 @@ +# Copyright (C) 2016-Today: Odoo Community Association (OCA) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + + +from odoo import fields, models + + +class GithubOrganization(models.Model): + _inherit = "github.organization" + + runbot_parse_url = fields.Char(string="URL For Runbot Ids") + default_author_text = fields.Char() + runbot_url_pattern = fields.Char(string="Runbot URL Pattern") diff --git a/github_connector_odoo/models/github_repository.py b/github_connector_odoo/models/github_repository.py new file mode 100644 index 00000000..2862f025 --- /dev/null +++ b/github_connector_odoo/models/github_repository.py @@ -0,0 +1,36 @@ +# Copyright (C) 2016-Today: Odoo Community Association (OCA) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from collections import defaultdict + +import requests + +from odoo import api, fields, models + + +class GithubRepository(models.Model): + _inherit = "github.repository" + + runbot_id_external = fields.Integer( + string="ID For Runbot", + readonly=True, + store=True, + compute="_compute_runbot_id_external", + ) + + # Compute Section + @api.depends("organization_id.runbot_parse_url") + def _compute_runbot_id_external(self): + url_done = defaultdict(list) + for repository in self: + url_done[repository.organization_id].append(repository) + + for organization_id, repositories in url_done.items(): + if organization_id.runbot_parse_url: + req = requests.get(organization_id.runbot_parse_url, timeout=10) + runbot_list = req.content.decode().split("\n") + for item in runbot_list: + for repository in repositories: + if item.endswith(repository.complete_name): + repository.runbot_id_external = item.split("|")[0] diff --git a/github_connector_odoo/models/github_repository_branch.py b/github_connector_odoo/models/github_repository_branch.py new file mode 100644 index 00000000..ac275d14 --- /dev/null +++ b/github_connector_odoo/models/github_repository_branch.py @@ -0,0 +1,244 @@ +# Copyright (C) 2016-Today: Odoo Community Association (OCA) +# Copyright 2020-2023 Tecnativa - Víctor Martínez +# Copyright 2024 Tecnativa - Pedro M. Baeza +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import logging +import os + +from odoo import api, fields, models +from odoo.modules.module import get_manifest + +import odoo.addons + +# Hard define this value to make this module working with or without +# the patch (that backports V10 manifests analysis code. +MANIFEST_NAMES = ("__manifest__.py", "__openerp__.py") + +_logger = logging.getLogger(__name__) + + +class GithubRepositoryBranch(models.Model): + _inherit = ["github.repository.branch", "abstract.action.mixin"] + _name = "github.repository.branch" + + module_paths = fields.Text( + help="Set here extra relative paths" + " you want to scan to find modules. If not set, root path will be" + " scanned. One repository per line. Example:\n" + "./addons/\n" + "./openerp/addons/", + ) + module_version_ids = fields.One2many( + comodel_name="odoo.module.version", + inverse_name="repository_branch_id", + string="Module Versions", + ) + module_version_qty = fields.Integer( + string="Number of Module Versions", compute="_compute_module_version_qty" + ) + runbot_url = fields.Char(string="Runbot URL", compute="_compute_runbot_url") + module_version_analysis_rule_info_ids = fields.Many2many( + string="Analysis Rule Info ids (module version)", + comodel_name="odoo.module.version.rule.info", + compute="_compute_module_version_analysis_rule_info_ids", + relation="rule_info_module_version_rel", + column1="repository_branch_id", + column2="module_version_id", + readonly=True, + ) + + @api.depends("module_version_ids") + def _compute_module_version_analysis_rule_info_ids(self): + self.ensure_one() + self.module_version_analysis_rule_info_ids = self.env[ + "odoo.module.version.rule.info" + ].search( + [ + ("module_version_id", "in", self.module_version_ids.ids), + ("repository_branch_id", "=", self.id), + ] + ) + + # Compute Section + @api.depends( + "name", "repository_id.runbot_id_external", "organization_id.runbot_url_pattern" + ) + def _compute_runbot_url(self): + for branch in self: + if not branch.repository_id.runbot_id_external: + branch.runbot_url = False + else: + branch.runbot_url = branch.organization_id.runbot_url_pattern.format( + runbot_id_external=str(branch.repository_id.runbot_id_external), + branch_name=branch.name, + ) + + @api.depends("module_version_ids", "module_version_ids.repository_branch_id") + def _compute_module_version_qty(self): + for repository_branch in self: + repository_branch.module_version_qty = len( + repository_branch.module_version_ids + ) + + # Custom Section + @api.model + def _set_state_to_analyze(self): + """function called when the module is installed to set all branches + to analyze again. + """ + branches = self.search([("state", "=", "analyzed")]) + branches.write({"state": "to_analyze"}) + + def _get_module_paths(self): + # Compute path(s) to analyze + self.ensure_one() + if self.module_paths: + paths = [] + for path in self.module_paths.split("\n"): + if path.strip(): + paths.append(os.path.join(self.local_path, path)) + else: + paths = [self.local_path] + return paths + + def analyze_code_one(self): + # Change log level to avoid warning, when parsing odoo manifests + logger1 = logging.getLogger("openerp.modules.module") + logger2 = logging.getLogger("openerp.addons.base.module.module") + currentLevel1 = logger1.level + currentLevel2 = logger2.level + logger1.setLevel(logging.ERROR) + logger2.setLevel(logging.ERROR) + + try: + paths = self._get_module_paths() + # Scan each path, if exists + for path in paths: + if not os.path.exists(path): + _logger.warning( + "Unable to analyse %s. Source code not found.", path + ) + else: + # Analyze folders and create module versions + _logger.info("Analyzing repository %s ...", path) + for module_name in self.listdir(path): + self._analyze_module_name(path, module_name) + finally: + # Reset Original level for module logger + logger1.setLevel(currentLevel1) + logger2.setLevel(currentLevel2) + return super().analyze_code_one() + + # Copy Paste from Odoo Core + # This function is for the time being in another function. + # (Ref: openerp/modules/module.py) + def listdir(self, directory): + def clean(name): + name = os.path.basename(name) + if name[-4:] == ".zip": + name = name[:-4] + return name + + def is_really_module(name): + for mname in MANIFEST_NAMES: + if os.path.isfile(os.path.join(directory, name, mname)): + return True + + return map(clean, filter(is_really_module, os.listdir(directory))) + + def _process_analysis_rule_info(self, rule, cloc_response): + """Overwrite this method so that rules that have addons are processed by each + module to obtain information from each one.""" + if rule.has_odoo_addons: + for module_version in self.module_version_ids: + self._process_analysis_rule_info_module_version( + rule, module_version, cloc_response + ) + else: + return super()._process_analysis_rule_info(rule, cloc_response) + + def _process_analysis_rule_info_module_version( + self, rule, module_version, cloc_response + ): + """Process to specific rule + module version (Create or update info record).""" + analysis_rule_item = module_version.analysis_rule_info_ids.filtered( + lambda x: x.analysis_rule_id == rule and x.repository_branch_id == self + ) + vals = self._prepare_analysis_module_version_rule_info_vals( + rule, module_version, cloc_response + ) + # Do not create lines if no file has been scanned + if vals["scanned_files"] == 0: + return False + if analysis_rule_item: + analysis_rule_item.write(vals) + else: + module_version.analysis_rule_info_ids = [(0, 0, vals)] + + def _prepare_analysis_module_version_rule_info_vals( + self, rule, module_version, cloc_response + ): + """Prepare the analysis information values of a rule + module version.""" + res = self._operation_analysis_rule_by_module_version( + rule, module_version, cloc_response + ) + return { + "analysis_rule_id": rule.id, + "repository_branch_id": self.id, + "module_version_id": module_version.id, + "code_count": res["code"], + "documentation_count": res["documentation"], + "empty_count": res["empty"], + "scanned_files": len(res["paths"]), + } + + def _operation_analysis_rule_by_module_version( + self, rule, module_version, cloc_response + ): + """This function (similar to _operation_analysis_rule() of github_connector) + processes the result of cloc and defines the values for the corresponding rule + and module version. + The matchs that are used have the complete path, for that reason we set + path=False is passed to the _action_analysis_process_cloc() method.""" + matchs = [] + full_path = module_version.full_module_path + if rule.has_odoo_addons and rule.manifest_key_ids: + manifest_keys_find = module_version.manifest_key_ids.filtered( + lambda x: x.id in rule.manifest_key_ids.ids + ) + odoo.addons.__path__.append(full_path) # HACK: to get file_open working + module_info = get_manifest(module_version.technical_name, full_path) + odoo.addons.__path__.remove(full_path) + spec = rule._set_spec(rule.paths.splitlines()) + for manifest_key_find in manifest_keys_find: + if manifest_key_find.name in module_info: + key_paths = module_info[manifest_key_find.name] + path_items = [] + for key_path in key_paths: + path_items.append(f"{full_path}/{key_path}") + matchs += spec.match_files(path_items) + else: + matchs = rule._get_matches(full_path) + return self._action_analysis_process_cloc(False, matchs, cloc_response) + + def _analyze_module_name(self, path, module_name): + self.ensure_one() + module_version_obj = self.env["odoo.module.version"] + try: + full_module_path = os.path.join(path, module_name) + odoo.addons.__path__.append(path) # HACK: to get file_open working + module_info = get_manifest(module_name, full_module_path) + odoo.addons.__path__.remove(path) + # Create module version, if the module is installable + # in the serie + if module_info.get("installable", False): + module_info["technical_name"] = module_name + module_version_obj.create_or_update_from_manifest( + module_info, self, full_module_path + ) + except Exception as e: + _logger.error( + "Cannot process module with name %s, error " "is: %s", module_name, e + ) diff --git a/github_connector_odoo/models/odoo_author.py b/github_connector_odoo/models/odoo_author.py new file mode 100644 index 00000000..d3a6792e --- /dev/null +++ b/github_connector_odoo/models/odoo_author.py @@ -0,0 +1,47 @@ +# Copyright (C) 2016-Today: Odoo Community Association (OCA) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class OdooAuthor(models.Model): + _inherit = "abstract.action.mixin" + _name = "odoo.author" + _description = "Odoo Author" + _order = "module_qty desc, name" + + # Column Section + name = fields.Char(store=True, readonly=True, index=True) + module_version_ids = fields.Many2many( + string="Module Versions", + comodel_name="odoo.module.version", + relation="github_module_version_author_rel", + column1="author_id", + column2="module_version_id", + readonly=True, + ) + module_ids = fields.Many2many( + string="Modules", + comodel_name="odoo.module", + relation="github_module_author_rel", + column1="author_id", + column2="module_id", + readonly=True, + ) + module_qty = fields.Integer( + string="Number of Modules", compute="_compute_module_qty", store=True + ) + + @api.depends("module_ids.author_ids") + def _compute_module_qty(self): + for author in self: + author.module_qty = len(author.module_ids) + + # Custom Section + @api.model + def create_if_not_exist(self, name): + author = self.search([("name", "=", name)]) + if not author: + author = self.create({"name": name}) + return author diff --git a/github_connector_odoo/models/odoo_category.py b/github_connector_odoo/models/odoo_category.py new file mode 100644 index 00000000..b2cf18ef --- /dev/null +++ b/github_connector_odoo/models/odoo_category.py @@ -0,0 +1,12 @@ +# Copyright (C) 2016-Today: Odoo Community Association (OCA) +# @author: Oscar Alcala (https://twitter.com/oscarolar) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class OdooCategory(models.Model): + _name = "odoo.category" + _description = "Odoo Category" + + name = fields.Char() diff --git a/github_connector_odoo/models/odoo_lib_bin.py b/github_connector_odoo/models/odoo_lib_bin.py new file mode 100644 index 00000000..4e6bf064 --- /dev/null +++ b/github_connector_odoo/models/odoo_lib_bin.py @@ -0,0 +1,42 @@ +# Copyright (C) 2016-Today: Odoo Community Association (OCA) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class OdooLibBin(models.Model): + _inherit = "abstract.action.mixin" + _name = "odoo.lib.bin" + _description = "Odoo Lib Bin" + _order = "module_version_qty desc" + + # Column Section + name = fields.Char(index=True, required=True, readonly=True) + module_version_ids = fields.Many2many( + comodel_name="odoo.module.version", + string="Module Versions", + relation="module_version_lib_bin_rel", + column1="lib_bin_id", + column2="module_version_id", + readonly=True, + ) + module_version_qty = fields.Integer( + string="Number of Module Versions", + compute="_compute_module_version_qty", + store=True, + ) + + # Compute Section + @api.depends("module_version_ids", "module_version_ids.lib_bin_ids") + def _compute_module_version_qty(self): + for lib_bin in self: + lib_bin.module_version_qty = len(lib_bin.module_version_ids) + + # Custom Section + @api.model + def create_if_not_exist(self, name): + lib_bin = self.search([("name", "=", name)]) + if not lib_bin: + lib_bin = self.create({"name": name}) + return lib_bin diff --git a/github_connector_odoo/models/odoo_lib_python.py b/github_connector_odoo/models/odoo_lib_python.py new file mode 100644 index 00000000..da7f66d8 --- /dev/null +++ b/github_connector_odoo/models/odoo_lib_python.py @@ -0,0 +1,42 @@ +# Copyright (C) 2016-Today: Odoo Community Association (OCA) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class OdooLibPython(models.Model): + _inherit = "abstract.action.mixin" + _name = "odoo.lib.python" + _description = "Odoo Lib Python" + _order = "module_version_qty desc" + + # Column Section + name = fields.Char(index=True, required=True, readonly=True) + module_version_ids = fields.Many2many( + comodel_name="odoo.module.version", + string="Module Versions", + relation="module_version_lib_python_rel", + column1="lib_python_id", + column2="module_version_id", + readonly=True, + ) + module_version_qty = fields.Integer( + string="Number of Module Versions", + compute="_compute_module_version_qty", + store=True, + ) + + # Compute Section + @api.depends("module_version_ids", "module_version_ids.lib_python_ids") + def _compute_module_version_qty(self): + for lib_python in self: + lib_python.module_version_qty = len(lib_python.module_version_ids) + + # Custom Section + @api.model + def create_if_not_exist(self, name): + lib_python = self.search([("name", "=", name)]) + if not lib_python: + lib_python = self.create({"name": name}) + return lib_python diff --git a/github_connector_odoo/models/odoo_license.py b/github_connector_odoo/models/odoo_license.py new file mode 100644 index 00000000..9ce51e9a --- /dev/null +++ b/github_connector_odoo/models/odoo_license.py @@ -0,0 +1,48 @@ +# Copyright (C) 2016-Today: Odoo Community Association (OCA) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class OdooLicense(models.Model): + _inherit = "abstract.action.mixin" + _name = "odoo.license" + _description = "Odoo License" + _order = "name" + + # Column Section + name = fields.Char(index=True, required=True, readonly=True) + module_version_ids = fields.One2many( + comodel_name="odoo.module.version", + inverse_name="license_id", + string="Module Versions", + ) + module_version_qty = fields.Integer( + string="Number of Module Versions", + compute="_compute_module_version_qty", + store=True, + ) + website = fields.Char() + image = fields.Binary(string="Icon Image", attachment=True) + description = fields.Text() + active = fields.Boolean(default=True) + + # Constrains Section + _sql_constraints = [ + ("name_uniq", "unique (name)", "Name already exists !"), + ] + + # Compute Section + @api.depends("module_version_ids.license_id") + def _compute_module_version_qty(self): + for module in self: + module.module_version_qty = len(module.module_version_ids) + + # Custom Section + @api.model + def create_if_not_exist(self, name): + module = self.search([("name", "=", name)]) + if not module: + module = self.create({"name": name}) + return module diff --git a/github_connector_odoo/models/odoo_manifest_key.py b/github_connector_odoo/models/odoo_manifest_key.py new file mode 100644 index 00000000..c8c517d0 --- /dev/null +++ b/github_connector_odoo/models/odoo_manifest_key.py @@ -0,0 +1,18 @@ +# Copyright 2021 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class OdooManifestKey(models.Model): + _name = "odoo.manifest.key" + _description = "Odoo Manifest Key" + + name = fields.Char() + + @api.model + def create_if_not_exist(self, name): + manifest_key = self.search([("name", "=", name)]) + if not manifest_key: + manifest_key = self.create({"name": name}) + return manifest_key diff --git a/github_connector_odoo/models/odoo_module.py b/github_connector_odoo/models/odoo_module.py new file mode 100644 index 00000000..aa2423ef --- /dev/null +++ b/github_connector_odoo/models/odoo_module.py @@ -0,0 +1,178 @@ +# Copyright (C) 2016-Today: Odoo Community Association (OCA) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import _, api, fields, models +from odoo.tools import html_sanitize + + +class OdooModule(models.Model): + _inherit = "abstract.action.mixin" + _name = "odoo.module" + _description = "Odoo Module" + _order = "technical_name, name" + _rec_name = "technical_name" + + # Column Section + name = fields.Char(store=True, readonly=True, compute="_compute_name") + technical_name = fields.Char(index=True, required=True, readonly=True) + module_version_ids = fields.One2many( + comodel_name="odoo.module.version", + inverse_name="module_id", + string="Versions", + readonly=True, + ) + module_version_qty = fields.Integer( + string="Number of Module Versions", + compute="_compute_module_version_qty", + store=True, + ) + author_ids = fields.Many2many( + string="Authors", + comodel_name="odoo.author", + compute="_compute_author", + relation="github_module_author_rel", + column1="module_id", + column2="author_id", + store=True, + ) + author_ids_description = fields.Char( + string="Authors (Text)", compute="_compute_author", store=True + ) + maintainers = fields.Char( + string="Maintainers (Manifest)", compute="_compute_maintainers", store=True + ) + organization_serie_ids = fields.Many2many( + string="Series", + comodel_name="github.organization.serie", + compute="_compute_organization_serie", + store=True, + relation="github_module_organization_serie_rel", + column1="module_id", + column2="organization_serie_id", + ) + organization_serie_ids_description = fields.Char( + string="Series (Text)", + store=True, + compute="_compute_organization_serie", + ) + description_rst = fields.Char( + string="RST Description of the last Version", + store=True, + readonly=True, + compute="_compute_description", + ) + description_rst_html = fields.Html( + string="HTML of the RST Description of the last Version", + store=True, + readonly=True, + compute="_compute_description", + ) + dependence_module_version_ids = fields.Many2many( + comodel_name="odoo.module.version", + string="Module Versions that depend on this module", + relation="module_version_dependency_rel", + column1="dependency_module_id", + column2="module_version_id", + ) + dependence_module_version_qty = fields.Integer( + string="Number of Module Versions that depend on this module", + compute="_compute_dependence_module_version_qty", + store=True, + ) + image = fields.Binary( + string="Icon Image", compute="_compute_image", store=True, attachment=True + ) + + # Compute Section + @api.depends("module_version_ids.image") + def _compute_image(self): + module_version_obj = self.env["odoo.module.version"] + for module in self: + version_ids = module.module_version_ids.ids + last_version = module_version_obj.search( + [("id", "in", version_ids)], order="organization_serie_id desc", limit=1 + ) + module.image = last_version and last_version.image + + @api.depends("technical_name", "module_version_ids.name") + def _compute_name(self): + module_version_obj = self.env["odoo.module.version"] + for module in self: + version_ids = module.module_version_ids.ids + last_version = module_version_obj.search( + [("id", "in", version_ids)], order="organization_serie_id desc", limit=1 + ) + if last_version: + module.name = last_version.name + else: + module.name = module.technical_name + + @api.depends("module_version_ids", "module_version_ids.description_rst_html") + def _compute_description(self): + module_version_obj = self.env["odoo.module.version"] + for module in self: + version_ids = module.module_version_ids.ids + last_version = module_version_obj.search( + [("id", "in", version_ids)], order="organization_serie_id desc", limit=1 + ) + if last_version: + module.description_rst = last_version.description_rst + module.description_rst_html = last_version.description_rst_html + else: + module.description_rst = "" + module.description_rst_html = html_sanitize( + "

" + _("No Version Found") + "

" + ) + + @api.depends("dependence_module_version_ids.dependency_module_ids") + def _compute_dependence_module_version_qty(self): + for module in self: + module.dependence_module_version_qty = len( + module.dependence_module_version_ids + ) + + @api.depends("module_version_ids") + def _compute_module_version_qty(self): + for module in self: + module.module_version_qty = len(module.module_version_ids) + + @api.depends("module_version_ids.author_ids") + def _compute_author(self): + for module in self: + authors = [] + for version in module.module_version_ids: + authors += version.author_ids + authors = set(authors) + module.author_ids = [x.id for x in authors] + module.author_ids_description = ", ".join(sorted(x.name for x in authors)) + + @api.depends("module_version_ids.maintainers") + def _compute_maintainers(self): + for module in self: + maintainers = [] + for version in module.module_version_ids.filtered("maintainers"): + for maintainer in version.maintainers.split(","): + if maintainer not in maintainers: + maintainers.append(maintainer) + module.maintainers = ", ".join(maintainers) + + @api.depends("module_version_ids.organization_serie_id") + def _compute_organization_serie(self): + for module in self: + organization_series = [] + for version in module.module_version_ids: + organization_series += version.organization_serie_id + organization_series = set(organization_series) + module.organization_serie_ids = [x.id for x in organization_series] + module.organization_serie_ids_description = " - ".join( + [x.name for x in sorted(organization_series, key=lambda x: x.sequence)] + ) + + # Custom Section + @api.model + def create_if_not_exist(self, technical_name): + module = self.search([("technical_name", "=", technical_name)]) + if not module: + module = self.create({"technical_name": technical_name}) + return module diff --git a/github_connector_odoo/models/odoo_module_version.py b/github_connector_odoo/models/odoo_module_version.py new file mode 100644 index 00000000..fdb43b3f --- /dev/null +++ b/github_connector_odoo/models/odoo_module_version.py @@ -0,0 +1,525 @@ +# Copyright (C) 2016-Today: Odoo Community Association (OCA) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# Copyright 2024 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import base64 +import logging +import os + +from docutils.core import publish_string + +from odoo import _, api, fields, models, tools +from odoo.tools import html_sanitize +from odoo.tools.safe_eval import safe_eval + +from odoo.addons.base.models.ir_module import MyWriter + +_logger = logging.getLogger(__name__) + + +class OdooModuleVersion(models.Model): + _name = "odoo.module.version" + _description = "Odoo Module Version" + _order = "name, technical_name" + + _ICON_PATH = [ + "static/src/img/", + "static/description/", + ] + _MANIFEST_KEYS_ALLOWED = ["data", "demo"] + + # Constant Section + _SETTING_OVERRIDES = { + "embed_stylesheet": False, + "doctitle_xform": False, + "output_encoding": "unicode", + "xml_declaration": False, + "file_insertion_enabled": False, + "raw_enabled": False, + } + + _ODOO_TYPE_SELECTION = [ + ("verticalization", "Vertical Solutions"), + ("localization", "Localization"), + ("connector", "Connector"), + ("other", "Other"), + ] + + # Column Section + name = fields.Char(readonly=True, index=True) + technical_name = fields.Char( + readonly=True, + index=True, + help="Technical Name of the Module (Folder name).", + ) + complete_name = fields.Char(compute="_compute_complete_name", store=True) + auto_install = fields.Boolean(readonly=True) + icon = fields.Char(string="Icon Path (Manifest)", readonly=True) + module_id = fields.Many2one( + comodel_name="odoo.module", + string="Module", + required=True, + ondelete="cascade", + index=True, + auto_join=True, + readonly=True, + ) + repository_branch_id = fields.Many2one( + comodel_name="github.repository.branch", + string="Repository Branch", + readonly=True, + required=True, + ondelete="cascade", + ) + repository_id = fields.Many2one( + comodel_name="github.repository", + string="Repository", + readonly=True, + related="repository_branch_id.repository_id", + store=True, + ) + organization_serie_id = fields.Many2one( + comodel_name="github.organization.serie", + string="Organization Serie", + readonly=True, + store=True, + compute="_compute_organization_serie_id", + ) + license = fields.Char(string="License (Manifest)", readonly=True) + license_id = fields.Many2one( + comodel_name="odoo.license", + string="License", + readonly=True, + compute="_compute_license_id", + store=True, + ) + summary = fields.Char(string="Summary (Manifest)", readonly=True) + depends = fields.Char(string="Dependencies (Manifest)", readonly=True) + dependency_module_ids = fields.Many2many( + comodel_name="odoo.module", + string="Dependencies", + relation="module_version_dependency_rel", + column1="module_version_id", + column2="dependency_module_id", + store=True, + compute="_compute_dependency_module_ids", + ) + website = fields.Char(string="Website (Manifest)", readonly=True) + external_dependencies = fields.Char( + string="External Dependencies (Manifest)", readonly=True + ) + description_rst = fields.Char(string="RST Description (Manifest)", readonly=True) + description_rst_html = fields.Html( + string="HTML the RST Description", + readonly=True, + compute="_compute_description_rst_html", + store=True, + ) + version = fields.Char(string="Version (Manifest)", readonly=True) + author = fields.Char(string="Author (Manifest)", readonly=True) + author_ids = fields.Many2many( + string="Authors", + comodel_name="odoo.author", + relation="github_module_version_author_rel", + column1="module_version_id", + column2="author_id", + compute="_compute_author", + store=True, + ) + author_ids_description = fields.Char( + string="Authors (Text)", compute="_compute_author", store=True + ) + maintainers = fields.Char(string="Maintainers (Manifest)", readonly=True) + lib_python_ids = fields.Many2many( + comodel_name="odoo.lib.python", + string="Python Lib Dependencies", + relation="module_version_lib_python_rel", + column1="module_version_id", + column2="lib_python_id", + compute="_compute_lib", + store=True, + ) + lib_python_ids_description = fields.Char( + string="Python Lib Dependencies (Text)", + compute="_compute_lib", + store=True, + ) + lib_bin_ids = fields.Many2many( + comodel_name="odoo.lib.bin", + string="Bin Lib Dependencies", + relation="module_version_lib_bin_rel", + column1="module_version_id", + column2="lib_bin_id", + compute="_compute_lib", + store=True, + ) + lib_bin_ids_description = fields.Char( + string="Bin Lib Dependencies (Text)", + compute="_compute_lib", + store=True, + ) + odoo_type = fields.Selection( + selection=_ODOO_TYPE_SELECTION, + store=True, + compute="_compute_odoo_type", + ) + image = fields.Binary(string="Icon Image", readonly=True, attachment=True) + github_url = fields.Char( + string="Github URL", compute="_compute_github_url", store=True, readonly=True + ) + category_id = fields.Many2one( + comodel_name="odoo.category", string="Category", readonly=True + ) + full_module_path = fields.Char( + string="Full Local Path to the module", + ) + manifest_keys = fields.Char(string="Manifest keys (Manifest)", readonly=True) + manifest_key_ids = fields.Many2many( + comodel_name="odoo.manifest.key", + string="Manifest keys", + store=True, + compute="_compute_manifest_key_ids", + ) + analysis_rule_info_ids = fields.One2many( + string="Analysis Rule Info ids", + comodel_name="odoo.module.version.rule.info", + inverse_name="module_version_id", + readonly=True, + ) + + # Overload Section + def unlink(self): + # Analyzed repository branches should be reanalyzed + if not self._context.get("dont_change_repository_branch_state", False): + repository_branch_obj = self.env["github.repository.branch"] + repository_branch_obj.search( + [ + ("id", "in", self.mapped("repository_branch_id").ids), + ("state", "=", "analyzed"), + ] + ).write({"state": "to_analyze"}) + return super().unlink() + + # Compute Section + @api.depends( + "repository_id.organization_id.github_name", + "repository_id.name", + "repository_branch_id.name", + "repository_branch_id.local_path", + "full_module_path", + ) + def _compute_github_url(self): + for version in self: + repo_id = version.repository_id + version.github_url = ( + "https://github.com/{organization_name}/" + "{repository_name}/tree/{branch_name}/{rest_path}".format( + organization_name=repo_id.organization_id.github_name, + repository_name=repo_id.name, + branch_name=version.repository_branch_id.name, + rest_path=(version.full_module_path or "")[ + len(version.repository_branch_id.local_path or "") + 1 : + ], + ) + ) + + @api.depends("repository_branch_id.repository_id.name") + def _compute_odoo_type(self): + for version in self: + repository_name = version.repository_branch_id.repository_id.name + if repository_name.startswith("l10n-"): + version.odoo_type = "localization" + elif repository_name.startswith("connector-"): + version.odoo_type = "connector" + elif repository_name.startswith("vertical-"): + version.odoo_type = "verticalization" + else: + version.odoo_type = "other" + + @api.depends("technical_name", "repository_branch_id.complete_name") + def _compute_complete_name(self): + for version in self: + version.complete_name = ( + version.repository_branch_id.complete_name + + "/" + + version.technical_name + ) + + @api.depends("description_rst") + def _compute_description_rst_html(self): + for version in self: + if version.description_rst: + try: + output = publish_string( + source=version.description_rst, + settings_overrides=self._SETTING_OVERRIDES, + writer=MyWriter(), + ) + except Exception: + output = ( + "

" + + _("Incorrect RST Description") + + "

" + ) + else: + output = html_sanitize( + "

" + _("No Version Found") + "

" + ) + version.description_rst_html = html_sanitize(output) + + @api.depends("depends") + def _compute_dependency_module_ids(self): + module_obj = self.env["odoo.module"] + for version in self: + modules = [] + if version.depends: + for module_name in version.depends.split(","): + modules.append(module_obj.create_if_not_exist(module_name)) + version.dependency_module_ids = [x.id for x in modules] + + @api.depends("manifest_keys") + def _compute_manifest_key_ids(self): + manifest_key_obj = self.env["odoo.manifest.key"] + for version in self: + manifest_keys = [] + if version.manifest_keys: + for manifest_key in version.manifest_keys.split(","): + if manifest_key: + manifest_keys.append( + manifest_key_obj.create_if_not_exist(manifest_key) + ) + version.manifest_key_ids = [x.id for x in manifest_keys] + + @api.depends("external_dependencies") + def _compute_lib(self): + lib_python_obj = self.env["odoo.lib.python"] + lib_bin_obj = self.env["odoo.lib.bin"] + for version in self: + python_libs = [] + bin_libs = [] + my_eval = [] + if version.external_dependencies: + my_eval = safe_eval(version.external_dependencies) + if isinstance(my_eval, list): + for item in my_eval: + if isinstance(item, dict): + python_names = item.get("python", []) + bin_names = item.get("bin", []) + for python_name in python_names: + python_libs.append( + lib_python_obj.create_if_not_exist(python_name) + ) + for bin_name in bin_names: + bin_libs.append( + lib_bin_obj.create_if_not_exist(bin_name) + ) + + version.lib_python_ids = [x.id for x in python_libs] + version.lib_python_ids_description = ", ".join( + sorted(x.name for x in python_libs) + ) + version.lib_bin_ids = [x.id for x in bin_libs] + version.lib_bin_ids_description = ", ".join( + sorted(x.name for x in bin_libs) + ) + + @api.depends("license") + def _compute_license_id(self): + license_obj = self.env["odoo.license"] + for version in self: + if version.license: + version.license_id = license_obj.create_if_not_exist(version.license).id + + @api.depends("author") + def _compute_author(self): + odoo_author_obj = self.env["odoo.author"] + for version in self: + authors = [] + for item in [x.strip() for x in (version.author or "").split(",")]: + if ( + item + and item + != version.repository_id.organization_id.default_author_text + ): + authors.append(odoo_author_obj.create_if_not_exist(item)) + authors = set(authors) + version.author_ids = [x.id for x in authors] + version.author_ids_description = ", ".join(sorted(x.name for x in authors)) + + @api.depends( + "repository_branch_id", + "repository_branch_id.organization_id", + "repository_branch_id.organization_id.organization_serie_ids", + "repository_branch_id.organization_id.organization_serie_ids.name", + ) + def _compute_organization_serie_id(self): + organization_serie_obj = self.env["github.organization.serie"] + for module_version in self: + res = organization_serie_obj.search( + [ + ( + "organization_id", + "=", + module_version.repository_branch_id.organization_id.id, + ), + ("name", "=", module_version.repository_branch_id.name), + ] + ) + module_version.organization_serie_id = res and res[0].id or False + + @api.model + def get_module_category(self, info): + """Used to search the category of the module by the data given + on the manifest. + + :param dict info: The parsed dictionary with the manifest data. + :returns: recordset of the given category if exists. + """ + category_obj = self.env["odoo.category"] + category = info.get("category", False) + other_categ = category_obj.search([("name", "=", "Other")], limit=1) + if not category: + return other_categ + found_category = category_obj.search([("name", "=", category)], limit=1) + return found_category or other_categ + + # Custom Section + @api.model + def manifest_2_odoo(self, info, repository_branch, module): + author_list = ( + isinstance(info["author"], list) + and info["author"] + or (isinstance(info["author"], tuple)) + and [x for x in info["author"]] + or info["author"].split(",") + ) + manifest_keys = [] + for manifest_key in self._MANIFEST_KEYS_ALLOWED: + if manifest_key in info: + manifest_keys.append(manifest_key) + return { + "name": info["name"], + "technical_name": info["technical_name"], + "summary": info["summary"], + "website": info["website"], + "version": info["version"], + "license": info["license"], + "auto_install": info["auto_install"], + "icon": info["icon"], + "description_rst": info["description"], + "external_dependencies": info.get("external_dependencies", {}), + "author": ",".join([x.strip() for x in sorted(author_list) if x.strip()]), + "maintainers": ",".join(info.get("maintainers", [])), + "depends": ",".join([x for x in sorted(info["depends"]) if x]), + "manifest_keys": ",".join([x for x in sorted(manifest_keys) if x]), + "repository_branch_id": repository_branch.id, + "module_id": module.id, + "category_id": self.get_module_category(info).id or None, + } + + @api.model + def create_or_update_from_manifest(self, info, repository_branch, full_module_path): + module_obj = self.env["odoo.module"] + module_version = self.search( + [ + ("technical_name", "=", str(info["technical_name"])), + ("repository_branch_id", "=", repository_branch.id), + ] + ) + + if not module_version: + # Create new module version + module = module_obj.create_if_not_exist(info["technical_name"]) + vals = self.manifest_2_odoo(info, repository_branch, module) + vals["full_module_path"] = full_module_path + module_version = self.create(vals) + + else: + # Update module Version + vals = self.manifest_2_odoo( + info, repository_branch, module_version.module_id + ) + vals["full_module_path"] = full_module_path + module_version.write(vals) + icon_path = False + resize = False + if info.get("images"): + full_current_icon_path = os.path.join( + full_module_path, info.get("images")[0] + ) + if os.path.exists(full_current_icon_path): + icon_path = full_current_icon_path + else: + for current_icon_path in self._ICON_PATH: + full_current_icon_path = os.path.join( + full_module_path, current_icon_path, "icon.png" + ) + if os.path.exists(full_current_icon_path): + icon_path = full_current_icon_path + resize = True + break + if icon_path: + image_enc = False + try: + with open(icon_path, "rb") as f: + image = f.read() + if resize: + process = tools.image.ImageProcess(image, False) + process.resize(96, 96) + image = process.image_quality() + image_enc = base64.b64encode(image) + except Exception: + _logger.warning("Unable to read or resize %s", icon_path) + module_version.write({"image": image_enc}) + else: + # Set the default icon + try: + with open( + os.path.join(os.path.dirname(__file__), "../data/oca.png"), "rb" + ) as f: + image = base64.b64encode(f.read()) + module_version.write({"image": image}) + except Exception as e: + _logger.error("Unable to read the OCA icon image, error is %s", e) + + @api.model + def cron_clean_odoo_module_version(self): + module_versions = self.search([]) + module_versions.clean_odoo_module_version() + + def clean_odoo_module_version(self): + for module_version in self: + # Compute path(s) to analyze + paths = module_version.repository_branch_id._get_module_paths() + found = False + for path in paths: + module_ver_path = os.path.join(path, module_version.technical_name) + if os.path.exists(module_ver_path): + found = True + continue + if not found: + module_version._process_clean_module_version() + return True + + def _process_clean_module_version(self): + for module_version in self: + module_version.unlink() + return True + + +class OdooModuleVersionRuleInfo(models.TransientModel): + _inherit = "github.analysis.rule.info.mixin" + _name = "odoo.module.version.rule.info" + _description = "Odoo Module Vesion Rule Info" + + module_version_id = fields.Many2one( + string="Module Version", + comodel_name="odoo.module.version", + ondelete="cascade", + ) + repository_branch_id = fields.Many2one( + string="Repository Branch", + comodel_name="github.repository.branch", + ondelete="cascade", + ) diff --git a/github_connector_odoo/monkeypatching.py b/github_connector_odoo/monkeypatching.py new file mode 100644 index 00000000..5e68c93c --- /dev/null +++ b/github_connector_odoo/monkeypatching.py @@ -0,0 +1,21 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import odoo.release as release +from odoo.modules import module + +adapt_version_original = module.adapt_version + + +def adapt_version(version): + """Overwrite the method to avoid the error if use values that do not contain serie + (17.0), for example 4.0 + """ + serie = release.major_version + if version == serie or not version.startswith(serie + "."): + return f"{serie}.{version}" # Similar to 16.0 + return adapt_version_original(version) + + +# Monkey-patching of the method +module.adapt_version = adapt_version diff --git a/github_connector_odoo/pyproject.toml b/github_connector_odoo/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/github_connector_odoo/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/github_connector_odoo/readme/CONFIGURE.md b/github_connector_odoo/readme/CONFIGURE.md new file mode 100644 index 00000000..5951668d --- /dev/null +++ b/github_connector_odoo/readme/CONFIGURE.md @@ -0,0 +1,12 @@ +- Once installed, go to your organization, and set extra settings: + +1. The name of your organization in the author keys of the manifest + odoo modules (in the **Default Author Text** field) +2. The URL of the file that contains IDs of your repositories for the + runbot + +![github_organization_form](static/description/github_organization_form.png) + +If you had analyzed previously your repositories with the 'github +Connector' module, you should launch again the Analysis Process for all +your Repository Branches. diff --git a/github_connector_odoo/readme/CONTRIBUTORS.md b/github_connector_odoo/readme/CONTRIBUTORS.md new file mode 100644 index 00000000..16735768 --- /dev/null +++ b/github_connector_odoo/readme/CONTRIBUTORS.md @@ -0,0 +1,8 @@ +- Sylvain LE GAL () +- [Tecnativa](https://www.tecnativa.com): + - Vicent Cubells + - Alexandre Díaz + - Pedro M. Baeza + - Ernesto Tejeda + - Víctor Martínez + - Carolina Fernandez diff --git a/github_connector_odoo/readme/DESCRIPTION.md b/github_connector_odoo/readme/DESCRIPTION.md new file mode 100644 index 00000000..46e92114 --- /dev/null +++ b/github_connector_odoo/readme/DESCRIPTION.md @@ -0,0 +1,7 @@ +This module was written to extend the functionality of 'Github +Connector' Module if your repositories contain Odoo Modules. + +It extends 'Analysis' features to parse code files (readme / manifest +files) and add new models and menus. + +![menu](static/description/menu.png) diff --git a/github_connector_odoo/readme/ROADMAP.md b/github_connector_odoo/readme/ROADMAP.md new file mode 100644 index 00000000..704ee206 --- /dev/null +++ b/github_connector_odoo/readme/ROADMAP.md @@ -0,0 +1,9 @@ +Possible improvements : + +- Implement deep code source analysis, like the website + and specially: + +1. Possibility to search by field or by model name. (Ex: + field:invoice_id) +2. Possibility to display the number of XML, Python, Yaml, HTML, CSS + lines diff --git a/github_connector_odoo/readme/USAGE.md b/github_connector_odoo/readme/USAGE.md new file mode 100644 index 00000000..540634e4 --- /dev/null +++ b/github_connector_odoo/readme/USAGE.md @@ -0,0 +1,58 @@ +**Odoo Modules** + +![odoo_module_kanban](static/description/odoo_module_kanban.png) + +In each module, you can see the description of the module, the authors, +the available series, and the list of the modules that depend on the +current module. + +![odoo_module_form](static/description/odoo_module_form.png) + +**Odoo Authors** + +![odoo_author](static/description/odoo_author.png) + +This list is based on the 'author' key of the manifest file. + +**Odoo License** + +This list is based on the 'license' key of the manifest file. + +![odoo_license](static/description/odoo_license.png) + +**Odoo Bin Libs** + +This list is based on the 'external_dependencies' / 'bin' key of the +manifest file. + +![odoo_bin_libs](static/description/odoo_bin_libs.png) + +**Odoo Python Libs** + +This list is based on the 'external_dependencies' / 'python' key of the +manifest file. + +![odoo_python_libs](static/description/odoo_python_libs.png) + +**Analysis source code** + +Implements Analysis source code in odoo module versions, now add new +field called "has_odoo_addons" (boolean) in Analysis rule that allow (if +defined) analyze odoo_module_versions and save info about it + +**Soource code analysis** + +Implements Source code analysis odoo module versions, now addiing new +field called "has_odoo_addons" (boolean) in Analysis rule that (if +defined) allows to analyze odoo_module_versions and save info about it + +In 'Repository Branch' / 'Code Analysis', shows the info related to +odoo_module_versions rules analysis too. + +**Reporting** + +This module provide a new reporting. + +**Modules by Serie (and Licenses)** + +![reporting_module_by_serie](static/description/reporting_module_by_serie.png) diff --git a/github_connector_odoo/report/__init__.py b/github_connector_odoo/report/__init__.py new file mode 100644 index 00000000..25b8c1ed --- /dev/null +++ b/github_connector_odoo/report/__init__.py @@ -0,0 +1 @@ +from . import odoo_module_version_rule_info_report diff --git a/github_connector_odoo/report/odoo_module_version_rule_info_report.py b/github_connector_odoo/report/odoo_module_version_rule_info_report.py new file mode 100644 index 00000000..05be9c31 --- /dev/null +++ b/github_connector_odoo/report/odoo_module_version_rule_info_report.py @@ -0,0 +1,67 @@ +# Copyright (C) 2020: Odoo Community Association (OCA) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models, tools + + +class OdooModuleVersionRuleInfoReport(models.Model): + _name = "odoo.module.version.rule.info.report" + _description = "Odoo Module Version Rule Info Report" + _auto = False + + analysis_rule_id = fields.Many2one( + string="Analysis Rule id", + comodel_name="github.analysis.rule", + ) + group_id = fields.Many2one( + string="Group id", comodel_name="github.analysis.rule.group" + ) + repository_branch_id = fields.Many2one( + string="Repository Branch", + comodel_name="github.repository.branch", + ) + module_version_id = fields.Many2one( + string="Module Version", + comodel_name="odoo.module.version", + ) + module_version_name = fields.Char(string="Module Version name") + organization_serie_id = fields.Many2one( + string="Organization serie", + comodel_name="github.organization.serie", + ) + code_count = fields.Integer() + documentation_count = fields.Integer() + empty_count = fields.Integer() + total_count = fields.Integer() + scanned_files = fields.Integer() + + def init(self): + tools.drop_view_if_exists(self._cr, "odoo_module_version_rule_info_report") + self._cr.execute( + """ + CREATE OR REPLACE VIEW odoo_module_version_rule_info_report AS ( + SELECT + MIN(omvri.id) AS id, + gar.id AS analysis_rule_id, + garg.id AS group_id, + gos.id AS organization_serie_id, + grb.id AS repository_branch_id, + omv.id AS module_version_id, + omv.name AS module_version_name, + SUM(omvri.code_count) AS code_count, + SUM(omvri.documentation_count) AS documentation_count, + SUM(omvri.empty_count) AS empty_count, + SUM(omvri.total_count) AS total_count, + SUM(omvri.scanned_files) AS scanned_files + FROM odoo_module_version_rule_info AS omvri + LEFT JOIN github_analysis_rule AS gar ON omvri.analysis_rule_id = gar.id + LEFT JOIN github_analysis_rule_group AS garg ON gar.group_id = garg.id + LEFT JOIN github_repository_branch AS grb + ON omvri.repository_branch_id = grb.id + LEFT JOIN odoo_module_version AS omv ON omvri.module_version_id = omv.id + LEFT JOIN github_organization_serie AS gos + ON omv.organization_serie_id = gos.id + WHERE omvri.id > 0 + GROUP BY gar.id, garg.id, omv.id, omv.name, gos.id, grb.id + )""" + ) diff --git a/github_connector_odoo/report/odoo_module_version_rule_info_report_view.xml b/github_connector_odoo/report/odoo_module_version_rule_info_report_view.xml new file mode 100644 index 00000000..8e07f88c --- /dev/null +++ b/github_connector_odoo/report/odoo_module_version_rule_info_report_view.xml @@ -0,0 +1,40 @@ + + + + + odoo.module.version.rule.info.report + + + + + + + + + odoo.module.version.rule.info.report + + + + + + + + + Module version analysis rule + odoo.module.version.rule.info.report + pivot,graph + + + diff --git a/github_connector_odoo/security/ir.model.access.csv b/github_connector_odoo/security/ir.model.access.csv new file mode 100644 index 00000000..0f4a8aba --- /dev/null +++ b/github_connector_odoo/security/ir.model.access.csv @@ -0,0 +1,20 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_odoo_author_reader,odoo_author reader,model_odoo_author,base.group_user,1,0,0,0 +access_odoo_author_manager,odoo_author manager,model_odoo_author,github_connector.group_github_connector_manager,1,1,1,1 +access_odoo_lib_bin_reader,odoo_lib_bin reader,model_odoo_lib_bin,base.group_user,1,0,0,0 +access_odoo_lib_bin_manager,odoo_lib_bin manager,model_odoo_lib_bin,github_connector.group_github_connector_manager,1,1,1,1 +access_odoo_lib_python_reader,odoo_lib_python reader,model_odoo_lib_python,base.group_user,1,0,0,0 +access_odoo_lib_python_manager,odoo_lib_python manager,model_odoo_lib_python,github_connector.group_github_connector_manager,1,1,1,1 +access_odoo_license_reader,odoo_license reader,model_odoo_license,base.group_user,1,0,0,0 +access_odoo_license_manager,odoo_license manager,model_odoo_license,github_connector.group_github_connector_manager,1,1,1,1 +access_odoo_module_reader,odoo_module reader,model_odoo_module,base.group_user,1,0,0,0 +access_odoo_module_manager,odoo_module manager,model_odoo_module,github_connector.group_github_connector_manager,1,1,1,1 +access_odoo_module_version_reader,odoo_module_version reader,model_odoo_module_version,base.group_user,1,0,0,0 +access_odoo_module_version_manager,odoo_module_version manager,model_odoo_module_version,github_connector.group_github_connector_manager,1,1,1,1 +access_odoo_module_version_rule_info_reader,access_odoo_module_version_rule_info_reader,model_odoo_module_version_rule_info,base.group_user,1,0,0,0 +access_odoo_module_version_rule_info_manager,access_odoo_module_version_rule_info_manager,model_odoo_module_version_rule_info,github_connector.group_github_connector_manager,1,1,1,1 +access_odoo_module_version_rule_info_report_reader,odoo_module_version_rule_info_report reader,model_odoo_module_version_rule_info_report,base.group_user,1,0,0,0 +access_odoo_category_reader,odoo_category reader,model_odoo_category,base.group_user,1,0,0,0 +access_odoo_category_manager,odoo_category manager,model_odoo_category,github_connector.group_github_connector_manager,1,1,1,1 +access_odoo_manifest_key_reader,odoo_manifest_key reader,model_odoo_manifest_key,base.group_user,1,0,0,0 +access_odoo_manifest_key_manager,odoo_manifest_key manager,model_odoo_manifest_key,github_connector.group_github_connector_manager,1,1,1,1 diff --git a/github_connector_odoo/static/description/github_organization_form.png b/github_connector_odoo/static/description/github_organization_form.png new file mode 100644 index 00000000..bbb42861 Binary files /dev/null and b/github_connector_odoo/static/description/github_organization_form.png differ diff --git a/github_connector_odoo/static/description/icon.png b/github_connector_odoo/static/description/icon.png new file mode 100644 index 00000000..4599a941 Binary files /dev/null and b/github_connector_odoo/static/description/icon.png differ diff --git a/github_connector_odoo/static/description/index.html b/github_connector_odoo/static/description/index.html new file mode 100644 index 00000000..259efc8b --- /dev/null +++ b/github_connector_odoo/static/description/index.html @@ -0,0 +1,507 @@ + + + + + +Github Connector - Odoo + + + +
+

Github Connector - Odoo

+ + +

Beta License: AGPL-3 OCA/interface-github Translate me on Weblate Try me on Runboat

+

This module was written to extend the functionality of ‘Github +Connector’ Module if your repositories contain Odoo Modules.

+

It extends ‘Analysis’ features to parse code files (readme / manifest +files) and add new models and menus.

+

menu

+

Table of contents

+ +
+

Configuration

+
    +
  • Once installed, go to your organization, and set extra settings:
  • +
+
    +
  1. The name of your organization in the author keys of the manifest odoo +modules (in the Default Author Text field)
  2. +
  3. The URL of the file that contains IDs of your repositories for the +runbot
  4. +
+

github_organization_form

+

If you had analyzed previously your repositories with the ‘github +Connector’ module, you should launch again the Analysis Process for all +your Repository Branches.

+
+
+

Usage

+

Odoo Modules

+

odoo_module_kanban

+

In each module, you can see the description of the module, the authors, +the available series, and the list of the modules that depend on the +current module.

+

odoo_module_form

+

Odoo Authors

+

odoo_author

+

This list is based on the ‘author’ key of the manifest file.

+

Odoo License

+

This list is based on the ‘license’ key of the manifest file.

+

odoo_license

+

Odoo Bin Libs

+

This list is based on the ‘external_dependencies’ / ‘bin’ key of the +manifest file.

+

odoo_bin_libs

+

Odoo Python Libs

+

This list is based on the ‘external_dependencies’ / ‘python’ key of the +manifest file.

+

odoo_python_libs

+

Analysis source code

+

Implements Analysis source code in odoo module versions, now add new +field called “has_odoo_addons” (boolean) in Analysis rule that allow (if +defined) analyze odoo_module_versions and save info about it

+

Soource code analysis

+

Implements Source code analysis odoo module versions, now addiing new +field called “has_odoo_addons” (boolean) in Analysis rule that (if +defined) allows to analyze odoo_module_versions and save info about it

+

In ‘Repository Branch’ / ‘Code Analysis’, shows the info related to +odoo_module_versions rules analysis too.

+

Reporting

+

This module provide a new reporting.

+

Modules by Serie (and Licenses)

+

reporting_module_by_serie

+
+
+

Known issues / Roadmap

+

Possible improvements :

+ +
    +
  1. Possibility to search by field or by model name. (Ex: +field:invoice_id)
  2. +
  3. Possibility to display the number of XML, Python, Yaml, HTML, CSS +lines
  4. +
+
+
+

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

+
    +
  • Sylvain LE GAL
  • +
  • GRAP
  • +
+
+
+

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/interface-github project on GitHub.

+

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

+
+
+
+ + diff --git a/github_connector_odoo/static/description/menu.png b/github_connector_odoo/static/description/menu.png new file mode 100644 index 00000000..2c5b33ce Binary files /dev/null and b/github_connector_odoo/static/description/menu.png differ diff --git a/github_connector_odoo/static/description/odoo_author.png b/github_connector_odoo/static/description/odoo_author.png new file mode 100644 index 00000000..1b19e295 Binary files /dev/null and b/github_connector_odoo/static/description/odoo_author.png differ diff --git a/github_connector_odoo/static/description/odoo_bin_libs.png b/github_connector_odoo/static/description/odoo_bin_libs.png new file mode 100644 index 00000000..3ac118a5 Binary files /dev/null and b/github_connector_odoo/static/description/odoo_bin_libs.png differ diff --git a/github_connector_odoo/static/description/odoo_license.png b/github_connector_odoo/static/description/odoo_license.png new file mode 100644 index 00000000..304aec15 Binary files /dev/null and b/github_connector_odoo/static/description/odoo_license.png differ diff --git a/github_connector_odoo/static/description/odoo_module_form.png b/github_connector_odoo/static/description/odoo_module_form.png new file mode 100644 index 00000000..af5f94d0 Binary files /dev/null and b/github_connector_odoo/static/description/odoo_module_form.png differ diff --git a/github_connector_odoo/static/description/odoo_module_kanban.png b/github_connector_odoo/static/description/odoo_module_kanban.png new file mode 100644 index 00000000..0353ea62 Binary files /dev/null and b/github_connector_odoo/static/description/odoo_module_kanban.png differ diff --git a/github_connector_odoo/static/description/odoo_python_libs.png b/github_connector_odoo/static/description/odoo_python_libs.png new file mode 100644 index 00000000..833e6936 Binary files /dev/null and b/github_connector_odoo/static/description/odoo_python_libs.png differ diff --git a/github_connector_odoo/static/description/reporting_module_by_serie.png b/github_connector_odoo/static/description/reporting_module_by_serie.png new file mode 100644 index 00000000..4773fbbb Binary files /dev/null and b/github_connector_odoo/static/description/reporting_module_by_serie.png differ diff --git a/github_connector_odoo/static/src/img/default_image_module.png b/github_connector_odoo/static/src/img/default_image_module.png new file mode 100644 index 00000000..9187bcdd Binary files /dev/null and b/github_connector_odoo/static/src/img/default_image_module.png differ diff --git a/github_connector_odoo/static/src/img/default_image_module_version.png b/github_connector_odoo/static/src/img/default_image_module_version.png new file mode 100644 index 00000000..9187bcdd Binary files /dev/null and b/github_connector_odoo/static/src/img/default_image_module_version.png differ diff --git a/github_connector_odoo/static/src/img/github.png b/github_connector_odoo/static/src/img/github.png new file mode 100644 index 00000000..c8da8392 Binary files /dev/null and b/github_connector_odoo/static/src/img/github.png differ diff --git a/github_connector_odoo/static/src/img/odoo_licence_agpl_3-image.png b/github_connector_odoo/static/src/img/odoo_licence_agpl_3-image.png new file mode 100644 index 00000000..b37d4cf7 Binary files /dev/null and b/github_connector_odoo/static/src/img/odoo_licence_agpl_3-image.png differ diff --git a/github_connector_odoo/static/src/img/odoo_licence_gpl_3-image.png b/github_connector_odoo/static/src/img/odoo_licence_gpl_3-image.png new file mode 100644 index 00000000..28c45ded Binary files /dev/null and b/github_connector_odoo/static/src/img/odoo_licence_gpl_3-image.png differ diff --git a/github_connector_odoo/static/src/img/odoo_licence_lgpl_3-image.png b/github_connector_odoo/static/src/img/odoo_licence_lgpl_3-image.png new file mode 100644 index 00000000..542f1655 Binary files /dev/null and b/github_connector_odoo/static/src/img/odoo_licence_lgpl_3-image.png differ diff --git a/github_connector_odoo/tests/__init__.py b/github_connector_odoo/tests/__init__.py new file mode 100644 index 00000000..1a79dd2a --- /dev/null +++ b/github_connector_odoo/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_github_analysis_rule diff --git a/github_connector_odoo/tests/res/github_maintainer_tools_repos_with_ids.txt b/github_connector_odoo/tests/res/github_maintainer_tools_repos_with_ids.txt new file mode 100644 index 00000000..431e3b4b --- /dev/null +++ b/github_connector_odoo/tests/res/github_maintainer_tools_repos_with_ids.txt @@ -0,0 +1,185 @@ +109|github.com/OCA/connector-sage-50 +140|github.com/OCA/project +141|github.com/OCA/purchase-reporting +144|github.com/OCA/report-print-send +107|github.com/OCA/connector-magento +103|github.com/OCA/connector-accountedge +106|github.com/OCA/connector-lims +108|github.com/OCA/connector-prestashop +110|github.com/OCA/contract +139|github.com/OCA/project-reporting +105|github.com/OCA/connector-ecommerce +146|github.com/OCA/runbot-addons +111|github.com/OCA/crm +178|github.com/OCA/l10n-finland +173|github.com/OCA/bank-payment +119|github.com/OCA/l10n-belgium +174|github.com/OCA/bank-statement-import +101|github.com/OCA/community-data-files +121|github.com/OCA/l10n-france +175|github.com/OCA/l10n-germany +179|github.com/OCA/l10n-argentina +180|github.com/OCA/donation +150|github.com/OCA/stock-logistics-barcode +181|github.com/OCA/vertical-abbey +151|github.com/OCA/stock-logistics-reporting +182|github.com/OCA/vertical-edition +157|github.com/OCA/vertical-hotel +149|github.com/OCA/server-tools +152|github.com/OCA/stock-logistics-tracking +165|github.com/OCA/commission +90|github.com/OCA/account-consolidation +147|github.com/OCA/sale-financial +136|github.com/OCA/product-kitting +91|github.com/OCA/account-financial-reporting +117|github.com/OCA/timesheet +96|github.com/OCA/account-payment +98|github.com/OCA/account-reconcile +99|github.com/OCA/delivery-carrier +115|github.com/OCA/geospatial +131|github.com/OCA/manufacture-reporting +183|github.com/OCA/vertical-community +133|github.com/OCA/multi-company +138|github.com/OCA/program +137|github.com/OCA/product-variant +132|github.com/OCA/margin-analysis +123|github.com/OCA/l10n-luxemburg +176|github.com/OCA/l10n-netherlands +172|github.com/OCA/vertical-agriculture +87|github.com/OCA/account-analytic +88|github.com/OCA/account-budgeting +89|github.com/OCA/account-closing +135|github.com/OCA/product-attribute +162|github.com/OCA/web +168|github.com/OCA/stock-logistics-transport +154|github.com/OCA/stock-logistics-workflow +142|github.com/OCA/purchase-workflow +134|github.com/OCA/partner-contact +184|github.com/OCA/pos +169|github.com/OCA/connector-redmine +102|github.com/OCA/connector +95|github.com/OCA/account-invoicing +112|github.com/OCA/department +128|github.com/OCA/management-system +143|github.com/OCA/reporting-engine +153|github.com/OCA/stock-logistics-warehouse +145|github.com/OCA/rma +125|github.com/OCA/l10n-switzerland +120|github.com/OCA/l10n-canada +104|github.com/OCA/connector-cmis +124|github.com/OCA/l10n-brazil +93|github.com/OCA/account-fiscal-rule +94|github.com/OCA/account-invoice-reporting +116|github.com/OCA/hr +118|github.com/OCA/knowledge +159|github.com/OCA/vertical-medical +129|github.com/OCA/manufacture +163|github.com/OCA/webkit-tools +164|github.com/OCA/webkit-utils +167|github.com/OCA/sale-workflow +171|github.com/OCA/l10n-portugal +92|github.com/OCA/account-financial-tools +113|github.com/OCA/e-commerce +148|github.com/OCA/sale-reporting +122|github.com/OCA/l10n-italy +177|github.com/OCA/l10n-romania +156|github.com/OCA/vertical-construction +161|github.com/OCA/vertical-travel +158|github.com/OCA/vertical-isp +160|github.com/OCA/vertical-ngo +189|github.com/OCA/l10n-spain +190|github.com/OCA/l10n-norway +192|github.com/OCA/l10n-taiwan +193|github.com/OCA/l10n-mexico +194|github.com/OCA/l10n-venezuela +195|github.com/OCA/l10n-colombia +196|github.com/OCA/l10n-costa-rica +197|github.com/OCA/l10n-india +198|github.com/OCA/l10n-china +199|github.com/OCA/event +200|github.com/OCA/survey +201|github.com/OCA/l10n-ireland +203|github.com/OCA/l10n-usa +204|github.com/OCA/l10n-iran +205|github.com/OCA/social +206|github.com/OCA/l10n-united-kingdom +186|github.com/OCA/website +207|github.com/OCA/connector-woocommerce +208|github.com/OCA/vertical-association +209|github.com/OCA/connector-odoo2odoo +210|github.com/OCA/webhook +211|github.com/OCA/l10n-peru +212|github.com/OCA/l10n-ecuador +213|github.com/OCA/operating-unit +215|github.com/OCA/l10n-morocco +216|github.com/OCA/connector-salesforce +217|github.com/OCA/vertical-education +218|github.com/OCA/l10n-slovenia +219|github.com/OCA/l10n-indonesia +220|github.com/OCA/l10n-turkey +221|github.com/OCA/l10n-ethiopia +222|github.com/OCA/business-requirement +223|github.com/OCA/l10n-cambodia +224|github.com/OCA/infrastructure-dns +225|github.com/OCA/website-cms +226|github.com/OCA/edi +227|github.com/OCA/intrastat-extrastat +228|github.com/OCA/connector-telephony +229|github.com/OCA/interface-github +230|github.com/OCA/queue +236|github.com/OCA/l10n-chile +233|github.com/OCA/connector-jira +234|github.com/OCA/connector-lengow +237|github.com/OCA/l10n-vietnam +238|github.com/OCA/l10n-thailand +239|github.com/OCA/vertical-realstate +240|github.com/OCA/maintenance +248|github.com/OCA/mis-builder +249|github.com/OCA/apps-store +250|github.com/OCA/server-ux +251|github.com/OCA/server-auth +252|github.com/OCA/server-brand +253|github.com/OCA/server-backend +254|github.com/OCA/server-env +255|github.com/OCA/ddmrp +256|github.com/OCA/project-agile +257|github.com/OCA/l10n-japan +258|github.com/OCA/website-themes +259|github.com/OCA/currency +260|github.com/OCA/connector-infor +261|github.com/OCA/l10n-croatia +262|github.com/OCA/credit-control +263|github.com/OCA/data-protection +264|github.com/OCA/field-service +265|github.com/OCA/l10n-poland +266|github.com/OCA/l10n-russia +267|github.com/OCA/l10n-belarus +268|github.com/OCA/l10n-estonia +269|github.com/OCA/iot +270|github.com/OCA/connector-spscommerce +271|github.com/OCA/rest-framework +272|github.com/OCA/l10n-greece +273|github.com/OCA/oca-custom +274|github.com/OCA/l10n-uruguay +275|github.com/OCA/storage +276|github.com/OCA/search-engine +277|github.com/OCA/mis-builder-contrib +278|github.com/OCA/l10n-austria +279|github.com/OCA/calendar +281|github.com/OCA/payroll +282|github.com/OCA/helpdesk +283|github.com/OCA/l10n-ukraine +284|github.com/OCA/brand +285|github.com/OCA/wms +286|github.com/OCA/product-pack +287|github.com/OCA/l10n-macedonia +288|github.com/OCA/hr-attendance +289|github.com/OCA/hr-expense +290|github.com/OCA/hr-holidays +291|github.com/OCA/fleet +292|github.com/OCA/dms +293|github.com/OCA/pms +294|github.com/OCA/role-policy +295|github.com/OCA/odoo-pim +296|github.com/OCA/sale-promotion +298|github.com/OCA/vertical-rental diff --git a/github_connector_odoo/tests/test_github_analysis_rule.py b/github_connector_odoo/tests/test_github_analysis_rule.py new file mode 100644 index 00000000..dfbbb971 --- /dev/null +++ b/github_connector_odoo/tests/test_github_analysis_rule.py @@ -0,0 +1,60 @@ +# Copyright 2021-2022 Tecnativa - Víctor Martínez +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +import responses + +from odoo.tools.misc import file_path + +from odoo.addons.github_connector.tests.test_github_analysis_rule import ( + TestGithubConnectorAnalysisRuleBase, +) + + +class TestGithubConnectorOdooAnalysisRuleBase(TestGithubConnectorAnalysisRuleBase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.rule_has_odoo_addons = cls.env.ref( + "github_connector_odoo.github_analysis_rule_python_has_odoo_addons" + ) + cls.repository_interface_github_13.write( + {"analysis_rule_ids": [(6, 0, cls.rule_has_odoo_addons.ids)]} + ) + cls.repo_branch_item = cls.repository_interface_github_13 + + def _set_github_responses(self): + res = super()._set_github_responses(self) + test_file = file_path( + "github_connector_odoo/tests/res/github_maintainer_tools_repos_with_ids.txt" + ) + domain = "https://raw.githubusercontent.com" + responses.add( + responses.GET, + f"{domain}/OCA/maintainer-tools/master/tools/repos_with_ids.txt", + json=open(test_file, "rb").read().decode("utf-8"), + status=200, + ) + return res + + +class TestGithubConnectorOdooAnalysisRule(TestGithubConnectorOdooAnalysisRuleBase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls._download_and_analyze(cls, cls.repo_branch_item) + + def test_github_module_version_analysis_rule_info(self): + info_ids = self.repo_branch_item.module_version_analysis_rule_info_ids + self.assertTrue( + self.rule_has_odoo_addons.id in info_ids.mapped("analysis_rule_id").ids + ) + version_item_info = info_ids.filtered( + lambda x: x.module_version_id.technical_name == "github_connector_odoo" + ) + for info_key in self.info_keys: + self.assertGreater(version_item_info[info_key], 0, info_key) + # Check analysis_rule_info_ids in module.version + verion_item = self.repo_branch_item.module_version_ids.filtered( + lambda x: x.technical_name == "github_connector_odoo" + ) + for info_key in self.info_keys: + self.assertGreater(verion_item.analysis_rule_info_ids[info_key], 0) diff --git a/github_connector_odoo/views/action.xml b/github_connector_odoo/views/action.xml new file mode 100644 index 00000000..9e5961fb --- /dev/null +++ b/github_connector_odoo/views/action.xml @@ -0,0 +1,47 @@ + + + + + + Odoo Modules + odoo.module + kanban,list,form + {'search_default_filter_with_version': True} + + + Odoo Module Versions + odoo.module.version + kanban,list,graph,form + + + Odoo Module Licenses + odoo.license + kanban,list,form + + + Odoo Module Authors + odoo.author + list,form + + + Odoo Bin Libs + odoo.lib.bin + list,form + + + Odoo Python Libs + odoo.lib.python + list,form + + + + Modules by Serie + odoo.module.version + graph + + + diff --git a/github_connector_odoo/views/menu.xml b/github_connector_odoo/views/menu.xml new file mode 100644 index 00000000..b598ef30 --- /dev/null +++ b/github_connector_odoo/views/menu.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + diff --git a/github_connector_odoo/views/view_github_analysis_rule.xml b/github_connector_odoo/views/view_github_analysis_rule.xml new file mode 100644 index 00000000..7b3f37c6 --- /dev/null +++ b/github_connector_odoo/views/view_github_analysis_rule.xml @@ -0,0 +1,26 @@ + + + + + github.analysis.rule + + + + + + + + + + + diff --git a/github_connector_odoo/views/view_github_organization.xml b/github_connector_odoo/views/view_github_organization.xml new file mode 100644 index 00000000..50ac0836 --- /dev/null +++ b/github_connector_odoo/views/view_github_organization.xml @@ -0,0 +1,23 @@ + + + + + github.organization + + + + + + + + + + + + + + diff --git a/github_connector_odoo/views/view_github_repository.xml b/github_connector_odoo/views/view_github_repository.xml new file mode 100644 index 00000000..69aa32e7 --- /dev/null +++ b/github_connector_odoo/views/view_github_repository.xml @@ -0,0 +1,17 @@ + + + + + github.repository + + + + + + + + diff --git a/github_connector_odoo/views/view_github_repository_branch.xml b/github_connector_odoo/views/view_github_repository_branch.xml new file mode 100644 index 00000000..6021c6a6 --- /dev/null +++ b/github_connector_odoo/views/view_github_repository_branch.xml @@ -0,0 +1,87 @@ + + + + + github.repository.branch + + + + + + + + + github.repository.branch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + github.repository.branch + + + + + + + Modules + + + + diff --git a/github_connector_odoo/views/view_odoo_author.xml b/github_connector_odoo/views/view_odoo_author.xml new file mode 100644 index 00000000..1229daa4 --- /dev/null +++ b/github_connector_odoo/views/view_odoo_author.xml @@ -0,0 +1,56 @@ + + + + + odoo.author + + + + + + + + odoo.author + + + + + + + + + odoo.author + +
+ +
+ +
+
+

+ +

+
+ +
+
+
+
+
diff --git a/github_connector_odoo/views/view_odoo_lib_bin.xml b/github_connector_odoo/views/view_odoo_lib_bin.xml new file mode 100644 index 00000000..7c217732 --- /dev/null +++ b/github_connector_odoo/views/view_odoo_lib_bin.xml @@ -0,0 +1,56 @@ + + + + + odoo.lib.bin + + + + + + + + odoo.lib.bin + + + + + + + + + odoo.lib.bin + +
+ +
+ +
+
+

+ +

+
+ +
+
+
+
+
diff --git a/github_connector_odoo/views/view_odoo_lib_python.xml b/github_connector_odoo/views/view_odoo_lib_python.xml new file mode 100644 index 00000000..98e8911a --- /dev/null +++ b/github_connector_odoo/views/view_odoo_lib_python.xml @@ -0,0 +1,56 @@ + + + + + odoo.lib.python + + + + + + + + odoo.lib.python + + + + + + + + + odoo.lib.python + +
+ +
+ +
+
+

+ +

+
+ +
+
+
+
+
diff --git a/github_connector_odoo/views/view_odoo_license.xml b/github_connector_odoo/views/view_odoo_license.xml new file mode 100644 index 00000000..b0e42194 --- /dev/null +++ b/github_connector_odoo/views/view_odoo_license.xml @@ -0,0 +1,119 @@ + + + + + odoo.license + + + + + + + + odoo.license + + + + + + + + + odoo.license + +
+ +
+ +
+ + + +
+

+ +

+
+ + + + + + + + + + +
+
+
+
+ + odoo.license + + + + + + + + + + +
+
+

+ +

+

+ + + + +
+
+

+ + + +
+
+
+
+
+
+
+
diff --git a/github_connector_odoo/views/view_odoo_module.xml b/github_connector_odoo/views/view_odoo_module.xml new file mode 100644 index 00000000..d5e773c4 --- /dev/null +++ b/github_connector_odoo/views/view_odoo_module.xml @@ -0,0 +1,165 @@ + + + + + odoo.module + + + + + + + + + + + + + + odoo.module + + + + + + + + + + + + + odoo.module + +
+ +
+ + +
+ +
+

+ +

+

+ +

+
+ + + + + + + + + + + + +
+
+
+
+ + odoo.module + + + + + + + + + +
+
+

+ +

+

+ +
+ + + +
+ +

+
+
+
+
+
+
+
+
diff --git a/github_connector_odoo/views/view_odoo_module_version.xml b/github_connector_odoo/views/view_odoo_module_version.xml new file mode 100644 index 00000000..7c3bebe3 --- /dev/null +++ b/github_connector_odoo/views/view_odoo_module_version.xml @@ -0,0 +1,221 @@ + + + + + odoo.module.version + + + + + + + + + + + + + + + + + + + + + + + + + odoo.module.version + + + + + + + + + + + + + + + + odoo.module.version + +
+ + +
+

+ +

+

+ +

+
+
+

+ +

+
+ + + + + + + + + + + + + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + +
+ + + + + + odoo.module.version + + + + + + + + + + + +
+
+

+ +

+

+ + +
+
+ +

+ + + + + + + + +
+
+
+
+
+
+
+ + odoo.module.version.rule.info + + + + + + + + + + + + + + diff --git a/github_connector_odoo/views/view_reporting.xml b/github_connector_odoo/views/view_reporting.xml new file mode 100644 index 00000000..3f507847 --- /dev/null +++ b/github_connector_odoo/views/view_reporting.xml @@ -0,0 +1,17 @@ + + + + + odoo.module.version + + + + + + + + diff --git a/test-requirements.txt b/test-requirements.txt index 2cb24f43..e8ba9a4b 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1 +1,2 @@ responses +Pygments