Projekte
Zweck
Projekte buendeln mehrstufige Vorhaben mit eigenem Lifecycle, Phasen, Positionen, Mitgliedern und Budget. Sie haengen polymorph an einem Kunden oder Standort.
Voraussetzungen
Berechtigungen (CASL)
Frontend-Page-Guard:
| Action | Subject | Keycloak-Rolle |
|---|---|---|
view | FE_Project | — |
view | Project | APP_SPEAMCORE_VIEW_PROJECT |
Tab-Subjects:
| Tab | Sub-Pfad | Subject |
|---|---|---|
| Phasen | /projects/:id/phases | ProjectPhase:view |
| Positionen | /projects/:id/items | ProjectItem:view |
| Mitglieder | /projects/:id/members | ProjectMember:view |
| Gantt | /projects/:id/gantt | Project:view |
| Budget | /projects/:id/budget | ProjectItem:view |
API-Datenzugriff:
| Action | Subject | Endpoint | Keycloak-Rolle |
|---|---|---|---|
view | Project | GET /api/projects, GET /api/projects/:id | APP_SPEAMCORE_VIEW_PROJECT |
create | Project | POST /api/projects | APP_SPEAMCORE_CREATE_PROJECT |
update | Project | PATCH /api/projects/:id | APP_SPEAMCORE_UPDATE_PROJECT |
delete | Project | DELETE /api/projects/:id | APP_SPEAMCORE_DELETE_PROJECT |
Schritt-für-Schritt-Anleitung
Projekt anlegen
- Projekte (
/projects) → + Neu. - Parent wählen (
parentType ∈ {Customer, Location}). - Name, Start-/Endtermin, Prioritaet pflegen.
- Speichern. Status startet auf
draft.
Projektstruktur aufbauen
- Phasen definieren grobe Zeitabschnitte.
- Positionen sind detaillierte Arbeitspakete je Phase.
- Mitglieder sind beteiligte Mitarbeiter.

Toolbar (Detail-Seite)
Schlanke Toolbar oben rechts:
| Icon | Aktion (aria-label) | CASL | Wirkung |
|---|---|---|---|
| ← | Zurückgehen | — | Zurück zur Liste. |
| 🏠 | Zur Startseite gehen | — | Springt auf das Dashboard / /. |
| ⏮/◀/▶/⏭ | Pagination | — | Navigation durch die gefilterte Liste — Massen-Bearbeitung ohne Liste-Sprung. |
Spezial-Tabs (Visualisierung)
Die Projekt-Detailseite hat zwei Tabs, die keine eigenen Datensätze halten, sondern aggregierte Sichten auf bestehende Daten zeigen:
Tab: Gantt
Zeigt die Phasen-Zeitleiste des Projekts als Gantt-Chart:
- X-Achse: Zeitachse vom Projekt-Start bis Projekt-Ende.
- Y-Achse: Phasen (
ProjectPhase) als horizontale Balken. - Abhängigkeiten (Vorgänger/Nachfolger) als Verbindungslinien.
- Aktuelles Datum als senkrechte Linie.
Drag-and-Drop verschiebt eine Phase und aktualisiert ihre start/end-Zeitstempel via PATCH /api/project-phases/:id. Erfordert update:ProjectPhase.
Tab: Budget
Zeigt das Projektbudget vs. Ist-Kosten als KPI-Dashboard:
- Gesamtbudget (aus
Project.budget+ Phasen-Budgets summiert). - Material-Ist (aus
WorkorderMaterialder zugewiesenen Aufträge). - Arbeitszeit-Ist (aus
EmployeeTimeTrackingder zugewiesenen Aufträge). - Differenz Plan/Ist als Ampel (grün/gelb/rot).
- Drilldown pro Phase und pro Mitarbeiter.
Erfordert view:Project, view:Workorder, view:WorkorderMaterial, view:EmployeeTimeTracking.
Globale Floating-Drawer (links)
Wie auf jeder Detail-Seite verfuegbar — siehe Floating-Quickbar:
- KAL. (Mini-Kalender)
- ZEIT (Persoenliche Wochen-Arbeitszeit)
- ARBEIT (Eigene bevorstehende Aufträge)
UI-Elemente
Button: „+ Neu"
Erfordert create:Project.
Felder und Eingaben
| Feldname | Pflicht | Datentyp | Wirkung beim Ausfuellen | Voraussetzung |
|---|---|---|---|---|
projectNo | automatisch | NumberCircleAssignment | Identifiziert das Projekt in Belegen, Reports und der Gantt-Ansicht. Wird beim Anlegen aus dem Nummernkreis vergeben. | Nummernkreis konfiguriert. |
name | nein | String | Projektname in Auswahllisten und Reports. Disabled bei status ∈ {completed, cancelled}. | Status nicht final. |
description | nein | TEXT | Beschreibung in Detailansicht und Reports. | — |
parentId + parentType | ja | polymorph | Verknuepft das Projekt mit einem Kunden oder Standort. Steuert Sichtbarkeit auf der jeweiligen Detailseite. | view:Customer oder view:Location. |
status | ja | draft, active, paused, completed, cancelled | Status-Wechsel auf completed/cancelled macht alle bearbeitbaren Felder disabled. | Erlaubte Uebergaenge: siehe Workflow. |
priority | nein | low, medium, high | Sortier-/Filter-Anker in Listen und Gantt-Ansicht. Disabled bei finalem Status. | — |
startDate / endDate | nein | DATE | Anker für Gantt-Ansicht und Auswertungen. Disabled bei finalem Status. | endDate >= startDate (sofern beide gesetzt). |
Workflows und Zustaende
Wiederverwendbare Konzepte
Verknuepfungen zu anderen Modulen
- Kunde / Standort — Parent.
- ProjectPhase, ProjectItem, ProjectMember — Sub-Entitaeten.
API/Schnittstellen
| Methode | Endpoint | Zweck | CASL |
|---|---|---|---|
GET | /api/projects | Liste | view Project |
GET | /api/projects/:id | Detail | view Project |
POST | /api/projects | Anlegen | create Project |
PATCH | /api/projects/:id | Ändern | update Project |
DELETE | /api/projects/:id | Soft-Delete | delete Project |
Versionshinweise
- 2026-04-29: Initiale Veroeffentlichung.