PieroMacaluso / Pedibus

Repository dei laboratori e del progetto finale del corso "Applicazioni Internet" tenuto dai prof. Giovanni Malnati e Antonio Servetti a.a. 2018/2019
MIT License
0 stars 0 forks source link
angular angular-material html-css-javascript java javascript restful-api spring spring-boot typescript web-application websockets

Pedibus

Gestionale per sistema di accompagnamento sicuro per ragazzi con genitori troppo apprensivi.

Languages Framework Status

Indice

Introduzione

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. Gestire gli utenti e fornire loro informazioni
  2. Tenere traccia dei bambini “caricati” e “scaricati” dal pedibus
  3. Raccogliere le disponibilità degli accompagnatori e predisporre i turni di accompagnamento.

[1] https://it.wikipedia.org/wiki/Piedibus

Struttura del Repo

Team

Pedibus

Indicazioni generali

Tecnologie Utilizzate: Java Spring, Angular 2+, MongoDB, JWT

Ruoli

All'interno del sistema, gli utenti vengono suddivisi in base ai seguenti ruoli:

Amministratore di Sistema

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.

Amministratore di Linea

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.

Accompagnatore

Ruolo in Database: (ROLE_GUIDE)

Può gestire Presenze odierne solo se incaricato per il relativo turno che potrà gestire attraverso la schermata Disponibilità.

Genitore

Ruolo in Database: (ROLE_USER)

L'utente genitore potrà accedere solamente alla schermata Genitore.

Sezioni

Login

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.

Recupero Password

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.

Anagrafica

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:

Creazione Nuovo Utente

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.

Presenze

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.

Turni

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.

Disponibilità

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.

Permessi

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.

Comunicazioni

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:

Notifiche Principali

Abbiamo deciso di implementare le seguenti notifiche: