From 840d2e8819d8f3db1526f446228df2d45b68ec0d Mon Sep 17 00:00:00 2001 From: cpa-openerp Date: Fri, 13 May 2011 12:49:52 +0530 Subject: [PATCH] [IMP] Remove search logic from gantt controller, set event color and use date.js . bzr revid: cpa@tinyerp.com-20110513071952-8zhi8afdb7oxsjl5 --- addons/base/static/src/js/dates.js | 10 +- addons/base_gantt/controllers/main.py | 9 -- .../lib/dhtmlxGantt/sources/dhtmlxgantt.js | 7 +- addons/base_gantt/static/src/js/gantt.js | 153 +++++++++--------- 4 files changed, 85 insertions(+), 94 deletions(-) diff --git a/addons/base/static/src/js/dates.js b/addons/base/static/src/js/dates.js index da4e948e282..105b014b272 100644 --- a/addons/base/static/src/js/dates.js +++ b/addons/base/static/src/js/dates.js @@ -5,7 +5,7 @@ openerp.base.parse_datetime = function(str) { if(!str) { return str; } - var regex = /\d\d\d\d-\d\d-\d\) \d\d:\d\d:\d\d/; + var regex = /\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d/; var res = regex.exec(str); if ( res[0] != str ) { throw "'" + str + "' is not a valid datetime"; @@ -62,7 +62,7 @@ var fts = function(str, size) { }; openerp.base.format_datetime = function(obj) { - if(! str) { + if(! obj) { return false; } return fts(obj.getUTCFullYear(),4) + "-" + fts(obj.getUTCMonth() + 1,2) + "-" @@ -71,7 +71,7 @@ openerp.base.format_datetime = function(obj) { }; openerp.base.format_date = function(obj) { - if(! str) { + if(! obj) { return false; } return fts(obj.getFullYear(),4) + "-" + fts(obj.getMonth() + 1,2) + "-" @@ -79,11 +79,11 @@ openerp.base.format_date = function(obj) { }; openerp.base.format_time = function(obj) { - if(! str) { + if(! obj) { return false; } return fts(obj.getHours(),2) + ":" + fts(obj.getMinutes(),2) + ":" + fts(obj.getSeconds(),2); }; - + }; \ No newline at end of file diff --git a/addons/base_gantt/controllers/main.py b/addons/base_gantt/controllers/main.py index ca8d51560e9..0e6754ecb05 100644 --- a/addons/base_gantt/controllers/main.py +++ b/addons/base_gantt/controllers/main.py @@ -4,17 +4,8 @@ from base.controllers.main import View class GanttView(View): _cp_path = "/base_gantt/ganttview" - model = '' - domain = [] - context = {} - @openerpweb.jsonrequest def load(self, req, model, view_id): fields_view = self.fields_view_get(req, model, view_id, 'gantt') return {'fields_view':fields_view} - @openerpweb.jsonrequest - def reload_gantt(self, req, model, domain): - model = req.session.model(model) - event_ids = model.search(domain) - return event_ids diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js b/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js index 752c51a7d74..75b33fefc45 100644 --- a/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js +++ b/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js @@ -173,8 +173,9 @@ GanttProjectInfo.prototype.getTaskByIdInTree = function(parentTask, id) * @type: public * @topic: 0 */ -function GanttTaskInfo(id, name, est, duration, percentCompleted, predecessorTaskId) +function GanttTaskInfo(id, name, est, duration, percentCompleted, predecessorTaskId, color) { + this.color = color || "white"; this.Id = id; this.Name = name; this.EST = est; @@ -4869,11 +4870,13 @@ 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) diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/base_gantt/static/src/js/gantt.js index cc594752678..4427837e34c 100644 --- a/addons/base_gantt/static/src/js/gantt.js +++ b/addons/base_gantt/static/src/js/gantt.js @@ -31,11 +31,10 @@ init: function(view_manager, session, element_id, dataset, view_id) { this.info_fields = []; this.domain = this.dataset._domain ? this.dataset._domain: []; this.context = {}; - }, start: function() { - this.rpc("/base_gantt/ganttview/load", + this.rpc("/base_gantt/ganttview/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded); }, @@ -58,11 +57,10 @@ init: function(view_manager, session, element_id, dataset, view_id) { this.text = this.fields_view.arch.children[0].children[0].attrs.name; this.parent = this.fields_view.arch.children[0].attrs.link; - this.format = "%Y-%m-%d"; - this.time = "00:00:00"; + this.format = "yyyy-MM-dd"; self.create_gantt(); - self.get_events(self.ids); + self.get_events(); this.$element.html(QWeb.render("GanttView", {"view": this, "fields_view": this.fields_view})); @@ -80,10 +78,10 @@ init: function(view_manager, session, element_id, dataset, view_id) { }, - get_events: function(event_ids) { + get_events: function() { var self = this; - this.dataset.read_ids(event_ids, {}, function(result) { + this.dataset.read_ids(this.dataset.ids, {}, function(result) { self.load_event(result); }); @@ -99,6 +97,11 @@ init: function(view_manager, session, element_id, dataset, view_id) { var proj_id = []; var proj_id_text = []; + 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'] + //Smallest date of child is parent start date for (i in result){ var res = result[i]; @@ -107,7 +110,7 @@ init: function(view_manager, session, element_id, dataset, view_id) { var parent_id = res[this.parent][0] || res[this.parent]; var parent_name = res[this.parent][1]; - var start_date = this.convert_date_format(res[this.date_start]); + var start_date = this.convert_str_date(res[this.date_start]); if (project_smalldate[parent_id] == undefined){ project_smalldate[parent_id] = start_date; @@ -155,6 +158,8 @@ init: function(view_manager, session, element_id, dataset, view_id) { } //create childs + var k = 0; + var color_box = {}; for (i in result) { var res = result[i]; @@ -163,11 +168,18 @@ init: function(view_manager, session, element_id, dataset, view_id) { var parent_id = res[this.parent][0] || res[this.parent]; var id = res['id']; var text = res[this.text]; - var start_date = this.convert_date_format(res[this.date_start]); + + var start_date = this.convert_str_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 = k + 1; + } if (this.date_stop != undefined){ if (res[this.date_stop] != false){ - var stop_date = this.convert_date_format(res[this.date_stop]); + var stop_date = this.convert_str_date(res[this.date_stop]); var duration= self.hours_between(start_date, stop_date); } else{ @@ -179,7 +191,7 @@ init: function(view_manager, session, element_id, dataset, view_id) { } if (duration == false) duration = 0 - task = new GanttTaskInfo(id, text, start_date, duration, 100, ""); + task = new GanttTaskInfo(id, text, start_date, duration, 100, "", color_box[color]); project[parent_id].addTask(task); } @@ -191,9 +203,11 @@ init: function(view_manager, session, element_id, dataset, view_id) { } ganttChartControl.create("GanttDiv"); - ganttChartControl.attachEvent("onTaskEndResize", function(task) {self.on_resize_drag(task, "resize");}) - ganttChartControl.attachEvent("onTaskEndDrag", function(task) {self.on_resize_drag(task, "drag");}) - ganttChartControl.attachEvent("onTaskDblClick", function(task){self.open_popup(task);}); + 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);}); + }, hours_between: function(date1, date2) { @@ -205,9 +219,11 @@ init: function(view_manager, session, element_id, dataset, view_id) { d = Math.round(difference_ms / ONE_DAY); h = Math.round((difference_ms % ONE_DAY)/(1000 * 60 * 60)); + return (d * this.day_length) + h; }, + open_popup : function(task) { var event_id = task.getId(); if (event_id) { @@ -230,28 +246,30 @@ init: function(view_manager, session, element_id, dataset, view_id) { event_form.start(); }, - on_resize_drag : function(task, evt) { + on_drag_start : function(task){ + 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 (evt == "drag"){ - data[this.date_start] = this.reverse_convert_date_format(task.getEST(), "09:00:00"); + 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) + 9) + ""; - if (tm.length == 1) - tm = "0" + tm; - - time = tm + ":00:00"; - - data[this.date_stop] = this.reverse_convert_date_format(task.getFinishDate(), time); + 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) {}); }, @@ -264,72 +282,52 @@ init: function(view_manager, session, element_id, dataset, view_id) { this.$element.hide(); }, - convert_date_format: function(date) { - + convert_str_date: function (str){ var self = this; - if (date.length == 19){ - self.format = "%Y-%m-%d %H:%M:%S"; - + if (str.length == 19){ + self.format = "yyyy-MM-dd HH:mm:ss"; + return openerp.base.parse_datetime(str); } - - date = date+""; - if(typeof (date) != "string" || date.length === 0){ - return null; + if (str.length == 10){ + self.format = "yyyy-MM-dd"; + return openerp.base.parse_date(str); } - var iso=date.split("-"); - if(iso.length === 0){ - return null; + if (str.length == 8){ + self.format = "HH:mm:ss"; + return openerp.base.parse_time(str); } - var day = iso[2]; - - var iso_hours = day.split(' '); - - if (iso_hours.length > 1) { - day = iso_hours[0]; - var iso_date_hours = iso_hours[1].split(':'); - var new_date = new Date(iso[0], iso[1] - 1, day); - new_date.setHours(iso_date_hours[0]); - new_date.setMinutes(iso_date_hours[1]); - new_date.setSeconds(iso_date_hours[2]); - } - else { - var new_date = new Date(iso[0], iso[1] - 1, day); - } - - new_date.setFullYear(iso[0]); - new_date.setMonth(iso[1]-1); - new_date.setDate(day); - return new_date; - }, - reverse_convert_date_format: function(date, time) { - + convert_date_str: function(full_date) { var self = this; - if (self.format == "%Y-%m-%d %H:%M:%S"){ - return date.getFullYear()+'-'+(date.getMonth()+1)+'-'+(date.getDate())+' '+time; + if (self.format == "yyyy-MM-dd HH:mm:ss"){ + return openerp.base.format_datetime(full_date); } - else{ - return date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate(); + if (self.format == "yyyy-MM-dd"){ + return openerp.base.format_date(full_date); + } + if (self.format == "HH:mm:ss"){ + return openerp.base.format_time(full_date); } - }, reload_gantt: function(domain) { - var self = this; - - this.rpc('/base_gantt/ganttview/reload_gantt',{ - 'domain': domain, - 'model': self.model - },function(event_ids) { - ganttChartControl.clearAll(); - jQuery("#GanttDiv").children().remove(); - self.get_events(event_ids); - }); - + 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); + }); }, do_search: function (domains, contexts, groupbys) { @@ -352,5 +350,4 @@ init: function(view_manager, session, element_id, dataset, view_id) { // here you may tweak globals object, if any, and play with on_* or do_* callbacks on them }; - // vim:et fdc=0 fdl=0: