12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- % !TEX root = ../main.tex
- \paragraph{Elenco degli ingredienti disponibili}
- *l* committente ha chiesto espressamente l'elenco degli ingredienti disponibili.
- Tuttavia, questo è calcolabile a partire dagli acquisti e dalle produzioni.
- Ho convinto *l* committente a non memorizzare separatamente l'inventario degli
- ingredienti, rassicurandol* che avrei fornito una vista logica ``Inventario".
- \begin{lstlisting}[style=SQLu][float,floatplacement=H]
- CREATE VIEW IngredientiAcquistatiTotali (IdIngrediente, Ingrediente,
- Totale)
- AS (SELECT i.IdIngrediente IdIngrediente, i.Descrizione Ingrediente,
- SUM(a.Quantità) Totale
- FROM Acquisti a
- JOIN Ingredienti i ON i.IdIngrediente = a.IdIngrediente
- GROUP BY i.IdIngrediente, i.Descrizione)
- CREATE VIEW IngredientiInUso (IdIngrediente, Ingrediente, InUso)
- AS (SELECT i.IdIngrediente IdIngrediente, i.Descrizione Ingrediente,
- SUM(ir.Quantità) InUso
- FROM IngredientiRicette ir
- JOIN Ingredienti i ON i.IdIngrediente = ir.IdIngrediente
- JOIN Produzioni p ON p.IdRicetta = ir.IdRicetta
- WHERE p.Stato IS NULL
- GROUP BY i.IdIngrediente, i.Descrizione)
- CREATE VIEW IngredientiUsati (IdIngrediente, Ingrediente,
- QuantitàUsata)
- AS (SELECT i.IdIngrediente IdIngrediente, i.Descrizione Ingrediente,
- SUM(ir.Quantità) Usati
- FROM IngredientiRicette ir
- JOIN Ingredienti i ON i.IdIngrediente = ir.IdIngrediente
- JOIN Produzioni p ON p.IdRicetta = ir.IdRicetta
- WHERE p.Stato = 0
- GROUP BY i.IdIngrediente, i.Descrizione)
- CREATE VIEW Inventario (IdIngrediente, Ingrediente, QuantitàTotale,
- QuantitàDisponibile)
- AS (SELECT iat.IdIngrediente IdIngrediente, iat.Ingrediente Ingrediente,
- (iat.Totale - COALESCE(iu.Usati, 0)) QuantitàTotale,
- (iat.Totale - COALESCE(iu.Usati, 0)
- - COALESCE(iiu.InUso, 0)) QuantitàDisponibile
- FROM IngredientiAcquistatiTotali iat
- LEFT JOIN IngredientiUsati iu
- ON iu.idIngrediente = iat.IdIngrediente
- LEFT JOIN IngredientiInUso iiu
- ON iiu.idIngrediente = iat.IdIngrediente
- WHERE iat.Totale - COALESCE(iu.Usati, 0) > 0)
- \end{lstlisting}
- Ogni volta che si inizia una produzione, l'applicazione controlla che la
- quantità di ingredienti disponibili superi la quantità degli ingredienti
- necessari alla preparazione.
- L'applicazione può anche mostrare una ``lista della spesa" basandosi su ricette
- che si vogliono preparare e sulla vista inventario.
- L'applicazione mostrerà ad ogni birrai* solo le ricette di cui è aut*r* o di un
- birrificio per cui lavora.
- \begin{minipage}{\linewidth}
- \paragraph{Vincoli non catturati graficamente}
- \begin{itemize}
- \item Il tipo di ingrediente determina l'unità di misura.
- Esiste un breve elenco di tipi ingredienti disponibili con la relativa unità di
- misura.
- Non ho creato una classe ``TipiIngredienti" per contenere il numero di classi,
- ma in effetti il tipo determina funzionalmente l'unità di misura ed esistono
- pochi tipi, mentre ci sono molti ingredienti per ogni tipo.
- \item In ogni produzione, il NumeroBottiglie diviso per 0.5 non deve superare la
- CapacitàProduttiva del birrificio.
- \end{itemize}
- \end{minipage}
|