*PARAMETRES*
*Gnration des semaines types*
*Date de rfrence (JJ/MM/AAAA)|10X|TXT|O*
*Type d'activit (P, M, I ou S)|1X|TXT|O*
*Exclusion des interventions avec date de fin (O ou N)|1X|TXT|O*
*FIN PARAMETRES*

SUBROUTINE GENERESEMAINETYPE(RETURNVAL,PARAMETRES,W_Sortie)
EXECUTE 'DATE.FORMAT'
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"

W_Sortie = ""

******************************************************************************
** Ouverture des fichiers
******************************************************************************
OPEN "","TPSDETAILSINTERV" TO F.TPSDETAILSINTERV ELSE W_Sortie = "Erreur d'ouverture du fichier TPSDETAILSINTERV" ;* en lecture criture
OPEN "","TPSSEMAINETYPE" TO F.TPSSEMAINETYPE ELSE W_Sortie = "Erreur d'ouverture du fichier TPSSEMAINETYPE" ;* en lecture
OPEN "","CIVILAIDE" TO F.CIVILAIDE ELSE W_Sortie = "Erreur d'ouverture du fichier CIVILAIDE" ;* en lecture
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE W_Sortie = "Erreur d'ouverture du fichier CIVILAIDANT" ;* en lecture
OPEN "","FUSION" TO F.FUSION ELSE W_Sortie = "Erreur d'ouverture du fichier FUSION" ;* en lecture

IF W_Sortie # "" THEN RETURN

******************************************************************************
** Rcupration des paramtres
******************************************************************************
W_DateRef = ICONV(PARAMETRES<1>,"D4/")
W_TypeAct = UPCASE(PARAMETRES<2>)
W_ExclureDateFin = UPCASE(PARAMETRES<3>)

IF W_DateRef="" THEN
	W_Sortie="Date de rfrence incorrecte."
END
IF W_TypeAct<>"P" AND W_TypeAct<>"M" AND W_TypeAct<>"I" AND W_TypeAct<>"S" THEN
	W_Sortie="Type d'activit incorrect."
END
IF W_ExclureDateFin<>"O" AND W_ExclureDateFin<>"N" THEN
	W_Sortie="Paramtre d'exclustion incorrect."
END

IF W_Sortie<>"" THEN RETURN

ENR_TPSDETAILSINTERV=""
ENR_TPSSEMAINETYPE=""
ENR_CIVILAIDE=""
ENR_CIVILAIDANT=""
TAB_HORSPLAGES=""
TAB_EXCLU=""
TAB_ERREUR=""

W_IndHorsPlage=1
W_IndExclu=1
W_IndErreur=1
W_IndOk=1

TAB_HORSPLAGES<W_IndHorsPlage>="CodeAide;NomPrenomAide;CodeAidant;NomPrenomAidant;DateDeb;DateFin;Jour;Freq;HreDeb;HreFin;Duree;Imperative"
TAB_EXCLU<W_IndExclu>="CodeAide;NomPrenomAide;CodeAidant;NomPrenomAidant;DateDeb;DateFin;Jour;Freq;HreDeb;HreFin;Duree;Imperative"
TAB_ERREUR<W_IndErreur>="CodeAide;NomPrenomAide;CodeAidant;NomPrenomAidant;DateDeb;DateFin;Jour;Freq;HreDeb;HreFin;Duree;Imperative;Erreur"
TAB_OK<W_IndOk>="CodeAide;NomPrenomAide;CodeAidant;NomPrenomAidant;DateDeb;DateFin;Jour;Freq;HreDeb;HreFin;Duree;Imperative"

GOSUB 5
GOSUB 10

GOSUB 20


RETURN
**************************************
* Apuration de TPSSEMAINETYPE        *
**************************************
5

	W_ReqType=""
	EXECUTE 'SELECT TPSSEMAINETYPE AVEC TypeActSemType = "':W_TypeAct:'"'
	EXECUTE 'SAUVE-LISTE W_ReqType'
	EXECUTE "LISTE W_ReqType" RETURNING MSGCODE 

	IF MSGCODE<1>#209 THEN
		SELECT F.TPSSEMAINETYPE TO W_ReqType
	
		W_Fini="FAUX"
		LOOP
			READNEXT W_CleType FROM W_ReqType ELSE W_Fini="VRAI"
		WHILE W_Fini="FAUX" DO	
			EXECUTE "DELETE TPSSEMAINETYPE ":W_CleType
		REPEAT
	END
	
	EXECUTE "EFFACER-LISTE W_ReqType"

RETURN
**************************************
* Slection des interventions        *
**************************************
10

	W_ReqPlg=""
	EXECUTE 'SELECT TPSDETAILSINTERV AVEC DateDebInterv <= "':W_DateRef:'" AND AVEC 1 = "" OR >= "':W_DateRef:'" AND AVEC TypeActDetailInterv = "':W_TypeAct:'" AND AVEC 6 = "" PAR CodeAide PAR HeureInterv'
	EXECUTE 'SAUVE-LISTE W_ReqPlg'
	EXECUTE "LISTE W_ReqPlg" RETURNING MSGCODE 

	IF MSGCODE<1>#209 THEN
		SELECT F.TPSDETAILSINTERV TO W_ReqPlg
	
		W_Fini="FAUX"
		LOOP
			READNEXT W_CleTps FROM W_ReqPlg ELSE W_Fini="VRAI"
		WHILE W_Fini="FAUX" DO	
			READ ENR_TPSDETAILSINTERV FROM F.TPSDETAILSINTERV, W_CleTps THEN
				W_CodeAidant=W_CleTps[1,5]
				W_CodeAide=W_CleTps[6,5]
				W_DateDeb=W_CleTps[11,5]
				W_HreDeb=W_CleTps[23,4]
				W_DateFin=ENR_TPSDETAILSINTERV<1>
				W_HreFin=ENR_TPSDETAILSINTERV<2>
				W_Jour=W_CleTps[22,1]				
				W_Freq="1/":ENR_TPSDETAILSINTERV<3>
				W_Duree=ENR_TPSDETAILSINTERV<5>
				W_Imperative=ENR_TPSDETAILSINTERV<10>
				
				W_HreDeb=W_HreDeb "R%4"
				W_HreFin=W_HreFin "R%4"
				W_Duree=W_Duree "R%4"
				
				W_HreDebCent=W_HreDeb
				W_HreFinCent=W_HreFin
				W_DureeCent=W_Duree
				
				W_Hre=W_HreDeb[1,2]
				W_Min=W_HreDeb[3,2]
				W_Min=INT(((W_Min/100)*60)+0.5)
				W_Min=W_Min "R%2"
				W_HreDeb=W_Hre:'h':W_Min
				
				W_Hre=W_HreFin[1,2]
				W_Min=W_HreFin[3,2]
				W_Min=INT(((W_Min/100)*60)+0.5)
				W_Min=W_Min "R%2"
				W_HreFin=W_Hre:'h':W_Min
				
				W_Hre=W_Duree[1,2]
				W_Min=W_Duree[3,2]
				W_Min=INT(((W_Min/100)*60)+0.5)
				W_Min=W_Min "R%2"
				W_Duree=W_Hre:'h':W_Min				
				
				IF W_Jour="0" THEN W_JourLib="Lundi"
				IF W_Jour="1" THEN W_JourLib="Mardi"
				IF W_Jour="2" THEN W_JourLib="Mercredi"
				IF W_Jour="3" THEN W_JourLib="Jeudi"
				IF W_Jour="4" THEN W_JourLib="Vendredi"
				IF W_Jour="5" THEN W_JourLib="Samedi"
				IF W_Jour="6" THEN W_JourLib="Dimanche"

				READ ENR_CIVILAIDANT FROM F.CIVILAIDANT, W_CodeAidant ELSE ENR_CIVILAIDANT=""
				READ ENR_CIVILAIDE FROM F.CIVILAIDE, W_CodeAide ELSE ENR_CIVILAIDE=""
				
				W_LigneFusion=W_CodeAide:';':ENR_CIVILAIDE<2>:' ':ENR_CIVILAIDE<3>:';':W_CodeAidant:';':ENR_CIVILAIDANT<2>:' ':ENR_CIVILAIDANT<3>
				W_LigneFusion=W_LigneFusion:';':OCONV(W_DateDeb,"D4/"):';':OCONV(W_DateFin,"D4/"):';':W_JourLib:';':W_Freq
				W_LigneFusion=W_LigneFusion:';':W_HreDeb:';':W_HreFin:';':W_Duree:';':W_Imperative				
				
				IF W_ExclureDateFin="O" AND W_DateFin<>"" THEN
					W_IndExclu=W_IndExclu+1
					TAB_EXCLU<W_IndExclu>=W_LigneFusion
				END ELSE
					W_PlageOk="NON"		
					W_NbPlagesOk=0
					IF W_HreDebCent "R%4">="0100" AND W_HreDebCent<"1000" THEN
						W_PlageOk="OUI"
						W_HreDebType=W_HreDebCent-100
						W_HreDebType=W_HreDebType "R%4"
						W_HreFinType=W_HreFinCent+100
						W_HreFinType=W_HreFinType "R%4"
						W_DureeType=W_HreFinCent-W_HreDebCent
						W_DureeType=W_DureeType "R%4"
						TAB_TACHES=""
						TAB_TACHES<-1>="Aide au lever"
						TAB_TACHES<-1>="Aide et prparation du repas"
						TAB_TACHES<-1>="Aide  la petite toilette"
						TAB_TACHES<-1>="Aide habillage"
						W_NbPlagesOk=W_NbPlagesOk+1
					END
					IF W_HreDebCent "R%4">="1000" AND W_HreDebCent<"1100" THEN
						W_PlageOk="OUI"
						W_HreDebType=W_HreDebCent-100
						W_HreDebType=W_HreDebType "R%4"
						W_HreFinType=W_HreFinCent+100
						W_HreFinType=W_HreFinType "R%4"
						W_DureeType=W_HreFinCent-W_HreDebCent
						W_DureeType=W_DureeType "R%4"
						TAB_TACHES=""
						TAB_TACHES<-1>="Taches mnagres"
						W_NbPlagesOk=W_NbPlagesOk+1
					END
					IF W_HreDebCent "R%4">="1100" AND W_HreDebCent<"1300" THEN
						W_PlageOk="OUI"
						W_HreDebType=W_HreDebCent-100
						W_HreDebType=W_HreDebType "R%4"
						W_HreFinType=W_HreFinCent+100
						W_HreFinType=W_HreFinType "R%4"
						W_DureeType=W_HreFinCent-W_HreDebCent
						W_DureeType=W_DureeType "R%4"
						TAB_TACHES=""
						TAB_TACHES<-1>="Aide et prparation du repas"
						W_NbPlagesOk=W_NbPlagesOk+1
					END
					IF W_HreDebCent "R%4">="1300" AND W_HreDebCent<"1400" THEN
						W_PlageOk="OUI"
						W_HreDebType=W_HreDebCent-100
						W_HreDebType=W_HreDebType "R%4"
						W_HreFinType=W_HreFinCent+100
						W_HreFinType=W_HreFinType "R%4"
						W_DureeType=W_HreFinCent-W_HreDebCent
						W_DureeType=W_DureeType "R%4"
						TAB_TACHES=""
						TAB_TACHES<-1>="Changer les protections"
						TAB_TACHES<-1>="Aide dplacements - transferts"
						W_NbPlagesOk=W_NbPlagesOk+1
					END
					IF W_HreDebCent "R%4">="1400" AND W_HreDebCent<"1800" THEN
						W_PlageOk="OUI"
						W_HreDebType="1400"
						W_HreFinType="1800"
						W_DureeType=W_HreFinCent-W_HreDebCent
						W_DureeType=W_DureeType "R%4"
						TAB_TACHES=""
						TAB_TACHES<-1>="Taches mnagres"
						W_NbPlagesOk=W_NbPlagesOk+1
					END
					IF W_HreDebCent "R%4">="1800" AND W_HreDebCent<"2100" THEN
						W_PlageOk="OUI"
						W_HreDebType=W_HreDebCent-100
						W_HreDebType=W_HreDebType "R%4"
						W_HreFinType=W_HreFinCent+100
						W_HreFinType=W_HreFinType "R%4"
						W_DureeType=W_HreFinCent-W_HreDebCent
						W_DureeType=W_DureeType "R%4"
						TAB_TACHES=""
						TAB_TACHES<-1>="Aide et prparation du repas"
						TAB_TACHES<-1>="Aide au dshabillage"
						TAB_TACHES<-1>="Aide au coucher"
						W_NbPlagesOk=W_NbPlagesOk+1
					END
					
					IF W_PlageOk="OUI" THEN
						IF W_NbPlagesOk=1 THEN
							W_CleType=""
							W_DebCle=W_CodeAide:W_DateDeb:W_Jour:W_HreDebType:W_TypeAct
							
							GOSUB 30
							
							IF W_CleType<>"" THEN
								IF W_DureeType<W_DureeCent THEN
									W_IndErreur=W_IndErreur+1
									TAB_ERREUR<W_IndErreur>=W_LigneFusion:";Dure trop grande"
								END ELSE
									ENR_TPSSEMAINETYPE=""
									ENR_TPSSEMAINETYPE<1>=W_DateFin
									ENR_TPSSEMAINETYPE<2>=W_HreFinType
									ENR_TPSSEMAINETYPE<3>=W_DureeCent
									ENR_TPSSEMAINETYPE<6>=W_Freq[3,1]
									ENR_TPSSEMAINETYPE<7>=W_Imperative
									
									FOR iTaches = 1 TO DCOUNT(TAB_TACHES,CHAR(254))
										ENR_TPSSEMAINETYPE<4,iTaches>=TAB_TACHES<iTaches>
									NEXT iTaches
									
									WRITE ENR_TPSSEMAINETYPE ON F.TPSSEMAINETYPE, W_CleType
									
									W_IndOk=W_IndOk+1
									TAB_OK<W_IndOk>=W_LigneFusion
								END
							END ELSE
								W_IndErreur=W_IndErreur+1
								TAB_ERREUR<W_IndErreur>=W_LigneFusion:";Aucun numro d'ordre disponible"
							END
						END ELSE
							W_IndErreur=W_IndErreur+1
							TAB_ERREUR<W_IndErreur>=W_LigneFusion:";Chevauche deux plages"
						END
					END ELSE
						W_IndHorsPlage=W_IndHorsPlage+1
						TAB_HORSPLAGES<W_IndHorsPlage>=W_LigneFusion
					END
				END
			END
		REPEAT
	END
	
	EXECUTE "EFFACER-LISTE W_ReqPlg"

