<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/session.php");  
if (!isset($_SESSION["level"]) || $_SESSION["level"] > 5) {
    sleep(1);
    header("Location:" . $WebSite . "login/login_form.php"); 
    exit;
}
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

include $_SERVER['DOCUMENT_ROOT'] . '/load_header.php'; 
$title_message = '배차 차량 일지';   
?>  
<title>  <?=$title_message?>  </title> 
</head>
<body> 

<?php require_once($_SERVER['DOCUMENT_ROOT'] . '/myheader.php'); ?>   
<?php require_once($_SERVER['DOCUMENT_ROOT'] . '/mymodal.php'); ?>       	 
<?php
$tablename = 'output'; 
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
$pdo = db_connect();  

// 검색 조건 설정
$search = isset($_REQUEST['search']) ? $_REQUEST['search'] : '';
$fromdate = isset($_REQUEST['fromdate']) ? $_REQUEST['fromdate'] : '';  
$todate = isset($_REQUEST['todate']) ? $_REQUEST['todate'] : '';  
$mode = isset($_REQUEST['mode']) ? $_REQUEST['mode'] : '';  
$SettingDate = isset($_REQUEST['SettingDate']) ? $_REQUEST['SettingDate'] :  " regist_day ";  

if (isset($_REQUEST["separate_date"])) {
    $separate_date = $_REQUEST["separate_date"];
} else {
    $separate_date = "";
}
require_once("../lib/mydb.php");
$pdo = db_connect();	

$separate_date = "1";

// 현재 날짜
$currentDate = date("Y-m-d");

// fromdate 또는 todate가 빈 문자열이거나 null인 경우
if ($fromdate === "" || $fromdate === null || $todate === "" || $todate === null) {
    // 이번 달의 첫째 날
    $fromdate = date("Y-m-01", strtotime($currentDate));
    
    // 이번 달의 마지막 날
    $todate = date("Y-m-t", strtotime($currentDate)); // t는 해당 월의 마지막 날을 반환
    $Transtodate = $todate;
} else {
    // fromdate와 todate가 모두 설정된 경우 (기존 로직 유지)
    $Transtodate = $todate;
}

if ($separate_date == "1") {
    $SettingDate = "outdate";
} else {
    $SettingDate = "indate";
}

// 진행상태에 대한 검색
$orderby = " ORDER BY " . $SettingDate . " DESC, num DESC";    // 내림차순 정렬

$where = " WHERE " . $SettingDate . " BETWEEN date('$fromdate') AND date('$Transtodate') AND is_deleted = '0' and (devMode <> '1' OR devMode IS NULL)  AND deliveryfeeList IS NOT NULL AND deliveryfeeList != '' AND deliveryfeeList != '[]' " . $orderby;
$searchwhere = " WHERE is_deleted = '0' AND deliveryfeeList IS NOT NULL and (devMode <> '1' OR devMode IS NULL) AND deliveryfeeList != ''  AND deliveryfeeList != '[]' AND searchtag LIKE '%$search%'" . $orderby;


// 수정된 쿼리: COD이 존재하고 is_deleted가 0인 자료만 선택
if ($search == "") {
    $sql = "SELECT * FROM $DB.$tablename " . $where;                         
} else { 
    $sql = "SELECT * FROM $DB.$tablename " . $searchwhere;
}

// 현재일자 변수지정
$today = date("Y-m-d");   

// SQL 실행 및 데이터 처리

// print $sql;
	
?>
<form id="board_form"  name="board_form"  method="post" >      
<input type="hidden" id="mode" name="mode" value="<?=$mode?>">             
<input type="hidden" id="num" name="num"> 
<input type="hidden" id="tablename" name="tablename" value="<?=$tablename?>">                 
<input type="hidden" id="header" name="header" value="<?=$header?>">   
	
<div class="container">  
	<div class="card mb-2 mt-2">  
	<div class="card-body">  	 
<div class="row"> 		
	<div class="col-sm-7"> 		
		<div class="d-flex  p-1 m-1 mt-1 justify-content-end align-items-center "> 		
		   <h5>  <?=$title_message?>  </h5>  &nbsp;&nbsp;&nbsp;&nbsp;	
			   <button type="button" class="btn btn-dark btn-sm mx-2"  onclick='location.reload();' > <i class="bi bi-arrow-clockwise"></i> </button>  	
			   <button type="button" class="btn btn-outline-dark btn-sm downloadExcel"> <i class="bi bi-floppy"></i> 엑셀 다운로드</button>			   
		</div>	
	</div>	
	<div class="col-sm-5"> 		
		<div class="d-flex  justify-content-end align-items-center "> 				   			  
		</div>				 
	</div>				 
