Browse Source

Merge remote-tracking branch 'upstream/8.0' into 8.0

pull/135/head
Ivan Yelizariev 10 years ago
parent
commit
8358e2d1e3
  1. 1
      .travis.yml
  2. 67
      __unported__/web_nocreatedb/__openerp__.py
  3. BIN
      __unported__/web_nocreatedb/static/src/img/screen.png
  4. 16
      __unported__/web_nocreatedb/static/src/xml/web_nocreatedb.xml
  5. 166
      help_online/i18n/help_online.pot
  6. 179
      help_online/i18n/sl.po
  7. 7
      web_export_view/AUTHORS.txt
  8. 50
      web_export_view/README.rst
  9. 20
      web_export_view/__openerp__.py
  10. 47
      web_export_view/i18n/sl.po
  11. BIN
      web_export_view/static/description/icon.png
  12. 8
      web_export_view/static/src/js/web_export_view.js
  13. 46
      web_hide_db_manager_link/README.rst
  14. 0
      web_hide_db_manager_link/__init__.py
  15. 36
      web_hide_db_manager_link/__openerp__.py
  16. BIN
      web_hide_db_manager_link/static/description/icon.png
  17. 128
      web_hide_db_manager_link/static/description/icon.svg
  18. BIN
      web_hide_db_manager_link/static/src/img/screenshot.png
  19. 13
      web_hide_db_manager_link/views/webclient_templates.xml
  20. 48
      web_ir_actions_act_window_message/README.rst
  21. 20
      web_ir_actions_act_window_message/__init__.py
  22. 43
      web_ir_actions_act_window_message/__openerp__.py
  23. BIN
      web_ir_actions_act_window_message/static/description/icon.png
  24. 50
      web_ir_actions_act_window_message/static/src/js/web_ir_actions_act_window_message.js
  25. 5
      web_ir_actions_act_window_message/static/src/xml/web_ir_actions_act_window_message.xml
  26. 10
      web_ir_actions_act_window_message/views/templates.xml
  27. 54
      web_option_auto_color/README.rst
  28. 1
      web_option_auto_color/__init__.py
  29. 41
      web_option_auto_color/__openerp__.py
  30. 57
      web_option_auto_color/static/src/js/view_list.js
  31. 8
      web_option_auto_color/static/src/xml/templates.xml
  32. 10
      web_option_auto_color/views/web_option_auto_color.xml
  33. 30
      web_searchbar_full_width/README.rst
  34. 20
      web_searchbar_full_width/__init__.py
  35. 45
      web_searchbar_full_width/__openerp__.py
  36. BIN
      web_searchbar_full_width/static/description/icon.png
  37. BIN
      web_searchbar_full_width/static/description/preview.png
  38. 20
      web_searchbar_full_width/static/src/css/web_searchbar_full_width.css
  39. 15
      web_searchbar_full_width/static/src/xml/web_searchbar_full_width.xml
  40. 10
      web_searchbar_full_width/views/templates.xml
  41. 4
      web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js
  42. 35
      web_widget_many2many_tags_multi_selection/README.rst
  43. 20
      web_widget_many2many_tags_multi_selection/__init__.py
  44. 36
      web_widget_many2many_tags_multi_selection/__openerp__.py
  45. 38
      web_widget_many2many_tags_multi_selection/static/src/js/view_form.js
  46. 10
      web_widget_many2many_tags_multi_selection/views/web_widget_many2many_tags_multi_selection.xml
  47. 78
      web_widget_x2many_2d_matrix/README.rst
  48. 20
      web_widget_x2many_2d_matrix/__init__.py
  49. 45
      web_widget_x2many_2d_matrix/__openerp__.py
  50. BIN
      web_widget_x2many_2d_matrix/static/description/icon.png
  51. BIN
      web_widget_x2many_2d_matrix/static/description/screenshot.png
  52. 8
      web_widget_x2many_2d_matrix/static/src/css/web_widget_x2many_2d_matrix.css
  53. 380
      web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js
  54. 36
      web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml
  55. 11
      web_widget_x2many_2d_matrix/views/templates.xml

1
.travis.yml

@ -1,3 +1,4 @@
sudo: required
language: python
python:

67
__unported__/web_nocreatedb/__openerp__.py

@ -1,67 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
# Financed and Planified by Vauxoo
# developed by: tulio@vauxoo.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': "NO create database link",
'author': "Vauxoo,Odoo Community Association (OCA)",
'category': "Web",
'website': "http://vauxoo.com",
'description': """
After install this module, you will not see anymore the
"Manage Databases" link in login screen.
See the image bellow:
.. image:: web_nocreatedb/static/src/img/screen.png
How to use:
When you start your server add the name of this module in the "load" option::
$./openerp-server --load=web,web_nocreatedb -u all -d database
Then you can start your server without the -u and -d (just the first time you
need update all to be sure all base and web will be fine).
With this option you can just take off and restart the server if you need to show
the link temporaly again.
TODO: It should be great add a parameter in the database to hide it configurable
way and with web_preload: True, but BTW, in old versions of openerp it was a
parameter in the config file, i think as it is is fine for now.
.. note:: This module probably will not be shown in your module list by default
You should create a menu to see "All modules without filter.
""",
'version': "1.0",
'depends': [
'web',
],
'js': [
],
'css': [
],
'qweb': [
'static/src/xml/web_nocreatedb.xml',
],
'installable': False,
'auto_install': False,
}

BIN
__unported__/web_nocreatedb/static/src/img/screen.png

Before

Width: 600  |  Height: 302  |  Size: 70 KiB

16
__unported__/web_nocreatedb/static/src/xml/web_nocreatedb.xml

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
-->
<templates id="template" xml:space="preserve">
<t t-extend="Login">
<t t-jquery="div[class=oe_login_footer]" t-operation="replace">
<div class="oe_login_footer">
<a href="http://www.openerp.com" target="_blank">Powered by <span>OpenERP</span></a>
</div>
</t>
</t>
</templates>

166
help_online/i18n/help_online.pot

