SUBROUTINE RECTIFREMPL(RETURNVAL,PARAMETRES,W_Sortie)

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "", "TPSREMPLACEAIDANT" TO F.ANCIEN ELSE STOP
OPEN "", "TPSDETAILSINTERV" TO F.TPSDETAILSINTERV ELSE STOP
OPEN "", "TPSDETAILSINTERVARCH" TO F.TPSDETAILSINTERVARCH ELSE STOP
OPEN "", "ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP
OPEN "", "TPSTEMPO" TO F.TPSTEMPO ELSE STOP

IF PARAMETRES # 0 THEN
	W_CodeRempl = PARAMETRES
END ELSE
	PRINT "Remplacement  recrer (code aidant pour toutes es absences) ?"
	INPUT W_CodeRempl
	IF W_CodeRempl = "" THEN
		PRINT "Abandonn."
		STOP	
	END
END
W_Duree = TIMEDATE()
W_CleRetour="MiseANiveau360"
W_ReqMoulRemplacants = ""

EXECUTE 'SELECT TPSDETAILSINTERV AVEC 6 = "':W_CodeRempl:']" PAR 6 PAR CodeAide PAR CodeActInterv PAR DateDebInterv PAR JourInterv PAR HeureInterv'
EXECUTE 'SAUVE-LISTE W_ReqMoulRemplacants'
EXECUTE 'LISTE W_ReqMoulRemplacants' RETURNING MSGCODE
IF MSGCODE<1> # "209" THEN
	SELECT F.TPSDETAILSINTERV TO W_ReqMoulRemplacants
	W_TamponAbs = ""
	W_Fin = "F"
	LOOP
		READNEXT W_Cle FROM W_ReqMoulRemplacants ELSE W_Fin = "V"
	WHILE W_Fin = "F"
		READ ENR_TPSDETAILSINTERV FROM F.TPSDETAILSINTERV, W_Cle THEN
			IF ENR_TPSDETAILSINTERV<6> # W_TamponAbs THEN
				IF W_TamponAbs # "" THEN
					W_SauveCle = W_Cle
					GOSUB 100
					W_Cle = W_SauveCle
					READ ENR_TPSDETAILSINTERV FROM F.TPSDETAILSINTERV, W_Cle ELSE ENR_TPSDETAILSINTERV = ""
				END
				* Ci dessous : ncessaire pour excuter 300 sur article en cours :
				W_TamponAbs = ENR_TPSDETAILSINTERV<6>
				READ ENR_ANCIEN FROM F.ANCIEN, W_TamponAbs ELSE ENR_ANCIEN = ""
				GOSUB 200
			END
			GOSUB 300	
		END
	REPEAT
	IF W_TamponAbs # "" THEN
		GOSUB 100 
	END
END ELSE
	IF LEN(W_CodeRempl) = 12 THEN
		W_TamponAbs = W_CodeRempl
		READ ENR_ANCIEN FROM F.ANCIEN, W_TamponAbs ELSE ENR_ANCIEN = ""
		GOSUB 200
		GOSUB 100
	END
END


EXECUTE 'EFFACER-LISTE W_ReqMoulRemplacants'

IF PARAMETRES = "" THEN
	STOP
END
RETURN

100 *********************************************************************
*		Ecriture TPSREMPLACEAIDANT						*
*												*
*************************************************************************

    GOSUB 110

    k = 0
    LOOP
	k = k + 1
    WHILE ENR_NOUVEAU<1,k> # ""
     IF ENR_NOUVEAU<5,k> # "" AND ENR_NOUVEAU<2,k> # "1" THEN
	READ ENR_INTERV FROM F.TPSDETAILSINTERV, ENR_NOUVEAU<1,k> ELSE
	  READ ENR_INTERV FROM F.TPSDETAILSINTERVARCH, ENR_NOUVEAU<1,k> ELSE
	    ENR_INTERV<1> = ""
	  END
	END
	IF ENR_INTERV<1> = "" THEN
		ENR_INTERV<1> = "99999"
	END
	IF ENR_NOUVEAU<1,k>[11,5] > W_DebAbs THEN
		W_DateMin = ENR_NOUVEAU<1,k>[11,5]
	END ELSE
		W_DateMin = W_DebAbs
	END
	IF ENR_INTERV<1> > W_FinAbs THEN
		W_DateMax = W_FinAbs
	END ELSE
		W_DateMax = ENR_INTERV<1>
	END
	W_Partiel = "F"
	IF ENR_NOUVEAU<3,k,1> - W_DateMin >= 7 THEN
		W_Partiel = "V"
	END ELSE
		t = 1
		W_Max = ENR_NOUVEAU<4,k,1>
		LOOP
			t = t + 1
		WHILE ENR_NOUVEAU<5,k,t> # "" AND W_Partiel = "F"
			IF ENR_NOUVEAU<3,k,t> - W_Max >= 7 THEN
				W_Partiel = "V"
			END
			IF W_Max < ENR_NOUVEAU<4,k,t> THEN
				W_Max = ENR_NOUVEAU<4,k,t>
			END
		REPEAT
		IF W_Partiel = "F" THEN
			IF W_DateMax - W_Max >= 7 THEN
				W_Partiel = "V"
			END
		END
	END
	IF W_Partiel = "F" THEN
		ENR_NOUVEAU<2,k> = "2"
	END ELSE
	END
     END
    REPEAT
	
    ********************************
    * test erreur
        W_Heure = TIMEDATE()[1,8]
		EXECUTE 'GETUSER' RETURNING MSGCODE
		W_User=MSGCODE<2,2>
        W_Entree = W_User:"|":W_Heure:"|RECTIFREMPL|":W_TamponAbs:"|":ENR_NOUVEAU
		*CALL VERIFREMPL(W_RETURNVAL,W_Entree,SORTIE)
    ******************************** 		
	
    WRITE ENR_NOUVEAU ON F.ANCIEN, W_TamponAbs
RETURN

110 *********************************************************************
*				Prise en compte archive					*
*************************************************************************

EXECUTE 'SELECT TPSDETAILSINTERVARCH AVEC 6 = "':W_TamponAbs:'"'
W_Fin110 = "F"
LOOP
	READNEXT W_Cle ELSE W_Fin110 = "V"
WHILE W_Fin110 = "F"
	READ ENR_TPSDETAILSINTERV FROM F.TPSDETAILSINTERVARCH, W_Cle THEN
		GOSUB 300
	END
REPEAT
RETURN

200 *********************************************************************
*	Renseignement de ala liste des interventions  remplacer :	*
*************************************************************************
ENR_NOUVEAU = ""
READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT, W_TamponAbs  THEN 
	W_DebAbs = W_TamponAbs[8,5]
	W_FinAbs = ENR_ABSENCESAIDANT<2>
	W_RequeteDetails = ""
	IF W_FinAbs - W_DebAbs <= 60 THEN
		W_ParamsDetails = ""
		W_ParamsDetails = "AFFICHEPLANNING |":W_CleRetour:"||PMIS|":W_TamponAbs[8,5]:"|":ENR_ABSENCESAIDANT<2>:"|":"|":"|":W_TamponAbs[1,5]:"|REMPLACEMENT||":W_TamponAbs
		PRINT W_ParamsDetails
		W_RequeteDetails = ""
		EXECUTE W_ParamsDetails
		READ W_RequeteDetails FROM F.TPSTEMPO, "AFFICHEPLANNING":W_CleRetour ELSE W_RequeteDetails = "Echec"
		IF W_RequeteDetails = "Echec" THEN         
			W_ParamsDetails = ""
			W_ParamsDetails = 'SSELECT TPSDETAILSINTERV AVEC 0 = "':W_TamponAbs[1,5]:']" AND AVEC DateDebInterv <= "':ENR_ABSENCESAIDANT<2>:'" AND AVEC 1 => "':W_TamponAbs[8,5]:'" OR = "" PAR CodeAide PAR CodeActInterv PAR JourInterv PAR HeureInterv'
			EXECUTE W_ParamsDetails
			W_Fin200 = "F"
			LOOP
				READNEXT W_Cle2 ELSE W_Fin200 = "V"
			WHILE W_Fin200 = "F"
				W_RequeteDetails<-1> = W_Cle2
			REPEAT
		END
	END ELSE
		W_ParamsDetails = ""
		W_ParamsDetails = 'SSELECT TPSDETAILSINTERV AVEC 0 = "':W_TamponAbs[1,5]:']" AND AVEC DateDebInterv <= "':ENR_ABSENCESAIDANT<2>:'" AND AVEC 1 => "':W_TamponAbs[8,5]:'" OR = "" PAR CodeAide PAR CodeActInterv PAR JourInterv PAR HeureInterv'
		EXECUTE W_ParamsDetails
		W_Fin200 = "F"
		LOOP
			READNEXT W_Cle2 ELSE W_Fin200 = "V"
		WHILE W_Fin200 = "F"
			W_RequeteDetails<-1> = W_Cle2
		REPEAT
	END
	i = 0
	LOOP
		i = i + 1
	WHILE W_RequeteDetails<i> # ""
		ENR_NOUVEAU<1,i> = W_RequeteDetails<i>
	REPEAT
END ELSE
	ENR_NOUVEAU = ""
	W_DebAbs = W_TamponAbs[8,5]
	* Nb : ne devrait pas arriver !
    W_FinAbs = W_TamponAbs + 30
END
GOSUB 210
RETURN

210 *********************************************************************
*									*
*************************************************************************
W_NouveauFormat = "F"
IF ENR_ANCIEN<1> # "" THEN
	IF LEN(ENR_ANCIEN<1,1>) = 5 THEN
		* Ancien format
		W_DernAide = ""
		W_Bloquer="F"
		i = 0
		LOOP
			i = i + 1
		WHILE ENR_NOUVEAU<1,i> # ""
			IF ENR_NOUVEAU<1,i>[6,5]:ENR_NOUVEAU<1,i>[16,6] = W_DernAide THEN
				IF W_Bloquer = "V" THEN
					ENR_NOUVEAU<2,i> = "1"
				END
			END ELSE
				W_DernAide = ENR_NOUVEAU<1,i>[6,5]:ENR_NOUVEAU<1,i>[16,6]
				W_Bloquer = "F"
				k = 0
				LOOP
					k = k + 1 
				WHILE NOT ((ENR_ANCIEN<1,k> = W_DernAide[1,5] AND ENR_ANCIEN<2,k> = W_DernAide[6,6]) OR ENR_ANCIEN<1,k> = "")
				REPEAT
				IF ENR_ANCIEN<3,k> = "B" THEN
					W_Bloquer = "V"
					ENR_NOUVEAU<2,i> = "1"
				END ELSE
				END
			END
		REPEAT
	END ELSE
		* Nouveau format
		W_NouveauFormat = "V"
		W_DernAide = ""
		W_Bloquer="F"
		i = 0
		LOOP
			i = i + 1
		WHILE ENR_NOUVEAU<1,i> # ""
			Code1 = ENR_NOUVEAU<1,i>
			k = 0
			LOOP
				k = k + 1 
				Code2 = ENR_ANCIEN<1,k>
			WHILE Code1 # Code2 AND ENR_ANCIEN<1,k> # ""
			REPEAT
			IF ENR_ANCIEN<1,k> # "" THEN
				IF ENR_ANCIEN<2,k> = "1" THEN
					ENR_NOUVEAU<2,i> = "1"
				END ELSE
				END
			END
		REPEAT
	END 
END
RETURN
300 *********************************************************************
*												*
*************************************************************************
IF W_NouveauFormat = "F" OR INDEX(ENR_ANCIEN<5>,W_Cle,1) = 0 THEN
	i = 0
	LOOP
		i = i + 1
	WHILE ENR_NOUVEAU<1,i>[6,5] <= W_Cle[6,5] AND ENR_NOUVEAU<1,i> # ""
		IF ENR_NOUVEAU<1,i>[6,5] = W_Cle[6,5] AND ENR_NOUVEAU<1,i>[16,6] = W_Cle[16,6] THEN
			IF ENR_NOUVEAU<2,i> = "1" THEN
				EXIT
			END ELSE
				ENR_NOUVEAU<3,i,-1> = W_Cle[11,5]
				ENR_NOUVEAU<4,i,-1> = ENR_TPSDETAILSINTERV<1>
				ENR_NOUVEAU<5,i,-1> = W_Cle
			END
		END
	REPEAT
END ELSE
   * On va remettre cette cl  la mme position que dans ENR_ANCIEN :
	W_Inseree = "F"
	k = 0
	LOOP
		k = k + 1
	WHILE ENR_ANCIEN<1,k> # ""
		IF INDEX(ENR_ANCIEN<5,k>,W_Cle,1) # 0 THEN
			i = 0
			LOOP
				i = i + 1
			WHILE ENR_NOUVEAU<1,i> # ""
				Code1 = ENR_NOUVEAU<1,i>
				Code2 = ENR_ANCIEN<1,k>
				IF Code2 = Code1 AND Code1[6,5] = W_Cle[6,5] AND Code1[16,6] = W_Cle[16,6] THEN
					W_Inseree = "V"
					ENR_NOUVEAU<3,i,-1> = W_Cle[11,5]
					ENR_NOUVEAU<4,i,-1> = ENR_TPSDETAILSINTERV<1>
					ENR_NOUVEAU<5,i,-1> = W_Cle
				END	
			REPEAT
		END
	REPEAT
	IF W_Inseree = "F" THEN
		i = 0
		LOOP
			i = i + 1
		WHILE ENR_NOUVEAU<1,i>[6,5] <= W_Cle[6,5] AND ENR_NOUVEAU<1,i> # ""
			IF ENR_NOUVEAU<1,i>[6,5] = W_Cle[6,5] AND ENR_NOUVEAU<1,i>[16,6] = W_Cle[16,6] THEN
				IF ENR_NOUVEAU<2,i> = "1" THEN
					EXIT
				END ELSE
					ENR_NOUVEAU<3,i,-1> = W_Cle[11,5]
					ENR_NOUVEAU<4,i,-1> = ENR_TPSDETAILSINTERV<1>
					ENR_NOUVEAU<5,i,-1> = W_Cle
				END
			END
  		REPEAT
	END
END
RETURN
