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
OPEN "", "DOMITIMEPARAMINTGR" TO F.DOMITIMEPARAMINTGR ELSE RETURN

ENR_TPSTEMPO=""
ENR_CIVILAIDE=""
ENR_CIVILAIDANT=""
ENR_FUSION=""
ENR_BESOINSAIDE=""
ENR_TPSOBS=""
ENR_TABLES=""
ENR_TPSMOI=""
ENR_TPSDETAILSINTERV=""
ENR_RUBSAISIE=""
ENR_DOMITIMEPARAMINTGR=""

READ ENR_TABLES FROM F.TABLES, "DEFTECH" 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"
	
	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_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
				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><>""
						* Modif Greg - 02/04/14 - Si il s'agit d'une intervention, on s'assure que la cl soit un minimum bonne.
						IF (ENR_TPSTEMPO<I,1,J>[1,6]="Interv" AND LEN(ENR_TPSTEMPO<I,4,J>)) 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 W_Type="C"
							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=";"
							W_ActTlg="OUI"
							* Modif Greg - 02/04/14 - La ligne ci-aprs tait dans le IF. Or suite  la modif du 12/03, il faut que ce soit avant.
							W_AssoAct=ENR_TPSTEMPO<I,4,J>[16,3]:';':ENR_TPSTEMPO<I,4,J>[16,6]
							IF W_Type="" THEN
								* Modif Greg - 12/03/14 - Retour en arrire : la modif du 05 avait t faite  la demande
								* de l'ASMAD. Mais finalement ils veulent revenir en arrire car ils se rendent compte que
								* les salaries non plus du tout les plannings mandataires sur les mobiles.
								* Alors que ce qu'ils veulent, c'est ne pas afficher les aids mandataires sur certaines
								* options de l'appli Penbase.
								* Je n'efface pas le code du 05, il servira peut-tre quand mme un jour. Et pour leur demande
								* elles vont voir directement avec Penbase.
								* Modif Greg - 05/03/14 - On vrifie dsormais si l'activit est tlgre.
								*W_AssoAct=ENR_TPSTEMPO<I,4,J>[16,3]:';':ENR_TPSTEMPO<I,4,J>[16,6]
								*READ ENR_DOMITIMEPARAMINTGR FROM F.DOMITIMEPARAMINTGR, W_AssoAct[1,3] THEN
								*	IF INDEX(ENR_DOMITIMEPARAMINTGR<1>,ENR_TPSTEMPO<I,4,J>[16,6],1) = 0 THEN
								*		W_ActTlg="NON"
								*	END
								*END ELSE
								*	W_ActTlg="NON"
								*END
							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
									W_Chaine=W_Chaine:ENR_TPSMOI<5>
								END
							END
							
							* Tches
							W_Taches=""
							IF W_Type="" THEN
								READ ENR_TPSDETAILSINTERV FROM F.TPSDETAILSINTERV, ENR_TPSTEMPO<I,4,J> ELSE ENR_TPSDETAILSINTERV=""
								IF ENR_TPSDETAILSINTERV<7><>"" THEN
									FOR L = 1 TO DCOUNT(ENR_TPSDETAILSINTERV<7>,CHAR(253))
										FOR M = 1 TO DCOUNT(ENR_TABLES<2>,CHAR(253))
											IF ENR_TABLES<2,M>=ENR_TPSDETAILSINTERV<7,L> THEN
												IF W_Taches<>"" THEN W_Taches=W_Taches:CHAR(252)
												W_Taches=W_Taches:ENR_TABLES<3,M>
												EXIT
											END
										NEXT M
									NEXT L
								END ELSE
									* Dans BESOINSAIDE, on n'a pas la liste des tches, mais la liste des dures.
									* Chaque dure tant place  la MV correspondant au libell dans TABLES.
									* Par exemple si dans le fichier TABLES le libell MENAGE est en 6me MV, alors
									* si l'utilisateur entre 10 minutes de mnage, on retrouvera ces 10 minutes
									* en MV6 de l'att. 2 de BESOINSAIDE.
									FOR L = 1 TO DCOUNT(ENR_BESOINSAIDE<2>,CHAR(253))
										IF ENR_BESOINSAIDE<2,L><>"" AND ENR_BESOINSAIDE<2,L><>"0" THEN
											IF W_Taches<>"" THEN W_Taches=W_Taches:CHAR(252)
											W_Taches=W_Taches:ENR_TABLES<3,L>
										END
									NEXT L
								END
								W_Taches=CONVERT(';',',',W_Taches)
								W_Taches=CONVERT('|',',',W_Taches)
								W_Taches=CONVERT(CHAR(252),'|',W_Taches)
							END
							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							
							
							* 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.
							* Modif Greg - 05/03/14 - On vrifie dsormais si l'activit est tlgre.
							IF W_Chaine<>ENR_FUSION<W_Ind> AND W_ActTlg="OUI" 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