**************************************************************
*Generation du fichier DetailPrestInv a partir de DetailPrest
*Programme chaine a partir d'un projet VB
*Moulin christophe
**************************************************************
* Ouvertures des fichiers
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","DETAILPREST" TO F.DETAILPREST ELSE PRINT "DETAILPREST"
OPEN "","DETAILPRESTINV" TO F.DETAILPRESTINV ELSE PRINT "DETAILPRESTINV"
OPEN "","ORGPRISECHARGE" TO F.ORGPRISECHARGE ELSE PRINT "ORGPRISECHARGE"
OPEN "","ACCORD" TO F.ACCORD ELSE PRINT "ACCORD"
OPEN "","DEMANDACC" TO F.DEMANDACC ELSE PRINT "DEMANDACC"
OPEN "","ACTIVITES" TO F.ACTIVITES ELSE PRINT "ACTIVITES"
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE PRINT "RUBSAISIE"
OPEN "","TEMPFACTURAIDE" TO F.TEMPFACTURAIDE ELSE PRINT "TEMPFACTURAIDE"
OPEN "","HRESATTENTE" TO F.HRESATTENTE ELSE PRINT "HRESATTENTE"
OPEN "","HRESHISTOR" TO F.HRESHISTOR ELSE PRINT "HRESHISTOR"
OPEN "","FACTURORG" TO F.FACTURORG ELSE PRINT "FACTURORG"
OPEN "","TABLES" TO F.TABLES ELSE PRINT "TABLES"
OPEN "","HRESHISTOR" TO F.HRESHISTOR ELSE PRINT "HRESHISTOR"
OPEN "","ELTSFACTAIDE" TO F.ELTSFACTAIDE ELSE PRINT "ELTSFACTAIDE"
OPEN "","NUMEROFACT" TO F.NUMEROFACT ELSE PRINT "NUMEROFACT"
OPEN "","ACTIVITESAIDE" TO F.ACTIVITESAIDE ELSE PRINT "ACTIVITESAIDE"
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE PRINT "CIVILAIDANT"
*********************************************************
* Recuperation des arguments
PROCREAD ARGUMENTS ELSE PRINT "Procread"
W_CodAssoc=FIELD(ARGUMENTS," ",2)
W_CodeSectResp=FIELD(ARGUMENTS," ",3)
W_CboAnneeMois=FIELD(ARGUMENTS," ",4)
W_ListeActivites=FIELD(ARGUMENTS," ",5)
W_NbActivites=FIELD(ARGUMENTS," ",6)

********************************************************************
* Prog Principal

   W_Activites=""
   W_SectionAnal=""

   IF W_NbActivites # 1 THEN
      FOR i=1 TO W_NbActivites
         W_Activites=REPLACE(W_Activites,i;FIELD(W_ListeActivites,"|",i))
         READ ENR_ACTIVITES FROM F.ACTIVITES,W_Activites<i> ELSE STOP
         W_Activites<i,2>=ENR_ACTIVITES<2>
         j=1
         LOOP
         WHILE W_SectionAnal<j> # "" DO
            IF W_SectionAnal<j>=ENR_ACTIVITES<2> THEN
               j=999
            END
            j=j+1
         REPEAT
         IF j#999 THEN
            W_SectionAnal<j>=ENR_ACTIVITES<2>
            W_SectionAnal<j,2>=0
         END
      NEXT i
   END ELSE
      W_Activites=REPLACE(W_Activites,1;W_ListeActivites)
      READ ENR_ACTIVITES FROM F.ACTIVITES,W_Activites<1> ELSE STOP
      W_Activites<1,2>=ENR_ACTIVITES<2>
      W_SectionAnal<1>=ENR_ACTIVITES<2>
      W_SectionAnal<1,2>=0
   END

   * Traitement des heures en attente
   GOSUB 300

   * Requete Rubsaisie
   GOSUB 150

   IF W_RienSelect="FAUX" THEN
      * Requete DetailPrest
      GOSUB 100

      * Gestion Requete
      GOSUB 110
      EXECUTE 'EFFACER-LISTE W_RequeteRub'
   END 

   * Transformation de TEMPFACTURAIDE EN FACTURAIDE
   * GOSUB 500

STOP

******************************************
* Requete sur DETAILPREST
******************************************
100
   EXECUTE 'SSELECT DETAILPREST AVEC AssoContratPrest = "':W_CodAssoc:'" AND AVEC @ID = "[':W_CboAnneeMois:'" BY.EXP 1'
