EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP
OPEN "","CONTRAT" TO F.CONTRAT ELSE STOP
OPEN "","CONVENTIONCOL" TO F.CONVENTIONCOL ELSE STOP
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE STOP
OPEN "","DIFAIDANT" TO F.DIFAIDANT ELSE STOP
OPEN "","ETABLISSEMENT" TO F.ETABLISSEMENT ELSE STOP

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

ListeCCN=""
ListeContrat=""
LISTEABSEN=""
W_NbJourAbs=0

***********************************
EXECUTE 'COMO ON RattrapageDroitsDif.txt'

* SELECTION DES CONVENTIONS COLLECTIVES
	
	W_DateSys=DATE()
	
	EXECUTE 'SSELECT CONVENTIONCOL AVEC 41 = "0" AND AVEC @ID # "02"'
	EXECUTE "SAUVE-LISTE ListeCCN"
	EXECUTE "LISTE ListeCCN" CAPTURING MSG RETURNING MSGCODE

	IF MSGCODE<1>=209 THEN
 		STOP
	END ELSE
		SELECT F.CONVENTIONCOL TO ListeCCN

		W_FINCCN="FAUX"
		LOOP 
     			READNEXT CLE FROM ListeCCN ELSE W_FINCCN="VRAI"
     	UNTIL W_FINCCN="VRAI" DO
			READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL, CLE THEN
				EXECUTE 'SSELECT CONTRAT AVEC 1 = "':CLE:'" AND AVEC 4 = "I" AND AVEC 65 <> "O" AND AVEC 7 >= "13272" AND AVEC 7 <= "13635" AND AVEC 8 = "" OR >= "':W_DateSys:'"'
				EXECUTE "SAUVE-LISTE ListeContrat"
				EXECUTE "LISTE ListeContrat" CAPTURING MSG RETURNING MSGCODE
				
				IF MSGCODE<1>#"209" THEN
					SELECT F.CONTRAT TO ListeContrat
					
					W_FINCONTRAT="FAUX"
					LOOP
						READNEXT CLECONTRAT FROM ListeContrat ELSE W_FINCONTRAT="VRAI"
					UNTIL W_FINCONTRAT="VRAI" DO
						READ ENR_CONTRAT FROM F.CONTRAT, CLECONTRAT THEN
							GOSUB 20
							GOSUB 30
							GOSUB 40
							GOSUB 50
							GOSUB 60
						END
					REPEAT
				END
			END
		REPEAT
	END
	
EXECUTE 'COMO OFF'
	
STOP

*****************************************************************************
* TRAITEMENT : RECHERCHE DES HEURES BRUTES SUR LES MOIS DE REFERENCE
20

	W_PeriodeRef=0
	W_CumulBrutAcquis=0
	IF OCONV(ENR_CONTRAT<7>,"D4/")[7,4]="2004" THEN
		FOR I=OCONV(ENR_CONTRAT<7>,"D4/")[4,2] TO 12
			W_PeriodeRef=W_PeriodeRef+1
			IF LEN(TRIM(I))=1 THEN
				W_Periode="20040":TRIM(I)
			END ELSE
				W_Periode="2004":I
			END
			
			READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,CLECONTRAT:W_Periode THEN
				W_CumulBrutAcquis=W_CumulBrutAcquis+ENR_DETAILCALCUL<6>
			END
		NEXT I
		FOR I=1 TO 4
			W_PeriodeRef=W_PeriodeRef+1
			IF LEN(TRIM(I))=1 THEN
				W_Periode="20050":TRIM(I)
			END ELSE
				W_Periode="2005":I
			END
			
			READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,CLECONTRAT:W_Periode THEN
				W_CumulBrutAcquis=W_CumulBrutAcquis+ENR_DETAILCALCUL<6>
			END
		NEXT I
	END ELSE
		FOR I=OCONV(ENR_CONTRAT<7>,"D4/")[4,2] TO 4
			W_PeriodeRef=W_PeriodeRef+1
			IF LEN(TRIM(I))=1 THEN
				W_Periode="20050":TRIM(I)
			END ELSE
				W_Periode="2005":I
			END
			READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,CLECONTRAT:W_Periode THEN
				W_CumulBrutAcquis=W_CumulBrutAcquis+ENR_DETAILCALCUL<6>
			END
		NEXT I	
	END
		
RETURN

