*******************************************************************************************
*	Moulinette de rattrapage pour gnration fichier AIDANTTTE
*
*	10 --> RECHERCHE JOURS SUR LA PERIODE
*	20 --> RECHERCHE ABSENCES SUR LA PERIODE
*	30 --> PARCOURS DETAILCALCUL
*******************************************************************************************

OPEN "","CONTRAT" TO F.CONTRAT ELSE STOP "Erreur ouverture de CONTRAT"
OPEN "","PERIODESPAIE" TO F.PERIODESPAIE ELSE STOP "Erreur ouverture de PERIODESPAIE"
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE STOP "Erreur ouverture de DETAILCALCUL"
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE STOP "Erreur ouverture de RUBSAISIE"
OPEN "","ETABLISSEMENT" TO F.ETABLISSEMENT ELSE STOP "Erreur ouverture de ETABLISSEMENT"
OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE STOP "Erreur ouverture de ASSOCIATION"
OPEN "","TTEDEFINITION" TO F.TTEDEFINITION ELSE STOP "Erreur ouverture de TTEDEFINITION"
OPEN "","ABSENCESAIDANT" TO F.ABSENCESAIDANT ELSE STOP "Erreur ouverture de TTEDEFINITION"

OPEN "","AIDANTTTE" TO F.AIDANTTTE ELSE STOP "Erreur ouverture de AIDANTTTE"

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"

READ ENR_TTEDEFINITION FROM F.TTEDEFINITION,"1" ELSE ENR_TTEDEFINITION=""

READ ENR_PERIODESPAIE FROM F.PERIODESPAIE,"1" ELSE STOP "Erreur lecture PERIODESPAIE"
W_PerPaieActive = ENR_PERIODESPAIE<1>

W_DebPerPaieActive = ICONV("01/":W_PerPaieActive[5,2]:"/":W_PerPaieActive[1,4],"D4/")
W_FinPerPaieActive = (W_DebPerPaieActive + 32) - OCONV((W_DebPerPaieActive + 32),"D4/")[1,2]

LISTMAJAIDANTTTE=""
W_REQUETECONTRAT = 'SELECT CONTRAT AVEC 65 # "O" AND AVEC 1 # "02" AND AVEC 7 <= "':W_FinPerPaieActive:'" AND AVEC 8 >= "':W_DebPerPaieActive:'" OR = "" PAR NomAssocContrat PAR EmplEtabContrat'
EXECUTE W_REQUETECONTRAT
EXECUTE 'SAUVE-LISTE LISTMAJAIDANTTTE'
EXECUTE 'LISTE LISTMAJAIDANTTTE' RETURNING W_MSG
IF W_MSG<1>="209" THEN STOP
SELECT F.CONTRAT TO LISTMAJAIDANTTTE

W_FIN = "FAUX"
W_CodeEtab = ""
LOOP
	READNEXT CLE_CONTRAT FROM LISTMAJAIDANTTTE ELSE W_FIN = "VRAI"
WHILE W_FIN = "FAUX" DO
	READ ENR_CONTRAT FROM F.CONTRAT,CLE_CONTRAT ELSE STOP "Erreur lecture CONTRAT"
	IF W_CodeEtab # ENR_CONTRAT<3> THEN
		W_CodeEtab = ENR_CONTRAT<3>
		READ ENR_ETABLISSEMENT FROM F.ETABLISSEMENT,W_CodeEtab ELSE STOP "Periode de modulation manquante pour ETABLISSEMENT:":W_CodeEtab
		W_MoisFinModulEtab = ENR_ETABLISSEMENT<24>
	END
	
	CLE_AIDANTTTE = CLE_CONTRAT:ENR_PERIODESPAIE<1>[1,4]
	IF ENR_PERIODESPAIE<1>[5,2] > ENR_ETABLISSEMENT<24> THEN
		CLE_AIDANTTTE=CLE_AIDANTTTE+1 "R%12"
	END
	W_CUMULPREC=0
	I = 0
	J = 1
	ENR_AIDANTTTE = ""
	LOOP
		I=I+1
	WHILE ENR_CONTRAT<76,I> # ""
		READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,CLE_CONTRAT:ENR_CONTRAT<76,I> ELSE ENR_DETAILCALCUL=""
		W_TTENBJRSDIM=0
		W_TTENBJRSSAM=0
		W_TTENBJRSJF=0
		W_TTENBJRSCONG=0
		W_TTENBJRSMAL=0
		W_TTENBJRSAUTABS=0
		W_DateDeb = ICONV("01/":ENR_CONTRAT<76,I>[5,2]:"/":ENR_CONTRAT<76,I>[1,4],"D4/")
		W_DateFin = (W_DateDeb + 32) - OCONV((W_DateDeb + 32),"D4/")[1,2]
		
		W_DateDebContrat = W_DateDeb
		IF ENR_CONTRAT<7> > W_DateDeb THEN W_DateDebContrat = ENR_CONTRAT<7>

		W_DateFinContrat = W_DateFin
		IF ENR_CONTRAT<8> # "" AND ENR_CONTRAT<8> < W_DateFin THEN W_DateFinContrat = ENR_CONTRAT<8>
		
		W_NbJoursCalendaire = W_DateFinContrat - W_DateDebContrat + 1
		ENR_AIDANTTTE<1,J> = ENR_CONTRAT<76,I>
		ENR_AIDANTTTE<2,J> = INT(((ENR_CONTRAT<77,I>*12/52)/5)+1/2)

		GOSUB 10

		GOSUB 20

		ENR_AIDANTTTE<3,J> = W_NbJoursCalendaire
		ENR_AIDANTTTE<4,J> = W_TTENBJRSSAM + W_TTENBJRSDIM
		ENR_AIDANTTTE<5,J> = W_TTENBJRSJF
		ENR_AIDANTTTE<6,J> = W_TTENBJRSCONG
		ENR_AIDANTTTE<7,J> = W_TTENBJRSMAL
		ENR_AIDANTTTE<8,J> = W_TTENBJRSAUTABS

		GOSUB 30
		
		ENR_AIDANTTTE<9,J> = W_BASETTE
		ENR_AIDANTTTE<10,J> = W_BASE835
		ENR_AIDANTTTE<11,J> = W_DIFFCUMULEE
            W_CUMULPREC=W_DIFFCUMULEE
		WRITE ENR_AIDANTTTE ON F.AIDANTTTE,CLE_AIDANTTTE
		J=J+1
	REPEAT
	
REPEAT
EXECUTE "EFFACER-LISTE LISTMAJAIDANTTTE"
STOP
****************************************************************************************************************
* RECHERCHE JOURS SUR LA PERIODE
****************************************************************************************************************
10 *

W_ENTREE = ""
W_ENTREE<1,1> = ENR_CONTRAT<2>
W_ENTREE<1,2> = W_DateDebContrat
W_ENTREE<1,3> = "M"
W_ENTREE<1,4> = W_DateFinContrat
W_ENTREE<1,5> = "A"
CALL CALCNBJRSPERIODE(W_ENTREE, W_SORTIE)
W_TTENBJRSDIM=(W_TTENBJRSDIM+W_SORTIE<1,2>)/100
W_TTENBJRSSAM=(W_TTENBJRSSAM+W_SORTIE<1,3>)/100
W_TTENBJRSJF=(W_TTENBJRSJF+W_SORTIE<1,4>)/100
RETURN
****************************************************************************************************************
* RECHERCHE ABSENCES SUR LA PERIODE
****************************************************************************************************************
20 *
W_TABABSMITPS=""
W_REQUETEABSMITPS=""
LISTABSMITPS=""
W_REQUETEABSMITPS='TSELECT ABSENCESAIDANT AVEC NumMotifAidant = "03" AND AVEC CodeAidant = "':CLE_CONTRAT[1,5]:'" AND AVEC DebAbsAidant <= "':W_DateFinContrat:'" AND AVEC 2 >= "':W_DateDebContrat:'" PAR-DECR DebAbsAidant'
EXECUTE W_REQUETEABSMITPS
EXECUTE 'SAUVE-LISTE LISTABSMITPS'
EXECUTE 'LISTE LISTABSMITPS' RETURNING W_MSG
IF W_MSG<1>#"209" THEN
	SELECT F.ABSENCESAIDANT TO LISTABSMITPS
	W_FINIABSMITPS="NON"
	A=1
	LOOP
		READNEXT W_CLEABSMITPS FROM LISTABSMITPS ELSE W_FINIABSMITPS="OUI"
	UNTIL W_FINIABSMITPS="OUI" DO
		READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,W_CLEABSMITPS THEN
			W_DEBUTABS=W_CLEABSMITPS[8,6]
			FinAbsAidant=EXTRACT(ENR_ABSENCESAIDANT,2)
			IF W_DEBUTABS<W_DateDebContrat THEN W_DEBUTABS=W_DateDebContrat
			IF W_DEBUTABS>FinAbsAidant THEN W_DEBUTABS=""
			IF W_DEBUTABS>W_DateFinContrat THEN W_DEBUTABS=""
			IF FinAbsAidant>W_DateFinContrat THEN FinAbsAidant=W_DateFinContrat
			IF FinAbsAidant<W_DateDebContrat THEN FinAbsAidant=""
			IF W_DEBUTABS#"" AND FinAbsAidant#"" THEN
				W_TABABSMITPS<A,1>=W_DEBUTABS
				W_TABABSMITPS<A,2>=FinAbsAidant
				A=A+1
			END
		END
	REPEAT
