VacationType::class, "state" => VacationRequestState::class, "from" => "date", "to" => "date", "event_ids" => AsCollection::class, ]; protected $perPage = 50; public function user(): BelongsTo { return $this->belongsTo(User::class); } public function creator(): BelongsTo { return $this->belongsTo(User::class, "creator_id"); } public function yearPeriod(): BelongsTo { return $this->belongsTo(YearPeriod::class); } public function activities(): HasMany { return $this->hasMany(VacationRequestActivity::class); } public function vacations(): HasMany { return $this->hasMany(Vacation::class); } public function scopeStates(Builder $query, VacationRequestState|array $states): Builder { return $query->whereState("state", $states); } public function scopeNoStates(Builder $query, VacationRequestState|array $states): Builder { return $query->whereNotState("state", $states); } public function scopeType(Builder $query, VacationType|array $types): Builder { $types = Arr::wrap($types); return $query->whereIn("type", $types); } public function scopeOverlapsWith(Builder $query, self $vacationRequest): Builder { return $query->where("from", "<=", $vacationRequest->to) ->where("to", ">=", $vacationRequest->from); } public function hasFlowSkipped(): bool { return $this->flow_skipped; } protected static function newFactory(): VacationRequestFactory { return VacationRequestFactory::new(); } }