// Événement de récupération du parcours souscripteur à partir de l'id document.addEventListener('DOMContentLoaded', function () { /* ---------- Init ------------ */ const token = localStorage.getItem('jwtToken'); if (token) { try { const decoded = jwt_decode(token); const userFirstName = decoded?.userFirstName || ''; const userLastName = decoded?.userLastName || ''; const userMatricule = decoded?.userMatricule || ''; // Vérifier que les éléments HTML existent avant de les modifier const firstNameItem = document.getElementById("firstNameItem"); const lastNameItem = document.getElementById("lastNameItem"); const userMatriculeItem = document.getElementById("userMatricule"); if (firstNameItem) { firstNameItem.innerHTML = userFirstName; } if (lastNameItem) { lastNameItem.innerHTML = userLastName; } if (userMatriculeItem) { userMatriculeItem.innerHTML = userMatricule; } } catch (error) { console.error("Erreur lors du décodage du token:", error); // En cas d'erreur, ne pas afficher les informations utilisateur } } /* ---------- EVENNEMENT ------------ */ // Écoute de l'événement du bouton nouveau parcours document.getElementById('nouveauParcoursBtn').addEventListener('click', function (event) { // Empêche le comportement par défaut du formulaire event.preventDefault(); const userMatricule = document.getElementById('userMatricule').innerHTML; //Envoie de la requete pour creer le nouveau parcours et l'attribuer au souscripteur (async () => { try { const data = await fetchWithJson(`/parcours/create/${userMatricule}`, 'POST'); if (data.valid) { window.location.href = `/parcours?numParcours=${data.numParcours}`; } else { console.log("Erreur dans la création d'un nouveau parcours"); if (typeof window.showError === 'function') { window.showError("Erreur lors de la création du parcours. Veuillez réessayer."); } } } catch (error) { console.error("Erreur serveur lors de la création d'un nouveau parcours :", error); // L'erreur est déjà gérée par fetchWithJson avec le loader } })(); }); // Ecoute de l'événement 'input' au champ numParcours document.getElementById('numParcours').addEventListener('input', function () { validateField('numParcours', true); updateSubmitButtonState('parcoursForm'); }); // Fonction de génération de projet document.getElementById('btnGenCP').addEventListener('click', function () { const numParcours = document.getElementById('numParcours').value; const produit = document.getElementById('produit').innerHTML.replace(/\s/g, ''); let filename; // Activer le loader if (typeof window.showLoader === 'function') { window.showLoader(); } // Envoi de la requête POST au serveur pour générer le projet fetch(`/generate/${produit}/projet/${numParcours}`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, }) .then(response => { if (!response.ok) { throw new Error('Erreur réseau ou serveur'); } const disposition = response.headers.get('content-disposition'); filename = disposition.split(';')[1].trim().split('=')[1]; return response.blob(); // On attend une réponse sous forme de blob pour un fichier }) .then(blob => { // Crée un URL pour le blob const url = window.URL.createObjectURL(blob); // Crée un élément a temporaire pour simuler un clic pour téléchargement const a = document.createElement('a'); a.href = url; a.download = filename; // Nomme le fichier téléchargé document.body.appendChild(a); // Ajoute l'élément au document a.click(); // Simule un clic sur l'élément pour déclencher le téléchargement window.URL.revokeObjectURL(url); // Nettoie l'URL objet a.remove(); // Supprime l'élément a du document // Désactiver le loader if (typeof window.hideLoader === 'function') { window.hideLoader(); } }) .catch(error => { console.error('Erreur lors de la génération du projet:', error); // Désactiver le loader et afficher l'erreur if (typeof window.hideLoader === 'function') { window.hideLoader(); } if (typeof window.showError === 'function') { window.showError('Erreur lors de la génération du projet. Vérifiez votre connexion.'); } }); }); // Écoute de l'événement de soumission du formulaire document.getElementById('parcoursForm').addEventListener('submit', function (event) { // Empêche le comportement par défaut du formulaire event.preventDefault(); // Supression mémoire tampon Client/Inter sessionStorage.removeItem('tmp'); const numParcours = document.getElementById('numParcours').value; // Envoi de la requête pour avoir le parcours (async () => { try { // Le loader est déjà géré dans loadParcours via fetchWithJson await loadParcours(numParcours); // Accéder aux informations stockées du parcours const parcours = JSON.parse(sessionStorage.getItem('parcours')); if (parcours) { // Affiche un modal si le parcours est valide const elem = document.getElementById('goodParcoursModal'); const instance = M.Modal.getInstance(elem); const contratId = parcours?.["@expand"]?.contrat?.id || null; await loadContrat(contratId); const contrat = JSON.parse(sessionStorage.getItem('contrat')); const client = contrat?.["@expand"]?.client || null; const intermediaire = contrat?.["@expand"]?.intermediaire || null; let produit = parcours["@expand"].contrat.produit const produitObj = contrat?.["@expand"]?.enCours || null; const tarif = produitObj?.["@expand"]?.tarif || null; const projet = produitObj?.["@expand"]?.projet || null; if (client) { document.getElementById("sectionClient").style.display = "block"; } if (intermediaire) { document.getElementById("sectionIntermediaire").style.display = "block"; } if (produit == "RC") { //A MODIFIER UNE FOIS QUE RC SERA ADAPTé AU PARCOURS document.getElementById('btnGenTarif').disabled = true; if (Object.keys(contrat?.["@expand"]?.enCours).length > 1) { document.getElementById('btnGenCP').disabled = false; } else { document.getElementById('btnGenCP').disabled = true; } } else { // Enable / disable bouton generate project if (parcours["@expand"].contrat.client != '' && parcours["@expand"].contrat.intermediaire != '' && produitObj != undefined && projet != null) { document.getElementById('btnGenCP').disabled = false; } else { document.getElementById('btnGenCP').disabled = true; } // Enable / disable bouton generate déclinaison if (parcours["@expand"].contrat.client != '' && parcours["@expand"].contrat.intermediaire != '' && produitObj != undefined && tarif != null) { document.getElementById('btnGenTarif').disabled = false; } else { document.getElementById('btnGenTarif').disabled = true; } } // Gestion des informations du parcours document.getElementById('displayedNumParcours').innerText = numParcours; document.getElementById('dateCreaParcours').innerText = parcours.created ? new Date(parcours.created).toLocaleDateString('fr-FR', { day: 'numeric', month: 'long', year: 'numeric' }) : 'N/A'; document.getElementById('dateModiParcours').innerText = parcours.updated ? new Date(parcours.updated).toLocaleDateString('fr-FR', { day: 'numeric', month: 'long', year: 'numeric' }) : 'N/A'; const dernierUtilisateur = parcours["@expand"]?.dernierUtilisateur; document.getElementById('souscripteurParcours').innerText = dernierUtilisateur ? `${dernierUtilisateur.matricule}, ${dernierUtilisateur.prenom} ${dernierUtilisateur.nom}` : 'Information non disponible'; document.getElementById('updateParcours').addEventListener('click', function () { window.location.href = `/navParcours?numParcours=${numParcours}&submenu=client`; }); // Gestion des informations du contrat if (contrat) { document.getElementById('numContrat').innerText = (contrat.numContrat) ? contrat.numContrat : 'N/A'; document.getElementById('numSaisine').innerText = (contrat.numSaisine) ? contrat.numSaisine : 'N/A'; document.getElementById('produit').innerText = (contrat.produit) ? contrat.produit : 'N/A'; document.getElementById('type').innerText = (contrat.type) ? contrat.type : 'N/A'; } // Gestion des informations client if (client) { document.getElementById('numClient').innerText = (client.numClient) ? client.numClient : 'N/A'; document.getElementById('nomClient').innerText = (client.nom) ? client.nom : 'N/A'; document.getElementById('adresseClient').innerText = (client.adresse || client.codePostal || client.ville) ? `${client.adresse}, ${client.codePostal}, ${client.ville}` : 'N/A'; document.getElementById('mailClient').innerText = (client.mail) ? client.mail : 'N/A'; document.getElementById('noteClient').innerText = (client.noteFinanciere) ? client.noteFinanciere : 'N/A'; } // Gestion des informations de l'intermédiaire if (intermediaire) { document.getElementById('numPortefeuille').innerText = (intermediaire.numPortefeuille) ? intermediaire.numPortefeuille : 'N/A'; document.getElementById('numOrias').innerText = (intermediaire.numOrias) ? intermediaire.numOrias : 'N/A'; document.getElementById('typeIntermediaire').innerText = (intermediaire.type) ? intermediaire.type : 'N/A'; document.getElementById('nomIntermediaire').innerText = (intermediaire.nom) ? intermediaire.nom : 'N/A'; document.getElementById('adresseIntermediaire').innerText = (intermediaire.adresse || intermediaire.codePostal || intermediaire.ville) ? `${intermediaire.adresse}, ${intermediaire.codePostal}, ${intermediaire.ville}` : 'N/A'; document.getElementById('numTelephoneIntermediaire').innerText = (intermediaire.numTelephone) ? intermediaire.numTelephone : 'N/A'; document.getElementById('mailIntermediaire').innerText = (intermediaire.mail) ? intermediaire.mail : 'N/A'; } instance.open(); } else { // Affiche un modal si le parcours est invalide const elem = document.getElementById('wrongParcoursModal'); const instance = M.Modal.getInstance(elem); const admins = JSON.parse(sessionStorage.getItem('admins')); // Met à jour le parcours affiché dans le modal document.getElementById('displayedNumParcoursWrong').innerText = numParcours; const adminListElement = document.getElementById('adminList'); adminListElement.innerHTML = ""; admins.items.forEach(admin => { adminListElement.innerHTML += `