RETURN
**************************************
* Sortie                             *
**************************************
20

	*WRITE TAB_OK ON F.FUSION, "TAB_OK.csv"

	IF TAB_HORSPLAGES<2><>"" OR TAB_EXCLU<2><>"" OR TAB_ERREUR<2><>"" THEN
		W_NbFichiers=0
	
		W_Date=OCONV(DATE(),"D4/")
		W_Date=W_Date[7,4]:W_Date[4,2]:W_Date[1,2]
		W_Time=TIMEDATE()
		W_Time=W_Time[1,2]:W_Time[4,2]:W_Time[7,2]
		
		W_NomFichierHorsPlages=""
		W_NomFichierExclu=""
		W_NomFichierErreur=""
		
		IF TAB_HORSPLAGES<2><>"" THEN
			W_NbFichiers=W_NbFichiers+1
			W_NomFichierHorsPlages="Interventions_hors_plages_horaires-":W_Date:"-":W_Time:".csv"
			WRITE TAB_HORSPLAGES ON F.FUSION, W_NomFichierHorsPlages
		END
		IF TAB_EXCLU<2><>"" THEN
			W_NbFichiers=W_NbFichiers+1
			W_NomFichierExclu="Interventions_exclues-":W_Date:"-":W_Time:".csv"
			WRITE TAB_EXCLU ON F.FUSION, W_NomFichierExclu
		END
		IF TAB_ERREUR<2><>"" THEN
			W_NbFichiers=W_NbFichiers+1
			W_NomFichierErreur="Interventions_en_erreur-":W_Date:"-":W_Time:".csv"
			WRITE TAB_ERREUR ON F.FUSION, W_NomFichierErreur
		END		
		
		IF W_NbFichiers>1 THEN
			W_Sortie='Les fichiers suivants ont t gnrs dans le rpertoire FUSION : '
			IF W_NomFichierHorsPlages<> "" THEN W_Sortie=W_Sortie:CHAR(13):CHAR(10):'    - ':W_NomFichierHorsPlages
			IF W_NomFichierExclu<> "" THEN W_Sortie=W_Sortie:CHAR(13):CHAR(10):'    - ':W_NomFichierExclu
			IF W_NomFichierErreur<> "" THEN W_Sortie=W_Sortie:CHAR(13):CHAR(10):'    - ':W_NomFichierErreur
		END ELSE
			IF W_NomFichierHorsPlages<>"" THEN
				W_NomFichier=W_NomFichierHorsPlages
			END ELSE
				IF W_NomFichierExclu<>"" THEN
					W_NomFichier=W_NomFichierExclu
				END ELSE
					W_NomFichier=W_NomFichierErreur
				END
			END
			W_Sortie='Le fichier "':W_NomFichier:'" a t gnr dans le rpertoire FUSION.'
		END	
	END ELSE
		W_Sortie="Traitement termin."
	END

RETURN
**************************************
* Recherche d'un numro d'ordre      *
**************************************
30
	
	ENR_TEST=""
	FOR I = 1 TO 9
		W_CleTmp=W_DebCle:I
		READ ENR_TEST FROM F.TPSSEMAINETYPE, W_CleTmp ELSE ENR_TEST=""
		
		IF ENR_TEST="" THEN
			W_CleType=W_CleTmp
			EXIT
		END
	NEXT 

RETURN