diff --git a/addons/web/static/src/js/widgets/progress_bar.js b/addons/web/static/src/js/widgets/progress_bar.js index 814afd8c412..81d7452f35e 100644 --- a/addons/web/static/src/js/widgets/progress_bar.js +++ b/addons/web/static/src/js/widgets/progress_bar.js @@ -22,7 +22,7 @@ var ProgressBar = Widget.extend({ 'change input': 'on_change_input', 'input input': 'on_change_input', 'click .o_progress': function(e) { - if(!this.readonly) { + if(!this.readonly && this.edit_on_click) { var $target = $(e.currentTarget); this.set('value', Math.floor((e.pageX - $target.offset().left) / $target.outerWidth() * this.get('max_value'))); } @@ -34,15 +34,19 @@ var ProgressBar = Widget.extend({ options = _.defaults(options || {}, { readonly: true, + edit_on_click: false, value: 0, max_value: 100, - title: '' + title: '', + edit_max_value: false, }); this.readonly = options.readonly; + this.edit_on_click = options.edit_on_click; this.set('value', options.value); this.set('max_value', options.max_value); this.title = options.title; + this.edit_max_value = options.edit_max_value; this.on('change:value', this, this._render_value); this.on('change:max_value', this, this._render_value); @@ -64,17 +68,23 @@ var ProgressBar = Widget.extend({ $input.select(); } } else { - this.set('value', $(e.target).val()); + this.set(this.edit_max_value ? 'max_value' : 'value', $(e.target).val()); } } }, - _render_value: function(value) { - if(isNaN(value)) { - value = this.get('value'); + _render_value: function(v) { + var value = this.get('value'); + var max_value = this.get('max_value'); + if(!isNaN(v)) { + if(this.edit_max_value) { + max_value = v; + } else { + value = v; + } } value = value || 0; - var max_value = this.get('max_value'); + max_value = max_value || 0; var widthComplete; if(value <= max_value) { @@ -92,8 +102,8 @@ var ProgressBar = Widget.extend({ } else { this.$('.o_progressbar_value').html(utils.human_number(value) + "%"); } - } else { - this.$('.o_progressbar_value').val(value); + } else if(isNaN(v)) { + this.$('.o_progressbar_value').val(this.edit_max_value ? max_value : value); } } }); diff --git a/addons/web_kanban/static/src/js/kanban_common.js b/addons/web_kanban/static/src/js/kanban_common.js index a214a23bbf2..b63758aaa28 100644 --- a/addons/web_kanban/static/src/js/kanban_common.js +++ b/addons/web_kanban/static/src/js/kanban_common.js @@ -856,7 +856,7 @@ var KanbanGroup = Widget.extend({ var KanbanProgressBar = AbstractField.extend({ events: { 'click': function() { - if(this.progressbar.readonly) { + if(!this.readonly && this.progressbar.readonly) { this.toggle_progressbar(); } } @@ -870,7 +870,8 @@ var KanbanProgressBar = AbstractField.extend({ readonly: true, value: record[this.options.current_value].raw_value, max_value: record[this.options.max_value].raw_value, - title: this.options.title + title: this.options.title, + edit_max_value: this.options.edit_max_value, }); this.readonly = !this.options.editable; @@ -888,8 +889,8 @@ var KanbanProgressBar = AbstractField.extend({ return $.when(this._super(), def).then(function() { if(!self.readonly) { var parent = self.getParent(); - self.progressbar.on('change:value', self, function(e) { - var value = this.progressbar.get('value') || 0; + self.progressbar.on('change:value change:max_value', self, function(e) { + var value = this.progressbar.get(this.progressbar.edit_max_value ? 'max_value' : 'value') || 0; if(!isNaN(value)) { parent.view.dataset.call(this.on_change, [parent.id, value]).then(function() { self.toggle_progressbar();