[MIG] web_timeline: Finish migration to 13.0

This commit is contained in:
Alexandre Díaz
2020-03-23 02:39:25 +01:00
committed by CarlosRoca13
parent 1e21541b8f
commit 63c0353f28
23 changed files with 2166 additions and 1046 deletions

View File

@@ -1,27 +1,27 @@
odoo.define('web_timeline.TimelineController', function (require) {
odoo.define("web_timeline.TimelineController", function(require) {
"use strict";
var AbstractController = require('web.AbstractController');
var dialogs = require('web.view_dialogs');
var core = require('web.core');
var time = require('web.time');
var Dialog = require('web.Dialog');
const AbstractController = require("web.AbstractController");
const dialogs = require("web.view_dialogs");
const core = require("web.core");
const time = require("web.time");
const Dialog = require("web.Dialog");
var _t = core._t;
const _t = core._t;
var TimelineController = AbstractController.extend({
const TimelineController = AbstractController.extend({
custom_events: _.extend({}, AbstractController.prototype.custom_events, {
onGroupClick: '_onGroupClick',
onUpdate: '_onUpdate',
onRemove: '_onRemove',
onMove: '_onMove',
onAdd: '_onAdd',
onGroupClick: "_onGroupClick",
onUpdate: "_onUpdate",
onRemove: "_onRemove",
onMove: "_onMove",
onAdd: "_onAdd",
}),
/**
* @override
*/
init: function (parent, model, renderer, params) {
init: function(parent, model, renderer, params) {
this._super.apply(this, arguments);
this.open_popup_action = params.open_popup_action;
this.date_start = params.date_start;
@@ -35,77 +35,81 @@ odoo.define('web_timeline.TimelineController', function (require) {
/**
* @override
*/
update: function (params, options) {
var res = this._super.apply(this, arguments);
update: function(params, options) {
const res = this._super.apply(this, arguments);
if (_.isEmpty(params)) {
return res;
}
var defaults = _.defaults({}, options, {
const defaults = _.defaults({}, options, {
adjust_window: true,
});
var self = this;
var domains = params.domain;
var contexts = params.context;
var group_bys = params.groupBy;
const domains = params.domain;
const contexts = params.context;
const group_bys = params.groupBy;
this.last_domains = domains;
this.last_contexts = contexts;
// Select the group by
var n_group_bys = group_bys;
let n_group_bys = group_bys;
if (!n_group_bys.length && this.renderer.arch.attrs.default_group_by) {
n_group_bys = this.renderer.arch.attrs.default_group_by.split(',');
n_group_bys = this.renderer.arch.attrs.default_group_by.split(",");
}
this.renderer.last_group_bys = n_group_bys;
this.renderer.last_domains = domains;
var fields = this.renderer.fieldNames;
let fields = this.renderer.fieldNames;
fields = _.uniq(fields.concat(n_group_bys));
return $.when(
res,
self._rpc({
model: self.model.modelName,
method: 'search_read',
this._rpc({
model: this.model.modelName,
method: "search_read",
kwargs: {
fields: fields,
domain: domains,
},
context: self.getSession().user_context,
}).then(function (data) {
return self.renderer.on_data_loaded(data, n_group_bys, defaults.adjust_window);
})
context: this.getSession().user_context,
}).then(data =>
this.renderer.on_data_loaded(
data,
n_group_bys,
defaults.adjust_window
)
)
);
},
/**
* Gets triggered when a group in the timeline is clicked (by the TimelineRenderer).
* Gets triggered when a group in the timeline is
* clicked (by the TimelineRenderer).
*
* @private
* @param {EventObject} event
* @returns {jQuery.Deferred}
*/
_onGroupClick: function (event) {
var groupField = this.renderer.last_group_bys[0];
_onGroupClick: function(event) {
const groupField = this.renderer.last_group_bys[0];
return this.do_action({
type: 'ir.actions.act_window',
res_model: this.renderer.view.fields[groupField].relation,
type: "ir.actions.act_window",
res_model: this.renderer.fields[groupField].relation,
res_id: event.data.item.group,
target: 'new',
views: [[false, 'form']],
target: "new",
views: [[false, "form"]],
});
},
/**
* Opens a form view of a clicked timeline item (triggered by the TimelineRenderer).
* Opens a form view of a clicked timeline
* item (triggered by the TimelineRenderer).
*
* @private
* @param {EventObject} event
*/
_onUpdate: function (event) {
var self = this;
_onUpdate: function(event) {
this.renderer = event.data.renderer;
var rights = event.data.rights;
var item = event.data.item;
var id = Number(item.evt.id) || item.evt.id;
var title = item.evt.__name;
const rights = event.data.rights;
const item = event.data.item;
const id = Number(item.evt.id) || item.evt.id;
const title = item.evt.__name;
if (this.open_popup_action) {
new dialogs.FormViewDialog(this, {
res_model: this.model.modelName,
@@ -113,17 +117,17 @@ odoo.define('web_timeline.TimelineController', function (require) {
context: this.getSession().user_context,
title: title,
view_id: Number(this.open_popup_action),
on_saved: function () {
self.write_completed();
on_saved: () => {
this.write_completed();
},
}).open();
} else {
var mode = 'readonly';
let mode = "readonly";
if (rights.write) {
mode = 'edit';
mode = "edit";
}
this.trigger_up('switch_view', {
view_type: 'form',
this.trigger_up("switch_view", {
view_type: "form",
res_id: id,
mode: mode,
model: this.model.modelName,
@@ -132,38 +136,49 @@ odoo.define('web_timeline.TimelineController', function (require) {
},
/**
* Gets triggered when a timeline item is moved (triggered by the TimelineRenderer).
* Gets triggered when a timeline item is
* moved (triggered by the TimelineRenderer).
*
* @private
* @param {EventObject} event
*/
_onMove: function (event) {
var item = event.data.item;
var view = this.renderer.view;
var fields = view.fields;
var event_start = item.start;
var event_end = item.end;
var group = false;
_onMove: function(event) {
const item = event.data.item;
const fields = this.renderer.fields;
const event_start = item.start;
const event_end = item.end;
let group = false;
if (item.group !== -1) {
group = item.group;
}
var data = {};
const data = {};
// In case of a move event, the date_delay stay the same,
// only date_start and stop must be updated
data[this.date_start] = time.auto_date_to_str(event_start, fields[this.date_start].type);
data[this.date_start] = time.auto_date_to_str(
event_start,
fields[this.date_start].type
);
if (this.date_stop) {
// In case of instantaneous event, item.end is not defined
if (event_end) {
data[this.date_stop] = time.auto_date_to_str(event_end, fields[this.date_stop].type);
data[this.date_stop] = time.auto_date_to_str(
event_end,
fields[this.date_stop].type
);
} else {
data[this.date_stop] = data[this.date_start];
}
}
if (this.date_delay && event_end) {
var diff_seconds = Math.round((event_end.getTime() - event_start.getTime()) / 1000);
const diff_seconds = Math.round(
(event_end.getTime() - event_start.getTime()) / 1000
);
data[this.date_delay] = diff_seconds / 3600;
}
if (this.renderer.last_group_bys && this.renderer.last_group_bys instanceof Array) {
if (
this.renderer.last_group_bys &&
this.renderer.last_group_bys instanceof Array
) {
data[this.renderer.last_group_bys[0]] = group;
}
@@ -177,31 +192,30 @@ odoo.define('web_timeline.TimelineController', function (require) {
},
/**
* Write enqueued moves to Odoo. After all writes are finished it updates the view once
* (prevents flickering of the view when multiple timeline items are moved at once).
* Write enqueued moves to Odoo. After all writes are finished it updates
* the view once (prevents flickering of the view when multiple timeline items
* are moved at once).
*
* @returns {jQuery.Deferred}
*/
internalMove: function () {
var self = this;
var queues = this.moveQueue.slice();
internalMove: function() {
const queues = this.moveQueue.slice();
this.moveQueue = [];
var defers = [];
const defers = [];
for (const item of queues) {
defers.push(self._rpc({
model: self.model.modelName,
method: 'write',
args: [
[item.event.data.item.id],
item.data,
],
context: self.getSession().user_context,
}).then(function () {
item.event.data.callback(item.event.data.item);
}));
defers.push(
this._rpc({
model: this.model.modelName,
method: "write",
args: [[item.event.data.item.id], item.data],
context: this.getSession().user_context,
}).then(() => {
item.event.data.callback(item.event.data.item);
})
);
}
return $.when.apply($, defers).done(function () {
self.write_completed({
return $.when.apply($, defers).done(() => {
this.write_completed({
adjust_window: false,
});
});
@@ -215,14 +229,13 @@ odoo.define('web_timeline.TimelineController', function (require) {
* @param {EventObject} event
* @returns {jQuery.Deferred}
*/
_onRemove: function (event) {
var self = this;
_onRemove: function(event) {
var def = $.Deferred();
Dialog.confirm(this, _t("Are you sure you want to delete this record?"), {
title: _t("Warning"),
confirm_callback: function () {
self.remove_completed(event).then(def.resolve.bind(def));
confirm_callback: () => {
this.remove_completed(event).then(def.resolve.bind(def));
},
cancel_callback: def.resolve.bind(def),
});
@@ -237,27 +250,27 @@ odoo.define('web_timeline.TimelineController', function (require) {
* @param {EventObject} event
* @returns {dialogs.FormViewDialog}
*/
_onAdd: function (event) {
var self = this;
var item = event.data.item;
_onAdd: function(event) {
const item = event.data.item;
// Initialize default values for creation
var default_context = {};
default_context['default_'.concat(this.date_start)] = item.start;
const default_context = {};
default_context["default_".concat(this.date_start)] = item.start;
if (this.date_delay) {
default_context['default_'.concat(this.date_delay)] = 1;
default_context["default_".concat(this.date_delay)] = 1;
}
if (this.date_start) {
default_context['default_'.concat(this.date_start)] = moment(item.start).add(1, 'hours').format(
'YYYY-MM-DD HH:mm:ss'
);
default_context["default_".concat(this.date_start)] = moment(item.start)
.add(1, "hours")
.format("YYYY-MM-DD HH:mm:ss");
}
if (this.date_stop && item.end) {
default_context['default_'.concat(this.date_stop)] = moment(item.end).add(1, 'hours').format(
'YYYY-MM-DD HH:mm:ss'
);
default_context["default_".concat(this.date_stop)] = moment(item.end)
.add(1, "hours")
.format("YYYY-MM-DD HH:mm:ss");
}
if (item.group > 0) {
default_context['default_'.concat(this.renderer.last_group_bys[0])] = item.group;
default_context["default_".concat(this.renderer.last_group_bys[0])] =
item.group;
}
// Show popup
new dialogs.FormViewDialog(this, {
@@ -265,12 +278,14 @@ odoo.define('web_timeline.TimelineController', function (require) {
res_id: null,
context: _.extend(default_context, this.context),
view_id: Number(this.open_popup_action),
on_saved: function (record) {
self.create_completed([record.res_id]);
on_saved: record => {
this.create_completed([record.res_id]);
},
}).open().on('closed', this, function () {
event.data.callback();
});
})
.open()
.on("closed", this, () => {
event.data.callback();
});
return false;
},
@@ -282,22 +297,18 @@ odoo.define('web_timeline.TimelineController', function (require) {
* @param {RecordId} id
* @returns {jQuery.Deferred}
*/
create_completed: function (id) {
var self = this;
create_completed: function(id) {
return this._rpc({
model: this.model.modelName,
method: 'read',
args: [
id,
this.model.fieldNames,
],
method: "read",
args: [id, this.model.fieldNames],
context: this.context,
}).then(function (records) {
var new_event = self.renderer.event_data_transform(records[0]);
var items = self.renderer.timeline.itemsData;
}).then(records => {
var new_event = this.renderer.event_data_transform(records[0]);
var items = this.renderer.timeline.itemsData;
items.add(new_event);
self.renderer.timeline.setItems(items);
self.reload();
this.renderer.timeline.setItems(items);
this.reload();
});
},
@@ -305,8 +316,8 @@ odoo.define('web_timeline.TimelineController', function (require) {
* Triggered upon completion of writing a record.
* @param {ControllerOptions} options
*/
write_completed: function (options) {
var params = {
write_completed: function(options) {
const params = {
domain: this.renderer.last_domains,
context: this.context,
groupBy: this.renderer.last_group_bys,
@@ -319,22 +330,21 @@ odoo.define('web_timeline.TimelineController', function (require) {
* @param {EventObject} event
* @returns {jQuery.Deferred}
*/
remove_completed: function (event) {
var self = this;
return self._rpc({
model: self.modelName,
method: 'unlink',
remove_completed: function(event) {
return this._rpc({
model: this.modelName,
method: "unlink",
args: [[event.data.item.id]],
context: self.getSession().user_context,
}).then(function () {
var unlink_index = false;
for (var i = 0; i < self.model.data.data.length; i++) {
if (self.model.data.data[i].id === event.data.item.id) {
context: this.getSession().user_context,
}).then(() => {
let unlink_index = false;
for (var i = 0; i < this.model.data.data.length; i++) {
if (this.model.data.data[i].id === event.data.item.id) {
unlink_index = i;
}
}
if (!isNaN(unlink_index)) {
self.model.data.data.splice(unlink_index, 1);
this.model.data.data.splice(unlink_index, 1);
}
event.data.callback(event.data.item);
});