Menambahkan field total_pembukuan ke dalam sistem NOC untuk mendukung pencatatan pembukuan yang lebih akurat. Perubahan yang dilakukan: - Menambahkan migration untuk field total_pembukuan di tabel noc dengan tipe decimal(10,2) - Menambahkan total_pembukuan ke dalam fillable array di model Noc - Mengintegrasikan field total_pembukuan ke dalam NocController untuk proses store dan update - Menambahkan input field "Jumlah Pembukuan" di form NOC dengan validasi error handling - Mengubah label "Nominal Bayar" menjadi "Jumlah Yang Harus Disetor" untuk kejelasan - Mengubah label "Nominal Diterima" menjadi "Jumlah Yang Disetor" untuk konsistensi - Mengubah title menu dari "Pembayaran" menjadi "Pembukuan" di module.json - Menambahkan readonly attribute pada field total_pembukuan ketika sudah ada memo - Mengimplementasikan old() helper untuk mempertahankan nilai input saat validation error - Menambahkan placeholder text "Masukkan total pembukuan" untuk user guidance
155 lines
6.2 KiB
PHP
155 lines
6.2 KiB
PHP
<?php
|
|
|
|
namespace Modules\Lpj\Http\Requests;
|
|
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
|
|
/**
|
|
* Form Request untuk validasi data NOC (Notice of Completion)
|
|
*/
|
|
class NocRequest extends FormRequest
|
|
{
|
|
/**
|
|
* Konstanta untuk jenis file yang diizinkan
|
|
*/
|
|
private const ALLOWED_FILE_TYPES = 'pdf,jpg,jpeg,png';
|
|
|
|
/**
|
|
* Konstanta untuk ukuran file maksimum (dalam KB)
|
|
*/
|
|
private const MAX_FILE_SIZE = 10240;
|
|
|
|
/**
|
|
* Menentukan apakah pengguna berwenang untuk melakukan request ini
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function authorize()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Mengumpulkan semua aturan validasi
|
|
*
|
|
* @return array
|
|
*/
|
|
public function rules()
|
|
{
|
|
return array_merge(
|
|
$this->getBasicInfoRules(),
|
|
$this->getPaymentRules(),
|
|
$this->getSettlementRules(),
|
|
$this->getAuthorizationRules(),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Aturan validasi untuk informasi dasar
|
|
*
|
|
* @return array
|
|
*/
|
|
private function getBasicInfoRules()
|
|
{
|
|
return [
|
|
'permohonan_id' => 'required|exists:permohonan,id',
|
|
'persetujuan_penawaran_id' => 'required|exists:persetujuan_penawaran,id',
|
|
'status' => 'nullable|boolean',
|
|
'created_by' => 'nullable|exists:users,id',
|
|
'updated_by' => 'nullable|exists:users,id',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Aturan validasi untuk data pembayaran
|
|
*
|
|
* @return array
|
|
*/
|
|
private function getPaymentRules()
|
|
{
|
|
$fileRule = 'nullable|file|mimes:' . self::ALLOWED_FILE_TYPES . '|max:' . self::MAX_FILE_SIZE;
|
|
|
|
return [
|
|
'total_harus_bayar' => 'nullable|numeric|min:0',
|
|
'nominal_bayar' => 'nullable|numeric|min:0',
|
|
'total_pembukuan' => 'nullable|numeric|min:0',
|
|
'bukti_ksl' => $fileRule,
|
|
'bukti_bayar' => $fileRule,
|
|
'status_bayar' => 'nullable|boolean',
|
|
'tanggal_pembayaran' => 'nullable|date',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Aturan validasi untuk data penyelesaian
|
|
*
|
|
* @return array
|
|
*/
|
|
private function getSettlementRules()
|
|
{
|
|
$fileRule = 'nullable|file|mimes:' . self::ALLOWED_FILE_TYPES . '|max:' . self::MAX_FILE_SIZE;
|
|
|
|
return [
|
|
'nominal_penyelesaian' => 'nullable|numeric|min:0',
|
|
'status_penyelesaian' => 'nullable|boolean',
|
|
'tanggal_penyelesaian' => 'nullable|date',
|
|
'bukti_penyelesaian' => $fileRule,
|
|
'memo_penyelesaian' => $fileRule,
|
|
'catatan_noc' => 'nullable|string',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Aturan validasi untuk otorisasi
|
|
*
|
|
* @return array
|
|
*/
|
|
private function getAuthorizationRules()
|
|
{
|
|
return [
|
|
'authorized_status' => 'nullable|boolean',
|
|
'authorized_at' => 'nullable|date',
|
|
'authorized_by' => 'nullable|exists:users,id',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Pesan khusus untuk validasi
|
|
*
|
|
* @return array
|
|
*/
|
|
public function messages()
|
|
{
|
|
return [
|
|
'permohonan_id.required' => 'ID Permohonan harus diisi',
|
|
'permohonan_id.exists' => 'ID Permohonan tidak valid',
|
|
'persetujuan_penawaran_id.required' => 'ID Persetujuan Penawaran harus diisi',
|
|
'persetujuan_penawaran_id.exists' => 'ID Persetujuan Penawaran tidak valid',
|
|
'nominal_bayar.numeric' => 'Nominal Bayar harus berupa angka',
|
|
'nominal_bayar.min' => 'Nominal Bayar minimal 0',
|
|
'bukti_ksl.file' => 'Bukti KSL harus berupa file',
|
|
'bukti_ksl.mimes' => 'Bukti KSL harus berformat pdf, jpg, jpeg, atau png',
|
|
'bukti_ksl.max' => 'Ukuran Bukti KSL maksimal 10MB',
|
|
'bukti_bayar.file' => 'Bukti Bayar harus berupa file',
|
|
'bukti_bayar.mimes' => 'Bukti Bayar harus berformat pdf, jpg, jpeg, atau png',
|
|
'bukti_bayar.max' => 'Ukuran Bukti Bayar maksimal 10MB',
|
|
'status.boolean' => 'Status harus berupa boolean',
|
|
'status_bayar.boolean' => 'Status Bayar harus berupa boolean',
|
|
'tanggal_pembayaran.date' => 'Format Tanggal Pembayaran tidak valid',
|
|
'nominal_penyelesaian.numeric' => 'Nominal Penyelesaian harus berupa angka',
|
|
'nominal_penyelesaian.min' => 'Nominal Penyelesaian minimal 0',
|
|
'status_penyelesaian.boolean' => 'Status Penyelesaian harus berupa boolean',
|
|
'tanggal_penyelesaian.date' => 'Format Tanggal Penyelesaian tidak valid',
|
|
'bukti_penyelesaian.file' => 'Bukti Penyelesaian harus berupa file',
|
|
'bukti_penyelesaian.mimes' => 'Bukti Penyelesaian harus berformat pdf, jpg, jpeg, atau png',
|
|
'bukti_penyelesaian.max' => 'Ukuran Bukti Penyelesaian maksimal 10MB',
|
|
'memo_penyelesaian.file' => 'Memo Penyelesaian harus berupa file',
|
|
'memo_penyelesaian.mimes' => 'Memo Penyelesaian harus berformat pdf, jpg, jpeg, atau png',
|
|
'memo_penyelesaian.max' => 'Ukuran Memo Penyelesaian maksimal 10MB',
|
|
'authorized_status.boolean' => 'Status Otorisasi harus berupa boolean',
|
|
'authorized_at.date' => 'Format Tanggal Otorisasi tidak valid',
|
|
'authorized_by.exists' => 'User Otorisasi tidak valid',
|
|
];
|
|
}
|
|
}
|