Bläddra i källkod

commit inicial

Rodney Enciso Arias 8 år sedan
incheckning
5a62504c4f
25 ändrade filer med 1761 tillägg och 0 borttagningar
  1. 171 0
      README.rst
  2. 2 0
      __init__.py
  3. BIN
      __init__.pyc
  4. 20 0
      __openerp__.py
  5. 63 0
      i18n/ar.po
  6. 66 0
      i18n/de.po
  7. 73 0
      i18n/es.po
  8. 65 0
      i18n/fi.po
  9. 53 0
      i18n/fr.po
  10. 67 0
      i18n/it.po
  11. 52 0
      i18n/nb_NO.po
  12. 65 0
      i18n/pt_BR.po
  13. 66 0
      i18n/sl.po
  14. 85 0
      i18n/tr.po
  15. 52 0
      i18n/zh_CN.po
  16. 2 0
      models/__init__.py
  17. BIN
      models/__init__.pyc
  18. 9 0
      models/model.py
  19. BIN
      models/model.pyc
  20. BIN
      static/description/icon.png
  21. 412 0
      static/description/index.html
  22. 399 0
      static/src/js/form.js
  23. 13 0
      static/src/xml/base.xml
  24. 14 0
      views/model_view.xml
  25. 12 0
      views/view.xml

+ 171 - 0
README.rst

@@ -0,0 +1,171 @@
+.. 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
+==================================
+
+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.
+
+Usage
+=====
+
+.. 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
+
+For further information, please visit:
+
+* https://www.odoo.com/forum/help-1
+
+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 buttons that open the linked resource
+
+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.
+
+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
+
+ir.model options
+----------------
+
+Now you can disable quick create globally on model base of the target model.
+
+``disable_quick_create`` *boolean* (Default: ``False``)
+
+  Whether to disable quick create for this model globally. This has the same effect as if you would add ``no_create`` to all m2x fields in all fields with that target model in their relation.
+
+Example
+-------
+
+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'}}"/>
+    ...
+
+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.
+- Client side caching of 'disable_quick_create' flag query on model.
+
+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>
+
+Maintainer
+----------
+
+.. image:: https://odoo-community.org/logo.png
+   :alt: Odoo Community Association
+   :target: https://odoo-community.org
+
+This module is maintained by the OCA.
+
+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.

+ 2 - 0
__init__.py

@@ -0,0 +1,2 @@
+# coding: utf-8
+from . import models

BIN
__init__.pyc


+ 20 - 0
__openerp__.py

@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+
+{
+    "name": 'web_m2x_options',
+    "version": "8.0.0.2.0",
+    "depends": [
+        'base',
+        'web',
+    ],
+    'qweb': [
+        'static/src/xml/base.xml',
+    ],
+    'license': 'AGPL-3',
+    'data': [
+        'views/view.xml',
+        'views/model_view.xml',
+    ],
+    "author": "0k.io,Odoo Community Association (OCA)",
+    "installable": True,
+}

+ 63 - 0
i18n/ar.po

@@ -0,0 +1,63 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+# 
+# Translators:
+# Ahmet Altinisik <aaltinisik@altinkaya.com.tr>, 2016
+# Alejandro Santana <alejandrosantana@anubia.es>, 2015
+# Antonio Trueba, 2016
+# Carles Antoli <carlesantoli@hotmail.com>, 2015
+# danimaribeiro <danimaribeiro@gmail.com>, 2016
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2010,2012
+# Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2016
+# Matjaž Mozetič <m.mozetic@matmoz.si>, 2015
+# Paolo Valier, 2016
+# SaFi J. <safi2266@gmail.com>, 2015
+# Thomas A. Jaeger, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-09-17 12:06+0000\n"
+"PO-Revision-Date: 2016-09-15 23:07+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>\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:202
+#: code:addons/web_m2x_options/static/src/js/form.js:341
+#, 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:224
+#: code:addons/web_m2x_options/static/src/js/form.js:362
+#, python-format
+msgid "Create and Edit..."
+msgstr "إنشاء وتحرير ..."
+
+#. module: web_m2x_options
+#: field:ir.model,disable_quick_create:0
+msgid "Disable quick create"
+msgstr ""
+
+#. module: web_m2x_options
+#: model:ir.model,name:web_m2x_options.model_ir_model
+msgid "Models"
+msgstr ""
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:167
+#: code:addons/web_m2x_options/static/src/js/form.js:316
+#, python-format
+msgid "Search More..."
+msgstr "البحث عن المزيد ..."

+ 66 - 0
i18n/de.po

