diff --git a/web_m2x_options/README.rst b/web_m2x_options/README.rst new file mode 100644 index 000000000000..c5eebbd50cdd --- /dev/null +++ b/web_m2x_options/README.rst @@ -0,0 +1,256 @@ +=============== +web_m2x_options +=============== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:1b49fc8dd9e43063909593ff776279d2a2f88180e4749c5216c820ce9119dbc4 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fweb-lightgray.png?logo=github + :target: https://github.com/OCA/web/tree/17.0/web_m2x_options + :alt: OCA/web +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/web-17-0/web-17-0-web_m2x_options + :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/web&target_branch=17.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This modules modifies "many2one" and "many2manytags" form widgets so as +to add some new display control options. + +Options provided includes possibility to remove "Create..." and/or +"Create and Edit..." entries from many2one drop down. You can also +change default number of proposition appearing in the drop-down. Or +prevent the dialog box poping in case of validation error. + +If not specified, the module will avoid proposing any of the create +options if the current user has no permission rights to create the +related object. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +in the field's options dict +--------------------------- + +``create`` *boolean* (Default: depends if user have create rights) + + Whether to display the "Create..." entry in dropdown panel. + +``create_edit`` *boolean* (Default: depends if user have create rights) + + Whether to display "Create and Edit..." entry in dropdown panel + +``m2o_dialog`` *boolean* (Default: depends if user have create rights) + + Whether to display the many2one dialog in case of validation error. + +``limit`` *int* (Default: openerp default value is ``7``) + + Number of displayed record in drop-down panel + +``search_more`` *boolean* + + Used to force disable/enable search more button. + +``field_color`` *string* + + A string to define the field used to define color. This option has to + be used with colors. + +``colors`` *dictionary* + + A dictionary to link field value with a HTML color. This option has + to be used with field_color. + +``no_open_edit`` *boolean* (Default: value of ``no_open`` which is +``False`` if not set) + + Causes a many2one not to offer to click through in edit mode, but + well in read mode + +``open`` *boolean* (Default: ``False``) + + Makes many2many_tags and one2many rows buttons that open the linked + resource + +``no_color_picker`` *boolean* (Default: ``False``) + + Deactivates the color picker on many2many_tags buttons to do nothing + (ignored if open is set) + +ir.config_parameter options +--------------------------- + +Now you can disable "Create..." and "Create and Edit..." entry for all +widgets in the odoo instance. If you disable one option, you can enable +it for particular field by setting "create: True" option directly on the +field definition. + +``web_m2x_options.create`` *boolean* (Default: depends if user have +create rights) + + Whether to display the "Create..." entry in dropdown panel for all + fields in the odoo instance. + +``web_m2x_options.create_edit`` *boolean* (Default: depends if user have +create rights) + + Whether to display "Create and Edit..." entry in dropdown panel for + all fields in the odoo instance. + +``web_m2x_options.m2o_dialog`` *boolean* (Default: depends if user have +create rights) + + Whether to display the many2one dialog in case of validation error + for all fields in the odoo instance. + +``web_m2x_options.limit`` *int* (Default: openerp default value is +``7``) + + Number of displayed record in drop-down panel for all fields in the + odoo instance + +``web_m2x_options.search_more`` *boolean* (Default: default value is +``False``) + + Whether the field should always show "Search more..." entry or not. + +``web_m2x_options.field_limit_entries`` *int* + + Number of displayed lines on all One2many fields + +To add these parameters go to Configuration -> Technical -> Parameters +-> System Parameters and add new parameters like: + +- web_m2x_options.create: False +- web_m2x_options.create_edit: False +- web_m2x_options.m2o_dialog: False +- web_m2x_options.limit: 10 +- web_m2x_options.search_more: True +- web_m2x_options.field_limit_entries: 5 + +Example +------- + +Your XML form view definition could contain: + +:: + + ... + + ... + +Known issues / Roadmap +====================== + +Double check that you have no inherited view that remove ``options`` you +set on a field ! If nothing works, add a debugger in the first line of +``_search method`` and enable debug mode in Odoo. When you write +something in a many2one field, javascript debugger should pause. If not +verify your installation. + +- Instead of making the tags rectangle clickable, I think it's better + to put the text as a clickable link, so we will get a consistent + behaviour/aspect with other clickable elements (many2one...). +- In edit mode, it would be great to add an icon like the one on + many2one fields to allow to open the many2many in a popup window. +- Include this feature as a configurable option via parameter to have + this behaviour by default in all many2many tags. + +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 +------- + +* initOS GmbH +* ACSONE SA/NV +* 0k.io +* Tecnativa + +Contributors +------------ + +- David Coninckx + +- Emanuel Cino + +- Holger Brunn + +- Nicolas JEUDY + +- Yannick Vaucher + +- Zakaria Makrelouf + +- `Tecnativa `__: + + - Jairo Llopis + - David Vidal + - Ernesto Tejeda + - Carlos Roca + +- Bhavesh Odedra + +- Dhara Solanki + (`http://www.initos.com `__) + +- + + - `Trobz `__: + + - Hoang Diep + +- Ammar Officewala aofficewala@opensourceintegrators.com + +Other credits +------------- + +The migration of this module from 15.0 to 16.0 was financially supported +by Camptocamp + +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/web `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_m2x_options/__init__.py b/web_m2x_options/__init__.py new file mode 100644 index 000000000000..0650744f6bc6 --- /dev/null +++ b/web_m2x_options/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/web_m2x_options/__manifest__.py b/web_m2x_options/__manifest__.py new file mode 100644 index 000000000000..518888f040dd --- /dev/null +++ b/web_m2x_options/__manifest__.py @@ -0,0 +1,21 @@ +# Copyright 2015 0k.io +# Copyright 2016 ACSONE SA/NV +# Copyright 2017 Tecnativa +# Copyright 2020 initOS GmbH. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "web_m2x_options", + "version": "17.0.1.0.0", + "category": "Web", + "author": "initOS GmbH," + "ACSONE SA/NV, " + "0k.io, " + "Tecnativa, " + "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/web", + "license": "AGPL-3", + "depends": ["web"], + "assets": {"web.assets_backend": ["web_m2x_options/static/src/components/*"]}, + "installable": True, +} diff --git a/web_m2x_options/i18n/ar.po b/web_m2x_options/i18n/ar.po new file mode 100644 index 000000000000..6229a766e8b9 --- /dev/null +++ b/web_m2x_options/i18n/ar.po @@ -0,0 +1,133 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Arabic (https://www.transifex.com/oca/teams/23907/ar/)\n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid ", are you sure it does not exist yet?" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create \"%s\"" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create and Edit" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create and edit..." +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Discard" +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "New: %s" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "No records" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Search More..." +msgstr "البحث عن المزيد ..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Start typing..." +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "System Parameter" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "You are creating a new" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "as a new" +msgstr "" + +#, python-format +#~ msgid "Cancel" +#~ msgstr "إلغاء" + +#, python-format +#~ msgid "Create \"%s\"" +#~ msgstr "إنشاء \"%s\"" + +#, python-format +#~ msgid "Create and Edit..." +#~ msgstr "إنشاء وتحرير ..." diff --git a/web_m2x_options/i18n/de.po b/web_m2x_options/i18n/de.po new file mode 100644 index 000000000000..2ac3cf2178fd --- /dev/null +++ b/web_m2x_options/i18n/de.po @@ -0,0 +1,159 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# OCA Transbot , 2017 +# Rudolf Schnapka , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2023-06-20 11:09+0000\n" +"Last-Translator: Nils Coenen \n" +"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"Language: de\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: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid ", are you sure it does not exist yet?" +msgstr ", bist du sicher, dass es noch nicht existiert?" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create" +msgstr "Anlegen" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create \"%s\"" +msgstr "Erstelle \"%s\"" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create and Edit" +msgstr "Erstellen und bearbeiten" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create and edit..." +msgstr "Erstellen und bearbeiten..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Discard" +msgstr "Verwerfen" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "New: %s" +msgstr "Neu: %s" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "No records" +msgstr "Keine Datensätze" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "Open: " +msgstr "Öffnen: " + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Search More..." +msgstr "Suche weitere..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Start typing..." +msgstr "Beginne zu tippen..." + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "System Parameter" +msgstr "Systemparameter" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "You are creating a new" +msgstr "Du erstellst ein Neues" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "as a new" +msgstr "als neu" + +#, python-format +#~ msgid "Cancel" +#~ msgstr "Abbrechen" + +#, python-format +#~ msgid "Create \"%s\"" +#~ msgstr "Anlegen \"%s" + +#, python-format +#~ msgid "Create a %s" +#~ msgstr "Eine %s anlegen" + +#, python-format +#~ msgid "Create and Edit..." +#~ msgstr "Anlegen und Bearbeiten" + +#, python-format +#~ msgid "Create and edit" +#~ msgstr "Anlegen und bearbeiten" + +#, python-format +#~ msgid "No results to show..." +#~ msgstr "Keine Resultate zu zeigen..." + +#, python-format +#~ msgid "Quick search: %s" +#~ msgstr "Schnellsuche: %s" + +#, python-format +#~ msgid "You are creating a new %s, are you sure it does not exist yet?" +#~ msgstr "" +#~ "Sie legen eine neue %s an, sind Sie sicher, dass diese nicht bereits " +#~ "vorhanden ist?" + +#~ msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" +#~ msgstr "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" diff --git a/web_m2x_options/i18n/es.po b/web_m2x_options/i18n/es.po new file mode 100644 index 000000000000..bb52ab95c851 --- /dev/null +++ b/web_m2x_options/i18n/es.po @@ -0,0 +1,145 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2023-09-02 20:35+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\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: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid ", are you sure it does not exist yet?" +msgstr ",¿Está seguro de que aún no existe?" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create" +msgstr "Crear" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create \"%s\"" +msgstr "Crear \"%s\"" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create and Edit" +msgstr "Crear y Editar" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create and edit..." +msgstr "Crear y editar..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Discard" +msgstr "Descartar" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_http +msgid "HTTP Routing" +msgstr "Enrutamiento HTTP" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "New: %s" +msgstr "Nuevo: %s" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "No records" +msgstr "Sin registros" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "Open: " +msgstr "Abrir " + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Search More..." +msgstr "Buscar más..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Start typing..." +msgstr "Empieza a escribir..." + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "System Parameter" +msgstr "Parámetro del Sistema" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "You are creating a new" +msgstr "Estás creando un nuevo" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "as a new" +msgstr "como un nuevo" + +#, python-format +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#, python-format +#~ msgid "Create \"%s\"" +#~ msgstr "Crear \"%s\"" + +#, python-format +#~ msgid "Create a %s" +#~ msgstr "Crear un %s" + +#, python-format +#~ msgid "Create and Edit..." +#~ msgstr "Crear y editar..." + +#, python-format +#~ msgid "Create and edit" +#~ msgstr "Crear y editar" + +#, python-format +#~ msgid "You are creating a new %s, are you sure it does not exist yet?" +#~ msgstr "Está creando un nuevo %s, ¿está seguro de no existe ya?" diff --git a/web_m2x_options/i18n/es_BO.po b/web_m2x_options/i18n/es_BO.po new file mode 100644 index 000000000000..6b58892e0568 --- /dev/null +++ b/web_m2x_options/i18n/es_BO.po @@ -0,0 +1,116 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: es_BO\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid ", are you sure it does not exist yet?" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create \"%s\"" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create and Edit" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create and edit..." +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Discard" +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "New: %s" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "No records" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Search More..." +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Start typing..." +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "System Parameter" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "You are creating a new" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "as a new" +msgstr "" diff --git a/web_m2x_options/i18n/fi.po b/web_m2x_options/i18n/fi.po new file mode 100644 index 000000000000..69e81f6af92f --- /dev/null +++ b/web_m2x_options/i18n/fi.po @@ -0,0 +1,132 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Finnish (https://www.transifex.com/oca/teams/23907/fi/)\n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid ", are you sure it does not exist yet?" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create \"%s\"" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create and Edit" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create and edit..." +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Discard" +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "New: %s" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "No records" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Search More..." +msgstr "Hae lisää..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Start typing..." +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "System Parameter" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "You are creating a new" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "as a new" +msgstr "" + +#, python-format +#~ msgid "Cancel" +#~ msgstr "Peru" + +#, python-format +#~ msgid "Create \"%s\"" +#~ msgstr "Luo \"%s\"" + +#, python-format +#~ msgid "Create and Edit..." +#~ msgstr "Luo ja muokkaa..." diff --git a/web_m2x_options/i18n/fr.po b/web_m2x_options/i18n/fr.po new file mode 100644 index 000000000000..52eb29c8318a --- /dev/null +++ b/web_m2x_options/i18n/fr.po @@ -0,0 +1,158 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2024-02-02 11:35+0000\n" +"Last-Translator: Hughes Damry \n" +"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"Language: fr\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: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid ", are you sure it does not exist yet?" +msgstr ", êtes-vous sûr qu'il n'existe pas déjà ?" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create" +msgstr "Créer" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create \"%s\"" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create and Edit" +msgstr "Créer et Modifier" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create and edit..." +msgstr "Créer et modifier..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Discard" +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "New: %s" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "No records" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "Open: " +msgstr "Ouvrir : " + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Search More..." +msgstr "Rechercher plus..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Start typing..." +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "System Parameter" +msgstr "Paramètres système" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "You are creating a new" +msgstr "Vous créez un nouveau" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "as a new" +msgstr "" + +#, python-format +#~ msgid "Cancel" +#~ msgstr "Annuler" + +#, python-format +#~ msgid "Create \"%s\"" +#~ msgstr "Creer \"%s\"" + +#, python-format +#~ msgid "Create a %s" +#~ msgstr "Créer un %s" + +#, python-format +#~ msgid "Create and Edit..." +#~ msgstr "Créer et modifier..." + +#, python-format +#~ msgid "Create and edit" +#~ msgstr "Créer et modifier" + +#, python-format +#~ msgid "No results to show..." +#~ msgstr "Aucun résultat à afficher..." + +#, python-format +#~ msgid "Quick search: %s" +#~ msgstr "Recherche rapide: %s" + +#, python-format +#~ msgid "You are creating a new %s, are you sure it does not exist yet?" +#~ msgstr "" +#~ "Vous créez un nouveau %s, est-ce que vous êtes sur qu'il n'existe pas " +#~ "déjà ?" + +#~ msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" +#~ msgstr "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" diff --git a/web_m2x_options/i18n/hr.po b/web_m2x_options/i18n/hr.po new file mode 100644 index 000000000000..d828c7182758 --- /dev/null +++ b/web_m2x_options/i18n/hr.po @@ -0,0 +1,150 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# Bole , 2017 +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid ", are you sure it does not exist yet?" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create" +msgstr "Kreiraj" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create \"%s\"" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create and Edit" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create and edit..." +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Discard" +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "New: %s" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "No records" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Search More..." +msgstr "Traži dalje..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Start typing..." +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "System Parameter" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "You are creating a new" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "as a new" +msgstr "" + +#, python-format +#~ msgid "Cancel" +#~ msgstr "Otkaži" + +#, python-format +#~ msgid "Create \"%s\"" +#~ msgstr "Kreiraj \" %s\"" + +#, python-format +#~ msgid "Create a %s" +#~ msgstr "Kreiraj %s" + +#, python-format +#~ msgid "Create and Edit..." +#~ msgstr "Kreiraj i uredi..." + +#, python-format +#~ msgid "Create and edit" +#~ msgstr "Kreiraj i uredi" + +#, python-format +#~ msgid "You are creating a new %s, are you sure it does not exist yet?" +#~ msgstr "Želite kreirati novi %s, jeste li sigurni da već ne postoji?" + +#, fuzzy +#~ msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" +#~ msgstr "!(opcije isključuju otvaranje ili uređivanje)" diff --git a/web_m2x_options/i18n/it.po b/web_m2x_options/i18n/it.po new file mode 100644 index 000000000000..4b8c94890b3b --- /dev/null +++ b/web_m2x_options/i18n/it.po @@ -0,0 +1,133 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2023-12-24 18:42+0000\n" +"Last-Translator: mymage \n" +"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\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: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid ", are you sure it does not exist yet?" +msgstr ", si è sicuri che nn esista già?" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create" +msgstr "Crea" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create \"%s\"" +msgstr "Crea \"%s\"" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create and Edit" +msgstr "Crea e modifica" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create and edit..." +msgstr "Crea e modifica..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Discard" +msgstr "Abbandona" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_http +msgid "HTTP Routing" +msgstr "Instradamento HTTP" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "New: %s" +msgstr "Nuovo: %s" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "No records" +msgstr "Nessun record" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "Open: " +msgstr "Apri: " + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Search More..." +msgstr "Cerca altro..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Start typing..." +msgstr "Inizia a scrivere..." + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "System Parameter" +msgstr "Parametro di sistema" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "You are creating a new" +msgstr "Si sta creando un nuovo" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "as a new" +msgstr "come nuovo" + +#, python-format +#~ msgid "Cancel" +#~ msgstr "Annulla" + +#, python-format +#~ msgid "Create \"%s\"" +#~ msgstr "Crea \"%s\"" + +#, python-format +#~ msgid "Create and Edit..." +#~ msgstr "Crea e Modifica..." diff --git a/web_m2x_options/i18n/nl.po b/web_m2x_options/i18n/nl.po new file mode 100644 index 000000000000..d14e5e621dbb --- /dev/null +++ b/web_m2x_options/i18n/nl.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-05-17 20:47+0000\n" +"Last-Translator: Bosd \n" +"Language-Team: none\n" +"Language: nl\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.3.2\n" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid ", are you sure it does not exist yet?" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create" +msgstr "Aanmaken" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create \"%s\"" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create and Edit" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create and edit..." +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Discard" +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "New: %s" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "No records" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "Open: " +msgstr "Open: " + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Search More..." +msgstr "Zoek meer..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Start typing..." +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "System Parameter" +msgstr "Systeem Parameter" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "You are creating a new" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "as a new" +msgstr "" + +#, python-format +#~ msgid "Cancel" +#~ msgstr "Annuleren" + +#, fuzzy, python-format +#~ msgid "Create \"%s\"" +#~ msgstr "Creér%s\"" + +#, python-format +#~ msgid "Create a %s" +#~ msgstr "Maak een %s" + +#, python-format +#~ msgid "Create and Edit..." +#~ msgstr "Aanmaken en bewerken..." + +#, python-format +#~ msgid "Create and edit" +#~ msgstr "Aanmaken en bewerken" + +#, python-format +#~ msgid "No results to show..." +#~ msgstr "Geen resultaten om weer te geven..." + +#, python-format +#~ msgid "Quick search: %s" +#~ msgstr "Snel zoeken: %s" + +#, python-format +#~ msgid "You are creating a new %s, are you sure it does not exist yet?" +#~ msgstr "U maakt een nieuw %s, weet u het zeker dat dit nog niet bestaat?" + +#~ msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" +#~ msgstr "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" + +#~ msgid "Display Name" +#~ msgstr "Weergavenaam" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Laatst Gewijzigd op" diff --git a/web_m2x_options/i18n/nl_NL.po b/web_m2x_options/i18n/nl_NL.po new file mode 100644 index 000000000000..8f89ec32fe23 --- /dev/null +++ b/web_m2x_options/i18n/nl_NL.po @@ -0,0 +1,125 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# Peter Hageman , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-07-01 03:35+0000\n" +"PO-Revision-Date: 2017-07-01 03:35+0000\n" +"Last-Translator: Peter Hageman , 2017\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid ", are you sure it does not exist yet?" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create" +msgstr "Aanmaken" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create \"%s\"" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create and Edit" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create and edit..." +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Discard" +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "New: %s" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "No records" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Search More..." +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Start typing..." +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "System Parameter" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "You are creating a new" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "as a new" +msgstr "" + +#, python-format +#~ msgid "Cancel" +#~ msgstr "Annuleer" diff --git a/web_m2x_options/i18n/pt_BR.po b/web_m2x_options/i18n/pt_BR.po new file mode 100644 index 000000000000..26e0ee6ef4de --- /dev/null +++ b/web_m2x_options/i18n/pt_BR.po @@ -0,0 +1,155 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# OCA Transbot , 2017 +# Rodrigo de Almeida Sottomaior Macedo , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2019-08-26 16:01+0000\n" +"Last-Translator: Rodrigo Macedo \n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" +"teams/23907/pt_BR/)\n" +"Language: pt_BR\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 3.8\n" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid ", are you sure it does not exist yet?" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create" +msgstr "Criar" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create \"%s\"" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create and Edit" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create and edit..." +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Discard" +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "New: %s" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "No records" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "Open: " +msgstr "Abrir: " + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Search More..." +msgstr "Buscar mais..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Start typing..." +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "System Parameter" +msgstr "Parâmetros do Sistema" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "You are creating a new" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "as a new" +msgstr "" + +#, python-format +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#, python-format +#~ msgid "Create \"%s\"" +#~ msgstr "Criar \"%s\"" + +#, python-format +#~ msgid "Create a %s" +#~ msgstr "Criar um %s" + +#, python-format +#~ msgid "Create and Edit..." +#~ msgstr "Criar e editar.." + +#, python-format +#~ msgid "Create and edit" +#~ msgstr "Criar e editar" + +#, python-format +#~ msgid "No results to show..." +#~ msgstr "sem resultado para mostrar..." + +#, python-format +#~ msgid "You are creating a new %s, are you sure it does not exist yet?" +#~ msgstr "" +#~ "Você está criando um novo %s, você tem certeza de que ainda não existe?" + +#~ msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" +#~ msgstr "!(widget.options.no_open || widget.nodeOptions.no_open_edit)" diff --git a/web_m2x_options/i18n/sl.po b/web_m2x_options/i18n/sl.po new file mode 100644 index 000000000000..d0855cc98103 --- /dev/null +++ b/web_m2x_options/i18n/sl.po @@ -0,0 +1,133 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid ", are you sure it does not exist yet?" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create \"%s\"" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create and Edit" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create and edit..." +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Discard" +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "New: %s" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "No records" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Search More..." +msgstr "Poišči več..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Start typing..." +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "System Parameter" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "You are creating a new" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "as a new" +msgstr "" + +#, python-format +#~ msgid "Cancel" +#~ msgstr "Preklic" + +#, python-format +#~ msgid "Create \"%s\"" +#~ msgstr "Ustvari \"%s\"" + +#, python-format +#~ msgid "Create and Edit..." +#~ msgstr "Ustvari in urejaj..." diff --git a/web_m2x_options/i18n/tr.po b/web_m2x_options/i18n/tr.po new file mode 100644 index 000000000000..332259db585a --- /dev/null +++ b/web_m2x_options/i18n/tr.po @@ -0,0 +1,132 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid ", are you sure it does not exist yet?" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create \"%s\"" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create and Edit" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create and edit..." +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Discard" +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "New: %s" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "No records" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Search More..." +msgstr "Daha Fazla..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Start typing..." +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "System Parameter" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "You are creating a new" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "as a new" +msgstr "" + +#, python-format +#~ msgid "Cancel" +#~ msgstr "İptal" + +#, python-format +#~ msgid "Create \"%s\"" +#~ msgstr "Oluştur \"%s\"" + +#, python-format +#~ msgid "Create and Edit..." +#~ msgstr "Oluştur ve düzenle..." diff --git a/web_m2x_options/i18n/web_m2x_options.pot b/web_m2x_options/i18n/web_m2x_options.pot new file mode 100644 index 000000000000..d3fc831b225d --- /dev/null +++ b/web_m2x_options/i18n/web_m2x_options.pot @@ -0,0 +1,115 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid ", are you sure it does not exist yet?" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create \"%s\"" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create and Edit" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create and edit..." +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Discard" +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "New: %s" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "No records" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Search More..." +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Start typing..." +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "System Parameter" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "You are creating a new" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "as a new" +msgstr "" diff --git a/web_m2x_options/i18n/zh_CN.po b/web_m2x_options/i18n/zh_CN.po new file mode 100644 index 000000000000..df164a1e0a7f --- /dev/null +++ b/web_m2x_options/i18n/zh_CN.po @@ -0,0 +1,153 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-07-08 05:19+0000\n" +"Last-Translator: 黎伟杰 <674416404@qq.com>\n" +"Language-Team: none\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 3.10\n" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid ", are you sure it does not exist yet?" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create" +msgstr "创建" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create \"%s\"" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Create and Edit" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Create and edit..." +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "Discard" +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "New: %s" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "No records" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/form.esm.js:0 +#, python-format +msgid "Open: " +msgstr "打开: " + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Search More..." +msgstr "搜索更多..." + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/relational_utils.esm.js:0 +#, python-format +msgid "Start typing..." +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "System Parameter" +msgstr "系统参数" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "You are creating a new" +msgstr "" + +#. module: web_m2x_options +#. odoo-javascript +#: code:addons/web_m2x_options/static/src/components/base.xml:0 +#, python-format +msgid "as a new" +msgstr "" + +#, python-format +#~ msgid "Cancel" +#~ msgstr "取消" + +#, python-format +#~ msgid "Create \"%s\"" +#~ msgstr "创建 \"%s\"" + +#, python-format +#~ msgid "Create a %s" +#~ msgstr "创建一个%s" + +#, python-format +#~ msgid "Create and Edit..." +#~ msgstr "创建和编辑..." + +#, python-format +#~ msgid "Create and edit" +#~ msgstr "创建和编辑" + +#, python-format +#~ msgid "No results to show..." +#~ msgstr "没有结果显示..." + +#, python-format +#~ msgid "Quick search: %s" +#~ msgstr "快速搜索: %s" + +#, python-format +#~ msgid "You are creating a new %s, are you sure it does not exist yet?" +#~ msgstr "你正在创建一个新的%s,你确定它还不存在吗?" + +#~ msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" +#~ msgstr "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" diff --git a/web_m2x_options/models/__init__.py b/web_m2x_options/models/__init__.py new file mode 100644 index 000000000000..60b90d385bc2 --- /dev/null +++ b/web_m2x_options/models/__init__.py @@ -0,0 +1,2 @@ +from . import ir_config_parameter +from . import ir_http diff --git a/web_m2x_options/models/ir_config_parameter.py b/web_m2x_options/models/ir_config_parameter.py new file mode 100644 index 000000000000..c24506dd866b --- /dev/null +++ b/web_m2x_options/models/ir_config_parameter.py @@ -0,0 +1,18 @@ +from odoo import api, models + + +class IrConfigParameter(models.Model): + _inherit = "ir.config_parameter" + + @api.model + def get_web_m2x_options(self): + opts = [ + "web_m2x_options.create", + "web_m2x_options.create_edit", + "web_m2x_options.limit", + "web_m2x_options.search_more", + "web_m2x_options.m2o_dialog", + "web_m2x_options.field_limit_entries", + ] + values = self.sudo().search_read([["key", "in", opts]], ["key", "value"]) + return {res["key"]: res["value"] for res in values} diff --git a/web_m2x_options/models/ir_http.py b/web_m2x_options/models/ir_http.py new file mode 100644 index 000000000000..f7933c4d28c1 --- /dev/null +++ b/web_m2x_options/models/ir_http.py @@ -0,0 +1,11 @@ +from odoo import models + + +class Http(models.AbstractModel): + _inherit = "ir.http" + + def session_info(self): + IrConfigSudo = self.env["ir.config_parameter"].sudo() + session_info = super().session_info() + session_info.update({"web_m2x_options": IrConfigSudo.get_web_m2x_options()}) + return session_info diff --git a/web_m2x_options/pyproject.toml b/web_m2x_options/pyproject.toml new file mode 100644 index 000000000000..4231d0cccb3d --- /dev/null +++ b/web_m2x_options/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/web_m2x_options/readme/CONTRIBUTORS.md b/web_m2x_options/readme/CONTRIBUTORS.md new file mode 100644 index 000000000000..03ffe5585f6f --- /dev/null +++ b/web_m2x_options/readme/CONTRIBUTORS.md @@ -0,0 +1,28 @@ + - David Coninckx \<\> + + - Emanuel Cino \<\> + + - Holger Brunn \<\> + + - Nicolas JEUDY \<\> + + - Yannick Vaucher \<\> + + - Zakaria Makrelouf \<\> + + - [Tecnativa](https://www.tecnativa.com): + + - Jairo Llopis \<\> + - David Vidal \<\> + - Ernesto Tejeda \<\> + - Carlos Roca + + - Bhavesh Odedra \<\> + + - Dhara Solanki \<\> + () + + - - [Trobz](https://trobz.com): + + - Hoang Diep \<\> + - Ammar Officewala diff --git a/web_m2x_options/readme/CREDITS.md b/web_m2x_options/readme/CREDITS.md new file mode 100644 index 000000000000..291e14c81e2a --- /dev/null +++ b/web_m2x_options/readme/CREDITS.md @@ -0,0 +1,2 @@ +The migration of this module from 15.0 to 16.0 was financially supported +by Camptocamp diff --git a/web_m2x_options/readme/DESCRIPTION.md b/web_m2x_options/readme/DESCRIPTION.md new file mode 100644 index 000000000000..5e4ccd0cf919 --- /dev/null +++ b/web_m2x_options/readme/DESCRIPTION.md @@ -0,0 +1,11 @@ +This modules modifies "many2one" and "many2manytags" form widgets so as +to add some new display control options. + +Options provided includes possibility to remove "Create..." and/or +"Create and Edit..." entries from many2one drop down. You can also +change default number of proposition appearing in the drop-down. Or +prevent the dialog box poping in case of validation error. + +If not specified, the module will avoid proposing any of the create +options if the current user has no permission rights to create the +related object. diff --git a/web_m2x_options/readme/ROADMAP.md b/web_m2x_options/readme/ROADMAP.md new file mode 100644 index 000000000000..6441bd726834 --- /dev/null +++ b/web_m2x_options/readme/ROADMAP.md @@ -0,0 +1,13 @@ +Double check that you have no inherited view that remove `options` you +set on a field \! If nothing works, add a debugger in the first line of +`_search method` and enable debug mode in Odoo. When you write something +in a many2one field, javascript debugger should pause. If not verify +your installation. + + - Instead of making the tags rectangle clickable, I think it's better + to put the text as a clickable link, so we will get a consistent + behaviour/aspect with other clickable elements (many2one...). + - In edit mode, it would be great to add an icon like the one on + many2one fields to allow to open the many2many in a popup window. + - Include this feature as a configurable option via parameter to have + this behaviour by default in all many2many tags. diff --git a/web_m2x_options/readme/USAGE.md b/web_m2x_options/readme/USAGE.md new file mode 100644 index 000000000000..69473855928d --- /dev/null +++ b/web_m2x_options/readme/USAGE.md @@ -0,0 +1,104 @@ +## in the field's options dict + +`create` *boolean* (Default: depends if user have create rights) + +> Whether to display the "Create..." entry in dropdown panel. + +`create_edit` *boolean* (Default: depends if user have create rights) + +> Whether to display "Create and Edit..." entry in dropdown panel + +`m2o_dialog` *boolean* (Default: depends if user have create rights) + +> Whether to display the many2one dialog in case of validation error. + +`limit` *int* (Default: openerp default value is `7`) + +> Number of displayed record in drop-down panel + +`search_more` *boolean* + +> Used to force disable/enable search more button. + +`field_color` *string* + +> A string to define the field used to define color. This option has to +> be used with colors. + +`colors` *dictionary* + +> A dictionary to link field value with a HTML color. This option has to +> be used with field\_color. + +`no_open_edit` *boolean* (Default: value of `no_open` which is `False` +if not set) + +> Causes a many2one not to offer to click through in edit mode, but well +> in read mode + +`open` *boolean* (Default: `False`) + +> Makes many2many\_tags and one2many rows buttons that open the linked +> resource + +`no_color_picker` *boolean* (Default: `False`) + +> Deactivates the color picker on many2many\_tags buttons to do nothing +> (ignored if open is set) + +## ir.config\_parameter options + +Now you can disable "Create..." and "Create and Edit..." entry for all +widgets in the odoo instance. If you disable one option, you can enable +it for particular field by setting "create: True" option directly on the +field definition. + +`web_m2x_options.create` *boolean* (Default: depends if user have create +rights) + +> Whether to display the "Create..." entry in dropdown panel for all +> fields in the odoo instance. + +`web_m2x_options.create_edit` *boolean* (Default: depends if user have +create rights) + +> Whether to display "Create and Edit..." entry in dropdown panel for +> all fields in the odoo instance. + +`web_m2x_options.m2o_dialog` *boolean* (Default: depends if user have +create rights) + +> Whether to display the many2one dialog in case of validation error for +> all fields in the odoo instance. + +`web_m2x_options.limit` *int* (Default: openerp default value is `7`) + +> Number of displayed record in drop-down panel for all fields in the +> odoo instance + +`web_m2x_options.search_more` *boolean* (Default: default value is +`False`) + +> Whether the field should always show "Search more..." entry or not. + +`web_m2x_options.field_limit_entries` *int* + +> Number of displayed lines on all One2many fields + +To add these parameters go to Configuration -\> Technical -\> Parameters +-\> System Parameters and add new parameters like: + + - web\_m2x\_options.create: False + - web\_m2x\_options.create\_edit: False + - web\_m2x\_options.m2o\_dialog: False + - web\_m2x\_options.limit: 10 + - web\_m2x\_options.search\_more: True + - web\_m2x\_options.field\_limit\_entries: 5 + +## Example + +Your XML form view definition could contain: + + ... + + ... diff --git a/web_m2x_options/static/description/icon.png b/web_m2x_options/static/description/icon.png new file mode 100644 index 000000000000..3a0328b516c4 Binary files /dev/null and b/web_m2x_options/static/description/icon.png differ diff --git a/web_m2x_options/static/description/index.html b/web_m2x_options/static/description/index.html new file mode 100644 index 000000000000..bf406ab1885f --- /dev/null +++ b/web_m2x_options/static/description/index.html @@ -0,0 +1,412 @@ + + + + + + +Add new options for many2one field + + + +
+

