diff --git a/.roo/history.md b/.roo/history.md index 667ba26..2e41c81 100644 --- a/.roo/history.md +++ b/.roo/history.md @@ -492,3 +492,220 @@ Dinamikus permission management UI építése a DB-driven RBAC rendszerhez. Back - `_build_user_response` async függvény, ami `rbac_service.get_role_permissions(db, role_id)`-t hív - `/auth/me` és `/users/me` endpoint-ok 38 db system_capabilities-t adnak vissza (mind True) - `Capability` osztály eltávolítva a kódbázisból + +## 2026-06-25 - P0 EXECUTION: Garage CRM Completion (Status & Edit) + +### 🎯 Cél +Garázs CRM funkciók teljes körű implementálása: backend státuszváltó és adatszerkesztő végpontok, frontend UI integráció a listázó és részletes oldalakon. + +### 🔧 Módosított fájlok + +**1. Backend API - [`backend/app/api/v1/endpoints/admin_organizations.py`](backend/app/api/v1/endpoints/admin_organizations.py:512)** +- `PUT /{org_id}/status` — Státuszváltó végpont (`OrgStatusUpdate` séma): validálja a státuszt (active/inactive/suspended/pending_verification), szinkronizálja `org.is_active`-t, rögzíti `last_deactivated_at`-t. Védve: `Depends(RequirePermission("org:edit"))`. +- `PUT /{org_id}` — Adatszerkesztő végpont (`OrganizationUpdate` séma): 10 mező (name, full_name, display_name, tax_number, reg_number, address_zip/city/street_name/street_type/house_number). Csak a nem-None mezőket frissíti. Védve: `Depends(RequirePermission("org:edit"))`. + +**2. Frontend Lista - [`frontend_admin/pages/garages/index.vue`](frontend_admin/pages/garages/index.vue)** +- `toggleStatus()` függvény: valós API hívással (`PUT /api/v1/admin/organizations/{id}/status`), dinamikus gombszín (piros/zöld), success/error toast, automatikus refresh. + +**3. Frontend Részletek - [`frontend_admin/pages/garages/[id]/index.vue`](frontend_admin/pages/garages/[id]/index.vue)** +- "Adatok Szerkesztése" gomb a header-ben +- Edit Modal: 8 mező (full_name, display_name, tax_number, reg_number, address_zip/city/street_name/street_type/house_number), pre-fill, Mentés → `PUT /api/v1/admin/organizations/{id}`, success/error toast, automatikus refresh + +**4. i18n - [`frontend_admin/i18n/locales/hu.json`](frontend_admin/i18n/locales/hu.json) + [`frontend_admin/i18n/locales/en.json`](frontend_admin/i18n/locales/en.json)** +- `garages.details.edit_details`, `garages.details.save`, `garages.details.zip`, `garages.details.city`, `garages.details.street_name`, `garages.details.street_type`, `garages.details.house_number` kulcsok (magyar + angol) + +### ✅ Verifikáció +- **Sync Engine:** ✅ 1265 OK, 0 Fixed, 0 Extra +- **PUT status (inactive):** ✅ 200 — "A(z) 'KYC Garázsa' garázs státusza frissítve: 'active' → 'inactive'." +- **PUT status (active):** ✅ 200 — "A(z) 'KYC Garázsa' garázs státusza frissítve: 'inactive' → 'active'." +- **PUT update:** ✅ 200 — "A(z) 'KYC Garázsa' garázs adatai frissítve." (updated_fields: ['display_name']) + +## 2026-06-25 - P0 Garage CRM Expansion: Contact/Billing Fields, Fleet Tab, RBAC UI + +### 🎯 Cél +Teljes Garage CRM profil bővítése: kapcsolattartói, számlázási és értesítési cím mezők hozzáadása a backendhez, flotta járművek végpont létrehozása, és a frontend garancia részletes nézetének teljes körű implementálása RBAC védelemmel. + +### 🔧 Módosított Fájlok + +**1. BACKEND - Modell (`backend/app/models/marketplace/organization.py`)** +- 14 új oszlop hozzáadva a `Organization` modellhez: + - `contact_person_name`, `contact_email`, `contact_phone` (kapcsolattartó) + - `billing_zip`, `billing_city`, `billing_street_name`, `billing_street_type`, `billing_house_number` (számlázási cím) + - `notification_zip`, `notification_city`, `notification_street_name`, `notification_street_type`, `notification_house_number` (értesítési cím) + +**2. BACKEND - API Végpont (`backend/app/api/v1/endpoints/admin_organizations.py`)** +- `OrganizationUpdate` séma bővítve a 14 új mezővel +- `GarageDetailsResponse` séma bővítve ugyanezen mezőkkel +- Új `GET /{org_id}/vehicles` végpont létrehozva (`GarageVehicleItem`, `GarageFleetResponse` sémákkal) +- `GarageVehicleItem` mezői: id, license_plate, vin, brand, model, year, color, status, branch_name, created_at + +**3. FRONTEND - i18n (`frontend_admin/i18n/locales/hu.json`, `en.json`)** +- Új kulcsok a `garages.details`, `garages.employees`, `garages.fleet` szekciókban + +**4. FRONTEND - Garage Detail Page (`frontend_admin/pages/garages/[id]/index.vue`)** +- Teljes körű implementáció (1366 sor): + - **STEP 4:** "Missing Data" warning banner (tax_number, contact_email, contact_phone, billing_address ellenőrzés) + - **STEP 5:** Tabbed Edit Modal (Alapadatok / Kapcsolat / Címek fülekkel) + - **STEP 6:** Strict RBAC UI enforcement (`hasOrgPermission()` helper) + - **STEP 7:** Fleet tab adattáblával (license_plate, brand, model, year, status) + - **STEP 8:** "Add Employee" gomb a Dolgozók fülön + - Add Employee, Edit Role, Remove confirmation modálok + - Notification Toast komponens + - Teljes ` \ No newline at end of file + +// Watch activeTab to fetch fleet vehicles when the Fleet tab becomes active +watch(activeTab, (newTab) => { + if (newTab === 'fleet' && fleetVehicles.value.length === 0) { + fetchFleetVehicles() + } +}) + diff --git a/frontend_admin/pages/garages/index.vue b/frontend_admin/pages/garages/index.vue index 307fe38..5aa91e3 100644 --- a/frontend_admin/pages/garages/index.vue +++ b/frontend_admin/pages/garages/index.vue @@ -5,6 +5,43 @@
{{ $t('garages.subtitle') }}
+ +{{ $t('garages.active_garages') }}
-{{ activeCount }}
+{{ $t('garages.private_garages') }}
+{{ individualCount }}
{{ $t('garages.premium_garages') }}
-{{ premiumCount }}
+{{ $t('garages.corporate_garages') }}
+{{ corporateCount }}
{{ $t('garages.enterprise_garages') }}
-{{ enterpriseCount }}
-