**********************************************************
*Cloture de la paie
*Programme chaine  partir d'un projet VB
*Vanessa
*
*GESTION DES CONGES (MENSUEL ET BASCULEMENT)
*STEPHANE
*
* GESTION CONGE DELAI PREVENANCE 
* VANES LE 27/10/08
**********************************************************

**********************************************************
* RECAPITULATIF DES CORRECTIONS

* 22/05/01 -> INTEGRATION DE LA GESTION DE CONGES FRACT. + ANC. AVANT PRISE DES CONGES EN COURS ACQ.
* 28/02/01 -> CORRECTION BUG SUR SOLDE DES CONGES LORS DE CONGES POUR SOLDE
* 30/01/01 -> CORRECTION BUG SUR VALORISATION NB JOURS SUSP. CONTRAT (ATT.70)

**********************************************************
* RECAPITULATIF DES GOSUB

* 10  -> MAJ DU FICHIER HISTORCUMUL
* 11  -> GESTION DES TRANCHES B + C DANS HISTORCUMUL
* 50  -> MAJ DES CONGES PAYES
* 60  -> RECHERCHE DU NOMBRE DE JOURS DE CONGES
* 70  -> MAJ DES COMPTEURS DE CONGES
* 80  -> CALCUL DU TAUX HORAIRE + COEFFICIENT
* 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
* 310 -> CALCUL DES DROITS AUX CONGES (MALADIE)
* 320 -> CALCUL DES DROITS AUX CONGES <> 01,12,13
* 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
* 900 -> GESTION DES EFFECTIFS
* 901 -> RECHERCHE SI ETABLISSEMENT DEJA TRAITE
* 910 -> MAJ DU FICHIER ETABLISSEMENT
* 920 -> MAJ DU FICHIER ASSOCIATION

* 2000 --> Controles pour cration d'un nouveau DtailPrest (JEROME)
* 2001 --> Cration du nouveau DtailPrest suite  ensemble des controles valide (JEROME)
* 2010 --> Purge DETAILPREST, DETAILMANDAT & DETAILINTER si Priode < PriodePaie (JEROME)
* (60) --> Purge du DETAILADMIN aprs traitement (JEROME)
* 2050 --> RECHERCHE SI CONTRAT TOUJOURS EN COURS SUR MOIS SUIVANT...
* 2100 --> Controle pour cration DETAILADMIN, DETAILPREST, DETAILMANDAT & DETAILINTER (JEROME)
* 2101 --> cration DETAILADMIN  (JEROME)
* 2102 --> cration DETAILMANDAT (JEROME)
* 2103 --> cration DETAILPREST  (JEROME)
* 2104 --> cration DETAILINTER  (JEROME)
* 2200 --> PURGE DES FICHIERS ANOMALIESPAIE + ACOMPTEBULL

* Ouvertures des fichiers
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"

OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP 
OPEN "","ACOMPTEBULL" TO F.ACOMPTEBULL ELSE PRINT "OUVERTURE ACOMPTEBULL" ;* en suppression
OPEN "","ACTIVITES" TO F.ACTIVITE ELSE STOP
OPEN "","AIDANTDELAIPREV" TO F.AIDANTDELAIPREV ELSE STOP
OPEN "","ANOMALIEPAIE" TO F.ANOMALIEPAIE ELSE STOP
OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE STOP
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP
OPEN "","CONSTANTESPAIE" TO F.CONSTANTESPAIE ELSE STOP
OPEN "","CONTRAT" TO F.CONTRAT ELSE PRINT "OUVERTURE CONTRAT" ;* en criture
OPEN "","CONTRATSPREV" TO F.CONTRATSPREV ELSE STOP
OPEN "","CONVENTIONCOL" TO F.CONVENTIONCOL ELSE STOP
OPEN "","DETAILADMIN" TO F.DETAILADMIN ELSE STOP
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE PRINT "OUVERTURE DETAILCALCUL" ;* en lecture
OPEN "","DETAILINTER" TO F.DETAILINTER ELSE STOP
OPEN "","DETAILMANDAT" TO F.DETAILMANDAT ELSE STOP
OPEN "","DETAILPREST" TO F.DETAILPREST ELSE STOP
OPEN "","ETABLISSEMENT" TO F.ETABLISSEMENT ELSE STOP
OPEN "","GRILLESCC" TO F.GRILLESCC ELSE STOP
OPEN "","HISTORCUMUL" TO F.HISTORCUMUL ELSE PRINT "OUVERTURE HISTORCUMUL" ;* en criture
OPEN "","PERIODESPAIE" TO F.PERIODESPAIE ELSE STOP
OPEN "","PROFIL" TO F.PROFIL ELSE STOP
OPEN "","RATTSALANT" TO F.RATTSALANT ELSE STOP
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE PRINT "OUVERTURE RUBSAISIE" ;* en lecture
OPEN "","RUBCHARGE" TO F.RUBCHARGE ELSE PRINT "OUVERTURE RUBCHARGE" ;* en lecture
OPEN "","TABLES" TO F.TABLES ELSE STOP
OPEN "","TRANCHE" TO F.TRANCHE ELSE STOP
* Modif Greg - 24/02/10 - DA10054 - Dsormais, on pourra lire COMPTEUR.
OPEN "","COMPTEUR" TO F.COMPTEUR ELSE STOP

* SPECIF TROYES
OPEN "","DETAILFEDE" TO F.DETAILFEDE ELSE PRINT ""

*********************************************************
* Recuperation des arguments
PROCREAD ARGUMENTS ELSE STOP
W_RangPeriode=INDEX(ARGUMENTS," ",1)
W_PERIODEFACT=ARGUMENTS[W_RangPeriode+1,6]
W_Nom=INDEX(ARGUMENTS," ",2)
W_RequeteContrat=ARGUMENTS[W_Nom+1,999]
*********************************************************

ENR_COMPTEUR=""

W_EURO=0

* REGARDE SI TRAITEMENT EN EUROS
READ ENR_CONSTANTESPAIE FROM F.CONSTANTESPAIE,"1" ELSE STOP
READ ENR_PERIODESPAIE FROM F.PERIODESPAIE,"1" ELSE STOP
READ ENR_TABLES FROM F.TABLES,"NATURECONTRAT" 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

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

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

* Requete sur CONTRAT
  W_EFFECTIFPHYSIQUE=""
  W_EFFECTIFTP=""
  W_EFFECTIFPHYSIQUETOTAL=0
  W_EFFECTIFTPTOTAL=0

  W_EFFECTIFPHYSIQUE26ANS=""
  W_EFFECTIFTP26ANS=""
  W_EFFECTIFPHYSIQUETOTAL26ANS=0
  W_EFFECTIFTPTOTAL26ANS=0

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

* INITIALISE LES LISTES A VIDE
LISTEABSENCESAIDANT=""
LISTANOMALIEPAIE=""
LISTACOMPTEBULL=""
LISTEMALADIEAIDANT=""
REQUETECONTRAT=""
REQUETEDETAIL=""
W_ListeAbs=""

*   IF W_PERIODEFACT = "200306" OR W_PERIODEFACT = "200406" OR W_PERIODEFACT = "200506" THEN
*		CALL MajGrilleCloture(W_RequeteContrat,W_PERIODEFACT)
*   END

   W_Fini="FAUX"
   EXECUTE W_RequeteContrat
   EXECUTE 'SAUVE-LISTE REQUETECONTRAT'
   EXECUTE 'LISTE REQUETECONTRAT' CAPTURING MSG RETURNING MSGCODE

   IF MSGCODE<1>=209 THEN 
        STOP
   END

	SELECT F.CONTRAT TO REQUETECONTRAT
	
		* SAUVEGARDE PROCHAINE PERIODE DE TRAITEMENT POUR REMPLISSAGE AUTO DETAILXXXX
		* JEROME
		W_PROCHAINEPERIODE=W_PERIODEFACT+1
		IF W_PROCHAINEPERIODE[5,2]="13" THEN
			W_PROCHAINEPERIODE=W_PROCHAINEPERIODE[1,4]+1:"01"
		END
		W_NbContratsTraites = 0
		W_DernierContratTraite = ""
		
	LOOP
		READNEXT W_CleContrat FROM REQUETECONTRAT ELSE W_Fini="VRAI"
	
		DELETE F.RATTSALANT,W_CleContrat

		W_AFFECTCONGESMOIS="FAUX"
		W_CODEAIDANT=W_CleContrat[1,5]

	WHILE W_Fini="FAUX" DO
		W_NbContratsTraites = W_NbContratsTraites + 1
		W_DernierContratTraite = W_CleContrat[1,5]

		READ ENR_CONTRAT FROM F.CONTRAT,W_CleContrat ELSE ENR_CONTRAT="" 
		IF ENR_CONTRAT<81><>"" THEN
			GOSUB 10 
			ENR_CONTRAT<63>=ENR_CONTRAT<81>
			ENR_CONTRAT<81>=""
		END
		
		READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,ENR_CONTRAT<1> ELSE ENR_CONVENTIONCOL=""
		
		W_PERIODE=W_PERIODEFACT
		W_CODECONTRAT=W_CleContrat
		W_CODECONVENTION=ENR_CONTRAT<1>
		W_DEBUTCONTRAT=ENR_CONTRAT<7>
		W_DEBUTCONTRATANC=ENR_CONTRAT<97>
		W_ASSOCIATION=ENR_CONTRAT<2>
		
		* modif vanessa 11/04/12 - DA 11089-01
		* modif vanessa 02/11/12 DA 12107-01
		IF ENR_CONTRAT<1> = "01" OR ENR_CONTRAT<1> = "06" OR ENR_CONTRAT<1> = "04" THEN
			W_JourSuspAvant=ENR_CONTRAT<70>
		END ELSE
		  W_JourSuspAvant=0
		END
		
		W_JOURCONGESCP=0
		W_JOURCONGESCA=0
		W_JOURCONGESCPS=0
		W_JOURCONGESCF=0
		W_JOURCONGESCPREV=0
		W_ANCIENCODE=""
		
		GOSUB 50
		
		GOSUB 80
		
		ENR_CONTRAT<46>=INT(ENR_CONTRAT<46>+1/2)
		
		W_FINMODUL="12"
		IF ENR_CONTRAT<1>#"02" THEN
			READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,ENR_CONTRAT<3> THEN
				W_FINMODUL=ENR_ETABLISSEMENT<24>
			END
		END
		IF W_FINMODUL=W_PERIODE[5,2] THEN
			ENR_CONTRAT<71>=ENR_CONTRAT<76>
			ENR_CONTRAT<72>=ENR_CONTRAT<77>
			ENR_CONTRAT<73>=ENR_CONTRAT<78>
			ENR_CONTRAT<74>=ENR_CONTRAT<79>
			ENR_CONTRAT<75>=ENR_CONTRAT<80>
			ENR_CONTRAT<99>=ENR_CONTRAT<100>
			ENR_CONTRAT<76>=""
			ENR_CONTRAT<77>=""
			ENR_CONTRAT<78>=""
			ENR_CONTRAT<79>=""
			ENR_CONTRAT<80>=""
			ENR_CONTRAT<100>=""
		END
		
*		W_AVENANT=DCOUNT(EXTRACT(ENR_CONTRAT,15),CHAR(253))
*		IF ENR_CONTRAT<68,W_AVENANT>="1" THEN
*			IF ENR_CONTRAT<1>#"02" THEN	
*				READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,ENR_CONTRAT<3> THEN
*					W_FINMODUL=ENR_ETABLISSEMENT<24>
*					IF W_FINMODUL=W_PERIODE[5,2] THEN
*						ENR_CONTRAT<71>=ENR_CONTRAT<76>
*						ENR_CONTRAT<72>=ENR_CONTRAT<77>
*						ENR_CONTRAT<73>=ENR_CONTRAT<78>
*						ENR_CONTRAT<74>=ENR_CONTRAT<79>
*						ENR_CONTRAT<75>=ENR_CONTRAT<80>
*						ENR_CONTRAT<99>=ENR_CONTRAT<100>
*						ENR_CONTRAT<76>=""
*						ENR_CONTRAT<77>=""
*						ENR_CONTRAT<78>=""
*						ENR_CONTRAT<79>=""
*						ENR_CONTRAT<80>=""
*						ENR_CONTRAT<100>=""
*					END
*				END
*			END
*		END ELSE
*			READ ENR_ASSOCIATION FROM F.ASSOCIATION,ENR_CONTRAT<2> THEN
*				IF ENR_ASSOCIATION<25>="1" THEN
*					IF W_PERIODE[5,2]="11" THEN
*						ENR_CONTRAT<71>=ENR_CONTRAT<76>
*						ENR_CONTRAT<72>=ENR_CONTRAT<77>
*						ENR_CONTRAT<73>=ENR_CONTRAT<78>
*						ENR_CONTRAT<74>=ENR_CONTRAT<79>
*						ENR_CONTRAT<75>=ENR_CONTRAT<80>
*						ENR_CONTRAT<99>=ENR_CONTRAT<100>
*						ENR_CONTRAT<76>=""
*						ENR_CONTRAT<77>=""
*						ENR_CONTRAT<78>=""
*						ENR_CONTRAT<79>=""
*						ENR_CONTRAT<80>=""
*	                    ENR_CONTRAT<100>=""
*					END
*				END ELSE
*					IF W_PERIODE[5,2]="12" THEN
*						ENR_CONTRAT<71>=ENR_CONTRAT<76>
*						ENR_CONTRAT<72>=ENR_CONTRAT<77>
*						ENR_CONTRAT<73>=ENR_CONTRAT<78>
*						ENR_CONTRAT<74>=ENR_CONTRAT<79>
*						ENR_CONTRAT<75>=ENR_CONTRAT<80>
*						ENR_CONTRAT<99>=ENR_CONTRAT<100>
*						ENR_CONTRAT<76>=""
*						ENR_CONTRAT<77>=""
*						ENR_CONTRAT<78>=""
*						ENR_CONTRAT<79>=""
*						ENR_CONTRAT<80>=""
*	                    ENR_CONTRAT<100>=""
*					END
*				END
*	        END
*		END				     

		* CREATION DE DETAILXXXXX SUIVANT		
		GOSUB 2100
		
		IF W_CODECONVENTION<>"02" THEN
			IF ENR_CONTRAT<13><>"" THEN
				iTemp=1
				LOOP
				UNTIL ENR_TABLES<2,iTemp> = ENR_CONTRAT<13> OR ENR_TABLES<2,iTemp> = "" DO
					iTemp=iTemp+1
				REPEAT
				IF ENR_TABLES<4,iTemp> = "O" THEN
					GOSUB 900
				END
			END ELSE
				GOSUB 900
			END
		END
		
		GOSUB 100
		
		GOSUB 500
		
		* Modification : Matthieu - Le 27 Fev 2009
		* ----------------------------------------
		* Mise a jourt des congs dlai prvenance que si l'attribut
		* 76 de CONVENTIONCOL # de 0 et espace
		* MAJ DES CONGES DELAI PREVENANCE
		*
		IF ENR_CONVENTIONCOL<76> # "0" AND ENR_CONVENTIONCOL<76> # "" THEN
			GOSUB 930
		END
		* Fin Modification - Matthieu
		
		* Modif Greg - 12/05/11 - DA11032 - Gestion du report des congs.
		IF ENR_CONTRAT<58>=W_PERIODEFACT THEN
			IF ENR_CONTRAT<116><>"" THEN
				READ ENR_CONTRATREPRISE FROM F.CONTRAT, ENR_CONTRAT<116> THEN
					ENR_CONTRATREPRISE<83>=ENR_CONTRATREPRISE<83>+ENR_CONTRAT<83>
					IF ENR_CONTRATREPRISE<83>>0 THEN
						IF ENR_CONTRATREPRISE<83>>ENR_CONTRAT<39> THEN
							ENR_CONTRATREPRISE<83>=ENR_CONTRATREPRISE<83>-ENR_CONTRAT<39>
							ENR_CONTRATREPRISE<39>="0"
						END ELSE
							ENR_CONTRATREPRISE<39>=ENR_CONTRAT<39>-ENR_CONTRATREPRISE<83>
							ENR_CONTRATREPRISE<83>="0"
						END
					END ELSE
						ENR_CONTRATREPRISE<39>=ENR_CONTRATREPRISE<39>+ENR_CONTRAT<39>
						ENR_CONTRATREPRISE<83>=ENR_CONTRAT<83>
					END
					
					ENR_CONTRATREPRISE<42>=ENR_CONTRAT<42>
					ENR_CONTRATREPRISE<43>=ENR_CONTRAT<43>
					
					ENR_CONTRATREPRISE<38>=ENR_CONTRATREPRISE<38>+ENR_CONTRAT<38>
					ENR_CONTRATREPRISE<40>=ENR_CONTRATREPRISE<40>+ENR_CONTRAT<40>
					ENR_CONTRATREPRISE<41>=ENR_CONTRATREPRISE<41>+ENR_CONTRAT<41>
					ENR_CONTRATREPRISE<44>=ENR_CONTRATREPRISE<44>+ENR_CONTRAT<44>
					ENR_CONTRATREPRISE<45>=ENR_CONTRATREPRISE<45>+ENR_CONTRAT<45>
					ENR_CONTRATREPRISE<46>=ENR_CONTRATREPRISE<46>+ENR_CONTRAT<46>
					ENR_CONTRATREPRISE<47>=ENR_CONTRATREPRISE<47>+ENR_CONTRAT<47>
					ENR_CONTRATREPRISE<48>=ENR_CONTRATREPRISE<48>+ENR_CONTRAT<48>
					ENR_CONTRATREPRISE<85>=ENR_CONTRATREPRISE<85>+ENR_CONTRAT<85>
					ENR_CONTRATREPRISE<86>=ENR_CONTRATREPRISE<86>+ENR_CONTRAT<86>
					ENR_CONTRATREPRISE<109>=ENR_CONTRATREPRISE<109>+ENR_CONTRAT<109>
					ENR_CONTRATREPRISE<110>=ENR_CONTRATREPRISE<110>+ENR_CONTRAT<110>
					
					ENR_CONTRATREPRISE<116>=""
					WRITE ENR_CONTRATREPRISE ON F.CONTRAT, ENR_CONTRAT<116>
				END ELSE
					ENR_CONTRAT<116>=""
				END
			END
			
			ENR_CONTRAT<39>=0
			ENR_CONTRAT<41>=0
			ENR_CONTRAT<44>=0
			ENR_CONTRAT<45>=0
			ENR_CONTRAT<46>=0
			ENR_CONTRAT<48>=0
			ENR_CONTRAT<83>=0
			ENR_CONTRAT<110>=0		
		END
		* Fin modif Greg - 12/05/11

		WRITE ENR_CONTRAT ON F.CONTRAT,W_CleContrat
		GOSUB 2200
		
	REPEAT

	I=1
	LOOP

	UNTIL W_HORAIRETP<I>="" DO
		W_EFFECTIFTP26ANS<I>=W_EFFECTIFTP26ANS<I>+INT((W_HORAIRETP26ANS<I>/W_HORAIREHEBDO<I>)*100+1/2)    
		W_EFFECTIFTP<I>=W_EFFECTIFTP<I>+INT((W_HORAIRETP<I>/W_HORAIREHEBDO<I>)*100+1/2)
		I=I+1
	REPEAT
	
	IF W_NBETABLISSEMENT="" OR W_NBETABLISSEMENT=0 THEN
		W_NBETABLISSEMENT=DCOUNT(W_ETABLISSEMENT,CHAR(254))
	END
	
	
	
	* MAJ DES ETABLISSEMENT
	GOSUB 910
	
	* MAJ DE L'ASSOCIATION
	GOSUB 920
	
	EXECUTE "EFFACER-LISTE LISTEABSENCESAIDANT"
	EXECUTE "EFFACER-LISTE LISTEMALADIEAIDANT"
	EXECUTE "EFFACER-LISTE REQUETECONTRAT"
	
	* Purge des fichiers
	GOSUB 2010
	
