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

OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE STOP
OPEN "","PERIODESPAIE" TO F.PERIODESPAIE ELSE STOP
OPEN "","RUBCHARGE" TO F.RUBCHARGE ELSE STOP
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE STOP
OPEN "","REGULCHARGETAMPON" TO F.REGULCHARGETAMPON ELSE STOP
OPEN "","CONTRAT" TO F.CONTRAT ELSE STOP
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE STOP
OPEN "","TEMPO" TO F.TEMPO ELSE STOP
OPEN "","FUSION" TO F.FUSION ELSE STOP

PROCREAD PARAMETRES ELSE STOP

W_Asso = FIELD(PARAMETRES,"|",2)
W_RubCharge=FIELD(PARAMETRES,"|",3)
W_EnCours=FIELD(PARAMETRES,"|",4)
W_Prec=FIELD(PARAMETRES,"|",5)
ENR_ASSOCIATION=""
ENR_RUBCHARGE=""
ENR_DETAILCALCUL=""
ENR_REGULCHARGETAMPON=""
ENR_TEMPO=""

W_ReqContrat=""
W_ReqDetCalc=""
W_AncienAidant=""
W_Contrat=""

DATESYST=DATE()
DATESYST=OCONV(DATESYST,"D4/")
DATESYST=DATESYST[1,2]:DATESYST[4,2]:DATESYST[7,4]
HEURESYST=TIMEDATE()
HEURESYST=HEURESYST[1,2]:HEURESYST[4,2]

* Michael, le 24/12/07 : Va mettre ds rubcharges 901 et 905 les libells et cptes cptables correspondant...
* + IMPORTANT : va positionner les rub 901 et 905 en type "Prevoyance" afin que ne soient pas inclus ds certains trts,
* notamment calcul du taux de charges effectif du bulletin pour determiner le taux de la reduction salariale hres suppl.
* -> si une regul de charges doit etre ultrieurement effectue, remettre ces rubriques en l'etat ...
EXECUTE 'RUN PRMOUL MAJRUBREG'

READ ENR_PERIODESPAIE FROM F.PERIODESPAIE, "1" ELSE ENR_PERIODESPAIE=""
* On va utiliser un tableau pour stocker les donnes.
* La tableau se prsente comme suit :
* W_TabMois<1,1> -> Anne DADS -3
* W_TabMois<1,2> -> Cumul de l'aidant de l'anne DADS - 3
* W_TabMois<1,3> -> Cumul de l'assiette de l'anne DADS - 3 rub. 901
* W_TabMois<1,4> -> Cumul du montant de l'anne DADS - 3 rub. 901
* W_TabMois<1,5> -> Cumul de l'assiette de l'anne DADS - 3 rub. 905
* W_TabMois<1,6> -> Cumul du montant de l'anne DADS - 3 rub. 905
* W_TabMois<2,1> -> Anne DADS -2
* W_TabMois<2,2> -> Cumul de l'aidant de l'anne DADS - 2
* W_TabMois<2,3> -> Cumul de l'assiette de l'anne DADS - 2 rub. 901
* W_TabMois<2,4> -> Cumul du montant de l'anne DADS - 2 rub. 905
* W_TabMois<1,5> -> Cumul de l'assiette de l'anne DADS - 2 rub. 905
* W_TabMois<1,6> -> Cumul du montant de l'anne DADS - 2 rub. 905
* Etc
W_TabMois=""
ENR_FUSION3=""
ENR_FUSION3<1>="Code;Nom prnom;Etablissement;Base CSG/CRDS;Mont CSG/CRDS;Base CSG DEDUC;Mont CSG DEDUC;TOTAL REGUL"
I3=1
ENR_FUSION2=""
ENR_FUSION2<1>="Code;Nom prnom;Etablissement;Base CSG/CRDS;Mont CSG/CRDS;Base CSG DEDUC;Mont CSG DEDUC;TOTAL REGUL"
I2=1
ENR_FUSION1=""
ENR_FUSION1<1>="Code;Nom prnom;Etablissement;Base CSG/CRDS;Mont CSG/CRDS;Base CSG DEDUC;Mont CSG DEDUC;TOTAL REGUL"
I1=1
ENR_FUSION0=""
ENR_FUSION0<1>="Code;Nom prnom;Etablissement;Base CSG/CRDS;Mont CSG/CRDS;Base CSG DEDUC;Mont CSG DEDUC;TOTAL REGUL"
I0=1

W_TabMois<1,1>=ENR_PERIODESPAIE<1>[1,4]-3
W_TabMois<2,1>=ENR_PERIODESPAIE<1>[1,4]-2
W_TabMois<3,1>=ENR_PERIODESPAIE<1>[1,4]-1
W_TabMois<4,1>=ENR_PERIODESPAIE<1>[1,4]

FOR I = 1 TO 4
	FOR J = 2 TO 6
		W_TabMois<I,J>="0"
	NEXT
NEXT
READ ENR_ASSOCIATION FROM F.ASSOCIATION, W_Asso ELSE ENR_ASSOCIATION=""

* On cherche les priodes de bornage en fonction de 2 choses :
*	- les priodes DADS voulues (en cours et/ou 3 dernires annes)
*	- le dcalage de paie
W_PeriodeDeb=""
W_PeriodeFin=""
IF W_EnCours="1" THEN
	W_PeriodeFin=ENR_PERIODESPAIE<1>-1
	IF W_PeriodeFin[5,2]="00" THEN
		W_PeriodeFin=ENR_PERIODESPAIE<1>[1,4]-1
		W_PeriodeFin=W_PeriodeFin:"12"
	END
	IF W_Prec="1" THEN
		IF ENR_ASSOCIATION<25>="0" THEN
			W_PeriodeDeb=ENR_PERIODESPAIE<1>[1,4]
			W_PeriodeDeb=W_PeriodeDeb-3
			W_PeriodeDeb=W_PeriodeDeb:"01"
		END ELSE
			W_PeriodeDeb=ENR_PERIODESPAIE<1>[1,4]
			W_PeriodeDeb=W_PeriodeDeb-4
			W_PeriodeDeb=W_PeriodeDeb:"12"
		END
	END ELSE
		IF ENR_ASSOCIATION<25>="0" THEN
			W_PeriodeDeb=ENR_PERIODESPAIE<1>[1,4]
			W_PeriodeDeb=W_PeriodeDeb:"01"
		END ELSE
			W_PeriodeDeb=ENR_PERIODESPAIE<1>[1,4]
			W_PeriodeDeb=W_PeriodeDeb-1
			W_PeriodeDeb=W_PeriodeDeb:"12"
		END
	END
END ELSE
	IF ENR_ASSOCIATION<25>="0" THEN
		W_PeriodeDeb=ENR_PERIODESPAIE<1>[1,4]
		W_PeriodeDeb=W_PeriodeDeb-3
		W_PeriodeDeb=W_PeriodeDeb:"01"
		W_PeriodeFin=ENR_PERIODESPAIE<1>[1,4]
		W_PeriodeFin=W_PeriodeFin-1
		W_PeriodeFin=W_PeriodeFin:"12"
	END ELSE
		W_PeriodeDeb=ENR_PERIODESPAIE<1>[1,4]
		W_PeriodeDeb=W_PeriodeDeb-4
		W_PeriodeDeb=W_PeriodeDeb:"12"
		W_PeriodeFin=ENR_PERIODESPAIE<1>[1,4]
		W_PeriodeFin=W_PeriodeFin-1
		W_PeriodeFin=W_PeriodeFin:"11"	
	END
END

W_Date="01/":ENR_PERIODESPAIE<1>[5,2]:"/":ENR_PERIODESPAIE<1>[1,4]
W_Date=ICONV(W_Date,"D4/")
EXECUTE 'SELECT CONTRAT AVEC 1 <> "02" AND AVEC 2 = "':W_Asso:'" AND AVEC 7 <= "':W_Date:'" AND AVEC 8 >= "':W_Date:'" OR = "" AND AVEC 65 # "O" PAR @ID'
EXECUTE 'SAUVE-LISTE W_ReqContrat'
EXECUTE 'LISTE W_ReqContrat' CAPTURING MSG RETURNING MSGCODE

