@extends('admin.layout') @section('title', 'Detail Invoice #' . $invoice->invoice_number) @section('content')

Detail Invoice #{{ $invoice->invoice_number }}

Informasi lengkap invoice dan booking terkait

Kembali @if($invoice->status === 'draft') Edit @endif Download PDF
Informasi Invoice
@php $statusColors = [ 'draft' => 'secondary', 'sent' => 'info', 'paid' => 'success', 'overdue' => 'danger', 'cancelled' => 'dark' ]; $statusLabels = [ 'draft' => 'Draft', 'sent' => 'Terkirim', 'paid' => 'Dibayar', 'overdue' => 'Terlambat', 'cancelled' => 'Dibatalkan' ]; @endphp {{ $statusLabels[$invoice->status] ?? ucfirst($invoice->status) }} @if(($invoice->non_refundable ?? false) || (!empty($invoice->notes) && preg_match('/non[- ]?refund/i', $invoice->notes))) Non-Refundable @endif
No. Invoice: {{ $invoice->invoice_number }}
Tanggal Invoice: {{ optional($invoice->issued_at ?? $invoice->created_at)->format('d F Y') }}
Tanggal Jatuh Tempo: @if($invoice->due_date) {{ \Carbon\Carbon::parse($invoice->due_date)->format('d F Y') }} @if($invoice->status !== 'paid' && \Carbon\Carbon::parse($invoice->due_date)->isPast()) Terlambat @endif @else Tidak ditentukan @endif
Status:
Total Amount: @php $servicesViewTotal = (int) ($invoice->services_total ?? 0); if ($servicesViewTotal <= 0 && $invoice->booking && $invoice->booking->roomServices) { $servicesViewTotal = (int) $invoice->booking->roomServices->sum('total_price'); } $totalInclude = max(0, (int) ($invoice->subtotal ?? 0) + $servicesViewTotal - (int) ($invoice->discount_amount ?? 0)); @endphp Rp {{ number_format($totalInclude, 0, ',', '.') }}
Dibuat: {{ $invoice->created_at->format('d F Y H:i') }}
Terakhir Update: {{ $invoice->updated_at->format('d F Y H:i') }}
Tanggal Pembayaran: @if($invoice->paid_at) {{ $invoice->paid_at->format('d F Y H:i') }} @else - @endif
@if($invoice->notes)
Catatan:
{{ $invoice->notes }}
@endif
Informasi Booking
@php $bookingGuestName = optional(optional($invoice->booking)->guest)->name ?? optional($invoice->booking)->guest_name; @endphp @if($bookingGuestName && ($bookingGuestName !== $invoice->guest_name)) @endif
Booking Code: @php $bookingCode = optional($invoice->booking)->booking_code; @endphp @if($bookingCode) {{ $bookingCode }} @else N/A @endif Lihat Semua Booking
Nama Tamu: {{ $invoice->guest_name }}
Email: {{ $invoice->guest_email }}
Telepon: {{ $invoice->guest_phone }}
Nama Tamu Booking: {{ $bookingGuestName }}
Kamar: {{ $invoice->room_type ?? optional(optional($invoice->booking)->room->roomType)->name ?? 'N/A' }} @php $roomNumber = $invoice->booking->room->room_number ?? $invoice->room_number ?? $invoice->booking->room->name ?? null; @endphp @if($roomNumber) - {{ $roomNumber }} @endif
Check-in: {{ \Carbon\Carbon::parse($invoice->booking->check_in_date ?? $invoice->check_in_date)->format('d F Y') }}
Check-out: {{ \Carbon\Carbon::parse($invoice->booking->check_out_date ?? $invoice->check_out_date)->format('d F Y') }}
Rincian Tagihan
@php $hasMerged = isset($mergedSources) && ($mergedSources->count() > 0); @endphp @if($hasMerged) @else @endif @if($hasMerged) @foreach($mergedSources as $src) @php $ov = isset($itemOverrides) ? ($itemOverrides[$src->invoice_number] ?? null) : null; $nights = $ov['nights'] ?? ($src->nights ?? (\Carbon\Carbon::parse($src->check_in_date)->diffInDays(\Carbon\Carbon::parse($src->check_out_date)) ?: 1)); $rate = $ov['rate'] ?? ($src->room_rate ?? 0); $amount = $ov['subtotal'] ?? ($src->subtotal ?? 0); @endphp @endforeach @else @php $hasOverrides = !empty($itemOverrides ?? []); @endphp @if($hasOverrides) @foreach($itemOverrides as $name => $ov) @php $start = isset($ov['start']) && $ov['start'] ? \Carbon\Carbon::parse($ov['start'])->format('d M Y') : \Carbon\Carbon::parse($invoice->check_in_date)->format('d M Y'); $end = isset($ov['end']) && $ov['end'] ? \Carbon\Carbon::parse($ov['end'])->format('d M Y') : \Carbon\Carbon::parse($invoice->check_out_date)->format('d M Y'); $nights = $ov['nights'] ?? (\Carbon\Carbon::parse($start)->diffInDays(\Carbon\Carbon::parse($end)) ?: 1); $amount = $ov['subtotal'] ?? 0; @endphp @endforeach @else @php $baseCheckIn = $invoice->booking->check_in_date ?? $invoice->check_in_date; $isExtend = (\Carbon\Carbon::parse($invoice->check_in_date)->toDateString() !== \Carbon\Carbon::parse($baseCheckIn)->toDateString()); @endphp @endif @endif @if($invoice->booking && $invoice->booking->roomServices && $invoice->booking->roomServices->count() > 0) @foreach($invoice->booking->roomServices as $service) @endforeach @endif @php $cardCharge = 0; if (!empty($invoice->notes) && preg_match('/Card\s*Charge:\s*Rp\s*([0-9\.,]+)/i', $invoice->notes, $m)) { $raw = $m[1] ?? '0'; $cardCharge = (int) preg_replace('/[^0-9]/', '', $raw); } $taxRate = (int) \App\Models\Settings::get('tax_rate', 10); $servicesViewTotal = (int) ($invoice->services_total ?? 0); if ($servicesViewTotal <= 0 && $invoice->booking && $invoice->booking->roomServices) { $servicesViewTotal = (int) $invoice->booking->roomServices->sum('total_price'); } $totalInclude = max(0, (int) ($invoice->subtotal ?? 0) + $servicesViewTotal - (int) ($invoice->discount_amount ?? 0) ); $rawDPP = $totalInclude / (1 + ($taxRate / 100)); $baseDPP = floor($rawDPP); $dpp = (($rawDPP - $baseDPP) < 0.5) ? $baseDPP : ($baseDPP + 1); $computedTax = max(0, $totalInclude - $dpp); $finalTotal = $totalInclude + $cardCharge; @endphp @if($cardCharge > 0) @endif
Deskripsi Room Nights Rate AmountDeskripsi Periode Jumlah
@php $baseCheckIn = $src->booking->check_in_date ?? $src->check_in_date; $isExtendRow = (\Carbon\Carbon::parse($src->check_in_date)->toDateString() !== \Carbon\Carbon::parse($baseCheckIn)->toDateString()); $startDisp = isset($ov['start']) && $ov['start'] ? \Carbon\Carbon::parse($ov['start'])->format('d M Y') : \Carbon\Carbon::parse($src->check_in_date)->format('d M Y'); $endDisp = isset($ov['end']) && $ov['end'] ? \Carbon\Carbon::parse($ov['end'])->format('d M Y') : \Carbon\Carbon::parse($src->check_out_date)->format('d M Y'); @endphp {{ $src->room_type ?? ($src->booking->room->roomType->name ?? 'Room') }}@if($isExtendRow) (Extend)@endif
{{ $startDisp }} - {{ $endDisp }}
{{ $src->room_number ?? ($src->booking->room->room_number ?? '-') }} {{ $nights }} Rp {{ number_format($rate, 0, ',', '.') }} Rp {{ number_format($amount, 0, ',', '.') }}
{{ $name }} {{ $start }} - {{ $end }}
{{ $nights }} malam | Rate: Rp {{ number_format(($ov['rate'] ?? 0), 0, ',', '.') }}
Rp {{ number_format($amount, 0, ',', '.') }}
{{ $invoice->room_type ?? ($invoice->booking->room->roomType->name ?? 'Room') }}
@if($isExtend) (Extend) @endif
{{ \Carbon\Carbon::parse($invoice->check_in_date)->format('d M Y') }} - {{ \Carbon\Carbon::parse($invoice->check_out_date)->format('d M Y') }}
{{ $invoice->nights ?? \Carbon\Carbon::parse($invoice->check_in_date)->diffInDays(\Carbon\Carbon::parse($invoice->check_out_date)) }} malam
@php $roomSubtotal = $invoice->subtotal ?? round((($invoice->room_rate ?? 0) * ($invoice->nights ?? 0)), 2); @endphp Rp {{ number_format($roomSubtotal, 0, ',', '.') }}
Room Service - {{ $service->service_name }}
Layanan Tambahan
Qty: {{ $service->quantity }} Rp {{ number_format($service->total_price, 0, ',', '.') }}
Total Included Tax: Rp {{ number_format($totalInclude, 0, ',', '.') }}
Card Charge: Rp {{ number_format($cardCharge, 0, ',', '.') }}
Total: Rp {{ number_format($finalTotal, 0, ',', '.') }}
Tax Included: Rp {{ number_format($computedTax, 0, ',', '.') }}
Aksi Cepat
Download PDF @if($invoice->status !== 'paid') @endif @if($invoice->status === 'draft') @endif Edit Invoice
Statistik
@php $servicesViewTotal = (int) ($invoice->services_total ?? 0); if ($servicesViewTotal <= 0 && $invoice->booking && $invoice->booking->roomServices) { $servicesViewTotal = (int) $invoice->booking->roomServices->sum('total_price'); } $totalInclude = max(0, (int) ($invoice->subtotal ?? 0) + $servicesViewTotal - (int) ($invoice->discount_amount ?? 0)); @endphp

Rp {{ number_format($totalInclude, 0, ',', '.') }}

Total Invoice
@if($invoice->due_date)
@php $daysUntilDue = \Carbon\Carbon::now()->diffInDays(\Carbon\Carbon::parse($invoice->due_date), false); @endphp @if($invoice->status === 'paid') Sudah Dibayar @elseif($daysUntilDue < 0) Terlambat {{ abs($daysUntilDue) }} hari @elseif($daysUntilDue == 0) Jatuh tempo hari ini @else {{ $daysUntilDue }} hari lagi @endif
@endif @if($invoice->paid_at)
Dibayar pada: {{ $invoice->paid_at->format('d M Y H:i') }}
@endif
Dibuat: {{ $invoice->created_at->format('d M Y') }}
Update: {{ $invoice->updated_at->format('d M Y') }}
Timeline Aktivitas
@if(isset($activities) && $activities->count() > 0)
    @foreach($activities as $act)
  • {{ $act->user->name ?? 'System' }} {{ $act->description }}
    {{ $act->created_at->format('d M Y H:i') }}
  • @endforeach
@else
Belum ada aktivitas.
@endif
@endsection @push('scripts') @endpush