# Worksheets Collection Setup ## 📋 Was ist ein Worksheet (WSID)? Ein **Worksheet** ist ein **Arbeitsschritt-Eintrag** für einen Work Order (Ticket). Jedes Mal, wenn ein Techniker an einem Ticket arbeitet, wird ein neues Worksheet erstellt. ### Unterschied: WOID vs WSID | Konzept | Beschreibung | Beispiel | |---------|--------------|----------| | **WOID** (Work Order ID) | Das Haupt-Ticket | 59203 | | **WSID** (Work Sheet ID) | Einzelner Arbeitsschritt | 100001 | **Beziehung:** Ein WOID kann **viele WSIDs** haben (1:n) ### Beispiel aus der Praxis: ``` Ticket WOID 59203: "Router-Problem bei Kunde XYZ" ├── WSID 100001 (29.12.2025, 10:00-10:30, Max M.) │ └── "Fernanalyse durchgeführt, Router neu gestartet" │ Status: Open → Occupied │ ├── WSID 100002 (29.12.2025, 14:00-14:45, Max M.) │ └── "Firmware Update durchgeführt" │ Status: Occupied → Assigned │ └── WSID 100003 (30.12.2025, 09:00-09:15, Lisa S.) └── "Vor-Ort-Check: Alles funktioniert" Status: Assigned → Closed ``` **Gesamtarbeitszeit für WOID 59203:** 30 + 45 + 15 = **90 Minuten** --- ## 🔧 Appwrite Collection einrichten ### Collection erstellen 1. Gehe zu **Appwrite Dashboard** → **Databases** → `woms-database` 2. Klicke auf **Create Collection** 3. **Collection ID:** `worksheets` 4. **Name:** `Work Sheets` ### Attribute hinzufügen | Attribut Name | Typ | Größe | Required | Array | Default | Beschreibung | |--------------|-----|-------|----------|-------|---------|--------------| | `wsid` | string | 10 | ✓ | - | - | Work Sheet ID (6-stellig, z.B. "100000") | | `woid` | string | 10 | ✓ | - | - | Verknüpfter Work Order (z.B. "59203") | | `workorderId` | string | 50 | ✓ | - | - | Appwrite Document ID des Work Orders | | `employeeId` | string | 50 | ✓ | - | - | ID des Mitarbeiters (aus Auth) | | `employeeName` | string | 255 | ✓ | - | - | Name des Mitarbeiters | | `employeeShort` | string | 10 | - | - | - | Kürzel (z.B. "KNSO") | | `serviceType` | string | 50 | ✓ | - | `Remote` | Remote/On Site/Off Site/COMMENT | | `oldStatus` | string | 50 | ✓ | - | - | Status vorher | | `newStatus` | string | 50 | ✓ | - | - | Status nachher | | `oldResponseLevel` | string | 50 | - | - | - | Response Level vorher | | `newResponseLevel` | string | 50 | - | - | - | Response Level nachher | | `totalTime` | integer | - | ✓ | - | `0` | Arbeitszeit in Minuten | | `startDate` | string | 50 | ✓ | - | - | Startdatum (dd.mm.yyyy) | | `startTime` | string | 10 | - | - | - | Startzeit (hhmm) | | `endDate` | string | 50 | ✓ | - | - | Enddatum (dd.mm.yyyy) | | `endTime` | string | 10 | - | - | - | Endzeit (hhmm) | | `details` | string | 10000 | ✓ | - | - | Beschreibung der Arbeit | | `isComment` | boolean | - | - | - | `false` | Nur Kommentar (keine Arbeitszeit) | | `createdAt` | datetime | - | - | - | - | Erstellungszeitpunkt | ### Permissions einrichten 1. Gehe zu **Settings** → **Permissions** 2. Setze folgende Berechtigungen: **Read Access:** - ✅ `Users` (Alle eingeloggten Benutzer können Worksheets lesen) **Create Access:** - ✅ `Users` (Alle eingeloggten Benutzer können Worksheets erstellen) **Update Access:** - ✅ `Users` (Eigene Worksheets können bearbeitet werden) **Delete Access:** - ❌ Keine (Worksheets sollten nicht gelöscht werden - Audit Trail!) ### Indexes erstellen Für bessere Performance: 1. **Index 1: woid_index** - Key: `woid` - Type: `key` - Order: `DESC` - → Schnelles Finden aller Worksheets für einen Work Order 2. **Index 2: employee_index** - Key: `employeeId` - Type: `key` - Order: `DESC` - → Schnelles Finden aller Worksheets eines Mitarbeiters 3. **Index 3: date_index** - Key: `startDate` - Type: `key` - Order: `DESC` - → Zeitbasierte Abfragen --- ## 🎯 WSID-Generierung ### Regeln: - **6-stellige Zahlen** (100000, 100001, 100002, ...) - **Global eindeutig** (über alle Work Orders hinweg) - **Sequentiell aufsteigend** - **Nur Zahlen**, keine Buchstaben ### Algorithmus: 1. Finde höchste existierende WSID in der Datenbank 2. Addiere +1 3. Falls keine WSID existiert: Starte bei 100000 --- ## 📊 Verbesserungen gegenüber dem Original ### 1. Automatische Zeitberechnung - System berechnet `totalTime` aus `startTime` und `endTime` - Manuelles Überschreiben möglich ### 2. Arbeitszeit-Aggregation - Gesamtarbeitszeit pro WOID wird automatisch berechnet - Anzeige: "Gesamt: 90 Minuten (3 Worksheets)" ### 3. Status-Historie - Komplette Historie: Wer hat wann welchen Status gesetzt? - Nachvollziehbarkeit ### 4. Kommentar-Funktion - Worksheets mit `isComment = true` zählen keine Arbeitszeit - Reine Notizen/Updates ### 5. Mitarbeiter-Zuordnung - Jedes Worksheet ist einem Mitarbeiter zugeordnet - Report: Wer hat wie viel Zeit investiert? --- ## 🔗 Integration in Work Orders ### Beim Anzeigen eines Tickets: ```javascript // Work Order laden const workorder = await getWorkorder(woid) // Alle Worksheets zu diesem Work Order laden const worksheets = await getWorksheets(woid) // Gesamtarbeitszeit berechnen const totalMinutes = worksheets.reduce((sum, ws) => sum + ws.totalTime, 0) ``` ### Beim Erstellen eines Worksheets: 1. Aktuellen Work Order Status holen 2. Worksheet-Formular anzeigen (mit aktuellem Status als "old status") 3. Worksheet speichern 4. Work Order Status aktualisieren (auf "new status") --- ## 📝 Workflow-Beispiel **Techniker Max öffnet Ticket 59203:** 1. Klickt auf "Add Worksheet" 2. System füllt aus: - WOID: 59203 - Old Status: "Open" - Employee: "Max Müller" (aus Login) - Datum: heute 3. Max trägt ein: - Service Type: "Remote" - New Status: "Occupied" - Start: 10:00, End: 10:30 (→ automatisch 30 min) - Details: "Router neu gestartet" 4. System generiert WSID: 100001 5. Work Order Status wird auf "Occupied" aktualisiert --- ## ✅ Checkliste - [ ] Collection `worksheets` in Appwrite erstellt - [ ] Alle Attribute hinzugefügt - [ ] Permissions konfiguriert - [ ] Indexes erstellt - [ ] Collection ID in `.env` / `appwrite.js` eingetragen --- ## 🚀 Nächste Schritte Nach dem Setup: 1. `useWorksheets.js` Hook implementieren 2. `CreateWorksheetModal.jsx` Komponente erstellen 3. Worksheet-Liste in Ticket-Details einbauen 4. Zeitaggregation implementieren