Commit Graph

474 Commits

Author SHA1 Message Date
김보곤
5b70882e97 fix: [연차촉진] 1년 미만 근로자 촉진기간 계산 공식 분리 적용
- 1년 이상: 만료 6개월/2개월 전 (제61조 1항)
- 1년 미만: 만료 3개월/1개월 전 (제61조 2항)
- 대상자 목록에 1년미만 배지 표시
2026-03-20 10:48:19 +09:00
김보곤
3223c6e475 fix:[HR] 휴가관리 목록 정렬을 기간 최신순으로 변경 2026-03-20 10:44:56 +09:00
김보곤
2c08de6acf fix: [근태] 캘린더 뷰에 영업팀/제외 사원 필터 누락 수정 2026-03-20 10:16:52 +09:00
김보곤
7b5d98abdc refactor:[근태] 자동 결근 처리를 수동 트리거 방식으로 전환 2026-03-20 09:35:45 +09:00
김보곤
a8c33ee55f fix: [근태현황] soft-deleted attendance 복원 시 $fillable 제한 문제 수정
deleted_at이 Attendance 모델 $fillable에 없어서
updateOrCreate()에서 deleted_at=null 설정이 무시되던 근본 원인 수정.
restore() 메서드로 soft-delete 복원하도록 변경.
2026-03-19 21:55:55 +09:00
김보곤
66224511f1 fix: [근태현황] 승인된 휴가의 누락 attendance 레코드 자동 보정
승인된 휴가가 있으나 대응하는 attendance 레코드가 없는 경우,
근태 목록/통계/엑셀 조회 시 자동으로 누락된 레코드를 생성하도록
syncApprovedLeaveAttendances 메서드 추가
2026-03-19 21:48:05 +09:00
김보곤
ae7dcf2a34 fix: [barobill] 카드 동기화 SOAP 응답 파싱 수정
- GetCardEx2 응답 구조: CardInfo → CardEx로 수정
2026-03-19 19:18:32 +09:00
김보곤
a8b59626a1 feat: [barobill] 카드 사용내역 자동 동기화 스케줄러 추가
- BarobillCardSyncService: 전체/테넌트별 카드거래 자동 동기화
- SyncBarobillCardTransactions: artisan 커맨드 (barobill:sync-cards)
- 2시간마다 영업시간(08~22시) 자동 실행
- 신규 거래 자동 등록, 기존 거래 바로빌 원본 필드만 갱신 (사용자 편집 보존)
2026-03-19 19:04:27 +09:00
김보곤
b1dae9d24d fix: [leave] 결재 승인 시 soft delete된 근태 레코드 중복 오류 수정
- SoftDeletes로 삭제된 Attendance 레코드가 있을 때 updateOrCreate가
  기존 레코드를 찾지 못해 INSERT 시도 → unique 제약 위반 발생