* didier le 29/08/2008
	IF W_NbContratsTraites > 1 THEN W_DernierContratTraite=""
		GOSUB 10000
*   END

STOP

*********************************************************
*********************************************************
* MAJ du fichier HISTORCUMUL

10

	W_CodeAidant=W_CleContrat
	W_ENTREESURMOIS="NON"
	W_DATEDEBCONTRAT=ENR_CONTRAT<7>
	W_DATEDEBCONTRAT=OCONV(W_DATEDEBCONTRAT,"D4 ")
	W_DATEDEBCONTRAT=W_DATEDEBCONTRAT[7,4]:W_DATEDEBCONTRAT[4,2]
	IF W_DATEDEBCONTRAT=W_PERIODEFACT THEN W_ENTREESURMOIS="OUI"

  * test si dcallage de paie
	READ ENR_ASSOCIATION FROM F.ASSOCIATION,ENR_CONTRAT<2> ELSE ENR_ASSOCIATION="" 
  IF ENR_ASSOCIATION<25> = "1" AND ENR_CONTRAT<1> # "02" AND ENR_CONTRAT<81>[5,2] = "12" THEN
     W_CodeAnnee=ENR_CONTRAT<81>[1,4] + 1
  END ELSE
     W_CodeAnnee=ENR_CONTRAT<81>[1,4]
  END

  IF ENR_CONTRAT<1>="02" THEN
     W_CleHistorCumul=W_CodeAidant[1,5]:W_CodeAnnee:ENR_CONTRAT<3>
  END ELSE 
     W_CleHistorCumul=W_CodeAidant[1,5]:W_CodeAnnee:ENR_CONTRAT<2>
  END

  READ ENR_HISTORCUMUL FROM F.HISTORCUMUL,W_CleHistorCumul ELSE ENR_HISTORCUMUL=""
  IF ENR_HISTORCUMUL="" THEN W_ENTREESURMOIS="OUI"
  IF ENR_HISTORCUMUL#"" THEN W_ENTREESURMOIS="NON"
  IF ENR_HISTORCUMUL<5>=0 THEN W_ENTREESURMOIS="OUI"

******************************************************
  IF ENR_ASSOCIATION<25> = "1" AND ENR_CONTRAT<1> # "02" THEN

  	IF ENR_HISTORCUMUL<11>="" AND ENR_CONTRAT<7> >= ICONV("01/12/":W_CodeAnnee[1,4]-1,"D4/") AND ENR_CONTRAT<7> <= ICONV("30/11/":W_CodeAnnee[1,4],"D4/") THEN
     		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,11;ENR_CONTRAT<7>)
  	END
  	IF ENR_HISTORCUMUL<12>="" AND ENR_CONTRAT<8> >= ICONV("01/12/":W_CodeAnnee[1,4]-1,"D4/") AND ENR_CONTRAT<8> <= ICONV("30/11/":W_CodeAnnee[1,4],"D4/") THEN
   		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,12;ENR_CONTRAT<8>)
  	END
  	IF ENR_HISTORCUMUL<12> # "" AND ENR_CONTRAT<7> # ENR_HISTORCUMUL<11> AND ENR_CONTRAT<7> >= ICONV("01/12/":W_CodeAnnee[1,4]-1,"D4/") AND ENR_CONTRAT<7> <= ICONV("30/11/":W_CodeAnnee[1,4],"D4/") THEN
     		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,13;ENR_CONTRAT<7>)
  	END
  	IF ENR_HISTORCUMUL<12> # "" AND ENR_CONTRAT<8> # ENR_HISTORCUMUL<12> AND ENR_CONTRAT<8> >= ICONV("01/12/":W_CodeAnnee[1,4]-1,"D4/") AND ENR_CONTRAT<8> <= ICONV("30/11/":W_CodeAnnee[1,4],"D4/") THEN
     		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,14;ENR_CONTRAT<8>)
  	END

  END ELSE

  	IF ENR_HISTORCUMUL<11>="" AND ENR_CONTRAT<7> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<7> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
     		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,11;ENR_CONTRAT<7>)
  	END
  	IF ENR_HISTORCUMUL<12>="" AND ENR_CONTRAT<8> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<8> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
   		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,12;ENR_CONTRAT<8>)
  	END
  	IF ENR_HISTORCUMUL<12> # "" AND ENR_CONTRAT<7> # ENR_HISTORCUMUL<11> AND ENR_CONTRAT<7> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<7> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
     		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,13;ENR_CONTRAT<7>)
  	END
  	IF ENR_HISTORCUMUL<12> # "" AND ENR_CONTRAT<8> # ENR_HISTORCUMUL<12> AND ENR_CONTRAT<8> >= ICONV("01/01/":W_CodeAnnee[1,4],"D4/") AND ENR_CONTRAT<8> <= ICONV("31/12/":W_CodeAnnee[1,4],"D4/") THEN
     		ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,14;ENR_CONTRAT<8>)
  	END

  END

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

  READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CleContrat:ENR_CONTRAT<81> ELSE ENR_DETAILCALCUL="" 
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,2;ENR_HISTORCUMUL<2>+ENR_DETAILCALCUL<6>)

  IF ENR_DETAILCALCUL<6> >= 6000 THEN
     W_Mois=ENR_CONTRAT<81>
     ENR_HISTORCUMUL<3>=W_Mois[5,2]
  END

  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,4;ENR_HISTORCUMUL<4>+ENR_DETAILCALCUL<29>)
  W_CumulBrut=ENR_HISTORCUMUL<5>
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,5;ENR_HISTORCUMUL<5>+ENR_DETAILCALCUL<7>)
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,6;ENR_HISTORCUMUL<6>+ENR_DETAILCALCUL<15>)
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,7;ENR_HISTORCUMUL<7>+ENR_DETAILCALCUL<16>)

  W_Temp=DCOUNT(ENR_DETAILCALCUL<2>,CHAR(253))
  W_HEURESSUP=0
  W_HEURESCOMPL=0
  W_MONTSUP=0
  W_MONTCOMPL=0
  W_MontIndRetraite = 0

  FOR i=1 TO W_Temp
     
     READ ENR_RUBSAISIE FROM F.RUBSAISIE,ENR_DETAILCALCUL<2,i> ELSE ENR_RUBSAISIE="" 
	 
	 ********************************************************************
	 * Modif GUILLAUME 26 Novembre 2007, Cumul Att 29 de HISTORCUMUL
	 
	 * Si la rubrique est de type "Indemnit de dpart en retraite", on cumule pour ensuite crire dans HISTORCUMUL<29>
	 IF ENR_DETAILCALCUL<2,i> = "801" THEN
		W_MontIndRetraite = W_MontIndRetraite + ENR_DETAILCALCUL<5,i>
	 END
	 ********************************************************************
	
* Didier 15/06/2010 - Traitement uniquement par rapport au type de rubrique (1 = heures compl - 2 = heures suppl)
*    IF ENR_RUBSAISIE<19>="2" AND ENR_RUBSAISIE<8>="2" AND ENR_RUBSAISIE<9>>="1000000" THEN
* Didier 17/08/2012 : fin loi TEPA - donc comptabilisation en suppl uniquement si prsence rubrique 908 ou 909
     IF ENR_RUBSAISIE<19>="2" THEN
      IF INDEX(ENR_DETAILCALCUL<8>,"908",1)#0 OR INDEX(ENR_DETAILCALCUL<8>,"909",1)#0 THEN
       W_HEURESSUP=W_HEURESSUP+ENR_DETAILCALCUL<3,i>
       W_MONTSUP=W_MONTSUP+ENR_DETAILCALCUL<5,i>
      END
     END
