diff --git a/scripts/ralph/prd.json b/scripts/ralph/prd.json index 5af1e8b..3d69e0b 100644 --- a/scripts/ralph/prd.json +++ b/scripts/ralph/prd.json @@ -1,7 +1,7 @@ { "projectName": "ui-fixes-phase6", "branchName": "ralph/ui-fixes-phase6", - "description": "UI/UX Fixes Phase 6 - Menu Consistency & Mobile Improvements: Adaugă secțiunea Analize pe desktop, implementează tab-uri Clienți/Furnizori în Scadențe, creează pagina Facturi Detaliate, îmbunătățește meniul hamburger mobil, fix FAB SpeedDial, adaugă buton Resetează pe toate paginile cu filtre.", + "description": "UI/UX Fixes Phase 6 - Menu Consistency & Mobile Improvements + Phase 5 Regressions Fix", "cssRules": { "documentation": [ "docs/ONBOARDING_CSS.md", @@ -41,162 +41,186 @@ { "id": "US-601", "title": "Adăugare Secțiune Analize în Sidebar Desktop", - "description": "Ca utilizator desktop, vreau să văd secțiunea Analize în sidebar-ul din stânga pentru că în prezent aceasta există doar pe mobil și vreau acces la Scadențe și Facturi Detaliate", + "description": "Ca utilizator desktop, vreau să văd secțiunea Analize în sidebar-ul din stânga", "priority": 1, "acceptanceCriteria": [ - "Sidebar-ul desktop (AppSidebar.vue) include secțiunea Analize cu aceleași link-uri ca pe mobil", - "Link-uri: Scadențe (/reports/maturity-analysis) și Facturi Detaliate (/reports/detailed-invoices)", - "Secțiunea apare după Rapoarte sau între Rapoarte și Introduceri Date", - "npm run typecheck passes", - "Verify in browser: Desktop sidebar shows Analize section with working links" + "Completed" + ], + "passes": true, + "notes": "Completed in Phase 6" + }, + { + "id": "US-602", + "title": "Tab-uri Clienți/Furnizori în Pagina Scadențe", + "description": "Ca utilizator, vreau să pot comuta între Clienți și Furnizori folosind tab-uri", + "priority": 2, + "acceptanceCriteria": [ + "Completed" + ], + "passes": true, + "notes": "Completed in Phase 6" + }, + { + "id": "US-603", + "title": "Implementare Pagină Facturi Detaliate", + "description": "Ca utilizator, vreau să văd facturi detaliate când accesez Analize > Facturi Detaliate", + "priority": 3, + "acceptanceCriteria": [ + "Completed" + ], + "passes": true, + "notes": "Completed in Phase 6" + }, + { + "id": "US-604", + "title": "Toggle Temă cu 3 Stări în Meniul Mobil", + "description": "Ca utilizator mobil, vreau selectorul de temă să fie un singur buton toggle cu 3 stări", + "priority": 4, + "acceptanceCriteria": [ + "Completed" + ], + "passes": true, + "notes": "Completed in Phase 6" + }, + { + "id": "US-605", + "title": "Companie/Perioadă Colapsabile în Meniul Mobil", + "description": "Ca utilizator mobil, vreau secțiunile Companie și Perioadă din meniu să fie colapsabile", + "priority": 5, + "acceptanceCriteria": [ + "Completed" + ], + "passes": true, + "notes": "Completed in Phase 6 - NOTE: Reverted in US-703" + }, + { + "id": "US-606", + "title": "Layout Scrollabil Unificat în Meniul Mobil", + "description": "Ca utilizator mobil, vreau întregul meniu hamburger să fie într-o singură zonă scrollabilă", + "priority": 6, + "acceptanceCriteria": [ + "Completed" + ], + "passes": true, + "notes": "Completed in Phase 6" + }, + { + "id": "US-607", + "title": "Secțiune Utilizator Compactă în Meniul Mobil", + "description": "Ca utilizator mobil, vreau secțiunea de utilizator să fie mai compactă", + "priority": 7, + "acceptanceCriteria": [ + "Completed" + ], + "passes": true, + "notes": "Completed in Phase 6" + }, + { + "id": "US-608", + "title": "Fix Buton FAB SpeedDial în Lista Bonuri", + "description": "Ca utilizator mobil, vreau butonul + din lista bonuri să afișeze un meniu SpeedDial", + "priority": 8, + "acceptanceCriteria": [ + "Completed" + ], + "passes": true, + "notes": "Completed in Phase 6 - BUT REGRESSION: SpeedDial not imported!" + }, + { + "id": "US-609", + "title": "Buton Resetează pe Toate Paginile cu Filtre Mobil", + "description": "Ca utilizator mobil, vreau butonul Resetează să apară pe toate paginile care au Filtrează", + "priority": 9, + "acceptanceCriteria": [ + "Completed" + ], + "passes": true, + "notes": "Completed in Phase 6" + }, + { + "id": "US-610", + "title": "Eliminare Spațiu Gol Deasupra Tabelelor", + "description": "Ca utilizator, vreau să nu existe spațiu gol excesiv între filtre și tabele", + "priority": 10, + "acceptanceCriteria": [ + "Completed" + ], + "passes": true, + "notes": "Completed in Phase 6" + }, + { + "id": "US-701", + "title": "Reparare SpeedDial FAB pe Lista Bonuri", + "description": "Ca utilizator pe mobil, vreau să văd butonul + în dreapta jos și să pot crea bonuri noi, pentru că este metoda principală de adăugare bonuri pe mobil", + "priority": 11, + "acceptanceCriteria": [ + "SpeedDial este importat corect din 'primevue/speeddial' în ReceiptsListView.vue", + "Butonul + apare în dreapta jos pe mobil (când nu este în selection mode)", + "Click pe + deschide opțiunile: Bon Nou Manual, Scanare OCR, Upload în Masă", + "npm run build passes fără warnings legate de SpeedDial", + "Verify in browser mobile viewport: FAB vizibil în dreapta jos, click deschide 3 opțiuni" ], "passes": true, "notes": "Completed in iteration 1" }, { - "id": "US-602", - "title": "Tab-uri Clienți/Furnizori în Pagina Scadențe", - "description": "Ca utilizator, vreau să pot comuta între Clienți și Furnizori folosind tab-uri pentru că în prezent ambele sunt afișate într-o singură listă lungă care este greu de navigat", - "priority": 2, + "id": "US-702", + "title": "Verificare Meniu Acțiuni Per Bon", + "description": "Ca utilizator, vreau să pot accesa meniul de acțiuni (...) pentru fiecare bon, pentru că trebuie să pot edita, șterge, valida bonurile individual", + "priority": 12, "acceptanceCriteria": [ - "Pagina Analiză Scadențe (MaturityAnalysisView.vue) are 2 tab-uri: Clienți și Furnizori", - "Tab-ul Clienți afișează lista De încasat cu totalul", - "Tab-ul Furnizori afișează lista De plătit cu totalul", - "Tab-urile funcționează pe desktop și mobil", - "Starea tab-ului selectat este păstrată la navigare back", - "npm run typecheck passes", - "Verify in browser: Tabs switch between Clienți and Furnizori correctly" + "Butonul ... pe fiecare bon deschide meniul popup cu opțiuni", + "Meniul conține opțiunile corecte în funcție de status (Edit, View, Delete, Approve)", + "Meniul se poziționează corect pe mobil și desktop (nu iese din viewport)", + "npm run build passes" ], - "passes": true, - "notes": "Completed in iteration 2" + "passes": false, + "notes": "Verifică menuItems computed property și toggleMenu funcția (linia 1453)" }, { - "id": "US-603", - "title": "Implementare Pagină Facturi Detaliate", - "description": "Ca utilizator, vreau să văd facturi detaliate când accesez Analize > Facturi Detaliate pentru că în prezent pagina redirecționează la Dashboard și nu afișează nimic util", - "priority": 3, + "id": "US-703", + "title": "Navigare Hamburger pe Paginile Analize", + "description": "Ca utilizator pe mobil, vreau să văd meniul hamburger pe paginile Analize (nu săgeata înapoi), pentru că trebuie să pot accesa firma, perioada și navigarea din orice pagină", + "priority": 13, "acceptanceCriteria": [ - "Creează DetailedInvoicesView.vue în src/modules/reports/views/", - "Pagina are 2 tab-uri: Clienți și Furnizori", - "Fiecare tab afișează un tabel cu facturile detaliate (similar cu pagina Facturi dar filtrate)", - "Ruta /reports/detailed-invoices funcționează și nu mai redirecționează", - "Adaugă ruta în router (reports.routes.js)", - "npm run typecheck passes", - "Verify in browser: Page shows detailed invoices table with Clienți/Furnizori tabs" + "MaturityAnalysisView.vue: MobileTopBar folosește :show-menu='true' și @menu-click='showDrawer = true'", + "DetailedInvoicesView.vue: MobileTopBar folosește :show-menu='true' și @menu-click='showDrawer = true'", + "Ambele view-uri au MobileDrawerMenu component importat și configurat corect", + "Click pe hamburger deschide MobileDrawerMenu cu firma, perioada, tema", + "Pattern identic cu InvoicesView.vue (liniile 4-11, 33-42)", + "npm run build passes" ], - "passes": true, - "notes": "Completed in iteration 3" + "passes": false, + "notes": "REVERT NECESAR: S-a schimbat greșit de la show-menu la show-back. Revino la pattern InvoicesView." }, { - "id": "US-604", - "title": "Toggle Temă cu 3 Stări în Meniul Mobil", - "description": "Ca utilizator mobil, vreau selectorul de temă să fie un singur buton toggle cu 3 stări pentru că cele 3 butoane separate ocupă prea mult spațiu în meniu", - "priority": 4, + "id": "US-704", + "title": "Mărire Spațiu Tabel Scadențe", + "description": "Ca utilizator, vreau să văd mai multe rânduri în tabelul de scadențe fără să scrollez, pentru că acum încap doar 3-4 rânduri", + "priority": 14, "acceptanceCriteria": [ - "Înlocuiește cele 3 butoane de temă (Auto/Light/Dark) cu un singur toggle cyclic", - "La click togglează între Auto → Light → Dark → Auto", - "Afișează iconița și textul stării curente (ex: Auto sistem)", - "Stilul este compact similar cu toggle-ul din header desktop", - "npm run typecheck passes", - "Verify in browser: Mobile menu theme selector cycles through 3 states on tap" + "În MaturityAnalysisCard.vue: .maturity-list max-height crescut de la 250px la 400px", + "În MaturityAnalysisCard.vue: @media 768px .maturity-list max-height crescut de la 200px la 350px", + "min-height pe .tab-content redus pentru a nu forța scroll inutil", + "Verify in browser desktop: cel puțin 8-10 rânduri vizibile fără scroll intern" ], - "passes": true, - "notes": "Completed in iteration 5" + "passes": false, + "notes": "CSS current: linia 491 (max-height: 250px), linia 784 (max-height: 200px mobile)" }, { - "id": "US-605", - "title": "Companie/Perioadă Colapsabile în Meniul Mobil", - "description": "Ca utilizator mobil, vreau secțiunile Companie și Perioadă din meniu să fie colapsabile pentru că ocupă mult spațiu și rareori trebuie schimbate", - "priority": 5, + "id": "US-705", + "title": "Reducere Padding și Margin Top Excesiv", + "description": "Ca utilizator, vreau să văd conținutul imediat fără spațiu gol excesiv în partea de sus, pentru că acum partea de sus are prea mult spațiu nefolosit", + "priority": 15, "acceptanceCriteria": [ - "Secțiunile Firma și Perioada sunt colapsate by default", - "Click pe header-ul secțiunii o expandează/colapsează", - "Când sunt colapsate afișează doar numele firmei/perioadei curente într-o singură linie", - "Starea colapsată este persistată în localStorage", - "npm run typecheck passes", - "Verify in browser: Tap on Firma/Perioada toggles expansion" + "Reducere margin-bottom pe .page-header în paginile afectate", + "Verificare și ajustare padding pe .app-container dacă e redundant", + "Modificările nu afectează negativ layoutul altor pagini", + "Verificare vizuală în mod desktop și mobil", + "npm run build passes" ], - "passes": true, - "notes": "Completed in iteration 6" - }, - { - "id": "US-606", - "title": "Layout Scrollabil Unificat în Meniul Mobil", - "description": "Ca utilizator mobil, vreau întregul meniu hamburger să fie într-o singură zonă scrollabilă pentru că acum secțiunea cu link-uri este foarte mică între header și footer fix", - "priority": 6, - "acceptanceCriteria": [ - "Meniul hamburger mobil nu mai are header/footer fixe", - "Tot conținutul (logo firma perioada meniuri utilizator temă deconectare) scrollează împreună", - "Înălțimea vizibilă pentru meniuri crește semnificativ (min 60% din ecran)", - "npm run typecheck passes", - "Verify in browser: Entire mobile menu scrolls as one unit" - ], - "passes": true, - "notes": "Completed in iteration 7" - }, - { - "id": "US-607", - "title": "Secțiune Utilizator Compactă în Meniul Mobil", - "description": "Ca utilizator mobil, vreau secțiunea de utilizator (nume temă deconectare) să fie mai compactă pentru că ocupă prea mult spațiu vertical", - "priority": 7, - "acceptanceCriteria": [ - "Numele utilizatorului și butonul Deconectare sunt pe aceeași linie", - "Toggle-ul de temă este pe o linie separată dar compact (vezi US-604)", - "Spațiul total ocupat de secțiunea utilizator redus cu cel puțin 50%", - "npm run typecheck passes", - "Verify in browser: User section is visually compact" - ], - "passes": true, - "notes": "Completed in iteration 8" - }, - { - "id": "US-608", - "title": "Fix Buton FAB SpeedDial în Lista Bonuri", - "description": "Ca utilizator mobil, vreau butonul + din lista bonuri să afișeze un meniu SpeedDial pentru că în prezent se schimbă în X dar nu apare niciun meniu", - "priority": 8, - "acceptanceCriteria": [ - "Click pe FAB (+) afișează opțiuni SpeedDial animate", - "Opțiuni: Bon Nou Manual, Scanare Bon OCR, Upload în Masă", - "Click pe opțiune navighează la pagina corespunzătoare", - "Click în afara meniului sau pe X îl închide", - "npm run typecheck passes", - "Verify in browser: FAB shows SpeedDial menu with 3 options on tap" - ], - "passes": true, - "notes": "Completed in iteration 9" - }, - { - "id": "US-609", - "title": "Buton Resetează pe Toate Paginile cu Filtre Mobil", - "description": "Ca utilizator mobil, vreau butonul Resetează să apară pe toate paginile care au Filtrează pentru că în prezent doar Balanța are acest buton", - "priority": 9, - "acceptanceCriteria": [ - "Pagina Facturi mobil: header include buton Resetează lângă Filtrează", - "Pagina Casă mobil: header include buton Resetează lângă Filtrează", - "Pagina Bancă mobil: header include buton Resetează lângă Filtrează", - "Pagina Lista Bonuri mobil: header include buton Resetează lângă Filtrează", - "Butonul resetează toate filtrele la valorile default", - "npm run typecheck passes", - "Verify in browser: All filter pages show Reset button in mobile header" - ], - "passes": true, - "notes": "Completed in iteration 10" - }, - { - "id": "US-610", - "title": "Eliminare Spațiu Gol Deasupra Tabelelor", - "description": "Ca utilizator, vreau să nu existe spațiu gol excesiv între filtre și tabele pentru că este raportat că există spațiu gol mare pe mai multe pagini", - "priority": 10, - "acceptanceCriteria": [ - "Investighează CSS-ul paginilor: Facturi Balanță Casă Bancă Lista Bonuri", - "Identifică sursa spațiului gol (margin/padding excesiv container gol etc)", - "Elimină spațiul gol păstrând designul consistent", - "Verifică pe desktop ȘI pe mobil", - "npm run typecheck passes", - "Verify in browser: No excessive gap between filters and table on all pages" - ], - "passes": true, - "notes": "Completed in iteration 11" + "passes": false, + "notes": "Afectează MaturityAnalysisView, DetailedInvoicesView. Folosește design tokens din CSS_PATTERNS.md" } ] } diff --git a/scripts/ralph/progress.txt b/scripts/ralph/progress.txt index 7b24b72..b0fb674 100644 --- a/scripts/ralph/progress.txt +++ b/scripts/ralph/progress.txt @@ -308,3 +308,76 @@ PRD: tasks/prd-ui-fixes-phase6.md [2026-01-13 16:42:29] Working on story: US-610 [2026-01-13 16:42:29] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_11_US-610.log) [2026-01-13 16:48:47] SUCCESS: Story US-610 passed! +[2026-01-13 16:48:47] Changes committed +[2026-01-13 16:48:47] Progress: 10/10 stories completed +[2026-01-13 16:48:49] === Iteration 12/30 === +[2026-01-13 16:48:49] SUCCESS: All stories completed! 🎉 +[2026-01-13 16:48:49] === Ralph Session Complete === +[2026-01-13 16:48:49] Final progress: 10/10 stories completed +[2026-01-13 16:48:49] Branch: ralph/ui-fixes-phase6 +[2026-01-13 16:48:49] Logs: /workspace/roa2web/scripts/ralph/logs + +--- + +## ══════════════════════════════════════════════════════════════ +## Phase 6: UI/UX Fixes - Menu Consistency & Mobile (COMPLETED ✓) +## ══════════════════════════════════════════════════════════════ +Started: Mon Jan 13 16:00:00 UTC 2026 +Completed: Mon Jan 13 16:49:33 UTC 2026 +Project: ui-fixes-phase6 +Branch: ralph/ui-fixes-phase6 +Stories: 10/10 completed (US-601 to US-610) + +Summary: +- US-601: Added Analize section to Desktop Sidebar ✓ +- US-602: TabView Clienți/Furnizori in Scadențe page ✓ +- US-603: Created DetailedInvoicesView.vue with tabs ✓ +- US-604: Cyclic theme toggle (3-state) in mobile menu ✓ +- US-605: Collapsible Firma/Perioada with localStorage ✓ +- US-606: Unified scrollable mobile menu layout ✓ +- US-607: Compact user section (name + logout inline) ✓ +- US-608: Fixed FAB SpeedDial bug in Lista Bonuri ✓ +- US-609: Added Reset button to all filter pages ✓ +- US-610: Removed excessive empty space above tables ✓ + +Stats: +- Iterations used: 11 (1 retry for US-604) +- Execution time: ~50 minutes +- Files changed: 40+ files across iterations +- Net code change: +796/-724 lines + +--- + +## ══════════════════════════════════════════════════════════════ +## Phase 6 Continuation: Regression Fixes (US-701 to US-705) +## ══════════════════════════════════════════════════════════════ +Started: Mon Jan 13 20:50:00 UTC 2026 +Project: mobile-ui-fixes-phase5 (regression fixes) +Branch: ralph/ui-fixes-phase6 (continuing) +Stories: 5 new (US-701 to US-705) + +PRD: tasks/prd-mobile-ui-fixes-phase5.md + +### Stories Overview: + +**Critical Regressions (1-2):** +- [ ] US-701: Reparare SpeedDial FAB pe Lista Bonuri (import lipsă!) +- [ ] US-702: Verificare Meniu Acțiuni (...) Per Bon + +**Navigation Fix (3):** +- [ ] US-703: Navigare Hamburger pe Paginile Analize (revert show-back → show-menu) + +**UI Improvements (4-5):** +- [ ] US-704: Mărire Spațiu Tabel Scadențe (max-height 250→400px) +- [ ] US-705: Reducere Padding/Margin Top Excesiv + +--- + +### Iteration Log: + +[2026-01-13 22:26:47] Starting Ralph for project: ui-fixes-phase6 +[2026-01-13 22:26:47] Max iterations: 15 +[2026-01-13 22:26:47] === Iteration 1/15 === +[2026-01-13 22:26:47] Working on story: US-701 +[2026-01-13 22:26:47] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_1_US-701.log) +[2026-01-13 22:29:57] SUCCESS: Story US-701 passed! diff --git a/src/modules/data-entry/views/receipts/ReceiptsListView.vue b/src/modules/data-entry/views/receipts/ReceiptsListView.vue index 696152a..23a8c23 100644 --- a/src/modules/data-entry/views/receipts/ReceiptsListView.vue +++ b/src/modules/data-entry/views/receipts/ReceiptsListView.vue @@ -133,6 +133,7 @@ v-model="showDrawer" :user="authStore.user" :companies-store="companyStore" + :period-store="periodStore" @logout="handleLogout" /> @@ -1078,7 +1079,7 @@ import { useRouter } from 'vue-router' import { useToast } from 'primevue/usetoast' import { useConfirm } from 'primevue/useconfirm' import { useReceiptsStore } from '@data-entry/stores/receiptsStore' -import { useCompanyStore, useAuthStore } from '@data-entry/stores/sharedStores' +import { useCompanyStore, useAuthStore, useAccountingPeriodStore } from '@data-entry/stores/sharedStores' import { useBatchProgressStore } from '@data-entry/stores/batchProgressStore' import Menu from 'primevue/menu' import Dialog from 'primevue/dialog' @@ -1096,6 +1097,7 @@ import { exportToExcel, exportToPDF } from '@reports/utils/exportUtils' import BatchGroupHeader from '@data-entry/components/bulk/BatchGroupHeader.vue' import ProcessingStatusCell from '@data-entry/components/bulk/ProcessingStatusCell.vue' import Paginator from 'primevue/paginator' +import SpeedDial from 'primevue/speeddial' import { sseService } from '@data-entry/services/sseService' const router = useRouter() @@ -1103,6 +1105,7 @@ const toast = useToast() const confirm = useConfirm() const store = useReceiptsStore() const companyStore = useCompanyStore() +const periodStore = useAccountingPeriodStore() const batchProgressStore = useBatchProgressStore() const authStore = useAuthStore() diff --git a/src/modules/reports/components/dashboard/cards/MaturityAnalysisCard.vue b/src/modules/reports/components/dashboard/cards/MaturityAnalysisCard.vue index ea7b535..77b766d 100644 --- a/src/modules/reports/components/dashboard/cards/MaturityAnalysisCard.vue +++ b/src/modules/reports/components/dashboard/cards/MaturityAnalysisCard.vue @@ -1,8 +1,8 @@