update tgl 18 april
This commit is contained in:
parent
8a82f83afc
commit
ba94899fa2
|
@ -0,0 +1,309 @@
|
|||
<?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();
|
||||
|
||||
// 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}";
|
||||
|
||||
$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
|
||||
];
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 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');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class RekeningModel extends Model
|
||||
{
|
||||
protected $table = 'laporan_transaksis';
|
||||
|
||||
protected $fillable = [
|
||||
'Tanggal',
|
||||
'kode',
|
||||
'kode2',
|
||||
'kode3',
|
||||
'kode4',
|
||||
'kode5',
|
||||
'kategori',
|
||||
'kategori2',
|
||||
'kategori3',
|
||||
'kategori4',
|
||||
'kategori5',
|
||||
'keterangan',
|
||||
'nama_karyawan',
|
||||
'uang_masuk',
|
||||
'uang_masuk2',
|
||||
'uang_masuk3',
|
||||
'uang_masuk4',
|
||||
'uang_masuk5',
|
||||
'uang_keluar',
|
||||
'uang_keluar2',
|
||||
'uang_keluar3',
|
||||
'uang_keluar4',
|
||||
'uang_keluar5',
|
||||
'gaji'
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'Tanggal' => 'date',
|
||||
'uang_masuk' => 'decimal:2',
|
||||
'uang_masuk2' => 'decimal:2',
|
||||
'uang_masuk3' => 'decimal:2',
|
||||
'uang_masuk4' => 'decimal:2',
|
||||
'uang_masuk5' => 'decimal:2',
|
||||
'uang_keluar' => 'decimal:2',
|
||||
'uang_keluar2' => 'decimal:2',
|
||||
'uang_keluar3' => 'decimal:2',
|
||||
'uang_keluar4' => 'decimal:2',
|
||||
'uang_keluar5' => 'decimal:2',
|
||||
'gaji' => 'decimal:2'
|
||||
];
|
||||
}
|
|
@ -0,0 +1,171 @@
|
|||
@extends('Core.Sidebar')
|
||||
|
||||
@section('content')
|
||||
<title>Buku Besar Perusahaan Dagang</title>
|
||||
<!-- Tailwind CSS -->
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">
|
||||
<!-- CSRF Token -->
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
|
||||
<div class="box p-4 intro-y mt-5">
|
||||
<div class="intro-y">
|
||||
<!-- Header -->
|
||||
<div class="mb-4 bg-blue-600 text-white p-4 rounded-lg shadow-md">
|
||||
<h1 class="text-2xl font-bold">Buku Besar Perusahaan Dagang</h1>
|
||||
<p class="text-sm mt-1">Entri Jurnal Umum Budivespaendut</p>
|
||||
<p class="text-sm">Anggrek</p>
|
||||
</div>
|
||||
|
||||
@foreach($groupedLaporan as $kategori => $items)
|
||||
@php
|
||||
$kodeAkun = $items->first()->kode ?? '-';
|
||||
$runningBalance = 0;
|
||||
@endphp
|
||||
|
||||
<div class="mb-8">
|
||||
<!-- Informasi Akun -->
|
||||
<div class="flex justify-between items-center mb-2 bg-gray-100 p-3 rounded-t-lg">
|
||||
<div>
|
||||
<span class="font-bold">Nama Akun: {{ $kategori }}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="font-bold">Kode Akun: {{ $kodeAkun }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tabel Transaksi -->
|
||||
<div class="overflow-x-auto">
|
||||
<table class="w-full bg-white border border-gray-300">
|
||||
<thead>
|
||||
<tr class="bg-gray-100 text-gray-600 uppercase text-sm leading-normal">
|
||||
<th class="py-3 px-4 text-left">Tanggal</th>
|
||||
<th class="py-3 px-4 text-left">Keterangan</th>
|
||||
<th class="py-3 px-4 text-center">Ref</th>
|
||||
<th class="py-3 px-4 text-right">Debit (Rp)</th>
|
||||
<th class="py-3 px-4 text-right">Kredit (Rp)</th>
|
||||
<th class="py-3 px-4 text-right">Saldo</th>
|
||||
<th class="py-3 px-4 text-center">Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
@php
|
||||
$runningBalance += ($item->debit - $item->kredit);
|
||||
@endphp
|
||||
<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-right">
|
||||
@if($item->debit > 0)
|
||||
{{ number_format($item->debit, 0, ',', '.') }}
|
||||
@else
|
||||
-
|
||||
@endif
|
||||
</td>
|
||||
<td class="py-3 px-4 text-right">
|
||||
@if($item->kredit > 0)
|
||||
{{ number_format($item->kredit, 0, ',', '.') }}
|
||||
@else
|
||||
-
|
||||
@endif
|
||||
</td>
|
||||
<td class="py-3 px-4 text-right">{{ number_format($runningBalance, 0, ',', '.') }}</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">
|
||||
<i class="fas fa-edit"></i>
|
||||
</button>
|
||||
<button onclick="hapusData({{ $item->id }})" class="text-red-600 hover:text-red-800" title="Hapus">
|
||||
<i class="fas fa-trash"></i>
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<!-- <tr class="bg-gray-50 font-bold">
|
||||
<td colspan="3" class="py-3 px-4 text-right">Total:</td>
|
||||
<td class="py-3 px-4 text-right">{{ number_format($totals[$kategori]['debit'], 0, ',', '.') }}</td>
|
||||
<td class="py-3 px-4 text-right">{{ number_format($totals[$kategori]['kredit'], 0, ',', '.') }}</td>
|
||||
<td class="py-3 px-4 text-right">{{ number_format($totals[$kategori]['saldo'], 0, ',', '.') }}</td>
|
||||
<td></td>
|
||||
</tr> -->
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
|
||||
<!-- Action Buttons -->
|
||||
<div class="flex justify-between items-center mt-4 mb-4">
|
||||
<div class="flex space-x-2">
|
||||
<a href="{{ route('laporan.export-excel') }}" class="btn bg-green-500 text-white hover:bg-green-600 px-4 py-2 rounded-md">
|
||||
<i class="fas fa-file-excel mr-2"></i>Export Excel
|
||||
</a>
|
||||
<a href="{{ route('laporan.export-pdf') }}" class="btn bg-red-500 text-white hover:bg-red-600 px-4 py-2 rounded-md">
|
||||
<i class="fas fa-file-pdf mr-2"></i>Export PDF
|
||||
</a>
|
||||
<button onclick="window.print()" class="btn bg-gray-500 text-white hover:bg-gray-600 px-4 py-2 rounded-md">
|
||||
<i class="fas fa-print mr-2"></i>Print
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
@media print {
|
||||
.btn, header, footer, .no-print {
|
||||
display: none !important;
|
||||
}
|
||||
body {
|
||||
padding: 20px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.box {
|
||||
box-shadow: none !important;
|
||||
}
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
th, td {
|
||||
border: 1px solid #000;
|
||||
padding: 8px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
function hapusData(id) {
|
||||
if (confirm('Apakah Anda yakin ingin menghapus data ini?')) {
|
||||
fetch(`/laporan/${id}`, {
|
||||
method: 'DELETE',
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content'),
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
alert('Data berhasil dihapus');
|
||||
location.reload();
|
||||
} else {
|
||||
alert('Gagal menghapus data: ' + data.message);
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error:', error);
|
||||
alert('Terjadi kesalahan saat menghapus data');
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@endsection
|
|
@ -14,6 +14,7 @@
|
|||
use App\Http\Controllers\LaporanController;
|
||||
use App\Http\Controllers\UserController;
|
||||
use App\Http\Controllers\AuthController;
|
||||
use App\Http\Controllers\RekeningController;
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Web Routes
|
||||
|
@ -60,4 +61,10 @@
|
|||
// Routes untuk manajemen user
|
||||
Route::get('/users/data', [UserController::class, 'getData']);
|
||||
Route::post('/users/create', [UserController::class, 'create']);
|
||||
|
||||
// Routes untuk Rekening
|
||||
Route::get('/rekening', [RekeningController::class, 'index'])->name('rekening.index');
|
||||
Route::delete('/rekening/{id}', [RekeningController::class, 'destroy'])->name('rekening.destroy');
|
||||
Route::get('/rekening/export-excel', [RekeningController::class, 'exportExcel'])->name('rekening.export-excel');
|
||||
Route::get('/rekening/export-pdf', [RekeningController::class, 'exportPDF'])->name('rekening.export-pdf');
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue