191 lines
5.8 KiB
Markdown
191 lines
5.8 KiB
Markdown
# Allokerede Timer - Ny Funktionalitet ⏱️
|
|
|
|
## Oversigt
|
|
Den nye funktionalitet i Tilbudgivern gør det muligt at registrere både **estimerede timer** og **allokerede timer** for hver arbejdsopgave i et projekt. Dette giver bedre projektstyring og sporbarhed.
|
|
|
|
## Funktioner
|
|
|
|
### 🎯 Dobbelt Timer Sporing
|
|
- **Estimerede Timer**: De oprindelige beregnede timer for hver opgave
|
|
- **Allokerede Timer**: De faktisk tildelte/planlagte timer til opgaven
|
|
|
|
### 📊 Visuel Opdeling
|
|
- Side-om-side input felter for estimerede og allokerede timer
|
|
- Forskellige farver for at skelne mellem de to typer
|
|
- Automatisk beregning af totaler for begge kategorier
|
|
|
|
### 💾 Database Struktur
|
|
Nye kolonner tilføjet til `project_labor` tabellen:
|
|
- `allocated_hours_breakdown` (LONGTEXT) - JSON struktur med allokerede timer
|
|
- `special_conditions` (TEXT) - Særlige arbejdsforhold
|
|
|
|
## Hvordan Det Virker
|
|
|
|
### Frontend (LaborInput.js)
|
|
```javascript
|
|
// Hver arbejdsopgave har nu både estimerede og allokerede timer
|
|
const workBreakdown = [
|
|
{
|
|
task: 'Forberedelse og opstilling',
|
|
hours: 8, // Estimeret
|
|
allocatedHours: 6, // Allokeret
|
|
description: 'Afdækning, værktøj, sikkerhed'
|
|
}
|
|
];
|
|
```
|
|
|
|
### Database Struktur
|
|
```json
|
|
// work_breakdown (eksisterende)
|
|
[
|
|
{
|
|
"task": "Forberedelse og opstilling",
|
|
"hours": 8,
|
|
"rate": 580,
|
|
"cost": 4640,
|
|
"notes": "Afdækning, værktøj, sikkerhed"
|
|
}
|
|
]
|
|
|
|
// allocated_hours_breakdown (ny)
|
|
[
|
|
{
|
|
"task": "Forberedelse og opstilling",
|
|
"allocatedHours": 6,
|
|
"rate": 580,
|
|
"cost": 3480,
|
|
"notes": "Afdækning, værktøj, sikkerhed"
|
|
}
|
|
]
|
|
```
|
|
|
|
### API Endpoints
|
|
**POST** `/api/customer-projects/:projectId/labor`
|
|
```json
|
|
{
|
|
"laborEntries": [
|
|
{
|
|
"taskDescription": "Forberedelse og opstilling",
|
|
"estimatedHours": 8,
|
|
"allocatedHours": 6,
|
|
"hourlyRate": 580,
|
|
"notes": "Afdækning, værktøj, sikkerhed"
|
|
}
|
|
],
|
|
"carpenterCount": 2,
|
|
"specialConditions": "Adgang kun via stige",
|
|
"totalAllocatedHours": 24
|
|
}
|
|
```
|
|
|
|
## Brugergrænsefladen
|
|
|
|
### Timer Input Sektion
|
|
```
|
|
┌─────────────────────────────────────────┐
|
|
│ Antal tømrere: [2] │
|
|
│ Total arbejdstimer (estimeret): [32] │
|
|
│ Total allokerede timer: [28] │
|
|
│ Timepris (kr): [580] │
|
|
└─────────────────────────────────────────┘
|
|
```
|
|
|
|
### Arbejdsfordeling
|
|
```
|
|
┌─────────────────────────────────────────┐
|
|
│ Forberedelse og opstilling │
|
|
│ ┌─────────┐ ┌─────────┐ │
|
|
│ │Estimeret│ │Allokeret│ │
|
|
│ │ [8] │ │ [6] │ │
|
|
│ └─────────┘ └─────────┘ │
|
|
│ [Afdækning, værktøj, sikkerhed_______] │
|
|
└─────────────────────────────────────────┘
|
|
```
|
|
|
|
### Sammendrag
|
|
```
|
|
┌─────────────────────────────────────────┐
|
|
│ Total estimerede timer: 32 timer │
|
|
│ Total allokerede timer: 28 timer │
|
|
└─────────────────────────────────────────┘
|
|
```
|
|
|
|
## Fordele
|
|
|
|
### 🎯 Bedre Planlægning
|
|
- Sammenlign estimater med faktisk allokering
|
|
- Identificer over/under-estimering
|
|
- Forbedre fremtidige estimater
|
|
|
|
### 📈 Projektstyring
|
|
- Spor afvigelser mellem plan og virkelighed
|
|
- Juster ressourcer baseret på allokering
|
|
- Dokumenter særlige forhold
|
|
|
|
### 💰 Økonomisk Kontrol
|
|
- Separat kostberegning for estimerede vs allokerede timer
|
|
- Bedre budgetkontrol
|
|
- Mere præcise tilbud til kunder
|
|
|
|
## CSS Styling
|
|
|
|
### Nye Klasser
|
|
- `.hours-inputs` - Container for timer input felter
|
|
- `.hour-input-group` - Gruppe for ét timer input
|
|
- `.hours-input.allocated` - Styling for allokerede timer
|
|
- `.total-row.allocated` - Styling for allokerede totaler
|
|
|
|
### Farver
|
|
- **Estimerede timer**: Standard grøn (`#d4edda`)
|
|
- **Allokerede timer**: Blå (`#d1ecf1`)
|
|
|
|
## Implementering Status
|
|
|
|
### ✅ Færdige Komponenter
|
|
- Database struktur udvidet
|
|
- Frontend LaborInput komponent opdateret
|
|
- Backend API udvidet til at håndtere begge timer typer
|
|
- CSS styling tilføjet
|
|
- Automatisk beregning af totaler
|
|
|
|
### 🔄 Lagret Data
|
|
- Estimerede timer gemmes i `work_breakdown`
|
|
- Allokerede timer gemmes i `allocated_hours_breakdown`
|
|
- Særlige forhold gemmes i `special_conditions`
|
|
|
|
### 🎨 Visuel Design
|
|
- Side-om-side layout for timer input
|
|
- Forskellige farver for estimerede vs allokerede
|
|
- Klarere labels og beskrivelser
|
|
- Responsive design der fungerer på alle skærmstørrelser
|
|
|
|
## Migration af Eksisterende Data
|
|
|
|
Eksisterende projekter vil fungere normalt:
|
|
- `allocatedHours` felter starter tomme
|
|
- Eksisterende `work_breakdown` forbliver uændret
|
|
- Bruger kan udfylde allokerede timer efter behov
|
|
|
|
## Fremtidige Muligheder
|
|
|
|
### 📊 Rapportering
|
|
- Sammenlign estimerede vs allokerede timer på tværs af projekter
|
|
- Identificer mønstre i afvigelser
|
|
- Forbedre estimering accuracy
|
|
|
|
### ⏰ Tidssporing
|
|
- Integration med time tracking systemer
|
|
- Faktisk tid brugt vs allokeret tid
|
|
- Real-time opdateringer under projektet
|
|
|
|
### 📈 Analytics
|
|
- Dashboard med timer fordeling
|
|
- Trends i arbejdsfordeling
|
|
- Performance metrics for teams
|
|
|
|
---
|
|
|
|
**Status**: ✅ **Implementeret og klar til brug**
|
|
|
|
Den nye funktionalitet er nu fuldt implementeret og giver dig mulighed for at spore både estimerede og allokerede timer for alle arbejdsopgaver i dine projekter!
|