has('filter')) { $filter = $request->filter; if ($filter === 'hari') { $query->whereDate('tanggal', now()); } elseif ($filter === 'minggu') { $query->whereBetween('tanggal', [now()->startOfWeek(), now()->endOfWeek()]); } elseif ($filter === 'bulan') { $query->whereMonth('tanggal', now()->month) ->whereYear('tanggal', now()->year); } elseif ($filter === 'tahun') { $query->whereYear('tanggal', now()->year); } } $pengeluarans = $query->orderBy('tanggal', 'desc')->paginate(10); // Hitung total $total = $query->get()->reduce(function ($carry, $item) { if ($item->kategori === 'uang') { return $carry + $item->jumlah; } elseif ($item->kategori === 'barang' && $item->quantity && $item->harga) { return $carry + ($item->quantity * $item->harga); } return $carry; }, 0); return view('transaksi.pengeluaran.index', compact('pengeluarans', 'total')); } public function create() { return view('transaksi.pengeluaran.create'); } public function store(Request $request) { $request->validate([ 'tanggal' => 'required|date', 'kategori' => 'required', 'nama' => 'required', 'jumlah' => 'required|numeric', 'harga' => 'nullable|numeric', 'quantity' => 'nullable|integer', 'keterangan' => 'nullable|string', 'bukti' => 'nullable|image|mimes:jpg,jpeg,png,gif,svg|max:2048', ]); $data = $request->only(['tanggal', 'kategori', 'nama', 'jumlah', 'harga', 'quantity', 'keterangan']); if ($request->hasFile('bukti')) { $file = $request->file('bukti'); $filename = time() . '_' . $file->getClientOriginalName(); $file->storeAs('public/bukti_pengeluaran', $filename); $data['bukti'] = $filename; // DEBUG CEK \Log::info('File bukti disimpan: ' . $filename); } else { // DEBUG CEK \Log::warning('TIDAK ADA FILE BUKTI DIUPLOAD'); } Pengeluaran::create($data); return redirect()->route('pengeluaran.index')->with('success', 'Data berhasil disimpan.'); } public function edit(Pengeluaran $pengeluaran) { return view('transaksi.pengeluaran.edit', compact('pengeluaran')); } public function update(Request $request, Pengeluaran $pengeluaran) { $request->validate([ 'tanggal' => 'required|date', 'kategori' => 'required|string', 'nama' => 'required|string|max:255', 'jumlah' => 'required|numeric', 'quantity' => 'nullable|numeric', 'harga' => 'nullable|numeric', 'keterangan' => 'nullable|string|max:255', 'bukti' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', ]); $data = $request->all(); if ($request->kategori !== 'barang') { $data['quantity'] = null; $data['harga'] = 0; } else { $data['jumlah'] = $request->quantity * $request->harga; } // Simpan gambar baru jika ada if ($request->hasFile('bukti')) { $file = $request->file('bukti'); $filename = time() . '_' . $file->getClientOriginalName(); $file->storeAs('public/bukti_pengeluaran', $filename); $data['bukti'] = $filename; // Simpan hanya nama file ke database } $pengeluaran->update($data); return redirect()->route('pengeluaran.index')->with('success', 'Data berhasil diperbarui.'); } public function destroy(Pengeluaran $pengeluaran) { if ($pengeluaran->bukti && Storage::exists('public/bukti_pengeluaran/' . $pengeluaran->bukti)) { Storage::delete('public/bukti_pengeluaran/' . $pengeluaran->bukti); } $pengeluaran->delete(); return redirect()->route('pengeluaran.index')->with('success', 'Data berhasil dihapus.'); } }