This commit is contained in:
2026-04-22 22:00:50 +02:00
parent 16be247ce1
commit e979fbe755
46 changed files with 5302 additions and 274 deletions

View File

@@ -0,0 +1,165 @@
---
phase: 15-remove-softra-insurance
plan: 01
type: execute
wave: 1
depends_on: []
files_modified:
- wp-content/plugins/carei-reservation/includes/class-elementor-widget.php
- wp-content/plugins/carei-reservation/assets/js/carei-reservation.js
autonomous: false
delegation: off
---
<objective>
## Goal
Usunąć z modala rezerwacji wyświetlanie pozycji ubezpieczeniowych pobieranych z Softra API (np. "Zniesienie udziału własnego"). W sekcji "Pakiety ochronne" pozostają wyłącznie kafelki SOFT/PREMIUM zarządzane w panelu WP (Phase 13).
## Purpose
Po wdrożeniu Phase 13 (pakiety WP) w sekcji "Pakiety ochronne" równolegle wyświetlały się dwa źródła: (1) kafelki WP (SOFT/PREMIUM), (2) pozycje z Softra pricelist rozpoznawane heurystyką nazwy ("zniesienie"/"insurance"). Powoduje to dublowanie oferty i konflikt z polityką cenową Carei. Zostawiamy jedno źródło prawdy — panel WP.
## Output
- Dynamiczny kontener `#carei-insurance-container` usunięty z szablonu widgetu
- Logika JS klasyfikująca i renderująca `insuranceItems` usunięta
- Pozycje Softra rozpoznane jako „zniesienie/insurance” są **odfiltrowywane całkowicie** (nie trafiają ani do kafelków, ani do `extraItems`, ani do podsumowania)
- Pakiety WP (SOFT/PREMIUM) działają bez zmian
</objective>
<context>
@.paul/PROJECT.md
@.paul/ROADMAP.md
@.paul/STATE.md
@.paul/phases/13-protection-packages/13-02-SUMMARY.md
@wp-content/plugins/carei-reservation/includes/class-elementor-widget.php
@wp-content/plugins/carei-reservation/assets/js/carei-reservation.js
</context>
<acceptance_criteria>
## AC-1: Brak renderowania pozycji Softra-insurance
```gherkin
Given użytkownik otworzył modal rezerwacji i wybrał pojazd/daty
When załaduje się lista dodatków z Softra pricelist zawierająca pozycję "Zniesienie udziału własnego"
Then pozycja ta NIE pojawia się w sekcji "Pakiety ochronne"
And NIE pojawia się w sekcji "Opcje dodatkowe"
And w DOM nie istnieje element `#carei-insurance-container`
```
## AC-2: Pakiety WP działają bez zmian
```gherkin
Given w panelu WP są zdefiniowane pakiety SOFT i PREMIUM z ceną/dobę
When użytkownik otworzy modal
Then w sekcji "Pakiety ochronne" widoczne są wyłącznie kafelki SOFT i PREMIUM
And zaznaczenie pakietu dodaje wiersz do podsumowania i do `grandTotal` (bez zmian względem Phase 13)
```
## AC-3: Brak wycieku do podsumowania i submit payload
```gherkin
Given użytkownik przechodzi do podsumowania bez zaznaczania żadnego pakietu WP
When pricelist zawierał pozycję Zniesienie udziału"
Then pozycja NIE pojawia się w tabeli podsumowania
And nie jest wysyłana w `priceItems` w `makebooking`
And całkowity koszt nie zawiera składnika ubezpieczenia Softra
```
</acceptance_criteria>
<tasks>
<task type="auto">
<name>Task 1: Usunięcie kontenera insurance z szablonu widgetu</name>
<files>wp-content/plugins/carei-reservation/includes/class-elementor-widget.php</files>
<action>
W `class-elementor-widget.php` (ok. linia 158161) usunąć blok:
- `<div class="carei-form__protection-divider" aria-hidden="true"></div>`
- `<div class="carei-form__row" id="carei-insurance-container">...komentarz...</div>`
Zachować strukturę sekcji „Pakiety ochronne" z kontenerem `#carei-protection-packages-container` (kafelki SOFT/PREMIUM).
Unikać: usuwania dividerów sekcji zewnętrznej ani innych pól formularza. Zmieniamy wyłącznie divider wewnętrzny + kontener insurance.
</action>
<verify>
grep -n "carei-insurance-container" wp-content/plugins/carei-reservation/includes/class-elementor-widget.php → brak wyników.
Ręcznie: otwórz modal, sekcja „Pakiety ochronne" pokazuje tylko kafelki WP.
</verify>
<done>AC-1 satysfakcjonowane: kontener nie istnieje w DOM.</done>
</task>
<task type="auto">
<name>Task 2: Usunięcie logiki insurance w carei-reservation.js</name>
<files>wp-content/plugins/carei-reservation/assets/js/carei-reservation.js</files>
<action>
1. Usunąć zmienną `insuranceContainer` z deklaracji (ok. linia 82) oraz jej przypisanie w init (`insuranceContainer = document.getElementById('carei-insurance-container');` ok. linia 107).
2. W funkcji renderującej dodatki (ok. linie 503525):
- Usunąć lokalną zmienną `insuranceItems` i blok `if (insuranceContainer) { ... }`.
- Zastąpić heurystykę „dopasuj do insurance LUB extras" filtrowaniem typu **drop** — pozycje zawierające w nazwie `zniesienie` lub `insurance` (case-insensitive) mają być **pomijane całkowicie** (nie trafiają do `extraItems`).
- Pozostałe pozycje trafiają jak dotychczas do `extraItems` i są renderowane w `extrasContainer`.
3. Sprawdzić, że przy budowaniu payloadu (`priceItems` / `makebooking`) nie ma osobnej ścieżki pobierającej z `insuranceContainer` — jeśli jest, usunąć.
Unikać: zmian w logice Phase 13 (renderProtectionPackages, onProtectionCardClick, getSelectedProtectionPayload) — ten kod zostaje nietknięty. Nie usuwać `extrasContainer`.
</action>
<verify>
grep -nE "insuranceContainer|insuranceItems|carei-insurance-container" wp-content/plugins/carei-reservation/assets/js/carei-reservation.js → brak wyników.
grep -nE "zniesienie|insurance" wp-content/plugins/carei-reservation/assets/js/carei-reservation.js → tylko w filtrze drop.
</verify>
<done>AC-1, AC-3 satysfakcjonowane: pozycje Softra-insurance są dropowane przed renderem i przed budową payloadu.</done>
</task>
<task type="checkpoint:human-verify" gate="blocking">
<what-built>
- Usunięty kontener `#carei-insurance-container` i jego divider w szablonie PHP.
- Usunięta zmienna + render logic `insuranceItems` w JS; pozycje Softra „Zniesienie udziału"/„insurance" są pomijane.
- Pakiety WP (SOFT/PREMIUM) bez zmian.
</what-built>
<how-to-verify>
1. Wypchnij przez SFTP (albo zweryfikuj lokalnie, jeśli dostępny).
2. Otwórz stronę z modalem rezerwacji (carei.pagedev.pl) z DevTools.
3. Uzupełnij krok 1 formularza tak, aby pricelist z Softra został pobrany (wybór dat/oddziału/klasy).
4. Sprawdź sekcję „Pakiety ochronne":
- Widoczne TYLKO kafelki SOFT i PREMIUM z panelu WP.
- Brak pozycji „Zniesienie udziału własnego" ani żadnej innej z Softra.
5. Sprawdź sekcję „Opcje dodatkowe":
- Pozycje Softra są (fotelik, GPS itd.), ale brak pozycji zawierających słowo „zniesienie" lub „insurance".
6. W DevTools → Elements: `document.getElementById('carei-insurance-container')``null`.
7. Przejdź do podsumowania bez zaznaczania pakietu WP:
- W tabeli brak wiersza ubezpieczenia Softra.
- `grandTotal` = suma Softra (bez insurance) (+ pakiet WP jeśli zaznaczony).
8. Zaznacz pakiet SOFT → kafelek zaznacza się, wiersz pakietu pojawia się w podsumowaniu, total rośnie o cena×doba.
</how-to-verify>
<resume-signal>Napisz "approved" aby zamknąć plan, lub opisz problemy do poprawy.</resume-signal>
</task>
</tasks>
<boundaries>
## DO NOT CHANGE
- `includes/class-admin-panel.php` — panel WP pakietów (Phase 13 stable)
- `includes/class-rest-proxy.php` endpoint `/protection-packages`
- Logika Phase 13 w JS: `loadProtectionPackages`, `renderProtectionPackages`, `onProtectionCardClick`, `getSelectedProtectionPayload`, sekcja podsumowania z pakietem WP
- Kontener `#carei-protection-packages-container` i jego style
- Inne sekcje formularza (segment, daty, lokalizacja, wyjazd zagraniczny, dane osobowe)
## SCOPE LIMITS
- Nie zmieniamy heurystyki klasyfikacji innych pozycji extras
- Nie dotykamy backend (PHP) poza szablonem widgetu
- Nie ruszamy CSS — osierocone reguły `.carei-form__protection-divider` w CSS mogą zostać (brak użycia == brak efektu)
- Nie zmieniamy wywołań API Softra ani żadnych endpointów
</boundaries>
<verification>
Przed zamknięciem planu:
- [ ] `grep -n "carei-insurance-container"` → 0 wyników w `includes/` oraz `assets/js/`
- [ ] `grep -n "insuranceContainer"` w JS → 0 wyników
- [ ] Modal otwiera się, sekcja „Pakiety ochronne" pokazuje tylko SOFT/PREMIUM
- [ ] Opcje dodatkowe: brak pozycji „Zniesienie udziału"
- [ ] Podsumowanie i makebooking payload wolne od Softra-insurance
- [ ] AC-1, AC-2, AC-3 przeszły human-verify
</verification>
<success_criteria>
- Wszystkie tasks zakończone
- Checkpoint human-verify zatwierdzony ("approved")
- Brak regresji w Phase 13 (pakiety WP) i w pobieraniu extras Softra
</success_criteria>
<output>
Po zakończeniu: `.paul/phases/15-remove-softra-insurance/15-01-SUMMARY.md`
</output>

View File

@@ -0,0 +1,111 @@
---
phase: 15-remove-softra-insurance
plan: 01
subsystem: ui
tags: [elementor, reservation-modal, pricelist, protection-packages, polylang-ready]
requires:
- phase: 13-protection-packages
provides: WP-managed SOFT/PREMIUM packages + /protection-packages REST endpoint
provides:
- Single source of truth for protection packages (panel WP)
- Drop-filter for Softra-insurance items in pricelist rendering
affects: future-extras-work
tech-stack:
added: []
patterns:
- "Pricelist drop-filter: pozycje zawierające ubezp/ochrony/zniesienie/insurance są pomijane przed renderem"
key-files:
created: []
modified:
- wp-content/plugins/carei-reservation/includes/class-elementor-widget.php
- wp-content/plugins/carei-reservation/assets/js/carei-reservation.js
key-decisions:
- "Drop zamiast kategoryzacji: pozycje Softra-insurance są całkowicie pomijane (nie trafiają do extras ani payloadu)"
patterns-established:
- "Jedno źródło prawdy dla pakietów ochronnych: panel WP (Phase 13)"
duration: ~10min
started: 2026-04-22
completed: 2026-04-22
---
# Phase 15 Plan 01: Remove Softra-insurance z modala — Summary
**W sekcji „Pakiety ochronne" modala rezerwacji pozostają wyłącznie kafelki SOFT/PREMIUM z panelu WP; pozycje ubezpieczeniowe z Softra API są pomijane przed renderem i przed budową payloadu.**
## Performance
| Metric | Value |
|--------|-------|
| Duration | ~10min |
| Tasks | 2 auto + 1 human-verify completed |
| Files modified | 2 |
## Acceptance Criteria Results
| Criterion | Status | Notes |
|-----------|--------|-------|
| AC-1: Brak renderowania pozycji Softra-insurance | Pass | Kontener `#carei-insurance-container` usunięty z DOM; filtr drop w JS |
| AC-2: Pakiety WP działają bez zmian | Pass | Phase 13 logic nietknięta |
| AC-3: Brak wycieku do podsumowania i payloadu | Pass | Pozycje są dropowane przed `extraItems.push` — nie trafiają do summary ani do `priceItems` |
## Accomplishments
- Usunięty kontener `#carei-insurance-container` + wewnętrzny divider w szablonie Elementor widget
- Usunięta zmienna `insuranceContainer` (deklaracja + init) z `carei-reservation.js`
- Heurystyka nazewnicza `ubezp|ochrony|zniesienie|insurance` zmieniona z „kategoryzuj jako insurance" na „drop całkowicie"
## Files Created/Modified
| File | Change | Purpose |
|------|--------|---------|
| `wp-content/plugins/carei-reservation/includes/class-elementor-widget.php` | Modified | Usunięty blok insurance-container + divider (linie ~158161) |
| `wp-content/plugins/carei-reservation/assets/js/carei-reservation.js` | Modified | Usunięta zmienna + render insuranceContainer; pozycje Softra-insurance dropowane |
## Decisions Made
| Decision | Rationale | Impact |
|----------|-----------|--------|
| Drop zamiast oddzielnej kategorii | Phase 13 już dostarcza pakiety WP — Softra-insurance staje się redundantny i konfliktuje z polityką cenową | Prostsza logika, brak sekcji do utrzymania, brak konfliktu dwóch źródeł |
## Deviations from Plan
### Summary
| Type | Count | Impact |
|------|-------|--------|
| Auto-fixed | 0 | — |
| Scope additions | 0 | — |
| Deferred | 0 | — |
**Total impact:** Plan wykonany dokładnie jak zaplanowano.
### Deferred Items
None.
## Issues Encountered
None.
## Next Phase Readiness
**Ready:**
- Modal rezerwacji wyświetla jedno źródło pakietów ochronnych (WP)
- Payload `makebooking` czysty — bez Softra-insurance
**Concerns:**
- Osierocona reguła CSS `.carei-form__protection-divider` pozostała w pliku (brak użycia = brak efektu wizualnego). Do opcjonalnego cleanupu w backlog.
**Blockers:** None.
---
*Phase: 15-remove-softra-insurance, Plan: 01*
*Completed: 2026-04-22*