*****************************************************************
* Ce programme a pou objectif de reconstruire les historiques   *
* des accords lis aux caisses qui grent les reports d'heures. *
* Exemple : une caisse ne grait pas les reports, donc il n'y   *
* en a pas dans les historiques des accords lis. La caisse     *
* passe en gestion des reports. Pour que les calculs soient     *
* plus juste, il faut refaire le point depuis le dbut de       *
* l'accord pour calculer les ventuels reports qui auraient     *
* ds avoir lieu si la caisse avait t paramtre correctement *
* ds le dpart dans Infologis.                                 *
*****************************************************************
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","ACCORD" TO F.ACCORD ELSE STOP
OPEN "","SUIVACCORDPROSP" TO F.SUIVACCORDPROSP ELSE STOP
OPEN "","PERIODESPAIE" TO F.PERIODESPAIE ELSE STOP

ENR_ACCORD=""
ENR_SUIVACCORDPROSP=""
ENR_PERIODESPAIE=""

TAB_FICHIERS=""
TAB_FICHIERS<1>="ACCORD"

EXECUTE "QUI" CAPTURING MSG
W_CheminBase=MSG<1>
FOR I = 1 TO DCOUNT(TAB_FICHIERS,CHAR(254))
	EXECUTE '!XCOPY ':W_CheminBase:'\':TAB_FICHIERS<I>:' ':W_CheminBase:'\_HOLD_\ /C /Y'
NEXT I

READ ENR_PERIODESPAIE FROM F.PERIODESPAIE, "1" ELSE STOP

W_DebPer=ICONV('01/':ENR_PERIODESPAIE<1>[5,2]:'/':ENR_PERIODESPAIE<1>[1,4],"D4/")

W_ReqAcc=""
EXECUTE 'SELECT ACCORD AVEC 6 = "" OR >= "':W_DebPer-60:'" AND AVEC PlafDroitOrgChg = "1"'
*EXECUTE 'SELECT ACCORD AVEC 0 = "08047008"'
EXECUTE 'SAUVE-LISTE W_ReqAcc' 
EXECUTE "LISTE W_ReqAcc" RETURNING MSGCODE

IF MSGCODE<1> # 209 THEN
	SELECT F.ACCORD TO W_ReqAcc
	
	W_Fin = "FAUX"
	LOOP
		READNEXT W_Cle FROM W_ReqAcc ELSE W_Fin = "VRAI"
	WHILE W_Fin = "FAUX" DO
		READ ENR_ACCORD FROM F.ACCORD, W_Cle THEN
			* Le programme permet uniquement de mettre  jour les donnes
			* et ventuellement combler les "trous". Si la priode la plus
			* rcente de l'historique est le mois de dcembre mais qu'on est
			* en mars, alors c'est le calcul des factures classique qui se
			* chargera de gnrer les priodes manquantes janvier et fvrier.
			IF ENR_ACCORD<14><>"" THEN
				W_Per=OCONV(ENR_ACCORD<5>,"D4/")
				W_Per=W_Per[7,4]:W_Per[4,2]
				
				FOR I = DCOUNT(ENR_ACCORD<14>,CHAR(253)) TO 1 STEP -1
					IF ENR_ACCORD<14,I><W_Per THEN
						ENR_ACCORD=DELETE(ENR_ACCORD,14,I)
						ENR_ACCORD=DELETE(ENR_ACCORD,15,I)
						ENR_ACCORD=DELETE(ENR_ACCORD,16,I)
						ENR_ACCORD=DELETE(ENR_ACCORD,17,I)
					END
				NEXT I
				
				W_Report=0
				
				W_Fini="FAUX"
				I=DCOUNT(ENR_ACCORD<14>,CHAR(253))+1
				LOOP
					I=I-1
				WHILE I>0 AND W_Fini="FAUX"
					IF I=DCOUNT(ENR_ACCORD<14>,CHAR(253)) AND ENR_ACCORD<14,I>=W_Per THEN
						ENR_ACCORD<17,I>=ENR_ACCORD<9>-ENR_ACCORD<16,I>
						W_Report=ENR_ACCORD<17,I>
					END ELSE
						IF ENR_ACCORD<14,I>>W_Per THEN
							W_PerStop=ENR_ACCORD<14,I>-1
							
							IF W_PerStop[5,2]="00" THEN W_PerStop=W_PerStop[1,4]-1:'12'
							
							FOR W_PerBoucle = W_Per TO W_PerStop
								IF W_PerBoucle[5,2]="13" THEN W_PerBoucle=W_PerBoucle[1,4]+1:'01'
								
								ENR_ACCORD=INSERT(ENR_ACCORD,14,I+1;W_PerBoucle)
								ENR_ACCORD=INSERT(ENR_ACCORD,15,I+1;"0")
								ENR_ACCORD=INSERT(ENR_ACCORD,16,I+1;"0")
								ENR_ACCORD=INSERT(ENR_ACCORD,17,I+1;W_Report+ENR_ACCORD<9>)
								W_Report=W_Report+ENR_ACCORD<9>
							NEXT W_PerBoucle
						END
						ENR_ACCORD<17,I>=W_Report+ENR_ACCORD<9>-ENR_ACCORD<16,I>
						W_Report=ENR_ACCORD<17,I>
					END
					W_Per=ENR_ACCORD<14,I>+1
					IF W_Per[5,2]="13" THEN W_Per=W_Per[1,4]+1:'01'
				REPEAT
				
				W_PerCle=OCONV(DATE(),"D4/")
				READ ENR_SUIVACCORDPROSP FROM F.SUIVACCORDPROSP, W_Cle[1,5]:W_PerCle[7,4] ELSE ENR_SUIVACCORDPROSP=""
				ENR_SUIVACCORDPROSP<8>="1"
				WRITE ENR_SUIVACCORDPROSP ON F.SUIVACCORDPROSP, W_Cle[1,5]:W_PerCle[7,4]
				
				WRITE ENR_ACCORD ON F.ACCORD, W_Cle
			END
		END
	REPEAT
END

EXECUTE 'EFFACER-LISTE W_ReqAcc' 

STOP