From 8a7d4f351c8fb58edff61f9b72c0920c6036a446 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 9 Jun 2025 01:53:20 +0700 Subject: [PATCH] feat(webstatement): tambahkan fitur retry laporan transaksi ATM - Menambahkan method baru `retry` pada `AtmTransactionReportController` untuk memproses ulang laporan transaksi ATM: - Mengizinkan retry untuk laporan dengan status `failed` atau `pending`. - Mereset status laporan menjadi `processing` dan membersihkan informasi error sebelumnya. - Dispatch ulang job `GenerateAtmTransactionReportJob`. - Menambahkan mekanisme error handling dengan memperbarui status laporan jika terjadi kegagalan. - Memperbarui view `atm-reports/index.blade.php`: - Menambahkan tombol `Retry Job` pada baris laporan dengan status `failed` atau `pending`. - Menyediakan fungsi JavaScript untuk memproses retry dengan AJAX: - Menampilkan konfirmasi sebelum retry. - Reload halaman setelah retry selesai. - Memperbarui view `atm-reports/show.blade.php`: - Menambahkan tombol `Retry Job` untuk laporan dengan status `failed`, `pending`, atau `completed` yang kehilangan file. - Menampilkan form retry dalam pesan error jika file laporan tidak tersedia. - Memperbarui routing pada `web.php`: - Menambahkan route baru `atm-reports.retry` untuk endpoint retry dengan HTTP POST. - Mendaftarkan ulang command `GenerateAtmTransactionReport` pada provider: - Memastikan job untuk retry sudah terdaftar pada sistem. Signed-off-by: Daeng Deni Mardaeni --- .../AtmTransactionReportController.php | 37 +++++++++++++++++++ app/Providers/WebstatementServiceProvider.php | 6 ++- resources/views/atm-reports/index.blade.php | 25 +++++++++++++ resources/views/atm-reports/show.blade.php | 18 +++++++++ routes/web.php | 15 +++++++- 5 files changed, 98 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/AtmTransactionReportController.php b/app/Http/Controllers/AtmTransactionReportController.php index 67157c5..330c820 100644 --- a/app/Http/Controllers/AtmTransactionReportController.php +++ b/app/Http/Controllers/AtmTransactionReportController.php @@ -292,4 +292,41 @@ class AtmTransactionReportController extends Controller return redirect()->back()->with('error', 'Failed to send email: ' . $e->getMessage()); } } + + /** + * Retry generating the ATM transaction report + */ + public function retry(AtmTransactionReportLog $atmReport) + { + // Check if retry is allowed (only for failed or pending status) + if (!in_array($atmReport->status, ['failed', 'pending'])) { + return back()->with('error', 'Report can only be retried if status is failed or pending.'); + } + + try { + // Reset the report status and clear error message + $atmReport->update([ + 'status' => 'processing', + 'error_message' => null, + 'file_path' => null, + 'file_size' => null, + 'record_count' => null, + 'updated_by' => Auth::id() + ]); + + // Dispatch the job again + GenerateAtmTransactionReportJob::dispatch($atmReport->period, $atmReport->id); + + return back()->with('success', 'ATM Transaction report job has been retried successfully.'); + + } catch (Exception $e) { + $atmReport->update([ + 'status' => 'failed', + 'error_message' => $e->getMessage(), + 'updated_by' => Auth::id() + ]); + + return back()->with('error', 'Failed to retry report generation: ' . $e->getMessage()); + } + } } diff --git a/app/Providers/WebstatementServiceProvider.php b/app/Providers/WebstatementServiceProvider.php index f0f1371..a168c92 100644 --- a/app/Providers/WebstatementServiceProvider.php +++ b/app/Providers/WebstatementServiceProvider.php @@ -6,15 +6,16 @@ use Illuminate\Support\Facades\Blade; use Illuminate\Support\ServiceProvider; use Nwidart\Modules\Traits\PathNamespace; use Illuminate\Console\Scheduling\Schedule; +use Modules\Webstatement\Console\UnlockPdf; use Modules\Webstatement\Console\CombinePdf; use Modules\Webstatement\Console\ConvertHtmlToPdf; use Modules\Webstatement\Console\ExportDailyStatements; -use Modules\Webstatement\Console\ExportPeriodStatements; use Modules\Webstatement\Console\ProcessDailyMigration; +use Modules\Webstatement\Console\ExportPeriodStatements; use Modules\Webstatement\Console\GenerateBiayakartuCommand; use Modules\Webstatement\Jobs\UpdateAtmCardBranchCurrencyJob; +use Modules\Webstatement\Console\GenerateAtmTransactionReport; use Modules\Webstatement\Console\GenerateBiayaKartuCsvCommand; -use Modules\Webstatement\Console\UnlockPdf; class WebstatementServiceProvider extends ServiceProvider { @@ -65,6 +66,7 @@ class WebstatementServiceProvider extends ServiceProvider ConvertHtmlToPdf::class, UnlockPdf::class, ExportPeriodStatements::class, + GenerateAtmTransactionReport::class, ]); } diff --git a/resources/views/atm-reports/index.blade.php b/resources/views/atm-reports/index.blade.php index adcc2a7..9b3dbab 100644 --- a/resources/views/atm-reports/index.blade.php +++ b/resources/views/atm-reports/index.blade.php @@ -241,6 +241,31 @@ `; } + // Di bagian JavaScript untuk action buttons + if (data.status === 'failed' || data.status === 'pending' || (data.status === 'completed' && !data.file_path)) { + buttons += ``; + } + + // Tambahkan function untuk retry + function retryReport(id) { + if (confirm('Are you sure you want to retry generating this report?')) { + $.ajax({ + url: `atm-reports/${id}/retry`, + type: 'POST', + data: { + _token: $('meta[name="csrf-token"]').attr('content') + }, + success: function(response) { + location.reload(); + }, + error: function(xhr) { + alert('Error: ' + xhr.responseJSON.message); + } + }); + } + } buttons += ``; return buttons; }, diff --git a/resources/views/atm-reports/show.blade.php b/resources/views/atm-reports/show.blade.php index 94d3c58..cec9221 100644 --- a/resources/views/atm-reports/show.blade.php +++ b/resources/views/atm-reports/show.blade.php @@ -14,6 +14,15 @@ Download Report @endif + + @if (in_array($atmReport->status, ['failed', 'pending']) || ($atmReport->status === 'completed' && !$atmReport->file_path)) +
+ @csrf + +
+ @endif @@ -91,6 +100,15 @@
@if ($atmReport->file_path)
Path: {{ $atmReport->file_path }}
+ @else +
File not available - +
+ @csrf + +
+
@endif @if ($atmReport->file_size)
Size: {{ number_format($atmReport->file_size / 1024, 2) }} KB
diff --git a/routes/web.php b/routes/web.php index 811130c..2f1dd4d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -8,9 +8,10 @@ use Illuminate\Support\Facades\Route; use Modules\Webstatement\Http\Controllers\KartuAtmController; use Modules\Webstatement\Http\Controllers\MigrasiController; use Modules\Webstatement\Http\Controllers\CustomerController; -use Modules\Webstatement\Http\Controllers\DebugStatementController; use Modules\Webstatement\Http\Controllers\EmailBlastController; use Modules\Webstatement\Http\Controllers\WebstatementController; +use Modules\Webstatement\Http\Controllers\DebugStatementController; +use Modules\Webstatement\Http\Controllers\AtmTransactionReportController; @@ -89,6 +90,18 @@ 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 () { + 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); }); Route::get('migrasi', [MigrasiController::class, 'index'])->name('migrasi.index');