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.
 
 
 

299 lines
11 KiB

let geom = [];
let latest;
let earliest;
let ganttTask;
$("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();
$("#save-separator").hide();
} else {
$("#save-activity").show();
$("#save-separator").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);
ganttTask = 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) {
// 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();
$("#save-separator").hide();
} else {
$("#save-activity").show();
$("#save-separator").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);
ganttTask = 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
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");
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");
let configStart = moment(gantt.config.start_date);
let configEnd = moment(gantt.config.end_date);
if (startDate >= configEnd || startDate <= configStart || endDate >= configEnd || endDate <= configStart) {
// location.reload();
}
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();
$("#save-separator").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;
}
});