RETURN
*********************************************************************
* Generation du fichier DetailPrestInv
110 
    W_CleDetailPrestPrec=""
    W_Fini="FAUX"
    ENR_DETAILPREST=""
    ENR_DETAILPRESTINV=""
    W_CodeInvAv=""
    LOOP
       READNEXT W_Cle 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 PRINT "DETAILPREST"
       END
       W_PlaceMv=FIELD(W_Cle,CHAR(253),2)
       * IF W_PlaceMv#"" THEN
          * Teste si la rubrique est directe
          W_Rub=ENR_DETAILPREST<2,W_PlaceMv>
          GOSUB 120
          IF W_ResRub#-1 THEN
             * Recherche si l'activit est presente
             W_Act=ENR_DETAILPREST<4,W_PlaceMv>
             GOSUB 130
             IF W_CodeInvAv # ENR_DETAILPREST<1,W_PlaceMv> THEN
                IF W_CodeInvAv # "" 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_ResRub=4 THEN
                W_Insert=1
             END ELSE
                W_Insert=W_IndiceInv
             END
             IF W_ResAct#"FAUX" THEN
                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>)
             END
          * END
       END ELSE
          W_TabMs=""
          j=1
          W_DimFer="FAUX"
          W_IndiceTab=0
          *FOR j=1 TO 4
          *   W_TabMs=REPLACE(W_TabMs,j,2;"0")
          *NEXT j
          LOOP
          WHILE ENR_DETAILPREST<10,W_PlaceMv,j>#"" DO
             * Teste si la rubrique est directe
             W_Rub=ENR_DETAILPREST<11,W_PlaceMv,j>
             GOSUB 120
             IF W_ResRub#-1 THEN
                IF W_ResRub=4 THEN
                   W_DimFer="VRAI"
                END
                * Recherche si l'activit est presente
                W_Act=ENR_DETAILPREST<13,W_PlaceMv,j>
                GOSUB 130
                IF W_ResAct="VRAI" 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
                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#"" 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 # "" THEN
       WRITE ENR_DETAILPRESTINV ON F.DETAILPRESTINV,W_CodeInvAv:W_CodAssoc:W_CboAnneeMois
       ENR_DETAILPRESTINV=""
    END
    
RETURN

******************************************
120 * Teste si la rubrique est directe
   W_FiniRub="FAUX"
   W_ResRub=-1
   LOOP
      READNEXT W_CleRub FROM W_RequeteRub ELSE W_FiniRub="VRAI"
   WHILE W_FiniRub#"VRAI" DO
      IF W_CleRub=W_Rub THEN
         READ ENR_RUBSAISIE FROM F.RUBSAISIE,W_CleRub ELSE PRINT "RUBSAISIE"
         W_ResRub=ENR_RUBSAISIE<2>
         W_FiniRub="VRAI"
      END
   REPEAT
   EXECUTE "LISTE W_RequeteRub"
   SELECT F.RUBSAISIE TO W_RequeteRub
RETURN
******************************************
130 * Recherche si l'activit est presente
   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])
   k=1
   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>)
      k=k+1
   REPEAT
RETURN

********************************************************************
150 * Listage des rubriques directes
W_RienSelect="FAUX"
   EXECUTE 'SSELECT RUBSAISIE AVEC 2 = "3" OR = "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

***************************************************************************
***************************************************************************

*********************************************************************
ENR_TEMPFACTURAIDE=""
ENR_FACTURORG=""
READ ENR_TAUXTVA FROM F.TABLES,"TAUXTVA" ELSE PRINT "READ TAUXTVA"

***************************************************************************
* Traitement des heures en attente                                        *
***************************************************************************

* Requete des heures en attentes.
300 W_Vide = "FAUX"
EXECUTE 'SSELECT HRESATTENTE AVEC EntiteHresAttente = "':W_CodAssoc:'" PAR @ID'
    EXECUTE 'SAUVE-LISTE W_RequeteHres'
    EXECUTE "LISTE W_RequeteHres" RETURNING MSGCODE
    IF MSGCODE<1> # 209 THEN
       SELECT F.ACCORD TO W_RequeteHres
    END ELSE
      W_Vide="VRAI"
    END

    IF W_Vide = "FAUX" THEN
       * Parcours de la requete des heures en attente
       GOSUB 310
    END

RETURN

**********************************************************************
* Affectation des heures aux sections analytiques
305
  iAnal=1
  LOOP
  WHILE W_SectionAnal<iAnal,1> # W_ActAnal AND W_SectionAnal<iAnal,1> # "" DO
     iAnal=iAnal+1
  REPEAT
  IF W_SectionAnal<iAnal,1> # "" THEN
     W_SectionAnal<iAnal,2>=W_SectionAnal<iAnal,2>+W_NbrHAnal
  END