IF MSGCODE<1>#209 THEN
	SELECT F.CONTRAT TO W_ReqContrat
   
	W_FIN="FAUX"
	LOOP
		READNEXT W_CleContrat FROM W_ReqContrat ELSE W_FIN="VRAI"
	WHILE W_FIN="FAUX"
		IF W_AncienAidant="" THEN
			W_AncienAidant=W_CleContrat[1,5]
			W_Contrat=W_CleContrat
		END
		IF W_AncienAidant#W_CleContrat[1,5] THEN
			GOSUB 20
			W_AncienAidant=W_CleContrat[1,5]
			W_Contrat=W_CleContrat
		END
		GOSUB 10
	REPEAT
	GOSUB 20
	
	IF W_TabMois<5,3>=0 AND W_TabMois<5,4>=0 AND W_TabMois<6,3>=0 AND W_TabMois<6,4>=0 AND W_TabMois<7,3>=0 AND W_TabMois<7,4>=0 AND W_TabMois<8,3>=0 AND W_TabMois<8,4>=0 THEN
		ENR_TEMPO<1>="RIEN"
	END ELSE
		ENR_TEMPO<1>=W_TabMois<5,3> "MR2"
		ENR_TEMPO<2>=W_TabMois<5,4> "MR2"
		ENR_TEMPO<3>=W_TabMois<6,3> "MR2"
		ENR_TEMPO<4>=W_TabMois<6,4> "MR2"
		ENR_TEMPO<5>=W_TabMois<7,3> "MR2"
		ENR_TEMPO<6>=W_TabMois<7,4> "MR2"
		ENR_TEMPO<7>=W_TabMois<8,3> "MR2"
		ENR_TEMPO<8>=W_TabMois<8,4> "MR2"
		ENR_TEMPO<9>=W_TabMois<5,5>  "MR2"
		ENR_TEMPO<10>=W_TabMois<5,6> "MR2"
		ENR_TEMPO<11>=W_TabMois<6,5> "MR2"
		ENR_TEMPO<12>=W_TabMois<6,6> "MR2"
		ENR_TEMPO<13>=W_TabMois<7,5> "MR2"
		ENR_TEMPO<14>=W_TabMois<7,6> "MR2"
		ENR_TEMPO<15>=W_TabMois<8,5> "MR2"
		ENR_TEMPO<16>=W_TabMois<8,6> "MR2"	
	END
	WRITE ENR_TEMPO ON F.TEMPO, "REGULCSGCRDS"
END

IF I3>1 THEN WRITE ENR_FUSION3 ON F.FUSION,"CSG":W_TabMois<1,1>:W_RubCharge:"-":DATESYST:"-":HEURESYST:".CSV"
IF I2>1 THEN WRITE ENR_FUSION2 ON F.FUSION,"CSG":W_TabMois<2,1>:W_RubCharge:"-":DATESYST:"-":HEURESYST:".CSV"
IF I1>1 THEN WRITE ENR_FUSION1 ON F.FUSION,"CSG":W_TabMois<3,1>:W_RubCharge:"-":DATESYST:"-":HEURESYST:".CSV"
IF I0>1 THEN WRITE ENR_FUSION0 ON F.FUSION,"CSG":W_TabMois<4,1>:W_RubCharge:"-":DATESYST:"-":HEURESYST:".CSV"

STOP
*******************************************************
* On traite les DETAILCALCUL du contrat               *
*******************************************************
10
READ ENR_CONTRAT FROM F.CONTRAT,W_CleContrat ELSE ENR_CONTRAT=""
W_REQUETE='SELECT DETAILCALCUL AVEC @ID = "':W_CleContrat[1,5]:']" AND AVEC ConvColContratDetailCalcul # "02" AND AVEC PeriodeDetailCalcul >= "':W_PeriodeDeb:'" AND AVEC PeriodeDetailCalcul <= "':W_PeriodeFin:'" AND AVEC CodAssoContratDetailCalcul = "':W_Asso:'" AND AVEC 8 = "':W_RubCharge:'" PAR PeriodeDetailCalcul'
EXECUTE W_REQUETE
EXECUTE 'SAUVE-LISTE W_ReqDetCalc'
EXECUTE 'LISTE W_ReqDetCalc' CAPTURING MSG RETURNING MSGCODE

IF MSGCODE<1>#209 THEN
	SELECT F.DETAILCALCUL TO W_ReqDetCalc
	
	W_Fini="FAUX"
	LOOP
		READNEXT W_CleDetCalc FROM W_ReqDetCalc ELSE W_Fini="VRAI"
	WHILE W_Fini="FAUX"
		READ ENR_DETAILCALCUL FROM F.DETAILCALCUL, W_CleDetCalc THEN
			W_Annee=W_CleDetCalc[9,4]
			IF ENR_ASSOCIATION<25> = "1" AND W_CleDetCalc[13,2]="12" THEN W_Annee=W_Annee+1
			J=1
			LOOP
			UNTIL ENR_DETAILCALCUL<8,J>="" OR ENR_DETAILCALCUL<8,J>=W_RubCharge DO
				J=J+1
			REPEAT
			IF ENR_DETAILCALCUL<8,J>=W_RubCharge THEN
				I=1
				LOOP
				UNTIL W_TabMois<I,1>=W_Annee OR W_TabMois<I,1>="" DO
					I=I+1
				REPEAT
				IF W_TabMois<I,1>=W_Annee THEN W_TabMois<I,2>=W_TabMois<I,2>+ENR_DETAILCALCUL<14,J>
			END
		END
	REPEAT
