Skip to content
Snippets Groups Projects
  1. Aug 19, 2024
  2. Aug 13, 2024
  3. Aug 08, 2024
  4. Aug 03, 2024
  5. Aug 02, 2024
  6. Aug 01, 2024
  7. Jul 31, 2024
  8. Jul 27, 2024
  9. Jul 26, 2024
  10. Jul 25, 2024
  11. Jul 24, 2024
  12. 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
      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,
             };
           },
         },
      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
      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
  13. Jul 21, 2024
  14. Jul 18, 2024
  15. Jul 17, 2024
Loading