RETURN

**********************************************************************
* Parcours de la requete des heures en attente
310 
 W_Fini="FAUX"
 W_CleHresAtt=""
 W_CleHresAttAnc=""
 W_SurHresAtt="VRAI"
 LOOP
    READNEXT W_CleHresAtt FROM W_RequeteHres ELSE W_Fini="VRAI"
 WHILE W_Fini="FAUX" DO

   W_Aide=W_CleHresAtt[1,5]
   READ ENR_ELTSFACTAIDE FROM F.ELTSFACTAIDE,W_Aide ELSE STOP
   * WRITEV "M" ON F.ELTSFACTAIDE,W_Aide,1

   READ ENR_DEMANDACC FROM F.DEMANDACC,W_Aide THEN
    
    W_Periode=W_CleHresAtt[9,6]
    W_DatDebHres=W_CleHresAtt[13,2]:"/":W_CleHresAtt[9,4]
    W_DatDebHres=ICONV("01/":W_DatDebHres,"D4/")
    W_DatFinHres=W_DatDebHres+32
    W_DatFinHres=OCONV(W_DatFinHres,"D4/")
    W_DatFinHres="01/":W_DatFinHres[4,7]
    W_DatFinHres=ICONV(W_DatFinHres,"D4/")-1

    * Preparation des demandes d'accord
    i=1
    LOOP
    WHILE ENR_DEMANDACC<1,i>#"" DO
      IF ENR_DEMANDACC<3,i> <= W_DatFinHres THEN
         IF ENR_DEMANDACC<4,i> >= W_DatDebHres THEN
            * Compris dans la periode
            READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_DEMANDACC<1,i> ELSE PRINT "OrgPriseCharge"
            IF ENR_ORGPRISECHARGE<18>="P" AND ENR_ORGPRISECHARGE<24>="H" THEN
               j=1
               l=0
               LOOP
                  W_ActOrg=ENR_ORGPRISECHARGE<47,j>
               WHILE W_ActOrg#"" DO
                  FOR k=1 TO W_NbActivites
                     IF W_Activites<k,1>=W_ActOrg THEN
                        l=l+1
                        ENR_DEMANDACC<7,i,l>=W_ActOrg
                     END
                  NEXT k
                  j=j+1
               REPEAT
            END
         END
      END
      i=i+1
    REPEAT
   END
    * Recherche des demandes d'accord pour l'activite
    READ ENR_HRESATTENTE FROM F.HRESATTENTE,W_CleHresAtt ELSE PRINT "HRESATTENTE"

    IF W_CleHresAttAnc # "" THEN
       * WRITE ENR_TEMPFACTURAIDE ON F.TEMPFACTURAIDE,W_CleHresAttAnc[1,5]
    END

      IF ENR_HRESATTENTE<4> # "" THEN
         * Traitement des Mv
         i=1
         LOOP
         WHILE ENR_HRESATTENTE<4,i> # "" DO
           * Affectation des heures aux sections analytiques
            W_ActAnal=ENR_HRESATTENTE<4,i>
            W_NbrHAnal=ENR_HRESATTENTE<3,i>
            GOSUB 305
            j=1
            LOOP
            WHILE ENR_DEMANDACC<7,j> # "" DO
               k=1 
               LOOP
               WHILE ENR_DEMANDACC<7,j,k> # "" DO
                 IF ENR_DEMANDACC<7,j,k>=ENR_HRESATTENTE<4,i> THEN
                    j=999
                    W_ExistActDem="VRAI"
                 END
                 k=k+1
               REPEAT
               j=j+1
            REPEAT
            IF W_ExistActDem="FAUX" THEN
               * si pas de demande alors recherche d'accord
               W_Mv="VRAI"
               NbrHeuresAtt=ENR_HRESATTENTE<3,i>
               W_ActHres=ENR_HRESATTENTE<4,i>
               W_RubSaisie=ENR_HRESATTENTE<2,i>
               W_CodeAidant=ENR_HRESATTENTE<1,i>
               GOSUB 320
            END
            i=i+1
         REPEAT
      END ELSE
         GOSUB 315
      END
      W_CleHresAttAnc=W_CleHresAtt
   REPEAT 
   * Change d'article de la requete Heures Attente
RETURN

