feat(webstatement): tambah fitur Laporan Closing Balance

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.
This commit is contained in:
Daeng Deni Mardaeni
2025-07-15 09:32:01 +07:00
parent 2dd8024586
commit 35bb173056
5 changed files with 883 additions and 13 deletions

View File

@@ -125,3 +125,18 @@
$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
]));
});

View File

@@ -1,18 +1,20 @@
<?php
use Illuminate\Support\Facades\Route;
use Modules\Webstatement\Http\Controllers\PeriodeStatementController;
use Modules\Webstatement\Http\Controllers\PrintStatementController;
use Modules\Webstatement\Http\Controllers\SyncLogsController;
use Modules\Webstatement\Http\Controllers\JenisKartuController;
use Modules\Webstatement\Http\Controllers\KartuAtmController;
use Modules\Webstatement\Http\Controllers\MigrasiController;
use Modules\Webstatement\Http\Controllers\CustomerController;
use Modules\Webstatement\Http\Controllers\EmailBlastController;
use Modules\Webstatement\Http\Controllers\WebstatementController;
use Modules\Webstatement\Http\Controllers\DebugStatementController;
use Modules\Webstatement\Http\Controllers\EmailStatementLogController;
use Modules\Webstatement\Http\Controllers\AtmTransactionReportController;
use Modules\Webstatement\Http\Controllers\{
PeriodeStatementController,
PrintStatementController,
SyncLogsController,
JenisKartuController,
KartuAtmController,
CustomerController,
EmailBlastController,
WebstatementController,
DebugStatementController,
EmailStatementLogController,
AtmTransactionReportController,
LaporanClosingBalanceController
};
@@ -91,7 +93,7 @@ Route::middleware(['auth'])->group(function () {
});
Route::resource('statements', PrintStatementController::class);
// ATM Transaction Report Routes
Route::group(['prefix' => 'atm-reports', 'as' => 'atm-reports.', 'middleware' => ['auth']], function () {
@@ -110,6 +112,14 @@ Route::middleware(['auth'])->group(function () {
Route::post('/{id}/resend-email', [EmailStatementLogController::class, 'resendEmail'])->name('resend-email');
});
Route::resource('email-statement-logs', EmailStatementLogController::class)->only(['index', 'show']);
// Laporan Closing Balance Routes
Route::group(['prefix' => 'laporan-closing-balance', 'as' => 'laporan-closing-balance.', 'middleware' => ['auth']], function () {
Route::get('/datatables', [LaporanClosingBalanceController::class, 'dataForDatatables'])->name('datatables');
Route::get('/export', [LaporanClosingBalanceController::class, 'export'])->name('export');
Route::get('/{accountNumber}/{period}', [LaporanClosingBalanceController::class, 'show'])->name('show');
});
Route::resource('laporan-closing-balance', LaporanClosingBalanceController::class)->only(['index']);
});
Route::get('/stmt-export-csv', [WebstatementController::class, 'index'])->name('webstatement.index');