public static Inventario Convertir(InventarioDto dto)
 {
     if (dto != null)
     {
         return(CrearEntidad(dto));
     }
     else
     {
         return(null);
     }
 }
 private static Inventario CrearEntidad(InventarioDto dto)
 {
     return(new Inventario
     {
         Id = dto.Id,
         BodegaId = dto.Bodega.Id,
         Bodega = BodegaMapeo.Convertir(dto.Bodega),
         ProductoId = dto.Producto.Id,
         Producto = ProductoMapeo.Convertir(dto.Producto),
         Cantidad = dto.Cantidad,
         ValorAcumulado = dto.ValorAcumulado,
         Creacion = dto.Creacion,
         UltimaModificacion = dto.UltimaModificacion
     });
 }
        public async Task <Resultado <MovimientoDto> > CargarProducto(MovimientoRequest movimiento)
        {
            List <string> errores = new List <string>();
            Guid          bodegaId;
            Guid          productoId;
            BodegaDto     bodega   = null;
            ProductoDto   producto = null;

            if (Guid.TryParse(movimiento.BodegaId, out bodegaId))
            {
                bodega = await _repositorioBodega.BuscarBodega(bodegaId);

                if (bodega == null)
                {
                    errores.Add($"La bodega con Id {movimiento.BodegaId} no esta en el sistema");
                }
            }
            else
            {
                errores.Add("La Id de la bodega no tiene el formato correcto");
            }
            if (Guid.TryParse(movimiento.ProductoId, out productoId))
            {
                producto = await _repositorioProducto.BuscarProducto(productoId);

                if (producto == null)
                {
                    errores.Add($"El producto con Id {movimiento.ProductoId} no esta en el sistema");
                }
            }
            else
            {
                errores.Add("La Id del producto no tiene el formato correcto");
            }

            if (movimiento.Cantidad <= 0)
            {
                errores.Add("La cantidad debe ser mayor a 0");
            }

            if (movimiento.Valor <= 0)
            {
                errores.Add("El valor debe ser mayor a 0");
            }

            if (errores.Count > 0)
            {
                return(Resultado <MovimientoDto> .Failure(errores));
            }

            InventarioDto inventario = await _repositorioInventario.ObtenerInventario(bodega.Id, producto.Id);

            int capacidadDisponible = 0;

            if (inventario != null)
            {
                capacidadDisponible = bodega.CapacidadMaxima - inventario.Cantidad;
            }
            else
            {
                capacidadDisponible = bodega.CapacidadMaxima;
            }

            if (movimiento.Cantidad > capacidadDisponible)
            {
                return(Resultado <MovimientoDto> .Failure("La cantidad de producto a ingresar supera el maximo de productos totales permitido en la bodega"));
            }

            MovimientoDto movimientoCrear = new MovimientoDto
            {
                Id = Guid.NewGuid(),
                FechaMovimiento = DateTime.Now,
                Bodega          = bodega,
                Producto        = producto,
                Cantidad        = movimiento.Cantidad,
                Valor           = movimiento.Valor,
                Tipo            = TipoMovimiento.Ingreso
            };

            MovimientoDto movimientoCreado = await _repositorioInventario.GuardarMovimiento(movimientoCrear);

            if (movimientoCreado != null)
            {
                await _repositorioInventario.ActualizarInvetario(movimientoCreado);

                return(Resultado <MovimientoDto> .Success(movimientoCreado));
            }
            else
            {
                errores.Add("Se ha presnetado un problema al guardar el movimiento");
                return(Resultado <MovimientoDto> .Failure(errores));
            }
        }