@php use Illuminate\Support\Carbon; use Illuminate\Support\Str; $money = fn($v) => number_format((float) $v, 2); $date = fn($d) => $d ? Carbon::parse($d)->format('d/m/Y') : '—'; $clientName = $account->client?->name ?? '—'; $logo = brand_logo_url(); $projectName = $account->lote?->project?->name ?? $account->lote?->manzana?->project?->name ?? $account->property?->name ?? '—'; $manzanaName = $account->lote?->manzana?->nombre; $loteNumber = $account->lote?->numero; $referenceAction = $account->lote ? trim('LOTE '.($loteNumber ?: '—').($manzanaName ? ' MZA '.$manzanaName : '')) : ($account->unit_label ?? ('Cuenta #'.$account->id)); $rows = collect($installments)->values(); $monthlyRows = $rows->filter(fn($r) => empty($r->is_annuity)); $annuityRows = $rows->filter(fn($r) => !empty($r->is_annuity)); $scheduledTotal = (float) $rows->sum(fn($r) => (float) ($r->amount ?? 0)); $initialContribution = max(0, (float) $account->total_price - $scheduledTotal); $monthlyTotalToCover = (float) $monthlyRows->sum(fn($r) => (float) ($r->amount ?? 0)); $annualTotalToCover = (float) $annuityRows->sum(fn($r) => (float) ($r->amount ?? 0)); $termMonths = (int) ($account->term_months ?: $monthlyRows->count()); $issueDate = now()->format('d/m/Y'); $issuedAt = now()->format('d/m/Y H:i'); $startBalance = $scheduledTotal; $companyName = $company['name'] ?: 'Casa Amiga Inmobiliaria'; $companyAddress = $company['address'] ?: '—'; $companyPhone = $company['phone'] ?: '—'; $companyEmail = $company['email'] ?: '—'; @endphp
⬇ Descargar PDF
@if($logo){{ $companyName }}@endif
{{ $companyName }}
Plan de aportaciones
Sucursal / domicilio: {{ $companyAddress }}
Fecha de expedición: {{ $issueDate }}
Teléfono de oficina: {{ $companyPhone }}
Email: {{ $companyEmail }}
Nombre(s) depositante(s) Plan derivado de Referencia de acción en copropiedad Proyecto
{{ $clientName }} Aportaciones {{ $referenceAction }} {{ $projectName }}
Monto total a aportar Monto aport. inicial Monto a cubrir en aport. mens. Monto a cubrir en aport. anual / plazo meses
${{ $money($account->total_price) }} ${{ $money($initialContribution) }} ${{ $money($monthlyTotalToCover) }} ${{ $money($annualTotalToCover) }} / {{ $termMonths }}
Desglose del plan de aportaciones
@php $running = $scheduledTotal; $prevDate = null; @endphp @forelse($rows as $inst) @php $due = !empty($inst->due_date) ? Carbon::parse($inst->due_date) : null; $days = ($prevDate && $due) ? $prevDate->diffInDays($due) : 0; $opening = max(0, $running); $amount = (float) ($inst->amount ?? 0); $newBalance = max(0, $opening - $amount); $isPaid = ($inst->status ?? null) === 'Pagado'; $isOverdue = !$isPaid && $due && $due->lt(now()->startOfDay()); $statusText = $isPaid ? 'Pagado' : ($isOverdue ? 'Vencido' : 'Pendiente'); $statusClass = $isPaid ? 'status-paid' : ($isOverdue ? 'status-overdue' : 'status-pending'); $prevDate = $due; $running = $newBalance; @endphp @empty @endforelse
No.
aport.
Fecha de pago Días
trans.
Monto a cubrir
en aport. mens.
Monto de
aportación
Interés del
periodo
Pago total sin
IVA
IVA Nuevo saldo Estatus Recibo
{{ $inst->number ?? '—' }} {{ $date($inst->due_date ?? null) }} {{ $days }} ${{ $money($opening) }} ${{ $money($amount) }} $0.00 ${{ $money($amount) }} $0.00 ${{ $money($newBalance) }} {{ $statusText }} @if(!empty($inst->id)) Ver recibo @else — @endif
No hay aportaciones programadas.
Total programado
${{ $money($scheduledTotal) }}
Aportaciones mensuales
${{ $money($monthlyTotalToCover) }}
Aportaciones anuales
${{ $money($annualTotalToCover) }}