feat(webstatement): optimalkan validasi, logging, dan UI pada request statement
- **Peningkatan Validasi:**
- Menambahkan validasi kompleks pada field `account_number` untuk memastikan input wajib jika `stmt_sent_type` tidak diisi.
- Validasi baru untuk `stmt_sent_type` mendukung array nilai dengan parameter `in` yang diperbolehkan.
- Menambahkan pengecekan duplikasi pada `PrintStatementRequest` dengan filter tambahan `user_id` untuk scope yang lebih jelas.
- **Peningkatan Logging:**
- Mengganti penggunaan `\Log` dengan `Log` untuk konsistensi namespace.
- Menambahkan logging user pada query statement log di controller.
- Logging lebih terperinci pada proses ekspor dan error handling.
- **Perubahan UI pada Form `statements/index`:**
- Menambahkan highlight warna merah pada field input yang memiliki error validasi (`border-danger`, `bg-danger-light`).
- Memperbaiki tampilan dropdown untuk `branch_id` dan `stmt_sent_type`, termasuk pesan error yang lebih spesifik.
- Menghapus validasi wajib pada field `stmt_sent_type` dan menambah fleksibilitas form pengisian.
- **Optimalisasi Query Backend:**
- Menambah filter `whereNotNull('user_id')` pada query `PrintStatementLog` untuk meminimalisir data invalid.
- **Updated Blade Template:**
- Tombol dan validasi form lebih ramah pengguna dengan feedback langsung.
- Menambahkan badge status styling untuk kolom status otorisasi di datatable.
- Dinamika field seperti dropdown bebas error dalam kondisi tertentu.
Perubahan ini meningkatkan keakuratan validasi, logging proses lebih rinci untuk debugging, dan memberikan pengalaman pengguna yang lebih baik pada interface request statement.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
This commit is contained in:
@@ -23,7 +23,8 @@
|
||||
@if ($multiBranch)
|
||||
<div class="form-group">
|
||||
<label class="form-label required" for="branch_id">Branch/Cabang</label>
|
||||
<select class="input form-control tomselect @error('branch_id') is-invalid @enderror"
|
||||
<select
|
||||
class="input form-control tomselect @error('branch_id') border-danger bg-danger-light @enderror"
|
||||
id="branch_id" name="branch_id" required>
|
||||
<option value="">Pilih Branch/Cabang</option>
|
||||
@foreach ($branches as $branchOption)
|
||||
@@ -34,7 +35,7 @@
|
||||
@endforeach
|
||||
</select>
|
||||
@error('branch_id')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
<div class="text-sm alert text-danger">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
@else
|
||||
@@ -47,9 +48,10 @@
|
||||
@endif
|
||||
|
||||
<div class="form-group">
|
||||
<label class="form-label required" for="stmt_sent_type">Statement Type</label>
|
||||
<select class="select tomselect @error('stmt_sent_type') is-invalid @enderror"
|
||||
id="stmt_sent_type" name="stmt_sent_type[]" multiple required>
|
||||
<label class="form-label" for="stmt_sent_type">Statement Type</label>
|
||||
<select
|
||||
class="select tomselect @error('stmt_sent_type') border-danger bg-danger-light @enderror"
|
||||
id="stmt_sent_type" name="stmt_sent_type[]" multiple>
|
||||
<option value="ALL"
|
||||
{{ in_array('ALL', old('stmt_sent_type', $statement->stmt_sent_type ?? [])) ? 'selected' : '' }}>
|
||||
ALL
|
||||
@@ -76,27 +78,29 @@
|
||||
</option>
|
||||
</select>
|
||||
@error('stmt_sent_type')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
<div class="text-sm alert text-danger">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="form-label required" for="account_number">Account Number</label>
|
||||
<input type="text" class="input form-control @error('account_number') is-invalid @enderror"
|
||||
<label class="form-label" for="account_number">Account Number</label>
|
||||
<input type="text"
|
||||
class="input form-control @error('account_number') border-danger bg-danger-light @enderror"
|
||||
id="account_number" name="account_number"
|
||||
value="{{ old('account_number', $statement->account_number ?? '') }}" required>
|
||||
value="{{ old('account_number', $statement->account_number ?? '') }}">
|
||||
@error('account_number')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
<div class="text-sm alert text-danger">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="email">Email</label>
|
||||
<input type="email" class="input form-control @error('email') is-invalid @enderror"
|
||||
<input type="email"
|
||||
class="input form-control @error('email') border-danger bg-danger-light @enderror"
|
||||
id="email" name="email" value="{{ old('email', $statement->email ?? '') }}"
|
||||
placeholder="Optional email for send statement">
|
||||
@error('email')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
<div class="text-sm alert text-danger">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
@@ -369,6 +373,22 @@
|
||||
return fromPeriod + toPeriod;
|
||||
},
|
||||
},
|
||||
authorization_status: {
|
||||
title: 'Status',
|
||||
render: (item, data) => {
|
||||
let statusClass = 'badge badge-light-primary';
|
||||
|
||||
if (data.authorization_status === 'approved') {
|
||||
statusClass = 'badge badge-light-success';
|
||||
} else if (data.authorization_status === 'rejected') {
|
||||
statusClass = 'badge badge-light-danger';
|
||||
} else if (data.authorization_status === 'pending') {
|
||||
statusClass = 'badge badge-light-warning';
|
||||
}
|
||||
|
||||
return `<span class="${statusClass}">${data.authorization_status}</span>`;
|
||||
},
|
||||
},
|
||||
is_available: {
|
||||
title: 'Available',
|
||||
render: (item, data) => {
|
||||
|
||||
Reference in New Issue
Block a user