Files
2026-06-11 18:47:38 +09:00

227 lines
9.2 KiB
PHP

<?php
$sub_menu = "800760";
include_once('./_common.php');
auth_check_menu($auth, $sub_menu, 'r');
$g5['title'] = 'EstimateManager 테스트';
// EstimateManager 클래스 로드
require_once G5_PATH . '/adm/order_manage/classes/EstimateManager.class.php';
$estimate_manager = new EstimateManager();
$test_results = [];
// 테스트 실행
if ($_POST['action'] === 'test') {
$test_type = trim($_POST['test_type']);
$wr_id = (int) $_POST['wr_id'];
switch ($test_type) {
case 'complete_estimate':
$result = $estimate_manager->completeEstimate($wr_id, 'customer');
$test_results[] = $result;
break;
case 'calculate_payment':
$estimate_id = (int) $_POST['estimate_id'];
$payment_type = trim($_POST['payment_type']);
$result = $estimate_manager->calculatePaymentAmount($estimate_id, $payment_type);
$test_results[] = [
'success' => $result !== false,
'data' => $result,
'message' => $result !== false ? '결제 금액 계산 성공' : '결제 금액 계산 실패'
];
break;
case 'get_details':
$result = $estimate_manager->getEstimateDetails($wr_id, 'admin', $member['mb_id']);
$test_results[] = [
'success' => $result !== false,
'data' => $result,
'message' => $result !== false ? '견적 정보 조회 성공' : '견적 정보 조회 실패'
];
break;
}
}
// 최근 견적 목록 조회 (테스트용)
$recent_estimates = [];
$sql = "
SELECT w.wr_id, w.wr_subject, w.mb_id, e.id as estimate_id, e.status, e.updated_at, e.selected_bid_id
FROM {$g5['write_prefix']}order w
LEFT JOIN estimate e ON w.wr_id = e.wr_id
WHERE w.wr_parent = 0
ORDER BY w.wr_datetime DESC
LIMIT 10
";
$result = sql_query($sql);
while ($row = sql_fetch_array($result)) {
$recent_estimates[] = $row;
}
include_once(G5_ADMIN_PATH . '/admin.head.php');
?>
<div class="local_desc01 local_desc">
<p>
EstimateManager 클래스의 견적 관리 기능을 테스트합니다.<br>
StatusManager와 연동된 기능들을 확인할 수 있습니다.
</p>
</div>
<?php if (!empty($test_results)): ?>
<div class="local_desc02 local_desc">
<h3>테스트 결과</h3>
<?php foreach ($test_results as $result): ?>
<div
style="padding: 15px; margin: 10px 0; border: 1px solid <?php echo $result['success'] ? '#28a745' : '#dc3545'; ?>; background: <?php echo $result['success'] ? '#d4edda' : '#f8d7da'; ?>;">
<strong><?php echo $result['success'] ? '성공' : '실패'; ?>:</strong>
<?php echo htmlspecialchars($result['message']); ?>
<?php if (isset($result['data']) && $result['data']): ?>
<br><br><strong>데이터:</strong>
<pre
style="background: #f8f9fa; padding: 10px; border-radius: 4px; font-size: 12px; max-height: 300px; overflow-y: auto;"><?php echo htmlspecialchars(json_encode($result['data'], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); ?></pre>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
<form name="ftest" method="post" action="./estimate_test.php">
<input type="hidden" name="action" value="test">
<div class="tbl_frm01 tbl_wrap">
<table>
<caption>EstimateManager 테스트</caption>
<colgroup>
<col class="grid_4">
<col>
</colgroup>
<tbody>
<tr>
<th scope="row"><label for="test_type">테스트 유형</label></th>
<td>
<select name="test_type" id="test_type" class="frm_input" onchange="toggleTestFields()">
<option value="">선택하세요</option>
<option value="complete_estimate">견적 작성 완료</option>
<option value="calculate_payment">결제 금액 계산</option>
<option value="get_details">견적 상세 정보 조회</option>
</select>
</td>
</tr>
<tr>
<th scope="row"><label for="wr_id">게시물 ID</label></th>
<td>
<select name="wr_id" id="wr_id" class="frm_input">
<option value="">선택하세요</option>
<?php foreach ($recent_estimates as $estimate): ?>
<option value="<?php echo $estimate['wr_id']; ?>"
data-estimate-id="<?php echo $estimate['estimate_id']; ?>">
<?php echo $estimate['wr_id']; ?> -
<?php echo htmlspecialchars($estimate['wr_subject']); ?>
(상태: <?php echo $estimate['status'] ?: '견적신청중'; ?>)
</option>
<?php endforeach; ?>
</select>
</td>
</tr>
<tr id="estimate_id_row" style="display: none;">
<th scope="row"><label for="estimate_id">견적서 ID</label></th>
<td>
<input type="number" name="estimate_id" id="estimate_id" class="frm_input">
<div class="frm_info">결제 금액 계산 시 필요</div>
</td>
</tr>
<tr id="payment_type_row" style="display: none;">
<th scope="row"><label for="payment_type">결제 타입</label></th>
<td>
<select name="payment_type" id="payment_type" class="frm_input">
<option value="deposit">계약금</option>
<option value="interim">중도금</option>
<option value="final">잔금</option>
</select>
</td>
</tr>
</tbody>
</table>
</div>
<div class="btn_confirm01 btn_confirm">
<input type="submit" value="테스트 실행" class="btn_submit">
</div>
</form>
<div class="local_desc02 local_desc">
<h3>최근 견적 목록</h3>
<table class="tbl_head01 tbl_wrap">
<thead>
<tr>
<th>게시물 ID</th>
<th>견적서 ID</th>
<th>제목</th>
<th>작성자</th>
<th>현재 상태</th>
<th>선택된 입찰</th>
<th>수정일</th>
</tr>
</thead>
<tbody>
<?php foreach ($recent_estimates as $estimate): ?>
<tr>
<td><?php echo $estimate['wr_id']; ?></td>
<td><?php echo $estimate['estimate_id'] ?: '-'; ?></td>
<td><?php echo htmlspecialchars($estimate['wr_subject']); ?></td>
<td><?php echo htmlspecialchars($estimate['mb_id']); ?></td>
<td><?php echo $estimate['status'] ?: '견적신청중'; ?></td>
<td><?php echo $estimate['selected_bid_id'] ?: '-'; ?></td>
<td><?php echo $estimate['updated_at'] ?: '-'; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<div class="local_desc02 local_desc">
<h3>EstimateManager 주요 기능</h3>
<ul>
<li><strong>StatusManager 연동:</strong> 체계적인 상태 관리와 연동</li>
<li><strong>견적 생명주기 관리:</strong> 생성 → 완료 → 선택 → 결제 전체 프로세스</li>
<li><strong>권한별 데이터 접근:</strong> 사용자 역할에 따른 정보 필터링</li>
<li><strong>대리점 입찰 시스템:</strong> 시스템 비용 자동 계산 포함</li>
<li><strong>결제 관리:</strong> 단계별 결제 금액 계산 및 상태 관리</li>
<li><strong>트랜잭션 처리:</strong> 데이터 무결성 보장</li>
</ul>
</div>
<script>
function toggleTestFields() {
const testType = document.getElementById('test_type').value;
const estimateIdRow = document.getElementById('estimate_id_row');
const paymentTypeRow = document.getElementById('payment_type_row');
// 모든 필드 숨기기
estimateIdRow.style.display = 'none';
paymentTypeRow.style.display = 'none';
// 테스트 유형에 따라 필요한 필드 표시
if (testType === 'calculate_payment') {
estimateIdRow.style.display = '';
paymentTypeRow.style.display = '';
}
}
// 게시물 선택 시 견적서 ID 자동 설정
document.getElementById('wr_id').addEventListener('change', function () {
const selectedOption = this.options[this.selectedIndex];
const estimateId = selectedOption.getAttribute('data-estimate-id');
if (estimateId) {
document.getElementById('estimate_id').value = estimateId;
}
});
</script>
<?php
include_once(G5_ADMIN_PATH . '/admin.tail.php');
?>