MIF_E31220480/app/Http/Controllers/ExpenseController.php

120 lines
3.5 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|numeric|min:0',
'tanggal_pengeluaran'=> 'required|date',
]);
Expense::create($request->only(['keterangan', 'jumlah_pengeluaran', 'tanggal_pengeluaran']));
// Update data keuangan
$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|numeric|min:0',
'tanggal_pengeluaran'=> 'required|date',
]);
$pengeluaran = Expense::findOrFail($id_pengeluaran);
$pengeluaran->update($request->only(['keterangan', 'jumlah_pengeluaran', 'tanggal_pengeluaran']));
// Update data keuangan
$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()
{
$totalPemasukan = Transaksi::sum('jumlah_pembayaran');
$totalPengeluaran = Expense::sum('jumlah_pengeluaran');
$totalKeuntungan = $totalPemasukan - $totalPengeluaran;
Finance::create([
'tanggal' => now()->format('Y-m-d'),
'pemasukan' => $totalPemasukan,
'pengeluaran' => $totalPengeluaran,
'keuntungan' => $totalKeuntungan,
'keterangan' => 'Update otomatis dari data pengeluaran'
]);
}
}