SUBROUTINE ECARTSSEMTYPE(RETURNVAL,PARAMETRES,W_Sortie)

***********************************************************
* Ce programme compare les semaines types des aids avec  *
* les interventions plannifies. Il crit dans le fichier *
* TPSTEMP les donnes de l'intervention si on dtecte     *
* une diffrence.                                         *
*                                                         *
* 19/06/2007 - Grgory                                    *
***********************************************************

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

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

OPEN "", "BESOINSAIDE" TO F.BESOINSAIDE ELSE RETURN
OPEN "", "ACTIVITESBISAIDE" TO F.ACTIVITESBISAIDE ELSE RETURN
OPEN "", "CIVILAIDE" TO F.CIVILAIDE ELSE RETURN
OPEN "", "TPSTEMPO" TO F.TPSTEMPO ELSE RETURN
OPEN "", "TPSPARAM" TO F.TPSPARAM ELSE RETURN

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

W_DateDeb=PARAMETRES<1>
W_DateFin=PARAMETRES<2>
W_CodeAsso=PARAMETRES<3>
W_TypeTri=PARAMETRES<4>
W_CodeTri=PARAMETRES<5>

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

ENR_BESOINSAIDE=""
ENR_ACTIVITESBISAIDE=""
ENR_CIVILAIDE=""
ENR_TPSTEMPO=""
ENR_TPSPARAM=""

W_ReqActBisAide=""

W_IndSortie=0

W_Sortie=""

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

	W_Select='SSELECT ACTIVITESBISAIDE AVEC JourSemType <> ""'
	
	IF W_CodeAsso#"" THEN
		W_Select=W_Select:' AND AVEC CodeAssocBisAide = "':W_CodeAsso:'"'
	END
	IF W_TypeTri="S" AND W_CodeTri#"" THEN
		W_Select=W_Select:' AND AVEC CodeSecteurBisAide = "':W_CodeTri:'"'
	END
	IF W_TypeTri="R" AND W_CodeTri#"" THEN
		W_Select=W_Select:' AND AVEC CodeResponsableBisAide = "':W_CodeTri:'"'
	END	
	IF W_TypeTri="C" AND W_CodeTri#"" THEN
		W_Select=W_Select:' AND AVEC LibCommuneBisAide = "':W_CodeTri:'"'
	END
	
	W_Select=W_Select:' AND AVEC DateDebAct <= "':W_DateFin:'" AND AVEC 1 >= "':W_DateDeb:'" OR = ""'
	
	IF W_CodeAsso="" THEN
		W_Select=W_Select:' PAR CodeAssocBisAide'
	END	
	IF W_TypeTri="S" THEN
		W_Select=W_Select:' PAR CodeSecteurBisAide'
	END
	IF W_TypeTri="R" THEN
		W_Select=W_Select:' PAR CodeResponsableBisAide'
	END	
	IF W_TypeTri="C" THEN
		W_Select=W_Select:' PAR LibCommuneBisAide'
	END
	
	W_Select=W_Select:' PAR NomPrenomBisAide'
	
	EXECUTE W_Select
	EXECUTE 'SAUVE-LISTE W_ReqActBisAide'
	EXECUTE "LISTE W_ReqActBisAide" RETURNING MSGCODE
	
	IF MSGCODE<1> # 209 THEN
		SELECT F.ACTIVITESBISAIDE TO W_ReqActBisAide

		W_Fini="FAUX"
		LOOP
			READNEXT W_CleAct FROM W_ReqActBisAide ELSE W_Fini="VRAI"
		WHILE W_Fini="FAUX" DO
			W_CleAide=W_CleAct[1,5]
			READ ENR_CIVILAIDE FROM F.CIVILAIDE, W_CleAide THEN
				READ ENR_BESOINSAIDE FROM F.BESOINSAIDE, W_CleAide THEN
					GOSUB 10
				END
			END
		REPEAT
	END ELSE
		W_Sortie="RIEN"
	END
	