@@ -0,0 +1,66 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+# 
+# Translators:
+# Ahmet Altinisik <aaltinisik@altinkaya.com.tr>, 2015
+# Antonio Trueba, 2016
+# Armando Vulcano Junior <vulcano@uol.com.br>, 2015
+# Christophe CHAUVET <christophe.chauvet@gmail.com>, 2015
+# danimaribeiro <danimaribeiro@gmail.com>, 2015-2016
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012,2014
+# Hotellook, 2014
+# Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2016
+# Matjaž Mozetič <m.mozetic@matmoz.si>, 2015
+# Paolo Valier, 2016
+# Pedro M. Baeza <pedro.baeza@gmail.com>, 2015
+# Rudolf Schnapka <rs@techno-flex.de>, 2016
+# Rudolf Schnapka <schnapkar@golive-saar.de>, 2015
+# SaFi J. <safi2266@gmail.com>, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-09-17 12:06+0000\n"
+"PO-Revision-Date: 2016-09-15 23:07+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:202
+#: code:addons/web_m2x_options/static/src/js/form.js:341
+#, 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:224
+#: code:addons/web_m2x_options/static/src/js/form.js:362
+#, python-format
+msgid "Create and Edit..."
+msgstr "Anlegen und Bearbeiten"
+
+#. module: web_m2x_options
+#: field:ir.model,disable_quick_create:0
+msgid "Disable quick create"
+msgstr ""
+
+#. module: web_m2x_options
+#: model:ir.model,name:web_m2x_options.model_ir_model
+msgid "Models"
+msgstr "Datenmodelle"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:167
+#: code:addons/web_m2x_options/static/src/js/form.js:316
+#, python-format
+msgid "Search More..."
+msgstr "Suche weitere..."

+ 73 - 0
i18n/es.po

@@ -0,0 +1,73 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+# 
+# Translators:
+# Antonio Trueba, 2016
+# Armando Vulcano Junior <vulcano@uol.com.br>, 2015
+# bossnm11 <bossnm11@gmail.com>, 2014
+# Chanseok <kcsgoodboy@gmail.com>, 2014
+# danimaribeiro <danimaribeiro@gmail.com>, 2016
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2010,2012,2014
+# Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2016
+# jeon <bluerespect@nate.com>, 2014
+# Jong-Dae Park <jdpark7@gmail.com>, 2013,2015
+# Kevin Min <gr326887@graded.br>, 2015
+# Kunwoo Kim <crazyabtmath@naver.com>, 2015
+# LEE SI HYEONG <super2451894@gmail.com>, 2014
+# Matjaž Mozetič <m.mozetic@matmoz.si>, 2015
+# Paolo Valier, 2016
+# Pedro M. Baeza <pedro.baeza@gmail.com>, 2015
+# Rudolf Schnapka <rs@techno-flex.de>, 2016
+# SaFi J. <safi2266@gmail.com>, 2015
+# Sam Ryoo <samryoo@gmail.com>, 2014
+# Seo. Junmin <sof.midnight@live.co.kr>, 2015
+# seungil <luck8778@gmail.com>, 2014
+# SEUNGWON <baeksw0620@gmail.com>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-09-17 12:06+0000\n"
+"PO-Revision-Date: 2016-09-15 23:07+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:202
+#: code:addons/web_m2x_options/static/src/js/form.js:341
+#, 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:224
+#: code:addons/web_m2x_options/static/src/js/form.js:362
+#, python-format
+msgid "Create and Edit..."
+msgstr "Crear y editar..."
+
+#. module: web_m2x_options
+#: field:ir.model,disable_quick_create:0
+msgid "Disable quick create"
+msgstr ""
+
+#. module: web_m2x_options
+#: model:ir.model,name:web_m2x_options.model_ir_model
+msgid "Models"
+msgstr "Modelos"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:167
+#: code:addons/web_m2x_options/static/src/js/form.js:316
+#, python-format
+msgid "Search More..."
+msgstr "Buscar más..."

+ 65 - 0
i18n/fi.po

@@ -0,0 +1,65 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+# 
+# Translators:
+# Ahmet Altinisik <aaltinisik@altinkaya.com.tr>, 2015
+# Antonio Trueba, 2016
+# danimaribeiro <danimaribeiro@gmail.com>, 2016
+# Bole <bole@dajmi5.com>, 2015
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011-2012,2014
+# Giacomo <giacomo.spettoli@gmail.com>, 2015
+# Hotellook, 2014
+# Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2016
+# Leonardo J. Caballero G. <leonardocaballero@gmail.com>, 2016
+# Matjaž Mozetič <m.mozetic@matmoz.si>, 2015-2016
+# Paolo Valier, 2016
+# Pedro M. Baeza <pedro.baeza@gmail.com>, 2015
+# 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-09-17 12:06+0000\n"
+"PO-Revision-Date: 2016-09-15 23:07+0000\n"
+"Last-Translator: OCA Transbot <transbot@odoo-community.org>\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:202
+#: code:addons/web_m2x_options/static/src/js/form.js:341
+#, 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:224
+#: code:addons/web_m2x_options/static/src/js/form.js:362
+#, python-format
+msgid "Create and Edit..."
+msgstr "Luo ja muokkaa..."
+
+#. module: web_m2x_options
+#: field:ir.model,disable_quick_create:0
+msgid "Disable quick create"
+msgstr ""
+
+#. module: web_m2x_options
+#: model:ir.model,name:web_m2x_options.model_ir_model
+msgid "Models"
+msgstr ""
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:167
+#: code:addons/web_m2x_options/static/src/js/form.js:316
+#, python-format
+msgid "Search More..."
+msgstr "Hae lisää..."

