summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js/views')
-rw-r--r--addons/web/static/src/js/views/form/form_controller.js4
-rw-r--r--addons/web/static/src/js/views/view_dialogs.js47
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