NIM_E31220400/app/Http/Controllers/PengeluaranController.php

139 lines
4.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Pengeluaran;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Carbon;
class PengeluaranController extends Controller
{
public function index(Request $request)
{
$query = Pengeluaran::query();
// Proses filter
if ($request->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.');
}
}