Add new options for many2one field

+ +
+

Description

+

This modules modifies "many2one" and "many2manytags" form widgets so as to add some new display +control options.

+

New: support many2manytags widget !

+

New: support global option management with ir.config_parameter !

+

Options provided includes possibility to remove "Create..." and/or "Create and +Edit..." entries from many2one drop down. You can also change default number of +proposition appearing in the drop-down. Or prevent the dialog box poping in +case of validation error.

+

If not specified, the module will avoid proposing any of the create options +if the current user have no permission rights to create the related object.

+
+
+

Requirements

+

Was tested on openerp 8.0, trunk, saas-5 branch. New way to import js file. (thanks to tfossoul)

+
+
+

New options

+

create boolean (Default: depends if user have create rights)

+
+Whether to display the "Create..." entry in dropdown panel.
+

create_edit boolean (Default: depends if user have create rights)

+
+Whether to display "Create and Edit..." entry in dropdown panel
+

m2o_dialog boolean (Default: depends if user have create rights)

+
+Whether to display the many2one dialog in case of validation error.
+

limit int (Default: openerp default value is 7)

+
+Number of displayed record in drop-down panel
+
+
+

ir.config_parameter options

+

Now you can disable "Create..." and "Create and Edit..." entry for all widgets in the odoo instance. +If you disable one option, you can enable it for particular field by setting "create: True" option directly on the field definition.

+

web_m2x_options.create boolean (Default: depends if user have create rights)

+
+Whether to display the "Create..." entry in dropdown panel for all fields in the odoo instance.
+

web_m2x_options.create_edit boolean (Default: depends if user have create rights)

+
+Whether to display "Create and Edit..." entry in dropdown panel for all fields in the odoo instance.
+

web_m2x_options.limit int (Default: openerp default value is 7)

+
+Number of displayed record in drop-down panel for all fields in the odoo instance
+

To add these parameters go to Configuration -> Technical -> Parameters -> System Parameters and add new parameters like:

+
    +
  • web_m2x_options.create: False
  • +
  • web_m2x_options.create_edit: False
  • +
  • web_m2x_options.limit: 10
  • +
+
+
+

Example

+

Your XML form view definition could contain:

+
+...
+<field name="partner_id" options="{'limit': 10, 'create': false, 'create_edit': false}"/>
+...
+
+
+
+

Note

+

Double check that you have no inherited view that remote options you set on a field ! +If nothing work, add a debugger in the first ligne of get_search_result method and enable debug mode in OpenERP. When you write something in a many2one field, javascript debugger should pause. If not verify your installation.

+
+
+ + diff --git a/web_m2x_options/static/src/components/base.xml b/web_m2x_options/static/src/components/base.xml new file mode 100644 index 000000000000..bd89afbb56c3 --- /dev/null +++ b/web_m2x_options/static/src/components/base.xml @@ -0,0 +1,46 @@ + + + + + + + + {{ option.style }} + + + + + + + +
+ You are creating a new as a new , are you sure it does not exist yet? +
+ + + + + +
+
+
diff --git a/web_m2x_options/static/src/components/form.esm.js b/web_m2x_options/static/src/components/form.esm.js new file mode 100644 index 000000000000..fcc266d5c060 --- /dev/null +++ b/web_m2x_options/static/src/components/form.esm.js @@ -0,0 +1,439 @@ +/** @odoo-module **/ +import {session} from "@web/session"; +import { + Many2ManyTagsField, + Many2ManyTagsFieldColorEditable, +} from "@web/views/fields/many2many_tags/many2many_tags_field"; + +import {Dialog} from "@web/core/dialog/dialog"; +import {FormController} from "@web/views/form/form_controller"; +import {FormViewDialog} from "@web/views/view_dialogs/form_view_dialog"; +import {Many2OneAvatarField} from "@web/views/fields/many2one_avatar/many2one_avatar_field"; +import {Many2OneBarcodeField} from "@web/views/fields/many2one_barcode/many2one_barcode_field"; +import {Many2OneField, many2OneField} from "@web/views/fields/many2one/many2one_field"; +import {PartnerMany2XAutocomplete} from "@partner_autocomplete/js/partner_autocomplete_many2one"; +import {ReferenceField} from "@web/views/fields/reference/reference_field"; +import {X2ManyField} from "@web/views/fields/x2many/x2many_field"; +import {isX2Many} from "@web/views/utils"; +import {is_option_set} from "@web_m2x_options/components/relational_utils.esm"; +import {patch} from "@web/core/utils/patch"; +import {sprintf} from "@web/core/utils/strings"; +import {useService} from "@web/core/utils/hooks"; +import {Many2XAutocomplete} from "@web/views/fields/relational_utils"; +import {_t} from "@web/core/l10n/translation"; + +const {Component} = owl; + +/** + * Patch Many2ManyTagsField + **/ +patch(Many2ManyTagsField.prototype, { + setup() { + super.setup(...arguments); + this.actionService = useService("action"); + }, + /** + * @override + */ + getTagProps(record) { + const props = super.getTagProps(...arguments); + props.onClick = (ev) => this.onMany2ManyBadgeClick(ev, record); + return props; + }, + async onMany2ManyBadgeClick(event, record) { + var self = this; + if (self.props.open) { + var context = self.context; + var id = record.data.id; + if (self.props.readonly) { + event.preventDefault(); + event.stopPropagation(); + const action = await self.orm.call( + self.props.relation, + "get_formview_action", + [[id]], + {context: context} + ); + self.actionService.doAction(action); + } else { + const view_id = await self.orm.call( + self.props.relation, + "get_formview_id", + [[id]], + {context: context} + ); + + const write_access = await self.orm.call( + self.props.relation, + "check_access_rights", + [], + {operation: "write", raise_exception: false} + ); + var can_write = self.props.canWrite; + self.dialog.add(FormViewDialog, { + resModel: self.props.relation, + resId: id, + context: context, + title: _t("Open: ") + self.string, + viewId: view_id, + mode: !can_write || !write_access ? "readonly" : "edit", + onRecordSaved: () => self.props.value.model.load(), + }); + } + } + }, +}); + +Many2ManyTagsField.props = { + ...Many2ManyTagsField.props, + open: {type: Boolean, optional: true}, + canWrite: {type: Boolean, optional: true}, + nodeOptions: {type: Object, optional: true}, +}; + +const Many2ManyTagsFieldExtractProps = Many2ManyTagsField.extractProps; +Many2ManyTagsField.extractProps = ({attrs, field}) => { + const canOpen = Boolean(attrs.options.open); + const canWrite = attrs.can_write && Boolean(JSON.parse(attrs.can_write)); + return Object.assign(Many2ManyTagsFieldExtractProps({attrs, field}), { + open: canOpen, + canWrite: canWrite, + nodeOptions: attrs.options, + }); +}; + +/** + * Many2ManyTagsFieldColorEditable + **/ +patch(Many2ManyTagsFieldColorEditable.prototype, { + async onBadgeClick(event, record) { + if (this.props.canEditColor && !this.props.open) { + super.onBadgeClick(...arguments); + } + if (this.props.open) { + Many2ManyTagsField.prototype.onMany2ManyBadgeClick.bind(this)( + event, + record + ); + } + }, +}); + +Many2ManyTagsFieldColorEditable.props = { + ...Many2ManyTagsFieldColorEditable.props, + open: {type: Boolean, optional: true}, + canWrite: {type: Boolean, optional: true}, + nodeOptions: {type: Object, optional: true}, +}; + +/** + * CreateConfirmationDialog + * New customized component for Many2One Field + **/ + +class CreateConfirmationDialog extends Component { + get title() { + return sprintf(_t("New: %s"), this.props.name); + } + + async onCreate() { + await this.props.create(); + this.props.close(); + } + async onCreateEdit() { + await this.props.createEdit(); + this.props.close(); + } +} +CreateConfirmationDialog.components = {Dialog}; +CreateConfirmationDialog.template = + "web_m2x_options.Many2OneField.CreateConfirmationDialog"; + +/** + * Many2OneField + **/ + +patch(PartnerMany2XAutocomplete.prototype, { + setup() { + super.setup(...arguments); + }, +}); +PartnerMany2XAutocomplete.props = { + ...PartnerMany2XAutocomplete.props, + canCreate: {type: Boolean, optional: true}, + canWrite: {type: Boolean, optional: true}, + nodeOptions: {type: Object, optional: true}, + searchMore: {type: Object, optional: true}, +}; + +patch(Many2XAutocomplete.prototype, { + setup() { + super.setup(...arguments); + }, +}); + +patch(Many2OneField.prototype, { + setup() { + super.setup(...arguments); + this.ir_options = session.web_m2x_options; + }, + /** + * @override + */ + get Many2XAutocompleteProps() { + return { + ...super.Many2XAutocompleteProps, + searchLimit: this.props.searchLimit, + searchMore: this.props.searchMore, + canCreate: this.props.canCreate, + nodeOptions: this.props.nodeOptions, + }; + }, + + async openConfirmationDialog(request) { + var m2o_dialog_opt = + is_option_set(this.props.nodeOptions.m2o_dialog) || + (this.props.nodeOptions.m2o_dialog === "undefined" && + is_option_set(this.ir_options["web_m2x_options.m2o_dialog"])) || + (this.props.nodeOptions.m2o_dialog === "undefined" && + this.ir_options["web_m2x_options.m2o_dialog"] === "undefined"); + if (this.props.canCreate && this.state.isFloating && m2o_dialog_opt) { + return new Promise((resolve, reject) => { + this.addDialog(CreateConfirmationDialog, { + value: request, + name: this.props.string, + create: async () => { + try { + await this.quickCreate(request); + resolve(); + } catch (e) { + reject(e); + } + }, + createEdit: async () => { + try { + await this.quickCreate(request); + await this.props.record.model.load(); + this.openMany2X({ + resId: this.props.value[0], + context: this.user_context, + }); + resolve(); + } catch (e) { + reject(e); + } + }, + }); + }); + } + }, +}); + +Many2XAutocomplete.props = { + ...Many2XAutocomplete.props, + searchMore: {type: Boolean, optional: true}, + canCreate: {type: Boolean, optional: true}, + canWrite: {type: Boolean, optional: true}, + nodeOptions: {type: Object, optional: true}, +}; + +const Many2OneFieldExtractProps = many2OneField.extractProps; +many2OneField.extractProps = ( + {attrs, context, decorations, options, string}, + dynamicInfo +) => { + return Object.assign( + Many2OneFieldExtractProps( + {attrs, context, decorations, options, string}, + dynamicInfo + ), + { + canCreate: options.create, + canCreateEdit: options.create_edit, + searchLimit: options.limit, + searchMore: options.search_more, + nodeOptions: options, + } + ); +}; + +Many2OneField.props = { + ...Many2OneField.props, + searchMore: {type: Boolean, optional: true}, + nodeOptions: {type: Object, optional: true}, +}; + +/** + * FIXME: find better way to extend props in Many2OneField + * Override ReferenceField + * Since extracted/added props: nodeOptions and searchMore into Many2OneField props + * and this component inherited props from Many2OneField + * So, must override props here to avoid constraint validateProps (props schema) in owl core + */ + +ReferenceField.props = { + ...ReferenceField.props, + searchMore: {type: Boolean, optional: true}, + nodeOptions: {type: Object, optional: true}, +}; + +/** + * FIXME: find better way to extend props in Many2OneField + * Override Many2OneBarcodeField + * Since extracted/added props: nodeOptions and searchMore into Many2OneField props + * and this component inherited props from Many2OneField + * So, must override props here to avoid constraint validateProps (props schema) in owl core + */ + +Many2OneBarcodeField.props = { + ...Many2OneBarcodeField.props, + searchMore: {type: Boolean, optional: true}, + nodeOptions: {type: Object, optional: true}, +}; + +/** + * FIXME: find better way to extend props in Many2OneField + * Override Many2OneAvatarField + * Since extracted/added props: nodeOptions and searchMore into Many2OneField props + * and this component inherited props from Many2OneField + * So, must override props here to avoid constraint validateProps (props schema) in owl core + */ +Many2OneAvatarField.props = { + ...Many2OneAvatarField.props, + searchMore: {type: Boolean, optional: true}, + nodeOptions: {type: Object, optional: true}, +}; + +/** + * FIXME: find better way to extend props in Many2OneField + * Override mailing_m2o_filter + * Since extracted/added props: nodeOptions and searchMore into Many2OneField props + * and this component inherited props from Many2OneField + * So, must override props here to avoid constraint validateProps (props schema) in owl core + * This component is in module mass_mailing as optional module, + * So need to import dynamic way + */ +try { + (async () => { + // // Make sure component mailing_m2o_filter in mass mailing module loaded + + const FieldMany2OneMailingFilter = await odoo.loader.modules.get( + "@mass_mailing/js/mailing_m2o_filter" + ); + + if (FieldMany2OneMailingFilter) { + FieldMany2OneMailingFilter.props = { + ...FieldMany2OneMailingFilter.props, + searchMore: {type: Boolean, optional: true}, + nodeOptions: {type: Object, optional: true}, + }; + } + })(); +} catch { + console.log( + "Ignore overriding props of component mailing_m2o_filter since the module is not installed" + ); +} + +/** + * X2ManyField + **/ +patch(X2ManyField.prototype, { + /** + * @override + */ + async openRecord(record) { + var self = this; + var open = this.props.open; + if (open && self.props.readonly) { + var res_id = record.data.id; + const action = await self.env.model.orm.call( + self.props.value.resModel, + "get_formview_action", + [[res_id]] + ); + return self.env.model.actionService.doAction(action); + } + return super.openRecord(record); + }, +}); + +const X2ManyFieldExtractProps = X2ManyField.extractProps; +X2ManyField.extractProps = ({attrs}) => { + const canOpen = Boolean(attrs.options.open); + return Object.assign(X2ManyFieldExtractProps({attrs}), { + open: canOpen, + }); +}; + +X2ManyField.props = { + ...X2ManyField.props, + open: {type: Boolean, optional: true}, +}; + +/** + * FormController + **/ +patch(FormController.prototype, { + /** + * @override + */ + setup() { + var self = this; + super.setup(...arguments); + + /** Due to problem of 2 onWillStart in native web core + * (see: https://github.com/odoo/odoo/blob/16.0/addons/web/static/src/views/model.js#L142) + * do the trick to override beforeLoadResolver here to customize viewLimit + */ + this.superBeforeLoadResolver = this.beforeLoadResolver; + this.beforeLoadResolver = async () => { + await self._setSubViewLimit(); + self.superBeforeLoadResolver(); + }; + }, + /** + * @override + * add more method to add subview limit on formview + */ + async _setSubViewLimit() { + const ir_options = session.web_m2x_options; + + const activeFields = this.archInfo.activeFields, + fields = this.props.fields, + isSmall = this.user; + + var limit = ir_options["web_m2x_options.field_limit_entries"]; + if (!limit == "undefined") { + limit = parseInt(limit, 10); + } + + for (const fieldName in activeFields) { + const field = fields[fieldName]; + if (!isX2Many(field)) { + // What follows only concerns x2many fields + continue; + } + const fieldInfo = activeFields[fieldName]; + if (fieldInfo.modifiers.invisible === true) { + // No need to fetch the sub view if the field is always invisible + continue; + } + + if (!fieldInfo.FieldComponent.useSubView) { + // The FieldComponent used to render the field doesn't need a sub view + continue; + } + + let viewType = fieldInfo.viewMode || "list,kanban"; + viewType = viewType.replace("tree", "list"); + if (viewType.includes(",")) { + viewType = isSmall ? "kanban" : "list"; + } + fieldInfo.viewMode = viewType; + if (fieldInfo.views[viewType] && limit) { + fieldInfo.views[viewType].limit = limit; + } + } + }, +}); diff --git a/web_m2x_options/static/src/components/relational_utils.esm.js b/web_m2x_options/static/src/components/relational_utils.esm.js new file mode 100644 index 000000000000..fab7539aee97 --- /dev/null +++ b/web_m2x_options/static/src/components/relational_utils.esm.js @@ -0,0 +1,226 @@ +/** @odoo-module **/ + +import {session} from "@web/session"; +import {Many2XAutocomplete} from "@web/views/fields/relational_utils"; +import {patch} from "@web/core/utils/patch"; +import {sprintf} from "@web/core/utils/strings"; +import {_t} from "@web/core/l10n/translation"; + +export function is_option_set(option) { + if (option === "undefined") return false; + if (typeof option === "string") return option === "true" || option === "True"; + if (typeof option === "boolean") return option; + return false; +} + +patch(Many2XAutocomplete.prototype, { + setup() { + super.setup(...arguments); + this.ir_options = session.web_m2x_options; + }, + + async loadOptionsSource(request) { + if (this.lastProm) { + this.lastProm.abort(false); + } + + // Add options limit used to change number of selections record + // returned. + if (!this.ir_options["web_m2x_options.limit"] == "undefined") { + this.props.searchLimit = parseInt( + this.ir_options["web_m2x_options.limit"], + 10 + ); + this.limit = this.props.searchLimit; + } + + if (typeof this.props.nodeOptions.limit === "number") { + this.props.searchLimit = this.props.nodeOptions.limit; + this.limit = this.props.searchLimit; + } + + // Add options field_color and colors to color item(s) depending on field_color value + this.field_color = this.props.nodeOptions.field_color; + this.colors = this.props.nodeOptions.colors; + this.lastProm = this.orm.call(this.props.resModel, "name_search", [], { + name: request, + operator: "ilike", + args: this.props.getDomain(), + limit: this.props.searchLimit + 1, + context: this.props.context, + }); + const records = await this.lastProm; + + var options = records.map((result) => ({ + value: result[0], + id: result[0], + label: result[1].split("\n")[0], + })); + + // Limit results if there is a custom limit options + if (this.limit) { + options = options.slice(0, this.props.searchLimit); + } + // Search result value colors + if (this.colors && this.field_color) { + var value_ids = options.map((result) => result.value); + const objects = await this.orm.call( + this.props.resModel, + "search_read", + [], + { + domain: [["id", "in", value_ids]], + fields: [this.field_color], + } + ); + for (var index in objects) { + for (var index_value in options) { + if (options[index_value].id === objects[index].id) { + // Find value in values by comparing ids + var option = options[index_value]; + // Find color with field value as key + var color = "black"; + if (objects[index][this.field_color]) { + if (this.colors[this.field_color]) { + color = this.colors[this.field_color]; + } + } + option.style = "color:" + color; + break; + } + } + } + } + + // Quick create + // Note: Create should be before `search_more` (reserve native order) + // One more reason: when calling `onInputBlur`, native select the first option (activeSourceOption) + // which triggers m2o_dialog if m2o_dialog=true + var create_enabled = + this.props.quickCreate && !this.props.nodeOptions.no_create; + + var raw_result = Object.values(records).map((x) => { + return x[1]; + }); + var quick_create = is_option_set(this.props.nodeOptions.create); + var quick_create_undef = typeof this.props.nodeOptions.create === "undefined"; + var m2x_create_undef = + typeof this.ir_options["web_m2x_options.create"] === "undefined"; + var m2x_create = is_option_set(this.ir_options["web_m2x_options.create"]); + + var show_create = + (!this.props.nodeOptions && (m2x_create_undef || m2x_create)) || + (this.props.nodeOptions && + (quick_create || + (quick_create_undef && (m2x_create_undef || m2x_create)))); + if ( + create_enabled && + !this.props.nodeOptions.no_quick_create && + request.length > 0 && + !raw_result.includes(request) && + show_create + ) { + options.push({ + label: sprintf(_t(`Create "%s"`), request), + classList: "o_m2o_dropdown_option o_m2o_dropdown_option_create", + action: async (params) => { + try { + await this.props.quickCreate(request, params); + } catch { + const context = this.getCreationContext(request); + return this.openMany2X({context}); + } + }, + }); + } + + // Search more... + // Resolution order: + // 1- check if "search_more" is set locally in node's options + // 2- if set locally, apply its value + // 3- if not set locally, check if it's set globally via ir.config_parameter + // 4- if set globally, apply its value + // 5- if not set globally either, check if returned values are more than node's limit + var search_more = false; + if (this.props.nodeOptions.search_more !== "undefined") { + search_more = is_option_set(this.props.nodeOptions.search_more); + } else if (this.ir_options["web_m2x_options.search_more"] !== "undefined") { + search_more = is_option_set(this.ir_options["web_m2x_options.search_more"]); + } else { + search_more = + !this.props.noSearchMore && this.props.searchLimit < records.length; + } + if (search_more) { + options.push({ + label: _t("Search More..."), + action: this.onSearchMore.bind(this, request), + classList: "o_m2o_dropdown_option o_m2o_dropdown_option_search_more", + }); + } + + // Create and Edit + const canCreateEdit = + "createEdit" in this.activeActions + ? this.activeActions.createEdit + : this.activeActions.create; + if ( + !request.length && + !this.props.value && + (this.props.quickCreate || canCreateEdit) + ) { + options.push({ + label: _t("Start typing..."), + classList: "o_m2o_start_typing", + unselectable: true, + }); + } + + // Create and edit ... + var create_edit = + is_option_set(this.props.nodeOptions.create) || + is_option_set(this.props.nodeOptions.create_edit), + create_edit_undef = + typeof this.props.nodeOptions.create === "undefined" && + typeof this.props.nodeOptions.create_edit === "undefined", + m2x_create_edit_undef = + typeof this.ir_options["web_m2x_options.create_edit"] === "undefined", + m2x_create_edit = is_option_set( + this.ir_options["web_m2x_options.create_edit"] + ); + var show_create_edit = + (!this.props.nodeOptions && (m2x_create_edit_undef || m2x_create_edit)) || + (this.props.nodeOptions && + (create_edit || + (create_edit_undef && (m2x_create_edit_undef || m2x_create_edit)))); + if ( + create_enabled && + !this.props.nodeOptions.no_create_edit && + show_create_edit && + request.length && + canCreateEdit + ) { + const context = this.getCreationContext(request); + options.push({ + label: _t("Create and edit..."), + classList: "o_m2o_dropdown_option o_m2o_dropdown_option_create_edit", + action: () => this.openMany2X({context}), + }); + } + + // No records + if (!records.length && !this.activeActions.create) { + options.push({ + label: _t("No records"), + classList: "o_m2o_no_result", + unselectable: true, + }); + } + + return options; + }, +}); + +Many2XAutocomplete.defaultProps = { + ...Many2XAutocomplete.defaultProps, + nodeOptions: {}, +}; diff --git a/web_m2x_options/tests/__init__.py b/web_m2x_options/tests/__init__.py new file mode 100644 index 000000000000..b472ff361438 --- /dev/null +++ b/web_m2x_options/tests/__init__.py @@ -0,0 +1,2 @@ +# Copyright 2020 initOS GmbH. +from . import test_ir_config_parameter diff --git a/web_m2x_options/tests/test_ir_config_parameter.py b/web_m2x_options/tests/test_ir_config_parameter.py new file mode 100644 index 000000000000..eae00c7a9ee3 --- /dev/null +++ b/web_m2x_options/tests/test_ir_config_parameter.py @@ -0,0 +1,28 @@ +# Copyright 2020 initOS GmbH. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.tests import common + + +class TestIrConfigParameter(common.TransactionCase): + @classmethod + def setUpClass(cls): + super(TestIrConfigParameter, cls).setUpClass() + cls.env["ir.config_parameter"].set_param("web_m2x_options.limit", 10) + cls.env["ir.config_parameter"].set_param("web_m2x_options.create_edit", "True") + cls.env["ir.config_parameter"].set_param("web_m2x_options.create", "True") + cls.env["ir.config_parameter"].set_param("web_m2x_options.search_more", "False") + cls.env["ir.config_parameter"].set_param("web_m2x_options.m2o_dialog", "True") + + def test_web_m2x_options_key(self): + web_m2x_options = self.env["ir.config_parameter"].get_web_m2x_options() + self.assertIn("web_m2x_options.limit", web_m2x_options) + self.assertNotIn("web_m2x_options.m2o_dialog_test", web_m2x_options) + + def test_web_m2x_options_value(self): + web_m2x_options = self.env["ir.config_parameter"].get_web_m2x_options() + self.assertEqual(web_m2x_options["web_m2x_options.limit"], "10") + self.assertTrue(bool(web_m2x_options["web_m2x_options.create_edit"])) + self.assertTrue(bool(web_m2x_options["web_m2x_options.create"])) + self.assertEqual(web_m2x_options["web_m2x_options.search_more"], "False") + self.assertTrue(bool(web_m2x_options["web_m2x_options.m2o_dialog"]))