Questo "progetto" nasce dall'esigenza dei coordinatori del Grest di Capralba di poter organizzare i turni degli animatori in modo rapido e senza perdite di tempo.
La fase preliminare di tutto il workflow è il setup dell'environment, che viene effettuato modificando il file .env
dentro la cartella generator
.
Devono essere inserite le seguenti variabili d'ambiente:
- per quanto riguarda il package
form
:FORM_API_KEY
: token fornito da Wufoo per accedere alle API;FORM_ENDPOINT
: link al quale trovare le risposte del form;ANIMATORS_PER_SLOT
: numero di animatori per turno;MAX_NUMBER_DAILY_SLOTS
: massimo numero di turni giornalieri;MAX_REPETITION_SAME_SLOT
: massima ripetizione dello stesso turno;
- per quanto riguarda il package
telegram
:CHANNEL_ID
: canale nel quale verrano inviati i risultati del workflow;TELEGRAM_API_KEY
: token fornito da telegram per accedere al bot.
La prima fase è la creazione del file data.dat
, un file che contiene le informazioni su:
- fasce orarie da coprire;
- giorni nei quali c'è il Grest;
- animatori presenti per quella settimana;
- disponibilità degli stessi;
- numero di animatori per turno;
- massima ripetizione dello stesso turno;
- massimo numero di turni giornalieri.
Ogni animatore compila un form Wufoo tra venerdì mattina e domenica pomeriggio, dove inserisce:
- nome;
- cognome;
- disponibilità per le seguenti fasce orarie:
- pre (dalle 08:00 alle 08:45);
- mensa (dalle 12:00 alle 13:30);
- post (dalle 17:00 alle 18:00).
Domenica sera, tramite gli script presenti nel package form
, vengono effettuate delle richieste HTTP alle API fornite da Wufoo per scaricare le risposte date dagli animatori e popolare il file data.dat
.
La seconda fase è la creazione del file turni.pdf
, il quale conterrà i turni che ogni animatore dovrà svolgere nell nella settimana di Grest.
Questa fase è la più lunga poiché richiede una prima fase di creazione dei turni, poi una seconda di formattazione dei risultati e infine una di compilazione per la creazione del file turni.pdf
.
Il file data.dat
, creato nella fase precedente, viene dato in pasto al programma turni.mod
, che viene compilato tramite ampl da riga di comando.
Questa operazione viene eseguita dagli script del package template
, che successivamente catturano l'output di ampl e lo passano alla successiva fase di formattazione.
Il risultato di questa operazione è una matrice di assegnamento tridimensionale, che indica, per ogni fascia oraria, quale animatore è presente e in quale giorno.
La matrice risultante dal programma turni.mod
viene salvata, assieme ad altre informazioni, all'interno di una classe presente nel package utils
.
L'ultimo compito degli script del package template
e della classe appena citata è quello di popolare il file template.typ
, che contiene il template base per la creazione della tabella dei turni.
La tabella contiene tre righe, una per ogni fascia oraria, e cinque colonne, una per ogni giorno di Grest.
Il file template.typ
viene compilato tramite typst per generare il file turni.pdf
.
Viene preferito il formato typ
a quello md
per la sua semplicità e facilità nella compilazione per generare il file PDF dei turni.
La terza e ultima fase è l'invio, tramite bot Telegram, dei turni generati alla fase precedente in un canale privato.
Questa fase è la più semplice ed è gestita dagli script presenti nel package telegram
, che inviano, oltre al PDF dei turni, anche il numero di turni che ogni animatore deve fare durante la settimana.