****************************************************
* Ce programme gnre le fichier HEURESAIDANTSPLG. *
* Ce fichier est utilis par la suite dans         *
* l'option des congs prvisionnels.               *
* Ce programme doit tre excut toutes les nuits  *
* afin que les donnes des plannings prises en     *
* comtpe soient les plus probantes.                *
*                                                  *
* 16/05/2007 -> Grgory                            *
****************************************************

************
* FICHIERS *
************
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","HEURESAIDANTSPLG" TO F.HEURESAIDANTSPLG ELSE STOP
OPEN "","ABSENCESPREV" TO F.ABSENCESPREV ELSE STOP
OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP
OPEN "","CONTRAT" TO F.CONTRAT ELSE STOP
OPEN "","TPSTEMPO" TO F.TPSTEMPO ELSE STOP
OPEN "","FUSION" TO F.FUSION ELSE STOP

OPEN "","TEMPO" TO F.TEMPO ELSE STOP

******************************

ENR_HEURESAIDANTSPLG=""
ENR_ABSENCESPREV=""
ENR_TPSTEMPO=""
W_ReqAbs=""
W_ReqContrat=""

W_DateDeb=""
W_DateFin=""

W_NbAidants=0
******************************

ENR_HEURE=""
ENR_HEURE<1>=TIMEDATE()

	W_Date=DATE()
	W_Date=OCONV(W_Date,"D4/")
	W_DateDeb=ICONV("01/":W_Date[4,7],"D4/")
	
	W_MoisFin=W_Date[4,2]
	W_MoisFin=W_MoisFin+6
	W_Annee=W_Date[7,4]
	IF W_MoisFin>12 THEN
		W_Annee=W_Annee+1
		W_MoisFin=W_MoisFin-12
	END
	IF LEN(W_MoisFin)=1 THEN
		W_DateFin=ICONV("01/0":W_MoisFin:"/":W_Annee,"D4/")
	END ELSE
		W_DateFin=ICONV("01/":W_MoisFin:"/":W_Annee,"D4/")
	END
	W_DateFin=W_DateFin-1	
	
	W_DateDebMois=W_DateDeb
	W_Day=OCONV(W_DateDeb,"DWA")
	BEGIN CASE
		CASE W_Day = "Tuesday"
			W_DateDeb=W_DateDeb-1
		CASE W_Day = "Wednesday"
			W_DateDeb=W_DateDeb-2
		CASE W_Day = "Thursday"
			W_DateDeb=W_DateDeb-3
		CASE W_Day = "Friday"
			W_DateDeb=W_DateDeb-4
		CASE W_Day = "Saturday"
			W_DateDeb=W_DateDeb-5
		CASE W_Day = "Sunday"
			W_DateDeb=W_DateDeb-6
    END CASE
	
	W_DateFinMois=W_DateFin
	W_Day=OCONV(W_DateFin,"DWA")
	BEGIN CASE
		CASE W_Day = "Monday"
			W_DateFin=W_DateFin+6
		CASE W_Day = "Tuesday"
			W_DateFin=W_DateFin+5
		CASE W_Day = "Wednesday"
			W_DateFin=W_DateFin+4
		CASE W_Day = "Thursday"
			W_DateFin=W_DateFin+3
		CASE W_Day = "Friday"
			W_DateFin=W_DateFin+2
		CASE W_Day = "Saturday"
			W_DateFin=W_DateFin+1
    END CASE

	W_CodeAidant=""
    ENR_TEST<-1> = "SELECT CONTRAT"
	EXECUTE 'SELECT CONTRAT AVEC 1 <> "02" AND AVEC 65 <> "O" AND AVEC 7 <= "':W_DateFin:'" AND AVEC 8 >= "':W_DateDeb:'" OR = "" PAR @ID'
	EXECUTE 'SAUVE-LISTE W_ReqContrat'
	EXECUTE "LISTE W_ReqContrat" RETURNING MSGCODE

	IF MSGCODE<1> # 209 THEN
		SELECT F.CONTRAT TO W_ReqContrat
		
		W_Fini="FAUX"
		LOOP
			READNEXT W_CleContrat FROM W_ReqContrat ELSE W_Fini="VRAI"
		WHILE W_Fini="FAUX" DO
			IF W_CodeAidant="" THEN W_CodeAidant=W_CleContrat[1,5]
			IF W_CodeAidant<>W_CleContrat[1,5] THEN
				GOSUB 5
				W_CodeAidant=W_CleContrat[1,5]
				W_NbAidants=W_NbAidants+1
			END
		REPEAT
	END

	GOSUB 5
	W_NbAidants=W_NbAidants+1
    ENR_TEST<-1> = "FIN BOUCLE CONTRAT"
