diff --git a/aleksis/apps/alsijil/static/js/vue/components/alsijil/PersonalNotes.js b/aleksis/apps/alsijil/static/js/vue/components/alsijil/PersonalNotes.js index 9af3046244c999add58569b71160169fe3cc6620..d1e08232c2cb1fb48a0b4b9eee905b66001aae79 100644 --- a/aleksis/apps/alsijil/static/js/vue/components/alsijil/PersonalNotes.js +++ b/aleksis/apps/alsijil/static/js/vue/components/alsijil/PersonalNotes.js @@ -1,13 +1,25 @@ export default { methods: { - removePersonalNote (item) {}, - editPersonalNote (item) { - this.dialog=true; - this.editPersonalNote=item; + removePersonalNote(item) { + console.log("removing personal note", item); }, - updatePersonalNote (item) { - this.personalNotes + editPersonalNote(personID) { + console.log("editing personal note of person", personID); + this.editedPersonID = personID; + this.updatePersonalNote(); + this.dialog = true; }, + updatePersonalNote() { + let personalNote = this.personalNoteByStudentID(this.editedPersonID); + this.editedTardiness = personalNote.tardiness || 0; + this.editedAbsent = personalNote.absent || false; + this.editedExcused = personalNote.excused || false; + this.editedExcuseType = personalNote.excuse_type || null; + this.editedExtraMarks = personalNote.extra_marks || []; + }, + personalNoteByStudentID(studentID) { + return this.personalNotes.filter(item => item.student.id === studentID)[0] || {}; + } }, props: ["personalNotes", "groups"], name: "personal-notes", @@ -16,37 +28,27 @@ export default { dialog: false, // Absent versp. exc. type hw note editPersonalNoteId: null, - headers: [ - { - text: window.django.gettext('Name'), - align: 'start', - value: 'student.full_name', - }, - { - text: window.django.gettext('Absent'), - value: 'absent', - }, - { - text: window.django.gettext('Tardiness'), - value: 'tardiness', - }, - { - text: window.django.gettext('Excused'), - value: 'excused', - }, - { - text: window.django.gettext('Excuse Type'), - value: 'excuse_type', - }, - { - text: window.django.gettext('Extra Marks'), - value: 'extra_marks', - }, - { - text: window.django.gettext('Remarks'), - value: 'remarks', - }, - ], + editedPersonID: -1, + editedTardiness: 0, + editedAbsent: false, + editedExcused: false, + editedExcuseType: null, + editedExtraMarks: [], + } + }, + computed: { + persons() { + // go through each group and get the students + // use the group names as headers for the v-select + + return this.groups.map( + group => { + return [ + {header: group.name, id: group.short_name}, + group.members + ] + } + ).flat(2); } }, template: ` @@ -56,7 +58,10 @@ export default { > <template v-slot:activator="{ on, attrs }"> <div> - <v-chip class="ma-1" v-for="personal_note in personalNotes" close @click="editPersonalNote(personal_note)" @click:close="removePersonalNote(personal_note)">{{personal_note.student.full_name}}: {{personal_note.tardiness}}</v-chip> + <v-chip class="ma-1" v-for="personal_note in personalNotes" close + @click="editPersonalNote(personal_note.student.id)" @click:close="removePersonalNote(personal_note)"> + {{personal_note.student.full_name}}: {{personal_note.tardiness}} + </v-chip> </div> <v-btn class="ma-1" @@ -78,45 +83,11 @@ export default { <v-card-text> <v-container> <!-- FIXME: Sync values with data--> - <v-select item-text="student.full_name" item-value="id" :items="personalNotes" :value="editPersonalNote.id" @input="editPersonalNoteId = $event"></v-select> - <v-text-field label="Tardiness" suffix="min" type="number" min="0"></v-text-field> - <v-checkbox label="Absent"></v-checkbox> - <v-checkbox label="Excused"></v-checkbox> - <!--<v-data-table - :headers="headers" - :items="personalNotes" - class="elevation-1" - disable-filtering="true" - disable-pagination="true" - disable-items-per-page="true" - > - <template v-slot:item.student.full_name="props"> - <v-edit-dialog - :return-value.sync="props.item.student.full_name" - @save="save" - @cancel="cancel" - @open="open" - @close="close" - > - {{ props.item.student.full_name }} - <template v-slot:input> - <v-text-field - v-model="props.item.student.full_name" - :rules="[max25chars]" - label="Edit" - single-line - counter - ></v-text-field> - </template> - </v-edit-dialog> - </template> - <template v-slot:item.absent="{ item }"> - <v-simple-checkbox v-model="item.absent" ></v-simple-checkbox> - </template> - <template v-slot:item.excused="{ item }"> - <v-simple-checkbox v-model="item.excused" ></v-simple-checkbox> - </template> - </v-data-table>--> + <v-select item-text="full_name" item-value="id" :items="persons" + v-model="editedPersonID" @input="updatePersonalNote"></v-select> + <v-text-field label="Tardiness" suffix="min" type="number" min="0" v-model="editedTardiness"></v-text-field> + <v-checkbox label="Absent" v-model="personalNoteByStudentID(editedPersonID).absent"></v-checkbox> + <v-checkbox label="Excused" v-model="editedExcused"></v-checkbox> </v-container> <!-- <small>*indicates required field</small>--> </v-card-text>