From e4abc1fc36770f113898e73995cf8a60c5f2dbd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Glasn=C3=A1k?= Date: Wed, 22 Feb 2023 14:00:12 +0100 Subject: [PATCH 1/5] [Tasks] Planned hours --- .../tasks/_utils/timeline.utils.ts | 6 ++++++ app/src/plugins/tm@dashboard/tasks/tasks.vue | 19 ++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/app/src/plugins/tm@dashboard/tasks/_utils/timeline.utils.ts b/app/src/plugins/tm@dashboard/tasks/_utils/timeline.utils.ts index 8f10b51..b4ec8e0 100644 --- a/app/src/plugins/tm@dashboard/tasks/_utils/timeline.utils.ts +++ b/app/src/plugins/tm@dashboard/tasks/_utils/timeline.utils.ts @@ -80,5 +80,11 @@ export default { _getSplitFromDate(date, start) { return differenceInCalendarDays(new Date(date), new Date(start)) * (-1) + 1 + }, + + _getDifferenceInHours(date1, date2) { + let diff =(date1.getTime() - date2.getTime()) / 1000; + diff /= (60 * 60) + return Math.abs(Math.round(diff)) } } \ No newline at end of file diff --git a/app/src/plugins/tm@dashboard/tasks/tasks.vue b/app/src/plugins/tm@dashboard/tasks/tasks.vue index d4170e4..198db94 100644 --- a/app/src/plugins/tm@dashboard/tasks/tasks.vue +++ b/app/src/plugins/tm@dashboard/tasks/tasks.vue @@ -12,6 +12,7 @@ import { addDays, subDays } from 'date-fns' import { mapGetters } from 'vuex' import moment from 'moment' import timelineUtils from './_utils/timeline.utils' +import tmUtils from '@/plugins/tm@_utils/tm.utils' export default { components: { @@ -33,13 +34,25 @@ export default { computed: { splitDays() { const days = [] + const workingHours = {} + const capacityPerDay = this.$store.getters['auth/user'].work_end - this.$store.getters['auth/user'].work_start - for (let i = 0; i < 7; i++) { + this.timelineData.tasks.forEach(task => { + if (!workingHours[task.split]) + workingHours[task.split] = 0 + + if (task.nonWorking) + return + + workingHours[task.split] += timelineUtils._getDifferenceInHours(task.end, task.start) + }) + + for (let i = 1; i <= 7; i++) { days.push({ - id: i + 1, + id: i , name: this.filter.employee.name + " " + this.filter.employee.surname, initials: this.filter.employee.name.charAt(0).toUpperCase() + this.filter.employee.surname.charAt(0).toUpperCase(), - unscheduledTime: this.timelineData.unscheduledTime, + unscheduledTime: capacityPerDay - workingHours[i], date: addDays(this.filter.start, i), isWeekend: timelineUtils.isWeekend(addDays(this.filter.start, i)) }) From c3e7e70da6b7f653d9b5c7dfaf5dc48cab690bee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Glasn=C3=A1k?= Date: Wed, 22 Feb 2023 14:43:44 +0100 Subject: [PATCH 2/5] [Teams] Calendar fix --- .../tm@dashboard/_components/z-timeline.vue | 10 ++-- .../tasks/_utils/timeline.utils.ts | 2 - app/src/plugins/tm@dashboard/tasks/tasks.vue | 9 ++-- app/src/plugins/tm@dashboard/teams/teams.vue | 53 +++++++++++-------- .../_components/a-task-timeblocks.vue | 2 +- app/src/plugins/w/auth/auth.store.ts | 4 +- 6 files changed, 42 insertions(+), 38 deletions(-) diff --git a/app/src/plugins/tm@dashboard/_components/z-timeline.vue b/app/src/plugins/tm@dashboard/_components/z-timeline.vue index c9fc2b3..45b31ae 100644 --- a/app/src/plugins/tm@dashboard/_components/z-timeline.vue +++ b/app/src/plugins/tm@dashboard/_components/z-timeline.vue @@ -30,7 +30,7 @@

{{ getHeadingDate(split.date) }}

-

{{ split.firstName }}

+

{{ split.name }}

@@ -42,7 +42,7 @@

{{ split.initials }}

-

{{split.name}}

+

{{split.fullname}}

{{split.unscheduledTime}} h

@@ -64,7 +64,7 @@

{{ event.subtask.master_task?.name || event.subtask.master_task }}

- {{ getUserInitials(event) }} + {{ event.initials }}
{{ event.start.toLocaleDateString('sk-SK') }}
@@ -189,10 +189,6 @@ export default { return date.toLocaleDateString('sk-SK') }, - getUserInitials(event) { - return event.name.charAt(0).toUpperCase() + event.surname.charAt(0).toUpperCase() - }, - getEventLenght(event) { return event.end.getTime() - event.start.getTime() }, diff --git a/app/src/plugins/tm@dashboard/tasks/_utils/timeline.utils.ts b/app/src/plugins/tm@dashboard/tasks/_utils/timeline.utils.ts index b4ec8e0..8f5e220 100644 --- a/app/src/plugins/tm@dashboard/tasks/_utils/timeline.utils.ts +++ b/app/src/plugins/tm@dashboard/tasks/_utils/timeline.utils.ts @@ -40,8 +40,6 @@ export default { start: addDays(new Date(timeblock.start), diffInDays), end: addDays(new Date(timeblock.end), diffInDays), master_task: subtask.master_task, - name: employee.name, - surname: employee.surname, date: new Date(timeblock.start), isWeekend: this.isWeekend(timeblock.start), initials: employee.name.charAt(0).toUpperCase() + employee.surname.charAt(0).toUpperCase(), diff --git a/app/src/plugins/tm@dashboard/tasks/tasks.vue b/app/src/plugins/tm@dashboard/tasks/tasks.vue index 198db94..f1b4ca2 100644 --- a/app/src/plugins/tm@dashboard/tasks/tasks.vue +++ b/app/src/plugins/tm@dashboard/tasks/tasks.vue @@ -47,12 +47,12 @@ export default { workingHours[task.split] += timelineUtils._getDifferenceInHours(task.end, task.start) }) - for (let i = 1; i <= 7; i++) { + for (let i = 0; i < 7; i++) { days.push({ - id: i , - name: this.filter.employee.name + " " + this.filter.employee.surname, + id: i + 1, + fullname: `${this.filter.employee.name} ${this.filter.employee.surname}`, initials: this.filter.employee.name.charAt(0).toUpperCase() + this.filter.employee.surname.charAt(0).toUpperCase(), - unscheduledTime: capacityPerDay - workingHours[i], + unscheduledTime: capacityPerDay - workingHours[i + 1], date: addDays(this.filter.start, i), isWeekend: timelineUtils.isWeekend(addDays(this.filter.start, i)) }) @@ -108,6 +108,7 @@ export default { try { const { subtasks } = await this.$axios.get_auth(`v1/subtasks?${queryParameters}`) this.config.scrollHour = this.filter.employee.work_start - 1 + this.config.date = this.filter.start this.subtasks = subtasks } catch (error) { this.$toast.error('Nepodarilo sa nacitat data!') diff --git a/app/src/plugins/tm@dashboard/teams/teams.vue b/app/src/plugins/tm@dashboard/teams/teams.vue index 6d2e78e..f53c7d4 100644 --- a/app/src/plugins/tm@dashboard/teams/teams.vue +++ b/app/src/plugins/tm@dashboard/teams/teams.vue @@ -10,8 +10,9 @@ import ATeamFilter from './_components/a-team-filter.vue' import ZTimeline from '@/plugins/tm@dashboard/_components/z-timeline.vue' -import { setHours, setMinutes } from 'date-fns' +import { setHours, setMinutes, addDays } from 'date-fns' import moment from 'moment' +import timelineUtils from '../tasks/_utils/timeline.utils' export default { components: { @@ -35,30 +36,37 @@ export default { const days = [] this.filter.team.employees.forEach((employee, index) => { + let workingHours = 0 + const capacityPerDay = employee.work_end - employee.work_start + + this.timelineData.tasks.forEach(task => { + if (task?.subtask?.employee_id == employee.id) + workingHours += timelineUtils._getDifferenceInHours(task.end, task.start) + }) + days.push({ - id: index, - name: `${employee.name} ${employee.surname}`, + id: index + 1, + name: employee.name, + fullname: `${employee.name} ${employee.surname}`, initials: employee.name.charAt(0).toUpperCase() + employee.surname.charAt(0).toUpperCase(), - unscheduledTime: 111 + unscheduledTime: capacityPerDay - workingHours }) }) return days }, - unscheduledTime() { - return 222 - // if (!this.subtasks) return 0 - - // return timelineUtils.getUnscheduledTime(this.subtasks) - }, - - timelineData() { if (!this.subtasks) return - console.log([...this._generateNonWorking(), ...this._generateTasks()]) + // let unscheduledTime = 0 + // const tasks = [...this._generateNonWorking(), ...this._generateTasks()] + + // tasks.forEach(task => { + // if (!task.nonWorking) + // workingHours += timelineUtils._getDifferenceInHours(task.end, task.start) + // }) return { unscheduledTime: 333, @@ -79,7 +87,7 @@ export default { this.filter.team.employees.forEach((e, index) => { if (e.id == subtask.employee_id) { - split = index + split = index + 1 employee = e } }) @@ -93,11 +101,11 @@ export default { start: new Date(timeblock.start), end: new Date(timeblock.end), master_task: subtask.master_task, - name: employee.name, - surname: employee.surname, + name: employee?.name, + surname: employee?.surname, // date: new Date(timeblock.start), isWeekend: moment(timeblock.start).day() % 6 == 0, - initials: employee.name.charAt(0).toUpperCase() + employee.surname.charAt(0).toUpperCase(), + initials: employee?.name?.charAt(0)?.toUpperCase() + employee?.surname?.charAt(0)?.toUpperCase(), split: split, project_code: subtask.project_code, subtask: subtask, @@ -111,9 +119,10 @@ export default { }, _generateNonWorking() { - const tasks = [] - let earliestStartHour = null - const date = new Date(this.filter.start) + const tasks = [] + const date = new Date(this.filter.start) + let earliestStartHour = null + this.config.date = date this.filter.team.employees.forEach((employee, index) => { if (!earliestStartHour || employee.work_start < earliestStartHour) @@ -123,7 +132,7 @@ export default { title: "Non working hours", start: setMinutes(setHours(date, 0), 0), end: setMinutes(setHours(date, employee.work_start), 0), - split: index, + split: index + 1, nonWorking: true, draggable: false }) @@ -132,7 +141,7 @@ export default { title: "Non working hours", start: setMinutes(setHours(date, employee.work_end), 0), end: setMinutes(setHours(date, 23), 59), - split: index, + split: index + 1, nonWorking: true, draggable: false }) 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 7e475c8..eaca7f9 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 @@ -28,7 +28,7 @@

Pridať dátum

- +
diff --git a/app/src/plugins/w/auth/auth.store.ts b/app/src/plugins/w/auth/auth.store.ts index f53cf88..a144723 100644 --- a/app/src/plugins/w/auth/auth.store.ts +++ b/app/src/plugins/w/auth/auth.store.ts @@ -1,5 +1,5 @@ import axios from '@/plugins/w/axios/models/axios' -import './refreshExpired' +// import './refreshExpired' export default { namespaced: true, @@ -35,7 +35,7 @@ export default { actions: { login({commit}: {commit: any}, credentials: any) { return new Promise((resolve, reject) => { - axios.post('v1/tokens/create', credentials) + axios.post('v1/tokens/create', {data: credentials}) .then((response: any) => { console.log(response) const token = response.token From ef6369714b62779a648a2e741408817b369cedbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Glasn=C3=A1k?= Date: Wed, 22 Feb 2023 16:44:20 +0100 Subject: [PATCH 3/5] [Task] Delete fix --- .../_img => app/_img/icons}/bin.svg | 0 .../_img => app/_img/icons}/checkmark.svg | 0 app/src/plugins/app/_img/icons/eye.svg | 1 + .../home-icon.svg => app/_img/icons/home.svg} | 0 .../_img => app/_img/icons}/icon-next.svg | 0 .../_img => app/_img/icons}/icon-prev.svg | 0 .../_img => app/_img/icons}/pencil.svg | 0 .../search-icon.svg => _img/icons/search.svg} | 0 .../app/{_layout => }/_img/jandl-logo.svg | 0 .../app/_layout/app/_components/a-header.vue | 2 +- .../_layout/app/_components/a-sidemenu.vue | 2 +- .../app/_layout/auth/_components/a-header.vue | 2 +- app/src/plugins/app/_theme/global.sass | 7 +++++ .../_components/a-seach-result-task.vue | 6 ++-- .../_components/a-search-result-team.vue | 4 +-- app/src/plugins/tm@_store/store/index.ts | 12 ++++---- .../tm@dashboard/_components/z-timeline.vue | 17 ++++++----- .../tasks/_components/a-tasks-filter.vue | 4 +-- .../teams/_components/a-team-filter.vue | 4 +-- .../master-task/_components/a-tasks-table.vue | 28 +++++-------------- .../z-delete-master-task-modal.vue | 2 +- .../master-task/z-master-task-modal.vue | 4 +-- .../_components/a-mastertask-name.vue | 21 +++++++++++++- .../_components/a-task-spent-time.vue | 2 +- .../task/_components/z-task-readonly-info.vue | 4 ++- .../tm@modal/task/z-complete-task-modal.vue | 2 +- .../tm@modal/task/z-delete-task-modal.vue | 2 +- .../plugins/tm@modal/task/z-task-modal.vue | 13 ++++++--- .../plugins/tm@overview/_img/pencil-icon.svg | 4 --- .../plugins/tm@overview/_img/trash-icon.svg | 7 ----- .../_components/a-ongoing-table.vue | 7 +++-- .../tasks-ongoing/tasks-ongoing.vue | 2 +- .../_components/a-unscheduled-table.vue | 7 +++-- .../tasks-unscheduled/tasks-unscheduled.vue | 2 +- .../teams/_components/a-teams-table.vue | 4 +-- 35 files changed, 93 insertions(+), 79 deletions(-) rename app/src/plugins/{tm@dashboard/_components/_img => app/_img/icons}/bin.svg (100%) rename app/src/plugins/{tm@dashboard/_components/_img => app/_img/icons}/checkmark.svg (100%) create mode 100644 app/src/plugins/app/_img/icons/eye.svg rename app/src/plugins/{tm@dashboard/_components/_img/home-icon.svg => app/_img/icons/home.svg} (100%) rename app/src/plugins/{tm@dashboard/_components/_img => app/_img/icons}/icon-next.svg (100%) rename app/src/plugins/{tm@dashboard/_components/_img => app/_img/icons}/icon-prev.svg (100%) rename app/src/plugins/{tm@dashboard/_components/_img => app/_img/icons}/pencil.svg (100%) rename app/src/plugins/app/{_layout/app/_img/search-icon.svg => _img/icons/search.svg} (100%) rename app/src/plugins/app/{_layout => }/_img/jandl-logo.svg (100%) delete mode 100644 app/src/plugins/tm@overview/_img/pencil-icon.svg delete mode 100644 app/src/plugins/tm@overview/_img/trash-icon.svg diff --git a/app/src/plugins/tm@dashboard/_components/_img/bin.svg b/app/src/plugins/app/_img/icons/bin.svg similarity index 100% rename from app/src/plugins/tm@dashboard/_components/_img/bin.svg rename to app/src/plugins/app/_img/icons/bin.svg diff --git a/app/src/plugins/tm@dashboard/_components/_img/checkmark.svg b/app/src/plugins/app/_img/icons/checkmark.svg similarity index 100% rename from app/src/plugins/tm@dashboard/_components/_img/checkmark.svg rename to app/src/plugins/app/_img/icons/checkmark.svg diff --git a/app/src/plugins/app/_img/icons/eye.svg b/app/src/plugins/app/_img/icons/eye.svg new file mode 100644 index 0000000..e823055 --- /dev/null +++ b/app/src/plugins/app/_img/icons/eye.svg @@ -0,0 +1 @@ +Eye \ No newline at end of file diff --git a/app/src/plugins/tm@dashboard/_components/_img/home-icon.svg b/app/src/plugins/app/_img/icons/home.svg similarity index 100% rename from app/src/plugins/tm@dashboard/_components/_img/home-icon.svg rename to app/src/plugins/app/_img/icons/home.svg diff --git a/app/src/plugins/tm@dashboard/_components/_img/icon-next.svg b/app/src/plugins/app/_img/icons/icon-next.svg similarity index 100% rename from app/src/plugins/tm@dashboard/_components/_img/icon-next.svg rename to app/src/plugins/app/_img/icons/icon-next.svg diff --git a/app/src/plugins/tm@dashboard/_components/_img/icon-prev.svg b/app/src/plugins/app/_img/icons/icon-prev.svg similarity index 100% rename from app/src/plugins/tm@dashboard/_components/_img/icon-prev.svg rename to app/src/plugins/app/_img/icons/icon-prev.svg diff --git a/app/src/plugins/tm@dashboard/_components/_img/pencil.svg b/app/src/plugins/app/_img/icons/pencil.svg similarity index 100% rename from app/src/plugins/tm@dashboard/_components/_img/pencil.svg rename to app/src/plugins/app/_img/icons/pencil.svg diff --git a/app/src/plugins/app/_layout/app/_img/search-icon.svg b/app/src/plugins/app/_img/icons/search.svg similarity index 100% rename from app/src/plugins/app/_layout/app/_img/search-icon.svg rename to app/src/plugins/app/_img/icons/search.svg diff --git a/app/src/plugins/app/_layout/_img/jandl-logo.svg b/app/src/plugins/app/_img/jandl-logo.svg similarity index 100% rename from app/src/plugins/app/_layout/_img/jandl-logo.svg rename to app/src/plugins/app/_img/jandl-logo.svg diff --git a/app/src/plugins/app/_layout/app/_components/a-header.vue b/app/src/plugins/app/_layout/app/_components/a-header.vue index c19aa29..7bc2742 100644 --- a/app/src/plugins/app/_layout/app/_components/a-header.vue +++ b/app/src/plugins/app/_layout/app/_components/a-header.vue @@ -6,7 +6,7 @@

{{ $route.meta.title }}

- search-icon + search-icon diff --git a/app/src/plugins/app/_layout/app/_components/a-sidemenu.vue b/app/src/plugins/app/_layout/app/_components/a-sidemenu.vue index 0e7febc..cb19a7b 100644 --- a/app/src/plugins/app/_layout/app/_components/a-sidemenu.vue +++ b/app/src/plugins/app/_layout/app/_components/a-sidemenu.vue @@ -3,7 +3,7 @@ jandl-logo diff --git a/app/src/plugins/app/_layout/auth/_components/a-header.vue b/app/src/plugins/app/_layout/auth/_components/a-header.vue index 74b3161..b99d759 100644 --- a/app/src/plugins/app/_layout/auth/_components/a-header.vue +++ b/app/src/plugins/app/_layout/auth/_components/a-header.vue @@ -1,7 +1,7 @@ diff --git a/app/src/plugins/app/_theme/global.sass b/app/src/plugins/app/_theme/global.sass index 2a61e5f..9df904b 100644 --- a/app/src/plugins/app/_theme/global.sass +++ b/app/src/plugins/app/_theme/global.sass @@ -5,17 +5,24 @@ margin-left: 12px border-radius: 50% cursor: pointer + max-height: 32px + max-width: 32px .pencil-icon padding: 10px background: rgba(0, 0, 0, 0.04) border-radius: 50% cursor: pointer + max-height: 32px + max-width: 32px .status-badge background: #F2E7FE color: #7F39FB width: fit-content +.hover + cursor: pointer !important + .task-badge background: rgba(0, 0, 0, 0.04) width: fit-content diff --git a/app/src/plugins/lib@search/search/_components/a-seach-result-task.vue b/app/src/plugins/lib@search/search/_components/a-seach-result-task.vue index 7c3654c..ebc49ba 100644 --- a/app/src/plugins/lib@search/search/_components/a-seach-result-task.vue +++ b/app/src/plugins/lib@search/search/_components/a-seach-result-task.vue @@ -14,9 +14,9 @@
- checkmark-icon - pencil-icon - trash-icon + checkmark-icon + pencil-icon + trash-icon
diff --git a/app/src/plugins/lib@search/search/_components/a-search-result-team.vue b/app/src/plugins/lib@search/search/_components/a-search-result-team.vue index 3974a98..3d415a3 100644 --- a/app/src/plugins/lib@search/search/_components/a-search-result-team.vue +++ b/app/src/plugins/lib@search/search/_components/a-search-result-team.vue @@ -7,8 +7,8 @@ {{ team.name }}
- pencil-icon - trash-icon + pencil-icon + trash-icon
diff --git a/app/src/plugins/tm@_store/store/index.ts b/app/src/plugins/tm@_store/store/index.ts index 64ea428..b8055e8 100644 --- a/app/src/plugins/tm@_store/store/index.ts +++ b/app/src/plugins/tm@_store/store/index.ts @@ -1,8 +1,6 @@ import axios from '@/plugins/w@custom/axios/models/axios' import store from '@/store' -import ax from 'axios' - export default { namespaced: true, @@ -25,10 +23,10 @@ export default { state.employees = employees // TODO: Remove - const employee = employees.find(employee => employee.email == 'zachariah.vonrueden@jandl.sk') - store.commit('auth/auth_success', { - user: employee - }) + // const employee = employees.find(employee => employee.email == 'zachariah.vonrueden@jandl.sk') + // store.commit('auth/auth_success', { + // user: employee + // }) }, set_teams(state: any, teams: any) { @@ -67,6 +65,7 @@ export default { update_subtask(state: any, subtask: any) { state.unscheduledSubtasks = state.unscheduledSubtasks.map(st => st.id == subtask.id ? subtask : st) state.ongoingSubtasks = state.ongoingSubtasks.map(st => st.id == subtask.id ? subtask : st) + state.mastertasks = state.mastertasks.map(mastertask => { mastertask.subtasks = mastertask.subtasks.map(st => st.id == subtask.id ? subtask : st) return mastertask @@ -76,6 +75,7 @@ export default { delete_subtask(state: any, subtask: any) { state.unscheduledSubtasks = state.unscheduledSubtasks.filter(st => st.id != subtask.id) state.ongoingSubtasks = state.ongoingSubtasks.filter(st => st.id != subtask.id) + state.mastertasks = state.mastertasks.map(mastertask => { mastertask.subtasks = mastertask.subtasks.filter(st => st.id != subtask.id) return mastertask diff --git a/app/src/plugins/tm@dashboard/_components/z-timeline.vue b/app/src/plugins/tm@dashboard/_components/z-timeline.vue index 45b31ae..9014a3a 100644 --- a/app/src/plugins/tm@dashboard/_components/z-timeline.vue +++ b/app/src/plugins/tm@dashboard/_components/z-timeline.vue @@ -26,7 +26,7 @@