# DPD Pickup - zmiany lokalne (do odtworzenia po aktualizacji) Data: 2026-03-31 ## Cel zmiany Zablokowanie możliwości złożenia zamówienia bez wyboru punktu dla metod: - DPD Pickup - DPD Pickup COD - DPD SwipBox ## Zmienione pliki 1. `modules/dpdpoland/js/pudo-opc-prestateam-1.7.js` 2. `modules/dpdpoland/js/pudo-opc-prestateam-8.js` 3. `modules/onepagecheckoutps/views/js/front/onepagecheckoutps.js` 4. `modules/onepagecheckoutps/onepagecheckoutps.php` ## Dokładnie co zmieniono ### 1) `modules/dpdpoland/js/pudo-opc-prestateam-1.7.js` - Naprawiono błędne wywołanie: - było: `handleDpdShippingPudo()` - jest: `handleDpdPudo()` (przez wrapper `refreshDpdPudoState`) - Dodano ponowną inicjalizację stanu po dynamicznym przeładowaniu carrierów OPC: - nasłuch: `opc-load-carrier:completed` - nasłuch: `opc-update-carrier:completed` ### 2) `modules/dpdpoland/js/pudo-opc-prestateam-8.js` - Te same zmiany jak wyżej (identyczna logika naprawy i re-init). ### 3) `modules/onepagecheckoutps/views/js/front/onepagecheckoutps.js` - W `Review.placeOrder` dodano walidację dla aktywnej opcji dostawy: - jeżeli zaznaczony carrier zawiera kontenery DPD (`.dpdpoland-pudo-container`, `.dpdpoland-pudo-cod-container`, `.dpdpoland-swipbox-container`) - i nie ma widocznego wybranego punktu (`*.selected-point:visible`), - proces jest przerywany (`return false`), - pokazywany jest komunikat `need_select_pickup_point`, - wykonywany jest click na przycisku wyboru/zmiany punktu (otwarcie mapy). ### 4) `modules/onepagecheckoutps/onepagecheckoutps.php` - Dodano metodę: `validateDpdPickupPointSelection()`. - Metoda: - sprawdza czy aktualny carrier koszyka to DPD Pickup / Pickup COD / SwipBox (po `id_reference`), - pobiera `pudo_code` z tabeli `ps_dpdpoland_pudo_cart` dla bieżącego `id_cart`, - gdy brak kodu, dodaje błąd: - `Wybierz punkt DPD Pickup przed złożeniem zamówienia.` - Wywołania metody dodano w dwóch miejscach w `placeOrder()`: - przed zwrotem odpowiedzi `isSaved => true` (ścieżka dla nowego klienta), - przed końcowym `return array(...)` (ścieżka wspólna). ## Dlaczego to jest potrzebne - Walidacja wyłącznie po stronie JS mogła być ominięta. - `hookActionValidateOrder` w DPD działa zbyt późno (po utworzeniu zamówienia) do blokowania checkoutu. - Obecnie blokada działa zarówno na froncie (UX), jak i na backendzie (hard stop). ## Po aktualizacji modułów sprawdź 1. Czy powyższe 4 pliki nie zostały nadpisane. 2. Czy w plikach DPD nadal nie ma wywołania `handleDpdShippingPudo()`. 3. Czy metoda `validateDpdPickupPointSelection()` nadal istnieje i jest wywoływana w `placeOrder()`. 4. Test manualny: - DPD Pickup bez punktu -> zamówienie zablokowane. - DPD Pickup z punktem -> zamówienie przechodzi.