**********************************************************
*  SUIVI DES FORMATIONS
*  Vanessa
*  SEPTEMBRE 2002
**********************************************************
* Ouvertures des fichiers

EXECUTE "DATE.FORMAT"
OPEN "","ASSOCIATION" TO F.ASSOCIATION ELSE PRINT "OUVERTURE ASSOCIATION" ;* en lecture
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE PRINT "OUVERTURE CIVILAIDANT" ;* en lecture
OPEN "","CIVILAIDE" TO F.CIVILAIDE ELSE PRINT "OUVERTURE CIVILAIDE" ;* en lecture
OPEN "","CONTRAT" TO F.CONTRAT ELSE PRINT "OUVERTURE CONTRAT" ;* en lecture
OPEN "","FORMEXPAIDANT" TO F.FORMEXPAIDANT ELSE PRINT "OUVERTURE FORMEXPAIDANT" ;* en lecture
OPEN "","TABLES" TO F.TABLES ELSE PRINT "OUVERTURE TABLES" ;* en lecture
OPEN "","TEMPO" TO F.TEMPO ELSE PRINT "OUVERTURE TEMPO" ;* en lecture
*********************************************************
* initialisation des variables

W_SauveSect=""
W_TabForm=""
W_TabDyn=""
W_RequeteContr=""
W_SauveAidant=""

*********************************************************
* Recuperation des arguments

PROCREAD ARGUMENTS ELSE STOP
W_Entite=FIELD(ARGUMENTS,"|",2)
W_ConvCol=FIELD(ARGUMENTS,"|",3)
W_Secteur=FIELD(ARGUMENTS,"|",4)
W_Contrat=FIELD(ARGUMENTS,"|",5)
W_DateDep=FIELD(ARGUMENTS,"|",6)
W_DateFin=FIELD(ARGUMENTS,"|",7)
W_Actif=FIELD(ARGUMENTS,"|",8)
W_RequeteForm=FIELD(ARGUMENTS,"|",9)
W_Tri=FIELD(ARGUMENTS,"|",10)
W_TriSect=FIELD(ARGUMENTS,"|",11)
W_PerDeb=FIELD(ARGUMENTS,"|",12)
W_PerFin=FIELD(ARGUMENTS,"|",13)
*********************************************************
* PROGRAMME PRINCIPAL

   EXECUTE "SET-DEC ,"
   EXECUTE "SET-THOUS ."

   * efface l'article de TEMPO
   DELETE F.TEMPO,"SUIVIFORMATION"

   W_Temp = 'SSELECT CONTRAT AVEC 2 = "':W_Entite:'" AND AVEC 65 # "O"'
   IF W_ConvCol # "0" THEN
      W_Temp=W_Temp:' AND AVEC 1 = "':W_ConvCol:'"'
   END
   IF W_Secteur # "0" THEN
      W_Temp=W_Temp:' AND AVEC SecteurContrat = "':W_Secteur:'"'
   END

   IF W_Contrat = "C" THEN
      W_Temp=W_Temp:' AND AVEC 7 <= "':W_DateFin:'" AND AVEC 8 >= "':W_DateDep:'" OR = ""'
   END ELSE
      IF W_Contrat = "D" THEN      
         W_Temp=W_Temp:' AND AVEC 7 >= "':W_DateDep:'" AND AVEC 7 <= "':W_DateFin:'"'
         IF W_Actif # "0" THEN
            W_Temp=W_Temp:' AND AVEC 7 <= "':W_Actif:'" AND AVEC 8 >= "':W_Actif:'" OR = ""'
         END
      END 
   END

   W_Temp=W_Temp:' AND AVEC Formation # ""'

   IF W_TriSect = "O" THEN
      W_Temp=W_Temp:' PAR LibSecteurContrat'
   END
   IF W_Tri = "A" THEN
      W_Temp=W_Temp:' PAR NomPrenomAidantContrat PAR 7'
   END ELSE
      IF W_Tri="C" THEN
         W_Temp=W_Temp:' PAR 7 PAR NomPrenomAidantContrat'
      END
   END

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

   IF MSGCODE<1> = 209 THEN
      STOP
   END ELSE
      SELECT F.CONTRAT TO W_RequeteContr

      GOSUB 10

      IF ENR_TEMPO<1> # "" THEN 
         WRITE ENR_TEMPO ON F.TEMPO,"SUIVIFORMATION"
      END

   END

   EXECUTE "SET-DEC ."
   EXECUTE "SET-THOUS ,"

STOP

*********************************************************
*  RECHERCHE LES FORMATIONS POUR CHAQUE AIDANT SELECTIONNE

10


   READ ENR_TABLES FROM F.TABLES,"FORMPRO" ELSE ENR_TABLES=""
      
   IF W_RequeteForm # "" THEN
      * remplit un tableau dynamique avec chaque condition
      W_Len=LEN(W_RequeteForm)

      i=1
      j=1
      W_Deb=1
      LOOP
      WHILE i # W_Len DO

         IF W_RequeteForm[i,1]="O" THEN
            W_TabForm<j> = W_RequeteForm[W_Deb,i-W_Deb]
            j=j+1
            W_Deb=i+3
         END

         i=i+1

      REPEAT 
      W_TabForm<j> = W_RequeteForm[W_Deb,i-W_Deb+1]

      W_Count=DCOUNT(W_TabForm,CHAR(254))
      FOR i = 1 TO W_Count
      
         j=1
         k=1
         LOOP
         WHILE W_TabForm<i>[j,1] # "" DO

            IF W_TabForm<i>[j,1]="A" THEN
               W_TabDyn<i,k,1> = W_TabForm<i>[j+5,3]
               W_TabDyn<i,k,2> = "O"

               j=j+12
               k=k+1
            END ELSE
               IF W_TabForm<i>[j,1]="S" THEN
                  W_TabDyn<i,k,1> = W_TabForm<i>[j+5,3]
                  W_TabDyn<i,k,2> = "N"

                  j=j+12
                  k=k+1
               END ELSE
                  j=j+1

               END
            END

         REPEAT 
  
      NEXT i
   END

   W_Fini = "FAUX"
   ENR_TEMPO =""
   W_Rang=1

   LOOP
      READNEXT W_Cle FROM W_RequeteContr ELSE W_Fini = "VRAI"
   WHILE W_Fini = "FAUX" DO
 
      IF W_SauveAidant # W_Cle[1,5] THEN
         READ ENR_FORMEXPAIDANT FROM F.FORMEXPAIDANT,W_Cle[1,5] ELSE ENR_FORMEXPAIDANT=""
         W_SauveAidant = W_Cle[1,5]

         W_ConditionOK="FAUX"
         IF W_RequeteForm # "" THEN

            i=1
            W_SauveI=0
            LOOP
            UNTIL W_TabDyn<i> = "" OR W_ConditionOK = "VRAI" DO

               j=1
               W_Trouve="VRAI"
               LOOP 
               UNTIL W_TabDyn<i,j> = "" OR W_Trouve = "FAUX" DO 

                  W_TabDyn<i,j,3>="0"

                  k=1
                  LOOP 
                  UNTIL ENR_FORMEXPAIDANT<6,k> = "" OR ENR_FORMEXPAIDANT<6,k> = W_TabDyn<i,j,1> DO 
                     k=k+1
                  REPEAT
                  IF ENR_FORMEXPAIDANT<6,k> = W_TabDyn<i,j,1> THEN
                     IF W_PerDeb = "" THEN
                        W_TabDyn<i,j,3>="1"
                     END ELSE
                        IF W_PerDeb # "" AND W_PerDeb <= ENR_FORMEXPAIDANT<5,k> AND W_PerFin >= ENR_FORMEXPAIDANT<5,k> THEN
                           W_TabDyn<i,j,3>="1"
                        END
                     END
                  END
         
                  IF (W_TabDyn<i,j,3>="1" AND W_TabDyn<i,j,2>="O") OR (W_TabDyn<i,j,3>="0" AND W_TabDyn<i,j,2>="N") THEN
                     W_Trouve="VRAI"
                  END ELSE
                     W_Trouve="FAUX"
                  END

                  j=j+1
               REPEAT
               IF W_Trouve="VRAI" THEN
                  W_SauveI=i
                  W_ConditionOK="VRAI"
               END 

               i=i+1
            REPEAT
         END ELSE
            IF W_PerDeb # "" THEN
               
               k=1
               LOOP 
               UNTIL ENR_FORMEXPAIDANT<6,k> = "" OR (W_PerDeb <= ENR_FORMEXPAIDANT<5,k> AND W_PerFin >= ENR_FORMEXPAIDANT<5,k>) DO 
                  k=k+1
               REPEAT
               IF ENR_FORMEXPAIDANT<6,k> # "" THEN
                  W_ConditionOK="VRAI"
	       END
            END ELSE
               W_ConditionOK="VRAI"
            END

         END

         IF W_ConditionOK="VRAI" THEN
            GOSUB 20
            W_Rang = W_Rang + 1
         END
      END

   REPEAT

RETURN

*********************************************************
*  EDITION DE L'AIDANT

20

   ENR_TEMPO<W_Rang>=""
   W_NomAidant=""
   W_NomEmployeur=""

   * code
   ENR_TEMPO<W_Rang>=" ":W_Cle[1,5]:" "

   * nom prnom aidant
   READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_Cle[1,5] ELSE ENR_CIVILAIDANT=""
   W_NomAidant=ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>
   IF LEN(W_NomAidant) > 25 THEN
      W_NomAidant = W_NomAidant[1,25]
   END ELSE
      W_NomAidant = W_NomAidant:SPACE(25-LEN(W_NomAidant))
   END

   ENR_TEMPO<W_Rang>=ENR_TEMPO<W_Rang>:W_NomAidant:" "

   * employeur
   READ ENR_CONTRAT FROM F.CONTRAT,W_Cle ELSE ENR_CONTRAT=""   
   IF ENR_CONTRAT<1> # "02" THEN
      READ ENR_ASSOCIATION FROM F.ASSOCIATION,ENR_CONTRAT<2> ELSE ENR_ASSOCIATION=""
      W_NomEmployeur=ENR_ASSOCIATION<1>
   END ELSE
      READ ENR_CIVILAIDE FROM F.CIVILAIDE,ENR_CONTRAT<3> ELSE ENR_CIVILAIDE=""
      W_NomEmployeur=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
   END
   IF LEN(W_NomEmployeur) > 20 THEN
      W_NomEmployeur = W_NomEmployeur[1,20]
   END ELSE
      W_NomEmployeur = W_NomEmployeur:SPACE(20-LEN(W_NomEmployeur))
   END
   ENR_TEMPO<W_Rang>=ENR_TEMPO<W_Rang>:W_NomEmployeur:" "

   * date dbut contrat
   ENR_TEMPO<W_Rang>=ENR_TEMPO<W_Rang>:OCONV(ENR_CONTRAT<7>,"D4/"):" "

   * date fin contrat
   IF ENR_CONTRAT<8> # "" THEN
      ENR_TEMPO<W_Rang>=ENR_TEMPO<W_Rang>:OCONV(ENR_CONTRAT<8>,"D4/"):" "
   END ELSE
      ENR_TEMPO<W_Rang>=ENR_TEMPO<W_Rang>:SPACE(11)
   END

   * formations
   IF W_RequeteForm # "" THEN
      W_Count=DCOUNT(W_TabDyn<W_SauveI>,CHAR(253))
      FOR l=1 TO W_Count

         IF l # 1 THEN
   	    W_Rang=W_Rang+1
            ENR_TEMPO<W_Rang>=SPACE(76)
         END

         W_Formation=""
         IF W_TabDyn<W_SauveI,l,2>="O" THEN

            m=1
            LOOP 
            UNTIL ENR_TABLES<2,m> = "" OR ENR_TABLES<2,m> = W_TabDyn<W_SauveI,l,1> DO 
               m=m+1
            REPEAT
            IF ENR_TABLES<2,m> = W_TabDyn<W_SauveI,l,1> THEN
               W_Formation = ENR_TABLES<2,m>:" ":ENR_TABLES<3,m>

               IF LEN(W_Formation) > 35 THEN
                  W_Formation = W_Formation[1,35]
               END ELSE
                  W_Formation = W_Formation:SPACE(35-LEN(W_Formation))
               END

               ENR_TEMPO<W_Rang>=ENR_TEMPO<W_Rang>:W_Formation:" "
            END
            m=1
            LOOP 
            UNTIL ENR_FORMEXPAIDANT<6,m> = "" OR ENR_FORMEXPAIDANT<6,m> = W_TabDyn<W_SauveI,l,1> DO 
               m=m+1
            REPEAT
            IF ENR_FORMEXPAIDANT<6,m> = W_TabDyn<W_SauveI,l,1> THEN
               IF ENR_FORMEXPAIDANT<5,m> # "" THEN
                  ENR_TEMPO<W_Rang>=ENR_TEMPO<W_Rang>:OCONV(ENR_FORMEXPAIDANT<5,m>,"D4/"):" ":ENR_FORMEXPAIDANT<7,m> "R26(#8)"
               END ELSE
                  ENR_TEMPO<W_Rang>=ENR_TEMPO<W_Rang>:SPACE(11):ENR_FORMEXPAIDANT<7,m> "R26(#8)"
               END
            END

         END ELSE

            m=1
            LOOP 
            UNTIL ENR_TABLES<2,m> = "" OR ENR_TABLES<2,m> = W_TabDyn<W_SauveI,l,1> DO 
               m=m+1
            REPEAT
            IF ENR_TABLES<2,m> = W_TabDyn<W_SauveI,l,1> THEN
               W_Formation = "Pas formation ":ENR_TABLES<2,m>:" ":ENR_TABLES<3,m>
  
               IF LEN(W_Formation) > 35 THEN
                  W_Formation = W_Formation[1,35]
               END ELSE
                  W_Formation = W_Formation:SPACE(35-LEN(W_Formation))
               END

               ENR_TEMPO<W_Rang>=ENR_TEMPO<W_Rang>:W_Formation:" "
            END

         END   

         IF W_TriSect = "O" AND W_SauveSect # ENR_CIVILAIDANT<31> THEN
            ENR_TEMPO<W_Rang,2>=ENR_CIVILAIDANT<31>
            W_SauveSect=ENR_CIVILAIDANT<31>
         END

      NEXT l
   END ELSE
      W_Passe="FAUX"
      W_Count=DCOUNT(ENR_FORMEXPAIDANT<6>,CHAR(253))
      FOR l=1 TO W_Count

         W_Formation=""
         IF W_PerDeb = "" OR (W_PerDeb # "" AND W_PerDeb <= ENR_FORMEXPAIDANT<5,l> AND W_PerFin >= ENR_FORMEXPAIDANT<5,l>)  THEN

            IF W_Passe="VRAI" THEN
   	       W_Rang=W_Rang+1
               ENR_TEMPO<W_Rang>=SPACE(76)
            END

            m=1
            LOOP 
            UNTIL ENR_TABLES<2,m> = "" OR ENR_TABLES<2,m> = ENR_FORMEXPAIDANT<6,l> DO 
               m=m+1
            REPEAT
            IF ENR_TABLES<2,m> = ENR_FORMEXPAIDANT<6,l> THEN
               W_Formation = ENR_TABLES<2,m>:" ":ENR_TABLES<3,m>

               IF LEN(W_Formation) > 35 THEN
                  W_Formation = W_Formation[1,35]
               END ELSE
                  W_Formation = W_Formation:SPACE(35-LEN(W_Formation))
               END

               ENR_TEMPO<W_Rang>=ENR_TEMPO<W_Rang>:W_Formation:" "
               W_Passe="VRAI"

               IF ENR_FORMEXPAIDANT<5,l> # "" THEN
                  ENR_TEMPO<W_Rang>=ENR_TEMPO<W_Rang>:OCONV(ENR_FORMEXPAIDANT<5,l>,"D4/"):" ":ENR_FORMEXPAIDANT<7,l> "R26(#8)"
               END ELSE
                  ENR_TEMPO<W_Rang>=ENR_TEMPO<W_Rang>:SPACE(11):ENR_FORMEXPAIDANT<7,l> "R26(#8)"
               END
            END ELSE
               ENR_TEMPO<W_Rang>=""
            END

            IF W_TriSect = "O" AND W_SauveSect # ENR_CIVILAIDANT<31> THEN
               ENR_TEMPO<W_Rang,2>=ENR_CIVILAIDANT<31>
               W_SauveSect=ENR_CIVILAIDANT<31>
            END

	    IF ENR_TEMPO<W_Rang> = "" THEN
               IF ENR_TEMPO<W_Rang,2> # "" THEN
                  ENR_TEMPO<W_Rang,2>=""
               END
               W_Rang=W_Rang-1
	    END
         END

      NEXT l

   END



RETURN
