Gestionale per sistema di accompagnamento sicuro per ragazzi con genitori troppo apprensivi.
Repository dei laboratori e del progetto finale del corso "Applicazioni Internet" tenuto dal prof. Giovanni Malnati a.a. 2018/2019.
L’applicazione dovrà realizzare l’interfaccia ed il backend di un’applicazione web per la gestione diuna forma di trasporto scolastico denominata Pedibus [1]. Per Pedibus si intende sostanzialmentel’accompagnamento a scuola a piedi dei bambini, generalmente delle elementari, da parte di accompagnatori adulti. Gli accompagnatori “prelevano” e “consegnano” i bambini ai genitori presso apposite fermate e insieme ai bambini percorrono un determinato tragitto per andare e tornare da scuola.
Compito dell’applicazione è quello di fornire supporto alla gestione e organizzazione del pedibus in particolare per:
[1] https://it.wikipedia.org/wiki/Piedibus
Tecnologie Utilizzate: Java Spring, Angular 2+, MongoDB, JWT
All'interno del sistema, gli utenti vengono suddivisi in base ai seguenti ruoli:
Ruolo in Database: (ROLE_SYSTEM-ADMIN)
L'amministratore di sistema è unico. Può gestire Anagrafica utenti, bambini e amministratori di linea, Presenze, Turni. L'utente in questione viene creato in fase di avvio del sistema e non può possedere altri ruoli.
A differenza di una semplice guida o di un amministratore di linea, questo utente può andare a modificare in qualsiasi momento le presenze di qualsiasi bambino.
Ruolo in Database: (ROLE_ADMIN)
Ogni linea può avere più amministratori della stessa. Tra questi, uno solo sarà il master: questo viene indicato nel JSON contenente i dettagli sulle linee. Il master non può essere eliminato.
Può gestire Presenze odierne, Turni e amministratori delle proprie linee.
Ruolo in Database: (ROLE_GUIDE)
Può gestire Presenze odierne solo se incaricato per il relativo turno che potrà gestire attraverso la schermata Disponibilità.
Ruolo in Database: (ROLE_USER)
L'utente genitore potrà accedere solamente alla schermata Genitore.
La schermata di login permette all'utente di accedere al sistema attraverso email e password. Da questa interfaccia è possibile accedere al recupero della password.
Il token JWT viene gestito attraverso l'AuthenticationService
che provvedere a salvare il token nello storage locale per consentire alle Guard
di indirizzare l'utente verso le pagine per lui disponibili.
L'utente potrà eseguire il recupero password attraverso l'opportuna schermata raggiungibile dal login. Questa procedura genera un token che viene inviato all'utente tramite mail. L'utente cliccherà sul link ricevuto e accederà alla schermata di recupero password: qui potrà inserire le nuove credenziali.
Questa sezione permette all'amministratore di sistema di gestire utenti e bambini. La visualizzazione è paginata e offre un meccanismo di ricerca.
L'utente potrà scrivere nella barra di ricerca un elenco di parole che verranno separate e utilizzate lato backend per costruire una regex per implementare una query personalizzata di Mongo.
L'amministratore potrà aggiungere, modificare e eliminare utenti e bambini.
I dati per le due tipologie sono:
ROLE_USER
sarà possibile aggiungere figliROLE_ADMIN
sarà possibile indicare la linea di competenza.Abbiamo deciso che la registazione degli utenti sarà affidata all'amministratore di sistema. La scuola raccoglierà le adesioni ad inizio anno e si provvederà a caricare bambini e utenti utilizzando le informazioni personali raccolte.
Il singolo utente riceverà una mail con un link attraverso cui attivare l'account specificando una password personale.
La schermata delle presenze è costituita da due componenti principali: la toolbar attraverso la quale è possibile andare a selezionare linea, data e verso del servizio, e la lista delle prenotazioni.
Quest'ultima è suddivisa in tante parti quante sono le fermate: ognuna di queste conterrà un pulsante per ogni bambino prenotato per la specifica fermata e un bottone per poter mostrare ulteriori dettagli quali sulla posizione della stessa. Attraverso questi pulsanti, l'accompagnatore potrà indicare:
Tutte queste azione scatenano le rispettive notifiche a tutti i genitori del bambino selezionato. In caso di annullamento delle decisioni, le notifiche precedentemente inviate saranno automaticamente cancellate.
Nella parte finale della pagina è presente una sezione per poter inserire prenotazioni di bambini che si sono presentati alla fermata senza essere stati precedentemente prenotati.
Sarà possibile esportare un file .json
contenente lo stato della prenotazioni dei bambini nel turno selezionato.
L'interfaccia per la gestione dei turni viene gestita esclusivamente da amministratori di linea e di sistema. Dopo aver scelto il turno da gestire attraverso la toolbar, viene mostrato lo stato del turno e l'elenco delle disponibilità ricevute dagli accompagnatori suddivise nelle rispettive fermate.
Un turno può essere:
L'amministratore può usare il toggle apposito per modificare lo stato prima della scadenza.
Questa schermata permette all'utente di indicare le proprie disponibilità per un turno. E' possibile scegliere la linea e la fermata di partenza (o di arrivo) solo se il turno è aperto. Inoltre, è possibile visionare il percorso attraverso una piccola mappa riportante le fermate.
Una volta comunicata la disponibilità, la schermata restituirà un resoconto della stessa con un bottone che permetterà la sua cancellazione fino a quando l'amministratore non chiuderà il turno per procedere alle modifiche e conferme.
Una volta ricevuta la conferma, la schermata proporrà un pulsante per comunicare l'avvenuta ricezione.
In questa schermata è possibile visualizzare amministratori e guide semplici di ogni linea. Ogni amministratore di linea può operare sulla linea di sua competenza promuovendo ad amministratori o declassando a guide semplici gli accompagnatori.
Questa interfaccia è attivata a priori per qualsiasi ruolo e contiene le notifiche paginate dell'utente. Le comunicazioni vengono notificate in tempo reale grazie all'utilizzo di un WebSocket. Non appena l'utente effettua l'accesso, il sistema lo iscrive al corrispettivo endpoint per abilitare questa funzionalità.
L'utente avrà la possibilità di cancellare le notifiche lette premendo sull'apposito pulsante.
Abbiamo immaginato due tipologie di notifiche:
Abbiamo deciso di implementare le seguenti notifiche: