**********************************************************
*  gnration du fichier SSIADHISTACTINTEXT
*  pour dition tat de paiement
*  Vanessa
*  septembre 2004
*  modifier le 10 mai 2005 par FANNY
**********************************************************

* Ouvertures des fichiers

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","ACTIVITES" TO F.ACTIVITES ELSE PRINT "OUVERTURE ACTIVITES" ;* en lecture
OPEN "","NUMEROFACT" TO F.NUMEROFACT ELSE PRINT "OUVERTURE NUMEROFACT" ;* en lecture criture
OPEN "","SSIADACTINTEXT" TO F.SSIADACTINTEXT ELSE PRINT "OUVERTURE SSIADACTINTEXT" ;* en lecture criture
OPEN "","SSIADHISTACTINTEXT" TO F.SSIADHISTACTINTEXT ELSE PRINT "OUVERTURE SSIADHISTACTINTEXT" ;* en criture 
OPEN "","SSIADSERVICE" TO F.SSIADSERVICE ELSE PRINT "OUVERTURE SSIADSERVICE" ;* en lecture
OPEN "","TABLES" TO F.TABLES ELSE PRINT "OUVERTURE TABLES" ;* en lecture
OPEN "","TEMPO" TO F.TEMPO ELSE PRINT "OUVERTURE TEMPO" ;* en criture

*********************************************************
* initialisation des variables
W_RequeteEtatPaie=""
W_TabDyn=""
W_Num=""
ENR_TEMPO=""
*********************************************************
*  Rcupration des arguments

PROCREAD ARGUMENTS ELSE STOP

W_User=FIELD(ARGUMENTS,"|",2)
W_Entite=FIELD(ARGUMENTS,"|",3)
W_TypeInterv=FIELD(ARGUMENTS,"|",4)
W_DateArrete=FIELD(ARGUMENTS,"|",5)
W_DatePaie=FIELD(ARGUMENTS,"|",6)
W_TypeEdition=FIELD(ARGUMENTS,"|",7)

*********************************************************
*  PROGRAMME PRINCIPAL
   
	READ ENR_NUMEROFACT FROM F.NUMEROFACT,W_Entite ELSE ENR_NUMEROFACT=""
	IF ENR_NUMEROFACT<9>="" THEN
		W_Num=0
	END ELSE
		W_Num=ENR_NUMEROFACT<9>
	END
	
	W_Temp = 'SSELECT SSIADACTINTEXT AVEC 2 = "':W_Entite:']"'

	IF W_TypeInterv # "" THEN
		W_Temp = W_Temp:' AND AVEC TypeInterv = "':W_TypeInterv:'"'
	END
	W_Temp = W_Temp:' PAR NomPrenomInterv PAR NomPrenomAide'

	EXECUTE W_Temp
	EXECUTE 'SAUVE-LISTE W_RequeteEtatPaie'
	EXECUTE "LISTE W_RequeteEtatPaie" RETURNING MSGCODE

	IF MSGCODE<1>=209 THEN
		STOP
	END ELSE
		SELECT F.SSIADACTINTEXT TO W_RequeteEtatPaie

		W_End = "FAUX"
     		i=1
		W_Interv=""

		LOOP
			READNEXT W_Cle FROM W_RequeteEtatPaie ELSE W_End = "VRAI"
		WHILE W_End = "FAUX" DO
 
			READ ENR_SSIADACTINTEXT FROM F.SSIADACTINTEXT,W_Cle ELSE ENR_SSIADACTINTEXT=""
			IF W_Cle[1,5] # W_Interv THEN

				IF W_Interv # "" THEN
					IF W_TabDyn<1> # "" THEN

						W_TabDyn<8>=W_DateArrete
						GOSUB 40
						W_CleHist= W_Interv:W_Num+1 "R%10":W_Entite:W_DatePaie
						WRITE W_TabDyn ON F.SSIADHISTACTINTEXT,W_CleHist

						ENR_TEMPO=REPLACE(ENR_TEMPO,1,i;W_CleHist)
						W_Num=W_Num+1
						i=i+1
					END
				END
				W_Interv=W_Cle[1,5]
				W_TabDyn=""
				W_MVAide=1
			END ELSE
			   IF W_TabDyn<1,W_MVAide> # "" THEN
				W_MVAide=W_MVAide+1
			   END
			END

 			GOSUB 10
       
		REPEAT
		IF W_TabDyn<1> # "" THEN
			W_TabDyn<8>=W_DateArrete
			GOSUB 40
			W_CleHist= W_Interv:W_Num+1 "R%10":W_Entite:W_DatePaie
			WRITE W_TabDyn ON F.SSIADHISTACTINTEXT,W_CleHist

			ENR_TEMPO=REPLACE(ENR_TEMPO,1,i;W_CleHist)
			W_Num=W_Num+1
		END

	END

 	ENR_NUMEROFACT<9>=W_Num
	WRITE ENR_NUMEROFACT ON F.NUMEROFACT,W_Entite

	WRITE ENR_TEMPO ON F.TEMPO,"ETATPAIEMENT":W_User