@ -0,0 +1,166 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * help_online
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-04-24 05:56+0000\n"
"PO-Revision-Date: 2015-04-24 05:56+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: help_online
#: view:export.help.wizard:help_online.export_help_wizard_view
#: view:import.help.wizard:help_online.import_help_wizard_view
msgid "Close"
msgstr ""
#. module: help_online
#: field:export.help.wizard,create_uid:0
#: field:help.online,create_uid:0
#: field:import.help.wizard,create_uid:0
msgid "Created by"
msgstr ""
#. module: help_online
#: field:export.help.wizard,create_date:0
#: field:help.online,create_date:0
#: field:import.help.wizard,create_date:0
msgid "Created on"
msgstr ""
#. module: help_online
#: view:export.help.wizard:help_online.export_help_wizard_view
msgid "Export"
msgstr ""
#. module: help_online
#: model:ir.actions.act_window,name:help_online.action_export_help_wizard
msgid "Export Help"
msgstr ""
#. module: help_online
#: view:export.help.wizard:help_online.export_help_wizard_view
msgid "Export Help Data"
msgstr ""
#. module: help_online
#: model:ir.model,name:help_online.model_export_help_wizard
#: model:ir.ui.menu,name:help_online.menu_help_export
msgid "Export Help Online"
msgstr ""
#. module: help_online
#: field:export.help.wizard,export_filename:0
msgid "Export XML Filename"
msgstr ""
#. module: help_online
#: model:ir.ui.menu,name:help_online.menu_help
#: model:ir.ui.menu,name:help_online.menu_help_main
msgid "Help Online"
msgstr ""
#. module: help_online
#: model:res.groups,name:help_online.help_online_group_reader
msgid "Help reader"
msgstr ""
#. module: help_online
#: model:res.groups,name:help_online.help_online_group_writer
msgid "Help writer"
msgstr ""
#. module: help_online
#: field:export.help.wizard,id:0
#: field:help.online,id:0
#: field:import.help.wizard,id:0
msgid "ID"
msgstr ""
#. module: help_online
#: view:import.help.wizard:help_online.import_help_wizard_view
msgid "Import"
msgstr ""
#. module: help_online
#: model:ir.actions.act_window,name:help_online.action_import_help_wizard
msgid "Import Help"
msgstr ""
#. module: help_online
#: view:import.help.wizard:help_online.import_help_wizard_view
msgid "Import Help Data"
msgstr ""
#. module: help_online
#: model:ir.ui.menu,name:help_online.menu_help_import
msgid "Import Help Online"
msgstr ""
#. module: help_online
#: field:export.help.wizard,write_uid:0
#: field:help.online,write_uid:0
#: field:import.help.wizard,write_uid:0
msgid "Last Updated by"
msgstr ""
#. module: help_online
#: field:export.help.wizard,write_date:0
#: field:help.online,write_date:0
#: field:import.help.wizard,write_date:0
msgid "Last Updated on"
msgstr ""
#. module: help_online
#: field:import.help.wizard,source_file:0
msgid "Source File"
msgstr ""
#. module: help_online
#: view:export.help.wizard:help_online.export_help_wizard_view
msgid "This wizard allow you to export all QWeb views\n"
" related to help online. The result will be an Odoo\n"
" data xml file."
msgstr ""
#. module: help_online
#: view:import.help.wizard:help_online.import_help_wizard_view
msgid "This wizard allow you to import QWeb views\n"
" related to help online. The required file format is an Odoo\n"
" data xml file."
msgstr ""
#. module: help_online
#: view:ir.ui.view:help_online.view_view_search
msgid "Website Page"
msgstr ""
#. module: help_online
#: view:ir.ui.view:help_online.view_view_form
msgid "Website Page?"
msgstr ""
#. module: help_online
#: model:ir.actions.act_window,name:help_online.action_website_pages
#: model:ir.ui.menu,name:help_online.menu_help_pages
msgid "Website Pages"
msgstr ""
#. module: help_online
#: field:export.help.wizard,data:0
msgid "XML"
msgstr ""
#. module: help_online
#: view:export.help.wizard:help_online.export_help_wizard_view
#: view:import.help.wizard:help_online.import_help_wizard_view
msgid "or"
msgstr ""

179
help_online/i18n/sl.po

@ -0,0 +1,179 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * help_online
#
# Matjaž Mozetič <m.mozetic@matmoz.si>, 2015.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-04-24 05:56+0000\n"
"PO-Revision-Date: 2015-04-24 08:06+0100\n"
"Last-Translator: Matjaž Mozetič <m.mozetic@matmoz.si>\n"
"Language-Team: Slovenian <translate@matmoz.si>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
"Language: sl\n"
"X-Generator: Lokalize 2.0\n"
#. module: help_online
#: view:export.help.wizard:help_online.export_help_wizard_view
#: view:import.help.wizard:help_online.import_help_wizard_view
msgid "Close"
msgstr "Zaključi"
#. module: help_online
#: field:export.help.wizard,create_uid:0
#: field:help.online,create_uid:0
#: field:import.help.wizard,create_uid:0
msgid "Created by"
msgstr "Ustvaril"
#. module: help_online
#: field:export.help.wizard,create_date:0
#: field:help.online,create_date:0
#: field:import.help.wizard,create_date:0
msgid "Created on"
msgstr "Ustvarjeno"
#. module: help_online
#: view:export.help.wizard:help_online.export_help_wizard_view
msgid "Export"
msgstr "Izvoz"
#. module: help_online
#: model:ir.actions.act_window,name:help_online.action_export_help_wizard
msgid "Export Help"
msgstr "Izvoz navodil"
#. module: help_online
#: view:export.help.wizard:help_online.export_help_wizard_view
msgid "Export Help Data"
msgstr "Izvoz podatkov spletnih navodil"
#. module: help_online
#: model:ir.model,name:help_online.model_export_help_wizard
#: model:ir.ui.menu,name:help_online.menu_help_export
msgid "Export Help Online"
msgstr "Izvozi spletna navodila"
#. module: help_online
#: field:export.help.wizard,export_filename:0
msgid "Export XML Filename"
msgstr "Naziv izvožene XML datoteke"
#. module: help_online
#: model:ir.ui.menu,name:help_online.menu_help
#: model:ir.ui.menu,name:help_online.menu_help_main
msgid "Help Online"
msgstr "Spletna navodila"
#. module: help_online
#: model:res.groups,name:help_online.help_online_group_reader
msgid "Help reader"
msgstr "Bralec navodil"
#. module: help_online
#: model:res.groups,name:help_online.help_online_group_writer
msgid "Help writer"
msgstr "Avtor navodil"
#. module: help_online
#: field:export.help.wizard,id:0
#: field:help.online,id:0
#: field:import.help.wizard,id:0
msgid "ID"
msgstr "ID"
#. module: help_online
#: view:import.help.wizard:help_online.import_help_wizard_view
msgid "Import"
msgstr "Uvoz"
#. module: help_online
#: model:ir.actions.act_window,name:help_online.action_import_help_wizard
msgid "Import Help"
msgstr "Uvoz navodil"
#. module: help_online
#: view:import.help.wizard:help_online.import_help_wizard_view
msgid "Import Help Data"
msgstr "Uvoz podatkov navodil"
#. module: help_online
#: model:ir.ui.menu,name:help_online.menu_help_import
msgid "Import Help Online"
msgstr "Uvoz spletnih navodil"
#. module: help_online
#: field:export.help.wizard,write_uid:0
#: field:help.online,write_uid:0
#: field:import.help.wizard,write_uid:0
msgid "Last Updated by"
msgstr "Zadnjič posodobil"
#. module: help_online
#: field:export.help.wizard,write_date:0
#: field:help.online,write_date:0
#: field:import.help.wizard,write_date:0
msgid "Last Updated on"
msgstr "Zadnjič posodobljeno"
#. module: help_online
#: field:import.help.wizard,source_file:0
msgid "Source File"
msgstr "Izvorna datoteka"
#. module: help_online
#: view:export.help.wizard:help_online.export_help_wizard_view
msgid ""
"This wizard allow you to export all QWeb views\n"
" related to help online. The result will be an Odoo\n"
" data xml file."
msgstr ""
"Ta čarovnik omogoča izvoz vseh QWeb pogledov,\n"
" ki se tičejo spletnih navodil v Odoo\n"
" xml podatkovno datoteko."
#. module: help_online
#: view:import.help.wizard:help_online.import_help_wizard_view
msgid ""
"This wizard allow you to import QWeb views\n"
" related to help online. The required file format is "
"an Odoo\n"
" data xml file."
msgstr ""
"Ta čarovnik omogoča uvoz QWeb pogledov,\n"
" ki se tičejo spletnih navodil iz Odoo\n"
" xml podatkovne datoteke."
#. module: help_online
#: view:ir.ui.view:help_online.view_view_search
msgid "Website Page"
msgstr "Spletna stran"
#. module: help_online
#: view:ir.ui.view:help_online.view_view_form
msgid "Website Page?"
msgstr "Spletna stran?"
#. module: help_online
#: model:ir.actions.act_window,name:help_online.action_website_pages
#: model:ir.ui.menu,name:help_online.menu_help_pages
msgid "Website Pages"
msgstr "Spletne strani"
#. module: help_online
#: field:export.help.wizard,data:0
msgid "XML"
msgstr "XML"
#. module: help_online
#: view:export.help.wizard:help_online.export_help_wizard_view
#: view:import.help.wizard:help_online.import_help_wizard_view
msgid "or"
msgstr "ali"

