From f0538f43d13ae1268884248433e31f7b02db0014 Mon Sep 17 00:00:00 2001 From: "Torvald B. Bringsvor" Date: Sat, 7 Feb 2015 13:56:50 +0100 Subject: [PATCH 01/49] Small fix to allow integers to be parsed correctly when a locate with a thousand separator is used. --- web_export_view/static/src/js/web_export_view.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web_export_view/static/src/js/web_export_view.js b/web_export_view/static/src/js/web_export_view.js index df4419de..e5fe0123 100644 --- a/web_export_view/static/src/js/web_export_view.js +++ b/web_export_view/static/src/js/web_export_view.js @@ -85,7 +85,8 @@ openerp.web_export_view = function (instance) { } } else if (cell.classList.contains("oe_list_field_integer")) { - export_row.push(parseInt(text)); + tmp2 = text.replace(instance.web._t.database.parameters.thousands_sep, ""); + export_row.push(parseInt(tmp2)); } else { export_row.push(text.trim()); From d26801bc0a29df6fba47ba3e7bfa664568d2acb2 Mon Sep 17 00:00:00 2001 From: Alejandro Santana Date: Tue, 3 Mar 2015 18:47:44 +0100 Subject: [PATCH 02/49] [PRT][REN] Added module web_hide_db_manager_link, as a port to v8 of web_nocreatedb, but with a more descriptive name. --- __unported__/web_nocreatedb/__openerp__.py | 67 --------- .../web_nocreatedb/static/src/img/screen.png | Bin 72077 -> 0 bytes .../static/src/xml/web_nocreatedb.xml | 16 --- web_hide_db_manager_link/README.rst | 50 +++++++ .../__init__.py | 0 web_hide_db_manager_link/__openerp__.py | 36 +++++ .../static/description/icon.png | Bin 0 -> 25665 bytes .../static/description/icon.svg | 128 ++++++++++++++++++ .../static/src/img/screenshot.png | Bin 0 -> 34090 bytes .../views/webclient_templates.xml | 13 ++ 10 files changed, 227 insertions(+), 83 deletions(-) delete mode 100644 __unported__/web_nocreatedb/__openerp__.py delete mode 100644 __unported__/web_nocreatedb/static/src/img/screen.png delete mode 100644 __unported__/web_nocreatedb/static/src/xml/web_nocreatedb.xml create mode 100644 web_hide_db_manager_link/README.rst rename {__unported__/web_nocreatedb => web_hide_db_manager_link}/__init__.py (100%) create mode 100644 web_hide_db_manager_link/__openerp__.py create mode 100644 web_hide_db_manager_link/static/description/icon.png create mode 100644 web_hide_db_manager_link/static/description/icon.svg create mode 100644 web_hide_db_manager_link/static/src/img/screenshot.png create mode 100644 web_hide_db_manager_link/views/webclient_templates.xml diff --git a/__unported__/web_nocreatedb/__openerp__.py b/__unported__/web_nocreatedb/__openerp__.py deleted file mode 100644 index 3594c90d..00000000 --- a/__unported__/web_nocreatedb/__openerp__.py +++ /dev/null @@ -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 . -# -############################################################################## - -{ - '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, -} diff --git a/__unported__/web_nocreatedb/static/src/img/screen.png b/__unported__/web_nocreatedb/static/src/img/screen.png deleted file mode 100644 index 48e758713dc870f7af91edeb85cd92d5b80c053b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72077 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 diff --git a/__unported__/web_nocreatedb/static/src/xml/web_nocreatedb.xml b/__unported__/web_nocreatedb/static/src/xml/web_nocreatedb.xml deleted file mode 100644 index 805aa331..00000000 --- a/__unported__/web_nocreatedb/static/src/xml/web_nocreatedb.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - diff --git a/web_hide_db_manager_link/README.rst b/web_hide_db_manager_link/README.rst new file mode 100644 index 00000000..f6e2bb99 --- /dev/null +++ b/web_hide_db_manager_link/README.rst @@ -0,0 +1,50 @@ +.. 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 + +In case this module is not shown in your module list by default, click on "Update Module List" and clear any filter to show all modules. + +Usage +===== + +To use this module, you need to: + + * As in 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 + +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. diff --git a/__unported__/web_nocreatedb/__init__.py b/web_hide_db_manager_link/__init__.py similarity index 100% rename from __unported__/web_nocreatedb/__init__.py rename to web_hide_db_manager_link/__init__.py diff --git a/web_hide_db_manager_link/__openerp__.py b/web_hide_db_manager_link/__openerp__.py new file mode 100644 index 00000000..70537fc0 --- /dev/null +++ b/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 +# +# 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, +} diff --git a/web_hide_db_manager_link/static/description/icon.png b/web_hide_db_manager_link/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4891d91a0df87232449592710768256d63f66e16 GIT binary patch literal 25665 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 +image/svg+xml \ No newline at end of file diff --git a/web_hide_db_manager_link/static/src/img/screenshot.png b/web_hide_db_manager_link/static/src/img/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..1bf96f9e2dbd9148a8b174407045bb05fa91ded7 GIT binary patch literal 34090 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≫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 + + + + + + + + From 1b64eae6e730974533d9dcc1c0b96cc18a355e45 Mon Sep 17 00:00:00 2001 From: Alejandro Santana Date: Tue, 3 Mar 2015 18:59:14 +0100 Subject: [PATCH 03/49] [IMP] web_hide_db_manager_link: Improve README file. --- web_hide_db_manager_link/README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web_hide_db_manager_link/README.rst b/web_hide_db_manager_link/README.rst index f6e2bb99..35562c21 100644 --- a/web_hide_db_manager_link/README.rst +++ b/web_hide_db_manager_link/README.rst @@ -21,8 +21,8 @@ To install this module, you need to: In case this module is not shown in your module list by default, click on "Update Module List" and clear any filter to show all modules. -Usage -===== +Known issues +============ To use this module, you need to: From fd4f2e378f2bc0c81b7244bdf416102adb6152bf Mon Sep 17 00:00:00 2001 From: Alejandro Santana Date: Tue, 3 Mar 2015 19:28:26 +0100 Subject: [PATCH 04/49] [IMP] web_hide_db_manager_link: Improve README file as reviewed. --- web_hide_db_manager_link/README.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/web_hide_db_manager_link/README.rst b/web_hide_db_manager_link/README.rst index 35562c21..0914d2b7 100644 --- a/web_hide_db_manager_link/README.rst +++ b/web_hide_db_manager_link/README.rst @@ -24,9 +24,7 @@ In case this module is not shown in your module list by default, click on "Updat Known issues ============ -To use this module, you need to: - - * As in Odoo v8 templates only live in the database, this module must be installed in each database you want this to be in effect. +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 ======= From 53047894195811a40386052786da7c85c54b0198 Mon Sep 17 00:00:00 2001 From: Alejandro Santana Date: Mon, 9 Mar 2015 11:39:30 +0100 Subject: [PATCH 05/49] [UPD] web_hide_db_manager_link: Removed useless README line, as it explains a standard procedure for updating modules. --- web_hide_db_manager_link/README.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/web_hide_db_manager_link/README.rst b/web_hide_db_manager_link/README.rst index 0914d2b7..d8aebd80 100644 --- a/web_hide_db_manager_link/README.rst +++ b/web_hide_db_manager_link/README.rst @@ -18,8 +18,6 @@ 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 - -In case this module is not shown in your module list by default, click on "Update Module List" and clear any filter to show all modules. Known issues ============ From 75a234f312d0504f2d444f72f1098f366d4a274b Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Wed, 11 Mar 2015 18:00:21 +0100 Subject: [PATCH 06/49] [ADD] web_widget_x2many_2d_matrix --- web_widget_x2many_2d_matrix/README.rst | 56 ++++ web_widget_x2many_2d_matrix/__init__.py | 20 ++ web_widget_x2many_2d_matrix/__openerp__.py | 45 +++ .../static/description/icon.png | Bin 0 -> 1142 bytes .../src/css/web_widget_x2many_2d_matrix.css | 0 .../src/js/web_widget_x2many_2d_matrix.js | 305 ++++++++++++++++++ .../src/xml/web_widget_x2many_2d_matrix.xml | 33 ++ .../views/templates.xml | 11 + 8 files changed, 470 insertions(+) create mode 100644 web_widget_x2many_2d_matrix/README.rst create mode 100644 web_widget_x2many_2d_matrix/__init__.py create mode 100644 web_widget_x2many_2d_matrix/__openerp__.py create mode 100644 web_widget_x2many_2d_matrix/static/description/icon.png create mode 100644 web_widget_x2many_2d_matrix/static/src/css/web_widget_x2many_2d_matrix.css create mode 100644 web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js create mode 100644 web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml create mode 100644 web_widget_x2many_2d_matrix/views/templates.xml diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst new file mode 100644 index 00000000..27a266b9 --- /dev/null +++ b/web_widget_x2many_2d_matrix/README.rst @@ -0,0 +1,56 @@ +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 | $value1/1 | $value2/1 | ++-----------+-----------+-----------+ +| $y_value2 | $value1/2 | $value2/2 | ++-----------+-----------+-----------+ + +where `valuen/n` is editable. + + +Usage +===== + +Use this widget by saying:: + + + +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:: + + + +Known issues / Roadmap +====================== + +* ... + +Credits +======= + +Contributors +------------ + +* Holger Brunn + +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. diff --git a/web_widget_x2many_2d_matrix/__init__.py b/web_widget_x2many_2d_matrix/__init__.py new file mode 100644 index 00000000..faef9dac --- /dev/null +++ b/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 . +# +# 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 . +# +############################################################################## diff --git a/web_widget_x2many_2d_matrix/__openerp__.py b/web_widget_x2many_2d_matrix/__openerp__.py new file mode 100644 index 00000000..1cbc4aad --- /dev/null +++ b/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 . +# +# 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 . +# +############################################################################## +{ + "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': [], + }, +} diff --git a/web_widget_x2many_2d_matrix/static/description/icon.png b/web_widget_x2many_2d_matrix/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4c7ab302908e114888446d84d3493fa726033c1f GIT binary patch literal 1142 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r53?z4+XPOVBSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpuXS$ zpAc7|0+Vy!%`Sd3J@*~Rz=H@Xz@vBMNCCrhU++~OAXQKjgnPb5^?zLm6yRy4l)f7mx|d; zx?*(k%?4)UEmyi0Ecrc2=k&YFn|8nX@qd4)(saLN%zo##oL4V9SpH%8W(I{5_Kby- zneS~VhopAyb6lBS&$U5E`gKppbdV7NQIC+SE zKe2ts8LoR*Hw$jqcIEDHSU_mi4;HoUDLTgOJMIHx zO|`@|q9i4;B-JXpC>2OC7#SEE>l#?<8d`)H8e5qfSQ#5>8yHy`7. +// +// 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 . +// +//############################################################################ + +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) + { + var x = self.get_field_value(row, self.field_x_axis), + y = self.get_field_value(row, self.field_y_axis); + self.by_x_axis[x] = self.by_x_axis[x] || {}; + self.by_y_axis[y] = self.by_y_axis[y] || {}; + self.by_x_axis[x][y] = row; + self.by_y_axis[y][x] = 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; + }); + }); + })); + }) + return jQuery.when.apply(jQuery, deferrends); + }); + }); + }); + }, + + // 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 x axis labels + get_x_axis_labels: function() + { + var self = this; + return _.map( + this.get_x_axis_values(), + function(val) + { + return self.get_field_value( + _.first(_.values(self.by_x_axis[val])), + self.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) + { + return true; + }, + + // parse a value from user input + parse_xy_value: function(val) + { + if(this.is_numeric) + { + return parseFloat(val); + } + else + { + return val; + } + }, + + // 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, + 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); + }); + }).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)); + }); + }); + }, + + start: function() + { + var self = this; + this.$el.find('input').on( + 'change', + function() + { + var $this = jQuery(this), + val = $this.val() + if(self.validate_xy_value(val)) + { + data = {} + data[self.field_value] = self.parse_xy_value(val); + self.dataset.write($this.data('id'), data); + $this.parent().removeClass('oe_form_invalid'); + self.compute_totals(); + } + else + { + $this.parent().addClass('oe_form_invalid'); + } + + }); + this.compute_totals(); + return this._super.apply(this, arguments); + }, + + // deactivate view related functions + load_views: function() {}, + reload_current_view: function() {}, + get_active_view: function() {}, + }); +} diff --git a/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml b/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml new file mode 100644 index 00000000..e29367a0 --- /dev/null +++ b/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml @@ -0,0 +1,33 @@ + + +
+ + + + + + + + + + + + + + + + +
+ + + Total
+ + + + +
Total + +
+
+
+
diff --git a/web_widget_x2many_2d_matrix/views/templates.xml b/web_widget_x2many_2d_matrix/views/templates.xml new file mode 100644 index 00000000..06934cc3 --- /dev/null +++ b/web_widget_x2many_2d_matrix/views/templates.xml @@ -0,0 +1,11 @@ + + + + + + From fd99f3c93cd8fffbe05a2ae122339e63b9adebc2 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Wed, 11 Mar 2015 18:05:40 +0100 Subject: [PATCH 07/49] [UPD] readme --- web_widget_x2many_2d_matrix/README.rst | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst index 27a266b9..6be504c4 100644 --- a/web_widget_x2many_2d_matrix/README.rst +++ b/web_widget_x2many_2d_matrix/README.rst @@ -29,10 +29,28 @@ attributes:: +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 ====================== -* ... +* no validation yet +* it would be better to instantiate the proper field widget and let it render the input Credits ======= From eba96ff06ac324292c083ad0813d284a3a238c2f Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Thu, 12 Mar 2015 12:22:37 +0100 Subject: [PATCH 08/49] [IMP] show column totals in table footer --- .../static/src/xml/web_widget_x2many_2d_matrix.xml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml b/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml index e29367a0..fe3f82d3 100644 --- a/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml +++ b/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml @@ -14,19 +14,21 @@ - + - + + + Total - + - + From d1150e1d6c3240502bde96c588b04dd60ea1b9b6 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Thu, 12 Mar 2015 12:27:24 +0100 Subject: [PATCH 09/49] [FIX] use odoo's parse_value --- .../static/src/js/web_widget_x2many_2d_matrix.js | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js index 3a754f42..b157a679 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js +++ b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js @@ -221,14 +221,8 @@ openerp.web_widget_x2many_2d_matrix = function(instance) // parse a value from user input parse_xy_value: function(val) { - if(this.is_numeric) - { - return parseFloat(val); - } - else - { - return val; - } + return instance.web.parse_value( + val, {'type': this.fields[this.field_value].type}); }, // format a value from the database for display From 69c75892e605e494a196448b11da9a73f83f7fcc Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Thu, 12 Mar 2015 15:27:25 +0100 Subject: [PATCH 10/49] [ADD] allow to open linked record of one of the axes is a many2one field --- .../src/css/web_widget_x2many_2d_matrix.css | 4 ++ .../src/js/web_widget_x2many_2d_matrix.js | 47 ++++++++++++++----- .../src/xml/web_widget_x2many_2d_matrix.xml | 8 ++-- 3 files changed, 44 insertions(+), 15 deletions(-) diff --git a/web_widget_x2many_2d_matrix/static/src/css/web_widget_x2many_2d_matrix.css b/web_widget_x2many_2d_matrix/static/src/css/web_widget_x2many_2d_matrix.css index e69de29b..2992579d 100644 --- a/web_widget_x2many_2d_matrix/static/src/css/web_widget_x2many_2d_matrix.css +++ b/web_widget_x2many_2d_matrix/static/src/css/web_widget_x2many_2d_matrix.css @@ -0,0 +1,4 @@ +.oe_form_field_x2many_2d_matrix th.oe_link +{ + cursor: pointer; +} diff --git a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js index b157a679..f9ebeb25 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js +++ b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js @@ -166,18 +166,12 @@ openerp.web_widget_x2many_2d_matrix = function(instance) return _.keys(this.by_y_axis); }, - // get x axis labels - get_x_axis_labels: function() + // get the label for a value on the x axis + get_x_axis_label: function(x) { - var self = this; - return _.map( - this.get_x_axis_values(), - function(val) - { - return self.get_field_value( - _.first(_.values(self.by_x_axis[val])), - self.field_label_x_axis, true); - }); + 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 @@ -264,6 +258,36 @@ openerp.web_widget_x2many_2d_matrix = function(instance) }); }, + 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; @@ -288,6 +312,7 @@ openerp.web_widget_x2many_2d_matrix = function(instance) }); this.compute_totals(); + this.setup_many2one_axes(); return this._super.apply(this, arguments); }, diff --git a/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml b/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml index fe3f82d3..625a2d20 100644 --- a/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml +++ b/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml @@ -1,18 +1,18 @@ -
+
- + - -
- - + + Total
From 59803fb145b8a6c82c62d5f072f4c56695ad824f Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Thu, 12 Mar 2015 15:44:57 +0100 Subject: [PATCH 11/49] [IMP] handle readonly flag [ADD] show grand total [IMP] classify floats as floats --- .../static/src/js/web_widget_x2many_2d_matrix.js | 4 ++++ .../static/src/xml/web_widget_x2many_2d_matrix.xml | 9 +++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js index f9ebeb25..df8b4930 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js +++ b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js @@ -230,6 +230,7 @@ openerp.web_widget_x2many_2d_matrix = function(instance) compute_totals: function() { var self = this, + grand_total = 0, totals_x = {}, totals_y = {}; return self.dataset.read_ids(self.dataset.ids).then(function(rows) @@ -240,6 +241,7 @@ openerp.web_widget_x2many_2d_matrix = function(instance) 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() { @@ -255,6 +257,8 @@ openerp.web_widget_x2many_2d_matrix = function(instance) _.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)) }); }, diff --git a/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml b/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml index 625a2d20..2950439c 100644 --- a/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml +++ b/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml @@ -14,19 +14,20 @@
+ - + + +
Total +
From df61688f62a65e743b4d44451a1bde4b23125e03 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 13 Mar 2015 15:29:09 +0100 Subject: [PATCH 12/49] [IMP] collapse whitespace in rows --- .../static/src/css/web_widget_x2many_2d_matrix.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/web_widget_x2many_2d_matrix/static/src/css/web_widget_x2many_2d_matrix.css b/web_widget_x2many_2d_matrix/static/src/css/web_widget_x2many_2d_matrix.css index 2992579d..d33d4f21 100644 --- a/web_widget_x2many_2d_matrix/static/src/css/web_widget_x2many_2d_matrix.css +++ b/web_widget_x2many_2d_matrix/static/src/css/web_widget_x2many_2d_matrix.css @@ -2,3 +2,7 @@ { cursor: pointer; } +.openerp .oe_form_field_x2many_2d_matrix .oe_list_content > tbody > tr > td.oe_list_field_cell +{ + white-space: normal; +} From d91b99e6b88e866e8061701ae8ee7ecc791e620d Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 13 Mar 2015 15:34:02 +0100 Subject: [PATCH 13/49] [IMP] support changing readonly state --- .../static/src/js/web_widget_x2many_2d_matrix.js | 13 +++++++++++++ .../static/src/xml/web_widget_x2many_2d_matrix.xml | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js index df8b4930..058a682e 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js +++ b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js @@ -317,9 +317,22 @@ openerp.web_widget_x2many_2d_matrix = function(instance) }); 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); }, + effective_readonly_change: function() + { + this.$el + .find('tbody td.oe_list_field_cell span.oe_form_field>input') + .toggle(!this.get('effective_readonly')); + this.$el + .find('tbody td.oe_list_field_cell span.oe_form_field>span') + .toggle(this.get('effective_readonly')); + }, + // deactivate view related functions load_views: function() {}, reload_current_view: function() {}, diff --git a/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml b/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml index 2950439c..4f587e3f 100644 --- a/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml +++ b/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml @@ -16,8 +16,8 @@ - - + + From 01192747201cfcf040e30bf299b4ae487d805171 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 13 Mar 2015 17:36:39 +0100 Subject: [PATCH 14/49] [FIX] update readonly value after editing --- .../static/src/js/web_widget_x2many_2d_matrix.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js index 058a682e..9a7b8ca6 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js +++ b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js @@ -305,6 +305,8 @@ openerp.web_widget_x2many_2d_matrix = function(instance) { data = {} data[self.field_value] = self.parse_xy_value(val); + $this.siblings('span').text( + self.format_xy_value(self.parse_xy_value(val))); self.dataset.write($this.data('id'), data); $this.parent().removeClass('oe_form_invalid'); self.compute_totals(); From 8d89b3ebdfba11e8c5a5fdb4ad369849cad289d0 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 13 Mar 2015 17:44:41 +0100 Subject: [PATCH 15/49] [IMP] pass computed totals to inheriting function --- .../static/src/js/web_widget_x2many_2d_matrix.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js index 9a7b8ca6..0425468b 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js +++ b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js @@ -259,6 +259,11 @@ openerp.web_widget_x2many_2d_matrix = function(instance) }); 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, + }; }); }, From dac42c52175daabcec58eb7174818b4dd1b4f930 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 13 Mar 2015 18:19:42 +0100 Subject: [PATCH 16/49] [FIX] replace therp icon --- .../static/description/icon.png | Bin 1142 -> 12361 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/web_widget_x2many_2d_matrix/static/description/icon.png b/web_widget_x2many_2d_matrix/static/description/icon.png index 4c7ab302908e114888446d84d3493fa726033c1f..2c8e1ad59d7db69e97b2467c6fb0d4e3e460c9b4 100644 GIT binary patch literal 12361 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 YID`P*yI)_SqJKa}LQ%X*)WH9L08=sy2LJ#7 literal 1142 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r53?z4+XPOVBSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpuXS$ zpAc7|0+Vy!%`Sd3J@*~Rz=H@Xz@vBMNCCrhU++~OAXQKjgnPb5^?zLm6yRy4l)f7mx|d; zx?*(k%?4)UEmyi0Ecrc2=k&YFn|8nX@qd4)(saLN%zo##oL4V9SpH%8W(I{5_Kby- zneS~VhopAyb6lBS&$U5E`gKppbdV7NQIC+SE zKe2ts8LoR*Hw$jqcIEDHSU_mi4;HoUDLTgOJMIHx zO|`@|q9i4;B-JXpC>2OC7#SEE>l#?<8d`)H8e5qfSQ#5>8yHy`7 Date: Fri, 13 Mar 2015 18:26:29 +0100 Subject: [PATCH 17/49] [FIX] setup focus --- .../static/src/js/web_widget_x2many_2d_matrix.js | 1 + 1 file changed, 1 insertion(+) diff --git a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js index 0425468b..191ffad6 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js +++ b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js @@ -338,6 +338,7 @@ openerp.web_widget_x2many_2d_matrix = function(instance) this.$el .find('tbody td.oe_list_field_cell span.oe_form_field>span') .toggle(this.get('effective_readonly')); + this.$el.find('input').first().focus(); }, // deactivate view related functions From a7342a333d024ad0487eea93a06f7c4b17714d50 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 13 Mar 2015 18:47:15 +0100 Subject: [PATCH 18/49] [ADD] validation [IMP] write formatted value to back to input --- web_widget_x2many_2d_matrix/README.rst | 3 +-- .../src/js/web_widget_x2many_2d_matrix.js | 23 +++++++++++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst index 6be504c4..5fb296be 100644 --- a/web_widget_x2many_2d_matrix/README.rst +++ b/web_widget_x2many_2d_matrix/README.rst @@ -49,8 +49,7 @@ show_column_totals Known issues / Roadmap ====================== -* no validation yet -* it would be better to instantiate the proper field widget and let it render the input +* it would be worth trying to instantiate the proper field widget and let it render the input Credits ======= diff --git a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js index 191ffad6..0c818548 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js +++ b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js @@ -209,6 +209,14 @@ openerp.web_widget_x2many_2d_matrix = function(instance) // validate a value validate_xy_value: function(val) { + try + { + this.parse_xy_value(val); + } + catch(e) + { + return false; + } return true; }, @@ -308,10 +316,12 @@ openerp.web_widget_x2many_2d_matrix = function(instance) val = $this.val() if(self.validate_xy_value(val)) { - data = {} - data[self.field_value] = self.parse_xy_value(val); - $this.siblings('span').text( - self.format_xy_value(self.parse_xy_value(val))); + var data = {}, value = self.parse_xy_value(val); + data[self.field_value] = value; + + $this.siblings('span').text(self.format_xy_value(value)); + $this.val(self.format_xy_value(value)); + self.dataset.write($this.data('id'), data); $this.parent().removeClass('oe_form_invalid'); self.compute_totals(); @@ -341,6 +351,11 @@ openerp.web_widget_x2many_2d_matrix = function(instance) this.$el.find('input').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() {}, From be4a19ab097394631a4a0220ed2f60c3b7af633e Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 16 Mar 2015 16:35:17 +0100 Subject: [PATCH 19/49] [IMP] we don't need data-x and data-y on the input --- .../static/src/xml/web_widget_x2many_2d_matrix.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml b/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml index 4f587e3f..952a003f 100644 --- a/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml +++ b/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml @@ -14,9 +14,9 @@ - + - + From 8dd0a8251caf88d0dbda80f137ce6f127c3817fa Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 16 Mar 2015 16:47:21 +0100 Subject: [PATCH 20/49] [IMP] use semantic css classes instead of element names [RFR] and being on it, make reacting to changes in overrides simple --- .../src/js/web_widget_x2many_2d_matrix.js | 55 ++++++++++--------- .../src/xml/web_widget_x2many_2d_matrix.xml | 4 +- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js index 0c818548..12a56c8c 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js +++ b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js @@ -308,30 +308,8 @@ openerp.web_widget_x2many_2d_matrix = function(instance) start: function() { var self = this; - this.$el.find('input').on( - 'change', - function() - { - var $this = jQuery(this), - val = $this.val() - if(self.validate_xy_value(val)) - { - var data = {}, value = self.parse_xy_value(val); - data[self.field_value] = value; - - $this.siblings('span').text(self.format_xy_value(value)); - $this.val(self.format_xy_value(value)); - - self.dataset.write($this.data('id'), data); - $this.parent().removeClass('oe_form_invalid'); - self.compute_totals(); - } - else - { - $this.parent().addClass('oe_form_invalid'); - } - - }); + this.$el.find('.edit').on( + 'change', self.proxy(this.xy_value_change)); this.compute_totals(); this.setup_many2one_axes(); this.on("change:effective_readonly", @@ -340,15 +318,38 @@ openerp.web_widget_x2many_2d_matrix = function(instance) 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>input') + .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>span') + .find('tbody td.oe_list_field_cell span.oe_form_field .read') .toggle(this.get('effective_readonly')); - this.$el.find('input').first().focus(); + this.$el.find('.edit').first().focus(); }, is_syntax_valid: function() diff --git a/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml b/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml index 952a003f..35f1669b 100644 --- a/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml +++ b/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml @@ -16,8 +16,8 @@ - - + + From 0ce9719a0d349fc5415620556e964ea591f2a790 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 16 Mar 2015 17:20:43 +0100 Subject: [PATCH 21/49] [IMP] add screenshot, example in README --- web_widget_x2many_2d_matrix/README.rst | 25 +++++++++++------- .../static/description/screenshot.png | Bin 0 -> 19577 bytes 2 files changed, 15 insertions(+), 10 deletions(-) create mode 100644 web_widget_x2many_2d_matrix/static/description/screenshot.png diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst index 5fb296be..0b145aaf 100644 --- a/web_widget_x2many_2d_matrix/README.rst +++ b/web_widget_x2many_2d_matrix/README.rst @@ -4,16 +4,22 @@ 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 | $value1/1 | $value2/1 | -+-----------+-----------+-----------+ -| $y_value2 | $value1/2 | $value2/2 | -+-----------+-----------+-----------+ + $x_value1 $x_value2 +========= =========== =========== +$y_value1 $value(1/1) $value(2/1) +$y_value2 $value(1/2) $value(2/2) +========= =========== =========== -where `valuen/n` is editable. +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 ===== @@ -26,8 +32,7 @@ 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:: - + You can pass the following parameters: diff --git a/web_widget_x2many_2d_matrix/static/description/screenshot.png b/web_widget_x2many_2d_matrix/static/description/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..47c2a40d62b23f3b5c4b97dbc699f20dc5baa5ba GIT binary patch literal 19577 zcmdVC2{e^$`#!8vX%Y!#h!7%_%wx1ELp-K!rXqxGo->q)2xUm-h$J?Nz0D*cWS*yF z9=3U&{m+e__j#Z9dDri^{_FeJw?3;y>)!Wp-S>T6=XspRah&`49}2fl9j7`@KtOOx z<~Bl^fZ$Lt0l@)XqJywyo4foJ{5fPRDWgh6MAY4{_=|vmoaGSRCs-Pp1@#&m`gIq70YLVD)@G0D*G1@G7Ha`E?hJr$+m(d;%U zPY6h>P7^9IiC~pdpX;1VJaCzWk%Z_P{ndyc$AsNCQ5Fn8k3Vl_Nu?`=SL^w`qpA3IR^cgQx>#36k%KQ zx!9+&v{v-dTjJB$E{1|p{o{+*1$Ixif8MeYwX;&)v~6{I=%<2#gLXnOCRz2Seas9` zPuQn_KuP`UHVbZc%b-$GqNy#|USkXvz45sxfSTX;c9L?8z#Q!X{4Enc`Sz_K>6TvL zVB#$eZ!I*1lu{S_9R-Esi^uVwzbz1Un0z6d^m#f<_EGxrxxgD-r}2mV;xqG3#cZoJ zHZ;)tCCDb_yXJ{C)EvTpM9*MqV)9F%POICm7m43MB)yz`oK=-A41*=#-QnDA4Eofm zQ``}g4k-3s!BgxFX1hn`qRaBoOs&}Co^O>?(slX|<@4e9f83qeg$$53K%>I!S7~-% z)Z@pte{_FDrXH4Pz%3onqr&g@g_bQ$mN`UbBdsYm^`ti%zm3G)T(Mxn$pVKl%Q;vi zg5N~Izz{o{WUHMdsvaT#EQAohiGHj@JmzOQsyuJ+D3LS_8b(*yh5RbBdp#0)nrNoG zSI;GOwNdj&9x4>V9|dO`aMoLQy@HEPz0x4JyW<#@sW$$((T~}EK$Tmt<9G8q(t^c* zc%wlAwYP!kf8O9Nn7sYIJ{W#t^z(!(WB~ z@d0%h{yZk}w%s2?M_l(uqQzi(r`EQ%i6s{al7mGr=`U?@%HFsy;2KVGai-cF6gAC?;%McR z_wo^+&DzsXi*GiV^I3Ldr~J8!Nu;iEaGQwxdY6@z z)i*G3yVlbEy6dWy{*}{Tej4{p5Jr4CX7h@Xfm_py&%eWHAhNrw`-fzfl7%^$cGuw$ zB_2&L$C0~_@Z;(;Jo5C(sB@U?aJj#1fn9BFEh#B!fx{F-LT`a1oru#_Vc|z`?eg++ zZ*T9mdw1^Kk$z`g6?{pg-m)iGiNq^OE_}i+pFeEot)H!yv)fA(J<~w)t z$kS5c0yLI9z0LDLR;P&dz_;(;Z!@rQa9m0V4Lut;Xk%-8npTL%aa!l$oAUcI3JOTJ zFhom3!^_vNnK8JDiNeo(v#;O3kHWQaq!&)dv`EUNokn?u%jscOP3)?c;$a5o2jb$7MJidu?m+-?sF z2q2ewS&%;2@b+lvGmsLIs1cp#qTU#SqnwpwgS`Y}TfQn>&O4s

