******************************************************
* PROGRAMME DE LECTURE OPTIQUE A PARTIR D'UN FICHIER *
* PRESENT DANS LE REPERTOIRE "LECTUREOPT"            *
*                                                    *
* JUILLET 2001                       STEPHANE HERVET *
******************************************************

* RECAPITULATIF DES GOSUBS
* 10  -> RECUPERE INFOS : TYPE ACTIVITE / ENTITE / PERIODE
* 20  -> COMMENCE TRAITEMENT DE LA LIGNE
* 21  -> TEST VALIDITE CONTRAT
* 22  -> TEST VALIDITE ACTIVITESAIDE
* 30  -> TEST COHERENCE DETAIL HRES // TOTAL
* 31  -> VERIFIE SI DIM. OU J.F
* 40  -> TEST SI PAS FICHIER DETAILCALCUL
* 100 -> PREPARATION ECRITURE DETAIL
* 101 -> PREPARATION ECRITURE DETAILPREST
* 102 -> PREPARATION ECRITURE DETAILMANDAT


* OUVERTURE DES FICHIERS
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","LECTUREOPT" TO F.LECTUREOPT ELSE STOP
OPEN "","LIENOPTIQUE" TO F.LIENOPTIQUE ELSE STOP
OPEN "","PAQUES" TO F.PAQUES ELSE STOP
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE STOP
OPEN "","TEMPO" TO F.TEMPO ELSE STOP

** A VOIR
OPEN "","ACTIVITES" TO F.ACTIVITES ELSE STOP
OPEN "","ACTIVITESAIDE" TO F.ACTIVITESAIDE ELSE STOP
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP
OPEN "","CIVILAIDE" TO F.CIVILAIDE ELSE STOP
OPEN "","CONTRAT" TO F.CONTRAT ELSE STOP
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE STOP
OPEN "","DETAILPREST" TO F.DETAILPREST ELSE STOP
OPEN "","DETAILMANDAT" TO F.DETAILMANDAT ELSE STOP

* INITIALISE LE FICHIER "ERREUR" DANS TEMPO
W_TAUXKMAUTO=0
W_TAUXKMVELO=0
W_ERRLIENOPT=0
Z=1
W_ERREUR=""
ENR_LECTUREOPT=""

* RECUPERATION DES PARAMETRES
PROCREAD VARIABLES ELSE STOP
W_RANGFICHIER=INDEX(VARIABLES," ",1)
W_RANGHRESNORM=INDEX(VARIABLES," ",2)
W_RANGHRESDIM=INDEX(VARIABLES," ",3)
W_RANGHRES1MAI=INDEX(VARIABLES," ",4)
W_RANGKMVOIT=INDEX(VARIABLES," ",5)
W_RANGKMVELO=INDEX(VARIABLES," ",6)
W_NOMFICHIER=VARIABLES[W_RANGFICHIER+1,11]
W_HRESNORM=VARIABLES[W_RANGHRESNORM+1,3]
W_HRESDIM=VARIABLES[W_RANGHRESDIM+1,3]
W_HRES1MAI=VARIABLES[W_RANGHRES1MAI+1,3]
W_KMAUTO=VARIABLES[W_RANGKMVOIT+1,3]
W_KMVELO=VARIABLES[W_RANGKMVELO+1,3]

* LECTURE TAUX KM AUTO + KM VELO
READ ENR_RUBSAISIE FROM F.RUBSAISIE,W_KMAUTO THEN W_TAUXKMAUTO=ENR_RUBSAISIE<9>
READ ENR_RUBSAISIE FROM F.RUBSAISIE,W_KMVELO THEN W_TAUXKMVELO=ENR_RUBSAISIE<9>
* TEST SI PAS TAUX A SAISIR
IF W_TAUXKMAUTO="" THEN W_TAUXKMAUTO=0
IF W_TAUXKMVELO="" THEN W_TAUXKMVELO=0


* PREPARATION FICHIER JOURS FERIES
READ ENR_PAQUES FROM F.PAQUES,W_NOMFICHIER[5,4] ELSE ENR_PAQUES=""
W_LUNPAQUES=ENR_PAQUES<1>[1,2]:"/":ENR_PAQUES<1>[3,2]:"/":W_NOMFICHIER[5,4]
W_LUNPAQUES=ICONV(W_LUNPAQUES,"D4/")+1
W_JEUASCENSION=W_LUNPAQUES+38
W_LUNPENTECOTE=W_JEUASCENSION+11


