Browse Source

Merge pull request #418 from acsone/9.0-mig2-web_m2x_options-zak

[9.0] Migrate web_m2x_options to 9.0
pull/430/merge
Pedro M. Baeza 8 years ago
committed by GitHub
parent
commit
7342710bf9
  1. 1
      setup/web_m2x_options/odoo_addons/__init__.py
  2. 1
      setup/web_m2x_options/odoo_addons/web_m2x_options
  3. 6
      setup/web_m2x_options/setup.py
  4. 92
      web_m2x_options/README.rst
  5. 1
      web_m2x_options/__init__.py
  6. 11
      web_m2x_options/__openerp__.py
  7. 43
      web_m2x_options/i18n/ar.po
  8. 43
      web_m2x_options/i18n/de.po
  9. 43
      web_m2x_options/i18n/es.po
  10. 43
      web_m2x_options/i18n/fi.po
  11. 43
      web_m2x_options/i18n/fr.po
  12. 55
      web_m2x_options/i18n/it.po
  13. 43
      web_m2x_options/i18n/pt_BR.po
  14. 43
      web_m2x_options/i18n/sl.po
  15. 44
      web_m2x_options/i18n/tr.po
  16. 269
      web_m2x_options/static/src/js/form.js
  17. 13
      web_m2x_options/static/src/xml/base.xml

1
setup/web_m2x_options/odoo_addons/__init__.py

@ -0,0 +1 @@
__import__('pkg_resources').declare_namespace(__name__)

1
setup/web_m2x_options/odoo_addons/web_m2x_options

@ -0,0 +1 @@
../../../web_m2x_options

6
setup/web_m2x_options/setup.py

@ -0,0 +1,6 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)

92
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::
<field name="partner_id" options="{'limit': 10, 'create': false, 'create_edit': false, 'search_more':true 'field_color':'state', 'colors':{'active':'green'}}"/>
...
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 <https://github.com/OCA/web/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 <https://github.com/OCA/web/issues/new?body=module:%20web_m2x_options%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Credits
=======
Contributors
------------
* David Coninckx <davconinckx@gmail.com>
* Emanuel Cino <ecino@compassion.ch>
* Holger Brunn <hbrunn@therp.nl>
* Nicolas JEUDY <nicolas@sudokeys.com>
* Yannick Vaucher <yannick.vaucher@camptocamp.com>
* Zakaria Makrelouf <z.makrelouf@gmail.com>
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.

1
web_m2x_options/__init__.py

@ -0,0 +1 @@
# coding: utf-8

11
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,
}

43
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. <safi2266@gmail.com>, 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. <safi2266@gmail.com>\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 \"<strong>%s</strong>\""
msgstr "إنشاء \"<strong>%s</strong>\""
#. 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 "البحث عن المزيد ..."

43
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 <rs@techno-flex.de>, 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 <rs@techno-flex.de>\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 \"<strong>%s</strong>\""
msgstr "Anlegen \"<strong>%s</strong>"
#. 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..."

43
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 <pedro.baeza@gmail.com>, 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 <pedro.baeza@gmail.com>\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 \"<strong>%s</strong>\""
msgstr "Crear \"<strong>%s</strong>\""
#. 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..."

43
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 <jarmo.kortetjarvi@gmail.com>, 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 <jarmo.kortetjarvi@gmail.com>\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 \"<strong>%s</strong>\""
msgstr "Luo \"<strong>%s</strong>\""
#. 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ää..."

43
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 <christophe.chauvet@gmail.com>, 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 <christophe.chauvet@gmail.com>\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 \"<strong>%s</strong>\""
msgstr "Creer \"<strong>%s</strong>\""
#. 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..."

55
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 <aaltinisik@altinkaya.com.tr>, 2015
# Antonio Trueba, 2016
# Armando Vulcano Junior <vulcano@uol.com.br>, 2015
# Carles Antoli <carlesantoli@hotmail.com>, 2015
# Bole <bole@dajmi5.com>, 2015
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012,2014
# Giacomo <giacomo.spettoli@gmail.com>, 2015
# Hotellook, 2014
# Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2016
# Paolo Valier, 2016
# Paolo Valier, 2016
# Rudolf Schnapka <rs@techno-flex.de>, 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 \"<strong>%s</strong>\""
msgstr "Crea \"<strong>%s</strong>\""
#. 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..."

43
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 <danimaribeiro@gmail.com>, 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 <danimaribeiro@gmail.com>\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 \"<strong>%s</strong>\""
msgstr "Criar \"<strong>%s</strong>\""
#. 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..."

43
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č <m.mozetic@matmoz.si>, 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č <m.mozetic@matmoz.si>\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 \"<strong>%s</strong>\""
msgstr "Ustvari \"<strong>%s</strong>\""
#. 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č..."

44
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 <aaltinisik@altinkaya.com.tr>, 2015
# Ahmet Altınışık <aaltinisik@altinkaya.com.tr>, 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 <aaltinisik@altinkaya.com.tr>\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 \"<strong>%s</strong>\""
msgstr "Oluştur \"<strong>%s</strong>\""
#. 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..."

269
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 = '<span style="color:'+color+'">'+value.label+'</span>';
@ -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);
}
},
});
});

13
web_m2x_options/static/src/xml/base.xml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space="preserve">
<t t-extend="FieldMany2One">
<t t-jquery="a.oe_m2o_cm_button">
jQuery(this).attr('t-if', '!(widget.options.no_open || widget.options.no_open_edit)');
</t>
</t>
<t t-extend="FieldMany2ManyTag">
<t t-jquery="span.badge">
jQuery(this).attr('t-att-data-id', 'el[0]');
</t>
</t>
</templates>
Loading…
Cancel
Save