Files
webstatement/resources/views/email-statement-logs/show.blade.php
Daeng Deni Mardaeni 9199a4d748 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>
2025-06-11 09:57:09 +07:00

177 lines
8.7 KiB
PHP

@extends('layouts.main')
@section('title', 'Detail Log Pengiriman Email Statement')
@section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName(), $log) }}
@endsection
@section('content')
<div class="container-fluid">
<div class="row">
<div class="col-md-8">
<div class="card">
<div class="card-header">
<h3 class="card-title">Detail Log Pengiriman Email Statement</h3>
<div class="card-toolbar">
<a href="{{ route('email-statement-logs.index') }}" class="btn btn-sm btn-light">
<i class="text-base ki-filled ki-black-left"></i>
Kembali
</a>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-6">
<table class="table table-borderless">
<tr>
<td class="fw-bold">ID Log:</td>
<td>{{ $log->id }}</td>
</tr>
<tr>
<td class="fw-bold">Branch:</td>
<td>{{ $log->branch->name ?? 'N/A' }} ({{ $log->branch_code }})</td>
</tr>
<tr>
<td class="fw-bold">No. Rekening:</td>
<td>{{ $log->account_number }}</td>
</tr>
<tr>
<td class="fw-bold">Periode:</td>
<td>{{ $log->period_display }}</td>
</tr>
<tr>
<td class="fw-bold">Email Tujuan:</td>
<td>{{ $log->email }}</td>
</tr>
<tr>
<td class="fw-bold">Status Email:</td>
<td>
@if ($log->email_sent_at)
<span class="badge badge-success">Terkirim</span>
@else
<span class="badge badge-warning">Pending</span>
@endif
</td>
</tr>
</table>
</div>
<div class="col-md-6">
<table class="table table-borderless">
<tr>
<td class="fw-bold">Tanggal Kirim:</td>
<td>{{ $log->email_sent_at ? $log->email_sent_at->format('d/m/Y H:i:s') : '-' }}
</td>
</tr>
<tr>
<td class="fw-bold">Status Otorisasi:</td>
<td>
@php
$badgeClass = 'badge-secondary';
if ($log->authorization_status === 'approved') {
$badgeClass = 'badge-success';
} elseif ($log->authorization_status === 'rejected') {
$badgeClass = 'badge-danger';
} elseif ($log->authorization_status === 'pending') {
$badgeClass = 'badge-warning';
}
@endphp
<span
class="badge {{ $badgeClass }}">{{ ucfirst($log->authorization_status) }}</span>
</td>
</tr>
<tr>
<td class="fw-bold">Statement Tersedia:</td>
<td>
@if ($log->is_available)
<span class="badge badge-success">Ya</span>
@else
<span class="badge badge-danger">Tidak</span>
@endif
</td>
</tr>
<tr>
<td class="fw-bold">User Pembuat:</td>
<td>{{ $log->user->name ?? 'N/A' }}</td>
</tr>
<tr>
<td class="fw-bold">Tanggal Dibuat:</td>
<td>{{ $log->created_at->format('d/m/Y H:i:s') }}</td>
</tr>
<tr>
<td class="fw-bold">Terakhir Update:</td>
<td>{{ $log->updated_at->format('d/m/Y H:i:s') }}</td>
</tr>
</table>
</div>
</div>
@if ($log->remarks)
<div class="mt-4 row">
<div class="col-12">
<h5>Catatan:</h5>
<div class="alert alert-info">
{{ $log->remarks }}
</div>
</div>
</div>
@endif
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
<div class="card-header">
<h3 class="card-title">Aksi</h3>
</div>
<div class="card-body">
@if ($log->is_available && $log->authorization_status === 'approved')
<button onclick="resendEmail({{ $log->id }})" class="mb-3 btn btn-primary w-100">
<i class="text-base ki-filled ki-message-text-2"></i>
Kirim Ulang Email
</button>
@endif
@if ($log->is_available)
<a href="{{ route('statements.download', $log->id) }}" class="mb-3 btn btn-success w-100">
<i class="text-base ki-filled ki-file-down"></i>
Download Statement
</a>
@endif
<a href="{{ route('statements.show', $log->id) }}" class="btn btn-info w-100">
<i class="text-base ki-filled ki-eye"></i>
Lihat Statement Log
</a>
</div>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script>
// Function untuk resend email
function resendEmail(logId) {
if (confirm('Apakah Anda yakin ingin mengirim ulang email statement ini?')) {
$.ajax({
url: '{{ route('email-statement-logs.resend-email', ':id') }}'.replace(':id', logId),
type: 'POST',
data: {
_token: '{{ csrf_token() }}'
},
success: function(response) {
alert('Email statement berhasil dijadwalkan untuk dikirim ulang.');
location.reload();
},
error: function(xhr) {
alert('Gagal mengirim ulang email statement.');
}
});
}
}
</script>
@endpush