Skip to content

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

  1. Cabecera (Sale): Cliente, Moneda, Depósito de origen, Estado del Workflow.
  2. Í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:

  1. 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`).
  2. 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.
  3. 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.