From 879a93b896d3df03e974eb0c535de87ae7d06a03 Mon Sep 17 00:00:00 2001 From: Wahyu Ramadhan Date: Mon, 24 Jul 2023 15:26:20 +0700 Subject: [PATCH] Fix edit duration on holiday --- edit-mode/function/ganttConfig.js | 10 +++++----- edit-mode/function/ganttEvent.js | 30 ++++++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/edit-mode/function/ganttConfig.js b/edit-mode/function/ganttConfig.js index 07769f2..ec68930 100644 --- a/edit-mode/function/ganttConfig.js +++ b/edit-mode/function/ganttConfig.js @@ -11,8 +11,8 @@ let activityId = 0; let actionHappen = false; let activityName = ""; let token = getUrlParameter("token"); -let editDurationTriggered = false; -let editEndDateTriggered = false; +let forceDurationUpdateTriggered = false; +let editEndDateDurationTriggered = false; if (!token || token == "") { token = `eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvYXBpLWl1Lm9zcHJvLmlkXC9hcGlcL2xvZ2luIiwiaWF0IjoxNjQ2ODA3OTA4LCJleHAiOjE2NDY4OTQzMDgsIm5iZiI6MTY0NjgwNzkwOCwianRpIjoiNmdtcEx3cjlob1JFZ0hSNSIsInN1YiI6MSwicHJ2IjoiMjNiZDVjODk0OWY2MDBhZGIzOWU3MDFjNDAwODcyZGI3YTU5NzZmNyJ9.1xB2rvTJ6Edf7l_8jRPOmoMYnf8f59Rd8jJghJ39xps`; } @@ -145,7 +145,7 @@ var dateEditor = gantt.config.editor_types.date; gantt.config.editor_types.end_date = gantt.mixin({ get_value: function (id, column, node) { var selectedValue = dateEditor.get_value.apply(this, [id, column, node]); - editEndDateTriggered = true; + editEndDateDurationTriggered = true; return selectedValue; }, }, dateEditor); @@ -154,9 +154,9 @@ gantt.config.editor_types.duration = gantt.mixin({ get_value: function (id, column, node) { var old_value = gantt.getTask(id); var modifiedValue = durationEditor.get_value.apply(this, [id, column, node]); - editEndDateTriggered = true; + editEndDateDurationTriggered = true; if (old_value.duration == modifiedValue - 1) { - editDurationTriggered = true; + forceDurationUpdateTriggered = true; return modifiedValue; } return modifiedValue - 1; diff --git a/edit-mode/function/ganttEvent.js b/edit-mode/function/ganttEvent.js index 011b413..d2567c0 100644 --- a/edit-mode/function/ganttEvent.js +++ b/edit-mode/function/ganttEvent.js @@ -56,23 +56,45 @@ gantt.attachEvent("onBeforeTaskUpdate", function (id, new_item) { let link = task.$target; // link.length > 0 -> successor new_item['progress'] = progress; - if (editEndDateTriggered) { + if (editEndDateDurationTriggered) { + if(link.length == 0){ + new_item['start_date'].setHours(0,0,0); + } new_item['duration'] = new_item['duration'] + (link.length == 0 ? 0 : 1); new_item['end_date'] = gantt.calculateEndDate({ start_date: new_item['start_date'], duration: new_item['duration'] }) new_item['end_date'].setHours(23, 59, 59); - if (editDurationTriggered) { + if (forceDurationUpdateTriggered) { let tempDuration = new_item['duration'] - 1; new_item['end_date'] = gantt.calculateEndDate({ start_date: new_item['start_date'], duration: tempDuration }) new_item['end_date'].setHours(23, 59, 59); - editDurationTriggered = false; + } + + const dateToCheck = new Date(new_item['end_date']); + if (gantt.isWorkTime({ date: dateToCheck, hours: false })) { + } else { + if (link.length == 0) { + let duration = gantt.calculateDuration({ + start_date: new_item['start_date'], + end_date: new_item['end_date'] + }) + let endDate = gantt.calculateEndDate({ + start_date: new_item['start_date'], + duration: duration + 1 + }) + endDate.setDate(endDate.getDate() - 1) + endDate.setHours(23,59,59); + new_item['end_date'] = endDate + } } - editEndDateTriggered = false; + + forceDurationUpdateTriggered = false; + editEndDateDurationTriggered = false; } });