*    IF ENR_RUBSAISIE<19>="1" AND ENR_RUBSAISIE<8>="2" AND ENR_RUBSAISIE<9>>="1000000" THEN
* Didier 17/08/2012 : fin loi TEPA - donc comptabilisation en compl uniquement si prsence rubrique 908
     IF ENR_RUBSAISIE<19>="1" THEN
      IF INDEX(ENR_DETAILCALCUL<8>,"908",1)#0 THEN
       W_HEURESCOMPL=W_HEURESCOMPL+ENR_DETAILCALCUL<3,i>
       W_MONTCOMPL=W_MONTCOMPL+ENR_DETAILCALCUL<5,i>
      END
     END

     IF ENR_RUBSAISIE<2>="3" OR ENR_RUBSAISIE<2>="4" THEN
        ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,1;ENR_HISTORCUMUL<1>+ENR_DETAILCALCUL<3,i>)
     END
     
     IF ENR_RUBSAISIE<2>="0" THEN
        ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,8;ENR_HISTORCUMUL<8>+ENR_DETAILCALCUL<5,i>)

        W_Count=DCOUNT(ENR_HISTORCUMUL<9>,CHAR(253))
	IF ENR_RUBSAISIE<3>="" THEN
           ENR_RUBSAISIE<3>="A"
	END
	IF W_Count < 4 THEN
           W_Passe="FALSE"
           FOR j=1 TO W_Count
               IF ENR_RUBSAISIE<3>=ENR_HISTORCUMUL<9,j> THEN
                   W_Passe="TRUE"
               END 
           NEXT j 
           IF W_Passe="FALSE" THEN
	     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,9,W_Count+1;ENR_RUBSAISIE<3>)
	   END
 	END

     END

  NEXT i

  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,24;ENR_HISTORCUMUL<24>+W_HEURESSUP)
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,25;ENR_HISTORCUMUL<25>+W_MONTSUP)
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,26;ENR_HISTORCUMUL<26>+W_HEURESCOMPL)
  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,27;ENR_HISTORCUMUL<27>+W_MONTCOMPL)
  ***************************************
  * Modif GUILLAUME 26 Novembre 2007
  
  ENR_HISTORCUMUL<29>=ENR_HISTORCUMUL<29> + W_MontIndRetraite
  ***************************************
  
  W_Temp=DCOUNT(ENR_DETAILCALCUL<17>,CHAR(253))
  W_CumulRub=0
  W_MontIndLicenciement = 0
  FOR i=1 TO W_Temp
	READ ENR_RUBSAISIE FROM F.RUBSAISIE,ENR_DETAILCALCUL<17,i> ELSE ENR_RUBSAISIE="" 
	IF ENR_RUBSAISIE<2>="2" THEN
        ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,10;ENR_HISTORCUMUL<10>+ENR_DETAILCALCUL<20,i>)

        W_Count=DCOUNT(ENR_HISTORCUMUL<22>,CHAR(253))
		IF ENR_RUBSAISIE<17>="" THEN
	           ENR_RUBSAISIE<17>="R"
		END
	
		IF W_Count < 4 THEN
	           W_Passe="FALSE"
	           FOR j=1 TO W_Count
	               IF ENR_RUBSAISIE<17>=ENR_HISTORCUMUL<22,j> THEN
	                   W_Passe="TRUE"
	               END 
	           NEXT j 
		   IF W_Passe="FALSE" THEN
		     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,22,W_Count+1;ENR_RUBSAISIE<17>)
		   END
	 	END
	END

     *****************************************************************
     * MAJ 25/11/02 : gestion de la rubrique 832, chomage partiel...
     IF ENR_DETAILCALCUL<17,i> = "832" THEN
	  IF ENR_HISTORCUMUL<20> = "" THEN
		ENR_HISTORCUMUL = REPLACE(ENR_HISTORCUMUL, 20; ENR_DETAILCALCUL<20,i>)
	  END ELSE
		ENR_HISTORCUMUL = REPLACE(ENR_HISTORCUMUL, 20; ENR_HISTORCUMUL<20> + ENR_DETAILCALCUL<20,i>)
	  END
     END
     *****************************************************************

     * MAJ 27/11/02 : gestion de l'att 21 de HISTORCUMUL
     * VANES
     IF ENR_CONTRAT<1>="02" AND ENR_DETAILCALCUL<1>="E" THEN
        IF ENR_DETAILCALCUL<17,i> = "816" OR ENR_DETAILCALCUL<17,i> = "824" OR ENR_DETAILCALCUL<17,i> = "829" OR ENR_DETAILCALCUL<17,i> = "844" THEN
           W_CumulRub = W_CumulRub + ENR_DETAILCALCUL<20,i>
        END
     END
     *****************************************************************
	 
	 * Modif GUILLAUME 26 Novembre 2007, Gestion att 28 HISTORCUMUL
	 IF ENR_DETAILCALCUL<17,i> = "800" THEN
		W_MontIndLicenciement = W_MontIndLicenciement + ENR_DETAILCALCUL<20,i>
	 END
	 **

  NEXT i

  *****************************************************************
  * MAJ 27/11/02 : gestion de l'att 21 de HISTORCUMUL
  * VANES
  IF ENR_CONTRAT<1>="02" AND ENR_DETAILCALCUL<1>="E" THEN

     IF ENR_HISTORCUMUL<21> = "" THEN
	ENR_HISTORCUMUL = REPLACE(ENR_HISTORCUMUL,21;ENR_DETAILCALCUL<21>-W_CumulRub)
     END ELSE
	ENR_HISTORCUMUL = REPLACE(ENR_HISTORCUMUL,21; ENR_HISTORCUMUL<21> + (ENR_DETAILCALCUL<21>-W_CumulRub))
     END
  END
  *****************************************************************
  * Modif GUILLAUME 26 Novembre 2007, Gestion att 28 HISTORCUMUL
  ENR_HISTORCUMUL<28> = ENR_HISTORCUMUL<28> + W_MontIndLicenciement
  *****************************************************************

   * Didier - 14/12/2010 - Rduction Globalle S.S.
  ENR_HISTORCUMUL<38> = ENR_HISTORCUMUL<38> + ENR_DETAILCALCUL<55>
  ENR_HISTORCUMUL<39> = ENR_HISTORCUMUL<39> + ENR_DETAILCALCUL<31>
   * Didier - 11/05/2011 - Rduction Globalle S.S. Prise en compte volution SMIC
  ENR_HISTORCUMUL<40> = ENR_HISTORCUMUL<40> + ENR_DETAILCALCUL<61>

  i=1
  W_ENRHISTORCUMUL=""
  W_Count=DCOUNT(ENR_HISTORCUMUL<15>,CHAR(253))
  FOR j=1 TO W_Count
   W_ENRHISTORCUMUL<1,j>=""
  NEXT j
  W_BASEURSSAFTOT=0
  W_BASEURSSAFPLAF=0
  W_CUMASSURSSAFTOT=0
  W_CUMASSURSSAFPLAF=0

  j=1
  LOOP
  IF W_CUMASSURSSAFPLAF#0 AND W_CUMASSURSSAFTOT#0 THEN j=99
  WHILE ENR_HISTORCUMUL<15,j> # "" DO
      IF W_CUMASSURSSAFPLAF=0 OR W_CUMASSURSSAFTOT=0 THEN
        READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_HISTORCUMUL<15,j> ELSE ENR_RUBCHARGE="" 
        IF ENR_RUBCHARGE<16>="01" THEN
          READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> ELSE ENR_TRANCHE=""
          IF ENR_TRANCHE<10>="02" THEN
            IF W_CUMASSURSSAFPLAF=0 THEN W_CUMASSURSSAFPLAF=ENR_HISTORCUMUL<16,j>
          END
	  IF ENR_TRANCHE<10>="01" THEN
            IF W_CUMASSURSSAFTOT=0 THEN W_CUMASSURSSAFTOT=ENR_HISTORCUMUL<16,j>
          END
        END
      END        
      j=j+1
  REPEAT
  IF W_CUMASSURSSAFTOT=0 AND W_CUMASSURSSAFPLAF=0 THEN W_ENTREESURMOIS="OUI"
  LOOP
  WHILE ENR_DETAILCALCUL<8,i> # "" DO
      j=1
      LOOP
      WHILE ENR_DETAILCALCUL<8,i> # ENR_HISTORCUMUL<15,j> AND ENR_HISTORCUMUL<15,j> # "" DO
          IF W_CUMASSURSSAFPLAF=0 OR W_CUMASSURSSAFTOT=0 THEN
            READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_HISTORCUMUL<15,j> ELSE ENR_RUBCHARGE="" 
            IF ENR_RUBCHARGE<16>="01" THEN
              READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> ELSE ENR_TRANCHE=""
              IF ENR_TRANCHE<10>="02" THEN
                IF W_CUMASSURSSAFPLAF=0 THEN W_CUMASSURSSAFPLAF=ENR_HISTORCUMUL<16,j>
              END
	      IF ENR_TRANCHE<10>="01" THEN
                IF W_CUMASSURSSAFTOT=0 THEN W_CUMASSURSSAFTOT=ENR_HISTORCUMUL<16,j>
              END
            END
          END        
	  j=j+1
      REPEAT

      READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_DETAILCALCUL<8,i> ELSE ENR_RUBCHARGE=""     
      IF ENR_RUBCHARGE<16>="01" THEN
	 READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> ELSE ENR_TRANCHE=""
	 IF ENR_TRANCHE<10>="02" THEN
            IF W_BASEURSSAFPLAF=0 THEN W_BASEURSSAFPLAF=ENR_DETAILCALCUL<28,i>
         END
	 IF ENR_TRANCHE<10>="01" THEN
            IF W_BASEURSSAFTOT=0 THEN W_BASEURSSAFTOT=ENR_DETAILCALCUL<28,i>
         END
      END

      IF ENR_DETAILCALCUL<8,i>=ENR_HISTORCUMUL<15,j> THEN
          W_ENRHISTORCUMUL<1,j>="1"
          IF ENR_RUBCHARGE<16>="01" THEN
             IF ENR_TRANCHE<10>="02" THEN
                IF W_CUMASSURSSAFPLAF=0 THEN W_CUMASSURSSAFPLAF=ENR_HISTORCUMUL<16,j>
             END
	     IF ENR_TRANCHE<10>="01" THEN
                IF W_CUMASSURSSAFTOT=0 THEN W_CUMASSURSSAFTOT=ENR_HISTORCUMUL<16,j>
             END
          END
  	  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;ENR_HISTORCUMUL<16,j>+ENR_DETAILCALCUL<28,i>)
	  IF ENR_DETAILCALCUL<9,i>="" THEN  
 	       ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,j;ENR_HISTORCUMUL<17,j>+ENR_DETAILCALCUL<12,i>)
	  END ELSE
	       ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,j;ENR_HISTORCUMUL<17,j>+ENR_DETAILCALCUL<9,i>)
	  END
  	  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,18,j;ENR_HISTORCUMUL<18,j>+ENR_DETAILCALCUL<11,i>)
  	  ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,19,j;ENR_HISTORCUMUL<19,j>+ENR_DETAILCALCUL<14,i>)
      END ELSE	
          IF ENR_HISTORCUMUL<15,j> = "" THEN
	      W_Count=DCOUNT(ENR_HISTORCUMUL<15>,CHAR(253))
	      ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,15,W_Count+1;ENR_DETAILCALCUL<8,i>)
              W_ENRHISTORCUMUL<1,W_Count+1>="0"	      

	      IF ENR_RUBCHARGE<18>="3" THEN
                   IF ENR_RUBCHARGE<16>="01" THEN
	              ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,W_Count+1;ENR_DETAILCALCUL<28,i>)
	              IF ENR_DETAILCALCUL<9,i>="" THEN
	                 ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_DETAILCALCUL<12,i>)
                      END ELSE
	                 ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_DETAILCALCUL<9,i>)
                      END
                   END ELSE
	              ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,W_Count+1;W_CumulBrut+ENR_DETAILCALCUL<28,i>)
	              IF ENR_DETAILCALCUL<9,i>="" THEN
	                 ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;W_CumulBrut+ENR_DETAILCALCUL<12,i>)
                      END ELSE
	                 ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;W_CumulBrut+ENR_DETAILCALCUL<9,i>)
                      END
                   END
	      END ELSE
	           ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,W_Count+1;ENR_HISTORCUMUL<16,W_Count+1>+ENR_DETAILCALCUL<28,i>)
	           IF ENR_DETAILCALCUL<9,i>="" THEN
	              ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_HISTORCUMUL<17,W_Count+1>+ENR_DETAILCALCUL<12,i>)
                   END ELSE
	              ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,17,W_Count+1;ENR_HISTORCUMUL<17,W_Count+1>+ENR_DETAILCALCUL<9,i>)
                   END
  	      END
	      ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,18,W_Count+1;ENR_HISTORCUMUL<18,W_Count+1>+ENR_DETAILCALCUL<11,i>)
  	      ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,19,W_Count+1;ENR_HISTORCUMUL<19,W_Count+1>+ENR_DETAILCALCUL<14,i>)
	  END
      END		
      i=i+1	
  REPEAT

* MAJ CUMUL D'ASSIETTE BRUTE (ATT 16 D'HISTORCUMUL) POUR RUBRIQUE URSSAF NON PRESENTE DANS
* FICHIER DETAILCALCUL
  W_Count=DCOUNT(W_ENRHISTORCUMUL<1>,CHAR(253))
  FOR j=1 TO W_Count
     IF W_ENRHISTORCUMUL<1,j>#"1" THEN
        READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_HISTORCUMUL<15,j> ELSE ENR_RUBCHARGE=""
        IF ENR_RUBCHARGE<16>="01" THEN
	   READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> THEN
	      IF ENR_TRANCHE<10>="02" THEN
                 D=1
                 LOOP
                  UNTIL ENR_DETAILCALCUL<49,D>="" OR ENR_DETAILCALCUL<49,D>=ENR_HISTORCUMUL<15,j> DO
                   D=D+1
                 REPEAT
                 IF ENR_DETAILCALCUL<49,D>="" THEN
                  IF W_ENRHISTORCUMUL<1,j>="0" THEN
                     IF W_ENTREESURMOIS="NON" THEN ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;W_CUMASSURSSAFPLAF+W_BASEURSSAFPLAF)
                  END ELSE
                     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;ENR_HISTORCUMUL<16,j>+W_BASEURSSAFPLAF)
                  END
                 END
              END
	      IF ENR_TRANCHE<10>="01" THEN
                 D=1
                 LOOP
                  UNTIL ENR_DETAILCALCUL<49,D>="" OR ENR_DETAILCALCUL<49,D>=ENR_HISTORCUMUL<15,j> DO
                   D=D+1
                 REPEAT
                 IF ENR_DETAILCALCUL<49,D>="" THEN
                  IF W_ENRHISTORCUMUL<1,j>="0" THEN
                     IF W_ENTREESURMOIS="NON" THEN ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;W_CUMASSURSSAFTOT+W_BASEURSSAFTOT)
                  END ELSE
                     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,16,j;ENR_HISTORCUMUL<16,j>+W_BASEURSSAFTOT)
                  END
                 END
              END
           END
        END
     END	 
  NEXT j

  W_RUBAFFECT=""
  * MAJ HISTORCUMUL POUR RUBRIQUES DE CHARGE A 0 (ATT 49 ET 50 DE DETAILCALCUL)
   GOSUB 11

  IF ENR_HISTORCUMUL<8> = "" THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,8;"0")
  END 

  IF ENR_HISTORCUMUL<10> = "" THEN
     ENR_HISTORCUMUL=REPLACE(ENR_HISTORCUMUL,10;"0")
  END 

  WRITE ENR_HISTORCUMUL ON F.HISTORCUMUL,W_CleHistorCumul
RETURN

*********************************************************
*********************************************************
11 *

* Didier 02/05/2011 - Nourriture attribut 17 HISTORCUMUL pour rub 904 et 907 si ne concerne pas 
* un personnel de production rattach  un profil de paie avec exo AAD et non exo
W_RUBAADNONEXO=""
W_RUBAADEXOAAD=""
FonctionContrat=ENR_CONTRAT<6>
READ ENR_PROFIL FROM F.PROFIL,ENR_CONTRAT<26> ELSE ENR_PROFIL=""
RubChgProfil=EXTRACT(ENR_PROFIL,3)
I=1
W_FINRECHRUBAAD="NON"
LOOP
 UNTIL RubChgProfil<1,I>="" OR W_FINRECHRUBAAD="OUI" DO
  CodRubChg=RubChgProfil<1,I>
  READ ENR_RUBCHARGE FROM F.RUBCHARGE,CodRubChg ELSE ENR_RUBCHARGE=""
  RegulRubChg=EXTRACT(ENR_RUBCHARGE,18)
  RubAADRubChg=EXTRACT(ENR_RUBCHARGE,28)
  ExoAADRubChg=EXTRACT(ENR_RUBCHARGE,29)
  IF RubAADRubChg=1 AND RegulRubChg=1 THEN
   IF ExoAADRubChg=0 THEN W_RUBAADNONEXO=CodRubChg
   IF ExoAADRubChg=1 THEN W_RUBAADEXOAAD=CodRubChg
  END
  IF W_RUBAADNONEXO#"" AND W_RUBAADEXOAAD#"" THEN W_FINRECHRUBAAD="OUI"
  I=I+1
REPEAT
*
      I=1
      LOOP
       UNTIL ENR_DETAILCALCUL<49,I>="" DO
         * RECHERCHE DANS HISTORCUMUL
	 K=1
	 LOOP 
          UNTIL ENR_HISTORCUMUL<15,K>=ENR_DETAILCALCUL<49,I> OR ENR_HISTORCUMUL<15,K>="" DO
	   K=K+1
	 REPEAT
	 * SI RUB TROUVEE DANS HISTORCUMUL
       IF ENR_DETAILCALCUL<50,I>="" THEN ENR_DETAILCALCUL<50,I>=0
	 IF ENR_HISTORCUMUL<15,K><>"" THEN
          ENR_HISTORCUMUL<16,K>=ENR_HISTORCUMUL<16,K>+ENR_DETAILCALCUL<50,I>

* Didier 02/05/2011 - Rub 904 et 907 - Reduction FILLON
          IF ENR_HISTORCUMUL<15,K>="904" OR ENR_HISTORCUMUL<15,K>="907" THEN
             IF FonctionContrat="P" AND W_RUBAADNONEXO#"" AND W_RUBAADEXOAAD#"" THEN
                NULL
             END ELSE
                ENR_HISTORCUMUL<17,K>=ENR_HISTORCUMUL<17,K>+ENR_DETAILCALCUL<50,I>
             END
          END
*
	 END ELSE
	    ENR_HISTORCUMUL<15,-1>=ENR_DETAILCALCUL<49,I>
          READ ENR_RUBCHARGE FROM F.RUBCHARGE,ENR_DETAILCALCUL<49,I> ELSE ENR_RUBCHARGE=""
          IF ENR_RUBCHARGE<16>="01" THEN
           READ ENR_TRANCHE FROM F.TRANCHE,ENR_RUBCHARGE<2> THEN
            IF ENR_TRANCHE<10>="02" THEN
             IF W_ENTREESURMOIS="OUI" THEN
              ENR_HISTORCUMUL<16,-1>=ENR_DETAILCALCUL<50,I>
             END ELSE
              ENR_HISTORCUMUL<16,-1>=W_CUMASSURSSAFPLAF+ENR_DETAILCALCUL<50,I>
             END
	       ENR_HISTORCUMUL<17,-1>="0"
            END ELSE
             IF ENR_TRANCHE<10>="01" THEN
              IF W_ENTREESURMOIS="OUI" THEN
               ENR_HISTORCUMUL<16,-1>=ENR_DETAILCALCUL<50,I>
              END ELSE
               ENR_HISTORCUMUL<16,-1>=W_CUMASSURSSAFTOT+ENR_DETAILCALCUL<50,I>
              END

* Didier 02/05/2011 - Rub 904 et 907 - Reduction FILLON
              IF ENR_DETAILCALCUL<49,I>="904" OR ENR_DETAILCALCUL<49,I>="907" THEN
                 IF FonctionContrat="P" AND W_RUBAADNONEXO#"" AND W_RUBAADEXOAAD#"" THEN
	              ENR_HISTORCUMUL<17,-1>="0"
                 END ELSE
                    ENR_HISTORCUMUL<17,-1>=ENR_DETAILCALCUL<50,I>
                 END
              END ELSE
				ENR_HISTORCUMUL<17,-1>="0"
			  END
*
             END ELSE
              ENR_HISTORCUMUL<16,-1>=ENR_DETAILCALCUL<50,I>
	        ENR_HISTORCUMUL<17,-1>="0"
             END
            END
           END
          END ELSE
           ENR_HISTORCUMUL<16,-1>=ENR_DETAILCALCUL<50,I>
	     ENR_HISTORCUMUL<17,-1>="0"
          END
	    ENR_HISTORCUMUL<18,-1>="0"
	    ENR_HISTORCUMUL<19,-1>="0"
	 END
       I=I+1
      REPEAT

RETURN

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

50 *

   W_CLEDETAILCALCUL=W_CODECONTRAT:W_PERIODE

   READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CLEDETAILCALCUL ELSE
	RETURN
   END

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


              *  Controle pour Creation nouveau DetailPrest
              GOSUB 2000

	     END ELSE
		  IF ENR_ACTIVITE<12>="M" THEN
		       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 OU PREVENANCE
	BEGIN CASE
  	     CASE ENR_DETAILCALCUL<2,I>="802" OR ENR_DETAILCALCUL<2,I>="803" OR ENR_DETAILCALCUL<2,I>="817" OR ENR_DETAILCALCUL<2,I>="843"
		  IF W_JOURCONGESCP=0 AND W_JOURCONGESCA=0 AND W_JOURCONGESCF=0 AND W_JOURCONGESCPREV=0 THEN GOSUB 60
	     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 OU PREVENANCE
	BEGIN CASE
  	     CASE ENR_DETAILCALCUL<33,I>="802" OR ENR_DETAILCALCUL<33,I>="803" OR ENR_DETAILCALCUL<33,I>="817" OR ENR_DETAILCALCUL<2,I>="843"
		  IF W_JOURCONGESCP=0 AND W_JOURCONGESCA=0 AND W_JOURCONGESCF=0 AND W_JOURCONGESCPREV=0 THEN GOSUB 60
	     CASE ENR_DETAILCALCUL<33,I>="804"
		  W_JOURCONGESCPS=1
	END CASE
        I=I+1
   REPEAT

   * MAJ DES COMPTEURS
   GOSUB 70

   IF W_TYPEPERSONNEL=1 THEN
      * Suppression du DETAILADMIN (JEROME)
      DELETE F.DETAILADMIN,W_CLEDETAILCALCUL
   END

RETURN

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

60 *

   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
			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILADMIN<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILADMIN<1,J>="803" THEN
			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILADMIN<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILADMIN<1,J>="817" THEN
			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILADMIN<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILADMIN<1,J>="843" THEN
			        W_JOURCONGESCPREV=W_JOURCONGESCPREV+ENR_DETAILADMIN<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       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
			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILMANDAT<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILMANDAT<1,J>="803" THEN
			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILMANDAT<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILMANDAT<1,J>="817" THEN
			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILMANDAT<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILMANDAT<1,J>="843" THEN
			        W_JOURCONGESCPREV=W_JOURCONGESCPREV+ENR_DETAILMANDAT<6,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       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
			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILPREST<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILPREST<5,J>="803" THEN
 			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILPREST<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILPREST<5,J>="817" THEN
 			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILPREST<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILPREST<5,J>="843" THEN
			        W_JOURCONGESCPREV=W_JOURCONGESCPREV+ENR_DETAILPREST<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       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
 			        W_JOURCONGESCP=W_JOURCONGESCP+ENR_DETAILINTER<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILINTER<8,J>="803" THEN
 			        W_JOURCONGESCA=W_JOURCONGESCA+ENR_DETAILINTER<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILINTER<8,J>="817" THEN
 			        W_JOURCONGESCF=W_JOURCONGESCF+ENR_DETAILINTER<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       END
		       IF ENR_DETAILINTER<8,J>="843" THEN
 			        W_JOURCONGESCPREV=W_JOURCONGESCPREV+ENR_DETAILINTER<14,J>
			        W_ANCIENCODE=W_CLEDETAILCALCUL
		       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_CONTRAT<1>="02" AND ENR_CONTRAT<31>=1 THEN
	   W_JOURCONGESCP=ENR_DETAILCALCUL<47>
       END

       * CONGES PAYES
       IF ENR_CONTRAT<39>-W_JOURCONGESCP>=0 THEN
           ENR_CONTRAT<39>=ENR_CONTRAT<39>-W_JOURCONGESCP
       END ELSE
	   * SI PAS ASSEZ DE DROITS
           ENR_CONTRAT<83>=ENR_CONTRAT<83>+(W_JOURCONGESCP-ENR_CONTRAT<39>)
           ENR_CONTRAT<39>=0
       END

       * CONGES ANCIENNETE
       IF ENR_CONTRAT<48>-W_JOURCONGESCA>=0 THEN
           ENR_CONTRAT<48>=ENR_CONTRAT<48>-W_JOURCONGESCA
       END ELSE
			ENR_CONTRAT<83>=ENR_CONTRAT<83>+(W_JOURCONGESCA-ENR_CONTRAT<48>)
           ENR_CONTRAT<48>=0
       END
       * CONGES FRACTIONNEMENT
       IF ENR_CONTRAT<41>-W_JOURCONGESCF>=0 THEN
           ENR_CONTRAT<41>=ENR_CONTRAT<41>-W_JOURCONGESCF
       END ELSE
			ENR_CONTRAT<83>=ENR_CONTRAT<83>+(W_JOURCONGESCF-ENR_CONTRAT<41>)
           ENR_CONTRAT<41>=0
       END
       * CONGES PREVENANCE
       IF ENR_CONTRAT<110>-W_JOURCONGESCPREV>=0 THEN
           ENR_CONTRAT<110>=ENR_CONTRAT<110>-W_JOURCONGESCPREV
       END ELSE
			ENR_CONTRAT<83>=ENR_CONTRAT<83>+(W_JOURCONGESCPREV-ENR_CONTRAT<110>)
			ENR_CONTRAT<110>=0
       END	   
	   
   END ELSE
       ENR_CONTRAT<38>=0
       ENR_CONTRAT<39>=0
       ENR_CONTRAT<40>=0
       ENR_CONTRAT<41>=0
       ENR_CONTRAT<44>=0
       ENR_CONTRAT<45>=0
       ENR_CONTRAT<46>=0
       ENR_CONTRAT<47>=0
       ENR_CONTRAT<48>=0
       ENR_CONTRAT<85>=0
       ENR_CONTRAT<86>=0
       ENR_CONTRAT<109>=0
       ENR_CONTRAT<110>=0	   
       WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT
   END

RETURN

*********************************************************
*********************************************************
* CALCUL DU TAUX HORAIRE + COEFFICIENT

80 *

   * CALCULE DERNIER JOUR PERIODE SUIVANTE
   READ ENR_PERIODESPAIE FROM F.PERIODESPAIE,"1" ELSE
       STOP
   END
   W_PERIODESPAIE=ENR_PERIODESPAIE<1>+1
   IF W_PERIODESPAIE[5,2]=13 THEN
	  * Modif Greg - 12/01/10 - La ligne suivante est incorrecte. Il faut prendre l'anne entire
	  * et pas seulement la dernire unit. Par exemple si la priode est 200913, le code qui suit
	  * fait qu'on obtient 20010 et non 2010. Du coup sur la ligne d'aprs, quand on fait un [1,4],
	  * on a 200101, au lieu de 201001.
      *W_PERIODESPAIE[4,1]=W_PERIODESPAIE[4,1]+1
	  W_PERIODESPAIE[1,4]=W_PERIODESPAIE[1,4]+1
	  * Fin modif Greg - 12/01/10
      W_PERIODESPAIE=W_PERIODESPAIE[1,4]:"01"
   END

   W_PARAMS=""
   W_SORTIE=""
   W_PARAMS<1>=W_CleContrat
   W_PARAMS<2>="0"
   W_PARAMS<3>=W_PERIODESPAIE

   CALL CALCCOEFFTXHOR("",W_PARAMS,W_SORTIE)

   W_COEFF=W_SORTIE<1>
   W_TAUXHOR=W_SORTIE<2>
   W_TAUXHORDIMJF=W_SORTIE<3>

   IF W_PERIODESPAIE[5,2]=12 THEN
      W_DERNIERJOURMOIS="31 12 ":W_PERIODESPAIE[1,4]
      W_DERNIERJOURMOIS=ICONV(W_DERNIERJOURMOIS,"D4 ")
   END ELSE
      W_DERNIERJOURMOIS=W_PERIODESPAIE+1
      W_DERNIERJOURMOIS="01 ":W_DERNIERJOURMOIS[5,2]:" ":W_DERNIERJOURMOIS[1,4]
      W_DERNIERJOURMOIS=ICONV(W_DERNIERJOURMOIS,"D4 ")-1
   END

   * VERIFIE SI PLUSIEURS AVENANTS DISPONIBLES
   IF ENR_CONTRAT<14,2> # "" THEN
       * RECHERCHE DE L'AVENANT EN COURS
       J=1
       LOOP
       UNTIL ENR_CONTRAT<15,J+1> > W_DERNIERJOURMOIS OR ENR_CONTRAT<15,J+1>="" DO
	    J=J+1
       REPEAT
   END ELSE
       J=1
   END

   IF ENR_CONTRAT<20,J> # "" THEN
       * LECTURE FICHIER GRILLESCC
       READ ENR_GRILLESCC FROM F.GRILLESCC,ENR_CONTRAT<20,J> THEN

          IF W_TAUXHOR # 0 THEN
	     IF ENR_GRILLESCC<5>="C" THEN
		ENR_CONTRAT<22,J>=W_COEFF
		ENR_CONTRAT<23,J>=W_TAUXHOR
	     END ELSE
	        ENR_CONTRAT<23,J>=W_TAUXHOR
	     END
          END
       END
          
   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" 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
		 * MODIF VANESSA 16/12/10 - DA 10187-01
		 IF W_AIDANTABSPERIODEPREC # W_CLEABSENCE[1,5] THEN
			W_AIDANTABSPERIODEPREC=""
		 END ELSE
			IF W_DEBUTPERIODE <= W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7] AND W_FINPERIODE >= W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7] THEN
				W_TOTALJRSABSMALADIE=0
			END
		 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

 	     * GESTION DES ABSENCES AUTRES QUE MALADIE MATERNITE
	     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

* Mise a jour des 10 % du BS.

   IF W_DEBUTCONTRAT <= W_DEBUTPERIODE THEN
		* Modif Greg - 12/09/11 - DA11032
		* Si il y a prennisation des congs, il faut appliquer une proratisation sur les congs acquis,
		* ce qui n'tais pas fait avant puisque les congs taient forcment solds. Donc la personne
		* qui a fait le programme n'a pas pri le temps de grer la proratisation.
		IF ENR_CONTRAT<116><>"" AND ENR_CONTRAT<8><>"" THEN
			W_PerDateFin=OCONV(ENR_CONTRAT<8>,"D4/")[7,4]:OCONV(ENR_CONTRAT<8>,"D4/")[4,2]
			IF W_PerDateFin=W_PERIODEFACT THEN
				W_NBJOURPRESENT=INT((((250/W_NbJourMois)*OCONV(ENR_CONTRAT<8>,"D4/")[1,2])+(1/200))*100)
			END ELSE
				W_NBJOURPRESENT=250
			END
		END ELSE
			W_NBJOURPRESENT=250
		END
   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
*Modif CLEMENT DA9140 30/09/09
	W_CountConv77 = DCOUNT(ENR_CONVENTIONCOL<77>, CHAR(253))
	W_CountTabPrev = DCOUNT(W_TabPrev, CHAR(254))

	W_TabPrevConv77<1> = ENR_CONVENTIONCOL<77>

	FOR iTabPrev = 1 TO  W_CountTabPrev
		W_TROUVE = "FALSE"
		FOR jTabConv77 = 1 TO W_CountConv77
			IF W_TabPrev<iTabPrev> = W_TabPrevConv77<1, jTabConv77> THEN
				W_TROUVE = "TRUE"
				EXIT
			END
		NEXT jTabConv77
		IF W_TROUVE = "FALSE" THEN
			W_TabPrevConv77<1,-1> = W_TabPrev<iTabPrev>
		END
	NEXT iTabPrev
*Fin Modif CLEMENT

* Didier 15/12/2010 - Bug sur parcours avec W_CountRubPrev - il faut prendre le count de W_TabPrevConv77
    W_CountTabPrevConv77 = DCOUNT(W_TabPrevConv77, CHAR(253))

    W_CountDet2=DCOUNT(ENR_DETAILCALCUL<2>,CHAR(253))
    FOR iDet2=1 TO W_CountDet2
