diff --git a/user-management/api/models/vacationModel.js b/user-management/api/models/vacationModel.js index c59307f..833a6d8 100644 --- a/user-management/api/models/vacationModel.js +++ b/user-management/api/models/vacationModel.js @@ -264,15 +264,17 @@ async function autoGrantLongServiceLeave(users, year, createdBy, settings) { if (!u.hire_date) continue; const hire = new Date(u.hire_date); - const yearsWorked = year - hire.getFullYear(); - // 해당 연도 내 threshold 도래 건만 (소급 없음) - if (yearsWorked !== thresholdYears) continue; - - // 기념일이 해당 연도인지 확인 + // 정확한 5년 기념일 계산 const anniversaryDate = new Date(hire); anniversaryDate.setFullYear(hire.getFullYear() + thresholdYears); + + // 기념일이 해당 연도가 아니면 스킵 if (anniversaryDate.getFullYear() !== year) continue; + // 기념일이 아직 도래하지 않았으면 스킵 (정확히 5년 경과 필요) + const today = new Date(); + if (today < anniversaryDate) continue; + // long_service_excluded 체크 const [userRows] = await db.query( 'SELECT long_service_excluded FROM sso_users WHERE user_id = ?', diff --git a/user-management/web/index.html b/user-management/web/index.html index 4770dcd..155a157 100644 --- a/user-management/web/index.html +++ b/user-management/web/index.html @@ -904,15 +904,21 @@ -
- - +
+
+ + +
+
+ + +
@@ -2410,7 +2416,7 @@ - + diff --git a/user-management/web/static/js/tkuser-vacations.js b/user-management/web/static/js/tkuser-vacations.js index 820f543..3fa3c6f 100644 --- a/user-management/web/static/js/tkuser-vacations.js +++ b/user-management/web/static/js/tkuser-vacations.js @@ -353,6 +353,7 @@ function openVacBalanceModal(editId) { document.getElementById('vacBalModalTitle').textContent = '연차 배정'; const year = document.getElementById('vacYear')?.value || new Date().getFullYear(); + document.getElementById('vbYear').value = year; document.getElementById('vbExpiresAt').value = `${year}-12-31`; // 사용자 셀렉트 (부서별 optgroup) @@ -422,11 +423,10 @@ document.getElementById('vacBalanceForm').addEventListener('submit', async e => })}); showToast('수정되었습니다.'); } else { - const year = document.getElementById('vacYear')?.value || new Date().getFullYear(); await api('/vacations/balances', { method: 'POST', body: JSON.stringify({ user_id: parseInt(document.getElementById('vbUser').value), vacation_type_id: parseInt(document.getElementById('vbType').value), - year: parseInt(year), + year: parseInt(document.getElementById('vbYear').value), total_days: parseFloat(document.getElementById('vbTotalDays').value) || 0, used_days: parseFloat(document.getElementById('vbUsedDays').value) || 0, balance_type: document.getElementById('vbBalanceType').value,