Forráskód Böngészése

correftion sur IRL

jeremy 1 hete
szülő
commit
cda0f96a20
1 módosított fájl, 32 hozzáadás és 12 törlés
  1. 32 12
      frontend/src/pages/LeaseDetail.jsx

+ 32 - 12
frontend/src/pages/LeaseDetail.jsx

@@ -68,33 +68,44 @@ export default function LeaseDetail() {
     notes: ''
   })
   const [irlCurrent, setIrlCurrent] = useState({ value: null, loading: false, quarter: null, year: null })
+  const [irlPrevious, setIrlPrevious] = useState({ value: null, loading: false, quarter: null, year: null })
 
   // Retourne le trimestre (1-4) d'une date ISO
   const getQuarter = dateStr => Math.ceil((new Date(dateStr).getMonth() + 1) / 3)
 
-  // Ouvre le modal révision et tente de récupérer l'IRL du trimestre de référence pour l'année en cours
+  // Ouvre le modal révision et récupère l'IRL du même trimestre pour l'année en cours et l'année précédente
   const openRevisionModal = async () => {
     setRevForm({ effective_date: now.toISOString().slice(0, 10), rent_amount: String(lease.rent_amount), charges_amount: String(lease.charges_amount), notes: '' })
     setIrlCurrent({ value: null, loading: false, quarter: null, year: null })
+    setIrlPrevious({ value: null, loading: false, quarter: null, year: null })
 
     if (lease.irl_reference_quarter) {
       const q = lease.irl_reference_quarter
       const y = now.getFullYear()
+      const yPrev = y - 1
       setIrlCurrent(s => ({ ...s, loading: true, quarter: q, year: y }))
+      setIrlPrevious(s => ({ ...s, loading: true, quarter: q, year: yPrev }))
       try {
-        const { data } = await api.get(`/irl?year=${y}&quarter=${q}`)
-        setIrlCurrent({ value: data.value, loading: false, quarter: q, year: y })
-        // Pré-calculer le loyer si IRL de référence connu
-        if (data.value && lease.irl_reference_value) {
-          const ratio = data.value / lease.irl_reference_value
+        const [curRes, prevRes] = await Promise.all([
+          api.get(`/irl?year=${y}&quarter=${q}`).catch(() => ({ data: {} })),
+          api.get(`/irl?year=${yPrev}&quarter=${q}`).catch(() => ({ data: {} })),
+        ])
+        const curVal = curRes.data?.value ?? null
+        const prevVal = prevRes.data?.value ?? null
+        setIrlCurrent({ value: curVal, loading: false, quarter: q, year: y })
+        setIrlPrevious({ value: prevVal, loading: false, quarter: q, year: yPrev })
+        // Pré-calculer le loyer : ratio = IRL année en cours / IRL année précédente (même trimestre)
+        if (curVal && prevVal) {
+          const ratio = curVal / prevVal
           setRevForm(f => ({
             ...f,
             rent_amount: (lease.rent_amount * ratio).toFixed(2),
-            notes: `Révision IRL T${q} ${y} — indice ${data.value} / ref ${lease.irl_reference_value}`
+            notes: `Révision IRL T${q} — indice ${curVal} (${y}) / ${prevVal} (${yPrev})`
           }))
         }
       } catch {
         setIrlCurrent(s => ({ ...s, loading: false }))
+        setIrlPrevious(s => ({ ...s, loading: false }))
       }
     }
     setShowRevisionModal(true)
@@ -789,8 +800,12 @@ export default function LeaseDetail() {
                 <p className="text-xs font-semibold text-indigo-700 uppercase tracking-wide">Indice IRL</p>
                 <div className="grid grid-cols-2 gap-3 text-sm">
                   <div>
-                    <p className="text-gray-500 text-xs">IRL de référence (T{lease.irl_reference_quarter} {lease.irl_reference_year})</p>
-                    <p className="font-bold text-gray-800">{lease.irl_reference_value ?? '—'}</p>
+                    <p className="text-gray-500 text-xs">IRL T{irlPrevious.quarter} {irlPrevious.year} (année précédente)</p>
+                    {irlPrevious.loading
+                      ? <p className="text-indigo-500 text-xs">⏳ Récupération…</p>
+                      : irlPrevious.value !== null
+                        ? <p className="font-bold text-gray-800">{irlPrevious.value}</p>
+                        : <p className="text-gray-400 text-xs">Indice non disponible pour cette période</p>}
                   </div>
                   <div>
                     <p className="text-gray-500 text-xs">IRL T{irlCurrent.quarter} {irlCurrent.year} (en cours)</p>
@@ -801,10 +816,15 @@ export default function LeaseDetail() {
                         : <p className="text-gray-400 text-xs">Indice non disponible pour cette période</p>}
                   </div>
                 </div>
-                {irlCurrent.value && lease.irl_reference_value && (
+                {irlCurrent.value && irlPrevious.value && (
                   <p className="text-xs text-indigo-600 pt-1 border-t border-indigo-100">
-                    Variation : <strong>+{((irlCurrent.value / lease.irl_reference_value - 1) * 100).toFixed(2)} %</strong>
-                    {' '}— loyer calculé : <strong>{fmt(lease.rent_amount * irlCurrent.value / lease.irl_reference_value)}</strong>
+                    Variation annuelle : <strong>{((irlCurrent.value / irlPrevious.value - 1) * 100 >= 0 ? '+' : '')}{((irlCurrent.value / irlPrevious.value - 1) * 100).toFixed(2)} %</strong>
+                    {' '}— loyer calculé : <strong>{fmt(lease.rent_amount * irlCurrent.value / irlPrevious.value)}</strong>
+                  </p>
+                )}
+                {lease.irl_reference_value && (
+                  <p className="text-[11px] text-gray-400 pt-1">
+                    IRL de référence bail : {lease.irl_reference_value} (T{lease.irl_reference_quarter} {lease.irl_reference_year})
                   </p>
                 )}
               </div>