END
EXECUTE "EFFACER-LISTE LISTABSMITPS"

LISTABS=""
W_JOURSABS=0
W_REQUETEABS='TSELECT ABSENCESAIDANT AVEC NumMotifAidant <= "17" OR > "21" AND AVEC CodeAidant = "':CLE_CONTRAT[1,5]:'" AND AVEC DebAbsAidant <= "':W_DateFinContrat:'" AND AVEC 2 >= "':W_DateDebContrat:'" PAR-DECR DebAbsAidant'
EXECUTE W_REQUETEABS
EXECUTE 'SAUVE-LISTE LISTABS'
EXECUTE 'LISTE LISTABS' RETURNING W_MSG
IF W_MSG<1>="209" THEN RETURN

SELECT F.ABSENCESAIDANT TO LISTABS

W_FINIABS="NON"
LOOP
	READNEXT W_CLEABS FROM LISTABS ELSE W_FINIABS="OUI"
UNTIL W_FINIABS="OUI" DO
	READ ENR_ABSENCESAIDANT FROM F.ABSENCESAIDANT,W_CLEABS THEN
		W_MOTIFABS=W_CLEABS[6,2]
		W_DEBUTABS=W_CLEABS[8,6]
		W_DEBUTABS1=W_DEBUTABS
		W_TYPEDEBABS=ENR_ABSENCESAIDANT<1>
		IF W_TYPEDEBABS="2" THEN W_TYPEDEBABS="A" ELSE W_TYPEDEBABS="M"
		W_TYPEFINABS=ENR_ABSENCESAIDANT<3>
		IF W_TYPEFINABS="1" THEN W_TYPEFINABS="M" ELSE W_TYPEFINABS="A"
		FinAbsAidant=EXTRACT(ENR_ABSENCESAIDANT,2)
		ContratCongAbsAidant=EXTRACT(ENR_ABSENCESAIDANT,26)
		IF ContratCongAbsAidant#"" THEN
			G=1
			LOOP
				W_CONTRATEXCEPTION=EXTRACT(ENR_ABSENCESAIDANT,26,G)
			UNTIL W_CONTRATEXCEPTION=CLE_CONTRAT OR W_CONTRATEXCEPTION="" DO
				G=G+1
			REPEAT
			IF W_CONTRATEXCEPTION=CLE_CONTRAT THEN
				IF EXTRACT(ENR_ABSENCESAIDANT,21,G)="N" THEN
					W_DEBUTABS=""
					FinAbsAidant=""
				END ELSE
					W_DEBUTABS=EXTRACT(ENR_ABSENCESAIDANT,22,G)
					FinAbsAidant=EXTRACT(ENR_ABSENCESAIDANT,24,G)
					W_TYPEDEBABS=ENR_ABSENCESAIDANT<23,G>
					IF W_TYPEDEBABS#"A" THEN W_TYPEDEBABS="M"
					W_TYPEFINABS=ENR_ABSENCESAIDANT<25,G>
					IF W_TYPEFINABS#"M" THEN W_TYPEFINABS="A"
				END
			END
		END
		IF W_DEBUTABS # "" AND FinAbsAidant # "" THEN
			IF W_DEBUTABS<W_DateDebContrat THEN W_DEBUTABS=W_DateDebContrat
			IF W_DEBUTABS>FinAbsAidant THEN W_DEBUTABS=""
			IF W_DEBUTABS>W_DateFinContrat THEN W_DEBUTABS=""
			IF W_DateFinContrat#"" AND W_DEBUTABS>W_DateFinContrat THEN W_DEBUTABS=""
			W_DEBUTABS2=W_DEBUTABS
			IF W_DEBUTABS#"" THEN
				W_DEBUTABS=OCONV(W_DEBUTABS,"D4 ")
				W_DEBUTABS=W_DEBUTABS[1,2]
			END
			IF FinAbsAidant>W_DateFinContrat THEN FinAbsAidant=W_DateFinContrat
			IF W_DateFinContrat#"" THEN
				IF FinAbsAidant>W_DateFinContrat THEN FinAbsAidant=W_DateFinContrat
			END
			IF FinAbsAidant<W_DateDebContrat THEN FinAbsAidant=""
			IF W_DEBUTABS#"" AND FinAbsAidant#"" AND W_MOTIFABS#"03" AND W_MOTIFABS#"17" THEN
				IF W_TABABSMITPS#"" THEN
					Z=1
					LOOP
						UNTIL W_TABABSMITPS<Z,1>="" DO
							BEGIN CASE
								CASE W_DEBUTABS2=W_TABABSMITPS<Z,1>
									IF FinAbsAidant>=W_TABABSMITPS<Z,2> THEN
										W_TABABSMITPS=DELETE(W_TABABSMITPS,Z)
										Z=Z-1
									END ELSE
										W_TABABSMITPS<Z,1>=FinAbsAidant+1
									END
								CASE FinAbsAidant=W_TABABSMITPS<Z,2>
									IF W_DEBUTABS2<=W_TABABSMITPS<Z,1> THEN
										W_TABABSMITPS=DELETE(W_TABABSMITPS,Z)
										Z=Z-1
									END ELSE
										W_TABABSMITPS<Z,2>=W_DEBUTABS2-1
									END
								CASE FinAbsAidant<W_TABABSMITPS<Z,2> AND FinAbsAidant>W_TABABSMITPS<Z,1> 
									IF W_DEBUTABS2<=W_TABABSMITPS<Z,1> THEN
										W_TABABSMITPS<Z,1>=FinAbsAidant+1
									END ELSE
										W_SAUVFINABSMITPS=W_TABABSMITPS<Z,2>
										W_TABABSMITPS<Z,2>=W_DEBUTABS2-1
										W_TABABSMITPS=INSERT(W_TABABSMITPS,Z;FinAbsAidant+1)
										W_TABABSMITPS=INSERT(W_TABABSMITPS,Z,-1;W_SAUVFINABSMITPS)
									END
								CASE W_DEBUTABS2>W_TABABSMITPS<Z,1> AND W_DEBUTABS2<W_TABABSMITPS<Z,2> 
									IF FinAbsAidant>=W_TABABSMITPS<Z,2> THEN
										W_TABABSMITPS<Z,2>=W_DEBUTABS2-1
									END ELSE
										W_SAUVFINABSMITPS=W_TABABSMITPS<Z,2>
										W_TABABSMITPS<Z,2>=W_DEBUTABS2-1
										W_TABABSMITPS=INSERT(W_TABABSMITPS,Z;FinAbsAidant+1)
										W_TABABSMITPS=INSERT(W_TABABSMITPS,Z,-1;W_SAUVFINABSMITPS)
									END
								CASE FinAbsAidant=W_TABABSMITPS<Z,1> 
           									W_TABABSMITPS<Z,1>=FinAbsAidant+1
           									IF W_TABABSMITPS<Z,1>>W_TABABSMITPS<Z,2> THEN W_TABABSMITPS=DELETE(W_TABABSMITPS,Z)
         							CASE W_DEBUTABS2=W_TABABSMITPS<Z,2> 
           									W_TABABSMITPS<Z,2>=W_DEBUTABS2-1
           									IF W_TABABSMITPS<Z,1>>W_TABABSMITPS<Z,2> THEN W_TABABSMITPS=DELETE(W_TABABSMITPS,Z)
								CASE W_DEBUTABS2<W_TABABSMITPS<Z,1> AND FinAbsAidant>W_TABABSMITPS<Z,2> 
										W_TABABSMITPS=DELETE(W_TABABSMITPS,Z)
										Z=Z-1
							END CASE
							Z=Z+1
					REPEAT
				END
				W_PARAMENTREE=""
				W_PARAMENTREE<1,1>=ENR_CONTRAT<2>
				W_PARAMENTREE<1,2>=W_DEBUTABS2
				W_PARAMENTREE<1,3>=W_TYPEDEBABS
				W_PARAMENTREE<1,4>=FinAbsAidant
				W_PARAMENTREE<1,5>=W_TYPEFINABS
				W_PARAMSORTIE=""
				CALL CALCNBJRSPERIODE(W_PARAMENTREE,W_PARAMSORTIE)
				IF W_MOTIFABS="12" OR W_MOTIFABS="14" OR W_MOTIFABS="15" OR W_MOTIFABS="16"  THEN
					W_TTENBJRSCONG=W_TTENBJRSCONG+W_PARAMSORTIE<1,1>
				END
				IF W_MOTIFABS<="06" THEN
					IF W_MOTIFABS="03" THEN
						W_TTENBJRSMAL=W_TTENBJRSMAL+INT(W_PARAMSORTIE<1,1>/2+1/2)
					END ELSE
						W_TTENBJRSMAL=W_TTENBJRSMAL+W_PARAMSORTIE<1,1>
					END
				END
				IF W_MOTIFABS>="07" AND W_MOTIFABS<="11" THEN
					W_TTENBJRSAUTABS=W_TTENBJRSAUTABS+W_PARAMSORTIE<1,1>
				END
				IF W_MOTIFABS="13" OR W_MOTIFABS="22" OR W_MOTIFABS="23" THEN
					W_TTENBJRSAUTABS=W_TTENBJRSAUTABS+W_PARAMSORTIE<1,1>
				END
			END
		END
	END