*********************************************************************
315
         * Traitement des Ms
         i=1
         LOOP
         WHILE ENR_HRESATTENTE<1,i> # "" DO
            j=1
            LOOP
            WHILE ENR_HRESATTENTE<8,i,j> # "" DO
               * Affectation des heures aux sections analytiques
               GOSUB 305
               W_ActAnal=ENR_HRESATTENTE<8,i,j>
               W_NbrHAnal=ENR_HRESATTENTE<7,i,j>
               k=1 
               LOOP
               WHILE ENR_DEMANDACC<7,k> # "" DO
                  l=1 
                  LOOP
                  WHILE ENR_DEMANDACC<7,k,l> # "" DO
                     IF ENR_DEMANDACC<7,k,l>=ENR_HRESATTENTE<8,i,j> THEN
                        j=999
                        W_ExistActDem="VRAI"
                     END
                     l=l+1
                  REPEAT
                  k=k+1
               REPEAT
               IF W_ExistActDem="FAUX" THEN
                  * si pas de demande alors recherche d'accord
                  W_Mv="FAUX"
                  NbrHeuresAtt=W_NbrHAnal
                  W_CodeAidant=ENR_HRESATTENTE<1,i>
                  W_ActHres=ENR_HRESATTENTE<7,i,j>
                  W_DateJour=ENR_HRESATTENTE<5,i,j>:"/":W_CleHresAtt[13,2]:"/":W_CleHresAtt[9,4]
                  W_DateJour=ICONV(W_DateJour,"D4/")
                  W_RubSaisie=ENR_HRESATTENTE<6,i,j>
                  GOSUB 320
               END
               j=j+1
            REPEAT
            i=i+1
         REPEAT

RETURN 

*********************************************************************
* Parcours des accords et affectation des heures en attente.
320
   * Requete et preparation des Accords
   W_ReqAcc=""
   GOSUB 330

   W_EcritOrg="FAUX"
   W_Count=DCOUNT(W_ReqAcc,CHAR(253))

   FOR k=1 TO W_Count   * parcours les accords
      l=1
      W_Pass="FAUX"
      W_CleAcc=W_ReqAcc<k,1>
      READ ENR_ACCORD FROM F.ACCORD,W_CleAcc ELSE PRINT "Accord"
      IF W_Mv="VRAI" THEN
         IF ENR_ACCORD<5> <= W_DateJour AND ENR_ACCORD<6> >= W_DateJour THEN
            W_Pass="VRAI"
         END
      END ELSE
          W_Pass="VRAI"
      END           

      IF W_Pass="VRAI" THEN

         LOOP
         WHILE W_ReqAcc<k,2,l> # "" DO

              IF W_ActHres = W_ReqAcc<k,2,l> THEN      
  
                  NbrHeuresAcc=W_ReqAcc<k,3>-NbrHeuresAtt
  
                  IF NbrHeuresAcc > 0 THEN
                     HeuresPrisAcc=NbrHeuresAtt
                     W_ReqAcc<k,3>=NbrHeuresAcc
                     NbrHeuresAtt=0
                     NbrHeuresAcc=0
                     l=999
                     k=999
                     W_EcritOrg="FAUX"
                  END ELSE
                     HeuresPrisAcc=W_ReqAcc<k,3>
                     W_ReqAcc=DELETE(W_ReqAcc,k)
                     NbrHeuresAtt=ABS(NbrHeuresAcc)
                     l=999
                     W_EcritOrg="VRAI"
                  END

                  * TEMPFACTURAIDE et FACTURORG             
                  GOSUB 340

                  *Mise a jour de l'historique
                  * GOSUB 390
               END
               l=l+1
          REPEAT
      END
   NEXT k

   IF NbrHeuresAtt > 0 THEN
      * il y a des heures non affectes = Facturation  taux plein
      W_CleFacturOrgPlein="000P":W_CleHresAtt[1,5]:W_CodAssoc:W_CleHresAtt[9,6]
      GOSUB 360
   END

RETURN

