private string RegistrarSalidaProductoCompuesto(SalidaProductoRequest request, Producto producto)
        {
            ProductoCompuesto productoCompuesto;

            try
            {
                productoCompuesto = (ProductoCompuesto)producto;
            }
            catch (Exception e)
            {
                return("No es un producto Compuesto");
            }
            var productosEnInventario = new List <Producto>();

            foreach (var p in productoCompuesto.Ingredientes)
            {
                var auxProductos = _productoRepository.FindBy(c => c.Codigo == p.Codigo);
                foreach (var s in auxProductos)
                {
                    Console.WriteLine($"nombre {s.Nombre} foregn {s.ProductoCompuestoId}");
                }

                Producto auxProducto;
                if (p.GetType() == typeof(ProductoCompuesto))
                {
                    auxProducto = auxProductos.FirstOrDefault();
                }
                else
                {
                    auxProducto = auxProductos.FirstOrDefault(x => x.ProductoCompuestoId == null);
                }
                if (auxProducto == null)
                {
                    return("No se encontro el producto");
                }
                productosEnInventario.Add(auxProducto);
            }
            productoCompuesto.ProductosEnInventario = productosEnInventario;
            var response = productoCompuesto.RegistrarSalidaProducto(request.Cantidad);

            if (response.Contains("Error"))
            {
                return(response);
            }
            try
            {
                foreach (var p in productoCompuesto.ProductosEnInventario)
                {
                    _productoRepository.Update(p);
                }
            }
            catch (Exception e)
            {
                return("no se puede actualizar");
            }

            _unitOfWork.Commit();
            return($"se registro la salida de {productoCompuesto.Cantidad} {productoCompuesto.Nombre}");
        }
 public async Task <List <Producto> > FindBy(Expression <Func <Producto, bool> > predicate)
 {
     return(await _productoRepository.FindBy(predicate));
 }