341 lines
11 KiB
Markdown
341 lines
11 KiB
Markdown
# Implementation Plan - Tilbudgivern System Fixes
|
|
**Dato**: 14. November 2025
|
|
**Basis**: FIX_LISTE_NOV_14.md (1388 linjer, 36 punkter)
|
|
**Status**: Investigation afsluttet ✅ - Klar til implementation
|
|
|
|
---
|
|
|
|
## 🎯 Executive Summary
|
|
|
|
**Total arbejde identificeret**: 45-60 timer
|
|
**Kritiske issues**: 4 (Velux, GraphQL, Ordrestyring, .env)
|
|
**Allerede implementeret**: 5 features (PDF, Auto-save, Sort, History backend, Mobile CSS)
|
|
**Delvist implementeret**: 6 features (Search, Excel, Notifications, Filtering, Analytics, Bulk import)
|
|
**Mangler helt**: 5 features (Dark mode, Keyboard, Bulk ops, API routing fix)
|
|
**Kræver afklaring**: 10 spørgsmål
|
|
|
|
---
|
|
|
|
## 🚦 PRIORITERET IMPLEMENTATION PLAN
|
|
|
|
### FASE 1: KRITISKE FIXES (Højeste prioritet)
|
|
**Total estimat**: 7-10 timer
|
|
**Business impact**: System stabilitet + core funktionalitet
|
|
|
|
#### 1.1 GraphQL Pagination Crashes (PM2 30 restarts/82min)
|
|
- **Prioritet**: 🔴 KRITISK
|
|
- **Estimat**: 2-3 timer
|
|
- **Impact**: System ustabilitet - crashes hver 3. minut
|
|
- **Løsning**:
|
|
- Grep ALL `graphqlClient.request()` calls i unified-server.js (11,548 linjer)
|
|
- Add pagination validation: `limit: Math.min(limit || 100, 200)`
|
|
- Test GraphQL endpoints: /analytics/kpis, /analytics/cases
|
|
- **Files**: `backend/unified-server.js` - grep for graphqlClient
|
|
- **Success criteria**: PM2 0 restarts i 24 timer
|
|
|
|
#### 1.2 Velux Produkter Missing (0 i database)
|
|
- **Prioritet**: 🔴 KRITISK
|
|
- **Estimat**: 4-6 timer
|
|
- **Impact**: Kunder kan ikke søge/bestille Velux produkter
|
|
- **Løsning**:
|
|
- **Option A**: Import fra Stark prisbog (CSV/API)
|
|
- **Option B**: Manuel indtastning top 20 Velux SKUs
|
|
- Opret supplier_id=52 for Stark
|
|
- Import 100-150 Velux vinduer + tilbehør
|
|
- **Files**: `database/materials`, `backend/src/services/starkImportService.js`
|
|
- **TODO**: Hvilken kilde er tilgængelig? Stark CSV? API? Manual entry?
|
|
|
|
#### 1.3 Ordrestyring Integration Error
|
|
- **Prioritet**: 🔴 KRITISK
|
|
- **Estimat**: 1-2 timer
|
|
- **Impact**: "Hent fra Ordrestyring" button fejler
|
|
- **Løsning**:
|
|
- Fix line 9490: `ordrestyringService is not defined`
|
|
- Import service eller fix GraphQL query
|
|
- Test customer sync fra ordrestyring_local database
|
|
- **Files**: `backend/unified-server.js` line 9490
|
|
- **Success criteria**: Customer sync fungerer fra UI
|
|
|
|
#### 1.4 Security: .env Missing (Hardcoded Credentials)
|
|
- **Prioritet**: 🔴 KRITISK (Security)
|
|
- **Estimat**: 30 minutter
|
|
- **Impact**: Credentials exposed i kode (REDACTED_PASSWORD, REDACTED_AUTH)
|
|
- **Løsning**:
|
|
- Create `.env.example` template
|
|
- Document all variables: DB_HOST, DB_USER, DB_PASS, OPENAI_API_KEY, etc.
|
|
- Update README with environment setup instructions
|
|
- **Files**: Create `.env.example`, update `README.md`
|
|
|
|
---
|
|
|
|
### FASE 2: QUICK WINS (Lav effort, høj synlighed)
|
|
**Total estimat**: 1-2 timer
|
|
**Business impact**: Hurtig fremgang, brugervenlighedsforbed
|
|
|
|
ringer
|
|
|
|
#### 2.1 Fix Port Documentation (3001→3000)
|
|
- **Estimat**: 5 minutter
|
|
- **Løsning**: Update README.md line ~20: Change port 3001 → 3000
|
|
- **Files**: `README.md`
|
|
|
|
#### 2.2 Rename "Projektnavn" → "Navn" (Point 19)
|
|
- **Estimat**: 5-10 minutter
|
|
- **Løsning**: ProjectCreation.js line 489 - rename label
|
|
- **Files**: `frontend/src/components/ProjectCreation.js`
|
|
|
|
#### 2.3 Auto-save Interval (3 sec → 30 sec?)
|
|
- **Estimat**: 15-30 minutter
|
|
- **Løsning**: GeometryInput.js line 475 - change `3000` → `30000`
|
|
- **Files**: `frontend/src/components/GeometryInput.js`
|
|
- **TODO**: Confirm user wants 30-second auto-save vs 3-second debounce
|
|
|
|
#### 2.4 API Routing Fix (Catch-all interference)
|
|
- **Estimat**: 1-2 timer
|
|
- **Løsning**: Add API 404 handler BEFORE catch-all at line 11508
|
|
- **Files**: `backend/unified-server.js` line 11508-11514
|
|
|
|
---
|
|
|
|
### FASE 3: JANNICKS UI/UX FIXES (15 punkter)
|
|
**Total estimat**: 10-15 timer
|
|
**Business impact**: Brugeroplevelse forbedring
|
|
|
|
**Kræver afklaringer først** (~5-7 spørgsmål):
|
|
1. **Point 8 (Beskrivelse)**: Hvilket beskrivelse-felt skal flyttes? (multiple found)
|
|
2. **Point 10 (Dropdown filter)**: Hvor skal det være? (ingen lokation)
|
|
3. **Point 6 (Felter skævt)**: Hvilke specifikke felter? (9 alignment issues found)
|
|
4. **Point 7 (Tilbage-knap)**: Hvilken side? (18 back buttons exist)
|
|
5. **Point 13 (Kunde edit)**: CustomerSearch.js line 325-375 exists - bug eller feature?
|
|
|
|
**Kan fixes direkte**:
|
|
- Point 5: Opgavetype missing - 1 time
|
|
- Point 9: Tilbud navn wrapping - 30 min CSS
|
|
- Point 11: Sagsnummer display - 1 time
|
|
- Point 12: Kategorier fra DB - 2-3 timer
|
|
- Point 14: Ordrestyring button - depends on 1.3 fix
|
|
- Point 15: Kunde delete removal - 10 min
|
|
- Point 19: Projektnavn rename - 5 min (quick win)
|
|
|
|
---
|
|
|
|
### FASE 4: FEATURE AKTIVERING (Already implemented)
|
|
**Total estimat**: 3-5 timer
|
|
**Business impact**: Aktivér eksisterende funktionalitet
|
|
|
|
#### 4.1 Aktiver Notifications (notistack)
|
|
- **Estimat**: 1-2 timer
|
|
- **Status**: Library installeret men ikke brugt
|
|
- **Løsning**:
|
|
- Wrap App.js med `<SnackbarProvider>`
|
|
- Create useNotification hook
|
|
- Replace alert() calls i 10-15 komponenter
|
|
- **Files**: `frontend/src/App.js`, create `frontend/src/hooks/useNotification.js`
|
|
|
|
#### 4.2 History UI (Backend ready)
|
|
- **Estimat**: 3-4 timer
|
|
- **Status**: Database + API endpoints exists
|
|
- **Løsning**:
|
|
- Create PriceHistory.js component
|
|
- Install recharts for timeline visualization
|
|
- Add "📊 Se Prishistorik" button i MaterialsList
|
|
- **Files**: Create `frontend/src/components/PriceHistory.js`
|
|
|
|
---
|
|
|
|
### FASE 5: FEATURE FORBEDRINGER
|
|
**Total estimat**: 10-15 timer
|
|
**Business impact**: Performance + usability
|
|
|
|
#### 5.1 Search Optimization (FULLTEXT indexes)
|
|
- **Estimat**: 2-3 timer
|
|
- **Impact**: 10-100x faster search
|
|
- **Løsning**:
|
|
- Add MySQL FULLTEXT indexes på materials, customers, projects
|
|
- Update LIKE queries → MATCH AGAINST
|
|
- Create migration file
|
|
- **Files**: New migration, `backend/unified-server.js` search endpoints
|
|
|
|
#### 5.2 Excel Import (XLSX parser)
|
|
- **Estimat**: 2-3 timer
|
|
- **Status**: CSV works, XLSX missing
|
|
- **Løsning**:
|
|
- Install `xlsx` library
|
|
- Create /api/pricing/excel-import endpoint
|
|
- Add UI button "📊 Importer Excel"
|
|
- Create template file
|
|
- **Files**: `backend/src/routes/uploads.js`, `MaterialsList.js`
|
|
|
|
#### 5.3 Mobile Testing
|
|
- **Estimat**: 2-3 timer
|
|
- **Status**: Responsive CSS exists
|
|
- **Løsning**:
|
|
- Test on actual devices (iPhone, Android, iPad)
|
|
- Chrome DevTools mobile simulation
|
|
- Fix touch targets, text sizes, scroll issues
|
|
- **Files**: Various CSS files
|
|
|
|
#### 5.4 Dropdown Sort Standardization
|
|
- **Estimat**: 1-2 timer
|
|
- **Status**: Partial - ProjectCreation done, others missing UI
|
|
- **Løsning**:
|
|
- Add sortBy dropdown to MaterialsList, PlanningDashboard
|
|
- Standardize sort options: Navn, Dato, Pris, Kategori
|
|
- **Files**: `MaterialsList.js`, `PlanningDashboard.js`
|
|
|
|
---
|
|
|
|
### FASE 6: NYE FEATURES (Not implemented)
|
|
**Total estimat**: 15-25 timer
|
|
**Business impact**: New capabilities
|
|
|
|
#### 6.1 Bulk Operations
|
|
- **Estimat**: 3-4 timer
|
|
- **Løsning**:
|
|
- Multi-select checkboxes i CompletedQuotes, MaterialsList
|
|
- Bulk actions: Archive, Export, Delete
|
|
- Backend bulk endpoints
|
|
- **Files**: `CompletedQuotes.js`, `MaterialsList.js`, `unified-server.js`
|
|
|
|
#### 6.2 Advanced Filtering
|
|
- **Estimat**: 2-3 timer
|
|
- **Løsning**:
|
|
- Date range picker
|
|
- Price range sliders
|
|
- Customer search filter
|
|
- Created by filter
|
|
- **Files**: `CompletedQuotes.js` add filter panel
|
|
|
|
#### 6.3 Analytics Expansion
|
|
- **Estimat**: 4-5 timer
|
|
- **Løsning**:
|
|
- Install recharts
|
|
- Add 4-5 charts (line, bar, pie, area)
|
|
- Date range selector
|
|
- Export to PDF
|
|
- **Files**: `AnalyticsDashboard.js`, `frontend/package.json`
|
|
|
|
#### 6.4 Dark Mode
|
|
- **Estimat**: 2-3 timer
|
|
- **Løsning**:
|
|
- Create theme.js with light/dark themes
|
|
- Add ThemeProvider + toggle button
|
|
- Update CSS to use theme variables
|
|
- **Files**: Create `frontend/src/theme.js`, update `App.js`
|
|
|
|
#### 6.5 Keyboard Shortcuts
|
|
- **Estimat**: 1-2 timer
|
|
- **Løsning**:
|
|
- Create useKeyboardShortcuts hook
|
|
- Add Ctrl+S (save), Ctrl+N (new), Ctrl+F (search), Escape (cancel)
|
|
- Shortcut help dialog (press ?)
|
|
- **Files**: Create `frontend/src/hooks/useKeyboardShortcuts.js`
|
|
|
|
---
|
|
|
|
### FASE 7: DATA INTEGRITY
|
|
**Total estimat**: 5-10 timer
|
|
**Business impact**: Data quality + completeness
|
|
|
|
#### 7.1 Fix Missing Prices (18/62 materials = 29%)
|
|
- **Estimat**: Varies (1-4 timer)
|
|
- **Options**:
|
|
- A: Bygma re-import (2-3 timer)
|
|
- B: Manual price UI (3-4 timer)
|
|
- C: Default averages (1-2 timer)
|
|
- **TODO**: Hvilken approach?
|
|
|
|
#### 7.2 Bulk Material Import (62 → 500+)
|
|
- **Estimat**: Varies (1-6 timer)
|
|
- **Options**:
|
|
- Bygma Prof prisbog: 1-2 timer (re-run existing import)
|
|
- Stark import: 4-6 timer (create new parser)
|
|
- Excel template: 2-3 timer (use Point 5.2 solution)
|
|
- **TODO**: Prioritize sources?
|
|
|
|
---
|
|
|
|
## ❓ CLARIFICATION QUESTIONS (10 total)
|
|
|
|
1. **Velux import**: Stark CSV tilgængelig? API? Manual entry acceptable?
|
|
2. **Auto-save**: 3 sekunder debounce eller 30 sekunder periodic?
|
|
3. **Beskrivelse felt**: Hvilket specifikt felt skal flyttes?
|
|
4. **Dropdown filter**: Hvor skal det være? (ingen lokation i Jannicks email)
|
|
5. **Felter alignment**: Hvilke specifikke felter er problemet?
|
|
6. **Tilbage-knap**: Hvilken side mangler den? (18 exists)
|
|
7. **Complexity removal**: Hvorfor fjerne? Bruges i cost calculations
|
|
8. **Missing prices**: Bygma import? Manual UI? Default averages?
|
|
9. **Bulk import**: Prioriter Bygma, Stark, eller Excel?
|
|
10. **Feature priority**: Dark mode, keyboard, bulk ops - hvilke først?
|
|
|
|
---
|
|
|
|
## 📊 ANBEFALEDE PRIORITERING
|
|
|
|
### ANBEFALING 1: START MED STABILITET
|
|
**Uge 1** (7-10 timer):
|
|
- ✅ GraphQL pagination fix (2-3h) - Stop crashes
|
|
- ✅ Ordrestyring integration (1-2h) - Fix critical button
|
|
- ✅ .env security (30min) - Security best practice
|
|
- ✅ Quick wins (1-2h) - Show progress
|
|
|
|
### ANBEFALING 2: DEREFTER VELUX + UI
|
|
**Uge 2** (10-15 timer):
|
|
- ✅ Velux import (4-6h) - Critical user need
|
|
- ✅ Afklar Jannicks 5-7 spørgsmål
|
|
- ✅ Fix top 5 UI issues (5-8h)
|
|
|
|
### ANBEFALING 3: AKTIVÉR FEATURES
|
|
**Uge 3** (8-12 timer):
|
|
- ✅ Notifications aktivering (1-2h)
|
|
- ✅ Search optimization (2-3h)
|
|
- ✅ Excel import (2-3h)
|
|
- ✅ Mobile testing (2-3h)
|
|
- ✅ History UI (3-4h)
|
|
|
|
### ANBEFALING 4: NYE FEATURES (Optional)
|
|
**Uge 4+** (15-25 timer):
|
|
- Advanced filtering (2-3h)
|
|
- Bulk operations (3-4h)
|
|
- Analytics expansion (4-5h)
|
|
- Dark mode (2-3h)
|
|
- Keyboard shortcuts (1-2h)
|
|
- Bulk material import (varies)
|
|
|
|
---
|
|
|
|
## 🎯 SUCCESS METRICS
|
|
|
|
**System Stabilitet**:
|
|
- ✅ PM2 zero restarts i 24 timer
|
|
- ✅ Alle critical endpoints returnerer JSON (ikke HTML)
|
|
- ✅ No hardcoded credentials
|
|
|
|
**User Experience**:
|
|
- ✅ Velux search returns results
|
|
- ✅ "Hent fra Ordrestyring" button works
|
|
- ✅ Notifications vises for alle actions
|
|
- ✅ Mobile responsive tested på 3+ devices
|
|
|
|
**Data Quality**:
|
|
- ✅ 100% materials har priser (0% missing)
|
|
- ✅ 500+ materials i database (fra 62)
|
|
- ✅ Price history synlig i UI
|
|
|
|
**Performance**:
|
|
- ✅ Search responds <1 sekund (fra 3-5 sek med LIKE)
|
|
- ✅ FULLTEXT indexes på 3 tables
|
|
- ✅ GraphQL queries validated
|
|
|
|
---
|
|
|
|
## 📝 NEXT STEPS
|
|
|
|
1. **Review denne plan** med bruger/stakeholders
|
|
2. **Besvar 10 clarification questions**
|
|
3. **Godkend prioritering** (følg anbefaling eller tilpas)
|
|
4. **Start FASE 1** (Kritiske fixes - 7-10 timer)
|
|
5. **Daily progress updates** via FIX_LISTE_NOV_14.md
|
|
|
|
**Ready to start?** 🚀
|