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, fac, projet, tarif; // 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; fac = contrat?.["@expand"]?.enCours || null; projet = fac?.["@expand"]?.projet || null; tarif = fac?.["@expand"]?.tarif || 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', function (e) { e.preventDefault() submitForm() }); 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 (e) { if (tarif) { e.preventDefault() openModaleModif() } else { 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 (e) { if (tarif) { e.preventDefault() openModaleModif() } else { 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.getElementsByName('zone').forEach((zone) => { zone.addEventListener('click', function (e) { if (tarif) { e.preventDefault() openModaleModif() } }) }) document.getElementById('zone2').addEventListener('click', function (e) { if (tarif) { e.preventDefault() } else { 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 (tarif) { e.preventDefault() } else { 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; } } }); document.getElementsByName('fract').forEach((radio) => { radio.addEventListener('change', function () { const cotHT = parseFloat(document.getElementById("cotAnnuelleHT").value) document.getElementById("cotAnnuelle").value = (cotHT + getFraisHT()); }) }) 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('keydown', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { validateField('CA', true); updateSubmitButtonState('projetForm'); calcCotAnnuelle(); } }); document.getElementById('cotisationIrreductible').addEventListener('keydown', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { validateField('cotisationIrreductible', true); updateSubmitButtonState('projetForm'); } }); document.getElementById('tauxCotRG').addEventListener('keydown', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { validateField('tauxCotRG', true); updateSubmitButtonState('projetForm'); } }); document.getElementById('tauxCotRO').addEventListener('keydown', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { validateField('tauxCotRO', true); updateSubmitButtonState('projetForm'); updateRO(calcCotRO().toFixed(2)) 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('keydown', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { validateField('capitalTPPC', true); updateSubmitButtonState('projetForm'); } }); document.getElementById('capitalExpo').addEventListener('keydown', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { validateField('capitalExpo', true); updateSubmitButtonState('projetForm'); } }); document.getElementById('franchiseTransport').addEventListener('input', function () { validateField('franchiseTransport', true); updateSubmitButtonState('projetForm'); }); document.getElementById('franchiseTPPC').addEventListener('keydown', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { validateField('franchiseTPPC', true); updateSubmitButtonState('projetForm'); } }); document.getElementById('franchiseExpo').addEventListener('keydown', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { validateField('franchiseExpo', true); updateSubmitButtonState('projetForm'); } }); document.getElementById('cotProvRG').addEventListener('keydown', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { validateField('cotProvRG', true); updateSubmitButtonState('projetForm'); calcCotAnnuelle(); } }); document.getElementById('cotProvRO').addEventListener('keydown', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { validateField('cotProvRO', true); updateSubmitButtonState('projetForm'); document.getElementById("tauxCotRO").value = calcTauxRO().toFixed(3) calcCotAnnuelle(); } }); document.getElementById('cotRO').addEventListener('keydown', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { validateField('cotRO', true); updateSubmitButtonState('projetForm'); } }); document.getElementById('cotRG').addEventListener('keydown', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { 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('keydown', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { document.getElementById('cotAnnuelle').value = parseFloat(this.value) + getFraisHT() validateField('cotAnnuelleHT', true); updateSubmitButtonState('projetForm'); } }); document.getElementById('marExpo').addEventListener('input', function () { validateField('marExpo', true); updateSubmitButtonState('projetForm'); }); document.getElementById('typeMar').addEventListener('keydown', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { validateField('typeMar', true); updateSubmitButtonState('projetForm'); } }); document.getElementById('activite').addEventListener('keydown', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { validateField('activite', true); updateSubmitButtonState('projetForm'); } }); document.querySelectorAll('table[id="moyenTransport"] input').forEach((element) => element.addEventListener('click', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { 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('click', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { toggleTypeTPPC(this) } }); document.getElementById('modif-OK').addEventListener('click', function (e) { e.preventDefault() redirectToTarif() }) document.getElementById("marchandise-exposition").addEventListener('click', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { toggleNombreExpo(this) } }); document.querySelectorAll('input[name="risqueGuerre"]').forEach((element) => element.addEventListener('click', function (e) { if (tarif) { e.preventDefault() openModaleModif() } else { toggleRG(this.value) updateRO(calcCotRO().toFixed(2)) calcCotAnnuelle(); } })); 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 || contrat.historique == [null]) { document.getElementById('historiqueDiv').style.display = "none"; } else { document.getElementById('historiqueDiv').style.display = "block"; const idSelect = document.getElementById('idSelect'); contrat.historique.forEach(function (item) { if (item != null) { var option = document.createElement('option'); option.value = item.id; option.textContent = item.type + " " + item.produit + " - " + item.date + " - " + item.heure; if (item.nom != undefined && item.prenom != undefined) { option.textContent += " - " + item.nom + " " + item.prenom; } idSelect.appendChild(option); } }); M.FormSelect.init(idSelect); } document.getElementById('activite').defaultValue = fac.actAssuree ?? ""; if (contrat.type !== "TEMPORAIRE") { document.getElementById('typeMar').defaultValue = fac.typeMar ?? ""; } if (fac.zones !== undefined && fac.zones.length > 0) { populateZoneGeo(fac.zones); } if (fac?.aerien) { document.querySelector('input[value="' + fac.aerien + '"][name="aerien"]').checked = true; } if (fac?.terrestre) { document.querySelector('input[value="' + fac.terrestre + '"][name="terrestre"]').checked = true; } if (fac?.maritime) { document.querySelector('input[value="' + fac.maritime + '"][name="maritime"]').checked = true; } if (fac?.postal) { document.querySelector('input[value="' + fac.postal + '"][name="postal"]').checked = true; } if (fac?.fluvial) { document.querySelector('input[value="' + fac.fluvial + '"][name="fluvial"]').checked = true; } if (fac?.tppc) { document.getElementById('TPPC').checked = true; document.getElementById("col-typetppc").style.display = "block"; document.getElementById('capitalTPPC').defaultValue = fac.capitalTPPC; document.getElementById('franchiseTPPC').defaultValue = fac.franchiseTPPC; toggleTypeTPPC(document.getElementById('TPPC')); if (projet && projet.typeTPPC !== "") { document.querySelector('input[value="' + projet.typeTPPC + '"][name="typeTPPC"]').checked = true; } } if (fac?.nbVehicExpo > 0) { document.getElementById('marchandise-exposition').checked = true; document.getElementById('col-numMarExpo').style.display = "block"; document.getElementById("marExpo").defaultValue = fac.nbVehicExpo; toggleNombreExpo(document.getElementById('marchandise-exposition')); document.getElementById('capitalExpo').defaultValue = fac.capitalExpo; document.getElementById('franchiseExpo').defaultValue = fac.franchiseExpo; } if (fac?.rg) { const risqueGuerre = fac.rg ?? ""; document.querySelector('input[value="' + risqueGuerre + '"][name="risqueGuerre"]').checked = true; toggleRG(risqueGuerre); if (risqueGuerre == "auto") { if (fac.typeRG.length > 0) { //Le Type Etendue prend le dessus sur le type waterborne const typeRG = fac.typeRG.includes('etendue') ? "etendue" : "waterborne" document.querySelector('input[value="' + typeRG + '"][name="typeGarantieRG"]').checked = true; } } } if (projet?.valeurAssuree) {document.querySelector('input[value="' + projet.valeurAssuree + '"][name="valeurAssuree"]').checked = true;} if (projet?.valeurAssuree == 'derogation') { document.getElementById('row-valeurAssureeBase').style.display = "flex"; projet.valeurAssureeBase.forEach((option) => { document.querySelector('input[value="' + option + '"][name="valeurAssureeBase"]').checked = true; }); } populateAssuresAdditionnels(projet); //infos Garanties if (projet?.risqueTransport.length > 0) { projet.risqueTransport.forEach((option) => { document.querySelector('select[name="risqueTransport"] option[value="' + option + '"]').selected = true; document.getElementById(option + '-chip').style.display = "inline-block"; }); } if (projet?.garOpt.length > 0) { projet.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 (projet?.tempo) { document.getElementById(projet.tempo).checked = true; }; if (projet?.dateEffet) {document.getElementById("dateEffet").value = projet.dateEffet;}; if (projet?.dateEcheance) {document.getElementById("dateEcheance").value = projet.dateEcheance;}; if (projet?.dateFin) {document.getElementById("dateFin").value = projet.dateFin;}; if (projet?.programmeInternational) {document.getElementById("programmeInternationale").checked = true;} if (projet?.participationResultat) {document.getElementById("participationResultat").checked = true;} if (projet?.coassurance) {document.getElementById("coassurance").checked = true;} if (projet?.lieuDepart) {document.getElementById("depart").defaultValue = projet.lieuDepart;} if (projet?.lieuArrivee) {document.getElementById("arrivee").defaultValue = projet.lieuArrivee;} //cotisations if (projet?.typeContrat) { document.querySelector('input[value="' + projet.typeContrat + '"][name="typeContrat"]').checked = true; toggleTypeContrat(document.querySelector('input[value="' + projet.typeContrat + '"][name="typeContrat"]')); } document.getElementById('CA').defaultValue = fac?.ca ?? ''; document.getElementById('cotisationIrreductible').defaultValue = fac?.primeMini ?? ''; if (projet?.capitalMax) {document.getElementById('capitalMax').defaultValue = projet.capitalMax;} if (projet?.capitalColis) {document.getElementById('capitalColis').defaultValue = projet.capitalColis;} if (projet?.capitalExped) {document.getElementById('capitalExped').defaultValue = projet.capitalExped;} if (projet?.franchiseTransport) {document.getElementById('franchiseTransport').defaultValue = projet.franchiseTransport;} document.getElementById('tauxCotRG').defaultValue = fac?.tauxCotRG ?? ''; document.getElementById('tauxCotRO').defaultValue = fac?.tauxCotRO ?? ''; document.getElementById('cotProvRG').defaultValue = fac?.cotProvRG ?? ''; document.getElementById('cotProvRO').defaultValue = fac?.cotProvRO ?? ''; document.getElementById('cotRG').defaultValue = fac?.cotRG ?? ''; document.getElementById('cotRO').defaultValue = fac?.cotRO ?? ''; document.getElementById('cotAnnuelleHT').defaultValue = fac?.primeHT ?? ''; document.getElementById('cotAnnuelle').defaultValue = fac?.primeHT ? fac.primeHT + getFraisHT() : ''; document.getElementById('cotComptant').defaultValue = fac?.primeHT ?? ''; } function populateAssuresAdditionnels(projet) { if (!projet || !projet.assureAdditionnel || Object.keys(projet.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 < projet.assureAdditionnel.length; i++) { const row = projet.assureAdditionnel[i]; addRowAdditionnel(row.nom, row.adresse, row.siret); } } } function populateZoneGeo(zones) { if (zones.includes('zone1')) {document.getElementById("zone1").checked = true;}; if (zones.includes('zone2')) { document.getElementById("zone2").checked = true; document.getElementById("zone1").checked = true; document.getElementById("zone1").disabled = true; }; if (zones.includes('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 (zones.includes('zone4')) {document.getElementById("zone4").checked = true;}; if (zones.includes('zone5')) {document.getElementById("zone5").checked = true;}; if (zones.includes('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 = `