133 lines
5.3 KiB
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");
|
|
}
|
|
} |