Browse Source

add the RegistrationStatus alert bar

Olivier Massot 2 years ago
parent
commit
657c02dac2

+ 1 - 0
components/Layout/AlertBar.vue

@@ -16,6 +16,7 @@ Contient les différentes barres d'alertes qui s'affichent dans certains cas
 
     <LayoutAlertBarSwitchYear />
     <LayoutAlertBarSuperAdmin />
+    <LayoutAlertBarRegistrationStatus v-if="organizationProfile.hasModule('IEL')" />
   </main>
 </template>
 

+ 44 - 0
components/Layout/AlertBar/RegistrationStatus.vue

@@ -0,0 +1,44 @@
+<!--
+Barre d'alerte quand au statut de l'inscription en ligne de l'utilisateur
+
+-->
+
+<template>
+  <UiSystemBar
+      v-if="!pending && message"
+      :text="$t(message)"
+      icon="fas fa-id-card"
+      class="theme-secondary-alt"
+  />
+
+<!--  #2B3844  -->
+</template>
+
+<script setup lang="ts">
+import {useEntityFetch} from "~/composables/data/useEntityFetch";
+import {useAccessProfileStore} from "~/stores/accessProfile";
+import RegistrationStatus from "~/models/OnlineRegistration/RegistrationStatus";
+import {ComputedRef} from "@vue/reactivity";
+
+const { fetch } = useEntityFetch()
+
+const accessProfile = useAccessProfileStore()
+
+const { data: registrationStatus, pending } = fetch(RegistrationStatus, accessProfile.id ?? 0)
+
+const messagesByStatus = {
+  'NEGOTIABLE': "your_application_is_awaiting_processing",
+  'PENDING': "you_have_been_placed_on_the_waiting_list",
+  'ACCEPTED': "your_registration_file_has_been_validated",
+  'DENIED': "your_application_has_been_refused",
+}
+
+const message: ComputedRef<string> = computed(() => {
+  const status = (registrationStatus.value as RegistrationStatus).status
+  return status ? messagesByStatus[status] : ''
+})
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 9 - 5
composables/data/useEntityFetch.ts

@@ -3,6 +3,7 @@ import ApiResource from "~/models/ApiResource";
 import {AssociativeArray, Collection} from "~/types/data";
 import {AsyncData} from "#app";
 import {ComputedRef, Ref} from "vue";
+import {v4 as uuid4} from "uuid";
 
 interface useEntityFetchReturnType {
     fetch: (model: typeof ApiResource, id: number) => AsyncData<ApiResource, ApiResource | true>,
@@ -11,20 +12,23 @@ interface useEntityFetchReturnType {
     getRef: <T extends ApiResource>(model: typeof T, id: Ref<number | null>) => ComputedRef<null | T>
 }
 
-
 // TODO: améliorer le typage des fonctions sur le modèle de getRef
 export const useEntityFetch = (lazy: boolean = false): useEntityFetchReturnType => {
     const { em } = useEntityManager()
 
     const fetch = (model: typeof ApiResource, id: number) => useAsyncData(
-        model.entity + '_' + id,
+        model.entity + '_' + id + '_' + uuid4(),
         () => em.fetch(model, id, true),
         { lazy }
     )
 
-    const fetchCollection = (model: typeof ApiResource, parent: ApiResource | null = null, query: Ref<AssociativeArray> = ref([])) => useAsyncData(
-        model.entity + '_many',
-        () => em.fetchCollection(model, parent, query.value),
+    const fetchCollection = (
+        model: typeof ApiResource,
+        parent: ApiResource | null = null,
+        query: Ref<AssociativeArray | null> = ref(null)
+    ) => useAsyncData(
+        model.entity + '_many_' + uuid4(),
+        () => em.fetchCollection(model, parent, query.value ?? undefined),
         { lazy }
     )
 

+ 5 - 1
lang/fr.json

@@ -586,5 +586,9 @@
   "ending_date": "Date de fin",
   "please_note_that_this_reservation_start_on_date_anterior_to_now": "Veuillez noter que cette réservation débute à une date antérieure à aujourd'hui",
   "validate": "Valider",
-  "which_date_and_which_hour": "A quelle date et quelle heure ?"
+  "which_date_and_which_hour": "A quelle date et quelle heure ?",
+  "your_application_is_awaiting_processing": "Votre dossier d'inscription est en attente de traitement",
+  "you_have_been_placed_on_the_waiting_list": "Votre dossier d'inscription est en cours de traitement. Vous avez été placé sur liste d'attente pour une ou plusieurs activités",
+  "your_registration_file_has_been_validated": "Votre dossier d'inscription a été validé. Vous pouvez consulter le bloc \"Enseignements en cours et à venir\" sur la page d'accueil pour avoir des détails sur vos activités.",
+  "your_application_has_been_refused": "Votre dossier d'inscription a été refusé / annulé. Veuillez contacter l'administration pour plus d'informations."
 }

+ 18 - 0
models/OnlineRegistration/RegistrationStatus.ts

@@ -0,0 +1,18 @@
+import ApiModel from "~/models/ApiModel";
+import {Num, Str, Uid} from "pinia-orm/dist/decorators";
+import ApiResource from "~/models/ApiResource";
+
+/**
+ * AP2i Model : File
+ *
+ * @see https://gitlab.2iopenservice.com/opentalent/ap2i/-/blob/develop/src/Entity/Core/File.php
+ */
+export default class RegistrationStatus extends ApiResource {
+  static entity = 'online_registration/registration_status'
+
+  @Uid()
+  declare id: number | string | null
+
+  @Str('')
+  declare status: 'PENDING' | 'NEGOTIABLE' | 'ACCEPTED' | 'DENIED' | null
+}