From dbc6d467aae156269d4c2f6cc92e60c4ca832f94 Mon Sep 17 00:00:00 2001 From: whywdd Date: Tue, 22 Apr 2025 00:26:27 +0700 Subject: [PATCH] update tgl 22 april --- app/Http/Controllers/HomeController.php | 38 +++--- .../Controllers/NeracasaldoController.php | 121 +++++++++--------- app/Http/Controllers/RekeningController.php | 67 ++++++---- resources/views/Neracasaldo.blade.php | 43 +++---- resources/views/Rekening.blade.php | 97 +++++++++++++- 5 files changed, 229 insertions(+), 137 deletions(-) diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index b80275d..8cda5ed 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -140,7 +140,7 @@ public function index(Request $request) $lastMonthTransaksis = DB::table('laporan_transaksis') ->whereBetween('Tanggal', [$lastMonthStart, $lastMonthEnd]) - ->get(); + ->get(); $lastMonthUangMasuk = 0; $lastMonthUangKeluar = 0; @@ -185,22 +185,22 @@ public function index(Request $request) }) )->values(); - // Get monthly totals for chart - $monthlyTotals = DB::table('laporan_transaksis') - ->select( - DB::raw('DATE_FORMAT(Tanggal, "%Y-%m") as periode'), + // Get monthly totals for chart + $monthlyTotals = DB::table('laporan_transaksis') + ->select( + DB::raw('DATE_FORMAT(Tanggal, "%Y-%m") as periode'), DB::raw('SUM(uang_masuk) + SUM(COALESCE(uang_masuk2, 0)) + SUM(COALESCE(uang_masuk3, 0)) + SUM(COALESCE(uang_masuk4, 0)) + SUM(COALESCE(uang_masuk5, 0)) as total_debit'), DB::raw('SUM(uang_keluar) + SUM(COALESCE(uang_keluar2, 0)) + SUM(COALESCE(uang_keluar3, 0)) + SUM(COALESCE(uang_keluar4, 0)) + SUM(COALESCE(uang_keluar5, 0)) as total_kredit') - ) - ->groupBy('periode') - ->orderBy('periode') - ->get(); + ) + ->groupBy('periode') + ->orderBy('periode') + ->get(); - // Get recent transactions - $recentTransactions = DB::table('laporan_transaksis') - ->orderBy('Tanggal', 'desc') - ->limit(10) - ->get(); + // Get recent transactions + $recentTransactions = DB::table('laporan_transaksis') + ->orderBy('Tanggal', 'desc') + ->limit(10) + ->get(); // Debug log untuk memeriksa nilai Log::info("Total Uang Masuk: " . $totalUangMasuk); @@ -209,19 +209,19 @@ public function index(Request $request) Log::info("Laba Rugi Total: " . $labaRugiTotal); Log::info("Laba Rugi Bulan Ini: " . $labaRugiBulanIni); - return view('home', compact( + return view('home', compact( 'startDate', 'endDate', - 'totalUangMasuk', - 'totalUangKeluar', + 'totalUangMasuk', + 'totalUangKeluar', 'currentMonthUangMasuk', 'currentMonthUangKeluar', 'totalSaldo', 'growthPercentage', 'labaRugiTotal', 'labaRugiBulanIni', - 'monthlyTotals', - 'categoryTotals', + 'monthlyTotals', + 'categoryTotals', 'recentTransactions', 'pendapatan', 'beban' diff --git a/app/Http/Controllers/NeracasaldoController.php b/app/Http/Controllers/NeracasaldoController.php index 47a0e95..20bb865 100644 --- a/app/Http/Controllers/NeracasaldoController.php +++ b/app/Http/Controllers/NeracasaldoController.php @@ -10,77 +10,70 @@ class NeracasaldoController extends Controller public function index() { $rawTransaksis = NeracasaldoModel::orderBy('kode', 'asc')->get(); - $transaksis = collect(); + $totalsPerAkun = []; foreach ($rawTransaksis as $transaksi) { - // Menambahkan baris untuk kode utama - if ($transaksi->kode) { - $transaksis->push([ - 'kode' => $transaksi->kode, - 'kategori' => $transaksi->kategori, - 'keterangan' => $transaksi->keterangan, - 'nama_karyawan' => $transaksi->nama_karyawan, - 'debit' => $transaksi->uang_masuk, - 'kredit' => $transaksi->uang_keluar, - 'id' => $transaksi->id - ]); - } + // Fungsi untuk menambahkan atau memperbarui total per akun + $processAkun = function($kode, $kategori, $debit, $kredit) use (&$totalsPerAkun) { + if (!empty($kode) && !empty($kategori)) { + if (!isset($totalsPerAkun[$kategori])) { + $totalsPerAkun[$kategori] = [ + 'kode' => $kode, + 'kategori' => $kategori, + 'debit' => 0, + 'kredit' => 0 + ]; + } + $totalsPerAkun[$kategori]['debit'] += floatval($debit ?? 0); + $totalsPerAkun[$kategori]['kredit'] += floatval($kredit ?? 0); + } + }; - // Menambahkan baris untuk kode2 - if ($transaksi->kode2) { - $transaksis->push([ - 'kode' => $transaksi->kode2, - 'kategori' => $transaksi->kategori2, - 'keterangan' => $transaksi->keterangan, - 'nama_karyawan' => $transaksi->nama_karyawan, - 'debit' => $transaksi->uang_masuk2, - 'kredit' => $transaksi->uang_keluar2, - 'id' => $transaksi->id - ]); - } + // Proses untuk semua kategori + $processAkun($transaksi->kode, $transaksi->kategori, $transaksi->uang_masuk, $transaksi->uang_keluar); + $processAkun($transaksi->kode2, $transaksi->kategori2, $transaksi->uang_masuk2, $transaksi->uang_keluar2); + $processAkun($transaksi->kode3, $transaksi->kategori3, $transaksi->uang_masuk3, $transaksi->uang_keluar3); + $processAkun($transaksi->kode4, $transaksi->kategori4, $transaksi->uang_masuk4, $transaksi->uang_keluar4); + $processAkun($transaksi->kode5, $transaksi->kategori5, $transaksi->uang_masuk5, $transaksi->uang_keluar5); + } - // Menambahkan baris untuk kode3 - if ($transaksi->kode3) { - $transaksis->push([ - 'kode' => $transaksi->kode3, - 'kategori' => $transaksi->kategori3, - 'keterangan' => $transaksi->keterangan, - 'nama_karyawan' => $transaksi->nama_karyawan, - 'debit' => $transaksi->uang_masuk3, - 'kredit' => $transaksi->uang_keluar3, - 'id' => $transaksi->id - ]); - } - - // Menambahkan baris untuk kode4 - if ($transaksi->kode4) { - $transaksis->push([ - 'kode' => $transaksi->kode4, - 'kategori' => $transaksi->kategori4, - 'keterangan' => $transaksi->keterangan, - 'nama_karyawan' => $transaksi->nama_karyawan, - 'debit' => $transaksi->uang_masuk4, - 'kredit' => $transaksi->uang_keluar4, - 'id' => $transaksi->id - ]); - } - - // Menambahkan baris untuk kode5 - if ($transaksi->kode5) { - $transaksis->push([ - 'kode' => $transaksi->kode5, - 'kategori' => $transaksi->kategori5, - 'keterangan' => $transaksi->keterangan, - 'nama_karyawan' => $transaksi->nama_karyawan, - 'debit' => $transaksi->uang_masuk5, - 'kredit' => $transaksi->uang_keluar5, - 'id' => $transaksi->id - ]); + // Hitung saldo akhir dan atur posisi debit/kredit sesuai jenis akun + $finalTransaksis = []; + foreach ($totalsPerAkun as $kategori => $data) { + $kodeAwal = substr($data['kode'], 0, 3); + $saldo = $data['debit'] - $data['kredit']; + + // Tentukan posisi saldo (debit/kredit) berdasarkan jenis akun + if (in_array($kodeAwal, ['111', '112']) || in_array($kodeAwal, ['251', '252'])) { + // Aktiva dan Beban: saldo normal di debit + if ($saldo != 0) { + $finalTransaksis[] = [ + 'kode' => $data['kode'], + 'kategori' => $kategori, + 'debit' => $saldo, + 'kredit' => 0 + ]; + } + } else { + // Pasiva dan Pendapatan: saldo normal di kredit + if ($saldo != 0) { + $finalTransaksis[] = [ + 'kode' => $data['kode'], + 'kategori' => $kategori, + 'debit' => 0, + 'kredit' => -$saldo + ]; + } } } - // Mengurutkan berdasarkan kode - $transaksis = $transaksis->sortBy('kode'); + // Urutkan berdasarkan kode + usort($finalTransaksis, function($a, $b) { + return $a['kode'] <=> $b['kode']; + }); + + // Konversi ke collection setelah selesai + $transaksis = collect($finalTransaksis); return view('Neracasaldo', compact('transaksis')); } diff --git a/app/Http/Controllers/RekeningController.php b/app/Http/Controllers/RekeningController.php index 6c858da..300f128 100644 --- a/app/Http/Controllers/RekeningController.php +++ b/app/Http/Controllers/RekeningController.php @@ -30,35 +30,54 @@ public function index(Request $request) // Kelompokkan data berdasarkan kategori $groupedLaporan = collect(); - // Kelompokkan berdasarkan kategori 1-5 - for ($i = 1; $i <= 5; $i++) { - $kategoriField = $i === 1 ? 'kategori' : "kategori{$i}"; - $uangMasukField = $i === 1 ? 'uang_masuk' : "uang_masuk{$i}"; - $uangKeluarField = $i === 1 ? 'uang_keluar' : "uang_keluar{$i}"; + // Proses semua data transaksi + foreach ($laporan as $item) { + // Proses untuk kategori utama + if (!empty($item->kategori)) { + $kategori = $item->kategori; + if (!isset($groupedLaporan[$kategori])) { + $groupedLaporan[$kategori] = collect(); + } + + $groupedLaporan[$kategori]->push((object)[ + 'id' => $item->id, + 'Tanggal' => $item->Tanggal, + 'keterangan' => $item->keterangan, + 'kode' => $this->generateKode($kategori), + 'debit' => $item->uang_masuk ?? 0, + 'kredit' => $item->uang_keluar ?? 0 + ]); + } - $filteredLaporan = $laporan->filter(function ($item) use ($kategoriField) { - return !empty($item->$kategoriField); - }); - - foreach ($filteredLaporan->groupBy($kategoriField) as $kategori => $items) { - if (!empty($kategori)) { - $groupedLaporan[$kategori] = $items->map(function ($item) use ($kategoriField, $uangMasukField, $uangKeluarField) { - // Gunakan kode yang sesuai dengan nama kategori - $kode = $this->generateKode($item->$kategoriField); - - return (object)[ - 'id' => $item->id, - 'Tanggal' => $item->Tanggal, - 'keterangan' => $item->keterangan, - 'kode' => $kode, - 'debit' => $item->$uangMasukField ?? 0, - 'kredit' => $item->$uangKeluarField ?? 0 - ]; - }); + // Proses untuk kategori tambahan (2-5) + for ($i = 2; $i <= 5; $i++) { + $kategoriField = "kategori{$i}"; + $uangMasukField = "uang_masuk{$i}"; + $uangKeluarField = "uang_keluar{$i}"; + + if (!empty($item->$kategoriField)) { + $kategori = $item->$kategoriField; + if (!isset($groupedLaporan[$kategori])) { + $groupedLaporan[$kategori] = collect(); + } + + $groupedLaporan[$kategori]->push((object)[ + 'id' => $item->id, + 'Tanggal' => $item->Tanggal, + 'keterangan' => $item->keterangan, + 'kode' => $this->generateKode($kategori), + 'debit' => $item->$uangMasukField ?? 0, + 'kredit' => $item->$uangKeluarField ?? 0 + ]); } } } + // Urutkan transaksi berdasarkan tanggal untuk setiap kategori + foreach ($groupedLaporan as $kategori => $items) { + $groupedLaporan[$kategori] = $items->sortBy('Tanggal'); + } + // Hitung total untuk setiap kategori $totals = []; foreach ($groupedLaporan as $kategori => $items) { diff --git a/resources/views/Neracasaldo.blade.php b/resources/views/Neracasaldo.blade.php index 2b1d2b8..62cbdd4 100644 --- a/resources/views/Neracasaldo.blade.php +++ b/resources/views/Neracasaldo.blade.php @@ -24,45 +24,40 @@ Kode - Kategori - Keterangan + Nama Akun Debit Kredit - Aksi + @php + $totalDebit = 0; + $totalKredit = 0; + @endphp @foreach($transaksis as $transaksi) {{ $transaksi['kode'] }} {{ $transaksi['kategori'] }} - {{ $transaksi['keterangan'] }} - @if($transaksi['debit'] > 0) - {{ number_format($transaksi['debit'], 2) }} - @endif + @php $totalDebit += $transaksi['debit']; @endphp + {{ $transaksi['debit'] != 0 ? ($transaksi['debit'] < 0 ? '-' : '') . number_format(abs($transaksi['debit']), 0, ',', '.') : '-' }} - @if($transaksi['kredit'] > 0) - {{ number_format($transaksi['kredit'], 2) }} - @endif - - -
- - - -
- @csrf - @method('DELETE') - -
-
+ @php $totalKredit += $transaksi['kredit']; @endphp + {{ $transaksi['kredit'] != 0 ? ($transaksi['kredit'] < 0 ? '-' : '') . number_format(abs($transaksi['kredit']), 0, ',', '.') : '-' }} @endforeach + + + Total + + {{ $totalDebit != 0 ? ($totalDebit < 0 ? '-' : '') . number_format(abs($totalDebit), 0, ',', '.') : '-' }} + + + {{ $totalKredit != 0 ? ($totalKredit < 0 ? '-' : '') . number_format(abs($totalKredit), 0, ',', '.') : '-' }} + + diff --git a/resources/views/Rekening.blade.php b/resources/views/Rekening.blade.php index 2fbe4db..54418f9 100644 --- a/resources/views/Rekening.blade.php +++ b/resources/views/Rekening.blade.php @@ -1,6 +1,45 @@ @extends('Core.Sidebar') @section('content') + @php + function getAccountTypePHP($kodeAkun) { + $kode = (string)$kodeAkun; + if (str_starts_with($kode, '111') || str_starts_with($kode, '112')) { + return 'AKTIVA'; + } else if (str_starts_with($kode, '121') || str_starts_with($kode, '122') || str_starts_with($kode, '131')) { + return 'PASIVA'; + } else if (str_starts_with($kode, '241') || str_starts_with($kode, '242')) { + return 'PENDAPATAN'; + } else if (str_starts_with($kode, '251') || str_starts_with($kode, '252')) { + return 'BEBAN'; + } + return 'UNKNOWN'; + } + + function calculateBalancePHP($previousBalance, $debit, $kredit, $accountType) { + $balance = $previousBalance; + + switch($accountType) { + case 'AKTIVA': + // Aktiva: bertambah di debit, berkurang di kredit + $balance = $balance + $debit - $kredit; + break; + case 'PASIVA': + case 'PENDAPATAN': + // Pasiva & Pendapatan: bertambah di kredit, berkurang di debit + $balance = $balance - $debit + $kredit; + break; + case 'BEBAN': + // Beban: bertambah di debit, berkurang di kredit + $balance = $balance + $debit - $kredit; + break; + default: + $balance = $balance + $debit - $kredit; + } + + return $balance; + } + @endphp Buku Besar Perusahaan Dagang @@ -22,6 +61,7 @@ @php $kodeAkun = $items->first()->kode ?? '-'; $runningBalance = 0; + $accountType = substr($kodeAkun, 0, 3); @endphp
@@ -50,14 +90,15 @@ - @foreach($items as $item) - @php - $runningBalance += ($item->debit - $item->kredit); - @endphp + @php + $runningBalance = 0; + $accountType = getAccountTypePHP($kodeAkun); + @endphp + @foreach($items->sortBy('Tanggal') as $item) {{ date('d/m/Y', strtotime($item->Tanggal)) }} {{ $item->keterangan }} - - + {{ $item->kode }} @if($item->debit > 0) {{ number_format($item->debit, 0, ',', '.') }} @@ -72,7 +113,13 @@ - @endif - {{ number_format($runningBalance, 0, ',', '.') }} + + @php + $runningBalance = calculateBalancePHP($runningBalance, $item->debit ?? 0, $item->kredit ?? 0, $accountType); + $displayBalance = $runningBalance < 0 ? '-' . number_format(abs($runningBalance), 0, ',', '.') : number_format($runningBalance, 0, ',', '.'); + @endphp + {{ $displayBalance }} +