Detail transaksi dan pembayaran aman melalui GTGStore.
{{ $order->status }}
{{-- Salin ID dan link terpisah, supaya tiap bagian bisa ditempel sendiri
(misal ID buat konfirmasi cepat, link buat dibagikan) tanpa format
gabungan yang berantakan saat ditempel di WhatsApp. --}}
Mode simulasi lokal - QR di bawah bukan QRIS asli. Gunakan php artisan pakasir:simulate-payment {{ $order->public_token }} untuk mensimulasikan pembayaran berhasil.
@endif
{{ $order->qris_payment_string }}
Scan pakai aplikasi e-wallet atau mobile banking apa pun yang mendukung QRIS.
Transaksi terlindungi
Status diperbarui otomatis
QRIS berhasil dibuat, tetapi gambarnya gagal ditampilkan. Silakan coba lagi.
@else
@if ($isExpiredQrisAwaitingReconciliation)
QRIS sudah kedaluwarsa. Kami sedang memastikan status pembayaran terakhir. Halaman ini akan diperbarui otomatis.
@else
{{ $order->qris_generation_status === 'creating'
? 'QRIS masih sedang disiapkan. Tunggu sebentar lalu coba lagi.'
: 'QRIS belum berhasil dibuat. Silakan coba lagi.' }}
Rp {{ number_format($order->qris_total_payment ?? $order->payableAmount(), 0, ',', '.') }}
@endif
Kedaluwarsa
@if ($order->status === 'PENDING_PAYMENT')
{{-- Countdown realtime di-render JS dari data-expires-at (lihat
script di bawah). Teks statis jadi fallback kalau JS belum
jalan (mis. sesaat sebelum hydrate) atau browser tidak
mendukung. --}}
{{ $order->expires_at->format('d M Y, H:i') }} WIB
@else
{{ $order->expires_at->format('d M Y, H:i') }} WIB
@endif
@if ($order->status === 'DELIVERED')
@php
// Batasi kartu yang benar-benar dirender di halaman ke 2 unit
// pertama -- sengaja bukan disembunyikan lewat CSS/collapse,
// tapi memang tidak dirender sama sekali, supaya halaman tetap
// ringkas untuk order dengan banyak unit. Sisanya tetap bisa
// didapat lewat tombol "Salin Semua" di bawah.
$visibleLinks = $order->stockLinks->take(2);
$hiddenCount = max(0, $order->stockLinks->count() - $visibleLinks->count());
$isLinkInvite = $order->productType() === 'link_invite';
$unitLabel = \App\Models\Product::unitLabelForType($order->productType());
$unitLabelLower = strtolower($unitLabel);
// Data delivery bisa disalin baik untuk pembelian satuan maupun
// batch. Batch tetap memakai label "Salin Semua", sedangkan
// satuan memakai label yang lebih langsung sesuai tipe unit.
$showCopyDelivery = $order->stockLinks->isNotEmpty();
// Format rapi untuk clipboard: header nama produk + jumlah,
// lalu tiap unit dipisah baris kosong dengan label unit ke-N
// (mis. "Akun 1", "Kode Redeem 2") supaya begitu ditempel ke
// WhatsApp, customer/admin langsung bisa membedakan unit
// satu dengan yang lain.
$copyAllText = collect([$order->productName() . ($order->isBatch() ? ' - ' . $order->quantity . ' ' . $unitLabel : '')])
->concat($order->stockLinks->map(function ($link, $index) use ($unitLabel) {
$payload = $link->deliveryPayload();
$lines = collect($payload)
->map(fn ($value, $key) => ucwords(str_replace('_', ' ', $key)) . ': ' . $value)
->implode("\n");
return "\n{$unitLabel} " . ($index + 1) . "\n" . $lines;
}))
->implode("\n");
$deliveryNoteEntries = collect([
'product' => $deliveryNoteDocuments['product'] ?? null,
'variant' => $deliveryNoteDocuments['variant'] ?? null,
])->filter();
$deliveryNoteTextEntries = collect([
'product' => $deliveryNotePlainText['product'] ?? '',
'variant' => $deliveryNotePlainText['variant'] ?? '',
])->filter(fn ($text) => trim((string) $text) !== '');
if ($deliveryNoteTextEntries->isNotEmpty()) {
$multipleNotes = $deliveryNoteTextEntries->count() > 1;
$copyNoteText = $deliveryNoteTextEntries
->map(function ($text, $type) use ($multipleNotes, $order) {
if (! $multipleNotes) {
return $text;
}
$label = $type === 'product'
? 'Panduan Produk'
: 'Panduan Variant' . ($order->variantName() ? ' - ' . $order->variantName() : '');
return $label . "\n" . $text;
})
->implode("\n\n");
$copyAllText .= "\n\nNOTES\n" . $copyNoteText;
}
@endphp
Pesanan ini sudah diselesaikan oleh admin secara manual. Kalau kamu belum menerima detail/akses melalui WhatsApp, silakan hubungi kami dengan menyertakan ID invoice di atas.