OPEN "", "TPSDETAILSINTERV" TO F.TPSDETAILSINTERV ELSE STOP
OPEN "", "ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP
OPEN "", "TPSREMPLACEAIDANT" TO F.TPSREMPLACEAIDANT ELSE STOP
OPEN "", "TPSTEMPO" TO F.TPSTEMPO ELSE STOP
OPEN "", "TPSPARAM" TO F.TPSPARAM ELSE STOP
OPEN "", "CIVILAIDE" TO F.CIVILAIDE ELSE STOP
OPEN "", "ACTIVITES" TO F.ACTIVITES ELSE STOP
OPEN "", "ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP
OPEN "", "TPSEXCEPTIONS" TO F.TPSEXCEPTIONS ELSE STOP
OPEN "", "BESOINSAIDE" TO F.BESOINSAIDE ELSE STOP
OPEN "", "CONTRAT" TO F.CONTRAT ELSE STOP
OPEN "", "ACTIVITES" TO F.ACTIVITES ELSE STOP

MidiConges = "1300"

READ ENR_TPSPARAM FROM F.TPSPARAM, "1" ELSE
  ENR_TPSPARAM = ""
  ENR_TPSPARAM<20> = "2"
END

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

* variable de mise en forme du rapport d'anomalies :
W_LongueurLib = 76


PROCREAD PARAMETRES ELSE STOP
CleRetour = FIELD(PARAMETRES, "|",2)

DateDeb = FIELD(PARAMETRES,"|",3)
DateFin = FIELD(PARAMETRES,"|",4)

CodeAbs = FIELD(PARAMETRES, "|",5)
IF CodeAbs # "" THEN
	READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT, CodeAbs THEN
		DateFin = ENR_ABSENCESAIDANT<2>
	END
	DateDeb = CodeAbs[8,5]
	
END
CodeAidant = FIELD(PARAMETRES,"|",6)

Traitement = FIELD(PARAMETRES,"|",7)

IF Traitement = "Affichage" THEN   
   W_ParamsDetails = ""
   W_RequeteDetails = "Echec"
   IF CodeAbs # "" THEN
	READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT, CodeAbs THEN
   		W_ParamsDetails = "AFFICHEPLANNING |":CleRetour:"||PMIS|":CodeAbs[8,5]:"|":ENR_ABSENCESAIDANT<2>:"|":"|":"|":CodeAbs[1,5]:"|REMPLACEMENT||":CodeAbs
		EXECUTE W_ParamsDetails
		READ W_RequeteDetails FROM F.TPSTEMPO, "AFFICHEPLANNING":CleRetour ELSE W_RequeteDetails = "Echec"
		IF W_RequeteDetails = "Echec" THEN
          	    W_RequeteDetails = ""    
	          W_ParamsDetails = ""
      	    W_ParamsDetails = 'SSELECT TPSDETAILSINTERV AVEC CodeAidant = "':CodeAidant:'" AND AVEC DateDebInterv <= "':ENR_ABSENCESAIDANT<2>:'" AND AVEC 1 => "':CodeAbs[8,5]:'" OR = ""  PAR CodeAide PAR CodeActInterv PAR JourInterv PAR HeureInterv'
                   
	          EXECUTE W_ParamsDetails
		    W_Fin = "F"
		    LOOP
			READNEXT W_Cle ELSE W_Fin = "V"
		    WHILE W_Fin = "F"
			W_RequeteDetails<-1> = W_Cle
		    REPEAT
	     END
	END ELSE
		W_RequeteDetails = "Echec"
	END
   END ELSE
	IF DateFin # "" AND DateDeb # "" AND (DateFin - DateDeb) <= 60 THEN
  	  W_ParamsDetails = "AFFICHEPLANNING |":CleRetour:"||PMIS|":DateDeb:"|":DateFin:"|":"|":"|":CodeAidant:"|E||"
	  EXECUTE W_ParamsDetails
	  READ W_RequeteDetails FROM F.TPSTEMPO, "AFFICHEPLANNING":CleRetour ELSE W_RequeteDetails = "Echec"
	  IF W_RequeteDetails # "" AND W_RequeteDetails # "Echec" THEN
		GOSUB 10
	  END
	END ELSE
		W_RequeteDetails = "Echec"
	END
   END
   
     IF W_RequeteDetails = "Echec" THEN
          W_RequeteDetails = ""    
          W_ParamsDetails = ""
          W_ParamsDetails = 'SSELECT TPSDETAILSINTERV AVEC CodeAidant = "':CodeAidant:'"'
	    IF DateFin # "" THEN
		W_ParamsDetails = W_ParamsDetails:' AND AVEC DateDebInterv <= "':DateFin:'"'
	    END
    	    IF DateDeb # "" THEN
		W_ParamsDetails = W_ParamsDetails:' AND AVEC 1 => "':DateDeb:'" OR = ""' 
	    END

	    W_ParamsDetails  = W_ParamsDetails:' PAR CodeAide PAR CodeActInterv PAR JourInterv PAR HeureInterv'
                   
          EXECUTE W_ParamsDetails
	    
	    W_Fin = "F"
	    LOOP
		READNEXT W_Cle ELSE W_Fin = "V"
	    WHILE W_Fin = "F"
		W_RequeteDetails<-1> = W_Cle
	    REPEAT
     END
   DELETE F.TPSTEMPO, "AFFICHEPLANNING":CleRetour
   IF W_RequeteDetails = "" THEN
	W_RequeteDetails = "Aucun"
   END ELSE
   GOSUB 100
   END
   WRITE W_RequeteDetails ON F.TPSTEMPO, "COPIEPLANNING":CleRetour
