'array', 'is_active' => 'boolean', ]; protected $fillable = [ 'tenant_id', 'name', 'code', 'category', 'template', 'is_active', 'created_by', 'updated_by', 'deleted_by', ]; protected $attributes = [ 'is_active' => true, ]; // ========================================================================= // 카테고리 상수 // ========================================================================= public const CATEGORY_REQUEST = 'request'; // 품의서 public const CATEGORY_EXPENSE = 'expense'; // 지출결의서 public const CATEGORY_EXPENSE_ESTIMATE = 'expense_estimate'; // 지출 예상 내역서 public const CATEGORIES = [ self::CATEGORY_REQUEST, self::CATEGORY_EXPENSE, self::CATEGORY_EXPENSE_ESTIMATE, ]; // ========================================================================= // 관계 정의 // ========================================================================= /** * 이 양식으로 생성된 결재 문서들 */ public function approvals(): HasMany { return $this->hasMany(Approval::class, 'form_id'); } /** * 생성자 */ public function creator(): BelongsTo { return $this->belongsTo(User::class, 'created_by'); } /** * 수정자 */ public function updater(): BelongsTo { return $this->belongsTo(User::class, 'updated_by'); } // ========================================================================= // 스코프 // ========================================================================= /** * 활성 양식만 */ public function scopeActive($query) { return $query->where('is_active', true); } /** * 특정 카테고리 */ public function scopeCategory($query, string $category) { return $query->where('category', $category); } // ========================================================================= // 헬퍼 메서드 // ========================================================================= /** * 카테고리 라벨 */ public function getCategoryLabelAttribute(): string { return match ($this->category) { self::CATEGORY_REQUEST => '품의서', self::CATEGORY_EXPENSE => '지출결의서', self::CATEGORY_EXPENSE_ESTIMATE => '지출 예상 내역서', default => $this->category ?? '', }; } }