**************************************************************
*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 "","ASSOCIATION" TO F.ASSOCIATION ELSE STOP
OPEN "","RESPONSABLE" TO F.RESPONSABLE ELSE STOP
OPEN "","SECTEUR" TO F.SECTEUR ELSE STOP
* OPEN "","DETAILPREST" TO F.DETAILPREST ELSE STOP
OPEN "","DETAILPRESTINV" TO F.DETAILPRESTINV ELSE STOP
OPEN "","ORGPRISECHARGE" TO F.ORGPRISECHARGE ELSE STOP
OPEN "","ACCORD" TO F.ACCORD ELSE STOP
OPEN "","DEMANDACC" TO F.DEMANDACC ELSE STOP
OPEN "","ACTIVITESAIDE" TO F.ACTIVITESAIDE ELSE STOP
OPEN "","ABSENCESAIDE" TO F.ABSENCESAIDE ELSE STOP
OPEN "","RUBSAISIE" TO F.RUBSAISIE ELSE STOP
OPEN "","TEMPCALCULPREAPREST" TO F.TEMPCALCULPREAPREST ELSE STOP
OPEN "","HRESATTENTE" TO F.HRESATTENTE ELSE STOP
*********************************************************
* Recuperation des arguments
PROCREAD ARGUMENTS ELSE STOP
W_CodAssoc=FIELD(ARGUMENTS," ",2)
W_CodeSectResp=FIELD(ARGUMENTS," ",3)
W_RespOrSect=W_CodeSectResp[4,1]
W_CodeSectResp=W_CodeSectResp[1,3]
W_CboAnneeMois=FIELD(ARGUMENTS," ",4)
W_ListeActivites=FIELD(ARGUMENTS," ",5)
W_NbActivites=FIELD(ARGUMENTS," ",6)
*********************************************************
*Initialisation des variables
W_Fini="FAUX"
W_Temp=""
W_Date=""
W_Len=0
W_LenArrondi=0
W_ChrAArrondir=""
W_CleDetailPrest=""
W_CleDetailPrestPrec=""
W_CleRub=""
W_TabMs=""
i=1
W_PlaceMv=0
W_ResRub=0
W_Rub=""
W_Act=""
W_ResAct=0
W_Activites=""
W_CodeInvAv=""
ENR_DETAILPRESTINV=""
W_IndiceInv=0
W_Cle=""
j=1
* Variable indiquant si dimanche ou jours feries
W_DimFer="FAUX"
W_IndiceTab=0
k=0
W_RienSelect="FAUX"
W_FiniAct="FAUX"
****************************
* 2 eme partie
W_DateDeb=""
W_DateFin=""
W_RequeteDemandAcc=""
* Tableau dynamique
W_IndPasHeuresSaisie=0
W_IndTropHeures=0 
* Tableau dynamique
* W_TropHeures="" ici
W_CleAct=""
W_Pos=0
W_Cle=""
W_DateInv=""
ENR_TEMPCALCULPREAPREST=""
W_RequeteAcc=""
PasDateDebutAct="FAUX"
W_Motif=0
******************************************
* Programme principal

* Lancement de l'affectation des heures en attente
  GOSUB 300

*   EXECUTE 'VIDER-FICHIER DATA DETAILPRESTINV'
   EXECUTE 'VIDER-FICHIER DATA TEMPCALCULPREAPREST'
   W_Activites=""
   IF W_NbActivites# 1 THEN
      FOR i=1 TO W_NbActivites
         W_Activites=REPLACE(W_Activites,i;FIELD(W_ListeActivites,"|",i))
      NEXT i
   END ELSE
      W_Activites<1>=W_ListeActivites
   END

*   * Requete RubSaisie
*   GOSUB 900
*   IF W_RienSelect="FAUX" THEN
*      * Requete DetailPrest
*      GOSUB 10
*
*      * Gestion Requete
*      GOSUB 40
*      EXECUTE 'EFFACER-LISTE W_RequeteRub'
*   END
  
* 2 eme partie
   GOSUB 20
   IF W_RienSelect="FAUX" THEN
      GOSUB 100
      WRITE ENR_TEMPCALCULPREAPREST ON F.TEMPCALCULPREAPREST,W_CodAssoc
   END

* Apuration des accord
  GOSUB 400

STOP

******************************************************************
* 2eme partie
* Requete sur activitesaide
******************************************************************
20 
   W_RienSelect="FAUX"
   W_Temp="SSELECT ACTIVITESAIDE "
   IF W_CodeSectResp#"VID" THEN
      IF W_RespOrSect="R" THEN
         W_Temp=W_Temp:'AVEC RespAide = "':W_CodeSectResp:'"'
      END ELSE
         IF W_RespOrSect="S" THEN
            W_Temp=W_Temp:'AVEC SecteurAide = "':W_CodeSectResp:'"'
         END
      END
   END
   IF W_RespOrSect="R" THEN
      W_Temp=W_Temp:' PAR LibRespAide'
   END ELSE
      IF W_RespOrSect="S" THEN
         W_Temp=W_Temp:' PAR LibSecteurAide'
      END
   END
   W_Temp=W_Temp:' PAR NomAide PAR @ID'
   W_Temp=W_Temp:' BY.EXP 1 = "':EXTRACT(W_Activites,1):'"'
   FOR i=2 TO W_NbActivites
      W_Temp=W_Temp:' OR = "':EXTRACT(W_Activites,i):'"'
   NEXT i
   EXECUTE W_Temp
   EXECUTE 'SAUVE-LISTE W_RequeteActivitesAide'
   EXECUTE "LISTE W_RequeteActivitesAide" RETURNING MSGCODE
   IF MSGCODE<1>=209 THEN
      W_RienSelect="VRAI"
   END ELSE
      SELECT F.ACTIVITESAIDE TO W_RequeteActivitesAide
   END
RETURN

********************************************************************
* Gestion de la Requete d'Activitesaide
* Ne selectionne que les activites valide sur la periode concernee
100
   W_CleAncien=""
   W_ActChoisi=""
   W_Temp=W_CboAnneeMois[5,2]
   W_Date=W_Temp:"/":W_CboAnneeMois[1,4]
   W_DateFin=W_Temp+1
   IF W_DateFin=13 THEN
      W_DateFin=ICONV("31/":W_Date,"D4/")
   END ELSE
      W_DateFin=W_DateFin "R%2"
      W_DateFin=ICONV("01/":W_DateFin:"/":W_CboAnneeMois[1,4],"D4/")-1
   END
   W_DateDeb=ICONV("01/":W_Date,"D4/")
   W_FiniAct="FAUX"
   q=0

   LOOP
      READNEXT W_Cle FROM W_RequeteActivitesAide ELSE W_FiniAct="VRAI"
      IF W_CleAncien="" THEN
         W_CleAncien=W_Cle
      END
   WHILE W_FiniAct#"VRAI" DO
      IF W_CleAncien<1,1> # W_Cle<1,1> THEN
         IF W_ActChoisi# "" THEN
            W_CleAct=W_CleAncien<1,1>
            * Lance les requetes Accord et DemAcc + affectation des heures
            GOSUB 210
         END
         q=0
         W_ActChoisi=""
      END
      READ ENR_ACTIVITESAIDE FROM F.ACTIVITESAIDE,W_Cle<1,1> ELSE STOP
      * Cumul les activites de cet aide
      W_Pos=W_Cle<1,2>
      GOSUB 200
      W_CleAncien=W_Cle
  REPEAT

  READ ENR_ACTIVITESAIDE FROM F.ACTIVITESAIDE,W_CleAncien<1,1> ELSE STOP
  W_CleAct=W_CleAncien<1,1>
  GOSUB 210

RETURN

**********************************************************************************
* Test si l'activites est valide
200

W_ActAcc=ENR_ACTIVITESAIDE<1,W_Pos>
GOSUB 330  ;* Test si activite choisi sous Vb

IF W_EActChoisi="VRAI" THEN

   IF ENR_ACTIVITESAIDE<2,W_Pos>="" THEN

      * Je prends
      PasDateDebutAct="VRAI"
      q=q+1
      W_ActChoisi=REPLACE(W_ActChoisi,1,q;ENR_ACTIVITESAIDE<1,W_Pos>)
      W_ActChoisi=REPLACE(W_ActChoisi,2,q;"VRAI")

   END ELSE

      IF ENR_ACTIVITESAIDE<2,W_Pos> <= W_DateFin THEN
         IF ENR_ACTIVITESAIDE<3,W_Pos> # "" THEN
            IF ENR_ACTIVITESAIDE<3,W_Pos> >= W_DateDeb THEN

               * Je prends
               PasDateDebutAct="FAUX"
               q=q+1
               W_ActChoisi=REPLACE(W_ActChoisi,1,q;ENR_ACTIVITESAIDE<1,W_Pos>)
               W_ActChoisi=REPLACE(W_ActChoisi,2,q;"FAUX")

            END

         END ELSE

            * Je prends
             PasDateDebutAct="FAUX"
             q=q+1
             W_ActChoisi=REPLACE(W_ActChoisi,1,q;ENR_ACTIVITESAIDE<1,W_Pos>)
             W_ActChoisi=REPLACE(W_ActChoisi,2,q;"FAUX")

         END
      END
   END
END

RETURN

***********************************************************************************
* Lance les requetes Accord et demande d'accord + affectation des heures

210
   * Requete accord
   GOSUB 110
   
   GOSUB 120
   GOSUB 130
   WRITE ENR_TEMPCALCULPREAPREST ON F.TEMPCALCULPREAPREST,W_CodAssoc

RETURN

