diff --git a/ecole/public/js/projet-form-rc.js b/ecole/public/js/projet-form-rc.js index 8d9307fd..b45a68ea 100644 --- a/ecole/public/js/projet-form-rc.js +++ b/ecole/public/js/projet-form-rc.js @@ -39,10 +39,10 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio client = contrat?.["@expand"]?.client || null; intermediaire = contrat?.["@expand"]?.intermediaire || null; - // Récupérer les données RC depuis la nouvelle structure (EXACTEMENT comme TPPC) + // Récupérer les données RC depuis la structure actuelle. rc = contrat?.["@expand"]?.enCours || null; // RC principal - projet = rc?.["@expand"]?.projet || null; // Données projet (normalized by contratService) - tarif = rc?.["@expand"]?.tarif || null; // Données tarif (normalized by contratService) + projet = rc?.["@expand"]?.projetRC || rc?.["@expand"]?.projet || rc?.projetRC || rc?.projet || null; + tarif = rc?.["@expand"]?.tarifRC || rc?.["@expand"]?.tarif || rc?.tarifRC || rc?.tarif || null; // Exposer ces variables globalement pour que rc-orchestrator puisse y accéder window.rc = rc; @@ -65,6 +65,17 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio let tarifOriginalData = null; + function getLinkedTarifId() { + if (tarif && typeof tarif === 'object' && tarif.id) return tarif.id; + if (typeof rc?.tarifRC === 'string' && rc.tarifRC.trim()) return rc.tarifRC; + if (typeof rc?.tarif === 'string' && rc.tarif.trim()) return rc.tarif; + return null; + } + + function hasTarifReference() { + return Boolean(getLinkedTarifId()); + } + async function loadModulateurs() { try { const response = await fetch('/rc/modulo/activiteRCC'); @@ -98,7 +109,7 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio } function saveOriginalTarifData() { - if (!tarif || !tarif.id) return; + if (!hasTarifReference()) return; const garantieRCCSelector = document.getElementById('garantieRCC-selector'); let garantiesRCC = []; @@ -799,7 +810,7 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio } function promptTarifImpactIfNeeded(context = {}) { - if (isRestoringValue || isTarifImpactModalOpen || !tarif || !tarif.id || !tarifOriginalData) return false; + if (isRestoringValue || isTarifImpactModalOpen || !hasTarifReference() || !tarifOriginalData) return false; const isImpacting = typeof context.isImpacting === 'function' ? Boolean(context.isImpacting()) @@ -831,7 +842,7 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio } function setupTarifImpactListeners() { - if (!tarif || !tarif.id) return; + if (!hasTarifReference()) return; setTimeout(() => { saveOriginalTarifData(); @@ -869,7 +880,7 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio } setTimeout(() => { - if (!tarif || !tarif.id || !tarifOriginalData || isRestoringValue) return; + if (!hasTarifReference() || !tarifOriginalData || isRestoringValue) return; const originalSelection = [...lastActivitySelection]; if (promptTarifImpactIfNeeded({ isImpacting: () => checkActivityImpact(getCurrentActivityData()), @@ -903,7 +914,7 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio const originalSelection = lastMarchandiseSelection; setTimeout(() => { - if (!tarif || !tarif.id || !tarifOriginalData || isRestoringValue) return; + if (!hasTarifReference() || !tarifOriginalData || isRestoringValue) return; if (promptTarifImpactIfNeeded({ isImpacting: () => checkMarchandiseImpact(getCurrentMarchandiseData()), restore: () => restoreChangedFieldValue(this, originalSelection), @@ -941,7 +952,7 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio } setTimeout(() => { - if (!tarif || !tarif.id || !tarifOriginalData || isRestoringValue) return; + if (!hasTarifReference() || !tarifOriginalData || isRestoringValue) return; if (promptTarifImpactIfNeeded({ isImpacting: () => checkZoneImpact(getCurrentZoneData()), restore: () => restoreZoneState(previousZones) @@ -967,7 +978,7 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio if (isRestoringValue) return; setTimeout(() => { - if (!tarif || !tarif.id || !tarifOriginalData || isRestoringValue) return; + if (!hasTarifReference() || !tarifOriginalData || isRestoringValue) return; const originalSelection = [...lastGarantieRCCSelection]; if (promptTarifImpactIfNeeded({ isImpacting: () => checkGarantieRCCImpact(getCurrentGarantieRCCData()), @@ -1006,7 +1017,7 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio const originalChecked = this.dataset.tarifPrevChecked === 'true'; setTimeout(() => { - if (!tarif || !tarif.id || !tarifOriginalData || isRestoringValue) return; + if (!hasTarifReference() || !tarifOriginalData || isRestoringValue) return; if (promptTarifImpactIfNeeded({ isImpacting: () => checkActiviteComplImpact(getCurrentActiviteComplData()), restore: () => restoreChangedFieldValue(this, originalChecked) @@ -1031,7 +1042,7 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio if (isRestoringValue) return; setTimeout(() => { - if (!tarif || !tarif.id || !tarifOriginalData || isRestoringValue) return; + if (!hasTarifReference() || !tarifOriginalData || isRestoringValue) return; const stateToRestore = previousCotisationState; if (promptTarifImpactIfNeeded({ isImpacting: () => checkCotisationImpact(), @@ -1066,7 +1077,7 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio if (isRestoringValue) return; setTimeout(() => { - if (!tarif || !tarif.id || !tarifOriginalData || isRestoringValue) return; + if (!hasTarifReference() || !tarifOriginalData || isRestoringValue) return; if (promptTarifImpactIfNeeded({ isImpacting: () => checkCapitalImpactByField(this.id, this.value), restore: () => restoreChangedFieldValue(this, originalValue), @@ -1118,7 +1129,7 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio } setTimeout(() => { - if (!tarif || !tarif.id || !tarifOriginalData || isRestoringValue) return; + if (!hasTarifReference() || !tarifOriginalData || isRestoringValue) return; if (promptTarifImpactIfNeeded({ isImpacting: () => checkPJImpact(), restore: () => restorePJState(stateToRestore), @@ -1150,7 +1161,7 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio } setTimeout(() => { - if (!tarif || !tarif.id || !tarifOriginalData || isRestoringValue) return; + if (!hasTarifReference() || !tarifOriginalData || isRestoringValue) return; if (promptTarifImpactIfNeeded({ isImpacting: () => checkRCEImpact(), restore: () => restoreRCEState(stateToRestore), @@ -1177,7 +1188,7 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio if (isRestoringValue) return; setTimeout(() => { - if (!tarif || !tarif.id || !tarifOriginalData || isRestoringValue) return; + if (!hasTarifReference() || !tarifOriginalData || isRestoringValue) return; const previousType = this.dataset.tarifPrevType || ''; if (promptTarifImpactIfNeeded({ isImpacting: () => checkTypeExtConfiesImpact(),