/// <summary> /// Actualiza el stock de ingredientes /// </summary> /// <param name="receta">receta que contiene litros a preparar, ingredientes y sus cantidades necesarias</param> public void CalcularStockRestanteIngredientes(RecetaCerveza receta) { foreach (Ingrediente ingredienteARestarStock in receta.ingredientes) { ingredienteARestarStock.RestarStock(ingredienteARestarStock, this.StockIngredientes); } }
/// <summary> /// Empieza a cocinar la cerveza siempre que haya stock de ingredientes necesarios /// Si falla se guarda el error en un archivo de log /// Si puede empezar a cocinar se suma la cerveza al stock actual y se restan delstock de ingredientes los utilizados /// </summary> /// <param name="idTipoCerveza"></param> /// <param name="tipo"></param> /// <param name="litros"></param> /// <returns>Devuelve true si puede empezar a cocinar la cerveza, false caso contrario</returns> public bool Cocinar(int idTipoCerveza, string tipoReceta, float litros) { bool estaCocinando = false; ETipoCerveza tipoCervezaAux; Cerveza cerveza; RecetaCerveza receta = null; Fermentador fermentadorDisponible = null; try { if (Enum.TryParse <ETipoCerveza>(tipoReceta, out tipoCervezaAux)) { receta = new RecetaCerveza(idTipoCerveza, tipoCervezaAux, litros); receta.CalcularIngredientes(); fermentadorDisponible = BuscarFermentadorDisponible(receta); } if (receta != null && fermentadorDisponible != null && this.ValidarStockListaIngredientes(receta) ) { if (tipoCervezaAux is ETipoCerveza.IPA) { cerveza = new CervezaIPA(receta); FabricaBebidas.controlStockCerveza.Add(cerveza); } else if (tipoCervezaAux is ETipoCerveza.Kolsh) { cerveza = new CervezaKolsh(receta); FabricaBebidas.controlStockCerveza.Add(cerveza); } CalcularStockRestanteIngredientes(receta); fermentadorDisponible.CapacidadLitros = receta.LitrosAPreparar; PuedeEmpezarACocinarEvento?.Invoke(); estaCocinando = true; Thread.Sleep(3500); FinCoccionEvento?.Invoke(); } } catch (LitrosAPrepararExcepcion ex) { Error err = new Error(ex); err.LoguearError(); } catch (NullReferenceException ex) { Error err = new Error(ex); err.LoguearError(); } return(estaCocinando); }
/// <summary> /// Valida haya suficiente stock de una lista ingredientes /// </summary> /// <param name="stockIngredientes"></param> /// <param name="receta"></param> /// <returns></returns> public bool ValidarStockListaIngredientes(RecetaCerveza receta) { bool hayStock = true; foreach (Ingrediente i in receta.ingredientes) { if (!this.ValidarStockIngrediente(i.idIngrediente, i.stock)) { hayStock = false; break; } } return(hayStock); }
/// <summary> /// Busca un fermentador disponible teniendo en cuenta el tipo de cerveza que se va a guardar y la capacidad de almacenamiento /// </summary> /// <param name="receta"></param> /// <returns>Devuelve un fermentador si cumple con las condiciones, sino null</returns> public Fermentador BuscarFermentadorDisponible(RecetaCerveza receta) { Fermentador fermentadorDisponible = null; foreach (Fermentador fermentador in listaFermentadores) { if (fermentador.tipoCerveza == receta.tipoCerveza && fermentador.CapacidadLitros >= receta.LitrosAPreparar) { fermentadorDisponible = fermentador; break; } } return(fermentadorDisponible); }
/// <summary> /// Constructor con parametros /// </summary> /// <param name="receta">receta que tiene ingredientes y cantidades</param> public CervezaIPA(RecetaCerveza receta) : base(ETipoCerveza.IPA, receta) { }
/// <summary> /// COnstructor con parametros /// </summary> /// <param name="receta">receta que tiene ingredientes y cantidades</param> public CervezaKolsh(RecetaCerveza receta) : base(ETipoCerveza.Kolsh, receta) { this.ibu = 6; }
/// <summary> /// Constructor con parametros /// </summary> /// <param name="tipo">tipo de cerveza a preparar</param> /// <param name="receta">receta con ingredientes y cantidad necesaria de ellos</param> public Cerveza(ETipoCerveza tipo, RecetaCerveza receta) { this.tipo = tipo; this.receta = receta; }