SUBROUTINE VERIFTLG(RETURNVAL,PARAMETRES,W_Sortie)

*************************************************************************************************************
*					PR de vrification des informatins du planning						*
*						 partir des donnes de tlgestion							*
*																		*
* Il s'agit de vrier les planning tels que prvu dans Gestemps par rapport  ce qui a t fait sur le	*
* terrain, et ce par le biais des fichiers fournis par le prestataire de tlgestion.		 		*
*	    -> Gnration dans W_Sortie d'un rapport d'erreurs signalant  l'utilisateur les ventuelles 	*
*	    anomalies rencontres													*
*         Convention utilise : les variables dont la valeur est fixe (qui ne doivent pas changer) 		*
*         sont nommes sans "W_"... (Parametres d'appel du PR, NbJours a afficher...)				*
*	    Rapport d'anomalies : longueur max du libell  renseigner ci dessous:					*
W_LongueurMaxLibelle = 84
*************************************************************************************************************

EXECUTE "SET-THOUS ."
OPEN "", "CIVILAIDANT" TO F.CIVILAIDANT ELSE RETURN
OPEN "", "CIVILAIDE" TO F.CIVILAIDE ELSE RETURN
OPEN "", "ASSOCIATION" TO F.ASSOCIATION ELSE RETURN
OPEN "", "TPSMOI" TO F.TPSMOI ELSE RETURN
OPEN "", "PAQUES" TO F.PAQUES ELSE RETURN
OPEN "", "TEMPO" TO F.TEMPO ELSE RETURN
OPEN "", "SECTEUR" TO F.SECTEUR ELSE RETURN
OPEN "","FUSION" TO F.FUSION ELSE RETURN
OPEN "", "ANOMALIESTLG" TO F.ANOMALIESTLG ELSE RETURN
OPEN "", "TPSMOI" TO F.TPSMOI ELSE RETURN
OPEN "", "RUBSAISIE" TO F.RUBSAISIE ELSE RETURN
OPEN "", "TPSTEMPO" TO F.TPSTEMPO ELSE RETURN

EXECUTE 'DATE.FORMAT'
EXECUTE 'SET-DEC ,'

W_Sortie = ""
* Rappel paramtres :
* "VERIFTLG |" & GetUser & "|" & Txt_Assoc & "|" & W_TypeAct & "|" & IConv(Txt_Debut) & "|" & IConv(Txt_Fin) & "|" & W_Tri & "|" & W_Selection & "|" & Txt_NomFichier & "|" & Txt_Ecart1 & "|" & Txt_Ecart2 & "|" & Txt_Ecart3
* Nom utilisateur
User = FIELD(PARAMETRES,"|",2)

* Code asso ou [Vide]
Asso = FIELD(PARAMETRES,"|",3)

* Type d'activit
* Nb : = "P", "M", "I" ou "S"
TypeAct = FIELD(PARAMETRES,"|",4)

* Periode a traiter :
DateDeb = FIELD(PARAMETRES,"|",5)
DateFin = FIELD(PARAMETRES,"|",6)
NbJours = DateFin - DateDeb + 1

* Critres de tri : (S)ecteur, (C)ommune ou (A)idant = individuel...
Tri = FIELD(PARAMETRES,"|",7)

* Code dans la slection
Selection = FIELD(PARAMETRES,"|",8)

* Nom fichier (uniquement si appel du PR par le prog de tlgestion)
NomFichierTlg = FIELD(PARAMETRES,"|",9)

READ ENR_ASSOCIATION FROM F.ASSOCIATION, Asso ELSE
 W_Sortie<1> = "Erreur"
 W_Sortie<2> = "Aucun systme de tlgestion n'est activ pour cette association"
 RETURN
END

* code du systme de tlgestion (uniquement si appel du PR par le prog de tlgestion)
SystemeTlg = ENR_ASSOCIATION<38>

* Ecart tolr sur le dbut d'intervention 
EcartDeb = FIELD(PARAMETRES,"|",10)

* Ecart tolr sur la dure  d'une intervention 
EcartInterv = FIELD(PARAMETRES,"|",11)

* Ecart tolr sur la dure totale des interventions de la journe 
EcartJournee= FIELD(PARAMETRES,"|",12)

* Transposition en 100emes :
EcartDeb = INT(EcartDeb / 60 * 100 + 1/2)
EcartInterv = INT(EcartInterv / 60 * 100 + 1/2)
* Nb : les ecarts  la journe se grent directement en minuites
* sinon, on avait des incohrences du genre 20 mn d'ecart entre 5h21 et 5h40
*EcartJournee = INT(EcartJournee / 60 * 100 + 1/2)

GOSUB 100

RETURN

100 ***************************************************************************
*                   		Traitement principal					*
*******************************************************************************
* 1ere partie : appel de la SubRoutine AffichePlanning

IF SystemeTlg # "05" THEN
	BasculMOI="0"
END
GOSUB 111

IF W_Sortie = "" THEN
	W_ReqContrat = ""
	* 2eme partie : PR AFFICHEPLANNING
	GOSUB 110

END

IF W_Sortie = "" THEN
	

	GOSUB 5100

	PeriodePrecedente = Periode -1
	IF PeriodePrecedente[5,2] = "00" THEN
		PeriodePrecedente = Periode[1,4]-1
		PeriodePrecedente = PeriodePrecedente:"12"
	END
	
	W_ReqMoi = ""
	W_NomReqMoi = ""
	W_DerniereAnneeFerieProsp = ""

	W_IndSortie = 1

	W_FinContrat = "F"
	W_AidantPlg = ""
	W_IndTabIntervPlg = 0
	W_SecteurPlg = ""
	W_SecteurTlg = ""
	W_IndAidantPlg = 0
	W_AidantTlg= ""
	W_IndTabIntervTlg = 0
	W_SecteurPlg = ""
	W_SecteurTlg = ""
	W_IndAidantTlg = 0

	
	W_DernierAidantErr = ""
	W_DerniereDateErr = ""

	ENR_ANOMALIE = ""

	LOOP
	W_IndTabIntervTlg = W_IndTabIntervTlg + 1
	WHILE TabIntervTlg<W_IndTabIntervTlg> # "#FIN"
		IF TabIntervTlg<W_IndTabIntervTlg>[1,7] = "#Interv" THEN
	
			W_AidantTlg = TabIntervTlg<W_IndTabIntervTlg>[8,5]
			W_IndAidantTlg = W_IndTabIntervTlg
			GOSUB 160
			
			IF W_AidantPlg = W_AidantTlg THEN
				* Trt aidant en cours...
				GOSUB 2000
			END ELSE
				* Des interventions non prvues au planning 
			        GOSUB 500

				IF W_IndAidantPlg = 1 THEN
					W_IndAidantPlg = 0
				END ELSE
				   IF W_IndAidantPlg # 0 THEN
					W_IndAidantPlg = W_IndAidantPlg - (DateFinProspSuppl - DateDebProspSuppl + 2)
					*LOOP
					*W_IndAidantPlg  = W_IndAidantPlg - 1
					*WHILE TabIntervPlg<W_IndAidantPlg>[1,7] # "#Interv" AND W_IndAidantPlg > 0
					*REPEAT
				   END
				END
				W_AidantPlg = TabIntervPlg<W_IndAidantPlg>[8,5]
			 	* Nb : grce au code ci dessus, W_IndAidantPlg pointe toujours sur le dernier aidant TRAITE, que ce soit en erreur ou pas... 

			END 
			W_IndTabIntervTlg = W_IndAidantTlg + DateFin - DateDeb + 1

		END ELSE
	

		END
	REPEAT
	W_AidantTlg = "99999"

	GOSUB 160

	IF ENR_ANOMALIE # "" THEN
		GOSUB 5200
		WRITE ENR_ANOMALIE ON F.ANOMALIESTLG, W_DernierAidantErr:W_DerniereDateErr:TypeAct:User
	END

	GOSUB 5000
	
	
END ELSE
	W_Sortie<2> = W_Sortie
	W_Sortie<1> = "Erreur"
END

WRITE W_Sortie ON F.TEMPO, "RapportBasculPaiePlg":User

RETURN

160 ***************************************************************************
*	   Positionnement sur les interventions de l'aidant en cours		*
*******************************************************************************

	READ ENR_CIVILAIDANT FROM F.CIVILAIDANT, W_AidantTlg[1,5] THEN
	   IF Tri = "S" OR Tri = "C" THEN
		IF Tri = "S" THEN
			READ ENR_SECTEUR FROM F.SECTEUR, ENR_CIVILAIDANT<31> THEN 
				W_SecteurTlg = ENR_SECTEUR<1>
			END ELSE
			END
		END ELSE
			W_SecteurTlg = ENR_CIVILAIDANT<11>
		END
	   END
	END ELSE
		* W_SecteurTlg = "" 
		* Nb : si lecture CIVILAIDANT choue (!!), on garde le dernier secteur lu pour ne pas dtecter de rupture...
	END
	
	LOOP
		IF W_IndAidantPlg = 0 THEN
			W_IndAidantPlg = 1
		END ELSE
			W_IndAidantPlg = W_IndAidantPlg + DateFinProspSuppl - DateDebProspSuppl + 2
			*LOOP
			*W_IndAidantPlg = W_IndAidantPlg + 1
			*WHILE TabIntervPlg<W_IndAidantPlg>[1,7] # "#Interv" AND TabIntervPlg<W_IndAidantPlg> # "#FIN"
			*REPEAT
		END

		IF TabIntervPlg<W_IndAidantPlg,1> # "#FIN" THEN
			W_AidantPlg = TabIntervPlg<W_IndAidantPlg>[8,5]
		END ELSE
			W_AidantPlg = ""
		END

		IF W_AidantPlg # "" THEN
		   READ ENR_CIVILAIDANT FROM F.CIVILAIDANT, W_AidantPlg THEN
			IF (Tri = "S" OR Tri = "C") THEN
			   IF Tri = "S" THEN
				READ ENR_SECTEUR FROM F.SECTEUR, ENR_CIVILAIDANT<31> THEN 
					W_SecteurPlg = ENR_SECTEUR<1>
				END ELSE
				END

			   END ELSE
				W_SecteurPlg = ENR_CIVILAIDANT<11>
			   END
			END
		   END ELSE
			* Rien
		   END
		END ELSE
		   * Rien
		END
	WHILE W_AidantPlg < W_AidantTlg AND W_SecteurTlg >= W_SecteurPlg AND W_AidantPlg # ""
		* Aidant qui a des interventions prvues mais non effectues ...

		GOSUB 400
	REPEAT
RETURN

400 *********************************************************************************************************************
*			Traitement du reliquat de TabIntervPlg (Interventions prevues non effectues)..				*
*************************************************************************************************************************

FOR W_IndJour = 1 TO NbJours
	
	i = 0
	LOOP
	i = i + 1
	WHILE TabIntervPlg<W_IndAidantPlg + W_IndJour,1,i> # ""
	   IF TabIntervPlg<W_IndAidantPlg + W_IndJour,1,i> = "Interv":TypeAct THEN
		GOSUB 420
		i = 999
	   END
	REPEAT

NEXT W_IndJour

RETURN

410 *****************************************************************************
*		Traitement des interventions prvues non effectues		*
*********************************************************************************
W_CodeErreur = "02"
W_AidantErr = W_AidantPlg
W_DateErr = W_IndJour - 1 + DateDeb
W_CleInterv = TabIntervPlg<W_IndAidantPlg + W_IndJour,4,i>[1,26]
W_HreFinInterv = TabIntervPlg<W_IndAidantPlg + W_IndJour,3,i>
GOSUB 600 
W_Erreur = W_Libelle
GOSUB 3000
RETURN

420 *****************************************************************************
*		Traitement des interventions prvues non effectues		*
* 	cas particulier : aidant absent !					*
*********************************************************************************
W_CodeErreur = "01"
W_AidantErr = W_AidantPlg
W_DateErr = W_IndJour - 1 + DateDeb
W_Erreur = "Ensemble des interventions prvues non effectu."
GOSUB 3000
RETURN

500 ****************************************************************************
*			Traitement des interventions effectues non prvues	*
*********************************************************************************

FOR W_IndJour = 1 TO NbJours
	
	   IF TabIntervTlg<W_IndAidantTlg + W_IndJour,1,i> # "" THEN
		GOSUB 510
	   END
	

NEXT W_IndJour


RETURN

510 ****************************************************************************
*			Traitement des interventions effectues non prvues	*
*********************************************************************************
i = 0
LOOP
i=i+1
WHILE TabIntervTlg<W_IndAidantTlg + W_IndJour,1,i> # ""
  IF TabIntervTlg<W_IndAidantTlg + W_IndJour,8,i> # "1" THEN
   W_CumulJourTlg = W_CumulJourTlg + INT(TabIntervTlg<W_IndAidantTlg + W_IndJour,5,i>*0.6 + 1/2)
   W_CodeErreur = "03"
   W_AidantErr = W_AidantTlg
   W_DateErr = W_IndJour - 1 + DateDeb
   W_CleInterv = TabIntervTlg<W_IndAidantTlg + W_IndJour,4,i>[1,26]:"X":TabIntervTlg<W_IndAidantTlg + W_IndJour,2,i>
   W_HreFinInterv = TabIntervTlg<W_IndAidantTlg + W_IndJour,3,i>
   
   GOSUB 600 
   W_Erreur = W_Libelle
   GOSUB 3000
  END
REPEAT
RETURN

600 ***************************************************************************
*				Construction du libelle anomalie				*
* Anomalies types "Interv prevue non effectues"						*
* et "Interv effectu&es non prevue"							*
*******************************************************************************
READ ENR_CIVILAIDE FROM F.CIVILAIDE,W_CleInterv[6,5] ELSE ENR_CIVILAIDE = ""
W_Temp = INT(W_CleInterv[25,2] * 0.6+1/2)"R%2"
W_Libelle = "De ":W_CleInterv[23,2]*1:"h":W_Temp:"  "
W_HreDeb3000 = W_CleInterv[23,2]*1:"h":W_Temp
W_CodeAide3000 = W_CleInterv[6,5]
W_Temp = INT(W_HreFinInterv[3,2] * 0.6 + 1/2)
W_Libelle = W_Libelle:W_HreFinInterv[1,2]*1:"h":W_Temp:" chez ":W_CleInterv[6,5]:" ":ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>:"."

RETURN

610 ***************************************************************************
*				Construction du libelle anomalie				*
* Anomaies type "Ecart sur dure interv..."						*
*******************************************************************************

READ ENR_CIVILAIDE FROM F.CIVILAIDE,W_CleInterv[6,5] ELSE ENR_CIVILAIDE = ""
W_Temp = INT(W_CleInterv[25,2] * 0.6+1/2)"R%2"


W_Libelle = "Chez ":W_CleInterv[6,5]:" ":ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>:" prvu de ":W_CleInterv[23,2]*1:"h":W_Temp:"  "
W_Temp = INT(W_HreFinInterv[3,2] * 0.6 + 1/2)"R%2"
W_Libelle = W_Libelle:W_HreFinInterv[1,2]*1:"h":W_Temp:", ralis de "
W_Temp = INT(W_HreDebFaite[3,2] * 0.6+1/2)"R%2"

W_Libelle = W_Libelle:W_HreDebFaite[1,2]*1:"h":W_Temp:"  "
W_Temp = INT(W_HreFinFaite[3,2] * 0.6+1/2)"R%2"
W_Libelle = W_Libelle:W_HreFinFaite[1,2]*1:"h":W_Temp

W_Temp = W_ListeErreurDuree<i,1> 


W_Libelle = W_Libelle:SPACE(W_LongueurMaxLibelle - LEN(W_Libelle:"+ ":ABS(W_Temp)"R 2":" mn"))
IF W_ListeErreurDuree<i,1> > 0 THEN
	W_Libelle = W_Libelle:"+ "
END ELSE
	W_Libelle = W_Libelle:"- "
END
W_Libelle = W_Libelle:ABS(W_Temp)"R 2":" mn"

RETURN

700 ***************************************************************************
*					MOI non effectue						*
*******************************************************************************
i = 0
LOOP
i = i + 1
WHILE FIELD(W_ListeMoi,";",i) # "" 
	READ ENR_TPSMOI FROM F.TPSMOI, FIELD(W_ListeMoi,";",i) THEN
		READ ENR_RUBSAISIE FROM F.RUBSAISIE, ENR_TPSMOI<3> THEN
			W_CodeErreur = "04"
			W_AidantErr = W_AidantPlg
			W_DateErr = W_IndJour - 1 + DateDeb
			W_Temp = INT(FIELD(W_ListeMoi,";",i)[13,2] * 0.6+1/2)"R%2"
			W_Erreur = ENR_RUBSAISIE<1>:" de ":FIELD(W_ListeMoi,";",i)[11,2]*1:"h":W_Temp:"  "
			W_Temp = INT(ENR_TPSMOI<1>[3,2] * 0.6+1/2)"R%2"
			W_Erreur = W_Erreur:ENR_TPSMOI<1>[1,2]*1:"h":W_Temp:"."
			GOSUB 3000
		END
	END
REPEAT

RETURN

800 ***************************************************************************
*				Anomalies dure d'intervention				*
*******************************************************************************
W_CodeErreur = "05"
W_AidantErr = W_AidantPlg
W_DateErr = W_IndJour - 1 + DateDeb
i = 0
LOOP
i = i + 1
WHILE W_ListeErreurDuree<i> # "" 
	W_CleInterv = TabIntervPlg<W_IndAidantPlg + W_IndJour,4,W_ListeErreurDuree<i,2>>[1,26]
	W_HreFinInterv = TabIntervPlg<W_IndAidantPlg + W_IndJour,3,W_ListeErreurDuree<i,2>>
	W_HreDebFaite = W_ListeErreurDuree<i,3>
	W_HreFinFaite = W_ListeErreurDuree<i,4>
	GOSUB 610 
	W_Erreur = W_Libelle
	GOSUB 3000
REPEAT

RETURN

2000 ****************************************************************************
*			Gestion des interventions...				*
*********************************************************************************
W_DateDeb = DateDeb
W_DateFin = DateFin

ENR_TEMPO<-1> = "En 2000"
WRITE ENR_TEMPO ON F.TEMPO, "RapportMT"


W_DebPeriode = W_IndAidantPlg + W_DateDeb - DateDebProspSuppl + 1
W_FinPeriode = W_IndAidantPlg + W_DateFin - DateDebProspSuppl + 1

FOR W_IndJour = 1 TO NbJours
	W_CumulJourTlg = 0
	W_CumulJourPlg = 0
	W_ListeMOI = ""
	W_ListeErreurDuree = ""
	W_Exclu2000 = "F"
	i = 0
	LOOP
	i = i + 1
	WHILE TabIntervPlg<W_IndAidantPlg + W_IndJour,1,i> # ""
	   IF TabIntervPlg<W_IndAidantPlg + W_IndJour,1,i> = "Interv":TypeAct THEN
	    IF TabIntervTlg<W_IndAidantTlg + W_IndJour,1> = "" THEN
			GOSUB 420
			i = DCOUNT(TabIntervPlg<W_IndAidantPlg + W_IndJour,1>,CHAR(252)) + 1
			W_Exclu2000 = "V"
	    END ELSE
		k = 0
		W_Trouve= "F"
		LOOP
		   k = k + 1
		WHILE TabIntervTlg<W_IndAidantTlg + W_IndJour,1,k> # "" AND TabIntervTlg<W_IndAidantTlg + W_IndJour,2,k> <= TabIntervPlg<W_IndAidantPlg + W_IndJour,2,i> + EcartDeb AND W_Trouve = "F"
			IF TabIntervTlg<W_IndAidantTlg + W_IndJour,1,k> = TabIntervPlg<W_IndAidantPlg + W_IndJour,1,i> AND TabIntervTlg<W_IndAidantTlg + W_IndJour,4,k>[1,10] = TabIntervPlg<W_IndAidantPlg + W_IndJour,4,i>[1,10] AND ABS(TabIntervTlg<W_IndAidantTlg + W_IndJour,2,k> - TabIntervPlg<W_IndAidantPlg + W_IndJour,2,i>) <= EcartDeb THEN
				W_Trouve = "V"
				TabIntervTlg<W_IndAidantTlg + W_IndJour,8,k> = "1"
				W_CumulJourTlg = W_CumulJourTlg + INT(TabIntervTlg<W_IndAidantTlg + W_IndJour,5,k> * 0.6 + 1/2)
				IF ABS(TabIntervTlg<W_IndAidantTlg + W_IndJour,5,k> - TabIntervPlg<W_IndAidantPlg + W_IndJour,5,i>) > EcartInterv THEN
					* Erreur sur dure Interv....
					W_ListeErreurDuree<-1> = (INT(TabIntervTlg<W_IndAidantTlg + W_IndJour,5,k>*0.6 +1/2) - INT(TabIntervPlg<W_IndAidantPlg + W_IndJour,5,i>*0.6 + 1/2)):CHAR(253):i:CHAR(253):TabIntervTlg<W_IndAidantTlg + W_IndJour,2,k>:CHAR(253):TabIntervTlg<W_IndAidantTlg + W_IndJour,3,k>
				END
			END
		REPEAT
		IF W_Trouve = "F" THEN
			* Erreur type "Intervention prvue non effectue...
			GOSUB 410
		END
		W_CumulJourPlg = W_CumulJourPlg + INT(TabIntervPlg<W_IndAidantPlg + W_IndJour,5,i>* 0.6 + 1/2)
	    END
	   END ELSE
		IF TabIntervPlg<W_IndJour,1,i> = "MOI" THEN
			k = 0
			W_Trouve= "F"
			LOOP
			   k = k + 1
			WHILE TabIntervTlg<W_IndAidantTlg + W_IndJour,1,k> # "" AND TabIntervTlg<W_IndAidantTlg + W_IndJour,2,k> <= TabIntervPlg<W_IndAidantPlg + W_IndJour,3,i> AND W_Trouve = "F"
				IF TabIntervTlg<W_IndAidantTlg + W_IndJour,2,k> < TabIntervPlg<W_IndAidantPlg + W_IndJour,3,i> AND TabIntervTlg<W_IndAidantTlg + W_IndJour,3,k> > TabIntervPlg<W_IndAidantPlg + W_IndJour,2,i>[1,10] THEN
					W_Trouve = "V"
					* Erreur MOI non effectue....
					W_ListeMoi = W_ListeMoi:TabIntervPlg<W_IndAidantPlg + W_IndJour,4,i>[1,14]:";"		
				END
			REPEAT		   
		END ELSE
			* Abs, indispo, .. => Rien !!!
	   	END
	   END
	REPEAT

	IF W_Exclu2000 = "F" THEN
	  * Nb : on peut avoir eu un msg "aidant absent" => ne rien faire !!!


	  * Traitement des interventions effectues non prvues
	  GOSUB 510	
	
	  IF W_ListeMOI # "" THEN
		* Traitement des MOI non effectues
		GOSUB 700
	  END

	  IF W_ListeErreurDuree # "" THEN
		GOSUB 800
	  END

	  IF ABS(W_CumulJourTlg - W_CumulJourPlg) > EcartJournee THEN
		* Erreur type ecart sur dure globale
		
		W_CodeErreur = "06"
		W_AidantErr = W_AidantPlg
		W_DateErr = W_IndJour - 1 + DateDeb
		W_Temp1 = INT(W_CumulJourTlg/60)
		W_Temp2 = W_CumulJourTlg - (W_Temp1 * 60)
		*W_Temp2 = INT(W_Temp2 * 0.6 + 1/2)
		W_Erreur = ""
		IF W_Temp1 # 0 THEN
		W_Erreur = W_Temp1:" heures"
		END
		IF W_Temp2 # 0 THEN
			IF W_Temp1 # 0 THEN
				W_Erreur = W_Erreur:" et ":W_Temp2"R%2":" minutes effectues pour "
			END ELSE
				W_Erreur = W_Temp2"R%2":" minutes effectues pour "
			END
		END ELSE
			W_Erreur = W_Erreur:" effectues pour "
		END
		
		W_Temp1 = INT(W_CumulJourPlg/60)
		W_Temp2 = W_CumulJourPlg - (W_Temp1 * 60)
		*W_Temp2 = INT(W_Temp2 * 0.6 + 1/2)
		IF W_Temp1 # 0 THEN
			W_Erreur = W_Erreur:W_Temp1:" heures"
		END ELSE
			IF W_Temp2 # 0 THEN
				* rien
			END ELSE
				W_Erreur = W_Erreur:"aucune heure prvue."
			END
		END
		IF W_Temp2 # 0 THEN
			IF W_Temp1 # 0 THEN
				W_Erreur = W_Erreur:" et ":W_Temp2"R%2":" minutes prvues."
			END ELSE
				W_Erreur = W_Erreur:W_Temp2"R%2":" minutes prvues."
			END		
		END ELSE
			IF W_Temp1 # 0 THEN
				W_Erreur = W_Erreur:" prvues."
			END
		END
 
		GOSUB 3000

	  END
	END
NEXT W_IndJour
RETURN

3000 **************************************************************************
*			Etablissement du rapport d'erreurs					*
*******************************************************************************
IF W_AidantErr # W_DernierAidantErr OR W_DateErr # W_DerniereDateErr THEN 
	IF ENR_ANOMALIE # "" THEN
		GOSUB 5200
		WRITE ENR_ANOMALIE ON F.ANOMALIESTLG, W_DernierAidantErr:W_DerniereDateErr:TypeAct:User
	END
	ENR_ANOMALIE = ""
	W_DernierAidantErr = W_AidantErr
	W_DerniereDateErr = W_DateErr
END
IF W_CodeErreur = "02" OR W_CodeErreur = "03" THEN
	ENR_ANOMALIE<-1> = W_CodeErreur:CHAR(253):W_Erreur:CHAR(253):W_CodeAide3000:CHAR(253):W_HreDeb3000
END ELSE
	ENR_ANOMALIE<-1> = W_CodeErreur:CHAR(253):W_Erreur
END
RETURN

110 ***************************************************************************
*					SubRoutine AffichePlanning				*
*******************************************************************************

DateDebProspSuppl = DateDeb
DateFinProspSuppl = DateFin + 1
W_TrtHresSuppl = "F"

W_CleRetour = User:TIME()

IF Selection # "" THEN
	W_ParamAffichePlanning = "AFFICHEPLANNING |":W_CleRetour:"|":Asso:"|":TypeAct:"|":DateDebProspSuppl:"|":DateFinProspSuppl:"|":Tri:"|":Selection:"||BASCULPAIE|||"
END ELSE
* On ne fait pas le tri ici (bcp plus simple en algo : le tri se fera sur le fichier de sortie...)
	W_ParamAffichePlanning = "AFFICHEPLANNING |":W_CleRetour:"|":Asso:"|":TypeAct:"|":DateDebProspSuppl:"|":DateFinProspSuppl:"||||BASCULPAIE|||"
END
EXECUTE W_ParamAffichePlanning
READ TabIntervPlg FROM F.TPSTEMPO, "AFFICHEPLANNING":W_CleRetour ELSE
 TabIntervPlg = ""
 TabIntervPlg<1> = "Erreur"	
END
*CALL AFFICHEPLANNING(RETURNVAL,W_ParamAffichePlanning,TabIntervPlg)

IndiceDepartInterventions = DateDeb - DateDebProspSuppl 

* Nb : dans la suite du programme, les interventions de la periode sont dans TabIntervPlg a partir 
* de l'indice [Rang ligne "#Interv[CodeAidant] + IndiceDepartInterventions + 1 inclus
* jusqu' l'indice [Rang ligne "#IntervCodeAidant] + IndiceDepartInterventions + NbJours inclus

IF TabIntervPlg<1>[1,6] = "Erreur" THEN
	W_Sortie = "Aucune intervention correspondant  la slection." 
END

DELETE F.TPSTEMPO, "AFFICHEPLANNING":W_CleRetour 

RETURN


111 ***************************************************************************
*					SubRoutine IntegreSolem               *
*******************************************************************************

DateDebProspSuppl = DateDeb
DateFinProspSuppl = DateFin + 1
W_TrtHresSuppl = "F"

IndiceDepartInterventions = DateDeb - DateDebProspSuppl 
Periode = ""
W_Param<1>=User
W_Param<2>=Asso
W_Param<3>=TypeAct
W_Param<4>=Periode
IF Selection # "" THEN
	W_Param<5>=Tri
	W_Param<6>=Selection
END ELSE
	W_Param<5>=""
	W_Param<6>=""
END
W_Param<7>="1"
W_Param<8>="0"
W_Param<9>="1"
W_Param<10>="0"
W_Param<11>=NomFichierTlg
W_Param<12>=SystemeTlg
W_Param<13>=DateDeb
W_Param<14>=DateFin

ENR_TEMPO<-1> = "Parametres"
ENR_TEMPO<-1> = W_Param
WRITE ENR_TEMPO ON F.TEMPO, "RapportMT"

CALL INTEGRESOLEM(RETURNVAL,W_Param,TabIntervTlg)

ENR_TEMPO<-1> = "Appelle : "
ENR_TEMPO<-1> = TabIntervTlg
WRITE ENR_TEMPO ON F.TEMPO, "RapportMT"


IF TabIntervTlg = "Erreur" THEN
	W_Sortie = "Fichier de tlgestion introuvable." 
END

RETURN

5000 ********************************************************************
*		Rassemblement et renvoi des anomalies...				*
*************************************************************************
W_Temp = 'SELECT ANOMALIESTLG = "[':User:'" AVEC DateInterv <= "':DateFin:'" AND >= "':DateDeb:'"'
IF Tri # "" THEN
   IF Selection = "" THEN
	IF Tri = "S" THEN
		W_Temp = W_Temp:' PAR Secteur'
	END ELSE
		W_Temp = W_Temp:' PAR Commune'
	END	
   END ELSE
	
   END
END
W_Temp= W_Temp:' PAR NomPrenomAidant'

EXECUTE W_Temp

W_IndSortie = 1
W_DernAidant = ""
W_DernTri = ""
W_Fin = "F"
LOOP
READNEXT W_Cle ELSE W_Fin = "V"
WHILE W_Fin = "F"
   READ ENR_ANOMALIE FROM F.ANOMALIESTLG, W_Cle THEN
	IF W_Cle[1,5] # W_DernAidant THEN
	   W_DernAidant = W_Cle[1,5]
	   READ ENR_CIVILAIDANT FROM F.CIVILAIDANT, W_Cle[1,5] THEN
		IF Tri = "S" THEN
		   IF ENR_CIVILAIDANT<31> # W_DernTri THEN
			W_DernTri = ENR_CIVILAIDANT<31>
			READ ENR_SECTEUR FROM F.SECTEUR, W_DernTri ELSE ENR_SECTEUR = ""
			W_Sortie<W_IndSortie> = "Secteur          : ":W_DernTri:" ":ENR_SECTEUR<1>
			W_IndSortie = W_IndSortie + 1 
		   END
		END ELSE
		   IF Tri = "C" THEN
		     IF ENR_CIVILAIDANT<11> # W_DernTri THEN
			W_DernTri = ENR_CIVILAIDANT<11>
			W_Sortie<W_IndSortie> = "Commune          : ":W_DernTri
			W_IndSortie = W_IndSortie + 1 
		     END
		   END
		END		
	   END ELSE
		ENR_CIVILAIDANT = ""
	   END
	   W_Sortie<W_IndSortie> = "Aidant ":W_Cle[1,5]:" ":ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
	   W_IndSortie = W_IndSortie + 1 
	END
	W_Sortie<W_IndSortie> = "  Le ":OCONV(W_Cle[6,5],"D4/"):" : " 
	W_IndSortie = W_IndSortie + 1 
	W_DernMotif = ""
	i = 0
	LOOP
	i = i + 1
	WHILE ENR_ANOMALIE<i> # ""
		IF ENR_ANOMALIE<i,1> # W_DernMotif THEN
		    BEGIN CASE
			CASE ENR_ANOMALIE<i,1> = "02"	  
			   W_Sortie<W_IndSortie> = "     Interventions prvues non effectues : " 
			   W_IndSortie = W_IndSortie + 1 
			CASE ENR_ANOMALIE<i,1> = "03"
			   W_Sortie<W_IndSortie> = "     Interventions effectues non prvues : " 
			   W_IndSortie = W_IndSortie + 1 
			CASE ENR_ANOMALIE<i,1> = "07"
			   W_Sortie<W_IndSortie> = "     Ecart sur dbut d'intervention : " 
			   W_IndSortie = W_IndSortie + 1 
			CASE ENR_ANOMALIE<i,1> = "04"
			   W_Sortie<W_IndSortie> = "     Interventions sur MOI : " 
			   W_IndSortie = W_IndSortie + 1 
			CASE ENR_ANOMALIE<i,1> = "05"
			   W_Sortie<W_IndSortie> = "     Ecart sur la dure de l'intervention : " 
			   W_IndSortie = W_IndSortie + 1 
			CASE ENR_ANOMALIE<i,1> = "06"
			   W_Sortie<W_IndSortie> = "     Ecart global : " 
			   W_IndSortie = W_IndSortie + 1 
			CASE ENR_ANOMALIE<i,1> = "01"
			   *W_Sortie<W_IndSortie> = "     ":ENR_ANOMALIE<i,2>
			   *W_IndSortie = W_IndSortie + 1 
			   *i = DCOUNT(ENR_ANOMALIE,CHAR(254)) + 1
		    END CASE 
		END		
		W_DernMotif = ENR_ANOMALIE<i,1>
		IF (W_DernMotif > "01" AND W_DernMotif < "06") OR W_DernMotif = "07" THEN
			W_Sortie<W_IndSortie> = "      - ":ENR_ANOMALIE<i,2>
		END ELSE
		   IF W_DernMotif = "01" THEN
			W_Sortie<W_IndSortie> = "     ":ENR_ANOMALIE<i,2>	
		   END ELSE
			W_Sortie<W_IndSortie> = "        ":ENR_ANOMALIE<i,2>
		   END
		END
	   	W_IndSortie = W_IndSortie + 1 
	REPEAT
	
   END
REPEAT

RETURN

5100 **************************************************************************
*				Apuration fichier ANOMALIESTLG				*
*******************************************************************************
W_Temp = 'SELECT ANOMALIESTLG = "[':User:'"'

EXECUTE W_Temp

W_Fin = "F"
LOOP
READNEXT W_Cle ELSE W_Fin = "V"
WHILE W_Fin = "F"
	DELETE F.ANOMALIESTLG, W_Cle
REPEAT

RETURN

5200 **************************************************************************
*	Gnrationtion anomalies de type "Ecart sur dbut d'intervention"		*
*******************************************************************************
W_IndInsert5200 = 0
W_Indice02 = 0
W_Indice03 = 0
LOOP
W_IndInsert5200 = W_IndInsert5200 + 1
WHILE ENR_ANOMALIE<W_IndInsert5200,1> <= "04" AND ENR_ANOMALIE<W_IndInsert5200,1> # ""
	IF ENR_ANOMALIE<W_IndInsert5200,1> = "02" AND W_Indice02 = 0 THEN
		W_Indice02 = W_IndInsert5200
	END
	IF ENR_ANOMALIE<W_IndInsert5200,1> = "03" AND W_Indice03 = 0 THEN
		W_Indice03 = W_IndInsert5200
	END
REPEAT
W_Type5200 = ""
FOR i5200 = W_Indice02 TO W_Indice03-1
   IF ENR_ANOMALIE<i5200,1>="02" THEN
	W_Type5200<1> = ENR_ANOMALIE<i5200,3>
	W_Type5200<2> = ENR_ANOMALIE<i5200,4>
	FOR k5200 = W_Indice03 TO W_IndInsert5200-1
		IF W_Type5200<1> = ENR_ANOMALIE<k5200,3> THEN
			GOSUB 5300
			ENR_ANOMALIE = INSERT(ENR_ANOMALIE,W_IndInsert5200;"07":CHAR(253):W_Lib5300)
			W_IndInsert5200 = W_IndInsert5200 + 1
			DEL ENR_ANOMALIE<k5200>
			DEL ENR_ANOMALIE<i5200>
			W_IndInsert5200 = W_IndInsert5200 - 2
			W_Indice03 = W_Indice03 - 1		
			i5200 = i5200 - 1
			k5200 = W_IndInsert5200 + 1
		END
	NEXT k5200
   END
NEXT i5200
RETURN

5300 **************************************************************************
*				Construction du libell anomalie				*
*******************************************************************************
W_LibTemp5300 = "C"
i5300 = INDEX(ENR_ANOMALIE<i5200,2>,"chez",1)
W_LibTemp5300 = W_LibTemp5300:ENR_ANOMALIE<i5200,2>[i5300+1,LEN(ENR_ANOMALIE<i5200,2>)-i5300]:"  ":ENR_ANOMALIE<k5200,4>:" au lieu de ":ENR_ANOMALIE<i5200,4>
W_Lib5300 = W_LibTemp5300
RETURN
