'integer', 'period_start' => 'date', 'period_end' => 'date', 'approved_at' => 'datetime', ]; // Relationships public function budget(): BelongsTo { return $this->belongsTo(Budget::class); } public function generatedBy(): BelongsTo { return $this->belongsTo(User::class, 'generated_by_user_id'); } public function approvedBy(): BelongsTo { return $this->belongsTo(User::class, 'approved_by_user_id'); } // Helper methods public function isDraft(): bool { return $this->status === self::STATUS_DRAFT; } public function isFinalized(): bool { return $this->status === self::STATUS_FINALIZED; } public function isApproved(): bool { return $this->status === self::STATUS_APPROVED; } public function isSubmitted(): bool { return $this->status === self::STATUS_SUBMITTED; } public function canBeEdited(): bool { return $this->status === self::STATUS_DRAFT; } public function getReportTypeNameAttribute(): string { return match($this->report_type) { self::TYPE_REVENUE_EXPENDITURE => '收支決算表', self::TYPE_BALANCE_SHEET => '資產負債表', self::TYPE_PROPERTY_INVENTORY => '財產目錄', self::TYPE_INTERNAL_MANAGEMENT => '內部管理報表', default => $this->report_type, }; } }