149 lines
4.3 KiB
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'
|
|
]);
|
|
}
|
|
}
|
|
}
|