PRINT W_NbAidants
ENR_HEURE<2>=TIMEDATE()
ENR_TEST<-1> = "WRITE FUSION"
WRITE ENR_HEURE ON F.FUSION, "HeuresGenereHeuresAidantsPLG.txt"	

GOSUB 5

WRITE ENR_TEST ON F.TEMPO,"TestBatch"

STOP
*************************************
5
	ENR_TEST<-1> = "SUB 5"
	EXECUTE "AFFICHEPLANNING |ADM||P|":W_DateDeb:"|":W_DateFin:"|||":W_CodeAidant:"|A||||"
    
    ENR_TEST<-1> = "FIN AFFICHEPLANNING => Lecture TPSTEMPO"
	READ ENR_TPSTEMPO FROM F.TPSTEMPO, "AFFICHEPLANNINGADM" THEN
		IMax=DCOUNT(ENR_TPSTEMPO,CHAR(254))
		IMax=IMax-(W_DateFin-(W_DateDeb-1))
		I=0
		W_Saut=(W_DateFin-(W_DateDeb-1))
		LOOP
			IF I=0 THEN
				I=I+1
			END ELSE
				I=W_Saut
			END
		WHILE I<=IMax DO
			*W_CodeAidant=ENR_TPSTEMPO<I>[8,5]
			W_DateDebSem=W_DateDeb
			W_EtatAbs=""
			W_NbJours=1
			W_CumulGenSem=0
			W_CumulSem=0
			J=I-1
			LOOP
				J=J+1
			WHILE ENR_TPSTEMPO<J>[2,6]#"Interv" AND ENR_TPSTEMPO<J>[2,3]#"FIN" DO
				IF J-I-1<=W_DateFin-W_DateDeb THEN
					IF W_NbJours=8 THEN
						GOSUB 10
						W_DateDebSem=W_DateDebSem+7					
						W_EtatAbs=""
						W_NbJours=1
						W_CumulGenSem=0
						W_CumulSem=0					
					END
					
					K=0
					LOOP
						K=K+1
					WHILE ENR_TPSTEMPO<J,1,K>#"" DO
						IF ENR_TPSTEMPO<J,1,K>="IntervP" THEN
							W_HeureDeb=ENR_TPSTEMPO<J,2,K>
							W_HeureFin=ENR_TPSTEMPO<J,3,K>
							
							IF W_HeureFin>=W_HeureDeb THEN
								W_CumulGenSem=W_CumulGenSem+(W_HeureFin-W_HeureDeb)
							END ELSE
								W_CumulGenSem=W_CumulGenSem+W_HeureFin+(2400-W_HeureDeb)
							END
						END
					REPEAT

					W_NbJours=W_NbJours+1
				END
			REPEAT
			
			GOSUB 10

			W_Saut=J
		REPEAT
	END
	
RETURN

