### Perubahan Utama - Tambah validasi untuk memverifikasi bahwa nomor rekening sesuai dengan cabang pengguna. - Cegah transaksi untuk rekening yang terdaftar di cabang khusus (`ID0019999`). - Perbaikan sistem untuk menangani kasus rekening yang tidak ditemukan di database. ### Detail Perubahan 1. **Validasi Cabang Rekening**: - Tambah pengecekan untuk memastikan rekening yang dimasukkan adalah milik cabang pengguna (non-multi-branch). - Blokir transaksi jika rekening terdaftar pada cabang khusus (`ID0019999`) dengan menampilkan pesan error yang relevan. - Tambahkan pesan error jika nomor rekening tidak ditemukan dalam sistem. 2. **Update Logika Penyimpanan**: - Tambahkan validasi untuk mengisi kolom `branch_code` secara otomatis berdasarkan informasi rekening terkait. - Otomatis atur nilai awal `authorization_status` menjadi `approved`. 3. **Penghapusan Atribut Tidak Digunakan**: - Hapus form `branch_code` dari view terkait (`index.blade.php`) karena sekarang diisi secara otomatis berdasarkan data rekening. 4. **Perbaikan View dan Logika Terkait Status Otorisasi**: - Hapus logic dan elemen UI terkait `authorization_status` di halaman statement (`index.blade.php` dan `show.blade.php`). - Simplifikasi tampilan untuk hanya menampilkan informasi yang tersedia dan relevan. 5. **Optimasi Query Data Cabang**: - Update query untuk memfilter cabang berdasarkan kondisi `customer_company` dan mengecualikan kode cabang khusus. 6. **Penyesuaian Struktur Request**: - Hapus validasi terkait `branch_code` di `PrintStatementRequest` karena tidak lagi relevan. 7. **Log Aktivitas dan Kesalahan**: - Tambahkan log untuk mencatat aktivitas seperti validasi rekening dan penyimpanan batch data. - Penanganan lebih baik untuk logging jika terjadi error saat validasi nomor rekening atau penyimpanan statement. ### Manfaat Perubahan - Meningkatkan akurasi data cabang dan validasi rekening sebelum penyimpanan. - Menyederhanakan antarmuka pengguna dengan menghapus field input redundant. - Memastikan proses menjadi lebih transparan dengan penanganan error yang lebih baik. Langkah ini diterapkan untuk meningkatkan keamanan dan keandalan sistem dalam memverifikasi dan memproses pemintaan statement.
123 lines
4.2 KiB
PHP
123 lines
4.2 KiB
PHP
<?php
|
|
|
|
namespace Modules\Webstatement\Http\Requests;
|
|
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
use Modules\Webstatement\Models\PrintStatementLog as Statement;
|
|
|
|
class PrintStatementRequest extends FormRequest
|
|
{
|
|
/**
|
|
* Determine if the user is authorized to make this request.
|
|
*/
|
|
public function authorize(): bool
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Get the validation rules that apply to the request.
|
|
*/
|
|
public function rules(): array
|
|
{
|
|
$rules = [
|
|
'account_number' => ['required', 'string'],
|
|
'is_period_range' => ['sometimes', 'boolean'],
|
|
'email' => ['nullable', 'email'],
|
|
'email_sent_at' => ['nullable', 'timestamp'],
|
|
'request_type' => ['sometimes', 'string', 'in:single_account,branch,all_branches'],
|
|
'batch_id' => ['nullable', 'string'],
|
|
'period_from' => [
|
|
'required',
|
|
'string',
|
|
'regex:/^\d{6}$/', // YYYYMM format
|
|
// Prevent duplicate requests with same account number and period
|
|
function ($attribute, $value, $fail) {
|
|
$query = Statement::where('account_number', $this->input('account_number'))
|
|
->where('authorization_status', '!=', 'rejected')
|
|
->where('period_from', $value);
|
|
|
|
// If this is an update request, exclude the current record
|
|
if ($this->route('statement')) {
|
|
$query->where('id', '!=', $this->route('statement'));
|
|
}
|
|
|
|
// If period_to is provided, check for overlapping periods
|
|
if ($this->input('period_to')) {
|
|
$query->where(function ($q) use ($value) {
|
|
$q->where('period_from', '<=', $this->input('period_to'))
|
|
->where('period_to', '>=', $value);
|
|
});
|
|
}
|
|
|
|
if ($query->exists()) {
|
|
$fail('A statement request with this account number and period already exists.');
|
|
}
|
|
}
|
|
],
|
|
];
|
|
|
|
// If it's a period range, require period_to
|
|
if ($this->input('period_to')) {
|
|
$rules['period_to'] = [
|
|
'required',
|
|
'string',
|
|
'regex:/^\d{6}$/', // YYYYMM format
|
|
'gte:period_from' // period_to must be greater than or equal to period_from
|
|
];
|
|
}
|
|
|
|
return $rules;
|
|
}
|
|
|
|
/**
|
|
* Get custom messages for validator errors.
|
|
*/
|
|
public function messages(): array
|
|
{
|
|
return [
|
|
'account_number.required' => 'Account number is required',
|
|
'period_from.required' => 'Period is required',
|
|
'period_from.regex' => 'Period must be in YYYYMM format',
|
|
'period_to.required' => 'End period is required for period range',
|
|
'period_to.regex' => 'End period must be in YYYYMM format',
|
|
'period_to.gte' => 'End period must be after or equal to start period',
|
|
'request_type.in' => 'Request type must be single_account, branch, or all_branches',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Prepare the data for validation.
|
|
*/
|
|
protected function prepareForValidation(): void
|
|
{
|
|
if ($this->has('period_from')) {
|
|
// Convert to YYYYMM format
|
|
$this->merge([
|
|
'period_from' => substr($this->period_from, 0, 4) . substr($this->period_from, 5, 2),
|
|
]);
|
|
}
|
|
|
|
if ($this->has('period_to')) {
|
|
// Convert to YYYYMM format
|
|
$this->merge([
|
|
'period_to' => substr($this->period_to, 0, 4) . substr($this->period_to, 5, 2),
|
|
]);
|
|
}
|
|
|
|
// Convert is_period_range to boolean if it exists
|
|
if ($this->has('period_to')) {
|
|
$this->merge([
|
|
'is_period_range' => true,
|
|
]);
|
|
}
|
|
|
|
// Set default request_type if not provided
|
|
if (!$this->has('request_type')) {
|
|
$this->merge([
|
|
'request_type' => 'single_account',
|
|
]);
|
|
}
|
|
}
|
|
}
|