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 = ` `; // 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 getTempo() { if (document.getElementById("mensuel").checked == true) {return "mensuel";} if (document.getElementById("trimestriel").checked == true) {return "trimestriel";} if (document.getElementById("semestriel").checked == true) {return "semestriel";} if (document.getElementById("annuel").checked == true) {return "annuel";} return tempo; } function getFraisHT() { const tempo = getTempo() if (tempo == "mensuel" || tempo == "annuel") { return 36.00; } else if (tempo == "trimestriel") { return 144.00; } else if (tempo == "semestriel") { return 72.00; } } function getZones() { return [...document.getElementsByName('zone')].filter((zone) => zone.checked).map((zone) => zone.id) } function calcCotRO() { const ca = parseFloat(document.getElementById("CA").value) || 0; const tauxRO = parseFloat(document.getElementById("tauxCotRO").value) || 0; return (tauxRO * ca / 100) } function calcTauxRO() { const ca = parseFloat(document.getElementById("CA").value) || 0; const cotRO = parseFloat(document.getElementById("cotProvRO").value) || 0; return (cotRO / ca * 100) } function calcCotAnnuelle() { const valueFractionnement = getFraisHT() const cotProvRG = parseFloat(document.getElementById("cotProvRG").value) || 0; const cotProvRO = calcCotRO() const valueContribAttentat = 6.50; const cotHT = cotProvRG + cotProvRO const cotTTC = cotHT + valueFractionnement + valueContribAttentat document.getElementById("cotAnnuelleHT").value = cotHT.toFixed(2); document.getElementById("cotAnnuelle").value = cotTTC.toFixed(2); } function updateRO(ro) { const inputCotRO = document.getElementById('cotRO') const inputCotProvRO = document.getElementById('cotProvRO') if (inputCotRO.checkVisibility()) { inputCotRO.value = ro } else if (inputCotProvRO.checkVisibility()) { inputCotProvRO.value = ro } } 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(rg) { //Affiche/Desaffiche les options liées aux risques de guerre if (contrat.type == "TEMPORAIRE") { if (rg == "auto") { document.getElementById("row-tauxCotRG").style.display = "none" document.getElementById("row-cotProvRO").style.display = "none" document.getElementById("row-cotProvRG").style.display = "none" document.getElementById("row-cotRO").style.display = "table-row" document.getElementById("row-cotRG").style.display = "table-row" } else if (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-cotRO").style.display = "table-row" document.getElementById("row-cotRG").style.display = "none" } } else { if (rg == "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-cotRO").style.display = "table-row" document.getElementById("row-cotRG").style.display = "none" } else if (rg == "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-cotRO").style.display = "none" document.getElementById("row-cotRG").style.display = "none" } } document.getElementById("row-typeGarantieRG").style.display = rg == "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 = "none" 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 = true 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-typeGarantieRG').style.display = "block" document.getElementById('row-cotRO').style.display = "table-row" document.getElementById('row-cotRG').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 openModaleModif() { const elem = document.getElementById('modalModif'); const instance = M.Modal.getInstance(elem); instance.open(); } async function redirectToTarif() { if(await submitForm(false, false)){ window.location.href = `/navParcours?numParcours=${getNumParcoursFromURL()}&submenu=tarif`; } } // Gérer la soumission du formulaire async function submitForm(updateProjet = true, generateProject = true) { const bodyProjet = { // Activités "valeurAssuree": contrat.type !== "TEMPORAIRE" ? document.querySelector('input[name="valeurAssuree"]:checked').value : "", "valeurAssureeBase": document.getElementById('valeurAssuree-degoration').checked ? choixMultipleArray("valeurAssureeBase") : "", "assureAdditionnel": extractAssureAdditionnel('empTableAdditionnel'), //Infos Garanties "typeTPPC": document.getElementById('TPPC').checked ? document.querySelector('input[name="typeTPPC"]:checked').value : "", "risqueTransport": choixMultipleArray('risqueTransport', true), "garOpt": choixMultipleArray('garantieOpt', true), // Temporalités "tempo": contrat.type !== "TEMPORAIRE" ? getTempo() : '', "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 : "", "capitalMax": document.getElementById('capitalMax').value, "capitalColis": document.getElementById('capitalColis').value, "capitalExped": document.getElementById('capitalExped').value, "franchiseTransport": document.getElementById('franchiseTransport').value, 'cotAnnuelleTTC': document.getElementById('cotAnnuelle').checkVisibility() ? document.getElementById('cotAnnuelle').value : "", } const response = await fetch(`/fac/createProjet`, { method: 'POST', body: JSON.stringify(bodyProjet), headers: { 'Content-Type': 'application/json', }, }); const dataProjet = await response.json(); if (dataProjet.valid) { const idProjet = dataProjet.fac.id const idTarif = fac?.tarif ?? "" const typeRG = fac?.typeRG ?? document.getElementById('rg-auto').checked ? document.querySelector('input[name="typeGarantieRG"]:checked').value : "" if (updateProjet) { var bodyFAC = { projet: idProjet, tarif: idTarif, nbVehicExpo: document.getElementById('marchandise-exposition').checked ? document.getElementById('marExpo').value : "", actAssuree: contrat.type !== "TEMPORAIRE" ? document.getElementById("activite").value : "", typeMar: document.getElementById('typeMar').value, ca: document.getElementById('CA').checkVisibility() ? document.getElementById('CA').value : "", cotRO: document.getElementById('cotRO').checkVisibility() ? document.getElementById('cotRO').value : "", cotRG: document.getElementById('cotRG').checkVisibility() ? document.getElementById('cotRG').value : "", cotProvRO: document.getElementById('cotProvRO').checkVisibility() ? document.getElementById('cotProvRO').value : "", cotProvRG: document.getElementById('cotProvRG').checkVisibility() ? document.getElementById('cotProvRG').value : "", tauxCotRO: document.getElementById('tauxCotRO').checkVisibility() ? document.getElementById('tauxCotRO').value : "", tauxCotRG: document.getElementById('tauxCotRG').checkVisibility() ? document.getElementById('tauxCotRG').value : "", capitalTPPC: document.getElementById('capitalTPPC').checkVisibility() ? document.getElementById('capitalTPPC').value : "", capitalExpo: document.getElementById('capitalExpo').checkVisibility() ? document.getElementById('capitalExpo').value : "", franchiseExpo: document.getElementById('franchiseExpo').checkVisibility() ? document.getElementById('franchiseExpo').value : "", franchiseTPPC: document.getElementById('franchiseTPPC').checkVisibility() ? document.getElementById('franchiseTPPC').value : "", typeRG: typeRG, zones: getZones(), 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 ?? "", multimodal: "",// A VOIR tppc: document.getElementById('TPPC').checked, rg: document.querySelector('input[name="risqueGuerre"]:checked').value, primeHT: document.getElementById('cotAnnuelleHT').checkVisibility() ? document.getElementById('cotAnnuelleHT').value : "", primeMini: document.getElementById('cotisationIrreductible').value } } else { var bodyFAC = { projet: idProjet, tarif: idTarif, nbVehicExpo: fac.nbVehicExpo, actAssuree: fac.actAssuree, typeMar: fac.typeMar, ca: fac.ca, cotRO: fac.cotRO, cotRG: fac.cotRG, cotProvRO: fac.cotProvRO, cotProvRG: fac.cotProvRG, tauxCotRO: fac.tauxCotRO, tauxCotRG: fac.tauxCotRG, capitalTPPC: fac.capitalTPPC, capitalExpo: fac.capitalExpo, franchiseExpo: fac.franchiseExpo, franchiseTPPC: fac.franchiseTPPC, typeRG: fac.typeRG, zones: fac.zones, terrestre: fac.terrestre, maritime: fac.maritime, aerien: fac.aerien, postal: fac.postal, fluvial: fac.fluvial, multimodal: fac.multimodal, tppc: fac.tppc, rg: fac.rg, primeHT: fac.primeHT, primeMini: fac.primeMini } } const responseFAC = await fetch(`/fac/create`, { method: 'POST', body: JSON.stringify(bodyFAC), headers: { 'Content-Type': 'application/json', }, }); const dataFAC = await responseFAC.json(); if (dataFAC.valid) { const idFAC = dataFAC.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}/${idFAC}`, { 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, "projet": "FAC", "id": idFAC, "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 (generateProject) { 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 { return dataHistoriqueUpdate.valid } } else { console.log('Echec lors de la mise à jour du champ "enCours" dans le contrat :', dataContratEnCours.message); } } } } // Exposer init globalement pour y accéder depuis l'extérieur window.initSubmenuForm = init; })();