Files
sam-kd/almember/load_DB.php
hskwon aca1767eb9 초기 커밋: 5130 레거시 시스템
- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경
- DB 연결 하드코딩 → .env 기반으로 변경
- MySQL strict mode DATE 오류 수정
2025-12-10 20:14:31 +09:00

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);
?>