* Greg - 24/04/12 - J'ai pri le CorrigeTpsRempl et je l'ai modifi pour qu'il travaille en global plutt que sur une seule absence.
* J'ai fait la modif rapidement pour l'envoyer tout de suite  Issigeac. Donc au niveau de la date de rfrence, j'ai pri la date
* du jour moins 60 jours. Ce qui devrait permettre de grer 99.99% des cas qu'affichera l'utilisateur (thoriquement il n'a pas besoin
* de regarder une vieux cas).
* Les variables W_CodeRempl et W_DateFinAbs sont utilises dans le PRMOUL d'origine uniquement dans le SELECT. Et le test sur la date de fin
* tait >, j'ai mi >=.
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "", "TPSREMPLACEAIDANT" TO F.ANCIEN ELSE STOP
OPEN "", "TPSDETAILSINTERV" TO F.TPSDETAILSINTERV ELSE STOP
OPEN "", "ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP
OPEN "", "TPSTEMPO" TO F.TPSTEMPO ELSE STOP
*PRINT "Code aidant a rectifier (celui qui est absent ?"
*INPUT W_CodeRempl
*PRINT "Date de fin de son absences JJ/MM/AAAA ?"
*INPUT W_DateFinAbs
*W_DateFinAbs=ICONV(W_DateFinAbs,"D4/")

W_Duree = TIMEDATE()
W_CleRetour="MiseANiveau360"
W_ReqMoulRemplacants = ""
OPEN "DICT", "TPSDETAILSINTERV" TO F.DICT THEN
	ENR=""
	ENR<1> = "V"
	ENR<2> = 'OCONV(AbsAidantDetailsInterv,@VM:"TABSENCESAIDANT;X;;2")'
	ENR<3> = ""
	ENR<4> = "Fin absence"
	ENR<5> = "5R"
	ENR<6> = "S"
	WRITE ENR ON F.DICT, "FinAbs"
END

W_DateFinAbs=DATE()-60

EXECUTE 'SELECT TPSDETAILSINTERV AVEC FinAbs >= "':W_DateFinAbs:'" 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
		GOSUB 100
	   END
	   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
*   EXECUTE 'VIDER-FICHIER TPSREMPLACEAIDANT'
*   EXECUTE 'SELECT MOULMAJREMPLACEMENTS'
*   W_Fin = "F"
*   LOOP
*   READNEXT W_Cle ELSE W_Fin = "V" 
*   WHILE W_Fin = "F"
*     READ ENR FROM F.NOUVEAU, W_Cle THEN
*	WRITE ENR ON F.ANCIEN, W_Cle
*     END
*  REPEAT
END
EXECUTE 'EFFACER-LISTE W_ReqMoulRemplacants'
*EXECUTE 'RUN PRMOUL CREETPSREMPLAIDANT'
PRINT "Debut  ":W_Duree
PRINT "Fin a ":TIMEDATE()
STOP
100 *********************************************************************
*		Ecriture TPSREMPLACEAIDANT						*
*												*
*************************************************************************
    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 ENR_INTERV<1> = ""
	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
    WRITE ENR_NOUVEAU ON F.ANCIEN, W_TamponAbs
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 ENR_ABSENCESAIDANT<2> - W_TamponAbs <= 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_Fin = "F"
      LOOP
	READNEXT W_Cle2 ELSE W_Fin = "V"
      WHILE W_Fin = "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_Fin = "F"
   LOOP
	READNEXT W_Cle2 ELSE W_Fin = "V"
   WHILE W_Fin = "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
