# WOID Attribut für workorders Collection

## Was ist die WOID?

Die **WOID (Work Order ID)** ist eine **5-stellige Zahl** (10000-99999), die jedes Ticket eindeutig identifiziert.

Beispiele: `10234`, `54321`, `99999`

## Appwrite Setup

Das `woid` Attribut muss zur `workorders` Collection hinzugefügt werden:

### Schritt 1: Öffne Appwrite

1. Gehe zu: `https://appwrite.webklar.com`
2. Öffne dein Projekt: **woms** (ID: `693d9f37000b35267f1b`)
3. Gehe zu **Databases** → **woms-database** (ID: `6943bf0e0003291f8c35`)
4. Öffne die Collection: **workorders** (ID: `6943bf7d001901baa60c`)

### Schritt 2: Erstelle das woid Attribut

1. Klicke auf **Attributes** Tab
2. Klicke auf **Create Attribute**
3. Wähle **String** als Typ
4. Konfiguration:
   - **Attribute Key**: `woid`
   - **Size**: 10
   - **Required**: ❌ Nein (für bestehende Tickets ohne WOID)
   - **Array**: ❌ Nein
   - **Default Value**: (leer lassen)

5. Klicke auf **Create**

### Schritt 3: Optional - Index erstellen

Für schnellere Suche nach WOID:

1. Gehe zum **Indexes** Tab
2. Klicke auf **Create Index**
3. Konfiguration:
   - **Index Key**: `woid_index`
   - **Type**: Key
   - **Attributes**: Wähle `woid`
   - **Order**: ASC

4. Klicke auf **Create**

## Wie funktioniert die WOID?

### Automatische Generierung

Beim Erstellen eines neuen Tickets wird automatisch eine 5-stellige WOID generiert:

```javascript
// Beispiel: 12345, 54321, 99999
const generateWOID = () => {
  const timestamp = Date.now().toString()
  const random = Math.floor(Math.random() * 90000) + 10000
  const combined = (parseInt(timestamp.slice(-5)) + random) % 90000 + 10000
  return combined.toString().padStart(5, '0')
}
```

### Anzeige in der App

- **Ticket-Liste**: Zeigt die WOID in der ersten Spalte
- **Ticket-Details**: WOID im Header
- **Filter**: Suche nach WOID möglich

### Format

- **Länge**: Immer 5 Zeichen
- **Typ**: Nur Zahlen (0-9)
- **Bereich**: 10000-99999
- **Beispiele**: `10234`, `54321`, `99999`

## Bestehende Tickets

Tickets die vor diesem Update erstellt wurden, haben möglicherweise keine WOID.

**Fallback:** Wenn keine WOID vorhanden ist, werden die letzten 5 Zeichen der Document ID angezeigt.

## Fehlerbehebung

### "Unknown attribute: woid"

**Problem:** Das `woid` Attribut existiert nicht in der Collection.

**Lösung:** Folge Schritt 2 oben, um das Attribut zu erstellen.

### WOID zeigt Buchstaben

**Problem:** Alte Tickets haben keine WOID und verwenden den Fallback (Document ID).

**Lösung:** 
1. Erstelle das `woid` Attribut (Schritt 2)
2. Neue Tickets bekommen automatisch eine WOID
3. Optional: Bestehende Tickets manuell aktualisieren

### WOID Duplikate

**Problem:** Zwei Tickets haben die gleiche WOID (sehr unwahrscheinlich).

**Lösung:** Der Algorithmus verwendet Timestamp + Zufallszahl für Eindeutigkeit. Bei Millionen von Tickets könnte theoretisch eine Kollision auftreten.

**Verbesserung:** Verwende einen Index mit `unique: true` und behandle Fehler beim Erstellen.

## Technische Details

### Datentyp in Appwrite

- **String** (nicht Integer), weil:
  - Führende Nullen möglich (z.B. `00123`)
  - Einfacher zu suchen und zu filtern
  - Kompatibel mit verschiedenen Formaten

### Speicherung

```javascript
workorderData = {
  // ...
  woid: "12345", // String mit 5 Ziffern
  // ...
}
```

### Anzeige

```javascript
// In TicketRow.jsx
<div>{ticket.woid || ticket.$id?.slice(-5)}</div>
```

## Fertig!

Nach dem Erstellen des `woid` Attributs:
- ✅ Neue Tickets bekommen automatisch eine 5-stellige WOID
- ✅ WOID wird in der Ticket-Liste angezeigt
- ✅ Suche nach WOID funktioniert
- ✅ Keine Buchstaben mehr in der WOID

