diff --git a/aleksis/apps/alsijil/assets/components/alsijil/CourseBook.vue b/aleksis/apps/alsijil/assets/components/alsijil/CourseBook.vue index 51902b05ffce0b7947f8db4a1f361e4cae771178..e0bd7ab5b6f59c58ee0d8162d2de4f38efa807a8 100644 --- a/aleksis/apps/alsijil/assets/components/alsijil/CourseBook.vue +++ b/aleksis/apps/alsijil/assets/components/alsijil/CourseBook.vue @@ -24,35 +24,13 @@ ></v-select> </v-col> <v-row v-if="data.lessonDocumentations.length > 0"> - <v-col v-for="item in data.lessonDocumentations" cols="12" v-bind:key="item.id"> - <lesson-documentation - v-bind:key="item.id" - :id="item.id" - :year="item.year" - :week="item.week" - :lessonPeriod="item.lessonPeriod" - :event="item.event" - :extraLesson="item.extraLesson" + <v-col cols="12"> + <lesson-documentations + :lessonDocumentations="data.lessonDocumentations" :groups="data.lesson.groups" - :excuse-types="data.excuseTypes" - :extra-marks="data.extraMarks" - :period="item.period" - - :personal-notes="item.personalNotes" - @change-personal-notes="processDataChange" - - :date="item.date" - @change-date="processDataChange" - - :topic="item.topic" - @change-topic="processDataChange" - - :homework="item.homework" - @change-homework="processDataChange" - - :group-note="item.groupNote" - @change-group-note="processDataChange" - ></lesson-documentation> + :excuseTypes="data.excuseTypes" + :extraMarks="data.extraMarks" + /> </v-col> </v-row> <message-box v-else type="info">No coursebook for you :(</message-box> @@ -72,12 +50,12 @@ <script> import {CHANGES, SAVED, UPDATING} from "../../UpdateStatuses.js"; import UpdateIndicator from "./UpdateIndicator.js"; -import LessonDocumentation from "./LessonDocumentation.js"; +import LessonDocumentations from "./LessonDocumentations.vue"; export default { components: { UpdateIndicator, - LessonDocumentation + LessonDocumentations }, methods: { getLessonText(item) { diff --git a/aleksis/apps/alsijil/assets/components/alsijil/LessonDocumentation.graphql b/aleksis/apps/alsijil/assets/components/alsijil/LessonDocumentation.graphql new file mode 100644 index 0000000000000000000000000000000000000000..ee2ec13a30cbeb019915bf8bdd83770bb1b15363 --- /dev/null +++ b/aleksis/apps/alsijil/assets/components/alsijil/LessonDocumentation.graphql @@ -0,0 +1,30 @@ +mutation UpdateOrCreateLessonDocumentation($year:Int!, $week:Int!, $lessonPeriodId:ID, $topic:String, $homework:String, $groupNote:String) { + updateOrCreateLessonDocumentation(year:$year, week:$week, lessonPeriodId:$lessonPeriodId, topic:$topic, homework:$homework, groupNote:$groupNote) { + lessonDocumentation{ + id + topic + homework + groupNote + date + personalNotes { + id + person { + id + fullName + } + late + absent + excused + excuseType { + name + shortName + } + remarks + extraMarks { + name + shortName + } + } + } + } +} diff --git a/aleksis/apps/alsijil/assets/components/alsijil/LessonDocumentation.js b/aleksis/apps/alsijil/assets/components/alsijil/LessonDocumentations.vue similarity index 58% rename from aleksis/apps/alsijil/assets/components/alsijil/LessonDocumentation.js rename to aleksis/apps/alsijil/assets/components/alsijil/LessonDocumentations.vue index 5c96a81766dbc47761da121d2f6cff10229b5ded..8fa6dfbbb1df64691a94c5f93929d09cb0b8cce5 100644 --- a/aleksis/apps/alsijil/assets/components/alsijil/LessonDocumentation.js +++ b/aleksis/apps/alsijil/assets/components/alsijil/LessonDocumentations.vue @@ -1,80 +1,11 @@ -import PersonalNotes from "./PersonalNotes.vue"; - -export default { - components: { - PersonalNotes - }, - props: [ - "id", - "year", - "week", - "lessonPeriod", - "event", - "extraLesson", - "date", - "period", - "topic", - "homework", - "groupNote", - "personalNotes", - "groups", - "excuseTypes", - "extraMarks" - ], - name: "lesson-documentation", - data: () => { - return { - valid: false, - showPicker: false, - dateAndPeriodEditable: false, - - // We use reactive properties and set the values *once*. - // Otherwise Vue won't allow this, as we aren't allowed to edit props via v-model. - editTopic: "", - editHomework: "", - editGroupNote: "", - } - }, - created() { - this.editTopic = this.topic; - this.editHomework = this.homework; - this.editGroupNote = this.groupNote; - }, - computed: { - lessonDocumentationMutationInputObject() { - return { - year: this.year, - week: this.week, - lessonPeriodId: this.lessonPeriod ? this.lessonPeriod.id : null, - eventId: this.event ? this.event.id : null, - extraLessonId: this.extraLesson ? this.extraLesson.id : null, - topic: this.editTopic, - groupNote: this.editGroupNote, - homework: this.editHomework, - } - } - }, - methods: { - onDone(data) { - console.log("Hello") - console.log(data) - } - }, - template: ` +<template><div> + <v-dialog + v-model="dialog" + max-width="800" + > <ApolloMutation - :mutation="gql => gql\` - mutation UpdateLessonDocumentation($year:Int!, $week:Int!, $lessonPeriodId:ID, $topic:String, $homework:String, $groupNote:String){ - updateOrCreateLessonDocumentation(year:$year, week:$week, lessonPeriodId:$lessonPeriodId, topic:$topic, homework:$homework, groupNote:$groupNote){ - lessonDocumentation{ - id - topic - homework - groupNote - } - } - } - \`" - :variables=lessonDocumentationMutationInputObject + :mutation="require('./LessonDocumentation.graphql')" + :variables=lessonDocumentationEdit @done="onDone" > <template v-slot="{ mutate, loading, error }"> @@ -93,7 +24,7 @@ export default { > <template v-slot:activator="{ on, attrs }"> <v-card-title> - <span v-text="new Date(date).toLocaleDateString($root.languageCode)" class="ma-1"></span> + <span v-text="new Date(lessonDocumentationEdit.date).toLocaleDateString($root.languageCode)" class="ma-1"></span> <v-btn right v-bind="attrs" v-on="on" icon v-if="hover && dateAndPeriodEditable"> <v-icon>mdi-pencil-outline</v-icon> </v-btn> @@ -103,7 +34,7 @@ export default { scrollable no-title @input="showPicker = false; $emit('change-date', $event)" - v-model="date" + v-model="lessonDocumentationEdit.date" ></v-date-picker> </v-menu> </div> @@ -147,7 +78,7 @@ export default { auto-grow required - v-model="editTopic" + v-model="lessonDocumentationEdit.topic" @change="mutate()" ></v-textarea> <v-textarea @@ -156,7 +87,7 @@ export default { rows="1" auto-grow - v-model="editHomework" + v-model="lessonDocumentationEdit.homework" @change="mutate()" ></v-textarea> <v-textarea @@ -165,18 +96,18 @@ export default { rows="1" auto-grow - v-model="editGroupNote" + v-model="lessonDocumentationEdit.groupNote" @change="mutate()" ></v-textarea> </v-col> <v-col cols="12" md="4" lg="3"> <personal-notes - :lesson-documentation-id="id" + :lesson-documentation-id="lessonDocumentationEdit.id" :groups="groups" :excuse-types="excuseTypes" :extra-marks="extraMarks" - v-model="personalNotes" + v-model="lessonDocumentationEdit.personalNotes" @change="$emit('change-personal-notes', $event)" ></personal-notes> </v-col> @@ -185,5 +116,68 @@ export default { </v-card> </template> </ApolloMutation> -` -} + </v-dialog> + <v-data-table + :headers="headers" + :items="lessonDocumentations" + @click:row="editLessonDocumentation" + class="elevation-1" + ></v-data-table> +</div></template> + +<script> + import PersonalNotes from "./PersonalNotes.vue"; + export default { + components: { PersonalNotes }, + props: [ "lessonDocumentations", "groups", "excuseTypes", "extraMarks" ], + name: "lesson-documentations", + data () { + return { + dialog: false, + headers: [ + { text: "Date", value: "date" }, + { text: "Period", value: "period" }, + { text: "Topic", value: "topic" }, + { text: "Homework", value: "homework" }, + { text: "Group note", value: "groupNote" } + ], + lessonDocumentationEdit: {} + } + }, + methods: { + 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, + } + console.log(result) + console.log(this.lessonDocumentationEdit) + }, + + editLessonDocumentation(item) { + this.loadLessonDocumentation(item) + this.dialog = true + } + } + } +</script>