public void GestorImportesMinimos_LosProductosSobrePedidoLleganAlImporteMinimo_siEsDeTiendaOnlineMiraOtroImporteMinimo() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, Producto = "A", Cantidad = 7, BaseImponible = GestorImportesMinimos.IMPORTE_MINIMO_TIENDA_ONLINE + 1, CantidadReservada = 7, FechaEntrega = new DateTime(), EsSobrePedido = true }; PedidoPicking pedido = new PedidoPicking { Id = 1, ServirJunto = false, EsTiendaOnline = true, EsNotaEntrega = false, ImporteOriginalNoSobrePedido = GestorImportesMinimos.IMPORTE_MINIMO_TIENDA_ONLINE + 1, ImporteOriginalSobrePedido = 0, Lineas = new List<LineaPedidoPicking>() }; pedido.Lineas.Add(linea); GestorImportesMinimos gestor = new GestorImportesMinimos(pedido); Assert.IsTrue(gestor.LosProductosSobrePedidoLleganAlImporteMinimo()); }
private LineaPedidoPicking pasarAPendiente(LineaPedidoPicking linea) { PedidosVentaController pedidosCtrl = new PedidosVentaController(); // Lo suyo sería dejar pendiente la línea actual para que mantuviese la antigüedad, // pero no se puede, porque necesitamos el Nº Orden para ponerlo en Ubicaciones luego, // por lo que nos vemos obligados a dejar pendiente la línea nueva y decidir la // antigüedad por fecha de modificación en lugar de por Nº Orden // (también hay que cambiarlo en la reposición). LinPedidoVta lineaActual = db.LinPedidoVtas.SingleOrDefault(l => l.Nº_Orden == linea.Id); if (lineaActual.Cantidad != linea.Cantidad - linea.CantidadReservada) { LinPedidoVta lineaNueva; lineaActual.Estado = Constantes.EstadosLineaVenta.PENDIENTE; lineaNueva = pedidosCtrl.dividirLinea(db, lineaActual, (short)(linea.CantidadReservada)); lineaActual.Estado = Constantes.EstadosLineaVenta.EN_CURSO; if (lineaNueva != null) { return new LineaPedidoPicking { Id = 0, // no importa que no tenga Nº Orden porque es la que se queda pendiente Cantidad = (short)lineaNueva.Cantidad, CantidadReservada = 0, BaseImponible = lineaNueva.Base_Imponible, TipoLinea = (byte)lineaNueva.TipoLinea, Producto = lineaNueva.Producto, FechaEntrega = lineaNueva.Fecha_Entrega }; } } return null; }
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 GestorReservasStock_BorrarLineasEntregaFutura_despuesDeEjecutarloLasLineasFuturasNoEstan() { LineaPedidoPicking lineaParaEntregaInmediata = new LineaPedidoPicking { Id = 2, Producto = "A", Cantidad = 16, BaseImponible = 100, CantidadReservada = 0, FechaEntrega = new DateTime() }; LineaPedidoPicking lineaParaEntregaFutura = new LineaPedidoPicking { Id = 1, Producto = "A", Cantidad = 7, BaseImponible = 100, CantidadReservada = 0, FechaEntrega = new DateTime().AddDays(7) }; PedidoPicking pedido = new PedidoPicking { Id = 1, ServirJunto = false, EsTiendaOnline = false, EsNotaEntrega = false, Lineas = new List<LineaPedidoPicking>() }; pedido.Lineas.Add(lineaParaEntregaInmediata); PedidoPicking pedido2 = new PedidoPicking { Id = 2, ServirJunto = false, EsTiendaOnline = false, EsNotaEntrega = false, Lineas = new List<LineaPedidoPicking>() }; pedido2.Lineas.Add(lineaParaEntregaFutura); // Esto lo rellenaría en ejecución el servicio RellenadorPickingService List<PedidoPicking> candidatos = new List<PedidoPicking>(); candidatos.Add(pedido); candidatos.Add(pedido2); GestorReservasStock.BorrarLineasEntregaFutura(candidatos, new DateTime().AddDays(1)); Assert.AreEqual(1, pedido.Lineas.Count); Assert.AreEqual(0, pedido2.Lineas.Count); }
public void GestorReservasStock_Reservar_siEsCuentaContableLaAsignaEntera() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, TipoLinea = Constantes.TiposLineaVenta.CUENTA_CONTABLE, Producto = "624HOLA", Cantidad = 6, BaseImponible = 100, CantidadReservada = 0, FechaEntrega = new DateTime() }; PedidoPicking pedido = new PedidoPicking { Id = 1, ServirJunto = false, EsTiendaOnline = false, EsNotaEntrega = false, Lineas = new List<LineaPedidoPicking>() }; pedido.Lineas.Add(linea); // Esto lo rellenaría en ejecución el servicio RellenadorPickingService List<PedidoPicking> candidatos = new List<PedidoPicking>(); candidatos.Add(pedido); // Esto lo rellenaría en ejecución el servicio RellenadorStocksService StockProducto stock = new StockProducto { Producto = "A", StockDisponible = 1 }; List<StockProducto> stocks = new List<StockProducto>(); stocks.Add(stock); List<LineaPedidoPicking> lineas = candidatos.Where(c => !c.EsNotaEntrega).SelectMany(l => l.Lineas).OrderBy(l => l.Id).ToList(); GestorReservasStock.Reservar(stocks, candidatos, lineas); Assert.AreEqual(6, linea.CantidadReservada); }
public void PedidoPicking_hayQueSumarPortes_siNoHayStockDeNadaNoHayQueSumarPortes() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, Producto = "A", Cantidad = 6, CantidadReservada = 0, BaseImponible = 0 }; PedidoPicking pedido = new PedidoPicking { Id = 1, ServirJunto = false, ImporteOriginalNoSobrePedido = GestorImportesMinimos.IMPORTE_SIN_PORTES + 1, Lineas = new List<LineaPedidoPicking>() }; pedido.Lineas.Add(linea); Assert.IsFalse(pedido.hayQueSumarPortes()); }
public void PedidoPicking_hayQueSumarPortes_siHayProductosQueNoSonSobrePedidoYElOriginalLlegabaAlMinimoNoSeSumanPortes() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, Producto = "A", Cantidad = 6, CantidadReservada = 6, EsSobrePedido = false }; PedidoPicking pedido = new PedidoPicking { Id = 1, ServirJunto = false, ImporteOriginalNoSobrePedido = GestorImportesMinimos.IMPORTE_MINIMO + 1, Lineas = new List<LineaPedidoPicking>() }; pedido.Lineas.Add(linea); Assert.IsFalse(pedido.hayQueSumarPortes()); }
public void GestorStocks_HayDeTodo_siTieneDosProductosYUnoNoTieneStockDevuelveFalse() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, TipoLinea = Constantes.TiposLineaVenta.PRODUCTO, Producto = "A", Cantidad = 7, BaseImponible = 100, CantidadReservada = 7, FechaEntrega = new DateTime() }; PedidoPicking pedido = new PedidoPicking { Id = 1, ServirJunto = false, EsTiendaOnline = false, EsNotaEntrega = false, Lineas = new List<LineaPedidoPicking>() }; pedido.Lineas.Add(linea); LineaPedidoPicking linea2 = new LineaPedidoPicking { Id = 1, TipoLinea = Constantes.TiposLineaVenta.PRODUCTO, Producto = "B", Cantidad = 7, BaseImponible = 100, CantidadReservada = 6, FechaEntrega = new DateTime() }; pedido.Lineas.Add(linea2); GestorStocks gestor = new GestorStocks(pedido); Assert.IsFalse(gestor.HayStockDeTodo()); }
public void GestorStocks_HayDeTodo_siSoloTieneUnProductoYTieneStockDevuelveTrue() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, Producto = "A", Cantidad = 7, BaseImponible = 100, CantidadReservada = 7, FechaEntrega = new DateTime() }; PedidoPicking pedido = new PedidoPicking { Id = 1, ServirJunto = false, EsTiendaOnline = false, EsNotaEntrega = false, Lineas = new List<LineaPedidoPicking>() }; pedido.Lineas.Add(linea); GestorStocks gestor = new GestorStocks(pedido); Assert.IsTrue(gestor.HayStockDeTodo()); }
public void GestorImportesMinimos_LosProductosSobrePedidoLleganAlImporteMinimo_siHayLineasSobrePedidoQueSuperanElMinimoDevuelveTrue() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, Producto = "A", Cantidad = 7, BaseImponible = 2500, CantidadReservada = 7, FechaEntrega = new DateTime(), EsSobrePedido = true }; PedidoPicking pedido = new PedidoPicking { Id = 1, ServirJunto = false, EsTiendaOnline = false, EsNotaEntrega = false, Lineas = new List<LineaPedidoPicking>() }; pedido.Lineas.Add(linea); GestorImportesMinimos gestor = new GestorImportesMinimos(pedido); Assert.IsTrue(gestor.LosProductosSobrePedidoLleganAlImporteMinimo()); }
public void PedidoPicking_saleEnPicking_siNoHayDeTodoYEsServirJuntoNoSale() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, TipoLinea = Constantes.TiposLineaVenta.PRODUCTO, Producto = "A", Cantidad = 6, CantidadReservada = 5 }; PedidoPicking pedido = new PedidoPicking { Id = 1, ServirJunto = true, Lineas = new List<LineaPedidoPicking>() }; pedido.Lineas.Add(linea); Assert.IsFalse(pedido.saleEnPicking()); }
public void PedidoPicking_hayQueSumarPortes_siYaTienePortesNoHayQueSumarlosDeNuevo() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, TipoLinea = Constantes.TiposLineaVenta.CUENTA_CONTABLE, Producto = "62400003", Cantidad = 6, CantidadReservada = 0, BaseImponible = GestorImportesMinimos.IMPORTE_MINIMO - 1, EsSobrePedido = true }; PedidoPicking pedido = new PedidoPicking { Id = 1, ServirJunto = false, ImporteOriginalNoSobrePedido = GestorImportesMinimos.IMPORTE_MINIMO - 1, Lineas = new List<LineaPedidoPicking>() }; pedido.Lineas.Add(linea); Assert.IsFalse(pedido.hayQueSumarPortes()); }
public void PedidoPicking_hayQueSumarPortes_siTodosLosProductosSonSobrePedidoYNoLleganAlImporteMinimoPeroElOriginalSiLlegabaAlImporteExentoDePortesNoSeSumanPortes() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, Producto = "A", TipoLinea = Constantes.TiposLineaVenta.PRODUCTO, Cantidad = 6, CantidadReservada = 6, BaseImponible = GestorImportesMinimos.IMPORTE_MINIMO - 1, EsSobrePedido = true }; PedidoPicking pedido = new PedidoPicking { Id = 1, ServirJunto = false, ImporteOriginalNoSobrePedido = GestorImportesMinimos.IMPORTE_SIN_PORTES + 1, Lineas = new List<LineaPedidoPicking>() }; pedido.Lineas.Add(linea); Assert.IsTrue(pedido.hayQueSumarPortes()); }
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 GestorReservasStock_Reservar_siHayUnPedidoQueEsNotaEntregaNoReservaNada() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, TipoLinea = Constantes.TiposLineaVenta.PRODUCTO, Producto = "A", Cantidad = 16, BaseImponible = 100, CantidadReservada = 0, FechaEntrega = new DateTime() }; LineaPedidoPicking linea2 = new LineaPedidoPicking { Id = 2, TipoLinea = Constantes.TiposLineaVenta.PRODUCTO, Producto = "A", Cantidad = 7, BaseImponible = 100, CantidadReservada = 0, FechaEntrega = new DateTime() }; PedidoPicking pedido = new PedidoPicking { Id = 1, ServirJunto = false, EsTiendaOnline = false, EsNotaEntrega = true, Lineas = new List<LineaPedidoPicking>() }; pedido.Lineas.Add(linea); PedidoPicking pedido2 = new PedidoPicking { Id = 2, ServirJunto = false, EsTiendaOnline = false, EsNotaEntrega = false, Lineas = new List<LineaPedidoPicking>() }; pedido2.Lineas.Add(linea2); // Esto lo rellenaría en ejecución el servicio RellenadorPickingService List<PedidoPicking> candidatos = new List<PedidoPicking>(); candidatos.Add(pedido); candidatos.Add(pedido2); // Esto lo rellenaría en ejecución el servicio RellenadorStocksService StockProducto stock = new StockProducto { Producto = "A", StockDisponible = 20 }; List<StockProducto> stocks = new List<StockProducto>(); stocks.Add(stock); List<LineaPedidoPicking> lineas = candidatos.Where(c => !c.EsNotaEntrega).SelectMany(l => l.Lineas).OrderBy(l => l.Id).ToList(); GestorReservasStock.Reservar(stocks, candidatos, lineas); Assert.AreEqual(0, linea.CantidadReservada); Assert.AreEqual(7, linea2.CantidadReservada); }
public GestorUbicaciones(LineaPedidoPicking linea, List<UbicacionPicking> ubicaciones) { this.linea = linea; this.ubicaciones = ubicaciones; }
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 PedidoPicking_hayQueSumarPortes_siTodosLosProductosSonSobrePedidoYLleganAlImporteMinimoNoSeSumanPortes() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, Producto = "A", Cantidad = 6, CantidadReservada = 6, BaseImponible = GestorImportesMinimos.IMPORTE_MINIMO + 1, EsSobrePedido = true }; PedidoPicking pedido = new PedidoPicking { Id = 1, ServirJunto = false, Lineas = new List<LineaPedidoPicking>() }; pedido.Lineas.Add(linea); Assert.IsFalse(pedido.hayQueSumarPortes()); }
public void GestorStock_HayDeTodo_siHayUnaLineaDeCuentaContableTieneQuePonerQueTieneStock() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, TipoLinea = Constantes.TiposLineaVenta.CUENTA_CONTABLE, Producto = "A", Cantidad = 7, BaseImponible = 100, CantidadReservada = 0, FechaEntrega = new DateTime() }; PedidoPicking pedido = new PedidoPicking { Id = 1, ServirJunto = false, EsTiendaOnline = false, EsNotaEntrega = false, Lineas = new List<LineaPedidoPicking>() }; pedido.Lineas.Add(linea); GestorStocks gestor = new GestorStocks(pedido); Assert.IsTrue(gestor.HayStockDeTodo()); }
public void GestorStocks_TodoLoQueTieneStockEsSobrePedido_siHayUnProductoQueNoEsSobrePedidoConStockDevuelveFalse() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 1, Producto = "A", Cantidad = 7, BaseImponible = 100, CantidadReservada = 7, FechaEntrega = new DateTime(), EsSobrePedido = false }; PedidoPicking pedido = new PedidoPicking { Id = 1, ServirJunto = false, EsTiendaOnline = false, EsNotaEntrega = false, Lineas = new List<LineaPedidoPicking>() }; pedido.Lineas.Add(linea); GestorStocks gestor = new GestorStocks(pedido); Assert.IsFalse(gestor.TodoLoQueTieneStockEsSobrePedido()); }
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); }
public void GestorUbicaciones_Ejecutar_siLaLineaEsUnaCuentaContableNoHayQueInsertarNuevaUbicacion() { LineaPedidoPicking linea = new LineaPedidoPicking { Id = 15, TipoLinea = Constantes.TiposLineaVenta.CUENTA_CONTABLE, Producto = "62400003", Cantidad = 1, BaseImponible = 6, CantidadReservada = 1, FechaEntrega = new DateTime() }; List<UbicacionPicking> ubicaciones = new List<UbicacionPicking>(); GestorUbicaciones gestor = new GestorUbicaciones(linea, ubicaciones); gestor.Ejecutar(); UbicacionPicking ubicacionNueva = ubicaciones.FindLast(u => u.Id == 0); Assert.IsNull(ubicacionNueva); }