From 0be2b98301d2d506891327a9558d37d09d515770 Mon Sep 17 00:00:00 2001 From: whywdd Date: Wed, 7 May 2025 05:43:55 +0700 Subject: [PATCH] update tgl 7 mei2 --- .../Controllers/NeracasaldoController.php | 276 +++++++++++++++ app/Http/Controllers/RekeningController.php | 320 +++++++++++++++++- app/Http/Controllers/UserController.php | 105 +++--- resources/views/Laporan.blade.php | 81 ++++- resources/views/Neracasaldo.blade.php | 73 +++- resources/views/Rekening.blade.php | 59 +++- resources/views/User.blade.php | 314 ++++++++--------- routes/web.php | 2 + 8 files changed, 972 insertions(+), 258 deletions(-) diff --git a/app/Http/Controllers/NeracasaldoController.php b/app/Http/Controllers/NeracasaldoController.php index 8975e51..555a780 100644 --- a/app/Http/Controllers/NeracasaldoController.php +++ b/app/Http/Controllers/NeracasaldoController.php @@ -5,6 +5,11 @@ use App\Models\NeracasaldoModel; use Illuminate\Http\Request; use Carbon\Carbon; +use Maatwebsite\Excel\Facades\Excel; +use Maatwebsite\Excel\Concerns\FromCollection; +use Maatwebsite\Excel\Concerns\WithHeadings; +use Barryvdh\DomPDF\Facade\Pdf; +use App\Exports\NeracaSaldoExport; class NeracasaldoController extends Controller { @@ -144,4 +149,275 @@ public function show($id) $transaksi = NeracasaldoModel::findOrFail($id); return view('neracasaldo.show', compact('transaksi')); } + + public function exportExcel(Request $request) + { + try { + // Ambil parameter filter tanggal jika ada + $startDate = $request->input('start_date', Carbon::now()->startOfMonth()->format('Y-m-d')); + $endDate = $request->input('end_date', Carbon::now()->endOfMonth()->format('Y-m-d')); + + $rawTransaksis = NeracasaldoModel::whereBetween('Tanggal', [$startDate, $endDate]) + ->orderBy('kode', 'asc') + ->get(); + + $processedData = []; + $totalsPerAkun = []; + $totalDebit = 0; + $totalKredit = 0; + + // Proses data seperti di fungsi index + foreach ($rawTransaksis as $transaksi) { + $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); + } + }; + + $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); + } + + foreach ($totalsPerAkun as $kategori => $data) { + $kodeAwal = substr($data['kode'], 0, 3); + $saldo = $data['debit'] - $data['kredit']; + + if (in_array($kodeAwal, ['111', '112']) || in_array($kodeAwal, ['251', '252'])) { + if ($saldo != 0) { + $processedData[] = [ + 'kode' => $data['kode'], + 'kategori' => $kategori, + 'debit' => $saldo > 0 ? abs($saldo) : 0, + 'kredit' => $saldo < 0 ? abs($saldo) : 0 + ]; + $totalDebit += $saldo > 0 ? abs($saldo) : 0; + $totalKredit += $saldo < 0 ? abs($saldo) : 0; + } + } else { + if ($saldo != 0) { + $processedData[] = [ + 'kode' => $data['kode'], + 'kategori' => $kategori, + 'debit' => $saldo < 0 ? abs($saldo) : 0, + 'kredit' => $saldo > 0 ? abs($saldo) : 0 + ]; + $totalDebit += $saldo < 0 ? abs($saldo) : 0; + $totalKredit += $saldo > 0 ? abs($saldo) : 0; + } + } + } + + // Tambahkan baris total + $processedData[] = [ + 'kode' => '', + 'kategori' => 'Total', + 'debit' => $totalDebit, + 'kredit' => $totalKredit + ]; + + // Buat class export inline + $export = new class($processedData) implements FromCollection, WithHeadings { + protected $data; + + public function __construct($data) + { + $this->data = collect($data); + } + + public function collection() + { + return $this->data; + } + + public function headings(): array + { + return [ + 'Kode', + 'Nama Akun', + 'Debit', + 'Kredit' + ]; + } + }; + + return Excel::download($export, 'neraca-saldo-'.date('Y-m-d').'.xlsx'); + } catch (\Exception $e) { + return redirect()->back()->with('error', 'Gagal mengekspor Excel: ' . $e->getMessage()); + } + } + + public function exportPDF(Request $request) + { + try { + // Ambil parameter filter tanggal jika ada + $startDate = $request->input('start_date', Carbon::now()->startOfMonth()->format('Y-m-d')); + $endDate = $request->input('end_date', Carbon::now()->endOfMonth()->format('Y-m-d')); + + $rawTransaksis = NeracasaldoModel::whereBetween('Tanggal', [$startDate, $endDate]) + ->orderBy('kode', 'asc') + ->get(); + + $processedData = []; + $totalsPerAkun = []; + $totalDebit = 0; + $totalKredit = 0; + + // Proses data seperti di fungsi index + foreach ($rawTransaksis as $transaksi) { + $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); + } + }; + + $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); + } + + foreach ($totalsPerAkun as $kategori => $data) { + $kodeAwal = substr($data['kode'], 0, 3); + $saldo = $data['debit'] - $data['kredit']; + + if (in_array($kodeAwal, ['111', '112']) || in_array($kodeAwal, ['251', '252'])) { + if ($saldo != 0) { + $processedData[] = [ + 'kode' => $data['kode'], + 'kategori' => $kategori, + 'debit' => $saldo > 0 ? abs($saldo) : 0, + 'kredit' => $saldo < 0 ? abs($saldo) : 0 + ]; + $totalDebit += $saldo > 0 ? abs($saldo) : 0; + $totalKredit += $saldo < 0 ? abs($saldo) : 0; + } + } else { + if ($saldo != 0) { + $processedData[] = [ + 'kode' => $data['kode'], + 'kategori' => $kategori, + 'debit' => $saldo < 0 ? abs($saldo) : 0, + 'kredit' => $saldo > 0 ? abs($saldo) : 0 + ]; + $totalDebit += $saldo < 0 ? abs($saldo) : 0; + $totalKredit += $saldo > 0 ? abs($saldo) : 0; + } + } + } + + // Generate PDF + $html = ' + + + + Neraca Saldo + + + +

Neraca Saldo

+

Periode: ' . date('F Y', strtotime($startDate)) . '

+ + + + + + + + + + + '; + + foreach($processedData as $data) { + if ($data['kategori'] !== 'Total') { + $html .= ' + + + + + + '; + } + } + + $html .= ' + + + + + + + + +
KodeNama AkunDebitKredit
'.$data['kode'].''.$data['kategori'].''.($data['debit'] > 0 ? 'Rp '.number_format($data['debit'], 0, ',', '.') : '-').''.($data['kredit'] > 0 ? 'Rp '.number_format($data['kredit'], 0, ',', '.') : '-').'
Total:Rp '.number_format($totalDebit, 0, ',', '.').'Rp '.number_format($totalKredit, 0, ',', '.').'
+ + '; + + $pdf = PDF::loadHTML($html); + return $pdf->download('neraca-saldo-'.date('Y-m-d').'.pdf'); + } catch (\Exception $e) { + return redirect()->back()->with('error', 'Gagal mengekspor PDF: ' . $e->getMessage()); + } + } } diff --git a/app/Http/Controllers/RekeningController.php b/app/Http/Controllers/RekeningController.php index 2c1fbd8..662c7cf 100644 --- a/app/Http/Controllers/RekeningController.php +++ b/app/Http/Controllers/RekeningController.php @@ -8,6 +8,8 @@ use Carbon\Carbon; use PDF; use Excel; +use Maatwebsite\Excel\Concerns\FromCollection; +use Maatwebsite\Excel\Concerns\WithHeadings; class RekeningController extends Controller { @@ -17,6 +19,15 @@ public function index(Request $request) $startDate = $request->input('start_date', Carbon::now()->startOfMonth()->format('Y-m-d')); $endDate = $request->input('end_date', Carbon::now()->endOfMonth()->format('Y-m-d')); + // Pastikan tanggal valid + try { + $startDate = Carbon::parse($startDate)->format('Y-m-d'); + $endDate = Carbon::parse($endDate)->format('Y-m-d'); + } catch (\Exception $e) { + $startDate = Carbon::now()->startOfMonth()->format('Y-m-d'); + $endDate = Carbon::now()->endOfMonth()->format('Y-m-d'); + } + $query = RekeningModel::whereBetween('Tanggal', [$startDate, $endDate]); // Filter berdasarkan nama akun jika ada @@ -98,7 +109,9 @@ public function index(Request $request) 'totals' => $totals, 'totalDebit' => $totalDebit, 'totalKredit' => $totalKredit, - 'saldo' => $saldo + 'saldo' => $saldo, + 'startDate' => $startDate, + 'endDate' => $endDate ]); } @@ -309,24 +322,299 @@ public function destroy($id) } } - public function exportExcel() + public function exportExcel(Request $request) { - $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'); + try { + // Ambil parameter filter tanggal jika ada + $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 = RekeningModel::whereBetween('Tanggal', [$startDate, $endDate])->get(); + $groupedLaporan = collect(); + + // Proses data seperti di fungsi index + foreach ($laporan as $item) { + if (!empty($item->kategori)) { + $kategori = $item->kategori; + if (!isset($groupedLaporan[$kategori])) { + $groupedLaporan[$kategori] = collect(); + } + + $groupedLaporan[$kategori]->push((object)[ + '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)[ + 'Tanggal' => $item->Tanggal, + 'keterangan' => $item->keterangan, + 'kode' => $this->generateKode($kategori), + 'debit' => $item->$uangMasukField ?? 0, + 'kredit' => $item->$uangKeluarField ?? 0 + ]); + } + } + } + + // Buat class export inline + $export = new class($groupedLaporan) implements FromCollection, WithHeadings { + protected $data; + + public function __construct($data) + { + $this->data = $data; + } + + public function collection() + { + $exportData = collect(); + + foreach ($this->data as $kategori => $items) { + // Tambahkan header untuk setiap kategori + $exportData->push([ + 'Nama Akun: ' . $kategori, + 'Kode Akun: ' . ($items->first()->kode ?? '-'), + '', '', '', '' + ]); + + // Tambahkan header kolom + $exportData->push([ + 'Tanggal', + 'Keterangan', + 'Ref', + 'Debit', + 'Kredit', + 'Saldo' + ]); + + // Tambahkan data transaksi + $runningBalance = 0; + foreach ($items->sortBy('Tanggal') as $item) { + $accountType = substr($item->kode, 0, 3); + $runningBalance = $this->calculateBalance($runningBalance, $item->debit, $item->kredit, $accountType); + + $exportData->push([ + Carbon::parse($item->Tanggal)->format('d/m/Y'), + $item->keterangan, + '-', + $item->debit > 0 ? number_format($item->debit, 0, ',', '.') : '-', + $item->kredit > 0 ? number_format($item->kredit, 0, ',', '.') : '-', + number_format($runningBalance, 0, ',', '.') + ]); + } + + // Tambahkan baris kosong setelah setiap kategori + $exportData->push(['', '', '', '', '', '']); + } + + return $exportData; + } + + public function headings(): array + { + return []; // Header akan ditangani di dalam collection + } + + private function calculateBalance($previousBalance, $debit, $kredit, $accountType) { + $balance = $previousBalance; + + if (in_array($accountType, ['111', '112']) || in_array($accountType, ['251', '252'])) { + $balance = $balance + $debit - $kredit; + } else { + $balance = $balance - $debit + $kredit; + } + + return $balance; + } + }; + + return Excel::download($export, 'buku-besar-'.date('Y-m-d').'.xlsx'); + } catch (\Exception $e) { + return redirect()->back()->with('error', 'Gagal mengekspor Excel: ' . $e->getMessage()); + } } - public function exportPDF() + public function exportPDF(Request $request) { - $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'); + try { + // Ambil parameter filter tanggal jika ada + $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 = RekeningModel::whereBetween('Tanggal', [$startDate, $endDate])->get(); + $groupedLaporan = collect(); + + // Proses data seperti di fungsi index + foreach ($laporan as $item) { + if (!empty($item->kategori)) { + $kategori = $item->kategori; + if (!isset($groupedLaporan[$kategori])) { + $groupedLaporan[$kategori] = collect(); + } + + $groupedLaporan[$kategori]->push((object)[ + '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)[ + 'Tanggal' => $item->Tanggal, + 'keterangan' => $item->keterangan, + 'kode' => $this->generateKode($kategori), + 'debit' => $item->$uangMasukField ?? 0, + 'kredit' => $item->$uangKeluarField ?? 0 + ]); + } + } + } + + // Generate PDF + $html = ' + + + + Buku Besar + + + +

Buku Besar

+

Periode: ' . date('F Y', strtotime($startDate)) . '

'; + + foreach($groupedLaporan as $kategori => $items) { + $kodeAkun = $items->first()->kode ?? '-'; + $html .= ' +
+ Nama Akun: ' . $kategori . ' + Kode Akun: ' . $kodeAkun . ' +
+ + + + + + + + + + + + + '; + + $runningBalance = 0; + $accountType = substr($kodeAkun, 0, 3); + + foreach($items->sortBy('Tanggal') as $item) { + if (in_array($accountType, ['111', '112']) || in_array($accountType, ['251', '252'])) { + $runningBalance = $runningBalance + $item->debit - $item->kredit; + } else { + $runningBalance = $runningBalance - $item->debit + $item->kredit; + } + + $html .= ' + + + + + + + + '; + } + + $html .= ' + +
TanggalKeteranganRefDebitKreditSaldo
' . date('d/m/Y', strtotime($item->Tanggal)) . '' . $item->keterangan . '-' . ($item->debit > 0 ? number_format($item->debit, 0, ',', '.') : '-') . '' . ($item->kredit > 0 ? number_format($item->kredit, 0, ',', '.') : '-') . '' . number_format($runningBalance, 0, ',', '.') . '
'; + } + + $html .= ' + + '; + + $pdf = PDF::loadHTML($html); + return $pdf->download('buku-besar-'.date('Y-m-d').'.pdf'); + } catch (\Exception $e) { + return redirect()->back()->with('error', 'Gagal mengekspor PDF: ' . $e->getMessage()); + } } } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 2c1229e..3876d7a 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -12,16 +12,41 @@ class UserController extends Controller { public function index() { - $users = User::all(); - return view('User', compact('users')); + return view('User'); } - public function getData() + public function getData(Request $request) { - $users = User::all(); + $query = User::select('id', 'nama', 'email', 'tipe_pengguna'); + + // Apply type filter + if ($request->has('type') && !empty($request->type)) { + $query->where('tipe_pengguna', $request->type); + } + + // Apply search filter + if ($request->has('search') && !empty($request->search)) { + $search = $request->search; + $query->where(function($q) use ($search) { + $q->where('nama', 'like', "%{$search}%") + ->orWhere('email', 'like', "%{$search}%"); + }); + } + + $users = $query->get(); return response()->json($users); } + public function show($id) + { + try { + $user = User::findOrFail($id); + return response()->json($user); + } catch (\Exception $e) { + return response()->json(['error' => 'User tidak ditemukan'], 404); + } + } + public function create() { return view('TambahAkun'); @@ -34,22 +59,13 @@ public function store(Request $request) 'email' => ['required', 'string', 'email', 'max:255', 'unique:penggunas'], 'password' => ['required', Password::min(8)->mixedCase()->numbers()], 'tipe_pengguna' => ['required', 'in:owner,karyawan'] - ], [ - 'nama.required' => 'Nama harus diisi', - 'nama.max' => 'Nama maksimal 255 karakter', - 'email.required' => 'Email harus diisi', - 'email.email' => 'Format email tidak valid', - 'email.unique' => 'Email sudah terdaftar', - 'password.required' => 'Password harus diisi', - 'password.min' => 'Password minimal 8 karakter', - 'tipe_pengguna.required' => 'Tipe pengguna harus dipilih', - 'tipe_pengguna.in' => 'Tipe pengguna tidak valid' ]); if ($validator->fails()) { - return redirect()->back() - ->withErrors($validator) - ->withInput(); + return response()->json([ + 'success' => false, + 'message' => $validator->errors()->first() + ], 422); } try { @@ -60,12 +76,15 @@ public function store(Request $request) 'tipe_pengguna' => $request->tipe_pengguna ]); - return redirect()->route('User.index') - ->with('success', 'Akun berhasil ditambahkan!'); + return response()->json([ + 'success' => true, + 'message' => 'User berhasil ditambahkan' + ]); } catch (\Exception $e) { - return redirect()->back() - ->with('error', 'Gagal menambahkan akun. ' . $e->getMessage()) - ->withInput(); + return response()->json([ + 'success' => false, + 'message' => 'Gagal menambahkan user: ' . $e->getMessage() + ], 500); } } @@ -82,21 +101,13 @@ public function update(Request $request, $id) 'email' => ['required', 'string', 'email', 'max:255', 'unique:penggunas,email,'.$id], 'password' => ['nullable', Password::min(8)->mixedCase()->numbers()], 'tipe_pengguna' => ['required', 'in:owner,karyawan'] - ], [ - 'nama.required' => 'Nama harus diisi', - 'nama.max' => 'Nama maksimal 255 karakter', - 'email.required' => 'Email harus diisi', - 'email.email' => 'Format email tidak valid', - 'email.unique' => 'Email sudah terdaftar', - 'password.min' => 'Password minimal 8 karakter', - 'tipe_pengguna.required' => 'Tipe pengguna harus dipilih', - 'tipe_pengguna.in' => 'Tipe pengguna tidak valid' ]); if ($validator->fails()) { - return redirect()->back() - ->withErrors($validator) - ->withInput(); + return response()->json([ + 'success' => false, + 'message' => $validator->errors()->first() + ], 422); } try { @@ -108,19 +119,21 @@ public function update(Request $request, $id) 'tipe_pengguna' => $request->tipe_pengguna ]; - // Update password hanya jika diisi if ($request->filled('password')) { $data['password'] = Hash::make($request->password); } $user->update($data); - return redirect()->route('User.index') - ->with('success', 'Akun berhasil diperbarui!'); + return response()->json([ + 'success' => true, + 'message' => 'User berhasil diperbarui' + ]); } catch (\Exception $e) { - return redirect()->back() - ->with('error', 'Gagal memperbarui akun. ' . $e->getMessage()) - ->withInput(); + return response()->json([ + 'success' => false, + 'message' => 'Gagal memperbarui user: ' . $e->getMessage() + ], 500); } } @@ -130,11 +143,15 @@ public function destroy($id) $user = User::findOrFail($id); $user->delete(); - return redirect()->route('User.index') - ->with('success', 'Akun berhasil dihapus!'); + return response()->json([ + 'success' => true, + 'message' => 'User berhasil dihapus' + ]); } catch (\Exception $e) { - return redirect()->back() - ->with('error', 'Gagal menghapus akun. ' . $e->getMessage()); + return response()->json([ + 'success' => false, + 'message' => 'Gagal menghapus user: ' . $e->getMessage() + ], 500); } } } \ No newline at end of file diff --git a/resources/views/Laporan.blade.php b/resources/views/Laporan.blade.php index 517bd31..c60cd3e 100644 --- a/resources/views/Laporan.blade.php +++ b/resources/views/Laporan.blade.php @@ -357,10 +357,10 @@
- + Export Excel - + Export PDF
+ + + @endsection \ No newline at end of file diff --git a/resources/views/Rekening.blade.php b/resources/views/Rekening.blade.php index 5db93fe..ba4cc7e 100644 --- a/resources/views/Rekening.blade.php +++ b/resources/views/Rekening.blade.php @@ -165,10 +165,10 @@ function calculateBalancePHP($previousBalance, $debit, $kredit, $accountType) {
- + Export Excel - + Export PDF
- -
-
- - -
-
- - -
-
- - -
-
- - +
- + +
+ + +
+ +
+
- + - - - - - - + + + + + + - +
- - -
- -
- @endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index eb71c25..d30560f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -77,6 +77,8 @@ // Routes untuk Neraca Saldo Route::get('/neracasaldo/filter', [NeracasaldoController::class, 'filter'])->name('neracasaldo.filter'); + Route::get('/neracasaldo/export-excel', [NeracasaldoController::class, 'exportExcel'])->name('neracasaldo.export-excel'); + Route::get('/neracasaldo/export-pdf', [NeracasaldoController::class, 'exportPDF'])->name('neracasaldo.export-pdf'); Route::resource('neracasaldo', NeracasaldoController::class); // Routes untuk Laba Rugi