action

Ajouter plusieurs boutons de gel pour différentes durées pendant les heures de bureau

// ==UserScript==
// @name         action
// @namespace    http://tampermonkey.net/
// @version      0.21
// @description  Ajouter plusieurs boutons de gel pour différentes durées pendant les heures de bureau
// @author       Tony Gargaud, Florian Villeret, Clément Bahuaud
// @match        *://*/*
// @match        https://tck.mydstny.fr/Ticket/*
// @match        https://tck.mydstny.fr/Secure/Tickets/Ticket/Detail?ticketId=*
// @match        https://tck.mydstny.fr/Tickets
// @match        https://extranet.kosc-telecom.fr/diagnostics/*
// @grant        GM_addStyle
// @grant        GM_xmlhttpRequest
// @grant        GM_setValue
// @grant        GM_getValue
// @license      MIT
// @require      https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js
// @require      https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/jquery-ui-timepicker-addon/1.6.3/jquery-ui-timepicker-addon.min.js
// ==/UserScript==

(function() {


        const currentURL = window.location.href;

    // extration des infos d'ouverture de ticket fournisseur

    // Prend la ref de liaison
    function getServiceStatus(element) {
        GM_xmlhttpRequest({
            method: 'GET',
            url: element.href,
            onload: function(response) {
                const parser = new DOMParser();
                const doc = parser.parseFromString(response.responseText, 'text/html');
                let tdList = doc.querySelectorAll('td');
                let state = null;

                for (let i = 0; i < tdList.length - 1; i++) {
                    if (tdList[i].textContent.trim() === 'Identifiant') {
                        state = tdList[i + 1].textContent.trim();
                        break;
                    }
                }

                if (state) {
                    console.log(state);
                    GM_setValue("RefLiaison", state);
                }
            }
        });
    }
// extration des infos
    function extraitlesdonnees() {

        let element = document.getElementById("main-questionnaire-container");
        if (element) {
            let dataValues = element.getAttribute("data-values");
            let parsedData = JSON.parse(dataValues);

            let contactPhone = parsedData["contact_sur_site_telephone"];
            // Assurez-vous d'extraire correctement les heures d'ouverture depuis votre source de données
            let openingHours = `${parsedData["horaires_matin"]} / ${parsedData["horaires_apres_midi"]}`;

            GM_setValue("contactPhone", contactPhone);
            GM_setValue("openingHours", openingHours); // Sauvegarde des heures d'ouverture

        }
    }

// FIN des extractions
// FIN des extractions
// FIN des extractions

//FONCTION POUR OUVERTURE LIEN ORANGE


    //CHECK DES LIENS

       function checkDSL() {
        // Recherche du formulaire par son identifiant textuel dans la page
        const formText = Array.from(document.querySelectorAll('td')).find(td => td.textContent.includes('FRM-DSLACCESSONLYETH'));
        return formText !== undefined; // Retourne true si le texte est trouvé, sinon false
    }

           function checkFTTH() {
        // Recherche du formulaire par son identifiant textuel dans la page
        const formText = Array.from(document.querySelectorAll('td')).find(td => td.textContent.includes('103_FRM_ARIANE_PBO'));
        return formText !== undefined; // Retourne true si le texte est trouvé, sinon false
    }


    // LISTE DES ACTIONS EN FONCTION DES LIENS

   function LienOrangeFTTH() {

     if (!checkFTTH()) {
            console.log('Lien FTTH non trouvé ❌');
            return; // Arrête l'exécution si le formulaire n'est pas présent
        }
       console.log('Lien FTTH trouvé ✅');
       // Numéro de téléphone
           let contactPhone = GM_getValue('contactPhone');
    if (contactPhone) {
        const inputField = document.querySelector('input[name="INFO_CONTACT_CLI"]');
        if (inputField) {
            inputField.value = contactPhone;
        }
    }

    // Horaires d'ouverture
    const openingHours = GM_getValue('openingHours');
    const openingHoursField = document.querySelector('input[name="INFO_HEUR_OUV_SITE"]');
    if (openingHoursField && openingHours) {
        openingHoursField.value = openingHours;
    }


        // Cocher les boutons radio
        document.querySelector('input[name="INFO_PRELOC"][value="PRELOC_CLI"]').checked = true;
        document.querySelector('input[name="INFO_ALIM"][value="VOYALIMBOX_VERTFIX"]').checked = true;
        document.querySelector('input[name="INFO_FIB"][value="VOYFIB_ETEINT"]').checked = true;
        document.querySelector('input[name="INFO_INT"][value="VOYINT_ETEINT"]').checked = true;
        document.querySelector('input[name="INFO_ALIM_ONT"][value="VOYALIMONT_VERTFIX"]').checked = true;
        document.querySelector('input[name="DEFECT_LOC_DEFAUT"][value="ONT_KO"]').checked = true;
        document.querySelector('input[name="forcing"][value="true"]').checked = true;


        // Cocher le checkbox
        document.querySelector('input[name="DEFECT_SYNCH_KO"]').checked = true;

        // Écrire dans le textarea
        const descriptionText = "Bonjour,\nNous constatons un défaut au niveau de l'ont, pouvez-vous intervenir ?";
        const descriptionTextarea = document.querySelector('textarea[name="description"]');
        if (descriptionTextarea) {
            descriptionTextarea.value = descriptionText;
        }
    }

function LienOrangeDSL() {
    if (!checkDSL()) {
        console.log('Lien DSL non trouvé ❌');
        return; // Arrête l'exécution si le formulaire n'est pas présent
    }
    console.log('Lien DSL trouvé ✅');

    // Numéro de téléphone
    let contactPhone = GM_getValue('contactPhone');
    if (contactPhone) {
        const inputField = document.querySelector('input[name="INFO_CONTACT_CLI"]');
        if (inputField) {
            inputField.value = contactPhone;
            GM_setValue('contactPhone', null); // Réinitialiser la clé 'contactPhone' à null
        }
    }

    // Horaires d'ouverture
    const openingHours = GM_getValue('openingHours');
    const openingHoursField = document.querySelector('input[name="INFO_HEUR_OUV_SITE"]');
    if (openingHoursField && openingHours) {
        openingHoursField.value = openingHours;
        GM_setValue('openingHours', null); // Réinitialiser la clé 'openingHours' à null
    }

    // Cocher les boutons radio
    document.querySelector('input[name="INFO_SECUR_SITE"][value="OUI"]').checked = true;
    document.querySelector('input[name="INFO_PRELOC"][value="PRELOC_CLI"]').checked = true;
    document.querySelector('input[name="forcing"][value="true"]').checked = true;

    // Cocher le checkbox
    document.querySelector('input[name="DEFECT_PLUS_SYNCH"]').checked = true;

    // Écrire dans le textarea
    const descriptionText = "Bonjour,\nNous constatons un défaut de ligne, pouvez-vous intervenir ?";
    const descriptionTextarea = document.querySelector('textarea[name="description"]');
    if (descriptionTextarea) {
        descriptionTextarea.value = descriptionText;
    }
}

//FIN FONCTION POUR OUVERTURE LIEN ORANGE
//FIN FONCTION POUR OUVERTURE LIEN ORANGE
//FIN FONCTION POUR OUVERTURE LIEN ORANGE
//FIN FONCTION POUR OUVERTURE LIEN ORANGE





    // Gestionnaire d'événement pour les raccourcis clavier
    document.addEventListener('keydown', function(e) {
        if (e.altKey && e.key === 'k') {
            handleShiftK();
        } else if (e.altKey && e.key === 'j') {
            askForNumber();
        }
    });

    // Fonctions spécifiques pour les raccourcis clavier
    function handleShiftK() {
        let selectedText = window.getSelection().toString();
        if (/^[\d .]+$/.test(selectedText)) {
            let formattedNumber = selectedText.replace(/[ .]/g, '');
            navigator.clipboard.writeText(formattedNumber)
                .then(() => console.log('Numéro copié dans le presse-papiers:', formattedNumber))
                .catch(err => console.error('Erreur lors de la copie:', err));
        } else {
            console.log('Le texte sélectionné n\'est pas un numéro.');
        }
    }

    // Fonction pour demander le numéro via une popup
    function askForNumber() {
        var numero = prompt("Entrez le numéro à rechercher :");
        if (numero !== null && numero.trim() !== '') {
            // Si l'utilisateur entre un numéro valide, ouvrir le site avec le numéro en tant que paramètre
            openSite(numero);
        }
    }

    // Fonction pour ouvrir le site avec le numéro en tant que paramètre
    function openSite(numero) {
        var siteUrl = 'https://jupiter.mydstny.fr/GestionDesNumeros/Liste';
        // Ajouter le numéro comme paramètre à l'URL du site
        siteUrl += '?number=' + encodeURIComponent(numero);
        // Ouvrir la page dans une nouvelle fenêtre
        window.open(siteUrl, '_blank');
        // Appliquer la recherche sur la nouvelle fenêtre
    }
      if (window.location.href.includes('https://jupiter.mydstny.fr/Secure/dbnum/list')) {
                // Fonction pour extraire le numéro de l'URL
        const params = new URLSearchParams(window.location.search);
        const numero = params.get('number'); // Récupère la valeur du paramètre 'number'
        if (numero) {
            console.log('Numéro extrait:', numero);
        // Mettre à jour le champ value de l'input
                document.getElementById('tx_number').value = numero;
                // Lancer la recherche en cliquant sur le bouton "Rechercher"
                document.querySelector("[name='search']").click();
        } else {
            console.log('Numéro non trouvé dans l\'URL');
        }

        

            }
           if (window.location.href.includes('https://jupiter.mydstny.fr/GestionDesNumeros/Liste')) {

                              // Fonction pour extraire le numéro de l'URL
        const params = new URLSearchParams(window.location.search);
        const numero = params.get('number'); // Récupère la valeur du paramètre 'number'
        if (numero) {
            console.log('Numéro extrait:', numero);
        // Mettre à jour le champ value de l'input
                document.getElementById('tx_number').value = numero;
                // Lancer la recherche en cliquant sur le bouton "Rechercher"
                document.querySelector("[name='search']").click();
        } else {
            console.log('Numéro non trouvé dans l\'URL');
        }

            }

      
    // Vérifier si l'URL actuelle correspond au modèle attendu
    if (window.location.href.match(/https:\/\/jupiter\.mydstny\.fr\/GestionDesNumeros\/Liste\?number=\d+/)) {
        // Extraire le numéro de l'URL
        var numeroFromUrl = window.location.href.match(/\?number=(\d+)/)[1];
        // Mettre à jour le champ value de l'input
        document.getElementById('tx_number').value = numeroFromUrl;
        // Lancer la recherche en cliquant sur le bouton "Rechercher"
        document.querySelector("[name='search']").click();
    }



if (window.location.href.includes('https://tck.mydstny.fr/Tickets')) {


        // Function to create buttons
        function createButton(id, text) {
            var button = document.createElement('button');
            button.type = 'submit';
            button.className = 'btn btn-gradient';
            button.id = id;
            button.textContent = text;
            button.style.margin = '5px';
            return button;
        }

        // Function to open links based on time criteria
        function openLinks(timeLimit) {
            var rows = document.querySelectorAll('tbody[data-tickets="all"] tr');
            rows.forEach(function(row) {
                var durationSpan = row.querySelector('td.text-center span[data-duration]');
                var duration = parseInt(durationSpan.getAttribute('data-duration'), 10);
                if (durationSpan && duration < 0 && duration >= timeLimit) {
                    var ticketLink = Array.from(row.querySelectorAll('td a[href]')).find(link => link.getAttribute('href').includes('Ticket'));
                    if (ticketLink) {
                        window.open(ticketLink.getAttribute('href'), '_blank');
                    }
                }
            });
        }




        // Find the target div
        var targetDiv = document.querySelector('.col-md-6');
        if (targetDiv) {
            // Add buttons to the target div
            targetDiv.appendChild(createButton('button-5hr', 'Ticket -05h00')).addEventListener('click', function() { openLinks(-18000); });
            targetDiv.appendChild(createButton('button-15hr', 'Ticket -15h00')).addEventListener('click', function() { openLinks(-54000); });
            targetDiv.appendChild(createButton('button-all-negative', 'Ticket négatif')).addEventListener('click', function() { openLinks(-Infinity); });
        }
}
if (window.location.href.includes('https://tck.mydstny.fr/Ticket')) {


    function retrieveRefLiaisonValue() {
        // Sélectionnez l'élément avec la classe "dl-flex"
        var dlElement = document.querySelector('.dl-flex');
        if (!dlElement) {
            console.log("Élément .dl-flex non trouvé.");
            return;
        }
        console.log("Élément .dl-flex trouvé.");

        // Trouver tous les liens dans l'élément avec la classe "dl-flex"
        var links = dlElement.querySelectorAll('a');
        var serLink = null;

        for (var i = 0; i < links.length; i++) {
            var linkText = links[i].textContent.trim();
            // Si le texte du lien commence par "SER" suivi de chiffres
            if (/^SER\d+$/.test(linkText)) {
                serLink = links[i];
                break;
            }
        }

        if (!serLink) {
            console.log("Lien SER non trouvé.");
            return;
        }
        console.log("Lien SER trouvé : " + serLink.href);

        // Utilisez l'URL du lien pour récupérer l'identifiant
        GM_xmlhttpRequest({
            method: "GET",
            url: serLink.href,
            onload: function(response) {
                console.log("Requête GET effectuée sur l'URL : " + serLink.href);

                var parser = new DOMParser();
                var doc = parser.parseFromString(response.responseText, "text/html");

                // Trouvez l'élément qui contient l'identifiant
                var tdElements = doc.querySelectorAll('td');
                var identifiant = null;
                for (var i = 0; i < tdElements.length - 1; i++) {
                    if (tdElements[i].textContent.trim() === "Identifiant") {
                        identifiant = tdElements[i + 1].textContent.trim();
                        break;
                    }
                }

                if (identifiant) {
                    console.log("Identifiant trouvé : " + identifiant);

                    // Accédez à l'URL de la deuxième page avec l'identifiant
                    var secondURL = "https://pdmanager.as48504.oip/mng-edit.php?username=" + encodeURIComponent(identifiant);
                    console.log("Accès à la deuxième URL avec l'identifiant : " + secondURL);

                    GM_xmlhttpRequest({
                        method: "GET",
                        url: secondURL,
                        onload: function(response) {
                            console.log("Requête GET effectuée sur la deuxième URL : " + secondURL);

                            var parser = new DOMParser();
                            var doc = parser.parseFromString(response.responseText, "text/html");

                            // Recherchez la valeur du champ "Ref Liaison"
                            var refLiaisonInput = doc.querySelector('input#reflien');
                            var refLiaison = null;

                            if (refLiaisonInput) {
                                refLiaison = refLiaisonInput.value;
                                console.log("Valeur du champ 'Ref Liaison' trouvée : " + refLiaison);

                                // Créez les éléments pour la valeur de "Ref Liaison"
                                var refLiaisonDtElement = document.createElement('dt');
                                refLiaisonDtElement.textContent = "Ref Liaison";

                                var refLiaisonDdElement = document.createElement('dd');
                                refLiaisonDdElement.textContent = refLiaison;

                                // Ajoutez les éléments de la valeur de "Ref Liaison" à la liste
                                dlElement.appendChild(refLiaisonDtElement);
                                dlElement.appendChild(refLiaisonDdElement);
                            }
                        }
                    });
                }
            }
        });
    }

    // Appel de la fonction principale
    retrieveRefLiaisonValue();
// Ajout des styles CSS pour le thème orange/marron et correction des flèches
const style = `
    <style>
        /* Style pour le DatePicker */
        .ui-datepicker {
            background-color: #ffcc80; /* Couleur orange clair */
            border: 1px solid #cc7a00; /* Bordure marron */
            padding: 10px;
            border-radius: 10px;
            position: relative;
        }
        .ui-datepicker-header {
            background-color: #cc7a00; /* Marron foncé pour l'en-tête */
            color: white;
            border-radius: 8px;
            text-align: center;
            position: relative;
        }
        .ui-datepicker-title {
            color: #fff;
        }
        .ui-datepicker .ui-datepicker-prev,
        .ui-datepicker .ui-datepicker-next {
            display: block;
            width: 20px;
            height: 20px;
            line-height: 20px;
            background-color: transparent;
            color: black; /* Flèches en noir */
            font-size: 18px;
            font-weight: bold;
            border: none;
            cursor: pointer;
            padding: 0 10px;
        }
        .ui-datepicker .ui-datepicker-prev:before {
            content: "<"; /* Flèche gauche */
            color: black;
        }
        .ui-datepicker .ui-datepicker-next:before {
            content: ">"; /* Flèche droite */
            color: black;
        }
        .ui-datepicker .ui-datepicker-prev:hover,
        .ui-datepicker .ui-datepicker-next:hover {
            color: #ff9800; /* Orange vif au survol */
        }
        .ui-datepicker .ui-datepicker-prev {
            float: left;
        }
        .ui-datepicker .ui-datepicker-next {
            float: right;
        }
        .ui-datepicker-calendar td a {
            background-color: #ffe0b2; /* Orange clair pour les jours */
            color: #000;
            border-radius: 4px;
            padding: 5px;
            text-align: center;
        }
        .ui-datepicker-calendar td a:hover {
            background-color: #ff9800; /* Orange vif au survol */
            color: white;
        }

        /* Fermer bouton du popup en haut à droite avec un X */
        .ui-dialog-titlebar-close {
            background-color: transparent;
            border: none;
            color: #cc7a00;
            font-size: 16px;
            position: absolute;
            top: 5px;
            right: 5px;
            cursor: pointer;
        }
        .ui-dialog-titlebar-close:hover {
            color: #ff9800;
        }

        /* Styles pour le TimePicker */
        #timepickerDialog {
            display: grid;
            grid-template-columns: repeat(4, 1fr); /* 4 boutons par ligne */
            gap: 10px;
            padding: 20px;
            background-color: #ffcc80;
            border-radius: 10px;
            justify-content: center;
        }
        .time-button {
            padding: 10px;
            background-color: #ff9800;
            color: white;
            border: none;
            border-radius: 8px;
            cursor: pointer;
            font-size: 16px;
            transition: background-color 0.3s ease;
        }
        .time-button:hover {
            background-color: #cc7a00; /* Changement de couleur au survol */
        }

        /* Style pour le popup */
        .ui-dialog {
            background-color: #fff3e0; /* Fond orange très clair */
            border: 2px solid #cc7a00; /* Bordure marron */
            border-radius: 10px;
            position: relative;
        }

    </style>
`;
$('head').append(style);

// Traduction du DatePicker en français
$.datepicker.regional['fr'] = {
    closeText: 'Fermer',
    prevText: '<',  // Utilisation de < pour mois précédent
    nextText: '>',  // Utilisation de > pour mois suivant
    currentText: 'Aujourd\'hui',
    monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
    'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
    monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin',
    'Juil.','Août','Sept.','Oct.','Nov.','Déc.'],
    dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
    dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
    dayNamesMin: ['D','L','M','M','J','V','S'],
    weekHeader: 'Sem.',
    dateFormat: 'dd/mm/yy',
    firstDay: 1,
    isRTL: false,
    showMonthAfterYear: false,
    yearSuffix: ''
};
$.datepicker.setDefaults($.datepicker.regional['fr']);

function performActions7() {
    // Créer l'élément pour le DatePicker avec un style épuré
    const $datePicker = $("<div id='datepicker'></div>").appendTo("body");

    // Initialiser le DatePicker
    $datePicker.datepicker({
        dateFormat: "dd/mm/yy",
        onSelect: function(dateText) {
            $datePicker.dialog('close');
            promptForTime(dateText);
        }
    }).dialog({
        modal: true,
        autoOpen: false,
        width: 300, // Taille du dialogue ajustée
        closeText: 'X', // Le texte X pour fermer le pop-up
        close: function() {
            $(this).remove();
        }
    });

    // Ouvrir le dialogue DatePicker
    $datePicker.dialog('open');
}

function promptForTime(date) {
    $('#timepickerDialog').remove(); // Nettoyer les dialogues précédents

    // Créer un conteneur Timepicker stylé
    const $timePickerContainer = $('<div id="timepickerDialog"></div>').appendTo("body");

    // Générer les boutons pour chaque heure et demi-heure
    for (let i = 6; i <= 22; i++) {
        createTimeButton(i, '00', date, $timePickerContainer);
        if (i < 22) {
            createTimeButton(i, '30', date, $timePickerContainer);
        }
    }

    // Afficher le conteneur du TimePicker dans une boîte de dialogue
    $timePickerContainer.dialog({
        modal: true,
        autoOpen: true,
        width: 400, // Taille ajustée pour les boutons
        closeText: 'X', // Le texte X pour fermer le pop-up
        close: function() {
            $(this).remove();
        }
    });
}

function createTimeButton(hour, minute, date, container) {
    const formattedTime = hour.toString().padStart(2, '0') + ':' + minute;
    $('<button>')
        .text(formattedTime)
        .addClass('time-button')
        .data('time', formattedTime)
        .on('click', function() {
            const selectedTime = $(this).data('time');
            insertMessage(date, selectedTime, calculateEndTime(selectedTime));
            container.dialog('close');
        })
        .appendTo(container);
}

function calculateEndTime(time) {
    const [startHour, minute] = time.split(":");
    const endHour = (parseInt(startHour) + 2).toString().padStart(2, '0');
    return `${endHour}:${minute}`;
}

function insertMessage(date, startTime, endTime) {
    // Simulation d'un clic sur le bouton pour ajouter un nouveau message
    const nouveauMessageButton = document.querySelector('button[data-toggle="modal"][data-target="#addPostModal"]');
    if (nouveauMessageButton) {
        nouveauMessageButton.click();
    }

    // Insérer le message avec une personnalisation du délai d'attente
    setTimeout(() => {
        if (typeof CKEDITOR !== "undefined" && CKEDITOR.instances) {
            for (let editor in CKEDITOR.instances) {
                if (CKEDITOR.instances.hasOwnProperty(editor)) {
                    const message = `
                        Bonjour,<br><br>
                        Nous vous confirmons qu'une intervention est prévue pour le ${date} entre ${startTime} et ${endTime}.<br>
                        Nous reviendrons vers vous suite à celle-ci.
                    `;
                    CKEDITOR.instances[editor].setData(message);
                }
            }
        }
    }, 1500); // Délai réduit pour une meilleure réactivité
}

function waitForJQuery(callback) {
    if (typeof jQuery === "undefined" || typeof jQuery.ui === "undefined") {
        setTimeout(() => {
            waitForJQuery(callback);
        }, 100);
    } else {
        callback();
    }
}



    function performActions6() {
   GM_setValue('boutonclique', 1);
   extraitlesdonnees();
   const serviceLinkElement = document.querySelector('a[href^="https://psm.mydstny.fr/Service"]');
    if (serviceLinkElement) {
        getServiceStatus(serviceLinkElement);
    }

}

    // fonction relance 1
    function performActions() {
        // Cliquez sur le bouton "Nouveau message"
        let nouveauMessageButton = document.querySelector('button[data-toggle="modal"][data-target="#addPostModal"]');
        if (nouveauMessageButton) {
            nouveauMessageButton.click();
        }

        // Cochez le bouton radio "Public" (attente de l'apparition du bouton radio après avoir cliqué sur "Nouveau message")
        setTimeout(() => {
            let publicRadioButton = document.querySelector('input[type="radio"][id="rd_addPostVisibility_2"]');
            if (publicRadioButton) {
                publicRadioButton.checked = true;
                publicRadioButton.dispatchEvent(new Event('change', { 'bubbles': true }));
            }
        }, 1000);

        // Sélectionnez "En attente retour client" pour "État suivant" et déclenchez l'événement de changement pour afficher les choix du "Questionnaire"
        setTimeout(() => {
            let etatSuivantDropdown = document.getElementById('se_addPostNextState');
            if (etatSuivantDropdown) {
                etatSuivantDropdown.value = "12";
                etatSuivantDropdown.dispatchEvent(new Event('change', { 'bubbles': true }));
            }
        }, 1500);

        // NOTE: Après avoir déclenché l'événement de changement pour "État suivant", le "Questionnaire" devrait être visible. À ce stade, nous pouvons essayer de sélectionner "Réponse" pour le "Questionnaire".
        setTimeout(() => {
            let questionnaireDropdown = document.getElementById('se_addPostFormId');
            if (questionnaireDropdown) {
                questionnaireDropdown.value = "10243";
            }
        }, 2000);


        setTimeout(() => {
            if (typeof CKEDITOR !== "undefined" && CKEDITOR.instances) {
                for (let editor in CKEDITOR.instances) {
                    if (CKEDITOR.instances.hasOwnProperty(editor)) {
                        CKEDITOR.instances[editor].setData("Bonjour,<br><br>Avez-vous un retour à nous fournir ?");
                    }
                }
            }
        }, 2500);
    }

    // Fonction relance 2
    function performActions2() {
        // Cliquez sur le bouton "Nouveau message"
        let nouveauMessageButton = document.querySelector('button[data-toggle="modal"][data-target="#addPostModal"]');
        if (nouveauMessageButton) {
            nouveauMessageButton.click();
        }

        // Cochez le bouton radio "Public" (attente de l'apparition du bouton radio après avoir cliqué sur "Nouveau message")
        setTimeout(() => {
            let publicRadioButton = document.querySelector('input[type="radio"][id="rd_addPostVisibility_2"]');
            if (publicRadioButton) {
                publicRadioButton.checked = true;
                publicRadioButton.dispatchEvent(new Event('change', { 'bubbles': true }));
            }
        }, 1000);

        // Sélectionnez "En attente retour client" pour "État suivant" et déclenchez l'événement de changement pour afficher les choix du "Questionnaire"
        setTimeout(() => {
            let etatSuivantDropdown = document.getElementById('se_addPostNextState');
            if (etatSuivantDropdown) {
                etatSuivantDropdown.value = "12";
                etatSuivantDropdown.dispatchEvent(new Event('change', { 'bubbles': true }));
            }
        }, 1500);

        // NOTE: Après avoir déclenché l'événement de changement pour "État suivant", le "Questionnaire" devrait être visible. À ce stade, nous pouvons essayer de sélectionner "Réponse" pour le "Questionnaire".
        setTimeout(() => {
            let questionnaireDropdown = document.getElementById('se_addPostFormId');
            if (questionnaireDropdown) {
                questionnaireDropdown.value = "10243";
            }
        }, 2000);


        setTimeout(() => {
            if (typeof CKEDITOR !== "undefined" && CKEDITOR.instances) {
                for (let editor in CKEDITOR.instances) {
                    if (CKEDITOR.instances.hasOwnProperty(editor)) {
                        CKEDITOR.instances[editor].setData("Suite à notre précédent post, avez-vous un retour à nous fournir ?<br><br>Dans l'attente d'une réponse de votre part, nous restons à votre disposition pour toute nouvelle demande.");
                    }
                }
            }
        }, 2500);
    }

    // Fonction Ouverture ticket fournisseur
    function performActions3() {
        // Cliquez sur le bouton "Nouveau message"
        let nouveauMessageButton = document.querySelector('button[data-toggle="modal"][data-target="#addPostModal"]');
        if (nouveauMessageButton) {
            nouveauMessageButton.click();
        }

        // Cochez le bouton radio "Public" (attente de l'apparition du bouton radio après avoir cliqué sur "Nouveau message")
        setTimeout(() => {
            let publicRadioButton = document.querySelector('input[type="radio"][id="rd_addPostVisibility_2"]');
            if (publicRadioButton) {
                publicRadioButton.checked = true;
                publicRadioButton.dispatchEvent(new Event('change', { 'bubbles': true }));
            }
        }, 1000);

        // Sélectionnez "En attente retour client" pour "État suivant" et déclenchez l'événement de changement pour afficher les choix du "Questionnaire"
        setTimeout(() => {
            let etatSuivantDropdown = document.getElementById('se_addPostNextState');
            if (etatSuivantDropdown) {
                etatSuivantDropdown.value = "12";
                etatSuivantDropdown.dispatchEvent(new Event('change', { 'bubbles': true }));
            }
        }, 1500);

        // NOTE: Après avoir déclenché l'événement de changement pour "État suivant", le "Questionnaire" devrait être visible. À ce stade, nous pouvons essayer de sélectionner "Réponse" pour le "Questionnaire".
        setTimeout(() => {
            let questionnaireDropdown = document.getElementById('se_addPostFormId');
            if (questionnaireDropdown) {
                questionnaireDropdown.value = "10243";
            }
        }, 2000);


        setTimeout(() => {
            if (typeof CKEDITOR !== "undefined" && CKEDITOR.instances) {
                for (let editor in CKEDITOR.instances) {
                    if (CKEDITOR.instances.hasOwnProperty(editor)) {
                        CKEDITOR.instances[editor].setData("Bonjour,<br><br>Nous vous confirmons qu'une signalisation a été ouverte auprès de l'opérateur de boucle locale.<br>Nous revenons vers vous au plus vite.");
                    }
                }
            }
        }, 2500);
    }



//Bouton cloture immédiat
function performActions4() {
        // Click on the specific "Actions" dropdown
        const actionsDropdown = document.querySelector('button[aria-expanded]:not([aria-expanded="true"])');
        if (actionsDropdown && actionsDropdown.textContent.includes("Actions")) {
            actionsDropdown.click();
        }

        // Check if "Clôturer" option is present and click it
        setTimeout(() => {
            const cloturerOption = document.querySelector('a[data-target="#closingModal"]');
            if (cloturerOption) {
                cloturerOption.click();
            }

            // Actions inside the modal
            setTimeout(() => {
                // Check the radio button for "Clôture immédiate"
                const clotureImmediateRadio = document.getElementById('rd_closingType_DEFAULT');
                if (clotureImmediateRadio) {
                    clotureImmediateRadio.click();
                }

                // Check the radio button for "Oui"
                const ouiRadio = document.querySelector('input[name="closingResolution"][value="YES"]');
                if (ouiRadio) {
                    ouiRadio.click();
                }

                // Check the radio button for "Dstny"
                const dstnyRadio = document.querySelector('input[name="closingResponsibleEntity"][value="OPENIP"]');
                if (dstnyRadio) {
                    dstnyRadio.click();
                }

                // Add the closing comment
                const closingCommentTextarea = document.getElementById('ta_closingComment');
                if (closingCommentTextarea) {
                    closingCommentTextarea.value = "Merci pour votre retour, suite à ce dernier nous clôturons ce ticket.\nN'hésitez pas à revenir vers nous pour toutes nouvelles demandes.";
                }
            }, 500);  // Wait for the modal to fully appear
        }, 500);  // Wait for the dropdown to fully appear
    }


    // bouton autocloture
    function performActions5() {
        // Click on the specific "Actions" dropdown
        const actionsDropdown = document.querySelector('button[aria-expanded]:not([aria-expanded="true"])');
        if (actionsDropdown && actionsDropdown.textContent.includes("Actions")) {
            actionsDropdown.click();
        }

        // Check if "Clôturer" option is present and click it
        setTimeout(() => {
            const cloturerOption = document.querySelector('a[data-target="#closingModal"]');
            if (cloturerOption) {
                cloturerOption.click();
            }

            // Actions inside the modal
            setTimeout(() => {
                // Check the radio button for "Auto-clôture"
                const autoClotureRadio = document.getElementById('rd_closingType_AUTO_CLOSING');
                if (autoClotureRadio) {
                    autoClotureRadio.click();
                }

                // Check the radio button for "Oui"
                const ouiRadio = document.querySelector('input[name="closingResolution"][value="YES"]');
                if (ouiRadio) {
                    ouiRadio.click();
                }

                // Check the radio button for "Dstny"
                const dstnyRadio = document.querySelector('input[name="closingResponsibleEntity"][value="OPENIP"]');
                if (dstnyRadio) {
                    dstnyRadio.click();
                }

                // Click on "1 jour" button
                const unJourButton = document.querySelector('button[data-target="dt_closingDate"]');
                if (unJourButton) {
                    unJourButton.click();
                }

                // Add the closing comment
                const closingCommentTextarea = document.getElementById('ta_closingComment');
                if (closingCommentTextarea) {
                    closingCommentTextarea.value = "Suite aux informations qui vous ont été transmises, sans retour de votre part, ce ticket sera clôturer dans 24h.\nN'hésitez pas à revenir vers nous pour toutes nouvelles demandes.";
                }
            }, 500);  // Wait for the modal to fully appear
        }, 500);  // Wait for the dropdown to fully appear
    }


        // Fonction lien connecté
    function performActions8() {
        // Cliquez sur le bouton "Nouveau message"
        let nouveauMessageButton = document.querySelector('button[data-toggle="modal"][data-target="#addPostModal"]');
        if (nouveauMessageButton) {
            nouveauMessageButton.click();
        }

        // Cochez le bouton radio "Public" (attente de l'apparition du bouton radio après avoir cliqué sur "Nouveau message")
        setTimeout(() => {
            let publicRadioButton = document.querySelector('input[type="radio"][id="rd_addPostVisibility_2"]');
            if (publicRadioButton) {
                publicRadioButton.checked = true;
                publicRadioButton.dispatchEvent(new Event('change', { 'bubbles': true }));
            }
        }, 1000);

        // Sélectionnez "En attente retour client" pour "État suivant" et déclenchez l'événement de changement pour afficher les choix du "Questionnaire"
        setTimeout(() => {
            let etatSuivantDropdown = document.getElementById('se_addPostNextState');
            if (etatSuivantDropdown) {
                etatSuivantDropdown.value = "12";
                etatSuivantDropdown.dispatchEvent(new Event('change', { 'bubbles': true }));
            }
        }, 1500);

        // NOTE: Après avoir déclenché l'événement de changement pour "État suivant", le "Questionnaire" devrait être visible. À ce stade, nous pouvons essayer de sélectionner "Réponse" pour le "Questionnaire".
        setTimeout(() => {
            let questionnaireDropdown = document.getElementById('se_addPostFormId');
            if (questionnaireDropdown) {
                questionnaireDropdown.value = "10243";
            }
        }, 2000);


        setTimeout(() => {
            if (typeof CKEDITOR !== "undefined" && CKEDITOR.instances) {
                for (let editor in CKEDITOR.instances) {
                    if (CKEDITOR.instances.hasOwnProperty(editor)) {
                        CKEDITOR.instances[editor].setData("Bonjour,<br><br>Nous constatons que le lien est actuellement connecté et stable<br>Avez-vous un retour à nous fournir ?");
                    }
                }
            }
        }, 2500);
    }

    // Vérifiez régulièrement si le bouton "Actions" est présent
    let intervalId = setInterval(() => {
        let actionsButtonDiv = document.querySelector('div.btn-group.text-right');
        if (actionsButtonDiv) {
            clearInterval(intervalId);  // Arrêtez l'intervalle une fois le bouton trouvé

            // Créez le nouveau bouton déroulant " Actions rapides "
            let newButtonDiv = document.createElement('div');
            newButtonDiv.className = "btn-group text-right";
            newButtonDiv.innerHTML = `
                <button type="button" class="btn btn-block btn-primary btn-gradient btn-lg dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                   Actions rapides  <span class="caret"></span>
                </button>
                <ul class="dropdown-menu dropdown-menu-right">
                    <li>
                        <a id="performActionsLink">Relance 1</a>
                    </li>
                    <li>
                        <a id="performActions2Link">Relance 2</a>
                    </li>
                     <li>
                        <a id="performActions3Link">Ouverture ticket fournisseur</a>
                    </li>
                    <li>
                        <a id="performActions7Link">Ouverture ticket fournisseur DATA</a>
                    </li>
                    <li>
                        <a id="performActions4Link">Clôture</a>
                    </li>

                    <li>
                        <a id="performActions5Link">Auto Clôture</a>
                    </li>

                    <li>
                        <a id="performActions6Link">Prend les infos fournisseur</a>
                    </li>
                    <li>
                        <a id="performActions8Link">Lien connecté</a>
                    </li>
                </ul>
            `;

            // Insérez le nouveau bouton juste avant le bouton "Actions"
            actionsButtonDiv.parentNode.insertBefore(newButtonDiv, actionsButtonDiv);

            // Ajoutez un écouteur d'événements pour "Relance 1"
            let action1Link = document.querySelector('#performActionsLink');
            action1Link.addEventListener('click', performActions);

            // Ajoutez un écouteur d'événements pour "Relance 2"
            let action2Link = document.querySelector('#performActions2Link');
            action2Link.addEventListener('click', performActions2);

            // Ajoutez un écouteur d'événements pour "Ouverture ticket fournisseur"
            let action3Link = document.querySelector('#performActions3Link');
            action3Link.addEventListener('click', performActions3);

	        // Ajoutez un écouteur d'événements pour "Clôture"
            let action4Link = document.querySelector('#performActions4Link');
            action4Link.addEventListener('click', performActions4);

            // Ajoutez un écouteur d'événements pour "Clôture"
            let action5Link = document.querySelector('#performActions5Link');
            action5Link.addEventListener('click', performActions5);

            let action6Link = document.querySelector('#performActions6Link');
            action6Link.addEventListener('click', performActions6);

             let action7Link = document.querySelector('#performActions7Link');
            action7Link.addEventListener('click', performActions7);

            let action8Link = document.querySelector('#performActions8Link');
            action8Link.addEventListener('click', performActions8);
        }
    }, 500);
}


    if (currentURL.includes('https://www.e-sav-signalisation.operateurs.orange-business.com/ipsiteTT/rdvSelectAction.do?contextRdv=0&rdvSessionId=')) {


        if (GM_getValue('boutonclique') === 1) {
    console.log("Bouton cliqué ( valeur mise à 1 )");
    LienOrangeFTTH(); // Vérifie la présence du formulaire et exécute les actions supplémentaires si présent
    LienOrangeDSL();
GM_setValue('boutonclique', 0);
} else {
    console.log("Bouton pas cliqué ( valeur pas à 1 )");
}


}

})();