firstOrCreate( ['stripe_invoice_id' => $invoiceId], [ 'subscription_id' => $subscription->id, 'level' => 0, 'opened_at' => $now, // Die erste Mahnung, nicht der Hinweis: der geht sofort hinaus. 'next_step_at' => $now->copy()->addDays(DunningSchedule::dayOfLevel(1)), 'fee_invoice_ids' => [], 'notified_levels' => [], ], ); // Der Hinweis geht SOFORT hinaus, nicht erst mit dem Tageslauf: der // Kunde soll von der gescheiterten Abbuchung erfahren, solange er noch // weiss, wovon die Rede ist. Nur beim ERSTEN Mal — wasRecentlyCreated // unterscheidet das Eröffnen vom Wiedersehen derselben Rechnung. if ($case->wasRecentlyCreated) { app(DunningMailer::class)->level($case->load('subscription.customer'), 0); // VERMERKEN, sonst hält der Nachhol-Lauf des nächsten Tages diese // Nachricht für verloren und schickt dem Kunden dieselbe Mail ein // zweites Mal. Erst nach dem Einreihen: andersherum stünde hier // eine Nachricht, die nie einging. $case->update(['notified_levels' => [0]]); } return $case; } }