# Biblioteca
INTRODUZIONE
Creazione di un’applicazione di gestione di una biblioteca on line. Gli utenti avranno la possibilità di vedere l’elenco dei libri (distinguere tra cartaceo e digitale), prenotarli per un certo periodo pagando il noleggio, restituirli entro il periodo impostato pena aumento del noleggio. La biblioteca contiene libri e documenti di ogni tipo, dall’informazione alla storia dallo sport alla geografia e via dicendo. La biblioteca gestisce anche i film e documentari in formato digitale.

LE PARTI JAVASCRIPT DOVRANNO ESSERE SVILUPPATE IN JQUERY!

UTENTI
Gli utenti devono sempre essere assegnati ad una persona e devono avere dei ruoli/diritti sull’applicazione. Questi vengono assegnati dall’utente amministratore (ossia il creatore dell’applicazione). Vediamo i diversi utenti:


Utente Admin: gestisce l’intera applicazione. Inserisce l’utente bibliotecario.


Utente Bibliotecario: Inserisce, modifica e cancella i libri all’interno della biblioteca. Gestisce le consegne e le restituzioni dei libri. Gestisce le penali in caso di mancata consegna. Questo utente non può effettuare prenotazioni.  Altre eventuali … 


Utente generico: si registra all’applicazione con la propria mail. Inserisce, modifica e cancella le proprie prenotazioni. Effettua il pagamento on line del noleggio. Inserisce una recensione sul libro/film noleggiato che sarà visibile agli altri utenti quando lo consulteranno. 
L’utente potrà effettuare la prenotazione solo dopo l’avvenuta registrazione.
L’utente non registrato può solo visualizzare le entità contenute all’interno dell’applicazione.


Altri eventuali … 



PRENOTAZIONI
Le prenotazioni hanno un loro codice e si gestiscono attraverso i seguenti stati:
Prenotazione In attesa
Prenotazione Pagata
Prenotazione Consegnata
Prenotazione Restituita
Restituzione Verificata

Il Codice della prenotazione sarà una stringa composta da utente + il periodo di prenotazione(formato aaaammgg) + il codice del libro/film. Esempio:

UTENTE@MAIL.COM2025010120250131L001

si effettuano con i seguenti dati:
Utente + Persona
Selezione del libro/film
Scelta del periodo di noleggio con data inizio e data fine (gli orari si intendono come 00.00 per la data di inizio e 23.59 per la data di fine).
Una volta salvato il periodo il libro/film scelto non sarà disponibile agli altri utenti nel periodo selezionato (si deve pertanto gestire l’errore in caso di prenotazione “accavallata” da parte di un altro utente).
L’utente può prenotare e noleggiare al massimo 5 libri. Raggiunto questo numero non può prenotarne altri se non effettua almeno una restituzione.
L’utente bibliotecario effettuerà l’avvenuta consegna del libro/film noleggiato all’utente e di conseguenza la verifica dell’avvenuta restituzione
L’utente bibliotecario gestisce il pagamento che deve essere effettuato prima della consegna all’utente (di conseguenza non è possibile fare la consegna se il noleggio non ha lo stato “pagato”).
La cancellazione della prenotazione deve avvenire prima della consegna e annulla il pagamento.
La consegna del noleggio da parte dell’utente obbliga questo ad inserire una recensione che sarà visibile agli altri utenti

altre eventuali … 


LIBRI, FILM e DOCUMENTARI
Si deve gestire l’ elenco delle entità noleggiabili con i seguenti dati:

Immagine della copertina o locandina
Codice dell’entità
Tipo (libro, film, documentario, .. )
Titolo
Autore o Regista
Breve descrizione
Costo del noleggio (le entità inserite dal bibliotecario nell’anno corrente costeranno piu’ di quelle degli anni passati).
Argomento di appartenenza (sport, storia, cultura generale, geografia, scienze …. )
Data di inserimento all’interno dell’applicazione

Questi dati saranno selezionati dall’utente bibliotecario quando inserirà il libro/film all’interno dell’applicazione.

L’utente avrà a disposizione questi dati quando effettuerà la ricerca dell’entità che interessa oltre alla possibilità di visualizzarne le recensioni.

LE RECENSIONI
Può essere inserita una sola recensione per utente e libro/film. 
La recensione viene inserita nella funzionalità di restituzione ed è facoltativa (l’utente può decidere di non inserire nessuna recensione). L’utente che scrive la recensione può effettuarne la cancellazione FISICA dalla base dati.
Gli altri utenti possono mettere sulla recensione un “OK” o “KO” a seconda se in accordo o meno su quanto c’è scritto sulla recensione. OK e KO devono essere rappresentati da un’icona/emoji a piacere.
Il bibliotecario e solo lui può decidere di cancellare la recensione (cambiando lo stato da inserita a cancellata) se non la ritiene opportuna. In questo caso al posto della recensione comparirà un messaggio “Recensione Cancellata da Amministrazione”.
L’entità recensione contiene i seguenti campi:

