Compare commits
No commits in common. "ba12e893b547f68eb1cf500ddac3db3fcfe0c803" and "8a7ce4a228a514879b525c73248687d642d499ff" have entirely different histories.
ba12e893b5
...
8a7ce4a228
|
|
@ -94,7 +94,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
|
||||||
function renderTpsForm() {
|
function renderTpsForm() {
|
||||||
const tps = tpsData[activeTpsIndex];
|
const tps = tpsData[activeTpsIndex];
|
||||||
const submitState = getSubmitState(tps);
|
|
||||||
|
|
||||||
tpsContentContainer.innerHTML = `
|
tpsContentContainer.innerHTML = `
|
||||||
<form class="space-y-5 pb-8" data-tps-index="${tps.index}">
|
<form class="space-y-5 pb-8" data-tps-index="${tps.index}">
|
||||||
|
|
@ -187,9 +186,8 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
|
||||||
<div class="flex gap-3">
|
<div class="flex gap-3">
|
||||||
<a href="/upst/detail-penjemputan/batal" class="w-1/3 text-center bg-red-500 text-white py-3 rounded-xl font-bold text-sm">Batal</a>
|
<a href="/upst/detail-penjemputan/batal" class="w-1/3 text-center bg-red-500 text-white py-3 rounded-xl font-bold text-sm">Batal</a>
|
||||||
<button type="submit" ${submitState.canSubmit ? '' : 'disabled'} class="w-2/3 py-3 rounded-xl font-bold text-sm transition ${submitState.canSubmit ? 'bg-upst text-white hover:brightness-110' : 'bg-gray-300 text-gray-500 cursor-not-allowed'}">Submit</button>
|
<button type="submit" class="w-2/3 bg-upst text-white py-3 rounded-xl font-bold text-sm hover:brightness-110">Submit</button>
|
||||||
</div>
|
</div>
|
||||||
${submitState.canSubmit ? '' : `<p class="submit-state-message text-[11px] text-center text-red-500 font-medium">${submitState.message}</p>`}
|
|
||||||
</form>
|
</form>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
|
@ -705,64 +703,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
if (btnUploadPetugas) {
|
if (btnUploadPetugas) {
|
||||||
btnUploadPetugas.addEventListener('click', uploadFotoPetugas);
|
btnUploadPetugas.addEventListener('click', uploadFotoPetugas);
|
||||||
}
|
}
|
||||||
|
|
||||||
refreshSubmitButtonState(form);
|
|
||||||
}
|
|
||||||
|
|
||||||
function isTimbanganItemReady(timbanganItem) {
|
|
||||||
const weight = timbanganItem?.berat && timbanganItem.berat.length > 0 ? timbanganItem.berat[0] : 0;
|
|
||||||
return Boolean(timbanganItem?.file) && Boolean(timbanganItem?.uploaded) && weight > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getSubmitState(tps) {
|
|
||||||
if (!tps.fotoKedatangan.length || !tps.fotoKedatanganUploaded) {
|
|
||||||
return { canSubmit: false, message: 'Silakan upload foto kedatangan terlebih dahulu.' };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tps.timbangan.length) {
|
|
||||||
return { canSubmit: false, message: 'Tambahkan minimal 1 data timbangan sebelum submit.' };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tps.timbangan.some(item => !isTimbanganItemReady(item))) {
|
|
||||||
return { canSubmit: false, message: 'Pastikan semua foto timbangan sudah diupload dan beratnya valid.' };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tps.fotoPetugas.length || !tps.fotoPetugasUploaded) {
|
|
||||||
return { canSubmit: false, message: 'Silakan upload foto petugas terlebih dahulu' };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tps.namaPetugas.trim()) {
|
|
||||||
return { canSubmit: false, message: 'Isi nama petugas dulu sebelum submit.' };
|
|
||||||
}
|
|
||||||
|
|
||||||
return { canSubmit: true, message: '' };
|
|
||||||
}
|
|
||||||
|
|
||||||
function refreshSubmitButtonState(form) {
|
|
||||||
const submitButton = form.querySelector('button[type="submit"]');
|
|
||||||
if (!submitButton) return;
|
|
||||||
|
|
||||||
const helperText = form.querySelector('.submit-state-message');
|
|
||||||
const tps = tpsData[activeTpsIndex];
|
|
||||||
const submitState = getSubmitState(tps);
|
|
||||||
|
|
||||||
submitButton.disabled = !submitState.canSubmit;
|
|
||||||
submitButton.className = `w-2/3 py-3 rounded-xl font-bold text-sm transition ${submitState.canSubmit ? 'bg-upst text-white hover:brightness-110' : 'bg-gray-300 text-gray-500 cursor-not-allowed'}`;
|
|
||||||
|
|
||||||
let messageEl = helperText;
|
|
||||||
if (!messageEl) {
|
|
||||||
messageEl = document.createElement('p');
|
|
||||||
messageEl.className = 'submit-state-message text-[11px] text-center text-red-500 font-medium';
|
|
||||||
submitButton.closest('.flex.gap-3')?.insertAdjacentElement('afterend', messageEl);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (submitState.canSubmit) {
|
|
||||||
messageEl.textContent = '';
|
|
||||||
messageEl.classList.add('hidden');
|
|
||||||
} else {
|
|
||||||
messageEl.textContent = submitState.message;
|
|
||||||
messageEl.classList.remove('hidden');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function refreshTimbanganUploadState(item) {
|
function refreshTimbanganUploadState(item) {
|
||||||
|
|
@ -791,11 +731,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
uploadSingleFotoTimbangan(latestIndex, item);
|
uploadSingleFotoTimbangan(latestIndex, item);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const form = tpsContentContainer.querySelector('form');
|
|
||||||
if (form) {
|
|
||||||
refreshSubmitButtonState(form);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function renumberTimbanganItems(repeater) {
|
function renumberTimbanganItems(repeater) {
|
||||||
|
|
@ -903,8 +838,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
updateTpsTotalTimbangan();
|
updateTpsTotalTimbangan();
|
||||||
syncTimbanganToTpsData();
|
syncTimbanganToTpsData();
|
||||||
refreshTimbanganUploadState(item);
|
refreshTimbanganUploadState(item);
|
||||||
const form = tpsContentContainer.querySelector('form');
|
|
||||||
if (form) refreshSubmitButtonState(form);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
weightInputDisplay.addEventListener('blur', function() {
|
weightInputDisplay.addEventListener('blur', function() {
|
||||||
|
|
@ -919,15 +852,11 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
updateTpsTotalTimbangan();
|
updateTpsTotalTimbangan();
|
||||||
syncTimbanganToTpsData();
|
syncTimbanganToTpsData();
|
||||||
refreshTimbanganUploadState(item);
|
refreshTimbanganUploadState(item);
|
||||||
const form = tpsContentContainer.querySelector('form');
|
|
||||||
if (form) refreshSubmitButtonState(form);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
jenisSampahSelect.addEventListener('change', function() {
|
jenisSampahSelect.addEventListener('change', function() {
|
||||||
updateTpsTotalTimbangan();
|
updateTpsTotalTimbangan();
|
||||||
syncTimbanganToTpsData();
|
syncTimbanganToTpsData();
|
||||||
const form = tpsContentContainer.querySelector('form');
|
|
||||||
if (form) refreshSubmitButtonState(form);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
removeBtn.addEventListener('click', function() {
|
removeBtn.addEventListener('click', function() {
|
||||||
|
|
@ -940,7 +869,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
}
|
}
|
||||||
updateTpsTotalTimbangan();
|
updateTpsTotalTimbangan();
|
||||||
syncTimbanganToTpsData();
|
syncTimbanganToTpsData();
|
||||||
if (form) refreshSubmitButtonState(form);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
repeater.appendChild(item);
|
repeater.appendChild(item);
|
||||||
|
|
@ -1034,9 +962,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
if (targetItem) {
|
if (targetItem) {
|
||||||
refreshTimbanganUploadState(targetItem);
|
refreshTimbanganUploadState(targetItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
const form = tpsContentContainer.querySelector('form');
|
|
||||||
if (form) refreshSubmitButtonState(form);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function uploadFotoKedatangan() {
|
function uploadFotoKedatangan() {
|
||||||
|
|
@ -1067,8 +992,10 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
|
||||||
function submitTpsData() {
|
function submitTpsData() {
|
||||||
const tps = tpsData[activeTpsIndex];
|
const tps = tpsData[activeTpsIndex];
|
||||||
const submitState = getSubmitState(tps);
|
if (!tps.fotoKedatangan.length) return alert('Foto kedatangan belum diupload!');
|
||||||
if (!submitState.canSubmit) return alert(submitState.message);
|
if (!tps.timbangan.length) return alert('Belum ada data timbangan!');
|
||||||
|
if (!tps.fotoPetugas.length) return alert('Foto petugas belum diupload!');
|
||||||
|
if (!tps.namaPetugas.trim()) return alert('Nama petugas belum diisi!');
|
||||||
|
|
||||||
alert(`Validasi OK (${tps.name}).\n- Organik: ${formatWeightDisplay(tps.totalOrganik)} kg\n- Anorganik: ${formatWeightDisplay(tps.totalAnorganik)} kg\n- Residu: ${formatWeightDisplay(tps.totalResidu)} kg\n- Total: ${formatWeightDisplay(tps.totalTimbangan)} kg\n- Petugas: ${tps.namaPetugas}`);
|
alert(`Validasi OK (${tps.name}).\n- Organik: ${formatWeightDisplay(tps.totalOrganik)} kg\n- Anorganik: ${formatWeightDisplay(tps.totalAnorganik)} kg\n- Residu: ${formatWeightDisplay(tps.totalResidu)} kg\n- Total: ${formatWeightDisplay(tps.totalTimbangan)} kg\n- Petugas: ${tps.namaPetugas}`);
|
||||||
tps.submitted = true;
|
tps.submitted = true;
|
||||||
|
|
|
||||||
|
|
@ -204,7 +204,6 @@ const DetailPenjemputan = (function() {
|
||||||
function renderTpsForm() {
|
function renderTpsForm() {
|
||||||
const tps = state.tpsData[state.activeTpsIndex];
|
const tps = state.tpsData[state.activeTpsIndex];
|
||||||
const showTpsName = state.selectedTpsList.length > 1 || state.availableTpsList.length > 0;
|
const showTpsName = state.selectedTpsList.length > 1 || state.availableTpsList.length > 0;
|
||||||
const submitState = getSubmitState(tps);
|
|
||||||
|
|
||||||
elements.tpsContentContainer.innerHTML = `
|
elements.tpsContentContainer.innerHTML = `
|
||||||
<form class="space-y-5 pb-8" data-tps-index="${tps.index}">
|
<form class="space-y-5 pb-8" data-tps-index="${tps.index}">
|
||||||
|
|
@ -224,9 +223,8 @@ const DetailPenjemputan = (function() {
|
||||||
|
|
||||||
<div class="flex gap-3">
|
<div class="flex gap-3">
|
||||||
<a href="/upst/detail-penjemputan/batal" class="w-1/3 text-center bg-red-500 text-white py-3 rounded-xl font-bold text-sm">Batal</a>
|
<a href="/upst/detail-penjemputan/batal" class="w-1/3 text-center bg-red-500 text-white py-3 rounded-xl font-bold text-sm">Batal</a>
|
||||||
<button type="submit" ${submitState.canSubmit ? '' : 'disabled'} class="w-2/3 py-3 rounded-xl font-bold text-sm transition ${submitState.canSubmit ? 'bg-upst text-white hover:brightness-110' : 'bg-gray-300 text-gray-500 cursor-not-allowed'}">Submit${showTpsName ? ' ' + tps.name : ''}</button>
|
<button type="submit" class="w-2/3 bg-upst text-white py-3 rounded-xl font-bold text-sm hover:brightness-110">Submit${showTpsName ? ' ' + tps.name : ''}</button>
|
||||||
</div>
|
</div>
|
||||||
${submitState.canSubmit ? '' : `<p class="submit-state-message text-[11px] text-center text-red-500 font-medium">${submitState.message}</p>`}
|
|
||||||
</form>
|
</form>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
|
@ -626,8 +624,6 @@ const DetailPenjemputan = (function() {
|
||||||
updateTpsTotalTimbangan();
|
updateTpsTotalTimbangan();
|
||||||
syncTimbanganToTpsData();
|
syncTimbanganToTpsData();
|
||||||
refreshTimbanganUploadState(item);
|
refreshTimbanganUploadState(item);
|
||||||
const form = elements.tpsContentContainer.querySelector('form');
|
|
||||||
if (form) refreshSubmitButtonState(form);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
weightInputDisplay.addEventListener('blur', function() {
|
weightInputDisplay.addEventListener('blur', function() {
|
||||||
|
|
@ -642,15 +638,11 @@ const DetailPenjemputan = (function() {
|
||||||
updateTpsTotalTimbangan();
|
updateTpsTotalTimbangan();
|
||||||
syncTimbanganToTpsData();
|
syncTimbanganToTpsData();
|
||||||
refreshTimbanganUploadState(item);
|
refreshTimbanganUploadState(item);
|
||||||
const form = elements.tpsContentContainer.querySelector('form');
|
|
||||||
if (form) refreshSubmitButtonState(form);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
jenisSampahSelect.addEventListener('change', function() {
|
jenisSampahSelect.addEventListener('change', function() {
|
||||||
updateTpsTotalTimbangan();
|
updateTpsTotalTimbangan();
|
||||||
syncTimbanganToTpsData();
|
syncTimbanganToTpsData();
|
||||||
const form = elements.tpsContentContainer.querySelector('form');
|
|
||||||
if (form) refreshSubmitButtonState(form);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
removeBtn.addEventListener('click', function() {
|
removeBtn.addEventListener('click', function() {
|
||||||
|
|
@ -667,7 +659,6 @@ const DetailPenjemputan = (function() {
|
||||||
|
|
||||||
updateTpsTotalTimbangan();
|
updateTpsTotalTimbangan();
|
||||||
syncTimbanganToTpsData();
|
syncTimbanganToTpsData();
|
||||||
if (form) refreshSubmitButtonState(form);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
repeater.appendChild(item);
|
repeater.appendChild(item);
|
||||||
|
|
@ -730,62 +721,6 @@ const DetailPenjemputan = (function() {
|
||||||
if (btnUploadPetugas) {
|
if (btnUploadPetugas) {
|
||||||
btnUploadPetugas.addEventListener('click', uploadFotoPetugas);
|
btnUploadPetugas.addEventListener('click', uploadFotoPetugas);
|
||||||
}
|
}
|
||||||
|
|
||||||
refreshSubmitButtonState(form);
|
|
||||||
}
|
|
||||||
|
|
||||||
function isTimbanganItemReady(timbanganItem) {
|
|
||||||
return Boolean(timbanganItem?.file) && Boolean(timbanganItem?.uploaded) && (timbanganItem?.weight || 0) > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getSubmitState(tps) {
|
|
||||||
if (!tps.fotoKedatangan.length || !tps.fotoKedatanganUploaded) {
|
|
||||||
return { canSubmit: false, message: 'Silakan upload foto kedatangan terlebih dahulu.' };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tps.timbangan.length) {
|
|
||||||
return { canSubmit: false, message: 'Tambahkan minimal 1 data timbangan sebelum submit.' };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tps.timbangan.some(item => !isTimbanganItemReady(item))) {
|
|
||||||
return { canSubmit: false, message: 'Pastikan semua foto timbangan sudah diupload dan beratnya valid.' };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tps.fotoPetugas.length || !tps.fotoPetugasUploaded) {
|
|
||||||
return { canSubmit: false, message: 'Silakan upload foto petugas terlebih dahulu' };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tps.namaPetugas.trim()) {
|
|
||||||
return { canSubmit: false, message: 'Isi nama petugas dulu sebelum submit.' };
|
|
||||||
}
|
|
||||||
|
|
||||||
return { canSubmit: true, message: '' };
|
|
||||||
}
|
|
||||||
|
|
||||||
function refreshSubmitButtonState(form) {
|
|
||||||
const submitButton = form.querySelector('button[type="submit"]');
|
|
||||||
if (!submitButton) return;
|
|
||||||
|
|
||||||
let messageEl = form.querySelector('.submit-state-message');
|
|
||||||
const tps = state.tpsData[state.activeTpsIndex];
|
|
||||||
const submitState = getSubmitState(tps);
|
|
||||||
|
|
||||||
submitButton.disabled = !submitState.canSubmit;
|
|
||||||
submitButton.className = `w-2/3 py-3 rounded-xl font-bold text-sm transition ${submitState.canSubmit ? 'bg-upst text-white hover:brightness-110' : 'bg-gray-300 text-gray-500 cursor-not-allowed'}`;
|
|
||||||
|
|
||||||
if (!messageEl) {
|
|
||||||
messageEl = document.createElement('p');
|
|
||||||
messageEl.className = 'submit-state-message text-[11px] text-center text-red-500 font-medium';
|
|
||||||
submitButton.closest('.flex.gap-3')?.insertAdjacentElement('afterend', messageEl);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (submitState.canSubmit) {
|
|
||||||
messageEl.textContent = '';
|
|
||||||
messageEl.classList.add('hidden');
|
|
||||||
} else {
|
|
||||||
messageEl.textContent = submitState.message;
|
|
||||||
messageEl.classList.remove('hidden');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function refreshTimbanganUploadState(item) {
|
function refreshTimbanganUploadState(item) {
|
||||||
|
|
@ -812,11 +747,6 @@ const DetailPenjemputan = (function() {
|
||||||
uploadSingleFotoTimbangan(latestIndex, item);
|
uploadSingleFotoTimbangan(latestIndex, item);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const form = elements.tpsContentContainer.querySelector('form');
|
|
||||||
if (form) {
|
|
||||||
refreshSubmitButtonState(form);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function renumberTimbanganItems(repeater) {
|
function renumberTimbanganItems(repeater) {
|
||||||
|
|
@ -1193,9 +1123,6 @@ async function applyWatermark(file, photoNumber) {
|
||||||
if (targetItem) {
|
if (targetItem) {
|
||||||
refreshTimbanganUploadState(targetItem);
|
refreshTimbanganUploadState(targetItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
const form = elements.tpsContentContainer.querySelector('form');
|
|
||||||
if (form) refreshSubmitButtonState(form);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function uploadFotoKedatangan() {
|
function uploadFotoKedatangan() {
|
||||||
|
|
@ -1274,9 +1201,21 @@ async function applyWatermark(file, photoNumber) {
|
||||||
|
|
||||||
function submitTpsData() {
|
function submitTpsData() {
|
||||||
const tps = state.tpsData[state.activeTpsIndex];
|
const tps = state.tpsData[state.activeTpsIndex];
|
||||||
const submitState = getSubmitState(tps);
|
|
||||||
if (!submitState.canSubmit) {
|
if (!tps.fotoKedatangan.length) {
|
||||||
alert(submitState.message);
|
alert('Foto kedatangan belum diupload!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!tps.timbangan.length) {
|
||||||
|
alert('Belum ada data timbangan!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!tps.fotoPetugas.length) {
|
||||||
|
alert('Foto petugas belum diupload!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!tps.namaPetugas.trim()) {
|
||||||
|
alert('Nama petugas belum diisi!');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue