diff --git a/edit-mode/function/function.js b/edit-mode/function/function.js index e60d975..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; @@ -339,7 +340,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 +514,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`, @@ -676,6 +677,7 @@ function batchUpdate(){ }).then(function (response) { $("body").removeClass("loading"); localStorage.setItem('batchEntity', ''); + refresData(); }).catch(function (error) { $("body").removeClass("loading") diff --git a/edit-mode/function/reportActivity.js b/edit-mode/function/reportActivity.js index 1d0ae69..9a98afb 100644 --- a/edit-mode/function/reportActivity.js +++ b/edit-mode/function/reportActivity.js @@ -425,20 +425,26 @@ $(document).ready(function () { .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); + 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) { - 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."); } } catch (error) { resetFormAddRaMaterial(); @@ -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 !" }); } }); }); 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/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; } 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){