'미설정', 'raw_material' => '원재료매입', 'subsidiary_material' => '부재료매입', 'product' => '상품매입', 'outsourcing' => '외주가공비', 'consumables' => '소모품비', 'repair' => '수선비', 'transportation' => '운반비', 'office_supplies' => '사무용품비', 'rent' => '임차료', 'utilities' => '수도광열비', 'communication' => '통신비', 'vehicle' => '차량유지비', 'entertainment' => '접대비', 'insurance' => '보험료', 'other_service' => '기타용역비', ]; protected $casts = [ 'purchase_date' => 'date', 'supply_amount' => 'decimal:2', 'tax_amount' => 'decimal:2', 'total_amount' => 'decimal:2', 'client_id' => 'integer', 'withdrawal_id' => 'integer', 'approval_id' => 'integer', 'tax_invoice_received' => 'boolean', ]; /** * 상태 목록 */ public const STATUSES = [ 'draft' => '임시저장', 'confirmed' => '확정', ]; /** * 거래처 관계 */ public function client(): BelongsTo { return $this->belongsTo(\App\Models\Orders\Client::class); } /** * 출금 관계 */ public function withdrawal(): BelongsTo { return $this->belongsTo(Withdrawal::class); } /** * 연결된 품의서/지출결의서 */ public function approval(): BelongsTo { return $this->belongsTo(Approval::class); } /** * 생성자 관계 */ public function creator(): BelongsTo { return $this->belongsTo(\App\Models\Members\User::class, 'created_by'); } /** * 상태 라벨 */ public function getStatusLabelAttribute(): string { return self::STATUSES[$this->status] ?? $this->status; } /** * 확정 가능 여부 */ public function canConfirm(): bool { return $this->status === 'draft'; } /** * 수정 가능 여부 */ public function canEdit(): bool { return $this->status === 'draft'; } /** * 삭제 가능 여부 */ public function canDelete(): bool { return $this->status === 'draft'; } }