*SUBROUTINE CALCSUIVCONTRATPROSP(RETURNVAL,PARAMETRES,W_Sortie)
EXECUTE "SET-THOUS ."
OPEN "", "CONTRAT" TO F.CONTRAT ELSE RETURN
OPEN "", "ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE RETURN
OPEN "", "PROFIL" TO F.PROFIL ELSE RETURN
OPEN "", "RUBSAISIE" TO F.RUBSAISIE ELSE RETURN
OPEN "", "CONVENTIONCOL" TO F.CONVENTIONCOL ELSE RETURN
OPEN "", "SUIVCONTRATPROSP" TO F.SUIVCONTRATPROSP ELSE STOP
OPEN "", "PAQUES" TO F.PAQUES ELSE STOP
OPEN "", "CUMSUIVCONT" TO F.CUMSUIVCONT ELSE RETURN
OPEN "", "ACTIVITES" TO F.ACTIVITES ELSE STOP
OPEN "", "DETAILCALCUL" TO F.DETAILCALCUL ELSE STOP
OPEN "", "TEMPO" TO F.TEMPO ELSE STOP
OPEN "", "TPSTEMPO" TO F.TPSTEMPO ELSE STOP
OPEN "", "TPSPARAM" TO F.TPSPARAM ELSE STOP
OPEN "", "TPSTRAJET" TO F.TPSTRAJET ELSE STOP

EXECUTE 'UDT.OPTIONS 11 ON'
EXECUTE 'DATE.FORMAT'
EXECUTE 'SET-DEC ,'

W_ListeAbsArretsCalcSuivContProsp=""
W_ListeAbsCongesCalcSuivContProsp=""

READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL, "01" ELSE ENR_CONVENTIONCOL = ""

PROCREAD PARAMETRES ELSE STOP

