Files
sam-docs/changes/20260320_attendance_manual_absent.md

2.6 KiB

근태현황 자동 결근 처리 → 수동 트리거 전환

날짜: 2026-03-20 작업자: Claude Code

변경 개요

근태현황의 자동 결근 처리 기능을 수동 트리거 방식으로 전환한다.

  • 기존: 매일 23:50 스케줄러가 전체 테넌트 대상으로 자동 실행
  • 변경: 근태현황 페이지에서 관리자가 날짜를 선택하여 수동 실행

수정된 파일

파일 변경 내용
mng/routes/console.php 매일 23:50 스케줄러 비활성화 (주석 처리)
mng/app/Services/HR/AttendanceService.php markAbsentees() 단일 테넌트 기반 + 제외 사원 필터 + 결과에 사원명 포함
mng/app/Http/Controllers/Api/Admin/HR/AttendanceController.php markAbsent() 수동 트리거 API 엔드포인트 추가
mng/routes/api.php POST /mark-absent 라우트 등록
mng/resources/views/hr/attendances/index.blade.php 결근 처리 버튼 + 모달 + JavaScript 추가
mng/app/Console/Commands/MarkAbsentEmployees.php 새 반환 형식(array)에 맞게 출력 수정

상세 변경 사항

1. 스케줄러 비활성화

routes/console.php에서 attendance:mark-absent 스케줄 주석 처리. artisan 커맨드는 유지하여 필요 시 CLI에서 수동 실행 가능.

2. markAbsentees() 메서드 변경

항목 기존 변경
대상 범위 전체 테넌트 순회 현재 세션 테넌트만
제외 처리 없음 getExcludedUserIds() 적용 (영업팀 + is_excluded)
반환값 int (처리 건수) array (count, skipped_weekend, names)
created_by null (시스템) auth()->id() (실행한 관리자)
remarks '자동 결근 처리' '결근 처리 (수동)'

3. API 엔드포인트

POST /api/admin/hr/attendances/mark-absent
파라미터 타입 필수 설명
date date 대상 날짜 (오늘 이전만 허용)

응답 예시:

{
  "success": true,
  "message": "3명 결근 처리 완료",
  "data": {
    "count": 3,
    "skipped_weekend": false,
    "names": ["홍길동", "김철수", "이영희"]
  }
}

4. UI 변경

근태현황 페이지 우상단에 빨간색 "결근 처리" 버튼 추가. 클릭 시 모달에서 날짜 선택 → 확인 → 실행 → 결과(사원명 목록) 표시. 처리 후 테이블과 통계 자동 갱신.


관련 문서