public bool Producir(ushort recetaId, decimal CantidadAProducir, ushort BodegaId)
        {
            bool resultado = false;
            Expression <Func <Receta, bool> > elWhereDeReceta;

            elWhereDeReceta = n => n.RecetaId == recetaId;

            var ResultadoReceta = _recetaRepository.TraerUnoAsync(elWhereDeReceta
                                                                  , new List <string> {
                "RecetaDetalles"
            }                                                                           //, "Artículo.ArtículoTipo" }
                                                                  );
            var LaReceta = ResultadoReceta.Result;

            List <uint> ListaDeArtículos = new List <uint>();

            foreach (RecetaDetalle unDetalle in LaReceta.RecetaDetalles)
            {
                ListaDeArtículos.Add(unDetalle.ArtículoId);
            }

            var Multiplicador = CantidadAProducir / LaReceta.CantidadProducida;



            Expression <Func <Inventario, bool> > elWhereDeInventario;

            elWhereDeInventario = n => n.BodegaId == BodegaId && ListaDeArtículos.Contains(n.ArtículoId);

            var ResultadoInventario = _inventarioRepository.TraerVariosSinTopeAsync(elWhereDeInventario
                                                                                    , new List <string> {
                "Artículo", "Artículo.Unidad"
            }
                                                                                    , null
                                                                                    );
            var ElInventario = ResultadoInventario.Result;

            //	Validar la existencia de los componentes de la receta.
            List <string> NoCumplen = new List <string>();

            var query = from artículoRec in LaReceta.RecetaDetalles
                        join artículoInv in ElInventario
                        on new { artículoRec.ArtículoId }
            equals new { artículoInv.ArtículoId } into XXX
            from UnaCosa in XXX.DefaultIfEmpty()
            select new
            {
                artículoId = artículoRec.ArtículoId,
                artículoRec.Artículo.Nombre,
                UnidadCódigo       = artículoRec.Artículo.Unidad.Código,
                CantidadRequerida  = artículoRec.Cantidad * Multiplicador,
                CantidadInventario = UnaCosa?.Cantidad ?? 0m
            };


            // Si superamos la validación de existencia quitamos los insumos y aumentamos el resultado
            ushort CuantosNoCumplen = 0;

            foreach (var registro in query)
            {
                if (registro.CantidadInventario < registro.CantidadRequerida)
                {
                    NoCumplen.Add($"No hay suficiente {registro.Nombre}. Se requieren {registro.CantidadRequerida} {registro.UnidadCódigo} y solo hay {registro.CantidadInventario}");
                    CuantosNoCumplen++;
                }
            }
            if (CuantosNoCumplen > 0)
            {
                throw new ApplicationException(NoCumplen.ToString());
            }

            // Necesitamos disminuir el inventario de insumos



            // Luego aumentar el inventario de producto terminado


            // Finalmente SaveChanges


            return(resultado);
        }