Package com.deusto.coffeestack.service
Class VentaServiceImpl
java.lang.Object
com.deusto.coffeestack.service.VentaServiceImpl
- All Implemented Interfaces:
VentaService
Implementación del servicio de ventas.
Lógica de descuento de inventario:
- Para cada línea de venta se obtiene la receta del item.
- Por cada ingrediente se calcula la cantidad total necesaria (cantidadUnidades × cantidad_receta).
- Los lotes del insumo se consumen en orden FIFO (más próximo
a vencer primero). Si el stock total es insuficiente se lanza
IllegalStateExceptiony la transacción se revierte. - Por cada lote afectado se genera un
MovimientoInventariode tipoTipoMovimiento.VENTA. - Se persiste la
Ventacon susVentaLinea.
-
Constructor Summary
ConstructorsConstructorDescriptionVentaServiceImpl(VentaRepository ventaRepository, VentaLineaRepository ventaLineaRepository, ItemRepository itemRepository, RecetaItemRepository recetaItemRepository, LoteRepository loteRepository, MovimientoInventarioRepository movimientoRepository) -
Method Summary
Modifier and TypeMethodDescriptionDevuelve todas las ventas, de más reciente a más antigua.Genera un reporte agregado de ventas por día y producto.obtenerVenta(Long id) Devuelve el detalle de una venta por su id.registrarVenta(VentaRequest request, String usuarioLogin) Registra una nueva venta descontando el inventario de cada insumo implicado mediante la receta de cada producto, en orden FIFO de lotes.
-
Constructor Details
-
VentaServiceImpl
public VentaServiceImpl(VentaRepository ventaRepository, VentaLineaRepository ventaLineaRepository, ItemRepository itemRepository, RecetaItemRepository recetaItemRepository, LoteRepository loteRepository, MovimientoInventarioRepository movimientoRepository)
-
-
Method Details
-
registrarVenta
Description copied from interface:VentaServiceRegistra una nueva venta descontando el inventario de cada insumo implicado mediante la receta de cada producto, en orden FIFO de lotes.- Specified by:
registrarVentain interfaceVentaService- Parameters:
request- datos de la venta (lista de líneas con item + unidades)usuarioLogin- login del empleado autenticado- Returns:
- la venta registrada con sus líneas de detalle
-
listarVentas
Description copied from interface:VentaServiceDevuelve todas las ventas, de más reciente a más antigua.- Specified by:
listarVentasin interfaceVentaService
-
obtenerVenta
Description copied from interface:VentaServiceDevuelve el detalle de una venta por su id.- Specified by:
obtenerVentain interfaceVentaService
-
obtenerReporteVentas
Description copied from interface:VentaServiceGenera un reporte agregado de ventas por día y producto.- Specified by:
obtenerReporteVentasin interfaceVentaService
-