MIF_E31220480/app/Http/Controllers/ExpenseController.php

149 lines
4.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Expense;
use App\Models\Transaksi;
use App\Models\Finance;
class ExpenseController extends Controller
{
/**
* Menampilkan daftar pengeluaran.
*/
public function index(Request $request)
{
$query = Expense::query();
if ($request->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'
]);
}
}
}