diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 04e9687115f..5fbbd1e84ef 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2367,7 +2367,42 @@ instance.web.form.DropdownSelection = instance.web.form.FieldChar.extend({ this.$el.on('mouseenter mouseleave', function(e) { self.$el.find('.caret').toggleClass('hidden', e.type == 'mouseleave'); }); - + }, + on_click_block_reason: function(event) { + var self = this; + var li = $(event.target).closest( "li" ); + $('div.oe_edit_actions').remove(); + self.$dialog = new instance.web.dialog($('
'), { + modal: true, + width: 'auto', + height: 'auto', + title: _t('Reason for blocking'), + buttons: [ + { + class: 'oe_highlight', + text: _t("Block"), click: function() { + if ($("#txtReason").val() == "") { + alert('Reason Required'); + } else { + value[self.name] = String(li.data('value')); + var reason = $("#txtReason").val() + $(this).dialog("close"); + if (self.record_id) { + self.view.dataset._model.call('write', [[self.record_id], value, self.view.dataset.get_context()]) + return self.view.dataset._model.call('message_post', [[self.record_id], reason]).done(self.reload_record.bind(self)); + } else { + return self.view.on_button_save().done(function(result) { + if (result) { + self.view.dataset._model.call('write', [[result], value, self.view.dataset.get_context()]).done(self.reload_record.bind(self)); + } + }); + } + }; + } + }, + { text: _t("Cancel"), click: function() { $(this).dialog("close"); }} + ], + }); }, do_action: function(e) { var self = this; @@ -2375,12 +2410,22 @@ instance.web.form.DropdownSelection = instance.web.form.FieldChar.extend({ if (li.length) { var value = {}; value[self.name] = String(li.data('value')); - if (self.record_id) { - return self.view.dataset._model.call('write', [[self.record_id], value, self.view.dataset.get_context()]).done(self.reload_record.bind(self)); - } else { - return self.view.on_button_save().done(function(result) { - if (result) { - self.view.dataset._model.call('write', [[result], value, self.view.dataset.get_context()]).done(self.reload_record.bind(self)); + if (self.view.datarecord.stage_id) { + var stage_id = _.isArray(self.view.datarecord.stage_id) ? self.view.datarecord.stage_id[0] : self.view.datarecord.stage_id + new openerp.web.Model(self.view.fields.stage_id.field.relation).query([]) + .filter([["id", "=", stage_id]]).first().then(function(res) { + if ((res.block_reason) && value[self.name] == 'blocked') { + self.on_click_block_reason(e); + } else { + if (self.record_id) { + return self.view.dataset._model.call('write', [[self.record_id], value, self.view.dataset.get_context()]).done(self.reload_record.bind(self)); + } else { + return self.view.on_button_save().done(function(result) { + if (result) { + self.view.dataset._model.call('write', [[result], value, self.view.dataset.get_context()]).done(self.reload_record.bind(self)); + } + }); + } } }); } diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index 934de72c570..919e5cb17bc 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -1334,15 +1334,54 @@ instance.web_kanban.DropdownSelection = instance.web_kanban.AbstractField.extend self.$el.find('.caret').toggleClass('hidden', e.type == 'mouseleave'); }); }, + + on_click_block_reason: function(event) { + var self = this; + var li = $(event.target).closest( "li" ); + $('div.oe_edit_actions').remove(); + self.$dialog = new instance.web.dialog($('
'), { + modal: true, + width: 'auto', + height: 'auto', + title: _t('Reason for blocking'), + buttons: [ + { + class: 'oe_highlight', + text: _t("Block"), click: function() { + if ($("#txtReason").val() == "") { + alert('Reason Required'); + } else { + value[self.name] = String(li.data('value')); + var reason = $("#txtReason").val(); + $(this).dialog("close"); + self.parent.view.dataset._model.call('write', [[self.record_id], value, self.parent.view.dataset.get_context()]).done(self.reload_record.bind(self.parent)); + return self.parent.view.dataset._model.call('message_post', [[self.record_id], reason]); + }; + }}, + { text: _t("Cancel"), click: function() { $(this).dialog("close"); }} + ], + }); +}, do_action: function(e) { var self = this; var li = $(e.target).closest( "li" ); if (li.length) { var value = {}; value[self.name] = String(li.data('value')); - return self.parent.view.dataset._model.call('write', [[self.record_id], value, self.parent.view.dataset.get_context()]).done(self.reload_record.bind(self.parent)); - } - }, + if (self.parent.group.value) { + var stage_id = self.parent.group.value + new openerp.web.Model(self.parent.record.stage_id.relation).query([]) + .filter([["id", "=", stage_id]]).first().then(function(res) { + if ((res.block_reason) && value[self.name] == 'blocked') { + self.on_click_block_reason(e); + } else { + return self.parent.view.dataset._model.call('write', [[self.record_id], value, self.parent.view.dataset.get_context()]).done(self.reload_record.bind(self.parent)); + } + }); + } + } + }, + reload_record: function() { this.do_reload(); },