attendances.vue 2.3 KB

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