123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972 |
- // wrapped by build app
- define("dojox/gantt/GanttProjectItem", ["dijit","dojo","dojox","dojo/require!dojox/gantt/GanttTaskItem,dojo/date/locale,dijit/focus"], function(dijit,dojo,dojox){
- dojo.provide("dojox.gantt.GanttProjectItem");
- dojo.require("dojox.gantt.GanttTaskItem");
- dojo.require("dojo.date.locale");
- dojo.require("dijit.focus"); // dijit.focus()
- dojo.declare("dojox.gantt.GanttProjectControl", null, {
- constructor: function(ganttChart, projectItem){
- this.project = projectItem;
- this.ganttChart = ganttChart;
- this.descrProject = null;
- this.projectItem = null;
- this.projectNameItem = null;
- this.posY = 0;
- this.posX = 0;
- this.nextProject = null;
- this.previousProject = null;
- this.arrTasks = [];
- this.percentage = 0;
- this.duration = 0;
- },
- checkWidthProjectNameItem: function(){
- if(this.projectNameItem.offsetWidth + this.projectNameItem.offsetLeft > this.ganttChart.maxWidthTaskNames){
- var width = this.projectNameItem.offsetWidth + this.projectNameItem.offsetLeft - this.ganttChart.maxWidthTaskNames;
- var countChar = Math.round(width / (this.projectNameItem.offsetWidth / this.projectNameItem.firstChild.length));
- var pName = this.project.name.substring(0, this.projectNameItem.firstChild.length - countChar - 3);
- pName += "...";
- this.projectNameItem.innerHTML = pName;
- }
- },
- refreshProjectItem: function(projectItem){
- this.percentage = this.getPercentCompleted();
- dojo.style(projectItem, {
- "left": this.posX + "px",
- "width": this.duration * this.ganttChart.pixelsPerWorkHour + "px"
- });
- var tblProjectItem = projectItem.firstChild;
- var width = this.duration * this.ganttChart.pixelsPerWorkHour;
- tblProjectItem.width = ((width == 0) ? 1 : width) + "px";
- tblProjectItem.style.width = ((width == 0) ? 1 : width) + "px";
- var rowprojectItem = tblProjectItem.rows[0];
- if(this.percentage != -1){
- if(this.percentage != 0){
- var cellprojectItem = rowprojectItem.firstChild;
- cellprojectItem.width = this.percentage + "%";
- var imageProgress = cellprojectItem.firstChild;
- dojo.style(imageProgress, {
- width: (!this.duration ? 1 : (this.percentage * this.duration * this.ganttChart.pixelsPerWorkHour / 100)) + "px",
- height: this.ganttChart.heightTaskItem + "px"
- })
- }
- if(this.percentage != 100){
- var cellprojectItem = rowprojectItem.lastChild;
- cellprojectItem.width = (100 - this.percentage) + "%";
- var imageProgress = cellprojectItem.firstChild;
- dojo.style(imageProgress, {
- width: (!this.duration ? 1 : ((100 - this.percentage) * this.duration * this.ganttChart.pixelsPerWorkHour / 100)) + "px",
- height: this.ganttChart.heightTaskItem + "px"
- })
- }
- }else{
- var cellprojectItem = rowprojectItem.firstChild;
- cellprojectItem.width = "1px";
- var imageProgress = cellprojectItem.firstChild;
- dojo.style(imageProgress, {
- width: "1px",
- height: this.ganttChart.heightTaskItem + "px"
- })
- }
- var divTaskInfo = projectItem.lastChild;
- var tblTaskInfo = divTaskInfo.firstChild;
- dojo.style(tblTaskInfo, {
- height: this.ganttChart.heightTaskItem + "px",
- width: (!this.duration ? 1 : (this.duration * this.ganttChart.pixelsPerWorkHour)) + "px"
- });
- var rowTaskInfo = tblTaskInfo.rows[0];
- var cellTaskInfo = rowTaskInfo.firstChild;
- cellTaskInfo.height = this.ganttChart.heightTaskItem + "px";
- if(this.project.parentTasks.length == 0){
- projectItem.style.display = "none";
- }
- return projectItem;
- },
- refreshDescrProject: function(divDesc){
- var posX = (this.posX + this.duration * this.ganttChart.pixelsPerWorkHour + 10);
- dojo.style(divDesc, {
- "left": posX + "px"
- });
- if(this.project.parentTasks.length == 0){
- this.descrProject.style.visibility = 'hidden';
- }
- return divDesc;
- },
- postLoadData: function(){
- //TODO e.g. project relative info...
- },
- refresh: function(){
- var containerTasks = this.ganttChart.contentData.firstChild;
- this.posX = (this.project.startDate - this.ganttChart.startDate) / (60 * 60 * 1000) * this.ganttChart.pixelsPerHour;
- this.refreshProjectItem(this.projectItem[0]);
- this.refreshDescrProject(this.projectItem[0].nextSibling);
- return this;
- },
- create: function(){
- var containerTasks = this.ganttChart.contentData.firstChild;
- this.posX = (this.project.startDate - this.ganttChart.startDate) / (60 * 60 * 1000) * this.ganttChart.pixelsPerHour;
- if(this.previousProject){
- if(this.previousProject.arrTasks.length > 0){
- var lastChildTask = this.ganttChart.getLastChildTask(this.previousProject.arrTasks[this.previousProject.arrTasks.length - 1]);
- this.posY = parseInt(lastChildTask.cTaskItem[0].style.top) + this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra;
- }else{
- this.posY = parseInt(this.previousProject.projectItem[0].style.top) + this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra;
- }
- }else{
- this.posY = 6;
- }
- var containerNames = this.ganttChart.panelNames.firstChild;
- this.projectNameItem = this.createProjectNameItem();
- containerNames.appendChild(this.projectNameItem);
- this.checkWidthProjectNameItem();
- this.projectItem = [this.createProjectItem(), []];
- containerTasks.appendChild(this.projectItem[0]);
- containerTasks.appendChild(this.createDescrProject());
- this.adjustPanelTime();
- },
- getTaskById: function(id){
- for(var i = 0; i < this.arrTasks.length; i++){
- var aTask = this.arrTasks[i];
- var task = this.searchTaskInTree(aTask, id);
- if(task){
- return task;
- }
- }
- return null;
- },
- searchTaskInTree: function(task, id){
- if(task.taskItem.id == id){
- return task;
- }else{
- for(var i = 0; i < task.childTask.length; i++){
- var cTask = task.childTask[i];
- if(cTask.taskItem.id == id){
- return cTask;
- }else{
- if(cTask.childTask.length > 0){
- var cTask = this.searchTaskInTree(cTask, id);
- if(cTask){
- return cTask;
- }
- }
- }
- }
- }
- return null;
- },
- shiftProjectItem: function(){
- var posItemL = null;
- var posItemR = null;
- var posProjectItemL = parseInt(this.projectItem[0].style.left);
- var posProjectItemR = parseInt(this.projectItem[0].firstChild.style.width) + parseInt(this.projectItem[0].style.left);
- var widthProjectItem = parseInt(this.projectItem[0].firstChild.style.width);
- for(var i = 0; i < this.arrTasks.length; i++){
- var aTask = this.arrTasks[i];
- var tmpPosItemL = parseInt(aTask.cTaskItem[0].style.left);
- var tmpPosItemR = parseInt(aTask.cTaskItem[0].style.left) + parseInt(aTask.cTaskItem[0].firstChild.firstChild.width);
- if(!posItemL){
- posItemL = tmpPosItemL;
- }
- if(!posItemR){
- posItemR = tmpPosItemR;
- }
- if(posItemL > tmpPosItemL){
- posItemL = tmpPosItemL;
- }
- if(posItemR < tmpPosItemR){
- posItemR = tmpPosItemR;
- }
- }
- if(posItemL != posProjectItemL){
- this.project.startDate = new Date(this.ganttChart.startDate);
- this.project.startDate.setHours(this.project.startDate.getHours() + (posItemL / this.ganttChart.pixelsPerHour));
- }
- this.projectItem[0].style.left = posItemL + "px";
- this.resizeProjectItem(posItemR - posItemL);
- this.duration = Math.round(parseInt(this.projectItem[0].firstChild.width) / (this.ganttChart.pixelsPerWorkHour));
- this.shiftDescrProject();
- this.adjustPanelTime();
- },
- adjustPanelTime: function(){
- var projectItem = this.projectItem[0];
- var width = parseInt(projectItem.style.left) + parseInt(projectItem.firstChild.style.width) + this.ganttChart.panelTimeExpandDelta;
- width += this.descrProject.offsetWidth;
- this.ganttChart.adjustPanelTime(width);
- },
- resizeProjectItem: function(width){
- var percentage = this.percentage,
- pItem = this.projectItem[0];
- if(percentage > 0 && percentage < 100){
- pItem.firstChild.style.width = width + "px";
- pItem.firstChild.width = width + "px";
- pItem.style.width = width + "px";
- var firstRow = pItem.firstChild.rows[0];
- firstRow.cells[0].firstChild.style.width = Math.round(width * percentage / 100) + "px";
- firstRow.cells[0].firstChild.style.height = this.ganttChart.heightTaskItem + "px";
- firstRow.cells[1].firstChild.style.width = Math.round(width * (100 - percentage) / 100) + "px";
- firstRow.cells[1].firstChild.style.height = this.ganttChart.heightTaskItem + "px";
- pItem.lastChild.firstChild.width = width + "px";
- }else if(percentage == 0 || percentage == 100){
- pItem.firstChild.style.width = width + "px";
- pItem.firstChild.width = width + "px";
- pItem.style.width = width + "px";
- var firstRow = pItem.firstChild.rows[0];
- firstRow.cells[0].firstChild.style.width = width + "px";
- firstRow.cells[0].firstChild.style.height = this.ganttChart.heightTaskItem + "px";
- pItem.lastChild.firstChild.width = width + "px";
- }
- },
- shiftDescrProject: function(){
- var posX = (parseInt(this.projectItem[0].style.left) + this.duration * this.ganttChart.pixelsPerWorkHour + 10);
- this.descrProject.style.left = posX + "px";
- this.descrProject.innerHTML = this.getDescStr();
- },
- showDescrProject: function(){
- var posX = (parseInt(this.projectItem[0].style.left) + this.duration * this.ganttChart.pixelsPerWorkHour + 10);
- this.descrProject.style.left = posX + "px";
- this.descrProject.style.visibility = 'visible';
- this.descrProject.innerHTML = this.getDescStr();
- },
- hideDescrProject: function(){
- this.descrProject.style.visibility = 'hidden';
- },
- getDescStr: function(){
- return this.duration/this.ganttChart.hsPerDay + " days, " + this.duration + " hours";
- },
- createDescrProject: function(){
- var posX = (this.posX + this.duration * this.ganttChart.pixelsPerWorkHour + 10);
- var divDesc = dojo.create("div", {
- innerHTML: this.getDescStr(),
- className: "ganttDescProject"
- });
- dojo.style(divDesc, {
- left: posX + "px",
- top: this.posY + "px"
- });
- this.descrProject = divDesc;
- if(this.project.parentTasks.length == 0){
- this.descrProject.style.visibility = 'hidden';
- }
- return divDesc;
- },
- createProjectItem: function(){
- this.percentage = this.getPercentCompleted();
- this.duration = this.getDuration();
- var projectItem = dojo.create("div", {
- id: this.project.id,
- className: "ganttProjectItem"
- });
- dojo.style(projectItem, {
- left: this.posX + "px",
- top: this.posY + "px",
- width: this.duration * this.ganttChart.pixelsPerWorkHour + "px"
- });
- var tblProjectItem = dojo.create("table", {
- cellPadding: "0",
- cellSpacing: "0",
- className: "ganttTblProjectItem"
- }, projectItem);
- var width = this.duration * this.ganttChart.pixelsPerWorkHour;
- tblProjectItem.width = ((width == 0) ? 1 : width) + "px";
- tblProjectItem.style.width = ((width == 0) ? 1 : width) + "px";
-
- var rowprojectItem = tblProjectItem.insertRow(tblProjectItem.rows.length);
- if(this.percentage != -1){
- if(this.percentage != 0){
- var cellprojectItem = dojo.create("td", {
- width: this.percentage + "%"
- }, rowprojectItem);
- cellprojectItem.style.lineHeight = "1px";
- var imageProgress = dojo.create("div", {
- className: "ganttImageProgressFilled"
- }, cellprojectItem);
- dojo.style(imageProgress, {
- width: (this.percentage * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
- height: this.ganttChart.heightTaskItem + "px"
- });
- }
- if(this.percentage != 100){
- var cellprojectItem = dojo.create("td", {
- width: (100 - this.percentage) + "%"
- }, rowprojectItem);
- cellprojectItem.style.lineHeight = "1px";
- var imageProgress = dojo.create("div", {
- className: "ganttImageProgressBg"
- }, cellprojectItem);
- dojo.style(imageProgress, {
- width: ((100 - this.percentage) * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
- height: this.ganttChart.heightTaskItem + "px"
- });
- }
- }else{
- var cellprojectItem = dojo.create("td", {
- width: "1px"
- }, rowprojectItem);
- cellprojectItem.style.lineHeight = "1px";
- var imageProgress = dojo.create("div", {
- className: "ganttImageProgressBg"
- }, cellprojectItem);
- dojo.style(imageProgress, {
- width: "1px",
- height: this.ganttChart.heightTaskItem + "px"
- });
- }
- var divTaskInfo = dojo.create("div", {className: "ganttDivTaskInfo"});
- var tblTaskInfo = dojo.create("table", {
- cellPadding: "0",
- cellSpacing: "0",
- height: this.ganttChart.heightTaskItem + "px",
- width: ((this.duration * this.ganttChart.pixelsPerWorkHour == 0) ? 1 : this.duration * this.ganttChart.pixelsPerWorkHour) + "px"
- }, divTaskInfo);
- var rowTaskInfo = tblTaskInfo.insertRow(0);
- var cellTaskInfo = dojo.create("td", {
- align: "center",
- vAlign: "top",
- height: this.ganttChart.heightTaskItem + "px",
- className: "ganttMoveInfo"
- }, rowTaskInfo);
- projectItem.appendChild(divTaskInfo);
- if(this.project.parentTasks.length == 0){
- projectItem.style.display = "none";
- }
- return projectItem;
- },
- createProjectNameItem: function(){
- var divName = dojo.create("div", {
- className: "ganttProjectNameItem",
- innerHTML: this.project.name,
- title: this.project.name
- });
- dojo.style(divName, {
- left: "5px",
- top: this.posY + "px"
- });
- dojo.attr(divName, "tabIndex", 0);
- if(this.ganttChart.isShowConMenu){
- this.ganttChart._events.push(
- dojo.connect(divName, "onmouseover", this, function(event){
- dojo.addClass(divName, "ganttProjectNameItemHover");
- clearTimeout(this.ganttChart.menuTimer);
- this.ganttChart.tabMenu.clear();
- this.ganttChart.tabMenu.show(event.target, this);
- })
- );
- this.ganttChart._events.push(
- dojo.connect(divName, "onkeydown", this, function(event){
- if(event.keyCode == dojo.keys.ENTER){
- this.ganttChart.tabMenu.clear();
- this.ganttChart.tabMenu.show(event.target, this);
- }
- if(this.ganttChart.tabMenu.isShow && (event.keyCode == dojo.keys.LEFT_ARROW || event.keyCode == dojo.keys.RIGHT_ARROW)){
- dijit.focus(this.ganttChart.tabMenu.menuPanel.firstChild.rows[0].cells[0]);
- }
- if(this.ganttChart.tabMenu.isShow && event.keyCode == dojo.keys.ESCAPE){
- this.ganttChart.tabMenu.hide();
- }
- })
- );
- this.ganttChart._events.push(
- dojo.connect(divName, "onmouseout", this, function(){
- dojo.removeClass(divName, "ganttProjectNameItemHover");
- clearTimeout(this.ganttChart.menuTimer);
- this.ganttChart.menuTimer = setTimeout(dojo.hitch(this, function(){
- this.ganttChart.tabMenu.hide();
- }), 200);
- })
- );
- this.ganttChart._events.push(
- dojo.connect(this.ganttChart.tabMenu.menuPanel, "onmouseover", this, function(){
- clearTimeout(this.ganttChart.menuTimer);
- })
- );
- this.ganttChart._events.push(
- dojo.connect(this.ganttChart.tabMenu.menuPanel, "onkeydown", this, function(event){
- if(this.ganttChart.tabMenu.isShow && event.keyCode == dojo.keys.ESCAPE){
- this.ganttChart.tabMenu.hide();
- }
- })
- );
- this.ganttChart._events.push(
- dojo.connect(this.ganttChart.tabMenu.menuPanel, "onmouseout", this, function(){
- clearTimeout(this.ganttChart.menuTimer);
- this.ganttChart.menuTimer = setTimeout(dojo.hitch(this, function(){
- this.ganttChart.tabMenu.hide();
- }), 200);
- })
- );
- }
- return divName;
- },
- getPercentCompleted: function(){
- var sum = 0, percentage = 0;
- dojo.forEach(this.project.parentTasks, function(ppTask){
- sum += parseInt(ppTask.percentage);
- }, this);
- if(this.project.parentTasks.length != 0){
- return percentage = Math.round(sum / this.project.parentTasks.length);
- }else{
- return percentage = -1;
- }
- },
- getDuration: function(){
- var duration = 0, tmpDuration = 0;
- if(this.project.parentTasks.length > 0){
- dojo.forEach(this.project.parentTasks, function(ppTask){
- tmpDuration = ppTask.duration * 24 / this.ganttChart.hsPerDay + (ppTask.startTime - this.ganttChart.startDate) / (60 * 60 * 1000);
- if(tmpDuration > duration){
- duration = tmpDuration;
- }
- }, this);
- return ((duration - this.posX) / 24) * this.ganttChart.hsPerDay;
- }else{
- return 0;
- }
- },
- deleteTask: function(id){
- var task = this.getTaskById(id);
- if(task){
- this.deleteChildTask(task);
- this.ganttChart.checkPosition();
- }
- },
- setName: function(name){
- if(name){
- this.project.name = name;
- this.projectNameItem.innerHTML = name;
- this.projectNameItem.title = name;
- this.checkWidthProjectNameItem();
-
- this.descrProject.innerHTML = this.getDescStr();
- this.adjustPanelTime();
- }
- },
- setPercentCompleted: function(percentage){
- percentage = parseInt(percentage);
- if(isNaN(percentage) || percentage > 100 || percentage < 0){
- return false;
- }
- var prow = this.projectItem[0].firstChild.rows[0],
- rc0 = prow.cells[0], rc1 = prow.cells[1];
- if((percentage > 0) && (percentage < 100) && (this.percentage > 0) && (this.percentage < 100)){
- rc0.width = parseInt(percentage) + "%";
- rc0.firstChild.style.width = (percentage * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px";
- rc1.width = (100 - parseInt(percentage)) + "%";
- rc1.firstChild.style.width = ((100 - percentage) * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px";
- }else if(((percentage == 0) || (percentage == 100)) && (this.percentage > 0) && (this.percentage < 100)){
- if(percentage == 0){
- rc0.parentNode.removeChild(rc0);
- rc1.width = 100 + "%";
- rc1.firstChild.style.width = this.duration * this.ganttChart.pixelsPerWorkHour + "px";
- }else if(percentage == 100){
- rc1.parentNode.removeChild(rc1);
- rc0.width = 100 + "%";
- rc0.firstChild.style.width = this.duration * this.ganttChart.pixelsPerWorkHour + "px";
- }
- }else if(((percentage == 0) || (percentage == 100)) && ((this.percentage == 0) || (this.percentage == 100))){
- if((percentage == 0) && (this.percentage == 100)){
- dojo.removeClass(rc0.firstChild, "ganttImageProgressFilled");
- dojo.addClass(rc0.firstChild, "ganttImageProgressBg");
- }else if((percentage == 100) && (this.percentage == 0)){
- dojo.removeClass(rc0.firstChild, "ganttImageProgressBg");
- dojo.addClass(rc0.firstChild, "ganttImageProgressFilled");
- }
- }else if(((percentage > 0) || (percentage < 100)) && ((this.percentage == 0) || (this.percentage == 100))){
- rc0.parentNode.removeChild(rc0);
- var cellprojectItem = dojo.create("td", {
- width: percentage + "%"
- }, prow);
- cellprojectItem.style.lineHeight = "1px";
- var imageProgress = dojo.create("div", {
- className: "ganttImageProgressFilled"
- }, cellprojectItem);
- dojo.style(imageProgress, {
- width: (percentage * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
- height: this.ganttChart.heightTaskItem + "px"
- });
- cellprojectItem = dojo.create("td", {
- width: (100 - percentage) + "%"
- }, prow);
- cellprojectItem.style.lineHeight = "1px";
- imageProgress = dojo.create("div", {
- className: "ganttImageProgressBg"
- }, cellprojectItem);
- dojo.style(imageProgress, {
- width: ((100 - percentage) * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
- height: this.ganttChart.heightTaskItem + "px"
- });
- }else if(this.percentage == -1){
- if(percentage == 100){
- dojo.removeClass(rc0.firstChild, "ganttImageProgressBg");
- dojo.addClass(rc0.firstChild, "ganttImageProgressFilled");
- }else if(percentage < 100 && percentage > 0){
- rc0.parentNode.removeChild(rc0);
- var cellprojectItem = dojo.create("td", {
- width: percentage + "%"
- }, prow);
- cellprojectItem.style.lineHeight = "1px";
- imageProgress = dojo.create("div", {
- className: "ganttImageProgressFilled"
- }, cellprojectItem);
- dojo.style(imageProgress, {
- width: (percentage * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
- height: this.ganttChart.heightTaskItem + "px"
- });
- cellprojectItem = dojo.create("td", {
- width: (100 - percentage) + "%"
- }, prow);
- cellprojectItem.style.lineHeight = "1px";
- imageProgress = dojo.create("div", {
- className: "ganttImageProgressBg"
- }, cellprojectItem);
- dojo.style(imageProgress, {
- width: ((100 - percentage) * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
- height: this.ganttChart.heightTaskItem + "px"
- });
- }
- }
- this.percentage = percentage;
- this.descrProject.innerHTML = this.getDescStr();
- return true;
- },
- deleteChildTask: function(task){
- if(task){
- var tItem0 = task.cTaskItem[0], tNameItem0 = task.cTaskNameItem[0],
- tItem1 = task.cTaskItem[1], tNameItem1 = task.cTaskNameItem[1],
- tItem2 = task.cTaskItem[2], tNameItem2 = task.cTaskNameItem[2];
- if(tItem0.style.display == "none"){
- this.ganttChart.openTree(task.parentTask);
- }
- //delete of connecting lines
- if(task.childPredTask.length > 0){
- for(var i = 0; i < task.childPredTask.length; i++){
- var cpTask = task.childPredTask[i];
- for(var t = 0; t < cpTask.cTaskItem[1].length; t++){
- cpTask.cTaskItem[1][t].parentNode.removeChild(cpTask.cTaskItem[1][t]);
- }
- cpTask.cTaskItem[1] = [];
- cpTask.predTask = null;
- }
- }
- //delete child task
- if(task.childTask.length > 0){
- while(task.childTask.length > 0){
- this.deleteChildTask(task.childTask[0]);
- }
- }
- //shift tasks
- var rowHeight = this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra;
- if(tItem0.style.display != "none"){
- task.shiftCurrentTasks(task, -rowHeight);
- }
- //delete object task
- this.project.deleteTask(task.taskItem.id);
- //delete div and connecting lines from contentData
- if(tItem0){
- tItem0.parentNode.removeChild(tItem0);
- }
- task.descrTask.parentNode.removeChild(task.descrTask);
- if(tItem1.length > 0){
- for(var j = 0; j < tItem1.length; j++){
- tItem1[j].parentNode.removeChild(tItem1[j]);
- }
- }
- //delete div and connecting lines from panelName
- if(tNameItem0){
- tNameItem0.parentNode.removeChild(tNameItem0);
- }
- if(task.cTaskNameItem[1]){
- for(var j = 0; j < tNameItem1.length; j++){
- tNameItem1[j].parentNode.removeChild(tNameItem1[j]);
- }
- }
- if(tNameItem2 && tNameItem2.parentNode){
- tNameItem2.parentNode.removeChild(tNameItem2);
- }
- if(task.taskIdentifier){
- task.taskIdentifier.parentNode.removeChild(task.taskIdentifier);
- task.taskIdentifier = null;
- }
- //delete object task
- if(task.parentTask){
- if(task.previousChildTask){
- if(task.nextChildTask){
- task.previousChildTask.nextChildTask = task.nextChildTask;
- }else{
- task.previousChildTask.nextChildTask = null;
- }
- }
- var parentTask = task.parentTask;
- for(var i = 0; i < parentTask.childTask.length; i++){
- if(parentTask.childTask[i].taskItem.id == task.taskItem.id){
- parentTask.childTask[i] = null;
- parentTask.childTask.splice(i, 1);
- break;
- }
- }
- if(parentTask.childTask.length == 0){
- if(parentTask.cTaskNameItem[2]){
- parentTask.cTaskNameItem[2].parentNode.removeChild(parentTask.cTaskNameItem[2]);
- parentTask.cTaskNameItem[2] = null;
- }
- }
- }else{
- if(task.previousParentTask){
- if(task.nextParentTask){
- task.previousParentTask.nextParentTask = task.nextParentTask;
- }else{
- task.previousParentTask.nextParentTask = null;
- }
- }
- var project = task.project;
- for(var i = 0; i < project.arrTasks.length; i++){
- if(project.arrTasks[i].taskItem.id == task.taskItem.id){
- project.arrTasks.splice(i, 1);
- }
- }
- }
- if(task.predTask){
- var predTask = task.predTask;
- for(var i = 0; i < predTask.childPredTask.length; i++){
- if(predTask.childPredTask[i].taskItem.id == task.taskItem.id){
- predTask.childPredTask[i] = null;
- predTask.childPredTask.splice(i, 1);
- }
- }
- }
- if(task.project.arrTasks.length != 0){
- task.project.shiftProjectItem();
- }else{
- task.project.projectItem[0].style.display = "none";
- this.hideDescrProject();
- }
- this.ganttChart.contentDataHeight -= this.ganttChart.heightTaskItemExtra + this.ganttChart.heightTaskItem;
- }
- },
-
- insertTask: function(id, name, startTime, duration, percentage, previousTaskId, taskOwner, parentTaskId){
- var task = null;
- var _task = null;
- if(this.project.getTaskById(id)){
- return false;
- }
- if((!duration) || (duration < this.ganttChart.minWorkLength)){
- duration = this.ganttChart.minWorkLength;
- }
- if((!name) || (name == "")){
- name = id;
- }
- if((!percentage) || (percentage == "")){
- percentage = 0;
-
- }else{
- percentage = parseInt(percentage);
- if(percentage < 0 || percentage > 100){
- return false;
- }
- }
- var sortRequired = false;
- if((parentTaskId) && (parentTaskId != "")){
- var parentTask = this.project.getTaskById(parentTaskId);
- if(!parentTask){
- return false;
- }
- startTime = startTime || parentTask.startTime;
- if(startTime < parentTask.startTime){
- return false;
- }
- task = new dojox.gantt.GanttTaskItem({
- id: id,
- name: name,
- startTime: startTime,
- duration: duration,
- percentage: percentage,
- previousTaskId: previousTaskId,
- taskOwner: taskOwner
- });
- if(!this.ganttChart.checkPosParentTask(parentTask, task)){
- return false;
- }
- task.parentTask = parentTask;
- var _parentTask = this.getTaskById(parentTask.id);
- var isHide = false;
- if(_parentTask.cTaskItem[0].style.display == "none"){
- isHide = true;
- }else if(_parentTask.cTaskNameItem[2]){
- if(!_parentTask.isExpanded){
- isHide = true;
- }
- }
- if(isHide){
- if(_parentTask.childTask.length == 0){
- this.ganttChart.openTree(_parentTask.parentTask);
- }else{
- this.ganttChart.openTree(_parentTask);
- }
- }
- if(previousTaskId != ""){
- var predTask = this.project.getTaskById(previousTaskId);
- if(!predTask){
- return false;
- }
- if(predTask.parentTask){
- if(predTask.parentTask.id != task.parentTask.id){
- return false;
- }
- }else{
- return false;
- }
- if(!this.ganttChart.checkPosPreviousTask(predTask, task)){
- this.ganttChart.correctPosPreviousTask(predTask, task);
- }
- task.previousTask = predTask;
- }
- var isAdd = false;
- if(sortRequired) for(var i = 0; i < parentTask.cldTasks.length; i++){
- if(task.startTime < parentTask.cldTasks[i].startTime){
- parentTask.cldTasks.splice(i, 0, task);
- if(i > 0){
- parentTask.cldTasks[i - 1].nextChildTask = parentTask.cldTasks[i];
- parentTask.cldTasks[i].previousChildTask = parentTask.cldTasks[i - 1];
- }
- if(parentTask.cldTasks[i + 1]){
- parentTask.cldTasks[i + 1].previousChildTask = parentTask.cldTasks[i];
- parentTask.cldTasks[i].nextChildTask = parentTask.cldTasks[i + 1];
- }
- isAdd = true;
- break;
- }
- }
- if(!isAdd){
- if(parentTask.cldTasks.length > 0){
- parentTask.cldTasks[parentTask.cldTasks.length - 1].nextChildTask = task;
- task.previousChildTask = parentTask.cldTasks[parentTask.cldTasks.length - 1];
- }
- parentTask.cldTasks.push(task);
- }
- if(parentTask.cldTasks.length == 1){
- var treeImg = _parentTask.createTreeImg();
- _parentTask.cTaskNameItem[2] = treeImg;
- }
- _task = new dojox.gantt.GanttTaskControl(task, this, this.ganttChart);
- _task.create();
- if(task.nextChildTask) _task.nextChildTask = _task.project.getTaskById(task.nextChildTask.id);
- _task.adjustPanelTime();
- var rowHeight = this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra;
- _task.shiftCurrentTasks(_task, rowHeight);//23
- }else{
- startTime = startTime || this.project.startDate;
- task = new dojox.gantt.GanttTaskItem({
- id: id,
- name: name,
- startTime: startTime,
- duration: duration,
- percentage: percentage,
- previousTaskId: previousTaskId,
- taskOwner: taskOwner
- });
- if(task.startTime <= this.ganttChart.startDate){
- return false;
- }
- if(previousTaskId != ""){
- var predTask = this.project.getTaskById(previousTaskId);
- if(!predTask){
- return false;
- }
- if(!this.ganttChart.checkPosPreviousTask(predTask, task)){
- this.ganttChart.correctPosPreviousTask(predTask, task);
- }
- if(predTask.parentTask){
- return false;
- }
- task.previousTask = predTask;
- }
- var isAdd = false;
- if(sortRequired){
- for(var i = 0; i < this.project.parentTasks.length; i++){
- var ppTask = this.project.parentTasks[i];
- if(startTime < ppTask.startTime){
- this.project.parentTasks.splice(i, 0, task);
- if(i > 0){
- this.project.parentTasks[i - 1].nextParentTask = task;
- task.previousParentTask = this.project.parentTasks[i - 1];
- }
- if(this.project.parentTasks[i + 1]){
- this.project.parentTasks[i + 1].previousParentTask = task;
- task.nextParentTask = this.project.parentTasks[i + 1];
- }
- isAdd = true;
- break;
- }
- }
- }
- if(!isAdd){
- if(this.project.parentTasks.length > 0){
- this.project.parentTasks[this.project.parentTasks.length - 1].nextParentTask = task;
- task.previousParentTask = this.project.parentTasks[this.project.parentTasks.length - 1];
- }
- this.project.parentTasks.push(task);
- }
- _task = new dojox.gantt.GanttTaskControl(task, this, this.ganttChart);
- _task.create();
- if(task.nextParentTask) _task.nextParentTask = _task.project.getTaskById(task.nextParentTask.id);
- _task.adjustPanelTime();
- this.arrTasks.push(_task);
- var rowHeight = this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra;
- _task.shiftCurrentTasks(_task, rowHeight);
- this.projectItem[0].style.display = "inline";
- this.setPercentCompleted(this.getPercentCompleted());
- this.shiftProjectItem();
- this.showDescrProject();
- }
- this.ganttChart.checkHeighPanelTasks();
- this.ganttChart.checkPosition();
- return _task;
- },
- shiftNextProject: function(project, height){
- if(project.nextProject){
- project.nextProject.shiftProject(height);
- this.shiftNextProject(project.nextProject, height);
- }
- },
- shiftProject: function(height){
- this.posY = this.posY + height;
- this.projectItem[0].style.top = parseInt(this.projectItem[0].style.top) + height + "px";
- this.descrProject.style.top = parseInt(this.descrProject.style.top) + height + "px";
- this.projectNameItem.style.top = parseInt(this.projectNameItem.style.top) + height + "px";
- if(this.arrTasks.length > 0){
- this.shiftNextParentTask(this.arrTasks[0], height);
- }
- },
- shiftTask: function(task, height){
- task.posY = task.posY + height;
- var tNameItem0 = task.cTaskNameItem[0], tNameItem1 = task.cTaskNameItem[1], tNameItem2 = task.cTaskNameItem[2],
- tItem0 = task.cTaskItem[0], tItem1 = task.cTaskItem[1], tItem2 = task.cTaskItem[2];
- tNameItem0.style.top = parseInt(tNameItem0.style.top) + height + "px";
- if(tNameItem2){
- tNameItem2.style.top = parseInt(tNameItem2.style.top) + height + "px";
- }
- if(task.parentTask){
- tNameItem1[0].style.top = parseInt(tNameItem1[0].style.top) + height + "px";
- tNameItem1[1].style.top = parseInt(tNameItem1[1].style.top) + height + "px";
- }
- task.cTaskItem[0].style.top = parseInt(task.cTaskItem[0].style.top) + height + "px";
- task.descrTask.style.top = parseInt(task.descrTask.style.top) + height + "px";
- if(tItem1[0]){
- tItem1[0].style.top = parseInt(tItem1[0].style.top) + height + "px";
- tItem1[1].style.top = parseInt(tItem1[1].style.top) + height + "px";
- tItem1[2].style.top = parseInt(tItem1[2].style.top) + height + "px";
- }
- },
- shiftNextParentTask: function(task, height){
- this.shiftTask(task, height);
- this.shiftChildTasks(task, height);
- if(task.nextParentTask){
- this.shiftNextParentTask(task.nextParentTask, height);
- }
- },
- shiftChildTasks: function(task, height){
- dojo.forEach(task.childTask, function(cTask){
- this.shiftTask(cTask, height);
- if(cTask.childTask.length > 0){
- this.shiftChildTasks(cTask, height);
- }
- }, this);
- }
- });
- dojo.declare("dojox.gantt.GanttProjectItem", null, {
- constructor: function(configuration){
- //id is required
- this.id = configuration.id;
- this.name = configuration.name || this.id;
- this.startDate = configuration.startDate || new Date();
- this.parentTasks = [];
- },
- getTaskById: function(id){
- for(var i = 0; i < this.parentTasks.length; i++){
- var pTask = this.parentTasks[i];
- var task = this.getTaskByIdInTree(pTask, id);
- if(task){
- return task;
- }
- }
- return null;
- },
- getTaskByIdInTree: function(parentTask, id){
- if(parentTask.id == id){
- return parentTask;
- }else{
- for(var i = 0; i < parentTask.cldTasks.length; i++){
- var pcTask = parentTask.cldTasks[i];
- if(pcTask.id == id){
- return pcTask;
- }
- if(pcTask.cldTasks.length > 0){
- if(pcTask.cldTasks.length > 0){
- var cTask = this.getTaskByIdInTree(pcTask, id);
- if(cTask){
- return cTask;
- }
- }
- }
- }
- }
- return null;
- },
- addTask: function(task){
- this.parentTasks.push(task);
- task.setProject(this);
- },
- deleteTask: function(id){
- var task = this.getTaskById(id);
- if(!task){return;}
- if(!task.parentTask){
- for(var i = 0; i < this.parentTasks.length; i++){
- var pTask = this.parentTasks[i];
- if(pTask.id == id){
- if(pTask.nextParentTask){
- if(pTask.previousParentTask){
- pTask.previousParentTask.nextParentTask = pTask.nextParentTask;
- pTask.nextParentTask.previousParentTask = pTask.previousParentTask;
- }else{
- pTask.nextParentTask.previousParentTask = null;
- }
- }else{
- if(pTask.previousParentTask){
- pTask.previousParentTask.nextParentTask = null;
- }
- }
- pTask = null;
- this.parentTasks.splice(i, 1);
- break;
- }
- }
- }else{
- var parentTask = task.parentTask;
- for(var i = 0; i < parentTask.cldTasks.length; i++){
- var pcTask = parentTask.cldTasks[i];
- if(pcTask.id == id){
- if(pcTask.nextChildTask){
- if(pcTask.previousChildTask){
- pcTask.previousChildTask.nextChildTask = pcTask.nextChildTask;
- pcTask.nextChildTask.previousChildTask = pcTask.previousChildTask;
- }else{
- pcTask.nextChildTask.previousChildTask = null;
- }
- }else{
- if(pcTask.previousChildTask){
- pcTask.previousChildTask.nextChildTask = null;
- }
- }
- pcTask = null;
- parentTask.cldTasks.splice(i, 1);
- break;
- }
- }
- }
- }
- });
- });
|