diff --git a/addons/web_gantt/static/lib/dhtmlxGantt/sources/dhtmlxcommon.js b/addons/web_gantt/static/lib/dhtmlxGantt/sources/dhtmlxcommon.js index bc7de14346d..7f68a0a702c 100644 --- a/addons/web_gantt/static/lib/dhtmlxGantt/sources/dhtmlxcommon.js +++ b/addons/web_gantt/static/lib/dhtmlxGantt/sources/dhtmlxcommon.js @@ -2,6 +2,37 @@ Copyright DHTMLX LTD. http://www.dhtmlx.com To use this component please contact sales@dhtmlx.com to obtain license */ + +dhtmlx=function(obj){ + for (var a in obj) dhtmlx[a]=obj[a]; + return dhtmlx; //simple singleton +}; +dhtmlx.extend_api=function(name,map,ext){ + var t = window[name]; + if (!t) return; //component not defined + window[name]=function(obj){ + if (obj && typeof obj == "object" && !obj.tagName){ + var that = t.apply(this,(map._init?map._init(obj):arguments)); + //global settings + for (var a in dhtmlx) + if (map[a]) this[map[a]](dhtmlx[a]); + //local settings + for (var a in obj){ + if (map[a]) this[map[a]](obj[a]); + else if (a.indexOf("on")==0){ + this.attachEvent(a,obj[a]); + } + } + } else + var that = t.apply(this,arguments); + if (map._patch) map._patch(this); + return that||this; + }; + window[name].prototype=t.prototype; + if (ext) + dhtmlXHeir(window[name].prototype,ext); +}; + dhtmlxAjax={ get:function(url,callback){ var t=new dtmlXMLLoaderObject(true); diff --git a/addons/web_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js b/addons/web_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js index 0d838fdd510..52b9b562e96 100644 --- a/addons/web_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js +++ b/addons/web_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js @@ -173,9 +173,8 @@ GanttProjectInfo.prototype.getTaskByIdInTree = function(parentTask, id) * @type: public * @topic: 0 */ -function GanttTaskInfo(id, name, est, duration, percentCompleted, predecessorTaskId, color) +function GanttTaskInfo(id, name, est, duration, percentCompleted, predecessorTaskId) { - this.color = color || "white"; this.Id = id; this.Name = name; this.EST = est; @@ -349,7 +348,7 @@ GanttProject.prototype.create = function() * @type: public * @topic: 0 */ -function GanttChart(day_length) +function GanttChart() { this.Error = new GanttError(); this.dhtmlXMLSenderObject = new dhtmlXMLSenderObject(this); @@ -357,7 +356,7 @@ function GanttChart(day_length) //settings this.heightTaskItem = 12; this.dayInPixels = 24; - this.hoursInDay = day_length; + this.hoursInDay = 8; this._showTreePanel = true; this._showTooltip = true; this.isShowDescTask = false; @@ -1162,7 +1161,7 @@ GanttProject.prototype.deleteChildTask = function(task) * @type: public * @topic: 1 */ -GanttProject.prototype.insertTask = function(id, name, EST, Duration, PercentCompleted, predecessorTaskId, color, parentTaskId) +GanttProject.prototype.insertTask = function(id, name, EST, Duration, PercentCompleted, predecessorTaskId, parentTaskId) { var task = null; var _task = null; @@ -1205,7 +1204,7 @@ GanttProject.prototype.insertTask = function(id, name, EST, Duration, PercentCom return false; } - task = new GanttTaskInfo(id, name, EST, Duration, PercentCompleted, predecessorTaskId, color); + task = new GanttTaskInfo(id, name, EST, Duration, PercentCompleted, predecessorTaskId); if (!this.Chart.checkPosParentTask(parentTask, task)) { this.Chart.Error.throwError("DATA_INSERT_ERROR", 19, [parentTaskId,id]); @@ -4870,13 +4869,11 @@ GanttTask.prototype.createTaskItem = function() cellTblTask.height = this.Chart.heightTaskItem + "px"; cellTblTask.width = this.TaskInfo.PercentCompleted + "%"; cellTblTask.style.lineHeight = "1px"; - cellTblTask.style.backgroundColor = self.TaskInfo.color; - var imgPr = document.createElement("img"); imgPr.style.width = (this.TaskInfo.PercentCompleted * this.TaskInfo.Duration * this.Chart.hourInPixelsWork) / 100 + "px"; imgPr.style.height = this.Chart.heightTaskItem + "px"; cellTblTask.appendChild(imgPr); - //imgPr.src = this.Chart.imgs + "progress_filled.png"; + imgPr.src = this.Chart.imgs + "progress_filled.png"; } if (this.TaskInfo.PercentCompleted != 100) @@ -4946,9 +4943,9 @@ GanttTask.prototype.createTaskItem = function() } var taskClick = function() { - self.Chart.callEvent("onTaskDblClick", [self]); + self.Chart.callEvent("onTaskClick", [self]); }; - this.addEvent(divMove, 'dblclick', taskClick, false); + this.addEvent(divMove, 'click', taskClick, false); if (this.Chart.isEditable) { diff --git a/addons/web_gantt/static/src/js/gantt.js b/addons/web_gantt/static/src/js/gantt.js index d2eb3aed899..77a2d7a22cb 100644 --- a/addons/web_gantt/static/src/js/gantt.js +++ b/addons/web_gantt/static/src/js/gantt.js @@ -2,71 +2,60 @@ * OpenERP web_gantt *---------------------------------------------------------*/ openerp.web_gantt = function (openerp) { +var _t = openerp.web._t; var QWeb = openerp.web.qweb; openerp.web.views.add('gantt', 'openerp.web_gantt.GanttView'); openerp.web_gantt.GanttView = openerp.web.View.extend({ -init: function(parent, dataset, view_id) { + init: function(parent, dataset, view_id) { this._super(parent); this.view_manager = parent || new openerp.web.NullViewManager(); this.dataset = dataset; this.model = dataset.model; this.view_id = view_id; - this.fields_views = {}; - this.widgets = {}; - this.widgets_counter = 0; - this.fields = this.dataset.fields ? this.dataset.fields: {}; - this.ids = this.dataset.ids; - this.name = ""; - this.date_start = ""; - this.date_delay = ""; - this.date_stop = ""; - this.color_field = ""; - this.colors = []; - this.color_values = []; - this.calendar_fields = {}; - this.info_fields = []; - this.domain = this.dataset._domain ? this.dataset._domain: []; + this.domain = this.dataset.domain || []; this.context = this.dataset.context || {}; + this.has_been_loaded = $.Deferred(); }, start: function() { this._super(); - this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type": "gantt"}, this.on_loaded); + return this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type": "gantt"}, this.on_loaded); }, on_loaded: function(data) { - var self = this; - this.fields_view = data; - - this.name = this.fields_view.arch.attrs.string; - this.view_id = this.fields_view.view_id; - - this.date_start = this.fields_view.arch.attrs.date_start; - this.date_delay = this.fields_view.arch.attrs.date_delay; - this.date_stop = this.fields_view.arch.attrs.date_stop; - - this.color_field = this.fields_view.arch.attrs.color; + this.fields_view = data, + this.name = this.fields_view.arch.attrs.string, + this.view_id = this.fields_view.view_id, + this.fields = this.fields_view.fields; + + this.date_start = this.fields_view.arch.attrs.date_start, + this.date_delay = this.fields_view.arch.attrs.date_delay, + this.date_stop = this.fields_view.arch.attrs.date_stop, this.day_length = this.fields_view.arch.attrs.day_length || 8; + + this.color_field = this.fields_view.arch.attrs.color, this.colors = this.fields_view.arch.attrs.colors; - var arch_children = this.fields_view.arch.children[0]; - this.text = arch_children.children[0] ? arch_children.children[0].attrs.name : arch_children.attrs.name; - this.parent = this.fields_view.arch.children[0].attrs.link; - - this.format = "yyyy-MM-dd"; - this.grp = []; - - self.create_gantt(); - self.get_events(); - - this.$element.html(QWeb.render("GanttView", {"view": this, "fields_view": this.fields_view})); - + + if (this.fields_view.arch.children.length) { + var level = this.fields_view.arch.children[0]; + this.parent = level.attrs.link, this.text = level.children.length ? level.children[0].attrs.name : level.attrs.name; + } else { + this.text = 'name'; + } + + if (!this.date_start) { + return self.do_warn(_t("date_start is not defined ")) + } + + this.$element.html(QWeb.render("GanttView", {'height': $('.oe-application-container').height(), 'width': $('.oe-application-container').width()})); + this.has_been_loaded.resolve(); }, - create_gantt: function() { + init_gantt_view: function() { - ganttChartControl = new GanttChart(this.day_length); + ganttChartControl = this.ganttChartControl = new GanttChart(this.day_length); ganttChartControl.setImagePath("/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/"); ganttChartControl.setEditable(true); ganttChartControl.showTreePanel(true); @@ -75,53 +64,71 @@ init: function(parent, dataset, view_id) { ganttChartControl.showDescProject(true,'n,d'); }, - - get_events: function() { - - var self = this; - this.dataset.read_slice([],{}, function(result) { - self.load_event(result); - }); - + + project_starting_date : function() { + var self = this, + projects = this.database_projects, + min_date = _.min(projects, function(prj) { + return self.format_date(prj[self.date_start]); + }); + if (min_date) this.project_start_date = this.format_date(min_date[self.date_start]); + else + this.project_start_date = Date.today(); + return $.Deferred().resolve().promise(); + }, + + format_date : function(date) { + var datetime_regex = /^(\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d)(?:\.\d+)?$/, + date_regex = /^\d\d\d\d-\d\d-\d\d$/, + time_regex = /^(\d\d:\d\d:\d\d)(?:\.\d+)?$/, + def = $.Deferred(); + if(date_regex.exec(date)) { + this.date_format = "yyyy-MM-dd"; + } else if(time_regex.exec(date)) { + this.date_format = "HH:mm:ss"; + } else { + this.date_format = "yyyy-MM-dd HH:mm:ss"; + } + if(typeof date === 'string') + return openerp.web.auto_str_to_date(date); + return date; }, - load_event: function(events) { - - var self = this; - var result = events; - var smalldate = ""; - - COLOR_PALETTE = ['#ccccff', '#cc99ff', '#75507b', '#3465a4', '#73d216', '#c17d11', '#edd400', - '#fcaf3e', '#ef2929', '#ff00c9', '#ad7fa8', '#729fcf', '#8ae234', '#e9b96e', '#fce94f', - '#ff8e00', '#ff0000', '#b0008c', '#9000ff', '#0078ff', '#00ff00', '#e6ff00', '#ffff00', - '#905000', '#9b0000', '#840067', '#510090', '#0000c9', '#009b00', '#9abe00', '#ffc900']; - - if (result.length != 0){ - var show_event = []; - for (var i in result){ - var res = result[i]; - if (res[this.date_start] != false){ - - var start_date = this.convert_str_date(res[this.date_start]); - res[this.date_start] = start_date; - show_event.push(res); - if (smalldate == ""){ - smalldate = start_date; - } - else{ - if (start_date < smalldate){ - smalldate = start_date; - } - } - } - } - if (smalldate == ""){ - smalldate = Date.today(); - } - project = new GanttProjectInfo("_1", "", smalldate); - ganttChartControl.addProject(project); + on_project_loaded: function(events) { + + if(!events.length) return; + var self = this, + started_projects = _.filter(events, function(res) { + return res[self.date_start]; + }); + + this.database_projects = started_projects; + + if(!started_projects.length) + return self.do_warn(_t("date_start is not defined")); + + if(!self.name && started_projects.length) { + var name = started_projects[0][self.parent]; + self.name = name instanceof Array? name[name.length - 1] : name; } - + this.$element.find('#add_task').click(function(){ + self.editTask(); + }); + + $.when(this.project_starting_date()) + .then(function() { + if(self.ganttChartControl) { + self.ganttChartControl.clearAll(); + self.$element.find('#GanttView').empty(); + } + }) + .done(this.init_gantt_view()); + + var self = this; + var show_event = started_projects; + _.each(show_event, function(evt) {evt[self.date_start] = self.format_date(evt[self.date_start])}); + this.project = new GanttProjectInfo("_1", self.name, this.project_start_date); + self.ganttChartControl.addProject(this.project); //create child var k = 0; var color_box = {}; @@ -138,12 +145,6 @@ init: function(parent, dataset, view_id) { var text = res[this.text]; var start_date = res[this.date_start]; - var color = res[this.color_field][0] || res[this.color_field]; - if (color_box[color] == undefined){ - color_box[color] = COLOR_PALETTE[k]; - k += 1; - } - if (this.date_stop != undefined){ if (res[this.date_stop] != false){ var stop_date = this.convert_str_date(res[this.date_stop]); @@ -159,14 +160,14 @@ init: function(parent, dataset, view_id) { if (!duration) duration = 0; - if (self.grp.length){ - for (var j in self.grp){ - var grp_key = res[self.grp[j]['group_by']]; + if (this.group_by.length){ + for (var j in self.group_by){ + var grp_key = res[self.group_by[j]]; if (typeof(grp_key) == "object"){ - grp_key = res[self.grp[j]['group_by']][1]; + grp_key = res[self.group_by[j]][1]; } else{ - grp_key = res[self.grp[j]['group_by']]; + grp_key = res[self.group_by[j]]; } if (!grp_key){ @@ -178,7 +179,7 @@ init: function(parent, dataset, view_id) { var mod_id = i+ "_" +j; parents[grp_key] = mod_id; child_event[mod_id] = {}; - all_events[mod_id] = {'parent': "", 'evt':[mod_id , grp_key, start_date, start_date, 100, "", "white"]}; + all_events[mod_id] = {'parent': "", 'evt':[mod_id , grp_key, start_date, start_date, 100, ""]}; } else{ mod_id = parents[grp_key]; @@ -190,7 +191,7 @@ init: function(parent, dataset, view_id) { child_event[mod_id][grp_key] = ch_mod_id; child_event[ch_mod_id] = {}; temp_id = ch_mod_id; - all_events[ch_mod_id] = {'parent': mod_id, 'evt':[ch_mod_id , grp_key, start_date, start_date, 100, "","white"]}; + all_events[ch_mod_id] = {'parent': mod_id, 'evt':[ch_mod_id , grp_key, start_date, start_date, 100, ""]}; mod_id = ch_mod_id; } else{ @@ -199,15 +200,15 @@ init: function(parent, dataset, view_id) { } } } - all_events[id] = {'parent': temp_id, 'evt':[id , text, start_date, duration, 100, "", color_box[color]]}; + all_events[id] = {'parent': temp_id, 'evt':[id , text, start_date, duration, 100, ""]}; final_events.push(id); } else { if (i == 0) { var mod_id = "_" + i; - all_events[mod_id] = {'parent': "", 'evt': [mod_id, this.name, start_date, start_date, 100, "", "white"]}; + all_events[mod_id] = {'parent': "", 'evt': [mod_id, this.name, start_date, start_date, 100, ""]}; } - all_events[id] = {'parent': mod_id, 'evt':[id , text, start_date, duration, 100, "", color_box[color]]}; + all_events[id] = {'parent': mod_id, 'evt':[id , text, start_date, duration, 100, ""]}; final_events.push(id); } } @@ -245,72 +246,144 @@ init: function(parent, dataset, view_id) { } } - for (var j in self.grp) { + for (var j in self.group_by) { self.render_events(all_events, j); } - if (!self.grp.length) { + if (!self.group_by.length) { self.render_events(all_events, 0); } for (var i in final_events) { evt_id = final_events[i]; res = all_events[evt_id]; - task=new GanttTaskInfo(res['evt'][0], res['evt'][1], res['evt'][2], res['evt'][3], res['evt'][4], "",res['evt'][6]); - prt = project.getTaskById(res['parent']); + task=new GanttTaskInfo(res['evt'][0], res['evt'][1], res['evt'][2], res['evt'][3], res['evt'][4], ""); + prt = self.project.getTaskById(res['parent']); prt.addChildTask(task); } var oth_hgt = 264; var min_hgt = 150; var name_min_wdt = 150; - var gantt_hgt = jQuery(window).height() - oth_hgt; - var search_wdt = jQuery("#oe_app_search").width(); + var gantt_hgt = $(window).height() - oth_hgt; + var search_wdt = $("#oe_app_search").width(); - if (gantt_hgt > min_hgt){ - jQuery('#GanttDiv').height(gantt_hgt).width(search_wdt); + if (gantt_hgt > min_hgt) { + $('#GanttView').height(gantt_hgt).width(search_wdt); } else{ - jQuery('#GanttDiv').height(min_hgt).width(search_wdt); + $('#GanttView').height(min_hgt).width(search_wdt); } - ganttChartControl.create("GanttDiv"); - ganttChartControl.attachEvent("onTaskStartDrag", function(task) {self.on_drag_start(task);}); - ganttChartControl.attachEvent("onTaskEndResize", function(task) {self.on_resize_drag_end(task, "resize");}); - ganttChartControl.attachEvent("onTaskEndDrag", function(task) {self.on_resize_drag_end(task, "drag");}); + self.ganttChartControl.create("GanttView"); - ganttChartControl.attachEvent("onTaskDblClick", function(task) {self.open_popup(task);}); + // Setup Events + self.ganttChartControl.attachEvent("onTaskStartDrag", function(task) { + if (task.parentTask) { + var task_date = task.getEST(); + if (task_date.getHours()) { + task_date.set({ + hour: task_date.getHours(), + minute: task_date.getMinutes(), + second: 0 + }); + } + } + }); + self.ganttChartControl.attachEvent("onTaskEndResize", function(task) {return self.ResizeTask(task);}); + self.ganttChartControl.attachEvent("onTaskEndDrag", function(task) {return self.ResizeTask(task);}); - var taskdiv = jQuery("div.taskPanel").parent(); + var taskdiv = $("div.taskPanel").parent(); taskdiv.addClass('ganttTaskPanel'); taskdiv.prev().addClass('ganttDayPanel'); - var $gantt_panel = jQuery(".ganttTaskPanel , .ganttDayPanel"); + var $gantt_panel = $(".ganttTaskPanel , .ganttDayPanel"); - var ganttrow = jQuery('.taskPanel').closest('tr'); + var ganttrow = $('.taskPanel').closest('tr'); var gtd = ganttrow.children(':first-child'); gtd.children().addClass('task-name'); - jQuery(".toggle-sidebar").click(function(e) { + $(".toggle-sidebar").click(function(e) { self.set_width(); }); - jQuery(window).bind('resize',function() { - window.clearTimeout(ganttChartControl._resize_timer); - ganttChartControl._resize_timer = window.setTimeout(function(){ - self.reload_gantt(); + $(window).bind('resize',function() { + window.clearTimeout(self.ganttChartControl._resize_timer); + self.ganttChartControl._resize_timer = window.setTimeout(function(){ + self.reloadView(); }, 200); }); - - jQuery("div #_1, div #_1 + div").hide(); + + var Project = self.ganttChartControl.getProjectById("_1"); + $(Project.projectItem[0]).hide(); + $(Project.projectNameItem).hide(); + $(Project.descrProject).hide(); + + _.each(final_events, function(id) { + var Task = Project.getTaskById(id); + $(Task.cTaskNameItem[0]).click(function() { + self.editTask(Task); + }) + }); + }, + + ResizeTask: function(task) { + var self = this, + event_id = task.getId(); + if(task.childTask.length) + return $.when(this.do_warn(_t("Project can not be resized"))).then(this.reloadView()); + + var data = {}; + data[this.date_start] = task.getEST().toString(this.date_format); + + if(this.date_stop) { + var diff = task.getDuration() % this.day_length, + finished_date = task.getFinishDate().add({hours: diff}); + data[this.date_stop] = finished_date.toString(this.date_format); + } else { + data[this.date_delay] = task.getDuration(); + } + this.dataset + .write(event_id, data, {}) + .done(function() { + var get_project = _.find(self.database_projects, function(project){ return project.id == event_id}); + _.extend(get_project,data); + self.reloadView(); + }); + }, + + editTask: function(task) { + var self = this, + event_id; + if (!task) + event_id = 0; + else { + event_id = task.getId(); + if(!event_id || !task.parentTask) + return false; + } + if(event_id) event_id = parseInt(event_id, 10); + + var pop = new openerp.web.form.FormOpenPopup(this); + + pop.show_element(this.model, event_id, this.context || this.dataset.context, {}); + + pop.on_write.add(function(id, data) { + var get_project = _.find(self.database_projects, function(project){ return project.id == id}); + if (get_project) { + _.extend(get_project, data); + } else { + _.extend(self.database_projects, _.extend(data, {'id': id})); + } + self.reloadView(); + }); }, set_width: function() { - $gantt_panel.width(1); jQuery(".ganttTaskPanel").parent().width(1); var search_wdt = jQuery("#oe_app_search").width(); var day_wdt = jQuery(".ganttDayPanel").children().children().width(); - jQuery('#GanttDiv').css('width','100%'); + jQuery('#GanttView').css('width','100%'); if (search_wdt - day_wdt <= name_min_wdt){ jQuery(".ganttTaskPanel").parent().width(search_wdt - name_min_wdt); @@ -372,11 +445,11 @@ init: function(parent, dataset, view_id) { if (k != -1) { if (res['evt'][0].substring(k) == "_"+j){ if (j == 0){ - task = new GanttTaskInfo(res['evt'][0], res['evt'][1], res['evt'][2], res['evt'][3], res['evt'][4], "",res['evt'][6]); - project.addTask(task); + task = new GanttTaskInfo(res['evt'][0], res['evt'][1], res['evt'][2], res['evt'][3], res['evt'][4], ""); + self.project.addTask(task); } else { - task = new GanttTaskInfo(res['evt'][0], res['evt'][1], res['evt'][2], res['evt'][3], res['evt'][4], "",res['evt'][6]); - prt = project.getTaskById(res['parent']); + task = new GanttTaskInfo(res['evt'][0], res['evt'][1], res['evt'][2], res['evt'][3], res['evt'][4], ""); + prt = self.project.getTaskById(res['parent']); prt.addChildTask(task); } } @@ -384,79 +457,6 @@ init: function(parent, dataset, view_id) { } }, - open_popup : function(task) { - var self = this; - var event_id = task.getId(); - if(event_id.toString().search("_") != -1) - return; - if(event_id) event_id = parseInt(event_id, 10); - - var action_manager = new openerp.web.ActionManager(this); - - var dialog = new openerp.web.Dialog(this, { - width: 800, - height: 600, - buttons : { - Cancel : function() { - $(this).dialog('destroy'); - }, - Save : function() { - var form_view = action_manager.inner_viewmanager.views.form.controller; - - form_view.do_save(function() { - self.get_events(); - }); - $(this).dialog('destroy'); - } - } - }).start().open(); - action_manager.appendTo(dialog.$element); - action_manager.do_action({ - res_model : this.dataset.model, - res_id: event_id, - views : [[false, 'form']], - type : 'ir.actions.act_window', - auto_search : false, - flags : { - search_view: false, - sidebar : false, - views_switcher : false, - action_buttons : false, - pager: false - } - }); - }, - - on_drag_start : function(task){ - var st_date = task.getEST(); - if(st_date.getHours()){ - self.hh = st_date.getHours(); - self.mm = st_date.getMinutes(); - } - }, - - on_resize_drag_end : function(task, evt){ - - var event_id = task.getId(); - var data = {}; - - if(event_id.toString().search("_") != -1) - return; - if (evt == "drag"){ - full_date = task.getEST().set({hour: self.hh, minute : self.mm, second:0}); - data[this.date_start] = this.convert_date_str(full_date); - } - if (this.date_stop != undefined){ - tm = (task.getDuration() % this.day_length); - stp = task.getFinishDate().add(tm).hour(); - data[this.date_stop] = this.convert_date_str(stp); - }else{ - data[this.date_delay] = task.getDuration(); - } - this.dataset.write(event_id, data, {}, function(result) {}); - - }, - do_show: function () { this.$element.show(); }, @@ -465,44 +465,62 @@ init: function(parent, dataset, view_id) { this.$element.hide(); }, - convert_str_date: function (str){ - if (str.length == 19){ - this.format = "yyyy-MM-dd HH:mm:ss"; - return openerp.web.str_to_datetime(str); - } else if (str.length == 10){ - this.format = "yyyy-MM-dd"; - return openerp.web.str_to_date(str); - } else if (str.length == 8){ - this.format = "HH:mm:ss"; - return openerp.web.str_to_time(str); + convert_str_date: function (str) { + if (typeof str == 'string') { + if (str.length == 19) { + this.date_format = "yyyy-MM-dd HH:mm:ss"; + return openerp.web.str_to_datetime(str); + } + else + if (str.length == 10) { + this.date_format = "yyyy-MM-dd"; + return openerp.web.str_to_date(str); + } + else + if (str.length == 8) { + this.date_format = "HH:mm:ss"; + return openerp.web.str_to_time(str); + } + throw "Unrecognized date/time format"; + } else { + return str; } - throw "Unrecognized date/time format"; }, convert_date_str: function(full_date) { - if (this.format == "yyyy-MM-dd HH:mm:ss"){ + if (this.date_format == "yyyy-MM-dd HH:mm:ss"){ return openerp.web.datetime_to_str(full_date); - } else if (this.format == "yyyy-MM-dd"){ + } else if (this.date_format == "yyyy-MM-dd"){ return openerp.web.date_to_str(full_date); - } else if (this.format == "HH:mm:ss"){ + } else if (this.date_format == "HH:mm:ss"){ return openerp.web.time_to_str(full_date); } throw "Unrecognized date/time format"; }, - - reload_gantt: function() { - var self = this; - this.dataset.read_slice([],{}, function(response) { - ganttChartControl.clearAll(); - jQuery("#GanttDiv").children().remove(); - self.load_event(response); - }); + + reloadView: function() { + return this.on_project_loaded(this.database_projects); }, do_search: function (domains, contexts, groupbys) { var self = this; - this.grp = groupbys; - self.reload_gantt(); + this.group_by = []; + if (this.fields_view.arch.attrs.default_group_by) { + this.group_by = this.fields_view.arch.attrs.default_group_by.split(','); + } + + if (groupbys.length) { + this.group_by = groupbys; + } + + $.when(this.has_been_loaded).then(function() { + self.dataset.read_slice([], { + domain: domains, + context: contexts + }).done(function(projects){ + self.on_project_loaded(projects); + }); + }); } }); diff --git a/addons/web_gantt/static/src/xml/web_gantt.xml b/addons/web_gantt/static/src/xml/web_gantt.xml index d064d6e9ef2..35cab76b452 100644 --- a/addons/web_gantt/static/src/xml/web_gantt.xml +++ b/addons/web_gantt/static/src/xml/web_gantt.xml @@ -1,5 +1,6 @@