**********************************************************************
* Requete Accord
330
   W_Vide="FAUX"
   W_Temp='SSELECT ACCORD AVEC @ID = "':W_CleHresAtt:']" AND AVEC 18 <> "O" AND AVEC NotifOrg = "H" AND AVEC TypeOrg = "P" AND AVEC ActivitesOrg = "':EXTRACT(W_Activites,1,1):'"'

   FOR k=2 TO W_NbActivites
      W_Temp=W_Temp:' OR = "':EXTRACT(W_Activites,i,1):'"'
   NEXT i
   W_Temp=W_Temp:' PAR 8 PAR 5 PAR 6'
   EXECUTE W_Temp
   EXECUTE 'SAUVE-LISTE W_RequeteAccord'
   EXECUTE "LISTE W_RequeteAccord" RETURNING MSGCODE
   IF MSGCODE<1>=209 THEN
      W_Vide="VRAI"
   END ELSE
      SELECT F.ACCORD TO W_RequeteAccord
   END

   IF W_Vide#"VRAI" THEN
      W_ReqAcc=""
      W_IndReqAcc=0
      LOOP
         READNEXT W_CleAcc FROM W_RequeteAccord ELSE W_FiniAcc="VRAI"
      WHILE W_FiniAcc="FAUX" DO
         READ ENR_ACCORD FROM F.ACCORD,W_CleAcc ELSE PRINT "Accord"
         IF ENR_ACCORD<5> <= W_DateFinHres THEN
            IF ENR_ACCORD<6> >= W_DateDebHres THEN
               * Compris dans la periode
                READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_ACCORD<1> ELSE PRINT "OrgPriseCharge"
                k=1
                m=0
                LOOP
                   W_ActOrg=ENR_ORGPRISECHARGE<47,k>
                WHILE W_ActOrg#"" DO
                     FOR l=1 TO W_NbActivites
                        IF W_Activites<l,1>=W_ActOrg THEN
                           IF m=0 THEN
                              W_IndReqAcc=W_IndReqAcc+1
                              W_ReqAcc=REPLACE(W_ReqAcc,W_IndReqAcc,1;W_CleAcc)
                              IF ENR_ORGPRISECHARGE<19>=2 THEN
                                 W_ReqAcc=REPLACE(W_ReqAcc,W_IndReqAcc,3;ENR_ACCORD<9>)
                              END ELSE
                                 W_ReqAcc=REPLACE(W_ReqAcc,W_IndReqAcc,3;ENR_ACCORD<17,1>)
                              END
                           END
                           m=m+1
                           W_ReqAcc<W_IndAcc,2,m>=W_ActOrg
                        END
                     NEXT l
                   k=k+1
                REPEAT
            END
         END
      REPEAT
   END
RETURN

**********************************************************************
* Rempli les fichiers TEMPFACTURAIDE et FACTURORG
340
    * Remplissage de TempFacturAide
    READ ENR_TEMPFACTURAIDE FROM F.TEMPFACTURAIDE,W_Aide ELSE ENR_TEMPFACTURAIDE=""

    * W_Periode=W_CleHresAtt[9,6]
    W_DatePeriode=ICONV("01/":W_CleHresAtt[9,2]:"/":W_CleHresAtt[11,4],"D4/")

    READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_ACCORD<1> ELSE PRINT "OrgPriseCharge"
    W_LibOrg="PRISE EN CHARGE ":ENR_ORGPRISECHARGE<1>

    READ ENR_ACTIVITES FROM F.ACTIVITES,W_ActHres ELSE PRINT "ACTIVITES"

    IF W_DatePeriode >= ENR_ACCORD<11,1> THEN
       W_Taux=ENR_ACCORD<13,1>
    END ELSE
       iTaux=1
       LOOP
       WHILE W_DatePeriode < ENR_ACCORD<11,iTaux> DO
          iTaux=iTaux+1
       REPEAT
       W_Taux=ENR_ACCORD<13,iTaux>
    END

    * Recherche et affecte dans TempFacturAide
    iFact=1
    GOSUB 370

    READ ENR_RUBSAISIE FROM F.RUBSAISIE,W_CleRub ELSE PRINT "RUBSAISIE"

    * Positionnement sur l'article de FacturOrg
    W_CleFacturOrg=ENR_ACCORD<1>:"P":W_CleAcc:W_CleHresAtt[9,6]
    W_NumOrdre="01"
    iCleFact=1
    LOOP
       READ ENR_FACTURORG FROM F.FACTURORG,W_CleFacturOrg:W_NumOrdre ELSE ENR_FACTURORG = ""
    WHILE ENR_FACTURORG<9> # "" DO
       iCleFact=iCleFact+1
       W_NumOrdre=iCleFact "R%2"
    REPEAT

    IF ENR_RUBSAISIE=3 THEN
       * main d'oeuvre directe
       IF ENR_FACTURORG<1> = "" THEN
          * Recherche du taux normal de l'organisme
          GOSUB 350
          ENR_FACTURORG<1>=HeuresPrisAcc                
          ENR_FACTURORG<2>=W_Taux
          ENR_FACTURORG<3>=W_TauxRembOrg-W_Taux
          ENR_FACTURORG<4>=W_TauxRembOrg * HeuresPrisAcc
       END ELSE
          ENR_FACTURORG<1>=ENR_FACTURORG<1> + HeuresPrisAcc
          ENR_FACTURORG<4>=ENR_FACTURORG<3> * ENR_FACTURORG<1>
       END
    END ELSE
       IF ENR_FACTURORG<5>="" THEN
          * Recherche du taux major de l'organisme
          GOSUB 345
          ENR_FACTURORG<5>=HeuresPrisAcc
          ENR_FACTURORG<6>=W_Taux
          ENR_FACTURORG<7>=W_TauxRembOrgMaj-W_Taux
          ENR_FACTURORG<8>=W_TauxRembOrgMaj * HeuresPrisAcc
       END ELSE
          ENR_FACTURORG<5>=ENR_FACTURORG<5>+HeuresPrisAcc
          ENR_FACTURORG<8>=W_TauxRembOrgMaj * ENR_FACTURORG<5>
       END
    END

    IF W_EcritOrg="VRAI" THEN    
       IF ENR_ORGPRISECHARGE<29,1> # "" THEN
         * Si abattement alors affectation
         GOSUB 380
       END

       *Ecriture FacturOrg
       * WRITE ENR_FACTURORG ON F.FACTURORG,W_CleFacturOrg:W_NumOrdre
       W_EcritOrg="FAUX"
    END