* TEST OUVERTURE DU FICHIER
READ ENR_LECTUREOPT FROM F.LECTUREOPT,W_NOMFICHIER ELSE 
	W_ERREUR<Z,6>="OUVERTURE DU FICHIER LECTURE OPTIQUE ":W_NOMFICHIER
	Z=Z+1
END


* LECTURE DES LIGNES DE TRAITEMENT EN SEQUENCE
I=1
LOOP
	UNTIL ENR_LECTUREOPT<I>="" DO

	* RECUPERE INFOS : TYPE ACTIVITE / ENTITE / PERIODE
	GOSUB 10

	* VERIFIE SI LIGNE OPTIQUE = ANCIEN LOGICIEL / NOUVEAU LOGICIEL
	GOSUB 15
	
	* COMMENCE TRAITEMENT DE LA LIGNE
	GOSUB 20

	I=I+1
REPEAT

* ECRITURE DU FICHIER D'ERREURS
WRITE W_ERREUR ON F.TEMPO,"ERREURLECTOPT"
**DELETE F.LECTUREOPT,W_NOMFICHIER

STOP

******************************************************
* RECUPERE INFOS : TYPE ACTIVITE / ENTITE / PERIODE

10 *

	W_TYPEACTIVITE=W_NOMFICHIER[1,1]
	W_ENTITE=W_NOMFICHIER[2,3]
	W_PERIODE=W_NOMFICHIER[5,6]
	W_MOIS=W_NOMFICHIER[9,2]

	W_DEBUTMOIS="01/":W_PERIODE[5,2]:"/":W_PERIODE[1,4]
	IF W_PERIODE[5,2]="12" THEN
		W_FINMOIS="01/01/":W_PERIODE[1,4]+1
	END ELSE
		W_FINMOIS="01/":W_PERIODE[5,2]+1:"/":W_PERIODE[1,4]
	END

	W_DEBUTMOIS=ICONV(W_DEBUTMOIS,"D4/")
	W_FINMOIS=ICONV(W_FINMOIS,"D4/")-1

RETURN

******************************************************
* VERIFIE SI LIGNE OPTIQUE = ANCIEN LOGICIEL / NOUVEAU LOGICIEL

15 *

	W_ERRLIENOPT=0
	W_PASSEANCPREST=0

	* TEST LONGUEUR LIGNE
	IF LEN(ENR_LECTUREOPT<I>)=115 OR LEN(ENR_LECTUREOPT<I>)=146 THEN
		IF W_TYPEACTIVITE="P" THEN
			* LIT FICHIER LIENOPTIQUE POUR CODE NOUVEAU LOGICIEL
			W_ANCAIDE="P":ENR_LECTUREOPT<I>[3,4]
			W_ANCAIDANT="A":ENR_LECTUREOPT<I>[7,5]
			W_PASSEANCPREST=1
		END ELSE
			IF W_TYPEACTIVITE="M" THEN
				* LIT FICHIER LIENOPTIQUE POUR CODE NOUVEAU LOGICIEL
				W_ANCAIDE="E":ENR_LECTUREOPT<I>[3,4]
				W_ANCAIDANT="G":ENR_LECTUREOPT<I>[7,5]
			END
		END
		READ ENR_LIENOPTIQUE1 FROM F.LIENOPTIQUE,W_ANCAIDE ELSE 
			ENR_LECTUREOPT<I>=ENR_LECTUREOPT<I>[1,2]:"0":ENR_LECTUREOPT<I>[3,999]
			W_ERREUR<Z,1>=I	
			W_ERREUR<Z,4>=W_ANCAIDE
			W_ERREUR<Z,6>="AIDE INEXISTANT DANS LIENOPTIQUE"	
			Z=Z+1
			W_ERRLIENOPT=1
			RETURN
		END
		READ ENR_LIENOPTIQUE2 FROM F.LIENOPTIQUE,W_ANCAIDANT ELSE 
			W_ERREUR<Z,1>=I	
			W_ERREUR<Z,2>=W_ANCAIDANT
			W_ERREUR<Z,6>="AIDANT INEXISTANT DANS LIENOPTIQUE"	
			Z=Z+1
			W_ERRLIENOPT=1
			RETURN
		END
		
		ENR_LECTUREOPT<I>=ENR_LECTUREOPT<I>[1,2]:ENR_LIENOPTIQUE1<1>:ENR_LIENOPTIQUE2<1>:ENR_LECTUREOPT<I>[12,999]

		IF W_PASSEANCPREST=1 THEN GOSUB 16

		WRITE ENR_LECTUREOPT ON F.LECTUREOPT,W_NOMFICHIER
	END

RETURN

******************************************************
* RAJOUTE DES 0 POUR ANCIEN FICHIER PRESTATAIRE

16 *

	FOR M=13 TO 133

		ENR_LECTUREOPT<I>=ENR_LECTUREOPT<I>[1,M+2]:"0":ENR_LECTUREOPT<I>[M+3,999]
		M=M+3

	NEXT M

RETURN

******************************************************
* COMMENCE TRAITEMENT DE LA LIGNE

20 *

	* TEST VALIDITE PERIODE
	IF W_MOIS<>ENR_LECTUREOPT<I>[1,2] THEN 
		W_ERREUR<Z,1>=I	
		W_ERREUR<Z,6>="PERIODE DE SAISIE INCORRECTE"	
		Z=Z+1
		RETURN
	END

	IF W_ERRLIENOPT=0 THEN
		* TEST VALIDITE AIDE
		W_CODEAIDE=ENR_LECTUREOPT<I>[3,5] "R%5"	
		READ ENR_CIVILAIDE FROM F.CIVILAIDE,W_CODEAIDE ELSE
			W_ERREUR<Z,1>=I	
			W_ERREUR<Z,4>=W_CODEAIDE
			W_ERREUR<Z,6>="AIDE INEXISTANT"
			Z=Z+1
			RETURN
		END

		* TEST VALIDITE AIDANT
		W_CODEAIDANT=ENR_LECTUREOPT<I>[8,5]	
		READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_CODEAIDANT ELSE
			W_ERREUR<Z,1>=I	
			W_ERREUR<Z,2>=W_CODEAIDANT
			W_ERREUR<Z,6>="AIDANT INEXISTANT"	
			Z=Z+1
			RETURN
		END

		* TEST VALIDITE CONTRAT
		GOSUB 21

		* TEST VALIDITE ACTIVITESAIDE
		GOSUB 22
	END

	IF W_CODECONTRAT="" OR W_ACTIVITE="" OR W_ERRLIENOPT=1 THEN 
	END ELSE
		* TEST COHERENCE DETAIL HRES // TOTAL
		GOSUB 30
		IF W_ERRHRES=1 THEN
		END ELSE 	
			GOSUB 40
			IF W_ERRBS=1 THEN 
			END ELSE
				GOSUB 100
			END
		END
	END

RETURN

******************************************************
* TEST VALIDITE CONTRAT

21 *

	* LECTURE DES CONTRATS EN BOUCLE 
	W_CODECONTRAT=""
	W_FINCONTRAT=0
	W_NUMCONTRAT="001"
	
	LOOP
	    READ ENR_CONTRAT FROM F.CONTRAT,W_CODEAIDANT:W_NUMCONTRAT ELSE W_FINCONTRAT=1
	    UNTIL W_FINCONTRAT=1 OR W_FINCONTRAT=2 DO
		
	    IF ENR_CONTRAT<65>#"O" THEN
		* TEST ACTIVITE
		IF W_TYPEACTIVITE="M" THEN
			IF ENR_CONTRAT<1>="02" THEN	
				* TEST DATE DEBUT
				IF ENR_CONTRAT<7><=W_FINMOIS THEN
					* TEST DATE FIN
					IF ENR_CONTRAT<8>>=W_DEBUTMOIS OR ENR_CONTRAT<8>="" THEN
						* TEST VALIDITE DE COUPLE
						IF ENR_CONTRAT<3>=W_CODEAIDE THEN W_FINCONTRAT=2
					END
				END
			END
		END ELSE
			IF W_TYPEACTIVITE="P" THEN
				IF ENR_CONTRAT<1><>"02" THEN	
					* TEST DATE DEBUT
					IF ENR_CONTRAT<7><=W_FINMOIS THEN
						* TEST DATE FIN
						IF ENR_CONTRAT<8>>=W_DEBUTMOIS OR ENR_CONTRAT<8>="" THEN W_FINCONTRAT=2
					END
				END
			END
		END

		IF W_FINCONTRAT=2 THEN 
			W_CODECONTRAT=W_CODEAIDANT:W_NUMCONTRAT			
			EXIT
		END
	    END	

  	    W_NUMCONTRAT=W_NUMCONTRAT+1 "R%3"
	REPEAT

	IF W_FINCONTRAT=1 THEN 
		W_ERREUR<Z,1>=I	
		W_ERREUR<Z,2>=W_CODEAIDANT
		W_ERREUR<Z,3>=ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
		W_ERREUR<Z,4>=W_CODEAIDE
		W_ERREUR<Z,5>=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
		W_ERREUR<Z,6>="AIDANT SORTI DU SERVICE"
		Z=Z+1
	END