q$zofJg&#hQSr2BbXSC%$N*Ni65_QQ{ zU%8Lf5L(p9w;OLtl0z)A1a6R3%82$M^)C|7l){Q2A`p-17P|M}ceF?b@|D@f9T5^D#x5m0(saYPG(dD6)dWbNE$My)lZ- zXJur3my+^uVWbw3*lOC`+`P45U+OQ<{7(723_|unVq?cdvu5y2Ny#UBoEcY9c6qN{ zz`1MvnU&l}PEjE>R@(~;qr>&&4)`!zeSQQhWJq4S_lo^Vz>(Ef*jSP~_iGgzeLq|?pt;&&;lgkbhb;pj3Xq&Zjrhoi+ z4rcs}M~Rq_(Cg{V+TyS+!8G$Mp_AWh*vH#5N^s#H)5W5q3MMC7BYiGV<=Ktv4-8CC zUpbH(tP&>@A(UHl?-m<1zqv-qgDIq0P?hSn``?IIRA4M$bSnd6o(BbG7GFxu%v53y zu?`3bP)4OHw0l;zO;?~R+h&pLwaNZj%-wNJcRB3CXj067^k%zvQ#+YMMwpE^sH{6l z)l$Fyg{>7kPr!g_!M%m zRB;r0kWlcI|LwS(XkSF2fKtVC3MC4O`vvk$PeQ5?5#HCOUh14JcNjQWqyZCYmhuzi z9?zcDIK>M)3sq0_@CnJTy4hCyqE3||x5TGkN2x~%OFdPFV7u#qQLJYw57nJVk1+JP zc2`tan2264FPjEPlZ|=fk2?Vgt@6y7Grp!v>&+A=etHhQk!QyBYKOdhNwT|#*F{KQ z)Ud~_{1G@n;vi-(f7|_mpA7^A7mxkkFlnZpxxbCz_qPAo$;yH~Hy(>cX0)F;C}#2H z+W5>Bt85OqEswWYa+*{$8l7PoR^!8VcD1wOn#8A;c6GAWfhv5C!NK`O-5458F|;mz zetsf_%!G%E^ti%Lm%A5|aYuNXyw&rd3c?T0{ntZO>f%c_(ZYczywOCSkKNihs|=6( zAC@``pZ**z=|X087NWYbT*a%BXUns*v)2|z*~4V%+&Bp8-Imb`FONmjQwlOLgh-iW z`J$N9^Uy`LS9qw0EBG>#bg!P53XyU$CdR76+uN*F$Dj)wXT+Rlf5D_3wsE$wurN2D z?8&n&+PFkec>CosxAo1$7(%6AS13yFQ`AzV*D@?~`&TSGgeZM_lh@|ZX!tNgK=Y1Q zB_7B1&G+S@lai7Up~1o2MnBFm2-%Ij3@RpBy`$S(K3o$QA+}YTBo`;(I30>9$zFVn z?Cz^VY#e|rRAMvyW4!q&m*#xU$B!Y)Dm26BX$GtDmGSZdcRIcVCa59@5;JyMF2xTZUTnV7;CR z$zdAuqxiL7ER>_xRSZjGFC(oClwYLhGhZ$1$Slz*av2TRcVAuZuHiRlWlpHB_RuZX z88&=fb^zDTMJKlTN?os0Pb=S}`F)sW$(Ez~k;&cy>+dfcYr-v8heB4wHfLixv%(!6 zw%)(5sEv}_ST3qxD!`HHhD4sV><)SJ<~AanQ}^@3#nilnxNDZeN`5$X{ER%Zj6oN7 zp#uE<853T=hNR8R&}70Rwl4XLKS(@wZ79SxAt8Z9-f7*3&NQ*kcC`4_1v=qDt1qi_ zDsk>EdaA06xz=5&>SmM1f;4~VZP&N7?Dz#tU2~Wm93Ive$aA+{sJ$SnYSA0hd4IgY z7N4=gIY}Gi1f~^fSe9J1-Mj?~k3zhqCva8!hn!XP$ZfXdIawStgMayaIVIgmYKKP! z){wKJ>um(?{xxe+9t9}WUf`(DFwtAkhcUw_r1$+}8nd@G#GWG~BipgH+dhX{$sqv&J9hYo@on5nO0r7zwZ)F8)E` zuX={QNQ)Yu*wlzb9?d1Ry!&MpjgJ@gYZ+Mbuk}83BN6h_-jdfIHZ7i@+@3NtR8k69 zFh>4cdTV9GX3-FjHM2-07sw)(meeet*yp~CEj+^MgD4fQmXulfb?TFT&(ZxEN(6F_D#*SCg)Xb{>m=B^SPZiF4Y*XT>CSsD(xGJ@K?n$E)g!Q`Bvingy+0 z2Ha{d&RzRjg%6)r?U@F~M@~(!gj7*cQ+v3|y$-5FdC%I`iymr6Z+rqK;Qr&fBcEzv z4P~0P7NozR5wP;z()?6so$$3^=3tw$da8qJ8=Po0)(yq}Q|I6f#JA@ok?bxZ^y0eq zd9_!lICPdW{ZU4ZhNO4+h7b9DFBlTQ7q#>xuJ#t}H%v(Ld>5T-p5GqwC3_HULi&J| z30s3WBM>1UswtpCSS6)o&cfN?4@r^8V_P_foId--&f3tNcpS}`8eH{8GNh!y|L^l; z7y8t>tMmj~hDZ z`T4#FoU$=^+S5VkVPT4iL^14NkSTs|1fImdH}v=56B7ZE(0=9n(yMEK1H@gw8(f!v z)W(W-cTIO@jUGBJGCK)02@jQH#wUYHV#kujc*lB3f_AVYMVfo zhvHDkc|Nhz{DO$nY?@|PkJbzPC*qs4H}Bo+hhTzGD%{!L$ol+weQ|tnI&6!+!zKh0 zM$U&1zEhvKNzL=nx&_NWBCcaaOV8_m8fISdn6F~txBOW+8vAIZE+*>Do3Xv4vUG!( zR!jPr>e|PLJY;Fp&wtsFLZymNc4Xcp@%sGvv*S_zY{&tEH=3WZuawK?0wJ z!%s*^nS+}+QEZRz2e{G1M6W>srL&#sll-M2+Gb{E8G1!+8F1=5aO$4wni|LHo`|q8 z`+Cup!lgFtjg^_5DNB!ys za(8}z#rXUK7W>-w3Wc15g9DtOSuwWIV`m$!ofBC*g0H~ET;KQxhlCi{MkcAUjfaMP?#25~oZR=!b7OF(kUZ{6* zy!kYZz^|DN<1>?de+=Cq6Su(*xTzcM#X80uXk?)#TzvUl?xN zFecpeA?}6fpr)qgUgUw42-cR9larT!QDXV?kVJ4dAco7~HI+eh8LDjX_9kb}_E0kA zX%?;gd;|}#UTh;RZn{s7=DlHWWSGVBL~AM#2(7KHp7bZFcubZjJH^+k6c6T4bpIwG z$j8FG1jmgL4C|fs?$U^+Lw~^K5QuN@??m~I4F-vC!vy8Ne%)g!RX;2=)OEGrXPL4y z%edY+&W+EY;)Q0Gk=s(M`p#;lc;YtT2B`XHRFV~-G#-b&ax8jHw@$V7J9dR$R&jL> z*P~#HN5dg7vokX@o9@36pDGjgWa7cy52O*4M7+Bdv|QEeqWE%%ndqzd_FPbCXy~s# z(=b9A3l0trxIM0t&H2r>g+3P?N9?GZbF&@^Q(kLJ3shYIAQ!wT^)xW1tr)X**S(Kq z*x1=?s;imrM4qLin~CaPBKNs$pWC^)xd}Iru8}#wU$Ry^-kiL!uyE+JYAo;}>X1t? zT|laxJTi%0f4X>6US9r(FDawB*_|Iowz9IahK5X}fdASNJT^nO0|)097J_Jn`D{mi z5Vv3E;$lf4Wt9GI_!+JM_X5-kgOJN2D=8Fs6X^xhY^Y!-@$X7=zX;4{i_O{mj^ie z{@g%0i$Zh<#w=ViUIQp8N6R*UPnMk5uPG!*f`fxEIQ@E3SXdY%?8vE&{ZYV=lPV3N zCVife3pHVqGC({_qZc`Kji0k)%#DLG}YcJmANAmbU`%nS+*z% z85!f$=bl36W_K$U6*5u|t?b+D>QF@RLgwXZkMbwZetUchmr+tzQ$t4BuU@hqwy3UJ zdijGSV}hrrXGZb5DZJ_^KGgB~$h78u+eSNP|1pp!UiJr*W*?F`s#ug{NdBq8q$H$K!Yr?sLsCYlB zXXvH(NxrnYlyu#=?koj`UV#I;s3-=OwSOGtWeJp7L%)E6=?7J|7=`w(E;cuRfz2qB z0BPH;^`*^C*A$IP{27*(mVkY0>&x%2t&ewG>2-|aw|reQ>`%!>JYtL-Jvbl398#sM ztc*o8AT3#ZY$3H3Y+Yoc8o)0$#1@jv&FS% z^a1w$VU%U(TabP4yx-=|mQioy($|Tty0B1)gCE;*`p&~)k7kM-e-=8s>l;9-rMd#w z^8JvIFrdG)PDz^d{(V=_`Rhg}Noj>0(msBiSR0MofqB8U1k>)dFGR!o7-4?ny6Dza z_2!tJ1K!nn2h2Cgv?L@X9zEKCrE+s6qV=_hq&CJ>&B0+A(nR7`)E}<16JNyhrgF>H zGvY7Ac-U;j?X1O3PEOj6)@kl+w=wtA#yN({o}F447F~PVx6Ksx zlgD|cXk~p`&owzK)Z7y3!Ve7U=BW72<*6GvSnRq-$_LabJ(c(J4=pS>uUt7RWj#Ms zrJQo-DA2WN^wiVSVkRgQt%%bnjNWWYax8a*Ja8GLQr9kDmYLWo=WmcrdQ#g4?3f)6&_-TXZ0Ju&}Tg8yT&SPPaNA;Mt zL@24LsmHv%&UjT2#Aixan7^c^9;!H!=S}8adY42>DM@+Uj^l~mNxQ{@zAdOGj3B!| z(YwtmVRDj$YIo1wgS5wh^=A$NzF4!K?3byjDMAVI(CFHNx)RfuE2}wUPf7j($o!Bx zI5&5#trD4{N&uV+pq3jAnc_L10O1h~$-#XxLZY%5OJ1EocV%(vFMSdht z8_v=5{E3YKCY8ofcWZzCu7pax6&K7409^6?o{U2D9}LIuE0*pH9KnBdPuv9B-=#>8 z#OnqZ)62xTmq4TF&;&IQ#b2}L=aIBPc=c#p+{I!yE&5A~v90ey2){gs)Vscp%ya!9 z*@(VLK`7_u#;b&8FX7i*vRV_p6JQsHsY3S)^2Rx zr4PA0H2=h<=x10d(H+l*bGhVH7juO7Uq+@iKfiW+hQ5BD%`jy3@GF}0y^ejF8zt)# z>}X{7y-#HdsUssJ(b3V1i;M7kWWlF;luEIV|mK9XQd3jAKR>9c z;VPM|l9Fc*QBGk>@bx8n*Ej|jnXE@GZCj+eUCUS!>@72Mai`63T^~<|P`NVDjxx#J z?)S;-^YBo3H!f^HG2rEOG;v!cx!7fA%RZxIn@+#{Ub32**}`-$z`~L{x6g^#j?9mZ zb<_#nr0tGzh;yZpH2J-NU|F1mb%4y!1Ce2?@A>oRu{yU>R3qizgRl`&b(Wlb7zPa# zgqC4hf%*ai z+QV``&u`xnZ~80?j-RwQckFVTwmLz6?6> z+qb`dl|HQx6u1O+@}3t!bfw4h@CmV<&4sOv6*J8yZCI+)wg8II(PL-R8BA0T09v$1J^AkP!%@%KhZW8U+e)wfts|$4F zOvz61GV%D;11YHPv9u6#Kk+!{kqD>)0L4X%d$@OHKU5GZD&Ouw>cbm;RMsYRz`r~= zI{Hf3G#?L7Vp5XKRDQltcV0?LN&+iH4k#_!wyXDf%&*ou78cX-H+}F`S#&fFEv>Ge zUV5vkVzhvS;|0SYJW>Ya{isteR$y3hDOlY|p$-yAo8LP-~=u@Cx=l z>qnH;IhJ_6CA0V8N>$}WFGwuEbIb^*4<<6*v1_^V+qX0=%*V0}p~*$sza$;KLJMPl zx_$j@=Bo6>LsQewC7yO;66WSTA)P zFNKJRh-m78=yf}wZryFF3lm8zj1*sL@mQI{DQRX)#`8qo0d1($T$$}%wB0iytnifB z-=sPJ3zK?Unl9V&HN@nWdwrat=Rk|SVU=QFMOY!rnA^dC1aLE42<$jG#q zhYuej?8X}60glQ8=!NB9x8XK1ziT8>ae9pZ>bR9u)iyof;ve@$l)8D_BK3fh`Hdfq&S5WZs zr_{MwgTriWYdTuXPstUNcQtPo@9e~t4?}F{=FY5W4^+n_)bZalR75@UUqv( z?&F+_rJk>4K#vU!8i2b2fRWf*Xxd{E!cr5S3j$Veq0kOtQ6yfp!DqEEHD@7>k`Rth zt;OS3=LRhc=cM7;`;oKXzkmN=5eVHI4YCq ziJlxiSS5ZI@g6&NEd8Xk31Gc1=mw&^-X}eK%u+x>o_FRip`2YV>q~zg`a=kQ#E(fx znD;@F03Me8hG2V{mVl5J)Id=o8N812Q)~Aoz2XiWI^u*=zR-$wv8KhJg8=zYG*rjF zDdX{AdxH7{YKd-F zfcoZ+m4E-T<|x=d)Q>Ro90M4H1Q;}Zl`&}bx=f+()h_W|zEGG^qU;Ec5BFplLvC+>kCLYi zX(UvK+HW!r8T~n+9GfgPO-)S|mF9TczhSBnA;>oG5)zIdKOXyNIu9zZ4*lx>D?a}T z=?r#X8NCP;+7`gA&`yaFmZ0n1kw{ir=CqZfDaNcNeFCF4H6ycDrSC^_)|z zdWvfCwk-Zt{ZfQ%kC`d79(*SK?qb5~>MEF0WMY6j+uq)o0WN9@&j_Ta*9ql*`0%|7 zKcKG*BJ~SRVyW4qd%mW}7T*lHFNeu8`0WS2jHmU!7W>D z;n1z%THAb|_Qg%1bP%0;^X+k&29-aI78>Gjj@HM~0b?@98|65or>(t#lKlEB;(9oq z2yYu-OS7_>Xi*0(WO}LHV>4rBcKNUbD_ga&^+23sZ&D=RRQsW$#5k*%=@6#k=D%>K zg_8eDKS&(Qo26t?J!?D&w9Qs`dv{$_GnHy0NdlI`90tdD0UoyT;uB5g~sV;s|5 z%wIDgx!d|;N=60?1MmYmmij3RK*?C3P+?s*c|GO$7gVW;K~wlkrM4P9ct9&?W7w7k zGe#4*H!e=jI>2Xjbz=4tq4x3s!=4;E3Z*6mhnC&ey8VV+MC}NmuNN;~KtXVdnhzvm z1}%(f7%~+TsGn`3BrW|67KRw>&LBF*`tT~d3ga!UXpt~D^dbAxdh2;PTh~q<1nM{(>8Z?0XXCZ4mm$R zf2upDTiS%|ilM+_2(Atg{kFjGvfM(Vl%Y3w>QsBQ z-I-TQGv9h6$=xqFf0Mx9e2M$kd;oRd&bVS$TgDDXVa0&MnP2`)-^0Ju1Jg~W80DlS zj0B=yWI_JHgW+gFTVP_vQC&QES4;|U>19wgE5-;deLca|p;wAuVz5}ckk3(IEL8Y% zKa+`tMJ}lTe1eebmAjWunIS?WBia1!17HKXb1FkeOG_33pp>R^cx2>)ke$hNPhM43 z70mGA;bATGGMIAgMkSVkfkyCvT%D&A8x;jqIk!Q@NtP|z(6BI6SN3z?kslF*&df$x zml-5w5XYswI?e5xVA;)%%r4(~-$v)2n{D3t`lgTA6}IY{I``Tz&3h65zS4SzKOwIJ zSmltz+LHc%y&L(TmjZoz<#0y^1ompBg6RA4%EOQKWVTK zryg2CeFNyw4TsJdvRSJRV^5Zk7zo?&^T#!JXec5A0)ztIXM`x!8+-Hn}|P$K~PRfEHPbSK%dHCwxOw9aCLWg-`U=p5)XXg3$Z8GY2bM+ zke7YMx15zwzm&of>r}dYT*1iu!Qb8@ z5||I!q~K*uaI~g_J;+7wwL&|jptBuI&a0UR!KDP;@WevB_{{9PADd|j36d!^q+@D? zCqh#0fAdXmzF~rej7m;0@QRDXK!cfaJa_ zkPyCWbo%w>$pujt`B)Lbh8oa{2?&B_MYuw$prlS4Jw|ANVt+bV83gPfI9Tn={m8-K z_C${uzn@b?Mjh%wna+i)urxP<@FWOeum|7`cr&@jjyatO>1v~A3aJ9fSa8~o=%VLc z>$#&$UPj))7+s*c$WQ%SCd>`f?jQn7B7I_`2|&ifrDw*x3E%ur@bSgr_5&LC-tXCc zJi$*y7_1r;{PN|m0VgkMqJZZGfT8BmTAM>^B@qt4f%w2f&=f$|@kc{?)IL;)mJWUg(3f0B_ftkWQMUWj2LQ1~lGr2YIqLPUe#RMzoD z*{=b58R0cY2aX|d&I9`if4g_KH)`Yo*MO{^ujG|(FRTVJM*tlV< z8{t_ZrFfvUOT$s)O#_d+kou&A2TGcmxFf!nm-I=PAOW)C;PGbt3Cgwe?4dr#`x=4p zf*?02?Sc9wHW z0)m2A5}=GW;h|#i3koW6n2NNw0?%`cmB8C9O|iXK_1MDjn=dI4Odg7?&)_=Z1o~>MxVoevv2LXc{UGfUUPuhn7}Hw`s?WliYsI78F4=C zJ^4#Pt*yz4%WtkJf<5}BFT|(+0E2IKAMV#9-BXM_Kw$p{`$Hq-aLy1asDoYmy(ts1 z$|*b%@~>XKVh*{?##ZeP4kz8Zc~1RSEJf!mh|YskIeptBQI>kHbLHZj{ih+wuh!^q z53KQOYe%`S6x3#v=q;|}q?)d?lZJ&(%E-%WWhT&HyEfi%@hIj8{spj`f9e&JylHas zcd(GK&{NXY!o{`~UIAQIZYmEH-?dE)PhlFrBE(^8% zP^yc&uFm>gaPjpuH8T@E9go3WW`1vQc+s&hjO9|2v{d=Y^W4~v6O~#c5PlVo*zvJ% z=Gt%I>FM9u5)xHjQxrfhhsPDA_B8WFUOyWMq`s z!hn<&^p)jf_De1I|P!RBeG{hAxIpRNUiI zJuXopwxlsD`I)cFlAoo?YUb;;rFQ@5lVj${RcqWbDUkSo$%M}3Q0QM|R>O)CTx zJrb?;K)hr9>?r<*ToLj34igg-li6u|VfKf>nP4n)a&jEcF)s1&@^JJoCWhRaSKVcia&rEQU%Il46*u(3cbG-X7(*eA z_(w#?`q^z`S;msM8>R?PZq_!jA$LT!8M|7a%UE?79sAqid0*k2W-y?{`chHbQw2QL zGV(c;A5G5JVL=yvk>|+o1Wcb}!FjG8#R1w0J3AwTS;QywF*4@c27wnuWgYzv__6{@ z7ZY=bdIgq4TU~ZG58gZ45OLiYoDW!+CDYL@WXVSFOsxC*I7rUb)v^p!KuL|RU_5r7 z8B~g0qXJ*X3Nek-M%$6o3Szb+R@&M%0#S@-~VoZ37mr~zQiZ+_^dcFuhW z!KuB-zd<+vttfGz_y4bWy^>Z~5wPwGZHB9P&Dy|sb|1Jvi(c=WD#@JN?ImJhS4aax z=}x;xZ~9{exkoT1=4<&!b@FW7dvfW_BG5A)cKBq{Uy1I%g(s)}MH08w{^{!81#hiR z{|4T~?I%<-(*3Qk$qxJ8$Y9WTBTvpKZ5MMyG7FD~&Vhoq{-4QnL~K_ z__WNl-Ry%O#~t&$%R>b|nFdIfRUs@#T?FyKBVg2O_PaW#iX;7O< zt~}9``h$ef-@or6QSEV12t`35YJ2iE?}V76OfZQ`*05aZvQ#-vft|1a*7l-&+Hii;Xe|f9ZfdQ!j(k zYkFIznks-gF7d@b>#fJZHmt0zt*zh37JgcdHGir8i0574PnbX253f-F7e4eYw$)?N zrASANWTTTiLXwm2Lpx6Q{EL5N2yx1P`M%G-dxwWT#Hw1tS;^wx7EG-%v?%uFX^1#O+}?97c} zc*m)U0uD(2r3_v;o}~PcI|6F(JIpGos-e42;wxTHn!;nI#_(AT7Ke=l#nQT1~-z z1Xe6=vo^fu0SO*j$)Hp+GB%DAvac3m78Tw4^5hUe8_+fL-M8|$lE4=Af2l=c@#@^h zbV0rUMb{NwXJutmRn;FaFB+tNtd6le(^ws*^-Qz>DCCyEYPx!_qN4#d^@DM}%;z-N zl)CUYD-yq}wc9;=Y!~|&I{T8IdV(MWp1t5pa!#>*xz_LKiNJ;4I&PolwBFYpO26UpQM^D3j*2jsLljWmrgy zwp~ce(q{ken8_8s<=;0jNOJolrSKvEW?o)QVqzkgfrhF= zr~-^YF+HC`c%S;4 zWyapt{UgdA+>8GUsF9STTwYm8)(BF3BEOGJ(7e*Liuv zEQn)sfx$HrjL#iG9->{57d zQjQ^D1?YLecYza1xWuW9o%v^VkP#k*%d^MQ@8I4pAJTx$xL~xABR9h_l~yzm=P8 zzjOQc@$@~ShJa{aHuRnUfW;IR_TWz7vBl$0*GyYjvCn_gIzvh*9QfR3{CV-@!wr6) zecne#U=J$%FFozYGdu!-{B|7c%rx)`nTrF!To)r86Z9&5-1TH`ItF78lm?4pEKgJ| zgxFYKv)6caOA(5=5Jj;(aD0GQ<2snSzkNe6zyj>VqNweIOUm!#ZHB=1Ui2FPx*YGs z{)3gqVSVj_Td9~|-E_;nU}P^Fk59*$8y3GYKcSk%Kl|Zt25!HcnD6Jfyp~` z1XDOW8(ZPLeJOMWPjg(pTvb=sX2OGOLtm!~fVvWX`todz!IlGqTWHg^oa!st$tl^I z+Vi>33@Ll;Z1jN}xrS2D>4`7cfHxM$7l5;9x|bX`U29Au-9M{9%iIYS(n<7n^JDb< zzl#7*wj8jTBh}Tpw6XFeUf@;-f@pYXNMQ43_4*eF7y+fet98R$3B5e7(}zD}Tg~}O zz|si3j0Wf=;6lZ_eV~J2qua71NjNAEEUdb~$wNC4l;|xUCnyAap1qpbIBShm%g+eG~jL;2yss`Vjm`AfpbSvuVI`MToFM|vJ z<5O7y!Q*GJ0v4~#&t9dRAR19NF;^*wofRlA2fd`vxO;&ttHx9 zeA)^RgX%hVRE;exqvTBe0^%%`L*(RA2za5{bYMk~z|SBMo|I#}%J0uDeauILdCmn~ z&lLW{V9{>H_dl>QFnIc2a9_PQt`834(Q5m|ok);^;0JN`{P|8zV+|XpWL@UY+MA4R z|MuLp!CDNKEHDG|p}G(;I~RdEv|pPahAFc$(ORRuGJNrGMtXSrvWgYp-Upwx-6+?4 z;SP|R!`RjJT*i~&8w^%a_j(%~``mJz7mV_Bwn5@vpR1$`7lM|vTL_~p&Gm??a?4^! z)Mu1HtcSJZJC-cI_0V|l`9&D=pAOI<`%4VCXTcqD<#z0OTMLU9TOY;5!+B@2H170T>f34r5~` z`Wfhg%dD&>mX`XtR`H7=uMMFp0C5G({U6S*e!5o{ty8M?O2p{L8^8^*V1!zq4tF;Y zm^>**Jd>TpL>d{U4H1C-FCjoJ6{%b7>O5Q>2F-B@J1~zcje6XMM@iZUog8M5yuWOR zpE5+@plt#uVQ{`lDMgDoe@3Q;t$WP*>z}2h932`mhf%=W1~b}rB(E8`2#t*JPBP$& zmMW+%S5dEey%zPpf=p)tjgk`(ohw0BHNAQc8V=uqGBq?b1UlY&y^0g<1=HmYgCJd) zW?;|$B`_UcvN@b66C(7lHI&`zCW$+#eenCKeUdloZ8Zw!7<89Ft)Rqu7Ffs-Q*Ggm zo3a`0WOxrZdb}Qgy?fO+;e&FDUHdf&Jw6_UZ3r z23{DwT&q$_v)vRp+t7Km!l4Rp9agNmueS>X9&7(LIv?FPDF^>)vDvT1|JAg;zw7^x zHprAN6teo6VyO0SjtSZjK_O6%Vc&;2g!^4||H}7U@a;4K)V1I{-+c?D`;-BR_kSou zzc+xRJx|BI02?+az!0prE4z6eXPbn48PuL@QAK&z>DoI-7*G69NBk5q^@4f4Guz2Z2T5-Vks7ww((s7sEseCs7f&5cT)vOyUY#?C`dR?9H9|w1q2J@IdoJg8~+7N|N1Vb z(G2*?r}2ARe+f>$> zS5vX<9?7w-`SolVa^e-FaAEbZ4NfdohqH3;OP=P*>cyoYLfw)0)3C;e=aS zU&1v}qthOxH!WneK=UjXgKk;7&TFc@|2@(G!CG}72&$j>!?)Ydye&AJBzeyr#BY%_M+KIi|Vwoc&E4((2cya zm72KFi%c4dveaHcFjC$my68nBnVTqD%=8EMXcMc>B~3GqzEAnMxY(sF;=n-x__uvI zXAXHI@491paG`cU9q;z2YmS- Date: Mon, 16 Mar 2015 17:20:59 +0100 Subject: [PATCH 22/49] [IMP] icon --- .../static/description/icon.png | Bin 12361 -> 5139 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/web_widget_x2many_2d_matrix/static/description/icon.png b/web_widget_x2many_2d_matrix/static/description/icon.png index 2c8e1ad59d7db69e97b2467c6fb0d4e3e460c9b4..d7cdcec3b4f3db5e2af2745392b116e16a2e40b4 100644 GIT binary patch literal 5139 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 literal 12361 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 YID`P*yI)_SqJKa}LQ%X*)WH9L08=sy2LJ#7 From d4720335651fd59793ee0810a07aa6decbdc437b Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Tue, 17 Mar 2015 13:16:07 +0100 Subject: [PATCH 23/49] [ADD] web_ir_actions_act_window_message --- web_ir_actions_act_window_message/README.rst | 50 ++++++++++++++++++ web_ir_actions_act_window_message/__init__.py | 20 +++++++ .../__openerp__.py | 43 +++++++++++++++ .../static/description/icon.png | Bin 0 -> 2034 bytes .../js/web_ir_actions_act_window_message.js | 50 ++++++++++++++++++ .../xml/web_ir_actions_act_window_message.xml | 5 ++ .../views/templates.xml | 10 ++++ 7 files changed, 178 insertions(+) create mode 100644 web_ir_actions_act_window_message/README.rst create mode 100644 web_ir_actions_act_window_message/__init__.py create mode 100644 web_ir_actions_act_window_message/__openerp__.py create mode 100644 web_ir_actions_act_window_message/static/description/icon.png create mode 100644 web_ir_actions_act_window_message/static/src/js/web_ir_actions_act_window_message.js create mode 100644 web_ir_actions_act_window_message/static/src/xml/web_ir_actions_act_window_message.xml create mode 100644 web_ir_actions_act_window_message/views/templates.xml diff --git a/web_ir_actions_act_window_message/README.rst b/web_ir_actions_act_window_message/README.rst new file mode 100644 index 00000000..58cf35af --- /dev/null +++ b/web_ir_actions_act_window_message/README.rst @@ -0,0 +1,50 @@ +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. + +* https://www.odoo.com/forum/help-1 + +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 + +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. diff --git a/web_ir_actions_act_window_message/__init__.py b/web_ir_actions_act_window_message/__init__.py new file mode 100644 index 00000000..faef9dac --- /dev/null +++ b/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 . +# +# 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 . +# +############################################################################## diff --git a/web_ir_actions_act_window_message/__openerp__.py b/web_ir_actions_act_window_message/__openerp__.py new file mode 100644 index 00000000..98f67900 --- /dev/null +++ b/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 . +# +# 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 . +# +############################################################################## +{ + "name": "Client side message boxes", + "version": "1.0", + "author": "Therp BV", + "license": "AGPL-3", + "category": "Hidden/Dependency", + "summary": "Show a warning 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': [], + }, +} diff --git a/web_ir_actions_act_window_message/static/description/icon.png b/web_ir_actions_act_window_message/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..98965872769fff2e0a8aee1203260fcb8820eee6 GIT binary patch literal 2034 zcmVe zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00&x0L_t(|+U=WNOjB7Nz<;;B zEtI0TfK)(b(L`vKEGk6|8kI!N#P~7~#+eLHhKGI7#E;C&JZ!R08;QO-iI0LWeniDY zvl_q=i7^A3!9|n`5eOeCTd*y(x3~9e9}pPlL)3AVspps6^!D`RHu>e8^Z%d!X+azxH7w zk>KRXlLUi7%FD~CtE*$hiWS)Hb{ZQSaXOtWUAmNph6eij`Y0?cXd85tSj&Ye5-^zty@{PY}uj`7z%~(csw{94nm<2>FMd%?e_N*D9bXX zrKJ=U6p)vfM@dNuH*b=enaT9@G`+pO?A*DN^z?MPySv%8Z5w{SpUKHd z^78VCMx#iQL}OzkE|-hy>S~6EhtYMN#kPH1zI-{7Bw<+=d3kvYjzkGyXlUr~d3kx? z|K5E65Oj2O@bu|ZDk>`Q`Fwx+U=xi-i9{kBO9s$1jd(ncrfI^=TcRimx~|U%bT}Mu-1iB7jbRw5sw&n%5k!PQAy5bu2!V@J zU_2h@+O=yaih^ZXoH=s_VD6m2vaGp#(=@RxYp(70?q|7v{rX({Z#@Sf7z{EnFz{OY z?CaRr7=wd@pIo54P_`Y7MhS<*JbCg2kHTN|C7o$TJdn-?!$5DW&XtE;2FzMiV8 zDhdk=xqbUKUayx(B!bK3VtRTS!!Q^g9_HAwV*pG{OmOw;Rf>v=n4FwsU|@jS+FCAO zzD#LpDHRnJOifME)z!tzmoI5;ZDsrR?MzNiVwxr{my1v+#LAT`-&isJq$AL>EQ*VZ zX=`gEnM{(ClY^?N)YR0VC<;EGZ?2-eWy=;aGc%c(n4qGfV(wg_qN0L$JkF|Bt605y z_1v@Vb~}6b?xnZ4mv!sb;dDB2I-RJhipS#tAT2G8%F0ScMn>4NV+U@x8;{3BAP}Im zw3N-8H-A!j3ksBFnWCa1{C+=s_Uxgcpny%AHZeFjNLg7Ki9~{>OP9{cb~>GG*sy`o z(NWf{SwnGgF@ZpU{QP{}Zue^f%gV}VX=&lWfdh<>k5gV=K6g$Mi^TvaEG%SjaFAWQ zb`cB)$<58hZnslgTZ^J7jE#+b^6lsUwWQzL+RDht2>bT!BRe}grGm#tDe2eL)QB`j zAOs45Lg42hP?YrFF@5=ENk0~gkxV9qnYTny6f{knFX_A8Zp42?-X6=cNG6l>Q}}Iv z&Lx=lWm%R8A|eV4fq!n^xEHoelV@#h^#Ak|*gl-=bf=T*ufD>Sm6h58|0 z0M#%^7zVSa8J4DzwRJ0h*|m%Kvu7YlOx(DEJ~f3T%OFWunug?XfMsFnI=1xm*Ovgp zz(|p_>CI~(kkm9(O`98mW->|E?%njCJ`JWx{?}ilIUKC1uP4&ki5?D<`^6W8Zrvhn z`Er(Q-poLKJ?hvP(yTJ{FsAk4ES3XV+1~U`a+s>I-ydXS3t;(IOG}GwGDY^LAB+C}ep*^uY%;*b zix>YL4u@O!@86%Fk&z+F`wI{Xh2-}3_J18Ya^ye4hCm. +// +// 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 . +// +//############################################################################ + +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(); + }, + }); +} diff --git a/web_ir_actions_act_window_message/static/src/xml/web_ir_actions_act_window_message.xml b/web_ir_actions_act_window_message/static/src/xml/web_ir_actions_act_window_message.xml new file mode 100644 index 00000000..5f074229 --- /dev/null +++ b/web_ir_actions_act_window_message/static/src/xml/web_ir_actions_act_window_message.xml @@ -0,0 +1,5 @@ + +

