# Payment Reminder Cron-Job Einrichtung

## Übersicht

Der `PaymentsReminders` Command automatisiert das Senden von Zahlungserinnerungen basierend auf den konfigurierten Intervallen in der Datenbank.

## Command ausführen

```bash
php artisan payments:reminders
```

## Cron-Job Konfiguration

### 1. Crontab öffnen

```bash
crontab -e
```

### 2. Cron-Job hinzufügen

**Täglich um 9:00 Uhr:**

```bash
0 9 * * * cd /path/to/your/project && php artisan payments:reminders >> /dev/null 2>&1
```

**Stündlich:**

```bash
0 * * * * cd /path/to/your/project && php artisan payments:reminders >> /dev/null 2>&1
```

**Alle 6 Stunden:**

```bash
0 */6 * * * cd /path/to/your/project && php artisan payments:reminders >> /dev/null 2>&1
```

### 3. Cron-Job testen

```bash
# Teste den Command manuell
php artisan payments:reminders

# Prüfe die Logs
tail -f storage/logs/laravel.log
```

## Funktionsweise

### 1. Intervall-basierte Verarbeitung

- Der Command holt alle aktiven `PaymentReminder` aus der Datenbank
- Gruppiert sie nach `clearingtype` (z.B. 'invoice', 'prepayment')
- Verwendet das kleinste Intervall pro `clearingtype`

### 2. Zahlungsprüfung

- Sucht offene Zahlungen, die älter als das konfigurierte Intervall sind
- Berücksichtigt nur die neueste Zahlung pro Bestellung
- Prüft nur Live-Zahlungen (nicht Test)

### 3. Erinnerungslogik

- **Erste Erinnerung**: Nach X Tagen ab Bestelldatum
- **Weitere Erinnerungen**: Nach Y Tagen ab letzter Erinnerung
- Stoppt wenn alle konfigurierten Erinnerungen gesendet wurden

### 4. Automatische Aktionen

- E-Mail-Versand mit Platzhalter-Ersetzung
- Optional: Bestellung auf "Storniert" setzen
- Optional: Payment auf "non" Status setzen
- Logging aller Aktivitäten

## Logging

### Command-Logs

```bash
# Live-Logs während der Ausführung
php artisan payments:reminders

# Beispiel-Output:
RUN Command Payments Reminders: 15.12.2024 09:00
=== STARTE PAYMENT REMINDERS ===
Gefundene aktive PaymentReminder: 3
Gefundene clearingtypes mit kleinsten Intervallen:
  - invoice: 7 Tage
  - prepayment: 3 Tage
--- Verarbeite clearingtype: invoice mit Intervall: 7 Tage ---
Suche Zahlungen vor: 08.12.2024 09:00:00
Gefundene offene Zahlungen für invoice: 5
  Verarbeite Order ID: 12345, Created: 05.12.2024 10:30:00, Amount: 5000, Reminder: 0
    📧 Sende Erinnerung...
    ✅ Erinnerung erfolgreich gesendet
=== PAYMENT REMINDERS ABGESCHLOSSEN ===
Ausführungszeit: 2.34 Sekunden
Statistiken:
  - Gesamt verarbeitet: 5
  - Erinnerungen gesendet: 3
  - Fehler: 0
  - Übersprungen: 2
```

### Laravel-Logs

```bash
# Logs in storage/logs/laravel.log
tail -f storage/logs/laravel.log | grep "Payment reminder"
```

## Konfiguration

### PaymentReminder Einstellungen

```sql
-- Beispiel-Konfiguration
INSERT INTO payment_reminders (clearingtype, interval, subject, message, action, active) VALUES
('invoice', 7, 'Zahlungserinnerung - Bestellung {order_number}', 'Sehr geehrte/r {billing_first_name}...', NULL, 1),
('invoice', 14, '2. Zahlungserinnerung - Bestellung {order_number}', 'Sehr geehrte/r {billing_first_name}...', NULL, 1),
('invoice', 21, 'Letzte Zahlungserinnerung - Bestellung {order_number}', 'Sehr geehrte/r {billing_first_name}...', 'set_order_status_cancelled', 1);
```

### Platzhalter

- `{billing_first_name}` - Vorname
- `{billing_last_name}` - Nachname
- `{order_number}` - Bestellnummer
- `{order_date}` - Bestelldatum
- `{order_total}` - Bestellsumme

## Monitoring

### 1. Log-Statistiken

- Admin-Bereich: `/admin/payments/reminder/logs`
- Zeigt Statistiken der letzten 7, 30 und 90 Tage
- Filter nach Order ID, Aktion und Datum

### 2. Erfolgsrate

- E-Mails gesendet vs. Fehler
- Aktionen ausgeführt
- Übersprungene Erinnerungen

### 3. Performance

- Ausführungszeit pro Lauf
- Anzahl verarbeiteter Zahlungen
- Speicherverbrauch

## Troubleshooting

### Häufige Probleme

**1. Command läuft nicht**

```bash
# Prüfe PHP-Pfad
which php

# Prüfe Projekt-Pfad
pwd

# Teste Command manuell
php artisan payments:reminders
```

**2. Keine E-Mails werden gesendet**

```bash
# Prüfe Mail-Konfiguration
php artisan config:cache

# Prüfe Logs
tail -f storage/logs/laravel.log
```

**3. Falsche Intervalle**

```bash
# Prüfe PaymentReminder-Konfiguration
php artisan tinker
>>> App\Models\PaymentReminder::where('active', true)->get()
```

**4. Cron-Job läuft nicht**

```bash
# Prüfe Crontab
crontab -l

# Prüfe Cron-Logs
sudo tail -f /var/log/cron

# Teste mit absoluten Pfaden
0 9 * * * /usr/bin/php /path/to/project/artisan payments:reminders
```

## Sicherheit

### 1. Berechtigungen

```bash
# Stelle sicher, dass der Webserver-Benutzer Schreibrechte hat
chown -R www-data:www-data storage/logs
chmod -R 755 storage/logs
```

### 2. Log-Rotation

```bash
# Konfiguriere Log-Rotation in /etc/logrotate.d/laravel
/path/to/project/storage/logs/*.log {
    daily
    missingok
    rotate 52
    compress
    notifempty
    create 644 www-data www-data
}
```

### 3. Backup

```bash
# Backup der PaymentReminder-Konfiguration
mysqldump -u username -p database payment_reminders > payment_reminders_backup.sql
```

## Performance-Optimierung

### 1. Batch-Verarbeitung

- Der Command verarbeitet Zahlungen in Batches
- Verwendet Datenbank-Indizes für bessere Performance

### 2. Memory-Management

- Garbage Collection nach jeder Zahlung
- Begrenzte Anzahl von Logs

### 3. Timeout-Handling

- Lange Ausführungen werden abgebrochen
- Fehler werden geloggt und übersprungen