*****************************************************************************************
* Requete accord
110 
   W_RienSelect="FAUX"
   W_Temp='SSELECT ACCORD AVEC @ID = "':W_CleAct:']" AND AVEC 18 <> "O" AND AVEC NotifOrg = "H" AND AVEC TypeOrg = "P" AND AVEC ActivitesOrg = "':EXTRACT(W_ActChoisi,1,1):'"'

   FOR i=2 TO q
      W_Temp=W_Temp:' OR = "':EXTRACT(W_ActChoisi,1,i):'"'
   NEXT i

   W_Temp=W_Temp:' PAR 8 PAR 5'
   EXECUTE W_Temp
   EXECUTE 'SAUVE-LISTE W_RequeteAccord'
   EXECUTE "LISTE W_RequeteAccord" RETURNING MSGCODE
   IF MSGCODE<1>=209 THEN
      W_RienSelect="VRAI"
   END ELSE
      SELECT F.ACCORD TO W_RequeteAccord
   END
   W_RequeteAcc=""

   * Attention si requete vide...   A TESTER
 IF W_RienSelect#"VRAI" THEN

   W_IndAccAct=0
   W_IndAcc=0
   W_FiniAcc="FAUX"
   W_ActOrg=0
   k=0

   LOOP
      READNEXT W_CleAcc FROM W_RequeteAccord ELSE W_FiniAcc="VRAI"
   WHILE W_FiniAcc#"VRAI" DO
      READ ENR_ACCORD FROM F.ACCORD,W_CleAcc ELSE STOP
      IF ENR_ACCORD<5> <= W_DateFin THEN
         IF ENR_ACCORD<6> >= W_DateDeb THEN
            * Compris dans la periode
             READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_ACCORD<1> ELSE STOP
             j=1
             W_IndAccAct=0
             W_IndAcc=W_IndAcc+1
*             W_RequeteAcc=REPLACE(W_RequeteAcc,W_IndAcc,1;W_CleAcc[1,5])
             W_RequeteAcc=REPLACE(W_RequeteAcc,W_IndAcc,1;W_CleAcc)
             LOOP
                W_ActOrg=ENR_ORGPRISECHARGE<47,j>
             WHILE W_ActOrg#"" DO
                FOR k=1 TO q
                   IF W_ActChoisi<1,k>=W_ActOrg THEN
                      W_IndAccAct=W_IndAccAct+1
                      W_RequeteAcc=REPLACE(W_RequeteAcc,W_IndAcc,2,W_IndAccAct;W_ActOrg)
                   END
                NEXT k
                j=j+1
             REPEAT
             IF ENR_ACCORD<19>="" THEN
                ENR_ACCORD<19>="0"
             END
             IF ENR_ORGPRISECHARGE<19>=1 THEN
                IF ENR_ACCORD<17,1> # "" THEN
                   W_NbHresAcc=ENR_ACCORD<17,1>+ENR_ACCORD<9>
                END ELSE
                   W_NbHresAcc=ENR_ACCORD<9>
                 END
                W_RequeteAcc=REPLACE(W_RequeteAcc,W_IndAcc,3;W_NbHresAcc-ENR_ACCORD<19>)
             END ELSE
                IF ENR_ORGPRISECHARGE<19>=2 THEN
                   W_RequeteAcc=REPLACE(W_RequeteAcc,W_IndAcc,3;ENR_ACCORD<9>-ENR_ACCORD<19>)
                END ELSE
                   IF ENR_ACCORD<17,1> # "" THEN
                      W_NbHresAcc=ENR_ACCORD<17,1>-ENR_ACCORD<19>
                   END ELSE
                      W_NbHresAcc=ENR_ACCORD<9>-ENR_ACCORD<19>
                   END
                   W_RequeteAcc=REPLACE(W_RequeteAcc,W_IndAcc,3;W_NbHresAcc)
                END
             END
         END
      END
   REPEAT
 END

RETURN

*************************************************************************************
* Gestion des demandes d'accord
120 
    W_RequeteDemAcc=""
    W_IndDemAcc=0
    k=0
    l=0
    READ ENR_DEMANDACC FROM F.DEMANDACC,W_CleAct THEN
       j=1
       LOOP
       WHILE ENR_DEMANDACC<1,j>#"" DO
         IF ENR_DEMANDACC<3,j> <= W_DateFin THEN
            IF ENR_DEMANDACC<4,j> >= W_DateDeb THEN
               * Compris dans la periode
               READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_DEMANDACC<1,j> ELSE STOP
               IF ENR_ORGPRISECHARGE<18>="P" AND ENR_ORGPRISECHARGE<24>="H" THEN
                  l=1
                  W_IndDemAccAct=0
                  W_IndDemAcc=W_IndDemAcc+1
                  W_RequeteDemAcc=REPLACE(W_RequeteDemAcc,W_IndDemAcc,1;ENR_DEMANDACC<5,j>)
                  LOOP
                     W_ActOrg=ENR_ORGPRISECHARGE<47,l>
                  WHILE W_ActOrg#"" DO
                     FOR k=1 TO q
                        IF W_ActChoisi<1,k>=W_ActOrg THEN
                           W_IndDemAccAct=W_IndDemAccAct+1
                           W_RequeteDemAcc=REPLACE(W_RequeteDemAcc,W_IndDemAcc,2,W_IndDemAccAct;W_ActOrg)
                        END
                     NEXT k
                     l=l+1
                  REPEAT
               END
            END
         END
         j=j+1
       REPEAT
    END

RETURN


****************************************************************************************
* Affectation des heures
****************************************************************************************
130 
   NbrHeuresPrestInv=0
   NbrHeuresAcc=0
   W_CumulHeures=""
   W_HeuresLieesDemAcc=0

   READU ENR_DETAILPRESTINV FROM F.DETAILPRESTINV,W_CleAct:W_CodAssoc:W_CboAnneeMois THEN
      IF W_RequeteAcc="" AND W_RequeteDemAcc="" THEN
         i=1
         LOOP
         * Cumul des heures effectues dans DETAILPRESTINV sur l'activites
         WHILE ENR_DETAILPRESTINV<1,i>#"" DO
            IF ENR_DETAILPRESTINV<2,i>#"" THEN
               FOR k=1 TO q
                 IF ENR_DETAILPRESTINV<4,i> = W_ActChoisi<1,k> AND W_ActChoisi<2,k> # "VRAI" THEN
                     W_CumulHeures=REPLACE(W_CumulHeures,k;W_CumulHeures<k>+ENR_DETAILPRESTINV<3,i>)
                  END
               NEXT k

            END ELSE
               j=1
               LOOP
               WHILE ENR_DETAILPRESTINV<5,i,j>#"" DO
                  FOR k=1 TO q
                     IF ENR_DETAILPRESTINV<8,i,j> = W_ActChoisi<1,k> AND W_ActChoisi<2,k> # "VRAI" THEN
                        W_CumulHeures=REPLACE(W_CumulHeures,k;W_CumulHeures<k>+ENR_DETAILPRESTINV<7,i,j>)
                     END
                  NEXT k
                  j=j+1
               REPEAT
            END
            i=i+1
         REPEAT
         W_Count=DCOUNT(W_CumulHeures,CHAR(254))
         FOR i=1 TO W_Count
            IF W_CumulHeures<i> # "" THEN
               W_IndTropHeures=W_IndTropHeures+1
               ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,4,W_IndTropHeures;W_CleAct)
               ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,5,W_IndTropHeures;W_CumulHeures<i>)
               ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,6,W_IndTropHeures;W_ActChoisi<1,i>)
               ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,7,W_IndTropHeures;4)
               ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,8,W_IndTropHeures;"")
               ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,9,W_IndTropHeures;"")
           END
         NEXT i


      END ELSE
         i=1
         LOOP
         WHILE ENR_DETAILPRESTINV<1,i>#"" DO
            IF ENR_DETAILPRESTINV<2,i>#"" THEN
               W_HeuresLieesDemAcc=0

               NbrHeuresPrestInv=ENR_DETAILPRESTINV<3,i>
               W_ActPrestInv=ENR_DETAILPRESTINV<4,i>

               * Gestion des Multi-Valeurs de DETAILPRESTINV en Accord
               GOSUB 140

               IF NbrHeuresPrestInv>0 THEN

                  * si il reste des heures non affectees
                  W_Motif=1

                  IF W_RequeteDemAcc#"" THEN
                     GOSUB 150

                     IF NbrHeuresPrestInv>0 THEN
                        * ici faire attention car aucune dem correspondante
                           W_IndTropHeures=W_IndTropHeures+1
                           ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,4,W_IndTropHeures,1;W_CleAct)
                           ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,5,W_IndTropHeures,1;NbrHeuresPrestInv)
                           ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,6,W_IndTropHeures,1;W_ActPrestInv)
                           ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,7,W_IndTropHeures,1;3)
                           ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,8,W_IndTropHeures;"")
                           ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,9,W_IndTropHeures;"")

                        IF W_Motif = 2 THEN
                           ENR_TEMPCALCULPREAPREST=INSERT(ENR_TEMPCALCULPREAPREST,5,W_IndTropHeures,1;W_HeuresLieesDemAcc)
                           ENR_TEMPCALCULPREAPREST=INSERT(ENR_TEMPCALCULPREAPREST,6,W_IndTropHeures,1;W_ActPrestInv)
                           ENR_TEMPCALCULPREAPREST=INSERT(ENR_TEMPCALCULPREAPREST,7,W_IndTropHeures,1;W_Motif)
                           ENR_TEMPCALCULPREAPREST=INSERT(ENR_TEMPCALCULPREAPREST,8,W_IndTropHeures,1;"")
                           ENR_TEMPCALCULPREAPREST=INSERT(ENR_TEMPCALCULPREAPREST,9,W_IndTropHeures,1;"")
                        END

                     END ELSE

                        IF W_Motif = 2 THEN
                           W_IndTropHeures=W_IndTropHeures+1
                           ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,4,W_IndTropHeures;W_CleAct)
                           ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,5,W_IndTropHeures;W_HeuresLieesDemAcc)
                           ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,6,W_IndTropHeures;W_ActPrestInv)
                           ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,7,W_IndTropHeures;W_Motif)
                           ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,8,W_IndTropHeures;"")
                           ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,9,W_IndTropHeures;"")
                        END
                     END                     
                  END ELSE
                     * Depassement d'accord
                     W_IndTropHeures=W_IndTropHeures+1
                     ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,4,W_IndTropHeures;W_CleAct)
                     ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,5,W_IndTropHeures;NbrHeuresPrestInv)
                     ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,6,W_IndTropHeures;W_ActPrestInv)
                     ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,7,W_IndTropHeures;1)
                     ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,8,W_IndTropHeures;"")
                     ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,9,W_IndTropHeures;"")
                  END
               END

            END ELSE

               * Gestion des Sous-Valeurs de DETAILPRESTINV
               GOSUB 160

            END
            i=i+1
         REPEAT

      END

   END ELSE

      * IF W_RequeteDemAcc#"" OR W_RequeteAcc#"" THEN
      READ ENR_ABSENCESAIDE FROM F.ABSENCESAIDE,W_CleAct THEN
         i=1
         W_ABSENCE="NON"
         LOOP
         WHILE ENR_ABSENCESAIDE<1,i>#"" DO
            IF ENR_ABSENCESAIDE<1,i> <= W_DateFin AND ENR_ABSENCESAIDE<2,i> >= W_DateDeb THEN
               * Il a t absence sur une partie du mois
               W_ABSENCE="OUI"
               W_IndPasHeuresSaisie=W_IndPasHeuresSaisie+1
               ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,1,W_IndPasHeuresSaisie;W_CleAct)
               ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,2,W_IndPasHeuresSaisie,1;ENR_ABSENCESAIDE<1,i>)
               ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,2,W_IndPasHeuresSaisie,2;ENR_ABSENCESAIDE<2,i>)
               FOR k=1 TO q
                  ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,3,W_IndPasHeuresSaisie,k;W_ActChoisi<1,k>)
               NEXT k
               i=99
            END
            i=i+1
         REPEAT
         IF W_ABSENCE="NON" THEN
            * erreur de saisie d'heures non effectu car aucunes absences
            W_IndPasHeuresSaisie=W_IndPasHeuresSaisie+1
            ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,1,W_IndPasHeuresSaisie;W_CleAct)
            ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,2,W_IndPasHeuresSaisie;"")
            FOR k=1 TO q
                ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,3,W_IndPasHeuresSaisie,k;W_ActChoisi<1,k>)
            NEXT k
         END
      END ELSE
         * erreur de saisie d'heures non effectu car aucunes absences
         W_IndPasHeuresSaisie=W_IndPasHeuresSaisie+1
         ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,1,W_IndPasHeuresSaisie;W_CleAncien<1,1>)
         ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,2,W_IndPasHeuresSaisie;"")
         FOR k=1 TO q
             ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,3,W_IndPasHeuresSaisie,k;W_ActChoisi<1,k>)
         NEXT k
      END
      * END
   END
   RELEASE F.DETAILPRESTINV
RETURN

************************************************************************
* Gestion des Multi-Valeurs de DETAILPRESTINV pour les accord
140 
   W_SortirWhile="FAUX"
   j=1
   LOOP
   UNTIL W_RequeteAcc<j,1> = "" OR W_SortirWhile = "VRAI" DO

      NbrHeuresAcc=W_RequeteAcc<j,3>

      IF NbrHeuresAcc > 0 THEN
         k=1
         LOOP
         WHILE W_RequeteAcc<j,2,k>#""

            IF ENR_DETAILPRESTINV<4,i> = W_RequeteAcc<j,2,k> THEN

               W_Motif=2
               NbrHeuresAcc=NbrHeuresAcc-NbrHeuresPrestInv

               IF NbrHeuresAcc > 0 THEN
                  W_RequeteAcc<j,3>=NbrHeuresAcc
                  NbrHeuresPrestInv=0
                  NbrHeuresAcc=0
                  W_SortirWhile="VRAI"
                  k=99
               END ELSE
                  W_RequeteAcc<j,3>=0
                  NbrHeuresPrestInv=ABS(NbrHeuresAcc)
                  k=99
               END
            END
            k=k+1
         REPEAT
      END
      j=j+1
   REPEAT

RETURN

************************************************************************
* Gestion des Multi-Valeurs de DETAILPRESTINV pour les demandes d'accord
150 
    j=1
    W_SortirWhile="FAUX"
    NbrHeuresDemAcc=0
    W_SauveNbrHeuresDemAcc=""

    LOOP
    UNTIL W_RequeteDemAcc<j,1>="" OR W_SortirWhile="VRAI" DO
       NbrHeuresDemAcc=W_RequeteDemAcc<j,1>

       IF NbrHeuresDemAcc>0 THEN
          k=1
          LOOP
          WHILE W_RequeteDemAcc<j,2,k>#"" DO
             IF ENR_DETAILPRESTINV<4,i>=W_RequeteDemAcc<j,2,k> THEN

                W_Motif=2
                W_SauveNbrHeuresDemAcc=NbrHeuresDemAcc
                NbrHeuresDemAcc=NbrHeuresDemAcc-NbrHeuresPrestInv

                IF NbrHeuresDemAcc > 0 THEN
                   W_HeuresLieesDemAcc=W_HeuresLieesDemAcc+NbrHeuresPrestInv
                   W_RequeteDemAcc<j,1>=NbrHeuresDemAcc
                   NbrHeuresPrestInv=0
                   NbrHeuresDemAcc=0
                   W_SortirWhile="VRAI"
                END ELSE
                   W_HeuresLieesDemAcc=W_HeuresLieesDemAcc+W_SauveNbrHeuresDemAcc    ;* NbrHeuresPrestInv
                   W_RequeteDemAcc<j,1>=0
                   NbrHeuresPrestInv=ABS(NbrHeuresDemAcc)
                END
                k=99
             END
             k=k+1
          REPEAT
       END
       j=j+1
    REPEAT
RETURN

*******************************************************************************
* Gestion des Sous-Valeurs de DETAILPRESTINV pour les accords 
160 
   l=1
   LOOP
   WHILE ENR_DETAILPRESTINV<5,i,l> # "" DO

      NbrHeuresPrestInv=ENR_DETAILPRESTINV<7,i,l>
      W_ActPrestInv=ENR_DETAILPRESTINV<8,i,l>
      NbrHeuresAcc=0
      W_SortirWhile="FAUX"

      j=1
      LOOP
      UNTIL W_RequeteAcc<j,1>="" OR W_SortirWhile="VRAI" DO

         NbrHeuresAcc=W_RequeteAcc<j,3>

         IF NbrHeuresAcc > 0 THEN

            k=1
            LOOP
            WHILE W_RequeteAcc<j,2,k>#"" DO
               IF ENR_DETAILPRESTINV<8,i,l>=W_RequeteAcc<j,2,k> THEN
                  READ ENR_ACCORD FROM F.ACCORD,W_RequeteAcc<j,1> ELSE STOP

                  W_DateInv=ICONV(ENR_DETAILPRESTINV<5,i,l>:"/":W_Date,"D4/")
                  IF ENR_ACCORD<5> <= W_DateInv AND ENR_ACCORD<6> >= W_DateInv THEN   
                  
                     NbrHeuresAcc=NbrHeuresAcc-NbrHeuresPrestInv

                     IF NbrHeuresAcc > 0 THEN
                        W_RequeteAcc<j,3>=NbrHeuresAcc
                        NbrHeuresPrestInv=0
                        NbrHeuresAcc=0
                        W_SortirWhile="VRAI"
                        k=99
                     END ELSE
                        W_RequeteAcc<j,3>=0
                        NbrHeuresPrestInv=ABS(NbrHeuresAcc)
                        k=99
                     END
                  END
               END
               k=k+1
            REPEAT
         END
         j=j+1
      REPEAT

      IF NbrHeuresPrestInv>0 THEN

         W_Motif=1

         IF W_RequeteDemAcc#"" THEN

            * Sous-Valeurs vers les demandes d'accord
            * W_HeuresLieesDemAcc=NbrHeuresPrestInv

            GOSUB 170

            IF NbrHeuresPrestInv>0 THEN
               * ici faire attention car aucune dem correspondante
               W_IndTropHeures=W_IndTropHeures+1
               ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,4,W_IndTropHeures,1;W_CleAct)
               ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,5,W_IndTropHeures,1;NbrHeuresPrestInv)
               ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,6,W_IndTropHeures,1;W_ActPrestInv)
               ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,7,W_IndTropHeures,1;3)
               ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,8,W_IndTropHeures;"")
               ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,9,W_IndTropHeures,1;ENR_DETAILPRESTINV<5,i,l>)
                IF W_Motif = 2 THEN
                   ENR_TEMPCALCULPREAPREST=INSERT(ENR_TEMPCALCULPREAPREST,5,W_IndTropHeures,1;W_HeuresLieesDemAcc)
                   ENR_TEMPCALCULPREAPREST=INSERT(ENR_TEMPCALCULPREAPREST,6,W_IndTropHeures,1;W_ActPrestInv)
                   ENR_TEMPCALCULPREAPREST=INSERT(ENR_TEMPCALCULPREAPREST,7,W_IndTropHeures,1;W_Motif)
                   ENR_TEMPCALCULPREAPREST=INSERT(ENR_TEMPCALCULPREAPREST,8,W_IndTropHeures,1;"")
                   ENR_TEMPCALCULPREAPREST=INSERT(ENR_TEMPCALCULPREAPREST,9,W_IndTropHeures,1;ENR_DETAILPRESTINV<5,i,l>)
                   W_Motif=0
                END

            END ELSE

                IF W_Motif = 2 THEN
                   W_IndTropHeures=W_IndTropHeures+1
                   ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,4,W_IndTropHeures;W_CleAct)
                   ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,5,W_IndTropHeures;W_HeuresLieesDemAcc)
                   ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,6,W_IndTropHeures;W_ActPrestInv)
                   ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,7,W_IndTropHeures;W_Motif)
                   ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,8,W_IndTropHeures;"")
                   ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,9,W_IndTropHeures;ENR_DETAILPRESTINV<5,i,l>)
                   W_Motif=0
                END
            END                     

         END ELSE
            * Depassement d'accord
            W_IndTropHeures=W_IndTropHeures+1
            ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,4,W_IndTropHeures;W_CleAct)
            ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,5,W_IndTropHeures;NbrHeuresPrestInv)
            ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,6,W_IndTropHeures;W_ActPrestInv)
            ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,7,W_IndTropHeures;1)
            ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,8,W_IndTropHeures;"")
            ENR_TEMPCALCULPREAPREST=REPLACE(ENR_TEMPCALCULPREAPREST,9,W_IndTropHeures;ENR_DETAILPRESTINV<5,i,l>)
         END
      END

      l=l+1
   REPEAT

