- [ETC] Plant 는 Report 메뉴 숨김.
- [INSTALL WAIT LIST] Oil Pickup 필요 옵션 추가.
- [INSTALL ORDER] 완료 type 변경해도 노트 수정 안하도록 수정. Container 변경 여부 표시.
- [CUSTOMER] Container install 날짜 입력 버그 수정.
This commit is contained in:
Hyojin Ahn 2026-04-30 08:23:08 -04:00
parent a0ebce1a14
commit 25ffdef1a4
6 changed files with 92 additions and 33 deletions

View File

@ -438,6 +438,8 @@ trait InstallAPI {
$cycle = intval($_POST['scheduled_cycle'] ?? 0);
$lock_date = intval($_POST['lock_date'] ?? 0);
$need_oil = $_POST['need_oil'] ?? 0; // 0 or 1
// Two-person OFF = NULL
if (!$person_cnt) {
$person_cnt = null;
@ -462,9 +464,9 @@ trait InstallAPI {
iw_required_person_cnt = ".($person_cnt !== null ? intval($person_cnt) : "NULL").",
iw_multi_person_reason = ".($person_reason ? "'".addslashes($person_reason)."'" : "NULL").",
iw_scheduled = '{$scheduled}',
iw_scheduled_cycle = '{$cycle}',
iw_need_oil_pickup = '{$need_oil}',
iw_status = 'WAITING'
WHERE iw_uid = '{$iw_uid}'
@ -1107,7 +1109,7 @@ trait InstallAPI {
cc_has_wheel='{$has_wheel}',
cc_has_woodframe='{$has_frame}',
cc_owner_type='{$owner_type}',
cc_install_date={$install_date},
cc_install_date='{$install_date}',
cc_install_at={$install_at_sql},
cc_install_note='{$install_note}',
cc_modified_at=NOW(),
@ -1198,11 +1200,17 @@ trait InstallAPI {
$this->upsertAdditionalNote($di, $additional_note);
// 3) 컨테이너 반영
if ($di['di_status'] === 'A' && $newStatus === 'P') {
$this->apply_container_changes_for_di($di_uid, $install_note, intval($di['di_customer_uid']));
if ($di['di_status'] !== 'P' && $newStatus === 'P') {
// 3-1) 컨테이너 반영 후 customer 의 main 볼륨이랑 main 컨테이너 변경
$this->updateCustomerMainContainer(intval($di['di_customer_uid']), $di['di_install_date']);
if ($di['di_container_applied'] == 0) {
$this->apply_container_changes_for_di($di_uid, $install_note, intval($di['di_customer_uid']));
// 3-1) 컨테이너 반영 후 customer 의 main 볼륨이랑 main 컨테이너 변경
$this->updateCustomerMainContainer(intval($di['di_customer_uid']), $di['di_install_date']);
// 실행 완료 기록
$this->markContainerApplied($di_uid);
}
}
// 4) oil pickup → daily
@ -1367,6 +1375,25 @@ trait InstallAPI {
}
}
private function markContainerApplied(
int $di_uid
)
{
$conn = $GLOBALS['conn'];
$sql = "
UPDATE tbl_daily_install
SET
di_container_applied = 1
WHERE di_uid = '{$di_uid}'
LIMIT 1
";
if (!qry($sql)) {
throw new Exception('daily install status update failed');
}
}
private function saveDailyFromInstallIfNeeded(int $di_uid, int $oil_qty, int $sludge): void
{
if ($oil_qty <= 0) return;

View File

@ -947,11 +947,6 @@ function updateCommentReadonlyByResult(){
}else{
textarea.removeAttribute('readonly');
textarea.classList.remove('bg-light');
// 기존 저장값이 있으면 유지, 없을 때만 빈칸
if (selectedRow) {
textarea.value = selectedRow.di_install_note || '';
}
}
}
@ -1488,6 +1483,11 @@ function renderWorkCell(row){
// 보조 아이콘
const icons = [];
const applied = String(row.di_container_applied || '0') === '1';
if(applied > 0){
icons.push(`<i class="bi bi-database-check" title="Container applied"></i>`);
}
const note = (row.di_additional_note || '').trim();
if(note.length > 0){
icons.push(`<i class="bi bi-journal-text" title="Additional note"></i>`);

View File

@ -119,15 +119,15 @@ if ($iw_uids) {
* 4) Customer images (install_order)
* ============================ */
$imageMap = []; // [customer_uid => true]
if ($customer_uids) {
$in = implode(',', $customer_uids);
if ($iw_uids) {
$in = implode(',', $iw_uids);
$sql_img = "
SELECT DISTINCT i_customeruid
FROM tbl_customer_image
WHERE i_status = 'A'
AND i_type = 'install_order'
AND i_customeruid IN ($in)
AND i_sourceuid IN ($in)
";
$ri = $jdb->nQuery($sql_img, "Load customer images error");
@ -431,6 +431,11 @@ function formatPhone($phone) {
iwRecurringDays.value = data.iw_scheduled_cycle || '';
}
// Oil-Pickup
if (data.iw_need_oil_pickup == 1) {
btnNeedOilPickup.classList.add('iw-toggle-on');
}
// job label 갱신
document.getElementById('iwStep3Title').innerText = `Step 3 of 3 - ${data.iw_work_type} Detail`;
@ -671,6 +676,13 @@ function formatPhone($phone) {
<?php endif; ?>
<?php endif; ?>
<?php if ($row['iw_need_oil_pickup'] > 0): ?>
<span class="badge bg-dark text-white">
<i class="bi bi-droplet"></i>
Pickup
</span>
<?php endif; ?>
<?php if ($row['iw_scheduled']): ?>
<div class="d-flex align-items-center gap-2 flex-wrap">
<span class="badge bg-dark text-white">

View File

@ -81,20 +81,22 @@ $canExport = in_array($level, [1, 5, 6, 7]);
</li>
<?php endif; ?>
<li class="dropdown">
<a href="#"><span>REPORT</span> <i class="bi bi-chevron-down dropdown-indicator"></i></a>
<ul>
<li><a href="/index_intranet.php?view=report_expense">EXPENSE</a></li>
<li><a href="/index_intranet.php?view=report_iscccorsia">ISCC/CORSIA</a></li>
<li><a href="/index_intranet.php?view=report_yearly">YEARLY</a></li>
<li><a href="/index_intranet.php?view=report_monthly">MONTHLY-AREA</a></li>
<li><a href="/index_intranet.php?view=report_monthly_driver">MONTHLY-DRIVER</a></li>
<li><a href="/index_intranet.php?view=report_daily">DAILY</a></li>
<li><a href="#">------------------</a></li>
<li><a href="/index_intranet.php?view=report_monthly_2024">MONTHLY-AREA(~2023)</a></li>
<li><a href="/index_intranet.php?view=report_daily_2024">DAILY(~2023)</a></li>
</ul>
</li>
<?php if ($canExport || $isUcoDriver): ?>
<li class="dropdown">
<a href="#"><span>REPORT</span> <i class="bi bi-chevron-down dropdown-indicator"></i></a>
<ul>
<li><a href="/index_intranet.php?view=report_expense">EXPENSE</a></li>
<li><a href="/index_intranet.php?view=report_iscccorsia">ISCC/CORSIA</a></li>
<li><a href="/index_intranet.php?view=report_yearly">YEARLY</a></li>
<li><a href="/index_intranet.php?view=report_monthly">MONTHLY-AREA</a></li>
<li><a href="/index_intranet.php?view=report_monthly_driver">MONTHLY-DRIVER</a></li>
<li><a href="/index_intranet.php?view=report_daily">DAILY</a></li>
<li><a href="#">------------------</a></li>
<li><a href="/index_intranet.php?view=report_monthly_2024">MONTHLY-AREA(~2023)</a></li>
<li><a href="/index_intranet.php?view=report_daily_2024">DAILY(~2023)</a></li>
</ul>
</li>
<?php endif; ?>
<?php if ($isAdmin): ?>
<li class="dropdown">

View File

@ -278,6 +278,7 @@ function initInstallWaitStep3() {
// set parameter
const twoOn = document.getElementById('btnTwoPerson').classList.contains('iw-toggle-on');
const recOn = document.getElementById('btnRecurring').classList.contains('iw-toggle-on');
const oilOn = document.getElementById('btnNeedOilPickup').classList.contains('iw-toggle-on');
const payload = {
iw_uid: InstallWait.iw_uid,
request_at: document.getElementById('iwRequestDate').value || null,
@ -290,7 +291,8 @@ function initInstallWaitStep3() {
person_cnt: twoOn ? 2 : null,
person_reason: twoOn ? document.getElementById('iwTwoPersonReason').value : null,
scheduled: recOn ? 1 : 0,
scheduled_cycle: recOn ? document.getElementById('iwRecurringDays').value: 0
scheduled_cycle: recOn ? document.getElementById('iwRecurringDays').value: 0,
need_oil: oilOn ? 1 : 0
};
btnStep3Complete.disabled = true;
@ -930,6 +932,11 @@ function bindStep3Toggles() {
days.disabled = !on;
if (!on) days.value = '';
};
const btnOil = document.getElementById('btnNeedOilPickup');
btnOil.onclick = () => {
btnOil.classList.toggle('iw-toggle-on');
};
}
function getContainerIconByType(type) {

View File

@ -174,12 +174,12 @@
</div>
<!-- Row 4 : Two-person job + Recurring -->
<div class="row g-2 mb-3 align-items-start">
<div class="row g-2 align-items-start">
<!-- LEFT : Note for Install Driver -->
<div class="col-md-6">
<label class="form-label small">Note for Install Driver</label>
<textarea id="iwWorkNote" class="form-control form-control-sm" rows="2"></textarea>
<textarea id="iwWorkNote" class="form-control form-control-sm" rows="4"></textarea>
</div>
<!-- RIGHT : Two-person + Recurring -->
@ -207,7 +207,7 @@
</div>
<!-- Recurring row -->
<div class="row g-2 align-items-center">
<div class="row g-2 align-items-center mb-2">
<div class="col-md-4">
<button type="button"
id="btnRecurring"
@ -229,6 +229,17 @@
</div>
</div>
<!-- Need Oil Pickup row -->
<div class="row g-2 align-items-center">
<div class="col-md-4">
<button type="button"
id="btnNeedOilPickup"
class="btn btn-sm btn-outline-secondary w-100 d-flex align-items-center justify-content-center gap-2 iw-inline-ctrl">
<i class="bi bi-droplet"></i>
Need Oil Pickup
</button>
</div>
</div>
</div>
@ -237,7 +248,7 @@
</div>
<!-- Footer -->
<div class="d-flex justify-content-between mt-4">
<div class="d-flex justify-content-between">
<button id="btnStep3Back" class="btn btn-sm btn-outline-secondary d-flex align-items-center gap-1">
<i class="bi bi-arrow-left"></i><span>Back</span>
</button>