************************************************************************
* Moulinette de MAJ HISTORCUMUL pour les indemnits de licenciement et *
* de retraite (Att 28 et 29 de HISTORCUMUL)                            *
*                                                                      *
* GUILLAUME le 26 Novembre 2007                                        *
************************************************************************

* Initialisation des variables
W_Requete = ""
W_ListeAsso = ""
W_FinAsso = ""
W_CleAsso = ""
W_ListeDetailCal = ""
W_FinDetail = ""
W_CleDetail = ""
ENR_ASSOCIATION = ""
ENR_DETAILCALCUL = ""
ENR_CONTRAT = ""
ENR_HISTORCUMUL = ""
W_MontIndLicenciement = 0
W_MontIndRetraite = 0
W_PremierPassage = ""
W_CodeContrat = ""


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

* Ouverture des fichiers
OPEN "", "ASSOCIATION" TO F.ASSOCIATION ELSE STOP
OPEN "", "DETAILCALCUL" TO F.DETAILCALCUL ELSE STOP
OPEN "", "CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP
OPEN "", "CONTRAT" TO F.CONTRAT ELSE STOP
OPEN "", "HISTORCUMUL" TO F.HISTORCUMUL ELSE STOP
OPEN "", "HISTORCUMULETABL" TO F.HISTORCUMULETABL ELSE STOP
OPEN "", "PERIODESPAIE" TO F.PERIODESPAIE ELSE STOP


* Priode max pour application de la modif
READ ENR_PERIODESPAIE FROM F.PERIODESPAIE, "1" ELSE STOP
W_PeriodeMax = ENR_PERIODESPAIE<1>


EXECUTE 'SSELECT ASSOCIATION PAR @ID'
EXECUTE 'SAUVE-LISTE W_ListeAsso'
EXECUTE "LISTE W_ListeAsso" RETURNING MSGCODE

IF MSGCODE<1> <> "209" THEN
	
	PRINT "Traitement en cours..."
	
	SELECT F.ASSOCIATION TO W_ListeAsso
	
	W_FinAsso = "FAUX"
	* Boucle sur les asso's
	LOOP
		READNEXT W_CleAsso FROM W_ListeAsso ELSE
			W_FinAsso = "VRAI"
		END
	
	UNTIL W_FinAsso = "VRAI"
		
		READ ENR_ASSOCIATION FROM F.ASSOCIATION, W_CleAsso ELSE ENR_ASSOCIATION = ""
		
		* Gestion dcalage de paie
		IF ENR_ASSOCIATION<25> = 0 THEN
			W_Requete = 'SSELECT DETAILCALCUL AVEC PeriodeDetailCalcul >= "200701" AND AVEC 2 = "801" AND AVEC TypeActiviteDetail # "M" OR AVEC PeriodeDetailCalcul >= "200701" AND AVEC 17 = "800" AND AVEC TypeActiviteDetail # "M" PAR CodeContrat'
		END ELSE
			W_Requete = 'SSELECT DETAILCALCUL AVEC PeriodeDetailCalcul >= "200612" AND AVEC 2 = "801" AND AVEC TypeActiviteDetail # "M" OR AVEC PeriodeDetailCalcul >= "200612" AND AVEC 17 = "800" AND AVEC TypeActiviteDetail # "M" PAR CodeContrat'
		END
		
		EXECUTE W_Requete
		EXECUTE 'SAUVE-LISTE W_ListeDetailCal'
		EXECUTE "LISTE W_ListeDetailCal" RETURNING MSGCODE
		
		IF MSGCODE<1> <> "209" THEN
			SELECT F.DETAILCALCUL TO W_ListeDetailCal
			
				
			* Boucle sur les DETAILCALCUL
			W_FinDetail = "FAUX"
			W_PremierPassage = "VRAI"
			
			LOOP
				READNEXT W_CleDetail FROM W_ListeDetailCal ELSE
					W_FinDetail = "VRAI"
				END
				
				
			UNTIL W_FinDetail = "VRAI"
				READ ENR_DETAILCALCUL FROM F.DETAILCALCUL, W_CleDetail ELSE ENR_DETAILCALCUL = ""
				
				
				* Si le contrat actuel est diffrent du prcdent
				IF W_CodeContrat <> W_CleDetail[1,8] AND W_PremierPassage <> "VRAI" AND (W_MontIndLicenciement <> 0 OR W_MontIndRetraite <> 0) THEN
					GOSUB 10
					W_MontIndLicenciement = 0
					W_MontIndRetraite = 0
				END
				W_PremierPassage = "FAUX"
				

				
				W_CodeContrat = W_CleDetail[1,8]
				
				READ ENR_CONTRAT FROM F.CONTRAT, W_CleDetail[1,8] ELSE ENR_CONTRAT = ""
				
				* Si le DETAILCALCUL est bien pendant ou avant la dernire priode clture du contrat
				IF W_CleDetail[9,6] < W_PeriodeMax THEN
				
					W_Temp=DCOUNT(ENR_DETAILCALCUL<2>,CHAR(253))
					FOR k = 1 TO W_Temp
						IF ENR_DETAILCALCUL<2,k> = "801" THEN W_MontIndRetraite = W_MontIndRetraite + ENR_DETAILCALCUL<5,k>
					NEXT k
					
					W_Temp=DCOUNT(ENR_DETAILCALCUL<17>,CHAR(253))
					FOR k=1 TO W_Temp
						IF ENR_DETAILCALCUL<17,k> = "800" THEN W_MontIndLicenciement = W_MontIndLicenciement + ENR_DETAILCALCUL<20,k>
					NEXT k
				END
			REPEAT
			
			IF W_MontIndLicenciement <> 0 OR W_MontIndRetraite <> 0 THEN GOSUB 10
			
		END
	REPEAT
END

PRINT "Traitement termin."

RETURN
	
10
	
	* Mise  jour de HISTORCUMUL
	READ ENR_HISTORCUMUL FROM F.HISTORCUMUL, W_CodeContrat[1,5]:"2007":W_CleAsso THEN
	
	ENR_HISTORCUMUL<28> = ENR_HISTORCUMUL<28> + W_MontIndLicenciement
	ENR_HISTORCUMUL<29> = ENR_HISTORCUMUL<29> + W_MontIndRetraite
	
	WRITE ENR_HISTORCUMUL ON F.HISTORCUMUL, W_CodeContrat[1,5]:"2007":W_CleAsso
	END
	
	READ ENR_HISTORCUMULETABL FROM F.HISTORCUMULETABL, W_CodeContrat[1,5]:"2007":ENR_CONTRAT<3> THEN
	
	ENR_HISTORCUMULETABL<28> = ENR_HISTORCUMULETABL<28> + W_MontIndLicenciement
	ENR_HISTORCUMULETABL<29> = ENR_HISTORCUMULETABL<29> + W_MontIndRetraite
	
	WRITE ENR_HISTORCUMULETABL ON F.HISTORCUMULETABL, W_CodeContrat[1,5]:"2007":ENR_CONTRAT<3>
	END

RETURN