RETURN

************************************************************************
* Gestion des Multi-Valeurs de DETAILPRESTINV pour les demandes d'accord
170 
    j=1
    W_SortirWhile="FAUX"
    NbrHeuresDemAcc=0
    W_SauveNbrHeuresDemAcc=""
    LOOP
    UNTIL W_RequeteDemAcc<j,1>="" OR W_SortirWhile="VRAI" DO

       NbrHeuresDemAcc=W_RequeteDemAcc<j,1>

       IF NbrHeuresDemAcc>0 THEN

          k=1
          LOOP
          WHILE W_RequeteDemAcc<j,2,k>#"" DO
             IF ENR_DETAILPRESTINV<8,i,l>=W_RequeteDemAcc<j,2,k> THEN

                W_Motif=2
                W_SauveNbrHeuresDemAcc=NbrHeuresDemAcc
                NbrHeuresDemAcc=NbrHeuresDemAcc-NbrHeuresPrestInv

                IF NbrHeuresDemAcc > 0 THEN
                   W_HeuresLieesDemAcc=W_HeuresLieesDemAcc+NbrHeuresPrestInv
                   W_RequeteDemAcc<j,1>=NbrHeuresDemAcc
                   NbrHeuresPrestInv=0
                   NbrHeuresDemAcc=0
                   W_SortirWhile="VRAI"
                   k=99
                END ELSE
                   W_HeuresLieesDemAcc=W_HeuresLieesDemAcc+W_SauveNbrHeuresDemAcc    ;*NbrHeuresPrestInv
                   W_RequeteDemAcc<j,1>=0
                   NbrHeuresPrestInv=ABS(NbrHeuresDemAcc)
                   k=99
                END
             END
             k=k+1
          REPEAT
       END
       j=j+1
    REPEAT

RETURN

***************************************************************************
* Traitement des heures en attente                                        *
***************************************************************************
300 
    IF W_RespOrSect # "E" THEN
       IF W_RespOrSect="R" THEN
          W_TempHres='SSELECT HRESATTENTE AVEC EntiteHresAttente = "':W_CodAssoc:'" AND AVEC CodeRespHresAttente = "':W_CodeSectResp:'" PAR @ID'
       END ELSE
          W_TempHres='SSELECT HRESATTENTE AVEC EntiteHresAttente = "':W_CodAssoc:'" AND AVEC CodeSectHresAttente = "':W_CodeSectResp:']" PAR @ID'
       END
    END ELSE
       W_TempHres='SSELECT HRESATTENTE AVEC EntiteHresAttente = "':W_CodAssoc:'" PAR @ID'
    END

    EXECUTE W_TempHres
    EXECUTE 'SAUVE-LISTE W_RequeteHres'
    EXECUTE "LISTE W_RequeteHres" RETURNING MSGCODE
    IF MSGCODE<1> # 209 THEN
       SELECT F.ACCORD TO W_RequeteHres
       GOSUB 310
    END
RETURN

