예제 #1
0
        public async Task <ProductoDto> ObtenerProducto(Guid id)
        {
            ProductoDto producto = await _repositorio.BuscarProducto(id);

            return(producto);
        }
        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));
            }
        }