**************************************
10
    ENR_TEST<-1> = "SUB 10"
	ENR_HEURESAIDANTSPL=""
	ENR_HEURESAIDANTSPLG<1>=W_CumulGenSem
	ENR_HEURESAIDANTSPLG<2>=0
	ENR_HEURESAIDANTSPLG<3>=0
	
	ENR_TEST<-1> = "SELECT ABSENCESPREV"
	EXECUTE 'SELECT ABSENCESPREV AVEC 0 = "':W_CodeAidant:']" AND AVEC DateDebut <= "':W_DateDebSem+6:'" AND AVEC DateFin >= "':W_DateDebSem:'" AND AVEC 4 = "E" PAR DateDebut'
	EXECUTE 'SAUVE-LISTE W_ReqAbs'
	EXECUTE "LISTE W_ReqAbs" RETURNING MSGCODE

	IF MSGCODE<1> # 209 THEN
		SELECT F.ABSENCESPREV TO W_ReqAbs
		
		W_Fin="FAUX"
		LOOP
			READNEXT W_CleAbs FROM W_ReqAbs ELSE W_Fin="VRAI"
		WHILE W_Fin="FAUX" DO
			READ ENR_ABSENCESPREV FROM F.ABSENCESPREV, W_CleAbs THEN
				W_DateDebAbs=W_CleAbs[8,5]
				W_DateFinAbs=W_CleAbs[13,5]
				
				IF W_DateDebSem>W_DateDebAbs THEN W_DateDebAbs=W_DateDebSem
				IF W_DateDebSem+4<W_DateFinAbs THEN W_DateFinAbs=W_DateDebSem+4
				
				W_NbJour=W_DateFinAbs-W_DateDebAbs+1
				
				W_CumulSem=INT(((W_CumulGenSem/5)*W_NbJour) + (1/2))
				ENR_HEURESAIDANTSPLG<3>=ENR_HEURESAIDANTSPLG<3>+W_CumulSem
			END
		REPEAT
	END ELSE
		ENR_HEURESAIDANTSPLG<3>=""
	END

    ENR_TEST<-1> = "SELECT ABSENCESAIDANT"
		* Modif Greg - 15/03/10 - Rajout du motif 25 - CONGES DELAI PREVENANCE. C'tait dj fait dans le PR CONGESPREV, mais pas dans celui-ci.
	EXECUTE 'SELECT ABSENCESAIDANT AVEC 0 = "':W_CodeAidant:']" AND AVEC DebAbsAidant <= "':W_DateDebSem+6:'" AND AVEC 2 >= "':W_DateDebSem:'" AND AVEC TypeAbs = "14" OR = "15" OR = "16" OR = "25" PAR DebAbsAidant'
	EXECUTE 'SAUVE-LISTE W_ReqAbs'
	EXECUTE "LISTE W_ReqAbs" RETURNING MSGCODE

	IF MSGCODE<1> # 209 THEN
		SELECT F.ABSENCESAIDANT TO W_ReqAbs
		
		W_Fin="FAUX"
		LOOP
			READNEXT W_CleAbs FROM W_ReqAbs ELSE W_Fin="VRAI"
		WHILE W_Fin="FAUX" DO
			READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT, W_CleAbs THEN
				W_DateDebAbs=W_CleAbs[8,5]
				W_DateFinAbs=ENR_ABSENCESAIDANT<2>
				
				IF W_DateDebSem>W_DateDebAbs THEN W_DateDebAbs=W_DateDebSem
				IF W_DateDebSem+4<W_DateFinAbs THEN W_DateFinAbs=W_DateDebSem+4
				
				W_NbJour=W_DateFinAbs-W_DateDebAbs+1
				
				IF W_NbJour>0 THEN
					W_CumulSem=INT(((W_CumulGenSem/5)*W_NbJour) + (1/2))
					ENR_HEURESAIDANTSPLG<2>=ENR_HEURESAIDANTSPLG<2>+W_CumulSem
				END
			END
		REPEAT
	END ELSE
		ENR_HEURESAIDANTSPLG<2>=""
	END

    ENR_TEST<-1> = "WRITE HEURESAIDANTSPLG"    
	WRITE ENR_HEURESAIDANTSPLG ON F.HEURESAIDANTSPLG, W_CodeAidant:W_DateDebSem

RETURN