Hi everybody
How can i refresh all parents duration and dates after task drag? because in my code it refresh when i click to the task
code :
gantt.attachEvent(“onTaskDrag”, function (id, mode, task, original) {
var modes = gantt.config.drag_mode;
var parent = gantt.getTask(task.parent);
var targetLinks = task.$target;
var link = this.getLink(targetLinks[0]);
if (link != null) {
if (link.type == "0") {
var sourceTask = gantt.getTask(link.source);
var targetTask = gantt.getTask(link.target);
var diff2 = original.duration * (1000 * 60 * 60 * 24);
if (targetTask.start_date <= sourceTask.end_date) {
task.start_date = new Date(+sourceTask.end_date);
task.end_date = new Date(+task.start_date + diff2);
}
}
}
if (parent != null) {
if (mode == modes.move || mode == modes.resize) {
var diff = original.duration * (1000 * 60 * 60 * 24);
var children = new Array();
children = gantt.getChildren(parent.id);
var n = children.length;
var indice = children.indexOf(task.id)
if (indice >= 1) {
var idprec = children[indice - 1];
var datafine = gantt.getTask(idprec);
var leftLimit = datafine.end_date;
var diff2 = original.duration * (1000 * 60 * 60 * 24);
if (task.start_date < leftLimit) {
task.start_date = new Date(+leftLimit);
task.end_date = new Date(+task.start_date + diff2);
parent.end_date = new Date(task.end_date);
parent.duration = gantt.calculateDuration(parent.start_date, parent.end_date);
}
}
if (n >= 2) {
var first = gantt.getTask(children[0]);
var last = gantt.getTask(children[children.length - 1]);
var targetLinksParent = parent.$target;
var link1 = this.getLink(targetLinksParent[0]);
if (mode == modes.move) {
if (link1 != null) {
if (link1.type == "0") {
var sourceTask = gantt.getTask(link1.source);
var diff2 = original.duration * (1000 * 60 * 60 * 24);
if (first.start_date <= sourceTask.end_date) {
task.start_date = new Date(+sourceTask.end_date);
task.end_date = new Date(+task.start_date + diff2);
}
}
}
}
if (mode == modes.move) {
if (+task.end_date > +parent.end_date) {
parent.end_date = new Date(task.end_date);
parent.duration = gantt.calculateDuration(parent.start_date, parent.end_date);
}
}
if (mode == modes.move) {
if (+task.start_date < +parent.start_date) {
parent.start_date = new Date(task.start_date);
parent.duration = gantt.calculateDuration(parent.start_date, parent.end_date);
}
}
if (mode == modes.move) {
if (+task.end_date < +parent.end_date) {
parent.end_date = new Date(last.end_date);
parent.duration = gantt.calculateDuration(parent.start_date, parent.end_date);
}
}
if (mode == modes.move) {
if (+task.start_date > parent.start_date) {
parent.start_date = new Date(first.start_date);
parent.duration = gantt.calculateDuration(parent.start_date, parent.end_date);
}
}
}
else
var first = gantt.getTask(children[0]);
var targetLinksParent = parent.$target;
var link1 = this.getLink(targetLinksParent[0]);
if (link1 != null) {
if (link1.type == "0") {
if (mode == modes.move) {
var sourceTask = gantt.getTask(link1.source);
var diff2 = original.duration * (1000 * 60 * 60 * 24);
if (first.start_date <= sourceTask.end_date) {
task.start_date = new Date(+sourceTask.end_date);
task.end_date = new Date(+task.start_date + diff2);
}
}
}
if (+task.end_date > +parent.end_date) {
parent.end_date = new Date(task.end_date);
parent.start_date = new Date(task.start_date);
parent.duration = gantt.calculateDuration(parent.start_date, parent.end_date);
}
if (mode == modes.move) {
if (+task.start_date < +parent.start_date) {
parent.start_date = new Date(task.start_date);
parent.end_date = new Date(task.end_date);
parent.duration = gantt.calculateDuration(parent.start_date, parent.end_date);
}
}
}
gantt.calculateEndDate(task);
var diff = task.start_date - original.start_date;
gantt.eachSuccessor(function (child) {
child.start_date = new Date(+child.start_date + diff);
child.end_date = new Date(+child.end_date + diff);
gantt.refreshTask(child.id, true);
}, id)
}
}
else if (mode == modes.move) {
var diff = task.start_date - original.start_date;
gantt.eachSuccessor(function (child) {
child.start_date = new Date(+child.start_date + diff);
child.end_date = new Date(+child.end_date + diff);
gantt.refreshTask(child.id, true);
}, id)
} if (parent == 0) {
var targetLinks = task.$target;
var link = this.getLink(targetLinks[0]);
if (link == null) {
var leftLimit = gantt.getTask(link.source).end_date;
if (mode == modes.move) {
var diff2 = original.duration * (1000 * 60 * 60 * 24);
if (+task.start_date < +leftLimit) {
task.start_date = new Date(+leftLimit);
task.end_date = new Date(+task.start_date + diff2);
}
}
if (mode == modes.move) {
var diff = task.start_date - original.start_date;
gantt.eachSuccessor(function (child) {
child.start_date = new Date(+child.start_date + diff);
child.end_date = new Date(+child.end_date + diff);
gantt.refreshTask(child.id, true);
}, id)
}
}
else {
if (mode == modes.move) {
var diff = task.start_date - original.start_date;
gantt.eachSuccessor(function (child) {
child.start_date = new Date(+child.start_date + diff);
child.end_date = new Date(+child.end_date + diff);
gantt.refreshTask(child.id, true);
}, id);
}
}
}
return true;
});
gantt.attachEvent("onAfterTaskDrag", function (id, mode, e) {
var parent = gantt.getTask(task.parent);
parent.duration = gantt.calculateDuration(parent.start_date, parent.end_date);
var modes = gantt.config.drag_mode;
if (mode == modes.move) {
gantt.eachSuccessor(function (child) {
child.start_date = gantt.roundDate(child.start_date);
child.end_date = gantt.calculateEndDate(child.start_date, child.duration);
gantt.updateTask(child.id);
}, id);
}
});