function initSubmenuForm() { // Accéder aux informations stockées du parcours const parcours = JSON.parse(sessionStorage.getItem('parcours')); } // Exposer initSubmenuForm globalement pour y accéder depuis l'extérieur window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollution de l'espace global (function () { // Variables globales du module let parcours, contrat, client, intermediaire, produit; // Initialisation du formulaire et des données function init() { // Materialize init select var select = document.querySelectorAll('select'); M.FormSelect.init(select); // Materialize init Modal var modals = document.querySelectorAll('.modal'); M.Modal.init(modals); // Accéder aux informations stockées du parcours parcours = JSON.parse(sessionStorage.getItem('parcours')); contrat = JSON.parse(sessionStorage.getItem('contrat')); client = contrat?.["@expand"]?.client || null; intermediaire = contrat?.["@expand"]?.intermediaire || null; produit = contrat?.["@expand"]?.enCours || null; console.log("Initialisation pour formulaire projet :", parcours); // Appel des différentes fonctions d'initialisation setupEventListeners(); afficherFAC(); populateFormData(); updateSubmitButtonState('projetForm'); } // Configuration des écouteurs d'événements function setupEventListeners() { document.getElementById('projetFormBtn').addEventListener('click', handleSubmitForm); document.getElementById('loadHistoriqueBtn').addEventListener('click', function () { handleLoadHistoriqueBtn(); }); document.getElementById('btnAddAdditionnel').addEventListener('click', function () { const nomValue = document.getElementById('nomAdditionnel').value || 'Non défini'; const adresseValue = document.getElementById('adresseAditionnel').value || 'Non défini'; const siretValue = document.getElementById('siretAdditionnel').value || 'Non défini'; addRowAdditionnel(nomValue, adresseValue, siretValue); }); document.getElementById('btnMondeEntier').addEventListener('click', function () { document.getElementById('zone1').checked = true; document.getElementById('zone1').disabled = true; document.getElementById('zone2').checked = true; document.getElementById('zone2').disabled = true; document.getElementById('zone3').checked = true; document.getElementById('zone4').checked = true; document.getElementById('zone5').checked = true; document.getElementById('zone6').checked = true; }); document.getElementById('btnReset').addEventListener('click', function () { document.getElementById('zone1').checked = false; document.getElementById('zone1').disabled = false; document.getElementById('zone2').checked = false; document.getElementById('zone2').disabled = false; document.getElementById('zone3').checked = false; document.getElementById('zone4').checked = false; document.getElementById('zone5').checked = false; document.getElementById('zone6').checked = false; }); document.getElementById('btnZone1').addEventListener('click', function () { const elem = document.getElementById('modalZone1'); const instance = M.Modal.getInstance(elem); instance.open(); }); document.getElementById('btnZone2').addEventListener('click', function () { const elem = document.getElementById('modalZone2'); const instance = M.Modal.getInstance(elem); instance.open(); }); document.getElementById('btnZone3').addEventListener('click', function () { const elem = document.getElementById('modalZone3'); const instance = M.Modal.getInstance(elem); instance.open(); }); document.getElementById('btnZone4').addEventListener('click', function () { const elem = document.getElementById('modalZone4'); const instance = M.Modal.getInstance(elem); instance.open(); }); document.getElementById('btnZone5').addEventListener('click', function () { const elem = document.getElementById('modalZone5'); const instance = M.Modal.getInstance(elem); instance.open(); }); document.getElementById('btnZone6').addEventListener('click', function () { const elem = document.getElementById('modalZone6'); const instance = M.Modal.getInstance(elem); instance.open(); }); document.getElementById('btnZone7').addEventListener('click', function () { const elem = document.getElementById('modalZoneExclus'); const instance = M.Modal.getInstance(elem); instance.open(); }); document.getElementById('zone2').addEventListener('click', function () { if (document.getElementById('zone2').checked == true) { document.getElementById('zone1').checked = true; document.getElementById('zone1').disabled = true; } else if (document.getElementById('zone2').checked == false) { document.getElementById('zone1').checked = true; document.getElementById('zone1').disabled = false; } }); document.getElementById('zone3').addEventListener('click', function () { if (document.getElementById('zone3').checked == true) { document.getElementById('zone2').checked = true; document.getElementById('zone1').checked = true; document.getElementById('zone2').disabled = true; document.getElementById('zone1').disabled = true; } else if (document.getElementById('zone3').checked == false) { document.getElementById('zone1').checked = true; document.getElementById('zone1').disabled = true; document.getElementById('zone2').checked = true; document.getElementById('zone2').disabled = false; } }); var radioButtonsFract = document.getElementsByName('fract'); for (var i = 0; i < radioButtonsFract.length; i++) { radioButtonsFract[i].addEventListener('change', function () { if (this.value == "mensuel") { document.getElementById("cotFraisHT").value = 36.00; } else if (this.value == "trimestriel") { document.getElementById("cotFraisHT").value = 144.00; } else if (this.value == "semestriel") { document.getElementById("cotFraisHT").value = 72.00; } else if (this.value == "annuel") { document.getElementById("cotFraisHT").value = 36.00; } calcCotAnnuelle() }); }; document.getElementById('btnNullDateDebut').addEventListener('click', function () { document.getElementById('dateEffet').value = "00/00/0000"; validateField('dateEffet', true); updateSubmitButtonState('projetForm'); }); document.getElementById('btnNullDateEcheance').addEventListener('click', function () { document.getElementById('dateEcheance').value = "00/00"; validateField('dateEcheance', true); updateSubmitButtonState('projetForm'); }); document.getElementById('btnNullDateFin').addEventListener('click', function () { document.getElementById('dateFin').value = "00/00/0000"; validateField('dateFin', true); updateSubmitButtonState('projetForm'); }); document.getElementById('btnModalDate').addEventListener('click', function () { const elem = document.getElementById('modalDate'); const instance = M.Modal.getInstance(elem); instance.open(); }); document.getElementById('dateEffet').addEventListener('input', function () { validateField('dateEffet', true); updateSubmitButtonState('projetForm'); }); document.getElementById('dateFin').addEventListener('input', function () { validateField('dateFin', true); updateSubmitButtonState('projetForm'); }); document.getElementById('dateEcheance').addEventListener('input', function () { validateField('dateEcheance', true); updateSubmitButtonState('projetForm'); }); document.getElementById('CA').addEventListener('input', function () { validateField('CA', true); updateSubmitButtonState('projetForm'); calcCotAnnuelle(); }); document.getElementById('cotisationIrreductible').addEventListener('input', function () { validateField('cotisationIrreductible', true); updateSubmitButtonState('projetForm'); }); document.getElementById('tauxCotRG').addEventListener('input', function () { validateField('tauxCotRG', true); updateSubmitButtonState('projetForm'); }); document.getElementById('tauxCotRO').addEventListener('input', function () { validateField('tauxCotRO', true); updateSubmitButtonState('projetForm'); calcCotAnnuelle(); }); document.getElementById('capitalColis').addEventListener('input', function () { validateField('capitalColis', true); updateSubmitButtonState('projetForm'); }); document.getElementById('capitalMax').addEventListener('input', function () { validateField('capitalMax', true); updateSubmitButtonState('projetForm'); }); document.getElementById('capitalExped').addEventListener('input', function () { validateField('capitalExped', true); updateSubmitButtonState('projetForm'); }); document.getElementById('capitalTPPC').addEventListener('input', function () { validateField('capitalTPPC', true); updateSubmitButtonState('projetForm'); }); document.getElementById('capitalExpo').addEventListener('input', function () { validateField('capitalExpo', true); updateSubmitButtonState('projetForm'); }); document.getElementById('franchiseTransport').addEventListener('input', function () { validateField('franchiseTransport', true); updateSubmitButtonState('projetForm'); }); document.getElementById('franchiseTPPC').addEventListener('input', function () { validateField('franchiseTPPC', true); updateSubmitButtonState('projetForm'); }); document.getElementById('franchiseExpo').addEventListener('input', function () { validateField('franchiseExpo', true); updateSubmitButtonState('projetForm'); }); document.getElementById('cotProvRG').addEventListener('input', function () { validateField('cotProvRG', true); updateSubmitButtonState('projetForm'); calcCotAnnuelle(); }); document.getElementById('cotProvRO').addEventListener('input', function () { validateField('cotProvRO', true); updateSubmitButtonState('projetForm'); calcCotAnnuelle(); }); document.getElementById('cotRO').addEventListener('input', function () { validateField('cotRO', true); updateSubmitButtonState('projetForm'); }); document.getElementById('cotRG').addEventListener('input', function () { validateField('cotRG', true); updateSubmitButtonState('projetForm'); }); document.getElementById('cotComptant').addEventListener('input', function () { validateField('cotComptant', true); updateSubmitButtonState('projetForm'); }); document.getElementById('cotAnnuelle').addEventListener('input', function () { validateField('cotAnnuelle', true); updateSubmitButtonState('projetForm'); }); document.getElementById('cotAnnuelleHT').addEventListener('input', function () { validateField('cotAnnuelleHT', true); updateSubmitButtonState('projetForm'); }); document.getElementById('marExpo').addEventListener('input', function () { validateField('marExpo', true); updateSubmitButtonState('projetForm'); }); document.getElementById('typeMar').addEventListener('input', function () { validateField('typeMar', true); updateSubmitButtonState('projetForm'); }); document.getElementById('activite').addEventListener('input', function () { validateField('activite', true); updateSubmitButtonState('projetForm'); }); document.querySelectorAll('table[id="moyenTransport"] input').forEach((element) => element.addEventListener('click', function () { transportChoixUnique(this) })); document.getElementById('risqueTransport').addEventListener('change', function () { afficherChip(document.querySelectorAll('select[name="risqueTransport"] option:not([value="placeholder"])')) }); document.getElementById('garantieOpt').addEventListener('change', function () { afficherChip(document.querySelectorAll('select[name="garantieOpt"] option:not([value="placeholder"])')) }); document.getElementById("TPPC").addEventListener('change', function () { toggleTypeTPPC(this) }); document.getElementById("marchandise-exposition").addEventListener('change', function () { toggleNombreExpo(this) }); document.querySelectorAll('input[name="risqueGuerre"]').forEach((element) => element.addEventListener('change', function () { toggleRG(this) })); document.querySelectorAll('input[name="typeContrat"]').forEach((element) => element.addEventListener('change', function () { toggleTypeContrat(this) })); document.querySelectorAll('input[name="valeurAssuree"]').forEach((element) => element.addEventListener('change', function () { toggleValeurAssuree(this) })); } // Handle event spécifique au limite de garantie activité window.handleInputActivity = function (inputId) { validateField(inputId, true); updateSubmitButtonState('projetForm'); }; // Peupler le formulaire avec les données function populateFormData() { //Poupulate select historique if (!contrat.historique) { document.getElementById('historiqueDiv').style.display = "none"; } else { document.getElementById('historiqueDiv').style.display = "block"; const idSelect = document.getElementById('idSelect'); contrat.historique.forEach(function (item) { var option = document.createElement('option'); option.value = item.id; const produitNom = item.produit.toUpperCase() option.textContent = item.type + " " + produitNom + " - " + item.date + " - " + item.heure; if (item.nom != undefined && item.prenom != undefined) { option.textContent += " - " + item.nom + " " + item.prenom; } idSelect.appendChild(option); }); M.FormSelect.init(idSelect); } if (produit.actAssure) { document.getElementById('activite').defaultValue = produit.actAssure } if (produit.typeMar) { document.getElementById('typeMar').defaultValue = produit.typeMar } if (produit.valeurAssuree) {document.querySelector('input[value="' + produit.valeurAssuree + '"][name="valeurAssuree"]').checked = true;} if (produit.valeurAssuree == 'derogation') { document.getElementById('row-valeurAssureeBase').style.display = "flex"; produit.valeurAssureeBase.forEach((option) => { document.querySelector('input[value="' + option + '"][name="valeurAssureeBase"]').checked = true; }); } populateAssuresAdditionnels(produit); //Zone Geo populateZoneGeo(produit); //Moyen de Transport if (produit.aerien) { document.querySelector('input[value="' + produit.aerien + '"][name="aerien"]').checked = true; } if (produit.terrestre) { document.querySelector('input[value="' + produit.terrestre + '"][name="terrestre"]').checked = true; } if (produit.maritime) { document.querySelector('input[value="' + produit.maritime + '"][name="maritime"]').checked = true; } if (produit.postal) { document.querySelector('input[value="' + produit.postal + '"][name="postal"]').checked = true; } if (produit.fluvial) { document.querySelector('input[value="' + produit.fluvial + '"][name="fluvial"]').checked = true; } //infos Garanties if (produit.typeTPPC && produit.typeTPPC !== "") { document.getElementById('TPPC').checked = true; document.getElementById("col-typetppc").style.display = "block"; document.querySelector('input[value="' + produit.typeTPPC + '"][name="typeTPPC"]').checked = true; toggleTypeTPPC(document.getElementById('TPPC')); document.getElementById('capitalTPPC').defaultValue = produit.capitalTPPC; document.getElementById('franchiseTPPC').defaultValue = produit.franchiseTPPC; } //infos Garanties if (produit.marExpo > 0) { document.getElementById('marchandise-exposition').checked = true; document.getElementById('col-numMarExpo').style.display = "block"; document.getElementById("marExpo").defaultValue = produit.marExpo; toggleNombreExpo(document.getElementById('marchandise-exposition')); document.getElementById('capitalExpo').defaultValue = produit.capitalExpo; document.getElementById('franchiseExpo').defaultValue = produit.franchiseExpo; } if (produit.risqueTransport && produit.risqueTransport != []) { produit.risqueTransport.forEach((option) => { document.querySelector('select[name="risqueTransport"] option[value="' + option + '"]').selected = true; document.getElementById(option + '-chip').style.display = "inline-block"; }); } if (produit.risqueGuerre) { const risqueGuerre = produit.risqueGuerre ?? ""; document.querySelector('input[value="' + risqueGuerre + '"][name="risqueGuerre"]').checked = true; toggleRG(document.querySelector('input[value="' + risqueGuerre + '"][name="risqueGuerre"]')); if (risqueGuerre == "auto") { document.querySelector('input[value="' + produit.typeGarantieRG + '"][name="typeGarantieRG"]').checked = true; document.getElementById("tauxCotRG").defaultValue = produit.tauxCotRG; } } if (produit.cotProvRG) { document.getElementById("cotProvRO").defaultValue = produit.cotProvRO; } if (produit.cotProvRO) { document.getElementById("cotProvRG").defaultValue = produit.cotProvRG; } if (produit.garOpt && produit.garOpt != []) { produit.garOpt.forEach((option) => { document.querySelector('select[name="garantieOpt"] option[value="' + option + '"]').selected = true; document.getElementById(option + '-chip').style.display = "inline-block"; }); } //Infos Contrat // Populate temporalité if (produit.tempo) { document.getElementById(produit.tempo).checked = true; if (produit.tempo == "mensuel" || produit.tempo == "annuel") { document.getElementById("cotFraisHT").value = 36.00; } else if (produit.tempo == "trimestriel") { document.getElementById("cotFraisHT").value = 144.00; } else if (produit.tempo == "semestriel") { document.getElementById("cotFraisHT").value = 72.00; } }; if (produit.dateEffet) {document.getElementById("dateEffet").value = produit.dateEffet;}; if (produit.dateEcheance) {document.getElementById("dateEcheance").value = produit.dateEcheance;}; if (produit.dateFin) {document.getElementById("dateFin").value = produit.dateFin;}; if (produit.programmeInternational) {document.getElementById("programmeInternationale").checked = true;} if (produit.participationResultat) {document.getElementById("participationResultat").checked = true;} if (produit.coassurance) {document.getElementById("coassurance").checked = true;} if (produit.lieuDepart) {document.getElementById("depart").defaultValue = produit.lieuDepart;} if (produit.lieuArrivee) {document.getElementById("arrivee").defaultValue = produit.lieuArrivee;} //cotisations if (produit.typeContrat) { document.querySelector('input[value="' + produit.typeContrat + '"][name="typeContrat"]').checked = true; toggleTypeContrat(document.querySelector('input[value="' + produit.typeContrat + '"][name="typeContrat"]')); } document.getElementById('CA').defaultValue = produit.ca ?? ''; document.getElementById('cotisationIrreductible').defaultValue = produit.cotIrred ?? ''; if (produit.capitalMax) {document.getElementById('capitalMax').defaultValue = produit.capitalMax;} if (produit.capitalColis) {document.getElementById('capitalColis').defaultValue = produit.capitalColis;} if (produit.capitalExped) {document.getElementById('capitalExped').defaultValue = produit.capitalExped;} if (produit.franchiseTransport) {document.getElementById('franchiseTransport').defaultValue = produit.franchiseTransport;} if (produit.tauxCotRG) {document.getElementById('tauxCotRG').defaultValue = produit.tauxCotRG;} if (produit.tauxCotRO) {document.getElementById('tauxCotRO').defaultValue = produit.tauxCotRO;} if (produit.cotProvRG) {document.getElementById('cotProvRG').defaultValue = produit.cotProvRG;} if (produit.cotProvRO) {document.getElementById('cotProvRO').defaultValue = produit.cotProvRO;} if (produit.cotRG) {document.getElementById('cotRG').defaultValue = produit.cotRG;} if (produit.cotRO) {document.getElementById('cotRO').defaultValue = produit.cotRO;} if (produit.cotAnnuelleHT) {document.getElementById('cotAnnuelleHT').defaultValue = produit.cotAnnuelleHT;} if (produit.cotAnnuelleTTC) {document.getElementById('cotAnnuelle').defaultValue = produit.cotAnnuelleTTC;} if (produit.cotComptant) {document.getElementById('cotComptant').defaultValue = produit.cotComptant;} } function populateAssuresAdditionnels(fac) { if (!fac || !fac.assureAdditionnel || Object.keys(fac.assureAdditionnel).length === 0) { console.log("Le JSON est vide, pas d'assurés additionnels à pré-remplir."); } else { document.getElementById('additionel').checked = true; document.getElementById('checkAdditionnel').style.display = "block"; for (let i = 0; i < fac.assureAdditionnel.length; i++) { const row = fac.assureAdditionnel[i]; addRowAdditionnel(row.nom, row.adresse, row.siret); } } } function populateZoneGeo(fac) { if (fac.zone1) {document.getElementById("zone1").checked = true;}; if (fac.zone2) { document.getElementById("zone2").checked = true; document.getElementById("zone1").checked = true; document.getElementById("zone1").disabled = true; }; if (fac.zone3) { document.getElementById("zone3").checked = true; document.getElementById("zone2").checked = true; document.getElementById("zone2").disabled = true; document.getElementById("zone1").checked = true; document.getElementById("zone1").disabled = true; }; if (fac.zone4) {document.getElementById("zone4").checked = true;}; if (fac.zone5) {document.getElementById("zone5").checked = true;}; if (fac.zone6) {document.getElementById("zone6").checked = true;}; } function handleLoadHistoriqueBtn() { var selectedId = document.getElementById('idSelect').value; if (selectedId != "") { fetch(`/contrat/update/${contrat.produit}/${contrat.id}/${selectedId}`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, }) .then(response => response.json()) .then(data => { if (data.valid) { window.location.href = `/navParcours?numParcours=${getNumParcoursFromURL()}&submenu=projet`; } else { console.log('Echec lors de la mise à jour de la relation id contrat - id client :', data); } }); } } // Ajouter une ligne au tableau function addRowAdditionnel(nomValue, adresseValue, siretValue) { const table = document.getElementById('empTableAdditionnel'); // Créer une nouvelle ligne avec des inputs éditables const newRow = table.insertRow(table.rows.length - 1); newRow.innerHTML = ` `; // Réinitialiser les valeurs de saisie document.getElementById('nomAdditionnel').value = ''; document.getElementById('adresseAditionnel').value = ''; document.getElementById('siretAdditionnel').value = ''; // Ajouter un écouteur d'événements pour supprimer newRow.querySelector('.delete-btn').addEventListener('click', function () { deleteRow(this); }); } // Supprimer une ligne du tableau function deleteRow(btn) { const row = btn.parentElement.parentElement; row.parentElement.removeChild(row); } // Contruit la structure Assuré additionnel à envoyer à la BDD function extractAssureAdditionnel(tableId) { const jsonArr = []; const table = document.getElementById(tableId); if (table && document.getElementById("additionel").checked) { const rows = table.querySelectorAll('tr:not(:first-child)'); rows.forEach(row => { const allInputsEmpty = Array.from(row.querySelectorAll('input')).every(input => input.value === ''); if (!allInputsEmpty) { const inputs = row.querySelectorAll('input'); const dataObj = {}; inputs.forEach(input => { const fieldName = input.getAttribute('name'); const fieldValue = input.value || "Non défini"; dataObj[fieldName] = fieldValue; }); jsonArr.push(dataObj); } }); const jsonResult = JSON.stringify(jsonArr, null, 2); return jsonResult; } return "[]"; // Retourne un tableau JSON vide si aucune saisie n'est trouvée dans le tableau } function extractTempo() { let tempo = ""; if (document.getElementById("mensuel").checked == true) {tempo = "mensuel";} if (document.getElementById("trimestriel").checked == true) {tempo = "trimestriel";} if (document.getElementById("semestriel").checked == true) {tempo = "semestriel";} if (document.getElementById("annuel").checked == true) {tempo = "annuel";} return tempo; } function calcCotAnnuelle() { const valueCA = parseFloat(document.getElementById("CA").value) || 0; const valueTaux = parseFloat(document.getElementById("tauxCotRO").value) || 0; const valueFractionnement = parseFloat(document.getElementById("cotFraisHT").value) || 0 const valueCotRO = parseFloat(document.getElementById("cotProvRO").value) || 0; const valueCotRG = parseFloat(document.getElementById("cotProvRG").value) || 0; const valueContribAttentat = 6.50; const cotHT = (valueCA * valueTaux / 100); const cotTTC = (cotHT + valueFractionnement + valueContribAttentat + valueCotRG + valueCotRO); document.getElementById("cotAnnuelleHT").value = cotHT.toFixed(2); document.getElementById("cotAnnuelle").value = cotTTC.toFixed(2); } function transportChoixUnique(element) { //Empêche de cochage des evenements majeurs ET tous risques if (element.checked) { if (element.id == element.name + '-tousRisques') { document.querySelector('input[id=' + element.name + '-eventMaj]').checked = false } else { document.querySelector('input[id=' + element.name + '-tousRisques]').checked = false } } } function afficherChip(element) { //Affiche les options selectionnées sous forme de chip element.forEach(option => { if (option.selected) { document.getElementById(option.value + '-chip').style.display = "inline-block" } else { document.getElementById(option.value + '-chip').style.display = "none" } }) } function toggleTypeTPPC(element) { //Affiche/Desaffiche les options liées au TPPC document.getElementById('col-typetppc').style.display = element.checked ? "block" : "none" document.getElementById('row-franchiseTPPC').style.display = element.checked ? "table-row" : "none" document.getElementById('row-capitalTPPC').style.display = element.checked ? "table-row" : "none" } function toggleNombreExpo(element) { //Affiche/Desaffiche les options liées à la marchandise d'expo document.getElementById("col-numMarExpo").style.display = element.checked ? "block" : "none" document.getElementById("row-capitalExpo").style.display = element.checked ? "table-row" : "none" document.getElementById("row-franchiseExpo").style.display = element.checked ? "table-row" : "none" } function toggleRG(element) { //Affiche/Desaffiche les options liées aux risques de guerre if (element.value == "auto") { document.getElementById("row-tauxCotRG").style.display = "table-row" document.getElementById("row-cotProvRO").style.display = "table-row" document.getElementById("row-cotProvRG").style.display = "table-row" document.getElementById('row-cotRG').style.display = "table-row" } else if (element.value == "demande") { document.getElementById("row-tauxCotRG").style.display = "none" document.getElementById("row-cotProvRO").style.display = "none" document.getElementById("row-cotProvRG").style.display = "none" document.getElementById('row-cotRG').style.display = "none" } else if (element.value == "" || element.value == "no-rg") { document.getElementById("row-tauxCotRG").style.display = "none" document.getElementById("row-cotProvRO").style.display = "none" document.getElementById("row-cotProvRG").style.display = "none" document.getElementById('row-cotRG').style.display = "none" } document.getElementById("row-typeGarantieRG").style.display = element.value == "auto" ? "block" : "none" } function toggleTypeContrat(element) { //Affiche/Desaffiche les options liées au type de déclaration if (contrat.type !== "TEMPORAIRE") { if (element.value == "avisAliments") { document.getElementById("colTauxAjustement").style.display = "block" document.getElementById("colDetailCot").style.display = "none" document.getElementById("colCA").style.display = "none" document.getElementById("colCotMini").style.display = "none" } else if (element.value == "chiffreAffaires") { document.getElementById("colTauxAjustement").style.display = "block" document.getElementById("colDetailCot").style.display = "block" document.getElementById("colCA").style.display = "block" document.getElementById("colCotMini").style.display = "block" } } } function toggleValeurAssuree(element) { //Affiche/desaffiche les options liées à la valeur assurées document.getElementById("row-valeurAssureeBase").style.display = element.value == "derogation" ? "flex" : "none" } function afficherFAC() { if (contrat.type == "AN") { document.getElementById('row-rg-no').style.display = "none" document.getElementById('row-detailsVoyage').style.display = "none" document.getElementById('row-cotAnnuelle').style.display = "table-row" document.getElementById('colTypeContrat').style.display = "block" document.getElementById('col-valeurAssuree').style.display = "block" document.getElementById('col-activite').style.display = "block" } else if (contrat.type == "TEMPORAIRE") { document.getElementById('row-zonesGeo').style.display = "none" document.getElementById('row-TPPC').style.display = "none" document.getElementById('row-rg-demande').style.display = "none" document.getElementById('row-rg-no').style.display = "block" document.getElementById('rg-demande').checked = false document.getElementById('rg-auto').checked = false document.getElementById('no-rg').checked = true document.getElementById('row-typeGarantieRG').style.display = "none" document.getElementById('row-risqueTransport').style.display = "none" document.getElementById('colTypeContrat').style.display = "none" document.getElementById('row-fractionnement').style.display = "none" document.getElementById('rowDateEcheance').style.display = "none" document.getElementById('rowDateFin').style.display = "block" document.getElementById('row-detailsVoyage').style.display = "block" document.getElementById('row-programmeInternational').style.display = "none" document.getElementById('row-participationResultats').style.display = "none" document.getElementById('row-cotAnnuelle').style.display = "none" document.getElementById('row-cotRO').style.display = "table-row" document.getElementById('row-cotComptant').style.display = "table-row" document.getElementById('row-capitalColis').style.display = "none" document.getElementById('row-capitalExped').style.display = "none" document.getElementById('colTauxAjustement').style.display = "none" document.getElementById('colCA').style.display = "none" document.getElementById('colCotMini').style.display = "none" document.getElementById('col-activite').style.display = "none" document.getElementById('activite').value = "not-null" document.getElementById('col-valeurAssuree').style.display = "none" } else if (contrat.type == "REMPLACEMENT") { document.getElementById('row-rg-no').style.display = "none" document.getElementById('row-detailsVoyage').style.display = "none" document.getElementById('row-cotProvRO').style.display = "table-row" document.getElementById('row-cotProvRG').style.display = "table-row" document.getElementById('row-cotAnnuelle').style.display = "table-row" document.getElementById('colTypeContrat').style.display = "block" document.getElementById('col-valeurAssuree').style.display = "block" document.getElementById('col-activite').style.display = "block" } } function choixMultipleArray(name, select = false) { if (select) { return [...document.querySelectorAll('select[name="' + name + '"] option:checked:not([value="placeholder"])')].map((element) => element.value) } else { return [...document.querySelectorAll('input[name="' + name + '"]:checked')].map((element) => element.value) } } function verifierAccesValeur(id, regles) { var valide = true for (const regle of regles) { if (!document.getElementById(regle)?.checked) {valide = false} } return valide ? document.getElementById(id).value : "" } // Gérer la soumission du formulaire async function handleSubmitForm(event) { event.preventDefault(); const body = { // Activités "actAssure": contrat.type !== "TEMPORAIRE" ? document.getElementById("activite").value : "", "typeMar": document.getElementById('typeMar').value, "valeurAssuree": contrat.type !== "TEMPORAIRE" ? document.querySelector('input[name="valeurAssuree"]:checked').value : "", "valeurAssureeBase": document.getElementById('valeurAssuree-degoration').checked ? choixMultipleArray("valeurAssureeBase") : "", "assureAdditionnel": extractAssureAdditionnel('empTableAdditionnel'), // Territorialités "zone1": document.getElementById("zone1").checked, "zone2": document.getElementById("zone2").checked, "zone3": document.getElementById("zone3").checked, "zone4": document.getElementById("zone4").checked, "zone5": document.getElementById("zone5").checked, "zone6": document.getElementById("zone6").checked, //Moyen de Transport "terrestre": document.querySelector('input[name="terrestre"]:checked')?.value ?? "", "maritime": document.querySelector('input[name="maritime"]:checked')?.value ?? "", "aerien": document.querySelector('input[name="aerien"]:checked')?.value ?? "", "postal": document.querySelector('input[name="postal"]:checked')?.value ?? "", "fluvial": document.querySelector('input[name="fluvial"]:checked')?.value ?? "", //Infos Garanties "typeTPPC": document.getElementById('TPPC').checked ? document.querySelector('input[name="typeTPPC"]:checked').value : "", "marExpo": document.getElementById('marchandise-exposition').checked ? document.getElementById('marExpo').value : "", "risqueTransport": choixMultipleArray('risqueTransport', true), "garOpt": choixMultipleArray('garantieOpt', true), "risqueGuerre": document.querySelector('input[name="risqueGuerre"]:checked').value, "typeGarantieRG": document.getElementById('rg-auto').checked ? document.querySelector('input[name="typeGarantieRG"]:checked').value : "", // Temporalités "tempo": contrat.type !== "TEMPORAIRE" ? extractTempo() : '', "dateEffet": document.getElementById("dateEffet").value, "dateEcheance": document.getElementById("dateEcheance").value, "dateFin": document.getElementById("dateFin").value, "coassurance": document.getElementById("coassurance").checked, "programmeInternational": document.getElementById("programmeInternationale").checked, "participationResultat": document.getElementById("participationResultat").checked, "lieuDepart": document.getElementById("depart").value, "lieuArrivee": document.getElementById("arrivee").value, // Cotisations "typeContrat": contrat.type !== "TEMPORAIRE" ? document.querySelector('input[name="typeContrat"]:checked').value : "", "ca": verifierAccesValeur("CA", ['typeContrat-chiffreAffaires']), "cotIrred": verifierAccesValeur("cotisationIrreductible", ['typeContrat-chiffreAffaires']), "capitalMax": document.getElementById('capitalMax').value, "capitalColis": document.getElementById('capitalColis').value, "capitalExped": document.getElementById('capitalExped').value, "capitalTPPC": verifierAccesValeur("capitalTPPC", ['TPPC']), "capitalExpo": verifierAccesValeur("capitalExpo", ['marchandise-exposition']), "franchiseTransport": document.getElementById('franchiseTransport').value, "franchiseExpo": verifierAccesValeur("franchiseExpo", ['marchandise-exposition']), "franchiseTPPC": verifierAccesValeur("franchiseTPPC", ['TPPC']), "tauxCotRO": verifierAccesValeur("tauxCotRO", []), "tauxCotRG": verifierAccesValeur("tauxCotRG", ['rg-auto']), "cotProvRO": contrat.type !== "TEMPORAIRE" ? verifierAccesValeur('cotProvRO', ['rg-auto', 'typeContrat-chiffreAffaires']) : document.getElementById('cotProvRO').value, "cotProvRG": contrat.type !== "TEMPORAIRE" ? verifierAccesValeur('cotProvRG', ['rg-auto', 'typeContrat-chiffreAffaires']) : document.getElementById('cotProvRG').value, 'cotAnnuelleHT': contrat.type !== "TEMPORAIRE" ? verifierAccesValeur('cotAnnuelleHT', ['typeContrat-chiffreAffaires']) : "", 'cotAnnuelleTTC': contrat.type !== "TEMPORAIRE" ? verifierAccesValeur('cotAnnuelle', ['typeContrat-chiffreAffaires']) : "", 'cotRO': document.getElementById('cotRO').value, 'cotRG': document.getElementById('cotRG').value, 'cotComptant': document.getElementById('cotComptant').value // Vous pouvez ajouter d'autres données pour la saisie dans la collection FAC ici } const response = await fetch(`/fac/create`, { method: 'POST', body: JSON.stringify(body), headers: { 'Content-Type': 'application/json', }, }); const data = await response.json(); if (data.valid) { const idProjet = data.fac.id; // Mettre à jour le champ "fac" dans le contrat avec l'ID de la nouvelle saisie const responseContratEnCours = await fetch(`/contrat/update/${contrat.produit}/${contrat.id}/${idProjet}`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, }); const dataContratEnCours = await responseContratEnCours.json(); if (dataContratEnCours.valid) { // Obtenir la date actuelle au format "JJ/MM/AAAA" const currentDate = new Date(); const day = String(currentDate.getDate()).padStart(2, '0'); const month = String(currentDate.getMonth() + 1).padStart(2, '0'); // Les mois sont indexés à partir de 0, donc +1 const year = currentDate.getFullYear(); const formattedDate = `${day}/${month}/${year}`; //Obtenir l'user const token = localStorage.getItem('jwtToken'); const decoded = jwt_decode(token); const userFirstName = decoded.userFirstName; const userLastName = decoded.userLastName; // Obtenir l'heure actuelle au format "HHhMM" const hours = String(currentDate.getHours()).padStart(2, '0'); const minutes = String(currentDate.getMinutes()).padStart(2, '0'); const seconds = String(currentDate.getSeconds()).padStart(2, '0'); const formattedTime = `${hours}:${minutes}:${seconds}`; const nom = userLastName; const prenom = userFirstName; // Mettre à jour le champ "historique" dans le contrat avec les nouvelles données d'historique const historiqueData = [ { "type": contrat.type, "date": formattedDate, "heure": formattedTime, "produit": "FAC", "id": idProjet, "nom": nom, "prenom": prenom, } ]; const responseHistoriqueUpdate = await fetch(`/contrat/update/historique/${contrat.id}`, { method: 'POST', body: JSON.stringify({historiqueData}), headers: { 'Content-Type': 'application/json', }, }); const dataHistoriqueUpdate = await responseHistoriqueUpdate.json(); if (dataHistoriqueUpdate.valid) { /////////////////////////////////////////////////////////////////////////////////////////////////////// /// TODO DEBUT Génération fichier à l'enregistrement A RETIRER QUAND MODE CONTRAT const numParcours = getNumParcoursFromURL(); let filename; // Envoi de la requête POST au serveur pour générer le projet fetch(`/generate/fac/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 window.location.href = `/navParcours?numParcours=${getNumParcoursFromURL()}&submenu=projet`; }) .catch(error => console.error('Erreur lors de la génération du projet:', error)); /// TODO FIN Génération fichier à l'enregistrement A RETIRER QUAND MODE CONTRAT /////////////////////////////////////////////////////////////////////////////////////////////////////// // TODO NE PAS OUBLIER LE HREF QUI EST DANS LE GEN ACTUELLEMENT // window.location.href = `/navParcours?numParcours=${getNumParcoursFromURL()}&submenu=projet`; } else { console.log('Echec lors de la mise à jour de l\'historique du contrat :', dataHistoriqueUpdate.message); } } else { console.log('Echec lors de la mise à jour du champ "enCours" dans le contrat :', dataContratEnCours.message); } } else { console.log('Echec lors de la création de la saisie dans la collection FAC :', data.message); } } // Exposer init globalement pour y accéder depuis l'extérieur window.initSubmenuForm = init; })();