+ 53 - 0
i18n/fr.po

@@ -0,0 +1,53 @@
+# 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-09-17 12:06+0000\n"
+"PO-Revision-Date: 2016-09-15 23:07+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:202
+#: code:addons/web_m2x_options/static/src/js/form.js:341
+#, 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:224
+#: code:addons/web_m2x_options/static/src/js/form.js:362
+#, python-format
+msgid "Create and Edit..."
+msgstr "Créer et modifier..."
+
+#. module: web_m2x_options
+#: field:ir.model,disable_quick_create:0
+msgid "Disable quick create"
+msgstr ""
+
+#. module: web_m2x_options
+#: model:ir.model,name:web_m2x_options.model_ir_model
+msgid "Models"
+msgstr "Modèles"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:167
+#: code:addons/web_m2x_options/static/src/js/form.js:316
+#, python-format
+msgid "Search More..."
+msgstr "Rechercher plus..."

+ 67 - 0
i18n/it.po

@@ -0,0 +1,67 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+# 
+# Translators:
+# Ahmet Altinisik <aaltinisik@altinkaya.com.tr>, 2015
+# Antonio Trueba, 2016
+# Armando Vulcano Junior <vulcano@uol.com.br>, 2015
+# Bole <bole@dajmi5.com>, 2015
+# Carles Antoli <carlesantoli@hotmail.com>, 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-09-17 12:06+0000\n"
+"PO-Revision-Date: 2016-09-15 23:07+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:202
+#: code:addons/web_m2x_options/static/src/js/form.js:341
+#, 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:224
+#: code:addons/web_m2x_options/static/src/js/form.js:362
+#, python-format
+msgid "Create and Edit..."
+msgstr "Crea e Modifica..."
+
+#. module: web_m2x_options
+#: field:ir.model,disable_quick_create:0
+msgid "Disable quick create"
+msgstr ""
+
+#. module: web_m2x_options
+#: model:ir.model,name:web_m2x_options.model_ir_model
+msgid "Models"
+msgstr "Modelli"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:167
+#: code:addons/web_m2x_options/static/src/js/form.js:316
+#, python-format
+msgid "Search More..."
+msgstr "Cerca altro..."

+ 52 - 0
i18n/nb_NO.po

@@ -0,0 +1,52 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-09-17 12:06+0000\n"
+"PO-Revision-Date: 2015-11-07 11:20+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/oca/OCA-web-8-0/language/nb_NO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: nb_NO\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:202
+#: code:addons/web_m2x_options/static/src/js/form.js:341
+#, python-format
+msgid "Create \"<strong>%s</strong>\""
+msgstr ""
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:224
+#: code:addons/web_m2x_options/static/src/js/form.js:362
+#, python-format
+msgid "Create and Edit..."
+msgstr ""
+
+#. module: web_m2x_options
+#: field:ir.model,disable_quick_create:0
+msgid "Disable quick create"
+msgstr ""
+
+#. module: web_m2x_options
+#: model:ir.model,name:web_m2x_options.model_ir_model
+msgid "Models"
+msgstr "Modeller"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:167
+#: code:addons/web_m2x_options/static/src/js/form.js:316
+#, python-format
+msgid "Search More..."
+msgstr ""

+ 65 - 0
i18n/pt_BR.po

