@php use Illuminate\Support\Carbon; // Helpers para evitar "Call to a member function format() on string" $asCarbon = function ($value) { if (!$value) return null; return $value instanceof \Carbon\CarbonInterface ? $value : Carbon::parse($value); }; $fmt = function ($value, $format) use ($asCarbon) { $c = $asCarbon($value); return $c ? $c->format($format) : null; }; // ✅ Quien exporta (planner o pareja) $generatedBy = $generatedByName ?? ($user->name ?? 'Usuario'); // ✅ Para quién es el planner (pareja / matrimonio) $generatedFor = $generatedForName ?? ($matrimonio->nombre_pareja ?? 'Matrimonio'); // ✅ Etiqueta contextual (no rompe si no existe role) $role = $user->role ?? null; $roleLabel = $role === 'planner' ? 'Wedding Planner' : 'Pareja / Usuario'; @endphp {{-- ENCABEZADO --}}

Planner de Matrimonio

Generado por {{ $generatedBy }} — Para: {{ $generatedFor }} — Fecha: {{ now()->format('d/m/Y H:i') }}

Rol exportador: {{ $roleLabel }}

datosmatrimonios.cl
@if($matrimonio->fecha_matrimonio) Día del matrimonio: {{ $fmt($matrimonio->fecha_matrimonio, 'd/m/Y') }} @endif
{{-- 1. DATOS PRINCIPALES DEL MATRIMONIO --}}

1. Datos del matrimonio

Resumen general

Pareja: {{ $matrimonio->nombre_pareja ?? 'Sin nombre registrado' }}

Fecha: {{ $fmt($matrimonio->fecha_matrimonio, 'd/m/Y') ?? 'Por definir' }}

Ciudad: {{ $matrimonio->ciudad ?? 'Por definir' }}

Lugar: {{ $matrimonio->lugar ?? 'Por definir' }}

Estilo: {{ $matrimonio->estilo ?? 'Por definir' }}

Invitados estimados: {{ $matrimonio->invitados_estimados ?? '—' }}

Estado: @php $estados = [ 'planificando' => 'Planificando', 'pausado' => 'Pausado', 'realizado' => 'Realizado', ]; @endphp {{ $estados[$matrimonio->estado] ?? 'Planificando' }}

{{-- 2. CHECKLIST --}}

2. Checklist de planificación

Organización paso a paso
Progreso del checklist
{{ $progresoChecklist }}%
{{ $completedTasks }} de {{ $totalTasks }} tareas completadas
@php $tasksGrouped = $matrimonio->tasks ->sortBy(['meses_antes', 'orden', 'id']) ->groupBy('meses_antes'); @endphp @foreach($tasksGrouped as $mesesAntes => $grupo)

@if($mesesAntes === 0) Semana del matrimonio @elseif($mesesAntes === 1) 1 mes antes @elseif($mesesAntes > 1) {{ $mesesAntes }} meses antes @else Checklist general @endif

@foreach($grupo as $t) @endforeach
Estado Tarea Categoría
@if($t->completada_at) ✅ Completada @else ⬜ Pendiente @endif {{ $t->titulo }} @if($t->descripcion)
{{ $t->descripcion }} @endif
@if($t->categoria) {{ ucfirst($t->categoria) }} @endif @if($t->fecha_limite)
Límite: {{ $fmt($t->fecha_limite, 'd/m/Y') }} @endif @if($t->es_personalizada)
Tarea personalizada @endif
@endforeach
{{-- 3. PRESUPUESTO --}}

3. Presupuesto

Visión financiera
Presupuesto total estimado
${{ number_format($totalEstimado ?: ($matrimonio->presupuesto_total ?? 0), 0, ',', '.') }}
Monto planificado para el matrimonio
Costo real
${{ number_format($totalReal, 0, ',', '.') }}
Suma real/cotizada por categoría
@php $restante = max(0, $totalReal - $totalPagado); @endphp
Total pagado
${{ number_format($totalPagado, 0, ',', '.') }}
Pagos ya realizados a proveedores
Por pagar (aprox.)
${{ number_format($restante, 0, ',', '.') }}
Diferencia entre costo real y pagado
@if($presupuestos->isNotEmpty()) @foreach($presupuestos as $p) @endforeach
Categoría Estimado Real / Cotizado Pagado Notas
{{ $p->categoria }} ${{ number_format($p->presupuesto_estimado, 0, ',', '.') }} ${{ number_format($p->costo_real, 0, ',', '.') }} ${{ number_format($p->pagado, 0, ',', '.') }} {{ $p->notas }}
@else

Aún no se han registrado categorías de presupuesto.

@endif
{{-- 4. INVITADOS --}}

4. Invitados

Gestión de invitados
Total invitados
{{ $totalInvitados }}
Registro general en la lista
Confirmados
{{ $confirmados }}
{{ $totalInvitados > 0 ? round(($confirmados / $totalInvitados) * 100) : 0 }}% del total
Pendientes
{{ $pendientes }}
Aún sin respuesta
Rechazaron
{{ $rechazados }}
Han indicado que no asisten
@if($invitados->isNotEmpty()) @foreach($invitados as $inv) @endforeach
Nombre Grupo Estado Dieta / Restricción Notas
{{ trim($inv->nombre . ' ' . $inv->apellido) }} {{ $inv->grupo }} @if($inv->rsvp_estado === 'confirmado') ✅ Confirmado @elseif($inv->rsvp_estado === 'rechazado') ❌ No asiste @else ⏳ Pendiente @endif {{ $inv->dieta }} {{ $inv->notas }}
@else

Aún no se han agregado invitados.

@endif
{{-- 5. PROVEEDORES --}}

5. Proveedores

Equipo del día

Total proveedores: {{ $totalProveedores }}

@if($proveedores->isNotEmpty()) @foreach($proveedores as $prov) @endforeach
Tipo Nombre Contacto Teléfono Instagram Acordado Pagado
{{ $prov->tipo }} {{ $prov->nombre }} {{ $prov->contacto }} {{ $prov->telefono }} {{ $prov->instagram }} ${{ number_format($prov->costo_acordado, 0, ',', '.') }} ${{ number_format($prov->pagado, 0, ',', '.') }}
@else

Aún no se han registrado proveedores.

@endif
{{-- 6. CRONOGRAMA DEL DÍA --}}

6. Cronograma del día del matrimonio

Timeline del día D
@if($timelineItems->isNotEmpty()) @foreach($timelineItems as $item) @endforeach
Hora Actividad Responsable Detalle
@php $inicio = $fmt($item->hora, 'H:i') ?? ''; $fin = (isset($item->hora_fin) && $item->hora_fin) ? ($fmt($item->hora_fin, 'H:i') ?? '') : ''; @endphp {{ $inicio }} @if($fin) - {{ $fin }} @endif {{ $item->titulo }} {{ $item->responsable }} {{ $item->descripcion }}
@else

Aún no se ha definido el cronograma del día.

@endif