*/ public function rules(): array { return [ 'type' => ['required', Rule::in([CustomerStatementQuery::TYPE_ACTIVITY, CustomerStatementQuery::TYPE_OUTSTANDING])], 'from_date' => ['nullable', 'date_format:Y-m-d', 'required_if:type,activity'], 'to_date' => ['nullable', 'date_format:Y-m-d', 'required_if:type,activity', 'after_or_equal:from_date'], 'as_of' => ['nullable', 'date_format:Y-m-d', 'required_if:type,outstanding'], 'subject' => ['required', 'string'], 'body' => ['required', 'string'], 'to' => ['required', 'email'], 'cc' => ['nullable', 'email'], 'bcc' => ['nullable', 'email'], ]; } protected function prepareForValidation(): void { $type = $this->input('type', CustomerStatementQuery::TYPE_ACTIVITY); $today = Carbon::today(); $this->merge([ 'type' => $type, 'from_date' => $this->input('from_date', $today->copy()->startOfMonth()->toDateString()), 'to_date' => $this->input('to_date', $today->toDateString()), 'as_of' => $this->input('as_of', $today->toDateString()), ]); } }