{{-- Ticket de invitación (Versión 2) Props esperados (cualquiera de estas variantes): - $ticket: array con keys opcionales name: string -> Nombre a mostrar people: int -> Cantidad de personas/pases table: string|int|null -> Nro de mesa message: string|null -> Mensaje personalizado - o variables sueltas: $guest, $guest_name, $number_of_guests, $guest_table --}} @php // Helper de acceso seguro para soportar array u objeto $get = function ($src, $key, $default = null) { if (is_array($src)) { return $src[$key] ?? $default; } if (is_object($src)) { return $src->{$key} ?? $default; } return $default; }; // Normalizar $ticket a una estructura accesible $tSrc = $ticket ?? null; $t = is_array($tSrc) || is_object($tSrc) ? $tSrc : []; // Normalizar $guest a modelo, stdClass o array $guestModel = $guest ?? null; // Construir nombre evitando mostrar la palabra "Grupo" $computedFromModel = null; if (!is_null($guestModel)) { $first = trim((string)$get($guestModel, 'first_name', '')); $last = trim((string)$get($guestModel, 'last_name', '')); if ($last !== '' && mb_strtolower($last) !== 'grupo') { $computedFromModel = trim($first.' '.$last); } else { $computedFromModel = $first; } } $name = $get($t, 'name', $guest_name ?? $computedFromModel); if (!is_null($name)) { // Si por algún motivo viene con sufijo "Grupo", removerlo de forma segura $name = preg_replace('/\s+grupo\s*$/iu', '', trim((string)$name)); } $people = $get($t, 'people', $number_of_guests ?? $get($guestModel, 'number_of_guests')); $tableNumber = $get($t, 'table', $guest_table ?? null); // Solo mostrar el mensaje personalizado del invitado. Si no hay, usar null (se mostrará "-"). $message = $get($guestModel, 'message'); @endphp @once @push('styles') @endpush @endonce

Invitación válida para:

Nombre
{{ $name ?: '—' }}
Cantidad de pases:
{{ $people ?? '—' }}
Mensaje
{{ $message !== null && $message !== '' ? $message : '-' }}
@php // Variables para flujo de confirmación por tickets (reuso de lógica v2) $ticketEnabled = isset($_enableGuestTicket) && (string)$_enableGuestTicket === '1'; $isEditPreview = request()->boolean('edit'); $hasGuest = isset($guest); $guestPasses = $hasGuest ? (int)($guest->number_of_guests ?? 0) : 0; $enableTicketFlow = $ticketEnabled && $hasGuest && $guestPasses > 0; $showTicketButtonPreview = $ticketEnabled && $isEditPreview && !$hasGuest; $isGroupGuest = isset($guest) && (mb_strtolower((string)($guest->last_name ?? '')) === 'grupo'); $groupMembers = $isGroupGuest ? (is_array($guest->group_members) ? $guest->group_members : []) : []; $menuOptions = is_array($invitation->menu_options) && count($invitation->menu_options) > 0 ? $invitation->menu_options : ['Sin restricción', 'Vegetariano', 'Vegano', 'Celíaco']; @endphp @if($ticketEnabled) @php // Permite controlar si se muestra el botón directamente dentro de la sección del ticket. // En v1 lo ocultamos para no duplicar con el botón de la sección Confirmación. $showInlineButton = $showInlineButton ?? true; @endphp @if($ticketEnabled && $showInlineButton)
@if($enableTicketFlow) @elseif($showTicketButtonPreview)
Vista previa del botón de tickets
@endif
@endif @if($enableTicketFlow) @endif @push('scripts') @endpush @endif