- withTrashed() 추가하여 soft delete된 레코드도 조회하고 복원하도록 수정
2026-03-16 15:35:50 +09:00
김보곤
c8d994a225 feat: [mng] develop 일괄 반영
- fire-shutter 가이드레일/셔터박스/3D 렌더링
- sales 가격시뮬레이터/프로모션 할인
- bim 뷰어/생성기, pmis 작업일보/출면일보
- demo-tenant 체험 관리
- 전표/급여/전자서명 버그 수정
2026-03-16 15:07:47 +09:00
김보곤
57ff8d14d6 fix: [payroll] 급여등록 사원선택에서 영업팀(외주) 제외 2026-03-12 09:57:13 +09:00
김보곤
5911f530a6 feat: [email] 테넌트 이메일 설정 관리 기능 추가
- TenantMailConfigController: 목록, 편집, 저장, SMTP 테스트 API
- TenantMailConfig, MailLog 모델 추가
- SmtpConnectionTester: SMTP 연결 테스트 서비스 (에러 코드, 트러블슈팅)
- TenantMailService: 테넌트 설정 기반 메일 발송 (쿼터, Fallback)
- config/mail-presets.php: Gmail/Naver/MS365 등 8개 SMTP 프리셋
- Blade 뷰: 테넌트 목록 현황 + 설정 폼 (프리셋 자동 채움, 연결 테스트)
- 라우트 추가: /system/tenant-mail/*
2026-03-12 07:42:49 +09:00
김보곤
e5c12e5d85 fix: [approval] ApprovalStep에 SoftDeletes, tenant_id 동기화
- API에서 approval_steps 테이블에 tenant_id, deleted_at 추가에 따른 동기화
- ApprovalStep 모델에 SoftDeletes 추가, tenant_id fillable 추가
- ApprovalStep::create() 시 tenant_id 포함 (2곳)
2026-03-11 17:13:42 +09:00
김보곤
276f015138 fix: [esign] PDF 한글 폰트 깨짐 수정 — K_PATH_FONTS 의존 제거
- K_PATH_FONTS 상수가 TCPDF vendor 경로로 선점되면 pretendard 폰트를 못 찾는 문제
- AddFont()으로 storage/fonts/tcpdf/ 경로를 직접 지정하여 확실하게 로드
- 폴백: resources/fonts/Pretendard-Regular.ttf → helvetica
2026-03-11 14:06:28 +09:00
1b284f990d fix: [hr] 급여명세서 한글 폰트 — storage_path 기반으로 변경하여 배포 간 안정성 확보
- chroot에 storage_path('fonts') 추가 (symlink→shared 경로 허용)
- 폰트를 resources→storage로 복사 후 storage 경로로 등록 (릴리스 불변)
- 배포마다 .ufm 메트릭 재생성 방지

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 13:48:22 +09:00
fee127916f fix: [hr] DomPDF setOptions 제거 — chroot 덮어쓰기로 인한 폰트 등록 실패 수정
- setOptions()가 config의 chroot(base_path)를 new Options()로 전체 교체 → vendor 기본값으로 리셋
- resource_path 폰트 경로가 chroot 밖으로 판정되어 registerFont() false 반환
- setOptions 제거 → config/dompdf.php 설정(font_dir, font_cache, chroot) 그대로 사용
- storage 수동 복사도 제거 → DomPDF가 내부적으로 font_dir에 복사 + .ufm 생성

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 13:37:37 +09:00
c179c46b8c fix: [hr] DomPDF 인스턴스 불일치 해결 — 급여명세서 한글 폰트 깨짐 수정
- 기존: app()으로 별도 DomPDF 인스턴스에 폰트 등록 → Pdf::loadView()의 인스턴스에는 미적용
- 수정: $pdf->getDomPDF()로 동일 인스턴스에 폰트 등록 후 output() 호출
- Pretendard 폰트 사용, resources/fonts/에서 storage/fonts/로 복사 후 등록

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 13:23:38 +09:00
김보곤
29e8dea54a fix: [payroll] PDF 한글 폰트 NanumGothic → Pretendard 전환
- 운영서버 NanumGothic 메트릭 생성 실패 문제 해결
- Pretendard Regular/Bold TTF를 resources/fonts/에 번들링
- ensureKoreanFont()에서 Pretendard 등록으로 변경
- payslip.blade.php font-family를 Pretendard로 변경
- PDF 크기: 18KB (서브셋팅 적용)
2026-03-11 11:49:57 +09:00
김보곤
6762b75b97 fix: [payslip] PDF 생성 시 font_dir 명시적 지정 (config 캐시 무관)
- setOptions()로 font_dir, font_cache, enable_font_subsetting 직접 전달
- ensureKoreanFont()에서도 DomPDF 옵션을 명시적으로 설정
- 캐시 유효성 검증 강화: TTF + .ufm 메트릭 파일 모두 확인
- config 캐시 상태와 무관하게 storage/fonts/ 사용 보장
2026-03-11 11:18:40 +09:00
김보곤
e5b00832e2 fix: [payslip] ensureKoreanFont 캐시 유효성 검증 추가
- installed-fonts.json에 키만 있고 실제 폰트 파일이 없으면 재등록
- 배포 후 수동 캐시 초기화 불필요
2026-03-11 11:10:37 +09:00
김보곤
84b86a08a0 fix: [payslip] 폰트를 프로젝트에 포함하여 서버 의존성 제거
- resources/fonts/에 NanumGothic TTF 포함 (Git으로 배포)
- ensureKoreanFont()가 시스템 경로 대신 resource_path() 사용
- fonts-nanum 패키지 미설치 서버에서도 한글 PDF 정상 생성
2026-03-11 11:01:19 +09:00
김보곤
5024be5596 fix: [daily-fund] 일일자금일보 바로빌 데이터 자동 동기화 추가
- periodReport에서 데이터 조회 전 바로빌 API 자동 동기화 트리거
- BarobillBankSyncService 서비스 클래스 생성 (EaccountController 로직 분리)
- 현재 월 캐시 10분 만료, 과거 월 영구 캐시 정책 동일 적용
- 동기화 실패 시 기존 DB 캐시로 폴백 (서비스 중단 방지)
2026-03-11 09:56:23 +09:00
김보곤
88b70f02d4 fix: [hr] 급여명세서 PDF 한글 폰트 깨짐 수정
- NanumGothic 폰트 자동 등록 로직 추가 (ensureKoreanFont)
- storage/fonts/에 폰트 복사 후 DomPDF에 등록 (최초 1회)
- payslip.blade.php font-family를 NanumGothic으로 변경
- 서버 배포 시 수동 폰트 등록 불필요
2026-03-11 09:50:24 +09:00
김보곤
ec35b2f456 fix: [hr] 급여명세서 PDF 구글 폰트 외부 로드 제거
- payslip.blade.php: @import 구글 폰트 URL 삭제, 시스템 기본 폰트 사용
- PayrollService.php: isRemoteEnabled 옵션 제거
- 운영서버 배포 시 폰트 캐시 권한 오류 근본 해결
2026-03-11 09:41:56 +09:00
김보곤
bb267d14c1 feat: [payroll] 슈퍼관리자 급여 수정/지급취소 권한 추가
- 지급완료/확정 상태에서도 슈퍼관리자는 급여 수정 가능
- 지급취소(unpay) 기능 추가: paid → draft 상태 되돌리기
- 테이블에 슈퍼관리자 전용 수정/지급취소 버튼 표시
2026-03-11 06:52:45 +09:00
dfe97308f3 deploy: 2026-03-11 배포
- feat: MNG→SAM 자동 로그인 토큰 (LoginToken 모델 도메인 매핑)
- feat: 사용자/역할/부서 관리 개선 (Controller, Service, View)
- feat: 메뉴 관리 개선 (MenuService, menu-tree.js)
- fix: 문서 뷰어, FCM 토큰, 방화셔터 도면, 테넌트 테이블 뷰 수정
2026-03-11 02:12:51 +09:00
김보곤
a14c7a5119 fix: [payroll] 급여명세서 이메일 발송 시 개인 이메일 우선 참조
- 개인 이메일이 있으면 개인 이메일로 발송
- 개인 이메일이 없으면 업무용 이메일로 폴백
- 목록의 이메일 모달에서도 동일 로직 적용
2026-03-10 10:58:12 +09:00
김보곤
76a993d32d feat: [employee] 사원관리 개인 이메일 필드 추가
- 사원 수정 폼에 개인 이메일 입력 필드 추가
- 레이아웃 2x2 배열로 변경 (업무용 이메일|개인 이메일 / 주민등록번호|연락처)
- Employee 모델에 personalEmail accessor 추가
- 컨트롤러 validation, 서비스 jsonExtraKeys에 personal_email 반영
2026-03-10 10:05:00 +09:00
김보곤
4a3d14a591 feat: [payroll] 급여명세서 이메일을 PDF 첨부파일로 변경
- 이메일 본문에 급여 내역 직접 노출 → PDF 첨부파일로 전환 (보안 강화)
- barryvdh/laravel-dompdf 패키지 추가
- 이메일 본문은 간단한 안내 메시지로 변경
- dompdf에서 한글 렌더링을 위해 Noto Sans KR 폰트 적용
2026-03-10 09:12:25 +09:00
김보곤
4c2a905a94 feat: [payroll] 이메일 발송 후 '발송' 라벨 표시 기능
- payrolls 테이블 options JSON에 email_sent_at/email_sent_to 저장
- 이메일 아이콘 아래 '발송' 텍스트 표시 (서버 렌더링 + JS 즉시 반영)
- Payroll 모델에 options 컬럼 추가
2026-03-10 01:21:28 +09:00
김보곤
5ac4495d6b feat: [payroll] 급여명세서 이메일 발송 기능 추가
- PayslipMail Mailable 클래스 생성 (admin@codebridge-x.com 발송)
- 급여명세서 이메일 템플릿 (전통 한국식 양식)
- 이메일 발송 API 엔드포인트 추가 (POST /payrolls/{id}/send-payslip)
- 목록 테이블에 이메일 발송 아이콘 버튼 추가
- 급여명세서 미리보기 모달 + 인쇄 기능
2026-03-10 01:06:48 +09:00
김보곤
0ef6b72d8e feat: [hr] 연차촉진 관리에 1차/2차 촉진기간 컬럼 추가
- 근로기준법 제61조 기준 입사일 기반 촉진기간 자동 계산
- 1차 촉진기간: 연차만료 6개월 전 ~ +10일
- 2차 촉진기간 마감: 연차만료 2개월 전
- 잔여일수 다음에 촉진기간 표시
2026-03-10 00:37:33 +09:00
김보곤
fcdffa66db feat: [hr] 휴가관리 참조자 선택 기능 추가
- 휴가 신청 모달에 참조자 검색/선택 UI 추가 (Alpine.js)
- 부서별 사용자 목록에서 참조자 검색 및 녹색 칩 표시
- LeaveController 참조 배열 유효성 검증 추가
- LeaveService에서 결재선 steps에 참조자 자동 병합
2026-03-10 00:10:16 +09:00
김보곤
d9be4e2400 feat: [hr] 연차촉진 관리 페이지 추가
- LeavePromotionController: 대상자 목록 조회 + 일괄 통지 발송
- LeaveService: getPromotionCandidates(), sendPromotionNotices() 메서드 추가
- 통지 현황 추적 (미발송/1차 발송/완료)
- 일괄 선택 + 결재 문서 자동 생성 + 상신
2026-03-07 00:46:31 +09:00
김보곤
b708f473d1 fix: [approval] 연차사용촉진 통지서 Employee 모델 속성 수정
- departments->first() → department? (BelongsTo 단수 관계)
- $emp->name → $emp->display_name
- $emp->position → $emp->position_key
- $emp->id → $emp->user_id
- LeaveService에 department eager load 추가
2026-03-07 00:33:55 +09:00
김보곤
c8223a63b5 fix: [approvals] 사직서 주민번호 마스킹 제거 2026-03-06 17:48:51 +09:00
김보곤
43862e26c6 fix: [approvals] 위촉증명서 PDF 상단 여백 축소 (전체 위치 상향) 2026-03-06 17:41:08 +09:00
김보곤
eb47351af1 fix: [approvals] 위촉증명서 주민번호 마스킹 제거 2026-03-06 17:35:58 +09:00
김보곤
0649802ffd fix: [approvals] 재직/경력증명서 주민번호 전체 표시 (마스킹 제거)
- 재직증명서: 주민번호 뒷자리 ****** 마스킹 제거, 전체 표시
- 경력증명서: 주민등록번호 필드 추가 (폼/조회/미리보기/PDF)
- EmploymentCertService: maskedResident 로직 제거
- CareerCertService: resident_number 반환 추가, PDF 행 추가
2026-03-06 15:59:05 +09:00
김보곤
2906825c33 feat: [sidebar] 사이드바 메뉴 즐겨찾기 기능 추가
- MenuFavorite 모델 생성 (menu_favorites 테이블)
- SidebarMenuService에 즐겨찾기 CRUD 메서드 추가
- MenuFavoriteController 생성 (toggle/reorder API)
- 사이드바 상단에 즐겨찾기 섹션 표시
- 메뉴 아이템에 별 아이콘 추가 (hover 시 표시, 토글)
- 최대 10개 제한, 리프 메뉴만 대상
2026-03-06 14:34:46 +09:00
김보곤
e02f1daf0a fix: [approvals] 위촉증명서 테이블 2열 행 텍스트 넘침 수정
- table-layout:fixed + colgroup(18%/32%/18%/32%)로 열 너비 고정
- td에 white-space:nowrap 추가하여 텍스트 줄바꿈 방지
- th width 고정값 제거 → colgroup 비율로 제어
- "위촉(재직)기간" → "위촉기간"으로 라벨 축소
- padding 18px→14px, font 16px→15px로 미세 조정
2026-03-06 10:56:24 +09:00
김보곤
36fa02132c fix: [approvals] 사직서 레이아웃 개선 - A4 용지 내 안정된 수직 배분
- HTML: @page A4 설정, cert-page wrapper(padding 100px), th/td 16px 18px, font 16px
- PDF: 상단여백 40mm+Ln20, rowHeight 8→12, 본문 10→12pt, 문구 12→14pt, 회사 14→16pt
- 섹션 간격 대폭 확대 (테이블↔문구 30mm, 신청인↔회사 30mm)
- create/show 동일 적용
2026-03-06 10:40:41 +09:00
김보곤
f7bb375bea fix: [approvals] 경력증명서 증명문구 재직/퇴직 분기 처리
- 퇴직일 있음: "위 사람은 당사에 재직(근무) 하였음을 증명합니다."
- 퇴직일 없음(현재 재직): "위 사람은 당사에서 재직(근무) 하고 있음을 증명합니다."
- HTML 미리보기(create/show) + PDF 모두 적용
2026-03-06 10:35:54 +09:00
김보곤
f83986aec3 fix: [approvals] 재직증명서 레이아웃 개선 - A4 용지 내 수직 배분 조정
- HTML 미리보기: @page A4 설정, cert-page wrapper, padding/font-size 증가
- PDF(TCPDF): 상단여백 추가, 섹션간격 확대, rowHeight 8→10, 본문 10→11pt
- 증명문구/날짜 12→14pt, 회사명 14→16pt
- create/show 동일 적용
2026-03-06 10:26:11 +09:00
김보곤
f00eee7f12 fix: [approvals] 위촉증명서 레이아웃 개선 - 테이블 행 높이/글자크기 증가
- HTML 미리보기: th/td padding 16px 18px, font-size 16px, th width 140px
- PDF(TCPDF): rowHeight 8→12, 본문 폰트 10→12, 증명문구/날짜 12→14, 회사명 14→16
- create/show 동일하게 적용
2026-03-06 10:19:21 +09:00
김보곤
b60f2109af feat: [document] 양식 디자이너(Block Builder) Phase 2 - 블록 런타임 렌더러
- BlockRendererService: view/edit/print 3모드 렌더링 지원
  - edit 모드: 폼 필드(input/select/textarea/checkbox) 생성
  - view 모드: 읽기 전용 데이터 표시
  - print 모드: 인쇄 최적화 레이아웃
- 데이터 바인딩: block.binding → document_data.field_key 매핑
- 체크박스 그룹: 콤마 구분 값으로 저장/복원
- 테이블 셀 편집: tbl_{blockId}_r{row}_c{col} 키로 EAV 저장
- edit.blade.php: 블록 빌더 서식 분기 (blockFormContainer)
- show.blade.php: 블록 빌더 조회 모드 분기
- DocumentController: renderBlockHtml() 메서드 추가
2026-03-06 10:16:50 +09:00
김보곤
10b3490d9c fix: [approvals] 위촉증명서 인쇄/PDF A4 레이아웃 수직 배분 개선
- 인쇄 CSS: @page A4 적용, 상단 padding 100px로 확대
- HTML 미리보기: 제목/테이블/증명문구/날짜/서명 간격 확대
- PDF: 상단 여백 및 섹션 간 Ln 값 증가 (A4 수직 균등 배분)
2026-03-06 10:09:15 +09:00
김보곤
b05daffedb fix: [approvals] 재직증명서 양식에 대표자명/회사주소 누락 수정
- 재직증명서 폼/제출/미리보기/PDF에 ceo_name, company_address 추가
- tenants 테이블에서 가져온 회사 정보를 모든 기안 양식에 통일 적용
- 경력/위촉/사직서는 이미 정상 처리, 재직증명서만 누락되어 있었음
2026-03-06 09:19:57 +09:00
김보곤
d9c905ca9a feat: [approval] 사직서 양식 추가
- ResignationService 생성 (정보 조회 + PDF 생성)
- 사직서 전용 폼/조회 파셜 추가
- create/show 블레이드에 사직서 JS 로직 통합
- 컨트롤러 resignationInfo/resignationPdf 메서드 추가
- API 라우트 resignation-info, resignation-pdf 등록
2026-03-06 00:13:38 +09:00
김보곤
2dc559d190 feat: [approval] 위촉증명서 기안/조회/PDF 기능 추가
- AppointmentCertService: 사원 위촉정보 조회 + TCPDF PDF 생성
- 기안 작성 폼: 사원 선택, 인적/위촉/발급 정보, 미리보기
- 상세 조회: 읽기전용 렌더링 + 미리보기/PDF 다운로드
- API: appointment-cert-info, appointment-cert-pdf 엔드포인트
2026-03-05 23:58:07 +09:00