Files
sam-api/app/Models/Tenants/ApprovalForm.php

135 lines
3.4 KiB
PHP
Raw Normal View History

<?php
namespace App\Models\Tenants;
use App\Models\Members\User;
use App\Traits\Auditable;
use App\Traits\BelongsToTenant;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
* 결재 양식 모델
*
* @property int $id
* @property int $tenant_id
* @property string $name
* @property string $code
* @property string|null $category
* @property array $template
* @property bool $is_active
* @property int|null $created_by
* @property int|null $updated_by
* @property int|null $deleted_by
*/
class ApprovalForm extends Model
{
use Auditable, BelongsToTenant, SoftDeletes;
protected $table = 'approval_forms';
protected $casts = [
'template' => '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 ?? '',
};
}
}