SUBROUTINE EXTRACTPLANNINGSMOBILES(RETURNVAL,PARAMETRES,W_Sortie)
************************************************
* Ce programme permet d'extraire les plannings *
* de manire ce qu'ils puissent tre utiliss  *
* par une application externe (pour le moment  *
* sur tlphonie mobile).                      *
*                                              *
* Grgory - 15/11/11                           *
************************************************
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "", "TPSTEMPO" TO F.TPSTEMPO ELSE RETURN
OPEN "", "CIVILAIDE" TO F.CIVILAIDE ELSE RETURN
OPEN "", "CIVILAIDANT" TO F.CIVILAIDANT ELSE RETURN
OPEN "", "FUSION" TO F.FUSION ELSE RETURN
OPEN "", "ACTIVITES" TO F.ACTIVITES ELSE RETURN
OPEN "", "BESOINSAIDE" TO F.BESOINSAIDE ELSE RETURN
OPEN "", "TPSOBS" TO F.TPSOBS ELSE RETURN
OPEN "", "TABLES" TO F.TABLES ELSE RETURN
OPEN "", "TPSMOI" TO F.TPSMOI ELSE RETURN
OPEN "", "TPSDETAILSINTERV" TO F.TPSDETAILSINTERV ELSE RETURN
OPEN "", "RUBSAISIE" TO F.RUBSAISIE ELSE RETURN
* Modif Greg - 10/06/14
OPEN "", "SSIADSOINS" TO F.SSIADSOINS ELSE RETURN
OPEN "", "AIDEDETAILTACHE" TO F.AIDEDETAILTACHE ELSE RETURN
OPEN "", "ENVIRONAIDE" TO F.ENVIRONAIDE ELSE RETURN

ENR_TPSTEMPO=""
ENR_CIVILAIDE=""
ENR_CIVILAIDANT=""
ENR_FUSION=""
ENR_BESOINSAIDE=""
ENR_TPSOBS=""
ENR_TABLES=""
ENR_TPSMOI=""
ENR_TPSDETAILSINTERV=""
ENR_RUBSAISIE=""
* Modif Greg - 10/06/14
ENR_SSIADSOINS=""
ENR_AIDEDETAILTACHE=""
ENR_ENVIRONAIDE=""

READ ENR_TABLES FROM F.TABLES, "AIDETECHNIQUE" ELSE ENR_TABLES=""

W_Date=OCONV(DATE(),"D4/")
W_Heure=TIMEDATE()
W_Heure=W_Heure[1,2]:W_Heure[4,2]

* Modif Greg - 26/08/13 - Au vu des volumes des fichiers gnrs, Penbase a demand  revoir le systme.
* En attendant un systme plus optimis (notre ide de gestion leur a t soumise mais n'a pas encore t
* valide), il a t dcid de faire une modification simple et rapide : en journe, l'extraction se fait
* sur 10 jours, la nuit, elle se fait sur 30 jours (avant elle tait automatiquement sur 30 jours).
W_DateDeb=DATE()
IF W_Heure>="2000" OR W_Heure<="0600" THEN
	W_DateFin=W_DateDeb+30
END ELSE
	W_DateFin=W_DateDeb+10
END

* On fait moins 1 sur la date de dbut et +1 sur la date de fin pour avoir les interventions de nuit.
* Si on veut afficher le planning par exemple du 1 au 30 juin, pour les interventions de nuit se
* terminant le 1, il nous faut les dbuts, dats au 31/05. Mme principe pour les interventions
* de nuit dbutant le 30 : si on les veut au complet, il nous faut les interventions du 01/07.
* Cela est d au fait que dans nos fichiers, les interventions de nuit sont coupes en deux et
* reprsentes par deux enregistrements.
W_CleRetour="EXTRACTPLANNINGSMOBILES":W_DateDeb-1:W_DateFin+1
W_Params = 'AFFICHEPLANNING |':W_CleRetour:'||PMIS|':W_DateDeb-1:'|':W_DateFin+1:'||||E|||'

EXECUTE W_Params

