SUBROUTINE CALCSALREFIJSS(RETURNVAL,PARAMETRES,W_Sortie)
*************************************************************************************************	
*        PR de calcul des salaries de rfrence / IJSS d'un contrat pour une priode d'absence.	*
*																*
*																*
* Nb : Pour calculer l'IJSS, on pars des infos du PR CALCPERIODEREF afin de prendre en compte	*
* les salaires rtablis.												*
*************************************************************************************************
W_Sortie = "Erreur ouverture fichiers"
EXECUTE "SET-THOUS ."
OPEN "", "CONTRAT" TO F.CONTRAT ELSE RETURN
OPEN "", "DETAILCALCUL" TO F.DETAILCALCUL ELSE RETURN
OPEN "", "ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE RETURN
OPEN "", "CONTRATSPREV" TO F.CONTRATSPREV ELSE RETURN
OPEN "", "CONSTANTESPAIE" TO F.CONSTANTESPAIE ELSE RETURN
OPEN "", "TEMPO" TO F.TEMPO ELSE RETURN
OPEN "", "ASSOCIATION" TO F.ASSOCIATION ELSE RETURN
OPEN "", "CIVILAIDE" TO F.CIVILAIDE ELSE RETURN
OPEN "", "ETABLISSEMENT" TO F.ETABLISSEMENT ELSE RETURN
OPEN "", "ELTSPARTEMP" TO F.ELTSPARTEMP ELSE RETURN

W_Sortie = ""
W_ListeAbsCalcIJSS = ""
W_ListeHistor = ""

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

READ ENR_CONSTANTESPAIE FROM F.CONSTANTESPAIE, "1" ELSE
   ENR_CONSTANTESPAIE<4> = 0
   ENR_CONSTANTESPAIE<3> = 0
END

ENR_RAPPORT = ""

GOSUB 500

* Nb de contrats
W_NbContrats = PARAMETRES<1> 
* Traite-t-on en francs (W_AfficheEuro = "V") ou en euros ?
W_AfficheEuro = PARAMETRES<2>
W_DatePassageEuro = PARAMETRES<3>
W_DateDebutArret = PARAMETRES<4>
W_MotifArret = PARAMETRES<5>
W_CodeAidant = PARAMETRES<6>

IF W_DatePassageEuro = "" THEN 
	W_DatePassageEuro = ENR_CONSTANTESPAIE<9>
END

W_MoisPrecedent = OCONV(W_DateDebutArret,"D4/")    
W_MoisPrecedent = W_MoisPrecedent[7,4]:W_MoisPrecedent[4,2]
W_MoisPrecedent = W_MoisPrecedent - 1 
IF W_MoisPrecedent[5,2] = "00" THEN
	W_MoisPrecedent = W_MoisPrecedent[1,4] - 1
	W_MoisPrecedent = W_MoisPrecedent:"12"
END

* Nb : ci dessous, rang de la ligne "Liste contrats" de PARAMETRES
W_RangContrats = 7

W_ParamsPeriodeRef = ""

IF W_MotifArret <= "03" THEN
	W_ParamsPeriodeRef<2> = 3
END ELSE
	W_ParamsPeriodeRef<2> = 1
END
W_ParamsPeriodeRef<1> = W_MoisPrecedent
GOSUB 3100
W_ParamsPeriodeRef<1> = W_MoisPrecedentProsp
W_ParamsPeriodeRef<3> = W_ListeAbs<1>	
GOSUB 3300
W_ParamsPeriodeRef<4> = W_ListeHistor<1>


W_IndSortie = 0

