[FIX] Remove parent static start date.
bzr revid: cpa@tinyerp.com-20110428115703-z4spy22fvqnqv2m1
This commit is contained in:
parent
96d2e9b535
commit
cde1c95f9f
|
@ -8,7 +8,7 @@ openerp.base.views.add('gantt', 'openerp.base_gantt.GanttView');
|
||||||
openerp.base_gantt.GanttView = openerp.base.Controller.extend({
|
openerp.base_gantt.GanttView = openerp.base.Controller.extend({
|
||||||
|
|
||||||
init: function(view_manager, session, element_id, dataset, view_id) {
|
init: function(view_manager, session, element_id, dataset, view_id) {
|
||||||
|
|
||||||
this._super(session, element_id);
|
this._super(session, element_id);
|
||||||
this.view_manager = view_manager;
|
this.view_manager = view_manager;
|
||||||
this.dataset = dataset;
|
this.dataset = dataset;
|
||||||
|
@ -19,31 +19,31 @@ init: function(view_manager, session, element_id, dataset, view_id) {
|
||||||
this.widgets_counter = 0;
|
this.widgets_counter = 0;
|
||||||
this.fields = this.dataset.fields ? this.dataset.fields: {};
|
this.fields = this.dataset.fields ? this.dataset.fields: {};
|
||||||
this.ids = this.dataset.ids;
|
this.ids = this.dataset.ids;
|
||||||
this.name = "";
|
this.name = "";
|
||||||
this.date_start = "";
|
this.date_start = "";
|
||||||
this.date_delay = "";
|
this.date_delay = "";
|
||||||
this.date_stop = "";
|
this.date_stop = "";
|
||||||
this.color_field = "";
|
this.color_field = "";
|
||||||
this.day_lenth = 8;
|
this.day_lenth = 8;
|
||||||
this.colors = [];
|
this.colors = [];
|
||||||
this.color_values = [];
|
this.color_values = [];
|
||||||
this.calendar_fields = {};
|
this.calendar_fields = {};
|
||||||
this.info_fields = [];
|
this.info_fields = [];
|
||||||
this.domain = this.dataset._domain ? this.dataset._domain: [];
|
this.domain = this.dataset._domain ? this.dataset._domain: [];
|
||||||
this.context = {};
|
this.context = {};
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
start: function() {
|
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);
|
{"model": this.model, "view_id": this.view_id}, this.on_loaded);
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
on_loaded: function(data) {
|
on_loaded: function(data) {
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
this.fields_view = data.fields_view;
|
this.fields_view = data.fields_view;
|
||||||
|
|
||||||
this.name = this.fields_view.name || this.fields_view.arch.attrs.string;
|
this.name = this.fields_view.name || this.fields_view.arch.attrs.string;
|
||||||
this.view_id = this.fields_view.view_id;
|
this.view_id = this.fields_view.view_id;
|
||||||
|
|
||||||
|
@ -57,164 +57,201 @@ init: function(view_manager, session, element_id, dataset, view_id) {
|
||||||
|
|
||||||
this.text = this.fields_view.arch.children[0].children[0].attrs.name;
|
this.text = this.fields_view.arch.children[0].children[0].attrs.name;
|
||||||
this.parent = this.fields_view.arch.children[0].attrs.link;
|
this.parent = this.fields_view.arch.children[0].attrs.link;
|
||||||
|
|
||||||
this.format = "%Y-%m-%d";
|
this.format = "%Y-%m-%d";
|
||||||
this.time = "00:00:00";
|
this.time = "00:00:00";
|
||||||
|
|
||||||
self.create_gantt();
|
self.create_gantt();
|
||||||
self.get_events(self.ids);
|
self.get_events(self.ids);
|
||||||
|
|
||||||
this.$element.html(QWeb.render("GanttView", {"view": this, "fields_view": this.fields_view}));
|
this.$element.html(QWeb.render("GanttView", {"view": this, "fields_view": this.fields_view}));
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
create_gantt: function() {
|
create_gantt: function() {
|
||||||
|
|
||||||
ganttChartControl = new GanttChart(this.day_length);
|
ganttChartControl = new GanttChart(this.day_length);
|
||||||
ganttChartControl.setImagePath("/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/");
|
ganttChartControl.setImagePath("/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/");
|
||||||
ganttChartControl.setEditable(true);
|
ganttChartControl.setEditable(true);
|
||||||
ganttChartControl.showTreePanel(true);
|
ganttChartControl.showTreePanel(true);
|
||||||
ganttChartControl.showContextMenu(true);
|
ganttChartControl.showContextMenu(true);
|
||||||
ganttChartControl.showDescTask(true,'d,s-f');
|
ganttChartControl.showDescTask(true,'d,s-f');
|
||||||
ganttChartControl.showDescProject(true,'n,d');
|
ganttChartControl.showDescProject(true,'n,d');
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
get_events: function(event_ids) {
|
|
||||||
|
|
||||||
var self = this;
|
|
||||||
this.dataset.read_ids(event_ids, {}, function(result) {
|
|
||||||
self.load_event(result);
|
|
||||||
});
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
load_event: function(events) {
|
|
||||||
|
|
||||||
var self = this;
|
|
||||||
var result = events;
|
|
||||||
var project_id = new Array();
|
|
||||||
var project = new Array();
|
|
||||||
var sidebar = {}
|
|
||||||
var j = -1;
|
|
||||||
|
|
||||||
for (i in result) {
|
},
|
||||||
|
|
||||||
if (result[i][this.date_start] != false){
|
get_events: function(event_ids) {
|
||||||
var parent_id = result[i][this.parent][0];
|
|
||||||
var parent_name = result[i][this.parent][1];
|
var self = this;
|
||||||
|
this.dataset.read_ids(event_ids, {}, function(result) {
|
||||||
if (jQuery.inArray(parent_id, project_id) == -1){
|
self.load_event(result);
|
||||||
if (parent_id == undefined){
|
});
|
||||||
parent_name = "";
|
|
||||||
}
|
},
|
||||||
j = j + 1;
|
|
||||||
project[j] = new GanttProjectInfo(parent_id, parent_name, new Date(2011, 1, 1));
|
load_event: function(events) {
|
||||||
project_id[j] = parent_id;
|
|
||||||
}
|
var self = this;
|
||||||
|
|
||||||
var id = result[i]['id'];
|
var result = events;
|
||||||
var text = result[i][this.text];
|
var project = {};
|
||||||
|
var project_smalldate = {};
|
||||||
var start_date = this.convert_date_format(result[i][this.date_start]);
|
var proj_id = [];
|
||||||
|
var proj_id_text = [];
|
||||||
if (this.date_stop != undefined){
|
|
||||||
if (result[i][this.date_stop] != false){
|
//Smallest date of child is parent start date
|
||||||
var stop_date = this.convert_date_format(result[i][this.date_stop]);
|
for (i in result){
|
||||||
var duration= self.hours_between(start_date, stop_date);
|
var res = result[i];
|
||||||
}
|
|
||||||
else{
|
if (res[this.date_start] != false){
|
||||||
var duration = 0;
|
|
||||||
}
|
var parent_id = res[this.parent][0] || res[this.parent];
|
||||||
}
|
var parent_name = res[this.parent][1];
|
||||||
else{
|
var start_date = this.convert_date_format(res[this.date_start]);
|
||||||
var duration = result[i][this.date_delay];
|
|
||||||
}
|
if (project_smalldate[parent_id] == undefined){
|
||||||
if (duration == false)
|
project_smalldate[parent_id] = start_date;
|
||||||
duration = 0
|
proj_id.push(parent_id);
|
||||||
|
|
||||||
var task = new GanttTaskInfo(id, text, start_date, duration, 100, "");
|
if (parent_name != undefined){
|
||||||
|
proj_id_text.push(res[this.parent]);
|
||||||
k = project_id.indexOf(parent_id);
|
}
|
||||||
project[k].addTask(task);
|
}
|
||||||
}
|
else{
|
||||||
|
if (start_date < project_smalldate[parent_id]){
|
||||||
|
project_smalldate[parent_id] = start_date;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//get parent text
|
||||||
|
if (parent_name == undefined){
|
||||||
|
|
||||||
|
var ajax = {
|
||||||
|
url: '/base/dataset/call',
|
||||||
|
async: false
|
||||||
|
};
|
||||||
|
|
||||||
|
this.rpc(ajax, {
|
||||||
|
model: this.dataset.model,
|
||||||
|
method: "name_get",
|
||||||
|
ids: proj_id,
|
||||||
|
args: ""
|
||||||
|
}, function(response) {
|
||||||
|
proj_id_text = response.result;
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//create parents
|
||||||
|
for (i in proj_id){
|
||||||
|
|
||||||
|
var id = proj_id_text[i][0];
|
||||||
|
var text = proj_id_text[i][1];
|
||||||
|
|
||||||
|
project[id] = new GanttProjectInfo(id, text, project_smalldate[id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
//create childs
|
||||||
|
for (i in result) {
|
||||||
|
|
||||||
|
var res = result[i];
|
||||||
|
if (res[this.date_start] != false){
|
||||||
|
|
||||||
|
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]);
|
||||||
|
|
||||||
|
if (this.date_stop != undefined){
|
||||||
|
if (res[this.date_stop] != false){
|
||||||
|
var stop_date = this.convert_date_format(res[this.date_stop]);
|
||||||
|
var duration= self.hours_between(start_date, stop_date);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
var duration = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
var duration = res[this.date_delay];
|
||||||
|
}
|
||||||
|
if (duration == false)
|
||||||
|
duration = 0
|
||||||
|
task = new GanttTaskInfo(id, text, start_date, duration, 100, "");
|
||||||
|
project[parent_id].addTask(task);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Add parent
|
||||||
|
for (i in proj_id){
|
||||||
|
ganttChartControl.addProject(project[proj_id[i]]);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i in project_id){
|
|
||||||
ganttChartControl.addProject(project[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
ganttChartControl.create("GanttDiv");
|
ganttChartControl.create("GanttDiv");
|
||||||
ganttChartControl.attachEvent("onTaskEndResize", function(task) {self.on_task_end_resize(task);})
|
ganttChartControl.attachEvent("onTaskEndResize", function(task) {self.on_resize_drag(task, "resize");})
|
||||||
ganttChartControl.attachEvent("onTaskEndDrag", function(task) {self.on_task_end_drag(task);})
|
ganttChartControl.attachEvent("onTaskEndDrag", function(task) {self.on_resize_drag(task, "drag");})
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
hours_between: function(date1, date2) {
|
hours_between: function(date1, date2) {
|
||||||
|
|
||||||
var ONE_DAY = 1000 * 60 * 60 * 24
|
|
||||||
var date1_ms = date1.getTime()
|
|
||||||
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)
|
|
||||||
|
|
||||||
return (d * this.day_length) + h;
|
|
||||||
|
|
||||||
},
|
var ONE_DAY = 1000 * 60 * 60 * 24
|
||||||
|
var date1_ms = date1.getTime()
|
||||||
on_task_end_resize : function(task) {
|
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;
|
||||||
|
|
||||||
var event_id = task.getId();
|
|
||||||
var data = {};
|
|
||||||
|
|
||||||
if (this.date_stop != undefined){
|
|
||||||
data[this.date_stop] = this.reverse_convert_date_format(task.getFinishDate());
|
|
||||||
}else{
|
|
||||||
data[this.date_delay] = task.getDuration();
|
|
||||||
}
|
|
||||||
this.dataset.write(event_id, data, function(result) {});
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
on_task_end_drag : function(task) {
|
|
||||||
|
|
||||||
var event_id = task.getId();
|
|
||||||
var data = {};
|
|
||||||
|
|
||||||
data[this.date_start] = this.reverse_convert_date_format(task.getEST());
|
on_resize_drag : function(task, evt) {
|
||||||
|
|
||||||
if (this.date_stop != undefined){
|
var event_id = task.getId();
|
||||||
data[this.date_stop] = this.reverse_convert_date_format(task.getFinishDate());
|
var data = {};
|
||||||
}else{
|
|
||||||
data[this.date_delay] = task.getDuration();
|
if (evt == "drag"){
|
||||||
}
|
data[this.date_start] = this.reverse_convert_date_format(task.getEST(), "09:00:00");
|
||||||
|
}
|
||||||
this.dataset.write(event_id, data, function(result) {});
|
|
||||||
|
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);
|
||||||
|
}else{
|
||||||
|
data[this.date_delay] = task.getDuration();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.dataset.write(event_id, data, function(result) {});
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
do_show: function () {
|
do_show: function () {
|
||||||
|
this.$element.show();
|
||||||
this.$element.show();
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
do_hide: function () {
|
do_hide: function () {
|
||||||
|
|
||||||
this.$element.hide();
|
this.$element.hide();
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
convert_date_format: function(date) {
|
convert_date_format: function(date) {
|
||||||
var self = this;
|
|
||||||
|
var self = this;
|
||||||
if (date.length == 19){
|
|
||||||
self.format = "%Y-%m-%d %H:%M:%S";
|
if (date.length == 19){
|
||||||
self.time = date.split(' ')[1];
|
self.format = "%Y-%m-%d %H:%M:%S";
|
||||||
}
|
|
||||||
|
}
|
||||||
|
|
||||||
date = date+"";
|
date = date+"";
|
||||||
if(typeof (date) != "string" || date.length === 0){
|
if(typeof (date) != "string" || date.length === 0){
|
||||||
return null;
|
return null;
|
||||||
|
@ -224,7 +261,7 @@ init: function(view_manager, session, element_id, dataset, view_id) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
var day = iso[2];
|
var day = iso[2];
|
||||||
|
|
||||||
var iso_hours = day.split(' ');
|
var iso_hours = day.split(' ');
|
||||||
|
|
||||||
if (iso_hours.length > 1) {
|
if (iso_hours.length > 1) {
|
||||||
|
@ -234,36 +271,35 @@ init: function(view_manager, session, element_id, dataset, view_id) {
|
||||||
new_date.setHours(iso_date_hours[0]);
|
new_date.setHours(iso_date_hours[0]);
|
||||||
new_date.setMinutes(iso_date_hours[1]);
|
new_date.setMinutes(iso_date_hours[1]);
|
||||||
new_date.setSeconds(iso_date_hours[2]);
|
new_date.setSeconds(iso_date_hours[2]);
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var new_date = new Date(iso[0], iso[1] - 1, day);
|
var new_date = new Date(iso[0], iso[1] - 1, day);
|
||||||
}
|
}
|
||||||
|
|
||||||
new_date.setFullYear(iso[0]);
|
new_date.setFullYear(iso[0]);
|
||||||
new_date.setMonth(iso[1]-1);
|
new_date.setMonth(iso[1]-1);
|
||||||
new_date.setDate(day);
|
new_date.setDate(day);
|
||||||
return new_date;
|
return new_date;
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
reverse_convert_date_format: function(date) {
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
if (self.format == "%Y-%m-%d %H:%M:%S")
|
|
||||||
{
|
|
||||||
return date.getFullYear()+'-'+(date.getMonth()+1)+'-'+date.getDate()+' '+self.time;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate();
|
|
||||||
}
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
reverse_convert_date_format: function(date, time) {
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
if (self.format == "%Y-%m-%d %H:%M:%S"){
|
||||||
|
return date.getFullYear()+'-'+(date.getMonth()+1)+'-'+(date.getDate())+' '+time;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate();
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
reload_gantt: function(domain) {
|
reload_gantt: function(domain) {
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
this.rpc('/base_gantt/ganttview/reload_gantt',{
|
this.rpc('/base_gantt/ganttview/reload_gantt',{
|
||||||
'domain': domain,
|
'domain': domain,
|
||||||
'model': self.model
|
'model': self.model
|
||||||
|
@ -272,23 +308,24 @@ init: function(view_manager, session, element_id, dataset, view_id) {
|
||||||
jQuery("#GanttDiv").children().remove();
|
jQuery("#GanttDiv").children().remove();
|
||||||
self.get_events(event_ids);
|
self.get_events(event_ids);
|
||||||
});
|
});
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
do_search: function (domains, contexts, groupbys) {
|
do_search: function (domains, contexts, groupbys) {
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
return this.rpc('/base/session/eval_domain_and_context', {
|
return this.rpc('/base/session/eval_domain_and_context', {
|
||||||
domains: domains,
|
domains: domains,
|
||||||
contexts: contexts,
|
contexts: contexts,
|
||||||
group_by_seq: groupbys
|
group_by_seq: groupbys
|
||||||
}, function (results) {
|
}, function (results) {
|
||||||
|
|
||||||
self.dataset.context = results.context;
|
self.dataset.context = results.context;
|
||||||
self.dataset.domain = results.domain;
|
self.dataset.domain = results.domain;
|
||||||
return self.reload_gantt(self.dataset.domain);
|
return self.reload_gantt(self.dataset.domain);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// here you may tweak globals object, if any, and play with on_* or do_* callbacks on them
|
// here you may tweak globals object, if any, and play with on_* or do_* callbacks on them
|
||||||
|
|
Loading…
Reference in New Issue