//--------------------------------------------------------------------- //---Auteur: ALTO Informatique - www.alto-informatique.com------------- //---1998 - 2021 - Tous droits reserves-------------------------------- //--------------------------------------------------------------------- //--------------------------------------------------------------- //--------------------------------------------------------------- //--------------------------------------------------------------- function GetBaremePtz() { //---bareme 2018-2021---------- var b = { PrixMax: [[150000, 210000, 255000, 300000, 345000] // AB1B2C/NbPers ,[135000, 189000, 230000, 270000, 311000] ,[110000, 154000, 187000, 220000, 253000] ,[100000, 140000, 170000, 200000, 230000] ] ,QuotiteMax: [[40,40,20,20] // neuf,remis a neuf ,[ 0, 0,40,40] // ancien+trav ,[10,10,10,10] // ancien HLM ] ,CoeffMenage: [1, 1.4, 1.7, 2, 2.3, 2.6, 2.9, 3.2] ,TRgiMax: [37000, 30000, 27000, 24000] // AB1B2C ,NbDivTotal:9 ,NbTranche:3 ,tmr: [{RgiMax: [22000,19500,16500,14000], NbMoisP1: 180, NbMoisP2: 120, PCentAmortP2 :100} ,{RgiMax: [25000,21500,18000,15000], NbMoisP1: 120, NbMoisP2: 144, PCentAmortP2 :100} ,{RgiMax: [37000,30000,27000,24000], NbMoisP1: 60, NbMoisP2: 180, PCentAmortP2 :100} ] ,codif: { ZONE_A :1, ZONE_B1 :12, ZONE_B2 :22, ZONE_C :3, TACHAT_NEUF :1, TACHAT_REMIS_A_NEUF:3, TACHAT_ANCIEN_TRAV :20, TACHAT_ANCIEN_HLM :21, TACHAT_AUTRE :99, //---PrixMax[i][], QuotiteMax[][i], tmr[].RgiMax[i]---- RGLPTZP_IZ_A :0, // en zone A RGLPTZP_IZ_B1 :1, // en zone B1 RGLPTZP_IZ_B2 :2, // en zone B2 RGLPTZP_IZ_C :3, // en zone C //---PrixMax[][i], CoeffMenage[i]--- RGLPTZP_IP_1PERSO :0, RGLPTZP_IP_2PERSO :1, RGLPTZP_IP_3PERSO :2, RGLPTZP_IP_4PERSO :3, RGLPTZP_IP_5PLUS :4, QUOTITE_I_NEUF_RN :0, QUOTITE_I_ANCIEN_TRAV:1, QUOTITE_I_ANCIEN_HLM :2 } }; return(b); } //--------------------------------------------------------------- //--------------------------------------------------------------- //--------------------------------------------------------------- function FormateAnMois(nMois) { var s=""; var NbMois=(nMois%12); var NbAn =Math.floor(nMois/12); if(NbAn>0) { s+=""+NbAn+" an"; if(NbAn>1) s+="s"; } if(NbMois>0) { if(NbAn>0) s+=" et "; s+=""+NbMois+" mois"; } return(s); } function FormateVal(val, NbDeci, flag) { var s=""; if(val!=null && !isNaN(val)) { var l,i,tmp,signe; var separe=" "; if(flag!=null) { if(flag & 0x0001) separe=" "; else if(flag & 0x0002) separe="."; else if(flag & 0x0004) separe=""; } if(NbDeci==2) { val=val*100.0; } else if(NbDeci>0) { for(i=0; i0; i--) s="0"+s; tmp=l-NbDeci; if(tmp>3 && separe.length>0) { for(i=0; i<5; i++) { if (tmp<4) break; tmp-=3; s=s.substring(0, tmp)+separe+s.substring(tmp, l); l+=separe.length; } } if(NbDeci>0) { l=s.length; s=s.substring(0, l-NbDeci)+","+s.substring(l-NbDeci, l); } if(signe) s="-"+s; } return(s); } var _tn=0; var _ttn=0; function GetNum(champ, fmt, flag) { _ttn=TestNum(champ,fmt, flag); return(_tn); } function TestNum(champ, fmt, flag) { var ret=0; var s=""+champ; var i1,i2,c; _tn=0; i1=0; i2=s.length; //for(; i1i1; i2--) { c=s.charAt(i2-1); if(c!=' ' && c!='\t') { break; } } if(i1='0' && c<='9') { if(iVirg) { NbDeci++; if(NbDeci>MaxDeci) { ret=-3; break; } } else { NbEntier++; if(NbEntier>MaxEntier) { ret=-2; break; } } } else if(c=='.' || c==',') { if(iVirg) { ret=-1; break; } iVirg=i+1; c='.'; } else if(c=='-') { if(!NegOK || i>i1) { ret=-4; break; } } else{ ret=-1; break; } s2+=c; } if(!ret) { _tn=(iVirg) ? parseFloat(s2) : parseInt(s2,10); ret=1; } } return(ret); } //--------------------------------------------------------------- //--------------------------------------------------------------- //--------------------------------------------------------------- var gIsChange1=0; function ffff_OC(r) { var f=document.ffff; //---grise/degrise zone PrixTravaux----- if(r=="TypeAchat" || r==0) { var TypeAchat=parseInt(f.TypeAchat.options[f.TypeAchat.selectedIndex].value); var codif=GetBaremePtz().codif; var c=f.PrixTravaux; if(c) { if(TypeAchat==codif.TACHAT_ANCIEN_TRAV) { c.disabled=false; c.style.backgroundColor="#FFFFFF"; } else{ c.value=""; c.disabled=true; c.style.backgroundColor="#CCCCCC"; } } } //---show/hide les baremes----- if(r=="IsShowBrm" || r=="NbPersonne") { var v=(f.IsShowBrm.checked) ? 1:0; if(f.NbPersonne.value==0) { self.alert("Précisez au préalable le nombre de personnes qui habiteront le logement."); f.IsShowBrm.checked = 0; v=0; } else{ MajFicheBareme(parseInt(f.NbPersonne.value)); } document.getElementById("PtzIsShowBrm1").style.display=(v && f.NbPersonne.value>0) ? "" : "none"; } //---show/hide les regles------ if(r=="IsShowRgl") { var v=(f.IsShowRgl.checked) ? 1:0; document.getElementById("PtzIsShowRgl1").style.display=(v) ? "" : "none"; } if(r) { gIsChange1=1; } } //--------------------------------------------------------------- //--------------------------------------------------------------- //--------------------------------------------------------------- function BeforeSubmit(f, IsAlert) { var s=""; var t =parseInt(f.TypeAchat.options[f.TypeAchat.selectedIndex].value); var z =parseInt(f.ZoneABC.options[f.ZoneABC.selectedIndex].value); var pri=GetNum(f.PrixLogement.value,80); var rn2=GetNum(f.RevenuN1N2.value,80); var nbp=GetNum(f.NbPersonne.value,20); var trav=GetNum(f.PrixTravaux.value,80); var codif=GetBaremePtz().codif; if(t!=codif.TACHAT_NEUF && t!=codif.TACHAT_REMIS_A_NEUF && t!=codif.TACHAT_ANCIEN_TRAV && t!=codif.TACHAT_ANCIEN_HLM && t!=codif.TACHAT_AUTRE) { s="Indiquez le type d'acquisition !"; } else if(z!=codif.ZONE_A && z!=codif.ZONE_B1 && z!=codif.ZONE_B2 && z!=codif.ZONE_C) { s="Indiquez la localisation du logement (zone A, B1, B2 ou C) !"; } else if(pri<=0) { s="Indiquez le prix du logement !"; } else if(rn2<=0) { s="Indiquez votre revenu fiscal de référence !"; } else if(nbp<=0) { s="Indiquez le nombre de personnes qui habiteront le logement !" } if(s=="" && t==codif.TACHAT_ANCIEN_TRAV) { ///if(zbr!=1 && zbr!=2) /// { s="Indiquez si la commune d'acquisition est éligible au PTZ pour l'achat d'ancien avec travaux !"; /// } ///else if(trav<=0) { s="Indiquez le montant des travaux !"; } } if(s=="" && !gIsChange1) { s="Résultats déjà calculés !"; } if(s!="") { self.alert(s); } return((s!="") ? false : true); } function OnBtnSubmit(f) { if(BeforeSubmit(f,1)==true) { ///f.submit(); BodyOnLoad(1); ///window.scrollTo(0,160); } } //--------------------------------------------------------------- //--------------------------------------------------------------- //--------------------------------------------------------------- function GetResultPtzPlus(fdata) { var r=new Object(); r.IsRevenuExcessif=0; r.IsPrixExcessif =0; r.IsTravauxFaible =0; r.IsQuotiteZero =0; r.PretMax =0; r.NbMoisTotal =0; r.NbMoisP1 =0; r.NbMoisP2 =0; r.PCentAmortP1=0; r.PCentAmortP2=0; r.EchDiff =0; r.EchAmort =0; //------------------------------------------ var brm=GetBaremePtz(); var codif=brm.codif; var IsAncien=-1; var iQuotite=-1; var iZone=-1; var NbPerso=-1; switch(fdata.TypeAchat) { case codif.TACHAT_NEUF : iQuotite=codif.QUOTITE_I_NEUF_RN ; IsAncien=0; break; case codif.TACHAT_REMIS_A_NEUF: iQuotite=codif.QUOTITE_I_NEUF_RN ; IsAncien=0; break; case codif.TACHAT_ANCIEN_TRAV : iQuotite=codif.QUOTITE_I_ANCIEN_TRAV; IsAncien=1; break; case codif.TACHAT_ANCIEN_HLM : iQuotite=codif.QUOTITE_I_ANCIEN_HLM ; IsAncien=1; break; } switch(fdata.ZoneABC) { case codif.ZONE_A : iZone = codif.RGLPTZP_IZ_A ; break; case codif.ZONE_B1: iZone = codif.RGLPTZP_IZ_B1; break; case codif.ZONE_B2: iZone = codif.RGLPTZP_IZ_B2; break; case codif.ZONE_C : iZone = codif.RGLPTZP_IZ_C ; break; } if(fdata.NbPersonne>0) { NbPerso=(fdata.NbPersonne<8) ? fdata.NbPersonne : 8; } //------------------------------------------ if(fdata.TypeAchat==codif.TACHAT_ANCIEN_TRAV) { // travaux doivent etre > 25% if(fdata.PrixLogement>0 && fdata.PrixTravaux<0.25*(fdata.PrixLogement+fdata.PrixTravaux)) { r.IsTravauxFaible=1; } } //------------------------------------------ if(r.IsTravauxFaible==0 && IsAncien!=-1 && iQuotite!=-1 && iZone!=-1 && NbPerso!=-1 && fdata.PrixLogement>0 && fdata.RevFiscRef>=0) { var CoutHorsFN=fdata.PrixLogement; if(fdata.TypeAchat==codif.TACHAT_ANCIEN_TRAV) { CoutHorsFN+=fdata.PrixTravaux; } var PrixMax =brm.PrixMax[iZone][(NbPerso<5) ? (NbPerso-1) : 4]; var quotite =brm.QuotiteMax[iQuotite][iZone]; var tmp=(CoutHorsFNCoutHorsFN/2) { PretMax=CoutHorsFN/2; } var cout10=Math.floor(CoutHorsFN/brm.NbDivTotal+0.5); var revenu=(cout10 > fdata.RevFiscRef) ? cout10 : fdata.RevFiscRef; var CoeffMenage=brm.CoeffMenage[NbPerso-1]; var tranche=null; if(quotite==0) { r.IsQuotiteZero=1; } else{ for(var iTranche=0; iTrancheRgiMax+ErrArrondi) { r.IsRevenuExcessif=1; } if(cout10>RgiMax+ErrArrondi) { r.IsPrixExcessif=1; } } else{ if(revenu <= RgiMax+ErrArrondi) // R31-10-11 : <= { tranche=t; break; } } } } if(tranche!=null) { r.PretMax=Math.round(PretMax); r.NbMoisP1 =tranche.NbMoisP1; r.NbMoisP2 =tranche.NbMoisP2; r.PCentAmortP2 =tranche.PCentAmortP2; r.PCentAmortP1 =100-r.PCentAmortP2; r.EchP1=(PretMax*(r.PCentAmortP1/100))/r.NbMoisP1; r.EchP2=(r.NbMoisP2>0) ? (r.PretMax*(r.PCentAmortP2/100))/r.NbMoisP2 : 0; r.EchP1=Math.round(r.EchP1*100)/100; r.EchP2=Math.round(r.EchP2*100)/100; r.NbMoisTotal=r.NbMoisP1+r.NbMoisP2; } } r.NbDivTotal=brm.NbDivTotal; return(r); } //--------------------------------------------------------------- //--------------------------------------------------------------- //--------------------------------------------------------------- function GetStrBrm(tbl, mode) { var s=""; for(var i=0; i0) { if(pcent==100) { s="Différé "+sAnMoisAmort1 +" + amort. sur " + sAnMoisAmort2; } else{ s=""+(100-pcent)+"% du prêt sur "+sAnMloisAmort1 +", solde sur "+sAnMoisAmort2; } } else{ s="Prêt amorti sur "+sAnMoisAmort1; } if(i>0) sRet+="
"; sRet+=s; } return(sRet); } //------------------------------------------------------------- //------------------------------------------------------------- //------------------------------------------------------------- function MajFicheBareme(NbPersonne) { var brm=GetBaremePtz(); var brm2=new Object(); if(NbPersonne>8) NbPersonne=8; //---fill brm2---------------------------------- brm2.TRgiMax = new Array(); brm2.TPretMax = new Array(); brm2.TModRemb = new Array(); for(var iZone=0; iZone<4; iZone++) { brm2.TRgiMax[iZone]=brm.TRgiMax[iZone] *brm.CoeffMenage[NbPersonne-1]; } for(var iQuotite=0; iQuotite- d'un achat ou construction d'un logement neuf," + "
- d'un logement remis entierement à neuf," + "
- d'un achat de logement ancien avec travaux > 25%," + "
- d'un rachat de logement HLM par son locataire."; } else if(ORes.IsQuotiteZero) { MsgErr = "Le PTZ est exclu dans cette zone pour ce type d'acquisition"; } else if(ORes.IsTravauxFaible) { MsgErr = "Le PTZ est exclu car le montant des travaux est inférieur " + "à 25% du coût total de l'opération"; } else if(ORes.IsRevenuExcessif) { MsgErr = "Le PTZ est exclu car votre revenu fiscal de référence " + "excède le plafond de revenu applicable."; } else if(ORes.IsPrixExcessif) { MsgErr = "Le PTZ est exclu car le coût de l'opération excède " + ORes.NbDivTotal +" fois le plafond de revenu applicable."; } if(MsgErr!=null) { document.getElementById("PtzIfRevSup0" ).style.display="none"; document.getElementById("PtzIfQuestion").style.display="none"; document.getElementById("PtzIfRevSup1").innerHTML = MsgErr; document.getElementById("PtzIfRevSup1").style.display=""; } else{ document.getElementById("PtzIfRevSup1").style.display="none"; document.getElementById("PtzIfRevSup0" ).style.display=(!ORes.PretMax) ? "none" : ""; document.getElementById("PtzIfQuestion").style.display=(!ORes.PretMax) ? "" : "none"; } document.getElementById("PtzIsShowBrm1").style.display=(fdata.IsShowBrm==1) ? "":"none"; document.getElementById("PtzIsShowRgl1").style.display=(fdata.IsShowRgl==1) ? "":"none"; if(fdata.NbPersonne) { MajFicheBareme(fdata.NbPersonne); } document.getElementById("result_S_Pret" ).innerHTML=ORes.S_Pret ; document.getElementById("result_S_NbMois" ).innerHTML=ORes.S_NbMois ; document.getElementById("result_S_DureePeriode1").innerHTML=ORes.S_DureePeriode1; document.getElementById("result_S_DureePeriode2").innerHTML=ORes.S_DureePeriode2; document.getElementById("result_S_EchPeriode1" ).innerHTML=ORes.S_EchPeriode1 ; document.getElementById("result_S_EchPeriode2" ).innerHTML=ORes.S_EchPeriode2 ; document.getElementById("result_S_EchTotal" ).innerHTML=ORes.S_EchPeriode1 ; document.getElementById("result_diff_partiel").innerHTML= "Durée maximum du différé...:"; var sDisplay=(ORes.PCentAmortP2) ? "" : "none"; document.getElementById("IfTypeDiff1_dureeP1").style.display=sDisplay; document.getElementById("IfTypeDiff1_dureeP2").style.display=sDisplay; document.getElementById("IfTypeDiff1_echP1").style.display=sDisplay; document.getElementById("IfTypeDiff1_echP2").style.display=sDisplay; var sDisplay=(ORes.PCentAmortP2) ? "none" : ""; document.getElementById("IfTypeDiff0_ech").style.display=sDisplay; if(IsOnSubmit!=1) { ffff_OC(0); } }