public async Task MoverProductoBodegasTest() { Console.WriteLine(_testContext.TestName); var client = _factory.CreateClient(); MovimientoBodegasRequest movimiento = new MovimientoBodegasRequest { BodegaOrigenId = "51ed6452-d6b5-4fa6-a1e4-1e1fbd16d72d", BodegaDestinoId = "74a353ec-7b55-4a64-b919-bf6069e6308d", ProductoId = "ea9acaa9-adaf-45bd-980d-a1bb8ab7abc3", Cantidad = 5, Valor = 50000 }; StringContent cuerpo = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(movimiento), Encoding.UTF8, "application/json"); var response = await client.PostAsync("api/Inventario/MoverProductoBodegas", cuerpo); Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); Assert.AreEqual("application/json; charset=utf-8", response.Content.Headers.ContentType?.ToString()); var result = await response.Content.ReadAsStringAsync(); Resultado <MovimientoDto> resultado = Newtonsoft.Json.JsonConvert.DeserializeObject <Resultado <MovimientoDto> >(result); Assert.IsNotNull(resultado); Assert.AreEqual(resultado.Correcto, true); Assert.IsNotNull(resultado.Datos); Assert.AreEqual(Guid.Parse("74a353ec-7b55-4a64-b919-bf6069e6308d"), resultado.Datos.Bodega.Id); Assert.AreEqual(Guid.Parse("ea9acaa9-adaf-45bd-980d-a1bb8ab7abc3"), resultado.Datos.Producto.Id); Assert.AreEqual(5, resultado.Datos.Cantidad); Assert.AreEqual(50000, resultado.Datos.Valor); Assert.AreEqual(TipoMovimiento.Ingreso, resultado.Datos.Tipo); }
public async Task MoverProductoBodegasSupererMaximoDestinoTest() { Console.WriteLine(_testContext.TestName); var client = _factory.CreateClient(); MovimientoBodegasRequest movimiento = new MovimientoBodegasRequest { BodegaOrigenId = "51ed6452-d6b5-4fa6-a1e4-1e1fbd16d72d", BodegaDestinoId = "74a353ec-7b55-4a64-b919-bf6069e6308d", ProductoId = "ea9acaa9-adaf-45bd-980d-a1bb8ab7abc3", Cantidad = 15, Valor = 100000 }; StringContent cuerpo = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(movimiento), Encoding.UTF8, "application/json"); var response = await client.PostAsync("api/Inventario/MoverProductoBodegas", cuerpo); Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode); Assert.AreEqual("application/json; charset=utf-8", response.Content.Headers.ContentType?.ToString()); var result = await response.Content.ReadAsStringAsync(); Resultado <MovimientoDto> resultado = Newtonsoft.Json.JsonConvert.DeserializeObject <Resultado <MovimientoDto> >(result); Assert.IsNotNull(resultado); Assert.AreEqual(false, resultado.Correcto); Assert.IsNull(resultado.Datos); Assert.AreEqual(1, resultado.Errores.Length); Assert.AreEqual("La cantidad de producto a sacar supera la cantidad disponible en la bodega de origen", resultado.Errores[0]); }
public async Task <ActionResult <Resultado <MovimientoDto> > > MoverProductoBodegas([FromBody] MovimientoBodegasRequest movimiento) { if (movimiento == null) { return(BadRequest(Resultado <MovimientoDto> .Failure("No se encontraron datos para procesar"))); } var resutlado = await _servicio.MoverProductoBodegas(movimiento); if (resutlado.Correcto) { return(Ok(resutlado)); } else { return(BadRequest(resutlado)); } }
public async Task <Resultado <MovimientoDto> > MoverProductoBodegas(MovimientoBodegasRequest movimiento) { List <string> errores = new List <string>(); Guid bodegaOrigenId; Guid bodegaDestinoId; Guid productoId; BodegaDto bodegaOrigen = null; BodegaDto bodegaDestino = null; ProductoDto producto = null; if (Guid.TryParse(movimiento.BodegaOrigenId, out bodegaOrigenId)) { bodegaOrigen = await _repositorioBodega.BuscarBodega(bodegaOrigenId); if (bodegaOrigen == null) { errores.Add($"La bodega origen con Id {movimiento.BodegaOrigenId} no esta en el sistema"); } } else { errores.Add("La Id de la bodega origen no tiene el formato correcto"); } if (Guid.TryParse(movimiento.BodegaDestinoId, out bodegaDestinoId)) { bodegaDestino = await _repositorioBodega.BuscarBodega(bodegaDestinoId); if (bodegaDestino == null) { errores.Add($"La bodega destino con Id {movimiento.BodegaDestinoId} no esta en el sistema"); } } else { errores.Add("La Id de la bodega destino 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 inventarioOrigen = await _repositorioInventario.ObtenerInventario(bodegaOrigen.Id, producto.Id); InventarioDto inventarioDestino = await _repositorioInventario.ObtenerInventario(bodegaDestino.Id, producto.Id); int cantidadDisponibleOrigen = 0; if (inventarioOrigen != null) { cantidadDisponibleOrigen = inventarioOrigen.Cantidad; } else { cantidadDisponibleOrigen = 0; } if (movimiento.Cantidad > cantidadDisponibleOrigen) { errores.Add("La cantidad de producto a sacar supera la cantidad disponible en la bodega de origen"); } if (movimiento.Valor > inventarioOrigen.ValorAcumulado) { errores.Add("El valor del movimiento a sacar supera el valor acumulado para ese producto en la bodega de origen"); } int capacidadDisponibleDestino = 0; if (inventarioDestino != null) { capacidadDisponibleDestino = bodegaDestino.CapacidadMaxima - inventarioDestino.Cantidad; } else { capacidadDisponibleDestino = bodegaDestino.CapacidadMaxima; } if (movimiento.Cantidad > capacidadDisponibleDestino) { errores.Add("La cantidad de producto a ingresar supera el maximo de productos totales permitido en la bodega de destino"); } if (errores.Count > 0) { return(Resultado <MovimientoDto> .Failure(errores)); } MovimientoDto movimientoSacar = new MovimientoDto { Id = Guid.NewGuid(), FechaMovimiento = DateTime.Now, Bodega = bodegaOrigen, Producto = producto, Cantidad = movimiento.Cantidad, Valor = movimiento.Valor, Tipo = TipoMovimiento.Salida }; MovimientoDto movimientoCargar = new MovimientoDto { Id = Guid.NewGuid(), FechaMovimiento = DateTime.Now, Bodega = bodegaDestino, Producto = producto, Cantidad = movimiento.Cantidad, Valor = movimiento.Valor, Tipo = TipoMovimiento.Ingreso }; MovimientoDto movimientoSacarCreado = await _repositorioInventario.GuardarMovimiento(movimientoSacar); if (movimientoSacarCreado != null) { await _repositorioInventario.ActualizarInvetario(movimientoSacarCreado); MovimientoDto movimientoCargarCreado = await _repositorioInventario.GuardarMovimiento(movimientoCargar); if (movimientoCargarCreado != null) { await _repositorioInventario.ActualizarInvetario(movimientoCargarCreado); return(Resultado <MovimientoDto> .Success(movimientoCargarCreado)); } else { errores.Add("Se ha presnetado un problema al guardar el movimiento"); } } else { errores.Add("Se ha presnetado un problema al guardar el movimiento"); } return(Resultado <MovimientoDto> .Failure(errores)); }