feat: [esign] 근로계약서 사원불러오기 최신 연봉정보 반영
- 백엔드: salary_effective_date 추가 반환, 이력 fallback 로직 추가 - 프론트: 연봉계약 시작/종료일을 최신 연봉 적용일 기준으로 계산 - 근로계약은 입사일 기준, 연봉계약은 연봉 적용일 기준으로 분리
This commit is contained in:
@@ -114,6 +114,18 @@ public function searchEmployees(Request $request): JsonResponse
|
||||
|
||||
$salaryInfo = $emp->getSalaryInfo();
|
||||
|
||||
// 최신 연봉 정보 결정: 현재값 우선, 없으면 이력에서 최신 탐색
|
||||
$annualSalary = $salaryInfo['annual_salary'] ?? null;
|
||||
$salaryEffectiveDate = $salaryInfo['effective_date'] ?? null;
|
||||
|
||||
if ($annualSalary === null && ! empty($salaryInfo['history'])) {
|
||||
$latest = collect($salaryInfo['history'])
|
||||
->sortByDesc('effective_date')
|
||||
->first();
|
||||
$annualSalary = $latest['annual_salary'] ?? null;
|
||||
$salaryEffectiveDate = $latest['effective_date'] ?? null;
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => $emp->id,
|
||||
'name' => $emp->user?->name,
|
||||
@@ -127,7 +139,8 @@ public function searchEmployees(Request $request): JsonResponse
|
||||
'birth_year' => $birthYear,
|
||||
'birth_month' => $birthMonth,
|
||||
'birth_day' => $birthDay,
|
||||
'annual_salary' => $salaryInfo['annual_salary'] ?? null,
|
||||
'annual_salary' => $annualSalary,
|
||||
'salary_effective_date' => $salaryEffectiveDate,
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
@@ -952,22 +952,42 @@ className={`w-full text-left px-3 py-2.5 rounded-lg mb-1 transition-colors ${i =
|
||||
const handleEmployeeSelect = (emp) => {
|
||||
// 입사일에서 년/월/일 분리
|
||||
let hireYear = '', hireMonth = '', hireDay = '';
|
||||
let endYear = '', endMonth = '', endDay = '';
|
||||
let hireEndYear = '', hireEndMonth = '', hireEndDay = '';
|
||||
// 연봉계약 시작/종료일 (최신 연봉 적용일 기준, 없으면 입사일 fallback)
|
||||
let salaryStartYear = '', salaryStartMonth = '', salaryStartDay = '';
|
||||
let salaryEndYear = '', salaryEndMonth = '', salaryEndDay = '';
|
||||
// 연봉 금액 포맷
|
||||
const annualSalary = emp.annual_salary ? Number(emp.annual_salary).toLocaleString() : '';
|
||||
const monthlySalary = emp.annual_salary ? Math.round(emp.annual_salary / 12).toLocaleString() : '';
|
||||
|
||||
// 입사일 파싱
|
||||
if (emp.hire_date) {
|
||||
const hd = emp.hire_date.replace(/-/g, '');
|
||||
if (hd.length >= 8) {
|
||||
hireYear = hd.substring(0, 4);
|
||||
hireMonth = hd.substring(4, 6);
|
||||
hireDay = hd.substring(6, 8);
|
||||
// 1년 후 계산
|
||||
const endDate = new Date(parseInt(hireYear), parseInt(hireMonth) - 1, parseInt(hireDay));
|
||||
endDate.setFullYear(endDate.getFullYear() + 1);
|
||||
endYear = String(endDate.getFullYear());
|
||||
endMonth = String(endDate.getMonth() + 1).padStart(2, '0');
|
||||
endDay = String(endDate.getDate()).padStart(2, '0');
|
||||
hireEndYear = String(endDate.getFullYear());
|
||||
hireEndMonth = String(endDate.getMonth() + 1).padStart(2, '0');
|
||||
hireEndDay = String(endDate.getDate()).padStart(2, '0');
|
||||
}
|
||||
}
|
||||
|
||||
// 연봉계약 기간: 최신 연봉 적용일 기준 (없으면 입사일 fallback)
|
||||
const salaryBase = emp.salary_effective_date || emp.hire_date;
|
||||
if (salaryBase) {
|
||||
const sd = salaryBase.replace(/-/g, '');
|
||||
if (sd.length >= 8) {
|
||||
salaryStartYear = sd.substring(0, 4);
|
||||
salaryStartMonth = sd.substring(4, 6);
|
||||
salaryStartDay = sd.substring(6, 8);
|
||||
const se = new Date(parseInt(salaryStartYear), parseInt(salaryStartMonth) - 1, parseInt(salaryStartDay));
|
||||
se.setFullYear(se.getFullYear() + 1);
|
||||
salaryEndYear = String(se.getFullYear());
|
||||
salaryEndMonth = String(se.getMonth() + 1).padStart(2, '0');
|
||||
salaryEndDay = String(se.getDate()).padStart(2, '0');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -988,30 +1008,27 @@ className={`w-full text-left px-3 py-2.5 rounded-lg mb-1 transition-colors ${i =
|
||||
'근로자.*이름': emp.name,
|
||||
'근로자.*성명': emp.name,
|
||||
'입사.*일': emp.hire_date,
|
||||
// 연봉계약 종료일 = 입사일 + 1년 (구체적 패턴 먼저 매칭)
|
||||
'연봉계약.*종료.*년도': endYear,
|
||||
'연봉계약.*종료.*월$': endMonth,
|
||||
'연봉계약.*종료.*일$': endDay,
|
||||
// 근로계약 종료일 = 입사일 + 1년
|
||||
'근로계약.*종료.*년도': endYear,
|
||||
'근로계약.*종료.*월$': endMonth,
|
||||
'근로계약.*종료.*일$': endDay,
|
||||
// 계약 종료일 = 입사일 + 1년
|
||||
'계약.*종료.*년도': endYear,
|
||||
'계약.*종료.*월$': endMonth,
|
||||
'계약.*종료.*일$': endDay,
|
||||
// 연봉계약 시작일 = 입사일
|
||||
'연봉계약.*시작.*년도': hireYear,
|
||||
'연봉계약.*시작.*월$': hireMonth,
|
||||
'연봉계약.*시작.*일$': hireDay,
|
||||
// 근로계약 시작일 = 입사일
|
||||
// 연봉계약 시작/종료일 = 최신 연봉 적용일 기준 (매년 갱신 대응)
|
||||
'연봉계약.*종료.*년도': salaryEndYear,
|
||||
'연봉계약.*종료.*월$': salaryEndMonth,
|
||||
'연봉계약.*종료.*일$': salaryEndDay,
|
||||
'연봉계약.*시작.*년도': salaryStartYear,
|
||||
'연봉계약.*시작.*월$': salaryStartMonth,
|
||||
'연봉계약.*시작.*일$': salaryStartDay,
|
||||
// 근로계약 시작/종료일 = 입사일 기준
|
||||
'근로계약.*종료.*년도': hireEndYear,
|
||||
'근로계약.*종료.*월$': hireEndMonth,
|
||||
'근로계약.*종료.*일$': hireEndDay,
|
||||
'근로계약.*시작.*년도': hireYear,
|
||||
'근로계약.*시작.*월$': hireMonth,
|
||||
'근로계약.*시작.*일$': hireDay,
|
||||
// 계약일 = 입사일 (가장 일반적인 패턴, 마지막에 매칭)
|
||||
'계약.*연도': hireYear,
|
||||
'계약.*월$': hireMonth,
|
||||
'계약.*일$': hireDay,
|
||||
// 계약 종료일/시작일 = 연봉 적용일 기준 (일반 패턴)
|
||||
'계약.*종료.*년도': salaryEndYear || hireEndYear,
|
||||
'계약.*종료.*월$': salaryEndMonth || hireEndMonth,
|
||||
'계약.*종료.*일$': salaryEndDay || hireEndDay,
|
||||
'계약.*연도': salaryStartYear || hireYear,
|
||||
'계약.*월$': salaryStartMonth || hireMonth,
|
||||
'계약.*일$': salaryStartDay || hireDay,
|
||||
// 연봉 금액 (사원관리 연봉정보에서 자동 반영)
|
||||
'연봉.*총.*금액': annualSalary,
|
||||
'연봉.*금액': annualSalary,
|
||||
|
||||
Reference in New Issue
Block a user