File "diagnostico.php"

Full Path: C:/wamp64/www/Asistencia_Capacitacion/diagnostico.php
File size: 6.78 KB
MIME-type: text/x-php
Charset: utf-8

<?php
// File: diagnostico.php (colocar en la raíz del proyecto)
// Este archivo es TEMPORAL para diagnosticar el problema

session_start();
require_once 'Modelos/Database.php';
require_once 'Modelos/MenuModel.php';

echo "<h1>Diagnóstico del Sistema de Asistencias</h1>";
echo "<style>
    body { font-family: Arial; padding: 20px; background: #f5f5f5; }
    h2 { color: #ff8c00; border-bottom: 2px solid #ff8c00; padding-bottom: 5px; }
    pre { background: white; padding: 15px; border-radius: 5px; overflow-x: auto; }
    .success { color: green; font-weight: bold; }
    .error { color: red; font-weight: bold; }
    table { width: 100%; border-collapse: collapse; background: white; margin: 10px 0; }
    th, td { padding: 10px; border: 1px solid #ddd; text-align: left; }
    th { background: #ff8c00; color: white; }
</style>";

try {
    $db = Database::getInstance()->getConnection();
    echo "<p class='success'>✓ Conexión a base de datos exitosa</p>";
    
    // 1. Verificar total de registros
    echo "<h2>1. Total de registros en la tabla 'asistencia'</h2>";
    $stmt = $db->query("SELECT COUNT(*) as total FROM asistencia");
    $total = $stmt->fetch(PDO::FETCH_ASSOC);
    echo "<p>Total de registros: <strong>" . $total['total'] . "</strong></p>";
    
    // 2. Verificar estructura de la tabla
    echo "<h2>2. Estructura de la tabla 'asistencia'</h2>";
    $stmt = $db->query("DESCRIBE asistencia");
    $estructura = $stmt->fetchAll(PDO::FETCH_ASSOC);
    echo "<table>";
    echo "<tr><th>Campo</th><th>Tipo</th><th>Nulo</th><th>Clave</th><th>Default</th></tr>";
    foreach ($estructura as $col) {
        echo "<tr>";
        echo "<td>" . $col['Field'] . "</td>";
        echo "<td>" . $col['Type'] . "</td>";
        echo "<td>" . $col['Null'] . "</td>";
        echo "<td>" . $col['Key'] . "</td>";
        echo "<td>" . ($col['Default'] ?? 'NULL') . "</td>";
        echo "</tr>";
    }
    echo "</table>";
    
    // 3. Verificar fechas disponibles
    echo "<h2>3. Fechas disponibles en la tabla</h2>";
    $stmt = $db->query("
        SELECT DATE(fecha) as fecha, COUNT(*) as registros
        FROM asistencia 
        WHERE fecha IS NOT NULL AND fecha != '0000-00-00'
        GROUP BY DATE(fecha)
        ORDER BY fecha DESC
        LIMIT 10
    ");
    $fechas = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    if (empty($fechas)) {
        echo "<p class='error'>⚠ No se encontraron fechas válidas</p>";
    } else {
        echo "<table>";
        echo "<tr><th>Fecha</th><th>Registros</th></tr>";
        foreach ($fechas as $f) {
            echo "<tr><td>" . $f['fecha'] . "</td><td>" . $f['registros'] . "</td></tr>";
        }
        echo "</table>";
    }
    
    // 4. Verificar registros de HOY
    echo "<h2>4. Registros de HOY (" . date('Y-m-d') . ")</h2>";
    $stmt = $db->prepare("
        SELECT COUNT(*) as total,
               SUM(CASE WHEN hora IS NOT NULL AND hora != '' THEN 1 ELSE 0 END) as con_hora,
               SUM(CASE WHEN horaSalida IS NOT NULL AND horaSalida != '' THEN 1 ELSE 0 END) as con_salida
        FROM asistencia 
        WHERE DATE(fecha) = CURDATE()
    ");
    $stmt->execute();
    $hoy = $stmt->fetch(PDO::FETCH_ASSOC);
    echo "<ul>";
    echo "<li>Total registros hoy: <strong>" . ($hoy['total'] ?? 0) . "</strong></li>";
    echo "<li>Con hora de entrada: <strong>" . ($hoy['con_hora'] ?? 0) . "</strong></li>";
    echo "<li>Con hora de salida: <strong>" . ($hoy['con_salida'] ?? 0) . "</strong></li>";
    echo "</ul>";
    
    // 5. Muestra de datos recientes
    echo "<h2>5. Últimos 5 registros en la tabla</h2>";
    $stmt = $db->query("SELECT * FROM asistencia ORDER BY fecha DESC, hora DESC LIMIT 5");
    $muestra = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    if (empty($muestra)) {
        echo "<p class='error'>⚠ No hay registros en la tabla</p>";
    } else {
        echo "<table>";
        echo "<tr><th>ID</th><th>Nombre</th><th>Fecha</th><th>Hora</th><th>Hora Salida</th><th>Capacitación</th></tr>";
        foreach ($muestra as $reg) {
            echo "<tr>";
            echo "<td>" . ($reg['id'] ?? 'N/A') . "</td>";
            echo "<td>" . ($reg['nombre'] ?? 'N/A') . "</td>";
            echo "<td>" . ($reg['fecha'] ?? 'N/A') . "</td>";
            echo "<td>" . ($reg['hora'] ?? 'N/A') . "</td>";
            echo "<td>" . ($reg['horaSalida'] ?? 'N/A') . "</td>";
            echo "<td>" . ($reg['capacitacion'] ?? 'N/A') . "</td>";
            echo "</tr>";
        }
        echo "</table>";
    }
    
    // 6. Probar el MenuModel
    echo "<h2>6. Prueba del MenuModel</h2>";
    $menuModel = new MenuModel();
    
    // Obtener la fecha más reciente con datos
    $stmt = $db->query("SELECT DATE(fecha) as fecha FROM asistencia WHERE fecha IS NOT NULL ORDER BY fecha DESC LIMIT 1");
    $fechaReciente = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($fechaReciente) {
        $fechaPrueba = $fechaReciente['fecha'];
        echo "<p>Probando con la fecha más reciente: <strong>" . $fechaPrueba . "</strong></p>";
        
        $datos = $menuModel->getDashboardData($fechaPrueba);
        
        echo "<pre>";
        print_r($datos);
        echo "</pre>";
    } else {
        echo "<p class='error'>⚠ No se encontró ninguna fecha para probar</p>";
    }
    
    // 7. Verificar tipos de datos en fecha y hora
    echo "<h2>7. Análisis de tipos de datos</h2>";
    $stmt = $db->query("
        SELECT 
            fecha, 
            hora, 
            horaSalida,
            TYPEOF(fecha) as tipo_fecha,
            TYPEOF(hora) as tipo_hora
        FROM asistencia 
        WHERE fecha IS NOT NULL 
        LIMIT 3
    ");
    
    echo "<p>Nota: MySQL/MariaDB no tiene TYPEOF, pero vamos a ver los valores:</p>";
    $stmt = $db->query("SELECT fecha, hora, horaSalida FROM asistencia WHERE fecha IS NOT NULL LIMIT 3");
    $tipos = $stmt->fetchAll(PDO::FETCH_ASSOC);
    echo "<table>";
    echo "<tr><th>Fecha (valor)</th><th>Hora (valor)</th><th>Hora Salida (valor)</th></tr>";
    foreach ($tipos as $t) {
        echo "<tr>";
        echo "<td>" . var_export($t['fecha'], true) . "</td>";
        echo "<td>" . var_export($t['hora'], true) . "</td>";
        echo "<td>" . var_export($t['horaSalida'], true) . "</td>";
        echo "</tr>";
    }
    echo "</table>";
    
} catch (Exception $e) {
    echo "<p class='error'>✗ Error: " . $e->getMessage() . "</p>";
    echo "<pre>" . $e->getTraceAsString() . "</pre>";
}

echo "<hr>";
echo "<p><strong>Instrucciones:</strong></p>";
echo "<ol>";
echo "<li>Revisa los resultados de arriba</li>";
echo "<li>Verifica que la columna 'fecha' tenga datos válidos</li>";
echo "<li>Verifica que la columna 'hora' tenga datos</li>";
echo "<li>Copia toda esta información y compártela si sigues teniendo problemas</li>";
echo "<li><strong>IMPORTANTE:</strong> Elimina este archivo después de diagnosticar por seguridad</li>";
echo "</ol>";
?>