SUBROUTINE CALCULSUSPCONTRAT (W_CODECONTRAT,W_NBSUSPCONTRAT)

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 "","PERIODESPAIE" TO F.PERIODESPAIE ELSE STOP

READ ENR_PERIODESPAIE FROM F.PERIODESPAIE,"1" ELSE ENR_PERIODESPAIE=""

W_NBABS01=0
W_MALADIE=""
W_NBABS12=0
W_DEMIJR=0
W_NBABS13=0
W_NBSUSPCONTRAT=0

* LECTURE DU FICHIER CONTRAT
READ ENR_CONTRAT FROM F.CONTRAT,W_CODECONTRAT THEN

	IF ENR_CONTRAT<8> # "" THEN 
		W_FINABS = ENR_CONTRAT<8>
	END ELSE
		IF ENR_PERIODESPAIE<1>[5,2] < "12" THEN
			W_FINABS = ICONV("01/":ENR_PERIODESPAIE<1>[5,2]+1:"/":ENR_PERIODESPAIE<1>[1,4],"D4/")-1
		END ELSE	
			W_FINABS = ICONV("01/01/":ENR_PERIODESPAIE<1>[1,4]+1,"D4/")-1
		END
	END

	* GENERE LE TABLEAU DYNAMIQUE DES ABSENCES PAR PERIODE
	GOSUB 10

	READ ENR_CONVENTIONCOL FROM F.CONVENTIONCOL,ENR_CONTRAT<1> ELSE ENR_CONVENTIONCOL=""

	* SELECTIONNE LES ABSENCES GENERANT SUSPENSION DE CONTRAT (MALADIE / C. PARENTAL / CP SS SOLDE)
	EXECUTE 'SELECT ABSENCESAIDANT AVEC CodeAidant = "':W_CODECONTRAT[1,5]:'" AND AVEC NumMotifAidant = "01" OR = "12" OR = "13" AND AVEC 2 >= "':ENR_CONTRAT<7>:'" AND AVEC DebAbsAidant <= "':W_FINABS:'" PAR DebAbsAidant'
	
	* PARCOURE LES ABSENCES
	W_FINBOUCLEABS=0
	LOOP
		READNEXT CLEABS ELSE W_FINBOUCLEABS=1
		UNTIL W_FINBOUCLEABS=1 DO

		READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,CLEABS ELSE ENR_ABSENCESAIDANT=""

		W_DEBUTABS=CLEABS[8,5]

		* SI MALADIE
		IF CLEABS[6,2]="01" THEN
			* CALCULE JOURS ABSENCES PAR PERIODES
			GOSUB 20
		END

		* SI SANS SOLDE
		IF CLEABS[6,2]="12" THEN 
			IF ENR_ABSENCESAIDANT<1>="1" AND ENR_ABSENCESAIDANT<3>="1" THEN W_DEMIJR=1
			IF ENR_ABSENCESAIDANT<1>="2" AND ENR_ABSENCESAIDANT<3>="2" THEN W_DEMIJR=1
	
			IF W_DEMIJR # "0" THEN W_DEMIJR =  (W_DEMIJR * 0.5)
			W_NBABS12=W_NBABS12+ ((ENR_ABSENCESAIDANT<2>-CLEABS[8,5])+1) - W_DEMIJR
			W_DEMIJR=0
		END

		* SI PARENTAL
		IF CLEABS[6,2]="13" THEN W_NBABS13=W_NBABS13+ ((ENR_ABSENCESAIDANT<2>-CLEABS[8,5])+1) /2

	REPEAT

	* CALCULE JOURS SUSPENSION PAR PERIODES
	GOSUB 30
	
	W_NBSUSPCONTRAT= W_NBABS01 + W_NBABS12 + W_NBABS13
	W_NBSUSPCONTRAT=INT(W_NBSUSPCONTRAT)

END ELSE
	* PAS DE CONTRAT
	PRINT "PAS DE CONTRAT CORRESPONDANT"
END

RETURN

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

10 *	GENERE LE TABLEAU DYNAMIQUE DES ABSENCES PAR PERIODE
		
	* FIN DE CONTRAT OU FIN DE PERIODE
	IF ENR_CONTRAT<8> # "" THEN 
		W_FINPERIODE=OCONV(ENR_CONTRAT<8>,"D4/")
		W_FINPERIODE=W_FINPERIODE[7,4]:W_FINPERIODE[4,2]
	END ELSE
		W_FINPERIODE=ENR_PERIODESPAIE<1>
	END

	* DEBUT DE CONTRAT OU DEBUT DE PERIODE
	W_DEBUTPERIODE=OCONV(ENR_CONTRAT<7>,"D4/")
	W_DEBUTPERIODE=W_DEBUTPERIODE[7,4]:W_DEBUTPERIODE[4,2]

	* CALCULE LE NBRE DE MOIS DE JUIN ENTRE DEBUT ET FIN DE PERIODE
	W_NBANNEE=(W_FINPERIODE[1,4]-W_DEBUTPERIODE[1,4])

	* TEST SI DEBUT PERIODE < JUIN ET FIN > JUIN ALORS ANNEE +1
	IF W_DEBUTPERIODE[5,2]<"06" THEN W_NBANNEE=W_NBANNEE+1
	IF W_FINPERIODE[5,2]>="06" THEN W_NBANNEE=W_NBANNEE+1

	IF W_DEBUTPERIODE[5,2]<"06" THEN W_MALADIE<1>=W_DEBUTPERIODE[1,4]-1
	IF W_DEBUTPERIODE[5,2]>="06" THEN W_MALADIE<1>=W_DEBUTPERIODE[1,4]

	FOR I=2 TO W_NBANNEE
		W_MALADIE<I>=W_MALADIE<I-1>+1
	NEXT I

RETURN


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

20 *	CALCULE JOURS ABSENCES PAR PERIODES

	IF OCONV(W_DEBUTABS,"D4/")[4,2]<"06" THEN W_ANNEERECH=OCONV(CLEABS[8,5],"D4/")[7,4]-1

	FOR I=1 TO W_NBANNEE

		* CALCULE NBRE ABSENCE SUR LA PERIODE
		W_DEBPERIODERECH=ICONV("01/06/":W_MALADIE<I,1>,"D4/")
		W_FINPERIODERECH=ICONV("31/05/":W_MALADIE<I,1>+1,"D4/")
		
		* SI DEBUT PERIODE < 06 ALORS CALCULE -> 30/05
		IF W_DEBUTABS < W_FINPERIODERECH AND ENR_ABSENCESAIDANT<2> > W_DEBPERIODERECH THEN 
			
			* TESTE SI FIN ABS > FIN PERIODE
			IF ENR_ABSENCESAIDANT<2> > W_FINPERIODERECH THEN 
				W_DUREEABSPERIODE=W_FINPERIODERECH-W_DEBUTABS
				W_MALADIE<I,2>=W_MALADIE<I,2>+W_DUREEABSPERIODE +1
				W_DEBUTABS=W_FINPERIODERECH+1
			END ELSE
				IF W_DEBUTABS < W_DEBPERIODERECH THEN
					W_DUREEABSPERIODE=ENR_ABSENCESAIDANT<2>-W_DEBPERIODERECH
					W_MALADIE<I,2>=W_MALADIE<I,2>+W_DUREEABSPERIODE +1
				END ELSE 
					IF ENR_ABSENCESAIDANT<2> <= W_FINABS THEN
						W_DUREEABSPERIODE=ENR_ABSENCESAIDANT<2>-W_DEBUTABS
						W_MALADIE<I,2>=W_MALADIE<I,2>+W_DUREEABSPERIODE +1
					END ELSE
						W_DUREEABSPERIODE=W_FINABS-W_DEBUTABS
						W_MALADIE<I,2>=W_MALADIE<I,2>+W_DUREEABSPERIODE +1
					END
				END
			END
		END
	NEXT I

RETURN


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

30 *	CALCULE JOURS SUSPENSION PAR PERIODES

	
	FOR I=1 TO W_NBANNEE

		IF W_MALADIE<I,2> # "" AND W_MALADIE<I,2> # "0" THEN
			W_MALADIE<I,2>=W_MALADIE<I,2> - ENR_CONVENTIONCOL<17>
			IF W_MALADIE<I,2> < 0 THEN W_MALADIE<I,2>=0
		END

		W_NBABS01=W_NBABS01+W_MALADIE<I,2>

	NEXT I

RETURN
