diff --git a/app/src/plugins/tm@modal/task/_components/_components/a-task-spent-time.vue b/app/src/plugins/tm@modal/task/_components/_components/a-task-spent-time.vue index 2f94e47..34726a6 100644 --- a/app/src/plugins/tm@modal/task/_components/_components/a-task-spent-time.vue +++ b/app/src/plugins/tm@modal/task/_components/_components/a-task-spent-time.vue @@ -1,170 +1,244 @@ \ No newline at end of file + diff --git a/app/src/plugins/tm@modal/task/_components/_components/a-task-timeblocks.vue b/app/src/plugins/tm@modal/task/_components/_components/a-task-timeblocks.vue index c8553e8..f41da5e 100644 --- a/app/src/plugins/tm@modal/task/_components/_components/a-task-timeblocks.vue +++ b/app/src/plugins/tm@modal/task/_components/_components/a-task-timeblocks.vue @@ -41,10 +41,8 @@ class="task-badge rounded-pill" :class="{ 'strike-through': timeblock.is_finished }" > - {{ tmUtils.formatTimeblockDateTime(timeblock) }} - - {{ - timeblock.ends_at_time || tmUtils.formatDateTime(timeblock.end) - }} + {{ formatTimeblockStart(timeblock) }} - + {{ formatTimeblockEnd(timeblock) }}

