Commit Graph

1918 Commits

Author SHA1 Message Date
김보곤
4d375d2725 fix: [leaves] 결재 승인 시 최종결재자 ID 조회 수정
- $approval->steps (캐시된 컬렉션) → $approval->steps() (fresh 쿼리)로 변경
- 트랜잭션 내에서 업데이트된 step이 정확히 반영되도록 수정
2026-02-28 16:01:36 +09:00
김보곤
50c0c9ce50 feat: [leaves] 휴가신청 → 전자결재 자동 연동
- LeaveService: 휴가 신청 시 결재 자동 생성+상신
- LeaveService: approveByApproval/rejectByApproval 메서드 추가
- LeaveService: deletePendingLeave 시 연결된 결재 자동 취소
- ApprovalService: 승인/반려/회수/전결 시 휴가 상태 자동 동기화
- Leave 모델: approval_id, approval() 관계 추가
- UI: pending 휴가에 결재 상세 링크 추가, 승인/반려 버튼 제거
2026-02-28 15:54:41 +09:00
김보곤
9a69af98f0 fix: [equipment] 휴일/주말 차단을 일일 점검에만 적용
- 주간~반년 점검은 열이 기간을 대표하므로 비근무일 차단 제거
- 그리드 헤더, 셀 클릭, 판정 계산 모두 $isDaily 조건 추가
- toggleDetail/setResult 서버 차단도 daily에서만 적용
2026-02-28 15:50:36 +09:00
김보곤
3d8606f4d5 feat: [equipment] 점검 데이터 초기화 기능 추가
- 개별 설비 초기화: 장비명 하단 초기화 아이콘 클릭 → 확인 → 해당 월 점검 삭제
- 전체 초기화: 조회 버튼 옆 '전체 초기화' 버튼 → 확인 → 전체 설비 점검 삭제
- DELETE /inspections/reset (개별), /inspections/reset-all (전체) API
- canInspect 권한 체크 적용 (개별 초기화)
- SweetAlert 확인 모달로 실수 방지
2026-02-28 15:46:01 +09:00
김보곤
bdc1b2d3e0 feat: [approval] 결재 알림 드롭다운을 모달로 전환 + 로그인 시 자동 팝업
- 380px 드롭다운 → 560px 전체 화면 모달로 확장
- 로그인 시 미처리 결재 있으면 자동 팝업 (세션당 1회)
- ESC키/backdrop 클릭으로 모달 닫기 지원
- 모달 내 결재 카드: 긴급뱃지, 기안자, 양식, 날짜, 결재하기 링크
- 60초 뱃지 갱신 유지, per_page 10→20으로 확대
2026-02-28 15:33:05 +09:00
김보곤
775b654a26 fix: [equipment] 점검표 휴일 표시 및 주간 1주 저장 버그 수정
- 점검 그리드에 holidays 테이블 기반 휴일 표시 (빨간 배경)
- 휴일/주말 셀 클릭 차단 (UI + 서버 양쪽)
- 자동 판정에서 휴일 제외 (기존 주말만 제외 → 주말+휴일)
- 주간 1주 열 저장 누락 수정 (resolvePeriod에서 isoWeekYear 사용)
- toggleDetail, setResult에 비근무일 검증 추가
- 범례에 '휴일/주말 (점검 불가)' 안내 추가
2026-02-28 15:29:56 +09:00
김보곤
7568fabc18 fix: [approvals] 기안함 뱃지를 진행중 상태 건수로 변경
- 기존: draft(임시저장) 상태 건수 표시
- 변경: pending(진행중) 상태의 내 기안 건수 표시
2026-02-28 15:23:16 +09:00
김보곤
472a1e5c54 fix: [approvals] 뱃지 데이터 View::share 덮어쓰기 문제 수정
- AppServiceProvider와 ViewServiceProvider에서 각각 View::share 호출하여 덮어쓰기 발생
- ViewServiceProvider 한 곳에서 영업+결재 뱃지를 통합 관리하도록 수정
- AppServiceProvider에서 뱃지 로직 제거
2026-02-28 15:21:16 +09:00
김보곤
19eea07041 feat: [equipment] 설비 QR 코드 점검 시스템 추가
- 설비 상세 basic-info 탭에 QR 코드 표시 (qrcode.js CDN)
- QR PNG 다운로드/인쇄 기능
- 모바일 전용 레이아웃 (layouts/mobile.blade.php)
- 모바일 점검 페이지 (/m/inspect/{id})
- setResult API (PATCH /inspections/set-result)
- 4버튼 직접 결과 설정 (양호/이상/수리/취소)
- 전체 양호 일괄 처리
- 주기 탭 전환 (활성 주기만 표시)
2026-02-28 15:17:40 +09:00
김보곤
fa086147de feat: [approvals] 사이드바 결재 뱃지 색상 함별 차별화
- 결재함: 빨간색(#ef4444), 기안함: 파란색(#3b82f6), 참조함: 초록색(#10b981)
- 뱃지 데이터에 color 속성 추가, menu-item에서 inline style로 적용
2026-02-28 15:16:54 +09:00
김보곤
7a1b502f5c fix: [approvals] 사이드바 뱃지 Blade 컴포넌트 스코프 격리 문제 수정
- View::with() → View::share()로 변경하여 <x-sidebar.menu-item> 컴포넌트에서 $menuBadges 접근 가능하도록 수정
2026-02-28 15:13:19 +09:00
김보곤
a844dcb0ac feat: [approvals] 결재 알림 뱃지 시스템 구현
- 사이드바: 결재 대기/기안함/참조함 메뉴에 빨간 뱃지 표시
- 헤더: 알림 벨 클릭 시 결재 대기 목록 드롭다운 표시
- 드롭다운: 제목/기안자/양식/긴급 여부/일시 표시, 클릭 시 상세 이동
- 뱃지 건수 60초 자동 갱신 (API: /api/admin/approvals/badge-counts)
2026-02-28 15:08:42 +09:00
김보곤
367a7bbe56 feat: [approvals] 결재선 카드 드래그 앤 드롭 순서 변경
- SortableJS로 결재선 요약 카드 드래그 앤 드롭 지원
- 순서 변경 시 Alpine 데이터 동기화 및 카드 라벨 자동 갱신
- hover/grab/ghost/chosen 시각 피드백 CSS 추가
- 2명 이상 시 '드래그하여 순서를 변경할 수 있습니다' 힌트 표시
- CSS ::after로 카드 간 화살표 표시 (드래그 시 자연스럽게 이동)
2026-02-28 14:55:15 +09:00
김보곤
55865155de fix: [approvals] 결재선 요약을 제목 아래로 이동, 카드형 표시
- 결재선 요약 바를 본문 아래에서 제목 아래로 위치 변경
- 표시 형식을 '1차 결재 / 직책 / 이름' 카드형으로 변경
- 결재/합의/참조별 색상 구분 (파랑/초록/회색)
2026-02-28 14:48:16 +09:00
김보곤
f5090b48b0 fix: [equipment] 점검표 판정 로직 - 오늘까지 도래한 날짜만 검사
- 미래 날짜는 판정에서 제외
- 일일: 오늘까지의 평일만 검사
- 기타 주기: check_date가 오늘 이전인 열만 검사
2026-02-28 14:42:12 +09:00
김보곤
1a3ec05d6d feat: [approvals] 기안 작성/수정 결재선을 모달로 전환
- 2열 레이아웃(양식 50% + 결재선 50%)을 1열 풀와이드로 변경
- 결재선 편집기를 모달로 이동, 메인 화면에 요약 바만 표시
- ESC 키로 모달 닫기 지원
- edit 페이지 로드 시 기존 결재선 요약 즉시 표시
2026-02-28 14:41:37 +09:00
김보곤
779ba7246e feat: [equipment] 점검표 판정란 자동 합격/불합격 로직 추가
- 일일점검: 주말 제외, 전체 셀 good/repaired → 합격
- 기타 주기: 전체 열 good/repaired → 합격
- 공백 또는 X(bad) 존재 시 불합격 표시
2026-02-28 14:37:09 +09:00
김보곤
c20670f165 fix: [approvals] 결재 상세 메타 정보 열 구분선 추가 (가독성 개선) 2026-02-28 14:26:58 +09:00
김보곤
8ccac1535e fix: [approvals] Quill.js CDN URL 수정 (cdn.quilljs.com → cdn.jsdelivr.net) 2026-02-28 14:21:01 +09:00
김보곤
e9277c695f feat: [approvals] 기안 본문 Quill.js 편집기 토글 기능 추가
- create/edit: 본문 라벨 옆 편집기 체크박스 + Quill.js v2 WYSIWYG 에디터
- edit: 기존 HTML body 자동 감지 → 편집기 자동 활성화
- show: HTML body 안전 렌더링 (strip_tags), plain text는 기존 방식 유지
- textarea ↔ Quill 토글 시 내용 상호 이관
2026-02-28 14:18:16 +09:00
김보곤
8a6ee9f2fe feat: [equipment] 점검항목 다른 주기로 복사 기능 추가
- 서비스: copyTemplatesToCycles 메서드 추가 (중복 항목 스킵)
- 컨트롤러: copyTemplates API 엔드포인트 추가
- UI: 다른 주기에 복사 버튼 + 체크박스 모달
2026-02-28 14:17:18 +09:00
김보곤
1c8c08b078 fix: [approvals] 기본 결재선 템플릿 드롭다운 선택 표시 수정
- selectedLineId 타입을 숫자로 초기화하여 option value와 일치시킴
2026-02-28 14:09:47 +09:00
김보곤
d729e29996 feat: [approvals] 기안 작성 시 기본 결재선 템플릿 자동 선택
- is_default=true인 결재선 템플릿을 자동으로 선택하고 steps 로드
2026-02-28 13:57:24 +09:00
김보곤
beecf0851e feat: [equipment] 다중 점검주기 + 정/부 담당자 체계 구현
- InspectionCycle enum: 6종 점검주기 상수, 열 라벨, check_date 계산
- Equipment 모델: subManager 관계, canInspect() 권한 체크
- Template/Inspection 모델: inspection_cycle fillable 추가
- EquipmentInspectionService: 주기별 점검 조회/토글/권한 체크
- 점검표 UI: 주기 탭, 동적 필터(월/연도), 주기별 그리드 열
- 점검항목 템플릿: 주기별 탭 그룹핑, 모달에 주기 선택
- 설비 등록/수정/상세: 부 담당자 필드 추가
- 권한 없는 장비 셀 비활성(cursor-not-allowed, opacity-50)
2026-02-28 12:37:37 +09:00
김보곤
0aab609dcc feat: [users] 사용자 수정 화면에 소속 부서 선택 기능 추가
- UserController: profile 쿼리에 department_id 추가
- edit.blade.php: 소속 부서 select 드롭다운 UI 추가
- UpdateUserRequest: department_id 유효성 검증 규칙 추가
- UserService: tenant_user_profiles에 department_id 저장 로직 추가
2026-02-28 12:14:14 +09:00
김보곤
2b09857637 fix: [approvals] 결재선 저장 시 직책(job_title) fallback 추가
- enrichLineSteps: position_label → job_title_label fallback
- saveApprovalSteps: 동일 fallback 적용
- position_key가 NULL이고 job_title_key만 있는 사용자 대응
2026-02-28 09:25:21 +09:00
김보곤
fce8b7011e fix: [approvals] 결재선 인원 목록 직급순 정렬 적용
- 부서 내 정렬: 직급(pos_rank) → 직책(pos_title) → 이름 순
- COALESCE로 직급/직책 없는 사용자는 하단 배치
2026-02-28 09:20:23 +09:00
김보곤
317beb1b5e style: [approvals] 결재선 관리 모달 Toss 스타일 리디자인
- CSS 변수 기반 Toss 디자인 시스템 적용
- backdrop blur + slide-up 애니메이션
- 카드 기반 결재선 목록 (arrow flow 표시)
- 커스텀 step type select, pill 버튼
- 모달/인풋/버튼 전체 톤앤매너 통일
2026-02-28 09:14:53 +09:00
김보곤
4856eedb09 feat: [approvals] 결재선 템플릿 CRUD 기능 추가
- POST/PUT/DELETE /api/admin/approvals/lines 라우트 추가
- ApprovalApiController storeLine/updateLine/destroyLine 메서드
- ApprovalService createLine/updateLine/deleteLine + enrichLineSteps 헬퍼
- 기안함 화면에 결재선 관리 버튼 + 모달 UI (목록/편집 2-state)
2026-02-28 09:07:14 +09:00
김보곤
49951d70c0 feat: [menu-sync] 순서 동기화 Push + 되돌리기 기능 추가
- pushOrder: 로컬 메뉴 순서를 원격 서버에 일괄 반영
- undoOrder: 순서 동기화 취소하여 이전 상태로 복원
- reorder: 외부 API 엔드포인트 (이름 기반 매칭)
- 세션 기반 스냅샷으로 되돌리기 지원
2026-02-28 08:41:03 +09:00
김보곤
5ebca1402d feat: [users] 재직/휴직/퇴직 상태 검색 필터 추가
- index.blade.php에 employee_status 필터 select 추가
- UserService에 tenant_user_profiles 기반 필터링 로직 추가
2026-02-28 08:31:14 +09:00
김보곤
83f10552df feat: [menus] 최상위 그룹 상단/하단 이동 버튼 추가
- depth=0 메뉴에만 이동 버튼(↕) 표시
- 클릭 시 드롭다운으로 상단/하단 이동 선택
- 기존 reorder API 재사용하여 sort_order 일괄 변경
2026-02-28 08:24:36 +09:00
김보곤
8ba619d659 feat: [users] 재직상태(재직/휴직/퇴직) 표시 및 수정 기능 추가
- 사용자 목록 테이블에 재직상태 컬럼 추가 (재직/휴직/퇴직 배지)
- 사용자 수정 화면에 재직상태 select 필드 추가
- UserService.getUsers()에 employee_status 서브쿼리 추가
- UserService.updateUser()에서 tenant_user_profiles에 employee_status 저장
- UpdateUserRequest에 employee_status validation 추가
2026-02-28 08:23:16 +09:00
김보곤
0b5429838c fix: [users] 직급/직책 툴팁이 항상 표시되는 문제 수정
- Tailwind invisible/group-hover 클래스가 빌드에 누락되어 항상 표시됨
- inline style(display:none) + onmouseenter/onmouseleave로 변경
2026-02-28 08:13:26 +09:00
김보곤
a5abd950f2 feat: [users] 직급/직책 label에 info 툴팁 아이콘 추가
- 직급: "조직 내 서열" 설명 (사원, 대리, 과장 등)
- 직책: "맡은 역할/책임" 설명 (팀장, 실장 등)
- hover 시 tooltip 표시 (group/invisible 패턴)
2026-02-28 08:11:03 +09:00
김보곤
0ee6b9f77a feat: [users] 사용자 관리에 직급/직책 입력 UI 추가
- 사용자 수정/생성 화면에 직급(position_key), 직책(job_title_key) 선택 필드 추가
- HR 사원관리의 position-add-modal 재사용 ([+] 버튼으로 새 직급/직책 추가)
- UserService에서 tenant_user_profiles 테이블에 저장 (updateOrInsert)
- UpdateUserRequest, StoreUserRequest에 validation 규칙 추가
2026-02-28 08:07:21 +09:00
김보곤
ac3b72cac6 feat: [approvals] 결재선 에디터 2패널 UI/UX 개선
- 좌측 패널: 부서별 인원 목록 (접이식 그룹핑, 검색 필터)
- 우측 패널: 결재선 (SortableJS 드래그앤드롭 순서 변경)
- 부서별 전체 인원 API 추가 (GET /api/admin/tenant-users/list)
- 결재/합의/참조 유형별 요약 바 추가
- position_key → positions 테이블 조인으로 직위 라벨 표시
2026-02-28 07:45:30 +09:00
김보곤
d5b1f05256 fix: [approvals] 결재자 검색 API 응답 필드 수정
- department_name → department 필드명 변경 (프론트엔드 호환)
- tenant_user_profiles 조인으로 position(직급) 데이터 추가
- 부서명 검색 지원 추가
2026-02-28 00:56:10 +09:00
김보곤
bcfbcc3a1e fix: [approvals] Alpine.js v3 호환 결재선 데이터 접근 방식 수정
- __x.$data (v2 문법) → _x_dataStack[0] (v3 문법)으로 변경
- 에디터에 id="approval-line-editor" 추가하여 정확한 요소 선택
- create.blade.php, edit.blade.php 동시 수정
2026-02-28 00:45:08 +09:00
김보곤
28458488d4 fix: [approval] whereColumn → where 서브쿼리 비교 오류 수정
- getPendingForMe, getBadgeCounts에서 whereColumn에 Closure 전달 오류
- whereColumn은 두 컬럼 비교용, 서브쿼리 비교는 where 사용
2026-02-27 23:47:55 +09:00
김보곤
f87f1afde0 feat: [approval] Phase 2 결재관리 고급 기능 구현
- 보류/해제: 현재 결재자가 문서를 보류하고 해제
- 전결: 이후 모든 결재를 건너뛰고 최종 승인
- 회수 강화: 회수 사유 입력, 첫 결재자 미처리 시에만 허용
- 복사 재기안: 완료/반려/회수 문서를 복사하여 새 draft 생성
- 참조 열람 추적: 미열람/열람 필터, mark-read API
- ApprovalDelegation 모델 생성 (Phase 3 위임 대결 준비)
- 뱃지 카운트에 reference_unread 추가
2026-02-27 23:41:49 +09:00
김보곤
1aa0c50c6d feat: [approval] 결재관리 Phase 1 MVP 구현
- 모델 4개: Approval, ApprovalStep, ApprovalForm, ApprovalLine
- ApprovalService: 목록/CRUD/워크플로우(상신/승인/반려/회수) 비즈니스 로직
- ApprovalApiController: JSON API 엔드포인트 (기안함/결재함/완료함/참조함)
- ApprovalController: Blade 뷰 컨트롤러 (HX-Redirect 처리)
- 뷰 8개: drafts, pending, completed, references, create, edit, show
- partials: _status-badge, _step-progress, _approval-line-editor
- api.php/web.php 라우트 등록
2026-02-27 23:17:17 +09:00
김보곤
8c574088f4 feat: [payroll] 급여 확정 취소 기능 추가
- 확정 상태에서 작성중으로 되돌리는 기능 추가
- Model: isUnconfirmable() 상태 헬퍼 추가
- Service: unconfirmPayroll() 메서드 추가
- Controller: unconfirm() 엔드포인트 추가
- Route: POST /{id}/unconfirm 라우트 추가
- View: 확정 취소 버튼 및 JS 함수 추가
2026-02-27 22:17:15 +09:00
김보곤
f922646b7b feat: [hr] 사업소득자 임금대장 입력 기능 구현
- BusinessIncomePayment 모델 (소득세3%/지방소득세0.3% 자동계산)
- BusinessIncomePaymentService (일괄저장/통계/CSV내보내기)
- 웹/API 컨트롤러 (ALLOWED_PAYROLL_USERS 접근 제한)
- 스프레드시트 UI (인라인 편집, 실시간 세금 계산)
- HTMX 연월 변경 갱신, CSV 내보내기
2026-02-27 20:22:07 +09:00
김보곤
958a9302b0 fix: [payroll] 전월 복사/일괄 생성 시 SoftDeletes 유니크 제약 충돌 수정
- exists() 대신 withTrashed()->first()로 soft-deleted 레코드 포함 체크
- soft-deleted 레코드 존재 시 forceDelete() 후 재생성
- copyFromPreviousMonth(), bulkGenerate() 양쪽 동일 수정
2026-02-27 18:01:38 +09:00
김보곤
48dc94c0b0 feat: [payroll] 급여관리 페이지 접근 제한 (이름 기반)
- 허용 사용자: 이경호, 전진선, 김보곤
- 웹 컨트롤러: 미허용 시 안내 뷰 반환
- API 컨트롤러: 모든 엔드포인트에 403 반환
- restricted.blade.php 안내 페이지 생성
2026-02-27 17:59:50 +09:00
김보곤
22e6cacced fix: [payroll] 전월 복사 후 테이블 새로고침 함수명 수정
- refreshPayrollTable → refreshTable (실제 함수명)
2026-02-27 17:37:56 +09:00
김보곤
d55d1c3405 feat: [payroll] 전월 급여 복사 등록 기능 추가
- PayrollService에 copyFromPreviousMonth() 메서드 추가
- PayrollController에 copyFromPrevious() 액션 추가
- 전월 지급/공제 금액을 그대로 복사 (요율 재계산 없음)
- 이미 존재하는 사원/연월은 스킵 처리
2026-02-27 17:30:06 +09:00
김보곤
f81436c26f fix: [esign] 서명/도장 이미지 원본 비율 유지하여 PDF 합성
- overlayImage()에서 원본 이미지 가로세로 비율 계산
- 필드 영역 내 contain 방식 배치 (비율 유지 + 중앙 정렬)
- getimagesize 실패 시 기존 방식 폴백
2026-02-27 17:22:19 +09:00
김보곤
2a1cbdff15 fix: [esign] 운영서버 PDF 미리보기 필드값 누락 수정
- TCPDF K_PATH_FONTS를 storage/fonts/tcpdf/로 설정하여 vendor 쓰기 권한 문제 해결
- 사전 생성된 Pretendard 폰트 정의 파일 포함 (런타임 생성 불필요)
- downloadDocument() 에러 로깅 상세화 (trace 포함)
2026-02-27 16:58:53 +09:00