139 lines
4.3 KiB
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.');
|
|
}
|
|
|
|
|
|
}
|