コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }