Enhance order status update functionality and improve modal button actions for better user experience

This commit is contained in:
LailaWulandarii 2026-01-09 20:46:26 +07:00
parent e677d4f093
commit c44d3e3d15
2 changed files with 35 additions and 20 deletions

View File

@ -51,6 +51,7 @@ public function updateStatus(Request $request, $id)
$invoice = $pesanan->no_invoice; $invoice = $pesanan->no_invoice;
// 5. Susun Pesan berdasarkan kondisi // 5. Susun Pesan berdasarkan kondisi
$msg = null;
if ($status === 'diterima') { if ($status === 'diterima') {
$msg = "Halo Kak *{$nama}*,\n\n" . $msg = "Halo Kak *{$nama}*,\n\n" .
"Pesanan Anda dengan Nomor Invoice: *{$invoice}* telah kami *TERIMA* dan masuk dalam daftar proses pengerjaan.\n\n" . "Pesanan Anda dengan Nomor Invoice: *{$invoice}* telah kami *TERIMA* dan masuk dalam daftar proses pengerjaan.\n\n" .
@ -61,7 +62,7 @@ public function updateStatus(Request $request, $id)
"- *Ucapan:* \"{$ucapan}\"\n" . "- *Ucapan:* \"{$ucapan}\"\n" .
"- *Waktu Pengambilan:* {$tanggal} pukul {$waktu} WIB\n\n" . "- *Waktu Pengambilan:* {$tanggal} pukul {$waktu} WIB\n\n" .
"Mohon simpan rincian ini dan ditunggu info selanjutnya ya Kak. Terima kasih! ✨"; "Mohon simpan rincian ini dan ditunggu info selanjutnya ya Kak. Terima kasih! ✨";
} else { } elseif ($status === 'ditolak') {
$msg = "Halo Kak *{$nama}*,\n\n" . $msg = "Halo Kak *{$nama}*,\n\n" .
"Mengenai pesanan Anda dengan Nomor Invoice: *{$invoice}* terpaksa kami *TOLAK* dikarenakan:\n\n" . "Mengenai pesanan Anda dengan Nomor Invoice: *{$invoice}* terpaksa kami *TOLAK* dikarenakan:\n\n" .
"*[TULIS ALASAN DI SINI]*\n\n" . "*[TULIS ALASAN DI SINI]*\n\n" .
@ -73,18 +74,24 @@ public function updateStatus(Request $request, $id)
} }
// 6. Format Nomor WhatsApp // 6. Format Nomor WhatsApp
$no_wa = preg_replace('/[^0-9]/', '', $pesanan->pelanggan->no_wa); // Pastikan kolomnya 'no_wa' $wa_url = null;
if (str_starts_with($no_wa, '0')) { if ($msg) {
$no_wa = '62' . substr($no_wa, 1); $no_wa = preg_replace('/[^0-9]/', '', $pesanan->pelanggan->no_wa);
} elseif (str_starts_with($no_wa, '8')) {
$no_wa = '62' . $no_wa; if (str_starts_with($no_wa, '0')) {
$no_wa = '62' . substr($no_wa, 1);
} elseif (str_starts_with($no_wa, '8')) {
$no_wa = '62' . $no_wa;
}
$wa_url = "https://wa.me/{$no_wa}?text=" . urlencode($msg);
} }
// 7. Kembalikan Response JSON // 7. Kembalikan Response JSON
return response()->json([ return response()->json([
'success' => true, 'success' => true,
'wa_url' => "https://wa.me/{$no_wa}?text=" . urlencode($msg) 'wa_url' => $wa_url
]); ]);
} catch (\Exception $e) { } catch (\Exception $e) {
return response()->json(['success' => false, 'message' => $e->getMessage()], 500); return response()->json(['success' => false, 'message' => $e->getMessage()], 500);

View File

@ -1,10 +1,10 @@
<div class="modal fade text-left" id="buket{{ $p->id_transaksi }}" tabindex="-1" role="dialog" <div class="modal fade text-left" id="buket{{ $p->id_transaksi }}" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel1" aria-hidden="true"> aria-labelledby="labelBuket{{ $p->id_transaksi }}" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg" role="document"> <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="myModalLabel1">Detail Pesanan Buket</h5> <h5 class="modal-title" id="labelBuket{{ $p->id_transaksi }}">Detail Pesanan Buket</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div> </div>
@ -113,15 +113,22 @@ class="badge {{ $p->status_label->class }}">
</div> </div>
<div class="modal-footer border-top-0 pt-2 px-2"> <div class="modal-footer border-top-0 pt-2 px-2">
<div class="d-flex w-100 gap-2"> <div class="d-flex w-100 gap-2">
<button type="button" class="btn btn-danger flex-fill tolak" @if ($p->status_transaksi == 'menunggu_verifikasi')
onclick="prosesTanpaDialog(this, 'tolak', '{{ $p->id_transaksi }}')"> <button type="button" class="btn btn-danger flex-fill tolak"
Tolak Pesanan onclick="prosesBuket(this, 'tolak', '{{ $p->id_transaksi }}', 'buket')">
</button> Tolak Pesanan
</button>
<button type="button" class="btn btn-success flex-fill terima" <button type="button" class="btn btn-success flex-fill terima"
onclick="prosesTanpaDialog(this, 'terima', '{{ $p->id_transaksi }}')"> onclick="prosesBuket(this, 'terima', '{{ $p->id_transaksi }}', 'buket')">
Terima Pesanan Terima Pesanan
</button> </button>
@elseif ($p->status_transaksi == 'diterima')
<button type="button" class="btn btn-primary flex-fill terima"
onclick="prosesBuket(this, 'selesai', '{{ $p->id_transaksi }}', 'buket')">
Selesaikan Pesanan
</button>
@endif
</div> </div>
</div> </div>
</div> </div>
@ -161,7 +168,7 @@ function showImage(src) {
</script> </script>
<script> <script>
function prosesTanpaDialog(btn, jenis, id) { function prosesBuket(btn, jenis, id) {
// 1. Efek Loading pada tombol yang diklik // 1. Efek Loading pada tombol yang diklik
const originalText = btn.innerHTML; const originalText = btn.innerHTML;
btn.innerHTML = '<span class="spinner-border spinner-border-sm"></span>'; btn.innerHTML = '<span class="spinner-border spinner-border-sm"></span>';
@ -186,8 +193,9 @@ function prosesTanpaDialog(btn, jenis, id) {
.then(data => { .then(data => {
if (data.success) { if (data.success) {
// 3. Langsung buka WhatsApp di tab baru // 3. Langsung buka WhatsApp di tab baru
window.open(data.wa_url, '_blank'); if (data.wa_url) {
// 4. Reload halaman utama untuk update status di tabel window.open(data.wa_url, '_blank');
}
location.reload(); location.reload();
} else { } else {
alert("Error: " + data.message); alert("Error: " + data.message);