END ELSE
	* Traitement = "Copie" :
	GOSUB 200
	WRITE W_Sortie ON F.TPSTEMPO, "COPIEPLANNING":CleRetour

END 
STOP
10
W_RequeteDetails2 = ""
NbJours = DateFin - DateDeb + 1


	FOR i = 2 TO NbJours + 2
		
		k = 0
		LOOP
		k = k + 1
		WHILE W_RequeteDetails<i,1,k> # "" 
		   
	
			   IF INDEX(W_RequeteDetails<i,1,k>,"Interv",1) # 0 AND LEN(W_RequeteDetails<i,1,k>)=7 THEN
				   * Intervention concerne
				   W_Cle10 = W_RequeteDetails<i,4,k>[1,26]
				   IF INDEX(W_RequeteDetails2,W_Cle10,1) = 0 THEN
					W_RequeteDetails2<-1> = W_Cle10
				   END
			   END
		
		   
		REPEAT
		
	NEXT i
	

	* Tri des inteventions par code aide, par activit, par jour puis par heure :
	W_CountReqDetails = 1
      LOOP WHILE W_CountReqDetails # 0
         W_CountReqDetails = 0
         i = 0
	   LOOP
		i = i + 1	
         WHILE W_RequeteDetails2<i + 1> # ""
            IF W_RequeteDetails2<i>[6, 5]:W_RequeteDetails2<i>[17,10] > W_RequeteDetails2<i+1>[6, 5]:W_RequeteDetails2<i+1>[17,10] THEN
            	W_AncAide = W_RequeteDetails2<i + 1>
            	W_RequeteDetails2<i + 1> = W_RequeteDetails2<i>
            	W_RequeteDetails2<i> = W_AncAide
            	W_CountReqDetails = W_CountReqDetails + 1
            END
         REPEAT
      REPEAT
	W_RequeteDetails = W_RequeteDetails2
	

RETURN
100
* Nb : W_RequeteDetail tri par code aid, act, jour puis heure.
W_Count = DCOUNT(W_RequeteDetails,CHAR(254))
FOR i = 1 TO W_Count
   
   W_MessageIntervSansContrat = " ":W_RequeteDetails<i>[6,5]
   READ ENR_CIVILAIDE FROM F.CIVILAIDE, W_RequeteDetails<i>[6,5] THEN
	W_MessageIntervSansContrat = W_MessageIntervSansContrat :" ":(ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>)[1,22]:SPACE(23 - LEN((ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>)[1,22]))
   END
   READ ENR_ACTIVITES FROM F.ACTIVITES, W_RequeteDetails<i>[16,6] THEN
	W_MessageIntervSansContrat = W_MessageIntervSansContrat :" ":(ENR_ACTIVITES<1>)[1,12]:SPACE(13 - LEN((ENR_ACTIVITES<1>)[1,12]))
   END

   BEGIN CASE
	CASE W_RequeteDetails<i>[22,1] = "0"
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"lundi   "
	CASE W_RequeteDetails<i>[22,1] = "1"
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"mardi   "
	CASE W_RequeteDetails<i>[22,1] = "2"
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"mercredi"
	CASE W_RequeteDetails<i>[22,1] = "3"
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"jeudi   "
	CASE W_RequeteDetails<i>[22,1] = "4"
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"vendredi"
	CASE W_RequeteDetails<i>[22,1] = "5"
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"samedi  "
	CASE W_RequeteDetails<i>[22,1] = "6"
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"dimanche"
   END CASE
   READ ENR_TPSDETAILSINTERV FROM F.TPSDETAILSINTERV, W_RequeteDetails<i> THEN
	W_HreDebARenvoyer = W_RequeteDetails<i>[23,4]
	W_Decimales = W_HreDebARenvoyer[3,2]
	IF ENR_TPSPARAM<20> = "2" THEN
		W_Decimales = INT(W_Decimales * 0.6 + 1/2)"R%2"
	END
	W_MessageIntervSansContrat = W_MessageIntervSansContrat:" | ":W_HreDebARenvoyer[1,2]:"h":W_Decimales:"-"
	W_HreFinARenvoyer = ENR_TPSDETAILSINTERV<2>
	IF LEN(W_HreFinARenvoyer) = 4 THEN
		
	END ELSE
		W_HreFinARenvoyer = "0":W_HreFinARenvoyer
	END
	W_Decimales = W_HreFinARenvoyer[3,2]
	IF ENR_TPSPARAM<20> = "2" THEN
		W_Decimales = INT(W_Decimales * 0.6 + 1/2)"R%2"
	END
	W_MessageIntervSansContrat = W_MessageIntervSansContrat:W_HreFinARenvoyer[1,2]*1:"h":W_Decimales:" | "
	IF ENR_TPSDETAILSINTERV<1> = "" THEN
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"Debut ":OCONV(W_RequeteDetails<i>[11,5],"D4/")
	END ELSE
		IF ENR_TPSDETAILSINTERV<1> = W_RequeteDetails<i>[11,5] THEN
			W_MessageIntervSansContrat = W_MessageIntervSansContrat:"le ":OCONV(W_RequeteDetails<i>[11,5],"D4/")
		END ELSE
			W_MessageIntervSansContrat = W_MessageIntervSansContrat:"Debut ":OCONV(W_RequeteDetails<i>[11,5],"D4/"):" | Fin ":OCONV(ENR_TPSDETAILSINTERV<1>,"D4/")
		END
	END
   END
   W_RequeteDetails<i,2> = W_MessageIntervSansContrat 
NEXT i

RETURN

110
* Nb : W_RequeteDetail tri par code aid, act, jour puis heure.

   
   W_MessageIntervSansContrat = " ":W_Cle[6,5]
   READ ENR_CIVILAIDE FROM F.CIVILAIDE, W_Cle[6,5] THEN
	W_MessageIntervSansContrat = W_MessageIntervSansContrat :" ":(ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>)[1,22]
   END
   READ ENR_ACTIVITES FROM F.ACTIVITES, W_Cle[16,6] THEN
	W_MessageIntervSansContrat = W_MessageIntervSansContrat :" ":(ENR_ACTIVITES<1>)[1,12]:" "
   END

   BEGIN CASE
	CASE W_Cle[22,1] = "0"
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"lundi "
	CASE W_Cle[22,1] = "1"
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"mardi "
	CASE W_Cle[22,1] = "2"
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"mercredi "
	CASE W_Cle[22,1] = "3"
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"jeudi "
	CASE W_Cle[22,1] = "4"
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"vendredi "
	CASE W_Cle[22,1] = "5"
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"samedi "
	CASE W_Cle[22,1] = "6"
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"dimanche "
   END CASE
   READ ENR_TPSDETAILSINTERV FROM F.TPSDETAILSINTERV, W_Cle THEN
	W_HreDebARenvoyer = W_Cle[23,4]
	W_Decimales = W_HreDebARenvoyer[3,2]
	IF ENR_TPSPARAM<20> = "2" THEN
		W_Decimales = INT(W_Decimales * 0.6 + 1/2)"R%2"
	END
	W_MessageIntervSansContrat = W_MessageIntervSansContrat:W_HreDebARenvoyer[1,2]:"h":W_Decimales:" "
	W_HreFinARenvoyer = ENR_TPSDETAILSINTERV<2>
	IF LEN(W_HreFinARenvoyer) = 4 THEN
		
	END ELSE
		W_HreFinARenvoyer = "0":W_HreFinARenvoyer
	END
	W_Decimales = W_HreFinARenvoyer[3,2]
	IF ENR_TPSPARAM<20> = "2" THEN
		W_Decimales = INT(W_Decimales * 0.6 + 1/2)"R%2"
	END
	W_MessageIntervSansContrat = W_MessageIntervSansContrat:W_HreFinARenvoyer[1,2]*1:"h":W_Decimales:" "
	IF ENR_TPSDETAILSINTERV<1> = "" THEN
		W_MessageIntervSansContrat = W_MessageIntervSansContrat:"Debut ":OCONV(W_Cle[11,5],"D4/")
	END ELSE
		IF ENR_TPSDETAILSINTERV<1> = W_Cle[11,5] THEN
			W_MessageIntervSansContrat = W_MessageIntervSansContrat:"le ":OCONV(W_Cle[11,5],"D4/")
		END ELSE
			W_MessageIntervSansContrat = W_MessageIntervSansContrat:"Debut ":OCONV(W_Cle[11,5],"D4/"):" Fin ":OCONV(ENR_TPSDETAILSINTERV<1>,"D4/")
		END
	END
   END
   

