'nullable|exists:permohonan,id', 'penawaran_id' => 'nullable|exists:penawaran,id', 'nomor_proposal_penawaran' => 'nullable|string|max:255', 'tanggal_proposal_penawaran' => 'nullable|date', 'biaya_final' => 'nullable|numeric|min:0', 'sla_resume' => 'nullable|numeric|min:0', 'sla_final' => 'nullable|numeric|min:0', 'file_persetujuan_penawaran' => 'nullable|file|mimes:pdf,doc,docx|max:10240', 'surat_representasi' => 'nullable|file|mimes:pdf,doc,docx|max:10240', 'bukti_bayar' => 'nullable|file|mimes:pdf,jpg,jpeg,png|max:10240', 'nominal_bayar' => 'nullable|numeric|min:0', 'status' => 'nullable|boolean', 'authorized_status' => 'boolean', 'authorized_at' => 'nullable|date', 'authorized_by' => 'nullable|exists:users,id', 'catatan' => 'nullable|string', ]; } public function messages() { 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_final.required' => 'SLA Final wajib diisi.', 'file_persetujuan_penawaran.file' => 'File Persetujuan Penawaran harus berupa file.', 'file_persetujuan_penawaran.mimes' => 'File Persetujuan Penawaran harus berupa file PDF, DOC, atau DOCX.', 'file_persetujuan_penawaran.max' => 'Ukuran File Persetujuan Penawaran tidak boleh lebih dari 10MB.', 'surat_representasi.file' => 'Surat Representasi harus berupa file.', 'surat_representasi.mimes' => 'Surat Representasi harus berupa file PDF, DOC, atau DOCX.', 'surat_representasi.max' => 'Ukuran Surat Representasi tidak boleh lebih dari 10MB.', 'bukti_bayar.file' => 'Bukti Bayar harus berupa file.', 'bukti_bayar.mimes' => 'Bukti Bayar harus berupa file PDF, JPG, JPEG, atau PNG.', 'bukti_bayar.max' => 'Ukuran Bukti Bayar 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.', 'status_bayar.required' => 'Status bayar wajib diisi.', 'status_bayar.in' => 'Status bayar harus berupa "sudah_bayar", "belum_bayar" atau "tidak bayar".', ]; } }