@extends('layouts.app-layout')
@php
use App\Enums\AccionEstadoEnum;
$puedeGestionarAcciones = $puedeGestionarAcciones ?? (bool) auth()->user()?->funcionario;
$volverUrl =
$volverUrl ??
(auth()->user()?->funcionario ? route('funcionario.dashboard') : route('contacto.dashboard'));
$estadoActual = $estado ?? null;
$planSeleccionado = $planId ?? null;
$soloMiasValor = $soloMias ? 1 : null;
$filtroEliminadas = $puedeGestionarAcciones && $estadoActual === 'eliminado';
$colorBordeCards = match ($estadoActual) {
AccionEstadoEnum::PENDIENTE->value => '#ffc107',
AccionEstadoEnum::EN_PROCESO->value => '#0d6efd',
AccionEstadoEnum::FINALIZADA->value => '#198754',
'eliminado' => '#dc3545',
default => '#ff7a1a',
};
$colorTextoMostrando = match ($estadoActual) {
AccionEstadoEnum::PENDIENTE->value => 'var(--bs-warning-text-emphasis)',
default => $colorBordeCards,
};
$colorFondoCards = match ($estadoActual) {
AccionEstadoEnum::PENDIENTE->value => 'rgba(255,193,7,.06)',
AccionEstadoEnum::EN_PROCESO->value => 'rgba(13,110,253,.06)',
AccionEstadoEnum::FINALIZADA->value => 'rgba(25,135,84,.06)',
'eliminado' => 'rgba(220,53,69,.06)',
default => '#ffffff',
};
$colorSombraCards = match ($estadoActual) {
AccionEstadoEnum::PENDIENTE->value => 'rgba(255,255,255,.82)',
AccionEstadoEnum::EN_PROCESO->value => 'rgba(255,255,255,.82)',
AccionEstadoEnum::FINALIZADA->value => 'rgba(255,255,255,.82)',
'eliminado' => 'rgba(255,255,255,.82)',
default => 'rgba(255,255,255,.72)',
};
$filtroActivoMensaje = null;
if ($soloMias) {
$filtroActivoMensaje = match ($estadoActual) {
AccionEstadoEnum::PENDIENTE->value => 'Solo tus acciones pendientes asignadas',
AccionEstadoEnum::EN_PROCESO->value => 'Solo tus acciones en proceso asignadas',
AccionEstadoEnum::FINALIZADA->value => 'Solo tus acciones finalizadas asignadas',
'eliminado' => 'Solo tus acciones eliminadas asignadas',
default => 'Solo tus acciones asignadas',
};
}
@endphp
@section('title', 'Acciones - ' . config('app.name'))
@section('navbar_suffix', 'Acciones')
@section('content')
Panel de acciones
Acciones
@if ($puedeGestionarAcciones)
@endif
@if ($puedeFiltrarSoloMias ?? false)
@endif
@if (session('success'))
@endif
@if ($puedeGestionarAcciones)
@endif
@if (($puedeFiltrarSoloMias ?? false) && $soloMias && $filtroActivoMensaje)
Mostrando: {{ $filtroActivoMensaje }}
@endif
@forelse($acciones as $accion)
@php
$accionEliminada = method_exists($accion, 'trashed') && $accion->trashed();
$estadoAccion = $accionEliminada
? 'eliminado'
: ($accion->estado instanceof AccionEstadoEnum ? $accion->estado->value : (string) $accion->estado);
$accionVencida = $accion->fecha_vencimiento && $accion->fecha_vencimiento->lt(now()->startOfDay());
$colorBordeAccion = !$estadoActual ? '#ff7a1a' : match ($estadoAccion) {
AccionEstadoEnum::PENDIENTE->value => '#ffc107',
AccionEstadoEnum::EN_PROCESO->value => '#0d6efd',
AccionEstadoEnum::FINALIZADA->value => '#198754',
'eliminado' => '#dc3545',
default => $colorBordeCards,
};
$colorBordeContenedor = !$estadoActual ? 'rgba(255,122,26,.35)' : match ($estadoAccion) {
AccionEstadoEnum::PENDIENTE->value => 'rgba(255,193,7,.38)',
AccionEstadoEnum::EN_PROCESO->value => 'rgba(13,110,253,.35)',
AccionEstadoEnum::FINALIZADA->value => 'rgba(25,135,84,.35)',
'eliminado' => 'rgba(220,53,69,.35)',
default => 'rgba(255,122,26,.35)',
};
$estiloCardAccion = "border:0;border-left:4px solid {$colorBordeAccion};";
if ($estadoActual) {
$estiloCardAccion .=
"background-color:{$colorFondoCards};box-shadow:0 .35rem 1rem {$colorSombraCards},0 .18rem .5rem rgba(15,23,42,.05)!important;";
}
$planesTexto = $accion->planes->pluck('titulo')->join(' ');
$unidadesTexto = $accion->planes
->pluck('unidadAtencion.nombre_comercial')
->filter()
->unique()
->join(' ');
$responsablesTexto = $accion->responsables
->map(fn($r) => trim(($r->user->nombre ?? '') . ' ' . ($r->user->apellido ?? '')))
->join(' ');
$busquedaRow = mb_strtolower(
trim(
($accion->detalle_accion ?? '') .
' ' .
($accion->descripcion ?? '') .
' ' .
$planesTexto .
' ' .
$unidadesTexto .
' ' .
$responsablesTexto,
),
);
@endphp
{{ \Illuminate\Support\Str::limit($accion->detalle_accion, 120) }}
@if($accion->es_reunion)
Reunión
@endif
@if ($accionEliminada && !$filtroEliminadas)
Eliminada
@endif
@if ($accion->fecha_vencimiento)
Vencimiento:
{{ \Illuminate\Support\Carbon::parse($accion->fecha_vencimiento)->format('d/m/Y') }}
@endif
@if ($accion->descripcion)
{{ \Illuminate\Support\Str::limit($accion->descripcion, 220) }}
@endif
@if ($accionEliminada)
Eliminada: {{ $accion->deleted_at?->format('d/m/Y') }}
@endif
@php
$titulosPlanes = $accion->planes
->pluck('titulo')
->filter()
->unique()
->join(', ');
$nombresUnidades = $accion->planes
->pluck('unidadAtencion.nombre_comercial')
->filter()
->unique()
->join(', ');
@endphp
{{ \Illuminate\Support\Str::limit($titulosPlanes !== '' ? $titulosPlanes : 'Sin plan', 140) }}
{{ \Illuminate\Support\Str::limit($nombresUnidades !== '' ? $nombresUnidades : 'Sin unidad', 140) }}
@php
$nombresResponsables = $accion->responsables
->map(
fn($responsable) => trim(
($responsable->user->nombre ?? '') .
' ' .
($responsable->user->apellido ?? ''),
),
)
->filter()
->unique()
->join(', ');
@endphp
Responsables:
{{ \Illuminate\Support\Str::limit($nombresResponsables !== '' ? $nombresResponsables : 'Sin responsables', 180) }}
@if ($puedeGestionarAcciones)
@if ($accionEliminada)
@else
@endif
@else
@if (!$accionEliminada && $accionVencida)
Vencida
@endif
@endif
@if($puedeGestionarAcciones && !$accionEliminada)
@endif
@empty
{{ $filtroEliminadas ? 'No hay acciones eliminadas.' : 'No hay acciones registradas.' }}
@endforelse
@if ($acciones instanceof \Illuminate\Pagination\LengthAwarePaginator && $acciones->hasPages())
Mostrando {{ $acciones->firstItem() }}–{{ $acciones->lastItem() }} de {{ $acciones->total() }}
resultados
{{ $acciones->withQueryString()->links('pagination::simple-bootstrap-5') }}
@endif
@endsection
@push('scripts')
@endpush