RETURN

************************************************************************
* Recherche le taux de remboursement de l'organisme major
345
 W_TauxRembOrgMaj=""
 IF ENR_ORGPRISECHARGE<27,1> # "" THEN
    IF W_DatePeriode >= ENR_ORGPRISECHARGE<27,1> THEN
       W_TauxRembOrgMaj=ENR_ORGPRISECHARGE<27,1>
    END ELSE
       iTaux=1
       LOOP
       WHILE W_DatePeriode < ENR_ORGPRISECHARGE<27,iTaux> DO
          iTaux=iTaux+1
       REPEAT
       W_TauxRembOrgMaj=ENR_ORGPRISECHARGE<27,iTaux>
    END
 END ELSE
    IF W_TauxRembOrg # 0 THEN
       W_TauxRembOrgMaj=W_TauxRembOrg
    END
 END
RETURN
          
************************************************************************
* Recherche le taux de remboursement de l'organisme
350
    W_TauxRembOrg=0
    IF W_DatePeriode >= ENR_ORGPRISECHARGE<25,1> THEN
       W_TauxRembOrg=ENR_ORGPRISECHARGE<25,1>
    END ELSE
       iTaux=1
       LOOP
       WHILE W_DatePeriode < ENR_ORGPRISECHARGE<25,iTaux> DO
          iTaux=iTaux+1
       REPEAT
       W_TauxRembOrg=ENR_ORGPRISECHARGE<25,iTaux>
    END
RETURN

************************************************************************
* Recherche l'emplacement du code aidant dans TempFacturAide
355
   iAidant=1
   W_CodeAidant=ENR_HRESATTENTE<1,i>
   READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_CodeAidant ELSE PRINT "CIVILAIDANT"

   W_NomPrenomAidant=ENR_CIVILAIDANT<2>:ENR_CIVILAIDANT<3>
   LOOP
   WHILE ENR_TEMPFACTURAIDE<10,iAidant> # "" AND W_NomPrenomAidant > ENR_TEMPFACTURAIDE<13,iAidant> DO
      iAidant=iAidant+1
   REPEAT
   IF ENR_TEMPFACTURAIDE<10,iAidant> = "" THEN
      ENR_TEMPFACTURAIDE<10,iAidant>=W_CodeAidant
      ENR_TEMPFACTURAIDE<13,iAidant>=W_NomPrenomAidant
   END ELSE
      IF ENR_TEMPFACTURAIDE<13,iAidant> > W_NomPrenomAidant THEN
         ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,10,iAidant;W_CodeAidant)
         ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,13,iAidant;W_NomPrenomAidant)
      END
   END
RETURN

