gantt.attachEvent("onTaskDblClick", function(id,e){ return false; }); gantt.attachEvent("onAfterTaskAdd", function(id,item){ if(item.parent && item.parent > 0){ let parentId = item.parent; gantt.getTask(parentId).type = "project"; gantt.updateTask(parentId); } }); gantt.attachEvent("onTaskRowClick", function(id,row){ activityId = id; var activity = gantt.getTaskBy("id", id); activityName = activity[0].name; }); gantt.ext.inlineEditors.attachEvent("onBeforeEditStart", function(state){ let id = parseInt(state.id) let ganttData = gantt.getTask(id); // console.log("cek ganttData", ganttData); if(ganttData.type_activity && ganttData.type_activity=="header"){ return false } let column = state.columnName if(column=="progress" || column=="rencana_biaya"){ let hasChild = gantt.hasChild(id); if(hasChild){ return false } } if(column=="cost_actual"){ // let ganttData = gantt.getTask(id); let progress = ganttData.progress ? ganttData.progress : 0 if(progress <= 0){ return false } } // console.log("cek state", state); return true }); gantt.attachEvent("onBeforeTaskUpdate", function(id,new_item){ // format progress let progress = new_item.progress; if(progress > 100){ progress = 100; }else if(progress <= 0){ progress = 0; }else if(progress <= 1 && progress > 0){ progress = progress*100 } progress = progress/100; // format cost planning let costPlanning = new_item.rencana_biaya; costPlanning = replaceAll(costPlanning, ".", ""); costPlanning = replaceAll(costPlanning, ",", "."); new_item['rencana_biaya'] = costPlanning; new_item['progress'] = progress; }); gantt.attachEvent("onBeforeLinkAdd", function(id,link){ //any custom logic here // console.log("cek link", link); let source = link.source; let target = link.target; let parents = gantt.getParent(source); let parentt = gantt.getParent(target); let childt = gantt.hasChild(target); if(childt){ return false; } if(parents==target){ return false; } if(parentt==source){ return false } return true; }); gantt.attachEvent("onGanttReady", function(){ }); gantt.attachEvent("onGanttRender", function(){ if(readOnly && parseInt(readOnly)==1){ gantt.config.readonly = true; }else if(readOnly && parseInt(readOnly)==0){ gantt.config.readonly = false; }else{ gantt.config.readonly = true; } }); gantt.attachEvent("onGanttScroll", function (left, top){ var left_date = gantt.dateFromPos(left) var right_date = gantt.dateFromPos(left + gantt.$task.offsetWidth) let taskCount = gantt.getTaskCount(); if (taskCount > 0) { gantt.config.start_date = gantt.config.start_date || gantt.getState().min_date; gantt.config.end_date = gantt.config.end_date || gantt.getState().max_date; var min_allowed_date = gantt.date.add(gantt.config.start_date, 1, "day"); var max_allowed_date = gantt.date.add(gantt.config.end_date, -1, "day"); var repaint = false; if (earliest && +left_date <= +min_allowed_date && +left_date >= +earliest){ gantt.config.start_date = gantt.date.add(gantt.config.start_date, -1, "day"); repaint = true; } if (latest && +right_date >= +max_allowed_date && +right_date <= +latest){ gantt.config.end_date = gantt.date.add(gantt.config.end_date, 1, "day"); repaint = true; } if (repaint) { setTimeout(function(){ gantt.render() },20) } } });