PeriodeDeb = FIELD(PARAMETRES,"|",3)
PeriodeFin = FIELD(PARAMETRES,"|",4)
CodeContrat = FIELD(PARAMETRES,"|",2)
* Type de renvoi a effectuer : 
* B = Batch (ecriture des CUMULS dans SUIVCONTRATPROSP, CH = Compteurs d'Heure, CI = Consultation Individuelle
Traitement = FIELD(PARAMETRES,"|",5)
* Si traitement Batch :
MoisFinModul = FIELD(PARAMETRES,"|",6)
User = FIELD(PARAMETRES,"|",7)

ENR_RAPPORT = ""

READ ENR_CONTRAT FROM F.CONTRAT, CodeContrat THEN
	GOSUB 50
  READ ENR_ACTIVITES FROM F.ACTIVITES, ENR_CONTRAT<36,1> ELSE
	ENR_ACTIVITES = ""
	ENR_ACTIVITES<12> = "P"
  END
  IF PeriodeDeb = "" THEN
	IF ENR_CONTRAT<76> # "" THEN
		PeriodeDeb = ENR_CONTRAT<76,DCOUNT(ENR_CONTRAT<76>, CHAR(253))> + 1
		IF PeriodeDeb[5,2] = "13" THEN
			PeriodeDeb = PeriodeDeb[1,4] + 1
			PeriodeDeb = PeriodeDeb:"01"
		END
	END ELSE
		
		IF MoisFinModul = 12 THEN
			PeriodeDeb = PeriodeFin[1,4]:"01"
		END ELSE
		   W_MoisFinProsp = MoisFinModul + 1
		   IF MoisFinModul <= PeriodeFin[5,2] THEN
			PeriodeDeb = PeriodeFin[1,4]:W_MoisFinProsp"R%2"
		   END ELSE
			PeriodeDeb = PeriodeFin[1,4]+1:W_MoisFinProsp"R%2"
		   END
		END
	END
  END 

  DateDeb = "01/":PeriodeDeb[5,2]:"/":PeriodeDeb[1,4]
  DateFin = PeriodeFin[5,2] + 1
  IF DateFin = "13" THEN
      DateFin = "01/01/":PeriodeFin[1,4]+1
  END ELSE
      DateFin = "01/":DateFin:"/":PeriodeFin[1,4]
  END
  W_Sortie = ""


  W_Requete = 'SELECT ABSENCESAIDANT = "':CodeContrat[1,5]:']" AVEC DebAbsAidant <= "':ICONV(DateFin,"D4/")-1:'" AND AVEC 2 >= "':ICONV(DateDeb,"D4/"):'" AND AVEC NumMotifAidant <= "06" OR = "12" OR = "13" OR = "22" OR = "23" PAR NumMotifAidant PAR DebAbsAidant'
  EXECUTE W_Requete
  W_NomListeAbsArretsCalcSuivContProsp="W_ListeAbsArretsCalcSuivContProsp":TIME()
  EXECUTE 'SAUVE-LISTE ':W_NomListeAbsArretsCalcSuivContProsp

  W_Requete = 'SELECT ABSENCESAIDANT = "':CodeContrat[1,5]:']" AVEC DebAbsAidant <= "':ICONV(DateFin,"D4/")-1:'" AND AVEC 2 >= "':ICONV(DateDeb,"D4/"):'" AND AVEC NumMotifAidant > "06" AND # "12" AND # "13" AND # "17" AND # "18" AND # "19" AND # "20" AND # "21" AND # "22" AND # "23" PAR NumMotifAidant PAR DebAbsAidant'

  EXECUTE W_Requete
  W_NomListeAbsCongesCalcSuivContProsp="W_ListeAbsCongesCalcSuivContProsp":TIME()
  EXECUTE 'SAUVE-LISTE ':W_NomListeAbsCongesCalcSuivContProsp

  ENR_RAPPORT<-1> = W_Requete

  W_Params = ""
  W_User = "CalcSuiv":TIME()
  IF Traitement = "CH" THEN
     * pas d'entit juridique pour les compteurs d'heures
     W_Params = "AFFICHEPLANNING |":W_User:"||PMIS|":ICONV(DateDeb,"D4/"):"|":ICONV(DateFin,"D4/"):"|||":CodeContrat[1,5]:"|ES|"
  END ELSE
     W_Params = "AFFICHEPLANNING |":W_User:"|":ENR_CONTRAT<2>:"|PMIS|":ICONV(DateDeb,"D4/"):"|":ICONV(DateFin,"D4/"):"|||":CodeContrat[1,5]:"|ES|"
  END

  EXECUTE W_Params
  READ W_TabInterv FROM F.TPSTEMPO, "AFFICHEPLANNING":W_User ELSE W_TabInterv = "#FIN"


  W_IndResultat = 1
  W_DernLecturePaques = "" 
  FOR W_IndMois = PeriodeDeb TO PeriodeFin
	IF W_IndMois[5,2] = "13" THEN
		W_IndMois = W_IndMois[1,4] + 1
		W_IndMois = W_IndMois:"01"
	END    
	
	GOSUB 100
	W_IndResultat = W_IndResultat + 1
  NEXT W_IndMois

  W_CumulHresContrat = 0
  W_CumulHresAbs = 0
  W_CumulHresForfait = 0
  W_CumulHresReelles = 0
  W_CumulHresDiff = 0
  W_CumulRegul = 0
  W_DernPerContrat = ""
  W_NbMois = 0
  IF Traitement # "CH" THEN
	IF ENR_CONTRAT<76> # "" THEN
		W_DernPerContrat = ENR_CONTRAT<76,DCOUNT(ENR_CONTRAT<76>, CHAR(253))>
		IF W_DernPerContrat[5,2] # MoisFinModul THEN 
			i = 0
			LOOP
			i = i + 1
			WHILE ENR_CONTRAT<76,i> # ""
				W_CumulHresContrat = W_CumulHresContrat + ENR_CONTRAT<77,i>/100	
				W_CumulHresAbs = W_CumulHresAbs + ENR_CONTRAT<78,i>/100	
				W_CumulHresForfait = W_CumulHresForfait + ENR_CONTRAT<77,i>/100 - ENR_CONTRAT<78,i>/100
				W_CumulHresReelles = W_CumulHresReelles + ENR_CONTRAT<79,i>	/100
				W_CumulHresDiff = W_CumulHresDiff + ENR_CONTRAT<80,i>/100
				W_CumulRegul = W_CumulRegul + ENR_CONTRAT<100,i>/100
			REPEAT
			W_NbMois = i - 1
		END
	END ELSE
		W_DernPerContrat = ""
		W_CumulContrat = 0
	END
  END

  IF Traitement = "B" OR Traitement = "CI" THEN
	W_Sortie2=W_Sortie

	IF Traitement = "CI" THEN
		* Cumuls
		W_IndResultat = 1
		FOR W_IndMois = PeriodeDeb TO PeriodeFin
			IF W_IndMois[5,2] = "13" THEN
				W_IndMois = W_IndMois[1,4] + 1
				W_IndMois = W_IndMois:"01"
			END    
			W_Sortie<W_IndResultat,7> = W_Sortie<W_IndResultat,7> + W_CumulHresDiff
			W_Sortie<W_IndResultat,8> = "0"
			W_Sortie<W_IndResultat,9> = W_Sortie<W_IndResultat,9> + W_CumulHresDiff - W_CumulRegul

			W_IndResultat = W_IndResultat + 1
  		NEXT W_IndMois
		IF ENR_CONTRAT<1> # "02" THEN
		  OPEN "", "ETABLISSEMENT" TO F.ETABLISSEMENT THEN
			READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT, ENR_CONTRAT<3> THEN
				MoisFinModul = ENR_ETABLISSEMENT<24>
			END ELSE
				MoisFinModul = "12"
			END
		  END ELSE
			MoisFinModul = "12"
		  END
		END ELSE
			MoisFinModul = "12"
		END
	      WRITE W_Sortie ON F.TPSTEMPO, "CALCSUIV":User
	END

	* Cumuls
	
	W_IndResultat = 1
	W_1erePeriode = "1"
	FOR W_IndMois = PeriodeDeb TO PeriodeFin
		IF W_IndMois[5,2] = "13" THEN
			W_IndMois = W_IndMois[1,4] + 1
			W_IndMois = W_IndMois:"01"
		END
		
		ENR_SUIVCONTRATPROSP = ""    
		W_NbMois = W_NbMois + 1
		W_CumulHresContrat = W_CumulHresContrat + W_Sortie2<W_IndResultat,2>	
		W_CumulHresAbs = W_CumulHresAbs + W_Sortie2<W_IndResultat,3>
		W_CumulHresForfait = W_CumulHresForfait + W_Sortie2<W_IndResultat,4>
		W_CumulHresReelles = W_CumulHresReelles + W_Sortie2<W_IndResultat,5>
		* W_CumulHresDiff = W_CumulHresDiff 

		ENR_SUIVCONTRATPROSP<1> = W_CumulHresContrat 
		ENR_SUIVCONTRATPROSP<2> = W_CumulHresAbs
		ENR_SUIVCONTRATPROSP<3> = W_CumulHresForfait
		ENR_SUIVCONTRATPROSP<4> = W_CumulHresReelles
		ENR_SUIVCONTRATPROSP<5> = W_CumulHresDiff + W_Sortie2<W_IndResultat,7>
		ENR_SUIVCONTRATPROSP<6> = W_CumulRegul
		ENR_SUIVCONTRATPROSP<7> = W_NbMois
		ENR_SUIVCONTRATPROSP<8> = DATE():TIME()
		WRITE ENR_SUIVCONTRATPROSP ON F.SUIVCONTRATPROSP, CodeContrat:W_IndMois

		IF W_IndMois[5,2] = MoisFinModul THEN
			IF W_1erePeriode = "1" THEN
			   ENR_CUMSUIVCONT = ""
			   IF W_CumulHresDiff + W_Sortie2<W_IndResultat,7> - W_CumulRegul > 0 THEN
			   	ENR_CUMSUIVCONT<1> = INT((W_CumulHresDiff + W_Sortie2<W_IndResultat,7> - W_CumulRegul)*100 + 1/2)			   	
			   END ELSE
				ENR_CUMSUIVCONT<1> = INT((W_CumulHresDiff + W_Sortie2<W_IndResultat,7> - W_CumulRegul)*100 - 1/2)			   	
			   END
			   WRITE ENR_CUMSUIVCONT ON F.CUMSUIVCONT, CodeContrat
			   W_1erePeriode = "0"
			END
			W_CumulHresContrat = 0
			W_CumulHresAbs = 0
			W_CumulHresForfait = 0
			W_CumulHresReelles = 0
			W_CumulHresDiff = W_Sortie2<W_IndResultat,7> * -1			
			W_CumulRegul = 0
			W_NbMois = 0
		END

		W_IndResultat = W_IndResultat + 1
  	NEXT W_IndMois

  END 
	
	  IF Traitement = "CH" THEN
		* Compteurs d'heures : renvoyer le Nb heures Mand, Inter, SSIAD
		* Heures Forfait
		W_HresContrat = W_Sortie<1,4>
		* Heures Reelles
		W_HresReelles = W_Sortie<1,5>
		W_Sortie = ""
		W_Sortie<1> = W_TabInterv<DCOUNT(W_TabInterv,CHAR(254))>
		W_Sortie<1,2,2> = W_HresReelles
		W_Sortie<1,2,6> = W_HresContrat
		WRITE W_Sortie ON F.TPSTEMPO, "CALCSUIV":User	
	  END	

	  
  
  EXECUTE 'EFFACER-LISTE ':W_NomListeAbsArretsCalcSuivContProsp
  EXECUTE 'EFFACER-LISTE ':W_NomListeAbsCongesCalcSuivContProsp

  DELETE F.TPSTEMPO, "AFFICHEPLANNING":W_User

END
*WRITE ENR_RAPPORT ON F.TEMPO, "MT"

STOP

*********************************************
50
* VALORISATION DU TEMPS DE TRAJET

	READ ENR_TPSPARAM FROM F.TPSPARAM,"1" ELSE ENR_TPSPARAM=""
	W_RubTrajet = ENR_TPSPARAM<12>
	
	W_Periode=""
	W_CountPerCours=DCOUNT(ENR_CONTRAT<76>,CHAR(253))
	W_Periode<1>=ENR_CONTRAT<76,W_CountPerCours>
	W_CountPerCours=W_CountPerCours-1
	IF W_CountPerCours=0 THEN
		W_CountPerAnt=DCOUNT(ENR_CONTRAT<71>,CHAR(253))
		W_Periode<2>=ENR_CONTRAT<71,W_CountPerAnt>
		W_CountPerAnt=W_CountPerAnt-1
		IF W_CountPerAnt # 0 THEN
			W_Periode<3>=ENR_CONTRAT<71,W_CountPerAnt>
		END
	END ELSE
		W_Periode<2>=ENR_CONTRAT<76,W_CountPerCours>
		W_CountPerCours=W_CountPerCours-1
		IF W_CountPerCours=0 THEN
			W_CountPerAnt=DCOUNT(ENR_CONTRAT<71>,CHAR(253))
			W_Periode<3>=ENR_CONTRAT<71,W_CountPerAnt>
		END ELSE
			W_Periode<3>=ENR_CONTRAT<76,W_CountPerCours>
		END
	END

	W_NbreHre=0
	W_NbTrajet=0
	W_Pourcent=0
	W_Aidant=CodeContrat[1,5]
	
	FOR i=1 TO 3
		READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,CodeContrat:W_Periode<i> THEN
			W_CountAtt2=DCOUNT(ENR_DETAILCALCUL<2>,CHAR(253))
			FOR j=1 TO W_CountAtt2
				READ ENR_RUBSAISIE FROM F.RUBSAISIE,ENR_DETAILCALCUL<2,j> ELSE ENR_RUBSAISIE=""
				IF ENR_RUBSAISIE<2>="3" OR ENR_RUBSAISIE<2>="4" THEN
					W_NbreHre=W_NbreHre+ENR_DETAILCALCUL<3,j>
				END
				IF ENR_DETAILCALCUL<2,j>=W_RubTrajet THEN
					W_NbTrajet=W_NbTrajet+ENR_DETAILCALCUL<3,j>
				END
			NEXT j
		END
	NEXT i
	W_Pourcent=((W_NbTrajet/W_NbreHre)*100)*100
	W_Pourcent=INT(W_Pourcent+(1/2))
	
	READ ENR_TPSTRAJET FROM F.TPSTRAJET,W_Aidant ELSE ENR_TPSTRAJET=""
	ENR_TPSTRAJET<1>=W_Pourcent
	WRITE ENR_TPSTRAJET ON F.TPSTRAJET,W_Aidant
	
	
RETURN

**********************************************
100

   W_MoisListe = W_IndMois[5,2]

   W_AnneeListe = W_IndMois[1,4]
   W_Sortie<W_IndResultat,1> =  "01/":W_MoisListe:"/":W_AnneeListe

   W_DateDebMois = ICONV(W_Sortie<W_IndResultat,1>,"D4/")
        
   IF W_MoisListe < 12 THEN
      W_DateFinMois = ICONV("01/":W_MoisListe + 1"R%2":"/":W_AnneeListe,"D4/") - 1
   END ELSE
      W_DateFinMois = ICONV("01/01/":W_AnneeListe + 1,"D4/") - 1
   END

   IF ENR_CONTRAT<8> # "" AND ENR_CONTRAT<8> < W_DateDebMois THEN
	W_Sortie<W_IndResultat,2> = "0"
	W_Sortie<W_IndResultat,3> = "0"
	W_Sortie<W_IndResultat,4> = "0"
	W_Sortie<W_IndResultat,5> = "0"
	W_Sortie<W_IndResultat,6> = "0"
	IF W_IndResultat > 1 THEN
		W_Sortie<W_IndResultat,7> = W_Sortie<W_IndResultat-1,7>
	END ELSE
		W_Sortie<W_IndResultat,7> = "0"
	END
	W_Sortie<W_IndResultat,8> = "0"
	W_Sortie<W_IndResultat,9> = W_Sortie<W_IndResultat,7>
	
   END ELSE

      W_JourMoisProsp = W_DateFinMois - W_DateDebMois + 1

	L = DCOUNT(ENR_CONTRAT<15>,CHAR(253)) + 1
	
	LOOP
		L = L - 1
	WHILE ENR_CONTRAT<15,L> > W_DateFinMois AND L # "" 

	REPEAT
	IF L = 0 THEN
		L = 1
	END
      BEGIN CASE
          CASE ENR_CONTRAT<25, L> = "1"
              W_HresMois = ((ENR_CONTRAT<24, L> / 100) * 52) / 12
          CASE ENR_CONTRAT<25, L> =  "2"
              W_HresMois = ((ENR_CONTRAT<24, L> / 100) * 26) / 12
          CASE ENR_CONTRAT<25, L> =  "3"
              W_HresMois = ENR_CONTRAT<24, L> / 100
          CASE ENR_CONTRAT<25, L> =  "4"
              W_HresMois = (ENR_CONTRAT<24, L> / 100) / 12
      END CASE
	

      W_DebAbsProsp = W_DateDebMois
      W_FinAbsProsp = W_DateFinMois
      IF ENR_CONTRAT<7> > W_DateDebMois AND ENR_CONTRAT<7> < W_DateFinMois THEN
	    IF ENR_CONTRAT<8># "" AND ENR_CONTRAT<8> > W_DateDebMois AND ENR_CONTRAT<8> < W_DateFinMois THEN
		 W_NbJourMois = ENR_CONTRAT<8> - ENR_CONTRAT<7> + 1
             W_HresMois = INT(W_HresMois * 100 / W_JourMoisProsp * W_NbJourMois + 1/2) / 100
             W_DateDebMois = ENR_CONTRAT<7>
		 W_DateFinMois = ENR_CONTRAT<8>
	    END ELSE
             W_NbJourMois = W_DateFinMois - ENR_CONTRAT<7> + 1
             W_HresMois = INT(W_HresMois * 100 / W_JourMoisProsp * W_NbJourMois + 1/2) / 100
             W_DateDebMois = ENR_CONTRAT<7>
	    END
      END ELSE
         IF ENR_CONTRAT<8># "" AND ENR_CONTRAT<8> > W_DateDebMois AND ENR_CONTRAT<8> < W_DateFinMois THEN
            W_NbJourMois = ENR_CONTRAT<8> - W_DateDebMois + 1
            W_HresMois = INT(W_HresMois * 100 / W_JourMoisProsp * W_NbJourMois + 1/2) / 100
            W_DateFinMois = ENR_CONTRAT<8>
         END
      END  

        
      W_HresMoisS = W_HresMois
      W_Sortie<W_IndResultat,2> = W_HresMoisS
        
      W_NbJourAbs = 0
      W_HresAbsS = 0
      W_HresForfait = 0
      W_HresForfaitS = 0

	* W_HresAbs = CalculAbsences(CLng(W_DateDebMois), CLng(W_DateFinMois), ENR_CONTRAT(0), CCur(W_HresMois), W_DebAbsProsp, W_FinAbsProsp)
      GOSUB 200
	W_HresAbs = CalculAbsences

	W_HresAbsS = W_HresAbs
*       Lst_HresAbs.AddItem FormatZoneNum(W_HresAbsS, 4, 2, False)
	  W_Sortie<W_IndResultat,3> = W_HresAbsS

       * 'Calcul des heures forfaitaires
        W_HresForfait = W_HresMois - W_HresAbs
        W_HresForfaitS = W_HresForfait
*        Lst_HresForfait.AddItem FormatZoneNum(W_HresForfaitS, 4, 2, False)
	  W_Sortie<W_IndResultat,4> = W_HresForfaitS
    
        W_NbHres = 0
        W_HresReelles = 0
        W_HresReellesS = 0

	  *W_HresReelles = CalculConges(CLng(W_DateDebMois), CLng(W_DateFinMois), ENR_CONTRAT(0), CCur(W_HresMois))
        GOSUB 300
        W_HresReelles = CalculConges
	
        
		IF ENR_CONTRAT<1> = "02" THEN
		   IF W_TabInterv<DCOUNT(W_TabInterv,CHAR(254)),W_IndResultat+1,3> <> "" THEN
			W_HresReelles = W_HresReelles + W_TabInterv<DCOUNT(W_TabInterv,CHAR(254)), W_IndResultat+1, 3> / 100
			GOSUB 400
			W_HresReelles = W_HresReelles + HeuresMOIContrat

		   END
		END ELSE
		   IF ENR_ACTIVITES<12> = "P" THEN
			IF W_TabInterv<DCOUNT(W_TabInterv,CHAR(254)),W_IndResultat+1,2> <> "" THEN
			   	
			   
	            	W_HresReelles = W_HresReelles + W_TabInterv<DCOUNT(W_TabInterv,CHAR(254)), W_IndResultat+1, 2> / 100
* 		           W_HresReelles = W_HresReelles + HeuresMOIContrat(ENR_TEMPO(ENR_TEMPO.DCount, k, 6), ENR_CONTRAT(0))
				GOSUB 400
				W_HresReelles = W_HresReelles + HeuresMOIContrat
			END
		   END ELSE
			
			IF W_TabInterv<DCOUNT(W_TabInterv,CHAR(254)),W_IndResultat+1,4> <> "" THEN
				W_HresReelles = W_HresReelles + W_TabInterv<DCOUNT(W_TabInterv,CHAR(254)), W_IndResultat+1, 4> / 100
			END
		   END
		END
	
	
        W_HresReellesS = W_HresReelles
*        Lst_HresReel.AddItem FormatZoneNum(W_HresReellesS, 4, 2, False)
	  W_Sortie<W_IndResultat,5> = W_HresReellesS

        *'Calcul de la diffrence
        W_Difference = W_HresReelles - W_HresForfait
        W_DifferenceS = W_Difference
        *Lst_Difference.AddItem FormatZoneNum(W_DifferenceS, 4, 2, True)
        W_Sortie<W_IndResultat,6> = W_DifferenceS

        *'Calcul de la diffrence cumule
        IF W_IndResultat > 1 THEN
            W_DifferenceCumul = W_Sortie<W_IndResultat-1,7> + W_Difference
        END ELSE
            W_DifferenceCumul = W_Difference
        END
        W_DifferenceCumulS = W_DifferenceCumul
*        Lst_DiffCumul.AddItem FormatZoneNum(W_DifferenceCumulS, 4, 2, True)
	  W_Sortie<W_IndResultat,7> = W_DifferenceCumulS

*        Lst_Regul.AddItem FormatZoneNum("0,0", 3, 2, True)
	  W_Sortie<W_IndResultat,8> = "0"
*        Lst_Solde.AddItem FormatZoneNum(W_DifferenceCumulS, 4, 2, True)
        W_Sortie<W_IndResultat,9> = W_DifferenceCumulS

   END

RETURN

200
* Ancienne procdure CalculAbsence

*CLng(W_DateDebMois), CLng(W_DateFinMois), ENR_CONTRAT(0), CCur(W_HresMois), W_DebAbsProsp, W_FinAbsProsp)
*Function CalculAbsences(DateDeb As Long, DateFin As Long, CodeContrat As String, W_HresMois As Currency, DateDebPeriode As Long, DateFinPeriode As Long, Optional Semaine As Boolean = False) As Double
CalculAbsences = 0
EXECUTE 'LISTE ':W_NomListeAbsArretsCalcSuivContProsp RETURNING MSGCODEARRET
IF MSGCODEARRET<1> # "209" THEN
  SELECT F.ABSENCESAIDANT TO W_ListeAbsArretsCalcSuivContProsp
  
  W_FinAbs = 0
  W_DebAbs = 0
  W_HresReelles = 0
  W_NbJrs = 0
  W_FinArret = "F"
  LOOP
	READNEXT W_CleArret FROM W_ListeAbsArretsCalcSuivContProsp ELSE W_FinArret = "V"
  WHILE W_FinArret = "F"
    W_FinAbs = 0
    W_DebAbs = 0
  

    READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,W_CleArret THEN
	IF W_CleArret[8,5] <= W_DateFinMois AND ENR_ABSENCESAIDANT<2> >= W_DateDebMois THEN
	  
        IF ENR_ABSENCESAIDANT<26> = "" THEN
            IF W_CleArret[8,5] < W_DateDebMois THEN
                W_DebAbs = W_DateDebMois
            END ELSE
                W_DebAbs = W_CleArret[8,5]
                IF ENR_ABSENCESAIDANT<1> = "2" THEN
                    W_NbJrs = W_NbJrs - 1/2
                END
            END
            IF ENR_ABSENCESAIDANT<2> > W_DateFinMois THEN
                W_FinAbs = W_DateFinMois
            END ELSE
                W_FinAbs = ENR_ABSENCESAIDANT<2>
                IF ENR_ABSENCESAIDANT(3) = "1" THEN
                    W_NbJrs = W_NbJrs - 1/2
                END
            END
        
        END ELSE
             k = 0
             LOOP 
			k = k + 1
		 WHILE ENR_ABSENCESAIDANT<26, k> # ""
                IF ENR_ABSENCESAIDANT<26, k> = CodeContrat THEN
                    IF ENR_ABSENCESAIDANT<21, k> = "N" THEN
                        W_DebAbs = 1
                        W_FinAbs = 0    
                    END ELSE
                        IF ENR_ABSENCESAIDANT<22, k> < W_DateDebMois THEN
                            W_DebAbs = W_DateDebMois
                        END ELSE
                            W_DebAbs = ENR_ABSENCESAIDANT<22, k>
                            IF ENR_ABSENCESAIDANT<23, k> <> "M" THEN
                                W_NbJrs = W_NbJrs - 0.5
                            END
                        END
                        IF ENR_ABSENCESAIDANT<24, k> > W_DateFinMois THEN
                            W_FinAbs = W_DateFinMois
                        END ELSE
                            W_FinAbs = ENR_ABSENCESAIDANT<24, k>
                            IF ENR_ABSENCESAIDANT<25, k> <> "S" THEN
                                W_NbJrs = W_NbJrs - 0.5
                            END
                        END
                    END
                    k = 999
                END
             REPEAT
		 IF k < 999 THEN
			W_DebAbs = 1
                  W_FinAbs = 0
		 END
        END
	END
    END
      
    IF W_FinAbs - W_DebAbs > 0 THEN
      IF W_CleArret[6,2] = "03" THEN
        W_NbJrs = W_NbJrs + (W_FinAbs - W_DebAbs + 1) / 2
      END ELSE
        W_NbJrs = W_NbJrs + W_FinAbs - W_DebAbs + 1
      END
    END

  REPEAT

   IF W_NbJrs > 0 THEN
    W_HresReelles = INT(W_HresMois * 100 / OCONV(W_DateFinMois,"D4/")[1, 2] + 0.5) / 100 * W_NbJrs
   END

  CalculAbsences = W_HresReelles
