*/ protected function casts(): array { return [ 'payload' => 'array', 'file_size' => 'integer', 'generated_at' => 'datetime', ]; } public function workspace(): BelongsTo { return $this->belongsTo(Workspace::class); } public function tenant(): BelongsTo { return $this->belongsTo(ManagedEnvironment::class, 'managed_environment_id'); } public function sourceEnvironmentReview(): BelongsTo { return $this->belongsTo(EnvironmentReview::class, 'source_environment_review_id'); } public function sourceReviewPack(): BelongsTo { return $this->belongsTo(ReviewPack::class, 'source_review_pack_id'); } public function operationRun(): BelongsTo { return $this->belongsTo(OperationRun::class); } public function generatedBy(): BelongsTo { return $this->belongsTo(User::class, 'generated_by_user_id'); } public function isReadyManagementPdf(): bool { return $this->report_type === self::REPORT_TYPE_MANAGEMENT_REPORT_PDF && $this->report_format === self::FORMAT_PDF && $this->status === self::STATUS_READY && filled($this->file_disk) && filled($this->file_path); } public function artifactSourceDescriptor(): ArtifactSourceDescriptor { return app(ArtifactSourceResolver::class)->forStoredReport($this); } public function artifactProviderDetail(): ArtifactProviderDetail { return app(ArtifactSourceResolver::class)->providerDetailForStoredReport($this); } }