</div>				 
<div class="row"> 			 
<div class="d-flex  p-1 m-1 mt-1 mb-1 justify-content-center align-items-center"> 
<?php
/********************************************************
 * 1) 전체 데이터를 가져오면서, 요약 계산을 동시에 수행
 ********************************************************/

// (A) 합계를 저장할 배열·변수 준비
$companySums = [];   // 예: [ '25시물류' => 500000, '조운물류' => 300000, ... ]
$prepaidSum  = 0;    // 선불 합계
$collectSum  = 0;    // 착불 합계
$totalSum    = 0;    // 총합 (모든 합계)

$resultRows = [];    // 실제 목록 표시에 사용할 모든 레코드+deliveryfeeList 데이터를 담아둘 배열

try {
    $stmh = $pdo->query($sql); // PDOStatement
    $total_row = $stmh->rowCount();
    
    while ($row = $stmh->fetch(PDO::FETCH_ASSOC)) {

        // deliveryfeeList를 JSON -> 배열 디코딩
        $deliveryfeeListData = json_decode($row['deliveryfeeList'], true);
        if (!is_array($deliveryfeeListData) || count($deliveryfeeListData) === 0) {
            $deliveryfeeListData = [[]]; 
        }

        // (B) 각 행을 순회하면서 합계 계산
        foreach ($deliveryfeeListData as $feeRow) {
            // col1 : 물류업체명, col5 : 합계(숫자), col6 : 착불/선불
            $company  = $feeRow['col1']  ?? '';  // 예: '25시물류'
            $sumText  = $feeRow['col5']  ?? '';  // 예: '12,345' (콤마가 있을 수도 있으므로)
            $payType  = $feeRow['col6']  ?? '';  // 예: '착불' or '선불'
            
            // 숫자 변환 (콤마 제거 후 float/int 변환)
            $sumValue = floatval(str_replace(',', '', $sumText));

            // 물류업체명별 합계
            if (!isset($companySums[$company])) {
                $companySums[$company] = 0;
            }
            $companySums[$company] += $sumValue;

            // 착불/선불 합계
            if ($payType === '선불') {
                $prepaidSum += $sumValue;
            } elseif ($payType === '착불') {
                $collectSum += $sumValue;
            }

            // 총합
            $totalSum += $sumValue;
        }

        // (C) 화면에 출력할 수 있도록, 원본 $row + deliveryfeeListData를 저장
        $resultRows[] = $row;
    }

} catch (PDOException $Exception) {
    print "오류: " . $Exception->getMessage();
}

// (D) 합계 테이블을 출력하기 전에, 물류업체명 배열을 정렬(필요 시)
ksort($companySums); // 키(물류업체명)로 정렬 - 사용 여부는 선택

// echo '<pre>';
// print_r($deliveryfeeListData);
// echo '</pre>';

?>

<!-- *********************************************** -->
<!-- 2) 배송업체별 합계금액/선불 합계/착불 합계 테이블 -->
<!-- *********************************************** -->
<style>
  /* 예시 스타일 - 필요에 따라 조정 */
  .summary-table {
    margin-bottom: 1rem;
    border: 2px solid #333;
    border-collapse: collapse;
    width: auto; /* 상황에 맞춰 조정 */
  }
  .summary-table th, .summary-table td {
    border: 1px solid #333;
    padding: 8px;
    text-align: center;
    vertical-align: middle;
  }
  .text-green { color: green; }
  .text-red   { color: red; }
</style>

<table class="summary-table mx-4">
  <thead>
    <tr>
      <?php
      // 동적으로 물류업체명 컬럼 생성
      foreach ($companySums as $companyName => $amount) {
          echo "<th>" . htmlspecialchars($companyName) . "</th>";
      }
      ?>
      <th class="text-green">선불</th>
      <th class="text-red">착불</th>
      <th>합계</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <?php
      // 물류업체명별 합계 표시
      foreach ($companySums as $companyName => $amount) {
          // 3자리 콤마
          $formatted = number_format($amount);
          echo "<td>{$formatted}</td>";
      }
      // 선불, 착불, 전체 합계
      $formattedPrepaid = number_format($prepaidSum);
      $formattedCollect = number_format($collectSum);
      $formattedTotal   = number_format($totalSum);

      echo "<td class='text-green'>{$formattedPrepaid}</td>";
      echo "<td class='text-red'>{$formattedCollect}</td>";
      echo "<td>{$formattedTotal}</td>";
      ?>
    </tr>
  </tbody>
</table>

▷ <?= $total_row ?> &nbsp; 		
<button type="button" class="btn btn-danger btn-sm mx-1"  onclick='pre_month()' > 전월 </button>
<button type="button" class="btn btn-primary btn-sm mx-1"  onclick='this_month()' > 당월 </button>
<button type="button" class="btn btn-dark btn-sm mx-1"  onclick='yesterday()' > 전일 </button>
<button type="button" class="btn btn-outline-dark btn-sm mx-1"  onclick='this_today()' > 금일 </button>
<button type="button" class="btn btn-dark btn-sm mx-1"  onclick='this_tomorrow()' > 익일  </button>
<input type="date" id="fromdate" name="fromdate" class="form-control"   style="width:100px;" value="<?=$fromdate?>" >  &nbsp; ~ &nbsp;
<input type="date" id="todate" name="todate" class="form-control me-1"   style="width:100px;" value="<?=$todate?>" >  &nbsp;
</span> 		
	<div class="inputWrap">
		<input type="text" id="search" name="search" value="<?=$search?>" onkeydown="JavaScript:SearchEnter();" autocomplete="off"  class="form-control" style="width:150px;" > &nbsp;			
		<button class="btnClear"></button>
	</div>				
	
	<div id="autocomplete-list">						
	</div>	
	  &nbsp;
	  <button id="searchBtn" type="button" class="btn btn-dark  btn-sm" > <i class="bi bi-search"></i> 검색 </button> 		  
			 
     </div> 	 		      
     </div> 	 		 
   </div> <!--card-body-->
   </div> <!--card -->   
</div> <!--container-fluid -->   
<div class="container-fluid">  
<div class="d-flex justify-content-center align-items-center"> 		

<table class="table table-hover" id="myTable">
  <thead class="table-primary">
    <tr>
      <!-- 1,2,3열 : 기존 컬럼(번호, 출고일, 현장명) -->
      <th class="text-center" style="width:30px;">번호</th>
      <th class="text-center" style="width:100px;">출고일</th>
      <th class="text-center" style="width:300px;">현장명</th>

      <!-- 4열부터 col1~col11 (배송비 내역) -->
      <th class="text-center">하차업체명</th>
      <th class="text-center">상차지</th>
      <th class="text-center">물류업체명</th>
      <th class="text-center">차량톤수</th>
      <th class="text-center">금 액</th>
      <th class="text-center">부가세</th>
      <th class="text-center">합계</th>
      <th class="text-center">착/선불</th>
      <th class="text-center">차량번호</th>
      <th class="text-center">기사 연락처</th>
      <th class="text-center">비고</th>
    </tr>
  </thead>

