Role::class, "employment_form" => EmploymentForm::class, "employment_date" => "date", ]; protected $hidden = [ "remember_token", ]; public function vacationLimits(): HasMany { return $this->hasMany(VacationLimit::class); } public function vacationRequests(): HasMany { return $this->hasMany(VacationRequest::class); } public function createdVacationRequests(): HasMany { return $this->hasMany(VacationRequest::class, "creator_id"); } public function vacations(): HasMany { return $this->hasMany(Vacation::class); } public function getAvatar(): string { return $this->getAvatarGenerator() ->backgroundColor(ColorGenerator::generate($this->fullName)) ->image(); } public function getFullNameAttribute(): string { return "{$this->first_name} {$this->last_name}"; } public function hasRole(Role $role): bool { return $this->role === $role; } public function hasVacationLimit(YearPeriod $yearPeriod): bool { return $this->vacationLimits() ->where("year_period_id", $yearPeriod->id) ->whereNotNull("days") ->exists(); } public function scopeSearch(Builder $query, ?string $text): Builder { if ($text === null) { return $query; } return $query ->where("first_name", "ILIKE", "%{$text}%") ->orWhere("last_name", "ILIKE", "%{$text}%") ->orWhere("email", "ILIKE", "%{$text}%"); } public function scopeWithVacationLimitIn(Builder $query, YearPeriod $yearPeriod): Builder { return $query->whereRelation( "vacationlimits", fn(Builder $query) => $query ->where("year_period_id", $yearPeriod->id) ->whereNotNull("days"), ); } protected function getAvatarName(): string { return mb_substr($this->first_name, 0, 1) . mb_substr($this->last_name, 0, 1); } protected static function newFactory(): UserFactory { return UserFactory::new(); } }