Browse Source

changement pout app-v3 page parametre

Maha Bouchiba 2 years ago
parent
commit
a599f06d1b

+ 12 - 21
components/Layout/Parameters/EducationTimings.vue

@@ -3,12 +3,11 @@
     <UiLoadingPanel v-if="pending" />
     <div v-else>
       <ul>
-        <li v-for="timing in allTimings" :key="timing.id">  
-          {{  timing.timing  }}
-          <div class="button-group">
-            <UiButtonDelete :model="EducationTiming" :entity="timing" />
-            <span class="edit-icon" @click="goToEditPage(timing.id)">✏️</span>
-          </div>
+        <li v-for="timing in allTimings" :key="timing.id">
+          {{ timing.timing }}
+
+          <UiButtonDelete :model="EducationTiming" :entity="timing" />
+          <span class="edit-icon" @click="goToEditPage(timing.id)">✏️</span>
         </li>
       </ul>
     </div>
@@ -19,22 +18,23 @@
 <script setup lang="ts">
 import { useEntityFetch } from '~/composables/data/useEntityFetch'
 import EducationTiming from '~/models/Education/EducationTiming'
-import {useRepo} from "pinia-orm";
-import EducationTimingsRepository from '~/stores/repositories/EducationTimingsRepository';
+import { useRepo } from 'pinia-orm'
+import EducationTimingsRepository from '~/stores/repositories/EducationTimingsRepository'
 
 const { fetchCollection } = useEntityFetch()
 
 const { data: educationTimings, pending } = fetchCollection(EducationTiming)
 
-const educationTimingRepo = useRepo(EducationTimingsRepository);
+const educationTimingRepo = useRepo(EducationTimingsRepository)
 
+/**
+ * On récupère les timings via le store 
+ * (sans ça, les mises à jour SSE ne seront pas prises en compte)
+ */
 const allTimings: ComputedRef<Array<EducationTiming>> = computed(() => {
   return educationTimingRepo.getEducationTimings()
 })
 
-console.log(allTimings)
-
-
 const goToEditPage = (id: number) => {
   navigateTo(`/parameters/education_timings/${id}`)
 }
@@ -44,12 +44,3 @@ const goToCreatePage = () => {
 }
 </script>
 
-<style scoped lang="scss">
-.button-group {
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  gap: 8px;  
-}
-
-</style>

+ 3 - 7
components/Layout/Parameters/SuperAdmin.vue

@@ -31,20 +31,16 @@ import AdminAccess from '~/models/Access/AdminAccess'
 const { fetch } = useEntityFetch()
 
 const accessProfile = useAccessProfileStore()
-
-const id = accessProfile.id
-console.log(id)
-
 if (accessProfile.id === null) {
   throw new Error('Missing access profile id')
 }
 
-const { data: adminAccess, pending } = fetch(AdminAccess, id)
+const { data: adminAccess, pending } = fetch(AdminAccess, accessProfile.id)
 
 const i18n = useI18n()
 
 const rules = () => [
-  (label: string | null) =>
-    (label !== null && label.length > 0) || i18n.t('please_enter_a_value'),
+  (timing: number) =>
+    (timing !== null && timing > 0) || i18n.t('value_need_to_be_bigger_than_0'),
 ]
 </script>

+ 2 - 0
lang/fr.json

@@ -173,6 +173,7 @@
   "cycle": "Cycle",
   "timing": "Durée d'un enseignement (en minutes)",
   "educationTiming": "Durée d'un enseignement (en minutes)",
+  "new_education_timings" : "Nouvelle durée d'enseignement",
   "superAdmin": "Compte super-admin",
   "username": "Login de connexion",
   "residenceArea": "Zones de résidence",
@@ -602,6 +603,7 @@
   "educationNotations": "Suivi pédagogique",
   "bulletin": "Bulletins",
   "educationTimings": "Durée des cours (en minutes)",
+  "new_education_timing": "Nouvelle durée de cours",
   "residenceAreas": "Zones de résidence",
   "sms_option": "Option SMS",
   "super_admin": "Compte super-admin",

+ 23 - 12
pages/parameters/education_timings/[id].vue

@@ -2,14 +2,18 @@
   <LayoutContainer>
     <UiLoadingPanel v-if="pending" />
     <div v-else>
-      <h2> EducationTiming</h2>
+      <h2>EducationTiming</h2>
       <UiForm
         ref="form"
         :model="EducationTiming"
         :entity="education_timings"
         :submitActions="submitActions"
       >
-      <UiInputNumber field="educationtiming" v-model="education_timings.timing" />
+        <UiInputNumber
+          field="educationtiming"
+          v-model="education_timings.timing"
+          :rules="rules"
+        />
       </UiForm>
     </div>
   </LayoutContainer>
@@ -17,19 +21,21 @@
 <script setup lang="ts">
 import { ref, computed } from 'vue'
 import { useEntityFetch } from '~/composables/data/useEntityFetch'
-import EducationTiming from '~/models/Education/EducationTiming';
+import EducationTiming from '~/models/Education/EducationTiming'
 import { useRoute } from 'vue-router'
 import { useI18n } from 'vue-i18n'
-import {AnyJson} from "~/types/data";
-import {SUBMIT_TYPE} from "~/types/enum/enums";
-
-const goBackRoute = { path: `/parameters`, query: { tab: 'educationTimings' } }
+import { AnyJson } from '~/types/data'
+import { SUBMIT_TYPE } from '~/types/enum/enums'
 
 const i18n = useI18n()
 const { fetch } = useEntityFetch()
 const route = useRoute()