*       FOR iRubPrev=1 TO W_CountRubPrev
       FOR iRubPrev=1 TO W_CountTabPrevConv77
			*Modif Clement Remplac par le nouveau tableau
          IF ENR_DETAILCALCUL<2,iDet2> = W_TabPrevConv77<1, 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
			* Modif Greg - 12/03/12 - DA11073 - Le motif 05 doit tre gr comme le motif 01
			* modif vanessa 09/11/12 - DA 12095 - motif 05 ne doit plus tre trait comme motif 01
			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

				* Modif Greg - 24/02/10 - DA10054-01. On gre
				* une nouvelle variable : W_NBSUSPENSIONMAL
				IF W_CODECONVENTION = "02" THEN
					W_NBSUSPENSIONMAL=W_NBSUSPENSION
				END ELSE
					READ ENR_COMPTEUR FROM F.COMPTEUR, ENR_CONTRAT<2> THEN
						IF ENR_COMPTEUR<11><>"" THEN
							W_NBSUSPENSIONMAL=ENR_COMPTEUR<11>*100
						END ELSE
							W_NBSUSPENSIONMAL=W_NBSUSPENSION
						END
					END ELSE
						W_NBSUSPENSIONMAL=W_NBSUSPENSION
					END
				END
				* Fin modif Greg - 24/02/10		
				
				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
					
				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_NBJOURNONINDEM=W_NBJOURABSMALADIE - W_NBJOURINDEM
						IF W_NBJOURNONINDEM > 0 THEN
							W_NBJOURABS=W_NBJOURNONINDEM
							GOSUB 301
							W_TOTNBJOURCONGES=W_TOTNBJOURCONGES + W_NBJOURCONGES
							* Modif Greg - 24/02/10 - DA10054-01 - L'att. 70 sera renseign quelques lignes plus bas.
							*ENR_CONTRAT<70>=ENR_CONTRAT<70>+W_NBJOURNONINDEM
						END

					END ELSE
						GOSUB 301              
						W_TOTNBJOURCONGES=W_TOTNBJOURCONGES + W_NBJOURCONGES
						* Modif Greg - 24/02/10 - DA10054-01 - L'att. 70 sera renseign quelques lignes plus bas.
						*ENR_CONTRAT<70>=ENR_CONTRAT<70>+W_NBJOURABSMALADIE
					END
				END
				
				* Modif Greg - 24/02/10 - DA10054-01 - Ajout du pav qui suit,
				* pour renseigner l'att. 70 (en remplacement des lignes un peu
				* plus haut qui taient utilises avant).
				IF W_CUMULJOURMALADIE > W_NBSUSPENSIONMAL THEN
					W_NBJOURINDEM=W_NBSUSPENSIONMAL - (W_CUMULJOURMALADIE - W_NBJOURABSMALADIE)


					IF W_NBJOURINDEM > 0 THEN
						W_NBJOURNONINDEM=W_NBJOURABSMALADIE - W_NBJOURINDEM
						IF W_NBJOURNONINDEM > 0 THEN
							ENR_CONTRAT<70>=ENR_CONTRAT<70>+W_NBJOURNONINDEM
						END
					END ELSE
						ENR_CONTRAT<70>=ENR_CONTRAT<70>+W_NBJOURABSMALADIE
					END
				END
				* Fin modif Greg - 24/02/10
			
			* 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
				
			* modif vanessa 09/11/12 - DA 12095 - GESTION MOTIF 05 COMME MOTIF 04 ET 06
			CASE W_CODEABSENCE="04" OR W_CODEABSENCE="06" OR W_CODEABSENCE="05"
			
				* Modif Greg - 12/03/12 - Ajout d'une gestion spcifique pour les motifs 04 et 06.
				IF W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7]<W_DEBUTPERIODE THEN
					* Si l'absence a dbut avant la priode, on calcule le nombre de jours d'abs
					* dj "passs". En tenant compte d'un ventuel dbut d'absence  la mi-journe.
					W_NBJOURABSAVANT=W_DEBUTPERIODE-W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7]
					W_NBJOURABSAVANT=W_NBJOURABSAVANT*100
					
					IF ENR_ABSENCESAIDANT<1>=2 THEN W_NBJOURABSAVANT=W_NBJOURABSAVANT-50
					
				END ELSE
					W_NBJOURABSAVANT=0
				END
				
				GOSUB 300
				
				IF W_NBJOURABSAVANT+W_NBJOURABS>36500 THEN
					* Si l'absence a plus d'un an, alors on ajoute la gestion prvue par le DA : au-del d'un an
					* d'absence, il n'y a plus de droits.
					* Dans un premier temps il faut dterminer quand a lieu le dpassement d'un an.
					W_DUREEABSMOIS=36500-W_NBJOURABSAVANT
					IF W_DUREEABSMOIS>0 THEN
						IF W_NBJOURABS>W_DUREEABSMOIS THEN
							* L'absence dpasse 1 an pendant le mois en cours. Donc certains jours sont
							*  prendre en compte et ceux qui dpassent sont  mettre en suspension.
							ENR_CONTRAT<70>=ENR_CONTRAT<70>+(W_NBJOURABS-W_DUREEABSMOIS)
							W_NBJOURABS=W_NBJOURABS-W_DUREEABSMOIS
							GOSUB 301
							W_TOTNBJOURCONGES=W_TOTNBJOURCONGES+W_NBJOURCONGES
							W_NBJOURABS=W_DUREEABSMOIS
							GOSUB 10100
						END ELSE
							* L'absence ne dpasse toujours pas 1 an malgr le nouveau mois.
							* Il n'y a donc toujours aucune perte de droits
							GOSUB 10100
						END
					END ELSE
						* L'absence a dj plus d'un an avant le mois en cours de traitement.
						* Donc plus aucun droit et les jours d'abs du mois sont des jours de suspension.
						ENR_CONTRAT<70>=ENR_CONTRAT<70>+W_NBJOURABS
						GOSUB 301
						W_TOTNBJOURCONGES=W_TOTNBJOURCONGES+W_NBJOURCONGES
					END
				END ELSE
					* Si l'absence a moins d'un an, alors il n'y a aucune perte des droits.
					GOSUB 10100
				END
			CASE 1 

				GOSUB 300
				GOSUB 10100
          
		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
	* Modif Greg - 14/03/12 - Le retrai d'une demi-journe doit se faire uniquement si le dbut
	* ou la fin de l'absence (en fonction de ce qu'on teste) est sur la priode. Par exemple
	* si l'absence dbut avant la priode, il ne faut pas retirer une demi-journe puisque sur
	* le mois en cours, l'absence est effective ds le 01 au matin.
	IF CLE[8,LEN(CLE)-7]>=W_DEBUTPERIODE THEN IF ENR_ABSENCESAIDANT<1>=2 THEN W_NBJOURABS=W_NBJOURABS-50
	IF ENR_ABSENCESAIDANT<2><=W_FINPERIODE THEN 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 DES DROITS AUX CONGES (TYPE 12 OU 13)

3011 *
 
   * CALCUL AU PRORATA DES JOURS DE CONGES
    W_NBJOURPRESENT=W_NBJOURABS
    IF W_NBJOURPRESENT>3000 THEN W_NBJOURPRESENT=3000
    W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
    W_NBJOURCONGES=W_NBJOURCONGES+1/2
    W_NBJOURCONGES=INT(W_NBJOURCONGES)
	      			
    * 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_HEURESABSENCES=ENR_DETAILCALCUL<6>*10/100
    W_MONTANTABSENCES=ENR_DETAILCALCUL<7>*10/100

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  

	* MODIF VANESSA 16/12/10 - DA 10187-01
	W_DATEDEBUTABS = W_CLEABSENCE[8,LEN(W_CLEABSENCE)-7]
	IF W_DATEDEBUTABS < W_DEBUTANNEE THEN
		W_DEBUTANNEETEMP=W_DATEDEBUTABS
		W_AIDANTABSPERIODEPREC=W_CLEABSENCE[1,5]
	END ELSE
		W_DEBUTANNEETEMP=W_DEBUTANNEE
	END
	
    IF W_DEBUTANNEETEMP#W_DEBUTPERIODE THEN
		* Modif Greg - 12/03/12 - DA11073 - Le motif 05 doit tre grer comme le motif 01  partir de la sub 200.
		* modif vanessa 09/11/12 - DA 12095 - motif 05 ne doit plus tre trait comme motif 01
		EXECUTE 'TSELECT ABSENCESAIDANT AVEC CodAbsAidant = "':W_CODEAIDANT:']" AND AVEC NumMotifAidant = "01" AND AVEC 2 >= "':W_DEBUTANNEETEMP:'" 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_DEBUTANNEETEMP THEN
        * FIN ABSENCES <= FIN MOIS
		IF ENR_ABSENCESAIDANTCUM<2>>=W_DEBUTANNEETEMP THEN
			IF ENR_ABSENCESAIDANTCUM<2><=W_PERIODECOURS THEN
				W_NBJOURABSCUMUL=ENR_ABSENCESAIDANTCUM<2>-W_DEBUTANNEETEMP+1
			END ELSE
				W_NBJOURABSCUMUL=W_PERIODECOURS-W_DEBUTANNEETEMP+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

*********************************************************
*********************************************************
* CALCUL DES DROITS AUX CONGES (MALADIE)

310 *
 
   * CALCUL AU PRORATA DES JOURS DE CONGES
    W_NBJOURPRESENT=3000-W_NBJOURABSMALADIE
    IF W_NBJOURPRESENT<0 THEN W_NBJOURPRESENT=0
    W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
    W_NBJOURCONGES=W_NBJOURCONGES+1/2
    W_NBJOURCONGES=INT(W_NBJOURCONGES)    		
	
    * 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_HEURESABSENCES=ENR_DETAILCALCUL<6>*10/100
    W_MONTANTABSENCES=ENR_DETAILCALCUL<7>*10/100

RETURN

*********************************************************
*********************************************************
* CALCUL DES DROITS AUX CONGES <> 01,12,13

320 *

    IF W_DEBUTCONTRAT<W_DEBUTPERIODE THEN
         W_NBJOURPRESENT=3000
         W_NBJOURCONGES=250
    END ELSE
         * CALCUL AU PRORATA DES JOURS DE CONGES
         W_NBJOURPRESENT=W_DEBUTCONTRAT-W_DEBUTPERIODE
         W_NBJOURPRESENT=W_NBJOURPRESENT*100
         IF W_NBJOURPRESENT>3000 THEN W_NBJOURPRESENT=3000
	 W_NBJOURPRESENT=3000-W_NBJOURPRESENT
         W_NBJOURCONGES=250*W_NBJOURPRESENT/3000
         W_NBJOURCONGES=W_NBJOURCONGES+1/2
         W_NBJOURCONGES=INT(W_NBJOURCONGES)   
    END

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

    * RECHERCHE DES RUBRIQUES 807 - 808
    J=1
    LOOP 
	 UNTIL ENR_DETAILCALCUL<2,J>="" DO
			
	 * SI RUB 807 - 808, CALCULE LE MONTANT DE L'ARRET
	 IF ENR_DETAILCALCUL<2,J>="807" OR ENR_DETAILCALCUL<2,J>="808" THEN
 	      W_MONTANTARRET=W_MONTANTARRET+ENR_DETAILCALCUL<5,J>
         END

	 J=J+1
    REPEAT		  

    * SI W_MONTANTARRET <> 0 
    IF W_MONTANTARRET<>0 THEN
	 W_BRUTARRET=ENR_DETAILCALCUL<7>-W_MONTANTARRET
	 W_HEURESARRET=ENR_DETAILCALCUL<6>
    END ELSE
	 W_BRUTARRET=ENR_DETAILCALCUL<7>
	 W_HEURESARRET=ENR_DETAILCALCUL<6>
    END	 

    W_SORTIE="FAUX"
    W_VALEURHEURESJOUR=INT((W_HEURESARRET*10/100)+1/2)
    W_VALEURMONTJOUR=INT((W_BRUTARRET*10/100)+1/2)  

RETURN

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

500 *

    * TEST DE LA PERIODE EN COURS

    * BASCULEMENT COMPTEUR
    READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,W_CODECONVENTION ELSE
		STOP
    END

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

	* modif vanessa 11/04/12 - DA 11089
	* modif vanessa 02/11/12 DA 12107-01
	IF ENR_CONTRAT<1> = "01" OR ENR_CONTRAT<1> = "06" OR ENR_CONTRAT<1> = "04" THEN
		W_DEBUTCONTRAT=INT(W_DEBUTCONTRAT+(ENR_CONTRAT<70>/100))
		W_DEBUTCONTRATANC=INT(W_DEBUTCONTRATANC+(ENR_CONTRAT<70>/100))
	END

    W_DATEDEBUTCONTRAT=OCONV(W_DEBUTCONTRAT,"D4/")
    W_DATEDEBUTCONTRAT=W_DATEDEBUTCONTRAT[7,4]:W_DATEDEBUTCONTRAT[4,2]
    IF ENR_CONTRAT<97> # "" 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 CONTRAT - 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
			* modif vanessa 11/04/12 - DA 11089			
			* modif vanessa 02/11/12 DA 12107-01
			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
			* modif vanessa 11/04/12 - DA 11089		
			* modif vanessa 02/11/12 DA 12107-01			
			IF ENR_CONVENTIONCOL<13>=1 THEN
				GOSUB 700
			END
		END
    END
    * VERIFICATION SI BASCULEMENT CONGES ANCIENNETE MOIS ANNIVERSAIRE
	* modif vanessa 02/11/12 DA 12107-01	
    IF (ENR_CONTRAT<1> = "01" OR ENR_CONTRAT<1> = "06") AND ENR_CONVENTIONCOL<13>=1 THEN
		IF (ENR_CONVENTIONCOL<28> = 0 AND W_PERIODE[5,2]="05") OR (ENR_CONVENTIONCOL<28> = 1 AND W_PERIODE[5,2]="12") THEN
			NULL
		END ELSE
			IF W_DATEDEBUTCONTRATANC[5,2]=W_PERIODE[5,2] THEN GOSUB 700
		END
    END ELSE
		IF ENR_CONVENTIONCOL<13>=2 THEN
			IF W_DATEDEBUTCONTRATANC[5,2]=W_PERIODE[5,2] THEN
				GOSUB 700
			END	
		END
    END         

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

		* GESTION DES CONGES DE FRACTIONNEMENT
		GOSUB 800
 
    END

***    WRITE ENR_CONTRAT ON F.CONTRAT,W_CODECONTRAT    

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

