@extends('layouts.app-layout') @section('title', 'Panel de Contacto - ' . config('app.name')) @section('content') @php $user = auth()->user(); $acciones = $acciones ?? collect(); $totalAcciones = $totalAcciones ?? $acciones->count(); $margenDiasAccionesProximas = $margenDiasAccionesProximas ?? 7; $limiteAccionesDashboard = $limiteAccionesDashboard ?? 4; $usandoFallbackAccionesProximas = $usandoFallbackAccionesProximas ?? false; $unidadesIdsContacto = $unidadesIdsContacto ?? collect(); $reuniones = $reuniones ?? collect(); $totalReuniones = $totalReuniones ?? $reuniones->count(); $limiteReunionesDashboard = $limiteReunionesDashboard ?? 4; $cards = [ [ 'section' => 'Base', 'title' => 'Unidades de atención', 'desc' => 'Revisa tus unidades asociadas y su información principal.', 'icon' => 'bi-buildings', 'tone' => 'tone-blue', 'actions' => [ ['label' => 'Ver unidades', 'url' => route('unidades-atencion.index'), 'solid' => true], ], ], [ 'section' => 'Seguimiento', 'title' => 'Evaluaciones', 'desc' => 'Completa evaluaciones y consulta tus resultados.', 'icon' => 'bi-bar-chart-line', 'tone' => 'tone-contact-rose', 'actions' => [ ['label' => 'Responder', 'url' => route('contacto.respuestas.create'), 'solid' => true], ['label' => 'Resultados', 'url' => route('contacto.respuestas.mis-resultados'), 'solid' => false], ], ], [ 'section' => 'Seguimiento', 'title' => 'Planes de acción', 'desc' => 'Accede al resumen de tareas y compromisos próximos.', 'icon' => 'bi-list-check', 'tone' => 'tone-contact-peach', 'actions' => [ ['label' => 'Planes', 'url' => route('planes.index'), 'solid' => true], ['label' => 'Acciones', 'url' => route('acciones.index'), 'solid' => false], ], ], [ 'section' => 'Agenda', 'title' => 'Reuniones', 'desc' => 'Consulta tus reuniones agendadas y su estado.', 'icon' => 'bi-calendar-event', 'tone' => 'tone-contact-coral', 'actions' => [ ['label' => 'Ver reuniones', 'url' => route('reuniones.index'), 'solid' => true], ], ], [ 'section' => 'Gestión', 'title' => 'Postulaciones', 'desc' => 'Haz seguimiento del estado de tus postulaciones enviadas.', 'icon' => 'bi-file-earmark-text', 'tone' => 'tone-contact-teal', 'actions' => [ ['label' => 'Ver postulaciones', 'url' => route('postulaciones.mias'), 'solid' => true], ['label' => 'Nueva postulación', 'url' => route('programas.index'), 'solid' => false], ], ], [ 'section' => 'Catálogo', 'title' => 'Programas', 'desc' => 'Explora programas disponibles para nuevas postulaciones.', 'icon' => 'bi-journal-text', 'tone' => 'tone-contact-sky', 'actions' => [ ['label' => 'Ver programas', 'url' => route('programas.index'), 'solid' => true], ], ], ]; @endphp @if(session('error'))
{{ session('error') }}
@endif

Panel de Contacto

Hola, {{ $user->nombre }} {{ $user->apellido }}

Accede rápido a tus atajos y al seguimiento de tus próximas tareas.

@foreach($cards as $card)

{{ $card['section'] }}

{{ $card['title'] }}

{{ $card['desc'] }}

@foreach($card['actions'] as $action) @if($action['solid']) {{ $action['label'] }} @else {{ $action['label'] }} @endif @endforeach
@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 @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 agendadas.
@else
@foreach($reuniones as $reunion) @php $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' }; $funcionariosNombres = $reunion->funcionarios->map(fn($f) => $f->user->nombre . ' ' . $f->user->apellido)->join(', '); @endphp
@if(Route::has('reuniones.show')) @endif
{{ $reunion->tipo_reunion }} {{ $reunion->estado }} {{ $fechaFormato }} • {{ $horaFormato }}
@if($funcionariosNombres) {{ $funcionariosNombres }} @endif @if($reunion->modalidad)
{{ $reunion->modalidad }} @endif
@endforeach
@endif

Tareas (ACCIONES)

{{ $totalAcciones }} por vencer @if($totalAcciones > $acciones->count()) • mostrando {{ $acciones->count() }} @endif

@if($acciones->isEmpty())
No tienes acciones por vencer próximamente.
@else
@foreach($acciones as $accion) @php $plan = $accion->planes->first(fn ($item) => $unidadesIdsContacto->contains($item->unidad_atencion_id)) ?? $accion->planes->first(); $unidad = $plan?->unidadAtencion; $fecha = $accion->fecha_vencimiento?->format('d/m'); $estadoLabel = $accion->estado->label() ?? ucfirst($accion->estado); @endphp
{{ $accion->detalle_accion }} {{ $estadoLabel }} @if($fecha) {{ $fecha }} @endif
@if($plan) {{ $plan->titulo }} @endif @if($unidad)
{{ $unidad->nombre_comercial }} @endif
@endforeach
@endif
@endsection