SUBROUTINE RECHERCHEACTIVITESDOMITIME(RETURNVAL,PARAMETRES,W_Sortie)
***********************************************************
* DOMITIME
* Ce programme essaye de trouver une activit aux interventions
* qui n'en ont pas.
*
* Grgory - 30/11/2007
**********************************************************
* Ouvertures des fichiers

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"

OPEN "","TLGPOINTAGE" TO F.TLGPOINTAGE ELSE STOP
OPEN "","DOMITIMEPARAMINTGR" TO F.DOMITIMEPARAMINTGR ELSE STOP
OPEN "","DOMITIMEDROITS" TO F.DOMITIMEDROITS ELSE STOP
OPEN "","ACTIVITES" TO F.ACTIVITES ELSE STOP
OPEN "","TLGANOMOI" TO F.TLGANOMOI ELSE STOP
OPEN "","TLGMOI" TO F.TLGMOI ELSE STOP
OPEN "","CONTRAT" TO F.CONTRAT ELSE STOP
OPEN "","ACTIVITESAIDE" TO F.ACTIVITESAIDE ELSE STOP
OPEN "","DOMITIME" TO F.DOMITIME ELSE STOP
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP
OPEN "","CIVILAIDE" TO F.CIVILAIDE ELSE STOP
OPEN "","TEMPO" TO F.TEMPO ELSE STOP
OPEN "","TPSTEMPO" TO F.TPSTEMPO ELSE STOP
OPEN "","SECTEUR" TO F.SECTEUR ELSE STOP
OPEN "","PERIODESPAIE" TO F.PERIODESPAIE ELSE STOP
**********************************************************

ENR_TLGPOINTAGE=""
ENR_DOMIPARAMINTGR=""
ENR_DOMIDROITS=""
ENR_ACTIVITES=""
ENR_CONTRAT=""
ENR_ACTIVITESAIDE=""
ENR_DOMITIME=""
ENR_TEMPO=""
ENR_TPSTEMPO=""
ENR_SECTEURAIDANT=""
ENR_SECTEURAIDE=""
W_Ind=0

W_TabAct=""
W_IndTab=0

W_ReqTlg=""
W_ReqContrat=""

W_Cpt=0

L=0
M=0
N=0
O=0

* Modif Greg - 22/03/11 - DA11033 - Dsormais on travaillera sur toutes les interventions depuis le dbut de la priode de paie en cours.
READ ENR_PERIODESPAIE FROM F.PERIODESPAIE, "1" THEN
	W_DateRef=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_DateRef=DATE()
	W_DateRef=W_DateRef-31
END