+
+
+ diff --git a/web_ir_actions_act_window_message/views/templates.xml b/web_ir_actions_act_window_message/views/templates.xml new file mode 100644 index 00000000..9ba42b0b --- /dev/null +++ b/web_ir_actions_act_window_message/views/templates.xml @@ -0,0 +1,10 @@ + + + + + + From 0cdadecac42f3fdc772a4eed9a2b12b6713e0fee Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Wed, 18 Mar 2015 10:26:00 +0100 Subject: [PATCH 24/49] [IMP] better readme, manifest --- web_ir_actions_act_window_message/README.rst | 6 ++---- web_ir_actions_act_window_message/__openerp__.py | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/web_ir_actions_act_window_message/README.rst b/web_ir_actions_act_window_message/README.rst index 58cf35af..c6894712 100644 --- a/web_ir_actions_act_window_message/README.rst +++ b/web_ir_actions_act_window_message/README.rst @@ -12,14 +12,12 @@ Depend on this module and return { 'type': 'ir.actions.act_window.message', - 'title': 'My title', - 'message': 'My message' + 'title': _('My title'), + 'message': _('My message'), } You are responsible for translating the messages. -* https://www.odoo.com/forum/help-1 - Known issues / Roadmap ====================== diff --git a/web_ir_actions_act_window_message/__openerp__.py b/web_ir_actions_act_window_message/__openerp__.py index 98f67900..7cd5baae 100644 --- a/web_ir_actions_act_window_message/__openerp__.py +++ b/web_ir_actions_act_window_message/__openerp__.py @@ -24,7 +24,7 @@ "author": "Therp BV", "license": "AGPL-3", "category": "Hidden/Dependency", - "summary": "Show a warning to users", + "summary": "Show a message box to users", "depends": [ 'web', ], From 65e51ac52cbb4e1196a79a1eca4e8c34599e321e Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Wed, 18 Mar 2015 17:10:29 +0100 Subject: [PATCH 25/49] [IMP] better modularity --- .../src/js/web_widget_x2many_2d_matrix.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js index 12a56c8c..d4828b47 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js +++ b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js @@ -110,12 +110,7 @@ openerp.web_widget_x2many_2d_matrix = function(instance) // setup data structure _.each(rows, function(row) { - var x = self.get_field_value(row, self.field_x_axis), - y = self.get_field_value(row, self.field_y_axis); - self.by_x_axis[x] = self.by_x_axis[x] || {}; - self.by_y_axis[y] = self.by_y_axis[y] || {}; - self.by_x_axis[x][y] = row; - self.by_y_axis[y][x] = row; + self.add_xy_row(row); _.each(read_many2one, function(rows, field) { if(!_.isArray(row[field])) @@ -154,6 +149,17 @@ openerp.web_widget_x2many_2d_matrix = function(instance) }); }, + // 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() { From ed234d5478c34100613694b5343321aea11f5335 Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Tue, 24 Mar 2015 08:34:51 +0100 Subject: [PATCH 26/49] [ADD] icon and README --- web_export_view/AUTHORS.txt | 7 --- web_export_view/README.rst | 50 ++++++++++++++++++++ web_export_view/__openerp__.py | 20 -------- web_export_view/static/description/icon.png | Bin 0 -> 3550 bytes 4 files changed, 50 insertions(+), 27 deletions(-) delete mode 100644 web_export_view/AUTHORS.txt create mode 100644 web_export_view/README.rst create mode 100644 web_export_view/static/description/icon.png diff --git a/web_export_view/AUTHORS.txt b/web_export_view/AUTHORS.txt deleted file mode 100644 index 76bbca72..00000000 --- a/web_export_view/AUTHORS.txt +++ /dev/null @@ -1,7 +0,0 @@ -Authors -======= - -Simone Orsi [simahawk] -Lorenzo Battistini -Stefan Rijnhart -Leonardo Pistone diff --git a/web_export_view/README.rst b/web_export_view/README.rst new file mode 100644 index 00000000..ab9b4f3c --- /dev/null +++ b/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 + * Lorenzo Battistini + * Stefan Rijnhart + * Leonardo Pistone + +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. diff --git a/web_export_view/__openerp__.py b/web_export_view/__openerp__.py index 8f5738b5..b08c09a6 100644 --- a/web_export_view/__openerp__.py +++ b/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 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', diff --git a/web_export_view/static/description/icon.png b/web_export_view/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1b1b0d1e36eff948e53360e84145f3eff07e2f0e GIT binary patch literal 3550 zcmV<44I%Q0P)`gZBePnM}Td@O1R5oP^nas?4uYWMmkWAitlguQu+~0@$ zN#^C;%gjB$d+xdCo_j~40N|VJC;ao!|6d3EGSDBWOq654pJdV0`fxBbE}!~F%_~I* z{Dgy{rq6m~aJDbtuLLdxE&@6skh=uvInU3|pEXl-H=vg<;O_$rNtDxtit~&BzJR|I z8a;dg|LMR`zz>`wRGH%h=y{W$oy$&`r;8JFayMWYP@OR00{KJ$U%>AK%F!wJ1^mN+ zF~DU)H91ZIU*HnL!9O-uv;*)0#R*63ibN?AYRF*%H1)g_ODrc))cC5d`uCk}u$&222A61CB&dMAsz6R$#u(fnX#`Yalmy-B=$|qXF5tBzvv_2Z1ku zkHf*xfn)?QgkB2<22clV4hKWyd;z~8Kmp@mI2bAu1So7wP(>fuM_kv4L>qGU{W}yD zr{jdU+h{?66mV(33t4{ELUPq)u6=V8i`Okjk&pY7m4X1NteIs6kJFvA@8799nv(Za zS*W$3Q6dOX*l-B~6gCt=fC7ggfFOWCL9c8?7uZLAtby7uKDV{SV_?v=v#2eUr^TSl0_LUQ!Yg(KEH4||;oN0Ma zx}mdV!VSzCJYEnW(~u+yRk62I?$Fg1N4ct~w%f5LfP^fy-kJy>KsbQ{1q?$FKv)0) zVF3h$1rQJxK%f92;s7Ziu4&ZABDQ2Bu_&6ZHy?7qp~zukTABhux=u76Z?y#w1V{mw zRSsgsj2aBXUQ(DtQIkH~zvA_@zOP0pUcv%o)M1jOq)JT{P4@>n(g(;X0_cX0t{X>x z8aldRpzB9}f}lzU1ja~D(U zE~d;=OsT6FDG?9AOzGA>|CZ9jT^8c@1cAZdbM_GVKtbsMNmT+3M!0U+WJ|g2yFaEO9?Mu~9f?NRv3D1Sjf4QhFgUeSSDZ=m0m6G~k6WyCptHA( zQg?C36Tn^M;;s#=Suvx=(g_;WX8_x_|J_!*{koq?-|lBx%8k44hK!DuEg!r^)ooYW zUIuPi_z3-bp50_A8Rxv3iMSl;xfw?{4DOsbhiivS%nl!5?Y52lWYUe4drC~@R?S?@ zc{SE=TGKV=j=aWFZpYqT9F81G>&R-p+>&t@xooZ&WMrv%oJ~p$l=KlmZ&PkT+9QD_ zZZFGT{FS9#nY+Z6vSdl7y8p$Naub%{m{H~D?b0?AjsEhLb(S)cB=MuMv(4vG;MOtU zwQOtWzE9b6Xur^Awh*95aq!dUAGVa6dGR>YnFZ=%Qo=^CD?SF(8vylJ*pC8!E z(|`GcrQGG`4rvxdSvqB|WxaX7{aIQzX9NK<1XWR49{RPVTyWaF6J8&R)G@Gkf73c2 z?WyIp58rLq&e9Eom=?EHqFSuQZR400v)ztmiO10mz4bcEbf<0K{V}io=Wkqi)_E;E zjYxQ%Zt5E90hlx5YRllp;&l%+3$tb#{=NfQezpB8Vv+@WR7GXyJ)6_K>Qb|p01icE z$+IijIPVvxa@P)-#624yC9Z4C95l{i?yn{E{_D8Ybi67Rzs7DP&3F4u9K&PJ0{FAmD#a( z7tj6ePeOCKL;!$ycm9j0W}dt_xoRZC`&OCC{PcxiW|Ilcd9>deN`hHy7V-FXOIsAV z!9U$}m#lXG=REc1CcGVVRa;!wI2<`*&j~aPJWe-?+hnefI-69Yqu=j_f9Y zgv1-$-)oa|wDkEk9j1JM&_7ydhXCLg)xnB?< z-M)aXr6ga~yOMZ{bp*1M0ES_3{qU(N)tNqUlx32sK#mZ=>+&#X#MLR+TQKU{q^E5K za)~W~=H>A9#7%mQDiyUzoKk0Xlojm^tW*R@eXW`0LxW_ub~+LPC~h+ok1r zf}B!2rbUw5ln&o+fgnxSSupBaQ<)dueTC}&gIoOjvdN@9Ut%gVYfTNRtZ=`L9Kw62FX%WcAPA5eVp^PAEarZI z_dfm?0FV87JyDAz-V?uZDGgdoXfGECaC*h5j2ST0RA&9#FVPT-0^oKy`RAt}S+=|4 z>P7AT{e5a4rl4o^6GgQc3r2m%QtsBL?>oMfktB(QYwzXxxhqZUjQ#pBW$vqflG5P`i{n?JB&+pvukY&_Q zRa73FQ6sdNZ3KwMV=T1c`QN_2<$2zrsBC`!4O>zN(uJcNLl6Dw zDbqQ=X5Dhj|EoxKaQ{^cg(kCw0MU4i#THk;0KEF|cPvl#?%ek&?)+nYovr9LIeXYt;?)#73ZhH^A)LqQOTb{O*b0{jejlVvl zon;sXny%X{T8lS|YPyy}JJzKQ`y!H>&e0#7db6cmT|+(Fw!fFs%^u4`Pg>>@0L&OP zmL<=w$k>fxm!JDh9{kp#HnpKDD!U)pnl%<6Z3Iwdh3g-`gA!LUU5d*n^OR8LDWTNm zrNrgM>vZFCIQeK#ZOYfWD6+zD-gtqj7gSrmhnq%TLvZ7x8R@Ke9!@c7BY-4H>^ppb zeTNSaPV=>GiY)U$=t)i~ub^vb1>HNHj3O(@l5{*JN|q!fN#^^*r*hAx$HaDVdlMkj z*!AUZu35dP(Mp2j89D|AiGP40u8qq_0yMKYN6k*+cL~Hb!PyZ9$Y)4-cpa^{WG@B$ z;UBNkXMVLU*+?wP3v*Y}ug6)<9LZicU6$74;WcAtGh@(LL4ZudNZb=>cg4{1J%RD0 zH;1&A0BtxcA+FdKK7fEAfPf%?fFOW?Ab@}%fIvY(7jb|Tpy|5hv9)7}#2S*W&kdkH z8cEw`m2T+7wN@XN6<@cJ3WoQsV%gOBwvLG#kn~<7hobV~vW;oox@f}84iY?5CkYpEC9~*1^gl_I7Ms$0;J~{ zie&M+RkKtJzsG@k;LC6@v>U(|@DmP(P=VdR$wIfb@MSm{dOIIJNH}=(+uP)DFw~W! z0imw~V}Kf96Hq7go&Qi1Y%qWid;$Ll;b3UPu|N6(eizUW=nD)0z5$#Mh|`z(vb1eY zC11c_njpk^iP9gaEP(!69}b4b<(&m+#r$y)c-a^5zkF;iNf4s~xFAu^0nP^ch;f!@ z7N8XtqdPDd7?kiedILR$1t<^#m=L2kFdVo9=mngXwklxro Date: Thu, 26 Mar 2015 12:20:04 +0100 Subject: [PATCH 27/49] Handle the thousands separator, even multiple ones. --- web_export_view/static/src/js/web_export_view.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/web_export_view/static/src/js/web_export_view.js b/web_export_view/static/src/js/web_export_view.js index e5fe0123..00cb047e 100644 --- a/web_export_view/static/src/js/web_export_view.js +++ b/web_export_view/static/src/js/web_export_view.js @@ -85,7 +85,12 @@ openerp.web_export_view = function (instance) { } } else if (cell.classList.contains("oe_list_field_integer")) { - tmp2 = text.replace(instance.web._t.database.parameters.thousands_sep, ""); + 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 { From fbe2ffa15e217dbd61b7b6c97157879a53270c4b Mon Sep 17 00:00:00 2001 From: Alexandre Fayolle Date: Fri, 27 Mar 2015 16:21:16 +0100 Subject: [PATCH 28/49] don't use travis container-based infrastructure --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index cbaeef96..7dd62db0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,4 @@ +sudo: required language: python python: From 7e67aaa6279e22a44c195a5514c34f6d163ab891 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 10 Apr 2015 22:50:06 +0200 Subject: [PATCH 29/49] [FIX] web_tree_many2one_clickable: Don't complain if there is no parameter defined --- .../static/src/js/web_tree_many2one_clickable.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js b/web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js index e05f226a..fef50647 100644 --- a/web_tree_many2one_clickable/static/src/js/web_tree_many2one_clickable.js +++ b/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; From 8ce3afdc3d8c3c30601cccae0abb7e0773b3bd0e Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Thu, 16 Apr 2015 09:59:47 +0200 Subject: [PATCH 30/49] [FIX] support rerendering after virtual ids change this is necessary for correct operation after creating new records --- .../static/src/js/web_widget_x2many_2d_matrix.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js index d4828b47..e1021457 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js +++ b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js @@ -143,6 +143,13 @@ openerp.web_widget_x2many_2d_matrix = function(instance) }); })); }) + if(self.is_started && !self.no_rerender) + { + self.renderElement(); + self.$el.find('.edit').on( + 'change', self.proxy(self.xy_value_change)); + self.effective_readonly_change(); + } return jQuery.when.apply(jQuery, deferrends); }); }); From 5f1ebff3c8cfc8301a960529b267f055cfabbe69 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Thu, 16 Apr 2015 10:15:39 +0200 Subject: [PATCH 31/49] [FIX] also reinitialize totals --- .../static/src/js/web_widget_x2many_2d_matrix.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js index e1021457..5d4ce785 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js +++ b/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js @@ -146,6 +146,8 @@ openerp.web_widget_x2many_2d_matrix = function(instance) 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(); From 03951e6c580e1a27cb99ffab2971be9dadb3315e Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Wed, 22 Apr 2015 09:54:09 +0200 Subject: [PATCH 32/49] [ADD] Add web widget auto color module --- web_widget_auto_color/README.rst | 54 ++++++++++++++++ web_widget_auto_color/__init__.py | 1 + web_widget_auto_color/__openerp__.py | 41 +++++++++++++ .../static/src/js/view_list.js | 61 +++++++++++++++++++ .../static/src/xml/templates.xml | 8 +++ .../views/web_widget_auto_color.xml | 10 +++ 6 files changed, 175 insertions(+) create mode 100644 web_widget_auto_color/README.rst create mode 100644 web_widget_auto_color/__init__.py create mode 100644 web_widget_auto_color/__openerp__.py create mode 100644 web_widget_auto_color/static/src/js/view_list.js create mode 100644 web_widget_auto_color/static/src/xml/templates.xml create mode 100644 web_widget_auto_color/views/web_widget_auto_color.xml diff --git a/web_widget_auto_color/README.rst b/web_widget_auto_color/README.rst new file mode 100644 index 00000000..d82d4e64 --- /dev/null +++ b/web_widget_auto_color/README.rst @@ -0,0 +1,54 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :alt: License + +Web Widget Auto Color +===================== + +This module was written to offer a new autocolor widget which can be used on +field in trees view. Using this widget 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 widget='autocolor' attribute in the field tag:: + + ... + + + ... + + + ... + + + ... + +Credits +======= + +Contributors +------------ + +* Stéphane Bidoul (ACSONE) +* Adrien Peiffer (ACSONE) + +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. \ No newline at end of file diff --git a/web_widget_auto_color/__init__.py b/web_widget_auto_color/__init__.py new file mode 100644 index 00000000..40a96afc --- /dev/null +++ b/web_widget_auto_color/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/web_widget_auto_color/__openerp__.py b/web_widget_auto_color/__openerp__.py new file mode 100644 index 00000000..88dcf644 --- /dev/null +++ b/web_widget_auto_color/__openerp__.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# This file is part of web_widget_auto_color, +# an Odoo module. +# +# Copyright (c) 2015 ACSONE SA/NV () +# +# web_widget_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_widget_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_widget_auto_color. +# If not, see . +# +############################################################################## +{ + 'name': "Web Widget Auto Color", + 'author': "ACSONE SA/NV", + 'website': "http://acsone.eu", + 'category': 'web', + 'version': '0.1', + 'license': 'AGPL-3', + 'depends': [ + 'web', + ], + 'data': [ + 'views/web_widget_auto_color.xml', + ], + 'qweb': [ + 'static/src/xml/templates.xml', + ], +} diff --git a/web_widget_auto_color/static/src/js/view_list.js b/web_widget_auto_color/static/src/js/view_list.js new file mode 100644 index 00000000..303c474f --- /dev/null +++ b/web_widget_auto_color/static/src/js/view_list.js @@ -0,0 +1,61 @@ +openerp.web_widget_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_colors: function(){ + return ['#86BB74', '#DBC437', '#76A6F3', '#991592', '#F7527C', '#51D419', '#CFFB03', '#CE50BE', '#AFB32A', '#7DBD55', '#CA1BF7', '#98CDBA', '#63A99F', '#906D3E', '#73E553', '#73DC34', '#944D53', '#95FAFD', '#7C5D0E', '#DED3E4', '#4C8820', '#18A6EB', '#3DD55B', '#C19A5C', '#16F40A', '#A9E927', '#F2AFBA', '#F26CC0', '#247B5F', '#A20AF4', '#6511DC', '#086393', '#8D85F4', '#2D44AB', '#EB116B', '#8ED0DE', '#0B9C2F', '#723779', '#5A32DD', '#CA4F3E', '#A3D1FB', '#51179B', '#D20520', '#067E0E', '#199107', '#8D6623', '#FC7843', '#35FFBB', '#DDD15F', '#9F332E', '#3B2D63', '#27C2A2', '#9C02C1', '#823C84', '#0CB3A0', '#3D5E6B', '#F81915', '#AAC985', '#16FE81', '#660E42', '#68B9FB', '#D06595', '#FA4F48', '#CD675D', '#0AC360', '#7BAF44', '#FC0A9B', '#65F070', '#C3E3C7', '#043359', '#80A230', '#422F61', '#04EBE8', '#01A546', '#E52390', '#5AB35D', '#AFBB14', '#B3E029', '#23BD4B', '#A2B89B', '#80CBA5', '#6439DB', '#26F19A', '#CCB7BA', '#62351C', '#FA7E3B', '#62B1B7', '#54C9C1', '#391A14', '#F2875D', '#92D5CC', '#7D9490', '#40DF9D', '#D4B5D6', '#A7B08F', '#FDC051', '#B3F9AF', '#C59A72', '#C32F0A', '#DF1EE6', '#9F4A67', '#FBA9A4', '#F58B20', '#44E991', '#FEC3DA', '#1D4316', '#0D66E4', '#7FD5AA', '#5FFC6C', '#BD5328', '#3C478F', '#02F9C3', '#FB4950', '#E9321F', '#9E0DAD', '#FBC282', '#BD39FD', '#614934', '#11A926', '#772095', '#8D5135', '#F954E3', '#584275', '#FAE173', '#13C2C1', '#083DDF', '#5E95EE', '#835481', '#DBD066', '#659B11', '#54E4A7', '#47DA71', '#0884FA', '#97DC79', '#C029CE', '#B46420', '#2064F6', '#0DF54B', '#EE3F8A', '#E9BCEB', '#E50E16', '#A8B614', '#32B062', '#3716FE', '#8E4E03', '#B91C1F', '#8D08DA', '#3A6AD5', '#96B145', '#01DB47', '#94DBC9', '#98E120', '#763E84', '#7A97C9', '#22D5C6', '#9B9854', '#C4D269', '#0D10D9', '#4F3423', '#11EEBC', '#C4AD8A', '#224611', '#EDC679', '#B85FC8', '#D306A0', '#465C7F', '#AEBBDB', '#133DC5', '#BDBD23', '#2AD9E8', '#ACE530', '#3E2BD0', '#546DB7', '#591448', '#B121C2', '#E69709', '#DC0B33', '#2F175E', '#43F463', '#203E5E', '#D90337', '#D11569', '#C5505F', '#637F5A', '#C45D69', '#037535', '#4DFEA7', '#454B59', '#A08510', '#A8C962', '#B83346', '#BE57BF', '#40D074', '#335EF3', '#22B7E7', '#71000D', '#2B43DE', '#E02883', '#49296D', '#61052D', '#FC666E', '#C5DCAA', '#D1AE8A', '#CB3150', '#7B3162', '#DF7D2A', '#234263', '#0098E8', '#AAA3DF', '#0BF28E', '#9F7758', '#01C328', '#138A3B', '#128168', '#E77CD6', '#B71FEB', '#6F86FE', '#195E2B', '#D86AE2', '#5B1009', '#4C6B3E', '#DF1E6C', '#B0F798', '#7DC767', '#AC4319', '#117BDB', '#90C1B5', '#0E97A3', '#03DCAA', '#31143E', '#4AC1DB', '#A51DBF', '#324B05', '#4DB6CD', '#67AE4D', '#47F061', '#3D6CB6', '#32B9CF', '#1F662E', '#C6EE95', '#767F36', '#72003C', '#92E621', '#0B5F3D', '#69968E', '#8F0FC5', '#01AFF1', '#FB3152', '#C077E7', '#B710B2', '#4733AA', '#523327', '#89AE5C', '#943DCD', '#5E7F14', '#6E27A7', '#5B8879', '#E40CA7', '#232849', '#3B800F', '#5B1FB8', '#FCC8C6', '#7C9E16', '#293538', '#E1D18F', '#665E7B', '#A29B81', '#8B168E', '#A40D99', '#357658', '#83A747', '#995EB1', '#ED4AE8', '#2D4D37', '#CB1C68', '#81AE49', '#F4EF4F', '#E0F299', '#103C0B', '#37D6F7', '#2D216B', '#76E351', '#FACA69', '#E491FC', '#36AD3F', '#9E23D0', '#161031', '#D00114', '#13FE7D', '#0F5F8A', '#747BE6', '#F5E5E2', '#243F0C', '#DF1A7E', '#0A2F15', '#FC8282', '#FD875A', '#B0C957', '#CC0637', '#34CF7D', '#0B62E2', '#07B9A2', '#F89A88', '#57D090', '#18F318', '#3656CC', '#0E2AF6', '#12134E', '#420106', '#81D012', '#4B2966', '#6847D4', '#CE9AB6', '#FDC807', '#79D5A8', '#1FB3BC', '#CD3B23', '#6E204C', '#D73759', '#C477C3', '#17FA10', '#9D82E7', '#64C07B', '#AFFB18', '#E8C7FF', '#BA4D52', '#60B8C5', '#5618B5', '#094D35', '#E8D90E', '#29ED6F', '#A93D16', '#62705B', '#BEA7A0', '#0748D6', '#7BE8AA', '#96396B', '#8FD44C', '#7B7EEB', '#086361', '#7E52B3', '#8F18AB', '#12DECC', '#D48574', '#BE9C7E', '#EB3952', '#D72F47', '#3E446F', '#99363C', '#20CE69', '#06A66F', '#1BD201', '#30DF94', '#3218F5', '#7D01A3', '#B41A09', '#682D54', '#577C23', '#7C74E9', '#4A0086', '#07CE39', '#F575F9', '#32C8A8', '#E10A19', '#48E3D4', '#53165B', '#DA6FA6', '#87D417', '#A08CEA', '#8DDF31', '#194853', '#B00139', '#02FC0E', '#FE024B', '#5D4A94', '#72DA2B', '#65AA22', '#91C01D', '#3EDDDE', '#77DAD4', '#5E165C', '#937A01', '#ADA254', '#A83752', '#9A691C', '#713B91', '#020145', '#1D2B80', '#65C3AD', '#883FB9', '#79A497', '#75266F', '#35C1A3', '#4EEC2E', '#59410E', '#4425D3', '#EB783B', '#A31CA7', '#00F7ED', '#B03FDA', '#A7B9FC', '#751E9A', '#F01A02', '#E29082', '#B2BC3F', '#031CEF', '#A0FC80', '#035310', '#A946EF', '#65C6FA', '#B6FD2C', '#306D04', '#1EED05', '#0300F1', '#E6C115', '#8C15F3', '#DE31A7', '#090CB7', '#7D5F97', '#F50908', '#A1624C', '#0E47BF', '#10B0C9', '#A62B8F', '#F87E37', '#B7CD91', '#2EFC46', '#60EAD2', '#8DCF76', '#723B95', '#645B1E', '#01A7E4', '#0D0775', '#A5ED71', '#996F39', '#3B5DFE', '#522EE0', '#ED8F68', '#A49545', '#304073', '#4E6E75', '#1ED971', '#1168FB', '#FFC0D6', '#4E2F01', '#84EF42', '#BDAB4F', '#620C26', '#33C5CC', '#D321FF', '#842568', '#F1221C', '#7C4109', '#5C0361', '#1C7118', '#D722A4', '#810E15', '#F0E6AB', '#D5A78A', '#8241DE', '#C69C28', '#391451', '#B20FEF', '#669E60', '#4D1764', '#BC0A66', '#636B03', '#206B5C', '#4A7D8E', '#45AFFA', '#EAAC4C', '#F5652F', '#E6E19E', '#9B97D6', '#EC577D', '#29229F', '#BC5AC5', '#BB5566', '#5F5F77', '#B286E6', '#BEB23C', '#BF0610', '#82240E', '#225874', '#CADCB2', '#6EC498', '#97F18D', '#6DDE79', '#E5B9CB', '#6A5894', '#A376CD', '#5341C9', '#3BAEBB', '#8A61FD', '#708D49', '#578982', '#6204A5', '#F92E34', '#B54179', '#EA6367'] + }, + + getIntValue: function(str){ + var sum = 0 + for (i=0; i + + + + this.attr('t-att-style', "column.widget =='autocolor' and view.auto_color_cell_style(record, column)") + + + \ No newline at end of file diff --git a/web_widget_auto_color/views/web_widget_auto_color.xml b/web_widget_auto_color/views/web_widget_auto_color.xml new file mode 100644 index 00000000..484f0a39 --- /dev/null +++ b/web_widget_auto_color/views/web_widget_auto_color.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file From 7e6d952b31adea781e6442a3c82940d442449cc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matja=C5=BE=20Mozeti=C4=8D?= Date: Fri, 24 Apr 2015 08:09:56 +0200 Subject: [PATCH 33/49] Slovene translations and translation template --- help_online/i18n/help_online.pot | 166 ++++++++++++++++++++++++++++ help_online/i18n/sl.po | 179 +++++++++++++++++++++++++++++++ web_export_view/i18n/sl.po | 47 ++++++++ 3 files changed, 392 insertions(+) create mode 100644 help_online/i18n/help_online.pot create mode 100644 help_online/i18n/sl.po create mode 100644 web_export_view/i18n/sl.po diff --git a/help_online/i18n/help_online.pot b/help_online/i18n/help_online.pot new file mode 100644 index 00000000..eb01e7f0 --- /dev/null +++ b/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 "" + diff --git a/help_online/i18n/sl.po b/help_online/i18n/sl.po new file mode 100644 index 00000000..4bde976b --- /dev/null +++ b/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č , 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č \n" +"Language-Team: Slovenian \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" + + diff --git a/web_export_view/i18n/sl.po b/web_export_view/i18n/sl.po new file mode 100644 index 00000000..832cf5b4 --- /dev/null +++ b/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č , 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č \n" +"Language-Team: Slovenian \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" + From bd8abd2bb83d09514df7b09cca627ea126606a1c Mon Sep 17 00:00:00 2001 From: Sylvain Calador Date: Thu, 23 Apr 2015 17:43:35 +0200 Subject: [PATCH 34/49] [IMP] Add 'web_completion_search' module --- web_completion_search/__init__.py | 20 ++++++++++ web_completion_search/__openerp__.py | 36 ++++++++++++++++++ .../static/src/js/view_form.js | 38 +++++++++++++++++++ .../views/web_completion_search.xml | 10 +++++ 4 files changed, 104 insertions(+) create mode 100644 web_completion_search/__init__.py create mode 100644 web_completion_search/__openerp__.py create mode 100644 web_completion_search/static/src/js/view_form.js create mode 100644 web_completion_search/views/web_completion_search.xml diff --git a/web_completion_search/__init__.py b/web_completion_search/__init__.py new file mode 100644 index 00000000..56bc1ffd --- /dev/null +++ b/web_completion_search/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2015-TODAY Akretion (). +# +# 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 . +# +############################################################################## diff --git a/web_completion_search/__openerp__.py b/web_completion_search/__openerp__.py new file mode 100644 index 00000000..5c14b2b9 --- /dev/null +++ b/web_completion_search/__openerp__.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2015-TODAY Akretion (). +# +# 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 . +# +############################################################################## + +{ + 'name': 'Web completion_search', + 'version': '0.1', + 'author': 'Akretion, Odoo Community Association (OCA)', + 'depends': [ + 'web', + ], + 'demo': [], + 'website': 'https://www.akretion.com', + 'data': [ + 'views/web_completion_search.xml', + ], + 'installable': True, + 'auto_install': False, +} diff --git a/web_completion_search/static/src/js/view_form.js b/web_completion_search/static/src/js/view_form.js new file mode 100644 index 00000000..43df8395 --- /dev/null +++ b/web_completion_search/static/src/js/view_form.js @@ -0,0 +1,38 @@ +openerp.web_completion_search = function(instance, local) { + var _t = instance.web._t; + + + instance.web.form.CompletionFieldMixin.init = function() { + if (this.field.type == 'many2many') { + this.limit = 0; + } else { + this.limit = 7; + } + this.orderer = new instance.web.DropMisordered(); + }; + + instance.web.form.CompletionFieldMixin._search_create_popup = function(view, ids, context) { + var self = this; + var pop = new instance.web.form.SelectCreatePopup(this); + 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', + }, + self.build_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 + + + + + From 4cab02c5cdd41661c4e081b759976749bd11eac7 Mon Sep 17 00:00:00 2001 From: Sylvain Calador Date: Thu, 23 Apr 2015 18:51:10 +0200 Subject: [PATCH 35/49] [IMP] Makes 'many2many_tags' search box shows only unselected items --- web_completion_search/static/src/js/view_form.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/web_completion_search/static/src/js/view_form.js b/web_completion_search/static/src/js/view_form.js index 43df8395..d7340a69 100644 --- a/web_completion_search/static/src/js/view_form.js +++ b/web_completion_search/static/src/js/view_form.js @@ -14,6 +14,15 @@ openerp.web_completion_search = function(instance, local) { 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, { @@ -22,7 +31,7 @@ openerp.web_completion_search = function(instance, local) { initial_view: view, disable_multiple_selection: this.field.type != 'many2many', }, - self.build_domain(), + domain, new instance.web.CompoundContext(self.build_context(), context || {}) ); pop.on("elements_selected", self, function(element_ids) { From a57e4ff93bc76d4b6966de8ccd5d544465a3fc31 Mon Sep 17 00:00:00 2001 From: Sylvain Calador Date: Wed, 29 Apr 2015 16:50:56 +0200 Subject: [PATCH 36/49] [IMP] Avoid to hide selection list if there are less than 7 options --- web_completion_search/static/src/js/view_form.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/web_completion_search/static/src/js/view_form.js b/web_completion_search/static/src/js/view_form.js index d7340a69..a84b91fd 100644 --- a/web_completion_search/static/src/js/view_form.js +++ b/web_completion_search/static/src/js/view_form.js @@ -1,16 +1,6 @@ openerp.web_completion_search = function(instance, local) { var _t = instance.web._t; - - instance.web.form.CompletionFieldMixin.init = function() { - if (this.field.type == 'many2many') { - this.limit = 0; - } else { - this.limit = 7; - } - this.orderer = new instance.web.DropMisordered(); - }; - instance.web.form.CompletionFieldMixin._search_create_popup = function(view, ids, context) { var self = this; var pop = new instance.web.form.SelectCreatePopup(this); From e45a2980123131d8674bf56592184551880fedae Mon Sep 17 00:00:00 2001 From: Sylvain Calador Date: Wed, 29 Apr 2015 17:19:27 +0200 Subject: [PATCH 37/49] [REF] Rename the module with a more explict name --- web_completion_search/views/web_completion_search.xml | 10 ---------- .../__init__.py | 0 .../__openerp__.py | 4 ++-- .../static/src/js/view_form.js | 3 ++- .../views/web_m2m_tags_multiple_selection.xml | 10 ++++++++++ 5 files changed, 14 insertions(+), 13 deletions(-) delete mode 100644 web_completion_search/views/web_completion_search.xml rename {web_completion_search => web_m2m_tags_multiple_selection}/__init__.py (100%) rename {web_completion_search => web_m2m_tags_multiple_selection}/__openerp__.py (92%) rename {web_completion_search => web_m2m_tags_multiple_selection}/static/src/js/view_form.js (95%) create mode 100644 web_m2m_tags_multiple_selection/views/web_m2m_tags_multiple_selection.xml diff --git a/web_completion_search/views/web_completion_search.xml b/web_completion_search/views/web_completion_search.xml deleted file mode 100644 index fcffc34b..00000000 --- a/web_completion_search/views/web_completion_search.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/web_completion_search/__init__.py b/web_m2m_tags_multiple_selection/__init__.py similarity index 100% rename from web_completion_search/__init__.py rename to web_m2m_tags_multiple_selection/__init__.py diff --git a/web_completion_search/__openerp__.py b/web_m2m_tags_multiple_selection/__openerp__.py similarity index 92% rename from web_completion_search/__openerp__.py rename to web_m2m_tags_multiple_selection/__openerp__.py index 5c14b2b9..6c5e3b63 100644 --- a/web_completion_search/__openerp__.py +++ b/web_m2m_tags_multiple_selection/__openerp__.py @@ -20,7 +20,7 @@ ############################################################################## { - 'name': 'Web completion_search', + 'name': 'Web many2many_tags multiple selection', 'version': '0.1', 'author': 'Akretion, Odoo Community Association (OCA)', 'depends': [ @@ -29,7 +29,7 @@ 'demo': [], 'website': 'https://www.akretion.com', 'data': [ - 'views/web_completion_search.xml', + 'views/web_m2m_tags_multiple_selection.xml', ], 'installable': True, 'auto_install': False, diff --git a/web_completion_search/static/src/js/view_form.js b/web_m2m_tags_multiple_selection/static/src/js/view_form.js similarity index 95% rename from web_completion_search/static/src/js/view_form.js rename to web_m2m_tags_multiple_selection/static/src/js/view_form.js index a84b91fd..fcd6b8ab 100644 --- a/web_completion_search/static/src/js/view_form.js +++ b/web_m2m_tags_multiple_selection/static/src/js/view_form.js @@ -1,4 +1,5 @@ -openerp.web_completion_search = function(instance, local) { +openerp.web_m2m_tags_multiple_selection = function(instance, local) { + var _t = instance.web._t; instance.web.form.CompletionFieldMixin._search_create_popup = function(view, ids, context) { diff --git a/web_m2m_tags_multiple_selection/views/web_m2m_tags_multiple_selection.xml b/web_m2m_tags_multiple_selection/views/web_m2m_tags_multiple_selection.xml new file mode 100644 index 00000000..bc2cabf7 --- /dev/null +++ b/web_m2m_tags_multiple_selection/views/web_m2m_tags_multiple_selection.xml @@ -0,0 +1,10 @@ + + + + + + From 83065124827298e2aff8188fc7480d166573433c Mon Sep 17 00:00:00 2001 From: Sylvain Calador Date: Thu, 30 Apr 2015 11:46:36 +0200 Subject: [PATCH 38/49] [REF] Rename the module according to the OCA naming convention --- .../views/web_m2m_tags_multiple_selection.xml | 10 ------ .../README.rst | 33 +++++++++++++++++++ .../__init__.py | 0 .../__openerp__.py | 4 +-- .../static/src/js/view_form.js | 4 +-- ..._widget_many2many_tags_multi_selection.xml | 10 ++++++ 6 files changed, 47 insertions(+), 14 deletions(-) delete mode 100644 web_m2m_tags_multiple_selection/views/web_m2m_tags_multiple_selection.xml create mode 100644 web_widget_many2many_tags_multi_selection/README.rst rename {web_m2m_tags_multiple_selection => web_widget_many2many_tags_multi_selection}/__init__.py (100%) rename {web_m2m_tags_multiple_selection => web_widget_many2many_tags_multi_selection}/__openerp__.py (91%) rename {web_m2m_tags_multiple_selection => web_widget_many2many_tags_multi_selection}/static/src/js/view_form.js (90%) create mode 100644 web_widget_many2many_tags_multi_selection/views/web_widget_many2many_tags_multi_selection.xml diff --git a/web_m2m_tags_multiple_selection/views/web_m2m_tags_multiple_selection.xml b/web_m2m_tags_multiple_selection/views/web_m2m_tags_multiple_selection.xml deleted file mode 100644 index bc2cabf7..00000000 --- a/web_m2m_tags_multiple_selection/views/web_m2m_tags_multiple_selection.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/web_widget_many2many_tags_multi_selection/README.rst b/web_widget_many2many_tags_multi_selection/README.rst new file mode 100644 index 00000000..697d7a40 --- /dev/null +++ b/web_widget_many2many_tags_multi_selection/README.rst @@ -0,0 +1,33 @@ +Allows multiple selection on many2many_tags widget +================================================== + +This module allows the user to select multiple entries through the search box in the case of the "many2many_tags" widget. + +Installation +============ + +It was tested on Odoo 8.0 branch. + +Credits +======= + +Akretion + +Contributors +------------ + +* Sylvain Calador + +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. + diff --git a/web_m2m_tags_multiple_selection/__init__.py b/web_widget_many2many_tags_multi_selection/__init__.py similarity index 100% rename from web_m2m_tags_multiple_selection/__init__.py rename to web_widget_many2many_tags_multi_selection/__init__.py diff --git a/web_m2m_tags_multiple_selection/__openerp__.py b/web_widget_many2many_tags_multi_selection/__openerp__.py similarity index 91% rename from web_m2m_tags_multiple_selection/__openerp__.py rename to web_widget_many2many_tags_multi_selection/__openerp__.py index 6c5e3b63..b07382c3 100644 --- a/web_m2m_tags_multiple_selection/__openerp__.py +++ b/web_widget_many2many_tags_multi_selection/__openerp__.py @@ -20,7 +20,7 @@ ############################################################################## { - 'name': 'Web many2many_tags multiple selection', + 'name': 'web_widget_many2many_tags_multi_selection', 'version': '0.1', 'author': 'Akretion, Odoo Community Association (OCA)', 'depends': [ @@ -29,7 +29,7 @@ 'demo': [], 'website': 'https://www.akretion.com', 'data': [ - 'views/web_m2m_tags_multiple_selection.xml', + 'views/web_widget_many2many_tags_multi_selection.xml', ], 'installable': True, 'auto_install': False, diff --git a/web_m2m_tags_multiple_selection/static/src/js/view_form.js b/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js similarity index 90% rename from web_m2m_tags_multiple_selection/static/src/js/view_form.js rename to web_widget_many2many_tags_multi_selection/static/src/js/view_form.js index fcd6b8ab..1d073fe6 100644 --- a/web_m2m_tags_multiple_selection/static/src/js/view_form.js +++ b/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js @@ -1,4 +1,4 @@ -openerp.web_m2m_tags_multiple_selection = function(instance, local) { +openerp.web_widget_many2many_tags_multi_selection = function(instance, local) { var _t = instance.web._t; @@ -8,7 +8,7 @@ openerp.web_m2m_tags_multiple_selection = function(instance, local) { var domain = self.build_domain(); if (self.field.type == 'many2many') { - var selected_ids =self.get_search_blacklist(); + var selected_ids = self.get_search_blacklist(); if (selected_ids.length > 0) { domain = new instance.web.CompoundDomain(domain, ["!", ["id", "in", selected_ids]]); } diff --git a/web_widget_many2many_tags_multi_selection/views/web_widget_many2many_tags_multi_selection.xml b/web_widget_many2many_tags_multi_selection/views/web_widget_many2many_tags_multi_selection.xml new file mode 100644 index 00000000..0b475748 --- /dev/null +++ b/web_widget_many2many_tags_multi_selection/views/web_widget_many2many_tags_multi_selection.xml @@ -0,0 +1,10 @@ + + + + + + From 56156617f898d7fc3d88d48ef25d2b878fffda44 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 1 May 2015 12:18:16 +0200 Subject: [PATCH 39/49] add web_searchbar_full_width --- web_searchbar_full_width/README.rst | 30 ++++++++++++ web_searchbar_full_width/__init__.py | 20 ++++++++ web_searchbar_full_width/__openerp__.py | 44 ++++++++++++++++++ .../static/description/icon.png | Bin 0 -> 7013 bytes .../static/description/preview.png | Bin 0 -> 51410 bytes .../src/css/web_searchbar_full_width.css | 20 ++++++++ .../src/xml/web_searchbar_full_width.xml | 15 ++++++ web_searchbar_full_width/views/templates.xml | 10 ++++ 8 files changed, 139 insertions(+) create mode 100644 web_searchbar_full_width/README.rst create mode 100644 web_searchbar_full_width/__init__.py create mode 100644 web_searchbar_full_width/__openerp__.py create mode 100644 web_searchbar_full_width/static/description/icon.png create mode 100644 web_searchbar_full_width/static/description/preview.png create mode 100644 web_searchbar_full_width/static/src/css/web_searchbar_full_width.css create mode 100644 web_searchbar_full_width/static/src/xml/web_searchbar_full_width.xml create mode 100644 web_searchbar_full_width/views/templates.xml diff --git a/web_searchbar_full_width/README.rst b/web_searchbar_full_width/README.rst new file mode 100644 index 00000000..80f71584 --- /dev/null +++ b/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 breadcrump 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 + +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. diff --git a/web_searchbar_full_width/__init__.py b/web_searchbar_full_width/__init__.py new file mode 100644 index 00000000..faef9dac --- /dev/null +++ b/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 . +# +# 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 . +# +############################################################################## diff --git a/web_searchbar_full_width/__openerp__.py b/web_searchbar_full_width/__openerp__.py new file mode 100644 index 00000000..390c4e95 --- /dev/null +++ b/web_searchbar_full_width/__openerp__.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2015 Therp BV . +# +# 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 . +# +############################################################################## +{ + "name": "Full width searchbar", + "version": "1.0", + "author": "Therp BV", + "license": "AGPL-3", + "category": "Tools", + "summary": "Show search bar in full screen width", + "depends": [ + ], + "data": [ + 'views/templates.xml', + ], + "qweb": [ + 'static/src/xml/web_searchbar_full_width.xml', + ], + "test": [ + ], + "auto_install": False, + "installable": True, + "application": False, + "external_dependencies": { + 'python': [], + }, +} diff --git a/web_searchbar_full_width/static/description/icon.png b/web_searchbar_full_width/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..80100ac65862982dbecc7bf7442294aaa9ccec1e GIT binary patch literal 7013 zcmZ8mbyQT}_XVY-Q@Tq;dO$iPhpwT70qKUJ!C~kwMU;{d5tNkfmhK!tV1S`RT0rXi zK5PB{`mI@a-mE)w*SqiBv-jEiOq{N^DiJ;%J_ZH`5m-%0AGo^zH}G(P_rBL$H^2qQ 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 E2XtG}KmY&$ literal 0 HcmV?d00001 diff --git a/web_searchbar_full_width/static/description/preview.png b/web_searchbar_full_width/static/description/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..51be22037087a270ff223ad8f386d6d3592a36f4 GIT binary patch literal 51410 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�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 literal 0 HcmV?d00001 diff --git a/web_searchbar_full_width/static/src/css/web_searchbar_full_width.css b/web_searchbar_full_width/static/src/css/web_searchbar_full_width.css new file mode 100644 index 00000000..160ecbf7 --- /dev/null +++ b/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; +} diff --git a/web_searchbar_full_width/static/src/xml/web_searchbar_full_width.xml b/web_searchbar_full_width/static/src/xml/web_searchbar_full_width.xml new file mode 100644 index 00000000..8a2c3d70 --- /dev/null +++ b/web_searchbar_full_width/static/src/xml/web_searchbar_full_width.xml @@ -0,0 +1,15 @@ + + + + + jQuery(this).attr('colspan', 4); + + + var $new_row = jQuery(''); + jQuery(this) + .parents('tr') + .after($new_row); + $new_row.append(jQuery(this).attr('colspan', 4)); + + + diff --git a/web_searchbar_full_width/views/templates.xml b/web_searchbar_full_width/views/templates.xml new file mode 100644 index 00000000..013cffa7 --- /dev/null +++ b/web_searchbar_full_width/views/templates.xml @@ -0,0 +1,10 @@ + + + + + + From d6244ed0f9be539066ab0255bbd6fabf84a9c003 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 1 May 2015 12:25:24 +0200 Subject: [PATCH 40/49] [FIX] typo --- web_searchbar_full_width/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_searchbar_full_width/README.rst b/web_searchbar_full_width/README.rst index 80f71584..56dd90db 100644 --- a/web_searchbar_full_width/README.rst +++ b/web_searchbar_full_width/README.rst @@ -1,7 +1,7 @@ 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 breadcrump can also use the full screen width, which makes it reasonable not to cut off titles after 7 characters. +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: From 67140d75a25b6f686768f780c1c2c05d2f9bffe8 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 1 May 2015 13:14:36 +0200 Subject: [PATCH 41/49] [ADD] dependency --- web_searchbar_full_width/__openerp__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/web_searchbar_full_width/__openerp__.py b/web_searchbar_full_width/__openerp__.py index 390c4e95..7a8cbc47 100644 --- a/web_searchbar_full_width/__openerp__.py +++ b/web_searchbar_full_width/__openerp__.py @@ -26,6 +26,7 @@ "category": "Tools", "summary": "Show search bar in full screen width", "depends": [ + 'web', ], "data": [ 'views/templates.xml', From db1c966807b52ae306a980bfd9ad171fd16461b2 Mon Sep 17 00:00:00 2001 From: Sylvain Calador Date: Fri, 1 May 2015 13:46:50 +0200 Subject: [PATCH 42/49] [IMP] README.rst: more explicative description --- web_widget_many2many_tags_multi_selection/README.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web_widget_many2many_tags_multi_selection/README.rst b/web_widget_many2many_tags_multi_selection/README.rst index 697d7a40..4d2b3ea3 100644 --- a/web_widget_many2many_tags_multi_selection/README.rst +++ b/web_widget_many2many_tags_multi_selection/README.rst @@ -1,7 +1,9 @@ Allows multiple selection on many2many_tags widget ================================================== -This module allows the user to select multiple entries through the search box in the case of the "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 ============ From 27afb702d81313db9f972b9ab91608fafb77bc56 Mon Sep 17 00:00:00 2001 From: Sylvain Calador Date: Tue, 5 May 2015 09:32:13 +0200 Subject: [PATCH 43/49] [IMP] better module name --- web_widget_many2many_tags_multi_selection/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_widget_many2many_tags_multi_selection/__openerp__.py b/web_widget_many2many_tags_multi_selection/__openerp__.py index b07382c3..4bf59acd 100644 --- a/web_widget_many2many_tags_multi_selection/__openerp__.py +++ b/web_widget_many2many_tags_multi_selection/__openerp__.py @@ -20,7 +20,7 @@ ############################################################################## { - 'name': 'web_widget_many2many_tags_multi_selection', + 'name': 'Tags multiple selection', 'version': '0.1', 'author': 'Akretion, Odoo Community Association (OCA)', 'depends': [ From 04773d8cd94fc8a2aee5be38f8edbdcc4829f262 Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Wed, 6 May 2015 21:14:05 +0200 Subject: [PATCH 44/49] [IMP][web_widget_auto_color] Use random seeded to compute hexa color --- web_widget_auto_color/static/src/js/view_list.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/web_widget_auto_color/static/src/js/view_list.js b/web_widget_auto_color/static/src/js/view_list.js index 303c474f..c17ac237 100644 --- a/web_widget_auto_color/static/src/js/view_list.js +++ b/web_widget_auto_color/static/src/js/view_list.js @@ -26,8 +26,13 @@ openerp.web_widget_auto_color = function(instance) { }, - get_colors: function(){ - return ['#86BB74', '#DBC437', '#76A6F3', '#991592', '#F7527C', '#51D419', '#CFFB03', '#CE50BE', '#AFB32A', '#7DBD55', '#CA1BF7', '#98CDBA', '#63A99F', '#906D3E', '#73E553', '#73DC34', '#944D53', '#95FAFD', '#7C5D0E', '#DED3E4', '#4C8820', '#18A6EB', '#3DD55B', '#C19A5C', '#16F40A', '#A9E927', '#F2AFBA', '#F26CC0', '#247B5F', '#A20AF4', '#6511DC', '#086393', '#8D85F4', '#2D44AB', '#EB116B', '#8ED0DE', '#0B9C2F', '#723779', '#5A32DD', '#CA4F3E', '#A3D1FB', '#51179B', '#D20520', '#067E0E', '#199107', '#8D6623', '#FC7843', '#35FFBB', '#DDD15F', '#9F332E', '#3B2D63', '#27C2A2', '#9C02C1', '#823C84', '#0CB3A0', '#3D5E6B', '#F81915', '#AAC985', '#16FE81', '#660E42', '#68B9FB', '#D06595', '#FA4F48', '#CD675D', '#0AC360', '#7BAF44', '#FC0A9B', '#65F070', '#C3E3C7', '#043359', '#80A230', '#422F61', '#04EBE8', '#01A546', '#E52390', '#5AB35D', '#AFBB14', '#B3E029', '#23BD4B', '#A2B89B', '#80CBA5', '#6439DB', '#26F19A', '#CCB7BA', '#62351C', '#FA7E3B', '#62B1B7', '#54C9C1', '#391A14', '#F2875D', '#92D5CC', '#7D9490', '#40DF9D', '#D4B5D6', '#A7B08F', '#FDC051', '#B3F9AF', '#C59A72', '#C32F0A', '#DF1EE6', '#9F4A67', '#FBA9A4', '#F58B20', '#44E991', '#FEC3DA', '#1D4316', '#0D66E4', '#7FD5AA', '#5FFC6C', '#BD5328', '#3C478F', '#02F9C3', '#FB4950', '#E9321F', '#9E0DAD', '#FBC282', '#BD39FD', '#614934', '#11A926', '#772095', '#8D5135', '#F954E3', '#584275', '#FAE173', '#13C2C1', '#083DDF', '#5E95EE', '#835481', '#DBD066', '#659B11', '#54E4A7', '#47DA71', '#0884FA', '#97DC79', '#C029CE', '#B46420', '#2064F6', '#0DF54B', '#EE3F8A', '#E9BCEB', '#E50E16', '#A8B614', '#32B062', '#3716FE', '#8E4E03', '#B91C1F', '#8D08DA', '#3A6AD5', '#96B145', '#01DB47', '#94DBC9', '#98E120', '#763E84', '#7A97C9', '#22D5C6', '#9B9854', '#C4D269', '#0D10D9', '#4F3423', '#11EEBC', '#C4AD8A', '#224611', '#EDC679', '#B85FC8', '#D306A0', '#465C7F', '#AEBBDB', '#133DC5', '#BDBD23', '#2AD9E8', '#ACE530', '#3E2BD0', '#546DB7', '#591448', '#B121C2', '#E69709', '#DC0B33', '#2F175E', '#43F463', '#203E5E', '#D90337', '#D11569', '#C5505F', '#637F5A', '#C45D69', '#037535', '#4DFEA7', '#454B59', '#A08510', '#A8C962', '#B83346', '#BE57BF', '#40D074', '#335EF3', '#22B7E7', '#71000D', '#2B43DE', '#E02883', '#49296D', '#61052D', '#FC666E', '#C5DCAA', '#D1AE8A', '#CB3150', '#7B3162', '#DF7D2A', '#234263', '#0098E8', '#AAA3DF', '#0BF28E', '#9F7758', '#01C328', '#138A3B', '#128168', '#E77CD6', '#B71FEB', '#6F86FE', '#195E2B', '#D86AE2', '#5B1009', '#4C6B3E', '#DF1E6C', '#B0F798', '#7DC767', '#AC4319', '#117BDB', '#90C1B5', '#0E97A3', '#03DCAA', '#31143E', '#4AC1DB', '#A51DBF', '#324B05', '#4DB6CD', '#67AE4D', '#47F061', '#3D6CB6', '#32B9CF', '#1F662E', '#C6EE95', '#767F36', '#72003C', '#92E621', '#0B5F3D', '#69968E', '#8F0FC5', '#01AFF1', '#FB3152', '#C077E7', '#B710B2', '#4733AA', '#523327', '#89AE5C', '#943DCD', '#5E7F14', '#6E27A7', '#5B8879', '#E40CA7', '#232849', '#3B800F', '#5B1FB8', '#FCC8C6', '#7C9E16', '#293538', '#E1D18F', '#665E7B', '#A29B81', '#8B168E', '#A40D99', '#357658', '#83A747', '#995EB1', '#ED4AE8', '#2D4D37', '#CB1C68', '#81AE49', '#F4EF4F', '#E0F299', '#103C0B', '#37D6F7', '#2D216B', '#76E351', '#FACA69', '#E491FC', '#36AD3F', '#9E23D0', '#161031', '#D00114', '#13FE7D', '#0F5F8A', '#747BE6', '#F5E5E2', '#243F0C', '#DF1A7E', '#0A2F15', '#FC8282', '#FD875A', '#B0C957', '#CC0637', '#34CF7D', '#0B62E2', '#07B9A2', '#F89A88', '#57D090', '#18F318', '#3656CC', '#0E2AF6', '#12134E', '#420106', '#81D012', '#4B2966', '#6847D4', '#CE9AB6', '#FDC807', '#79D5A8', '#1FB3BC', '#CD3B23', '#6E204C', '#D73759', '#C477C3', '#17FA10', '#9D82E7', '#64C07B', '#AFFB18', '#E8C7FF', '#BA4D52', '#60B8C5', '#5618B5', '#094D35', '#E8D90E', '#29ED6F', '#A93D16', '#62705B', '#BEA7A0', '#0748D6', '#7BE8AA', '#96396B', '#8FD44C', '#7B7EEB', '#086361', '#7E52B3', '#8F18AB', '#12DECC', '#D48574', '#BE9C7E', '#EB3952', '#D72F47', '#3E446F', '#99363C', '#20CE69', '#06A66F', '#1BD201', '#30DF94', '#3218F5', '#7D01A3', '#B41A09', '#682D54', '#577C23', '#7C74E9', '#4A0086', '#07CE39', '#F575F9', '#32C8A8', '#E10A19', '#48E3D4', '#53165B', '#DA6FA6', '#87D417', '#A08CEA', '#8DDF31', '#194853', '#B00139', '#02FC0E', '#FE024B', '#5D4A94', '#72DA2B', '#65AA22', '#91C01D', '#3EDDDE', '#77DAD4', '#5E165C', '#937A01', '#ADA254', '#A83752', '#9A691C', '#713B91', '#020145', '#1D2B80', '#65C3AD', '#883FB9', '#79A497', '#75266F', '#35C1A3', '#4EEC2E', '#59410E', '#4425D3', '#EB783B', '#A31CA7', '#00F7ED', '#B03FDA', '#A7B9FC', '#751E9A', '#F01A02', '#E29082', '#B2BC3F', '#031CEF', '#A0FC80', '#035310', '#A946EF', '#65C6FA', '#B6FD2C', '#306D04', '#1EED05', '#0300F1', '#E6C115', '#8C15F3', '#DE31A7', '#090CB7', '#7D5F97', '#F50908', '#A1624C', '#0E47BF', '#10B0C9', '#A62B8F', '#F87E37', '#B7CD91', '#2EFC46', '#60EAD2', '#8DCF76', '#723B95', '#645B1E', '#01A7E4', '#0D0775', '#A5ED71', '#996F39', '#3B5DFE', '#522EE0', '#ED8F68', '#A49545', '#304073', '#4E6E75', '#1ED971', '#1168FB', '#FFC0D6', '#4E2F01', '#84EF42', '#BDAB4F', '#620C26', '#33C5CC', '#D321FF', '#842568', '#F1221C', '#7C4109', '#5C0361', '#1C7118', '#D722A4', '#810E15', '#F0E6AB', '#D5A78A', '#8241DE', '#C69C28', '#391451', '#B20FEF', '#669E60', '#4D1764', '#BC0A66', '#636B03', '#206B5C', '#4A7D8E', '#45AFFA', '#EAAC4C', '#F5652F', '#E6E19E', '#9B97D6', '#EC577D', '#29229F', '#BC5AC5', '#BB5566', '#5F5F77', '#B286E6', '#BEB23C', '#BF0610', '#82240E', '#225874', '#CADCB2', '#6EC498', '#97F18D', '#6DDE79', '#E5B9CB', '#6A5894', '#A376CD', '#5341C9', '#3BAEBB', '#8A61FD', '#708D49', '#578982', '#6204A5', '#F92E34', '#B54179', '#EA6367'] + 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){ @@ -43,8 +48,7 @@ openerp.web_widget_auto_color = function(instance) { value = record.get(column.name) if (value != false && value != undefined) { var intValue = this.getIntValue(value) - colors = this.get_colors() - bgcolor = colors[intValue % colors.length] + bgcolor = this.get_seed_random_color(intValue) fontcolor = this.inverse_color(bgcolor) style = style + 'background-color: ' + bgcolor + ';' + 'color: ' + fontcolor + ';'; } From 85e63f7651131bdfe5f729345b28d6ac9d32e069 Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Wed, 6 May 2015 21:17:45 +0200 Subject: [PATCH 45/49] [IMP][web_widget_auto_color] Add newlines at end of files --- web_widget_auto_color/static/src/xml/templates.xml | 2 +- web_widget_auto_color/views/web_widget_auto_color.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web_widget_auto_color/static/src/xml/templates.xml b/web_widget_auto_color/static/src/xml/templates.xml index fde0a374..3f1c488c 100644 --- a/web_widget_auto_color/static/src/xml/templates.xml +++ b/web_widget_auto_color/static/src/xml/templates.xml @@ -5,4 +5,4 @@ this.attr('t-att-style', "column.widget =='autocolor' and view.auto_color_cell_style(record, column)")
- \ No newline at end of file + diff --git a/web_widget_auto_color/views/web_widget_auto_color.xml b/web_widget_auto_color/views/web_widget_auto_color.xml index 484f0a39..0b142c85 100644 --- a/web_widget_auto_color/views/web_widget_auto_color.xml +++ b/web_widget_auto_color/views/web_widget_auto_color.xml @@ -7,4 +7,4 @@ - \ No newline at end of file + From b0171c8adb8aeaf3ee3f34d0855204bd63a81e9a Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Wed, 6 May 2015 22:13:41 +0200 Subject: [PATCH 46/49] [IMP][web_widget_auto_color] Add OCA as author --- web_widget_auto_color/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_widget_auto_color/__openerp__.py b/web_widget_auto_color/__openerp__.py index 88dcf644..e52c9fbc 100644 --- a/web_widget_auto_color/__openerp__.py +++ b/web_widget_auto_color/__openerp__.py @@ -24,7 +24,7 @@ ############################################################################## { 'name': "Web Widget Auto Color", - 'author': "ACSONE SA/NV", + 'author': "ACSONE SA/NV,Odoo Community Association (OCA)", 'website': "http://acsone.eu", 'category': 'web', 'version': '0.1', From 79fd6b76de4eb6e5f72b08d5ddd70d312748ad81 Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Thu, 7 May 2015 13:57:33 +0200 Subject: [PATCH 47/49] [IMP][web_widget_auto_color] Use render value to allow to use this widget on all type of field --- web_widget_auto_color/static/src/js/view_list.js | 10 +++------- web_widget_auto_color/static/src/xml/templates.xml | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/web_widget_auto_color/static/src/js/view_list.js b/web_widget_auto_color/static/src/js/view_list.js index c17ac237..a5e16cfe 100644 --- a/web_widget_auto_color/static/src/js/view_list.js +++ b/web_widget_auto_color/static/src/js/view_list.js @@ -43,10 +43,9 @@ openerp.web_widget_auto_color = function(instance) { return sum }, - auto_color_cell_style: function(record, column){ + auto_color_cell_style: function(value){ style = '' - value = record.get(column.name) - if (value != false && value != undefined) { + if (value != "" && value != undefined) { var intValue = this.getIntValue(value) bgcolor = this.get_seed_random_color(intValue) fontcolor = this.inverse_color(bgcolor) @@ -57,9 +56,6 @@ openerp.web_widget_auto_color = function(instance) { }); - instance.web.form.widgets.add('autocolor', 'instance.web.form.FieldAutoColor'); - - instance.web.form.FieldAutoColor = instance.web.form.FieldChar.extend({ - }); + instance.web.form.widgets.add('autocolor', 'instance.web.form.AbstractField'); }; \ No newline at end of file diff --git a/web_widget_auto_color/static/src/xml/templates.xml b/web_widget_auto_color/static/src/xml/templates.xml index 3f1c488c..c98bbe6b 100644 --- a/web_widget_auto_color/static/src/xml/templates.xml +++ b/web_widget_auto_color/static/src/xml/templates.xml @@ -2,7 +2,7 @@ - this.attr('t-att-style', "column.widget =='autocolor' and view.auto_color_cell_style(record, column)") + this.attr('t-att-style', "column.widget =='autocolor' and view.auto_color_cell_style(render_cell(record, column))") From edbefd1305a905fb65d994e6286d5b6ee94d31fe Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Thu, 7 May 2015 14:36:03 +0200 Subject: [PATCH 48/49] [IMP][web_widget_auto_color] Replace widget by simple autocolor attribute --- web_widget_auto_color/README.rst | 10 +++++----- web_widget_auto_color/static/src/js/view_list.js | 4 ---- web_widget_auto_color/static/src/xml/templates.xml | 2 +- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/web_widget_auto_color/README.rst b/web_widget_auto_color/README.rst index d82d4e64..173c02f7 100644 --- a/web_widget_auto_color/README.rst +++ b/web_widget_auto_color/README.rst @@ -4,9 +4,9 @@ Web Widget Auto Color ===================== -This module was written to offer a new autocolor widget which can be used on -field in trees view. Using this widget causes an identical coloration for cells -of the same value in a list view. +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 ============ @@ -18,14 +18,14 @@ To install this module, you need to: Usage ===== - In the view declaration, put widget='autocolor' attribute in the field tag:: + In the view declaration, put autocolor="1" attribute in the field tag:: ... ... - + ... diff --git a/web_widget_auto_color/static/src/js/view_list.js b/web_widget_auto_color/static/src/js/view_list.js index a5e16cfe..7ac1a691 100644 --- a/web_widget_auto_color/static/src/js/view_list.js +++ b/web_widget_auto_color/static/src/js/view_list.js @@ -54,8 +54,4 @@ openerp.web_widget_auto_color = function(instance) { return style } }); - - - instance.web.form.widgets.add('autocolor', 'instance.web.form.AbstractField'); - }; \ No newline at end of file diff --git a/web_widget_auto_color/static/src/xml/templates.xml b/web_widget_auto_color/static/src/xml/templates.xml index c98bbe6b..0ea16cf6 100644 --- a/web_widget_auto_color/static/src/xml/templates.xml +++ b/web_widget_auto_color/static/src/xml/templates.xml @@ -2,7 +2,7 @@ - this.attr('t-att-style', "column.widget =='autocolor' and view.auto_color_cell_style(render_cell(record, column))") + this.attr('t-att-style', "column.autocolor == '1' and view.auto_color_cell_style(render_cell(record, column), column)") From 47cfc9ff74f9d3609734dfa4030e9a32f8716f0f Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Thu, 7 May 2015 18:41:04 +0200 Subject: [PATCH 49/49] [IMP] Rename web_widget_auto_color to web_option_auto_color --- .../README.rst | 2 +- .../__init__.py | 0 .../__openerp__.py | 12 ++++++------ .../static/src/js/view_list.js | 2 +- .../static/src/xml/templates.xml | 0 .../views/web_option_auto_color.xml | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) rename {web_widget_auto_color => web_option_auto_color}/README.rst (97%) rename {web_widget_auto_color => web_option_auto_color}/__init__.py (100%) rename {web_widget_auto_color => web_option_auto_color}/__openerp__.py (81%) rename {web_widget_auto_color => web_option_auto_color}/static/src/js/view_list.js (97%) rename {web_widget_auto_color => web_option_auto_color}/static/src/xml/templates.xml (100%) rename web_widget_auto_color/views/web_widget_auto_color.xml => web_option_auto_color/views/web_option_auto_color.xml (66%) diff --git a/web_widget_auto_color/README.rst b/web_option_auto_color/README.rst similarity index 97% rename from web_widget_auto_color/README.rst rename to web_option_auto_color/README.rst index 173c02f7..bb95448f 100644 --- a/web_widget_auto_color/README.rst +++ b/web_option_auto_color/README.rst @@ -1,7 +1,7 @@ .. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg :alt: License -Web Widget Auto Color +Web Option Auto Color ===================== This module was written to offer a new autocolor attribute which can be used on diff --git a/web_widget_auto_color/__init__.py b/web_option_auto_color/__init__.py similarity index 100% rename from web_widget_auto_color/__init__.py rename to web_option_auto_color/__init__.py diff --git a/web_widget_auto_color/__openerp__.py b/web_option_auto_color/__openerp__.py similarity index 81% rename from web_widget_auto_color/__openerp__.py rename to web_option_auto_color/__openerp__.py index e52c9fbc..719c3a39 100644 --- a/web_widget_auto_color/__openerp__.py +++ b/web_option_auto_color/__openerp__.py @@ -1,29 +1,29 @@ # -*- coding: utf-8 -*- ############################################################################## # -# This file is part of web_widget_auto_color, +# This file is part of web_option_auto_color, # an Odoo module. # # Copyright (c) 2015 ACSONE SA/NV () # -# web_widget_auto_color is free software: +# 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_widget_auto_color is distributed +# 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_widget_auto_color. +# along with web_option_auto_color. # If not, see . # ############################################################################## { - 'name': "Web Widget Auto Color", + 'name': "Web Option Auto Color", 'author': "ACSONE SA/NV,Odoo Community Association (OCA)", 'website': "http://acsone.eu", 'category': 'web', @@ -33,7 +33,7 @@ 'web', ], 'data': [ - 'views/web_widget_auto_color.xml', + 'views/web_option_auto_color.xml', ], 'qweb': [ 'static/src/xml/templates.xml', diff --git a/web_widget_auto_color/static/src/js/view_list.js b/web_option_auto_color/static/src/js/view_list.js similarity index 97% rename from web_widget_auto_color/static/src/js/view_list.js rename to web_option_auto_color/static/src/js/view_list.js index 7ac1a691..1cc6b1e3 100644 --- a/web_widget_auto_color/static/src/js/view_list.js +++ b/web_option_auto_color/static/src/js/view_list.js @@ -1,4 +1,4 @@ -openerp.web_widget_auto_color = function(instance) { +openerp.web_option_auto_color = function(instance) { var _t = instance.web._t, _lt = instance.web._lt; var QWeb = instance.web.qweb; diff --git a/web_widget_auto_color/static/src/xml/templates.xml b/web_option_auto_color/static/src/xml/templates.xml similarity index 100% rename from web_widget_auto_color/static/src/xml/templates.xml rename to web_option_auto_color/static/src/xml/templates.xml diff --git a/web_widget_auto_color/views/web_widget_auto_color.xml b/web_option_auto_color/views/web_option_auto_color.xml similarity index 66% rename from web_widget_auto_color/views/web_widget_auto_color.xml rename to web_option_auto_color/views/web_option_auto_color.xml index 0b142c85..a417cc81 100644 --- a/web_widget_auto_color/views/web_widget_auto_color.xml +++ b/web_option_auto_color/views/web_option_auto_color.xml @@ -1,9 +1,9 @@ -