7
web_export_view/AUTHORS.txt

@ -1,7 +0,0 @@
Authors
=======
Simone Orsi <simone.orsi@domsense.com> [simahawk]
Lorenzo Battistini <lorenzo.battistini@agilebg.com>
Stefan Rijnhart <stefan@therp.nl>
Leonardo Pistone <leonardo.pistone@agilebg.com>

50
web_export_view/README.rst

@ -0,0 +1,50 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:alt: License
Export Current View
===================
One of the best OpenERP's features is exporting custom data to CSV/XLS. You can
do it by clicking on the export link in the sidebar. The export action allows
us to configure what to be exported by selecting fields, etc, and allows you
to save your export as a template so that you can export it once again without
having to configure it again.
That feature is as great and advanced as limited for an everyday experience.
A lot of customers want simply to export the tree view they are looking to.
If you miss this feature as us, probably you'll find an answer into our
web_export_view module.
Usage
=====
After you installed it, you'll find an additional link 'Export current view'
right below the 'Export' one. By clicking on it you'll get a XLS file contains
the same data of the tree view you are looking at, headers included.
Credits
=======
Contributors
------------
* Simone Orsi <simahawk@gmail.com>
* Lorenzo Battistini <lorenzo.battistini@agilebg.com>
* Stefan Rijnhart <stefan@therp.nl>
* Leonardo Pistone <leonardo.pistone@camptocamp.com>
Maintainer
----------
.. image:: http://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: http://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.

20
web_export_view/__openerp__.py

@ -23,26 +23,6 @@
'name': 'Export Current View',
'version': '1.2',
'category': 'Web',
'description': """
WEB EXPORT VIEW
===============
One of the best OpenERPs features is exporting custom data to CSV/XLS. You can
do it by clicking on the export link in the sidebar. The export action allows
use to configure what to be exported by selecting fields, etc, and allows you
to save your export as a template so that you can export it once again without
having to configure it again.
That feature is as great and advanced as limited for an everyday experience.
A lot of customers want simply to export the tree view they are looking to.
If you miss this feature as us, probably youll find an answer into our
web_export_view module.
After you installed it, youll find an additional link Export current view
right below the Export one. By clicking on it youll get a XLS file contains
the same data of the tree view you are looking at, headers included.
""",
'author': "Agile Business Group,Odoo Community Association (OCA)",
'website': 'http://www.agilebg.com',
'license': 'AGPL-3',

47
web_export_view/i18n/sl.po

@ -0,0 +1,47 @@
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
#
# Matjaž Mozetič <m.mozetic@matmoz.si>, 2015.
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-10-21 11:59+0000\n"
"PO-Revision-Date: 2015-04-24 08:07+0100\n"
"Last-Translator: Matjaž Mozetič <m.mozetic@matmoz.si>\n"
"Language-Team: Slovenian <translate@matmoz.si>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
"Language: sl\n"
"X-Generator: Lokalize 2.0\n"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/xml/web_advanced_export.xml:7
#, python-format
msgid "Export Current View"
msgstr "Izvoz trenutnega pogleda"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/xml/web_advanced_export.xml:9
#, python-format
msgid "Excel"
msgstr "Excel"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_advanced_export.js:81
#, python-format
msgid "True"
msgstr "Pravilno"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_advanced_export.js:84
#, python-format
msgid "False"
msgstr "Nepravilno"

BIN
web_export_view/static/description/icon.png

After

Width: 128  |  Height: 126  |  Size: 3.5 KiB

8
web_export_view/static/src/js/web_export_view.js