REPEAT
IF W_TABABSMITPS#"" THEN
	Z=1
	LOOP
	UNTIL W_TABABSMITPS<Z,1>="" DO
		W_PARAMENTREE=""
		W_PARAMENTREE<1,1>=ENR_CONTRAT<2>
		W_PARAMENTREE<1,2>=W_TABABSMITPS<Z,1>
		W_PARAMENTREE<1,3>="M"
		W_PARAMENTREE<1,4>=W_TABABSMITPS<Z,2>
		W_PARAMENTREE<1,5>="A"
		W_PARAMSORTIE=""
		CALL CALCNBJRSPERIODE(W_PARAMENTREE,W_PARAMSORTIE)
		W_TTENBJRSMAL=W_TTENBJRSMAL+INT(W_PARAMSORTIE<1,1>/2+1/2)
		Z=Z+1
	REPEAT
END
EXECUTE "EFFACER-LISTE LISTABS"

RETURN

****************************************************************************************************************
* PARCOURS DETAILCALCUL
****************************************************************************************************************
30 *
Z=1
W_BASETTE=0
W_BASE835=0
W_DIFFCUMULEE=0
LOOP
 W_CODERUBSAISIE=ENR_DETAILCALCUL<2,Z>
 UNTIL W_CODERUBSAISIE="" DO
  IF W_CODERUBSAISIE="805" THEN
   NULL
  END ELSE
   READ ENR_RUBSAISIE FROM F.RUBSAISIE,W_CODERUBSAISIE ELSE ENR_RUBSAISIE=""
   IF W_CODERUBSAISIE="835" THEN
    W_BASE835=W_BASE835+ENR_DETAILCALCUL<3,Z>
   END ELSE
    IF ENR_RUBSAISIE<2>="3" OR ENR_RUBSAISIE<2>="4" THEN 
     W_BASETTE=W_BASETTE+ENR_DETAILCALCUL<3,Z>
    END
    IF ENR_RUBSAISIE<2>="5" AND ENR_RUBSAISIE<16>=0 THEN
     IF INDEX(ENR_TTEDEFINITION,W_CODERUBSAISIE,1)=0 THEN W_BASETTE=W_BASETTE+ENR_DETAILCALCUL<3,Z>
    END
   END
  END
  Z=Z+1
REPEAT
W_HEURESMOIS=INT(((ENR_AIDANTTTE<3,J>*100)-(ENR_AIDANTTTE<4,J>*100)-(ENR_AIDANTTTE<5,J>*100)-ENR_AIDANTTTE<6,J>-ENR_AIDANTTTE<7,J>-ENR_AIDANTTTE<8,J>)*ENR_AIDANTTTE<2,J>/100+1/2)
W_DIFFCUMULEE=W_CUMULPREC+W_BASETTE-W_HEURESMOIS-W_BASE835
RETURN