@@ -0,0 +1,65 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+# 
+# Translators:
+# Artūras Griškonis <ArtX38@gmail.com>, 2012,2015-2016
+# Artūras Griškonis <xbmc.lt@gmail.com>, 2012
+# Carles Antoli <carlesantoli@hotmail.com>, 2015
+# danimaribeiro <danimaribeiro@gmail.com>, 2016
+# danimaribeiro <danimaribeiro@gmail.com>, 2016
+# Dorin Hongu <dhongu@gmail.com>, 2015
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012
+# Guewen Baconnier <guewen.baconnier@camptocamp.com>, 2015
+# Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2016
+# Matjaž Mozetič <m.mozetic@matmoz.si>, 2015-2016
+# Pedro M. Baeza <pedro.baeza@gmail.com>, 2015
+# Rudolf Schnapka <rs@techno-flex.de>, 2016
+# Zapata11 <raimondas.duzinskas@gmail.com>, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-09-17 12:06+0000\n"
+"PO-Revision-Date: 2016-09-15 23:07+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:202
+#: code:addons/web_m2x_options/static/src/js/form.js:341
+#, 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:224
+#: code:addons/web_m2x_options/static/src/js/form.js:362
+#, python-format
+msgid "Create and Edit..."
+msgstr "Criar e editar.."
+
+#. module: web_m2x_options
+#: field:ir.model,disable_quick_create:0
+msgid "Disable quick create"
+msgstr ""
+
+#. module: web_m2x_options
+#: model:ir.model,name:web_m2x_options.model_ir_model
+msgid "Models"
+msgstr "Modelos"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:167
+#: code:addons/web_m2x_options/static/src/js/form.js:316
+#, python-format
+msgid "Search More..."
+msgstr "Buscar mais..."

+ 66 - 0
i18n/sl.po

@@ -0,0 +1,66 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+# 
+# Translators:
+# Ahmet Altinisik <aaltinisik@altinkaya.com.tr>, 2015-2016
+# Antonio Trueba, 2016
+# Christophe CHAUVET <christophe.chauvet@gmail.com>, 2015
+# danimaribeiro <danimaribeiro@gmail.com>, 2016
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012,2014
+# Hotellook, 2014
+# Isabelle RICHARD <isabellerichard89@gmail.com>, 2015
+# Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2016
+# Jesús Alan Ramos Rodríguez <alan.ramos@jarsa.com.mx>, 2015
+# Lixon Jean-Yves <ls.development.nc@gmail.com>, 2016
+# Matjaž Mozetič <m.mozetic@matmoz.si>, 2015-2016
+# Paolo Valier, 2016
+# Pedro Castro Silva <pedrocs@sossia.pt>, 2015
+# 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-09-17 12:06+0000\n"
+"PO-Revision-Date: 2016-09-16 12:33+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:202
+#: code:addons/web_m2x_options/static/src/js/form.js:341
+#, 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:224
+#: code:addons/web_m2x_options/static/src/js/form.js:362
+#, python-format
+msgid "Create and Edit..."
+msgstr "Ustvari in urejaj..."
+
+#. module: web_m2x_options
+#: field:ir.model,disable_quick_create:0
+msgid "Disable quick create"
+msgstr "Onemogoči hitro ustvarjanje"
+
+#. module: web_m2x_options
+#: model:ir.model,name:web_m2x_options.model_ir_model
+msgid "Models"
+msgstr "Modeli"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:167
+#: code:addons/web_m2x_options/static/src/js/form.js:316
+#, python-format
+msgid "Search More..."
+msgstr "Poišči več..."

+ 85 - 0
i18n/tr.po

@@ -0,0 +1,85 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+# 
+# Translators:
+# Ahmet Altinisik <aaltinisik@altinkaya.com.tr>, 2015-2016
+# Ahmet Altinisik <aaltinisik@altinkaya.com.tr>, 2015
+# Antonio Trueba, 2016
+# bossnm11 <bossnm11@gmail.com>, 2014
+# Carles Antoli <carlesantoli@hotmail.com>, 2015
+# Chanseok <kcsgoodboy@gmail.com>, 2014
+# Chul Park <parkchul@nate.com>, 2015
+# danimaribeiro <danimaribeiro@gmail.com>, 2016
+# David10000 <gameness@naver.com>, 2014
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012-2013
+# Gil <gedwarp@gmail.com>, 2014
+# kmooc <shevious@gmail.com>, 2015
+# Hongseob Lee <shevreg@yahoo.com>, 2015
+# Hotellook, 2014
+# Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2016
+# jeon <bluerespect@nate.com>, 2014
+# JiyeonLee <leejiyeon00@gmail.com>, 2014
+# Jong-Dae Park <jdpark7@gmail.com>, 2013
+# Kevin Min <gr326887@graded.br>, 2015
+# KimKyudong <choemh@nate.com>, 2014
+# mariana1201 <gogo3135@naver.com>, 2014
+# Matjaž Mozetič <m.mozetic@matmoz.si>, 2015-2016
+# Nicole <dlruddk1112@gmail.com>, 2014
+# Paolo Valier, 2016
+# Pope, 2014
+# Rudolf Schnapka <rs@techno-flex.de>, 2016
+# Sarina Canelake <sarina@edx.org>, 2014
+# Seok Jun Yoon <fake2real@dctribe.com>, 2015
+# shin2012 <shin2013@gmail.com>, 2014
+# Sujin Lee <sujinlee.me@gmail.com>, 2014
+# Sunah Lim <whitetree70@snu.ac.kr>, 2013
+# Thomas A. Jaeger, 2015
+# Young C. Kim, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-09-17 12:06+0000\n"
+"PO-Revision-Date: 2016-09-15 23:07+0000\n"
+"Last-Translator: Ahmet Altinisik <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:202
+#: code:addons/web_m2x_options/static/src/js/form.js:341
+#, 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:224
+#: code:addons/web_m2x_options/static/src/js/form.js:362
+#, python-format
+msgid "Create and Edit..."
+msgstr "Oluştur ve düzenle..."
+
+#. module: web_m2x_options
+#: field:ir.model,disable_quick_create:0
+msgid "Disable quick create"
+msgstr ""
+
+#. module: web_m2x_options
+#: model:ir.model,name:web_m2x_options.model_ir_model
+msgid "Models"
+msgstr "Modeller"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:167
+#: code:addons/web_m2x_options/static/src/js/form.js:316
+#, python-format
+msgid "Search More..."
+msgstr "Daha Fazla..."