END
RETURN

300
*******************************************************************
*			Procdure CalculConges					*
*******************************************************************
*CalculConges(CLng(W_DateDebMois), CLng(W_DateFinMois), ENR_CONTRAT(0), CCur(W_HresMois))
*CalculConges(DateDeb As Long, DateFin As Long, CodeContrat As String, W_HresMois As Currency) As Double
CalculConges = 0
EXECUTE 'LISTE ':W_NomListeAbsCongesCalcSuivContProsp RETURNING MSGCODECONGES
JoursOuvrables = 0
IF MSGCODECONGES<1> # "209" THEN
  SELECT F.ABSENCESAIDANT TO W_ListeAbsCongesCalcSuivContProsp

  W_HresReelles = 0

  W_FinAbsCongesCalcSuivContProsp = "F"
  LOOP
	READNEXT W_ReqAbs FROM W_ListeAbsCongesCalcSuivContProsp ELSE W_FinAbsCongesCalcSuivContProsp = "V"
  WHILE W_FinAbsCongesCalcSuivContProsp = "F"
      READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT, W_ReqAbs THEN
        
        IF W_ReqAbs[8, 5] < W_DateDebMois THEN
            W_DebAbs = W_DateDebMois
        END ELSE
            W_DebAbs = W_ReqAbs[8, 5]
        END
        IF ENR_ABSENCESAIDANT<2> > W_DateFinMois THEN
            W_FinAbs = W_DateFinMois
        END ELSE
            W_FinAbs = ENR_ABSENCESAIDANT<2>
        END
        W_NbHres = INT(W_HresMois * 100 * 12 / 312 + 0.5) / 100

	  ENR_RAPPORT<-1> = OCONV(W_DebAbs,"D4/"):" - ":OCONV(W_FinAbs,"D4/"):" - ":W_ReqAbs  

	  GOSUB 600
        

	  ENR_RAPPORT<-1> =  JoursOuvrables
	  W_NbHres = W_NbHres * JoursOuvrables
