addDays($threshold); // 1. Contrats arrivant à échéance $contrats = Contrat::whereBetween('date_echeance', [$today, $limitDate]) ->whereNotIn('statut', ['resilie', 'expire']) ->get(); // 2. Licences expirant bientôt $licences = Licence::whereBetween('date_expiration', [$today, $limitDate]) ->get(); // 3. Garanties d'assets expirant bientôt $assets = Asset::whereBetween('date_fin_garantie', [$today, $limitDate]) ->get(); // 4. Domaines arrivant à échéance $domaines = Domaine::whereBetween('date_echeance', [$today, $limitDate]) ->get(); if ($contrats->isEmpty() && $licences->isEmpty() && $assets->isEmpty() && $domaines->isEmpty()) { $this->info('Aucun élément n\'arrive à échéance prochainement.'); return 0; } $this->info(sprintf( 'Trouvé : %d contrats, %d licences, %d assets et %d domaines à notifier.', $contrats->count(), $licences->count(), $assets->count(), $domaines->count() )); // Récupérer les administrateurs et responsables $recipients = User::role(['admin', 'responsable'])->get(); if ($recipients->isEmpty()) { $this->warn('Aucun destinataire (admin ou responsable) trouvé.'); return 0; } foreach ($recipients as $recipient) { Mail::to($recipient->email)->send(new ExpiringElementsMail($contrats, $licences, $assets, $domaines)); } $this->info('Emails de notification envoyés.'); return 0; } }