RETURN 

******************************************************
* TEST VALIDITE ACTIVITESAIDE

22 *

	* LECTURE DES ACTIVITESAIDE EN BOUCLE
	W_ACTIVITE=""
	W_FINACT=0

	READ ENR_ACTIVITESAIDE FROM F.ACTIVITESAIDE,W_CODEAIDE ELSE 
		W_ERREUR<Z,1>=I	
		W_ERREUR<Z,2>=W_CODEAIDANT
		W_ERREUR<Z,3>=ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
		W_ERREUR<Z,4>=W_CODEAIDE	
		W_ERREUR<Z,5>=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
		W_ERREUR<Z,6>="AIDE SANS AUCUNE ACTIVITE DE SAISIE"
		Z=Z+1
		RETURN
	END

	J=1
	LOOP
		UNTIL ENR_ACTIVITESAIDE<1,J>="" OR W_FINACT=1 DO
	
		READ ENR_ACTIVITES FROM F.ACTIVITES,ENR_ACTIVITESAIDE<1,J> THEN
			IF ENR_ACTIVITES<12>=W_TYPEACTIVITE THEN
				IF ENR_ACTIVITESAIDE<3,J> >= W_DEBUTMOIS OR ENR_ACTIVITESAIDE<3,J>="" THEN
					IF ENR_ACTIVITESAIDE<2,J> <= W_FINMOIS OR ENR_ACTIVITESAIDE<2,J>="" THEN
						W_ACTIVITE=ENR_ACTIVITESAIDE<1,J>
						W_FINACT=1
						EXIT	
					END
				END
			END
		END

		J=J+1
	REPEAT

	IF W_ACTIVITE="" THEN
		W_ERREUR<Z,1>=I	
		W_ERREUR<Z,2>=W_CODEAIDANT
		W_ERREUR<Z,3>=ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
		W_ERREUR<Z,4>=W_CODEAIDE	
		W_ERREUR<Z,5>=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
		W_ERREUR<Z,6>="AIDE SORTI DU SERVICE"
		Z=Z+1
	END
		
RETURN 

******************************************************
* TEST COHERENCE DETAIL HRES // TOTAL

30 *

	* PARCOURS TOUS LES DETAILS + COMPARE AVEC TOTAL
	K=1
	W_POS=13
	W_CUMUL=0
	W_CUMULJF=0
	W_CUMULDIM=0
	W_CUMUL1MAI=0
	W_ERRHRES=0
	W_NBKMAUTO=0	
	W_NBKMVELO=0

	LOOP	
		UNTIL W_POS=137 DO

		W_CUMUL=W_CUMUL+ENR_LECTUREOPT<I>[W_POS,3]
		
		* VERIFIE SI DIM. OU J.F
		GOSUB 31

		W_POS=W_POS+4
	REPEAT

	* SI PRESTATAIRE ALORS J.DIM + J.F => RUB MAJOREE
	* SI MANDATAIRE ALORS J.F   => RUB NORMALE
	*                     J.DIM => RUB MAJOREE
	IF W_TYPEACTIVITE="P" THEN
		W_CUMULJF=W_CUMULJF+W_CUMULDIM
		W_CUMULDIM=0
	END ELSE 
		W_CUMULJF=W_CUMULDIM		
	END

	W_CUMUL=W_CUMUL "R%5"

	* COMPARE CUMUL // TOTAL
	IF W_CUMUL<>ENR_LECTUREOPT<I>[137,5] THEN
		W_ERREUR<Z,1>=I	
		W_ERREUR<Z,2>=W_CODEAIDANT	
		W_ERREUR<Z,3>=ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
		W_ERREUR<Z,4>=W_CODEAIDE	
		W_ERREUR<Z,5>=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
		W_ERREUR<Z,6>="TOTAL DES HEURES # DETAIL DES HEURES."
		Z=Z+1
		W_ERRHRES=1
		RETURN
	END

	* TEST SI CUMUL PAS = 0
	IF W_CUMUL=0 THEN
		W_ERREUR<Z,1>=I	
		W_ERREUR<Z,2>=W_CODEAIDANT	
		W_ERREUR<Z,3>=ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
		W_ERREUR<Z,4>=W_CODEAIDE	
		W_ERREUR<Z,5>=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
		W_ERREUR<Z,6>="PAS D'HEURES TRAVAILLEES."
		Z=Z+1
		W_ERRHRES=1
		RETURN
	END

	W_NBKMAUTO=ENR_LECTUREOPT<I>[142,3]*100
	W_NBKMVELO=ENR_LECTUREOPT<I>[145,3]*100

RETURN

******************************************************
* VERIFIE SI DIM. OU J.F

31 *

	* RECUPERE LE JOUR
	W_JOUR=INT((W_POS-12)/4)+1

	* TEST SI DIMANCHE
	W_DATE=W_JOUR:"/":W_MOIS:"/":W_PERIODE[1,4]
	W_DATE=ICONV(W_DATE,"D4/")

	IF OCONV(W_DATE,"DW")="0" THEN
		W_CUMULDIM=W_CUMULDIM+ENR_LECTUREOPT<I>[W_POS,3]
		RETURN
	END

	* TEST SI JF CLASSIQUE
	BEGIN CASE
		CASE W_MOIS="01"
			IF W_JOUR=1 THEN W_CUMULJF=W_CUMULJF+ENR_LECTUREOPT<I>[W_POS,3]
		CASE W_MOIS="05"
			IF W_JOUR=1 THEN W_CUMUL1MAI=W_CUMUL1MAI+ENR_LECTUREOPT<I>[W_POS,3]
			IF W_JOUR=8 THEN W_CUMULJF=W_CUMULJF+ENR_LECTUREOPT<I>[W_POS,3]
		CASE W_MOIS="07"
			IF W_JOUR=14 THEN W_CUMULJF=W_CUMULJF+ENR_LECTUREOPT<I>[W_POS,3]
		CASE W_MOIS="08"
			IF W_JOUR=15 THEN W_CUMULJF=W_CUMULJF+ENR_LECTUREOPT<I>[W_POS,3]
		CASE W_MOIS="11"
			IF W_JOUR=1 THEN W_CUMULJF=W_CUMULJF+ENR_LECTUREOPT<I>[W_POS,3]
			IF W_JOUR=11 THEN W_CUMULJF=W_CUMULJF+ENR_LECTUREOPT<I>[W_POS,3]
		CASE W_MOIS="12"
			IF W_JOUR=25 THEN W_CUMULJF=W_CUMULJF+ENR_LECTUREOPT<I>[W_POS,3]	
	END CASE

	* TEST SI JF SPECIAUX (LUNDI PAQUES/JEUDI ASCENSION/LUNDI PENTECOTE)
	IF (W_DATE=W_LUNPAQUES) OR (W_DATE=W_JEUASCENSION) OR (W_DATE=W_LUNPENTECOTE) THEN 
		W_CUMULJF=W_CUMULJF+ENR_LECTUREOPT<I>[W_POS,3]
	END
RETURN

******************************************************
* TEST SI PAS FICHIER DETAILCALCUL

40 *

	W_ERRBS=0

	* TEST LECTURE DETAILCALCUL	
	READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE THEN
		W_ERREUR<Z,1>=I	
		W_ERREUR<Z,2>=W_CODEAIDANT	
		W_ERREUR<Z,3>=ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
		W_ERREUR<Z,4>=W_CODEAIDE	
		W_ERREUR<Z,5>=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
		W_ERREUR<Z,6>="BULLETIN DEJA CALCULE."
		Z=Z+1
		W_ERRBS=1
		RETURN
	END

RETURN

******************************************************
* PREPARATION ECRITURE DETAIL

100 *

	IF W_TYPEACTIVITE="P" THEN
		GOSUB 101
	END ELSE 	
		IF W_TYPEACTIVITE="M" THEN 
			GOSUB 102
		END
	END
	
