Browse | Submit A New Snippet | Create A Package

Calcul des frais de déplacements

Type:
Full Script
Category:
Calendars
License:
GNU General Public License
Language:
JavaScript

Description:
Ce code javascript calcule le nombre de jours ouvrables d'une période donnée (tenant compte d'éventuelles interruptions) et en déduit le montant de la prise en charge pour les trajets, repas et nuitées.

Versions Of This Snippet:

Snippet ID Download Version Date Posted Author Delete
252004-10-24 08:45bernard adrian Delete

Download a raw-text version of this code by clicking on “Download Version”


Latest Snippet Version: 5

<HTML><HEAD><TITLE>Calcul des remboursements de frais kilomètriques et de repas (demandes d'aide à la formation)</TITLE>
<SCRIPT language="JavaScript">
<!--
//déclaration des variables
var debut;
var fin;
var c=1;
var d=0;
var vsaint;
var lupaq;
var ascen;
var lupen;
var loquet=0;
//déclaration des tableaux
var interrup=new Array();
var joursem=new Array();
var feries=new Array();
var jourouv1=new Array();
var jourouv2=new Array();
var jourform=new Array();
var remplissage=new Date("May 16,2012 08:00:00");
var jff=new Array("1_0","1_4","8_4","14_6","15_7","1_10","11_10","25_11","26_11");
var jfm=new Array();

paques=new Array(9);
paques[0]=new Date("Mar 31,2002 08:00:00");
paques[1]=new Date("Apr 20,2003 08:00:00");
paques[2]=new Date("Apr 11,2004 08:00:00");
paques[3]=new Date("Mar 27,2005 08:00:00");
paques[4]=new Date("Apr 16,2006 08:00:00");
paques[5]=new Date("Apr 8,2007 08:00:00");
paques[6]=new Date("Mar 23,2008 08:00:00");
paques[7]=new Date("Apr 12,2009 08:00:00");
paques[8]=new Date("Apr 4,2010 08:00:00");
var joursemfr=new Array("dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi");
var moisfr=new Array("janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre");
//déclaration des fonctions
function triNumerique(date1,date2)
	{
		return date1-date2;
	}

//fonctions de verification

function verifjour(jour){
	if (jour.value<1 || jour.value>31){alert ("le jour doit être compris entre 1 et 31 !");
		jour.value="";
		jour.focus();
		}
	}
function verifmois(mois){
	if (mois.value<1 || mois.value>12){alert ("le mois doit être compris entre 1 et 12 !")
		mois.value="";
		mois.focus();
		}
	}
function verifannee(annee){
	if (annee.value<02 || annee.value>10)
		{alert ("l'année doit être comprise entre 2002 et 2010 !")
		annee.value="";
		annee.focus();
		}
	}
function verifsens(theform){
	strdeb=theform.anneedeb.value+theform.moisdeb.value+theform.jourdeb.value;
	strfin=theform.anneefin.value+theform.moisfin.value+theform.jourfin.value;
	if (strfin<strdeb) {alert("la date de fin doit être supérieure à la date de début !")
		theform.anneefin.value="";
		theform.anneefin.focus();
		}
	}
//conversion des dates en français
function convDate(datean){
	datean=new Date(datean);
	if(datean.getDate()>1){
		jourfr=datean.getDate();
		}
	else {jourfr="1er"}
	anfr=datean.getYear();
	if (anfr<2000) {anfr=anfr+1900}
	datefr=joursemfr[datean.getDay()]+" "+jourfr+" "+moisfr[datean.getMonth()]+" "+anfr;
	return datefr;
	}
function recuperer(theform){
	debut=new Date("May 16,2004 08:00:00");
	fin=new Date("May 16,2004 08:00:00");
	debut.setDate(eval(theform.jourdeb.value));
	debut.setMonth(eval(theform.moisdeb.value)-1);
	debut.setYear(eval(theform.anneedeb.value)+2000);
	debut.setHours(8);
	fin.setDate(eval(theform.jourfin.value));
	fin.setMonth(eval(theform.moisfin.value)-1);
	fin.setYear(eval(theform.anneefin.value)+2000);
	decalage=fin.getTimezoneOffset()-debut.getTimezoneOffset();
	if(decalage==(-60)){fin.setHours(9)};
	if(decalage==60){fin.setHours(7)};
	}

function tronquer(theform){
	d++;
	recuperer(theform);
	ajout=interrup.push(debut);
	ajout=interrup.push(fin);
	}
function calculer(theform){
	recuperer(theform);

	//mise à l'écart des samedis et dimanches
	for (j=debut;j<=fin;j=(j*1)+86400000){
		j=new Date(j);
		if(j.getDay()>0 && j.getDay()<6){
			ajout=joursem.push(j)
			}
		}
	//mise à l'écart des interruptions
	while (interrup.length<8){
		ajout=interrup.push(remplissage);
		}
	for (i=0;i<=joursem.length-1;i++){
	if (joursem[i]<interrup[0]){
		ajout=jourouv1.push(joursem[i])
		}
	if(joursem[i]>interrup[1] && joursem[i]<interrup[2]){
		ajout=jourouv1.push(joursem[i])
		}
	if (joursem[i]>interrup[3] && joursem[i]<interrup[4]){
		ajout=jourouv1.push(joursem[i])
		}
	if (joursem[i]>interrup[5] && joursem[i]<interrup[6]){
		ajout=jourouv1.push(joursem[i])
		}
	if (joursem[i]>interrup[7]){
		ajout=jourouv1.push(joursem[i])
		}
	}
	//mise à l'écart des jours fériés fixes
	if (theform.alsmos.checked){
		alert("la formation se déroule en Alsace ou en Moselle");
		}
	else jff[jff.length-1]="00_00";
	for (i=0;i<=jourouv1.length-1;i++){
		jourouv1[i]=new Date(jourouv1[i]);
		jm=jourouv1[i].getDate()+"_"+jourouv1[i].getMonth();
		for (j=0;j<=jff.length-1;j++){
			if (jm==jff[j]){
				ajout=feries.push(jourouv1[i]);
				loquet++;
				break;
				}
			}
		if (loquet==0) ajout=jourouv2.push(jourouv1[i]);
		else loquet=0;
		}
	//mise à l'écart des jours fériés mobiles
	//années concernées
	beg=debut.getYear();
	end=fin.getYear();
	if (beg<2000) {
		beg=eval(beg+1900);
		end=eval(end+1900);
		}
	for(k=beg;k<=end;k=k+1){
		if (theform.alsmos.checked){
			vsaint=(1*paques[k-2002])-(2*86400000);
			vsaint=new Date(vsaint);
			}
		ajout=jfm.push(vsaint);
		lupaq=(1*paques[k-2002])+86400000;
		lupaq=new Date(lupaq);
		ajout=jfm.push(lupaq);
		ascen=(1*paques[k-2002])+(39*86400000);
		ascen=new Date(ascen);
		ajout=jfm.push(ascen);
		lupen=(1*paques[k-2002])+(50*86400000);
		lupen=new Date(lupen);
		ajout=jfm.push(lupen);
		}
	loquet=0;
	for (i=0;i<=jourouv2.length-1;i++){
		for(j=0;j<jfm.length;j++){
			jourouv2[i]=new Date(jourouv2[i]);
			if(Math.abs(jourouv2[i]-jfm[j])<7200000){
				ajout=feries.push(jourouv2[i]);
				loquet++;
				break;
				}
			}
		if (loquet==0) ajout=jourform.push(jourouv2[i]);
		else loquet=0;
		}
	//calcul des remboursements journaliers
	dif=(fin-debut)/(3600000*24);
	dif=Math.round(dif+1);

	if (theform.rnom[1].checked){
		nbtrajets=0;
		nbnuits=0;
		for (i=0;i<=jourform.length-1;i++){
			nbtrajets=nbtrajets+1;
			}
		}
	if (theform.rnom[0].checked){
		nbtrajets=1;
		nbnuits=1
		if (jourform[1]-jourform[0]>87000000){
			nbtrajets=nbtrajets+0.5
			nbnuits=0
			}
		if (jourform[jourform.length-1]-jourform[jourform.length-2]>87000000){
			nbtrajets=nbtrajets+0.5
			}
		for (i=1;i<=jourform.length-2;i++){
			veille=jourform[i]-jourform[i-1];
			lendemain=jourform[i+1]-jourform[i];
			if (veille>87000000){
				nbtrajets=nbtrajets+0.5
				}
			if (lendemain<87000000){
				nbnuits=nbnuits+1
				}
			else{nbtrajets=nbtrajets+0.5}
			}
		}
	feries.sort(triNumerique);
	nbrepas=(jourform.length);

	distance=parseInt(theform.km.value);
	rembtrajet=0;
	if (distance<=10){rembtrajet=0};
	if (distance>10 && distance<=50){rembtrajet=2.5};
	if (distance>50 && distance<=100){rembtrajet=5};
	if (distance>100 && distance<=150){rembtrajet=7};
	if (distance>150){rembtrajet=10};
	rembkm=nbtrajets*rembtrajet;
	rembrep=nbrepas*6;
	rembnuits=nbnuits*30;
	rembtotal=rembrep+rembnuits+rembkm;
//affichage des résultats.
	msg=window.open("","","width=700,height=550,toolbar=yes,location=no,directories=no,status=no,menubar=yes,scrollbars=yes,resizable=yes");
	msg.document.write('<body bgcolor="#fafad2"><font color="#000080" size="2"><H4><i>');
	msg.document.write("Pour une formation allant du "+'</i><font color="#b22222">'+convDate(jourform[0])+'</font><i>');
	msg.document.write(" au "+'</i><font color="#b22222">'+convDate(jourform[jourform.length-1])+'</font><i>');
	msg.document.write("<BR><BR>");
	msg.document.write("Voici le nombre de jours de formation : ");
	msg.document.write('</i><font color="#b22222">'+jourform.length+'</font><i>');
	msg.document.write("<BR>");
	msg.document.write( "samedis, dimanches, jour(s) férié(s) et interruption(s) exclus");
	if (theform.alsmos.checked)
		{msg.document.write("<br>la formation aura lieu en Alsace ou en Moselle");
		}
	else {msg.document.write("<BR>");}
	msg.document.write("<BR>");
	msg.document.write('<center>');
	msg.document.write('<table border="2" bordercolor="#b22222" bgcolor="#fafad2" font size="2">'+'<tr>'+'<td>')
	msg.document.write('<center>'+"jours fériés"+'</center>');
	msg.document.write('</td>'+'<td>');
	msg.document.write('<center>'+"interruptions"+'</center>');
	msg.document.write('</td>'+'</tr>'+'<tr>'+'<td>');
	for (i=0;i<=feries.length-1;i++){
		msg.document.write(convDate(feries[i]));
		msg.document.write("<BR>");
		}
	msg.document.write('</td>'+'<td>');
	for (i=0;i<=interrup.length-2;i=i+2){
		if (interrup[i]<remplissage){
			msg.document.write("du "+convDate(interrup[i])+" au "+convDate(interrup[i+1]));
			msg.document.write("<BR>");

			}
		}

	msg.document.write('</td>'+'</tr>'+'</table>');
	msg.document.write('</center>');
	msg.document.write("<BR><BR>");
	msg.document.write("Voici le nombre d'allers et retours : "+'</i><font color="#b22222">'+nbtrajets+'</font><i>')
	msg.document.write(" soit un remboursement de "+rembkm+" &euro;")
	msg.document.write("<BR><BR>")
	msg.document.write("Voici le nombre de repas : "+'</i><font color="#b22222">'+nbrepas+'</font><i>'+" soit un remboursement de "+rembrep+" &euro;");
	msg.document.write("<BR><BR>");
	msg.document.write("Voici le nombre de nuitées : "+'</i><font color="#b22222">'+nbnuits+'</font><i>'+" soit un remboursement de "+rembnuits+" &euro;");
	msg.document.write("<BR><BR>");
	msg.document.write("Soit au total un remboursement de  "+rembtotal+" &euro; (pour la durée de la formation) plafonnés à 665 &euro;/mois, ou 800 &euro;/mois dans des cas dûment justifiés");
	msg.document.write("<BR><BR>");
	msg.document.write('</font></H4></i>');
	msg.document.write('</body>');
	interrup=new Array();
	joursem=new Array();
	feries=new Array();
	jourouv=new Array();
	jourform=new Array();
	c=1;
	d=0;
	}
//-->
</SCRIPT>

</HEAD>
<BODY bgColor="#fafad2" onload="document.form1.jourdeb.focus()">
<TABLE width="100%">
  <TR align=left>
    <TD width="40%">
      <H4 text="#000080"><I><FONT color="#000080" size="2">saisie des dates de
      début<BR>et de fin de formation</FONT> </I></H4><B>

      <FORM name="form1">
	<P><INPUT maxLength="2" onchange="verifjour(this)" size="2" name="jourdeb">
	<INPUT maxLength="2" onchange="verifmois(this)" size="2" name="moisdeb">
	<INPUT maxLength="2" onchange="verifannee(this)" size="2" name="anneedeb">
	<FONT color="#000080" size="2">premier jour (JJ/MM/AA)
	<BR>
	</FONT>
	<INPUT maxLength="2" onchange="verifjour(this)" size="2" name="jourfin">
	<INPUT maxLength="2" onchange="verifmois(this)" size="2" name="moisfin">

	<INPUT maxLength="2" onchange="verifannee(this)" size=2 name="anneefin">
	<FONT color="#000080"><FONT size="2">dernier jour (JJ/MM/AA)</FONT> </FONT></P>
	<P><INPUT onfocus="verifsens(this.form)" size="4" name="km">
	<FONT color="#000080"><FONT size="2">km aller et retour</FONT> </FONT></P>
	<P><FONT color="#000080" size="2">hébergement :
	<INPUT type="radio" value="V1" name="rnom">oui<INPUT type="radio" CHECKED value="V1" name="rnom">non</FONT></P>

	<input type="checkbox" name="alsmos" value="alsmos" unchecked>La formation se déroule en Alsace ou en Moselle<br>
	<P><EM><FONT color="#000080">Avant de valider, saisissez<BR>les
	interruptions s'il y a lieu.</FONT><BR></EM>
	<INPUT onclick="calculer(this.form)" type="button" value="Valider" name="Submit">
	<INPUT id="reset1" onclick="form1.jourdeb.focus()" type="reset" value="Effacer" name="reset1">
	</P>
     </FORM></B>
   </TD>

   <TD vAlign="center" borderColor="black" align="middle" width="20%" border="2">
      <P><FONT color="#b22222" size="6">J<BR>O<BR>U<BR>R<BR>F<BR>O<BR>R<BR>M</FONT></P></TD>
   <TD align="left">
      <H4 align="left"><I><FONT color="#000080" size="2">&nbsp;&nbsp; saisie des
      interruptions</FONT> </I></H4><B>

   <FORM name="form2"><FONT color="#000080" size="2">du </FONT>
	<INPUT maxLength="2" onchange="verifjour(this)" size="2" name="jourdeb">
	<INPUT maxLength="2" onchange="verifmois(this)" size="2" name="moisdeb">
	<INPUT maxLength="2" onchange="verifannee(this)" size="2" name="anneedeb"><BR>
	<FONT color="#000080" size="2">au </FONT>
	<INPUT maxLength="2" onchange="verifjour(this)" size="2" name="jourfin">
	<INPUT maxLength="2" onchange="verifmois(this)" size="2" name="moisfin">
	<INPUT onblur="tronquer(this.form)" maxLength="2" onchange="verifannee(this)" size="2" name="anneefin">

	<BR></FONT></FORM></B><B>
   <FORM name="form3"><FONT color="#000080" size="2">du </FONT>
      <INPUT maxLength="2" onchange="verifjour(this)" size="2" name="jourdeb">
      <INPUT maxLength="2" onchange="verifmois(this)" size="2" name="moisdeb">
      <INPUT maxLength="2" onchange="verifannee(this)" size="2" name="anneedeb">
      <FONT color="#000080" size="2"><BR>au </FONT>
      <INPUT maxLength="2" onchange="verifjour(this)" size="2" name="jourfin">
      <INPUT maxLength="2" onchange="verifmois(this)" size="2" name="moisfin">

      <INPUT onblur="tronquer(this.form)" maxLength="2" onchange="verifannee(this)" size="2" name="anneefin">
      <BR>
   </FORM></B><B>
   <FORM name="form4"><FONT color="#000080" size="2">du </FONT>
      <INPUT maxLength="2" onchange="verifjour(this)" size="2" name="jourdeb">
      <INPUT maxLength="2" onchange="verifmois(this)" size="2" name="moisdeb">
      <INPUT maxLength="2" onchange="verifannee(this)" size="2" name="anneedeb">
      <FONT color="#000080" size="2"><BR>au </FONT>

      <INPUT maxLength="2" onchange="verifjour(this)" size="2" name="jourfin">
      <INPUT maxLength="2" onchange="verifmois(this)" size="2" name="moisfin">
      <INPUT onblur="tronquer(this.form)" maxLength="2" onchange="verifannee(this)" size="2" name="anneefin">
      <BR></FORM></B><B>
   <FORM name="form5"><FONT color="#000080" size="2">du </FONT>
      <INPUT maxLength="2" onchange="verifjour(this)" size="2" name="jourdeb">
      <INPUT maxLength="2" onchange="verifmois(this)" size="2" name="moisdeb">
      <INPUT maxLength="2" onchange="verifannee(this)" size="2" name="anneedeb">

      <FONT color="#000080" size="2"><BR>au </FONT>
      <INPUT maxLength="2" onchange="verifjour(this)" size="2" name="jourfin">
      <INPUT maxLength="2" onchange="verifmois(this)" size="2" name="moisfin">
      <INPUT onblur="tronquer(this.form)" maxLength="2" onchange="verifannee(this)" size="2" name="anneefin">
      <BR></FORM></B></TD></TR>
</TABLE>
<HR width="100%" SIZE="1">
<P><FONT color="#b22222">Ceci est la version&nbsp; 4 de Jourform
<BR>Evolutions par rapport aux versions précédentes :

<ol>
<li>prise en compte par défaut des jours fériés d'Alsace et de Moselle</li>
<li>amélioration de la vitesse de calcul des jours fériés </li>
<li>révision du code javascript en vue d'éventuelles  modifications ultérieures</li>
<li>standardisation des codes html et javascript</li>
</ol>
<BR>
Pour toute proposition d'amélioration, contacter&nbsp;: </FONT>
<A href="mailto:lorraine.wagenmann@anpe.fr"><FONT color=#000080>Lorraine
Wagenmann</FONT> </A><FONT color="#b22222">&nbsp;ou&nbsp;</FONT> <A
href="mailto:bernard.adrian@anpe.fr"><FONT color="#000080">Bernard Adrian</FONT>

</A><FONT color="#b22222">.</FONT></P>
<P><FONT color="#b22222">Merci !</FONT></FONT></P>
</BODY></HTML>
		

Add a new version

You can submit a new version of this snippet if you have modified it and you feel it is appropriate to share with others.

FEDER Powered By FusionForge Collaborative Development Environment Charte d'utilisation / Nous contacter / Mentions légales Haut de page