[IMP] Remove search logic from gantt controller, set event color and use date.js .

bzr revid: cpa@tinyerp.com-20110513071952-8zhi8afdb7oxsjl5
This commit is contained in:
cpa-openerp 2011-05-13 12:49:52 +05:30
parent 98c4cf6c21
commit 840d2e8819
4 changed files with 85 additions and 94 deletions

View File

@ -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);
};
};

View File

@ -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

View File

@ -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)

View File

@ -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: