*******************************************************************
* SUIVI DES ABS MALADIE/MATERNITE/EV.FAM/ENF.MAL/S.SOLDE/PARENTAL *
* PAR SECTEUR SUR UNE PERIODE                                     *
*                                                                 * 
* 18/02/2003					 	 STEPHANE *
*******************************************************************

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP
OPEN "","CONTRAT" TO F.CONTRAT ELSE STOP
OPEN "","SECTEUR" TO F.SECTEUR ELSE STOP

PRINT "DEBUT DE LA PERIODE A TRAITER (AAAAMM)"
INPUT W_DEBUTPER

PRINT "FIN DE LA PERIODE A TRAITER (AAAAMM)"
INPUT W_FINPER

PRINT "TYPE DE PERSONNEL (A=ADMINISTRATIF, P=PRODUCTION)"
INPUT W_TYPEPERSO

* TRANSFORMATION PERIODE DEBUT ET FIN
W_DEBUTPER="01/":W_DEBUTPER[5,2]:"/":W_DEBUTPER[1,4]
IF W_FINPER[5,2]<"12" THEN
	W_FINPER=ICONV("01/":W_FINPER[5,2]+1:"/":W_FINPER[1,4],"D4/")-1
	W_FINPER=OCONV(W_FINPER,"D4/")
END ELSE
	W_FINPER=ICONV("01/01/":W_FINPER[1,4]+1,"D4/")-1
	W_FINPER=OCONV(W_FINPER,"D4/")
END

* SELECTION DES ABSENCES SUR LA PERIODE
* EXECUTE 'SELECT ABSENCESAIDANT AVEC DebAbsAidantClair <= "':W_FINPER:'" AND AVEC FinAbsAidant >= "':W_DEBUTPER:'" AND AVEC NumMotifAidant < "18" PAR SecteurAbsAidant PAR CodeAidant PAR NumMotifAidant'
EXECUTE 'SELECT ABSENCESAIDANT AVEC DebAbsAidantClair <= "':W_FINPER:'" AND AVEC FinAbsAidant >= "':W_DEBUTPER:'" AND AVEC NumMotifAidant < "18" PAR CodeAidant PAR NumMotifAidant'
EXECUTE 'SAUVE-LISTE LISTABS'
EXECUTE 'LISTE LISTABS' RETURNING W_MSG
IF W_MSG<1>#"209" THEN
 SELECT F.ABSENCESAIDANT TO LISTABS
END ELSE
 STOP
END
W_FIN=0
W_ANCIENAIDANT=""
W_TABABS=""

* DESCRIPTION DE TABABS
* ATT 1 EN MV => TYPE ABS : MALADIE / MATERNITE / EV. FAM / ENF. MAL / S.SOLDE / PARENTAL 
* ATT 2 EN SV => NB JOURS + NB HEURES
* ATT 3 -> X EN SV => CODE SECTEUR + REPREND DETAIL ATT 2
IF W_TYPEPERSO="A" THEN
 W_TABABS<1,1>="ADMINISTRATIF"
END ELSE
 W_TABABS<1,1>="PRODUCTION"
END
W_TABABS<1,2>  ="MALADIE  "
W_TABABS<1,3>  ="MATERNITE"
W_TABABS<1,4>  ="EV.FAMILLE"
W_TABABS<1,5>  ="ENF.MALADE"
W_TABABS<1,6>  ="CP S.SOLDE "
W_TABABS<1,7>  ="C.PARENTAL"
W_TABABS<1,8>  ="ACC. TRAJET"
W_TABABS<1,9>  ="ACC. TRAVAIL"
W_TABABS<1,10>  =""

W_TABABS<2,1>  ="             "
W_TABABS<2,2,1>="  JRS  "
W_TABABS<2,2,2>=        " HRES  "
W_TABABS<2,3,1>="  JRS  "
W_TABABS<2,3,2>=        " HRES  "
W_TABABS<2,4>  ="    JOURS   "
W_TABABS<2,5>  ="    JOURS   "
W_TABABS<2,6>  ="    JOURS   "
W_TABABS<2,7>  ="    JOURS "
W_TABABS<2,8,1>="  JRS  "
W_TABABS<2,8,2>=        " HRES  "
W_TABABS<2,9,1>="  JRS  "
W_TABABS<2,9,2>=        " HRES  "
W_TABABS<2,10>  =""

*PRINTER ON
W_RANGTAB=3
LOOP
	READNEXT CLE FROM LISTABS ELSE W_FIN=1
	UNTIL W_FIN=1 DO

	READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,CLE ELSE ENR_ABSENCESAIDANT=""
*	IF W_ANCIENAIDANT#CLE[1,5] THEN
*		READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,CLE[1,5] ELSE ENR_CIVILAIDANT=""
*		W_ANCIENAIDANT=CLE[1,5]
*	END

	* RECHERCHE CODE SECTEUR
*	GOSUB 10

	W_DATEDEBABS=CLE[8,5]
	W_DATEDEBABS1=OCONV(W_DATEDEBABS,"D4/")
	W_DATEFINABS=ENR_ABSENCESAIDANT<2>
	W_DATEFINABS1=OCONV(W_DATEFINABS,"D4/")
	* VERIFIE SI CONTRAT PRESTATAIRE EN COURS
	EXECUTE 'SELECT CONTRAT AVEC 65 # "O" AND AVEC 0 = "':CLE[1,5]:']" AND AVEC 1 # "02" AND AVEC DatDebContrat <= "':W_DATEFINABS1:'" AND AVEC DatFinContrat >= "':W_DATEDEBABS1:'" OR = ""'
	EXECUTE 'SAUVE-LISTE LISTCONTRAT'
	EXECUTE 'LISTE LISTCONTRAT' RETURNING W_MSG1

	IF W_MSG1<1>#"209" THEN
		SELECT F.CONTRAT TO LISTCONTRAT
		READNEXT CLECONTRAT FROM LISTCONTRAT ELSE NULL
		READ ENR_CONTRAT FROM F.CONTRAT,CLECONTRAT ELSE ENR_CONTRAT=""
		TYPSALCONTRAT=ENR_CONTRAT<6>
		IF TYPSALCONTRAT=W_TYPEPERSO THEN
			* LIMITE DEBUT ET FIN ABS A DEBUT ET FIN PERIODE
			IF W_DATEDEBABS<ICONV(W_DEBUTPER,"D4/") THEN W_DATEDEBABS=ICONV(W_DEBUTPER,"D4/")
			IF W_DATEFINABS>ICONV(W_FINPER,"D4/") THEN W_DATEFINABS=ICONV(W_FINPER,"D4/")
			* CALCULE LE NBRE DE JRS D'ABSENCE
			W_NBJRSABS=(W_DATEFINABS-W_DATEDEBABS)+1

			* GESTION CODE ABS
			IF CLE[6,2]="01" OR CLE[6,2]="02" OR CLE[6,2]="06" THEN GOSUB 20	;* MALADIE + MATERNITE
			IF CLE[6,2]>="08" AND CLE[6,2]<="11" THEN GOSUB 30			;* EV. FAMILLE
			IF CLE[6,2]="07" OR CLE[6,2]="12" OR CLE[6,2]="13" THEN GOSUB 30	;* ENF. MALADE + CP S. SOLDE + C. PARENTAL
			IF CLE[6,2]="04" OR CLE[6,2]="05" THEN GOSUB 20				;* ACC.TRAJET + ACC.TRAVAIL
		END
	END
	EXECUTE "EFFACER-LISTE LISTCONTRAT"
REPEAT
EXECUTE "EFFACER-LISTE LISTABS"
* MISE EN FORME POUR EDITION
GOSUB 100

*PRINTER OFF

STOP

*****************************************************
* RECHERCHE CODE SECTEUR
10 *

