All checks were successful
Auto Tag Develop / tag (push) Successful in 7s
| Numéro du ticket | Titre du ticket | |------------------|-----------------| | | | ## Description de la PR ## Modification du .env ## Check list - [ ] Pas de régression - [ ] TU/TI/TF rédigée - [ ] TU/TI/TF OK - [ ] CHANGELOG modifié Reviewed-on: #12 Co-authored-by: tristan <tristan@yuno.malio.fr> Co-committed-by: tristan <tristan@yuno.malio.fr>
79 lines
2.8 KiB
TypeScript
79 lines
2.8 KiB
TypeScript
import type { Ref } from 'vue'
|
|
import type { Absence } from '~/services/dto/absence'
|
|
import type { EmployeeLeaveSummary } from '~/services/dto/employee-leave-summary'
|
|
import type { Employee } from '~/services/dto/employee'
|
|
import { CONTRACT_TYPES } from '~/services/dto/contract'
|
|
import { listAbsences } from '~/services/absences'
|
|
import { getEmployeeLeaveSummary, updateFractionedDays, updatePaidLeaveDays } from '~/services/employee-leave-summary'
|
|
import { listPublicHolidays } from '~/services/public-holidays'
|
|
|
|
export const useEmployeeLeave = (employee: Ref<Employee | null>, reloadEmployee: () => Promise<void>) => {
|
|
const employeeAbsences = ref<Absence[]>([])
|
|
const leaveSummary = ref<EmployeeLeaveSummary | null>(null)
|
|
const publicHolidays = ref<Record<string, string>>({})
|
|
const isLeaveLoading = ref(false)
|
|
const leaveDataLoaded = ref(false)
|
|
|
|
const getLeaveYear = () => {
|
|
const now = new Date()
|
|
const isForfait = employee.value?.contract?.type === CONTRACT_TYPES.FORFAIT
|
|
return isForfait
|
|
? now.getFullYear()
|
|
: (now.getMonth() >= 5 ? now.getFullYear() + 1 : now.getFullYear())
|
|
}
|
|
|
|
const loadLeaveData = async () => {
|
|
if (!employee.value || isLeaveLoading.value) return
|
|
isLeaveLoading.value = true
|
|
try {
|
|
const isForfait = employee.value.contract?.type === CONTRACT_TYPES.FORFAIT
|
|
const leaveYear = getLeaveYear()
|
|
const from = isForfait ? `${leaveYear}-01-01` : `${leaveYear - 1}-06-01`
|
|
const to = isForfait ? `${leaveYear}-12-31` : `${leaveYear}-05-31`
|
|
const holidayYears = isForfait ? [leaveYear] : [leaveYear - 1, leaveYear]
|
|
|
|
const [absences, summary, ...holidayResults] = await Promise.all([
|
|
listAbsences({ from, to, employeeId: employee.value.id }),
|
|
getEmployeeLeaveSummary(employee.value.id, leaveYear),
|
|
...holidayYears.map((y) => listPublicHolidays('metropole', y))
|
|
])
|
|
employeeAbsences.value = absences
|
|
leaveSummary.value = summary
|
|
publicHolidays.value = Object.assign({}, ...holidayResults)
|
|
leaveDataLoaded.value = true
|
|
} finally {
|
|
isLeaveLoading.value = false
|
|
}
|
|
}
|
|
|
|
const resetLoaded = () => {
|
|
leaveDataLoaded.value = false
|
|
}
|
|
|
|
const submitFractionedDays = async (days: number) => {
|
|
if (!employee.value) return
|
|
const year = leaveSummary.value?.year ?? undefined
|
|
await updateFractionedDays(employee.value.id, days, year)
|
|
await reloadEmployee()
|
|
}
|
|
|
|
const submitPaidLeaveDays = async (days: number) => {
|
|
if (!employee.value) return
|
|
const year = leaveSummary.value?.year ?? undefined
|
|
await updatePaidLeaveDays(employee.value.id, days, year)
|
|
await reloadEmployee()
|
|
}
|
|
|
|
return {
|
|
employeeAbsences,
|
|
leaveSummary,
|
|
publicHolidays,
|
|
isLeaveLoading,
|
|
leaveDataLoaded,
|
|
loadLeaveData,
|
|
resetLoaded,
|
|
submitFractionedDays,
|
|
submitPaidLeaveDays
|
|
}
|
|
}
|