Indice

🟦Pronta 🟨Bozza 🟥Da scrivere

Esempio: app "Prestiti tra Vicini"

Una app di esempio più complessa
Aggiornata il:
Stato: 🟦Pronta

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:

Oggettol'oggetto disponibile per il prestito (es. la falciatrice)
Ambitol'ambito di utilizzo di un Oggetto (es. il giardino, la cucina, la sartoria, il bricolage)
Richiestala richiesta di un Oggetto (es. la richiesta della falciatrice da parte di Franco per un certo periodo)
Concessionela 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)
Consegnala consegna di un Oggetto (es. la consegna della falciatrice da parte di Gianna a un operatore della biblioteca)
Luogoil luogo dove è depositato l'oggetto o presso cui avviene la Consegna (es. la biblioteca, la casa del richiedente, la casa del proprietario dell'oggetto)
Abilitazionel'abilitazione di un operatore a gestire le consegne presso un Luogo (es. Carlo è abilitato alla biblioteca)
Valutazionela 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) 
Notauna 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:

CampoTipoDescrizione
Titolotestonome breve dell'Oggetto
Descrizionetestodescrizione dell'Oggetto
Immaginefileimmagine descrittiva dell'Oggetto
Statoselezione"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.
Documentifile (multivalore)Documenti che descrivono l'Oggetto, es Manuale d'uso e fotografie di dettaglio
Luogoriferimento a SediLuogo dove si trova in questo momento l'Oggetto. Può essere una Sede autorizzata alle consegne oppure "Presso il Proprietario" o "Presso il Richiedente".
Ambitiriferimento a Ambiti (multivalore)Ambito di utilizzo dell'Oggetto

AMBITO Ogni Ambito è rappresentato da un Contenuto di tipo "Ambito", formato dai Campi:

CampoTipoDescrizione
Titolotestonome breve dell'Ambito
SinonimitestoAltre parole che identificano l'Ambito
Statoselezione"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:

CampoTipoDescrizione
TitolotestoTitolo automatico, formato da "Richiesta n. CODICE" dove CODICE è il valore del Campo "Codice"
CodiceserialeNumero progressivo automatico, usato per creare il titolo
Oggettoriferimento a OggettiOggetto richiesto
NotatestoDescrizione della richiesta da parte del Richiedente
Statoworkflow"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:

CampoTipoDescrizione
TitolotestoTitolo automatico, formato da "Concessione n. CODICE" dove CODICE è il valore del Campo "Codice"
CodiceserialeNumero progressivo automatico
Richiestariferimento a RichiesteRichiesta cui la Concessione risponde
NotatestoNota di risposta del Proprietario
Statoworkflow"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:

CampoTipoDescrizione
TitolotestoTitolo automatico, formato da "Consegna n. CODICE" dove CODICE è il valore del Campo "Codice"
CodiceserialeNumero progressivo automatico
Concessioneriferimento a ConcessioniConcessione che autorizza la Consegna
Destinatarioriferimento a UtentiUtente cui viene consegnato l'Oggetto
Luogoriferimento a LuoghiLuogo in cui viene spostato l'Oggetto con la consegna
Quandodata e oraData e ora in cui è avvenuta la consegna (viene caricato automaticamente quando la Consegna passa allo Stato "Avvenuta")
NotatestoNota del consegnante
Statoworkflow"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:

