MIF_E31220480/app/Http/Controllers/LaporanController.php

72 lines
2.6 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Models\Keuangan;
use Carbon\Carbon;
class LaporanController extends Controller
{
public function index(Request $request)
{
// Ambil daftar tahun dan bulan yang tersedia di database
$years = Keuangan::selectRaw('YEAR(tanggal_pembayaran) as tahun')->distinct()->orderBy('tahun', 'desc')->pluck('tahun');
$months = [
1 => 'Januari', 2 => 'Februari', 3 => 'Maret', 4 => 'April',
5 => 'Mei', 6 => 'Juni', 7 => 'Juli', 8 => 'Agustus',
9 => 'September', 10 => 'Oktober', 11 => 'November', 12 => 'Desember'
];
// Ambil filter dari request
$tahun = $request->input('tahun', date('Y'));
$bulan = $request->input('bulan', '');
// Query laporan keuangan utama
$query = Keuangan::selectRaw(
'YEAR(tanggal_pembayaran) as tahun, MONTH(tanggal_pembayaran) as bulan,
SUM(jumlah_pembayaran) as total_pemasukan,
(SELECT SUM(jumlah_pengeluaran)
FROM pengeluaran
WHERE YEAR(tanggal_pengeluaran) = YEAR(tanggal_pembayaran)
AND MONTH(tanggal_pengeluaran) = MONTH(tanggal_pembayaran)
) as total_pengeluaran,
(SUM(jumlah_pembayaran) - COALESCE((SELECT SUM(jumlah_pengeluaran)
FROM pengeluaran
WHERE YEAR(tanggal_pengeluaran) = YEAR(tanggal_pembayaran)
AND MONTH(tanggal_pengeluaran) = MONTH(tanggal_pembayaran)), 0)
) as keuntungan_bersih'
)
->where('status_transaksi', 'Lunas')
->whereYear('tanggal_pembayaran', $tahun)
->groupBy('tahun', 'bulan')
->orderBy('tahun', 'desc')
->orderBy('bulan', 'desc');
if ($bulan) {
$query->whereMonth('dibuat_pada', $bulan);
}
$filteredLaporan = $query->get();
// Ambil detail pemasukan
$detailPemasukan = Keuangan::whereYear('tanggal_pembayaran', $tahun)
->where('status_transaksi', 'Lunas')
->when($bulan, fn($q) => $q->whereMonth('tanggal_pembayaran', $bulan))
->orderBy('tanggal_pembayaran', 'desc')
->get();
$detailPengeluaran = DB::table('pengeluaran')
->whereYear('tanggal_pengeluaran', $tahun)
->when($bulan, fn($q) => $q->whereMonth('tanggal_pengeluaran', $bulan))
->orderBy('tanggal_pengeluaran', 'desc')
->get();
return view('pemilik.laporan', compact('years', 'months', 'filteredLaporan', 'detailPemasukan', 'detailPengeluaran'));
}
}