*****************************************************************************
310
   W_DatDebHres=""
   W_DatFinHres=""
   W_FiniHres="FAUX"
   W_FiniAcc="FAUX"

   LOOP
      READNEXT W_CleHresAtt FROM W_RequeteHres ELSE W_FiniHres="VRAI" 
   WHILE W_FiniHres # "VRAI"
      W_DatDebHres=W_CleHresAtt[13,2]:"/":W_CleHresAtt[9,4]
      W_DatFinHres=W_CleHresAtt[13,2]+1:"/":W_CleHresAtt[9,4]
      W_DatFinHres=ICONV("01/":W_DatFinHres,"D4/")-1
      W_DatDebHres=ICONV("01/":W_DatDebHres,"D4/")

      READ ENR_HRESATTENTE FROM F.HRESATTENTE,W_CleHresAtt ELSE STOP
      EXECUTE 'SSELECT ACCORD AVEC @ID = "':W_CleHresAtt[1,5]:']" AND AVEC 18 <> "O" AND AVEC NotifOrg = "H" AND AVEC TypeOrg = "P"'

      W_FiniAcc="FAUX"
      LOOP
         READNEXT W_CleAcc ELSE W_FiniAcc="VRAI"
      WHILE W_FiniAcc#"VRAI" DO
         READ ENR_ACCORD FROM F.ACCORD,W_CleAcc ELSE STOP
         IF ENR_ACCORD<5> <= W_DatFinHres THEN
            IF ENR_ACCORD<6> >= W_DatDebHres THEN
               * Accord compris dans la periode
               READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,ENR_ACCORD<1> ELSE STOP
               IF ENR_ORGPRISECHARGE<19> # 2 THEN
                  GOSUB 320
                  IF ENR_ACCORD<19> # "" THEN
                     WRITE ENR_ACCORD ON F.ACCORD,W_CleAcc
                  END
               END
           END
         END
      REPEAT
   REPEAT
RETURN

*****************************************************************************
320
   W_ActAcc=""
   i=1
   * Parcours des articles de HRESATTENTES
   LOOP
   WHILE ENR_HRESATTENTE<1,i> # "" DO 
       IF ENR_HRESATTENTE<2,i> # "" THEN
          W_ActAcc=ENR_HRESATTENTE<4,i>
          GOSUB 330  ;* Test si activite choisi sous Vb
          IF W_EActChoisi="VRAI" THEN
             j=1
             LOOP
                W_ActOrg=ENR_ORGPRISECHARGE<47,j>
             WHILE W_ActOrg#"" DO
                IF W_ActAcc=W_ActOrg THEN
                   IF ENR_ACCORD<19>="" THEN
                      IF ENR_ACCORD<17,1> # "" THEN
                         ENR_ACCORD=REPLACE(ENR_ACCORD,19;ENR_ACCORD<17,1>-ENR_HRESATTENTE<3,i>)
                      END ELSE
                         ENR_ACCORD=REPLACE(ENR_ACCORD,19;ENR_ACCORD<9>-ENR_HRESATTENTE<3,i>)
                      END
                   END ELSE
                      ENR_ACCORD=REPLACE(ENR_ACCORD,19;ENR_ACCORD<19>-ENR_HRESATTENTE<3,i>)
                   END
                   IF ENR_ACCORD<19> < 0 THEN
                      * Accord consomme
                      ENR_ACCORD=REPLACE(ENR_ACCORD,19;0)
                   END
                END
               j=j+1
             REPEAT
          END
       END ELSE
          k=1
          LOOP
          WHILE ENR_HRESATTENTE<5,i,k> # "" DO
             W_ActAcc=ENR_HRESATTENTE<8,i,k>
             GOSUB 330  ;* Test si activite choisi sous Vb
             IF W_EActChoisi="VRAI" THEN
                j=1
                LOOP
                   W_ActOrg=ENR_ORGPRISECHARGE<47,j>
                WHILE W_ActOrg#"" DO
                   IF W_ActAcc=W_ActOrg THEN
                      IF ENR_ACCORD<19>="" THEN
                         IF ENR_ACCORD<17,1>#"" THEN
                            ENR_ACCORD=REPLACE(ENR_ACCORD,19;ENR_ACCORD<17,1>-ENR_HRESATTENTE<7,i,k>)
                         END ELSE
                            ENR_ACCORD=REPLACE(ENR_ACCORD,19;ENR_ACCORD<9>-ENR_HRESATTENTE<7,i,k>)
                         END
                      END ELSE
                         ENR_ACCORD=REPLACE(ENR_ACCORD,19;ENR_ACCORD<19>-ENR_HRESATTENTE<7,i,k>)
                      END
                      IF ENR_ACCORD<19> < 0 THEN
                         * Accord consomme
                         ENR_ACCORD=REPLACE(ENR_ACCORD,19;0)
                     END
                   END
                   j=j+1
                REPEAT
             END
             k=k+1
          REPEAT
       END
       i=i+1
   REPEAT
RETURN

***************************************************************************
* Verifie si l'activite appartient aux activites choisi par l'utilisateur
330
   W_EActChoisi="FAUX"
   FOR kEAct=1 TO W_NbActivites
      IF W_Activites<kEAct>=W_ActAcc THEN
         W_EActChoisi="VRAI"
         EXIT
      END
   NEXT kEAct

RETURN

***************************************************************************
* Apuration des accord
***************************************************************************
400
   W_FiniAcc="FAUX"
   EXECUTE 'SSELECT ACCORD AVEC 19 # ""'

   LOOP
      READNEXT W_CleAcc ELSE W_FiniAcc="VRAI"
   WHILE W_FiniAcc#"VRAI" DO
      WRITEV "" ON F.ACCORD,W_CleAcc,19
   REPEAT

RETURN
