Richieste e permessi
La pagina Richieste e permessi (/dashboard/permissions) è un calendario delle assenze sincronizzato da Libemax. È pensata per manager e figure HR operative.
Esperienza utente
Cosa si può fare
- Visualizzare le richieste di permesso/assenza in più viste:
- Giorno
- Settimana
- Mese
- Per dipartimento
- Heatmap
- Filtrare per tipo assenza, stato, dipartimento e testo di ricerca
- Consultare i pannelli laterali:
- Assenti oggi
- Assenze del team
- Richieste in attesa
- Verificare data/ora ultimo sync Libemax
Tipi di assenza
Tipo (LeaveRequestType) |
Etichetta UI | Slug CSS |
|---|---|---|
Ferie |
Ferie | vacation |
Malattia |
Malattia | sick-leave |
ROL |
ROL | rol |
ROL104 |
ROL 104 | rol-104 |
ROLStudio |
ROL Studio | rol-study |
ROLExFestivita |
ROL Ex festività | rol-ex-festivita |
ROLExFestivita è incluso nel filtro tipo, nelle viste timeline (giorno/settimana/mese), nel pannello assenti oggi e nella legenda colori (tono arancione).
Cosa non si può fare (oggi)
L'interfaccia è sola lettura: non espone approvazione o rifiuto richieste. Il metodo PermissionsService.updateLeaveRequest() esiste nel service ma non è collegato alla UI.
Chi può accedere
Chi ha la policy leaveRequests.show (tipicamente EX / EXS / SM / PO). Route protetta da requirePolicy("leaveRequests.show"); voce sidebar con requiresPolicy: "leaveRequests.show".
Vedi Accesso e ruoli.
Dettaglio tecnico
Sync Libemax
I dati arrivano dalla Lambda people, endpoint /v1/leave-requests. Lo stato sync è su /v1/leave-requests/libemax-sync.
PermissionsService.getLeaveRequests() scarica tutte le pagine automaticamente (pattern expand + reduce con limit: 200 per pagina).
Reattività filtri
Un effect combina i filtri del form con switchMap verso l'API: ogni cambio vista/data/filtro ricarica i dati. I filtri sono sincronizzati con i query params per deep-link e refresh.
flowchart LR
QP[Query params] <--> PC[PermissionsComponent]
PC --> E[effect + switchMap]
E --> PS[PermissionsService.getLeaveRequests]
PS --> LT[LeaveTimelineComponent]
PS --> AT[LeaveAbsentTodayComponent]
PS --> TA[LeaveTeamAbsencesComponent]
Tipi e stati
Modelli in src/models/leave-request.ts; label e slug in src/utils/leave-request.ts (LEAVE_TYPE_LABELS, LEAVE_TYPE_SLUGS).
Le richieste a mezza giornata (isFullDay: false) sono rese come blocchi orari nelle viste griglia giorno/settimana; in mese appaiono come chip sul giorno.
Avatar
LeaveRequestPerson espone profileImage (URL firmato da Slack sync). Timeline e pannelli lo usano tramite AvatarGroup / pipe avatar.
Componenti timeline
LeaveTimelineComponent gestisce il rendering delle cinque viste (LeaveView). I pannelli assenze sono componenti dedicati in src/components/leave-*.
File principali
| File | Ruolo |
|---|---|
src/pages/permissions/permissions.component.ts |
Stato, filtri, caricamento |
src/services/permissions.service.ts |
API leave + sync |
src/models/leave-request.ts |
Tipi, stati, DTO |
src/utils/leave-request.ts |
Label, slug, tooltip |
src/components/leave-timeline/ |
Viste calendario |
src/components/leave-absent-today/ |
Pannello assenti oggi |
src/components/leave-team-absences/ |
Pannello team |
src/guards/policy.guard.ts |
requirePolicy("leaveRequests.show") |