attendances.vue 2.2 KB

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