*******************************************************************
* 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

* 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'

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
W_TABABS<1,1>  ="  AIDE MENAGERE     "
W_TABABS<1,2>  ="  ABS 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.PARENT "
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
LOOP
	READNEXT CLE 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

	* RECUPERE DEBUT ET FIN PERIODE
	W_DATEDEBABS=CLE[8,5]
	W_DATEFINABS=ENR_ABSENCESAIDANT<2>
	* 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" 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


REPEAT

* 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" THEN W_TYPEABS=2		;* MALADIE
	IF CLE[6,2]="02" THEN W_TYPEABS=3		;* MATERNITE
	IF CLE[6,2]="04" THEN W_TYPEABS=8		;* ACC. TRAJET
	IF CLE[6,2]="05" THEN W_TYPEABS=9		;* 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)
		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 SI CONTRAT PRESTATAIRE
			READ ENR_CONTRAT FROM F.CONTRAT,ENR_ABSENCESAIDANT<26,J> ELSE ENR_CONTRAT=""

			IF ENR_CONTRAT<1>#"02" 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 W_TABABS<1>
	PRINT W_TABABS<2>

	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"

		W_LIGNE=ENR_SECTEUR<1>: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
