diff options
Diffstat (limited to 'addons/web/static/src/js/views')
| -rw-r--r-- | addons/web/static/src/js/views/form/form_controller.js | 4 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/view_dialogs.js | 47 |
2 files changed, 45 insertions, 6 deletions
diff --git a/addons/web/static/src/js/views/form/form_controller.js b/addons/web/static/src/js/views/form/form_controller.js index d0ca5c3d09f..5e669e0aa57 100644 --- a/addons/web/static/src/js/views/form/form_controller.js +++ b/addons/web/static/src/js/views/form/form_controller.js @@ -597,8 +597,10 @@ var FormController = BasicController.extend({ fields_view: data.fields_view, model: this.model, on_saved: data.on_saved, + on_remove: data.on_remove, parentID: data.parentID, readonly: data.readonly, + deletable: data.deletable, recordID: record && record.id, res_id: record && record.res_id, res_model: data.field.relation, @@ -620,7 +622,9 @@ var FormController = BasicController.extend({ context: event.data.context, fields_view: event.data.fields_view, on_saved: event.data.on_saved, + on_remove: event.data.on_remove, readonly: event.data.readonly, + deletable: event.data.deletable, res_id: record.res_id, res_model: record.model, title: _t("Open: ") + event.data.string, diff --git a/addons/web/static/src/js/views/view_dialogs.js b/addons/web/static/src/js/views/view_dialogs.js index e99f81ccb08..b8eadf4fe69 100644 --- a/addons/web/static/src/js/views/view_dialogs.js +++ b/addons/web/static/src/js/views/view_dialogs.js @@ -1,6 +1,7 @@ odoo.define('web.view_dialogs', function (require) { "use strict"; +var config = require('web.config'); var core = require('web.core'); var data = require('web.data'); var Dialog = require('web.Dialog'); @@ -35,6 +36,7 @@ var ViewDialog = Dialog.extend({ */ init: function (parent, options) { options = options || {}; + options.fullscreen = config.device.isMobile; options.dialogClass = options.dialogClass || '' + ' o_act_window'; this._super(parent, $.extend(true, {}, options)); @@ -81,9 +83,15 @@ var FormViewDialog = ViewDialog.extend({ * @param {Object} [options.fields_view] optional form fields_view * @param {boolean} [options.readonly=false] only applicable when not in * creation mode + * @param {boolean} [options.deletable=false] whether or not the record can + * be deleted + * @param {boolean} [options.disable_multiple_selection=false] set to true + * to remove the possibility to create several records in a row * @param {function} [options.on_saved] callback executed after saving a * record. It will be called with the record data, and a boolean which * indicates if something was changed + * @param {function} [options.on_remove] callback executed when the user + * clicks on the 'Remove' button * @param {BasicModel} [options.model] if given, it will be used instead of * a new form view model * @param {string} [options.recordID] if given, the model has to be given as @@ -93,20 +101,24 @@ var FormViewDialog = ViewDialog.extend({ */ init: function (parent, options) { var self = this; + options = options || {}; this.res_id = options.res_id || null; this.on_saved = options.on_saved || (function () {}); + this.on_remove = options.on_remove || (function () {}); this.context = options.context; this.model = options.model; this.parentID = options.parentID; this.recordID = options.recordID; this.shouldSaveLocally = options.shouldSaveLocally; + this.readonly = options.readonly; + this.deletable = options.deletable; + this.disable_multiple_selection = options.disable_multiple_selection; var multi_select = !_.isNumber(options.res_id) && !options.disable_multiple_selection; var readonly = _.isNumber(options.res_id) && options.readonly; - if (!options || !options.buttons) { - options = options || {}; + if (!options.buttons) { options.buttons = [{ text: (readonly ? _t("Close") : _t("Discard")), classes: "btn-secondary o_form_button_cancel", @@ -138,6 +150,15 @@ var FormViewDialog = ViewDialog.extend({ }, }); } + + var multi = options.disable_multiple_selection; + if (!multi && this.deletable) { + options.buttons.push({ + text: _t("Remove"), + classes: 'btn-secondary o_btn_remove', + click: this._remove.bind(this), + }); + } } } this._super(parent, options); @@ -209,6 +230,7 @@ var FormViewDialog = ViewDialog.extend({ //-------------------------------------------------------------------------- // Private //-------------------------------------------------------------------------- + /** * @override */ @@ -216,13 +238,26 @@ var FormViewDialog = ViewDialog.extend({ this.trigger_up('form_dialog_discarded'); return true; }, + + /** + * @private + */ + _remove: function () { + this.on_remove(); + this.close(); + }, + + /** + * @private + * @returns {Deferred} + */ _save: function () { var self = this; return this.form_view.saveRecord(this.form_view.handle, { - stayInEdit: true, - reload: false, - savePoint: this.shouldSaveLocally, - viewType: 'form', + stayInEdit: true, + reload: false, + savePoint: this.shouldSaveLocally, + viewType: 'form', }).then(function (changedFields) { // record might have been changed by the save (e.g. if this was a new record, it has an // id now), so don't re-use the copy obtained before the save |
