diff --git a/app/Http/Controllers/Admin/PesananBuketController.php b/app/Http/Controllers/Admin/PesananBuketController.php index f936950..111b3bc 100644 --- a/app/Http/Controllers/Admin/PesananBuketController.php +++ b/app/Http/Controllers/Admin/PesananBuketController.php @@ -4,6 +4,7 @@ use App\Http\Controllers\Controller; use App\Models\TransaksiBuket; +use App\Services\WhatsAppService; // Import Service use Illuminate\Http\Request; class PesananBuketController extends Controller @@ -19,61 +20,21 @@ public function index() public function updateStatus(Request $request, $id) { try { - $pesanan = \App\Models\TransaksiBuket::with(['pelanggan', 'buket'])->findOrFail($id); - if ($request->jenis === 'terima') { - $status = 'diterima'; - session()->flash('success', "Pesanan {$pesanan->no_invoice} telah diterima!"); - } 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!"); - } + $pesanan = TransaksiBuket::with(['pelanggan', 'buket'])->findOrFail($id); + $status = $request->jenis === 'terima' ? 'diterima' : ($request->jenis === 'selesai' ? 'selesai' : 'ditolak'); + $labels = [ + 'diterima' => 'telah diterima', + 'selesai' => 'berhasil diselesaikan', + 'ditolak' => 'telah ditolak' + ]; + $sessionKey = $status === 'ditolak' ? 'error' : 'success'; + $sessionMsg = "Pesanan {$pesanan->no_invoice} " . $labels[$status] . "!"; + session()->flash($sessionKey, $sessionMsg); $pesanan->update(['status_transaksi' => $status]); - $nama = $pesanan->pelanggan->nama; - $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; - $msg = null; - 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!"; - } elseif ($status === 'ditolak') { - $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."; - } - $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); - } + $waUrl = WhatsAppService::getBuketNotification($pesanan, $status); return response()->json([ 'success' => true, - 'wa_url' => $wa_url + 'wa_url' => $waUrl ]); } catch (\Exception $e) { return response()->json(['success' => false, 'message' => $e->getMessage()], 500); diff --git a/app/Http/Controllers/Admin/PesananFotoController.php b/app/Http/Controllers/Admin/PesananFotoController.php index 295d425..ff7bacc 100644 --- a/app/Http/Controllers/Admin/PesananFotoController.php +++ b/app/Http/Controllers/Admin/PesananFotoController.php @@ -4,6 +4,7 @@ use App\Http\Controllers\Controller; use App\Models\BookingFoto; +use App\Services\WhatsAppService; // Import Service use Illuminate\Http\Request; class PesananFotoController extends Controller @@ -24,72 +25,21 @@ public function index() public function updateStatus(Request $request, $id) { try { - $pesanan = \App\Models\BookingFoto::with(['pelanggan', 'paketFoto', 'detailAdditional.additional'])->findOrFail($id); - 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!"); - } + $pesanan = BookingFoto::with(['pelanggan', 'paketFoto', 'detailAdditional.additional'])->findOrFail($id); + $status = $request->jenis === 'terima' ? 'diterima' : ($request->jenis === 'selesai' ? 'selesai' : 'ditolak'); + $labels = [ + 'diterima' => 'telah diterima', + 'selesai' => 'berhasil diselesaikan', + 'ditolak' => 'telah ditolak' + ]; + $sessionKey = $status === 'ditolak' ? 'error' : 'success'; + $sessionMsg = "Booking {$pesanan->no_invoice} " . $labels[$status] . "!"; + session()->flash($sessionKey, $sessionMsg); $pesanan->update(['status_booking' => $status]); - $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 = \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; - $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"; - } - $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. "; - } - $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); - } + $waUrl = WhatsAppService::getFotoNotification($pesanan, $status); return response()->json([ 'success' => true, - 'wa_url' => $wa_url + 'wa_url' => $waUrl ]); } catch (\Exception $e) { return response()->json(['success' => false, 'message' => $e->getMessage()], 500);