From b90cc35be1fa7868f192a3ff2cf87d78d882f3e7 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Wed, 11 Mar 2015 18:00:21 +0100 Subject: [PATCH 001/399] [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 000000000000..27a266b981d6 --- /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 000000000000..faef9dac007f --- /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 000000000000..1cbc4aad73cb --- /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 000000000000..e29367a010ae --- /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 000000000000..06934cc33dbc --- /dev/null +++ b/web_widget_x2many_2d_matrix/views/templates.xml @@ -0,0 +1,11 @@ + + + + + + From 9754620fd9c774321ca17fc1831591be8c46947c Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Wed, 11 Mar 2015 18:05:40 +0100 Subject: [PATCH 002/399] [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 27a266b981d6..6be504c44bf3 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 9d1f78887660163229b5c2876850e155c31e4613 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Thu, 12 Mar 2015 12:22:37 +0100 Subject: [PATCH 003/399] [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 e29367a010ae..fe3f82d31c4c 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 146abe840313c16724c7aa5b34e69ac2d490fc07 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Thu, 12 Mar 2015 12:27:24 +0100 Subject: [PATCH 004/399] [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 3a754f42651d..b157a67994ea 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 b2493f1ede846b7e25805d217136636615771d8c Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Thu, 12 Mar 2015 15:27:25 +0100 Subject: [PATCH 005/399] [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 e69de29bb2d1..2992579de638 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 b157a67994ea..f9ebeb25d158 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 fe3f82d31c4c..625a2d20fed4 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 676fb801e76cfa6da55a2d149ec501fb46f25842 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Thu, 12 Mar 2015 15:44:57 +0100 Subject: [PATCH 006/399] [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 f9ebeb25d158..df8b4930803b 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 625a2d20fed4..2950439c1e51 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 300a582c751730e444aee9421170817b60b4dea4 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 13 Mar 2015 15:29:09 +0100 Subject: [PATCH 007/399] [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 2992579de638..d33d4f21bdfb 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 f1df4e76ad53e4f5594b6c0dc74d1b0a8f317212 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 13 Mar 2015 15:34:02 +0100 Subject: [PATCH 008/399] [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 df8b4930803b..058a682e268b 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 2950439c1e51..4f587e3f08de 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 8ffbd0ccc7604732daffa9f26beaaf4a1d502318 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 13 Mar 2015 17:36:39 +0100 Subject: [PATCH 009/399] [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 058a682e268b..9a7b8ca62ddf 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 c53ff0256c0c26a2526307f5995dc1b998859267 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 13 Mar 2015 17:44:41 +0100 Subject: [PATCH 010/399] [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 9a7b8ca62ddf..0425468bfe2a 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 f13d965032ef9b4d0fd9f374be13fb3345899f62 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 13 Mar 2015 18:19:42 +0100 Subject: [PATCH 011/399] [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 012/399] [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 0425468bfe2a..191ffad66b90 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 85dd7bc9933b3324d953d35d39f14217a16d2295 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 13 Mar 2015 18:47:15 +0100 Subject: [PATCH 013/399] [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 6be504c44bf3..5fb296beb0ed 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 191ffad66b90..0c818548d926 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 6598c0d30946932ad7f89c64680a98dfe8874976 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 16 Mar 2015 16:35:17 +0100 Subject: [PATCH 014/399] [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 4f587e3f08de..952a003f647d 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 d2d4e6fc7d196118e6032fc436cf6a09c7febdbc Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 16 Mar 2015 16:47:21 +0100 Subject: [PATCH 015/399] [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 0c818548d926..12a56c8cb56a 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 952a003f647d..35f1669bc197 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 af246dde10c8d51c55ea930586fc8ea7841b2356 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 16 Mar 2015 17:20:43 +0100 Subject: [PATCH 016/399] [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 5fb296beb0ed..0b145aaf6cab 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{ 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 Date: Mon, 16 Mar 2015 17:20:59 +0100 Subject: [PATCH 017/399] [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 zcmYkAcQjl7|Hp%Th*~jPyQo;LRgF=U8nJ4xQoB|au_I~}EoxV^s8JPdsM=bwl^CrZ zYE?BgT6>0?;d}ef@BDIeb5Gvq=AL_QUa#l#@q8tk8tXD$;JE+-ftd95w9SE|>AxL9 z3w)-r?p6Q?+WU8OwL$0qwl}RMnZOFYzn*On2*kktZ>Iv~=5qmybiw*Y2s#oC6v}?7 zhARpOEO7@TY=X7?e0|-K!62=8hBd1rd(tS(SSa8=O)NP5v&29 zmY@V#rSQL!3VEqxB_?BIV}y+vJbeP;M^gwx^u&aaOO)K94pW)0|_D_HT}Y0pBTemNwbmmu4K+Tii> z@(MKTU)z!Bu-b{FO6ca> z%F49PPEFM2kHpF~4h{||1f1oYP`UPPaxybBQ_Is+EEi|y=$JOS=I-OeST&j4yU?+) z0~#3}-TloK<5-pL+MBjh;TM_guf+Jd(xG{IZH*vnXn##g>Rm|*od%SPkFRTCXJmXl z4yF%RP>_SewRLrMPmkZ}$#S_JY|gfv?)HP9X!t1b@+$besi;V8X;Eb)IFI3sf`fy9 z1vWy!)Bzl4!rOfYD#MyC2?Pys4(iWHJbS8628>=G16+Rb^oZPYIG;S_qaZ3Os%K!J z$$i$}-dTIL| z5WM5dD+SmpTY+MBMPh-Yf%>I~>cqrLyF)EHw0cHH4h7-Ec-NEoj%xKiaIa zxLcJtrcumPiC{DgAt6D`a1UP(4f+0^`l)7G1IxhQ5U@s4>%{$f!@7E-u2Pq@;edhI2+wI)*bvH#I3os0nm9KaY=(M+;tsQ2YA&GBPrP zpcmo}J6NK&K?zzGWAdwOG8T6a=;Nu1i=Wsx|80kfX!!Z@ULJNp{w#l6RaG!FBzk&A zv{7@bp`%|~L1`CXb#NGjD>xQ?+7D`K%1zY15{yz98w<+D;k@CBq&LmYul$u%Z#`FF ze8Q`U9QpZk=tEVT!Q;p38G29eIz_&8IzOJ=+uy%_{kjH>Z4T%uA)tRt%lf`%ioGu{ zUo1{n!^sYowqm908mbV0O6%}cwU*3H9kV+(K0P1JPXWtkYKbXgmU2r=mOt@gk?Z+mscoGdFz})WS zIdJ)d(MQ8|oh1d6sB3(z8BcFx1|&Ri zjvSs!vez?mp5?>}R!32ey{0p}Zo^en!Y2+q<8KBDSBLppPoO0W6&3FfDGo|S9$VB$cwVaghigW7f~rjJhUQ-T6VgRVlAe zTOeoL!C*o$my2eA%2f1C=`$?VgWDWt@Kl9;keT2^9%<<%**_^43}4?Ge=WGor31V4 zqzn?Pe^aVeJQlqD!HKe}ZfP~^WM_BB!h#*BvwZc(m)l7u;o&M#?S-qW4{7P>fYMre zdDn3+QS9}v(RX*03XEGEWnR8~*CuTrJ# zjnzSaEL_ioSXphcGN#>7R@QTHxY*dJ^4y(we0+U>o z3=HtIq45uQ-=d8Doll!d*$p`+tv zI+n|ez`X!Zxb5$!Dpm+sTtY$v1FLjwHL$gvZs{T!h#p29NJvpadwSxhsyn*3s|(-0 zh11e1Pvf_^b#!RI4E<~>Cmy_cuQL{`Swzpnn>SVKE`~f{YC9f3e_OL-aXEY)N<-7S z_y<{1v2lrxna@#~vwkQS7qGjiA9cDQ(5rF3%{=9(aT|gP_s9=XU2ZweP*CTbfG@#+ z$qtKh*8en_zCVC+zA|jISc8Fe6DQ}t2D#&;W(T@oH$F6$bTAr}MV&M?xCEKubdRQT z3s`Erv(*M;LN~$0{f}Pa-dq;;szlm;(J-~XtSK{wn(~qECXY%}&&sXgyXCGcsLdCz z^4IO=ltyB(ZlY6H>U{G)cXiFLADV+lS5{WumXuUA@xOonKH0IzexcLb{?I9h!A@`< z6`qs-!n)i+LzW!V-Q760$InkWq$Jxp7f!|`dKV`a6foFU46|p1c@%sdAn9?mt6wa+ z!C%5|8FGOFAG`-r+^_Y)&KYXkCq2m3P*RP-!n%)nML7CyXYo(@c=YhzHXA5!aEYE( zdx!U7V?U~xT>Jg)y~QcH@I0l2R3W?*i9mEq&KkPa@BJ~Dgl)B-pHW{662(i)oC_SE z-1>-bUfFEpOz*CAq<|eJ1Dbi4H#Sn%vLEFrIu%}&i2fR)etvo*qD|xU%wv$eVlZs~D6wt#W!0NCWuRMeIMIKYr`Wc`H1zsb zvSdGijoXWvCZiJ*JpgNlogFRxGqyNR$6o^HhjhjznZmkhP)6FXLqmTCUfpQf8@)qT z?fbK8|L9ofG)i%BP`=!0OVf-`iBCV`c*PdAj?OG z?`QifTL2a6>R(-$kr7pol$!gy(fHM7(j?N?P{DF z&Ps=7x)A|i3MwQ`Q(8}gf^ zc9VPecvMj9&ZM?T)$>!bo4b3B=kVp%;hT+U!|~~9eJiVrq_e+xP7r%T#E~B$Rg%O~ z0}Txc0>KrOl750-eJ}h}lj;J)LHAOTt`t@rgTV~_a#ozdtLp$~@$=&Y8tb8{WqSws zy2uk(j!TEX^zvu_@C0f*aj3C4m0vqjJ{9%qqmk7Pl83Hn4<)*Njs z&TPr3W!6JPQrl>E%nfw-{B2vGid4owI$7h)rP=1#ngQ#jQd5U3>;X!AAB+>Nn+8JL zRy_0pm3=xMXqOV8{Y<;F`~`PBRjp4l=N;pWL`WIWy%+o+2I2(agcYC^GWa{{H@39L^l@of*G&0LxEzv)dQnm%N_epL8mzug`iy$1(~; zq}~OWnR;KJ9}NK$3*TmVwaqZ59CUzkU%2phbTTxZiFfz8d)(rpC18Vw0Xr6ZdmpQV zJXeHmI2Al97+9DP5U}V}OPI>RraUz9Df)P&7~R?$95U-dYV&Le$EW$DV{2=LQ&RR! zmO23v9vCn*Hy;26ZT)OjB@f)#+uM8o`ZW-3nR9VPWmh*gHrA(Vo*3mR5CIYCmuWZj z^OGT+pB?O+P<(#2yjpr4E?sZ=V3Q8%gWfcDzDkNK9&f1_3CRtr1gX-;68Av z8j%qE2~HUM>l^ z`q9zRm)e1m5vckxF&%xff!8-OdiU;K-2D9g)zww>=}vFhS_NJy>J%L@>}zWazy$wt zld+475C{NyKs)k{ms%_Cxu z=cv>kOzSBH=q|Rq&IA#l=OMUpqhCPyUW3cwP|}7AE7)dV700 z9RzO0b#{5b9sI53%Dl}s5<>Rj>QCpcIL_i%!BsKf>vQEtZ!}iBj~Pmruk{cTt~1cxBJAr6ywUozwgb@lDK)b;4t z*YnHC`eDiE*HZJ+hor*r9*fC+re_S#d@5BXcA_V*lB&;|Kc_VP_WBQ_kmuVG`*obh z$eNOd6)!F0!Ov)h=MBb}m5C?qexXfO>Skh!Pe=f$=M4aDwpleZ8$ienI@omJKy=Lc z{|Z(HJXIs>x7P>MhsZ-p)I)D?RzwDQX_&^;!s5xGNAi|JJ1}=(PIz+dZsnV@Rbj8t z@40#!8dN1Fg@2Zb#el+-JLm*PW@iV19OZ>X{&N;c?C0jKw&qfv6`6aZV`Kja%gV~i zzCEg7a}#-dauT*w5bCd7U}U`O8Ga(knHDEK`|B%>mrfTKsf;I zl;JFUs5gq9Hdt2=~Y5x|gMWM>OQsCCo$ zitzYsAjz>aC)^C(`{0hIfpypk_6>TR8| zWe-&oJjZ(nv?aZ%&*X&s=b5amLcUM;`QAg>QNlPPpHl%rPlm?WSxV48^WtSn4O-tO hsQdq>To?M!smjW;Uk+jpmw{OwNFQOWU8(6D`#**n0DAxc literal 12361 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 YID`P*yI)_SqJKa}LQ%X*)WH9L08=sy2LJ#7 From dc5ad86025f0b197b8ad47a740d40d9cc6ce1be6 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Wed, 18 Mar 2015 17:10:29 +0100 Subject: [PATCH 018/399] [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 12a56c8cb56a..d4828b47c19e 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 c30e6c31291514c6d9d59769783aa1b59466005e Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Thu, 16 Apr 2015 09:59:47 +0200 Subject: [PATCH 019/399] [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 d4828b47c19e..e1021457aba9 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 99e6ce4d7d251559f1c2d9dbf8e73ec3770e92e7 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Thu, 16 Apr 2015 10:15:39 +0200 Subject: [PATCH 020/399] [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 e1021457aba9..5d4ce7854587 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 a7a2c38de34a053596f6ee04d4c8eeccce14ed44 Mon Sep 17 00:00:00 2001 From: Yannick Vaucher Date: Fri, 22 May 2015 19:45:36 +0200 Subject: [PATCH 021/399] Add bug tracker link on README.rst --- web_widget_x2many_2d_matrix/README.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst index 0b145aaf6cab..a6b436e17cf9 100644 --- a/web_widget_x2many_2d_matrix/README.rst +++ b/web_widget_x2many_2d_matrix/README.rst @@ -56,6 +56,16 @@ Known issues / Roadmap * it would be worth trying to instantiate the proper field widget and let it render the input + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed feedback +`here `_. + + Credits ======= From f557f28838c3d4a22d8c07d94ff0d160affabfcd Mon Sep 17 00:00:00 2001 From: Markus Schneider Date: Thu, 4 Jun 2015 14:30:25 +0200 Subject: [PATCH 022/399] add OCA to author --- web_widget_x2many_2d_matrix/__openerp__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web_widget_x2many_2d_matrix/__openerp__.py b/web_widget_x2many_2d_matrix/__openerp__.py index 1cbc4aad73cb..95a3299b2ec2 100644 --- a/web_widget_x2many_2d_matrix/__openerp__.py +++ b/web_widget_x2many_2d_matrix/__openerp__.py @@ -21,7 +21,8 @@ { "name": "2D matrix for x2many fields", "version": "1.0", - "author": "Therp BV", + "author": "Therp BV, " + "Odoo Community Association (OCA)",, "license": "AGPL-3", "category": "Hidden/Dependency", "summary": "Show list fields as a matrix", From b2ccc62570ed3bc5f72b46c322896e41c107bca7 Mon Sep 17 00:00:00 2001 From: Markus Schneider Date: Fri, 5 Jun 2015 00:33:22 +0200 Subject: [PATCH 023/399] remove comma --- web_widget_x2many_2d_matrix/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_widget_x2many_2d_matrix/__openerp__.py b/web_widget_x2many_2d_matrix/__openerp__.py index 95a3299b2ec2..2e43203a8bd5 100644 --- a/web_widget_x2many_2d_matrix/__openerp__.py +++ b/web_widget_x2many_2d_matrix/__openerp__.py @@ -22,7 +22,7 @@ "name": "2D matrix for x2many fields", "version": "1.0", "author": "Therp BV, " - "Odoo Community Association (OCA)",, + "Odoo Community Association (OCA)", "license": "AGPL-3", "category": "Hidden/Dependency", "summary": "Show list fields as a matrix", From 4672f24c36b5cb0009a54dc761e1dc549492cba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= Date: Fri, 9 Oct 2015 10:03:39 +0200 Subject: [PATCH 024/399] [UPD] prefix versions with 8.0 --- web_widget_x2many_2d_matrix/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_widget_x2many_2d_matrix/__openerp__.py b/web_widget_x2many_2d_matrix/__openerp__.py index 2e43203a8bd5..0b652e3cd18f 100644 --- a/web_widget_x2many_2d_matrix/__openerp__.py +++ b/web_widget_x2many_2d_matrix/__openerp__.py @@ -20,7 +20,7 @@ ############################################################################## { "name": "2D matrix for x2many fields", - "version": "1.0", + "version": "8.0.1.0.0", "author": "Therp BV, " "Odoo Community Association (OCA)", "license": "AGPL-3", From b758f146350d78ecefc2f2bf6cccffc0dd0c0361 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Wed, 14 Oct 2015 02:57:05 +0200 Subject: [PATCH 025/399] [MIG] Make modules uninstallable --- web_widget_x2many_2d_matrix/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_widget_x2many_2d_matrix/__openerp__.py b/web_widget_x2many_2d_matrix/__openerp__.py index 0b652e3cd18f..e48c3a6e6d6a 100644 --- a/web_widget_x2many_2d_matrix/__openerp__.py +++ b/web_widget_x2many_2d_matrix/__openerp__.py @@ -38,7 +38,7 @@ "test": [ ], "auto_install": False, - "installable": True, + 'installable': False, "application": False, "external_dependencies": { 'python': [], From 8ed7ed868858301fb72db3dc40805d66e25c633b Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Mon, 23 Nov 2015 23:43:23 -0500 Subject: [PATCH 026/399] OCA Transbot updated translations from Transifex --- web_widget_x2many_2d_matrix/i18n/ar.po | 27 +++++++++++++++++++++++ web_widget_x2many_2d_matrix/i18n/de.po | 27 +++++++++++++++++++++++ web_widget_x2many_2d_matrix/i18n/es.po | 26 ++++++++++++++++++++++ web_widget_x2many_2d_matrix/i18n/fi.po | 27 +++++++++++++++++++++++ web_widget_x2many_2d_matrix/i18n/fr.po | 26 ++++++++++++++++++++++ web_widget_x2many_2d_matrix/i18n/hr.po | 27 +++++++++++++++++++++++ web_widget_x2many_2d_matrix/i18n/it.po | 26 ++++++++++++++++++++++ web_widget_x2many_2d_matrix/i18n/pt_BR.po | 26 ++++++++++++++++++++++ web_widget_x2many_2d_matrix/i18n/sl.po | 26 ++++++++++++++++++++++ web_widget_x2many_2d_matrix/i18n/tr.po | 27 +++++++++++++++++++++++ 10 files changed, 265 insertions(+) create mode 100644 web_widget_x2many_2d_matrix/i18n/ar.po create mode 100644 web_widget_x2many_2d_matrix/i18n/de.po create mode 100644 web_widget_x2many_2d_matrix/i18n/es.po create mode 100644 web_widget_x2many_2d_matrix/i18n/fi.po create mode 100644 web_widget_x2many_2d_matrix/i18n/fr.po create mode 100644 web_widget_x2many_2d_matrix/i18n/hr.po create mode 100644 web_widget_x2many_2d_matrix/i18n/it.po create mode 100644 web_widget_x2many_2d_matrix/i18n/pt_BR.po create mode 100644 web_widget_x2many_2d_matrix/i18n/sl.po create mode 100644 web_widget_x2many_2d_matrix/i18n/tr.po diff --git a/web_widget_x2many_2d_matrix/i18n/ar.po b/web_widget_x2many_2d_matrix/i18n/ar.po new file mode 100644 index 000000000000..7a85d2bde813 --- /dev/null +++ b/web_widget_x2many_2d_matrix/i18n/ar.po @@ -0,0 +1,27 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_x2many_2d_matrix +# +# Translators: +# SaFi J. , 2015 +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-12-16 07:41+0000\n" +"PO-Revision-Date: 2015-12-16 17:24+0000\n" +"Last-Translator: SaFi J. \n" +"Language-Team: Arabic (http://www.transifex.com/oca/OCA-web-8-0/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: web_widget_x2many_2d_matrix +#. openerp-web +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#, python-format +msgid "Total" +msgstr "المجموع الاجمالي" diff --git a/web_widget_x2many_2d_matrix/i18n/de.po b/web_widget_x2many_2d_matrix/i18n/de.po new file mode 100644 index 000000000000..337d2b944ef1 --- /dev/null +++ b/web_widget_x2many_2d_matrix/i18n/de.po @@ -0,0 +1,27 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_x2many_2d_matrix +# +# Translators: +# Rudolf Schnapka , 2016 +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-01-10 07:31+0000\n" +"PO-Revision-Date: 2016-01-18 20:15+0000\n" +"Last-Translator: Rudolf Schnapka \n" +"Language-Team: German (http://www.transifex.com/oca/OCA-web-8-0/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_widget_x2many_2d_matrix +#. openerp-web +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#, python-format +msgid "Total" +msgstr "Gesamt" diff --git a/web_widget_x2many_2d_matrix/i18n/es.po b/web_widget_x2many_2d_matrix/i18n/es.po new file mode 100644 index 000000000000..10ba2f9f8b08 --- /dev/null +++ b/web_widget_x2many_2d_matrix/i18n/es.po @@ -0,0 +1,26 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_x2many_2d_matrix +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-11-23 13:46+0000\n" +"PO-Revision-Date: 2015-11-07 11:29+0000\n" +"Last-Translator: Pedro M. Baeza \n" +"Language-Team: Spanish (http://www.transifex.com/oca/OCA-web-8-0/language/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_widget_x2many_2d_matrix +#. openerp-web +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#, python-format +msgid "Total" +msgstr "Total" diff --git a/web_widget_x2many_2d_matrix/i18n/fi.po b/web_widget_x2many_2d_matrix/i18n/fi.po new file mode 100644 index 000000000000..df37d34a7088 --- /dev/null +++ b/web_widget_x2many_2d_matrix/i18n/fi.po @@ -0,0 +1,27 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_x2many_2d_matrix +# +# Translators: +# Jarmo Kortetjärvi , 2016 +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-01-10 07:31+0000\n" +"PO-Revision-Date: 2016-02-01 09:54+0000\n" +"Last-Translator: Jarmo Kortetjärvi \n" +"Language-Team: Finnish (http://www.transifex.com/oca/OCA-web-8-0/language/fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_widget_x2many_2d_matrix +#. openerp-web +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#, python-format +msgid "Total" +msgstr "Yhteensä" diff --git a/web_widget_x2many_2d_matrix/i18n/fr.po b/web_widget_x2many_2d_matrix/i18n/fr.po new file mode 100644 index 000000000000..7ed8bc355a41 --- /dev/null +++ b/web_widget_x2many_2d_matrix/i18n/fr.po @@ -0,0 +1,26 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_x2many_2d_matrix +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-06 15:50+0000\n" +"PO-Revision-Date: 2015-11-07 11:22+0000\n" +"Last-Translator: <>\n" +"Language-Team: French (http://www.transifex.com/oca/OCA-web-8-0/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: web_widget_x2many_2d_matrix +#. openerp-web +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#, python-format +msgid "Total" +msgstr "Total" diff --git a/web_widget_x2many_2d_matrix/i18n/hr.po b/web_widget_x2many_2d_matrix/i18n/hr.po new file mode 100644 index 000000000000..f209e294170b --- /dev/null +++ b/web_widget_x2many_2d_matrix/i18n/hr.po @@ -0,0 +1,27 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_x2many_2d_matrix +# +# Translators: +# Ana-Maria Olujić , 2016 +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-08-25 00:51+0000\n" +"PO-Revision-Date: 2016-08-19 11:47+0000\n" +"Last-Translator: Ana-Maria Olujić \n" +"Language-Team: Croatian (http://www.transifex.com/oca/OCA-web-8-0/language/hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: web_widget_x2many_2d_matrix +#. openerp-web +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#, python-format +msgid "Total" +msgstr "Ukupno" diff --git a/web_widget_x2many_2d_matrix/i18n/it.po b/web_widget_x2many_2d_matrix/i18n/it.po new file mode 100644 index 000000000000..5b5d0bf31c36 --- /dev/null +++ b/web_widget_x2many_2d_matrix/i18n/it.po @@ -0,0 +1,26 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_x2many_2d_matrix +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-17 07:30+0000\n" +"PO-Revision-Date: 2015-11-07 11:22+0000\n" +"Last-Translator: <>\n" +"Language-Team: Italian (http://www.transifex.com/oca/OCA-web-8-0/language/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_widget_x2many_2d_matrix +#. openerp-web +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#, python-format +msgid "Total" +msgstr "Totale" diff --git a/web_widget_x2many_2d_matrix/i18n/pt_BR.po b/web_widget_x2many_2d_matrix/i18n/pt_BR.po new file mode 100644 index 000000000000..c56e07fa61ce --- /dev/null +++ b/web_widget_x2many_2d_matrix/i18n/pt_BR.po @@ -0,0 +1,26 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_x2many_2d_matrix +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-11 02:18+0000\n" +"PO-Revision-Date: 2016-03-05 16:20+0000\n" +"Last-Translator: danimaribeiro \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-web-8-0/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: web_widget_x2many_2d_matrix +#. openerp-web +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#, python-format +msgid "Total" +msgstr "Total" diff --git a/web_widget_x2many_2d_matrix/i18n/sl.po b/web_widget_x2many_2d_matrix/i18n/sl.po new file mode 100644 index 000000000000..07ae09c5d338 --- /dev/null +++ b/web_widget_x2many_2d_matrix/i18n/sl.po @@ -0,0 +1,26 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_x2many_2d_matrix +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-11-23 13:46+0000\n" +"PO-Revision-Date: 2015-11-08 05:48+0000\n" +"Last-Translator: Matjaž Mozetič \n" +"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-web-8-0/language/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: web_widget_x2many_2d_matrix +#. openerp-web +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#, python-format +msgid "Total" +msgstr "Skupaj" diff --git a/web_widget_x2many_2d_matrix/i18n/tr.po b/web_widget_x2many_2d_matrix/i18n/tr.po new file mode 100644 index 000000000000..635773bda8e4 --- /dev/null +++ b/web_widget_x2many_2d_matrix/i18n/tr.po @@ -0,0 +1,27 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_x2many_2d_matrix +# +# Translators: +# Ahmet Altınışık , 2015 +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-01-08 21:34+0000\n" +"PO-Revision-Date: 2015-12-30 22:00+0000\n" +"Last-Translator: Ahmet Altınışık \n" +"Language-Team: Turkish (http://www.transifex.com/oca/OCA-web-8-0/language/tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: web_widget_x2many_2d_matrix +#. openerp-web +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#, python-format +msgid "Total" +msgstr "Toplam" From ad226bef7da1f4b25680ea89f120cf59863cc48a Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Mon, 18 Jan 2016 16:41:25 +0100 Subject: [PATCH 027/399] [IMP] web_widget_x2many_2d_matrix: Several improvements * README update to newest OCA template * Example in README * Massive performance boost for big matrices, specially on Firefox * Assign id on row in order to find it back in all cases * Fix #321, choked on cached writes --- web_widget_x2many_2d_matrix/README.rst | 48 ++++++-- .../src/js/web_widget_x2many_2d_matrix.js | 112 ++++++++++++------ 2 files changed, 120 insertions(+), 40 deletions(-) diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst index a6b436e17cf9..7c880b1316aa 100644 --- a/web_widget_x2many_2d_matrix/README.rst +++ b/web_widget_x2many_2d_matrix/README.rst @@ -1,3 +1,7 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :alt: License: AGPL-3 + +=========================== 2D matrix for x2many fields =========================== @@ -51,12 +55,41 @@ show_row_totals show_column_totals If field_value is a numeric field, calculate column totals +Example +======= + +You need a data structure already filled with values. Let's assume we want to use this widget in a wizard that lets the user fill in planned hours for one task per project per user. In this case, we can use ``project.task`` as our data model and point to it from our wizard. The crucial part is that we fill the field in the default function:: + + class MyWizard(models.TransientModel): + _name = 'my.wizard' + + def _default_task_ids(self): + # your list of project should come from the context, some selection + # in a previous wizard or wherever else + projects = self.env['project.project'].browse([1, 2, 3]) + # same with users + users = self.env['res.users'].browse([1, 2, 3]) + return [ + (0, 0, {'project_id': p.id, 'user_id': u.id, 'planned_hours': 0}) + # if the project doesn't have a task for the user, create a new one + if not p.task_ids.filtered(lambda x: x.user_id == u) else + # otherwise, return the task + (4, p.task_ids.filtered(lambda x: x.user_id == u)[0].id) + for p in projects + for u in users + ] + + task_ids = fields.Many2many('project.task', default=_default_task_ids) + +Now in our wizard, we can use:: + + + Known issues / Roadmap ====================== * it would be worth trying to instantiate the proper field widget and let it render the input - Bug Tracker =========== @@ -65,7 +98,6 @@ In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed feedback `here `_. - Credits ======= @@ -77,12 +109,14 @@ Contributors Maintainer ---------- -.. image:: http://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: http://odoo-community.org +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org This module is maintained by the OCA. -OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. +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. +To contribute to this module, please visit https://odoo-community.org. 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 5d4ce7854587..4dbcb4cc9c71 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 @@ -31,6 +31,8 @@ openerp.web_widget_x2many_2d_matrix = function(instance) // those will be filled with rows from the dataset by_x_axis: {}, by_y_axis: {}, + by_id: {}, + // configuration values field_x_axis: 'x', field_label_x_axis: 'x', field_y_axis: 'y', @@ -81,7 +83,8 @@ openerp.web_widget_x2many_2d_matrix = function(instance) self.by_x_axis = {}; self.by_y_axis = {}; - + self.by_id = {}; + return jQuery.when(result).then(function() { return self.dataset._model.call('fields_get').then(function(fields) @@ -90,7 +93,35 @@ openerp.web_widget_x2many_2d_matrix = function(instance) 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() + }) + // if there are cached writes on the parent dataset, read below + // only returns the written data, which is not enough to properly + // set up our data structure. Read those ids here and patch the + // cache + .then(function() + { + var ids_written = _.map( + self.dataset.to_write, function(x) { return x.id }); + if(!ids_written.length) + { + return; + } + return (new instance.web.Query(self.dataset._model)) + .filter([['id', 'in', ids_written]]) + .all() + .then(function(rows) + { + _.each(rows, function(row) + { + var cache = _.find( + self.dataset.cache, + function(x) { return x.id == row.id } + ); + _.extend(cache.values, row, _.clone(cache.values)); + }) + }) + }) + .then(function() { return self.dataset.read_ids(self.dataset.ids).then(function(rows) { @@ -158,15 +189,31 @@ openerp.web_widget_x2many_2d_matrix = function(instance) }); }, - // to whatever needed to setup internal data structure + // do 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); + // row is a *copy* of a row in dataset.cache, fetch + // a reference to this row in order to have the + // internal data structure point to the same data + // the dataset manipulates + _.every(this.dataset.cache, function(cached_row) + { + if(cached_row.id == row.id) + { + row = cached_row.values; + // new rows don't have that + row.id = cached_row.id; + return false; + } + return true; + }); 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; + this.by_id[row.id] = row; }, // get x axis values in the correct order @@ -255,39 +302,38 @@ openerp.web_widget_x2many_2d_matrix = function(instance) var self = this, grand_total = 0, totals_x = {}, - totals_y = {}; - return self.dataset.read_ids(self.dataset.ids).then(function(rows) + totals_y = {}, + rows = this.by_id, + deferred = jQuery.Deferred(); + _.each(rows, function(row) { - _.each(rows, function(row) - { - var key_x = self.get_field_value(row, self.field_x_axis), - key_y = self.get_field_value(row, self.field_y_axis); - totals_x[key_x] = (totals_x[key_x] || 0) + self.get_field_value(row, self.field_value); - totals_y[key_y] = (totals_y[key_y] || 0) + self.get_field_value(row, self.field_value); - grand_total += self.get_field_value(row, self.field_value); - }); - }).then(function() + var key_x = self.get_field_value(row, self.field_x_axis), + key_y = self.get_field_value(row, self.field_y_axis); + totals_x[key_x] = (totals_x[key_x] || 0) + self.get_field_value(row, self.field_value); + totals_y[key_y] = (totals_y[key_y] || 0) + self.get_field_value(row, self.field_value); + grand_total += self.get_field_value(row, self.field_value); + }); + _.each(totals_y, function(total, y) { - _.each(totals_y, function(total, y) - { - self.$el.find( - _.str.sprintf('td.row_total[data-y="%s"]', y)).text( - self.format_xy_value(total)); - }); - _.each(totals_x, function(total, x) - { - self.$el.find( - _.str.sprintf('td.column_total[data-x="%s"]', x)).text( - self.format_xy_value(total)); - }); - self.$el.find('.grand_total').text( - self.format_xy_value(grand_total)) - return { - totals_x: totals_x, - totals_y: totals_y, - grand_total: grand_total, - }; + self.$el.find( + _.str.sprintf('td.row_total[data-y="%s"]', y)).text( + self.format_xy_value(total)); + }); + _.each(totals_x, function(total, x) + { + self.$el.find( + _.str.sprintf('td.column_total[data-x="%s"]', x)).text( + self.format_xy_value(total)); + }); + self.$el.find('.grand_total').text( + self.format_xy_value(grand_total)) + deferred.resolve({ + totals_x: totals_x, + totals_y: totals_y, + grand_total: grand_total, + rows: rows, }); + return deferred; }, setup_many2one_axes: function() From 11e0becb1c993c4746c7528632e62cb90eb106d4 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Wed, 14 Sep 2016 09:32:56 +0200 Subject: [PATCH 028/399] [IMP] web_widget_x2many_2d_matrix: New option field_att_ Declare as many options prefixed with this string as you need for binding a field value with an HTML node attribute (disabled, class, style...) called as the `` passed in the option. NOTE: This doesn't prevent to require to fill the full matrix with all the combination records. --- web_widget_x2many_2d_matrix/README.rst | 38 ++++++++++++---- web_widget_x2many_2d_matrix/__openerp__.py | 35 +++------------ .../src/js/web_widget_x2many_2d_matrix.js | 45 ++++++++++--------- .../src/xml/web_widget_x2many_2d_matrix.xml | 2 +- 4 files changed, 63 insertions(+), 57 deletions(-) diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst index 7c880b1316aa..83c29328c1d1 100644 --- a/web_widget_x2many_2d_matrix/README.rst +++ b/web_widget_x2many_2d_matrix/README.rst @@ -1,5 +1,6 @@ .. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :alt: License: AGPL-3 + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 =========================== 2D matrix for x2many fields @@ -8,7 +9,8 @@ This module allows to show an x2many field with 3-tuples ($x_value, $y_value, $value) in a table - $x_value1 $x_value2 +========= =========== =========== +\ $x_value1 $x_value2 ========= =========== =========== $y_value1 $value(1/1) $value(2/1) $y_value2 $value(1/2) $value(2/2) @@ -23,7 +25,9 @@ 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. +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 ugly +hacks. Usage ===== @@ -54,11 +58,23 @@ 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 +field_att_ + Declare as many options prefixed with this string as you need for binding + a field value with an HTML node attribute (disabled, class, style...) + called as the `` passed in the option. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/162/8.0 Example ======= -You need a data structure already filled with values. Let's assume we want to use this widget in a wizard that lets the user fill in planned hours for one task per project per user. In this case, we can use ``project.task`` as our data model and point to it from our wizard. The crucial part is that we fill the field in the default function:: +You need a data structure already filled with values. Let's assume we want to +use this widget in a wizard that lets the user fill in planned hours for one +task per project per user. In this case, we can use ``project.task`` as our +data model and point to it from our wizard. The crucial part is that we fill +the field in the default function:: class MyWizard(models.TransientModel): _name = 'my.wizard' @@ -85,6 +101,11 @@ Now in our wizard, we can use:: +Note that all values in the matrix must exist, so you need to create them +previously if not present, but you can control visually the editability of +the fields in the matrix through `field_att_disabled` option with a control +field. + Known issues / Roadmap ====================== @@ -93,10 +114,10 @@ Known issues / Roadmap Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. -In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed feedback -`here `_. +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. Credits ======= @@ -105,6 +126,7 @@ Contributors ------------ * Holger Brunn +* Pedro M. Baeza Maintainer ---------- diff --git a/web_widget_x2many_2d_matrix/__openerp__.py b/web_widget_x2many_2d_matrix/__openerp__.py index e48c3a6e6d6a..87dc3541c5b9 100644 --- a/web_widget_x2many_2d_matrix/__openerp__.py +++ b/web_widget_x2many_2d_matrix/__openerp__.py @@ -1,27 +1,13 @@ # -*- 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 . -# -############################################################################## +# Copyright 2015 Holger Brunn +# Copyright 2016 Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + { "name": "2D matrix for x2many fields", - "version": "8.0.1.0.0", + "version": "8.0.1.1.0", "author": "Therp BV, " + "Tecnativa," "Odoo Community Association (OCA)", "license": "AGPL-3", "category": "Hidden/Dependency", @@ -35,12 +21,5 @@ "qweb": [ 'static/src/xml/web_widget_x2many_2d_matrix.xml', ], - "test": [ - ], - "auto_install": False, - 'installable': False, - "application": False, - "external_dependencies": { - 'python': [], - }, + "installable": True, } 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 4dbcb4cc9c71..5f6147f4d09e 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 @@ -1,23 +1,6 @@ -//-*- 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 . -// -//############################################################################ +/* Copyright 2015 Holger Brunn + * Copyright 2016 Pedro M. Baeza + * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ openerp.web_widget_x2many_2d_matrix = function(instance) { @@ -44,6 +27,8 @@ openerp.web_widget_x2many_2d_matrix = function(instance) show_column_totals: true, // this will be filled with the model's fields_get fields: {}, + // Store fields used to fill HTML attributes + fields_att: {}, // read parameters init: function(field_manager, node) @@ -53,6 +38,12 @@ openerp.web_widget_x2many_2d_matrix = function(instance) 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; + for (var property in node.attrs) { + if (property.startsWith("field_att_")) { + this.fields_att[property.substring(10)] = node.attrs[property]; + } + } + this.field_editability = node.attrs.field_editability || this.field_editability; 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); @@ -261,6 +252,20 @@ openerp.web_widget_x2many_2d_matrix = function(instance) return this.by_x_axis[x][y]['id']; }, + get_xy_att: function(x, y) + { + var vals = {}; + for (var att in this.fields_att) { + var val = this.get_field_value( + this.by_x_axis[x][y], this.fields_att[att]); + // Discard empty values + if (val) { + vals[att] = val; + } + } + return vals; + }, + // return the value of a coordinate get_xy_value: function(x, y) { 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 35f1669bc197..ca6b687f53b2 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,7 +16,7 @@ - + From e2f26fb2111b5002b175347eafe4b5f3d45003e0 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 16 Sep 2016 14:35:54 +0200 Subject: [PATCH 029/399] [MIG] web_widget_x2many_2d_matrix: Migration to 9.0 --- web_widget_x2many_2d_matrix/README.rst | 9 ++++ web_widget_x2many_2d_matrix/__openerp__.py | 2 +- .../src/js/web_widget_x2many_2d_matrix.js | 53 ++++++++++++------- 3 files changed, 44 insertions(+), 20 deletions(-) diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst index 83c29328c1d1..dc8a480f1eae 100644 --- a/web_widget_x2many_2d_matrix/README.rst +++ b/web_widget_x2many_2d_matrix/README.rst @@ -110,6 +110,15 @@ Known issues / Roadmap ====================== * it would be worth trying to instantiate the proper field widget and let it render the input +* If you pass values with an onchange, you need to overwrite the model's method + `onchange` for making the widget work:: + + @api.multi + def onchange(self, values, field_name, field_onchange): + if "one2many_field" in field_onchange: + for sub in []: + field_onchange.setdefault("one2many_field." + sub, u"") + return super(model, self).onchange(values, field_name, field_onchange) Bug Tracker =========== diff --git a/web_widget_x2many_2d_matrix/__openerp__.py b/web_widget_x2many_2d_matrix/__openerp__.py index 87dc3541c5b9..a8f4e8cf07f7 100644 --- a/web_widget_x2many_2d_matrix/__openerp__.py +++ b/web_widget_x2many_2d_matrix/__openerp__.py @@ -5,7 +5,7 @@ { "name": "2D matrix for x2many fields", - "version": "8.0.1.1.0", + "version": "9.0.1.0.0", "author": "Therp BV, " "Tecnativa," "Odoo Community Association (OCA)", 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 5f6147f4d09e..4087e88e379b 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 @@ -2,12 +2,16 @@ * Copyright 2016 Pedro M. Baeza * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ -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({ +odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { + "use strict"; + + var core = require('web.core'); + var formats = require('web.formats'); + var FieldOne2Many = core.form_widget_registry.get('one2many'); + var Model = require('web.Model'); + var data = require('web.data'); + + var WidgetX2Many2dMatrix = FieldOne2Many.extend({ template: 'FieldX2Many2dMatrix', widget_class: 'oe_form_field_x2many_2d_matrix', @@ -46,7 +50,7 @@ openerp.web_widget_x2many_2d_matrix = function(instance) this.field_editability = node.attrs.field_editability || this.field_editability; 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 this._super(field_manager, node); }, // return a field's value, id in case it's a one2many field @@ -67,10 +71,10 @@ openerp.web_widget_x2many_2d_matrix = function(instance) }, // setup our datastructure for simple access in the template - set_value: function() + set_value: function(value_) { var self = this, - result = this._super.apply(this, arguments); + result = this._super(value_); self.by_x_axis = {}; self.by_y_axis = {}; @@ -150,7 +154,7 @@ openerp.web_widget_x2many_2d_matrix = function(instance) { return; } - var model = new instance.web.Model(self.fields[field].relation); + var model = new Model(self.fields[field].relation); deferrends.push(model.call( 'name_get', [_.map(_.keys(rows), function(key) {return parseInt(key)})]) @@ -171,7 +175,7 @@ openerp.web_widget_x2many_2d_matrix = function(instance) self.compute_totals(); self.setup_many2one_axes(); self.$el.find('.edit').on( - 'change', self.proxy(self.xy_value_change)); + 'change', self.proxy(self.xy_value_change)); self.effective_readonly_change(); } return jQuery.when.apply(jQuery, deferrends); @@ -290,14 +294,14 @@ openerp.web_widget_x2many_2d_matrix = function(instance) // parse a value from user input parse_xy_value: function(val) { - return instance.web.parse_value( + return formats.parse_value( val, {'type': this.fields[this.field_value].type}); }, // format a value from the database for display format_xy_value: function(val) { - return instance.web.format_value( + return formats.format_value( val, {'type': this.fields[this.field_value].type}); }, @@ -381,7 +385,7 @@ openerp.web_widget_x2many_2d_matrix = function(instance) this.on("change:effective_readonly", this, this.proxy(this.effective_readonly_change)); this.effective_readonly_change(); - return this._super.apply(this, arguments); + return this._super(); }, xy_value_change: function(e) @@ -423,9 +427,20 @@ openerp.web_widget_x2many_2d_matrix = function(instance) return this.$el.find('.oe_form_invalid').length == 0; }, - // deactivate view related functions - load_views: function() {}, - reload_current_view: function() {}, - get_active_view: function() {}, + load_views: function() { + // Needed for removing the initial empty tree view when the widget + // is loaded + var self = this, + result = this._super(); + + return $.when(result).then(function() + { + self.set_value(false); + }); + }, }); -} + + core.form_widget_registry.add('x2many_2d_matrix', WidgetX2Many2dMatrix); + + return WidgetX2Many2dMatrix; +}); From 636399fb6876d9ae9c04313888c17006d8eeda5a Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Fri, 16 Sep 2016 17:56:53 +0200 Subject: [PATCH 030/399] [IMP] web_widget_x2many_2d_matrix: Use new JS modularized API. --- .../static/src/js/web_widget_x2many_2d_matrix.js | 14 ++++++++------ 1 file changed, 8 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 4087e88e379b..e570949d85da 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 @@ -10,6 +10,8 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { var FieldOne2Many = core.form_widget_registry.get('one2many'); var Model = require('web.Model'); var data = require('web.data'); + var _ = require('_'); + var $ = require('$'); var WidgetX2Many2dMatrix = FieldOne2Many.extend({ template: 'FieldX2Many2dMatrix', @@ -80,7 +82,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { self.by_y_axis = {}; self.by_id = {}; - return jQuery.when(result).then(function() + return $.when(result).then(function() { return self.dataset._model.call('fields_get').then(function(fields) { @@ -101,7 +103,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { { return; } - return (new instance.web.Query(self.dataset._model)) + return (new data.Query(self.dataset._model)) .filter([['id', 'in', ids_written]]) .all() .then(function(rows) @@ -178,7 +180,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { 'change', self.proxy(self.xy_value_change)); self.effective_readonly_change(); } - return jQuery.when.apply(jQuery, deferrends); + return $.when.apply($, deferrends); }); }); }); @@ -313,7 +315,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { totals_x = {}, totals_y = {}, rows = this.by_id, - deferred = jQuery.Deferred(); + deferred = $.Deferred(); _.each(rows, function(row) { var key_x = self.get_field_value(row, self.field_x_axis), @@ -369,7 +371,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { type: 'ir.actions.act_window', name: this.fields[field].string, res_model: this.fields[field].relation, - res_id: jQuery(e.currentTarget).data(id_attribute), + res_id: $(e.currentTarget).data(id_attribute), views: [[false, 'form']], target: 'current', }) @@ -390,7 +392,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { xy_value_change: function(e) { - var $this = jQuery(e.currentTarget), + var $this = $(e.currentTarget), val = $this.val(); if(this.validate_xy_value(val)) { From 41f7924c39ba91b7fcbc1a99b04ed242ca560850 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Wed, 21 Sep 2016 18:24:51 +0200 Subject: [PATCH 031/399] [IMP] web_widget_x2many_2d_matrix: Include x_axis_clickable and y_axis_clickable attrs XML attributes for the widget that allows to configure if the axis will be clickable or not in case the source field is a many2one field. --- web_widget_x2many_2d_matrix/README.rst | 12 +++++++++-- .../src/js/web_widget_x2many_2d_matrix.js | 20 +++++++++++++++---- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst index dc8a480f1eae..6628a81ea877 100644 --- a/web_widget_x2many_2d_matrix/README.rst +++ b/web_widget_x2many_2d_matrix/README.rst @@ -52,12 +52,20 @@ 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 +x_axis_clickable + It indicates if the X axis allows to be clicked for navigating to the field + (if it's a many2one field). True by default +y_axis_clickable + It indicates if the Y axis allows to be clicked for navigating to the field + (if it's a many2one field). True by default field_value Show this field as value show_row_totals - If field_value is a numeric field, calculate row totals + If field_value is a numeric field, it indicates if you want to calculate + row totals. True by default show_column_totals - If field_value is a numeric field, calculate column totals + If field_value is a numeric field, it indicates if you want to calculate + column totals. True by default field_att_ Declare as many options prefixed with this string as you need for binding a field value with an HTML node attribute (disabled, class, style...) 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 e570949d85da..c5631593097b 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 @@ -27,6 +27,8 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { field_y_axis: 'y', field_label_y_axis: 'y', field_value: 'value', + x_axis_clickable: true, + y_axis_clickable: true, // information about our datatype is_numeric: false, show_row_totals: true, @@ -36,6 +38,14 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { // Store fields used to fill HTML attributes fields_att: {}, + parse_boolean: function(val) + { + if (val.toLowerCase() === 'true' || val === '1') { + return true; + } + return false; + }, + // read parameters init: function(field_manager, node) { @@ -43,6 +53,8 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { 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.x_axis_clickable = node.attrs.x_axis_clickable != undefined ? this.parse_boolean(node.attrs.x_axis_clickable) : this.x_axis_clickable; + this.y_axis_clickable = node.attrs.y_axis_clickable != undefined ? this.parse_boolean(node.attrs.y_axis_clickable) : this.y_axis_clickable; this.field_value = node.attrs.field_value || this.field_value; for (var property in node.attrs) { if (property.startsWith("field_att_")) { @@ -50,8 +62,8 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { } } this.field_editability = node.attrs.field_editability || this.field_editability; - 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; + this.show_row_totals = node.attrs.show_row_totals != undefined ? this.parse_boolean(node.attrs.show_row_totals) : this.show_row_totals; + this.show_column_totals = node.attrs.show_column_totals != undefined ? this.parse_boolean(node.attrs.show_column_totals) : this.show_column_totals; return this._super(field_manager, node); }, @@ -349,14 +361,14 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { setup_many2one_axes: function() { - if(this.fields[this.field_x_axis].type == 'many2one') + if(this.fields[this.field_x_axis].type == 'many2one' && this.x_axis_clickable) { 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') + if(this.fields[this.field_y_axis].type == 'many2one' && this.y_axis_clickable) { this.$el.find('tr[data-y] th').addClass('oe_link') .click(_.partial( From 4872097282bef41f53ade93b841ee0bd34b49367 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Wed, 21 Sep 2016 20:39:15 +0200 Subject: [PATCH 032/399] [FIX] web_widget_x2many_2d_matrix: Use existing value in load_views --- .../static/src/js/web_widget_x2many_2d_matrix.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c5631593097b..782ed21a8235 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 @@ -449,7 +449,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { return $.when(result).then(function() { - self.set_value(false); + self.set_value(self.get_value()); }); }, }); From 5c8a7f5a8c47029ece19324974bd134022afd7e5 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 22 Sep 2016 09:45:23 +0200 Subject: [PATCH 033/399] [IMP] web_widget_x2many_2d_matrix: Better options parsing --- .../static/src/js/web_widget_x2many_2d_matrix.js | 8 ++++---- 1 file changed, 4 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 782ed21a8235..3e182047b807 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 @@ -53,8 +53,8 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { 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.x_axis_clickable = node.attrs.x_axis_clickable != undefined ? this.parse_boolean(node.attrs.x_axis_clickable) : this.x_axis_clickable; - this.y_axis_clickable = node.attrs.y_axis_clickable != undefined ? this.parse_boolean(node.attrs.y_axis_clickable) : this.y_axis_clickable; + this.x_axis_clickable = this.parse_boolean(node.attrs.x_axis_clickable || '1'); + this.y_axis_clickable = this.parse_boolean(node.attrs.y_axis_clickable || '1'); this.field_value = node.attrs.field_value || this.field_value; for (var property in node.attrs) { if (property.startsWith("field_att_")) { @@ -62,8 +62,8 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { } } this.field_editability = node.attrs.field_editability || this.field_editability; - this.show_row_totals = node.attrs.show_row_totals != undefined ? this.parse_boolean(node.attrs.show_row_totals) : this.show_row_totals; - this.show_column_totals = node.attrs.show_column_totals != undefined ? this.parse_boolean(node.attrs.show_column_totals) : this.show_column_totals; + this.show_row_totals = this.parse_boolean(node.attrs.show_row_totals || '1'); + this.show_column_totals = this.parse_boolean(node.attrs.show_column_totals || '1'); return this._super(field_manager, node); }, From 87d5c60e0fc3bbfaad34e7d69c2d4c5df7972dda Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 22 Sep 2016 09:48:03 +0200 Subject: [PATCH 034/399] [IMP+ web_widget_x2many_2d_matrix: Add roadmap --- web_widget_x2many_2d_matrix/README.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst index 6628a81ea877..85d5dd712515 100644 --- a/web_widget_x2many_2d_matrix/README.rst +++ b/web_widget_x2many_2d_matrix/README.rst @@ -117,7 +117,9 @@ field. Known issues / Roadmap ====================== -* it would be worth trying 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 +* Let the widget deal with the missing values of the full Cartesian product, + instead of being forced to pre-fill all the possible values. * If you pass values with an onchange, you need to overwrite the model's method `onchange` for making the widget work:: From 0415d767f547a89aa8aaf429c22acf18b509974e Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 22 Sep 2016 12:09:34 +0200 Subject: [PATCH 035/399] [IMP] web_widget_x2many_2d_matrix: Remove unneeded code --- .../src/js/web_widget_x2many_2d_matrix.js | 45 ------------------- 1 file changed, 45 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 3e182047b807..8d2e3fc680fd 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 @@ -134,55 +134,11 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { { return self.dataset.read_ids(self.dataset.ids).then(function(rows) { - var read_many2one = {}, - many2one_fields = [ - self.field_x_axis, self.field_y_axis, - self.field_label_x_axis, self.field_label_y_axis - ]; - // prepare to read many2one names if necessary (we can get (id, name) or just id as value) - _.each(many2one_fields, function(field) - { - if(self.fields[field].type == 'many2one') - { - read_many2one[field] = {}; - } - }); // setup data structure _.each(rows, function(row) { self.add_xy_row(row); - _.each(read_many2one, function(rows, field) - { - if(!_.isArray(row[field])) - { - rows[row[field]] = rows[row[field]] || [] - rows[row[field]].push(row); - } - }); }); - // read many2one fields if necessary - var deferrends = []; - _.each(read_many2one, function(rows, field) - { - if(_.isEmpty(rows)) - { - return; - } - var model = new Model(self.fields[field].relation); - deferrends.push(model.call( - 'name_get', - [_.map(_.keys(rows), function(key) {return parseInt(key)})]) - .then(function(names) - { - _.each(names, function(name) - { - _.each(rows[name[0]], function(row) - { - row[field] = name; - }); - }); - })); - }) if(self.is_started && !self.no_rerender) { self.renderElement(); @@ -192,7 +148,6 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { 'change', self.proxy(self.xy_value_change)); self.effective_readonly_change(); } - return $.when.apply($, deferrends); }); }); }); From 5192b71b00e7e79348f539767dc2125b89ff923d Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 22 Sep 2016 12:11:40 +0200 Subject: [PATCH 036/399] [FIX] web_widget_x2many_2d_matrix: Init correctly the view --- .../static/src/js/web_widget_x2many_2d_matrix.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8d2e3fc680fd..8a51b3a6b8b0 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 @@ -404,7 +404,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { return $.when(result).then(function() { - self.set_value(self.get_value()); + self.renderElement(); }); }, }); From dfbee0ec0b433647d64d0b5ead9555944c94efa6 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 6 Oct 2016 16:12:54 +0200 Subject: [PATCH 037/399] [MIG] Make modules uninstallable --- web_widget_x2many_2d_matrix/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_widget_x2many_2d_matrix/__openerp__.py b/web_widget_x2many_2d_matrix/__openerp__.py index a8f4e8cf07f7..8b55c97d5e97 100644 --- a/web_widget_x2many_2d_matrix/__openerp__.py +++ b/web_widget_x2many_2d_matrix/__openerp__.py @@ -21,5 +21,5 @@ "qweb": [ 'static/src/xml/web_widget_x2many_2d_matrix.xml', ], - "installable": True, + 'installable': False, } From 179e900efac91e9175076f90ede7c1be5984ea37 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 6 Oct 2016 16:13:01 +0200 Subject: [PATCH 038/399] [MIG] Rename manifest files --- web_widget_x2many_2d_matrix/{__openerp__.py => __manifest__.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename web_widget_x2many_2d_matrix/{__openerp__.py => __manifest__.py} (100%) diff --git a/web_widget_x2many_2d_matrix/__openerp__.py b/web_widget_x2many_2d_matrix/__manifest__.py similarity index 100% rename from web_widget_x2many_2d_matrix/__openerp__.py rename to web_widget_x2many_2d_matrix/__manifest__.py From ec76d14b87ff51aad1a1cbc69589155236590fef Mon Sep 17 00:00:00 2001 From: jesusVMayor Date: Mon, 24 Apr 2017 12:28:47 +0200 Subject: [PATCH 039/399] Migration of web_widget_x2many_2d_matrix to 10.0 --- web_widget_x2many_2d_matrix/__manifest__.py | 4 ++-- .../static/src/css/web_widget_x2many_2d_matrix.css | 2 +- .../static/src/js/web_widget_x2many_2d_matrix.js | 7 +++---- .../static/src/xml/web_widget_x2many_2d_matrix.xml | 6 +++--- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/web_widget_x2many_2d_matrix/__manifest__.py b/web_widget_x2many_2d_matrix/__manifest__.py index 8b55c97d5e97..b4651c0741ff 100644 --- a/web_widget_x2many_2d_matrix/__manifest__.py +++ b/web_widget_x2many_2d_matrix/__manifest__.py @@ -5,7 +5,7 @@ { "name": "2D matrix for x2many fields", - "version": "9.0.1.0.0", + "version": "10.0.1.0.0", "author": "Therp BV, " "Tecnativa," "Odoo Community Association (OCA)", @@ -21,5 +21,5 @@ "qweb": [ 'static/src/xml/web_widget_x2many_2d_matrix.xml', ], - 'installable': False, + "installable": True, } 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 d33d4f21bdfb..14ed1c5364fd 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,7 +2,7 @@ { cursor: pointer; } -.openerp .oe_form_field_x2many_2d_matrix .oe_list_content > tbody > tr > td.oe_list_field_cell +.oe_form_field_x2many_2d_matrix .oe_list_content > tbody > tr > td.oe_list_field_cell { white-space: normal; } 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 8a51b3a6b8b0..43fa84bb4998 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 @@ -10,8 +10,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { var FieldOne2Many = core.form_widget_registry.get('one2many'); var Model = require('web.Model'); var data = require('web.data'); - var _ = require('_'); - var $ = require('$'); + var $ = require('jquery'); var WidgetX2Many2dMatrix = FieldOne2Many.extend({ template: 'FieldX2Many2dMatrix', @@ -383,10 +382,10 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { effective_readonly_change: function() { this.$el - .find('tbody td.oe_list_field_cell span.oe_form_field .edit') + .find('tbody .read') .toggle(!this.get('effective_readonly')); this.$el - .find('tbody td.oe_list_field_cell span.oe_form_field .read') + .find('tbody .read') .toggle(this.get('effective_readonly')); this.$el.find('.edit').first().focus(); }, 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 ca6b687f53b2..a1a0d52151ca 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,7 +1,7 @@

- +
- From 7bf817f20c507de2d109f745aa62350cb4ba72e1 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 28 Apr 2017 20:01:00 +0200 Subject: [PATCH 040/399] [IMP] web_widget_x2many_2d_matrix: Update example There are now more required fields for a task. --- web_widget_x2many_2d_matrix/README.rst | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst index 85d5dd712515..40098bff14fe 100644 --- a/web_widget_x2many_2d_matrix/README.rst +++ b/web_widget_x2many_2d_matrix/README.rst @@ -84,6 +84,8 @@ task per project per user. In this case, we can use ``project.task`` as our data model and point to it from our wizard. The crucial part is that we fill the field in the default function:: + from odoo import fields, models + class MyWizard(models.TransientModel): _name = 'my.wizard' @@ -94,7 +96,13 @@ the field in the default function:: # same with users users = self.env['res.users'].browse([1, 2, 3]) return [ - (0, 0, {'project_id': p.id, 'user_id': u.id, 'planned_hours': 0}) + (0, 0, { + 'project_id': p.id, + 'user_id': u.id, + 'planned_hours': 0, + 'message_needaction': False, + 'date_deadline': fields.Date.today(), + }) # if the project doesn't have a task for the user, create a new one if not p.task_ids.filtered(lambda x: x.user_id == u) else # otherwise, return the task From 16dabdb4322b5246f5655f175fe9756b5a5d722c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Pigeon?= Date: Wed, 21 Jun 2017 16:56:59 +0200 Subject: [PATCH 041/399] [10.0] web_widget_x2many_2d_matrix: update README --- web_widget_x2many_2d_matrix/README.rst | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst index 40098bff14fe..d81d100cca64 100644 --- a/web_widget_x2many_2d_matrix/README.rst +++ b/web_widget_x2many_2d_matrix/README.rst @@ -40,7 +40,14 @@ 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: @@ -115,7 +122,14 @@ the field in the default function:: Now in our wizard, we can use:: - + + + + + + + + Note that all values in the matrix must exist, so you need to create them previously if not present, but you can control visually the editability of From 7c991dea0cced50f59ae4a9e9b44d2244b4a3b65 Mon Sep 17 00:00:00 2001 From: Richard deMeester Date: Thu, 31 Aug 2017 01:03:06 +1000 Subject: [PATCH 042/399] [FIX] web_widget_x2many_2d_matrix: fixes (#712) * Patches to make module operational. * Minor fix to Readonly Switch * Fix to render to set change attribute. * Totals recompute. Fixes #697 --- web_widget_x2many_2d_matrix/__manifest__.py | 2 +- .../static/src/js/web_widget_x2many_2d_matrix.js | 8 ++++++-- .../static/src/xml/web_widget_x2many_2d_matrix.xml | 4 ++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/web_widget_x2many_2d_matrix/__manifest__.py b/web_widget_x2many_2d_matrix/__manifest__.py index b4651c0741ff..69b703cd5678 100644 --- a/web_widget_x2many_2d_matrix/__manifest__.py +++ b/web_widget_x2many_2d_matrix/__manifest__.py @@ -5,7 +5,7 @@ { "name": "2D matrix for x2many fields", - "version": "10.0.1.0.0", + "version": "10.0.1.0.1", "author": "Therp BV, " "Tecnativa," "Odoo Community Association (OCA)", 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 43fa84bb4998..ec88f1eafd1a 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 @@ -131,7 +131,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { }) .then(function() { - return self.dataset.read_ids(self.dataset.ids).then(function(rows) + return self.dataset.read_ids(self.dataset.ids, self.fields).then(function(rows) { // setup data structure _.each(rows, function(row) @@ -369,6 +369,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { $this.val(this.format_xy_value(value)); this.dataset.write($this.data('id'), data); + this.by_id[$this.data('id')][this.field_value] = value; $this.parent().removeClass('oe_form_invalid'); this.compute_totals(); } @@ -382,7 +383,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { effective_readonly_change: function() { this.$el - .find('tbody .read') + .find('tbody .edit') .toggle(!this.get('effective_readonly')); this.$el .find('tbody .read') @@ -404,6 +405,9 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { return $.when(result).then(function() { self.renderElement(); + self.compute_totals(); + self.$el.find('.edit').on( + 'change', self.proxy(self.xy_value_change)); }); }, }); 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 a1a0d52151ca..b7aaaefe1891 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 @@
@@ -14,9 +14,9 @@
+ - + - - + + From 553d38aace26f3c5b611d47bb01f85d3cacaccdf Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Wed, 17 Jan 2018 10:50:20 +0100 Subject: [PATCH 043/399] OCA Transbot updated translations from Transifex --- web_widget_x2many_2d_matrix/i18n/lt.po | 27 +++++++++++++++++++++++ web_widget_x2many_2d_matrix/i18n/nl_NL.po | 27 +++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 web_widget_x2many_2d_matrix/i18n/lt.po create mode 100644 web_widget_x2many_2d_matrix/i18n/nl_NL.po diff --git a/web_widget_x2many_2d_matrix/i18n/lt.po b/web_widget_x2many_2d_matrix/i18n/lt.po new file mode 100644 index 000000000000..d9620d989bed --- /dev/null +++ b/web_widget_x2many_2d_matrix/i18n/lt.po @@ -0,0 +1,27 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_x2many_2d_matrix +# +# Translators: +# Viktoras Norkus , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-25 01:58+0000\n" +"PO-Revision-Date: 2018-01-25 01:58+0000\n" +"Last-Translator: Viktoras Norkus , 2018\n" +"Language-Team: Lithuanian (https://www.transifex.com/oca/teams/23907/lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: lt\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: web_widget_x2many_2d_matrix +#. openerp-web +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#, python-format +msgid "Total" +msgstr "Suma" diff --git a/web_widget_x2many_2d_matrix/i18n/nl_NL.po b/web_widget_x2many_2d_matrix/i18n/nl_NL.po new file mode 100644 index 000000000000..27efab7f526e --- /dev/null +++ b/web_widget_x2many_2d_matrix/i18n/nl_NL.po @@ -0,0 +1,27 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_x2many_2d_matrix +# +# Translators: +# Peter Hageman , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: Peter Hageman , 2017\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nl_NL\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_widget_x2many_2d_matrix +#. openerp-web +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 +#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#, python-format +msgid "Total" +msgstr "Totaal" From b0bfca0689ab4c9b35a8fbbe820a67316bc70bc5 Mon Sep 17 00:00:00 2001 From: Artem Kostyuk Date: Thu, 15 Feb 2018 09:45:16 +0200 Subject: [PATCH 044/399] [11][MIG] web_widget_x2many_2d_matrix WIP --- web_widget_x2many_2d_matrix/README.rst | 6 +- web_widget_x2many_2d_matrix/__init__.py | 1 - web_widget_x2many_2d_matrix/__manifest__.py | 7 +- web_widget_x2many_2d_matrix/i18n/lt.po | 4 +- web_widget_x2many_2d_matrix/i18n/nl_NL.po | 4 +- .../src/js/web_widget_x2many_2d_matrix.js | 65 ++++++++++++------- 6 files changed, 51 insertions(+), 36 deletions(-) diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst index d81d100cca64..6fb555b94582 100644 --- a/web_widget_x2many_2d_matrix/README.rst +++ b/web_widget_x2many_2d_matrix/README.rst @@ -80,7 +80,7 @@ field_att_ .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/162/8.0 + :target: https://runbot.odoo-community.org/runbot/162/11.0 Example ======= @@ -104,6 +104,7 @@ the field in the default function:: users = self.env['res.users'].browse([1, 2, 3]) return [ (0, 0, { + 'name': 'Sample task name', 'project_id': p.id, 'user_id': u.id, 'planned_hours': 0, @@ -158,7 +159,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, -help us smashing it by providing a detailed and welcomed feedback. +help us smash it by providing a detailed and welcomed feedback. Credits ======= @@ -168,6 +169,7 @@ Contributors * Holger Brunn * Pedro M. Baeza +* Artem Kostyuk Maintainer ---------- diff --git a/web_widget_x2many_2d_matrix/__init__.py b/web_widget_x2many_2d_matrix/__init__.py index faef9dac007f..919541c6cab7 100644 --- a/web_widget_x2many_2d_matrix/__init__.py +++ b/web_widget_x2many_2d_matrix/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- ############################################################################## # # OpenERP, Open Source Management Solution diff --git a/web_widget_x2many_2d_matrix/__manifest__.py b/web_widget_x2many_2d_matrix/__manifest__.py index 69b703cd5678..41f69a75ebb0 100644 --- a/web_widget_x2many_2d_matrix/__manifest__.py +++ b/web_widget_x2many_2d_matrix/__manifest__.py @@ -1,14 +1,13 @@ -# -*- coding: utf-8 -*- # Copyright 2015 Holger Brunn # Copyright 2016 Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - { "name": "2D matrix for x2many fields", - "version": "10.0.1.0.1", + "version": "11.0.1.0.0", "author": "Therp BV, " - "Tecnativa," + "Tecnativa, " "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/web", "license": "AGPL-3", "category": "Hidden/Dependency", "summary": "Show list fields as a matrix", diff --git a/web_widget_x2many_2d_matrix/i18n/lt.po b/web_widget_x2many_2d_matrix/i18n/lt.po index d9620d989bed..57a65fc55590 100644 --- a/web_widget_x2many_2d_matrix/i18n/lt.po +++ b/web_widget_x2many_2d_matrix/i18n/lt.po @@ -6,10 +6,10 @@ # Viktoras Norkus , 2018 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 10.0\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-01-25 01:58+0000\n" -"PO-Revision-Date: 2018-01-25 01:58+0000\n" +"PO-Revision-Date: 2018-02-15 12:40+0200\n" "Last-Translator: Viktoras Norkus , 2018\n" "Language-Team: Lithuanian (https://www.transifex.com/oca/teams/23907/lt/)\n" "MIME-Version: 1.0\n" diff --git a/web_widget_x2many_2d_matrix/i18n/nl_NL.po b/web_widget_x2many_2d_matrix/i18n/nl_NL.po index 27efab7f526e..e1fde063c22b 100644 --- a/web_widget_x2many_2d_matrix/i18n/nl_NL.po +++ b/web_widget_x2many_2d_matrix/i18n/nl_NL.po @@ -6,10 +6,10 @@ # Peter Hageman , 2017 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 10.0\n" +"Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-01-03 03:50+0000\n" -"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-02-15 12:39+0200\n" "Last-Translator: Peter Hageman , 2017\n" "Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" "MIME-Version: 1.0\n" 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 ec88f1eafd1a..2c0a0cd92493 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 @@ -6,13 +6,15 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { "use strict"; var core = require('web.core'); - var formats = require('web.formats'); - var FieldOne2Many = core.form_widget_registry.get('one2many'); - var Model = require('web.Model'); + var FieldManagerMixin = require('web.FieldManagerMixin'); + var Widget = require('web.Widget'); + var fieldRegistry = require('web.field_registry'); + var widgetRegistry = require('web.widget_registry'); + var widgetOne2many = widgetRegistry.get('one2many'); var data = require('web.data'); var $ = require('jquery'); - var WidgetX2Many2dMatrix = FieldOne2Many.extend({ + var WidgetX2Many2dMatrix = widgetOne2Many.extend(FieldManagerMixin, { template: 'FieldX2Many2dMatrix', widget_class: 'oe_form_field_x2many_2d_matrix', @@ -46,28 +48,39 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { }, // 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.x_axis_clickable = this.parse_boolean(node.attrs.x_axis_clickable || '1'); - this.y_axis_clickable = this.parse_boolean(node.attrs.y_axis_clickable || '1'); - this.field_value = node.attrs.field_value || this.field_value; - for (var property in node.attrs) { + init: function (parent, fieldname, record, therest) { + var res = this._super(parent, fieldname, record, therest); + FieldManagerMixin.init.call(this); + var node = record.fieldsInfo[therest.viewType][fieldname]; + + this.field_x_axis = node.field_x_axis || this.field_x_axis; + this.field_y_axis = node.field_y_axis || this.field_y_axis; + this.field_label_x_axis = node.field_label_x_axis || this.field_x_axis; + this.field_label_y_axis = node.field_label_y_axis || this.field_y_axis; + this.x_axis_clickable = this.parse_boolean(node.x_axis_clickable || '1'); + this.y_axis_clickable = this.parse_boolean(node.y_axis_clickable || '1'); + this.field_value = node.field_value || this.field_value; + for (var property in node) { if (property.startsWith("field_att_")) { - this.fields_att[property.substring(10)] = node.attrs[property]; + this.fields_att[property.substring(10)] = node[property]; } } - this.field_editability = node.attrs.field_editability || this.field_editability; - this.show_row_totals = this.parse_boolean(node.attrs.show_row_totals || '1'); - this.show_column_totals = this.parse_boolean(node.attrs.show_column_totals || '1'); - return this._super(field_manager, node); + this.field_editability = node.field_editability || this.field_editability; + this.show_row_totals = this.parse_boolean(node.show_row_totals || '1'); + this.show_column_totals = this.parse_boolean(node.show_column_totals || '1'); + this.init_fields(); + // this.set_value(undefined); + + return res; + }, + + init_fields: function() { + return; }, // return a field's value, id in case it's a one2many field get_field_value: function(row, field, many2one_as_name) + // FIXME looks silly { if(this.fields[field].type == 'many2one' && _.isArray(row[field])) { @@ -262,15 +275,13 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { // parse a value from user input parse_xy_value: function(val) { - return formats.parse_value( - val, {'type': this.fields[this.field_value].type}); + return val; }, // format a value from the database for display format_xy_value: function(val) { - return formats.format_value( - val, {'type': this.fields[this.field_value].type}); + return val; }, // compute totals @@ -412,7 +423,11 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { }, }); - core.form_widget_registry.add('x2many_2d_matrix', WidgetX2Many2dMatrix); + fieldRegistry.add( + 'x2many_2d_matrix', WidgetX2Many2dMatrix + ); - return WidgetX2Many2dMatrix; + return { + WidgetX2Many2dMatrix: WidgetX2Many2dMatrix + }; }); From a50436b0e4b60fd6f2f007c4f33b15dbd5808ab1 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Mon, 19 Feb 2018 17:48:06 +0100 Subject: [PATCH 045/399] [MIG+REF][11] web_widget_x2many_2d_matrix The widget has been completely refactored to benefit from the new MVC paradigm introduced in v11. --- .../odoo/addons/web_widget_x2many_2d_matrix | 1 + setup/web_widget_x2many_2d_matrix/setup.cfg | 2 + setup/web_widget_x2many_2d_matrix/setup.py | 6 + web_widget_x2many_2d_matrix/README.rst | 8 +- web_widget_x2many_2d_matrix/__manifest__.py | 7 +- .../src/css/web_widget_x2many_2d_matrix.css | 9 +- .../static/src/js/2d_matrix_renderer.js | 288 ++++++++++++ .../src/js/web_widget_x2many_2d_matrix.js | 433 ------------------ .../static/src/js/widget_x2many_2d_matrix.js | 128 ++++++ .../src/xml/web_widget_x2many_2d_matrix.xml | 36 -- .../views/{templates.xml => assets.xml} | 3 +- 11 files changed, 437 insertions(+), 484 deletions(-) create mode 120000 setup/web_widget_x2many_2d_matrix/odoo/addons/web_widget_x2many_2d_matrix create mode 100644 setup/web_widget_x2many_2d_matrix/setup.cfg create mode 100644 setup/web_widget_x2many_2d_matrix/setup.py create mode 100644 web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js delete 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/js/widget_x2many_2d_matrix.js delete mode 100644 web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml rename web_widget_x2many_2d_matrix/views/{templates.xml => assets.xml} (70%) diff --git a/setup/web_widget_x2many_2d_matrix/odoo/addons/web_widget_x2many_2d_matrix b/setup/web_widget_x2many_2d_matrix/odoo/addons/web_widget_x2many_2d_matrix new file mode 120000 index 000000000000..4d06f547dda2 --- /dev/null +++ b/setup/web_widget_x2many_2d_matrix/odoo/addons/web_widget_x2many_2d_matrix @@ -0,0 +1 @@ +../../../../web_widget_x2many_2d_matrix \ No newline at end of file diff --git a/setup/web_widget_x2many_2d_matrix/setup.cfg b/setup/web_widget_x2many_2d_matrix/setup.cfg new file mode 100644 index 000000000000..3c6e79cf31da --- /dev/null +++ b/setup/web_widget_x2many_2d_matrix/setup.cfg @@ -0,0 +1,2 @@ +[bdist_wheel] +universal=1 diff --git a/setup/web_widget_x2many_2d_matrix/setup.py b/setup/web_widget_x2many_2d_matrix/setup.py new file mode 100644 index 000000000000..28c57bb64031 --- /dev/null +++ b/setup/web_widget_x2many_2d_matrix/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst index 6fb555b94582..69a6d7a472b7 100644 --- a/web_widget_x2many_2d_matrix/README.rst +++ b/web_widget_x2many_2d_matrix/README.rst @@ -92,7 +92,7 @@ data model and point to it from our wizard. The crucial part is that we fill the field in the default function:: from odoo import fields, models - + class MyWizard(models.TransientModel): _name = 'my.wizard' @@ -105,8 +105,8 @@ the field in the default function:: return [ (0, 0, { 'name': 'Sample task name', - 'project_id': p.id, - 'user_id': u.id, + 'project_id': p.id, + 'user_id': u.id, 'planned_hours': 0, 'message_needaction': False, 'date_deadline': fields.Date.today(), @@ -170,6 +170,8 @@ Contributors * Holger Brunn * Pedro M. Baeza * Artem Kostyuk +* Simone Orsi + Maintainer ---------- diff --git a/web_widget_x2many_2d_matrix/__manifest__.py b/web_widget_x2many_2d_matrix/__manifest__.py index 41f69a75ebb0..31fa2d5a97e4 100644 --- a/web_widget_x2many_2d_matrix/__manifest__.py +++ b/web_widget_x2many_2d_matrix/__manifest__.py @@ -1,11 +1,13 @@ # Copyright 2015 Holger Brunn # Copyright 2016 Pedro M. Baeza +# Copyright 2018 Simone Orsi # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "2D matrix for x2many fields", "version": "11.0.1.0.0", "author": "Therp BV, " "Tecnativa, " + "Camptocamp, " "Odoo Community Association (OCA)", "website": "https://github.com/OCA/web", "license": "AGPL-3", @@ -15,10 +17,7 @@ 'web', ], "data": [ - 'views/templates.xml', - ], - "qweb": [ - 'static/src/xml/web_widget_x2many_2d_matrix.xml', + 'views/assets.xml', ], "installable": True, } 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 14ed1c5364fd..907f507d2048 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 @@ -1,8 +1,3 @@ -.oe_form_field_x2many_2d_matrix th.oe_link -{ - cursor: pointer; -} -.oe_form_field_x2many_2d_matrix .oe_list_content > tbody > tr > td.oe_list_field_cell -{ - white-space: normal; +.o_field_x2many_2d_matrix .row-total { + font-weight: bold; } diff --git a/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js b/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js new file mode 100644 index 000000000000..34297dbfdb96 --- /dev/null +++ b/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js @@ -0,0 +1,288 @@ +/* Copyright 2018 Simone Orsi + * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ + +odoo.define('web_widget_x2many_2d_matrix.X2Many2dMatrixRenderer', function (require) { + "use strict"; + + // heavily inspired by Odoo's `ListRenderer` + var BasicRenderer = require('web.BasicRenderer'); + var config = require('web.config'); + var field_utils = require('web.field_utils'); + var utils = require('web.utils'); + var FIELD_CLASSES = { + // copied from ListRenderer + float: 'o_list_number', + integer: 'o_list_number', + monetary: 'o_list_number', + text: 'o_list_text', + }; + + var X2Many2dMatrixRenderer = BasicRenderer.extend({ + + init: function (parent, state, params) { + this._super.apply(this, arguments); + this.editable = params.editable; + this.columns = params.matrix_data.columns; + this.rows = params.matrix_data.rows; + this.matrix_data = params.matrix_data; + }, + _renderView: function () { + var self = this; + + this.$el + .removeClass('table-responsive') + .empty(); + + var $table = $('').addClass('o_list_view table table-condensed table-striped'); + this.$el + .addClass('table-responsive') + .append($table); + + this._computeColumnAggregates(); + this._computeRowAggregates(); + + $table + .append(this._renderHeader()) + .append(this._renderBody()); + if (self.matrix_data.show_column_totals) { + $table.append(this._renderFooter()); + } + return this._super(); + }, + _renderBody: function () { + var $body = $('').append(this._renderRows()); + _.each($body.find('input'), function (td, i) { + $(td).attr('tabindex', i); + }); + return $body; + }, + _renderHeader: function (isGrouped) { + var $tr = $('') + .append(_.map(this.columns, this._renderHeaderCell.bind(this))); + // wipe 1st column header + $tr.find('th:first').empty(); + if (this.matrix_data.show_row_totals) { + $tr.append($('').append($tr); + }, + _renderHeaderCell: function (node) { + var name = node.attrs.name; + var field = this.state.fields[name]; + var $th = $('', {class: 'o_data_row'}).append($cells); + if (row.aggregate) { + $tr.append(self._renderAggregateRowCell(row)); + } + return $tr; + }, + _renderAggregateRowCell: function (row) { + var $cell = $('').append($('').append($cells)); + } + return; + }, + _renderAggregateColCells: function (aggregateValues) { + var self = this; + return _.map(this.columns, function (column, index) { + var $cell = $('') - .append(_.map(this.columns, this._renderHeaderCell.bind(this))); - // wipe 1st column header - $tr.find('th:first').empty(); + // first add y column header, then the data columns, and total if needed + var $tr = $('').append('', {class: 'o_data_row'}).append($cells); + var $tr = $('', {class: 'o_data_row'}); + // add Y label cell first + var value = row.data[0].data[this.matrix_data.field_y_axis]; + if (value.type == 'record') { + value = value.data.display_name; + } + $tr.append($('
', {class: 'total'})); + } + return $('
'); + if (!field) { + return $th; + } + var description; + if (node.attrs.widget) { + description = this.state.fieldsInfo.list[name].Widget.prototype.description; + } + if (description === undefined) { + description = node.attrs.string || field.string; + } + $th.text(description).data('name', name); + + if (field.type === 'float' || field.type === 'integer' || field.type === 'monetary') { + $th.addClass('text-right'); + } + + if (config.debug) { + var fieldDescr = { + field: field, + name: name, + string: description || name, + record: this.state, + attrs: node.attrs, + }; + this._addFieldTooltip(fieldDescr, $th); + } + return $th; + }, + _renderRows: function () { + return _.map(this.rows, this._renderRow.bind(this)); + }, + _renderRow: function (row) { + var self = this; + var $cells = _.map(this.columns, function (node, index) { + var record = row.data[index]; + // make the widget use our field value for each cell + node.attrs.name = self.matrix_data.field_value; + return self._renderBodyCell(record, node, index, {mode: 'readonly'}); + }); + var $tr = $('
', {class: 'row-total text-right'}); + this._apply_aggregate_value($cell, row.aggregate); + return $cell; + }, + _renderBodyCell: function (record, node, colIndex, options) { + var tdClassName = 'o_data_cell'; + if (node.tag === 'button') { + tdClassName += ' o_list_button'; + } else if (node.tag === 'field') { + var typeClass = FIELD_CLASSES[this.state.fields[node.attrs.name].type]; + if (typeClass) { + tdClassName += (' ' + typeClass); + } + if (node.attrs.widget) { + tdClassName += (' o_' + node.attrs.widget + '_cell'); + } + } + var $td = $('', { + 'class': tdClassName, + 'data-form-id': record.id, + 'data-id': record.data.id, + }); + if (colIndex == 0) { + // get 1st column filled w/ Y label + $td.text(record.data[this.matrix_data.field_y_axis]); + return $td; + } + + // We register modifiers on the element so that it gets the correct + // modifiers classes (for styling) + var modifiers = this._registerModifiers(node, record, $td, _.pick(options, 'mode')); + // If the invisible modifiers is true, the element is left empty. + // Indeed, if the modifiers was to change the whole cell would be + // rerendered anyway. + if (modifiers.invisible && !(options && options.renderInvisible)) { + return $td; + } + options.mode = 'edit'; // enforce edit mode + var widget = this._renderFieldWidget(node, record, _.pick(options, 'mode')); + this._handleAttributes(widget.$el, node); + return $td.append(widget.$el); + }, + _renderFooter: function () { + var $cells = this._renderAggregateColCells(); + if ($cells) { + return $('
', {class: 'col-total text-right'}); + if (index == 0) { + // skip 1st column + return $cell; + } + if (column.aggregate) { + self._apply_aggregate_value($cell, column.aggregate); + } + return $cell; + }); + }, + _computeColumnAggregates: function () { + if (!this.matrix_data.show_column_totals) { + return; + } + var self = this, + fname = this.matrix_data.field_value, + field = this.state.fields[fname]; + if (!field) { return; } + var type = field.type; + if (type !== 'integer' && type !== 'float' && type !== 'monetary') { + return; + } + _.each(self.columns, function (column, index) { + column.aggregate = { + fname: fname, + ftype: type, + // TODO: translate + help: 'Sum', + value: 0 + }; + _.each(self.rows, function (row) { + // var record = _.findWhere(self.state.data, {id: col.data.id}); + column.aggregate.value += row.data[index].data[fname]; + }) + }); + }, + _computeRowAggregates: function () { + if (!this.matrix_data.show_row_totals) { + return; + } + var self = this, + fname = this.matrix_data.field_value, + field = this.state.fields[fname]; + if (!field) { return; } + var type = field.type; + if (type !== 'integer' && type !== 'float' && type !== 'monetary') { + return; + } + _.each(self.rows, function (row) { + row.aggregate = { + fname: fname, + ftype: type, + // TODO: translate + help: 'Sum', + value: 0 + }; + _.each(row.data, function (col) { + row.aggregate.value += col.data[fname]; + }) + }); + }, + _apply_aggregate_value: function ($cell, aggregate) { + var field = this.state.fields[aggregate.fname], + formatter = field_utils.format[field.type]; + var formattedValue = formatter(aggregate.value, field, {escape: true, }); + $cell.addClass('total').attr('title', aggregate.help).html(formattedValue); + }, + confirmUpdate: function (state, id, fields, ev) { + var self = this; + this.state = state; + return this.confirmChange(state, id, fields, ev).then(function () { + self._refresh(id); + }); + }, + _refresh: function (id) { + this._updateRow(id); + this._refreshColTotals(); + this._refreshRowTotals(); + }, + /* + Update row data in our internal rows. + */ + _updateRow: function (id) { + var self = this, + record = _.findWhere(self.state.data, {id: id}); + _.each(self.rows, function(row) { + _.each(row.data, function(col, i) { + if (col.id == id) { + row.data[i] = record; + } + }); + }); + }, + _refreshColTotals: function () { + this._computeColumnAggregates(); + this.$('tfoot').replaceWith(this._renderFooter()); + }, + _refreshRowTotals: function () { + var self = this; + this._computeRowAggregates(); + var $rows = $('tr.o_data_row'); + _.each(self.rows, function(row, i) { + if (row.aggregate) { + $($rows[i]).find('.row-total') + .replaceWith(self._renderAggregateRowCell(row)); + } + }) + }, + /* + x2m fields expect this + */ + getEditableRecordID: function (){ return false } + + }); + + return X2Many2dMatrixRenderer; +}); 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 deleted file mode 100644 index 2c0a0cd92493..000000000000 --- a/web_widget_x2many_2d_matrix/static/src/js/web_widget_x2many_2d_matrix.js +++ /dev/null @@ -1,433 +0,0 @@ -/* Copyright 2015 Holger Brunn - * Copyright 2016 Pedro M. Baeza - * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ - -odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { - "use strict"; - - var core = require('web.core'); - var FieldManagerMixin = require('web.FieldManagerMixin'); - var Widget = require('web.Widget'); - var fieldRegistry = require('web.field_registry'); - var widgetRegistry = require('web.widget_registry'); - var widgetOne2many = widgetRegistry.get('one2many'); - var data = require('web.data'); - var $ = require('jquery'); - - var WidgetX2Many2dMatrix = widgetOne2Many.extend(FieldManagerMixin, { - 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: {}, - by_id: {}, - // configuration values - field_x_axis: 'x', - field_label_x_axis: 'x', - field_y_axis: 'y', - field_label_y_axis: 'y', - field_value: 'value', - x_axis_clickable: true, - y_axis_clickable: true, - // 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: {}, - // Store fields used to fill HTML attributes - fields_att: {}, - - parse_boolean: function(val) - { - if (val.toLowerCase() === 'true' || val === '1') { - return true; - } - return false; - }, - - // read parameters - init: function (parent, fieldname, record, therest) { - var res = this._super(parent, fieldname, record, therest); - FieldManagerMixin.init.call(this); - var node = record.fieldsInfo[therest.viewType][fieldname]; - - this.field_x_axis = node.field_x_axis || this.field_x_axis; - this.field_y_axis = node.field_y_axis || this.field_y_axis; - this.field_label_x_axis = node.field_label_x_axis || this.field_x_axis; - this.field_label_y_axis = node.field_label_y_axis || this.field_y_axis; - this.x_axis_clickable = this.parse_boolean(node.x_axis_clickable || '1'); - this.y_axis_clickable = this.parse_boolean(node.y_axis_clickable || '1'); - this.field_value = node.field_value || this.field_value; - for (var property in node) { - if (property.startsWith("field_att_")) { - this.fields_att[property.substring(10)] = node[property]; - } - } - this.field_editability = node.field_editability || this.field_editability; - this.show_row_totals = this.parse_boolean(node.show_row_totals || '1'); - this.show_column_totals = this.parse_boolean(node.show_column_totals || '1'); - this.init_fields(); - // this.set_value(undefined); - - return res; - }, - - init_fields: function() { - return; - }, - - // return a field's value, id in case it's a one2many field - get_field_value: function(row, field, many2one_as_name) - // FIXME looks silly - { - 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(value_) - { - var self = this, - result = this._super(value_); - - self.by_x_axis = {}; - self.by_y_axis = {}; - self.by_id = {}; - - return $.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; - }) - // if there are cached writes on the parent dataset, read below - // only returns the written data, which is not enough to properly - // set up our data structure. Read those ids here and patch the - // cache - .then(function() - { - var ids_written = _.map( - self.dataset.to_write, function(x) { return x.id }); - if(!ids_written.length) - { - return; - } - return (new data.Query(self.dataset._model)) - .filter([['id', 'in', ids_written]]) - .all() - .then(function(rows) - { - _.each(rows, function(row) - { - var cache = _.find( - self.dataset.cache, - function(x) { return x.id == row.id } - ); - _.extend(cache.values, row, _.clone(cache.values)); - }) - }) - }) - .then(function() - { - return self.dataset.read_ids(self.dataset.ids, self.fields).then(function(rows) - { - // setup data structure - _.each(rows, function(row) - { - self.add_xy_row(row); - }); - 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(); - } - }); - }); - }); - }, - - // do 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); - // row is a *copy* of a row in dataset.cache, fetch - // a reference to this row in order to have the - // internal data structure point to the same data - // the dataset manipulates - _.every(this.dataset.cache, function(cached_row) - { - if(cached_row.id == row.id) - { - row = cached_row.values; - // new rows don't have that - row.id = cached_row.id; - return false; - } - return true; - }); - 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; - this.by_id[row.id] = row; - }, - - // get x axis values in the correct order - get_x_axis_values: function() - { - return _.keys(this.by_x_axis); - }, - - // get y axis values in the correct order - get_y_axis_values: function() - { - return _.keys(this.by_y_axis); - }, - - // get the label for a value on the x axis - get_x_axis_label: function(x) - { - return this.get_field_value( - _.first(_.values(this.by_x_axis[x])), - this.field_label_x_axis, true); - }, - - // get the label for a value on the y axis - get_y_axis_label: function(y) - { - return this.get_field_value( - _.first(_.values(this.by_y_axis[y])), - this.field_label_y_axis, true); - }, - - // return the class(es) the inputs should have - get_xy_value_class: function() - { - var classes = 'oe_form_field oe_form_required'; - if(this.is_numeric) - { - classes += ' oe_form_field_float'; - } - return classes; - }, - - // return row id of a coordinate - get_xy_id: function(x, y) - { - return this.by_x_axis[x][y]['id']; - }, - - get_xy_att: function(x, y) - { - var vals = {}; - for (var att in this.fields_att) { - var val = this.get_field_value( - this.by_x_axis[x][y], this.fields_att[att]); - // Discard empty values - if (val) { - vals[att] = val; - } - } - return vals; - }, - - // return the value of a coordinate - get_xy_value: function(x, y) - { - return this.get_field_value( - this.by_x_axis[x][y], this.field_value); - }, - - // validate a value - validate_xy_value: function(val) - { - try - { - this.parse_xy_value(val); - } - catch(e) - { - return false; - } - return true; - }, - - // parse a value from user input - parse_xy_value: function(val) - { - return val; - }, - - // format a value from the database for display - format_xy_value: function(val) - { - return val; - }, - - // compute totals - compute_totals: function() - { - var self = this, - grand_total = 0, - totals_x = {}, - totals_y = {}, - rows = this.by_id, - deferred = $.Deferred(); - _.each(rows, function(row) - { - var key_x = self.get_field_value(row, self.field_x_axis), - key_y = self.get_field_value(row, self.field_y_axis); - totals_x[key_x] = (totals_x[key_x] || 0) + self.get_field_value(row, self.field_value); - totals_y[key_y] = (totals_y[key_y] || 0) + self.get_field_value(row, self.field_value); - grand_total += self.get_field_value(row, self.field_value); - }); - _.each(totals_y, function(total, y) - { - self.$el.find( - _.str.sprintf('td.row_total[data-y="%s"]', y)).text( - self.format_xy_value(total)); - }); - _.each(totals_x, function(total, x) - { - self.$el.find( - _.str.sprintf('td.column_total[data-x="%s"]', x)).text( - self.format_xy_value(total)); - }); - self.$el.find('.grand_total').text( - self.format_xy_value(grand_total)) - deferred.resolve({ - totals_x: totals_x, - totals_y: totals_y, - grand_total: grand_total, - rows: rows, - }); - return deferred; - }, - - setup_many2one_axes: function() - { - if(this.fields[this.field_x_axis].type == 'many2one' && this.x_axis_clickable) - { - 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.y_axis_clickable) - { - 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: $(e.currentTarget).data(id_attribute), - views: [[false, 'form']], - target: 'current', - }) - }, - - start: function() - { - var self = this; - this.$el.find('.edit').on( - 'change', self.proxy(this.xy_value_change)); - this.compute_totals(); - this.setup_many2one_axes(); - this.on("change:effective_readonly", - this, this.proxy(this.effective_readonly_change)); - this.effective_readonly_change(); - return this._super(); - }, - - xy_value_change: function(e) - { - var $this = $(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.by_id[$this.data('id')][this.field_value] = value; - $this.parent().removeClass('oe_form_invalid'); - this.compute_totals(); - } - else - { - $this.parent().addClass('oe_form_invalid'); - } - - }, - - effective_readonly_change: function() - { - this.$el - .find('tbody .edit') - .toggle(!this.get('effective_readonly')); - this.$el - .find('tbody .read') - .toggle(this.get('effective_readonly')); - this.$el.find('.edit').first().focus(); - }, - - is_syntax_valid: function() - { - return this.$el.find('.oe_form_invalid').length == 0; - }, - - load_views: function() { - // Needed for removing the initial empty tree view when the widget - // is loaded - var self = this, - result = this._super(); - - return $.when(result).then(function() - { - self.renderElement(); - self.compute_totals(); - self.$el.find('.edit').on( - 'change', self.proxy(self.xy_value_change)); - }); - }, - }); - - fieldRegistry.add( - 'x2many_2d_matrix', WidgetX2Many2dMatrix - ); - - return { - WidgetX2Many2dMatrix: WidgetX2Many2dMatrix - }; -}); diff --git a/web_widget_x2many_2d_matrix/static/src/js/widget_x2many_2d_matrix.js b/web_widget_x2many_2d_matrix/static/src/js/widget_x2many_2d_matrix.js new file mode 100644 index 000000000000..9ed06321d189 --- /dev/null +++ b/web_widget_x2many_2d_matrix/static/src/js/widget_x2many_2d_matrix.js @@ -0,0 +1,128 @@ +/* Copyright 2015 Holger Brunn + * Copyright 2016 Pedro M. Baeza + * Copyright 2018 Simone Orsi + * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ + +odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { + "use strict"; + + var core = require('web.core'); + // var FieldManagerMixin = require('web.FieldManagerMixin'); + var field_registry = require('web.field_registry'); + var relational_fields = require('web.relational_fields'); + var weContext = require('web_editor.context'); + // var Helpers = require('web_widget_x2many_2d_matrix.helpers'); + var AbstractField = require('web.AbstractField'); + var X2Many2dMatrixRenderer = require('web_widget_x2many_2d_matrix.X2Many2dMatrixRenderer'); + + var WidgetX2Many2dMatrix = relational_fields.FieldOne2Many.extend({ + widget_class: 'o_form_field_x2many_2d_matrix', + + init: function (parent, name, record, options) { + var res = this._super(parent, name, record, options); + this.init_params(); + return res; + }, + init_params: function () { + var node = this.attrs + this.by_x_axis = {}; + this.by_y_axis = {}; + this.field_x_axis = node.field_x_axis || this.field_x_axis; + this.field_y_axis = node.field_y_axis || this.field_y_axis; + this.field_label_x_axis = node.field_label_x_axis || this.field_x_axis; + this.field_label_y_axis = node.field_label_y_axis || this.field_y_axis; + this.x_axis_clickable = this.parse_boolean(node.x_axis_clickable || '1'); + this.y_axis_clickable = this.parse_boolean(node.y_axis_clickable || '1'); + this.field_value = node.field_value || this.field_value; + // TODO: is this really needed? Holger? + for (var property in node) { + if (property.startsWith("field_att_")) { + this.fields_att[property.substring(10)] = node[property]; + } + } + // and this? + this.field_editability = node.field_editability || this.field_editability; + this.show_row_totals = this.parse_boolean(node.show_row_totals || '1'); + this.show_column_totals = this.parse_boolean(node.show_column_totals || '1'); + this.init_matrix(); + }, + init_matrix: function(){ + var self = this, + records = self.recordData[this.name].data; + _.each(records, function(record) { + var x = record.data[self.field_x_axis], + y = record.data[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] = record; + self.by_y_axis[y][x] = record; + }); + // init columns + self.columns = []; + $.each(self.by_x_axis, function(x){ + self.columns.push(self._make_column(x)) + }); + self.rows = []; + $.each(self.by_y_axis, function(y){ + self.rows.push(self._make_row(y)) + }); + self.matrix_data = { + 'field_value': self.field_value, + 'field_x_axis': self.field_x_axis, + 'field_y_axis': self.field_y_axis, + 'columns': self.columns, + 'rows': self.rows, + 'show_row_totals': self.show_row_totals, + 'show_column_totals': self.show_column_totals + }; + + }, + _make_column: function(x){ + return { + // simulate node parsed on xml arch + 'tag': 'field', + 'attrs': { + 'name': this.field_x_axis, + 'string': x + } + } + }, + _make_row: function(y){ + var self = this; + // use object so that we can attach more data if needed + var row = {'data': []}; + $.each(self.by_x_axis, function(x) { + row.data.push(self.by_y_axis[y][x]); + }); + return row + }, + parse_boolean: function(val) { + if (val.toLowerCase() === 'true' || val === '1') { + return true; + } + return false; + }, + _render: function () { + if (!this.view) { + return this._super(); + } + var arch = this.view.arch, + viewType = 'list'; + this.renderer = new X2Many2dMatrixRenderer(this, this.value, { + arch: arch, + editable: true, + viewType: viewType, + matrix_data: this.matrix_data + }); + this.$el.addClass('o_field_x2many o_field_x2many_2d_matrix'); + return this.renderer.appendTo(this.$el); + } + + }); + + field_registry.add('x2many_2d_matrix', WidgetX2Many2dMatrix); + + return { + WidgetX2Many2dMatrix: WidgetX2Many2dMatrix + }; +}); 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 deleted file mode 100644 index b7aaaefe1891..000000000000 --- a/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml +++ /dev/null @@ -1,36 +0,0 @@ - - -
- - - - - - - - - - - - - - - - - - -
- - - Total
- - - - - -
Total -
-
-
-
diff --git a/web_widget_x2many_2d_matrix/views/templates.xml b/web_widget_x2many_2d_matrix/views/assets.xml similarity index 70% rename from web_widget_x2many_2d_matrix/views/templates.xml rename to web_widget_x2many_2d_matrix/views/assets.xml index 06934cc33dbc..dc779a7f76c0 100644 --- a/web_widget_x2many_2d_matrix/views/templates.xml +++ b/web_widget_x2many_2d_matrix/views/assets.xml @@ -3,7 +3,8 @@ From 10864df153a16d61cef055a9b3e367dd9bab0b88 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Tue, 20 Feb 2018 12:46:16 +0100 Subject: [PATCH 046/399] [ADD] `web_widget_x2many_2d_matrix_example` --- .../README.rst | 41 ++++++++++++++ .../__manifest__.py | 19 +++++++ .../demo/x2m.demo.csv | 20 +++++++ .../models/__init__.py | 1 + .../models/x2m_demo.py | 31 +++++++++++ .../views/x2m_demo.xml | 54 +++++++++++++++++++ .../wizard/__init__.py | 1 + .../wizard/demo_wizard.py | 27 ++++++++++ .../wizard/x2m_matrix.xml | 21 ++++++++ 9 files changed, 215 insertions(+) create mode 100644 web_widget_x2many_2d_matrix_example/README.rst create mode 100644 web_widget_x2many_2d_matrix_example/__manifest__.py create mode 100644 web_widget_x2many_2d_matrix_example/demo/x2m.demo.csv create mode 100644 web_widget_x2many_2d_matrix_example/models/__init__.py create mode 100644 web_widget_x2many_2d_matrix_example/models/x2m_demo.py create mode 100644 web_widget_x2many_2d_matrix_example/views/x2m_demo.xml create mode 100644 web_widget_x2many_2d_matrix_example/wizard/__init__.py create mode 100644 web_widget_x2many_2d_matrix_example/wizard/demo_wizard.py create mode 100644 web_widget_x2many_2d_matrix_example/wizard/x2m_matrix.xml diff --git a/web_widget_x2many_2d_matrix_example/README.rst b/web_widget_x2many_2d_matrix_example/README.rst new file mode 100644 index 000000000000..4f8000d9fb44 --- /dev/null +++ b/web_widget_x2many_2d_matrix_example/README.rst @@ -0,0 +1,41 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +=================================== +2D matrix for x2many fields example +=================================== + +Install it and click on the menu item `Demo x2m matrix widget`. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smash it by providing a detailed and welcomed feedback. + +Credits +======= + +Contributors +------------ + +* Simone Orsi + + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/web_widget_x2many_2d_matrix_example/__manifest__.py b/web_widget_x2many_2d_matrix_example/__manifest__.py new file mode 100644 index 000000000000..1970ccdacf6c --- /dev/null +++ b/web_widget_x2many_2d_matrix_example/__manifest__.py @@ -0,0 +1,19 @@ +{ + 'name': 'web_widget_x2many_2d_matrix example', + 'summary': "A small example on how to use `web_widget_x2many_2d_matrix`.", + "version": "11.0.1.0.0", + "author": "Camptocamp, " + "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/web", + "license": "AGPL-3", + "category": "Hidden/Dependency", + "depends": [ + 'web_widget_x2many_2d_matrix', + ], + "data": [ + 'demo/x2m.demo.csv', + 'views/x2m_demo.xml', + 'wizard/x2m_matrix.xml', + ], + "installable": True, +} diff --git a/web_widget_x2many_2d_matrix_example/demo/x2m.demo.csv b/web_widget_x2many_2d_matrix_example/demo/x2m.demo.csv new file mode 100644 index 000000000000..9a8b5aa11a4a --- /dev/null +++ b/web_widget_x2many_2d_matrix_example/demo/x2m.demo.csv @@ -0,0 +1,20 @@ +id,name,line_ids/user_id/id,line_ids/name,line_ids/value +web_widget_x2many_2d_matrix_example.x2m_demo_5,One,,, +,,base.user_demo,A,1 +,,base.user_demo,B,2 +,,base.user_demo,C,3 +web_widget_x2many_2d_matrix_example.x2m_demo_3,Two,,, +,,base.user_demo,E,5 +,,base.user_demo,F,6 +web_widget_x2many_2d_matrix_example.x2m_demo_2,Three,,, +,,base.user_root,G,8 +,,base.user_demo,H,9 +,,base.user_root,I,10 +web_widget_x2many_2d_matrix_example.x2m_demo_1,Four,,, +,,base.user_root,L,12 +,,base.user_demo,M,13 +,,base.user_demo,N,14 +,,base.user_demo,O,15 +,,base.user_root,P,16 +web_widget_x2many_2d_matrix_example.x2m_demo_4,Five,,, +,,base.user_demo,Q,18 diff --git a/web_widget_x2many_2d_matrix_example/models/__init__.py b/web_widget_x2many_2d_matrix_example/models/__init__.py new file mode 100644 index 000000000000..a23d8c46868f --- /dev/null +++ b/web_widget_x2many_2d_matrix_example/models/__init__.py @@ -0,0 +1 @@ +from . import x2m_demo diff --git a/web_widget_x2many_2d_matrix_example/models/x2m_demo.py b/web_widget_x2many_2d_matrix_example/models/x2m_demo.py new file mode 100644 index 000000000000..039f5a758288 --- /dev/null +++ b/web_widget_x2many_2d_matrix_example/models/x2m_demo.py @@ -0,0 +1,31 @@ +from odoo import models, api, fields + + +class X2MDemo(models.Model): + _name = 'x2m.demo' + + name = fields.Char() + line_ids = fields.One2many('x2m.demo.line', 'demo_id') + + @api.multi + def open_x2m_matrix(self): + wiz = self.env['x2m.matrix.demo.wiz'].create({}) + return { + 'name': 'Try x2many 2D matrix widget', + 'type': 'ir.actions.act_window', + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'x2m.matrix.demo.wiz', + 'target': 'new', + 'res_id': wiz.id, + 'context': self.env.context, + } + + +class X2MDemoLine(models.Model): + _name = 'x2m.demo.line' + + name = fields.Char() + demo_id = fields.Many2one('x2m.demo') + user_id = fields.Many2one('res.users') + value = fields.Integer() diff --git a/web_widget_x2many_2d_matrix_example/views/x2m_demo.xml b/web_widget_x2many_2d_matrix_example/views/x2m_demo.xml new file mode 100644 index 000000000000..8f6805b6e73e --- /dev/null +++ b/web_widget_x2many_2d_matrix_example/views/x2m_demo.xml @@ -0,0 +1,54 @@ + + + + + x2m.demo.form + x2m.demo + +
+ + + + + + + + + + + +
+
+
+
+
+
+ + + Demo - Tree + x2m.demo + + + + + + + + + Demo + x2m.demo + form + tree,form + + + + + +
diff --git a/web_widget_x2many_2d_matrix_example/wizard/__init__.py b/web_widget_x2many_2d_matrix_example/wizard/__init__.py new file mode 100644 index 000000000000..68ebaf690dc7 --- /dev/null +++ b/web_widget_x2many_2d_matrix_example/wizard/__init__.py @@ -0,0 +1 @@ +from . import demo_wizard diff --git a/web_widget_x2many_2d_matrix_example/wizard/demo_wizard.py b/web_widget_x2many_2d_matrix_example/wizard/demo_wizard.py new file mode 100644 index 000000000000..267bcd6ea7a0 --- /dev/null +++ b/web_widget_x2many_2d_matrix_example/wizard/demo_wizard.py @@ -0,0 +1,27 @@ +from odoo import fields, models + + +class DemoWizard(models.TransientModel): + _name = 'x2m.matrix.demo.wiz' + + line_ids = fields.Many2many( + 'x2m.demo.line', default=lambda self: self._default_line_ids()) + + def _default_line_ids(self): + recs = self.env['x2m.demo'].search([]) + # same with users + users = self.env['x2m.demo.line'].search([]).mapped('user_id') + return [ + (0, 0, { + 'name': "{}'s task on {}".format(usr.name, rec.name), + 'demo_id': rec.id, + 'user_id': usr.id, + 'value': 0, + }) + # if the project doesn't have a task for the user, create a new one + if not rec.line_ids.filtered(lambda x: x.user_id == usr) else + # otherwise, return the task + (4, rec.line_ids.filtered(lambda x: x.user_id == usr)[0].id) + for rec in recs + for usr in users + ] diff --git a/web_widget_x2many_2d_matrix_example/wizard/x2m_matrix.xml b/web_widget_x2many_2d_matrix_example/wizard/x2m_matrix.xml new file mode 100644 index 000000000000..db0c02eec38d --- /dev/null +++ b/web_widget_x2many_2d_matrix_example/wizard/x2m_matrix.xml @@ -0,0 +1,21 @@ + + + + + x2m.matrix.demo.wiz + x2m.matrix.demo.wiz + form + +
+ + + + + + + +
+
+
+ +
From 4f4887658fab06b6e4c42cce5a111df691eb1c24 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Tue, 13 Mar 2018 16:23:10 +0100 Subject: [PATCH 047/399] fixup! Fix m2o as axis case --- .../static/src/js/2d_matrix_renderer.js | 7 ++++++- .../static/src/js/widget_x2many_2d_matrix.js | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js b/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js index 34297dbfdb96..3a3de638c69f 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js +++ b/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js @@ -139,8 +139,13 @@ odoo.define('web_widget_x2many_2d_matrix.X2Many2dMatrixRenderer', function (requ 'data-id': record.data.id, }); if (colIndex == 0) { + var value = record.data[this.matrix_data.field_y_axis]; + if (value.type == 'record') { + // we have a related record + value = value.data.display_name; + } // get 1st column filled w/ Y label - $td.text(record.data[this.matrix_data.field_y_axis]); + $td.text(value); return $td; } diff --git a/web_widget_x2many_2d_matrix/static/src/js/widget_x2many_2d_matrix.js b/web_widget_x2many_2d_matrix/static/src/js/widget_x2many_2d_matrix.js index 9ed06321d189..001de0dbf353 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/widget_x2many_2d_matrix.js +++ b/web_widget_x2many_2d_matrix/static/src/js/widget_x2many_2d_matrix.js @@ -52,6 +52,14 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { _.each(records, function(record) { var x = record.data[self.field_x_axis], y = record.data[self.field_y_axis]; + if (x.type == 'record') { + // we have a related record + x = x.data.display_name; + } + if (y.type == 'record') { + // we have a related record + y = y.data.display_name; + } 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] = record; From f98baa42e527712f429d4af0a287780432a606b5 Mon Sep 17 00:00:00 2001 From: Vincent Hatakeyama Date: Tue, 20 Mar 2018 11:24:10 +0100 Subject: [PATCH 048/399] [FIX] Add missing __init__ file to make the web_widget_x2many_2d_matrix_example installable --- web_widget_x2many_2d_matrix_example/__init__.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 web_widget_x2many_2d_matrix_example/__init__.py diff --git a/web_widget_x2many_2d_matrix_example/__init__.py b/web_widget_x2many_2d_matrix_example/__init__.py new file mode 100644 index 000000000000..30b1508f0b95 --- /dev/null +++ b/web_widget_x2many_2d_matrix_example/__init__.py @@ -0,0 +1,2 @@ +from . import models # noqa: F401 +from . import wizard # noqa: F401 From 531df391b59fe46a49b30294d2ad312253672275 Mon Sep 17 00:00:00 2001 From: Vincent Hatakeyama Date: Tue, 20 Mar 2018 11:24:29 +0100 Subject: [PATCH 049/399] [FIX] flake8 --- web_widget_x2many_2d_matrix_example/models/__init__.py | 2 +- web_widget_x2many_2d_matrix_example/wizard/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web_widget_x2many_2d_matrix_example/models/__init__.py b/web_widget_x2many_2d_matrix_example/models/__init__.py index a23d8c46868f..4715b6b4f383 100644 --- a/web_widget_x2many_2d_matrix_example/models/__init__.py +++ b/web_widget_x2many_2d_matrix_example/models/__init__.py @@ -1 +1 @@ -from . import x2m_demo +from . import x2m_demo # noqa: F401 diff --git a/web_widget_x2many_2d_matrix_example/wizard/__init__.py b/web_widget_x2many_2d_matrix_example/wizard/__init__.py index 68ebaf690dc7..bd7a586874e3 100644 --- a/web_widget_x2many_2d_matrix_example/wizard/__init__.py +++ b/web_widget_x2many_2d_matrix_example/wizard/__init__.py @@ -1 +1 @@ -from . import demo_wizard +from . import demo_wizard # noqa: F401 From 47ddd75fadb2aaa28929afbd4ac798440050349a Mon Sep 17 00:00:00 2001 From: Vincent Hatakeyama Date: Mon, 26 Mar 2018 17:18:05 +0200 Subject: [PATCH 050/399] fix missing column in header --- .../static/src/js/2d_matrix_renderer.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js b/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js index 3a3de638c69f..d8685336f676 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js +++ b/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js @@ -57,10 +57,9 @@ odoo.define('web_widget_x2many_2d_matrix.X2Many2dMatrixRenderer', function (requ return $body; }, _renderHeader: function (isGrouped) { - var $tr = $('
'); + $tr.append(_.map(this.columns, this._renderHeaderCell.bind(this))); if (this.matrix_data.show_row_totals) { $tr.append($('', {class: 'total'})); } From 1857b7b19d3377eb971c840e82b4287a8ab7ca66 Mon Sep 17 00:00:00 2001 From: Vincent Hatakeyama Date: Tue, 27 Mar 2018 17:24:55 +0200 Subject: [PATCH 051/399] correctly y label cell previous version overwrote the first value of the data matrix --- .../static/src/js/2d_matrix_renderer.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js b/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js index d8685336f676..e326d990c277 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js +++ b/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js @@ -108,7 +108,14 @@ odoo.define('web_widget_x2many_2d_matrix.X2Many2dMatrixRenderer', function (requ node.attrs.name = self.matrix_data.field_value; return self._renderBodyCell(record, node, index, {mode: 'readonly'}); }); - var $tr = $('
').text(value)); + $tr.append($cells); if (row.aggregate) { $tr.append(self._renderAggregateRowCell(row)); } @@ -137,16 +144,6 @@ odoo.define('web_widget_x2many_2d_matrix.X2Many2dMatrixRenderer', function (requ 'data-form-id': record.id, 'data-id': record.data.id, }); - if (colIndex == 0) { - var value = record.data[this.matrix_data.field_y_axis]; - if (value.type == 'record') { - // we have a related record - value = value.data.display_name; - } - // get 1st column filled w/ Y label - $td.text(value); - return $td; - } // We register modifiers on the element so that it gets the correct // modifiers classes (for styling) From 08c16707ed31a8f399c71b7f49f0b4a66e3484ea Mon Sep 17 00:00:00 2001 From: Luis Adan Date: Wed, 28 Mar 2018 10:31:27 +0200 Subject: [PATCH 052/399] [IMP] web_tree_dynamic_colored_field: Update README.rst (#899) Use more than one color condition --- web_tree_dynamic_colored_field/README.rst | 24 +++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/web_tree_dynamic_colored_field/README.rst b/web_tree_dynamic_colored_field/README.rst index 2b647f42099d..323b47385f4a 100644 --- a/web_tree_dynamic_colored_field/README.rst +++ b/web_tree_dynamic_colored_field/README.rst @@ -36,7 +36,7 @@ Usage ... - + With this example, column which renders 'name' field will have its background colored in red. * In the tree view declaration, put ``options='{"fg_color": "white:customer == True"}'`` attribute in the ``field`` tag:: @@ -50,7 +50,7 @@ Usage ... - + With this example, column which renders 'name' field will have its text colored in white on a customer records. * In the tree view declaration, use ``options='"color_field": "my_color"'`` attribute in the ``tree`` tag:: @@ -65,6 +65,26 @@ Usage ... +* If you want to use more than one color, you can split the attributes using ';': + +.. code:: + + options='{"fg_color": "red:red_color == True; green:green_color == True"}' + +Example: + +.. code:: xml + + ... + + + ... + + ... + + + ... + With this example, the content of the field named `my_color` will be used to populate the `my_color` CSS value. Use a function field to return whichever color you want depending on the other record values. Note that this From 27b44e8c3ff0c80209a0f266a4b96f772917be68 Mon Sep 17 00:00:00 2001 From: Vincent Hatakeyama Date: Wed, 28 Mar 2018 14:17:46 +0200 Subject: [PATCH 053/399] revert unwanted changes to readme --- web_widget_x2many_2d_matrix/README.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web_widget_x2many_2d_matrix/README.rst b/web_widget_x2many_2d_matrix/README.rst index 1013c7686fb5..52eb81b1336f 100644 --- a/web_widget_x2many_2d_matrix/README.rst +++ b/web_widget_x2many_2d_matrix/README.rst @@ -123,6 +123,7 @@ Now in our wizard, we can use:: + Known issues / Roadmap ====================== @@ -133,6 +134,7 @@ Known issues / Roadmap * Support limit total records in the matrix. Ref: https://github.com/OCA/web/issues/901 + Bug Tracker =========== From 9a033fb447a12bb520a6b953d23120580a071cda Mon Sep 17 00:00:00 2001 From: Vincent Hatakeyama Date: Wed, 28 Mar 2018 16:05:16 +0200 Subject: [PATCH 054/399] [FIX] duplicate tables do not appear anymore when changing other fields --- .../static/src/js/widget_x2many_2d_matrix.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web_widget_x2many_2d_matrix/static/src/js/widget_x2many_2d_matrix.js b/web_widget_x2many_2d_matrix/static/src/js/widget_x2many_2d_matrix.js index 4b1a73f9cd74..c2516329816e 100644 --- a/web_widget_x2many_2d_matrix/static/src/js/widget_x2many_2d_matrix.js +++ b/web_widget_x2many_2d_matrix/static/src/js/widget_x2many_2d_matrix.js @@ -159,6 +159,8 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) { matrix_data: this.matrix_data }); this.$el.addClass('o_field_x2many o_field_x2many_2d_matrix'); + // remove old tables (render is called again when updating other fields in the screen) + this.$el.find('.table-responsive').remove(); return this.renderer.appendTo(this.$el); } From f916f2c9f125c2aeafa06b0e41af78e6bed70c0c Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Tue, 20 Sep 2016 17:56:56 +0200 Subject: [PATCH 055/399] New module web_notify This technical module allows you to send instant notification messages from the server to the user in live. --- web_notify/README.rst | 77 +++++++++++++++++++++++++ web_notify/__init__.py | 1 + web_notify/__openerp__.py | 22 +++++++ web_notify/models/__init__.py | 1 + web_notify/models/res_users.py | 32 ++++++++++ web_notify/static/description/icon.png | Bin 0 -> 9455 bytes web_notify/static/src/js/web_client.js | 53 +++++++++++++++++ web_notify/views/web_notify.xml | 10 ++++ 8 files changed, 196 insertions(+) create mode 100644 web_notify/README.rst create mode 100644 web_notify/__init__.py create mode 100644 web_notify/__openerp__.py create mode 100644 web_notify/models/__init__.py create mode 100644 web_notify/models/res_users.py create mode 100644 web_notify/static/description/icon.png create mode 100644 web_notify/static/src/js/web_client.js create mode 100644 web_notify/views/web_notify.xml diff --git a/web_notify/README.rst b/web_notify/README.rst new file mode 100644 index 000000000000..9bd748aaff49 --- /dev/null +++ b/web_notify/README.rst @@ -0,0 +1,77 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +========== +Web Notify +========== + +Send instant notification messages to the user in live. + +This technical module allows you to send instant notification messages from the server to the user in live. +Two kinds of notification are supported. + +* Warning: Displayed in a red flying popup div +* Information: Displayed in a light yellow flying popup div + +To send a notification to the user you just need to call one of the new methods defined on res.users: + +.. code-block:: python + + self.env.user.notify_info('My information message') + +or + +.. code-block:: python + + self.env.user.notify_warning('My marning message') + + +Installation +============ + +This module is based on the Instant Messaging Bus. To work properly, the server must be launched in gevent mode. + + +Usage +===== + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/162/9.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Laurent Mignon + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/web_notify/__init__.py b/web_notify/__init__.py new file mode 100644 index 000000000000..0650744f6bc6 --- /dev/null +++ b/web_notify/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/web_notify/__openerp__.py b/web_notify/__openerp__.py new file mode 100644 index 000000000000..a6e542eb576c --- /dev/null +++ b/web_notify/__openerp__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Web Notify', + 'summary': """ + Send notification messages to user""", + 'version': '9.0.1.0.0', + 'license': 'AGPL-3', + 'author': 'ACSONE SA/NV,Odoo Community Association (OCA)', + 'website': 'https://acsone.eu/', + 'depends': [ + 'web', + 'bus', + ], + 'data': [ + 'views/web_notify.xml' + ], + 'demo': [ + ], +} diff --git a/web_notify/models/__init__.py b/web_notify/models/__init__.py new file mode 100644 index 000000000000..8835165330f8 --- /dev/null +++ b/web_notify/models/__init__.py @@ -0,0 +1 @@ +from . import res_users diff --git a/web_notify/models/res_users.py b/web_notify/models/res_users.py new file mode 100644 index 000000000000..800380d207ec --- /dev/null +++ b/web_notify/models/res_users.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp import api, models, _ + + +class ResUsers(models.Model): + + _inherit = 'res.users' + + @api.multi + def notify_info(self, message, title=None, sticky=False): + title = title or _('Information') + self._notify_channel('notify_info', message, title, sticky) + + @api.multi + def notify_warning(self, message, title=None, sticky=False): + title = title or _('Warning') + self._notify_channel('notify_warning', message, title, sticky) + + @api.multi + def _notify_channel(self, channel_name_prefix, message, title, sticky): + notification = { + 'message': message, + 'title': title, + 'sticky': sticky + } + bus_bus = self.env['bus.bus'] + for record in self: + channel_name = channel_name_prefix + "_%s" % record.id + bus_bus.sendone(channel_name, notification) diff --git a/web_notify/static/description/icon.png b/web_notify/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~! zVpnB`o+K7|Al`Q_U;eD$B zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__ zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_ zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)( z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9 zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz# z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K= z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C zuVl&0duN<;uOsB3%T9Fp8t{ED108<+W(nOZd?gDnfNBC3>M8WE61$So|P zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1 zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_ zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8 zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ> zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD z#z-)AXwSRY?OPefw^iI+ z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$ z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6 zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+ z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC) zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x! zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8 z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n= z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@ zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y< zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6 zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6% z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(| z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6 z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d} z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/web_notify/static/src/js/web_client.js b/web_notify/static/src/js/web_client.js new file mode 100644 index 000000000000..3c908a074933 --- /dev/null +++ b/web_notify/static/src/js/web_client.js @@ -0,0 +1,53 @@ +odoo.define('web_notify.WebClient', function (require) { +"use strict"; + +var WebClient = require('web.WebClient'); +var base_bus = require('bus.bus'); +var _ = require('_'); + +WebClient.include({ + init: function(parent, client_options){ + this._super(parent, client_options); + }, + show_application: function() { + this._super(); + this.start_polling(); + }, + on_logout: function() { + var self = this; + base_bus.bus.off('notification', this, this.bus_notification); + this._super(); + }, + start_polling: function() { + this.channel_warning = 'notify_warning_' + this.session.uid; + this.channel_info = 'notify_info_' + this.session.uid; + base_bus.bus.add_channel(this.channel_warning); + base_bus.bus.add_channel(this.channel_info); + base_bus.bus.on('notification', this, this.bus_notification); + base_bus.bus.start_polling(); + }, + bus_notification: function(notifications) { + var self = this; + _.each(notifications, function (notification) { + var channel = notification[0]; + var message = notification[1]; + if (channel === self.channel_warning) { + self.on_message_warning(message); + } else if (channel == self.channel_info) { + self.on_message_info(message); + } + }); + }, + on_message_warning: function(message){ + if(this.notification_manager) { + this.notification_manager.do_warn(message.title, message.message, message.sticky); + } + }, + on_message_info: function(message){ + if(this.notification_manager) { + this.notification_manager.do_notify(message.title, message.message, message.sticky); + } + } +}); + +}); \ No newline at end of file diff --git a/web_notify/views/web_notify.xml b/web_notify/views/web_notify.xml new file mode 100644 index 000000000000..b85d2e6ff0d4 --- /dev/null +++ b/web_notify/views/web_notify.xml @@ -0,0 +1,10 @@ + + + + + + From 1d91e04b6fbe62dc5749ba4d7e7316a7675be535 Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Fri, 8 Apr 2016 16:02:32 +0200 Subject: [PATCH 076/399] [IMP] web_timeline: Several improvements: * Avoid to display all items of group_by model * Remove unnecessary readgroup * Remove dependency on project. Modify module structure. Imporve readme file. * Add setup.py --- web_timeline/README.rst | 75 +++++++++++++++++++++- web_timeline/__init__.py | 6 +- web_timeline/__openerp__.py | 22 +++++-- web_timeline/ir_view.py | 40 ------------ web_timeline/models/__init__.py | 5 ++ web_timeline/models/ir_view.py | 25 ++++++++ web_timeline/project_view.xml | 24 ------- web_timeline/static/src/js/web_timeline.js | 40 +++++++----- 8 files changed, 147 insertions(+), 90 deletions(-) delete mode 100644 web_timeline/ir_view.py create mode 100644 web_timeline/models/__init__.py create mode 100644 web_timeline/models/ir_view.py delete mode 100644 web_timeline/project_view.xml diff --git a/web_timeline/README.rst b/web_timeline/README.rst index a97118b225ef..e634fd9c1bca 100755 --- a/web_timeline/README.rst +++ b/web_timeline/README.rst @@ -1,7 +1,80 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +=============== Timeline Widget =============== -!Prototype! Define a new widget displaying events in an interactive visualization chart. + The widget is based on the external library http://visjs.org/timeline_examples.html + +Usage +===== + +Example: + + + + + + project.task.timeline + project.task + timeline + + + + + + + + + kanban,tree,form,calendar,gantt,timeline,graph + + + + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/162/8.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Laurent Mignon +* Adrien Peiffer + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. \ No newline at end of file diff --git a/web_timeline/__init__.py b/web_timeline/__init__.py index 68f25f6bdc0a..444b39cc18c2 100644 --- a/web_timeline/__init__.py +++ b/web_timeline/__init__.py @@ -1 +1,5 @@ -from . import ir_view +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/web_timeline/__openerp__.py b/web_timeline/__openerp__.py index bf2055753bbb..57ee01b07a47 100644 --- a/web_timeline/__openerp__.py +++ b/web_timeline/__openerp__.py @@ -1,16 +1,24 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + { 'name': "Web timeline", 'summary': """ - Interactive visualization chart to visualize events in time + Interactive visualization chart to visualize events in time """, - "version": "0.1", - "author": "ACSONE SA/NV", - "category": "Acsone", + "version": "8.0.1.0.0", + 'author': 'ACSONE SA/NV,' + 'Odoo Community Association (OCA)', + "category": "Tools", "website": "http://acsone.eu", - 'depends': ['web', 'project'], - 'qweb': ['static/src/xml/web_timeline.xml'], + 'depends': [ + 'web' + ], + 'qweb': [ + 'static/src/xml/web_timeline.xml', + ], 'data': [ 'views/web_timeline.xml', - 'project_view.xml', ], } diff --git a/web_timeline/ir_view.py b/web_timeline/ir_view.py deleted file mode 100644 index efbd8d67f211..000000000000 --- a/web_timeline/ir_view.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Copyright 2015 ACSONE SA/NV -# -# 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 . -# -############################################################################## -from openerp import models -from openerp import api - - -TIMELINE_VIEW = ('timeline', 'Timeline') - - -class IrUIView(models.Model): - _inherit = 'ir.ui.view' - - @api.model - def _setup_fields(self): - """Hack due since the field 'type' is not defined with the new api. - """ - cls = type(self) - type_selection = cls._fields['type'].selection - if TIMELINE_VIEW not in type_selection: - tmp = list(type_selection) - tmp.append(TIMELINE_VIEW) - cls._fields['type'].selection = tuple(set(tmp)) - super(IrUIView, self)._setup_fields() diff --git a/web_timeline/models/__init__.py b/web_timeline/models/__init__.py new file mode 100644 index 000000000000..81a27ea1f2e8 --- /dev/null +++ b/web_timeline/models/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# © 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import ir_view diff --git a/web_timeline/models/ir_view.py b/web_timeline/models/ir_view.py new file mode 100644 index 000000000000..899d4873708f --- /dev/null +++ b/web_timeline/models/ir_view.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models +from openerp import api + + +TIMELINE_VIEW = ('timeline', 'Timeline') + + +class IrUIView(models.Model): + _inherit = 'ir.ui.view' + + @api.model + def _setup_fields(self): + """Hack due since the field 'type' is not defined with the new api. + """ + cls = type(self) + type_selection = cls._fields['type'].selection + if TIMELINE_VIEW not in type_selection: + tmp = list(type_selection) + tmp.append(TIMELINE_VIEW) + cls._fields['type'].selection = tuple(set(tmp)) + super(IrUIView, self)._setup_fields() diff --git a/web_timeline/project_view.xml b/web_timeline/project_view.xml deleted file mode 100644 index 0e8e2b2135bf..000000000000 --- a/web_timeline/project_view.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - project.task.timeline - project.task - timeline - - - - - - - - - kanban,tree,form,calendar,gantt,timeline,graph - - - diff --git a/web_timeline/static/src/js/web_timeline.js b/web_timeline/static/src/js/web_timeline.js index 6193bde01357..7835a2131d6c 100644 --- a/web_timeline/static/src/js/web_timeline.js +++ b/web_timeline/static/src/js/web_timeline.js @@ -247,7 +247,6 @@ openerp.web_timeline = function(instance) { var self = this; self.last_domains = domains; self.last_contexts = contexts; - // self.reload_gantt(); // select the group by var n_group_bys = []; if (this.fields_view.arch.attrs.default_group_by) { @@ -263,14 +262,7 @@ openerp.web_timeline = function(instance) { })); fields = _.uniq(fields.concat(_.pluck(this.colors, "field").concat(n_group_bys))); - var group_by = self.fields[_.first(n_group_bys)] - var read_groups = new instance.web.DataSet(this, group_by.relation, group_by.context) - .name_search('', group_by.domain) - .then(function(groups){ - self.groups = groups; - }); - - return $.when(this.has_been_loaded, read_groups).then(function() { + return $.when(this.has_been_loaded).then(function() { return self.dataset.read_slice(fields, { domain: domains, context: contexts @@ -304,18 +296,33 @@ openerp.web_timeline = function(instance) { var self = this; var data = []; var groups = []; - groups.push({id:-1, content: _t('Undefined')}) _.each(tasks, function(event) { - data.push(self.event_data_transform(event)); - }); - _.each(self.groups, function(group){ - groups.push({id: group[0], content: group[1]}); + if (event[self.date_start]){ + data.push(self.event_data_transform(event)); + } }); + // get the groups + var split_groups = function(tasks, group_bys) { + if (group_bys.length === 0) + return tasks; + var groups = []; + groups.push({id:-1, content: _t('-')}) + _.each(tasks, function(task) { + var group_name = task[_.first(group_bys)]; + if (group_name) { + var group = _.find(groups, function(group) { return _.isEqual(group.id, group_name[0]); }); + if (group === undefined) { + group = {id: group_name[0], content: group_name[1]}; + groups.push(group); + } + } + }); + return groups; + } + var groups = split_groups(tasks, group_bys); this.timeline.setGroups(groups); this.timeline.setItems(data); this.timeline.setWindow(this.current_window); - //this.timeline.moveTo(new Date(), true); - //this.timeline.zoom(0.5, new Date()); }, do_show: function() { @@ -394,7 +401,6 @@ openerp.web_timeline = function(instance) { null, {readonly: true, title: title} ); - //pop.on('closed', self, self.reload); var form_controller = pop.view_form; form_controller.on("load_record", self, function() { var footer = pop.$el.closest(".modal").find(".modal-footer"); From a5028b630dbcf2b621f84fcbf63b7c0401ec68ea Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Thu, 16 Jun 2016 14:59:28 +0200 Subject: [PATCH 077/399] [IMP] web_timeline: add few features --- web_timeline/static/src/css/web_timeline.css | 6 ++- web_timeline/static/src/js/web_timeline.js | 52 +++++++++++++++++--- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/web_timeline/static/src/css/web_timeline.css b/web_timeline/static/src/css/web_timeline.css index 58aad0a8686e..79cbed61d189 100644 --- a/web_timeline/static/src/css/web_timeline.css +++ b/web_timeline/static/src/css/web_timeline.css @@ -35,4 +35,8 @@ .oe_chatter_toggle { padding: 15px; -} \ No newline at end of file +} + +.oe_timeline_view .vlabel .inner:hover{ + cursor: pointer; +} diff --git a/web_timeline/static/src/js/web_timeline.js b/web_timeline/static/src/js/web_timeline.js index 7835a2131d6c..6d63c6ea4aa9 100644 --- a/web_timeline/static/src/js/web_timeline.js +++ b/web_timeline/static/src/js/web_timeline.js @@ -104,6 +104,7 @@ openerp.web_timeline = function(instance) { this.name = fv.name || attrs.string; this.view_id = fv.view_id; + this.start = py.eval(attrs.start || 'None', instance.web.pyeval.context()); this.mode = attrs.mode; // one of month, week or day this.date_start = attrs.date_start; // Field name of starting // date field @@ -173,9 +174,15 @@ openerp.web_timeline = function(instance) { onUpdate: self.on_update, onRemove: self.on_remove, orientation: 'both', + start: self.start, }; - self.timeline = new vis.Timeline(self.$timeline.get(0)); + self.timeline = new vis.Timeline(self.$timeline.empty().get(0)); self.timeline.setOptions(options); + if(self.mode && self['on_scale_' + self.mode + '_clicked']) + { + self['on_scale_' + self.mode + '_clicked'](); + } + self.timeline.on('click', self.on_click); return $.when(); }, @@ -356,17 +363,14 @@ openerp.web_timeline = function(instance) { }, on_add: function(item, callback) { - var self = this; - var pop = new instance.web.form.SelectCreatePopup(this); + var self = this, + pop = new instance.web.form.SelectCreatePopup(this), + context = this.get_popup_context(item); pop.on("elements_selected", self, function(element_ids) { self.reload().then(function() { self.timeline.focus(element_ids); }); }); - context = {}; - context['default_'.concat(self.date_start)] = item.start; - context['default_'.concat(self.last_group_bys[0])] = item.group; - context['default_'.concat(self.date_stop)] = item.start.clone().addHours(this.date_delay || 1); pop.select_element( self.dataset.model, { @@ -378,6 +382,18 @@ openerp.web_timeline = function(instance) { ); }, + get_popup_context: function(item) { + var context = {}; + context['default_'.concat(this.date_start)] = item.start; + context['default_'.concat(this.date_stop)] = item.start.clone() + .addHours(this.date_delay || 1); + if(item.group != -1) + { + context['default_'.concat(this.last_group_bys[0])] = item.group; + } + return context; + }, + on_update: function(item, callback) { var self = this; var id = item.evt.id; @@ -472,6 +488,28 @@ openerp.web_timeline = function(instance) { return do_it(); }, + on_click: function(e) { + // handle a click on a group header + if(e.what == 'group-label') + { + return this.on_group_click(e); + } + }, + + on_group_click: function(e) { + if(e.group == -1) + { + return; + } + return this.do_action({ + type: 'ir.actions.act_window', + res_model: this.fields[this.last_group_bys[0]].relation, + res_id: e.group, + target: 'new', + views: [[false, 'form']], + }); + }, + on_today_clicked: function(){ this.current_window = { start: new Date(), From 28688d4135de92b5aa13267c7ce21b063f93e599 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Tue, 2 Aug 2016 00:59:05 +0200 Subject: [PATCH 078/399] [MIG] web_timeline: Migration to 9.0 --- web_timeline/README.rst | 117 ++++-- web_timeline/__openerp__.py | 11 +- web_timeline/models/ir_view.py | 15 +- web_timeline/static/description/icon.png | Bin 0 -> 12001 bytes web_timeline/static/src/css/web_timeline.css | 20 - web_timeline/static/src/js/web_timeline.js | 362 ++++++++----------- web_timeline/views/web_timeline.xml | 26 +- 7 files changed, 264 insertions(+), 287 deletions(-) create mode 100644 web_timeline/static/description/icon.png diff --git a/web_timeline/README.rst b/web_timeline/README.rst index e634fd9c1bca..6d1ca0ab6afd 100755 --- a/web_timeline/README.rst +++ b/web_timeline/README.rst @@ -2,48 +2,106 @@ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 -=============== -Timeline Widget -=============== +============= +Timeline view +============= -Define a new widget displaying events in an interactive visualization chart. +Define a new view displaying events in an interactive visualization chart. The widget is based on the external library http://visjs.org/timeline_examples.html -Usage -===== +Configuration +============= + +You need to define a view with the tag as base element. These are +the possible attributes for the tag: + +* date_start (required): it defines the name of the field of type date that + contains the start of the event. +* date_end (optional): it defines the name of the field of type date that + contains the end of the event. +* date_delay (optional): it defines the name of the field of type date that + contains the end of the event. +* default_group_by (required): it defines the name of the field that will be + taken as default group by when accessing the view or when no other group by + is selected. +* event_open_popup (optional): when set to true, it allows to edit the events + in a popup. If not (default value), the record is edited changing to form + view. +* colors (optional): it allows to set certain specific colors if the expressed + condition (JS syntax) is met. + +You also need to declare the view in an action window of the involved model. Example: + +.. code-block:: xml + - - - - - project.task.timeline - project.task - timeline - - - - - - - - - kanban,tree,form,calendar,gantt,timeline,graph - - - + + + project.task + timeline + + + + + + + + kanban,tree,form,calendar,gantt,timeline,graph + + + +Usage +===== + +For accessing the timeline view, you have to click on the button with the clock +icon in the view switcher. The first time you access to it, the timeline window +is zoomed to fit all the current elements, the same as when you perform a +search, filter or group by operation. + +You can use the mouse scroll to zoom in or out in the timeline, and click on +any free area and drag for panning the view in that direction. + +The records of your model will be shown as rectangles whose widths are the +duration of the event according our definition. You can select them clicking +on this rectangle. You can also use Ctrl or Shift keys for adding discrete +or range selections. Selected records are hightlighted with a different color +(but the difference will be more noticeable depending on the background color). +Once selected, you can drag and move the selected records across the timeline. + +When a record is selected, a red cross button appears on the upper left corner +that allows to remove that record. This doesn't work for multiple records +although they were selected. + +Records are grouped in different blocks depending on the group by criteria +selected (if none is specified, then the default group by is applied). +Dragging a record from one block to another change the corresponding field to +the value that represents the block. You can also click on the group name to +edit the involved record directly. + +Double-click on the record to edit it. Double-click in open area to create a +new record with the group and start date linked to the area you clicked in. + .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot :target: https://runbot.odoo-community.org/runbot/162/8.0 +Known issues / Roadmap +====================== + +* Implement support for vis.js timeline range item addition (with Ctrl key + pressed). +* Implement a more efficient way of refreshing timeline after a record update. + Bug Tracker =========== @@ -65,6 +123,7 @@ Contributors * Laurent Mignon * Adrien Peiffer +* Pedro M. Baeza Maintainer ---------- diff --git a/web_timeline/__openerp__.py b/web_timeline/__openerp__.py index 57ee01b07a47..5ed4ad647c44 100644 --- a/web_timeline/__openerp__.py +++ b/web_timeline/__openerp__.py @@ -4,16 +4,15 @@ { 'name': "Web timeline", - 'summary': """ - Interactive visualization chart to visualize events in time - """, - "version": "8.0.1.0.0", + 'summary': "Interactive visualization chart to show events in time", + "version": "9.0.1.0.0", 'author': 'ACSONE SA/NV,' + 'Tecnativa,' 'Odoo Community Association (OCA)', - "category": "Tools", + "category": "web", "website": "http://acsone.eu", 'depends': [ - 'web' + 'web', ], 'qweb': [ 'static/src/xml/web_timeline.xml', diff --git a/web_timeline/models/ir_view.py b/web_timeline/models/ir_view.py index 899d4873708f..bbf56e9684a9 100644 --- a/web_timeline/models/ir_view.py +++ b/web_timeline/models/ir_view.py @@ -2,8 +2,7 @@ # Copyright 2016 ACSONE SA/NV () # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models -from openerp import api +from openerp import fields, models TIMELINE_VIEW = ('timeline', 'Timeline') @@ -12,14 +11,4 @@ class IrUIView(models.Model): _inherit = 'ir.ui.view' - @api.model - def _setup_fields(self): - """Hack due since the field 'type' is not defined with the new api. - """ - cls = type(self) - type_selection = cls._fields['type'].selection - if TIMELINE_VIEW not in type_selection: - tmp = list(type_selection) - tmp.append(TIMELINE_VIEW) - cls._fields['type'].selection = tuple(set(tmp)) - super(IrUIView, self)._setup_fields() + type = fields.Selection(selection_add=[TIMELINE_VIEW]) diff --git a/web_timeline/static/description/icon.png b/web_timeline/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d01494920cc5393b0b44ccf97dc7f8be6967a2dd GIT binary patch literal 12001 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 literal 0 HcmV?d00001 diff --git a/web_timeline/static/src/css/web_timeline.css b/web_timeline/static/src/css/web_timeline.css index 79cbed61d189..898e7cf29d87 100644 --- a/web_timeline/static/src/css/web_timeline.css +++ b/web_timeline/static/src/css/web_timeline.css @@ -2,32 +2,12 @@ .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_timeline:after { content: "N"; } -.timeline-navigation-zoom-in .ui-icon{ - background: none !important; -} - -.timeline-navigation-zoom-out .ui-icon{ - background: none !important; -} -.timeline-navigation-move-left .ui-icon{ - background: none !important; -} -.timeline-navigation-move-right .ui-icon{ - background: none !important; -} -/*.vis.timeline .timeaxis .grid.odd { - background: #f5f5f5; -} */ /* gray background in weekends, white text color */ .vis.timeline .timeaxis .grid.saturday, .vis.timeline .timeaxis .grid.sunday { background: gray; } -/* .vis.timeline .timeaxis .text.saturday, -.vis.timeline .timeaxis .text.sunday { - color: white; -} */ .vis.timeline .item.range .content { overflow: visible; diff --git a/web_timeline/static/src/js/web_timeline.js b/web_timeline/static/src/js/web_timeline.js index 6d63c6ea4aa9..9abee0305e3f 100644 --- a/web_timeline/static/src/js/web_timeline.js +++ b/web_timeline/static/src/js/web_timeline.js @@ -1,7 +1,7 @@ -/*--------------------------------------------------------- - * Odoo web_timeline +/* Odoo web_timeline * Copyright 2015 ACSONE SA/NV - *---------------------------------------------------------*/ + * Copyright 2016 Pedro M. Baeza + * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ _.str.toBoolElse = function (str, elseValues, trueValues, falseValues) { var ret = _.str.toBool(str, trueValues, falseValues); @@ -11,21 +11,32 @@ _.str.toBoolElse = function (str, elseValues, trueValues, falseValues) { return ret; }; -openerp.web_timeline = function(instance) { - var _t = instance.web._t, - _lt = instance.web._lt, - QWeb = instance.web.qweb; +odoo.define('web_timeline.TimelineView', function (require) { + "use strict"; + + var core = require('web.core'); + var form_common = require('web.form_common'); + var Model = require('web.DataModel'); + var time = require('web.time'); + var View = require('web.View'); + var widgets = require('web_calendar.widgets'); + var _ = require('_'); + var $ = require('$'); + + var _t = core._t; + var _lt = core._lt; + var QWeb = core.qweb; function isNullOrUndef(value) { return _.isUndefined(value) || _.isNull(value); } - instance.web.views.add('timeline', 'instance.web_timeline.TimelineView'); - - instance.web_timeline.TimelineView = instance.web.View.extend({ + var TimelineView = View.extend({ template: "TimelineView", display_name: _lt('Timeline'), - quick_create_instance: 'instance.web_timeline.QuickCreate', + icon: 'fa-clock-o', + quick_create_instance: widgets.QuickCreate, + init: function (parent, dataset, view_id, options) { this._super(parent); this.ready = $.Deferred(); @@ -48,7 +59,7 @@ openerp.web_timeline = function(instance) { var promise = self.permissions[name]; if(!promise) { var defer = $.Deferred(); - new instance.web.Model(this.dataset.model) + new Model(this.dataset.model) .call("check_access_rights", [name, false]) .then(function (value) { self.permissions[name] = value; @@ -84,14 +95,14 @@ openerp.web_timeline = function(instance) { this.fields_view = fv; this.parse_colors(); this.$timeline = this.$el.find(".oe_timeline_widget"); - this.$el.find(".oe_timeline_button_today").click(self.on_today_clicked); - this.$el.find(".oe_timeline_button_scale_day").click(self.on_scale_day_clicked); - this.$el.find(".oe_timeline_button_scale_week").click(self.on_scale_week_clicked); - this.$el.find(".oe_timeline_button_scale_month").click(self.on_scale_month_clicked); - this.$el.find(".oe_timeline_button_scale_year").click(self.on_scale_year_clicked); + this.$el.find(".oe_timeline_button_today").click($.proxy(this.on_today_clicked, this)); + this.$el.find(".oe_timeline_button_scale_day").click($.proxy(this.on_scale_day_clicked, this)); + this.$el.find(".oe_timeline_button_scale_week").click($.proxy(this.on_scale_week_clicked, this)); + this.$el.find(".oe_timeline_button_scale_month").click($.proxy(this.on_scale_month_clicked, this)); + this.$el.find(".oe_timeline_button_scale_year").click($.proxy(this.on_scale_year_clicked, this)); this.current_window = { - start: new Date(), - end : new Date().addHours(24), + start: new moment(), + end : new moment().add(24, 'hours'), } this.info_fields = []; @@ -104,45 +115,43 @@ openerp.web_timeline = function(instance) { this.name = fv.name || attrs.string; this.view_id = fv.view_id; - this.start = py.eval(attrs.start || 'None', instance.web.pyeval.context()); - this.mode = attrs.mode; // one of month, week or day - this.date_start = attrs.date_start; // Field name of starting - // date field + this.mode = attrs.mode; + this.date_start = attrs.date_start; this.date_stop = attrs.date_stop; - + if (!isNullOrUndef(attrs.quick_create_instance)) { self.quick_create_instance = 'instance.' + attrs.quick_create_instance; } - // If this field is set ot true, we don't open the event in form + // If this field is set ot true, we don't open the event in form // view, but in a popup with the view_id passed by this parameter if (isNullOrUndef(attrs.event_open_popup) || !_.str.toBoolElse(attrs.event_open_popup, true)) { this.open_popup_action = false; } else { this.open_popup_action = attrs.event_open_popup; } - + this.fields = fv.fields; for (var fld = 0; fld < fv.arch.children.length; fld++) { this.info_fields.push(fv.arch.children[fld].attrs.name); } - var fields_get = new instance.web.Model(this.dataset.model) + var fields_get = new Model(this.dataset.model) .call('fields_get') .then(function (fields) { self.fields = fields; }); - var unlink_check = new instance.web.Model(this.dataset.model) + var unlink_check = new Model(this.dataset.model) .call("check_access_rights", ["unlink", false]) .then(function (unlink_right) { self.unlink_right = unlink_right; }); - var edit_check = new instance.web.Model(this.dataset.model) + var edit_check = new Model(this.dataset.model) .call("check_access_rights", ["write", false]) .then(function (write_right) { self.write_right = write_right; - + }); var init = function () { self.init_timeline().then(function() { @@ -151,9 +160,8 @@ openerp.web_timeline = function(instance) { self.ready.resolve(); }); }; - - var test = $.when(self.fields_get, self.get_perm('unlink'), self.get_perm('write'), self.get_perm('create')); - return $.when(test).then(init); + + return $.when(self.fields_get, self.get_perm('unlink'), self.get_perm('write'), self.get_perm('create')).then(init); }, init_timeline: function() { @@ -161,10 +169,14 @@ openerp.web_timeline = function(instance) { var options = { groupOrder: self.group_order, editable: { - add: self.permissions['create'], // add new items by double tapping - updateTime: self.permissions['write'], // drag items horizontally - updateGroup: self.permissions['write'], // drag items from one group to another - remove: self.permissions['unlink'], // delete an item by tapping the delete button top right + // add new items by double tapping + add: self.permissions['create'], + // drag items horizontally + updateTime: self.permissions['write'], + // drag items from one group to another + updateGroup: self.permissions['write'], + // delete an item by tapping the delete button top right + remove: self.permissions['unlink'], }, orientation: 'both', selectable: true, @@ -174,7 +186,6 @@ openerp.web_timeline = function(instance) { onUpdate: self.on_update, onRemove: self.on_remove, orientation: 'both', - start: self.start, }; self.timeline = new vis.Timeline(self.$timeline.empty().get(0)); self.timeline.setOptions(options); @@ -195,14 +206,14 @@ openerp.web_timeline = function(instance) { return +1; } return grp1.content - grp2.content; - + }, - /** - * Transform OpenERP event object to timeline event object - */ + /* Transform Odoo event object to timeline event object */ event_data_transform: function(evt) { var self = this; + var date_start = new moment(); + var date_stop = new moment(); var date_delay = evt[this.date_delay] || 1.0, all_day = this.all_day ? evt[this.all_day] : false, @@ -211,19 +222,19 @@ openerp.web_timeline = function(instance) { attendees = []; if (!all_day) { - date_start = instance.web.auto_str_to_date(evt[this.date_start]); - date_stop = this.date_stop ? instance.web.auto_str_to_date(evt[this.date_stop]) : null; + date_start = time.auto_str_to_date(evt[this.date_start]); + date_stop = this.date_stop ? time.auto_str_to_date(evt[this.date_stop]) : null; } else { - date_start = instance.web.auto_str_to_date(evt[this.date_start].split(' ')[0],'start'); - date_stop = this.date_stop ? instance.web.auto_str_to_date(evt[this.date_stop].split(' ')[0],'stop') : null; + date_start = time.auto_str_to_date(evt[this.date_start].split(' ')[0],'start'); + date_stop = this.date_stop ? time.auto_str_to_date(evt[this.date_stop].split(' ')[0],'stop') : null; } - + if (!date_start){ - date_start = new Date(); + date_start = new moment(); } if(!date_stop) { - date_stop = date_start.clone().addHours(date_delay); + date_stop = moment(date_start).add(date_delay, 'hours').toDate(); } var group = evt[self.last_group_bys[0]]; if (group){ @@ -238,17 +249,16 @@ openerp.web_timeline = function(instance) { var r = { 'start': date_start, 'end': date_stop, - 'content': evt.__name, + 'content': evt.__name != undefined ? evt.__name : evt.display_name, 'id': evt.id, 'group': group, 'evt': evt, 'style': 'background-color: ' + self.color + ';', - + }; self.color = undefined; return r; }, - do_search: function (domains, contexts, group_bys) { var self = this; @@ -279,7 +289,6 @@ openerp.web_timeline = function(instance) { }); }, - reload: function() { var self = this; if (this.last_domains !== undefined){ @@ -288,34 +297,34 @@ openerp.web_timeline = function(instance) { } }, - on_data_loaded: function(tasks, group_bys) { + on_data_loaded: function(events, group_bys) { var self = this; - var ids = _.pluck(tasks, "id"); + var ids = _.pluck(events, "id"); return this.dataset.name_get(ids).then(function(names) { - var ntasks = _.map(tasks, function(task) { - return _.extend({__name: _.detect(names, function(name) { return name[0] == task.id; })[1]}, task); + var nevents = _.map(events, function(event) { + return _.extend({__name: _.detect(names, function(name) { return name[0] == event.id; })[1]}, event); }); - return self.on_data_loaded_2(ntasks, group_bys); + return self.on_data_loaded_2(nevents, group_bys); }); }, - on_data_loaded_2: function(tasks, group_bys) { + on_data_loaded_2: function(events, group_bys) { var self = this; var data = []; var groups = []; - _.each(tasks, function(event) { + _.each(events, function(event) { if (event[self.date_start]){ data.push(self.event_data_transform(event)); } }); - // get the groups - var split_groups = function(tasks, group_bys) { + // get the groups + var split_groups = function(events, group_bys) { if (group_bys.length === 0) - return tasks; + return events; var groups = []; groups.push({id:-1, content: _t('-')}) - _.each(tasks, function(task) { - var group_name = task[_.first(group_bys)]; + _.each(events, function(event) { + var group_name = event[_.first(group_bys)]; if (group_name) { var group = _.find(groups, function(group) { return _.isEqual(group.id, group_name[0]); }); if (group === undefined) { @@ -326,10 +335,10 @@ openerp.web_timeline = function(instance) { }); return groups; } - var groups = split_groups(tasks, group_bys); + var groups = split_groups(events, group_bys); this.timeline.setGroups(groups); this.timeline.setItems(data); - this.timeline.setWindow(this.current_window); + this.timeline.fit(); }, do_show: function() { @@ -343,55 +352,46 @@ openerp.web_timeline = function(instance) { } return this._super(action); }, - /** - * Handles a newly created record - * - * @param {id} id of the newly created record - */ - quick_created: function (id) { - - /** - * Note: it's of the most utter importance NOT to use inplace - * modification on this.dataset.ids as reference to this data is - * spread out everywhere in the various widget. Some of these - * reference includes values that should trigger action upon - * modification. - */ + + create_completed: function(id) { + var self = this; this.dataset.ids = this.dataset.ids.concat([id]); this.dataset.trigger("dataset_changed", id); - this.refresh_event(id); + this.dataset.read_ids([id], this.fields).done(function(records) { + var new_event = self.event_data_transform(records[0]); + var items = self.timeline.itemsData; + items.add(new_event); + self.timeline.setItems(items); + }); }, on_add: function(item, callback) { - var self = this, - pop = new instance.web.form.SelectCreatePopup(this), - context = this.get_popup_context(item); - pop.on("elements_selected", self, function(element_ids) { - self.reload().then(function() { - self.timeline.focus(element_ids); - }); - }); - pop.select_element( - self.dataset.model, - { - title: _t("Create"), - initial_view: "form", - }, - null, - context - ); + var self = this; + var context = this.dataset.get_context(); + // Initialize default values for creation + var default_context = {} + default_context['default_'.concat(this.date_start)] = item.start; + default_context['default_'.concat(this.date_stop)] = moment(item.start).add(1, 'hours').toDate(); + if (item.group > 0) { + default_context['default_'.concat(this.last_group_bys[0])] = item.group; + } + context.add(default_context); + // Show popup + var dialog = new form_common.FormViewDialog(this, { + res_model: this.dataset.model, + res_id: null, + context: context, + view_id: +this.open_popup_action, + }).open(); + dialog.on('create_completed', this, this.create_completed); + return false; }, - get_popup_context: function(item) { - var context = {}; - context['default_'.concat(this.date_start)] = item.start; - context['default_'.concat(this.date_stop)] = item.start.clone() - .addHours(this.date_delay || 1); - if(item.group != -1) - { - context['default_'.concat(this.last_group_bys[0])] = item.group; - } - return context; + write_completed: function(id) { + this.dataset.trigger("dataset_changed", id); + this.current_window = this.timeline.getWindow(); + this.reload(); + this.timeline.setWindow(this.current_window); }, on_update: function(item, callback) { @@ -408,47 +408,14 @@ openerp.web_timeline = function(instance) { } } else { - var id_cast = parseInt(id).toString() == id ? parseInt(id) : id; - var pop = new instance.web.form.FormOpenPopup(self); - pop.on('write_completed', self, self.reload); - pop.show_element( - self.dataset.model, - id_cast, - null, - {readonly: true, title: title} - ); - var form_controller = pop.view_form; - form_controller.on("load_record", self, function() { - var footer = pop.$el.closest(".modal").find(".modal-footer"); - footer.find('.oe_form_button_edit,.oe_form_button_save').remove(); - footer.find(".oe_form_button_cancel").prev().remove(); - footer.find('.oe_form_button_cancel').before(" or "); - button_edit = _.str.sprintf("",_t("Edit")); - button_save = _.str.sprintf("",_t("Save")); - footer.prepend(button_edit + button_save); - footer.find('.oe_form_button_save').hide(); - footer.find('.oe_form_button_edit').on('click', function() { - form_controller.to_edit_mode(); - footer.find('.oe_form_button_edit,.oe_form_button_save').toggle(); - }); - footer.find('.oe_form_button_save').on('click', function() { - form_controller.save(); - form_controller.to_view_mode(); - footer.find('.oe_form_button_edit,.oe_form_button_save').toggle(); - }); - var chatter = pop.$el.closest(".modal").find(".oe_chatter"); - if(chatter.length){ - var chatter_toggler = $($.parseHTML(_.str.sprintf('
%s
', _t("Messages")))); - chatter.before(chatter_toggler) - var chatter_content = chatter_toggler.find(".oe_chatter_content"); - chatter_content.prepend(chatter); - chatter_content.toggle(); - chatter_toggler.click(function(){ - chatter_content.toggle(); - chatter_toggler.toggleClass('fa-plus-circle fa-minus-circle'); - }); - } - }); + var dialog = new form_common.FormViewDialog(this, { + res_model: this.dataset.model, + res_id: parseInt(id).toString() == id ? parseInt(id) : id, + context: this.dataset.get_context(), + title: title, + view_id: +this.open_popup_action, + }).open(); + dialog.on('write_completed', this, this.write_completed); } return false; }, @@ -463,14 +430,12 @@ openerp.web_timeline = function(instance) { } var data = {}; data[self.fields_view.arch.attrs.date_start] = - instance.web.auto_date_to_str(start, self.fields[self.fields_view.arch.attrs.date_start].type); - data[self.fields_view.arch.attrs.date_stop] = - instance.web.auto_date_to_str(end, self.fields[self.fields_view.arch.attrs.date_stop].type); - data[self.fields_view.arch.attrs.default_group_by] = group; + time.auto_date_to_str(start, self.fields[self.fields_view.arch.attrs.date_start].type); + data[self.fields_view.arch.attrs.date_stop] = + time.auto_date_to_str(end, self.fields[self.fields_view.arch.attrs.date_stop].type); + data[self.fields_view.arch.attrs.default_group_by] = group; var id = item.evt.id; - this.dataset.write(id, data).then(function() { - self.reload(); - }); + this.dataset.write(id, data); }, on_remove: function(item, callback) { @@ -497,7 +462,7 @@ openerp.web_timeline = function(instance) { }, on_group_click: function(e) { - if(e.group == -1) + if (e.group == -1) { return; } @@ -510,55 +475,42 @@ openerp.web_timeline = function(instance) { }); }, + scale_current_window: function(factor){ + if (this.timeline){ + this.current_window = this.timeline.getWindow(); + this.current_window.end = moment(this.current_window.start).add(factor, 'hours'); + this.timeline.setWindow(this.current_window); + } + }, + on_today_clicked: function(){ this.current_window = { - start: new Date(), - end : new Date().addHours(24), - } - - if (this.timeline){ - this.timeline.setWindow(this.current_window); - } + start: new moment(), + end : new moment().add(24, 'hours'), + } + + if (this.timeline) { + this.timeline.setWindow(this.current_window); + } + }, + + on_scale_day_clicked: function(){ + this.scale_current_window(24); + }, + + on_scale_week_clicked: function(){ + this.scale_current_window(24 * 7); }, - - get_middel_date: function(start, end){ - //Get 1 hour in milliseconds - var one_hour=1000*60*60; - - // Convert both dates to milliseconds - var date1_ms = start.getTime(); - var date2_ms = end.getTime(); - - // Calculate the difference in milliseconds - var difference_ms = date2_ms - date1_ms; - - // Convert back to days and return - nb_hours = Math.round(difference_ms/one_hour); - return start.clone().addHours(nb_hours/2) - }, - - scale_current_window: function(factor){ - if (this.timeline){ - this.current_window = this.timeline.getWindow(); - this.current_window.end = this.current_window.start.clone().addHours(factor); - this.timeline.setWindow(this.current_window); - } - }, - - on_scale_day_clicked: function(){ - this.scale_current_window(24); - }, - - on_scale_week_clicked: function(){ - this.scale_current_window(24 * 7); - }, - - on_scale_month_clicked: function(){ - this.scale_current_window(24 * 30); - }, - on_scale_year_clicked: function(){ - this.scale_current_window(24 * 365); - }, + on_scale_month_clicked: function(){ + this.scale_current_window(24 * 30); + }, + + on_scale_year_clicked: function(){ + this.scale_current_window(24 * 365); + }, }); -}; + + core.view_registry.add('timeline', TimelineView); + return TimelineView; +}); diff --git a/web_timeline/views/web_timeline.xml b/web_timeline/views/web_timeline.xml index 4291e25a657d..95f6367aae44 100644 --- a/web_timeline/views/web_timeline.xml +++ b/web_timeline/views/web_timeline.xml @@ -1,16 +1,14 @@ - - - - - - + + + From 6f261ee58d985074aee2ac74533252abbaaf2112 Mon Sep 17 00:00:00 2001 From: Aldo_Soares Date: Tue, 15 May 2018 16:59:33 -0300 Subject: [PATCH 112/399] [MIG] web_group_expand: Migration to 11.0 --- web_group_expand/README.rst | 10 +- .../{__openerp__.py => __manifest__.py} | 16 ++- .../static/src/css/expand_buttons.css | 8 -- .../static/src/css/web_group_expand.css | 8 ++ .../static/src/js/web_group_expand.js | 113 +++++++++++------- .../static/src/xml/expand_buttons.xml | 11 -- .../static/src/xml/web_group_expand.xml | 11 ++ web_group_expand/templates/assets.xml | 9 ++ web_group_expand/views/templates.xml | 11 -- 9 files changed, 117 insertions(+), 80 deletions(-) rename web_group_expand/{__openerp__.py => __manifest__.py} (53%) delete mode 100644 web_group_expand/static/src/css/expand_buttons.css create mode 100644 web_group_expand/static/src/css/web_group_expand.css delete mode 100644 web_group_expand/static/src/xml/expand_buttons.xml create mode 100644 web_group_expand/static/src/xml/web_group_expand.xml create mode 100644 web_group_expand/templates/assets.xml delete mode 100644 web_group_expand/views/templates.xml diff --git a/web_group_expand/README.rst b/web_group_expand/README.rst index a88dcba577f4..278696a455f9 100644 --- a/web_group_expand/README.rst +++ b/web_group_expand/README.rst @@ -1,5 +1,6 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :alt: License: AGPL-3 +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: https://www.gnu.org/licenses/agpl + :alt: License: AGPL-3 ==================== Group Expand Buttons @@ -16,7 +17,7 @@ Usage .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/162/8.0 + :target: https://runbot.odoo-community.org/runbot/162/11.0 For further information, please visit: @@ -29,7 +30,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed feedback -`here `_. +`here `_. Credits @@ -42,6 +43,7 @@ Contributors * Oihane Crucelaegui * Pedro M. Baeza * Jay Vora (SerpentCS) for their alternative implementation +* Aldo Soares Maintainer ---------- diff --git a/web_group_expand/__openerp__.py b/web_group_expand/__manifest__.py similarity index 53% rename from web_group_expand/__openerp__.py rename to web_group_expand/__manifest__.py index 36acdc497d66..c680789f6c62 100644 --- a/web_group_expand/__openerp__.py +++ b/web_group_expand/__manifest__.py @@ -1,19 +1,25 @@ { "name": "Group Expand Buttons", + 'summary': """ + Enables expanding/reset all groups in list view + """, + "version": "11.0.1.0.0", "category": "Web", - "version": "8.0.1.0.0", "author": "OpenERP SA, " "AvanzOSC, " "Serv. Tecnol. Avanzados - Pedro M. Baeza, " "Odoo Community Association (OCA)", + "website": "https://github.com/oca/web", + 'license': 'AGPL-3', "depends": [ "web" ], - "qweb": [ - "static/src/xml/expand_buttons.xml", - ], "data": [ - "views/templates.xml", + "templates/assets.xml", + ], + "qweb": [ + "static/src/xml/web_group_expand.xml", ], "installable": True, + 'application': False, } diff --git a/web_group_expand/static/src/css/expand_buttons.css b/web_group_expand/static/src/css/expand_buttons.css deleted file mode 100644 index e02cfec5732f..000000000000 --- a/web_group_expand/static/src/css/expand_buttons.css +++ /dev/null @@ -1,8 +0,0 @@ - -.openerp ul#oe_group_by li.oe_group_expand{ - line-height: 25px; -} -.openerp .fa-expand, .openerp .fa-compress { - font-size:15px; - font-weight:bold; -} diff --git a/web_group_expand/static/src/css/web_group_expand.css b/web_group_expand/static/src/css/web_group_expand.css new file mode 100644 index 000000000000..6360421183a0 --- /dev/null +++ b/web_group_expand/static/src/css/web_group_expand.css @@ -0,0 +1,8 @@ +.o_favorites_menu + .toggle_buttons{ + float: left; + padding-left: 5px; +} + +.o_favorites_menu + .toggle_buttons button{ + display: inline; +} \ No newline at end of file diff --git a/web_group_expand/static/src/js/web_group_expand.js b/web_group_expand/static/src/js/web_group_expand.js index 37bee516466c..ddb980322de3 100644 --- a/web_group_expand/static/src/js/web_group_expand.js +++ b/web_group_expand/static/src/js/web_group_expand.js @@ -1,44 +1,75 @@ +odoo.define('web_groupby_expand.web_groupby_expand', function (require) { "use strict"; -openerp.web_group_expand = function(openerp) { - var QWeb = openerp.web.qweb; - openerp.web.ViewManager.include({ - switch_mode: function(view_type, no_store, view_options) { - if (view_type != 'list' && view_type != 'tree' ) { - this.$el.find("ul#oe_group_by").remove(); + +var ViewManager = require('web.ViewManager'); + +ViewManager.include({ + render_view_control_elements: function (){ + var res = this._super.apply(this, arguments); + if (this.searchview_elements) { + var searchview = this.searchview_elements.$searchview_buttons + var expand_button = searchview.find('#oe_group_by_expand'); + var reset_button = searchview.find('#oe_group_by_reset'); + expand_button.on('click', this.proxy('expand_records')); + reset_button.on('click', this.proxy('reset_records')); + this.do_toggle_visibility(false) + } + return res; + }, + + _process_search_data: function () { + var res = this._super.apply(this, arguments); + if (this.active_view && this.active_view.type == 'list' && this.searchview_elements) { + var searchview = this.searchview_elements.$searchview_buttons + var has_groups = res.groupBy.length > 0 + this.do_toggle_visibility(has_groups) + } + return res; + }, + + get_search_groups: function (groups) { + var current_search_group = {}; + for (var group in groups) { + if (groups[group].count > 0 && groups[group].data.length > 0) { + current_search_group[groups[group].id] = groups[group].data; } - if(view_type == 'tree'){ - this.load_expand_buttons(); - this.$ExpandButtons.find("a#oe_group_by_reset").click(function(){ - $('.oe_open .treeview-tr.oe-treeview-first').filter(function(){return ($(this).parents('tr').attr('data-level') == 1)}).click() - }); - this.$ExpandButtons.find("a#oe_group_by_expand").click(function(){ - $('.treeview-tr.oe-treeview-first').filter(function(){return (!$(this).parents().is('.oe_open')) & ($(this).parents().css( "display" ) != 'none')}).click(); - }); + } + return current_search_group; + }, + + do_toggle_visibility: function (show) { + var searchview = this.searchview_elements.$searchview_buttons + var buttons = searchview.find('.toggle_buttons'); + if (show) { + buttons.show() + } + else { + buttons.hide() + } + }, + + toggle_group_records: function (op, controller) { + var current_search_group = this.get_search_groups(controller.model.localData); + if (current_search_group) { + for (var group in current_search_group) { + for (var gp in current_search_group[group]) { + var cur_group = controller.model.localData[current_search_group[group][gp]] + if ((op && !cur_group.isOpen) || (!op && cur_group.isOpen)) { + controller.trigger_up('toggle_group', { group: cur_group }) + } + } } - return this._super.apply(this, arguments); - }, - expand: function(domains, contexts, groupbys) { - this.$el.find("ul#oe_group_by").remove(); - if(groupbys.length && this.active_view == 'list') { - this.load_expand_buttons(); - this.$el.find("a#oe_group_by_reset").click(function(){ - $('span.ui-icon-triangle-1-s').click() - }); - this.$el.find("a#oe_group_by_expand").click(function(){ - $('span.ui-icon-triangle-1-e').click() - }); - } - }, - load_expand_buttons:function() { - var self = this; - this.$ExpandButtons = $(QWeb.render("GroupExpand.Buttons", {'widget':self})); - this.$el.find("ul.oe_view_manager_switch.oe_button_group.oe_right").before(this.$ExpandButtons); - }, - setup_search_view: function(view_id, search_defaults) { - var self = this; - var res = this._super.apply(this, arguments); - this.searchview.on('search_data', self, this.expand); - return res - }, - }) -} \ No newline at end of file + } + }, + + reset_records: function () { + var controller = this.active_view.controller; + this.toggle_group_records(false, controller) + }, + + expand_records: function () { + var controller = this.active_view.controller; + this.toggle_group_records(true, controller) + }, +}); +}); diff --git a/web_group_expand/static/src/xml/expand_buttons.xml b/web_group_expand/static/src/xml/expand_buttons.xml deleted file mode 100644 index 27d3a50a1092..000000000000 --- a/web_group_expand/static/src/xml/expand_buttons.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - -
-
    -
  • -
  • -
-
-
-
diff --git a/web_group_expand/static/src/xml/web_group_expand.xml b/web_group_expand/static/src/xml/web_group_expand.xml new file mode 100644 index 000000000000..614900a5e9ce --- /dev/null +++ b/web_group_expand/static/src/xml/web_group_expand.xml @@ -0,0 +1,11 @@ + + \ No newline at end of file diff --git a/web_group_expand/templates/assets.xml b/web_group_expand/templates/assets.xml new file mode 100644 index 000000000000..4fcaee58c1f1 --- /dev/null +++ b/web_group_expand/templates/assets.xml @@ -0,0 +1,9 @@ + + + + diff --git a/web_group_expand/views/templates.xml b/web_group_expand/views/templates.xml deleted file mode 100644 index e5326153145a..000000000000 --- a/web_group_expand/views/templates.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - From 4501eedfc104dc804caffeeae2a9249405b8a883 Mon Sep 17 00:00:00 2001 From: Vincent Vinet Date: Tue, 24 Mar 2015 07:49:29 -0400 Subject: [PATCH 113/399] [ADD] web_widget_datepicker_options * use include instead of extend * add README.rst * update api doc link in readme.rst * remove description from __oe__ since it is in README.rst * add OCA icon and AGPL badges * add datepicker.js through assets_backend --- README.rst | 48 ++++++++++++++++++++++ __init__.py | 21 ++++++++++ __openerp__.py | 36 ++++++++++++++++ static/description/icon.png | Bin 0 -> 9455 bytes static/description/icon.svg | 79 ++++++++++++++++++++++++++++++++++++ static/src/js/datepicker.js | 53 ++++++++++++++++++++++++ view/qweb.xml | 10 +++++ 7 files changed, 247 insertions(+) create mode 100644 README.rst create mode 100644 __init__.py create mode 100644 __openerp__.py create mode 100644 static/description/icon.png create mode 100644 static/description/icon.svg create mode 100644 static/src/js/datepicker.js create mode 100644 view/qweb.xml diff --git a/README.rst b/README.rst new file mode 100644 index 000000000000..56dbf0838aa1 --- /dev/null +++ b/README.rst @@ -0,0 +1,48 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :alt: License: AGPL-3 + +Datepicker Widget Options +========================= + +This module allows passing options to the jquery datepicker for fields that use +the datepicker widget. The option are passed as-is and are not validated. + +To see all supported options, see the `API documentation +`_. + + +Usage +===== + +You must pass all options through the "datepicker" field in the options:: + + ... + + ... + +Known issues / Roadmap +====================== + +* Absolutely no validation on options. + +Credits +======= + +Contributors +------------ + +* Vincent Vinet + +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/__init__.py b/__init__.py new file mode 100644 index 000000000000..5daf74683278 --- /dev/null +++ b/__init__.py @@ -0,0 +1,21 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2015 Savoir-faire Linux +# (). +# +# 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/__openerp__.py b/__openerp__.py new file mode 100644 index 000000000000..4f48932d4dbe --- /dev/null +++ b/__openerp__.py @@ -0,0 +1,36 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2015 Savoir-faire Linux +# (). +# +# 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_widget_datepicker_options', + "version": "1.0", + "depends": [ + 'base', + 'web', + ], + "data": [ + 'view/qweb.xml', + ], + "author": "Vincent Vinet", + "installable": True, + "active": False, +} diff --git a/static/description/icon.png b/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~! zVpnB`o+K7|Al`Q_U;eD$B zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__ zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_ zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)( z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9 zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz# z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K= z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C zuVl&0duN<;uOsB3%T9Fp8t{ED108<+W(nOZd?gDnfNBC3>M8WE61$So|P zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1 zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_ zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8 zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ> zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD z#z-)AXwSRY?OPefw^iI+ z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$ z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6 zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+ z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC) zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x! zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8 z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n= z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@ zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y< zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6 zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6% z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(| z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6 z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d} z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/static/description/icon.svg b/static/description/icon.svg new file mode 100644 index 000000000000..a7a26d0932ab --- /dev/null +++ b/static/description/icon.svg @@ -0,0 +1,79 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/static/src/js/datepicker.js b/static/src/js/datepicker.js new file mode 100644 index 000000000000..304f119b7bc1 --- /dev/null +++ b/static/src/js/datepicker.js @@ -0,0 +1,53 @@ +/* + OpenERP, Open Source Management Solution + This module copyright (C) 2015 Savoir-faire Linux + (). + + 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 . +*/ +/*global openerp, _, $ */ + +openerp.web_widget_datepicker_options = function (instance) { + + "use strict"; + + instance.web.form.FieldDatetime.include({ + initialize_content: function() { + this._super(); + var self = this; + if (this.datewidget) { + if (typeof this.options.datepicker === 'object') { + $.map(this.options.datepicker, function(value, key) { + self.datewidget.picker('option', key, value); + }); + } + } + } + }); + + instance.web.form.FieldDate.include({ + initialize_content: function() { + this._super(); + var self = this; + if (this.datewidget) { + if (typeof this.options.datepicker === 'object') { + $.map(this.options.datepicker, function(value, key) { + self.datewidget.picker('option', key, value); + }); + } + } + } + }); +}; + diff --git a/view/qweb.xml b/view/qweb.xml new file mode 100644 index 000000000000..9921348dd08b --- /dev/null +++ b/view/qweb.xml @@ -0,0 +1,10 @@ + + + + + + From 9cc1e4e14763e4377e0382902545f9f6b45206e5 Mon Sep 17 00:00:00 2001 From: Yannick Vaucher Date: Fri, 22 May 2015 19:45:36 +0200 Subject: [PATCH 114/399] Add bug tracker link on README.rst --- README.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.rst b/README.rst index 56dbf0838aa1..f21fe3d5a4fd 100644 --- a/README.rst +++ b/README.rst @@ -25,6 +25,16 @@ Known issues / Roadmap * Absolutely no validation on options. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed feedback +`here `_. + + Credits ======= From 23e753e274f70be118d19eea6b461ff6b24b7d9c Mon Sep 17 00:00:00 2001 From: Markus Schneider Date: Thu, 4 Jun 2015 14:30:25 +0200 Subject: [PATCH 115/399] add OCA to author --- __openerp__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/__openerp__.py b/__openerp__.py index 4f48932d4dbe..b5db00c83e29 100644 --- a/__openerp__.py +++ b/__openerp__.py @@ -30,7 +30,8 @@ "data": [ 'view/qweb.xml', ], - "author": "Vincent Vinet", + "author": "Vincent Vinet, " + "Odoo Community Association (OCA)", "installable": True, "active": False, } From 2af52e4899d4fc80db1c3f3749038f48f7c2edf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= Date: Fri, 9 Oct 2015 10:03:39 +0200 Subject: [PATCH 116/399] [UPD] prefix versions with 8.0 --- __openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__openerp__.py b/__openerp__.py index b5db00c83e29..373262030761 100644 --- a/__openerp__.py +++ b/__openerp__.py @@ -22,7 +22,7 @@ { "name": 'web_widget_datepicker_options', - "version": "1.0", + "version": "8.0.1.0.0", "depends": [ 'base', 'web', From 85cb6f628c0bf9d463a471558ee2f8be269b267a Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Wed, 14 Oct 2015 02:57:05 +0200 Subject: [PATCH 117/399] [MIG] Make modules uninstallable --- __openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__openerp__.py b/__openerp__.py index 373262030761..67b23c1ec782 100644 --- a/__openerp__.py +++ b/__openerp__.py @@ -32,6 +32,6 @@ ], "author": "Vincent Vinet, " "Odoo Community Association (OCA)", - "installable": True, + 'installable': False, "active": False, } From f0c38a00dd81e56f908f1b4e9172411d180b94b1 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 6 Oct 2016 16:13:01 +0200 Subject: [PATCH 118/399] [MIG] Rename manifest files --- __openerp__.py => __manifest__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename __openerp__.py => __manifest__.py (100%) diff --git a/__openerp__.py b/__manifest__.py similarity index 100% rename from __openerp__.py rename to __manifest__.py From 9b264c286eb4d36a95e198c6eaa21544cb3b8edc Mon Sep 17 00:00:00 2001 From: Yanina Aular Date: Mon, 14 May 2018 12:26:34 -0500 Subject: [PATCH 119/399] [MIG] Migrate web_widget_datepicker_options to version 11.0 This commit extracts the module from version 10 and migrates it to v11 --- static/src/js/datepicker.js | 53 ------------------ .../README.rst | 1 + .../__init__.py | 0 .../__manifest__.py | 6 +- .../static}/description/icon.png | Bin .../static}/description/icon.svg | 0 .../static/src/js/datepicker.js | 43 ++++++++++++++ .../view}/qweb.xml | 0 8 files changed, 47 insertions(+), 56 deletions(-) delete mode 100644 static/src/js/datepicker.js rename README.rst => web_widget_datepicker_options/README.rst (97%) rename __init__.py => web_widget_datepicker_options/__init__.py (100%) rename __manifest__.py => web_widget_datepicker_options/__manifest__.py (94%) rename {static => web_widget_datepicker_options/static}/description/icon.png (100%) rename {static => web_widget_datepicker_options/static}/description/icon.svg (100%) create mode 100644 web_widget_datepicker_options/static/src/js/datepicker.js rename {view => web_widget_datepicker_options/view}/qweb.xml (100%) diff --git a/static/src/js/datepicker.js b/static/src/js/datepicker.js deleted file mode 100644 index 304f119b7bc1..000000000000 --- a/static/src/js/datepicker.js +++ /dev/null @@ -1,53 +0,0 @@ -/* - OpenERP, Open Source Management Solution - This module copyright (C) 2015 Savoir-faire Linux - (). - - 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 . -*/ -/*global openerp, _, $ */ - -openerp.web_widget_datepicker_options = function (instance) { - - "use strict"; - - instance.web.form.FieldDatetime.include({ - initialize_content: function() { - this._super(); - var self = this; - if (this.datewidget) { - if (typeof this.options.datepicker === 'object') { - $.map(this.options.datepicker, function(value, key) { - self.datewidget.picker('option', key, value); - }); - } - } - } - }); - - instance.web.form.FieldDate.include({ - initialize_content: function() { - this._super(); - var self = this; - if (this.datewidget) { - if (typeof this.options.datepicker === 'object') { - $.map(this.options.datepicker, function(value, key) { - self.datewidget.picker('option', key, value); - }); - } - } - } - }); -}; - diff --git a/README.rst b/web_widget_datepicker_options/README.rst similarity index 97% rename from README.rst rename to web_widget_datepicker_options/README.rst index f21fe3d5a4fd..aae7b04fc858 100644 --- a/README.rst +++ b/web_widget_datepicker_options/README.rst @@ -42,6 +42,7 @@ Contributors ------------ * Vincent Vinet +* Yanina Aular Maintainer ---------- diff --git a/__init__.py b/web_widget_datepicker_options/__init__.py similarity index 100% rename from __init__.py rename to web_widget_datepicker_options/__init__.py diff --git a/__manifest__.py b/web_widget_datepicker_options/__manifest__.py similarity index 94% rename from __manifest__.py rename to web_widget_datepicker_options/__manifest__.py index 67b23c1ec782..40522db8487b 100644 --- a/__manifest__.py +++ b/web_widget_datepicker_options/__manifest__.py @@ -22,7 +22,8 @@ { "name": 'web_widget_datepicker_options', - "version": "8.0.1.0.0", + "version": "11.0.1.0.0", + "license": "AGPL-3", "depends": [ 'base', 'web', @@ -32,6 +33,5 @@ ], "author": "Vincent Vinet, " "Odoo Community Association (OCA)", - 'installable': False, - "active": False, + 'installable': True, } diff --git a/static/description/icon.png b/web_widget_datepicker_options/static/description/icon.png similarity index 100% rename from static/description/icon.png rename to web_widget_datepicker_options/static/description/icon.png diff --git a/static/description/icon.svg b/web_widget_datepicker_options/static/description/icon.svg similarity index 100% rename from static/description/icon.svg rename to web_widget_datepicker_options/static/description/icon.svg diff --git a/web_widget_datepicker_options/static/src/js/datepicker.js b/web_widget_datepicker_options/static/src/js/datepicker.js new file mode 100644 index 000000000000..ecd585ab87ab --- /dev/null +++ b/web_widget_datepicker_options/static/src/js/datepicker.js @@ -0,0 +1,43 @@ +/* + OpenERP, Open Source Management Solution + This module copyright (C) 2015 Savoir-faire Linux + (). + + 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 . +*/ + +odoo.define('web_widget_datepicker_options.datepicker', function(require) { + "use strict"; + var Widget = require('web.datepicker'); + + Widget.DateWidget.include({ + init: function() { + this._super.apply(this, arguments); + if(typeof this.__parentedParent !== 'undefined' && this.__parentedParent.field.type === 'date' && this.__parentedParent.nodeOptions){ + var datepicker = this.__parentedParent.nodeOptions.datepicker; + Object.assign(this.options, datepicker); + } + }, + }); + + Widget.DateTimeWidget.include({ + init: function() { + this._super.apply(this, arguments); + if(typeof this.__parentedParent !== 'undefined' && this.__parentedParent.field.type === 'date' && this.__parentedParent.nodeOptions){ + var datepicker = this.__parentedParent.nodeOptions.datepicker; + Object.assign(this.options, datepicker); + } + }, + }); +}); diff --git a/view/qweb.xml b/web_widget_datepicker_options/view/qweb.xml similarity index 100% rename from view/qweb.xml rename to web_widget_datepicker_options/view/qweb.xml From c7049129558726694b142ab4ee95b667d978131e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Gonz=C3=A1lez?= Date: Mon, 28 May 2018 01:52:27 +0000 Subject: [PATCH 120/399] [FIX] web_widget_datepicker_options: Apply fixes after migration to v11 This applies some changes to the module after migration, to conform new guidelines and conventions for version 11.0. In addition, this applies the following fixes: - The widged didn't work when the field was a `datetime` due to a typo in a JS conditional - Replaced `Object.assign()` -> `_.assign()` to improve browser-compatibility --- web_widget_datepicker_options/README.rst | 22 ++++++----- web_widget_datepicker_options/__init__.py | 22 +---------- web_widget_datepicker_options/__manifest__.py | 38 +++++-------------- .../static/src/js/datepicker.js | 35 +++++++---------- web_widget_datepicker_options/view/qweb.xml | 10 ----- .../views/assets.xml | 12 ++++++ 6 files changed, 49 insertions(+), 90 deletions(-) delete mode 100644 web_widget_datepicker_options/view/qweb.xml create mode 100644 web_widget_datepicker_options/views/assets.xml diff --git a/web_widget_datepicker_options/README.rst b/web_widget_datepicker_options/README.rst index aae7b04fc858..ff79a340ece8 100644 --- a/web_widget_datepicker_options/README.rst +++ b/web_widget_datepicker_options/README.rst @@ -1,11 +1,11 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :alt: License: AGPL-3 Datepicker Widget Options ========================= This module allows passing options to the jquery datepicker for fields that use -the datepicker widget. The option are passed as-is and are not validated. +the datepicker widget. Options are passed as they are, without any validation. To see all supported options, see the `API documentation `_. @@ -17,7 +17,7 @@ Usage You must pass all options through the "datepicker" field in the options:: ... - + ... Known issues / Roadmap @@ -32,7 +32,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed feedback -`here `_. +`here `_. Credits @@ -43,17 +43,21 @@ Contributors * Vincent Vinet * Yanina Aular +* Luis González + +Do not contact contributors directly about support or help with technical issues. Maintainer ---------- -.. image:: http://odoo-community.org/logo.png +.. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association - :target: http://odoo-community.org + :target: https://odoo-community.org This module is maintained by the OCA. -OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. - -To contribute to this module, please visit http://odoo-community.org. +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 https://odoo-community.org. diff --git a/web_widget_datepicker_options/__init__.py b/web_widget_datepicker_options/__init__.py index 5daf74683278..d9d1f13deb58 100644 --- a/web_widget_datepicker_options/__init__.py +++ b/web_widget_datepicker_options/__init__.py @@ -1,21 +1 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# This module copyright (C) 2015 Savoir-faire Linux -# (). -# -# 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 . -# -############################################################################## +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). diff --git a/web_widget_datepicker_options/__manifest__.py b/web_widget_datepicker_options/__manifest__.py index 40522db8487b..6cec56514665 100644 --- a/web_widget_datepicker_options/__manifest__.py +++ b/web_widget_datepicker_options/__manifest__.py @@ -1,37 +1,19 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# This module copyright (C) 2015 Savoir-faire Linux -# (). -# -# 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 . -# -############################################################################## +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - "name": 'web_widget_datepicker_options', + "name": "Web widget datepicker options", + "summary": "Enhance customization for datepicker widgets", "version": "11.0.1.0.0", + "category": "Web", + "author": "Vincent Vinet, " + "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/web", "license": "AGPL-3", "depends": [ - 'base', - 'web', + "web", ], "data": [ - 'view/qweb.xml', + "views/assets.xml", ], - "author": "Vincent Vinet, " - "Odoo Community Association (OCA)", - 'installable': True, + "installable": True, } diff --git a/web_widget_datepicker_options/static/src/js/datepicker.js b/web_widget_datepicker_options/static/src/js/datepicker.js index ecd585ab87ab..6e714a167e1d 100644 --- a/web_widget_datepicker_options/static/src/js/datepicker.js +++ b/web_widget_datepicker_options/static/src/js/datepicker.js @@ -1,20 +1,5 @@ /* - OpenERP, Open Source Management Solution - This module copyright (C) 2015 Savoir-faire Linux - (). - - 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 . +License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ odoo.define('web_widget_datepicker_options.datepicker', function(require) { @@ -24,9 +9,12 @@ odoo.define('web_widget_datepicker_options.datepicker', function(require) { Widget.DateWidget.include({ init: function() { this._super.apply(this, arguments); - if(typeof this.__parentedParent !== 'undefined' && this.__parentedParent.field.type === 'date' && this.__parentedParent.nodeOptions){ - var datepicker = this.__parentedParent.nodeOptions.datepicker; - Object.assign(this.options, datepicker); + var parent = this.getParent(); + if(typeof parent !== 'undefined' + && parent.field.type === 'date' + && parent.nodeOptions){ + var datepicker = parent.nodeOptions.datepicker; + _.assign(this.options, datepicker); } }, }); @@ -34,9 +22,12 @@ odoo.define('web_widget_datepicker_options.datepicker', function(require) { Widget.DateTimeWidget.include({ init: function() { this._super.apply(this, arguments); - if(typeof this.__parentedParent !== 'undefined' && this.__parentedParent.field.type === 'date' && this.__parentedParent.nodeOptions){ - var datepicker = this.__parentedParent.nodeOptions.datepicker; - Object.assign(this.options, datepicker); + var parent = this.getParent(); + if(typeof parent !== 'undefined' + && parent.field.type === 'datetime' + && parent.nodeOptions){ + var datepicker = parent.nodeOptions.datepicker; + _.assign(this.options, datepicker); } }, }); diff --git a/web_widget_datepicker_options/view/qweb.xml b/web_widget_datepicker_options/view/qweb.xml deleted file mode 100644 index 9921348dd08b..000000000000 --- a/web_widget_datepicker_options/view/qweb.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/web_widget_datepicker_options/views/assets.xml b/web_widget_datepicker_options/views/assets.xml new file mode 100644 index 000000000000..1959b9b5dfd0 --- /dev/null +++ b/web_widget_datepicker_options/views/assets.xml @@ -0,0 +1,12 @@ + + + + + From 926f0fd0f0befe9e7536ace60929c92ef5557588 Mon Sep 17 00:00:00 2001 From: OCA Git Bot Date: Thu, 31 May 2018 05:40:55 +0200 Subject: [PATCH 121/399] [ADD] setup.py --- setup/_metapackage/VERSION.txt | 2 +- setup/_metapackage/setup.py | 1 + setup/web_group_expand/odoo/addons/web_group_expand | 1 + setup/web_group_expand/setup.cfg | 2 ++ setup/web_group_expand/setup.py | 6 ++++++ 5 files changed, 11 insertions(+), 1 deletion(-) create mode 120000 setup/web_group_expand/odoo/addons/web_group_expand create mode 100644 setup/web_group_expand/setup.cfg create mode 100644 setup/web_group_expand/setup.py diff --git a/setup/_metapackage/VERSION.txt b/setup/_metapackage/VERSION.txt index 93b73943c795..42460ba3dd3b 100644 --- a/setup/_metapackage/VERSION.txt +++ b/setup/_metapackage/VERSION.txt @@ -1 +1 @@ -11.0.20180526.0 \ No newline at end of file +11.0.20180531.0 \ No newline at end of file diff --git a/setup/_metapackage/setup.py b/setup/_metapackage/setup.py index 6ba1799260ca..af55cf5a8f1a 100644 --- a/setup/_metapackage/setup.py +++ b/setup/_metapackage/setup.py @@ -13,6 +13,7 @@ 'odoo11-addon-web_dialog_size', 'odoo11-addon-web_environment_ribbon', 'odoo11-addon-web_favicon', + 'odoo11-addon-web_group_expand', 'odoo11-addon-web_listview_range_select', 'odoo11-addon-web_no_bubble', 'odoo11-addon-web_notify', diff --git a/setup/web_group_expand/odoo/addons/web_group_expand b/setup/web_group_expand/odoo/addons/web_group_expand new file mode 120000 index 000000000000..bfe3387eb14e --- /dev/null +++ b/setup/web_group_expand/odoo/addons/web_group_expand @@ -0,0 +1 @@ +../../../../web_group_expand \ No newline at end of file diff --git a/setup/web_group_expand/setup.cfg b/setup/web_group_expand/setup.cfg new file mode 100644 index 000000000000..3c6e79cf31da --- /dev/null +++ b/setup/web_group_expand/setup.cfg @@ -0,0 +1,2 @@ +[bdist_wheel] +universal=1 diff --git a/setup/web_group_expand/setup.py b/setup/web_group_expand/setup.py new file mode 100644 index 000000000000..28c57bb64031 --- /dev/null +++ b/setup/web_group_expand/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From af42b28b114fa0fac9bda015b6800e25307e7aa5 Mon Sep 17 00:00:00 2001 From: OCA Git Bot Date: Fri, 1 Jun 2018 05:41:08 +0200 Subject: [PATCH 122/399] [ADD] setup.py --- setup/_metapackage/VERSION.txt | 2 +- setup/_metapackage/setup.py | 1 + .../odoo/addons/web_widget_datepicker_options | 1 + setup/web_widget_datepicker_options/setup.cfg | 2 ++ setup/web_widget_datepicker_options/setup.py | 6 ++++++ 5 files changed, 11 insertions(+), 1 deletion(-) create mode 120000 setup/web_widget_datepicker_options/odoo/addons/web_widget_datepicker_options create mode 100644 setup/web_widget_datepicker_options/setup.cfg create mode 100644 setup/web_widget_datepicker_options/setup.py diff --git a/setup/_metapackage/VERSION.txt b/setup/_metapackage/VERSION.txt index 42460ba3dd3b..4bbf3b4fafb2 100644 --- a/setup/_metapackage/VERSION.txt +++ b/setup/_metapackage/VERSION.txt @@ -1 +1 @@ -11.0.20180531.0 \ No newline at end of file +11.0.20180601.0 \ No newline at end of file diff --git a/setup/_metapackage/setup.py b/setup/_metapackage/setup.py index af55cf5a8f1a..4cab49fd0adb 100644 --- a/setup/_metapackage/setup.py +++ b/setup/_metapackage/setup.py @@ -26,6 +26,7 @@ 'odoo11-addon-web_tree_many2one_clickable', 'odoo11-addon-web_widget_bokeh_chart', 'odoo11-addon-web_widget_color', + 'odoo11-addon-web_widget_datepicker_options', 'odoo11-addon-web_widget_many2many_tags_multi_selection', 'odoo11-addon-web_widget_x2many_2d_matrix', 'odoo11-addon-web_widget_x2many_2d_matrix_example', diff --git a/setup/web_widget_datepicker_options/odoo/addons/web_widget_datepicker_options b/setup/web_widget_datepicker_options/odoo/addons/web_widget_datepicker_options new file mode 120000 index 000000000000..282598f1c68b --- /dev/null +++ b/setup/web_widget_datepicker_options/odoo/addons/web_widget_datepicker_options @@ -0,0 +1 @@ +../../../../web_widget_datepicker_options \ No newline at end of file diff --git a/setup/web_widget_datepicker_options/setup.cfg b/setup/web_widget_datepicker_options/setup.cfg new file mode 100644 index 000000000000..3c6e79cf31da --- /dev/null +++ b/setup/web_widget_datepicker_options/setup.cfg @@ -0,0 +1,2 @@ +[bdist_wheel] +universal=1 diff --git a/setup/web_widget_datepicker_options/setup.py b/setup/web_widget_datepicker_options/setup.py new file mode 100644 index 000000000000..28c57bb64031 --- /dev/null +++ b/setup/web_widget_datepicker_options/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 442edfc9cdcdd91e1fed4a02e5b8f847731843ae Mon Sep 17 00:00:00 2001 From: Maxence Groine Date: Mon, 4 Jun 2018 14:47:51 +0200 Subject: [PATCH 123/399] [FIX] Error when using the Quick Create on many2many_tags_multiselection widget --- web_widget_many2many_tags_multi_selection/__manifest__.py | 2 +- .../static/src/js/view_form.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web_widget_many2many_tags_multi_selection/__manifest__.py b/web_widget_many2many_tags_multi_selection/__manifest__.py index 301d0a455c0a..ed76fc85b0ff 100644 --- a/web_widget_many2many_tags_multi_selection/__manifest__.py +++ b/web_widget_many2many_tags_multi_selection/__manifest__.py @@ -2,7 +2,7 @@ { 'name': 'Tags multiple selection', - 'version': '11.0.1.0.0', + 'version': '11.0.1.0.1', 'author': 'Akretion, Odoo Community Association (OCA), Jamin Shah', 'depends': [ 'web', diff --git a/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js b/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js index 81b21873f964..65c1db5dd15e 100644 --- a/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js +++ b/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js @@ -19,7 +19,7 @@ odoo.define('web_widget_many2many_tags_multi_selection.multiple_tags', function } } - new dialogs.SelectCreateDialog(self, _.extend({}, self.nodeOptions, { + return new dialogs.SelectCreateDialog(self, _.extend({}, self.nodeOptions, { res_model: self.field.relation, domain: domain, context: _.extend({}, self.record.getContext(self.recordParams), context || {}), From 0d9db0eb38a0d6f4157303b988a76888dd72e7b2 Mon Sep 17 00:00:00 2001 From: kutyel Date: Fri, 22 Jul 2016 17:24:47 +0200 Subject: [PATCH 124/399] [MIG] web_widget_image_download --- web_widget_image_download/README.rst | 60 ++++++++++++++++++ web_widget_image_download/__init__.py | 3 + web_widget_image_download/__openerp__.py | 23 +++++++ .../static/description/icon.png | Bin 0 -> 17095 bytes .../src/css/web_widget_image_download.css | 6 ++ .../src/js/web_widget_image_download.js | 39 ++++++++++++ .../src/xml/web_widget_image_download.xml | 13 ++++ web_widget_image_download/views/assets.xml | 16 +++++ 8 files changed, 160 insertions(+) create mode 100644 web_widget_image_download/README.rst create mode 100644 web_widget_image_download/__init__.py create mode 100644 web_widget_image_download/__openerp__.py create mode 100644 web_widget_image_download/static/description/icon.png create mode 100644 web_widget_image_download/static/src/css/web_widget_image_download.css create mode 100644 web_widget_image_download/static/src/js/web_widget_image_download.js create mode 100644 web_widget_image_download/static/src/xml/web_widget_image_download.xml create mode 100644 web_widget_image_download/views/assets.xml diff --git a/web_widget_image_download/README.rst b/web_widget_image_download/README.rst new file mode 100644 index 000000000000..cc5f37824da5 --- /dev/null +++ b/web_widget_image_download/README.rst @@ -0,0 +1,60 @@ +.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 + +=========================== +Web Widget - Image Download +=========================== + +This module was written to extend the functionality of the image widget and allows to download it. + +Usage +===== + +To use this module, you need to: + +#. Go to the section `Contacts`. +#. Click on a contact. +#. Edit the contact. +#. Click the `Download` button (between `Edit` and `Clear`). + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/162/8.0 + +Known Issues / Roadmap +====================== + +* In order to work correctly, this widget has to detect image type, the server should include this information in the `Content-Type` header. Right now, odoo is not doing so, but a fix has been `proposed `_. +* For some unknown reason, the widget does not work in the `Preferences` view, because odoo is not rendering the **QWeb** template. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Contributors +------------ + +* Flavio Corpa + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/web_widget_image_download/__init__.py b/web_widget_image_download/__init__.py new file mode 100644 index 000000000000..c222227a9d41 --- /dev/null +++ b/web_widget_image_download/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Flavio Corpa +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/web_widget_image_download/__openerp__.py b/web_widget_image_download/__openerp__.py new file mode 100644 index 000000000000..afc6d2f95d72 --- /dev/null +++ b/web_widget_image_download/__openerp__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Flavio Corpa +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +{ + "name": "Web Widget - Image Download", + "summary": "Allows to download any image from its widget", + "version": "9.0.1.0.0", + "category": "web", + "website": "https://www.tecnativa.com", + "author": "Tecnativa, Odoo Community Association (OCA)", + "license": "LGPL-3", + "application": False, + "installable": True, + "data": [ + "views/assets.xml", + ], + "depends": [ + "web", + ], + "qweb": [ + "static/src/xml/web_widget_image_download.xml", + ] +} diff --git a/web_widget_image_download/static/description/icon.png b/web_widget_image_download/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..65dabfc969bb36290899d851f2262e6dba91d1c5 GIT binary patch literal 17095 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 + * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */ + +.openerp .oe_application a.oe_form_binary_file_download { + color: #eee; +} diff --git a/web_widget_image_download/static/src/js/web_widget_image_download.js b/web_widget_image_download/static/src/js/web_widget_image_download.js new file mode 100644 index 000000000000..6f204d1365cb --- /dev/null +++ b/web_widget_image_download/static/src/js/web_widget_image_download.js @@ -0,0 +1,39 @@ +/* + * Copyright 2016 Flavio Corpa + * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + */ +odoo.define('web_widget_image_download', function (require) { + 'use strict'; + + var common = require('web.form_common'); + + common.FieldBinaryImage.include({ + render_value: function () { + this._super(); + + var $widget = this.$el.find('.oe_form_binary_file_download'); + + this.imgSrc = this.$el.find('img[name="image"]').attr('src'); + + $.ajax({ + type: 'HEAD', + url: this.imgSrc, + complete: function (xhr) { + // retrieve image type from server ("Content-Type" header) + $widget.attr('download', xhr.getResponseHeader("Content-Type").replace('/', '.')); + } + }); + + // use jquery instead of `replace` with qweb (to avoid breaking inheritance) + if (this.has_custom_image()) { + this.$el.find('.oe_form_binary_file_clear').removeClass('col-md-offset-5'); + } + + $widget.attr('href', this.imgSrc); + }, + has_custom_image: function () { + // check if the image of the widget is different from the default placeholder + return this.imgSrc && !this.imgSrc.includes('/placeholder.png'); + } + }); +}); diff --git a/web_widget_image_download/static/src/xml/web_widget_image_download.xml b/web_widget_image_download/static/src/xml/web_widget_image_download.xml new file mode 100644 index 000000000000..096d3256a030 --- /dev/null +++ b/web_widget_image_download/static/src/xml/web_widget_image_download.xml @@ -0,0 +1,13 @@ + + + + diff --git a/web_widget_image_download/views/assets.xml b/web_widget_image_download/views/assets.xml new file mode 100644 index 000000000000..56fb53851d34 --- /dev/null +++ b/web_widget_image_download/views/assets.xml @@ -0,0 +1,16 @@ + + + + + + From ba73183d64c09a6091dfaf03341669ff9c22731d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Gonz=C3=A1lez?= Date: Mon, 11 Jun 2018 00:00:07 +0000 Subject: [PATCH 135/399] [FIX] web_widget_datepicker_options: Fix error when field is undefined Currently, when a view is rendered and a date or datetime field is not defined (e.g. when designing reports), it causes a JS error. This patch fixes the above error. --- web_widget_datepicker_options/__manifest__.py | 2 +- web_widget_datepicker_options/static/src/js/datepicker.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/web_widget_datepicker_options/__manifest__.py b/web_widget_datepicker_options/__manifest__.py index 6cec56514665..3daffe9ffecf 100644 --- a/web_widget_datepicker_options/__manifest__.py +++ b/web_widget_datepicker_options/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Web widget datepicker options", "summary": "Enhance customization for datepicker widgets", - "version": "11.0.1.0.0", + "version": "11.0.1.0.1", "category": "Web", "author": "Vincent Vinet, " "Odoo Community Association (OCA)", diff --git a/web_widget_datepicker_options/static/src/js/datepicker.js b/web_widget_datepicker_options/static/src/js/datepicker.js index 6e714a167e1d..f8186559a646 100644 --- a/web_widget_datepicker_options/static/src/js/datepicker.js +++ b/web_widget_datepicker_options/static/src/js/datepicker.js @@ -11,6 +11,7 @@ odoo.define('web_widget_datepicker_options.datepicker', function(require) { this._super.apply(this, arguments); var parent = this.getParent(); if(typeof parent !== 'undefined' + && typeof parent.field !== 'undefined' && parent.field.type === 'date' && parent.nodeOptions){ var datepicker = parent.nodeOptions.datepicker; @@ -24,6 +25,7 @@ odoo.define('web_widget_datepicker_options.datepicker', function(require) { this._super.apply(this, arguments); var parent = this.getParent(); if(typeof parent !== 'undefined' + && typeof parent.field !== 'undefined' && parent.field.type === 'datetime' && parent.nodeOptions){ var datepicker = parent.nodeOptions.datepicker; From cc461a5431c4e15a0c80c605547ff7e06dafaca3 Mon Sep 17 00:00:00 2001 From: Petar Najman Date: Fri, 23 Feb 2018 11:36:33 +0100 Subject: [PATCH 136/399] Add module web_ir_actions_act_multi --- web_ir_actions_act_multi/README.rst | 60 ++++++++++++++++++ web_ir_actions_act_multi/__init__.py | 0 web_ir_actions_act_multi/__manifest__.py | 17 +++++ .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/src/js/web_ir_actions_act_multi.js | 31 +++++++++ .../views/web_ir_actions_act_multi.xml | 14 ++++ 6 files changed, 122 insertions(+) create mode 100644 web_ir_actions_act_multi/README.rst create mode 100644 web_ir_actions_act_multi/__init__.py create mode 100644 web_ir_actions_act_multi/__manifest__.py create mode 100644 web_ir_actions_act_multi/static/description/icon.png create mode 100644 web_ir_actions_act_multi/static/src/js/web_ir_actions_act_multi.js create mode 100644 web_ir_actions_act_multi/views/web_ir_actions_act_multi.xml diff --git a/web_ir_actions_act_multi/README.rst b/web_ir_actions_act_multi/README.rst new file mode 100644 index 000000000000..317b195604c1 --- /dev/null +++ b/web_ir_actions_act_multi/README.rst @@ -0,0 +1,60 @@ +.. image:: https://www.gnu.org/graphics/lgplv3-147x51.png + :target: https://www.gnu.org/licenses/lgpl-3.0.en.html + :alt: License: LGPL-v3 + +================= +Web Actions Multi +================= + +This module provides a way to trigger more than one action on ActionManager + +Usage +===== + +To use this functionality you need to return following action with list of actions to execute: + +.. code-block:: python + + @api.multi + def foo(): + self.ensure_one() + return { + 'type': 'ir.actions.act_multi', + 'actions': [ + {'type': 'ir.actions.act_window_close'}, + {'type': 'ir.actions.act_view_reload'}, + ] + } + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smash it by providing detailed and welcomed feedback. + +Credits +======= + +Contributors +------------ + +* Petar Najman +* Mladen Meseldzija + + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/web_ir_actions_act_multi/__init__.py b/web_ir_actions_act_multi/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/web_ir_actions_act_multi/__manifest__.py b/web_ir_actions_act_multi/__manifest__.py new file mode 100644 index 000000000000..4a7ed9d79799 --- /dev/null +++ b/web_ir_actions_act_multi/__manifest__.py @@ -0,0 +1,17 @@ +# Copyright 2017 - 2018 Modoolar +# License LGPLv3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html). + +{ + "name": "Web Actions Multi", + "summary": "Enables triggering of more than one action on ActionManager", + "category": "Web", + "version": "11.0.1.0.0", + "license": "LGPL-3", + "author": "Modoolar, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/web/", + "depends": ["web"], + "data": [ + "views/web_ir_actions_act_multi.xml", + ], + "installable": True, +} diff --git a/web_ir_actions_act_multi/static/description/icon.png b/web_ir_actions_act_multi/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/web_ir_actions_act_multi/static/src/js/web_ir_actions_act_multi.js b/web_ir_actions_act_multi/static/src/js/web_ir_actions_act_multi.js new file mode 100644 index 000000000000..e5c5d86e1706 --- /dev/null +++ b/web_ir_actions_act_multi/static/src/js/web_ir_actions_act_multi.js @@ -0,0 +1,31 @@ +// Copyright 2017 - 2018 Modoolar +// License LGPLv3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html). + +odoo.define('web_ir_actions_act_multi.ir_actions_act_multi', function (require) { +"use strict"; + + var ActionManager = require('web.ActionManager'); + + ActionManager.include({ + + execute_ir_actions_act_multi: function(actions, options, index){ + var self = this; + + if (index >= actions.length){ + return actions[actions.length-1]; + } + + return self.do_action(actions[index],options) + .then(function(){ + index++; + return self.execute_ir_actions_act_multi(actions, options, index); + }); + }, + + ir_actions_act_multi: function(action, options){ + return this.execute_ir_actions_act_multi(action.actions, options, 0); + }, + + }); + +}); diff --git a/web_ir_actions_act_multi/views/web_ir_actions_act_multi.xml b/web_ir_actions_act_multi/views/web_ir_actions_act_multi.xml new file mode 100644 index 000000000000..2df563473dc4 --- /dev/null +++ b/web_ir_actions_act_multi/views/web_ir_actions_act_multi.xml @@ -0,0 +1,14 @@ + + + + + + From f8cabe45c700fd0238e8f5700fa6fd965af0fa98 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 10 Jul 2015 15:39:06 +0200 Subject: [PATCH 146/399] support 'open' on many2many_tags [ADD] support 'no_open_edit' on many2one [FIX] typos --- web_m2x_options/README.rst | 91 +++++++++++++++++++------ web_m2x_options/__init__.py | 1 + web_m2x_options/__openerp__.py | 4 ++ web_m2x_options/static/src/js/form.js | 24 +++++++ web_m2x_options/static/src/xml/base.xml | 13 ++++ 5 files changed, 111 insertions(+), 22 deletions(-) create mode 100644 web_m2x_options/static/src/xml/base.xml diff --git a/web_m2x_options/README.rst b/web_m2x_options/README.rst index be6e76039157..de0adaac3d33 100644 --- a/web_m2x_options/README.rst +++ b/web_m2x_options/README.rst @@ -1,35 +1,35 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + ================================== Add new options for many2one field ================================== - -Description ------------ - This modules modifies "many2one" and "many2manytags" form widgets so as to add some new display control options. -**New: support many2manytags widget !** - -**New: support global option management with ir.config_parameter !** - Options provided includes possibility to remove "Create..." and/or "Create and Edit..." entries from many2one drop down. You can also change default number of proposition appearing in the drop-down. Or prevent the dialog box poping in case of validation error. If not specified, the module will avoid proposing any of the create options -if the current user have no permission rights to create the related object. +if the current user has no permission rights to create the related object. +Usage +===== -Requirements ------------- +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/162/8.0 -Was tested on openerp 8.0, trunk, saas-5 branch. New way to import js file. (thanks to tfossoul) +For further information, please visit: +* https://www.odoo.com/forum/help-1 -New options ------------ +in the field's options dict +--------------------------- ``create`` *boolean* (Default: depends if user have create rights) @@ -47,21 +47,27 @@ New options Number of displayed record in drop-down panel -``search_more`` *boolean* +``search_more`` *boolean* Used to force disable/enable search more button. - + ``field_color`` *string* A string to define the field used to define color. This option has to be used with colors. - + ``colors`` *dictionary* A dictionary to link field value with a HTML color. This option has to be used with field_color. - +``no_open_edit`` *boolean* (Default: value of ``no_open`` which is ``False`` if not set) + + Causes a many2one not to offer to click through in edit mode, but well in read mode + +``open`` *boolean* (Default: ``False``) + + Makes many2many_tags buttons that open the linked resource ir.config_parameter options --------------------------- @@ -107,9 +113,50 @@ Your XML form view definition could contain:: ... -Note ----- +Known issues +============ + +Double check that you have no inherited view that remove ``options`` you set on a field ! +If nothing works, add a debugger in the first line of ``get_search_result method`` and enable debug mode in Odoo. When you write something in a many2one field, javascript debugger should pause. If not verify your installation. + +Roadmap +======= + +- Instead of making the tags rectangle clickable, I think it's better to put the text as a clickable link, so we will get a consistent behaviour/aspect with other clickable elements (many2one...). +- In edit mode, it would be great to add an icon like the one on many2one fields to allow to open the many2many in a popup window. +- Include this feature as a configurable option via parameter to have this behaviour by default in all many2many tags. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed feedback +`here `_. + +Credits +======= + +Contributors +------------ + +* David Coninckx +* Emanuel Cino +* Holger Brunn +* Nicolas JEUDY +* Yannick Vaucher + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. -Double check that you have no inherited view that remote ``options`` you set on a field ! -If nothing work, add a debugger in the first ligne of ``get_search_result method`` and enable debug mode in OpenERP. When you write something in a many2one field, javascript debugger should pause. If not verify your installation. +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. +To contribute to this module, please visit http://odoo-community.org. diff --git a/web_m2x_options/__init__.py b/web_m2x_options/__init__.py index e69de29bb2d1..57d631c3f004 100644 --- a/web_m2x_options/__init__.py +++ b/web_m2x_options/__init__.py @@ -0,0 +1 @@ +# coding: utf-8 diff --git a/web_m2x_options/__openerp__.py b/web_m2x_options/__openerp__.py index 37b7dbf4e770..c87994c71a61 100644 --- a/web_m2x_options/__openerp__.py +++ b/web_m2x_options/__openerp__.py @@ -7,6 +7,10 @@ 'base', 'web', ], + 'qweb': [ + 'static/src/xml/base.xml', + ], + 'license': 'AGPL-3', 'data': ['views/view.xml'], "author": "0k.io,Odoo Community Association (OCA)", "installable": True, diff --git a/web_m2x_options/static/src/js/form.js b/web_m2x_options/static/src/js/form.js index bc4d3bebd335..7342794ea2e5 100644 --- a/web_m2x_options/static/src/js/form.js +++ b/web_m2x_options/static/src/js/form.js @@ -336,6 +336,30 @@ openerp.web_m2x_options = function (instance) { return values; }) }, + + render_value: function() + { + var self = this; + return jQuery.when(this._super.apply(this, arguments)) + .then(function() + { + if(self.options.open) + { + self.$el.find('.oe_tag') + .css('cursor', 'pointer') + .click(function(e) + { + var id = parseInt(jQuery(this).attr('data-id')); + self.do_action({ + type: 'ir.actions.act_window', + res_model: self.field.relation, + views: [[false, 'form']], + res_id: id, + }); + }); + } + }); + }, }); }; diff --git a/web_m2x_options/static/src/xml/base.xml b/web_m2x_options/static/src/xml/base.xml new file mode 100644 index 000000000000..9fbf425eaadc --- /dev/null +++ b/web_m2x_options/static/src/xml/base.xml @@ -0,0 +1,13 @@ + + + + + jQuery(this).attr('t-if', '!(widget.options.no_open || widget.options.no_open_edit)'); + + + + + jQuery(this).attr('t-att-data-id', 'el[0]'); + + + From 911dbbbb9ba7c91a663c18a029d689548259890b Mon Sep 17 00:00:00 2001 From: Antonio Espinosa Date: Mon, 16 Nov 2015 13:00:04 +0100 Subject: [PATCH 147/399] web_m2x_options check Many2one and Many2many options --- web_m2x_options/static/src/js/form.js | 117 +++++++++++++++----------- 1 file changed, 67 insertions(+), 50 deletions(-) diff --git a/web_m2x_options/static/src/js/form.js b/web_m2x_options/static/src/js/form.js index 7342794ea2e5..524197a57392 100644 --- a/web_m2x_options/static/src/js/form.js +++ b/web_m2x_options/static/src/js/form.js @@ -67,11 +67,11 @@ openerp.web_m2x_options = function (instance) { var self = this; // add options limit used to change number of selections record // returned. - if (_.isUndefined(this.view)) - return this._super.apply(this, arguments); - if (!_.isUndefined(this.view.ir_options['web_m2x_options.limit'])) { - this.limit = parseInt(this.view.ir_options['web_m2x_options.limit']); - } + if (_.isUndefined(this.view)) + return this._super.apply(this, arguments); + if (!_.isUndefined(this.view.ir_options['web_m2x_options.limit'])) { + this.limit = parseInt(this.view.ir_options['web_m2x_options.limit']); + } if (typeof this.options.limit === 'number') { this.limit = this.options.limit; @@ -99,8 +99,7 @@ openerp.web_m2x_options = function (instance) { self.build_context())); var create_rights; - if (typeof this.options.create === "undefined" || - typeof this.options.create_edit === "undefined") { + if (!(self.options && (self.options.no_create || self.options.no_create_edit))) { create_rights = new instance.web.Model(this.field.relation).call( "check_access_rights", ["create", false]); } @@ -119,7 +118,7 @@ openerp.web_m2x_options = function (instance) { id: x[0], }; }); - + // Search result value colors if (self.colors && self.field_color) { @@ -127,7 +126,7 @@ openerp.web_m2x_options = function (instance) { for (var index in values) { value_ids.push(values[index].id); } - + // RPC request to get field_color from Objects Objects.query([self.field_color]) .filter([['id', 'in', value_ids]]) @@ -137,7 +136,7 @@ openerp.web_m2x_options = function (instance) { if (values[index_value].id == objects[index].id) { // Find value in values by comparing ids var value = values[index_value]; - + // Find color with field value as key var color = self.colors[objects[index][self.field_color]] || 'black'; value.label = ''+value.label+''; @@ -171,10 +170,15 @@ openerp.web_m2x_options = function (instance) { var raw_result = _(data.result).map(function (x) { return x[1]; }); + var no_quick_create = ( + self.options && (self.options.no_create || + self.options.no_quick_create) + ) + var m2x_create_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create']) + var m2x_create = self.view.ir_options['web_m2x_options.create'] == "True" - if ((_.isUndefined(self.options.create) && _.isUndefined(self.view.ir_options['web_m2x_options.create']) && can_create) || - (_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create'] == "True") || - self.options.create) { + if (!no_quick_create && ((m2x_create_undef && can_create) || + m2x_create)) { if (search_val.length > 0 && !_.include(raw_result, search_val)) { @@ -192,10 +196,15 @@ openerp.web_m2x_options = function (instance) { } // create... + var no_create_edit = ( + self.options && (self.options.no_create || + self.options.no_create_edit) + ) + var m2x_create_edit_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create_edit']) + var m2x_create_edit = self.view.ir_options['web_m2x_options.create_edit'] == "True" - if ((_.isUndefined(self.options.create_edit) && _.isUndefined(self.view.ir_options['web_m2x_options.create_edit']) && can_create) || - (_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create_edit'] == "True") || - self.options.create_edit) { + if (!no_create_edit && ((m2x_create_edit_undef && can_create) || + m2x_create_edit)) { values.push({ label: _t("Create and Edit..."), @@ -207,7 +216,7 @@ openerp.web_m2x_options = function (instance) { classname: 'oe_m2o_dropdown_option' }); } - + // Check if colors specified to wait for RPC if (!(self.field_color && self.colors)){ def.resolve(values); @@ -226,28 +235,28 @@ openerp.web_m2x_options = function (instance) { new instance.web.form.M2ODialog(this).open(); } }, - - start: function() { - this._super.apply(this, arguments); - return this.get_options(); - }, - - get_options: function() { - var self = this; - if (_.isUndefined(this.view.ir_options_loaded)) { - this.view.ir_options_loaded = $.Deferred(); - this.view.ir_options = {}; - (new instance.web.Model("ir.config_parameter")) - .query(["key", "value"]).filter([['key', 'in', OPTIONS]]) - .all().then(function(records) { - _(records).each(function(record) { - self.view.ir_options[record.key] = record.value; - }); - self.view.ir_options_loaded.resolve(); - }); - } - return this.view.ir_options_loaded; - }, + + start: function() { + this._super.apply(this, arguments); + return this.get_options(); + }, + + get_options: function() { + var self = this; + if (_.isUndefined(this.view.ir_options_loaded)) { + this.view.ir_options_loaded = $.Deferred(); + this.view.ir_options = {}; + (new instance.web.Model("ir.config_parameter")) + .query(["key", "value"]).filter([['key', 'in', OPTIONS]]) + .all().then(function(records) { + _(records).each(function(record) { + self.view.ir_options[record.key] = record.value; + }); + self.view.ir_options_loaded.resolve(); + }); + } + return this.view.ir_options_loaded; + }, /** * Call this method to search using a string. @@ -258,10 +267,10 @@ openerp.web_m2x_options = function (instance) { // add options limit used to change number of selections record // returned. - - if (!_.isUndefined(this.view.ir_options['web_m2x_options.limit'])) { - this.limit = parseInt(this.view.ir_options['web_m2x_options.limit']); - } + + if (!_.isUndefined(this.view.ir_options['web_m2x_options.limit'])) { + this.limit = parseInt(this.view.ir_options['web_m2x_options.limit']); + } if (typeof this.options.limit === 'number') { this.limit = this.options.limit; @@ -300,10 +309,14 @@ openerp.web_m2x_options = function (instance) { }); } // quick create + var no_quick_create = ( + self.options && (self.options.no_create || + self.options.no_quick_create) + ) + var m2x_create_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create']) + var m2x_create = self.view.ir_options['web_m2x_options.create'] == "True" - if ((_.isUndefined(self.options.create) && _.isUndefined(self.view.ir_options['web_m2x_options.create'])) || - (_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create'] == 'True') || - self.options.create) { + if (!no_quick_create && (m2x_create_undef || m2x_create)) { var raw_result = _(data.result).map(function(x) {return x[1];}); if (search_val.length > 0 && !_.include(raw_result, search_val)) { @@ -319,10 +332,14 @@ openerp.web_m2x_options = function (instance) { } // create... - - if ((_.isUndefined(self.options.create_edit === 'undefined') && _.isUndefined(self.view.ir_options['web_m2x_options.create_edit'])) || - (_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create_edit'] == 'True') || - self.options.create_edit) { + var no_create_edit = ( + self.options && (self.options.no_create || + self.options.no_create_edit) + ) + var m2x_create_edit_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create_edit']) + var m2x_create_edit = self.view.ir_options['web_m2x_options.create_edit'] == "True" + + if (!no_create_edit && (m2x_create_edit_undef || m2x_create_edit)) { values.push({ label: _t("Create and Edit..."), From 67ac0f712dda18a49487f6a4192b4b7689c97503 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Mon, 23 Nov 2015 23:43:23 -0500 Subject: [PATCH 148/399] OCA Transbot updated translations from Transifex --- web_m2x_options/i18n/ar.po | 43 +++++++++++++++++++++++++++ web_m2x_options/i18n/de.po | 43 +++++++++++++++++++++++++++ web_m2x_options/i18n/es.po | 43 +++++++++++++++++++++++++++ web_m2x_options/i18n/fi.po | 43 +++++++++++++++++++++++++++ web_m2x_options/i18n/fr.po | 43 +++++++++++++++++++++++++++ web_m2x_options/i18n/it.po | 55 +++++++++++++++++++++++++++++++++++ web_m2x_options/i18n/pt_BR.po | 43 +++++++++++++++++++++++++++ web_m2x_options/i18n/sl.po | 43 +++++++++++++++++++++++++++ web_m2x_options/i18n/tr.po | 44 ++++++++++++++++++++++++++++ 9 files changed, 400 insertions(+) create mode 100644 web_m2x_options/i18n/ar.po create mode 100644 web_m2x_options/i18n/de.po create mode 100644 web_m2x_options/i18n/es.po create mode 100644 web_m2x_options/i18n/fi.po create mode 100644 web_m2x_options/i18n/fr.po create mode 100644 web_m2x_options/i18n/it.po create mode 100644 web_m2x_options/i18n/pt_BR.po create mode 100644 web_m2x_options/i18n/sl.po create mode 100644 web_m2x_options/i18n/tr.po diff --git a/web_m2x_options/i18n/ar.po b/web_m2x_options/i18n/ar.po new file mode 100644 index 000000000000..1011622c21a8 --- /dev/null +++ b/web_m2x_options/i18n/ar.po @@ -0,0 +1,43 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# SaFi J. , 2015 +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-26 02:05+0000\n" +"PO-Revision-Date: 2015-12-16 17:30+0000\n" +"Last-Translator: SaFi J. \n" +"Language-Team: Arabic (http://www.transifex.com/oca/OCA-web-8-0/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:191 +#: code:addons/web_m2x_options/static/src/js/form.js:330 +#, python-format +msgid "Create \"%s\"" +msgstr "إنشاء \"%s\"" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:213 +#: code:addons/web_m2x_options/static/src/js/form.js:351 +#, python-format +msgid "Create and Edit..." +msgstr "إنشاء وتحرير ..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:156 +#: code:addons/web_m2x_options/static/src/js/form.js:305 +#, python-format +msgid "Search More..." +msgstr "البحث عن المزيد ..." diff --git a/web_m2x_options/i18n/de.po b/web_m2x_options/i18n/de.po new file mode 100644 index 000000000000..112e2b911061 --- /dev/null +++ b/web_m2x_options/i18n/de.po @@ -0,0 +1,43 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# Rudolf Schnapka , 2016 +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-26 02:05+0000\n" +"PO-Revision-Date: 2016-01-18 20:15+0000\n" +"Last-Translator: Rudolf Schnapka \n" +"Language-Team: German (http://www.transifex.com/oca/OCA-web-8-0/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:191 +#: code:addons/web_m2x_options/static/src/js/form.js:330 +#, python-format +msgid "Create \"%s\"" +msgstr "Anlegen \"%s" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:213 +#: code:addons/web_m2x_options/static/src/js/form.js:351 +#, python-format +msgid "Create and Edit..." +msgstr "Anlegen und Bearbeiten" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:156 +#: code:addons/web_m2x_options/static/src/js/form.js:305 +#, python-format +msgid "Search More..." +msgstr "Suche weitere..." diff --git a/web_m2x_options/i18n/es.po b/web_m2x_options/i18n/es.po new file mode 100644 index 000000000000..7a4764bae86a --- /dev/null +++ b/web_m2x_options/i18n/es.po @@ -0,0 +1,43 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# Pedro M. Baeza , 2015 +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-26 02:05+0000\n" +"PO-Revision-Date: 2015-11-07 11:28+0000\n" +"Last-Translator: Pedro M. Baeza \n" +"Language-Team: Spanish (http://www.transifex.com/oca/OCA-web-8-0/language/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:191 +#: code:addons/web_m2x_options/static/src/js/form.js:330 +#, python-format +msgid "Create \"%s\"" +msgstr "Crear \"%s\"" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:213 +#: code:addons/web_m2x_options/static/src/js/form.js:351 +#, python-format +msgid "Create and Edit..." +msgstr "Crear y editar..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:156 +#: code:addons/web_m2x_options/static/src/js/form.js:305 +#, python-format +msgid "Search More..." +msgstr "Buscar más..." diff --git a/web_m2x_options/i18n/fi.po b/web_m2x_options/i18n/fi.po new file mode 100644 index 000000000000..9dab4ae40247 --- /dev/null +++ b/web_m2x_options/i18n/fi.po @@ -0,0 +1,43 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# Jarmo Kortetjärvi , 2016 +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-26 02:05+0000\n" +"PO-Revision-Date: 2016-02-01 09:52+0000\n" +"Last-Translator: Jarmo Kortetjärvi \n" +"Language-Team: Finnish (http://www.transifex.com/oca/OCA-web-8-0/language/fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:191 +#: code:addons/web_m2x_options/static/src/js/form.js:330 +#, python-format +msgid "Create \"%s\"" +msgstr "Luo \"%s\"" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:213 +#: code:addons/web_m2x_options/static/src/js/form.js:351 +#, python-format +msgid "Create and Edit..." +msgstr "Luo ja muokkaa..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:156 +#: code:addons/web_m2x_options/static/src/js/form.js:305 +#, python-format +msgid "Search More..." +msgstr "Hae lisää..." diff --git a/web_m2x_options/i18n/fr.po b/web_m2x_options/i18n/fr.po new file mode 100644 index 000000000000..448e0f4684ff --- /dev/null +++ b/web_m2x_options/i18n/fr.po @@ -0,0 +1,43 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# Christophe CHAUVET , 2016 +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-06 15:50+0000\n" +"PO-Revision-Date: 2016-05-06 08:27+0000\n" +"Last-Translator: Christophe CHAUVET \n" +"Language-Team: French (http://www.transifex.com/oca/OCA-web-8-0/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:191 +#: code:addons/web_m2x_options/static/src/js/form.js:330 +#, python-format +msgid "Create \"%s\"" +msgstr "Creer \"%s\"" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:213 +#: code:addons/web_m2x_options/static/src/js/form.js:351 +#, python-format +msgid "Create and Edit..." +msgstr "Créer et modifier..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:156 +#: code:addons/web_m2x_options/static/src/js/form.js:305 +#, python-format +msgid "Search More..." +msgstr "Rechercher plus..." diff --git a/web_m2x_options/i18n/it.po b/web_m2x_options/i18n/it.po new file mode 100644 index 000000000000..ce21776cee13 --- /dev/null +++ b/web_m2x_options/i18n/it.po @@ -0,0 +1,55 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# Ahmet Altınışık , 2015 +# Antonio Trueba, 2016 +# Armando Vulcano Junior , 2015 +# Carles Antoli , 2015 +# Bole , 2015 +# FIRST AUTHOR , 2012,2014 +# Giacomo , 2015 +# Hotellook, 2014 +# Jarmo Kortetjärvi , 2016 +# Paolo Valier, 2016 +# Paolo Valier, 2016 +# Rudolf Schnapka , 2016 +# Thomas A. Jaeger, 2015 +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-04-28 07:09+0000\n" +"PO-Revision-Date: 2016-04-28 06:46+0000\n" +"Last-Translator: Paolo Valier\n" +"Language-Team: Italian (http://www.transifex.com/oca/OCA-web-8-0/language/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:191 +#: code:addons/web_m2x_options/static/src/js/form.js:330 +#, python-format +msgid "Create \"%s\"" +msgstr "Crea \"%s\"" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:213 +#: code:addons/web_m2x_options/static/src/js/form.js:351 +#, python-format +msgid "Create and Edit..." +msgstr "Crea e Modifica..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:156 +#: code:addons/web_m2x_options/static/src/js/form.js:305 +#, python-format +msgid "Search More..." +msgstr "Cerca altro..." diff --git a/web_m2x_options/i18n/pt_BR.po b/web_m2x_options/i18n/pt_BR.po new file mode 100644 index 000000000000..8074af4c14d7 --- /dev/null +++ b/web_m2x_options/i18n/pt_BR.po @@ -0,0 +1,43 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# danimaribeiro , 2016 +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-11 02:17+0000\n" +"PO-Revision-Date: 2016-03-05 16:20+0000\n" +"Last-Translator: danimaribeiro \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-web-8-0/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:191 +#: code:addons/web_m2x_options/static/src/js/form.js:330 +#, python-format +msgid "Create \"%s\"" +msgstr "Criar \"%s\"" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:213 +#: code:addons/web_m2x_options/static/src/js/form.js:351 +#, python-format +msgid "Create and Edit..." +msgstr "Criar e editar.." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:156 +#: code:addons/web_m2x_options/static/src/js/form.js:305 +#, python-format +msgid "Search More..." +msgstr "Buscar mais..." diff --git a/web_m2x_options/i18n/sl.po b/web_m2x_options/i18n/sl.po new file mode 100644 index 000000000000..c63f36ed9d72 --- /dev/null +++ b/web_m2x_options/i18n/sl.po @@ -0,0 +1,43 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# Matjaž Mozetič , 2015 +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-26 02:05+0000\n" +"PO-Revision-Date: 2015-11-08 05:46+0000\n" +"Last-Translator: Matjaž Mozetič \n" +"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-web-8-0/language/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:191 +#: code:addons/web_m2x_options/static/src/js/form.js:330 +#, python-format +msgid "Create \"%s\"" +msgstr "Ustvari \"%s\"" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:213 +#: code:addons/web_m2x_options/static/src/js/form.js:351 +#, python-format +msgid "Create and Edit..." +msgstr "Ustvari in urejaj..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:156 +#: code:addons/web_m2x_options/static/src/js/form.js:305 +#, python-format +msgid "Search More..." +msgstr "Poišči več..." diff --git a/web_m2x_options/i18n/tr.po b/web_m2x_options/i18n/tr.po new file mode 100644 index 000000000000..c9418f2d1c2f --- /dev/null +++ b/web_m2x_options/i18n/tr.po @@ -0,0 +1,44 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# Ahmet Altınışık , 2015 +# Ahmet Altınışık , 2015 +msgid "" +msgstr "" +"Project-Id-Version: web (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-26 02:05+0000\n" +"PO-Revision-Date: 2015-12-30 21:53+0000\n" +"Last-Translator: Ahmet Altınışık \n" +"Language-Team: Turkish (http://www.transifex.com/oca/OCA-web-8-0/language/tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:191 +#: code:addons/web_m2x_options/static/src/js/form.js:330 +#, python-format +msgid "Create \"%s\"" +msgstr "Oluştur \"%s\"" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:213 +#: code:addons/web_m2x_options/static/src/js/form.js:351 +#, python-format +msgid "Create and Edit..." +msgstr "Oluştur ve düzenle..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:156 +#: code:addons/web_m2x_options/static/src/js/form.js:305 +#, python-format +msgid "Search More..." +msgstr "Daha Fazla..." From eed9e34be7dc66d83f2819e0a73e4ac7e17e863e Mon Sep 17 00:00:00 2001 From: Antonio Espinosa Date: Wed, 10 Feb 2016 17:05:51 +0100 Subject: [PATCH 149/399] Limit name_search to 160 like Odoo core does --- web_m2x_options/__openerp__.py | 2 +- web_m2x_options/static/src/js/form.js | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/web_m2x_options/__openerp__.py b/web_m2x_options/__openerp__.py index c87994c71a61..8a3331574bce 100644 --- a/web_m2x_options/__openerp__.py +++ b/web_m2x_options/__openerp__.py @@ -2,7 +2,7 @@ { "name": 'web_m2x_options', - "version": "8.0.0.2", + "version": "8.0.0.2.0", "depends": [ 'base', 'web', diff --git a/web_m2x_options/static/src/js/form.js b/web_m2x_options/static/src/js/form.js index 524197a57392..9fe51d23b056 100644 --- a/web_m2x_options/static/src/js/form.js +++ b/web_m2x_options/static/src/js/form.js @@ -155,9 +155,12 @@ openerp.web_m2x_options = function (instance) { values.push({ label: _t("Search More..."), action: function () { + // limit = 80 for improving performance, similar + // to Odoo implementation here: + // https://github.com/odoo/odoo/commit/8c3cdce539d87775b59b3f2d5ceb433f995821bf dataset.name_search( search_val, self.build_domain(), - 'ilike', false).done(function (data) { + 'ilike', 80).done(function (data) { self._search_create_popup("search", data); }); }, @@ -301,7 +304,10 @@ openerp.web_m2x_options = function (instance) { values.push({ label: _t("Search More..."), action: function() { - dataset.name_search(search_val, self.build_domain(), 'ilike', false).done(function(data) { + // limit = 80 for improving performance, similar + // to Odoo implementation here: + // https://github.com/odoo/odoo/commit/8c3cdce539d87775b59b3f2d5ceb433f995821bf + dataset.name_search(search_val, self.build_domain(), 'ilike', 80).done(function(data) { self._search_create_popup("search", data); }); }, From 8d9e405c0df2349c9e6e77aa5aa18c464e4d071c Mon Sep 17 00:00:00 2001 From: Zakaria Makrelouf Date: Sun, 11 Sep 2016 12:10:19 +0100 Subject: [PATCH 150/399] Migration of module web_m2x_options. Adapt JS file to the new JS API and make the module installable [MIG] adapt form.js to the new API. [FIX] Fix bug mentioned in pull #262. [MIG] Make the module installable. --- web_m2x_options/README.rst | 1 + web_m2x_options/__openerp__.py | 7 +- web_m2x_options/i18n/ar.po | 12 +- web_m2x_options/i18n/de.po | 12 +- web_m2x_options/i18n/es.po | 12 +- web_m2x_options/i18n/fi.po | 12 +- web_m2x_options/i18n/fr.po | 12 +- web_m2x_options/i18n/it.po | 12 +- web_m2x_options/i18n/pt_BR.po | 12 +- web_m2x_options/i18n/sl.po | 12 +- web_m2x_options/i18n/tr.po | 12 +- web_m2x_options/static/src/js/form.js | 225 ++++++++++++++---------- web_m2x_options/static/src/xml/base.xml | 2 +- 13 files changed, 190 insertions(+), 153 deletions(-) diff --git a/web_m2x_options/README.rst b/web_m2x_options/README.rst index de0adaac3d33..dff75f05fe73 100644 --- a/web_m2x_options/README.rst +++ b/web_m2x_options/README.rst @@ -145,6 +145,7 @@ Contributors * Holger Brunn * Nicolas JEUDY * Yannick Vaucher +* Zakaria Makrelouf Maintainer ---------- diff --git a/web_m2x_options/__openerp__.py b/web_m2x_options/__openerp__.py index 8a3331574bce..94c1a525bd55 100644 --- a/web_m2x_options/__openerp__.py +++ b/web_m2x_options/__openerp__.py @@ -2,7 +2,7 @@ { "name": 'web_m2x_options', - "version": "8.0.0.2.0", + "version": "9.0.1.0.0", "depends": [ 'base', 'web', @@ -12,7 +12,6 @@ ], 'license': 'AGPL-3', 'data': ['views/view.xml'], - "author": "0k.io,Odoo Community Association (OCA)", - "installable": True, - "active": False, + "author": "ACSONE SA/NV, 0k.io,Odoo Community Association (OCA)", + 'installable': True, } diff --git a/web_m2x_options/i18n/ar.po b/web_m2x_options/i18n/ar.po index 1011622c21a8..124f84ceecdc 100644 --- a/web_m2x_options/i18n/ar.po +++ b/web_m2x_options/i18n/ar.po @@ -20,24 +20,24 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:191 -#: code:addons/web_m2x_options/static/src/js/form.js:330 +#: code:addons/web_m2x_options/static/src/js/form.js:219 +#: code:addons/web_m2x_options/static/src/js/form.js:373 #, python-format msgid "Create \"%s\"" msgstr "إنشاء \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:213 -#: code:addons/web_m2x_options/static/src/js/form.js:351 +#: code:addons/web_m2x_options/static/src/js/form.js:237 +#: code:addons/web_m2x_options/static/src/js/form.js:392 #, python-format msgid "Create and Edit..." msgstr "إنشاء وتحرير ..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:156 -#: code:addons/web_m2x_options/static/src/js/form.js:305 +#: code:addons/web_m2x_options/static/src/js/form.js:188 +#: code:addons/web_m2x_options/static/src/js/form.js:349 #, python-format msgid "Search More..." msgstr "البحث عن المزيد ..." diff --git a/web_m2x_options/i18n/de.po b/web_m2x_options/i18n/de.po index 112e2b911061..40eb8cacde07 100644 --- a/web_m2x_options/i18n/de.po +++ b/web_m2x_options/i18n/de.po @@ -20,24 +20,24 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:191 -#: code:addons/web_m2x_options/static/src/js/form.js:330 +#: code:addons/web_m2x_options/static/src/js/form.js:219 +#: code:addons/web_m2x_options/static/src/js/form.js:373 #, python-format msgid "Create \"%s\"" msgstr "Anlegen \"%s" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:213 -#: code:addons/web_m2x_options/static/src/js/form.js:351 +#: code:addons/web_m2x_options/static/src/js/form.js:237 +#: code:addons/web_m2x_options/static/src/js/form.js:392 #, python-format msgid "Create and Edit..." msgstr "Anlegen und Bearbeiten" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:156 -#: code:addons/web_m2x_options/static/src/js/form.js:305 +#: code:addons/web_m2x_options/static/src/js/form.js:188 +#: code:addons/web_m2x_options/static/src/js/form.js:349 #, python-format msgid "Search More..." msgstr "Suche weitere..." diff --git a/web_m2x_options/i18n/es.po b/web_m2x_options/i18n/es.po index 7a4764bae86a..bd3b1e51bc9d 100644 --- a/web_m2x_options/i18n/es.po +++ b/web_m2x_options/i18n/es.po @@ -20,24 +20,24 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:191 -#: code:addons/web_m2x_options/static/src/js/form.js:330 +#: code:addons/web_m2x_options/static/src/js/form.js:219 +#: code:addons/web_m2x_options/static/src/js/form.js:373 #, python-format msgid "Create \"%s\"" msgstr "Crear \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:213 -#: code:addons/web_m2x_options/static/src/js/form.js:351 +#: code:addons/web_m2x_options/static/src/js/form.js:237 +#: code:addons/web_m2x_options/static/src/js/form.js:392 #, python-format msgid "Create and Edit..." msgstr "Crear y editar..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:156 -#: code:addons/web_m2x_options/static/src/js/form.js:305 +#: code:addons/web_m2x_options/static/src/js/form.js:188 +#: code:addons/web_m2x_options/static/src/js/form.js:349 #, python-format msgid "Search More..." msgstr "Buscar más..." diff --git a/web_m2x_options/i18n/fi.po b/web_m2x_options/i18n/fi.po index 9dab4ae40247..b374d7eb9458 100644 --- a/web_m2x_options/i18n/fi.po +++ b/web_m2x_options/i18n/fi.po @@ -20,24 +20,24 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:191 -#: code:addons/web_m2x_options/static/src/js/form.js:330 +#: code:addons/web_m2x_options/static/src/js/form.js:219 +#: code:addons/web_m2x_options/static/src/js/form.js:373 #, python-format msgid "Create \"%s\"" msgstr "Luo \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:213 -#: code:addons/web_m2x_options/static/src/js/form.js:351 +#: code:addons/web_m2x_options/static/src/js/form.js:237 +#: code:addons/web_m2x_options/static/src/js/form.js:392 #, python-format msgid "Create and Edit..." msgstr "Luo ja muokkaa..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:156 -#: code:addons/web_m2x_options/static/src/js/form.js:305 +#: code:addons/web_m2x_options/static/src/js/form.js:188 +#: code:addons/web_m2x_options/static/src/js/form.js:349 #, python-format msgid "Search More..." msgstr "Hae lisää..." diff --git a/web_m2x_options/i18n/fr.po b/web_m2x_options/i18n/fr.po index 448e0f4684ff..3be5ae233eab 100644 --- a/web_m2x_options/i18n/fr.po +++ b/web_m2x_options/i18n/fr.po @@ -20,24 +20,24 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:191 -#: code:addons/web_m2x_options/static/src/js/form.js:330 +#: code:addons/web_m2x_options/static/src/js/form.js:219 +#: code:addons/web_m2x_options/static/src/js/form.js:373 #, python-format msgid "Create \"%s\"" msgstr "Creer \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:213 -#: code:addons/web_m2x_options/static/src/js/form.js:351 +#: code:addons/web_m2x_options/static/src/js/form.js:237 +#: code:addons/web_m2x_options/static/src/js/form.js:392 #, python-format msgid "Create and Edit..." msgstr "Créer et modifier..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:156 -#: code:addons/web_m2x_options/static/src/js/form.js:305 +#: code:addons/web_m2x_options/static/src/js/form.js:188 +#: code:addons/web_m2x_options/static/src/js/form.js:349 #, python-format msgid "Search More..." msgstr "Rechercher plus..." diff --git a/web_m2x_options/i18n/it.po b/web_m2x_options/i18n/it.po index ce21776cee13..c8db1568fdf7 100644 --- a/web_m2x_options/i18n/it.po +++ b/web_m2x_options/i18n/it.po @@ -32,24 +32,24 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:191 -#: code:addons/web_m2x_options/static/src/js/form.js:330 +#: code:addons/web_m2x_options/static/src/js/form.js:219 +#: code:addons/web_m2x_options/static/src/js/form.js:373 #, python-format msgid "Create \"%s\"" msgstr "Crea \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:213 -#: code:addons/web_m2x_options/static/src/js/form.js:351 +#: code:addons/web_m2x_options/static/src/js/form.js:237 +#: code:addons/web_m2x_options/static/src/js/form.js:392 #, python-format msgid "Create and Edit..." msgstr "Crea e Modifica..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:156 -#: code:addons/web_m2x_options/static/src/js/form.js:305 +#: code:addons/web_m2x_options/static/src/js/form.js:188 +#: code:addons/web_m2x_options/static/src/js/form.js:349 #, python-format msgid "Search More..." msgstr "Cerca altro..." diff --git a/web_m2x_options/i18n/pt_BR.po b/web_m2x_options/i18n/pt_BR.po index 8074af4c14d7..cf28995e3eed 100644 --- a/web_m2x_options/i18n/pt_BR.po +++ b/web_m2x_options/i18n/pt_BR.po @@ -20,24 +20,24 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:191 -#: code:addons/web_m2x_options/static/src/js/form.js:330 +#: code:addons/web_m2x_options/static/src/js/form.js:219 +#: code:addons/web_m2x_options/static/src/js/form.js:373 #, python-format msgid "Create \"%s\"" msgstr "Criar \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:213 -#: code:addons/web_m2x_options/static/src/js/form.js:351 +#: code:addons/web_m2x_options/static/src/js/form.js:237 +#: code:addons/web_m2x_options/static/src/js/form.js:392 #, python-format msgid "Create and Edit..." msgstr "Criar e editar.." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:156 -#: code:addons/web_m2x_options/static/src/js/form.js:305 +#: code:addons/web_m2x_options/static/src/js/form.js:188 +#: code:addons/web_m2x_options/static/src/js/form.js:349 #, python-format msgid "Search More..." msgstr "Buscar mais..." diff --git a/web_m2x_options/i18n/sl.po b/web_m2x_options/i18n/sl.po index c63f36ed9d72..7192762e128e 100644 --- a/web_m2x_options/i18n/sl.po +++ b/web_m2x_options/i18n/sl.po @@ -20,24 +20,24 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:191 -#: code:addons/web_m2x_options/static/src/js/form.js:330 +#: code:addons/web_m2x_options/static/src/js/form.js:219 +#: code:addons/web_m2x_options/static/src/js/form.js:373 #, python-format msgid "Create \"%s\"" msgstr "Ustvari \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:213 -#: code:addons/web_m2x_options/static/src/js/form.js:351 +#: code:addons/web_m2x_options/static/src/js/form.js:237 +#: code:addons/web_m2x_options/static/src/js/form.js:392 #, python-format msgid "Create and Edit..." msgstr "Ustvari in urejaj..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:156 -#: code:addons/web_m2x_options/static/src/js/form.js:305 +#: code:addons/web_m2x_options/static/src/js/form.js:188 +#: code:addons/web_m2x_options/static/src/js/form.js:349 #, python-format msgid "Search More..." msgstr "Poišči več..." diff --git a/web_m2x_options/i18n/tr.po b/web_m2x_options/i18n/tr.po index c9418f2d1c2f..2b9f46fdd2ee 100644 --- a/web_m2x_options/i18n/tr.po +++ b/web_m2x_options/i18n/tr.po @@ -21,24 +21,24 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:191 -#: code:addons/web_m2x_options/static/src/js/form.js:330 +#: code:addons/web_m2x_options/static/src/js/form.js:219 +#: code:addons/web_m2x_options/static/src/js/form.js:373 #, python-format msgid "Create \"%s\"" msgstr "Oluştur \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:213 -#: code:addons/web_m2x_options/static/src/js/form.js:351 +#: code:addons/web_m2x_options/static/src/js/form.js:237 +#: code:addons/web_m2x_options/static/src/js/form.js:392 #, python-format msgid "Create and Edit..." msgstr "Oluştur ve düzenle..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:156 -#: code:addons/web_m2x_options/static/src/js/form.js:305 +#: code:addons/web_m2x_options/static/src/js/form.js:188 +#: code:addons/web_m2x_options/static/src/js/form.js:349 #, python-format msgid "Search More..." msgstr "Daha Fazla..." diff --git a/web_m2x_options/static/src/js/form.js b/web_m2x_options/static/src/js/form.js index 9fe51d23b056..8e97ad3ecb1d 100644 --- a/web_m2x_options/static/src/js/form.js +++ b/web_m2x_options/static/src/js/form.js @@ -1,12 +1,17 @@ -/*global openerp, _, $ */ - -openerp.web_m2x_options = function (instance) { +/* Copyright 2016 0k.io,ACSONE SA/NV + * * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ +odoo.define('web_m2x_options.web_m2x_options', function (require) { "use strict"; - var QWeb = instance.web.qweb, - _t = instance.web._t, - _lt = instance.web._lt; + var $ = require("$"); + var core = require('web.core'), + data = require('web.data'), + Dialog = require('web.Dialog'), + Model = require('web.Model'), + form_relational = require('web.form_relational'), + _ = require('_'), + _t = core._t; var OPTIONS = ['web_m2x_options.create', 'web_m2x_options.create_edit', @@ -14,7 +19,40 @@ openerp.web_m2x_options = function (instance) { 'web_m2x_options.search_more', 'web_m2x_options.m2o_dialog',]; - instance.web.form.FieldMany2One = instance.web.form.FieldMany2One.extend({ + var M2ODialog = Dialog.extend({ + template: "M2ODialog", + init: function(parent) { + this.name = parent.string; + this._super(parent, { + title: _.str.sprintf(_t("Create a %s"), parent.string), + size: 'medium', + buttons: [ + {text: _t('Create'), classes: 'btn-primary', click: function() { + if (this.$("input").val() !== ''){ + this.getParent()._quick_create(this.$("input").val()); + this.close(); + } else { + e.preventDefault(); + this.$("input").focus(); + } + }}, + + {text: _t('Create and edit'), classes: 'btn-primary', close: true, click: function() { + this.getParent()._search_create_popup("form", undefined, this.getParent()._create_context(this.$("input").val())); + }}, + + {text: _t('Cancel'), close: true} + ] + }); + }, + start: function() { + var text = _.str.sprintf(_t("You are creating a new %s, are you sure it does not exist yet?"), this.name); + this.$("p").text(text); + this.$("input").val(this.getParent().$input.val()); + }, + }); + + form_relational.FieldMany2One.include({ start: function() { this._super.apply(this, arguments); @@ -26,7 +64,7 @@ openerp.web_m2x_options = function (instance) { if (!_.isUndefined(this.view) && _.isUndefined(this.view.ir_options_loaded)) { this.view.ir_options_loaded = $.Deferred(); this.view.ir_options = {}; - (new instance.web.Model("ir.config_parameter")) + (new Model("ir.config_parameter")) .query(["key", "value"]).filter([['key', 'in', OPTIONS]]) .all().then(function(records) { _(records).each(function(record) { @@ -57,12 +95,12 @@ openerp.web_m2x_options = function (instance) { if(this.is_option_set(this.options.m2o_dialog) || _.isUndefined(this.options.m2o_dialog) && this.is_option_set(this.view.ir_options['web_m2x_options.m2o_dialog']) || this.can_create && _.isUndefined(this.options.m2o_dialog) && _.isUndefined(this.view.ir_options['web_m2x_options.m2o_dialog'])) { - new instance.web.form.M2ODialog(this).open(); + new M2ODialog(this).open(); } }, get_search_result: function (search_val) { - var Objects = new instance.web.Model(this.field.relation); + var Objects = new Model(this.field.relation); var def = $.Deferred(); var self = this; // add options limit used to change number of selections record @@ -77,30 +115,25 @@ openerp.web_m2x_options = function (instance) { this.limit = this.options.limit; } - // add options search_more to force enable or disable search_more button - if (this.is_option_set(this.options.search_more) || _.isUndefined(this.options.search_more) && this.is_option_set(self.view.ir_options['web_m2x_options.search_more'])) { - this.search_more = true - } - // add options field_color and colors to color item(s) depending on field_color value this.field_color = this.options.field_color this.colors = this.options.colors - var dataset = new instance.web.DataSet(this, this.field.relation, + var dataset = new data.DataSet(this, this.field.relation, self.build_context()); var blacklist = this.get_search_blacklist(); this.last_query = search_val; var search_result = this.orderer.add(dataset.name_search( search_val, - new instance.web.CompoundDomain( + new data.CompoundDomain( self.build_domain(), [["id", "not in", blacklist]]), 'ilike', this.limit + 1, self.build_context())); var create_rights; - if (!(self.options && (self.options.no_create || self.options.no_create_edit))) { - create_rights = new instance.web.Model(this.field.relation).call( + if (!(self.options && (self.is_option_set(self.options.create) || self.is_option_set(self.options.create_edit)))) { + create_rights = new Model(this.field.relation).call( "check_access_rights", ["create", false]); } @@ -120,13 +153,11 @@ openerp.web_m2x_options = function (instance) { }); // Search result value colors - if (self.colors && self.field_color) { var value_ids = []; for (var index in values) { value_ids.push(values[index].id); } - // RPC request to get field_color from Objects Objects.query([self.field_color]) .filter([['id', 'in', value_ids]]) @@ -136,7 +167,6 @@ openerp.web_m2x_options = function (instance) { if (values[index_value].id == objects[index].id) { // Find value in values by comparing ids var value = values[index_value]; - // Find color with field value as key var color = self.colors[objects[index][self.field_color]] || 'black'; value.label = ''+value.label+''; @@ -149,8 +179,11 @@ openerp.web_m2x_options = function (instance) { } // search more... if more results that max + var can_search_more = (self.options && self.is_option_set(self.options.search_more)), + search_more_undef = _.isUndefined(self.options.search_more) && _.isUndefined(self.view.ir_options['web_m2x_options.search_more']), + search_more = self.is_option_set(self.view.ir_options['web_m2x_options.search_more']); - if (values.length > self.limit || self.search_more) { + if (values.length > self.limit && (can_search_more || search_more_undef || search_more)) { values = values.slice(0, self.limit); values.push({ label: _t("Search More..."), @@ -164,7 +197,7 @@ openerp.web_m2x_options = function (instance) { self._search_create_popup("search", data); }); }, - classname: 'oe_m2o_dropdown_option' + classname: 'oe_m2o_dropdown_option o_m2o_dropdown_option' }); } @@ -173,16 +206,12 @@ openerp.web_m2x_options = function (instance) { var raw_result = _(data.result).map(function (x) { return x[1]; }); - var no_quick_create = ( - self.options && (self.options.no_create || - self.options.no_quick_create) - ) - var m2x_create_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create']) - var m2x_create = self.view.ir_options['web_m2x_options.create'] == "True" - - if (!no_quick_create && ((m2x_create_undef && can_create) || - m2x_create)) { - + var quick_create = self.is_option_set(self.options.create) || self.is_option_set(self.options.quick_create), + quick_create_undef = _.isUndefined(self.options.create) && _.isUndefined(self.options.quick_create), + m2x_create_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create']), + m2x_create = self.is_option_set(self.view.ir_options['web_m2x_options.create']); + var show_create = (!self.options && (m2x_create_undef || m2x_create)) || (self.options && (quick_create || (quick_create_undef && (m2x_create_undef || m2x_create)))); + if (show_create){ if (search_val.length > 0 && !_.include(raw_result, search_val)) { @@ -193,22 +222,18 @@ openerp.web_m2x_options = function (instance) { action: function () { self._quick_create(search_val); }, - classname: 'oe_m2o_dropdown_option' + classname: 'oe_m2o_dropdown_option o_m2o_dropdown_option' }); } } // create... - var no_create_edit = ( - self.options && (self.options.no_create || - self.options.no_create_edit) - ) - var m2x_create_edit_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create_edit']) - var m2x_create_edit = self.view.ir_options['web_m2x_options.create_edit'] == "True" - - if (!no_create_edit && ((m2x_create_edit_undef && can_create) || - m2x_create_edit)) { - + var create_edit = self.is_option_set(self.options.create) || self.is_option_set(self.options.create_edit), + create_edit_undef = _.isUndefined(self.options.create) && _.isUndefined(self.options.create_edit), + m2x_create_edit_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create_edit']), + m2x_create_edit = self.is_option_set(self.view.ir_options['web_m2x_options.create_edit']); + var show_create_edit = (!self.options && (m2x_create_edit_undef || m2x_create_edit)) || (self.options && (create_edit || (create_edit_undef && (m2x_create_edit_undef || m2x_create_edit)))); + if (show_create_edit){ values.push({ label: _t("Create and Edit..."), action: function () { @@ -216,10 +241,9 @@ openerp.web_m2x_options = function (instance) { "form", undefined, self._create_context(search_val)); }, - classname: 'oe_m2o_dropdown_option' + classname: 'oe_m2o_dropdown_option o_m2o_dropdown_option' }); } - // Check if colors specified to wait for RPC if (!(self.field_color && self.colors)){ def.resolve(values); @@ -230,12 +254,19 @@ openerp.web_m2x_options = function (instance) { } }); - instance.web.form.FieldMany2ManyTags.include({ - + form_relational.FieldMany2ManyTags.include({ + events: { + 'click .o_delete': function(e) { + this.remove_id($(e.target).parent().data('id')); + }, + 'click .badge': 'open_badge', + 'mousedown .o_colorpicker span': 'update_color', + 'focusout .o_colorpicker': 'close_color_picker', + }, show_error_displayer: function () { if ((typeof this.options.m2o_dialog === 'undefined' && this.can_create) || this.options.m2o_dialog) { - new instance.web.form.M2ODialog(this).open(); + new M2ODialog(this).open(); } }, @@ -249,7 +280,7 @@ openerp.web_m2x_options = function (instance) { if (_.isUndefined(this.view.ir_options_loaded)) { this.view.ir_options_loaded = $.Deferred(); this.view.ir_options = {}; - (new instance.web.Model("ir.config_parameter")) + (new Model("ir.config_parameter")) .query(["key", "value"]).filter([['key', 'in', OPTIONS]]) .all().then(function(records) { _(records).each(function(record) { @@ -261,6 +292,20 @@ openerp.web_m2x_options = function (instance) { return this.view.ir_options_loaded; }, + is_option_set: function(option) { + if (_.isUndefined(option)) { + return false + } + var is_string = typeof option === 'string' + var is_bool = typeof option === 'boolean' + if (is_string) { + return option === 'true' || option === 'True' + } else if (is_bool) { + return option + } + return false + }, + /** * Call this method to search using a string. */ @@ -279,12 +324,12 @@ openerp.web_m2x_options = function (instance) { this.limit = this.options.limit; } - var dataset = new instance.web.DataSet(this, this.field.relation, self.build_context()); + var dataset = new data.DataSet(this, this.field.relation, self.build_context()); var blacklist = this.get_search_blacklist(); this.last_query = search_val; return this.orderer.add(dataset.name_search( - search_val, new instance.web.CompoundDomain(self.build_domain(), [["id", "not in", blacklist]]), + search_val, new data.CompoundDomain(self.build_domain(), [["id", "not in", blacklist]]), 'ilike', this.limit + 1, self.build_context())).then(function(data) { self.last_search = data; // possible selections for the m2o @@ -304,6 +349,7 @@ openerp.web_m2x_options = function (instance) { values.push({ label: _t("Search More..."), action: function() { + // limit = 80 for improving performance, similar // to Odoo implementation here: // https://github.com/odoo/odoo/commit/8c3cdce539d87775b59b3f2d5ceb433f995821bf @@ -311,18 +357,16 @@ openerp.web_m2x_options = function (instance) { self._search_create_popup("search", data); }); }, - classname: 'oe_m2o_dropdown_option' + classname: 'oe_m2o_dropdown_option o_m2o_dropdown_option' }); } // quick create - var no_quick_create = ( - self.options && (self.options.no_create || - self.options.no_quick_create) - ) - var m2x_create_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create']) - var m2x_create = self.view.ir_options['web_m2x_options.create'] == "True" - - if (!no_quick_create && (m2x_create_undef || m2x_create)) { + var quick_create = self.is_option_set(self.options.create) || self.is_option_set(self.options.quick_create), + quick_create_undef = _.isUndefined(self.options.create) && _.isUndefined(self.options.quick_create), + m2x_create_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create']), + m2x_create = self.is_option_set(self.view.ir_options['web_m2x_options.create']); + var show_create = (!self.options && (m2x_create_undef || m2x_create)) || (self.options && (quick_create || (quick_create_undef && (m2x_create_undef || m2x_create)))); + if (show_create){ var raw_result = _(data.result).map(function(x) {return x[1];}); if (search_val.length > 0 && !_.include(raw_result, search_val)) { @@ -332,27 +376,25 @@ openerp.web_m2x_options = function (instance) { action: function() { self._quick_create(search_val); }, - classname: 'oe_m2o_dropdown_option' + classname: 'oe_m2o_dropdown_option o_m2o_dropdown_option' }); } } // create... - var no_create_edit = ( - self.options && (self.options.no_create || - self.options.no_create_edit) - ) - var m2x_create_edit_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create_edit']) - var m2x_create_edit = self.view.ir_options['web_m2x_options.create_edit'] == "True" - - if (!no_create_edit && (m2x_create_edit_undef || m2x_create_edit)) { + var create_edit = self.is_option_set(self.options.create) || self.is_option_set(self.options.create_edit), + create_edit_undef = _.isUndefined(self.options.create) && _.isUndefined(self.options.create_edit), + m2x_create_edit_undef = _.isUndefined(self.view.ir_options['web_m2x_options.create_edit']), + m2x_create_edit = self.is_option_set(self.view.ir_options['web_m2x_options.create_edit']); + var show_create_edit = (!self.options && (m2x_create_edit_undef || m2x_create_edit)) || (self.options && (create_edit || (create_edit_undef && (m2x_create_edit_undef || m2x_create_edit)))); + if (show_create_edit){ values.push({ label: _t("Create and Edit..."), action: function() { self._search_create_popup("form", undefined, self._create_context(search_val)); }, - classname: 'oe_m2o_dropdown_option' + classname: 'oe_m2o_dropdown_option o_m2o_dropdown_option' }); } @@ -360,29 +402,24 @@ openerp.web_m2x_options = function (instance) { }) }, - render_value: function() - { + open_badge: function(ev){ var self = this; - return jQuery.when(this._super.apply(this, arguments)) - .then(function() - { - if(self.options.open) - { - self.$el.find('.oe_tag') - .css('cursor', 'pointer') - .click(function(e) - { - var id = parseInt(jQuery(this).attr('data-id')); - self.do_action({ - type: 'ir.actions.act_window', - res_model: self.field.relation, - views: [[false, 'form']], - res_id: id, - }); + var open = (self.options && self.is_option_set(self.options.open)); + if(open){ + self.mutex.exec(function(){ + var id = parseInt($(ev.handleObj.selector).attr('data-id')); + self.do_action({ + type: 'ir.actions.act_window', + res_model: self.field.relation, + views: [[false, 'form']], + res_id: id, + target: "new" }); - } - }); + }.bind(this)); + }else{ + self.open_color_picker(ev); + } }, - }); -}; + }); +}); diff --git a/web_m2x_options/static/src/xml/base.xml b/web_m2x_options/static/src/xml/base.xml index 9fbf425eaadc..8b9421d190ac 100644 --- a/web_m2x_options/static/src/xml/base.xml +++ b/web_m2x_options/static/src/xml/base.xml @@ -6,7 +6,7 @@ - + jQuery(this).attr('t-att-data-id', 'el[0]'); From a266e6c5e674980258703678ebce9b5ae10ce9f2 Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Mon, 24 Oct 2016 16:10:19 +0200 Subject: [PATCH 151/399] Makes the module compatible with Odoo community --- web_m2x_options/static/src/js/form.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/web_m2x_options/static/src/js/form.js b/web_m2x_options/static/src/js/form.js index 8e97ad3ecb1d..f2a281725b4b 100644 --- a/web_m2x_options/static/src/js/form.js +++ b/web_m2x_options/static/src/js/form.js @@ -19,6 +19,11 @@ odoo.define('web_m2x_options.web_m2x_options', function (require) { 'web_m2x_options.search_more', 'web_m2x_options.m2o_dialog',]; + // In odoo 9.c FielMany2One is not exposed by form_relational + // To bypass this limitation we use the widget registry to get the + // reference to the FielMany2One widget. + var FieldMany2One = core.form_widget_registry.get('many2one'); + var M2ODialog = Dialog.extend({ template: "M2ODialog", init: function(parent) { @@ -52,7 +57,7 @@ odoo.define('web_m2x_options.web_m2x_options', function (require) { }, }); - form_relational.FieldMany2One.include({ + FieldMany2One.include({ start: function() { this._super.apply(this, arguments); @@ -188,12 +193,12 @@ odoo.define('web_m2x_options.web_m2x_options', function (require) { values.push({ label: _t("Search More..."), action: function () { - // limit = 80 for improving performance, similar + // limit = 160 for improving performance, similar // to Odoo implementation here: - // https://github.com/odoo/odoo/commit/8c3cdce539d87775b59b3f2d5ceb433f995821bf + // https://github.com/odoo/odoo/blob/feeac2a4f1cd777770dd2b42534904ac71f23e46/addons/web/static/src/js/views/form_common.js#L213 dataset.name_search( search_val, self.build_domain(), - 'ilike', 80).done(function (data) { + 'ilike', 160).done(function (data) { self._search_create_popup("search", data); }); }, From c5f66320efcfd3e3a78a7bb515e49d45506613aa Mon Sep 17 00:00:00 2001 From: Zakaria Makrelouf Date: Thu, 2 Feb 2017 13:30:29 +0100 Subject: [PATCH 152/399] web_m2x_options: s/ev.handleObj.selector/currentTarget * many2many with `options={'open': True}` it always open the first element with this fix it will open the right one --- web_m2x_options/static/src/js/form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_m2x_options/static/src/js/form.js b/web_m2x_options/static/src/js/form.js index f2a281725b4b..4b8d0ad13eea 100644 --- a/web_m2x_options/static/src/js/form.js +++ b/web_m2x_options/static/src/js/form.js @@ -412,7 +412,7 @@ odoo.define('web_m2x_options.web_m2x_options', function (require) { var open = (self.options && self.is_option_set(self.options.open)); if(open){ self.mutex.exec(function(){ - var id = parseInt($(ev.handleObj.selector).attr('data-id')); + var id = parseInt($(ev.currentTarget).data('id')); self.do_action({ type: 'ir.actions.act_window', res_model: self.field.relation, From 42049f003802ff3892881f2997b0019917a8f251 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Wed, 8 Mar 2017 19:19:19 +0100 Subject: [PATCH 153/399] Fix Qweb templates. (#561) * [FIX][web_m2x_options] Fix Qweb templates. They were trying to replace non-existing elements, and this was being logged to console: Can't find "a.oe_m2o_cm_button" when extending template FieldMany2One Can't find "span.badge" when extending template FieldMany2ManyTag * Raise version correctly. * [FIX] Make many2many_tags tag deletion work again * Correct replacement of event Instead of overwriting all events from upstream widget, better just overwrite the one you need and inherit the rest. --- web_m2x_options/README.rst | 3 ++- web_m2x_options/__openerp__.py | 5 +++-- web_m2x_options/static/src/js/form.js | 10 +++------- web_m2x_options/static/src/xml/base.xml | 16 +++++++--------- 4 files changed, 15 insertions(+), 19 deletions(-) diff --git a/web_m2x_options/README.rst b/web_m2x_options/README.rst index dff75f05fe73..98cefc3c2dc6 100644 --- a/web_m2x_options/README.rst +++ b/web_m2x_options/README.rst @@ -116,7 +116,7 @@ Your XML form view definition could contain:: Known issues ============ -Double check that you have no inherited view that remove ``options`` you set on a field ! +Double check that you have no inherited view that remove ``options`` you set on a field ! If nothing works, add a debugger in the first line of ``get_search_result method`` and enable debug mode in Odoo. When you write something in a many2one field, javascript debugger should pause. If not verify your installation. Roadmap @@ -146,6 +146,7 @@ Contributors * Nicolas JEUDY * Yannick Vaucher * Zakaria Makrelouf +* Jairo Llopis Maintainer ---------- diff --git a/web_m2x_options/__openerp__.py b/web_m2x_options/__openerp__.py index 94c1a525bd55..7206c3ca0331 100644 --- a/web_m2x_options/__openerp__.py +++ b/web_m2x_options/__openerp__.py @@ -2,7 +2,7 @@ { "name": 'web_m2x_options', - "version": "9.0.1.0.0", + "version": "9.0.1.1.0", "depends": [ 'base', 'web', @@ -12,6 +12,7 @@ ], 'license': 'AGPL-3', 'data': ['views/view.xml'], - "author": "ACSONE SA/NV, 0k.io,Odoo Community Association (OCA)", + "author": "ACSONE SA/NV, 0k.io, Tecnativa, " + "Odoo Community Association (OCA)", 'installable': True, } diff --git a/web_m2x_options/static/src/js/form.js b/web_m2x_options/static/src/js/form.js index 4b8d0ad13eea..4fb83da338e9 100644 --- a/web_m2x_options/static/src/js/form.js +++ b/web_m2x_options/static/src/js/form.js @@ -260,13 +260,9 @@ odoo.define('web_m2x_options.web_m2x_options', function (require) { }); form_relational.FieldMany2ManyTags.include({ - events: { - 'click .o_delete': function(e) { - this.remove_id($(e.target).parent().data('id')); - }, - 'click .badge': 'open_badge', - 'mousedown .o_colorpicker span': 'update_color', - 'focusout .o_colorpicker': 'close_color_picker', + init: function () { + this.events["click .badge"] = "open_badge"; + return this._super.apply(this, arguments); }, show_error_displayer: function () { if ((typeof this.options.m2o_dialog === 'undefined' && this.can_create) || diff --git a/web_m2x_options/static/src/xml/base.xml b/web_m2x_options/static/src/xml/base.xml index 8b9421d190ac..094e942eada0 100644 --- a/web_m2x_options/static/src/xml/base.xml +++ b/web_m2x_options/static/src/xml/base.xml @@ -1,13 +1,11 @@ + + - - - jQuery(this).attr('t-if', '!(widget.options.no_open || widget.options.no_open_edit)'); + + + !(widget.options.no_open || widget.options.no_open_edit) + - - - - jQuery(this).attr('t-att-data-id', 'el[0]'); - - From d0137a2ebf2e054a232d9b6a346ccd141f998ce0 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Tue, 29 Nov 2016 14:34:34 -0500 Subject: [PATCH 154/399] OCA Transbot updated translations from Transifex --- web_m2x_options/i18n/ar.po | 66 ++++++++++++++++++++++----- web_m2x_options/i18n/de.po | 69 +++++++++++++++++++++++----- web_m2x_options/i18n/es.po | 66 ++++++++++++++++++++++----- web_m2x_options/i18n/fi.po | 66 ++++++++++++++++++++++----- web_m2x_options/i18n/fr.po | 66 ++++++++++++++++++++++----- web_m2x_options/i18n/hr.po | 86 +++++++++++++++++++++++++++++++++++ web_m2x_options/i18n/it.po | 78 +++++++++++++++++++++---------- web_m2x_options/i18n/nl_NL.po | 85 ++++++++++++++++++++++++++++++++++ web_m2x_options/i18n/pt_BR.po | 68 ++++++++++++++++++++++----- web_m2x_options/i18n/sl.po | 66 ++++++++++++++++++++++----- web_m2x_options/i18n/tr.po | 67 +++++++++++++++++++++------ 11 files changed, 662 insertions(+), 121 deletions(-) create mode 100644 web_m2x_options/i18n/hr.po create mode 100644 web_m2x_options/i18n/nl_NL.po diff --git a/web_m2x_options/i18n/ar.po b/web_m2x_options/i18n/ar.po index 124f84ceecdc..6253ba90233d 100644 --- a/web_m2x_options/i18n/ar.po +++ b/web_m2x_options/i18n/ar.po @@ -3,15 +3,15 @@ # * web_m2x_options # # Translators: -# SaFi J. , 2015 +# OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: web (8.0)\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-26 02:05+0000\n" -"PO-Revision-Date: 2015-12-16 17:30+0000\n" -"Last-Translator: SaFi J. \n" -"Language-Team: Arabic (http://www.transifex.com/oca/OCA-web-8-0/language/ar/)\n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Arabic (https://www.transifex.com/oca/teams/23907/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -20,24 +20,66 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:219 -#: code:addons/web_m2x_options/static/src/js/form.js:373 +#: code:addons/web_m2x_options/static/src/xml/base.xml:8 +#, python-format +msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:47 +#, python-format +msgid "Cancel" +msgstr "إلغاء" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:33 +#, python-format +msgid "Create" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:232 +#: code:addons/web_m2x_options/static/src/js/form.js:382 #, python-format msgid "Create \"%s\"" msgstr "إنشاء \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:237 -#: code:addons/web_m2x_options/static/src/js/form.js:392 +#: code:addons/web_m2x_options/static/src/js/form.js:30 +#, python-format +msgid "Create a %s" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:250 +#: code:addons/web_m2x_options/static/src/js/form.js:401 #, python-format msgid "Create and Edit..." msgstr "إنشاء وتحرير ..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:188 -#: code:addons/web_m2x_options/static/src/js/form.js:349 +#: code:addons/web_m2x_options/static/src/js/form.js:43 +#, python-format +msgid "Create and edit" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:201 +#: code:addons/web_m2x_options/static/src/js/form.js:358 #, python-format msgid "Search More..." msgstr "البحث عن المزيد ..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:52 +#, python-format +msgid "You are creating a new %s, are you sure it does not exist yet?" +msgstr "" diff --git a/web_m2x_options/i18n/de.po b/web_m2x_options/i18n/de.po index 40eb8cacde07..da119936d9a9 100644 --- a/web_m2x_options/i18n/de.po +++ b/web_m2x_options/i18n/de.po @@ -3,15 +3,16 @@ # * web_m2x_options # # Translators: -# Rudolf Schnapka , 2016 +# OCA Transbot , 2017 +# Rudolf Schnapka , 2018 msgid "" msgstr "" -"Project-Id-Version: web (8.0)\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-26 02:05+0000\n" -"PO-Revision-Date: 2016-01-18 20:15+0000\n" -"Last-Translator: Rudolf Schnapka \n" -"Language-Team: German (http://www.transifex.com/oca/OCA-web-8-0/language/de/)\n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: Rudolf Schnapka , 2018\n" +"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -20,24 +21,68 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:219 -#: code:addons/web_m2x_options/static/src/js/form.js:373 +#: code:addons/web_m2x_options/static/src/xml/base.xml:8 +#, python-format +msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgstr "!(widget.options.no_open || widget.options.no_open_edit)" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:47 +#, python-format +msgid "Cancel" +msgstr "Abbrechen" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:33 +#, python-format +msgid "Create" +msgstr "Anlegen" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:232 +#: code:addons/web_m2x_options/static/src/js/form.js:382 #, python-format msgid "Create \"%s\"" msgstr "Anlegen \"%s" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:237 -#: code:addons/web_m2x_options/static/src/js/form.js:392 +#: code:addons/web_m2x_options/static/src/js/form.js:30 +#, python-format +msgid "Create a %s" +msgstr "Eine %s anlegen" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:250 +#: code:addons/web_m2x_options/static/src/js/form.js:401 #, python-format msgid "Create and Edit..." msgstr "Anlegen und Bearbeiten" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:188 -#: code:addons/web_m2x_options/static/src/js/form.js:349 +#: code:addons/web_m2x_options/static/src/js/form.js:43 +#, python-format +msgid "Create and edit" +msgstr "Anlegen und bearbeiten" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:201 +#: code:addons/web_m2x_options/static/src/js/form.js:358 #, python-format msgid "Search More..." msgstr "Suche weitere..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:52 +#, python-format +msgid "You are creating a new %s, are you sure it does not exist yet?" +msgstr "" +"Sie legen eine neue %s an, sind Sie sicher, dass diese nicht bereits " +"vorhanden ist?" diff --git a/web_m2x_options/i18n/es.po b/web_m2x_options/i18n/es.po index bd3b1e51bc9d..0c2c9feb215b 100644 --- a/web_m2x_options/i18n/es.po +++ b/web_m2x_options/i18n/es.po @@ -3,15 +3,15 @@ # * web_m2x_options # # Translators: -# Pedro M. Baeza , 2015 +# OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: web (8.0)\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-26 02:05+0000\n" -"PO-Revision-Date: 2015-11-07 11:28+0000\n" -"Last-Translator: Pedro M. Baeza \n" -"Language-Team: Spanish (http://www.transifex.com/oca/OCA-web-8-0/language/es/)\n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -20,24 +20,66 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:219 -#: code:addons/web_m2x_options/static/src/js/form.js:373 +#: code:addons/web_m2x_options/static/src/xml/base.xml:8 +#, python-format +msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:47 +#, python-format +msgid "Cancel" +msgstr "Cancelar" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:33 +#, python-format +msgid "Create" +msgstr "Crear" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:232 +#: code:addons/web_m2x_options/static/src/js/form.js:382 #, python-format msgid "Create \"%s\"" msgstr "Crear \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:237 -#: code:addons/web_m2x_options/static/src/js/form.js:392 +#: code:addons/web_m2x_options/static/src/js/form.js:30 +#, python-format +msgid "Create a %s" +msgstr "Crear un %s" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:250 +#: code:addons/web_m2x_options/static/src/js/form.js:401 #, python-format msgid "Create and Edit..." msgstr "Crear y editar..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:188 -#: code:addons/web_m2x_options/static/src/js/form.js:349 +#: code:addons/web_m2x_options/static/src/js/form.js:43 +#, python-format +msgid "Create and edit" +msgstr "Crear y editar" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:201 +#: code:addons/web_m2x_options/static/src/js/form.js:358 #, python-format msgid "Search More..." msgstr "Buscar más..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:52 +#, python-format +msgid "You are creating a new %s, are you sure it does not exist yet?" +msgstr "Está creando un nuevo %s, ¿está seguro de no existe ya?" diff --git a/web_m2x_options/i18n/fi.po b/web_m2x_options/i18n/fi.po index b374d7eb9458..0d5a5c6cc520 100644 --- a/web_m2x_options/i18n/fi.po +++ b/web_m2x_options/i18n/fi.po @@ -3,15 +3,15 @@ # * web_m2x_options # # Translators: -# Jarmo Kortetjärvi , 2016 +# OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: web (8.0)\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-26 02:05+0000\n" -"PO-Revision-Date: 2016-02-01 09:52+0000\n" -"Last-Translator: Jarmo Kortetjärvi \n" -"Language-Team: Finnish (http://www.transifex.com/oca/OCA-web-8-0/language/fi/)\n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Finnish (https://www.transifex.com/oca/teams/23907/fi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -20,24 +20,66 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:219 -#: code:addons/web_m2x_options/static/src/js/form.js:373 +#: code:addons/web_m2x_options/static/src/xml/base.xml:8 +#, python-format +msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:47 +#, python-format +msgid "Cancel" +msgstr "Peru" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:33 +#, python-format +msgid "Create" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:232 +#: code:addons/web_m2x_options/static/src/js/form.js:382 #, python-format msgid "Create \"%s\"" msgstr "Luo \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:237 -#: code:addons/web_m2x_options/static/src/js/form.js:392 +#: code:addons/web_m2x_options/static/src/js/form.js:30 +#, python-format +msgid "Create a %s" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:250 +#: code:addons/web_m2x_options/static/src/js/form.js:401 #, python-format msgid "Create and Edit..." msgstr "Luo ja muokkaa..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:188 -#: code:addons/web_m2x_options/static/src/js/form.js:349 +#: code:addons/web_m2x_options/static/src/js/form.js:43 +#, python-format +msgid "Create and edit" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:201 +#: code:addons/web_m2x_options/static/src/js/form.js:358 #, python-format msgid "Search More..." msgstr "Hae lisää..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:52 +#, python-format +msgid "You are creating a new %s, are you sure it does not exist yet?" +msgstr "" diff --git a/web_m2x_options/i18n/fr.po b/web_m2x_options/i18n/fr.po index 3be5ae233eab..31647daf9534 100644 --- a/web_m2x_options/i18n/fr.po +++ b/web_m2x_options/i18n/fr.po @@ -3,15 +3,15 @@ # * web_m2x_options # # Translators: -# Christophe CHAUVET , 2016 +# OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: web (8.0)\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-05-06 15:50+0000\n" -"PO-Revision-Date: 2016-05-06 08:27+0000\n" -"Last-Translator: Christophe CHAUVET \n" -"Language-Team: French (http://www.transifex.com/oca/OCA-web-8-0/language/fr/)\n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -20,24 +20,66 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:219 -#: code:addons/web_m2x_options/static/src/js/form.js:373 +#: code:addons/web_m2x_options/static/src/xml/base.xml:8 +#, python-format +msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:47 +#, python-format +msgid "Cancel" +msgstr "Annuler" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:33 +#, python-format +msgid "Create" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:232 +#: code:addons/web_m2x_options/static/src/js/form.js:382 #, python-format msgid "Create \"%s\"" msgstr "Creer \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:237 -#: code:addons/web_m2x_options/static/src/js/form.js:392 +#: code:addons/web_m2x_options/static/src/js/form.js:30 +#, python-format +msgid "Create a %s" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:250 +#: code:addons/web_m2x_options/static/src/js/form.js:401 #, python-format msgid "Create and Edit..." msgstr "Créer et modifier..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:188 -#: code:addons/web_m2x_options/static/src/js/form.js:349 +#: code:addons/web_m2x_options/static/src/js/form.js:43 +#, python-format +msgid "Create and edit" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:201 +#: code:addons/web_m2x_options/static/src/js/form.js:358 #, python-format msgid "Search More..." msgstr "Rechercher plus..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:52 +#, python-format +msgid "You are creating a new %s, are you sure it does not exist yet?" +msgstr "" diff --git a/web_m2x_options/i18n/hr.po b/web_m2x_options/i18n/hr.po new file mode 100644 index 000000000000..644c0b4ba912 --- /dev/null +++ b/web_m2x_options/i18n/hr.po @@ -0,0 +1,86 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# Bole , 2017 +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/xml/base.xml:8 +#, python-format +msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgstr "!(opcije isključuju otvaranje ili uređivanje)" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:47 +#, python-format +msgid "Cancel" +msgstr "Otkaži" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:33 +#, python-format +msgid "Create" +msgstr "Kreiraj" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:232 +#: code:addons/web_m2x_options/static/src/js/form.js:382 +#, python-format +msgid "Create \"%s\"" +msgstr "Kreiraj \" %s\"" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:30 +#, python-format +msgid "Create a %s" +msgstr "Kreiraj %s" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:250 +#: code:addons/web_m2x_options/static/src/js/form.js:401 +#, python-format +msgid "Create and Edit..." +msgstr "Kreiraj i uredi..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:43 +#, python-format +msgid "Create and edit" +msgstr "Kreiraj i uredi" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:201 +#: code:addons/web_m2x_options/static/src/js/form.js:358 +#, python-format +msgid "Search More..." +msgstr "Traži dalje..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:52 +#, python-format +msgid "You are creating a new %s, are you sure it does not exist yet?" +msgstr "Želite kreirati novi %s, jeste li sigurni da već ne postoji?" diff --git a/web_m2x_options/i18n/it.po b/web_m2x_options/i18n/it.po index c8db1568fdf7..47e767833181 100644 --- a/web_m2x_options/i18n/it.po +++ b/web_m2x_options/i18n/it.po @@ -3,27 +3,15 @@ # * web_m2x_options # # Translators: -# Ahmet Altınışık , 2015 -# Antonio Trueba, 2016 -# Armando Vulcano Junior , 2015 -# Carles Antoli , 2015 -# Bole , 2015 -# FIRST AUTHOR , 2012,2014 -# Giacomo , 2015 -# Hotellook, 2014 -# Jarmo Kortetjärvi , 2016 -# Paolo Valier, 2016 -# Paolo Valier, 2016 -# Rudolf Schnapka , 2016 -# Thomas A. Jaeger, 2015 +# OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: web (8.0)\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-28 07:09+0000\n" -"PO-Revision-Date: 2016-04-28 06:46+0000\n" -"Last-Translator: Paolo Valier\n" -"Language-Team: Italian (http://www.transifex.com/oca/OCA-web-8-0/language/it/)\n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -32,24 +20,66 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:219 -#: code:addons/web_m2x_options/static/src/js/form.js:373 +#: code:addons/web_m2x_options/static/src/xml/base.xml:8 +#, python-format +msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:47 +#, python-format +msgid "Cancel" +msgstr "Annulla" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:33 +#, python-format +msgid "Create" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:232 +#: code:addons/web_m2x_options/static/src/js/form.js:382 #, python-format msgid "Create \"%s\"" msgstr "Crea \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:237 -#: code:addons/web_m2x_options/static/src/js/form.js:392 +#: code:addons/web_m2x_options/static/src/js/form.js:30 +#, python-format +msgid "Create a %s" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:250 +#: code:addons/web_m2x_options/static/src/js/form.js:401 #, python-format msgid "Create and Edit..." msgstr "Crea e Modifica..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:188 -#: code:addons/web_m2x_options/static/src/js/form.js:349 +#: code:addons/web_m2x_options/static/src/js/form.js:43 +#, python-format +msgid "Create and edit" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:201 +#: code:addons/web_m2x_options/static/src/js/form.js:358 #, python-format msgid "Search More..." msgstr "Cerca altro..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:52 +#, python-format +msgid "You are creating a new %s, are you sure it does not exist yet?" +msgstr "" diff --git a/web_m2x_options/i18n/nl_NL.po b/web_m2x_options/i18n/nl_NL.po new file mode 100644 index 000000000000..1f7da2402d17 --- /dev/null +++ b/web_m2x_options/i18n/nl_NL.po @@ -0,0 +1,85 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +# Translators: +# Peter Hageman , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-07-01 03:35+0000\n" +"PO-Revision-Date: 2017-07-01 03:35+0000\n" +"Last-Translator: Peter Hageman , 2017\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nl_NL\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/xml/base.xml:8 +#, python-format +msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:47 +#, python-format +msgid "Cancel" +msgstr "Annuleer" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:33 +#, python-format +msgid "Create" +msgstr "Aanmaken" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:224 +#: code:addons/web_m2x_options/static/src/js/form.js:374 +#, python-format +msgid "Create \"%s\"" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:30 +#, python-format +msgid "Create a %s" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:242 +#: code:addons/web_m2x_options/static/src/js/form.js:393 +#, python-format +msgid "Create and Edit..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:43 +#, python-format +msgid "Create and edit" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:193 +#: code:addons/web_m2x_options/static/src/js/form.js:350 +#, python-format +msgid "Search More..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:52 +#, python-format +msgid "You are creating a new %s, are you sure it does not exist yet?" +msgstr "" diff --git a/web_m2x_options/i18n/pt_BR.po b/web_m2x_options/i18n/pt_BR.po index cf28995e3eed..538bfc7e7930 100644 --- a/web_m2x_options/i18n/pt_BR.po +++ b/web_m2x_options/i18n/pt_BR.po @@ -3,15 +3,16 @@ # * web_m2x_options # # Translators: -# danimaribeiro , 2016 +# OCA Transbot , 2017 +# Rodrigo de Almeida Sottomaior Macedo , 2017 msgid "" msgstr "" -"Project-Id-Version: web (8.0)\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-03-11 02:17+0000\n" -"PO-Revision-Date: 2016-03-05 16:20+0000\n" -"Last-Translator: danimaribeiro \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-web-8-0/language/pt_BR/)\n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: Rodrigo de Almeida Sottomaior Macedo , 2017\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -20,24 +21,67 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:219 -#: code:addons/web_m2x_options/static/src/js/form.js:373 +#: code:addons/web_m2x_options/static/src/xml/base.xml:8 +#, python-format +msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgstr "!(widget.options.no_open || widget.options.no_open_edit)" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:47 +#, python-format +msgid "Cancel" +msgstr "Cancelar" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:33 +#, python-format +msgid "Create" +msgstr "Criar" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:232 +#: code:addons/web_m2x_options/static/src/js/form.js:382 #, python-format msgid "Create \"%s\"" msgstr "Criar \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:237 -#: code:addons/web_m2x_options/static/src/js/form.js:392 +#: code:addons/web_m2x_options/static/src/js/form.js:30 +#, python-format +msgid "Create a %s" +msgstr "Criar um %s" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:250 +#: code:addons/web_m2x_options/static/src/js/form.js:401 #, python-format msgid "Create and Edit..." msgstr "Criar e editar.." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:188 -#: code:addons/web_m2x_options/static/src/js/form.js:349 +#: code:addons/web_m2x_options/static/src/js/form.js:43 +#, python-format +msgid "Create and edit" +msgstr "Criar e editar" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:201 +#: code:addons/web_m2x_options/static/src/js/form.js:358 #, python-format msgid "Search More..." msgstr "Buscar mais..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:52 +#, python-format +msgid "You are creating a new %s, are you sure it does not exist yet?" +msgstr "" +"Você está criando um novo %s, você tem certeza de que ainda não existe?" diff --git a/web_m2x_options/i18n/sl.po b/web_m2x_options/i18n/sl.po index 7192762e128e..a4e3ae1f3184 100644 --- a/web_m2x_options/i18n/sl.po +++ b/web_m2x_options/i18n/sl.po @@ -3,15 +3,15 @@ # * web_m2x_options # # Translators: -# Matjaž Mozetič , 2015 +# OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: web (8.0)\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-26 02:05+0000\n" -"PO-Revision-Date: 2015-11-08 05:46+0000\n" -"Last-Translator: Matjaž Mozetič \n" -"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-web-8-0/language/sl/)\n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -20,24 +20,66 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:219 -#: code:addons/web_m2x_options/static/src/js/form.js:373 +#: code:addons/web_m2x_options/static/src/xml/base.xml:8 +#, python-format +msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:47 +#, python-format +msgid "Cancel" +msgstr "Preklic" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:33 +#, python-format +msgid "Create" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:232 +#: code:addons/web_m2x_options/static/src/js/form.js:382 #, python-format msgid "Create \"%s\"" msgstr "Ustvari \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:237 -#: code:addons/web_m2x_options/static/src/js/form.js:392 +#: code:addons/web_m2x_options/static/src/js/form.js:30 +#, python-format +msgid "Create a %s" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:250 +#: code:addons/web_m2x_options/static/src/js/form.js:401 #, python-format msgid "Create and Edit..." msgstr "Ustvari in urejaj..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:188 -#: code:addons/web_m2x_options/static/src/js/form.js:349 +#: code:addons/web_m2x_options/static/src/js/form.js:43 +#, python-format +msgid "Create and edit" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:201 +#: code:addons/web_m2x_options/static/src/js/form.js:358 #, python-format msgid "Search More..." msgstr "Poišči več..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:52 +#, python-format +msgid "You are creating a new %s, are you sure it does not exist yet?" +msgstr "" diff --git a/web_m2x_options/i18n/tr.po b/web_m2x_options/i18n/tr.po index 2b9f46fdd2ee..584219f2c764 100644 --- a/web_m2x_options/i18n/tr.po +++ b/web_m2x_options/i18n/tr.po @@ -3,16 +3,15 @@ # * web_m2x_options # # Translators: -# Ahmet Altınışık , 2015 -# Ahmet Altınışık , 2015 +# OCA Transbot , 2017 msgid "" msgstr "" -"Project-Id-Version: web (8.0)\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-02-26 02:05+0000\n" -"PO-Revision-Date: 2015-12-30 21:53+0000\n" -"Last-Translator: Ahmet Altınışık \n" -"Language-Team: Turkish (http://www.transifex.com/oca/OCA-web-8-0/language/tr/)\n" +"POT-Creation-Date: 2018-01-03 03:50+0000\n" +"PO-Revision-Date: 2018-01-03 03:50+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -21,24 +20,66 @@ msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:219 -#: code:addons/web_m2x_options/static/src/js/form.js:373 +#: code:addons/web_m2x_options/static/src/xml/base.xml:8 +#, python-format +msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:47 +#, python-format +msgid "Cancel" +msgstr "İptal" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:33 +#, python-format +msgid "Create" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:232 +#: code:addons/web_m2x_options/static/src/js/form.js:382 #, python-format msgid "Create \"%s\"" msgstr "Oluştur \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:237 -#: code:addons/web_m2x_options/static/src/js/form.js:392 +#: code:addons/web_m2x_options/static/src/js/form.js:30 +#, python-format +msgid "Create a %s" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:250 +#: code:addons/web_m2x_options/static/src/js/form.js:401 #, python-format msgid "Create and Edit..." msgstr "Oluştur ve düzenle..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:188 -#: code:addons/web_m2x_options/static/src/js/form.js:349 +#: code:addons/web_m2x_options/static/src/js/form.js:43 +#, python-format +msgid "Create and edit" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:201 +#: code:addons/web_m2x_options/static/src/js/form.js:358 #, python-format msgid "Search More..." msgstr "Daha Fazla..." + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:52 +#, python-format +msgid "You are creating a new %s, are you sure it does not exist yet?" +msgstr "" From ae7f003e67f813a9ee12cd1056999a71e3e183e0 Mon Sep 17 00:00:00 2001 From: David Vidal Date: Tue, 16 May 2017 12:55:02 +0200 Subject: [PATCH 155/399] [MIG] web_m2x_options: migrated to 10.0 --- web_m2x_options/README.rst | 4 ++++ .../{__openerp__.py => __manifest__.py} | 2 +- web_m2x_options/static/src/js/form.js | 2 -- web_m2x_options/static/src/xml/base.xml | 6 ++++-- web_m2x_options/views/view.xml | 17 +++++++++-------- 5 files changed, 18 insertions(+), 13 deletions(-) rename web_m2x_options/{__openerp__.py => __manifest__.py} (92%) diff --git a/web_m2x_options/README.rst b/web_m2x_options/README.rst index 98cefc3c2dc6..f0e78aa44650 100644 --- a/web_m2x_options/README.rst +++ b/web_m2x_options/README.rst @@ -6,6 +6,9 @@ Add new options for many2one field ================================== +Description +----------- + This modules modifies "many2one" and "many2manytags" form widgets so as to add some new display control options. @@ -147,6 +150,7 @@ Contributors * Yannick Vaucher * Zakaria Makrelouf * Jairo Llopis +* David Vidal Maintainer ---------- diff --git a/web_m2x_options/__openerp__.py b/web_m2x_options/__manifest__.py similarity index 92% rename from web_m2x_options/__openerp__.py rename to web_m2x_options/__manifest__.py index 7206c3ca0331..ac436e6a6911 100644 --- a/web_m2x_options/__openerp__.py +++ b/web_m2x_options/__manifest__.py @@ -2,7 +2,7 @@ { "name": 'web_m2x_options', - "version": "9.0.1.1.0", + "version": "10.0.1.0.0", "depends": [ 'base', 'web', diff --git a/web_m2x_options/static/src/js/form.js b/web_m2x_options/static/src/js/form.js index 4fb83da338e9..13ec3a6e5d43 100644 --- a/web_m2x_options/static/src/js/form.js +++ b/web_m2x_options/static/src/js/form.js @@ -4,13 +4,11 @@ odoo.define('web_m2x_options.web_m2x_options', function (require) { "use strict"; - var $ = require("$"); var core = require('web.core'), data = require('web.data'), Dialog = require('web.Dialog'), Model = require('web.Model'), form_relational = require('web.form_relational'), - _ = require('_'), _t = core._t; var OPTIONS = ['web_m2x_options.create', diff --git a/web_m2x_options/static/src/xml/base.xml b/web_m2x_options/static/src/xml/base.xml index 094e942eada0..c095218bfe29 100644 --- a/web_m2x_options/static/src/xml/base.xml +++ b/web_m2x_options/static/src/xml/base.xml @@ -4,8 +4,10 @@ - - !(widget.options.no_open || widget.options.no_open_edit) + + + !(widget.options.no_open || widget.options.no_open_edit) + diff --git a/web_m2x_options/views/view.xml b/web_m2x_options/views/view.xml index 9628625b5103..85d435c1e140 100644 --- a/web_m2x_options/views/view.xml +++ b/web_m2x_options/views/view.xml @@ -1,12 +1,13 @@ - - - - -
\ No newline at end of file + From 7ca6188c64f2f7b815579027c39b5718d86127df Mon Sep 17 00:00:00 2001 From: OCA Git Bot Date: Sat, 23 Jun 2018 05:42:58 +0200 Subject: [PATCH 165/399] [UPD] README.rst --- web_responsive/README.rst | 76 +-- web_responsive/static/description/index.html | 461 +++++++++++++++++++ 2 files changed, 507 insertions(+), 30 deletions(-) create mode 100644 web_responsive/static/description/index.html diff --git a/web_responsive/README.rst b/web_responsive/README.rst index 8717f06742f3..8f5fcfb09753 100644 --- a/web_responsive/README.rst +++ b/web_responsive/README.rst @@ -1,11 +1,30 @@ -.. image:: https://img.shields.io/badge/license-LGPL--3-blue.svg - :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html - :alt: License: LGPL-3 - ============== Web Responsive ============== +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github + :target: https://github.com/OCA/web/tree/11.0/web_responsive + :alt: OCA/web +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/web-11-0/web-11-0-web_responsive + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/162/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + This module provides a mobile compliant interface for Odoo Community web. Features: @@ -13,20 +32,16 @@ Features: * New navigation with an App drawer * Keyboard shortcuts for easier navigation * Display kanban views for small screens if an action or field One2x + * Set chatter side (Optional per user) +**Table of contents** -Installation -============ - -Configuration -============= +.. contents:: + :local: Usage ===== -Keyboard Shortcuts ------------------- - The following keyboard shortcuts are implemented: * Toggle App Drawer - `ActionKey ` + ``A`` @@ -34,10 +49,6 @@ The following keyboard shortcuts are implemented: * Type to select App Links * ``esc`` to close App Drawer -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/162/11.0 - Known issues / Roadmap ====================== @@ -54,43 +65,48 @@ this module. great styles, but also `JavaScript that causes issues on mobile `_ - Bug Tracker =========== -Bugs are tracked on `GitHub Issues -`_. In case of trouble, please -check there if your issue has already been reported. If you spotted it first, -help us smashing it by providing a detailed and welcomed feedback. +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. +Do not contact contributors directly about support or help with technical issues. Credits ======= -Images ------- +Authors +~~~~~~~ -* Odoo Community Association: `Icon `_. +* LasLabs +* Tecnativa +* Alexandre Díaz Contributors ------------- +~~~~~~~~~~~~ * Dave Lasley * Jairo Llopis * Dennis Sluijk * Sergio Teruel +* Alexandre Díaz -Maintainer ----------- +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. .. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association :target: https://odoo-community.org -This module is maintained by the OCA. - OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -To contribute to this module, please visit https://odoo-community.org. +This module is part of the `OCA/web `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_responsive/static/description/index.html b/web_responsive/static/description/index.html new file mode 100644 index 000000000000..678c500e5a67 --- /dev/null +++ b/web_responsive/static/description/index.html @@ -0,0 +1,461 @@ + + + + + + +Web Responsive + + + +
+

Web Responsive

+ + +

Beta License: LGPL-3 OCA/web Translate me on Weblate Try me on Runbot

+

This module provides a mobile compliant interface for Odoo Community web.

+

Features:

+
+
    +
  • New navigation with an App drawer
  • +
  • Keyboard shortcuts for easier navigation
  • +
  • Display kanban views for small screens if an action or field One2x
  • +
  • Set chatter side (Optional per user)
  • +
+
+

Table of contents

+ +
+

Usage

+

The following keyboard shortcuts are implemented:

+
    +
  • Toggle App Drawer - ActionKey <https://en.wikipedia.org/wiki/Access_key#Access_in_different_browsers> + A
  • +
  • Navigate Apps Drawer - Arrow Keys
  • +
  • Type to select App Links
  • +
  • esc to close App Drawer
  • +
+
+
+

Known issues / Roadmap

+

Note: Data added to the footer support_branding is not shown while using +this module.

+
    +
  • Provide full menu search feature instead of just App search
  • +
  • Drag drawer from left to open in mobile
  • +
  • Figure out how to test focus on hidden elements for keyboard nav tests
  • +
  • If you resize the window, body gets a wrong overflow: auto css property +and you need to refresh your view or open/close the app drawer to fix that.
  • +
  • Override LESS styling to allow for responsive widget layouts
  • +
  • Adding oe_main_menu_navbar ID to the top navigation bar triggers some +great styles, but also JavaScript that causes issues on mobile
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • LasLabs
  • +
  • Tecnativa
  • +
  • Alexandre Díaz
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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.

+

This module is part of the OCA/web project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + From 14f502d1f261bc273180cd183905edb105fdab11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul=20=28ACSONE=29?= Date: Sun, 24 Jun 2018 12:21:23 +0200 Subject: [PATCH 166/399] Enable MAKEPOT --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ede0cdb80a49..74368db938cf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ env: matrix: - LINT_CHECK="1" - TESTS="1" ODOO_REPO="OCA/OCB" - - TESTS="1" ODOO_REPO="odoo/odoo" + - TESTS="1" ODOO_REPO="odoo/odoo" MAKEPOT="1" install: From 63001db2a43707ebbc4ac8a274e62f5ff7a535c6 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:10 +0000 Subject: [PATCH 167/399] [UPD] Update web_action_conditionable.pot --- .../i18n/web_action_conditionable.pot | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web_action_conditionable/i18n/web_action_conditionable.pot diff --git a/web_action_conditionable/i18n/web_action_conditionable.pot b/web_action_conditionable/i18n/web_action_conditionable.pot new file mode 100644 index 000000000000..447d3bb3ca4c --- /dev/null +++ b/web_action_conditionable/i18n/web_action_conditionable.pot @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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" + From 6da843130bf23c0c1f18582870c8c332ff419cb4 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:10 +0000 Subject: [PATCH 168/399] [UPD] Update web_decimal_numpad_dot.pot --- .../i18n/web_decimal_numpad_dot.pot | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web_decimal_numpad_dot/i18n/web_decimal_numpad_dot.pot diff --git a/web_decimal_numpad_dot/i18n/web_decimal_numpad_dot.pot b/web_decimal_numpad_dot/i18n/web_decimal_numpad_dot.pot new file mode 100644 index 000000000000..447d3bb3ca4c --- /dev/null +++ b/web_decimal_numpad_dot/i18n/web_decimal_numpad_dot.pot @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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" + From 8f8b73bb4cf825d617e177f4128aed7bec50a893 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:10 +0000 Subject: [PATCH 169/399] [UPD] Update web_dialog_size.pot --- web_dialog_size/i18n/web_dialog_size.pot | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 web_dialog_size/i18n/web_dialog_size.pot diff --git a/web_dialog_size/i18n/web_dialog_size.pot b/web_dialog_size/i18n/web_dialog_size.pot new file mode 100644 index 000000000000..ab1f7385cd1d --- /dev/null +++ b/web_dialog_size/i18n/web_dialog_size.pot @@ -0,0 +1,20 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_dialog_size +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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: web_dialog_size +#: model:ir.model,name:web_dialog_size.model_ir_config_parameter +msgid "ir.config_parameter" +msgstr "" + From 3a09e5ec2d6efed64d716a3d4024b82d99c82b19 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:11 +0000 Subject: [PATCH 170/399] [UPD] Update web_environment_ribbon.pot --- web_environment_ribbon/i18n/de.po | 4 +-- web_environment_ribbon/i18n/fr.po | 4 +-- web_environment_ribbon/i18n/hr.po | 7 ++-- web_environment_ribbon/i18n/nl_NL.po | 7 ++-- web_environment_ribbon/i18n/pt_BR.po | 10 +++--- web_environment_ribbon/i18n/sl.po | 7 ++-- .../i18n/web_environment_ribbon.pot | 35 +++++++++++++++++++ 7 files changed, 57 insertions(+), 17 deletions(-) create mode 100644 web_environment_ribbon/i18n/web_environment_ribbon.pot diff --git a/web_environment_ribbon/i18n/de.po b/web_environment_ribbon/i18n/de.po index 63ae96fb5530..eda35f2f3fc0 100644 --- a/web_environment_ribbon/i18n/de.po +++ b/web_environment_ribbon/i18n/de.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_environment_ribbon -# +# # Translators: # Niki Waibel , 2017 msgid "" @@ -12,10 +12,10 @@ msgstr "" "PO-Revision-Date: 2017-07-13 16:06+0000\n" "Last-Translator: Niki Waibel , 2017\n" "Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_environment_ribbon diff --git a/web_environment_ribbon/i18n/fr.po b/web_environment_ribbon/i18n/fr.po index 9353a08cb7d1..8be68039eff9 100644 --- a/web_environment_ribbon/i18n/fr.po +++ b/web_environment_ribbon/i18n/fr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_environment_ribbon -# +# # Translators: # OCA Transbot , 2017 # Quentin THEURET , 2017 @@ -13,10 +13,10 @@ msgstr "" "PO-Revision-Date: 2017-07-26 02:44+0000\n" "Last-Translator: Quentin THEURET , 2017\n" "Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: web_environment_ribbon diff --git a/web_environment_ribbon/i18n/hr.po b/web_environment_ribbon/i18n/hr.po index 0a98d3350f34..a5dec955cde1 100644 --- a/web_environment_ribbon/i18n/hr.po +++ b/web_environment_ribbon/i18n/hr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_environment_ribbon -# +# # Translators: # Bole , 2017 msgid "" @@ -12,11 +12,12 @@ msgstr "" "PO-Revision-Date: 2017-07-13 16:06+0000\n" "Last-Translator: Bole , 2017\n" "Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: hr\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #. module: web_environment_ribbon #: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend_display_name diff --git a/web_environment_ribbon/i18n/nl_NL.po b/web_environment_ribbon/i18n/nl_NL.po index bf79a0ea750b..9cc54eca698b 100644 --- a/web_environment_ribbon/i18n/nl_NL.po +++ b/web_environment_ribbon/i18n/nl_NL.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_environment_ribbon -# +# # Translators: # Peter Hageman , 2017 msgid "" @@ -11,11 +11,12 @@ msgstr "" "POT-Creation-Date: 2017-07-13 16:06+0000\n" "PO-Revision-Date: 2017-07-13 16:06+0000\n" "Last-Translator: Peter Hageman , 2017\n" -"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_environment_ribbon diff --git a/web_environment_ribbon/i18n/pt_BR.po b/web_environment_ribbon/i18n/pt_BR.po index 46eb9d7e8f33..024f109bc09c 100644 --- a/web_environment_ribbon/i18n/pt_BR.po +++ b/web_environment_ribbon/i18n/pt_BR.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_environment_ribbon -# +# # Translators: # Rodrigo de Almeida Sottomaior Macedo , 2017 msgid "" @@ -10,12 +10,14 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-07-13 16:06+0000\n" "PO-Revision-Date: 2017-07-13 16:06+0000\n" -"Last-Translator: Rodrigo de Almeida Sottomaior Macedo , 2017\n" -"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" +"Last-Translator: Rodrigo de Almeida Sottomaior Macedo " +", 2017\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" +"teams/23907/pt_BR/)\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: web_environment_ribbon diff --git a/web_environment_ribbon/i18n/sl.po b/web_environment_ribbon/i18n/sl.po index d07c1c5fc40e..a3264ebb8286 100644 --- a/web_environment_ribbon/i18n/sl.po +++ b/web_environment_ribbon/i18n/sl.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_environment_ribbon -# +# # Translators: # OCA Transbot , 2017 msgid "" @@ -12,11 +12,12 @@ msgstr "" "PO-Revision-Date: 2017-07-13 16:06+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" +"Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: sl\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" #. module: web_environment_ribbon #: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend_display_name diff --git a/web_environment_ribbon/i18n/web_environment_ribbon.pot b/web_environment_ribbon/i18n/web_environment_ribbon.pot new file mode 100644 index 000000000000..09bc60ce9bca --- /dev/null +++ b/web_environment_ribbon/i18n/web_environment_ribbon.pot @@ -0,0 +1,35 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_environment_ribbon +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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: web_environment_ribbon +#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend_display_name +msgid "Display Name" +msgstr "" + +#. module: web_environment_ribbon +#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend_id +msgid "ID" +msgstr "" + +#. module: web_environment_ribbon +#: model:ir.model.fields,field_description:web_environment_ribbon.field_web_environment_ribbon_backend___last_update +msgid "Last Modified on" +msgstr "" + +#. module: web_environment_ribbon +#: model:ir.model,name:web_environment_ribbon.model_web_environment_ribbon_backend +msgid "Web Environment Ribbon Backend" +msgstr "" + From c1113675f58a34c3fe6ca167b9a32bdb56fe9f46 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:11 +0000 Subject: [PATCH 171/399] [UPD] Update web_favicon.pot --- web_favicon/i18n/de.po | 10 +++--- web_favicon/i18n/es.po | 10 +++--- web_favicon/i18n/hr.po | 15 ++++---- web_favicon/i18n/nl_NL.po | 14 ++++---- web_favicon/i18n/pt_BR.po | 16 +++++---- web_favicon/i18n/web_favicon.pot | 60 ++++++++++++++++++++++++++++++++ 6 files changed, 99 insertions(+), 26 deletions(-) create mode 100644 web_favicon/i18n/web_favicon.pot diff --git a/web_favicon/i18n/de.po b/web_favicon/i18n/de.po index 148fa6144083..51b17b0afc72 100644 --- a/web_favicon/i18n/de.po +++ b/web_favicon/i18n/de.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_favicon -# +# # Translators: # Niki Waibel , 2016 msgid "" @@ -12,10 +12,10 @@ msgstr "" "PO-Revision-Date: 2016-11-22 10:37+0000\n" "Last-Translator: Niki Waibel , 2016\n" "Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_favicon @@ -30,12 +30,14 @@ msgstr "Favicon" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend -msgid "Favicon backend" +#, fuzzy +msgid "Favicon Backend" msgstr "Icon" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend_mimetype -msgid "Favicon backend mimetype" +#, fuzzy +msgid "Favicon Backend Mimetype" msgstr "MIME-Type" #. module: web_favicon diff --git a/web_favicon/i18n/es.po b/web_favicon/i18n/es.po index 97e5c5a0e655..b77d01865880 100644 --- a/web_favicon/i18n/es.po +++ b/web_favicon/i18n/es.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_favicon -# +# # Translators: # Pedro M. Baeza , 2016 msgid "" @@ -12,10 +12,10 @@ msgstr "" "PO-Revision-Date: 2016-12-23 02:13+0000\n" "Last-Translator: Pedro M. Baeza , 2016\n" "Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_favicon @@ -30,12 +30,14 @@ msgstr "Favicon" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend -msgid "Favicon backend" +#, fuzzy +msgid "Favicon Backend" msgstr "Favicon del backend" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend_mimetype -msgid "Favicon backend mimetype" +#, fuzzy +msgid "Favicon Backend Mimetype" msgstr "Tipo MIME del favicon de backend" #. module: web_favicon diff --git a/web_favicon/i18n/hr.po b/web_favicon/i18n/hr.po index 184674f1d730..7c25802497aa 100644 --- a/web_favicon/i18n/hr.po +++ b/web_favicon/i18n/hr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_favicon -# +# # Translators: # OCA Transbot , 2017 # Bole , 2017 @@ -13,11 +13,12 @@ msgstr "" "PO-Revision-Date: 2017-04-28 18:03+0000\n" "Last-Translator: Bole , 2017\n" "Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: hr\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #. module: web_favicon #: model:ir.model,name:web_favicon.model_res_company @@ -31,13 +32,15 @@ msgstr "Favicon" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend -msgid "Favicon backend" +#, fuzzy +msgid "Favicon Backend" msgstr "Favicon backend" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend_mimetype -msgid "Favicon backend mimetype" -msgstr "" +#, fuzzy +msgid "Favicon Backend Mimetype" +msgstr "Favicon backend" #. module: web_favicon #: model:ir.model.fields,help:web_favicon.field_res_company_favicon_backend_mimetype diff --git a/web_favicon/i18n/nl_NL.po b/web_favicon/i18n/nl_NL.po index 3a665247463d..ab6f2852b946 100644 --- a/web_favicon/i18n/nl_NL.po +++ b/web_favicon/i18n/nl_NL.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_favicon -# +# # Translators: # Peter Hageman , 2017 msgid "" @@ -11,11 +11,12 @@ msgstr "" "POT-Creation-Date: 2017-07-01 03:34+0000\n" "PO-Revision-Date: 2017-07-01 03:34+0000\n" "Last-Translator: Peter Hageman , 2017\n" -"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_favicon @@ -30,12 +31,13 @@ msgstr "Favicon" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend -msgid "Favicon backend" -msgstr "" +#, fuzzy +msgid "Favicon Backend" +msgstr "Favicon" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend_mimetype -msgid "Favicon backend mimetype" +msgid "Favicon Backend Mimetype" msgstr "" #. module: web_favicon diff --git a/web_favicon/i18n/pt_BR.po b/web_favicon/i18n/pt_BR.po index cd2b55ab1c0b..516c3642c7b7 100644 --- a/web_favicon/i18n/pt_BR.po +++ b/web_favicon/i18n/pt_BR.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_favicon -# +# # Translators: # Rodrigo de Almeida Sottomaior Macedo , 2017 msgid "" @@ -10,12 +10,14 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-22 08:26+0000\n" "PO-Revision-Date: 2017-06-22 08:26+0000\n" -"Last-Translator: Rodrigo de Almeida Sottomaior Macedo , 2017\n" -"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" +"Last-Translator: Rodrigo de Almeida Sottomaior Macedo " +", 2017\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" +"teams/23907/pt_BR/)\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: web_favicon @@ -30,12 +32,14 @@ msgstr "Favicon" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend -msgid "Favicon backend" +#, fuzzy +msgid "Favicon Backend" msgstr "Favicon backend" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend_mimetype -msgid "Favicon backend mimetype" +#, fuzzy +msgid "Favicon Backend Mimetype" msgstr "Favicon backend mimetype" #. module: web_favicon diff --git a/web_favicon/i18n/web_favicon.pot b/web_favicon/i18n/web_favicon.pot new file mode 100644 index 000000000000..1e33747648a5 --- /dev/null +++ b/web_favicon/i18n/web_favicon.pot @@ -0,0 +1,60 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_favicon +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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: web_favicon +#: model:ir.model,name:web_favicon.model_res_company +msgid "Companies" +msgstr "" + +#. module: web_favicon +#: model:ir.ui.view,arch_db:web_favicon.view_company_form +msgid "Favicon" +msgstr "" + +#. module: web_favicon +#: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend +msgid "Favicon Backend" +msgstr "" + +#. module: web_favicon +#: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend_mimetype +msgid "Favicon Backend Mimetype" +msgstr "" + +#. module: web_favicon +#: model:ir.model.fields,help:web_favicon.field_res_company_favicon_backend_mimetype +msgid "Set the mimetype of your file." +msgstr "" + +#. module: web_favicon +#: model:ir.ui.view,arch_db:web_favicon.view_company_form +msgid "Web Favicon" +msgstr "" + +#. module: web_favicon +#: selection:res.company,favicon_backend_mimetype:0 +msgid "image/gif" +msgstr "" + +#. module: web_favicon +#: selection:res.company,favicon_backend_mimetype:0 +msgid "image/png" +msgstr "" + +#. module: web_favicon +#: selection:res.company,favicon_backend_mimetype:0 +msgid "image/x-icon" +msgstr "" + From b8cd3a4e2fc6f2b70f2315d52ebe53464aa88937 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:12 +0000 Subject: [PATCH 172/399] [UPD] Update web_group_expand.pot --- web_group_expand/i18n/web_group_expand.pot | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 web_group_expand/i18n/web_group_expand.pot diff --git a/web_group_expand/i18n/web_group_expand.pot b/web_group_expand/i18n/web_group_expand.pot new file mode 100644 index 000000000000..f4be9baa0b6b --- /dev/null +++ b/web_group_expand/i18n/web_group_expand.pot @@ -0,0 +1,29 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_group_expand +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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: web_group_expand +#. openerp-web +#: code:addons/web_group_expand/static/src/xml/web_group_expand.xml:5 +#, python-format +msgid "Expand" +msgstr "" + +#. module: web_group_expand +#. openerp-web +#: code:addons/web_group_expand/static/src/xml/web_group_expand.xml:7 +#, python-format +msgid "Shrink" +msgstr "" + From cb8798672d494ac11a12bca832410aee7448bc4c Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:12 +0000 Subject: [PATCH 173/399] [UPD] Update web_ir_actions_act_multi.pot --- .../i18n/web_ir_actions_act_multi.pot | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web_ir_actions_act_multi/i18n/web_ir_actions_act_multi.pot diff --git a/web_ir_actions_act_multi/i18n/web_ir_actions_act_multi.pot b/web_ir_actions_act_multi/i18n/web_ir_actions_act_multi.pot new file mode 100644 index 000000000000..447d3bb3ca4c --- /dev/null +++ b/web_ir_actions_act_multi/i18n/web_ir_actions_act_multi.pot @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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" + From 19e470d4701fd9bfd2f044f2aa19420f674430c9 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:12 +0000 Subject: [PATCH 174/399] [UPD] Update web_ir_actions_act_view_reload.pot --- .../i18n/web_ir_actions_act_view_reload.pot | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web_ir_actions_act_view_reload/i18n/web_ir_actions_act_view_reload.pot diff --git a/web_ir_actions_act_view_reload/i18n/web_ir_actions_act_view_reload.pot b/web_ir_actions_act_view_reload/i18n/web_ir_actions_act_view_reload.pot new file mode 100644 index 000000000000..447d3bb3ca4c --- /dev/null +++ b/web_ir_actions_act_view_reload/i18n/web_ir_actions_act_view_reload.pot @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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" + From d3a703d48e51c9bc90ea0dc6d646565294c3d2d6 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:13 +0000 Subject: [PATCH 175/399] [UPD] Update web_listview_range_select.pot --- .../i18n/web_listview_range_select.pot | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web_listview_range_select/i18n/web_listview_range_select.pot diff --git a/web_listview_range_select/i18n/web_listview_range_select.pot b/web_listview_range_select/i18n/web_listview_range_select.pot new file mode 100644 index 000000000000..447d3bb3ca4c --- /dev/null +++ b/web_listview_range_select/i18n/web_listview_range_select.pot @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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" + From 0f74f88feea6e7b38ad5a3e93de896e421e22f15 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:13 +0000 Subject: [PATCH 176/399] [UPD] Update web_m2x_options.pot --- web_m2x_options/i18n/ar.po | 47 ++++++++---- web_m2x_options/i18n/de.po | 46 +++++++---- web_m2x_options/i18n/es.po | 44 +++++++---- web_m2x_options/i18n/fi.po | 44 +++++++---- web_m2x_options/i18n/fr.po | 44 +++++++---- web_m2x_options/i18n/hr.po | 49 ++++++++---- web_m2x_options/i18n/it.po | 44 +++++++---- web_m2x_options/i18n/nl_NL.po | 47 ++++++++---- web_m2x_options/i18n/pt_BR.po | 52 ++++++++----- web_m2x_options/i18n/sl.po | 47 ++++++++---- web_m2x_options/i18n/tr.po | 44 +++++++---- web_m2x_options/i18n/web_m2x_options.pot | 97 ++++++++++++++++++++++++ 12 files changed, 442 insertions(+), 163 deletions(-) create mode 100644 web_m2x_options/i18n/web_m2x_options.pot diff --git a/web_m2x_options/i18n/ar.po b/web_m2x_options/i18n/ar.po index 6253ba90233d..af11fdcf2259 100644 --- a/web_m2x_options/i18n/ar.po +++ b/web_m2x_options/i18n/ar.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_m2x_options -# +# # Translators: # OCA Transbot , 2017 msgid "" @@ -12,74 +12,91 @@ msgstr "" "PO-Revision-Date: 2018-01-03 03:50+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: Arabic (https://www.transifex.com/oca/teams/23907/ar/)\n" +"Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: ar\n" -"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #. module: web_m2x_options #. openerp-web #: code:addons/web_m2x_options/static/src/xml/base.xml:8 #, python-format -msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:47 +#: code:addons/web_m2x_options/static/src/js/form.js:52 #, python-format msgid "Cancel" msgstr "إلغاء" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:33 +#: code:addons/web_m2x_options/static/src/js/form.js:31 #, python-format msgid "Create" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:232 -#: code:addons/web_m2x_options/static/src/js/form.js:382 +#: code:addons/web_m2x_options/static/src/js/form.js:241 #, python-format msgid "Create \"%s\"" msgstr "إنشاء \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:30 +#: code:addons/web_m2x_options/static/src/js/form.js:28 #, python-format msgid "Create a %s" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:250 -#: code:addons/web_m2x_options/static/src/js/form.js:401 +#: code:addons/web_m2x_options/static/src/js/form.js:261 #, python-format msgid "Create and Edit..." msgstr "إنشاء وتحرير ..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:43 +#: code:addons/web_m2x_options/static/src/js/form.js:42 #, python-format msgid "Create and edit" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:201 -#: code:addons/web_m2x_options/static/src/js/form.js:358 +#: code:addons/web_m2x_options/static/src/js/form.js:267 +#, python-format +msgid "No results to show..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:341 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:206 #, python-format msgid "Search More..." msgstr "البحث عن المزيد ..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:52 +#: code:addons/web_m2x_options/static/src/js/form.js:58 #, python-format msgid "You are creating a new %s, are you sure it does not exist yet?" msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "ir.config_parameter" +msgstr "" diff --git a/web_m2x_options/i18n/de.po b/web_m2x_options/i18n/de.po index da119936d9a9..8205b855d23d 100644 --- a/web_m2x_options/i18n/de.po +++ b/web_m2x_options/i18n/de.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_m2x_options -# +# # Translators: # OCA Transbot , 2017 # Rudolf Schnapka , 2018 @@ -13,76 +13,92 @@ msgstr "" "PO-Revision-Date: 2018-01-03 03:50+0000\n" "Last-Translator: Rudolf Schnapka , 2018\n" "Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_m2x_options #. openerp-web #: code:addons/web_m2x_options/static/src/xml/base.xml:8 -#, python-format -msgid "!(widget.options.no_open || widget.options.no_open_edit)" +#, fuzzy, python-format +msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" msgstr "!(widget.options.no_open || widget.options.no_open_edit)" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:47 +#: code:addons/web_m2x_options/static/src/js/form.js:52 #, python-format msgid "Cancel" msgstr "Abbrechen" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:33 +#: code:addons/web_m2x_options/static/src/js/form.js:31 #, python-format msgid "Create" msgstr "Anlegen" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:232 -#: code:addons/web_m2x_options/static/src/js/form.js:382 +#: code:addons/web_m2x_options/static/src/js/form.js:241 #, python-format msgid "Create \"%s\"" msgstr "Anlegen \"%s" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:30 +#: code:addons/web_m2x_options/static/src/js/form.js:28 #, python-format msgid "Create a %s" msgstr "Eine %s anlegen" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:250 -#: code:addons/web_m2x_options/static/src/js/form.js:401 +#: code:addons/web_m2x_options/static/src/js/form.js:261 #, python-format msgid "Create and Edit..." msgstr "Anlegen und Bearbeiten" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:43 +#: code:addons/web_m2x_options/static/src/js/form.js:42 #, python-format msgid "Create and edit" msgstr "Anlegen und bearbeiten" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:201 -#: code:addons/web_m2x_options/static/src/js/form.js:358 +#: code:addons/web_m2x_options/static/src/js/form.js:267 +#, python-format +msgid "No results to show..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:341 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:206 #, python-format msgid "Search More..." msgstr "Suche weitere..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:52 +#: code:addons/web_m2x_options/static/src/js/form.js:58 #, python-format msgid "You are creating a new %s, are you sure it does not exist yet?" msgstr "" "Sie legen eine neue %s an, sind Sie sicher, dass diese nicht bereits " "vorhanden ist?" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "ir.config_parameter" +msgstr "" diff --git a/web_m2x_options/i18n/es.po b/web_m2x_options/i18n/es.po index 0c2c9feb215b..ed1e6da8f047 100644 --- a/web_m2x_options/i18n/es.po +++ b/web_m2x_options/i18n/es.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_m2x_options -# +# # Translators: # OCA Transbot , 2017 msgid "" @@ -12,74 +12,90 @@ msgstr "" "PO-Revision-Date: 2018-01-03 03:50+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_m2x_options #. openerp-web #: code:addons/web_m2x_options/static/src/xml/base.xml:8 #, python-format -msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:47 +#: code:addons/web_m2x_options/static/src/js/form.js:52 #, python-format msgid "Cancel" msgstr "Cancelar" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:33 +#: code:addons/web_m2x_options/static/src/js/form.js:31 #, python-format msgid "Create" msgstr "Crear" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:232 -#: code:addons/web_m2x_options/static/src/js/form.js:382 +#: code:addons/web_m2x_options/static/src/js/form.js:241 #, python-format msgid "Create \"%s\"" msgstr "Crear \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:30 +#: code:addons/web_m2x_options/static/src/js/form.js:28 #, python-format msgid "Create a %s" msgstr "Crear un %s" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:250 -#: code:addons/web_m2x_options/static/src/js/form.js:401 +#: code:addons/web_m2x_options/static/src/js/form.js:261 #, python-format msgid "Create and Edit..." msgstr "Crear y editar..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:43 +#: code:addons/web_m2x_options/static/src/js/form.js:42 #, python-format msgid "Create and edit" msgstr "Crear y editar" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:201 -#: code:addons/web_m2x_options/static/src/js/form.js:358 +#: code:addons/web_m2x_options/static/src/js/form.js:267 +#, python-format +msgid "No results to show..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:341 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:206 #, python-format msgid "Search More..." msgstr "Buscar más..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:52 +#: code:addons/web_m2x_options/static/src/js/form.js:58 #, python-format msgid "You are creating a new %s, are you sure it does not exist yet?" msgstr "Está creando un nuevo %s, ¿está seguro de no existe ya?" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "ir.config_parameter" +msgstr "" diff --git a/web_m2x_options/i18n/fi.po b/web_m2x_options/i18n/fi.po index 0d5a5c6cc520..6dbcfd4ff364 100644 --- a/web_m2x_options/i18n/fi.po +++ b/web_m2x_options/i18n/fi.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_m2x_options -# +# # Translators: # OCA Transbot , 2017 msgid "" @@ -12,74 +12,90 @@ msgstr "" "PO-Revision-Date: 2018-01-03 03:50+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: Finnish (https://www.transifex.com/oca/teams/23907/fi/)\n" +"Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: fi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_m2x_options #. openerp-web #: code:addons/web_m2x_options/static/src/xml/base.xml:8 #, python-format -msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:47 +#: code:addons/web_m2x_options/static/src/js/form.js:52 #, python-format msgid "Cancel" msgstr "Peru" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:33 +#: code:addons/web_m2x_options/static/src/js/form.js:31 #, python-format msgid "Create" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:232 -#: code:addons/web_m2x_options/static/src/js/form.js:382 +#: code:addons/web_m2x_options/static/src/js/form.js:241 #, python-format msgid "Create \"%s\"" msgstr "Luo \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:30 +#: code:addons/web_m2x_options/static/src/js/form.js:28 #, python-format msgid "Create a %s" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:250 -#: code:addons/web_m2x_options/static/src/js/form.js:401 +#: code:addons/web_m2x_options/static/src/js/form.js:261 #, python-format msgid "Create and Edit..." msgstr "Luo ja muokkaa..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:43 +#: code:addons/web_m2x_options/static/src/js/form.js:42 #, python-format msgid "Create and edit" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:201 -#: code:addons/web_m2x_options/static/src/js/form.js:358 +#: code:addons/web_m2x_options/static/src/js/form.js:267 +#, python-format +msgid "No results to show..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:341 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:206 #, python-format msgid "Search More..." msgstr "Hae lisää..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:52 +#: code:addons/web_m2x_options/static/src/js/form.js:58 #, python-format msgid "You are creating a new %s, are you sure it does not exist yet?" msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "ir.config_parameter" +msgstr "" diff --git a/web_m2x_options/i18n/fr.po b/web_m2x_options/i18n/fr.po index 31647daf9534..9e004322dfda 100644 --- a/web_m2x_options/i18n/fr.po +++ b/web_m2x_options/i18n/fr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_m2x_options -# +# # Translators: # OCA Transbot , 2017 msgid "" @@ -12,74 +12,90 @@ msgstr "" "PO-Revision-Date: 2018-01-03 03:50+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: web_m2x_options #. openerp-web #: code:addons/web_m2x_options/static/src/xml/base.xml:8 #, python-format -msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:47 +#: code:addons/web_m2x_options/static/src/js/form.js:52 #, python-format msgid "Cancel" msgstr "Annuler" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:33 +#: code:addons/web_m2x_options/static/src/js/form.js:31 #, python-format msgid "Create" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:232 -#: code:addons/web_m2x_options/static/src/js/form.js:382 +#: code:addons/web_m2x_options/static/src/js/form.js:241 #, python-format msgid "Create \"%s\"" msgstr "Creer \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:30 +#: code:addons/web_m2x_options/static/src/js/form.js:28 #, python-format msgid "Create a %s" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:250 -#: code:addons/web_m2x_options/static/src/js/form.js:401 +#: code:addons/web_m2x_options/static/src/js/form.js:261 #, python-format msgid "Create and Edit..." msgstr "Créer et modifier..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:43 +#: code:addons/web_m2x_options/static/src/js/form.js:42 #, python-format msgid "Create and edit" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:201 -#: code:addons/web_m2x_options/static/src/js/form.js:358 +#: code:addons/web_m2x_options/static/src/js/form.js:267 +#, python-format +msgid "No results to show..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:341 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:206 #, python-format msgid "Search More..." msgstr "Rechercher plus..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:52 +#: code:addons/web_m2x_options/static/src/js/form.js:58 #, python-format msgid "You are creating a new %s, are you sure it does not exist yet?" msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "ir.config_parameter" +msgstr "" diff --git a/web_m2x_options/i18n/hr.po b/web_m2x_options/i18n/hr.po index 644c0b4ba912..bbc49744a135 100644 --- a/web_m2x_options/i18n/hr.po +++ b/web_m2x_options/i18n/hr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_m2x_options -# +# # Translators: # Bole , 2017 # OCA Transbot , 2017 @@ -13,74 +13,91 @@ msgstr "" "PO-Revision-Date: 2018-01-03 03:50+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: hr\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #. module: web_m2x_options #. openerp-web #: code:addons/web_m2x_options/static/src/xml/base.xml:8 -#, python-format -msgid "!(widget.options.no_open || widget.options.no_open_edit)" +#, fuzzy, python-format +msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" msgstr "!(opcije isključuju otvaranje ili uređivanje)" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:47 +#: code:addons/web_m2x_options/static/src/js/form.js:52 #, python-format msgid "Cancel" msgstr "Otkaži" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:33 +#: code:addons/web_m2x_options/static/src/js/form.js:31 #, python-format msgid "Create" msgstr "Kreiraj" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:232 -#: code:addons/web_m2x_options/static/src/js/form.js:382 +#: code:addons/web_m2x_options/static/src/js/form.js:241 #, python-format msgid "Create \"%s\"" msgstr "Kreiraj \" %s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:30 +#: code:addons/web_m2x_options/static/src/js/form.js:28 #, python-format msgid "Create a %s" msgstr "Kreiraj %s" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:250 -#: code:addons/web_m2x_options/static/src/js/form.js:401 +#: code:addons/web_m2x_options/static/src/js/form.js:261 #, python-format msgid "Create and Edit..." msgstr "Kreiraj i uredi..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:43 +#: code:addons/web_m2x_options/static/src/js/form.js:42 #, python-format msgid "Create and edit" msgstr "Kreiraj i uredi" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:201 -#: code:addons/web_m2x_options/static/src/js/form.js:358 +#: code:addons/web_m2x_options/static/src/js/form.js:267 +#, python-format +msgid "No results to show..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:341 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:206 #, python-format msgid "Search More..." msgstr "Traži dalje..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:52 +#: code:addons/web_m2x_options/static/src/js/form.js:58 #, python-format msgid "You are creating a new %s, are you sure it does not exist yet?" msgstr "Želite kreirati novi %s, jeste li sigurni da već ne postoji?" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "ir.config_parameter" +msgstr "" diff --git a/web_m2x_options/i18n/it.po b/web_m2x_options/i18n/it.po index 47e767833181..68f5c22c099d 100644 --- a/web_m2x_options/i18n/it.po +++ b/web_m2x_options/i18n/it.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_m2x_options -# +# # Translators: # OCA Transbot , 2017 msgid "" @@ -12,74 +12,90 @@ msgstr "" "PO-Revision-Date: 2018-01-03 03:50+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_m2x_options #. openerp-web #: code:addons/web_m2x_options/static/src/xml/base.xml:8 #, python-format -msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:47 +#: code:addons/web_m2x_options/static/src/js/form.js:52 #, python-format msgid "Cancel" msgstr "Annulla" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:33 +#: code:addons/web_m2x_options/static/src/js/form.js:31 #, python-format msgid "Create" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:232 -#: code:addons/web_m2x_options/static/src/js/form.js:382 +#: code:addons/web_m2x_options/static/src/js/form.js:241 #, python-format msgid "Create \"%s\"" msgstr "Crea \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:30 +#: code:addons/web_m2x_options/static/src/js/form.js:28 #, python-format msgid "Create a %s" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:250 -#: code:addons/web_m2x_options/static/src/js/form.js:401 +#: code:addons/web_m2x_options/static/src/js/form.js:261 #, python-format msgid "Create and Edit..." msgstr "Crea e Modifica..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:43 +#: code:addons/web_m2x_options/static/src/js/form.js:42 #, python-format msgid "Create and edit" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:201 -#: code:addons/web_m2x_options/static/src/js/form.js:358 +#: code:addons/web_m2x_options/static/src/js/form.js:267 +#, python-format +msgid "No results to show..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:341 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:206 #, python-format msgid "Search More..." msgstr "Cerca altro..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:52 +#: code:addons/web_m2x_options/static/src/js/form.js:58 #, python-format msgid "You are creating a new %s, are you sure it does not exist yet?" msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "ir.config_parameter" +msgstr "" diff --git a/web_m2x_options/i18n/nl_NL.po b/web_m2x_options/i18n/nl_NL.po index 1f7da2402d17..112fcc408b04 100644 --- a/web_m2x_options/i18n/nl_NL.po +++ b/web_m2x_options/i18n/nl_NL.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_m2x_options -# +# # Translators: # Peter Hageman , 2017 msgid "" @@ -11,75 +11,92 @@ msgstr "" "POT-Creation-Date: 2017-07-01 03:35+0000\n" "PO-Revision-Date: 2017-07-01 03:35+0000\n" "Last-Translator: Peter Hageman , 2017\n" -"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_m2x_options #. openerp-web #: code:addons/web_m2x_options/static/src/xml/base.xml:8 #, python-format -msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:47 +#: code:addons/web_m2x_options/static/src/js/form.js:52 #, python-format msgid "Cancel" msgstr "Annuleer" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:33 +#: code:addons/web_m2x_options/static/src/js/form.js:31 #, python-format msgid "Create" msgstr "Aanmaken" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:224 -#: code:addons/web_m2x_options/static/src/js/form.js:374 +#: code:addons/web_m2x_options/static/src/js/form.js:241 #, python-format msgid "Create \"%s\"" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:30 +#: code:addons/web_m2x_options/static/src/js/form.js:28 #, python-format msgid "Create a %s" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:242 -#: code:addons/web_m2x_options/static/src/js/form.js:393 +#: code:addons/web_m2x_options/static/src/js/form.js:261 #, python-format msgid "Create and Edit..." msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:43 +#: code:addons/web_m2x_options/static/src/js/form.js:42 #, python-format msgid "Create and edit" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:193 -#: code:addons/web_m2x_options/static/src/js/form.js:350 +#: code:addons/web_m2x_options/static/src/js/form.js:267 +#, python-format +msgid "No results to show..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:341 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:206 #, python-format msgid "Search More..." msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:52 +#: code:addons/web_m2x_options/static/src/js/form.js:58 #, python-format msgid "You are creating a new %s, are you sure it does not exist yet?" msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "ir.config_parameter" +msgstr "" diff --git a/web_m2x_options/i18n/pt_BR.po b/web_m2x_options/i18n/pt_BR.po index 538bfc7e7930..a36dba9b1a35 100644 --- a/web_m2x_options/i18n/pt_BR.po +++ b/web_m2x_options/i18n/pt_BR.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_m2x_options -# +# # Translators: # OCA Transbot , 2017 # Rodrigo de Almeida Sottomaior Macedo , 2017 @@ -11,77 +11,95 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-01-03 03:50+0000\n" "PO-Revision-Date: 2018-01-03 03:50+0000\n" -"Last-Translator: Rodrigo de Almeida Sottomaior Macedo , 2017\n" -"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" +"Last-Translator: Rodrigo de Almeida Sottomaior Macedo " +", 2017\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" +"teams/23907/pt_BR/)\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: web_m2x_options #. openerp-web #: code:addons/web_m2x_options/static/src/xml/base.xml:8 -#, python-format -msgid "!(widget.options.no_open || widget.options.no_open_edit)" +#, fuzzy, python-format +msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" msgstr "!(widget.options.no_open || widget.options.no_open_edit)" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:47 +#: code:addons/web_m2x_options/static/src/js/form.js:52 #, python-format msgid "Cancel" msgstr "Cancelar" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:33 +#: code:addons/web_m2x_options/static/src/js/form.js:31 #, python-format msgid "Create" msgstr "Criar" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:232 -#: code:addons/web_m2x_options/static/src/js/form.js:382 +#: code:addons/web_m2x_options/static/src/js/form.js:241 #, python-format msgid "Create \"%s\"" msgstr "Criar \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:30 +#: code:addons/web_m2x_options/static/src/js/form.js:28 #, python-format msgid "Create a %s" msgstr "Criar um %s" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:250 -#: code:addons/web_m2x_options/static/src/js/form.js:401 +#: code:addons/web_m2x_options/static/src/js/form.js:261 #, python-format msgid "Create and Edit..." msgstr "Criar e editar.." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:43 +#: code:addons/web_m2x_options/static/src/js/form.js:42 #, python-format msgid "Create and edit" msgstr "Criar e editar" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:201 -#: code:addons/web_m2x_options/static/src/js/form.js:358 +#: code:addons/web_m2x_options/static/src/js/form.js:267 +#, python-format +msgid "No results to show..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:341 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:206 #, python-format msgid "Search More..." msgstr "Buscar mais..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:52 +#: code:addons/web_m2x_options/static/src/js/form.js:58 #, python-format msgid "You are creating a new %s, are you sure it does not exist yet?" msgstr "" "Você está criando um novo %s, você tem certeza de que ainda não existe?" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "ir.config_parameter" +msgstr "" diff --git a/web_m2x_options/i18n/sl.po b/web_m2x_options/i18n/sl.po index a4e3ae1f3184..6aa7a7e2eaa5 100644 --- a/web_m2x_options/i18n/sl.po +++ b/web_m2x_options/i18n/sl.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_m2x_options -# +# # Translators: # OCA Transbot , 2017 msgid "" @@ -12,74 +12,91 @@ msgstr "" "PO-Revision-Date: 2018-01-03 03:50+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" +"Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: sl\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" #. module: web_m2x_options #. openerp-web #: code:addons/web_m2x_options/static/src/xml/base.xml:8 #, python-format -msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:47 +#: code:addons/web_m2x_options/static/src/js/form.js:52 #, python-format msgid "Cancel" msgstr "Preklic" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:33 +#: code:addons/web_m2x_options/static/src/js/form.js:31 #, python-format msgid "Create" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:232 -#: code:addons/web_m2x_options/static/src/js/form.js:382 +#: code:addons/web_m2x_options/static/src/js/form.js:241 #, python-format msgid "Create \"%s\"" msgstr "Ustvari \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:30 +#: code:addons/web_m2x_options/static/src/js/form.js:28 #, python-format msgid "Create a %s" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:250 -#: code:addons/web_m2x_options/static/src/js/form.js:401 +#: code:addons/web_m2x_options/static/src/js/form.js:261 #, python-format msgid "Create and Edit..." msgstr "Ustvari in urejaj..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:43 +#: code:addons/web_m2x_options/static/src/js/form.js:42 #, python-format msgid "Create and edit" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:201 -#: code:addons/web_m2x_options/static/src/js/form.js:358 +#: code:addons/web_m2x_options/static/src/js/form.js:267 +#, python-format +msgid "No results to show..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:341 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:206 #, python-format msgid "Search More..." msgstr "Poišči več..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:52 +#: code:addons/web_m2x_options/static/src/js/form.js:58 #, python-format msgid "You are creating a new %s, are you sure it does not exist yet?" msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "ir.config_parameter" +msgstr "" diff --git a/web_m2x_options/i18n/tr.po b/web_m2x_options/i18n/tr.po index 584219f2c764..527dc0872a86 100644 --- a/web_m2x_options/i18n/tr.po +++ b/web_m2x_options/i18n/tr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_m2x_options -# +# # Translators: # OCA Transbot , 2017 msgid "" @@ -12,74 +12,90 @@ msgstr "" "PO-Revision-Date: 2018-01-03 03:50+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n" +"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: web_m2x_options #. openerp-web #: code:addons/web_m2x_options/static/src/xml/base.xml:8 #, python-format -msgid "!(widget.options.no_open || widget.options.no_open_edit)" +msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:47 +#: code:addons/web_m2x_options/static/src/js/form.js:52 #, python-format msgid "Cancel" msgstr "İptal" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:33 +#: code:addons/web_m2x_options/static/src/js/form.js:31 #, python-format msgid "Create" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:232 -#: code:addons/web_m2x_options/static/src/js/form.js:382 +#: code:addons/web_m2x_options/static/src/js/form.js:241 #, python-format msgid "Create \"%s\"" msgstr "Oluştur \"%s\"" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:30 +#: code:addons/web_m2x_options/static/src/js/form.js:28 #, python-format msgid "Create a %s" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:250 -#: code:addons/web_m2x_options/static/src/js/form.js:401 +#: code:addons/web_m2x_options/static/src/js/form.js:261 #, python-format msgid "Create and Edit..." msgstr "Oluştur ve düzenle..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:43 +#: code:addons/web_m2x_options/static/src/js/form.js:42 #, python-format msgid "Create and edit" msgstr "" #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:201 -#: code:addons/web_m2x_options/static/src/js/form.js:358 +#: code:addons/web_m2x_options/static/src/js/form.js:267 +#, python-format +msgid "No results to show..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:341 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:206 #, python-format msgid "Search More..." msgstr "Daha Fazla..." #. module: web_m2x_options #. openerp-web -#: code:addons/web_m2x_options/static/src/js/form.js:52 +#: code:addons/web_m2x_options/static/src/js/form.js:58 #, python-format msgid "You are creating a new %s, are you sure it does not exist yet?" msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "ir.config_parameter" +msgstr "" diff --git a/web_m2x_options/i18n/web_m2x_options.pot b/web_m2x_options/i18n/web_m2x_options.pot new file mode 100644 index 000000000000..b0c854c0080f --- /dev/null +++ b/web_m2x_options/i18n/web_m2x_options.pot @@ -0,0 +1,97 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_m2x_options +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/xml/base.xml:8 +#, python-format +msgid "!(widget.nodeOptions.no_open || widget.nodeOptions.no_open_edit)" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:52 +#, python-format +msgid "Cancel" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:31 +#, python-format +msgid "Create" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:241 +#, python-format +msgid "Create \"%s\"" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:28 +#, python-format +msgid "Create a %s" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:261 +#, python-format +msgid "Create and Edit..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:42 +#, python-format +msgid "Create and edit" +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:267 +#, python-format +msgid "No results to show..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:341 +#, python-format +msgid "Open: " +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:206 +#, python-format +msgid "Search More..." +msgstr "" + +#. module: web_m2x_options +#. openerp-web +#: code:addons/web_m2x_options/static/src/js/form.js:58 +#, python-format +msgid "You are creating a new %s, are you sure it does not exist yet?" +msgstr "" + +#. module: web_m2x_options +#: model:ir.model,name:web_m2x_options.model_ir_config_parameter +msgid "ir.config_parameter" +msgstr "" + From a5d97c308e6fb1c0b9be9cca03b69435e76116f3 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:13 +0000 Subject: [PATCH 177/399] [UPD] Update web_no_bubble.pot --- web_no_bubble/i18n/web_no_bubble.pot | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web_no_bubble/i18n/web_no_bubble.pot diff --git a/web_no_bubble/i18n/web_no_bubble.pot b/web_no_bubble/i18n/web_no_bubble.pot new file mode 100644 index 000000000000..447d3bb3ca4c --- /dev/null +++ b/web_no_bubble/i18n/web_no_bubble.pot @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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" + From 0b2089bb21e496f465e24ab2e801d57e6d0af251 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:14 +0000 Subject: [PATCH 178/399] [UPD] Update web_notify.pot --- web_notify/i18n/de.po | 14 +++++++----- web_notify/i18n/es.po | 14 +++++++----- web_notify/i18n/hr.po | 17 ++++++++------ web_notify/i18n/nl_NL.po | 15 ++++++------ web_notify/i18n/pt_BR.po | 20 +++++++++------- web_notify/i18n/web_notify.pot | 42 ++++++++++++++++++++++++++++++++++ 6 files changed, 88 insertions(+), 34 deletions(-) create mode 100644 web_notify/i18n/web_notify.pot diff --git a/web_notify/i18n/de.po b/web_notify/i18n/de.po index bb2bbe5870cb..4cbcc877169b 100644 --- a/web_notify/i18n/de.po +++ b/web_notify/i18n/de.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_notify -# +# # Translators: # Niki Waibel , 2017 msgid "" @@ -12,26 +12,28 @@ msgstr "" "PO-Revision-Date: 2017-02-03 01:37+0000\n" "Last-Translator: Niki Waibel , 2017\n" "Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_notify -#: code:addons/web_notify/models/res_users.py:27 +#: code:addons/web_notify/models/res_users.py:26 #, python-format msgid "Information" msgstr "Information" #. module: web_notify #: model:ir.model.fields,field_description:web_notify.field_res_users_notify_info_channel_name -msgid "Notify info channel name" +#, fuzzy +msgid "Notify Info Channel Name" msgstr "Name des Informationen-Kanals" #. module: web_notify #: model:ir.model.fields,field_description:web_notify.field_res_users_notify_warning_channel_name -msgid "Notify warning channel name" +#, fuzzy +msgid "Notify Warning Channel Name" msgstr "Name des Warnungen-Kanals" #. module: web_notify @@ -40,7 +42,7 @@ msgid "Users" msgstr "Benutzer" #. module: web_notify -#: code:addons/web_notify/models/res_users.py:33 +#: code:addons/web_notify/models/res_users.py:32 #, python-format msgid "Warning" msgstr "Warnung" diff --git a/web_notify/i18n/es.po b/web_notify/i18n/es.po index 6b7649c427f9..0775ce561e7a 100644 --- a/web_notify/i18n/es.po +++ b/web_notify/i18n/es.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_notify -# +# # Translators: # Pedro M. Baeza , 2016 msgid "" @@ -12,26 +12,28 @@ msgstr "" "PO-Revision-Date: 2016-12-23 02:13+0000\n" "Last-Translator: Pedro M. Baeza , 2016\n" "Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_notify -#: code:addons/web_notify/models/res_users.py:27 +#: code:addons/web_notify/models/res_users.py:26 #, python-format msgid "Information" msgstr "Información" #. module: web_notify #: model:ir.model.fields,field_description:web_notify.field_res_users_notify_info_channel_name -msgid "Notify info channel name" +#, fuzzy +msgid "Notify Info Channel Name" msgstr "Nombre del canal de información notificada" #. module: web_notify #: model:ir.model.fields,field_description:web_notify.field_res_users_notify_warning_channel_name -msgid "Notify warning channel name" +#, fuzzy +msgid "Notify Warning Channel Name" msgstr "Nombre del canal de avisos notificados" #. module: web_notify @@ -40,7 +42,7 @@ msgid "Users" msgstr "Usuarios" #. module: web_notify -#: code:addons/web_notify/models/res_users.py:33 +#: code:addons/web_notify/models/res_users.py:32 #, python-format msgid "Warning" msgstr "Aviso" diff --git a/web_notify/i18n/hr.po b/web_notify/i18n/hr.po index a67571f6804c..036b555055f5 100644 --- a/web_notify/i18n/hr.po +++ b/web_notify/i18n/hr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_notify -# +# # Translators: # Bole , 2017 msgid "" @@ -12,26 +12,29 @@ msgstr "" "PO-Revision-Date: 2017-04-28 18:03+0000\n" "Last-Translator: Bole , 2017\n" "Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: hr\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #. module: web_notify -#: code:addons/web_notify/models/res_users.py:27 +#: code:addons/web_notify/models/res_users.py:26 #, python-format msgid "Information" msgstr "Informacija" #. module: web_notify #: model:ir.model.fields,field_description:web_notify.field_res_users_notify_info_channel_name -msgid "Notify info channel name" +#, fuzzy +msgid "Notify Info Channel Name" msgstr "Naziv kanala informacija" #. module: web_notify #: model:ir.model.fields,field_description:web_notify.field_res_users_notify_warning_channel_name -msgid "Notify warning channel name" +#, fuzzy +msgid "Notify Warning Channel Name" msgstr "Naziv kanala upozorenja" #. module: web_notify @@ -40,7 +43,7 @@ msgid "Users" msgstr "Korisnici" #. module: web_notify -#: code:addons/web_notify/models/res_users.py:33 +#: code:addons/web_notify/models/res_users.py:32 #, python-format msgid "Warning" msgstr "Upozorenje" diff --git a/web_notify/i18n/nl_NL.po b/web_notify/i18n/nl_NL.po index 8071f2ad9f89..289ed1db5f31 100644 --- a/web_notify/i18n/nl_NL.po +++ b/web_notify/i18n/nl_NL.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_notify -# +# # Translators: # Peter Hageman , 2017 msgid "" @@ -11,27 +11,28 @@ msgstr "" "POT-Creation-Date: 2017-07-13 16:07+0000\n" "PO-Revision-Date: 2017-07-13 16:07+0000\n" "Last-Translator: Peter Hageman , 2017\n" -"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_notify -#: code:addons/web_notify/models/res_users.py:27 +#: code:addons/web_notify/models/res_users.py:26 #, python-format msgid "Information" msgstr "Informatie" #. module: web_notify #: model:ir.model.fields,field_description:web_notify.field_res_users_notify_info_channel_name -msgid "Notify info channel name" +msgid "Notify Info Channel Name" msgstr "" #. module: web_notify #: model:ir.model.fields,field_description:web_notify.field_res_users_notify_warning_channel_name -msgid "Notify warning channel name" +msgid "Notify Warning Channel Name" msgstr "" #. module: web_notify @@ -40,7 +41,7 @@ msgid "Users" msgstr "Gebruikers" #. module: web_notify -#: code:addons/web_notify/models/res_users.py:33 +#: code:addons/web_notify/models/res_users.py:32 #, python-format msgid "Warning" msgstr "Waarschuwing" diff --git a/web_notify/i18n/pt_BR.po b/web_notify/i18n/pt_BR.po index acaa21b664b6..fec1d0b87411 100644 --- a/web_notify/i18n/pt_BR.po +++ b/web_notify/i18n/pt_BR.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_notify -# +# # Translators: # Rodrigo de Almeida Sottomaior Macedo , 2017 msgid "" @@ -10,28 +10,32 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-22 08:27+0000\n" "PO-Revision-Date: 2017-06-22 08:27+0000\n" -"Last-Translator: Rodrigo de Almeida Sottomaior Macedo , 2017\n" -"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" +"Last-Translator: Rodrigo de Almeida Sottomaior Macedo " +", 2017\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" +"teams/23907/pt_BR/)\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: web_notify -#: code:addons/web_notify/models/res_users.py:27 +#: code:addons/web_notify/models/res_users.py:26 #, python-format msgid "Information" msgstr "Informação" #. module: web_notify #: model:ir.model.fields,field_description:web_notify.field_res_users_notify_info_channel_name -msgid "Notify info channel name" +#, fuzzy +msgid "Notify Info Channel Name" msgstr "Notificar o nome do canal de informações" #. module: web_notify #: model:ir.model.fields,field_description:web_notify.field_res_users_notify_warning_channel_name -msgid "Notify warning channel name" +#, fuzzy +msgid "Notify Warning Channel Name" msgstr "Notificar o nome do canal de alerta" #. module: web_notify @@ -40,7 +44,7 @@ msgid "Users" msgstr "Usuários" #. module: web_notify -#: code:addons/web_notify/models/res_users.py:33 +#: code:addons/web_notify/models/res_users.py:32 #, python-format msgid "Warning" msgstr "Alerta" diff --git a/web_notify/i18n/web_notify.pot b/web_notify/i18n/web_notify.pot new file mode 100644 index 000000000000..74aa96a9e84b --- /dev/null +++ b/web_notify/i18n/web_notify.pot @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_notify +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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: web_notify +#: code:addons/web_notify/models/res_users.py:26 +#, python-format +msgid "Information" +msgstr "" + +#. module: web_notify +#: model:ir.model.fields,field_description:web_notify.field_res_users_notify_info_channel_name +msgid "Notify Info Channel Name" +msgstr "" + +#. module: web_notify +#: model:ir.model.fields,field_description:web_notify.field_res_users_notify_warning_channel_name +msgid "Notify Warning Channel Name" +msgstr "" + +#. module: web_notify +#: model:ir.model,name:web_notify.model_res_users +msgid "Users" +msgstr "" + +#. module: web_notify +#: code:addons/web_notify/models/res_users.py:32 +#, python-format +msgid "Warning" +msgstr "" + From 76944b9ed5aa4a359cc5f3bc1f51105941273fb9 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:14 +0000 Subject: [PATCH 179/399] [UPD] Update web_responsive.pot --- web_responsive/i18n/de.po | 29 ++++++++++++- web_responsive/i18n/es.po | 32 ++++++++++++-- web_responsive/i18n/hr.po | 32 ++++++++++++-- web_responsive/i18n/pt_BR.po | 35 +++++++++++++-- web_responsive/i18n/web_responsive.pot | 60 ++++++++++++++++++++++++++ 5 files changed, 176 insertions(+), 12 deletions(-) create mode 100644 web_responsive/i18n/web_responsive.pot diff --git a/web_responsive/i18n/de.po b/web_responsive/i18n/de.po index 23bbe982925a..87902de2965a 100644 --- a/web_responsive/i18n/de.po +++ b/web_responsive/i18n/de.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_responsive -# +# # Translators: # Niki Waibel , 2017 msgid "" @@ -12,10 +12,10 @@ msgstr "" "PO-Revision-Date: 2017-02-03 01:37+0000\n" "Last-Translator: Niki Waibel , 2017\n" "Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_responsive @@ -33,7 +33,32 @@ msgstr "Navigation umschalten" msgid "Apps" msgstr "Apps" +#. module: web_responsive +#: model:ir.model.fields,field_description:web_responsive.field_res_users_chatter_position +msgid "Chatter Position" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_ir_http +msgid "HTTP routing" +msgstr "" + #. module: web_responsive #: model:ir.ui.view,arch_db:web_responsive.menu msgid "More " msgstr "Mehr " + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Normal" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Sided" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_res_users +msgid "Users" +msgstr "" diff --git a/web_responsive/i18n/es.po b/web_responsive/i18n/es.po index bab088e80733..fb7ee65ae38f 100644 --- a/web_responsive/i18n/es.po +++ b/web_responsive/i18n/es.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_responsive -# +# # Translators: # Pedro M. Baeza , 2016 msgid "" @@ -12,16 +12,17 @@ msgstr "" "PO-Revision-Date: 2016-12-23 02:13+0000\n" "Last-Translator: Pedro M. Baeza , 2016\n" "Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_responsive #: model:ir.ui.view,arch_db:web_responsive.webclient_bootstrap msgid "Toggle App Drawer" -msgstr "Mostrar/ocultar selector de aplicaciones" +msgstr "" +"Mostrar/ocultar selector de aplicaciones" #. module: web_responsive #: model:ir.ui.view,arch_db:web_responsive.webclient_bootstrap @@ -33,7 +34,32 @@ msgstr "Mostrar/Ocultar navegación" msgid "Apps" msgstr "Aplicaciones" +#. module: web_responsive +#: model:ir.model.fields,field_description:web_responsive.field_res_users_chatter_position +msgid "Chatter Position" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_ir_http +msgid "HTTP routing" +msgstr "" + #. module: web_responsive #: model:ir.ui.view,arch_db:web_responsive.menu msgid "More " msgstr "Más " + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Normal" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Sided" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_res_users +msgid "Users" +msgstr "" diff --git a/web_responsive/i18n/hr.po b/web_responsive/i18n/hr.po index 2037c508926b..584e40bcbc14 100644 --- a/web_responsive/i18n/hr.po +++ b/web_responsive/i18n/hr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_responsive -# +# # Translators: # Bole , 2017 msgid "" @@ -12,11 +12,12 @@ msgstr "" "PO-Revision-Date: 2017-04-28 18:03+0000\n" "Last-Translator: Bole , 2017\n" "Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: hr\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #. module: web_responsive #: model:ir.ui.view,arch_db:web_responsive.webclient_bootstrap @@ -33,7 +34,32 @@ msgstr "Izmjeni navigaciju" msgid "Apps" msgstr "Apikacije" +#. module: web_responsive +#: model:ir.model.fields,field_description:web_responsive.field_res_users_chatter_position +msgid "Chatter Position" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_ir_http +msgid "HTTP routing" +msgstr "" + #. module: web_responsive #: model:ir.ui.view,arch_db:web_responsive.menu msgid "More " msgstr "Više " + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Normal" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Sided" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_res_users +msgid "Users" +msgstr "" diff --git a/web_responsive/i18n/pt_BR.po b/web_responsive/i18n/pt_BR.po index d17da9a46977..3b8f3f2cf582 100644 --- a/web_responsive/i18n/pt_BR.po +++ b/web_responsive/i18n/pt_BR.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_responsive -# +# # Translators: # Rodrigo de Almeida Sottomaior Macedo , 2017 msgid "" @@ -10,12 +10,14 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-22 08:27+0000\n" "PO-Revision-Date: 2017-06-22 08:27+0000\n" -"Last-Translator: Rodrigo de Almeida Sottomaior Macedo , 2017\n" -"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" +"Last-Translator: Rodrigo de Almeida Sottomaior Macedo " +", 2017\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" +"teams/23907/pt_BR/)\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: web_responsive @@ -33,7 +35,32 @@ msgstr "Navegação Alternativa" msgid "Apps" msgstr "Aplicativos" +#. module: web_responsive +#: model:ir.model.fields,field_description:web_responsive.field_res_users_chatter_position +msgid "Chatter Position" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_ir_http +msgid "HTTP routing" +msgstr "" + #. module: web_responsive #: model:ir.ui.view,arch_db:web_responsive.menu msgid "More " msgstr "Mais " + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Normal" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Sided" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_res_users +msgid "Users" +msgstr "" diff --git a/web_responsive/i18n/web_responsive.pot b/web_responsive/i18n/web_responsive.pot new file mode 100644 index 000000000000..744498855d34 --- /dev/null +++ b/web_responsive/i18n/web_responsive.pot @@ -0,0 +1,60 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_responsive +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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: web_responsive +#: model:ir.ui.view,arch_db:web_responsive.webclient_bootstrap +msgid "Toggle App Drawer" +msgstr "" + +#. module: web_responsive +#: model:ir.ui.view,arch_db:web_responsive.webclient_bootstrap +msgid "Toggle Navigation" +msgstr "" + +#. module: web_responsive +#: model:ir.ui.view,arch_db:web_responsive.menu +msgid "Apps" +msgstr "" + +#. module: web_responsive +#: model:ir.model.fields,field_description:web_responsive.field_res_users_chatter_position +msgid "Chatter Position" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_ir_http +msgid "HTTP routing" +msgstr "" + +#. module: web_responsive +#: model:ir.ui.view,arch_db:web_responsive.menu +msgid "More " +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Normal" +msgstr "" + +#. module: web_responsive +#: selection:res.users,chatter_position:0 +msgid "Sided" +msgstr "" + +#. module: web_responsive +#: model:ir.model,name:web_responsive.model_res_users +msgid "Users" +msgstr "" + From a9ac9b4d2262ca419a38401a9353fe19452c7578 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:15 +0000 Subject: [PATCH 180/399] [UPD] Update web_searchbar_full_width.pot --- .../i18n/web_searchbar_full_width.pot | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web_searchbar_full_width/i18n/web_searchbar_full_width.pot diff --git a/web_searchbar_full_width/i18n/web_searchbar_full_width.pot b/web_searchbar_full_width/i18n/web_searchbar_full_width.pot new file mode 100644 index 000000000000..447d3bb3ca4c --- /dev/null +++ b/web_searchbar_full_width/i18n/web_searchbar_full_width.pot @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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" + From 7dcd1cd73fd530be29551c5bba6e04b749cde87b Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:15 +0000 Subject: [PATCH 181/399] [UPD] Update web_search_with_and.pot --- web_search_with_and/i18n/web_search_with_and.pot | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web_search_with_and/i18n/web_search_with_and.pot diff --git a/web_search_with_and/i18n/web_search_with_and.pot b/web_search_with_and/i18n/web_search_with_and.pot new file mode 100644 index 000000000000..447d3bb3ca4c --- /dev/null +++ b/web_search_with_and/i18n/web_search_with_and.pot @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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" + From f3a1394ebfdf2a009da2e754b0e1fd0dc5dbdc54 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:15 +0000 Subject: [PATCH 182/399] [UPD] Update web_sheet_full_width.pot --- web_sheet_full_width/i18n/web_sheet_full_width.pot | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web_sheet_full_width/i18n/web_sheet_full_width.pot diff --git a/web_sheet_full_width/i18n/web_sheet_full_width.pot b/web_sheet_full_width/i18n/web_sheet_full_width.pot new file mode 100644 index 000000000000..447d3bb3ca4c --- /dev/null +++ b/web_sheet_full_width/i18n/web_sheet_full_width.pot @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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" + From dbbe4966d5fc120306b34d3e40d66dc3cb89e815 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:16 +0000 Subject: [PATCH 183/399] [UPD] Update web_timeline.pot --- web_timeline/i18n/es.po | 10 ++-- web_timeline/i18n/fr.po | 10 ++-- web_timeline/i18n/hr.po | 13 ++--- web_timeline/i18n/nl_NL.po | 13 ++--- web_timeline/i18n/web_timeline.pot | 76 ++++++++++++++++++++++++++++++ 5 files changed, 100 insertions(+), 22 deletions(-) create mode 100644 web_timeline/i18n/web_timeline.pot diff --git a/web_timeline/i18n/es.po b/web_timeline/i18n/es.po index ed88f6748e45..dae75e6dead6 100644 --- a/web_timeline/i18n/es.po +++ b/web_timeline/i18n/es.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_timeline -# +# # Translators: # Pedro M. Baeza , 2017 msgid "" @@ -12,15 +12,15 @@ msgstr "" "PO-Revision-Date: 2018-01-03 03:50+0000\n" "Last-Translator: Pedro M. Baeza , 2017\n" "Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_timeline #. openerp-web -#: code:addons/web_timeline/static/src/js/web_timeline.js:481 +#: code:addons/web_timeline/static/src/js/timeline_controller.js:176 #, python-format msgid "Are you sure you want to delete this record ?" msgstr "¿Está seguro que desea eliminar este registro?" @@ -41,14 +41,14 @@ msgstr "Mes" #. module: web_timeline #. openerp-web -#: code:addons/web_timeline/static/src/js/web_timeline.js:33 +#: code:addons/web_timeline/static/src/js/timeline_view.js:32 #, python-format msgid "Timeline" msgstr "Línea de tiempo" #. module: web_timeline #. openerp-web -#: code:addons/web_timeline/static/src/js/web_timeline.js:99 +#: code:addons/web_timeline/static/src/js/timeline_renderer.js:43 #, python-format msgid "Timeline view has not defined 'date_start' attribute." msgstr "" diff --git a/web_timeline/i18n/fr.po b/web_timeline/i18n/fr.po index 1b16e0ad3c0b..de7c14710e2a 100644 --- a/web_timeline/i18n/fr.po +++ b/web_timeline/i18n/fr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_timeline -# +# # Translators: # leemannd , 2017 # OCA Transbot , 2017 @@ -13,15 +13,15 @@ msgstr "" "PO-Revision-Date: 2018-01-03 03:50+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: web_timeline #. openerp-web -#: code:addons/web_timeline/static/src/js/web_timeline.js:481 +#: code:addons/web_timeline/static/src/js/timeline_controller.js:176 #, python-format msgid "Are you sure you want to delete this record ?" msgstr "Êtes vous sûr de vouloir supprimer cet enregistrement ?" @@ -42,14 +42,14 @@ msgstr "Mois" #. module: web_timeline #. openerp-web -#: code:addons/web_timeline/static/src/js/web_timeline.js:33 +#: code:addons/web_timeline/static/src/js/timeline_view.js:32 #, python-format msgid "Timeline" msgstr "Chronologie" #. module: web_timeline #. openerp-web -#: code:addons/web_timeline/static/src/js/web_timeline.js:99 +#: code:addons/web_timeline/static/src/js/timeline_renderer.js:43 #, python-format msgid "Timeline view has not defined 'date_start' attribute." msgstr "La vue chronologique n'a pas défini l'attribut 'date_start'." diff --git a/web_timeline/i18n/hr.po b/web_timeline/i18n/hr.po index d30e644ff429..3e9176de8b87 100644 --- a/web_timeline/i18n/hr.po +++ b/web_timeline/i18n/hr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_timeline -# +# # Translators: # Bole , 2017 msgid "" @@ -12,15 +12,16 @@ msgstr "" "PO-Revision-Date: 2018-01-03 03:50+0000\n" "Last-Translator: Bole , 2017\n" "Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: hr\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #. module: web_timeline #. openerp-web -#: code:addons/web_timeline/static/src/js/web_timeline.js:481 +#: code:addons/web_timeline/static/src/js/timeline_controller.js:176 #, python-format msgid "Are you sure you want to delete this record ?" msgstr "Jeste li sigurni da želite brisati ovaj zapis?" @@ -41,14 +42,14 @@ msgstr "Mjesec" #. module: web_timeline #. openerp-web -#: code:addons/web_timeline/static/src/js/web_timeline.js:33 +#: code:addons/web_timeline/static/src/js/timeline_view.js:32 #, python-format msgid "Timeline" msgstr "Vremenska crta" #. module: web_timeline #. openerp-web -#: code:addons/web_timeline/static/src/js/web_timeline.js:99 +#: code:addons/web_timeline/static/src/js/timeline_renderer.js:43 #, python-format msgid "Timeline view has not defined 'date_start' attribute." msgstr "Pogled vremenske crte nema definiran atribut 'date_start'." diff --git a/web_timeline/i18n/nl_NL.po b/web_timeline/i18n/nl_NL.po index f572d095d4c1..2f61639d9236 100644 --- a/web_timeline/i18n/nl_NL.po +++ b/web_timeline/i18n/nl_NL.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_timeline -# +# # Translators: # Peter Hageman , 2017 msgid "" @@ -11,16 +11,17 @@ msgstr "" "POT-Creation-Date: 2018-01-03 03:50+0000\n" "PO-Revision-Date: 2018-01-03 03:50+0000\n" "Last-Translator: Peter Hageman , 2017\n" -"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_timeline #. openerp-web -#: code:addons/web_timeline/static/src/js/web_timeline.js:481 +#: code:addons/web_timeline/static/src/js/timeline_controller.js:176 #, python-format msgid "Are you sure you want to delete this record ?" msgstr "Weet je zeker dat je dit record wil verwijderen?" @@ -41,14 +42,14 @@ msgstr "Maand" #. module: web_timeline #. openerp-web -#: code:addons/web_timeline/static/src/js/web_timeline.js:33 +#: code:addons/web_timeline/static/src/js/timeline_view.js:32 #, python-format msgid "Timeline" msgstr "Tijdlijn" #. module: web_timeline #. openerp-web -#: code:addons/web_timeline/static/src/js/web_timeline.js:99 +#: code:addons/web_timeline/static/src/js/timeline_renderer.js:43 #, python-format msgid "Timeline view has not defined 'date_start' attribute." msgstr "Tijdlijn heeft geen 'date_start' eigenschap." diff --git a/web_timeline/i18n/web_timeline.pot b/web_timeline/i18n/web_timeline.pot new file mode 100644 index 000000000000..b9069229020d --- /dev/null +++ b/web_timeline/i18n/web_timeline.pot @@ -0,0 +1,76 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_timeline +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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: web_timeline +#. openerp-web +#: code:addons/web_timeline/static/src/js/timeline_controller.js:176 +#, python-format +msgid "Are you sure you want to delete this record ?" +msgstr "" + +#. module: web_timeline +#. openerp-web +#: code:addons/web_timeline/static/src/xml/web_timeline.xml:8 +#, python-format +msgid "Day" +msgstr "" + +#. module: web_timeline +#. openerp-web +#: code:addons/web_timeline/static/src/xml/web_timeline.xml:10 +#, python-format +msgid "Month" +msgstr "" + +#. module: web_timeline +#. openerp-web +#: code:addons/web_timeline/static/src/js/timeline_view.js:32 +#, python-format +msgid "Timeline" +msgstr "" + +#. module: web_timeline +#. openerp-web +#: code:addons/web_timeline/static/src/js/timeline_renderer.js:43 +#, python-format +msgid "Timeline view has not defined 'date_start' attribute." +msgstr "" + +#. module: web_timeline +#. openerp-web +#: code:addons/web_timeline/static/src/xml/web_timeline.xml:5 +#, python-format +msgid "Today" +msgstr "" + +#. module: web_timeline +#. openerp-web +#: code:addons/web_timeline/static/src/xml/web_timeline.xml:9 +#, python-format +msgid "Week" +msgstr "" + +#. module: web_timeline +#. openerp-web +#: code:addons/web_timeline/static/src/xml/web_timeline.xml:11 +#, python-format +msgid "Year" +msgstr "" + +#. module: web_timeline +#: model:ir.model,name:web_timeline.model_ir_ui_view +msgid "ir.ui.view" +msgstr "" + From 5682b1d35cb5591a2549a89b9ac77b7bb378ae29 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:16 +0000 Subject: [PATCH 184/399] [UPD] Update web_tree_dynamic_colored_field.pot --- .../i18n/web_tree_dynamic_colored_field.pot | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web_tree_dynamic_colored_field/i18n/web_tree_dynamic_colored_field.pot diff --git a/web_tree_dynamic_colored_field/i18n/web_tree_dynamic_colored_field.pot b/web_tree_dynamic_colored_field/i18n/web_tree_dynamic_colored_field.pot new file mode 100644 index 000000000000..447d3bb3ca4c --- /dev/null +++ b/web_tree_dynamic_colored_field/i18n/web_tree_dynamic_colored_field.pot @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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" + From deddcd23d316defd90ec0de43f0f712407d1d4bb Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:16 +0000 Subject: [PATCH 185/399] [UPD] Update web_tree_many2one_clickable.pot --- .../i18n/web_tree_many2one_clickable.pot | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web_tree_many2one_clickable/i18n/web_tree_many2one_clickable.pot diff --git a/web_tree_many2one_clickable/i18n/web_tree_many2one_clickable.pot b/web_tree_many2one_clickable/i18n/web_tree_many2one_clickable.pot new file mode 100644 index 000000000000..447d3bb3ca4c --- /dev/null +++ b/web_tree_many2one_clickable/i18n/web_tree_many2one_clickable.pot @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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" + From 37caa78f3300746f7c645774422f45d4fed3de52 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:17 +0000 Subject: [PATCH 186/399] [UPD] Update web_widget_bokeh_chart.pot --- .../i18n/web_widget_bokeh_chart.pot | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web_widget_bokeh_chart/i18n/web_widget_bokeh_chart.pot diff --git a/web_widget_bokeh_chart/i18n/web_widget_bokeh_chart.pot b/web_widget_bokeh_chart/i18n/web_widget_bokeh_chart.pot new file mode 100644 index 000000000000..447d3bb3ca4c --- /dev/null +++ b/web_widget_bokeh_chart/i18n/web_widget_bokeh_chart.pot @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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" + From e59a67191bc2120825e03dd9b92234a4ef5acae0 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:17 +0000 Subject: [PATCH 187/399] [UPD] Update web_widget_color.pot --- web_widget_color/i18n/web_widget_color.pot | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web_widget_color/i18n/web_widget_color.pot diff --git a/web_widget_color/i18n/web_widget_color.pot b/web_widget_color/i18n/web_widget_color.pot new file mode 100644 index 000000000000..447d3bb3ca4c --- /dev/null +++ b/web_widget_color/i18n/web_widget_color.pot @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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" + From 88051ef32c0fe65ca97e5ac4bb723179c7d7df42 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:17 +0000 Subject: [PATCH 188/399] [UPD] Update web_widget_datepicker_options.pot --- .../i18n/web_widget_datepicker_options.pot | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web_widget_datepicker_options/i18n/web_widget_datepicker_options.pot diff --git a/web_widget_datepicker_options/i18n/web_widget_datepicker_options.pot b/web_widget_datepicker_options/i18n/web_widget_datepicker_options.pot new file mode 100644 index 000000000000..447d3bb3ca4c --- /dev/null +++ b/web_widget_datepicker_options/i18n/web_widget_datepicker_options.pot @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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" + From c978383f2932bee9e7b96e8f07770be75895dd07 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:18 +0000 Subject: [PATCH 189/399] [UPD] Update web_widget_image_download.pot --- web_widget_image_download/i18n/hr.po | 7 +++--- web_widget_image_download/i18n/lt.po | 7 +++--- web_widget_image_download/i18n/nl_NL.po | 7 +++--- .../i18n/web_widget_image_download.pot | 22 +++++++++++++++++++ 4 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 web_widget_image_download/i18n/web_widget_image_download.pot diff --git a/web_widget_image_download/i18n/hr.po b/web_widget_image_download/i18n/hr.po index 4e123cbc0dd8..edb04e1c188e 100644 --- a/web_widget_image_download/i18n/hr.po +++ b/web_widget_image_download/i18n/hr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_image_download -# +# # Translators: # Bole , 2017 msgid "" @@ -12,11 +12,12 @@ msgstr "" "PO-Revision-Date: 2017-07-13 16:07+0000\n" "Last-Translator: Bole , 2017\n" "Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: hr\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #. module: web_widget_image_download #. openerp-web diff --git a/web_widget_image_download/i18n/lt.po b/web_widget_image_download/i18n/lt.po index f9d1a3d4d3f8..798cb550961c 100644 --- a/web_widget_image_download/i18n/lt.po +++ b/web_widget_image_download/i18n/lt.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_image_download -# +# # Translators: # Viktoras Norkus , 2018 msgid "" @@ -12,11 +12,12 @@ msgstr "" "PO-Revision-Date: 2018-01-25 01:58+0000\n" "Last-Translator: Viktoras Norkus , 2018\n" "Language-Team: Lithuanian (https://www.transifex.com/oca/teams/23907/lt/)\n" +"Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: lt\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" +"%100<10 || n%100>=20) ? 1 : 2);\n" #. module: web_widget_image_download #. openerp-web diff --git a/web_widget_image_download/i18n/nl_NL.po b/web_widget_image_download/i18n/nl_NL.po index 1917073b2293..1be78a5866a7 100644 --- a/web_widget_image_download/i18n/nl_NL.po +++ b/web_widget_image_download/i18n/nl_NL.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_image_download -# +# # Translators: # Peter Hageman , 2017 msgid "" @@ -11,11 +11,12 @@ msgstr "" "POT-Creation-Date: 2017-07-01 03:35+0000\n" "PO-Revision-Date: 2017-07-01 03:35+0000\n" "Last-Translator: Peter Hageman , 2017\n" -"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_widget_image_download diff --git a/web_widget_image_download/i18n/web_widget_image_download.pot b/web_widget_image_download/i18n/web_widget_image_download.pot new file mode 100644 index 000000000000..df4ad1b263bd --- /dev/null +++ b/web_widget_image_download/i18n/web_widget_image_download.pot @@ -0,0 +1,22 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_image_download +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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: web_widget_image_download +#. openerp-web +#: code:addons/web_widget_image_download/static/src/xml/web_widget_image_download.xml:10 +#, python-format +msgid "Download" +msgstr "" + From c2d138cf97370d3d69b981f036d4608f4dda12ab Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:18 +0000 Subject: [PATCH 190/399] [UPD] Update web_widget_image_url.pot --- .../i18n/web_widget_image_url.pot | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 web_widget_image_url/i18n/web_widget_image_url.pot diff --git a/web_widget_image_url/i18n/web_widget_image_url.pot b/web_widget_image_url/i18n/web_widget_image_url.pot new file mode 100644 index 000000000000..556b5614e926 --- /dev/null +++ b/web_widget_image_url/i18n/web_widget_image_url.pot @@ -0,0 +1,29 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_image_url +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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: web_widget_image_url +#. openerp-web +#: code:addons/web_widget_image_url/static/src/js/web_widget_image_url.js:30 +#, python-format +msgid "Could not display the selected image." +msgstr "" + +#. module: web_widget_image_url +#. openerp-web +#: code:addons/web_widget_image_url/static/src/js/web_widget_image_url.js:30 +#, python-format +msgid "Image" +msgstr "" + From 6e4aa88549df74f9cfe403ec2b0e0322f1ea705b Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:19 +0000 Subject: [PATCH 191/399] [UPD] Update web_widget_many2many_tags_multi_selection.pot --- .../i18n/lt.po | 11 +++---- .../i18n/nl_NL.po | 11 +++---- .../i18n/pt_BR.po | 14 +++++---- ..._widget_many2many_tags_multi_selection.pot | 29 +++++++++++++++++++ 4 files changed, 49 insertions(+), 16 deletions(-) create mode 100644 web_widget_many2many_tags_multi_selection/i18n/web_widget_many2many_tags_multi_selection.pot diff --git a/web_widget_many2many_tags_multi_selection/i18n/lt.po b/web_widget_many2many_tags_multi_selection/i18n/lt.po index f0631caa5808..ac5b027a758f 100644 --- a/web_widget_many2many_tags_multi_selection/i18n/lt.po +++ b/web_widget_many2many_tags_multi_selection/i18n/lt.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_many2many_tags_multi_selection -# +# # Translators: # Viktoras Norkus , 2018 msgid "" @@ -12,22 +12,23 @@ msgstr "" "PO-Revision-Date: 2018-01-25 01:58+0000\n" "Last-Translator: Viktoras Norkus , 2018\n" "Language-Team: Lithuanian (https://www.transifex.com/oca/teams/23907/lt/)\n" +"Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: lt\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" +"%100<10 || n%100>=20) ? 1 : 2);\n" #. module: web_widget_many2many_tags_multi_selection #. openerp-web -#: code:addons/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js:15 +#: code:addons/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js:26 #, python-format msgid "Create: " msgstr "Sukurti:" #. module: web_widget_many2many_tags_multi_selection #. openerp-web -#: code:addons/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js:15 +#: code:addons/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js:26 #, python-format msgid "Search: " msgstr "Ieškoti:" diff --git a/web_widget_many2many_tags_multi_selection/i18n/nl_NL.po b/web_widget_many2many_tags_multi_selection/i18n/nl_NL.po index 17fd4b5c7c01..c0400098e564 100644 --- a/web_widget_many2many_tags_multi_selection/i18n/nl_NL.po +++ b/web_widget_many2many_tags_multi_selection/i18n/nl_NL.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_many2many_tags_multi_selection -# +# # Translators: # Peter Hageman , 2017 msgid "" @@ -11,23 +11,24 @@ msgstr "" "POT-Creation-Date: 2018-01-03 03:50+0000\n" "PO-Revision-Date: 2018-01-03 03:50+0000\n" "Last-Translator: Peter Hageman , 2017\n" -"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_widget_many2many_tags_multi_selection #. openerp-web -#: code:addons/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js:15 +#: code:addons/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js:26 #, python-format msgid "Create: " msgstr "Aanmaken:" #. module: web_widget_many2many_tags_multi_selection #. openerp-web -#: code:addons/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js:15 +#: code:addons/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js:26 #, python-format msgid "Search: " msgstr "Zoeken:" diff --git a/web_widget_many2many_tags_multi_selection/i18n/pt_BR.po b/web_widget_many2many_tags_multi_selection/i18n/pt_BR.po index d3b2e433b1fe..a466f366aead 100644 --- a/web_widget_many2many_tags_multi_selection/i18n/pt_BR.po +++ b/web_widget_many2many_tags_multi_selection/i18n/pt_BR.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_many2many_tags_multi_selection -# +# # Translators: # Rodrigo de Almeida Sottomaior Macedo , 2017 msgid "" @@ -10,24 +10,26 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-22 08:27+0000\n" "PO-Revision-Date: 2017-06-22 08:27+0000\n" -"Last-Translator: Rodrigo de Almeida Sottomaior Macedo , 2017\n" -"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" +"Last-Translator: Rodrigo de Almeida Sottomaior Macedo " +", 2017\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" +"teams/23907/pt_BR/)\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: web_widget_many2many_tags_multi_selection #. openerp-web -#: code:addons/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js:15 +#: code:addons/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js:26 #, python-format msgid "Create: " msgstr "Criado:" #. module: web_widget_many2many_tags_multi_selection #. openerp-web -#: code:addons/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js:15 +#: code:addons/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js:26 #, python-format msgid "Search: " msgstr "Pesquisa:" diff --git a/web_widget_many2many_tags_multi_selection/i18n/web_widget_many2many_tags_multi_selection.pot b/web_widget_many2many_tags_multi_selection/i18n/web_widget_many2many_tags_multi_selection.pot new file mode 100644 index 000000000000..3bffd1537d04 --- /dev/null +++ b/web_widget_many2many_tags_multi_selection/i18n/web_widget_many2many_tags_multi_selection.pot @@ -0,0 +1,29 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_many2many_tags_multi_selection +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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: web_widget_many2many_tags_multi_selection +#. openerp-web +#: code:addons/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js:26 +#, python-format +msgid "Create: " +msgstr "" + +#. module: web_widget_many2many_tags_multi_selection +#. openerp-web +#: code:addons/web_widget_many2many_tags_multi_selection/static/src/js/view_form.js:26 +#, python-format +msgid "Search: " +msgstr "" + From cebc6965f66749a227cbf1a192bfdc50b91116c1 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:19 +0000 Subject: [PATCH 192/399] [UPD] Update web_widget_x2many_2d_matrix.pot --- web_widget_x2many_2d_matrix/i18n/ar.po | 20 ++++++++++------- web_widget_x2many_2d_matrix/i18n/de.po | 17 ++++++++------ web_widget_x2many_2d_matrix/i18n/es.po | 17 ++++++++------ web_widget_x2many_2d_matrix/i18n/fi.po | 17 ++++++++------ web_widget_x2many_2d_matrix/i18n/fr.po | 17 ++++++++------ web_widget_x2many_2d_matrix/i18n/hr.po | 20 ++++++++++------- web_widget_x2many_2d_matrix/i18n/it.po | 17 ++++++++------ web_widget_x2many_2d_matrix/i18n/lt.po | 17 ++++++++------ web_widget_x2many_2d_matrix/i18n/nl_NL.po | 17 ++++++++------ web_widget_x2many_2d_matrix/i18n/pt_BR.po | 17 ++++++++------ web_widget_x2many_2d_matrix/i18n/sl.po | 20 ++++++++++------- web_widget_x2many_2d_matrix/i18n/tr.po | 17 ++++++++------ .../i18n/web_widget_x2many_2d_matrix.pot | 22 +++++++++++++++++++ 13 files changed, 148 insertions(+), 87 deletions(-) create mode 100644 web_widget_x2many_2d_matrix/i18n/web_widget_x2many_2d_matrix.pot diff --git a/web_widget_x2many_2d_matrix/i18n/ar.po b/web_widget_x2many_2d_matrix/i18n/ar.po index 7a85d2bde813..6b12b83b8744 100644 --- a/web_widget_x2many_2d_matrix/i18n/ar.po +++ b/web_widget_x2many_2d_matrix/i18n/ar.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_x2many_2d_matrix -# +# # Translators: # SaFi J. , 2015 msgid "" @@ -11,17 +11,21 @@ msgstr "" "POT-Creation-Date: 2015-12-16 07:41+0000\n" "PO-Revision-Date: 2015-12-16 17:24+0000\n" "Last-Translator: SaFi J. \n" -"Language-Team: Arabic (http://www.transifex.com/oca/OCA-web-8-0/language/ar/)\n" +"Language-Team: Arabic (http://www.transifex.com/oca/OCA-web-8-0/language/" +"ar/)\n" +"Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: ar\n" -"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #. module: web_widget_x2many_2d_matrix #. openerp-web -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#: code:addons/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js:46 #, python-format -msgid "Total" -msgstr "المجموع الاجمالي" +msgid "Sorry no matrix data to display." +msgstr "" + +#~ msgid "Total" +#~ msgstr "المجموع الاجمالي" diff --git a/web_widget_x2many_2d_matrix/i18n/de.po b/web_widget_x2many_2d_matrix/i18n/de.po index 337d2b944ef1..53c95477ee10 100644 --- a/web_widget_x2many_2d_matrix/i18n/de.po +++ b/web_widget_x2many_2d_matrix/i18n/de.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_x2many_2d_matrix -# +# # Translators: # Rudolf Schnapka , 2016 msgid "" @@ -11,17 +11,20 @@ msgstr "" "POT-Creation-Date: 2016-01-10 07:31+0000\n" "PO-Revision-Date: 2016-01-18 20:15+0000\n" "Last-Translator: Rudolf Schnapka \n" -"Language-Team: German (http://www.transifex.com/oca/OCA-web-8-0/language/de/)\n" +"Language-Team: German (http://www.transifex.com/oca/OCA-web-8-0/language/" +"de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_widget_x2many_2d_matrix #. openerp-web -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#: code:addons/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js:46 #, python-format -msgid "Total" -msgstr "Gesamt" +msgid "Sorry no matrix data to display." +msgstr "" + +#~ msgid "Total" +#~ msgstr "Gesamt" diff --git a/web_widget_x2many_2d_matrix/i18n/es.po b/web_widget_x2many_2d_matrix/i18n/es.po index 10ba2f9f8b08..46745146710a 100644 --- a/web_widget_x2many_2d_matrix/i18n/es.po +++ b/web_widget_x2many_2d_matrix/i18n/es.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_x2many_2d_matrix -# +# # Translators: msgid "" msgstr "" @@ -10,17 +10,20 @@ msgstr "" "POT-Creation-Date: 2015-11-23 13:46+0000\n" "PO-Revision-Date: 2015-11-07 11:29+0000\n" "Last-Translator: Pedro M. Baeza \n" -"Language-Team: Spanish (http://www.transifex.com/oca/OCA-web-8-0/language/es/)\n" +"Language-Team: Spanish (http://www.transifex.com/oca/OCA-web-8-0/language/" +"es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_widget_x2many_2d_matrix #. openerp-web -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#: code:addons/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js:46 #, python-format -msgid "Total" -msgstr "Total" +msgid "Sorry no matrix data to display." +msgstr "" + +#~ msgid "Total" +#~ msgstr "Total" diff --git a/web_widget_x2many_2d_matrix/i18n/fi.po b/web_widget_x2many_2d_matrix/i18n/fi.po index df37d34a7088..50321d78a94e 100644 --- a/web_widget_x2many_2d_matrix/i18n/fi.po +++ b/web_widget_x2many_2d_matrix/i18n/fi.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_x2many_2d_matrix -# +# # Translators: # Jarmo Kortetjärvi , 2016 msgid "" @@ -11,17 +11,20 @@ msgstr "" "POT-Creation-Date: 2016-01-10 07:31+0000\n" "PO-Revision-Date: 2016-02-01 09:54+0000\n" "Last-Translator: Jarmo Kortetjärvi \n" -"Language-Team: Finnish (http://www.transifex.com/oca/OCA-web-8-0/language/fi/)\n" +"Language-Team: Finnish (http://www.transifex.com/oca/OCA-web-8-0/language/" +"fi/)\n" +"Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: fi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_widget_x2many_2d_matrix #. openerp-web -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#: code:addons/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js:46 #, python-format -msgid "Total" -msgstr "Yhteensä" +msgid "Sorry no matrix data to display." +msgstr "" + +#~ msgid "Total" +#~ msgstr "Yhteensä" diff --git a/web_widget_x2many_2d_matrix/i18n/fr.po b/web_widget_x2many_2d_matrix/i18n/fr.po index 7ed8bc355a41..73c195491a86 100644 --- a/web_widget_x2many_2d_matrix/i18n/fr.po +++ b/web_widget_x2many_2d_matrix/i18n/fr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_x2many_2d_matrix -# +# # Translators: msgid "" msgstr "" @@ -10,17 +10,20 @@ msgstr "" "POT-Creation-Date: 2016-05-06 15:50+0000\n" "PO-Revision-Date: 2015-11-07 11:22+0000\n" "Last-Translator: <>\n" -"Language-Team: French (http://www.transifex.com/oca/OCA-web-8-0/language/fr/)\n" +"Language-Team: French (http://www.transifex.com/oca/OCA-web-8-0/language/" +"fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: web_widget_x2many_2d_matrix #. openerp-web -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#: code:addons/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js:46 #, python-format -msgid "Total" -msgstr "Total" +msgid "Sorry no matrix data to display." +msgstr "" + +#~ msgid "Total" +#~ msgstr "Total" diff --git a/web_widget_x2many_2d_matrix/i18n/hr.po b/web_widget_x2many_2d_matrix/i18n/hr.po index f209e294170b..7a9c1d999c52 100644 --- a/web_widget_x2many_2d_matrix/i18n/hr.po +++ b/web_widget_x2many_2d_matrix/i18n/hr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_x2many_2d_matrix -# +# # Translators: # Ana-Maria Olujić , 2016 msgid "" @@ -11,17 +11,21 @@ msgstr "" "POT-Creation-Date: 2016-08-25 00:51+0000\n" "PO-Revision-Date: 2016-08-19 11:47+0000\n" "Last-Translator: Ana-Maria Olujić \n" -"Language-Team: Croatian (http://www.transifex.com/oca/OCA-web-8-0/language/hr/)\n" +"Language-Team: Croatian (http://www.transifex.com/oca/OCA-web-8-0/language/" +"hr/)\n" +"Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: hr\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #. module: web_widget_x2many_2d_matrix #. openerp-web -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#: code:addons/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js:46 #, python-format -msgid "Total" -msgstr "Ukupno" +msgid "Sorry no matrix data to display." +msgstr "" + +#~ msgid "Total" +#~ msgstr "Ukupno" diff --git a/web_widget_x2many_2d_matrix/i18n/it.po b/web_widget_x2many_2d_matrix/i18n/it.po index 5b5d0bf31c36..09f32362839c 100644 --- a/web_widget_x2many_2d_matrix/i18n/it.po +++ b/web_widget_x2many_2d_matrix/i18n/it.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_x2many_2d_matrix -# +# # Translators: msgid "" msgstr "" @@ -10,17 +10,20 @@ msgstr "" "POT-Creation-Date: 2016-03-17 07:30+0000\n" "PO-Revision-Date: 2015-11-07 11:22+0000\n" "Last-Translator: <>\n" -"Language-Team: Italian (http://www.transifex.com/oca/OCA-web-8-0/language/it/)\n" +"Language-Team: Italian (http://www.transifex.com/oca/OCA-web-8-0/language/" +"it/)\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_widget_x2many_2d_matrix #. openerp-web -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#: code:addons/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js:46 #, python-format -msgid "Total" -msgstr "Totale" +msgid "Sorry no matrix data to display." +msgstr "" + +#~ msgid "Total" +#~ msgstr "Totale" diff --git a/web_widget_x2many_2d_matrix/i18n/lt.po b/web_widget_x2many_2d_matrix/i18n/lt.po index 57a65fc55590..c2c47a021b21 100644 --- a/web_widget_x2many_2d_matrix/i18n/lt.po +++ b/web_widget_x2many_2d_matrix/i18n/lt.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_x2many_2d_matrix -# +# # Translators: # Viktoras Norkus , 2018 msgid "" @@ -12,16 +12,19 @@ msgstr "" "PO-Revision-Date: 2018-02-15 12:40+0200\n" "Last-Translator: Viktoras Norkus , 2018\n" "Language-Team: Lithuanian (https://www.transifex.com/oca/teams/23907/lt/)\n" +"Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: lt\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" +"%100<10 || n%100>=20) ? 1 : 2);\n" #. module: web_widget_x2many_2d_matrix #. openerp-web -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#: code:addons/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js:46 #, python-format -msgid "Total" -msgstr "Suma" +msgid "Sorry no matrix data to display." +msgstr "" + +#~ msgid "Total" +#~ msgstr "Suma" diff --git a/web_widget_x2many_2d_matrix/i18n/nl_NL.po b/web_widget_x2many_2d_matrix/i18n/nl_NL.po index e1fde063c22b..5a792ed3dc88 100644 --- a/web_widget_x2many_2d_matrix/i18n/nl_NL.po +++ b/web_widget_x2many_2d_matrix/i18n/nl_NL.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_x2many_2d_matrix -# +# # Translators: # Peter Hageman , 2017 msgid "" @@ -11,17 +11,20 @@ msgstr "" "POT-Creation-Date: 2018-01-03 03:50+0000\n" "PO-Revision-Date: 2018-02-15 12:39+0200\n" "Last-Translator: Peter Hageman , 2017\n" -"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_widget_x2many_2d_matrix #. openerp-web -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#: code:addons/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js:46 #, python-format -msgid "Total" -msgstr "Totaal" +msgid "Sorry no matrix data to display." +msgstr "" + +#~ msgid "Total" +#~ msgstr "Totaal" diff --git a/web_widget_x2many_2d_matrix/i18n/pt_BR.po b/web_widget_x2many_2d_matrix/i18n/pt_BR.po index c56e07fa61ce..810d4e1c9d52 100644 --- a/web_widget_x2many_2d_matrix/i18n/pt_BR.po +++ b/web_widget_x2many_2d_matrix/i18n/pt_BR.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_x2many_2d_matrix -# +# # Translators: msgid "" msgstr "" @@ -10,17 +10,20 @@ msgstr "" "POT-Creation-Date: 2016-03-11 02:18+0000\n" "PO-Revision-Date: 2016-03-05 16:20+0000\n" "Last-Translator: danimaribeiro \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-web-8-0/language/pt_BR/)\n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-web-8-0/" +"language/pt_BR/)\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: web_widget_x2many_2d_matrix #. openerp-web -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#: code:addons/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js:46 #, python-format -msgid "Total" -msgstr "Total" +msgid "Sorry no matrix data to display." +msgstr "" + +#~ msgid "Total" +#~ msgstr "Total" diff --git a/web_widget_x2many_2d_matrix/i18n/sl.po b/web_widget_x2many_2d_matrix/i18n/sl.po index 07ae09c5d338..83c518e00f8a 100644 --- a/web_widget_x2many_2d_matrix/i18n/sl.po +++ b/web_widget_x2many_2d_matrix/i18n/sl.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_x2many_2d_matrix -# +# # Translators: msgid "" msgstr "" @@ -10,17 +10,21 @@ msgstr "" "POT-Creation-Date: 2015-11-23 13:46+0000\n" "PO-Revision-Date: 2015-11-08 05:48+0000\n" "Last-Translator: Matjaž Mozetič \n" -"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-web-8-0/language/sl/)\n" +"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-web-8-0/language/" +"sl/)\n" +"Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: sl\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" #. module: web_widget_x2many_2d_matrix #. openerp-web -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#: code:addons/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js:46 #, python-format -msgid "Total" -msgstr "Skupaj" +msgid "Sorry no matrix data to display." +msgstr "" + +#~ msgid "Total" +#~ msgstr "Skupaj" diff --git a/web_widget_x2many_2d_matrix/i18n/tr.po b/web_widget_x2many_2d_matrix/i18n/tr.po index 635773bda8e4..0e192ed2a167 100644 --- a/web_widget_x2many_2d_matrix/i18n/tr.po +++ b/web_widget_x2many_2d_matrix/i18n/tr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_widget_x2many_2d_matrix -# +# # Translators: # Ahmet Altınışık , 2015 msgid "" @@ -11,17 +11,20 @@ msgstr "" "POT-Creation-Date: 2016-01-08 21:34+0000\n" "PO-Revision-Date: 2015-12-30 22:00+0000\n" "Last-Translator: Ahmet Altınışık \n" -"Language-Team: Turkish (http://www.transifex.com/oca/OCA-web-8-0/language/tr/)\n" +"Language-Team: Turkish (http://www.transifex.com/oca/OCA-web-8-0/language/" +"tr/)\n" +"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: web_widget_x2many_2d_matrix #. openerp-web -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:11 -#: code:addons/web_widget_x2many_2d_matrix/static/src/xml/web_widget_x2many_2d_matrix.xml:28 +#: code:addons/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js:46 #, python-format -msgid "Total" -msgstr "Toplam" +msgid "Sorry no matrix data to display." +msgstr "" + +#~ msgid "Total" +#~ msgstr "Toplam" diff --git a/web_widget_x2many_2d_matrix/i18n/web_widget_x2many_2d_matrix.pot b/web_widget_x2many_2d_matrix/i18n/web_widget_x2many_2d_matrix.pot new file mode 100644 index 000000000000..05da1c2cee62 --- /dev/null +++ b/web_widget_x2many_2d_matrix/i18n/web_widget_x2many_2d_matrix.pot @@ -0,0 +1,22 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_x2many_2d_matrix +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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: web_widget_x2many_2d_matrix +#. openerp-web +#: code:addons/web_widget_x2many_2d_matrix/static/src/js/2d_matrix_renderer.js:46 +#, python-format +msgid "Sorry no matrix data to display." +msgstr "" + From 3c6a9231f6283d22b57f6086f44912c7560af7f7 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:19 +0000 Subject: [PATCH 193/399] [UPD] Update web_widget_x2many_2d_matrix_example.pot --- .../web_widget_x2many_2d_matrix_example.pot | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 web_widget_x2many_2d_matrix_example/i18n/web_widget_x2many_2d_matrix_example.pot diff --git a/web_widget_x2many_2d_matrix_example/i18n/web_widget_x2many_2d_matrix_example.pot b/web_widget_x2many_2d_matrix_example/i18n/web_widget_x2many_2d_matrix_example.pot new file mode 100644 index 000000000000..c7dc0a4bc5cb --- /dev/null +++ b/web_widget_x2many_2d_matrix_example/i18n/web_widget_x2many_2d_matrix_example.pot @@ -0,0 +1,117 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_x2many_2d_matrix_example +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \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: web_widget_x2many_2d_matrix_example +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_create_uid +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_line_create_uid +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_matrix_demo_wiz_create_uid +msgid "Created by" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_create_date +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_line_create_date +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_matrix_demo_wiz_create_date +msgid "Created on" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.actions.act_window,name:web_widget_x2many_2d_matrix_example.action_x2m_demo +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_line_demo_id +msgid "Demo" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.ui.menu,name:web_widget_x2many_2d_matrix_example.base_matrix_widget_menu +msgid "Demo x2m matrix widget" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_display_name +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_line_display_name +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_matrix_demo_wiz_display_name +msgid "Display Name" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_id +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_line_id +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_matrix_demo_wiz_id +msgid "ID" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo___last_update +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_line___last_update +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_matrix_demo_wiz___last_update +msgid "Last Modified on" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_line_write_uid +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_write_uid +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_matrix_demo_wiz_write_uid +msgid "Last Updated by" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_line_write_date +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_write_date +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_matrix_demo_wiz_write_date +msgid "Last Updated on" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_line_ids +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_matrix_demo_wiz_line_ids +msgid "Line" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_line_name +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_name +msgid "Name" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.ui.view,arch_db:web_widget_x2many_2d_matrix_example.view_x2m_demo_form +msgid "Try x2m 2d matrix" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_line_user_id +msgid "User" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.model.fields,field_description:web_widget_x2many_2d_matrix_example.field_x2m_demo_line_value +msgid "Value" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.model,name:web_widget_x2many_2d_matrix_example.model_x2m_demo +msgid "x2m.demo" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.model,name:web_widget_x2many_2d_matrix_example.model_x2m_demo_line +msgid "x2m.demo.line" +msgstr "" + +#. module: web_widget_x2many_2d_matrix_example +#: model:ir.model,name:web_widget_x2many_2d_matrix_example.model_x2m_matrix_demo_wiz +msgid "x2m.matrix.demo.wiz" +msgstr "" + From 8f5d050ff5fff8b332af28ab46ee4ba395a5ef15 Mon Sep 17 00:00:00 2001 From: QS5ELkMu Date: Mon, 25 Jun 2018 14:46:48 +0200 Subject: [PATCH 194/399] [FIX] Chatter Position --- web_responsive/static/src/js/web_responsive.js | 1 - web_responsive/views/inherited_view_users_form_simple_modif.xml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/web_responsive/static/src/js/web_responsive.js b/web_responsive/static/src/js/web_responsive.js index 56e60fac2356..bbc8617512fb 100644 --- a/web_responsive/static/src/js/web_responsive.js +++ b/web_responsive/static/src/js/web_responsive.js @@ -10,7 +10,6 @@ odoo.define('web_responsive', function(require) { var core = require('web.core'); var config = require('web.config'); var ViewManager = require('web.ViewManager'); - var Session = require('web.session'); Menu.include({ diff --git a/web_responsive/views/inherited_view_users_form_simple_modif.xml b/web_responsive/views/inherited_view_users_form_simple_modif.xml index ac389f85458b..9e465ba8a004 100644 --- a/web_responsive/views/inherited_view_users_form_simple_modif.xml +++ b/web_responsive/views/inherited_view_users_form_simple_modif.xml @@ -13,7 +13,7 @@ - + From 3de495cb6045c4770ba36f84ce4420de4f45baae Mon Sep 17 00:00:00 2001 From: QS5ELkMu Date: Mon, 25 Jun 2018 15:26:20 +0200 Subject: [PATCH 195/399] [FIX] Read/Write permissions --- web_responsive/models/inherited_res_users.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/web_responsive/models/inherited_res_users.py b/web_responsive/models/inherited_res_users.py index f567f3aa6c15..1de66bda8f08 100644 --- a/web_responsive/models/inherited_res_users.py +++ b/web_responsive/models/inherited_res_users.py @@ -7,6 +7,20 @@ class ResUsers(models.Model): _inherit = 'res.users' + def __init__(self, pool, cr): + """ Override of __init__ to add access rights on notification_email_send + and alias fields. Access rights are disabled by default, but allowed + on some specific fields defined in self.SELF_{READ/WRITE}ABLE_FIELDS. + """ + init_res = super(ResUsers, self).__init__(pool, cr) + # duplicate list to avoid modifying the original reference + type(self).SELF_WRITEABLE_FIELDS = list(self.SELF_WRITEABLE_FIELDS) + type(self).SELF_WRITEABLE_FIELDS.extend(['chatter_position']) + # duplicate list to avoid modifying the original reference + type(self).SELF_READABLE_FIELDS = list(self.SELF_READABLE_FIELDS) + type(self).SELF_READABLE_FIELDS.extend(['chatter_position']) + return init_res + chatter_position = fields.Selection([ ('normal', 'Normal'), ('sided', 'Sided'), From 900b24d9eb2f3d6b26b75fdec0c92b4e679d9b44 Mon Sep 17 00:00:00 2001 From: QS5ELkMu Date: Mon, 25 Jun 2018 15:29:29 +0200 Subject: [PATCH 196/399] [CLEAN] Comments --- web_responsive/models/inherited_res_users.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web_responsive/models/inherited_res_users.py b/web_responsive/models/inherited_res_users.py index 1de66bda8f08..537864780994 100644 --- a/web_responsive/models/inherited_res_users.py +++ b/web_responsive/models/inherited_res_users.py @@ -8,8 +8,8 @@ class ResUsers(models.Model): _inherit = 'res.users' def __init__(self, pool, cr): - """ Override of __init__ to add access rights on notification_email_send - and alias fields. Access rights are disabled by default, but allowed + """ Override of __init__ to add access rights. + Access rights are disabled by default, but allowed on some specific fields defined in self.SELF_{READ/WRITE}ABLE_FIELDS. """ init_res = super(ResUsers, self).__init__(pool, cr) From 4612c14ae02cc89b09741728ba73170573214469 Mon Sep 17 00:00:00 2001 From: QS5ELkMu Date: Mon, 25 Jun 2018 17:25:13 +0200 Subject: [PATCH 197/399] [IMP] Code --- web_responsive/models/inherited_res_users.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/web_responsive/models/inherited_res_users.py b/web_responsive/models/inherited_res_users.py index 537864780994..f584a7a24d99 100644 --- a/web_responsive/models/inherited_res_users.py +++ b/web_responsive/models/inherited_res_users.py @@ -7,21 +7,21 @@ class ResUsers(models.Model): _inherit = 'res.users' + chatter_position = fields.Selection([ + ('normal', 'Normal'), + ('sided', 'Sided'), + ], string="Chatter Position", default='normal') + + def __init__(self, pool, cr): """ Override of __init__ to add access rights. - Access rights are disabled by default, but allowed - on some specific fields defined in self.SELF_{READ/WRITE}ABLE_FIELDS. + Access rights are disabled by default, but allowed on some specific + fields defined in self.SELF_{READ/WRITE}ABLE_FIELDS. """ - init_res = super(ResUsers, self).__init__(pool, cr) + super(ResUsers, self).__init__(pool, cr) # duplicate list to avoid modifying the original reference type(self).SELF_WRITEABLE_FIELDS = list(self.SELF_WRITEABLE_FIELDS) type(self).SELF_WRITEABLE_FIELDS.extend(['chatter_position']) # duplicate list to avoid modifying the original reference type(self).SELF_READABLE_FIELDS = list(self.SELF_READABLE_FIELDS) type(self).SELF_READABLE_FIELDS.extend(['chatter_position']) - return init_res - - chatter_position = fields.Selection([ - ('normal', 'Normal'), - ('sided', 'Sided'), - ], string="Chatter Position", default='normal') From d6fb3c67cd8646eaf263692fec4341bcaa0b8e34 Mon Sep 17 00:00:00 2001 From: QS5ELkMu Date: Tue, 26 Jun 2018 16:50:13 +0200 Subject: [PATCH 198/399] [IMP] Adding res.users chatter_position read/write test --- web_responsive/models/inherited_res_users.py | 1 - web_responsive/tests/__init__.py | 1 + web_responsive/tests/test_res_users.py | 15 +++++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 web_responsive/tests/test_res_users.py diff --git a/web_responsive/models/inherited_res_users.py b/web_responsive/models/inherited_res_users.py index f584a7a24d99..7b80a9790e0d 100644 --- a/web_responsive/models/inherited_res_users.py +++ b/web_responsive/models/inherited_res_users.py @@ -12,7 +12,6 @@ class ResUsers(models.Model): ('sided', 'Sided'), ], string="Chatter Position", default='normal') - def __init__(self, pool, cr): """ Override of __init__ to add access rights. Access rights are disabled by default, but allowed on some specific diff --git a/web_responsive/tests/__init__.py b/web_responsive/tests/__init__.py index 6dab214ac806..cabee0673350 100644 --- a/web_responsive/tests/__init__.py +++ b/web_responsive/tests/__init__.py @@ -1 +1,2 @@ from . import test_ui +from . import test_res_users diff --git a/web_responsive/tests/test_res_users.py b/web_responsive/tests/test_res_users.py new file mode 100644 index 000000000000..e835b310be2a --- /dev/null +++ b/web_responsive/tests/test_res_users.py @@ -0,0 +1,15 @@ +# Copyright 2018 Alexandre Díaz +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from odoo.tests import common + +class TestResUsers(common.TransactionCase): + + def test_chatter_position_wr(self): + user_public = self.env.ref('base.public_user') + + self.assertEqual(user_public.chatter_position, 'normal') + user_public.sudo(user_public).write({ + 'chatter_position': 'sided', + }) + self.assertEqual(user_public.chatter_position, 'sided') From eb6013fe7c2610dee6cbd939bd4fd010e54defb6 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Wed, 27 Jun 2018 08:44:36 +0100 Subject: [PATCH 199/399] Fix linter --- web_responsive/tests/test_res_users.py | 1 + 1 file changed, 1 insertion(+) diff --git a/web_responsive/tests/test_res_users.py b/web_responsive/tests/test_res_users.py index e835b310be2a..6f4f032215f7 100644 --- a/web_responsive/tests/test_res_users.py +++ b/web_responsive/tests/test_res_users.py @@ -3,6 +3,7 @@ from odoo.tests import common + class TestResUsers(common.TransactionCase): def test_chatter_position_wr(self): From 0cefee21dc6695b7307b9b419e9cd5b98a3d3bc5 Mon Sep 17 00:00:00 2001 From: Dennis Sluijk Date: Thu, 28 Jun 2018 11:45:30 +0200 Subject: [PATCH 200/399] [FIX] web_timeline: Make colors attribute optional (#969) --- web_timeline/__manifest__.py | 2 +- web_timeline/static/src/js/timeline_view.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/web_timeline/__manifest__.py b/web_timeline/__manifest__.py index 165410d5f460..1ecd04b7bf9e 100644 --- a/web_timeline/__manifest__.py +++ b/web_timeline/__manifest__.py @@ -4,7 +4,7 @@ { 'name': "Web timeline", 'summary': "Interactive visualization chart to show events in time", - "version": "11.0.1.0.0", + "version": "11.0.1.0.1", 'author': 'ACSONE SA/NV, ' 'Tecnativa, ' 'Monk Software, ' diff --git a/web_timeline/static/src/js/timeline_view.js b/web_timeline/static/src/js/timeline_view.js index 1832b9ef6202..3d34beabc866 100644 --- a/web_timeline/static/src/js/timeline_view.js +++ b/web_timeline/static/src/js/timeline_view.js @@ -148,6 +148,8 @@ odoo.define('web_timeline.TimelineView', function (require) { 'value': temp.expressions[1].value }; }).value(); + } else { + this.colors = []; } }, From 3609dad1f666f356aba1dd6ac3cbba1ed610e0c9 Mon Sep 17 00:00:00 2001 From: Rodrigo Macedo Date: Thu, 28 Jun 2018 14:13:19 +0000 Subject: [PATCH 201/399] Translated using Weblate (Portuguese (Brazil)) Currently translated at 66.7% (6 of 9 strings) Translation: web-11.0/web-11.0-web_responsive Translate-URL: https://translation.odoo-community.org/projects/web-11-0/web-11-0-web_responsive/pt_BR/ --- web_responsive/i18n/pt_BR.po | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/web_responsive/i18n/pt_BR.po b/web_responsive/i18n/pt_BR.po index 3b8f3f2cf582..da91250e9d58 100644 --- a/web_responsive/i18n/pt_BR.po +++ b/web_responsive/i18n/pt_BR.po @@ -9,16 +9,16 @@ msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-06-22 08:27+0000\n" -"PO-Revision-Date: 2017-06-22 08:27+0000\n" -"Last-Translator: Rodrigo de Almeida Sottomaior Macedo " -", 2017\n" -"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" -"teams/23907/pt_BR/)\n" +"PO-Revision-Date: 2018-06-29 14:32+0000\n" +"Last-Translator: Rodrigo Macedo \n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/" +"23907/pt_BR/)\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.0.1\n" #. module: web_responsive #: model:ir.ui.view,arch_db:web_responsive.webclient_bootstrap @@ -53,7 +53,7 @@ msgstr "Mais " #. module: web_responsive #: selection:res.users,chatter_position:0 msgid "Normal" -msgstr "" +msgstr "Normal" #. module: web_responsive #: selection:res.users,chatter_position:0 @@ -63,4 +63,4 @@ msgstr "" #. module: web_responsive #: model:ir.model,name:web_responsive.model_res_users msgid "Users" -msgstr "" +msgstr "Usuários" From 72e24d61828cc1c4881f6e99ac20720c0b6945f4 Mon Sep 17 00:00:00 2001 From: QS5ELkMu Date: Sun, 1 Jul 2018 01:27:43 +0200 Subject: [PATCH 202/399] [IMP] Sticky Statusbar --- web_responsive/static/src/less/form_view.less | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/web_responsive/static/src/less/form_view.less b/web_responsive/static/src/less/form_view.less index f5f8b43f2f4c..6a6a78a7bfcd 100644 --- a/web_responsive/static/src/less/form_view.less +++ b/web_responsive/static/src/less/form_view.less @@ -152,4 +152,10 @@ .oe_chatter { min-width: inherit; } + + .o_form_statusbar { + position: sticky; + top: 0; + z-index: 1; + } } From 98c1fd885f428faba465b1bce2b1ad7800d6b4b0 Mon Sep 17 00:00:00 2001 From: QS5ELkMu Date: Sun, 1 Jul 2018 02:37:18 +0200 Subject: [PATCH 203/399] [IMP] Add sticky header & footer in list view --- web_responsive/static/src/less/form_view.less | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/web_responsive/static/src/less/form_view.less b/web_responsive/static/src/less/form_view.less index 6a6a78a7bfcd..f94b0072670d 100644 --- a/web_responsive/static/src/less/form_view.less +++ b/web_responsive/static/src/less/form_view.less @@ -52,6 +52,24 @@ } } +// Sticky Header & Footer in List View +.o_view_manager_content { + >div { + >.table-responsive { + >.o_list_view { + thead { + position: sticky; + top: 0; + } + tfoot { + position: sticky; + bottom: 0; + } + } + } + } +} + .o_form_view { // Form must fill 100% width in any size .o_form_sheet_bg { @@ -69,6 +87,12 @@ border: none; } } + + .o_form_statusbar { + position: sticky; + top: 0; + z-index: 1; + } } // No overflowing buttons or titles @@ -152,10 +176,4 @@ .oe_chatter { min-width: inherit; } - - .o_form_statusbar { - position: sticky; - top: 0; - z-index: 1; - } } From bb57b520024e733a6f6ef5e913f8f903f97a2427 Mon Sep 17 00:00:00 2001 From: QS5ELkMu Date: Wed, 4 Jul 2018 02:30:17 +0200 Subject: [PATCH 204/399] [FIX] Issue #906 --- .../static/src/js/web_tree_dynamic_colored_field.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/web_tree_dynamic_colored_field/static/src/js/web_tree_dynamic_colored_field.js b/web_tree_dynamic_colored_field/static/src/js/web_tree_dynamic_colored_field.js index d9e14c11c1e9..334db53734b5 100644 --- a/web_tree_dynamic_colored_field/static/src/js/web_tree_dynamic_colored_field.js +++ b/web_tree_dynamic_colored_field/static/src/js/web_tree_dynamic_colored_field.js @@ -17,15 +17,12 @@ odoo.define('web_tree_dynamic_colored_field', function (require) { if (colorAttr.length > 0) { var colorField = colorAttr[0].split(':')[1].trim(); // validate the presence of that field in tree view - var fieldNames = _(this.columns).map( - (value) => { return value.attrs.name; } - ); - if (fieldNames.indexOf(colorField) === -1) { + if (this.state.data.length && colorField in this.state.data[0].data) { + this.colorField = colorField; + } else { console.warn( "No field named '" + colorField + "' present in view." ); - } else { - this.colorField = colorField; } } } From 2e32662cac87fc85ab2c856fb4915724b072adb8 Mon Sep 17 00:00:00 2001 From: QS5ELkMu Date: Mon, 16 Jul 2018 01:14:41 +0200 Subject: [PATCH 205/399] [FIX][11.0][web_responsive] Views without sheet --- web_responsive/static/src/less/form_view.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_responsive/static/src/less/form_view.less b/web_responsive/static/src/less/form_view.less index f94b0072670d..1f58a8438789 100644 --- a/web_responsive/static/src/less/form_view.less +++ b/web_responsive/static/src/less/form_view.less @@ -8,7 +8,7 @@ // Sided Chatter @media (min-width: @screen-md) { .o_chatter_position_sided { - .o_form_view { + .o_form_view:not(.o_form_nosheet) { display: flex; height: 100%; From ad9f8d42c488228fa216c484384e371e89aceac9 Mon Sep 17 00:00:00 2001 From: Andrea Date: Tue, 27 Dec 2016 10:31:18 +0100 Subject: [PATCH 206/399] Add module web_disable_export_group --- web_disable_export_group/README.rst | 35 ++++++++++++++++ web_disable_export_group/__init__.py | 3 ++ web_disable_export_group/__manifest__.py | 18 ++++++++ web_disable_export_group/security/groups.xml | 8 ++++ .../static/src/js/disable_export_group.js | 41 +++++++++++++++++++ web_disable_export_group/templates/assets.xml | 10 +++++ 6 files changed, 115 insertions(+) create mode 100644 web_disable_export_group/README.rst create mode 100644 web_disable_export_group/__init__.py create mode 100644 web_disable_export_group/__manifest__.py create mode 100644 web_disable_export_group/security/groups.xml create mode 100644 web_disable_export_group/static/src/js/disable_export_group.js create mode 100644 web_disable_export_group/templates/assets.xml diff --git a/web_disable_export_group/README.rst b/web_disable_export_group/README.rst new file mode 100644 index 000000000000..3eee5cecba1e --- /dev/null +++ b/web_disable_export_group/README.rst @@ -0,0 +1,35 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +======================== +Web Disable Export Group +======================== + +In the standard Odoo the UI option 'Export' that is present in the 'Action' menu +of any list view is always enabled (for every user). + +This module makes the option 'Export' enabled only for the users that belong +to the Export Data group. + +Admin user can always use the export option. + + +Usage +===== + +Enable the group "Export Data group" to the users who are allowed to +make use of the option 'Export'. + + +Credits +======= + +Original code from module web_disable_export by Noviat, +reviewed and modified by Onestein. + +Contributors +------------ + +* Dennis Sluijk +* Andrea Stirpe diff --git a/web_disable_export_group/__init__.py b/web_disable_export_group/__init__.py new file mode 100644 index 000000000000..9b9ad0f122dd --- /dev/null +++ b/web_disable_export_group/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Onestein () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). diff --git a/web_disable_export_group/__manifest__.py b/web_disable_export_group/__manifest__.py new file mode 100644 index 000000000000..32e48d5c6a1b --- /dev/null +++ b/web_disable_export_group/__manifest__.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Onestein () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + 'name': 'Web Disable Export Group', + 'version': '10.0.1.0.0', + 'license': 'AGPL-3', + 'author': 'Onestein', + 'website': 'http://www.onestein.eu', + 'category': 'Web', + 'depends': ['web'], + 'data': [ + 'security/groups.xml', + 'templates/assets.xml', + ], + 'installable': True, +} diff --git a/web_disable_export_group/security/groups.xml b/web_disable_export_group/security/groups.xml new file mode 100644 index 000000000000..b06e8e83a295 --- /dev/null +++ b/web_disable_export_group/security/groups.xml @@ -0,0 +1,8 @@ + + + + + Export Data + + + diff --git a/web_disable_export_group/static/src/js/disable_export_group.js b/web_disable_export_group/static/src/js/disable_export_group.js new file mode 100644 index 000000000000..2f5740e5a539 --- /dev/null +++ b/web_disable_export_group/static/src/js/disable_export_group.js @@ -0,0 +1,41 @@ +odoo.define("web_disable_export_group", function(require) { +"use strict"; + + var core = require("web.core"); + var Sidebar = require("web.Sidebar"); + var _t = core._t; + var Model = require("web.Model"); + var session = require("web.session"); + + Sidebar.include({ + add_items: function(section_code, items) { + var self = this; + var _super = this._super; + if (session.is_superuser) { + _super.apply(this, arguments); + } else { + var model_res_users = new Model("res.users"); + model_res_users.call("has_group", ["web_disable_export_group.group_export_data"]).done(function(can_export) { + if (!can_export) { + var export_label = _t("Export"); + var new_items = items; + if (section_code === "other") { + new_items = []; + for (var i = 0; i < items.length; i++) { + console.log("items[i]: ", items[i]); + if (items[i]["label"] !== export_label) { + new_items.push(items[i]); + } + } + } + if (new_items.length > 0) { + _super.call(self, section_code, new_items); + } + } else { + _super.call(self, section_code, items); + } + }); + } + } + }); +}); diff --git a/web_disable_export_group/templates/assets.xml b/web_disable_export_group/templates/assets.xml new file mode 100644 index 000000000000..e9fe7f05ad9f --- /dev/null +++ b/web_disable_export_group/templates/assets.xml @@ -0,0 +1,10 @@ + + + + + + From 9decd5988dc0e5b73a8c9f059759dc1f094e54b0 Mon Sep 17 00:00:00 2001 From: QS5ELkMu Date: Tue, 17 Jul 2018 21:24:50 +0200 Subject: [PATCH 207/399] [11.0][FIX][web_group_expand] Fix issue #987 & Improvements (#993) * Fixes issue #987 * Follow new readme structure * Use Less * Hide expand/collapse buttons if select a view type that isn't a 'list' --- web_group_expand/readme/CONTRIBUTORS.rst | 7 +++++ web_group_expand/readme/DESCRIPTION.rst | 4 +++ .../static/src/css/web_group_expand.css | 8 ------ .../static/src/js/web_group_expand.js | 27 ++++++++++++------- .../static/src/less/web_group_expand.less | 10 +++++++ web_group_expand/templates/assets.xml | 2 +- 6 files changed, 39 insertions(+), 19 deletions(-) create mode 100644 web_group_expand/readme/CONTRIBUTORS.rst create mode 100644 web_group_expand/readme/DESCRIPTION.rst delete mode 100644 web_group_expand/static/src/css/web_group_expand.css create mode 100644 web_group_expand/static/src/less/web_group_expand.less diff --git a/web_group_expand/readme/CONTRIBUTORS.rst b/web_group_expand/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000000..f8c448d73977 --- /dev/null +++ b/web_group_expand/readme/CONTRIBUTORS.rst @@ -0,0 +1,7 @@ +* Mantavya Gajjar +* Oihane Crucelaegui +* Pedro M. Baeza +* Jay Vora (SerpentCS) for their alternative implementation +* Aldo Soares +* Meet Dholakia +* Alexandre Díaz diff --git a/web_group_expand/readme/DESCRIPTION.rst b/web_group_expand/readme/DESCRIPTION.rst new file mode 100644 index 000000000000..b771e3b6f7e9 --- /dev/null +++ b/web_group_expand/readme/DESCRIPTION.rst @@ -0,0 +1,4 @@ +A group by list can be expanded and collapased with buttons + +You'll see two buttons appear on top right corner of the list when you perform +a group by with which you can expand and collapse grouped records by level. diff --git a/web_group_expand/static/src/css/web_group_expand.css b/web_group_expand/static/src/css/web_group_expand.css deleted file mode 100644 index 6360421183a0..000000000000 --- a/web_group_expand/static/src/css/web_group_expand.css +++ /dev/null @@ -1,8 +0,0 @@ -.o_favorites_menu + .toggle_buttons{ - float: left; - padding-left: 5px; -} - -.o_favorites_menu + .toggle_buttons button{ - display: inline; -} \ No newline at end of file diff --git a/web_group_expand/static/src/js/web_group_expand.js b/web_group_expand/static/src/js/web_group_expand.js index e222a0bd53b6..aa8fc420c070 100644 --- a/web_group_expand/static/src/js/web_group_expand.js +++ b/web_group_expand/static/src/js/web_group_expand.js @@ -23,21 +23,28 @@ odoo.define('web_group_expand.web_group_expand', function (require) { } }) }, - }) + }); ViewManager.include({ - + init: function(parent, dataset, views, flags, options) { + this._super.apply(this, arguments); + this._has_groupby_search = false; + }, _process_search_data: function () { var res = this._super.apply(this, arguments); - if (this.active_view && this.active_view.type == 'list' && this.searchview) { - if(this.searchview.groupby_expand_menu){ - var has_groups = res.groupBy.length > 0 - this.searchview.groupby_expand_menu.do_toggle_visibility(has_groups) - } - }else{ - this.searchview.groupby_expand_menu.do_toggle_visibility(false) - } + this._has_groupby_search = (res.groupBy.length > 0); + this._set_groupby_expand_menu_visible(this._has_groupby_search && this.active_view && this.active_view.type === 'list'); return res; }, + switch_mode: function(view_type, view_options) { + return this._super.apply(this, arguments).then(function() { + this._set_groupby_expand_menu_visible(this._has_groupby_search && view_type === 'list'); + }.bind(this)); + }, + _set_groupby_expand_menu_visible: function(is_visible) { + if (this.searchview && this.searchview.groupby_expand_menu) { + this.searchview.groupby_expand_menu.do_toggle_visibility(is_visible); + } + }, }); }); diff --git a/web_group_expand/static/src/less/web_group_expand.less b/web_group_expand/static/src/less/web_group_expand.less new file mode 100644 index 000000000000..c3fd446e42f6 --- /dev/null +++ b/web_group_expand/static/src/less/web_group_expand.less @@ -0,0 +1,10 @@ +.o_favorites_menu { + +.toggle_buttons { + float: left; + padding-left: 5px; + + button { + display: inline; + } + } +} diff --git a/web_group_expand/templates/assets.xml b/web_group_expand/templates/assets.xml index ec62493c44d1..0ba586be5326 100644 --- a/web_group_expand/templates/assets.xml +++ b/web_group_expand/templates/assets.xml @@ -2,7 +2,7 @@