Skip to content
Snippets Groups Projects
  1. Jul 31, 2024
  2. Jul 27, 2024
  3. Jul 26, 2024
  4. Jul 24, 2024
  5. Jul 22, 2024
    • Jonathan Weth's avatar
      Merge branch '290-only-use-a-subset-of-absence-reasons-in-class-register' into 'master' · 140b0ce9
      Jonathan Weth authored
      Resolve "Only use a subset of absence reasons in class register"
      
      Closes #290
      
      See merge request !382
      140b0ce9
    • Jonathan Weth's avatar
      Verified
      0faf8d8c
    • Jonathan Weth's avatar
      Merge branch '298-dialogs-are-unnecessarily-loading-data-submitting-data' into 'master' · 6578adf5
      Jonathan Weth authored
      Resolve "Dialogs are unnecessarily loading data/submitting data"
      
      Closes #298
      
      See merge request !383
      6578adf5
    • Hangzhi Yu's avatar
      Pass absence reasons & prevent unnecessary queries · b83cead0
      Hangzhi Yu authored and Jonathan Weth's avatar Jonathan Weth committed
      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,
             };
           },
         },
      Verified
      b83cead0
    • Jonathan Weth's avatar
      Merge branch 'fix-lint' into 'master' · 2fc8c102
      Jonathan Weth authored
      Fix lint
      
      See merge request !388
      2fc8c102
    • Jonathan Weth's avatar
      Fix lint · 6259838d
      Jonathan Weth authored
      Verified
      6259838d
    • Jonathan Weth's avatar
      Merge branch '264-add-absence-overview-page' into 'master' · 21b45e30
      Jonathan Weth authored
      Resolve "Add absence overview page"
      
      Closes #264
      
      See merge request !363
      21b45e30
    • Jonathan Weth's avatar
  6. Jul 21, 2024
  7. Jul 18, 2024
  8. Jul 17, 2024
  9. Jul 15, 2024
  10. Jul 14, 2024
Loading