update tgl 22 april
This commit is contained in:
parent
70aadac250
commit
dbc6d467aa
|
@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
// 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 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
|
||||
]);
|
||||
}
|
||||
// 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'];
|
||||
|
||||
// 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
|
||||
]);
|
||||
// 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
|
||||
];
|
||||
}
|
||||
|
||||
// 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
|
||||
]);
|
||||
} else {
|
||||
// Pasiva dan Pendapatan: saldo normal di kredit
|
||||
if ($saldo != 0) {
|
||||
$finalTransaksis[] = [
|
||||
'kode' => $data['kode'],
|
||||
'kategori' => $kategori,
|
||||
'debit' => 0,
|
||||
'kredit' => -$saldo
|
||||
];
|
||||
}
|
||||
|
||||
// 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
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// 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'));
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
$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)[
|
||||
$groupedLaporan[$kategori]->push((object)[
|
||||
'id' => $item->id,
|
||||
'Tanggal' => $item->Tanggal,
|
||||
'keterangan' => $item->keterangan,
|
||||
'kode' => $kode,
|
||||
'kode' => $this->generateKode($kategori),
|
||||
'debit' => $item->uang_masuk ?? 0,
|
||||
'kredit' => $item->uang_keluar ?? 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) {
|
||||
|
|
|
@ -24,45 +24,40 @@
|
|||
<thead>
|
||||
<tr class="bg-gray-100 text-gray-600 uppercase text-sm leading-normal">
|
||||
<th class="py-3 px-4 text-left">Kode</th>
|
||||
<th class="py-3 px-4 text-left">Kategori</th>
|
||||
<th class="py-3 px-4 text-left">Keterangan</th>
|
||||
<th class="py-3 px-4 text-left">Nama Akun</th>
|
||||
<th class="py-3 px-4 text-right">Debit</th>
|
||||
<th class="py-3 px-4 text-right">Kredit</th>
|
||||
<th class="py-3 px-4 text-center">Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@php
|
||||
$totalDebit = 0;
|
||||
$totalKredit = 0;
|
||||
@endphp
|
||||
@foreach($transaksis as $transaksi)
|
||||
<tr class="border-b border-gray-200 hover:bg-gray-100">
|
||||
<td class="py-3 px-4">{{ $transaksi['kode'] }}</td>
|
||||
<td class="py-3 px-4">{{ $transaksi['kategori'] }}</td>
|
||||
<td class="py-3 px-4">{{ $transaksi['keterangan'] }}</td>
|
||||
<td class="py-3 px-4 text-right">
|
||||
@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, ',', '.') : '-' }}
|
||||
</td>
|
||||
<td class="py-3 px-4 text-right">
|
||||
@if($transaksi['kredit'] > 0)
|
||||
{{ number_format($transaksi['kredit'], 2) }}
|
||||
@endif
|
||||
</td>
|
||||
<td class="py-3 px-4 text-center">
|
||||
<div class="flex item-center justify-center">
|
||||
<a href="{{ route('neracasaldo.edit', $transaksi['id']) }}" class="w-4 mr-2 transform hover:text-purple-500 hover:scale-110">
|
||||
<i class="fas fa-edit"></i>
|
||||
</a>
|
||||
<form action="{{ route('neracasaldo.destroy', $transaksi['id']) }}" method="POST" class="inline">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="w-4 mr-2 transform hover:text-red-500 hover:scale-110" onclick="return confirm('Apakah Anda yakin ingin menghapus data ini?')">
|
||||
<i class="fas fa-trash"></i>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
@php $totalKredit += $transaksi['kredit']; @endphp
|
||||
{{ $transaksi['kredit'] != 0 ? ($transaksi['kredit'] < 0 ? '-' : '') . number_format(abs($transaksi['kredit']), 0, ',', '.') : '-' }}
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
<!-- Total Row -->
|
||||
<tr class="bg-gray-50 font-bold">
|
||||
<td class="py-3 px-4" colspan="2">Total</td>
|
||||
<td class="py-3 px-4 text-right">
|
||||
{{ $totalDebit != 0 ? ($totalDebit < 0 ? '-' : '') . number_format(abs($totalDebit), 0, ',', '.') : '-' }}
|
||||
</td>
|
||||
<td class="py-3 px-4 text-right">
|
||||
{{ $totalKredit != 0 ? ($totalKredit < 0 ? '-' : '') . number_format(abs($totalKredit), 0, ',', '.') : '-' }}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
|
|
@ -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
|
||||
<title>Buku Besar Perusahaan Dagang</title>
|
||||
<!-- Tailwind CSS -->
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
|
@ -22,6 +61,7 @@
|
|||
@php
|
||||
$kodeAkun = $items->first()->kode ?? '-';
|
||||
$runningBalance = 0;
|
||||
$accountType = substr($kodeAkun, 0, 3);
|
||||
@endphp
|
||||
|
||||
<div class="mb-8">
|
||||
|
@ -50,14 +90,15 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
@php
|
||||
$runningBalance += ($item->debit - $item->kredit);
|
||||
$runningBalance = 0;
|
||||
$accountType = getAccountTypePHP($kodeAkun);
|
||||
@endphp
|
||||
@foreach($items->sortBy('Tanggal') as $item)
|
||||
<tr class="border-b border-gray-200 hover:bg-gray-50">
|
||||
<td class="py-3 px-4">{{ date('d/m/Y', strtotime($item->Tanggal)) }}</td>
|
||||
<td class="py-3 px-4">{{ $item->keterangan }}</td>
|
||||
<td class="py-3 px-4 text-center">-</td>
|
||||
<td class="py-3 px-4 text-center">{{ $item->kode }}</td>
|
||||
<td class="py-3 px-4 text-right">
|
||||
@if($item->debit > 0)
|
||||
{{ number_format($item->debit, 0, ',', '.') }}
|
||||
|
@ -72,7 +113,13 @@
|
|||
-
|
||||
@endif
|
||||
</td>
|
||||
<td class="py-3 px-4 text-right">{{ number_format($runningBalance, 0, ',', '.') }}</td>
|
||||
<td class="py-3 px-4 text-right">
|
||||
@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 }}
|
||||
</td>
|
||||
<td class="py-3 px-4 text-center">
|
||||
<div class="flex justify-center space-x-2">
|
||||
<button class="text-blue-600 hover:text-blue-800" title="Edit">
|
||||
|
@ -142,6 +189,44 @@
|
|||
</style>
|
||||
|
||||
<script>
|
||||
function getAccountType(kodeAkun) {
|
||||
const kode = kodeAkun.toString();
|
||||
if (kode.startsWith('111') || kode.startsWith('112')) {
|
||||
return 'AKTIVA';
|
||||
} else if (kode.startsWith('121') || kode.startsWith('122') || kode.startsWith('131')) {
|
||||
return 'PASIVA';
|
||||
} else if (kode.startsWith('241') || kode.startsWith('242')) {
|
||||
return 'PENDAPATAN';
|
||||
} else if (kode.startsWith('251') || kode.startsWith('252')) {
|
||||
return 'BEBAN';
|
||||
}
|
||||
return 'UNKNOWN';
|
||||
}
|
||||
|
||||
function calculateBalance(previousBalance, debit, kredit, accountType) {
|
||||
let 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;
|
||||
}
|
||||
|
||||
function hapusData(id) {
|
||||
if (confirm('Apakah Anda yakin ingin menghapus data ini?')) {
|
||||
fetch(`/laporan/${id}`, {
|
||||
|
|
Loading…
Reference in New Issue