72 lines
2.6 KiB
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'));
|
|
}
|
|
}
|