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');