Panel de
Funcionario
Hola, {{ $user->nombre }} {{ $user->apellido }}
{{ $esAsesorExterno
? 'Gestiona reuniones y tareas asignadas de forma rápida.'
: 'Gestiona reuniones, contactos y tareas internas de forma rápida.' }}
@if($funcionario?->rol)
{{ $funcionario->rol->label() }}
@endif
@php
$cards = [
[
'section' => 'Base',
'title' => 'Unidades de atención',
'desc' => $esAsesorExterno
? 'Accede a las unidades vinculadas a tus acciones activas.'
: 'Accede al listado completo de unidades registradas.',
'icon' => 'bi-buildings',
'tone' => ['tone_class' => 'tone-blue'],
'actions' => $esAsesorExterno
? [
['label' => 'Ver unidades', 'url' => route('unidades-atencion.index'), 'solid' => true],
]
: [
['label' => 'Ver unidades', 'url' => route('unidades-atencion.index'), 'solid' => true],
['label' => 'Crear', 'url' => route('registro.contacto.iniciar'), 'solid' => false],
],
],
];
if (!$esAsesorExterno) {
$cards[] = [
'section' => 'Seguimiento',
'title' => 'Evaluaciones',
'desc' => 'Revisa evaluaciones y preguntas clave.',
'icon' => 'bi-bar-chart',
'tone' => ['tone_class' => 'tone-contact-rose'],
'actions' => [
['label' => 'Evaluaciones', 'url' => route('funcionario.evaluaciones.index'), 'solid' => true],
['label' => 'Resultados', 'url' => route('funcionario.resultados.index'), 'solid' => false],
],
];
}
$cards[] = $esAsesorExterno
? [
'section' => 'Seguimiento',
'title' => 'Acciones',
'desc' => 'Revisa las acciones donde sos responsable.',
'icon' => 'bi-list-check',
'tone' => ['tone_class' => 'tone-contact-peach'],
'actions' => [
['label' => 'Ver acciones', 'url' => route('acciones.index'), 'solid' => true],
],
]
: [
'section' => 'Seguimiento',
'title' => 'Planes de acción',
'desc' => 'Gestiona planes, acciones y responsables asignados.',
'icon' => 'bi-list-check',
'tone' => ['tone_class' => 'tone-contact-peach'],
'actions' => [
['label' => 'Planes', 'url' => route('planes.index'), 'solid' => true],
['label' => 'Acciones', 'url' => route('acciones.index'), 'solid' => false],
],
];
$cards[] = [
'section' => 'Agenda',
'title' => 'Reuniones',
'desc' => 'Coordina reuniones y asigna responsables.',
'icon' => 'bi-clipboard2-check',
'tone' => ['tone_class' => 'tone-contact-coral'],
'actions' => [
['label' => 'Ver reuniones', 'url' => route('reuniones.index'), 'solid' => true],
['label' => 'Crear', 'url' => route('reuniones.create'), 'solid' => false],
],
];
if (!$esAsesorExterno) {
$cards[] = [
'section' => 'Gestión',
'title' => 'Postulaciones',
'desc' => 'Administra y revisa postulaciones a programas.',
'icon' => 'bi-file-earmark-text',
'tone' => ['tone_class' => 'tone-contact-teal'],
'actions' => [
['label' => 'Ver postulaciones', 'url' => route('postulaciones.index'), 'solid' => true],
['label' => 'Administrar', 'url' => route('programas.index'), 'solid' => false],
],
];
$cards[] = [
'section' => 'Catálogo',
'title' => 'Programas',
'desc' => 'Gestiona los programas disponibles y su información.',
'icon' => 'bi-journal-text',
'tone' => ['tone_class' => 'tone-contact-sky'],
'actions' => [
['label' => 'Ver programas', 'url' => route('programas.index'), 'solid' => true],
['label' => 'Crear', 'url' => route('programas.create'), 'solid' => false],
],
];
$cards[] = [
'section' => 'Gestión',
'title' => 'Contactos',
'desc' => 'Administra los contactos y sus datos clave.',
'icon' => 'bi-people',
'tone' => ['tone_class' => 'tone-contact-indigo'],
'actions' => [
['label' => 'Ver contactos', 'url' => route('contactos.index'), 'solid' => true],
],
];
}
if ($funcionario?->rol === FuncionarioRolEnum::ADMIN) {
$cards[] = [
'section' => 'Administración',
'title' => 'Funcionarios',
'desc' => 'Administra funcionarios, roles y estados de acceso.',
'icon' => 'bi-gear',
'tone' => ['tone_class' => 'tone-slate-dark'],
'actions' => [
['label' => 'Ver funcionarios', 'url' => route('funcionarios.index'), 'solid' => true],
['label' => 'Crear', 'url' => route('funcionarios.create'), 'solid' => false],
],
];
}
@endphp
@foreach($cards as $card)
@php
$tone = $card['tone'];
$toneClass = $tone['tone_class'] ?? 'tone-blue';
@endphp
{{ $card['section'] }}
{{ $card['title'] }}
{{ $card['desc'] }}
@endforeach
Próximas acciones
Mostramos pendientes y en proceso que vencen en los próximos {{ $margenDiasAccionesProximas }} días; si no hay, verás las más próximas.
Reuniones asignadas
@if(Route::has('reuniones.index'))
(VER TODAS)
@endif
{{ $totalReuniones }} próximas
@if($totalReuniones > $reuniones->count())
• mostrando {{ $reuniones->count() }}
@endif
@if($reuniones->isEmpty())
No tienes reuniones próximas asignadas.
@else
@foreach($reuniones as $reunion)
@php
$contacto = $reunion->contacto;
$fechaReunion = \Carbon\Carbon::parse($reunion->fecha_reunion);
$horaInicio = \Carbon\Carbon::parse($reunion->hora_inicio);
$fechaFormato = $fechaReunion->format('d/m');
$horaFormato = $horaInicio->format('H:i');
$estadoClass = match($reunion->estado) {
'Agendada' => 'bg-info-subtle text-info-emphasis',
'Reprogramada' => 'bg-warning-subtle text-warning-emphasis',
default => 'bg-light text-dark border'
};
@endphp
@if(Route::has('reuniones.show'))
@endif
{{ $contacto->user->nombre }} {{ $contacto->user->apellido }}
{{ $reunion->estado }}
{{ $fechaFormato }} • {{ $horaFormato }}
{{ $reunion->tipo_reunion }}
•
{{ $reunion->modalidad }}
@endforeach
@endif
Tareas
@if(Route::has('acciones.index'))
(ACCIONES)
@else
(ACCIONES)
@endif
{{ $totalAcciones }} por vencer
@if($totalAcciones > $acciones->count())
• mostrando {{ $acciones->count() }}
@endif
@if($acciones->isEmpty())
No tienes acciones por vencer próximamente asignadas.
@else
@foreach($acciones as $accion)
@php
$plan = $accion->planes->first();
$unidad = $plan?->unidadAtencion;
$fecha = $accion->fecha_vencimiento?->format('d/m');
$estadoLabel = $accion->estado->label() ?? ucfirst($accion->estado);
$estadoClass = 'bg-light text-dark border';
@endphp
@if(Route::has('acciones.show'))
@endif
{{ $accion->detalle_accion }}
{{ $estadoLabel }}
@if($fecha)
{{ $fecha }}
@endif
@if($plan)
{{ $plan->titulo }}
@endif
@if($unidad)
{{ $unidad->nombre_comercial }}
@endif
@endforeach
@endif