-const id = ref(route.params.id)
-console.log(id.value) 
+const idValue = Array.isArray(route.params.id)
+  ? route.params.id[0]
+  : route.params.id
+const educationTimingID = ref(parseInt(idValue))
+
+const goBackRoute = { path: `/parameters`, query: { tab: 'educationTimings' } }
 
 const submitActions = computed(() => {
   let actions: AnyJson = {}
@@ -37,9 +43,14 @@ const submitActions = computed(() => {
   return actions
 })
 
-
-const {data : education_timings, pending} = fetch(EducationTiming, id.value)
+const { data: education_timings, pending } = fetch(
+  EducationTiming,
+  educationTimingID.value
+)
 console.log(education_timings)
 
-
+const rules = () => [
+  (timing: string | null) =>
+    (timing !== null && timing.length > 0) || i18n.t('please_enter_a_value'),
+]
 </script>

+ 14 - 13
pages/parameters/education_timings/new.vue

@@ -2,23 +2,23 @@
   <LayoutContainer>
     <UiLoadingPanel v-if="pending" />
     <div v-else>
-      <h2>Créer Nouvelle Education Timing</h2>
+      <h2>{{ $t("new_education_timing")}}</h2>
       <UiForm
         ref="form"
         :model="EducationTiming"
         :entity="education_timings"
         :submitActions="submitActions"
       >
-      <v-container :fluid="true" class="container">
+        <v-container :fluid="true" class="container">
           <v-row>
-            <v-col cols="12" sm="6">
-            </v-col>
+            <v-col cols="12" sm="6"> </v-col>
           </v-row>
           <v-row>
             <v-col cols="12" sm="6">
               <UiInputNumber
-                  v-model="education_timings.timing"
-                  field="education_timings"
+                v-model="education_timings.timing"
+                field="new_education_timings"
+                :rules="rules()"
               />
             </v-col>
           </v-row>
@@ -30,9 +30,8 @@
 
 <script setup lang="ts">
 import { ref, computed } from 'vue'
-import {Ref} from "@vue/reactivity";
-import {AnyJson} from "~/types/data";
-import {SUBMIT_TYPE} from "~/types/enum/enums";
+import { AnyJson } from '~/types/data'
+import { SUBMIT_TYPE } from '~/types/enum/enums'
 import EducationTiming from '~/models/Education/EducationTiming'
 import { useI18n } from 'vue-i18n'
 import { useEntityManager } from '~/composables/data/useEntityManager'
@@ -41,11 +40,12 @@ const i18n = useI18n()
 
 const { em } = useEntityManager()
 
-const education_timings: Ref<EducationTiming> = ref(em.newInstance(EducationTiming) as EducationTiming)
+const education_timings = ref(
+  em.newInstance(EducationTiming) as EducationTiming
+)
 
 const goBackRoute = { path: `/parameters`, query: { tab: 'educationTimings' } }
 
-
 const submitActions = computed(() => {
   let actions: AnyJson = {}
   actions[SUBMIT_TYPE.SAVE_AND_BACK] = goBackRoute
@@ -53,6 +53,7 @@ const submitActions = computed(() => {
 })
 
 const rules = () => [
-  (label: string | null) => (label !== null && label.length > 0) || i18n.t('please_enter_a_value'),
+  (timing: number ) =>
+    (timing !== null && timing > 0) || i18n.t('please_enter_a_value'),
 ]
-</script>
+</script>

+ 18 - 10
pages/parameters/residence_areas/[id].vue

@@ -2,44 +2,52 @@
   <LayoutContainer>
     <UiLoadingPanel v-if="pending" />
     <div v-else>
-      <h2> Editer la zone de résidence</h2>
+      <h2>Editer la zone de résidence</h2>
       <UiForm
         ref="form"
         :model="ResidenceArea"
         :entity="residence_areas"
         :submitActions="submitActions"
       >
-      <UiInputText field="label" v-model="residence_areas.label" :rules="rules()"  />
+        <UiInputText
+          field="label"
+          v-model="residence_areas.label"
+          :rules="rules()"
+        />
       </UiForm>
-
     </div>
   </LayoutContainer>
 </template>
 
 <script setup lang="ts">
-import { ref, onMounted } from 'vue'
+import { ref } from 'vue'
 import { useEntityFetch } from '~/composables/data/useEntityFetch'
 import ResidenceArea from '~/models/Billing/ResidenceArea'
 import { useRoute } from 'vue-router'
 import { useI18n } from 'vue-i18n'
-import {AnyJson} from "~/types/data";
-import {SUBMIT_TYPE} from "~/types/enum/enums";
+import { AnyJson } from '~/types/data'
+import { SUBMIT_TYPE } from '~/types/enum/enums'
 
 const i18n = useI18n()
 const { fetch } = useEntityFetch()
 const route = useRoute()
-const id = ref(route.params.id)
+const idValue = Array.isArray(route.params.id)
+  ? route.params.id[0]
+  : route.params.id
+const residenceID = ref(parseInt(idValue))
 
 const goBackRoute = { path: `/parameters`, query: { tab: 'residenceAreas' } }
+
 const submitActions = computed(() => {
   let actions: AnyJson = {}
   actions[SUBMIT_TYPE.SAVE_AND_BACK] = goBackRoute
   return actions
 })
 
-
-
-const {data : residence_areas, pending} = fetch(ResidenceArea, id.value)
+const { data: residence_areas, pending } = fetch(
+  ResidenceArea,
+  residenceID.value
+)
 
 const rules = () => [
   (label: string | null) =>

+ 14 - 12
pages/parameters/residence_areas/new.vue

@@ -9,19 +9,19 @@
         :entity="residence_areas"
         :submitActions="submitActions"
       >
-      <v-container :fluid="true" class="container">
+        <v-container :fluid="true" class="container">
           <v-row>
             <v-col cols="12" sm="6">
-              <div>{{ $t('pleaseEnterYourNewSubdomain')}} :</div>
+              <div>{{ $t('pleaseEnterYourNewSubdomain') }} :</div>
             </v-col>
           </v-row>
           <v-row>
             <v-col cols="12" sm="6">
               <UiInputText
-                  v-model="residence_areas.label"
-                  field="residence Areas"
-                  type="string"
-                  :rules="rules()"
+                v-model="residence_areas.label"
+                field="residence Areas"
+                type="string"
+                :rules="rules()"
               />
             </v-col>
           </v-row>
@@ -33,10 +33,10 @@
 
 <script setup lang="ts">
 import { ref, onMounted, computed } from 'vue'
-import {Ref} from "@vue/reactivity";
+import { Ref } from '@vue/reactivity'
 import { useEntityFetch } from '~/composables/data/useEntityFetch'
-import {AnyJson} from "~/types/data";
-import {SUBMIT_TYPE} from "~/types/enum/enums";
+import { AnyJson } from '~/types/data'
+import { SUBMIT_TYPE } from '~/types/enum/enums'
 import ResidenceArea from '~/models/Billing/ResidenceArea'
 import { useI18n } from 'vue-i18n'
 import { useEntityManager } from '~/composables/data/useEntityManager'
@@ -45,11 +45,12 @@ const i18n = useI18n()
 
 const { em } = useEntityManager()
 
-const residence_areas: Ref<ResidenceArea> = ref(em.newInstance(ResidenceArea) as ResidenceArea)
+const residence_areas: Ref<ResidenceArea> = ref(
+  em.newInstance(ResidenceArea) as ResidenceArea
+)
 
 const goBackRoute = { path: `/parameters`, query: { tab: 'residenceAreas' } }
 
-
 const submitActions = computed(() => {
   let actions: AnyJson = {}
   actions[SUBMIT_TYPE.SAVE_AND_BACK] = goBackRoute
@@ -57,6 +58,7 @@ const submitActions = computed(() => {
 })
 
 const rules = () => [
-  (label: string | null) => (label !== null && label.length > 0) || i18n.t('please_enter_a_value'),
+  (label: string | null) =>
+    (label !== null && label.length > 0) || i18n.t('please_enter_a_value'),
 ]
 </script>

+ 48 - 41
pages/parameters/subdomains/new.vue

@@ -2,27 +2,27 @@
   <main>
     <LayoutContainer>
       <UiForm
-          ref="form"
-          :model="Subdomain"
-          :entity="subdomain"
-          :submitActions="submitActions"
-          :validation-pending="validationPending"
-          :refresh-profile="true"
+        ref="form"
+        :model="Subdomain"
+        :entity="subdomain"
+        :submitActions="submitActions"
+        :validation-pending="validationPending"
+        :refresh-profile="true"
       >
         <v-container :fluid="true" class="container">
           <v-row>
             <v-col cols="12" sm="6">
-              <div>{{ $t('pleaseEnterYourNewSubdomain')}} :</div>
+              <div>{{ $t('pleaseEnterYourNewSubdomain') }} :</div>
             </v-col>
           </v-row>
           <v-row>
             <v-col cols="12" sm="6">
               <UiInputText
-                  v-model="subdomain.subdomain"
-                  field="subdomain"
-                  type="string"
-                  :rules="rules()"
-                  @update:modelValue="onSubdomainUpdate"
+                v-model="subdomain.subdomain"
+                field="subdomain"
+                type="string"
+                :rules="rules()"
+                @update:modelValue="onSubdomainUpdate"
               />
             </v-col>
           </v-row>
@@ -35,7 +35,6 @@
               <v-icon>fa fa-check</v-icon>
               <i class="ml-2">{{ $t('this_subdomain_is_available') }}</i>
             </span>
-
           </div>
         </v-container>
 
@@ -49,18 +48,17 @@
       </UiForm>
     </LayoutContainer>
   </main>
-
 </template>
 
 <script setup lang="ts">
-import {useEntityManager} from "~/composables/data/useEntityManager";
-import Subdomain from "~/models/Organization/Subdomain";
-import {SUBMIT_TYPE} from "~/types/enum/enums";
-import {AnyJson} from "~/types/data";
-import SubdomainValidation from "~/services/validation/subdomainValidation";
-import {Ref} from "@vue/reactivity";
-import {useSubdomainValidation} from "~/composables/form/validation/useSubdomainValidation";
-import _ from "lodash";
+import { useEntityManager } from '~/composables/data/useEntityManager'
+import Subdomain from '~/models/Organization/Subdomain'
+import { SUBMIT_TYPE } from '~/types/enum/enums'
+import { AnyJson } from '~/types/data'
+import SubdomainValidation from '~/services/validation/subdomainValidation'
+import { Ref } from '@vue/reactivity'
+import { useSubdomainValidation } from '~/composables/form/validation/useSubdomainValidation'
+import _ from 'lodash'
 
 const i18n = useI18n()
 
@@ -78,7 +76,7 @@ const submitActions = computed(() => {
   return actions
 })
 
-const form: Ref<HTMLCanvasElement | null> = ref(null);
+const form: Ref<HTMLCanvasElement | null> = ref(null)
 const subdomainAvailable: Ref<boolean | null> = ref(null)
 const validationPending: Ref<boolean> = ref(false)
 
@@ -92,7 +90,7 @@ const inputDelay = 600
  * @param subdomain
  */
 const checkAvailability = async (subdomain: string) => {
-  subdomainAvailable.value = await subdomainValidation.isAvailable(subdomain);
+  subdomainAvailable.value = await subdomainValidation.isAvailable(subdomain)
   validationPending.value = false
 
   //@ts-ignore
@@ -103,12 +101,15 @@ const checkAvailability = async (subdomain: string) => {
  * Version debounced de la fonction checkAvailability
  * @see https://docs-lodash.com/v4/debounce/
  */
-const checkAvailabilityDebounced: _.DebouncedFunc<() => void> = _.debounce(async () => {
-  if (subdomain.value.subdomain === null) {
-    return
-  }
-  await checkAvailability(subdomain.value.subdomain);
-}, inputDelay)
+const checkAvailabilityDebounced: _.DebouncedFunc<() => void> = _.debounce(
+  async () => {
+    if (subdomain.value.subdomain === null) {
+      return
+    }
+    await checkAvailability(subdomain.value.subdomain)
+  },
+  inputDelay
+)
 
 const onSubdomainUpdate = () => {
   subdomainAvailable.value = null
@@ -120,19 +121,25 @@ const onSubdomainUpdate = () => {
  * Règles de validation
  */
 const rules = () => [
-  (subdomain: string | null) => (subdomain !== null && subdomain.length > 0) || i18n.t('please_enter_a_value_for_the_subdomain'),
-  (subdomain: string | null) => (subdomain !== null && subdomain.length >= 2 && subdomain.length <=60) || i18n.t('subdomain_need_to_have_0_to_60_cars'),
-  (subdomain: string | null) => SubdomainValidation.isValid(subdomain) || i18n.t('subdomain_can_not_contain_spaces_or_special_cars'),
-  async () => (subdomainAvailable.value !== false) || i18n.t('this_subdomain_is_already_in_use')
+  (subdomain: string | null) =>
+    (subdomain !== null && subdomain.length > 0) ||
+    i18n.t('please_enter_a_value_for_the_subdomain'),
+  (subdomain: string | null) =>
+    (subdomain !== null && subdomain.length >= 2 && subdomain.length <= 60) ||
+    i18n.t('subdomain_need_to_have_0_to_60_cars'),
+  (subdomain: string | null) =>
+    SubdomainValidation.isValid(subdomain) ||
+    i18n.t('subdomain_can_not_contain_spaces_or_special_cars'),
+  async () =>
+    subdomainAvailable.value !== false ||
+    i18n.t('this_subdomain_is_already_in_use'),
 ]
-
-
 </script>
 
 <style scoped lang="scss">
-  .validationMessage {
-    font-size: 13px;
-    height: 20px;
-    min-height: 20px;
-  }
+.validationMessage {
+  font-size: 13px;
+  height: 20px;
+  min-height: 20px;
+}
 </style>

+ 1 - 1
stores/repositories/NotificationRepository.ts

@@ -26,4 +26,4 @@ class NotificationRepository extends BaseRepository {
     }
 }
 
-export default NotificationRepository
+export default NotificationRepository

+ 1 - 1
stores/repositories/ResidenceAreasRepository.ts

@@ -6,7 +6,7 @@ class ResidenceAreasRepository extends BaseRepository {
   use = ResidenceArea
 
   /**
-   * On récupère les Notifications via le store
+   * On récupère les RésidenceArea via le store
    */
   public getResidenceAreas(): Collection<ResidenceArea> {
     return this.getQuery().get() as Collection<ResidenceArea>