input('start_date', Carbon::now()->startOfMonth()->format('Y-m-d')); $endDate = $request->input('end_date', Carbon::now()->endOfMonth()->format('Y-m-d')); $laporan = LaporanModel::whereBetween('Tanggal', [$startDate, $endDate]) ->orderBy('Tanggal', 'desc') ->get(); // Hitung total uang masuk (termasuk uang_masuk2-5) $totalUangMasuk = LaporanModel::whereBetween('Tanggal', [$startDate, $endDate]) ->selectRaw('SUM(uang_masuk) + COALESCE(SUM(uang_masuk2), 0) + COALESCE(SUM(uang_masuk3), 0) + COALESCE(SUM(uang_masuk4), 0) + COALESCE(SUM(uang_masuk5), 0) as total') ->value('total') ?? 0; // Hitung total uang keluar (termasuk uang_keluar2-5) $totalUangKeluar = LaporanModel::whereBetween('Tanggal', [$startDate, $endDate]) ->selectRaw('SUM(uang_keluar) + COALESCE(SUM(uang_keluar2), 0) + COALESCE(SUM(uang_keluar3), 0) + COALESCE(SUM(uang_keluar4), 0) + COALESCE(SUM(uang_keluar5), 0) as total') ->value('total') ?? 0; $totalKredit = $totalUangKeluar; $saldo = $totalUangMasuk - $totalKredit; return view('Laporan', compact('laporan', 'totalUangMasuk', 'totalUangKeluar', 'totalKredit', 'saldo', 'startDate', 'endDate')); } 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')); $laporan = LaporanModel::whereBetween('Tanggal', [$startDate, $endDate]) ->orderBy('Tanggal', 'desc') ->get(); $rows = []; $no = 1; $totalDebit = 0; $totalKredit = 0; foreach ($laporan as $item) { // Cek apakah semua nilai adalah debit $allDebit = true; $debitValues = [ $item->uang_masuk, $item->uang_masuk2, $item->uang_masuk3, $item->uang_masuk4, $item->uang_masuk5 ]; $validDebitValues = array_filter($debitValues, function($value) { return $value !== null && $value > 0; }); if ($item->uang_keluar > 0 || ($item->uang_keluar2 ?? 0) > 0 || ($item->uang_keluar3 ?? 0) > 0 || ($item->uang_keluar4 ?? 0) > 0 || ($item->uang_keluar5 ?? 0) > 0) { $allDebit = false; } // Proses data untuk setiap baris $rowDebit = 0; $rowKredit = 0; if ($allDebit) { $lastDebitValue = end($validDebitValues); $firstDebitValue = reset($validDebitValues); if (count($validDebitValues) > 1) { $rowDebit = $firstDebitValue; $rowKredit = $lastDebitValue; } else { $rowDebit = $firstDebitValue; $rowKredit = $firstDebitValue; } } else { $rowDebit = $item->uang_masuk + ($item->uang_masuk2 ?? 0) + ($item->uang_masuk3 ?? 0) + ($item->uang_masuk4 ?? 0) + ($item->uang_masuk5 ?? 0); $rowKredit = $item->uang_keluar + ($item->uang_keluar2 ?? 0) + ($item->uang_keluar3 ?? 0) + ($item->uang_keluar4 ?? 0) + ($item->uang_keluar5 ?? 0); } $totalDebit += $rowDebit; $totalKredit += $rowKredit; // Gabungkan semua kode akun $kodeAkun = $item->kode; if (!empty($item->kode2)) $kodeAkun .= "\n" . $item->kode2; if (!empty($item->kode3)) $kodeAkun .= "\n" . $item->kode3; if (!empty($item->kode4)) $kodeAkun .= "\n" . $item->kode4; if (!empty($item->kode5)) $kodeAkun .= "\n" . $item->kode5; // Gabungkan semua nama akun $namaAkun = $item->kategori; if (!empty($item->kategori2)) $namaAkun .= "\n" . $item->kategori2; if (!empty($item->kategori3)) $namaAkun .= "\n" . $item->kategori3; if (!empty($item->kategori4)) $namaAkun .= "\n" . $item->kategori4; if (!empty($item->kategori5)) $namaAkun .= "\n" . $item->kategori5; $rows[] = [ 'No' => $no++, 'Tanggal' => date('d/m/Y', strtotime($item->Tanggal)), 'Kode Akun' => $kodeAkun, 'Nama Akun' => $namaAkun, 'Keterangan' => $item->keterangan . ' ' . $item->nama_karyawan, 'Debit' => $rowDebit > 0 ? number_format($rowDebit, 0, ',', '.') : '-', 'Kredit' => $rowKredit > 0 ? number_format($rowKredit, 0, ',', '.') : '-' ]; } // Tambahkan baris total $rows[] = [ 'No' => '', 'Tanggal' => '', 'Kode Akun' => '', 'Nama Akun' => '', 'Keterangan' => 'Total', 'Debit' => number_format($totalDebit, 0, ',', '.'), 'Kredit' => number_format($totalKredit, 0, ',', '.') ]; $export = new class($rows) implements FromCollection, WithHeadings { protected $rows; public function __construct($rows) { $this->rows = $rows; } public function collection() { return collect($this->rows); } public function headings(): array { return ['No', 'Tanggal', 'Kode Akun', 'Nama Akun', 'Keterangan', 'Debit', 'Kredit']; } }; return Excel::download($export, 'jurnal-umum-'.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')); $laporan = LaporanModel::whereBetween('Tanggal', [$startDate, $endDate]) ->orderBy('Tanggal', 'desc') ->get(); $rows = ''; $no = 1; $totalDebit = 0; $totalKredit = 0; foreach ($laporan as $item) { // Cek apakah semua nilai adalah debit $allDebit = true; $debitValues = [ $item->uang_masuk, $item->uang_masuk2, $item->uang_masuk3, $item->uang_masuk4, $item->uang_masuk5 ]; $validDebitValues = array_filter($debitValues, function($value) { return $value !== null && $value > 0; }); if ($item->uang_keluar > 0 || ($item->uang_keluar2 ?? 0) > 0 || ($item->uang_keluar3 ?? 0) > 0 || ($item->uang_keluar4 ?? 0) > 0 || ($item->uang_keluar5 ?? 0) > 0) { $allDebit = false; } // Proses data untuk setiap baris $rowDebit = 0; $rowKredit = 0; if ($allDebit) { $lastDebitValue = end($validDebitValues); $firstDebitValue = reset($validDebitValues); if (count($validDebitValues) > 1) { $rowDebit = $firstDebitValue; $rowKredit = $lastDebitValue; } else { $rowDebit = $firstDebitValue; $rowKredit = $firstDebitValue; } } else { $rowDebit = $item->uang_masuk + ($item->uang_masuk2 ?? 0) + ($item->uang_masuk3 ?? 0) + ($item->uang_masuk4 ?? 0) + ($item->uang_masuk5 ?? 0); $rowKredit = $item->uang_keluar + ($item->uang_keluar2 ?? 0) + ($item->uang_keluar3 ?? 0) + ($item->uang_keluar4 ?? 0) + ($item->uang_keluar5 ?? 0); } $totalDebit += $rowDebit; $totalKredit += $rowKredit; // Gabungkan semua kode akun $kodeAkun = $item->kode; if (!empty($item->kode2)) $kodeAkun .= "
" . $item->kode2; if (!empty($item->kode3)) $kodeAkun .= "
" . $item->kode3; if (!empty($item->kode4)) $kodeAkun .= "
" . $item->kode4; if (!empty($item->kode5)) $kodeAkun .= "
" . $item->kode5; // Gabungkan semua nama akun $namaAkun = $item->kategori; if (!empty($item->kategori2)) $namaAkun .= "
" . $item->kategori2; if (!empty($item->kategori3)) $namaAkun .= "
" . $item->kategori3; if (!empty($item->kategori4)) $namaAkun .= "
" . $item->kategori4; if (!empty($item->kategori5)) $namaAkun .= "
" . $item->kategori5; $rows .= ''; $rows .= ''.$no++.''; $rows .= ''.date('d/m/Y', strtotime($item->Tanggal)).''; $rows .= ''.$kodeAkun.''; $rows .= ''.$namaAkun.''; $rows .= ''.$item->keterangan.' '.$item->nama_karyawan.''; $rows .= ''.($rowDebit > 0 ? number_format($rowDebit, 0, ',', '.') : '-').''; $rows .= ''.($rowKredit > 0 ? number_format($rowKredit, 0, ',', '.') : '-').''; $rows .= ''; } // Tambahkan baris total $rows .= ''; $rows .= 'Total'; $rows .= ''.number_format($totalDebit, 0, ',', '.').''; $rows .= ''.number_format($totalKredit, 0, ',', '.').''; $rows .= ''; $html = 'Jurnal Umum'; $html .= '

Jurnal Umum

'; $html .= '

Periode: '.date('d/m/Y', strtotime($startDate)).' - '.date('d/m/Y', strtotime($endDate)).'

'; $html .= ''; $html .= $rows; $html .= '
No Tanggal Kode Akun Nama Akun Keterangan Debit Kredit
'; $pdf = PDF::loadHTML($html); return $pdf->download('jurnal-umum-'.date('Y-m-d').'.pdf'); } catch (\Exception $e) { return redirect()->back()->with('error', 'Gagal mengekspor PDF: ' . $e->getMessage()); } } public function destroy($id) { try { $laporan = LaporanModel::findOrFail($id); $laporan->delete(); return response()->json(['success' => true, 'message' => 'Data berhasil dihapus']); } catch (\Exception $e) { return response()->json(['success' => false, 'message' => 'Gagal menghapus data: ' . $e->getMessage()], 500); } } }