Se ha conectado el sistema de búsqueda de clientes en el modal de iniciar sesión con la página de Clientes (CRM), permitiendo tracking completo de sesiones por cliente.
sql/agregar_cliente_id_sesiones.sql
cliente_id BIGINT a tabla sesionesclientessql/actualizar_trigger_stats_cliente.sql
cliente_id primerocliente (nombre) si no hay IDArchivo: src/components/salas/ModalSesion.jsx
Nuevas funcionalidades:
cliente_id al iniciar sesiónEstados agregados:
const [clientes, setClientes] = useState([]);
const [busquedaCliente, setBusquedaCliente] = useState('');
const [mostrarDropdown, setMostrarDropdown] = useState(false);
const [clienteSeleccionado, setClienteSeleccionado] = useState(null);
Funciones clave:
cargarClientes() - Obtiene todos los clientes de la BDclientesFiltrados - Filtra por nombre/teléfono/whatsappseleccionarCliente() - Autocompleta al seleccionarhandleBusquedaChange() - Maneja búsqueda en tiempo realArchivo: src/hooks/useSalas.js
Cambio en abrirSesion:
async ({ salaId, estacion, cliente, cliente_id, modo, tiempo, tarifa, notas }) => {
const payload = {
// ... campos existentes
cliente: cliente || 'Cliente',
};
// Agregar cliente_id si está disponible
if (cliente_id) {
payload.cliente_id = cliente_id;
}
await db.insert('sesiones', payload);
}
Abrir: ejecutar_agregar_cliente_id.html
O ejecutar manualmente en Supabase SQL Editor:
-- Contenido de sql/agregar_cliente_id_sesiones.sql
Abrir: ejecutar_actualizar_trigger_stats.html
O ejecutar manualmente:
-- Contenido de sql/actualizar_trigger_stats_cliente.sql
-- Verificar que se agregó la columna
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'sesiones' AND column_name = 'cliente_id';
-- Verificar que existe el trigger
SELECT trigger_name, event_manipulation, event_object_table
FROM information_schema.triggers
WHERE trigger_name = 'trigger_actualizar_stats_cliente';
Input: "Juan" o "3001234567"
clientes.filter(c =>
c.nombre.includes('juan') ||
c.telefono.includes('3001234567')
)
setClienteSeleccionado(cliente);
setCliente(cliente.nombre);
await abrirSesion({
// ... otros campos
cliente: "Juan Pérez",
cliente_id: "12345" // ← Ahora se guarda el ID
});
UPDATE clientes SET
total_sesiones = total_sesiones + 1,
total_horas_jugadas = total_horas_jugadas + X,
total_gastado = total_gastado + Y
WHERE id = cliente_id;
El sistema mantiene compatibilidad con sesiones antiguas:
cliente_id: Usa el ID para stats precisascliente_id: Usa el campo cliente (nombre) como fallbackcliente se mantiene: Para sesiones walk-in o clientes no registradosLas siguientes métricas se actualizan automáticamente:
| Métrica | Actualización |
|---|---|
total_sesiones |
+1 por sesión finalizada |
total_horas_jugadas |
Suma horas de cada sesión |
total_gastado |
Suma total_general de sesión |
puntos_acumulados |
1 punto por cada $1000 gastados |
ultima_visita |
Fecha de finalización de sesión |
Solución: Ejecutar sql/agregar_cliente_id_sesiones.sql primero
Solución:
cargarClientes() se ejecuta al montarSolución:
sql/actualizar_trigger_stats_cliente.sqlestado = 'finalizada'Solución:
telefono y whatsappCREATE INDEX idx_sesiones_cliente_id ON sesiones(cliente_id);
CREATE INDEX idx_clientes_nombre ON clientes(nombre);
CREATE INDEX idx_clientes_telefono ON clientes(telefono);
Si encuentras algún problema: