From 7661232569327ab57607c26aee4d9c7b78c7e9c5 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Wed, 2 Aug 2023 15:20:47 +0700 Subject: [PATCH 01/58] Fix horizontal scroll --- edit-mode/function/function.js | 29 ++++++++++++++++++++++++++ edit-mode/function/ganttEvent.js | 4 ++-- edit-mode/function/restActivityLink.js | 6 ++++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index 2e7aa28..7ce02f1 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -636,4 +636,33 @@ function expandTask() { function resetActivity() { localStorage.setItem('batchEntity', ''); gantt.alert("Actiivity Saved"); +} +// Function to get the earliest planned start date among all tasks +function getEarliestTaskDate() { + var earliestDate = null; + gantt.eachTask(function (task) { + var taskStartDate = task.planned_start || task.start_date; + if (!earliestDate || task.planned_start < earliestDate) { + earliestDate = taskStartDate; + if (task.start_date < earliestDate) { + earliestDate = task.start_date; + } + } + }); + return earliestDate; +} + +// Function to get the latest planned end date among all tasks +function getLatestTaskDate() { + var latestDate = null; + gantt.eachTask(function (task) { + var taskEndDate = task.planned_end || task.end_date; + if (!latestDate || task.planned_end > latestDate) { + latestDate = taskEndDate; + if (task.end_date > latestDate) { + latestDate = task.end_date; + } + } + }); + return latestDate; } \ No newline at end of file diff --git a/edit-mode/function/ganttEvent.js b/edit-mode/function/ganttEvent.js index b58d96a..3aa4710 100644 --- a/edit-mode/function/ganttEvent.js +++ b/edit-mode/function/ganttEvent.js @@ -168,11 +168,11 @@ gantt.attachEvent("onGanttScroll", function (left, top){ var max_allowed_date = gantt.date.add(gantt.config.end_date, -1, "day"); var repaint = false; - if (+left_date <= +min_allowed_date){ + 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 (+right_date >= +max_allowed_date){ + 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; } diff --git a/edit-mode/function/restActivityLink.js b/edit-mode/function/restActivityLink.js index bf23dc5..84d2f05 100644 --- a/edit-mode/function/restActivityLink.js +++ b/edit-mode/function/restActivityLink.js @@ -1,4 +1,6 @@ let geom = []; +let latest; +let earliest; $("body").addClass("loading"); gantt.ajax.get({ url: `${base_url}activity/${ganttId}/${proyekId}/get`, @@ -33,6 +35,8 @@ gantt.ajax.get({ gantt.parse(data); getGanttOpen(); gantt.parse(data); + earliest = getEarliestTaskDate(); + latest = getLatestTaskDate(); }); }).catch(function (error) { $("body").removeClass("loading"); @@ -77,6 +81,8 @@ function refresData(id) { gantt.parse(data); getGanttOpen(); gantt.parse(data); + earliest = getEarliestTaskDate(); + latest = getLatestTaskDate(); }); if (id) { if (gantt.isTaskExists(id)) { From aaaa231a59440b758f402c453002e9bccd6931f2 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Thu, 3 Aug 2023 09:01:28 +0700 Subject: [PATCH 02/58] Fix date label range --- view-mode/function/overlaySCurve.js | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/view-mode/function/overlaySCurve.js b/view-mode/function/overlaySCurve.js index 364d90e..fb56d20 100644 --- a/view-mode/function/overlaySCurve.js +++ b/view-mode/function/overlaySCurve.js @@ -145,19 +145,22 @@ var lineOverlay = overlayControl.addOverlay(function(container) { var values = getProgressLine(); var scaleLabels = []; - if(parts[2] && parts[2] == '1'){ +// if(parts[2] && parts[2] == '1'){ +// values.dates.forEach(function(date){ +// var dateScale = new Date(date); +// scaleLabels.push(dateToStr(dateScale)); +// }) +// } else { +// var chartScale = getChartScaleRange(); + +// chartScale.forEach(function(date){ +// scaleLabels.push(dateToStr(date)); +// }); +// } values.dates.forEach(function(date){ var dateScale = new Date(date); scaleLabels.push(dateToStr(dateScale)); }) - } else { - var chartScale = getChartScaleRange(); - - chartScale.forEach(function(date){ - scaleLabels.push(dateToStr(date)); - }); - } - var canvas = document.createElement("canvas"); container.appendChild(canvas); canvas.style.height = container.offsetHeight + "px"; From e2a88321215d9c2fa481a84232db8c29ebe82f3b Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Thu, 3 Aug 2023 10:36:28 +0700 Subject: [PATCH 03/58] Fix report image --- edit-mode/function/ganttConfig.js | 7 ++++++- edit-mode/function/reportActivity.js | 13 ++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/edit-mode/function/ganttConfig.js b/edit-mode/function/ganttConfig.js index a22ca2d..4370aa7 100644 --- a/edit-mode/function/ganttConfig.js +++ b/edit-mode/function/ganttConfig.js @@ -22,7 +22,12 @@ const axiosInstance = axios.create({ "Content-type": "application/json" } }); - +const axiosInstanceMultipart = axios.create({ + headers: { + "Content-Type": "multipart/form-data", + "Authorization": `Bearer ${token}`, + } +}); axiosInstance.interceptors.request.use(async (config) => { try { $("body").addClass("loading"); diff --git a/edit-mode/function/reportActivity.js b/edit-mode/function/reportActivity.js index 7c6d232..97baba6 100644 --- a/edit-mode/function/reportActivity.js +++ b/edit-mode/function/reportActivity.js @@ -426,8 +426,19 @@ $(document).ready(function () { .catch((error) => error.response); // console.log("cek result", result); + let reportId = result.data.data.report_id; + let imageFormData = new FormData(); + let image = formData.get("files"); + imageFormData.append("ref_id",reportId); + imageFormData.append("category", "report_activity"); + imageFormData.append("files", image, image.name); + + const resultImage = await axiosInstanceMultipart + .post(`${base_url}image/upload`, imageFormData) + .then(res => res) + .catch((error) => error.response); - if (result && result.status == 200) { + if (result && result.status == 200 && resultImage && resultImage.status == 200) { gantt.alert("Add report activity material Success!"); resetFormAddRaMaterial(); tableRaMaterialActual.draw(); From 302e428b2b1724173c5b6fa2ee03b4aea831c7d5 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Thu, 3 Aug 2023 10:56:17 +0700 Subject: [PATCH 04/58] Improve error handling --- edit-mode/function/reportActivity.js | 50 +++++++++++++--------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/edit-mode/function/reportActivity.js b/edit-mode/function/reportActivity.js index 97baba6..1d0ae69 100644 --- a/edit-mode/function/reportActivity.js +++ b/edit-mode/function/reportActivity.js @@ -418,34 +418,32 @@ $(document).ready(function () { } async function submitRaMaterial(formData, id) { - let qty_actual = $("#volume_pekerjaan_material").val(); - formData.set('qty', qty_actual); - const result = await axiosInstance - .post(`${base_url}report-activity-material/add`, formData) - .then(res => res) - .catch((error) => error.response); - - // console.log("cek result", result); - let reportId = result.data.data.report_id; - let imageFormData = new FormData(); - let image = formData.get("files"); - imageFormData.append("ref_id",reportId); - imageFormData.append("category", "report_activity"); - imageFormData.append("files", image, image.name); - - const resultImage = await axiosInstanceMultipart - .post(`${base_url}image/upload`, imageFormData) - .then(res => res) - .catch((error) => error.response); - - if (result && result.status == 200 && resultImage && resultImage.status == 200) { - gantt.alert("Add report activity material Success!"); - resetFormAddRaMaterial(); - tableRaMaterialActual.draw(); - } else { + try { + const qty_actual = $("#volume_pekerjaan_material").val(); + formData.set('qty', qty_actual); + const result = await axiosInstance + .post(`${base_url}report-activity-material/add`, formData); + + const reportId = result.data.data.report_id; + const image = formData.get("files"); + const imageFormData = new FormData(); + imageFormData.append("ref_id", reportId); + imageFormData.append("category", "report_activity"); + imageFormData.append("files", image, image.name); + + const resultImage = await axiosInstanceMultipart.post(`${base_url}image/upload`, imageFormData); + + if (result.status === 200 && resultImage.status === 200) { + gantt.alert("Add report activity material Success!"); + resetFormAddRaMaterial(); + tableRaMaterialActual.draw(); + } else { + throw new Error("Add report activity material failed."); + } + } catch (error) { resetFormAddRaMaterial(); $("body").removeClass("loading"); - gantt.alert("Add report activity material failed, try again later!"); + gantt.alert("Add report activity material failed."); } } From c97629ec56e21dac0289e438db58495723dfadb0 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Fri, 4 Aug 2023 13:29:07 +0700 Subject: [PATCH 05/58] Update gantt update local storage --- edit-mode/function/function.js | 42 +++++++++-- edit-mode/function/ganttSettings.js | 2 +- edit-mode/function/restActivityLink.js | 100 ++++++++++++------------- edit-mode/index.html | 4 +- 4 files changed, 90 insertions(+), 58 deletions(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index 7ce02f1..9aee472 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -633,10 +633,6 @@ function expandTask() { gantt.render(); } -function resetActivity() { - localStorage.setItem('batchEntity', ''); - gantt.alert("Actiivity Saved"); -} // Function to get the earliest planned start date among all tasks function getEarliestTaskDate() { var earliestDate = null; @@ -665,4 +661,40 @@ function getLatestTaskDate() { } }); return latestDate; -} \ No newline at end of file +} + +function batchUpdate(){ + let data = localStorage.getItem('batchEntity'); + $("body").addClass("loading"); + return gantt.ajax.post({ + headers: { + "Content-Type": "application/json", + "Authorization": `Bearer ${token}` + }, + url: base_url + "activity/batch-update/" + ganttId, + data: data + }).then(function (response) { + $("body").removeClass("loading"); + localStorage.setItem('batchEntity', ''); + }).catch(function (error) { + $("body").removeClass("loading") + localStorage.setItem('batchEntity', ''); + + gantt.alert({ + title: "Peringatan", + type: "alert-error", + text: "Update activity gagal" + }); + }); +} + +$(window).on('beforeunload', function(event) { + let batchEntity = localStorage.getItem('batchEntity'); + if (batchEntity && batchEntity != '') { + event.preventDefault() + return event.returnValue = 'You have unsaved changes. Are you sure you want to leave this page?'; + } +}); + +const batchEntityData = localStorage.getItem('batchEntity'); +window.parent.postMessage({ batchEntity: batchEntityData }, '*'); \ No newline at end of file diff --git a/edit-mode/function/ganttSettings.js b/edit-mode/function/ganttSettings.js index 061bbc4..77db70c 100644 --- a/edit-mode/function/ganttSettings.js +++ b/edit-mode/function/ganttSettings.js @@ -136,7 +136,7 @@ $(document).ready(function () { }); $("#save-activity").on('click', function (event) { - resetActivity(); + batchUpdate(); }); $("#gantt-synchronize").on('click', function (event) { diff --git a/edit-mode/function/restActivityLink.js b/edit-mode/function/restActivityLink.js index 84d2f05..5fdaff1 100644 --- a/edit-mode/function/restActivityLink.js +++ b/edit-mode/function/restActivityLink.js @@ -182,56 +182,56 @@ var dp = gantt.createDataProcessor(function (entity, action, data, id) { }); } 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)); - $("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" - }); - }); + 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)); + // $("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": diff --git a/edit-mode/index.html b/edit-mode/index.html index 5a188e1..dd17be9 100644 --- a/edit-mode/index.html +++ b/edit-mode/index.html @@ -87,9 +87,9 @@ | - + | | From 1cdfcfa2707fa6621e2f0b6015d71fd7db8ff95a Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Mon, 7 Aug 2023 11:09:26 +0700 Subject: [PATCH 06/58] Batch update quick fix --- edit-mode/function/function.js | 1 - 1 file changed, 1 deletion(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index 9aee472..e60d975 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -678,7 +678,6 @@ function batchUpdate(){ localStorage.setItem('batchEntity', ''); }).catch(function (error) { $("body").removeClass("loading") - localStorage.setItem('batchEntity', ''); gantt.alert({ title: "Peringatan", From e0a6a9d5402bc8d788ce4d06a15b2d5fc4b2c744 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Mon, 7 Aug 2023 13:46:41 +0700 Subject: [PATCH 07/58] Refresh after batch update --- edit-mode/function/function.js | 1 + 1 file changed, 1 insertion(+) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index e60d975..2126873 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -676,6 +676,7 @@ function batchUpdate(){ }).then(function (response) { $("body").removeClass("loading"); localStorage.setItem('batchEntity', ''); + refresData(); }).catch(function (error) { $("body").removeClass("loading") From 5cd832f542bb40d22304cba13e64711f4412fe6f Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Mon, 7 Aug 2023 16:04:05 +0700 Subject: [PATCH 08/58] Fix default column --- edit-mode/function/function.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index 2126873..58d8219 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -339,7 +339,7 @@ function initializationColumn() { if (data.status == "not yet have") { addShowHideColumn(); } else if (data.status == "not have access") { - + gantt.config.columns = createColumnsConfig(columnShows); } else { setUpForShowHideColumn(data); } @@ -513,7 +513,7 @@ function submitShowHideColumn(allColumn) { version_gantt_id: ganttId, columns: allColumn } - + gantt.config.columns = createColumnsConfig(allColumn); $.ajax({ data: JSON.stringify(payload), url: `${base_url}gantt-show-hide/add`, From 3e7f34a72eb97f54a080e466280f38e605073538 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Tue, 8 Aug 2023 09:29:32 +0700 Subject: [PATCH 09/58] Handling error --- edit-mode/function/reportActivity.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/edit-mode/function/reportActivity.js b/edit-mode/function/reportActivity.js index 1d0ae69..d4c182e 100644 --- a/edit-mode/function/reportActivity.js +++ b/edit-mode/function/reportActivity.js @@ -425,21 +425,27 @@ $(document).ready(function () { .post(`${base_url}report-activity-material/add`, formData); const reportId = result.data.data.report_id; + try { const image = formData.get("files"); const imageFormData = new FormData(); imageFormData.append("ref_id", reportId); imageFormData.append("category", "report_activity"); imageFormData.append("files", image, image.name); + if (image.name && image.size) { const resultImage = await axiosInstanceMultipart.post(`${base_url}image/upload`, imageFormData); + } - if (result.status === 200 && resultImage.status === 200) { + if (result.status === 200) { gantt.alert("Add report activity material Success!"); resetFormAddRaMaterial(); tableRaMaterialActual.draw(); } else { throw new Error("Add report activity material failed."); } + } catch (error) { + throw new Error("Image upload failed."); + } } catch (error) { resetFormAddRaMaterial(); $("body").removeClass("loading"); @@ -512,7 +518,7 @@ $(document).ready(function () { // kalo gambarnya banyak belum di handle... }, error: function (data) { - gantt.alert({ type: "error", text: "Failed to get report image" }); + gantt.alert({ type: "error", text: "Image not found !" }); } }); }); From 49b517b74d0dc22e101a0b2497dbf515ba5b2023 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Tue, 8 Aug 2023 09:30:40 +0700 Subject: [PATCH 10/58] Add formatting --- edit-mode/function/reportActivity.js | 32 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/edit-mode/function/reportActivity.js b/edit-mode/function/reportActivity.js index d4c182e..9a98afb 100644 --- a/edit-mode/function/reportActivity.js +++ b/edit-mode/function/reportActivity.js @@ -426,23 +426,23 @@ $(document).ready(function () { const reportId = result.data.data.report_id; try { - const image = formData.get("files"); - const imageFormData = new FormData(); - imageFormData.append("ref_id", reportId); - imageFormData.append("category", "report_activity"); - imageFormData.append("files", image, image.name); - - if (image.name && image.size) { - const resultImage = await axiosInstanceMultipart.post(`${base_url}image/upload`, imageFormData); - } + const image = formData.get("files"); + const imageFormData = new FormData(); + imageFormData.append("ref_id", reportId); + imageFormData.append("category", "report_activity"); + imageFormData.append("files", image, image.name); + + if (image.name && image.size) { + const resultImage = await axiosInstanceMultipart.post(`${base_url}image/upload`, imageFormData); + } - if (result.status === 200) { - gantt.alert("Add report activity material Success!"); - resetFormAddRaMaterial(); - tableRaMaterialActual.draw(); - } else { - throw new Error("Add report activity material failed."); - } + if (result.status === 200) { + gantt.alert("Add report activity material Success!"); + resetFormAddRaMaterial(); + tableRaMaterialActual.draw(); + } else { + throw new Error("Add report activity material failed."); + } } catch (error) { throw new Error("Image upload failed."); } From 91095287bded8318b942054e82a0fe4643bb4973 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Tue, 8 Aug 2023 09:48:54 +0700 Subject: [PATCH 11/58] View mode scroll fix --- view-mode/function/function.js | 30 ++++++++++++++++++++++++++ view-mode/function/ganttEvent.js | 30 ++++++++++++++++++++++++++ view-mode/function/restActivityLink.js | 6 ++++++ 3 files changed, 66 insertions(+) diff --git a/view-mode/function/function.js b/view-mode/function/function.js index 35f4d40..07ac9dc 100644 --- a/view-mode/function/function.js +++ b/view-mode/function/function.js @@ -522,3 +522,33 @@ function replaceAll(str, find, replace) { } return str } + +// Function to get the earliest planned start date among all tasks +function getEarliestTaskDate() { + var earliestDate = null; + gantt.eachTask(function (task) { + var taskStartDate = task.planned_start || task.start_date; + if (!earliestDate || task.planned_start < earliestDate) { + earliestDate = taskStartDate; + if (task.start_date < earliestDate) { + earliestDate = task.start_date; + } + } + }); + return earliestDate; +} + +// Function to get the latest planned end date among all tasks +function getLatestTaskDate() { + var latestDate = null; + gantt.eachTask(function (task) { + var taskEndDate = task.planned_end || task.end_date; + if (!latestDate || task.planned_end > latestDate) { + latestDate = taskEndDate; + if (task.end_date > latestDate) { + latestDate = task.end_date; + } + } + }); + return latestDate; +} \ No newline at end of file diff --git a/view-mode/function/ganttEvent.js b/view-mode/function/ganttEvent.js index 92c72fd..64aabb7 100644 --- a/view-mode/function/ganttEvent.js +++ b/view-mode/function/ganttEvent.js @@ -97,4 +97,34 @@ gantt.attachEvent("onGanttRender", function(){ }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) + } +} }); \ No newline at end of file diff --git a/view-mode/function/restActivityLink.js b/view-mode/function/restActivityLink.js index bca311a..d16c69d 100644 --- a/view-mode/function/restActivityLink.js +++ b/view-mode/function/restActivityLink.js @@ -1,4 +1,6 @@ var parts = []; +let latest; +let earliest; window.parent.postMessage({ action: 'getUrl' }, '*'); window.addEventListener('message', function(event) { if (event.data && event.data.action === 'sendUrl') { @@ -40,6 +42,8 @@ gantt.ajax.get({ if(!parts[2]){ gantt.silent(function () { gantt.parse(data); + earliest = getEarliestTaskDate(); + latest = getLatestTaskDate(); }); } }); @@ -62,6 +66,8 @@ function refresData(id){ if(!parts[2]){ gantt.silent(function () { gantt.parse(data); + earliest = getEarliestTaskDate(); + latest = getLatestTaskDate(); }); } if(id){ From 06764c28a6df1368e68cf1e007897f61c4b458b0 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Tue, 8 Aug 2023 12:04:17 +0700 Subject: [PATCH 12/58] Update padding --- view-mode/function/overlaySCurve.js | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/view-mode/function/overlaySCurve.js b/view-mode/function/overlaySCurve.js index fb56d20..087bdb5 100644 --- a/view-mode/function/overlaySCurve.js +++ b/view-mode/function/overlaySCurve.js @@ -121,9 +121,26 @@ function getProgressLine(){ function getScalePaddings(){ var scale = gantt.getScale(); var dataRange = gantt.getSubtaskDates(); + let minDate = new Date(); + let maxDate = new Date(); + + gantt.eachTask(function(task){ + let plannedEarlier = task.planned_start < task.start_date; + let plannedLater = task.planned_end > task.end_date; + + if (plannedEarlier) { + minDate = new Date(Math.min(minDate.getTime(), task.planned_start.getTime())); + } else { + minDate = new Date(Math.min(minDate.getTime(), task.start_date.getTime())); + } + + if (plannedLater) { + maxDate = new Date(Math.max(maxDate.getTime(), task.planned_end.getTime())); + } else { + maxDate = new Date(Math.max(maxDate.getTime(), task.end_date.getTime())); + } + }) - var chartScale = getChartScaleRange(); - var newWidth = scale.col_width; var padding = { left:0, right:0 @@ -132,8 +149,8 @@ function getScalePaddings(){ if(dataRange.start_date){ var yScaleLabelsWidth = 48; // fine tune values in order to align chart with the scale range - padding.left = gantt.posFromDate(dataRange.start_date) - yScaleLabelsWidth; - padding.right = scale.full_width - gantt.posFromDate(dataRange.end_date) - yScaleLabelsWidth; + padding.left = gantt.posFromDate(minDate) - yScaleLabelsWidth; + padding.right = scale.full_width - gantt.posFromDate(maxDate) - yScaleLabelsWidth; padding.top = gantt.config.row_height - 12; padding.bottom = gantt.config.row_height - 12; } From 075476423e4604920264ec4043f8b3ccd938fa31 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Tue, 8 Aug 2023 13:22:55 +0700 Subject: [PATCH 13/58] Including overhead when update --- edit-mode/function/function.js | 1 + 1 file changed, 1 insertion(+) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index 58d8219..4e66384 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -212,6 +212,7 @@ function updateActivity(id) { gantt.getTask(id).assign_hr = data.assign_hr; gantt.getTask(id).assign_material = data.assign_material; gantt.getTask(id).assign_tools = data.assign_tools; + gantt.getTask(id).assign_expense = data.assign_expense; gantt.getTask(id).bobot_planning = data.bobot_planning; gantt.getTask(id).rencana_biaya = data.rencana_biaya; gantt.getTask(id).biaya_actual = data.biaya_actual; From 727cbfd8a9fdcd59a5d96664d4ba148d9dedf23d Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Wed, 9 Aug 2023 15:12:03 +0700 Subject: [PATCH 14/58] Send storage to parent --- edit-mode/function/function.js | 8 ++++++-- edit-mode/function/restActivityLink.js | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index 4e66384..19c3e0f 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -677,6 +677,7 @@ function batchUpdate(){ }).then(function (response) { $("body").removeClass("loading"); localStorage.setItem('batchEntity', ''); + sendStorage(); refresData(); }).catch(function (error) { $("body").removeClass("loading") @@ -691,11 +692,14 @@ function batchUpdate(){ $(window).on('beforeunload', function(event) { let batchEntity = localStorage.getItem('batchEntity'); + sendStorage(); if (batchEntity && batchEntity != '') { event.preventDefault() return event.returnValue = 'You have unsaved changes. Are you sure you want to leave this page?'; } }); -const batchEntityData = localStorage.getItem('batchEntity'); -window.parent.postMessage({ batchEntity: batchEntityData }, '*'); \ No newline at end of file +function sendStorage(){ + const batchEntityData = localStorage.getItem('batchEntity'); + window.parent.postMessage({ batchEntity: batchEntityData }, '*'); +} \ No newline at end of file diff --git a/edit-mode/function/restActivityLink.js b/edit-mode/function/restActivityLink.js index 5fdaff1..6e6600c 100644 --- a/edit-mode/function/restActivityLink.js +++ b/edit-mode/function/restActivityLink.js @@ -198,6 +198,7 @@ var dp = gantt.createDataProcessor(function (entity, action, data, id) { toBeSet = [batchEntity] } localStorage.setItem('batchEntity', JSON.stringify(toBeSet)); + sendStorage(); // $("body").addClass("loading"); // return gantt.ajax.put({ // headers: { From 6e6606ec598dfa31c13d13480aeff303c2ed59d3 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Thu, 10 Aug 2023 09:41:01 +0700 Subject: [PATCH 15/58] Fix cumulative request --- view-mode/function/overlaySCurve.js | 98 ++++++++++++++--------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/view-mode/function/overlaySCurve.js b/view-mode/function/overlaySCurve.js index 087bdb5..2c928da 100644 --- a/view-mode/function/overlaySCurve.js +++ b/view-mode/function/overlaySCurve.js @@ -13,59 +13,59 @@ function callback(response) { return_first = response; } -function getSCurveData(){ - - // Send a message to the parent window requesting the URL - window.parent.postMessage({ action: 'getUrl' }, '*'); - - // Listen for messages from the parent window - window.addEventListener('message', function(event) { - if (event.data && event.data.action === 'sendUrl') { - const parentUrl = event.data.url; +function messageListener(event) { + if (event.data && event.data.action === 'sendUrl') { + const parentUrl = event.data.url; // Remove the base URL and hash const path = parentUrl.replace("https://adw.ospro.id/#/dashboard-project/", ""); - // Split the remaining path by "/" - parts = path.split("/"); - if (parts[2] && parts[2] == "1") { - $.ajax({ - headers: { - "Content-Type": "application/json", - "Authorization": `Bearer ${token}` - }, - url: `${base_url}project/calculate-s-curve`, - type: "POST", - data:JSON.stringify(sCurvePayload), - success: function (data) { - callback(data) - } - }); - $.ajax({ - headers: { - "Content-Type": "application/json", - "Authorization": `Bearer ${token}` - }, - url: `${base_url}project/s-curve-command`, - type: "POST", - data:JSON.stringify(sCurvePayload), - }); - } else { - $.ajax({ - headers: { - "Content-Type": "application/json", - "Authorization": `Bearer ${token}` - }, - url: `${base_url}project/get-s-curve`, - type: "POST", - data:JSON.stringify(sCurvePayload), - success: function (data) { - callback(data) - } - }); - } - } - }); + // Split the remaining path by "/" + parts = path.split("/"); + if (parts[2] && parts[2] == "1") { + $.ajax({ + headers: { + "Content-Type": "application/json", + "Authorization": `Bearer ${token}` + }, + url: `${base_url}project/calculate-s-curve`, + type: "POST", + data: JSON.stringify(sCurvePayload), + success: function (data) { + callback(data) + window.removeEventListener('message', messageListener); + } + }); + $.ajax({ + headers: { + "Content-Type": "application/json", + "Authorization": `Bearer ${token}` + }, + url: `${base_url}project/s-curve-command`, + type: "POST", + data: JSON.stringify(sCurvePayload), + }); + } else { + $.ajax({ + headers: { + "Content-Type": "application/json", + "Authorization": `Bearer ${token}` + }, + url: `${base_url}project/get-s-curve`, + type: "POST", + data: JSON.stringify(sCurvePayload), + success: function (data) { + callback(data) + window.removeEventListener('message', messageListener); + } + }); + } + } +} + +function getSCurveData() { + window.parent.postMessage({ action: 'getUrl' }, '*'); + window.addEventListener('message', messageListener); }; function toggleOverlay() { From 5c218bb399f5ee218f8411a0e98c9f5f9ab62555 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Thu, 10 Aug 2023 10:54:00 +0700 Subject: [PATCH 16/58] Fix s curve date range --- view-mode/function/overlaySCurve.js | 48 +++++++++++++++-------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/view-mode/function/overlaySCurve.js b/view-mode/function/overlaySCurve.js index 2c928da..6221a8d 100644 --- a/view-mode/function/overlaySCurve.js +++ b/view-mode/function/overlaySCurve.js @@ -17,7 +17,7 @@ function messageListener(event) { if (event.data && event.data.action === 'sendUrl') { const parentUrl = event.data.url; - // Remove the base URL and hash + // Remove the base URL and hash const path = parentUrl.replace("https://adw.ospro.id/#/dashboard-project/", ""); // Split the remaining path by "/" @@ -118,28 +118,30 @@ function getProgressLine(){ return {planned: cumulativePlannedDurations, real: cumulativeRealDurations, dates: dates}; } -function getScalePaddings(){ +function getScalePaddings(values){ var scale = gantt.getScale(); var dataRange = gantt.getSubtaskDates(); - let minDate = new Date(); - let maxDate = new Date(); + // let minDate = new Date(); + // let maxDate = new Date(); + let minValueDate = new Date(values.dates[0]); + let maxValueDate = new Date(values.dates[values.dates.length -1]); - gantt.eachTask(function(task){ - let plannedEarlier = task.planned_start < task.start_date; - let plannedLater = task.planned_end > task.end_date; + // gantt.eachTask(function(task){ + // let plannedEarlier = task.planned_start < task.start_date; + // let plannedLater = task.planned_end > task.end_date; - if (plannedEarlier) { - minDate = new Date(Math.min(minDate.getTime(), task.planned_start.getTime())); - } else { - minDate = new Date(Math.min(minDate.getTime(), task.start_date.getTime())); - } + // if (plannedEarlier) { + // minDate = new Date(Math.min(minDate.getTime(), task.planned_start.getTime())); + // } else { + // minDate = new Date(Math.min(minDate.getTime(), task.start_date.getTime())); + // } - if (plannedLater) { - maxDate = new Date(Math.max(maxDate.getTime(), task.planned_end.getTime())); - } else { - maxDate = new Date(Math.max(maxDate.getTime(), task.end_date.getTime())); - } - }) + // if (plannedLater) { + // maxDate = new Date(Math.max(maxDate.getTime(), task.planned_end.getTime())); + // } else { + // maxDate = new Date(Math.max(maxDate.getTime(), task.end_date.getTime())); + // } + // }) var padding = { left:0, @@ -147,10 +149,10 @@ function getScalePaddings(){ }; if(dataRange.start_date){ - var yScaleLabelsWidth = 48; + // var yScaleLabelsWidth = 48; // fine tune values in order to align chart with the scale range - padding.left = gantt.posFromDate(minDate) - yScaleLabelsWidth; - padding.right = scale.full_width - gantt.posFromDate(maxDate) - yScaleLabelsWidth; + padding.left = gantt.posFromDate(minValueDate); + padding.right = scale.full_width - gantt.posFromDate(maxValueDate); padding.top = gantt.config.row_height - 12; padding.bottom = gantt.config.row_height - 12; } @@ -213,13 +215,13 @@ var lineOverlay = overlayControl.addOverlay(function(container) { responsive: true, maintainAspectRatio: false, layout: { - padding: getScalePaddings() + padding: getScalePaddings(values) }, onResize: function(chart, newSize) { var dataRange = gantt.getSubtaskDates(); if(dataRange.start_date){ // align chart with the scale range - chart.options.layout.padding = getScalePaddings(); + chart.options.layout.padding = getScalePaddings(values); } }, legend: { From 3dbf992702442c16e25b499c32f94e70d37f09d7 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Thu, 10 Aug 2023 12:07:50 +0700 Subject: [PATCH 17/58] Fix date range --- view-mode/function/overlaySCurve.js | 34 ++++++++++++++--------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/view-mode/function/overlaySCurve.js b/view-mode/function/overlaySCurve.js index 6221a8d..e498f38 100644 --- a/view-mode/function/overlaySCurve.js +++ b/view-mode/function/overlaySCurve.js @@ -121,27 +121,27 @@ function getProgressLine(){ function getScalePaddings(values){ var scale = gantt.getScale(); var dataRange = gantt.getSubtaskDates(); - // let minDate = new Date(); - // let maxDate = new Date(); + let minDate = new Date(); + let maxDate = new Date(); let minValueDate = new Date(values.dates[0]); let maxValueDate = new Date(values.dates[values.dates.length -1]); - // gantt.eachTask(function(task){ - // let plannedEarlier = task.planned_start < task.start_date; - // let plannedLater = task.planned_end > task.end_date; + gantt.eachTask(function(task){ + let plannedEarlier = task.planned_start < task.start_date; + let plannedLater = task.planned_end > task.end_date; - // if (plannedEarlier) { - // minDate = new Date(Math.min(minDate.getTime(), task.planned_start.getTime())); - // } else { - // minDate = new Date(Math.min(minDate.getTime(), task.start_date.getTime())); - // } + if (plannedEarlier) { + minDate = new Date(Math.min(minDate.getTime(), task.planned_start.getTime())); + } else { + minDate = new Date(Math.min(minDate.getTime(), task.start_date.getTime())); + } - // if (plannedLater) { - // maxDate = new Date(Math.max(maxDate.getTime(), task.planned_end.getTime())); - // } else { - // maxDate = new Date(Math.max(maxDate.getTime(), task.end_date.getTime())); - // } - // }) + if (plannedLater) { + maxDate = new Date(Math.max(maxDate.getTime(), task.planned_end.getTime())); + } else { + maxDate = new Date(Math.max(maxDate.getTime(), task.end_date.getTime())); + } + }) var padding = { left:0, @@ -149,7 +149,7 @@ function getScalePaddings(values){ }; if(dataRange.start_date){ - // var yScaleLabelsWidth = 48; + var yScaleLabelsWidth = 48; // fine tune values in order to align chart with the scale range padding.left = gantt.posFromDate(minValueDate); padding.right = scale.full_width - gantt.posFromDate(maxValueDate); From 703107b5993e65906bd4b9c63989b5644ab9c786 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Thu, 10 Aug 2023 12:09:21 +0700 Subject: [PATCH 18/58] Quick fix --- view-mode/function/overlaySCurve.js | 32 ++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/view-mode/function/overlaySCurve.js b/view-mode/function/overlaySCurve.js index e498f38..bac7636 100644 --- a/view-mode/function/overlaySCurve.js +++ b/view-mode/function/overlaySCurve.js @@ -121,27 +121,27 @@ function getProgressLine(){ function getScalePaddings(values){ var scale = gantt.getScale(); var dataRange = gantt.getSubtaskDates(); - let minDate = new Date(); - let maxDate = new Date(); + // let minDate = new Date(); + // let maxDate = new Date(); let minValueDate = new Date(values.dates[0]); let maxValueDate = new Date(values.dates[values.dates.length -1]); - gantt.eachTask(function(task){ - let plannedEarlier = task.planned_start < task.start_date; - let plannedLater = task.planned_end > task.end_date; + // gantt.eachTask(function(task){ + // let plannedEarlier = task.planned_start < task.start_date; + // let plannedLater = task.planned_end > task.end_date; - if (plannedEarlier) { - minDate = new Date(Math.min(minDate.getTime(), task.planned_start.getTime())); - } else { - minDate = new Date(Math.min(minDate.getTime(), task.start_date.getTime())); - } + // if (plannedEarlier) { + // minDate = new Date(Math.min(minDate.getTime(), task.planned_start.getTime())); + // } else { + // minDate = new Date(Math.min(minDate.getTime(), task.start_date.getTime())); + // } - if (plannedLater) { - maxDate = new Date(Math.max(maxDate.getTime(), task.planned_end.getTime())); - } else { - maxDate = new Date(Math.max(maxDate.getTime(), task.end_date.getTime())); - } - }) + // if (plannedLater) { + // maxDate = new Date(Math.max(maxDate.getTime(), task.planned_end.getTime())); + // } else { + // maxDate = new Date(Math.max(maxDate.getTime(), task.end_date.getTime())); + // } + // }) var padding = { left:0, From 6254fed1fc1efb9dee19daef1ae5ede13ac26cd0 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Fri, 11 Aug 2023 16:42:55 +0700 Subject: [PATCH 19/58] Show hide save button --- edit-mode/function/function.js | 1 + edit-mode/function/restActivityLink.js | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index 19c3e0f..1847960 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -677,6 +677,7 @@ function batchUpdate(){ }).then(function (response) { $("body").removeClass("loading"); localStorage.setItem('batchEntity', ''); + $("#save-activity").hide(); sendStorage(); refresData(); }).catch(function (error) { diff --git a/edit-mode/function/restActivityLink.js b/edit-mode/function/restActivityLink.js index 6e6600c..269062b 100644 --- a/edit-mode/function/restActivityLink.js +++ b/edit-mode/function/restActivityLink.js @@ -10,6 +10,12 @@ gantt.ajax.get({ } }).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); @@ -64,6 +70,12 @@ function refresData(id) { } }).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; @@ -198,6 +210,7 @@ var dp = gantt.createDataProcessor(function (entity, action, data, id) { toBeSet = [batchEntity] } localStorage.setItem('batchEntity', JSON.stringify(toBeSet)); + $("#save-activity").show(); sendStorage(); // $("body").addClass("loading"); // return gantt.ajax.put({ From b313913c9c8cd796604c24a0f6e540e68180dee8 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Mon, 14 Aug 2023 09:26:32 +0700 Subject: [PATCH 20/58] Multiple site --- edit-mode/function/activityLocation.js | 104 ++++++++++++++++++------- 1 file changed, 77 insertions(+), 27 deletions(-) diff --git a/edit-mode/function/activityLocation.js b/edit-mode/function/activityLocation.js index cd8f394..1d35491 100644 --- a/edit-mode/function/activityLocation.js +++ b/edit-mode/function/activityLocation.js @@ -5,7 +5,7 @@ let long = 106.559242; let zoom = 10; let currentIdAct = 0; let map = L.map('map_activity').setView([lat, long], zoom); - +let drawnItems = new L.FeatureGroup().addTo(map); let inter = 5; let circLat = "", @@ -15,8 +15,6 @@ L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors' }).addTo(map); -let drawnItem = L.featureGroup().addTo(map); - var drawControl = new L.Control.Draw({ draw: { circlemarker: false, @@ -24,7 +22,7 @@ var drawControl = new L.Control.Draw({ polyline: false }, edit:{ - featureGroup:drawnItem, + featureGroup:drawnItems, edit:false, delete:false } @@ -33,7 +31,7 @@ var drawControl = new L.Control.Draw({ var drawnControlEdit = new L.Control.Draw({ draw: false, edit:{ - featureGroup:drawnItem, + featureGroup:drawnItems, delete:true } }); @@ -42,7 +40,21 @@ map.addControl(drawControl); // add searching location (nominatim) on map L.Control.geocoder().addTo(map); +function addDrawnLayer(layer) { + drawnItems.addLayer(layer); +} +function updateCurrentGeoJson() { + let shapes = []; + drawnItems.eachLayer(function (layer) { + let geojson = layer.toGeoJSON(); + shapes.push(geojson); + }); + currentGeoJson = { + type: 'FeatureCollection', + features: shapes + }; +} function openActivityMap(id) { currentIdAct = id; @@ -53,23 +65,30 @@ function openActivityMap(id) success: function (data) { let dataRes = data.data // console.log("cek data", data); - drawnItem.clearLayers(); + drawnItems.clearLayers(); if(dataRes.geom){ let datageojson = JSON.parse(dataRes.geom); currentGeoJson = datageojson // console.log("cek data geojson", datageojson); + if (datageojson.type === 'FeatureCollection') { + datageojson.features.forEach(feature => { + let layer = L.geoJSON(feature); + addDrawnLayer(layer) + }); + } else { if(datageojson.properties.radius){ let radius = datageojson.properties.radius let lGeoJson = L.geoJson(datageojson); let layers = lGeoJson.getLayers(); let latlon = layers[0].getLatLng(); let newCircle = L.circle([latlon.lat,latlon.lng], {radius: radius}); - drawnItem.addLayer(newCircle); + addDrawnLayer(newCircle) // console.log("cek layers", layers[0]); }else{ let lGeoJson = L.geoJson(datageojson); let layers = lGeoJson.getLayers(); - drawnItem.addLayer(layers[0]); + addDrawnLayer(layers[0]) + } } actionLocationAc = "edit"; drawControl.remove(); @@ -127,22 +146,22 @@ $(document).ready(function () { // console.log("cek layer", layer.toGeoJSON()); // layer.bindTooltip("cek"); // Do whatever else you need to. (save to db; add to map etc) - drawnItem.addLayer(layer); - drawControl.remove(); + addDrawnLayer(layer); + updateCurrentGeoJson(); map.addControl(drawnControlEdit); // map.addLayer(layer); }); map.on(L.Draw.Event.DELETED, function (e) { - var type = e.layerType, - layer = e.layer; - + var type = e.layerType; + let layers = e.layers.getLayers(); + layers.forEach(layer => { + drawnItems.removeLayer(layer); + }); + updateCurrentGeoJson() // console.log("cek layer", layer.toGeoJSON()); // Do whatever else you need to. (save to db; add to map etc) - currentGeoJson = ""; - drawnItem.removeLayer(layer); - drawnControlEdit.remove(); - map.addControl(drawControl); + // map.addLayer(layer); }); @@ -150,18 +169,16 @@ $(document).ready(function () { // var type = e.layerType, // layer = e.layer; let layers = e.layers.getLayers(); - let layer = layers[0] - let geoJson = layers[0].toGeoJSON(); + layers.forEach(layer => { + let geoJson = layer.toGeoJSON(); if(layer instanceof L.Circle){ geoJson.properties.radius = layer.getRadius(); - currentGeoJson = geoJson - }else{ - currentGeoJson = geoJson } + updateCurrentGeoJson(); + }); // console.log("cek layer", layers[0].toGeoJSON()); // console.log("cek layer", layer.toGeoJSON()); // Do whatever else you need to. (save to db; add to map etc) - // drawnItem.removeLayer(layer); // drawnControlEdit.remove(); // map.addControl(drawControl); // map.addLayer(layer); @@ -177,15 +194,49 @@ $(document).ready(function () { if(!result){ return false }else{ - submitLocation(); + submitShapes(); } } }); }else{ - submitLocation() + submitShapes(); } }); + function submitShapes() { + let payload + + if(currentGeoJson && currentGeoJson!=""){ + payload = { + geom: JSON.stringify(currentGeoJson), + } + }else{ + payload = { + geom: null, + } + } + + $.ajax({ + data: JSON.stringify(payload), + url: `${base_url}task/update-regular/${currentIdAct}`, + type: "PUT", + processData: false, + contentType: false, + success: function (data) { + $("#modal_activity_location").modal("hide"); + currentGeoJson ="" + currentIdAct = 0; + gantt.alert("Activity Location successfully updated!"); + }, + error: function (data) { + $("#modal_activity_location").modal("hide"); + currentGeoJson ="" + currentIdAct = 0; + gantt.alert("Activity Location failed updated!, try again later!"); + } + }); + } + function submitLocation() { let payload @@ -238,8 +289,7 @@ function submitCircle(radius) geojsoncircle.properties.radius = radius currentGeoJson = geojsoncircle // console.log("geojsoncircle", geojsoncircle); - drawnItem.addLayer(circle); - drawControl.remove(); + addDrawnLayer(circle); map.addControl(drawnControlEdit); $("#modal_radius").modal('hide'); From 79a0340b0a66ab97d755d29ad5497b0a299b79f9 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Mon, 14 Aug 2023 15:12:13 +0700 Subject: [PATCH 21/58] Fix edit location --- edit-mode/function/activityLocation.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/edit-mode/function/activityLocation.js b/edit-mode/function/activityLocation.js index 1d35491..dc6dbca 100644 --- a/edit-mode/function/activityLocation.js +++ b/edit-mode/function/activityLocation.js @@ -21,11 +21,6 @@ var drawControl = new L.Control.Draw({ circle:false, polyline: false }, - edit:{ - featureGroup:drawnItems, - edit:false, - delete:false - } }); var drawnControlEdit = new L.Control.Draw({ @@ -72,8 +67,11 @@ function openActivityMap(id) // console.log("cek data geojson", datageojson); if (datageojson.type === 'FeatureCollection') { datageojson.features.forEach(feature => { - let layer = L.geoJSON(feature); - addDrawnLayer(layer) + let lGeoJson = L.geoJSON(feature); + let layers = lGeoJson.getLayers(); + layers.forEach(layer => { + addDrawnLayer(layer) + }); }); } else { if(datageojson.properties.radius){ @@ -91,7 +89,6 @@ function openActivityMap(id) } } actionLocationAc = "edit"; - drawControl.remove(); map.addControl(drawnControlEdit); }else{ currentGeoJson = ""; From aa688671e04b7e73b18259aa21bb7c5b653a8237 Mon Sep 17 00:00:00 2001 From: ibnu Date: Sun, 20 Aug 2023 14:34:05 +0700 Subject: [PATCH 22/58] update early --- edit-mode/function/ganttConfig.js | 40 +++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/edit-mode/function/ganttConfig.js b/edit-mode/function/ganttConfig.js index 4370aa7..104b12c 100644 --- a/edit-mode/function/ganttConfig.js +++ b/edit-mode/function/ganttConfig.js @@ -177,6 +177,8 @@ const editor = { planned_start: { type: "date", map_to: "planned_start", min: new Date(2018, 0, 1) }, planned_end: { type: "end_date", map_to: "planned_end", min: new Date(2018, 0, 1) }, planned_duration: { type: "duration", map_to: "planned_duration", min: 0, max: 365, formatter: formatter }, + // early_start: { type: "date", map_to: "planned_start", min: new Date(2018, 0, 1) }, + // early_end: { type: "end_date", map_to: "planned_start", 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 }, @@ -271,6 +273,7 @@ function createColumnsConfig(selectedColumns) { } var allColumns = [ + { 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 }, @@ -281,7 +284,19 @@ var allColumns = [ } return text.planned_start; } - }, + }, + // { + // name: "early_start", label: "Early Start", align: "center", min_width: 80, editor: editor.early_start, resize: true, template: function (text) { + // let siblingId = gantt.getPrevSibling(text.id); + // if(siblingId){ + // let tempText = gantt.getTask(siblingId); + // console.log("iddd ", gantt.getTask(siblingId)); + // return moment(tempText.end_date).format('YYYY-MM-DD'); + // } + // return text.planned_start; + // } + // }, + { name: "early_start", label: "Early Start", align: "center", min_width: 80, editor: editor.early_start, resize: true }, { name: "start_date", label: "Actual Start", align: "center", min_width: 80, editor: editor.start_date, resize: true }, { name: "planned_end", label: "Baseline Finish", align: "center", min_width: 80, editor: editor.planned_end, resize: true, template: function (text) { @@ -291,7 +306,24 @@ var allColumns = [ return text.planned_end; } }, - { name: "end_date", label: "Actual Finish", align: "center", min_width: 80, editor: editor.end_date, resize: true }, + // { name: "early_end", label: "Early Finish", align: "center", min_width: 80, editor: editor.early_end, resize: true }, + // { + // name: "early_end", label: "Early Finish", align: "center", min_width: 80, editor: editor.early_end, resize: true, template: function (text) { + // let start; + // let end; + // text.planned_start ? start = text.planned_start : start = text.start_date; + // text.planned_end ? end = text.planned_end : end = text.end_date; + + // let plannedDuration = gantt.calculateDuration({ + // start_date: new Date(start), + // end_date: new Date(end) + // }) + // return moment(text.start_date).add(plannedDuration-1, 'days').format('YYYY-MM-DD'); + // // return text.planned_end; + // } + // }, + { name: "early_end", label: "Early Finish", align: "center", min_width: 80, resize: true }, + { name: "end_date", label: "Actual Finish", align: "center", min_width: 80, resize: true }, { name: "bobot_planning", label: "Bobot (%)", align: "center", editor: editor.bobot_planning, resize: true, min_width: 115, template: function (text) { @@ -517,6 +549,8 @@ let columnShows = { planned_start: false, planned_end: false, planned_duration: false, + early_start: false, + early_end: false, duration: true, rencana_biaya: true, cost_actual: true, @@ -543,6 +577,8 @@ gantt.config.columns = createColumnsConfig({ planned_start: true, planned_end: true, planned_duration: true, + early_start: true, + early_end: true, duration: true, rencana_biaya: true, cost_actual: true, From 919e523dfb72250e28972f09aa099319f06c8c18 Mon Sep 17 00:00:00 2001 From: ibnu Date: Sun, 20 Aug 2023 14:40:04 +0700 Subject: [PATCH 23/58] update early --- edit-mode/function/ganttConfig.js | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/edit-mode/function/ganttConfig.js b/edit-mode/function/ganttConfig.js index 104b12c..360e8a5 100644 --- a/edit-mode/function/ganttConfig.js +++ b/edit-mode/function/ganttConfig.js @@ -285,18 +285,18 @@ var allColumns = [ return text.planned_start; } }, - // { - // name: "early_start", label: "Early Start", align: "center", min_width: 80, editor: editor.early_start, resize: true, template: function (text) { - // let siblingId = gantt.getPrevSibling(text.id); - // if(siblingId){ - // let tempText = gantt.getTask(siblingId); - // console.log("iddd ", gantt.getTask(siblingId)); - // return moment(tempText.end_date).format('YYYY-MM-DD'); - // } - // return text.planned_start; - // } - // }, - { name: "early_start", label: "Early Start", align: "center", min_width: 80, editor: editor.early_start, resize: true }, + { + name: "early_start", label: "Early Start", align: "center", min_width: 80, editor: editor.early_start, resize: true, template: function (text) { + let siblingId = gantt.getPrevSibling(text.id); + if(siblingId){ + let tempText = gantt.getTask(siblingId); + // console.log("iddd ", gantt.getTask(siblingId)); + return moment(tempText.end_date).format('YYYY-MM-DD'); + } + return text.planned_start; + } + }, + // { name: "early_start", label: "Early Start", align: "center", min_width: 80, editor: editor.early_start, resize: true }, { name: "start_date", label: "Actual Start", align: "center", min_width: 80, editor: editor.start_date, resize: true }, { name: "planned_end", label: "Baseline Finish", align: "center", min_width: 80, editor: editor.planned_end, resize: true, template: function (text) { @@ -306,7 +306,6 @@ var allColumns = [ return text.planned_end; } }, - // { name: "early_end", label: "Early Finish", align: "center", min_width: 80, editor: editor.early_end, resize: true }, // { // name: "early_end", label: "Early Finish", align: "center", min_width: 80, editor: editor.early_end, resize: true, template: function (text) { // let start; From 897ebe82b3342a225a8a2cd912bf1b7e28d0c106 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Mon, 21 Aug 2023 12:29:36 +0700 Subject: [PATCH 24/58] Modify parent url --- view-mode/function/overlaySCurve.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/view-mode/function/overlaySCurve.js b/view-mode/function/overlaySCurve.js index bac7636..9b41082 100644 --- a/view-mode/function/overlaySCurve.js +++ b/view-mode/function/overlaySCurve.js @@ -17,12 +17,9 @@ function messageListener(event) { if (event.data && event.data.action === 'sendUrl') { const parentUrl = event.data.url; - // Remove the base URL and hash - const path = parentUrl.replace("https://adw.ospro.id/#/dashboard-project/", ""); - // Split the remaining path by "/" - parts = path.split("/"); - if (parts[2] && parts[2] == "1") { + parts = parentUrl.split("/"); + if (parts[7] && parts[7] == "1") { $.ajax({ headers: { "Content-Type": "application/json", From a0d717403632077ed522773b4bb4a6680346be7c Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Mon, 21 Aug 2023 13:20:28 +0700 Subject: [PATCH 25/58] Fix url parts --- view-mode/function/restActivityLink.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/view-mode/function/restActivityLink.js b/view-mode/function/restActivityLink.js index d16c69d..21bc736 100644 --- a/view-mode/function/restActivityLink.js +++ b/view-mode/function/restActivityLink.js @@ -6,11 +6,8 @@ window.addEventListener('message', function(event) { if (event.data && event.data.action === 'sendUrl') { const parentUrl = event.data.url; - // Remove the base URL and hash - const path = parentUrl.replace("https://adw.ospro.id/#/dashboard-project/", ""); - // Split the remaining path by "/" - parts = path.split("/"); + parts = parentUrl.split("/"); } }); gantt.ajax.get({ @@ -39,7 +36,7 @@ gantt.ajax.get({ } } - if(!parts[2]){ + if(!parts[7]){ gantt.silent(function () { gantt.parse(data); earliest = getEarliestTaskDate(); @@ -63,7 +60,7 @@ function refresData(id){ data['data'] = obj.data.data; data['links'] = obj.data.links; // console.log("data parse wrong", data); - if(!parts[2]){ + if(!parts[7]){ gantt.silent(function () { gantt.parse(data); earliest = getEarliestTaskDate(); From f3db3dac8cb37bbf8908c7fa9c731cfecdea799d Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Mon, 21 Aug 2023 16:12:00 +0700 Subject: [PATCH 26/58] Handling circle and radius --- edit-mode/function/activityLocation.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/edit-mode/function/activityLocation.js b/edit-mode/function/activityLocation.js index dc6dbca..caaf8a0 100644 --- a/edit-mode/function/activityLocation.js +++ b/edit-mode/function/activityLocation.js @@ -43,6 +43,9 @@ function updateCurrentGeoJson() { let shapes = []; drawnItems.eachLayer(function (layer) { let geojson = layer.toGeoJSON(); + if (layer instanceof L.Circle) { + geojson.properties.radius = layer.getRadius(); + } shapes.push(geojson); }); currentGeoJson = { @@ -70,7 +73,15 @@ function openActivityMap(id) let lGeoJson = L.geoJSON(feature); let layers = lGeoJson.getLayers(); layers.forEach(layer => { - addDrawnLayer(layer) + let radius = layer.feature.properties.radius; + if (radius) { + let latlon = layer.getLatLng(); + let circle = L.circle([latlon.lat, latlon.lng], {radius: radius}); + addDrawnLayer(circle); + } + else { + addDrawnLayer(layer) + } }); }); } else { @@ -285,15 +296,13 @@ function submitCircle(radius) let geojsoncircle = circle.toGeoJSON(); geojsoncircle.properties.radius = radius currentGeoJson = geojsoncircle - // console.log("geojsoncircle", geojsoncircle); addDrawnLayer(circle); + updateCurrentGeoJson(); map.addControl(drawnControlEdit); $("#modal_radius").modal('hide'); } $('#modal_radius').on('hide.bs.modal', function (event) { - circLat = 0 - circLong = 0 $("#buffer_radius").val(""); }); \ No newline at end of file From 59471c7c2bbd59e9df9005e4e6023efd9954c23c Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Mon, 21 Aug 2023 16:18:33 +0700 Subject: [PATCH 27/58] Quick fix --- edit-mode/function/activityLocation.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/edit-mode/function/activityLocation.js b/edit-mode/function/activityLocation.js index caaf8a0..0f4d2a1 100644 --- a/edit-mode/function/activityLocation.js +++ b/edit-mode/function/activityLocation.js @@ -304,5 +304,7 @@ function submitCircle(radius) } $('#modal_radius').on('hide.bs.modal', function (event) { + circLat = 0 + circLong = 0 $("#buffer_radius").val(""); }); \ No newline at end of file From 20fce656dc4e8a5b6f3e51a185922849ad3a5418 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Mon, 21 Aug 2023 16:20:05 +0700 Subject: [PATCH 28/58] Add formatting --- edit-mode/function/activityLocation.js | 117 ++++++++++++------------- 1 file changed, 57 insertions(+), 60 deletions(-) diff --git a/edit-mode/function/activityLocation.js b/edit-mode/function/activityLocation.js index 0f4d2a1..77e9c90 100644 --- a/edit-mode/function/activityLocation.js +++ b/edit-mode/function/activityLocation.js @@ -6,10 +6,10 @@ let zoom = 10; let currentIdAct = 0; let map = L.map('map_activity').setView([lat, long], zoom); let drawnItems = new L.FeatureGroup().addTo(map); -let inter = 5; +let inter = 5; -let circLat = "", -circLong = ""; +let circLat = "", + circLong = ""; L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors' @@ -18,16 +18,16 @@ L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { var drawControl = new L.Control.Draw({ draw: { circlemarker: false, - circle:false, + circle: false, polyline: false }, }); var drawnControlEdit = new L.Control.Draw({ draw: false, - edit:{ - featureGroup:drawnItems, - delete:true + edit: { + featureGroup: drawnItems, + delete: true } }); @@ -53,18 +53,17 @@ function updateCurrentGeoJson() { features: shapes }; } -function openActivityMap(id) -{ +function openActivityMap(id) { currentIdAct = id; map.invalidateSize(); $.ajax({ url: `${base_url}task/edit/${id}`, - type:"get", + type: "get", success: function (data) { let dataRes = data.data // console.log("cek data", data); drawnItems.clearLayers(); - if(dataRes.geom){ + if (dataRes.geom) { let datageojson = JSON.parse(dataRes.geom); currentGeoJson = datageojson // console.log("cek data geojson", datageojson); @@ -76,7 +75,7 @@ function openActivityMap(id) let radius = layer.feature.properties.radius; if (radius) { let latlon = layer.getLatLng(); - let circle = L.circle([latlon.lat, latlon.lng], {radius: radius}); + let circle = L.circle([latlon.lat, latlon.lng], { radius: radius }); addDrawnLayer(circle); } else { @@ -85,23 +84,23 @@ function openActivityMap(id) }); }); } else { - if(datageojson.properties.radius){ - let radius = datageojson.properties.radius - let lGeoJson = L.geoJson(datageojson); - let layers = lGeoJson.getLayers(); - let latlon = layers[0].getLatLng(); - let newCircle = L.circle([latlon.lat,latlon.lng], {radius: radius}); - addDrawnLayer(newCircle) - // console.log("cek layers", layers[0]); - }else{ - let lGeoJson = L.geoJson(datageojson); - let layers = lGeoJson.getLayers(); - addDrawnLayer(layers[0]) - } + if (datageojson.properties.radius) { + let radius = datageojson.properties.radius + let lGeoJson = L.geoJson(datageojson); + let layers = lGeoJson.getLayers(); + let latlon = layers[0].getLatLng(); + let newCircle = L.circle([latlon.lat, latlon.lng], { radius: radius }); + addDrawnLayer(newCircle) + // console.log("cek layers", layers[0]); + } else { + let lGeoJson = L.geoJson(datageojson); + let layers = lGeoJson.getLayers(); + addDrawnLayer(layers[0]) + } } actionLocationAc = "edit"; map.addControl(drawnControlEdit); - }else{ + } else { currentGeoJson = ""; actionLocationAc = "add"; drawnControlEdit.remove(); @@ -116,7 +115,7 @@ function openActivityMap(id) } $('#modal_activity_location').on('hide.bs.modal', function (event) { - currentGeoJson ="" + currentGeoJson = "" currentIdAct = 0; actionLocationAc = "add"; drawnControlEdit.remove(); @@ -127,7 +126,7 @@ $('#modal_activity_location').on('hide.bs.modal', function (event) { // map initialization $(document).ready(function () { let intervalMap = setInterval(function () { - if(inter=0){ + if (inter = 0) { clearInterval(intervalMap) } map.invalidateSize(); @@ -140,7 +139,7 @@ $(document).ready(function () { if (type === 'marker') { let latlong = layer.getLatLng(); // console.log("cek latlong", latlong); - circLat = latlong.lat + circLat = latlong.lat circLong = latlong.lng $("#modal_radius").modal("show"); // Do marker specific actions @@ -178,11 +177,11 @@ $(document).ready(function () { // layer = e.layer; let layers = e.layers.getLayers(); layers.forEach(layer => { - let geoJson = layer.toGeoJSON(); - if(layer instanceof L.Circle){ - geoJson.properties.radius = layer.getRadius(); - } - updateCurrentGeoJson(); + let geoJson = layer.toGeoJSON(); + if (layer instanceof L.Circle) { + geoJson.properties.radius = layer.getRadius(); + } + updateCurrentGeoJson(); }); // console.log("cek layer", layers[0].toGeoJSON()); // console.log("cek layer", layer.toGeoJSON()); @@ -192,21 +191,21 @@ $(document).ready(function () { // map.addLayer(layer); }); - $("#modal_activity_location").on("click", "#btn_save_location", function() { - if(currentGeoJson==""){ + $("#modal_activity_location").on("click", "#btn_save_location", function () { + if (currentGeoJson == "") { gantt.confirm({ text: "Lokasi belum ditentukan!, lanjutkan?", - ok:"Submit", - cancel:"Cancel", - callback: function(result){ - if(!result){ + ok: "Submit", + cancel: "Cancel", + callback: function (result) { + if (!result) { return false - }else{ + } else { submitShapes(); } } }); - }else{ + } else { submitShapes(); } }); @@ -214,85 +213,83 @@ $(document).ready(function () { function submitShapes() { let payload - if(currentGeoJson && currentGeoJson!=""){ + if (currentGeoJson && currentGeoJson != "") { payload = { geom: JSON.stringify(currentGeoJson), } - }else{ + } else { payload = { geom: null, } } $.ajax({ - data: JSON.stringify(payload), + data: JSON.stringify(payload), url: `${base_url}task/update-regular/${currentIdAct}`, type: "PUT", processData: false, contentType: false, success: function (data) { $("#modal_activity_location").modal("hide"); - currentGeoJson ="" + currentGeoJson = "" currentIdAct = 0; gantt.alert("Activity Location successfully updated!"); }, error: function (data) { $("#modal_activity_location").modal("hide"); - currentGeoJson ="" + currentGeoJson = "" currentIdAct = 0; gantt.alert("Activity Location failed updated!, try again later!"); } }); } - function submitLocation() - { + function submitLocation() { let payload - if(currentGeoJson && currentGeoJson!=""){ + if (currentGeoJson && currentGeoJson != "") { payload = { geom: JSON.stringify(currentGeoJson), } - }else{ + } else { payload = { geom: null, } } $.ajax({ - data: JSON.stringify(payload), + data: JSON.stringify(payload), url: `${base_url}task/update-regular/${currentIdAct}`, type: "PUT", processData: false, contentType: false, success: function (data) { $("#modal_activity_location").modal("hide"); - currentGeoJson ="" + currentGeoJson = "" currentIdAct = 0; gantt.alert("Activity Location successfully updated!"); }, error: function (data) { $("#modal_activity_location").modal("hide"); - currentGeoJson ="" + currentGeoJson = "" currentIdAct = 0; gantt.alert("Activity Location failed updated!, try again later!"); } }); } - $("#modal_radius").on("click", "#btn_save_radius", function() { + $("#modal_radius").on("click", "#btn_save_radius", function () { let radius = $("#buffer_radius").val(); - if(radius <= 0){ + if (radius <= 0) { gantt.alert("radius buffer tidak boleh kurang dari atau sama dengan 0!!"); - }else{ + } else { submitCircle(radius); } }); }); -function submitCircle(radius) -{ - let circle = L.circle([circLat,circLong], {radius: radius}); +function submitCircle(radius) { + let circle = L.circle([circLat, circLong], { radius: radius }); let geojsoncircle = circle.toGeoJSON(); geojsoncircle.properties.radius = radius currentGeoJson = geojsoncircle From fd1b431b99b6fe1702b87bdd0af798fa9845e59c Mon Sep 17 00:00:00 2001 From: ibnu Date: Tue, 22 Aug 2023 20:53:06 +0700 Subject: [PATCH 29/58] update logic aerly and actual --- edit-mode/function/ganttConfig.js | 44 +++++++------------------------ 1 file changed, 9 insertions(+), 35 deletions(-) diff --git a/edit-mode/function/ganttConfig.js b/edit-mode/function/ganttConfig.js index 360e8a5..250c8e7 100644 --- a/edit-mode/function/ganttConfig.js +++ b/edit-mode/function/ganttConfig.js @@ -285,19 +285,6 @@ var allColumns = [ return text.planned_start; } }, - { - name: "early_start", label: "Early Start", align: "center", min_width: 80, editor: editor.early_start, resize: true, template: function (text) { - let siblingId = gantt.getPrevSibling(text.id); - if(siblingId){ - let tempText = gantt.getTask(siblingId); - // console.log("iddd ", gantt.getTask(siblingId)); - return moment(tempText.end_date).format('YYYY-MM-DD'); - } - return text.planned_start; - } - }, - // { name: "early_start", label: "Early Start", align: "center", min_width: 80, editor: editor.early_start, resize: true }, - { name: "start_date", label: "Actual Start", align: "center", min_width: 80, editor: editor.start_date, resize: true }, { name: "planned_end", label: "Baseline Finish", align: "center", min_width: 80, editor: editor.planned_end, resize: true, template: function (text) { if (!text.planned_end) { @@ -306,24 +293,11 @@ var allColumns = [ return text.planned_end; } }, - // { - // name: "early_end", label: "Early Finish", align: "center", min_width: 80, editor: editor.early_end, resize: true, template: function (text) { - // let start; - // let end; - // text.planned_start ? start = text.planned_start : start = text.start_date; - // text.planned_end ? end = text.planned_end : end = text.end_date; - - // let plannedDuration = gantt.calculateDuration({ - // start_date: new Date(start), - // end_date: new Date(end) - // }) - // return moment(text.start_date).add(plannedDuration-1, 'days').format('YYYY-MM-DD'); - // // return text.planned_end; - // } - // }, - { name: "early_end", label: "Early Finish", align: "center", min_width: 80, resize: true }, - { name: "end_date", label: "Actual Finish", align: "center", min_width: 80, resize: true }, + { name: "start_date", label: "Early Start", align: "center", min_width: 80, editor: editor.start_date, resize: true }, + { name: "end_date", label: "Early Finish", align: "center", min_width: 80, editor: editor.end_date, resize: true }, + { name: "actual_start", label: "Actual Start", align: "center", min_width: 80, resize: true }, + { name: "actual_end", label: "Actual Finish", align: "center", min_width: 80, resize: true }, { name: "bobot_planning", label: "Bobot (%)", align: "center", editor: editor.bobot_planning, resize: true, min_width: 115, template: function (text) { let bobot = parseFloat(text.bobot_planning); @@ -380,7 +354,7 @@ var allColumns = [ }) return plannedDuration; }}, - { name: "duration", label: "Actual Duration (Day)", align: "center", min_width: 50, resize: true, editor: editor.duration }, + { name: "duration", label: "Duration (Day)", align: "center", min_width: 50, resize: true, editor: editor.duration }, { name: "rencana_biaya", label: "Cost Planning", align: "right", min_width: 100, resize: true, template: function (text) { if (!text.rencana_biaya) { @@ -548,8 +522,8 @@ let columnShows = { planned_start: false, planned_end: false, planned_duration: false, - early_start: false, - early_end: false, + actual_start: false, + actual_end: false, duration: true, rencana_biaya: true, cost_actual: true, @@ -576,8 +550,8 @@ gantt.config.columns = createColumnsConfig({ planned_start: true, planned_end: true, planned_duration: true, - early_start: true, - early_end: true, + actual_start: true, + actual_end: true, duration: true, rencana_biaya: true, cost_actual: true, From 2fc16ac3ef7a495ea0e2c14025ead5f267f0ba8b Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Wed, 23 Aug 2023 08:22:24 +0700 Subject: [PATCH 30/58] Change columns name --- edit-mode/function/function.js | 6 +++++- edit-mode/function/ganttConfig.js | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index 1847960..760dfda 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -538,7 +538,11 @@ function setUpForShowHideColumn(data) { columns.map((val, index) => { configColumn[val.column_name] = val.show }); - + if (!isBaselineSet) { + configColumn.planned_start = undefined; + configColumn.planned_end = undefined; + configColumn.planned_duration = undefined; + } gantt.config.columns = createColumnsConfig(configColumn); gantt.render(); diff --git a/edit-mode/function/ganttConfig.js b/edit-mode/function/ganttConfig.js index 4370aa7..ccc5457 100644 --- a/edit-mode/function/ganttConfig.js +++ b/edit-mode/function/ganttConfig.js @@ -282,7 +282,7 @@ var allColumns = [ return text.planned_start; } }, - { name: "start_date", label: "Actual Start", align: "center", min_width: 80, editor: editor.start_date, resize: true }, + { name: "start_date", label: "Early Start", align: "center", min_width: 80, editor: editor.start_date, resize: true }, { name: "planned_end", label: "Baseline Finish", align: "center", min_width: 80, editor: editor.planned_end, resize: true, template: function (text) { if (!text.planned_end) { @@ -291,7 +291,7 @@ var allColumns = [ return text.planned_end; } }, - { name: "end_date", label: "Actual Finish", align: "center", min_width: 80, editor: editor.end_date, resize: true }, + { name: "end_date", label: "Early Finish", align: "center", min_width: 80, editor: editor.end_date, resize: true }, { name: "bobot_planning", label: "Bobot (%)", align: "center", editor: editor.bobot_planning, resize: true, min_width: 115, template: function (text) { @@ -349,7 +349,7 @@ var allColumns = [ }) return plannedDuration; }}, - { name: "duration", label: "Actual Duration (Day)", align: "center", min_width: 50, resize: true, editor: editor.duration }, + { name: "duration", label: "Early Duration (Day)", align: "center", min_width: 50, resize: true, editor: editor.duration }, { name: "rencana_biaya", label: "Cost Planning", align: "right", min_width: 100, resize: true, template: function (text) { if (!text.rencana_biaya) { From cec485918fa7d0027e91cd0b9738eed07e8f573b Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Wed, 23 Aug 2023 10:00:41 +0700 Subject: [PATCH 31/58] quick fix --- edit-mode/function/function.js | 1 + 1 file changed, 1 insertion(+) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index 760dfda..d17b12f 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -542,6 +542,7 @@ function setUpForShowHideColumn(data) { configColumn.planned_start = undefined; configColumn.planned_end = undefined; configColumn.planned_duration = undefined; + configColumn.baseline_progress = undefined; } gantt.config.columns = createColumnsConfig(configColumn); From 9c588a0ce561857336ad77df7e231e1861bc3c5a Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Wed, 23 Aug 2023 12:31:28 +0700 Subject: [PATCH 32/58] Fix link lag --- edit-mode/function/function.js | 16 +++++++++++++++- edit-mode/function/restActivityLink.js | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index d17b12f..c84423e 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -708,4 +708,18 @@ $(window).on('beforeunload', function(event) { function sendStorage(){ const batchEntityData = localStorage.getItem('batchEntity'); window.parent.postMessage({ batchEntity: batchEntityData }, '*'); -} \ No newline at end of file +} + +function updateLinksLag(data) { + data.data.forEach(task => { + data.links.forEach(link => { + if (link.target == task.id) { + let predecessor = data.data.find(item => item.id == link.source); + if (predecessor) { + let lag = gantt.calculateDuration(new Date(predecessor.end_date), new Date(task.start_date)); + link.lag = lag; + } + } + }); + }); +} diff --git a/edit-mode/function/restActivityLink.js b/edit-mode/function/restActivityLink.js index 269062b..7d9665b 100644 --- a/edit-mode/function/restActivityLink.js +++ b/edit-mode/function/restActivityLink.js @@ -38,6 +38,7 @@ gantt.ajax.get({ }) }); gantt.silent(function () { + updateLinksLag(data); gantt.parse(data); getGanttOpen(); gantt.parse(data); @@ -90,6 +91,7 @@ function refresData(id) { }) }); gantt.silent(function () { + updateLinksLag(data); gantt.parse(data); getGanttOpen(); gantt.parse(data); From e8333090dca92e87132c66526716c31376ba8b0b Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Thu, 24 Aug 2023 09:15:55 +0700 Subject: [PATCH 33/58] Fix gantt date format --- edit-mode/function/ganttConfig.js | 35 +++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/edit-mode/function/ganttConfig.js b/edit-mode/function/ganttConfig.js index 250c8e7..00d6155 100644 --- a/edit-mode/function/ganttConfig.js +++ b/edit-mode/function/ganttConfig.js @@ -280,24 +280,41 @@ var allColumns = [ { name: "planned_start", label: "Baseline Start", align: "center", min_width: 80, editor: editor.planned_start, resize: true, template: function (text) { if (!text.planned_start) { - return text.start_date; + return moment(text.start_date).format("DD-MM-YYYY"); } - return text.planned_start; + return moment(text.planned_start).format("DD-MM-YYYY"); } }, { name: "planned_end", label: "Baseline Finish", align: "center", min_width: 80, editor: editor.planned_end, resize: true, template: function (text) { if (!text.planned_end) { - return text.end_date; + return moment(text.end_date).format("DD-MM-YYYY"); } - return text.planned_end; + return moment(text.planned_end).format("DD-MM-YYYY"); } }, - { name: "start_date", label: "Early Start", align: "center", min_width: 80, editor: editor.start_date, resize: true }, - { name: "end_date", label: "Early Finish", align: "center", min_width: 80, editor: editor.end_date, resize: true }, - - { name: "actual_start", label: "Actual Start", align: "center", min_width: 80, resize: true }, - { name: "actual_end", label: "Actual Finish", align: "center", min_width: 80, resize: true }, + { name: "start_date", label: "Early Start", align: "center", min_width: 80, editor: editor.start_date, resize: true, template: function (text) { + return moment(text.start_date).format("DD-MM-YYYY"); + } + }, + { name: "end_date", label: "Early Finish", align: "center", min_width: 80, editor: editor.end_date, resize: true, template: function (text) { + return moment(text.end_date).format("DD-MM-YYYY"); + } + }, + { name: "actual_start", label: "Actual Start", align: "center", min_width: 80, resize: true, template: function (text) { + if (!text.actual_start) { + return ''; + } + return moment(text.actual_start).format("DD-MM-YYYY"); + } + }, + { name: "actual_end", label: "Actual Finish", align: "center", min_width: 80, resize: true, template: function (text) { + if (!text.actual_end) { + return ''; + } + return moment(text.actual_end).format("DD-MM-YYYY"); + } + }, { name: "bobot_planning", label: "Bobot (%)", align: "center", editor: editor.bobot_planning, resize: true, min_width: 115, template: function (text) { let bobot = parseFloat(text.bobot_planning); From 9f6a2e71cbb3f032044da25bdf427960437fce1c Mon Sep 17 00:00:00 2001 From: ibnu Date: Thu, 24 Aug 2023 09:55:36 +0700 Subject: [PATCH 34/58] conflict --- edit-mode/function/function.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index 1847960..417b4df 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -556,10 +556,10 @@ function updateShowHideColumn(data) { processData: false, contentType: false, success: function (data) { - console.log(data); + // console.log(data); }, error: function (data) { - console.log(data); + // console.log(data); } }); } @@ -570,6 +570,8 @@ function colAjaxReq(type) { type: "GET", success: function (data) { let ganttColumnsByType = data.data; + // console.log("ini gantt field ", ganttColumnsByType); + // console.log("ini column ", gantt.config.columns); let isFound = false; x = gantt.config.columns.filter((val) => { isFound = ganttColumnsByType.find(obj => { @@ -577,6 +579,10 @@ function colAjaxReq(type) { }); if (isFound) return val; + if (isFound == false){ + // console.log("ini gantt field !isFound ", val); + } + }); gantt.config.columns = x.filter(item => item); allColumns = gantt.config.columns; From 9a016c2509e1e55593100f4a392026b9531c1e30 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Thu, 24 Aug 2023 10:41:20 +0700 Subject: [PATCH 35/58] Check link type --- edit-mode/function/function.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index c84423e..1319ab7 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -717,7 +717,9 @@ function updateLinksLag(data) { let predecessor = data.data.find(item => item.id == link.source); if (predecessor) { let lag = gantt.calculateDuration(new Date(predecessor.end_date), new Date(task.start_date)); - link.lag = lag; + if (link.type == "0") { + link.lag = lag; + } } } }); From 440b6272f1aa19c75069ffeb96f644f9b053348d Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Thu, 24 Aug 2023 11:09:58 +0700 Subject: [PATCH 36/58] cek baseline before changing lag --- edit-mode/function/function.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index 1319ab7..7aa1542 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -717,7 +717,7 @@ function updateLinksLag(data) { let predecessor = data.data.find(item => item.id == link.source); if (predecessor) { let lag = gantt.calculateDuration(new Date(predecessor.end_date), new Date(task.start_date)); - if (link.type == "0") { + if (link.type == "0" && isBaselineSet) { link.lag = lag; } } From 41a2f0d9462a8c1d53cc6bbc518522c265336e78 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Thu, 24 Aug 2023 12:09:52 +0700 Subject: [PATCH 37/58] fix milestone dateformat --- edit-mode/function/milestone.js | 23 ++++++++++++++++------- edit-mode/index.html | 4 ++-- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/edit-mode/function/milestone.js b/edit-mode/function/milestone.js index 1d67187..bfd7158 100644 --- a/edit-mode/function/milestone.js +++ b/edit-mode/function/milestone.js @@ -70,7 +70,16 @@ $(document).ready(function () { $("#name_milestone").val(data.text); }); + $('#due_milestone').datepicker({ + format: 'dd-mm-yyyy', // Set the desired format + autoclose: true // Close the datepicker when a date is selected + }); + $('#deadline_milestone').datepicker({ + format: 'dd-mm-yyyy', // Set the desired format + autoclose: true // Close the datepicker when a date is selected + }); + $('#modal-material').on('show.bs.modal', function (event) { }); @@ -88,8 +97,8 @@ $(document).ready(function () { console.log("cek data form", data); let parent = data.milestone_parent; var taskId = 0; - var start = moment(data.due_date, "YYYY-MM-DD"); - var end = moment(data.deadline, "YYYY-MM-DD"); + var start = moment(data.due_date, "DD-MM-YYYY"); + var end = moment(data.deadline, "DD-MM-YYYY"); let duration = moment.duration(start.diff(end)).asDays(); let nameMilestone = data.status!="" ? data.status : data.id_milestone // console.log("cek duration", Math.abs(duration)); @@ -97,8 +106,8 @@ $(document).ready(function () { taskId = gantt.addTask({ id: Math.floor(Math.random() * 1000) + 5000, text: nameMilestone, - start_date: data.due_date, - end_date: data.deadline, + start_date: start.format("YYYY-MM-DD"), + end_date: end.format("YYYY-MM-DD"), duration: Math.abs(duration), type: "milestone", type_activity:"milestone" @@ -107,8 +116,8 @@ $(document).ready(function () { taskId = gantt.addTask({ id: Math.floor(Math.random() * 1000) + 5000, text: nameMilestone, - start_date: data.due_date, - end_date: data.deadline, + start_date: start.format("YYYY-MM-DD"), + end_date: end.format("YYYY-MM-DD"), duration: Math.abs(duration), type: "milestone", type_activity:"milestone" @@ -124,4 +133,4 @@ $(document).ready(function () { gantt.alert("Add Milestone Failed!"); } }); -}); \ No newline at end of file +}); diff --git a/edit-mode/index.html b/edit-mode/index.html index dd17be9..f488395 100644 --- a/edit-mode/index.html +++ b/edit-mode/index.html @@ -602,11 +602,11 @@
- +
- +
From 29158d911527c0768144eb7a13ecfd7fb455735a Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Thu, 24 Aug 2023 13:52:31 +0700 Subject: [PATCH 38/58] fix report activity dateformat --- edit-mode/function/reportActivity.js | 7 ++++++- edit-mode/index.html | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/edit-mode/function/reportActivity.js b/edit-mode/function/reportActivity.js index 9a98afb..0800729 100644 --- a/edit-mode/function/reportActivity.js +++ b/edit-mode/function/reportActivity.js @@ -341,10 +341,15 @@ $(document).ready(function () { }); - + $('#ra_date_material').datepicker({ + format: 'dd-mm-yyyy', // Set the desired format + autoclose: true // Close the datepicker when a date is selected + }); $("#form_report_activity_material").on("submit", function (e) { e.preventDefault(); var formData = new FormData(this); + let formattedDate = moment(formData.get("report_date"), "DD-MM-YYYY").format("YYYY-MM-DD"); + formData.set('report_date', formattedDate); formData.append("activity_id", activityId); formData.append("assign_material_id", assignMaterialId); let idRa = $("#id_ra_material").val(); diff --git a/edit-mode/index.html b/edit-mode/index.html index f488395..5e88c06 100644 --- a/edit-mode/index.html +++ b/edit-mode/index.html @@ -723,7 +723,7 @@
-
From 81e2e3f63fd1533be693a2883647d1b97d30c721 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Fri, 25 Aug 2023 08:09:48 +0700 Subject: [PATCH 39/58] Fix show hide column --- edit-mode/function/function.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index 7aa1542..dde69da 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -539,10 +539,10 @@ function setUpForShowHideColumn(data) { configColumn[val.column_name] = val.show }); if (!isBaselineSet) { - configColumn.planned_start = undefined; - configColumn.planned_end = undefined; - configColumn.planned_duration = undefined; - configColumn.baseline_progress = undefined; + // configColumn.planned_start = undefined; + // configColumn.planned_end = undefined; + // configColumn.planned_duration = undefined; + // configColumn.baseline_progress = undefined; } gantt.config.columns = createColumnsConfig(configColumn); From 511ddcbcefd6bd6c04fc53e632f9e662203c24c7 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Fri, 25 Aug 2023 09:48:09 +0700 Subject: [PATCH 40/58] handle abort error request material --- edit-mode/function/expenseResource.js | 10 +++++++++- edit-mode/function/materialResource.js | 18 ++++++++++++++---- edit-mode/function/reportActivity.js | 10 +++++++++- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/edit-mode/function/expenseResource.js b/edit-mode/function/expenseResource.js index bd7f101..2ab9f3f 100644 --- a/edit-mode/function/expenseResource.js +++ b/edit-mode/function/expenseResource.js @@ -131,7 +131,15 @@ $(document).ready(function () { cache: false } }); - + // $('#required-date-req-expense').datepicker({ + // format: 'dd-mm-yyyy', // Set the desired format + // autoclose: true // Close the datepicker when a date is selected + // }); + // + // $('#required-date-plan-expense').datepicker({ + // format: 'dd-mm-yyyy', // Set the desired format + // autoclose: true // Close the datepicker when a date is selected + // }); $("#form-assign-expense").on('submit', function (e) { e.preventDefault(); diff --git a/edit-mode/function/materialResource.js b/edit-mode/function/materialResource.js index 1a01df7..f540f4d 100644 --- a/edit-mode/function/materialResource.js +++ b/edit-mode/function/materialResource.js @@ -164,13 +164,23 @@ $(document).ready(function () { results: dataIntegrasiMaterial }; }, error: function (jqXHR, textStatus, errorThrown) { - gantt.alert(`Status: ${textStatus}`); - gantt.alert(`Error thrown: ${errorThrown}`); - gantt.alert(`Error accessing URL: ${adwIntegrationUrl}/request-material/get-material-integration`); + if (textStatus != "abort") { + gantt.alert(`Status: ${textStatus}`); + gantt.alert(`Error thrown: ${errorThrown}`); + gantt.alert(`Error accessing URL: ${adwIntegrationUrl}/request-material/get-material-integration`); + } } } }); - + // $('#required-date-req-material').datepicker({ + // format: 'dd-mm-yyyy', // Set the desired format + // autoclose: true // Close the datepicker when a date is selected + // }); + // + // $('#required-date-plan-material').datepicker({ + // format: 'dd-mm-yyyy', // Set the desired format + // autoclose: true // Close the datepicker when a date is selected + // }); $("#form-assign-material").on('submit', function (e) { e.preventDefault(); diff --git a/edit-mode/function/reportActivity.js b/edit-mode/function/reportActivity.js index 0800729..89d9b98 100644 --- a/edit-mode/function/reportActivity.js +++ b/edit-mode/function/reportActivity.js @@ -62,7 +62,15 @@ $(document).ready(function () { $('#ra_date_end_activity').prop('disabled', true); } }); - + // $('#ra_date_start_activity').datepicker({ + // format: 'dd-mm-yyyy', // Set the desired format + // autoclose: true // Close the datepicker when a date is selected + // }); + // + // $('#ra_date_end_activity').datepicker({ + // format: 'dd-mm-yyyy', // Set the desired format + // autoclose: true // Close the datepicker when a date is selected + // }); $("#ra_date_end_activity").on("change", function () { let valEnd = $(this).val() let valStart = $('#ra_date_start_activity').val() From de987474dbb4dcbd6f24ed3e8880f3b08a275647 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Fri, 25 Aug 2023 11:21:36 +0700 Subject: [PATCH 41/58] handle all link type update link --- edit-mode/function/function.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index dde69da..68cb96d 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -716,8 +716,25 @@ function updateLinksLag(data) { if (link.target == task.id) { let predecessor = data.data.find(item => item.id == link.source); if (predecessor) { - let lag = gantt.calculateDuration(new Date(predecessor.end_date), new Date(task.start_date)); - if (link.type == "0" && isBaselineSet) { + let lag; + if (isBaselineSet) { + switch (link.type) { + case "0": + lag = gantt.calculateDuration(new Date(predecessor.end_date), new Date(task.start_date)); + break; + case "1": + lag = gantt.calculateDuration(new Date(predecessor.start_date), new Date(task.start_date)); + break; + case "2": + lag = gantt.calculateDuration(new Date(predecessor.end_date), new Date(task.end_date)); + break; + case "3": + lag = gantt.calculateDuration(new Date(predecessor.start_date), new Date(task.end_date)); + break; + default: + // Handle an unknown link type if needed + break; + } link.lag = lag; } } From d28bdacb245f22160e6ac27c6177c931055bb3e5 Mon Sep 17 00:00:00 2001 From: ibnu Date: Sun, 27 Aug 2023 13:02:56 +0700 Subject: [PATCH 42/58] update notif data not found req material --- edit-mode/function/materialResource.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/edit-mode/function/materialResource.js b/edit-mode/function/materialResource.js index f540f4d..9efa127 100644 --- a/edit-mode/function/materialResource.js +++ b/edit-mode/function/materialResource.js @@ -164,10 +164,11 @@ $(document).ready(function () { results: dataIntegrasiMaterial }; }, error: function (jqXHR, textStatus, errorThrown) { + // console.log("textStatus ", textStatus); if (textStatus != "abort") { - gantt.alert(`Status: ${textStatus}`); - gantt.alert(`Error thrown: ${errorThrown}`); - gantt.alert(`Error accessing URL: ${adwIntegrationUrl}/request-material/get-material-integration`); + // gantt.alert(`Status: ${textStatus}`); + gantt.alert(`Data Not Found`); + // gantt.alert(`Error accessing URL: ${adwIntegrationUrl}/request-material/get-material-integration`); } } } From 6398ce0420982eff8dd30a16450259abeda87464 Mon Sep 17 00:00:00 2001 From: ibnu Date: Sun, 27 Aug 2023 15:48:49 +0700 Subject: [PATCH 43/58] update disable function updatelinkslag --- edit-mode/function/function.js | 10 +++++----- edit-mode/function/restActivityLink.js | 4 ++-- edit-mode/index.html | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index 9f7efc1..7f07fef 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -719,22 +719,22 @@ function sendStorage(){ function updateLinksLag(data) { data.data.forEach(task => { data.links.forEach(link => { - if (link.target == task.id) { + if (link.target == task.id && task.actual_start != null) { let predecessor = data.data.find(item => item.id == link.source); if (predecessor) { let lag; if (isBaselineSet) { switch (link.type) { - case "0": + case "0": // FS lag = gantt.calculateDuration(new Date(predecessor.end_date), new Date(task.start_date)); break; - case "1": + case "1": // SS lag = gantt.calculateDuration(new Date(predecessor.start_date), new Date(task.start_date)); break; - case "2": + case "2": // FF lag = gantt.calculateDuration(new Date(predecessor.end_date), new Date(task.end_date)); break; - case "3": + case "3": // SF lag = gantt.calculateDuration(new Date(predecessor.start_date), new Date(task.end_date)); break; default: diff --git a/edit-mode/function/restActivityLink.js b/edit-mode/function/restActivityLink.js index 7d9665b..f484941 100644 --- a/edit-mode/function/restActivityLink.js +++ b/edit-mode/function/restActivityLink.js @@ -38,7 +38,7 @@ gantt.ajax.get({ }) }); gantt.silent(function () { - updateLinksLag(data); + // updateLinksLag(data); gantt.parse(data); getGanttOpen(); gantt.parse(data); @@ -91,7 +91,7 @@ function refresData(id) { }) }); gantt.silent(function () { - updateLinksLag(data); + // updateLinksLag(data); gantt.parse(data); getGanttOpen(); gantt.parse(data); diff --git a/edit-mode/index.html b/edit-mode/index.html index 5e88c06..096e879 100644 --- a/edit-mode/index.html +++ b/edit-mode/index.html @@ -383,7 +383,7 @@ QTY UOM Price - Planning Date + Will Be Used At Actions From 852a1cf90094bb7aee7f0ad3c6dc658dcc98156b Mon Sep 17 00:00:00 2001 From: wahyu Date: Wed, 30 Aug 2023 14:36:58 +0700 Subject: [PATCH 44/58] update reset form --- edit-mode/function/expenseResource.js | 1 + edit-mode/function/materialResource.js | 2 ++ 2 files changed, 3 insertions(+) diff --git a/edit-mode/function/expenseResource.js b/edit-mode/function/expenseResource.js index 2ab9f3f..b2ece13 100644 --- a/edit-mode/function/expenseResource.js +++ b/edit-mode/function/expenseResource.js @@ -4,6 +4,7 @@ function resetFormAssignexpense() { $('#select-expense').val(null).trigger("change"); $('#select-expense').find('option').remove(); $('#select-expense').val(""); + $('#uom-req-expense').val(null).trigger('change'); $('#form-assign-expense').trigger("reset"); $('#btn-assign-expense').html('Assign'); $('#btn-assign-expense').prop("disabled", false); diff --git a/edit-mode/function/materialResource.js b/edit-mode/function/materialResource.js index 9efa127..9635d96 100644 --- a/edit-mode/function/materialResource.js +++ b/edit-mode/function/materialResource.js @@ -4,6 +4,8 @@ function resetFormAssignMaterial() { $('#select-material').val(null).trigger("change"); $('#select-material').find('option').remove(); $('#select-material').val(""); + $('#uom-req-material').val(null).trigger('change'); + $('#select-material-integration').val(null).trigger('change'); $('#form-assign-material').trigger("reset"); $('#btn-assign-material').html('Assign'); $('#btn-assign-material').prop("disabled", false); From b9b28bb1f8c3d46345063aa99c27b27c89e836de Mon Sep 17 00:00:00 2001 From: wahyu Date: Wed, 20 Sep 2023 16:51:47 +0700 Subject: [PATCH 45/58] compare rendered data with response --- edit-mode/function/function.js | 26 ++++++++++++++++++++++++++ edit-mode/function/ganttSettings.js | 6 +++++- edit-mode/function/restActivityLink.js | 2 ++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index 7f07fef..15d5fcd 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -367,6 +367,32 @@ function setGanttOpen() { localStorage.setItem('ganttOpen', JSON.stringify(ganttOpen)); } +function compareData(data){ + expandTask(); + var allTasks = []; + var taskCount = gantt.getTaskCount(); + + for (var i = 0; i < taskCount; i++) { + var task = gantt.getTaskByIndex(i); + allTasks.push(task); + } + allTasks.forEach((task, index) => { + if (task.start_date != data.data[index].start_date) { + gantt.getTask(task.id).start_date = task.start_date; + } + if (task.end_date != data.data[index].end_date) { + gantt.getTask(task.id).end_date = task.end_date; + } + if (task.planned_start != data.data[index].planned_start) { + gantt.getTask(task.id).planned_start = task.planned_start; + } + if (task.planned_end != data.data[index].planned_end) { + gantt.getTask(task.id).planned_end = task.planned_end; + } + gantt.updateTask(task.id); + }); +} + function getGanttOpen() { let ganttOpen = localStorage.getItem('ganttOpen'); if (ganttOpen) { diff --git a/edit-mode/function/ganttSettings.js b/edit-mode/function/ganttSettings.js index 77db70c..a6276fe 100644 --- a/edit-mode/function/ganttSettings.js +++ b/edit-mode/function/ganttSettings.js @@ -350,7 +350,7 @@ function setBaseline() { }); } -async function setBaselineAPI() { +async function importUpdate() { expandTask(); var allTasks = []; var taskCount = gantt.getTaskCount(); @@ -381,6 +381,10 @@ async function setBaselineAPI() { text: "Update import gagal" }); }); +} + +async function setBaselineAPI() { + await importUpdate(); const res = await axiosInstance .get(ACTIVITY_SET_BASELINE_URL, HEADER) .then(res => res) diff --git a/edit-mode/function/restActivityLink.js b/edit-mode/function/restActivityLink.js index f484941..cc5ea22 100644 --- a/edit-mode/function/restActivityLink.js +++ b/edit-mode/function/restActivityLink.js @@ -40,6 +40,7 @@ gantt.ajax.get({ gantt.silent(function () { // updateLinksLag(data); gantt.parse(data); + compareData(data); getGanttOpen(); gantt.parse(data); earliest = getEarliestTaskDate(); @@ -93,6 +94,7 @@ function refresData(id) { gantt.silent(function () { // updateLinksLag(data); gantt.parse(data); + compareData(data); getGanttOpen(); gantt.parse(data); earliest = getEarliestTaskDate(); From 672f03983b1414b3e1b25a6de8d6b7ccd93823d9 Mon Sep 17 00:00:00 2001 From: wahyu Date: Fri, 29 Sep 2023 09:48:08 +0700 Subject: [PATCH 46/58] adjust early finish --- edit-mode/function/function.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index 15d5fcd..f55df91 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -377,6 +377,9 @@ function compareData(data){ allTasks.push(task); } allTasks.forEach((task, index) => { + if (task.progress > 0 && task.progress < 1) { + task.end_date = moment().format('YYYY-MM-DD HH:mm:ss'); + } if (task.start_date != data.data[index].start_date) { gantt.getTask(task.id).start_date = task.start_date; } From 7bf1731fb103d4275470d91b5d197f5ff45d7ef7 Mon Sep 17 00:00:00 2001 From: wahyu Date: Mon, 9 Oct 2023 10:43:58 +0700 Subject: [PATCH 47/58] fix date range --- edit-mode/function/ganttEvent.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/edit-mode/function/ganttEvent.js b/edit-mode/function/ganttEvent.js index 3aa4710..76f5914 100644 --- a/edit-mode/function/ganttEvent.js +++ b/edit-mode/function/ganttEvent.js @@ -10,6 +10,7 @@ gantt.attachEvent("onAfterTaskAdd", function (id, item) { gantt.updateTask(parentId); } } + updateRange(); }); gantt.attachEvent("onTaskRowClick", function (id, row) { @@ -40,7 +41,16 @@ gantt.ext.inlineEditors.attachEvent("onBeforeEditStart", function (state) { } return true }); - +function updateRange(){ + var range = gantt.getSubtaskDates(); + var chart = gantt.getState(); + if(range.start_date.valueOf() <= chart.min_date.valueOf() || range.end_date.valueOf() >= chart.max_date.valueOf()){ + gantt.config.start_date = gantt.date.add(range.start_date, -1, "day"); + gantt.config.end_date = gantt.date.add(range.end_date, 2, "day"); + gantt.render(); + } +} +gantt.attachEvent("onAfterTaskUpdate", updateRange); gantt.attachEvent("onBeforeTaskUpdate", function (id, new_item) { // format progress let progress = new_item.progress; @@ -183,4 +193,4 @@ gantt.attachEvent("onGanttScroll", function (left, top){ },20) } } -}); \ No newline at end of file +}); From 9e93e297d569d4a71e81e0d8bef713f27dbe4686 Mon Sep 17 00:00:00 2001 From: wahyu Date: Mon, 9 Oct 2023 14:28:47 +0700 Subject: [PATCH 48/58] separator, schedule, compare, hr date, overdue --- edit-mode/function/function.js | 22 ++++++++++++++++++++++ edit-mode/function/ganttConfig.js | 2 +- edit-mode/function/ganttSettings.js | 8 ++++++++ edit-mode/function/humanResource.js | 8 ++++++++ edit-mode/function/restActivityLink.js | 15 +++++++++++++-- edit-mode/index.html | 18 +++++++++++++++++- 6 files changed, 69 insertions(+), 4 deletions(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index f55df91..da0abd9 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -718,6 +718,7 @@ function batchUpdate(){ $("body").removeClass("loading"); localStorage.setItem('batchEntity', ''); $("#save-activity").hide(); + $("#save-separator").hide(); sendStorage(); refresData(); }).catch(function (error) { @@ -731,6 +732,27 @@ function batchUpdate(){ }); } +function updateSchedule() { + $("body").addClass("loading"); + return gantt.ajax.get({ + headers: { + "Content-Type": "application/json", + "Authorization": `Bearer ${token}` + }, + url: base_url + "activity/update-schedule/" + ganttId + }).then(function (response) { + $("body").removeClass("loading"); + refresData(); + }).catch(function (error) { + $("body").removeClass("loading") + gantt.alert({ + title: "Peringatan", + type: "alert-error", + text: "Update activity gagal" + }); + }); +} + $(window).on('beforeunload', function(event) { let batchEntity = localStorage.getItem('batchEntity'); sendStorage(); diff --git a/edit-mode/function/ganttConfig.js b/edit-mode/function/ganttConfig.js index 00d6155..6263a9a 100644 --- a/edit-mode/function/ganttConfig.js +++ b/edit-mode/function/ganttConfig.js @@ -661,7 +661,7 @@ gantt.templates.rightside_text = function (start, end, task) { end_date: end, task: task }, 'day'); - var text = "Overdue: " + overdue + " days"; + var text = "Overdue: " + overdue + " days"; return text; } } diff --git a/edit-mode/function/ganttSettings.js b/edit-mode/function/ganttSettings.js index a6276fe..e941046 100644 --- a/edit-mode/function/ganttSettings.js +++ b/edit-mode/function/ganttSettings.js @@ -143,6 +143,14 @@ $(document).ready(function () { setSynchronize(); }); + $("#compare-data").on('click', function (event) { + compareData(ganttTask); + }); + + $("#update-schedule").on('click', function (event) { + updateSchedule(); + }); + initHolidays(); initGanttSettings(); }); diff --git a/edit-mode/function/humanResource.js b/edit-mode/function/humanResource.js index 9a8708a..85058ac 100644 --- a/edit-mode/function/humanResource.js +++ b/edit-mode/function/humanResource.js @@ -7,6 +7,8 @@ function resetFormAssign() { $('#select-hr').val(null).trigger("change"); $('#select-hr').find('option').remove(); $('#select-hr').val(""); + $("#hr-start-date").val(""); + $("#hr-end-date").val(""); $("#hr_role").val(""); // $("#hide-form-hr").hide(); // $("#show-form-hr").show(); @@ -29,6 +31,8 @@ $(document).ready(function () { "columns": [ { data: 'user_name', name: 'user_name' }, { data: 'role_name', name: 'role_name' }, + { data: 'start_date', name: 'start_date' }, + { data: 'end_date', name: 'end_date' }, { data: 'action', name: 'action', @@ -158,6 +162,8 @@ $(document).ready(function () { // var formData = new FormData(this); let users = $("#select-hr").val(); + let start_date = $("#hr-start-date").val(); + let end_date = $("#hr-end-date").val(); let user_id = []; let user_role = []; users.map((item)=>{ @@ -175,6 +181,8 @@ $(document).ready(function () { let payload = { user_id: user_id, + start_date: start_date, + end_date: end_date, role_proyek_id: user_role, version_gantt_id: ganttId, proyek_id: proyekId, diff --git a/edit-mode/function/restActivityLink.js b/edit-mode/function/restActivityLink.js index cc5ea22..011b6b6 100644 --- a/edit-mode/function/restActivityLink.js +++ b/edit-mode/function/restActivityLink.js @@ -1,6 +1,7 @@ let geom = []; let latest; let earliest; +let ganttTask; $("body").addClass("loading"); gantt.ajax.get({ url: `${base_url}activity/${ganttId}/${proyekId}/get`, @@ -13,8 +14,10 @@ gantt.ajax.get({ 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; @@ -39,8 +42,8 @@ gantt.ajax.get({ }); gantt.silent(function () { // updateLinksLag(data); + ganttTask = data; gantt.parse(data); - compareData(data); getGanttOpen(); gantt.parse(data); earliest = getEarliestTaskDate(); @@ -75,8 +78,10 @@ function refresData(id) { 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 = {}; @@ -93,8 +98,8 @@ function refresData(id) { }); gantt.silent(function () { // updateLinksLag(data); + ganttTask = data; gantt.parse(data); - compareData(data); getGanttOpen(); gantt.parse(data); earliest = getEarliestTaskDate(); @@ -176,6 +181,11 @@ var dp = gantt.createDataProcessor(function (entity, action, data, id) { // 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", @@ -215,6 +225,7 @@ var dp = gantt.createDataProcessor(function (entity, action, data, id) { } localStorage.setItem('batchEntity', JSON.stringify(toBeSet)); $("#save-activity").show(); + $("#save-separator").show(); sendStorage(); // $("body").addClass("loading"); // return gantt.ajax.put({ diff --git a/edit-mode/index.html b/edit-mode/index.html index 096e879..fc78a60 100644 --- a/edit-mode/index.html +++ b/edit-mode/index.html @@ -89,16 +89,22 @@ | - | + | | + + | | | + + | | @@ -136,6 +142,14 @@
+
+ + +
+
+ + +
@@ -156,6 +170,8 @@ User Role + Start Date + End Date Actions From fc4413128d5872442095f40433e28530fad6ccca Mon Sep 17 00:00:00 2001 From: wahyu Date: Tue, 10 Oct 2023 11:09:31 +0700 Subject: [PATCH 49/58] forcing report date --- edit-mode/function/reportActivity.js | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/edit-mode/function/reportActivity.js b/edit-mode/function/reportActivity.js index 89d9b98..1d64488 100644 --- a/edit-mode/function/reportActivity.js +++ b/edit-mode/function/reportActivity.js @@ -430,8 +430,11 @@ $(document).ready(function () { } } - async function submitRaMaterial(formData, id) { + async function submitRaMaterial(formData, force) { try { + if (force) { + formData.append("force", force); + } const qty_actual = $("#volume_pekerjaan_material").val(); formData.set('qty', qty_actual); const result = await axiosInstance @@ -460,9 +463,22 @@ $(document).ready(function () { throw new Error("Image upload failed."); } } catch (error) { - resetFormAddRaMaterial(); $("body").removeClass("loading"); - gantt.alert("Add report activity material failed."); + if (error.response.status == 400) { + gantt.confirm({ + text: error.response.data.message, + ok: "Add", + cancel: "Cancel", + callback: function (result) { + if (result) { + submitRaMaterial(formData, true); + } + } + }); + } else { + resetFormAddRaMaterial(); + gantt.alert("Add report activity material failed."); + } } } From f93b570c03554918f3f5eca5eb4c780540eb41e8 Mon Sep 17 00:00:00 2001 From: wahyu Date: Tue, 10 Oct 2023 13:13:02 +0700 Subject: [PATCH 50/58] fix compare data --- edit-mode/function/function.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index da0abd9..bc3426d 100644 --- a/edit-mode/function/function.js +++ b/edit-mode/function/function.js @@ -378,7 +378,8 @@ function compareData(data){ } allTasks.forEach((task, index) => { if (task.progress > 0 && task.progress < 1) { - task.end_date = moment().format('YYYY-MM-DD HH:mm:ss'); + // task.end_date = moment().format('YYYY-MM-DD HH:mm:ss'); + // task.end_date = new Date(); } if (task.start_date != data.data[index].start_date) { gantt.getTask(task.id).start_date = task.start_date; From f66ded0927004cc232cb9a7608b912a8046ec9d1 Mon Sep 17 00:00:00 2001 From: wahyu Date: Wed, 11 Oct 2023 09:25:58 +0700 Subject: [PATCH 51/58] fix hr date --- edit-mode/function/ganttConfig.js | 2 ++ edit-mode/function/ganttEvent.js | 2 ++ edit-mode/function/humanResource.js | 15 +++++++++++++++ edit-mode/index.html | 4 ++-- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/edit-mode/function/ganttConfig.js b/edit-mode/function/ganttConfig.js index 6263a9a..0c07b6a 100644 --- a/edit-mode/function/ganttConfig.js +++ b/edit-mode/function/ganttConfig.js @@ -10,6 +10,8 @@ let userToVersionGanttId = 0 let activityId = 0; let actionHappen = false; let activityName = ""; +let activityEarlyStart; +let activityEarlyFinish; let token = getUrlParameter("token"); let forceDurationUpdateTriggered = false; let editEndDateDurationTriggered = false; diff --git a/edit-mode/function/ganttEvent.js b/edit-mode/function/ganttEvent.js index 76f5914..47c6247 100644 --- a/edit-mode/function/ganttEvent.js +++ b/edit-mode/function/ganttEvent.js @@ -17,6 +17,8 @@ gantt.attachEvent("onTaskRowClick", function (id, row) { activityId = id; var activity = gantt.getTaskBy("id", id); activityName = activity[0]?.name; + activityEarlyStart = new Date(activity[0]?.start_date); + activityEarlyFinish = new Date(activity[0]?.end_date); }); gantt.ext.inlineEditors.attachEvent("onBeforeEditStart", function (state) { diff --git a/edit-mode/function/humanResource.js b/edit-mode/function/humanResource.js index 85058ac..d297fb7 100644 --- a/edit-mode/function/humanResource.js +++ b/edit-mode/function/humanResource.js @@ -153,6 +153,21 @@ $(document).ready(function () { }); + $("#hr-start-date").on('change', (e) => { + let start_date = new Date($("#hr-start-date").val()); + if (start_date < activityEarlyStart || start_date > activityEarlyFinish) { + gantt.alert("Start date should be inside activity date range !"); + $("#hr-start-date").val(""); + } + }) + + $("#hr-end-date").on('change', (e) => { + let end_date = new Date($("#hr-end-date").val()); + if (end_date < activityEarlyStart || end_date > activityEarlyFinish) { + gantt.alert("End date should be inside activity date range !"); + $("#hr-end-date").val(""); + } + }) $("#form-assign-hr").on('submit', function (e) { e.preventDefault(); diff --git a/edit-mode/index.html b/edit-mode/index.html index fc78a60..67213d6 100644 --- a/edit-mode/index.html +++ b/edit-mode/index.html @@ -138,7 +138,7 @@