input('status')); if ($status === null) { return false; } return $this->user()?->can($status->transitionPermission()->value) ?? false; } /** * @return array */ public function rules(): array { return [ 'status' => ['required', Rule::enum(CuttingStatus::class)], 'reason' => ['nullable', 'string', 'max:500'], ]; } /** * @return array */ public function attributes(): array { return [ 'status' => 'status', 'reason' => 'alasan penolakan', ]; } public function withValidator(Validator $validator): void { $validator->after(function (Validator $validator): void { /** @var Cutting $cutting */ $cutting = $this->route('cutting'); $status = CuttingStatus::tryFrom((string) $this->input('status')); if ($status === null) { return; } if (! $cutting->status->canTransitionTo($status)) { $validator->errors()->add('status', 'Status cutting tidak dapat diubah.'); } if ($status === CuttingStatus::REJECTED && trim((string) $this->input('reason')) === '') { $validator->errors()->add('reason', 'Alasan penolakan wajib diisi.'); } }); } }