@ -85,7 +85,13 @@ openerp.web_export_view = function (instance) {
}
}
else if (cell.classList.contains("oe_list_field_integer")) {
export_row.push(parseInt(text));
var tmp2 = text;
do {
tmp = tmp2;
tmp2 = tmp.replace(instance.web._t.database.parameters.thousands_sep, "");
} while (tmp !== tmp2);
export_row.push(parseInt(tmp2));
}
else {
export_row.push(text.trim());

46
web_hide_db_manager_link/README.rst

@ -0,0 +1,46 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:alt: License
Hide link to database manager in login screen
=============================================
This module hides the "Manage Databases" link at the bottom of login screen.
The image in *web_hide_db_manager_link/static/src/img/screen.png* shows the resulting loging screen.
.. image:: web_hide_db_manager_link/static/src/img/screenshot.png
Installation
============
To install this module, you need to:
* Go to Settings / Local Modules
* Search by module name "Hide link to database manager in login screen" or by module technical name "*web_hide_db_manager_link*"
* Click install button
Known issues
============
As Odoo v8 templates only live in the database, this module must be installed in each database you want this to be in effect.
Credits
=======
Contributors
------------
* Alejandro Santana <alejandrosantana@anubia.es>
Maintainer
----------
.. image:: http://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: http://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.

0
__unported__/web_nocreatedb/__init__.py → web_hide_db_manager_link/__init__.py

36
web_hide_db_manager_link/__openerp__.py

@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Odoo, Open Source Management Solution
#
# Copyright (c) All rights reserved:
# (c) 2015 Anubía, soluciones en la nube,SL (http://www.anubia.es)
# Alejandro Santana <alejandrosantana@anubia.es>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see http://www.gnu.org/licenses
#
##############################################################################
{
'name': 'Hide link to database manager in login screen',
'version': "1.0",
'category': 'Web',
'license': 'AGPL-3',
'author': 'Alejandro Santana, Odoo Community Association (OCA)',
'website': 'http://anubia.es',
'summary': 'Hide link to database manager in login screen',
'depends': ['web'],
'data': ['views/webclient_templates.xml'],
'installable': True,
}

BIN
web_hide_db_manager_link/static/description/icon.png

After

Width: 256  |  Height: 256  |  Size: 25 KiB

128
web_hide_db_manager_link/static/description/icon.svg

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="747.26123"
height="747.26123"
viewBox="0 0 597.80899 597.80897"
xml:space="preserve"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="logo.svg"><metadata
id="metadata34"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs32" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1021"
id="namedview30"
showgrid="true"
inkscape:zoom="0.59949193"
inkscape:cx="616.22391"
inkscape:cy="373.12361"
inkscape:window-x="-2"
inkscape:window-y="-3"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-grids="true"
inkscape:snap-page="true"
inkscape:snap-center="true"
inkscape:snap-midpoints="true"
inkscape:object-nodes="true"
inkscape:object-paths="true"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:snap-intersection-paths="true"
inkscape:snap-smooth-nodes="true"
inkscape:snap-object-midpoints="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"><inkscape:grid
type="xygrid"
id="grid3291"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
originx="103.27124px"
originy="87.26121px" /></sodipodi:namedview><g
id="orginal"
style="fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4"
transform="translate(82.616991,82.616992)" /><g
id="Layer_x0020_3"
style="fill:none;stroke:#ffffff;stroke-width:12.46510029;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4"
transform="translate(82.616991,82.616992)"><path
style="fill:#000000;stroke:#000000;stroke-width:37.39530182;stroke-linecap:butt;stroke-linejoin:miter"
d="m 323.205,324.227 c 2.833,-23.601 1.984,-27.062 19.563,-23.239 l 4.463,0.392 c 13.517,0.615 31.199,-2.174 41.587,-7 22.362,-10.376 35.622,-27.7 13.572,-23.148 -50.297,10.376 -53.755,-6.655 -53.755,-6.655 C 401.746,185.774 423.948,85.741 404.784,61.255 352.514,-5.534 262.036,26.049 260.522,26.869 l -0.482,0.089 c -9.938,-2.062 -21.06,-3.294 -33.554,-3.496 -22.761,-0.374 -40.032,5.967 -53.133,15.904 0,0 -161.408,-66.498 -153.899,83.628 1.597,31.936 45.777,241.655 98.47,178.31 19.259,-23.163 37.871,-42.748 37.871,-42.748 9.242,6.14 20.307,9.272 31.912,8.147 l 0.897,-0.765 c -0.281,2.876 -0.157,5.689 0.359,9.019 -13.572,15.167 -9.584,17.83 -36.723,23.416 -27.457,5.659 -11.326,15.734 -0.797,18.367 12.768,3.193 42.305,7.716 62.268,-20.224 l -0.795,3.188 c 5.325,4.26 4.965,30.619 5.72,49.452 0.756,18.834 2.017,36.409 5.856,46.771 3.839,10.36 8.369,37.05 44.036,29.406 29.809,-6.388 52.6,-15.582 54.677,-101.107"
id="path6"
inkscape:connector-curvature="0" /><path
style="fill:#336791;stroke:none"
d="m 402.395,271.23 c -50.302,10.376 -53.76,-6.655 -53.76,-6.655 53.111,-78.808 75.313,-178.843 56.153,-203.326 -52.27,-66.785 -142.752,-35.2 -144.262,-34.38 l -0.486,0.087 c -9.938,-2.063 -21.06,-3.292 -33.56,-3.496 -22.761,-0.373 -40.026,5.967 -53.127,15.902 0,0 -161.411,-66.495 -153.904,83.63 1.597,31.938 45.776,241.657 98.471,178.312 19.26,-23.163 37.869,-42.748 37.869,-42.748 9.243,6.14 20.308,9.272 31.908,8.147 l 0.901,-0.765 c -0.28,2.876 -0.152,5.689 0.361,9.019 -13.575,15.167 -9.586,17.83 -36.723,23.416 -27.459,5.659 -11.328,15.734 -0.796,18.367 12.768,3.193 42.307,7.716 62.266,-20.224 l -0.796,3.188 c 5.319,4.26 9.054,27.711 8.428,48.969 -0.626,21.259 -1.044,35.854 3.147,47.254 4.191,11.4 8.368,37.05 44.042,29.406 29.809,-6.388 45.256,-22.942 47.405,-50.555 1.525,-19.631 4.976,-16.729 5.194,-34.28 l 2.768,-8.309 c 3.192,-26.611 0.507,-35.196 18.872,-31.203 l 4.463,0.392 c 13.517,0.615 31.208,-2.174 41.591,-7 22.358,-10.376 35.618,-27.7 13.573,-23.148 z"
id="path8"
inkscape:connector-curvature="0" /><path
d="m 215.866,286.484 c -1.385,49.516 0.348,99.377 5.193,111.495 4.848,12.118 15.223,35.688 50.9,28.045 29.806,-6.39 40.651,-18.756 45.357,-46.051 3.466,-20.082 10.148,-75.854 11.005,-87.281"
id="path10"
inkscape:connector-curvature="0" /><path
d="m 173.104,38.256 c 0,0 -161.521,-66.016 -154.012,84.109 1.597,31.938 45.779,241.664 98.473,178.316 19.256,-23.166 36.671,-41.335 36.671,-41.335"
id="path12"
inkscape:connector-curvature="0" /><path
d="m 260.349,26.207 c -5.591,1.753 89.848,-34.889 144.087,34.417 19.159,24.484 -3.043,124.519 -56.153,203.329"
id="path14"
inkscape:connector-curvature="0" /><path
style="stroke-linejoin:bevel"
d="m 348.282,263.953 c 0,0 3.461,17.036 53.764,6.653 22.04,-4.552 8.776,12.774 -13.577,23.155 -18.345,8.514 -59.474,10.696 -60.146,-1.069 -1.729,-30.355 21.647,-21.133 19.96,-28.739 -1.525,-6.85 -11.979,-13.573 -18.894,-30.338 -6.037,-14.633 -82.796,-126.849 21.287,-110.183 3.813,-0.789 -27.146,-99.002 -124.553,-100.599 -97.385,-1.597 -94.19,119.762 -94.19,119.762"
id="path16"
inkscape:connector-curvature="0" /><path
d="m 188.604,274.334 c -13.577,15.166 -9.584,17.829 -36.723,23.417 -27.459,5.66 -11.326,15.733 -0.797,18.365 12.768,3.195 42.307,7.718 62.266,-20.229 6.078,-8.509 -0.036,-22.086 -8.385,-25.547 -4.034,-1.671 -9.428,-3.765 -16.361,3.994 z"
id="path18"
inkscape:connector-curvature="0" /><path
d="m 187.715,274.069 c -1.368,-8.917 2.93,-19.528 7.536,-31.942 6.922,-18.626 22.893,-37.255 10.117,-96.339 -9.523,-44.029 -73.396,-9.163 -73.436,-3.193 -0.039,5.968 2.889,30.26 -1.067,58.548 -5.162,36.913 23.488,68.132 56.479,64.938"
id="path20"
inkscape:connector-curvature="0" /><path
style="fill:#ffffff;stroke-width:4.15500021;stroke-linecap:butt;stroke-linejoin:miter"
d="m 172.517,141.7 c -0.288,2.039 3.733,7.48 8.976,8.207 5.234,0.73 9.714,-3.522 9.998,-5.559 0.284,-2.039 -3.732,-4.285 -8.977,-5.015 -5.237,-0.731 -9.719,0.333 -9.996,2.367 z"
id="path22"
inkscape:connector-curvature="0" /><path
style="fill:#ffffff;stroke-width:2.0775001;stroke-linecap:butt;stroke-linejoin:miter"
d="m 331.941,137.543 c 0.284,2.039 -3.732,7.48 -8.976,8.207 -5.238,0.73 -9.718,-3.522 -10.005,-5.559 -0.277,-2.039 3.74,-4.285 8.979,-5.015 5.239,-0.73 9.718,0.333 10.002,2.368 z"
id="path24"
inkscape:connector-curvature="0" /><path
d="m 350.676,123.432 c 0.863,15.994 -3.445,26.888 -3.988,43.914 -0.804,24.748 11.799,53.074 -7.191,81.435"
id="path26"
inkscape:connector-curvature="0" /><path
style="stroke-width:3"
d="M 0,60.232"
id="path28"
inkscape:connector-curvature="0" /></g><g
id="g3303"
transform="matrix(1.1483628,0,0,1.1483628,50.527964,50.527965)"><path
id="path3295"
transform="matrix(0.80000001,0,0,0.80000001,0,-5.9195504e-6)"
d="M 270.34375,-55 C 90.653337,-55 -55,90.653337 -55,270.34375 c 0,179.69041 145.653337,325.375 325.34375,325.375 179.69041,0 325.375,-145.68459 325.375,-325.375 C 595.71875,90.653337 450.03416,-55 270.34375,-55 z m 0,55 c 149.31475,0 270.375,121.029 270.375,270.34375 0,149.31475 -121.06025,270.375 -270.375,270.375 C 121.029,540.71875 0,419.6585 0,270.34375 0,121.029 121.029,0 270.34375,0 z"
style="fill:#ff0000;fill-opacity:1;stroke:none"
inkscape:connector-curvature="0" /><rect
transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)"
y="70.972221"
x="-22.249216"
height="469.80899"
width="44.498447"
id="rect3300"
style="fill:#ff0000;fill-opacity:1;stroke:none" /></g></svg>