RETURN
***********************************************************
* Traitement d'un aid                                    *
***********************************************************
10

	W_ParamAffichePlanning = "AFFICHEPLANNING |ADM|":W_CodeAsso:"|PMI|":W_DateDeb:"|":W_DateFin:"|A|":W_CleAide:"||AA|":W_CleAide:"|||"
	EXECUTE W_ParamAffichePlanning
	
	READ ENR_TPSTEMPO FROM F.TPSTEMPO, "AFFICHEPLANNINGADM" THEN
		W_Att=0
		W_Fin="FAUX"
		LOOP
		WHILE W_Fin="FAUX"
			W_IndJour=7
			N=-1
			LOOP
				N=N+1
			WHILE W_IndJour=7 DO
				W_Day=OCONV(W_DateDeb+N,"DWA")
				BEGIN CASE
					CASE W_Day = "Monday"
						Jour="0"
					CASE W_Day = "Tuesday"
						Jour="1"
					CASE W_Day = "Wednesday"
						Jour="2"
					CASE W_Day = "Thursday"
						Jour="3"
					CASE W_Day = "Friday"
						Jour="4"
					CASE W_Day = "Saturday"
						Jour="5"
					CASE W_Day = "Sunday"
						Jour="6"
			    END CASE
				I=0
				LOOP
					I=I+1
				WHILE I <= DCOUNT(ENR_BESOINSAIDE<18>,CHAR(253))
					IF ENR_BESOINSAIDE<18,I> = Jour THEN
						W_IndJour=I
						I=DCOUNT(ENR_BESOINSAIDE<18>,CHAR(253))
					END
				REPEAT
			REPEAT
			
			W_Att=N
			IF W_IndJour<7 THEN
				LOOP
				WHILE W_IndJour <= DCOUNT(ENR_BESOINSAIDE<18>,CHAR(253))
					IF LEN(ENR_BESOINSAIDE<19,W_IndJour>)=3 THEN ENR_BESOINSAIDE<19,W_IndJour>="0":ENR_BESOINSAIDE<19,W_IndJour>
					IF LEN(ENR_BESOINSAIDE<20,W_IndJour>)=3 THEN ENR_BESOINSAIDE<20,W_IndJour>="0":ENR_BESOINSAIDE<20,W_IndJour>
					IF LEN(ENR_BESOINSAIDE<21,W_IndJour>)=3 THEN ENR_BESOINSAIDE<21,W_IndJour>="0":ENR_BESOINSAIDE<21,W_IndJour>
					
					W_Day=OCONV(W_DateDeb+W_Att-1,"DWA")
					BEGIN CASE
						CASE W_Day = "Monday"
							Jour2="0"
						CASE W_Day = "Tuesday"
							Jour2="1"
						CASE W_Day = "Wednesday"
							Jour2="2"
						CASE W_Day = "Thursday"
							Jour2="3"
						CASE W_Day = "Friday"
							Jour2="4"
						CASE W_Day = "Saturday"
							Jour2="5"
						CASE W_Day = "Sunday"
							Jour2="6"
				    END CASE					
					
					IF W_DateDeb+W_Att-1 <= W_DateFin THEN
							W_Pb="FAUX"
							W_Trouve="FAUX"
							W_Abs="FAUX"
							W_SaveJ=""
							Erreur="0"
							J=0
							LOOP
								J=J+1
							WHILE J<=DCOUNT(ENR_TPSTEMPO<W_Att>,CHAR(253)) AND W_Pb="FAUX" AND W_Abs="FAUX" AND Jour=Jour2
								IF ICONV(ENR_TPSTEMPO<W_Att,1,J>,"MCU")="INTERVP" OR ICONV(ENR_TPSTEMPO<W_Att,1,J>,"MCU")="EXCEPTINTERVP" OR ICONV(ENR_TPSTEMPO<W_Att,1,J>,"MCU")="INTERVM" OR ICONV(ENR_TPSTEMPO<W_Att,1,J>,"MCU")="EXCEPTINTERVM" OR ICONV(ENR_TPSTEMPO<W_Att,1,J>,"MCU")="INTERVI" OR ICONV(ENR_TPSTEMPO<W_Att,1,J>,"MCU")="EXCEPTINTERVI" THEN
									IF W_SaveJ="" THEN W_SaveJ=J
									* Srie de tests
									W_CalcDuree=(ENR_BESOINSAIDE<21,W_IndJour>/100)*100
									IF ENR_TPSTEMPO<W_Att,2,J> >= ENR_BESOINSAIDE<19,W_IndJour> AND ENR_TPSTEMPO<W_Att,3,J> <= ENR_BESOINSAIDE<20,W_IndJour> THEN
										W_Trouve="VRAI"									
										* Ici, l'erreur est : on a bien une intervention dans la plage horaire type, mais la dure ne correspond pas.
										IF LEN(W_CalcDuree)=3 THEN W_CalcDuree=" ":W_CalcDuree
										IF ENR_TPSTEMPO<W_Att,5,J> < W_CalcDuree THEN
											W_Pb="VRAI"
											W_SaveJ=J
											Erreur="1"
										END
									END ELSE
										IF ENR_TPSTEMPO<W_Att,2,J> >= ENR_BESOINSAIDE<19,W_IndJour> AND ENR_TPSTEMPO<W_Att,2,J> <= ENR_BESOINSAIDE<20,W_IndJour> THEN
											W_Trouve="VRAI"
											* Arriv, ici, nous savons que l'heure de dbut est sur la plage horaire type, mais pas l'heure de fin. Nous devons
											* donc dfinir si la dure de l'intervention effective correspond bien  la dure type.
											W_Duree=ENR_BESOINSAIDE<20,W_IndJour>-ENR_TPSTEMPO<W_Att,2,J>
											IF LEN(W_Duree)=3 THEN W_Duree=" ":W_Duree
											IF W_Duree<W_CalcDuree THEN
												W_Pb="VRAI"
												W_SaveJ=J
												Erreur="2"
											END
										END ELSE
											IF ENR_TPSTEMPO<W_Att,3,J> >= ENR_BESOINSAIDE<19,W_IndJour> AND ENR_TPSTEMPO<W_Att,3,J> <= ENR_BESOINSAIDE<20,W_IndJour> THEN
												W_Trouve="VRAI"
												* Arriv, ici, nous savons que l'heure de fin est sur la plage horaire type, mais pas l'heure de dbut. Nous devons
												* donc dfinir si la dure de l'intervention effective correspond bien  la dure type.
												W_Duree=ENR_TPSTEMPO<W_Att,3,J>-ENR_BESOINSAIDE<19,W_IndJour>
												IF LEN(W_Duree)=3 THEN W_Duree=" ":W_Duree
												IF W_Duree<W_CalcDuree THEN
													W_Pb="VRAI"
													W_SaveJ=J
													Erreur="3"
												END
											END
										END
									END
								END ELSE
									IF ICONV(ENR_TPSTEMPO<W_Att,1,J>,"MCU")="ABSAIDE" THEN
										W_Abs="VRAI"
										W_Trouve="VRAI"
									END
								END
							REPEAT
							J=W_SaveJ
							IF (W_Pb="VRAI" OR W_Trouve="FAUX") AND Jour=Jour2 THEN
								IF W_Trouve="FAUX" THEN Erreur="4"
								GOSUB 20
							END
							W_IndJour=W_IndJour+1
							IF W_IndJour>DCOUNT(ENR_BESOINSAIDE<18>,CHAR(253)) THEN
								W_Att=W_Att+6-ENR_BESOINSAIDE<18,1>
								W_IndJour=1
								Jour=ENR_BESOINSAIDE<18,W_IndJour>
							END ELSE
								IF Jour<>ENR_BESOINSAIDE<18,W_IndJour> THEN
									W_Att=W_Att+ENR_BESOINSAIDE<18,W_IndJour>-ENR_BESOINSAIDE<18,W_IndJour-1>
									Jour=ENR_BESOINSAIDE<18,W_IndJour>
								END
							END
					END ELSE
						W_IndJour=DCOUNT(ENR_BESOINSAIDE<18>,CHAR(253))
						W_IndJour=W_IndJour+1
						W_Fin="VRAI"
					END
				REPEAT
			END
		REPEAT
	END
	
