Deux lots regroupés sur la branche feat/absence-management. Suppression complète du portail client : - retire ROLE_CLIENT (security.yaml) ; User::getRoles() ajoute toujours ROLE_USER - supprime l'entité ClientTicket (+ repo, states, relations), User.client et User.allowedProjects, NotificationService, ProjectAllowedExtension, le bloc ROLE_CLIENT de MailAccessChecker - front : pages /portal, layout portal, composants client-ticket/, AdminClientTicketTab, services/dto/i18n/docs associés - fixtures : retire les users client-liot / client-acme - migration Version20260522110000 (drop client_ticket, user_allowed_projects, colonnes liées ; task_document.task_id -> NOT NULL) - tests : retire les cas obsolètes testant le blocage des clients sur le mail Module gestion des absences (WIP) : - entités / migrations (Version20260521160000, Version20260522090000) - pages absences.vue / team-absences.vue, composants frontend/components/absence/ - services front, AccrueLeaveCommand, PublicHolidayController Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
94 lines
2.1 KiB
TypeScript
94 lines
2.1 KiB
TypeScript
export type AbsenceType = 'cp' | 'mariage_pacs' | 'conge_parental' | 'deces' | 'maladie'
|
|
export type AbsenceStatus = 'pending' | 'approved' | 'rejected' | 'cancelled'
|
|
export type HalfDay = 'matin' | 'apres_midi'
|
|
|
|
export type AbsenceUserRef = {
|
|
'@id'?: string
|
|
id: number
|
|
username: string
|
|
avatarUrl: string | null
|
|
}
|
|
|
|
export type AbsenceRequest = {
|
|
'@id'?: string
|
|
id: number
|
|
user: AbsenceUserRef
|
|
type: AbsenceType
|
|
label: string
|
|
startDate: string
|
|
endDate: string
|
|
startHalfDay: HalfDay | null
|
|
endHalfDay: HalfDay | null
|
|
countedDays: number
|
|
reason: string | null
|
|
justificationFileName: string | null
|
|
justificationUrl: string | null
|
|
status: AbsenceStatus
|
|
rejectionReason: string | null
|
|
createdAt: string
|
|
reviewedAt: string | null
|
|
reviewedBy: AbsenceUserRef | null
|
|
}
|
|
|
|
export type AbsenceRequestWrite = {
|
|
type: AbsenceType
|
|
startDate: string
|
|
endDate: string
|
|
startHalfDay?: HalfDay | null
|
|
endHalfDay?: HalfDay | null
|
|
reason?: string | null
|
|
}
|
|
|
|
export type AbsenceBalance = {
|
|
'@id'?: string
|
|
id: number
|
|
user: AbsenceUserRef
|
|
type: AbsenceType
|
|
label: string
|
|
period: string
|
|
acquired: number
|
|
acquiring: number
|
|
acquiredTotal: number
|
|
taken: number
|
|
pending: number
|
|
available: number
|
|
}
|
|
|
|
export type AbsencePolicy = {
|
|
'@id'?: string
|
|
id: number
|
|
type: AbsenceType
|
|
label: string
|
|
daysPerYear: number | null
|
|
daysPerEvent: number | null
|
|
justificationRequired: boolean
|
|
noticeDays: number
|
|
countWorkingDaysOnly: boolean
|
|
active: boolean
|
|
}
|
|
|
|
export type AbsencePolicyWrite = {
|
|
daysPerYear?: number | null
|
|
daysPerEvent?: number | null
|
|
justificationRequired?: boolean
|
|
noticeDays?: number
|
|
countWorkingDaysOnly?: boolean
|
|
active?: boolean
|
|
}
|
|
|
|
export type AbsencePreviewPayload = {
|
|
type: AbsenceType
|
|
startDate: string
|
|
endDate: string
|
|
startHalfDay?: HalfDay | null
|
|
endHalfDay?: HalfDay | null
|
|
}
|
|
|
|
export type AbsencePreviewResult = {
|
|
countedDays: number
|
|
period: string | null
|
|
available: number | null
|
|
projectedAvailable: number | null
|
|
justificationRequired: boolean
|
|
}
|