600 *

    * CONVERSION OUVRABLES / OUVRES SI CONV. COL. LE PERMET
    * W_SAUVATT44=ENR_CONTRAT<44>
    IF ENR_CONVENTIONCOL<2>=1 THEN
		ENR_CONTRAT<44>=ENR_CONTRAT<44>*5/6
    END
	
	* modif vanessa 04/12/12 - DA 12108
    ENR_CONTRAT<44>=INT((ENR_CONTRAT<44>+99)/100)*100
	
    IF ENR_CONVENTIONCOL<2>=1 THEN
		W_Att44Ouvrable=ENR_CONTRAT<44>*6/5
		W_Att44Ouvrable=INT(W_Att44Ouvrable+0.5)
	END ELSE
		W_Att44Ouvrable=ENR_CONTRAT<44>
	END
	
    W_NBJOURCONGESTOTAL=W_Att44Ouvrable
	
	* modif vanessa 04/12/12 - DA 12108 - mis en commentaire
    * ARRONDI LE NBRE DE JOURS CONGES A L'ENTIER SUPERIEUR
    *IF W_NBJOURCONGESTOTAL<>0 THEN
	*	W_NBJOURCONGESTOTAL=INT((ENR_CONTRAT<44>/100)+.99)
    *END
    *W_NBJOURCONGESTOTAL=W_NBJOURCONGESTOTAL*100

    * CALCULE LA VALEUR D'UNE JOURNEE EN HRES + MONTANT
    W_VALEURTOTALHEURES=ENR_CONTRAT<45>/W_NBJOURCONGESTOTAL
    W_VALEURTOTALMONTANT=ENR_CONTRAT<46>/W_NBJOURCONGESTOTAL

    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_CONTRAT<42>=W_VALEURTOTALHEURES
    ENR_CONTRAT<43>=W_VALEURTOTALMONTANT

	* retire les ventuels jours pris par anticipation  de l'acquisition
    ENR_CONTRAT<44>=ENR_CONTRAT<44>-ENR_CONTRAT<83>
	* modif vanessa 04/12/12 - DA 12108 - CONVERTIT CF
	IF ENR_CONVENTIONCOL<2>#ENR_CONVENTIONCOL<42> THEN
		IF ENR_CONVENTIONCOL<42>=1 THEN
			ENR_CONTRAT<41>=INT(ENR_CONTRAT<41>*6/5)
		END ELSE
			ENR_CONTRAT<41>=INT(ENR_CONTRAT<41>*5/6)
		END
		W_Dec=ENR_CONTRAT<41>[LEN(ENR_CONTRAT<41>)-1,2]
		IF LEN(ENR_CONTRAT<41>)=2 THEN
			W_Ent=0
		END ELSE
			W_Ent=ENR_CONTRAT<41>[1,LEN(ENR_CONTRAT<41>)-2]
		END
		IF W_Dec >= 1 AND W_Dec <= 49 THEN
			ENR_CONTRAT<41>=W_Ent:"50"
		END ELSE
			IF W_Dec >= 51 THEN
				ENR_CONTRAT<41>=W_Ent+1:"00"
			END
		END
	END	
	
    * REPRISE DES NON CONSOMMES SI CONV. COL. LE PERMET
    * Modif Guillaume DA10065 12/04/2010
    * Modif vanessa 28/05/10 DA 10065 : dates de reference + rajoute code si pas d'absence trouve
    IF ENR_CONVENTIONCOL<3> = 3 THEN
        IF ENR_CONVENTIONCOL<28> = 0 THEN
            W_DateDebRefConge = ICONV("01/05/":W_PERIODE[1,4],"D4/")
            W_DateFinRefConge = ICONV("31/05/":W_PERIODE[1,4],"D4/")
        END ELSE
            W_DateDebRefConge = ICONV("01/12/":W_PERIODE[1,4],"D4/")
            W_DateFinRefConge = ICONV("31/12/":W_PERIODE[1,4],"D4/")
        END
		*christophe le 12/06/2012 - modif cp restant si abs sur mai il faut reporter
        EXECUTE 'SELECT ABSENCESAIDANT AVEC CodeAidant = "':W_CODECONTRAT[1,5]:'" AND AVEC NumMotifAidant = "01" OR = "02" OR = "03" OR = "04" OR = "05" OR = "06" AND AVEC DebAbsAidant <= "':W_DateFinRefConge:'" AND AVEC FinAbsAidant >= "':W_DateDebRefConge:'"'
    	EXECUTE 'SAUVE-LISTE W_ListeAbs'
    	EXECUTE "LISTE W_ListeAbs" RETURNING MSGCODE
        IF MSGCODE<1>#209 THEN
		* Didier 26/12/2012 : faire quand mme SELECT pour viter problme sur prochaines requtes
		SELECT F.ABSENCESAIDANT TO W_ListeAbs
		*christophe le 12/06/2012 - modif cp restant si abs sur mai il faut reporter
		ENR_CONTRAT<38>=ENR_CONTRAT<44>+ENR_CONTRAT<39>+ENR_CONTRAT<41>				
            	*W_SAUVECF=ENR_CONTRAT<41>
        	ENR_CONTRAT<40>=0
        	ENR_CONTRAT<41>=0
        END ELSE
			ENR_CONTRAT<38>=ENR_CONTRAT<44>
            *W_SAUVECF=0
			ENR_CONTRAT<40>=0
			ENR_CONTRAT<41>=0		
        END
    END ELSE
        IF ENR_CONVENTIONCOL<3>=2 THEN
    	    ENR_CONTRAT<38>=ENR_CONTRAT<44>+ENR_CONTRAT<39>+ENR_CONTRAT<41>
			*W_SAUVECF=ENR_CONTRAT<41>
    	    ENR_CONTRAT<40>=0
    	    ENR_CONTRAT<41>=0
        END ELSE
    	    ENR_CONTRAT<38>=ENR_CONTRAT<44>
			*W_SAUVECF=0
    	    * REMISE A ZERO DES CONGES FRACTIONNEMENT
    	    ENR_CONTRAT<40>=0
    	    ENR_CONTRAT<41>=0
		END
    END
	
	* modif vanessa 04/12/12 - DA 12108 - METTRE EN COMMENTAIRE - NE PLUS FAIRE D'ARRONDI
    * ENR_CONTRAT<38>=INT((ENR_CONTRAT<38>+99)/100)
	ENR_CONTRAT<39>=ENR_CONTRAT<38>
	
    * CONGES RESTANTS A CONSOMMER
    * Modif Greg - 14/03/12 - DA12023 - Modification du calcul
    * ENR_CONTRAT<39>=(ENR_CONTRAT<38>*100)-ENR_CONTRAT<83>
    * On prend les jours en cours d'acquisition auxquels on retire les ventuels jours pris par anticipation
	* modif vanessa 04/12/12 - DA 12108 - mis en commentaire
    * W_Att39=W_SAUVATT44-ENR_CONTRAT<83>
		
    * Les donnes des att. 44 et 83 tant en ouvrables, arriv ici on a logiquement un nombre de jours ouvrables
    * dans la variable W_Att39. Si la convention est paramtre pour grer les congs en ouvrs, on convertit.
	* modif vanessa 04/12/12 - DA 12108 - mis en commentaire
    *IF ENR_CONVENTIONCOL<2>="1" THEN
	*	W_Att39=W_Att39*5/6
    *END
	*W_Att39=INT(W_Att39/100+0.99)*100

    * Si la convention est paramtre pour rcuprer les congs non pris, alors on cumule
    * les jours restants de l'anne prcdente avec ceux disponible pour l'anne qui dbute.
    * Sinon on renseigner l'att. 39 avec seulement les jours disponibles pour la "nouvelle" anne.
	
	*christophe le 12/06/2012 - modif cp restant si abs sur mai il faut reporter
	*  IF ENR_CONVENTIONCOL<3>="2" THEN
	* modif vanessa 04/12/12 - DA 12108 - mis en commentaire
    *IF ENR_CONVENTIONCOL<3>="2" OR W_ReportCpAbs="VRAI" THEN
	*	ENR_CONTRAT<39>=ENR_CONTRAT<39>+W_Att39+W_SAUVECF
    *END ELSE
	*	ENR_CONTRAT<39>=W_Att39
    *END
    *IF ENR_CONTRAT<39>>ENR_CONTRAT<38>*100 THEN ENR_CONTRAT<39>=ENR_CONTRAT<38>*100
	
    * BASCULE PROVISION EMPLOYEUR
    IF ENR_CONVENTIONCOL<3>#1 THEN
        ENR_CONTRAT<85>=ENR_CONTRAT<85>+ENR_CONTRAT<86>
    END ELSE
		ENR_CONTRAT<85>=ENR_CONTRAT<86>
    END
	
    * TEST SUR DROITS ACQUIS >= 0
    IF ENR_CONTRAT<38><0 THEN ENR_CONTRAT<38>=0
    IF ENR_CONTRAT<39><0 THEN ENR_CONTRAT<39>=0
    IF ENR_CONTRAT<85><0 THEN ENR_CONTRAT<85>=0
    IF ENR_CONTRAT<42><0 THEN ENR_CONTRAT<42>=0
    IF ENR_CONTRAT<43><0 THEN ENR_CONTRAT<43>=0
	
    * SI CONGES PAYES AU MOIS ALORS MET A 0 VALEUR JOURNEE EN HRES ET MONTANT
    IF ENR_CONTRAT<31>="1" THEN 
		ENR_CONTRAT<42>=0
		ENR_CONTRAT<43>=0
    END
	
    * VIDAGE CONTRAT
    ENR_CONTRAT<44>=0
    ENR_CONTRAT<45>=0
    ENR_CONTRAT<46>=0
    ENR_CONTRAT<83>=0
    ENR_CONTRAT<86>=0
	
RETURN

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

700 

    * CALCUL DE L'ANCIENNETE DU CONTRAT
	* modif vanessa 11/04/12 - DA 11089		
	* recherche si on tait dj  la date anniversaire  la clture prcdente (avec les jours de suspension prcdents)
	IF ENR_CONTRAT<1> = "01" OR ENR_CONTRAT<1> = "06" THEN	
		IF (W_PERIODE[5,2]="05" AND ENR_CONVENTIONCOL<28> = 0) OR (W_PERIODE[5,2]="12" AND ENR_CONVENTIONCOL<28> = 1) THEN
			* ne rien faire
		END ELSE	
			W_DateCloturePrec=W_PERIODE-1
			IF W_DateCloturePrec[5,2]="00" THEN
				W_DateCloturePrec=W_DateCloturePrec[1,4]-1:"12"
			END	

			W_DEBUTCONTRATPrec=INT(ENR_CONTRAT<7>+(W_JourSuspAvant/100))
			W_DEBUTCONTRATANCPrec=INT(ENR_CONTRAT<97>+(W_JourSuspAvant/100))
			W_DATEDEBUTCONTRATPrec=OCONV(W_DEBUTCONTRATPrec,"D4/")
			W_DATEDEBUTCONTRATPrec=W_DATEDEBUTCONTRATPrec[7,4]:W_DATEDEBUTCONTRATPrec[4,2]
			IF ENR_CONTRAT<97><>"" THEN
				W_DATEDEBUTCONTRATANCPrec=OCONV(W_DEBUTCONTRATANCPrec,"D4/")
				W_DATEDEBUTCONTRATANCPrec=W_DATEDEBUTCONTRATANCPrec[7,4]:W_DATEDEBUTCONTRATANCPrec[4,2]
			END ELSE
				W_DATEDEBUTCONTRATANCPrec=W_DATEDEBUTCONTRATPrec
			END	
			
			IF W_DATEDEBUTCONTRATANCPrec[5,2]=W_DateCloturePrec[5,2] THEN
				RETURN
			END
		END
	END	
*    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_DATECLOTURE=W_PERIODE
	
    W_ANCIENNETE=INT(W_DATECLOTURE-W_DATEDEBUTCONTRATANC)/100
	
    W_CODECONVENTIONSAUV=W_CODECONVENTION
    READ ENR_ASSOCIATION FROM F.ASSOCIATION,W_ASSOCIATION ELSE ENR_ASSOCIATION=""
    IF ENR_ASSOCIATION<1>="A.S.M.A.D." AND W_CODECONVENTION="05" THEN W_CODECONVENTION="01"

	W_NBJOURANCIEN=0
	
    BEGIN CASE

        * EMPLOYES DE MAISON OU AIDE A DOMICLIE
		* Didier 30/01/2012 : ajout CCN 06
		CASE W_CODECONVENTION="02" OR W_CODECONVENTION="01" OR W_CODECONVENTION="08" OR W_CODECONVENTION="06"	
			* BLOCAGE ANCIENNETE DANS CCN 02 SI DEBUT CONTRAT >= 01/04/00
			* Didier 27/06/2013 : revu calcul nombre de jours anciennet CCN 02 bloqu au 01/04/2000
*			IF ICONV(W_DATEDEBUTCONTRATANCCLAIR,"D4/")>="11780" AND W_CODECONVENTION="02" THEN
			IF W_CODECONVENTION="02" THEN
				IF ICONV(W_DATEDEBUTCONTRATANCCLAIR,"D4/")>="11780" THEN
					W_NBJOURANCIEN=0
				END ELSE
					W_ANCIENNETE02=INT(200003-W_DATEDEBUTCONTRATANC)/100
					W_NBJOURANCIEN=INT(W_ANCIENNETE02/5)
					IF W_NBJOURANCIEN>=4 THEN W_NBJOURANCIEN=4
				END
			END ELSE 
				* GESTION HABITUELLE DES C.A
				W_NBJOURANCIEN=INT(W_ANCIENNETE/5)
				* modif vanessa 13/04/12 - DA 11089-01
				* modif vanessa 02/11/12 DA 12107-01
				IF (ENR_CONTRAT<1> = "01" OR ENR_CONTRAT<1> = "06") AND ENR_CONVENTIONCOL<13> = 1 THEN
					IF (ENR_CONVENTIONCOL<28> = 0 AND W_PERIODE[5,2]="05") OR (ENR_CONVENTIONCOL<28> = 1 AND W_PERIODE[5,2]="12") THEN
						NULL
					END ELSE
						IF W_DATEDEBUTCONTRATANC[5,2]=W_PERIODE[5,2] THEN
							IF W_NBJOURANCIEN # W_ANCIENNETE/5 THEN
								RETURN
								* Didier 01/10/2012 : si multiple de 5 et >  4 alors fin car droits cals sur mai
							END ELSE
								IF W_NBJOURANCIEN>4 THEN RETURN
							END
						END
					END
				END
				* Modif Greg - 13/03/12 - Suite nouvelle convention du 01/01/12, on passe de 3  5 jours de CA.
				* Donc si le calcul donne 4 jours, on passe directement  5.
				*IF W_NBJOURANCIEN>4 THEN
				IF W_NBJOURANCIEN>=4 THEN
					* Didier 29/01/2012 : 5 jours au lieu de 4	
			        *W_NBJOURANCIEN=4
					W_NBJOURANCIEN=5
					* Didier 01/10/2012 : ramener  4 jours si CCN 02
					IF W_CODECONVENTION="02" THEN W_NBJOURANCIEN=4
				END
			END

		* FAMILLES RURALES