RETURN
***********************************************************
* Gnration de la ligne dans W_Sortie                    *
***********************************************************
20

	W_IndSortie=W_IndSortie+1
	
	W_Sortie<W_IndSortie,1>=W_CleAct[6,3]
	W_Sortie<W_IndSortie,2>=""
	IF W_TypeTri="S" THEN
		W_Sortie<W_IndSortie,2>=ENR_CIVILAIDE<40>[1,3]
	END
	IF W_TypeTri="R" THEN
		W_Sortie<W_IndSortie,2>=ENR_CIVILAIDE<39>
	END	
	IF W_TypeTri="C" THEN
		W_Sortie<W_IndSortie,2>=ENR_CIVILAIDE<41>
	END
	W_Sortie<W_IndSortie,3>=W_CleAide
	W_Sortie<W_IndSortie,4>=ENR_CIVILAIDE<2>
	W_Sortie<W_IndSortie,5>=ENR_CIVILAIDE<3>
	
	W_Jour=OCONV(W_DateDeb+W_Att-1,"D4/")
	W_Jour=W_Jour[1,5]
	W_Day=OCONV(W_DateDeb+W_Att-1,"DWA")
	BEGIN CASE
		CASE W_Day = "Monday"
			LibJour="LU"
		CASE W_Day = "Tuesday"
			LibJour="MA"
		CASE W_Day = "Wednesday"
			LibJour="ME"
		CASE W_Day = "Thursday"
			LibJour="JE"
		CASE W_Day = "Friday"
			LibJour="VE"
		CASE W_Day = "Saturday"
			LibJour="SA"
		CASE W_Day = "Sunday"
			LibJour="DI"
	END CASE

	W_Sortie<W_IndSortie,6>=LibJour:" ":W_Jour
	
	W_GestionMinute="FAUX"
	READ ENR_TPSPARAM FROM F.TPSPARAM, "1" THEN
		IF ENR_TPSPARAM<20>="2" THEN W_GestionMinute="VRAI"
	END
	
	IF W_GestionMinute="VRAI" THEN
		FOR M=19 TO 21
			IF ENR_BESOINSAIDE<M,W_IndJour>="0" THEN ENR_BESOINSAIDE<M,W_IndJour>=" "
			W_HeureEnMin=""
			IF LEN(ENR_BESOINSAIDE<M,W_IndJour>)=2 OR LEN(ENR_BESOINSAIDE<M,W_IndJour>)=1 THEN
				W_Hre=" 0"
				W_Min=ENR_BESOINSAIDE<M,W_IndJour>
			END ELSE
				IF LEN(ENR_BESOINSAIDE<M,W_IndJour>)=3 THEN
					W_Hre=" ":ENR_BESOINSAIDE<M,W_IndJour>[1,1]
					W_Min=ENR_BESOINSAIDE<M,W_IndJour>[2,2]
				END ELSE
					W_Hre=ENR_BESOINSAIDE<M,W_IndJour>[1,2]
					W_Min=ENR_BESOINSAIDE<M,W_IndJour>[3,2]
				END
			END
			W_Min=(W_Min*60)/100
			IF LEN(W_Min)=1 THEN
				W_HeureEnMin=W_Hre:"0":W_Min
			END ELSE
				W_HeureEnMin=W_Hre:W_Min
			END
			
			W_Sortie<W_IndSortie,M-12>=W_HeureEnMin[1,2]:"H":W_HeureEnMin[3,2]
		NEXT M

		IF W_Trouve="VRAI" OR W_SaveJ#"" THEN
			FOR M=2 TO 5
				IF M<>4 THEN
					IF M=2 OR M=3 THEN Ind=M+8
					IF M=5 THEN Ind=12

					IF ENR_TPSTEMPO<W_Att,M,J>[1,1]="0" THEN ENR_TPSTEMPO<W_Att,M,J>[1,1]=" "
					W_HeureEnMin=""
					W_Hre=ENR_TPSTEMPO<W_Att,M,J>[1,2]
					W_Min=ENR_TPSTEMPO<W_Att,M,J>[3,2]
					W_Min=(W_Min*60)/100
					IF LEN(W_Min)=1 THEN
						W_HeureEnMin=W_Hre:"0":W_Min
					END ELSE
						W_HeureEnMin=W_Hre:W_Min
					END
					
					W_Sortie<W_IndSortie,Ind>=W_HeureEnMin[1,2]:"H":W_HeureEnMin[3,2]
				END
			NEXT M
		END ELSE
			W_Sortie<W_IndSortie,10>=""
			W_Sortie<W_IndSortie,11>=""
			W_Sortie<W_IndSortie,12>=""
		END
	END ELSE
		FOR M=19 TO 21
			IF ENR_BESOINSAIDE<M,W_IndJour>="0" THEN ENR_BESOINSAIDE<M,W_IndJour>=" "
			IF LEN(ENR_BESOINSAIDE<M,W_IndJour>)=1 THEN
				W_Sortie<W_IndSortie,M-12>=" 0H0":ENR_BESOINSAIDE<M,W_IndJour>
			END ELSE
				IF LEN(ENR_BESOINSAIDE<M,W_IndJour>)=2 THEN
					W_Sortie<W_IndSortie,M-12>=" 0H":ENR_BESOINSAIDE<M,W_IndJour>
				END ELSE
					IF LEN(ENR_BESOINSAIDE<M,W_IndJour>)=3 THEN
						W_Sortie<W_IndSortie,M-12>=" ":ENR_BESOINSAIDE<M,W_IndJour>[1,1]:"H":ENR_BESOINSAIDE<M,W_IndJour>[2,2]
					END ELSE
						W_Sortie<W_IndSortie,M-12>=ENR_BESOINSAIDE<M,W_IndJour>[1,2]:"H":ENR_BESOINSAIDE<M,W_IndJour>[3,2]
					END
				END
			END
		NEXT M
		
		IF W_Trouve="VRAI" OR W_SaveJ#"" THEN
			IF ENR_TPSTEMPO<W_Att,M,J>[1,1]="0" THEN ENR_TPSTEMPO<W_Att,M,J>[1,1]=" "
			W_Sortie<W_IndSortie,10>=ENR_TPSTEMPO<W_Att,2,J>[1,2]:"H":ENR_TPSTEMPO<W_Att,2,J>[3,2]
			W_Sortie<W_IndSortie,11>=ENR_TPSTEMPO<W_Att,3,J>[1,2]:"H":ENR_TPSTEMPO<W_Att,3,J>[3,2]
			W_Sortie<W_IndSortie,12>=ENR_TPSTEMPO<W_Att,5,J>[1,2]:"H":ENR_TPSTEMPO<W_Att,5,J>[3,2]
		END ELSE
			W_Sortie<W_IndSortie,10>=""
			W_Sortie<W_IndSortie,11>=""
			W_Sortie<W_IndSortie,12>=""
		END
	END
	*W_Sortie<W_IndSortie,12>=W_Sortie<W_IndSortie,12>:Erreur
	W_Sortie<W_IndSortie,13>=ENR_TPSTEMPO<W_Att,2,J>:"-":ENR_BESOINSAIDE<19,W_IndJour>:"-":ENR_TPSTEMPO<W_Att,3,J>:"-":ENR_BESOINSAIDE<20,W_IndJour>
	
RETURN