Files
SIRH/frontend/services/absences.ts
tristan 2a8c874985
Some checks failed
Auto Tag Develop / tag (push) Has been cancelled
feat : ajout des demi-journées d'absence dans le calendrier et l'export pdf
2026-02-10 16:11:09 +01:00

87 lines
2.2 KiB
TypeScript

import type { Absence } from './dto/absence'
import type { HalfDay } from './dto/half-day'
import { extractItems } from '~/utils/api'
type ListAbsencesFilters = {
from?: string
to?: string
siteIds?: number[]
}
export const listAbsences = async (filters: ListAbsencesFilters = {}) => {
const api = useApi()
const query: Record<string, string | string[]> = {}
if (filters.from) {
query['endDate[after]'] = filters.from
}
if (filters.to) {
query['startDate[before]'] = filters.to
}
if (filters.siteIds && filters.siteIds.length > 0) {
query['employee.site[]'] = filters.siteIds.map((id) => `/api/sites/${id}`)
}
const data = await api.get<Absence[] | { 'hydra:member'?: Absence[] }>(
'/absences',
query,
{ toast: false }
)
return extractItems<Absence>(data)
}
export const createAbsence = async (payload: {
employeeId: number
typeId: number
startDate: string
startHalf: HalfDay
endDate: string
endHalf: HalfDay
comment?: string
}) => {
const api = useApi()
return api.post<Absence>('/absences', {
employee: `/api/employees/${payload.employeeId}`,
type: `/api/absence_types/${payload.typeId}`,
startDate: payload.startDate,
startHalf: payload.startHalf,
endDate: payload.endDate,
endHalf: payload.endHalf,
comment: payload.comment
}, {
toastSuccessKey: 'success.absence.create',
toastErrorKey: 'errors.absence.create'
})
}
export const updateAbsence = async (payload: {
id: number
employeeId: number
typeId: number
startDate: string
startHalf: HalfDay
endDate: string
endHalf: HalfDay
comment?: string
}) => {
const api = useApi()
return api.patch<Absence>(`/absences/${payload.id}`, {
employee: `/api/employees/${payload.employeeId}`,
type: `/api/absence_types/${payload.typeId}`,
startDate: payload.startDate,
startHalf: payload.startHalf,
endDate: payload.endDate,
endHalf: payload.endHalf,
comment: payload.comment
}, {
toastSuccessKey: 'success.absence.update',
toastErrorKey: 'errors.absence.update'
})
}
export const deleteAbsence = async (id: number) => {
const api = useApi()
return api.delete(`/absences/${id}`, {}, {
toastSuccessKey: 'success.absence.delete',
toastErrorKey: 'errors.absence.delete'
})
}