- [INSTALL WAIT LIST] List 생성자 표시 추가, Route 확인 버튼 추가, 재정렬하면 seq 가 계속 증가하는 버그 수정.
This commit is contained in:
Hyojin Ahn 2026-04-28 08:31:02 -04:00
parent 12dd0516b1
commit be2a92d2db
2 changed files with 76 additions and 4 deletions

View File

@ -748,9 +748,25 @@ trait InstallAPI {
return intval($a['di_order_seq'] ?? 0) <=> intval($b['di_order_seq'] ?? 0); return intval($a['di_order_seq'] ?? 0) <=> intval($b['di_order_seq'] ?? 0);
}); });
$has_existing = is_array($existing_rows) && count($existing_rows) > 0;
$has_trial = is_array($trial_rows) && count($trial_rows) > 0;
$base_seq = 0;
if (!$has_existing && $has_trial) {
$qr_max = qry("
SELECT MAX(di_order_seq) AS max_seq
FROM tbl_daily_install
WHERE di_driver_uid = '{$di_driver_uid}'
AND di_install_date = '{$di_install_date}'
");
$row_max = fetch_array($qr_max);
$base_seq = intval($row_max['max_seq'] ?? 0);
}
$seq = 1; $seq = 1;
foreach($all as &$r){ foreach($all as &$r){
// base_seq 더해줌
$r['di_order_seq'] = $base_seq + $seq++; $r['di_order_seq'] = $base_seq + $seq++;
} }
unset($r); unset($r);

View File

@ -30,8 +30,10 @@ $total_count = $jdb->rQuery($sql_cnt, "Install wait list count error");
// 1) Load waitlist // 1) Load waitlist
// ============================ // ============================
$sql = " $sql = "
SELECT * SELECT iw.*, CONCAT(m.m_firstname, ' ', m.m_lastname) as iw_created_member
FROM tbl_install_waitlist FROM tbl_install_waitlist iw
LEFT OUTER JOIN tbl_member m
ON iw.iw_created_by = m.m_uid
WHERE iw_status in ('WAITING','DRAFT') WHERE iw_status in ('WAITING','DRAFT')
$add_where $add_where
ORDER BY iw_requested_due_date ASC, iw_request_at ASC ORDER BY iw_requested_due_date ASC, iw_request_at ASC
@ -329,6 +331,44 @@ function formatPhone($phone) {
modal.show(); modal.show();
} }
function openRoute() {
const OFFICE = "4490 Chesswood Dr, North York, ON M3J 2B9";
const rows = [];
document.querySelectorAll('#iwListBody tr').forEach(tr => {
const address = tr.dataset.address || '';
const city = tr.dataset.city || '';
const postal = tr.dataset.postal || '';
if (!address) return;
rows.push({
address: [address, city, postal].filter(Boolean).join(', '),
order: parseInt(tr.dataset.orderSeq || 0)
});
});
if (!rows.length) {
showPopupMessage('No route data.', 'error', 1500);
return;
}
// 순서 정렬 (중요)
rows.sort((a, b) => a.order - b.order);
const waypoints = rows.map(r => r.address).join('|');
let url = `https://www.google.com/maps/dir/?api=1`;
url += `&origin=${encodeURIComponent(OFFICE)}`;
url += `&destination=${encodeURIComponent(OFFICE)}`;
url += `&waypoints=${encodeURIComponent(waypoints)}`;
window.open(url, '_blank');
}
function loadInstallWaitForEdit(iw_uid) { function loadInstallWaitForEdit(iw_uid) {
// 1) install_wait 메타 로드 // 1) install_wait 메타 로드
api('get_install_wait_detail', { iw_uid }, data => { api('get_install_wait_detail', { iw_uid }, data => {
@ -578,6 +618,7 @@ function formatPhone($phone) {
<!-- LEFT --> <!-- LEFT -->
<div class="d-flex gap-2 flex-wrap"> <div class="d-flex gap-2 flex-wrap">
<span class="badge <?=$workClass?>"><?=$work?></span> <span class="badge <?=$workClass?>"><?=$work?></span>
<small class="text-muted">created by <?=$row['iw_created_member']?></small>
<?php if ($row['iw_status'] === 'DRAFT'): ?> <?php if ($row['iw_status'] === 'DRAFT'): ?>
<span class="badge bg-dark text-white"> <span class="badge bg-dark text-white">
@ -857,6 +898,10 @@ function formatPhone($phone) {
<!-- Button --> <!-- Button -->
<div class="d-flex iw-ui-control align-items-center ms-auto gap-2"> <div class="d-flex iw-ui-control align-items-center ms-auto gap-2">
<button id="btnRouteSchedule" class="btn btn-outline-secondary">
<i class="bi bi-geo-alt"></i> Route
</button>
<button id="btnModifySchedule" class="btn btn-outline-primary" disabled> <button id="btnModifySchedule" class="btn btn-outline-primary" disabled>
<i class="bi bi-sliders"></i> Modify <i class="bi bi-sliders"></i> Modify
</button> </button>
@ -1167,6 +1212,9 @@ function formatPhone($phone) {
rows.forEach(r => { rows.forEach(r => {
const tr = document.createElement('tr'); const tr = document.createElement('tr');
tr.dataset.address = r.di_address || '';
tr.dataset.city = r.di_city || '';
tr.dataset.postal = r.di_postal || '';
if (r.is_trial) { if (r.is_trial) {
tr.dataset.isTrial = '1'; tr.dataset.isTrial = '1';
tr.dataset.iwUid = r.iw_uid; // waitlist uid tr.dataset.iwUid = r.iw_uid; // waitlist uid
@ -1866,6 +1914,14 @@ while ($row = mysqli_fetch_assoc($rmem)) {
return; return;
} }
const routeBtn = e.target.closest('#btnRouteSchedule');
if (routeBtn) {
e.preventDefault();
openRoute();
return;
}
// 3) WAIT CARD CLICK (trial toggle) // 3) WAIT CARD CLICK (trial toggle)
const card = e.target.closest('.wait-card'); const card = e.target.closest('.wait-card');
if (!card) return; if (!card) return;