input('start_date', Carbon::now()->startOfMonth()->format('Y-m-d')); $endDate = $request->input('end_date', Carbon::now()->endOfMonth()->format('Y-m-d')); // Inisialisasi array untuk menyimpan data $pendapatan = []; $beban = []; try { // Ambil semua transaksi dalam periode $transaksis = DB::table('laporan_transaksis') ->whereBetween('Tanggal', [$startDate, $endDate]) ->get(); foreach ($transaksis as $transaksi) { // Proses kategori1 if (!empty($transaksi->kategori)) { $this->prosesKategori( $transaksi->kategori, $transaksi->uang_masuk ?? 0, $transaksi->uang_keluar ?? 0, $pendapatan, $beban ); } // Proses kategori2-5 for ($i = 2; $i <= 5; $i++) { $kategori = $transaksi->{"kategori$i"}; if (!empty($kategori)) { $this->prosesKategori( $kategori, $transaksi->{"uang_masuk$i"} ?? 0, $transaksi->{"uang_keluar$i"} ?? 0, $pendapatan, $beban ); } } } // Hitung total $total_pendapatan = array_sum(array_column($pendapatan, 'nominal')); $total_beban = abs(array_sum(array_column($beban, 'nominal'))); $laba_rugi = $total_pendapatan - $total_beban; return view('Labarugi', [ 'startDate' => $startDate, 'endDate' => $endDate, 'pendapatan' => $pendapatan, 'beban' => $beban, 'total_pendapatan' => $total_pendapatan, 'total_beban' => $total_beban, 'laba_rugi' => $laba_rugi ]); } catch (\Exception $e) { Log::error("Error in LabarugiController: " . $e->getMessage()); throw $e; } } private function prosesKategori($kategori, $uang_masuk, $uang_keluar, &$pendapatan, &$beban) { $kodeAkun = $this->getKodeAkun($kategori); if ($kodeAkun) { $nominal = $uang_masuk - $uang_keluar; $data = [ 'kategori' => $kategori, 'kode_akun' => $kodeAkun, 'nominal' => $nominal ]; if (str_starts_with($kodeAkun, '24')) { if (isset($pendapatan[$kategori])) { $pendapatan[$kategori]['nominal'] += $nominal; } else { $pendapatan[$kategori] = $data; } } elseif (str_starts_with($kodeAkun, '25')) { if (isset($beban[$kategori])) { $beban[$kategori]['nominal'] += $nominal; } else { $beban[$kategori] = $data; } } } } public function filter(Request $request) { return $this->index($request); } public function exportExcel(Request $request) { try { $startDate = $request->input('start_date', Carbon::now()->startOfMonth()->format('Y-m-d')); $endDate = $request->input('end_date', Carbon::now()->endOfMonth()->format('Y-m-d')); // Inisialisasi array untuk menyimpan data $pendapatan = []; $beban = []; // Ambil semua transaksi dalam periode $transaksis = DB::table('laporan_transaksis') ->whereBetween('Tanggal', [$startDate, $endDate]) ->get(); foreach ($transaksis as $transaksi) { // Proses kategori1 if (!empty($transaksi->kategori)) { $this->prosesKategori( $transaksi->kategori, $transaksi->uang_masuk ?? 0, $transaksi->uang_keluar ?? 0, $pendapatan, $beban ); } // Proses kategori2-5 for ($i = 2; $i <= 5; $i++) { $kategori = $transaksi->{"kategori$i"}; if (!empty($kategori)) { $this->prosesKategori( $kategori, $transaksi->{"uang_masuk$i"} ?? 0, $transaksi->{"uang_keluar$i"} ?? 0, $pendapatan, $beban ); } } } // Hitung total $total_pendapatan = array_sum(array_column($pendapatan, 'nominal')); $total_beban = abs(array_sum(array_column($beban, 'nominal'))); $laba_rugi = $total_pendapatan - $total_beban; // Siapkan data untuk Excel $rows = []; // Header $rows[] = ['Laporan Laba Rugi']; $rows[] = ['Periode: ' . date('F Y', strtotime($startDate))]; $rows[] = []; // Baris kosong // Pendapatan $rows[] = ['Pendapatan']; foreach ($pendapatan as $item) { $rows[] = [ ucwords($item['kategori']), number_format(abs($item['nominal']), 0, ',', '.') ]; } $rows[] = ['Total Pendapatan', number_format(abs($total_pendapatan), 0, ',', '.')]; $rows[] = []; // Baris kosong // Beban $rows[] = ['Beban']; foreach ($beban as $item) { $rows[] = [ ucwords($item['kategori']), number_format(abs($item['nominal']), 0, ',', '.') ]; } $rows[] = ['Total Beban', number_format($total_beban, 0, ',', '.')]; $rows[] = []; // Baris kosong // Laba/Rugi $rows[] = ['Laba/Rugi Bersih', number_format($laba_rugi, 0, ',', '.')]; $export = new class($rows) implements \Maatwebsite\Excel\Concerns\FromArray { protected $rows; public function __construct($rows) { $this->rows = $rows; } public function array(): array { return $this->rows; } }; return \Maatwebsite\Excel\Facades\Excel::download($export, 'laporan-laba-rugi-'.date('Y-m-d').'.xlsx'); } catch (\Exception $e) { return redirect()->back()->with('error', 'Gagal mengekspor Excel: ' . $e->getMessage()); } } public function exportPDF(Request $request) { try { $startDate = $request->input('start_date', Carbon::now()->startOfMonth()->format('Y-m-d')); $endDate = $request->input('end_date', Carbon::now()->endOfMonth()->format('Y-m-d')); // Inisialisasi array untuk menyimpan data $pendapatan = []; $beban = []; // Ambil semua transaksi dalam periode $transaksis = DB::table('laporan_transaksis') ->whereBetween('Tanggal', [$startDate, $endDate]) ->get(); foreach ($transaksis as $transaksi) { // Proses kategori1 if (!empty($transaksi->kategori)) { $this->prosesKategori( $transaksi->kategori, $transaksi->uang_masuk ?? 0, $transaksi->uang_keluar ?? 0, $pendapatan, $beban ); } // Proses kategori2-5 for ($i = 2; $i <= 5; $i++) { $kategori = $transaksi->{"kategori$i"}; if (!empty($kategori)) { $this->prosesKategori( $kategori, $transaksi->{"uang_masuk$i"} ?? 0, $transaksi->{"uang_keluar$i"} ?? 0, $pendapatan, $beban ); } } } // Hitung total $total_pendapatan = array_sum(array_column($pendapatan, 'nominal')); $total_beban = abs(array_sum(array_column($beban, 'nominal'))); $laba_rugi = $total_pendapatan - $total_beban; $html = '
Periode: ' . date('F Y', strtotime($startDate)) . '
'; $html .= 'Keterangan | Nominal |
---|---|
Pendapatan | |
' . ucwords($item['kategori']) . ' | '; $html .= '' . number_format(abs($item['nominal']), 0, ',', '.') . ' | '; $html .= '
Total Pendapatan | ' . number_format(abs($total_pendapatan), 0, ',', '.') . ' |
Beban | |
' . ucwords($item['kategori']) . ' | '; $html .= '' . number_format(abs($item['nominal']), 0, ',', '.') . ' | '; $html .= '
Total Beban | ' . number_format($total_beban, 0, ',', '.') . ' |
Laba/Rugi Bersih | '; if ($laba_rugi < 0) { $html .= '-Rp ' . number_format(abs($laba_rugi), 0, ',', '.'); } else { $html .= 'Rp ' . number_format($laba_rugi, 0, ',', '.'); } $html .= ' |