<tbody>
<?php
try {   
$stmh = $pdo->query($sql);            // 검색조건에 맞는글 stmh
$total_row = $stmh->rowCount();	
    $start_num = 1; // 페이지당 표시되는 첫 번째 글 순번

    while ($row = $stmh->fetch(PDO::FETCH_ASSOC)) {

        // (예) DB 필드에서 출고일, 현장명, 오늘 날짜 비교 등에 사용
        $outdate      = $row['outdate']      ?? '';
        $outworkplace = $row['outworkplace'] ?? '';
        $num          = $row['num']          ?? '';
        $tablename    = $tablename           ?? '';
        
        // 오늘 날짜와 출고일 비교해 색상 지정 (선택 사항)
        $date_font = ($today == $outdate) ? "text-danger" : "text-dark";

        // 요일 표기
        if ($outdate !== "") {
            $week = ["(일)", "(월)", "(화)", "(수)", "(목)", "(금)", "(토)"];
            $outdate .= $week[ date('w', strtotime($outdate)) ];
        }

        // deliveryfeeList를 JSON -> 배열 디코딩 (여러 개 행이 있을 수 있음)
        $deliveryfeeListData = json_decode($row['deliveryfeeList'], true);
        // 만약 데이터가 없거나 파싱 실패하면, 1개짜리 빈 배열로 처리 (빈 화면 대신)
        if (!is_array($deliveryfeeListData) || count($deliveryfeeListData) === 0) {
            $deliveryfeeListData = [[]];
        }

        // deliveryfeeList의 각 행마다 <tr> 생성
        foreach ($deliveryfeeListData as $index => $feeRow) {
            // 첫 번째 행($index===0)일 때만 번호/출고일/현장명 표시
            // $tdNumber  = ($index === 0) ? $start_num : '';
            // $tdOutdate = ($index === 0) ? "<span class='{$date_font}'>{$outdate}</span>" : '';
            // $tdWork    = ($index === 0) ? $outworkplace : '';
            $tdNumber  = $start_num ;
			$tdOutdate = "<span class='{$date_font}'>{$outdate}</span>" ;
            $tdWork    =  $outworkplace  ;

            // col1 ~ col11
            $col1  = $feeRow['col1']  ?? '';
            $col2  = $feeRow['col2']  ?? '';
            $col3  = $feeRow['col3']  ?? '';
            $col4  = $feeRow['col4']  ?? '';
            $col5  = $feeRow['col5']  ?? '';
            $col6  = $feeRow['col6']  ?? ''; // 체크할 컬럼 (선불/착불)
            $col7  = $feeRow['col7']  ?? '';
            $col8  = $feeRow['col8']  ?? ''; 
            $col9  = $feeRow['col9']  ?? '';
            $col10 = $feeRow['col10'] ?? '';
            $col11 = $feeRow['col11'] ?? '';
			
			// col6이 비어있으면 blink 클래스 추가 (선불/착불)
			$blinkClass = ($col6 === '') ? 'blink-row' : '';

            ?>
		  <tr class="<?= $blinkClass ?>" data-col6="<?= $col6 ?>" onclick="redirectToView('<?= $num ?>','<?= $tablename ?>')">
              <!-- 1,2,3열: 첫 행이면 표시, 아니면 빈 칸 -->
              <td class="text-center"><?= $tdNumber ?></td>
              <td class="text-center"><?= $tdOutdate ?></td>
              <td class="text-start"><?= $tdWork ?></td>

              <!-- 4열부터 col1~col11 -->
              <td class="text-center"><?= htmlspecialchars($col10) ?></td>
              <td class="text-center "><?= htmlspecialchars($col9) ?></td>
              <td class="text-center"><?= htmlspecialchars($col1) ?></td>
              <td class="text-center"><?= htmlspecialchars($col2) ?></td>
              <td class="text-center"><?= htmlspecialchars($col3) ?></td>
              <td class="text-center"><?= htmlspecialchars($col4) ?></td>
			  <td class="text-center blink-target"><?= htmlspecialchars($col5) ?></td>
			  <td class="text-center col6-cell"><?= htmlspecialchars($col6) ?></td>
              <td class="text-center"><?= htmlspecialchars($col7) ?></td>
              <td class="text-center"><?= htmlspecialchars($col8) ?></td>
              <td class="text-center"><?= htmlspecialchars($col11) ?></td>
            </tr>
            <?php
			 $start_num++;
        }
        
        // DB 1행 처리 끝 -> 다음 레코드
       
    } // while($row)

    } catch (PDOException $Exception) {
        print "오류: " . $Exception->getMessage();
    }
    ?>
  </tbody>
</table>

    </div>
</div> <!--container-->
	
</form>
<script>
// 페이지 로딩
$(document).ready(function(){	
    var loader = document.getElementById('loadingOverlay');
	if(loader)
		loader.style.display = 'none';
});
</script>

<script> 
var dataTable; // DataTables 인스턴스 전역 변수
var outputpageNumber; // 현재 페이지 번호 저장을 위한 전역 변수

$(document).ready(function() {			
    // DataTables 초기 설정
    dataTable = $('#myTable').DataTable({
        "paging": true,
        "ordering": true,
        "searching": false,
        "pageLength": 100,
        "lengthMenu": [100, 200, 500, 1000],
        "language": {
            "lengthMenu": "Show _MENU_ entries"
        },
        "order": [[1, 'desc']] // 출고예정기준 내림정렬
    });

    // 페이지 번호 복원 (초기 로드 시)
    var savedPageNumber = getCookie('outputpageNumber');
    if (savedPageNumber) {
        dataTable.page(parseInt(savedPageNumber) - 1).draw(false);
    }

    // 페이지 변경 이벤트 리스너
    dataTable.on('page.dt', function() {
        var outputpageNumber = dataTable.page.info().page + 1;
        setCookie('outputpageNumber', outputpageNumber, 10); // 쿠키에 페이지 번호 저장
    });

    // 페이지 길이 셀렉트 박스 변경 이벤트 처리
    $('#myTable_length select').on('change', function() {
        var selectedValue = $(this).val();
        dataTable.page.len(selectedValue).draw(); // 페이지 길이 변경 (DataTable 파괴 및 재초기화 없이)

        // 변경 후 현재 페이지 번호 복원
        savedPageNumber = getCookie('outputpageNumber');
        if (savedPageNumber) {
            dataTable.page(parseInt(savedPageNumber) - 1).draw(false);
        }
    });
	
});