*	W_RANGTAB=3
*	I=3
*	LOOP
*		UNTIL W_TABABS<I,1>=ENR_CIVILAIDANT<31> OR W_TABABS<I,1>="" DO
*		I=I+1
*	REPEAT
*
*	IF W_TABABS<I,1>="" THEN W_TABABS<I,1>=ENR_CIVILAIDANT<31>
*	W_RANGTAB=I
RETURN

*****************************************************
* GESTION MALADIE + MATERNITE
20 *
	
	IF CLE[6,2]="01" OR CLE[6,2]="06" THEN W_TYPEABS=2		;* MALADIE ET MALADIE PROFESSIONNELLE
	IF CLE[6,2]="02" THEN W_TYPEABS=3				;* MATERNITE
	IF CLE[6,2]="04" THEN W_TYPEABS=9				;* ACC. TRAJET
	IF CLE[6,2]="05" THEN W_TYPEABS=8				;* ACC.TRAVAIL

*	* RECHERCHE DU CONTRAT PRESTATAIRE
	J=1
	LOOP
		UNTIL ENR_ABSENCESAIDANT<13,J>="001" OR ENR_ABSENCESAIDANT<13,J>="" DO
		J=J+1
	REPEAT
	IF ENR_ABSENCESAIDANT<13,J>="" THEN RETURN		;* PAS DE CONTRAT PRESTATAIRE 

	W_MOIS=0
	W_JOUR=0
	W_NBHEURES=0
	IF W_NBJRSABS>30 THEN
		* CALCULE LE NBRE HEURES
		W_MOIS=INT(W_NBJRSABS/30)
		W_JOUR=W_NBJRSABS-(W_MOIS*30)
		IF ENR_ABSENCESAIDANT<15,J>="" THEN ENR_ABSENCESAIDANT<15,J>=0
		W_NBHEURES=INT(((ENR_ABSENCESAIDANT<15,J>/30)*W_JOUR)+1/2)+INT((ENR_ABSENCESAIDANT<15,J>*W_MOIS)+1/2)
	END ELSE
		W_NBHEURES=INT(((ENR_ABSENCESAIDANT<15,J>/30)*W_NBJRSABS)+1/2)
	END

	W_TABABS<W_RANGTAB,W_TYPEABS,1>=W_TABABS<W_RANGTAB,W_TYPEABS,1>+W_NBJRSABS
	W_TABABS<W_RANGTAB,W_TYPEABS,2>=W_TABABS<W_RANGTAB,W_TYPEABS,2>+INT((W_NBHEURES/100)+1/2)

RETURN

*****************************************************
* GESTION ABSENCES AUTRE QUE MALADIE + MATERNITE
30 *

	IF CLE[6,2]>="08" AND CLE[6,2]<="11" THEN W_TYPEABS=4		;* EV. FAMILLE
	IF CLE[6,2]="07" THEN W_TYPEABS=5				;* ENF. MALADE
	IF CLE[6,2]="12" THEN W_TYPEABS=6				;* CP S. SOLDE
	IF CLE[6,2]="13" THEN W_TYPEABS=7				;* C. PARENTAL

	* SI PAS EXCEPTION ALORS AFFECTE ABSENCE
	IF ENR_ABSENCESAIDANT<21>="" THEN
		W_TABABS<W_RANGTAB,W_TYPEABS>=W_TABABS<W_RANGTAB,W_TYPEABS>+W_NBJRSABS
		RETURN	
	END

	* VERIFIE SI ABS CONCERNE CONTRAT PRESTATAIRE
	J=1
	LOOP
		UNTIL ENR_ABSENCESAIDANT<21,J>="" DO

		IF ENR_ABSENCESAIDANT<21,J>="O" THEN
			* VERIFIE SUR LE CONTRAT PRESTATAIRE
			IF ENR_ABSENCESAIDANT<26,J>=CLECONTRAT THEN 
				* RECUPERE DEBUT ET FIN PERIODE EXCEPTION
				W_DATEDEBABS=ENR_ABSENCESAIDANT<22,J>
				W_DATEFINABS=ENR_ABSENCESAIDANT<24,J>
				* LIMITE DEBUT ET FIN ABS A DEBUT ET FIN PERIODE
				IF W_DATEDEBABS<ICONV(W_DEBUTPER,"D4/") THEN W_DATEDEBABS=ICONV(W_DEBUTPER,"D4/")
				IF W_DATEFINABS>ICONV(W_FINPER,"D4/") THEN W_DATEFINABS=ICONV(W_FINPER,"D4/")
				* CALCULE LE NBRE DE JRS D'ABSENCE
				W_NBJRSABS=(W_DATEFINABS-W_DATEDEBABS)+1

				W_TABABS<W_RANGTAB,W_TYPEABS>=W_TABABS<W_RANGTAB,W_TYPEABS>+W_NBJRSABS
			END
		END

		J=J+1
	REPEAT

RETURN

*****************************************************
* MISE EN FORME POUR EDITION
100 *
	PRINT @(-1)
	PRINT
	PRINT W_TABABS<1,1>
	PRINT
	PRINT W_TABABS<1,2>"L#12":" ":W_TABABS<3,2,1>"R#7":" JOURS"
	PRINT W_TABABS<1,3>"L#12":" ":W_TABABS<3,3,1>"R#7":" JOURS"
	PRINT W_TABABS<1,4>"L#12":" ":W_TABABS<3,4>"R#7":" JOURS"
	PRINT W_TABABS<1,5>"L#12":" ":W_TABABS<3,5>"R#7":" JOURS"
	PRINT W_TABABS<1,6>"L#12":" ":W_TABABS<3,6>"R#7":" JOURS"
	PRINT W_TABABS<1,7>"L#12":" ":W_TABABS<3,7>"R#7":" JOURS"
	PRINT W_TABABS<1,8>"L#12":" ":W_TABABS<3,8,1>"R#7":" JOURS"
	PRINT W_TABABS<1,9>"L#12":" ":W_TABABS<3,9,1>"R#7":" JOURS"

*	K=3
*	LOOP
*		UNTIL W_TABABS<K>="" DO
*
*		* RECUPERATION LIBELLE SECTEUR
*		READ ENR_SECTEUR FROM F.SECTEUR,W_TABABS<K,1> ELSE ENR_SECTEUR=""
*		ENR_SECTEUR<1>=ENR_SECTEUR<1>[1,19] "R#20"
*		ZONE=""
*		ZONE=ZONE "L(#13)"
*
*		W_LIGNE=ZONE:CHAR(253):W_TABABS<K,2,1>"R#7":CHAR(252):W_TABABS<K,2,2>"R#7"    		;* MALADIE
*		W_LIGNE=W_LIGNE:CHAR(253):W_TABABS<K,3,1>"R#7":CHAR(252):W_TABABS<K,3,2>"R#7" 		;* MATERNITE
*		W_LIGNE=W_LIGNE:CHAR(253):W_TABABS<K,4>"R#12":CHAR(253):W_TABABS<K,5>"R#12" 		;* EV.FAM+ENF.MAL
*		W_LIGNE=W_LIGNE:CHAR(253):W_TABABS<K,6>"R#12":CHAR(253):W_TABABS<K,7>"R#10"		;* S.SOLDE+PARENTAL
*		W_LIGNE=W_LIGNE:CHAR(253):W_TABABS<K,8,1>"R#7":CHAR(252):W_TABABS<K,8,2>"R#7" 		;* ACC.TRAJET
*		W_LIGNE=W_LIGNE:CHAR(253):W_TABABS<K,9,1>"R#7":CHAR(252):W_TABABS<K,9,2>"R#7":CHAR(253)	;* ACC.TRAVAIL
*
*		PRINT W_LIGNE		
*
*		K=K+1
*	REPEAT

RETURN
