OLD CONTENTS AHEAD: be warned that this post is quite older (written that a year ago). Maybe you can try looking something new in related posts...
Verifica questa notizia !

SFX (un prodotto della ExLibris) gestisce le richieste di Document Delivery attraverso un sistema di segnalazione via e-mail delle richieste, demandandone l’intera gestione ai bibliotecari delegati a gestire tali richieste. Purtroppo accade che certe richieste finiscano nello “spam” o che, soprattutto in periodi di molto lavoro, vengano trascurate. Peggio ancora quando, magari per distrazione, non si notificano ai colleghi le avvenute prese in carico delle richieste, provocando confusione sia nell’utente (che si vede recapitare più risposte) che nello staff di gestione.

Con queste premesse si è reso necessario pensare ad un sistema di gestione alternativo o complementare per la gestione di suddette richieste. La prima cosa da fare è vedere in quale modo SFX gestisce tali richieste: il tutto avviene attraverso una serie di templates html delegati a gestire i moduli, terminando con la chiamata ad un CGI-BIN (docdel.cgi) che si trova in ogni istanza di SFX (/exlibris/sfx_ver/sfx_version_3/[istanza]/cgi/public).

Questo CGI-BIN si occupa sia di visualizzare il form di richiesta che formattare l’email da inoltrare allo staff dedicato al DD. L’idea è di utilizzare un database MySQL (già presente sul sistema poichè SFX utilizza proprio MySQL…) e di creare un semplice gestionale basato su MySQL e PHP.

La struttura della tabella delle richieste è la seguente:

CREATE TABLE  `ReqDD` (
 `ID` int(11) NOT NULL auto_increment,
 `eMail` varchar(255) NOT NULL default '',
 `Request` text NOT NULL,
 `Status` smallint(6) NOT NULL default '0',
 `Owner` varchar(80) NOT NULL default '',
 `AddDate` datetime NOT NULL default '0000-00-00 00:00:00',
 PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Richieste DD da SFX';

e semplicemente si tratta di inserire queste righe nel docdel.cgi:

10a11,15
> # by Michele <---
> use DBI;
> use Mysql;
> # --->
>
247a253,262
>
>     # by Michele <---
>     # Ora apri connessione al DB extra su localhost
>     my $myDbh = Mysql->connect("localhost", "[database]", " [utente]", "[password]");
>     my $myquery = "INSERT INTO ReqDD (eMail,Request,Status,AddDate) VALUES (".$myDbh->quote($email_sender).",".$myDbh->quote($message).",0,NOW());";
>     my $queryExec = $myDbh->query($myquery) or die "Can't execute SQL statement: ", $myDbh->errstr(), "\n";
>     # -->
>     my $lastid = $queryExec->insertid($myquery);
>    
>     $message .= "\n\nRequest ID $lastid\n";

Due parole su cosa succede. La modifica del docdel.cgi inserisce una query di INSERT poco prima dell’invio della mail, nella subroutine send_email, aggiungendo in coda alla stessa e-mail l’ID della richiesta appena generata. L’ID, come da descrizione della tabella, è AUTO_INCREMENT e riflette l’ID della richiesta che utilizzeremo nel gestionale in PHP che dopo descriverò.

La modifica applicata è assolutamente trasparente sia all’utente che ad SFX e prevede sempre l’invio della mail. Ovviamente ci sono ampi margini di miglioramento, tra cui una più capillare gestione della richiesta (inserire nel DB l’ISSN, l’indirizzo, etc etc…). Tuttavia in questa prima fase ci accontenteremo di una gestione più semplice.

Ora passiamo alla fase di gestione vera e propria. Essendo un fan del PHP, perlomeno per le applicazioni web-based, ho deciso di puntare su questa soluzione. Semplicemente ho affiancato due ulteriori tabelle:

CREATE TABLE  `Messages` (
 `ID` int(11) NOT NULL auto_increment,
 `requestId` int(11) NOT NULL default '0',
 `Author` varchar(80) NOT NULL default '',
 `Message` text NOT NULL,
 `AddDate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
 PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Messaggi e risposte';
CREATE TABLE  `Users` (
 `ID` varchar(80) NOT NULL default '',
 `Password` varchar(255) NOT NULL default '',
 `Name` text NOT NULL,
 `Surname` text NOT NULL,
 `eMail` text NOT NULL,
 `Description` text NOT NULL,
 `ACL` text NOT NULL,
 `isEnabled` tinyint(1) NOT NULL default '0',
 `AddDate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
 `lastLogin` timestamp NOT NULL default '0000-00-00 00:00:00',
 PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

dove poter gestire gli utenti ed una semplice messaggistica. In realtà possiamo anche prevedere, come ho fatto, una ulteriore tabella di log per tenere traccia di tutte le operazioni.

A lato alcuni screenshot di come ho realizzato il DD ILL Manager con alcuni esempi reali. Dopo l’autenticazione dell’utente, necessaria per evitare utilizzi non autorizzati, semplicemente visualizzo un elenco delle richieste, con lo sfondo di diversi colori (a seconda dello stato della richiesta: NUOVA, PRESA IN CARICO, COMPLETATA) e la possibilità di aggiungere note alla richiesta, rispondere all’utente usando un template (evitando così discrepanza delle risposte) oppure, nel caso la richiesta si stata soddisfatta, chiuderla.

Con questo sistema tutto lo Staff ha a disposizione la medesima interfaccia conoscendo, in ogni momento, lo stato reale delle singole richieste.

Ovviamente anche in questo caso ci sono ampi margini di miglioramento, tra cui un sistema di notifica (utilizzando, ad esempio, procedure programmate con l’utilizzo del crond) che sollecita lo Staff nel caso vi siano richieste inevase da giorni. Oppure, ancora, un sistema di escalation delle richieste.

Addirittura, con l’uso di appositi parsers, si può prevedere un sistema di ticketing in cui la risposta dell’utente viene automaticamente assegnata alla richiesta (usando, ad esempio, il Subject delle e-mail. Es. [REF#8] => Richiesta con ID 8).

Possiamo, se vogliamo stare più tranquilli, fare il parsing delle richieste direttamente via PHP:

foreach(explode("\n",stripslashes($Request)) as $reqLine) {
  if(trim($reqLine)) {
    list($key, $value) = explode(':',$reqLine,2);
    $reqMessage .= "$key: <b>$value</b><br>";
  }
}

Non posso ancora rilasciare alcun codice poichè il progetto non è completo. Tuttavia ci tenevo a rendere pubblica un’idea che può aiutare molti colleghi alle prese con il medesimo problema.