120 lines
3.5 KiB
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'
|
|
]);
|
|
}
|
|
}
|