buscarPorId($id); if (!$oficio) { http_response_code(404); redirect(APP_URL . '/views/oficios/lista.php?error='.urlencode('Oficio no encontrado.')); } // Marcar notificación si viene de ella if (isset($_GET['notif'])) { $db = getDB(); $db->prepare("UPDATE notificaciones SET leida=1,leida_at=NOW() WHERE id=? AND usuario_id=?") ->execute([(int)$_GET['notif'], $_SESSION['usuario_id']]); } $historial = $model->historial($id); $comentarios = $model->comentarios($id, !AuthController::esAdmin()); $etiquetas = $model->etiquetasDeOficio($id); $adjuntos = getDB()->prepare("SELECT * FROM documentos_adjuntos WHERE oficio_id=? ORDER BY created_at DESC"); $adjuntos->execute([$id]); $adjuntos = $adjuntos->fetchAll(); $usuarios = (new UsuarioModel())->usuariosParaSelector(); $esAdmin = AuthController::esAdmin(); $userId = $_SESSION['usuario_id']; // Calcular semáforo $semaforo = $oficio['semaforo'] ?? 'vigente'; $semaforoColors = ['vigente'=>'success','proximo'=>'warning','vencido'=>'danger','completado'=>'info']; $semaColor = $semaforoColors[$semaforo] ?? 'secondary'; $pageTitle = 'Oficio: '.$oficio['numero_oficio']; $activeNav = $oficio['tipo'] === 'recibido' ? 'entrada' : 'salida'; include __DIR__ . '/../../views/layout/header.php'; include __DIR__ . '/../../views/layout/sidebar.php'; include __DIR__ . '/../../views/layout/topbar.php'; ?>
Datos del Oficio
TIPO
Recibido' : ' Enviado' ?>
PRIORIDAD
ESTADO
RESPONSABLE
FECHA RECEPCIÓN
FECHA VENCIMIENTO
REMITENTE
DESTINATARIO
ASUNTO
DESCRIPCIÓN
ETIQUETAS
Documentos Adjuntos ()
'fa-file-pdf','doc'=>'fa-file-word','docx'=>'fa-file-word','xls'=>'fa-file-excel','xlsx'=>'fa-file-excel','jpg'=>'fa-file-image','jpeg'=>'fa-file-image','png'=>'fa-file-image']; $iconColor = ['pdf'=>'#ef4444','doc'=>'#3b82f6','docx'=>'#3b82f6','xls'=>'#10b981','xlsx'=>'#10b981','jpg'=>'#f59e0b','jpeg'=>'#f59e0b','png'=>'#f59e0b']; ?>
KB
Sin comentarios aún
strtoupper($p[0]), array_slice(explode(' ', $c['autor_nombre']), 0, 2))); ?>
· Privado

Sin historial registrado.

·