**********************************************************
* RATTRAPPAGE DES CONGES EN COURS SUITE A NON PRISE EN COMPTE 
* DU NOMBRE DE JOURS D'ARRET ASSIIMILE A DU TRAVAIL EFFECTIF
**********************************************************

* Ouvertures des fichiers
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
EXECUTE 'COMO ON RATCONGESCOURS'
EXECUTE "CREER-FICHIER CONTRATCONGCOURS 7,1"
EXECUTE "VIDER-FICHIER DATA CONTRATCONGCOURS"
OPEN "","CONSTANTESPAIE" TO F.CONSTANTESPAIE ELSE STOP
OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP 
OPEN "","CONTRAT" TO F.CONTRAT ELSE STOP
OPEN "","CONVENTIONCOL" TO F.CONVENTIONCOL ELSE STOP
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE STOP
OPEN "","PERIODESPAIE" TO F.PERIODESPAIE ELSE STOP
OPEN "","CONTRATSPREV" TO F.CONTRATSPREV ELSE STOP
OPEN "","CONTRATCONGCOURS" TO F.CONTRATCONGCOURS ELSE STOP
GOSUB 304
READ ENR_CONSTANTESPAIE FROM F.CONSTANTESPAIE,"1" ELSE STOP
READ ENR_PERIODESPAIE FROM F.PERIODESPAIE,"1" ELSE STOP
IF INT(ICONV("01/":ENR_PERIODESPAIE<1>[5,2]:"/":ENR_PERIODESPAIE<1>[1,4],"D4/"))>=INT(ENR_CONSTANTESPAIE<9>) THEN
   W_PASSAGEEURO=1
   W_EURO="6,55957"
END ELSE
   W_PASSAGEEURO=0
END
PERPAIECOURS=ENR_PERIODESPAIE<1>
PERPAIEPREC=PERPAIECOURS-1
IF PERPAIEPREC[5,2]="00" THEN
 PERPAIEPREC=PERPAIECOURS[1,4]-1
 PERPAIEPREC=PERPAIEPREC:"12"
END
REQUETERATCONG=""
EXECUTE 'SELECT CONTRAT AVEC 1 # "02" AND AVEC 63 >= "':PERPAIEPREC:'" AND AVEC 65 = "" AND AVEC 58 >= "':PERPAIECOURS:'" OR = "" PAR 1 PAR 0'
EXECUTE 'SAUVE-LISTE REQUETERATCONG'
EXECUTE 'LISTE REQUETERATCONG' CAPTURING MSG RETURNING MSGCODE
IF MSGCODE<1>=209 THEN STOP
SELECT F.CONTRAT TO REQUETERATCONG
LISTEABSENCESAIDANT=""
LISTEMALADIEAIDANT=""
W_Fini="FAUX"
W_SAUVCODECONVENTION=""
LOOP
 READNEXT W_CleContrat FROM REQUETERATCONG ELSE W_Fini="VRAI"
 UNTIL W_Fini="VRAI" DO
  READ ENR_CONTRAT FROM F.CONTRATCONGCOURS,W_CleContrat THEN
   NULL
  END ELSE
   READ ENR_CONTRAT FROM F.CONTRAT,W_CleContrat THEN
    ENR_CONTRAT<44>=0
    ENR_CONTRAT<45>=0
    ENR_CONTRAT<46>=0
   END ELSE
    ENR_CONTRAT=""
   END
   W_CODECONVENTION=ENR_CONTRAT<1> 
   IF W_CODECONVENTION#W_SAUVCODECONVENTION THEN
    W_SAUVCODECONVENTION=W_CODECONVENTION
    READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,W_CODECONVENTION ELSE ENR_CONVENTIONCOL=""
    PERIODEREFCONGES=ENR_CONVENTIONCOL<28>
    IF PERIODEREFCONGES=0 THEN PERREFCONGDEPART="200606" ELSE PERREFCONGDEPART="200601"
   END
   PERDERNCLOT=ENR_CONTRAT<63>
   PERDERNBULL=ENR_CONTRAT<58>
   W_CODEAIDANT=W_CleContrat[1,5]
   W_CODECONTRAT=W_CleContrat 
   W_DEBUTCONTRAT=ENR_CONTRAT<7>
   W_DEBUTCONTRATBIS=OCONV(W_DEBUTCONTRAT,"D4/")
   W_DEBUTCONTRATBIS=W_DEBUTCONTRATBIS[7,4]:W_DEBUTCONTRATBIS[4,2]
   W_DEBUTCONTRATANC=ENR_CONTRAT<97>
   W_ASSOCIATION=ENR_CONTRAT<2>
   IF W_DEBUTCONTRATBIS<PERREFCONGDEPART THEN
    PERREFDEB=PERREFCONGDEPART
   END ELSE
    PERREFDEB=W_DEBUTCONTRATBIS
   END
   W_JRSMAINTIENCONGES=0
   IF PERDERNBULL#"" AND PERDERNBULL<=PERDERNCLOT THEN
    NULL
   END ELSE
    IF PERDERNCLOT#"" AND ENR_CONTRAT<31> <> "1" THEN
     FOR G=PERREFDEB TO PERDERNCLOT
      W_PERIODE=G
      W_DebMois=ICONV("01/":W_PERIODE[5,2]:"/":W_PERIODE[1,4],"D4/")
      W_FinMois=W_DebMois+32
      W_FinMois=OCONV(W_FinMois,"D4/")
      W_FinMois="01/":W_FinMois[4,7]
      W_FinMois=ICONV(W_FinMois,"D4/")-1
      W_NbJourMois=W_FinMois-W_DebMois+1
      W_NbJourMois=W_NbJourMois * 100
      W_JOURCONGESCPS=0
      READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CleContrat:G ELSE ENR_DETAILCALCUL=""
      I=1
      LOOP
       UNTIL ENR_DETAILCALCUL<2,I>="" DO
        IF ENR_DETAILCALCUL<2,I>="804" THEN W_JOURCONGESCPS=1
        I=I+1
      REPEAT
      GOSUB 100
     NEXT G
     ENR_CONTRAT<110>=W_JRSMAINTIENCONGES
     WRITE ENR_CONTRAT ON F.CONTRATCONGCOURS,W_CleContrat
    END
   END
  END
REPEAT
EXECUTE "EFFACER-LISTE REQUETERATCONG"
EXECUTE 'SSELECT CONTRATCONGCOURS' 
W_Fini="FAUX"
LOOP
 READNEXT W_Cle ELSE W_Fini="VRAI"
 UNTIL W_Fini="VRAI" DO
  READ ENR_CONTRAT FROM F.CONTRAT,W_Cle ELSE ENR_CONTRAT=""
  READ ENR_CONTRATCONGCOURS FROM F.CONTRATCONGCOURS,W_Cle ELSE ENR_CONTRATCONGCOURS=""
  JCOURSCONTRAT=ENR_CONTRAT<44>
  HCOURSCONTRAT=ENR_CONTRAT<45>
  MCOURSCONTRAT=ENR_CONTRAT<46>
  JRSSUSPENSION=ENR_CONTRAT<70>
  JCOURSDG=ENR_CONTRATCONGCOURS<44>
  HCOURSDG=ENR_CONTRATCONGCOURS<45>
  MCOURSDG=ENR_CONTRATCONGCOURS<46>
  JRSMAINTIEN=ENR_CONTRATCONGCOURS<110>
  IF JCOURSCONTRAT#JCOURSDG OR HCOURSCONTRAT#HCOURSDG OR MCOURSCONTRAT#MCOURSDG THEN
   IF HCOURSCONTRAT=HCOURSDG AND HCOURSDG=0 AND MCOURSCONTRAT=MCOURSDG AND MCOURSDG=0 THEN
    NULL
   END ELSE
    PRINT W_Cle:" ":JCOURSCONTRAT:" ":JCOURSDG:"   ":HCOURSCONTRAT:" ":HCOURSDG:"   ":MCOURSCONTRAT:" ":MCOURSDG:" ":JRSSUSPENSION:" ":JRSMAINTIEN
    ENR_CONTRAT<44>=JCOURSDG
    ENR_CONTRAT<45>=HCOURSDG
    ENR_CONTRAT<46>=MCOURSDG
    ENR_CONTRAT<70>=ENR_CONTRAT<70>-JRSMAINTIEN
    IF ENR_CONTRAT<70><0 THEN ENR_CONTRAT<70>=0
     WRITE ENR_CONTRAT ON F.CONTRAT,W_Cle
   END 
  END
