Zum Hauptinhalt springen

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

- Berechtigung `view:Workorder` und `view:EmployeeTimeTracking`. - Für Erfassung: `create:EmployeeTimeTracking` und `view:Employee`.

Berechtigungen (CASL)

ActionSubjectWirkungKeycloak-Rolle
viewFE_Workorder, WorkorderDetail aufrufbar
view/create/updateEmployeeTimeTrackingZeiten pflegenAPP_SPEAMCORE_VIEW/CREATE/UPDATE_EMPLOYEE_TIME_TRACKING
viewEmployeeMitarbeiter-AuswahlAPP_SPEAMCORE_VIEW_EMPLOYEE

Schritt-für-Schritt-Anleitung

  1. Workorder (/workorders/:id) → Tab Arbeitszeit.
  2. + Arbeitszeit hinzufügen klicken — eine leere Zeile wird inline in der Tabelle angelegt (kein Modal).
  3. Werte direkt in der Zeile editieren (siehe Inline-Editing unten).
  4. Eintrag wird automatisch beim Verlassen der Zeile gespeichert (parentType = Workorder, parentId = :id).

Listenansicht — workorders-working-times

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

SpalteEingabe-TypDefaultWirkung
MitarbeiterDropdown (Searchable Select)Aktueller AnwenderDefiniert, wem die Zeit zugerechnet wird. Erfordert view:Employee.
ServiceDropdown (Pflicht)leerWelche Tätigkeit (z. B. „Wartung", „Anfahrt", „Diagnose"). Aus Stammdaten /services.
Mitarbeiter ZeiterfassungstypDropdownDefault-Typ aus Mitarbeiter-VertragSteuert Lohn-Verrechnung (Standardstunden, Überstunden, Wochenend-Zuschlag, Nachtschicht etc.). Stammdaten /employee-time-tracking-types.
AbrechenbarCheckboxtrueWenn true: Zeile fließt in Verkaufsbeleg-Generierung. false: nur intern für Lohnabrechnung, nicht beim Kunden abgerechnet.
StartzeitDateTime-PickerjetztBeginn der Zeitspanne.
EndzeitDateTime-PickerjetztEnde der Zeitspanne.
Dauerberechnet00:00:00Wird automatisch aus Endzeit - Startzeit berechnet. Read-only.
KommentarTextarealeerFrei-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

  1. Zelle anklicken → wird zu Eingabefeld (für Dropdown: Suchfeld erscheint).
  2. Wert eingeben/auswählen.
  3. Tab oder Klick auf nächste Zelle → speichert die aktuelle Zelle automatisch (PATCH /api/employee-time-trackings/:id).
  4. Escape während Bearbeitung → verwirft Änderungen.
Beim **Anlegen** einer neuen Zeile (Klick auf „+ Arbeitszeit hinzufügen") werden Startzeit/Endzeit auf **„jetzt"** gesetzt — Dauer ist 0. Das ist der typische Vor-Ort-Workflow: Mitarbeiter klickt beim Vor-Ort-Beginn auf „+", arbeitet, ändert beim Ende die Endzeit auf den aktuellen Zeitpunkt. Alternativ kann der Mitarbeiter die Zeitspanne direkt eintragen — beide Workflows werden unterstützt.

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

API/Schnittstellen

MethodeEndpointZweckCASL
GET/api/employee-time-trackings?filter[parentType=Workorder&parentId]Listeview EmployeeTimeTracking
POST/api/employee-time-trackingsAnlegencreate EmployeeTimeTracking
PATCH/api/employee-time-trackings/:idÄndernupdate EmployeeTimeTracking

Versionshinweise

  • 2026-04-30: Initiale Veroeffentlichung.