*/ use HasFactory; /** * @return array */ protected function casts(): array { return [ 'land' => Land::class, 'vertragsgrundlage' => Vertragsgrundlage::class, 'status' => ProjektStatus::class, 'suche_andere_vertraege_im_abschnitt' => 'boolean', 'suche_andere_abschnitte' => 'boolean', 'suche_nur_gleicher_auftragnehmer' => 'boolean', ]; } /** @return BelongsTo */ public function mandant(): BelongsTo { return $this->belongsTo(Mandant::class); } /** @return HasMany */ public function abschnitte(): HasMany { return $this->hasMany(Abschnitt::class)->orderBy('sortierung')->orderBy('id'); } /** @return HasMany */ public function vertraege(): HasMany { return $this->hasMany(Vertrag::class); } /** @return HasMany */ public function nachtraege(): HasMany { return $this->hasMany(Nachtrag::class); } /** @return HasMany */ public function dokumente(): HasMany { return $this->hasMany(Dokument::class); } /** @return BelongsToMany */ public function mitglieder(): BelongsToMany { return $this->belongsToMany(User::class, 'projekt_mitglieder') ->withPivot('rolle') ->withTimestamps(); } /** * Rolle des Benutzers in diesem Projekt oder null, wenn er kein Mitglied ist. */ public function rolleVon(User $user): ?Projektrolle { /** @var string|null $rolle */ $rolle = $this->mitglieder()->whereKey($user->getKey())->value('projekt_mitglieder.rolle'); return $rolle === null ? null : Projektrolle::from($rolle); } public function istArchiviert(): bool { return $this->status === ProjektStatus::Archiviert; } }