STOP

*********************************************************
*  parcourt les mv des dates
10

	k=DCOUNT(ENR_SSIADACTINTEXT<1>,CHAR(253))
	LOOP
	UNTIL INT(ENR_SSIADACTINTEXT<1,k>) > INT(W_DateArrete) OR k=0 DO

		W_TabDyn<1,W_MVAide>=W_Cle[6,5]



		READ ENR_ACTIVITES FROM F.ACTIVITES,ENR_SSIADACTINTEXT<2,k> ELSE ENR_ACTIVITES=""
		IF W_Entite=ENR_SSIADACTINTEXT<2,k>[1,3] THEN   

			IF W_TabDyn<11,W_MVAide>="" THEN
				W_TabDyn<11,W_MVAide>=ENR_SSIADACTINTEXT<1,k>
			END ELSE
				IF W_TabDyn<11,W_MVAide> > ENR_SSIADACTINTEXT<1,k> THEN
					W_TabDyn<11,W_MVAide> = ENR_SSIADACTINTEXT<1,k>
				END
			END
			IF W_TabDyn<12,W_MVAide>="" THEN
				W_TabDyn<12,W_MVAide>=ENR_SSIADACTINTEXT<1,k>
			END ELSE
				IF W_TabDyn<12,W_MVAide> < ENR_SSIADACTINTEXT<1,k> THEN
					W_TabDyn<12,W_MVAide> = ENR_SSIADACTINTEXT<1,k>
				END
			END


			GOSUB 20
		END

		k=k-1
	REPEAT

RETURN

