# Prüfungssystem für Container

## Übersicht

Das Prüfungssystem ermöglicht es, wiederkehrende Prüfungen für Container zu verwalten und automatische E-Mail-Benachrichtigungen zu versenden.

## Features

- ✅ **Prüfungen erstellen/bearbeiten/löschen**
- ✅ **Wiederkehrende Intervalle**: Wöchentlich, Monatlich, Vierteljährlich, Halbjährlich, Jährlich
- ✅ **Automatische Berechnung der nächsten Prüfung**
- ✅ **Statusanzeige**: Aktiv, Inaktiv, Überfällig, Anstehend
- ✅ **Filter und Suche**
- ✅ **E-Mail-Benachrichtigungen an Prüfer**
- ✅ **Konfigurierbare Vorlaufzeit** (z.B. 7 Tage vor Prüfung)

## Verwendung

### 1. Prüfung erstellen

1. Gehen Sie zu `/public/container/{id}` → **"Prüfungen"** Tab
2. Klicken Sie auf **"Prüfung hinzufügen"**
3. Füllen Sie das Formular aus:
   - **Prüfungsbezeichnung** (z.B. "Wasserqualitätsprüfung")
   - **Intervall** (Wöchentlich, Monatlich, etc.)
   - **Startdatum**
   - **Beschreibung** (optional)
   - **Prüfer Name & E-Mail** (optional)
   - **Tage vor Prüfung benachrichtigen** (z.B. 7)

4. Speichern Sie die Prüfung

### 2. E-Mail-Benachrichtigungen einrichten

Die E-Mail-Benachrichtigungen werden automatisch versendet, wenn:
- Die Prüfung **aktiv** ist
- Die **E-Mail-Benachrichtigung** aktiviert ist
- Ein **Prüfer** mit E-Mail hinterlegt ist
- Die konfigurierte **Vorlaufzeit** erreicht ist

**Beispiel:**
- Prüfdatum: 15.01.2025
- Vorlaufzeit: 7 Tage
- → E-Mail wird am 08.01.2025 versendet

### 3. Cron-Job einrichten

Für automatische E-Mail-Benachrichtigungen müssen Sie einen Cron-Job einrichten:

**Option A: Direkt im Terminal (Linux/Mac)**
```bash
crontab -e
```

Fügen Sie diese Zeile hinzu:
```bash
# Prüfungsbenachrichtigungen (täglich um 8 Uhr)
0 8 * * * cd /var/www/html/ksbdueren && php bin/console app:inspection:notify
```

**Option B: Windows Task Scheduler**
1. Öffnen Sie den **Task Scheduler**
2. Erstellen Sie eine neue Aufgabe
3. Trigger: Täglich um 8:00 Uhr
4. Aktion: Programm starten
5. Programm: `php`
6. Argumente: `bin/console app:inspection:notify`
7. Startverzeichnis: `C:\xampp\htdocs\test_projekt`

**Option C: Manuell testen**
```bash
php bin/console app:inspection:notify
```

## E-Mail-Konfiguration

Stellen Sie sicher, dass Ihr E-Mail-System konfiguriert ist in `.env`:

```env
MAILER_DSN=smtp://user:pass@smtp.example.com:587
```

Siehe auch: `EMAIL_SETUP.md`

## Status-Bedeutungen

| Status | Beschreibung | Farbe |
|--------|--------------|-------|
| **Aktiv** | Prüfung ist aktiv und läuft | Grün |
| **Inaktiv** | Prüfung wurde deaktiviert | Grau |
| **Überfällig** | Nächste Prüfung ist in der Vergangenheit | Rot |
| **Anstehend** | Nächste Prüfung ist in den nächsten 7 Tagen | Gelb |

## Filter

- **Alle**: Zeigt alle Prüfungen
- **Überfällig**: Prüfungen, die bereits fällig sind
- **Anstehend**: Prüfungen in den nächsten 7 Tagen
- **Aktiv**: Nur aktive Prüfungen

## Intervall-Berechnung

Die **nächste Prüfung** wird automatisch berechnet basierend auf:

- **Startdatum** oder
- **Letzte Prüfung** (falls vorhanden)
- **Intervall** (7, 30, 90, 180, 365 Tage)

Wenn Sie eine Prüfung als "Durchgeführt" markieren möchten, setzen Sie das **"Letzte Prüfung"** Datum. Die nächste Prüfung wird dann automatisch neu berechnet.

## API Endpoints

- `GET /api/container/{id}/inspections` - Liste aller Prüfungen
- `POST /api/container/{id}/inspections` - Neue Prüfung erstellen
- `PUT /api/container/{id}/inspections/{inspectionId}` - Prüfung aktualisieren
- `DELETE /api/container/{id}/inspections/{inspectionId}` - Prüfung löschen

## Technische Details

### Datenbank
- Entity: `ContainerInspection`
- Relation: `ManyToOne` zu `Container`
- Repository: `ContainerInspectionRepository`

### Frontend
- Template: `templates/container/partials/_inspections.html.twig`
- JavaScript: `public/js/container/inspections.js`
- CSS: `public/css/container/inspections.css`

### Backend
- Controller: `App\Controller\Api\ContainerInspectionController`
- Command: `App\Command\InspectionNotificationCommand`

## Troubleshooting

**Problem: E-Mails werden nicht versendet**
1. Prüfen Sie die E-Mail-Konfiguration in `.env`
2. Führen Sie den Command manuell aus: `php bin/console app:inspection:notify`
3. Prüfen Sie die Logs: `var/log/dev.log`

**Problem: Cron-Job läuft nicht**
1. Prüfen Sie die Cron-Tab: `crontab -l`
2. Prüfen Sie die Logs: `/var/log/cron.log`
3. Testen Sie manuell: `php bin/console app:inspection:notify`

**Problem: Nächste Prüfung wird nicht berechnet**
- Stellen Sie sicher, dass ein "Startdatum" gesetzt ist
- Bei Änderungen wird die nächste Prüfung automatisch neu berechnet
