Workorder — Arbeitszeiten (Sub-Route)
Zweck
Sub-Route /workorders/:id/working-times zeigt alle Zeiterfassungen, die explizit für diesen Workorder erfasst wurden — typischerweise von Servicetechnikern via Mobile-App oder im Detail per + Zeit erfassen.
Voraussetzungen
Berechtigungen (CASL)
| Action | Subject | Wirkung | Keycloak-Rolle |
|---|---|---|---|
view | FE_Workorder, Workorder | Detail aufrufbar | — |
view/create/update | EmployeeTimeTracking | Zeiten pflegen | APP_SPEAMCORE_VIEW/CREATE/UPDATE_EMPLOYEE_TIME_TRACKING |
view | Employee | Mitarbeiter-Auswahl | APP_SPEAMCORE_VIEW_EMPLOYEE |
Schritt-für-Schritt-Anleitung
- Workorder (
/workorders/:id) → Tab Arbeitszeit. - + Arbeitszeit hinzufügen klicken — eine leere Zeile wird inline in der Tabelle angelegt (kein Modal).
- Werte direkt in der Zeile editieren (siehe Inline-Editing unten).
- Eintrag wird automatisch beim Verlassen der Zeile gespeichert (
parentType = Workorder,parentId = :id).

Inline-Row-Editing-Pattern
Wichtig: Anders als bei Material, das ein Auswahl-Modal öffnet, nutzt Arbeitszeit das Inline-Row-Editing-Pattern — direkte Bearbeitung in der DataGrid-Zeile ohne Modal. Vorteile: schnelle Mehrfach-Erfassung, Massenbearbeitung in einem Rutsch.
Spalten der Editier-Zeile
| Spalte | Eingabe-Typ | Default | Wirkung |
|---|---|---|---|
Mitarbeiter | Dropdown (Searchable Select) | Aktueller Anwender | Definiert, wem die Zeit zugerechnet wird. Erfordert view:Employee. |
Service | Dropdown (Pflicht) | leer | Welche Tätigkeit (z. B. „Wartung", „Anfahrt", „Diagnose"). Aus Stammdaten /services. |
Mitarbeiter Zeiterfassungstyp | Dropdown | Default-Typ aus Mitarbeiter-Vertrag | Steuert Lohn-Verrechnung (Standardstunden, Überstunden, Wochenend-Zuschlag, Nachtschicht etc.). Stammdaten /employee-time-tracking-types. |
Abrechenbar | Checkbox | true | Wenn true: Zeile fließt in Verkaufsbeleg-Generierung. false: nur intern für Lohnabrechnung, nicht beim Kunden abgerechnet. |
Startzeit | DateTime-Picker | jetzt | Beginn der Zeitspanne. |
Endzeit | DateTime-Picker | jetzt | Ende der Zeitspanne. |
Dauer | berechnet | 00:00:00 | Wird automatisch aus Endzeit - Startzeit berechnet. Read-only. |
Kommentar | Textarea | leer | Frei-Text zur Tätigkeit, erscheint im Auftrag-Bericht. |
Action-Icons rechts in der Zeile
- ↩ Rückgängig — verwirft Änderungen seit letztem Speichern.
- 🗑 Trash — löscht die Zeile (Soft-Delete).
Inline-Editing-Workflow
- Zelle anklicken → wird zu Eingabefeld (für Dropdown: Suchfeld erscheint).
- Wert eingeben/auswählen.
- Tab oder Klick auf nächste Zelle → speichert die aktuelle Zelle automatisch (
PATCH /api/employee-time-trackings/:id). - Escape während Bearbeitung → verwirft Änderungen.
Verbindung zur Beleg-Erstellung
Beim Klick auf „Rechnung erstellen" in der Auftrags-Toolbar werden alle Arbeitszeit-Einträge mit abrechenbar = true als Beleg-Positionen übernommen — gruppiert nach Service. Erfordert create:SalesDocument.
Wiederverwendbare Konzepte
Verknuepfungen zu anderen Modulen
- Workorders — Eltern-Modul.
- Zeiterfassungen — globale Sicht.
- Mitarbeiter-Zeitarten — Klassifikation.
- Time-Overview — Soll/Ist-Auswertung.
API/Schnittstellen
| Methode | Endpoint | Zweck | CASL |
|---|---|---|---|
GET | /api/employee-time-trackings?filter[parentType=Workorder&parentId] | Liste | view EmployeeTimeTracking |
POST | /api/employee-time-trackings | Anlegen | create EmployeeTimeTracking |
PATCH | /api/employee-time-trackings/:id | Ändern | update EmployeeTimeTracking |
Versionshinweise
- 2026-04-30: Initiale Veroeffentlichung.