utente 
data
descrizione
stato (inserita, cancellata)
id del libro/film a cui è riferita


MENU di NAVIGAZIONE
Ogni tipologia di utente ha il suo menù di navigazione per accedere alle maschere che deve utilizzare.

ADMIN: vede tutta l’applicazione e può fare qualsiasi cosa.

BIBLIOTECARIO: 
ELENCO LIBRI con funzionalità di inserimento modifica e cancellazione
ELENCO FILM (idem sopra)
ELENCO DOCUMENTARI (idem sopra)
ELENCO PRENOTAZIONI con relativa gestione descritta sopra
ELENCO UTENTI REGISTRATI con possibilità di vedere le relative prenotazioni e pagamenti
altre eventuali …

UTENTE SEMPLICE:
ELENCO LIBRI con selezione per la prenotazione
ELENCO PROPRIE PRENOTAZIONI con possibilità di modificare/cancellare
altre eventuali …


PAGAMENTI
L’utente può scegliere attraverso un’opzione dell’applicazione se pagare in contanti, con bonifico o con carta di credito. Serve quindi un'entità PAGAMENTI per la loro selezione con i seguenti campi:

ID_PAGAMENTO
TIPO
DESCRIZIONE

Quando l’utente conferma la prenotazione avrà la possibilità di selezionare il tipo di pagamento dall’entità impostata.

7.1 PAGAMENTO CON CARTA DI CREDITO
Questo tipo di pagamento è alquanto diffuso per gli acquisti online. Creare quindi una maschera che contenga i seguenti campi (ovviamente da salvare su DB):
Nome e Cognome dell’intestatario della carta
Numero della carta
Mese/Anno scadenza della carta
Codice di sicurezza del retro della carta

I dati inseriti dall’utente vanno salvati nella tabella relativa al primo inserimento. I successivi salvataggi dovranno confrontare i dati inseriti negli appositi campi con il dato salvato nella base dati. Il dato salvato non deve essere duplicato ma rimane dato univoco di confronto con i successivi inserimenti. Esempio:

Al primo acquisto l’utente inserisce i dati di cui sopra che vengono salvati.
Al secondo acquisto l’utente inserisce nuovamente i dati di cui sopra ma al salvataggio l’applicazione confronterà questi con quelli salvati al punto 1.
In caso di corrispondenza fallita si deve restituire un messaggio di errore. Altrimenti si procede con la conclusione del noleggio.

Facoltativo: Quando l’utente salva i dati al punto 1. deve utilizzare un PIN di 4 cifre. Nei tentativi successivi prima di salvare il noleggio con carta di credito si deve proporre la maschera per il controllo del PIN. Ovviamente l’applicazione dovrà verificare che il PIN inserito le volte successive corrisponda con quello salvato al primo acquisto.



BREVE DESCRIZIONE DEL PROCESSO

L’utente semplice  quando accede all’applicazione ha la possibilità di navigare all’interno di questa anche se non è registrato. In questo caso pero’ non potrà effettuare la prenotazione.
Invece una volta registrato potrà visualizzare ed effettuare le sue prenotazioni con il controllo che non siano piu’ di 5 in totale. Se prova ad effettuare una prenotazione in un periodo in cui non c’è disponibilità l’applicazione deve restituire un messaggio di errore.
L’utente per la prenotazione vedrà inizialmente l’elenco di tutti i libri/film presenti all’interno della base dati con possibilità di filtrare la ricerca per tipo, titolo, autore.
l’elenco visualizzerà in ordine copertina, titolo, descrizione, costo del noleggio, link alla maschera della prenotazione e link alla maschera delle recensioni.
La maschera della prenotazione deve permettere di inserire i dati di cui al paragrafo 3 e 7.

Bibliotecario ha accesso all’elenco delle entità dell’applicazione. può decidere di inserire nuove entità, modificarle o di cancellarle. Nel caso un’entità abbia dei noleggi abbinati non sarà cancellata fisicamente ma solo logicamente (cambio stato). L’entità cancellata non sarà visibile all’utente semplice ma solo al bibliotecario e amministratore.
Avendo accesso alle prenotazioni può cambiarne lo stato come descritto al paragrafo 3.
Inoltre può cancellare le recensioni che ritiene non adeguate.
Non può inserire prenotazioni come bibliotecario.

Amministratore accede a tutto quanto, può modificare cancellare o inserire. Accede alla pagina degli utenti che può eventualmente cancellare se non hanno effettuato alcun noleggio. Gestisce inserimento, modifica e cancellazione dell’utente bibliotecario. Ovviamente l’utente bibliotecario può essere piu’ di uno.

