TIF_NGANJUK_E41212146/app/Http/Controllers/KeuanganController.php

133 lines
5.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Pendapatan;
use App\Models\Pengeluaran;
use Illuminate\Support\Facades\Log;
use Carbon\Carbon;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Support\Facades\Auth;
class KeuanganController extends Controller
{
public function indexKeuangan(Request $request)
{
try {
$bulan = $request->get('bulan', Carbon::now()->format('m'));
$tahun = $request->get('tahun', Carbon::now()->format('Y'));
if ($tahun == Carbon::now()->format('Y') && $bulan > Carbon::now()->format('m')) {
$bulan = Carbon::now()->format('m');
}
if ($tahun > Carbon::now()->format('Y')) {
$tahun = Carbon::now()->format('Y');
}
$namaBulan = Carbon::create()->month($bulan)->translatedFormat('F');
$pendapatan = Pendapatan::where('user_id', Auth::id())
->whereYear('tanggal_transaksi', $tahun)
->whereMonth('tanggal_transaksi', $bulan)
->orderBy('tanggal_transaksi', 'asc')
->get()
->map(function ($item) {
return [
'tanggal' => $item->tanggal_transaksi,
'keterangan' => $item->kategori,
'jumlah' => $item->jumlah * $item->harga_per_satuan,
'tipe' => 'pendapatan',
];
});
$pengeluaran = Pengeluaran::where('user_id', Auth::id())
->whereYear('tanggal_pembelian', $tahun)
->whereMonth('tanggal_pembelian', $bulan)
->orderBy('tanggal_pembelian', 'asc')
->get()
->map(function ($item) {
return [
'tanggal' => $item->tanggal_pembelian,
'keterangan' => $item->category . ' - ' . $item->description,
'jumlah' => $item->jumlah * $item->harga_per_satuan,
'tipe' => 'pengeluaran',
];
});
$transaksi = collect($pendapatan)->merge($pengeluaran)->sortBy('tanggal');
$totalPendapatan = $pendapatan->sum('jumlah');
$totalPengeluaran = $pengeluaran->sum('jumlah');
$labaBersih = $totalPendapatan - $totalPengeluaran;
$totalPendapatanHarian = $transaksi->filter(fn($trx) => $trx['tipe'] === 'pendapatan')->sum('jumlah');
$totalPengeluaranHarian = $transaksi->filter(fn($trx) => $trx['tipe'] === 'pengeluaran')->sum('jumlah');
$totalSaldoHarian = $totalPendapatanHarian - $totalPengeluaranHarian;
return view('finance-management', compact(
'transaksi',
'totalPendapatan',
'totalPengeluaran',
'labaBersih',
'bulan',
'tahun',
'namaBulan',
'totalPendapatanHarian',
'totalPengeluaranHarian',
'totalSaldoHarian'
));
} catch (\Exception $e) {
Log::error('Gagal memuat laporan keuangan: ' . $e->getMessage());
return redirect()->route('finance-management')->with([
'status' => 'error',
'message' => 'Terjadi kesalahan saat memuat laporan keuangan.',
]);
}
}
public function exportPDF(Request $request)
{
$bulan = $request->get('bulan', Carbon::now()->format('m'));
$tahun = $request->get('tahun', Carbon::now()->format('Y'));
$namaBulan = Carbon::create()->month($bulan)->translatedFormat('F');
$userId = Auth::id(); // Simpan user ID dalam variabel agar konsisten
$pendapatan = Pendapatan::where('user_id', $userId)
->whereYear('tanggal_transaksi', $tahun)
->whereMonth('tanggal_transaksi', $bulan)
->orderBy('tanggal_transaksi', 'asc')
->get()
->map(fn($item) => [
'tanggal' => $item->tanggal_transaksi,
'keterangan' => $item->kategori,
'jumlah' => $item->jumlah * $item->harga_per_satuan,
'tipe' => 'pendapatan',
]);
$pengeluaran = Pengeluaran::where('user_id', $userId) // Tambahkan filter user_id di sini
->whereYear('tanggal_pembelian', $tahun)
->whereMonth('tanggal_pembelian', $bulan)
->orderBy('tanggal_pembelian', 'asc')
->get()
->map(fn($item) => [
'tanggal' => $item->tanggal_pembelian,
'keterangan' => $item->category . ' - ' . $item->description,
'jumlah' => $item->jumlah * $item->harga_per_satuan,
'tipe' => 'pengeluaran',
]);
$transaksi = collect($pendapatan)->merge($pengeluaran)->sortBy('tanggal');
$totalPendapatan = $pendapatan->sum('jumlah');
$totalPengeluaran = $pengeluaran->sum('jumlah');
$totalSaldo = $totalPendapatan - $totalPengeluaran;
// Tambahkan nama user ke dalam view untuk ditampilkan dalam PDF
$user = Auth::user();
$pdf = Pdf::loadView('cetak.laporan-keuangan', compact(
'transaksi', 'totalPendapatan', 'totalPengeluaran', 'totalSaldo', 'namaBulan', 'tahun', 'user'
));
return $pdf->download("Laporan-Keuangan-{$user->name}-{$namaBulan}-{$tahun}.pdf");
}
}