personnal/etv2/public/js/intermediaire-form.js

384 lines
18 KiB
JavaScript

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, matricule;
// Initialisation du formulaire et des données
function init() {
const token = localStorage.getItem('jwtToken');
if (token) {
const decoded = jwt_decode(token);
matricule = decoded.userMatricule;
}
// 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;
console.log("Initialisation pour formulaire intermédiaire :", parcours);
// Materialize init Modal
var modals = document.querySelectorAll('.modal');
M.Modal.init(modals);
// Appel des différentes fonctions d'initialisation
setupEventListeners();
populateFormData();
toggleAdditionalChoice();
updateSubmitButtonState('intermediaireForm');
}
// Configuration des écouteurs d'événements
function setupEventListeners() {
document.getElementById('intermediaireFormBtn').addEventListener('click', function (event) {
handleSubmitForm(event, 'tarif')
}
);
document.getElementById('intermediaireFormBtnProjet').addEventListener('click', function (event) {
handleSubmitForm(event, 'projet')
}
);
document.getElementById('agent').addEventListener('change', toggleAdditionalChoice);
document.getElementById('courtier').addEventListener('change', toggleAdditionalChoice);
document.getElementById('cl063-intermediaire').addEventListener('click', (event) => handleExtractIntermediaire(event));
document.getElementById('modalExtraireIntermediaire').addEventListener('click', (event) => handleModalExtract(event));
// Handler modal mutualiste
document.getElementById('btnMutualiste').addEventListener('click', function(){
const elem = document.getElementById('modalMutualiste');
const instance = M.Modal.getInstance(elem);
instance.open();
});
// Controle de saisie sur les champs du formulaire
document.getElementById('numPortefeuille').addEventListener('input', function(){
validateField('numPortefeuille', true);
});
document.getElementById('nomIntermediaire').addEventListener('input', function(){
validateField('nomIntermediaire', true);
});
document.getElementById('numTelIntermediaire').addEventListener('input', function(){
validateField('numTelIntermediaire', true);
});
document.getElementById('emailIntermediaire').addEventListener('input', function(){
validateField('emailIntermediaire', true);
});
document.getElementById('adresseIntermediaire').addEventListener('input', function(){
validateField('adresseIntermediaire', true);
});
document.getElementById('codePostalIntermediaire').addEventListener('input', function(){
validateField('codePostalIntermediaire', true);
});
document.getElementById('villeIntermediaire').addEventListener('input', function(){
validateField('villeIntermediaire', true);
});
document.getElementById('numOrias').addEventListener('input', function(){
validateField('numOrias', true);
});
document.querySelectorAll('input').forEach((input) => {
input.addEventListener('input', function(){
if (document.querySelector('[name="type"]:checked')?.value) {
document.getElementById('message-typeInter').style.display = 'none';
updateSubmitButtonState('intermediaireForm');
} else {
document.getElementById('message-typeInter').style.display = 'block';
document.getElementById('intermediaireFormBtn').disabled = true;
document.getElementById('intermediaireFormBtnProjet').disabled = true;
}
});
});
}
// Peupler le formulaire avec les données
function populateFormData() {
if (intermediaire) {
document.getElementById('nomIntermediaire').value = intermediaire.nom || '';
document.getElementById('numPortefeuille').value = intermediaire.numPortefeuille || '';
document.getElementById('numTelIntermediaire').value = intermediaire.numTelephone || '';
document.getElementById('emailIntermediaire').value = intermediaire.mail || '';
document.getElementById('adresseIntermediaire').value = intermediaire.adresse || '';
document.getElementById('codePostalIntermediaire').value = intermediaire.codePostal || '';
document.getElementById('villeIntermediaire').value = intermediaire.ville || '';
document.getElementById('numOrias').value = intermediaire.numOrias || '';
if (intermediaire.type) {
document.querySelector('[id="message-typeInter"]').style.display = 'none';
if (intermediaire.type == 'COURTIER') {
document.getElementById('courtier').checked = true;
document.getElementById('additionalChoice').style.display = 'none';
} else {
document.getElementById('agent').checked = true;
document.getElementById('additionalChoice').style.display = 'block';
if (intermediaire.type == 'AGENT MUTUALISTE') {
document.getElementById('mutualiste').checked = true;
} else if (intermediaire.type == 'AGENT NON MUTUALISTE') {
document.getElementById('non_mutualiste').checked = true;
}
}
}
}
const intermediaireStorage = JSON.parse(sessionStorage.getItem('tmp'));
if (intermediaireStorage) {
document.getElementById('numPortefeuille').value = intermediaireStorage.numAgent || '';
document.getElementById('nomIntermediaire').value = intermediaireStorage.nomAgent || '';
document.getElementById('numTelIntermediaire').value = intermediaireStorage.telAgent || '';
document.getElementById('adresseIntermediaire').value = intermediaireStorage.adresseAgent || '';
document.getElementById('codePostalIntermediaire').value = intermediaireStorage.postalAgent || '';
document.getElementById('villeIntermediaire').value = intermediaireStorage.villeAgent || '';
}
validateField('numPortefeuille', true);
validateField('nomIntermediaire', true);
validateField('numTelIntermediaire', true);
validateField('adresseIntermediaire', true);
validateField('codePostalIntermediaire', true);
validateField('villeIntermediaire', true);
updateSubmitButtonState('intermediaireForm');
}
// Fonction toggle Agent/Courtier
function toggleAdditionalChoice() {
// Affichez les choix supplémentaires uniquement si l'Agent est sélectionné
const displayStyle = document.getElementById('agent').checked ? 'block' : 'none';
document.getElementById('additionalChoice').style.display = displayStyle;
}
// Gérer l'extraction axaPAC
async function handleExtractIntermediaire(event) {
event.preventDefault();
// Affiche le modal
const elem = document.getElementById('modalExtractAxAPAC');
const instance = M.Modal.getInstance(elem);
instance.open();
}
async function handleModalExtract() {
document.getElementById('modalExtraireIntermediaire').disabled = true;
if (typeof window.showLoader === 'function') {
window.showLoader();
}
try {
const response = await fetch(`/client/extract`, {
method: 'POST',
body: JSON.stringify({
"matricule": matricule,
"numClient": document.getElementById("modalNumClient").value
}),
headers: {
'Content-Type': 'application/json',
},
});
const res = await response.json();
if (res.valid) {
document.getElementById("error-extract").style.display = "none";
document.getElementById('modalExtraireIntermediaire').disabled = false;
console.log(res);
// Save sessionStorage for Intermediaire
sessionStorage.setItem('tmp', JSON.stringify(res.data));
// Populate data
document.getElementById("numPortefeuille").value = (res.data.numAgent) ? res.data.numAgent : null;
document.getElementById("nomIntermediaire").value = (res.data.nomAgent) ? res.data.nomAgent : null;
document.getElementById("numTelIntermediaire").value = (res.data.telAgent) ? res.data.telAgent : null;
document.getElementById("adresseIntermediaire").value = (res.data.adresseAgent) ? res.data.adresseAgent : null;
document.getElementById("codePostalIntermediaire").value = (res.data.postalAgent) ? res.data.postalAgent : null;
document.getElementById("villeIntermediaire").value = (res.data.villeAgent) ? res.data.villeAgent : null;
validateField('numPortefeuille', true);
validateField('nomIntermediaire', true);
validateField('numTelIntermediaire', true);
validateField('adresseIntermediaire', true);
validateField('codePostalIntermediaire', true);
validateField('villeIntermediaire', true);
updateSubmitButtonState('intermediaireForm');
// close le modal
const elem = document.getElementById('modalExtractAxAPAC');
const instance = M.Modal.getInstance(elem);
instance.close();
} else {
document.getElementById("error-extract").style.display = "block";
document.getElementById('modalExtraireIntermediaire').disabled = false;
console.log("Problème rencontré lors de l'extraction cl063 AxA PAC :", res.error);
if (typeof window.showError === 'function') {
window.showError("Erreur lors de l'extraction des données intermédiaire.");
}
}
} catch (error) {
console.error("Erreur lors de l'extraction intermédiaire:", error);
if (typeof window.showError === 'function') {
window.showError("Erreur lors de l'extraction. Vérifiez votre connexion.");
}
} finally {
document.getElementById('modalExtraireIntermediaire').disabled = false;
if (typeof window.hideLoader === 'function') {
window.hideLoader();
}
}
}
// Gérer la soumission du formulaire
async function handleSubmitForm(event, redirection) {
event.preventDefault();
if (typeof window.showLoader === 'function') {
window.showLoader();
}
try {
let idIntermediaire = intermediaire?.id;
const numPortefeuille = document.getElementById('numPortefeuille').value;
let responseIntermediaire;
if (numPortefeuille) {
responseIntermediaire = await fetch(`/intermediaire/read/${numPortefeuille}`, {
method: 'GET',
headers: {'Content-Type': 'application/json'},
});
}
const dataIntermediaire = await responseIntermediaire.json();
if (dataIntermediaire.valid) {
idIntermediaire = dataIntermediaire.idIntermediaire;
} else {
// Créez l'intermediaire ici si non trouvé
const responseCreateIntermediaire = await fetch(`/intermediaire/create`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
});
const dataCreateIntermediaire = await responseCreateIntermediaire.json();
if (dataCreateIntermediaire.valid) {
idIntermediaire = dataCreateIntermediaire.intermediaire.id;
}
}
console.log(idIntermediaire);
// // Mettre à jour le contrat avec l'ID du intermediaire
if (idIntermediaire) {
let type
if (document.getElementById('courtier').checked == true) {
type = "COURTIER"
} else {
if (document.getElementById('mutualiste').checked == true) {
type = "AGENT MUTUALISTE"
} else {
type = "AGENT NON MUTUALISTE"
}
}
const response = await fetch(`/intermediaire/update/${idIntermediaire}`, {
method: 'POST',
body: JSON.stringify({
"numPortefeuille": document.getElementById('numPortefeuille').value,
"nom": document.getElementById('nomIntermediaire').value.toUpperCase(),
"numTelephone": document.getElementById('numTelIntermediaire').value,
"mail": document.getElementById('emailIntermediaire').value,
"adresse": document.getElementById('adresseIntermediaire').value.toUpperCase(),
"codePostal": document.getElementById('codePostalIntermediaire').value,
"ville": document.getElementById('villeIntermediaire').value.toUpperCase(),
"numOrias": document.getElementById('numOrias').value,
"type": type
}),
headers: {
'Content-Type': 'application/json',
},
});
const data = await response.json();
if (data.valid) {
const idContrat = contrat?.id;
fetch(`/contrat/update/intermediaire/${idContrat}/${idIntermediaire}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
})
.then(response => response.json())
.then(data => {
if (data.valid) {
// Update Session storage
const intermediaireStorage = JSON.parse(sessionStorage.getItem('tmp'));
if (intermediaireStorage) {
intermediaireStorage.numAgent = document.getElementById('numPortefeuille').value.toUpperCase();
intermediaireStorage.nomAgent = document.getElementById('nomIntermediaire').value;
intermediaireStorage.telAgent = document.getElementById('numTelIntermediaire').value.toUpperCase();
intermediaireStorage.adresseAgent = document.getElementById('adresseIntermediaire').value;
intermediaireStorage.postalAgent = document.getElementById('codePostalIntermediaire').value.toUpperCase();
intermediaireStorage.villeAgent = document.getElementById('villeIntermediaire').value.toUpperCase();
sessionStorage.setItem('tmp', JSON.stringify(intermediaireStorage))
}
if (redirection == "tarif"){
window.location.href = `/navParcours?numParcours=${getNumParcoursFromURL()}&submenu=tarif`;
} else if (redirection == "projet"){
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);
if (typeof window.hideLoader === 'function') {
window.hideLoader();
}
if (typeof window.showError === 'function') {
window.showError("Erreur lors de la mise à jour du contrat.");
}
}
})
.catch(error => {
console.error("Erreur lors de la mise à jour du contrat:", error);
if (typeof window.hideLoader === 'function') {
window.hideLoader();
}
if (typeof window.showError === 'function') {
window.showError("Erreur lors de la mise à jour. Vérifiez votre connexion.");
}
});
} else {
if (typeof window.hideLoader === 'function') {
window.hideLoader();
}
}
} catch (error) {
console.error("Erreur lors de la soumission du formulaire intermédiaire:", error);
if (typeof window.hideLoader === 'function') {
window.hideLoader();
}
if (typeof window.showError === 'function') {
window.showError("Erreur lors de la soumission. Vérifiez votre connexion.");
}
}
}
// Exposer init globalement pour y accéder depuis l'extérieur
window.initSubmenuForm = init;
})();