diff --git a/CLAUDE.md b/CLAUDE.md index 332499f..8804ea7 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -101,6 +101,7 @@ bash httpdocs/deploy.sh - **Rounding**: Konfigurierbar per `Account.trackingInterval` (1/15/30/60 Min) - **API-Pattern**: `/api/...` Routen, JSON Request/Response, kein CSRF auf API-Endpunkten - **Timer/Stoppuhr**: `TimeEntry.timerStartedAt` (nullable `DateTimeImmutable`) markiert laufende Timer. Pro User nur ein aktiver Timer gleichzeitig. Elapsed wird beim Stoppen auf `trackingInterval` gerundet und zu `duration` addiert. +- **Stundensätze (hourlyRate)**: Dreistufige Kaskade `Project.hourlyRate → Client.hourlyRate → Service.hourlyRate` (via `COALESCE`). Kunden und Projekte haben einen Rate-Mode-Toggle (Standard-Sätze vs. eigener Stundensatz), Services immer ein direktes Feld. Revenue-Berechnung in `TimeEntryRepository::sumRevenueFiltered()` nutzt die Kaskade. - **Rollen**: `admin` (alles), `member` (eigene + fremde Einträge sehen), `tracker` (nur eigene) - **CSS Custom Properties**: Brand-Farben via `:root`-Variablen (`--color-primary`, etc.) diff --git a/httpdocs/assets/styles/components/_main-nav.scss b/httpdocs/assets/styles/components/_main-nav.scss index 6887756..b6b343a 100644 --- a/httpdocs/assets/styles/components/_main-nav.scss +++ b/httpdocs/assets/styles/components/_main-nav.scss @@ -55,6 +55,10 @@ } } +.main-nav__separator { + width: $space-4; +} + .main-nav__logout { display: inline-flex; align-items: center; diff --git a/httpdocs/templates/_sections/nav.html.twig b/httpdocs/templates/_sections/nav.html.twig index c3d9ea1..ba2e9a2 100644 --- a/httpdocs/templates/_sections/nav.html.twig +++ b/httpdocs/templates/_sections/nav.html.twig @@ -51,6 +51,7 @@ {{ 'app.nav.services'|trans }} {% endif %} + {% if isCurrentUserAdmin() %}