*****************************************************************************
* VALORISATION DES PERIODES ASSIMILEES A DU TRAVAIL EFFECTIF
30

	W_JourAbs=0
	W_CumulBrut = 0
	W_JourRestant="9999"
	W_Deb=ENR_CONTRAT<7>
	W_Fin="13635"
	
	W_Selection = 'SSELECT ABSENCESAIDANT AVEC 0 = "':CLECONTRAT[1,5]:']" AND AVEC NumMotifAidant = "01" OR = "02" OR = "03" OR = "04" OR = "05" OR = "06" OR = "12" OR = "13"'
	W_Selection = W_Selection:' AND AVEC DebAbsAidant <= "':W_Fin:'" AND AVEC 2 >= "':W_Deb:'" PAR DebAbsAidant'

	EXECUTE W_Selection
	EXECUTE "SAUVE-LISTE LISTEABSEN"
	EXECUTE "LISTE LISTEABSEN" CAPTURING MSG RETURNING MSGCODE

	IF MSGCODE<1> #209 THEN

		SELECT F.ABSENCESAIDANT TO LISTEABSEN

		W_FINABS="FAUX"
		LOOP 
     			READNEXT CLEABS FROM LISTEABSEN ELSE W_FINABS="VRAI"
     		UNTIL W_FINABS="VRAI" DO

     			READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,CLEABS THEN

			   	IF CLEABS[6,2]<="06" THEN
					* recherche la valeur des heures de rfrence mensuelles
					i=1
					LOOP
					UNTIL ENR_ABSENCESAIDANT<17,i>=CLECONTRAT OR ENR_ABSENCESAIDANT<17,i>=""
						i=i+1
					REPEAT
					IF ENR_ABSENCESAIDANT<17,i>#"" THEN
			    		W_HreRefMens=ENR_ABSENCESAIDANT<15,i>
					END
				END ELSE
					i=DCOUNT(ENR_CONTRAT<24>,CHAR(253))
					BEGIN CASE
						CASE ENR_CONTRAT<25,i> = "1"
           	  				W_HreRefMens = INT((ENR_CONTRAT<24,i>*52/12) + (1/2))
						CASE ENR_CONTRAT<25,i> = "2"
          	  				W_HreRefMens = INT((ENR_CONTRAT<24,i>*26/12) + (1/2))
    	       			CASE ENR_CONTRAT<25,i> = "3"
         	  				W_HreRefMens = INT((ENR_CONTRAT<24,i>) + (1/2))
       	       			CASE ENR_CONTRAT<25,i> = "4"
           	  				W_HreRefMens = INT((ENR_CONTRAT<24,i>/12) + (1/2))
						END CASE
				END

				* limite les dates d'abs  la priode
				IF CLEABS[8,5] > W_Deb THEN
					W_DateDebAbs=CLEABS[8,5]
				END ELSE
					W_DateDebAbs=W_Deb
				END
				IF ENR_ABSENCESAIDANT<2> < W_Fin THEN
					W_DateFinAbs=ENR_ABSENCESAIDANT<2>
				END ELSE
					W_DateFinAbs=W_Fin
				END

				W_JourAbs = W_DateFinAbs-W_DateDebAbs+1

				* si maladie
				IF CLEABS[6,2]="01" THEN

					IF W_PeriodeRef < 12 THEN

						W_JourRestant=W_JourRestant-(W_NbJourAbs-W_JourAbs)

						IF W_JourRestant < 0 THEN
							W_JourRestant=0
						END
					END

					IF W_JourRestant > W_JourAbs THEN

						W_CumulBrut = W_CumulBrut + INT((W_HreRefMens * (W_JourAbs/30))+(1/2))
						W_JourRestant=W_JourRestant-W_JourAbs

					END ELSE

						IF W_JourRestant > 0 THEN
							W_CumulBrut = W_CumulBrut + INT((W_HreRefMens * (W_JourRestant/30))+(1/2))
							W_JourRestant=0
						END
					END

				END ELSE
					* si autre motif
					W_CumulBrut = W_CumulBrut + INT((W_HreRefMens * (W_JourAbs/30))+(1/2))
				END
			END

		REPEAT
	END

	W_CumulBrut = W_CumulBrut + W_CumulBrutAcquis

RETURN

*****************************************************************************
* DETERMINATION DE L'HORAIRE DE TRAVAIL
40

    READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,ENR_CONTRAT<3> THEN
		IF ENR_ETABLISSEMENT<16> # "0" THEN
			W_HoraireTravail=ENR_ETABLISSEMENT<16>/100
		END ELSE
			IF ENR_ETABLISSEMENT<31> # "" THEN
				W_HoraireTravail=35
			END ELSE
				W_HoraireTravail=39
			END
		END
	END

RETURN

*****************************************************************************
* CALCUL DES DROITS OUVERTS
50

	W_NbreSemRef = W_PeriodeRef * 4.33
	W_HorRef = (W_HoraireTravail * W_NbreSemRef) * 100
	W_DroitRef = ENR_CONVENTIONCOL<39> * W_PeriodeRef / 12
	IF W_CumulBrut >= W_HorRef THEN
		W_DroitOuvert=INT(W_DroitRef+(1/2))
	END ELSE
		W_DroitOuvert=INT(((W_CumulBrut * W_DroitRef) / W_HorRef)+(1/2))
	END
	
RETURN

*****************************************************************************
* MAJ FICHIER DIFAIDANT
60

	READ ENR_DIFAIDANT FROM F.DIFAIDANT, CLECONTRAT[1,5]:ENR_CONTRAT<2> THEN
		W_DateTrouve="FAUX"
		FOR I = 1 TO DCOUNT(ENR_DIFAIDANT<1>, CHAR(253))
			IF ENR_DIFAIDANT<1,I>="14000" THEN
				ENR_DIFAIDANT<2,I>=ENR_DIFAIDANT<2,I>+W_DroitOuvert
				W_DateTrouve="VRAI"
			END
			IF W_DateTrouve="VRAI" THEN
				ENR_DIFAIDANT<4,I>=ENR_DIFAIDANT<4,I>+W_DroitOuvert
			END
		NEXT I
		IF W_DateTrouve="FAUX" THEN
			PRINT "Anomalie pour l'aidant ":CLECONTRAT[1,5]:", contrat ":CLECONTRAT[6,3]:", entit ":ENR_CONTRAT<2>:". La date du 30/04/2005 n'existe pas dans le fichier DIFAIDANT."
		END ELSE
			WRITE ENR_DIFAIDANT ON F.DIFAIDANT, CLECONTRAT[1,5]:ENR_CONTRAT<2>
			PRINT "Traitement russi de l'aidant ":CLECONTRAT[1,5]:", contrat ":CLECONTRAT[6,3]:", entit ":ENR_CONTRAT<2>:"."			
		END
	END ELSE
		PRINT "Anomalie pour l'aidant ":CLECONTRAT[1,5]:", contrat ":CLECONTRAT[6,3]:", entit ":ENR_CONTRAT<2>:". Enregistrement non trouv dans le fichier DIFAIDANT."	
	END
	
RETURN