diff --git a/app/Http/Requests/PersetujuanPenawaranRequest.php b/app/Http/Requests/PersetujuanPenawaranRequest.php new file mode 100644 index 0000000..b33cc7a --- /dev/null +++ b/app/Http/Requests/PersetujuanPenawaranRequest.php @@ -0,0 +1,76 @@ + 'required|exists:penawaran_tender,id', + 'nomor_proposal_penawaran' => 'nullable|string|max:255', + 'tanggal_proposal_penawaran' => 'nullable|date', + 'biaya_final' => 'nullable|numeric|min:0', + 'sla_resume' => 'nullable|date', + 'sla_final' => 'nullable|date|after_or_equal:sla_resume', + 'catatan' => 'nullable|string', + 'attachment' => 'nullable|file|mimes:pdf,doc,docx|max:10240', // Max 10MB + 'region_id' => 'nullable|exists:regions,id', + 'status' => 'nullable|boolean', + 'authorized_status' => 'nullable|boolean', + 'authorized_at' => 'nullable|date', + 'authorized_by' => 'nullable|exists:users,id', + ]; + } + + /** + * Get custom messages for validator errors. + */ + public function messages() + : array + { + return [ + 'penawaran_id.required' => 'Penawaran ID wajib diisi.', + 'penawaran_id.exists' => 'Penawaran ID tidak valid.', + 'nomor_proposal_penawaran.required' => 'Nomor proposal penawaran wajib diisi.', + 'tanggal_proposal_penawaran.required' => 'Tanggal proposal penawaran wajib diisi.', + 'tanggal_proposal_penawaran.date' => 'Tanggal proposal penawaran harus berupa tanggal yang valid.', + 'biaya_final.required' => 'Biaya final wajib diisi.', + 'biaya_final.numeric' => 'Biaya final harus berupa angka.', + 'biaya_final.min' => 'Biaya final tidak boleh kurang dari 0.', + 'sla_resume.required' => 'SLA Resume wajib diisi.', + 'sla_resume.date' => 'SLA Resume harus berupa tanggal yang valid.', + 'sla_final.required' => 'SLA Final wajib diisi.', + 'sla_final.date' => 'SLA Final harus berupa tanggal yang valid.', + 'sla_final.after_or_equal' => 'SLA Final harus sama dengan atau setelah SLA Resume.', + 'attachment.file' => 'Attachment harus berupa file.', + 'attachment.mimes' => 'Attachment harus berupa file PDF, DOC, atau DOCX.', + 'attachment.max' => 'Ukuran attachment tidak boleh lebih dari 10MB.', + 'region_id.required' => 'Region ID wajib diisi.', + 'region_id.exists' => 'Region ID tidak valid.', + 'status.required' => 'Status wajib diisi.', + 'status.boolean' => 'Status harus berupa nilai boolean.', + 'authorized_status.boolean' => 'Status otorisasi harus berupa nilai boolean.', + 'authorized_at.date' => 'Tanggal otorisasi harus berupa tanggal yang valid.', + 'authorized_by.exists' => 'ID pengguna yang mengotorisasi tidak valid.', + ]; + } + }