function restorePageNumber() {
    var savedPageNumber = getCookie('outputpageNumber');
    // if (savedPageNumber) {
        // dataTable.page(parseInt(savedPageNumber) - 1).draw('page');
    // }
	location.reload(true);
}

function redirectToView(num, tablename) {	
    var url = "write_form.php?mode=view&num=" + num + "&tablename=" + tablename;          
	customPopup(url, '수주 내역', 1900, 920); 		    
}

function submitForm(status) {
    $('input[name=status_option]').val(status);
    document.getElementById('board_form').submit();
}


 $(document).ready(function(){
	// 엑셀 다운로드 버튼 클릭 이벤트
	$('.downloadExcel').on('click', function() {
		var data = [];
		var rows = $('#myTable tbody tr');  // 모달 내의 테이블 선택

		// 각 행의 데이터를 수집
		rows.each(function() {
			var rowData = {};
			rowData['번호'] = $(this).find('td').eq(0).text().trim();
			rowData['출고일'] = $(this).find('td').eq(1).text().trim();
			rowData['현장명'] = $(this).find('td').eq(2).text().trim();
			rowData['하차업체명'] = $(this).find('td').eq(3).text().trim();
			rowData['상차지'] = $(this).find('td').eq(4).text().trim();
			rowData['물류업체명'] = $(this).find('td').eq(5).text().trim();
			rowData['차량톤수'] = $(this).find('td').eq(6).text().trim();
			rowData['금 액'] = $(this).find('td').eq(7).text().trim();
			rowData['부가세'] = $(this).find('td').eq(8).text().trim();
			rowData['합계'] = $(this).find('td').eq(9).text().trim();
			rowData['착/선불'] = $(this).find('td').eq(10).text().trim();
			rowData['차량번호'] = $(this).find('td').eq(11).text().trim();
			rowData['기사 연락처'] = $(this).find('td').eq(12).text().trim();
			rowData['비고'] = $(this).find('td').eq(13).text().trim();
			data.push(rowData);
		});


		// 엑셀 파일 생성 요청
		$.ajax({ 
			url: '/output/dl_ex_deliveryfee.php',
			method: 'POST',
			contentType: 'application/json',
			data: JSON.stringify(data),
			success: function(response) {
				// 응답이 문자열인 경우 JSON으로 파싱 시도
				if (typeof response === 'string') {
					try {
						response = JSON.parse(response);
					} catch(e) {
						alert('서버에서 유효하지 않은 응답을 받았습니다.');
						console.error("응답 파싱 오류:", e);
						return;
					}
				}

				if(response.success){
					// 다운로드 URL 조정 (파일 경로에 맞게 수정)
					var filename = response.filename.split('/').pop();
					var downloadUrl = '/excelsave/' + encodeURIComponent(filename);
					window.location.href = downloadUrl;
				} else {
					alert('엑셀 파일 생성에 실패했습니다: ' + response.message);
				}
			},
			error: function(jqXHR, textStatus, errorThrown) {
				console.error("AJAX 오류:", textStatus, errorThrown);
				alert('엑셀 파일 생성 중 오류가 발생했습니다.');
			}
		});
	});
});

 
$(document).ready(function(){    
   // 방문기록 남김
   var title = '<?php echo $title_message; ?>';
   saveMenuLog(title);
});
 
 // jQuery로 깜빡이는(blink) 효과 추가
$(document).ready(function () {
    setInterval(function () {
        $(".blink-row").each(function () {
            let col6Cell = $(this).find('.col6-cell');
            let originalText = $(this).attr('data-col6'); // 원래의 col6 값

            if (originalText.trim() === '') {
                if (col6Cell.text().trim() === '선불/착불 기록 남겨주세요') {
                    col6Cell.text(''); // 공백으로 변경
                } else {
                    col6Cell.text('선불/착불 기록 남겨주세요'); // 경고 문구 표시
                }
            }
        });
    }, 1000); // 1초마다 변경
});

 
 
  </script>
</body>
</html>