RETURN

******************************************************
* PREPARATION ECRITURE DETAILPREST

101 *
	W_ERRKM=0

	* LECTURE FICHIER DETAILPREST
	READ ENR_DETAILPREST FROM F.DETAILPREST,W_CODECONTRAT:W_PERIODE ELSE ENR_DETAILPREST=""
	
	* TEST SI AIDE PAS DEJA AFFECTE
	M=1
	LOOP 
		UNTIL ENR_DETAILPREST<1,M>="" OR ENR_DETAILPREST<1,M>=W_CODEAIDE DO
		M=M+1
	REPEAT

	* TEST SI KM AUTO + KM VELO
	IF W_NBKMAUTO<>0 AND W_NBKMVELO<>0 THEN
		W_ERREUR<Z,1>=I	
		W_ERREUR<Z,2>=W_CODEAIDANT	
		W_ERREUR<Z,3>=ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
		W_ERREUR<Z,4>=W_CODEAIDE	
		W_ERREUR<Z,5>=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
		W_ERREUR<Z,6>="IL Y A DES KMS VOITURE ET DES KMS VELOMOTEUR DE SAISIE"	
		Z=Z+1
		W_ERRKM=1
	END 

	IF W_NBKMAUTO<>0 OR W_NBKMVELO<>0 THEN 
		W_ERREUR<Z,1>=I	
		W_ERREUR<Z,2>=W_CODEAIDANT	
		W_ERREUR<Z,3>=ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
		W_ERREUR<Z,4>=W_CODEAIDE	
		W_ERREUR<Z,5>=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
		W_ERREUR<Z,6>="L'AIDANT N'EST PAS AUTORISE A AVOIR DES INDEMNITES KILOMETRIQUES"	
		Z=Z+1
		W_ERRKM=1
	END

*************
	* TEST SI RUB KILOMETRE AUTO EXISTE
	N=1
	LOOP 
		UNTIL ENR_DETAILPREST<5,N>="" OR ENR_DETAILPREST<5,N>=W_KMAUTO DO
		N=N+1
	REPEAT

	IF ENR_DETAILPREST<5,N><>"" THEN                                      ;* KM AUTO
		IF W_NBKMAUTO<>0 AND W_ERRKM=0 THEN
			ENR_DETAILPREST<5,N>=W_KMAUTO
			ENR_DETAILPREST<6,N>=ENR_DETAILPREST<6,N>+W_NBKMAUTO
			ENR_DETAILPREST<7,N>=W_TAUXKMAUTO
			ENR_DETAILPREST<8,N>=INT((ENR_DETAILPREST<6,N>*W_TAUXKMAUTO)/10000)
		END
	END ELSE
		N=-1
		IF W_NBKMAUTO<>0 AND W_ERRKM=0 THEN
			ENR_DETAILPREST<5,N>=W_KMAUTO
			ENR_DETAILPREST<6,N>=W_NBKMAUTO
			ENR_DETAILPREST<7,N>=W_TAUXKMAUTO
			ENR_DETAILPREST<8,N>=INT((W_NBKMAUTO*W_TAUXKMAUTO)/10000)
		END
	END


*************
	* TEST SI RUB KILOMETRE VELO EXISTE
	N=1
	LOOP 
		UNTIL ENR_DETAILPREST<5,N>="" OR ENR_DETAILPREST<5,N>=W_KMVELO DO
		N=N+1
	REPEAT

	IF ENR_DETAILPREST<5,N><>"" THEN                                      ;* KM VELO
		IF W_NBKMVELO<>0 AND W_ERRKM=0 THEN
			ENR_DETAILPREST<5,N>=W_KMVELO
			ENR_DETAILPREST<6,N>=ENR_DETAILPREST<6,N>+W_NBKMVELO
			ENR_DETAILPREST<7,N>=W_TAUXKMVELO
			ENR_DETAILPREST<8,N>=INT((ENR_DETAILPREST<6,N>*W_TAUXKMVELO)/10000)
		END
	END ELSE
		N=-1
		IF W_NBKMVELO<>0 AND W_ERRKM=0 THEN
			ENR_DETAILPREST<5,N>=W_KMVELO
			ENR_DETAILPREST<6,N>=W_NBKMVELO
			ENR_DETAILPREST<7,N>=W_TAUXKMVELO
			ENR_DETAILPREST<8,N>=INT((W_NBKMVELO*W_TAUXKMVELO)/10000)
		END
	END


