filled('keyword')) { $search = $request->keyword; $query->where(function ($q) use ($search) { $q->where('nama', 'like', '%' . $search . '%') ->orWhere('deskripsi', 'like', '%' . $search . '%'); }); } if ($request->filled('kategori') && $request->kategori != '') { $query->where('kategori', $request->kategori); } if ($request->filled('min_price')) $query->where('harga', '>=', $request->min_price); if ($request->filled('max_price')) $query->where('harga', '<=', $request->max_price); if ($request->filled('ukuran')) $query->where('ukuran', $request->ukuran); $buket = $query->paginate(8)->withQueryString(); if ($request->ajax()) { return view('user.components._list', compact('buket'))->render(); } return view('user/pesan-buket', compact('buket')); } public function detail($slug_id) { $buket = Buket::findOrFail($slug_id); return view('user/detail-buket', compact('buket')); } public function formulir($slug_id) { $buket = Buket::findOrFail($slug_id); return view('user/pembayaran-buket', compact('buket')); } public function store(PesanBuketRequest $request) { $buket = Buket::findOrFail($request->id_buket); try { DB::beginTransaction(); $pelanggan = Pelanggan::create($request->only([ 'nama', 'no_wa' ])); $pathBukti = null; if ($request->hasFile('bukti_bayar')) { $file = $request->file('bukti_bayar'); $namaFile = 'bukti_' . time() . '.' . $file->getClientOriginalExtension(); $pathBukti = $file->storeAs( 'img/payment/buket', $namaFile, 'public' ); } $transaksi = TransaksiBuket::create([ 'id_pelanggan' => $pelanggan->id_pelanggan, 'id_buket' => $request->id_buket, 'tgl_ambil' => $request->tgl_ambil . ' ' . $request->waktu_ambil, 'request' => $request->request_khusus, 'ucapan' => $request->ucapan, 'bukti_bayar' => $pathBukti, 'status_transaksi' => 'menunggu_verifikasi', 'total_bayar' => $buket->harga, 'no_invoice' => 'INV-BUKET-' . strtoupper(Str::random(6)), ]); DB::commit(); $urlWA = WhatsAppService::getPesananBuketMessage( $transaksi, $pelanggan ); return redirect()->route('pesan.buket')->with([ 'success' => 'Pesanan Berhasil Dibuat!', 'waUrl' => $urlWA ]); } catch (\Exception $e) { DB::rollBack(); return back()->with('error', 'Terjadi kesalahan: ' . $e->getMessage()); } } }