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