193 lines
8.2 KiB
PHP
193 lines
8.2 KiB
PHP
<?php
|
|
$pageTitle = 'Dashboard';
|
|
require_once __DIR__ . '/../includes/db.php';
|
|
require_once __DIR__ . '/includes/admin-header.php';
|
|
|
|
$db = getDB();
|
|
|
|
// Stats
|
|
$solicitudesNuevas = $db->query("SELECT COUNT(*) FROM solicitudes WHERE estado='nueva'")->fetchColumn();
|
|
$tramitesEnProceso = $db->query("SELECT COUNT(*) FROM tramites WHERE estado='en_proceso'")->fetchColumn();
|
|
$tramitesCompletados = $db->query("SELECT COUNT(*) FROM tramites WHERE estado='completado'")->fetchColumn();
|
|
$totalClientes = $db->query("SELECT COUNT(*) FROM clientes")->fetchColumn();
|
|
|
|
// Latest requests
|
|
$ultimasSolicitudes = $db->query("SELECT * FROM solicitudes WHERE estado='nueva' ORDER BY created_at DESC LIMIT 5")->fetchAll();
|
|
|
|
// Upcoming reminders
|
|
$recordatorios = $db->query("SELECT r.*, c.nombre as cliente_nombre FROM recordatorios r LEFT JOIN clientes c ON r.cliente_id = c.id WHERE r.completado=0 AND r.fecha <= DATE_ADD(CURDATE(), INTERVAL 7 DAY) ORDER BY r.fecha ASC LIMIT 5")->fetchAll();
|
|
|
|
// Recent processes
|
|
$tramitesRecientes = $db->query("SELECT t.*, c.nombre as cliente_nombre FROM tramites t JOIN clientes c ON t.cliente_id = c.id ORDER BY t.updated_at DESC LIMIT 5")->fetchAll();
|
|
|
|
$tipoLabels = [
|
|
'visa' => 'Visa',
|
|
'sentri' => 'Sentri/Global',
|
|
'pasaporte' => 'Pasaporte',
|
|
'adelanto_cita' => 'Adelanto Cita',
|
|
'doble_nacionalidad' => 'Doble Nacionalidad',
|
|
];
|
|
|
|
$estadoLabels = [
|
|
'nuevo' => 'Nuevo',
|
|
'en_proceso' => 'En Proceso',
|
|
'en_revision' => 'En Revisión',
|
|
'completado' => 'Completado',
|
|
'cancelado' => 'Cancelado',
|
|
];
|
|
?>
|
|
|
|
<div class="admin-content__header">
|
|
<h1><i class="fas fa-tachometer-alt"></i> Dashboard</h1>
|
|
<p>Bienvenido, <?= htmlspecialchars($_SESSION['username'] ?? 'Admin') ?></p>
|
|
</div>
|
|
|
|
<!-- Stats Cards -->
|
|
<div class="stats-grid">
|
|
<div class="stat-card">
|
|
<div class="stat-card__icon stat-card__icon--primary">
|
|
<i class="fas fa-inbox"></i>
|
|
</div>
|
|
<div class="stat-card__info">
|
|
<span class="stat-card__number"><?= $solicitudesNuevas ?></span>
|
|
<span class="stat-card__label">Solicitudes Nuevas</span>
|
|
</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="stat-card__icon stat-card__icon--warning">
|
|
<i class="fas fa-spinner"></i>
|
|
</div>
|
|
<div class="stat-card__info">
|
|
<span class="stat-card__number"><?= $tramitesEnProceso ?></span>
|
|
<span class="stat-card__label">Trámites en Proceso</span>
|
|
</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="stat-card__icon stat-card__icon--success">
|
|
<i class="fas fa-check-circle"></i>
|
|
</div>
|
|
<div class="stat-card__info">
|
|
<span class="stat-card__number"><?= $tramitesCompletados ?></span>
|
|
<span class="stat-card__label">Completados</span>
|
|
</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="stat-card__icon stat-card__icon--info">
|
|
<i class="fas fa-users"></i>
|
|
</div>
|
|
<div class="stat-card__info">
|
|
<span class="stat-card__number"><?= $totalClientes ?></span>
|
|
<span class="stat-card__label">Total Clientes</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Recent Activity Grid -->
|
|
<div class="dashboard-grid">
|
|
<!-- Latest Requests -->
|
|
<div class="card">
|
|
<div class="card__header">
|
|
<h2><i class="fas fa-inbox"></i> Solicitudes Recientes</h2>
|
|
<a href="solicitudes.php" class="btn btn--sm btn--outline">Ver todas</a>
|
|
</div>
|
|
<div class="card__body">
|
|
<?php if (empty($ultimasSolicitudes)): ?>
|
|
<p class="text-muted text-center">No hay solicitudes nuevas</p>
|
|
<?php else: ?>
|
|
<div class="table-responsive">
|
|
<table class="admin-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Nombre</th>
|
|
<th>Servicio</th>
|
|
<th>Fecha</th>
|
|
<th>Acción</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($ultimasSolicitudes as $sol): ?>
|
|
<tr>
|
|
<td><?= htmlspecialchars($sol['nombre']) ?></td>
|
|
<td><?= htmlspecialchars($tipoLabels[$sol['servicio']] ?? $sol['servicio']) ?></td>
|
|
<td><?= date('d/m/Y', strtotime($sol['created_at'])) ?></td>
|
|
<td><a href="solicitud-detalle.php?id=<?= $sol['id'] ?>" class="btn btn--sm btn--primary">Ver</a></td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Upcoming Reminders -->
|
|
<div class="card">
|
|
<div class="card__header">
|
|
<h2><i class="fas fa-bell"></i> Recordatorios Próximos</h2>
|
|
<a href="recordatorios.php" class="btn btn--sm btn--outline">Ver todos</a>
|
|
</div>
|
|
<div class="card__body">
|
|
<?php if (empty($recordatorios)): ?>
|
|
<p class="text-muted text-center">No hay recordatorios pendientes</p>
|
|
<?php else: ?>
|
|
<ul class="reminder-list">
|
|
<?php foreach ($recordatorios as $rec): ?>
|
|
<li class="reminder-item <?= strtotime($rec['fecha']) < strtotime('today') ? 'reminder-item--overdue' : (date('Y-m-d') === $rec['fecha'] ? 'reminder-item--today' : '') ?>">
|
|
<div class="reminder-item__date">
|
|
<span class="reminder-item__day"><?= date('d', strtotime($rec['fecha'])) ?></span>
|
|
<span class="reminder-item__month"><?= date('M', strtotime($rec['fecha'])) ?></span>
|
|
</div>
|
|
<div class="reminder-item__info">
|
|
<strong><?= htmlspecialchars($rec['titulo']) ?></strong>
|
|
<?php if ($rec['cliente_nombre']): ?>
|
|
<small><?= htmlspecialchars($rec['cliente_nombre']) ?></small>
|
|
<?php endif; ?>
|
|
</div>
|
|
</li>
|
|
<?php endforeach; ?>
|
|
</ul>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Recent Processes -->
|
|
<div class="card" style="margin-top: 1.5rem;">
|
|
<div class="card__header">
|
|
<h2><i class="fas fa-file-alt"></i> Trámites Recientes</h2>
|
|
<a href="tramites.php" class="btn btn--sm btn--outline">Ver todos</a>
|
|
</div>
|
|
<div class="card__body">
|
|
<?php if (empty($tramitesRecientes)): ?>
|
|
<p class="text-muted text-center">No hay trámites registrados</p>
|
|
<?php else: ?>
|
|
<div class="table-responsive">
|
|
<table class="admin-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Cliente</th>
|
|
<th>Tipo</th>
|
|
<th>Estado</th>
|
|
<th>Fecha Solicitud</th>
|
|
<th>Acción</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($tramitesRecientes as $tr): ?>
|
|
<tr>
|
|
<td><?= htmlspecialchars($tr['cliente_nombre']) ?></td>
|
|
<td><?= htmlspecialchars($tipoLabels[$tr['tipo']] ?? $tr['tipo']) ?></td>
|
|
<td><span class="badge badge--<?= $tr['estado'] ?>"><?= htmlspecialchars($estadoLabels[$tr['estado']] ?? $tr['estado']) ?></span></td>
|
|
<td><?= $tr['fecha_solicitud'] ? date('d/m/Y', strtotime($tr['fecha_solicitud'])) : 'N/A' ?></td>
|
|
<td><a href="tramite-detalle.php?id=<?= $tr['id'] ?>" class="btn btn--sm btn--primary">Ver</a></td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
|
|
<?php require_once __DIR__ . '/includes/admin-footer.php'; ?>
|