* JoursOuvrables(W_ReqAbs(i, 1), CInt(W_DebAbs), CInt(W_FinAbs), CodeContrat)
	
        W_HresReelles = W_HresReelles + W_NbHres

      END
  
  REPEAT

  CalculConges = W_HresReelles
END

RETURN

400
*******************************************************************
*			Procdure HeuresMOIContrat				*
*******************************************************************
* Function HeuresMOIContrat(NbHresMod As String, CodeContrat As String, Optional Semaine As Boolean = False) As Double
    IF ENR_CONTRAT<1> # "02" THEN
      NbHresMod = W_TabInterv<DCOUNT(W_TabInterv,CHAR(254)),W_IndResultat+1,6>
    END ELSE
	NbHresMod = W_TabInterv<DCOUNT(W_TabInterv,CHAR(254)),W_IndResultat+1,7>
    END
    HeuresMOIContrat = 0
	W_Passe="FAUX"
	
    IF CodeContrat # "" THEN
        
        IF NbHresMod = "" THEN
            W_HresMod = 0
        END ELSE
            W_HresMod = NbHresMod
        END
		
        READ ENR_PROFIL FROM F.PROFIL, ENR_CONTRAT<26,DCOUNT(ENR_CONTRAT<26>,CHAR(253))> THEN
            W_Count = DCOUNT(ENR_PROFIL<2>,CHAR(253))
            FOR i = 1 TO W_Count
                IF ENR_PROFIL<2, i> # "" THEN
                    IF ENR_PROFIL<2, i> # "814" AND ENR_PROFIL<2, i> # "830" THEN
                        READ ENR_RUBSAISIE FROM F.RUBSAISIE, ENR_PROFIL<2, i> THEN
                            IF ENR_RUBSAISIE<2> = "5" THEN
                                * Rubrique "Inclus dans Brut base et montant"
                                IF ENR_RUBSAISIE<6> = "1" THEN
                                    *' rubrique type "Base fixe"
                                    IF ENR_RUBSAISIE<7> # "" THEN
                                        *If Semaine = True Then
                                        *    HeuresMOIContrat = HeuresMOIContrat + Int(ENR_RUBSAISIE(7) * 12 / 52 + 1 / 2) / 100
                                        *Else
                                            HeuresMOIContrat = HeuresMOIContrat + ENR_RUBSAISIE<7> / 100
                                        *End If
                                    END
                                END
                            END
                        END
                        
                    END ELSE
                        IF ENR_CONTRAT<1> = "01" THEN
                            IF ENR_PROFIL<2, i> = "814" THEN
                                IF ENR_CONVENTIONCOL<18> # "" THEN
                                    HeuresMOIContrat = HeuresMOIContrat + INT(NbHresMod * ENR_CONVENTIONCOL<18> / 100 / 10000 + 1 / 2) / 100
									W_Passe="VRAI"
                                END
                            END ELSE
                                IF ENR_CONVENTIONCOL<33> # "" THEN
                                    HeuresMOIContrat = HeuresMOIContrat + INT(NbHresMod * ENR_CONVENTIONCOL<33> / 100 / 10000 + 1 / 2) / 100
									W_Passe="VRAI"
                                END
                            END
                        END
                        
                    END
                END
            NEXT i
            
        END
		
		IF W_Passe="FAUX" THEN
			IF W_Pourcent # 0 THEN
				HeuresMOIContrat = HeuresMOIContrat + INT(NbHresMod * W_Pourcent / 10000 + 1 / 2) / 100				
			END
		END
    END