FOR iContrat = 1 TO W_NbContrats
	
    READ ENR_CONTRAT FROM F.CONTRAT, PARAMETRES<iContrat+W_RangContrats> THEN
	
	READ ENR_DETAILCALCUL FROM F.DETAILCALCUL, PARAMETRES<iContrat+W_RangContrats>:W_MoisPrecedent ELSE
		ENR_DETAILCALCUL = ""
	END
	W_PasseEltsPartEmp = "F"
	IF ENR_CONTRAT<1> = "02" THEN
	   IF ENR_CONTRAT<28> = "0" THEN
		READ ENR_ELTSPARTEMP FROM F.ELTSPARTEMP, ENR_CONTRAT<3> THEN
			IF ENR_ELTSPARTEMP<16> >= W_MoisPrecedent THEN
				* Facturation faite : le bulletin est bien valid (on ne peut y retourner en saisie d'activit).
				W_PasseEltsPartEmp = "V"
			END
		END
	   END
	END
	
	IF ENR_CONTRAT<63> >= W_MoisPrecedent OR (ENR_DETAILCALCUL<1> = "P" OR (ENR_DETAILCALCUL<1> = "E" AND W_PasseEltsPartEmp = "V")) OR ENR_CONTRAT<7> >= ICONV("01/":OCONV(W_DateDebutArret,"D4/")[4,7],"D4/") THEN

	   IF ENR_CONTRAT<7> >= ICONV("01/":OCONV(W_DateDebutArret,"D4/")[4,7],"D4/") THEN
		W_FaireTraitement = "F"
		GOSUB 5000
		
	   END ELSE
		W_FaireTraitement = "V"
	   END

	   IF W_FaireTraitement = "V" THEN
         
		READ ENR_CONTRATSPREV FROM F.CONTRATSPREV, ENR_CONTRAT<29> THEN
			W_Mois = ENR_CONTRATSPREV<20>
         	END ELSE
			W_Mois = 3
         	END
	   	ENR_RAPPORT<-1> = "Contrat : ":ENR_CONTRAT<3>
	   	GOSUB 1000

         	*IF ENR_CONTRAT<5> = "M" OR ENR_CONTRAT<68> = "1" THEN
      	* Si salaire mensuel, alors on vrifie le montant du salaire
	*          SalaireMensuel
	    	*	GOSUB 2000
	
          	*	IF DATE() > INT(W_DatePassageEuro) AND W_AfficheEuro = "F" THEN
            *  		W_SalaireContrat = INT(W_SalaireContrat / 655957 * 10000 * 100 + 1 / 2) / 100
          	*	END
	    
          	*	IF W_SalaireRef < W_SalaireContrat THEN
		*           Calcul - avantageux : on prends les valeurs contrat
            *  		W_SalaireRef = W_SalaireContrat
            *  		W_HeuresRef = W_HeuresContrat 
          	*	END
         	*END

	   	GOSUB 3000

	   END ELSE
		W_SalaireRef = ""
		W_HeuresRef = ""
		W_IJSS = ""
	   END

	END ELSE
	   W_SalaireRef = ""
         W_HeuresRef = ""
	   W_IJSS = ""
	END

	W_IndSortie = W_IndSortie + 1

      IF LEN(ENR_CONTRAT<3>) = 6 THEN
          READ ENR_ASSOCIATION FROM F.ASSOCIATION, ENR_CONTRAT<3>[1,3] ELSE ENR_ASSOCIATION = ""
          W_Sortie<W_IndSortie,1> = "  ":ENR_CONTRAT<3>[1,3]
	    W_Sortie<W_IndSortie,2> = ENR_ASSOCIATION<1>
      END ELSE
          READ ENR_CIVILAIDE FROM F.CIVILAIDE, ENR_CONTRAT<3> ELSE ENR_CIVILAIDE = ""
          W_Sortie<W_IndSortie,1> = ENR_CONTRAT<3>
	    W_Sortie<W_IndSortie,2> = ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
      END
	
      IF W_SalaireRef = "" THEN W_SalaireRef = 0
      IF W_HeuresRef = "" THEN W_HeuresRef = 0
*      Lst_SalaireRef.AddItem FormatZoneNum(W_SalaireRef, 6, 2, False)
	W_Sortie<W_IndSortie,3> = W_SalaireRef
*      Lst_NbHeures.AddItem FormatZoneNum(W_HeuresRef, 3, 2, False)
	W_Sortie<W_IndSortie,4> = W_HeuresRef
*      Lst_Subrog.AddItem " NON"
	W_Sortie<W_IndSortie,5> = " NON"
*      Lst_Contrat.AddItem ENR_CONTRAT(0)
	W_Sortie<W_IndSortie,6> = PARAMETRES<iContrat+W_RangContrats>
      IF W_IJSS = "" THEN W_IJSS = "0"
      W_Sortie<W_IndSortie,7> = W_IJSS
	W_Sortie<W_IndSortie,8> = W_DateAnc
	
    END
NEXT iContrat

W_IndSortie = W_IndSortie + 1
W_Sortie<W_IndSortie> = W_ListeHistor<1>

*WRITE W_Sortie ON F.TEMPO, "Abs"
*WRITE ENR_RAPPORT ON F.TEMPO, "Deboguage"
RETURN

500
*******************************************************
*	Initialisation des rub. complments			*
*******************************************************
W_RubComplement = "807;808;812"

    EXECUTE 'SELECT CONTRATSPREV'
    W_FinRub = ""
    LOOP
	READNEXT W_CleCont ELSE W_FinRub ="O"
    WHILE W_FinRub = ""
	READ ENR_CONTRATSPREV FROM F.CONTRATSPREV, W_CleCont THEN
	   IF ENR_CONTRATSPREV<41> # "" AND INDEX(W_RubComplement,ENR_CONTRATSPREV<41>,1) = 0 THEN
		W_RubComplement = W_RubComplement:";":ENR_CONTRATSPREV<41>
	   END
	   IF ENR_CONTRATSPREV<42> # "" AND INDEX(W_RubComplement,ENR_CONTRATSPREV<42>,1) = 0 THEN
		W_RubComplement = W_RubComplement:";":ENR_CONTRATSPREV<42>
	   END
	END
    REPEAT

RETURN

1000
*******************************************************
* 	Ancienne procdure SalaireNonMensuel		*
*******************************************************

    W_MoisPassageEuro = OCONV(W_DatePassageEuro,"D4/")
    W_MoisPassageEuro = W_MoisPassageEuro[7,4]:W_MoisPassageEuro[4,2]

    W_FinPeriode = OCONV(W_DateDebutArret,"D4/")
    W_DebPeriode = W_FinPeriode
    W_FinPeriode = ICONV("01/":W_FinPeriode[4,7],"D4/") - 1
    W_MoisRef = W_DebPeriode[4,2] - W_Mois
    IF W_MoisRef <= 0 THEN
	   W_DebPeriode =12+W_MoisRef"R%2"
         W_DebPeriode = ICONV("01/":W_DebPeriode:"/":OCONV(W_DateDebutArret,"D4/")[7,4]- 1,"D4/")
    END ELSE
         W_DebPeriode = ICONV("01/":W_MoisRef:"/":OCONV(W_DateDebutArret,"D4/")[7,4],"D4/")
    END
    
    W_SauveDebPeriode = W_DebPeriode
    W_SauveFinPeriode = W_FinPeriode
    
    W_DebContrat = ENR_CONTRAT<7>
    W_FinContrat = ENR_CONTRAT<8>
    
    IF INT(W_DebPeriode) < INT(W_DebContrat) THEN
        W_DebPeriode = W_DebContrat
    END
    W_DebPeriode = OCONV(W_DebPeriode,"D4/")
    IF W_FinContrat # "" THEN
        IF INT(W_FinPeriode) > INT(W_FinContrat) THEN
            W_FinPeriode = OCONV(W_FinContrat,"D4/")
        END ELSE
            W_FinPeriode = OCONV(W_FinPeriode,"D4/")
        END
    END ELSE
        W_FinPeriode = OCONV(W_FinPeriode,"D4/")
    END

    NbJourEcoule = ICONV(W_FinPeriode,"D4/") - ICONV(W_DebPeriode,"D4/") + 1

    NbJourTravail = ""
    
    W_CumulBrut = ""
    W_CumulHres = ""
    W_CumulIndem = ""
    
    IF NbJourEcoule > 0 THEN

	W_DateMois = W_SauveDebPeriode
	FOR W_IndMois = 1 TO W_Mois
		IF W_DateMois <= ICONV(W_FinPeriode,"D4/") THEN
	 	   W_DateMois = W_DateMois + 32
		   W_DateMois = "01":OCONV(W_DateMois,"D4/")[3,8]
		   W_DateMois = ICONV(W_DateMois,"D4/")
		   NbJourTravail<W_IndMois,1> = OCONV(W_DateMois -1,"D4/")
		   IF (W_DateMois - 1) - ICONV(W_DebPeriode,"D4/") + 1 > NbJourTravail<W_IndMois,1>[1,2] THEN
			NbJourTravail<W_IndMois,2> = NbJourTravail<W_IndMois,1>[1,2]
		   END ELSE
			IF (W_DateMois - 1) - ICONV(W_DebPeriode,"D4/") + 1 > 0 THEN
				NbJourTravail<W_IndMois,2> = (W_DateMois - 1) - ICONV(W_DebPeriode,"D4/") + 1
			END
		   END
		   IF (W_DateMois -1) - ICONV(W_FinPeriode,"D4/") > 0 THEN
			NbJourTravail<W_IndMois,2> = NbJourTravail<W_IndMois,2> - ((W_DateMois -1) - ICONV(W_FinPeriode,"D4/"))
		   END
		END ELSE
		   W_DateMois = W_DateMois + 32
		   W_DateMois = "01":OCONV(W_DateMois,"D4/")[3,8]
		   W_DateMois = ICONV(W_DateMois,"D4/")
		   NbJourTravail<W_IndMois,1> = OCONV(W_DateMois -1,"D4/")

		   NbJourTravail<W_IndMois,2> = 0
		END
	NEXT W_IndMois 

	   
      W_DebRef = W_DebPeriode[7,4]:W_DebPeriode[4,2]
    

      W_FinRef = W_FinPeriode[7,4]:W_FinPeriode[4,2]
    
      W_IndMois = W_DebRef - (OCONV(W_SauveDebPeriode,"D4/")[7,4]:OCONV(W_SauveDebPeriode,"D4/")[4,2])
	IF W_IndMois >= 89 THEN
		W_IndMois = W_IndMois - 88
	END

      FOR i = W_DebRef TO W_FinRef
        W_IndMois = W_IndMois + 1

        IF i[5,2] = 13 THEN
            i = i[1,4]+1:"01"
        END
        READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,PARAMETRES<iContrat+W_RangContrats>:i THEN
		
            IF W_AfficheEuro = "V" AND i < W_MoisPassageEuro THEN
                W_CumulBrut<W_IndMois> = W_CumulBrut<W_IndMois> + ENR_DETAILCALCUL<7> / 6.55957
                W_CumulHres<W_IndMois> = W_CumulHres<W_IndMois> + ENR_DETAILCALCUL<6>
                IF ENR_DETAILCALCUL<5,1> <> "" THEN
                    W_Count = DCOUNT(ENR_DETAILCALCUL<5>,CHAR(253))
                    FOR j = 1 TO W_Count
                        IF INDEX(W_RubComplement, ENR_DETAILCALCUL<2,j>,1) # 0 THEN
                            W_CumulIndem<W_IndMois> = W_CumulIndem<W_IndMois> + ENR_DETAILCALCUL<5,j> / 6.55957
                        END
                    NEXT j
                END
                
            END ELSE
                W_CumulBrut<W_IndMois> = W_CumulBrut<W_IndMois> + ENR_DETAILCALCUL<7>
                W_CumulHres<W_IndMois> = W_CumulHres<W_IndMois> + ENR_DETAILCALCUL<6>
                IF ENR_DETAILCALCUL<5,1> # "" THEN
                    W_Count = DCOUNT(ENR_DETAILCALCUL<5>,CHAR(253))
                    FOR j = 1 TO W_Count
                        IF INDEX(W_RubComplement, ENR_DETAILCALCUL<2,j>,1) # 0 THEN
                            W_CumulIndem<W_IndMois> = W_CumulIndem<W_IndMois> + ENR_DETAILCALCUL<5,j>
                        END
                    NEXT j
                END
            END
            
        END
	  
	  IF ICONV(W_DebPeriode ,"D4/") > ICONV("01":NbJourTravail<W_IndMois,1>[3,8],"D4/") THEN 
	  	W_Deb2500 = ICONV(W_DebPeriode ,"D4/")
	  END ELSE
		W_Deb2500 = ICONV("01":NbJourTravail<W_IndMois,1>[3,8],"D4/")
	  END
	  IF ICONV(W_FinPeriode ,"D4/") < ICONV(NbJourTravail<W_IndMois,1>,"D4/") THEN 
	  	W_Fin2500 = ICONV(W_FinPeriode ,"D4/")
	  END ELSE
		W_Fin2500 = ICONV(NbJourTravail<W_IndMois,1>,"D4/")
	  END
	
	  GOSUB 2500
*    NbJourTravail = NbJourEcoule - ReturnJourAbsSurRef(CLng(IConv(W_DebPeriode)), CLng(IConv(W_FinPeriode)))
	  NbJourTravail<W_IndMois,2> = NbJourTravail<W_IndMois,2> - ReturnJourAbsSurRef
      NEXT i
   
   END ELSE
	W_DateMois = W_SauveDebPeriode
	FOR W_IndMois = 1 TO W_Mois

		W_DateMois = W_DateMois + 32
		W_DateMois = "01":OCONV(W_DateMois,"D4/")[3,8]
		W_DateMois = ICONV(W_DateMois,"D4/")
		NbJourTravail<W_IndMois,1> = OCONV(W_DateMois -1,"D4/")

		NbJourTravail<W_IndMois,2> = 0
		
	NEXT W_IndMois 

   END

   W_DateAnc = ENR_CONTRAT<7>
   W_DernContrat6000 = PARAMETRES<iContrat+W_RangContrats>
   GOSUB 6000

   W_HeuresRef = 0
   W_SalaireRef = 0
   W_TabHeuresRef = ""
   W_TabSalaireRef = ""

   W_NbMois = 0
   FOR W_IndMois = 1 TO W_Mois
    IF NbJourTravail<W_IndMois,2> > 0 THEN
	W_NbMois = W_NbMois + 1
      W_TabSalaireRef<W_IndMois> = (W_CumulBrut<W_IndMois> - W_CumulIndem<W_IndMois>)
    
      W_TabSalaireRef<W_IndMois> = (W_TabSalaireRef<W_IndMois> / NbJourTravail<W_IndMois,2>) * 30
*      W_TabSalaireRef<W_IndMois> = W_TabSalaireRef<W_IndMois> * 100
      W_SalaireRef = W_SalaireRef + W_TabSalaireRef<W_IndMois> 

      W_TabHeuresRef = (W_CumulHres<W_IndMois> / NbJourTravail<W_IndMois,2>) * 30
      W_HeuresRef = W_HeuresRef + W_TabHeuresRef
    END
   NEXT W_IndMois
   
   ENR_RAPPORT<-1> = "Cumuls : "
   ENR_RAPPORT<-1> = W_CumulBrut
   ENR_RAPPORT<-1> = "Cumuls indem : "
   ENR_RAPPORT<-1> = W_CumulIndem
   ENR_RAPPORT<-1> = "Cumuls heures: ":W_HeuresRef
   ENR_RAPPORT<-1> = W_CumulHres

   ENR_RAPPORT<-1> = "Jours pres : "
   ENR_RAPPORT<-1> = NbJourTravail

   ENR_RAPPORT<-1> = "nb mois : ":W_NbMois

   W_SalaireRef = INT((W_SalaireRef / W_NbMois)  + 1/2) / 100

   W_HeuresRef = INT((W_HeuresRef / W_NbMois)  + 1 / 2) / 100

RETURN

2000
*******************************************************
*	Ancienne procdure SalaireMensuel			*
*******************************************************

    W_CleContrat = PARAMETRES<iContrat+W_RangContrats>

    i = DCOUNT(ENR_CONTRAT<15>,CHAR(253))
    LOOP WHILE ENR_CONTRAT<15,i> >= W_DateDebutArret AND i >= 2
        i = i - 1
    REPEAT
    
    W_Periode = OCONV(W_DateDebutArret,"D4/")
    W_Periode = W_Periode[7,4]:W_Periode[4,2]
    
    W_Entree = ""
    W_Item = ""
    W_Entree<1> = W_CleContrat
    W_Entree<2> = i
    W_Entree<3> = W_Periode
    CALL CALCCOEFFTXHOR("",W_Entree,W_Item)

    W_TauxHor = W_Item<2>
 
    IF ENR_CONTRAT<13>= "" THEN
	
	iConst = 1
	LOOP WHILE ENR_CONSTANTESPAIE<4,iConst> > W_DateDebutArret
        iConst = iConst + 1
	REPEAT
	IF W_TauxHor < ENR_CONSTANTESPAIE<3,iConst> * 10 THEN
        W_TauxHor = ENR_CONSTANTESPAIE<3,iConst> * 10
	END
      IF ENR_CONTRAT<1> # "02" THEN
	 READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT, ENR_CONTRAT<3> THEN
	  IF W_TauxHor < ENR_ETABLISSEMENT<31> * 10 THEN
		W_TauxHor = ENR_ETABLISSEMENT<31> * 10
	  END
	 END
	END

    END

    BEGIN CASE 
        CASE ENR_CONTRAT<25,i> = "1"
            W_HeuresContrat = ENR_CONTRAT<24,i> * 52 / 12
        CASE ENR_CONTRAT<25,i> = "2"
            W_HeuresContrat = ENR_CONTRAT<24,i> * 26 / 12
        CASE ENR_CONTRAT<25,i> = "3"
            W_HeuresContrat = ENR_CONTRAT<24,i>
        CASE ENR_CONTRAT<25,i> = "4"
            W_HeuresContrat = ENR_CONTRAT<24,i> / 12
    END CASE

    W_HeuresContrat = INT(W_HeuresContrat * 100 + 1 / 2) / 10000
    W_SalaireContrat = W_TauxHor / 1000 * W_HeuresContrat
    W_SalaireContrat = INT(W_SalaireContrat * 100 + 1 / 2) / 100
    * Attention : si l'on saisit une absence rtroactivement, on risque d'afficher en euros un montant prvu en francs...
    IF W_AfficheEuro = "F" AND W_DateDebutArret > W_DatePassageEuro THEN
        W_SalaireContrat = INT(W_SalaireContrat * 655957 / 100000 + 1 / 2)
    END

RETURN

2500
*******************************************************************
*		Ancienne fonction ReturnJourAbsSurRef			*
*******************************************************************
W_DebAbsRef = W_Deb2500
W_FinAbsRef = W_Fin2500

    
    EXECUTE 'SSELECT ABSENCESAIDANT AVEC @ID = "':W_CodeAidant:']" AND AVEC DebAbsAidant <= "':W_FinAbsRef:'" AND AVEC 2 > "':W_DebAbsRef:'" AND AVEC NumMotifAidant >= "01" AND AVEC NumMotifAidant <= "06" OR = "12" OR = "13" OR = "22" OR = "23"'
    ReturnJourAbsSurRef = 0
    W_FinReqAbsRef = "F"
    LOOP
	READNEXT W_CleAbsRef ELSE W_FinReqAbsRef = "V"
    WHILE W_FinReqAbsRef = "F"
	READ ENR_ABSREF FROM F.ABSENCESAIDANT, W_CleAbsRef THEN
        IF W_CleAbsRef[6,2] <= "06" THEN
            IF W_DebAbsRef >= W_CleAbsRef[8,5] THEN
                W_Deb = W_DebAbsRef
            END ELSE
                W_Deb = W_CleAbsRef[8,5]
            END
            IF W_FinAbsRef <= ENR_ABSREF<2> THEN
                W_Fin = W_FinAbsRef
            END ELSE
                W_Fin = ENR_ABSREF<2>
            END
            W_IndAbs13 = 0
		LOOP
		W_IndAbs13 = W_IndAbs13 + 1
		WHILE ENR_ABSREF<17,W_IndAbs13> # "" AND ENR_ABSREF<17,W_IndAbs13> # PARAMETRES<iContrat+W_RangContrats>
	   	REPEAT
		IF ENR_ABSREF<17,W_IndAbs13> = "" THEN
		END ELSE
		  IF TRIM(ENR_ABSREF<16,W_IndAbs13>) = "OUI" THEN
			W_IJSS13 = ENR_ABSREF<20,W_IndAbs13> 
			W_CumulIndem = W_CumulIndem + W_IJSS13 * (W_Fin - W_Deb + 1)
		  END
		END
	  END ELSE
		* Conges sans solde ou parental : on risque d'avoir des exceptions ?
		IF ENR_ABSREF<26> # "" THEN
		   W_IndAbs26 = 0
		   LOOP
			W_IndAbs26 = W_IndAbs26 + 1
		   WHILE ENR_ABSREF<26,W_IndAbs26> # "" AND ENR_ABSREF<26,W_IndAbs26> # PARAMETRES<iContrat+W_RangContrats>
		   REPEAT
		   IF ENR_ABSREF<26,W_IndAbs26> # PARAMETRES<iContrat+W_RangContrats> THEN
			IF W_DebAbsRef >= ENR_ABSREF<22,W_IndAbs26> THEN
	                W_Deb = W_DebAbsRef
      	      END ELSE
            	    W_Deb = ENR_ABSREF<22,W_IndAbs26>
			    IF ENR_ABSREF<23,W_IndAbs26> = "A" THEN
				W_Deb = W_Deb 2 1/2
			    END

            	END
            	IF W_FinAbsRef < ENR_ABSREF<24,W_IndAbs26> THEN
       		    W_Fin = W_FinAbsRef
            	END ELSE
                      W_Fin = ENR_ABSREF<24,W_IndAbs26>
			    IF ENR_ABSREF<25,W_IndAbs26> = "M" THEN
				W_Fin = W_Fin - 1/2
			    END

            	END

		   END ELSE
			IF W_DebAbsRef > W_CleAbsRef[8,5] THEN
	                W_Deb = W_DebAbsRef
      	      END ELSE
            	    W_Deb = W_CleAbsRef[8,5]
			    IF ENR_ABSREF<1> = "2" THEN
				W_Deb = W_Deb + 1/2
			    END
            	END
            	IF W_FinAbsRef < ENR_ABSREF<2> THEN
       		    W_Fin = W_FinAbsRef
            	END ELSE
                      W_Fin = ENR_ABSREF<2>
			    IF ENR_ABSREF<3> = "1" THEN
				W_Fin = W_Fin - 1/2
			    END
            	END
		   END
		END ELSE
		   	IF W_DebAbsRef > W_CleAbsRef[8,5] THEN
	                W_Deb = W_DebAbsRef
      	      END ELSE
            	    W_Deb = W_CleAbsRef[8,5]
			    IF ENR_ABSREF<1> = "2" THEN
				W_Deb = W_Deb + 1/2
			    END
            	END
            	IF W_FinAbsRef < ENR_ABSREF<2> THEN
       		    W_Fin = W_FinAbsRef
            	END ELSE
                      W_Fin = ENR_ABSREF<2>
			    IF ENR_ABSREF<3> = "1" THEN
				W_Fin = W_Fin - 1/2
			    END
            	END
		END
	  END
	  IF W_Fin >= W_Deb THEN
	    IF W_CleAbsRef[6,2] <> "03" THEN
		ReturnJourAbsSurRef = ReturnJourAbsSurRef + W_Fin - W_Deb + 1
	    END ELSE
		ReturnJourAbsSurRef = ReturnJourAbsSurRef + (W_Fin - W_Deb + 1) / 2
          END
	  END
	END
    REPEAT

    ReturnJourAbsSurRef = INT(ReturnJourAbsSurRef)

RETURN

3000
*******************************************************************
*				Calcul IJSS						*
*******************************************************************
W_ParamsPeriodeRef<5> = PARAMETRES<iContrat+W_RangContrats>
IF ENR_CONTRAT<7> <= W_DateFinProsp THEN
	* Le contrat considr est bien celui actif en fin de priode de rfrence...
END ELSE
	k = 0
	LOOP
	k = k + 1
	WHILE W_TabEmpl<1,k> # ""
	   IF W_TabEmpl<1,k> = ENR_CONTRAT<3> THEN
		W_ParamsPeriodeRef<5> = W_TabEmpl<2,k>
		k = 99
	   END
	REPEAT
	IF k # 99 THEN
		* On va quand mme passer le contrat considr en paramtre au PR, en sachant bien que les tentatives de lecture de DETAILCALCUL vont chouer.
	END
END
W_ResultPeriodeRef = ""

CALL CALCPERIODEREFATTEST("",W_ParamsPeriodeRef,W_ResultPeriodeRef)

W_ResultPeriodeRef<-1>= "Appel : ":W_ParamsPeriodeRef
*WRITE W_ResultPeriodeRef ON F.TEMPO, PARAMETRES<iContrat+W_RangContrats>

*ENR_RAPPORT<-1> =  "Appel : ":W_ParamsPeriodeRef
*WRITE ENR_RAPPORT ON F.TEMPO, "Deboguage"


W_IJSSMoy = 0
i = 0
LOOP
i = i + 1
WHILE i <= W_ParamsPeriodeRef<2>
   W_IJSSMois = 0
   IF W_ResultPeriodeRef<i,6> = "" OR W_ResultPeriodeRef<i,6> = "0" THEN
	W_IJSSMois = W_ResultPeriodeRef<i,9> / 30
   END ELSE
	W_IJSSMois = W_ResultPeriodeRef<i,6> / 30
   END
   IF W_MotifArret <= "03" THEN
   	W_IJSSMoy = W_IJSSMoy + INT(50 * W_IJSSMois  + 1 / 2) / 100		   
   END ELSE
	W_IJSSMoy = W_IJSSMoy + INT(60 * W_IJSSMois  + 1 / 2) / 100		   
   END
REPEAT

IF W_AfficheEuro = "F" AND W_DateDebutArret > W_DatePassageEuro THEN
	W_IJSS = INT(W_IJSSMoy * 655957 / 100000 + 1 / 2)
END

W_IJSS = INT(W_IJSSMoy / W_ParamsPeriodeRef<2> + 1/2) / 100

RETURN

3100 **************************************************************
*		Recherche des bornes de la priode de rfrence		*
*******************************************************************
W_DateFinProsp = W_DateDebutArret
W_ListeAbs = ""
EXECUTE 'SELECT ABSENCESAIDANT = "':W_CodeAidant:']" AVEC NumMotifAidant <= "06" OR = "12" OR = "13" OR = "22" OR = "23" AND AVEC 2 <= "':W_DateFinProsp:'" PAR-DECR 2'
EXECUTE 'SAUVE-LISTE W_ListeAbsCalcIJSS'
EXECUTE 'LISTE W_ListeAbsCalcIJSS' RETURNING MSGCODE
IF MSGCODE<1> = "209" THEN
	* W_DateFinProsp = W_DateDebutArret
	* W_ListeAbs = ""
	W_MoisPrecedentProsp = W_MoisPrecedent
END ELSE
  SELECT F.ABSENCESAIDANT TO W_ListeAbsCalcIJSS
  W_FinRech = "F"
  LOOP
	READNEXT W_CleAbsProsp FROM W_ListeAbsCalcIJSS ELSE W_FinRech = "V"
  WHILE W_FinRech = "F"
   READ ENR_ABSPROSP FROM F.ABSENCESAIDANT, W_CleAbsProsp THEN
	IF W_CleAbsProsp[6,2] <= "06" AND W_CleAbsProsp[6,2] # "03" THEN
		IF ENR_ABSPROSP<2> = W_DateFinProsp - 1 THEN
			W_DateFinProsp = W_CleAbsProsp[8,5]
		END
	END
   END
  REPEAT

  W_DateFinProsp = "01/":OCONV(W_DateFinProsp,"D4/")[4,7]
  W_DateFinProsp = ICONV(W_DateFinProsp,"D4/")-1 

  W_MoisPrecedentProsp = OCONV(W_DateFinProsp,"D4/")
  W_MoisPrecedentProsp = W_MoisPrecedentProsp[7,4]:W_MoisPrecedentProsp[4,2]
 
  W_Boucle = 0
  W_DateDebProsp = W_DateFinProsp
  LOOP
  WHILE W_Boucle < W_ParamsPeriodeRef<2>
  	W_DateDebProsp = ICONV("01/":OCONV(W_DateDebProsp,"D4/")[4,7],"D4/") - 1
  	W_Boucle = W_Boucle + 1
  REPEAT

  W_DateDebProsp = W_DateDebProsp + 1

  W_TabMois = ""
  EXECUTE 'LISTE W_ListeAbsCalcIJSS' RETURNING MSGCODE
  SELECT F.ABSENCESAIDANT TO W_ListeAbsCalcIJSS
  W_FinRech = "F"
  LOOP
	READNEXT W_CleAbsProsp FROM W_ListeAbsCalcIJSS ELSE W_FinRech = "V"
  WHILE W_FinRech = "F"
	READ ENR_ABSPROSP FROM F.ABSENCESAIDANT, W_CleAbsProsp THEN
		W_DebAbs = W_CleAbsProsp[8,5]
		IF W_DebAbs <= W_DateFinProsp AND ENR_ABSPROSP<2> >= W_DateDebProsp THEN
			W_ListeAbs<1,-1> = W_CleAbsProsp
		END
	END
  REPEAT  
END
EXECUTE 'EFFACER-LISTE W_ListeAbsCalcIJSS'
RETURN

3300 **************************************************************
*		Etablissement liste contrats historique			*
*******************************************************************
W_ListeHistor = ""
W_ListeEmplHistor = ""
W_TabEmpl = ""
W_DateDebPerContrats = ICONV("01/":OCONV(W_DateFinProsp - 360,"D4/")[4,7],"D4/")
EXECUTE 'SELECT CONTRAT = "':W_CodeAidant:']" AVEC 7 <= "':W_DateFinProsp:'" AND AVEC 8 >= "':W_DateDebPerContrats:'" OR = "" AND AVEC 65 # "O" PAR-DECR 7'
ENR_RAPPORT<-1> = 'SELECT CONTRAT = "':W_CodeAidant:']" AVEC 7 <= "':W_DateFinProsp:'" AND AVEC 8 >= "':W_DateDebPerContrats:'" OR = "" AND AVEC 65 # "O" PAR-DECR 7'
W_Fin = "F"
W_TrouveHistor = "F"
W_DateDebMoisPrecedent = ICONV("01/":W_MoisPrecedent[5,2]:"/":W_MoisPrecedent[1,4],"D4/")
W_DateFinMoisPrecedent = ICONV("01/":OCONV(W_DateDebMoisPrecedent+32,"D4/")[4,7],"D4/")
W_ListeContratsMoisPrecedent = ""
LOOP
READNEXT W_Cle ELSE W_Fin = "V"
WHILE W_Fin = "F"
   READ ENR_CONTRATPROSP FROM F.CONTRAT, W_Cle THEN
	
	IF ENR_CONTRATPROSP<8> <= W_DateFinProsp AND ENR_CONTRATPROSP<8> # "" THEN
	END ELSE
		W_TabEmpl<1,-1> = ENR_CONTRATPROSP<3>
		W_TabEmpl<2,-1> = W_Cle
	END
	IF ENR_CONTRATPROSP<8> < W_DateDebutArret AND ENR_CONTRATPROSP<8> # "" THEN
		W_ListeHistor<1,-1> = W_Cle 
	END
	IF ENR_CONTRATPROSP<8> >= W_DateDebMoisPrecedent AND ENR_CONTRATPROSP<8> # "" AND ENR_CONTRATPROSP<8> < W_DateDebutArret THEN
		* On est sur un contrat se terminant AVANT l'arrt, et actif sur le mois prcdant l'arrt.
		* Nb : Du fait du tri de la requte, pour un employeur donn, le premier contrat de ce type trouv est le dernier contrat actif sur le mois prcdent
		i3300 = 0
		W_TrouveEmpl3300 = "F"
		LOOP
		i3300 = i3300 + 1
		WHILE W_ListeContratsMoisPrecedent<1,i3300> # "" AND W_TrouveEmpl3300 = "F"
		   IF W_ListeContratsMoisPrecedent<2,i3300> = ENR_CONTRATPROSP<3> THEN
			W_TrouveEmpl3300 = "V"
		   END
		REPEAT
		IF W_TrouveEmpl3300 = "F" THEN
			W_ListeContratsMoisPrecedent<1,i3300> = W_Cle
			W_ListeContratsMoisPrecedent<2,i3300> = ENR_CONTRATPROSP<3>
		END
	END ELSE
		* Contrat pas actif le mois prcdent l'arrt => Rien 
	END

   END
   W_ListeEmplHistor<1,-1> = W_Cle
   W_ListeEmplHistor<2,-1> = ENR_CONTRATPROSP<3>
   IF ENR_CONTRATPROSP<8> # "" THEN
   	W_ListeEmplHistor<3,-1> = ENR_CONTRATPROSP<8>
   END ELSE
	W_ListeEmplHistor<3,-1> = "99999"
   END
	
REPEAT
ENR_RAPPORT<-1> = W_ListeEmplHistor
RETURN

5000 **************************************************************************************************
*	Contrat actif au dbut d'arrt = nouveau contrat : la paie du mois prcdent est-elle valide ?	*
*******************************************************************************************************

i5000 = 0
W_Empl5000 = "F"
LOOP
i5000 = i5000 + 1
WHILE W_ListeContratsMoisPrecedent<1,i5000> # "" AND W_Empl5000 = "F"
	IF ENR_CONTRAT<3> = W_ListeContratsMoisPrecedent<2,i5000> THEN
		W_Empl5000 = W_ListeContratsMoisPrecedent<1,i5000>
	END
REPEAT
IF W_Empl5000 # "F" THEN

   READ ENR_CONTRAT5000 FROM F.CONTRAT, W_Empl5000 ELSE ENR_CONTRAT5000 = ""

   IF ENR_CONTRAT5000<63> >= W_MoisPrecedent THEN
	W_FaireTraitement = "V" 
   END ELSE	
   	READ ENR_DETAILCALCUL FROM F.DETAILCALCUL, W_Empl5000:W_MoisPrecedent ELSE ENR_DETAILCALCUL = ""
      IF ENR_DETAILCALCUL<1> = "P" THEN
	   W_FaireTraitement = "V"
      END ELSE
	   IF ENR_CONTRAT<1> = "02" THEN
		   READ ENR_ELTSPARTEMP FROM F.ELTSPARTEMP, ENR_CONTRAT<3> THEN

			IF ENR_ELTSPARTEMP<16> >= W_MoisPrecedent THEN
				W_FaireTraitement = "V"
			END
		   END
         END
      END 
  END
END

RETURN

6000 ********************************************************************************
*	Calcul du salaire de rfrence (moyenne des x mois prvcdent l'arrt)	:	*
* Priose en compte des contrats prcdents si continuit					*
*************************************************************************************
ENR_CONTRAT6000 = ""
ENR_CONTRAT6000<7> = ENR_CONTRAT<7>
ENR_CONTRAT6000<3> = ENR_CONTRAT<3>
i6000 = 0
W_Fin6000 = "F"
LOOP
i6000 = i6000 + 1
WHILE W_ListeEmplHistor<1,i6000> # "" AND W_Fin6000 = "F"
	IF W_ListeEmplHistor<2,i6000> = ENR_CONTRAT6000<3> AND W_DernContrat6000 # W_ListeEmplHistor<1,i6000> THEN
		IF ENR_CONTRAT6000<7> - W_ListeEmplHistor<3,i6000> <= 3 AND ENR_CONTRAT6000<7> - W_ListeEmplHistor<3,i6000> > 0 THEN
			READ ENR_CONTRAT6000 FROM F.CONTRAT, W_ListeEmplHistor<1,i6000> THEN
				ENR_RAPPORT<-1> = "Va 6100 ":W_ListeEmplHistor<1,i6000>:" - ": ENR_CONTRAT6000<7>:" - ":W_ListeEmplHistor<3,i6000> 
				GOSUB 6100
				W_DateAnc = ENR_CONTRAT6000<7>
			END
		END ELSE
			* 2 contrats non conscutifs chez le mme employeur => on arrte le traitement
			W_Fin6000 = "V"
		END
	END
REPEAT
RETURN

6100 **************************************************************************
*													*
    W_DebPeriode = W_SauveDebPeriode
    W_FinPeriode = W_SauveFinPeriode

    W_DebContrat = ENR_CONTRAT6000<7>
    W_FinContrat = ENR_CONTRAT6000<8>
    
    IF INT(W_DebPeriode) < INT(W_DebContrat) THEN
        W_DebPeriode = W_DebContrat
    END
    
        
    W_DebPeriode = OCONV(W_DebPeriode,"D4/")
    
    W_DebRef = W_DebPeriode[7,4]:W_DebPeriode[4,2]
    
    IF W_FinContrat # "" THEN
        IF INT(W_FinPeriode) > INT(W_FinContrat) THEN
            W_FinPeriode = OCONV(W_FinContrat,"D4/")
        END ELSE
            W_FinPeriode = OCONV(W_FinPeriode,"D4/")
        END
    END ELSE
        W_FinPeriode = OCONV(W_FinPeriode,"D4/")
    END
    W_FinRef = W_FinPeriode[7,4]:W_FinPeriode[4,2]
    
    NbJourEcoule6000 = ICONV(W_FinPeriode,"D4/") - ICONV(W_DebPeriode,"D4/") + 1

    *W_CumulBrut = 0
    *W_CumulHres = 0
    *W_CumulIndem = 0
    IF NbJourEcoule6000 > 0 THEN

	W_DateMois = W_SauveDebPeriode
	FOR W_IndMois = 1 TO W_Mois
		IF W_DateMois <= ICONV(W_FinPeriode,"D4/") THEN
	 	   W_DateMois = W_DateMois + 32
		   W_DateMois = "01":OCONV(W_DateMois,"D4/")[3,8]
		   W_DateMois = ICONV(W_DateMois,"D4/")
		   NbJourTravail<W_IndMois,1> = OCONV(W_DateMois -1,"D4/")
		   IF (W_DateMois - 1) - ICONV(W_DebPeriode,"D4/") + 1 > NbJourTravail<W_IndMois,1>[1,2] THEN
			NbJourTravail<W_IndMois,2> = NbJourTravail<W_IndMois,2> + NbJourTravail<W_IndMois,1>[1,2]
		   END ELSE
			IF (W_DateMois - 1) - ICONV(W_DebPeriode,"D4/") + 1 > 0 THEN
				NbJourTravail<W_IndMois,2> = NbJourTravail<W_IndMois,2> + (W_DateMois - 1) - ICONV(W_DebPeriode,"D4/") + 1
			END
		   END
		   IF (W_DateMois -1) - ICONV(W_FinPeriode,"D4/") > 0 THEN
			NbJourTravail<W_IndMois,2> = NbJourTravail<W_IndMois,2> - ((W_DateMois -1) - ICONV(W_FinPeriode,"D4/"))
		   END
		END ELSE
		   W_DateMois = W_DateMois + 32
		   W_DateMois = "01":OCONV(W_DateMois,"D4/")[3,8]
		   W_DateMois = ICONV(W_DateMois,"D4/")
		   NbJourTravail<W_IndMois,1> = OCONV(W_DateMois -1,"D4/")

		   * NbJourTravail<W_IndMois,2> = 0
		END
	NEXT W_IndMois 

      W_IndMois = W_DebRef - (OCONV(W_SauveDebPeriode,"D4/")[7,4]:OCONV(W_SauveDebPeriode,"D4/")[4,2])
	IF W_IndMois >= 89 THEN
		W_IndMois = W_IndMois - 88
	END
      FOR i = W_DebRef TO W_FinRef

	  W_IndMois = W_IndMois + 1

        IF i[5,2] = 13 THEN
            i = i[1,4]+1:"01"
        END
        READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_ListeEmplHistor<1,i6000>:i THEN
		
            IF W_AfficheEuro = "V" AND i < W_MoisPassageEuro THEN
                W_CumulBrut<W_IndMois> = W_CumulBrut<W_IndMois> + ENR_DETAILCALCUL<7> / 6.55957
                W_CumulHres<W_IndMois> = W_CumulHres<W_IndMois> + ENR_DETAILCALCUL<6>
                IF ENR_DETAILCALCUL<5,1> <> "" THEN
                    W_Count = DCOUNT(ENR_DETAILCALCUL<5>,CHAR(253))
                    FOR j = 1 TO W_Count
                        IF INDEX(W_RubComplement, ENR_DETAILCALCUL<2,j>,1) # 0 THEN
                            W_CumulIndem<W_IndMois> = W_CumulIndem<W_IndMois> + ENR_DETAILCALCUL<5,j> / 6.55957
                        END
                    NEXT j
                END
                
            END ELSE
                W_CumulBrut<W_IndMois> = W_CumulBrut<W_IndMois> + ENR_DETAILCALCUL<7>
                W_CumulHres<W_IndMois> = W_CumulHres<W_IndMois> + ENR_DETAILCALCUL<6>
                IF ENR_DETAILCALCUL<5,1> # "" THEN
                    W_Count = DCOUNT(ENR_DETAILCALCUL<5>,CHAR(253))
                    FOR j = 1 TO W_Count
                        IF INDEX(W_RubComplement, ENR_DETAILCALCUL<2,j>,1) # 0 THEN
                            W_CumulIndem<W_IndMois> = W_CumulIndem<W_IndMois> + ENR_DETAILCALCUL<5,j>
                        END
                    NEXT j
                END
            END
            
        END
	  IF ICONV(W_DebPeriode ,"D4/") > ICONV("01":NbJourTravail<W_IndMois,1>[3,8],"D4/") THEN 
	  	W_Deb2500 = ICONV(W_DebPeriode ,"D4/")
	  END ELSE
		W_Deb2500 = ICONV("01":NbJourTravail<W_IndMois,1>[3,8],"D4/")
	  END
	  IF ICONV(W_FinPeriode ,"D4/") < ICONV(NbJourTravail<W_IndMois,1>,"D4/") THEN 
	  	W_Fin2500 = ICONV(W_FinPeriode ,"D4/")
	  END ELSE
		W_Fin2500 = ICONV(NbJourTravail<W_IndMois,1>,"D4/")
	  END

        GOSUB 2500
*    NbJourTravail = NbJourEcoule - ReturnJourAbsSurRef(CLng(IConv(W_DebPeriode)), CLng(IConv(W_FinPeriode)))
	  NbJourTravail<W_IndMois,2> = NbJourTravail<W_IndMois,2>  - ReturnJourAbsSurRef

      NEXT i

    END
RETURN
