gruene-seele/PAYMENT_REMINDER_CRON.md
2025-08-12 15:51:04 +02:00

249 lines
5.3 KiB
Markdown

# 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