has('search')) { $search = $request->search; $query->where('keterangan', 'LIKE', "%$search%") ->orWhere('jumlah_pengeluaran', 'LIKE', "%$search%") ->orWhere('tanggal_pengeluaran', 'LIKE', "%$search%"); } // Mengambil semua data pengeluaran $pengeluaran = $query->orderBy('tanggal_pengeluaran', 'desc')->get(); return view('admin.expense', compact('pengeluaran')); } /** * Menampilkan form untuk menambahkan pengeluaran baru. */ public function create() { return view('admin.createexpense'); } /** * Menyimpan data pengeluaran baru ke database. */ public function store(Request $request) { $request->validate([ 'keterangan' => 'required|string|max:255', 'jumlah_pengeluaran' => 'required', 'tanggal_pengeluaran'=> 'required|date', ]); // Hilangkan titik/koma agar jumlah valid $jumlah = str_replace(['.', ','], '', $request->jumlah_pengeluaran); Expense::create([ 'keterangan' => $request->keterangan, 'jumlah_pengeluaran' => $jumlah, 'tanggal_pengeluaran' => $request->tanggal_pengeluaran, ]); $this->updateFinance(); return redirect()->route('admin.expense')->with('success', 'Pengeluaran berhasil ditambahkan.'); } /** * Menampilkan form untuk mengedit pengeluaran. */ public function edit($id_pengeluaran) { $pengeluaran = Expense::findOrFail($id_pengeluaran); return view('admin.editexpense', compact('pengeluaran')); } /** * Memperbarui data pengeluaran di database. */ public function update(Request $request, $id_pengeluaran) { $request->validate([ 'keterangan' => 'required|string|max:255', 'jumlah_pengeluaran' => 'required', 'tanggal_pengeluaran'=> 'required|date', ]); $pengeluaran = Expense::findOrFail($id_pengeluaran); // Hilangkan titik/koma dari input user $jumlah = str_replace(['.', ','], '', $request->jumlah_pengeluaran); $pengeluaran->update([ 'keterangan' => $request->keterangan, 'jumlah_pengeluaran' => $jumlah, 'tanggal_pengeluaran' => $request->tanggal_pengeluaran, ]); $this->updateFinance(); return redirect()->route('admin.expense')->with('success', 'Pengeluaran berhasil diperbarui.'); } /** * Menghapus data pengeluaran dari database. */ public function destroy($id_pengeluaran) { $pengeluaran = Expense::findOrFail($id_pengeluaran); $pengeluaran->delete(); // Update data keuangan $this->updateFinance(); return redirect()->route('admin.expense')->with('success', 'Pengeluaran berhasil dihapus.'); } /** * Fungsi untuk memperbarui data keuangan di tabel Finance. */ private function updateFinance() { $tanggalHariIni = now()->format('Y-m-d'); $totalPemasukan = Transaksi::sum('jumlah_pembayaran'); $totalPengeluaran = Expense::sum('jumlah_pengeluaran'); $totalKeuntungan = $totalPemasukan - $totalPengeluaran; // Cek apakah sudah ada data finance untuk hari ini $finance = Finance::where('tanggal', $tanggalHariIni)->first(); if ($finance) { // Update data yang sudah ada $finance->update([ 'pemasukan' => $totalPemasukan, 'pengeluaran' => $totalPengeluaran, 'keuntungan' => $totalKeuntungan, 'keterangan' => 'Update otomatis dari data pengeluaran' ]); } else { // Buat data baru Finance::create([ 'tanggal' => $tanggalHariIni, 'pemasukan' => $totalPemasukan, 'pengeluaran' => $totalPengeluaran, 'keuntungan' => $totalKeuntungan, 'keterangan' => 'Update otomatis dari data pengeluaran' ]); } } }