*************
	* TEST SI HRES NORMALES + HRES DIMANCHES + HRES 1 MAI
	IF ENR_DETAILPREST<1,M>="" THEN
		IF (W_CUMUL-W_CUMULJF-W_CUMUL1MAI)>0 THEN                             ;* HRES NORMALES
			ENR_DETAILPREST<1,-1>=W_CODEAIDE
			ENR_DETAILPREST<2,-1>=W_HRESNORM
			ENR_DETAILPREST<3,-1>=(W_CUMUL-W_CUMULJF-W_CUMUL1MAI)*1
			ENR_DETAILPREST<4,-1>=W_ACTIVITE
		END
		IF W_CUMULJF>0 THEN                                       ;* HRES DIMANCHES
			ENR_DETAILPREST<1,-1>=W_CODEAIDE
			ENR_DETAILPREST<2,-1>=W_HRESDIM
			ENR_DETAILPREST<3,-1>=W_CUMULJF*1
			ENR_DETAILPREST<4,-1>=W_ACTIVITE
		END		
		IF W_CUMUL1MAI>0 THEN                                       ;* HRES 1ER MAI
			ENR_DETAILPREST<1,-1>=W_CODEAIDE
			ENR_DETAILPREST<2,-1>=W_HRES1MAI
			ENR_DETAILPREST<3,-1>=W_CUMUL1MAI*1
			ENR_DETAILPREST<4,-1>=W_ACTIVITE
		END	
	END ELSE
		W_ERREUR<Z,1>=I	
		W_ERREUR<Z,2>=W_CODEAIDANT	
		W_ERREUR<Z,3>=ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
		W_ERREUR<Z,4>=W_CODEAIDE	
		W_ERREUR<Z,5>=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
		W_ERREUR<Z,6>="IL Y A DEJA UNE SAISIE POUR CE COUPLE"	
		Z=Z+1
	END

**	IF W_ERRKM=1 THEN W_ERREUR<-1>=" "

	WRITE ENR_DETAILPREST ON F.DETAILPREST,W_CODECONTRAT:W_PERIODE

RETURN

******************************************************
* PREPARATION ECRITURE DETAILMANDAT

102 *

	W_ERRKM=0

	* LECTURE FICHIER DETAILPREST
	READ ENR_DETAILMANDAT FROM F.DETAILMANDAT,W_CODECONTRAT:W_PERIODE ELSE ENR_DETAILMANDAT=""
	
	* TEST SI KM AUTO + KM VELO
	IF W_NBKMAUTO<>0 AND W_NBKMVELO<>0 THEN
		W_ERREUR<Z,1>=I	
		W_ERREUR<Z,2>=W_CODEAIDANT	
		W_ERREUR<Z,3>=ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
		W_ERREUR<Z,4>=W_CODEAIDE	
		W_ERREUR<Z,5>=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
		W_ERREUR<Z,6>="IL Y A DES KILOMETRES VOITURE ET DES KILOMETRES VELOMOTEUR DE SAISIE"	
		Z=Z+1
		W_ERRKM=1
	END 

	IF ENR_CONTRAT<35>="" THEN
		IF W_NBKMAUTO<>0 OR W_NBKMVELO<>0 THEN 
			W_ERREUR<Z,1>=I	
			W_ERREUR<Z,2>=W_CODEAIDANT	
			W_ERREUR<Z,3>=ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
			W_ERREUR<Z,4>=W_CODEAIDE	
			W_ERREUR<Z,5>=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
			W_ERREUR<Z,6>="L'AIDANT N'EST PAS AUTORISE A AVOIR DES INDEMNITES KILOMETRIQUES"	
			Z=Z+1
			W_ERRKM=1
		END
	END

