Position Restrictions & User-Customer Relations
Position Restrictions & User-Customer Relations
Diese Anleitung erklärt, wie Position Restrictions und User-Customer Relations die Mitarbeiter-Sichtbarkeit und Einsatzplanung beeinflussen.
Für Admins
Position Restrictions — Schichten nur für passende Positionen
Was sind Positionen?
Positionen sind berufliche Rollen in deinem Team:
- Rezeptionist
- Koch
- Küche-Aushilfe
- Barkeeper
- Manager
- Fahrer
- etc.
Jede Position kann mit Anforderungen verknüpft werden (z.B. Lizenz, Führerschein, Sprachen).
Restrict Positions — Das Setting
Siehe Team-Konfiguration > Strict Positions für die Basis-Einstellung.
Wenn Restrict Positions aktiviert ist:
- Admins weisen jeder Schicht eine Position zu (z.B. "Diese Schicht braucht einen Koch")
- Mitarbeiter sehen nur Schichten, die zu ihrer Position passen
- Im Kalender werden nur die richtigen Schichten angezeigt
Praktisches Beispiel
Szenario: Dein Restaurant hat 3 Arten von Schichten
| Schicht | Position erforderlich | Mit Restrict Positions |
|---|---|---|
| Schicht: Service Berlin | Rezeptionist | Nur Rezeptionisten sehen diese |
| Schicht: Küche München | Koch | Nur Köche sehen diese |
| Schicht: Aushilfe Lagern | Aushilfe | Nur Aushilfen sehen diese |
Ohne Restrict Positions:
- Alle 3 Schichten sichtbar für alle Mitarbeiter
Mit Restrict Positions:
- Rezeptionist sieht: "Service Berlin" + nicht "Küche" + nicht "Aushilfe"
- Koch sieht: "Küche München" + nicht "Service" + nicht "Aushilfe"
- Aushilfe sieht: "Aushilfe Lagern" + nicht "Service" + nicht "Küche"
Positionen für Mitarbeiter zuweisen
- Geh zu Admin > Benutzerverwaltung > Mitarbeiter
- Wähle einen Mitarbeiter aus
- Im Formular unter Positionen: Wähle eine oder mehrere Positionen
- Speichern
Wichtig: Ein Mitarbeiter kann mehrere Positionen haben!
- Beispiel: Max ist sowohl "Koch" als auch "Manager"
- Max sieht dann Schichten für "Koch" UND "Manager"
User-Customer Relations — Wer arbeitet für wen?
Was sind User-Customer Relations?
Eine User-Customer Relation verbindet einen Mitarbeiter mit einem Kunden. Das nutzbar bei:
- Mehrere Außenstelle/Kunden: Mitarbeiter arbeitet z.B. nur für Kunde "Hotel XYZ"
- Projektbasierte Arbeit: Mitarbeiter arbeitet für mehrere Kunden/Projekte
- Abrechnungsfilterung: Admin kann Schichten nach Kunde filtern
Konfiguration
- Geh zu Admin > Benutzerverwaltung > Mitarbeiter > [Mitarbeiter wählen]
- Im Abschnitt Kundenbeziehungen / Customer Relations: Wähle einen oder mehrere Kunden
- Speichern
Beispiel:
- Mitarbeiter "Maria" arbeitet für Kunden: "Gasthof Zur Post", "Hotel am Platz"
- Mitarbeiter "Klaus" arbeitet für Kunden: "Event-Agentur München"
Auswirkung im System
Derzeit ist die User-Customer Relation hauptsächlich ein Datenverwaltungs-Tool:
- In Zukunft wird sie für automatische Schicht-Filter und Berichte nutzbar (z.B. "Zeige alle Schichten für Hotel XYZ")
- Admins können damit schon jetzt filtern und Berichte per API erstellen
Zusammenspiel: Positionen + Restrict Mode + Custom Fields
Wenn du mehrere der folgenden Einstellungen kombinierst, erhältst du sehr genaue Kontrolle über Einsatzplanung:
| Szenario | Position Restrict | Strict Mode | Custom Fields |
|---|---|---|---|
| Kleine, flexible Crew | OFF | OFF | Keine erforderlich |
| Spezialisierte Rollen | ON | OFF | Optional (z.B. Lizenz für Koch) |
| Strenge Anforderungen (Klinik) | ON | ON | Erforderlich (z.B. Zertifikat) |
Beispiel: Spezialisierte Anwaltskanzlei
Position Restrict: ON
Strict Mode: OFF
Custom Fields:
- "Rechtsgebiet" (Text, erforderlich) — z.B. "Arbeitsrecht", "Zivilrecht"
- "Anwaltszulassung" (Boolean, erforderlich) — Ja/Nein
Auswirkung:
1. Mitarbeiter "Anna" hat Position "Anwalt" + Rechtsgebiet "Arbeitsrecht" + Zulassung: ja
→ Anna sieht nur Schichten für Position "Anwalt" mit Anforderung "Arbeitsrecht"
2. Mitarbeiter "Bob" hat Position "Sekretariat"
→ Bob sieht keine Anwalts-Schichten (andere Position)
3. Admin erstellt Schicht für "Zivilrecht" mit Anforderung "Arbeitsrecht"-Feld
→ Anna sieht diese Schicht NICHT (Rechtsgebiet passt nicht)
→ Wenn Admin versucht zuzuweisen: Stark Modus zeigt WarnungHäufige Fragen
F: Ein Mitarbeiter hat mehrere Positionen — sieht er Schichten für alle Positionen? A: Ja! Mit Restrict Positions sieht der Mitarbeiter alle Schichten, die zu einer seiner Positionen passen.
F: Können wir Position Restrictions für einzelne Mitarbeiter ausnahmsweise deaktivieren? A: Nein, das ist eine Team-weite Einstellung. Aber du kannst individuelle Zuweisung im Strict Mode OFF vornehmen (mit Warnung).
F: Wie unterscheiden sich Positionen von Custom Fields? A:
- Positionen = berufliche Rolle (Chef, Koch, Aushilfe)
- Custom Fields = zusätzliche Anforderungen (Lizenz, Sprache, Qualifikation)
- Positionen filtern sichtbar (wenn Restrict ON), Custom Fields sind ein Kompatibilitäts-Check (Warnung/Blocker)
F: User-Customer Relations — sind diese auch wie Position Restrict? A: Derzeit NEIN — User-Customer Relations sind nur für Datenorganisation (Benutzerto wertung nach Kunde vorbereiten). In Zukunft werden sie möglicherweise auch für Sichtbarkeits-Filter wie Position Restrict genutzt.
For Developers
Position Restrictions Implementation
Key Function: filterShiftsByPosition() in src/sections/events/filter-shifts-by-position.ts
export function filterShiftsByPosition(
event: DBEvent<true> | undefined,
user: AuthContextUser | null | undefined,
restrictPositions: boolean,
): DBShift<true>[] {
// Returns ALL shifts if restrictPositions is disabled
if (!restrictPositions) return event.shifts;
// Returns only shifts matching user's positionIds
return event.shifts.filter((shift) => user?.positionIds?.includes(shift.positionId));
}Effect on these components:
src/sections/calendar/employee-calendar-view.tsx— Shows only filtered shifts for employeesrc/sections/kanban-board/— Shows available shifts based on position filteringsrc/sections/events/event-detail-view.tsx— Hides shifts employee can't access
Position Assignment to Shifts
Every shift has:
shift.positionId: number // References a position
shift.position: DBPosition // Full position object (may contain requirements)When creating or editing shifts, admins set positionId. The position determines visibility when restrictPositions = true.
User-Customer Relations
Not actively used in shift filtering currently, but data structure exists:
user.userCustomers?: {
userId: number;
customerId: number;
customer: DBCustomer;
}[]Can be used for future filtering or reporting.
Compatibility Checks & Positions
The compatibility check also validates positions (independent of Restrict Positions):
From src/sections/admin-calendar-v2/daily-planning/utils/compatibility-check.ts (L390):
if (positionIds && positionIds.length > 0 && !positionIds.includes(shift.positionId)) {
incompatibilities.push({
id: 'not-qualified',
summary: 'Position does not match',
details: 'User has positions: X, Y. Shift requires: Z.',
severity: '2-warning',
});
}Key Difference:
- Restrict Positions = true: Shifts are HIDDEN from employee (can't see them)
- Compatibility Check: Shifts are VISIBLE but show WARNINGS when admin tries to assign incompatible position
Both mechanisms enforce role-based assignment, but at different stages (visibility vs assignment).