RETURN

600 ***************************************************************
*			Fonction   JoursOuvrables				*
*******************************************************************
* Function JoursOuvrables(W_CodeAbsence As String, W_DateDeb As Integer, W_DateFin As Integer, CodeContrat As String) As Double

    JoursOuvrables = 0
    
    i = 1
    LOOP WHILE ENR_ABSENCESAIDANT<26, i> # "" AND ENR_ABSENCESAIDANT<26, i> # CodeContrat
        i = i + 1
    REPEAT
	
    IF ENR_ABSENCESAIDANT<26,i> <> "" THEN
	
       IF ENR_ABSENCESAIDANT<26, i> <> "" AND ENR_ABSENCESAIDANT<21, i> = "O" THEN
          IF ENR_ABSENCESAIDANT<23,i> # "M" AND (ENR_ABSENCESAIDANT<22, i> >= W_DebAbs AND ENR_ABSENCESAIDANT<22, i> <= W_FinAbs) THEN
             JoursOuvrables = JoursOuvrables - 0.5
          END
          IF ENR_ABSENCESAIDANT<25, i> # "S" AND ( ENR_ABSENCESAIDANT<24, i> >= W_DebAbs AND ENR_ABSENCESAIDANT<24, i> <= W_FinAbs) THEN
             JoursOuvrables = JoursOuvrables - 0.5
          END
          IF ENR_ABSENCESAIDANT<22, i> > W_DebAbs THEN
              W_DateDeb = ENR_ABSENCESAIDANT<22, i>
	    END ELSE	
		  W_DateDeb = W_DebAbs
          END
          IF ENR_ABSENCESAIDANT<24, i> < W_FinAbs THEN
              W_DateFin = ENR_ABSENCESAIDANT<24,i>
          END ELSE
		  W_DateFin = W_FinAbs
	    END
          FOR i = W_DateDeb TO W_DateFin
		W_JourFerieProsp = i
		GOSUB 2000
		
            IF W_JourFerieProsp = "F" THEN
                JoursOuvrables = JoursOuvrables + 1
            END
          NEXT i
          
       END ELSE
          IF ENR_ABSENCESAIDANT<21, i> <> "N" THEN
		
            IF ENR_ABSENCESAIDANT<1> = "2" AND W_ReqAbs[8,5] >= W_DebAbs AND W_ReqAbs[8,5] =< W_FinAbs THEN
               JoursOuvrables = JoursOuvrables - 0.5
            END
            IF ENR_ABSENCESAIDANT<3> = "1" AND ENR_ABSENCESAIDANT<2> <= W_FinAbs AND ENR_ABSENCESAIDANT<2> >= W_DebAbs THEN
               JoursOuvrables = JoursOuvrables - 0.5
            END
            IF W_ReqAbs[8,5] >= W_DebAbs THEN
                W_DateDeb = W_ReqAbs[8,5]
		END ELSE
		    W_DateDeb = W_DebAbs
		END
            IF ENR_ABSENCESAIDANT<2> < W_FinAbs THEN
                W_DateFin = ENR_ABSENCESAIDANT<2>
            END ELSE
		    W_DateFin = W_FinAbs
		END
            FOR i = W_DateDeb TO W_DateFin
                  W_JourFerieProsp = i
			GOSUB 2000
			IF W_JourFerieProsp = "F" THEN
                    JoursOuvrables = JoursOuvrables + 1
             	END
            NEXT i
          END
		
       END
		
    END ELSE
	
         IF ENR_ABSENCESAIDANT<1> = "2" AND W_ReqAbs[8,5] >= W_DebAbs AND W_ReqAbs[8,5] <= W_FinAbs THEN
            JoursOuvrables = JoursOuvrables - 0.5
         END
         IF ENR_ABSENCESAIDANT<3> = "1" AND ENR_ABSENCESAIDANT<2> <= W_FinAbs AND ENR_ABSENCESAIDANT<2> >= W_DebAbs THEN
            JoursOuvrables = JoursOuvrables - 0.5
         END
         IF W_ReqAbs[8,5] > W_DebAbs THEN
             W_DateDeb = W_ReqAbs[8,5]
         END ELSE
		 W_DateDeb = W_DebAbs
	   END
         IF ENR_ABSENCESAIDANT<2> < W_FinAbs THEN
             W_DateFin = ENR_ABSENCESAIDANT<2>
         END ELSE
		 W_DateFin = W_FinAbs
	   END
	   
         FOR i = W_DateDeb TO W_DateFin
			
			W_JourFerieProsp = i
			GOSUB 2000
			IF W_JourFerieProsp = "F" THEN
                    JoursOuvrables = JoursOuvrables + 1
             	END
         NEXT i
    END
