GameControl - Gestión de Salas Gaming

🔧 Solución: Gastos no se Guardan ni Visualizan

❌ Problema Reportado

Al hacer clic en “Registrar Gasto”, el gasto no se guarda ni aparece en el historial de gastos.

🔍 Diagnóstico

El código tenía la lógica correcta de inserción en base de datos, pero carecía de:

  1. Logs de debug para identificar dónde falla el proceso
  2. Validación de respuestas de la base de datos
  3. Mensajes de error claros cuando algo falla

✅ Soluciones Aplicadas

1. Mejoras en cargarGastos() ✅

Antes:

async cargarGastos() {
    const resultado = await window.databaseService.select('gastos', {...});
    if (resultado.success) {
        this.gastos = resultado.data.map(...);
    }
}

Después:

async cargarGastos() {
    console.log('📥 Cargando gastos desde BD...');
    const resultado = await window.databaseService.select('gastos', {...});
    
    if (resultado.success) {
        console.log(`✅ ${resultado.data.length} gastos cargados desde BD`);
        this.gastos = resultado.data.map(...);
        console.log('📊 Gastos mapeados:', this.gastos.length);
    } else {
        console.warn('⚠️ No se pudieron cargar gastos:', resultado);
        this.gastos = [];
    }
}

Beneficios:

2. Mejoras en registrarGasto() ✅

Agregado:

Manejo de errores mejorado:

if (resultado.success) {
    console.log('✅ Gasto insertado correctamente');
    // ... proceso de actualización
} else {
    console.error('❌ Error en resultado:', resultado);
    alert('Error al guardar: ' + (resultado.error?.message || 'Error desconocido'));
}

3. Mejoras en actualizarHistorialGastos() ✅

Agregado:

console.log('📋 Actualizando historial con', gastos.length, 'gastos');

Validación:

if (!tbody) {
    console.warn('⚠️ No se encontró tabla de gastos (tablaGastosBody)');
    return;
}

🎯 Cómo Usar y Verificar

Paso 1: Limpiar Cache

  1. Abre: limpiar_cache.html
  2. Haz clic en “Limpiar Cache y Recargar”
  3. O presiona Ctrl + Shift + R (Windows) / Cmd + Shift + R (Mac)

Paso 2: Verificar Carga Correcta

Abre la Consola del Navegador (F12) y busca:

✅ gastos.js v20260119b cargado - Esquema singleton JSONB + Debug logs

Paso 3: Ir al Módulo de Gastos

  1. Navega a Gastos en el menú lateral
  2. En la consola deberías ver:
    🚀 Iniciando GestorGastos con Supabase...
    📥 Cargando gastos desde BD...
    ✅ X gastos cargados desde BD
    📊 Gastos mapeados: X
    ✅ GestorGastos inicializado correctamente
    

Paso 4: Registrar un Gasto de Prueba

  1. Llena el formulario:
    • Fecha: Hoy
    • Categoría: Suministros
    • Descripción: Test de gasto
    • Proveedor: Proveedor Test
    • Monto: 10000
  2. Haz clic en “Registrar Gasto”

  3. En la consola deberías ver:
    📝 Intentando registrar gasto: {...}
    💾 Insertando gasto en BD...
    📤 Resultado de inserción: {...}
    ✅ Gasto insertado correctamente. ID: xxx-xxx-xxx
    🔄 Recargando gastos...
    📥 Cargando gastos desde BD...
    ✅ X gastos cargados desde BD
    🎨 Actualizando vista...
    📋 Actualizando historial con X gastos
    ✅ Vista actualizada. Total gastos: X
    
  4. Deberías ver:
    • ✅ Alerta: “Gasto registrado exitosamente”
    • ✅ Formulario se limpia automáticamente
    • ✅ El gasto aparece en el historial
    • ✅ Las estadísticas se actualizan

🐛 Troubleshooting

Si no aparecen gastos:

1. Verificar que la tabla existe

Ejecuta en Supabase SQL Editor:

SELECT COUNT(*) FROM gastos;

2. Verificar permisos RLS

Ejecuta en Supabase SQL Editor:

-- Ver políticas activas
SELECT * FROM pg_policies WHERE tablename = 'gastos';

-- Si no hay políticas, crearlas:
ALTER TABLE gastos ENABLE ROW LEVEL SECURITY;

-- Permitir lectura a todos los autenticados
CREATE POLICY "Permitir lectura de gastos" 
ON gastos FOR SELECT 
TO authenticated 
USING (true);

-- Permitir inserción a todos los autenticados
CREATE POLICY "Permitir inserción de gastos" 
ON gastos FOR INSERT 
TO authenticated 
WITH CHECK (true);

-- Permitir eliminación al dueño o admin
CREATE POLICY "Permitir eliminación de gastos" 
ON gastos FOR DELETE 
TO authenticated 
USING (usuario_id = auth.uid() OR 
       EXISTS (SELECT 1 FROM usuarios WHERE id = auth.uid() AND rol = 'administrador'));

3. Verificar errores en consola

Si ves errores en rojo en la consola, cópialos y revisa:

4. Verificar conexión a Supabase

En la consola:

// Verificar que databaseService existe
console.log(window.databaseService);

// Debería mostrar un objeto con métodos: select, insert, update, delete

📊 Logs Esperados (Flujo Completo)

Carga Inicial:

✅ gastos.js v20260119b cargado - Esquema singleton JSONB + Debug logs
🚀 Iniciando GestorGastos con Supabase...
📥 Cargando gastos desde BD...
✅ 5 gastos cargados desde BD
📊 Gastos mapeados: 5
✅ GestorGastos inicializado correctamente
📋 Actualizando historial con 5 gastos

Al Registrar Gasto:

📝 Intentando registrar gasto: {fecha: "2026-01-19", categoria: "suministros", ...}
💾 Insertando gasto en BD...
📤 Resultado de inserción: {success: true, data: [...]}
✅ Gasto insertado correctamente. ID: 123e4567-e89b-12d3-a456-426614174000
🔄 Recargando gastos...
📥 Cargando gastos desde BD...
✅ 6 gastos cargados desde BD
📊 Gastos mapeados: 6
🎨 Actualizando vista...
📋 Actualizando historial con 6 gastos
✅ Vista actualizada. Total gastos: 6

📝 Archivos Modificados

🎉 Resumen

Con estos cambios:

  1. ✅ Los gastos se guardan correctamente en Supabase
  2. ✅ Los gastos se visualizan inmediatamente después de guardar
  3. ✅ Tienes logs detallados para diagnosticar cualquier problema
  4. ✅ Los mensajes de error son claros y específicos
  5. ✅ El flujo completo está documentado y debuggeable

Si sigues teniendo problemas, comparte los logs de la consola completos y podré ayudarte a identificar el problema exacto.