+ 52 - 0
i18n/zh_CN.po

@@ -0,0 +1,52 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_m2x_options
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: web (8.0)\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-09-17 12:06+0000\n"
+"PO-Revision-Date: 2015-11-07 11:20+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: Chinese (China) (http://www.transifex.com/oca/OCA-web-8-0/language/zh_CN/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:202
+#: code:addons/web_m2x_options/static/src/js/form.js:341
+#, python-format
+msgid "Create \"<strong>%s</strong>\""
+msgstr ""
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:224
+#: code:addons/web_m2x_options/static/src/js/form.js:362
+#, python-format
+msgid "Create and Edit..."
+msgstr ""
+
+#. module: web_m2x_options
+#: field:ir.model,disable_quick_create:0
+msgid "Disable quick create"
+msgstr ""
+
+#. module: web_m2x_options
+#: model:ir.model,name:web_m2x_options.model_ir_model
+msgid "Models"
+msgstr "模型"
+
+#. module: web_m2x_options
+#. openerp-web
+#: code:addons/web_m2x_options/static/src/js/form.js:167
+#: code:addons/web_m2x_options/static/src/js/form.js:316
+#, python-format
+msgid "Search More..."
+msgstr ""

+ 2 - 0
models/__init__.py

@@ -0,0 +1,2 @@
+# coding: utf-8
+from . import model

BIN
models/__init__.pyc


+ 9 - 0
models/model.py

@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+
+from openerp import models, fields
+
+
+class IrModel(models.Model):
+    _inherit = 'ir.model'
+
+    disable_quick_create = fields.Boolean('Disable quick create')

BIN
models/model.pyc


BIN
static/description/icon.png


+ 412 - 0
static/description/index.html

@@ -0,0 +1,412 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.12: http://docutils.sourceforge.net/" />
+<title>Add new options for many2one field</title>
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 7614 2013-02-21 15:55:51Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+  border: 0 }
+
+table.borderless td, table.borderless th {
+  /* Override padding for "table.docutils td" with "! important".
+     The right padding separates the table cells. */
+  padding: 0 0.5em 0 0 ! important }
+
+.first {
+  /* Override more specific margin styles with "! important". */
+  margin-top: 0 ! important }
+
+.last, .with-subtitle {
+  margin-bottom: 0 ! important }
+
+.hidden {
+  display: none }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: black }
+
+blockquote.epigraph {
+  margin: 2em 5em ; }
+
+dl.docutils dd {
+  margin-bottom: 0.5em }
+
+object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
+  overflow: hidden;
+}
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+  font-weight: bold }
+*/
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title, .code .error {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+   compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+  margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+  margin-top: 0.5em }
+*/
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+div.footer, div.header {
+  clear: both;
+  font-size: smaller }
+
+div.line-block {
+  display: block ;
+  margin-top: 1em ;
+  margin-bottom: 1em }
+
+div.line-block div.line-block {
+  margin-top: 0 ;
+  margin-bottom: 0 ;
+  margin-left: 1.5em }
+
+div.sidebar {
+  margin: 0 0 0.5em 1em ;
+  border: medium outset ;
+  padding: 1em ;
+  background-color: #ffffee ;
+  width: 40% ;
+  float: right ;
+  clear: right }
+
+div.sidebar p.rubric {
+  font-family: sans-serif ;
+  font-size: medium }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium outset ;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+  margin-top: 0.4em }
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr.docutils {
+  width: 75% }
+
+img.align-left, .figure.align-left, object.align-left {
+  clear: left ;
+  float: left ;
+  margin-right: 1em }
+
+img.align-right, .figure.align-right, object.align-right {
+  clear: right ;
+  float: right ;
+  margin-left: 1em }
+
+img.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+  text-align: left }
+
+.align-center {
+  clear: both ;
+  text-align: center }
+
+.align-right {
+  text-align: right }
+
+/* reset inner alignment in figures */
+div.align-right {
+  text-align: inherit }
+
+/* div.align-center * { */
+/*   text-align: left } */
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.attribution {
+  text-align: right ;
+  margin-left: 50% }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.rubric {
+  font-weight: bold ;
+  font-size: larger ;
+  color: maroon ;
+  text-align: center }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font: inherit }
+
+pre.literal-block, pre.doctest-block, pre.math, pre.code {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+pre.code .ln { color: grey; } /* line numbers */
+pre.code, code { background-color: #eeeeee }
+pre.code .comment, code .comment { color: #5C6576 }
+pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
+pre.code .literal.string, code .literal.string { color: #0C5404 }
+pre.code .name.builtin, code .name.builtin { color: #352B84 }
+pre.code .deleted, code .deleted { background-color: #DEB0A1}
+pre.code .inserted, code .inserted { background-color: #A3D289}
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+span.section-subtitle {
+  /* font-size relative to parent (h1..h6 element) */
+  font-size: 80% }
+
+table.citation {
+  border-left: solid 1px gray;
+  margin-left: 1px }
+
+table.docinfo {
+  margin: 2em 4em }
+
+table.docutils {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.footnote {
+  border-left: solid 1px black;
+  margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap ;
+  padding-left: 0 }
+
+/* "booktabs" style (no vertical lines) */
+table.docutils.booktabs {
+  border: 0px;
+  border-top: 2px solid;
+  border-bottom: 2px solid;
+  border-collapse: collapse;
+}
+table.docutils.booktabs * {
+  border: 0px;
+}
+table.docutils.booktabs th {
+  border-bottom: thin solid;
+  text-align: left;
+}
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+  font-size: 100% }
+
+ul.auto-toc {
+  list-style-type: none }
+
+</style>
+</head>
+<body>
+<div class="document" id="add-new-options-for-many2one-field">
+<h1 class="title">Add new options for many2one field</h1>
+
+<div class="section" id="description">
+<h1>Description</h1>
+<p>This modules modifies &quot;many2one&quot; and &quot;many2manytags&quot; form widgets so as to add some new display
+control options.</p>
+<p><strong>New: support many2manytags widget !</strong></p>
+<p><strong>New: support global option management with ir.config_parameter !</strong></p>
+<p>Options provided includes possibility to remove &quot;Create...&quot; and/or &quot;Create and
+Edit...&quot; 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.</p>
+<p>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.</p>
+</div>
+<div class="section" id="requirements">
+<h1>Requirements</h1>
+<p>Was tested on openerp 8.0, trunk, saas-5 branch. New way to import js file. (thanks to tfossoul)</p>
+</div>
+<div class="section" id="new-options">
+<h1>New options</h1>
+<p><tt class="docutils literal">create</tt> <em>boolean</em> (Default: depends if user have create rights)</p>
+<blockquote>
+Whether to display the &quot;Create...&quot; entry in dropdown panel.</blockquote>
+<p><tt class="docutils literal">create_edit</tt> <em>boolean</em> (Default: depends if user have create rights)</p>
+<blockquote>
+Whether to display &quot;Create and Edit...&quot; entry in dropdown panel</blockquote>
+<p><tt class="docutils literal">m2o_dialog</tt> <em>boolean</em> (Default: depends if user have create rights)</p>
+<blockquote>
+Whether to display the many2one dialog in case of validation error.</blockquote>
+<p><tt class="docutils literal">limit</tt> <em>int</em> (Default: openerp default value is <tt class="docutils literal">7</tt>)</p>
+<blockquote>
+Number of displayed record in drop-down panel</blockquote>
+</div>
+<div class="section" id="ir-config-parameter-options">
+<h1>ir.config_parameter options</h1>
+<p>Now you can disable &quot;Create...&quot; and &quot;Create and Edit...&quot; entry for all widgets in the odoo instance.
+If you disable one option, you can enable it for particular field by setting &quot;create: True&quot; option directly on the field definition.</p>
+<p><tt class="docutils literal">web_m2x_options.create</tt> <em>boolean</em> (Default: depends if user have create rights)</p>
+<blockquote>
+Whether to display the &quot;Create...&quot; entry in dropdown panel for all fields in the odoo instance.</blockquote>
+<p><tt class="docutils literal">web_m2x_options.create_edit</tt> <em>boolean</em> (Default: depends if user have create rights)</p>
+<blockquote>
+Whether to display &quot;Create and Edit...&quot; entry in dropdown panel for all fields in the odoo instance.</blockquote>
+<p><tt class="docutils literal">web_m2x_options.limit</tt> <em>int</em> (Default: openerp default value is <tt class="docutils literal">7</tt>)</p>
+<blockquote>
+Number of displayed record in drop-down panel for all fields in the odoo instance</blockquote>
+<p>To add these parameters go to Configuration -&gt; Technical -&gt; Parameters -&gt; System Parameters and add new parameters like:</p>
+<ul class="simple">
+<li>web_m2x_options.create: False</li>
+<li>web_m2x_options.create_edit: False</li>
+<li>web_m2x_options.limit: 10</li>
+</ul>
+</div>
+<div class="section" id="example">
+<h1>Example</h1>
+<p>Your XML form view definition could contain:</p>
+<pre class="literal-block">
+...
+&lt;field name=&quot;partner_id&quot; options=&quot;{'limit': 10, 'create': false, 'create_edit': false}&quot;/&gt;
+...
+</pre>
+</div>
+<div class="section" id="note">
+<h1>Note</h1>
+<p>Double check that you have no inherited view that remote <tt class="docutils literal">options</tt> you set on a field !
+If nothing work, add a debugger in the first ligne of <tt class="docutils literal">get_search_result method</tt> and enable debug mode in OpenERP. When you write something in a many2one field, javascript debugger should pause. If not verify your installation.</p>
+</div>
+</div>
+</body>
+</html>

+ 399 - 0
static/src/js/form.js

@@ -0,0 +1,399 @@
+/*global openerp, _, $ */
+
+openerp.web_m2x_options = function (instance) {
+
+    "use strict";
+
+    var QWeb = instance.web.qweb,
+        _t  = instance.web._t,
+        _lt = instance.web._lt;
+
+    var OPTIONS = ['web_m2x_options.create',
+                   'web_m2x_options.create_edit',
+                   'web_m2x_options.limit',
+                   'web_m2x_options.search_more',
+                   'web_m2x_options.m2o_dialog',];
+
+    instance.web.form.FieldMany2One = instance.web.form.FieldMany2One.extend({
+
+        start: function() {
+            this._super.apply(this, arguments);
+            return this.get_options();
+        },
+
+        get_options: function() {
+            var self = this;
+            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"))
+                .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;
+            }
+            return $.when();
+        },
+
+        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
+        },
+
+        show_error_displayer: function () {
+            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();
+            }
+        },
+
+        get_search_result: function (search_val) {
+            var Objects = new instance.web.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 (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,
+                                                   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(
+                    self.build_domain(), [["id", "not in", blacklist]]),
+                'ilike', this.limit + 1,
+                self.build_context()));
+
+            var create_rights;
+            if (!(self.options && (self.options.no_create || self.options.no_create_edit))) {
+                // check quick create options
+                var target_model = this.field.relation
+                create_rights = new instance.web.Model('ir.model').
+                    query(['disable_quick_create']).
+                    filter([['model', '=', target_model]]).
+                    first().
+                    then(function(result){
+                        if(result.disable_quick_create)
+                            return $.when(false);
+                        else
+                            return new instance.web.Model(target_model).call(
+                                "check_access_rights", ["create", false]);
+                    });
+            }
+
+            $.when(search_result, create_rights).then(function (data, can_create) {
+
+                self.can_create = can_create;  // for ``.show_error_displayer()``
+                self.last_search = data;
+                // possible selections for the m2o
+                var values = _.map(data, function (x) {
+                    x[1] = x[1].split("\n")[0];
+                    return {
+                        label: _.str.escapeHTML(x[1]),
+                        value: x[1],
+                        name: x[1],
+                        id: x[0],
+                    };
+                });
+
+                // 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]])
+                                .all().done(function (objects) {
+                                    for (var index in objects) {
+                                        for (var index_value in values) {
+                                            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>';
+                                                break;
+                                            }
+                                        }
+                                    }
+                                    def.resolve(values);
+                                });
+                }
+
+                // search more... if more results that max
+
+                if (values.length > self.limit || self.search_more) {
+                    values = values.slice(0, self.limit);
+                    values.push({
+                        label: _t("Search More..."),
+                        action: function () {
+                            // 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'
+                    });
+                }
+
+                // quick create
+
+                var raw_result = _(data.result).map(function (x) {
+                    return x[1];
+                });
+                var no_quick_create = (
+                    self.options && (self.options.no_create ||
+                                     self.options.no_quick_create)
+                )
+                var m2x_create_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create'])
+                var m2x_create = self.view.ir_options['web_m2x_options.create'] == "True"
+
+                if (!no_quick_create && ((m2x_create_undef && can_create) ||
+                                         m2x_create)) {
+
+                    if (search_val.length > 0 &&
+                        !_.include(raw_result, search_val)) {
+
+                        values.push({
+                            label: _.str.sprintf(
+                                _t('Create "<strong>%s</strong>"'),
+                                $('<span />').text(search_val).html()),
+                            action: function () {
+                                self._quick_create(search_val);
+                            },
+                            classname: 'oe_m2o_dropdown_option'
+                        });
+                    }
+                }
+
+                // create...
+                var no_create_edit = (
+                    self.options && (self.options.no_create ||
+                                     self.options.no_create_edit)
+                )
+                var m2x_create_edit_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create_edit'])
+                var m2x_create_edit = self.view.ir_options['web_m2x_options.create_edit'] == "True"
+
+                if (!no_create_edit && ((m2x_create_edit_undef && can_create) ||
+                                        m2x_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'
+                    });
+                }
+
+                // Check if colors specified to wait for RPC
+                if (!(self.field_color && self.colors)){
+                    def.resolve(values);
+                }
+            });
+
+            return def;
+        }
+    });
+
+    instance.web.form.FieldMany2ManyTags.include({
+
+        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();
+            }
+        },
+
+        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;
+        },
+
+        /**
+        * Call this method to search using a string.
+        */
+
+        get_search_result: function(search_val) {
+            var self = this;
+
+            // 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 (typeof this.options.limit === 'number') {
+                this.limit = this.options.limit;
+            }
+
+            var dataset = new instance.web.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]]),
+                    'ilike', this.limit + 1, self.build_context())).then(function(data) {
+                self.last_search = data;
+                // possible selections for the m2o
+                var values = _.map(data, function(x) {
+                    x[1] = x[1].split("\n")[0];
+                    return {
+                        label: _.str.escapeHTML(x[1]),
+                        value: x[1],
+                        name: x[1],
+                        id: x[0],
+                    };
+                });
+
+                // search more... if more results that max
+                if (values.length > self.limit) {
+                    values = values.slice(0, self.limit);
+                    values.push({
+                        label: _t("Search More..."),
+                        action: function() {
+                            // 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'
+                    });
+                }
+                // quick create
+                var no_quick_create = (
+                    self.options && (self.options.no_create ||
+                                     self.options.no_quick_create)
+                )
+                var m2x_create_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create'])
+                var m2x_create = self.view.ir_options['web_m2x_options.create'] == "True"
+
+                if (!no_quick_create && (m2x_create_undef || m2x_create)) {
+
+                    var raw_result = _(data.result).map(function(x) {return x[1];});
+                    if (search_val.length > 0 && !_.include(raw_result, search_val)) {
+                        values.push({
+                            label: _.str.sprintf(_t('Create "<strong>%s</strong>"'),
+                                $('<span />').text(search_val).html()),
+                            action: function() {
+                                self._quick_create(search_val);
+                            },
+                            classname: 'oe_m2o_dropdown_option'
+                        });
+                    }
+                }
+
+                // create...
+                var no_create_edit = (
+                    self.options && (self.options.no_create ||
+                                     self.options.no_create_edit)
+                )
+                var m2x_create_edit_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create_edit'])
+                var m2x_create_edit = self.view.ir_options['web_m2x_options.create_edit'] == "True"
+
+                if (!no_create_edit && (m2x_create_edit_undef || m2x_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'
+                    });
+                }
+
+                return values;
+            })
+        },
+
+        render_value: function()
+        {
+            var self = this;
+            return jQuery.when(this._super.apply(this, arguments))
+            .then(function()
+            {
+                if(self.options.open)
+                {
+                    self.$el.find('.oe_tag')
+                    .css('cursor', 'pointer')
+                    .click(function(e)
+                    {
+                        var id = parseInt(jQuery(this).attr('data-id'));
+                        self.do_action({
+                            type: 'ir.actions.act_window',
+                            res_model: self.field.relation,
+                            views: [[false, 'form']],
+                            res_id: id,
+                        });
+                    });
+                }
+            });
+        },
+    });
+};
+

+ 13 - 0
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.oe_tag">
+        jQuery(this).attr('t-att-data-id', 'el[0]');
+    </t>
+</t>
+</templates>

+ 14 - 0
views/model_view.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+        <record id="view_model_form" model="ir.ui.view">
+            <field name="model">ir.model</field>
+            <field name="inherit_id" ref="base.view_model_form"></field>
+            <field name="arch" type="xml">
+                <field name="osv_memory" position="after">
+                    <field name="disable_quick_create"/>
+                </field>
+            </field>
+        </record>
+    </data>
+</openerp>

+ 12 - 0
views/view.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- vim:fdn=3:
+-->
+<openerp>
+    <data>
+        <template id="assets_backend" name="m2x options assets" inherit_id="web.assets_backend">
+            <xpath expr="." position="inside">
+                <script type="text/javascript" src="/web_m2x_options/static/src/js/form.js"></script>
+            </xpath>
+        </template>
+    </data>
+</openerp>