MIF_E31222467/pos-smartphone-fix/app/Http/Controllers/ExpenseController.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]);
}
}