From 3b39e95688f7f18bc9eb6a668aa7c1d4b88819f7 Mon Sep 17 00:00:00 2001 From: cpa-openerp Date: Mon, 6 Jun 2011 17:31:19 +0530 Subject: [PATCH 01/15] [IMP] Group by for gantt view. bzr revid: cpa@tinyerp.com-20110606120119-s1c4tjv1bmwzr5gs --- .../lib/dhtmlxGantt/sources/dhtmlxgantt.js | 4 +- addons/base_gantt/static/src/js/gantt.js | 123 +++++++++++++++++- 2 files changed, 118 insertions(+), 9 deletions(-) diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js b/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js index 75b33fefc45..0d838fdd510 100644 --- a/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js +++ b/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js @@ -1162,7 +1162,7 @@ GanttProject.prototype.deleteChildTask = function(task) * @type: public * @topic: 1 */ -GanttProject.prototype.insertTask = function(id, name, EST, Duration, PercentCompleted, predecessorTaskId, parentTaskId) +GanttProject.prototype.insertTask = function(id, name, EST, Duration, PercentCompleted, predecessorTaskId, color, parentTaskId) { var task = null; var _task = null; @@ -1205,7 +1205,7 @@ GanttProject.prototype.insertTask = function(id, name, EST, Duration, PercentCom return false; } - task = new GanttTaskInfo(id, name, EST, Duration, PercentCompleted, predecessorTaskId); + task = new GanttTaskInfo(id, name, EST, Duration, PercentCompleted, predecessorTaskId, color); if (!this.Chart.checkPosParentTask(parentTask, task)) { this.Chart.Error.throwError("DATA_INSERT_ERROR", 19, [parentTaskId,id]); diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index b8ca9a49e9e..5f47e7bfb00 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -24,7 +24,6 @@ init: function(view_manager, session, element_id, dataset, view_id) { this.date_delay = ""; this.date_stop = ""; this.color_field = ""; - this.day_lenth = 8; this.colors = []; this.color_values = []; this.calendar_fields = {}; @@ -91,7 +90,6 @@ init: function(view_manager, session, element_id, dataset, view_id) { var self = this; var result = events; - var project = {}; var smalldate = ""; COLOR_PALETTE = ['#ccccff', '#cc99ff', '#75507b', '#3465a4', '#73d216', '#c17d11', '#edd400', @@ -119,12 +117,19 @@ init: function(view_manager, session, element_id, dataset, view_id) { } } project = new GanttProjectInfo(1, self.name, smalldate); + task = new GanttTaskInfo(111, "temp", smalldate, 1, 100, "", "red"); + project.addTask(task); ganttChartControl.addProject(project); } //create child var k = 0; var color_box = {}; + var parents = {}; + var all_events = {}; + var child_event = {}; + var temp_id = ""; + var final_events = []; for (i in show_event) { var res = show_event[i]; @@ -153,8 +158,51 @@ init: function(view_manager, session, element_id, dataset, view_id) { } if (duration == false) duration = 0 - task = new GanttTaskInfo(id, text, start_date, duration, 100, "", color_box[color]); - project.addTask(task); + + if (self.grp != undefined){ + for (j in self.grp){ + var grp_key = res[self.grp[j]['group_by']]; + + if (typeof(grp_key) == "object"){ + grp_key = res[self.grp[j]['group_by']][1]; + } + else{ + grp_key = res[self.grp[j]['group_by']]; + } + + if (grp_key == false){ + grp_key = "False"; + } + + if (j == 0){ + if (parents[grp_key] == undefined){ + 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"]}; + } + else{ + mod_id = parents[grp_key]; + } + temp_id = mod_id; + }else{ + if (child_event[mod_id][grp_key] == undefined){ + var ch_mod_id = i+ "_" +j; + 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"]}; + mod_id = ch_mod_id; + } + else{ + mod_id = child_event[mod_id][grp_key]; + temp_id = mod_id; + } + } + } + all_events[id] = {'parent': temp_id, 'evt':[id , text, start_date, duration, 100, "", color_box[color]]}; + final_events.push(id); + } } ganttChartControl.create("GanttDiv"); @@ -163,6 +211,67 @@ init: function(view_manager, session, element_id, dataset, view_id) { ganttChartControl.attachEvent("onTaskEndDrag", function(task) {self.on_resize_drag_end(task, "drag");}); ganttChartControl.attachEvent("onTaskDblClick", function(task) {self.open_popup(task);}); + + project = ganttChartControl.getProjectById(1); + project.deleteTask(111); + + for (i in final_events){ + var evt_id = final_events[i]; + var evt_date = all_events[evt_id]['evt'][2]; + while (all_events[evt_id]['parent'] != "") { + var parent_id =all_events[evt_id]['parent']; + if (all_events[parent_id]['evt'][2] > evt_date){ + all_events[parent_id]['evt'][2] = evt_date; + } + evt_id = parent_id; + } + } + var evt_id = []; + var evt_date = ""; + var evt_duration = ""; + var evt_end_date = ""; + + for (i in final_events){ + evt_id = final_events[i]; + evt_date = all_events[evt_id]['evt'][2]; + evt_duration = all_events[evt_id]['evt'][3]; + + evt_str_date = this.convert_date_str(evt_date); + evt_end_date = this.end_date(evt_str_date, evt_duration); + + while (all_events[evt_id]['parent'] != "") { + var parent_id =all_events[evt_id]['parent']; + if (all_events[parent_id]['evt'][3] < evt_end_date){ + all_events[parent_id]['evt'][3] = evt_end_date; + } + evt_id = parent_id; + } + } + + for (i in all_events){ + res = all_events[i]; + + if ((typeof(res['evt'][3])) == "object"){ + res['evt'][3] = self.hours_between(res['evt'][2],res['evt'][3]); + } + + project.insertTask(res['evt'][0], res['evt'][1], res['evt'][2], res['evt'][3], 100, "",res['evt'][6], res['parent']); + } + }, + + end_date: function(dat, duration) { + + var self = this; + + dat = this.convert_str_date(dat); + + var day = Math.floor(duration/self.day_length); + var hrs = duration % self.day_length; + + dat.add(day).days(); + dat.add(hrs).hour(); + + return dat; }, hours_between: function(date1, date2) { @@ -262,7 +371,7 @@ init: function(view_manager, session, element_id, dataset, view_id) { throw "Unrecognized date/time format"; }, - reload_gantt: function(domain) { + reload_gantt: function() { var self = this; var ajax = { url: '/base/dataset/search_read', @@ -282,7 +391,7 @@ init: function(view_manager, session, element_id, dataset, view_id) { do_search: function (domains, contexts, groupbys) { var self = this; - + this.grp = groupbys; return this.rpc('/base/session/eval_domain_and_context', { domains: domains, contexts: contexts, @@ -290,7 +399,7 @@ init: function(view_manager, session, element_id, dataset, view_id) { }, function (results) { self.dataset.context = results.context; self.dataset.domain = results.domain; - return self.reload_gantt(self.dataset.domain); + return self.reload_gantt(); }); } From 2ac53360ce2a81a927e13d49202e39066551b33a Mon Sep 17 00:00:00 2001 From: cpa-openerp Date: Tue, 7 Jun 2011 16:43:40 +0530 Subject: [PATCH 02/15] [FIX] Set event hour when less then day_langth, use addChildTask instand of inseartTask. bzr revid: cpa@tinyerp.com-20110607111340-9krewbfmg0hpegbz --- addons/base_gantt/static/src/js/gantt.js | 30 +++++++++++++----------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index 5f47e7bfb00..5a71fd1f3c1 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -117,8 +117,6 @@ init: function(view_manager, session, element_id, dataset, view_id) { } } project = new GanttProjectInfo(1, self.name, smalldate); - task = new GanttTaskInfo(111, "temp", smalldate, 1, 100, "", "red"); - project.addTask(task); ganttChartControl.addProject(project); } @@ -162,7 +160,6 @@ init: function(view_manager, session, element_id, dataset, view_id) { if (self.grp != undefined){ for (j in self.grp){ var grp_key = res[self.grp[j]['group_by']]; - if (typeof(grp_key) == "object"){ grp_key = res[self.grp[j]['group_by']][1]; } @@ -205,16 +202,6 @@ init: function(view_manager, session, element_id, dataset, view_id) { } } - 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");}); - ganttChartControl.attachEvent("onTaskDblClick", function(task) {self.open_popup(task);}); - - - project = ganttChartControl.getProjectById(1); - project.deleteTask(111); - for (i in final_events){ var evt_id = final_events[i]; var evt_date = all_events[evt_id]['evt'][2]; @@ -255,8 +242,23 @@ init: function(view_manager, session, element_id, dataset, view_id) { res['evt'][3] = self.hours_between(res['evt'][2],res['evt'][3]); } - project.insertTask(res['evt'][0], res['evt'][1], res['evt'][2], res['evt'][3], 100, "",res['evt'][6], res['parent']); + if(res['parent'] == ""){ + task=new GanttTaskInfo(res['evt'][0], res['evt'][1], res['evt'][2], res['evt'][3], 100, "",res['evt'][6]); + project.addTask(task); + }else{ + task=new GanttTaskInfo(res['evt'][0], res['evt'][1], res['evt'][2], res['evt'][3], 100, "",res['evt'][6]); + prt = project.getTaskById(res['parent']); + prt.addChildTask(task); + } + } + + 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");}); + ganttChartControl.attachEvent("onTaskDblClick", function(task) {self.open_popup(task);}); + }, end_date: function(dat, duration) { From d95ce66175b250e00c2f3b4d6ab665aba1cb00fc Mon Sep 17 00:00:00 2001 From: cpa-openerp Date: Wed, 8 Jun 2011 11:39:20 +0530 Subject: [PATCH 03/15] [FIX] All event have no start date then set project start date with today date. bzr revid: cpa@tinyerp.com-20110608060920-sek3y9a3ep2svexu --- addons/base_gantt/static/src/js/gantt.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index 5a71fd1f3c1..9ca449f910e 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -116,8 +116,11 @@ init: function(view_manager, session, element_id, dataset, view_id) { } } } - project = new GanttProjectInfo(1, self.name, smalldate); - ganttChartControl.addProject(project); + if (smalldate == ""){ + smalldate = Date.today(); + } + project = new GanttProjectInfo(1, self.name, smalldate); + ganttChartControl.addProject(project); } //create child From 83aaefec5b281d666f042bd1813b912ec8463a6a Mon Sep 17 00:00:00 2001 From: cpa-openerp Date: Thu, 9 Jun 2011 15:27:05 +0530 Subject: [PATCH 04/15] [IMP] Set default group by from xml when no group by is selected. bzr revid: cpa@tinyerp.com-20110609095705-x3pobn8zdle44luk --- addons/base_gantt/static/src/js/gantt.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index 9ca449f910e..b6c103a4fbb 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -160,6 +160,10 @@ init: function(view_manager, session, element_id, dataset, view_id) { if (duration == false) duration = 0 + if (self.grp.length == 0){ + self.grp.push({'group_by' : this.parent}) + } + if (self.grp != undefined){ for (j in self.grp){ var grp_key = res[self.grp[j]['group_by']]; @@ -220,7 +224,7 @@ init: function(view_manager, session, element_id, dataset, view_id) { var evt_date = ""; var evt_duration = ""; var evt_end_date = ""; - + for (i in final_events){ evt_id = final_events[i]; evt_date = all_events[evt_id]['evt'][2]; @@ -253,7 +257,6 @@ init: function(view_manager, session, element_id, dataset, view_id) { prt = project.getTaskById(res['parent']); prt.addChildTask(task); } - } ganttChartControl.create("GanttDiv"); @@ -286,10 +289,10 @@ init: function(view_manager, session, element_id, dataset, view_id) { var date2_ms = date2.getTime(); var difference_ms = Math.abs(date1_ms - date2_ms); - d = Math.round(difference_ms / ONE_DAY); - h = Math.round((difference_ms % ONE_DAY)/(1000 * 60 * 60)); - - return (d * this.day_length) + h; + d = Math.floor(difference_ms / ONE_DAY); + h = (difference_ms % ONE_DAY)/(1000 * 60 * 60); + num = (d * this.day_length) + h; + return parseFloat(num.toFixed(2)); }, From 7c7e9970be09846586c3a86f7e15fb36e7be9dcb Mon Sep 17 00:00:00 2001 From: cpa-openerp Date: Tue, 14 Jun 2011 19:00:16 +0530 Subject: [PATCH 05/15] [FIX] Set height and width when gantt load or sidebar open-close. bzr revid: cpa@tinyerp.com-20110614133016-euwk5cmcmvgievwn --- .../static/lib/dhtmlxGantt/sources/dhtmlxgantt.js | 4 +++- addons/base_gantt/static/src/js/gantt.js | 6 ++++++ addons/base_gantt/static/src/xml/base_gantt.xml | 9 +-------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js b/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js index 0d838fdd510..50459be3077 100644 --- a/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js +++ b/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js @@ -2844,7 +2844,7 @@ GanttChart.prototype.create = function(divId) var newCellTblControl; //Add to content Table - this.contentHeight = content.offsetHeight; + this.contentHeight = screen.height * 0.3; this.contentWidth = content.offsetWidth; content.appendChild(tableControl); @@ -2891,6 +2891,8 @@ GanttChart.prototype.create = function(divId) if (this._showTreePanel) { this.panelNames.style.height = (this.contentHeight - 56) + "px"; this.panelNames.style.width = this.maxWidthPanelNames + "px"; + this.panelTime.className = "ganttDayPanel"; + this.oData.className = "ganttTaskPanel"; this.oData.style.width = (this.contentWidth - this.maxWidthPanelNames) + "px"; this.panelTasks.style.width = this.dayInPixels * this.countDays + "px"; this.panelTime.style.width = (this.contentWidth - this.maxWidthPanelNames - 0*18) + "px"; diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index b6c103a4fbb..e95507f1a03 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -74,6 +74,12 @@ init: function(view_manager, session, element_id, dataset, view_id) { ganttChartControl.showContextMenu(true); ganttChartControl.showDescTask(true,'d,s-f'); ganttChartControl.showDescProject(true,'n,d'); + + jQuery(".toggle-sidebar").click(function(e) { + var $gantt_panel = jQuery(".ganttTaskPanel , .ganttDayPanel"); + $gantt_panel.width(100); + $gantt_panel.width(jQuery("#oe_app_search").width() - 150); + }); }, diff --git a/addons/base_gantt/static/src/xml/base_gantt.xml b/addons/base_gantt/static/src/xml/base_gantt.xml index c85abf0cad8..e9a95057b24 100644 --- a/addons/base_gantt/static/src/xml/base_gantt.xml +++ b/addons/base_gantt/static/src/xml/base_gantt.xml @@ -1,12 +1,5 @@ From db9f554360b0629981f23db09485eb403d06e395 Mon Sep 17 00:00:00 2001 From: cpa-openerp Date: Wed, 15 Jun 2011 12:30:21 +0530 Subject: [PATCH 06/15] [FIX] Hide main parent event and text. bzr revid: cpa@tinyerp.com-20110615070021-l6c7jl9obxzzuts8 --- addons/base_gantt/static/src/js/gantt.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index e95507f1a03..372ac750c2f 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -125,7 +125,7 @@ init: function(view_manager, session, element_id, dataset, view_id) { if (smalldate == ""){ smalldate = Date.today(); } - project = new GanttProjectInfo(1, self.name, smalldate); + project = new GanttProjectInfo("_1", "", smalldate); ganttChartControl.addProject(project); } @@ -271,6 +271,7 @@ init: function(view_manager, session, element_id, dataset, view_id) { ganttChartControl.attachEvent("onTaskEndDrag", function(task) {self.on_resize_drag_end(task, "drag");}); ganttChartControl.attachEvent("onTaskDblClick", function(task) {self.open_popup(task);}); + jQuery("div #_1, div #_1 + div").hide(); }, end_date: function(dat, duration) { From 6649dbce80818da6cedc3b56f1533f91905daba8 Mon Sep 17 00:00:00 2001 From: cpa-openerp Date: Wed, 15 Jun 2011 18:40:34 +0530 Subject: [PATCH 07/15] [FIX] Disable all parent event (dblclick, resize, drag). bzr revid: cpa@tinyerp.com-20110615131034-rbi9wp63234jit89 --- addons/base_gantt/static/src/js/gantt.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index 372ac750c2f..62104956be2 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -305,6 +305,9 @@ init: function(view_manager, session, element_id, dataset, view_id) { open_popup : function(task) { var event_id = task.getId(); + + if(event_id.toString().search("_") != -1) + return; if (event_id) { event_id = parseInt(event_id, 10); var dataset_event_index = jQuery.inArray(event_id, this.ids); @@ -338,6 +341,8 @@ init: function(view_manager, session, element_id, dataset, view_id) { 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); @@ -404,7 +409,6 @@ init: function(view_manager, session, element_id, dataset, view_id) { }, do_search: function (domains, contexts, groupbys) { - var self = this; this.grp = groupbys; return this.rpc('/base/session/eval_domain_and_context', { From 4f13b58415f09eda21aae1a1976bea13b5f2c551 Mon Sep 17 00:00:00 2001 From: cpa-openerp Date: Wed, 22 Jun 2011 15:57:50 +0530 Subject: [PATCH 08/15] [IMP] Set height and width when resize browser. bzr revid: cpa@tinyerp.com-20110622102750-qgmg073rhdxm9qen --- .../lib/dhtmlxGantt/sources/dhtmlxgantt.js | 4 +- addons/base_gantt/static/src/js/gantt.js | 56 +++++++++++++++++-- .../base_gantt/static/src/xml/base_gantt.xml | 2 +- 3 files changed, 52 insertions(+), 10 deletions(-) diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js b/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js index 50459be3077..0d838fdd510 100644 --- a/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js +++ b/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js @@ -2844,7 +2844,7 @@ GanttChart.prototype.create = function(divId) var newCellTblControl; //Add to content Table - this.contentHeight = screen.height * 0.3; + this.contentHeight = content.offsetHeight; this.contentWidth = content.offsetWidth; content.appendChild(tableControl); @@ -2891,8 +2891,6 @@ GanttChart.prototype.create = function(divId) if (this._showTreePanel) { this.panelNames.style.height = (this.contentHeight - 56) + "px"; this.panelNames.style.width = this.maxWidthPanelNames + "px"; - this.panelTime.className = "ganttDayPanel"; - this.oData.className = "ganttTaskPanel"; this.oData.style.width = (this.contentWidth - this.maxWidthPanelNames) + "px"; this.panelTasks.style.width = this.dayInPixels * this.countDays + "px"; this.panelTime.style.width = (this.contentWidth - this.maxWidthPanelNames - 0*18) + "px"; diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index 62104956be2..0d4b722340d 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -57,6 +57,7 @@ init: function(view_manager, session, element_id, dataset, view_id) { this.parent = this.fields_view.arch.children[0].attrs.link; this.format = "yyyy-MM-dd"; + this.grp = []; self.create_gantt(); self.get_events(); @@ -74,12 +75,6 @@ init: function(view_manager, session, element_id, dataset, view_id) { ganttChartControl.showContextMenu(true); ganttChartControl.showDescTask(true,'d,s-f'); ganttChartControl.showDescProject(true,'n,d'); - - jQuery(".toggle-sidebar").click(function(e) { - var $gantt_panel = jQuery(".ganttTaskPanel , .ganttDayPanel"); - $gantt_panel.width(100); - $gantt_panel.width(jQuery("#oe_app_search").width() - 150); - }); }, @@ -264,6 +259,16 @@ init: function(view_manager, session, element_id, dataset, view_id) { prt.addChildTask(task); } } + oth_hgt = 264; + min_hgt = 150; + gantt_hgt = jQuery(window).height() - oth_hgt; + search_wdt = jQuery("#oe_app_search").width(); + + if (gantt_hgt > min_hgt){ + jQuery('#GanttDiv').height(gantt_hgt).width(search_wdt); + } else{ + jQuery('#GanttDiv').height(min_hgt).width(search_wdt); + } ganttChartControl.create("GanttDiv"); ganttChartControl.attachEvent("onTaskStartDrag", function(task) {self.on_drag_start(task);}); @@ -271,9 +276,48 @@ init: function(view_manager, session, element_id, dataset, view_id) { ganttChartControl.attachEvent("onTaskEndDrag", function(task) {self.on_resize_drag_end(task, "drag");}); ganttChartControl.attachEvent("onTaskDblClick", function(task) {self.open_popup(task);}); + taskdiv = jQuery("div.taskPanel").parent(); + taskdiv.addClass('ganttTaskPanel'); + taskdiv.prev().addClass('ganttDayPanel'); + $gantt_panel = jQuery(".ganttTaskPanel , .ganttDayPanel"); + + ganttrow = jQuery('.taskPanel').closest('tr'); + gtd = ganttrow.children(':first-child'); + gtd.children().addClass('task-name'); + + jQuery(".toggle-sidebar").click(function(e) { + self.set_width(); + }); + + jQuery(window).bind('resize', function () { + + gantt_hgt = jQuery(window).height() - oth_hgt; + + if (gantt_hgt < min_hgt){ + gantt_hgt = min_hgt; + } + jQuery('#GanttDiv').height(gantt_hgt); + jQuery('.task-name').height(gantt_hgt - 40); + taskdiv.height(gantt_hgt - 40); + if (taskdiv.height() > jQuery('.taskPanel').height()){ + jQuery('.taskPanel').height(taskdiv.height()); + jQuery('.task-name').children().height(taskdiv.height()); + } + self.set_width(); + }); + jQuery("div #_1, div #_1 + div").hide(); }, + set_width: function() { + $gantt_panel.width(100); + jQuery('#GanttDiv').css('width','100%'); + $gantt_panel.width(jQuery("#oe_app_search").width() - 150); + if (taskdiv.width() > taskdiv.children().width()){ + taskdiv.children().width(taskdiv.width()); + } + }, + end_date: function(dat, duration) { var self = this; diff --git a/addons/base_gantt/static/src/xml/base_gantt.xml b/addons/base_gantt/static/src/xml/base_gantt.xml index e9a95057b24..ba4eacfbe70 100644 --- a/addons/base_gantt/static/src/xml/base_gantt.xml +++ b/addons/base_gantt/static/src/xml/base_gantt.xml @@ -1,5 +1,5 @@ From edbfdd05762261dbc483a92555a6a86ce45d022d Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 23 Jun 2011 18:01:28 +0530 Subject: [PATCH 09/15] [FIX] Use read_slice when reload gantt. bzr revid: cpa@tinyerp.com-20110623123128-zix00sjsyo86mtrp --- addons/base_gantt/static/src/js/gantt.js | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index 0d4b722340d..0add92e6ec5 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -437,19 +437,11 @@ init: function(view_manager, session, element_id, dataset, view_id) { reload_gantt: function() { var self = this; - var ajax = { - url: '/base/dataset/search_read', - async: false - }; - this.rpc(ajax, { - model: this.dataset.model, - domain: self.dataset.domain, - context :self.dataset.context - }, function(response) { - ganttChartControl.clearAll(); - jQuery("#GanttDiv").children().remove(); - self.load_event(response); - }); + this.dataset.read_slice(false, false, false, function(response) { + ganttChartControl.clearAll(); + jQuery("#GanttDiv").children().remove(); + self.load_event(response); + }); }, do_search: function (domains, contexts, groupbys) { From c6ecd0ec6d590ad2a71b4a03aacdb82c174fb9bd Mon Sep 17 00:00:00 2001 From: cpa-openerp Date: Fri, 24 Jun 2011 14:39:32 +0530 Subject: [PATCH 10/15] [FIX] Fixed gantt crash in crome, add parent task first then child task in gantt. bzr revid: cpa@tinyerp.com-20110624090932-zotnlozt2a1dk7cr --- addons/base_gantt/static/src/js/gantt.js | 42 ++++++++++++++++-------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index 0add92e6ec5..627bbae2005 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -164,7 +164,6 @@ init: function(view_manager, session, element_id, dataset, view_id) { if (self.grp.length == 0){ self.grp.push({'group_by' : this.parent}) } - if (self.grp != undefined){ for (j in self.grp){ var grp_key = res[self.grp[j]['group_by']]; @@ -243,22 +242,37 @@ init: function(view_manager, session, element_id, dataset, view_id) { } } - for (i in all_events){ - res = all_events[i]; + for (j in self.grp){ + for (i in all_events){ + res = all_events[i]; + if ((typeof(res['evt'][3])) == "object"){ + res['evt'][3] = self.hours_between(res['evt'][2],res['evt'][3]); + } - if ((typeof(res['evt'][3])) == "object"){ - res['evt'][3] = self.hours_between(res['evt'][2],res['evt'][3]); - } - - if(res['parent'] == ""){ - task=new GanttTaskInfo(res['evt'][0], res['evt'][1], res['evt'][2], res['evt'][3], 100, "",res['evt'][6]); - project.addTask(task); - }else{ - task=new GanttTaskInfo(res['evt'][0], res['evt'][1], res['evt'][2], res['evt'][3], 100, "",res['evt'][6]); - prt = project.getTaskById(res['parent']); - prt.addChildTask(task); + k = res['evt'][0].toString().indexOf('_'); + 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); + } 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']); + prt.addChildTask(task); + } + } + } } } + for (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']); + prt.addChildTask(task); + } + oth_hgt = 264; min_hgt = 150; gantt_hgt = jQuery(window).height() - oth_hgt; From cd573cc4b27065d02b79be8edbe4902679315050 Mon Sep 17 00:00:00 2001 From: cpa-openerp Date: Mon, 27 Jun 2011 11:57:51 +0530 Subject: [PATCH 11/15] [FIX] Fixed issue of day do not scroll when scroll gantt view. bzr revid: cpa@tinyerp.com-20110627062751-njuslzfy8q5xsr0s --- addons/base_gantt/static/src/js/gantt.js | 50 ++++++++++++------- .../base_gantt/static/src/xml/base_gantt.xml | 2 +- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index 627bbae2005..dc456bff148 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -298,37 +298,53 @@ init: function(view_manager, session, element_id, dataset, view_id) { ganttrow = jQuery('.taskPanel').closest('tr'); gtd = ganttrow.children(':first-child'); gtd.children().addClass('task-name'); + + self.set_heigth(); + self.set_width(); jQuery(".toggle-sidebar").click(function(e) { self.set_width(); }); jQuery(window).bind('resize', function () { - - gantt_hgt = jQuery(window).height() - oth_hgt; - - if (gantt_hgt < min_hgt){ - gantt_hgt = min_hgt; - } - jQuery('#GanttDiv').height(gantt_hgt); - jQuery('.task-name').height(gantt_hgt - 40); - taskdiv.height(gantt_hgt - 40); - if (taskdiv.height() > jQuery('.taskPanel').height()){ - jQuery('.taskPanel').height(taskdiv.height()); - jQuery('.task-name').children().height(taskdiv.height()); - } + self.set_heigth(); self.set_width(); }); jQuery("div #_1, div #_1 + div").hide(); }, + set_heigth: function() { + + gantt_hgt = jQuery(window).height() - oth_hgt; + + if (gantt_hgt < min_hgt){ + gantt_hgt = min_hgt; + } + jQuery('#GanttDiv').css('height','100%'); + jQuery('.task-name').height(gantt_hgt - 40 -16); + taskdiv.height(gantt_hgt - 40); + + if (taskdiv.height() > jQuery('.taskPanel').height() + 16){ + jQuery('.taskPanel').height(taskdiv.height() - 16); + jQuery('.task-name').children().height(taskdiv.height() - 16); + } + }, + set_width: function() { - $gantt_panel.width(100); + + $gantt_panel.width(1); + jQuery(".ganttTaskPanel").parent().width(1); + + search_wdt = jQuery("#oe_app_search").width(); + jQuery('#GanttDiv').css('width','100%'); - $gantt_panel.width(jQuery("#oe_app_search").width() - 150); - if (taskdiv.width() > taskdiv.children().width()){ - taskdiv.children().width(taskdiv.width()); + jQuery(".ganttTaskPanel").parent().width(search_wdt - 150); + jQuery(".ganttTaskPanel").width(search_wdt - 150); + jQuery(".ganttDayPanel").width(search_wdt - 150 - 14); + + if (taskdiv.width() > taskdiv.children().width() + 16){ + taskdiv.children().width(taskdiv.width() - 16); } }, diff --git a/addons/base_gantt/static/src/xml/base_gantt.xml b/addons/base_gantt/static/src/xml/base_gantt.xml index ba4eacfbe70..d064d6e9ef2 100644 --- a/addons/base_gantt/static/src/xml/base_gantt.xml +++ b/addons/base_gantt/static/src/xml/base_gantt.xml @@ -1,5 +1,5 @@ From f755b722e555b779c3f229ca8e3482e53b1f2ffe Mon Sep 17 00:00:00 2001 From: cpa-openerp Date: Tue, 28 Jun 2011 10:53:20 +0530 Subject: [PATCH 12/15] [FIX] Increase width of left panel when right panel have no more width and increase window width. bzr revid: cpa@tinyerp.com-20110628052320-eca9m4j90em3az1f --- addons/base_gantt/static/src/js/gantt.js | 25 +++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index dc456bff148..a763870155b 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -275,6 +275,7 @@ init: function(view_manager, session, element_id, dataset, view_id) { oth_hgt = 264; min_hgt = 150; + name_min_wdt = 150; gantt_hgt = jQuery(window).height() - oth_hgt; search_wdt = jQuery("#oe_app_search").width(); @@ -298,7 +299,7 @@ init: function(view_manager, session, element_id, dataset, view_id) { ganttrow = jQuery('.taskPanel').closest('tr'); gtd = ganttrow.children(':first-child'); gtd.children().addClass('task-name'); - + self.set_heigth(); self.set_width(); @@ -337,15 +338,25 @@ init: function(view_manager, session, element_id, dataset, view_id) { jQuery(".ganttTaskPanel").parent().width(1); search_wdt = jQuery("#oe_app_search").width(); - + day_wdt = jQuery(".ganttDayPanel").children().children().width(); + name_wdt = jQuery('.task-name').width(); jQuery('#GanttDiv').css('width','100%'); - jQuery(".ganttTaskPanel").parent().width(search_wdt - 150); - jQuery(".ganttTaskPanel").width(search_wdt - 150); - jQuery(".ganttDayPanel").width(search_wdt - 150 - 14); - if (taskdiv.width() > taskdiv.children().width() + 16){ - taskdiv.children().width(taskdiv.width() - 16); + if (search_wdt - day_wdt <= name_min_wdt){ + jQuery(".ganttTaskPanel").parent().width(search_wdt - name_min_wdt); + jQuery(".ganttTaskPanel").width(search_wdt - name_min_wdt); + jQuery(".ganttDayPanel").width(search_wdt - name_min_wdt - 14); + jQuery('.task-name').width(name_min_wdt); + jQuery('.task-name').children().width(name_min_wdt); + }else{ + jQuery(".ganttTaskPanel").parent().width(day_wdt); + jQuery(".ganttTaskPanel").width(day_wdt); + jQuery(".taskPanel").width(day_wdt - 16); + jQuery(".ganttDayPanel").width(day_wdt -16); + jQuery('.task-name').width(search_wdt - day_wdt); + jQuery('.task-name').children().width(search_wdt - day_wdt); } + }, end_date: function(dat, duration) { From a1a06d13f5ddb970dd17f630c12e3d07145a7d87 Mon Sep 17 00:00:00 2001 From: cpa-openerp Date: Tue, 28 Jun 2011 11:19:54 +0530 Subject: [PATCH 13/15] [FIX] Use read_slice for get record at load time. bzr revid: cpa@tinyerp.com-20110628054954-6gb4vr1kdo5to45d --- addons/base_gantt/static/src/js/gantt.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index a763870155b..948091190bd 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -81,7 +81,7 @@ init: function(view_manager, session, element_id, dataset, view_id) { get_events: function() { var self = this; - this.dataset.read_ids(this.dataset.ids, {}, function(result) { + this.dataset.read_slice(false, false, false, function(result) { self.load_event(result); }); From c4f87f8503d14d47d8cceb0e6f760b981384f0f4 Mon Sep 17 00:00:00 2001 From: "sma (Tiny)" Date: Wed, 6 Jul 2011 11:31:55 +0530 Subject: [PATCH 14/15] [IMP] Implement resize for window events. bzr revid: sma@tinyerp.com-20110706060155-jmoovg7hd3osdzdk --- addons/base_gantt/static/src/js/gantt.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index 948091190bd..c088d3b1075 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -300,16 +300,15 @@ init: function(view_manager, session, element_id, dataset, view_id) { gtd = ganttrow.children(':first-child'); gtd.children().addClass('task-name'); - self.set_heigth(); - self.set_width(); - jQuery(".toggle-sidebar").click(function(e) { self.set_width(); }); - jQuery(window).bind('resize', function () { - self.set_heigth(); - self.set_width(); + jQuery(window).bind('resize',function(){ + window.clearTimeout(ganttChartControl._resize_timer); + ganttChartControl._resize_timer = window.setTimeout(function(){ + self.reload_gantt(); + }, 200); }); jQuery("div #_1, div #_1 + div").hide(); From ec4ae5e6bb60dfac864b4fcd7c1639104f4d0583 Mon Sep 17 00:00:00 2001 From: "sma (Tiny)" Date: Wed, 6 Jul 2011 12:04:57 +0530 Subject: [PATCH 15/15] [REM] Remove unsused code, no need to set heigth manually. bzr revid: sma@tinyerp.com-20110706063457-h3szv3akaax03ct1 --- addons/base_gantt/static/src/js/gantt.js | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index c088d3b1075..780ed8d18b0 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -314,23 +314,6 @@ init: function(view_manager, session, element_id, dataset, view_id) { jQuery("div #_1, div #_1 + div").hide(); }, - set_heigth: function() { - - gantt_hgt = jQuery(window).height() - oth_hgt; - - if (gantt_hgt < min_hgt){ - gantt_hgt = min_hgt; - } - jQuery('#GanttDiv').css('height','100%'); - jQuery('.task-name').height(gantt_hgt - 40 -16); - taskdiv.height(gantt_hgt - 40); - - if (taskdiv.height() > jQuery('.taskPanel').height() + 16){ - jQuery('.taskPanel').height(taskdiv.height() - 16); - jQuery('.task-name').children().height(taskdiv.height() - 16); - } - }, - set_width: function() { $gantt_panel.width(1);