7.2 KiB
Roadmap — Carei Reservation Form
Milestone v0.1: Formularz Rezerwacji MVP
Goal: Działający formularz rezerwacji jako plugin Elementor, zintegrowany z API Softra Rent.
Phase 1: Plugin Skeleton + API Proxy ✅ Complete
Utworzenie pluginu WordPress z proxy REST API do Softra Rent. Backend obsługujący autoryzację JWT, pobieranie oddziałów, klas pojazdów, cenników i dodatków. Rejestracja widgetu Elementor.
Phase 2: Form UI — Krok 1 (Formularz) ✅ Complete
Frontend formularza rezerwacji w modalu Elementor. Dynamiczne segmenty (ze wszystkich lokalizacji), oddziały filtrowane po segmencie, opcje dodatkowe z cennika API, walidacja, responsive. Pominięto ubezpieczenie i wyjazd zagraniczny (brak w API — backlog).
Phase 3: Submit + Booking Flow ✅ Complete
Pełny flow: formularz → customer/add → pricing summary overlay → makebooking → confirm → success z numerem. Pola adresowe + PESEL. Error handling. Fixy: boolean API params, timeout mapowania, drivers[] required.
Phase 4: Polish & Integration Testing ✅ Complete
Edge cases (token retry, timeout, network errors), animacje przejść form↔summary↔success, accessibility (ARIA dialog, focus trap, focus management, aria-live), CSS fix.
Phase 5: Admin Panel — Historia Formularzy ✅ Complete
CPT carei_reservation z automatycznym zapisem po booking, lista z kolumnami i filtrem statusu, meta box szczegółów, system statusów nowe/przeczytane/zrealizowane, auto-mark-read.
Milestone v0.2: Wyjazd Zagraniczny
Goal: Wydzielenie pozycji "WYJAZD ZA GRANICĘ" z opcji dodatkowych do dedykowanej sekcji z wyszukiwarką krajów (zgodnie z Figmą).
Status: Complete ✅
Phase 6: Wyjazd zagraniczny — sekcja + wyszukiwarka krajów ✅ Complete
Sekcja "Wyjazd zagraniczny" z checkboxem toggle, wyszukiwarką krajów z flagami/cenami, dodawanie/usuwanie krajów, integracja z API submit. Design z Figmy (node 32-397, 122:1054, 122:1091, 123:1195).
Phase 7: Hero Search Form — mini formularz w hero ✅ Complete
Kompaktowy widget Elementor "Carei Search Form" osadzany w sekcji hero. Pola: segment, daty od/do, lokalizacja, checkbox zwrotu. Po kliknięciu przycisku otwiera istniejący modal rezerwacji z pre-wypełnionymi danymi. Design z Figmy (Form.svg).
Milestone v0.3: Mapa Oddziałów + Cache API
Goal: Wizualna prezentacja sieci oddziałów Carei — interaktywna mapa SVG z pinami i siatka miast, plus ujednolicone cachowanie API.
Status: Complete ✅
Phase 8: Mapa oddziałów + siatka miast + cache API ✅ Complete
Dwa widgety Elementor: (1) mapa Polski SVG z dynamicznymi pinami oddziałów i tooltipami adresowymi, (2) siatka miast. Cachowanie /branch/list z TTL 60 min.
Milestone v0.5: Pakiety Ochronne + Poprawki
Goal: Wyświetlanie dwóch pakietów ochronnych (SOFT i PREMIUM) ze stałą ceną/dobę zarządzaną w panelu administratora WP. Plus poprawki UX (mobile modal fix).
Status: Complete ✅
Phase 13: Pakiety ochronne — kafelki z ceną za dobę z panelu WP ✅ Complete
Dedykowane kafelki SOFT/PREMIUM w sekcji "Pakiety ochronne" z ceną za dobę z panelu WP. Radio z możliwością odznaczenia. Panel admina (wp-admin → Rezerwacje → Pakiety ochronne), REST endpoint /protection-packages. Pakiet poza priceItems Softra — wysyłany w comments + zapisany w meta CPT _carei_protection_package. Summary frontend dokłada wiersz pakietu i grandTotal. Plan 13-02 ukończony (13-01 superseded).
Phase 14: Mobile modal fix ✅ Complete
Fix: modal rezerwacji nie otwierał się na mobile/tablet — sekcja Elementor miała elementor-hidden-mobile. Przeniesienie overlay do document.body.
Milestone v0.6: Cleanup — Pakiety ochronne (jedno źródło prawdy)
Goal: W sekcji „Pakiety ochronne" modala zostają wyłącznie pakiety z panelu WP (SOFT/PREMIUM). Pozycje insurance z Softra API („Zniesienie udziału") są usuwane z widoku i nie trafiają do podsumowania ani payloadu.
Status: Complete ✅
Phase 15: Remove Softra-insurance z modala ✅ Complete
Usunięty kontener #carei-insurance-container + divider w widgecie PHP. W JS usunięta zmienna insuranceContainer i render insuranceItems. Pozycje pricelist zawierające ubezp|ochrony|zniesienie|insurance są dropowane — nie trafiają do extras, podsumowania ani do makebooking payloadu. Pakiety WP (SOFT/PREMIUM) z Phase 13 są jedynym źródłem prawdy.
Milestone v0.7: Dwujęzyczność (PL/EN) widgetów Carei
Goal: Plugin carei-reservation (modal, hero search, admin, mapa, grid miast, grid oddziałów) działa dwujęzycznie PL/EN zgodnie z bieżącym językiem Polylang. Obejmuje: (1) i18n refactor pluginu, (2) dwujęzyczne pakiety ochronne + mapowanie błędów Softra, (3) tłumaczenie EN + QA.
Status: Complete ✅
Phase 16: i18n refactor pluginu ✅ Complete
Plan 16-01 ukończony. 8 plików PHP z user-facing stringami w __()/esc_html__()/esc_attr__() (~105 stringów), textdomain carei-reservation ładowany na plugins_loaded. JS (1573 linie): ~70 literałów zmigrowanych do window.careiI18n przez wp_localize_script, helper pluralPl() dla polskich form. Wygenerowany .pot z 157 unikalnymi msgid. PL UI bez regresji (verified).
Phase 17: Dwujęzyczne pakiety ochronne + mapowanie błędów Softra ✅ Complete
Plan 17-01 ukończony. Panel pakietów z polami name_en/description_en + sanitize/save. REST /protection-packages z resolve_locale() (?lang= → determine_locale() fallback) zwraca wariant per locale z fallbackiem PL; klucze _en nie wyciekają w payloadzie. Carei_Softra_API::extract_softra_message() + map_error_message() ze słownikiem 13 komunikatów (exact + fuzzy prefix + graceful passthrough). Frontend loadProtectionPackages() dodaje ?lang= na podstawie document.documentElement.lang.
Phase 18: Tłumaczenie EN (.po/.mo) + Flatpickr ✅ Complete
Plan 18-01 ukończony. carei-reservation-en_US.po + .mo (158 wpisów) + kopia en_GB; własny PHP kompilator po2mo.php (msgfmt niedostępny). Scope addition: Flatpickr 4.6.13 (CDN jsdelivr) jako cross-browser date picker z locale PL/EN dla modal (static:true — popup w container) + hero (default). disableMobile:true dla spójności UX. Kompaktowy CSS theme w kolorach Carei (#2F2482). Graceful fallback do native picker.
Milestone v0.8: Admin-managed tłumaczenia extras
Goal: Panel administratora do zarządzania tłumaczeniami dynamicznych nazw dodatkowych opcji (extras) zwracanych z Softra API. Plugin auto-zbiera napotkane PL nazwy, admin wypełnia tłumaczenia EN w UI, frontend EN automatycznie używa.
Status: Complete ✅
Phase 19: Extras translations admin panel ✅ Complete
Plan 19-01 ukończony. WP options carei_extras_seen (auto-collected) + carei_extras_translations (admin override). Static helpery w Carei_Admin_Panel: remember_extra_name(), get_extras_seen(), get_extras_translations(), translate_extra_name(). Submenu Rezerwacje → Tłumaczenia extras (nonce + sanitize + redirect). Carei_REST_Proxy::get_pricelist() z runtime auto-collect + per-locale name replacement z fallbackiem do PL. Zero zmian w JS.
Backlog
- Eksport CSV/PDF rezerwacji
- Email notyfikacje