BIN
web_hide_db_manager_link/static/src/img/screenshot.png

After

Width: 733  |  Height: 769  |  Size: 33 KiB

13
web_hide_db_manager_link/views/webclient_templates.xml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<template id="login_layout_no_db" inherit_id="web.login_layout" name="Login Layout">
<xpath expr="//div[@class='oe_single_form_footer']" position="before">
<t t-set="disable_database_manager" t-value="1"/>
</xpath>
</template>
</data>
</openerp>

48
web_ir_actions_act_window_message/README.rst

@ -0,0 +1,48 @@
Client side message boxes
=========================
This module allows to show a message popup on the client side as result of a button.
Usage
=====
Depend on this module and return
.. code:: python
{
'type': 'ir.actions.act_window.message',
'title': _('My title'),
'message': _('My message'),
}
You are responsible for translating the messages.
Known issues / Roadmap
======================
* add `message_type` to differenciate between warnings, errors, etc.
* have one `message_type` to show a nonmodal warning on top right
* have `button_title` to set the button title
* have `buttons` containing button names and action definitions for triggering actions from the message box
Credits
=======
Contributors
------------
* Holger Brunn <hbrunn@therp.nl>
Maintainer
----------
.. image:: http://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: http://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.

20
web_ir_actions_act_window_message/__init__.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2015 Therp BV <http://therp.nl>.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################

43
web_ir_actions_act_window_message/__openerp__.py

@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2015 Therp BV <http://therp.nl>.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
"name": "Client side message boxes",
"version": "1.0",
"author": "Therp BV",
"license": "AGPL-3",
"category": "Hidden/Dependency",
"summary": "Show a message box to users",
"depends": [
'web',
],
"data": [
'views/templates.xml',
],
"qweb": [
'static/src/xml/web_ir_actions_act_window_message.xml',
],
"auto_install": False,
"installable": True,
"application": False,
"external_dependencies": {
'python': [],
},
}

BIN
web_ir_actions_act_window_message/static/description/icon.png

After

Width: 80  |  Height: 80  |  Size: 2.0 KiB

50
web_ir_actions_act_window_message/static/src/js/web_ir_actions_act_window_message.js

@ -0,0 +1,50 @@
//-*- coding: utf-8 -*-
//############################################################################
//
// OpenERP, Open Source Management Solution
// This module copyright (C) 2015 Therp BV <http://therp.nl>.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
//############################################################################
openerp.web_ir_actions_act_window_message = function(instance)
{
instance.web.ActionManager.include({
ir_actions_act_window_message: function(action, options)
{
var dialog = new instance.web.Dialog(
this,
{
size: 'medium',
title: action.title,
buttons: [
{
text: instance.web._t('Close'),
click: function() { dialog.close() },
oe_link_class: 'oe_highlight',
},
],
},
jQuery(instance.web.qweb.render(
'web_ir_actions_act_window_message',
{
'this': this,
'action': action,
}))
)
return dialog.open();
},
});
}

5
web_ir_actions_act_window_message/static/src/xml/web_ir_actions_act_window_message.xml

@ -0,0 +1,5 @@
<templates>
<div t-name="web_ir_actions_act_window_message">
<div><t t-esc="action.message" /></div>
</div>
</templates>

10
web_ir_actions_act_window_message/views/templates.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<template id="assets_backend" name="web_ir_actions_act_window_message assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/web_ir_actions_act_window_message/static/src/js/web_ir_actions_act_window_message.js"></script>
</xpath>
</template>
</data>
</openerp>

54
web_option_auto_color/README.rst

@ -0,0 +1,54 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:alt: License
Web Option Auto Color
=====================
This module was written to offer a new autocolor attribute which can be used on
field in trees view. Using this attribute causes an identical coloration for
cells of the same value in a list view.
Installation
============
To install this module, you need to:
* Click on install button
Usage
=====
In the view declaration, put autocolor="1" attribute in the field tag::
...
<field name="arch" type="xml">
<tree string="View name">
...
<field name="name"/>
<field name="name2" autocolor="1"/>
...
</tree>
</field>
...
Credits
=======
Contributors
------------
* Stéphane Bidoul (ACSONE) <stephane.bidoul@acsone.eu>
* Adrien Peiffer (ACSONE) <adrien.peiffer@acsone.eu>
Maintainer
----------
.. image:: http://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: http://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.

1
web_option_auto_color/__init__.py

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

41
web_option_auto_color/__openerp__.py

@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# This file is part of web_option_auto_color,
# an Odoo module.
#
# Copyright (c) 2015 ACSONE SA/NV (<http://acsone.eu>)
#
# web_option_auto_color is free software:
# you can redistribute it and/or modify it under the terms of the GNU
# Affero General Public License as published by the Free Software
# Foundation,either version 3 of the License, or (at your option) any
# later version.
#
# web_option_auto_color is distributed
# in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with web_option_auto_color.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': "Web Option Auto Color",
'author': "ACSONE SA/NV,Odoo Community Association (OCA)",
'website': "http://acsone.eu",
'category': 'web',
'version': '0.1',
'license': 'AGPL-3',
'depends': [
'web',
],
'data': [
'views/web_option_auto_color.xml',
],
'qweb': [
'static/src/xml/templates.xml',
],
}

57
web_option_auto_color/static/src/js/view_list.js

@ -0,0 +1,57 @@
openerp.web_option_auto_color = function(instance) {
var _t = instance.web._t,
_lt = instance.web._lt;
var QWeb = instance.web.qweb;
instance.web.ListView.include({
dh : function (n){
var hex = (255-n).toString(16).toUpperCase();
if (hex.length==1) {
hex='0'+hex;
}
return (hex);
},
inverse_color: function (couleur) {
var r = /#?(\w{2})(\w{2})(\w{2})/i;
var splitH = r.exec(couleur);
var ar=16*Number('0x'+splitH[1].slice(0,1))+Number('0x'+splitH[1].slice(1,2));
var br=16*Number('0x'+splitH[2].slice(0,1))+Number('0x'+splitH[2].slice(1,2));
var cr=16*Number('0x'+splitH[3].slice(0,1))+Number('0x'+splitH[3].slice(1,2));
return ('#'+this.dh(ar)+this.dh(br)+this.dh(cr));
},
get_seed_random_color: function(seed){
color = Math.floor((Math.abs(Math.sin(seed) * 16777215)) % 16777215);
color = color.toString(16);
while(color.length < 6) {
color = '0' + color;
}
return '#' + color;
},
getIntValue: function(str){
var sum = 0
for (i=0; i<str.length;i++){
sum += str.charCodeAt(i);
}
return sum
},
auto_color_cell_style: function(value){
style = ''
if (value != "" && value != undefined) {
var intValue = this.getIntValue(value)
bgcolor = this.get_seed_random_color(intValue)
fontcolor = this.inverse_color(bgcolor)
style = style + 'background-color: ' + bgcolor + ';' + 'color: ' + fontcolor + ';';
}
return style
}
});
};

