**********************************************************
*  IMPORTATION DES DONNEES DE POINTAGE FOURNIT PAR DOMITIME
*  GREGORY
**********************************************************

**********************************************************
* Ouvertures des fichiers
* Modif Greg - 03/10/11 - DA11081 - Le PR devient une subroutine.
SUBROUTINE IMPORTPOINTAGE(RETURNVAL,PARAMETRES,W_Sortie)
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"

W_NomFichierVB=PARAMETRES<1>
IF W_NomFichierVB=0 THEN W_NomFichierVB=""

OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE RETURN
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE RETURN
OPEN "","CIVILAIDE" TO F.CIVILAIDE ELSE RETURN
OPEN "","TELEPHONE" TO F.TELEPHONE ELSE RETURN
OPEN "","ACTIVITESBISAIDE" TO F.ACTIVITESBISAIDE ELSE RETURN
OPEN "","ACTIVITESAIDE" TO F.ACTIVITESAIDE ELSE RETURN
OPEN "","CONTRAT" TO F.CONTRAT ELSE RETURN
OPEN "","TLGHISTORPOINTAGE" TO F.TLGHISTORPOINTAGE ELSE RETURN
OPEN "","TLGIMPORT" TO F.TLGIMPORT ELSE RETURN
OPEN "","TLGANOPOINTAGE" TO F.TLGANOPOINTAGE ELSE RETURN
OPEN "","TLGPOINTAGE" TO F.TLGPOINTAGE ELSE RETURN
OPEN "","TLGHISTORMOI" TO F.TLGHISTORMOI ELSE RETURN
OPEN "","TLGANOMOI" TO F.TLGANOMOI ELSE RETURN
OPEN "","TLGMOI" TO F.TLGMOI ELSE RETURN
OPEN "","DOMITIMEPARAMINTGR" TO F.DOMITIMEPARAMINTGR ELSE RETURN
OPEN "","DOMITIMEDROITS" TO F.DOMITIMEDROITS ELSE RETURN
OPEN "","DOMIRECUP" TO F.DOMIRECUP ELSE RETURN
OPEN "","DOMIHISTORRECUP" TO F.DOMIHISTORRECUP ELSE RETURN
OPEN "","DOMIRAPPORTS" TO F.DOMIRAPPORTS ELSE RETURN
OPEN "","DOMILISTES" TO F.DOMILISTES ELSE RETURN
OPEN "","TPSTEMPO" TO F.TPSTEMPO ELSE RETURN
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE RETURN
OPEN "","TEMPO" TO F.TEMPO ELSE RETURN
OPEN "","TPSDETAILSINTERV" TO F.TPSDETAILSINTERV ELSE RETURN
OPEN "","ACTIVITES" TO F.ACTIVITES ELSE RETURN
OPEN "","TLGPARAM" TO F.TLGPARAM ELSE RETURN
OPEN "","PERIODESPAIE" TO F.PERIODESPAIE ELSE RETURN
OPEN "","TLGVERIFPLG" TO F.TLGVERIFPLG ELSE RETURN
OPEN "","TABLES" TO F.TABLES ELSE RETURN
* Modif Greg - 24/09/15
OPEN "","TLGPOINTAGESUPPR" TO F.TLGPOINTAGESUPPR ELSE RETURN
OPEN "","TLGMOISUPPR" TO F.TLGMOISUPPR ELSE RETURN

W_IndTrace=0
W_IndJournal=0
ENR_DOMIRAPPORTS=""
READ ENR_DOMIRAPPORTS FROM F.DOMIRAPPORTS, "NomJournal" THEN
	W_NomJournal=ENR_DOMIRAPPORTS<1>[2,LEN(ENR_DOMIRAPPORTS)-2]
	READ ENR_JOURNAL FROM F.DOMIRAPPORTS, W_NomJournal ELSE ENR_JOURNAL=""
	W_IndJournal=DCOUNT(ENR_JOURNAL,CHAR(254))
	EXECUTE 'DELETE DOMIRAPPORTS NomJournal'
END ELSE
	W_NomJournal=""
	ENR_JOURNAL=""
END

* Modif Greg - 13/09/13
W_EcartDuree=""
READ ENR_TLGPARAM FROM F.TLGPARAM, "ECARTDUREE" THEN
	* La donne doit tre indique en centime dans le fichier
	W_EcartDuree=ENR_TLGPARAM<1> "R%4"
END
IF W_EcartDuree="0000" THEN W_EcartDuree=""

* Modif Greg - 03/10/11 - Passage en subroutine.
* Si le prog est appel avec en paramtre un nom de fichier,
* c'est qu'on doit traiter un seul aidant, de la manire la plus simple.
* Donc tous les " cts" ne doivent pas tre lancs.
IF W_NomFichierVB="" THEN
	READ ENR_TLGPARAM FROM F.TLGPARAM, "DEDUCAUTO" THEN
		W_LancerDeducAuto=ENR_TLGPARAM(1)
	END ELSE
		W_LancerDeducAuto="N"
	END
END ELSE
	W_LancerDeducAuto="N"
END

* Modif Greg - 03/04/12 - En regardant comment faire une modif dans la sub 19, j'ai vu que la lecture
* du fichier ASSOCIATION se fait  chaque ligne des fichiers Tra dans le systme Penbase. Je dplace
* la ligne ici. Elle sera excute pour tous les systmes, mais la lecture se fera une seule, ce qui
* est plus optimis que de la faire autant de fois qu'on a de lignes.
READ ENR_ASSOCIATION FROM F.ASSOCIATION, "001" ELSE ENR_ASSOCIATION=""
* J'initialise galement une nouvelle variable.
W_SysPenbase="NON"

* Modif Greg - 24/08/15 - Corbeil n'utilise pas le contrleur d'effectivit. Mais  les intresse.
* Aprs discussion, une amlioration est  faire pour optimiser le contrleur : la gnration des
* plannings se fait la veille ou le matin (le matin chez eux,  4h30). Chez eux, la rcupration
* de la tlgestion se fait uniquement le soir. Actuellement, cela signifie que la comparaison se
* fait avec les plannings tels qu'ils taient le matin  4h30.
* L'optimisation consiste  gnrer les plannings juste avant le traitement de la tlgestion.
* On est alors sr d'avoir les plannings le plus  jour possible, puisque le programme aura les
* modifs faites dans la journe.
IF ENR_ASSOCIATION<14>="785183922" THEN
	GOSUB 99999
END

W_SysEdenred="NON"
READ ENR_TABLES FROM F.TABLES, "TELEGESTION" THEN
	FOR I = 1 TO DCOUNT(ENR_TABLES<2>,CHAR(253))
		IF ENR_TABLES<2,I>="06" THEN
			IF INDEX(ENR_TABLES<3,I>,"EDENRED",1)>0 THEN
				W_SysEdenred="OUI"
			END
		END
	NEXT I
END


* Modif Greg - 03/10/11 - Passage en subroutine.
* Si le prog est appel avec en paramtre un nom de fichier,
* c'est qu'on doit traiter un seul aidant, de la manire la plus simple.
* Donc tous les " cts" ne doivent pas tre lancs.
IF W_NomFichierVB="" THEN
	READ ENR_TLGPARAM FROM F.TLGPARAM, "HEURELIMITEVERIF" THEN
		W_LancerTlgVerifPlg=ENR_TLGPARAM<3>
	END ELSE
		W_LancerTlgVerifPlg="N"
	END
END ELSE
	W_LancerTlgVerifPlg="N"
END

* Modif Greg - 27/05/13 - On  rcupre la liste des activits paramtres dans LogisFil.
* De cette manire, lorsqu'on va tenter de dterminer l'activit d'une intervention, on
* pourra se limiter aux activits paramtres et viter ainsi des anomalies (cas rencontr
*  Beauvais : beaucoup d'aids ont 2 activits prestataires et  gnre beaucoup d'anomalies,
* alors qu'une seule activit est utilise en tlgestion).
TAB_LISTEACT=""
FOR I = 1 TO 20
	READ ENR_DOMITIMEPARAMINTGR FROM F.DOMITIMEPARAMINTGR, I"R%3" THEN
		FOR J = 1 TO DCOUNT(ENR_DOMITIMEPARAMINTGR<1>,CHAR(253))
			TAB_LISTEACT<-1>=ENR_DOMITIMEPARAMINTGR<1,J>
		NEXT J
	END
NEXT I
* Fin modif Greg - 27/05/13

* Les 2 variables suivantes sont utilises pour stocker la date la plus ancienne des interventions
* traites et la date la plus rcente. En gnral il y a une seule journe, mais l'exprience montre
* que parfois le serveur DOMITIME loupe des jours et on peut alors avoir en une journe des interventions
* des jours prcdents.
W_DateDebPeriode=""
W_DateFinPeriode=""

W_HeureTrt=TIMEDATE()
W_HeureTrt=W_HeureTrt[1,2]:'H':W_HeureTrt[4,2]

W_DateTrt=DATE()

ENR_HEURE=""
W_IndTrace=W_IndTrace+1
ENR_HEURE<W_IndTrace>=TIMEDATE():" - Dbut du programme"
WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"

W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>=TIMEDATE():" - Dmarrage du programme"

* Modif Greg - 13/04/11 - La rcupration se fera dsormais plusieurs fois par jour, pas seulement 2.
* L'algo suivant n'a donc plus lieu d'tre et doit tre remplac par un algo tenant compte simplement
* de l'heure d'excution.
*IF ENR_HEURE<1>[1,8]<"21:00:00" THEN
*	W_HeureImport="1210"
*	W_IndJournal=W_IndJournal+1
*	ENR_JOURNAL<W_IndJournal>=TIMEDATE():" - Traitement de mi-journe"
*END ELSE
*	W_HeureImport="2200"
*	W_IndJournal=W_IndJournal+1
*	ENR_JOURNAL<W_IndJournal>=TIMEDATE():" - Traitement du soir"
*END

W_HeureImport=ENR_HEURE<1>[1,2]:ENR_HEURE<1>[4,2]
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>=TIMEDATE():" - Traitement de ":ENR_HEURE<1>[1,5]
* Fin modif Greg - 13/04/11

*********************************************************
* Initialisation des variables

ENR_CIVILAIDANT=""
ENR_TELEPHONE=""
ENR_ACTIVITESBISAIDES=""
ENR_ACTIVITESAIDE=""
ENR_CONTRAT=""
ENR_TLGHISTORPOINTAGE=""
ENR_TLGIMPORT=""
ENR_TLGANOPOINTAGE=""
ENR_TLGPOINTAGE=""
ENR_TLGHISTORMOI=""
ENR_TLGANOMOI=""
ENR_TLGMOI=""
ENR_DOMIPARAMINTGR=""
ENR_DOMIDROITS=""
ENR_DOMIRECUP=""
ENR_DOMIHISTORRECUP=""
ENR_TEMPO=""
ENR_RUBSAISIE=""
ENR_TEMPO=""
ENR_DEDUCTIONS=""
ENR_TPSDETAILSINTERV=""
ENR_ACTIVITES=""

ENR_DEDUCTIONS<-1>='AidantDomi;AideDomi;DateDomi;HreDebDomi;HreFinDomi;Deduction;AidantPlg;AidePlg;JourPlg;HreDebPlg;HreFinPlg'

ENR_ASSO=""
W_TabAsso=""
TAB_JOURNAL=""
FOR I = 1 TO 50
	TAB_JOURNAL<I>=0
NEXT I

* Le tableau suivant est le tableau qui sera renseign
* avec les donnes de la ligne en cours de traitement
* dans le fichier de DOMITIME.
TAB_LIGNE=""

W_IndLigne=0

* Une transaction pouvant avoir plusieurs anomalies, un tableau est utilis pour stocker les codes de celles-ci.
W_IndAno=0
Tab_Ano=""

W_CodeAide=""

I=0
J=0

W_RequetePointage=""
W_ReqTlgImport=""
W_ReqActivitesAideTlg=""
W_ReqContratTlg=""
W_ReqTlgAno=""

W_Activite=""

W_CleTpsDetailsInterv=""
W_TrtDeducAuto="NON"

*********************************************************
*
* CODES ANOMALIE (pointages):
*	BLOQUANT :
*		1 -> Numro de tlphone de la transation non trouv sous INFOLOGIS
*		2 -> Plusieurs aids trouvs pour le numro de tlphone de la transaction
*		3 -> Code rejet gnr par DOMITIME : code aidant mal saisi
*		4 -> Aidant inexistant sous INFOLOGIS
*		5 -> Transaction d'arrive sans transaction de dpart correspondante
*		6 -> Transaction de dpart sans transaction d'arrive correspondant
*		7 -> Code rejet gnr par Domitime : raccroch avant la fin
*
*	NON BLOQUANT :
*		1 -> Ce code ne devrait plus avoir lieu d'tre.
*				Il s'agissait dans une premire analyse du code indiquant
*				qu'une transaction n'avait pas de correspondance pour "crer" une intervention.
*				Ce cas a t modifi par la suite pour devenir les codes ano 5 et 6 des codes bloquant
*		2 -> Pas d'activit active pour l'aid
*		3 -> Plusieurs activits actives pour l'aid
*		4 -> Pas de contrat pour l'aidant
*		5 -> Pas d'activit commune entre l'aidant et l'aid
*		6 -> Plusieurs activits communes entre l'aidant et l'aid
*
*
* CODES REJET DOMITIME
*	1 -> (NB) D'aprs DOMITIME, nous ne devrions pas rencontrer ce code
*	2 -> (B)  Code aidant incorrect
*	3 -> (B)  Raccrocher au moment de dire s'il s'agissait d'une transaction d'arrive ou de dpart
*	4 -> (NB) Raccrocher au moment d'indiquer les rubriques
*	5 -> (NB) D'aprs DOMIPHONE, nous ne devrions pas rencontrer ce code
*	6 -> (NB) D'aprs DOMIPHONE, nous ne devrions pas rencontrer ce code 
*	7 -> (NB) D'aprs DOMIPHONE, nous ne devrions pas rencontrer ce code
*	8 -> (NB) D'aprs DOMIPHONE, nous ne devrions pas rencontrer ce code
*	9 -> (NB) Problme technique de la part de DOMITIME. Appel mal termin.
*
*
*
* CODES ANOMALIES (MOI) :
*	1 -> Numro de transaction non trouv dans TLGPOINTAGE (la transaction n'est donc pas une transaction valide)
*	2 -> La rubrique saisie n'est pas paramtre sous INFOLOGIS
*	3 -> La rubrique est paramtre sous INFOLOGIS comme n'tant pas  utiliser
*
*********************************************************

*********************************************************
* MODIF : Le rpertoire o se situe le fichier est RECUP, se 
*		trouvant lui-mme dans le rpertoire DOMITIME. Dans le VOC,
*		nous avons un rpertoire DOMITIME classique, et un autre 
*		appel DOMIRECUP ayant pour chemin DOMITIME\RECUP, avec le dict
*		du premier rpertoire.
*		Pour rcup le nom du fichier, nous devons faire un select sur
*		domirecup et traiter le fichier (la cl). Ceci et facilit par la
*		nomenclature des noms des fichiers domitime qui est date+heure sous la forme
*		aammjjhhmm (+ l'extension : .tra pour les transactions et .rub pour les rubriques)
*
* ATTENTION : il a t dcid de faire en sorte que le programme boucle tant qu'il y a des fichiers  traiter.
*		Pour cela, nous crons une sub 1 juste avant les select pour recup les noms de fichier.
*		Ds que le programme est finit, plutot que de faire le STOP habituel, nous appelons la sub 1.
*
* NB : Ds que les fichiers sont lus, on les historise dans HISTORRECUP et on supprime le fichier de RECUP.
*****************************
1

W_NomFichier=""

W_IndTrace=W_IndTrace+1
ENR_HEURE<W_IndTrace>=TIMEDATE():" - SELECT des fichiers *.tra"
WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"

W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>=TIMEDATE():" - Slection des fichiers de pointages"

W_ReqDomiRecup=""
* Modif Greg - 03/10/11 - Passage en subroutine.
* Si le prog est appel avec en paramtre un nom de fichier,
* c'est qu'on doit traiter un seul aidant.
IF W_NomFichierVB="" THEN
	EXECUTE 'SELECT DOMIRECUP AVEC @ID = "[.tra" AND <> "[ ]" OR AVEC @ID = "[.Tra" AND <> "[ ]" PAR @ID'
END ELSE
	EXECUTE 'SELECT DOMIRECUP AVEC @ID = "[.tra" AND <> "[ ]" AND = "':W_NomFichierVB:']" OR AVEC @ID = "[.Tra" AND <> "[ ]" AND = "':W_NomFichierVB:']" PAR @ID'
END

EXECUTE 'SAUVE-LISTE W_ReqDomiRecup'
EXECUTE "LISTE W_ReqDomiRecup" RETURNING MSGCODE

IF MSGCODE<1> # 209 THEN
	SELECT F.DOMIRECUP TO W_ReqDomiRecup
	READNEXT W_NomFichier FROM W_ReqDomiRecup ELSE PRINT "ERREUR FICHIER DE TRANSACTIONS"
END

GOSUB 3
RETURN
*****************************
2

W_NomFichier2=""

W_IndTrace=W_IndTrace+1
ENR_HEURE<W_IndTrace>=TIMEDATE():" - SELECT des fichiers *.rub"
WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"

W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>=TIMEDATE():" - Slection des fichiers de MOI"

W_ReqDomiRecup=""
* Modif Greg - 03/10/11 - Passage en subroutine.
* Si le prog est appel avec en paramtre un nom de fichier,
* c'est qu'on doit traiter un seul aidant.
IF W_NomFichierVB="" THEN
	EXECUTE 'SELECT DOMIRECUP AVEC @ID = "[.rub" AND <> "[ ]" OR = "[.Rub" AND <> "[ ]" PAR @ID'
END ELSE
	EXECUTE 'SELECT DOMIRECUP AVEC @ID = "[.rub" AND <> "[ ]" AND = "':W_NomFichierVB:']" OR AVEC @ID = "[.Rub" AND <> "[ ]" AND = "':W_NomFichierVB:']" PAR @ID'
END
EXECUTE 'SAUVE-LISTE W_ReqDomiRecup'
EXECUTE "LISTE W_ReqDomiRecup" RETURNING MSGCODE

IF MSGCODE<1> # 209 THEN
	SELECT F.DOMIRECUP TO W_ReqDomiRecup
	READNEXT W_NomFichier2 FROM W_ReqDomiRecup ELSE PRINT "ERREUR FICHIER DE RUBRIQUES"
END

GOSUB 4
RETURN
*********************************************************
3

IF W_NomFichier#"" THEN
W_IndTrace=W_IndTrace+1
ENR_HEURE<W_IndTrace>=TIMEDATE():" - Lecture du fichier *.tra"
WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"

READ ENR_DOMIRECUP FROM F.DOMIRECUP, W_NomFichier THEN
	W_IndJournal=W_IndJournal+1
	ENR_JOURNAL<W_IndJournal>=TIMEDATE():" - Lecture et parcours du fichier de pointage : ":W_NomFichier
	
	* Modif Greg - DA11042
	* Calcul de l'heure limite de vrification.
	W_DateLimiteVerif=ICONV(W_NomFichier[5,2]:"/":W_NomFichier[3,2]:"/20":W_NomFichier[1,2],"D4/")
	W_HeureLimiteVerif=W_NomFichier[7,2]:":":W_NomFichier[9,2]
	READ ENR_TLGPARAM FROM F.TLGPARAM, "HEURELIMITEVERIF" THEN
		ENR_TLGPARAM<1>=W_DateLimiteVerif
		ENR_TLGPARAM<2>=W_HeureLimiteVerif
	END ELSE
		IF W_DateLimiteVerif>ENR_TLGPARAM<1> THEN
			ENR_TLGPARAM<1>=W_DateLimiteVerif
			ENR_TLGPARAM<2>=W_HeureLimiteVerif		
		END ELSE
			IF W_DateLimiteVerif=ENR_TLGPARAM<1> AND W_HeureLimiteVerif>ENR_TLGPARAM<2> THEN
				ENR_TLGPARAM<1>=W_DateLimiteVerif
				ENR_TLGPARAM<2>=W_HeureLimiteVerif
			END
		END
	END
	WRITE ENR_TLGPARAM ON F.TLGPARAM, "HEURELIMITEVERIF"
	* Fin Modif Greg - 17/05/11
	
	ENR_DOMIHISTORRECUP=ENR_DOMIRECUP
	EXECUTE "DELETE DOMIRECUP ":W_NomFichier
	WRITE ENR_DOMIHISTORRECUP ON F.DOMIHISTORRECUP, W_NomFichier
	W_IndTrace=W_IndTrace+1
	ENR_HEURE<W_IndTrace>=TIMEDATE():" - Parcours du fichier *.tra"
	WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"
	
	W_IndLigne=0
	LOOP
		W_IndLigne=W_IndLigne+1
	WHILE ENR_DOMIRECUP<W_IndLigne>#"" DO
		TAB_JOURNAL<12>=TAB_JOURNAL<12>+1
		* On lit les lignes une par une. A chaque fois,
		* afin de faciliter le traitement, on rcupre les
		* donnes dans un tableau. Les donnes sont spares
		* dans le fichier DOMITIME par des ";"
		TAB_LIGNE=""
		TAB_LIGNE<1>=FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",1)
		TAB_LIGNE<2>=FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",2)
		TAB_LIGNE<3>=FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",3)
		TAB_LIGNE<4>=FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",4)
		TAB_LIGNE<5>=FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",5)
		TAB_LIGNE<6>=FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",6)
		TAB_LIGNE<7>=FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",7)
		* Modif Greg - 07/03/13 - Evolution pour grer des commentaires fait lors de pointages
		TAB_LIGNE<8>=FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",8)
		* Modif Greg - 17/08/15 - Edenred envoie dsormais un type de correction. Dans l'immdiat, celui qui nous intresse est
		* la suppression : si Edenred nous indique que tel pointage doit tre supprim (parce qu'il l'a t dans leur outil), alors
		* il faut le supprimer galement de notre ct.
		TAB_LIGNE<9>=FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",9)
		
		* Modif Greg - 17/08/15 - Si le pointage est  supprimer, on le fait et on passe au suivant :
		* il ne faut surtout pas "retraiter" le pointage comme si on le recevait pour la premire fois.
		IF TAB_LIGNE<9>="SE" THEN
			EXECUTE "DELETE TLGIMPORT ":TAB_LIGNE<1>
			EXECUTE "DELETE TLGANOPOINTAGE ":TAB_LIGNE<1>
			EXECUTE "DELETE TLGANOMOI ":TAB_LIGNE<1>
			*EXECUTE "DELETE TLGHISTORPOINTAGE ":TAB_LIGNE<1>
			*EXECUTE "DELETE TLGHISTORMOI ":TAB_LIGNE<1>
			
			* Modif Greg - 24/09/15 - Il a t dcid de garder la trace des donnes supprimes.
			READ ENR_TLGHISTORPOINTAGESUPPR FROM F.TLGHISTORPOINTAGE, TAB_LIGNE<1> THEN
				ENR_TLGHISTORPOINTAGESUPPR<11>="1"
				ENR_TLGHISTORPOINTAGESUPPR<12>="EDENRED"
				ENR_TLGHISTORPOINTAGESUPPR<13>=DATE()
				ENR_TLGHISTORPOINTAGESUPPR<14>=TIMEDATE()[1,8]
				ENR_TLGHISTORPOINTAGESUPPR<15>="EDENRED"
				WRITE ENR_TLGHISTORPOINTAGESUPPR ON F.TLGHISTORPOINTAGE, TAB_LIGNE<1>
			END
			
			W_ReqSupp=""
			EXECUTE 'SSELECT TLGPOINTAGE AVEC 1 = "':TAB_LIGNE<1>:'" OR AVEC 2 = "':TAB_LIGNE<1>:'"'
			EXECUTE 'SAUVE-LISTE W_ReqSupp'
			EXECUTE "LISTE W_ReqSupp" RETURNING MSGCODE
		
			IF MSGCODE<1> # 209 THEN
				SELECT F.TLGPOINTAGE TO W_ReqSupp
		
				W_FiniSupp="FAUX"
				LOOP
					READNEXT W_CleTlgSupp FROM W_ReqSupp ELSE W_FiniSupp="VRAI"
				WHILE W_FiniSupp="FAUX" DO
					* Modif Greg - 24/09/15 - Il a t dcid de garder la trace des donnes supprimes.
					READ ENR_TLGPOINTAGESUPPR FROM F.TLGPOINTAGE, W_CleTlgSupp THEN
						WRITE ENR_TLGPOINTAGESUPPR ON F.TLGPOINTAGESUPPR, W_CleTlgSupp
					END
					READ ENR_TLGMOISUPPR FROM F.TLGMOI, W_CleTlgSupp THEN
						WRITE ENR_TLGMOISUPPR ON F.TLGMOISUPPR, W_CleTlgSupp
					END					
				
					EXECUTE "DELETE TLGPOINTAGE ":W_CleTlgSupp
					EXECUTE "DELETE TLGMOI ":W_CleTlgSupp
				REPEAT
			END
			
			EXECUTE "EFFACER-LISTE W_ReqSupp"
		END ELSE
			* Modif Greg - 06/09/12 - Pour Corbeil, on essaye de travailler avec Edenred.
			* Mais ils ont du mal  nous fournir des fichiers avec les formats de donne
			* demands :
			* - ils nous donnent les heures sans les secondes
			* - les codes aidants sont prvus sur 5, mais ils ne mettent pas les 0 devant.
			* Je met donc ici du code pour "forcer" le formatage. Pour les secondes le pb
			* c'est qu'on risque d'avoir des chevauchements (des aidants qui interviennent
			* des un couple pointe au milieu de l'intervention, souvent dans la mme minute).
			IF LEN(TAB_LIGNE<5>)=5 THEN TAB_LIGNE<5>=TAB_LIGNE<5>:":00"
			IF LEN(TAB_LIGNE<2>)<5 THEN TAB_LIGNE<2>=TAB_LIGNE<2> "R%5"
			* Fin modif Greg - 06/09/12
			
			* Modif Greg - 28/10/15 - L'ASMAD nous a remont un problme : ils avaient des pointages manquants. Or ils utilisent
			* Penbase et thoriquement il n'est possible d'avoir des pointages manquants : lorsque l'utilisateur pointe, le systme
			* vrifie que c'est compatible avec le pointage prcdent. Si la salarie pointe une arrive et que le pointage prcdent
			* est dj une arrive, le systme prvient l'utilisateur, qui est alors oblig de pointer un dpart avant de pointer
			* l'arrive qu'il dsire. Dans donc LogisFil, on a donc soit une intervention complte, soit pas d'intervention du tout.
			* Mais pas un dbut sans fin ou une fin sans dbut.
			* Aprs recherche, il a t trouv des pointages qui sont reus sans code aid. La zone est compltement vide.
			* Dans l'algo, cela fait qu'on ne traite pas du tout la ligne.
			* Le problme va tre remont  Penbase (car ce n'est tout de mme pas normal de ne pas avoir de code aid).
			* Mais en attendant, il a t dcid de grer le cas.
			* L'anomalie "Aid incorrect" n'existe pas. On pourrait facilement la mettre en place dans ce PR, mais il faudrait ensuite
			* la grer dans le VB, ce qui implique de refaire l'ocx et mettre  jour tous les postes, ce qui n'est pas pratique du tout.
			* Le problme n'tant pas cens durer, on va se contenter de remonter une anomalie de numro de tlphone inconnu.
			* Donc arriv ici, si on a pas de code aid, on met une chaine de 10 zro. La ligne sera traite, on tentera de lire le
			* numro de tlphone, qui ne sera pas trouv et l'anomalie sera gnre.
			IF TAB_LIGNE<3>="" THEN TAB_LIGNE<3>="0000000000"
			* Fin modif Greg - 28/10/15
			
			* Modif Greg - 17/11/11 - Si on a un code aidant sur 5 caractres
			* (ce qui est prvu  cette date pour le systme Penbase), on
			* le convertit au format LogisFil.
			IF LEN(TAB_LIGNE<2>)=5 THEN
				* Modif Greg - 03/04/12 - A cette date, on considre que si
				* on a un code aidant sur 5 caractres, c'est forcment le systme Penbase.
				W_SysPenbase="OUI"
				TAB_LIGNE<2>=ENR_ASSOCIATION<39>:TAB_LIGNE<2>
				TAB_LIGNE<2>=TAB_LIGNE<2>:MOD(TAB_LIGNE<2>,7)
			END
			
			* Modif - Greg - 19/05/09 - On vrifie que le pointage n'a pas dj t
			* intgr, pour viter de l'intgrer une deuxime fois.
			READ ENR_TLGHISTORPOINTAGE FROM F.TLGHISTORPOINTAGE, TAB_LIGNE<1> ELSE ENR_TLGHISTORPOINTAGE=""
			
			IF TAB_LIGNE<6>="0" AND ENR_TLGHISTORPOINTAGE="" AND TRIM(TAB_LIGNE<3>)<>"" THEN
				* La premire chose  faire est de "sauvegarder" la transaction
				* dans le fichier TLGHISTORPOINTAGE
				ENR_TLGHISTORPOINTAGE=""
				ENR_TLGHISTORPOINTAGE<1>=TAB_LIGNE<2>
				ENR_TLGHISTORPOINTAGE<2>=TAB_LIGNE<3>
				ENR_TLGHISTORPOINTAGE<3>=ICONV(TAB_LIGNE<4>[7,2]:"/":TAB_LIGNE<4>[5,2]:"/":TAB_LIGNE<4>[1,4], "D4/")
				ENR_TLGHISTORPOINTAGE<4>=TAB_LIGNE<5>
				ENR_TLGHISTORPOINTAGE<5>=TAB_LIGNE<6>
				ENR_TLGHISTORPOINTAGE<6>=TAB_LIGNE<7>
				
				* Modif - Greg - 19/05/09
				* Ajout du code pour crire la date et l'heure d'intgration.
				W_Date=DATE()
				W_Time=TIMEDATE()[1,8]
				ENR_TLGHISTORPOINTAGE<7>=W_Date
				ENR_TLGHISTORPOINTAGE<8>=W_Time
				
				* Modif Greg - 07/03/13 - Evolution pour grer des commentaires fait lors de pointages
				ENR_TLGHISTORPOINTAGE<9>=TAB_LIGNE<8>
				
				* Modif Greg - 26/03/14 - On stocke maintenant le nom du fichier Tra.
				ENR_TLGHISTORPOINTAGE<10>=W_NomFichier
				
				WRITE ENR_TLGHISTORPOINTAGE ON F.TLGHISTORPOINTAGE, TAB_LIGNE<1>
				
				* Modif Greg - 20/10/09 - Suite  un pb rencontr  Tours, on vrifie le type du pointage.
				IF TAB_LIGNE<7><>"1" THEN TAB_LIGNE<7>="2"
				
				IF W_DateDebPeriode="" THEN
					W_DateDebPeriode=ICONV(TAB_LIGNE<4>[7,2]:"/":TAB_LIGNE<4>[5,2]:"/":TAB_LIGNE<4>[1,4], "D4/")
				END ELSE
					IF W_DateDebPeriode>ICONV(TAB_LIGNE<4>[7,2]:"/":TAB_LIGNE<4>[5,2]:"/":TAB_LIGNE<4>[1,4], "D4/") THEN
						W_DateDebPeriode=ICONV(TAB_LIGNE<4>[7,2]:"/":TAB_LIGNE<4>[5,2]:"/":TAB_LIGNE<4>[1,4], "D4/")
					END
				END
				IF W_DateFinPeriode="" THEN
					W_DateFinPeriode=ICONV(TAB_LIGNE<4>[7,2]:"/":TAB_LIGNE<4>[5,2]:"/":TAB_LIGNE<4>[1,4], "D4/")
				END ELSE
					IF W_DateFinPeriode<ICONV(TAB_LIGNE<4>[7,2]:"/":TAB_LIGNE<4>[5,2]:"/":TAB_LIGNE<4>[1,4], "D4/") THEN
						W_DateFinPeriode=ICONV(TAB_LIGNE<4>[7,2]:"/":TAB_LIGNE<4>[5,2]:"/":TAB_LIGNE<4>[1,4], "D4/")
					END
				END		
				
				* Modif Greg - 03/10/11 - DA11081 - On gnre des fichiers
				* spcifiques dans lesquels on a directement le code aid.
				* Modif Greg - 25/03/13 - On remet l'appel automatique de la sub 10
				* et on y met les spcificits. On fait cela car le nombre de prestataires
				* avec lesquels on travaille a augment, avec presque autant de possibilit
				* de format de donnes.
				*IF LEN(TAB_LIGNE<3>)<>5 THEN
					GOSUB 10
				*END ELSE
				*	W_CodeAide=TAB_LIGNE<3>
				*	* Modif Greg - 14/11/11 - Je rajoute l'initialisation qui suit.
				*	* Normalement on ne devrait pas en avoir besoin. Mais un cas de
				*	* figure rencontr  l'Assadom d'Angers faisait qu'on passait
				*	* dans la procdure 10. Mais comme derrire on n'y passait plus,
				*	* Tab_Ano restait renseign. Donc on ne passait pas o il fallait.
				*	* Le caas de figure qui faisait qu'on passait ici ne devrait plus
				*	* avoir lieu car des modifications ont t apports en amont.
				*	* Mais on ne sait jamais.
				*	Tab_Ano<1>=""
				*END
				IF Tab_Ano<1>#"" THEN
					ENR_TLGANOPOINTAGE=""
					ENR_TLGANOPOINTAGE<1>=TAB_LIGNE<2>
					ENR_TLGANOPOINTAGE<2>=TAB_LIGNE<3>
					ENR_TLGANOPOINTAGE<3>=ICONV(TAB_LIGNE<4>[7,2]:"/":TAB_LIGNE<4>[5,2]:"/":TAB_LIGNE<4>[1,4], "D4/")
					ENR_TLGANOPOINTAGE<4>=TAB_LIGNE<5>
					ENR_TLGANOPOINTAGE<5>=TAB_LIGNE<7>
					ENR_TLGANOPOINTAGE<6>=TAB_LIGNE<6>
					ENR_TLGANOPOINTAGE<7>=W_CodeAide
					I=0
					LOOP
						I=I+1
					WHILE Tab_Ano<I>#"" DO
						ENR_TLGANOPOINTAGE<8,I>=Tab_Ano<I>
					REPEAT
					* Modif Greg - 07/03/13 - Evolution pour grer des commentaires fait lors de pointages
					ENR_TLGANOPOINTAGE<9>=TAB_LIGNE<8>
					WRITE ENR_TLGANOPOINTAGE ON F.TLGANOPOINTAGE, TAB_LIGNE<1>
				END ELSE
					ENR_TLGIMPORT=""
					ENR_TLGIMPORT<1>=TAB_LIGNE<2>
					ENR_TLGIMPORT<2>=TAB_LIGNE<3>
					ENR_TLGIMPORT<3>=ICONV(TAB_LIGNE<4>[7,2]:"/":TAB_LIGNE<4>[5,2]:"/":TAB_LIGNE<4>[1,4], "D4/")
					ENR_TLGIMPORT<4>=TAB_LIGNE<5>
					ENR_TLGIMPORT<5>=TAB_LIGNE<7>
					ENR_TLGIMPORT<6>=TAB_LIGNE<6>
					ENR_TLGIMPORT<7>=W_CodeAide
					* Modif Greg - 07/03/13 - Evolution pour grer des commentaires fait lors de pointages
					ENR_TLGIMPORT<8>=TAB_LIGNE<8>
					
					WRITE ENR_TLGIMPORT ON F.TLGIMPORT, TAB_LIGNE<1>
				END
			END
		END
	REPEAT

END ELSE
	W_IndTrace=W_IndTrace+1
	ENR_HEURE<W_IndTrace>=TIMEDATE():" - Erreur de lecture du fichier *.tra"
	WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"
END
END

IF W_NomFichier#"" THEN GOSUB 1
GOSUB 5

* Modif Greg - 08/11/13 - Nouvelle procdure
GOSUB 200

GOSUB 2
RETURN
**********************************************
* Traitement des saisies complmentaires     *
**********************************************
4
IF W_NomFichier2#"" THEN
	W_IndTrace=W_IndTrace+1
	ENR_HEURE<W_IndTrace>=TIMEDATE():" - Lecture du fichier *.rub"
	WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"
	
	READ ENR_DOMIRECUP FROM F.DOMIRECUP, W_NomFichier2 THEN
		W_IndJournal=W_IndJournal+1
		ENR_JOURNAL<W_IndJournal>=TIMEDATE():" - Lecture et parcours du fichier de MOI : ":W_NomFichier2
		
		ENR_DOMIHISTORRECUP=ENR_DOMIRECUP
		EXECUTE "DELETE DOMIRECUP ":W_NomFichier2
		WRITE ENR_DOMIHISTORRECUP ON F.DOMIHISTORRECUP, W_NomFichier2

		W_IndTrace=W_IndTrace+1
		ENR_HEURE<W_IndTrace>=TIMEDATE():" - Parcours du fichier *.rub"
		WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"

		W_AncienPointage=""
		W_IndLigne=0
		LOOP
			W_IndLigne=W_IndLigne+1
		WHILE ENR_DOMIRECUP<W_IndLigne>#"" DO
			TAB_JOURNAL<14>=TAB_JOURNAL<14>+1
			
			TAB_LIGNE=""
			
			I=0
			W_Max=DCOUNT(ENR_DOMIRECUP<W_IndLigne>, CHAR(59))
			LOOP
				I=I+1
			WHILE I<=W_Max DO
				
				* Modif Greg - 17/10/12 - Modif suite mise en place tlgestion Corbeil,
				* chez qui les codes MOI externes ne sont pas forcment ceux d'Infologis.
				* Pour rappel, la ligne d'une MOI se prsente comme  dans le fichier :
				* 456781;11;20
				* Soit autant de MOI sur la mme ligne, soit toutes les MOI sur la mme ligne.
				* Donc en 1, on a le numro de transaction, en 2 le code externe de la MOI, en 3, la valeur.
				* Et donc ventuellement en 4 un autre code externe, en 5 une autre valeur, etc.
				* Si il y a un reste, on est donc sur une donne qu'il faut prendre telle quelle.
				* Sinon il faut voir le tableau de correspondance des codes
				IF INT(I/2)<>I/2 THEN
					* Spcif Corbeil : le code MOI 3 correspond aux kms dclars en mtres.
					* Il a t dcid de garder 2 dcimales.
					IF FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",I-1) = "3" THEN
						TAB_LIGNE<I>=INT(FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",I)/100)/10
					END ELSE
						TAB_LIGNE<I>=FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",I)
					END
				END ELSE
					TAB_LIGNE<I>=FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",I)
					BEGIN CASE
						CASE FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",I)="1"
							TAB_LIGNE<I>="21"
						CASE FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",I)="2"
							TAB_LIGNE<I>="11"
						CASE FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",I)="3"
							TAB_LIGNE<I>="11"
						CASE FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",I)="4"
							TAB_LIGNE<I>="21"
						CASE FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",I)="5"
							TAB_LIGNE<I>=""
						CASE FIELD(ENR_DOMIRECUP<W_IndLigne>, ";",I)="8"
							TAB_LIGNE<I>="12"
					END CASE
				END
				* Fin modif Greg - 17/10/12
			REPEAT
			
			* Modif - Greg - 19/05/09
			* Ajout du code pour crire la date et l'heure d'intgration.
			* Ajout du code pour tester si la MOI n'a pas dj t intgre.
			IF W_AncienPointage="" THEN W_AncienPointage=TAB_LIGNE<1>
			IF W_AncienPointage<>TAB_LIGNE<1> THEN
				READ ENR_TLGHISTORMOI FROM F.TLGHISTORMOI, W_AncienPointage THEN
					IF ENR_TLGHISTORMOI<5>="" THEN
						W_Date=DATE()
						W_Time=TIMEDATE()[1,8]
						
						ENR_TLGHISTORMOI<5>=W_Date
						ENR_TLGHISTORMOI<6>=W_Time
						WRITE ENR_TLGHISTORMOI ON F.TLGHISTORMOI, W_AncienPointage
					END
							
					W_AncienPointage=TAB_LIGNE<1>
				END
			END

			READ ENR_TLGHISTORMOI FROM F.TLGHISTORMOI, TAB_LIGNE<1> ELSE ENR_TLGHISTORMOI=""
			
			* Modif Greg - 05/09/14 - Quand on corrige une anomalie dans le suivi d'anomalie, si une MOI est lie, on l'ajoute au
			* fichier RETRTMOI.rub, afin qu'elle soit retraite en fonction de la correction. Cette gestion est en place depuis le
			* dbut. Le souci, c'est qu'en 2009 il a fallu ajouter une gestion lors de la rception des MOI : il peut arriver qu'une
			* MOI arrive plusieurs fois dans les fichiers rub. Donc un test a t ajout pour vrifier si la MOI a dj t traite
			* ou pas. Malheureusement, je n'ai pas ralis que  allait  l'encontre de la gestion du fichier RETRTMOI.rub, qui
			* ne contient que des MOI dj traites.
			* Rsultat, depuis 2009, aucune des MOI contenues dans le fichier RETRTMOI.rub n'a pu tre retraite. L'info tait
			* "perdue".
			* Je modife donc le test de manire  forcer le retraitement de la MOI si on est sur le fichier RETRTMOI.rub
			IF ENR_TLGHISTORMOI<5>="" OR W_NomFichier2 = "RETRTMOI.rub" THEN
				GOSUB 55
			END
		REPEAT

		READ ENR_TLGHISTORMOI FROM F.TLGHISTORMOI, W_AncienPointage THEN
			IF ENR_TLGHISTORMOI<5>="" THEN
				W_Date=DATE()
				W_Time=TIMEDATE()[1,8]
				
				ENR_TLGHISTORMOI<5>=W_Date
				ENR_TLGHISTORMOI<6>=W_Time
				WRITE ENR_TLGHISTORMOI ON F.TLGHISTORMOI, W_AncienPointage
			END
		END
	END
END

IF W_NomFichier2#"" THEN GOSUB 2

W_IndTrace=W_IndTrace+1
ENR_HEURE<W_IndTrace>=TIMEDATE():" - Dduction automatique pour les anomalies 5 et 6"
WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"

* Modif Greg - 03/10/11 - Passage en subroutine.
* Si le prog est appel avec en paramtre un nom de fichier,
* c'est qu'on doit traiter un seul aidant, de la manire la plus simple.
* Donc tous les " cts" ne doivent pas tre lancs.
IF W_NomFichierVB="" THEN
	W_IndJournal=W_IndJournal+1
	ENR_JOURNAL<W_IndJournal>=TIMEDATE():" - Dduction automatique des arrives et dparts"
	IF W_LancerDeducAuto="O" THEN
		GOSUB 90
	END
END

W_IndTrace=W_IndTrace+1
ENR_HEURE<W_IndTrace>=TIMEDATE():" - Listage des dductions"
WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"

* Modif Greg - 03/10/11 - Passage en subroutine.
* Si le prog est appel avec en paramtre un nom de fichier,
* c'est qu'on doit traiter un seul aidant, de la manire la plus simple.
* Donc tous les " cts" ne doivent pas tre lancs.
IF W_NomFichierVB="" THEN
	W_IndJournal=W_IndJournal+1
	ENR_JOURNAL<W_IndJournal>=TIMEDATE():" - Listage des dductions automatiques"
	
	IF W_LancerDeducAuto="O" THEN
		* Vrification des deductions - Appel d'une subroutine.
		* 1 = Date de dbut
		* 2 = Date de fin
		* 3 = Appel via PICK ou VB.
		W_Params=""
		W_Params<1>=W_DateDebPeriode
		W_Params<2>=W_DateFinPeriode
		W_Params<3>="PICK"
		CALL DEDUCTIONSDOMITIME(RETURNVAL,W_Params,W_TabRetour)
	END
END
	
W_IndTrace=W_IndTrace+1
ENR_HEURE<W_IndTrace>=TIMEDATE():" - Recherche des chevauchements"
WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"

* Modif Greg - 03/10/11 - Passage en subroutine.
* Si le prog est appel avec en paramtre un nom de fichier,
* c'est qu'on doit traiter un seul aidant, de la manire la plus simple.
* Donc tous les " cts" ne doivent pas tre lancs.
IF W_NomFichierVB="" THEN
	W_IndJournal=W_IndJournal+1
	ENR_JOURNAL<W_IndJournal>=TIMEDATE():" - Recherche des chevauchements"

	* Vrification des doublons - Appel d'une subroutine.
	* 1 = Date de dbut
	* 2 = Date de fin
	* 3 = Appel via PICK ou VB.
	* Modif Greg - 22/03/11 - DA11033 - Dsormais on travaillera sur toutes les interventions depuis le dbut de la priode de paie en cours.
	W_Params=""
	READ ENR_PERIODESPAIE FROM F.PERIODESPAIE, "1" THEN
		W_Params<1>=ICONV("01/":ENR_PERIODESPAIE<1>[5,2]:"/":ENR_PERIODESPAIE<1>[1,4],"D4/")
	END ELSE
		* On gre quand mme le cas o la lecture de la priode de paie choue.
		W_Params<1>=W_DateDebPeriode
	END
	W_Params<2>=W_DateFinPeriode
	W_Params<3>="PICK"
	CALL CHEVAUCHEMENTSDOMITIME(RETURNVAL,W_Params,W_TabRetour)

	READ ENR_TEMPO FROM F.TEMPO, "CHEVAUCHEMENTSDOMITIME" ELSE ENR_TEMPO=""
	TAB_JOURNAL<16>=ENR_TEMPO<1>
	EXECUTE "DELETE TEMPO CHEVAUCHEMENTSDOMITIME"
END

W_IndTrace=W_IndTrace+1
ENR_HEURE<W_IndTrace>=TIMEDATE():" - Recherche des activits"
WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"

* Modif Greg - 03/10/11 - Passage en subroutine.
* Si le prog est appel avec en paramtre un nom de fichier,
* c'est qu'on doit traiter un seul aidant, de la manire la plus simple.
* Donc tous les " cts" ne doivent pas tre lancs.
IF W_NomFichierVB="" THEN
	W_IndJournal=W_IndJournal+1
	ENR_JOURNAL<W_IndJournal>=TIMEDATE():" - Recherche des activits pour les interventions n'en ayant pas (NB : traitement  effet rtroactif)"

	* Recherche d'activits pour les interventions n'en ayant pas.
	* Sans restrictions de date, le but tant de trouver des activits
	* pour les interventions dont les plannings n'taient pas  jour
	* (et donc pas ncessairement celles du jour).
	W_Params=""
	CALL RECHERCHEACTIVITESDOMITIME(RETURNVAL,W_Params,W_TabRetour)

	READ ENR_TEMPO FROM F.TEMPO, "RECHERCHEACTIVITESDOMITIME" ELSE ENR_TEMPO=""
	TAB_JOURNAL<17>=ENR_TEMPO<2>
	TAB_JOURNAL<18>=ENR_TEMPO<1>
	EXECUTE "DELETE TEMPO RECHERCHEACTIVITESDOMITIME"
END

* Modif Greg - 03/10/11 - Passage en subroutine.
* Si le prog est appel avec en paramtre un nom de fichier,
* c'est qu'on doit traiter un seul aidant, de la manire la plus simple.
* Donc tous les " cts" ne doivent pas tre lancs.
IF W_NomFichierVB="" THEN
	* Si on est au dbut du mois, on liste les MOI du mois prcdent.
	W_Date=OCONV(DATE(),"D4/")
	IF W_Date[1,2]="01" THEN
		W_IndTrace=W_IndTrace+1
		ENR_HEURE<W_IndTrace>=TIMEDATE():" - Liste des MOI"
		WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"
	
		W_IndJournal=W_IndJournal+1
		ENR_JOURNAL<W_IndJournal>=TIMEDATE():" - Listage des aidants ayant enregistr des MOI (NB : traitement effectu le premier de chaque mois uniquement)"
	
		W_Params=""
		CALL LISTEMOIDOMITIME(RETURNVAL,W_Params,W_TabRetour)
	
		READ ENR_TEMPO FROM F.TEMPO, "LISTEMOIDOMITIME" ELSE ENR_TEMPO=""
		TAB_JOURNAL<19>=ENR_TEMPO<1>
		EXECUTE "DELETE TEMPO LISTEMOIDOMITIME"
	END
END

W_IndTrace=W_IndTrace+1
ENR_HEURE<W_IndTrace>=TIMEDATE():" - Fin du programme"
WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"

W_IndTrace=W_IndTrace+1
ENR_HEURE<W_IndTrace>="Nb pointages : ":TAB_JOURNAL<12>
WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"

W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="Nombre de pointages : ":TAB_JOURNAL<12>

W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="Rcapitulatif des anomalies bloquantes :"
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="          - Numro de tlphone de l'aid non trouv            : ":TAB_JOURNAL<1>
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="          - Plusieurs aids trouvs pour le numro de tlphone : ":TAB_JOURNAL<2>
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="          - Code rejet gnr par Domitime                      : ":TAB_JOURNAL<3>
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="          - Aidant inexistant sous Infologis                    : ":TAB_JOURNAL<4>
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="          - Pointage d'arrive sans pointage de dpart          : ":TAB_JOURNAL<5>
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="          - Pointage de dpart sans pointage d'arrive          : ":TAB_JOURNAL<6>

W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="Rcapitulatif des anomalies non bloquantes :"
*W_IndJournal=W_IndJournal+1
*ENR_JOURNAL<W_IndJournal>="          - Pointage sans correspondance                          : ":TAB_JOURNAL<7>
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="          - Pas d'activit active pour l'aid                     : ":TAB_JOURNAL<8>
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="          - Plusieurs activits activites pour l'aid             : ":TAB_JOURNAL<9>
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="          - Pas de contrat pour l'aidant                          : ":TAB_JOURNAL<10>
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="          - Pas d'activit commune entre l'aidant et l'aid       : ":TAB_JOURNAL<11>
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="          - Plusieurs activits communes entre l'aidant et l'aid : ":TAB_JOURNAL<20>

W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="Nombre d'interventions valides directement grce aux pointages : ":TAB_JOURNAL<13>
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="Nombre d'interventions valides via la dduction automatique    : ":TAB_JOURNAL<15>
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="Nombre de chevauchements : ":TAB_JOURNAL<16>
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="Nombre de MOI : ":TAB_JOURNAL<14>
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="Nombre d'interventions ayant eu une activit dduite : ":TAB_JOURNAL<17>
W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>="Nombre d'interventions restantes sans activit       : ":TAB_JOURNAL<18>

IF W_Date[1,2]="01" THEN
	W_IndJournal=W_IndJournal+1
	ENR_JOURNAL<W_IndJournal>="Nombre d'aidants ayant enregistr des MOI le mois prcdent (NB : statistique gnre le premier de chaque mois) : ":TAB_JOURNAL<19>
END

W_IndJournal=W_IndJournal+1
ENR_JOURNAL<W_IndJournal>=TIMEDATE():" - Arrt du programme"

IF W_NomJournal="" THEN
	WRITE ENR_JOURNAL ON F.DOMIRAPPORTS, "Journal - ":OCONV(W_DateDebPeriode,"D4-"):" - ":OCONV(W_DateFinPeriode,"D4-"):" ":W_HeureTrt:".txt"
END ELSE
	WRITE ENR_JOURNAL ON F.DOMIRAPPORTS, W_NomJournal
END

* Modif Greg - 24/02/10 - La sauvegarde du planning n'est pas utilisable en pratique
* et de plus elle ne sera plus utile dans la prochaine gestion qu'on souhaite mettre
* en place.
** Nous faisons une sauvegarde quotidienne des fichiers plannings afin
** d'avoir de pouvoir revenir facilement "en arrire" et avoir l'environnement
** planning des jours sur lesquels des pbs ont t remonts longtemps aprs.
** Par exemple  la fin du mois les utilisateur nous disent qu'au dbut du mois
** des dductions n'ont pas t faites alors que tout est bien dans les plannings.
** Nous avons souvent eu ce genre de cas, et il s'avre que les plannings ont
** t modifis entre le jour du traitement et le jour o les utilisateurs vrifient.
*IF W_HeureImport="2200" THEN
*	TAB_FICHIERS=""
*	TAB_FICHIERS<1>="TPSDETAILSINTERV"
*	TAB_FICHIERS<2>="TPSMOI"
*	TAB_FICHIERS<3>="TPSEXCEPTIONS"
*	
*	EXECUTE "QUI" CAPTURING MSG
*
*	W_CheminBase=MSG<1>
*	W_Date=OCONV(DATE(),"D4/")
*
*	FOR I = 1 TO DCOUNT(TAB_FICHIERS,CHAR(254))
*		W_NomFichier=W_Date[7,4]:W_Date[4,2]:W_Date[1,2]:TAB_FICHIERS<I>
*		EXECUTE '!XCOPY ':W_CheminBase:'\':TAB_FICHIERS<I>:' ':W_CheminBase:'\DOMITIME\SAVPLG\':W_NomFichier:' /C /Y < ':W_CheminBase:'\DOMITIME\SAVPLG\F-File.txt'
*	NEXT I
*END

IF W_LancerDeducAuto="O" THEN
	W_Date=OCONV(DATE(),"D4/")
	W_NomFichier='Liste des interventions avec deduction automatique - ':W_Date[7,4]:W_Date[4,2]:W_Date[1,2]:' - ':W_HeureImport:'.txt'
	WRITE ENR_DEDUCTIONS ON F.DOMIRECUP, W_NomFichier
END

* Greg - 03/10/11 - Normalement pour la passage en subroutine, on doit faire des return
* plutt que des STOP. Le souci c'est que ce programme est une suite de procdure qui s'appelle
* les unes les autres et les RETURN ne terminent pas le programme mais crent des boucles.
* Cela n'est pas mchant mais  lance plusieurs fois la dduction automatique, la recherche
* des chevauchements et la recherche des activits. Ce qui ne sert  rien et gnre des rapports
* inutiles  quelques minutes d'intervalle.
* Le STOP quand  lui fonctionne bien pour un appel de type RUN PR, comme le fait la rcupration LogisFil.
* Mais il provoque une erreur lorsqu'on appelle le PR en tant que subroutine.
* J'ai donc d trouver un compromi aprs des tests.
* En appel de type RUN PR, on peut garder le STOP. Ca ne provoque pas d'erreur et les dductions et
* recherches sont bien excutes une seule fois.
* En appel de type subroutine, on met un Return. Ca vite une erreur sous VB et les dductions et recherches
* ne s'effectuent pas du tout dans ce "mode" qui permet de trait un aidant prcis et donc il ne faut pas
* faire ces traitements gnraux.
IF W_NomFichierVB="" THEN
	STOP
END ELSE
	RETURN
END
**********************************************
* Traitement de TLGIMPORT                    *
**********************************************
5

	* Modif Greg - 17/05/13 - Avec le systme Edenred, les utilisateurs peuvent faire des corrections
	* d'anomalies dans le systme Edenred. Qui nous renvoie alors les donnes. Dans l'immdiat, on peut
	* grer facilement le cas le plus frquent : la correction d'une anomalie pour pointage manquant.
	* Par exemple on reoit seulement une arrive. Sous Edenred l'utiLisateur corrige en indiquant le
	* dpart. Ce dpart nous est alors envoy par Edenred. Le souci c'est que de notre ct, l'arrive
	* est dj en anomalie. Donc si on laisse le prog tel quel, le dpart va s'y retrouver  son tour.
	* Alors qu'il faut pouvoir relier les 2 pointages entre eux.
	* Le plus simple est de prendre les anomalies pour pointages manquants et les remettre dans TLGIMPORT.
	* Ensuite le traitement classique fait son travail : dans notre exemple, avec la rception du dpart,
	* l'intervention va pouvoir tre cre et il n'y a plus d'anomalie. Par contre si un pointage tait
	* en anomalie et qu'on a toujours rien reu pour le complter, alors il va simplement retourner
	* en anomalie.
	* ATTENTION : cela est  appliquer seulement pour Edenred.
	* Modif Greg - 08/11/13 - Suite  la mise en place de la procdure 200,
	* le code qui suit n'a plus d'utilit.
	*IF W_SysEdenred="OUI" THEN
	*	W_ReqAno=""
	*	EXECUTE 'SSELECT TLGANOPOINTAGE AVEC 8 = "5" OR = "6"'
	*	EXECUTE 'SAUVE-LISTE W_ReqAno'
	*	EXECUTE "LISTE W_ReqAno" RETURNING MSGCODE
	*
	*	IF MSGCODE<1> # 209 THEN
	*		SELECT F.TLGANOPOINTAGE TO W_ReqAno
	*
	*		W_Fini="FAUX"
	*		LOOP
	*			READNEXT W_CleTlgAno FROM W_ReqAno ELSE W_Fini="VRAI"
	*		WHILE W_Fini="FAUX" DO
	*			READ ENR_TLGANOPOINTAGE FROM F.TLGANOPOINTAGE,W_CleTlgAno THEN
	*				ENR_TLGIMPORT=""
	*				FOR J = 1 TO 7
	*					ENR_TLGIMPORT<J>=ENR_TLGANOPOINTAGE<J>
	*				NEXT J
	*				WRITE ENR_TLGIMPORT ON F.TLGIMPORT, W_CleTlgAno
	*				EXECUTE "DELETE TLGANOPOINTAGE ":W_CleTlgAno
	*				
	*			END
	*		REPEAT
	*	END
	*	
	*	EXECUTE "EFFACER-LISTE W_ReqAno"
	*END
	* Fin modif Greg - 17/05/13

	* On fait un select de TLGIMPORT afin d'effectuer une seconde srie de tests
	* afin de dtecter les anomalies non bloquantes et de clore l'enregistrement
	* des donnes soit dans TLGANOPOINTAGE, soit dans TLGPOINTAGE.

	W_IndTrace=W_IndTrace+1
	ENR_HEURE<W_IndTrace>=TIMEDATE():" - SELECT de TLGIMPORT"
	WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"
	
	W_IndJournal=W_IndJournal+1
	ENR_JOURNAL<W_IndJournal>=TIMEDATE():" - Traitement du fichier 'temporaire'"

	* Modif Greg - 31/03/15 - A l'ASSAD de Tours il a t vu une cl vide dans TLGIMPORT.
	* On ne sait pas comment elle est arrive l mais elle empche le bon fonctionnement du prog.
	* Modif Greg - 23/07/15 - Avec le systme Edenred, il n'y a pas les secondes dans les horaires.
	* Ce qui pose problme si un intervenant pointe 2 fois dans la mme minute. Typiquement,
	* chez un couple, il pointe par exemple la fin pour le mari puis dans la foule le dbut
	* pour la femme.
	* Notre tri, fait de faon  ce que le reste du prog fonctionne (ordre chronologique, puis les
	* dbuts avant les fins) fait que le 2me pointage effectu sort avant le 1er.
	* Le problme est connu depuis longtemps et nous avons rgulirement demand  Edenred
	* d'ajouter les secondes dans les horaires, ce qu'ils disent ne pas pouvoir faire (alors que
	* Domiphone, qui appartient au mme groupe, le fait, donc...).
	* Le cas de figure tant rellement problmatique et revenant rgulirement dans les discussions,
	* nous souhaitons finalement tenter d'y remdier par nous-mme.
	* Aprs vrification, il semblerait que les numros de transactions, chez Edenred, se suivent.
	* A priori, ils ont un compteur gnral (pour tous leurs clients) et  chaque fois qu'un pointage
	* est fait,  incrmente le compteur. Donc thoriquement, un tri par numro de transaction devrait
	* correspondre  l'ordre chronologique et dans une mme minute, on devrait bien avoir les pointages
	* dans l'ordre dans lequel ils ont t effectus.
	* Ca fonctionne normalement comme  galement pour Domiphone et Domatel, mais eux n'ont pas le souci
	* des secondes. Par contre  ne fonctionne pas chez Penbase et Alyacom (les numros de transaction
	* sont une sorte de cl calcule  partir du tlphone mobile).
	* On ajoute donc un test : si on est en Edenred, le tri par @ID (qui est le numro de transaction),
	* se fait tout de suite aprs le tri par heure.
	* Si on n'est pas en Edenred, on laisse le tri habituel.
	IF W_SysEdenred = "OUI" THEN
		EXECUTE 'SSELECT TLGIMPORT AVEC 0 <> "" PAR 1 PAR 3 PAR 4 PAR @ID'
	END ELSE
		EXECUTE 'SSELECT TLGIMPORT AVEC 0 <> "" PAR 1 PAR 3 PAR 4 PAR 5 PAR 7 PAR @ID'
	END
	EXECUTE 'SAUVE-LISTE W_ReqTlgImport'
	EXECUTE "LISTE W_ReqTlgImport" RETURNING MSGCODE
	
	W_MemoDonnees=""

	IF MSGCODE<1> # 209 THEN
		SELECT F.TLGIMPORT TO W_ReqTlgImport

		W_IndTrace=W_IndTrace+1
		ENR_HEURE<W_IndTrace>=TIMEDATE():" - Parcours de TLGIMPORT"
		WRITE ENR_HEURE ON F.DOMIRECUP, "Heures.txt"

		W_Fini="FAUX"
		LOOP
			READNEXT W_CleTlgImport FROM W_ReqTlgImport ELSE W_Fini="VRAI"
		WHILE W_Fini="FAUX" DO
			* Les lignes doivent aller 2 par 2 (logiquement 1 ligne d'arrive et 1 ligne de dpart).
			* Donc pour avoir une intervention nous devont lire 2 lignes.
			* Un tableau est utilis pour sauvegarder la premire ligne ce qui permet
			* de lire le deuxime.
			* MODIF : auparavant, si une arrive n'avait pas de dpart, et si un dpart n'vait pas d'arrive,
			* 		on gnrait une anomalie non bloquante.
			*		Dsormais, un dpart qui n'a pas d'arrive est une anomalie bloquante (code 6).
			*		Une arrive peut tre conserve car potentiellement bonne si elle date de moins de 14H.
			*		Si ce n'est pas le cas, c'est une anomalie bloquante (code 5).
			READ ENR_TLGIMPORT FROM F.TLGIMPORT,W_CleTlgImport THEN
				* Si aucune ligne n'est sauvegarde, cela signifie qu'il s'agit d'une nouvelle intervention.
				* Il s'agit donc de la premire ligne qu'il faut sauvegarder.
				IF W_MemoDonnees<8> = "" THEN
					W_MemoDonnees<8>=W_CleTlgImport
					W_MemoDonnees<1>=ENR_TLGIMPORT<1>
					W_MemoDonnees<2>=ENR_TLGIMPORT<2>
					W_MemoDonnees<3>=ENR_TLGIMPORT<3>
					W_MemoDonnees<4>=ENR_TLGIMPORT<4>
					W_MemoDonnees<5>=ENR_TLGIMPORT<5>
					W_MemoDonnees<6>=ENR_TLGIMPORT<6>
					W_MemoDonnees<7>=ENR_TLGIMPORT<7>
					W_MemoDonnees<9>=ENR_TLGIMPORT<8>
				END ELSE
					IF W_MemoDonnees<5> = "1" AND ENR_TLGIMPORT<5> = "2" THEN
						* Nous avons en arrivant ici 2 lignes correspondant potentiellement  la mme intervention.
						* Pour le vrifier, nous devons comparer l'aidant, l'aid, la date et l'heure.
						* Si les 2 premiers critres sont diffrents, la premire ligne est fausse.
						* Le 3me critre peut tre diffrent pour un cas spcifique : pour une intervention de nuit
						* la date de dpart peut tre gale  la date d'arrive+1.
						* Si les dates ne sont donc ni gales ni diffrente d'une journe, la premire ligne est fausse.
						* Enfin, dans le cas ou les 2 dates sont identiques, il faut que l'heure de dpart soit suprieure
						*  l'heure d'arrive.
						* Si une anomalie est dtecte dans cette srie de tests, cela signifie que les 2 lignes sont non valides.
						IF W_MemoDonnees<1>=ENR_TLGIMPORT<1> THEN
							IF W_MemoDonnees<7>=ENR_TLGIMPORT<7> THEN
								IF (W_MemoDonnees<3>=ENR_TLGIMPORT<3>) OR (W_MemoDonnees<3>+1=ENR_TLGIMPORT<3>) THEN
									IF W_MemoDonnees<3>=ENR_TLGIMPORT<3> THEN
										IF W_MemoDonnees<4>>ENR_TLGIMPORT<4> THEN
											GOSUB 19
											W_AnoBloq="6"
											GOSUB 30
											W_AnoBloq=""
											W_MemoDonnees=""
										END ELSE

											GOSUB 40
											GOSUB 50
											TAB_JOURNAL<13>=TAB_JOURNAL<13>+1
											W_MemoDonnees=""
										END
									END ELSE

										GOSUB 40
										GOSUB 50
										TAB_JOURNAL<13>=TAB_JOURNAL<13>+1
										W_MemoDonnees=""
									END
								END ELSE
									GOSUB 19
									W_AnoBloq="6"
									GOSUB 30
									W_AnoBloq=""
									W_MemoDonnees=""
								END
							END ELSE
								GOSUB 19
								W_AnoBloq="6"
								GOSUB 30
								W_AnoBloq=""
								W_MemoDonnees=""
							END
						END ELSE
							GOSUB 19
							W_AnoBloq="6"
							GOSUB 30
							W_AnoBloq=""
							W_MemoDonnees=""
						END
					END ELSE
						GOSUB 19
						* La deuxime ligne est fausse si c'est une ligne de dpart.
						IF ENR_TLGIMPORT<5> = "2" THEN
							* Puisque la ligne est non valide on l'enregistre en tant que tel.
							* On rinitialise galement le tableau de sauvegarde.
							W_AnoBloq="6"
							GOSUB 30
							W_AnoBloq=""
							W_MemoDonnees=""
						END ELSE
							* Puisque la ligne est potentiellement bonne, on la sauvegarde et elle sera traite
							* avec la prochaine transaction rsultant du select.
							W_MemoDonnees<8>=W_CleTlgImport
							W_MemoDonnees<1>=ENR_TLGIMPORT<1>
							W_MemoDonnees<2>=ENR_TLGIMPORT<2>
							W_MemoDonnees<3>=ENR_TLGIMPORT<3>
							W_MemoDonnees<4>=ENR_TLGIMPORT<4>
							W_MemoDonnees<5>=ENR_TLGIMPORT<5>
							W_MemoDonnees<6>=ENR_TLGIMPORT<6>
							W_MemoDonnees<7>=ENR_TLGIMPORT<7>
							W_MemoDonnees<9>=ENR_TLGIMPORT<8>
						END
					END
				END
			END
		REPEAT
		
		* Une fois sorti de la boucle, il faut s'assurer de traiter le dernier cas si il en reste un.
		* Et si c'est le cas, il faut vider ENR_TLGIMPORT pour viter les bugs (car on comparer ENR_TLGIMPORT
		* avec W_MemoDonnees. Hors arriv ici, on ne doit avoir que W_MemoDonnees de renseign.
		IF W_MemoDonnees<1>#"" THEN
			ENR_TLGIMPORT=""
			GOSUB 19
		END
	END

RETURN
**********************************************
* On traite dans cette procdure les         *
* donnes afin de dtecter les potentielles  *
* anomalies. 1 anomalie ne met pas fin       *
*  la procdure, une transaction pouvant    *
* cumuler plusieurs anomalies.               *
* Il s'agit ici des activits bloquantes
**********************************************
10

	Tab_Ano=""
	W_CodeAide=""
	W_CptAide=0
	W_TabAide=""
	W_IndAno=0
	
	* Modif Greg - 25/03/13 - On peut recevoir le code aid directement sur 5 caratres. Dans ce cas
	* il n'y a pas de recherche  faire sur le numro de tlphone.
	IF LEN(TAB_LIGNE<3>)<>5 THEN
		* On vrifie que le numro de tlphone existe.

		READ ENR_TELEPHONE FROM F.TELEPHONE, TAB_LIGNE<3> THEN
			* Si numro de tlphone on vrifie si il y a
			* un ou plusieurs individus. Si plusieurs alors anomalie.
			* Sinon on mmorise le code de l'aid pour les traitements futurs.
			* NB : le fait qu'il y a plusieurs aids sur un numro de tlphone
			* n'est pas synonyme d'anomalie directement. Il ne faut compter que
			* les aids encore actif. Il faut donc boucler sur les aids afin
			* de lire CIVILAIDE pour regarder si l'aid est bien actif, Si c'est
			* le cas, alors on le compatbilise.		
			*W_NbAides=0
			W_AideActif=0
			W_AideSuppr=0
			MV=0
			LOOP
				MV=MV+1
			WHILE ENR_TELEPHONE<1,MV>#"" DO
				IF ENR_TELEPHONE<2,MV> = "B" THEN
					READ ENR_CIVILAIDE FROM F.CIVILAIDE, ENR_TELEPHONE<1,MV> THEN
						IF ENR_CIVILAIDE<43>#"" THEN
							IF ENR_CIVILAIDE<43>>=ICONV(TAB_LIGNE<4>[7,2]:"/":TAB_LIGNE<4>[5,2]:"/":TAB_LIGNE<4>[1,4], "D4/") THEN
								*W_NbAides=W_NbAides+1
								W_AideActif=W_AideActif+1
								W_CptAide=W_CptAide+1
								W_TabAide<W_CptAide>=ENR_TELEPHONE<1,MV>
								W_CodeAide=ENR_TELEPHONE<1,MV>
							END ELSE
								W_AideSuppr=W_AideSuppr+1
							END
						END ELSE
							*W_NbAides=W_NbAides+1
							W_AideActif=W_AideActif+1
							W_CptAide=W_CptAide+1
							W_TabAide<W_CptAide>=ENR_TELEPHONE<1,MV>
							W_CodeAide=ENR_TELEPHONE<1,MV>
						END
					END
				END
			REPEAT

			* Si il y a au moins 2 aids, on va voir le planning pour trouver le bon.
			IF W_AideActif>1 THEN
				* Les heures retournes par afficheplanning sont en centime, il faut donc convertir l'heure domitime
				W_HeureCent=TAB_LIGNE<5>[4,2]
				W_HeureCent=INT(((W_HeureCent/60)*100)+(1/2))
				IF LEN(W_HeureCent)="1" THEN
					W_HeureCent=TAB_LIGNE<5>[1,2]:"0":W_HeureCent
				END ELSE
					W_HeureCent=TAB_LIGNE<5>[1,2]:W_HeureCent
				END
				
				W_DateDeb=ICONV(TAB_LIGNE<4>[7,2]:"/":TAB_LIGNE<4>[5,2]:"/":TAB_LIGNE<4>[1,4], "D4/")
				W_DateFin=W_DateDeb+1
				W_ParamAffichePlanning = "AFFICHEPLANNING |DOMITIME||PMIS|":W_DateDeb:"|":W_DateFin:"|||":TAB_LIGNE<2>[3,5]:"|E||||"
				EXECUTE W_ParamAffichePlanning

				* On lit les interventions de l'aidant pour le jour voulu
				READ ENR_TPSTEMPO FROM F.TPSTEMPO, "AFFICHEPLANNINGDOMITIME" THEN
					W_CodeAide=""				
					W_Diff=9999
					M=0
					LOOP
						M=M+1
					WHILE ENR_TPSTEMPO<2,1,M><>"" DO
						IF ENR_TPSTEMPO<2,1,M>[1,6]="Interv" THEN
							IF INDEX(W_TabAide,ENR_TPSTEMPO<2,4,M>[6,5],1)>0 THEN
								IF TAB_LIGNE<7>="1" THEN
									W_HeureAComp=ENR_TPSTEMPO<2,2,M>
								END ELSE
									W_HeureAComp=ENR_TPSTEMPO<2,3,M>
								END
								
								IF W_HeureAComp<W_HeureCent THEN
									W_DifTemp=W_HeureCent-W_HeureAComp
								END ELSE
									W_DifTemp=W_HeureAComp-W_HeureCent
								END
								
								IF W_DifTemp<W_Diff THEN
									W_Diff=W_DifTemp
									W_CodeAide=ENR_TPSTEMPO<2,4,M>[6,5]
								END
							END
						END
					REPEAT
					
					IF W_CodeAide="" THEN
						W_IndAno=W_IndAno+1
						Tab_Ano<W_IndAno>="2"
						TAB_JOURNAL<2>=TAB_JOURNAL<2>+1
					END
				END ELSE
					W_IndAno=W_IndAno+1
					Tab_Ano<W_IndAno>="2"
					TAB_JOURNAL<2>=TAB_JOURNAL<2>+1
					W_CodeAide=""
				END
			END ELSE
				IF W_AideActif=0 THEN
					W_IndAno=W_IndAno+1
					Tab_Ano<W_IndAno>="1"
					TAB_JOURNAL<1>=TAB_JOURNAL<1>+1
				END
			END
		END ELSE
			* Pas de numro de tlphone donc anomalie
			W_IndAno=W_IndAno+1
			Tab_Ano<W_IndAno>="1"
			TAB_JOURNAL<1>=TAB_JOURNAL<1>+1
		END
	END ELSE
		* Actuellement il n'y a pas d'anomalie pour dire que l'aid est inconnu. Car  la base,
		* soit on part d'un numro de tlphone et c'est lui qui est inconnu, soit on a directement
		* un code aid et celui-ci est cens tre connu. Je met donc un test en commentaire, qu'il
		* faudra activer et adapter (code ano spcifique) si ncessaire un jour.
		*READ ENR_CIVILAIDE FROM F.CIVILAIDE, TAB_LIGNE<3> ELSE
		*	W_IndAno=W_IndAno+1
		*	Tab_Ano<W_IndAno>="1"
		*	TAB_JOURNAL<1>=TAB_JOURNAL<1>+1
		*END
		W_CodeAide=TAB_LIGNE<3>
		Tab_Ano<1>=""		
	END
	
	* Modif du 04/07/08 -> On ne gre plus les codes rejet Domitime.
	* On les grait pour ensuite informer dans le moniteur de contrle
	* les utilisatrices que telle salarie avait mal fait quelque chose
	* et pour qu'elle valide le pointage si il tait bon. Mais finalement
	* elles ne veulent pas s'en occuper elles veulent que  passe
	* directement en validation.
	* Si il y a un (certain) code de rejet sous domitime,
	* il y a donc une anomalie.
	*IF TAB_LIGNE<6>="2" THEN
	*	W_IndAno=W_IndAno+1
	*	Tab_Ano<W_IndAno>="3"
	*	TAB_JOURNAL<3>=TAB_JOURNAL<3>+1
	*END
	*IF TAB_LIGNE<6>="3" THEN
	*	W_IndAno=W_IndAno+1
	*	Tab_Ano<W_IndAno>="7"
	*	TAB_JOURNAL<3>=TAB_JOURNAL<3>+1
	*END
	
	* Modif Greg - 25/03/13 - On peut maintenant recevoir le code aidant soit  la taille prvue au dpart
	* (8 chiffres), soit directement sur 5 chiffres (code aidant Infologis), soit moins. Pour ce dernier cas,
	* en complte en amont avec des 0. Pour les 2 autres cas, il faut faire le test de vrification de l'aidant.
	* Mais du coup la lecture de CIVILAIDANT ne se fait pas avec le mme travail sur la cl : dans le premier cas
	* le code aidant est inclu dans les 8 chiffres, alors que dans le 2me on a directement le code Infologis.
	
	* Modif Greg - 05/11/15 - Si l'aidant existe, on vrifie qu'il n'est pas supprim. J'en profite pour optimiser
	* le code : actuellement on a une lecture dans le IF et une lecture dans le ELSE. Le code est quasiment le mme,
	* seule change la cl de lecture : soit on prend TAB_LIGNE<2>, soit on prend TAB_LIGNE<2>[3,5]. Ma modif de gestion
	* de la suppression ncessite d'ajouter du code. Qui serait lui aussi en double. Pour viter , dornavant on
	* renseigne le code dans une variable et on a une seule lecture et un seul test de suppression. Et pour aussi
	* viter du code en double, on utilise maintenant une variable pour savoir si l'aidant est ok ou pas. Et en fonction
	* d'elle, on remonte une anomalie ou pas.
	* 
	*IF LEN(TAB_LIGNE<2>)<>5 THEN
	*	* On effectue un test pour vrifier si l'aidant existe biens sous INFOLOGIS
	*	READ ENR_CIVILAIDANT FROM F.CIVILAIDANT, TAB_LIGNE<2>[3,5] ELSE
	*		W_IndAno=W_IndAno+1
	*		Tab_Ano<W_IndAno>="4"
	*		TAB_JOURNAL<4>=TAB_JOURNAL<4>+1
	*	END
	*END ELSE
	*	READ ENR_CIVILAIDANT FROM F.CIVILAIDANT, TAB_LIGNE<2> ELSE
	*		W_IndAno=W_IndAno+1
	*		Tab_Ano<W_IndAno>="4"
	*		TAB_JOURNAL<4>=TAB_JOURNAL<4>+1
	*	END
	*END
	IF LEN(TAB_LIGNE<2>)<>5 THEN
		W_Code=TAB_LIGNE<2>[3,5]
	END ELSE
		W_Code=TAB_LIGNE<2>
	END
	* On effectue un test pour vrifier si l'aidant existe bien sous INFOLOGIS
	W_AidantOk="OUI"
	READ ENR_CIVILAIDANT FROM F.CIVILAIDANT, W_Code THEN
		* L'aidant existe, mais il faut s'assurer qu'il n'est pas  l'tat supprim le jour de l'intervention.
		* S'il l'est, dans l'immdiat on se contente de remonter l'anomalie d'aidant inconnu (ce qui vite
		* d'avoir  toucher le suivi des anomalies, donc on peut renvoyer le PR immdiatement au Mans puisque
		* c'est chez eux que les salaries se trompent beaucoup et qu'on se retrouve avec des aidants supprims).
		IF ENR_CIVILAIDANT<36><>"" THEN
			W_DateInterv=ICONV(TAB_LIGNE<4>[7,2]:"/":TAB_LIGNE<4>[5,2]:"/":TAB_LIGNE<4>[1,4], "D4/")
			IF ENR_CIVILAIDANT<36><=W_DateInterv THEN W_AidantOk="NON"
		END
	END ELSE
		W_AidantOk="NON"
	END
	IF W_AidantOk="NON" THEN
		W_IndAno=W_IndAno+1
		Tab_Ano<W_IndAno>="4"
		TAB_JOURNAL<4>=TAB_JOURNAL<4>+1
	END
	* Fin modif Greg - 
RETURN
*******************************************************
* Quand on passe ici, c'est qu'on a deux interventions
* non complmentaires. On teste si il faut mettre le pointage
* en anomalie ou si potentiellement on peut avoir un pointage
* complmentaire lors d'une future importation, auquel cas
* il faut garder le pointage dans TLGIMPORT.
*******************************************************
19

	IF W_MemoDonnees<5>="1" THEN
		* Modif Greg - DA9158-01 - 08/10/09
		* Changement complet de la gestion de l'anomalie du pointage de fin manquant.
		
		* Si le pointage suivant est sur le mme aidant alors c'est une anomalie.
		IF W_MemoDonnees<1>=ENR_TLGIMPORT<1> THEN
			W_AnoBloq="5"
			GOSUB 20
			W_AnoBloq=""
		END ELSE
			* Modif Greg - 13/10/11 - DA11081
			* Dans le cadre de la gestion des codes barres, on a directement les codes des aids.
			* On utilise ce point particulier pour dterminer si on est donc en gestion par codes
			* barres ou pas. Et dans ce cas, la gestion fait qu'on ne doit pas garder dans TLGIMPORT
			* les donnes. Ceci pour une raison simple : lorsque les salaris viennent dbadger, toutes
			* les donnes sont sur le lecteur. Une salarie ne va pas dbadger au milieu d'une intervention.
			* Donc si il manque un pointage, on ne peut pas l'avoir plus tard : il s'agit forcment d'une
			* anomalie.
			* Modif Greg - 03/04/12 - Dans le cadre de la gestion Penbase, on a un code aid sur 5 caractres
			* directement, mais  ne veut pas dire qu'on a toutes les donnes, puisque le systme Penbase
			* permet la rception des pointages au fur et  mesure. Donc dans le cas de Penbase, si on n'a
			* pas le pointage complmentaire, cela ne doit pas automatiquement tre une anomalie.
			IF LEN(W_MemoDonnees<2>)=5 AND W_SysPenbase="NON" THEN
				W_AnoBloq="5"
				GOSUB 20
				W_AnoBloq=""				
			END ELSE
				* Calcul de la dure coule entre l'heure du pointage et l'heure d'importation.
				W_Heures=0
				W_Minutes=0
				
				IF W_DateTrt=W_MemoDonnees<3> THEN
					W_Minutes=W_HeureTrt[4,2]
					W_Minutes=W_Minutes+(60-W_MemoDonnees<4>[4,2])
					
					W_Heures=INT(W_Minutes/60)
					
					W_Minutes=W_Minutes-(60*W_Heures)
					
					W_Hres=W_HeureTrt[1,2]-W_MemoDonnees<4>[1,2]
					W_Hres=W_Hres-1
					W_Heures=W_Heures+W_Hres
				END ELSE
					W_Heures=W_HeureTrt[1,2]
					W_Minutes=W_HeureTrt[4,2]
					
					W_Hres=24*(W_DateTrt-W_MemoDonnees<3>-1)
					W_Heures=W_Heures+W_Hres
					
					W_Hres=24-W_MemoDonnees<4>[1,2]
					W_Hres=W_Hres-1
					W_Heures=W_Heures+W_Hres
					
					W_Minutes=W_Minutes+(60-W_MemoDonnees<4>[4,2])
					
					W_Hres=INT(W_Minutes/60)
					W_Heures=W_Heures+W_Hres
					
					W_Minutes=W_Minutes-(60*W_Hres)
				END
				
				IF LEN(W_Heures)=1 THEN W_Heures="0":W_Heures
				IF LEN(W_Minutes)=1 THEN W_Minutes="0":W_Minutes
				W_DureeEcoulee=W_Heures:'H':W_Minutes
				
				* Si le pointage a t fait il y a plus de 10 heures, alors c'est une anomalie.
				* Sinon, il faut garder l'enregistrement dans TLGIMPORT donc on ne fait rien.
				IF W_DureeEcoulee > "10H00" THEN
					W_AnoBloq="5"
					GOSUB 20
					W_AnoBloq=""
				END ELSE
					* Modif Greg - 13/05/11 - DA11042
					* Si l'enregistrement reste dans TLGIMPORT,
					* il faut quand mme le comparer aux plannings
					IF W_LancerTlgVerifPlg = "O" THEN
						ENR_TLGIMPORTSAVE=ENR_TLGIMPORT
						ENR_TLGIMPORT=W_MemoDonnees
						W_CleTlgAVerif=W_MemoDonnees<8>
						GOSUB 100
						ENR_TLGIMPORT=ENR_TLGIMPORTSAVE
					END
					* Fin modif Greg - 13/05/11
				END
			END
		END
		* Fin modif Greg - DA9158-01 - 08/10/09
	END ELSE
		W_AnoBloq="6"
		GOSUB 20
		W_AnoBloq=""
	END
RETURN
*******************************************************
* Enregistrement de W_MemoDonnees dans TLGANOPOINTAGE *
*******************************************************
20

	IF W_AnoBloq="5" THEN TAB_JOURNAL<5>=TAB_JOURNAL<5>+1
	IF W_AnoBloq="6" THEN TAB_JOURNAL<6>=TAB_JOURNAL<6>+1
	
	*ENR_TLGANOPOINTAGE=""
	ENR_TLGANOPOINTAGE<1>=W_MemoDonnees<1>
	ENR_TLGANOPOINTAGE<2>=W_MemoDonnees<2>
	ENR_TLGANOPOINTAGE<3>=W_MemoDonnees<3>
	ENR_TLGANOPOINTAGE<4>=W_MemoDonnees<4>
	ENR_TLGANOPOINTAGE<5>=W_MemoDonnees<5>
	ENR_TLGANOPOINTAGE<6>=W_MemoDonnees<6>
	ENR_TLGANOPOINTAGE<7>=W_MemoDonnees<7>
	IF W_AnoBloq<>"" THEN
		ENR_TLGANOPOINTAGE<8>=W_AnoBloq
	END
	ENR_TLGANOPOINTAGE<9>=W_MemoDonnees<9>
	WRITE ENR_TLGANOPOINTAGE ON F.TLGANOPOINTAGE, W_MemoDonnees<8>
	
	* Modif Greg - 13/05/11 - DA11042
	* On passe ici dans le cas des pointages qui n'ont pas de correspondance
	* (pointage de dbut sans pointage de fin et vice versa).
	IF W_LancerTlgVerifPlg = "O" THEN
		ENR_TLGIMPORTSAVE=ENR_TLGIMPORT
		ENR_TLGIMPORT=W_MemoDonnees
		W_CleTlgAVerif=W_MemoDonnees<8>
		GOSUB 100
		ENR_TLGIMPORT=ENR_TLGIMPORTSAVE
	END
	* Fin modif Greg - 13/05/11
		
	* Le fichier TLGIMPORT ne doit contenir  la fin du programme
	* que les transaction d'arrive qui peuvent potientiellement tre bonnes
	* mais qui n'ont pas encore de transaction de dpart correspondantes.
	* Il faut donc l'apurer au fur et  mesure que les transactions sont traites.
	EXECUTE 'DELETE TLGIMPORT ':W_MemoDonnees<8>

RETURN
*******************************************************
* Enregistrement de ENR_TLGIMPORT dans TLGANOPOINTAGE *
*******************************************************
30

	IF W_AnoBloq="5" THEN TAB_JOURNAL<5>=TAB_JOURNAL<5>+1
	IF W_AnoBloq="6" THEN TAB_JOURNAL<6>=TAB_JOURNAL<6>+1

	*ENR_TLGANOPOINTAGE=""
	ENR_TLGANOPOINTAGE<1>=ENR_TLGIMPORT<1>
	ENR_TLGANOPOINTAGE<2>=ENR_TLGIMPORT<2>
	ENR_TLGANOPOINTAGE<3>=ENR_TLGIMPORT<3>
	ENR_TLGANOPOINTAGE<4>=ENR_TLGIMPORT<4>
	ENR_TLGANOPOINTAGE<5>=ENR_TLGIMPORT<5>
	ENR_TLGANOPOINTAGE<6>=ENR_TLGIMPORT<6>
	ENR_TLGANOPOINTAGE<7>=ENR_TLGIMPORT<7>
	IF W_AnoBloq<>"" THEN
		ENR_TLGANOPOINTAGE<8>=W_AnoBloq
	END
	ENR_TLGANOPOINTAGE<9>=ENR_TLGIMPORT<8>
	WRITE ENR_TLGANOPOINTAGE ON F.TLGANOPOINTAGE, W_CleTlgImport

	* Modif Greg - 13/05/11 - DA11042
	* On passe ici dans le cas des pointages qui n'ont pas de correspondance
	* (pointage de dbut sans pointage de fin et vice versa).	
	IF W_LancerTlgVerifPlg = "O" THEN
		W_CleTlgAVerif=W_CleTlgImport
		GOSUB 100
	END
	* Fin modif Greg - 13/05/11
	
	* Le fichier TLGIMPORT doit tre vide  la fin du programme.
	* Il faut donc l'apurer au fur et  mesure que les transactions sont traites.
	EXECUTE 'DELETE TLGIMPORT ':W_CleTlgImport

RETURN
*****************************************************************
* Arriv ici on sait que les 2 lignes sont bien l'arrive       *
* et le dpart de la mme intervention. On va donc effectuer    *
* une autre srie de tests pour vrifier que cette intervention *
* est justifie (au niveau du contrat et de l'activit)         *
* Plusieurs anomalies peuvent tre cumules.                    *
*****************************************************************
40

	W_IndAno=0
	Tab_Ano=""

	W_IndAct=0
	Tab_Act=0

	W_Activite=""

	* On commence par tester les activits de l'aid. Si l'aid n'a pas d'activit cela gnre une anomalie.
	* S'il en a plusieurs cela gnre galement une anomalie.

	EXECUTE 'SSELECT ACTIVITESBISAIDE AVEC CodeAide = "':W_MemoDonnees<7>:'" AND AVEC DateDebAct <= "':ENR_TLGIMPORT<3>:'" AND AVEC 1 = "" OR >= "':W_MemoDonnees<3>:'"'
	EXECUTE 'SAUVE-LISTE W_ReqActivitesAideTlg'
	EXECUTE "LISTE W_ReqActivitesAideTlg" RETURNING MSGCODE

	IF MSGCODE<1> # 209 THEN
		SELECT F.ACTIVITESBISAIDE TO W_ReqActivitesAideTlg
		W_FiniAct="FAUX"
		LOOP
			READNEXT W_CleActAide FROM W_ReqActivitesAideTlg ELSE W_FiniAct="VRAI"
		WHILE W_FiniAct="FAUX" DO
			* Modif Greg - 27/05/13 - On ne prend que les activits paramtres dans LogisFil
			IF INDEX(TAB_LISTEACT,W_CleActAide[6,6],1)<>0 THEN
				READ ENR_ACTIVITESBISAIDE FROM F.ACTIVITESBISAIDE,W_CleActAide THEN
					W_IndAct=W_IndAct+1
					Tab_Act<W_IndAct>=W_CleActAide[6,6]
				END
			END
		REPEAT
		* Modif Greg - 07/07/15 - Ici on ne sait pas encore si une activit sera finalement trouve ou pas.
		* Donc pas d'anomalie  grer.
		IF Tab_Act<2>#"" THEN
			*W_IndAno=W_IndAno+1
			*Tab_Ano<W_IndAno>="3"
			*TAB_JOURNAL<9>=TAB_JOURNAL<9>+1
		END
	END ELSE
		* Si on ne trouve pas d'activit dans le fichier activitebisaide alors
		*on lit le fichier activit

		READ ENR_ACTIVITESAIDE FROM F.ACTIVITESAIDE, W_MemoDonnees<7> THEN
			I=0
			LOOP
				I=I+1
			WHILE ENR_ACTIVITESAIDE<1,I>#"" DO
				* Modif Greg - 27/05/13 - On ne prend que les activits paramtres dans LogisFil
				IF INDEX(TAB_LISTEACT,ENR_ACTIVITESAIDE<1,I>,1)<>0 THEN
					IF ENR_ACTIVITESAIDE<2,I>="" THEN
						W_IndAct=W_IndAct+1
						Tab_Act<W_IndAct>=ENR_ACTIVITESAIDE<1,I>
					END ELSE
						IF ENR_ACTIVITESAIDE<2,I><=ENR_TLGIMPORT<3> AND ENR_ACTIVITESAIDE<3,I>>=W_MemoDonnees<3> OR ENR_ACTIVITESAIDE<2,I><=ENR_TLGIMPORT<3> AND ENR_ACTIVITESAIDE<3,I>="" THEN
							W_IndAct=W_IndAct+1
							Tab_Act<W_IndAct>=ENR_ACTIVITESAIDE<1,I>
						END
					END
				END
			REPEAT
			* Modif Greg - 07/07/15 - Ici on ne sait pas encore si une activit sera finalement trouve ou pas.
			* Donc pas d'anomalie  grer.			
			IF Tab_Act<2>#"" THEN
				*W_IndAno=W_IndAno+1
				*Tab_Ano<W_IndAno>="3"
				*TAB_JOURNAL<9>=TAB_JOURNAL<9>+1
			END
		END ELSE
			* Modif Greg - 07/07/15 - Ici on ne sait pas encore si une activit sera finalement trouve ou pas.
			* Donc pas d'anomalie  grer.		
			*W_IndAno=W_IndAno+1
			*Tab_Ano<W_IndAno>="2"
			*TAB_JOURNAL<8>=TAB_JOURNAL<8>+1
		END
	END

	* Modif Greg - 22/03/11 - DA11033 - Si l'aid a une seule activit, alors on la prend directement.
	W_Activite=""
	IF W_IndAct=1 THEN
		W_Activite=Tab_Act<1>
	END ELSE
		* Modif Greg - 05/12/11 - On va maintenant voir automatiquement les plannings.
		* Je met donc en commentaire presque toute la gestion actuelle qui part des contrats,
		* pour ne laisser que le code allant voir les plannings, qui tait excut si on ne trouvait
		* pas de contrat.
*		* On teste maintenant les contrats de l'aidant. S'il n'a pas de contrat, il y a une anomalie.
*		EXECUTE 'SSELECT CONTRAT AVEC @ID = "':W_MemoDonnees<1>[3,5]:']" AND AVEC 7 <= "':ENR_TLGIMPORT<3>:'" AND AVEC 8 = "" OR >= "':W_MemoDonnees<3>:'"'
*		EXECUTE 'SAUVE-LISTE W_ReqContratTlg'
*		EXECUTE "LISTE W_ReqContratTlg" RETURNING MSGCODE
*
*		Tab_ActAidant=""
*		
*		IF MSGCODE<1> # 209 THEN
*			* On parcourt les contrats pour trouver si il y en a un de bon (soit prestataire soit mandataire).
*			* Si il n'y a aucun contrat de bon : anomalie.
*
*			SELECT F.CONTRAT TO W_ReqContratTlg
*
*			W_FiniCont="FAUX"
*			LOOP
*				READNEXT W_CleContrat FROM W_ReqContratTlg ELSE W_FiniCont="VRAI"
*			WHILE W_FiniCont="FAUX" DO
*				READ ENR_CONTRAT FROM F.CONTRAT, W_CleContrat THEN
*					* Dans le cas d'un contrat mandataire, on vrifie que l'aid
*					* est bien celui de la transaction.
*					IF ENR_CONTRAT<1> = "02" THEN
*						IF ENR_CONTRAT<3> = W_MemoDonnees<7> THEN
*							FOR IActC = 1 TO DCOUNT(ENR_CONTRAT<36>,CHAR(253))
*								IF INDEX(Tab_ActAidant,ENR_CONTRAT<36,IActC>,1)=0 THEN Tab_ActAidant<-1>=ENR_CONTRAT<36,IActC>
*							NEXT IActC
*						END
*					END ELSE
*						FOR IActC = 1 TO DCOUNT(ENR_CONTRAT<36>,CHAR(253))
*							IF INDEX(Tab_ActAidant,ENR_CONTRAT<36,IActC>,1)=0 THEN Tab_ActAidant<-1>=ENR_CONTRAT<36,IActC>
*						NEXT IActC
*					END
*				END
*			REPEAT
*			* Arriv ici on a toutes les activits valides de l'aid et toutes
*			* celles de l'aidant. On peut donc chercher les activits communes.
*			GOSUB 41
*			IF W_Activite="" THEN
*				* Aucune activit commune a t trouve et les plannings n'ont pas permi d'en trouver une.
*				W_IndAno=W_IndAno+1
*				Tab_Ano<W_IndAno>="5"
*				TAB_JOURNAL<11>=TAB_JOURNAL<11>+1
*			END ELSE
*				IF W_Activite<2><>"" THEN
*					* Plusieurs activits communes ont t trouves et les plannings n'ont pas permi de dterminer laquelle on doit prendre.
*					W_Activite=""
*					W_IndAno=W_IndAno+1
*					Tab_Ano<W_IndAno>="6"
*					TAB_JOURNAL<20>=TAB_JOURNAL<20>+1
*				END
*			END
*		END ELSE
			* Modif Greg - DA11033 - Si il n'y a pas de contrat, on va voir les plannings
			W_Activite=""
			GOSUB 80
			IF W_Activite="" THEN
				* Modif Greg - 07/07/15 - Pour commencer, il n'y a plus de recherche des contrats (depuis trs longtemps).
				* Donc l'anomalie 4 (Pas de contrat) ne sert plus  rien. De plus, suite aux modifs d'il y a trs longtemps,
				* on arrive ici car on n'a pas trouv d'activit prcise. L'anomalie 4, en plus d'tre obsolte, est donc
				* compltement fausse.
				* Le code est modifi de manire  remonter la bonne anomalie : soit on n'a pas d'activit, soit on en a trop.
				W_IndAno=W_IndAno+1
				*Tab_Ano<W_IndAno>="4"
				*TAB_JOURNAL<10>=TAB_JOURNAL<10>+1
				IF Tab_Act<1>="" THEN
					Tab_Ano<W_IndAno>="2"
					TAB_JOURNAL<8>=TAB_JOURNAL<8>+1
				END ELSE
					Tab_Ano<W_IndAno>="3"
					TAB_JOURNAL<9>=TAB_JOURNAL<9>+1
				END
			END
*		END
	END
	
RETURN
***********************************************
* On cherche une activit commune (et active) *
*  l'aid et  l'aidant.                     *
***********************************************
* Modif Greg - 05/12/11 - Cette procdure est utilise pour comparer
* les activits du contrat de l'aidant aux activits de l'aid.
* Comme on fait "sauter" la gestion des contrats, il n'y a plus
* besoin de cette procdure.
*41
*
*	W_Activite=""
*	W_NbActCom=0
*	I=0
*	LOOP
*		I=I+1
*	WHILE Tab_ActAidant<I>#"" DO
*		J=0
*		LOOP
*			J=J+1
*		WHILE Tab_Act<J>#"" DO
*			IF Tab_Act<J>=Tab_ActAidant<I> THEN
*				W_Activite<-1>=Tab_Act<J>
*				W_NbActCom=W_NbActCom+1
*			END
*		REPEAT
*	REPEAT
*	IF W_NbActCom>1 THEN
*		W_ActiviteSave=W_Activite
*		W_Activite=""
*		GOSUB 80
*		IF W_Activite="" THEN W_Activite=W_ActiviteSave
*	END
*RETURN
*****************************************************
* Suite au traitement des anomalies non bloquantes, *
* on crit dans TLGPOINTAGE.                        *
* On purge galement TLGIMPORT                      *
*****************************************************
50

	ENR_TLGPOINTAGE=""
	
	IF W_MemoDonnees<8>="FAUSSECLE1" THEN
		ENR_TLGPOINTAGE<1>=W_MemoDonnees<10>
	END ELSE
		ENR_TLGPOINTAGE<1>=W_MemoDonnees<8>
	END
	
	IF W_CleTlgImport="FAUSSECLE2" THEN
		ENR_TLGPOINTAGE<2>=ENR_TLGIMPORT<9>
	END ELSE
		ENR_TLGPOINTAGE<2>=W_CleTlgImport
	END
	
	ENR_TLGPOINTAGE<3>=ENR_TLGIMPORT<3>
	ENR_TLGPOINTAGE<4>=ENR_TLGIMPORT<4>
	ENR_TLGPOINTAGE<5>=W_Activite
	W_CommentaireAno=""
	IF Tab_Ano<1>#"" THEN
		I=0
		LOOP
			I=I+1
		WHILE Tab_Ano<I>#"" DO
			W_ComAno=""
			ENR_TLGPOINTAGE<6,I>=Tab_Ano<I>
			BEGIN CASE
				CASE Tab_Ano<I>="2"
					W_ComAno="Pas d'activit active pour l'aid. "
				CASE Tab_Ano<I>="3"
					W_ComAno="Plusieurs activits actives pour l'aid. "
				CASE Tab_Ano<I>="4"
					W_ComAno="Pas de contrat pour l'aidant. "
				CASE Tab_Ano<I>="5"
					W_ComAno="Pas d'activit commune entre l'aidant et l'aid. "
				CASE Tab_Ano<I>="6"
					W_ComAno="Plusieurs activits communes entre l'aidant et l'aid. "					
			END CASE
			IF INDEX(ENR_TLGPOINTAGE<10>,W_ComAno,1)=0 THEN
				W_CommentaireAno=W_CommentaireAno:W_ComAno
			END
		REPEAT
	END
	* Gestion des commentaires qui peuvent avoir
	* t renseigns dans le moniteur de controle
	IF ENR_TLGIMPORT<8><>"" THEN
		ENR_TLGPOINTAGE<10>=ENR_TLGIMPORT<8>
	END ELSE
		IF W_MemoDonnees<9><>"" THEN
			ENR_TLGPOINTAGE<10>=W_MemoDonnees<9>
		END ELSE
			ENR_TLGPOINTAGE<10>=""
		END
	END
	IF ENR_TLGPOINTAGE<10>="" THEN
		ENR_TLGPOINTAGE<10>=TRIM(W_CommentaireAno)
	END ELSE
		ENR_TLGPOINTAGE<10>=TRIM(ENR_TLGPOINTAGE<10>):" ":TRIM(W_CommentaireAno)
	END

	ENR_TLGPOINTAGE<11>=W_CleTpsDetailsInterv
	IF W_CleTpsDetailsInterv<>"" THEN
		READ ENR_TPSDETAILSINTERV FROM F.TPSDETAILSINTERV, W_CleTpsDetailsInterv THEN
			ENR_DEDUCTIONS<-1>=W_MemoDonnees<1>[3,5]:';':W_MemoDonnees<7>:';':OCONV(W_MemoDonnees<3>,"D4/"):';':W_MemoDonnees<4>[1,6]:'00':';':ENR_TLGPOINTAGE<4>
			W_IDeduc=DCOUNT(ENR_DEDUCTIONS,CHAR(254))
			IF ENR_TLGANOPOINTAGE<8>="6" THEN
				ENR_DEDUCTIONS<W_IDeduc>=ENR_DEDUCTIONS<W_IDeduc>:';Arrivee;'
			END ELSE
				ENR_DEDUCTIONS<W_IDeduc>=ENR_DEDUCTIONS<W_IDeduc>:';Depart;'
			END
			ENR_DEDUCTIONS<W_IDeduc>=ENR_DEDUCTIONS<W_IDeduc>:W_CleTpsDetailsInterv[1,5]:';':W_CleTpsDetailsInterv[6,5]:';':W_CleTpsDetailsInterv[22,1]:';':W_CleTpsDetailsInterv[23,4]:';':ENR_TPSDETAILSINTERV<2>
		END
	END
	W_CleTpsDetailsInterv=""
		
	WRITE ENR_TLGPOINTAGE ON F.TLGPOINTAGE, W_MemoDonnees<1>:W_MemoDonnees<7>:W_MemoDonnees<3>:W_MemoDonnees<4>[1,6]:"00"
		
	EXECUTE 'DELETE TLGIMPORT ':W_MemoDonnees<8>
	EXECUTE 'DELETE TLGIMPORT ':W_CleTlgImport
	
	* Modif Greg - 13/05/11 - DA11042
	* On valide une intervention. Le pointage de dbut doit tre compar aux plannings.
	* ATTENTION : on passe dans cette procdure galement pour la dduction automatique.
	* Si c'est le cas, le pointage a dj t compar lorsqu'il a t crit dans
	* TLGANOPOINTAGE. On peut donc viter de le retraiter, cela facilement puisque dans
	* le cas de la dduction automatique, on gnre des "FAUSSECLE" (dans W_MemoDonnees
	* et W_CleTlgImport).
	IF W_LancerTlgVerifPlg = "O" THEN
		IF W_CleTlgImport[1,6]<>"FAUSSE]" THEN
			ENR_TLGIMPORTSAVE=ENR_TLGIMPORT
			ENR_TLGIMPORT=W_MemoDonnees
			W_CleTlgAVerif=W_MemoDonnees<1>:W_MemoDonnees<7>:W_MemoDonnees<3>:W_MemoDonnees<4>[1,6]:"00"
			GOSUB 100
			ENR_TLGIMPORT=ENR_TLGIMPORTSAVE
		END
	END
	* Fin modif Greg - 13/05/11	

RETURN
****************************************************
55

	READ ENR_TLGHISTORPOINTAGE FROM F.TLGHISTORPOINTAGE, TAB_LIGNE<1> ELSE PRINT "ERREUR LECTURE TLGHISTORPOINTAGE"
	
	W_TransTrouve="NON"
	I=0
	LOOP
		I=I+2
	WHILE I<=W_Max DO
		* Modif Greg - 05/09/14 - Un gros bug empchait de retraiter les MOI du fichier RETRTMOI.rub.
		* Le bug est corrig, par contre il ne faut pas ajouter les MOI dans TLGHISTORMOI : dans ce
		* dernier, il vaut mieux garder les MOI d'origine, plutt que celles du fichier RETRTMOI.rub,
		* qui sont potentiellement diffrentes. Car le but de TLGHISTORMOI est d'tre en quelque sorte
		* la copie de ce qu'on reoit par les prestataires.
		IF W_NomFichier2<>"RETRTMOI.rub" THEN
			READ ENR_TLGHISTORMOI FROM F.TLGHISTORMOI, TAB_LIGNE<1> THEN
				K=DCOUNT(ENR_TLGHISTORMOI<3>,CHAR(253))
				ENR_TLGHISTORMOI<3,K+1>=TAB_LIGNE<I>
				ENR_TLGHISTORMOI<4,K+1>=TAB_LIGNE<I+1>
			END ELSE
				ENR_TLGHISTORMOI<1>=ENR_TLGHISTORPOINTAGE<1>
				ENR_TLGHISTORMOI<2>=ENR_TLGHISTORPOINTAGE<2>
				ENR_TLGHISTORMOI<3>=TAB_LIGNE<I>
				ENR_TLGHISTORMOI<4>=TAB_LIGNE<I+1>
			END
			WRITE ENR_TLGHISTORMOI ON F.TLGHISTORMOI, TAB_LIGNE<1>
		END
		
		IF I=2 THEN
			* Modif Greg - 13/10/11 - DA11081 - On peut maintenant avoir des MOI gnres
			* "sur" les pointages de dbut (dans le cas o nous n'avons pas de pointage de fin).
			EXECUTE 'SELECT TLGPOINTAGE AVEC 2 = "':TAB_LIGNE<1>:'" OR AVEC 1 = "':TAB_LIGNE<1>:'"'
			EXECUTE 'SAUVE-LISTE W_RequetePointage'
			EXECUTE "LISTE W_RequetePointage" RETURNING MSGCODE
			
			IF MSGCODE<1>#209 THEN
				SELECT F.TLGPOINTAGE TO W_RequetePointage
				
				W_FINI="FAUX"
				LOOP
					READNEXT W_ClePointage FROM W_RequetePointage ELSE W_FINI="VRAI"
				WHILE W_FINI="FAUX" DO
					READ ENR_TLGPOINTAGE FROM F.TLGPOINTAGE, W_ClePointage THEN
						W_CleSave=W_ClePointage
						W_TransTrouve="OUI"
						W_FINI="VRAI"
						
						*********************************************************
						* Select de ASSOCIATION pour rcuprer le(s) code(s)    *
						* de(s) l'entit(s) correspondant au code asso DOMITIME *
						*********************************************************
						*W_ReqAsso=""
						*W_CodeAssoTelegestion=W_ClePointage[1,2]
						*EXECUTE 'SELECT ASSOCIATION AVEC 39 = "':W_CodeAssoTelegestion:'" PAR @ID'
						*EXECUTE 'SAUVE-LISTE W_ReqAsso'
						*EXECUTE "LISTE W_ReqAsso" RETURNING MSGCODE

						*IF MSGCODE<1> # 209 THEN
						*	SELECT F.ASSOCIATION TO W_ReqAsso
							
						*	L=0
						*	W_Fin="FAUX"
						*	LOOP
						*		READNEXT W_Cle FROM W_ReqAsso ELSE W_Fin="VRAI"
						*	WHILE W_Fin="FAUX" DO
						*		READ ENR_ASSO FROM F.ASSOCIATION, W_Cle THEN
						*			L=L+1
						*			W_TabAsso<L,1>=W_Cle
						*		END
						*	REPEAT
						*END
					END
				REPEAT
			END				
		END
		
		IF W_TransTrouve="OUI" THEN
			IF ENR_TLGPOINTAGE<5><>"" THEN
				READ ENR_DOMIPARAMINTGR FROM F.DOMITIMEPARAMINTGR, ENR_TLGPOINTAGE<5>[1,3] THEN
					W_MOITrouve="NON"
					W_Sortir="NON"
					J=0
					LOOP
						J=J+1
					WHILE ENR_DOMIPARAMINTGR<3,J>#"" AND W_Sortir="NON" DO
						IF ENR_DOMIPARAMINTGR<3,J>=ENR_TLGPOINTAGE<5> AND ENR_DOMIPARAMINTGR<4,J>=TAB_LIGNE<I> AND (ENR_DOMIPARAMINTGR<5,J>="" OR ENR_DOMIPARAMINTGR<5,J>=TAB_LIGNE<I+1>) THEN
							W_MOITrouve="OUI"
							W_Sortir="OUI"
							J=J-1
						END
					REPEAT

					IF W_MOITrouve="OUI" THEN
						W_DomiDroitsTrouve="NON"
						READ ENR_ACTIVITES FROM F.ACTIVITES, ENR_TLGPOINTAGE<5> THEN
							IF ENR_ACTIVITES<12>="M" THEN
								READ ENR_DOMIDROITS FROM F.DOMITIMEDROITS, W_CleSave[3,5]:W_CleSave[9,5] THEN			
									W_DomiDroitsTrouve="OUI"
								END
							END ELSE
								READ ENR_DOMIDROITS FROM F.DOMITIMEDROITS, W_CleSave[3,5]:ENR_TLGPOINTAGE<5>[1,3] THEN
									W_DomiDroitsTrouve="OUI"
								END
							END
						END
						
						IF W_DomiDroitsTrouve="OUI" THEN
							W_MOIBloquee="NON"
							W_MOITrouveDroits="NON"
							W_NbMV=DCOUNT(ENR_DOMIDROITS<1>, CHAR(253))
							K=0
							W_SaveK=0
							LOOP	
								K=K+1
							WHILE K<=W_NbMV DO
								* Modif Greg - 09/01/14 - Dans le cadre du DA13095, il faut vrifier la valeur. C'est dj fait pour DOMITIMEPARAMINTGR, mais ce n'tait pas encore
								* le cas pour DOMITIMEDROITS. Je rajoute donc la partie entre parenthses : il faut que la valeur soit soit vide, soit gale  celle saisie par
								* l'utilisateur. Si ce n'est pas le cas c'est que ce n'est pas la bonne ligne de MOI.
								IF ENR_DOMIDROITS<2,K>=TAB_LIGNE<I> AND ENR_DOMIDROITS<1,K> = ENR_TLGPOINTAGE<5> AND (ENR_DOMIDROITS<3,J>="" OR ENR_DOMIDROITS<3,J>=TAB_LIGNE<I+1>) THEN
									W_MOITrouveDroits="OUI"
									W_SaveK=K
									IF ENR_DOMIDROITS<7,K>="O" THEN
										W_MOIBloquee="OUI"
									END
								END
							REPEAT
							
							IF W_MOIBloquee="NON" THEN
								IF W_MOITrouveDroits="OUI" THEN
									W_Donnee=ENR_DOMIDROITS<4,W_SaveK>
									GOSUB 70
								END ELSE
									W_Donnee=ENR_DOMIPARAMINTGR<6,J>
									GOSUB 70
								END
							END ELSE
								W_CodeAno="3"
								GOSUB 60
							END
						END ELSE
							W_Donnee=ENR_DOMIPARAMINTGR<6,J>
							GOSUB 70
						END
					END ELSE					
						W_CodeAno="2"
						GOSUB 60
					END
				END ELSE	
					W_CodeAno="2"
					GOSUB 60
				END
			END ELSE
				W_CodeAno="2"
				GOSUB 60
			END
		END ELSE
			W_CodeAno="1"
			GOSUB 60
		END
	REPEAT
		
RETURN
****************************************************
60
	
	READ ENR_TLGANOMOI FROM F.TLGANOMOI, TAB_LIGNE<1> THEN
		ENR_TLGANOMOI<3,-1>=TAB_LIGNE<I>
		ENR_TLGANOMOI<4,-1>=TAB_LIGNE<I+1>
		ENR_TLGANOMOI<5,-1>=W_CodeAno
	END ELSE
		ENR_TLGANOMOI<1>=ENR_TLGHISTORPOINTAGE<1>
		ENR_TLGANOMOI<2>=ENR_TLGHISTORPOINTAGE<2>
		ENR_TLGANOMOI<3>=TAB_LIGNE<I>
		ENR_TLGANOMOI<4>=TAB_LIGNE<I+1>
		ENR_TLGANOMOI<5>=W_CodeAno
	END
	WRITE ENR_TLGANOMOI ON F.TLGANOMOI, TAB_LIGNE<1>
	
RETURN
*****************************************************
70

	* Modif Greg - 09/01/14 - DA13095 - Gestion des nuits.
	* Les utilisateurs peuvent utiliser le code 30 comme MOI spcifiques aux nuits.
	* Si justement la MOI en cours est une MOI code 30, alors on crit directement
	* dans TLGPOINTAGE.
	IF TAB_LIGNE<I>="30" THEN
		READ ENR_TLGPOINTAGE FROM F.TLGPOINTAGE, W_CleSave THEN
			* On renseigne la rubrique de saisie qui devra tre prise en compte pour le "calcul" de la dure.
			ENR_TLGPOINTAGE<18>=W_Donnee
			WRITE ENR_TLGPOINTAGE ON F.TLGPOINTAGE, W_CleSave
		END
	END ELSE
		READ ENR_TLGMOI FROM F.TLGMOI, W_CleSave THEN
			ENR_TLGMOI<1,-1>=TAB_LIGNE<I>
			ENR_TLGMOI<2,-1>=TAB_LIGNE<I+1>
			ENR_TLGMOI<3,-1>=W_Donnee
		END ELSE
			ENR_TLGMOI=""
			ENR_TLGMOI<1>=TAB_LIGNE<I>
			ENR_TLGMOI<2>=TAB_LIGNE<I+1>
			ENR_TLGMOI<3>=W_Donnee
		END
		WRITE ENR_TLGMOI ON F.TLGMOI, W_CleSave
	END
RETURN
******************************************************
* Si plusieurs activits entre un aid et un aidant, *
* on cherche l'activit de l'intervention.           *
******************************************************
80

	W_DateDeb=W_MemoDonnees<3>
	W_DateFin=ENR_TLGIMPORT<3>+1
	
	W_ParamAffichePlanning = "AFFICHEPLANNING |DOMITIME||PMIS|":W_DateDeb:"|":W_DateFin:"|A|":W_MemoDonnees<7>:"|":W_MemoDonnees<1>[3,5]:"|E||||"
	EXECUTE W_ParamAffichePlanning
				
	* On lit les interventions de l'aidant pour le jour voulu
	READ ENR_TPSTEMPO FROM F.TPSTEMPO, "AFFICHEPLANNINGDOMITIME" THEN
		* Les heures retournes par afficheplanning sont en centime, il faut donc convertir l'heure domitime
		W_HeureCent=W_MemoDonnees<4>[4,2]
		W_HeureCent=INT(((W_HeureCent/60)*100)+(1/2))
		IF LEN(W_HeureCent)="1" THEN
			W_HeureCent=W_MemoDonnees<4>[1,2]:"0":W_HeureCent
		END ELSE
			W_HeureCent=W_MemoDonnees<4>[1,2]:W_HeureCent
		END
		
		W_Dif=50
		M=0
		LOOP
			M=M+1
		WHILE ENR_TPSTEMPO<2,1,M><>"" DO
			IF ENR_TPSTEMPO<2,1,M>[1,6]="Interv" THEN
				IF ENR_TPSTEMPO<2,2,M><W_HeureCent THEN
					W_DifTemp=W_HeureCent-ENR_TPSTEMPO<2,2,M>
				END ELSE
					W_DifTemp=ENR_TPSTEMPO<2,2,M>-W_HeureCent
				END
				IF W_DifTemp<=50 AND W_DifTemp<=W_Dif THEN
					* Modif Greg - 27/05/13 - On ne prend que les activits paramtres dans LogisFil
					IF INDEX(TAB_LISTEACT,ENR_TPSTEMPO<2,7,M>,1)<>0 THEN
						W_Activite=ENR_TPSTEMPO<2,7,M>
						W_Dif=W_DifTemp
					END
				END				
			END
		REPEAT
	END

RETURN
******************************************************
* Pour les anomalies bloquantes 5 et 6 (respectivement
* absence de dpart et absence d'arrive), on essaye de
* reconstituer nous-mme l'intervention en fonction
* du planning ou des minutes complmentaires qui ont
* t potentiellement enregistres.
*
* Les horaires de pointage n'tant pas prcisment ceux
* planifis, on laisse une marge de 30 min avant pour les
* horaires de dbut et 30 min aprs pour les horaires de fin
******************************************************
90

	W_TrtDeducAuto="NON"

	* Modif Greg - 25/05/2011 - Avant on ne traitait qu'une seule fois
	* les anomalies. Maintenant on peut les traiter plusieurs fois. Cela
	* permet ventuellement de grer un cas o le planning est cr plusieurs
	* jours aprs le dbut de la tlgestion.
	READ ENR_PERIODESPAIE FROM F.PERIODESPAIE, "1" THEN
		W_DateDebSelect=ICONV("01/":ENR_PERIODESPAIE<1>[5,2]:"/":ENR_PERIODESPAIE<1>[1,4],"D4/")
	END ELSE
		W_DateDebSelect = ICONV("01/01/2011","D4/")
	END
	
	*EXECUTE 'SELECT TLGANOPOINTAGE AVEC 8 = "5" OR = "6" AND AVEC 10 <> "O"'
	EXECUTE 'SELECT TLGANOPOINTAGE AVEC 8 = "5" OR = "6" AND AVEC 3 >= "':W_DateDebSelect:'"'
	EXECUTE 'SAUVE-LISTE W_ReqTlgAno'
	EXECUTE "LISTE W_ReqTlgAno" RETURNING MSGCODE

	IF MSGCODE<1> # 209 THEN
		SELECT F.TLGANOPOINTAGE TO W_ReqTlgAno
		
		W_FiniAno="FAUX"
		LOOP
			READNEXT W_CleTlgAno FROM W_ReqTlgAno ELSE W_FiniAno="VRAI"
		WHILE W_FiniAno="FAUX" DO
			READ ENR_TLGANOPOINTAGE FROM F.TLGANOPOINTAGE,W_CleTlgAno THEN
				W_CleTpsDetailsInterv=""
				*ENR_TLGANOPOINTAGE<10>="O"
				*WRITE ENR_TLGANOPOINTAGE ON F.TLGANOPOINTAGE, W_CleTlgAno
			
				W_CodeAidant=ENR_TLGANOPOINTAGE<1> [3,5]
				W_CodeAide=ENR_TLGANOPOINTAGE<7>
				W_DateDeb=ENR_TLGANOPOINTAGE<3>
				W_DateFin=ENR_TLGANOPOINTAGE<3>
				
				W_Duree=0
				
				W_CleDeb=""
				W_CleFin=""
				
				* Modif Greg - 05/05/11 - Cration de la sub 94.
				GOSUB 94
				
				IF W_AnnulerCreation="NON" THEN
					IF ENR_TLGANOPOINTAGE<8>="6" THEN
						W_MinCompl="FAUX"
						W_CleFin=W_CleTlgAno
						W_HeureFin=ENR_TLGANOPOINTAGE<4>
						W_HeureDeb=""
						* Nous avons un dpart mais pas l'arrive
						
						* Si nous avons des minutes complmentaires, nous calculons
						* l'heure de dbut d'intervention en fonction d'elles.
						* Sinon nous utilisons le planning.
						W_Moi="FAUX"
						READ ENR_TLGANOMOI FROM F.TLGANOMOI, W_CleTlgAno THEN
							W_Moi="VRAI"
							W_Duree=0
							I=0
							LOOP
								I=I+1
							WHILE ENR_TLGANOMOI<3,I>#"" DO
								* On prend le code 21 en dur comme correspondant aux
								* minutes complmentaires. A voir si on garde cette approche.
								IF ENR_TLGANOMOI<3,I>="21" THEN
									W_Duree=W_Duree+ENR_TLGANOMOI<4,I>
								END
							REPEAT
							IF W_Duree=0 THEN
								GOSUB 91
							END ELSE
								W_MinCompl="VRAI"
							END
						END ELSE
							GOSUB 91
						END
						
						IF W_Duree<>0 THEN
							W_Heure=W_HeureFin [1,2]
							W_Min=W_HeureFin [4,2]
							W_Minutes=(W_Heure*60)+W_Min
							W_Minutes=W_Minutes-W_Duree
							
							IF W_Minutes<0 THEN
								W_Minutes=1440+W_Minutes
								W_DateDeb=W_DateDeb-1
							END
							W_Heure=INT(W_Minutes/60)
							W_Min=W_Minutes-(W_Heure*60)
							IF LEN(TRIM(W_Heure))=1 THEN W_Heure="0":W_Heure
							IF LEN(TRIM(W_Min))=2 THEN
								W_HeureDeb=W_Heure:":":W_Min:W_HeureFin [6,3]
							END ELSE
								W_HeureDeb=W_Heure:":0":W_Min:W_HeureFin [6,3]
							END
							
							* Modif Greg - 06/04/11 - Cration de la sub 93.
							GOSUB 93
							
							IF W_AnnulerCreation="NON" THEN
								GOSUB 92
								* Maintenant que l'intervention est dans TLGPOINTAGE, il 
								* faut supprimer l'enregistrement dans TLGANOPOINTAGE.
								
								EXECUTE 'DELETE TLGANOPOINTAGE ':W_CleTlgAno
								
								IF W_Moi="VRAI" THEN
									W_CleTpsDetailsInterv=""
									* Nous sommes ici dans le cas o nous avons une MOI en rapport avec
									* l'intervention. Dans la premire partie du PR, on passe la MOI
									* automatiquement en anomalie si les pointages sont eux mmes en ano.
									* Ici, il faut donc refaire les tests pour la MOI.
									* Afin d'utiliser la procdure dj faite, il faut reconstruire
									* la ligne de MOI comme si elle venait du fichier *.rub.
									* Etant donn que le traitement complet va tre refait, il faut
									* supprimer l'enregistrement au pralable.
									
									EXECUTE 'DELETE TLGANOMOI ':W_CleTlgAno
									
									TAB_LIGNE<1>=W_CleTlgAno
									I=0
									W_Ind=2
									LOOP
										I=I+1
									WHILE ENR_TLGANOMOI<3,I>#"" DO
										IF ENR_TLGANOMOI<3,I>#"21" THEN
											TAB_LIGNE<W_Ind>=ENR_TLGANOMOI<3,I>
											TAB_LIGNE<W_Ind+1>=ENR_TLGANOMOI<4,I>
											W_Ind=W_Ind+2
										END
									REPEAT
									W_Max=W_Ind-1
									IF TAB_LIGNE<2>#"" THEN
										GOSUB 55
									END
								END
							END
						END
					END ELSE
						W_CleDeb=W_CleTlgAno
						* Nous avons une arrive mais pas un dpart
						
						* Nous utilisons le planning pour essayer de trouver
						* l'heure de fin.
						W_HeureDeb=ENR_TLGANOPOINTAGE<4>
						W_HeureFin=""
						
						GOSUB 91
						
						IF W_Duree<>0 THEN
							W_Heure=W_HeureDeb [1,2]
							W_Min=W_HeureDeb [4,2]
							W_Minutes=(W_Heure*60)+W_Min
							W_Minutes=W_Minutes+W_Duree
							
							IF W_Minutes>1440 THEN
								W_Minutes=W_Minutes-1440
								W_DateFin=W_DateFin+1
							END
							W_Heure=INT(W_Minutes/60)
							W_Min=W_Minutes-(W_Heure*60)
							IF LEN(TRIM(W_Heure))=1 THEN W_Heure="0":W_Heure
							IF LEN(TRIM(W_Min))=2 THEN
								W_HeureFin=W_Heure:":":W_Min:W_HeureDeb [6,3]
							END ELSE
								W_HeureFin=W_Heure:":0":W_Min:W_HeureDeb [6,3]
							END
							
							* Modif Greg - 06/04/11 - Cration de la sub 93.
							GOSUB 93
							
							IF W_AnnulerCreation="NON" THEN
								GOSUB 92
							
								EXECUTE 'DELETE TLGANOPOINTAGE ':W_CleTlgAno
							END
						END
					END
				END
			END
		REPEAT
	END

RETURN
*******************************************
* On utilise le planning pour tenter de trouver
* l'intervention correspondant au pointage et
* et trouver l'heure manquante.
*******************************************
91

	W_DureeInt=0
	W_Duree=0
	W_ParamAffichePlanning = "AFFICHEPLANNING |DOMITIME||PMIS|":W_DateDeb:"|":W_DateFin:"|A|":ENR_TLGANOPOINTAGE<7>:"|":ENR_TLGANOPOINTAGE<1>[3,5]:"|E||||"	
	EXECUTE W_ParamAffichePlanning
	
	* On lit les interventions de l'aidant pour le jour voulu
	READ ENR_TPSTEMPO FROM F.TPSTEMPO, "AFFICHEPLANNINGDOMITIME" THEN
		M=0
		LOOP
			M=M+1
		WHILE ENR_TPSTEMPO<2,1,M><>"" DO
			IF ENR_TPSTEMPO<2,1,M>[1,6]="Interv" THEN
				W_CleTpsDetailsInterv=ENR_TPSTEMPO<2,4,M>
				* ATTENTION, les heures retournes par AFFICHEPLANNING sont en centieme,
				* il faut donc les convertir pour les comparer aux heures du traitement
				* et calculer la dure qui servira ensuite.
				IF W_HeureFin#"" THEN
					W_HeureTemp=ENR_TPSTEMPO<2,2,M> [3,2]
					IF W_HeureTemp#0 THEN
						W_HeureTemp=INT(60/(100/W_HeureTemp))
					END
					W_HeureDebInt=ENR_TPSTEMPO<2,2,M> [1,2]
					IF LEN(TRIM(W_HeureTemp))=2 THEN
						W_HeureDebInt=W_HeureDebInt:":":W_HeureTemp
					END ELSE
						W_HeureDebInt=W_HeureDebInt:":":"0":W_HeureTemp
					END
					
					W_HeureTemp=ENR_TPSTEMPO<2,3,M> [3,2]
					IF W_HeureTemp#0 THEN
						W_HeureTemp=INT(60/(100/W_HeureTemp))
					END
					
					W_HeureTemp=W_HeureTemp+30
					IF W_HeureTemp>=60 THEN
						W_HeureTemp=W_HeureTemp-60
						W_HeureFinInt=ENR_TPSTEMPO<2,3,M> [1,2]
						W_HeureFinInt=W_HeureFinInt+1
					END ELSE
						W_HeureFinInt=ENR_TPSTEMPO<2,3,M> [1,2]
					END

					IF LEN(TRIM(W_HeureFinInt))=1 THEN
						W_HeureFinInt="0":W_HeureFinInt
					END
					
					IF LEN(TRIM(W_HeureTemp))=2 THEN
						W_HeureFinInt=W_HeureFinInt:":":W_HeureTemp
					END ELSE
						W_HeureFinInt=W_HeureFinInt:":":"0":W_HeureTemp
					END					
					
					W_HeureDebInt=W_HeureDebInt:":00"
					W_HeureFinInt=W_HeureFinInt:":00"
					
					IF W_HeureFin>=W_HeureDebInt AND W_HeureFin<=W_HeureFinInt THEN
						W_DureeInt=ENR_TPSTEMPO<2,5,M>
						IF M=1 AND ENR_TPSTEMPO<2,2,M>="0000" THEN
							W_ParamAffichePlanning = "AFFICHEPLANNING |DOMI||PMIS|":W_DateDeb-1:"|":W_DateFin-1:"|A|":ENR_TLGANOPOINTAGE<7>:"|":ENR_TLGANOPOINTAGE<1>[3,5]:"|E||||"
							EXECUTE W_ParamAffichePlanning
							
							READ ENR_TPSTEMPO2 FROM F.TPSTEMPO, "AFFICHEPLANNINGDOMI" THEN
								W_DernMV=DCOUNT(ENR_TPSTEMPO2<2,3>, CHAR(252))
								IF ENR_TPSTEMPO2<2,3,W_DernMV>="2400" THEN
									W_DureeInt=W_DureeInt+ENR_TPSTEMPO2<2,5,W_DernMV>
								END
							END
						END
					END
				END ELSE
					W_HeureTemp=ENR_TPSTEMPO<2,2,M> [3,2]
					IF W_HeureTemp#0 THEN
						W_HeureTemp=INT(60/(100/W_HeureTemp))
					END
										
					W_HeureTemp=W_HeureTemp-30
					IF W_HeureTemp<0 THEN
						W_HeureTemp=60+W_HeureTemp
						W_HeureDebInt=ENR_TPSTEMPO<2,2,M> [1,2]
						W_HeureDebInt=W_HeureDebInt-1
					END ELSE
						W_HeureDebInt=ENR_TPSTEMPO<2,2,M> [1,2]
					END
					IF LEN(TRIM(W_HeureDebInt))=1 THEN
						W_HeureDebInt="0":W_HeureDebInt
					END
					IF LEN(TRIM(W_HeureTemp))=2 THEN
						W_HeureDebInt=W_HeureDebInt:":":W_HeureTemp
					END ELSE
						W_HeureDebInt=W_HeureDebInt:":":"0":W_HeureTemp
					END					

					W_HeureTemp=ENR_TPSTEMPO<2,3,M> [3,2]
					IF W_HeureTemp#0 THEN
						W_HeureTemp=INT(60/(100/W_HeureTemp))
					END
					W_HeureFinInt=ENR_TPSTEMPO<2,3,M> [1,2]
					IF LEN(TRIM(W_HeureTemp))=2 THEN
						W_HeureFinInt=W_HeureFinInt:":":W_HeureTemp
					END ELSE
						W_HeureFinInt=W_HeureFinInt:":":"0":W_HeureTemp
					END
					
					W_HeureDebInt=W_HeureDebInt:":00"
					W_HeureFinInt=W_HeureFinInt:":00"
					
					IF W_HeureDeb>=W_HeureDebInt AND W_HeureDeb<=W_HeureFinInt THEN
						W_DureeInt=ENR_TPSTEMPO<2,5,M>
						IF M=DCOUNT(ENR_TPSTEMPO<2,1>, CHAR(252)) AND ENR_TPSTEMPO<2,3,M>="2400" THEN
							W_ParamAffichePlanning = "AFFICHEPLANNING |DOMI||PMIS|":W_DateDeb+1:"|":W_DateFin+1:"|A|":ENR_TLGANOPOINTAGE<7>:"|":ENR_TLGANOPOINTAGE<1>[3,5]:"|E||||"
							EXECUTE W_ParamAffichePlanning
							
							READ ENR_TPSTEMPO2 FROM F.TPSTEMPO, "AFFICHEPLANNINGDOMI" THEN
								IF ENR_TPSTEMPO2<2,2,1>="0000" THEN
									W_DureeInt=W_DureeInt+ENR_TPSTEMPO2<2,5,1>
								END
							END
						END
					END
				END
				
				W_DureeInt=STR("0",4-LEN(W_DureeInt)):W_DureeInt
				
				W_HeureTemp=W_DureeInt [3,2]
				IF W_HeureTemp>0 THEN
					W_HeureTemp=INT(60/(100/W_HeureTemp))
				END
				
				W_Duree=W_DureeInt [1,2]
				W_Duree=W_Duree*60
				W_Duree=W_Duree+W_HeureTemp
			END
		REPEAT
	END
RETURN
*******************************************
* Une fois qu'on a reconstitu l'intervention,
* il faut refaire la srie de tests normale.
*******************************************
92

	W_MemoDonnees=""
	W_MemoDonnees<1>=ENR_TLGANOPOINTAGE<1>
	W_MemoDonnees<2>=""
	W_MemoDonnees<3>=W_DateDeb
	W_MemoDonnees<4>=W_HeureDeb
	W_MemoDonnees<5>=""
	W_MemoDonnees<6>=ENR_TLGANOPOINTAGE<6>
	W_MemoDonnees<7>=ENR_TLGANOPOINTAGE<7>
	W_MemoDonnees<8>=""
	W_MemoDonnees<9>=""
	W_MemoDonnees<10>=W_CleDeb

	ENR_TLGIMPORT=""
	ENR_TLGIMPORT<1>=""
	ENR_TLGIMPORT<2>=""
	ENR_TLGIMPORT<3>=W_DateFin
	ENR_TLGIMPORT<4>=W_HeureFin
	ENR_TLGIMPORT<5>=""
	ENR_TLGIMPORT<6>=""
	ENR_TLGIMPORT<7>=""
	ENR_TLGIMPORT<8>=ENR_TLGANOPOINTAGE<9>
	IF ENR_TLGIMPORT<8>#"" THEN ENR_TLGIMPORT<8>=ENR_TLGIMPORT<8>:" "
	IF ENR_TLGANOPOINTAGE<8>="6" THEN
		IF W_MinCompl="FAUX" THEN
			ENR_TLGIMPORT<8>=ENR_TLGIMPORT<8>:"Deduction automatique de l'arrivee"
		END ELSE
			ENR_TLGIMPORT<8>=ENR_TLGIMPORT<8>:"Deduction automatique de l'arrivee via min. compl."
		END
	END ELSE
		ENR_TLGIMPORT<8>=ENR_TLGIMPORT<8>:"Deduction automatique du depart"
	END
	ENR_TLGIMPORT<9>=W_CleFin
	
	* La procdure 50, lorsqu'elle est appele dans la premire partie du programme,
	* supprime les enregistrements de TLGIMPORT.
	* Pour la partie du programme o nous sommes, nous allons fournir de fausses cls
	*  la procdure. Celle-ci excutera le code pour supprimer les enregistrements, 
	* mais cela ne fera qu'chouer sans pour autant stopper le programme.
	W_MemoDonnees<8>="FAUSSECLE1"
	W_CleTlgImport="FAUSSECLE2"
	
	GOSUB 40
	GOSUB 50
	TAB_JOURNAL<15>=TAB_JOURNAL<15>+1
	
	W_CleSave=W_MemoDonnees<1>:W_MemoDonnees<7>:W_MemoDonnees<3>:W_MemoDonnees<4>
	
RETURN
*******************************************
* Modif Greg - 06/04/11
* Lors de la dduction automatique, avant d'enregistrer
* une intervention avec l'heure dduite, on s'assure
* que  ne cr pas de chevauchement. Si c'est le cas,
* on "annule" la cration de l'intervention.
* L'utilisateur verra alors l'anomalie dans le moniteur
* (pour pointage manquant) et en double-cliquant dessus,
* il pourra voir dans l'aide  la dcision qu'il y a
* dj une intervention sur la mme plage horaire
* (nouvelle fonctionnalit mise en place il y a quelques
* jours : DA11033).
*******************************************
93

	W_AnnulerCreation="NON"
	
    HreDeb = W_HeureDeb[1,2]:W_HeureDeb[4,2]
    HreFin = W_HeureFin[1,2]:W_HeureFin[4,2]
    
    IF W_DateFin > W_DateDeb THEN HreFin = HreFin + 2400
    
	W_ReqTlg=""
    EXECUTE 'SSELECT TLGPOINTAGE AVEC CodeAidant = "':ENR_TLGANOPOINTAGE<1>[3,5]:'" AND AVEC 3 >= "':W_DateDeb:'" AND AVEC DateDebInterv <= "':W_DateFin:'" PAR DateDebInterv PAR HeureDebInterv PAR 4'
	EXECUTE 'SAUVE-LISTE W_ReqTlg'
	EXECUTE "LISTE W_ReqTlg" RETURNING MSGCODE

	IF MSGCODE<1> # 209 THEN
		SELECT F.TLGPOINTAGE TO W_ReqTlg
		
		W_FiniTlgVal="FAUX"
		LOOP
			READNEXT W_CleTlgVal FROM W_ReqTlg ELSE W_FiniTlgVal="VRAI"
		WHILE W_FiniTlgVal="FAUX" DO
			READ ENR_TLGPOINTAGE FROM F.TLGPOINTAGE,W_CleTlgVal THEN
				IF ENR_TLGPOINTAGE<7> <> "" THEN
					W_HeureDebTlg = ENR_TLGPOINTAGE<7>[1,2]:ENR_TLGPOINTAGE<7>[4,2]
				END ELSE
					W_HeureDebTlg = W_CleTlgVal[19,2]:W_CleTlgVal[22,2]
				END
				IF ENR_TLGPOINTAGE<8> <> "" THEN
					W_HeureFinTlg = ENR_TLGPOINTAGE<8>[1,2]:ENR_TLGPOINTAGE<8>[4,2]
				END ELSE
					W_HeureFinTlg = ENR_TLGPOINTAGE<4>[1,2]:ENR_TLGPOINTAGE<4>[4,2]
				END
				
				IF W_CleTlgVal[14,5] < W_DateDeb THEN
					W_HeureDebTlg = W_HeureDebTlg - 2400
				END
				IF ENR_TLGPOINTAGE<3> > W_CleTlgVal[14,5] THEN
					W_HeureFinTlg = W_HeureFinTlg + 2400
				END
				IF W_CleTlgVal[14,5] > W_DateDeb THEN
					W_HeureDebTlg = W_HeureDebTlg + 2400
				END
				
				IF W_HeureDebTlg < HreFin AND W_HeureFinTlg > HreDeb THEN
					W_AnnulerCreation="OUI"
					EXECUTE 'EFFACER-LISTE W_ReqTlg'
					RETURN
				END
			END
		REPEAT
    END

	EXECUTE 'EFFACER-LISTE W_ReqTlg'
RETURN
*******************************************
* Modif Greg - 05/05/11 - Ajout de cette procdure
* Avant de faire la dduction automatique, on "regarde"
* si on ne peut pas relier le pointage a une intervention
* qui a t gnre via une dduction (le pointage
* de l'anomalie doit alors tre complmentaire de
* celui  partir duquel une dduction a t faite.
*******************************************
94

	W_AnnulerCreation="NON"
    
    W_ReqTlg=""
	EXECUTE 'SSELECT TLGPOINTAGE AVEC CodeAidant = "':ENR_TLGANOPOINTAGE<1>[3,5]:'" AND AVEC CodeAide = "':ENR_TLGANOPOINTAGE<7>:'" AND AVEC 3 >= "':ENR_TLGANOPOINTAGE<3>:'" AND AVEC DateDebInterv <= "':ENR_TLGANOPOINTAGE<3>:'" PAR DateDebInterv PAR HeureDebInterv PAR 4'
	EXECUTE 'SAUVE-LISTE W_ReqTlg'
	EXECUTE "LISTE W_ReqTlg" RETURNING MSGCODE

	IF MSGCODE<1> # 209 THEN
		SELECT F.TLGPOINTAGE TO W_ReqTlg
		
		W_FiniTlgVal="FAUX"
		LOOP
			READNEXT W_CleTlgVal FROM W_ReqTlg ELSE W_FiniTlgVal="VRAI"
		WHILE W_FiniTlgVal="FAUX" DO
			READ ENR_TLGPOINTAGE FROM F.TLGPOINTAGE,W_CleTlgVal THEN
				W_HeureDebTlg = W_CleTlgVal[19,8]
				W_HeureFinTlg = ENR_TLGPOINTAGE<4>
				
				W_TestRelier="NON"
				
				IF ENR_TLGANOPOINTAGE<5>="1" THEN
					IF ENR_TLGPOINTAGE<1>="" AND ENR_TLGPOINTAGE<2><>"" THEN
						IF W_HeureDebTlg[4,2]<"15" THEN
							W_Min=W_HeureDebTlg[4,2]
							W_Min=60+(W_Min-15)
							W_HeureDebTlg=W_HeureDebTlg[1,2]-1:W_Min "R%2":W_HeureDebTlg[7,2]
						END ELSE
							W_HeureDebTlg=W_HeureDebTlg[1,2]:W_HeureDebTlg[4,2]-15 "R%2":W_HeureDebTlg[7,2]
						END
						* Le +1-1  la fin est l pour "supprimer" le potentiel zro qu'il peut y avoir au dbut
						* vu qu' la base on rcupre une chaine de caractre qui peut tre par exemple 09:10:52.
						W_HeureFinTlg=(W_HeureFinTlg[1,2]:W_HeureFinTlg[4,2]:W_HeureFinTlg[7,2])+1-1
						W_TestRelier="OUI"
					END
				END ELSE
					IF ENR_TLGPOINTAGE<1><>"" AND ENR_TLGPOINTAGE<2>="" THEN
						* Le +1-1  la fin est l pour "supprimer" le potentiel zro qu'il peut y avoir au dbut
						* vu qu' la base on rcupre une chaine de caractre qui peut tre par exemple 09:10:52.					
						W_HeureDebTlg=(W_HeureDebTlg[1,2]:W_HeureDebTlg[4,2]:W_HeureDebTlg[7,2])+1-1
						IF W_HeureFinTlg[4,2]>="45" THEN
							W_Min=W_HeureFinTlg[4,2]
							W_Min=15-(60-W_Min)
							W_HeureFinTlg=W_HeureFinTlg[1,2]+1:W_Min "R%2":W_HeureFinTlg[7,2]
						END ELSE
							W_HeureFinTlg=W_HeureFinTlg[1,2]:W_HeureFinTlg[4,2]+15 "R%2":W_HeureFinTlg[7,2]
						END
						W_TestRelier="OUI"
					END
				END
				
				IF W_TestRelier="OUI" THEN
					W_HeureRef=ENR_TLGANOPOINTAGE<4>[1,2]:ENR_TLGANOPOINTAGE<4>[4,2]:ENR_TLGANOPOINTAGE<4>[7,2]
					IF W_HeureDebTlg<=W_HeureRef AND W_HeureFinTlg>=W_HeureRef THEN
						IF ENR_TLGANOPOINTAGE<5>="1" THEN
							W_DateDeb=ENR_TLGANOPOINTAGE<3>
							W_HeureDeb=ENR_TLGANOPOINTAGE<4>
							W_DateFin=ENR_TLGPOINTAGE<3>
							W_HeureFin=ENR_TLGPOINTAGE<4>
							W_TlgDeb=W_CleTlgAno
							W_TlgFin=ENR_TLGPOINTAGE<2>
						END ELSE
							W_DateDeb=W_CleTlgVal[14,5]
							W_HeureDeb=W_CleTlgVal[19,8]
							W_DateFin=ENR_TLGANOPOINTAGE<3>
							W_HeureFin=ENR_TLGANOPOINTAGE<4>
							W_TlgDeb=ENR_TLGPOINTAGE<1>
							W_TlgFin=W_CleTlgAno					
						END
						
						ENR_TLGVAL=""
						ENR_TLGVAL<1>=W_TlgDeb
						ENR_TLGVAL<2>=W_TlgFin
						ENR_TLGVAL<3>=W_DateFin
						ENR_TLGVAL<4>=W_HeureFin
						ENR_TLGVAL<5>=ENR_TLGPOINTAGE<5>
						ENR_TLGVAL<10>="Rempl. dduc. auto. par un pointage rel le ":OCONV(DATE(),"D4/"):". ":ENR_TLGPOINTAGE<10>
						
						EXECUTE 'DELETE TLGANOPOINTAGE ':W_CleTlgAno
						
						* Modif Greg - 15/12/15 - Dans la v580, on a mis en place la gestion de TLGPOINTAGESUPPR.
						* Quand un TLGPOINTAGE est supprim dfinitivement, on renseigne le nouveau fichier.
						* Ca n'a pas t fait dans les cas o la suppression est suivie d'une cration ou compltion d'une autre intervention.
						* Par exemple si la suppression est de au fait que la cl change, alors on part du principe qu'il ne s'agit pas d'une
						* vraie suppression, car on garde tout de mme une intervention.
						* Mais il s'avre qu'on a un souci quelque part : TLGPOINTAGESQL a des suppressions "dfinitives" qu'on ne retrouve pas
						* dans TLGPOINTAGESUPPR.
						* Comme on ne sait pas d'o vient le problme, il a t dcid de renseigner TLGPOINTAGESUPPR  chaque suppression, qu'elle
						* soit dfinitive ou dans le cadre d'une gestion plus globale, comme ici : on a 1 pointage en anomalie qui permet de complter
						* une intervention dj existante. On supprime l'intervention existe et on cr la nouvelle qui est l'unification des donnes
						W_DateSuppr=OCONV(DATE(),"D4/")
						W_TimeSuppr=TIMEDATE()
						W_TimeSuppr=W_TimeSuppr[1,2]:W_TimeSuppr[4,2]
						ENR_TLGPOINTAGESUPPR=""
						ENR_TLGPOINTAGESUPPR=ENR_TLGPOINTAGE
						ENR_TLGPOINTAGESUPPR<10>=ENR_TLGPOINTAGESUPPR<10>:" SUPPRESSION VIA IMPORTPOINTAGE - Le ":W_DateSuppr:"  ":W_TimeSuppr:"."
						ENR_TLGPOINTAGESUPPR<10>=ENR_TLGPOINTAGESUPPR<10>:" Nouvelle cle : ":W_CleTlgVal[1,13]:W_DateDeb:W_HeureDeb
						WRITE ENR_TLGPOINTAGESUPPR ON F.TLGPOINTAGESUPPR, W_CleTlgVal						
						
						EXECUTE 'DELETE TLGPOINTAGE ':W_CleTlgVal
						WRITE ENR_TLGVAL ON F.TLGPOINTAGE, W_CleTlgVal[1,13]:W_DateDeb:W_HeureDeb
						W_AnnulerCreation="OUI"
						EXECUTE 'EFFACER-LISTE W_ReqTlg'
						
						* Modif Greg - 08/02/12 - Si le pointage en cours de traitement a pu tre reli  une intervention qui avait
						* eu une dduction automatique, il y a peut-tre des MOI qui avaient t mises en anomalie et qui peuvent
						* tre retraites (cas qui peut se produire quand le pointage de fin est reu en retard par rapport aux MOI).
						W_Aidant=W_CleTlgVal[3,5]
						W_Aide=W_CleTlgVal[9,5]
						W_CleMoi=W_CleTlgVal[1,13]:W_DateDeb:W_HeureDeb
						IF ENR_TLGVAL<2><>"" THEN
							W_NumTransaction=ENR_TLGVAL<2>
						END ELSE
							IF ENR_TLGVAL<1><>"" THEN
								W_NumTransaction=ENR_TLGVAL<1>
							END
						END
						GOSUB 95
						* Fin modif Greg - 08/02/12
						
						RETURN
					END
				END
			END
		REPEAT
    END

	EXECUTE 'EFFACER-LISTE W_ReqTlg'
RETURN
****************************************
* Modif Greg - 08/02/12 - Cration de la procdure.
95

READ ENR_TLGANOMOI FROM F.TLGANOMOI, W_NumTransaction THEN
	IF ENR_TLGVAL<5><>"" THEN
		READ ENR_DOMIPARAMINTGR FROM F.DOMITIMEPARAMINTGR, ENR_TLGVAL<5>[1,3] THEN
			READ ENR_TLGHISTORPOINTAGE FROM F.TLGHISTORPOINTAGE, W_NumTransaction THEN
				EXECUTE "DELETE TLGANOMOI ":W_NumTransaction
			
				TAB_MOI=ENR_TLGANOMOI
				ENR_TLGANOMOI=""
			
				FOR I95=1 TO DCOUNT(TAB_MOI<3>,CHAR(253))
					W_Valider="NON"
					
					W_MOITrouve="NON"
					W_Sortir95="NON"
					J95=0
					LOOP
						J95=J95+1
					WHILE ENR_DOMIPARAMINTGR<3,J95><>"" AND W_Sortir95="NON"
						IF ENR_DOMIPARAMINTGR<3,J95>=ENR_TLGVAL<5> AND ENR_DOMIPARAMINTGR<4,J95>=TAB_MOI<3,I95> THEN
							W_MOITrouve="OUI"
							W_Sortir95="OUI"
							J95=J95-1
						END
					REPEAT
					
					IF W_MOITrouve="OUI" THEN
						W_DomiDroitsTrouve="NON"
						READ ENR_ACTIVITES FROM F.ACTIVITES, ENR_TLGVAL<5> THEN
							IF ENR_ACTIVITES<12>="M" THEN
								READ ENR_DOMIDROITS FROM F.DOMITIMEDROITS, W_Aidant:W_Aide THEN W_DomiDroitsTrouve="OUI"
							END ELSE
								READ ENR_DOMIDROITS FROM F.DOMITIMEDROITS, W_Aidant:ENR_TLGVAL<5>[1,3] THEN W_DomiDroitsTrouve="OUI"
							END
						END
						
						IF W_DomiDroitsTrouve="OUI" THEN
							W_MOIBloquee="NON"
							W_MOITrouveDroits="NON"
							W_NbMV=DCOUNT(ENR_DOMIDROITS<1>, CHAR(253))
							K95=0
							W_SaveK=0
							LOOP	
								K95=K95+1
							WHILE K95<=W_NbMV DO
								IF ENR_DOMIDROITS<2,K95>=TAB_MOI<3,I95> AND ENR_DOMIDROITS<1,K95>=ENR_TLGVAL<5> THEN
									W_MOITrouveDroits="OUI"
									W_SaveK=K95
									IF ENR_DOMIDROITS<7,K95>="O" THEN
										W_MOIBloquee="OUI"
									END
								END
							REPEAT
							
							IF W_MOIBloquee="NON" THEN
								IF W_MOITrouveDroits="OUI" THEN
									W_Donnee=ENR_DOMIDROITS<4,W_SaveK>
									GOSUB 98
								END ELSE
									W_Donnee=ENR_DOMIPARAMINTGR<6,J95>
									GOSUB 98
								END
							END ELSE
								W_CodeAno="3"
								GOSUB 97
							END
						END ELSE
							W_Donnee=ENR_DOMIPARAMINTGR<6,J95>
							GOSUB 98
						END
					END ELSE
						W_CodeAno="2"
						GOSUB 97
					END
				NEXT I95
			END ELSE
				GOSUB 96
			END
		END ELSE
			GOSUB 96
		END
	END ELSE
		GOSUB 96
	END
END

RETURN
****************************************
* Modif Greg - 08/02/12 - Cration de la procdure.
96

	FOR I96=1 TO DCOUNT(TAB_MOI<3>,CHAR(253))
		ENR_TLGANOMOI<5,I96>="2"
	NEXT I96
	WRITE ENR_TLGANOMOI ON F.TLGANOMOI, W_NumTransaction

RETURN
****************************************
* Modif Greg - 08/02/12 - Cration de la procdure.
97

	READ ENR_TLGANOMOI FROM F.TLGANOMOI, W_NumTransaction THEN
		ENR_TLGANOMOI<3,-1>=TAB_MOI<3,I95>
		ENR_TLGANOMOI<4,-1>=TAB_MOI<4,I95>
		ENR_TLGANOMOI<5,-1>=W_CodeAno
	END ELSE
		ENR_TLGANOMOI=""
		ENR_TLGANOMOI<1>=ENR_TLGHISTORPOINTAGE<1>
		ENR_TLGANOMOI<2>=ENR_TLGHISTORPOINTAGE<2>
		ENR_TLGANOMOI<3>=TAB_MOI<3,I95>
		ENR_TLGANOMOI<4>=TAB_MOI<4,I95>
		ENR_TLGANOMOI<5>=W_CodeAno
	END
	WRITE ENR_TLGANOMOI ON F.TLGANOMOI, W_NumTransaction
						
RETURN
****************************************
* Modif Greg - 08/02/12 - Cration de la procdure.
98
	
	READ ENR_TLGMOI FROM F.TLGMOI, W_CleMoi THEN
		ENR_TLGMOI<1,-1>=TAB_MOI<3,I95>
		ENR_TLGMOI<2,-1>=TAB_MOI<4,I95>
		ENR_TLGMOI<3,-1>=W_Donnee
	END ELSE
		ENR_TLGMOI=""
		ENR_TLGMOI<1>=TAB_MOI<3,I95>
		ENR_TLGMOI<2>=TAB_MOI<4,I95>
		ENR_TLGMOI<3>=W_Donnee
	END
	WRITE ENR_TLGMOI ON F.TLGMOI, W_CleMoi
	
RETURN
****************************************
* Comparaison avec le planning DA11042 *
****************************************
100

	IF ENR_TLGIMPORT<5>="2" THEN RETURN

	W_Hre=ENR_TLGIMPORT<4>[1,2]
	W_Min=ENR_TLGIMPORT<4>[4,2]
	
	W_HreRefDeb=""
	W_HreRefFin=""
	
	W_MinCalc=INT((W_Min/60)*100) "R%2"
	W_HreTlg=W_Hre:W_MinCalc
	
	* Modif Greg - 30/04/13 - La marge devient paramtrable.
	* A l'occasion, je modifie compltement l'algo pour qu'il soit plus gnrique
	* (avant comme la marge tait en dur je faisais des tests directement sur les
	* minutes de l'horaire pour orienter les calculs, mais aprs coup je vois que
	*  demandait autant de lignes de code).
	READ ENR_MARGE FROM F.TLGPARAM, "MARGECTRLEFFECTIVITE" ELSE ENR_MARGE=""
	IF ENR_MARGE<1>="" THEN
		W_Marge=30
	END ELSE
		W_Marge=ENR_MARGE<1>
	END
	
	W_Marge=INT((W_Marge/60*100)+(1/2))
	W_MargeFormat=W_Marge "R%4"	
	
	IF W_MargeFormat<=W_HreTlg THEN
		W_JMoins1="NON"
		W_HreRefDeb=W_HreTlg-W_Marge
	END ELSE
		W_JMoins1="OUI"
		W_HreRefDeb=2400-(W_MargeFormat-W_HreTlg)
	END
	W_HreRefDeb=W_HreRefDeb "R%4"
	
	W_HreRefFin=W_HreTlg+W_Marge
	W_HreRefFin=W_HreRefFin "R%4"
	IF W_HreRefFin>2400 THEN
		W_JPlus1="OUI"
		W_HreRefFin=W_HreRefFin-2400
		W_HreRefFin=W_HreRefFin "R%4"
	END ELSE
		W_JPlus1="NON"
	END
	* Fin modif Greg - 30/04/13
	
	W_DiffHeure=999999
	W_CleSave=""
	
	W_ReqVerif=""
	W_Select=""
	
	* Modif Greg - 30/04/13 - A l'occasion de la modification pour tenir compte d'une marge variable,
	* je modifie le SELECT pour qu'il gre correctement les interventions de nuit.
	W_Select='SSELECT TLGVERIFPLG'
	W_SelectPart1=' AVEC 0 = "':ENR_TLGIMPORT<1>[3,5]:ENR_TLGIMPORT<7>:']" AND AVEC 0 = "[P"'
	W_SelectPart2=' OR AVEC 0 = "':ENR_TLGIMPORT<1>[3,5]:ENR_TLGIMPORT<7>:']" AND AVEC 0 = "[P"'
	
	IF W_JMoins1 = "OUI" THEN
		W_SelectPart1=W_SelectPart1:' AND AVEC DateDebut = "':ENR_TLGIMPORT<3>:'" AND AVEC HeureDebut >= "0000" AND <= "':W_HreRefFin:'"'
		W_SelectPart2=W_SelectPart2:' AND AVEC DateDebut = "':ENR_TLGIMPORT<3>-1:'" AND AVEC HeureDebut >= "':W_HreRefDeb:'" AND <= "2400"'	
	END ELSE
		IF W_JPlus1 = "OUI" THEN
			W_SelectPart1=W_SelectPart1:' AND AVEC DateDebut = "':ENR_TLGIMPORT<3>:'" AND AVEC HeureDebut >= "':W_HreRefDeb:'" AND <= "2400"'
			W_SelectPart2=W_SelectPart2:' AND AVEC DateDebut = "':ENR_TLGIMPORT<3>+1:'" AND AVEC HeureDebut >= "0000" AND <= "':W_HreRefFin:'"'
		END ELSE
			W_SelectPart1=W_SelectPart1:' AND AVEC DateDebut = "':ENR_TLGIMPORT<3>:'" AND AVEC HeureDebut >= "':W_HreRefDeb:'" AND <= "':W_HreRefFin:'"'
			W_SelectPart2=""
		END
	END
	
	W_Select=W_Select:W_SelectPart1:W_SelectPart2
	* Fin modif Greg - 30/04/13
	
	EXECUTE W_Select
	EXECUTE 'SAUVE-LISTE W_ReqVerif'
	EXECUTE "LISTE W_ReqVerif" RETURNING MSGCODE
	
	IF MSGCODE<1> # 209 THEN
		SELECT F.TLGVERIFPLG TO W_ReqVerif

		W_FinVerif="FAUX"
		LOOP
			READNEXT W_CleVerif FROM W_ReqVerif ELSE W_FinVerif="VRAI"
		WHILE W_FinVerif="FAUX" DO
			READ ENR_TLGVERIFPLG FROM F.TLGVERIFPLG, W_CleVerif THEN
				
				* Les tests suivants sont l pour grer le cas des donnes restes
				* dans TLGIMPORT. On ne peut pas empcher qu'elles soient retraites,
				* mais on peut empcher qu'elles provoquent des erreurs.
				* On ne traite que les horaires de dbut. On considre qu'entre le
				* moment o un pointage a t trait la premire fois et le moment
				* o il est trait la seconde fois aprs tre rest un certain temps
				* dans TLGIMPORT, l'heure n'a pas chang. La slection nous permet
				* donc de retrouver l'enregistrement qui avait t li au pointage.
				* Si on est sur un enregistrement qui est dj li aux donnes tlg
				* qu'on traite, alors on quitte la procdure.
				
				IF ENR_TLGVERIFPLG<5>=W_CleTlgAVerif THEN
					RETURN
				END
				
				* Si on est sur un enregistrement qui a un numro de transaction qui
				* tait rest dans TLGIMPORT, celle-ci peut tre retraite et tre
				* valide. Dans ce cas l, il faut que l'enregistrement qui est li
				* au numro de transaction devienne li  l'intervention valide.
				* Mais il ne faut pas quitter la procdure pour autant : il faut
				IF LEN(W_CleTlgAVerif) = 26 AND ENR_TLGVERIFPLG<5>=ENR_TLGPOINTAGE<1> THEN
					ENR_TLGVERIFPLG<5>=W_CleTlgAVerif

					* Modif Greg - 13/09/13 - Ajout de la procdure 101
					GOSUB 101					
					
					WRITE ENR_TLGVERIFPLG ON F.TLGVERIFPLG, W_CleVerif
					RETURN
				END

				* Arriv ici, on peut encore avoir des enregistrements qui ne sont pas lis
				* au pointage qu'on traite, mais qui peuvent tre lis  un autre pointage.
				* Or un enregistrement peut tre li  un seul pointage.
				* Modif Greg - 03/04/14 - Avant, on sortait de la procdure ds qu'on trouvait un
				* TLGVERIFPLG avec l'att. 5 renseign. Ce qui n'est pas logique : ce n'est pas
				* parce que le TLGVERIFPLG en cours est dj li qu'il faut sortir compltement
				* de la procdure : il faut juste passer au TLGVERIFPLG suivant.
				* Ca ne s'tait pas vu car avant on avait une marge en dur de 30 minutes, ce
				* qui limitait le nombre de TLGVERIFPLG slectionns. Les "dgts" taient donc
				* limits.
				* Mais depuis un an, la marge est paramtrable. Les structures ont gard la marge
				*  30 minutes, sauf Anjou Soins Services qui est pass  une marge de 4h rcemment.
				* Et l forcment, presque automatiquement, on slectionne plusieurs TLGVERIFPLG. Et
				* presque automatiquement, il y en a un qui a l'att. 5 renseign.
				* Du coup le problme est beaucoup plus visible.
				* Je mets en commentaire le code qui suit et plus bas, j'ajoute un test pour tester si
				* l'att. 5 est renseign : si ce n'est pas le cas, alors le TLGVERIFPLG est peut-tre
				* le bon donc on fait les calculs dj existants.
				*IF ENR_TLGVERIFPLG<5><>"" THEN
				*	RETURN
				*END
				
				IF ENR_TLGVERIFPLG<5>="" THEN
					W_DiffTemp=0
					IF W_HreTlg>W_CleVerif[16,4] THEN
						W_DiffTemp=W_HreTlg-W_CleVerif[16,4]
					END ELSE
						W_DiffTemp=W_CleVerif[16,4]-W_HreTlg
					END
					
					IF W_DiffTemp<W_DiffHeure THEN
						W_CleSave=W_CleVerif
						W_DiffHeure=W_DiffTemp
					END
				END
			END
		REPEAT
	END
	
	IF W_CleSave<>"" THEN
		READ ENR_TLGVERIFPLG FROM F.TLGVERIFPLG, W_CleSave THEN
			ENR_TLGVERIFPLG<5>=W_CleTlgAVerif
			
			* Modif Greg - 13/09/13 - Ajout de la procdure 101
			GOSUB 101
			
			WRITE ENR_TLGVERIFPLG ON F.TLGVERIFPLG, W_CleSave
		END
	END ELSE
		ENR_TLGVERIFPLG=""
		IF LEN(W_CleTlgAVerif) = 26 THEN
			ENR_TLGVERIFPLG<1>=ENR_TLGPOINTAGE<3>
			
			W_Hre=ENR_TLGPOINTAGE<4>[1,2]
			W_Min=ENR_TLGPOINTAGE<4>[4,2]
			W_MinCalc=INT((W_Min/60)*100) "R%2"
			W_HreTlgFin=W_Hre:W_MinCalc
			ENR_TLGVERIFPLG<2>=W_HreTlgFin
		END
		
		ENR_TLGVERIFPLG<5>=W_CleTlgAVerif
		
		* Modif Greg - 01/03/13 - J'horodate la cration de l'enregistrement
		ENR_TLGVERIFPLG<6>=DATE()
		ENR_TLGVERIFPLG<7>=TIMEDATE()[1,8]
		
		WRITE ENR_TLGVERIFPLG ON F.TLGVERIFPLG, ENR_TLGIMPORT<1>[3,5]:ENR_TLGIMPORT<7>:ENR_TLGIMPORT<3>:W_HreTlg:"T"
	END

RETURN
**********************************************
* Recherche et comparaison des dure plg/tlg *
**********************************************
101

	* Modif Greg - 13/09/13
	IF W_EcartDuree <> "" AND LEN(ENR_TLGVERIFPLG<5>)=26 THEN
		READ ENR_TPSDETAILSINTERV101 FROM F.TPSDETAILSINTERV, ENR_TLGVERIFPLG<4> THEN
			READ ENR_TLGPOINTAGE101 FROM F.TLGPOINTAGE, ENR_TLGVERIFPLG<5> THEN
				W_DureePlg=ENR_TPSDETAILSINTERV101<5> "R%4"
				
				W_DureeTlg=0

				W_HreDeb=ENR_TLGVERIFPLG<5>[19,2]
				W_MinDeb=ENR_TLGVERIFPLG<5>[22,2]
				W_HreFin=ENR_TLGPOINTAGE101<4>[1,2]
				W_MinFin=ENR_TLGPOINTAGE101<4>[4,2]
				W_Minutes=0
				W_Heures=0
				* Modif Greg - 11/03/14 - Modification du calcul de la dure pour les interv de plus de 24h.
				IF ENR_TLGVERIFPLG<5>[14,5]=ENR_TLGPOINTAGE101<3> THEN
					W_Minutes=60-W_MinDeb
					W_Heures=W_HreDeb+1
					W_Heures=W_HreFin-W_Heures
					W_Heures=W_Heures*60
					W_Minutes=W_Minutes+W_Heures+W_MinFin
				END ELSE
					W_Minutes=(W_HreFin*60)+W_MinFin
					W_Minutes=W_Minutes+(60-W_MinDeb)
					W_Heures=((ENR_TLGPOINTAGE101<3>-ENR_TLGVERIFPLG<5>[14,5])*24)-(W_HreDeb+1)
					W_Heures=W_Heures*60
					W_Minutes=W_Minutes+W_Heures
				END
				* Fin modif Greg - 11/03/14
				W_DureeTlg=INT(((W_Minutes/60)*100)+(1/2)) "R%4"
				
				IF W_DureePlg<W_DureeTlg THEN
					W_Ecart=((W_DureeTlg*10)/10)-((W_DureePlg*10)/10)
				END ELSE
					W_Ecart=((W_DureePlg*10)/10)-((W_DureeTlg*10)/10)
				END
				W_Ecart=W_Ecart "R%4"
				
				IF W_Ecart>W_EcartDuree THEN
					ENR_TLGVERIFPLG<8>=((W_Ecart*10)/10) "R%4"
					ENR_TLGVERIFPLG<9>=W_DureePlg
					ENR_TLGVERIFPLG<10>=W_DureeTlg
				END
			END
		END
	END

RETURN
**********************************************
* Il arrive qu'on ait dans TLGANOPOINTAGE 2 pointages
* complmentaires mais qui ont provoqu des anos de
* pointages manquants tout simplement car un des 2
* pointages a t reus en retard.
* Cette procdure a pour but de corriger un maximum
* de cas l.
**********************************************
200

	W_AuMoins1="NON"
	W_MemoDonnees=""
	
	W_ReqAno=""
	EXECUTE 'SSELECT TLGANOPOINTAGE AVEC 8 = "5" OR = "6" PAR 1 PAR 3 PAR 4 PAR 5 PAR 7 PAR @ID'
	EXECUTE 'SAUVE-LISTE W_ReqAno'
	EXECUTE "LISTE W_ReqAno" RETURNING MSGCODE

	IF MSGCODE<1> # 209 THEN
		SELECT F.TLGANOPOINTAGE TO W_ReqAno

		W_Fini="FAUX"
		LOOP
			READNEXT W_CleTlgAno FROM W_ReqAno ELSE W_Fini="VRAI"
		WHILE W_Fini="FAUX" DO
			READ ENR_TLGANOPOINTAGE FROM F.TLGANOPOINTAGE, W_CleTlgAno THEN
				* On renseigne W_MemoDonnees si il est vide
				IF W_MemoDonnees<8> = "" THEN
					W_MemoDonnees<8>=W_CleTlgAno
					W_MemoDonnees<1>=ENR_TLGANOPOINTAGE<1>
					W_MemoDonnees<2>=ENR_TLGANOPOINTAGE<2>
					W_MemoDonnees<3>=ENR_TLGANOPOINTAGE<3>
					W_MemoDonnees<4>=ENR_TLGANOPOINTAGE<4>
					W_MemoDonnees<5>=ENR_TLGANOPOINTAGE<5>
					W_MemoDonnees<6>=ENR_TLGANOPOINTAGE<6>
					W_MemoDonnees<7>=ENR_TLGANOPOINTAGE<7>
				END ELSE
					* Un dbut et une fin ?
					IF W_MemoDonnees<5> = "1" AND ENR_TLGANOPOINTAGE<5> = "2" THEN
						* Mme aidant ?
						IF W_MemoDonnees<1>=ENR_TLGANOPOINTAGE<1> THEN
							* Mme aid ?
							IF W_MemoDonnees<7>=ENR_TLGANOPOINTAGE<7> THEN
								* Mme date ou date deb = veille date fin ?
								IF (W_MemoDonnees<3>=ENR_TLGANOPOINTAGE<3>) OR (W_MemoDonnees<3>+1=ENR_TLGANOPOINTAGE<3>) THEN
									* On a un dbut suivi d'une fin, pour le mme couple, sur le mme jour
									* ou en intervention de nuit. Potentiellement  peut correspondre.
									GOSUB 201
								END
							END
						END
						W_MemoDonnees=""
					END ELSE
						* Si la 2me anomalie est un dbut, elle peut potentiellement
						* aller avec celle qui suivra. Donc il faut la mmoriser.
						IF ENR_TLGANOPOINTAGE<5> = "1" THEN
							W_MemoDonnees<8>=W_CleTlgAno
							W_MemoDonnees<1>=ENR_TLGANOPOINTAGE<1>
							W_MemoDonnees<2>=ENR_TLGANOPOINTAGE<2>
							W_MemoDonnees<3>=ENR_TLGANOPOINTAGE<3>
							W_MemoDonnees<4>=ENR_TLGANOPOINTAGE<4>
							W_MemoDonnees<5>=ENR_TLGANOPOINTAGE<5>
							W_MemoDonnees<6>=ENR_TLGANOPOINTAGE<6>
							W_MemoDonnees<7>=ENR_TLGANOPOINTAGE<7>
						END ELSE
							W_MemoDonnees=""
						END
					END
				END
			END
		REPEAT
	END
	
	EXECUTE "EFFACER-LISTE W_ReqAno"

	IF W_AuMoins1="OUI" THEN GOSUB 5
		
RETURN
**********************************************
* On a trouv dans les anomalies 2 "pointages manquants" qui
* peuvent potentiellement former une intervention.
* Le principe est le suivant : on teste si il y a une intervention
* valide qui chevaucherait la nouvelle. Si c'est le cas on ne fait
* rien (on ne va pas crer une intervention qui va chevaucher
* une intervention dj existante). Sinon, on peut crer l'intervention
* Donc on prend les anomalies, on les (re)met dans TLGIMPORT
* et on lance la procdure de traitement de TLGIMPORT. De cette faon,
* tous les tests habituels vont tre refaits (contrat, activit, etc).
**********************************************
201
	
	W_DateDebAno=W_MemoDonnees<3>
	W_HeureDebAno=W_MemoDonnees<4>[1,2]:W_MemoDonnees<4>[4,2]
	W_DateFinAno=ENR_TLGANOPOINTAGE<3>
	W_HeureFinAno=ENR_TLGANOPOINTAGE<4>[1,2]:ENR_TLGANOPOINTAGE<4>[4,2]
	
	IF W_DateFinAno > W_DateDebAno THEN W_HeureFinAno = W_HeureFinAno + 2400
	
	W_Chevauchement="NON"
	
	* Slection des TLGPOINTAGE de l'aidant sur la(les) date(s) de l'intervention qu'on dsire crer.
	W_ReqChev=""
	EXECUTE 'SSELECT TLGPOINTAGE AVEC CodeAidant = "':W_MemoDonnees<1>[3,5]:'" AND AVEC DateDebInterv <= "':W_DateFinAno:'" AND AVEC 3 >= "':W_DateDebAno:'"'
	EXECUTE 'SAUVE-LISTE W_ReqChev'
	EXECUTE "LISTE W_ReqChev" RETURNING MSGCODE

	IF MSGCODE<1> # 209 THEN
		SELECT F.TLGPOINTAGE TO W_ReqChev

		W_FiniChev="FAUX"
		LOOP
			READNEXT W_CleTlgChev FROM W_ReqChev ELSE W_FiniChev="VRAI"
		WHILE W_FiniChev="FAUX" DO
			READ ENR_TLGPOINTAGECHEV FROM F.TLGPOINTAGE, W_CleTlgChev THEN
				* On vrifie si l'intervention dj existante chevaucherait celle qu'on souhaite crer
				IF ENR_TLGPOINTAGECHEV<7> <> "" THEN
					W_HeureDebTlg = ENR_TLGPOINTAGECHEV<7>[1,2]:ENR_TLGPOINTAGECHEV<7>[4,2]
				END ELSE
					W_HeureDebTlg = W_CleTlgChev[19,2]:W_CleTlgChev[22,2]
				END

				IF ENR_TLGPOINTAGECHEV<8> <> "" THEN
					W_HeureFinTlg = ENR_TLGPOINTAGECHEV<8>[1,2]:ENR_TLGPOINTAGECHEV<8>[4,2]
				END ELSE
					W_HeureFinTlg = ENR_TLGPOINTAGECHEV<4>[1,2]:ENR_TLGPOINTAGECHEV<4>[4,2]
				END

				* Toutes les dates sont gales, on garde les heures telles qu'elles sont.
				IF W_CleTlgChev[14,5]=W_DateDebAno AND ENR_TLGPOINTAGECHEV<3>=W_DateFinAno AND W_DateDebAno=W_DateFinAno THEN
					* Rien
				END ELSE
					* Arriv ici on sait qu'il y a un chevauchement avec les dates, mais il y a des nuits qu'il faut pouvoir
					* grer pour vrifier si il y a chevauchements avec les horaires.
					
					IF W_CleTlgChev[14,5] = W_DateDebAno THEN
						* Les dates de dbut sont gales. Si la date de fin tlg est suprieure, il faut ajouter 24h
						IF ENR_TLGPOINTAGECHEV<3> > W_CleTlgChev[14,5] THEN
							W_HeureFinTlg = W_HeureFinTlg + 2400
						END
					END ELSE
						* Si la date de dbut tlg est infrieure  la date de dbut ano, il faut retirer 24h  la date de dbut tlg
						IF W_CleTlgChev[14,5] < W_DateDebAno THEN
							W_HeureDebTlg = W_HeureDebTlg - 2400
							
							* Pas de test sur la date de fin tlg car arriv ici elle ne peut tre que gale  la date de dbut ano.
							* Donc on garde l'heure de fin tlg telle quelle.
						END ELSE
							* Si la date de dbut tlg est suprieure  la date de dbut ano, il faut ajouter 24h  la date de dbut tlg
							IF W_CleTlgChev[14,5] > W_DateDebAno THEN
								W_HeureDebTlg = W_HeureDebTlg + 2400
								* On ajoute une fois 24h  la date de fin tlg. Car si la date de dbut tlg est suprieure  la date de dbut
								* ano, la date de fin tlg l'est aussi forcment.
								W_HeureFinTlg = W_HeureFinTlg + 2400
								* On regarde si la date de fin tlg est suprieure  la date de dbut tlg : dans ce cas, il faut ajouter
								* une deuxime fois 24h.
								IF ENR_TLGPOINTAGECHEV<3> > W_CleTlgChev[14,5] THEN
									W_HeureFinTlg = W_HeureFinTlg + 2400
								END
							END
						END		
					END
				END
				
				IF W_HeureDebTlg < W_HeureFinAno AND W_HeureFinTlg > W_HeureDebAno THEN
					W_Chevauchement="OUI"
				END
			END
		REPEAT
	END
	
	EXECUTE "EFFACER-LISTE W_ReqChev"
	
	IF W_Chevauchement="NON" THEN
		* Pas de chevauchement prvu donc on peut mettre les donnes de anos dans TLGIMPORT pour les retraiter.
		* On supprime du coup les anos qui n'ont  priori plus lieu d'exister. Si pour une raison quelconque
		* elles doivent y revenir, c'est le traitement de TLGIMPORT habituel qui s'en chargera.
		W_CleImport=W_MemoDonnees<8>
		W_MemoDonnees<8>=""
		WRITE W_MemoDonnees ON F.TLGIMPORT, W_CleImport
		
		ENR_TLGANOPOINTAGE<8>=""
		ENR_TLGANOPOINTAGE<9>=""
		ENR_TLGANOPOINTAGE<10>=""
		ENR_TLGANOPOINTAGE<11>=""
		WRITE ENR_TLGANOPOINTAGE ON F.TLGIMPORT, W_CleTlgAno
		
		* Si l'ano du pointage de dbut a des MOI, il faut faire en sorte qu'elles soient elles aussi
		* retraites. Et supprimer l'ano de TLGANOMOI.
		READ ENR_TLGANOMOI FROM F.TLGANOMOI, W_CleImport THEN
			READ ENR_MOIANO5ET6 FROM F.DOMIRECUP, "MOIANO5ET6.rub" ELSE ENR_MOIANO5ET6=""
			
			FOR i200 = 1 TO DCOUNT(ENR_TLGANOMOI<3>,CHAR(253))
				ENR_MOIANO5ET6<-1>=W_CleImport:';':ENR_TLGANOMOI<3,i200>:';':ENR_TLGANOMOI<4,i200>
			NEXT i200
			
			WRITE ENR_MOIANO5ET6 ON F.DOMIRECUP, "MOIANO5ET6.rub"
			
			EXECUTE 'DELETE TLGANOMOI ':W_CleImport
		END

		* Si l'ano du pointage de fin a des MOI, il faut faire en sorte qu'elles soient elles aussi
		* retraites. Et supprimer l'ano de TLGANOMOI.		
		READ ENR_TLGANOMOI FROM F.TLGANOMOI, W_CleTlgAno THEN
			READ ENR_MOIANO5ET6 FROM F.DOMIRECUP, "MOIANO5ET6.rub" ELSE ENR_MOIANO5ET6=""
			
			FOR i200 = 1 TO DCOUNT(ENR_TLGANOMOI<3>,CHAR(253))
				ENR_MOIANO5ET6<-1>=W_CleTlgAno:';':ENR_TLGANOMOI<3,i200>:';':ENR_TLGANOMOI<4,i200>
			NEXT i200
			
			WRITE ENR_MOIANO5ET6 ON F.DOMIRECUP, "MOIANO5ET6.rub"
			
			EXECUTE 'DELETE TLGANOMOI ':W_CleTlgAno
		END		
		
		EXECUTE 'DELETE TLGANOPOINTAGE ':W_CleImport
		EXECUTE 'DELETE TLGANOPOINTAGE ':W_CleTlgAno
		
		W_AuMoins1="OUI"
	END
RETURN
*****************************************************************
* Spcifique Corbeil : on gnre les plannings dans TLGVERIFPLG *
* juste avant la rcupration de la tlgestion, qui est faite  *
* uniquement le soir.                                           *
*****************************************************************
99999

	* Le BATCH lanc le matin a dj gnr les donnes du jour.
	* Mais elles ne nous intressent pas car on veut gnrer les donnes
	* avec les modifications faites par les utilisateurs au fil de
	* la journe. Le plus simple est donc de les supprimer.
	
	W_Date=DATE()
	
	W_ReqTlg=""
	EXECUTE 'SSELECT TLGVERIFPLG AVEC 1 = "':W_Date:'"'
	EXECUTE 'SAUVE-LISTE W_ReqTlg'
	EXECUTE "LISTE W_ReqTlg" RETURNING MSGCODE

	IF MSGCODE<1> # 209 THEN
		SELECT F.TLGVERIFPLG TO W_ReqTlg

		W_Fini="FAUX"
		LOOP
			READNEXT W_CleTlg FROM W_ReqTlg ELSE W_Fini="VRAI"
		WHILE W_Fini="FAUX" DO
			EXECUTE "DELETE TLGVERIFPLG ":W_CleTlg
		REPEAT
	END
	
	EXECUTE "EFFACER-LISTE W_ReqTlg"
	
	ENR_TLGPARAMDATE=""
	ENR_TLGPARAMDATE<1>=W_Date
	WRITE ENR_TLGPARAMDATE ON F.TLGPARAM, "DATETLGVERIFPLG"
	
	EXECUTE "RUN PR MAJTLGVERIFPLG"	
	
	EXECUTE "DELETE TLGPARAM DATETLGVERIFPLG"
RETURN