RETURN

2000 ********************************************************
*  On dtermine si W_JourFerieProsp (date interne) est 	*
* un jour fri...							*
*************************************************************
* ATTENTION : ne pas utiliser variables i, k, j, t,...
IF OCONV(W_JourFerieProsp,"DWA") = "Sunday" OR OCONV(W_JourFerieProsp,"DWA") = "Dimanche" THEN
   W_JourFerieProsp = "V"
END ELSE

   W_JourClairFerieProsp = OCONV(W_JourFerieProsp,"D4/")
	
*   IF W_DernLecturePaques # W_JourClairFerieProsp[7,4] THEN 
	W_DernLecturePaques = W_JourClairFerieProsp[7,4]
*	GOSUB 2100
*   END

  	W_Param2000=W_JourClairFerieProsp:"|":ENR_CONTRAT<2>
  	CALL DIMJF(RETURNVAL,W_Param2000,Ferie)
	
  	IF Ferie[1,5] # "FERIE" THEN
		W_JourFerieProsp = "F"
  	END
	
*   BEGIN CASE
*	CASE W_JourClairFerieProsp[1,5] = "01/01"
*	CASE W_JourClairFerieProsp[1,5] = "01/05"
*	CASE W_JourClairFerieProsp[1,5] = "08/05"
*	CASE W_JourClairFerieProsp[1,5] = "14/07"
*	CASE W_JourClairFerieProsp[1,5] = "15/08"
*	CASE W_JourClairFerieProsp[1,5] = "01/11"
*	CASE W_JourClairFerieProsp[1,5] = "11/11"
*	CASE W_JourClairFerieProsp[1,5] = "25/12"
*	CASE W_JourFerieProsp = ENR_PAQUES<2> + 1
*	CASE W_JourFerieProsp = ENR_PAQUES<2> + 39
*	CASE W_JourFerieProsp = ENR_PAQUES<2> + 39 + 11
*		On ne copnsire plus le lubndi de pentecote comme un jour fri 
*		Sera  revoir (paramtre ?)
*		W_JourFerieProsp = "F"
*	CASE 1
*		W_JourFerieProsp = "F"
*  END CASE
END
RETURN

2100 **************************************
*	Lecture PAQUES				*
*******************************************
READ ENR_PAQUES FROM F.PAQUES, W_DernLecturePaques THEN
   ENR_PAQUES<2> = ICONV(ENR_PAQUES<1>[1,2]:"/":ENR_PAQUES<1>[3,2]:"/":W_DernLecturePaques,"D4/")
END ELSE
   ENR_PAQUES = ""
   ENR_PAQUES<2> = 0
END
RETURN
