whereIn('status_booking', ['menunggu_verifikasi', 'diterima']) ->latest() ->get(); return view('admin.pesanan.foto', compact('pesanan')); } public function updateStatus(Request $request, $id) { try { // 1. Ambil data dengan relasi lengkap (Eager Loading) $pesanan = \App\Models\BookingFoto::with(['pelanggan', 'paketFoto', 'detailAdditional.additional'])->findOrFail($id); // 2. Tentukan status & session flash if ($request->jenis === 'terima') { $status = 'diterima'; session()->flash('success', "Booking {$pesanan->no_invoice} telah diterima!"); } elseif ($request->jenis === 'selesai') { $status = 'selesai'; session()->flash('success', "Booking {$pesanan->no_invoice} berhasil diselesaikan!"); } else { $status = 'ditolak'; session()->flash('error', "Booking {$pesanan->no_invoice} telah ditolak!"); } // 3. Update database (Pastikan nama kolom status_booking sesuai migrasimu) $pesanan->update(['status_booking' => $status]); // 4. Siapkan Data Dasar $nama = $pesanan->pelanggan->nama; $paket = $pesanan->paketFoto->nama; $tgl_obj = \Carbon\Carbon::parse($pesanan->tgl_booking)->locale('id'); $tanggal = $tgl_obj->translatedFormat('l, d F Y'); // Jam mulai dan selesai $jam_mulai = \Carbon\Carbon::parse($pesanan->jam_mulai)->format('H:i'); $jam_selesai = \Carbon\Carbon::parse($pesanan->jam_selesai)->format('H:i'); $total = number_format($pesanan->total_bayar, 0, ',', '.'); $invoice = $pesanan->no_invoice; // 5. Olah Data Additional untuk list di WA $list_additional = ""; if ($pesanan->detailAdditional->count() > 0) { foreach ($pesanan->detailAdditional as $item) { $list_additional .= "- " . $item->additional->nama . " (x" . $item->qty . ")\n"; } } else { $list_additional = "- Tidak ada additional\n"; } // 6. Susun Pesan WA $msg = null; if ($status === 'diterima') { $msg = "Halo Kak *{$nama}* ,\n\n" . "Booking foto Anda dengan Invoice: *{$invoice}* telah kami *TERIMA*. \n\n" . "*Rincian Booking:*\n" . "- *Paket:* {$paket}\n" . "*Additional:*\n{$list_additional}" . "- *Total Bayar:* Rp {$total}\n\n" . "*Jadwal Sesi Foto:*\n" . " Tanggal: {$tanggal}\n" . " Jam: {$jam_mulai} - {$jam_selesai} WIB\n\n" . "Mohon datang 15 menit sebelum jadwal dimulai ya Kak. Sampai jumpa di studio! "; } elseif ($status === 'ditolak') { $msg = "Halo Kak *{$nama}*,\n\n" . "Mohon maaf, booking foto Anda dengan Invoice *{$invoice}* terpaksa kami *TOLAK* dikarenakan:\n\n" . "*[TULIS ALASAN DI SINI]*\n\n" . "*Rincian Booking:*\n" . "- *Paket:* {$paket}\n" . "*Additional:*\n{$list_additional}" . "- *Total Bayar:* Rp {$total}\n" . "*Jadwal Sesi Foto:*\n" . " Tanggal: {$tanggal}\n" . " Jam: {$jam_mulai} - {$jam_selesai} WIB\n\n" . "Admin kami akan segera menghubungi Kakak untuk info pengembalian dana atau penjadwalan ulang. Terima kasih. "; } // 7. Format Nomor WhatsApp (Sesuaikan kolom: no_hp / no_wa) $wa_url = null; if ($msg) { $no_wa = preg_replace('/[^0-9]/', '', $pesanan->pelanggan->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); } return response()->json([ 'success' => true, 'wa_url' => $wa_url ]); } catch (\Exception $e) { return response()->json(['success' => false, 'message' => $e->getMessage()], 500); } } }