|
|
|
let geom = [];
|
|
|
|
let latest;
|
|
|
|
let earliest;
|
|
|
|
$("body").addClass("loading");
|
|
|
|
gantt.ajax.get({
|
|
|
|
url: `${base_url}activity/${ganttId}/${proyekId}/get`,
|
|
|
|
headers: {
|
|
|
|
"Content-Type": "application/json",
|
|
|
|
"Authorization": `Bearer ${token}`
|
|
|
|
}
|
|
|
|
}).then(function (xhr) {
|
|
|
|
$("body").removeClass("loading");
|
|
|
|
let batchEntity = localStorage.getItem('batchEntity');
|
|
|
|
if (!batchEntity || batchEntity == '') {
|
|
|
|
$("#save-activity").hide();
|
|
|
|
} else {
|
|
|
|
$("#save-activity").show();
|
|
|
|
}
|
|
|
|
let data = {};
|
|
|
|
let response = xhr.responseText;
|
|
|
|
let obj = JSON.parse(response);
|
|
|
|
data['data'] = obj.data.data;
|
|
|
|
data['links'] = obj.data.links;
|
|
|
|
// check if baseline has been set
|
|
|
|
if (data.data && data.data.length > 0) {
|
|
|
|
if (data.data[0].planned_start !== null && data.data[0].planned_end !== null) {
|
|
|
|
isBaselineSet = true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
isBaselineSet = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
geom = [];
|
|
|
|
data.data.forEach(element => {
|
|
|
|
geom.push({
|
|
|
|
"activity_id": element.id,
|
|
|
|
"geom": element.geom
|
|
|
|
})
|
|
|
|
});
|
|
|
|
gantt.silent(function () {
|
|
|
|
updateLinksLag(data);
|
|
|
|
gantt.parse(data);
|
|
|
|
getGanttOpen();
|
|
|
|
gantt.parse(data);
|
|
|
|
earliest = getEarliestTaskDate();
|
|
|
|
latest = getLatestTaskDate();
|
|
|
|
});
|
|
|
|
}).catch(function (error) {
|
|
|
|
$("body").removeClass("loading");
|
|
|
|
gantt.alert({
|
|
|
|
title: "Peringatan",
|
|
|
|
type: "alert-error",
|
|
|
|
text: "Get activity gagal"
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
function refresData(id) {
|
|
|
|
console.log("refres triggered!!");
|
|
|
|
|
|
|
|
// Store the current scroll position
|
|
|
|
var scrollState = {
|
|
|
|
x: gantt.getScrollState().x,
|
|
|
|
y: gantt.getScrollState().y
|
|
|
|
};
|
|
|
|
$("body").addClass("loading");
|
|
|
|
gantt.ajax.get({
|
|
|
|
url: `${base_url}activity/${ganttId}/${proyekId}/get`,
|
|
|
|
headers: {
|
|
|
|
"Content-Type": "application/json",
|
|
|
|
"Authorization": `Bearer ${token}`
|
|
|
|
}
|
|
|
|
}).then(function (xhr) {
|
|
|
|
$("body").removeClass("loading");
|
|
|
|
let batchEntity = localStorage.getItem('batchEntity');
|
|
|
|
if (!batchEntity || batchEntity == '') {
|
|
|
|
$("#save-activity").hide();
|
|
|
|
} else {
|
|
|
|
$("#save-activity").show();
|
|
|
|
}
|
|
|
|
gantt.clearAll();
|
|
|
|
let data = {};
|
|
|
|
let response = xhr.responseText;
|
|
|
|
let obj = JSON.parse(response);
|
|
|
|
data['data'] = obj.data.data;
|
|
|
|
data['links'] = obj.data.links;
|
|
|
|
geom = [];
|
|
|
|
data.data.forEach(element => {
|
|
|
|
geom.push({
|
|
|
|
"activity_id": element.id,
|
|
|
|
"geom": element.geom
|
|
|
|
})
|
|
|
|
});
|
|
|
|
gantt.silent(function () {
|
|
|
|
updateLinksLag(data);
|
|
|
|
gantt.parse(data);
|
|
|
|
getGanttOpen();
|
|
|
|
gantt.parse(data);
|
|
|
|
earliest = getEarliestTaskDate();
|
|
|
|
latest = getLatestTaskDate();
|
|
|
|
});
|
|
|
|
if (id) {
|
|
|
|
if (gantt.isTaskExists(id)) {
|
|
|
|
expandTask();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Restore the scroll position
|
|
|
|
gantt.scrollTo(scrollState.x, scrollState.y);
|
|
|
|
|
|
|
|
}).catch(function (error) {
|
|
|
|
$("body").removeClass("loading");
|
|
|
|
gantt.alert({
|
|
|
|
title: "Peringatan",
|
|
|
|
type: "alert-error",
|
|
|
|
text: "Update activity gagal"
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
// entity - "task"|"link"
|
|
|
|
// action - "create"|"update"|"delete"
|
|
|
|
// data - an object with task or link data
|
|
|
|
// id – the id of a processed object (task or link)
|
|
|
|
var dp = gantt.createDataProcessor(function (entity, action, data, id) {
|
|
|
|
switch (action) {
|
|
|
|
case "create":
|
|
|
|
if (entity == "task") {
|
|
|
|
data['proyek_id'] = proyekId;
|
|
|
|
//TODO : Possible end date bug
|
|
|
|
data['start_date'] = `${data.start_date}+07`;
|
|
|
|
let endDate = moment(data.end_date, "YYYY-MM-DD");
|
|
|
|
data['end_date'] = endDate.format("YYYY-MM-DD") + " 23:59:59+07";
|
|
|
|
let newDuration = gantt.calculateDuration({
|
|
|
|
start_date: new Date(data['start_date']),
|
|
|
|
end_date: new Date(data['end_date'])
|
|
|
|
})
|
|
|
|
data['duration'] = newDuration;
|
|
|
|
|
|
|
|
if (data && data.parent) {
|
|
|
|
data['parent_id'] = data.parent;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
data['version_gantt_id'] = ganttId;
|
|
|
|
$("body").addClass("loading");
|
|
|
|
return gantt.ajax.post({
|
|
|
|
headers: {
|
|
|
|
"Content-Type": "application/json",
|
|
|
|
"Authorization": `Bearer ${token}`
|
|
|
|
},
|
|
|
|
url: base_url + entity,
|
|
|
|
data: JSON.stringify(data)
|
|
|
|
}).then(function (response) {
|
|
|
|
$("body").removeClass("loading");
|
|
|
|
let res = response.responseText
|
|
|
|
res = JSON.parse(res)
|
|
|
|
if (entity == "link") {
|
|
|
|
gantt.changeLinkId(id, res.tid);
|
|
|
|
} else if (entity == "task") {
|
|
|
|
gantt.changeTaskId(id, res.tid);
|
|
|
|
}
|
|
|
|
}).catch(function (error) {
|
|
|
|
$("body").removeClass("loading");
|
|
|
|
gantt.alert({
|
|
|
|
title: "Peringatan",
|
|
|
|
type: "alert-error",
|
|
|
|
text: "Add activity gagal"
|
|
|
|
});
|
|
|
|
});
|
|
|
|
break;
|
|
|
|
case "update":
|
|
|
|
if (entity == "task") {
|
|
|
|
// let startDate = moment(data.start_date, "YYYY-MM-DD").subtract(1, "days");
|
|
|
|
let startDate = moment(data.start_date, "YYYY-MM-DD");
|
|
|
|
// data['start_date'] = startDate.format("YYYY-MM-DD")+" 00:00:00+07";
|
|
|
|
let endDate = moment(data.end_date, "YYYY-MM-DD");
|
|
|
|
|
|
|
|
if (startDate > endDate) {
|
|
|
|
gantt.alert({
|
|
|
|
title: "Peringatan",
|
|
|
|
type: "alert-error",
|
|
|
|
text: "Tanggal selesai tidak bisa sebelum tanggal mulai!"
|
|
|
|
});
|
|
|
|
data['end_date'] = data['start_date'];
|
|
|
|
refresData(id);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (data && data.parent) {
|
|
|
|
data['parent_id'] = data.parent;
|
|
|
|
}
|
|
|
|
|
|
|
|
Object.keys(data).forEach(function (key) {
|
|
|
|
if (data[key] == "") {
|
|
|
|
data[key] = null;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
data['geom'] = geom.find(obj => obj.activity_id == id)?.geom;
|
|
|
|
let existingEntity = localStorage.getItem('batchEntity');
|
|
|
|
if (existingEntity) {
|
|
|
|
existingEntity = JSON.parse(existingEntity);
|
|
|
|
// Now batchEntity is an object containing your data, and you can access its properties like batchEntity.entity and batchEntity.data
|
|
|
|
}
|
|
|
|
let batchEntity = {
|
|
|
|
entity: entity,
|
|
|
|
data: data
|
|
|
|
};
|
|
|
|
let toBeSet = []
|
|
|
|
if (existingEntity) {
|
|
|
|
toBeSet = [...existingEntity, batchEntity]
|
|
|
|
} else {
|
|
|
|
toBeSet = [batchEntity]
|
|
|
|
}
|
|
|
|
localStorage.setItem('batchEntity', JSON.stringify(toBeSet));
|
|
|
|
$("#save-activity").show();
|
|
|
|
sendStorage();
|
|
|
|
// $("body").addClass("loading");
|
|
|
|
// return gantt.ajax.put({
|
|
|
|
// headers: {
|
|
|
|
// "Content-Type": "application/json",
|
|
|
|
// "Authorization": `Bearer ${token}`
|
|
|
|
// },
|
|
|
|
// url: base_url + entity + "/" + id,
|
|
|
|
// data: JSON.stringify(data)
|
|
|
|
// }).then(function (response) {
|
|
|
|
// $("body").removeClass("loading");
|
|
|
|
// if (entity == "task") {
|
|
|
|
// let parent = data.parent;
|
|
|
|
// let responseText = JSON.parse(response.responseText)
|
|
|
|
// let resData = responseText
|
|
|
|
// let updateBobot = resData.update_bobot || false
|
|
|
|
// if (updateBobot) {
|
|
|
|
// if (parent && parent > 0) {
|
|
|
|
// updateActivity(parent);
|
|
|
|
// }
|
|
|
|
// } else if (parent && parent > 0) {
|
|
|
|
// updateActivity(parent);
|
|
|
|
// }
|
|
|
|
// if (!parent) {
|
|
|
|
// refresData();
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }).catch(function (error) {
|
|
|
|
// $("body").removeClass("loading");
|
|
|
|
// gantt.alert({
|
|
|
|
// title: "Peringatan",
|
|
|
|
// type: "alert-error",
|
|
|
|
// text: "Update activity gagal"
|
|
|
|
// });
|
|
|
|
// });
|
|
|
|
|
|
|
|
break;
|
|
|
|
case "delete":
|
|
|
|
$("body").addClass("loading");
|
|
|
|
return gantt.ajax.del({
|
|
|
|
headers: {
|
|
|
|
"Authorization": `Bearer ${token}`
|
|
|
|
},
|
|
|
|
url: base_url + entity + "/" + id
|
|
|
|
}).then(function (response) {
|
|
|
|
$("body").removeClass("loading");
|
|
|
|
if (entity == "task") {
|
|
|
|
let parent = data.parent;
|
|
|
|
if (parent && parent > 0) {
|
|
|
|
let children = gantt.getChildren(parent);
|
|
|
|
updateActivity(parent);
|
|
|
|
if (children && children.length > 0) {
|
|
|
|
|
|
|
|
} else {
|
|
|
|
if (gantt.isTaskExists(parent)) {
|
|
|
|
gantt.getTask(parent).type = "task";
|
|
|
|
gantt.updateTask(parent);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}).catch(function (error) {
|
|
|
|
$("body").removeClass("loading");
|
|
|
|
gantt.alert({
|
|
|
|
title: "Peringatan",
|
|
|
|
type: "alert-error",
|
|
|
|
text: "Update activity gagal"
|
|
|
|
});
|
|
|
|
});
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
});
|