*********************************************************
*  remplit fichier SSIADHISTACTINTEXT
20

	* actes principaux
	j=1
	LOOP
	UNTIL (ENR_SSIADACTINTEXT<2,k>=W_TabDyn<9,W_MVAide,j> AND ENR_SSIADACTINTEXT<4,k>=W_TabDyn<3,W_MVAide,j> AND ENR_SSIADACTINTEXT<5,k>=W_TabDyn<4,W_MVAide,j>) OR W_TabDyn<3,W_MVAide,j>="" OR W_TabDyn<3,W_MVAide,j> > "05" DO
		j=j+1
	REPEAT

	IF W_TabDyn<3,W_MVAide,j> = "" THEN
		W_ActPal="VRAI"
		GOSUB 30
		IF j=1 THEN
			W_TabDyn<2,W_MVAide>=ENR_SSIADACTINTEXT<3,k>
			W_TabDyn<3,W_MVAide>=ENR_SSIADACTINTEXT<4,k>
			W_TabDyn<4,W_MVAide>=ENR_SSIADACTINTEXT<5,k>
			W_TabDyn<5,W_MVAide>=W_Montant
			W_TabDyn<6,W_MVAide>=""
			W_TabDyn<9,W_MVAide>=ENR_SSIADACTINTEXT<2,k>

			* met une MV  vide pour rgler pb SV
			IF W_MVAide=1 THEN
				W_TabDyn<1,2>=""
				W_TabDyn<2,2>=""
				W_TabDyn<3,2>=""
				W_TabDyn<4,2>=""
				W_TabDyn<5,2>=""
				W_TabDyn<6,2>=""
				W_TabDyn<9,2>=""
				W_TabDyn<11,2>=""
				W_TabDyn<12,2>=""
			END
		END ELSE
			W_TabDyn<2,W_MVAide,j>=ENR_SSIADACTINTEXT<3,k>
			W_TabDyn<3,W_MVAide,j>=ENR_SSIADACTINTEXT<4,k>
			W_TabDyn<4,W_MVAide,j>=ENR_SSIADACTINTEXT<5,k>
			W_TabDyn<5,W_MVAide,j>=W_Montant
			W_TabDyn<6,W_MVAide,j>=""
			W_TabDyn<9,W_MVAide,j>=ENR_SSIADACTINTEXT<2,k>
		END
	END ELSE
		W_ActPal="VRAI"
		GOSUB 30
		IF W_TabDyn<3,W_MVAide,j> > "05" THEN
			W_TabDyn=INSERT(W_TabDyn,2,W_MVAide,j;ENR_SSIADACTINTEXT<3,k>)
			W_TabDyn=INSERT(W_TabDyn,3,W_MVAide,j;ENR_SSIADACTINTEXT<4,k>)
			W_TabDyn=INSERT(W_TabDyn,4,W_MVAide,j;ENR_SSIADACTINTEXT<5,k>)
			W_TabDyn=INSERT(W_TabDyn,5,W_MVAide,j;W_Montant)
			W_TabDyn=INSERT(W_TabDyn,6,W_MVAide,j;"")
			W_TabDyn=INSERT(W_TabDyn,9,W_MVAide,j;ENR_SSIADACTINTEXT<2,k>)
		END ELSE
			W_TabDyn<2,W_MVAide,j>=W_TabDyn<2,W_MVAide,j>+ENR_SSIADACTINTEXT<3,k>
			W_TabDyn<5,W_MVAide,j>=W_TabDyn<5,W_MVAide,j>+W_Montant
		END
	END


	* actes associs
	IF ENR_SSIADACTINTEXT<7,k> # "" THEN
		j=1
		LOOP
		UNTIL (ENR_SSIADACTINTEXT<2,k>=W_TabDyn<9,W_MVAide,j> AND ENR_SSIADACTINTEXT<7,k>+5 "R%2"=W_TabDyn<3,W_MVAide,j> AND ENR_SSIADACTINTEXT<8,k>=W_TabDyn<4,W_MVAide,j>) OR W_TabDyn<3,W_MVAide,j>="" OR W_TabDyn<3,W_MVAide,j> > "10" DO
			j=j+1
		REPEAT
		IF W_TabDyn<3,W_MVAide,j> = "" THEN
			W_ActPal="FAUX"
			GOSUB 30
			W_TabDyn<2,W_MVAide,j>=ENR_SSIADACTINTEXT<6,k>
			W_TabDyn<3,W_MVAide,j>=ENR_SSIADACTINTEXT<7,k>+5 "R%2"
			W_TabDyn<4,W_MVAide,j>=ENR_SSIADACTINTEXT<8,k>
			W_TabDyn<5,W_MVAide,j>=W_Montant
			W_TabDyn<6,W_MVAide,j>=""
			W_TabDyn<9,W_MVAide,j>=ENR_SSIADACTINTEXT<2,k>
		END ELSE
			W_ActPal="FAUX"
			GOSUB 30
			IF W_TabDyn<3,W_MVAide,j> > "10" THEN

				W_TabDyn=INSERT(W_TabDyn,2,W_MVAide,j;ENR_SSIADACTINTEXT<6,k>)
				W_TabDyn=INSERT(W_TabDyn,3,W_MVAide,j;ENR_SSIADACTINTEXT<7,k>+5 "R%2")
				W_TabDyn=INSERT(W_TabDyn,4,W_MVAide,j;ENR_SSIADACTINTEXT<8,k>)
				W_TabDyn=INSERT(W_TabDyn,5,W_MVAide,j;W_Montant)
				W_TabDyn=INSERT(W_TabDyn,6,W_MVAide,j;"")
				W_TabDyn=INSERT(W_TabDyn,9,W_MVAide,j;ENR_SSIADACTINTEXT<2,k>)
			END ELSE
				W_TabDyn<2,W_MVAide,j>=W_TabDyn<2,W_MVAide,j>+ENR_SSIADACTINTEXT<6,k>
				W_TabDyn<5,W_MVAide,j>=W_TabDyn<5,W_MVAide,j>+W_Montant
			END
		END		
	END

	* dim-jf
	IF ENR_SSIADACTINTEXT<9,k> # "" AND ENR_SSIADACTINTEXT<9,k> # "0" THEN
		j=1
		LOOP
		UNTIL (ENR_SSIADACTINTEXT<2,k>=W_TabDyn<9,W_MVAide,j> AND W_TabDyn<3,W_MVAide,j>="11") OR W_TabDyn<3,W_MVAide,j>="" DO
			j=j+1
		REPEAT
		IF W_TabDyn<3,W_MVAide,j> = "" THEN
			W_ActPal="VRAI"
			GOSUB 30
			W_TabDyn<2,W_MVAide,j>=ENR_SSIADACTINTEXT<9,k>
			W_TabDyn<3,W_MVAide,j>="11"
			W_TabDyn<4,W_MVAide,j>=""
			W_TabDyn<5,W_MVAide,j>=W_DimJF
			W_TabDyn<6,W_MVAide,j>=""
			W_TabDyn<9,W_MVAide,j>=ENR_SSIADACTINTEXT<2,k>
		END ELSE
			W_ActPal="VRAI"
			GOSUB 30
			W_TabDyn<2,W_MVAide,j>=W_TabDyn<2,W_MVAide,j>+ENR_SSIADACTINTEXT<9,k>
			W_TabDyn<5,W_MVAide,j>=W_TabDyn<5,W_MVAide,j>+W_DimJF
		END
	END

	* nuit
	IF ENR_SSIADACTINTEXT<10,k> # "" AND ENR_SSIADACTINTEXT<10,k> # "0" THEN
		j=1
		LOOP
		UNTIL (ENR_SSIADACTINTEXT<2,k>=W_TabDyn<9,W_MVAide,j> AND W_TabDyn<3,W_MVAide,j>="12") OR W_TabDyn<3,W_MVAide,j>="" DO
			j=j+1
		REPEAT
		IF W_TabDyn<3,W_MVAide,j> = "" THEN
			W_ActPal="VRAI"
			GOSUB 30
			W_TabDyn<2,W_MVAide,j>=ENR_SSIADACTINTEXT<10,k>
			W_TabDyn<3,W_MVAide,j>="12"
			W_TabDyn<4,W_MVAide,j>=""
			W_TabDyn<5,W_MVAide,j>=W_Nuit
			W_TabDyn<6,W_MVAide,j>=""
			W_TabDyn<9,W_MVAide,j>=ENR_SSIADACTINTEXT<2,k>
		END ELSE
			W_ActPal="VRAI"
			GOSUB 30
			W_TabDyn<2,W_MVAide,j>=W_TabDyn<2,W_MVAide,j>+ENR_SSIADACTINTEXT<10,k>
			W_TabDyn<5,W_MVAide,j>=W_TabDyn<5,W_MVAide,j>+W_Nuit
		END
	END

	* IFD
	IF ENR_SSIADACTINTEXT<11,k> # "" AND ENR_SSIADACTINTEXT<11,k> # "0" THEN
		j=1
		LOOP
		UNTIL (ENR_SSIADACTINTEXT<2,k>=W_TabDyn<9,W_MVAide,j> AND W_TabDyn<3,W_MVAide,j>="13") OR W_TabDyn<3,W_MVAide,j>="" DO
			j=j+1
		REPEAT
		IF W_TabDyn<3,W_MVAide,j> = "" THEN
			W_ActPal="VRAI"
			GOSUB 30
			W_TabDyn<2,W_MVAide,j>=ENR_SSIADACTINTEXT<11,k>
			W_TabDyn<3,W_MVAide,j>="13"
			W_TabDyn<4,W_MVAide,j>=""
			W_TabDyn<5,W_MVAide,j>="0"
			W_TabDyn<6,W_MVAide,j>=W_IFD
			W_TabDyn<9,W_MVAide,j>=ENR_SSIADACTINTEXT<2,k>
		END ELSE
			W_ActPal="VRAI"
			GOSUB 30
			W_TabDyn<2,W_MVAide,j>=W_TabDyn<2,W_MVAide,j>+ENR_SSIADACTINTEXT<11,k>
			W_TabDyn<6,W_MVAide,j>=W_TabDyn<6,W_MVAide,j>+W_IFD
		END
	END

	* IK
	IF ENR_SSIADACTINTEXT<12,k> # "" AND ENR_SSIADACTINTEXT<12,k> # "0" THEN
		j=1
		LOOP
		UNTIL (ENR_SSIADACTINTEXT<2,k>=W_TabDyn<9,W_MVAide,j> AND W_TabDyn<3,W_MVAide,j>="14") OR W_TabDyn<3,W_MVAide,j>="" DO
			j=j+1
		REPEAT
		IF W_TabDyn<3,W_MVAide,j> = "" THEN
			W_ActPal="VRAI"
			GOSUB 30
			W_TabDyn<2,W_MVAide,j>=ENR_SSIADACTINTEXT<12,k>
			W_TabDyn<3,W_MVAide,j>="14"
			W_TabDyn<4,W_MVAide,j>=""
			W_TabDyn<5,W_MVAide,j>="0"
			W_TabDyn<6,W_MVAide,j>=W_IK
			W_TabDyn<9,W_MVAide,j>=ENR_SSIADACTINTEXT<2,k>
		END ELSE
			W_ActPal="VRAI"
			GOSUB 30
			W_TabDyn<2,W_MVAide,j>=W_TabDyn<2,W_MVAide,j>+ENR_SSIADACTINTEXT<12,k>
			W_TabDyn<6,W_MVAide,j>=W_TabDyn<6,W_MVAide,j>+W_IK
		END
	END
         
	FOR Ind=1 TO 13
		ENR_SSIADACTINTEXT=DELETE(ENR_SSIADACTINTEXT,Ind,k)
	NEXT Ind

        IF ENR_SSIADACTINTEXT<1>="" THEN
            DELETE F.SSIADACTINTEXT,W_Cle
        END ELSE
            WRITE ENR_SSIADACTINTEXT ON F.SSIADACTINTEXT,W_Cle
        END

