public void GestorUbicaciones_Ejecutar_siLaCantidadDaJustaNoHayQueInsertarNuevaUbicacion() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 15, Producto = "A", Cantidad = 7, BaseImponible = 100, CantidadReservada = 7, FechaEntrega = new DateTime() }; // Hay reservadas más cantidad de las que tenemos en ubicaciones UbicacionPicking ubicacion = new UbicacionPicking { Id = 1, Producto = "A", Cantidad = 7, CantidadNueva = 7, Estado = 0, EstadoNuevo = 0 }; List<UbicacionPicking> ubicaciones = new List<UbicacionPicking>(); ubicaciones.Add(ubicacion); GestorUbicaciones gestor = new GestorUbicaciones(linea, ubicaciones); gestor.Ejecutar(); UbicacionPicking ubicacionNueva = ubicaciones.FindLast(u => u.Id == 0); Assert.IsNull(ubicacionNueva); }
public void GestorUbicaciones_Ejecutar_siEstaElProductoCambiaLaCantidadNuevaYElEstado() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, TipoLinea = Constantes.TiposLineaVenta.PRODUCTO, Producto = "A", Cantidad = 7, BaseImponible = 100, CantidadReservada = 7, FechaEntrega = new DateTime() }; UbicacionPicking ubicacion = new UbicacionPicking { Id = 1, Producto = "A", Cantidad = 10, CantidadNueva = 10, Estado = 0, EstadoNuevo = 0 }; List<UbicacionPicking> ubicaciones = new List<UbicacionPicking>(); ubicaciones.Add(ubicacion); GestorUbicaciones gestor = new GestorUbicaciones(linea, ubicaciones); gestor.Ejecutar(); Assert.AreEqual(10, ubicacion.Cantidad); Assert.AreEqual(7, ubicacion.CantidadNueva); Assert.AreEqual(0, ubicacion.Estado); Assert.AreEqual(3, ubicacion.EstadoNuevo); Assert.AreEqual(1, ubicacion.LineaPedidoVentaId); }
public void Ejecutar() { bool continuar = true; int cantidadUbicada = 0; UbicacionPicking ubicacion; bool insertarUbicacion; if (linea.TipoLinea != Constantes.TiposLineaVenta.PRODUCTO) { return; } while (continuar) { ubicacion = ubicaciones.FirstOrDefault(u => u.Producto == linea.Producto && u.Estado == u.EstadoNuevo); if (ubicacion != null) { insertarUbicacion = false; if (linea.CantidadReservada - cantidadUbicada < ubicacion.CantidadNueva) { ubicacion.CantidadNueva = linea.CantidadReservada - cantidadUbicada; insertarUbicacion = true; } cantidadUbicada += ubicacion.CantidadNueva; ubicacion.LineaPedidoVentaId = linea.Id; ubicacion.EstadoNuevo = Constantes.Ubicaciones.RESERVADO_PICKING; continuar = cantidadUbicada < linea.CantidadReservada; if (insertarUbicacion) { UbicacionPicking ubicacionNueva = new UbicacionPicking { CopiaId = ubicacion.Id != 0 ? ubicacion.Id : ubicacion.CopiaId, Producto = ubicacion.Producto, Cantidad = ubicacion.Cantidad - ubicacion.CantidadNueva, CantidadNueva = ubicacion.Cantidad - ubicacion.CantidadNueva, Estado = ubicacion.Estado, EstadoNuevo = ubicacion.Estado }; ubicaciones.Add(ubicacionNueva); } if (ubicacion.Id == 0 && ubicacion.CopiaId == 0) { throw new Exception("Error en los datos de las ubicaciones"); } } else { // La ubicación está descuadrada /* UbicacionPicking ubicacionCuadre = new UbicacionPicking { CopiaId = 0, Producto = linea.Producto, Cantidad = linea.CantidadReservada - cantidadUbicada, CantidadNueva = linea.CantidadReservada - cantidadUbicada, Estado = Constantes.Ubicaciones.UBICADO, EstadoNuevo = Constantes.Ubicaciones.PENDIENTE_UBICAR, LineaPedidoVentaId = linea.Id }; ubicaciones.Add(ubicacionCuadre); continuar = false; */ throw new ArgumentException("La ubicación está descuadrada", new Exception("Nº Orden Línea de venta: " + linea.Id.ToString())); } } }
public void GestorUbicaciones_Ejecutar_siUnaUbicacionSeDivideDosVecesCogeCopiaIdEnVezDeId() { LineaPedidoPicking linea1 = new LineaPedidoPicking { Id = 1, TipoLinea = Constantes.TiposLineaVenta.PRODUCTO, Producto = "A", Cantidad = 5, CantidadReservada = 5 }; LineaPedidoPicking linea2 = new LineaPedidoPicking { Id = 1, TipoLinea = Constantes.TiposLineaVenta.PRODUCTO, Producto = "A", Cantidad = 4, CantidadReservada = 4 }; UbicacionPicking ubicacion = new UbicacionPicking { Id = 1, Producto = "A", Cantidad = 17, CantidadNueva = 17, Estado = 0, EstadoNuevo = 0 }; List<UbicacionPicking> ubicaciones = new List<UbicacionPicking>(); ubicaciones.Add(ubicacion); GestorUbicaciones gestor1 = new GestorUbicaciones(linea1, ubicaciones); gestor1.Ejecutar(); GestorUbicaciones gestor2 = new GestorUbicaciones(linea2, ubicaciones); gestor2.Ejecutar(); Assert.AreEqual(3, ubicaciones.Count); if (ubicaciones.Count == 3) { UbicacionPicking ubicacion1 = ubicaciones[0]; UbicacionPicking ubicacion2 = ubicaciones[1]; UbicacionPicking ubicacion3 = ubicaciones[2]; Assert.AreEqual(5, ubicacion1.CantidadNueva); Assert.AreEqual(4, ubicacion2.CantidadNueva); Assert.AreEqual(8, ubicacion3.CantidadNueva); Assert.IsTrue(ubicacion1.Id != 0 || ubicacion1.CopiaId != 0); Assert.IsTrue(ubicacion2.Id != 0 || ubicacion2.CopiaId != 0); Assert.IsTrue(ubicacion3.Id != 0 || ubicacion3.CopiaId != 0); } }
public void GestorUbicaciones_Ejecutar_siLaUbicacionEstaDescuadradaDebeDarError() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 15, TipoLinea = Constantes.TiposLineaVenta.PRODUCTO, Producto = "A", Cantidad = 7, BaseImponible = 100, CantidadReservada = 7, FechaEntrega = new DateTime() }; // Hay reservadas más cantidad de las que tenemos en ubicaciones UbicacionPicking ubicacion = new UbicacionPicking { Id = 5, Producto = "A", Cantidad = 6, CantidadNueva = 6, Estado = 0, EstadoNuevo = 0 }; List<UbicacionPicking> ubicaciones = new List<UbicacionPicking>(); ubicaciones.Add(ubicacion); GestorUbicaciones gestor = new GestorUbicaciones(linea, ubicaciones); gestor.Ejecutar(); }
public void GestorUbicaciones_Ejecutar_siLaCantidadEsDistintaCreaUnaNuevaUbicacion() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, TipoLinea = Constantes.TiposLineaVenta.PRODUCTO, Producto = "A", Cantidad = 7, BaseImponible = 100, CantidadReservada = 7, FechaEntrega = new DateTime() }; UbicacionPicking ubicacion = new UbicacionPicking { Id = 1, Producto = "A", Cantidad = 10, CantidadNueva = 10, Estado = 0, EstadoNuevo = 0 }; List<UbicacionPicking> ubicaciones = new List<UbicacionPicking>(); ubicaciones.Add(ubicacion); GestorUbicaciones gestor = new GestorUbicaciones(linea, ubicaciones); gestor.Ejecutar(); UbicacionPicking ubicacionNueva = ubicaciones.FindLast(u => u.Id == 0); Assert.AreEqual(1, ubicacionNueva.CopiaId); Assert.AreEqual(3, ubicacionNueva.Cantidad); Assert.AreEqual(3, ubicacionNueva.CantidadNueva); Assert.AreEqual(0, ubicacionNueva.Estado); Assert.AreEqual(0, ubicacionNueva.EstadoNuevo); Assert.AreEqual(0, ubicacionNueva.LineaPedidoVentaId); }