249 lines
5.3 KiB
Markdown
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
|