--- phase: 03-miejsca-postojowe plan: 01 subsystem: ui, api, database tags: [elementor, acf, wp-cron, xml, ajax, parking] requires: - phase: 01-historia-cen provides: price_history table, popup pattern, AJAX pattern, XML endpoint - phase: 02-jawnosc-cen provides: XML export structure, dane.gov.pl integration provides: - Elementor widget "Miejsca Postojowe" with price display and history popup - wp_parking_price_history DB table - Daily cron recording parking prices - AJAX endpoint for parking price history - XML export extended with parking spots affects: [] tech-stack: added: [] patterns: [ACF group field access pattern] key-files: created: - wp-content/plugins/elementor-addon/widgets/parking-spots.php modified: - wp-content/plugins/elementor-addon/elementor-addon.php - wp-content/plugins/elementor-addon/assets/js/main.js - wp-content/plugins/elementor-addon/assets/css/main.css key-decisions: - "ACF groups: pola cen w grupach, nie flat — get_field('grupa', 'option')['pole']" - "Osobna tabela wp_parking_price_history zamiast rozszerzania wp_price_history" - "Cena m2 ukryta w widgecie na życzenie użytkownika (dane nadal w cronie/XML)" - "Layout bez ramek, kolumnowy zamiast grid 2-kolumnowego" patterns-established: - "ACF group field access: get_field('group_name', 'option')['group_name_field']" - "Parking popup reuse: fallback overlay usuwany jeśli apartamentowy istnieje" duration: ~30min completed: 2026-03-25 --- # Phase 3 Plan 01: Miejsca Postojowe Summary **Widget Elementor wyswietlajacy ceny miejsc postojowych (zwykle/rodzinne) z historia cen, cron i XML export** ## Performance | Metric | Value | |--------|-------| | Duration | ~30min | | Completed | 2026-03-25 | | Tasks | 2 auto + 2 checkpoints | | Files modified | 4 (1 new, 3 modified) | ## Acceptance Criteria Results | Criterion | Status | Notes | |-----------|--------|-------| | AC-1: Widget wyswietla ceny parkingowe | Pass | Dwa typy z cenami z ACF grup, layout kolumnowy | | AC-2: Popup historia cen dziala | Pass | Reuse popup apartamentow, AJAX endpoint dziala | | AC-3: Cron zapisuje ceny codziennie | Pass | INSERT IGNORE do wp_parking_price_history | | AC-4: XML export zawiera miejsca postojowe | Pass | Sekcja w /ceny-mieszkan.xml | ## Accomplishments - Widget "Miejsca Postojowe" w Elementorze — 2 karty (zwykle/rodzinne) z ceną i przyciskiem historia cen - Tabela wp_parking_price_history z codziennym zapisem cen przez WP Cron - AJAX endpoint parking_get_price_history z popupem reusujacym overlay apartamentow - XML /ceny-mieszkan.xml rozszerzony o sekcje z historia ## Files Created/Modified | File | Change | Purpose | |------|--------|---------| | `widgets/parking-spots.php` | Created | Elementor widget rendering parking spot cards | | `elementor-addon.php` | Modified | DB table, cron extension, AJAX endpoint, XML export | | `assets/js/main.js` | Modified | Parking price history click handler + AJAX | | `assets/css/main.css` | Modified | Parking widget styles (no border, column layout) | ## Decisions Made | Decision | Rationale | Impact | |----------|-----------|--------| | Osobna tabela wp_parking_price_history | Parking to opcje ACF, nie CPT — inna struktura (parking_type vs post_id) | Czysta separacja, brak zmian w istniejącej tabeli | | ACF group access pattern | Pola cen są w grupach ACF, nie flat | Wymaga get_field('grupa', 'option')['pole'] | | Ukrycie ceny m2 w widgecie | Request użytkownika — uproszczony wygląd | Dane m2 nadal w cronie i XML | | Layout bez ramek, kolumnowy | Request użytkownika — bliższy designowi Figma | Prostszy CSS | ## Deviations from Plan ### Summary | Type | Count | Impact | |------|-------|--------| | User-requested changes | 2 | Design adjustments, no functional impact | | Auto-fixed | 1 | ACF group access pattern | **Total impact:** Essential fixes + design preferences, no scope creep ### Details 1. **ACF group fields** — Plan zakladal flat access (get_field('pole', 'option')). Odkryto ze pola sa w grupach ACF. Naprawione na get_field('grupa', 'option')['pole']. 2. **Ukrycie ceny m2** — User request. Usunieto z HTML widgetu, dane nadal zapisywane. 3. **Layout bez ramek, kolumnowy** — User request. Zmieniono z grid 2-kolumnowego z ramkami na flex column bez ramek. ## Issues Encountered | Issue | Resolution | |-------|------------| | Figma MCP niedostępny (oryginalny plik) | User udostępnił kopię, pobrano screenshot Frame 16 | | Ceny nie wyświetlały się po wdrożeniu | ACF pola w grupach — naprawiony pattern dostępu | ## Next Phase Readiness **Ready:** - Milestone v0.2 Miejsca Postojowe kompletny (1 faza, 1 plan) - Wszystkie AC spełnione **Concerns:** - WP Cron pseudocron — na produkcji zalecany systemowy cron - Cena m2 ukryta — może wymagać przywrócenia w przyszłości **Blockers:** - None --- *Phase: 03-miejsca-postojowe, Plan: 01* *Completed: 2026-03-25*