EXECUTE 'SELECT TLGPOINTAGE AVEC DateDebInterv >= "':W_DateRef:'" AND AVEC 5 = ""'
EXECUTE 'SAUVE-LISTE W_ReqTlg'
EXECUTE "LISTE W_ReqTlg" RETURNING MSGCODE

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

	W_Ind=W_Ind+1
	ENR_DOMITIME<W_Ind>="Code aidant;Nom et prenom aidant;Code aide;Nom et prenom aide;Date;Heure de debut;Heure de fin;Secteur aidant;Secteur aide"
	
	W_Fini="FAUX"
	LOOP
		READNEXT W_CleTlg FROM W_ReqTlg ELSE W_Fini="VRAI"
	WHILE W_Fini="FAUX" DO
		READ ENR_TLGPOINTAGE FROM F.TLGPOINTAGE, W_CleTlg THEN
			W_IndTab=0
			Tab_Act=""
			READ ENR_ACTIVITESAIDE FROM F.ACTIVITESAIDE, W_CleTlg[9,5] ELSE ENR_ACTIVITESAIDE=""
			FOR I=1 TO DCOUNT(ENR_ACTIVITESAIDE<1>,CHAR(253))
					IF ENR_ACTIVITESAIDE<2,I><=W_CleTlg[14,5] OR ENR_ACTIVITESAIDE<2,I>="" THEN
						IF ENR_ACTIVITESAIDE<3,I>>=W_CleTlg[14,5] OR ENR_ACTIVITESAIDE<3,I>="" THEN
							W_DejaMi="NON"
							FOR J = 1 TO W_IndTab
								IF Tab_Act<J>=ENR_ACTIVITESAIDE<1,I> THEN
									W_DejaMi="OUI"
								END
							NEXT J
							IF W_DejaMi="NON" THEN
								W_IndTab=W_IndTab+1
								Tab_Act<W_IndTab>=ENR_ACTIVITESAIDE<1,I>
							END
						END
					END
			NEXT I

			* Modif Greg - 22/03/11 - DA11033 - Si l'aid a une seule activit, alors on la prend directement.
			ENR_TLGPOINTAGE<5>=""
			IF W_IndTab=1 THEN
				ENR_TLGPOINTAGE<5>=Tab_Act<1>
				GOSUB 40
				WRITE ENR_TLGPOINTAGE ON F.TLGPOINTAGE, W_CleTlg
			END ELSE
				W_ReqContratTlg=""
				Tab_ActAidant=""								

				EXECUTE 'SELECT CONTRAT AVEC 0 = "':W_CleTlg[3,5]:']" AND AVEC 1 <> "02" AND AVEC 7 <= "':W_CleTlg[14,5]:'" AND AVEC 8 >= "':W_CleTlg[14,5]:'" OR = "" OR AVEC 0 = "':W_CleTlg[3,5]:']" AND AVEC 1 = "02" AND AVEC 3 = "':W_CleTlg[9,5]:'" AND AVEC 7 <= "':W_CleTlg[14,5]:'" AND AVEC 8 >= "':W_CleTlg[14,5]:'" OR = ""'
				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_CleTlg[9,5] 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 10
					IF W_Activite="" THEN
						* Aucune activit commune a t trouve et les plannings n'ont pas permi d'en trouver une.
						GOSUB 30
					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.
							GOSUB 30
						END ELSE
							ENR_TLGPOINTAGE<5>=W_Activite
							GOSUB 40
							WRITE ENR_TLGPOINTAGE ON F.TLGPOINTAGE, W_CleTlg
						END
					END
				END ELSE
					* Modif Greg - DA11033 - Si il n'y a pas de contrat, on va voir les plannings
					W_Activite=""
					GOSUB 20
					IF W_Activite="" THEN
						GOSUB 30
					END ELSE
						ENR_TLGPOINTAGE<5>=W_Activite
						GOSUB 40
						WRITE ENR_TLGPOINTAGE ON F.TLGPOINTAGE, W_CleTlg
					END
				END
			END
		END
	REPEAT
END

ENR_TEMPO<1>=W_Ind-1
ENR_TEMPO<2>=W_Cpt
WRITE ENR_TEMPO ON F.TEMPO, "RECHERCHEACTIVITESDOMITIME"

* Modif Greg - 23/03/11 - Incidence DA11033 - On ne gre plus de fichier CSV. Les utilisateurs
* consulteront les sans activits dans le moniteur de contrle, qui slectionnera TLGPOINTAGE.
*WRITE ENR_DOMITIME ON F.DOMITIME, "Liste des interventions sans activits.txt"

RETURN
***********************************************
* On cherche une activit commune (et active) *
*  l'aid et  l'aidant.                     *
***********************************************
10

	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 20
		IF W_Activite="" THEN W_Activite=W_ActiviteSave
	END
RETURN
******************************************************
* Si plusieurs activits entre un aid et un aidant, *
* on cherche l'activit de l'intervention.           *
******************************************************
20

	W_DateDeb=W_CleTlg[14,5]
	W_DateFin=ENR_TLGPOINTAGE<3>

	W_ParamAffichePlanning = "AFFICHEPLANNING |ADM||PMIS|":W_DateDeb:"|":W_DateFin:"|A|":W_CleTlg[9,5]:"|":W_CleTlg[3,5]:"|E||||"
	EXECUTE W_ParamAffichePlanning
				
	* On lit les interventions de l'aidant pour le jour voulu
	READ ENR_TPSTEMPO FROM F.TPSTEMPO, "AFFICHEPLANNINGADM" THEN
		* Les heures retournes par afficheplanning sont en centime, il faut donc convertir l'heure domitime
		W_HeureCent=W_CleTlg[22,2]
		W_HeureCent=INT(((W_HeureCent/60)*100)+(1/2))
		IF LEN(W_HeureCent)="1" THEN
			W_HeureCent=W_CleTlg[19,2]:"0":W_HeureCent
		END ELSE
			W_HeureCent=W_CleTlg[19,2]:W_HeureCent
		END
		
		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 THEN
					W_Activite=ENR_TPSTEMPO<2,7,M>
					W_Dif=W_DifTemp
				END				
			END
		REPEAT
	END

