This commit is contained in:
2026-04-10 00:09:09 +02:00
parent 6f6c1fcf17
commit 5f4869be94
34 changed files with 2356 additions and 44 deletions

View File

@@ -0,0 +1,35 @@
# PLAN 09-01: Blokada dat i godzin wstecznych
## Cel
Uniemożliwić użytkownikowi wybranie daty/godziny z przeszłości w formularzach rezerwacji (modal + hero search form). Wyświetlić komunikat błędu jeśli wybrana data/godzina już minęła.
## Kontekst
- Inputy `datetime-local`: `#carei-date-from`, `#carei-date-to` (modal), `#carei-search-date-from`, `#carei-search-date-to` (hero)
- Widget PHP: `class-elementor-widget.php` linie 86, 93
- JS: `carei-reservation.js` — walidacja w `validateForm()` (linia ~607), eventy w `initDynamicLoading()` (linia ~1073), search form `initSearchForm()` (linia ~1108)
## Taski
### Task 1: Ustawienie atrybutu `min` na inputach datetime-local
**Plik:** `assets/js/carei-reservation.js`
**Akcja:** Dodać funkcję `enforceDateMin()` która:
1. Ustawia `min` na bieżący datetime (format `YYYY-MM-DDTHH:MM`) na inputach `dateFrom` i `searchDateFrom`
2. Przy zmianie `dateFrom` ustawia `min` na `dateTo` = wartość `dateFrom`
3. Analogicznie dla search form (`searchDateFrom``searchDateTo`)
4. Wywoływana przy init modala i init search form
**Weryfikacja:** Przeglądarka blokuje wybór dat wcześniejszych niż teraz
**Done:** Atrybuty `min` dynamicznie ustawione na wszystkich 4 inputach
### Task 2: Walidacja w `validateForm()` — komunikat błędu
**Plik:** `assets/js/carei-reservation.js`
**Akcja:** W `validateForm()` po sprawdzeniu `dateTo > dateFrom` dodać sprawdzenie:
- Jeśli `dateFrom < now` → error "Data lub godzina rozpoczęcia już minęły"
- Jeśli `dateTo < now` → error "Data lub godzina zakończenia już minęły"
**Weryfikacja:** Komunikat wyświetla się pod polem z czerwonym obramowaniem
**Done:** Walidacja blokuje submit z datami wstecznymi + pokazuje polski komunikat
## Pliki do modyfikacji
1. `wp-content/plugins/carei-reservation/assets/js/carei-reservation.js`
## Ryzyko
- Brak — zmiana czysto frontendowa, walidacja klient-side

View File

@@ -0,0 +1,32 @@
---
phase:
plan:
completed: 2026-04-09T21:23:25.399Z
---
# Phase 09-01 Summary
****
## Acceptance Criteria Results
| Criterion | Status |
|-----------|--------|
| Ustawienie atrybutu min na inputach datetime-local | Pass — enforceDateMin() ustawia min=now na dateFrom/dateTo w modalu, analogicznie w search form. Zmiana dateFrom aktualizuje min na dateTo. |
| Walidacja w validateForm() — komunikat błędu | Pass — Dodano sprawdzenie dateFrom < now i dateTo < now z polskimi komunikatami błędów przed istniejącą walidacją dateTo > dateFrom. |
## Accomplishments
- Ustawienie atrybutu min na inputach datetime-local: enforceDateMin() ustawia min=now na dateFrom/dateTo w modalu, analogicznie w search form. Zmiana dateFrom aktualizuje min na dateTo.
- Walidacja w validateForm() — komunikat błędu: Dodano sprawdzenie dateFrom < now i dateTo < now z polskimi komunikatami błędów przed istniejącą walidacją dateTo > dateFrom.
## Files Modified
## Deviations
None — plan executed as specified.
---
*Phase: , Plan: *
*Completed: 2026-04-09*

View File

