* LISTER DETAILCALCUL AVEC @ID >= "[200106" AND AVEC @ID =< "[200205" AND AVEC @ID = "00054015]" 6 7
* 50  -> MAJ DES CONGES PAYES
* 60  -> RECHERCHE DU NOMBRE DE JOURS DE CONGES
* 70  -> MAJ DES COMPTEURS DE CONGES
* 100 -> MAJ DES CONGES EN-COURS D'ACQUISITION
* 200 -> GESTION DES ABSENCES
* 300 -> CALCUL DU NOMBRE DE JOURS D'ABSENCES (HORS MALADIE)
* 301 -> CALCUL DES DROITS AUX CONGES (TYPE 12 OU 13)
* 302 -> CALCUL DU NOMBRE CUMULE DE JOURS D'ABSENCES (JUIN->MAI)
* 303 -> CALCUL DU NOMBRE DE JOURS D'ABSENCES MALADIE
* 304 -> SELECTION CONTRATSPREV POUR CONNAITRE LES COMPLEMENTS MALADIE/ACCIDENT
* 305 -> CREATION DU TABLEAU DES RUB MALADIE ET ACCIDENT A OTER DU BS
* 500 -> GESTION DE BASCULEMENT DES COMPTEURS
* 600 -> GESTION DE BASCULEMENT DES COMPTEURS DE CONGES PAYES
* 700 -> GESTION DE BASCULEMENT DES COMPTEURS DE CONGES ANCIENNETE
* 800 -> GESTION DE BASCULEMENT DES COMPTEURS DE CONGES FRACTIONNEMENT

* Ouvertures des fichiers
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","ACTIVITES" TO F.ACTIVITE ELSE PRINT "ACTIVITE"
OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE PRINT "ASSO"
OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE PRINT "ABS" 
OPEN "","CONSTANTESPAIE" TO F.CONSTANTESPAIE ELSE PRINT "CONSTANTESPAIE"
OPEN "","CONTRAT" TO F.CONTRAT ELSE PRINT "OUVERTURE CONTRAT" ;* en criture
OPEN "","CONTRATSPREV" TO F.CONTRATSPREV ELSE PRINT "OUVERTURE CONTRATSPREV"
OPEN "","CONVENTIONCOL" TO F.CONVENTIONCOL ELSE PRINT "CONVENTION"
OPEN "","DETAILADMIN" TO F.DETAILADMIN ELSE PRINT "DETAILADMIN"
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE PRINT "OUVERTURE DETAILCALCUL"
OPEN "","DETAILINTER" TO F.DETAILINTER ELSE PRINT "DETAILINTER"
OPEN "","DETAILMANDAT" TO F.DETAILMANDAT ELSE PRINT "DETAILINTER"
OPEN "","DETAILPREST" TO F.DETAILPREST ELSE PRINT "DETAILPREST"
OPEN "","ETABLISSEMENT" TO F.ETABLISSEMENT ELSE PRINT "ETAB"
OPEN "","GRILLESCC" TO F.GRILLESCC ELSE PRINT "GRILLESCC"

ENR_CONTRATEMP=""

*********************************************************
* Recuperation des arguments

PRINT "Association (3N) :":
INPUT W_ASSO

PRINT "Type Activit (P/M/I) : ":
INPUT W_TYPEACT

PRINT "Priode Debut (AAAAMM) : ":
INPUT W_PERIODEFACTDEB

PRINT "Priode Fin (AAAAMM) : ":
INPUT W_PERIODEFACTFIN

PRINT "Code Aidant (5N) ou * pour tous : ":
INPUT W_CODEAIDANT

PRINT "Mise a jour CONTRAT (O/N) : ":
INPUT W_Maj


W_DateDebMois="01/":W_PERIODEFACTDEB[5,2]:"/":W_PERIODEFACTDEB[1,4]
W_DateDebMois=ICONV(W_DateDebMois,"D4/")

W_DateFinMois="01/":W_PERIODEFACTFIN[5,2]:"/":W_PERIODEFACTFIN[1,4]
W_DateFinMois=ICONV(W_DateFinMois,"D4/")
W_DateFinMois=W_DateFinMois+32
W_DateFinMois=OCONV(W_DateFinMois,"D4/")
W_DateFinMois="01":W_DateFinMois[3,8]
W_DateFinMois=ICONV(W_DateFinMois,"D4/")-1

******
  W_HORAIRETP=""
  W_HORAIREHEBDO=""
  W_ETABLISSEMENT=""
  W_HEURESARRET=0
  W_RUBAFFECT=""
  W_CODEABSENCE=""
  W_NBJOURABS2=0

* INITIALISE LES LISTES A VIDE
W_ListeCONTRATSPREV=""
LISTEABSENCESAIDANT=""
LISTEMALADIEAIDANT=""
REQUETECONTRAT=""
REQUETEDETAIL=""
iErr=0

* SELECTION CONTRATSPREV POUR CONNAITRE LES COMPLEMENTS MALADIE/ACCIDENT
GOSUB 304

EXECUTE 'COMO ON CONGE'

IF W_CODEAIDANT = "*" THEN
   W_RequeteContrat='SSELECT CONTRAT AVEC 2 = "':W_ASSO:'" AND AVEC TypeActivite = "':W_TYPEACT:'" AND AVEC 65 <> "O" AND AVEC 7 <= "':W_DateFinMois:'" AND AVEC 8 > "':W_DateFinMois:'" OR = "" PAR 3 PAR @ID'
END ELSE
   W_RequeteContrat='SSELECT CONTRAT AVEC @ID = "':W_CODEAIDANT:']" AND AVEC  2 = "':W_ASSO:'" AND AVEC TypeActivite = "':W_TYPEACT:'" AND AVEC 65 <> "O" AND AVEC 7 <= "':W_DateFinMois:'" AND AVEC 8 > "':W_DateFinMois:'" OR = "" PAR 3 PAR @ID'
END

   EXECUTE W_RequeteContrat
   EXECUTE 'SAUVE-LISTE REQUETECONTRAT'
   EXECUTE 'LISTE REQUETECONTRAT' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1>=209 THEN
        PRINT "Rien selectionn" 
        STOP
   END

   SELECT F.CONTRAT TO REQUETECONTRAT

READ ENR_CONSTANTESPAIE FROM F.CONSTANTESPAIE,"1" ELSE STOP

******

W_Fini="FAUX"
LOOP
   READNEXT W_CleContrat FROM REQUETECONTRAT ELSE W_Fini="VRAI"

WHILE W_Fini="FAUX" DO

   W_CODEAIDANT=W_CleContrat[1,5]

   READ ENR_CONTRAT FROM F.CONTRAT,W_CleContrat ELSE PRINT "PAS DE CONTRAT = VIDE AVANT" 

      ENR_CONTRATEMP=ENR_CONTRAT
      * Conge Paye
      ENR_CONTRATEMP<38>=0
      ENR_CONTRATEMP<39>=0
      * Conge Fractionnement
      ENR_CONTRATEMP<40>=0
      ENR_CONTRATEMP<41>=0
      * valeur jour ouvrable
      ENR_CONTRATEMP<42>=0
      ENR_CONTRATEMP<43>=0
      * En cours d'acquisition
      ENR_CONTRATEMP<44>=0
      ENR_CONTRATEMP<45>=0
      ENR_CONTRATEMP<46>=0
      * Conge Anciennete
      ENR_CONTRATEMP<47>=0
      ENR_CONTRATEMP<48>=0
      ENR_CONTRATEMP<70>=0
      W_Passe1="EURO"

   W_PERIODECONTRATDEB=OCONV(ENR_CONTRAT<7>,"D4/")
   W_PERIODECONTRATDEB=W_PERIODECONTRATDEB[7,4]:W_PERIODECONTRATDEB[4,2]

   IF W_PERIODECONTRATDEB > W_PERIODEFACTDEB THEN
      W_PERIODEDEB=W_PERIODECONTRATDEB
   END ELSE
      W_PERIODEDEB=W_PERIODEFACTDEB
   END

   W_PERIODECONTRATFIN=""
   IF ENR_CONTRAT<8> # "" THEN
      W_PERIODECONTRATFIN=OCONV(ENR_CONTRAT<8>,"D4/")
      W_PERIODECONTRATFIN=W_PERIODECONTRATFIN[7,4]:W_PERIODECONTRATFIN[4,2]

      IF W_PERIODECONTRATFIN > W_PERIODEFACTFIN THEN
         W_PERIODEFIN=W_PERIODEFACTFIN
      END ELSE
         W_PERIODEFIN=W_PERIODECONTRATFIN
      END
   END ELSE
      W_PERIODEFIN=W_PERIODEFACTFIN
   END

   LOOP
   WHILE W_PERIODEDEB <= W_PERIODEFIN DO
      IF W_PERIODEDEB[5,2]=13 THEN
         W_PERIODEDEB=W_PERIODEDEB[1,4]+1:"01"
      END

      W_PERIODEFACT=W_PERIODEDEB
      W_DebMois=ICONV("01/":W_PERIODEFACT[5,2]:"/":W_PERIODEFACT[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_AFFECTCONGESMOIS="FAUX"

      GOSUB 1

       W_PERIODEDEB=W_PERIODEDEB+1
    REPEAT

    IF ENR_CONTRATEMP<38> # ENR_CONTRAT<38> OR ENR_CONTRATEMP<42> # ENR_CONTRAT<42> OR ENR_CONTRATEMP<43> # ENR_CONTRAT<43> THEN

       W_JourRestant=ENR_CONTRATEMP<38> * 100 - (ENR_CONTRAT<38> * 100 - ENR_CONTRAT<39>)
       IF W_JourRestant < 0 THEN
          W_JourRestant=0
       END       
       PRINT SPACE(40):W_CleContrat:"   ":W_PERIODECONTRATDEB:"   ":
       IF W_PERIODECONTRATFIN # "" THEN
          PRINT W_PERIODECONTRATFIN
       END ELSE
          PRINT
       END
       PRINT SPACE(40):"CALCULE"
       PRINT SPACE(46):"PERIODE :":W_PERIODEFACT
       PRINT SPACE(46):"NB SUSP :":ENR_CONTRATEMP<70>
       PRINT SPACE(46):"CP :":ENR_CONTRATEMP<38>:"   ":W_JourRestant
       PRINT SPACE(46):"CF :":ENR_CONTRATEMP<40>:"   ":ENR_CONTRATEMP<41>
       PRINT SPACE(46):"CA :":ENR_CONTRATEMP<47>:"   ":ENR_CONTRATEMP<48>
       PRINT SPACE(46):"CP EN ACQUISIT :":ENR_CONTRATEMP<44>:"   ":ENR_CONTRATEMP<45>:"   ":ENR_CONTRATEMP<46>
       PRINT SPACE(46):"JOUR EN H :":ENR_CONTRATEMP<42>:" JOUR EN M  ":ENR_CONTRATEMP<43>
       PRINT
       PRINT SPACE(40):"DANS CONTRAT"
       PRINT SPACE(46):"CP :":ENR_CONTRAT<38>:"   ":ENR_CONTRAT<39>
       PRINT SPACE(46):"JOUR EN H :":ENR_CONTRAT<42>:" JOUR EN M  ":ENR_CONTRAT<43>

       IF W_Maj ="O" THEN
          ENR_CONTRAT<39>=W_JourRestant
          ENR_CONTRAT<38>=ENR_CONTRATEMP<38>
          ENR_CONTRAT<42>=ENR_CONTRATEMP<42>
          ENR_CONTRAT<43>=ENR_CONTRATEMP<43>
          WRITE ENR_CONTRAT ON F.CONTRAT,W_CleContrat
       END

       iErr=iErr+1
    END  

REPEAT

PRINT "iErr :":iErr

EXECUTE 'COMO OFF'

EXECUTE "EFFACER-LISTE LISTEABSENCESAIDANT"
EXECUTE "EFFACER-LISTE LISTEMALADIEAIDANT"
EXECUTE "EFFACER-LISTE REQUETECONTRAT"

STOP
*********************************************************
* Prog. Principal
1

W_EURO=0

* REGARDE SI TRAITEMENT EN EUROS
IF INT(ICONV("01/":W_PERIODEFACT[5,2]:"/":W_PERIODEFACT[1,4],"D4/"))>=INT(ENR_CONSTANTESPAIE<9>) THEN
   W_PASSAGEEURO=1
   W_EURO="6,55957"
   
END ELSE
   W_PASSAGEEURO=0
END
	

      IF W_Passe1="EURO" AND W_PASSAGEEURO=1 THEN
         ENR_CONTRATEMP<46>=INT(ENR_CONTRATEMP<46> * 100000 / 655957 + 1/2)
         W_Passe1="FINI"
      END

	* A FAIRE A LA FIN POUR JUSTIFIER LA CLOTURE
	IF ENR_CONTRATEMP<81><>"" THEN
          ENR_CONTRATEMP<63>=ENR_CONTRATEMP<81>
          ENR_CONTRATEMP<81>=""
      END

      READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,ENR_CONTRATEMP<1> ELSE PRINT "PAS DE CONV = VIDE AVANT"

      W_PERIODE=W_PERIODEFACT
      W_CODECONTRAT=W_CleContrat
      W_CODECONVENTION=ENR_CONTRATEMP<1>
      W_DEBUTCONTRAT=ENR_CONTRATEMP<7>
      W_DEBUTCONTRATANC=ENR_CONTRATEMP<97>
      W_ASSOCIATION=ENR_CONTRATEMP<2>

      W_JOURCONGESCP=0
      W_JOURCONGESCA=0
      W_JOURCONGESCPS=0
      W_JOURCONGESCF=0
      W_ANCIENCODE=""

	* 50  -> MAJ DES CONGES PAYES
      GOSUB 50

	* 100 -> MAJ DES CONGES EN-COURS D'ACQUISITION
      GOSUB 100

	* 500 -> GESTION DE BASCULEMENT DES COMPTEURS
      GOSUB 500

RETURN

*********************************************************
*********************************************************
* MAJ DES CONGES PAYES

50 *

   W_CLEDETAILCALCUL=W_CODECONTRAT:W_PERIODE

   READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CLEDETAILCALCUL THEN
      * DetailCalcul existe
   END ELSE
      ENR_DETAILCALCUL=""
      ENR_DETAILCALCUL<6>=0
      ENR_DETAILCALCUL<7>=0
	RETURN
   END

   * RECHERCHE DU TYPE DE PERSONNEL (PREST,ADM,MANDAT,INTER)
   IF ENR_CONTRATEMP<6>="A" THEN
	W_TYPEPERSONNEL=1                                      ;* ADMINISTRATIF
   END ELSE
	IF ENR_CONTRATEMP<1>="02" THEN
	     W_TYPEPERSONNEL=2                                 ;* MANDATAIRE
	END ELSE
	     * LECTURE ACTIVITE	 
	     READ ENR_ACTIVITE FROM F.ACTIVITE,ENR_CONTRATEMP<36,1> ELSE
              PRINT "PAS D'ACTIVITE"
		  STOP
	     END
	     IF ENR_ACTIVITE<12>="P" THEN
		  W_TYPEPERSONNEL=3                            ;* PRESTATAIRE

	     END ELSE
		  IF ENR_ACTIVITE<12>="M" THEN
                   PRINT "IMPOSSIBLE D'ARRIVE LA"
		       W_TYPEPERSONNEL=2		       ;* MANDATAIRE
		  END ELSE
		       W_TYPEPERSONNEL=4		       ;* INTERMEDIAIRE
		  END
	     END
	END
   END   

   I=1
   LOOP
	UNTIL ENR_DETAILCALCUL<2,I>="" DO

        * SI RUB. CONGES PAYES OU ANCIENNETE OU POUR SOLDE OU FRACTIONNEMENT
	BEGIN CASE
  	     CASE ENR_DETAILCALCUL<2,I>="802" OR ENR_DETAILCALCUL<2,I>="803" OR ENR_DETAILCALCUL<2,I>="817"
		  IF W_JOURCONGESCP=0 AND W_JOURCONGESCA=0 AND W_JOURCONGESCF=0 THEN 
			GOSUB 60
		  END
	     CASE ENR_DETAILCALCUL<2,I>="804"
		  W_JOURCONGESCPS=1
	END CASE
        I=I+1
   REPEAT

   I=1
   LOOP
	UNTIL ENR_DETAILCALCUL<33,I>="" DO

        * SI RUB. CONGES PAYES OU ANCIENNETE OU POUR SOLDE OU FRACTIONNEMENT
	BEGIN CASE
  	     CASE ENR_DETAILCALCUL<33,I>="802" OR ENR_DETAILCALCUL<33,I>="803" OR ENR_DETAILCALCUL<33,I>="817"
		  IF W_JOURCONGESCP=0 AND W_JOURCONGESCA=0 AND W_JOURCONGESCF=0 THEN
			GOSUB 60
		  END
	     CASE ENR_DETAILCALCUL<33,I>="804"
		  W_JOURCONGESCPS=1
	END CASE
        I=I+1
   REPEAT

   * MAJ DES COMPTEURS
   GOSUB 70

RETURN


*********************************************************
* RECHERCHE DU NOMBRE DE JOURS DE CONGES

60 *

W_JOURCONGESCP=ENR_DETAILCALCUL<47>
W_ANCIENCODE=W_CLEDETAILCALCUL

RETURN

*********************************************************
*********************************************************
* RECHERCHE DU NOMBRE DE JOURS DE CONGES
* Ancien 60
61 *

W_JOURCONGESCP=ENR_DETAILCALCUL<47>
W_ANCIENCODE=W_CLEDETAILCALCUL


   BEGIN CASE 
	CASE W_TYPEPERSONNEL=1
	     READ ENR_DETAILADMIN FROM F.DETAILADMIN,W_CLEDETAILCALCUL ELSE
		  ENR_DETAILADMIN=""
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILADMIN<1,J>="" DO
		       IF ENR_DETAILADMIN<1,J>="802" THEN
			    IF W_JOURCONGESCP<>ENR_DETAILADMIN<6,J> THEN
			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILADMIN<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILADMIN<1,J>="803" THEN
			    IF W_JOURCONGESCA<>ENR_DETAILADMIN<6,J> THEN
			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILADMIN<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILADMIN<1,J>="817" THEN
			    IF W_JOURCONGESCF<>ENR_DETAILADMIN<6,J> THEN
			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILADMIN<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		  J=J+1
	     REPEAT

	CASE W_TYPEPERSONNEL=2
	     READ ENR_DETAILMANDAT FROM F.DETAILMANDAT,W_CLEDETAILCALCUL ELSE
		  ENR_DETAILMANDAT=""
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILMANDAT<1,J>="" DO
		       IF ENR_DETAILMANDAT<1,J>="802" THEN
			    IF W_JOURCONGESCP<>ENR_DETAILMANDAT<6,J> THEN
			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILMANDAT<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILMANDAT<1,J>="803" THEN
			    IF W_JOURCONGESCA<>ENR_DETAILMANDAT<6,J> THEN
			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILMANDAT<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILMANDAT<1,J>="817" THEN
			    IF W_JOURCONGESCF<>ENR_DETAILMANDAT<6,J> THEN
			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILMANDAT<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		  J=J+1
	     REPEAT

	CASE W_TYPEPERSONNEL=3
	     READ ENR_DETAILPREST FROM F.DETAILPREST,W_CLEDETAILCALCUL ELSE
		  ENR_DETAILPREST=""
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILPREST<5,J>="" DO
		       IF ENR_DETAILPREST<5,J>="802" THEN
			    IF W_JOURCONGESCP<>ENR_DETAILPREST<14,J> THEN
			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILPREST<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILPREST<5,J>="803" THEN
			    IF W_JOURCONGESCA<>ENR_DETAILPREST<14,J> THEN
 			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILPREST<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILPREST<5,J>="817" THEN
			    IF W_JOURCONGESCF<>ENR_DETAILPREST<14,J> THEN
 			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILPREST<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		  J=J+1
	     REPEAT

	CASE W_TYPEPERSONNEL=4
	     READ ENR_DETAILINTER FROM F.DETAILINTER,W_CODECONTRAT:W_PERIODE ELSE
		  ENR_DETAILINTER=""
	     END

	     J=1
	     LOOP 
		  UNTIL ENR_DETAILINTER<8,J>="" DO
		       IF ENR_DETAILINTER<8,J>="802" THEN
			    IF W_JOURCONGESCP<>ENR_DETAILINTER<14,J> THEN
 			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILINTER<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILINTER<8,J>="803" THEN
			    IF W_JOURCONGESCA<>ENR_DETAILINTER<14,J> THEN
 			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILINTER<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		       IF ENR_DETAILINTER<8,J>="817" THEN
			    IF W_JOURCONGESCF<>ENR_DETAILINTER<14,J> THEN
 			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILINTER<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
			    END
		       END
		  J=J+1
	     REPEAT

   END CASE
   J=1
RETURN
   
*********************************************************
*********************************************************
* MAJ DES COMPTEURS DE CONGES

70 *

   * SI PAS CONGES PAYES POUR SOLDE
   IF W_JOURCONGESCPS=0 THEN

       * SI MANDATAIRE ALORS CONGES PRIS EN ATT. 47 DE DETAILCALCUL
       IF ENR_CONTRATEMP<1>="02" AND ENR_CONTRATEMP<31>=1 THEN
         * Ecrase Systematiquement La valeur de DETAILMANDAT
	   W_JOURCONGESCP=ENR_DETAILCALCUL<47>
       END

       * CONGES PAYES
       IF ENR_CONTRATEMP<39>-W_JOURCONGESCP >= 0 THEN
           ENR_CONTRATEMP<39>=ENR_CONTRATEMP<39>-W_JOURCONGESCP
       END ELSE
	   * SI PAS ASSEZ DE DROITS

	     * PRISE SUR CONGES FRACTIONNEMENT
	     W_JOURCONGESCP=W_JOURCONGESCP-ENR_CONTRATEMP<39>
           ENR_CONTRATEMP<39>=0

	   IF ENR_CONTRATEMP<41>-W_JOURCONGESCP>=0 THEN	
		ENR_CONTRATEMP<41>=ENR_CONTRATEMP<41>-W_JOURCONGESCP
	   END ELSE

		* PRISE SUR CONGES ANCIENNETE
		W_JOURCONGESCP=W_JOURCONGESCP-ENR_CONTRATEMP<41>
		ENR_CONTRATEMP<41>=0

		IF ENR_CONTRATEMP<48>-W_JOURCONGESCP>=0 THEN
		     ENR_CONTRATEMP<48>=ENR_CONTRATEMP<48>-W_JOURCONGESCP
		END ELSE
		     * PRISE PAR ANTICIPATION
 	  	     ENR_CONTRATEMP<83>=ENR_CONTRATEMP<83>+(W_JOURCONGESCP-ENR_CONTRATEMP<48>)
		     ENR_CONTRATEMP<48>=0
		END
	   END
       END

       * CONGES ANCIENNETE
       IF ENR_CONTRATEMP<48>-W_JOURCONGESCA >= 0 THEN
           ENR_CONTRATEMP<48>=ENR_CONTRATEMP<48>-W_JOURCONGESCA
       END ELSE
	     ENR_CONTRATEMP<83>=ENR_CONTRATEMP<83>+(W_JOURCONGESCA-ENR_CONTRATEMP<48>)
           ENR_CONTRATEMP<48>=0
       END

       * CONGES FRACTIONNEMENT
       IF ENR_CONTRATEMP<41>-W_JOURCONGESCF >= 0 THEN
           ENR_CONTRATEMP<41>=ENR_CONTRATEMP<41>-W_JOURCONGESCF
       END ELSE
	     ENR_CONTRATEMP<83>=ENR_CONTRATEMP<83>+(W_JOURCONGESCF-ENR_CONTRATEMP<41>)
           ENR_CONTRATEMP<41>=0
       END

   END ELSE
       ENR_CONTRATEMP<38>=0
       ENR_CONTRATEMP<39>=0
       ENR_CONTRATEMP<40>=0
       ENR_CONTRATEMP<41>=0
       ENR_CONTRATEMP<44>=0
       ENR_CONTRATEMP<45>=0
       ENR_CONTRATEMP<46>=0
       ENR_CONTRATEMP<47>=0
       ENR_CONTRATEMP<48>=0
       ENR_CONTRATEMP<85>=0
       ENR_CONTRATEMP<86>=0
*       WRITE ENR_CONTRATEMP ON F.CONTRAT,W_CODECONTRAT
   END
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"'
    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

 	     * GESTION DES ABSENCES AUTRES QUE MALADIE MATERNITE
	     IF ENR_CONTRATEMP<31> <> 1 OR ENR_CONTRATEMP<1>="02" THEN
              W_PASABS="FAUX"
              IF W_JOURCONGESCPS=0 THEN
                 * Pas conges payes pour soldes 
                 GOSUB 200
              END
           END

         REPEAT

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

    END

* Mise a jour des 10 % du BS.

   IF W_DEBUTCONTRAT < W_DEBUTPERIODE THEN
      W_NBJOURPRESENT=250
   END ELSE
      * CALCUL AU PRORATA DES JOURS DE CONGES
      W_NBJOURPRESENT=W_DEBUTCONTRAT-W_DEBUTPERIODE+1
      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_CONTRATEMP<44>=ENR_CONTRATEMP<44>+W_NBJOURPRESENT
   ENR_CONTRATEMP<45>=ENR_CONTRATEMP<45>+W_VALEURHEURESJOUR
   ENR_CONTRATEMP<46>=ENR_CONTRATEMP<46>+W_VALEURMONTJOUR

RETURN   

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

200 *


      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_CONTRATEMP<45>=ENR_CONTRATEMP<45>+W_SALREFHRES
           ENR_CONTRATEMP<46>=ENR_CONTRATEMP<46>+W_SALREFMONT

        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_CONTRATEMP<45>=ENR_CONTRATEMP<45>+W_SALREFHRES
              ENR_CONTRATEMP<46>=ENR_CONTRATEMP<46>+W_SALREFMONT

              W_NBJOURNONINDEM=W_NBJOURABSMALADIE - W_NBJOURINDEM
              IF W_NBJOURNONINDEM > 0 THEN
                 W_NBJOURABS=W_NBJOURNONINDEM
                 GOSUB 301
                 W_TOTNBJOURCONGES=W_TOTNBJOURCONGES + W_NBJOURCONGES
                 ENR_CONTRATEMP<70>=ENR_CONTRATEMP<70>+W_NBJOURNONINDEM
              END

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

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

         GOSUB 301

         W_TOTNBJOURCONGES=W_TOTNBJOURCONGES + W_NBJOURCONGES

         IF W_CODEABSENCE="12" THEN   
            ENR_CONTRATEMP<70>=ENR_CONTRATEMP<70>+W_NBJOURABS
         END ELSE
            ENR_CONTRATEMP<70>=ENR_CONTRATEMP<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_CONTRATEMP<45>=ENR_CONTRATEMP<45>+W_SALREFHRES
         ENR_CONTRATEMP<46>=ENR_CONTRATEMP<46>+W_SALREFMONT
          
      END CASE       

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

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 FinAbsAidant >= "':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
    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"

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

*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS

500 *

    * TEST DE LA PERIODE EN COURS

    * BASCULEMENT COMPTEUR
    READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,W_CODECONVENTION ELSE
       PRINT "PAS DE CONVENTION"
   	 STOP
    END

    * LECTURE CONTRATEMP EN COURS
*    READ ENR_CONTRATEMP FROM F.CONTRATEMP,W_CODECONTRAT ELSE
*         PRINT "PAS DE CONTRATEMP"
*         STOP
*    END

    W_DATEDEBUTCONTRAT=OCONV(W_DEBUTCONTRAT,"D4/")
    W_DATEDEBUTCONTRAT=W_DATEDEBUTCONTRAT[7,4]:W_DATEDEBUTCONTRAT[4,2]
    IF W_DEBUTCONTRATANC<>"" THEN
         W_DATEDEBUTCONTRATANC=OCONV(W_DEBUTCONTRATANC,"D4/")
         W_DATEDEBUTCONTRATANC=W_DATEDEBUTCONTRATANC[7,4]:W_DATEDEBUTCONTRATANC[4,2]
    END ELSE
	 W_DATEDEBUTCONTRATANC=W_DATEDEBUTCONTRAT
    END

    * REGARDE SI PERIODE = DATE DE DEBUT CONTRATEMP - 1 MOIS
    IF W_DATEDEBUTCONTRATANC[5,2]<>"01" THEN 
	 W_DATEDEBUTCONTRATANC=W_DATEDEBUTCONTRATANC-1
    END ELSE
	 W_DATEDEBUTCONTRATANC=W_DATEDEBUTCONTRATANC[1,4]-1:"12"
    END

    W_DATEDEBUTCONTRATANCCLAIR="01/":W_DATEDEBUTCONTRATANC[5,2]:"/":W_DATEDEBUTCONTRATANC[1,4]

    IF ENR_CONVENTIONCOL<28>="0" OR ENR_CONVENTIONCOL<28>="" THEN
      IF W_PERIODE[5,2]="05" THEN    

         * GESTION DU BASCULEMENT DES CONGES 
	 GOSUB 600

	 * VERIFICATION SI BASCULEMENT CONGES ANCIENNETE EN MAI
	 IF ENR_CONVENTIONCOL<13>=1 THEN
	      GOSUB 700
	 END
      END
    END ELSE
      IF W_PERIODE[5,2]="12" THEN    

         * GESTION DU BASCULEMENT DES CONGES 
	 GOSUB 600

	 * VERIFICATION SI BASCULEMENT CONGES ANCIENNETE EN JANVIER
	 IF ENR_CONVENTIONCOL<13>=1 THEN
	      GOSUB 700
	 END
      END
    END
    * VERIFICATION SI BASCULEMENT CONGES ANCIENNETE MOIS ANNIVERSAIRE
    IF ENR_CONVENTIONCOL<13>=2 THEN

	 IF W_DATEDEBUTCONTRATANC[5,2]=W_PERIODE[5,2] THEN
	      GOSUB 700
	 END	
    END         

    IF W_PERIODE[5,2]="10" AND ENR_CONVENTIONCOL<4>=1 THEN

	 * GESTION DES CONGES DE FRACTIONNEMENT
	 GOSUB 800
 
    END

*    WRITE ENR_CONTRATEMP ON F.CONTRAT,W_CODECONTRAT    

RETURN
	
*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS DE CONGES PAYES

600 *

    W_NBJOURCONGESTOTAL=ENR_CONTRATEMP<44>

    * ARRONDI LE NBRE DE JOURS CONGES A L'ENTIER SUPERIEUR    
    IF W_NBJOURCONGESTOTAL<>0 THEN
	 W_NBJOURCONGESTOTAL=INT((ENR_CONTRATEMP<44>/100)+.99)
    END
    W_NBJOURCONGESTOTAL=W_NBJOURCONGESTOTAL*100

    * CALCULE LA VALEUR D'UNE JOURNEE EN HRES + MONTANT
    * christophe rajout du test.
    IF W_NBJOURCONGESTOTAL # 0 THEN
       W_VALEURTOTALHEURES=ENR_CONTRATEMP<45>/W_NBJOURCONGESTOTAL
       W_VALEURTOTALMONTANT=ENR_CONTRATEMP<46>/W_NBJOURCONGESTOTAL
    END ELSE
       * ici
       PRINT SPACE(46):"DIVISION PAR ZERO ":W_CleContrat
       PRINT SPACE(46):"ENR_CONTRATEMP<45> ":ENR_CONTRATEMP<45>
       PRINT SPACE(46):"ENR_CONTRATEMP<46> ":ENR_CONTRATEMP<46>      
       W_VALEURTOTALHEURES=ENR_CONTRATEMP<45>
       W_VALEURTOTALMONTANT=ENR_CONTRATEMP<46>
    END

    W_VALEURTOTALHEURES=INT((W_VALEURTOTALHEURES*100)+1/2)
    W_VALEURTOTALMONTANT=INT((W_VALEURTOTALMONTANT*100)+1/2)

    * TEST SI DERNIERE DECIMALES PAIRES DE TOTAL HEURES
    IF W_VALEURTOTALHEURES/2-INT(W_VALEURTOTALHEURES/2)<>0 THEN
	 W_VALEURTOTALHEURES=W_VALEURTOTALHEURES+1
    END
    * TEST SI DERNIERE DECIMALES PAIRES DE TOTAL MONTANT
    IF W_VALEURTOTALMONTANT/2-INT(W_VALEURTOTALMONTANT/2)<>0 THEN
	 W_VALEURTOTALMONTANT=W_VALEURTOTALMONTANT+1
    END

    * AFFECTATION VALEUR D'UNE JOURNEE
    ENR_CONTRATEMP<42>=W_VALEURTOTALHEURES
    ENR_CONTRATEMP<43>=W_VALEURTOTALMONTANT

    * CONVERSION OUVRABLES / OUVRES SI CONV. COL. LE PERMET
    IF ENR_CONVENTIONCOL<2>=1 THEN
	 ENR_CONTRATEMP<44>=ENR_CONTRATEMP<44>*5/6
    END

    * REPRISE DES NON CONSOMMES SI CONV. COL. LE PERMET
    IF ENR_CONVENTIONCOL<3>=2 THEN
	 ENR_CONTRATEMP<38>=ENR_CONTRATEMP<44>+ENR_CONTRATEMP<39>
    END ELSE 
	 ENR_CONTRATEMP<38>=ENR_CONTRATEMP<44>
	 * REMISE A ZERO DES CONGES FRACTIONNEMENT
	 ENR_CONTRATEMP<40>=0
	 ENR_CONTRATEMP<41>=0
    END

    ENR_CONTRATEMP<38>=INT((ENR_CONTRATEMP<38>+99)/100)

    * CONGES RESTANTS A CONSOMMER
    ENR_CONTRATEMP<39>=(ENR_CONTRATEMP<38>*100)-ENR_CONTRATEMP<83>

    * BASCULE PROVISION EMPLOYEUR
    IF ENR_CONVENTIONCOL<3>=2 THEN
         ENR_CONTRATEMP<85>=ENR_CONTRATEMP<85>+ENR_CONTRATEMP<86>
    END ELSE
	 ENR_CONTRATEMP<85>=ENR_CONTRATEMP<86>
    END

    * TEST SUR DROITS ACQUIS >= 0
    IF ENR_CONTRATEMP<38><0 THEN ENR_CONTRATEMP<38>=0
    IF ENR_CONTRATEMP<39><0 THEN ENR_CONTRATEMP<39>=0
    IF ENR_CONTRATEMP<85><0 THEN ENR_CONTRATEMP<85>=0
    IF ENR_CONTRATEMP<42><0 THEN ENR_CONTRATEMP<42>=0
    IF ENR_CONTRATEMP<43><0 THEN ENR_CONTRATEMP<43>=0

    * SI CONGES PAYES AU MOIS ALORS MET A 0 VALEUR JOURNEE EN HRES ET MONTANT
    IF ENR_CONTRATEMP<31>="1" THEN 
	 ENR_CONTRATEMP<42>=0
	 ENR_CONTRATEMP<43>=0
    END

    * VIDAGE CONTRATEMP

    ENR_CONTRATEMP<44>=0
    ENR_CONTRATEMP<45>=0
    ENR_CONTRATEMP<46>=0
    ENR_CONTRATEMP<83>=0
    ENR_CONTRATEMP<86>=0

RETURN

*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS DE CONGES ANCIENNETE

700 *

    * CALCUL DE L'ANCIENNETE DU CONTRATEMP
    W_DATECLOTURE=W_PERIODE+1

    * SI DATE CLOTURE > DECEMBRE
    IF W_DATECLOTURE[5,2]=13 THEN
	 W_DATECLOTURE=W_DATECLOTURE[1,4]+1:"01"
    END

    IF W_DATECLOTURE>"200003" AND W_CODECONVENTION="02" THEN W_DATECLOTURE="200003"

    W_ANCIENNETE=INT(W_DATECLOTURE-W_DATEDEBUTCONTRATANC)/100

    BEGIN CASE

         * EMPLOYES DE MAISON OU AIDE A DOMICLIE
	 CASE W_CODECONVENTION="02" OR W_CODECONVENTION="01" OR W_CODECONVENTION="08"		
	      * BLOCAGE ANCIENNETE DANS CCN 02 SI DEBUT CONTRATEMP >= 01/04/00
	      IF ICONV(W_DATEDEBUTCONTRATANCCLAIR,"D4/")>="11780" AND W_CODECONVENTION="02" THEN
		   W_NBJOURANCIEN=0
	      END ELSE 
		   * GESTION HABITUELLE DES C.A
                   W_NBJOURANCIEN=INT(W_ANCIENNETE/5)
                   IF W_NBJOURANCIEN>4 THEN	
		        W_NBJOURANCIEN=4
	           END
	      END

         * FAMILLES RURALES
	 CASE W_CODECONVENTION="04"		
              W_NBJOURANCIEN=INT(W_ANCIENNETE/4)
              IF W_NBJOURANCIEN>5 THEN	
		   W_NBJOURANCIEN=5
	      END

         * TRAVAILLEUSES FAMILLIALES
	 CASE W_CODECONVENTION="06"		
              W_NBJOURANCIEN=INT(W_ANCIENNETE/5)*2
              IF W_NBJOURANCIEN>6 THEN	
		   W_NBJOURANCIEN=6
	      END

         * ADMR DU 6 MAI 1970
	 CASE W_CODECONVENTION="03"	
	      W_NBJOURANCIEN=0	
	      IF W_ANCIENNETE>=5 AND W_ANCIENNETE<10 THEN
	           W_NBJOURANCIEN=2
	      END ELSE
		   IF W_ANCIENNETE>=10 THEN
  		        W_NBJOURANCIEN=5
	           END
              END

    END CASE

    ENR_CONTRATEMP<47>=W_NBJOURANCIEN
    ENR_CONTRATEMP<48>=ENR_CONTRATEMP<47>*100

RETURN

*********************************************************
*********************************************************
* GESTION DE BASCULEMENT DES COMPTEURS DE CONGES FRACTIONNEMENT

800 *

    W_NBJOURFRACT=0

    * CALCUL DU NOMBRE DE JOURS DE CONGES RESTANTS
    IF ENR_CONVENTIONCOL<2>=1 THEN
         W_NBJOURCONGESRESTANT=ENR_CONTRATEMP<39>*6/5        
    END ELSE
         W_NBJOURCONGESRESTANT=ENR_CONTRATEMP<39>
    END

    W_NBJOURCONGESRESTANT=W_NBJOURCONGESRESTANT/100

    BEGIN CASE

 	 * TOUTES SAUF AIDE A DOMICILE + FONCTION PUBLIQUE
	 CASE W_CODECONVENTION<>"01" AND W_CODECONVENTION <> "07"
              IF W_NBJOURCONGESRESTANT>=12 THEN
		   W_NBJOURFRACT=2
	      END ELSE
		   IF W_NBJOURCONGESRESTANT>=9 THEN
			W_NBJOURFRACT=1
		   END
	      END

	 * FONCTION PUBLIQUE
	 CASE W_CODECONVENTION="07" 
              IF W_NBJOURCONGESRESTANT>=13 THEN
		   W_NBJOURFRACT=2
	      END ELSE
		   IF W_NBJOURCONGESRESTANT>=10 THEN
			W_NBJOURFRACT=1
		   END
	      END
		
	 * AIDE A DOMICILE
	 CASE W_CODECONVENTION="01"
              IF W_NBJOURCONGESRESTANT>=12 THEN
		   W_NBJOURFRACT=3
	      END ELSE
		   IF W_NBJOURCONGESRESTANT>=9 THEN
			W_NBJOURFRACT=1
		   END
	      END

    END CASE

    IF ENR_CONVENTIONCOL<3>=2 THEN
        ENR_CONTRATEMP<40>=ENR_CONTRATEMP<40>+W_NBJOURFRACT
        ENR_CONTRATEMP<41>=ENR_CONTRATEMP<41>+W_NBJOURFRACT*100
    END ELSE        
   	  ENR_CONTRATEMP<40>=W_NBJOURFRACT
        ENR_CONTRATEMP<41>=W_NBJOURFRACT*100
    END

RETURN