END

RETURN
*******************************************************
* On crit REGULCHARGETAMPON  la rupture de l'aidant *
*******************************************************
20

	* Le traitement tant lanc en 2007, l'anne 2004 est la premire du tableau.

	READ ENR_REGULCHARGETAMPON FROM F.REGULCHARGETAMPON,W_Contrat ELSE ENR_REGULCHARGETAMPON=""
	
	W_TabMois<1,3>=INT((W_TabMois<1,2>*95/100)+1/2)
	W_TabMois<5,3>=W_TabMois<5,3>+W_TabMois<1,3>
	W_TabMois<1,4>=INT(W_TabMois<1,3>*(290/10000)+1/2)
	W_TabMois<5,4>=W_TabMois<5,4>+W_TabMois<1,4>
	W_TabMois<2,3>=INT((W_TabMois<2,2>*97/100)+1/2)
	W_TabMois<6,3>=W_TabMois<6,3>+W_TabMois<2,3>
	W_TabMois<2,4>=INT(W_TabMois<2,3>*(290/10000)+1/2)
	W_TabMois<6,4>=W_TabMois<6,4>+W_TabMois<2,4>
	W_TabMois<3,3>=INT((W_TabMois<3,2>*97/100)+1/2)
	W_TabMois<7,3>=W_TabMois<7,3>+W_TabMois<3,3>
	W_TabMois<3,4>=INT(W_TabMois<3,3>*(290/10000)+1/2)
	W_TabMois<7,4>=W_TabMois<7,4>+W_TabMois<3,4>
	W_TabMois<4,3>=INT((W_TabMois<4,2>*97/100)+1/2)
	W_TabMois<8,3>=W_TabMois<8,3>+W_TabMois<4,3>
	W_TabMois<4,4>=INT(W_TabMois<4,3>*(290/10000)+1/2)
	W_TabMois<8,4>=W_TabMois<8,4>+W_TabMois<4,4>
	W_REGUL=-(W_TabMois<1,3>+W_TabMois<2,3>+W_TabMois<3,3>+W_TabMois<4,3>)
	ENR_REGULCHARGETAMPON<1,1>=ENR_REGULCHARGETAMPON<1,1>+W_REGUL
	ENR_REGULCHARGETAMPON<2,1>="2900"
	ENR_REGULCHARGETAMPON<3,1>=ENR_REGULCHARGETAMPON<3,1>-(W_TabMois<1,4>+W_TabMois<2,4>+W_TabMois<3,4>+W_TabMois<4,4>)
	ENR_REGULCHARGETAMPON<4,1>=""
	ENR_REGULCHARGETAMPON<5,1>=""

	W_TabMois<1,5>=INT((W_TabMois<1,2>*95/100)+1/2)
	W_TabMois<5,5>=W_TabMois<5,5>+W_TabMois<1,5>
	W_TabMois<1,6>=INT(W_TabMois<1,5>*(510/10000)+1/2)
	W_TabMois<5,6>=W_TabMois<5,6>+W_TabMois<1,6>
	W_TabMois<2,5>=INT((W_TabMois<2,2>*97/100)+1/2)
	W_TabMois<6,5>=W_TabMois<6,5>+W_TabMois<2,5>
	W_TabMois<2,6>=INT(W_TabMois<2,5>*(510/10000)+1/2)
	W_TabMois<6,6>=W_TabMois<6,6>+W_TabMois<2,6>
	W_TabMois<3,5>=INT((W_TabMois<3,2>*97/100)+1/2)
	W_TabMois<7,5>=W_TabMois<7,5>+W_TabMois<3,5>
	W_TabMois<3,6>=INT(W_TabMois<3,5>*(510/10000)+1/2)
	W_TabMois<7,6>=W_TabMois<7,6>+W_TabMois<3,6>
	W_TabMois<4,5>=INT((W_TabMois<4,2>*97/100)+1/2)
	W_TabMois<8,5>=W_TabMois<8,5>+W_TabMois<4,5>
	W_TabMois<4,6>=INT(W_TabMois<4,5>*(510/10000)+1/2)
	W_TabMois<8,6>=W_TabMois<8,6>+W_TabMois<4,6>
	W_REGUL=-(W_TabMois<1,5>+W_TabMois<2,5>+W_TabMois<3,5>+W_TabMois<4,5>)
	ENR_REGULCHARGETAMPON<1,2>=ENR_REGULCHARGETAMPON<1,2>+W_REGUL
	ENR_REGULCHARGETAMPON<2,2>="5100"
	ENR_REGULCHARGETAMPON<3,2>=ENR_REGULCHARGETAMPON<3,2>-(W_TabMois<1,6>+W_TabMois<2,6>+W_TabMois<3,6>+W_TabMois<4,6>)
	ENR_REGULCHARGETAMPON<4,2>=""
	ENR_REGULCHARGETAMPON<5,2>=""

	IF ENR_REGULCHARGETAMPON<3,1>#"0" OR ENR_REGULCHARGETAMPON<3,2>#"0" THEN WRITE ENR_REGULCHARGETAMPON ON F.REGULCHARGETAMPON,W_Contrat
	
	READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_Contrat[1,5] ELSE ENR_CIVILAIDANT=""
	
	IF W_TabMois<1,2>#0 THEN
		I3=I3+1
		BASECSGCRDS=W_TabMois<1,3> "MR2"
		MONTCSGCRDS=W_TabMois<1,4> "MR2"
		BASECSGDEDUC=W_TabMois<1,5> "MR2"
		MONTCSGDEDUC=W_TabMois<1,6> "MR2"
		TOTREGUL=W_TabMois<1,4>+W_TabMois<1,6>
		TOTREGUL=TOTREGUL "MR2"
		ENR_FUSION3<I3>=W_Contrat[1,5]:";":ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>:";":ENR_CONTRAT<3>[1,3]:";":BASECSGCRDS:";":MONTCSGCRDS:";":BASECSGDEDUC:";":MONTCSGDEDUC:";":TOTREGUL
	END

	IF W_TabMois<2,2>#0 THEN
		I2=I2+1
		BASECSGCRDS=W_TabMois<2,3> "MR2"
		MONTCSGCRDS=W_TabMois<2,4> "MR2"
		BASECSGDEDUC=W_TabMois<2,5> "MR2"
		MONTCSGDEDUC=W_TabMois<2,6> "MR2"
		TOTREGUL=W_TabMois<2,4>+W_TabMois<2,6>
		TOTREGUL=TOTREGUL "MR2"
		ENR_FUSION2<I2>=W_Contrat[1,5]:";":ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>:";":ENR_CONTRAT<3>[1,3]:";":BASECSGCRDS:";":MONTCSGCRDS:";":BASECSGDEDUC:";":MONTCSGDEDUC:";":TOTREGUL
	END

	IF W_TabMois<3,2>#0 THEN
		I1=I1+1
		BASECSGCRDS=W_TabMois<3,3> "MR2"
		MONTCSGCRDS=W_TabMois<3,4> "MR2"
		BASECSGDEDUC=W_TabMois<3,5> "MR2"
		MONTCSGDEDUC=W_TabMois<3,6> "MR2"
		TOTREGUL=W_TabMois<3,4>+W_TabMois<3,6>
		TOTREGUL=TOTREGUL "MR2"
		ENR_FUSION1<I1>=W_Contrat[1,5]:";":ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>:";":ENR_CONTRAT<3>[1,3]:";":BASECSGCRDS:";":MONTCSGCRDS:";":BASECSGDEDUC:";":MONTCSGDEDUC:";":TOTREGUL
	END

	IF W_TabMois<4,2>#0 THEN
		I0=I0+1
		BASECSGCRDS=W_TabMois<4,3> "MR2"
		MONTCSGCRDS=W_TabMois<4,4> "MR2"
		BASECSGDEDUC=W_TabMois<4,5> "MR2"
		MONTCSGDEDUC=W_TabMois<4,6> "MR2"
		TOTREGUL=W_TabMois<4,4>+W_TabMois<4,6>
		TOTREGUL=TOTREGUL "MR2"
		ENR_FUSION0<I0>=W_Contrat[1,5]:";":ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>:";":ENR_CONTRAT<3>[1,3]:";":BASECSGCRDS:";":MONTCSGCRDS:";":BASECSGDEDUC:";":MONTCSGDEDUC:";":TOTREGUL
	END
	FOR D=2 TO 6
		W_TabMois<1,D>="0"
		W_TabMois<2,D>="0"
		W_TabMois<3,D>="0"
		W_TabMois<4,D>="0"
	NEXT D
RETURN