- Aug 19, 2024
-
-
Jonathan Weth authored
Translations update from Weblate See merge request !380
-
Jonathan Weth authored
Currently translated at 100.0% (319 of 319 strings) Translation: AlekSIS/AlekSIS-App-Alsijil Translate-URL: https://translate.edugit.org/projects/aleksis/aleksis-app-alsijil/de/
-
magicfelix authored
Currently translated at 99.6% (314 of 315 strings) Translation: AlekSIS/AlekSIS-App-Alsijil Translate-URL: https://translate.edugit.org/projects/aleksis/aleksis-app-alsijil/de/
-
Jonathan Weth authored
Translations update from Weblate See merge request !404
-
Jonathan Weth authored
Currently translated at 100.0% (74 of 74 strings) Translation: AlekSIS/AlekSIS-App-Alsijil-Frontend Translate-URL: https://translate.edugit.org/projects/aleksis/aleksis-app-alsijil-frontend/de/
-
Jonathan Weth authored
Update message files See merge request !403
-
Jonathan Weth authored
- Aug 13, 2024
-
-
Jonathan Weth authored
Resolve "Documentation is created before permission check" Closes #284 See merge request !397
-
- Aug 08, 2024
-
-
Hangzhi Yu authored
-
- Aug 03, 2024
-
-
Jonathan Weth authored
Resolve "Show class groups at top of group select" Closes #305 See merge request !394
-
Hangzhi Yu authored
-
Jonathan Weth authored
Resolve "Improve clearity of button for opening students dialog" Closes #296 See merge request !393
-
Co-authored-by:
Jonathan Weth <git@jonathanweth.de>
-
- Aug 02, 2024
-
-
Jonathan Weth authored
Resolve "Make subject editable in new course book" Closes #275 See merge request !369
-
- Aug 01, 2024
-
-
Hangzhi Yu authored
-
- Jul 31, 2024
-
-
Jonathan Weth authored
Resolve "Some documentations are duplicated in coursebook" Closes #309 See merge request !389
-
Jonathan Weth authored
Resolve "Add time slot numbers to start of documentation rows" Closes #302 See merge request !390
-
- Jul 27, 2024
-
-
Jonathan Weth authored
Translations update from Weblate See merge request !391
-
Jonathan Weth authored
Currently translated at 98.6% (71 of 72 strings) Translation: AlekSIS/AlekSIS-App-Alsijil-Frontend Translate-URL: https://translate.edugit.org/projects/aleksis/aleksis-app-alsijil-frontend/de/
-
- Jul 26, 2024
-
-
Jonathan Weth authored
-
- Jul 25, 2024
-
-
Hangzhi Yu authored
-
Hangzhi Yu authored
-
- Jul 24, 2024
-
-
Hangzhi Yu authored
-
- Jul 22, 2024
-
-
Jonathan Weth authored
Resolve "Only use a subset of absence reasons in class register" Closes #290 See merge request !382
-
Jonathan Weth authored
-
Jonathan Weth authored
Resolve "Dialogs are unnecessarily loading data/submitting data" Closes #298 See merge request !383
-
diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/Coursebook.vue b/aleksis/apps/alsijil/frontend/components/coursebook/Coursebook.vue index b9e723c2..1a064f7f 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/Coursebook.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/Coursebook.vue @@ -38,6 +38,7 @@ <absence-reason-buttons allow-empty empty-value="present" + :customAbsenceReasons="absenceReasons" @input="handleMultipleAction" /> </v-col> @@ -51,6 +52,7 @@ <component :is="itemComponent" :extraMarks="extraMarks" + :absenceReasons="absenceReasons" :documentation="item" :affectedQuery="lastQuery" :value="(selectedParticipations[item.id] ??= [])" @@ -85,6 +87,7 @@ import AbsenceCreationDialog from "./absences/AbsenceCreationDialog.vue"; import { extraMarks } from "../extra_marks/extra_marks.graphql"; import DocumentationLoader from "./documentation/DocumentationLoader.vue"; import sendToServerMixin from "./absences/sendToServerMixin"; +import { absenceReasons } from "./absences/absenceReasons.graphql"; export default { name: "Coursebook", @@ -154,6 +157,7 @@ export default { currentDate: "", hashUpdater: false, extraMarks: [], + absenceReasons: [], selectedParticipations: {}, }; }, @@ -162,6 +166,10 @@ export default { query: extraMarks, update: (data) => data.items, }, + absenceReasons: { + query: absenceReasons, + update: (data) => data.items, + }, }, computed: { // Assertion: Should only fire on page load or selection change. diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/DocumentationAbsencesModal.vue b/aleksis/apps/alsijil/frontend/components/coursebook/absences/DocumentationAbsencesModal.vue index 1e092b4e..f639e731 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/DocumentationAbsencesModal.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/DocumentationAbsencesModal.vue @@ -7,6 +7,8 @@ <documentation-absences compact v-bind="$attrs" + :extra-marks="extraMarks" + :absence-reasons="absenceReasons" :dialog-activator="activator" :value="value" @input="$emit('input', $event)" @@ -14,7 +16,12 @@ </template> <!-- dialog view -> deactivate dialog --> <!-- cancel | save (through lesson-summary) --> - <documentation v-bind="$attrs" @close="popup = false" /> + <documentation + v-bind="$attrs" + :extra-marks="extraMarks" + :absence-reasons="absenceReasons" + @close="popup = false" + /> </mobile-fullscreen-dialog> </template> @@ -40,6 +47,14 @@ export default { type: Array, required: true, }, + extraMarks: { + type: Array, + required: true, + }, + absenceReasons: { + type: Array, + required: true, + }, }, }; </script> diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsDialog.vue b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsDialog.vue index aa9176a8..66585b43 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsDialog.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsDialog.vue @@ -12,6 +12,7 @@ import PersonalNotes from "../personal_notes/PersonalNotes.vue"; import ExtraMarkChip from "../../extra_marks/ExtraMarkChip.vue"; import TardinessChip from "./TardinessChip.vue"; import TardinessField from "./TardinessField.vue"; +import documentationPartMixin from "../documentation/documentationPartMixin"; export default { name: "ManageStudentsDialog", @@ -179,9 +180,9 @@ export default { <v-card-text> <absence-reason-group-select allow-empty - empty-value="present" :loadSelectedChip="loading" :value="item.absenceReason?.id || 'present'" + :customAbsenceReasons="absenceReasons" @input="sendToServer([item], 'absenceReason', $event)" /> <tardiness-field @@ -212,6 +213,7 @@ export default { <absence-reason-buttons allow-empty empty-value="present" + :customAbsenceReasons="absenceReasons" @input="handleMultipleAction" /> </div> diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/ParticipationList.vue b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ParticipationList.vue index 0b3f650d..91feed9e 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/ParticipationList.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ParticipationList.vue @@ -26,8 +26,8 @@ import AbsenceReasonGroupSelect from "aleksis.apps.kolego/components/AbsenceReas v-if="participation.absenceReason && !compact" class="full-width" allow-empty - empty-value="present" :loadSelectedChip="loading" + :customAbsenceReasons="absenceReasons" :value="participation.absenceReason?.id || 'present'" @input="sendToServer([participation], 'absenceReason', $event)" /> @@ -35,8 +35,8 @@ import AbsenceReasonGroupSelect from "aleksis.apps.kolego/components/AbsenceReas <v-list-item-action v-if="participation.absenceReason && compact"> <absence-reason-group-select allow-empty - empty-value="present" :loadSelectedChip="loading" + :customAbsenceReasons="absenceReasons" :value="participation.absenceReason?.id || 'present'" @input="sendToServer([participation], 'absenceReason', $event)" /> diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/absenceReasons.graphql b/aleksis/apps/alsijil/frontend/components/coursebook/absences/absenceReasons.graphql new file mode 100644 index 00000000..2a651a96 --- /dev/null +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/absenceReasons.graphql @@ -0,0 +1,11 @@ +query absenceReasons($orderBy: [String], $filters: JSONString) { + items: absenceReasons(orderBy: $orderBy, filters: $filters) { + id + shortName + name + colour + default + canEdit + canDelete + } +} diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/DocumentationModal.vue b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/DocumentationModal.vue index a679830c..177e886f 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/DocumentationModal.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/DocumentationModal.vue @@ -9,6 +9,7 @@ v-bind="$attrs" :dialog-activator="activator" :extra-marks="extraMarks" + :absence-reasons="absenceReasons" /> </template> <!-- dialog view -> deactivate dialog --> @@ -16,6 +17,7 @@ <documentation v-bind="$attrs" :extra-marks="extraMarks" + :absence-reasons="absenceReasons" @close="popup = false" /> </mobile-fullscreen-dialog> @@ -41,6 +43,10 @@ export default { type: Array, required: true, }, + absenceReasons: { + type: Array, + required: true, + }, }, }; </script> diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/documentationPartMixin.js b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/documentationPartMixin.js index 35243ee3..886803b4 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/documentationPartMixin.js +++ b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/documentationPartMixin.js @@ -40,6 +40,13 @@ export default { type: Array, required: true, }, + /** + * Once loaded list of absence reasons to avoid excessive network and database queries + */ + absenceReasons: { + type: Array, + required: true, + }, }, computed: { @@ -54,6 +61,7 @@ export default { dialogActivator: this.dialogActivator, affectedQuery: this.affectedQuery, extraMarks: this.extraMarks, + absenceReasons: this.absenceReasons, }; }, }, diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/Coursebook.vue b/aleksis/apps/alsijil/frontend/components/coursebook/Coursebook.vue index 7ab16ac1..7a669f7f 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/Coursebook.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/Coursebook.vue @@ -38,6 +38,7 @@ <absence-reason-buttons allow-empty empty-value="present" + :customAbsenceReasons="absenceReasons" @input="handleMultipleAction" /> </v-col> @@ -51,6 +52,7 @@ <component :is="itemComponent" :extra-marks="extraMarks" + :absenceReasons="absenceReasons" :documentation="item" :affected-query="lastQuery" :value="(selectedParticipations[item.id] ??= [])" @@ -84,6 +86,7 @@ import AbsenceCreationDialog from "./absences/AbsenceCreationDialog.vue"; import { extraMarks } from "../extra_marks/extra_marks.graphql"; import DocumentationLoader from "./documentation/DocumentationLoader.vue"; import sendToServerMixin from "./absences/sendToServerMixin"; +import { absenceReasons } from "./absences/absenceReasons.graphql"; export default { name: "Coursebook", @@ -153,6 +156,7 @@ export default { currentDate: "", hashUpdater: false, extraMarks: [], + absenceReasons: [], selectedParticipations: {}, }; }, @@ -161,6 +165,10 @@ export default { query: extraMarks, update: (data) => data.items, }, + absenceReasons: { + query: absenceReasons, + update: (data) => data.items, + }, }, computed: { // Assertion: Should only fire on page load or selection change. diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/DocumentationAbsencesModal.vue b/aleksis/apps/alsijil/frontend/components/coursebook/absences/DocumentationAbsencesModal.vue index 1e092b4e..f639e731 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/DocumentationAbsencesModal.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/DocumentationAbsencesModal.vue @@ -7,6 +7,8 @@ <documentation-absences compact v-bind="$attrs" + :extra-marks="extraMarks" + :absence-reasons="absenceReasons" :dialog-activator="activator" :value="value" @input="$emit('input', $event)" @@ -14,7 +16,12 @@ </template> <!-- dialog view -> deactivate dialog --> <!-- cancel | save (through lesson-summary) --> - <documentation v-bind="$attrs" @close="popup = false" /> + <documentation + v-bind="$attrs" + :extra-marks="extraMarks" + :absence-reasons="absenceReasons" + @close="popup = false" + /> </mobile-fullscreen-dialog> </template> @@ -40,6 +47,14 @@ export default { type: Array, required: true, }, + extraMarks: { + type: Array, + required: true, + }, + absenceReasons: { + type: Array, + required: true, + }, }, }; </script> diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsDialog.vue b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsDialog.vue index d8f001d3..a5d663d3 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsDialog.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsDialog.vue @@ -179,9 +179,9 @@ export default { <v-card-text> <absence-reason-group-select allow-empty - empty-value="present" :load-selected-chip="loading" :value="item.absenceReason?.id || 'present'" + :customAbsenceReasons="absenceReasons" @input="sendToServer([item], 'absenceReason', $event)" /> <tardiness-field @@ -212,6 +212,7 @@ export default { <absence-reason-buttons allow-empty empty-value="present" + :customAbsenceReasons="absenceReasons" @input="handleMultipleAction" /> </div> diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/ParticipationList.vue b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ParticipationList.vue index 1c941b8d..26adb589 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/ParticipationList.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ParticipationList.vue @@ -26,8 +26,8 @@ import AbsenceReasonGroupSelect from "aleksis.apps.kolego/components/AbsenceReas v-if="participation.absenceReason && !compact" class="full-width" allow-empty - empty-value="present" :load-selected-chip="loading" + :customAbsenceReasons="absenceReasons" :value="participation.absenceReason?.id || 'present'" @input="sendToServer([participation], 'absenceReason', $event)" /> @@ -35,8 +35,8 @@ import AbsenceReasonGroupSelect from "aleksis.apps.kolego/components/AbsenceReas <v-list-item-action v-if="participation.absenceReason && compact"> <absence-reason-group-select allow-empty - empty-value="present" :load-selected-chip="loading" + :customAbsenceReasons="absenceReasons" :value="participation.absenceReason?.id || 'present'" @input="sendToServer([participation], 'absenceReason', $event)" /> diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/absenceReasons.graphql b/aleksis/apps/alsijil/frontend/components/coursebook/absences/absenceReasons.graphql new file mode 100644 index 00000000..2a651a96 --- /dev/null +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/absenceReasons.graphql @@ -0,0 +1,11 @@ +query absenceReasons($orderBy: [String], $filters: JSONString) { + items: absenceReasons(orderBy: $orderBy, filters: $filters) { + id + shortName + name + colour + default + canEdit + canDelete + } +} diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/DocumentationModal.vue b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/DocumentationModal.vue index a679830c..177e886f 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/DocumentationModal.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/DocumentationModal.vue @@ -9,6 +9,7 @@ v-bind="$attrs" :dialog-activator="activator" :extra-marks="extraMarks" + :absence-reasons="absenceReasons" /> </template> <!-- dialog view -> deactivate dialog --> @@ -16,6 +17,7 @@ <documentation v-bind="$attrs" :extra-marks="extraMarks" + :absence-reasons="absenceReasons" @close="popup = false" /> </mobile-fullscreen-dialog> @@ -41,6 +43,10 @@ export default { type: Array, required: true, }, + absenceReasons: { + type: Array, + required: true, + }, }, }; </script> diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/documentationPartMixin.js b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/documentationPartMixin.js index 35243ee3..886803b4 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/documentationPartMixin.js +++ b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/documentationPartMixin.js @@ -40,6 +40,13 @@ export default { type: Array, required: true, }, + /** + * Once loaded list of absence reasons to avoid excessive network and database queries + */ + absenceReasons: { + type: Array, + required: true, + }, }, computed: { @@ -54,6 +61,7 @@ export default { dialogActivator: this.dialogActivator, affectedQuery: this.affectedQuery, extraMarks: this.extraMarks, + absenceReasons: this.absenceReasons, }; }, },
-
Jonathan Weth authored
Fix lint See merge request !388
-
Jonathan Weth authored
-
Jonathan Weth authored
Resolve "Add absence overview page" Closes #264 See merge request !363
-
Jonathan Weth authored
-
- Jul 21, 2024
-
-
Jonathan Weth authored
-
Jonathan Weth authored
Fix ParticipationStatus.get_objects to deal with changes in Core See merge request !387
-
Jonathan Weth authored
-
- Jul 18, 2024
-
-
Hangzhi Yu authored
-
Hangzhi Yu authored
-
Hangzhi Yu authored
-
Jonathan Weth authored
Merge branch '304-make-person-select-in-long-term-absence-dialog-filterable-by-adding-a-preference-for-the-group' into 'master' Resolve "Make person select in long term absence dialog filterable by adding a preference for the group type for which ownership is required" Closes #304 See merge request !386
-
- Jul 17, 2024
-
-
Jonathan Weth authored
-