*************
	* TEST SI RUB KILOMETRE AUTO EXISTE
	N=1
	LOOP 
		UNTIL ENR_DETAILMANDAT<1,N>="" OR ENR_DETAILMANDAT<1,N>=W_KMAUTO DO
		N=N+1
	REPEAT

	IF ENR_DETAILMANDAT<1,N><>"" THEN                                      ;* KM AUTO
		IF W_NBKMAUTO<>0 AND W_ERRKM=0 THEN
			ENR_DETAILMANDAT<1,N>=W_KMAUTO
			ENR_DETAILMANDAT<2,N>=ENR_DETAILMANDAT<6,N>+W_NBKMAUTO
			ENR_DETAILMANDAT<3,N>=W_TAUXKMAUTO
			ENR_DETAILMANDAT<4,N>=INT((ENR_DETAILMANDAT<6,N>*W_TAUXKMAUTO)/10000)
			ENR_DETAILMANDAT<5,N>=W_ACTIVITE
		END
	END ELSE
		N=-1
		IF W_NBKMAUTO<>0 AND W_ERRKM=0 THEN
			ENR_DETAILMANDAT<1,N>=W_KMAUTO
			ENR_DETAILMANDAT<2,N>=W_NBKMAUTO
			ENR_DETAILMANDAT<3,N>=W_TAUXKMAUTO
			ENR_DETAILMANDAT<4,N>=INT((W_NBKMAUTO*W_TAUXKMAUTO)/10000)
			ENR_DETAILMANDAT<5,N>=W_ACTIVITE
		END
	END
	

*************
	* TEST SI RUB KILOMETRE VELO EXISTE
	N=1
	LOOP 
		UNTIL ENR_DETAILMANDAT<1,N>="" OR ENR_DETAILMANDAT<1,N>=W_KMVELO DO
		N=N+1
	REPEAT

	IF ENR_DETAILMANDAT<1,N><>"" THEN                                      ;* KM VELO
		IF W_NBKMVELO<>0 AND W_ERRKM=0 THEN
			ENR_DETAILMANDAT<1,N>=W_KMVELO
			ENR_DETAILMANDAT<2,N>=ENR_DETAILMANDAT<6,N>+W_NBKMVELO
			ENR_DETAILMANDAT<3,N>=W_TAUXKMVELO
			ENR_DETAILMANDAT<4,N>=INT((ENR_DETAILMANDAT<6,N>*W_TAUXKMVELO)/10000)
			ENR_DETAILMANDAT<5,N>=W_ACTIVITE
		END
	END ELSE
		N=-1
		IF W_NBKMVELO<>0 AND W_ERRKM=0 THEN
			ENR_DETAILMANDAT<1,N>=W_KMVELO
			ENR_DETAILMANDAT<2,N>=W_NBKMVELO
			ENR_DETAILMANDAT<3,N>=W_TAUXKMVELO
			ENR_DETAILMANDAT<4,N>=INT((W_NBKMVELO*W_TAUXKMVELO)/10000)
			ENR_DETAILMANDAT<5,N>=W_ACTIVITE
		END
	END


*************
	* TEST SI HRES NORMALES + HRES DIMANCHES + HRES 1 MAI
	IF (W_CUMUL-W_CUMULJF-W_CUMUL1MAI)>0 THEN                             ;* HRES NORMALES
		ENR_DETAILMANDAT<1,-1>=W_HRESNORM
		ENR_DETAILMANDAT<2,-1>=(W_CUMUL-W_CUMULJF-W_CUMUL1MAI)*1
		ENR_DETAILMANDAT<3,-1>="0"
		ENR_DETAILMANDAT<4,-1>="0"
		ENR_DETAILMANDAT<5,-1>=W_ACTIVITE
	END
	IF W_CUMULJF>0 THEN                                       ;* HRES DIMANCHES
		ENR_DETAILMANDAT<1,-1>=W_HRESDIM
		ENR_DETAILMANDAT<2,-1>=W_CUMULJF*1
		ENR_DETAILMANDAT<3,-1>="0"
		ENR_DETAILMANDAT<4,-1>="0"
		ENR_DETAILMANDAT<5,-1>=W_ACTIVITE
	END		
	IF W_CUMUL1MAI>0 THEN                                       ;* HRES 1ER MAI
		ENR_DETAILMANDAT<1,-1>=W_HRES1MAI
		ENR_DETAILMANDAT<2,-1>=W_CUMUL1MAI*1
		ENR_DETAILMANDAT<3,-1>="0"
		ENR_DETAILMANDAT<4,-1>="0"
		ENR_DETAILMANDAT<5,-1>=W_ACTIVITE
	END	


	WRITE ENR_DETAILMANDAT ON F.DETAILMANDAT,W_CODECONTRAT:W_PERIODE

RETURN
