[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:
parent
98c4cf6c21
commit
840d2e8819
|
@ -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);
|
||||
};
|
||||
|
||||
|
||||
};
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue