Gestión de Ventas
El módulo de ventas permite gestionar todo el ciclo de vida comercial, desde el presupuesto hasta la facturación y entrega.
Estructura de una Venta
- Cabecera (Sale): Cliente, Moneda, Depósito de origen, Estado del Workflow.
- Ítems (SaleItem): Productos vendidos.
- Cálculo de Impuestos: Automático según la categoría del producto y condición fiscal del cliente.
- Snapshot: Se guardan precios y nombres históricos (si el producto cambia después, la venta histórica no se altera).
Características Avanzadas
Trazabilidad de Lotes
Al confirmar una venta, el sistema asigna automáticamente lotes específicos (`SaleItemLot`) según la estrategia de salida (FIFO/FEFO). Esto permite saber, ante un reclamo, exactamente qué partida recibió el cliente.
Ventas Multimoneda
- El sistema registra la venta en la moneda original (USD, EUR, etc.).
- Guarda el tipo de cambio al momento de la operación.
- Permite facturar en moneda local convirtiendo los montos automáticamente.
Integración con Workflows
Las ventas no tienen estados "fijos" (como "Pendiente" o "Pagado" hardcodeados), sino que siguen el Workflow configurado para la organización. Esto permite que cada empresa defina su proceso de aprobación.
Concurrencia y Bloqueos
El sistema maneja situaciones donde múltiples vendedores intentan vender el mismo stock simultáneamente:
- Bloqueo de Base de Datos: Al iniciar una venta, el sistema aplica un bloqueo ("Lock") a nivel de fila en la base de datos (`select_for_update`).
- Cola de Espera: Si el Vendedor A está procesando el stock, el Vendedor B quedará en espera (el navegador "cargando") hasta que la transacción de A termine.
- Resultado:
- Si A se lleva todo el stock, cuando le toque a B, el sistema verá 0 stock disponible.
- La venta de B pasará automáticamente a Back Order (o fallará si no está habilitado), garantizando la integridad de los datos. Nunca se venderá el mismo producto dos veces.