Cliente-side: el calendario hace fetch a /escrituras/api.php?action=list y /tramites/api.php?action=list y agrega los eventos en memoria. Sin backend nuevo (cero costo de mantenimiento, datos siempre frescos). Eventos generados automáticamente: * Escrituras → fecha_solicitud * Trámites adm/corp/mig/lit → fecha_solicitud * Trámites mig → fecha_vencimiento (resaltado como deadline) * Trámites lit → fecha_termino (resaltado como deadline) Vistas: Año (12 mini-meses con dots por evento + marca roja para vencimientos), Mes (grid con chips ≤3 por día), Semana (7 columnas), Día (lista de cards). Hoy resaltado en todas. Resaltado de vencimientos: * Vencido (días<0, status abierto) → rojo + animación flash * ≤7d → naranja * >7d → color por fuente Funcionalidad adicional: * Strip "Próximos vencimientos" con los 8 deadlines más urgentes * KPIs: total · ≤7d · ≤30d · vencidos abiertos * Filtros por fuente (chips) + búsqueda por texto * Atajos: ←/→ mueve período, T hoy, Y/M/W/D cambia vista, Esc cierra * Auto-refresh cada 60s en segundo plano (pausa si la modal está abierta) * Misma barra superior estandarizada que Escrituras y Trámites Popup ViewOnly al hacer click en un evento muestra ficha completa con todos los campos relevantes según fuente y dept. Dos botones: "Regresar al calendario" cierra · "Editar evento" navega a /escrituras/?edit=ID o /tramites/?edit=CODIGO. Deep-link: escrituras.html y tramites.html detectan ?edit=X al cargar y auto-abren la modal de edición sobre esa fila. URL se limpia con history.replaceState para que un refresh no re-abra la modal. Apps.php: card placeholder "Agenda" reemplazada por "Calendario" live.
9 lines
244 B
PHP
9 lines
244 B
PHP
<?php
|
|
declare(strict_types=1);
|
|
require_once __DIR__ . '/../../src/Auth.php';
|
|
Auth::requireAuth();
|
|
|
|
header('Content-Type: text/html; charset=utf-8');
|
|
header('X-Content-Type-Options: nosniff');
|
|
readfile(__DIR__ . '/../../views/calendario.html');
|