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:
김보곤
2026-03-03 23:50:04 +09:00
parent 2fd122feba
commit 88ef6a8490
2 changed files with 116 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
return new class extends Migration
{
public function up(): void
{
// 근태신청 결재 양식 (출장/재택/외근/조퇴)
DB::table('approval_forms')->insertOrIgnore([
'tenant_id' => 1,
'name' => '근태신청',
'code' => 'attendance_request',
'category' => 'request',
'template' => json_encode([
'fields' => [
['name' => 'user_name', 'type' => 'text', 'label' => '신청자'],
['name' => 'request_type', 'type' => 'text', 'label' => '신청유형'],
['name' => 'period', 'type' => 'text', 'label' => '기간'],
['name' => 'days', 'type' => 'number', 'label' => '일수'],
['name' => 'reason', 'type' => 'text', 'label' => '사유'],
],
], JSON_UNESCAPED_UNICODE),
'is_active' => true,
'created_by' => 1,
'created_at' => now(),
'updated_at' => now(),
]);
// 사유서 결재 양식 (지각사유서/결근사유서)
DB::table('approval_forms')->insertOrIgnore([
'tenant_id' => 1,
'name' => '사유서',
'code' => 'reason_report',
'category' => 'request',
'template' => json_encode([
'fields' => [
['name' => 'user_name', 'type' => 'text', 'label' => '신청자'],
['name' => 'report_type', 'type' => 'text', 'label' => '사유서유형'],
['name' => 'target_date', 'type' => 'date', 'label' => '대상일'],
['name' => 'reason', 'type' => 'text', 'label' => '사유'],
],
], JSON_UNESCAPED_UNICODE),
'is_active' => true,
'created_by' => 1,
'created_at' => now(),
'updated_at' => now(),
]);
}
public function down(): void
{
DB::table('approval_forms')
->where('tenant_id', 1)
->whereIn('code', ['attendance_request', 'reason_report'])
->delete();
}
};