woms 3.0
This commit is contained in:
210
WORKSHEETS_COLLECTION_SETUP.md
Normal file
210
WORKSHEETS_COLLECTION_SETUP.md
Normal file
@@ -0,0 +1,210 @@
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user