@forelse($tab['items'] as $appointment)
@php
$profile = $appointment->professional?->professionalProfile;
$startsAt = $appointment->starts_at;
$month = $startsAt ? ($monthNames[$startsAt->format('m')] ?? strtoupper($startsAt->format('M'))) : '---';
$day = $startsAt?->format('d') ?? '--';
$year = $startsAt?->format('Y') ?? '';
$timeLabel = $startsAt?->format('H:i') ?? ($appointment->appointment_time ?: 'Por definir');
$effectiveStatus = $appointment->effective_status;
$statusClass = match($effectiveStatus) { 'accepted' => 'confirmed', 'completed' => 'completed', 'missed', 'cancelled', 'rejected' => 'cancelled', default => 'pending' };
$displayFolio = 'ID '.$appointment->id;
$professionalName = $appointment->professional?->nombre_completo ?? 'Especialista pendiente';
$specialty = $profile?->especialidad_principal ?? (($appointment->professional?->rol === 'psiquiatra') ? 'Psiquiatría' : 'Psicología');
$modality = ucfirst($appointment->modality ?? 'Modalidad');
$reason = $appointment->reason ?: 'Motivo pendiente';
$videoLink = $appointment->patient_video_url;
$isSessionMoment = $appointment->is_video_session_available ?? false;
$sessionAccessEnds = $appointment->session_access_ends_at;
$hasPrimaryAction = false;
$requestTitle = match($appointment->status) {
'pending_payment' => 'Pago pendiente de cita',
'pending' => 'Nueva cita solicitada',
'rescheduled' => 'Solicitud de reagenda',
default => $professionalName,
};
$requestDescription = match($appointment->status) {
'pending_payment' => 'Completa el pago para enviar la solicitud al especialista.',
'pending' => 'Pendiente de confirmación por el especialista.',
'rescheduled' => 'El especialista propuso un nuevo horario. Acepta la propuesta o cancela la cita.',
default => $modality.' · '.$reason,
};
$schedulePayload = $appointment->patient_booking_payload ?? ['days' => [], 'availability' => [], 'duration' => 50, 'blockedSlots' => []];
@endphp
@if($appointment->status === 'rescheduled')
@empty
{{ $month }}
{{ $day }}
{{ $year }}
{{ $statusLabels[$effectiveStatus] ?? ucfirst($effectiveStatus) }}
{{ $timeLabel }} hrs
{{ $displayFolio }}
{{ $key === 'solicitudes' ? $requestTitle : $professionalName }}
@if($key === 'solicitudes') {{ $professionalName }} · {{ $reason }} · {{ $modality }} @else {{ $modality }} · {{ $reason }} @if($specialty){{ $specialty }}@endif @endifPropuesta: {{ optional($appointment->reschedule_date)->format('d/m/Y') }} {{ $appointment->reschedule_time }} @if($appointment->reschedule_proposal) · {{ $appointment->reschedule_proposal }} @endif
@endif
@if($key === 'proximas')
@if($isSessionMoment && $videoLink)
@php $hasPrimaryAction = true; @endphp
Entrar a sesión
@else
{{ $startsAt && $startsAt->lte($now) ? 'Disponible hasta '.optional($sessionAccessEnds)->format('H:i').' hrs' : 'Disponible 2 min antes' }}
@endif
@elseif($key === 'solicitudes')
@if($appointment->status === 'pending_payment')
Pagar
@endif
@if($appointment->status === 'rescheduled')
@endif
@if($appointment->status === 'pending' && $appointment->requested_by === 'profesional')
@endif
@if($appointment->status !== 'pending_payment')
@endif
@if(!in_array($effectiveStatus, ['completed','cancelled','rejected','missed'], true))
@endif
@endif
No hay registros en esta sección.
@endforelse