REPEAT
EXECUTE 'COMO OFF'
STOP
RETURN

*********************************************************
* GESTION DES CONGES
* MAJ DES CONGES EN-COURS D'ACQUISITION

100 *
    W_TOTNBJOURCONGES=0
    W_CODEABSENCE=""
    W_REQABSENCESVIDE="FAUX"
    W_TOTALJRSABSMALADIE=0
    W_NBJOURNONINDEM=0
    W_PASABS="VRAI"
    W_MOIS=W_PERIODE[5,2]
    W_ANNEE=W_PERIODE[1,4]
    W_DEBUTPERIODE=ICONV("01/":W_MOIS:"/":W_ANNEE,"D")
    W_MOISFIN=W_PERIODE[5,2]+1
    IF W_MOISFIN>12 THEN
	 W_ANNEEFIN=W_PERIODE[1,4]+1
	 W_MOISFIN="01"
    END ELSE
	 W_ANNEEFIN=W_PERIODE[1,4]
    END
    W_FINPERIODE=ICONV("01/":W_MOISFIN:"/":W_ANNEEFIN,"D4/")
    W_FINPERIODE=W_FINPERIODE-1
    W_FINPERIODE2=OCONV(W_FINPERIODE,"D4/")
    W_FINPERIODE2=W_FINPERIODE2[7,4]:W_FINPERIODE2[4,2]

    EXECUTE 'TSELECT ABSENCESAIDANT AVEC CodAbsAidant = "':W_CODEAIDANT:']" AND AVEC 2 >= "':W_DEBUTPERIODE:'" AND AVEC DebAbsAidant <= "':W_FINPERIODE:'" AND AVEC NumMotifAidant = "01" OR = "02" OR = "04" OR = "05" OR = "06" OR = "12" OR = "13" OR = "22" OR = "23"'
    EXECUTE "SAUVE-LISTE LISTEABSENCESAIDANT"
    EXECUTE "LISTE LISTEABSENCESAIDANT" CAPTURING MSG RETURNING MSGCODE

    IF MSGCODE<1><>209 THEN 
         SELECT F.ABSENCESAIDANT TO LISTEABSENCESAIDANT
         LOOP 
 	     READNEXT CLE FROM LISTEABSENCESAIDANT ELSE
	         W_REQABSENCESVIDE="VRAI"
  	     END
	   UNTIL W_REQABSENCESVIDE="VRAI" DO
	     W_CODEABSENCE=CLE[6,2]
	     W_CLEABSENCE=CLE
	     * LECTURE ABSENCESAIDANT
	     READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,W_CLEABSENCE ELSE
               PRINT "PAS D'ABS"
	       STOP
	     END
	     * VERIFIE SI ABS A PRENDRE (EXCLUSION)
	     W_ABSOK=0
	     * recherche code contrat sur att 26
	     IF ENR_ABSENCESAIDANT<26,1>="" THEN 
		  W_ABSOK=1
	     END ELSE
	          Z=1
                  LOOP
		       UNTIL ENR_ABSENCESAIDANT<26,Z>=W_CleContrat OR ENR_ABSENCESAIDANT<26,Z>="" DO
 		       Z=Z+1
    	          REPEAT
		  * si code contrat trouv
		  IF ENR_ABSENCESAIDANT<26,Z>=W_CleContrat THEN 
			* si absence a prendre en compte 
			IF ENR_ABSENCESAIDANT<21,Z>="O" THEN 
				W_ABSOK=1
				* modifie virtuellement les infos de l'absence
				W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7]=ENR_ABSENCESAIDANT<22,Z>
				CLE[8,LEN(CLE)-7]=ENR_ABSENCESAIDANT<22,Z>
				IF ENR_ABSENCESAIDANT<23,Z>="M" THEN 
					ENR_ABSENCESAIDANT<1>="1"
				END ELSE
					ENR_ABSENCESAIDANT<1>="2"
				END
				ENR_ABSENCESAIDANT<2>=ENR_ABSENCESAIDANT<24,Z>
				IF ENR_ABSENCESAIDANT<25,Z>="M" THEN 
					ENR_ABSENCESAIDANT<3>="1"
				END ELSE
					ENR_ABSENCESAIDANT<3>="2"
				END
			END
		  END ELSE 
			W_ABSOK=0
	          END
	      END

	     IF W_ABSOK=1 THEN
  	       IF ENR_CONTRAT<31> <> 1 OR ENR_CONTRAT<1>="02" THEN
                 W_PASABS="FAUX"
                 IF W_JOURCONGESCPS=0 THEN
                    * Pas conges payes pour soldes 
                    GOSUB 200
                 END
               END
	     END

         REPEAT

         * a voir
	   IF W_PASABS="VRAI" AND W_JOURCONGESCPS=0 THEN GOSUB 200
    END

    IF W_DEBUTCONTRAT <= W_DEBUTPERIODE THEN
      W_NBJOURPRESENT=250
    END ELSE
      * CALCUL AU PRORATA DES JOURS DE CONGES
      W_NBJOURPRESENT=W_DEBUTCONTRAT-W_DEBUTPERIODE
      W_NBJOURPRESENT=W_NBJOURPRESENT*100
      W_NBJOURPRESENT=W_NbJourMois-W_NBJOURPRESENT
      W_NBJOURPRESENT=250*W_NBJOURPRESENT/W_NbJourMois
      W_NBJOURPRESENT=INT(W_NBJOURPRESENT + 1/2)
    END
    W_MONTANTARRET=0
    * recherche des rubriques des contrats prevoyances
    * RECHERCHE DES RUBRIQUES 807 - 808
    W_CountDet2=DCOUNT(ENR_DETAILCALCUL<2>,CHAR(253))
    FOR iDet2=1 TO W_CountDet2
       FOR iRubPrev=1 TO W_CountRubPrev
          IF ENR_DETAILCALCUL<2,iDet2> = W_TabPrev<iRubPrev> THEN
             W_MONTANTARRET=W_MONTANTARRET+ENR_DETAILCALCUL<5,iDet2>
          END
       NEXT iRubPrev
    NEXT iDet2 
    W_BRUTARRET=ENR_DETAILCALCUL<7>-W_MONTANTARRET
    W_HEURESARRET=ENR_DETAILCALCUL<6>
    W_VALEURHEURESJOUR=INT((W_HEURESARRET*10/100)+1/2)
    W_VALEURMONTJOUR=INT((W_BRUTARRET*10/100)+1/2)  
    W_NBJOURPRESENT=W_NBJOURPRESENT-W_TOTNBJOURCONGES
    ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURPRESENT
    ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_VALEURHEURESJOUR
    ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_VALEURMONTJOUR

