feat : ajout des sites pour les employés et retour arrière sur l'impression

This commit is contained in:
2026-02-04 18:00:46 +01:00
parent a5dcd5e3e9
commit 9568324a4a
16 changed files with 819 additions and 626 deletions

View File

@@ -16,7 +16,8 @@ export const createAbsenceType = async (
) => {
const api = useApi()
return api.post<AbsenceType>('/absence_types', payload, {
toastSuccessMessage: 'Type créé.'
toastSuccessKey: 'success.absenceType.create',
toastErrorKey: 'errors.absenceType.create'
})
}
@@ -26,13 +27,15 @@ export const updateAbsenceType = async (
) => {
const api = useApi()
return api.patch<AbsenceType>(`/absence_types/${id}`, payload, {
toastSuccessMessage: 'Type mis à jour.'
toastSuccessKey: 'success.absenceType.update',
toastErrorKey: 'errors.absenceType.update'
})
}
export const deleteAbsenceType = async (id: number) => {
const api = useApi()
return api.delete(`/absence_types/${id}`, {}, {
toastSuccessMessage: 'Type supprimé.'
toastSuccessKey: 'success.absenceType.delete',
toastErrorKey: 'errors.absenceType.delete'
})
}

View File

@@ -26,7 +26,8 @@ export const createAbsence = async (payload: {
endDate: payload.endDate,
comment: payload.comment
}, {
toastSuccessMessage: 'Absence créée.'
toastSuccessKey: 'success.absence.create',
toastErrorKey: 'errors.absence.create'
})
}
@@ -46,13 +47,15 @@ export const updateAbsence = async (payload: {
endDate: payload.endDate,
comment: payload.comment
}, {
toastSuccessMessage: 'Absence mise à jour.'
toastSuccessKey: 'success.absence.update',
toastErrorKey: 'errors.absence.update'
})
}
export const deleteAbsence = async (id: number) => {
const api = useApi()
return api.delete(`/absences/${id}`, {}, {
toastSuccessMessage: 'Absence supprimée.'
toastSuccessKey: 'success.absence.delete',
toastErrorKey: 'errors.absence.delete'
})
}

View File

@@ -1,5 +1,8 @@
import type { Site } from './site'
export type Employee = {
id: number
firstName: string
lastName: string
site?: Site | null
}

View File

@@ -0,0 +1,5 @@
export type Site = {
id: number
name: string
color: string
}

View File

@@ -11,26 +11,45 @@ export const listEmployees = async () => {
return extractItems<Employee>(data)
}
export const createEmployee = async (payload: Pick<Employee, 'firstName' | 'lastName'>) => {
export const createEmployee = async (payload: {
firstName: string
lastName: string
siteId?: number | null
}) => {
const api = useApi()
return api.post<Employee>('/employees', payload, {
toastSuccessMessage: 'Employé créé.'
return api.post<Employee>('/employees', {
firstName: payload.firstName,
lastName: payload.lastName,
site: payload.siteId ? `/api/sites/${payload.siteId}` : null
}, {
toastSuccessKey: 'success.employee.create',
toastErrorKey: 'errors.employee.create'
})
}
export const updateEmployee = async (
id: number,
payload: Pick<Employee, 'firstName' | 'lastName'>
payload: {
firstName: string
lastName: string
siteId?: number | null
}
) => {
const api = useApi()
return api.patch<Employee>(`/employees/${id}`, payload, {
toastSuccessMessage: 'Employé mis à jour.'
return api.patch<Employee>(`/employees/${id}`, {
firstName: payload.firstName,
lastName: payload.lastName,
site: payload.siteId ? `/api/sites/${payload.siteId}` : null
}, {
toastSuccessKey: 'success.employee.update',
toastErrorKey: 'errors.employee.update'
})
}
export const deleteEmployee = async (id: number) => {
const api = useApi()
return api.delete(`/employees/${id}`, {}, {
toastSuccessMessage: 'Employé supprimé.'
toastSuccessKey: 'success.employee.delete',
toastErrorKey: 'errors.employee.delete'
})
}

View File

@@ -0,0 +1,36 @@
import type { Site } from './dto/site'
import { extractItems } from '~/utils/api'
export const listSites = async () => {
const api = useApi()
const data = await api.get<Site[] | { 'hydra:member'?: Site[] }>(
'/sites',
{},
{ toast: false }
)
return extractItems<Site>(data)
}
export const createSite = async (payload: Pick<Site, 'name' | 'color'>) => {
const api = useApi()
return api.post<Site>('/sites', payload, {
toastSuccessKey: 'success.site.create',
toastErrorKey: 'errors.site.create'
})
}
export const updateSite = async (id: number, payload: Pick<Site, 'name' | 'color'>) => {
const api = useApi()
return api.patch<Site>(`/sites/${id}`, payload, {
toastSuccessKey: 'success.site.update',
toastErrorKey: 'errors.site.update'
})
}
export const deleteSite = async (id: number) => {
const api = useApi()
return api.delete(`/sites/${id}`, {}, {
toastSuccessKey: 'success.site.delete',
toastErrorKey: 'errors.site.delete'
})
}