READ ENR_TPSTEMPO FROM F.TPSTEMPO, "AFFICHEPLANNING":W_CleRetour THEN
	ENR_FUSION<1>="CodeAsso;CodeAct;DateDebExtract;HreDebExtract;DateFinExtract;HreFinExtract;DateGenFichier;HreGenFichier;CodeAidant;NomAidant;PrenomAidant;Adresse1Aidant;Adresse2Aidant;CodePostalAidant;CommuneAidant;Tel1Aidant;Tel2Aidant;CodeAide;NomAide;PrenomAide;Adresse1Aide;Adresse2Aide;CodePostalAide;CommuneAide;Tel1Aide;Tel2Aide;DateDebEvnt;HreDebEvnt;DateFinEvnt;HreFinEvnt;TypeAct;TypeEvnt;ObsMOI;Taches;Modalites;Infos;CleDomicile;LibelleMOI;AidesTechniques:DateNaisAide;QualifProf"
	
	W_CodeAidant=""
	W_Ind=1
	I = 0
	W_Jour=-1
	LOOP
		I = I + 1
		W_Jour=W_Jour+1
	WHILE ENR_TPSTEMPO<I>[1,4] <> "#FIN"
		IF ENR_TPSTEMPO<I>[1,7] = "#Interv" THEN
			W_QualifProf=""
			W_CodeAidant=ENR_TPSTEMPO<I>[8,5]
			READ ENR_CIVILAIDANT FROM F.CIVILAIDANT, W_CodeAidant THEN
				* Si l'aidant n'est pas tlgr, il ne faut pas le traiter.
				IF ENR_CIVILAIDANT<48>="1" THEN
					W_Jour = -1
					
					W_QualifProf="AUXILIAIRE DE VIE SOCIALE"
				END ELSE
					W_CodeAidant=""
				END
			END ELSE
				W_CodeAidant=""
			END
		END ELSE
			* Le jour qui suit immdiatement la ligne indiquant qu'on est sur un nouvel aidant
			* permet juste de travailler sur les interventions de nuit si on en dtecte qui se
			* termine sur le deuxime. Par exemple le premier jour j'ai le 30/05, le deuxime
			* le 01/06. La priode demande dbut le 01/06. Je "zappe" donc la ligne du 30 et
			* si le 01 je trouve une intervention de nuit se finissant, seulement  ce moment
			* l je regarde la ligne du 30 pour trouver le dbut de l'intervention de nuit.
			IF ENR_TPSTEMPO<I-1>[1,7] = "#Interv" THEN
				W_Jour = -1
			END ELSE
				IF W_Jour<=W_DateFin-W_DateDeb AND W_CodeAidant<>"" THEN
					J=0
					LOOP
						J=J+1
					WHILE ENR_TPSTEMPO<I,1,J><>""
						IF ENR_TPSTEMPO<I,1,J>[1,6]="Interv" OR ENR_TPSTEMPO<I,1,J>[1,7]="INDISPO" OR ENR_TPSTEMPO<I,1,J>[1,3]="MOI" OR ENR_TPSTEMPO<I,1,J>[1,6]="CONGES" OR ENR_TPSTEMPO<I,1,J>[1,5]="ARRET" OR ENR_TPSTEMPO<I,1,J>[1,1]="V" THEN
							READ ENR_CIVILAIDE FROM F.CIVILAIDE, ENR_TPSTEMPO<I,4,J>[6,5] ELSE ENR_CIVILAIDE=""
							READ ENR_ACTIVITES FROM F.ACTIVITES, ENR_TPSTEMPO<I,4,J>[16,6] ELSE ENR_ACTIVITES=""
							READ ENR_BESOINSAIDE FROM F.BESOINSAIDE, ENR_TPSTEMPO<I,4,J>[6,5] ELSE ENR_BESOINSAIDE=""
							READ ENR_TPSOBS FROM F.TPSOBS, W_CodeAidant:ENR_TPSTEMPO<I,4,J>[6,5] ELSE ENR_TPSOBS=""
							
							W_Type=""
							IF ENR_TPSTEMPO<I,1,J>[1,6]="Interv" THEN W_Type=""
							IF ENR_TPSTEMPO<I,1,J>[1,7]="INDISPO" THEN W_Type="I"
							IF ENR_TPSTEMPO<I,1,J>[1,3]="MOI" THEN W_Type="M"
							IF ENR_TPSTEMPO<I,1,J>[1,6]="CONGES" THEN
								IF ENR_TPSTEMPO<I,4,J>[1,1]="V" THEN
									W_Type="AA"
								END ELSE
									W_Type="C"
								END
							END
							IF ENR_TPSTEMPO<I,1,J>[1,5]="ARRET" THEN W_Type="A"
							IF ENR_TPSTEMPO<I,1,J>[1,1]="V" THEN W_Type="VM"							
							
							W_DateDebInterv=""
							W_DateFinInterv=""
							W_HreDebInterv=""
							W_HreFinInterv=""
							
							* Si l'heure de dbut n'est pas 0000, il ne s'agit pas d'une intervention
							* dbute la veille, donc on prend les donnes qu'on a sur ce jour.
							* Si on est sur autre chose qu'une intervention, on prend les donnes du jour aussi.
							IF ENR_TPSTEMPO<I,2,J><>"0000" OR W_Type<>"" THEN
								W_DateDebInterv=W_DateDeb+W_Jour
								W_HreDebInterv=ENR_TPSTEMPO<I,2,J>
							END ELSE
								* Si la dernire intervention de la veille se termine  2400, il s'agit d'une
								* intervention de nuit.
								* Sinon on considre que c'est une intervention normale.
								IF ENR_TPSTEMPO<I-1,3,DCOUNT(ENR_TPSTEMPO<I-1,3>,CHAR(252))>="2400" THEN
									W_DateDebInterv=W_DateDeb+W_Jour-1
									W_HreDebInterv=ENR_TPSTEMPO<I-1,2,DCOUNT(ENR_TPSTEMPO<I-1,3>,CHAR(252))>
								END ELSE
									W_DateDebInterv=W_DateDeb+W_Jour
									W_HreDebInterv=ENR_TPSTEMPO<I,2,J>
								END
							END
							
							* Si l'heure de fin n'est pas 2400, il ne s'agit pas d'une intervention d'une intervention
							* de nuit donc on prend simplement les donnes qu'on a sur ce jour.
							* Si on est sur autre chose qu'une intervention, on prend les donnes du jour aussi.
							IF ENR_TPSTEMPO<I,3,J><>"2400" OR W_Type<>"" THEN
								W_DateFinInterv=W_DateDeb+W_Jour
								W_HreFinInterv=ENR_TPSTEMPO<I,3,J>
							END ELSE
								* Si la premire intervention du lendemain dbute  0000, c'est qu'il s'agit d'une
								* intervention de nuit.
								* Sinon on prend les donnes de ce jour.
								IF ENR_TPSTEMPO<I+1,2,1>="0000" THEN
									W_DateFinInterv=W_DateDeb+W_Jour+1
									W_HreFinInterv=ENR_TPSTEMPO<I+1,3,1>
								END ELSE
									W_DateFinInterv=W_DateDeb+W_Jour
									W_HreFinInterv=ENR_TPSTEMPO<I,3,J>
								END
							END
							
							W_AssoAct=";"
							IF W_Type="" THEN
								W_AssoAct=ENR_TPSTEMPO<I,4,J>[16,3]:';':ENR_TPSTEMPO<I,4,J>[16,6]
							END
							
							* Code asso, code activit, date dbut extraction, heure dbut extraction, date fin extraction, heure fin extraction, date gnration fichier, heure gnration fichier
							W_Chaine=W_AssoAct:';':OCONV(W_DateDeb,"D4/"):';0000;':OCONV(W_DateFin,"D4/"):';2400;':W_Date:';':W_Heure
							
							W_Adresse=TRIM(ENR_CIVILAIDANT<5>:' ':ENR_CIVILAIDANT<6>:' ':ENR_CIVILAIDANT<7>:' ':ENR_CIVILAIDANT<8>)
							
							* Code aidant, nom aidant, prenom aidant, adresse 1 aidant, adresse 2 aidant, code postal aidant, commune aidant, tel 1 aidant, tel 2 aidant
							W_Chaine=W_Chaine:';':W_CodeAidant:';':ENR_CIVILAIDANT<2>:';':ENR_CIVILAIDANT<3>:';':W_Adresse:';':ENR_CIVILAIDANT<9>:';':ENR_CIVILAIDANT<10>:';':ENR_CIVILAIDANT<11>:';':ENR_CIVILAIDANT<12>:';':ENR_CIVILAIDANT<14>

							W_Adresse=TRIM(ENR_CIVILAIDE<5>:' ':ENR_CIVILAIDE<6>:' ':ENR_CIVILAIDE<7>:' ':ENR_CIVILAIDE<8>)

							* Code aid, nom aid, prenom aid, adresse 1 aid, adresse 2 aid, code postal aid, commune aid, tel 1 aid, tel 2 aid
							IF W_Type="" THEN
								W_Chaine=W_Chaine:';':ENR_TPSTEMPO<I,4,J>[6,5]:';':ENR_CIVILAIDE<2>:';':ENR_CIVILAIDE<3>:';':W_Adresse:';':ENR_CIVILAIDE<9>:';':ENR_CIVILAIDE<10>:';':ENR_CIVILAIDE<11>:';':ENR_CIVILAIDE<14>:';':ENR_CIVILAIDE<16>
							END ELSE
								W_Chaine=W_Chaine:';;;;;;;;;'
							END
							
							* Date deb interv, heure de dbut, date fin interv, heure de fin
							W_Chaine=W_Chaine:';':OCONV(W_DateDebInterv,"D4/"):';':W_HreDebInterv:';':OCONV(W_DateFinInterv,"D4/"):';':W_HreFinInterv
							
							* Type d'activit, type d'vnement
							W_Chaine=W_Chaine:';':ENR_ACTIVITES<12>:';':W_Type:';'
							
							* Observation potentiellement prsente dans le cas d'une MOI
							IF W_Type="M" THEN
								READ ENR_TPSMOI FROM F.TPSMOI, ENR_TPSTEMPO<I,4,J>[1,14] THEN
									* Modif Greg - 24/06/14 Ajout du CONVERT
									ENR_TPSMOI<5>=CONVERT(';',',',ENR_TPSMOI<5>)								
									W_Chaine=W_Chaine:ENR_TPSMOI<5>
								END
							END
							
							* Tches
							W_Taches=""
							* Modif Greg - 10/06/14 - Modifs pour tenir compte de la nouvelle gestion des soins et des tches :
							* Pour les tches on a directement les libells et pour les soins, il faut lire un nouveau fichier.
							TAB_SSIADTACHES=""
							IF W_Type="" THEN
								READ ENR_TPSDETAILSINTERV FROM F.TPSDETAILSINTERV, ENR_TPSTEMPO<I,4,J> ELSE ENR_TPSDETAILSINTERV=""
								IF ENR_TPSDETAILSINTERV<7><>"" THEN
									TAB_SSIADTACHES<1>=ENR_TPSDETAILSINTERV<7>
								END ELSE
									* Les tches/soins des aids sont maintenant dans un fichiers ddis, avec une notion de date d'valuation dans la cl.
									W_ReqTaches=""
									EXECUTE 'SELECT AIDEDETAILTACHE AVEC 0 = "':ENR_TPSTEMPO<I,4,J>[6,5]:']" PAR 0' 
									EXECUTE 'SAUVE-LISTE W_ReqTaches'
									EXECUTE "LISTE W_ReqTaches" RETURNING MSGCODE
									
									IF MSGCODE<1> # 209 THEN
										SELECT F.AIDEDETAILTACHE TO W_ReqTaches
										
										* On fait en sorte de prendre l'valuation la plus rcente. Donc on boucle et  chaque fois on crase le tableau.
										W_FiniTaches="FAUX"
										LOOP
											READNEXT W_CleTaches FROM W_ReqTaches ELSE W_FiniTaches="VRAI"
										WHILE W_FiniTaches="FAUX" DO
											READ ENR_AIDEDETAILTACHE FROM F.AIDEDETAILTACHE, W_CleTaches THEN
												TAB_SSIADTACHES<1>=ENR_AIDEDETAILTACHE<1>
											END
										REPEAT
									END
									
									EXECUTE "EFFACER-LISTE W_ReqTaches"
								END
								
								FOR L = 1 TO DCOUNT(TAB_SSIADTACHES<1>,CHAR(253))
									IF LEN(TAB_SSIADTACHES<1,L>) = 6 THEN
										READ ENR_SSIADSOINS FROM F.SSIADSOINS, TAB_SSIADTACHES<1,L> THEN
											IF W_Taches<>"" THEN W_Taches=W_Taches:CHAR(252)
											W_Taches=W_Taches:TAB_SSIADTACHES<1,L>
										END
									END ELSE
										IF W_Taches<>"" THEN W_Taches=W_Taches:CHAR(252)
										W_Taches=W_Taches:TAB_SSIADTACHES<1,L>
									END
								NEXT L								
								
								W_Taches=CONVERT(';',',',W_Taches)
								W_Taches=CONVERT('|',',',W_Taches)
								W_Taches=CONVERT(CHAR(252),'|',W_Taches)
							END
							* Fin modif Greg - 10/06/14
							W_Chaine=W_Chaine:';':W_Taches
							
							* Modalits d'intervention
							W_Modalites=""
							IF W_Type="" THEN
								IF TRIM(ENR_TPSOBS<1>)<>"" THEN
									W_Modalites=CONVERT(CHAR(13):CHAR(10),'$',TRIM(ENR_TPSOBS<1>))
								END ELSE
									IF TRIM(ENR_BESOINSAIDE<5>)<>"" THEN
										W_Modalites=CONVERT(CHAR(13):CHAR(10),'$',TRIM(ENR_BESOINSAIDE<5>))
									END
								END
								W_Modalites=CONVERT(';',',',W_Modalites)
								W_Modalites=CONVERT('|',',',W_Modalites)
								W_Modalites=CONVERT('$','|',W_Modalites)
							END
							W_Chaine=W_Chaine:';':W_Modalites
							
							* Infos vnement
							W_Infos=""
							IF W_Type="" THEN
								IF TRIM(ENR_TPSOBS<2>)<>"" THEN
									W_Infos=ENR_TPSOBS<2>
								END ELSE
									IF TRIM(ENR_BESOINSAIDE<17>)<>"" THEN
										W_Infos=ENR_BESOINSAIDE<17>
									END
								END
								W_Infos=CONVERT(';',',',W_Infos)
								*W_Infos=CONVERT('|',',',W_Infos)
							END	
							W_Chaine=W_Chaine:';':W_Infos
							
							* Cl aid ou pas
							W_CleAide=""
							IF W_Type="" THEN
								IF ENR_BESOINSAIDE<22>="O" THEN W_CleAide="1"
								IF ENR_BESOINSAIDE<22>="" THEN W_CleAide="0"
								IF ENR_BESOINSAIDE<22>="N" THEN W_CleAide="0"
							END
							W_Chaine=W_Chaine:';':W_CleAide
							
							* Libell des MOI
							W_Chaine=W_Chaine:';'
							IF W_Type="M" THEN
								READ ENR_TPSMOI FROM F.TPSMOI, ENR_TPSTEMPO<I,4,J>[1,14] THEN
									* Modif Greg - 25/01/13 - Ajout du libell de la MOI. L'observation,
									* si il y en a une, est alors mise entre parenthses.
									READ ENR_RUBSAISIE FROM F.RUBSAISIE, ENR_TPSMOI<3> THEN
										W_Chaine=W_Chaine:ENR_RUBSAISIE<1>
									END
								END
							END						

							* Modif Greg - 10/06/14 - Nouvelle colonne : aides techniques
							W_AidesTechniques=""
							IF W_Type="" THEN
								READ ENR_ENVIRONAIDE FROM F.ENVIRONAIDE, ENR_TPSTEMPO<I,4,J>[6,5] ELSE ENR_ENVIRONAIDE=""
								IF ENR_ENVIRONAIDE<19><>"" THEN
									FOR L = 1 TO DCOUNT(ENR_ENVIRONAIDE<19>,CHAR(253))
										IF ENR_ENVIRONAIDE<19,L><>"" THEN
											FOR M = 1 TO DCOUNT(ENR_TABLES<2>,CHAR(253))
												IF ENR_ENVIRONAIDE<19,L>=ENR_TABLES<2,M> THEN
													IF W_AidesTechniques<>"" THEN W_AidesTechniques=W_AidesTechniques:CHAR(252)
													W_AidesTechniques=W_AidesTechniques:ENR_TABLES<3,M>
													EXIT
												END
											NEXT M
										END
									NEXT L
								END
								
								W_AidesTechniques=CONVERT(';',',',W_AidesTechniques)
								W_AidesTechniques=CONVERT('|',',',W_AidesTechniques)
								W_AidesTechniques=CONVERT(CHAR(252),'|',W_AidesTechniques)								
							END
							W_Chaine=W_Chaine:';':W_AidesTechniques
							* Fin modif Greg - 10/06/14
							
							W_Chaine=W_Chaine:';':OCONV(ENR_CIVILAIDE<20>,"D4/"):';':W_QualifProf
							
							* Les interventions de nuit peuvent faire qu'on a 2 fois la mme ligne  la suite (
							* on traite une fois l'intervention car on a "trouv" la fin et on la retraite dans
							* foule car on a trouv le dbut). Le plus simple est simplement de regarder si la
							* ligne qu'on vient de gnrer est la mme ou pas que la ligne d'avant.
							IF W_Chaine<>ENR_FUSION<W_Ind> THEN
								W_Ind=DCOUNT(ENR_FUSION,CHAR(254))+1
								ENR_FUSION<W_Ind>=W_Chaine
							END
							
						END
					REPEAT
				END
			END
		END
	REPEAT

	IF TRIM(ENR_FUSION<2>)<>"" THEN
		ENR_FUSION<-1>="$"
		WRITE ENR_FUSION ON F.FUSION, W_Date[9,2]:W_Date[4,2]:W_Date[1,2]:W_Heure:'.Plg'
		W_Sortie=W_Date[9,2]:W_Date[4,2]:W_Date[1,2]:W_Heure:'.Plg'
	END ELSE
		W_Sortie=""
	END
	
	EXECUTE 'DELETE TPSTEMPO AFFICHEPLANNING':W_CleRetour
END ELSE
	W_Sortie=""
END

RETURN