attendances.vue 2.5 KB

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