- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경 - DB 연결 하드코딩 → .env 기반으로 변경 - MySQL strict mode DATE 오류 수정
161 lines
6.5 KiB
PHP
161 lines
6.5 KiB
PHP
<?php
|
|
require_once($_SERVER['DOCUMENT_ROOT'] . "/session.php");
|
|
|
|
$tablename = "eworks";
|
|
|
|
// ── 1. almember 테이블 데이터 읽기 ─────────────────────────────
|
|
try {
|
|
$stmt = $pdo->query("SELECT * FROM {$DB}.almember");
|
|
$almember = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
} catch (PDOException $e) {
|
|
die("오류: " . $e->getMessage());
|
|
}
|
|
|
|
// 각 컬럼별 배열 생성
|
|
$basic_num_arr = array_column($almember, 'num');
|
|
$basic_name_arr = array_column($almember, 'name');
|
|
$basic_part_arr = array_column($almember, 'part');
|
|
$dateofentry_arr = array_column($almember, 'dateofentry');
|
|
$referencedate_arr = array_column($almember, 'referencedate');
|
|
$previous_year_usage_arr = array_column($almember, 'previous_year_usage');
|
|
$comment_arr = array_column($almember, 'comment');
|
|
|
|
// ── 2. 연차 계산하여 $availableday_arr 배열에 저장 ─────────────────
|
|
$availableday_arr = [];
|
|
$continueYear_arr = [];
|
|
$initial_less_than_one_year_arr = [];
|
|
$service_based_arr = [];
|
|
|
|
foreach ($dateofentry_arr as $index => $hireDate) {
|
|
// 해당 인덱스의 참조년도(referencedate)를 가져와 -1 적용
|
|
$referenceYear = !empty($referencedate_arr[$index]) ? intval($referencedate_arr[$index]) - 1 : date('Y') - 1;
|
|
|
|
// 동적으로 회계년도 종료일 설정
|
|
$fiscalYearEnd = $referenceYear . "-12-31";
|
|
|
|
if (!empty($hireDate)) {
|
|
$result = calculateAnnualLeave($hireDate, $fiscalYearEnd);
|
|
$availableday_arr[] = $result['J']; // 연차 발생일수 저장
|
|
$continueYear_arr[] = $result['G'];
|
|
$initial_less_than_one_year_arr[] = $result['H'];
|
|
$service_based_arr[] = $result['I'];
|
|
} else {
|
|
$availableday_arr[] = ''; // 빈 값 처리
|
|
}
|
|
}
|
|
|
|
|
|
// ── 2. eworks 테이블 (연차 관련) 데이터 읽기 ──────────────────────
|
|
$today = date("Y-m-d");
|
|
try {
|
|
$stmt = $pdo->query("SELECT * FROM {$DB}.eworks WHERE is_deleted IS NULL AND eworks_item = '연차'");
|
|
$eworks = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
} catch (PDOException $e) {
|
|
die("오류: " . $e->getMessage());
|
|
}
|
|
|
|
// 필요한 각 컬럼의 배열 생성
|
|
$num_arr = array_column($eworks, 'num');
|
|
$e_viewexcept_id_arr = array_column($eworks, 'e_viewexcept_id');
|
|
$eworks_item_arr = array_column($eworks, 'eworks_item');
|
|
$e_title_arr = array_column($eworks, 'e_title');
|
|
$contents_arr = array_column($eworks, 'contents');
|
|
$registdate_arr = array_column($eworks, 'registdate');
|
|
$status_arr = array_column($eworks, 'status');
|
|
$e_line_arr = array_column($eworks, 'e_line');
|
|
$e_line_id_arr = array_column($eworks, 'e_line_id');
|
|
$e_confirm_arr = array_column($eworks, 'e_confirm');
|
|
$e_confirm_id_arr = array_column($eworks, 'e_confirm_id');
|
|
$r_line_arr = array_column($eworks, 'r_line');
|
|
$r_line_id_arr = array_column($eworks, 'r_line_id');
|
|
$recordtime_arr = array_column($eworks, 'recordtime');
|
|
$author_arr = array_column($eworks, 'author');
|
|
$author_id_arr = array_column($eworks, 'author_id');
|
|
$done_arr = array_column($eworks, 'done');
|
|
$al_askdatefrom_arr = array_column($eworks, 'al_askdatefrom');
|
|
$al_askdateto_arr = array_column($eworks, 'al_askdateto');
|
|
$al_item_arr = array_column($eworks, 'al_item');
|
|
$al_part_arr = array_column($eworks, 'al_part');
|
|
$al_usedday_arr = array_column($eworks, 'al_usedday');
|
|
$al_content_arr = array_column($eworks, 'al_content');
|
|
|
|
|
|
// ── 3. 각 직원의 사용일수 계산 ──────────────────────────────────
|
|
// $totalname_arr: 직원 이름, $totalused_arr: 사용한 연차 일수,
|
|
// $totalusedYear_arr: 참조년도 (각 직원별 referencedate)
|
|
$totalname_arr = $basic_name_arr;
|
|
$totalused_arr = array_fill(0, count($basic_name_arr), 0);
|
|
$totalusedYear_arr = $referencedate_arr; // 매번 할당되므로 미리 지정
|
|
|
|
foreach ($basic_name_arr as $j => $name) {
|
|
foreach ($eworks as $row) {
|
|
if (
|
|
trim($name) === trim($row['author']) &&
|
|
substr(trim($row['al_askdatefrom']), 0, 4) === trim($referencedate_arr[$j]) &&
|
|
trim($row['status']) === 'end'
|
|
) {
|
|
$totalused_arr[$j] += (float)$row['al_usedday'];
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// ── 4. 현재 사용자(예: $user_name)의 금년도 연차 일수 및 사용일 계산 ───
|
|
$total = 0; // 금년도 개별 연차 일수
|
|
$previous_usage = 0;
|
|
foreach ($basic_name_arr as $i => $name) {
|
|
if (trim($user_name) === trim($name) && trim($referencedate_arr[$i]) === date("Y")) {
|
|
$total = $availableday_arr[$i] ;
|
|
$previous_usage = $previous_year_usage_arr[$i] ;
|
|
break;
|
|
}
|
|
}
|
|
|
|
$thisyeartotalusedday = 0; // 금년도 사용한 연차 일수
|
|
foreach ($eworks as $row) {
|
|
if (
|
|
trim($user_name) === trim($row['author']) &&
|
|
substr(trim($row['al_askdatefrom']), 0, 4) === date("Y") &&
|
|
trim($row['status']) === 'end'
|
|
) {
|
|
$thisyeartotalusedday += $row['al_usedday'];
|
|
}
|
|
}
|
|
|
|
$thisyeartotalremainday = $total - $thisyeartotalusedday - $previous_usage ;
|
|
|
|
// ── 5. member 테이블에서 eworks 대상 직원 데이터 읽기 ───────────────
|
|
try {
|
|
$stmt = $pdo->query("SELECT * FROM {$DB}.member");
|
|
$members = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
} catch (PDOException $e) {
|
|
die("오류: " . $e->getMessage());
|
|
}
|
|
|
|
$employee_name_arr = [];
|
|
$employee_id_arr = [];
|
|
$employee_company_arr = [];
|
|
$employee_part_arr = [];
|
|
$employee_dateofentry_arr = [];
|
|
|
|
foreach ($members as $row) {
|
|
if (
|
|
$row["name"] !== '이경호' &&
|
|
(int)$row["lv"] < 5 &&
|
|
($row["quitDate"] === "0000-00-00" or $row["quitDate"] === null or !$row["quitDate"] === '' )
|
|
) {
|
|
$employee_name_arr[] = $row["name"];
|
|
$employee_id_arr[] = $row["id"];
|
|
$employee_company_arr[] = $row["division"];
|
|
$employee_part_arr[] = $row["part"];
|
|
$employee_dateofentry_arr[] = $row["enterDate"];
|
|
}
|
|
}
|
|
|
|
// ── 6. 이름과 부서 정보를 연관 배열로 생성 후 JSON 변환 ───────────────
|
|
// $employee_data = array_combine($employee_name_arr, $employee_company_arr, $employee_part_arr, $employee_dateofentry_arr ); // 2개까지만 더하는 것이 combine
|
|
$employee_data = array_map(null, $employee_name_arr, $employee_company_arr, $employee_part_arr, $employee_dateofentry_arr);
|
|
$employee_json = json_encode($employee_data);
|
|
|
|
?>
|