orderBy('created_at', 'ASC') ->get(); return view('admin.pesanan.buket', compact('pesanan')); } public function updateStatus(Request $request, $id) { try { // 1. Ambil data dengan relasi $pesanan = \App\Models\TransaksiBuket::with(['pelanggan', 'buket'])->findOrFail($id); // 2. Tentukan status & session flash sekaligus agar tidak dobel if ($request->jenis === 'terima') { $status = 'diterima'; session()->flash('success', "Pesanan {$pesanan->no_invoice} telah diterima!"); // Alert Hijau } elseif ($request->jenis === 'selesai') { $status = 'selesai'; session()->flash('success', "Pesanan {$pesanan->no_invoice} berhasil diselesaikan!"); } else { $status = 'ditolak'; session()->flash('error', "Pesanan {$pesanan->no_invoice} telah ditolak!"); // Alert Merah } // 3. Update database $pesanan->update(['status_transaksi' => $status]); // 4. Siapkan Data untuk Pesan WA $nama = $pesanan->pelanggan->nama; // Pastikan kolomnya 'nama', bukan 'nama_lengkap' $produk = $pesanan->buket->nama; $tgl_obj = \Carbon\Carbon::parse($pesanan->tgl_ambil)->locale('id'); $tanggal = $tgl_obj->translatedFormat('l, d F Y'); $waktu = $tgl_obj->format('H:i'); $total = number_format($pesanan->total_bayar, 0, ',', '.'); $req = $pesanan->request ?? '-'; $ucapan = $pesanan->ucapan ?? '-'; $invoice = $pesanan->no_invoice; // 5. Susun Pesan berdasarkan kondisi if ($status === 'diterima') { $msg = "Halo Kak *{$nama}*,\n\n" . "Pesanan Anda dengan Nomor Invoice: *{$invoice}* telah kami *TERIMA* dan masuk dalam daftar proses pengerjaan.\n\n" . "*Rincian Pesanan:*\n" . "- *Produk:* {$produk}\n" . "- *Total Bayar:* Rp {$total}\n" . "- *Request:* {$req}\n" . "- *Ucapan:* \"{$ucapan}\"\n" . "- *Waktu Pengambilan:* {$tanggal} pukul {$waktu} WIB\n\n" . "Mohon simpan rincian ini dan ditunggu info selanjutnya ya Kak. Terima kasih! ✨"; } else { $msg = "Halo Kak *{$nama}*,\n\n" . "Mengenai pesanan Anda dengan Nomor Invoice: *{$invoice}* terpaksa kami *TOLAK* dikarenakan:\n\n" . "*[TULIS ALASAN DI SINI]*\n\n" . "*Rincian Pesanan:*\n" . "- *Produk:* {$produk}\n" . "- *Total Bayar:* Rp {$total}\n" . "- *Waktu Pengambilan:* {$tanggal}\n\n" . "Admin kami akan segera menghubungi Kakak terkait proses pengembalian dana. Mohon maaf atas ketidaknyamanannya."; } // 6. Format Nomor WhatsApp $no_wa = preg_replace('/[^0-9]/', '', $pesanan->pelanggan->no_wa); // Pastikan kolomnya '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; } // 7. Kembalikan Response JSON return response()->json([ 'success' => true, 'wa_url' => "https://wa.me/{$no_wa}?text=" . urlencode($msg) ]); } catch (\Exception $e) { return response()->json(['success' => false, 'message' => $e->getMessage()], 500); } } }