Cuando se registraba una venta con pago parcial (por ejemplo: $5,000 en efectivo + $3,000 en transferencia):
[PAGO_PARCIAL] efectivo:5000 transferencia:3000metodo_pago solo se guardaba UN método (transferencia si había transferencia, sino efectivo)Se agregaron columnas a las tablas ventas y sesiones:
monto_efectivo - Monto pagado en efectivomonto_transferencia - Monto pagado por transferenciamonto_tarjeta - Monto pagado con tarjetamonto_digital - Monto pagado por QR/digitalArchivo: /sql/agregar_pagos_divididos.sql
[PAGO_PARCIAL] en notasmetodo_pago = 'parcial' como nuevo valor válidovista_ventas para incluir los nuevos camposArchivo modificado: /js/salas.js
guardarVentaContableDesdeSesion()[PAGO_PARCIAL] en las notas// Extraer montos de pago parcial si aplica
if (metodoPago === 'parcial' && sesion.notas) {
const match = sesion.notas.match(/\[PAGO_PARCIAL\]([^\n]+)/);
if (match) {
// Parsear efectivo:5000 transferencia:3000
montoEfectivo = ...
montoTransferencia = ...
}
}
procesarFinalizacion()metodo_pago = 'parcial' cuando se usa pago divididoArchivo modificado: /js/ventas.js
obtenerNombreMetodoPago()Ahora acepta el objeto sesión completo y construye el texto dinámicamente:
// Antes:
'Transferencia'
// Ahora para pagos parciales:
'Parcial (Ef: $5,000 + Trans: $3,000)'
Archivo modificado: /css/styles.css
Agregado estilo para el nuevo badge de pago parcial:
.metodo-parcial {
background: rgba(255, 193, 7, 0.1);
color: #ffc107;
border-color: rgba(255, 193, 7, 0.3);
}
Con soporte para modo oscuro incluido.
-- En Supabase SQL Editor, ejecutar:
/sql/agregar_pagos_divididos.sql
Esto:
Los archivos ya fueron modificados:
/js/salas.js - Guardado de pagos parciales/js/ventas.js - Visualización de pagos parciales/css/styles.css - Estilos para el badgeParcial (Ef: $5,000 + Trans: $3,000)SELECT
cliente,
metodo_pago,
monto_efectivo,
monto_transferencia,
total
FROM ventas
WHERE metodo_pago = 'parcial'
ORDER BY fecha_cierre DESC
LIMIT 5;
Ahora puedes calcular correctamente cuánto se recaudó en cada método:
-- Total por método de pago (considerando pagos parciales)
SELECT
SUM(COALESCE(monto_efectivo, CASE WHEN metodo_pago = 'efectivo' THEN total ELSE 0 END)) as total_efectivo,
SUM(COALESCE(monto_transferencia, CASE WHEN metodo_pago = 'transferencia' THEN total ELSE 0 END)) as total_transferencia,
SUM(COALESCE(monto_tarjeta, CASE WHEN metodo_pago = 'tarjeta' THEN total ELSE 0 END)) as total_tarjeta,
SUM(COALESCE(monto_digital, CASE WHEN metodo_pago = 'digital' THEN total ELSE 0 END)) as total_digital
FROM ventas
WHERE fecha_cierre >= CURRENT_DATE
AND estado = 'cerrada';
SELECT
cliente,
fecha_cierre,
monto_efectivo,
monto_transferencia,
total,
metodo_pago_detalle
FROM vista_ventas
WHERE metodo_pago = 'parcial'
ORDER BY fecha_cierre DESC;
El script SQL incluye migración automática para datos existentes:
-- Busca ventas con [PAGO_PARCIAL] en notas
-- Extrae: efectivo:5000 transferencia:3000
-- Actualiza: metodo_pago='parcial', monto_efectivo=5000, monto_transferencia=3000
Si hay ventas antiguas con pagos parciales, se migrarán automáticamente al ejecutar el script.
Cliente: Juan Pérez
Total: $8,000
Método: transferencia
Notas: [PAGO_PARCIAL] efectivo:5000 transferencia:3000
Problema: Los reportes mostraban $8,000 en transferencia (incorrecto)
Cliente: Juan Pérez
Total: $8,000
Método: parcial
monto_efectivo: $5,000
monto_transferencia: $3,000
Resultado: Los reportes muestran correctamente:
/js/salas.js actualizadoSELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'ventas'
AND column_name LIKE 'monto_%';