
SUBROUTINE GENEREDETAILPRESTINV (W_Entree,W_Sortie)

************************************************************** 
* Subroutine de gnration du fichier DETAILPRESTINV         *
* dcembre 2003                                              *
* Vanessa                                                    * 
************************************************************** 

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","DETAILPREST" TO F.DETAILPREST ELSE RETURN
OPEN "","DETAILPRESTINV" TO F.DETAILPRESTINV ELSE RETURN
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE RETURN

W_RequetePrest=""
W_RequeteRub=""

W_CodAssoc=W_Entree<1>
W_CboAnneeMois=W_Entree<2>
W_CodeAide=W_Entree<3>
W_NbActivites=W_Entree<4>

W_Activites<1>=W_Entree<5>
IF W_NbActivites > 1 THEN
   FOR i = 1 TO W_NbActivites
	W_Activites<i+1> = W_Entree<5+i>
   NEXT i
END

GOSUB 150

* Requete DetailPrest
GOSUB 100

* Generation du fichier DetailPrestInv
GOSUB 110

EXECUTE 'EFFACER-LISTE W_RequeteRub'

W_Sortie=""

RETURN

******************************************
* Requete sur DETAILPREST
******************************************
100

   IF W_CodeAide # "" THEN
      EXECUTE 'SSELECT DETAILPREST AVEC AssoContratPrest = "':W_CodAssoc:'" AND AVEC @ID = "[':W_CboAnneeMois:'" BY.EXP 1 = "':W_CodeAide:'"'
   END ELSE
      EXECUTE 'SSELECT DETAILPREST AVEC AssoContratPrest = "':W_CodAssoc:'" AND AVEC @ID = "[':W_CboAnneeMois:'" BY.EXP 1'
   END
   EXECUTE 'SAUVE-LISTE W_RequetePrest'
   EXECUTE "LISTE W_RequetePrest" RETURNING MSGCODE
   IF MSGCODE<1>#209 THEN
      SELECT F.DETAILPREST TO W_RequetePrest
   END

RETURN

*********************************************************************
* Generation du fichier DetailPrestInv
110 

    W_CleDetailPrestPrec=""
    W_Fini="FAUX"
    ENR_DETAILPREST=""
    ENR_DETAILPRESTINV=""
    W_CodeInvAv=""
    LOOP
       READNEXT W_Cle FROM W_RequetePrest ELSE W_Fini="VRAI"
       W_CleDetailPrest=FIELD(W_Cle,CHAR(253),1)
    WHILE W_Fini="FAUX" DO
       IF W_CleDetailPrest # W_CleDetailPrestPrec THEN
          READ ENR_DETAILPREST FROM F.DETAILPREST,W_CleDetailPrest ELSE ENR_DETAILPREST=""
       END
       W_PlaceMv=FIELD(W_Cle,CHAR(253),2)
       IF ENR_DETAILPREST<2,W_PlaceMv> # "" THEN
          IF ENR_DETAILPREST<3,W_PlaceMv> # 0 THEN
             * Teste si la rubrique est dim Jf
             W_Rub=ENR_DETAILPREST<2,W_PlaceMv>
             GOSUB 120
             * Recherche si l'activite est presente
             W_Act=ENR_DETAILPREST<4,W_PlaceMv>
             GOSUB 130
             IF W_CodeInvAv # ENR_DETAILPREST<1,W_PlaceMv> THEN
                IF W_CodeInvAv # "" AND ENR_DETAILPRESTINV # "" THEN                 
                   WRITE ENR_DETAILPRESTINV ON F.DETAILPRESTINV,W_CodeInvAv:W_CodAssoc:W_CboAnneeMois
                   ENR_DETAILPRESTINV=""
                END
                W_CodeInvAv=ENR_DETAILPREST<1,W_PlaceMv>
                W_IndiceInv=0
             END

             IF W_ResAct#"FAUX" THEN
                W_IndiceInv=W_IndiceInv+1
                IF W_ResRub=4 THEN
                   W_Insert=1
                END ELSE
                   W_Insert=W_IndiceInv
                END

                ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,1,W_Insert;W_CleDetailPrest[1,8])
                ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,2,W_Insert;ENR_DETAILPREST<2,W_PlaceMv>)
                ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,3,W_Insert;ENR_DETAILPREST<3,W_PlaceMv>)
                ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,4,W_Insert;ENR_DETAILPREST<4,W_PlaceMv>)

                ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,5,W_Insert;"")
                ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,6,W_Insert;"")
                ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,7,W_Insert;"")
                ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,8,W_Insert;"")
		IF W_ResRub=4 THEN
		   ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,9,W_Insert;"1")
		END ELSE
		   ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,9,W_Insert;"2")
		END

             END
          END
       END ELSE
          W_TabMs=""
          j=1
          W_DimFer="FAUX"
          W_IndiceTab=0
          LOOP
          WHILE ENR_DETAILPREST<10,W_PlaceMv,j>#"" DO
             * Teste si la rubrique est est dim Jf
             IF ENR_DETAILPREST<11,W_PlaceMv,j> # 0 THEN
                W_Rub=ENR_DETAILPREST<11,W_PlaceMv,j>
                GOSUB 120
                IF W_ResRub=4 THEN
                   W_DimFer="VRAI"
                END
                * Recherche si l'activite est presente
                W_Act=ENR_DETAILPREST<13,W_PlaceMv,j>
                GOSUB 130
                IF W_ResAct="VRAI" THEN
                   IF ENR_DETAILPREST<12,W_PlaceMv,j> # 0 THEN
                      W_IndiceTab=W_IndiceTab+1
                      FOR k=1 TO 4
                         W_TabMs=REPLACE(W_TabMs,k,1,W_IndiceTab;ENR_DETAILPREST<k+9,W_PlaceMv,j>)
                      NEXT k
	              W_TabMs=REPLACE(W_TabMs,5,1,W_IndiceTab;W_ResRub)
                   END
                END
             END
             j=j+1
          REPEAT
          IF W_TabMs#"" THEN
             W_Temp=ENR_DETAILPREST<1,W_PlaceMv>
             IF W_Temp#W_CodeInvAv THEN
                IF W_CodeInvAv#"" AND ENR_DETAILPRESTINV # "" THEN
                   WRITE ENR_DETAILPRESTINV ON F.DETAILPRESTINV,W_CodeInvAv:W_CodAssoc:W_CboAnneeMois
                   ENR_DETAILPRESTINV=""
                END
                W_CodeInvAv=ENR_DETAILPREST<1,W_PlaceMv>
                W_IndiceInv=0
             END
             W_IndiceInv=W_IndiceInv+1
             IF W_DimFer="VRAI" THEN
                W_Insert=1
             END ELSE
                W_Insert=W_IndiceInv
             END
             * Copie le tableau tampon dans DetailPrestInv
             GOSUB 140
          END
       END
       W_CleDetailPrestPrec=W_CleDetailPrest
    REPEAT

    IF W_CodeInvAv # "" AND ENR_DETAILPRESTINV # "" THEN
       WRITE ENR_DETAILPRESTINV ON F.DETAILPRESTINV,W_CodeInvAv:W_CodAssoc:W_CboAnneeMois
       ENR_DETAILPRESTINV=""
    END
    
