• Non ci sono risultati.

Capitolo 4: Un caso pratico: il workflow per l’automazione del processo di gestione delle

4.3 Logica di determinazione dei livelli autorizzativi

Per quanto riguarda i livelli autorizzativi, il primo passo per una corretta modellazione del processo è stato descrivere in modo accurato la logica per la determinazione del Responsabile diretto e di quello di primo livello a partire dai dati contenuti nel database della rete PiaggioNet: in esso infatti, come vedremo, esiste una tabella (che chiameremo Resp) che contiene per ogni utente i propri Responsabili, sia diretti che di primo livello, a seconda dei cosiddetti servizi, cioè delle funzioni che devono essere svolte (per esempio, un utente potrebbe avere un certo Responsabile per quanto riguarda le sue trasferte ed un altro per la gestione dei suoi infortuni e permessi di lavoro). Il servizio relativo ai Fogli di Viaggio è stato individuato come il 50, mentre ne è presente anche un altro (il numero 57) a cui far riferimento nel caso in cui per il primo non corrispondano dati (per esempio, se l’utente non ha mai realizzato trasferte). Per leggere dal database della rete i Responsabili di colui che sta compilando (o per conto del quale viene compilato) il Foglio di Viaggio, si utilizza la funzione GetResp del Web Service Service, la quale legge nella tabella Resp21 secondo le seguenti regole:

per individuare il Responsabile diretto, controlla se esiste un Responsabile dell’utente di livello 1 per il servizio 50; in caso positivo, ritorna quello, mentre in caso negativo viene restituito quello di livello 1 sul servizio 57 (la tabella è strutturata e riempita in modo tale che almeno un Responsabile diretto esista sempre per ogni impiegato);

per individuare il Responsabile di primo livello, verifica come prima cosa se esiste un Responsabile di livello 2 dell’utente per il servizio 50 (cioè se l’impiegato ha già specificato, nel corso della compilazione di altri Fogli di Viaggio, un Responsabile di primo livello); in caso positivo, viene restituito, altrimenti viene cercato il Responsabile di livello 1 del Responsabile diretto individuato precedentemente, prima sul servizio 50 e poi (in caso di insuccesso) sul servizio 57.

Deve essere inoltre presente una variabile che tenga traccia della dipendenza o meno del Responsabile di primo livello da quello diretto: infatti, se il primo dipendesse solamente dal secondo, non deve essere memorizzato sul database come Responsabile di livello 2 di un certo utente sul servizio 50, ma ciò deve essere realizzato solo nel caso in cui sia colui che compila il Foglio di Viaggio a scegliere appositamente un nuovo Responsabile di primo livello. Di conseguenza, la funzione precedente dovrà restituire anche un valore che permetta di distinguere se il Responsabile di primo livello ritornato è stato specificato dall’utente nel corso della compilazione

21 Nella tabella

Resp, la colonna relativa al livello del Responsabile rispetto all’utente è numerica, e quindi in essa il

di precedenti Fogli di Viaggio oppure se dipende dal Responsabile diretto in quanto ottenuto come suo Responsabile di livello 1.

Un’altra regola stabilisce che, nel caso in cui i due Responsabili individuati siano la stessa persona, quello di primo livello debba essere reso invisibile all’utente e, nel caso tale scelta sia confermata, il corrispondente passaggio autorizzativo non debba essere effettuato (per evitare che la stessa richiesta debba essere approvata più volte dallo stesso Responsabile).

I Responsabili dell’utente devono dunque essere letti dal database e visualizzati inizialmente nel Foglio di Viaggio secondo le modalità appena descritte. È però necessario prevedere altre regole per stabilire cosa succede se colui che richiede la trasferta decide di cambiare uno o più Responsabili. Nel caso in cui venga modificato il Responsabile diretto, deve essere sempre cambiato (per semplicità di gestione) anche quello di primo livello per l’utente: a tal fine, si deve leggere dal database il Responsabile di livello 1 del nuovo Responsabile diretto scelto (prima sul servizio 50, poi in caso di insuccesso sul 57), secondo queste regole:

se non viene trovato nessun risultato, il campo in cui si può leggere il nome del Responsabile di primo livello e gli altri ad esso associati vengono resi visibili (se prima non lo erano), ma in essi non viene visualizzato alcun valore;

se viene restituito un Responsabile, allora le informazioni ad esso correlate devono essere scritte nei campi corrispondenti, e questi devono essere resi invisibili se i nuovi Responsabili (diretto e di primo livello) coincidono, oppure in caso contrario resi nuovamente visibili se prima non lo erano.

In entrambi i casi, ovviamente, il Responsabile di primo livello è considerato dipendente da quello diretto, e quindi alla variabile apposita deve essere assegnato il valore opportuno.

Nel caso in cui sia modificato invece il Responsabile di primo livello, viene semplicemente cambiato il valore dei campi corrispondenti (rendendoli invisibili se il nuovo Responsabile selezionato coincide con quello diretto oppure, in caso contrario, visibili se prima non lo erano) ed il Responsabile di primo livello viene considerato sempre indipendente da quello diretto.

Poiché è stato previsto un caso in cui il Responsabile di primo livello può anche essere non specificato, se il chilometraggio della trasferta lo richiede sarà necessario obbligare l’utente a sceglierne uno prima di confermare le sue scelte e procedere con la compilazione del Foglio di Viaggio.

Quando la compilazione del Foglio di Viaggio è completata, i nuovi Responsabili indicati dal richiedente la trasferta dovranno essere memorizzati nella tabella Resp, per mantenerla aggiornata e poter visualizzare durante la compilazione del prossimo Foglio di Viaggio le ultime scelte fatte. Il nuovo Responsabile diretto deve sempre essere scritto sul database, sovrascrivendo quello precedente, mentre per quanto riguarda quello di primo livello la sua memorizzazione nella tabella dipenderà dal valore della variabile che distingue se esso deriva da quello diretto o se è stato indicato appositamente dall’utente, e solo in quest’ultimo caso dovrà essere memorizzato sul database, sovrascrivendo quello precedente.

Per quanto riguarda il terzo livello autorizzativo, cioè il Direttore Generale, potrà essere scelto dall’utente tra una lista di persone, memorizzata (come vedremo) in una tabella del database del sistema E-Work, in quanto attributi del processo, e quindi la loro determinazione è indipendente da quella degli altri Responsabili.