attendances.vue 2.3 KB

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