RETURN
***********************************
30			
	READ ENR_CIVILAIDANT FROM F.CIVILAIDANT, W_CleTlg[3,5] ELSE ENR_CIVILAIDANT=""
	READ ENR_CIVILAIDE FROM F.CIVILAIDE, W_CleTlg[9,5] ELSE ENR_CIVILAIDE=""
	READ ENR_SECTEURAIDANT FROM F.SECTEUR, ENR_CIVILAIDANT<31> ELSE ENR_SECTEURAIDANT=""
	READ ENR_SECTEURAIDE FROM F.SECTEUR, ENR_CIVILAIDE<40>[1,3] ELSE ENR_SECTEURAIDE=""
			
	W_Ind=W_Ind+1
	ENR_DOMITIME<W_Ind>=W_CleTlg[3,5]:';':ENR_CIVILAIDANT<2>:' ':ENR_CIVILAIDANT<3>:';':W_CleTlg[9,5]:';':ENR_CIVILAIDE<2>:' ':ENR_CIVILAIDE<3>:';':OCONV(W_CleTlg[14,5],"D4/"):';':W_CleTlg[19,8]:';':ENR_TLGPOINTAGE<4>:';':ENR_SECTEURAIDANT<1>:';':ENR_SECTEURAIDE<1>
RETURN
***********************************
* On a trouv une activit, donc  *
* on peut grer les MOI lies    *
* l'intervention                  *
***********************************
40

* Les MOI sont "saisies" par les aidants lors du pointage de dpart
* et la cl de TLGANOMOI est le numro de ce pointage. Si il n'y a
* pas de numro, il ne peut pas y avoir de MOI, donc on sort.
IF ENR_TLGPOINTAGE<2>="" THEN RETURN

