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 .= '
Periode: '.date('d/m/Y', strtotime($startDate)).' - '.date('d/m/Y', strtotime($endDate)).'
'; $html .= 'No | Tanggal | Kode Akun | Nama Akun | Keterangan | Debit | Kredit |
---|