******************************************
* Facturation a taux plein
360
    * Remplissage de TempFacturAide
    READ ENR_TEMPFACTURAIDE FROM F.TEMPFACTURAIDE,W_CleHresAtt[1,5] ELSE ENR_TEMPFACTURAIDE=""

    W_DatePeriode=ICONV("01/":W_CleHresAtt[9,2]:"/":W_CleHresAtt[11,4],"D4/")

    READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_ACCORD<1> ELSE PRINT "OrgPriseCharge"
    W_LibOrg="PRISE EN CHARGE ":ENR_ORGPRISECHARGE<1>

    * Recherche de la valeur du taux plein
    IF W_DatePeriode >= ENR_ACTIVITES<15,1> THEN
       W_Taux=ENR_ACTIVITES<14,1>
    END ELSE
       iTauxPlein=1
       LOOP
       WHILE W_DatePeriode < ENR_ACTIVITES<15,iTauxPlein> DO
          iTauxPlein=iTauxPlein+1
       REPEAT
       W_Taux=ENR_ACTIVITES<14,iTauxPlein>
    END

    * Recherche et affecte dans TempFacturAide
    iFact=1
    GOSUB 370

    READ ENR_RUBSAISIE FROM F.RUBSAISIE,W_CleRub ELSE PRINT "RUBSAISIE"

    W_NumOrdre="01"
    iCleFact=1
    LOOP 
      READ ENR_FACTURORG FROM F.FACTURORG,W_CleFacturOrgPlein:W_NumOrdre ELSE ENR_FACTURORG =""
    WHILE ENR_FACTURORG<9> # "" DO
       iCleFact=iCleFact+1
       W_NumOrdre=iCleFact "R%2"
    REPEAT

       IF ENR_RUBSAISIE=3 THEN
          * main d'oeuvre directe
          IF ENR_FACTURORG<1> = "" THEN
            * Recherche du taux normal de l'organisme
             GOSUB 350
             ENR_FACTURORG<1>=HeuresPrisAcc                
             ENR_FACTURORG<2>=W_Taux
             ENR_FACTURORG<3>=W_TauxRembOrg-W_Taux
             ENR_FACTURORG<4>=W_TauxRembOrg * HeuresPrisAcc
          END ELSE
             ENR_FACTURORG<1>=ENR_FACTURORG<1> + HeuresPrisAcc
             ENR_FACTURORG<4>=ENR_FACTURORG<3> * ENR_FACTURORG<1>
          END
       END ELSE
          IF ENR_FACTURORG<5>="" THEN
             * Recherche du taux major de l'organisme
             GOSUB 345
             ENR_FACTURORG<5>=HeuresPrisAcc
             ENR_FACTURORG<6>=W_Taux
             ENR_FACTURORG<7>=W_TauxRembOrgMaj-W_Taux
             ENR_FACTURORG<8>=W_TauxRembOrgMaj * HeuresPrisAcc
          END ELSE
             ENR_FACTURORG<5>=ENR_FACTURORG<5>+HeuresPrisAcc
             ENR_FACTURORG<8>=W_TauxRembOrgMaj * ENR_FACTURORG<5>
          END
       END

       IF ENR_ORGPRISECHARGE<29,1> # "" THEN
         * Si abattement alors affectation
         W_SurHresAtt="VRAI"
         GOSUB 380
       END

       *Ecriture FacturOrg
       * WRITE ENR_FACTURORG ON F.FACTURORG,W_CleFacturOrgPlein:W_NumOrdre
       W_EcritOrg="FAUX"

RETURN

*************************************************************************
* Recherche dans TempFacturAide l'emplacement
370
   IF ENR_TEMPFACTURAIDE<1,iFact> # "" THEN
      IF W_AnneeMoisPeriode > ENR_TEMPFACTURAIDE<1,iFact> THEN
         iFact=iFact+1
         GOSUB 370
      END ELSE
        IF W_AnneeMoisPeriode = ENR_TEMPFACTURAIDE<1,iFact> THEN
           IF W_LibOrg = ENR_TEMPFACTURAIDE<2,iFact> AND W_Taux = ENR_TEMPFACTURAIDE<4,iFact> AND ENR_ACTIVITES<2> = ENR_TEMPFACTURAIDE<3,iFact> THEN
              * Replace
              ENR_TEMPFACTURAIDE<3,iFact>=ENR_TEMPFACTURAIDE<3,iFact> + HeuresPrisAcc   
              ENR_TEMPFACTURAIDE<5,iFact>=ENR_TEMPFACTURAIDE<4,iFact> * HeuresPrisAcc

              * Recherche l'emplacement du code aidant dans TempFacturAide
              GOSUB 355

           END ELSE
              iFact=iFact+1
              GOSUB 370
           END
        END ELSE
           * Insert
           ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,1;W_CleHresAtt[9,6])
           ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,2;"PRISE EN CHARGE ":ENR_ORGPRISECHARGE<1>)
           ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,3;HeuresPrisAcc)
           ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,4;W_Taux)
           ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,5;W_Taux*HeuresPrisAcc)
           ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,6;"")
           ENR_TEMPFACTURAIDE=INSERT(ENR_TEMPFACTURAIDE,7;ENR_ACTIVITES<2>)

           * Recherche l'emplacement du code aidant dans TempFacturAide
            GOSUB 355

        END
      END
   END ELSE
        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,1;W_CleHresAtt[9,6])
        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,2;"PRISE EN CHARGE ":ENR_ORGPRISECHARGE<1>)
        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,3;HeuresPrisAcc)
        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,4;W_Taux)
        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,5;W_Taux*HeuresPrisAcc)
        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,6;"")
        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,7;ENR_ACTIVITES<2>)

        IF ENR_TEMPFACTURAIDE<8> = "" THEN
           * READ ENR_ACTIVITES FROM F.ACTIVITES,W_ActHres ELSE PRINT "ACTIVITES"
           ENR_TEMPFACTURAIDE<8>=ENR_TAUXTVA<4,ENR_ACTIVITES<11>>
        END

        * Recherche l'emplacement du code aidant dans TempFacturAide
        GOSUB 355

        ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,11;0)
   END