READ ENR_TLGMOI FROM F.TLGMOI, W_CleTlg ELSE ENR_TLGMOI = ""
READ ENR_TLGANOMOI FROM F.TLGANOMOI, ENR_TLGPOINTAGE<2> THEN
	READ ENR_ACTIVITES FROM F.ACTIVITES, ENR_TLGPOINTAGE<5> THEN
		READ ENR_DOMIPARAMINTGR FROM F.DOMITIMEPARAMINTGR, ENR_TLGPOINTAGE<5>[1,3] THEN
			IF ENR_ACTIVITES<12>="M" THEN
				READ ENR_DOMIDROITS FROM F.DOMITIMEDROITS, W_CleTlg[3,5]:W_CleTlg[9,5] ELSE ENR_DOMIDROITS=""
			END ELSE
				READ ENR_DOMIDROITS FROM F.DOMITIMEDROITS, W_CleTlg[3,5]:ENR_TLGPOINTAGE<5>[1,3] ELSE ENR_DOMIDROITS=""
			END
			
			FOR I = 1 TO DCOUNT(ENR_TLGANOMOI<3>,CHAR(253))
				* On cherche le code rubrique Domitime dans les paramtres gnraux.
				W_DomiParamTrouve="NON"
				FOR J = 1 TO DCOUNT(ENR_DOMIPARAMINTGR<3>,CHAR(253))
					IF ENR_DOMIPARAMINTGR<3,J>=ENR_TLGPOINTAGE<5> AND ENR_DOMIPARAMINTGR<4,J>=ENR_TLGANOMOI<3,I> THEN
						W_DomiParamTrouve="OUI"
						W_CodeRubInf=ENR_DOMIPARAMINTGR<6,J>
					END
				NEXT J
				
				* Si on a trouv le code rubrique Domitime, on continue le traitement.
				* Sinon, il y a une anomalie (sachant que les droits individuels ne
				* peuvent pas utiliser une rubrique Domitime non existante dans les
				* paramtres gnraux).
				IF W_DomiParamTrouve="OUI" THEN
					* On cherche si le code rubrique Domitime se trouve dans les droits individuels.
					* Si ce n'est pas le cas, on prend les donnes des paramtres gnraux. Par contre
					* si on trouve la rubrique Domitime dans les droits individuels, il faut s'assurer
					* qu'elle n'est pas bloque.
					* Si elle ne l'est pas, alors on utilise les donnes des droits individuels, qui sont
					* prioritaires sur les paramtres gnraux.
					* En cas d'anomalie quelconque, on renseigne TLGANOMOI en consquence.
					W_DomiDroitsTrouve="NON"
					W_Bloquee="NON"
					FOR J = 1 TO DCOUNT(ENR_DOMIDROITS<1>,CHAR(253))
						IF ENR_DOMIDROITS<1,J>=ENR_TLGPOINTAGE<5> AND ENR_DOMIDROITS<2,J>=ENR_TLGANOMOI<3,I> THEN
							W_DomiDroitsTrouve="OUI"
							IF ENR_DOMIDROITS<7,J>="O" THEN
								W_Bloquee="OUI"
							END ELSE
								W_CodeRubInf=ENR_DOMIDROITS<4,J>
							END
						END
					NEXT J
					
					IF W_DomiDroitsTrouve="OUI" THEN
						IF W_Bloquee="OUI" THEN
							ENR_TLGANOMOI<5,I>="3"
						END ELSE
							GOSUB 50
						END
					END ELSE
						GOSUB 50
					END
				END ELSE
					ENR_TLANOMOI<5,I>="2"
				END
			NEXT I
			* On supprimer les MV des MOI qui ont t valides.
			FOR I = DCOUNT(ENR_TLGANOMOI<3>,CHAR(253)) TO 1 STEP -1
				IF ENR_TLGANOMOI<6,I>="O" THEN
					ENR_TLGANOMOI=DELETE(ENR_TLGANOMOI,3,I)
					ENR_TLGANOMOI=DELETE(ENR_TLGANOMOI,4,I)
					ENR_TLGANOMOI=DELETE(ENR_TLGANOMOI,5,I)
					ENR_TLGANOMOI=DELETE(ENR_TLGANOMOI,6,I)
				END
			NEXT I
			* Si il n'y a plus d'anomalies, on supprimer l'enregistrement,
			* sinon on l'crit simplement avec les donnes restantes.
			IF DCOUNT(ENR_TLGANOMOI<3>,CHAR(253))=0 THEN
				EXECUTE 'DELETE TLGANOMOI ':ENR_TLGPOINTAGE<2>
			END ELSE
				WRITE ENR_TLGANOMOI ON F.TLGANOMOI, ENR_TLGPOINTAGE<2>
			END
		END
	END
END
* Si on a des donnes dans TLGMOI, il faut l'enregistrer.
IF ENR_TLGMOI<>"" THEN WRITE ENR_TLGMOI ON F.TLGMOI, W_CleTlg

RETURN
***********************************
* Validation d'une MOI            *
***********************************
50

* Une fois qu'on aura trait toutes les MV de TLGANOMOI,
* il faudra supprimer celles qui ne sont pas  garder.
* On renseigne donc un attribut, qui nous servira
* ensuite  savoir si la MV doit tre supprime ou pas.
ENR_TLGANOMOI<6,I>="O"

* La MOI peut tre valide. Si il y a dj une MV dans TLGMOI
* pour la rubrique Domitime en cours de traitement, on cumule
* les valeurs. Sinon on ajoute une nouvelle MV aux attributs.
W_CodeTrouve="NON"
FOR J = 1 TO DCOUNT(ENR_TLGMOI<1>,CHAR(253))
	IF ENR_TLGMOI<1,J>=ENR_TLGANOMOI<3,I> THEN
		W_CodeTrouve="OUI"
		EXIT
	END
NEXT J
IF W_CodeTrouve="OUI" THEN
	ENR_TLGMOI<2,J>=ENR_TLGMOI<2,J>+ENR_TLGANOMOI<4,I>
END ELSE
	ENR_TLGMOI<1,-1>=ENR_TLGANOMOI<3,I>
	ENR_TLGMOI<2,-1>=ENR_TLGANOMOI<4,I>
	ENR_TLGMOI<3,-1>=W_CodeRubInf
END

RETURN