Perubahan yang dilakukan: **Controller LaporanClosingBalanceController:** - Membuat controller baru untuk laporan closing balance dengan method index(), dataForDatatables(), export(), dan show(). - Menggunakan model AccountBalance dengan field actual_balance dan cleared_balance. - Implementasi filter nomor rekening dan rentang tanggal. - Menambahkan DB transaction dan rollback untuk keamanan data. - Logging dan error handling komprehensif untuk proses data dan export. **View laporan-closing-balance/index.blade.php:** - Form filter dengan input nomor rekening dan rentang tanggal (default 30 hari terakhir). - Implementasi DataTables dengan kolom: Nomor Rekening, Periode, Saldo Cleared, Saldo Aktual, Tanggal Update, dan Action. - Tombol Filter, Reset, dan Export CSV. - JavaScript untuk format currency IDR, format tanggal, dan dynamic export URL. - Menggunakan TailwindCSS dan KTDataTable untuk desain yang responsive. **View laporan-closing-balance/show.blade.php:** - Halaman detail per record dengan visual saldo yang menarik (color-coded cards). - Menampilkan Saldo Cleared, Saldo Aktual, dan Selisih Saldo secara otomatis. - Informasi rekening dan periode disertai fitur copy ke clipboard. - Tombol aksi: Kembali, Export, dan Print (dengan print style khusus). - Responsive untuk berbagai ukuran layar. **Routing dan Navigasi:** - Menambahkan routing resource dengan prefix 'laporan-closing-balance' di web.php. - Tambahan route untuk datatables, export, dan show dengan middleware auth. - Breadcrumb dinamis untuk index dan show, menampilkan nomor rekening dan periode. **Penyesuaian Model:** - Menggunakan relasi Account di model AccountBalance melalui account_number. - Menyesuaikan field dari opening_balance ke cleared_balance sesuai skema. - Tetap mempertahankan actual_balance untuk saldo akhir. **Fitur Keamanan dan Performance:** - Input validation dan sanitization untuk semua request. - Pagination dan filter query untuk efisiensi dan mencegah memory overflow. - Error logging dengan context untuk debugging lebih mudah. **User Experience:** - Interface user-friendly dengan feedback visual dan loading state. - Export CSV untuk kebutuhan analisis lebih lanjut. - Print-friendly layout untuk kebutuhan cetak data. - Clipboard integration untuk kemudahan salin data. Tujuan perubahan: - Menyediakan fitur monitoring dan analisis closing balance secara komprehensif di modul Webstatement. - Mempermudah user dalam melihat detail saldo akhir dengan filtering, export, dan cetak yang optimal.
143 lines
5.6 KiB
PHP
143 lines
5.6 KiB
PHP
<?php
|
|
|
|
use Diglactic\Breadcrumbs\Breadcrumbs;
|
|
use Diglactic\Breadcrumbs\Generator as BreadcrumbTrail;
|
|
|
|
// Home
|
|
Breadcrumbs::for('home', function (BreadcrumbTrail $trail) {
|
|
$trail->push('Home', route('dashboard'));
|
|
});
|
|
|
|
// Home > Customers
|
|
Breadcrumbs::for('customer.index', function (BreadcrumbTrail $trail) {
|
|
$trail->parent('home');
|
|
$trail->push('Customers', route('customer.index'));
|
|
});
|
|
|
|
// Home > Customers > Create
|
|
Breadcrumbs::for('customer.create', function (BreadcrumbTrail $trail) {
|
|
$trail->parent('customer.index');
|
|
$trail->push('Create Customer', route('customer.create'));
|
|
});
|
|
|
|
// Home > Customers > [Customer Name]
|
|
Breadcrumbs::for('customer.show', function (BreadcrumbTrail $trail, $customer) {
|
|
$trail->parent('customer.index');
|
|
$trail->push($customer->name, route('customer.show', $customer));
|
|
});
|
|
|
|
// Home > Customers > [Customer Name] > Edit
|
|
Breadcrumbs::for('customer.edit', function (BreadcrumbTrail $trail, $customer) {
|
|
$trail->parent('customer.show', $customer);
|
|
$trail->push('Edit', route('customer.edit', $customer));
|
|
});
|
|
|
|
// Home > Email Blasts
|
|
Breadcrumbs::for('emailblast.index', function (BreadcrumbTrail $trail) {
|
|
$trail->parent('home');
|
|
$trail->push('Email Blasts', route('emailblast.index'));
|
|
});
|
|
|
|
// Home > Email Blasts > Create
|
|
Breadcrumbs::for('emailblast.create', function (BreadcrumbTrail $trail) {
|
|
$trail->parent('emailblast.index');
|
|
$trail->push('Create Email Blast', route('emailblast.create'));
|
|
});
|
|
|
|
// Home > Email Blasts > View Email Blast
|
|
Breadcrumbs::for('emailblast.view', function (BreadcrumbTrail $trail, $emailBlast) {
|
|
$trail->parent('emailblast.index');
|
|
$trail->push('View Email Blast', route('emailblast.view', $emailBlast->id));
|
|
});
|
|
|
|
// Home > Email Blasts > Edit Email Blast
|
|
Breadcrumbs::for('emailblast.edit', function (BreadcrumbTrail $trail, $emailBlast) {
|
|
$trail->parent('emailblast.index');
|
|
$trail->push('Edit Email Blast', route('emailblast.edit', $emailBlast->id));
|
|
});
|
|
|
|
Breadcrumbs::for('jenis-kartu.index', function (BreadcrumbTrail $trail) {
|
|
$trail->parent('home');
|
|
$trail->push('Jenis Kartu', route('jenis-kartu.index'));
|
|
});
|
|
|
|
Breadcrumbs::for('jenis-kartu.create', function (BreadcrumbTrail $trail) {
|
|
$trail->parent('jenis-kartu.index');
|
|
$trail->push('Create Jenis Kartu', route('jenis-kartu.create'));
|
|
});
|
|
|
|
// Home > Jenis Kartus > View Jenis Kartu
|
|
Breadcrumbs::for('jenis-kartu.view', function (BreadcrumbTrail $trail, $data) {
|
|
$trail->parent('jenis-kartu.index');
|
|
$trail->push('View Jenis Kartu', route('jenis-kartu.view', $data->id));
|
|
});
|
|
|
|
// Home > Jenis Kartus > Edit Jenis Kartu
|
|
Breadcrumbs::for('jenis-kartu.edit', function (BreadcrumbTrail $trail, $data) {
|
|
$trail->parent('jenis-kartu.index');
|
|
$trail->push('Edit Jenis Kartu', route('jenis-kartu.edit', $data->id));
|
|
});
|
|
|
|
|
|
Breadcrumbs::for('kartu-atm.index', function (BreadcrumbTrail $trail) {
|
|
$trail->parent('home');
|
|
$trail->push('Kartu ATM', route('kartu-atm.index'));
|
|
});
|
|
|
|
Breadcrumbs::for('sync-logs.index', function (BreadcrumbTrail $trail) {
|
|
$trail->parent('home');
|
|
$trail->push('Sync Logs Biaya Kartu', route('sync-logs.index'));
|
|
});
|
|
|
|
|
|
Breadcrumbs::for('periode-statements.index', function (BreadcrumbTrail $trail) {
|
|
$trail->parent('home');
|
|
$trail->push('Periode Statement', route('periode-statements.index'));
|
|
});
|
|
|
|
Breadcrumbs::for('periode-statements.create', function (BreadcrumbTrail $trail) {
|
|
$trail->parent('periode-statements.index');
|
|
$trail->push('Create Periode Statement', route('periode-statements.create'));
|
|
});
|
|
|
|
Breadcrumbs::for('periode-statements.edit', function (BreadcrumbTrail $trail, $data) {
|
|
$trail->parent('periode-statements.index');
|
|
$trail->push('Create Periode Statement', route('periode-statements.edit', $data));
|
|
});
|
|
|
|
Breadcrumbs::for('periode-statements.show', function (BreadcrumbTrail $trail, $data) {
|
|
$trail->parent('periode-statements.index');
|
|
$trail->push('View Periode Statement', route('periode-statements.show', $data));
|
|
});
|
|
|
|
Breadcrumbs::for('statements.index', function (BreadcrumbTrail $trail) {
|
|
$trail->parent('home');
|
|
$trail->push('Print Stetement', route('statements.index'));
|
|
});
|
|
|
|
|
|
Breadcrumbs::for('atm-reports.index', function (BreadcrumbTrail $trail) {
|
|
$trail->parent('home');
|
|
$trail->push('Laporan Transaksi ATM', route('atm-reports.index'));
|
|
});
|
|
|
|
Breadcrumbs::for('email-statement-logs.index', function (BreadcrumbTrail $trail) {
|
|
$trail->parent('home');
|
|
$trail->push('Statement Email Logs', route('email-statement-logs.index'));
|
|
});
|
|
|
|
// Home > Laporan Closing Balance
|
|
Breadcrumbs::for('laporan-closing-balance.index', function (BreadcrumbTrail $trail) {
|
|
$trail->parent('home');
|
|
$trail->push('Laporan Closing Balance', route('laporan-closing-balance.index'));
|
|
});
|
|
|
|
// Home > Laporan Closing Balance > Detail
|
|
Breadcrumbs::for('laporan-closing-balance.show', function (BreadcrumbTrail $trail, $closingBalance) {
|
|
$trail->parent('laporan-closing-balance.index');
|
|
$trail->push('Detail - ' . $closingBalance->account_number, route('laporan-closing-balance.show', [
|
|
'accountNumber' => $closingBalance->account_number,
|
|
'period' => $closingBalance->period
|
|
]));
|
|
});
|