This commit is contained in:
2026-03-31 22:07:39 +02:00
parent 6547bcff1e
commit aaaabef4eb
279 changed files with 34614 additions and 2 deletions

View File

@@ -0,0 +1,41 @@
# Plan naprawy DPD Pickup (checkout)
## Cel
Zablokować możliwość złożenia zamówienia bez wybranego punktu dla metody **DPD Pickup automaty paczkowe** na checkout `https://www.interblue.pl/zam%C3%B3wienie`.
## 1. Potwierdzenie scenariusza i trybu checkout
- Sprawdzić aktywny tryb `CUSTOM_CART` w module `dpdpoland` (najpewniej `opc_prestateam_1_7` z `onepagecheckoutps`).
- Odtworzyć błąd: wybór DPD Pickup bez wyboru punktu i próba kliknięcia `#btn_place_order`.
## 2. Naprawa walidacji JS po stronie DPD
Pliki:
- `modules/dpdpoland/js/pudo-opc-prestateam-1.7.js`
- `modules/dpdpoland/js/pudo-opc-prestateam-8.js`
Zakres:
- Zamienić wywołanie nieistniejącej funkcji `handleDpdShippingPudo()` na istniejącą `handleDpdPudo()`.
- Dodać ponowną inicjalizację po przeładowaniu sekcji przewoźników (`opc-load-carrier:completed`, `opc-update-carrier:completed`).
## 3. Dodatkowa walidacja przy kliknięciu "Złóż zamówienie" (OPC)
Plik:
- `modules/onepagecheckoutps/views/js/front/onepagecheckoutps.js`
Zakres:
- W `Review.placeOrder` dodać warunek: jeśli wybrany carrier to DPD Pickup/SwipBox i punkt nie jest ustawiony, przerwać submit i pokazać komunikat.
- Zabezpieczyć przypadki, gdzie sama blokada przycisku mogłaby zostać ominięta.
## 4. Walidacja backendowa (twarda blokada)
Plik:
- `modules/onepagecheckoutps/onepagecheckoutps.php`
Zakres:
- Przed finalnym utworzeniem zamówienia sprawdzić:
- czy wybrany przewoźnik to DPD Pickup/SwipBox,
- czy istnieje wpis `pudo_code` dla bieżącego koszyka w `ps_dpdpoland_pudo_cart`.
- Przy braku punktu: zwrócić błąd i zatrzymać proces zamówienia.
## 5. Testy regresji
- DPD Pickup bez punktu -> zamówienie zablokowane.
- DPD Pickup z punktem -> zamówienie przechodzi.
- Inni przewoźnicy -> bez regresji.
- Zmiana przewoźnika (tam/powrót) -> poprawny stan walidacji i przycisku.

60
docs/dpd.md Normal file
View File

@@ -0,0 +1,60 @@
# 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.