get('cart'); // Validasi Keranjang (Backend validation) if (!$cart) { return redirect()->route('shop')->with('error', 'Keranjang kosong!'); } // Validasi Input User $request->validate([ 'alamat_pengiriman' => 'required|string|max:500', 'no_hp' => 'required|numeric', 'nama_lengkap' => 'required|string|max:255', ]); try { DB::beginTransaction(); $subtotal = $this->hitungSubtotal($cart); $ongkir = 10000; $total_bayar = $subtotal + $ongkir; $transaksi = Transaksi::create([ 'pembeli_id' => Auth::guard('pembeli')->id(), 'tanggal_transaksi' => now(), 'alamat_pengiriman' => $request->alamat_pengiriman, 'total_harga' => $total_bayar, 'status' => 'pending', 'kode_invoice' => 'INV/' . date('Ymd') . '/' . mt_rand(1000, 9999), 'catatan' => $request->catatan, ]); foreach ($cart as $id_produk => $details) { DetailTransaksi::create([ 'transaksi_id' => $transaksi->id, 'produk_id' => $id_produk, 'jumlah' => $details['quantity'], 'harga_satuan' => $details['price'], 'subtotal' => $details['price'] * $details['quantity'], ]); } DB::commit(); session()->forget('cart'); return redirect()->route('home')->with('success', 'Pesanan berhasil dibuat! Kode Invoice: ' . $transaksi->kode_invoice); } catch (\Exception $e) { DB::rollBack(); return redirect()->back()->with('error', 'Terjadi kesalahan saat memproses transaksi: ' . $e->getMessage()); } } /** * Helper untuk menghitung subtotal belanjaan dari session. */ private function hitungSubtotal($cart) { $total = 0; foreach($cart as $id => $details) { $total += $details['price'] * $details['quantity']; } return $total; } }