DietExt

Requisiti Estesi

L'applicazione progettata per gestire una dieta grazie al calcolo dei valori nutrizionali è stata modificata per fornire servizi per ordinare e consegnare cibo takeaway.

L'applicazione permette di creare ristoranti, registrare utenti, inserire ordini, ecc.

Tutte le classi devono essere nel package "diet".

R5 - Ristorante

Un oggetto Restaurant può essere creato fornendo un nome ed un riferimento all'oggetto Food in modo che tutti gli ingredienti, i prodotti e le ricette possano essere definite per ciascun ristorante individualmente.

Un ristorante è identificato dal suo nome. Attraverso il metodo setHours() è possibile definire l'orario di servizio del ristorante. Il metodo accetta un vettore di stringhe (in numero pari di elementi) secondo il formato "HH:MM", tale per cui le ore di chiusura seguono le ore di apertura (es., per un ristorante aperto dalle 8:15 alle 14:00 e dalle 19:00 alle 00:00, gli argomenti devono essere "08:15", "14:00", "19:00", "00:00"). Il metodo getter getName() restituisce il nome del ristorante. Un ristorante offre diversi menù che possono essere creati utilizzando il metodo createMenu() che ha per argomento il nome del menù e ritorna un oggetto Menu.

I ristoranti possono essere inseriti nel sistema utilizzando il metodo addRestaurant() della classe di facciata Takeaway. Il metodo restaurants() ritorna i nomi dei ristoranti inseriti.

R6 - Utenti

Un utente è definito fornendo il suo nome, cognome, email e numero di telefono al metodo registerUser() il quale ritorna un oggetto User. Sono disponibili dei metodi getter per tutti i campi (getFirstName(), getLastName(), getEmail(), getPhone()), mentre i metodi setter sono forniti solo per l'email ed il numero di telefono (setEmail(), setPhone()). La rappresentazione come stringa dell'oggetto User è il cognome separato da uno spazio e seguito dal nome.

Per ottenere gli utenti disponibili è possibile utilizzare il metodo users() della classe Takeaway che ritorna una collezione di utenti ordinati per cognome e, nel caso di cognomi uguali, per nome.

R7 - Ordini

Un utente registrato può effettuare un ordine in uno dei ristoranti disponibili. Per tale scopo il metodo createOrder() accetta come argomenti l'oggetto User che effettua l'ordine, il nome del ristorante (String) e l'orario di consegna desiderato (con ore e minuti come numeri interi). Inoltre, se per un certo ordine l'orario di consegna è al di fuori dell'orario di servizio del ristorante, l'orario di consegna è impostato alla prima ora di apertura successiva (es., facendo un ordine per un ristorante con orario di servizio dalle 8:15 alle 14:00 e dalle 19:00 alle 00:00, e richiedendo una consegna per le 15:30, l'orario di consegna sarà impostato alle 19:00).

Un ordine può essere in uno dei seguenti stati: ORDERED, READY e DELIVERED, accessibile attraverso i metodi setter e getter setStatus() e getStatus() (ORDERED è lo stato di default). Inoltre, il tipo di pagamento di un ordine può essere: PAID, CASH o CARD, accessibile attraverso i metodi setter e getter setPaymentMethod() e getPaymentMethod() (CASH è il pagamento di default).

I menù possono essere aggiunti ad un ordine chiamando il metodo addMenus e specificando il nome del menù (come stringa) e la quantità (come numero intero).

Quando un ordine è stampato, deve essere formattato come segue:

"RESTAURANT_NAME, USER_FIRST_NAME USER_LAST_NAME : DELIVERY(HH:MM):
	MENU_NAME_1->MENU_QUANTITY_1
	...
	MENU_NAME_k->MENU_QUANTITY_k
"

I menù sono ordinati per nome e sono riportati, uno per linea, preceduti da una tabulazione ('\t').

R8 - Informazioni

Per ottenere alcune informazioni relative ai ristoranti può essere utilizzato il metodo openedRestaurants() il quale ha un argomento di tipo stringa nel formato "HH:MM" e ritorna una collezione di oggetti Restaurant che sono aperti in un certo orario, ordinati alfabeticamente per nome. Un ristorante è aperto se c'è almeno un segmento di orario di servizio tale per cui l'orario richiesto è compreso nell'intervallo [aperto, chiuso).

Le informazioni relative agli ordini di un ristorante possono essere ottenute attraverso il metodo ordersWithStatus() della classe Restaurant. Tale metodo ritorna una stringa ottenuta dalla concatenazione di tutti gli ordini che soddisfano il criterio.

Napoli, Judi Dench : (19:00):
	M6->1
Napoli, Ralph Fiennes : (19:00):
	M1->2
	M6->1

La lista è ordinata per nome del ristorante, nome dell'utente ed orario di consegna.