*********************************************************
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
*********************************************************
* 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"     
	
	  * CALCUL DU NOMBRE DE JOUR AUTORISE PAR CONVENTION
	  GOSUB 300

	  W_NBJOURABSMALADIE=W_NBJOURABS

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

          IF ENR_CONVENTIONCOL<17><>"" THEN
            W_NBSUSPENSION=ENR_CONVENTIONCOL<17>*100
	  END ELSE
	    W_NBSUSPENSION=""
	    GOSUB 310
	  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
            GOSUB 320	

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

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

            * PRISE DES 10 %
            W_SALREFHRES=W_SALREFHRES*10/100
	    W_SALREFMONT=W_SALREFMONT*10/100

	    IF W_AFFECTCONGESMOIS="FAUX" THEN
	      * RECUPERATION ATTRIBUT 6+7 DETAILCALCUL
 	      READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	        ENR_DETAILCALCUL=""
	        ENR_DETAILCALCUL<6>=0
	        ENR_DETAILCALCUL<7>=0
	        W_NBJOURCONGES=0
	      END

              ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
              ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_VALEURHEURESJOUR+W_SALREFHRES
              ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_VALEURMONTJOUR+W_SALREFMONT
              W_AFFECTCONGESMOIS="VRAI"
            END ELSE
	      ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_SALREFHRES
	      ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_SALREFMONT
            END
            
 	    ENR_CONTRAT<45>=INT(ENR_CONTRAT<45>+1/2)
            ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)
            WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT		
	  END ELSE
	    * CALCUL DU NOMBRE DE JOURS A INDEMNISER
	    W_NBJOURINDEM=W_NBSUSPENSION-W_CUMULJOURMALADIE

	    IF W_CUMULJOURMALADIE-W_NBSUSPENSION>=0 THEN
  	        W_NBJOURNONINDEM=W_NBJOURABSMALADIE ;*W_CUMULJOURMALADIE-W_NBSUSPENSION
            END ELSE
                W_NBJOURNONINDEM=0
            END

	    IF W_NBJOURINDEM<0 THEN
	      W_NBJOURINDEM=W_NBJOURINDEM+W_NBJOURABSMALADIE
              W_NBJOURABS=W_NBJOURNONINDEM	
	      W_NBJOURABS2=W_NBJOURABS/100

              GOSUB 301

	      * ENLEVE LES JRS NON INDEMNISES
	      IF W_PERIODEFACT[5,2]="04" OR W_PERIODEFACT[5,2]="06" OR W_PERIODEFACT[5,2]="09" OR W_PERIODEFACT[5,2]="11" THEN
	           IF W_NBJOURABS2<30 THEN ENR_CONTRAT<44>=ENR_CONTRAT<44>-W_NBJOURCONGES
	      END ELSE
		   IF W_PERIODEFACT[5,2]="02" THEN
	               IF W_NBJOURABS2<28 THEN ENR_CONTRAT<44>=ENR_CONTRAT<44>-W_NBJOURCONGES
		   END ELSE
	               IF W_NBJOURABS2<31 THEN ENR_CONTRAT<44>=ENR_CONTRAT<44>-W_NBJOURCONGES
		   END
	      END
	    END
            ENR_CONTRAT<70>=ENR_CONTRAT<70>+INT(W_NBJOURNONINDEM/100)

	    IF W_NBJOURINDEM>0 THEN
	      W_NBJOURABS=W_NBJOURINDEM

              GOSUB 320

              * CALCUL SALAIRE DE REFERENCE
              K=1
	      LOOP
	        UNTIL ENR_ABSENCESAIDANT<17,K>=W_CODECONTRAT OR ENR_ABSENCESAIDANT<17,K>="" DO
	        K=K+1
	      REPEAT
		
  	      W_SALREFHRES=(ENR_ABSENCESAIDANT<15,K>/30)*(W_NBJOURABS/100)
  	      W_SALREFMONT=(ENR_ABSENCESAIDANT<14,K>/30)*(W_NBJOURABS/100)

              * PRISE DES 10 %
              W_SALREFHRES=W_SALREFHRES*10/100
	      W_SALREFMONT=W_SALREFMONT*10/100

              IF W_AFFECTCONGESMOIS="FAUX" THEN
                ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
                ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_VALEURHEURESJOUR+W_SALREFHRES
	        ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_VALEURMONTJOUR+W_SALREFMONT
                W_AFFECTCONGESMOIS="VRAI"
              END ELSE
                ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_SALREFHRES
	        ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_SALREFMONT
              END
	    END ELSE
		GOSUB 320

		IF W_AFFECTCONGESMOIS="FAUX" THEN
	         IF W_PERIODEFACT[5,2]="04" OR W_PERIODEFACT[5,2]="06" OR W_PERIODEFACT[5,2]="09" OR W_PERIODEFACT[5,2]="11" THEN
	           IF W_NBJOURABS2<30 THEN ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
	         END ELSE
		   IF W_PERIODEFACT[5,2]="02" THEN
	               IF W_NBJOURABS2<28 THEN ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
		   END ELSE
	               IF W_NBJOURABS2<31 THEN ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
		   END
	         END
		 W_AFFECTCONGESMOIS="VRAI"
		END
                ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_VALEURHEURESJOUR
	        ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_VALEURMONTJOUR
	    END
            ENR_CONTRAT<45>=INT(ENR_CONTRAT<45>+1/2)
            ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)

            WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT		
          END
			
          * CONGES SANS SOLDE OU PARENTAL
        CASE W_CODEABSENCE="12" OR W_CODEABSENCE="13"    
		
	  GOSUB 300

          GOSUB 301

          * LECTURE DU CONTRAT EN COURS
          READ ENR_CONTRAT FROM F.CONTRAT,W_CODECONTRAT ELSE
            STOP
          END

	  IF W_CODEABSENCE="12" THEN
  	    * ENLEVE LE NBRE DE JOURS POUR SANS SOLDE
            ENR_CONTRAT<44>=ENR_CONTRAT<44>-W_NBJOURCONGES
            ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_HEURESABSENCES
            ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_MONTANTABSENCES
            W_AFFECTCONGESMOIS="VRAI"
	  END

          IF W_CODEABSENCE="12" THEN   
            ENR_CONTRAT<70>=ENR_CONTRAT<70>+INT(W_NBJOURABS/100)
          END ELSE
            ENR_CONTRAT<70>=ENR_CONTRAT<70>+INT((W_NBJOURABS*50/100)/100)
	  END

          ENR_CONTRAT<45>=INT(ENR_CONTRAT<45>+1/2)
          ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)
          WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT
	  
	  * AUTRES SAUF MALADIE <> 01,12,13
        CASE W_CODEABSENCE<>"01" OR W_CODEABSENCE<>"12" OR W_CODEABSENCE<>"13" 
          GOSUB 300

          GOSUB 320

          W_SALREFHRES=0
          W_SALREFMONT=0
	  IF W_CODEABSENCE="02" OR W_CODEABSENCE="04" OR W_CODEABSENCE="05" OR W_CODEABSENCE="06" THEN
  	    * CALCUL SALAIRE DE REFERENCE
  	    K=1
	    LOOP
	      UNTIL ENR_ABSENCESAIDANT<17,K>=W_CODECONTRAT OR ENR_ABSENCESAIDANT<17,K>="" DO
	      K=K+1
	    REPEAT

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

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

            W_VALEURHEURESJOUR=ENR_DETAILCALCUL<6>
	    W_VALEURMONTJOUR=ENR_DETAILCALCUL<7>
	    W_VALEURHEURESJOUR=W_VALEURHEURESJOUR*10/100
	    W_VALEURMONTJOUR=W_VALEURMONTJOUR*10/100
          END
           
          IF W_AFFECTCONGESMOIS="FAUX" THEN
            IF W_VALEURHEURESJOUR=0 THEN W_VALEURHEURESJOUR=ENR_DETAILCALCUL<6>*10/100
	    IF W_VALEURMONTJOUR=0 THEN W_VALEURMONTJOUR=ENR_DETAILCALCUL<7>*10/100

	    ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
            ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_VALEURHEURESJOUR+W_SALREFHRES
            ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_VALEURMONTJOUR+W_SALREFMONT
            W_AFFECTCONGESMOIS="VRAI"
          END ELSE
            ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_SALREFHRES
            ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_SALREFMONT
          END

          ENR_CONTRAT<45>=INT(ENR_CONTRAT<45>+1/2)
          ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)
          WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT		
      END CASE       
    END ELSE
      IF W_AFFECTCONGESMOIS="FAUX" AND (W_CODEABSENCE>="07" OR W_CODEABSENCE="0" OR W_CODEABSENCE="") THEN
        IF W_DEBUTCONTRAT<W_DEBUTPERIODE THEN
          W_NBJOURCONGES=250
        END ELSE
          * CALCUL AU PRORATA DES JOURS DE CONGES
          W_NBJOURPRESENT=W_DEBUTCONTRAT-W_DEBUTPERIODE
	  W_NBJOURPRESENT=W_NBJOURPRESENT*100
          W_NBJOURPRESENT=3000-W_NBJOURPRESENT
          W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
          W_NBJOURCONGES=W_NBJOURCONGES+1/2
          W_NBJOURCONGES=INT(W_NBJOURCONGES)
	END

        * RECUPERATION ATTRIBUT 6+7 DETAILCALCUL
        READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
	  ENR_DETAILCALCUL=""
          ENR_DETAILCALCUL<6>=0
	  ENR_DETAILCALCUL<7>=0
        END

        W_VALEURHEURESJOUR=ENR_DETAILCALCUL<6>*10/100
        W_VALEURMONTJOUR=ENR_DETAILCALCUL<7>*10/100

        ENR_CONTRAT<44>=ENR_CONTRAT<44>+W_NBJOURCONGES
        ENR_CONTRAT<45>=ENR_CONTRAT<45>+W_VALEURHEURESJOUR
	ENR_CONTRAT<46>=ENR_CONTRAT<46>+W_VALEURMONTJOUR

        ENR_CONTRAT<45>=INT(ENR_CONTRAT<45>+1/2)
        ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)

        WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT
        W_AFFECTCONGESMOIS="VRAI"		
      END
    END
RETURN	 


*********************************************************
*********************************************************
