'nullable', 'biaya_kjpp_sebelumnya' => 'nullable', 'tanggal_penilaian_sebelumnya' => 'nullable', 'nomor_registrasi' => 'required', 'kjpp.*' => 'exists:kjpp,id', 'tujuan_penilaian_kjpp_id' => 'required', 'jenis_laporan_id' => 'required', 'start_date' => 'required', 'end_date' => 'required', 'catatan' => 'nullable', 'status' => 'nullable' ]; if ($this->method() == 'PUT') { $rules['code'] = 'required|max:50'; } else { $rules['code'] = 'required|max:50|unique:penawaran,code'; } return $rules; } /** * Determine if the user is authorized to make this request. */ public function authorize(): bool { return true; } public function messages(): array { return [ 'code.required' => 'Kode Penawaran Wajib diisi!', 'code.max' => 'Kode Penawaran maksimal 255 huruf!', 'code.unique' => 'Kode Penawaran tidak boleh sama!', 'nomor_registrasi.required' => 'Nomor Registrasi Wajib diisi!', 'tujuan_penilaian_kjpp_id.required' => 'Tujuan Penilaian KJPP Wajib diisi!', 'jenis_laporan_id.required' => 'Jenis Laporan Wajib diisi!', 'start_date.required' => 'Tanggal Awal Wajib diisi!', 'end_date.required' => 'Tanggal Akhir Wajib diisi!', ]; } public function withValidator($validator) { $validator->after(function ($validator) { $startDate = strtotime($this->input('start_date')); $endDate = strtotime($this->input('end_date')); $today = strtotime(date('Y-m-d')); // Jika dalam keadaan tambah penawaran maka munculkan pesan ini if ($this->method() !== 'PUT') { if ($startDate < $today) { $validator->errors()->add('start_date', 'Tanggal Awal tidak boleh sebelum hari ini.'); } } if ($endDate < $startDate) { $validator->errors()->add('end_date', 'Tanggal Akhir tidak boleh lebih awal dari Tanggal Awal.'); } // Validasi minimal 3 pilihan pada nama_kjpp $namaKjpp = $this->input('kjpp', []); // jika nama KJPP itu kosong if (empty($namaKjpp)) { $validator->errors()->add('kjpp', 'Nama KJPP wajib diisi.'); } // jika terisi kurang dari 3 item elseif (is_array($namaKjpp) && count($namaKjpp) < 3) { $validator->errors()->add('kjpp', 'Nama KJPP Sebelumnya harus memiliki minimal 3 pilihan jika diisi.'); } }); } }