/// <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> /// 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); }