RETURN

*********************************************************
*  calcul montant
30

	W_Montant=0

	IF W_ActPal="VRAI" THEN
		W_Nb=ENR_SSIADACTINTEXT<3,k>
		W_Type=ENR_SSIADACTINTEXT<4,k>
		W_Valeur=ENR_SSIADACTINTEXT<5,k>
	END ELSE
		W_Nb=ENR_SSIADACTINTEXT<6,k>
		W_Type=ENR_SSIADACTINTEXT<7,k>
		W_Valeur=(ENR_SSIADACTINTEXT<8,k> / 2) + (1/2)
            	W_Valeur = INT(W_Valeur)
	END

	READ ENR_SSIADSERVICE FROM F.SSIADSERVICE,W_Entite:ENR_ACTIVITES<13> ELSE ENR_SSIADSERVICE=""

	IF ENR_SSIADSERVICE<12> # "" THEN
        	l = 1
        	LOOP
		UNTIL (INT(ENR_SSIADACTINTEXT<1,k>) >= INT(ENR_SSIADSERVICE<12,l>) AND ENR_SSIADSERVICE<11,l> = W_Type) OR ENR_SSIADSERVICE<12,l> = ""
         		l=l+1
        	REPEAT 

        	IF ENR_SSIADSERVICE<12,l> # "" THEN
			W_Montant=INT((ENR_SSIADSERVICE<13,l> * W_Nb * W_Valeur)/100 +(1/2))
			W_DimJF=ENR_SSIADSERVICE<16,l>*ENR_SSIADACTINTEXT<9,k>
			W_Nuit=ENR_SSIADSERVICE<17,l>*ENR_SSIADACTINTEXT<10,k>
			W_IFD=ENR_SSIADSERVICE<14,l>*ENR_SSIADACTINTEXT<11,k>
			W_IK=ENR_SSIADSERVICE<15,l>*ENR_SSIADACTINTEXT<12,k>
        	END
	END

RETURN

*********************************************************
*  EFFACE LA MV A VIDE
40

	W_Count=DCOUNT(W_TabDyn<1>,CHAR(253))

	FOR W_Indice=1 TO W_Count
		IF W_TabDyn<1,W_Indice>="" THEN
			W_TabDyn=DELETE(W_TabDyn,1,W_Indice)
			W_TabDyn=DELETE(W_TabDyn,2,W_Indice)
			W_TabDyn=DELETE(W_TabDyn,3,W_Indice)
			W_TabDyn=DELETE(W_TabDyn,4,W_Indice)
			W_TabDyn=DELETE(W_TabDyn,5,W_Indice)
			W_TabDyn=DELETE(W_TabDyn,6,W_Indice)
			W_TabDyn=DELETE(W_TabDyn,9,W_Indice)
			W_TabDyn=DELETE(W_TabDyn,11,W_Indice)
			W_TabDyn=DELETE(W_TabDyn,12,W_Indice)
		END
	NEXT W_Indice

RETURN
