@extends('layouts.app-sub') @section('title', '예약 상세정보 - GLOBEAU') @section('header-title', '예약 상세정보') @push('styles') @endpush @section('content')
@php // 1. 데이터 안전 추출 (티켓 및 프로그램 관계 연쇄 탐색) $ticketItem = $reservation->userTicketItem; $userTicket = $ticketItem?->userTicket; $orderItem = $userTicket?->orderItem; $program = $ticketItem?->program ?? ($orderItem?->program ?? null); $programName = $program?->name ?? ($ticketItem?->program_name ?? '프리미엄 뷰티 프로그램'); $programId = $program?->id ?? ($ticketItem?->program_id ?? null); // 2. 🌟 프로그램 이미지 컬럼 다중 탐색 (티켓 상세와 100% 동일한 안전 로직) $rawImage = null; if ($program) { $possibleColumns = [ 'mobile_banner_path', 'og_image_url', 'og_image_path', 'banner_path', 'banner_image', 'thumbnail', 'image', 'file_path', 'logo_path' ]; foreach ($possibleColumns as $col) { if (!empty($program->$col)) { $rawImage = $program->$col; break; } } } // 3. 🌟 스토리지 및 URL 경로 변환 if ($rawImage) { if (str_starts_with($rawImage, 'http://') || str_starts_with($rawImage, 'https://')) { $programImage = $rawImage; } elseif (str_starts_with($rawImage, 'storage/')) { $programImage = asset($rawImage); } else { $programImage = asset('storage/' . ltrim($rawImage, '/')); } } else { $programImage = null; } // 방문 일시 파싱 (시간 유실 방지) $rawReservedAt = $reservation->getAttributes()['reserved_at'] ?? $reservation->reserved_at; $carbonReserved = \Carbon\Carbon::parse($rawReservedAt); // 예약번호 4자리 하이픈 분할 $cleanCode = str_replace('-', '', $reservation->reservation_code); $formattedReservationCode = implode('-', str_split($cleanCode, 4)); // 티켓 회차 정보 $totalSlots = $userTicket->total_count ?? ($userTicket->total_slots ?? 1); $remainingSlots = $userTicket->remaining_count ?? ($userTicket->remaining_slots ?? 0); @endphp
예약 목록으로 돌아가기 {{ $reservation->status_label }}
@if($programImage)
{{ $programName }}
GLOBEAU OFFICIAL RESERVATION
{{ $programName }}
@else
GLOBEAU OFFICIAL RESERVATION
{{ $programName }}

본 예약권은 3분마다 갱신되는 안전한 모바일 체크인 티켓입니다.

@endif
보안 QR 갱신 남은 시간: 03:00
예약 확인 번호 {{ $formattedReservationCode }}
방문 일정 정보
예약 일시 {{ $carbonReserved->translatedFormat('Y년 m월 d일 (D) H:i') }}
방문 매장 {{ $reservation->shop->name ?? '지정 제휴 뷰티샵' }}
@if(!empty($reservation->shop?->tel)) @endif @if(!empty($reservation->shop?->address1 ?? $reservation->shop?->address))
매장 위치
{{ $reservation->shop->address1 ?? $reservation->shop->address }}
@endif
티켓 및 회차 현황
총 발급 회차 {{ $totalSlots }}회
이번 배정 회차 1회
이용 잔여 회차 {{ $remainingSlots }}회
@if(!empty($reservation->memo))
고객 전달 메모

{{ $reservation->memo }}

@endif @if($reservation->status === \App\Models\Reservation::STATUS_REJECTED && !empty($reservation->rejection_reason))
예약 반려 사유:

{{ $reservation->rejection_reason }}

@endif
@if($programId && \Illuminate\Support\Facades\Route::has('programs.show')) 프로그램 정보 @endif 예약 스케줄
@if(in_array($reservation->status, [\App\Models\Reservation::STATUS_PENDING, \App\Models\Reservation::STATUS_CONFIRMED])) @endif
@if(in_array($reservation->status, [\App\Models\Reservation::STATUS_PENDING, \App\Models\Reservation::STATUS_CONFIRMED])) @endif @endsection @push('scripts') @endpush