RETURN     

*********************************************************
* GESTION DES ABSENCES

200 *

    W_MONTANTARRET=0
    W_ABSENCEMOIS="FAUX"

    IF W_PASABS="FAUX" THEN
       * RECHERCHE SI ABSENCES SUR LE MOIS
       IF W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7]>=W_DEBUTPERIODE AND W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7]<=W_FINPERIODE THEN 
          W_ABSENCEMOIS="VRAI"
       END
       IF W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7]<=W_DEBUTPERIODE THEN 
	   IF ENR_ABSENCESAIDANT<2>>=W_DEBUTPERIODE THEN 
	      W_ABSENCEMOIS="VRAI"
           END    
       END
    END ELSE
       W_ABSENCEMOIS="FAUX"
       W_CODEABSENCE=""
    END

    IF W_ABSENCEMOIS="VRAI" THEN

      BEGIN CASE
	* MALADIE
        CASE W_CODEABSENCE="01"     
	
	  * Determine le nb jour d'abs.
        GOSUB 300

        W_NBJOURABSMALADIE=W_NBJOURABS

        * RECUPERATION ATT 17 DE CONV. COL
        READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,W_CODECONVENTION ELSE
           PRINT "PAS DE CONVENTION"
           STOP
        END		

        IF ENR_CONVENTIONCOL<17><>"" THEN
            W_NBSUSPENSION=ENR_CONVENTIONCOL<17>*100
        END ELSE
            W_NBSUSPENSION=""
        END

        IF W_TOTALJRSABSMALADIE=0 THEN
           GOSUB 302
           W_CUMULJOURMALADIE=W_CUMULMALADIE
        END

        W_TOTALJRSABSMALADIE=W_TOTALJRSABSMALADIE+W_NBJOURABSMALADIE
        W_CUMULJOURMALADIE=W_CUMULJOURMALADIE+W_NBJOURABSMALADIE

        IF W_CUMULJOURMALADIE <= W_NBSUSPENSION THEN

           * On maintient les droits de la personne
           GOSUB 301	

           * CALCUL SALAIRE DE REFERENCE
           K=1
           LOOP
           UNTIL ENR_ABSENCESAIDANT<17,K>=W_CODECONTRAT OR ENR_ABSENCESAIDANT<17,K>="" DO
              K=K+1
           REPEAT

           * SI PASSAGE A L'EURO + ABS COMMENCE AVANT DATE BUTOIR
           * ALORS CONVERSION SALAIRE REFERENCE EN EUROS
           IF W_PASSAGEEURO=1 AND (INT(W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7])<INT(ENR_CONSTANTESPAIE<9>)) THEN
              ENR_ABSENCESAIDANT<14,K>=INT((ENR_ABSENCESAIDANT<14,K>/W_EURO)+1/2)
           END

           W_SALREFHRES=(ENR_ABSENCESAIDANT<15,K>/W_NbJourMois)*(W_NBJOURABSMALADIE)
           W_SALREFMONT=(ENR_ABSENCESAIDANT<14,K>/W_NbJourMois)*(W_NBJOURABSMALADIE)

           * PRISE DES 10 %
           W_SALREFHRES=INT(W_SALREFHRES*10/100 + 1/2)
           W_SALREFMONT=INT(W_SALREFMONT*10/100 + 1/2)

           ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_SALREFHRES
           ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_SALREFMONT
           IF W_PERIODE#PERREFCONGDEPART THEN W_JRSMAINTIENCONGES=W_JRSMAINTIENCONGES+W_NBJOURABSMALADIE

        END ELSE
           W_NBJOURINDEM=W_NBSUSPENSION - (W_CUMULJOURMALADIE - W_NBJOURABSMALADIE)

           IF W_NBJOURINDEM > 0 THEN
              * A Indemnise
              W_NBJOURABS=W_NBJOURINDEM

              GOSUB 301

              * CALCUL SALAIRE DE REFERENCE
              K=1
              LOOP
              UNTIL ENR_ABSENCESAIDANT<17,K>=W_CODECONTRAT OR ENR_ABSENCESAIDANT<17,K>="" DO
                 K=K+1
              REPEAT
		
              * SI PASSAGE A L'EURO + ABS COMMENCE AVANT DATE BUTOIR
              * ALORS CONVERSION SALAIRE REFERENCE EN EUROS
              IF W_PASSAGEEURO=1 AND (INT(W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7])<INT(ENR_CONSTANTESPAIE<9>)) THEN
                 ENR_ABSENCESAIDANT<14,K>=INT((ENR_ABSENCESAIDANT<14,K>/W_EURO)+1/2)
              END

              W_SALREFHRES=(ENR_ABSENCESAIDANT<15,K>/W_NbJourMois)*(W_NBJOURABS)
              W_SALREFMONT=(ENR_ABSENCESAIDANT<14,K>/W_NbJourMois)*(W_NBJOURABS)

              * PRISE DES 10 %
              W_SALREFHRES=INT(W_SALREFHRES*10/100 + 1/2)
              W_SALREFMONT=INT(W_SALREFMONT*10/100 + 1/2)

              ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_SALREFHRES
              ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_SALREFMONT
              W_JRSMAINTIENCONGES=W_JRSMAINTIENCONGES+W_NBJOURABS
              W_NBJOURNONINDEM=W_NBJOURABSMALADIE - W_NBJOURINDEM
              IF W_NBJOURNONINDEM > 0 THEN
                 W_NBJOURABS=W_NBJOURNONINDEM
                 GOSUB 301
                 W_TOTNBJOURCONGES=W_TOTNBJOURCONGES + W_NBJOURCONGES
                 ENR_CONTRAT<70>=ENR_CONTRAT<70>+W_NBJOURNONINDEM
              END

           END ELSE
              GOSUB 301              
              W_TOTNBJOURCONGES=W_TOTNBJOURCONGES + W_NBJOURCONGES
              ENR_CONTRAT<70>=ENR_CONTRAT<70>+W_NBJOURABSMALADIE
           END

        END
			
         * CONGES SANS SOLDE OU PARENTAL
      CASE W_CODEABSENCE="12" OR W_CODEABSENCE="13" OR W_CODEABSENCE="22" OR W_CODEABSENCE="23"    
		
         GOSUB 300

         GOSUB 301

         W_TOTNBJOURCONGES=W_TOTNBJOURCONGES + W_NBJOURCONGES

         IF W_CODEABSENCE="12" OR W_CODEABSENCE="22" OR W_CODEABSENCE="23" THEN   
            ENR_CONTRAT<70>=ENR_CONTRAT<70>+W_NBJOURABS
         END ELSE
            ENR_CONTRAT<70>=ENR_CONTRAT<70> + W_NBJOURABS / 2
         END

      CASE 1 

         GOSUB 300

         GOSUB 301

         W_SALREFHRES=0
         W_SALREFMONT=0

         * CALCUL SALAIRE DE REFERENCE
         K=1
         LOOP
         UNTIL ENR_ABSENCESAIDANT<17,K>=W_CODECONTRAT OR ENR_ABSENCESAIDANT<17,K>="" DO
            K=K+1
         REPEAT

         * SI PASSAGE A L'EURO + ABS COMMENCE AVANT DATE BUTOIR
         * ALORS CONVERSION SALAIRE REFERENCE EN EUROS
         IF W_PASSAGEEURO=1 AND (INT(W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7])<INT(ENR_CONSTANTESPAIE<9>)) THEN
            ENR_ABSENCESAIDANT<14,K>=INT((ENR_ABSENCESAIDANT<14,K>/W_EURO)+1/2)
         END

         W_SALREFHRES=(ENR_ABSENCESAIDANT<15,K>/W_NbJourMois)*(W_NBJOURABS)
         W_SALREFMONT=(ENR_ABSENCESAIDANT<14,K>/W_NbJourMois)*(W_NBJOURABS)

         * PRISE DES 10 %
         W_SALREFHRES=INT((W_SALREFHRES*10/100)+1/2)
         W_SALREFMONT=INT((W_SALREFMONT*10/100)+1/2)

         ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_SALREFHRES
         ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_SALREFMONT
          
      END CASE       
   END
