Files
sam-api/app/Models/Quote/QuoteItem.php
권혁성 189b38c936 feat: Auditable 트레이트 구현 및 97개 모델 적용
- Auditable 트레이트 신규 생성 (bootAuditable 패턴)
  - creating: created_by/updated_by 자동 채우기
  - updating: updated_by 자동 채우기
  - deleting: deleted_by 채우기 + saveQuietly()
  - created/updated/deleted: audit_logs 자동 기록
- 기존 AuditLogger 패턴과 동일한 try/catch 조용한 실패
- 변경된 필드만 before/after 기록 (updated 이벤트)
- auditExclude 프로퍼티로 모델별 제외 필드 설정 가능
- 제외 대상: Attendance, StockTransaction, TodayIssue 등 고빈도/시스템 모델

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 15:33:54 +09:00

78 lines
1.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Models\Quote;
use App\Traits\Auditable;
use App\Traits\BelongsToTenant;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class QuoteItem extends Model
{
use Auditable, BelongsToTenant, HasFactory;
protected $fillable = [
'quote_id',
'tenant_id',
// 품목 정보
'item_id',
'item_type',
'item_code',
'item_name',
'specification',
'unit',
// 수량/금액
'base_quantity',
'calculated_quantity',
'unit_price',
'total_price',
// 수식 정보
'formula',
'formula_result',
'formula_source',
'formula_category',
'data_source',
// 기타
'delivery_date',
'note',
'sort_order',
];
protected $casts = [
'base_quantity' => 'decimal:4',
'calculated_quantity' => 'decimal:4',
'unit_price' => 'decimal:2',
'total_price' => 'decimal:2',
'delivery_date' => 'date',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
/**
* 견적 마스터
*/
public function quote(): BelongsTo
{
return $this->belongsTo(Quote::class);
}
/**
* 금액 계산 (수량 × 단가)
*/
public function calculateTotalPrice(): float
{
return round($this->calculated_quantity * $this->unit_price, 2);
}
/**
* 금액 업데이트 후 저장
*/
public function updateTotalPrice(): self
{
$this->total_price = $this->calculateTotalPrice();
return $this;
}
}