- **Perbaikan dan Penambahan Komando:**
- Memberikan komando baru `webstatement:check-progress` untuk memantau progres pengiriman email statement.
- Menampilkan informasi seperti `Log ID`, `Batch ID`, `Request Type`, status, hingga persentase progress.
- Menangani secara detail jumlah akun yang diproses, sukses, gagal, dan kalkulasi tingkat keberhasilan.
- Menyediakan penanganan error jika log tidak ditemukan atau terjadi kegagalan lainnya.
- Memperluas komando `webstatement:send-email`:
- Mendukung pengiriman berdasarkan `single account`, `branch`, atau `all branches`.
- Menambahkan validasi parameter `type` (`single`, `branch`, `all`) dan input spesifik seperti `--account` atau `--branch` untuk mode tertentu.
- Melakukan pencatatan log awal dengan metadata lengkap seperti `request_type`, `batch_id`, dan status.
- **Peningkatan Logika Proses Backend:**
- Menambahkan fungsi `createLogEntry` untuk mencatat log pengiriman email statement secara dinamis berdasarkan tipe request.
- Menyediakan reusable method seperti `validateParameters` dan `determineRequestTypeAndTarget` untuk mempermudah pengelolaan parameter pengiriman.
- Memberikan feedback dan panduan kepada pengguna mengenai ID log dan komando monitoring (`webstatement:check-progress`).
- **Penambahan Controller dan Fitur UI:**
- Menambahkan controller baru `EmailStatementLogController`:
- Mendukung pengelolaan log seperti list, detail, dan retry untuk pengiriman ulang email statement.
- Menyediakan fitur pencarian, filter, dan halaman data log yang responsif menggunakan datatable.
- Menambahkan kemampuan resend email untuk log dengan status `completed` atau `failed`.
- Mengimplementasikan UI untuk log pengiriman:
- Halaman daftar monitoring dengan filter berdasarkan branch, account number, request type, status, dan tanggal.
- Menampilkan kemajuan, tingkat keberhasilan, serta tombol aksi seperti detail dan pengiriman ulang.
- **Peningkatan Model dan Validasi:**
- Menyesuaikan model `PrintStatementLog` untuk mendukung lebih banyak atribut seperti `processed_accounts`, `success_count`, `failed_count`, `request_type`, serta metode utilitas seperti `getProgressPercentage()` dan `getSuccessRate()`.
- Memvalidasi parameter input lebih mendalam agar kesalahan dapat diminimalisasi di awal proses.
- **Peningkatan pada View dan Feedback Pengguna:**
- Menambah daftar command berguna untuk user di interface log:
- Status antrian dengan `php artisan queue:work`.
- Monitoring menggunakan komando custom yang baru ditambahkan.
- **Perbaikan Logging dan Error Handling:**
- Menambahkan logging komprehensif pada semua proses, termasuk batch pengiriman ulang.
- Memastikan rollback pada database jika terjadi error melalui transaksi pada critical path.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
55 lines
1.8 KiB
PHP
55 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace Modules\Webstatement\Console;
|
|
|
|
use Illuminate\Console\Command;
|
|
use Modules\Webstatement\Models\PrintStatementLog;
|
|
|
|
class CheckEmailProgressCommand extends Command
|
|
{
|
|
protected $signature = 'webstatement:check-progress {log-id : ID log untuk dicek progressnya}';
|
|
protected $description = 'Cek progress pengiriman email statement';
|
|
|
|
public function handle()
|
|
{
|
|
$logId = $this->argument('log-id');
|
|
|
|
try {
|
|
$log = PrintStatementLog::findOrFail($logId);
|
|
|
|
$this->info("📊 Progress Pengiriman Email Statement");
|
|
$this->line("Log ID: {$log->id}");
|
|
$this->line("Batch ID: {$log->batch_id}");
|
|
$this->line("Request Type: {$log->request_type}");
|
|
$this->line("Status: {$log->status}");
|
|
|
|
if ($log->total_accounts) {
|
|
$this->line("Total Accounts: {$log->total_accounts}");
|
|
$this->line("Processed: {$log->processed_accounts}");
|
|
$this->line("Success: {$log->success_count}");
|
|
$this->line("Failed: {$log->failed_count}");
|
|
$this->line("Progress: {$log->getProgressPercentage()}%");
|
|
$this->line("Success Rate: {$log->getSuccessRate()}%");
|
|
}
|
|
|
|
if ($log->started_at) {
|
|
$this->line("Started: {$log->started_at}");
|
|
}
|
|
|
|
if ($log->completed_at) {
|
|
$this->line("Completed: {$log->completed_at}");
|
|
}
|
|
|
|
if ($log->error_message) {
|
|
$this->error("Error: {$log->error_message}");
|
|
}
|
|
|
|
} catch (\Exception $e) {
|
|
$this->error("Log dengan ID {$logId} tidak ditemukan.");
|
|
return Command::FAILURE;
|
|
}
|
|
|
|
return Command::SUCCESS;
|
|
}
|
|
}
|