Files
interblue.pl/docs/dpd.md
2026-03-31 22:07:39 +02:00

2.7 KiB

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.