Newer
Older
<template><div>
<v-dialog
v-model="dialog"
max-width="800"
>
<template v-slot:activator="{ on, attrs }">
<v-row>
<v-col cols="6">
<v-select
label="Choose Lesson date"
:item-text="getLessonText"
v-model="selectedLessonperiodDatetime"
return-object
></v-select>
</v-col>
<v-col>
<v-btn
color="primary"
dark
v-bind="attrs"
v-on="on"
@click="createLessonDocumentation()"
>
Create Lesson Documentation
</v-btn>
</v-col>
</v-row>
</template>
<lesson-documentation
:lessonDocumentationEdit="lessonDocumentationEdit"
:groups="groups"
:excuse-types="excuseTypes"
:extra-marks="extraMarks"
/>
</v-dialog>
<v-data-table
:headers="headers"
:items="computedLessonDocumentations"
@click:row="editLessonDocumentation"
class="elevation-1"
>
<template v-slot:item.period="{ item }">
<span class="text-no-wrap">{{ item.date }} Period {{ item.period }}</span>
</template>
<template v-slot:item.personalNotes="{ item }">
<template v-for="personalNote in item.personalNotes">
<v-chip class="ma-1" close v-if="personalNoteString(personalNote)">
{{ personalNote.person.fullName }}: {{ personalNoteString(personalNote) }}
</v-chip>
</template>
</template>
</v-data-table>
</div></template>
<script>
import LessonDocumentation from "./LessonDocumentation.vue";
components: { LessonDocumentation },
props: [ "lessonDocumentations","plannedLessonperiodsDatetimes", "groups", "excuseTypes", "extraMarks", "documentLessonTopicsByWeek" ],
name: "lesson-documentations",
data () {
return {
dialog: false,
headers: [
{ text: "Period", value: "period" },
{ text: "Topic", value: "topic" },
{ text: "Homework", value: "homework" },
{ text: "Group note", value: "groupNote" },
{ text: "Personal notes", value: "personalNotes" }
lessonDocumentationEdit: {},
computed: {
emptyLessonperiods() {
let currentDatetime = new Date()
return this.plannedLessonperiodsDatetimes.filter(lp => new Date(lp.datetimeStart) > currentDatetime)
},
computedLessonDocumentations() {
return this.lessonDocumentations.filter(ld => this.recordDocumentation(ld))
},
recordDocumentation(item) {
if (this.documentLessonTopicsByWeek === "True") {
if (this.recordedWeeks.includes(item.week)) {
return false
}
this.recordedWeeks.push(item.week)
}
return true
},
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
async loadLessonDocumentation(item) {
const result = await this.$apollo.mutate({
mutation: require("./LessonDocumentation.graphql"),
variables: {
year: item.year,
week: item.week,
lessonPeriodId: item.lessonPeriod ? item.lessonPeriod.id : null,
eventId: item.event ? item.event.id : null,
extraLessonId: item.extraLesson ? item.extraLesson.id : null,
},
})
let lessonDocumentation = result.data.updateOrCreateLessonDocumentation.lessonDocumentation
this.lessonDocumentationEdit = {
id: lessonDocumentation.id,
year: item.year,
week: item.week,
date: lessonDocumentation.date,
lessonPeriodId: item.lessonPeriod ? item.lessonPeriod.id : null,
eventId: item.event ? item.event.id : null,
extraLessonId: item.extraLesson ? item.extraLesson.id : null,
topic: lessonDocumentation.topic,
homework: lessonDocumentation.homework,
groupNote: lessonDocumentation.groupNote,
personalNotes: lessonDocumentation.personalNotes,
}
},
editLessonDocumentation(item) {
this.loadLessonDocumentation(item)
this.dialog = true
},
createLessonDocumentation() { // FIXME: Update cache to show newly created LessonDocumentation in table
let lessonDocumentation = this.selectedLessonperiodDatetime
lessonDocumentation["event"] = null
lessonDocumentation["extraLesson"] = null
this.loadLessonDocumentation(lessonDocumentation)
this.dialog = true
},
getLessonText(item) {
let date_obj = new Date(item.datetimeStart)
let period = item.lessonPeriod ? ", Period " + item.lessonPeriod.period.period : "" // FIXME: Cases without lessonPeriod
return date_obj.toLocaleDateString(this.$root.languageCode) + period
},
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
personalNoteString(personalNote) {
let personalNoteString = "";
if (personalNote.late > 0) {
personalNoteString += personalNote.late + " min. ";
}
if (personalNote.absent) {
personalNoteString += "abwesend ";
}
if (personalNote.excused) {
personalNoteString += "entschuldigt ";
}
if (personalNote.excuseType) {
personalNoteString += personalNote.excuseType.name;
}
if (personalNote.extraMarks.length > 0) {
personalNoteString += " (";
personalNote.extraMarks.forEach(item => {
personalNoteString += item.name + ", ";
});
personalNoteString = personalNoteString.substring(0, personalNoteString.length - 2);
personalNoteString += ") ";
}
if (personalNote.remarks) {
personalNoteString += "\"" + personalNote.remarks + "\" ";
}
return personalNoteString;
},