[Master task] Modal fix

This commit is contained in:
Matej Glasnák committed 2023-04-11 19:11:15 +02:00
1 parent f3adc68c73
commit aac8620a0f
3 files changed
+28 -22

No files matched your search

@@ -3,10 +3,15 @@ import moment from 'moment'
export default { export default {
generateTimelineTasks(subtasks, date, employee) { generateTimelineTasks(subtasks, date, employee) {
return [ const { tasks, blockers, homeoffices } = this.generateTimelineEvents(subtasks, employee, date)
...this.generateTimelineEvents(subtasks, employee, date), const { nonWorkingHours } = this.generateTimelineNonWorkingHours(date, employee)
...this.generateTimelineNonWorkingHours(date, employee)
] return {
tasks,
blockers,
nonWorkingHours,
homeoffices
}
}, },
getUnscheduledTime(subtasks) { getUnscheduledTime(subtasks) {
@@ -21,19 +26,24 @@ export default {
}, },
generateTimelineEvents(subtasks, employee, date) { generateTimelineEvents(subtasks, employee, date) {
let events = [] let blockers = []
const tasks = []
subtasks.forEach(subtask => { subtasks.forEach(subtask => {
if (['blocker', 'adhoc', 'home_office', 'vacation', 'free_day'].includes(subtask.type)) { if (['blocker', 'adhoc', 'home_office', 'vacation', 'free_day'].includes(subtask.type)) {
events = [...events, ...this._generateEventsFromBlocker(subtask, date)] blockers = [...blockers, ...this._generateEventsFromBlocker(subtask, date)]
} else { } else {
subtask.timeblocks?.forEach((timeblock) => { subtask.timeblocks?.forEach((timeblock) => {
events.push(this._composeTimelineEvent(subtask, employee, date, timeblock)) tasks.push(this._composeTimelineEvent(subtask, employee, date, timeblock))
}) })
} }
}) })
return events return {
tasks,
blockers: blockers.filter(blocker => blocker.type != 'home_office'),
homeoffices: blockers.filter(blocker => blocker.type == 'home_office')
}
}, },
_composeTimelineEvent(subtask, employee, date, timeblock) { _composeTimelineEvent(subtask, employee, date, timeblock) {
@@ -118,7 +128,7 @@ export default {
}) })
} }
return events return {nonWorkingHours: events}
}, },
_getSplitFromDate(date, start) { _getSplitFromDate(date, start) {
+8 -5
View File
@@ -44,16 +44,16 @@ export default {
if (!workingHours[task.split]) if (!workingHours[task.split])
workingHours[task.split] = 0 workingHours[task.split] = 0
if (task.type == 'home_office') {
return homeoffice[task.split] = true
}
if (task.type == 'non-working-hours' || task.subtask?.is_finished || task.blocker?.is_finished) if (task.type == 'non-working-hours' || task.subtask?.is_finished || task.blocker?.is_finished)
return return
workingHours[task.split] += timelineUtils._getDifferenceInHours(task.end, task.start) workingHours[task.split] += timelineUtils._getDifferenceInHours(task.end, task.start)
}) })
this.timelineData.homeoffices.forEach(task => {
homeoffice[task.split] = true
})
for (let i = 0; i < 7; i++) { for (let i = 0; i < 7; i++) {
days.push({ days.push({
id: i + 1, id: i + 1,
@@ -80,11 +80,14 @@ export default {
if (!this.subtasks || !this.filter) if (!this.subtasks || !this.filter)
return null return null
const { tasks, blockers, nonWorkingHours, homeoffices } = timelineUtils.generateTimelineTasks(this.subtasks, new Date(this.filter.start), this.filter.employee)
return { return {
name: this.filter.employee.name, name: this.filter.employee.name,
surname: this.filter.employee.surname, surname: this.filter.employee.surname,
unscheduledTime: this.unscheduledTime, unscheduledTime: this.unscheduledTime,
tasks: timelineUtils.generateTimelineTasks(this.subtasks, new Date(this.filter.start), this.filter.employee) tasks: [...tasks, ...blockers, ...nonWorkingHours],
homeoffices
} }
} }
}, },
@@ -12,7 +12,7 @@
<v-text-field v-model="mastertask.name" @focus="onInputFocus" class="modal-input" label="Názov mastertasku" variant="solo" :class="{ error: v$.mastertask.name.$errors.length }" :hint="v$.mastertask.name.$errors ? errorUtils.parseErrors(v$.mastertask.name.$errors) : null"></v-text-field> <v-text-field v-model="mastertask.name" @focus="onInputFocus" class="modal-input" label="Názov mastertasku" variant="solo" :class="{ error: v$.mastertask.name.$errors.length }" :hint="v$.mastertask.name.$errors ? errorUtils.parseErrors(v$.mastertask.name.$errors) : null"></v-text-field>
<Datepicker v-model="mastertask.deadline" @focus="onDateFocus" class="modal-input" format="dd.MM.yyyy, HH:mm" locale="sk" :class="{ error: v$.mastertask.deadline.$errors.length }" select-text="Vybrať" cancel-text="Zrušiť" placeholder="Deadline" /> <Datepicker v-model="mastertask.deadline" @focus="onDateFocus" :min-date="new Date()" class="modal-input" format="dd.MM.yyyy, HH:mm" locale="sk" :class="{ error: v$.mastertask.deadline.$errors.length }" select-text="Vybrať" cancel-text="Zrušiť" placeholder="Deadline" />
<v-text-field v-model="mastertask.duration" @focus="onInputFocus" class="modal-input mt-5" variant="solo" type="number" disabled :label="`${mastertask.duration} h`"></v-text-field> <v-text-field v-model="mastertask.duration" @focus="onInputFocus" class="modal-input mt-5" variant="solo" type="number" disabled :label="`${mastertask.duration} h`"></v-text-field>
@@ -25,13 +25,6 @@
</p> </p>
</v-text-field> </v-text-field>
</template> </template>
<template v-else-if="mastertask.subtasks">
<v-text-field v-for="(subtask, index) in enrichedSubtasks" :key="subtask.id" @focus="onInputFocus" :class="{ error: !mastertask.subtasks[index].duration }" class="modal-input" :label="`${subtask._fullName}`" variant="solo" placeholder="h" v-model="mastertask.subtasks[index].duration" type="number" min="1" @input="onEmployeeDurationChanged">
<p class="employee-select-avatar d-flex justify-center align-center">
{{ subtask._initials }}
</p>
</v-text-field>
</template>
<v-autocomplete v-if="showAddEmployeeInput" :label="$t('Search for employee')" :class="{error: v$.mastertask.project_id.$errors.length}" :items="employeesOptions" item-title="_fullName" item-value="id" variant="solo" class="modal-input" clearable @update:model-value="onEmployeeSelected" /> <v-autocomplete v-if="showAddEmployeeInput" :label="$t('Search for employee')" :class="{error: v$.mastertask.project_id.$errors.length}" :items="employeesOptions" item-title="_fullName" item-value="id" variant="solo" class="modal-input" clearable @update:model-value="onEmployeeSelected" />