Michele D'Amico
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    **Aggiornare i requisiti poiché il catalogo è relativo al punto vendita** ## Stakeholders 1. Catena di mobili 2. Cliente <!-- 3. Amministratore 4. Manager --> ## Che cosa ogni stakeholder si aspetta dal sistema - Catena mobili vuole migliorare l'esperienza d'acquisto - Gestione del magazzino - Customer relationship management - Organizza gli acquisti - (Prenotazione) - Consultazione catalogo Nota che bisogna capire se inserimento e modifica possiamo metterlo nello stesso requisito o dobbiamo farne 2 ## Requisiti 1. Inserimento modifica e cancellazione articoli 2. Definizione caretteristiche articoli 1. Creazione e di punti vendita 2.gestione articoli venduti in punto vendita 1. Visualizzare e aggiornare disponibilità articoli 2. Inviare email ai clienti registrati 3. Rispondere ai commenti 4. Gestione degli utenti registrati nel punto vendita 5. Autenticazione utente presso puntovendita 6. Ricerca articoli 7. Forniure informazioni relative all'articolo 8. Definire liste d'acquisto 9. Richiedere e-mail con lista d'aquisto 10. Aggiungere e rimuovere articoli 11. Salvare lista di acquisto 12. Prenotare articoli non disponibili 13. Inserire commenti e/o indici di gradimento relativi ad articoli acquistati 14. Invio lista di acquisto tramite e-mail al cliente 15. Sfogliare il catalogo 16. Registrare utente ```plantuml @startuml left to right direction skinparam packageStyle rectangle actor Amministratore as A actor Cliente as C actor Manager as M rectangle MyShop { A -- (Sfoglia catalogo) C -- (Sfoglia catalogo) M -- (Sfoglia catalogo) A -- (Crea articolo) A -- (Modifica articolo) A -- (Cancella articolo) A -- (Crea Punto Vendita) A -- (Seleziona articoli da vendere) A -- (Crea manager) (Effettua acquisto tramite lista) -- C (Crea lista) -- C (Inserisce articoli nella lista) -- C (Prenota articoli non disponibili) -- C (Lascia feedback) -- C (Richiede lista in formato PDF) -- C M -- (Visualizza stato magazzino) M -- (Rifornisce magazzino) M -- (Invia e-mail agli utenti) M -- (Risponde ai commenti sotto agli articoli) M -- (Disabilita clienti) M -- (Cancella clienti) (Effettua acquisto tramite lista) .> (Crea lista) : include (Effettua acquisto tramite lista) .> (Inserisce articoli nella lista) : include (Effettua acquisto tramite lista) .> (Prenota articoli non disponibili) : include (Rifornisce magazzino) .> (Visualizza stato magazzino) : include @enduml ``` ## Use cases Attori: 1. Amministratore 2. Manager 3. Cliente ## Use cases ### ~~Utente guest~~ 1. ~~Registrazione Utente~~ ### ~~Amministratore~~ 3. ~~Prodotto~~ - ~~Creazione prodotto~~ - ~~Costo~~ - ~~Collocazione magazino~~ - ~~Produttore~~ - ~~Creazione categoria~~ - ~~Creazione sottocategoria~~ - ~~Modifica prodotto~~ - ~~Cancellazione prodotto~~ 4. ~~Servizio~~ 3. ~~Creazione Servizio~~ 4. ~~Costo~~ 5. ~~Creazione categoria~~ 5. ~~Modifica Servizio~~ 6. ~~Cancellazione Servizio~~ 5. Punti vendita 2. ~~Creazione punti vendita~~ 3. ~~Selezione articoli da vendere~~ 6. ~~Manager~~ (non necessario) 3. ~~Creazione manager~~ ### Manager (Autenticazione???) 1. Articoli - Visualizzare stato magazzino - Rifornire magazzino 2. Gestione relazioni clienti - Invio e-mail - rispondere ai commenti sugli articoli - Gestione account utenti - Disabilita account cliente - Cancella account cliente ### ~~Cliente~~ (Autenticazione???) 1. ~~Ricerca articolo per consultare informazioni~~ 2. ~~Cliente completa lista d'acquisto e paga alla cassa~~ - ~~Creazione liste di acquisto~~ - ~~inserimento articoli di interesse~~ - ~~cancellazione articoli di interesse~~ - ~~Modifica lista di acquisto~~ - ~~inserimento articoli di interesse~~ - ~~cancellazione articoli di interesse~~ - ~~Esportazione lista in pdf tramite email~~ 3. ~~Utente prenota articoli non disponibili~~ | 4. ~~Utente lascia feedback~~ ### Creazione prodotto L'amministratore autenticato va nella finestra crea prodotto e inserisce nei vari campi presenti il costo, la collocazione, produttore, categorie e sottocategorie (se non presenti le aggiunge). Prodotto creato correttamente. #### Estensioni - prodotto esiste gia' - Categoria non esiste e crea nuova categoria digitandone il nome - Sottocategoria non esiste e crea nuova categoria digitandone il nome ## Amministratore |Nome | Creazione prodotto| |----|----| |**Precondizione**|L'amministratore ha un account abilitato| |**Post-condizione**|Il prodotto è stato creato correttamente e inserito nel catalogo| |**Scenario principale**|1. L'amministratore fa il login| | |2.L'amministratore seleziona la voce crea prodotto dal catalogo| | |3. L'amministratore inserisce nei rispettivi campi le caratteristiche del prodotto| | |4. L'amministratore seleziona la categoria del prodotto| | |5. L'amministratore seleziona la sottocategoria del prodotto| | |6. Il sistema conferma la creazione del prodotto| |**Estensioni**|4a. La categoria non è elencata. L'amministratore inserisce una nuova categoria | ||5a. La sottocategoria non è elencata. L'amministratore inserisce una nuova sottocategoria| ||6a. Creazione del prodotto fallita: non sono stati inseriti tutti i campi richiesti| ||6b. Creazione del prodotto fallita: il prodotto è già esistente nel catalogo| |Nome | Modifica articolo| |----|----| |**Precondizione**|L'amministratore ha un account abilitato| ||L'articolo da modificare è presente nel catalogo| |**Post-condizione**|L' articolo è stato aggiornato correttamente| |**Scenario principale**|1. L'amministratore fa il login| | |2. L'amministratore sfoglia il catalogo| | |3. L'amministratore seleziona l'articolo dal catalogo| | |4. L'amministratore modifica i campi dell'articolo selezionato| | |6. Il sistema conferma l'avvenuta modifica dell'articolo| |**Estensioni**|6a. Modifica dell'articolo fallita: non sono stati inseriti tutti i campi richiesti| ||6b. Modifica dell'articolo fallita: esiste già un articolo uguale a quello risultante dalla modifica| |Nome | Cancellazione Articoli| |----|----| |**Precondizione**|L'amministratore ha un account abilitato| ||L'articolo da cancellare è presente nel catalogo| |**Post-condizione**|L'articolo è stato eliminato correttamente| |**Scenario principale**|1. L'amministratore fa il login| | |2. L'amministratore sfoglia il catalogo| | |3. L'amministratore seleziona gli articoli da cancellare dalla lista degli articoli| | |4. Il sistema conferma l'avvenuta cancellazione degli articoli| |Nome | Creazione Servizio| |----|----| |**Precondizione**|L'amministratore ha un account abilitato| |**Post-condizione**|Il servizio è stato creato correttamente e inserito nel catalogo| |**Scenario principale**|1. L'amministratore fa il login| | |2. L'amministratore seleziona la voce crea servizio dal catalogo| | |3. L'amministratore inserisce nei rispettivi campi le caratteristiche del servizio| | |4. L'amministratore seleziona la categoria del servizio| | |5. Il sistema conferma la creazione del servizio| |**Estensioni**|4a. La categoria non è elencata. L'amministratore inserisce una nuova categoria | ||6a. Creazione del servizio fallita: non sono stati inseriti tutti i campi richiesti| ||6b. Creazione del servizio fallita: il servizio è già esistente nel catalogo| |Nome | Creazione Punto vendita| |----|----| |**Precondizione**|L'amministratore ha un account abilitato| |**Post-condizione**|Il punto vendita è stato creato correttamente| |**Scenario principale**|1. L'amministratore fa il login| | |2. L'amministratore seleziona la voce gestione punti vendita dal menù| | |3. L'amministratore seleziona crea punto vendita | | |4. L'amministratore inserisce le caratteristiche del punto vendita| | |5. L'amministratore inserisce il nome utente del manager da associare al punto vendita| | |6. Il sistema conferma la creazione del punto vendita| |**Estensioni**|6a. Creazione del punto vendita fallita: non sono stati inseriti tutti i campi richiesti| |Nome | Selezione articoli da vendere| |----|----| |**Precondizione**|L'amministratore ha un account abilitato| ||Esiste il punto vendita| ||Esistono degli articoli nel catalogo| |**Post-condizione**|Gli articoli selezionati sono presenti nel punto vendita| |**Scenario principale**|1. L'amministratore fa il login| | |2. L'amministratore seleziona la voce gestione punti vendita dal menù| | |3. L'amministratore cerca e seleziona il punto vendita| | |4. L'amministratore cerca e seleziona gli articoli da aggiungere| | |5. Il sistema conferma l'aggiunta degli articoli al catalogo del punto vendita| |Nome | Creazione account manager| |----|----| |**Precondizione**|L'amministratore ha un account abilitato| ||Esiste il punto vendita| |**Post-condizione**|L'account manager è stato creato correttamente ed associato al punto vendita| |**Scenario principale**|1. L'amministratore fa il login| | |2. L'amministratore seleziona la voce gestione punti vendita dal menù| | |4. L'amministratore seleziona la voce crea manager| | |5. Il sistema conferma l'aggiunta del manager al punto vendita| |**Estensioni**|| ## Cliente |Nome | Registrazione Utente | | --- | ---| |**Pre-condizione**|| |**Post-condizione**|L' account dell' utente è stato creato| |**Scenario principale**|1. L' utente naviga sulla pagina di login| ||2. L' utente seleziona il pulsante "registrati"| ||3. L' utente fornisce i dati personali| ||4. Il sistema conferma la registrazione dell' utente| |**Estensioni**|4a. L' e-mail o il numero di telefono sono già associati ad un altro utente| ||4b. L' e-mail inserita non esiste| ||4c. L' utente non ha inserito uno o più dati necessari alla registrazione| |Nome | Ricerca articolo per consultare informazioni| | --- | ---| |**Pre-condizione**|| |**Post-condizione**|| |**Scenario principale**|1. L'utente naviga sul catalogo degli articoli del punto vendita| ||2. L'utente seleziona l'articolo di interesse| |Nome | Cliente effettua acquisto tramite lista | | --- | ---| |**Pre-condizione**|L'utente è loggato con un account abilitato| |**Post-condizione**|L'utente ha acquistato gli articoli presenti nella lista| |**Scenario principale**|1. L' utente <ins>crea una nuova lista</ins>| ||2. L'utente <ins>inserisce e/o rimuove articoli</ins>| ||3. L'utente <ins>richiede la lista in pdf sulla sua e-mail</ins>| ||4. L'utente <ins>acquista la lista</ins>| |**Estensioni**|1a. L'utente <ins>prenota gli articoli non disponibili</ins>| |Nome | Utente crea una nuova lista | | --- | ---| |**Pre-condizione**|L'utente è loggato con un account abilitato| |**Post-condizione**|La lista è presente nella sezione delle liste dell'utente| |**Scenario principale**|1. L'utente preme il pulsante crea lista ||2. Il sistema mostra il catalogo con la nuova lista attualmente in uso| |Nome | Utente carica una lista salvata| | --- | ---| |**Pre-condizione**|L'utente è loggato con un account abilitato| |**Post-condizione**|| |**Scenario principale**|1. L'utente naviga nella sezione "le mie liste"| | |2. L'utente seleziona la lista che intende modificare| | |3. Il sistema mostra il catalogo con la lista caricata attualmente in uso| |Nome | Utente inserisce nuovi articoli nella lista | | --- | ---| |**Pre-condizione**|L'utente è loggato con un account abilitato e una lista è attualmente in uso| |**Post-condizione**| L'articolo è presente nella lista| |**Scenario principale**|1. L'utente seleziona l'articolo d'interesse nel catalogo| | |2. L'utente preme il pulsante "aggiungi articolo alla lista" | |Nome | Utente rimuove articoli dalla lista | | --- | ---| |**Pre-condizione**|L'utente è loggato con un account abilitato e una lista è attualmente in uso| || L'articolo da rimuovere è presente nella lista| |**Post-condizione**| L'articolo è rimosso dalla lista| |**Scenario principale**|1. L'utente seleziona l'articolo da rimuovere dalla lista| | |2. L'utente preme il pulsante "rimuovi articolo dalla lista" | | |3. Il sistema aggiorna la lista| |Nome | Utente prenota articoli non disponibili | | --- | ---| |**Pre-condizione**|L'articolo d'interesse non è disponibile in magazzino| ||L'utente è loggato con un account abilitato e una lista è attualmente in uso| |**Post-condizione**|Il sistema memorizza id utente e la quantità di articoli prenotati| |**Scenario principale**|1. <ins>Ricerca articolo per consultare informazioni</ins>| ||2. L'utente seleziona la voce prenota articolo| ||3. Il sistema registra la prenotazione e da una conferma all'utente| |Nome | Utente lascia feedback | | --- | ---| |**Pre-condizione**|L'articolo è presente in una lista acquistat dall'utente| ||L'utente è loggato con un account abilitato| |**Post-condizione**|Il feedback è visibile tra le informazioni dell'articolo | |**Scenario principale**|1. <ins>Ricerca articolo per consultare informazioni</ins>| ||2. L'utente preme il pulsante aggiungi feedback| ||3. L'utente inserisce il gradimento e/o commenti sull'articolo| ||4. Il sistema conferma che l'operazione è avvenuta con successo| |Nome | Utente richiede la lista in pdf sulla sua e-mail| |---|---| |**Pre-condizione**|L'utente è loggato con un account abilitato| ||Una lista è attualmente in uso ed è composta da almeno un'articolo| |**Post-condizione**|L'utente ha ricevuto la mail con il PDF| |**Scenario principale**|1. L'utente preme il pulsante "salva in PDF"| ||2. Il sistema genera il PDF e lo invia in allegato all' e-mail dell'utente| ||3. Il sistema conferma l'operazione| ## Manager . Articoli - Visualizzare stato magazzino - Rifornire magazzino 2. Gestione relazioni clienti - Invio e-mail - rispondere ai commenti sugli articoli - Gestione account utenti - Disabilita account cliente - Cancella account cliente | Nome | Visualizzare stato magazzino | | --- | ---| |**Pre-condizione**|L'utente è autenticato con un account manager| |**Post-condizione**|| |**Scenario principale**|1. Il manager seleziona la voce "gestione magazzino" dal menù| |**Estensioni**|| | Nome | Rifornire magazzino | | --- | ---| |**Pre-condizione**|L'utente è autenticato con un account manager| |**Post-condizione**|Il sistema aggiorna la disponibiltà degli articoli riforniti| |**Scenario principale**|1. Il manager seleziona la voce "gestione magazzino" dal menù| ||2. Il manager seleziona l'articolo su cui deve aggiornare la disponibilità| ||3. Il manager digita la quantità degli articoli da aggiungere| ||4. Il sistema conferma la avvenuta modifica della disponibilità dell'articolo| |**Estensioni**|| | Nome | Invio e-mail agli utenti acquirenti | | --- | ---| |**Pre-condizione**|L'utente è autenticato con un account manager| ||Almeno un utente è registrato nel suo punto vendita| |**Post-condizione**|Gli utenti ricevono la mail| |**Scenario principale**|1. Il manager preme il pulsante gestione utenti| ||2. Il manager seleziona gli utenti | ||3. Il manager scrive la mail | ||4. Il manager conferma l'invio| |**Estensioni**|| | Nome | Risponde ai commenti sotto gli articoli | | --- | ---| |**Pre-condizione**|L'utente è autenticato con un account manager| ||L'articolo è stato commentato almeno una volta| |**Post-condizione**|La risposta è visualizzabile sotto al commento| |**Scenario principale**|1. Il manager naviga sul catalogo| ||2. Il manager seleziona l'articolo d'interesse| ||3. Il manager seleziona il commento e preme il pulsante rispondi| ||4. Il manager scrive la risposta| ||5. Il sistema conferma che la risposta è inserita con successo| |**Estensioni**|| | Nome | Disabilita account cliente | | --- | ---| |**Pre-condizione**|L'utente è autenticato con un account manager e almeno un cliente è registrato al suo punto vendita| |**Post-condizione**|L'utente non può fare login al sistema| |**Scenario principale**|1. Il manager preme il pulsante gestione utenti| ||2. Il manager seleziona gli utenti | ||3. Il manager preme il pulsante disabilità utenti| ||4. Il sistema chiede di confermare l'operazione | ||5. Il manager conferma l'operazione | ||6. Il sistema conferma l'avvenuta disabilitazione| |**Estensioni**|5.a Il manager annulla l'operazione| | Nome | Cancella account cliente | | --- | ---| |**Pre-condizione**|L'utente è autenticato con un account manager e almeno un cliente è registrato al suo punto vendita| |**Post-condizione**|L'account utente è eliminato dal sistema| |**Scenario principale**|1. Il manager preme il pulsante gestione utenti| ||2. Il manager seleziona gli utenti | ||3. Il manager preme il pulsante cancella utenti| ||4. Il sistema chiede di confermare l'operazione | ||5. Il manager conferma l' operazione | ||6. Il sistema conferma l'avvenuta cancellazione | |**Estensioni**|5.a Il manager annulla l'operazione| ## Schede CRC |UtenteBusiness| | |---| --| |**Responsabilita**| **Collaboratori**| |Verifica dei privilegi|UtenteDAO| |gestione utenze|| |UtenteDAO| | |---| --| |**Responsabilita**| **Collaboratori**| |gestione persistenza utenze|| |ArticoloBusiness| | |---| --| |**Responsabilita**| **Collaboratori**| |gestione articoli|ArticoloDAO|| |getione del catalogo del punto vendita|| |ArticoloDAO| | |---| --| |**Responsabilita**| **Collaboratori**| |gestione persistenza articoli|| |ProdottoBusiness| | |---| --| |**Responsabilita**| **Collaboratori**| |gestione prodotti|ProdottoDAO| |ProdottoDAO| | |---| --| |**Responsabilita**| **Collaboratori**| |gestione persistenza prodotti|| |ServizioBusiness| | |---| --| |**Responsabilita**| **Collaboratori**| |gestione servizi|ServizioDAO| |ServizioDAO| | |---| --| |**Responsabilita**| **Collaboratori**| |gestione persistenza servizi|| |PuntoVenditaBusiness | | |---| --| |**Responsabilita**| **Collaboratori**| |gestione punti vendita|PuntoVenditaDAO| ||| |PuntoVenditaDAO| | |---| --| |**Responsabilita**| **Collaboratori**| |gestione persistenza punti vendita|| |gestione persistenza degli articoli vendibili nei punti vendita|| |ListaBusiness| | |---| --| |**Responsabilita**| **Collaboratori**| |gestione liste di articoli|ListaDAO| ||| |AcquistoBusiness| | |---| --| |**Responsabilita**| **Collaboratori**| |gestione acquisti di liste|AcquistoDAO| ||| |MailAPI| | |---| --| |**Responsabilita**| **Collaboratori**| |gestione creazione e invio di email|| ||| |Feedback Business | | |---| --| |**Responsabilita**| **Collaboratori**| |gestione feedback clienti|EspressioneDiGradimentoDAO||| |gestione ordinamento feedback| |EspressioneDiGradimentoDAO | | |---| --| |**Responsabilita**| **Collaboratori**| |gestione persistenza feedback|||| |PdfAPI | | |---| --| |**Responsabilita**| **Collaboratori**| |gestione PDF ||| |MagazzinoBusiness | | |---| --| |**Responsabilita**| **Collaboratori**| |gestione magazzini di un punto vendita|MagazzinoDAO||| |MagazzinoDAO| | |---| --| |**Responsabilita**| **Collaboratori**| |gestione persistenza magazzini|| |gestione persistenza degli articoli disponibili nei magazzini|| |SessionManager| | |---| --| |**Responsabilita**| **Collaboratori**| |gestione delle sessioni||| ## Schema relazionale 1. Utente(<ins>idUtente</ins>, username, password, nome, cognome, email, data_nascita) 2. Produttore_Fornitore(<ins>idProduttore_Fornitore</ins>, sitoweb*, nome, citta, nazione, produttore_fornitore) 3. Posizione(<ins>idPosizione</ins>, scaffale, corsia) 4. Punto_Vendita(<ins>idPunto_Vendita</ins>, citta, via, civico, *Manager_Utente_idUtente*) ```Con vincolo di int. ref fra Punto_vendita(Manager_Utente_idUtente) e Manager(Utente_idUtente)``` 5. Magazzino(<ins>idMagazzino</ins>, PuntoVendita_idPuntoVendita) ```Con vincolo di int. ref fra Magazzino(PuntoVendita_idPuntoVendita) e Punto_vendita(idPuntoVendita)``` 6. Acquisto(<ins>idAcquisto</ins>, Cliente_Utente_idUtente) ```Con vincolo di int. ref fra Acquisto(Cliente_Utente_idUtente) e Cliente(Utente_idUtente)``` 7. Lista(<ins>idLista</ins>, nome, pdf*, *Cliente_Utente_idUtente*) ```Con vincolo di int. ref fra Lista(Cliente_Utente_idUtente) e Cliente(Utente_idUtente)``` 8. Categoria(<ins>idCategoria</ins>, nome, prodotto_servizio) 9. Articolo(<ins>idArticolo</ins>, prezzo, nome, descrizione, *CategoriaidCategoria*, *Produttore_Fornitore_idProduttoreFornitore*) ```Con vincolo di int. ref fra Articolo(Categoria_idCategoria) e Categoria(idCategoria)``` ```Con vincolo di int. ref fra Articolo(Produttore_Fornitore_idProduttoreFornitore) e Produttore_Fornitore(idProduttore_Fornitore)``` 10. Immagine(<ins>idImmagine</ins>, Articolo_idArticolo, immagine) ```Con vincolo di int. ref fra Immagine(Articolo_idArticolo) e Articolo(idArticolo)``` 11. Cliente(<ins>Utente_idUtente</ins>, abilitato, professione, telefono, indirizzo, *PuntoVendita_idPuntoVendita*) ```Con vincolo di int. ref fra Cliente(PuntoVendita_idPuntoVendita) e Punto_Vendita(idPunto_vendita)``` ```Con vincolo di int. ref fra Cliente(Utente_idUtente) e Utente(idUtente)``` 12. Amministratore(<ins>Utente_idUtente</ins>) ```Con vincolo di int. ref fra Amministraotore(Utente_idUtente) e Utente(idUtente)``` 13. Manager(<ins>Utente_idUtente</ins>) ```Con vincolo di int. ref fra Manager(Utente_idUtente) e Utente(idUtente)``` 14. Prodotto(<ins>Articolo_idArticolo</ins>, *id_posizione**, *SottoCategoria_idSottoCategoria**) ```Con vincolo di int. ref fra Prodotto(Articolo_idArticolo) e Articolo(idArticolo)``` ```Con vincolo di int. ref fra ProdottoPosizione_idPosizione) e Posizione(idArticolo)``` 15. Servizio(<ins>Articolo_idArticolo</ins>) ```Con vincolo di int. ref fra Servizio(Articolo_idArticolo) e Articolo(idArticolo)``` 16. PuntoVendita_has_Articolo(<ins>*PuntoVendita_idPuntoVendita*</ins>, <ins>Articolo_idArticolo</ins>) ```Con vincolo di int. ref fra PuntoVendita_has_Prodotto(PuntoVendita_idPuntoVendita) e Punto_Vendita(idPunto_vendita)``` ```Con vincolo di int. ref fra PuntoVendita_has_Prodotto(Prodotto_Articolo_idArticolo) e Articolo(Articolo_idArticolo)``` 17. Acquisto_has_Articolo(<ins>Acquisto_idAcquisto</ins>, <ins>Articolo_idArticolo</ins>, quantita) ```Con vincolo di int. ref fra Acquisto_has_Articolo(Acquisto_idAcquisto) e Acquisto(idAcquisto)``` ```Con vincolo di int. ref fra Acquisto_has_Articolo(Articolo_idArticolo) e Articolo(idArticolo)``` 18. Commento(testo,<ins>Espressione_di_gradimento_Cliente_Utente_idUtente</ins>,<ins>Espressione_di_gradimento_idArticolo</ins>) ```Con vincolo di int. ref fra Commento(Espressione_di_gradimento_Cliente_Utente_idUtente) e Espressione_di_gradimento(Cliente_Utente_idUtente)``` ```Con vincolo di int. ref fra Commento(Espressione_di_gradimento_idArticolo) e Espressione_di_gradimento(Acquisto_has_Articolo_idArticolo) ``` 19. Risposta(risposta, data,<ins>*Commento_Espressione_di_gradimento_idUtente*</ins>, *Manager_Utente_idUtente*,<ins>*Commento_Espressione_di_gradimento_idArticolo*</ins>) ```Con vincolo di int. ref fra Risposta(Commento_Espressione_di_gradimento_idUtente) e Commento(Espressione_di_gradimento_Cliente_Utente_idUtente) ``` ```Con vincolo di int. ref fra Risposta(Commento_Espressione_di_gradimento_idArticolo) e Commento(Espressione_di_gradimento_idArticolo) ``` ```Con vincolo di int. ref fra Risposta(Manager_Utente_idUtente) e Manager(Utente_idUtente) ``` 20. Lista_has_articolo(<ins>Lista_idLista</ins>, <ins>Articolo_idArticolo</ins>,quantita') ```Con vincolo di int. ref fra Lista_has_articolo(Lista_idLista) e Lista(idLista)``` ```Con vincolo di int. ref fra Lista_has_articolo(Articolo_idArticolo) e Articolo(idArticolo)``` 21. Espressione_di_gradimento( <ins>Acquisto_has_Articolo_Articolo_idArticolo</ins>, <ins>*Cliente_Utente_idUtente*</ins>, gradimento,data) ```Con vincolo di int. ref fra Espressione_di_gradimento(Acquisto_has_Articolo_Acquisto_idArticolo) e Acquisto_has_Articolo(idArticolo)``` ```Con vincolo di int. ref fra Espressione_di_gradimento(Cliente_Utente_idUtente) e Acquisto(Cliente_Utente_idUtente)``` 22. Presente_in(<ins>*Magazzino_idMagazzino*</ins>, <ins>*Prodotto_Articolo_idArticolo*</ins>, quantita, ) ```Con vincolo di int. ref fra Presente_in(Magazzino_idMagazzino) e Magazzino(idMagazzino)``` ```Con vincolo di int. ref fra Presente_in(Prodotto_Articolo_idArticolo) e Prodotto(Articolo_idArticolo)``` 23. Prenotazione(<ins>*Acquisto_has_Articolo_idAcquisto*</ins>, <ins>*Acquisto_has_Articolo_Articolo_idAcquisto*</ins>) ```Con vincolo di int. ref fra Prenotazione(Acquisto_has_Articolo_idArticolo) e Acquisto_has_articolo(Articolo_idArticolo)``` ```Con vincolo di int. ref fra Prenotazione(Acquisto_has_Articolo_idAcquisto) e Acquisto_has_Articolo(Acquisto_idAcquisto)``` 24. Prodotto_has_Prodotto(<ins>*Prodotto_Articolo_idArticolo_padre*</ins>, <ins>*Prodotto_Articolo_idArticolo_figlio*</ins>) ```Con vincolo di int. ref fra Prodotto_has_Prodotto(Prodotto_Articolo_idArticolo_padre) e Prodotto(Articolo_idArticolo)``` ```Con vincolo di int. ref fra Prodotto_has_Prodotto(Prodotto_Articolo_idArticolo_figlio) e Prodotto(Articolo_idArticolo)``` 25. Sottocategoria(<ins>*idSottocategoria*</ins>, nome) # Class diagram ```plantuml @startuml ' Model package Model #DDDDDD{ Class Amministratore extends Utente Class Articolo implements IArticolo { - int idArticolo - float prezzo - String nome - String descrizione - ArrayList<Immagine> immagini - ICategoria categoria } Articolo "0..*" - "1" Feedback Articolo "0..*" - "1" Immagine Articolo - ICategoria Class ArticoloConQuantita { - int quantita - IArticolo articolo } ArticoloConQuantita - IArticolo Class CategoriaProdotto implements ICategoria{ - String nome - int idCategoria } Class CategoriaServizio implements ICategoria{ - String nome - int idCategoria } Class Cliente extends Utente{ - boolean abilitato - String professione - String telefono - String indirizzo - int idPuntoVendita } Abstract Commento { - int idCliente - int idArticolo - String testo - Timestamp data } Class Corsia { - int numero - List<Scaffale> scaffali + ArrayList<IProdotto> getAllProducts() } Corsia "1..*" - Scaffale Class Disponibilita extends Prodotto{ - int quantita - int idMagazzino - Magazzino magazzino } Disponibilita - Magazzino Class Feedback extends Commento{ - int punteggio - Cliente cliente - Articolo articolo - Risposta risposta } Feedback - Risposta Feedback - Articolo Feedback - Cliente Class FornitoreServizio extends ProduttoreFornitore { - List<Servizio> servizi } FornitoreServizio "1..*" - Servizio Interface IArticolo { + ICategoria getCategoria() + int getIdCategoria() + String getNome() + int getId() + Float getPrezzo() + int getIdFornProd() + String getDescrizione() + ArrayList<Immagine> getImmagini() } Interface ICategoria{ + String getNome() + int getId() } Class Immagine { - int idImmagine - int idArticolo - File immagine } Interface IProdotto extends IArticolo { + Float getPrezzo() + int getId() + String getNome() + List<IProdotto> getComponents() } Class ListaArticoli { - int idLista - int idAcquisto - int idCliente - Cliente cliente - String nome - List<ArticoloConQuantita> articoli } ListaArticoli - Cliente ListaArticoli "1..*" - ArticoliConQuantita Class Magazzino { - int idMagazzino - List<Disponibilita> disponibilita - String nome - int idPuntoVendita } Magazzino "0..*" - Disponibilita Class Manager extends Utente{ - PuntoVendita puntoVendita } Manager - PuntoVendita Class Posizione { - int idCorsia - int idScaffale - Corsia corsia - Scaffale scaffale } Posizione - Corsia Posizione - Scaffale Class Prodotto extends Articolo implements IProdotto { - Produttore produttore - SottoCategoria sottoCategoria - Posizione posizione } Prodotto - Produttore Prodotto - SottoCategoria Prodotto - Posizione Class ProdottoComposito extends Articolo implements IProdotto { - List<IProdotto> sottoProdotti + Float getPrezzo() } ProdottoComposito *-- Prodotto Class Produttore extends ProduttoreFornitore{ - List<IProdotto> prodotti } Produttore "1..*" - IProdotto Abstract ProduttoreFornitore { - int id - String nome - String citta - String nazione - String sitoWeb } Class PuntoVendita { - int idPuntoVendita - int idManager - String citta - String via - String civico - List<Cliente> clienti } PuntoVendita "0..*" - Cliente Class Risposta extends Commento{ -int idManager -Manager manager } Risposta - Manager Class Scaffale { - int numero - IProdotto prodotto } Scaffale - IProdotto Class Servizio extends Articolo Class SottoCategoria { - int id - String nome } Class Utente { - int idUtente - String username - String password - String name - String surname - String email - Date dataNascita } @enduml ``` ```plantuml @startuml left to right direction ' business package Business #DDDDDD{ Interface AbstractFactory<T extends IArticolo> { + Articolo creaArticolo() + ICategoria creaCategoria() + ProduttoreFornitore creaProduttoreFornitore() + IProdottoServizioDAO<T> getDAO() } Class AcquistoBusiness { + void acquistaLista() } Class ArticoloBusiness { + ArticoloResponse creaArticolo() + Articolo Response modificaArticolo() + int rimuoviArticolo() } Class ArticoloResponse extends Response Class BestFirstFeedbackSort implements IFeedbackSortStrategy Class CategoriaBusiness { + ICategoria creaCategoria() } Class ClienteBusiness { + int rimuoviClienti() + int disabilitaClienti() } Class ClienteResponse extends Response Class CreaManagerResponse extends Response Class CreaProduttoreFornitoreResponse extends Response Abstract Documento { - PdfAPI pdfAPI + void invia() } Documento - PdfAPI Class DocumentoListaAcquisto extends Documento { - List<ArticoloConQuantita> lista } Class FactoryProvider { + AbstractFactory getFactory() } Class FeedbackBusiness { + void creaFeedback() + void sortFeedbacks() } Interface IFeedbackSortStrategy { + void sort() } Class JavaxMailAPI implements MailAPI Class ListaBusiness { + int creaLista() + int addArticoliInLista() + int rimuoviLista() } Class MagazzinoBusiness { + int aggiornaDisponibilita() } Interface MailAPI { + void sendEmail() } Class ManagerBusiness Interface PdfAPI { + void creaPdf() } Class PdfBoxAPI implements PdfAPI Class PrenotazioneBusiness Class ProdottoBusiness Class ProdottoCompositoFactory implements AbstractFactory Class ProdottoFactory implements AbstractFactory Class ProduttoreFornitoreBusiness Class PuntoVenditaBusiness { + PuntoVenditaResponse creaPuntoVendita() } Class PuntoVenditaResponse extends Response Class RecentFirstFeedbackSort implements IFeedbackSortStrategy Abstract Response<T> { - ArrayList<String> messages - T result } Class ServizioFactory implements AbstractFactory Class SessionManager { - HashMap<String, Object> session } Class SortedFeedbackList { - List<Feedback> feedBackList; - IFeedbackSortStrategy sortStrategy } SortedFeedbackList - IFeedbackSortStrategy Class SottoCategoriaBusiness { + SottoCategoria creaSottoCategoria() } Class UrgentFirstFeedbackSort implements IFeedbackSortStrategy Class UtenteBusiness { + UtenteResponse login() + ClienteResponse signUp() + CreaManagerResponse creaManager() + boolean userCan() } Class UtenteResponse extends Response } ' dao package DAO #DDDDDD { Class AcquistoDAO implements IAcquistoDAO Class ArticoloDAO implements IArticoloDAO Class CategoriaDAO implements ICategoriaDAO Class ClienteDAO implements IClienteDAO Class EspressioneDiGradimentoDAO implements IEspressioneDiGradimentoDAO Interface IAcquistoDAO Interface IArticoloDAO Interface ICategoriaDAO Interface IClienteDAO Interface IEspressioneDiGradimentoDAO Interface IImmagineDAO Interface IListaDAO Interface IMagazzinoDAO Interface IManagerDAO Class ImmagineDAO implements IImmagineDAO Interface IPosizioneDAO Interface IPrenotazioneDAO Interface IProdottoCompositoDAO Interface IProdottoDAO Interface IProdottoServizioDAO<T> Interface IProduttoreFornitoreDAO Interface IPuntoVenditaDAO Interface IServizioDAO Interface ISottoCategoriaDAO Interface IUtenteDAO Class ListaDAO implements IListaDAO Class MagazzinoDAO implements IMagazzinoDAO Class ManagerDAO implements IManagerDAO Class PosizioneDAO implements IPosizioneDAO Class PrenotazioneDAO implements IPrenotazioneDAO Class ProdottoCompositoDAO implements IProdottoCompositoDAO, IProdottoServizioDAO Class ProduttoreFornitoreDAO implements IProduttoreFornitoreDAO Class ProdottoDAO implements IProdottoDAO, IProdottoServizioDAO Class PuntoVenditaDAO implements IPuntoVenditaDAO Class ServizioDAO implements IServizioDAO, IProdottoServizioDAO Class SottoCategoriaDAO implements ISottoCategoriaDAO Class UtenteDAO implements IUtenteDAO } AcquistoBusiness - IAcquistoDAO ArticoloBusiness - IArticoloDAO ArticoloBusiness - IImmagineDAO CategoriaBusiness - ICategoriaDAO ClienteBusiness - IClienteDAO FeedbackBusiness - IEspressioneDiGradimentoDAO ListaBusiness - IListaDAO MagazzinoBusiness - IMagazzinoDAO ManagerBusiness - IManagerDAO PrenotazioneBusiness - IPrenotazioneDAO ProdottoBusiness - IProdottoDAO ProduttoreFornitoreBusiness - IProduttoreFornitoreDAO PuntoVenditaBusiness - IPuntoVenditaDAO SottoCategoriaBusiness - ISottoCategoriaDAO UtenteBusiness - IUtenteDAO @enduml ``` # Design patterns utilizzati Dovremmo avere prodottoFactory e servizio factory pF: - ArticoloProdotto - FornitoreProdotto - CategoriaProdotto sF: - ArticoloServizio - FornitoreServizio - CategoriaServizio - **Abstract factory** - Dove: Per la creazione di prodotti o servizi e delle classi inerenti come categoria e ProduttoreFornitore. - Perchè: - per poter garantire l'aggiunta di articoli di un nuovo tipo senza modificare il codice dal lato del chiamante. - - **Iterator** - **Decorator** - Dove: Per gestire l'aggiunta di funzionalita' al menu basate sui privilegi dell'utente loggato - Perchè: per riutilizzare il codice e evitare di replicarlo per ogni tipo di utenza reimplementando una classe diversa - **Command** - **Strategy** - **Composite** - Dove: per gestire in modo trasparente i prodotti e i prodotti compositi attraverso l' interfaccia IProdotto - Perchè: per lavorare con strutture ad albero quali il prodotto composito. In particolare, il pattern è stato utilizzato per calcolarne il prezzo, definito come la somma dei prezzi dei suoi componenti - **Singleton** - Dove: nelle classi dei package Business e DAO e nella classe DBConnection - Perchè: per garantire che ci sia una singola istanza per ogni classe che implementa il design pattern Singleton

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully