setAuthConfig($serviceAccountKeyFile); $client->addScope(Google_Service_Drive::DRIVE); // Google Drive 서비스 초기화 $service = new Google_Service_Drive($client); // 특정 폴더 확인 함수 function getFolderId($service, $folderName, $parentFolderId = null) { $query = "name='$folderName' and mimeType='application/vnd.google-apps.folder' and trashed=false"; if ($parentFolderId) { $query .= " and '$parentFolderId' in parents"; } $response = $service->files->listFiles([ 'q' => $query, 'spaces' => 'drive', 'fields' => 'files(id, name)' ]); return count($response->files) > 0 ? $response->files[0]->id : null; } // Google Drive에서 파일 썸네일 검사 및 반환 function getThumbnail($fileId, $service) { try { $file = $service->files->get($fileId, ['fields' => 'thumbnailLink']); return $file->thumbnailLink ?? null; // 썸네일 URL이 있으면 반환, 없으면 null } catch (Exception $e) { error_log("썸네일 가져오기 실패: " . $e->getMessage()); return null; // 실패 시 null 반환 } } $title_message = '지출결의서'; $mode = $_REQUEST["mode"] ?? ''; $search = $_REQUEST["search"] ?? ''; ?> <?=$title_message?> table th, table td, h4, .form-control, span { font-size: 22px; } h4 { font-size: 40px; } .btn-sm { font-size: 30px; } '; } include $_SERVER['DOCUMENT_ROOT'] .'/eworks/_request.php'; $pdo = db_connect(); // 현재 날짜 $currentDate = date("Y-m-d"); $fromdate = $_REQUEST['fromdate'] ?? ''; $todate = $_REQUEST['todate'] ?? ''; // fromdate 또는 todate가 빈 문자열이거나 null인 경우 if ($fromdate === "" || $fromdate === null || $todate === "" || $todate === null) { // 현재 달의 첫날 $fromdate = date('Y-m-01'); // 현재 달의 마지막 날 $todate = date('Y-m-t'); $Transtodate = $todate; } else { // fromdate와 todate가 모두 설정된 경우 (기존 로직 유지) $Transtodate = $todate; } // 법인카드 목록 가져오기 $jsonFile = $_SERVER['DOCUMENT_ROOT'] . '/account/cardlist.json'; $cards = []; if (file_exists($jsonFile)) { $jsonContent = file_get_contents($jsonFile); $cards = json_decode($jsonContent, true); if (!is_array($cards)) { $cards = []; } } // 법인카드 정보를 포맷팅하는 함수 function formatCompanyCard($companyCard, $cardList) { if (empty($companyCard)) { return ''; } // JSON 배열에서 해당 카드번호 찾기 foreach ($cardList as $card) { if (isset($card['number']) && strpos($card['number'], $companyCard) !== false) { // 카드번호 끝 4자리 추출 $lastFour = substr($card['number'], -4); return "({$card['company']}) {$lastFour} ({$card['user']})"; } } // 매칭되는 카드가 없으면 원본 반환 return $companyCard; } $SettingDate = "indate"; $Andis_deleted = " AND (is_deleted IS NULL or is_deleted='0') AND eworks_item='지출결의서' AND al_company='경동' "; $Whereis_deleted = " WHERE (is_deleted IS NULL or is_deleted='0') AND eworks_item='지출결의서' AND al_company='경동' "; $common = " WHERE " . $SettingDate . " BETWEEN '$fromdate' AND '$Transtodate' " . $Andis_deleted . " ORDER BY "; $a = $common . " num DESC "; // 내림차순 전체 $sql="select * from ".$DB.".eworks " . $a; // —————————————————————————————— // (1) 카드번호별 사용 합계 계산 // —————————————————————————————— $cardStats = []; // ['카드번호' => 총합] $totalCardSum = 0; try { // eworks 테이블에서 모든 지출결의서의 법인카드별 비용 합계 가져오기 // $sql = "SELECT companyCard, suppliercost // FROM {$DB}.eworks // WHERE (is_deleted = '0' or is_deleted is null) // AND suppliercost IS NOT NULL // AND suppliercost != '' AND eworks_item='지출결의서' // "; $st = $pdo->query($sql); while ($r = $st->fetch(PDO::FETCH_ASSOC)) { $cardNo = trim($r['companyCard']); // suppliercost 필드에 콤마가 들어 있을 수 있으니 제거 후 숫자로 $amt = floatval(str_replace(',', '', $r['suppliercost'])); if ($cardNo === '') continue; if (!isset($cardStats[$cardNo])) { $cardStats[$cardNo] = 0; } $cardStats[$cardNo] += $amt; $totalCardSum += $amt; } } catch (PDOException $e) { // 계산 중 오류 발생 시 무시 } // 카드 목록(json)에 없는 카드번호가 쌓여 있을 수도 있으니, 정렬을 위해 키 가져오기 // 카드번호 목록만 뽑아낼 때 $allCardNumbers = array_map( function($c) { // PHP 7.0 이상부터 ?? 연산자는 사용 가능하므로 그대로 두셔도 됩니다. return isset($c['number']) ? $c['number'] : ''; }, $cards ); // 정렬 sort($allCardNumbers); // 검색을 위해 모든 검색변수 공백제거 $search = str_replace(' ', '', $search); if($mode=="search"){ if($search==""){ $sql="select * from {$DB}.eworks " . $a; } elseif($search!="") { $sql ="select * from {$DB}.eworks where ((outdate like '%$search%') or (replace(outworkplace,' ','') like '%$search%' ) "; $sql .="or (steel_item like '%$search%') or (spec like '%$search%') or (company like '%$search%') or (first_writer like '%$search%') or (payment like '%$search%') or (supplier like '%$search%') or (request_comment like '%$search%') ) " . $Andis_deleted . " order by num desc "; } } if($mode=="") { $sql="select * from {$DB}.eworks " . $a; } $nowday=date("Y-m-d"); // 현재일자 변수지정 $dateCon =" AND between date('$fromdate') and date('$Transtodate') " ; try{ $stmh = $pdo->query($sql); // 검색조건에 맞는글 stmh $total_row=$stmh->rowCount(); ?>

✔ 각 열을 누르면 상세내역이 나옵니다.
0): ?> 0): ?>
구분 카드 전체
합계
기간  
기간 설정
  ~       
 
 
    
fetch(PDO::FETCH_ASSOC)) { include $_SERVER['DOCUMENT_ROOT'] .'/eworks/_row.php'; // expense_data JSON 파싱 $expense_data = json_decode($expense_data ?? '[]', true); $items = []; $notes = []; $total_amount = 0; if (is_array($expense_data)) { foreach ($expense_data as $expense) { if (!empty($expense['expense_item'])) { $items[] = $expense['expense_item']; } if (!empty($expense['expense_note'])) { $notes[] = $expense['expense_note']; } if (!empty($expense['expense_amount'])) { $total_amount += intval(str_replace(',', '', $expense['expense_amount'])); } } } // 제목 생성 (첫 번째 적요 + 외 N건) $title = ''; if (!empty($items)) { if (count($items) > 1) { $title = $items[0] . ' 외 ' . (count($items) - 1) . '건'; } else { $title = $items[0]; } } // 적요와 비고를 콤마로 구분된 문자열로 변환 $items_str = implode(', ', $items); $notes_str = implode(', ', $notes); echo ''; ?> getMessage(); } ?>
번호 작성일 지출요청일 결재일 기안자 적요 금액 비고 법인카드 결재완료