@@ -0,0 +1,23 @@
# PLAN 09-02: Fix — walidacja godziny wstecznej w bieżącym dniu
## Problem
Atrybut `min` na `datetime-local` nie jest konsekwentnie wymuszany przez przeglądarki dla części godzinowej. Użytkownik może wybrać dzisiejszą datę z godziną wcześniejszą niż teraz. Ponadto `enforceDateMin()` jest wywołane raz — `now` się starzeje.
## Rozwiązanie
1. Przenieść `enforceDateMin()` poza `if (!dataLoaded)` — odświeżać `min` przy każdym otwarciu modala
2. Dodać event listener `change` na inputach dat, który sprawdza czy wartość < now i jeśli tak — czyści pole + pokazuje komunikat
3. Analogicznie w search form — odświeżanie min przy każdym `initSearchForm` run
## Taski
### Task 1: Odświeżanie min przy każdym otwarciu modala + walidacja on change
**Plik:** `assets/js/carei-reservation.js`
**Akcja:**
- Przenieść `enforceDateMin()` za blok `if (!dataLoaded)`
- W `enforceDateMin()` dodać listener `change` na dateFrom i dateTo sprawdzający `value < getNowLocal()` → markFieldError + clear value
**Done:** Nie da się ustawić godziny wstecznej — pole reaguje natychmiast
### Task 2: Analogiczna walidacja on change w search form
**Plik:** `assets/js/carei-reservation.js`
**Akcja:** Dodać listener change na searchDateFrom/searchDateTo sprawdzający past time
**Done:** Search form również blokuje godziny wsteczne

View File

@@ -0,0 +1,32 @@
---
phase:
plan:
completed: 2026-04-09T21:26:08.877Z
---
# Phase 09-02 Summary
****
## Acceptance Criteria Results
| Criterion | Status |
|-----------|--------|
| Odświeżanie min przy każdym otwarciu modala + walidacja on change | Pass — enforceDateMin() przeniesione poza if(!dataLoaded) — min odświeżane przy każdym otwarciu. Listenery change na dateFrom/dateTo sprawdzają checkPastAndWarn() — czyści pole, pokazuje komunikat, dodaje error class. |
| Analogiczna walidacja on change w search form | Pass — searchDateFrom i searchDateTo mają change listener z checkPastAndWarn(). Komunikat: 'Rozpoczęcie/Zakończenie — data lub godzina już minęły'. |
## Accomplishments
- Odświeżanie min przy każdym otwarciu modala + walidacja on change: enforceDateMin() przeniesione poza if(!dataLoaded) — min odświeżane przy każdym otwarciu. Listenery change na dateFrom/dateTo sprawdzają checkPastAndWarn() — czyści pole, pokazuje komunikat, dodaje error class.
- Analogiczna walidacja on change w search form: searchDateFrom i searchDateTo mają change listener z checkPastAndWarn(). Komunikat: 'Rozpoczęcie/Zakończenie — data lub godzina już minęły'.
## Files Modified
## Deviations
None — plan executed as specified.
---
*Phase: , Plan: *
*Completed: 2026-04-09*

View File

@@ -0,0 +1,21 @@
# PLAN 10-01: Poprawki UX sekcji wyjazdu zagranicznego
## Cel
1. Zmienić label z "Planuję trasę poza granicę Polski" na "Wyjazd poza granicę Polski do:"
2. Ukrywać już wybrane kraje z wyników wyszukiwania — wybrane kraje widoczne tylko w sekcji "dodane" na dole
## Taski
### Task 1: Zmiana labelu w widget PHP
**Plik:** `includes/class-elementor-widget.php` linia 138
**Akcja:** Zamienić "Planuję trasę poza granicę Polski" → "Wyjazd poza granicę Polski do:"
**Done:** Nowy tekst widoczny w UI
### Task 2: Filtrowanie wybranych krajów z wyników wyszukiwania
**Plik:** `assets/js/carei-reservation.js`
**Akcja:** W `renderAbroadResults()` (linia ~559) oraz w filtrach `input`/`focus` (linie ~527, ~535) — pominąć kraje, których `id` jest w `selectedCountries`. Wybrane kraje są widoczne tylko w `renderAbroadSelected()`.
**Done:** Po wybraniu kraju znika z wyników wyszukiwania, widoczny tylko w sekcji dodanych z ikoną usunięcia.
## Pliki do modyfikacji
1. `wp-content/plugins/carei-reservation/includes/class-elementor-widget.php`
2. `wp-content/plugins/carei-reservation/assets/js/carei-reservation.js`

View File

@@ -0,0 +1,32 @@
---
phase:
plan:
completed: 2026-04-09T21:31:07.124Z
---
# Phase 10-01 Summary
****
## Acceptance Criteria Results
| Criterion | Status |
|-----------|--------|
| Zmiana labelu w widget PHP | Pass — Zmieniono 'Planuję trasę poza granicę Polski' → 'Wyjazd poza granicę Polski do:' w class-elementor-widget.php:138 |
| Filtrowanie wybranych krajów z wyników wyszukiwania | Pass — renderAbroadResults() pomija kraje z selectedCountries — wybrane znikają z listy wyników, widoczne tylko w sekcji dodanych na dole |
## Accomplishments
- Zmiana labelu w widget PHP: Zmieniono 'Planuję trasę poza granicę Polski' → 'Wyjazd poza granicę Polski do:' w class-elementor-widget.php:138
- Filtrowanie wybranych krajów z wyników wyszukiwania: renderAbroadResults() pomija kraje z selectedCountries — wybrane znikają z listy wyników, widoczne tylko w sekcji dodanych na dole
## Files Modified
## Deviations
None — plan executed as specified.
---
*Phase: , Plan: *
*Completed: 2026-04-09*

View File

@@ -0,0 +1,23 @@
# PLAN 11-01: Usunięcie pól adresowych i PESEL z formularza
## Cel
Usunąć z formularza rezerwacji pola: Miejscowość, Kod pocztowy, Ulica i nr domu, PESEL.
## Taski
### Task 1: Usunięcie HTML z widgetu PHP
**Plik:** `includes/class-elementor-widget.php`
**Akcja:** Usunąć cały row `carei-form__row--address` (linie 188-207) i row z PESEL (linie 230-238)
**Done:** Pola nie renderują się w HTML
### Task 2: Usunięcie walidacji i referencji w JS
**Plik:** `assets/js/carei-reservation.js`
**Akcja:**
- Usunąć z `requiredFields`: carei-city, carei-zipcode, carei-street, carei-pesel
- Usunąć z `drivers[]` w bookingData: address, pesel
- Usunąć z podsumowania jeśli wyświetlane
**Done:** JS nie waliduje ani nie wysyła tych pól
## Pliki
1. `class-elementor-widget.php`
2. `carei-reservation.js`

View File

@@ -0,0 +1,32 @@
---
phase:
plan:
completed: 2026-04-09T21:34:52.067Z
---
# Phase 11-01 Summary
****
## Acceptance Criteria Results
| Criterion | Status |
|-----------|--------|
| Usunięcie HTML z widgetu PHP | Pass — Usunięto cały row address (city, zipCode, street) i row PESEL z class-elementor-widget.php |
| Usunięcie walidacji i referencji w JS | Pass — Usunięto z requiredFields, z getFormData(). Placeholdery wysyłane do API: city='-', zipCode='00-000', street='-', pesel='00000000000' w customer/add i drivers[]. Podsumowanie nie wyświetla tych pól. |
## Accomplishments
- Usunięcie HTML z widgetu PHP: Usunięto cały row address (city, zipCode, street) i row PESEL z class-elementor-widget.php
- Usunięcie walidacji i referencji w JS: Usunięto z requiredFields, z getFormData(). Placeholdery wysyłane do API: city='-', zipCode='00-000', street='-', pesel='00000000000' w customer/add i drivers[]. Podsumowanie nie wyświetla tych pól.
## Files Modified
## Deviations
None — plan executed as specified.
---
*Phase: , Plan: *
*Completed: 2026-04-09*

View File

@@ -0,0 +1,13 @@
# PLAN 12-01: Zmiana komunikatu sukcesu po rezerwacji
## Cel
Zmienić komunikat na ekranie sukcesu:
- Tytuł: "Rezerwacja złożona!" → "Zamówienie złożone!"
- Podpis: "Potwierdzenie zostanie wysłane na podany adres e-mail." → "Oczekuj na kontakt z wypożyczalnią"
- Nr rezerwacji: "Nr rezerwacji:" → "Nr zamówienia:"
## Taski
### Task 1: Zmiana w PHP i JS
**Pliki:** `class-elementor-widget.php`, `carei-reservation.js`
**Done:** Nowe komunikaty widoczne po złożeniu zamówienia

View File

@@ -0,0 +1,30 @@
---
phase:
plan:
completed: 2026-04-09T21:35:58.315Z
---
# Phase 12-01 Summary
****
## Acceptance Criteria Results
| Criterion | Status |
|-----------|--------|
| Zmiana komunikatów sukcesu | Pass — Tytuł: 'Zamówienie złożone!', podpis: 'Oczekuj na kontakt z wypożyczalnią', nr: 'Nr zamówienia:' |
## Accomplishments
- Zmiana komunikatów sukcesu: Tytuł: 'Zamówienie złożone!', podpis: 'Oczekuj na kontakt z wypożyczalnią', nr: 'Nr zamówienia:'
## Files Modified
## Deviations
None — plan executed as specified.
---
*Phase: , Plan: *
*Completed: 2026-04-09*