RETURN

******************************************
* Teste si la rubrique est dim et Jf
120 

   W_FiniRub="FAUX"
   W_ResRub=3
   LOOP
      READNEXT W_CleRub FROM W_RequeteRub ELSE W_FiniRub="VRAI"
   WHILE W_FiniRub#"VRAI" DO
      IF W_CleRub=W_Rub THEN
         W_ResRub=4
         W_FiniRub="VRAI"
      END
   REPEAT

   EXECUTE "LISTE W_RequeteRub" RETURNING MSGCODE
   IF MSGCODE<1>=209 THEN
      W_RequeteRub=""
   END ELSE
      SELECT F.RUBSAISIE TO W_RequeteRub
   END

RETURN

******************************************
* Recherche si l'activite est presente
130 

   W_ResAct="FAUX"
   FOR iActPres=1 TO W_NbActivites
      IF W_Activites<iActPres,1>=W_Act THEN
         W_ResAct="VRAI"
         EXIT
      END
   NEXT iActPres
RETURN

******************************************************************
* Copie le tableau tampon dans DetailPrestInv
140

   ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,1,W_Insert;W_CleDetailPrest[1,8])

   ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,2,W_Insert;"")
   ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,3,W_Insert;"")
   ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,4,W_Insert;"")

   ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,5,W_Insert;W_TabMs<1,1,1>)
   ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,6,W_Insert;W_TabMs<2,1,1>)
   ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,7,W_Insert;W_TabMs<3,1,1>)
   ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,8,W_Insert;W_TabMs<4,1,1>)
   IF W_TabMs<5,1,1> = "4" THEN
	ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,9,W_Insert;"1")
   END ELSE
	ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,9,W_Insert;"2")
   END

   k=2
   LOOP
   WHILE W_TabMs<1,1,k>#"" DO
      ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,5,W_Insert,k;W_TabMs<1,1,k>)
      ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,6,W_Insert,k;W_TabMs<2,1,k>)
      ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,7,W_Insert,k;W_TabMs<3,1,k>)
      ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,8,W_Insert,k;W_TabMs<4,1,k>)
      IF W_TabMs<5,1,k> = "4" THEN
	 ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,9,W_Insert,k;"1")
      END ELSE
	 ENR_DETAILPRESTINV=INSERT(ENR_DETAILPRESTINV,9,W_Insert,k;"2")
      END
      k=k+1
   REPEAT

RETURN

********************************************************************
* Listage des rubriques dim Jf
150 

   EXECUTE 'SSELECT RUBSAISIE AVEC 2 = "4" PAR 2'
   EXECUTE 'SAUVE-LISTE W_RequeteRub'
   EXECUTE "LISTE W_RequeteRub" RETURNING MSGCODE
   IF MSGCODE<1>=209 THEN
      W_RienSelect="VRAI"
   END ELSE
      SELECT F.RUBSAISIE TO W_RequeteRub
   END

RETURN
