Scheduled job, rappel de visite lorsque la date de la dernière visite est dépassée

Hicham-dev
Tera Contributor
Bonjour,
 
Voici un Scheduled Job sur ServiceNow qui vous permettra d'envoyer un rappel de visite lorsque la date de la dernière visite est dépassée. Le script prend également en compte le cas où la date de la dernière visite est saisie pour la première fois, sachant que le formulaire s'appelle" contrat" et que le champ des numéros de contrat est "number".
 
Je vais le tester ce soir et j'aimerai savoir s'il est correct pour vous ?
 
Merci d'avance.
 
 
(function executeRule(current, previous /*,  SLA*/) {
    //Requête Contrat
    var contracts = new GlideRecord('U_contrat');
    contracts.addQuery('assigned_to', 'ISNOTEMPTY');
    contracts.query();

 

    //Vérifiez et envoyez un rappel pour chaque contrat
    while (contracts.next()) {
        checkAndSendReminder(contracts);
    }
})(current, previous);

 

    //Traiter le contrat individuel
function checkAndSendReminder(contract) {
    try {
        var frequency = contract.getValue('u_frequence_de_visite');
        var diff = new GlideDateTime().getNumericValue() - new GlideDateTime(contract.getValue('u_date_de_la_derniere_visite_client')).getNumericValue();
        var days = Math.floor(diff / (1000 * 60 * 60 * 24));

 

            //Initialiser la date de visite si vide
        if (contract.getValue('u_date_de_la_derniere_visite_client') === '') {
            contract.setValue('u_date_de_la_derniere_visite_client', contract.getValue('u_datedebut'));
            contract.update();
        }
            //Vérifier les visites en retard
        if (days > getFrequencyInDays(frequency)) {
            var subject = "Rappel de visite " + frequency + " pour le contrat #" + contract.getValue('number');
            var body = "La date de visite " + frequency + " pour le contrat #" + contract.getValue('number') + " est dépassée. Veuillez contacter le client pour convenir d'un nouveau rendez-vous.";

 

            //Envoyer un e-mail de rappel
            var email = new GlideRecord('sys_email');
            email.initialize();
            email.setValue('subject', subject);
            email.setValue('body', body);
            email.setValue('to', contract.getValue('assigned_to'));
            var emailSysId = email.insert();

 

            // Vérifiez si l'e-mail a été envoyé avec succès
            if (emailSysId) {
                gs.info("E-mail de rappel envoyé avec succès pour le contrat #" + contract.getValue('number'));
            } else {
                gs.error("Échec de l'envoi d'un e-mail de rappel pour le contrat #" + contract.getValue('number'));
            }
        }
    } catch (error) {
        gs.error("Error in checkAndSendReminder: " + error.message);
    }
}
    //Convertir la fréquence de visite en nombre de jours.
function getFrequencyInDays(frequency) {
    var frequencyMap = {
        mensuel: 30,
        trimestriel: 90,
        semestrielle: 180,
        annuelle: 365
    };

 

    return frequencyMap[frequency] || 0;
}
 
Le formulaire est en pièce jointe   !!!!!!
0 REPLIES 0