Custom User Fields System
Custom User Fields System
Custom User Fields ermöglichen es Admins, zusätzliche Informationen über Mitarbeiter zu speichern und diese für die Schichtzuweisung zu nutzen (z.B. "Hat Gabelstaplerführerschein", "Allergien: keine").
Für Admins
Was sind Custom User Fields?
Custom User Fields sind zusätzliche Felder, die für jeden Mitarbeiter verfügbar sind. Du kannst sie im Team Management konfigurieren und dann:
- Beim Anlegen/Bearbeiten von Mitarbeitern ausfüllen
- In der Mitarbeiter-Ansicht und Quick-Edit-Dialogen sehen
- Für Schicht-Anforderungen verwenden (z.B. nur Mitarbeiter mit Gabelstaplerführerschein für diese Schicht)
Schritt-für-Schritt: Custom Fields einrichten
1. Feld erstellen
- Geh zu Admin > System > Team-Einstellungen
- Scrolle zum Abschnitt Custom User Fields
- Klick auf + Feld hinzufügen
- Fülle die folgenden Felder aus:
| Feld | Beschreibung | Beispiel |
|---|---|---|
| ID | Eindeutige Kennung (klein, keine Leerzeichen) | forklift_license |
| Name | Anzeigebarer Name für Mitarbeiter | Gabelstaplerführerschein |
| Type | Feldtyp (Text, Zahl, Ja/Nein) | boolean (Ja/Nein) |
| Beschreibung | Hilfreicher Text für Mitarbeiter | "Hast du einen gültigen Gabelstaplerführerschein?" |
| Erforderlich? | Muss dieses Feld immer ausgefüllt sein? | ☑ (Ja) |
| Standardwert | Vorbelegung für neue Mitarbeiter | false (Nein) oder leer |
Feldtypen erklärt:
- text — Text eingeben (z.B. Sprachen, Qualifikationen):
"English", "Spanish" - boolean — Ja/Nein Auswahl:
true(Ja) oderfalse(Nein) - number — Zahl eingeben (z.B. Zertifikat-Nummern):
12345
2. Feld bearbeiten
- Geh zu Admin > System > Team-Einstellungen > Custom User Fields
- Klick auf das Feld, das du ändern möchtest
- Ändere die Werte
- Speicher die Änderungen
3. Feld löschen
⚠️ Wichtig: Wenn du ein Feld löschst, verlieren alle Mitarbeiter diese Daten!
- Geh zu Admin > System > Team-Einstellungen > Custom User Fields
- Klick neben dem Feld auf den Löschen-Button (🗑)
- Bestätige die Löschung
4. Reihenfolge ändern
- Geh zu Admin > System > Team-Einstellungen > Custom User Fields
- Nutze die Pfeile neben jedem Feld zum Verschieben
- Speichern
Wo werden Custom Fields angezeigt?
Für Admins
- Benutzer bearbeiten: Admin > Benutzerverwaltung > Mitarbeiter auswählen > Bearbeiten
- Alle Custom Fields werden im Formular angezeigt
- Erforderliche Felder sind mit * markiert
- Admin Calendar — Employee Quick Info:
- Wenn Admin einen Mitarbeiter anklickt, sieht er/sie die Custom Fields
Für Mitarbeiter
- Profil bearbeiten: Mein Konto > Profil > Bearbeiten
- Alle nicht-leeren Custom Fields werden angezeigt
- Erforderliche Felder müssen ausgefüllt sein
Custom Fields in der Schichtzuweisung nutzen
Custom Fields können als Anforderungen für Schichten genutzt werden. Das läuft über die Kompatibilitätsprüfung:
Setup (für Admins, die Schichten erstellen)
- Erstelle eine Schicht oder bearbeite eine existierende unter Admin > Planning > Events > Schicht hinzufügen
- Im Abschnitt Anforderungen oder Required Fields kannst du einstellen: "Diese Schicht braucht Feld X"
- Speichern
Auswirkung bei Schichtzuweisung
Wenn ein Admin einen Mitarbeiter zu einer Schicht mit Custom-Field-Anforderung zuordnen möchte:
- Mitarbeiter hat das Feld erfüllt: Keine Warnung, Zuweisung möglich
- Mitarbeiter hat das Feld NICHT erfüllt: Warnung (oder Fehler, wenn Strict Mode an ist)
⚠️ Warnung: Mitarbeiter erfüllt Anforderung nicht: "Gabelstaplerführerschein"
Praktische Beispiele
Beispiel 1: Gabelstaplerführerschein (Boolean)
ID: forklift_license
Name: Gabelstaplerführerschein
Type: boolean
Erforderlich: Nein (Mitarbeiter können es später eintragen)
Standardwert: false (Nein)Verwendung:
- Admin erstellt Schicht: "Lagerverwaltung" und fordert
forklift_license = true - Nur Mitarbeiter mit Gabelstaplerführerschein können zugewiesen werden
Beispiel 2: Sprachen (Text)
ID: languages
Name: Sprachkenntnisse
Type: text
Erforderlich: Ja (muss dokumentiert sein)
Standardwert: "" (nicht gesetzt)Verwendung:
- Admin kann alle Mitarbeiter mit "English" filtern
- Schichten für englischsprachige Gäste werden nur Mitarbeitern mit "English" zugewiesen
Beispiel 3: Zertifikat-Nummer (Number)
ID: cert_number
Name: Sicherheitszertifikat-Nr.
Type: number
Erforderlich: Ja
Standardwert: "" (nicht gesetzt)For Developers
Data Model
Custom User Fields werden auf zwei Ebenen gespeichert:
Team-seitig: team.customUserFields
// Definition aller möglichen Custom Fields
team.customUserFields = [
{
id: "forklift_license",
name: "Gabelstaplerführerschein",
type: "boolean", // 'boolean' | 'text' | 'number'
description: "Hast du einen gültigen Gabelstaplerführerschein?",
required: false,
defaultValue: false,
icon: "mdi:certificate" // optional
},
...
];User-seitig: user.customFields
// Tatsächliche Werte für einen Mitarbeiter
user.customFields = {
forklift_license: true,
languages: 'English, Spanish',
cert_number: 12345,
};Implementation References
-
Configuration UI:
src/sections/teams/edit-form/users.tsx- Allows admins to add/edit/delete custom fields
- Uses React Hook Form + Zod validation
-
User Edit Form:
src/sections/user/user-quick-edit-form-custom-fields.tsx- Renders custom field inputs (boolean → Switch, text/number → Text Input)
- Located at:
fieldsBaseName.${field.id}
-
Compatibility Checks:
src/sections/admin-calendar-v2/daily-planning/utils/compatibility-check.ts- Reads
shift.requiredUserFields(array of field IDs) - Checks
user.customFields[fieldId]against requirement - Key logic (L396-404):
for (const requiredField of shift.requiredUserFields) { const field = team?.customUserFields?.find((f) => f.id === requiredField); if (employee.user.customFields?.[requiredField] !== true) { // Add warning/error } } - When
strictModeEnabled, these warnings become blocking errors
- Reads
-
Types:
DBTeam.customUserFields: Array of field definitionsDBUser.customFields: Record<fieldId, value>- See:
_types/teams.ts,_types/users.ts
Usage in Planning
When an admin assigns a shift with required custom fields:
- System reads
shift.requiredUserFields(list of field IDs) - For each field ID, system checks:
- Does
team.customUserFieldshave this field defined? - Does
employee.user.customFields[fieldId]match the requirement?
- Does
- If mismatch → warning or error (depending on
strictModeEnabled)
This allows flexible, team-specific requirements without code changes.