{ - if (originalTimeblock.id == newTimeblock.id) return newTimeblock; + if (originalTimeblock.id == convertedTimeblock.id) + return convertedTimeblock; return originalTimeblock; }); @@ -365,9 +401,36 @@ export default { return timesheet; }); + // Convert timeblocks from internal format to BE format + const timeblocks = (data.timeblocks || []) + .filter((timeblock) => { + // Filter timeblocks that have either old format (date) or new format (start) + return timeblock.date || timeblock.start; + }) + .map((timeblock) => { + // If already in BE format (has start field), return as is + if (timeblock.start && !timeblock.date) { + return { + id: timeblock.id || null, + start: timeblock.start, + end: timeblock.end, + is_finished: timeblock.is_finished || 0, + }; + } + + // Convert from internal format to BE format + const dateStr = moment(timeblock.date).format('YYYY-MM-DD'); + return { + id: timeblock.id || null, + start: `${dateStr} ${timeblock.starts_at_time}:00`, + end: `${dateStr} ${timeblock.ends_at_time}:00`, + is_finished: timeblock.is_finished || 0, + }; + }); + const { subtask } = await this.$axios.put_auth( `v1/subtasks/${data.id}`, - { ...data, timesheets }, + { ...data, timesheets, timeblocks }, ); this.closeModal(); diff --git a/app/src/plugins/tm@modal/task/z-complete-task-modal.vue b/app/src/plugins/tm@modal/task/z-complete-task-modal.vue index aeca918..b8fefa4 100644 --- a/app/src/plugins/tm@modal/task/z-complete-task-modal.vue +++ b/app/src/plugins/tm@modal/task/z-complete-task-modal.vue @@ -1,63 +1,114 @@ \ No newline at end of file + const tempSubtask = { + ...this.subtask, + is_finished: this.subtask.is_finished ? 0 : 1, + timesheets, + timeblocks, + }; + + const { subtask } = await this.$axios.put_auth( + `v1/subtasks/${tempSubtask.id}`, + tempSubtask, + ); + + this.visible = false; + this.$emit('on-subtask-edited', subtask); + } catch (error) { + this.$toast.error(this.$parseError(error)); + + if (process.env.NODE_ENV === 'development') + console.log('[z-complete-task-modal.vue] Error: ', error); + } + }, + + closeModal() { + this.visible = false; + }, + }, +}; + diff --git a/app/src/plugins/tm@modal/task/z-delete-timeblock-modal.vue b/app/src/plugins/tm@modal/task/z-delete-timeblock-modal.vue index 3e5e01f..32f7505 100644 --- a/app/src/plugins/tm@modal/task/z-delete-timeblock-modal.vue +++ b/app/src/plugins/tm@modal/task/z-delete-timeblock-modal.vue @@ -1,86 +1,139 @@ \ No newline at end of file + diff --git a/app/src/plugins/tm@modal/task/z-task-add-time-modal.vue b/app/src/plugins/tm@modal/task/z-task-add-time-modal.vue index 3939985..c0e676a 100644 --- a/app/src/plugins/tm@modal/task/z-task-add-time-modal.vue +++ b/app/src/plugins/tm@modal/task/z-task-add-time-modal.vue @@ -1,95 +1,151 @@ \ No newline at end of file + try { + const { subtask } = await this.$axios.put_auth( + `v1/subtasks/${this.subtask.id}`, + payload, + ); + + this.closeModal(); + this.$events.emit('on-subtask-edited', subtask); + } catch (error) { + this.$toast.error(error.message || error); + + if (process.env.NODE_ENV === 'development') + console.log('[z-task-add-time-modal.vue] Error: ', error); + } + }, + + closeModal() { + this.visible = false; + this.v$.$reset(); + }, + }, +}; + diff --git a/app/src/plugins/tm@modal/task/z-task-modal.vue b/app/src/plugins/tm@modal/task/z-task-modal.vue index 8ac4b3a..6cac85c 100644 --- a/app/src/plugins/tm@modal/task/z-task-modal.vue +++ b/app/src/plugins/tm@modal/task/z-task-modal.vue @@ -248,7 +248,7 @@ :on-input-focus="onInputFocus" :on-date-open="onDateOpen" /> -
+
@@ -466,10 +466,36 @@ export default { data.deadline = splittedDeadline[0]; data._deadline_time = splittedDeadline[1]; + + // Convert BE format timeblocks to internal format + const convertedTimeblocks = []; + if (data.timeblocks && data.timeblocks.length > 0) { + data.timeblocks.forEach((timeblock) => { + // If already in internal format, keep as is + if (timeblock.date) { + convertedTimeblocks.push(timeblock); + return; + } + + // Convert from BE format to internal format + if (timeblock.start && timeblock.end) { + const startMoment = moment(timeblock.start, 'YYYY-MM-DD HH:mm:ss'); + const endMoment = moment(timeblock.end, 'YYYY-MM-DD HH:mm:ss'); + convertedTimeblocks.push({ + id: timeblock.id || null, + date: startMoment.toDate(), + starts_at_time: startMoment.format('HH:mm'), + ends_at_time: endMoment.format('HH:mm'), + is_finished: timeblock.is_finished || 0, + }); + } + }); + } + data.timeblocks = convertedTimeblocks; + this.subtask = this._enrichTask(data); // TODO: Remove? riesil som neodstranovanie jedineho zanamu v trvani a odpracovanom case - console.log('2', this.subtask); this.$forceUpdate(); }); diff --git a/app/src/plugins/tm@modal/task/z-unable-to-complete-task-modal.vue b/app/src/plugins/tm@modal/task/z-unable-to-complete-task-modal.vue index a8cbb0f..88b7a33 100644 --- a/app/src/plugins/tm@modal/task/z-unable-to-complete-task-modal.vue +++ b/app/src/plugins/tm@modal/task/z-unable-to-complete-task-modal.vue @@ -1,159 +1,226 @@ \ No newline at end of file + diff --git a/app/src/plugins/tm@overview/tasks-ongoing/_components/a-ongoing-table.vue b/app/src/plugins/tm@overview/tasks-ongoing/_components/a-ongoing-table.vue index 9206f52..94331eb 100644 --- a/app/src/plugins/tm@overview/tasks-ongoing/_components/a-ongoing-table.vue +++ b/app/src/plugins/tm@overview/tasks-ongoing/_components/a-ongoing-table.vue @@ -1,154 +1,226 @@