RETURN

*********************************************************************
* Gestion de l'abattement
380

   iAbat=1
   W_NbHeures=ENR_FACTURORG<1,1>
   IF ENR_FACTURORG<5,1> # "" THEN
      W_NbHeures=W_NbHeures+ENR_FACTURORG<5,1>
   END

   IF W_SurHresAtt="VRAI" THEN
       lAbatt=1
       LOOP
       WHILE W_Periode > ENR_ACCORD<16,lAbatt> DO
          lAbatt=lAbatt+1
       REPEAT
       IF W_Periode=ENR_ACCORD<16,lAbatt> THEN
          W_NbHeures=W_NbHeures+ENR_ACCORD<16,lAbatt>
       END
   END

   W_Sup=0

   LOOP
   WHILE ENR_ORGPRISECHARGE<29,iAbat> # "" DO
     IF W_NbHeures > ENR_ORGPRISECHARGE<29,iAbat> THEN
        IF W_NbHeures > ENR_ORGPRISECHARGE<30,iAbat> THEN
           W_Sup=ENR_ORGPRISECHARGE<30,iAbat>
        END ELSE
           W_Sup=W_NbHeures
        END
        jAbat=iAbat+1
        ENR_FACTURORG<1,jAbat>=W_Sup-ENR_ORGPRISECHARGE<29,iAbat>
        kAbat=1
        W_Reste=ENR_FACTURORG<1,jAbat>
        LOOP
          ENR_FACTURORG<1,kAbat>=ENR_FACTURORG<1,kAbat>-W_Reste
        WHILE ENR_FACTURORG<1,kAbat> < 0 DO
           W_Reste=ABS(ENR_FACTURORG<1,kAbat>)
           ENR_FACTURORG<1,kAbat>=0
           kAbat=kAbat+1
        REPEAT
        ENR_FACTURORG<2,jAbat>=W_Taux-W_Taux*ENR_ORGPRISECHARGE<29,iAbat>/100
        ENR_FACTURORG<3,jAbat>=W_TauxRembOrg-ENR_FACTURORG<2,jAbat>
        ENR_FACTURORG<4,jAbat>=ENR_FACTURORG<1,iAbat>*ENR_FACTURORG<3,jAbat>
        * Remplir Abattement sur TempCalculFactrAide
        GOSUB 385
        iAbat=iAbat+1
     END ELSE
        iAbat=999
     END
   REPEAT

RETURN

*********************************************************************
* Remplir Abattement sur TempCalculFactrAide
385
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,1-1;W_Periode)
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,2,-1;"ABATTEMENT ":ENR_ORGPRISECHARGE<1>:" DE ":ENR_ORGPRISECHARGE<29,iAbat>:" A ":ENR_ORGPRISECHARGE<30,iAbat>:" HEURES")
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,3,-1;ENR_FACTURORG<1,jAbat>)

   W_ReducTaux=-INT(W_Taux*ENR_ORGPRISECHARGE<29,iAbat>/100+1/2)
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,4,-1;W_ReducTaux)
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,5,-1;W_ReducTaux*ENR_FACTURORG<1,jAbat>)
   ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,6,-1;"")

  * Recherche de la section analytique qui a le plus nombre d'heures
  W_MaxAnal=W_SectionAnal<1,2>
  W_SectAnal=W_SectionAnal<1,1>  
  jAnal=2
  LOOP
  WHILE W_SectionAnal<jAnal,1> # "" DO
     IF W_SectionAnal<jAnal,1> > W_MaxAnal THEN
        W_MaxAnal=W_SectionAnal<jAnal,2>
        W_SectAnal=W_SectionAnal<jAnal,1>
     END
     jAnal=jAnal+1
  REPEAT
  ENR_TEMPFACTURAIDE=REPLACE(ENR_TEMPFACTURAIDE,7,-1;W_SectAnal)

   * Recherche l'emplacement du code aidant dans TempFacturAide
   GOSUB 355

RETURN
