Merge remote-tracking branch 'upstream/8.0' into 8.0
@@ -1,3 +1,4 @@
|
||||
sudo: required
|
||||
language: python
|
||||
|
||||
python:
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
Before Width: | Height: | Size: 70 KiB |
@@ -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
Normal file
@@ -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
Normal file
@@ -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"
|
||||
|
||||
|
||||
@@ -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
Normal file
@@ -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.
|
||||
@@ -23,26 +23,6 @@
|
||||
'name': 'Export Current View',
|
||||
'version': '1.2',
|
||||
'category': 'Web',
|
||||
'description': """
|
||||
WEB EXPORT 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
|
||||
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 you’ll find an answer into our
|
||||
web_export_view module.
|
||||
|
||||
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.
|
||||
""",
|
||||
'author': "Agile Business Group,Odoo Community Association (OCA)",
|
||||
'website': 'http://www.agilebg.com',
|
||||
'license': 'AGPL-3',
|
||||
|
||||
47
web_export_view/i18n/sl.po
Normal file
@@ -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
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
@@ -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
Normal file
@@ -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.
|
||||
36
web_hide_db_manager_link/__openerp__.py
Normal file
@@ -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
Normal file
|
After Width: | Height: | Size: 25 KiB |
128
web_hide_db_manager_link/static/description/icon.svg
Normal file
@@ -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>
|
||||
|
After Width: | Height: | Size: 8.3 KiB |
BIN
web_hide_db_manager_link/static/src/img/screenshot.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
13
web_hide_db_manager_link/views/webclient_templates.xml
Normal file
@@ -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
Normal file
@@ -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
Normal file
@@ -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
Normal file
@@ -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
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
@@ -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();
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -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
Normal file
@@ -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
Normal file
@@ -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
Normal file
@@ -0,0 +1 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
41
web_option_auto_color/__openerp__.py
Normal file
@@ -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
Normal file
@@ -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
Normal file
@@ -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
Normal file
@@ -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
Normal file
@@ -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
Normal file
@@ -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
Normal file
@@ -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
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
web_searchbar_full_width/static/description/preview.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
@@ -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;
|
||||
}
|
||||
@@ -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
Normal file
@@ -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>
|
||||
@@ -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
Normal file
@@ -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
Normal file
@@ -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
Normal file
@@ -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,
|
||||
}
|
||||
@@ -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();
|
||||
});
|
||||
};
|
||||
}
|
||||
@@ -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
Normal file
@@ -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
Normal file
@@ -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
Normal file
@@ -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
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
web_widget_x2many_2d_matrix/static/description/screenshot.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
@@ -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;
|
||||
}
|
||||
@@ -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() {},
|
||||
});
|
||||
}
|
||||
@@ -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
Normal file
@@ -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>
|
||||