Triumph Tools è una web app sviluppata per gestire in modo efficiente hotel e allotment delle tappe del Giro d'Italia e di altre gare ciclistiche. La piattaforma permette la mappatura di eventi e l'offerta di strumenti avanzati per preventivazione e rendicontazione, centralizzando tutte le informazioni e migliorando l'efficienza operativa.
Il progetto ha coinvolto l'analisi dei flussi di lavoro esistenti e l'ottimizzazione dei processi operativi, concentrandosi sull'integrazione delle funzionalità in un sistema efficiente. Dopo l'analisi iniziale, sono stati sviluppati e testati moduli incrementali, con feedback continuo degli utenti per affinare il prodotto finale. Questo processo iterativo ha garantito un software gestionale completo e pronto all'uso.
La gestione degli hotel consente di visualizzare e modificare le informazioni relative agli hotel associati a vari eventi. Gli utenti possono gestire dettagli come nome, città, indirizzo, numero di telefono e numero di eventi per cui l'hotel è stato utilizzato. Inoltre, è possibile visualizzare le informazioni relative ai ristoranti associati a ciascun hotel, come nome e numero di telefono.
La gestione degli eventi consente di visualizzare e modificare le informazioni relative agli eventi gestiti. Gli utenti possono gestire dettagli come la data di inizio e fine, il numero di tappe, e lo stato dell'evento, ad esempio attivo o concluso. Il calendario delle fasi dell'evento mostra le diverse fasi di un evento, con informazioni sulla località di riferimento, il periodo e la tipologia della fase, come tappe o giorni di riposo.
La gestione delle richieste di gruppi per un evento consente di visualizzare e modificare le informazioni relative alle richieste di gruppi. Gli utenti possono gestire dettagli come date, sistemazioni, parcheggi e lo stato della richiesta, come confermata o annullata. All'interno di ogni richiesta è possibile personalizzare le richieste che differiscono dalle casistiche standard per ogni partecipante in base alle esigenze specifiche per la singola tappa.
La rooming list mostra la lista delle assegnazioni di camere per un evento, con un riepilogo dettagliato delle prenotazioni per un singolo partecipante, incluso il totale delle spese e le notti prenotate. In questa schermata è necessario visualizzare contemporaneamente tutte le assegnazioni dell'evento, gestendo quindi diverse migliaia di informazioni.
La schermata di assegnazione delle camere consente agli organizzatori di selezionare un hotel per un determinato gruppo e fase dell'evento. Vengono visualizzate le camere disponibili, la scadenza delle opzioni e altre note rilevanti. Ogni ricerca è effettuata in base a filtri specifici, come il numero di camere richieste e la tipologia di camera. Sono inseriti anche filtri secondari non obbligatori per identificare le camere più adatte ed economicamente vantaggiose.
La situazione contabile dell’evento mostra un riepilogo contabile, con spese totali, importi pagati e importi ancora da pagare. Mostra i dettagli per ogni hotel, con informazioni su pagamenti, margini e note aggiuntive.
Le entità sono state implementate con un sistema CRUD completo, consentendo agli utenti di creare, leggere, aggiornare ed eliminare informazioni relative a hotel, eventi e richieste di gruppi. E' presente una ricerca rapida, un sistema di filtri, paginazione e ordinamento, e la visualizzazione di informazioni dettagliate per ogni entità. Ogni modifica effettuata è versionata per consentire il ripristino delle versioni precedenti. Nella fase di creazione e modifica delle entità, sono stati implementati controlli di validazione lato backend per garantire l'integrità dei dati inseriti e lato frontend per anticipare la risoluzione di errori.
La rooming list richiede la gestione di un gran numero di informazioni, con la necessità di visualizzare e modificare le assegnazioni delle camere per ogni partecipante. Oltre all'implementazione dei filtri per limitare le informazioni visibili alle sole rilevanti per l'utente, il caso peggiore computazionalmente è stato gestito con la virtualizzazione di una tabella, che consente di visualizzare solo le righe necessarie per il rendering della pagina. Questo approccio ha permesso di gestire le diverse migliaia di informazioni necessarie senza compromettere le prestazioni dell'applicazione.
L'API è stata implementata con tRPC e superjson, garantendo che le chiamate API siano sempre coerenti con i tipi di dati definiti nel frontend. Questo approccio ha semplificato la gestione dei dati e ridotto il rischio di errori durante le comunicazioni tra il frontend e il backend. Inoltre, è stato implementato un sistema di autenticazione e autorizzazione per garantire che solo gli utenti autorizzati possano accedere a determinate funzionalità e dati sensibili.
La gestione degli errori è stata implementata in modo da garantire che gli utenti ricevano feedback chiari e utili in caso di problemi durante l'utilizzo dell'applicazione. Sono stati implementati messaggi di errore personalizzati e un sistema di logging per monitorare e risolvere eventuali problemi in modo tempestivo. Inoltre, sono stati implementati controlli di validazione per garantire che i dati inseriti siano corretti e coerenti.
L'applicazione consente di importare ed esportare dati in formato CSV, facilitando la gestione delle informazioni e l'integrazione con altri sistemi. Gli utenti possono caricare file CSV contenenti informazioni sugli hotel, eventi e richieste di gruppi, e l'applicazione gestisce automaticamente la creazione o l'aggiornamento delle entità corrispondenti. Inoltre, è possibile esportare le informazioni in formato CSV per una facile condivisione e analisi.
L'applicazione consente la generazione massiva di documenti, come contratti e fatture, per semplificare la gestione delle informazioni e ridurre il carico di lavoro degli operatori. Gli utenti possono selezionare più entità e generare documenti personalizzati in base a modelli predefiniti. Per la generazione dei singoli documenti è stato utilizzato Handlebars per la creazione di template HTML, che sono stati poi convertiti in PDF utilizzando Puppeteer. Questo approccio ha permesso di creare documenti professionali e personalizzati in modo rapido ed efficiente. Essendo documenti massivi per un numero elevato di richieste, è stato implementato un sistema di coda per la generazione dei documenti e una compressione dell'archivio in ZIP, che consente di gestire le richieste in modo efficiente e di evitare sovraccarichi del server.