You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
670 lines
21 KiB
670 lines
21 KiB
3 years ago
|
const ganttId = getUrlParameter("gantt_id");
|
||
|
const readOnly = getUrlParameter("ro");
|
||
|
const proyekId = getUrlParameter("proyek_id");
|
||
2 years ago
|
let base_url = getUrlParameter("base_url");
|
||
2 years ago
|
const adwIntegrationUrl = "https://adw-api.ospro.id/api";
|
||
3 years ago
|
|
||
|
let userToVersionGanttId = 0
|
||
|
let activityId = 0;
|
||
|
let actionHappen = false;
|
||
2 years ago
|
let activityName = "";
|
||
3 years ago
|
let token = getUrlParameter("token");
|
||
|
if (!token || token == "") {
|
||
2 years ago
|
token = `eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvYXBpLWl1Lm9zcHJvLmlkXC9hcGlcL2xvZ2luIiwiaWF0IjoxNjQ2ODA3OTA4LCJleHAiOjE2NDY4OTQzMDgsIm5iZiI6MTY0NjgwNzkwOCwianRpIjoiNmdtcEx3cjlob1JFZ0hSNSIsInN1YiI6MSwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.1xB2rvTJ6Edf7l_8jRPOmoMYnf8f59Rd8jJghJ39xps`;
|
||
3 years ago
|
}
|
||
|
const axiosInstance = axios.create({
|
||
2 years ago
|
headers: {
|
||
|
"Authorization": `Bearer ${token}`,
|
||
|
"Content-type": "application/json"
|
||
|
}
|
||
3 years ago
|
});
|
||
|
|
||
|
axiosInstance.interceptors.request.use(async (config) => {
|
||
2 years ago
|
try{
|
||
|
$("body").addClass("loading");
|
||
|
}
|
||
|
catch(e)
|
||
|
{
|
||
|
$("body").removeClass("loading");
|
||
|
alert('Error request' + e);
|
||
|
}
|
||
|
|
||
|
return config;
|
||
3 years ago
|
});
|
||
|
|
||
|
axiosInstance.interceptors.response.use(async (config) => {
|
||
2 years ago
|
try {
|
||
|
$("body").removeClass("loading");
|
||
|
}
|
||
|
catch(e)
|
||
|
{
|
||
|
$("body").removeClass("loading");
|
||
|
alert('Error response' + e);
|
||
|
}
|
||
|
|
||
|
return config;
|
||
3 years ago
|
});
|
||
|
|
||
|
const HEADER = {
|
||
2 years ago
|
headers:
|
||
|
{
|
||
|
'Authorization': `Bearer ${token}`,
|
||
|
"Content-type": `application/json`
|
||
|
}
|
||
3 years ago
|
};
|
||
|
|
||
|
$.ajaxSetup({
|
||
2 years ago
|
headers: {
|
||
|
"Content-Type": "application/json",
|
||
|
"Authorization": `Bearer ${token}`
|
||
|
}
|
||
3 years ago
|
});
|
||
|
|
||
|
$(document).on({
|
||
2 years ago
|
ajaxStart: function(){
|
||
|
$("body").addClass("loading");
|
||
|
},
|
||
|
ajaxStop: function(){
|
||
|
$("body").removeClass("loading");
|
||
|
}
|
||
3 years ago
|
});
|
||
|
|
||
|
gantt.plugins({
|
||
2 years ago
|
drag_timeline: true,
|
||
|
critical_path: true ,
|
||
|
auto_scheduling: true
|
||
3 years ago
|
});
|
||
|
|
||
|
// gantt.templates.parse_date = function (date) {
|
||
|
// return new Date(2019,01,01);
|
||
|
// };
|
||
|
|
||
|
// gantt.config.highlight_critical_path = true;
|
||
|
gantt.config.date_format = "%Y-%m-%d %H:%i:%s";
|
||
|
// gantt.config.date_format="%d-%m-%Y %H:%i:%s";
|
||
|
// gantt.config.date_grid="%d-%m-%Y %H:%i:%s";
|
||
|
gantt.config.auto_scheduling = true;
|
||
|
gantt.config.fit_tasks = true;
|
||
|
if (!base_url) {
|
||
2 years ago
|
base_url = `https://api-iu.ospro.id/api/`;
|
||
|
// console.log("cek base url 2",base_url)
|
||
3 years ago
|
}else{
|
||
2 years ago
|
base_url = base_url+"/";
|
||
3 years ago
|
}
|
||
|
// console.log("cek base url 3",base_url)
|
||
|
// gantt plugins
|
||
|
gantt.plugins({
|
||
2 years ago
|
marker: true,
|
||
2 years ago
|
fullscreen: true
|
||
3 years ago
|
});
|
||
|
|
||
|
// add today line
|
||
|
var dateToStr = gantt.date.date_to_str(gantt.config.task_date);
|
||
|
var markerId = gantt.addMarker({
|
||
2 years ago
|
start_date: new Date(),
|
||
|
css: "today",
|
||
|
text: "Today",
|
||
|
title: dateToStr(new Date())
|
||
3 years ago
|
});
|
||
|
gantt.getMarker(markerId); //->{css:"today", text:"Now", id:...}
|
||
|
|
||
|
var colHeader = '<div class="gantt_grid_head_cell"><i style="margin-right:5px;" class="gantt_grid_head_cell f-blue-sky fa fa-plus icon-action-header" onclick="addWithoutParent()"></i><i class="gantt_grid_head_cell icon-action-header f-black fab fa-jira" onclick="addMilestone(null)"></i></div>',
|
||
2 years ago
|
colContent = function (task) {
|
||
|
var hasChild = gantt.hasChild(task.id);
|
||
|
var optionsContent = '<div class="align-left">';
|
||
|
optionsContent += '<i title="Add Activity" class="fa gantt_button_grid gantt_grid_add fa-plus icon-action f-blue-sky" onclick="clickGridButton(' + task.id + ', \'add\')"></i> ';
|
||
|
optionsContent += '<i title="Delete Activity" class="fa gantt_button_grid gantt_grid_delete fa-times icon-action f-red" onclick="clickGridButton(' + task.id + ', \'delete\')"></i> ';
|
||
|
optionsContent += '<i title="Add Milestone" class="fa gantt_button_grid gantt_grid_add fab fa-jira icon-action f-black" onclick="addMilestone('+task.id+')"></i> ';
|
||
|
optionsContent += !hasChild ? '<i title="Upload Document" class="fa gantt_button_grid gantt_grid_delete fa-file icon-action f-orange" onclick="clickGridButton(' + task.id + ', \'upload\')"></i> ' : '';
|
||
|
optionsContent += !hasChild ? '<i title="Show Comments" class="fa gantt_button_grid gantt_grid_delete fa-comment icon-action f-black" onclick="clickGridButton(' + task.id + ', \'comment\')"></i> ' : '';
|
||
|
optionsContent += !hasChild ? '<i title="Activity Location" class="fa fas gantt_button_grid gantt_grid_delete fa-map-marked icon-action f-green" onclick="openActivityMap(' + task.id + ')"></i> ' : '';
|
||
|
optionsContent += '</div>';
|
||
|
return (optionsContent);
|
||
|
};
|
||
3 years ago
|
|
||
|
let no = 4; // for temporary change with last id in database m_activity
|
||
|
|
||
|
var formatter = gantt.ext.formatters.durationFormatter({
|
||
2 years ago
|
enter: "day",
|
||
|
store: "day",
|
||
|
format: "auto"
|
||
3 years ago
|
});
|
||
|
|
||
|
var progressEditor = {type: "progressCustom", map_to: "progress", min:0, max: 100};
|
||
|
var costPlanningEditor = {type: "costPlanningEditor", map_to: "rencana_biaya", min:0};
|
||
|
var linksFormatter = gantt.ext.formatters.linkFormatter({ durationFormatter: formatter });
|
||
|
|
||
|
function satuanLabel(task){
|
||
2 years ago
|
var value = task.satuan_id;
|
||
|
var list = gantt.serverList("satuan");
|
||
|
if(value){
|
||
|
for(var i = 0; i < list.length; i++){
|
||
|
if(list[i].key == parseInt(value)){
|
||
|
return list[i].label;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return "";
|
||
3 years ago
|
}
|
||
|
|
||
|
const editor = {
|
||
2 years ago
|
text: { type: "text", map_to: "text" },
|
||
|
kode_sortname: { type: "text", map_to: "kode_sortname" },
|
||
|
start_date: { type: "date", map_to: "start_date", min: new Date(2018, 0, 1) },
|
||
|
end_date: { type: "date", map_to: "end_date", min: new Date(2018, 0, 1) },
|
||
|
duration: { type: "duration", map_to: "duration", min: 0, max: 365, formatter: formatter },
|
||
|
cost: { type: "number", map_to: "rencana_biaya", min: 0 },
|
||
|
costActual: { type: "number", map_to: "biaya_actual", min: 0 },
|
||
|
status: { type: "text", map_to: "status" },
|
||
|
job_count: { type: "number", map_to: "jumlah_pekerjaan", min: 0 },
|
||
|
job_unit: { type: "text", map_to: "satuan", min: 0 },
|
||
|
bobot_planning:{ type: "number", map_to: "bobot_planning", min: 0 },
|
||
|
human_resource: (`<div data-toggle="modal" data-target="#modal-hr">
|
||
|
|
||
|
</div>`),
|
||
|
satuan:{type: "select", map_to: "satuan_id", options:gantt.serverList("satuan")}
|
||
3 years ago
|
}
|
||
|
|
||
|
function addWithoutParent() {
|
||
2 years ago
|
var task = gantt.getTaskByIndex(0);
|
||
3 years ago
|
|
||
2 years ago
|
let start_date = new Date();
|
||
3 years ago
|
|
||
2 years ago
|
if (task) {
|
||
|
start_date = task.start_date;
|
||
|
}
|
||
3 years ago
|
|
||
2 years ago
|
var taskId = gantt.addTask({
|
||
|
id: no,
|
||
|
text: `New Activity`,
|
||
|
start_date: start_date,
|
||
|
biaya: 10000,
|
||
|
awaw: "wadad",
|
||
|
duration: 7
|
||
|
});
|
||
3 years ago
|
|
||
2 years ago
|
gantt.selectTask(taskId);
|
||
3 years ago
|
|
||
2 years ago
|
no = no + 1;
|
||
3 years ago
|
}
|
||
|
|
||
|
function addWithParent(id) {
|
||
2 years ago
|
var task = gantt.getTask(id);
|
||
3 years ago
|
|
||
2 years ago
|
let start_date = new Date();
|
||
3 years ago
|
|
||
2 years ago
|
if (task) {
|
||
|
start_date = task.start_date;
|
||
|
}
|
||
3 years ago
|
|
||
2 years ago
|
gantt.addTask({
|
||
|
id: no,
|
||
|
text: `New Activity`,
|
||
|
start_date: start_date,
|
||
|
duration: task.duration
|
||
|
}, id);
|
||
3 years ago
|
|
||
2 years ago
|
no = no + 1;
|
||
3 years ago
|
}
|
||
|
|
||
|
function clickGridButton(id, action) {
|
||
2 years ago
|
switch (action) {
|
||
|
case "edit":
|
||
|
gantt.showLightbox(id);
|
||
|
break;
|
||
|
case "add":
|
||
|
addWithParent(id);
|
||
|
break;
|
||
|
case "delete":
|
||
|
gantt.confirm({
|
||
|
title: gantt.locale.labels.confirm_deleting_title,
|
||
|
text: gantt.locale.labels.confirm_deleting,
|
||
|
callback: function (res) {
|
||
|
if (res)
|
||
|
gantt.deleteTask(id);
|
||
|
}
|
||
|
});
|
||
|
break;
|
||
|
case "upload":
|
||
|
showDocuments(id);
|
||
|
break;
|
||
|
case "comment":
|
||
|
showComments(id);
|
||
|
break;
|
||
|
}
|
||
3 years ago
|
}
|
||
|
|
||
|
function createColumnsConfig(selectedColumns){
|
||
2 years ago
|
var newColumns = [];
|
||
3 years ago
|
|
||
|
|
||
2 years ago
|
allColumns.forEach(function(column){
|
||
|
// restore the action
|
||
|
if(selectedColumns[column.name]){
|
||
|
// if (column.name === 'action') {
|
||
|
// newColumns.push(column);
|
||
|
// }
|
||
|
newColumns.push(column);
|
||
|
}
|
||
|
});
|
||
3 years ago
|
|
||
2 years ago
|
return newColumns;
|
||
3 years ago
|
}
|
||
|
|
||
|
var allColumns = [
|
||
2 years ago
|
{ name: "action", label: colHeader, align: "left", min_width: 115, template: colContent, resize: true },
|
||
|
{ name: "kode_sortname", label: "Kode / Sortname",align: "center", min_width: 120, editor: editor.kode_sortname, resize: true },
|
||
|
{ name: "text", label: "Activity", tree: true, min_width: 150, editor: editor.text, resize: true },
|
||
|
{ name: "start_date", label: "Start Date", align: "center", min_width: 80, editor: editor.start_date, resize: true },
|
||
|
{ name: "end_date", label: "Finish Date", align: "center", min_width: 80, editor: editor.end_date, resize: true },
|
||
|
{ name: "duration", label: "Duration", align: "center", min_width: 50, editor: editor.duration, resize: true },
|
||
|
{ name: "rencana_biaya", label: "Cost Planning", align: "center", min_width: 100, resize: true, template: function (text) {
|
||
|
if(!text.rencana_biaya){
|
||
|
return
|
||
|
}
|
||
|
let rencana_biaya = text.rencana_biaya
|
||
|
return "Rp. "+ formatRupiah(rencana_biaya)
|
||
|
} },
|
||
|
{ name: "cost_actual", label: "Cost Actual", align: "center", min_width: 100, resize: true, template: function (text) {
|
||
|
if(!text.biaya_actual){
|
||
|
return
|
||
|
}
|
||
|
let biaya_actual = text.biaya_actual
|
||
|
return "Rp. "+ formatRupiah(biaya_actual)
|
||
|
} },
|
||
|
{ name: "assign_hr", label: "Assign To", align: "center", min_width: 150, resize: true, template: function (text) {
|
||
|
if(text.type=="project" || text.type=="milestone"){
|
||
|
return;
|
||
|
}
|
||
|
let html = ``;
|
||
|
var assign_hr = text.assign_hr
|
||
|
if(!assign_hr || !assign_hr.length){
|
||
|
html = `<span class="badge badge-pill badge-danger">Unassigned</span>`;
|
||
|
}else{
|
||
|
if(assign_hr.length==1){
|
||
|
html = `<span class="text-capitalize badge badge-pill badge-primary">${assign_hr[0]}</span>`;
|
||
|
}else{
|
||
|
assign_hr.forEach(function(val, index) {
|
||
|
html += `<span class="text-capitalize badge badge-primary mr-1">${val.substr(0, 1)}</span>`;
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
return `<div class="d-flex justify-content-center align-items-center" data-toggle="modal" data-target="#modal-hr" style="min-width:100%;height:100%;">
|
||
|
${html}
|
||
|
</div>`
|
||
|
}
|
||
|
},
|
||
|
{ name: "material", label: "Material", align: "center", min_width: 150, resize: true, template: function (text) {
|
||
|
if(text.type=="project" || text.type=="milestone"){
|
||
|
return;
|
||
|
}
|
||
|
let html = ``;
|
||
|
var assign_material = text.assign_material
|
||
|
|
||
|
if(!assign_material || !assign_material.length){
|
||
|
html = `<span class="badge badge-pill badge-danger">Unassigned</span>`;
|
||
|
}else{
|
||
|
if(assign_material.length > 0 ){
|
||
|
html = `<span class="text-capitalize badge badge-pill badge-primary">Assigned</span>`;
|
||
|
}
|
||
|
}
|
||
|
return `<div class="d-flex justify-content-center align-items-center" data-toggle="modal" data-target="#modal-material" style="min-width:100%;height:100%;">
|
||
|
${html}
|
||
|
</div>`
|
||
|
} },
|
||
|
{ name: "tools", label: "Tools", align: "center", min_width: 150, resize: true, template: function (text) {
|
||
|
if(text.type=="project" || text.type=="milestone"){
|
||
|
return;
|
||
|
}
|
||
|
let html = ``;
|
||
|
var assign_tools = text.assign_tools
|
||
|
|
||
|
if(!assign_tools || !assign_tools.length){
|
||
|
// html = `<span class="badge badge-pill badge-danger">Unassigned</span>`;
|
||
|
}else{
|
||
|
if(assign_tools.length > 0 ){
|
||
|
html = `<span class="text-capitalize badge badge-pill badge-primary">Assigned</span>`;
|
||
|
}
|
||
|
}
|
||
|
return `<div class="d-flex justify-content-center align-items-center" data-toggle="modal" data-target="#modal-tools" style="min-width:100%;height:100%;">
|
||
|
${html}
|
||
|
</div>`
|
||
|
} },
|
||
|
// { name: "status", label: "Status", align: "center", editor: editor.status, resize: true },
|
||
|
{ name: "bobot_planning", label: "Bobot Activity (%)", align: "center", resize: true, min_width: 115, template: function (text) {
|
||
|
if(!text.bobot_planning){
|
||
|
return
|
||
|
}
|
||
|
let bobot_planning = parseFloat(text.bobot_planning);
|
||
|
// console.log("bobot_planning", bobot_planning);
|
||
|
return roundToTwo(bobot_planning);
|
||
|
} },
|
||
|
{ name: "progress", label: "Actual Progress (%)", align: "center", editor: progressEditor, min_width: 125, template: function (text) {
|
||
|
let progress = text.progress
|
||
|
progress = progress*100
|
||
|
return progress;
|
||
|
}, resize: true },
|
||
|
{ name:"progress_actual", label: "Total Actual Progress (%)", align: "center", min_width: 150, template: function (text) {
|
||
|
let progress = text.progress
|
||
|
progress = progress*100
|
||
|
let bobot = text.bobot_planning
|
||
|
let actual = (progress*bobot) / 100
|
||
|
return roundToTwo(actual);
|
||
|
}, resize: true },
|
||
|
{ name: "jumlah_pekerjaan", label: "Volume Plan", align: "center", min_width: 100, resize: true, editor:editor.job_count },
|
||
|
{ name: "jobs_done", label: "Volume Actual", align: "center", min_width: 100, resize: true, template: function (text) {
|
||
|
if(text.type=="project" || text.type=="milestone"){
|
||
|
return;
|
||
|
}
|
||
|
let html = text.jobs_done ? text.jobs_done : 0;
|
||
|
return `<div class="d-flex justify-content-center align-items-center" data-toggle="modal" data-target="#modal_report_activity" style="min-width:100%;height:100%;">
|
||
|
${html}
|
||
|
</div>`
|
||
|
} },
|
||
|
{ name: "satuan", label: "UOM", align: "center", min_width: 100, resize: true, editor:editor.satuan, template: satuanLabel },
|
||
|
{
|
||
|
name: "predecessor", label: "Predecessor", align: "center", min_width: 100, template: function (text) {
|
||
|
let links = text.$target
|
||
|
let dataRes = ``;
|
||
|
let no = 0;
|
||
|
if (links.length > 0) {
|
||
|
links.map((val, index) => {
|
||
|
if (no > 0) {
|
||
|
dataRes += `, `;
|
||
|
}
|
||
|
let link = gantt.getLink(val);
|
||
|
let type = getCodeLinkByType(link.type);
|
||
|
let source = link.source;
|
||
|
var wbs_code = gantt.getWBSCode(gantt.getTask(source));
|
||
|
dataRes += wbs_code + type;
|
||
|
no = no + 1;
|
||
|
});
|
||
|
}
|
||
|
return dataRes;
|
||
|
}, resize: true
|
||
|
},
|
||
|
{ name: "updated_by", label: "Last Updated By", align: "center", min_width: 100, resize: true }
|
||
3 years ago
|
];
|
||
|
|
||
|
// set default to show (true) , hide (false)
|
||
|
gantt.config.columns = createColumnsConfig({
|
||
2 years ago
|
action: true,
|
||
|
kode_sortname: true,
|
||
|
text: true,
|
||
|
// planned_start: true,
|
||
|
// planned_end: true,
|
||
|
start_date: true,
|
||
|
end_date: true,
|
||
|
duration: true,
|
||
|
rencana_biaya: true,
|
||
|
cost_actual: true,
|
||
|
assign_hr: true,
|
||
|
material: true,
|
||
|
tools: true,
|
||
|
bobot_planning: true,
|
||
|
progress: true,
|
||
|
progress_actual: true,
|
||
|
jumlah_pekerjaan: true,
|
||
|
jobs_done:true,
|
||
|
satuan: true,
|
||
|
predecessor: true,
|
||
|
updated_by: true
|
||
3 years ago
|
})
|
||
|
|
||
|
gantt.config.reorder_grid_columns = true;
|
||
|
gantt.config.resize_rows = true;
|
||
2 years ago
|
gantt.config.grid_resize = true; // pro edition
|
||
3 years ago
|
gantt.config.min_column_width = 50;
|
||
|
gantt.config.scale_height = 20;
|
||
|
// gantt.config.row_height = 30;
|
||
|
gantt.config.order_branch = "marker";
|
||
|
gantt.config.order_branch_free = true;
|
||
|
gantt.config.open_tree_initially = true;
|
||
|
|
||
|
// adding baseline
|
||
|
// gantt.config.bar_height = 16;
|
||
|
// gantt.config.row_height = 40;
|
||
|
|
||
|
gantt.config.row_height = 30;
|
||
|
gantt.config.task_height = 20;
|
||
|
|
||
|
// gantt.locale.labels.baseline_enable_button = 'Set';
|
||
|
// gantt.locale.labels.baseline_disable_button = 'Remove';
|
||
|
// gantt.config.lightbox.sections = [
|
||
|
// {name: "Activity", height: 70, map_to: "text", type: "textarea", focus: true},
|
||
|
// {name: "time", map_to: "auto", type: "duration"},
|
||
|
// {
|
||
|
// name: "baseline",
|
||
|
// map_to: {start_date: "planned_start", end_date: "planned_end"},
|
||
|
// button: true,
|
||
|
// type: "duration_optional"
|
||
|
// }
|
||
|
// ];
|
||
|
// gantt.locale.labels.section_baseline = "Planned";
|
||
|
// adding baseline display
|
||
|
gantt.addTaskLayer({
|
||
2 years ago
|
renderer: {
|
||
|
render: function draw_planned(task) {
|
||
|
if (task.planned_start && task.planned_end) {
|
||
|
var sizes = gantt.getTaskPosition(task, task.planned_start, task.planned_end);
|
||
|
var el = document.createElement('div');
|
||
|
el.className = 'baseline';
|
||
|
// el.style.left = sizes.left + 'px';
|
||
|
// el.style.width = sizes.width + 'px';
|
||
|
// el.style.top = sizes.top + gantt.config.bar_height + 13 + 'px';
|
||
|
el.style.left = sizes.left - 6 + 'px';
|
||
|
el.style.width = sizes.width + 10+ 'px';
|
||
|
el.style.height= sizes.height + 'px';
|
||
|
// el.style.top = sizes.top + 1 + 'px';
|
||
|
el.style.top = sizes.top + 2 + 'px';
|
||
|
return el;
|
||
|
}
|
||
|
return false;
|
||
|
},
|
||
|
// define getRectangle in order to hook layer with the smart rendering
|
||
|
getRectangle: function(task, view){
|
||
|
if (task.planned_start && task.planned_end) {
|
||
|
return gantt.getTaskPosition(task, task.planned_start, task.planned_end);
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
3 years ago
|
});
|
||
|
|
||
|
gantt.templates.task_class = function (start, end, task) {
|
||
2 years ago
|
if (task.planned_end) {
|
||
|
var classes = ['has-baseline'];
|
||
|
if (end.getTime() > task.planned_end.getTime()) {
|
||
|
classes.push('overdue');
|
||
|
}
|
||
|
return classes.join(' ');
|
||
|
}
|
||
3 years ago
|
};
|
||
|
|
||
|
gantt.templates.rightside_text = function (start, end, task) {
|
||
2 years ago
|
if (task.planned_end) {
|
||
|
if (end.getTime() > task.planned_end.getTime()) {
|
||
|
var overdue = Math.ceil(Math.abs((end.getTime() - task.planned_end.getTime()) / (24 * 60 * 60 * 1000)));
|
||
|
var text = "<b>Overdue: " + overdue + " days</b>";
|
||
|
return text;
|
||
|
}
|
||
|
}
|
||
3 years ago
|
};
|
||
|
|
||
|
gantt.attachEvent("onTaskLoading", function(task){
|
||
2 years ago
|
task.planned_start = gantt.date.parseDate(task.planned_start, "xml_date");
|
||
|
task.planned_end = gantt.date.parseDate(task.planned_end, "xml_date");
|
||
|
return true;
|
||
3 years ago
|
});
|
||
|
|
||
2 years ago
|
|
||
|
gantt.config.autoscroll = true;
|
||
|
gantt.config.scroll_size = 30;
|
||
3 years ago
|
gantt.config.layout = {
|
||
2 years ago
|
css: "gantt_container",
|
||
|
cols: [
|
||
|
{
|
||
|
width: 400,
|
||
|
min_width: 300,
|
||
|
rows: [
|
||
|
{ view: "grid", scrollX: "gridScroll", scrollable: true, scrollY: "scrollVer" },
|
||
|
{ view: "scrollbar", id: "gridScroll", group: "horizontal" }
|
||
|
]
|
||
|
},
|
||
|
{ resizer: true, width: 3 },
|
||
|
{
|
||
|
rows: [
|
||
|
{ view: "timeline", scrollX: "scrollHor", scrollY: "scrollVer", scrollable: true},
|
||
|
{ view: "scrollbar", id: "scrollHor", group: "horizontal" }
|
||
|
]
|
||
|
},
|
||
|
]
|
||
3 years ago
|
};
|
||
|
|
||
2 years ago
|
|
||
3 years ago
|
// custom folder, file, collapse icons on activity
|
||
|
gantt.templates.grid_folder = function (item) {
|
||
2 years ago
|
// return "<div class='gantt_tree_icon gantt_folder_" + (item.$open ? "open" : "closed") + "'></div>";
|
||
|
return "";
|
||
3 years ago
|
};
|
||
|
gantt.templates.grid_file = function (item) {
|
||
2 years ago
|
// return "<div class='gantt_tree_icon gantt_file'></div>";
|
||
|
return "";
|
||
3 years ago
|
};
|
||
|
|
||
|
// Set workdays
|
||
|
gantt.config.work_time = true;
|
||
|
gantt.config.duration_unit = "day";
|
||
|
|
||
|
gantt.templates.timeline_cell_class = function (task, date) {
|
||
2 years ago
|
if (!gantt.isWorkTime(date, 'day')) {
|
||
|
return ("holidays");
|
||
|
}
|
||
|
return "";
|
||
3 years ago
|
};
|
||
|
|
||
|
// Zoom Scales
|
||
|
var zoomConfig = {
|
||
2 years ago
|
levels: [
|
||
|
{
|
||
|
name:"day",
|
||
|
scale_height: 50,
|
||
|
min_column_width:50,
|
||
|
scales:[
|
||
|
{unit: "week", step: 1, format: function (date) {
|
||
|
var dateToStr = gantt.date.date_to_str("%d %M");
|
||
|
var endDate = gantt.date.add(date, -6, "day");
|
||
|
var weekNum = gantt.date.date_to_str("%W")(date);
|
||
|
var year = gantt.date.date_to_str("%Y")(date);
|
||
|
return "W#" + weekNum + ", " + dateToStr(date) + " - " + dateToStr(endDate) + " " + year;
|
||
|
}},
|
||
|
{unit: "day", step: 1, format: "%d %M"}
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
name:"week",
|
||
|
scale_height: 50,
|
||
|
min_column_width:50,
|
||
|
scales:[
|
||
|
// {unit: "week", step: 1, format: function (date) {
|
||
|
// var dateToStr = gantt.date.date_to_str("%d %M");
|
||
|
// var endDate = gantt.date.add(date, -6, "day");
|
||
|
// var weekNum = gantt.date.date_to_str("%W")(date);
|
||
|
// var year = gantt.date.date_to_str("%Y")(date);
|
||
|
// return "#" + weekNum + ", " + dateToStr(date) + " - " + dateToStr(endDate) + " " + year;
|
||
|
// }},
|
||
|
{unit: "week", step: 1, format: function (date) {
|
||
|
var weekNum = gantt.date.date_to_str("%W")(date);
|
||
|
return "W#" + weekNum;
|
||
|
}},
|
||
|
{unit: "month", format: "%F, %Y"},
|
||
|
// {unit: "day", step: 1, format: "%j %D"}
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
name:"month",
|
||
|
scale_height: 50,
|
||
|
min_column_width:120,
|
||
|
scales:[
|
||
|
{unit: "month", format: "%F, %Y"},
|
||
|
// {unit: "week", format: "Week #%W"},
|
||
|
// {unit: "day", step: 1, format: "%j %D"}
|
||
|
]
|
||
|
},
|
||
|
// {
|
||
|
// name:"quarter",
|
||
|
// height: 50,
|
||
|
// min_column_width:90,
|
||
|
// scales:[
|
||
|
// {unit: "month", step: 1, format: "%M"},
|
||
|
// {
|
||
|
// unit: "quarter", step: 1, format: function (date) {
|
||
|
// var dateToStr = gantt.date.date_to_str("%M");
|
||
|
// var endDate = gantt.date.add(gantt.date.add(date, 3, "month"), -1, "day");
|
||
|
// return dateToStr(date) + " - " + dateToStr(endDate);
|
||
|
// }
|
||
|
// }
|
||
|
// ]
|
||
|
// },
|
||
|
// {
|
||
|
// name:"year",
|
||
|
// scale_height: 50,
|
||
|
// min_column_width: 30,
|
||
|
// scales:[
|
||
|
// {unit: "year", step: 1, format: "%Y"}
|
||
|
// ]
|
||
|
// }
|
||
|
]
|
||
3 years ago
|
};
|
||
|
gantt.ext.zoom.init(zoomConfig);
|
||
2 years ago
|
gantt.ext.zoom.setLevel("month");
|
||
3 years ago
|
|
||
|
// trigger when zoomIn and zoomOut clicked
|
||
|
gantt.ext.zoom.attachEvent("onAfterZoom", function(level, config){
|
||
2 years ago
|
document.querySelector(".gantt_radio[value='" +config.name+ "']").checked = true;
|
||
3 years ago
|
})
|
||
|
|
||
|
function zoomIn(){
|
||
2 years ago
|
gantt.ext.zoom.zoomIn();
|
||
3 years ago
|
}
|
||
|
function zoomOut(){
|
||
2 years ago
|
gantt.ext.zoom.zoomOut()
|
||
3 years ago
|
}
|
||
|
|
||
|
var radios = document.getElementsByName("scale");
|
||
|
for (var i = 0; i < radios.length; i++) {
|
||
2 years ago
|
radios[i].onclick = function (event) {
|
||
|
updateProperty({zoom:event.target.value});
|
||
|
gantt.ext.zoom.setLevel(event.target.value);
|
||
|
};
|
||
3 years ago
|
}
|
||
|
// end Zoom Scale function
|
||
2 years ago
|
//
|
||
|
//
|
||
|
// GANTT PERFORMANCE CONFIG RECOMMENDATION
|
||
|
gantt.config.scales = [
|
||
|
{unit: "month", step: 1, format: "%F, %Y"},
|
||
|
{unit: "week", step: 1, format: function (date) {
|
||
|
return "Week #" + gantt.date.getWeek(date);
|
||
|
}},
|
||
|
{unit: "day", step: 1, format: "%D", css: function(date) {
|
||
|
if(!gantt.isWorkTime({ date: date, unit: "day"})){
|
||
|
return "weekend"
|
||
|
}
|
||
|
}}
|
||
|
];
|
||
|
gantt.config.show_task_cells = false;
|
||
|
gantt.config.static_background = true;
|
||
|
gantt.config.branch_loading = true;
|
||
|
gantt.config.smart_scales = true;
|
||
3 years ago
|
|
||
|
// gantt initialization
|
||
|
$(document).ready(function () {
|
||
2 years ago
|
initializationProject();
|
||
|
getSatuan();
|
||
|
gantt.init("gantt_here");
|
||
|
linkLagEditor();
|
||
|
setTimeout(initializationColumn, 4500);
|
||
|
setTimeout(initialProperty, 4500);
|
||
3 years ago
|
});
|