summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/view_dialogs.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js/views/view_dialogs.js')
-rw-r--r--addons/web/static/src/js/views/view_dialogs.js47
1 files changed, 41 insertions, 6 deletions
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