RETURN

200 *********************************************************************
*				Copie du planning						*
*************************************************************************
Indispo = FIELD(PARAMETRES,"|",8)
AbsAide = FIELD(PARAMETRES,"|",9)
AbsAidant = FIELD(PARAMETRES,"|",10)
Incomp = FIELD(PARAMETRES,"|",11)
SsContrat = FIELD(PARAMETRES,"|",12)

TransfereQuandMeme = FIELD(PARAMETRES,"|",13)

CodeAidantOrigine = FIELD(PARAMETRES,"|",14)

W_ListeInterv = FIELD(PARAMETRES,"|",15)

W_AuMoinsUnEchec = "F"

* Ci dessous : va contenir la liste des controles  ne pas effectuer dans le PR VERIFTPS
* Dej : on ne va jamais tester prsence / absence d'un accord chez l'aid : il s'agit d'une copie, ces controles ont dj t effectus lors de la cration de l'interv d'origine
W_EtapesOk = "3"
IF Indispo = "0" THEN
	W_EtapesOk = W_EtapesOk:"5"
END
IF AbsAide = "0" THEN
	W_EtapesOk = W_EtapesOk:"2"
END
IF AbsAidant = "0" THEN
	W_EtapesOk = W_EtapesOk:"4"
END
IF SsContrat = "0" THEN
	W_EtapesOk = W_EtapesOk:"1"
END

W_ReqAbs = ""