* Didier 18/06/2013 : calquer CCN 04 Familles Rurales sur CCN 01 (1 jour par tranche de 5 ans et non plus de 4 ans) pour FR SARTHE mais
* pas pour FR RIVIERE
		CASE W_CODECONVENTION="04"
			IF ENR_ASSOCIATION<14>="305838856" THEN		
				W_NBJOURANCIEN=INT(W_ANCIENNETE/4)
				IF W_NBJOURANCIEN>5 THEN W_NBJOURANCIEN=5
			END ELSE
				W_NBJOURANCIEN=INT(W_ANCIENNETE/5)
				IF W_NBJOURANCIEN>=4 THEN W_NBJOURANCIEN=5
			END

		* TRAVAILLEUSES FAMILLIALES
		* Didier 30/01/2012 : en commentaires suite CCB
		*	 CASE W_CODECONVENTION="06"		
		*              W_NBJOURANCIEN=INT(W_ANCIENNETE/5)*2
		*              IF W_NBJOURANCIEN>=6 THEN	
		*		   W_NBJOURANCIEN=6
		*		   IF ENR_CONVENTIONCOL<12>="1" THEN W_NBJOURANCIEN=5
		*	      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
	
    * Modif vanessa 12/04/12 - REPRISE DES NON CONSOMMES SI ABSENT
	W_AReporter="FAUX"
    IF ENR_CONVENTIONCOL<3> = 3 THEN
        IF ENR_CONVENTIONCOL<28> = 0 AND W_PERIODE[5,2]="05" THEN
            W_DateDebRefConge = ICONV("01/05/":W_PERIODE[1,4],"D4/")
            W_DateFinRefConge = ICONV("31/05/":W_PERIODE[1,4],"D4/")
            EXECUTE 'SELECT ABSENCESAIDANT AVEC CodeAidant = "':W_CODECONTRAT[1,5]:'" AND AVEC NumMotifAidant = "01" OR = "02" OR = "03" OR = "04" OR = "05" OR = "06" AND AVEC DebAbsAidant <= "':W_DateFinRefConge:'" AND AVEC FinAbsAidant >= "':W_DateDebRefConge:'"'
            EXECUTE 'SAUVE-LISTE W_ListeAbs'
    	    EXECUTE "LISTE W_ListeAbs" RETURNING MSGCODE
            IF MSGCODE<1>#209 THEN
		* Didier 26/12/2012 : faire quand mme SELECT pour viter problme sur prochaines requtes
		SELECT F.ABSENCESAIDANT TO W_ListeAbs	
                W_AReporter="VRAI"
            END
        END ELSE
            IF ENR_CONVENTIONCOL<28> = 1 AND W_PERIODE[5,2]="12" THEN
                W_DateDebRefConge = ICONV("01/12/":W_PERIODE[1,4],"D4/")
                W_DateFinRefConge = ICONV("31/12/":W_PERIODE[1,4],"D4/")
                EXECUTE 'SELECT ABSENCESAIDANT AVEC CodeAidant = "':W_CODECONTRAT[1,5]:'" AND AVEC NumMotifAidant = "01" OR = "02" OR = "03" OR = "04" OR = "05" OR = "06" AND AVEC DebAbsAidant <= "':W_DateFinRefConge:'" AND AVEC FinAbsAidant >= "':W_DateDebRefConge:'"'
                EXECUTE 'SAUVE-LISTE W_ListeAbs'
    	        EXECUTE "LISTE W_ListeAbs" RETURNING MSGCODE
                IF MSGCODE<1>#209 THEN
		    * Didier 26/12/2012 : faire quand mme SELECT pour viter problme sur prochaines requtes
		    SELECT F.ABSENCESAIDANT TO W_ListeAbs
                    W_AReporter="VRAI"
                END
            END
        END
    END
	
	* modif vanessa 11/04/12 - DA 11089
	* calcul le nbre de jours prcdemment octroy
	* modif vanessa 02/11/12 DA 12107-01
	IF (ENR_CONTRAT<1> = "01" OR ENR_CONTRAT<1> = "06") AND ENR_CONVENTIONCOL<13> = 1 THEN
		IF W_DATEDEBUTCONTRATANC[5,2]=W_PERIODE[5,2] THEN
			BEGIN CASE
				CASE W_NBJOURANCIEN=1
					W_NbJourPrec=0
				CASE W_NBJOURANCIEN=2
					W_NbJourPrec=1
				CASE W_NBJOURANCIEN=3
					W_NbJourPrec=2
				CASE W_NBJOURANCIEN=5
					W_NbJourPrec=3
			END CASE
			IF (ENR_CONVENTIONCOL<28> = 0 AND W_PERIODE[5,2]="05") OR (ENR_CONVENTIONCOL<28> = 1 AND W_PERIODE[5,2]="12") THEN
				IF ENR_CONVENTIONCOL<3> # "2" AND W_AReporter="FAUX" THEN
					ENR_CONTRAT<47>=W_NBJOURANCIEN
					ENR_CONTRAT<48>=ENR_CONTRAT<47>*100
				END ELSE
					ENR_CONTRAT<48>=INT(ENR_CONTRAT<48>/100)
					ENR_CONTRAT<47>=ENR_CONTRAT<48>+W_NBJOURANCIEN
					ENR_CONTRAT<48>=ENR_CONTRAT<47>*100
				END
			END ELSE
				ENR_CONTRAT<47>=W_NBJOURANCIEN+(ENR_CONTRAT<47>-W_NbJourPrec)
				ENR_CONTRAT<48>=(W_NBJOURANCIEN*100)+ENR_CONTRAT<48>-(W_NbJourPrec*100)
			END	
		END ELSE
			IF (ENR_CONVENTIONCOL<28> = 0 AND W_PERIODE[5,2]="05") OR (ENR_CONVENTIONCOL<28> = 1 AND W_PERIODE[5,2]="12") THEN
                IF ENR_CONVENTIONCOL<3> # "2" AND W_AReporter="FAUX" THEN
					ENR_CONTRAT<47>=W_NBJOURANCIEN
					ENR_CONTRAT<48>=ENR_CONTRAT<47>*100
				END ELSE
					ENR_CONTRAT<48>=INT(ENR_CONTRAT<48>/100)
					ENR_CONTRAT<47>=ENR_CONTRAT<48>+W_NBJOURANCIEN
					ENR_CONTRAT<48>=ENR_CONTRAT<47>*100
				END
			END		
		END
	END ELSE
	
		* modif vanes le 06/11/08
		IF ENR_CONVENTIONCOL<3> # "2" AND W_AReporter="FAUX" THEN
			ENR_CONTRAT<47>=W_NBJOURANCIEN
			ENR_CONTRAT<48>=ENR_CONTRAT<47>*100
		END ELSE
			ENR_CONTRAT<48>=INT(ENR_CONTRAT<48>/100)
			ENR_CONTRAT<47>=ENR_CONTRAT<48>+W_NBJOURANCIEN
			ENR_CONTRAT<48>=ENR_CONTRAT<47>*100
		END
	END
	
    W_CODECONVENTION=W_CODECONVENTIONSAUV
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_CONTRAT<39>*6/5        
    END ELSE
        W_NBJOURCONGESRESTANT=ENR_CONTRAT<39>
    END

    W_NBJOURCONGESRESTANT=W_NBJOURCONGESRESTANT/100

* Didier 18/06/2013 : calquer CCN 04 Familles Rurales sur CCN 01 pour FR SARTHE mais pas pour FR RIVIERE - Ajout lecture ASSOCIATION
    READ ENR_ASSOCIATION FROM F.ASSOCIATION,ENR_CONTRAT<2> ELSE ENR_ASSOCIATION=""

    BEGIN CASE

* Didier 18/06/2013 : calquer CCN 04 Familles Rurales sur CCN 01 pour FR SARTHE mais pas pour FR RIVIERE
		* TOUTES SAUF AIDE A DOMICILE + FONCTION PUBLIQUE
		CASE W_CODECONVENTION<>"01" AND W_CODECONVENTION <> "07" AND W_CODECONVENTION <> "04"
			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" 
			* modif vanessa - DA9135-01 - 16/10/09	 
			IF ENR_CONVENTIONCOL<2>=2 THEN
				W_NBJOURCONGESRESTANT=ENR_CONTRAT<39>*5/6        
			END ELSE
				W_NBJOURCONGESRESTANT=ENR_CONTRAT<39>
			END
			W_NBJOURCONGESRESTANT=W_NBJOURCONGESRESTANT/100	 
			
			IF W_NBJOURCONGESRESTANT>=8 THEN
				W_NBJOURFRACT=2
			END ELSE
				IF W_NBJOURCONGESRESTANT>=5 THEN
					W_NBJOURFRACT=1
				END
			END
			* fin modif
	
* Didier 18/06/2013 : calquer CCN 04 Familles Rurales sur CCN 01 pour FR SARTHE mais pas pour FR RIVIERE	
		* AIDE A DOMICILE
		CASE W_CODECONVENTION="01" OR W_CODECONVENTION = "04"
			IF ENR_ASSOCIATION<14>="305838856" THEN
				IF W_NBJOURCONGESRESTANT>=12 THEN
					W_NBJOURFRACT=2
				END ELSE
					IF W_NBJOURCONGESRESTANT>=9 THEN
						W_NBJOURFRACT=1
					END
				END
			END ELSE
				IF W_NBJOURCONGESRESTANT>=12 THEN
					W_NBJOURFRACT=3
				END ELSE
					IF W_NBJOURCONGESRESTANT>=9 THEN
						W_NBJOURFRACT=1
					END
				END
			END

    END CASE

* Didier le 05/11/2009 - DA9192800

*    IF ENR_CONVENTIONCOL<2>=2 AND ENR_CONVENTIONCOL<42>=1 THEN
*        W_NBJOURFRACT=W_NBJOURFRACT*6/5
*    END ELSE
*        IF ENR_CONVENTIONCOL<2>=1 AND ENR_CONVENTIONCOL<42>=2 THEN
*	    W_NBJOURFRACT=W_NBJOURFRACT*5/6
*	END
*    END
*    W_NBJOURFRACT=INT(W_NBJOURFRACT+(1/2))
* fin modif Didier

*    IF ENR_CONVENTIONCOL<3>=2 THEN
*        ENR_CONTRAT<40>=INT(ENR_CONTRAT<41>/100)+W_NBJOURFRACT
*        ENR_CONTRAT<41>=ENR_CONTRAT<41>+W_NBJOURFRACT*100
*    END ELSE        
	ENR_CONTRAT<40>=W_NBJOURFRACT
	ENR_CONTRAT<41>=W_NBJOURFRACT*100
*    END

RETURN

*********************************************************
*********************************************************
* GESTION DES EFFECTIFS

900 *

    GOSUB 901

    W_Mois=W_PERIODEFACT[5,2]+1
    W_An=W_PERIODEFACT[1,4]
    IF W_Mois="13" THEN
		W_Mois="01"
		W_An=W_PERIODEFACT[1,4]+1
    END

    W_DateFinPeriode=ICONV("01/":W_Mois:"/":W_An,"D4/")-1
	
    W_PASSE26ANS=0

    IF (ENR_CONTRAT<7> <= W_DateFinPeriode AND ENR_CONTRAT<8> > W_DateFinPeriode) OR (ENR_CONTRAT<7> <= W_DateFinPeriode AND ENR_CONTRAT<8> = "") THEN

		W_EFFECTIFPHYSIQUE<I>=W_EFFECTIFPHYSIQUE<I>+100
        
		* MAj apporte le 24/10/2005 par mikael

		W_PASSE26ANS=0
		IF W_DateFinPeriode <= ICONV("31/12/2007","D4/") THEN
			* LECTURE CIVILAIDANT POUR RECUPERER LA DATE DE NAISSANCE
			READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_CleContrat[1,5] THEN

				W_DateFinPeriodeExt = OCONV(W_DateFinPeriode,"D4/")
				W_DateNaiExt = OCONV(ENR_CIVILAIDANT<26>,"D4/")
				W_FINPERIODEEXT= W_DateFinPeriodeExt[7,4]:W_DateFinPeriodeExt[4,2]
				W_DATENAI = W_DateNaiExt[7,4]:W_DateNaiExt[4,2] 

				IF W_FINPERIODEEXT- W_DATENAI  < 2600  THEN

				   W_PASSE26ANS=1
				   W_EFFECTIFPHYSIQUE26ANS<I> = W_EFFECTIFPHYSIQUE26ANS<I> + 100
				END
			END
		END
    END

    READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,ENR_CONTRAT<3> ELSE
		STOP
    END

    * RECUPERE L'HORAIRE HEBDO LEGAL => MENSUEL
    W_HORAIREHEBDO<I>=ENR_ETABLISSEMENT<16>*52/12

    * LECTURE DETAILCALCUL POUR RECUPERER LES HEURES EFFECTUEES SUR LE MOIS
    READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_CODECONTRAT:W_PERIODE ELSE
		ENR_DETAILCALCUL=""
**	 	RETURN
    END

    W_HEURESPAYEES=ENR_DETAILCALCUL<6>
    
    * Modif Guillaume 26/02/2010 DA10055
    IF W_HEURESPAYEES > W_HORAIREHEBDO<I> THEN W_HEURESPAYEES = W_HORAIREHEBDO<I>
    
	IF W_PASSE26ANS=1 THEN
		W_HORAIRETP26ANS<I>=W_HORAIRETP26ANS<I>+W_HEURESPAYEES
	END
	W_HORAIRETP<I>=W_HORAIRETP<I>+W_HEURESPAYEES
	
RETURN

*********************************************************
*********************************************************
* RECHERCHE SI ETABLISSEMENT DEJA TRAITE

901 * 

    I=1
    LOOP 
	UNTIL W_ETABLISSEMENT<I>=ENR_CONTRAT<3> OR W_ETABLISSEMENT<I>="" DO
		I=I+1
    REPEAT

    IF W_ETABLISSEMENT<I>="" THEN
		W_ETABLISSEMENT<I>=ENR_CONTRAT<3>
		W_NBETABLISSEMENT=I
    END

RETURN

*********************************************************
*********************************************************
* MAJ DU FICHIER ETABLISSEMENT

910 *

    FOR I=1 TO W_NBETABLISSEMENT    

		* LECTURE ETABLISSEMENT
		READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,W_ETABLISSEMENT<I> ELSE
			STOP
		END

		IF ENR_ETABLISSEMENT<19,1><>W_PERIODE THEN
			ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,17,1;W_EFFECTIFPHYSIQUE<I>)
			ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,18,1;W_EFFECTIFTP<I>)
			ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,19,1;W_FINPERIODE2)
		
			* MAJ apporte le 24/10/2005 par mikael
			* Christophe le 15/03/2013 on ne gre plus les effectifs - 26 ans dans tablissement
			*ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,32,1;W_EFFECTIFPHYSIQUE26ANS<I>)
			*ENR_ETABLISSEMENT=INSERT(ENR_ETABLISSEMENT,33,1;W_EFFECTIFTP26ANS<I>)

		END ELSE
			ENR_ETABLISSEMENT<17,1>=ENR_ETABLISSEMENT<17,1>+W_EFFECTIFPHYSIQUE<I>
			ENR_ETABLISSEMENT<18,1>=ENR_ETABLISSEMENT<18,1>+W_EFFECTIFTP<I>
			* MAJ apporte le 24/10/2005 par mikael
			* Christophe le 15/03/2013 on ne gre plus les effectifs - 26 ans dans tablissement
			*ENR_ETABLISSEMENT<32,1>=ENR_ETABLISSEMENT<32,1>+W_EFFECTIFPHYSIQUE26ANS<I>
			*ENR_ETABLISSEMENT<33,1>=ENR_ETABLISSEMENT<33,1>+W_EFFECTIFTP26ANS<I>
		END

		W_EFFECTIFPHYSIQUETOTAL=W_EFFECTIFPHYSIQUETOTAL+W_EFFECTIFPHYSIQUE<I>
		W_EFFECTIFTPTOTAL=W_EFFECTIFTPTOTAL+W_EFFECTIFTP<I>
		
		* MAJ apporte le 24/10/2005 par mikael
		W_EFFECTIFPHYSIQUETOTAL26ANS=W_EFFECTIFPHYSIQUETOTAL26ANS+W_EFFECTIFPHYSIQUE26ANS<I>
		W_EFFECTIFTPTOTAL26ANS=W_EFFECTIFTPTOTAL26ANS+W_EFFECTIFTP26ANS<I>

		WRITE ENR_ETABLISSEMENT ON F.ETABLISSEMENT,W_ETABLISSEMENT<I>

    NEXT I

RETURN

*********************************************************
*********************************************************
* MAJ DU FICHIER ASSOCIATION

920 *

    * LECTURE ASSOCIATION
    READ ENR_ASSOCIATION FROM F.ASSOCIATION,W_ASSOCIATION ELSE
		STOP
    END

    IF ENR_ASSOCIATION<29,1><>W_PERIODE THEN
		ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,27,1;W_EFFECTIFPHYSIQUETOTAL)
		ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,28,1;W_EFFECTIFTPTOTAL)
		ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,29,1;W_FINPERIODE2)
	 
		* MAJ apporte le 24/10/2005 par mikael
		ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,40,1;W_EFFECTIFPHYSIQUETOTAL26ANS)
		ENR_ASSOCIATION=INSERT(ENR_ASSOCIATION,41,1;W_EFFECTIFTPTOTAL26ANS)
    END ELSE
		ENR_ASSOCIATION<27,1>=ENR_ASSOCIATION<27,1>+W_EFFECTIFPHYSIQUETOTAL
		ENR_ASSOCIATION<28,1>=ENR_ASSOCIATION<28,1>+W_EFFECTIFTPTOTAL
	 
		* MAJ apporte le 24/10/2005 par mikael
		ENR_ASSOCIATION<40,1>=ENR_ASSOCIATION<40,1>+W_EFFECTIFPHYSIQUETOTAL26ANS
		ENR_ASSOCIATION<41,1>=ENR_ASSOCIATION<41,1>+W_EFFECTIFTPTOTAL26ANS
    END

    WRITE ENR_ASSOCIATION ON F.ASSOCIATION,W_ASSOCIATION

RETURN

*********************************************************
*********************************************************
* MAJ DES CONGES DELAI PREVENANCE
* VANES LE 28/10/08

