Besoin d'aide ?

Probleme de l'envoie du mail lorsqu'une tache est en retard

Avatar de SAWADOGOSIDIKI
SAWADOGOSIDIKI

Dans mon appplication je gère les programmes. Ils ont une date de debut et une date de fin. ils ont des statut(crée, en cours, finalisé, et retard). je veux envoyé un mail aux utilisateurs de ce programme deux jours avant que la tache ne soit en retard. Comment envoyé ce mail à chaque utilisateur de programme avant que la tache ne soit en retard??

$dateActuel = date('Y-m-d'); $programs = Program::all();

    foreach ($programs as $program) {
        if (($program->created_at <= $program->date_debut) && ($program->progression == 0)) {

            $program->update([
                "statut_id" => Statut::whereNom('crée')->first()->id,
            ]);
        }

        if (($program->progression < 100 || $program->progression != 0) && (($program->date_debut <= $dateActuel) && ($program->date_fin >= $dateActuel))) {

            $program->update([
                "statut_id" => Statut::whereNom('en cours')->first()->id,
            ]);
        }


        if (($program->date_debut < $dateActuel) && ($program->progression == 100)) {
            // $program-
            $program->update([
                "statut_id" => Statut::whereNom('finalisée')->first()->id,
            ]);
        }

        if (($dateActuel > $program->date_fin) && ($program->progression < 100)) {
            $program->update([
                "statut_id" => Statut::whereNom('retard')->first()->id,
            ]);
        }
    }
    return view("pages.gestions.programmes.index", [
        "dateActuel" => date('Y-m-d'),
        "programs" => $programs,
    ]);
Posté il y a 7 mois
Avatar de khalyomede
khalyomede

Bonsoir,

Il te suffit de boucler sur tous les programmes, de prendre seulement ceux qui ont une date de fin qui arrive dans moins de 2 jours, pour ensuite envoyer l'email aux destinataires.

A partie de là, tu as 2 stratégies :

  1. Lancer une tâche planifiée qui tournera à interval régulier, et qui s'occupera de récupérer les programmes qui finissent dans moins de 2 jours pour envoyer un email aux concernés
  2. Dès que tu crée ton programme, planifier une tâche planifiée pour dans 2 jours avant que ton programme ne se finisse

L'avantage de la solution 1. est que peut-importe si tu change la date, cette tâche fera toujours le calcul avec la date la plus à jour sur ton programme. Le désavantage c'est que ça tourne régulièrement, et parfois ne fera rien (donc consommera de la resource pour rien). C'est un Scheduled Task sur Laravel.

L'avantage de la solution 2. en contraste est que la tâche ne s'executera qu'au "bon" moment (2 jours exactement avant que le programme ne se finisse). Le désavantage, c'est que si tu permet de changer la date de fin de ton programme, tu devra en plus aller supprimer la tâche, puis en re-plannifier une pour la bonne date. C'est un Job sur Laravel.

Quelle solution conviendrait le mieux par rapport à tes contraintes business ? Egalement, comment est formée la relation entre un programme (Program) et un utilisateur (User) ? Peux-tu nous montrer les relationships dans les deux modèles ?

Posté il y a 7 mois
Avatar de SAWADOGOSIDIKI
SAWADOGOSIDIKI

ss

Posté il y a 7 mois

Vous ne pouvez pas répondre à ce sujet.