*/ public function rules() : array { return [ 'directorat_id' => 'required|exists:directorats,id', 'sub_directorat_id' => 'required|exists:sub_directorats,id', 'kode' => 'required|string|max:2|min:2|unique:jobs,kode,' . $this->job->id, 'name' => 'required|string|max:50', 'status' => 'nullable|integer', 'approved_at' => 'nullable|date', 'approved_by' => 'nullable|integer', ]; } /** * Configure the validator instance. */ public function withValidator(Validator $validator) : void { $validator->after(function (Validator $validator) { if ($validator->errors()->any()) { $error = json_decode($validator->errors()->toJson(), true); foreach ($error as $key => $value) { flash($value[0]); } return redirect()->route('jobs.index')->with('error', 'Job updated failed.'); } }); } protected function failedValidation(Validator|\Illuminate\Contracts\Validation\Validator $validator) : JsonResponse { $errors = (new ValidationException($validator))->errors(); throw new HttpResponseException(response()->json([ 'success' => false, 'errors' => $errors, 'messages' => 'Job updated failed.' ], JsonResponse::HTTP_UNPROCESSABLE_ENTITY)); } protected function prepareForValidation() { if(isset($this->status) && $this->status == 1) { if (isset($this->approval) && $this->approval == 1) { $this->merge([ 'approved_at' => now(), 'approved_by' => auth()->user()->id, ]); } } } }