329 lines
10 KiB
PHP
329 lines
10 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\RekeningModel;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Response;
|
|
use Carbon\Carbon;
|
|
use PDF;
|
|
use Excel;
|
|
|
|
class RekeningController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$query = RekeningModel::query();
|
|
|
|
// Filter berdasarkan nama akun jika ada
|
|
if ($request->has('periode')) {
|
|
$query->where('kategori', $request->periode);
|
|
}
|
|
|
|
// Filter berdasarkan tanggal jika ada
|
|
if ($request->has('startDate')) {
|
|
$query->whereDate('Tanggal', '>=', $request->startDate);
|
|
}
|
|
|
|
$laporan = $query->orderBy('Tanggal', 'asc')->get();
|
|
|
|
// Kelompokkan data berdasarkan kategori
|
|
$groupedLaporan = collect();
|
|
|
|
// 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
|
|
]);
|
|
}
|
|
|
|
// 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) {
|
|
$totals[$kategori] = [
|
|
'debit' => $items->sum('debit'),
|
|
'kredit' => $items->sum('kredit')
|
|
];
|
|
$totals[$kategori]['saldo'] = $totals[$kategori]['debit'] - $totals[$kategori]['kredit'];
|
|
}
|
|
|
|
// Hitung total keseluruhan
|
|
$totalDebit = array_sum(array_column($totals, 'debit'));
|
|
$totalKredit = array_sum(array_column($totals, 'kredit'));
|
|
$saldo = $totalDebit - $totalKredit;
|
|
|
|
if ($request->ajax()) {
|
|
return response()->json([
|
|
'data' => $groupedLaporan,
|
|
'totals' => $totals,
|
|
'totalDebit' => $totalDebit,
|
|
'totalKredit' => $totalKredit,
|
|
'saldo' => $saldo
|
|
]);
|
|
}
|
|
|
|
return view('Rekening', compact('groupedLaporan', 'totals', 'totalDebit', 'totalKredit', 'saldo'));
|
|
}
|
|
|
|
private function generateKode($kategori)
|
|
{
|
|
// Ambil data-kode dari kategori yang dipilih
|
|
$kodeAkun = '';
|
|
|
|
switch (strtolower($kategori)) {
|
|
// Aset Lancar (11)
|
|
case 'kas':
|
|
$kodeAkun = '111001';
|
|
break;
|
|
case 'bank':
|
|
$kodeAkun = '111002';
|
|
break;
|
|
case 'piutang usaha':
|
|
$kodeAkun = '111003';
|
|
break;
|
|
case 'piutang wesel':
|
|
$kodeAkun = '111004';
|
|
break;
|
|
case 'piutang karyawan':
|
|
$kodeAkun = '111005';
|
|
break;
|
|
case 'piutang lain':
|
|
$kodeAkun = '111006';
|
|
break;
|
|
case 'persediaan barang':
|
|
$kodeAkun = '111007';
|
|
break;
|
|
case 'persediaan bahan':
|
|
$kodeAkun = '111008';
|
|
break;
|
|
case 'sewa dibayar dimuka':
|
|
$kodeAkun = '111009';
|
|
break;
|
|
case 'asuransi dibayar_dimuka':
|
|
$kodeAkun = '111010';
|
|
break;
|
|
case 'perlengkapan kantor':
|
|
$kodeAkun = '111011';
|
|
break;
|
|
case 'biaya dibayar dimuka':
|
|
$kodeAkun = '111012';
|
|
break;
|
|
case 'investasi pendek':
|
|
$kodeAkun = '111013';
|
|
break;
|
|
|
|
// Aset Tetap (12)
|
|
case 'tanah':
|
|
$kodeAkun = '112001';
|
|
break;
|
|
case 'gedung':
|
|
$kodeAkun = '112002';
|
|
break;
|
|
case 'kendaraan':
|
|
$kodeAkun = '112003';
|
|
break;
|
|
case 'mesin':
|
|
$kodeAkun = '112004';
|
|
break;
|
|
case 'perabotan':
|
|
$kodeAkun = '112005';
|
|
break;
|
|
case 'hak paten':
|
|
$kodeAkun = '112006';
|
|
break;
|
|
case 'hak cipta':
|
|
$kodeAkun = '112007';
|
|
break;
|
|
case 'goodwill':
|
|
$kodeAkun = '112008';
|
|
break;
|
|
case 'merek dagang':
|
|
$kodeAkun = '112009';
|
|
break;
|
|
|
|
// Utang Lancar (21)
|
|
case 'utang usaha':
|
|
$kodeAkun = '121001';
|
|
break;
|
|
case 'utang wesel':
|
|
$kodeAkun = '121002';
|
|
break;
|
|
case 'utang gaji':
|
|
$kodeAkun = '121003';
|
|
break;
|
|
case 'utang bunga':
|
|
$kodeAkun = '121004';
|
|
break;
|
|
case 'utang pajak':
|
|
$kodeAkun = '121005';
|
|
break;
|
|
case 'utang dividen':
|
|
$kodeAkun = '121006';
|
|
break;
|
|
|
|
// Utang Jangka Panjang (22)
|
|
case 'utang hipotek':
|
|
$kodeAkun = '122001';
|
|
break;
|
|
case 'utang obligasi':
|
|
$kodeAkun = '122002';
|
|
break;
|
|
case 'kredit investasi':
|
|
$kodeAkun = '122003';
|
|
break;
|
|
|
|
// Modal (Ekuitas) (31)
|
|
case 'modal pemilik':
|
|
$kodeAkun = '131001';
|
|
break;
|
|
case 'modal saham':
|
|
$kodeAkun = '131002';
|
|
break;
|
|
case 'laba ditahan':
|
|
$kodeAkun = '131003';
|
|
break;
|
|
case 'dividen':
|
|
$kodeAkun = '131004';
|
|
break;
|
|
case 'prive':
|
|
$kodeAkun = '131005';
|
|
break;
|
|
|
|
// Pendapatan Operasional (41)
|
|
case 'pendapatan penjualan':
|
|
$kodeAkun = '241001';
|
|
break;
|
|
case 'pendapatan jasa':
|
|
$kodeAkun = '241002';
|
|
break;
|
|
|
|
// Pendapatan Non-Operasional (42)
|
|
case 'pendapatan bunga':
|
|
$kodeAkun = '242001';
|
|
break;
|
|
case 'pendapatan sewa':
|
|
$kodeAkun = '242002';
|
|
break;
|
|
case 'pendapatan komisi':
|
|
$kodeAkun = '242003';
|
|
break;
|
|
case 'pendapatan lain':
|
|
$kodeAkun = '242004';
|
|
break;
|
|
|
|
// Beban Operasional (51)
|
|
case 'beban gaji':
|
|
$kodeAkun = '251001';
|
|
break;
|
|
case 'beban sewa':
|
|
$kodeAkun = '251002';
|
|
break;
|
|
case 'beban utilitas':
|
|
$kodeAkun = '251003';
|
|
break;
|
|
case 'beban penyusutan':
|
|
$kodeAkun = '251004';
|
|
break;
|
|
case 'beban supplies':
|
|
$kodeAkun = '251005';
|
|
break;
|
|
case 'beban iklan':
|
|
$kodeAkun = '251006';
|
|
break;
|
|
|
|
// Beban Non-Operasional (52)
|
|
case 'beban bunga':
|
|
$kodeAkun = '252001';
|
|
break;
|
|
case 'beban lain':
|
|
$kodeAkun = '252002';
|
|
break;
|
|
|
|
default:
|
|
$kodeAkun = '0000';
|
|
}
|
|
|
|
return $kodeAkun;
|
|
}
|
|
|
|
public function destroy($id)
|
|
{
|
|
try {
|
|
$laporan = RekeningModel::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);
|
|
}
|
|
}
|
|
|
|
public function exportExcel()
|
|
{
|
|
$laporan = RekeningModel::all();
|
|
$groupedLaporan = $laporan->groupBy('kategori');
|
|
|
|
return Excel::download(function($excel) use ($groupedLaporan) {
|
|
$excel->sheet('Rekening', function($sheet) use ($groupedLaporan) {
|
|
$sheet->loadView('exports.rekening-excel', compact('groupedLaporan'));
|
|
});
|
|
}, 'rekening-' . Carbon::now()->format('Y-m-d') . '.xlsx');
|
|
}
|
|
|
|
public function exportPDF()
|
|
{
|
|
$laporan = RekeningModel::all();
|
|
$groupedLaporan = $laporan->groupBy('kategori');
|
|
$pdf = PDF::loadView('exports.rekening-pdf', compact('groupedLaporan'));
|
|
|
|
return $pdf->download('rekening-' . Carbon::now()->format('Y-m-d') . '.pdf');
|
|
}
|
|
}
|