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);
        }
Exemplo n.º 3
0
        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);
        }