CampoTipoDescrizione
Titolotestonome breve 
NotatestoDescrizione completa , compresi indirizzo e contatti 
TiposelezioneFisico | Logico (per distinguere i Luoghi fisici dai due luoghi logici)
Statoselezione"Attivo" se è possibile procedere a Consegne in questo Luogo. "Inattivo" se il Luogo non è più utilizzabile.
Posizionecoordinate(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:

CampoTipoDescrizione
TitolotestoTitolo automatico, formato da "Abilitazione n. CODICE" dove CODICE è il valore del Campo "Codice"
CodiceserialeNumero progressivo automatico
Luogoriferimento a LuoghiLuogo fisico per cui vale l'Abilitazione
Operatoreriferimento a UtentiOperatore per cui vale l'Abilitazione
NotatestoNota relativa all'Abilitazione
Statoselezione"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:

CampoTipoDescrizione
TitolotestoTitolo automatico, formato da "Valutazione n. CODICE" dove CODICE è il valore del Campo "Codice"
CodiceserialeNumero progressivo automatico
Concessioneriferimento a ConcessioniConcessione per cui viene espressa la Valutazione
ValoreselezioneValore della Valutazione secondo una scala predefinita 
NotatestoCommento 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:

CampoTipoDescrizione
TitolotestoTitolo automatico, formato da "Nota n. CODICE" dove CODICE è il valore del Campo "Codice"
CodiceserialeNumero progressivo automatico
Richiestariferimento a RichiesteRichiesta 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.
TestotestoTesto 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:

CampoTipoDescrizione
NometestoNome della persona
CognometestoCognome della persona
RitrattoimmagineFoto della persona
Persone 

Oltre ai ruoli di default (Visitatori e Amministratore), la app richiede per gli Utenti i seguenti ruoli: 

Vicinola persona che concede in prestito Oggetti e chiede in prestito gli Oggetti altrui
Operatorela persona abilitata a consegnare Oggetti in un Luogo
Gestorela 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 datoVicinoOperatoreGestore
Dati personali dell'UtenteModifica i propri datiModifica i propri datiModifica i dati di tutti gli utenti
OggettoCrea e modifica i propri Oggetti. Vede tutti gli OggettiVede tutti gli OggettiVede e modifica tutti gli Oggetti
AmbitoVede tutti gli AmbitiVede tutti gli AmbitiCrea, vede, modifica e elimina tutti gli Ambiti
RichiestaCrea 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
ConcessioneCrea Concessione per le Richieste sui propri Oggetti. Vede, modifica e elimina (2) le proprie Concessioni. Vede le Concessioni altrui in risposta alle proprie RichiesteVede tutte le ConcessioniVede, modifica e elimina tutte le Concessioni
ConsegnaCrea Consegna per Concessioni di cui è Richiedente o Proprietario. Vede, modifica e elimina (3) le proprie Consegne. Vede le Consegne altrui di cui è destinatarioLimitatamente 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
LuogoVede tutti i LuoghiVede i Luoghi cui è abilitatoCrea, vede, modifica e elimina tutti i Luoghi
Abilitazione Vede le Abilitazioni relative ai Luoghi cui è abilitatoCrea, vede, modifica e elimina tutte le Abilitazioni
ValutazioneCrea 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
NotaCrea 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
PaginaInformazioni mostrateComandi disponibili
InizialeSpiegazione della app. Istruzioni per iscriversi.Registrazione
Login 
RegistrazioneModulo di iscrizioneInvio (viene creato l'Utente)
LoginModulo di inserimento credenzialiInvio (il Visitatore diventa Utente e passa al percorso Utente Richiedente o Gestore)
Percorso Vicino
PaginaInformazioni mostrateComandi disponibili
InizialeElenco 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 AmbitoTuoi Oggetti
Tuoi OggettiElenco dei suoi OggettiAggiungi Oggetto
OggettoDati 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 RichiesteElenco Richieste concluse 
Richiestase 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: 


Aggiungi Nota
se l'Utente è il proprietario e non c'è Concessione:
Concedi prestito (= crea Concessione in risposta alla Richiesta) 
se l'Oggetto è presso l'Utente e la Richiesta non è conclusa:
Consegna (=crea Consegna sulla Concessione)
se la Richiesta è conclusa e l'utente non ha espresso la Valutazione:
Valuta /crea Valutazione)

Concessionesolo se l'Utente è il richiedente o il proprietario:
Dati della Concessione, compresa la Richiesta

 



 

Consegnasolo 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)
Valutazionesolo se l'Utente è il richiedente o il proprietario:
Dati della Valutazione
 
Notasolo se l'Utente è il richiedente o il proprietario:
Dati della Nota
 
Percorso Operatore
PaginaInformazioni mostrateComandi disponibili
InizialeElenco dei Luoghi cui è abilitato 
Luogo Elenco delle Concessioni con Oggetto depositati nel Luogo
Elenco delle Consegne aperte con il Luogo come destinazione  
Archivio Consegne
ConcessioneDati della Concessionese l'Oggetto è nel Luogo dove agisce l'Operatore:
Consegna (= crea Consegna)
ConsegnaDati della Consegnase l'Oggetto viene consegnato nel Luogo dove agisce l'Operatore:
Accetta (cambia stato alla Consegna)
Archivio ConsegneElenco Consegne concluse nel Luogo 
Percorso Gestore
PaginaInformazioni mostrateComandi disponibili
Iniziale Gestione Richieste
Gestione Utenti
Gestione Ambiti
Gestione Luoghi
Gestione RichiesteElenco delle Richieste, incluse Concessioni filtrabile per Ambito, Oggetto, Richiedente, Proprietario, stato 
Richiestacome se fosse il richiedente o il proprietario 
Concessionecome se fosse il richiedente o il proprietario 
Consegnacome se fosse il consegnante o il destinatario 
Gestione UtentiElenco degli UtentiNuovo Utente (=crea Utente)
UtenteDati dell'Utente
Se l'Utente mostrato è Operatore:
Elenco delle sue Abilitazioni
Modifica Ruolo
Gestione LuoghiElenco LuoghiNuovo Luogo (=crea Luogo)
LuogoDati Luogo
Elenco Abilitazioni nel Luogo
 
AbilitazioneDati Abilitazione 
Gestione AmbitiElenco AmbitiNuovo Ambito (crea Ambito)
AmbitoDati Ambito 

Automazioni

da scrivere