RETURN	 

*********************************************************
* CALCUL DU NOMBRE DE JOURS D'ABSENCES (HORS MALADIE)

300 * 

    * DEBUT ABS >= DEBUT MOIS
    IF CLE[8,LEN(CLE)-7]>=W_DEBUTPERIODE THEN
    * FIN ABSENCES <= FIN MOIS
	IF ENR_ABSENCESAIDANT<2><=W_FINPERIODE THEN
  	    W_NBJOURABS=ENR_ABSENCESAIDANT<2>-CLE[8,LEN(CLE)-7]+1
	END ELSE
  	    W_NBJOURABS=W_FINPERIODE-CLE[8,LEN(CLE)-7]+1
	END
    END ELSE
	* FIN ABSENCES <= FIN MOIS
	IF ENR_ABSENCESAIDANT<2><=W_FINPERIODE THEN
  	    W_NBJOURABS=ENR_ABSENCESAIDANT<2>-W_DEBUTPERIODE+1
	END ELSE
  	    W_NBJOURABS=W_FINPERIODE-W_DEBUTPERIODE+1
	END
    END
    W_NBJOURABS=W_NBJOURABS*100

    * DIMINUTION DU NOMBRE DE JOURS SI DEMI-JOURNEE
    IF ENR_ABSENCESAIDANT<1>=2 THEN W_NBJOURABS=W_NBJOURABS-50
    IF ENR_ABSENCESAIDANT<3>=1 THEN W_NBJOURABS=W_NBJOURABS-50

RETURN

*********************************************************
* CALCUL DES DROITS AUX CONGES (TYPE 12 OU 13)

301 *

    * CALCUL AU PRORATA DES JOURS DE CONGES
    W_NBJOURCONGES=250*W_NBJOURABS/W_NbJourMois
    W_NBJOURCONGES=INT(W_NBJOURCONGES+1/2)

RETURN

*********************************************************
* CALCUL DU NOMBRE CUMULE DE JOURS D'ABSENCES (JUIN->MAI)
* OU JANVIER->DECEMBRE SI ATT.28 CONVENTIONCOL = 1

302 *
    W_CUMULMALADIE=0
    W_REQMALADIEVIDE="FAUX"
    IF ENR_CONVENTIONCOL<28>="0" OR ENR_CONVENTIONCOL<28>="" THEN
      IF W_PERIODE[5,2]>="06" THEN
        W_DEBUTANNEE=ICONV("01/06/":W_PERIODE[1,4],"D4/")
      END ELSE
        W_DEBUTANNEE=ICONV("01/06/":W_PERIODE[1,4]-1,"D4/")
      END
    END ELSE
        W_DEBUTANNEE=ICONV("01/01/":W_PERIODE[1,4],"D4/")
    END
    W_PERIODECOURS=W_DEBUTPERIODE-1   

    IF W_DEBUTANNEE#W_DEBUTPERIODE THEN
      EXECUTE 'TSELECT ABSENCESAIDANT AVEC CodAbsAidant = "':W_CODEAIDANT:']" AND AVEC NumMotifAidant = "01" AND AVEC 2 >= "':W_DEBUTANNEE:'" OR = "" AND AVEC DebAbsAidant <= "':W_PERIODECOURS:'" PAR DebAbsAidant'
      EXECUTE "SAUVE-LISTE LISTEMALADIEAIDANT"
      EXECUTE "LISTE LISTEMALADIEAIDANT" CAPTURING MSG RETURNING MSGCODE
      IF MSGCODE<1>=209 THEN W_REQMALADIEVIDE="VRAI"
      IF W_REQMALADIEVIDE="FAUX" THEN
         SELECT F.ABSENCESAIDANT TO LISTEMALADIEAIDANT
         LOOP 
	      READNEXT CLECUM FROM LISTEMALADIEAIDANT ELSE
	          W_REQMALADIEVIDE="VRAI"
     	      END
	      UNTIL W_REQMALADIEVIDE="VRAI" DO
              READ ENR_ABSENCESAIDANTCUM FROM F.ABSENCESAIDANT,CLECUM ELSE ENR_ABSENCESAIDANTCUM=""
	      GOSUB 303
    	      * CUMUL DU NOMBRE DE JOURS DE MALADIE SUR L'ANNEE
	      W_CUMULMALADIE=W_CUMULMALADIE+W_NBJOURABSCUMUL              
	 REPEAT
      END ELSE 
	 W_CUMULMALADIE=0
      END
    END ELSE
      W_CUMULMALADIE=0
    END
 
RETURN

*********************************************************
* CALCUL DU NOMBRE DE JOURS D'ABSENCES MALADIE

303 * 
    * DEBUT ABS <= 01/06 OU <= 01/01
    W_NBJOURABSCUMUL=0
    IF CLECUM[8,LEN(CLECUM)-7]<=W_DEBUTANNEE THEN
        * FIN ABSENCES <= FIN MOIS
      IF ENR_ABSENCESAIDANTCUM<2>>=W_DEBUTANNEE THEN
	IF ENR_ABSENCESAIDANTCUM<2><=W_PERIODECOURS THEN
            W_NBJOURABSCUMUL=ENR_ABSENCESAIDANTCUM<2>-W_DEBUTANNEE+1
	END ELSE
            W_NBJOURABSCUMUL=W_PERIODECOURS-W_DEBUTANNEE+1
	END
      END
    END ELSE
	* FIN ABSENCES <= FIN MOIS
      IF CLECUM[8,LEN(CLECUM)-7]<=W_PERIODECOURS THEN
	IF ENR_ABSENCESAIDANTCUM<2><=W_PERIODECOURS THEN
  	    W_NBJOURABSCUMUL=ENR_ABSENCESAIDANTCUM<2>-CLECUM[8,LEN(CLECUM)-7]+1
	END ELSE
  	    W_NBJOURABSCUMUL=W_PERIODECOURS-CLECUM[8,LEN(CLECUM)-7]+1
	END
      END
    END
    W_NBJOURABSCUMUL=W_NBJOURABSCUMUL*100

    * DIMINUTION DU NOMBRE DE JOURS SI DEMI-JOURNEE
    IF ENR_ABSENCESAIDANTCUM<1>=2 THEN W_NBJOURABSCUMUL=W_NBJOURABSCUMUL-50
    IF ENR_ABSENCESAIDANTCUM<3>=1 THEN W_NBJOURABSCUMUL=W_NBJOURABSCUMUL-50

RETURN

**********
* SELECTION DES CONTRATS PREVOYANCES
304

W_TabPrev=""
W_TabPrev<1>="807"
W_TabPrev<2>="808"
W_ListeCONTRATSPREV=""
EXECUTE 'SSELECT CONTRATSPREV'
EXECUTE 'SAUVE-LISTE W_ListeCONTRATSPREV'
EXECUTE "LISTE W_ListeCONTRATSPREV" RETURNING MSGCODE
IF MSGCODE<1> # 209 THEN
   SELECT F.CONTRATSPREV TO W_ListeCONTRATSPREV
   W_FiniPrev = "FAUX"
   LOOP
      READNEXT W_ClePrev FROM W_ListeCONTRATSPREV ELSE W_FiniPrev="VRAI"
   WHILE W_FiniPrev = "FAUX" DO
      READ ENR_CONTRATSPREV FROM F.CONTRATSPREV,W_ClePrev THEN

         W_CodeRubPrev=ENR_CONTRATSPREV<41>
         GOSUB 305

         W_CodeRubPrev=ENR_CONTRATSPREV<42>
         GOSUB 305
      END
   REPEAT
END
W_CountRubPrev=DCOUNT(W_TabPrev,CHAR(254))
EXECUTE "EFFACER-LISTE W_ListeCONTRATSPREV"
RETURN

*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS
305
   IF W_CodeRubPrev # "" THEN
      iPrev=1
      W_TrouvePrev="FAUX"
      LOOP
      WHILE W_TabPrev<iPrev> # "" AND W_TrouvePrev="FAUX" DO
         IF W_CodeRubPrev = W_TabPrev<iPrev> THEN
            W_TrouvePrev="VRAI"
         END
         iPrev=iPrev+1
      REPEAT
      IF W_TrouvePrev="FAUX" THEN
         W_TabPrev<iPrev>=W_CodeRubPrev
      END
   END
RETURN