*/ use HasFactory; /** @var list */ public const STAGES = ['design', 'ready', 'live', 'retired']; protected $fillable = [ 'reference', 'title', 'notes', 'stage', 'currency', 'created_by', 'archived_at', 'current_revision_id', 'lock_version', ]; protected function casts(): array { return [ 'archived_at' => 'datetime', ]; } public function creator(): BelongsTo { return $this->belongsTo(User::class, 'created_by'); } public function currentRevision(): BelongsTo { return $this->belongsTo(ProjectRevision::class, 'current_revision_id'); } public function revisions(): HasMany { return $this->hasMany(ProjectRevision::class); } public function listingLinks(): HasMany { return $this->hasMany(ProjectListingLink::class); } public function releases(): HasMany { return $this->hasMany(ProjectRelease::class); } public function costSnapshots(): HasMany { return $this->hasMany(ProjectCostSnapshot::class); } public function events(): HasMany { return $this->hasMany(ProjectEvent::class)->latest('created_at'); } public function isArchived(): bool { return $this->archived_at !== null; } }