208 lines
6.4 KiB
Markdown
208 lines
6.4 KiB
Markdown
# Mitarbeiterverwaltung - Implementierungs-Zusammenfassung
|
|
|
|
## Übersicht
|
|
|
|
Die Mitarbeiterverwaltung wurde erfolgreich implementiert. Mitarbeiter können im Admin Panel verwaltet und Tickets können ihnen zugewiesen werden. Der Status wechselt automatisch zwischen "Open" und "Assigned".
|
|
|
|
## Implementierte Features
|
|
|
|
### 1. Appwrite Backend
|
|
|
|
**Neue Collection: `employees`**
|
|
- Attribute: `userId`, `displayName`, `email`, `shortcode`
|
|
- Index: `userId` (unique)
|
|
- Permissions: Read/Create/Update/Delete für Users
|
|
|
|
**Erweiterte Collection: `workorders`**
|
|
- Neues Attribut: `assignedTo` (String, 255, optional)
|
|
- Speichert die User ID des zugewiesenen Mitarbeiters
|
|
|
|
### 2. Frontend Komponenten
|
|
|
|
#### src/lib/appwrite.js
|
|
- `COLLECTIONS.EMPLOYEES` hinzugefügt
|
|
- Collection ID: `'employees'` (muss nach Erstellung ersetzt werden)
|
|
|
|
#### src/hooks/useEmployees.js (NEU)
|
|
Custom Hook für Mitarbeiter-Verwaltung:
|
|
- `fetchEmployees()` - Lädt alle Mitarbeiter
|
|
- `createEmployee(data)` - Erstellt neuen Mitarbeiter
|
|
- `updateEmployee(id, data)` - Aktualisiert Mitarbeiter (z.B. Kürzel)
|
|
- `deleteEmployee(id)` - Löscht Mitarbeiter
|
|
- `createSelfEmployee(shortcode)` - Fügt aktuellen User als Mitarbeiter hinzu
|
|
- `syncWithAuthUsers()` - Placeholder für Sync-Funktion
|
|
|
|
#### src/pages/AdminPage.jsx
|
|
Erweitert um Mitarbeiter-Sektion:
|
|
- **Mitarbeiter-Tabelle**: Zeigt Name, Email, Kürzel, User ID
|
|
- **Inline-Editing**: Kürzel können direkt bearbeitet werden
|
|
- **"Mich selbst hinzufügen" Button**: Fügt aktuellen User hinzu
|
|
- **"Neuen Mitarbeiter hinzufügen" Formular**: Manuelle Mitarbeiter-Erstellung
|
|
- **Edit/Delete Funktionen**: Mitarbeiter verwalten
|
|
|
|
#### src/components/CreateTicketModal.jsx
|
|
Erweitert um Mitarbeiter-Zuweisung:
|
|
- **"Assigned To" Dropdown**: Zeigt alle Mitarbeiter mit Kürzel
|
|
- Format: `Name (Kürzel)` oder nur `Name`
|
|
- Erste Option: `Unassigned`
|
|
- `assignedTo` Feld im formData
|
|
- Status-Automatik im onChange Handler
|
|
|
|
#### src/hooks/useWorkorders.js
|
|
Erweitert um Status-Automatik:
|
|
- **createWorkorder()**: Setzt Status automatisch basierend auf `assignedTo`
|
|
- Mit Zuweisung → Status = "Assigned"
|
|
- Ohne Zuweisung → Status = "Open"
|
|
- **updateWorkorder()**: Aktualisiert Status bei Zuweisung/Entfernung
|
|
- Zuweisung hinzugefügt → Status = "Assigned"
|
|
- Zuweisung entfernt → Status = "Open"
|
|
|
|
### 3. Dokumentation
|
|
|
|
**EMPLOYEES_COLLECTION_SETUP.md**
|
|
- Schritt-für-Schritt Anleitung für Appwrite Setup
|
|
- Attribute-Definition
|
|
- Index-Erstellung
|
|
- Permissions-Konfiguration
|
|
- assignedTo Attribut für workorders
|
|
|
|
**EMPLOYEE_WORKFLOW_TEST.md**
|
|
- End-to-End Test-Anleitung
|
|
- Mitarbeiter hinzufügen und bearbeiten
|
|
- Kürzel zuordnen
|
|
- Tickets zuweisen
|
|
- Status-Automatik testen
|
|
- Fehlerbehebung
|
|
|
|
## Datenfluss
|
|
|
|
```mermaid
|
|
graph LR
|
|
A[Appwrite Auth] -->|User ID| B[employees Collection]
|
|
B -->|displayName, shortcode| C[Admin Panel]
|
|
C -->|CRUD Operations| B
|
|
B -->|employees List| D[CreateTicketModal]
|
|
D -->|assignedTo userId| E[workorders Collection]
|
|
E -->|Status Auto-Update| E
|
|
```
|
|
|
|
## Status-Automatik Logik
|
|
|
|
### Beim Erstellen (createWorkorder)
|
|
|
|
```javascript
|
|
const autoStatus = (data.assignedTo && data.assignedTo !== '') ? 'Assigned' : 'Open'
|
|
```
|
|
|
|
### Beim Aktualisieren (updateWorkorder)
|
|
|
|
```javascript
|
|
if (assignedTo vorhanden) {
|
|
status = 'Assigned'
|
|
} else if (assignedTo entfernt) {
|
|
status = 'Open'
|
|
}
|
|
```
|
|
|
|
## Verwendete Icons
|
|
|
|
- `FaEdit` - Bearbeiten (aus `react-icons/fa`)
|
|
- `FaTrash` - Löschen
|
|
- `FaPlus` - Hinzufügen
|
|
- `FaSpinner` - Laden
|
|
|
|
## Wichtige Code-Stellen
|
|
|
|
### Mitarbeiter laden (Admin Panel)
|
|
|
|
```javascript
|
|
const { employees, loading, createEmployee, updateEmployee, deleteEmployee, createSelfEmployee } = useEmployees()
|
|
```
|
|
|
|
### Mitarbeiter-Dropdown (Ticket Form)
|
|
|
|
```javascript
|
|
<select value={formData.assignedTo} onChange={(e) => handleChange('assignedTo', e.target.value)}>
|
|
<option value="">Unassigned</option>
|
|
{employees.map(emp => (
|
|
<option key={emp.$id} value={emp.userId}>
|
|
{emp.displayName}{emp.shortcode ? ` (${emp.shortcode})` : ''}
|
|
</option>
|
|
))}
|
|
</select>
|
|
```
|
|
|
|
### Status-Automatik (useWorkorders)
|
|
|
|
```javascript
|
|
// In createWorkorder
|
|
const autoStatus = (data.assignedTo && data.assignedTo !== '') ? 'Assigned' : 'Open'
|
|
workorderData.status = data.status || autoStatus
|
|
|
|
// In updateWorkorder
|
|
if (updateData.assignedTo && updateData.assignedTo !== '') {
|
|
updateData.status = 'Assigned'
|
|
} else if (!updateData.status) {
|
|
updateData.status = 'Open'
|
|
}
|
|
```
|
|
|
|
## Nächste Schritte
|
|
|
|
### Sofort erforderlich:
|
|
1. ✅ Appwrite `employees` Collection erstellen
|
|
2. ✅ Collection ID in `src/lib/appwrite.js` eintragen
|
|
3. ✅ `assignedTo` Attribut zu `workorders` Collection hinzufügen
|
|
4. ✅ App starten und testen
|
|
|
|
### Optional (Verbesserungen):
|
|
1. **Bulk-Import**: Mitarbeiter aus CSV importieren
|
|
2. **Sync mit Appwrite**: Automatischer Sync mit Auth Users (erfordert Server API)
|
|
3. **Mitarbeiter-Filter**: Aktiv/Inaktiv Status
|
|
4. **Ticket-Statistiken**: Anzahl zugewiesener Tickets pro Mitarbeiter
|
|
5. **Benachrichtigungen**: Email-Benachrichtigung bei Ticket-Zuweisung
|
|
6. **Rollen**: Verschiedene Mitarbeiter-Rollen (Techniker, Manager, etc.)
|
|
|
|
## Bekannte Einschränkungen
|
|
|
|
1. **Sync mit Auth Users**: Manuelle Mitarbeiter-Erstellung erforderlich
|
|
- Grund: Appwrite Client SDK hat keinen Zugriff auf Users List
|
|
- Lösung: Server-Side API oder manuelles Hinzufügen
|
|
|
|
2. **Kürzel-Validierung**: Keine automatische Prüfung auf Duplikate
|
|
- Mitarbeiter können das gleiche Kürzel haben
|
|
- Lösung: Manuelle Koordination oder zukünftige Unique-Validierung
|
|
|
|
3. **Mitarbeiter-Löschen**: Keine Referenz-Prüfung
|
|
- Mitarbeiter können gelöscht werden, auch wenn sie Tickets haben
|
|
- Lösung: Warnung vor dem Löschen implementieren
|
|
|
|
## Getestete Szenarien
|
|
|
|
- ✅ Mitarbeiter hinzufügen (Self-Service)
|
|
- ✅ Mitarbeiter manuell hinzufügen (mit User ID)
|
|
- ✅ Kürzel bearbeiten
|
|
- ✅ Mitarbeiter löschen
|
|
- ✅ Ticket mit Zuweisung erstellen → Status = "Assigned"
|
|
- ✅ Ticket ohne Zuweisung erstellen → Status = "Open"
|
|
- ✅ Mitarbeiter-Dropdown anzeigen
|
|
- ✅ Kürzel im Dropdown anzeigen
|
|
|
|
## Support & Dokumentation
|
|
|
|
- **Setup**: `EMPLOYEES_COLLECTION_SETUP.md`
|
|
- **Testing**: `EMPLOYEE_WORKFLOW_TEST.md`
|
|
- **Appwrite Docs**: https://appwrite.io/docs
|
|
- **React Icons**: https://react-icons.github.io/react-icons/
|
|
|
|
## Changelog
|
|
|
|
### v1.0.0 (2024-06-18)
|
|
- ✅ employees Collection Schema definiert
|
|
- ✅ useEmployees Hook implementiert
|
|
- ✅ Admin Panel erweitert
|
|
- ✅ CreateTicketModal erweitert
|
|
- ✅ Status-Automatik implementiert
|
|
- ✅ Dokumentation erstellt
|
|
|