feat(webstatement): tambahkan fitur monitoring dan peningkatan pengiriman email statement
- **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>
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('print_statement_logs', function (Blueprint $table) {
|
||||
// Field untuk mendukung pengiriman dinamis
|
||||
$table->enum('request_type', ['single_account', 'branch', 'all_branches'])
|
||||
->default('single_account')
|
||||
->after('account_number')
|
||||
->comment('Type of statement request');
|
||||
|
||||
$table->string('batch_id')->nullable()
|
||||
->after('request_type')
|
||||
->comment('Batch ID for bulk operations');
|
||||
|
||||
$table->json('target_accounts')->nullable()
|
||||
->after('batch_id')
|
||||
->comment('JSON array of target account numbers for batch processing');
|
||||
|
||||
$table->integer('total_accounts')->nullable()
|
||||
->after('target_accounts')
|
||||
->comment('Total number of accounts in batch');
|
||||
|
||||
$table->integer('processed_accounts')->default(0)
|
||||
->after('total_accounts')
|
||||
->comment('Number of accounts processed');
|
||||
|
||||
$table->integer('success_count')->default(0)
|
||||
->after('processed_accounts')
|
||||
->comment('Number of successful email sends');
|
||||
|
||||
$table->integer('failed_count')->default(0)
|
||||
->after('success_count')
|
||||
->comment('Number of failed email sends');
|
||||
|
||||
$table->enum('status', ['pending', 'processing', 'completed', 'failed'])
|
||||
->default('pending')
|
||||
->after('failed_count')
|
||||
->comment('Overall status of the request');
|
||||
|
||||
$table->timestamp('started_at')->nullable()
|
||||
->after('status')
|
||||
->comment('When processing started');
|
||||
|
||||
$table->timestamp('completed_at')->nullable()
|
||||
->after('started_at')
|
||||
->comment('When processing completed');
|
||||
|
||||
$table->text('error_message')->nullable()
|
||||
->after('completed_at')
|
||||
->comment('Error message if processing failed');
|
||||
|
||||
// Ubah account_number menjadi nullable untuk request batch
|
||||
$table->string('account_number')->nullable()->change();
|
||||
|
||||
// Index untuk performa
|
||||
$table->index(['request_type', 'status']);
|
||||
$table->index(['batch_id']);
|
||||
$table->index(['branch_code', 'request_type']);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('print_statement_logs', function (Blueprint $table) {
|
||||
$table->dropColumn([
|
||||
'request_type',
|
||||
'batch_id',
|
||||
'target_accounts',
|
||||
'total_accounts',
|
||||
'processed_accounts',
|
||||
'success_count',
|
||||
'failed_count',
|
||||
'status',
|
||||
'started_at',
|
||||
'completed_at',
|
||||
'error_message'
|
||||
]);
|
||||
|
||||
$table->string('account_number')->nullable(false)->change();
|
||||
});
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user