feat: [hr] Leave 모델 확장 + 결재양식 마이그레이션 추가
- Leave 타입 6개 추가: business_trip, remote, field_work, early_leave, late_reason, absent_reason - 그룹 상수 추가: VACATION_TYPES, ATTENDANCE_REQUEST_TYPES, REASON_REPORT_TYPES - FORM_CODE_MAP: 유형 → 결재양식코드 매핑 상수 - ATTENDANCE_STATUS_MAP: 유형 → 근태상태 매핑 상수 - 결재양식 2개 추가: attendance_request(근태신청), reason_report(사유서)
This commit is contained in:
@@ -82,6 +82,18 @@ class Leave extends Model
|
||||
|
||||
public const TYPE_PARENTAL = 'parental'; // 육아
|
||||
|
||||
public const TYPE_BUSINESS_TRIP = 'business_trip'; // 출장
|
||||
|
||||
public const TYPE_REMOTE = 'remote'; // 재택근무
|
||||
|
||||
public const TYPE_FIELD_WORK = 'field_work'; // 외근
|
||||
|
||||
public const TYPE_EARLY_LEAVE = 'early_leave'; // 조퇴
|
||||
|
||||
public const TYPE_LATE_REASON = 'late_reason'; // 지각사유서
|
||||
|
||||
public const TYPE_ABSENT_REASON = 'absent_reason'; // 결근사유서
|
||||
|
||||
public const STATUS_PENDING = 'pending';
|
||||
|
||||
public const STATUS_APPROVED = 'approved';
|
||||
@@ -98,6 +110,45 @@ class Leave extends Model
|
||||
self::TYPE_FAMILY,
|
||||
self::TYPE_MATERNITY,
|
||||
self::TYPE_PARENTAL,
|
||||
self::TYPE_BUSINESS_TRIP,
|
||||
self::TYPE_REMOTE,
|
||||
self::TYPE_FIELD_WORK,
|
||||
self::TYPE_EARLY_LEAVE,
|
||||
self::TYPE_LATE_REASON,
|
||||
self::TYPE_ABSENT_REASON,
|
||||
];
|
||||
|
||||
// 그룹 상수
|
||||
public const VACATION_TYPES = [
|
||||
self::TYPE_ANNUAL, self::TYPE_HALF_AM, self::TYPE_HALF_PM,
|
||||
self::TYPE_SICK, self::TYPE_FAMILY, self::TYPE_MATERNITY, self::TYPE_PARENTAL,
|
||||
];
|
||||
|
||||
public const ATTENDANCE_REQUEST_TYPES = [
|
||||
self::TYPE_BUSINESS_TRIP, self::TYPE_REMOTE, self::TYPE_FIELD_WORK, self::TYPE_EARLY_LEAVE,
|
||||
];
|
||||
|
||||
public const REASON_REPORT_TYPES = [
|
||||
self::TYPE_LATE_REASON, self::TYPE_ABSENT_REASON,
|
||||
];
|
||||
|
||||
// 유형 → 결재양식코드 매핑
|
||||
public const FORM_CODE_MAP = [
|
||||
'annual' => 'leave', 'half_am' => 'leave', 'half_pm' => 'leave',
|
||||
'sick' => 'leave', 'family' => 'leave', 'maternity' => 'leave', 'parental' => 'leave',
|
||||
'business_trip' => 'attendance_request', 'remote' => 'attendance_request',
|
||||
'field_work' => 'attendance_request', 'early_leave' => 'attendance_request',
|
||||
'late_reason' => 'reason_report', 'absent_reason' => 'reason_report',
|
||||
];
|
||||
|
||||
// 유형 → 근태상태 매핑 (승인 시 Attendance에 반영할 상태)
|
||||
public const ATTENDANCE_STATUS_MAP = [
|
||||
'annual' => 'vacation', 'half_am' => 'vacation', 'half_pm' => 'vacation',
|
||||
'sick' => 'vacation', 'family' => 'vacation', 'maternity' => 'vacation', 'parental' => 'vacation',
|
||||
'business_trip' => 'businessTrip', 'remote' => 'remote', 'field_work' => 'fieldWork',
|
||||
'early_leave' => null,
|
||||
'late_reason' => null,
|
||||
'absent_reason' => null,
|
||||
];
|
||||
|
||||
public const STATUSES = [
|
||||
@@ -253,6 +304,12 @@ public function getLeaveTypeLabelAttribute(): string
|
||||
self::TYPE_FAMILY => '경조사',
|
||||
self::TYPE_MATERNITY => '출산휴가',
|
||||
self::TYPE_PARENTAL => '육아휴직',
|
||||
self::TYPE_BUSINESS_TRIP => '출장',
|
||||
self::TYPE_REMOTE => '재택근무',
|
||||
self::TYPE_FIELD_WORK => '외근',
|
||||
self::TYPE_EARLY_LEAVE => '조퇴',
|
||||
self::TYPE_LATE_REASON => '지각사유서',
|
||||
self::TYPE_ABSENT_REASON => '결근사유서',
|
||||
default => $this->leave_type,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user