update
This commit is contained in:
@@ -412,12 +412,15 @@ $defaultCodAmount = $isCod ? number_format($totalWithTax, 2, '.', '') : '0';
|
||||
<?php endif; ?>
|
||||
<?php elseif ($pkgShipmentId !== '' && $pkgStatus === 'created'): ?>
|
||||
<span class="muted">Generowanie etykiety...</span>
|
||||
<?php else: ?>
|
||||
-
|
||||
<?php endif; ?>
|
||||
<?php if (in_array($pkgStatus, ['label_ready', 'created'], true)): ?>
|
||||
<?php if (in_array($pkgId, $pendingPrintIds, true)): ?>
|
||||
<button type="button" class="btn btn--sm btn--danger" disabled style="white-space:nowrap">W kolejce</button>
|
||||
<button type="button"
|
||||
class="btn btn--sm btn--danger js-print-queue-pending"
|
||||
data-package-id="<?= $e((string) $pkgId) ?>"
|
||||
data-order-id="<?= $e((string) ($orderId ?? 0)) ?>"
|
||||
disabled
|
||||
style="white-space:nowrap">W kolejce</button>
|
||||
<?php else: ?>
|
||||
<button type="button"
|
||||
class="btn btn--sm btn--secondary btn-print-label"
|
||||
@@ -765,6 +768,58 @@ $defaultCodAmount = $isCod ? number_format($totalWithTax, 2, '.', '') : '0';
|
||||
});
|
||||
});
|
||||
|
||||
// --- Print queue polling (shared mechanika: rewert "W kolejce" -> "Drukuj") ---
|
||||
var printQueuePending = {};
|
||||
var printQueueTimer = null;
|
||||
var printQueueTicks = 0;
|
||||
var PRINT_QUEUE_MAX_TICKS = 120;
|
||||
|
||||
function revertPrintButton(btn) {
|
||||
if (!btn) return;
|
||||
btn.innerHTML = 'Drukuj';
|
||||
btn.disabled = false;
|
||||
btn.classList.remove('btn--danger');
|
||||
btn.classList.remove('js-print-queue-pending');
|
||||
btn.classList.add('btn--secondary');
|
||||
btn.classList.add('btn-print-label');
|
||||
btn.setAttribute('title', 'Wyslij do drukarki');
|
||||
}
|
||||
|
||||
function stopPrintQueuePoll() {
|
||||
if (printQueueTimer) { clearInterval(printQueueTimer); printQueueTimer = null; }
|
||||
printQueueTicks = 0;
|
||||
}
|
||||
|
||||
function pollPrintQueueTick() {
|
||||
printQueueTicks += 1;
|
||||
if (printQueueTicks > PRINT_QUEUE_MAX_TICKS) { stopPrintQueuePoll(); return; }
|
||||
var ids = Object.keys(printQueuePending);
|
||||
if (ids.length === 0) { stopPrintQueuePoll(); return; }
|
||||
fetch('/api/print/jobs/status?package_ids=' + encodeURIComponent(ids.join(',')), { credentials: 'same-origin' })
|
||||
.then(function (r) { return r.ok ? r.json() : { pending: ids.map(Number) }; })
|
||||
.then(function (data) {
|
||||
var pending = (data && Array.isArray(data.pending)) ? data.pending.map(String) : [];
|
||||
Object.keys(printQueuePending).forEach(function (pid) {
|
||||
if (pending.indexOf(String(pid)) === -1) {
|
||||
revertPrintButton(printQueuePending[pid]);
|
||||
delete printQueuePending[pid];
|
||||
}
|
||||
});
|
||||
if (Object.keys(printQueuePending).length === 0) stopPrintQueuePoll();
|
||||
})
|
||||
.catch(function () { /* ignore */ });
|
||||
}
|
||||
|
||||
function watchPrintQueueButton(btn) {
|
||||
var pid = btn.getAttribute('data-package-id');
|
||||
if (!pid) return;
|
||||
printQueuePending[pid] = btn;
|
||||
if (!printQueueTimer) {
|
||||
printQueueTicks = 0;
|
||||
printQueueTimer = setInterval(pollPrintQueueTick, 3000);
|
||||
}
|
||||
}
|
||||
|
||||
// Print label button handler
|
||||
document.querySelectorAll('.btn-print-label').forEach(function (btn) {
|
||||
btn.addEventListener('click', function () {
|
||||
@@ -786,7 +841,10 @@ $defaultCodAmount = $isCod ? number_format($totalWithTax, 2, '.', '') : '0';
|
||||
btn.innerHTML = 'W kolejce';
|
||||
btn.disabled = true;
|
||||
btn.classList.remove('btn--secondary');
|
||||
btn.classList.remove('btn-print-label');
|
||||
btn.classList.add('btn--danger');
|
||||
btn.classList.add('js-print-queue-pending');
|
||||
watchPrintQueueButton(btn);
|
||||
} else {
|
||||
var msg = (res.data && res.data.error) ? res.data.error : 'Nieznany blad';
|
||||
if (window.OrderProAlerts) {
|
||||
@@ -806,6 +864,11 @@ $defaultCodAmount = $isCod ? number_format($totalWithTax, 2, '.', '') : '0';
|
||||
});
|
||||
});
|
||||
|
||||
// Przy zaladowaniu strony: uruchom polling dla przyciskow juz w kolejce
|
||||
document.querySelectorAll('.js-print-queue-pending').forEach(function (btn) {
|
||||
watchPrintQueueButton(btn);
|
||||
});
|
||||
|
||||
var params = new URLSearchParams(window.location.search);
|
||||
var autoCheckId = params.get('check');
|
||||
|
||||
@@ -955,47 +1018,20 @@ $defaultCodAmount = $isCod ? number_format($totalWithTax, 2, '.', '') : '0';
|
||||
}
|
||||
|
||||
// --- Apply preset (autofill form) ---
|
||||
// Preset nadpisuje wylacznie rozmiary paczki i wage. Forma dostawy (carrier,
|
||||
// serwis, punkt nadania, format etykiety) pozostaje bez zmian.
|
||||
function applyPreset(preset) {
|
||||
var carrierSelect = document.getElementById('shipment-carrier-select');
|
||||
var hiddenInput = document.getElementById('shipment-delivery-service');
|
||||
var credentialsInput = document.getElementById('shipment-credentials-id');
|
||||
var carrierInput = document.getElementById('shipment-carrier-id');
|
||||
var providerInput = document.getElementById('shipment-provider-code');
|
||||
setFieldValue('package_type', preset.package_type || 'PACKAGE');
|
||||
setFieldValue('length_cm', preset.length_cm || '25');
|
||||
setFieldValue('width_cm', preset.width_cm || '20');
|
||||
setFieldValue('height_cm', preset.height_cm || '8');
|
||||
setFieldValue('weight_kg', preset.weight_kg || '1');
|
||||
|
||||
if (!carrierSelect) return;
|
||||
|
||||
// Set carrier — use native change so existing handler shows correct panel
|
||||
carrierSelect.value = preset.carrier || '';
|
||||
if (carrierSelect._syncTrigger) carrierSelect._syncTrigger();
|
||||
carrierSelect.dispatchEvent(new Event('change'));
|
||||
|
||||
// The existing change handler clears hidden fields and resets selects.
|
||||
// We must wait for that to finish, then override with preset values.
|
||||
// Auto-submit after autofill completes
|
||||
setTimeout(function () {
|
||||
// Hidden fields — set AFTER the change handler cleared them
|
||||
if (hiddenInput) hiddenInput.value = preset.delivery_method_id || '';
|
||||
if (credentialsInput) credentialsInput.value = preset.credentials_id || '';
|
||||
if (carrierInput) carrierInput.value = preset.carrier_id || '';
|
||||
if (providerInput) providerInput.value = preset.provider_code || '';
|
||||
|
||||
// Package fields
|
||||
setFieldValue('package_type', preset.package_type || 'PACKAGE');
|
||||
setFieldValue('length_cm', preset.length_cm || '25');
|
||||
setFieldValue('width_cm', preset.width_cm || '20');
|
||||
setFieldValue('height_cm', preset.height_cm || '8');
|
||||
setFieldValue('weight_kg', preset.weight_kg || '1');
|
||||
setFieldValue('sender_point_id', preset.sender_point_id || '');
|
||||
setFieldValue('label_format', preset.label_format || 'PDF');
|
||||
|
||||
// Select delivery service in the correct panel
|
||||
selectDeliveryService(preset);
|
||||
|
||||
// Auto-submit after autofill completes
|
||||
setTimeout(function () {
|
||||
var form = document.getElementById('shipment-form');
|
||||
if (form) form.submit();
|
||||
}, 300);
|
||||
}, 200);
|
||||
var form = document.getElementById('shipment-form');
|
||||
if (form) form.submit();
|
||||
}, 100);
|
||||
}
|
||||
|
||||
function setFieldValue(name, value) {
|
||||
|
||||
Reference in New Issue
Block a user