Arbeitszeit: Zeiterfassung (Kapitel 6.2)

Neuer Tab "Zeiterfassung" neben "Aufgaben" (WorkloadViewModel als Tab-Container,
gleiches Muster wie GroupDetailViewModel): Timer mit Zuordnung zu Aufgabe/Kategorie,
manuelle Nacherfassung (Von-Bis oder Dauer), Wochenübersicht nach Kategorie, sowie
"X / Y min erfasst" direkt in der Aufgabenliste als Ist-vs-Soll-Vergleich.
This commit is contained in:
2026-08-15 23:17:44 +02:00
parent 5c0b6854f5
commit d8b05702bc
14 changed files with 707 additions and 38 deletions
+20 -6
View File
@@ -778,8 +778,9 @@ dadurch faktisch schon (Quick-Input-Dialog bzw. "Offene Entschuldigungen" im Das
## 6. Arbeitszeit & Aufgaben
Modelle `WorkTask` und `TimeEntry` existieren, Repositories ebenfalls.
Navigationspunkt "Arbeitszeit" zeigt inzwischen die Aufgabenverwaltung (6.1) statt eines
Placeholders; Zeiterfassung (6.2/6.3) ist noch offen.
Navigationspunkt "Arbeitszeit" zeigt inzwischen Aufgabenverwaltung (6.1) und Zeiterfassung (6.2)
als zwei Tabs (`WorkloadViewModel`/`WorkloadView`, gleiches Container-Tab-Muster wie
`GroupDetailViewModel`); nur die Monats-/Jahresauswertung (6.3) ist noch offen.
### 6.1 Aufgabenverwaltung
- [x] **6.1.1** Aufgabenliste mit Filter nach Status, Kategorie, Gruppe und Fälligkeit —
@@ -799,10 +800,23 @@ Placeholders; Zeiterfassung (6.2/6.3) ist noch offen.
auf `Conducted` (Anbindung an 1.1.3).
### 6.2 Zeiterfassung
- [ ] **6.2.1** Timer starten/stoppen mit Zuordnung zu Aufgabe oder Kategorie.
- [ ] **6.2.2** Manuelle Nacherfassung eines Zeitblocks (Datum, VonBis oder Dauer).
- [ ] **6.2.3** Wochenübersicht der erfassten Zeit, Summen je Kategorie.
- [ ] **6.2.4** Schätzung vs. tatsächliche Dauer je Aufgabe vergleichen.
- [x] **6.2.1** Timer starten/stoppen mit Zuordnung zu Aufgabe oder Kategorie
`TimeTrackingViewModel`. Bewusst ohne live mitlaufende Sekundenanzeige (keine
`DispatcherTimer`-Kopplung in die ViewModel-Schicht); während der Timer läuft, zeigt
"Läuft seit HH:mm Uhr" den Startzeitpunkt, die Dauer wird beim Stoppen aus der
Differenz berechnet (mind. 1 Minute).
- [x] **6.2.2** Manuelle Nacherfassung eines Zeitblocks (Datum, VonBis oder Dauer) —
`AddTimeEntryDialog`: entweder Dauer direkt eintragen oder Von/Bis angeben (daraus wird
die Dauer berechnet); mindestens eines von beidem ist Pflicht.
- [x] **6.2.3** Wochenübersicht der erfassten Zeit, Summen je Kategorie — Balken je Kategorie
(`CategoryWeekSummary`, `TimeEntry.Category` ist bewusst ein freier String statt
`TaskCategory`-Enum wie bei `WorkTask`, da das Domänenmodell das schon so vorgab; die
ComboBox schlägt trotzdem dieselben Kategorienamen vor). Nur die aktuelle Kalenderwoche,
keine Wochennavigation wie im Stundenplan — bei Bedarf später ergänzbar.
- [x] **6.2.4** Schätzung vs. tatsächliche Dauer je Aufgabe vergleichen — direkt in der
Aufgabenliste (6.1.1) als "X / Y min erfasst", sobald mindestens ein verknüpfter
Zeiteintrag existiert; dafür braucht `WorkTaskListViewModel` jetzt zusätzlich
`ITimeEntryRepository`.
### 6.3 Auswertung
- [ ] **6.3.1** Monats-/Jahresauswertung nach Kategorie und Gruppe (Diagramm + Tabelle).