206 lines
9.5 KiB
PHP
206 lines
9.5 KiB
PHP
<div class="modal fade text-left" id="buket{{ $p->id_transaksi }}" tabindex="-1" role="dialog"
|
|
aria-labelledby="myModalLabel1" aria-hidden="true">
|
|
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
|
<div class="modal-content">
|
|
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="myModalLabel1">Detail Pesanan Buket</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
|
|
<div class="modal-body">
|
|
<div class="row gx-3">
|
|
|
|
<div class="col-12 col-md-6">
|
|
|
|
<h6 class="modal-section-title">Rincian Pesanan</h6>
|
|
<div class="detail-order">
|
|
<div class="detail-row">
|
|
<span class="detail-label">Nama Buket</span>
|
|
<span class="detail-value">{{ $p->buket->nama }}</span>
|
|
</div>
|
|
|
|
<div class="detail-row">
|
|
<span class="detail-label">Request Khusus</span>
|
|
@if ($p->request && $p->request != '')
|
|
<span class="detail-value">{{ $p->request }}</span>
|
|
@else
|
|
<span class="detail-value">-</span>
|
|
@endif
|
|
</div>
|
|
|
|
<div class="detail-row">
|
|
<span class="detail-label">Ucapan</span>
|
|
<div class="detail-value">
|
|
@if ($p->ucapan && $p->ucapan != '')
|
|
<span class="detail-value">{{ $p->ucapan }}</span>
|
|
@else
|
|
<span class="detail-value">-</span>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<h6 class="modal-section-title">Informasi Pemesan</h6>
|
|
<div class="detail-customer">
|
|
<div class="detail-row">
|
|
<span class="detail-label">Nama Lengkap</span>
|
|
<span class="detail-value">{{ $p->pelanggan->nama }}</span>
|
|
</div>
|
|
|
|
<div class="detail-row">
|
|
<span class="detail-label">WhatsApp</span>
|
|
<span class="detail-value">{{ $p->pelanggan->no_wa }}</span>
|
|
</div>
|
|
<div class="detail-row d-flex align-items-start mb-3">
|
|
<span class="detail-label" style="min-width: 150px;">Tanggal Pengambilan</span>
|
|
<div class="detail-content">
|
|
<div class="detail-value">
|
|
{{-- Menambahkan 'l' untuk nama hari --}}
|
|
{{ \Carbon\Carbon::parse($p->tgl_ambil)->locale('id')->translatedFormat('l, d F Y') }}
|
|
</div>
|
|
<div class="detail-value">
|
|
|
|
{{ \Carbon\Carbon::parse($p->tgl_ambil)->format('H:i') }} WIB
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-12 col-md-6 mt-4 mt-md-0">
|
|
<h6 class="modal-section-title">Pembayaran</h6>
|
|
|
|
<div class="payment-box">
|
|
<div class="detail-row align-items-center">
|
|
<span class="detail-label">No. Invoice</span>
|
|
<span class="badge bg-success-subtle rounded-pill px-3">{{ $p->no_invoice }}</span>
|
|
</div>
|
|
<div class="detail-row align-items-center">
|
|
<span class="detail-label">Status</span><span
|
|
class="badge {{ $p->status_label->class }}">
|
|
{{ $p->status_label->text }}
|
|
</span>
|
|
|
|
</div>
|
|
|
|
<div class="detail-row align-items-center">
|
|
<span class="detail-label">Total</span>
|
|
<span class="detail-value">Rp {{ number_format($p->total_bayar, 0, ',', '.') }}</span>
|
|
</div>
|
|
|
|
<div class="detail-row align-items-start">
|
|
<span class="detail-label d-block ">Bukti Pembayaran</span>
|
|
|
|
<div class="proof-img-wrapper">
|
|
@if ($p->bukti_bayar)
|
|
{{-- Klik hanya pada gambar --}}
|
|
<img src="{{ asset($p->bukti_bayar) }}" class="proof-img"
|
|
style="cursor: pointer;"
|
|
onclick="showImage('{{ asset($p->bukti_bayar) }}')">
|
|
@else
|
|
{{-- Div pengganti kalau tidak ada foto --}}
|
|
<div class="custom-img-box d-flex align-items-center justify-content-center text-muted border rounded"
|
|
style="height: 100px; background: #f8f9fa;">
|
|
<small>Tidak ada bukti pembayaran</small>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer border-top-0 pt-2 px-2">
|
|
<div class="d-flex w-100 gap-2">
|
|
<button type="button" class="btn btn-danger flex-fill tolak"
|
|
onclick="prosesTanpaDialog(this, 'tolak', '{{ $p->id_transaksi }}')">
|
|
Tolak Pesanan
|
|
</button>
|
|
|
|
<button type="button" class="btn btn-success flex-fill terima"
|
|
onclick="prosesTanpaDialog(this, 'terima', '{{ $p->id_transaksi }}')">
|
|
Terima Pesanan
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- MODAL GAMBAR --}}
|
|
<div class="modal fade" id="modalImagePreview" tabindex="-1" aria-hidden="true">
|
|
<div class="modal-dialog modal-dialog-centered modal-lg">
|
|
<div class="modal-content bg-transparent border-0 shadow-none">
|
|
{{-- Tombol close putih agar terlihat di background gelap --}}
|
|
<div class="text-end mb-2">
|
|
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"
|
|
aria-label="Close"></button>
|
|
</div>
|
|
<div class="modal-body p-0 text-center">
|
|
<img id="img-preview-target" src="" class="img-fluid rounded shadow-lg"
|
|
style="max-height: 85vh; object-fit: contain;">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
function showImage(src) {
|
|
const modalElement = document.getElementById('modalImagePreview');
|
|
const modalImg = document.getElementById('img-preview-target');
|
|
|
|
// 1. Set sumber gambar
|
|
modalImg.src = src;
|
|
|
|
// 2. Tampilkan modal (Cara Bootstrap 5 yang lebih aman)
|
|
const myModal = new bootstrap.Modal(modalElement);
|
|
myModal.show();
|
|
}
|
|
</script>
|
|
|
|
<script>
|
|
function prosesTanpaDialog(btn, jenis, id) {
|
|
// 1. Efek Loading pada tombol yang diklik
|
|
const originalText = btn.innerHTML;
|
|
btn.innerHTML = '<span class="spinner-border spinner-border-sm"></span>';
|
|
btn.disabled = true;
|
|
|
|
// 2. Eksekusi Fetch
|
|
fetch(`{{ url('/admin/pesanan-buket/update-status') }}/${id}`, {
|
|
method: 'PUT',
|
|
headers: {
|
|
'X-CSRF-TOKEN': '{{ csrf_token() }}',
|
|
'Content-Type': 'application/json',
|
|
'Accept': 'application/json'
|
|
},
|
|
body: JSON.stringify({
|
|
jenis: jenis
|
|
})
|
|
})
|
|
.then(response => {
|
|
if (!response.ok) throw new Error('Gagal menghubungi server');
|
|
return response.json();
|
|
})
|
|
.then(data => {
|
|
if (data.success) {
|
|
// 3. Langsung buka WhatsApp di tab baru
|
|
window.open(data.wa_url, '_blank');
|
|
// 4. Reload halaman utama untuk update status di tabel
|
|
location.reload();
|
|
} else {
|
|
alert("Error: " + data.message);
|
|
btn.innerHTML = originalText;
|
|
btn.disabled = false;
|
|
}
|
|
})
|
|
.catch(error => {
|
|
console.error(error);
|
|
alert("Terjadi kesalahan sistem. Cek Console.");
|
|
btn.innerHTML = originalText;
|
|
btn.disabled = false;
|
|
});
|
|
}
|
|
</script>
|