8
web_option_auto_color/static/src/xml/templates.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<tr t-extend="ListView.row">
<t t-jquery="td[t-att-data-field='column.id']">
this.attr('t-att-style', "column.autocolor == '1' and view.auto_color_cell_style(render_cell(record, column), column)")
</t>
</tr>
</templates>

10
web_option_auto_color/views/web_option_auto_color.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="assets_backend" name="web_option_auto_color" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/web_option_auto_color/static/src/js/view_list.js"></script>
</xpath>
</template>
</data>
</openerp>

30
web_searchbar_full_width/README.rst

@ -0,0 +1,30 @@
Show searchbar over full width
==============================
Odoo's default search bar is rather narrow, which causes it to grow vertically when applying a lot of filters. For small screens this can be a problem as it wastes a lot of space. This addon addresses this issue by growing the search bar to the whole width of the screen, moving it below the breadcrumb. A side effect of this is that the breadcrumb can also use the full screen width, which makes it reasonable not to cut off titles after 7 characters.
The result looks like this:
.. image:: /web_searchbar_full_width/static/description/preview.png
:alt: Searchbar over full screen width
Credits
=======
Contributors
------------
* Holger Brunn <hbrunn@therp.nl>
Maintainer
----------
.. image:: http://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: http://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.

20
web_searchbar_full_width/__init__.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2015 Therp BV <http://therp.nl>.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################

45
web_searchbar_full_width/__openerp__.py

@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2015 Therp BV <http://therp.nl>.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
"name": "Full width searchbar",
"version": "1.0",
"author": "Therp BV",
"license": "AGPL-3",
"category": "Tools",
"summary": "Show search bar in full screen width",
"depends": [
'web',
],
"data": [
'views/templates.xml',
],
"qweb": [
'static/src/xml/web_searchbar_full_width.xml',
],
"test": [
],
"auto_install": False,
"installable": True,
"application": False,
"external_dependencies": {
'python': [],
},
}

BIN
web_searchbar_full_width/static/description/icon.png

After

Width: 110  |  Height: 110  |  Size: 6.8 KiB

BIN
web_searchbar_full_width/static/description/preview.png

After

Width: 1914  |  Height: 466  |  Size: 50 KiB

20
web_searchbar_full_width/static/src/css/web_searchbar_full_width.css

@ -0,0 +1,20 @@
.openerp .oe_application .oe_breadcrumb_item:not(:last-child)
{
max-width: inherit;
}
.openerp .oe_searchview
{
width: 100%;
}
.openerp .oe_view_manager_current > .oe_view_manager_header .oe_header_row_top td
{
padding-bottom: 0px;
}
.openerp .oe_view_manager_current > .oe_view_manager_header span.oe_breadcrumb_item
{
padding-top: 3px;
}
.openerp .oe_view_manager table.oe_view_manager_header h2
{
line-height: 20px;
}

15
web_searchbar_full_width/static/src/xml/web_searchbar_full_width.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates>
<t t-extend="ViewManagerAction">
<t t-jquery="tr.oe_header_row_top td:nth-child(1)">
jQuery(this).attr('colspan', 4);
</t>
<t t-jquery="tr.oe_header_row_top td:nth-child(2)">
var $new_row = jQuery('<tr class="oe_header_row"/>');
jQuery(this)
.parents('tr')
.after($new_row);
$new_row.append(jQuery(this).attr('colspan', 4));
</t>
</t>
</templates>

10
web_searchbar_full_width/views/templates.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<template id="assets_backend" name="web_searchbar_full_width assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<link rel="stylesheet" href="/web_searchbar_full_width/static/src/css/web_searchbar_full_width.css"/>
</xpath>
</template>
</data>
</openerp>

4
web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js

@ -47,7 +47,9 @@ openerp.web_tree_many2one_clickable = function(instance, local)
.filter([['key', '=', 'web_tree_many2one_clickable.default']])
.first()
.then(function(param) {
self.use_many2one_clickable = (param.value == 'true');
if (param) {
self.use_many2one_clickable = (param.value == 'true');
}
self.ir_option_clickable_loaded.resolve();
});
return this.ir_option_clickable_loaded;

35
web_widget_many2many_tags_multi_selection/README.rst

@ -0,0 +1,35 @@
Allows multiple selection on many2many_tags widget
==================================================
In a many2many_tags widget when a lot of entries should be selected it's fastidious to select 80% of them. Then you may click on 'search more', but impossible to select several attributes at once.
This module adds a checkbox to this list so multiple entries can be selected at once.
Installation
============
It was tested on Odoo 8.0 branch.
Credits
=======
Akretion
Contributors
------------
* Sylvain Calador <sylvain.calador@akretion.com>
Maintainer
----------
.. image:: http://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: http://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.

