144 lines
5.6 KiB
PHP
144 lines
5.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Expense;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Carbon\Carbon;
|
|
|
|
class ExpenseController extends Controller
|
|
{
|
|
// public function index()
|
|
// {
|
|
// // Ambil data pengeluaran dan urutkan berdasarkan waktu pembuatan (created_at) secara descending
|
|
// $expense = Expense::orderBy('id', 'desc')->get();
|
|
// return view('expense', compact('expense'));
|
|
// }
|
|
|
|
public function index(Request $request)
|
|
{
|
|
$bulan = now()->month;
|
|
$tahun = now()->year;
|
|
|
|
// Ambil semua data pengeluaran bulan dan tahun ini
|
|
$expense = Expense::whereYear('tanggal', $tahun)->whereMonth('tanggal', $bulan)->orderBy('tanggal', 'desc')->get();
|
|
|
|
$totalPengeluaranTahunIni = Expense::whereYear('tanggal', $tahun)->sum('total_pengeluaran');
|
|
|
|
$totalPengeluaranBulanIni = Expense::whereYear('tanggal', $tahun)->whereMonth('tanggal', $bulan)->sum('total_pengeluaran');
|
|
|
|
$bulanLalu = $bulan - 1 <= 0 ? 12 : $bulan - 1;
|
|
$tahunLalu = $bulan - 1 <= 0 ? $tahun - 1 : $tahun;
|
|
|
|
$totalPengeluaranBulanLalu = Expense::whereYear('tanggal', $tahunLalu)->whereMonth('tanggal', $bulanLalu)->sum('total_pengeluaran');
|
|
|
|
$jumlahTransaksiBulanIni = Expense::whereYear('tanggal', $tahun)->whereMonth('tanggal', $bulan)->count();
|
|
|
|
$rataRataPengeluaranBulanIni = $jumlahTransaksiBulanIni > 0 ? $totalPengeluaranBulanIni / $jumlahTransaksiBulanIni : 0;
|
|
|
|
$jumlahTransaksiBulanLalu = Expense::whereYear('tanggal', $tahunLalu)->whereMonth('tanggal', $bulanLalu)->count();
|
|
|
|
$rataRataPengeluaranBulanLalu = $jumlahTransaksiBulanLalu > 0 ? $totalPengeluaranBulanLalu / $jumlahTransaksiBulanLalu : 0;
|
|
|
|
$isPengeluaranTahunIniNaik = $totalPengeluaranTahunIni > $totalPengeluaranBulanLalu;
|
|
$isPengeluaranBulanIniNaik = $totalPengeluaranBulanIni > $totalPengeluaranBulanLalu;
|
|
$isRataRataPengeluaranNaik = $rataRataPengeluaranBulanIni > $rataRataPengeluaranBulanLalu;
|
|
|
|
// Selisih Pengeluaran Tahun Ini - Tahun Lalu
|
|
$selisihPengeluaranTahunIni = $totalPengeluaranTahunIni - $totalPengeluaranBulanLalu;
|
|
$isPengeluaranTahunIniNaik = $selisihPengeluaranTahunIni > 0;
|
|
|
|
// Selisih Pengeluaran Bulan Ini - Bulan Lalu
|
|
$selisihPengeluaranBulanIni = $totalPengeluaranBulanIni - $totalPengeluaranBulanLalu;
|
|
$isPengeluaranBulanIniNaik = $selisihPengeluaranBulanIni > 0;
|
|
|
|
// Selisih Rata-rata Pengeluaran Bulan Ini - Bulan Lalu
|
|
$selisihRataRataPengeluaran = $rataRataPengeluaranBulanIni - $rataRataPengeluaranBulanLalu;
|
|
$isRataRataPengeluaranNaik = $selisihRataRataPengeluaran > 0;
|
|
|
|
return view(
|
|
'expense',
|
|
compact(
|
|
'expense', // <--- Tambahkan ini!
|
|
'totalPengeluaranTahunIni',
|
|
'totalPengeluaranBulanIni',
|
|
'totalPengeluaranBulanLalu',
|
|
'rataRataPengeluaranBulanIni',
|
|
'rataRataPengeluaranBulanLalu',
|
|
'bulan',
|
|
'tahun',
|
|
'isPengeluaranTahunIniNaik',
|
|
'isPengeluaranBulanIniNaik',
|
|
'isRataRataPengeluaranNaik',
|
|
'selisihPengeluaranTahunIni',
|
|
'selisihPengeluaranBulanIni',
|
|
'selisihRataRataPengeluaran',
|
|
),
|
|
);
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
// Validasi input
|
|
$request->validate([
|
|
'nama_pengeluaran' => 'required|string|max:255',
|
|
'kategori_pengeluaran' => 'required|string',
|
|
'deskripsi_pengeluaran' => 'required|string',
|
|
'total_pengeluaran' => 'required|numeric',
|
|
'waktu' => 'required',
|
|
'tanggal' => 'required|date',
|
|
]);
|
|
|
|
// Simpan data ke database
|
|
Expense::create([
|
|
'nama_pengeluaran' => $request->nama_pengeluaran,
|
|
'kategori_pengeluaran' => $request->kategori_pengeluaran,
|
|
'deskripsi_pengeluaran' => $request->deskripsi_pengeluaran,
|
|
'total_pengeluaran' => $request->total_pengeluaran,
|
|
'waktu' => Carbon::parse($request->waktu)->format('H:i:s'),
|
|
'tanggal' => Carbon::parse($request->tanggal)->format('Y-m-d'),
|
|
]);
|
|
|
|
// Redirect kembali dengan pesan sukses
|
|
return redirect()->back()->with('success', 'Data pengeluaran berhasil ditambahkan!');
|
|
}
|
|
|
|
public function update(Request $request, $id)
|
|
{
|
|
// Validasi data yang masuk
|
|
$request->validate([
|
|
'nama_pengeluaran' => 'required|string|max:255',
|
|
'kategori_pengeluaran' => 'required|string',
|
|
'deskripsi_pengeluaran' => 'required|string',
|
|
'total_pengeluaran' => 'required|numeric',
|
|
'waktu' => 'required',
|
|
'tanggal' => 'required|date',
|
|
]);
|
|
|
|
// Temukan data pengeluaran berdasarkan ID
|
|
$expense = Expense::findOrFail($id);
|
|
|
|
// Perbarui data pengeluaran
|
|
$expense->update([
|
|
'nama_pengeluaran' => $request->nama_pengeluaran,
|
|
'kategori_pengeluaran' => $request->kategori_pengeluaran,
|
|
'deskripsi_pengeluaran' => $request->deskripsi_pengeluaran,
|
|
'total_pengeluaran' => $request->total_pengeluaran,
|
|
'waktu' => $request->waktu,
|
|
'tanggal' => $request->tanggal,
|
|
]);
|
|
|
|
// Redirect dengan pesan sukses
|
|
return redirect()->back()->with('success', 'Data pengeluaran berhasil diperbarui.');
|
|
}
|
|
|
|
public function destroy($id)
|
|
{
|
|
$expense = Expense::findOrFail($id);
|
|
$expense->delete();
|
|
|
|
return response()->json(['success' => true]);
|
|
}
|
|
}
|