This commit is contained in:
2026-04-13 22:31:06 +02:00
parent 38259bc706
commit e15b4ccf45
24 changed files with 1580 additions and 3858 deletions

View File

@@ -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) {