20
web_widget_many2many_tags_multi_selection/__init__.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2015-TODAY Akretion (<http://www.akretion.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################

36
web_widget_many2many_tags_multi_selection/__openerp__.py

@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2015-TODAY Akretion (<http://www.akretion.com>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'Tags multiple selection',
'version': '0.1',
'author': 'Akretion, Odoo Community Association (OCA)',
'depends': [
'web',
],
'demo': [],
'website': 'https://www.akretion.com',
'data': [
'views/web_widget_many2many_tags_multi_selection.xml',
],
'installable': True,
'auto_install': False,
}

38
web_widget_many2many_tags_multi_selection/static/src/js/view_form.js

@ -0,0 +1,38 @@
openerp.web_widget_many2many_tags_multi_selection = function(instance, local) {
var _t = instance.web._t;
instance.web.form.CompletionFieldMixin._search_create_popup = function(view, ids, context) {
var self = this;
var pop = new instance.web.form.SelectCreatePopup(this);
var domain = self.build_domain();
if (self.field.type == 'many2many') {
var selected_ids = self.get_search_blacklist();
if (selected_ids.length > 0) {
domain = new instance.web.CompoundDomain(domain, ["!", ["id", "in", selected_ids]]);
}
}
pop.select_element(
self.field.relation,
{
title: (view === 'search' ? _t("Search: ") : _t("Create: ")) + this.string,
initial_ids: ids ? _.map(ids, function(x) {return x[0];}) : undefined,
initial_view: view,
disable_multiple_selection: this.field.type != 'many2many',
},
domain,
new instance.web.CompoundContext(self.build_context(), context || {})
);
pop.on("elements_selected", self, function(element_ids) {
for(var i=0, len=element_ids.length; i<len;i++) {
self.add_id(element_ids[i]);
if (self.field.type != 'many2many') {
break;
}
}
self.focus();
});
};
}

10
web_widget_many2many_tags_multi_selection/views/web_widget_many2many_tags_multi_selection.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="assets_backend" name="web_widget_many2many_tags_multi_selection" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js"></script>
</xpath>
</template>
</data>
</openerp>

78
web_widget_x2many_2d_matrix/README.rst

@ -0,0 +1,78 @@
2D matrix for x2many fields
===========================
This module allows to show an x2many field with 3-tuples
($x_value, $y_value, $value) in a table
$x_value1 $x_value2
========= =========== ===========
$y_value1 $value(1/1) $value(2/1)
$y_value2 $value(1/2) $value(2/2)
========= =========== ===========
where `value(n/n)` is editable.
An example use case would be: Select some projects and some employees so that
a manager can easily fill in the planned_hours for one task per employee. The
result could look like this:
.. image:: /web_widget_x2many_2d_matrix/static/description/screenshot.png
:alt: Screenshot
The beauty of this is that you have an arbitrary amount of columns with this widget, trying to get this in standard x2many lists involves some quite agly hacks.
Usage
=====
Use this widget by saying::
<field name="my_field" widget="x2many_2d_matrix" />
This assumes that my_field refers to a model with the fields `x`, `y` and
`value`. If your fields are named differently, pass the correct names as
attributes::
<field name="my_field" widget="x2many_2d_matrix" field_x_axis="my_field1" field_y_axis="my_field2" field_value="my_field3" />
You can pass the following parameters:
field_x_axis
The field that indicates the x value of a point
field_y_axis
The field that indicates the y value of a point
field_label_x_axis
Use another field to display in the table header
field_label_y_axis
Use another field to display in the table header
field_value
Show this field as value
show_row_totals
If field_value is a numeric field, calculate row totals
show_column_totals
If field_value is a numeric field, calculate column totals
Known issues / Roadmap
======================
* it would be worth trying to instantiate the proper field widget and let it render the input
Credits
=======
Contributors
------------
* Holger Brunn <hbrunn@therp.nl>
Maintainer
----------
.. image:: http://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: http://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.

20
web_widget_x2many_2d_matrix/__init__.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2015 Therp BV <http://therp.nl>.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################

45
web_widget_x2many_2d_matrix/__openerp__.py

@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2015 Therp BV <http://therp.nl>.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
"name": "2D matrix for x2many fields",
"version": "1.0",
"author": "Therp BV",
"license": "AGPL-3",
"category": "Hidden/Dependency",
"summary": "Show list fields as a matrix",
"depends": [
'web',
],
"data": [
'views/templates.xml',
],
"qweb": [
'static/src/xml/web_widget_x2many_2d_matrix.xml',
],
"test": [
],
"auto_install": False,
"installable": True,
"application": False,
"external_dependencies": {
'python': [],
},
}

BIN
web_widget_x2many_2d_matrix/static/description/icon.png

After

Width: 80  |  Height: 80  |  Size: 5.0 KiB

BIN
web_widget_x2many_2d_matrix/static/description/screenshot.png

After

Width: 914  |  Height: 349  |  Size: 19 KiB

8
web_widget_x2many_2d_matrix/static/src/css/web_widget_x2many_2d_matrix.css

@ -0,0 +1,8 @@
.oe_form_field_x2many_2d_matrix th.oe_link
{
cursor: pointer;
}
.openerp .oe_form_field_x2many_2d_matrix .oe_list_content > tbody > tr > td.oe_list_field_cell
{
white-space: normal;
}

380
web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js

@ -0,0 +1,380 @@
//-*- coding: utf-8 -*-
//############################################################################
//
// OpenERP, Open Source Management Solution
// This module copyright (C) 2015 Therp BV <http://therp.nl>.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
//############################################################################
openerp.web_widget_x2many_2d_matrix = function(instance)
{
instance.web.form.widgets.add(
'x2many_2d_matrix',
'instance.web_widget_x2many_2d_matrix.FieldX2Many2dMatrix');
instance.web_widget_x2many_2d_matrix.FieldX2Many2dMatrix = instance.web.form.FieldOne2Many.extend({
template: 'FieldX2Many2dMatrix',
widget_class: 'oe_form_field_x2many_2d_matrix',
// those will be filled with rows from the dataset
by_x_axis: {},
by_y_axis: {},
field_x_axis: 'x',
field_label_x_axis: 'x',
field_y_axis: 'y',
field_label_y_axis: 'y',
field_value: 'value',
// information about our datatype
is_numeric: false,
show_row_totals: true,
show_column_totals: true,
// this will be filled with the model's fields_get
fields: {},
// read parameters
init: function(field_manager, node)
{
this.field_x_axis = node.attrs.field_x_axis || this.field_x_axis;
this.field_y_axis = node.attrs.field_y_axis || this.field_y_axis;
this.field_label_x_axis = node.attrs.field_label_x_axis || this.field_x_axis;
this.field_label_y_axis = node.attrs.field_label_y_axis || this.field_y_axis;
this.field_value = node.attrs.field_value || this.field_value;
this.show_row_totals = node.attrs.show_row_totals || this.show_row_totals;
this.show_column_totals = node.attrs.show_column_totals || this.show_column_totals;
return this._super.apply(this, arguments);
},
// return a field's value, id in case it's a one2many field
get_field_value: function(row, field, many2one_as_name)
{
if(this.fields[field].type == 'many2one' && _.isArray(row[field]))
{
if(many2one_as_name)
{
return row[field][1];
}
else
{
return row[field][0];
}
}
return row[field];
},
// setup our datastructure for simple access in the template
set_value: function()
{
var self = this,
result = this._super.apply(this, arguments);
self.by_x_axis = {};
self.by_y_axis = {};
return jQuery.when(result).then(function()
{
return self.dataset._model.call('fields_get').then(function(fields)
{
self.fields = fields;
self.is_numeric = fields[self.field_value].type == 'float';
self.show_row_totals &= self.is_numeric;
self.show_column_totals &= self.is_numeric;
}).then(function()
{
return self.dataset.read_ids(self.dataset.ids).then(function(rows)
{
var read_many2one = {},
many2one_fields = [
self.field_x_axis, self.field_y_axis,
self.field_label_x_axis, self.field_label_y_axis
];
// prepare to read many2one names if necessary (we can get (id, name) or just id as value)
_.each(many2one_fields, function(field)
{
if(self.fields[field].type == 'many2one')
{
read_many2one[field] = {};
}
});
// setup data structure
_.each(rows, function(row)
{
self.add_xy_row(row);
_.each(read_many2one, function(rows, field)
{
if(!_.isArray(row[field]))
{
rows[row[field]] = rows[row[field]] || []
rows[row[field]].push(row);
}
});
});
// read many2one fields if necessary
var deferrends = [];
_.each(read_many2one, function(rows, field)
{
if(_.isEmpty(rows))
{
return;
}
var model = new instance.web.Model(self.fields[field].relation);
deferrends.push(model.call(
'name_get',
[_.map(_.keys(rows), function(key) {return parseInt(key)})])
.then(function(names)
{
_.each(names, function(name)
{
_.each(rows[name[0]], function(row)
{
row[field] = name;
});
});
}));
})
if(self.is_started && !self.no_rerender)
{
self.renderElement();
self.compute_totals();
self.setup_many2one_axes();
self.$el.find('.edit').on(
'change', self.proxy(self.xy_value_change));
self.effective_readonly_change();
}
return jQuery.when.apply(jQuery, deferrends);
});
});
});
},
// to whatever needed to setup internal data structure
add_xy_row: function(row)
{
var x = this.get_field_value(row, this.field_x_axis),
y = this.get_field_value(row, this.field_y_axis);
this.by_x_axis[x] = this.by_x_axis[x] || {};
this.by_y_axis[y] = this.by_y_axis[y] || {};
this.by_x_axis[x][y] = row;
this.by_y_axis[y][x] = row;
},
// get x axis values in the correct order
get_x_axis_values: function()
{
return _.keys(this.by_x_axis);
},
// get y axis values in the correct order
get_y_axis_values: function()
{
return _.keys(this.by_y_axis);
},
// get the label for a value on the x axis
get_x_axis_label: function(x)
{
return this.get_field_value(
_.first(_.values(this.by_x_axis[x])),
this.field_label_x_axis, true);
},
// get the label for a value on the y axis
get_y_axis_label: function(y)
{
return this.get_field_value(
_.first(_.values(this.by_y_axis[y])),
this.field_label_y_axis, true);
},
// return the class(es) the inputs should have
get_xy_value_class: function()
{
var classes = 'oe_form_field oe_form_required';
if(this.is_numeric)
{
classes += ' oe_form_field_float';
}
return classes;
},
// return row id of a coordinate
get_xy_id: function(x, y)
{
return this.by_x_axis[x][y]['id'];
},
// return the value of a coordinate
get_xy_value: function(x, y)
{
return this.get_field_value(
this.by_x_axis[x][y], this.field_value);
},
// validate a value
validate_xy_value: function(val)
{
try
{
this.parse_xy_value(val);
}
catch(e)
{
return false;
}
return true;
},
// parse a value from user input
parse_xy_value: function(val)
{
return instance.web.parse_value(
val, {'type': this.fields[this.field_value].type});
},
// format a value from the database for display
format_xy_value: function(val)
{
return instance.web.format_value(
val, {'type': this.fields[this.field_value].type});
},
// compute totals
compute_totals: function()
{
var self = this,
grand_total = 0,
totals_x = {},
totals_y = {};
return self.dataset.read_ids(self.dataset.ids).then(function(rows)
{
_.each(rows, function(row)
{
var key_x = self.get_field_value(row, self.field_x_axis),
key_y = self.get_field_value(row, self.field_y_axis);
totals_x[key_x] = (totals_x[key_x] || 0) + self.get_field_value(row, self.field_value);
totals_y[key_y] = (totals_y[key_y] || 0) + self.get_field_value(row, self.field_value);
grand_total += self.get_field_value(row, self.field_value);
});
}).then(function()
{
_.each(totals_y, function(total, y)
{
self.$el.find(
_.str.sprintf('td.row_total[data-y="%s"]', y)).text(
self.format_xy_value(total));
});
_.each(totals_x, function(total, x)
{
self.$el.find(
_.str.sprintf('td.column_total[data-x="%s"]', x)).text(
self.format_xy_value(total));
});
self.$el.find('.grand_total').text(
self.format_xy_value(grand_total))
return {
totals_x: totals_x,
totals_y: totals_y,
grand_total: grand_total,
};
});
},
setup_many2one_axes: function()
{
if(this.fields[this.field_x_axis].type == 'many2one')
{
this.$el.find('th[data-x]').addClass('oe_link')
.click(_.partial(
this.proxy(this.many2one_axis_click),
this.field_x_axis, 'x'));
}
if(this.fields[this.field_y_axis].type == 'many2one')
{
this.$el.find('tr[data-y] th').addClass('oe_link')
.click(_.partial(
this.proxy(this.many2one_axis_click),
this.field_y_axis, 'y'));
}
},
many2one_axis_click: function(field, id_attribute, e)
{
this.do_action({
type: 'ir.actions.act_window',
name: this.fields[field].string,
res_model: this.fields[field].relation,
res_id: jQuery(e.currentTarget).data(id_attribute),
views: [[false, 'form']],
target: 'current',
})
},
start: function()
{
var self = this;
this.$el.find('.edit').on(
'change', self.proxy(this.xy_value_change));
this.compute_totals();
this.setup_many2one_axes();
this.on("change:effective_readonly",
this, this.proxy(this.effective_readonly_change));
this.effective_readonly_change();
return this._super.apply(this, arguments);
},
xy_value_change: function(e)
{
var $this = jQuery(e.currentTarget),
val = $this.val();
if(this.validate_xy_value(val))
{
var data = {}, value = this.parse_xy_value(val);
data[this.field_value] = value;
$this.siblings('.read').text(this.format_xy_value(value));
$this.val(this.format_xy_value(value));
this.dataset.write($this.data('id'), data);
$this.parent().removeClass('oe_form_invalid');
this.compute_totals();
}
else
{
$this.parent().addClass('oe_form_invalid');
}
},
effective_readonly_change: function()
{
this.$el
.find('tbody td.oe_list_field_cell span.oe_form_field .edit')
.toggle(!this.get('effective_readonly'));
this.$el
.find('tbody td.oe_list_field_cell span.oe_form_field .read')
.toggle(this.get('effective_readonly'));
this.$el.find('.edit').first().focus();
},
is_syntax_valid: function()
{
return this.$el.find('.oe_form_invalid').length == 0;
},
// deactivate view related functions
load_views: function() {},
reload_current_view: function() {},
get_active_view: function() {},
});
}

36
web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml

@ -0,0 +1,36 @@
<templates>
<t t-name="FieldX2Many2dMatrix">
<div t-att-class="widget.widget_class">
<table class="oe_list_content">
<thead>
<tr class="oe_list_header_columns">
<th />
<th t-foreach="widget.get_x_axis_values()" t-as="x" t-att-data-x="x">
<t t-esc="widget.get_x_axis_label(x)" />
</th>
<th t-if="widget.show_row_totals">Total</th>
</tr>
</thead>
<tbody>
<tr t-foreach="widget.get_y_axis_values()" t-as="y" t-att-data-y="y">
<th><t t-esc="widget.get_y_axis_label(y)" /></th>
<td t-foreach="widget.get_x_axis_values()" t-as="x" t-att-class="'oe_list_field_cell' + (widget.is_numeric ? ' oe_number' : '')" t-att-data-x="x">
<span t-att-class="widget.get_xy_value_class()">
<input class="edit" t-att-data-id="widget.get_xy_id(x, y)" t-att-value="widget.format_xy_value(widget.get_xy_value(x, y))" />
<span class="read"><t t-esc="widget.format_xy_value(widget.get_xy_value(x, y))" /></span>
</span>
</td>
<td t-if="widget.show_row_totals" class="row_total oe_number" t-att-data-y="y"/>
</tr>
</tbody>
<tfoot t-if="widget.show_column_totals">
<tr>
<th>Total</th>
<td t-foreach="widget.get_x_axis_values()" t-as="x" class="oe_list_footer oe_number column_total" t-att-data-x="x" />
<td class="grand_total oe_number" />
</tr>
</tfoot>
</table>
</div>
</t>
</templates>

11
web_widget_x2many_2d_matrix/views/templates.xml

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<template id="assets_backend" name="web_widget_x2many_2d_matrix assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js"></script>
<link rel="stylesheet" href="/web_widget_x2many_2d_matrix/static/src/css/web_widget_x2many_2d_matrix.css"/>
</xpath>
</template>
</data>
</openerp>
Loading…
Cancel
Save