W_Count200 = DCOUNT(W_ListeInterv,";")
W_Sortie = ""
W_IntervACreer = ""
FOR i200 = 1 TO W_Count200
	W_Cle = FIELD(W_ListeInterv,";",i200)
	READ ENR_TPSDETAILSINTERV FROM F.TPSDETAILSINTERV, W_Cle THEN
	   
		IF W_Cle[11,5] > DateDeb THEN
			* Nb : y compris si DateDeb = ""
			W_DateDeb = W_Cle[11,5]
		END ELSE
			W_LundiDeb = W_Cle[11,5] - MOD(W_Cle[11,5] - 1,7)
			W_DateRef = W_LundiDeb + W_Cle[22,1]
			*IF ENR_TPSDETAILSINTERV<3> # "1" THEN
				
				
				LOOP
				WHILE W_DateRef < DateDeb 
					W_DateRef = W_DateRef + ENR_TPSDETAILSINTERV<3> * 7
				REPEAT
				W_DateDeb = W_DateRef
			*END ELSE
			*	W_DateDeb = DateDeb
			*END
		END
		IF DateFin = "" OR (ENR_TPSDETAILSINTERV<1> < DateFin AND ENR_TPSDETAILSINTERV<1> # "") THEN
			W_DateFin = ENR_TPSDETAILSINTERV<1>
		END ELSE
			W_DateFin = DateFin
		END
		GOSUB 110
		W_Sortie<i200> = W_MessageIntervSansContrat[1,W_LongueurLib]:SPACE(W_LongueurLib - LEN(W_MessageIntervSansContrat[1,W_LongueurLib]))
		IF W_DateDeb <= W_DateFin OR W_DateFin = "" THEN
		   READ ENR_BESOINSAIDE FROM F.BESOINSAIDE,W_Cle[6,5] ELSE ENR_BESOINSAIDE = ""
		   IF NOT (INDEX(ENR_BESOINSAIDE<8>, CodeAidant,1) # 0 AND Incomp = "0") THEN 
			GOSUB 250
		   END ELSE
			W_Sortie<i200> = W_Sortie<i200>:" Ignore":CHAR(13):CHAR(10):SPACE(5):"Aidant incompatible avec cet aid."
			W_IntervACreer<i200> = ""
			W_AuMoinsUnEchec = "V"
		   END
		END ELSE
			GOSUB 110
			W_Sortie<i200> = W_Sortie<i200>:" Ignore":CHAR(13):CHAR(10):SPACE(5):"Aucune intervention a copier dans cet intervalle de dates."
			W_IntervACreer<i200> = ""
			* Attention : cette anomalie ne doit pas tre bloquante
			*W_AuMoinsUnEchec = "V"
		END
	END
NEXT i
ENR_TEMP<-1> = "*"
	ENR_TEMP<-1> = W_IntervACreer
	ENR_TEMP<-1> = "*"
	WRITE ENR_TEMP ON F.TPSTEMPO, "DEBUG"
W_ListeRemplARefaire = ""
IF TransfereQuandMeme = "1" OR W_AuMoinsUnEchec = "F" THEN

	ENR = ""
	FOR i200 = 1 TO W_Count200
	   IF W_IntervACreer<i200> # "" THEN
		ENR = ""
		FOR t = 1 TO 6
			ENR<t> = W_IntervACreer<i200,t+1>
		NEXT t
		WRITE ENR ON F.TPSDETAILSINTERV, W_IntervACreer<i200,1>

		GOSUB 600

		*W_Sortie<i200>=CONVERT("Ignore","Ajoute",W_Sortie<i200>)
		W_Sortie<i200>=W_Sortie<i200>[1,W_LongueurLib]:" Ajoute":W_Sortie<i200>[W_LongueurLib+9,LEN(W_Sortie<i200>)-W_LongueurLib+1]
		
		IF ENR<6> # "" THEN
			IF INDEX(W_ListeRemplARefaire,ENR<6>,1) = 0 THEN
				W_ListeRemplARefaire = W_ListeRemplARefaire:ENR<6>:";"
			END
		END
		
	   END
	NEXT i200

	* Va mettre dates de fin / exceptions :
	IF CodeAbs = "" THEN
		GOSUB 500
	END

	* Va mettre  jour toutes les absences de l'aidant destination...
	CodeAidant400 = CodeAidant
	GOSUB 400
	IF CodeAbs = "" THEN
		* Va mettre  jour toutes les absences de l'aidant d'origine...
		CodeAidant400 = CodeAidantOrigine
		GOSUB 400
	END ELSE
		W_CodeAbs = CodeAbs
		GOSUB 310
	END

	i = 0
	LOOP
	i = i + 1
	W_CodeAbs = FIELD(W_ListeRemplARefaire,";",i)
	WHILE W_CodeAbs # ""
		GOSUB 300
	REPEAT

	IF CodeAbs # "" THEN
		* Si copie sur une absence : allons mettre exceptions si debut a.-m. ou fin matin :
		GOSUB 700
	END
END

RETURN
250 *********************************************************************
*				Appel du PR VerifTps					*
*************************************************************************

   W_ENTREE=""
   W_ENTREE<1>=CodeAidant
   W_ENTREE<2>=W_Cle[22,1]
   W_ENTREE<3>=W_Cle[23,4]
   W_ENTREE<4>=ENR_TPSDETAILSINTERV<2>
   W_ENTREE<5>=ENR_TPSDETAILSINTERV<3>
   W_ENTREE<6>=W_Cle[16,6]
   W_ENTREE<7>=W_DateDeb
   W_ENTREE<8>=W_DateFin

   W_ENTREE<9>=1
   W_ENTREE<10>="S"

   W_ENTREE<11>=W_ENTREE<4> - W_ENTREE<3>
   W_ENTREE<11> = W_ENTREE<11>"R%4"
   W_ENTREE<12>=W_Cle[6,5]
   W_ENTREE<13>="CP"
   
   W_ENTREE<14> = ""

   W_ENTREE<15> = "3"

   W_ENTREE<16> = ""
   W_ENTREE<17> = ""
   W_ENTREE<18> = ""
   
   LOOP

     WRITE W_ENTREE ON F.TPSTEMPO, "PARAMVERIFTPS":CleRetour

     EXECUTE ' VERIFTPS |':CleRetour

     READ W_SORTIE FROM F.TPSTEMPO, "VERIFTPS":CleRetour ELSE
		W_SORTIE<1> = "ERREUR"
		W_SORTIE<2> = "OK"
     END
   WHILE W_SORTIE<2,2> = "Annuler" AND INDEX(W_EtapesOk,W_SORTIE<3>,1) # 0
   		* Cette anomalie n'est pas bloquante => on va relancer les autres controles...
		IF LEN(W_Sortie<i200>) <= W_LongueurLib THEN
			W_Sortie<i200>=W_Sortie<i200>:" Ignore"
		END
		W_PosCrLf = INDEX(W_SORTIE<1>, CHAR(13),1)
		IF W_PosCrLf # 0 THEN
			W_SORTIE<1> = W_SORTIE<1>[1,W_PosCrLf+1]:SPACE(10):W_SORTIE<1>[W_PosCrLf+2,LEN(W_SORTIE<1>) - W_PosCrLf+2 + 1]
		END
		W_Sortie<i200>=W_Sortie<i200>:CHAR(13):CHAR(10):SPACE(5):W_SORTIE<1>
		W_ENTREE<9> = W_SORTIE<3>+1
   
   REPEAT

   DELETE F.TPSTEMPO, "PARAMVERIFTPS":CleRetour
   DELETE F.TPSTEMPO, "VERIFTPS":CleRetour	

   IF W_SORTIE<1>="OK" THEN
	W_IntervACreer<i200,1> = CodeAidant:W_Cle[6,5]:W_DateDeb:W_Cle[16,11]
	W_IntervACreer<i200,2> = W_DateFin
	W_IntervACreer<i200,3> = ENR_TPSDETAILSINTERV<2>
	W_IntervACreer<i200,4> = ENR_TPSDETAILSINTERV<3>
	W_IntervACreer<i200,5> = ENR_TPSDETAILSINTERV<4>
	W_IntervACreer<i200,6> = ENR_TPSDETAILSINTERV<5>
	IF ENR_TPSDETAILSINTERV<6> # "" THEN
		W_IntervACreer<i200,7> = ENR_TPSDETAILSINTERV<6>
	END ELSE
		W_IntervACreer<i200,7> = CodeAbs
	END
   END ELSE
	W_AuMoinsUnEchec = "V"
	IF LEN(W_Sortie<i200>) <= W_LongueurLib THEN
		W_Sortie<i200>=W_Sortie<i200>:" Ignore"
	END
	W_PosCrLf = INDEX(W_SORTIE<1>, CHAR(13),1)
	IF W_PosCrLf # 0 THEN
		W_SORTIE<1> = W_SORTIE<1>[1,W_PosCrLf+1]:SPACE(10):W_SORTIE<1>[W_PosCrLf+2,LEN(W_SORTIE<1>) - W_PosCrLf+2 + 1]
	END

	W_Sortie<i200>=W_Sortie<i200>:CHAR(13):CHAR(10):SPACE(5):W_SORTIE<1>
   END

RETURN

300 ***************************************************************************
*		Mise a jour fichier TPSREMPLACEAIDANT					*
*******************************************************************************
	CALL RECTIFREMPL(W_RETURNVAL,W_CodeAbs,W_SORTIE)
*W_Params300 = ""
*W_Params300 = "MISEAJOURTPSREMPLACEAIDANT |":W_CodeAbs"|":CleRetour:"|"
*EXECUTE W_Params300
RETURN

310 ***************************************************************************
*	Mise a jour TPSREMPLACEAIDANT 
READ ENR_TPSREMPLACEAIDANT FROM F.TPSREMPLACEAIDANT, CodeAbs THEN
FOR i310 = 1 TO W_Count200
  IF W_IntervACreer<i310> # "" THEN
	W_Cle = FIELD(W_ListeInterv,";",i310)
	k = 0
	W_Trouve = "F"
	LOOP
	k = k + 1
	WHILE ENR_TPSREMPLACEAIDANT<1,k> # "" AND W_Trouve = "F"
		IF ENR_TPSREMPLACEAIDANT<1,k> = W_Cle THEN
			ENR_TPSREMPLACEAIDANT<2,k> = "2"
			ENR_TPSREMPLACEAIDANT<3,k,-1> = W_IntervACreer<i310,1>[11,5]
			ENR_TPSREMPLACEAIDANT<4,k,-1> = W_IntervACreer<i310,2>
			ENR_TPSREMPLACEAIDANT<5,k,-1> = W_IntervACreer<i310,1>
		END
	REPEAT
  END
NEXT i310

    *******************************
    * test erreur
        W_Heure = TIMEDATE()[1,8]
		EXECUTE 'GETUSER' RETURNING MSGCODE
		W_User=MSGCODE<2,2>
        W_Entree2 = W_User:"|":W_Heure:"|COPIEPLANNING|":CodeAbs:"|":ENR_TPSREMPLACEAIDANT
		CALL VERIFREMPL(W_RETURNVAL,W_Entree2,SORTIE)
    ********************************
	
WRITE ENR_TPSREMPLACEAIDANT ON F.TPSREMPLACEAIDANT, CodeAbs 
END
RETURN
400 ***************************************************************************
*		Selection des absences de l'aidant :					*
*******************************************************************************
	W_NomListeAbs = "ReqAbs":CleRetour
	W_Temp = 'SELECT ABSENCESAIDANT AVEC @ID = "':CodeAidant400:']"'
	IF DateDeb # "" THEN
		W_Temp = W_Temp:' AND AVEC 2 >= "':DateDeb:'"'
		IF DateFin # "" THEN
			W_Temp = W_Temp:' AND AVEC DebAbsAidant <= "':DateFin:'"'
		END
	END ELSE
	END
	EXECUTE W_Temp
	EXECUTE 'SAUVE-LISTE ':W_NomListeAbs
EXECUTE 'LISTE ':W_NomListeAbs RETURNING MSGCODE
IF MSGCODE<1> # "209" THEN
 SELECT F.ABSENCESAIDANT TO W_ReqAbs
 W_Fin = "F"
 LOOP
   READNEXT W_CodeAbs FROM W_ReqAbs ELSE W_Fin = "V"
 WHILE W_Fin = "F"
	GOSUB 300
 REPEAT
END
EXECUTE 'EFFACER-LISTE ':W_NomListeAbs RETURNING MSGCODE

RETURN

500 ***************************************************************************
*		Date de fin / Exceptions sur les interventions d'origine		*
*******************************************************************************

FOR i = 1 TO W_Count200
 IF W_IntervACreer<i> # "" THEN
	W_Cle = FIELD(W_ListeInterv,";",i)
	

  IF DateDeb = "" THEN
	* On supprime les interventions d'origine ?
	DELETE F.TPSDETAILSINTERV, W_Cle
  END ELSE
	IF DateFin = "" THEN
		* On met une date de fin = date de dbut de copie :
		IF W_Cle[11,5] < DateDeb THEN
		   READ ENR_TPSDETAILSINTERV FROM F.TPSDETAILSINTERV, W_Cle THEN
			ENR_TPSDETAILSINTERV<1> = DateDeb - 1
			WRITE ENR_TPSDETAILSINTERV ON F.TPSDETAILSINTERV, W_Cle 
		   END
		END ELSE
		   DELETE F.TPSDETAILSINTERV, W_Cle
		END
	END ELSE
	

	  READ ENR_TPSDETAILSINTERV FROM F.TPSDETAILSINTERV, W_Cle THEN
	   W_LundiDeb = W_Cle[11,5] - MOD(W_Cle[11,5] - 1,7)
	   W_DateRef = W_LundiDeb + W_Cle[22,1]
	   LOOP
	   WHILE W_DateRef < DateDeb 
		W_DateRef = W_DateRef + ENR_TPSDETAILSINTERV<3> * 7
	   REPEAT
	   *W_DateRef = W_DateRef - ENR_TPSDETAILSINTERV<3> * 7
	   

	   LOOP
	   WHILE W_DateRef <= DateFin
		ENR = ""
		ENR<1> = W_Cle
		WRITE ENR ON F.TPSEXCEPTIONS, W_Cle[1,10]:W_DateRef:W_Cle[16,11]
		W_DateRef = W_DateRef + ENR_TPSDETAILSINTERV<3> * 7
		
	   REPEAT
       END
	END
  END
 END
NEXT i
RETURN

600 **********************************************************
*			
**************************************************************
EXECUTE 'SELECT TPSEXCEPTIONS AVEC 1 = "':FIELD(W_ListeInterv,";",i200):'" AND AVEC DateDebExcep >= "':DateDeb:'" AND <= "':DateFin:'"'
W_Fin = "F"
LOOP
READNEXT W_CleEx ELSE W_Fin = "V"
WHILE W_Fin = "F"
	ENR600 = ""
	ENR600<1> = W_IntervACreer<i200,1>
	W_Cle600 = W_IntervACreer<i200,1>[1,10]:W_CleEx[11,5]:W_IntervACreer<i200,1>[16,11]
	WRITE ENR600 ON F.TPSEXCEPTIONS, W_Cle600
REPEAT

RETURN

700 ***********************************************************
*		Exceptions sur nelles interv si deb abs a.-m. ou fin abs midi
****************************************************************
IF CodeAbs[6,2] > "06" THEN
  READ ENR_ABS FROM F.ABSENCESAIDANT, CodeAbs THEN
	FOR i200 = 1 TO W_Count200
	   IF W_IntervACreer<i200> # "" THEN
		W_LundiDeb = W_IntervACreer<i200,1>[11,5] - MOD(W_IntervACreer<i200,1>[11,5] - 1,7)
		W_DateRef = W_LundiDeb + W_IntervACreer<i200,1>[22,1]
		IF W_DateRef < W_IntervACreer<i200,1>[11,5] THEN
			W_DateRef = W_DateRef + W_IntervACreer<i200,4>*7
		END
		IF ENR_ABS<26> = "" THEN
			GOSUB 710
		END ELSE
		  READ ENR_ACTIVITES FROM F.ACTIVITES, W_IntervACreer<i200,1>[16,6] THEN
			W_Trouve = "F"
			i700 = 0
			LOOP
			i700 = i700 + 1
			WHILE ENR_ABS<26,i700> # "" AND W_Trouve = "F"
				READ ENR_CONTRAT FROM F.CONTRAT, ENR_ABS<26,i700> THEN
					IF ENR_CONTRAT<1> = "02" THEN
						IF ENR_ACTIVITES<12> = "M" AND ENR_CONTRAT<3> = W_IntervACreer<i200,1>[6,5] THEN
							W_Trouve = "V"
							i700 = i700 - 1
						END
					END ELSE
						IF ENR_ACTIVITES<12> # "M" THEN
							W_Trouve = "V"
							i700 = i700 - 1
						END
					END
				END
			REPEAT
			IF W_Trouve = "V" THEN
				GOSUB 720
			END ELSE
				GOSUB 710
			END
		  END ELSE
			GOSUB 710
		  END
		END
	   END
      NEXT i200
  END
END
RETURN

710 ***********************************************************

IF ENR_ABS<1> = "2" THEN
	IF W_DateRef = CodeAbs[8,5] THEN
         IF W_IntervACreer<i200,3> <= MidiConges THEN

		ENR710 = ""
		ENR710<1> = W_IntervACreer<i200,1>
		W_Cle710 = W_IntervACreer<i200,1>[1,10]:W_DateRef:W_IntervACreer<i200,1>[16,11]
		WRITE ENR710 ON F.TPSEXCEPTIONS, W_Cle710

	   END
	END
END
IF ENR_ABS<3> = "1" THEN
   LOOP
	W_DateRef = W_DateRef + W_IntervACreer<i200,4>*7
   WHILE W_DateRef < ENR_ABS<2>
	
   REPEAT
   
   IF W_DateRef = ENR_ABS<2> THEN
	IF W_IntervACreer<i200,1>[23,4] > MidiConges THEN
		ENR710 = ""
		ENR710<1> = W_IntervACreer<i200,1>
		W_Cle710 = W_IntervACreer<i200,1>[1,10]:W_DateRef:W_IntervACreer<i200,1>[16,11]
		WRITE ENR710 ON F.TPSEXCEPTIONS, W_Cle710
	END
   END	
END


RETURN

720 ***********************************************************
IF ENR_ABS<21,i700> # "N" THEN
   LOOP
	
   WHILE W_DateRef < ENR_ABS<22,i700>
	* Cas ou les congs commence APRES la copie pour cet employeur :
	ENR710 = ""
	ENR710<1> = W_IntervACreer<i200,1>
	W_Cle710 = W_IntervACreer<i200,1>[1,10]:W_DateRef:W_IntervACreer<i200,1>[16,11]
	WRITE ENR710 ON F.TPSEXCEPTIONS, W_Cle710
	
	W_DateRef = W_DateRef + W_IntervACreer<i200,4>*7
   REPEAT

  IF ENR_ABS<23,i700> = "A" THEN
	IF W_DateRef = ENR_ABS<22,i700> THEN
         IF W_IntervACreer<i200,3> <= MidiConges THEN

		ENR710 = ""
		ENR710<1> = W_IntervACreer<i200,1>
		W_Cle710 = W_IntervACreer<i200,1>[1,10]:W_DateRef:W_IntervACreer<i200,1>[16,11]
		WRITE ENR710 ON F.TPSEXCEPTIONS, W_Cle710

	   END
	END
  END

   LOOP
	W_DateRef = W_DateRef + W_IntervACreer<i200,4>*7
   WHILE W_DateRef < ENR_ABS<24,i700>
	
   REPEAT
  
   
   
   IF W_DateRef = ENR_ABS<24,i700> THEN
     IF ENR_ABS<25,i700> = "M" THEN
	IF W_IntervACreer<i200,1>[23,4] > MidiConges THEN
		ENR710 = ""
		ENR710<1> = W_IntervACreer<i200,1>
		W_Cle710 = W_IntervACreer<i200,1>[1,10]:W_DateRef:W_IntervACreer<i200,1>[16,11]
		WRITE ENR710 ON F.TPSEXCEPTIONS, W_Cle710
		
	END
     END
     W_DateRef = W_DateRef + W_IntervACreer<i200,4>*7
   END	
  
   LOOP
	
   WHILE W_DateRef <= W_IntervACreer<i200,2>
	* Cas o les congs s'arrtent AVANT la fin de copie pour cet employeur :
	ENR710 = ""
	ENR710<1> = W_IntervACreer<i200,1>
	W_Cle710 = W_IntervACreer<i200,1>[1,10]:W_DateRef:W_IntervACreer<i200,1>[16,11]
	WRITE ENR710 ON F.TPSEXCEPTIONS, W_Cle710
	W_DateRef = W_DateRef + W_IntervACreer<i200,4>*7
   REPEAT

  
END ELSE
	* Ne devrait pas arriver : si pas absent pour cet employeur, alors ne devrait pas avoir  fait l'objet d'une copie puisque pas dans la liste.
END
RETURN


