La app "Prestiti tra Vicini" è una sorta di evoluzione della app "Miei Libri" che abbiamo precedentemente visto, in cui i prestiti non riguardano più solo libri ma oggetti vari, gli amici cui prestare sono utenti della app perché possano a loro volta prestare i loro oggetti e lo scambio degli oggetti può avvenire non solo direttamente tra richiedente e proprietario dell'oggetto, ma attraverso gli operatori di una biblioteca o di un altro luogo aperto al pubblico. Anche per questa app seguiamo il metodo che abbiamo visto .
Scopo
Gestire i prestiti di oggetti tra vicini. Oltre a registrare le richieste di oggetti e la concessione dei prestiti, a maggior garanzia di tutti la app traccia le consegne, che possono avvenire direttamente tra richiedente e proprietario dell'oggetto oppure presso luoghi aperti al pubblico gestiti da operatori, quali una biblioteca o la sede di una associazione di volontariato. La app permette infine di esprimere una valutazione sull'esperienza di prestito, che viene utilizzata per statistiche sugli utenti e sugli oggetti.
Dati
Oltre ai dati personali degli Utenti, la app deve gestire i seguenti dati:
| Oggetto | l'oggetto disponibile per il prestito (es. la falciatrice) |
| Ambito | l'ambito di utilizzo di un Oggetto (es. il giardino, la cucina, la sartoria, il bricolage) |
| Richiesta | la richiesta di un Oggetto (es. la richiesta della falciatrice da parte di Franco per un certo periodo) |
| Concessione | la concessione del prestito in risposta ad una Richiesta (es. la concessione della falciatrice per un certo periodo a Franco da parte di Gianna, proprietaria della falciatrice) |
| Consegna | la consegna di un Oggetto (es. la consegna della falciatrice da parte di Gianna a un operatore della biblioteca) |
| Luogo | il luogo dove è depositato l'oggetto o presso cui avviene la Consegna (es. la biblioteca, la casa del richiedente, la casa del proprietario dell'oggetto) |
| Abilitazione | l'abilitazione di un operatore a gestire le consegne presso un Luogo (es. Carlo è abilitato alla biblioteca) |
| Valutazione | la valutazione finale del prestito espressa dal richiedente o dal proprietario dell'oggetto (es. la valutazione di Gianna sul comportamento di Franco nel prestito della falciatrice) |
| Nota | una nota scambiata tra richiedente e proprietario per concordare la consegna e l'uso dell'oggetto e gestire eventuali problemi |
Per ogni tipo di Dato creiamo un tipo di Contenuto specializzato:
OGGETTO Ogni Oggetto è rappresentato da un Contenuto di tipo "Oggetto". L'Oggetto viene creata nella app dall'Utente proprietario, che è quindi memorizzato nel Campo predefinito "Autore" dell'Oggetto. Gli altri Campi sono:
| Campo | Tipo | Descrizione |
| Titolo | testo | nome breve dell'Oggetto |
| Descrizione | testo | descrizione dell'Oggetto |
| Immagine | file | immagine descrittiva dell'Oggetto |
| Stato | selezione | "Disponibile" se l'Oggetto può essere richiesto in prestito. "Indisponibile" se l'Oggetto non può più essere richiesto, ad esempio perché in riparazione o ritirato definitivamente dalla app. |
| Documenti | file (multivalore) | Documenti che descrivono l'Oggetto, es Manuale d'uso e fotografie di dettaglio |
| Luogo | riferimento a Sedi | Luogo dove si trova in questo momento l'Oggetto. Può essere una Sede autorizzata alle consegne oppure "Presso il Proprietario" o "Presso il Richiedente". |
| Ambiti | riferimento a Ambiti (multivalore) | Ambito di utilizzo dell'Oggetto |
AMBITO Ogni Ambito è rappresentato da un Contenuto di tipo "Ambito", formato dai Campi:
| Campo | Tipo | Descrizione |
| Titolo | testo | nome breve dell'Ambito |
| Sinonimi | testo | Altre parole che identificano l'Ambito |
| Stato | selezione | "Disponibile" se può essere usato per categorizzare gli Oggetti. "Indisponibile" in caso contrario, ad esempio perché sostituito da un nuovo Ambito. |
RICHIESTA Ogni Richiesta è rappresentata da un Contenuto di tipo "Richiesta". La Richiesta viene creata nella app dall'Utente richiedente, che è quindi memorizzato nel Campo predefinito "Autore" della Richiesta. Gli altri Campi sono:
| Campo | Tipo | Descrizione |
| Titolo | testo | Titolo automatico, formato da "Richiesta n. CODICE" dove CODICE è il valore del Campo "Codice" |
| Codice | seriale | Numero progressivo automatico, usato per creare il titolo |
| Oggetto | riferimento a Oggetti | Oggetto richiesto |
| Nota | testo | Descrizione della richiesta da parte del Richiedente |
| Stato | workflow | "Aperta" quando viene creata. "In corso" dopo che è stato concesso il prestito (cioè quando esiste la Concessione in risposta alla Richiesta). "Conclusa" dopo la riconsegna dell'Oggetto al proprietario. |
CONCESSIONE Ogni Concessione è rappresentata da un Contenuto di tipo "Concessione". La Concessione viene creata nella app dall'Utente proprietario dell'Oggetto, che è quindi memorizzato nel Campo predefinito "Autore" della Concessione. Gli altri Campi sono:
| Campo | Tipo | Descrizione |
| Titolo | testo | Titolo automatico, formato da "Concessione n. CODICE" dove CODICE è il valore del Campo "Codice" |
| Codice | seriale | Numero progressivo automatico |
| Richiesta | riferimento a Richieste | Richiesta cui la Concessione risponde |
| Nota | testo | Nota di risposta del Proprietario |
| Stato | workflow | "Aperta" quando viene creata. "In corso" quando l'Oggetto è stato consegnato "Conclusa" quando l'Oggetto è tornato al proprietario |
CONSEGNA Ogni Consegna è rappresentata da un Contenuto di tipo "Consegna". La Consegna viene creata nella app dall'Utente che consegna l'Oggetto, che è quindi memorizzato nel Campo predefinito "Autore" della Consegna. Gli altri Campi sono:
| Campo | Tipo | Descrizione |
| Titolo | testo | Titolo automatico, formato da "Consegna n. CODICE" dove CODICE è il valore del Campo "Codice" |
| Codice | seriale | Numero progressivo automatico |
| Concessione | riferimento a Concessioni | Concessione che autorizza la Consegna |
| Destinatario | riferimento a Utenti | Utente cui viene consegnato l'Oggetto |
| Luogo | riferimento a Luoghi | Luogo in cui viene spostato l'Oggetto con la consegna |
| Quando | data e ora | Data e ora in cui è avvenuta la consegna (viene caricato automaticamente quando la Consegna passa allo Stato "Avvenuta") |
| Nota | testo | Nota del consegnante |
| Stato | workflow | "Proposta" quando viene creata dal consegnante. "Avvenuta" quando il destinatario dichiara di aver ricevuto l'Oggetto |
LUOGO Ogni Luogo è rappresentato da un Contenuto di tipo "Luogo". Oltre ai Luoghi fisici, sono previsti i Luoghi logici "Presso il Proprietario" e "Presso il richiedente". I Campi sono:
| Campo | Tipo | Descrizione |
| Titolo | testo | nome breve |
| Nota | testo | Descrizione completa , compresi indirizzo e contatti |
| Tipo | selezione | Fisico | Logico (per distinguere i Luoghi fisici dai due luoghi logici) |
| Stato | selezione | "Attivo" se è possibile procedere a Consegne in questo Luogo. "Inattivo" se il Luogo non è più utilizzabile. |
| Posizione | coordinate | (solo se Tipo =Fisico) Coordinate geografiche del Luogo, serve per rappresentarlo su mappa geografica |
ABILITAZIONE Ogni Abilitazione è rappresentata da un Contenuto di tipo "Abilitazione", che incrocia un Operatore con un Luogo. I Campi sono:
| Campo | Tipo | Descrizione |
| Titolo | testo | Titolo automatico, formato da "Abilitazione n. CODICE" dove CODICE è il valore del Campo "Codice" |
| Codice | seriale | Numero progressivo automatico |
| Luogo | riferimento a Luoghi | Luogo fisico per cui vale l'Abilitazione |
| Operatore | riferimento a Utenti | Operatore per cui vale l'Abilitazione |
| Nota | testo | Nota relativa all'Abilitazione |
| Stato | selezione | "Attiva" se l'Operatore può operare nella Sede, "Inattiva" in caso contrario, ad esempio perché l'Operatore non lavora più |
VALUTAZIONE Ogni Valutazione è rappresentata da un Contenuto di tipo "Valutazione". La Valutazione viene creata nella app dall'Utente richiedente o proprietario che la esprime, che è quindi memorizzato nel Campo predefinito "Autore" della Valutazione. Gli altri Campi sono:
| Campo | Tipo | Descrizione |
| Titolo | testo | Titolo automatico, formato da "Valutazione n. CODICE" dove CODICE è il valore del Campo "Codice" |
| Codice | seriale | Numero progressivo automatico |
| Concessione | riferimento a Concessioni | Concessione per cui viene espressa la Valutazione |
| Valore | selezione | Valore della Valutazione secondo una scala predefinita |
| Nota | testo | Commento alla Valutazione |
NOTA Ogni Nota è rappresentata da un Contenuto di tipo "Nota". La Nota viene creata nella app dall'Utente richiedente o proprietario, che è quindi memorizzato nel Campo predefinito "Autore" della Nota. Gli altri Campi sono:
| Campo | Tipo | Descrizione |
| Titolo | testo | Titolo automatico, formato da "Nota n. CODICE" dove CODICE è il valore del Campo "Codice" |
| Codice | seriale | Numero progressivo automatico |
| Richiesta | riferimento a Richieste | Richiesta nel cui ambito viene emessa la Nota. La Nota è collegata alla Richiesta e non alla Concessione, per consentire di scrivere Note anche quando la Concessione non è stata ancora emessa. |
| Testo | testo | Testo della Nota |
UTENTE Ogni Utente della app è rappresentato da una Entità di tipo Utente, con i seguenti Campi aggiuntivi, utili a identificare con ragionevole certezza le persone che usano la app:
| Campo | Tipo | Descrizione |
| Nome | testo | Nome della persona |
| Cognome | testo | Cognome della persona |
| Ritratto | immagine | Foto della persona |
Persone
Oltre ai ruoli di default (Visitatori e Amministratore), la app richiede per gli Utenti i seguenti ruoli:
| Vicino | la persona che concede in prestito Oggetti e chiede in prestito gli Oggetti altrui |
| Operatore | la persona abilitata a consegnare Oggetti in un Luogo |
| Gestore | la persona che gestisce Ambiti, Luoghi e Utenti, abilita gli Operatori ai Luoghi, interviene su Richieste e Concessioni per risolvere problemi e fornisce supporto all'uso della app. |
Autorizzazioni
I Visitatori possono solo iscriversi. Per gli altri Ruoli le Autorizzazioni sui diversi tipi di Dato sono:
| Ruolo utente | |||
| Tipo di dato | Vicino | Operatore | Gestore |
| Dati personali dell'Utente | Modifica i propri dati | Modifica i propri dati | Modifica i dati di tutti gli utenti |
| Oggetto | Crea e modifica i propri Oggetti. Vede tutti gli Oggetti | Vede tutti gli Oggetti | Vede e modifica tutti gli Oggetti |
| Ambito | Vede tutti gli Ambiti | Vede tutti gli Ambiti | Crea, vede, modifica e elimina tutti gli Ambiti |
| Richiesta | Crea Richiesta su Oggetti altrui. Vede, modifica e elimina (1) le proprie Richieste. Vede le Richieste altrui sui propri Oggetti | Vede, modifica e elimina tutte le Richieste | |
| Concessione | Crea Concessione per le Richieste sui propri Oggetti. Vede, modifica e elimina (2) le proprie Concessioni. Vede le Concessioni altrui in risposta alle proprie Richieste | Vede tutte le Concessioni | Vede, modifica e elimina tutte le Concessioni |
| Consegna | Crea Consegna per Concessioni di cui è Richiedente o Proprietario. Vede, modifica e elimina (3) le proprie Consegne. Vede le Consegne altrui di cui è destinatario | Limitatamente ai Luoghi cui è abilitato: Crea Consegna per Concessioni che passano per il Luogo. Vede, modifica e elimina (3) le Consegne create da Operatori del Luogo. Vede le Consegne che passano per il Luogo | Crea, vede, modifica e elimina tutte le Consegne |
| Luogo | Vede tutti i Luoghi | Vede i Luoghi cui è abilitato | Crea, vede, modifica e elimina tutti i Luoghi |
| Abilitazione | Vede le Abilitazioni relative ai Luoghi cui è abilitato | Crea, vede, modifica e elimina tutte le Abilitazioni | |
| Valutazione | Crea Valutazione per Concessione di cui è richiedente o proprietario. Modifica e elimina le proprie Valutazioni. Vede le Valutazioni per Concessioni di cui è richiedente o proprietario. | Vede tutte le Valutazioni | |
| Nota | Crea Nota per Concessione di cui è richiedente o proprietario. Modifica e elimina le proprie Note. Vede le Note per Concessioni di cui è richiedente o proprietario | Vede tutte le Note | |
(1) Una Richiesta può essere modificate o eliminata finché non viene creata la Concessione in sua risposta
(2) Una Concessione può essere modificata o eliminata finché non viene creata la prima Consegna
(3) La Consegna può essere modificata o eliminata finché non viene accettata dal destinatario
Queste Autorizzazioni richiedono, oltre alla configurazione dei Permessi base, anche l'utilizzo dei Workflow per le Autorizzazioni che variano nel tempo e un uso intelligente delle Viste, per riservare Richieste, Concessioni, Note e Valutazioni ai soli Utenti richiedente e proprietario, come vedremo in dettaglio nelle prossime Guide.
Percorsi
Per ogni Ruolo definiamo un percorso specifico. Per semplicità espositiva non elenco le pagine di creazione dei Contenuti attivate dai comandi "Crea" né i comandi standard di Modifica ed Elimina nelle pagine dei Contenuti né la pagine di gestione dei propri dati personali. Ogni pagina richiede almeno una Vista per essere realizzata:
| Percorso Visitatore | ||
| Pagina | Informazioni mostrate | Comandi disponibili |
| Iniziale | Spiegazione della app. Istruzioni per iscriversi. | Registrazione Login |
| Registrazione | Modulo di iscrizione | Invio (viene creato l'Utente) |
| Login | Modulo di inserimento credenziali | Invio (il Visitatore diventa Utente e passa al percorso Utente Richiedente o Gestore) |
| Percorso Vicino | ||
| Pagina | Informazioni mostrate | Comandi disponibili |
| Iniziale | Elenco delle sue Richieste aperte, inclusa l'eventuale Concessione Elenco delle sue Concessioni aperte Elenco delle Consegne che hanno l'Utente come destinatario | Archivio Richieste (filtrate per richiedente) Archivio Concessioni (filtrate per proprietario) Oggetti |
| Oggetti | Elenco degli Oggetti disponibili, suddivisi per Ambito | Tuoi Oggetti |
| Tuoi Oggetti | Elenco dei suoi Oggetti | Aggiungi Oggetto |
| Oggetto | Dati dell'Oggetto se l'Utente è il Proprietario: Elenco delle Richieste aperte sull'Oggetto Eventuale Concessione aperta sull'Oggetto | se l'Utente non è il Proprietario: Chiedi in prestito (= crea Richiesta sull'Oggetto) se l'Utente è il Proprietario: Archivio Concessioni (filtrato per Oggetto) |
| Archivio Concessioni | Elenco Concessioni concluse | |
| Archivio Richieste | Elenco Richieste concluse | |
| Richiesta | se l'Utente è il richiedente o il proprietario: Dati della Richiesta Elenco delle Note sulla Richiesta se è stata emessa la Concessione: Dati della Concessione Elenco delle Consegne sulla Concessione Elenco delle Valutazioni sulla Concessione | solo se l'Utente è il richiedente o il proprietario:
|
| Concessione | solo se l'Utente è il richiedente o il proprietario: Dati della Concessione, compresa la Richiesta |
|
| Consegna | solo se l'Utente è il richiedente o il proprietario: Dati della Consegna | solo se l'Utente è il richiedente o il proprietario: se l'Utente è il destinatario della Consegna: Accetta Consegna (cambia lo stato della Consegna) |
| Valutazione | solo se l'Utente è il richiedente o il proprietario: Dati della Valutazione | |
| Nota | solo se l'Utente è il richiedente o il proprietario: Dati della Nota | |
| Percorso Operatore | ||
| Pagina | Informazioni mostrate | Comandi disponibili |
| Iniziale | Elenco dei Luoghi cui è abilitato | |
| Luogo | Elenco delle Concessioni con Oggetto depositati nel Luogo Elenco delle Consegne aperte con il Luogo come destinazione | Archivio Consegne |
| Concessione | Dati della Concessione | se l'Oggetto è nel Luogo dove agisce l'Operatore: Consegna (= crea Consegna) |
| Consegna | Dati della Consegna | se l'Oggetto viene consegnato nel Luogo dove agisce l'Operatore: Accetta (cambia stato alla Consegna) |
| Archivio Consegne | Elenco Consegne concluse nel Luogo | |
| Percorso Gestore | ||
| Pagina | Informazioni mostrate | Comandi disponibili |
| Iniziale | Gestione Richieste Gestione Utenti Gestione Ambiti Gestione Luoghi | |
| Gestione Richieste | Elenco delle Richieste, incluse Concessioni filtrabile per Ambito, Oggetto, Richiedente, Proprietario, stato | |
| Richiesta | come se fosse il richiedente o il proprietario | |
| Concessione | come se fosse il richiedente o il proprietario | |
| Consegna | come se fosse il consegnante o il destinatario | |
| Gestione Utenti | Elenco degli Utenti | Nuovo Utente (=crea Utente) |
| Utente | Dati dell'Utente Se l'Utente mostrato è Operatore: Elenco delle sue Abilitazioni | Modifica Ruolo |
| Gestione Luoghi | Elenco Luoghi | Nuovo Luogo (=crea Luogo) |
| Luogo | Dati Luogo Elenco Abilitazioni nel Luogo | |
| Abilitazione | Dati Abilitazione | |
| Gestione Ambiti | Elenco Ambiti | Nuovo Ambito (crea Ambito) |
| Ambito | Dati Ambito | |
Automazioni
da scrivere