feat: [approval] 기안함 휴가신청 → 휴가관리 연동
- 기안함에서 휴가/근태신청/사유서 양식 선택 시 전용 입력 폼 표시 - 양식코드별 유형 필터링 (leave/attendance_request/reason_report) - saveApproval()에서 content에 구조화된 데이터 포함 - handleApprovalCompleted()에서 Leave 없을 시 자동 생성 - createLeaveFromApproval() 메서드 추가
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
use App\Models\Finance\BankAccount;
|
||||
use App\Models\Finance\CorporateCard;
|
||||
use App\Services\ApprovalService;
|
||||
use App\Services\HR\LeaveService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\View\View;
|
||||
@@ -39,8 +40,9 @@ public function create(Request $request): View|Response
|
||||
$forms = $this->service->getApprovalForms();
|
||||
$lines = $this->service->getApprovalLines();
|
||||
[$cards, $accounts] = $this->getCardAndAccountData();
|
||||
$employees = app(LeaveService::class)->getActiveEmployees();
|
||||
|
||||
return view('approvals.create', compact('forms', 'lines', 'cards', 'accounts'));
|
||||
return view('approvals.create', compact('forms', 'lines', 'cards', 'accounts', 'employees'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -801,6 +801,39 @@ public function markCompletedAsRead(int $userId): int
|
||||
// Private 헬퍼
|
||||
// =========================================================================
|
||||
|
||||
/**
|
||||
* 기안함에서 직접 올린 결재 → Leave 레코드 자동 생성
|
||||
*/
|
||||
private function createLeaveFromApproval(Approval $approval): \App\Models\HR\Leave
|
||||
{
|
||||
$content = $approval->content;
|
||||
$leaveType = $content['leave_type'];
|
||||
$leaveService = app(\App\Services\HR\LeaveService::class);
|
||||
|
||||
// 사유서는 days=0, 그 외는 자동 계산
|
||||
if (in_array($leaveType, \App\Models\HR\Leave::REASON_REPORT_TYPES)) {
|
||||
$days = 0;
|
||||
} else {
|
||||
$days = $leaveService->calculateDays(
|
||||
$leaveType, $content['start_date'], $content['end_date']
|
||||
);
|
||||
}
|
||||
|
||||
return \App\Models\HR\Leave::create([
|
||||
'tenant_id' => $approval->tenant_id,
|
||||
'user_id' => $content['user_id'] ?? $approval->drafter_id,
|
||||
'leave_type' => $leaveType,
|
||||
'start_date' => $content['start_date'],
|
||||
'end_date' => $content['end_date'],
|
||||
'days' => $days,
|
||||
'reason' => $content['reason'] ?? null,
|
||||
'status' => 'pending',
|
||||
'approval_id' => $approval->id,
|
||||
'created_by' => $approval->drafter_id,
|
||||
'updated_by' => $approval->drafter_id,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 휴가/근태신청/사유서 관련 결재 양식인지 확인
|
||||
*/
|
||||
@@ -819,6 +852,12 @@ private function handleApprovalCompleted(Approval $approval): void
|
||||
}
|
||||
|
||||
$leave = \App\Models\HR\Leave::where('approval_id', $approval->id)->first();
|
||||
|
||||
// 기안함에서 직접 올린 경우: Leave 레코드 자동 생성
|
||||
if (! $leave && ! empty($approval->content['leave_type'])) {
|
||||
$leave = $this->createLeaveFromApproval($approval);
|
||||
}
|
||||
|
||||
if ($leave && $leave->status === 'pending') {
|
||||
app(\App\Services\HR\LeaveService::class)->approveByApproval($leave, $approval);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user