# 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