Files
webstatement/routes/web.php
Daeng Deni Mardaeni 8ee0dd2218 feat(webstatement): implementasi pemrosesan multi account statement berdasarkan stmt_sent_type
- Modifikasi method printStatementRekening untuk mendukung request_type multi_account
- Tambah method processMultiAccountStatement untuk mengambil data account berdasarkan branch_code dan stmt_sent_type
- Tambah method processSingleAccountStatement untuk memisahkan logika single account
- Implementasi GenerateMultiAccountPdfJob untuk generate PDF multiple account secara parallel
- Tambah fungsi generateAccountPdf untuk generate PDF per account dengan Browsershot
- Tambah fungsi createZipFile untuk mengompres multiple PDF menjadi satu ZIP file
- Tambah method downloadMultiAccountZip untuk download ZIP file hasil pemrosesan
- Implementasi validasi stmt_sent_type dengan support JSON array format
- Tambah logging komprehensif untuk monitoring proses multi account
- Tambah error handling dengan database transaction rollback
- Update PrintStatementLog dengan informasi target_accounts dan status pemrosesan
- Tambah rute baru untuk download ZIP file multi account
- Support untuk pemrosesan chunk account untuk optimasi memory usage
- Implementasi status tracking untuk success_count dan failed_count
- Tambah validasi keberadaan account berdasarkan kriteria yang ditentukan
2025-07-09 17:51:57 +07:00

138 lines
7.6 KiB
PHP

<?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;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::middleware(['auth'])->group(function () {
//Route::get('/', [WebstatementController::class, 'index'])->name('webstatement.index');
// Customer routes
Route::get('datatables', [CustomerController::class, 'dataForDatatables'])->name('customer.datatables');
Route::get('export', [CustomerController::class, 'export'])->name('customer.export');
Route::post('delete-multiple', [CustomerController::class, 'deleteMultiple'])->name('deleteMultiple');
Route::resource('customer', CustomerController::class);
Route::prefix('jenis-kartu')->name('jenis-kartu.')->group(function () {
Route::get('datatables', [JenisKartuController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [JenisKartuController::class, 'export'])->name('export');
Route::post('delete-multiple', [JenisKartuController::class, 'deleteMultiple'])->name('deleteMultiple');
});
Route::resource('jenis-kartu', JenisKartuController::class);
Route::prefix('kartu-atm')->name('kartu-atm.')->group(function () {
Route::get('datatables', [KartuAtmController::class, 'dataForDatatables'])->name('datatables');
});
Route::resource('kartu-atm', KartuAtmController::class)->only('index');
Route::prefix('sync-logs')->name('sync-logs.')->group(function () {
Route::get('datatables', [SyncLogsController::class, 'dataForDatatables'])->name('datatables');
Route::get('/download/{id}', [SyncLogsController::class, 'downloadFile'])->name('download');
});
Route::resource('sync-logs', SyncLogsController::class);
Route::prefix('emailblast')->group(function () {
Route::get('/', [EmailBlastController::class, 'index'])->name('emailblast.index');
Route::get('/create', [EmailBlastController::class, 'create'])->name('emailblast.create');
Route::post('/', [EmailBlastController::class, 'store'])->name('emailblast.store');
Route::get('/{id}/view', [EmailBlastController::class, 'view'])->name('emailblast.view');
Route::get('/datatables', [EmailBlastController::class, 'datatables'])->name('emailblast.datatables');
});
// Periode Statement Routes
Route::group(['prefix' => 'periode-statements', 'as' => 'periode-statements.', 'middleware' => ['auth']], function () {
Route::get('/datatables', [PeriodeStatementController::class, 'dataForDatatables'])->name('datatables');
Route::get('/export', [PeriodeStatementController::class, 'export'])->name('export');
// Process, complete, and fail routes
Route::get('/{periodeStatement}/process', 'PeriodeStatementController@process')->name('process');
Route::get('/{periodeStatement}/complete', 'PeriodeStatementController@complete')->name('complete');
Route::post('/{periodeStatement}/fail', 'PeriodeStatementController@fail')->name('fail');
// Authorization routes
Route::get('/pending-authorization', 'PeriodeStatementController@pendingAuthorization')->name('pending-authorization');
Route::get('/{periodeStatement}/authorize', 'PeriodeStatementController@showAuthorize')->name('show-authorize');
Route::post('/{periodeStatement}/authorize', 'PeriodeStatementController@authorize')->name('authorize');
});
Route::resource('periode-statements', PeriodeStatementController::class);
Route::group(['prefix' => 'statements', 'as' => 'statements.', 'middleware' => ['auth']], function () {
Route::get('/datatables', [PrintStatementController::class, 'dataForDatatables'])->name('datatables');
Route::get('/{statement}/download', [PrintStatementController::class, 'download'])->name('download');
Route::post('/{statement}/authorize', [PrintStatementController::class, 'authorize'])->name('authorize');
Route::get('/{statement}/send-email', [PrintStatementController::class, 'sendEmail'])->name('send-email');
});
Route::resource('statements', PrintStatementController::class);
// ATM Transaction Report Routes
Route::group(['prefix' => 'atm-reports', 'as' => 'atm-reports.', 'middleware' => ['auth']], function () {
Route::get('/datatables', [AtmTransactionReportController::class, 'dataForDatatables'])->name('datatables');
Route::get('/{atmReport}/download', [AtmTransactionReportController::class, 'download'])->name('download');
Route::post('/{atmReport}/authorize', [AtmTransactionReportController::class, 'authorize'])->name('authorize');
Route::get('/{atmReport}/send-email', [AtmTransactionReportController::class, 'sendEmail'])->name('send-email');
Route::post('/{atmReport}/retry', [AtmTransactionReportController::class, 'retry'])->name('retry');
});
Route::resource('atm-reports', AtmTransactionReportController::class);
// Email Statement Log Routes
Route::group(['prefix' => 'email-statement-logs', 'as' => 'email-statement-logs.', 'middleware' => ['auth']], function () {
Route::get('/datatables', [EmailStatementLogController::class, 'dataForDatatables'])->name('datatables');
Route::post('/{id}/resend-email', [EmailStatementLogController::class, 'resendEmail'])->name('resend-email');
});
Route::resource('email-statement-logs', EmailStatementLogController::class)->only(['index', 'show']);
});
Route::get('migrasi', [MigrasiController::class, 'index'])->name('migrasi.index');
Route::get('biaya-kartu', [SyncLogsController::class, 'index'])->name('biaya-kartu.index');
Route::get('/stmt-entries/{accountNumber}', [MigrasiController::class, 'getStmtEntryByAccount']);
Route::get('/stmt-entries/{accountNumber}', [PrintStatementController::class, 'generated']);
Route::get('/stmt-export-csv', [WebstatementController::class, 'index'])->name('webstatement.index');
// Route untuk generate PDF
Route::get('/statements/{norek}/pdf/{period?}', [PrintStatementController::class, 'generated'])
->defaults('format', 'pdf')
->name('statements.pdf');
// Route untuk preview PDF
Route::get('/statements/{norek}/preview/{period?}', [PrintStatementController::class, 'previewPdf'])
->name('statements.preview');
Route::prefix('debug')->group(function () {
Route::get('/test-statement',[WebstatementController::class,'printStatementRekening'])->name('webstatement.test');
Route::post('/statement', [DebugStatementController::class, 'debugStatement'])->name('debug.statement');
Route::get('/statements', [DebugStatementController::class, 'listStatements'])->name('debug.statements.list');
});