diff --git a/setup/web_m2x_options/odoo_addons/__init__.py b/setup/web_m2x_options/odoo_addons/__init__.py
new file mode 100644
index 00000000..de40ea7c
--- /dev/null
+++ b/setup/web_m2x_options/odoo_addons/__init__.py
@@ -0,0 +1 @@
+__import__('pkg_resources').declare_namespace(__name__)
diff --git a/setup/web_m2x_options/odoo_addons/web_m2x_options b/setup/web_m2x_options/odoo_addons/web_m2x_options
new file mode 120000
index 00000000..80691f08
--- /dev/null
+++ b/setup/web_m2x_options/odoo_addons/web_m2x_options
@@ -0,0 +1 @@
+../../../web_m2x_options
\ No newline at end of file
diff --git a/setup/web_m2x_options/setup.py b/setup/web_m2x_options/setup.py
new file mode 100644
index 00000000..28c57bb6
--- /dev/null
+++ b/setup/web_m2x_options/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+ setup_requires=['setuptools-odoo'],
+ odoo_addon=True,
+)
diff --git a/web_m2x_options/README.rst b/web_m2x_options/README.rst
index be6e7603..dff75f05 100644
--- a/web_m2x_options/README.rst
+++ b/web_m2x_options/README.rst
@@ -1,35 +1,35 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
==================================
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.
+if the current user has no permission rights to create the related object.
+Usage
+=====
-Requirements
-------------
+.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
+ :alt: Try me on Runbot
+ :target: https://runbot.odoo-community.org/runbot/162/8.0
-Was tested on openerp 8.0, trunk, saas-5 branch. New way to import js file. (thanks to tfossoul)
+For further information, please visit:
+* https://www.odoo.com/forum/help-1
-New options
------------
+in the field's options dict
+---------------------------
``create`` *boolean* (Default: depends if user have create rights)
@@ -47,21 +47,27 @@ New options
Number of displayed record in drop-down panel
-``search_more`` *boolean*
+``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 buttons that open the linked resource
ir.config_parameter options
---------------------------
@@ -107,9 +113,51 @@ Your XML form view definition could contain::
...
-Note
-----
+Known issues
+============
+
+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 ``get_search_result method`` and enable debug mode in Odoo. When you write something in a many2one field, javascript debugger should pause. If not verify your installation.
+
+Roadmap
+=======
+
+- 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 smashing it by providing a detailed and welcomed feedback
+`here `_.
+
+Credits
+=======
+
+Contributors
+------------
+
+* David Coninckx
+* Emanuel Cino
+* Holger Brunn
+* Nicolas JEUDY
+* Yannick Vaucher
+* Zakaria Makrelouf
+
+Maintainer
+----------
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+This module is maintained by the OCA.
-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.
+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.
+To contribute to this module, please visit http://odoo-community.org.
diff --git a/web_m2x_options/__init__.py b/web_m2x_options/__init__.py
index e69de29b..57d631c3 100644
--- a/web_m2x_options/__init__.py
+++ b/web_m2x_options/__init__.py
@@ -0,0 +1 @@
+# coding: utf-8
diff --git a/web_m2x_options/__openerp__.py b/web_m2x_options/__openerp__.py
index be57d3bd..94c1a525 100644
--- a/web_m2x_options/__openerp__.py
+++ b/web_m2x_options/__openerp__.py
@@ -2,13 +2,16 @@
{
"name": 'web_m2x_options',
- "version": "8.0.0.2",
+ "version": "9.0.1.0.0",
"depends": [
'base',
'web',
],
+ 'qweb': [
+ 'static/src/xml/base.xml',
+ ],
+ 'license': 'AGPL-3',
'data': ['views/view.xml'],
- "author": "0k.io,Odoo Community Association (OCA)",
- 'installable': False,
- "active": False,
+ "author": "ACSONE SA/NV, 0k.io,Odoo Community Association (OCA)",
+ 'installable': True,
}
diff --git a/web_m2x_options/i18n/ar.po b/web_m2x_options/i18n/ar.po
new file mode 100644
index 00000000..124f84ce
--- /dev/null
+++ b/web_m2x_options/i18n/ar.po
@@ -0,0 +1,43 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+#
+# Translators:
+# SaFi J. , 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-02-26 02:05+0000\n"
+"PO-Revision-Date: 2015-12-16 17:30+0000\n"
+"Last-Translator: SaFi J. \n"
+"Language-Team: Arabic (http://www.transifex.com/oca/OCA-web-8-0/language/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ar\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
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:219
+#: code:addons/web_m2x_options/static/src/js/form.js:373
+#, python-format
+msgid "Create \"%s\""
+msgstr "إنشاء \"%s\""
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:237
+#: code:addons/web_m2x_options/static/src/js/form.js:392
+#, python-format
+msgid "Create and Edit..."
+msgstr "إنشاء وتحرير ..."
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:188
+#: code:addons/web_m2x_options/static/src/js/form.js:349
+#, python-format
+msgid "Search More..."
+msgstr "البحث عن المزيد ..."
diff --git a/web_m2x_options/i18n/de.po b/web_m2x_options/i18n/de.po
new file mode 100644
index 00000000..40eb8cac
--- /dev/null
+++ b/web_m2x_options/i18n/de.po
@@ -0,0 +1,43 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+#
+# Translators:
+# Rudolf Schnapka , 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-02-26 02:05+0000\n"
+"PO-Revision-Date: 2016-01-18 20:15+0000\n"
+"Last-Translator: Rudolf Schnapka \n"
+"Language-Team: German (http://www.transifex.com/oca/OCA-web-8-0/language/de/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:219
+#: code:addons/web_m2x_options/static/src/js/form.js:373
+#, python-format
+msgid "Create \"%s\""
+msgstr "Anlegen \"%s"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:237
+#: code:addons/web_m2x_options/static/src/js/form.js:392
+#, python-format
+msgid "Create and Edit..."
+msgstr "Anlegen und Bearbeiten"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:188
+#: code:addons/web_m2x_options/static/src/js/form.js:349
+#, python-format
+msgid "Search More..."
+msgstr "Suche weitere..."
diff --git a/web_m2x_options/i18n/es.po b/web_m2x_options/i18n/es.po
new file mode 100644
index 00000000..bd3b1e51
--- /dev/null
+++ b/web_m2x_options/i18n/es.po
@@ -0,0 +1,43 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+#
+# Translators:
+# Pedro M. Baeza , 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-02-26 02:05+0000\n"
+"PO-Revision-Date: 2015-11-07 11:28+0000\n"
+"Last-Translator: Pedro M. Baeza \n"
+"Language-Team: Spanish (http://www.transifex.com/oca/OCA-web-8-0/language/es/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:219
+#: code:addons/web_m2x_options/static/src/js/form.js:373
+#, python-format
+msgid "Create \"%s\""
+msgstr "Crear \"%s\""
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:237
+#: code:addons/web_m2x_options/static/src/js/form.js:392
+#, python-format
+msgid "Create and Edit..."
+msgstr "Crear y editar..."
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:188
+#: code:addons/web_m2x_options/static/src/js/form.js:349
+#, python-format
+msgid "Search More..."
+msgstr "Buscar más..."
diff --git a/web_m2x_options/i18n/fi.po b/web_m2x_options/i18n/fi.po
new file mode 100644
index 00000000..b374d7eb
--- /dev/null
+++ b/web_m2x_options/i18n/fi.po
@@ -0,0 +1,43 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+#
+# Translators:
+# Jarmo Kortetjärvi , 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-02-26 02:05+0000\n"
+"PO-Revision-Date: 2016-02-01 09:52+0000\n"
+"Last-Translator: Jarmo Kortetjärvi \n"
+"Language-Team: Finnish (http://www.transifex.com/oca/OCA-web-8-0/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:219
+#: code:addons/web_m2x_options/static/src/js/form.js:373
+#, python-format
+msgid "Create \"%s\""
+msgstr "Luo \"%s\""
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:237
+#: code:addons/web_m2x_options/static/src/js/form.js:392
+#, python-format
+msgid "Create and Edit..."
+msgstr "Luo ja muokkaa..."
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:188
+#: code:addons/web_m2x_options/static/src/js/form.js:349
+#, python-format
+msgid "Search More..."
+msgstr "Hae lisää..."
diff --git a/web_m2x_options/i18n/fr.po b/web_m2x_options/i18n/fr.po
new file mode 100644
index 00000000..3be5ae23
--- /dev/null
+++ b/web_m2x_options/i18n/fr.po
@@ -0,0 +1,43 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+#
+# Translators:
+# Christophe CHAUVET , 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-05-06 15:50+0000\n"
+"PO-Revision-Date: 2016-05-06 08:27+0000\n"
+"Last-Translator: Christophe CHAUVET \n"
+"Language-Team: French (http://www.transifex.com/oca/OCA-web-8-0/language/fr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:219
+#: code:addons/web_m2x_options/static/src/js/form.js:373
+#, python-format
+msgid "Create \"%s\""
+msgstr "Creer \"%s\""
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:237
+#: code:addons/web_m2x_options/static/src/js/form.js:392
+#, python-format
+msgid "Create and Edit..."
+msgstr "Créer et modifier..."
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:188
+#: code:addons/web_m2x_options/static/src/js/form.js:349
+#, python-format
+msgid "Search More..."
+msgstr "Rechercher plus..."
diff --git a/web_m2x_options/i18n/it.po b/web_m2x_options/i18n/it.po
new file mode 100644
index 00000000..c8db1568
--- /dev/null
+++ b/web_m2x_options/i18n/it.po
@@ -0,0 +1,55 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+#
+# Translators:
+# Ahmet Altınışık , 2015
+# Antonio Trueba, 2016
+# Armando Vulcano Junior , 2015
+# Carles Antoli , 2015
+# Bole , 2015
+# FIRST AUTHOR , 2012,2014
+# Giacomo , 2015
+# Hotellook, 2014
+# Jarmo Kortetjärvi , 2016
+# Paolo Valier, 2016
+# Paolo Valier, 2016
+# Rudolf Schnapka , 2016
+# Thomas A. Jaeger, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-04-28 07:09+0000\n"
+"PO-Revision-Date: 2016-04-28 06:46+0000\n"
+"Last-Translator: Paolo Valier\n"
+"Language-Team: Italian (http://www.transifex.com/oca/OCA-web-8-0/language/it/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:219
+#: code:addons/web_m2x_options/static/src/js/form.js:373
+#, python-format
+msgid "Create \"%s\""
+msgstr "Crea \"%s\""
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:237
+#: code:addons/web_m2x_options/static/src/js/form.js:392
+#, python-format
+msgid "Create and Edit..."
+msgstr "Crea e Modifica..."
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:188
+#: code:addons/web_m2x_options/static/src/js/form.js:349
+#, python-format
+msgid "Search More..."
+msgstr "Cerca altro..."
diff --git a/web_m2x_options/i18n/pt_BR.po b/web_m2x_options/i18n/pt_BR.po
new file mode 100644
index 00000000..cf28995e
--- /dev/null
+++ b/web_m2x_options/i18n/pt_BR.po
@@ -0,0 +1,43 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+#
+# Translators:
+# danimaribeiro , 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-03-11 02:17+0000\n"
+"PO-Revision-Date: 2016-03-05 16:20+0000\n"
+"Last-Translator: danimaribeiro \n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-web-8-0/language/pt_BR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: pt_BR\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:219
+#: code:addons/web_m2x_options/static/src/js/form.js:373
+#, python-format
+msgid "Create \"%s\""
+msgstr "Criar \"%s\""
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:237
+#: code:addons/web_m2x_options/static/src/js/form.js:392
+#, python-format
+msgid "Create and Edit..."
+msgstr "Criar e editar.."
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:188
+#: code:addons/web_m2x_options/static/src/js/form.js:349
+#, python-format
+msgid "Search More..."
+msgstr "Buscar mais..."
diff --git a/web_m2x_options/i18n/sl.po b/web_m2x_options/i18n/sl.po
new file mode 100644
index 00000000..7192762e
--- /dev/null
+++ b/web_m2x_options/i18n/sl.po
@@ -0,0 +1,43 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+#
+# Translators:
+# Matjaž Mozetič , 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-02-26 02:05+0000\n"
+"PO-Revision-Date: 2015-11-08 05:46+0000\n"
+"Last-Translator: Matjaž Mozetič \n"
+"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-web-8-0/language/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sl\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
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:219
+#: code:addons/web_m2x_options/static/src/js/form.js:373
+#, python-format
+msgid "Create \"%s\""
+msgstr "Ustvari \"%s\""
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:237
+#: code:addons/web_m2x_options/static/src/js/form.js:392
+#, python-format
+msgid "Create and Edit..."
+msgstr "Ustvari in urejaj..."
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:188
+#: code:addons/web_m2x_options/static/src/js/form.js:349
+#, python-format
+msgid "Search More..."
+msgstr "Poišči več..."
diff --git a/web_m2x_options/i18n/tr.po b/web_m2x_options/i18n/tr.po
new file mode 100644
index 00000000..2b9f46fd
--- /dev/null
+++ b/web_m2x_options/i18n/tr.po
@@ -0,0 +1,44 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+#
+# Translators:
+# Ahmet Altınışık , 2015
+# Ahmet Altınışık , 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-02-26 02:05+0000\n"
+"PO-Revision-Date: 2015-12-30 21:53+0000\n"
+"Last-Translator: Ahmet Altınışık \n"
+"Language-Team: Turkish (http://www.transifex.com/oca/OCA-web-8-0/language/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: tr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:219
+#: code:addons/web_m2x_options/static/src/js/form.js:373
+#, python-format
+msgid "Create \"%s\""
+msgstr "Oluştur \"%s\""
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:237
+#: code:addons/web_m2x_options/static/src/js/form.js:392
+#, python-format
+msgid "Create and Edit..."
+msgstr "Oluştur ve düzenle..."
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:188
+#: code:addons/web_m2x_options/static/src/js/form.js:349
+#, python-format
+msgid "Search More..."
+msgstr "Daha Fazla..."
diff --git a/web_m2x_options/static/src/js/form.js b/web_m2x_options/static/src/js/form.js
index bc4d3beb..f2a28172 100644
--- a/web_m2x_options/static/src/js/form.js
+++ b/web_m2x_options/static/src/js/form.js
@@ -1,12 +1,17 @@
-/*global openerp, _, $ */
-
-openerp.web_m2x_options = function (instance) {
+/* Copyright 2016 0k.io,ACSONE SA/NV
+ * * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */
+odoo.define('web_m2x_options.web_m2x_options', function (require) {
"use strict";
- var QWeb = instance.web.qweb,
- _t = instance.web._t,
- _lt = instance.web._lt;
+ var $ = require("$");
+ var core = require('web.core'),
+ data = require('web.data'),
+ Dialog = require('web.Dialog'),
+ Model = require('web.Model'),
+ form_relational = require('web.form_relational'),
+ _ = require('_'),
+ _t = core._t;
var OPTIONS = ['web_m2x_options.create',
'web_m2x_options.create_edit',
@@ -14,7 +19,45 @@ openerp.web_m2x_options = function (instance) {
'web_m2x_options.search_more',
'web_m2x_options.m2o_dialog',];
- instance.web.form.FieldMany2One = instance.web.form.FieldMany2One.extend({
+ // In odoo 9.c FielMany2One is not exposed by form_relational
+ // To bypass this limitation we use the widget registry to get the
+ // reference to the FielMany2One widget.
+ var FieldMany2One = core.form_widget_registry.get('many2one');
+
+ var M2ODialog = Dialog.extend({
+ template: "M2ODialog",
+ init: function(parent) {
+ this.name = parent.string;
+ this._super(parent, {
+ title: _.str.sprintf(_t("Create a %s"), parent.string),
+ size: 'medium',
+ buttons: [
+ {text: _t('Create'), classes: 'btn-primary', click: function() {
+ if (this.$("input").val() !== ''){
+ this.getParent()._quick_create(this.$("input").val());
+ this.close();
+ } else {
+ e.preventDefault();
+ this.$("input").focus();
+ }
+ }},
+
+ {text: _t('Create and edit'), classes: 'btn-primary', close: true, click: function() {
+ this.getParent()._search_create_popup("form", undefined, this.getParent()._create_context(this.$("input").val()));
+ }},
+
+ {text: _t('Cancel'), close: true}
+ ]
+ });
+ },
+ start: function() {
+ var text = _.str.sprintf(_t("You are creating a new %s, are you sure it does not exist yet?"), this.name);
+ this.$("p").text(text);
+ this.$("input").val(this.getParent().$input.val());
+ },
+ });
+
+ FieldMany2One.include({
start: function() {
this._super.apply(this, arguments);
@@ -26,7 +69,7 @@ openerp.web_m2x_options = function (instance) {
if (!_.isUndefined(this.view) && _.isUndefined(this.view.ir_options_loaded)) {
this.view.ir_options_loaded = $.Deferred();
this.view.ir_options = {};
- (new instance.web.Model("ir.config_parameter"))
+ (new Model("ir.config_parameter"))
.query(["key", "value"]).filter([['key', 'in', OPTIONS]])
.all().then(function(records) {
_(records).each(function(record) {
@@ -57,51 +100,45 @@ openerp.web_m2x_options = function (instance) {
if(this.is_option_set(this.options.m2o_dialog) ||
_.isUndefined(this.options.m2o_dialog) && this.is_option_set(this.view.ir_options['web_m2x_options.m2o_dialog']) ||
this.can_create && _.isUndefined(this.options.m2o_dialog) && _.isUndefined(this.view.ir_options['web_m2x_options.m2o_dialog'])) {
- new instance.web.form.M2ODialog(this).open();
+ new M2ODialog(this).open();
}
},
get_search_result: function (search_val) {
- var Objects = new instance.web.Model(this.field.relation);
+ var Objects = new Model(this.field.relation);
var def = $.Deferred();
var self = this;
// add options limit used to change number of selections record
// returned.
- if (_.isUndefined(this.view))
- return this._super.apply(this, arguments);
- if (!_.isUndefined(this.view.ir_options['web_m2x_options.limit'])) {
- this.limit = parseInt(this.view.ir_options['web_m2x_options.limit']);
- }
+ if (_.isUndefined(this.view))
+ return this._super.apply(this, arguments);
+ if (!_.isUndefined(this.view.ir_options['web_m2x_options.limit'])) {
+ this.limit = parseInt(this.view.ir_options['web_m2x_options.limit']);
+ }
if (typeof this.options.limit === 'number') {
this.limit = this.options.limit;
}
- // add options search_more to force enable or disable search_more button
- if (this.is_option_set(this.options.search_more) || _.isUndefined(this.options.search_more) && this.is_option_set(self.view.ir_options['web_m2x_options.search_more'])) {
- this.search_more = true
- }
-
// add options field_color and colors to color item(s) depending on field_color value
this.field_color = this.options.field_color
this.colors = this.options.colors
- var dataset = new instance.web.DataSet(this, this.field.relation,
+ var dataset = new data.DataSet(this, this.field.relation,
self.build_context());
var blacklist = this.get_search_blacklist();
this.last_query = search_val;
var search_result = this.orderer.add(dataset.name_search(
search_val,
- new instance.web.CompoundDomain(
+ new data.CompoundDomain(
self.build_domain(), [["id", "not in", blacklist]]),
'ilike', this.limit + 1,
self.build_context()));
var create_rights;
- if (typeof this.options.create === "undefined" ||
- typeof this.options.create_edit === "undefined") {
- create_rights = new instance.web.Model(this.field.relation).call(
+ if (!(self.options && (self.is_option_set(self.options.create) || self.is_option_set(self.options.create_edit)))) {
+ create_rights = new Model(this.field.relation).call(
"check_access_rights", ["create", false]);
}
@@ -119,15 +156,13 @@ openerp.web_m2x_options = function (instance) {
id: x[0],
};
});
-
- // Search result value colors
+ // Search result value colors
if (self.colors && self.field_color) {
var value_ids = [];
for (var index in values) {
value_ids.push(values[index].id);
}
-
// RPC request to get field_color from Objects
Objects.query([self.field_color])
.filter([['id', 'in', value_ids]])
@@ -137,7 +172,6 @@ openerp.web_m2x_options = function (instance) {
if (values[index_value].id == objects[index].id) {
// Find value in values by comparing ids
var value = values[index_value];
-
// Find color with field value as key
var color = self.colors[objects[index][self.field_color]] || 'black';
value.label = ''+value.label+'';
@@ -150,19 +184,25 @@ openerp.web_m2x_options = function (instance) {
}
// search more... if more results that max
+ var can_search_more = (self.options && self.is_option_set(self.options.search_more)),
+ search_more_undef = _.isUndefined(self.options.search_more) && _.isUndefined(self.view.ir_options['web_m2x_options.search_more']),
+ search_more = self.is_option_set(self.view.ir_options['web_m2x_options.search_more']);
- if (values.length > self.limit || self.search_more) {
+ if (values.length > self.limit && (can_search_more || search_more_undef || search_more)) {
values = values.slice(0, self.limit);
values.push({
label: _t("Search More..."),
action: function () {
+ // limit = 160 for improving performance, similar
+ // to Odoo implementation here:
+ // https://github.com/odoo/odoo/blob/feeac2a4f1cd777770dd2b42534904ac71f23e46/addons/web/static/src/js/views/form_common.js#L213
dataset.name_search(
search_val, self.build_domain(),
- 'ilike', false).done(function (data) {
+ 'ilike', 160).done(function (data) {
self._search_create_popup("search", data);
});
},
- classname: 'oe_m2o_dropdown_option'
+ classname: 'oe_m2o_dropdown_option o_m2o_dropdown_option'
});
}
@@ -171,11 +211,12 @@ openerp.web_m2x_options = function (instance) {
var raw_result = _(data.result).map(function (x) {
return x[1];
});
-
- if ((_.isUndefined(self.options.create) && _.isUndefined(self.view.ir_options['web_m2x_options.create']) && can_create) ||
- (_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create'] == "True") ||
- self.options.create) {
-
+ var quick_create = self.is_option_set(self.options.create) || self.is_option_set(self.options.quick_create),
+ quick_create_undef = _.isUndefined(self.options.create) && _.isUndefined(self.options.quick_create),
+ m2x_create_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create']),
+ m2x_create = self.is_option_set(self.view.ir_options['web_m2x_options.create']);
+ var show_create = (!self.options && (m2x_create_undef || m2x_create)) || (self.options && (quick_create || (quick_create_undef && (m2x_create_undef || m2x_create))));
+ if (show_create){
if (search_val.length > 0 &&
!_.include(raw_result, search_val)) {
@@ -186,17 +227,18 @@ openerp.web_m2x_options = function (instance) {
action: function () {
self._quick_create(search_val);
},
- classname: 'oe_m2o_dropdown_option'
+ classname: 'oe_m2o_dropdown_option o_m2o_dropdown_option'
});
}
}
// create...
-
- if ((_.isUndefined(self.options.create_edit) && _.isUndefined(self.view.ir_options['web_m2x_options.create_edit']) && can_create) ||
- (_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create_edit'] == "True") ||
- self.options.create_edit) {
-
+ var create_edit = self.is_option_set(self.options.create) || self.is_option_set(self.options.create_edit),
+ create_edit_undef = _.isUndefined(self.options.create) && _.isUndefined(self.options.create_edit),
+ m2x_create_edit_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create_edit']),
+ m2x_create_edit = self.is_option_set(self.view.ir_options['web_m2x_options.create_edit']);
+ var show_create_edit = (!self.options && (m2x_create_edit_undef || m2x_create_edit)) || (self.options && (create_edit || (create_edit_undef && (m2x_create_edit_undef || m2x_create_edit))));
+ if (show_create_edit){
values.push({
label: _t("Create and Edit..."),
action: function () {
@@ -204,10 +246,9 @@ openerp.web_m2x_options = function (instance) {
"form", undefined,
self._create_context(search_val));
},
- classname: 'oe_m2o_dropdown_option'
+ classname: 'oe_m2o_dropdown_option o_m2o_dropdown_option'
});
}
-
// Check if colors specified to wait for RPC
if (!(self.field_color && self.colors)){
def.resolve(values);
@@ -218,36 +259,57 @@ openerp.web_m2x_options = function (instance) {
}
});
- instance.web.form.FieldMany2ManyTags.include({
-
+ form_relational.FieldMany2ManyTags.include({
+ events: {
+ 'click .o_delete': function(e) {
+ this.remove_id($(e.target).parent().data('id'));
+ },
+ 'click .badge': 'open_badge',
+ 'mousedown .o_colorpicker span': 'update_color',
+ 'focusout .o_colorpicker': 'close_color_picker',
+ },
show_error_displayer: function () {
if ((typeof this.options.m2o_dialog === 'undefined' && this.can_create) ||
this.options.m2o_dialog) {
- new instance.web.form.M2ODialog(this).open();
+ new M2ODialog(this).open();
}
},
-
- start: function() {
- this._super.apply(this, arguments);
- return this.get_options();
- },
-
- get_options: function() {
- var self = this;
- if (_.isUndefined(this.view.ir_options_loaded)) {
- this.view.ir_options_loaded = $.Deferred();
- this.view.ir_options = {};
- (new instance.web.Model("ir.config_parameter"))
- .query(["key", "value"]).filter([['key', 'in', OPTIONS]])
- .all().then(function(records) {
- _(records).each(function(record) {
- self.view.ir_options[record.key] = record.value;
- });
- self.view.ir_options_loaded.resolve();
- });
- }
- return this.view.ir_options_loaded;
- },
+
+ start: function() {
+ this._super.apply(this, arguments);
+ return this.get_options();
+ },
+
+ get_options: function() {
+ var self = this;
+ if (_.isUndefined(this.view.ir_options_loaded)) {
+ this.view.ir_options_loaded = $.Deferred();
+ this.view.ir_options = {};
+ (new Model("ir.config_parameter"))
+ .query(["key", "value"]).filter([['key', 'in', OPTIONS]])
+ .all().then(function(records) {
+ _(records).each(function(record) {
+ self.view.ir_options[record.key] = record.value;
+ });
+ self.view.ir_options_loaded.resolve();
+ });
+ }
+ return this.view.ir_options_loaded;
+ },
+
+ is_option_set: function(option) {
+ if (_.isUndefined(option)) {
+ return false
+ }
+ var is_string = typeof option === 'string'
+ var is_bool = typeof option === 'boolean'
+ if (is_string) {
+ return option === 'true' || option === 'True'
+ } else if (is_bool) {
+ return option
+ }
+ return false
+ },
/**
* Call this method to search using a string.
@@ -258,21 +320,21 @@ openerp.web_m2x_options = function (instance) {
// add options limit used to change number of selections record
// returned.
-
- if (!_.isUndefined(this.view.ir_options['web_m2x_options.limit'])) {
- this.limit = parseInt(this.view.ir_options['web_m2x_options.limit']);
- }
+
+ if (!_.isUndefined(this.view.ir_options['web_m2x_options.limit'])) {
+ this.limit = parseInt(this.view.ir_options['web_m2x_options.limit']);
+ }
if (typeof this.options.limit === 'number') {
this.limit = this.options.limit;
}
- var dataset = new instance.web.DataSet(this, this.field.relation, self.build_context());
+ var dataset = new data.DataSet(this, this.field.relation, self.build_context());
var blacklist = this.get_search_blacklist();
this.last_query = search_val;
return this.orderer.add(dataset.name_search(
- search_val, new instance.web.CompoundDomain(self.build_domain(), [["id", "not in", blacklist]]),
+ search_val, new data.CompoundDomain(self.build_domain(), [["id", "not in", blacklist]]),
'ilike', this.limit + 1, self.build_context())).then(function(data) {
self.last_search = data;
// possible selections for the m2o
@@ -292,18 +354,24 @@ openerp.web_m2x_options = function (instance) {
values.push({
label: _t("Search More..."),
action: function() {
- dataset.name_search(search_val, self.build_domain(), 'ilike', false).done(function(data) {
+
+ // limit = 80 for improving performance, similar
+ // to Odoo implementation here:
+ // https://github.com/odoo/odoo/commit/8c3cdce539d87775b59b3f2d5ceb433f995821bf
+ dataset.name_search(search_val, self.build_domain(), 'ilike', 80).done(function(data) {
self._search_create_popup("search", data);
});
},
- classname: 'oe_m2o_dropdown_option'
+ classname: 'oe_m2o_dropdown_option o_m2o_dropdown_option'
});
}
// quick create
-
- if ((_.isUndefined(self.options.create) && _.isUndefined(self.view.ir_options['web_m2x_options.create'])) ||
- (_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create'] == 'True') ||
- self.options.create) {
+ var quick_create = self.is_option_set(self.options.create) || self.is_option_set(self.options.quick_create),
+ quick_create_undef = _.isUndefined(self.options.create) && _.isUndefined(self.options.quick_create),
+ m2x_create_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create']),
+ m2x_create = self.is_option_set(self.view.ir_options['web_m2x_options.create']);
+ var show_create = (!self.options && (m2x_create_undef || m2x_create)) || (self.options && (quick_create || (quick_create_undef && (m2x_create_undef || m2x_create))));
+ if (show_create){
var raw_result = _(data.result).map(function(x) {return x[1];});
if (search_val.length > 0 && !_.include(raw_result, search_val)) {
@@ -313,29 +381,50 @@ openerp.web_m2x_options = function (instance) {
action: function() {
self._quick_create(search_val);
},
- classname: 'oe_m2o_dropdown_option'
+ classname: 'oe_m2o_dropdown_option o_m2o_dropdown_option'
});
}
}
// create...
-
- if ((_.isUndefined(self.options.create_edit === 'undefined') && _.isUndefined(self.view.ir_options['web_m2x_options.create_edit'])) ||
- (_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create_edit'] == 'True') ||
- self.options.create_edit) {
+ var create_edit = self.is_option_set(self.options.create) || self.is_option_set(self.options.create_edit),
+ create_edit_undef = _.isUndefined(self.options.create) && _.isUndefined(self.options.create_edit),
+ m2x_create_edit_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create_edit']),
+ m2x_create_edit = self.is_option_set(self.view.ir_options['web_m2x_options.create_edit']);
+ var show_create_edit = (!self.options && (m2x_create_edit_undef || m2x_create_edit)) || (self.options && (create_edit || (create_edit_undef && (m2x_create_edit_undef || m2x_create_edit))));
+ if (show_create_edit){
values.push({
label: _t("Create and Edit..."),
action: function() {
self._search_create_popup("form", undefined, self._create_context(search_val));
},
- classname: 'oe_m2o_dropdown_option'
+ classname: 'oe_m2o_dropdown_option o_m2o_dropdown_option'
});
}
return values;
})
},
- });
-};
+ open_badge: function(ev){
+ var self = this;
+ var open = (self.options && self.is_option_set(self.options.open));
+ if(open){
+ self.mutex.exec(function(){
+ var id = parseInt($(ev.handleObj.selector).attr('data-id'));
+ self.do_action({
+ type: 'ir.actions.act_window',
+ res_model: self.field.relation,
+ views: [[false, 'form']],
+ res_id: id,
+ target: "new"
+ });
+ }.bind(this));
+ }else{
+ self.open_color_picker(ev);
+ }
+ },
+
+ });
+});
diff --git a/web_m2x_options/static/src/xml/base.xml b/web_m2x_options/static/src/xml/base.xml
new file mode 100644
index 00000000..8b9421d1
--- /dev/null
+++ b/web_m2x_options/static/src/xml/base.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ jQuery(this).attr('t-if', '!(widget.options.no_open || widget.options.no_open_edit)');
+
+
+
+
+ jQuery(this).attr('t-att-data-id', 'el[0]');
+
+
+