From 46a43f61d3584b015ad83043e1fb435d6d0163f6 Mon Sep 17 00:00:00 2001 From: Tom Blauwendraat Date: Mon, 3 Dec 2018 18:18:28 +0100 Subject: [PATCH] [FIX] all kinds of fixes related to backporting --- web_timeline/static/src/js/web_timeline.js | 130 ++++++++++++++------- web_timeline/views/web_timeline.xml | 8 +- 2 files changed, 91 insertions(+), 47 deletions(-) diff --git a/web_timeline/static/src/js/web_timeline.js b/web_timeline/static/src/js/web_timeline.js index 53b5eeff0..1b1557c6b 100644 --- a/web_timeline/static/src/js/web_timeline.js +++ b/web_timeline/static/src/js/web_timeline.js @@ -185,8 +185,8 @@ openerp.web_timeline = function(instance) { onMove: self.on_move, onUpdate: self.on_update, onRemove: self.on_remove, - orientation: 'both', }; + self.timeline = new vis.Timeline(self.$timeline.empty().get(0)); self.timeline.setOptions(options); if(self.mode && self['on_scale_' + self.mode + '_clicked']) @@ -242,6 +242,7 @@ openerp.web_timeline = function(instance) { } else { group = -1; } + _.each(self.colors, function(color){ if(eval("'" + evt[color.field] + "' " + color.opt + " '" + color.value + "'")) self.color = color.color; @@ -278,6 +279,8 @@ openerp.web_timeline = function(instance) { return self.fields_view.arch.attrs[key] || ''; })); + fields.push(this.fields_view.arch.attrs.name); + fields = _.uniq(fields.concat(_.pluck(this.colors, "field").concat(n_group_bys))); return $.when(this.has_been_loaded).then(function() { return self.dataset.read_slice(fields, { @@ -302,19 +305,22 @@ openerp.web_timeline = function(instance) { var ids = _.pluck(events, "id"); return this.dataset.name_get(ids).then(function(names) { var nevents = _.map(events, function(event) { - return _.extend({__name: _.detect(names, function(name) { return name[0] == event.id; })[1]}, event); + return _.extend({__name: _.detect(names, function(name) { + return name[0] == event.id; + })[1]}, event); }); return self.on_data_loaded_2(nevents, group_bys); }); }, - on_data_loaded_2: function(events, group_bys) { var self = this; var data = []; var groups = []; _.each(events, function(event) { if (event[self.date_start]){ - data.push(self.event_data_transform(event)); + var item = self.event_data_transform(event); + item.content = event.timeline_name; + data.push(item); } }); // get the groups @@ -366,32 +372,35 @@ openerp.web_timeline = function(instance) { }, on_add: function(item, callback) { - var self = this; - var context = this.dataset.get_context(); - // Initialize default values for creation - var default_context = {} - default_context['default_'.concat(this.date_start)] = item.start; - default_context['default_'.concat(this.date_stop)] = moment(item.start).add(1, 'hours').toDate(); - if (item.group > 0) { - default_context['default_'.concat(this.last_group_bys[0])] = item.group; - } - context.add(default_context); - // Show popup - var dialog = new form_common.FormViewDialog(this, { - res_model: this.dataset.model, - res_id: null, - context: context, - view_id: +this.open_popup_action, - }).open(); - dialog.on('create_completed', this, this.create_completed); - return false; + var self = this, + pop = new instance.web.form.SelectCreatePopup(this), + context = this.get_popup_context(item); + pop.on("elements_selected", self, function(element_ids) { + self.reload().then(function() { + self.timeline.focus(element_ids); + }); + }); + pop.select_element( + self.dataset.model, + { + title: _t("Create"), + initial_view: "form", + }, + null, + context + ); }, - write_completed: function(id) { - this.dataset.trigger("dataset_changed", id); - this.current_window = this.timeline.getWindow(); - this.reload(); - this.timeline.setWindow(this.current_window); + get_popup_context: function(item) { + var context = {}; + context['default_'.concat(this.date_start)] = item.start; + context['default_'.concat(this.date_stop)] = item.start.clone() + .addHours(this.date_delay || 1); + if (item.group != -1) { + context['default_'.concat(this.last_group_bys[0])] = item.group; + } + return context + }, on_update: function(item, callback) { @@ -408,33 +417,69 @@ openerp.web_timeline = function(instance) { } } else { - var dialog = new form_common.FormViewDialog(this, { - res_model: this.dataset.model, - res_id: parseInt(id).toString() == id ? parseInt(id) : id, - context: this.dataset.get_context(), - title: title, - view_id: +this.open_popup_action, - }).open(); - dialog.on('write_completed', this, this.write_completed); + + var id_cast = parseInt(id).toString() == id ? parseInt(id) : id; + var pop = new instance.web.form.FormOpenPopup(self); + pop.on('write_completed', self, self.reload); + pop.show_element( + self.dataset.model, + id_cast, + null, + {readonly: true, title: title} + ); + var form_controller = pop.view_form; + form_controller.on("load_record", self, function() { + var footer = pop.$el.closest(".modal").find(".modal-footer"); + footer.find('.oe_form_button_edit,.oe_form_button_save').remove(); + footer.find(".oe_form_button_cancel").prev().remove(); + footer.find('.oe_form_button_cancel').before(" or "); + button_edit = _.str.sprintf("",_t("Edit")); + button_save = _.str.sprintf("",_t("Save")); + footer.prepend(button_edit + button_save); + footer.find('.oe_form_button_save').hide(); + footer.find('.oe_form_button_edit').on('click', function() { + form_controller.to_edit_mode(); + footer.find('.oe_form_button_edit,.oe_form_button_save').toggle(); + }); + footer.find('.oe_form_button_save').on('click', function() { + form_controller.save(); + form_controller.to_view_mode(); + footer.find('.oe_form_button_edit,.oe_form_button_save').toggle(); + }); + var chatter = pop.$el.closest(".modal").find(".oe_chatter"); + if(chatter.length){ + var chatter_toggler = $($.parseHTML(_.str.sprintf('
%s
', _t("Messages")))); + chatter.before(chatter_toggler) + var chatter_content = chatter_toggler.find(".oe_chatter_content"); + chatter_content.prepend(chatter); + chatter_content.toggle(); + chatter_toggler.click(function(){ + chatter_content.toggle(); + chatter_toggler.toggleClass('fa-plus-circle fa-minus-circle'); + }); + } + }); } return false; }, on_move: function(item, callback) { var self = this; - var start = item.start; - var end = item.end; + var start = new moment(item.start); + var end = new moment(item.end); var group = false; if (item.group != -1) { group = item.group; } var data = {}; + data[self.fields_view.arch.attrs.date_start] = - str_to_datetime(new moment(start).format('YYYY-MM-DD hh:mm:ss'), - self.fields[self.fields_view.arch.attrs.date_start].type); + str_to_datetime(start.utc().format('YYYY-MM-DD hh:mm:ss'), + self.fields[self.fields_view.arch.attrs.date_start].type); + data[self.fields_view.arch.attrs.date_stop] = - str_to_datetime(new moment(end).format('YYYY-MM-DD hh:mm:ss'), - self.fields[self.fields_view.arch.attrs.date_stop].type); + str_to_datetime(end.utc().format('YYYY-MM-DD hh:mm:ss'), + self.fields[self.fields_view.arch.attrs.date_stop].type); data[self.fields_view.arch.attrs.default_group_by] = group; var id = item.evt.id; @@ -463,7 +508,6 @@ openerp.web_timeline = function(instance) { return this.on_group_click(e); } }, - on_group_click: function(e) { if (e.group == -1) { diff --git a/web_timeline/views/web_timeline.xml b/web_timeline/views/web_timeline.xml index 95f6367aa..de994be7f 100644 --- a/web_timeline/views/web_timeline.xml +++ b/web_timeline/views/web_timeline.xml @@ -1,6 +1,6 @@ - - + +