feat(104-apaczka-weekend-delivery): Apaczka Paczka w Weekend dla paczkomatow InPost
Phase 104 complete: - Backend: ApaczkaShipmentService::buildOptionsPayload() mapuje weekend_delivery -> option[19] = 1 w payloadzie API Apaczka v2 - Stala OPTION_KEYS jako rozszerzalne mapowanie pole formularza -> id opcji Apaczki - Frontend: checkbox "Dostawa w weekend (sobota)" w prepare.php widoczny tylko dla supplier=INPOST + paczkomat (door_to_point=1 lub point_to_point=1) - JS toggle oparty na atrybutach data-supplier/data-paczkomat z resetem stanu - 3 nowe testy jednostkowe pokrywajace mapowanie buildOptionsPayload (phpunit OK 11/11) - Hotfix integracyjny po UAT: ShipmentController::create() nie przekazywal pola weekend_delivery z requestu do formData providera (root cause: reczna lista pol w controllerze) - Dokumentacja zaktualizowana (DOCS/ARCHITECTURE.md, DOCS/TECH_CHANGELOG.md) DEFER-104-01: rozwazyc test integracyjny pelnego flow controller -> service lub refactor na request->all(). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -184,16 +184,29 @@ $defaultCodAmount = $isCod ? number_format($totalWithTax, 2, '.', '') : '0';
|
||||
$aSvcName = trim((string) ($aSvc['name'] ?? ''));
|
||||
$aSvcCarrierCode = trim((string) ($aSvc['carrier_code'] ?? ''));
|
||||
$aSvcSelected = $mappedCarrier === 'apaczka' && $mappedMethodId === $aSvcId;
|
||||
$aSvcSupplier = strtoupper(trim((string) ($aSvc['supplier'] ?? '')));
|
||||
$aSvcDoorToPoint = (int) ($aSvc['door_to_point'] ?? 0) === 1;
|
||||
$aSvcPointToPoint = (int) ($aSvc['point_to_point'] ?? 0) === 1;
|
||||
$aSvcPaczkomat = $aSvcDoorToPoint || $aSvcPointToPoint;
|
||||
?>
|
||||
<option
|
||||
value="<?= $e($aSvcId) ?>"
|
||||
data-carrier-id="<?= $e($aSvcCarrierCode) ?>"
|
||||
data-supplier="<?= $e($aSvcSupplier) ?>"
|
||||
data-paczkomat="<?= $aSvcPaczkomat ? '1' : '0' ?>"
|
||||
<?= $aSvcSelected ? 'selected' : '' ?>>
|
||||
<?= $e($aSvcName !== '' ? $aSvcName : ('ID ' . $aSvcId)) ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<?php endif; ?>
|
||||
<div id="shipment-apaczka-weekend-wrap" class="mt-2" style="display:none">
|
||||
<label class="checkbox-inline">
|
||||
<input type="checkbox" name="weekend_delivery" id="shipment-apaczka-weekend" value="1">
|
||||
Dostawa w weekend (sobota)
|
||||
</label>
|
||||
<div class="muted" style="font-size:12px">Dostepne dla paczkomatow InPost. Etykiety mozna generowac od czwartku 20:00 do piatku 18:00.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="shipment-empty-panel" class="muted" style="<?= $preselectedCarrier !== '' ? 'display:none' : '' ?>">Wybierz przewoznika</div>
|
||||
@@ -601,6 +614,21 @@ $defaultCodAmount = $isCod ? number_format($totalWithTax, 2, '.', '') : '0';
|
||||
if (providerInput) providerInput.value = carrier === 'apaczka' ? 'apaczka' : 'allegro_wza';
|
||||
}
|
||||
|
||||
var weekendWrap = document.getElementById('shipment-apaczka-weekend-wrap');
|
||||
var weekendInput = document.getElementById('shipment-apaczka-weekend');
|
||||
function toggleWeekendOption() {
|
||||
if (!weekendWrap || !weekendInput) return;
|
||||
var carrierActive = carrierSelect ? carrierSelect.value === 'apaczka' : false;
|
||||
var opt = apaczkaSelect ? apaczkaSelect.options[apaczkaSelect.selectedIndex] : null;
|
||||
var supplier = (opt && opt.getAttribute('data-supplier')) || '';
|
||||
var paczkomat = (opt && opt.getAttribute('data-paczkomat')) === '1';
|
||||
var visible = carrierActive && supplier === 'INPOST' && paczkomat;
|
||||
weekendWrap.style.display = visible ? '' : 'none';
|
||||
if (!visible) {
|
||||
weekendInput.checked = false;
|
||||
}
|
||||
}
|
||||
|
||||
carrierSelect.addEventListener('change', function () {
|
||||
clearHiddenFields();
|
||||
if (searchInput) searchInput.value = '';
|
||||
@@ -614,6 +642,7 @@ $defaultCodAmount = $isCod ? number_format($totalWithTax, 2, '.', '') : '0';
|
||||
}
|
||||
allegroOpts.forEach(function (o) { o.classList.remove('is-selected'); });
|
||||
showPanel(carrierSelect.value);
|
||||
toggleWeekendOption();
|
||||
});
|
||||
|
||||
if (inpostSelect) {
|
||||
@@ -639,10 +668,12 @@ $defaultCodAmount = $isCod ? number_format($totalWithTax, 2, '.', '') : '0';
|
||||
if (providerInput) providerInput.value = 'apaczka';
|
||||
}
|
||||
apaczkaSelect.addEventListener('change', syncApaczkaFields);
|
||||
apaczkaSelect.addEventListener('change', toggleWeekendOption);
|
||||
if (carrierSelect.value === 'apaczka' && apaczkaSelect.value !== '') {
|
||||
syncApaczkaFields();
|
||||
}
|
||||
}
|
||||
toggleWeekendOption();
|
||||
|
||||
if (wrapper && searchInput && dropdown) {
|
||||
var isAllegroOpen = false;
|
||||
|
||||
Reference in New Issue
Block a user