930 *

	W_FINMODUL="12"
	IF ENR_CONTRAT<1>#"02" AND ENR_CONTRAT<68,DCOUNT(ENR_CONTRAT<68>,CHAR(253))>="1" THEN
		READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,ENR_CONTRAT<3> THEN
			W_FINMODUL=ENR_ETABLISSEMENT<24>
			W_MoisModul=W_FINMODUL+1
			W_AnModul=W_PERIODEFACT[1,4]
			IF W_MoisModul="13" THEN
				W_MoisModul="01"
				W_AnModul=W_AnModul+1
			END
			W_DateFinModul=ICONV("01/":W_MoisModul:"/":W_AnModul,"D4/")-1
			W_AnModul=W_AnModul-1
			W_DateDebModul=ICONV("01/":W_MoisModul:"/":W_AnModul,"D4/")	
		END
		
		IF W_FINMODUL=W_PERIODEFACT[5,2] THEN
			READ ENR_AIDANTDELAIPREV FROM F.AIDANTDELAIPREV,W_CleContrat ELSE ENR_AIDANTDELAIPREV=""
			W_Count930=DCOUNT(ENR_AIDANTDELAIPREV<4>,CHAR(253))
			W_Refus=0
			W_Accept=0
			FOR i930=1 TO W_Count930
				IF ENR_AIDANTDELAIPREV<4,i930> >= W_DateDebModul AND ENR_AIDANTDELAIPREV<4,i930> <= W_DateFinModul THEN
					IF ENR_AIDANTDELAIPREV<7,i930>="A" THEN
						W_Accept=W_Accept+1
					END ELSE
						IF ENR_AIDANTDELAIPREV<7,i930>="R" THEN
							W_Refus=W_Refus+1
						END
					END
				END
			NEXT i930
			IF W_Refus < 5 AND W_Accept >= 1 THEN
				IF ENR_CONVENTIONCOL<3> # "2" THEN
					ENR_CONTRAT<109>="1"
					ENR_CONTRAT<110>="100"
				END ELSE
					ENR_CONTRAT<110>=INT(ENR_CONTRAT<110>/100)
					ENR_CONTRAT<109>=ENR_CONTRAT<110>+1
					ENR_CONTRAT<110>=(ENR_CONTRAT<110>*100)+100
				END
			END ELSE
				* Modif Greg - 12/03/12 - DA12009 - Si l'aidant a plus de 4 refus ou aucune acception, on remet automatiquement  0.
				IF ENR_CONVENTIONCOL<3><>"2" THEN
					ENR_CONTRAT<109>="0"
					ENR_CONTRAT<110>="0"
				END
				* Fin modif Greg - 12/03/12
			END
		END
	END	
RETURN

*********************************************************
*********************************************************
* Controle pour Cration ventuelle d'un nouveau DETAILPREST

2000 *

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

	* Rcapitulatif mensuel
	W_RECAPMENS=ENR_CONVENTIONCOL<23>

	* Controle personnel type Production
	* NORMALLEMENT SI ARRIVE ICI, OBLIGATOIREMENT TYPE P
	GOSUB 2050

	* Controle Premire Activit type PRESTATAIRE
	* SI ARRIVE LA, OBLIGATOIREMENT TYPE PRESTATAIRE (voir Procdure 50 qui appelle la procdure en cours)
	* Si tous les critres sont bon, cration du DtailPrest
	IF W_RECAPMENS=1 AND W_INDICFINCONT=1 THEN
		GOSUB 2001
	END

RETURN


*********************************************************
*********************************************************
* Cration ventuelle d'un nouveau DETAILPREST

2001 *

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

        * 06/02/02 : VERIFIE SI GESTION D'UNE SAISIE DETAILLEE
        *            -> SI OUI : NE GENERE PAS DE DETAILPREST POUR LE MOIS SUIVANT
        *            -> SI NON : GENERE 1 DETAILPREST POUR LE MOIS SUIVANT

	W_PERIODESUIV=W_PERIODE+1

	IF W_PERIODESUIV[5,2]="13" THEN
		W_PERIODESUIV=W_PERIODESUIV[1,4]+1:"01"
	END

	W_NBRUB = DCOUNT(ENR_DETAILPREST<3>,CHAR(253))

	IF W_NBRUB >0 THEN
		FOR IRUB=1 TO W_NBRUB
			* TESTE SI SAISIE DETAILLEE OU PAS
			IF ENR_DETAILPREST<2,IRUB>#"" THEN
				* CAS OU PAS SAISIE DETAILLEE
				ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,3,IRUB;"000")	
			END ELSE
				* CAS OU SAISIE DETAILLEE ALORS SUPP DES MV CORRESPONDANTES
				ENR_DETAILPREST=DELETE(ENR_DETAILPREST,1,IRUB)
				ENR_DETAILPREST=DELETE(ENR_DETAILPREST,2,IRUB)
				ENR_DETAILPREST=DELETE(ENR_DETAILPREST,3,IRUB)
				ENR_DETAILPREST=DELETE(ENR_DETAILPREST,4,IRUB)
				W_NBRUB=W_NBRUB-1
				IRUB=IRUB-1
			END
		NEXT IRUB
	END

	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,5;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,6;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,7;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,8;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,9;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,10;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,11;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,12;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,13;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,14;"")
	ENR_DETAILPREST=REPLACE(ENR_DETAILPREST,15;"")

    WRITE ENR_DETAILPREST ON F.DETAILPREST,W_CLEDETAILCALCUL[1,8]:W_PERIODESUIV

RETURN


*********************************************************
*********************************************************
* purge ANOMALIEPAIE + ACOMPTEBULL
2200 *
*	Modif Tony 15/06/2009
		**** modif : suppression individuelle ACOMPTEBULL et ANOMALIEPAIE
  * EXECUTE 'TSELECT ANOMALIEPAIE AVEC 0 = "[':W_PERIODE:'"'
  * EXECUTE 'SAUVE-LISTE LISTANOMALIEPAIE'
  * EXECUTE 'LISTE LISTANOMALIEPAIE ' CAPTURING MSG RETURNING MSGCODE

  * IF MSGCODE<1><>209 THEN 
  *     SELECT F.ANOMALIEPAIE TO LISTANOMALIEPAIE 

   *    W_Fini="FAUX"
   *   LOOP
   *       READNEXT W_CleDetail FROM LISTANOMALIEPAIE ELSE W_Fini="VRAI"
   *      WHILE W_Fini="FAUX" DO
   *     DELETE F.ANOMALIEPAIE,W_CleDetail
   *    REPEAT
   *END

   DELETE F.ANOMALIEPAIE, W_CleContrat:W_PERIODE
   DELETE F.ACOMPTEBULL, W_CleContrat:W_PERIODE
 
   *EXECUTE 'TSELECT ACOMPTEBULL AVEC 0 = "[':W_PERIODE:'"'
   *EXECUTE 'SAUVE-LISTE LISTACOMPTEBULL'
   *EXECUTE 'LISTE LISTACOMPTEBULL' CAPTURING MSG RETURNING MSGCODE

   *IF MSGCODE<1><>209 THEN 
   *    SELECT F.ACOMPTEBULL TO LISTACOMPTEBULL
	
   *    W_Fini="FAUX"
   *    LOOP
   *         READNEXT W_CleDetail FROM LISTACOMPTEBULL ELSE W_Fini="VRAI"
   *         WHILE W_Fini="FAUX" DO
   *         DELETE F.ACOMPTEBULL,W_CleDetail
   *   REPEAT
   *END
** Fin Modif Tony
RETURN

*********************************************************
*********************************************************
* Purge des DetailPrest, DetailMandat, DetailInter

2010 *

	* modif vanessa 11/02/13
	FOR i = 1 TO 24
		W_PERIODE=W_PERIODE-1
		IF W_PERIODE[5,2]="00" THEN
			W_PERIODE=W_PERIODE[1,4]-1:"12"
		END		
	NEXT i
	
	EXECUTE 'TSELECT DETAILPREST AVEC PeriodeDetailPrest < "':W_PERIODE:'"'
	EXECUTE 'SAUVE-LISTE REQUETEDETAIL'
	EXECUTE 'LISTE REQUETEDETAIL' CAPTURING MSG RETURNING MSGCODE
	
	IF MSGCODE<1><>209 THEN 
		SELECT F.DETAILPREST TO REQUETEDETAIL
		
		W_Fini="FAUX"
		LOOP
            READNEXT W_CleDetail FROM REQUETEDETAIL ELSE W_Fini="VRAI"
            WHILE W_Fini="FAUX" DO
            DELETE F.DETAILPREST,W_CleDetail
		REPEAT
	END
	
	EXECUTE 'TSELECT DETAILFEDE AVEC 0 < "[':W_PERIODE:'"'
	EXECUTE 'SAUVE-LISTE REQUETEDETAIL'
	EXECUTE 'LISTE REQUETEDETAIL' CAPTURING MSG RETURNING MSGCODE

	IF MSGCODE<1><>209 THEN 
		SELECT F.DETAILFEDE TO REQUETEDETAIL

		W_Fini="FAUX"
		LOOP
            READNEXT W_CleDetail FROM REQUETEDETAIL ELSE W_Fini="VRAI"
            WHILE W_Fini="FAUX" DO
			DELETE F.DETAILFEDE,W_CleDetail
		REPEAT
	END

	EXECUTE 'TSELECT DETAILMANDAT AVEC PeriodeDetailMandat < "':W_PERIODE:'"'
	EXECUTE 'SAUVE-LISTE REQUETEDETAIL'
	EXECUTE 'LISTE REQUETEDETAIL' CAPTURING MSG RETURNING MSGCODE

	IF MSGCODE<1><>209 THEN 
		SELECT F.DETAILMANDAT TO REQUETEDETAIL

		W_Fini="FAUX"
		LOOP
   	    READNEXT W_CleDetail FROM REQUETEDETAIL ELSE W_Fini="VRAI"
            WHILE W_Fini="FAUX" DO
            DELETE F.DETAILMANDAT,W_CleDetail
		REPEAT
	END

*   EXECUTE 'TSELECT DETAILINTER AVEC PeriodeDetailInter < "':W_PERIODE:'"'
*   EXECUTE 'SAUVE-LISTE REQUETEDETAIL'
*   EXECUTE 'LISTE REQUETEDETAIL' CAPTURING MSG RETURNING MSGCODE

*   IF MSGCODE<1><>209 THEN 
*       SELECT F.DETAILINTER TO REQUETEDETAIL

*       W_Fini="FAUX"
*       LOOP
*   	    READNEXT W_CleDetail FROM REQUETEDETAIL ELSE W_Fini="VRAI"
*            WHILE W_Fini="FAUX" DO
*            DELETE F.DETAILINTER,W_CleDetail
*       REPEAT
*   END

	EXECUTE "EFFACER-LISTE REQUETEDETAIL"
RETURN


************************************
* Controle fin contrat sur priode *
************************************
2050
	
	IF ENR_CONTRAT<8> = "" THEN
		W_INDICFINCONT=1
	END ELSE
		W_INDICFINCONT=OCONV(ENR_CONTRAT<8>,"D4/")
		W_INDICFINCONT=W_INDICFINCONT[7,4]:W_INDICFINCONT[4,2]
		IF W_INDICFINCONT=W_PERIODE THEN
			W_INDICFINCONT=0
		END ELSE
			W_INDICFINCONT=1
		END
		IF ENR_CONTRAT<58>=W_PERIODE THEN W_INDICFINCONT=0
	END
RETURN

**************************************
* CONTROLE SI CREATION DE DETAILXXXX *
**************************************
2100

	GOSUB 2050

	IF W_INDICFINCONT=1 THEN
		BEGIN CASE
			CASE W_TYPEPERSONNEL MATCHES "1"
				* ADMINISTRATIF
				GOSUB 2101
			CASE W_TYPEPERSONNEL MATCHES "2"
				* MANDATAIRE
				GOSUB 2102
			CASE W_TYPEPERSONNEL MATCHES "3"
				* PRESTATAIRE
				GOSUB 2103
			CASE W_TYPEPERSONNEL MATCHES "4"
				* INTERMEDIAIRE
				GOSUB 2104
		END CASE
	END

RETURN

************************
* CREATION DETAILADMIN *
************************
2101

	ENR_DETAILADMIN=""
    D=1
    LOOP
	UNTIL ENR_CONTRAT<89,D>="" DO
		ENR_DETAILADMIN<1,D>=ENR_CONTRAT<89,D>
		ENR_DETAILADMIN<2,D>=ENR_CONTRAT<90,D>
		ENR_DETAILADMIN<3,D>=ENR_CONTRAT<91,D>
		ENR_DETAILADMIN<4,D>=ENR_CONTRAT<92,D>
		ENR_DETAILADMIN<5,D>="NON"
		ENR_DETAILADMIN<6,D>="0"
		ENR_DETAILADMIN<7,D>="0"
		D=D+1
	REPEAT
	IF D#1 THEN
		FOR C=1 TO D-1
			ENR_DETAILADMIN<6,C>=""
			ENR_DETAILADMIN<7,C>=""
		NEXT C
	END

	IF ENR_DETAILADMIN<1><>"" THEN WRITE ENR_DETAILADMIN ON F.DETAILADMIN,W_CleContrat:W_PROCHAINEPERIODE 

RETURN


*************************
* CREATION DETAILMANDAT *
*************************
2102

	ENR_DETAILMANDAT=""
	ENR_DETAILMANDAT<1>=ENR_CONTRAT<89>
	ENR_DETAILMANDAT<2>=ENR_CONTRAT<90>
	ENR_DETAILMANDAT<3>=ENR_CONTRAT<91>
	ENR_DETAILMANDAT<4>=ENR_CONTRAT<92>
	ENR_DETAILMANDAT<5>=ENR_CONTRAT<93>
	ENR_DETAILMANDAT<6>=""
	ENR_DETAILMANDAT<7>=""
	
	IF ENR_DETAILMANDAT<1><>"" THEN WRITE ENR_DETAILMANDAT ON F.DETAILMANDAT,W_CleContrat:W_PROCHAINEPERIODE 

RETURN


************************
* CREATION DETAILPREST *
************************
2103

	READ ENR_DETAILPREST FROM F.DETAILPREST,W_CleContrat:W_PROCHAINEPERIODE ELSE ENR_DETAILPREST=""

	ENR_DETAILPREST<5>=ENR_CONTRAT<89>
	ENR_DETAILPREST<6>=ENR_CONTRAT<90>
	ENR_DETAILPREST<7>=ENR_CONTRAT<91>
	ENR_DETAILPREST<8>=ENR_CONTRAT<92>
	ENR_DETAILPREST<9>=ENR_CONTRAT<93>
	
	IF ENR_DETAILPREST<5><>"" THEN WRITE ENR_DETAILPREST ON F.DETAILPREST,W_CleContrat:W_PROCHAINEPERIODE 

RETURN

************************
* CREATION DETAILINTER *
************************
2104
	ENR_DETAILINTER<8>=ENR_CONTRAT<89>
	ENR_DETAILINTER<9>=ENR_CONTRAT<90>
	ENR_DETAILINTER<10>=ENR_CONTRAT<91>
	ENR_DETAILINTER<11>=ENR_CONTRAT<92>
	ENR_DETAILINTER<12>=ENR_CONTRAT<93>
	ENR_DETAILINTER<13>=""
	ENR_DETAILINTER<14>=""
	
	IF ENR_DETAILINTER<8><>"" THEN WRITE ENR_DETAILINTER ON F.DETAILINTER,W_CleContrat:W_PROCHAINEPERIODE 

RETURN

*************************************************************
*	Procdure de calcul des salaires de rfrence		*
*************************************************************
10000

	W_Temp = 'MAJSALREFIJSS ':W_PERIODEFACT:' ':W_DernierContratTraite
	EXECUTE W_Temp
RETURN

*************************************************************
* Calcul des droits aux congs et salaires et montants de rfrences
*************************************************************
10100

    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
		 
RETURN
