attendances.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <template>
  2. <div>
  3. <LayoutParametersSection>
  4. <h4>{{ $t('configuration') }}</h4>
  5. <UiLoadingPanel v-if="pending" />
  6. <UiForm v-else-if="parameters !== null" v-model="parameters">
  7. <v-row>
  8. <v-col cols="12">
  9. <h5 class="pa-2">{{ $t('showing') }}</h5>
  10. <UiInputCheckbox
  11. v-model="parameters.handlePresence"
  12. field="handlePresence"
  13. />
  14. <div v-if="organizationProfile.isSchool">
  15. <h5 class="pa-2">{{ $t('alert') }}</h5>
  16. <UiInputCheckbox
  17. v-model="parameters.sendAttendanceEmail"
  18. field="sendAttendanceEmail"
  19. label="sendAttendanceEmail"
  20. />
  21. <UiInputCheckbox
  22. v-model="parameters.sendAttendanceSms"
  23. field="sendAttendanceSms"
  24. />
  25. <UiInputCheckbox
  26. v-model="parameters.notifyAdministrationAbsence"
  27. field="notifyAdministrationAbsence"
  28. />
  29. <UiInputNumber
  30. v-if="parameters.notifyAdministrationAbsence"
  31. v-model="parameters.numberConsecutiveAbsences"
  32. field="numberConsecutiveAbsences"
  33. :rules="rules()"
  34. />
  35. </div>
  36. </v-col>
  37. </v-row>
  38. </UiForm>
  39. </LayoutParametersSection>
  40. <LayoutParametersSection>
  41. <LayoutParametersEntityTable
  42. :model="AttendanceBookingReason"
  43. :title="$t('attendanceBookingReasons')"
  44. :columns-definitions="[{ property: 'reason' }]"
  45. />
  46. </LayoutParametersSection>
  47. </div>
  48. </template>
  49. <script setup lang="ts">
  50. import type { AsyncData } from '#app'
  51. import Parameters from '~/models/Organization/Parameters'
  52. import { useEntityFetch } from '~/composables/data/useEntityFetch'
  53. import { useOrganizationProfileStore } from '~/stores/organizationProfile'
  54. import UrlUtils from '~/services/utils/urlUtils'
  55. import AttendanceBookingReason from '~/models/Booking/AttendanceBookingReason'
  56. definePageMeta({
  57. name: 'parameters_attendances_page',
  58. })
  59. const { fetch } = useEntityFetch()
  60. const i18n = useI18n()
  61. const organizationProfile = useOrganizationProfileStore()
  62. if (organizationProfile.parametersId === null) {
  63. throw new Error('Missing organization parameters id')
  64. }
  65. const { data: parameters, pending } = fetch(
  66. Parameters,
  67. organizationProfile.parametersId,
  68. ) as AsyncData<Parameters | null, Error | null>
  69. const rules = () => [
  70. (numberConsecutiveAbsences: string | null) =>
  71. (numberConsecutiveAbsences !== null &&
  72. parseInt(numberConsecutiveAbsences) > 0) ||
  73. i18n.t('please_enter_a_value'),
  74. ]
  75. </script>