From a5740eaf787e930b72e83872b1be665a74037e8e Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Mon, 12 Jan 2026 13:38:58 +0000 Subject: [PATCH] feat(mobile-fixes-phase3): Complete US-307 - Restructurare Footer Nav (4 butoane noi) Implemented by Ralph autonomous loop. Iteration: 1 Co-Authored-By: Claude --- .../archive/prd-phase2-20260112-133438.json | 253 +++++++++++ scripts/ralph/prd.json | 277 ++++++------ scripts/ralph/progress.txt | 103 +---- .../views/receipts/ReceiptsListView.vue | 23 +- .../reports/views/BankCashRegisterView.vue | 14 +- src/modules/reports/views/CacheStatsView.vue | 17 +- src/modules/reports/views/DashboardView.vue | 13 +- .../reports/views/DetailedInvoicesView.vue | 11 +- src/modules/reports/views/InvoicesView.vue | 15 +- .../reports/views/MaturityAnalysisView.vue | 11 +- src/modules/reports/views/ServerLogsView.vue | 15 +- src/modules/reports/views/SettingsHubView.vue | 12 +- .../reports/views/TrialBalanceView.vue | 15 +- src/router/index.js | 10 +- .../components/mobile/MobileBottomNav.vue | 8 +- tasks/prd-mobile-fixes-phase3.md | 400 ++++++++++++++++++ 16 files changed, 832 insertions(+), 365 deletions(-) create mode 100644 scripts/ralph/archive/prd-phase2-20260112-133438.json create mode 100644 tasks/prd-mobile-fixes-phase3.md diff --git a/scripts/ralph/archive/prd-phase2-20260112-133438.json b/scripts/ralph/archive/prd-phase2-20260112-133438.json new file mode 100644 index 0000000..9ca0c02 --- /dev/null +++ b/scripts/ralph/archive/prd-phase2-20260112-133438.json @@ -0,0 +1,253 @@ +{ + "projectName": "mobile-navigation-improvements", + "branchName": "ralph/unified-mobile-md", + "description": "Extinderea navigării mobile cu Dashboard split, Settings Hub, MobileDrawerMenu și butoane context-aware", + "cssRules": { + "documentation": [ + "docs/ONBOARDING_CSS.md", + "docs/DESIGN_TOKENS.md", + "docs/CSS_PATTERNS.md", + "docs/MOBILE_PATTERNS.md" + ], + "goldenRules": [ + "Folosește DOAR design tokens - NICIODATĂ valori hardcodate", + "Verifică CSS_PATTERNS.md înainte de a scrie CSS nou", + "Testează în AMBELE teme (light + dark mode)", + "NICIODATĂ :deep() în componente (PrimeVue → vendor/)", + "NICIODATĂ duplicate CSS (write once, use everywhere)", + "Mobile: toate paginile folosesc MobileTopBar + MobileBottomNav", + "Mobile: filtrele se pun în BottomSheet, NU inline", + "Mobile: selecția afișează acțiuni în footer, NU în header" + ], + "mobileLayoutTokens": { + "topBarHeight": "56px", + "bottomNavHeight": "56px", + "fabSize": "56px", + "fabBottomOffset": "72px", + "touchTargetMin": "48px" + } + }, + "userStories": [ + { + "id": "US-201", + "title": "MobileBottomNav activ pe Dashboard", + "description": "Ca utilizator mobil vreau să văd footer navigation și pe Dashboard pentru navigare ușoară", + "priority": 1, + "acceptanceCriteria": [ + "DashboardView.vue include MobileBottomNav component", + "Link-ul 'Rapoarte' din nav este activ/highlighted pe Dashboard", + "MobileTopBar adăugat cu title 'Dashboard'", + "Verify in browser: navigarea funcționează din Dashboard", + "npm run build passes" + ], + "passes": true, + "notes": "Completed in iteration 1" + }, + { + "id": "US-202", + "title": "MobileDrawerMenu Material Design cu Profil", + "description": "Ca utilizator mobil vreau meniul hamburger să aibă design Material cu secțiune profil", + "priority": 2, + "acceptanceCriteria": [ + "Componentă src/shared/components/mobile/MobileDrawerMenu.vue creată", + "Secțiuni: Header cu logo, Navigare principală, Profil utilizator (nume + logout)", + "Link-uri navigare: Dashboard, Bonuri, Facturi, Balanță, Trezorerie, Setări", + "Active state pe link-ul curent (bazat pe route)", + "Animație slide-in de la stânga", + "Close pe tap outside sau pe link click", + "Dark mode support", + "npm run build passes" + ], + "passes": true, + "notes": "Completed in iteration 2" + }, + { + "id": "US-208", + "title": "Actualizare Router cu noile rute", + "description": "Ca developer vreau router-ul configurat pentru noile pagini", + "priority": 3, + "acceptanceCriteria": [ + "Rută /reports/maturity-analysis → MaturityAnalysisView (lazy loaded)", + "Rută /reports/detailed-invoices → DetailedInvoicesView (lazy loaded)", + "Rută /settings → SettingsHubView (lazy loaded)", + "Redirect /data-entry/ocr-metrics accesibil din Settings Hub", + "npm run build passes" + ], + "passes": true, + "notes": "Completed in iteration 3" + }, + { + "id": "US-206", + "title": "Creare Pagină Hub Setări", + "description": "Ca utilizator vreau o pagină centrală cu toate opțiunile de setări", + "priority": 4, + "acceptanceCriteria": [ + "View nou: src/modules/reports/views/SettingsHubView.vue", + "Route: /settings", + "Carduri pentru: OCR Setări, Cache Stats, Loguri Server, Telegram (dacă admin)", + "MobileTopBar cu title 'Setări'", + "MobileBottomNav cu Setări activ", + "Click pe card navighează la pagina respectivă", + "Design responsive (grid 2x2 pe mobil, 4 columns pe desktop)", + "npm run build passes" + ], + "passes": true, + "notes": "Completed in iteration 4" + }, + { + "id": "US-204", + "title": "Creare Pagină Analiză Scadențe", + "description": "Ca utilizator vreau o pagină dedicată pentru analiza scadențelor clienți/furnizori", + "priority": 5, + "acceptanceCriteria": [ + "View nou: src/modules/reports/views/MaturityAnalysisView.vue", + "Route: /reports/maturity-analysis", + "Conține componenta MaturityAndDetailsCard (partea de analiză scadențe)", + "MobileTopBar cu title 'Analiză Scadențe' și buton ← Înapoi la Dashboard", + "MobileBottomNav activ", + "npm run build passes" + ], + "passes": true, + "notes": "Completed in iteration 5" + }, + { + "id": "US-205", + "title": "Creare Pagină Facturi Detaliate", + "description": "Ca utilizator vreau o pagină dedicată pentru tabelul facturilor detaliate", + "priority": 6, + "acceptanceCriteria": [ + "View nou: src/modules/reports/views/DetailedInvoicesView.vue", + "Route: /reports/detailed-invoices", + "Conține componenta/partea de tabel detaliat din MaturityAndDetailsCard", + "MobileTopBar cu title 'Facturi Detaliate' și buton ← Înapoi", + "MobileBottomNav activ", + "Filtre în BottomSheet pe mobil", + "npm run build passes" + ], + "passes": true, + "notes": "Completed in iteration 6" + }, + { + "id": "US-203", + "title": "Dashboard KPIs Only View", + "description": "Ca utilizator mobil vreau Dashboard-ul principal să arate doar KPI cards pentru acces rapid", + "priority": 7, + "acceptanceCriteria": [ + "DashboardView.vue pe mobil afișează DOAR: SwipeableCards cu KPIs", + "Adăugare 2 carduri quick-link: 'Analiză Scadențe →' și 'Facturi Detaliate →'", + "Click pe quick-link navighează la pagina dedicată", + "Desktop rămâne neschimbat (toate secțiunile)", + "npm run build passes" + ], + "passes": true, + "notes": "Completed in iteration 7" + }, + { + "id": "US-212", + "title": "Quick Links în Dashboard Mobile", + "description": "Ca utilizator vreau carduri clickabile în Dashboard pentru a ajunge la Scadențe și Facturi", + "priority": 8, + "acceptanceCriteria": [ + "După SwipeableCards, 2 carduri: 'Analiză Scadențe' și 'Facturi Detaliate'", + "Design: icon + titlu + săgeată dreaptă (→)", + "Click navighează la pagina respectivă", + "Doar pe mobil (desktop are totul în aceeași pagină)", + "npm run build passes" + ], + "passes": true, + "notes": "Completed in iteration 8" + }, + { + "id": "US-207", + "title": "Actualizare MobileBottomNav cu link Setări", + "description": "Ca utilizator vreau butonul Setări din footer să ducă la Hub Setări", + "priority": 9, + "acceptanceCriteria": [ + "MobileBottomNav: link Setări → /settings (nu /data-entry/ocr-metrics)", + "Icon: pi-cog", + "Active state când pe /settings sau /settings/* sau pagini admin", + "Actualizare în toate paginile care folosesc MobileBottomNav", + "npm run build passes" + ], + "passes": true, + "notes": "Completed in iteration 9" + }, + { + "id": "US-213", + "title": "Actualizare Hamburger Menu în toate paginile", + "description": "Ca utilizator vreau hamburger menu-ul să funcționeze uniform în toată aplicația", + "priority": 10, + "acceptanceCriteria": [ + "Toate paginile cu MobileTopBar: click pe ☰ deschide MobileDrawerMenu", + "MobileDrawerMenu înlocuiește vechiul Sidebar pe mobil", + "Desktop păstrează navigarea existentă", + "npm run build passes" + ], + "passes": true, + "notes": "Completed in iteration 10" + }, + { + "id": "US-210", + "title": "Creare MobileActionBar Component", + "description": "Ca developer vreau componentă reutilizabilă pentru butoane de acțiune pe mobil", + "priority": 11, + "acceptanceCriteria": [ + "Componentă src/shared/components/mobile/MobileActionBar.vue creată", + "Props: actions (array of {label, icon, severity, handler, disabled})", + "Layout: butoane full-width sau side-by-side (2 butoane)", + "Position: fixed bottom, above MobileBottomNav", + "Animație: slide-up la mount", + "npm run build passes" + ], + "passes": true, + "notes": "Completed in iteration 11" + }, + { + "id": "US-209", + "title": "Butoane Context-Aware în Editare Bon", + "description": "Ca utilizator vreau butoanele din editare bon să se schimbe în funcție de starea bonului", + "priority": 12, + "acceptanceCriteria": [ + "ReceiptCreateUnifiedView detectează starea bonului (draft/pending/approved/rejected)", + "Draft: Salvează | Submit pentru Aprobare | Șterge", + "Pending: Salvează | Aprobă | Respinge (dacă are permisiuni)", + "Approved: doar vizualizare (butoane disabled sau ascunse)", + "Rejected: Salvează (re-edit) | Re-submit", + "Butoane în MobileActionBar fix jos pe mobil", + "npm run build passes" + ], + "passes": true, + "notes": "Completed in iteration 12" + }, + { + "id": "US-211", + "title": "Integrare MobileActionBar în ReceiptCreateUnifiedView", + "description": "Ca utilizator vreau butoanele de acțiune pentru bon să fie în action bar pe mobil", + "priority": 13, + "acceptanceCriteria": [ + "ReceiptCreateUnifiedView folosește MobileActionBar pe mobil", + "Desktop păstrează butoanele în form", + "Buton Înapoi în MobileTopBar (deja există din US-105)", + "Action bar dispare când se deschide BottomSheet sau alte overlay-uri", + "npm run build passes" + ], + "passes": true, + "notes": "Completed in iteration 13" + }, + { + "id": "US-214", + "title": "Actualizare Documentație MOBILE_PATTERNS.md", + "description": "Ca developer viitor vreau documentația actualizată cu noile componente și pattern-uri", + "priority": 14, + "acceptanceCriteria": [ + "Secțiune nouă: MobileDrawerMenu (usage, props)", + "Secțiune nouă: MobileActionBar (usage, props)", + "Secțiune actualizată: Navigation patterns (footer → settings hub)", + "Diagrame ASCII actualizate cu noile rute", + "npm run build passes (doar pentru validare că nu s-a stricat nimic)" + ], + "passes": true, + "notes": "Completed in iteration 14" + } + ] +} diff --git a/scripts/ralph/prd.json b/scripts/ralph/prd.json index 9ca0c02..a9518ce 100644 --- a/scripts/ralph/prd.json +++ b/scripts/ralph/prd.json @@ -1,7 +1,7 @@ { - "projectName": "mobile-navigation-improvements", + "projectName": "mobile-fixes-phase3", "branchName": "ralph/unified-mobile-md", - "description": "Extinderea navigării mobile cu Dashboard split, Settings Hub, MobileDrawerMenu și butoane context-aware", + "description": "Corectări navigare mobilă: footer restructurat, tab-uri Clienți/Furnizori, FAB pe Bonuri, hamburger grupat", "cssRules": { "documentation": [ "docs/ONBOARDING_CSS.md", @@ -14,10 +14,9 @@ "Verifică CSS_PATTERNS.md înainte de a scrie CSS nou", "Testează în AMBELE teme (light + dark mode)", "NICIODATĂ :deep() în componente (PrimeVue → vendor/)", - "NICIODATĂ duplicate CSS (write once, use everywhere)", "Mobile: toate paginile folosesc MobileTopBar + MobileBottomNav", "Mobile: filtrele se pun în BottomSheet, NU inline", - "Mobile: selecția afișează acțiuni în footer, NU în header" + "Mobile: tab-uri pentru switch Clienți/Furnizori" ], "mobileLayoutTokens": { "topBarHeight": "56px", @@ -29,225 +28,189 @@ }, "userStories": [ { - "id": "US-201", - "title": "MobileBottomNav activ pe Dashboard", - "description": "Ca utilizator mobil vreau să văd footer navigation și pe Dashboard pentru navigare ușoară", + "id": "US-307", + "title": "Restructurare Footer Nav (4 butoane noi)", + "description": "Ca utilizator mobil vreau footer navigation cu: Dashboard | Bonuri | Facturi | Setări", "priority": 1, "acceptanceCriteria": [ - "DashboardView.vue include MobileBottomNav component", - "Link-ul 'Rapoarte' din nav este activ/highlighted pe Dashboard", - "MobileTopBar adăugat cu title 'Dashboard'", - "Verify in browser: navigarea funcționează din Dashboard", + "MobileBottomNav cu 4 butoane: Dashboard, Bonuri, Facturi, Setări", + "Dashboard: icon pi-home, route /dashboard", + "Bonuri: icon pi-receipt, route /data-entry", + "Facturi: icon pi-file-edit, route /reports/invoices", + "Setări: icon pi-cog, route /settings", + "Active state corect pe fiecare pagină", + "Ștergere link Upload din footer (mutat în FAB)", "npm run build passes" ], "passes": true, "notes": "Completed in iteration 1" }, { - "id": "US-202", - "title": "MobileDrawerMenu Material Design cu Profil", - "description": "Ca utilizator mobil vreau meniul hamburger să aibă design Material cu secțiune profil", + "id": "US-308", + "title": "Actualizare Hamburger Menu - Grupat pe Categorii", + "description": "Ca utilizator mobil vreau meniul hamburger organizat pe categorii clare", "priority": 2, "acceptanceCriteria": [ - "Componentă src/shared/components/mobile/MobileDrawerMenu.vue creată", - "Secțiuni: Header cu logo, Navigare principală, Profil utilizator (nume + logout)", - "Link-uri navigare: Dashboard, Bonuri, Facturi, Balanță, Trezorerie, Setări", - "Active state pe link-ul curent (bazat pe route)", - "Animație slide-in de la stânga", - "Close pe tap outside sau pe link click", - "Dark mode support", + "MobileDrawerMenu.vue restructurat cu secțiuni vizuale", + "Secțiune PRINCIPALE: Dashboard → /dashboard, Bonuri → /data-entry", + "Secțiune RAPOARTE: Facturi → /reports/invoices, Balanță → /reports/trial-balance, Casa și Banca → /reports/bank-cash", + "Secțiune ANALIZE: Scadențe → /reports/maturity-analysis, Facturi Detaliate → /reports/detailed-invoices", + "Secțiune ADMINISTRARE: Setări → /settings", + "Separatori vizuali între secțiuni", + "Header cu logo, Footer cu profil utilizator și logout", "npm run build passes" ], - "passes": true, - "notes": "Completed in iteration 2" + "passes": false, + "notes": "" }, { - "id": "US-208", - "title": "Actualizare Router cu noile rute", - "description": "Ca developer vreau router-ul configurat pentru noile pagini", + "id": "US-304", + "title": "Tab-uri Clienți/Furnizori în Facturi", + "description": "Ca utilizator vreau pagina Facturi să aibă tab-uri pentru Clienți și Furnizori", "priority": 3, "acceptanceCriteria": [ - "Rută /reports/maturity-analysis → MaturityAnalysisView (lazy loaded)", - "Rută /reports/detailed-invoices → DetailedInvoicesView (lazy loaded)", - "Rută /settings → SettingsHubView (lazy loaded)", - "Redirect /data-entry/ocr-metrics accesibil din Settings Hub", + "InvoicesView.vue modificat cu tab-uri: Clienți | Furnizori", + "Tab-uri sub MobileTopBar (design Material, full-width)", + "Switch între tab-uri păstrează filtrele active", + "Default: primul tab activ (Clienți)", + "URL query param pentru tab activ (?tab=suppliers)", + "MobileTopBar cu title Facturi", + "MobileBottomNav activ (Facturi highlighted)", "npm run build passes" ], - "passes": true, - "notes": "Completed in iteration 3" + "passes": false, + "notes": "" }, { - "id": "US-206", - "title": "Creare Pagină Hub Setări", - "description": "Ca utilizator vreau o pagină centrală cu toate opțiunile de setări", + "id": "US-305", + "title": "Tab-uri Clienți/Furnizori în Scadențe", + "description": "Ca utilizator vreau pagina Scadențe să aibă tab-uri pentru Clienți și Furnizori", "priority": 4, "acceptanceCriteria": [ - "View nou: src/modules/reports/views/SettingsHubView.vue", - "Route: /settings", - "Carduri pentru: OCR Setări, Cache Stats, Loguri Server, Telegram (dacă admin)", - "MobileTopBar cu title 'Setări'", - "MobileBottomNav cu Setări activ", - "Click pe card navighează la pagina respectivă", - "Design responsive (grid 2x2 pe mobil, 4 columns pe desktop)", + "MaturityAnalysisView.vue modificat cu tab-uri: Clienți | Furnizori", + "Tab-uri sub MobileTopBar (design Material, full-width)", + "Switch între tab-uri păstrează filtrele active", + "Default: primul tab activ (Clienți)", + "URL query param pentru tab activ (?tab=suppliers)", + "MobileTopBar cu title Scadențe și buton ← Înapoi", + "MobileBottomNav activ", "npm run build passes" ], - "passes": true, - "notes": "Completed in iteration 4" + "passes": false, + "notes": "" }, { - "id": "US-204", - "title": "Creare Pagină Analiză Scadențe", - "description": "Ca utilizator vreau o pagină dedicată pentru analiza scadențelor clienți/furnizori", + "id": "US-301", + "title": "Buton Înapoi în Creare/Editare/Vizualizare Bon", + "description": "Ca utilizator mobil vreau buton ← Înapoi în MobileTopBar pe pagina de bon", "priority": 5, "acceptanceCriteria": [ - "View nou: src/modules/reports/views/MaturityAnalysisView.vue", - "Route: /reports/maturity-analysis", - "Conține componenta MaturityAndDetailsCard (partea de analiză scadențe)", - "MobileTopBar cu title 'Analiză Scadențe' și buton ← Înapoi la Dashboard", - "MobileBottomNav activ", + "ReceiptCreateUnifiedView.vue are MobileTopBar cu showBack=true", + "Click pe ← navighează la /data-entry (lista bonuri)", + "Funcționează în toate modurile: create, edit, view", + "Verify in browser: butonul apare și funcționează", "npm run build passes" ], - "passes": true, - "notes": "Completed in iteration 5" + "passes": false, + "notes": "" }, { - "id": "US-205", - "title": "Creare Pagină Facturi Detaliate", - "description": "Ca utilizator vreau o pagină dedicată pentru tabelul facturilor detaliate", + "id": "US-302", + "title": "Footer Nav pe toate Paginile de Setări", + "description": "Ca utilizator mobil vreau MobileBottomNav pe toate paginile din secțiunea Setări", "priority": 6, "acceptanceCriteria": [ - "View nou: src/modules/reports/views/DetailedInvoicesView.vue", - "Route: /reports/detailed-invoices", - "Conține componenta/partea de tabel detaliat din MaturityAndDetailsCard", - "MobileTopBar cu title 'Facturi Detaliate' și buton ← Înapoi", - "MobileBottomNav activ", - "Filtre în BottomSheet pe mobil", + "OCRMetricsView.vue include MobileBottomNav cu Setări activ", + "CacheStatsView.vue include MobileBottomNav cu Setări activ", + "ServerLogsView.vue include MobileBottomNav cu Setări activ", + "TelegramAdminView.vue include MobileBottomNav cu Setări activ (dacă există)", + "SettingsHubView.vue include MobileBottomNav cu Setări activ", "npm run build passes" ], - "passes": true, - "notes": "Completed in iteration 6" + "passes": false, + "notes": "" }, { - "id": "US-203", - "title": "Dashboard KPIs Only View", - "description": "Ca utilizator mobil vreau Dashboard-ul principal să arate doar KPI cards pentru acces rapid", + "id": "US-303", + "title": "FAB pe Pagina Bonuri (Mutare Upload)", + "description": "Ca utilizator mobil vreau funcția Upload să fie în butonul FAB (+) pe pagina Bonuri", "priority": 7, "acceptanceCriteria": [ - "DashboardView.vue pe mobil afișează DOAR: SwipeableCards cu KPIs", - "Adăugare 2 carduri quick-link: 'Analiză Scadențe →' și 'Facturi Detaliate →'", - "Click pe quick-link navighează la pagina dedicată", - "Desktop rămâne neschimbat (toate secțiunile)", + "ReceiptsListView.vue are buton FAB (+) în colțul dreapta-jos", + "Click pe FAB deschide meniu popup: Bon Nou | Upload Bulk", + "FAB poziționat deasupra MobileBottomNav (bottom: 72px)", + "Bon Nou navighează la /data-entry/receipts/new", + "Upload Bulk navighează la /data-entry/bulk-upload", + "FAB vizibil doar pe mobil (isMobile)", "npm run build passes" ], - "passes": true, - "notes": "Completed in iteration 7" + "passes": false, + "notes": "" }, { - "id": "US-212", - "title": "Quick Links în Dashboard Mobile", - "description": "Ca utilizator vreau carduri clickabile în Dashboard pentru a ajunge la Scadențe și Facturi", + "id": "US-306", + "title": "Restaurare Butoane Export și Filtrare pe Rapoarte", + "description": "Ca utilizator mobil vreau butoane de export și filtrare pe toate rapoartele", "priority": 8, "acceptanceCriteria": [ - "După SwipeableCards, 2 carduri: 'Analiză Scadențe' și 'Facturi Detaliate'", - "Design: icon + titlu + săgeată dreaptă (→)", - "Click navighează la pagina respectivă", - "Doar pe mobil (desktop are totul în aceeași pagină)", + "InvoicesView.vue: buton Export (pi-download) și Filtrare (pi-filter) în MobileTopBar actions", + "TrialBalanceView.vue: buton Export și Filtrare în MobileTopBar actions", + "BankCashRegisterView.vue: buton Export și Filtrare în MobileTopBar actions", + "ReceiptsListView.vue: buton Export și Filtrare în MobileTopBar actions", + "MaturityAnalysisView.vue: buton Export și Filtrare în MobileTopBar actions", + "Click pe Filtrare deschide BottomSheet cu filtrele paginii", "npm run build passes" ], - "passes": true, - "notes": "Completed in iteration 8" + "passes": false, + "notes": "" }, { - "id": "US-207", - "title": "Actualizare MobileBottomNav cu link Setări", - "description": "Ca utilizator vreau butonul Setări din footer să ducă la Hub Setări", + "id": "US-309", + "title": "Cleanup Dashboard Mobile", + "description": "Ca utilizator mobil vreau Dashboard-ul să afișeze doar KPIs fără quick-links", "priority": 9, "acceptanceCriteria": [ - "MobileBottomNav: link Setări → /settings (nu /data-entry/ocr-metrics)", - "Icon: pi-cog", - "Active state când pe /settings sau /settings/* sau pagini admin", - "Actualizare în toate paginile care folosesc MobileBottomNav", + "DashboardView.vue pe mobil: ștergere quick-link cards dacă există", + "Doar SwipeableCards cu KPIs pe mobil", + "Desktop rămâne neschimbat", + "MobileTopBar cu title Dashboard", + "MobileBottomNav cu Dashboard activ", "npm run build passes" ], - "passes": true, - "notes": "Completed in iteration 9" + "passes": false, + "notes": "" }, { - "id": "US-213", - "title": "Actualizare Hamburger Menu în toate paginile", - "description": "Ca utilizator vreau hamburger menu-ul să funcționeze uniform în toată aplicația", + "id": "US-310", + "title": "Actualizare Router cu Modificările", + "description": "Ca developer vreau router-ul actualizat pentru a funcționa cu noile pagini", "priority": 10, "acceptanceCriteria": [ - "Toate paginile cu MobileTopBar: click pe ☰ deschide MobileDrawerMenu", - "MobileDrawerMenu înlocuiește vechiul Sidebar pe mobil", - "Desktop păstrează navigarea existentă", + "Rută /reports/invoices → InvoicesView funcțională", + "Rută /reports/maturity-analysis → MaturityAnalysisView funcțională", + "Rutele existente păstrate: /reports/trial-balance, /reports/bank-cash, /reports/detailed-invoices", + "Cleanup rute nefolosite dacă există", + "Toate rutele lazy loaded", "npm run build passes" ], - "passes": true, - "notes": "Completed in iteration 10" + "passes": false, + "notes": "" }, { - "id": "US-210", - "title": "Creare MobileActionBar Component", - "description": "Ca developer vreau componentă reutilizabilă pentru butoane de acțiune pe mobil", + "id": "US-311", + "title": "Actualizare Documentație MOBILE_PATTERNS.md", + "description": "Ca developer viitor vreau documentația actualizată cu modificările din Phase 3", "priority": 11, "acceptanceCriteria": [ - "Componentă src/shared/components/mobile/MobileActionBar.vue creată", - "Props: actions (array of {label, icon, severity, handler, disabled})", - "Layout: butoane full-width sau side-by-side (2 butoane)", - "Position: fixed bottom, above MobileBottomNav", - "Animație: slide-up la mount", + "Secțiune actualizată: Footer Navigation (Dashboard, Bonuri, Facturi, Setări)", + "Secțiune nouă: FAB Pattern pentru acțiuni contextuale", + "Secțiune nouă: Tab Pattern pentru switch Clienți/Furnizori", + "Secțiune actualizată: Hamburger Menu grupat pe categorii", + "Diagrame ASCII actualizate cu noua structură navigare", "npm run build passes" ], - "passes": true, - "notes": "Completed in iteration 11" - }, - { - "id": "US-209", - "title": "Butoane Context-Aware în Editare Bon", - "description": "Ca utilizator vreau butoanele din editare bon să se schimbe în funcție de starea bonului", - "priority": 12, - "acceptanceCriteria": [ - "ReceiptCreateUnifiedView detectează starea bonului (draft/pending/approved/rejected)", - "Draft: Salvează | Submit pentru Aprobare | Șterge", - "Pending: Salvează | Aprobă | Respinge (dacă are permisiuni)", - "Approved: doar vizualizare (butoane disabled sau ascunse)", - "Rejected: Salvează (re-edit) | Re-submit", - "Butoane în MobileActionBar fix jos pe mobil", - "npm run build passes" - ], - "passes": true, - "notes": "Completed in iteration 12" - }, - { - "id": "US-211", - "title": "Integrare MobileActionBar în ReceiptCreateUnifiedView", - "description": "Ca utilizator vreau butoanele de acțiune pentru bon să fie în action bar pe mobil", - "priority": 13, - "acceptanceCriteria": [ - "ReceiptCreateUnifiedView folosește MobileActionBar pe mobil", - "Desktop păstrează butoanele în form", - "Buton Înapoi în MobileTopBar (deja există din US-105)", - "Action bar dispare când se deschide BottomSheet sau alte overlay-uri", - "npm run build passes" - ], - "passes": true, - "notes": "Completed in iteration 13" - }, - { - "id": "US-214", - "title": "Actualizare Documentație MOBILE_PATTERNS.md", - "description": "Ca developer viitor vreau documentația actualizată cu noile componente și pattern-uri", - "priority": 14, - "acceptanceCriteria": [ - "Secțiune nouă: MobileDrawerMenu (usage, props)", - "Secțiune nouă: MobileActionBar (usage, props)", - "Secțiune actualizată: Navigation patterns (footer → settings hub)", - "Diagrame ASCII actualizate cu noile rute", - "npm run build passes (doar pentru validare că nu s-a stricat nimic)" - ], - "passes": true, - "notes": "Completed in iteration 14" + "passes": false, + "notes": "" } ] } diff --git a/scripts/ralph/progress.txt b/scripts/ralph/progress.txt index 6a6ddaa..c375d0d 100644 --- a/scripts/ralph/progress.txt +++ b/scripts/ralph/progress.txt @@ -1,90 +1,17 @@ -# Ralph Progress Log - Phase 2 -Started: Mon Jan 12 12:03:01 PM UTC 2026 -Project: mobile-navigation-improvements +# Ralph Progress Log - Phase 3 +Started: Mon Jan 12 01:35:36 PM UTC 2026 +Project: mobile-fixes-phase3 Branch: ralph/unified-mobile-md (continuing) -User Stories: 14 (US-201 to US-214) +User Stories: 11 (US-301 to US-311) --- -[2026-01-12 12:03:07] Starting Ralph for project: mobile-navigation-improvements -[2026-01-12 12:03:07] Max iterations: 100 -[2026-01-12 12:03:07] === Iteration 1/100 === -[2026-01-12 12:03:07] Working on story: US-201 -[2026-01-12 12:03:07] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_1_US-201.log) -[2026-01-12 12:05:02] SUCCESS: Story US-201 passed! -[2026-01-12 12:05:02] Changes committed -[2026-01-12 12:05:02] Progress: 1/14 stories completed -[2026-01-12 12:05:04] === Iteration 2/100 === -[2026-01-12 12:05:04] Working on story: US-202 -[2026-01-12 12:05:04] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_2_US-202.log) -[2026-01-12 12:07:29] SUCCESS: Story US-202 passed! -[2026-01-12 12:07:29] Changes committed -[2026-01-12 12:07:29] Progress: 2/14 stories completed -[2026-01-12 12:07:31] === Iteration 3/100 === -[2026-01-12 12:07:31] Working on story: US-208 -[2026-01-12 12:07:31] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_3_US-208.log) -[2026-01-12 12:09:57] SUCCESS: Story US-208 passed! -[2026-01-12 12:09:57] Changes committed -[2026-01-12 12:09:57] Progress: 3/14 stories completed -[2026-01-12 12:09:59] === Iteration 4/100 === -[2026-01-12 12:09:59] Working on story: US-206 -[2026-01-12 12:09:59] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_4_US-206.log) -[2026-01-12 12:12:24] SUCCESS: Story US-206 passed! -[2026-01-12 12:12:24] Changes committed -[2026-01-12 12:12:24] Progress: 4/14 stories completed -[2026-01-12 12:12:26] === Iteration 5/100 === -[2026-01-12 12:12:26] Working on story: US-204 -[2026-01-12 12:12:26] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_5_US-204.log) -[2026-01-12 12:14:24] SUCCESS: Story US-204 passed! -[2026-01-12 12:14:24] Changes committed -[2026-01-12 12:14:24] Progress: 5/14 stories completed -[2026-01-12 12:14:26] === Iteration 6/100 === -[2026-01-12 12:14:26] Working on story: US-205 -[2026-01-12 12:14:26] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_6_US-205.log) -[2026-01-12 12:21:23] SUCCESS: Story US-205 passed! -[2026-01-12 12:21:24] Changes committed -[2026-01-12 12:21:24] Progress: 6/14 stories completed -[2026-01-12 12:21:26] === Iteration 7/100 === -[2026-01-12 12:21:26] Working on story: US-203 -[2026-01-12 12:21:26] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_7_US-203.log) -[2026-01-12 12:23:00] SUCCESS: Story US-203 passed! -[2026-01-12 12:23:00] Changes committed -[2026-01-12 12:23:00] Progress: 7/14 stories completed -[2026-01-12 12:23:02] === Iteration 8/100 === -[2026-01-12 12:23:02] Working on story: US-212 -[2026-01-12 12:23:02] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_8_US-212.log) -[2026-01-12 12:23:50] SUCCESS: Story US-212 passed! -[2026-01-12 12:23:50] Changes committed -[2026-01-12 12:23:50] Progress: 8/14 stories completed -[2026-01-12 12:23:52] === Iteration 9/100 === -[2026-01-12 12:23:52] Working on story: US-207 -[2026-01-12 12:23:52] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_9_US-207.log) -[2026-01-12 12:28:03] SUCCESS: Story US-207 passed! -[2026-01-12 12:28:03] Changes committed -[2026-01-12 12:28:03] Progress: 9/14 stories completed -[2026-01-12 12:28:05] === Iteration 10/100 === -[2026-01-12 12:28:05] Working on story: US-213 -[2026-01-12 12:28:05] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_10_US-213.log) -[2026-01-12 12:36:45] SUCCESS: Story US-213 passed! -[2026-01-12 12:36:45] Changes committed -[2026-01-12 12:36:45] Progress: 10/14 stories completed -[2026-01-12 12:36:47] === Iteration 11/100 === -[2026-01-12 12:36:47] Working on story: US-210 -[2026-01-12 12:36:47] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_11_US-210.log) -[2026-01-12 12:38:10] SUCCESS: Story US-210 passed! -[2026-01-12 12:38:10] Changes committed -[2026-01-12 12:38:10] Progress: 11/14 stories completed -[2026-01-12 12:38:12] === Iteration 12/100 === -[2026-01-12 12:38:12] Working on story: US-209 -[2026-01-12 12:38:12] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_12_US-209.log) -[2026-01-12 12:40:29] SUCCESS: Story US-209 passed! -[2026-01-12 12:40:29] Changes committed -[2026-01-12 12:40:29] Progress: 12/14 stories completed -[2026-01-12 12:40:31] === Iteration 13/100 === -[2026-01-12 12:40:31] Working on story: US-211 -[2026-01-12 12:40:31] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_13_US-211.log) -[2026-01-12 12:42:01] SUCCESS: Story US-211 passed! -[2026-01-12 12:42:01] Changes committed -[2026-01-12 12:42:01] Progress: 13/14 stories completed -[2026-01-12 12:42:03] === Iteration 14/100 === -[2026-01-12 12:42:03] Working on story: US-214 -[2026-01-12 12:42:03] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_14_US-214.log) -[2026-01-12 12:45:42] SUCCESS: Story US-214 passed! +[2026-01-12 13:35:41] Starting Ralph for project: mobile-fixes-phase3 +[2026-01-12 13:35:41] Max iterations: 100 +[2026-01-12 13:35:41] === Iteration 1/100 === +[2026-01-12 13:35:41] Working on story: US-307 +[2026-01-12 13:35:41] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_1_US-307.log) +[2026-01-12 13:35:46] Starting Ralph for project: mobile-fixes-phase3 +[2026-01-12 13:35:46] Max iterations: 100 +[2026-01-12 13:35:46] === Iteration 1/100 === +[2026-01-12 13:35:46] Working on story: US-307 +[2026-01-12 13:35:46] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_1_US-307.log) +[2026-01-12 13:38:58] SUCCESS: Story US-307 passed! diff --git a/src/modules/data-entry/views/receipts/ReceiptsListView.vue b/src/modules/data-entry/views/receipts/ReceiptsListView.vue index 1d7d844..4fdf38e 100644 --- a/src/modules/data-entry/views/receipts/ReceiptsListView.vue +++ b/src/modules/data-entry/views/receipts/ReceiptsListView.vue @@ -558,11 +558,8 @@ - + + @@ -1119,20 +1116,8 @@ const handleTopBarAction = (action) => { } } -// US-103: Bottom nav items for MobileBottomNav component -const mobileBottomNavItems = computed(() => [ - { to: '/data-entry', icon: 'pi pi-receipt', label: 'Bonuri', active: true }, - { icon: 'pi pi-cloud-upload', label: 'Upload' }, // No 'to' - handled via item-click - { to: '/reports/dashboard', icon: 'pi pi-chart-bar', label: 'Rapoarte' }, - { to: '/settings', icon: 'pi pi-cog', label: 'Setări' } -]) - -// US-103: Handle bottom nav clicks for items without routes -const handleBottomNavClick = (item) => { - if (item.label === 'Upload') { - openBulkFileInput() - } -} +// US-307: Removed custom mobileBottomNavItems - using MobileBottomNav defaults +// Upload functionality moved to FAB (US-303) // US-103/US-113: Selection footer actions for MobileSelectionFooter component // Bonuri batch actions: Delete + Export diff --git a/src/modules/reports/views/BankCashRegisterView.vue b/src/modules/reports/views/BankCashRegisterView.vue index 25129c1..fb40277 100644 --- a/src/modules/reports/views/BankCashRegisterView.vue +++ b/src/modules/reports/views/BankCashRegisterView.vue @@ -381,11 +381,8 @@ - - + + @@ -459,12 +456,7 @@ const handleTopBarAction = (action) => { }; // US-109: Bottom nav items for MobileBottomNav component -const mobileBottomNavItems = computed(() => [ - { to: "/data-entry", icon: "pi pi-receipt", label: "Bonuri" }, - { to: "/reports/bank-cash-register", icon: "pi pi-wallet", label: "Trezorerie", active: true }, - { to: "/reports/dashboard", icon: "pi pi-chart-bar", label: "Rapoarte" }, - { to: "/settings", icon: "pi pi-cog", label: "Setări" } -]); +// US-307: Removed custom mobileBottomNavItems - using MobileBottomNav defaults // Handle window resize const handleResize = () => { diff --git a/src/modules/reports/views/CacheStatsView.vue b/src/modules/reports/views/CacheStatsView.vue index 1b50475..e96215e 100644 --- a/src/modules/reports/views/CacheStatsView.vue +++ b/src/modules/reports/views/CacheStatsView.vue @@ -197,8 +197,8 @@ - - + + @@ -263,18 +263,7 @@ const handleTopBarAction = (action) => { } }; -// US-111: Bottom nav items for MobileBottomNav component -const mobileBottomNavItems = computed(() => [ - { to: "/data-entry", icon: "pi pi-receipt", label: "Bonuri" }, - { - to: "/reports/cache-stats", - icon: "pi pi-database", - label: "Cache", - active: true, - }, - { to: "/reports/dashboard", icon: "pi pi-chart-bar", label: "Rapoarte" }, - { to: "/settings", icon: "pi pi-cog", label: "Setări" }, -]); +// US-307: Removed custom mobileBottomNavItems - using MobileBottomNav defaults // US-111: Handle window resize const handleResize = () => { diff --git a/src/modules/reports/views/DashboardView.vue b/src/modules/reports/views/DashboardView.vue index 36ac6d1..4774d9e 100644 --- a/src/modules/reports/views/DashboardView.vue +++ b/src/modules/reports/views/DashboardView.vue @@ -179,8 +179,8 @@ - - + +