// ==UserScript==
// @name action
// @namespace http://tampermonkey.net/
// @version 0.19
// @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
if (window.location.href.includes('https://tck.mydstny.fr/Ticket')) {
// Styles CSS personnalisés pour les pop-ups
// Styles CSS personnalisés pour les pop-ups
GM_addStyle(`
.ui-datepicker, .ui-dialog, .ui-timepicker-container {
font-family: Arial, sans-serif;
background: #ffffff;
border: 1px solid #dddddd;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.ui-datepicker-header, .ui-dialog-titlebar {
background: #007bff;
color: white;
border: none;
}
.ui-datepicker-prev-hover, .ui-datepicker-next-hover, .ui-dialog-titlebar-close:hover {
filter: brightness(85%);
}
.ui-state-default, .ui-button {
background: #f8f9fa;
border: 1px solid #ddd;
color: #333;
}
.ui-state-default:hover, .ui-state-hover, .ui-button:hover {
background: #007bff;
color: white;
border-color: #0056b3;
}
.ui-state-active, .ui-button:active {
background: #0056b3;
color: white;
}
.ui-state-highlight {
background: #28a745;
color: white;
}
/* Supprimer les éléments inutiles */
.ui-timepicker-second, .ui-timepicker-millisec, .ui-timepicker-microsec, .ui-timepicker-timezone {
display: none;
}
/* Styles pour le fond et le texte des inputs et dropdowns */
.ui-timepicker-div .ui-widget-header {
background: #1c87c9;
color: white;
border: none;
}
.ui-timepicker-div dl {
text-align: left;
padding: 5px 0;
}
.ui-timepicker-div dl dt {
float: left;
clear: left;
padding: 0 0 0 5px;
}
.ui-timepicker-div dl dd {
margin: 0 10px 10px 45%;
}
.ui-timepicker-div td {
font-size: 90%;
}
/* Styles pour les boutons */
.ui-timepicker-div .ui_tpicker_unit_hide,
.ui-timepicker-div .ui_tpicker_time_hide {
display: none;
}
.ui-timepicker-div .ui_tpicker_time {
margin-left: 0;
}
.ui-timepicker-div .ui_tpicker_time_label {
position: absolute;
top: 3px;
margin-left: 0;
padding-left: 5px;
}
.ui-timepicker-div .ui_tpicker_hour .ui_tpicker_hour_slider,
.ui-timepicker-div .ui_tpicker_minute .ui_tpicker_minute_slider {
width: 100%;
}
.ui-button {
text-align: center;
border: 1px solid #ddd;
background-color: #f7f7f7;
color: #333;
}
.ui-button:hover {
border: 1px solid #ccc;
background-color: #e6e6e6;
color: #333;
}
.ui-button:active {
background-color: #ccc;
}
/* Styles pour le slider (si utilisé) */
.ui-slider-horizontal {
height: 0.8em;
}
.ui-slider-horizontal .ui-slider-handle {
top: -.3em;
margin-left: -.6em;
}
.ui-slider .ui-slider-handle {
cursor: pointer;
-webkit-border-radius: 0;
border-radius: 0;
background-color: #5BC0DE;
}
#timepickerDialog {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
display: flex;
flex-wrap: wrap;
justify-content: start; /* Aligner les boutons au début du conteneur */
align-items: center; /* Centre les boutons verticalement */
padding: 10px;
background: white;
border: 1px solid #ddd;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.5);
z-index: 1002;
width: auto; /* Permet au conteneur de s'ajuster en fonction de la largeur des boutons */
max-width: 300px; /* Définir une largeur maximale suffisante pour deux boutons */
box-sizing: border-box;
}
/* Styles pour les boutons de sélection de l'heure */
.time-button {
width: calc(50% - 10px); /* 50% pour deux boutons par ligne, -10px pour ajuster l'espace de la marge */
margin: 5px; /* Marge entre les boutons */
padding: 5px; /* Padding à l'intérieur des boutons */
font-size: 0.9em; /* Taille de la police */
text-align: center;
border: 1px solid #ccc;
background-color: #f7f7f7;
cursor: pointer;
display: inline-block; /* S'assurer que les boutons sont côte à côte */
box-sizing: border-box;
}
.time-button:hover {
background-color: #e6e6e6;
}
`);
}
//FIN CSS
// Gestionnaire d'événement pour les raccourcis clavier
document.addEventListener('keydown', function(e) {
if (e.altKey && e.key === 'p') {
let ipAddress = prompt("Entrez l'adresse IP à tester:");
if (ipAddress) testPorts(ipAddress);
} else 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');
}
}
function testPorts(ip) {
const ports = [444, 48443, 443, 80, 8443];
ports.forEach(port => {
const protocol = (port === 80 || port === 8443) ? 'http' : 'https';
const url = `${protocol}://${ip}:${port}`;
GM_xmlhttpRequest({
method: "GET",
url: url,
timeout: 5000, // Temps en ms avant l'abandon de la requête
onload: function(response) {
if (response.status >= 200 && response.status < 400) {
console.log(`Port ouvert trouvé : ${url}`);
window.open(url, '_blank');
} else {
console.log(`Port fermé ou inaccessible : ${url}`);
}
},
onerror: function() {
console.log(`Erreur lors de la connexion (considérée comme un succès) à : ${url}`);
window.open(url, '_blank'); // Ouvre l'URL même en cas d'erreur
},
ontimeout: function() {
console.log(`Temps de connexion dépassé pour : ${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();
function performActions7() {
// Créer l'élément pour le DatePicker
var $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,
close: function() { $(this).remove(); }
});
// Ouvrir le dialogue manuellement
$datePicker.dialog('open');
}
function promptForTime(date) {
$('#timepickerDialog').remove();
// Créer un conteneur pour le Timepicker
var $timePickerContainer = $('<div id="timepickerDialog"></div>').appendTo('body');
// Créer et ajouter des boutons pour les heures et les demi-heures de 06h00 à 22h00
for (var i = 6; i <= 22; i++) {
$('<button>')
.text(i.toString().padStart(2, '0') + ':00')
.addClass('time-button')
.data('time', i.toString().padStart(2, '0') + ':00')
.on('click', function() {
var selectedTime = $(this).data('time');
insertMessage(date, selectedTime, calculateEndTime(selectedTime)); // Utilisez la fonction insertMessage ici
$('#timepickerDialog').remove(); // Fermez le conteneur après la sélection
})
.appendTo($timePickerContainer);
if (i < 22) {
$('<button>')
.text(i.toString().padStart(2, '0') + ':30')
.addClass('time-button')
.data('time', i.toString().padStart(2, '0') + ':30')
.on('click', function() {
var selectedTime = $(this).data('time');
insertMessage(date, selectedTime, calculateEndTime(selectedTime)); // Utilisez la fonction insertMessage ici également pour les demi-heures
$('#timepickerDialog').remove(); // Fermez le conteneur après la sélection
})
.appendTo($timePickerContainer);
}
}
}
function validateTime(time, date) {
// Assurez-vous que l'ID 'heure' est l'ID correct du champ d'heure dans votre formulaire
$('#heure').val(date + ' ' + time);
// Fermez le dialogue du sélecteur d'heure après la sélection
$('#timepickerDialog').remove();
}
function calculateEndTime(time) {
let [heureDebut, minute] = time.split(":");
let heureFin = parseInt(heureDebut) + 2;
let heureFinFormatted = heureFin.toString().padStart(2, '0') + ":" + minute;
return heureFinFormatted;
}
function insertMessage(date, heure, heureFinText) {
// Cliquez sur le bouton "Nouveau message"
let nouveauMessageButton = document.querySelector('button[data-toggle="modal"][data-target="#addPostModal"]');
if (nouveauMessageButton) {
nouveauMessageButton.click();
}
// Attendre l'ouverture de la fenêtre modale et insérer le texte personnalisé
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 intervention est prévue pour le ${date} entre ${heure} et ${heureFinText}.<br>Nous reviendrons vers vous suite à celle-ci.`);
}
}
}
}, 2500);
}
function waitForJQuery(callback) {
if (typeof jQuery === "undefined" || typeof jQuery.ui === "undefined") {
setTimeout(function() {
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
}
// 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>
</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);
let action7Link = document.querySelector('#performActions7Link');
action7Link.addEventListener('click', performActions7);
// 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);
}
}, 500);
}
// PARTIE POUR LATTRIBUTION DES TICKET
// PARTIE POUR LATTRIBUTION DES TICKET
// PARTIE POUR LATTRIBUTION DES TICKET
// Mapping des noms de techniciens à leurs IDs utilisateur
const utilisateurIds = {
"Adil HADDAR": "118335",
"Romain NARGAUD": "158527",
"Gabryël CENATIEMPO": "162131",
"Florian VILLERET": "67387",
"Bertrand GARGAUD": "110",
"Clément BAHUAUD": "126139",
"Corentin LANGLAUDE": "142291",
"Frédéric HERDEIRO": "165811",
"Gabryël CENATIEMPO": "162131",
"Hugo BRUYNEEL": "73131",
"Hugo TEILLET": "132999",
"Hugo CHARVET": "133915",
"ICT ICT": "143931",
"Jean-Philippe ETIEN": "73115",
"Kyllian Lobo": "24335",
"Nicolas VERON": "58191",
"Pascal RIVAULT": "75519",
"Pedro ARAUJO PEREIRA": "151607",
"Pierrick WOLF": "63791",
"Rayan RAMZI": "110059",
"Rodrigue ASSA": "73119",
"Romain NARGAUD": "158527",
"Soufiane KAHLAOUI": "73127",
"Teddy LABORDE": "168339",
"Thomas HOUX": "20890",
"Tony GARGAUD": "142487",
"Tristana VIANA": "101",
"Valentin SABATIER": "52967",
"zIncident META 1": "134919",
"zIncident META 2": "134923",
"zIncident META 3": "134939",
"zIncident VOIX 1": "134943",
"zIncident OpenSIM / FMU": "134947",
"zIncident DATA 1": "134951",
"zIncident DATA 2": "134955",
"zIncident DATA 3": "134959",
"zIncident VOIX 2": "136651"
};
// Fonction pour gérer la sélection d'utilisateur et effectuer une action
function onUserClick(userId) {
const selectElement = document.getElementById('se_assignmentUser');
if (selectElement) {
selectElement.value = userId;
const event = new Event('change');
selectElement.dispatchEvent(event);
const submitButton = document.getElementById('assignment');
if (submitButton) {
submitButton.click();
} else {
console.error("Bouton 'Valider' non trouvé");
}
} else {
console.error("Élément de sélection d'utilisateur non trouvé");
}
}
function processSvg(svgContent) {
const parser = new DOMParser();
const svgDoc = parser.parseFromString(svgContent, 'text/html');
const svgElement = svgDoc.querySelector('svg');
if (!svgElement) return null;
// Supprimer la partie spécifique du SVG, si nécessaire
const seriesGroup = svgElement.querySelector('g.highcharts-series-group');
if (seriesGroup) seriesGroup.remove();
// Supprimer tous les attributs 'onclick' des éléments dans le SVG
const allElements = svgElement.querySelectorAll('*'); // Sélectionne tous les éléments dans le SVG
allElements.forEach(element => {
if (element.hasAttribute('onclick')) {
element.removeAttribute('onclick'); // Supprime l'attribut 'onclick'
}
});
// Décaler tous les textes sur l'axe des Y
const textElements = svgElement.querySelectorAll('text');
textElements.forEach(text => {
const currentY = Number(text.getAttribute('y'));
const newY = currentY - 100; // Décaler de 20 unités vers le haut, ajustez cette valeur selon vos besoins
text.setAttribute('y', newY.toString());
});
// Décaler toutes les lignes sur l'axe des Y
const lineElements = svgElement.querySelectorAll('line');
lineElements.forEach(line => {
const currentY1 = Number(line.getAttribute('y1'));
const newY1 = currentY1 - 100; // Ajustez cette valeur selon vos besoins
line.setAttribute('y1', newY1.toString());
const currentY2 = Number(line.getAttribute('y2'));
const newY2 = currentY2 - 100; // Ajustez cette valeur selon vos besoins
line.setAttribute('y2', newY2.toString());
});
textElements.forEach(text => {
const name = text.textContent.trim();
const userId = utilisateurIds[name];
if (userId) {
// Supprimer les anciens événements de clic s'ils existent
text.replaceWith(text.cloneNode(true));
const newTextElement = svgElement.querySelectorAll('text')[Array.from(textElements).indexOf(text)];
newTextElement.style.cursor = 'pointer';
newTextElement.addEventListener('click', () => onUserClick(userId));
}
});
// Le reste de votre traitement SVG peut continuer ici
return svgElement;
}
if (window.location.href === 'https://tck.mydstny.fr/Tickets?refresh') {
const svgContent = document.getElementById('js-countersChart-n1')?.outerHTML;
if (svgContent) {
localStorage.setItem('svgDataSiteA', svgContent);
const now = new Date().toLocaleString();
localStorage.setItem('dateTimeSiteA', now);
console.log('SVG sauvegardé depuis Site A avec la date et l’heure.');
window.close(); // Essaie de fermer l'onglet courant
}
}
const currentUrl = window.location.href;
if (currentUrl.includes('https://tck.mydstny.fr/Ticket/')) {
var iconElement = document.querySelector('.pull-right .btn.btn-link.btn-sm i');
// Vérifiez si l'élément existe pour éviter des erreurs
if (iconElement) {
// Remplacez l'icône par l'emoji 🔄
iconElement.parentNode.innerHTML = '⟳';
}
document.querySelector('.pull-right .btn.btn-link.btn-sm').addEventListener('click', (event) => {
event.preventDefault(); // Empêche l'ouverture du lien
// Ouverture du lien dans un nouvel onglet, en arrière-plan
window.open('https://tck.mydstny.fr/Tickets?refresh', '_blank');
// Récupération de la date et l'heure depuis localStorage
const dateTime = localStorage.getItem('dateTimeSiteA');
// Sélection de tous les éléments qui pourraient correspondre
const panelTitles = document.querySelectorAll('.panel .panel-heading .panel-title');
// Expression régulière pour matcher "Attribution de ticket" suivi de n'importe quel texte entre parenthèses
const regex = /^Attribution de ticket .+\)$/;
// Recherche d'un élément correspondant au texte "Compteurs" ou "Attribution de ticket"
const compteurPanelTitle = Array.from(panelTitles).find(title =>
title.textContent.trim() === 'Compteurs' || regex.test(title.textContent.trim()));
// Vérification si compteurPanelTitle existe
if (compteurPanelTitle) {
// Modification du texte en incluant la date et l'heure
compteurPanelTitle.textContent = `Attribution de ticket (${dateTime})`;
// Recherche du corps du panneau associé pour insertion du SVG
const panelBody = compteurPanelTitle.closest('.panel').querySelector('.panel-body');
if (panelBody) {
panelBody.innerHTML = ''; // Nettoyage du contenu existant
const svgContent = localStorage.getItem('svgDataSiteA');
if (svgContent) {
const svgElement = processSvg(svgContent); // Assurez-vous que cette fonction est définie correctement
if (svgElement) {
panelBody.appendChild(svgElement); // Ajout du SVG modifié au corps du panneau
}
localStorage.removeItem('svgDataSiteA'); // Nettoyage du localStorage
localStorage.removeItem('dateTimeSiteA');
console.log('SVG inséré sur Site B et cache vidé.');
}
} else {
console.error("Panel body not found");
}
} else {
console.error("Panel title not found");
}
});
}
if (window.location.href === 'https://tck.mydstny.fr/Tickets') {
const svgContent = document.getElementById('js-countersChart-n1')?.outerHTML;
if (svgContent) {
localStorage.setItem('svgDataSiteA', svgContent);
const now = new Date().toLocaleString();
localStorage.setItem('dateTimeSiteA', now);
console.log('SVG sauvegardé depuis Site A avec la date et l’heure.');
}
} else if (currentUrl.includes('https://tck.mydstny.fr/Ticket/')) {
const panelTitles = document.querySelectorAll('.panel .panel-heading .panel-title');
const compteurPanelTitle = Array.from(panelTitles).find(title => title.textContent.trim() === 'Compteurs');
if (compteurPanelTitle) {
const dateTime = localStorage.getItem('dateTimeSiteA');
compteurPanelTitle.textContent = `Attribution de ticket (${dateTime})`;
const panelBody = compteurPanelTitle.closest('.panel').querySelector('.panel-body');
if (panelBody) {
panelBody.innerHTML = '';
const svgContent = localStorage.getItem('svgDataSiteA');
if (svgContent) {
const svgElement = processSvg(svgContent);
if (svgElement) {
panelBody.appendChild(svgElement);
}
console.log('SVG inséré sur Site B et cache vidé.');
}
}
}
}
//fin PARTIE POUR LATTRIBUTION DES TICKET
//fin PARTIE POUR LATTRIBUTION DES TICKET
//fin PARTIE POUR LATTRIBUTION DES TICKET
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 )");
}
}
})();