attendances.vue 2.6 KB

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