Relazione Progetto Database ORLUDB LUCA STECCANELLA e ORAZIO CONTARINO 9 CFU 05/08/2015
1 OBBIETTIVO DEL PROGETTO Si vuole realizzare un interfaccia per software gestionali nel settore del Vending consentendo l utilizzo di sistemi più recenti, più semplici, più economici e più funzionali fornendo una valida alternativa agli ormai datati ed estremamente costosi palmari ancora in uso. Viene previsto l utilizzo di un database centralizzato e due principali interfacce, Web ed App. Grazie alla loro forte integrazione si ottiene un servizio completo. Interfaccia web Accessibile dal sito web orludb.altervista.org è interamente dedicata al titolare dell azienda (o di chi ne fa le veci). Effettuando l accesso viene reso disponibile il pannello utente, mediante il quale sarà possibile effettuare le principali operazioni. Le operazioni sono suddivise in due aree, una riservata alla stampa dei dati, grazie alla quale è anche possibile modificare e / o rimuovere un determinato dato, l altra riservata all aggiunta di nuovi dati. Mediante l utilizzo degli appositi moduli il titolare potrà quindi effettuare qualsiasi tipo di operazione riguardante la gestione delle merci, dei distributori, dei dispositivi, degli operatori e dei furgoni. Inoltre viene fornita la possibilità di tracciare i dispositivi e i movimenti della merce nei vari distributori. In qualunque momento grazie ad un semplice click le posizioni di tutti gli operatori con i rispettivi dispositivi vengono tracciate e riportate nell apposita mappa. Interfaccia App Android L app per Android è dedicata all operatore, è compatibile con gli smartphone Android 4.4 in su. Effettuando il login l operatore avrà a disposizione le varie aree dell app che gli consentiranno di effettuare le varie operazioni. Ci sono 3 attività principali, una permette di selezionare i distributori con cui si desidera lavorare; un'altra permette di gestire il furgone (carico/scarico merci sia del furgone che dei distributori); infine c è l attività che integra Google Maps che permette di individuare i distributori e che invia la posizione dell operatore al database. Tutte le operazione vengono effettuate sul database, in questo modo il titolare è sempre al corrente di qualunque cosa succeda grazie all interfaccia web.
2 GUI WEB Dopo aver effettuato il login cliccando l apposito bottone, viene automaticamente abilitata l area che consente l accesso al pannello. Il Pannello presenta una prima area contenente un riepilogo delle informazioni del titolare d azienda. Esattamente sotto alla prima area è presente l area funzionale dell interfaccia web la quale è suddivisa in due sotto-aree, Stampa/modifica e Aggiungi. Stampa/modifica: Elenco dipendenti: Visualizza tutti i dipendenti registrati dal titolare; Elenco distributori: Visualizza tutti i distributori registrati dal titolare; Elenco furgoni: Visualizza tutti i furgoni registrati dal titolare; Elenco dispositivi: Visualizza tutti i dispositivi registrati dal titolare; Elenco merce: Visualizza tutta la merce registrata dal titolare; Elenco Movimenti: Visualizza tutti i movimenti (carico e scarico dei distributori) effettuati dagli operatori; Google maps tracking: Visualizza la posizione più recente di tutti gli smartphones; I dati, caricati nelle tabelle per la visualizzazione possono poi essere modificati e/o cancellati tramite click sugli appositi bottoni. Un messaggio di successo/errore viene visualizzato nella zona superiore dell area di visualizzazione. Aggiungi: Aggiungi dipendenti: Consente di aggiungere un nuovo dipendente; Aggiungi distributori: Consente di aggiungere un nuovo distributore; Aggiungi furgoni: Consente di aggiungere un nuovo furgone; Aggiungi dispositivi: Consente di aggiungere un nuovo dispositivo; Aggiungi Merce: Consente di aggiungere una nuova merce. APP L interfaccia dell app Android è stata realizzata in Material Design, ci sono 5 schermate principali
3 Login: In questa schermata si dovranno inserire username e PIN dell operatore per accedere. Menu: In questa schermata si può scegliere cosa fare.
4 Selezione distributori: In questa schermata si possono scegliere i distributori con cui lavorare. Gestione Furgone: In questa schermata si possono effettuare tutte le attività con le merci, furgoni e distributori tramite l apposita interfaccia.
5 Maps: Qui si trova la mappa che segnala la posizione propria e dei distributori. BACKEND Il backend è stato realizzato mediante l utilizzo di HTML, CSS, Javascript ( jquery ), Ajax, PHP con database relazionale MySql su server linux (dominio free altervista). Tutti i form, al fine di garantire una migliore presentazione all utente, sono stati gestiti con chiamate Ajax, ricaricando il contenuto delle apposite aree con i dati aggiornati tramite apposite funzioni jquery, evitando il refresh delle pagine. La sessione è gestita tramite cookie. L app comunica con il database tramite richieste http di tipo GET appositamente impostate, la pagina web tramite POST ). La connessione al database è invece effettuata tramite la funzione mysqli_connect. La gestione delle richieste (query) viene effettuata tramite le funzioni mysqli_query mysqli_fetch_array. I risultati delle richieste (query) vengono gestiti tramite jsonarray e le funzioni json_encode (PHP) e parsejson (jquery). *mysqli è stata scelta essendo mysql ormai deprecata. **GET, utilizzato dall app, i dati non sono visibili nella barra dell indirizzo in quanto la pagina non è effettivamente visibile, viene mandata solo la richiesta. **POST, utilizzato dall interfaccia web, evita di mostrare i dati nella barra dell indirizzo. NB: i dati viaggiano comunque in chiaro nell header http!
6 Struttura generale La connessione viene implementata ove richiesto mediante l inclusione del file conn.php. Questo contiene le variabili relative ai dati di connessione al database e lo stesso link di connessione. La struttura utilizzata è la seguente: <?php //Struttura select Include /conn.php ; //dati connessione, variabile $conn $query= SELECT query sql ; //stringa query sql $result=mysqli_query($conn, $query); //esecuzione query while($row=mysqli_fetch_array($result)){ //gestione risultato query } $array[] = array( ); If(count($array)==0) $array[] = array( ); "nomecolonna1" => $row["nomecolonna1"], "nomecolonna2" => $row["nomecolonna2"], "nomecolonna1" => errore, "nomecolonna2" => errore echo json_encode($array); //json encoding per sito web e/o app?> <?php //Struttura insert/delete/update Include /conn.php ; //dati connessione, variabile $conn $query= query sql ; $result=mysqli_query($conn, $query); if($result)
7 echo ok ; else echo errore ;?> I dati provenienti da una chiamata ajax vengono inviati tramite POST e quindi utilizzabili tramite l array $_POST[ idvariabileajax ]. I dati provenienti da una chiamata dall app vengono inviati tramite GET e quindi utilizzabili tramite l array $_GET[ idvariabileinviata ]. Il file conn prevede una chiamata ad una funzione. $conn=mysqli_connect($servername, $username, $password, $dbname)or die("errore Connessione"); Or die scritto dopo mysqli_connect o mysqli_query consente di bloccare la richiesta php e mandare in output la stringa passata per parametro nel caso in cui si verifichi un errore dovuto alla sintassi della query e/o alla richiesta di connessione. APP L applicazione è stata sviluppata in codice Java nativo Android sfruttando l IDE Android Studio. L API minima è la v19. L interfaccia grafica è stata realizzata in Material Design con l uso della libreria AppCompat. Ovviamente è stato usato un paradigma di sviluppo ad oggetti, per la realizzazione dell app sono stati usati alcuni design patterns come il singleton. Nel codice Java viene gestita la parte logica dell app, nei file XML vengono invece creati gli elementi dell interfaccia grafica. Sono presenti 5 attività più altre classi, per comunicare con il database viene stabilita una connessione http che consente di scegliere una qualunque query contenuta nel file androidfunctions.php presente nel server. Se si tratta di una select per manipolare e ricevere i dati viene utilizzato un array JSON. Se si tratta di Insert o Update, viene restituita una stringa che indica l esito dell operazione. Di seguito la rassegna di attività e classi: Classe Connect: Questa classe contiene il metodo che permette di inviare query al database: Classe DBData: Questa classe è un singleton, permette di salvare alcuni dati prelevati dal database. Classe LoginActivity: Questa classe rappresenta l attività di login, essa è l attività che parte una volta avviata l app. Se il logi ha seuccesso istanzia l attività menu. Classe menu: Rappresenta l attività del menù utente, che permette di avviare le altre attività.
8 Classe DistrSelector: Rappresenta l attività che permette di scegliere i distributori su cui si vuole lavorare. Classe MapsActivity: Rappresenta l attività che usa le API di Google Maps per indicare la posizione dei distributori. Classe GPSTracker: Istanziata in MapsActivity, permette di tracciare la posizione dell operatore e inviarla al database. Classe VanManager: Rappresenta l attività di gestione del furgone che contiene tutti metodi per spostare la merce.
9 SVILUPPO E PROGETTAZIONE È stata sviluppata una strategia di sviluppo mista, che unisce i vantaggi della strategia Top-Down e Down-Top. Infatti nel mentre che i requisiti sono stati suddivisi in comparti e si evolvevano è stato comunque creato uno schema scheletro. Per poi unire i pezzi fra loro. Per lo sviluppo dell app è stato un modello di sviluppo agile. Modelli E-R Scheletro (Vedi PDF)
10 Completo (Vedi PDF)
11 Dettaglio Entità Nome Scopo Struttura Relazioni Distributore Definisce il distributore, specificandone proprietario e i vari ID, idproprietario, idoperatore, idarea, contatorebattute, haccp, Operatore, Area, Proprietario, MerceMagazzino, Rifornimento parametri. contatorevendite, codsaccaincasso. Merce Rappresenta tutte le Id, descrizione. MerceMagazzino MerceMagazzino Furgne Rifornimento Area Proprietario Dispositivo Operatore merci esistenti. Rappresenta tutte le merci disponibili nel magazzino di un proprietario. Rappresenta i furgoni di un determinato proprietario, indicandone la disponibilità. Rappresenta i rifornimenti. Rappresenta la zona in cui si trova un distributore. Rappresenta un cliente. Rappresenta uno smartphone Rappresenta un dipendente ID, idproprietario, Quantità. Id, idproprietario, disponibilità. Id, idfurgone, iddistributore, esito, saccaincasso ID, nome, x, y codicefiscale, Nome, Cognome. Id, idproprietario, idoperatore, Descrizione CodiceFiscale, Nome, Cognome. Proprietario, Distributore, Furgone Proprietario, MerceMagazzino Distributore, Furgone Distributore MerceMagazzino, Dispositivo, Distributore, Furgone Proprietario, Opertore Dispositivo, Distributore.
12 Dettaglio Relazioni Nome Scopo Entità coinvolte Attributi Possiede Mette in relazione il Furgone, Proprietario Proprietario e il furgone. Carico Mette in relazione il carico di un furgone rispetto alla merce presente in magazzino. Furgone, MerceMagazzino Contiene Possiede Possiede Posizione Usa Assegnato Si Trova MerceDistributore Movimento Mette in relazione il magazzino con la merce che contiene. Mette in relazione il Proprietario con il suo magazzino merci. Mette in relazione il proprietario con i dispositivi che possiede. Mette in relazione un dispositivo con l operatore che lo usa segnalandone la posizione. Mette in relazione l operatore con il dispositivo che usa. Mette in relazione l operatore con i distributori a lui assegnati. Mette in relazione un distributore con la sua posizione. Mette in relazione un distributore con la merce che contiene. Mette in relazione i rifornimenti con la merce. MerceMagazzino, Merce Proprietario, MerceMagazzino Proprietario, Dispositivo Operatore, Dispositivo Operatore, Dispositivo Operatore, Distributore Distributore, Area Distributore, MerceMagazzino MerceMagazzino, Rifornimento idfurgone, idmerce, quantità iddispositivo, idoperatore, x, y, timestamp idmerce, iddistributore, Quantità, Prezzo IdMerce, idrifornimento, Quantità, data
13 Usato Per Effettuato nel Mette in relazione il rifornimento e il furgone usato per farlo Mette in relazione il rifornimento e il distributore in cui viene effettuato Rifornimento, Furgone Rifornimento, Distrivutore