**********************************************************
*  liste des employeurs par type d'exonration
*  Vanessa
*  mars 2003
**********************************************************

* Ouvertures des fichiers

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","CIVILAIDE" TO F.CIVILAIDE ELSE PRINT "OUVERTURE CIVILAIDE" ;* en lecture
OPEN "","COMMUNES" TO F.COMMUNES ELSE PRINT "OUVERTURE COMMUNES" ;* en lecture
OPEN "","CONTRAT" TO F.CONTRAT ELSE PRINT "OUVERTURE CONTRAT" ;* en lecture
OPEN "","DETAILCALCUL" TO F.DETAILCALCUL ELSE PRINT "OUVERTURE DETAILCALCUL" ;* en lecture
OPEN "","ELTSPARTEMP" TO F.ELTSPARTEMP ELSE PRINT "OUVERTURE ELTSPARTEMP" ;* en lecture
OPEN "","RESPONSABLE" TO F.RESPONSABLE ELSE PRINT "OUVERTURE RESPONSABLE" ;* en lecture
OPEN "","SECTEUR" TO F.SECTEUR ELSE PRINT "OUVERTURE SECTEUR" ;* en lecture
OPEN "","STATAIDE" TO F.STATAIDE ELSE PRINT "OUVERTURE STATAIDE" ;* en lecture
OPEN "","TEMPO" TO F.TEMPO ELSE PRINT "OUVERTURE TEMPO" ;* en lecture criture
OPEN "","TYPEEXO" TO F.TYPEEXO ELSE PRINT "OUVERTURE TYPEEXO" ;* en lecture

*********************************************************
* initialisation des variables
ENR_TEMPO=""
W_RequeteEmployeur=""
W_AidePrec=""
W_Ligne=1
W_Cumul=0
W_ValeurCumul=0
W_Passe="FAUX"
W_ValeurActu=""
W_MotifExo=""
W_ValeurAnc=""

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

PROCREAD ARGUMENTS ELSE STOP
W_Entite=FIELD(ARGUMENTS,"|",2)
W_TypeEdition=FIELD(ARGUMENTS,"|",3)
W_Exo=FIELD(ARGUMENTS,"|",4)
W_Debut=FIELD(ARGUMENTS,"|",5)
W_Fin=FIELD(ARGUMENTS,"|",6)
W_TypeSelection=FIELD(ARGUMENTS,"|",7)
W_Select=FIELD(ARGUMENTS,"|",8)
W_Bornage=FIELD(ARGUMENTS,"|",9)
W_DebBornage=FIELD(ARGUMENTS,"|",10)
W_FinBornage=FIELD(ARGUMENTS,"|",11)
W_Tri=FIELD(ARGUMENTS,"|",12)
W_User=FIELD(ARGUMENTS,"|",13)
*********************************************************
* PROGRAMME PRINCIPAL

   * entit
   W_Temp='SSELECT DETAILCALCUL AVEC CodAssoContratDetailCalcul = "':W_Entite:'"'

   * convcol=02
   W_Temp=W_Temp:' AND AVEC ConvColContratDetailCalcul = "02"'

   * motif d'exo
   IF W_TypeEdition = "L" THEN
      W_Temp=W_Temp:' AND AVEC TypeExoDetailCalcul = "':W_Exo:'"'
   END ELSE
      W_Temp=W_Temp:' AND AVEC TypeExoDetailCalcul # ""'
   END

   * priode de paie
   W_Temp=W_Temp:' AND AVEC PeriodeDetailCalcul >= "':W_Debut:'" AND AVEC PeriodeDetailCalcul <= "':W_Fin:'"'

   * resp, secteur, commune
   IF W_Select # "" THEN
      BEGIN CASE
         CASE W_TypeSelection = "R"
            W_Temp=W_Temp:' AND AVEC RespAideDetailCalcul = "':W_Select:'"'
         CASE W_TypeSelection = "S"
            W_Temp=W_Temp:' AND AVEC SecteurAideDetailCalcul = "':W_Select:'"'
         CASE W_TypeSelection = "C"
            W_Temp=W_Temp:' AND AVEC CommuneAideDetailCalcul = "':W_Select:'"'
      END CASE
   END ELSE
      BEGIN CASE
         CASE W_TypeSelection = "R"
            W_Temp=W_Temp:' AND AVEC RespAideDetailCalcul # ""'
         CASE W_TypeSelection = "S"
            W_Temp=W_Temp:' AND AVEC SecteurAideDetailCalcul # ""'
         CASE W_TypeSelection = "C"
            W_Temp=W_Temp:' AND AVEC CommuneAideDetailCalcul # ""'
      END CASE
   END

   IF W_TypeEdition = "L" THEN
      BEGIN CASE
         CASE W_Tri = "A"
            W_Temp=W_Temp:' PAR NomAideDetailCalcul PAR CodeAideDetailCalcul'
         CASE W_Tri = "R"
            W_Temp=W_Temp:' PAR NomRespDetailCalcul PAR RespAideDetailCalcul PAR NomAideDetailCalcul PAR CodeAideDetailCalcul'
         CASE W_Tri = "S"
            W_Temp=W_Temp:' PAR NomSectDetailCalcul PAR SecteurAideDetailCalcul PAR NomAideDetailCalcul PAR CodeAideDetailCalcul'
         CASE W_Tri = "C"
            W_Temp=W_Temp:' PAR CommuneAideDetailCalcul PAR NomAideDetailCalcul PAR CodeAideDetailCalcul'
      END CASE
   END ELSE
      BEGIN CASE
         CASE W_Tri = "T"
            W_Temp=W_Temp:' PAR TypeExoDetailCalcul PAR CodeAideDetailCalcul'
         CASE W_Tri = "R"
            W_Temp=W_Temp:' PAR NomRespDetailCalcul PAR RespAideDetailCalcul PAR TypeExoDetailCalcul PAR CodeAideDetailCalcul'
         CASE W_Tri = "S"
            W_Temp=W_Temp:' PAR NomSectDetailCalcul PAR SecteurAideDetailCalcul PAR TypeExoDetailCalcul PAR CodeAideDetailCalcul'
         CASE W_Tri = "C"
            W_Temp=W_Temp:' PAR CommuneAideDetailCalcul PAR TypeExoDetailCalcul PAR CodeAideDetailCalcul'
      END CASE
   END

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

   IF MSGCODE<1>=209 THEN
      STOP
   END ELSE
      SELECT F.DETAILCALCUL TO W_RequeteEmployeur

      W_End="FAUX"

      LOOP
         READNEXT W_Cle FROM W_RequeteEmployeur ELSE W_End = "VRAI"
      WHILE W_End = "FAUX" DO

         READ ENR_DETAILCALCUL FROM F.DETAILCALCUL,W_Cle ELSE ENR_DETAILCALCUL=""
         READ ENR_CONTRAT FROM F.CONTRAT,W_Cle[1,8] ELSE ENR_CONTRAT=""
         READ ENR_CIVILAIDE FROM F.CIVILAIDE,ENR_CONTRAT<3> ELSE ENR_CIVILAIDE=""

         IF W_TypeEdition = "L" THEN
            GOSUB 100
         END ELSE
            READ ENR_ELTSPARTEMP FROM F.ELTSPARTEMP,ENR_CONTRAT<3> ELSE ENR_ELTSPARTEMP=""
            IF W_Passe="FAUX" THEN
               READ ENR_TYPEEXO FROM F.TYPEEXO,"1" ELSE ENR_TYPEEXO=""
               GOSUB 400
            END

            IF W_Bornage="S" THEN
               GOSUB 500
            END ELSE
               GOSUB 600
            END

         END

         W_Passe="VRAI"

      REPEAT

      IF W_TypeEdition = "L" AND W_DebBornage # "" THEN
         IF W_Cumul >= W_DebBornage AND W_Cumul <= W_FinBornage AND W_Cumul # 0 THEN

       	    READ ENR_CIVILAIDE FROM F.CIVILAIDE,W_AidePrec ELSE ENR_CIVILAIDE=""
            W_Nom=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
            W_Nom=W_Nom[1,50]
            ENR_TEMPO<W_Ligne>=SPACE(4):W_AidePrec:" ":W_Nom:SPACE(51-LEN(W_Nom))
    	    W_ValeurCumul = W_Cumul "R26,(#12)"
            ENR_TEMPO<W_Ligne>=ENR_TEMPO<W_Ligne>:SPACE(15 - LEN(W_ValeurCumul)):W_ValeurCumul
            ENR_TEMPO<W_Ligne,2>=W_ValeurActu

         END

      END ELSE
         IF W_TypeEdition # "L" AND W_DebBornage # "" THEN
            IF W_Cumul >= W_DebBornage AND W_Cumul <= W_FinBornage AND W_Cumul # 0 THEN
               READ ENR_ELTSPARTEMP FROM F.ELTSPARTEMP,W_AidePrec  ELSE ENR_ELTSPARTEMP=""
               IF W_MotifExo # ENR_ELTSPARTEMP<9> THEN
	          W_MotifExo = ENR_ELTSPARTEMP<9>
	          j=2
   	          LOOP
	          UNTIL ENR_ELTSPARTEMP<9> = ENR_TEMPO<1,j> OR ENR_TEMPO<1,j> = "" 
	             j=j+1
	          REPEAT
               END
      
               IF ENR_TEMPO<1,j> # "" THEN
                  IF ENR_TEMPO<W_Ligne,j> = "" THEN
	             ENR_TEMPO<W_Ligne,j>=0
	          END
	          IF ENR_TEMPO<W_Ligne,W_Nb+1> = "" THEN
	             ENR_TEMPO<W_Ligne,W_Nb+1>=0
	          END

	          ENR_TEMPO<W_Ligne,j>=ENR_TEMPO<W_Ligne,j>+INT(W_Cumul/100+(1/2))
	          ENR_TEMPO<W_Ligne,W_Nb+1>=ENR_TEMPO<W_Ligne,W_Nb+1>+INT(W_Cumul/100+(1/2))
               END
            END ELSE
               IF ENR_TEMPO<W_Ligne,W_Nb+1> ="" THEN
                  ENR_TEMPO=DELETE(ENR_TEMPO,W_Ligne)         
	       END
            END
         END
      END

      IF W_TypeEdition # "L" THEN
	 IF W_Tri # "T" THEN
            GOSUB 700
	 END

         IF W_TypeEdition = "S" THEN
       	    WRITE ENR_TEMPO TO F.TEMPO,"STATMOTIFEXO":W_User
         END ELSE
      
            GOSUB 800

	    W_Ordre=1
   	    W_Date=OCONV(DATE(),"D4/")
   	    W_Date=ICONV(W_Date,"MCN")

   	    W_CleFichier="EMPLMOTIFEXO-":W_Entite:"-":W_Date:"-"

	    READ ENR_STATAIDE FROM F.STATAIDE,W_CleFichier:W_Ordre:".csv" ELSE ENR_STATAIDE=""

	    LOOP
	    UNTIL ENR_STATAIDE=""
	       W_Ordre=W_Ordre+1
	       READ ENR_STATAIDE FROM F.STATAIDE,W_CleFichier:W_Ordre:".csv" ELSE ENR_STATAIDE=""
	    REPEAT

            CONVERT "" TO ";" IN ENR_TEMPO

   	    WRITE ENR_TEMPO TO F.STATAIDE,W_CleFichier:W_Ordre:".csv"

	    WRITE W_CleFichier:W_Ordre:".csv" TO F.TEMPO,"STATMOTIFEXO":W_User
         END
      END ELSE
         IF ENR_TEMPO # "" THEN
       	    WRITE ENR_TEMPO TO F.TEMPO,"STATMOTIFEXO":W_User
         END
      END
   END

STOP

********************************************************************************************
* dition sous forme de liste

100

   IF W_Tri = "A" THEN
      GOSUB 300

   END ELSE

      IF W_Tri="R" THEN
         W_ValeurActu = ENR_CIVILAIDE<39>
         GOSUB 300
         W_ValeurAnc = ENR_CIVILAIDE<39>
      END ELSE

         IF W_Tri="S" THEN
            W_ValeurActu = ENR_CIVILAIDE<40>[1,3]
            GOSUB 300
            W_ValeurAnc = ENR_CIVILAIDE<40>[1,3]

         END ELSE
            IF W_Tri="C" THEN
               W_ValeurActu = ENR_CIVILAIDE<11>
               GOSUB 300
               W_ValeurAnc = ENR_CIVILAIDE<11>
            END
         END
     END

   END

RETURN

********************************************************************************************
* cumuls valeurs --> liste

200

   IF W_Bornage = "A" THEN
      * par activit
      IF ENR_DETAILCALCUL<6> # "" THEN
         W_Cumul = W_Cumul + ENR_DETAILCALCUL<6>
      END
   END ELSE
      * par masse salariale
      IF ENR_DETAILCALCUL<7> # "" THEN
         W_Cumul = W_Cumul + ENR_DETAILCALCUL<7> 
      END
   END

RETURN

********************************************************************************************
* impression principal --> liste

300

   IF W_AidePrec # ENR_CONTRAT<3> THEN

      IF W_Bornage = "S" THEN
         W_Nom=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
         W_Nom=W_Nom[1,50]
         ENR_TEMPO<W_Ligne>=SPACE(4):ENR_CONTRAT<3>:" ":W_Nom:SPACE(51-LEN(W_Nom)):OCONV(ENR_CIVILAIDE<20>,"D4/")
         ENR_TEMPO<W_Ligne,2>=W_ValeurActu
         W_Ligne=W_Ligne+1
      END ELSE

         IF W_Passe="VRAI" THEN
            IF W_Cumul >= W_DebBornage AND W_Cumul <= W_FinBornage THEN

       	       READ ENR_CIVILAIDE FROM F.CIVILAIDE,W_AidePrec ELSE ENR_CIVILAIDE=""
               W_Nom=ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
               W_Nom=W_Nom[1,50]
               ENR_TEMPO<W_Ligne>=SPACE(4):W_AidePrec:" ":W_Nom:SPACE(51-LEN(W_Nom))
    	       W_ValeurCumul = W_Cumul "R26,(#12)"
               ENR_TEMPO<W_Ligne>=ENR_TEMPO<W_Ligne>:SPACE(15 - LEN(W_ValeurCumul)):W_ValeurCumul
               ENR_TEMPO<W_Ligne,2>=W_ValeurAnc
               W_Ligne=W_Ligne+1
               READ ENR_CIVILAIDE FROM F.CIVILAIDE,ENR_CONTRAT<3> ELSE ENR_CIVILAIDE=""

            END
	    W_Cumul=0

         END

         GOSUB 200

      END

      W_AidePrec = ENR_CONTRAT<3>

   END ELSE

      IF W_Bornage # "S" THEN
         GOSUB 200
      END

   END

RETURN

********************************************************************************************
* imprime entete tableau --> stat + graph

400

   IF W_Tri="T" THEN
      ENR_TEMPO<1,1>=""
   END ELSE
      IF W_Tri="C" THEN
	 ENR_TEMPO<1,1>="COMMUNE"
      END ELSE
	 IF W_Tri="R" THEN
	    ENR_TEMPO<1,1>="RESPONSABLE"
	 END ELSE
	    IF W_Tri="S" THEN
	       ENR_TEMPO<1,1>="SECTEUR"
	    END
	 END 
      END
   END

   W_Nb=1
   W_Count=DCOUNT(ENR_TYPEEXO<1>,CHAR(253))
   FOR i = 1 TO W_Count
      W_Nb=W_Nb+1
      ENR_TEMPO<1,W_Nb>=ENR_TYPEEXO<1,i>
   NEXT i
   ENR_TEMPO<1,W_Nb+1>="TOTAL"
   W_Ligne=2

RETURN

********************************************************************************************
* remplit tableau --> stat + graph sans bornage

500

   IF W_AidePrec # ENR_CONTRAT<3> THEN

      IF W_Tri # "T" THEN

         BEGIN CASE
            CASE W_Tri = "R"
               IF W_ValeurActu # ENR_CIVILAIDE<39> THEN
                  IF W_Passe="VRAI" THEN
                     W_Ligne=W_Ligne+1
                  END
                  W_ValeurActu = ENR_CIVILAIDE<39>
                  READ ENR_RESPONSABLE FROM F.RESPONSABLE,W_ValeurActu ELSE ENR_RESPONSABLE=""
	          ENR_TEMPO<W_Ligne,1>=ENR_RESPONSABLE<1>
               END
            CASE W_Tri = "S"
               IF W_ValeurActu # ENR_CIVILAIDE<40>[1,3] THEN
                  IF W_Passe="VRAI" THEN
                     W_Ligne=W_Ligne+1
                  END
                  W_ValeurActu = ENR_CIVILAIDE<40>[1,3]
                  READ ENR_SECTEUR FROM F.SECTEUR,W_ValeurActu ELSE ENR_SECTEUR=""
	          ENR_TEMPO<W_Ligne,1>=ENR_SECTEUR<1>
               END
            CASE W_Tri = "C"
               IF W_ValeurActu # ENR_CIVILAIDE<11> THEN
                  IF W_Passe="VRAI" THEN
                     W_Ligne=W_Ligne+1
                  END
                  W_ValeurActu = ENR_CIVILAIDE<11>
	          ENR_TEMPO<W_Ligne,1>=W_ValeurActu
               END
         END CASE
      END ELSE
         IF W_Passe="FAUX" THEN
	    ENR_TEMPO<W_Ligne,1>="TOTAL"
         END
      END

      IF W_MotifExo # ENR_ELTSPARTEMP<9> THEN
	 W_MotifExo = ENR_ELTSPARTEMP<9>
	 j=2
	 LOOP
	 UNTIL ENR_ELTSPARTEMP<9> = ENR_TEMPO<1,j> OR ENR_TEMPO<1,j> = "" 
	    j=j+1
	 REPEAT
      END
      
      IF ENR_TEMPO<1,j> # "" THEN
         IF ENR_TEMPO<W_Ligne,j> = "" THEN
	    ENR_TEMPO<W_Ligne,j>=0
	 END
	 IF ENR_TEMPO<W_Ligne,W_Nb+1> = "" THEN
	    ENR_TEMPO<W_Ligne,W_Nb+1>=0
	 END

	 ENR_TEMPO<W_Ligne,j>=ENR_TEMPO<W_Ligne,j>+1
	 ENR_TEMPO<W_Ligne,W_Nb+1>=ENR_TEMPO<W_Ligne,W_Nb+1>+1
      END

      W_AidePrec = ENR_CONTRAT<3>

   END

RETURN

********************************************************************************************
* remplit tableau --> stat + graph avec bornage

600

   IF W_AidePrec = "" THEN
      W_AidePrec = ENR_CONTRAT<3>
      IF W_Tri # "T" THEN
         BEGIN CASE
            CASE W_Tri = "R"
               W_ValeurActu = ENR_CIVILAIDE<39>
               READ ENR_RESPONSABLE FROM F.RESPONSABLE,W_ValeurActu ELSE ENR_RESPONSABLE=""
	       ENR_TEMPO<W_Ligne,1>=ENR_RESPONSABLE<1>
            CASE W_Tri = "S"
               W_ValeurActu = ENR_CIVILAIDE<40>[1,3]
               READ ENR_SECTEUR FROM F.SECTEUR,W_ValeurActu ELSE ENR_SECTEUR=""
	       ENR_TEMPO<W_Ligne,1>=ENR_SECTEUR<1>
            CASE W_Tri = "C"
               W_ValeurActu = ENR_CIVILAIDE<11>
	       ENR_TEMPO<W_Ligne,1>=W_ValeurActu
         END CASE
      END 
      IF W_Tri="T" THEN
	 ENR_TEMPO<W_Ligne,1>="TOTAL"
      END
   END

   IF W_AidePrec # ENR_CONTRAT<3> THEN

      IF W_Cumul >= W_DebBornage AND W_Cumul <= W_FinBornage AND W_Cumul # 0 THEN

         READ ENR_ELTSPARTEMP FROM F.ELTSPARTEMP,W_AidePrec ELSE ENR_ELTSPARTEMP=""
         IF W_MotifExo # ENR_ELTSPARTEMP<9> OR W_AidePrec # ENR_CONTRAT<3> THEN
	    W_MotifExo = ENR_ELTSPARTEMP<9>
	    j=2
	    LOOP
	    UNTIL ENR_ELTSPARTEMP<9> = ENR_TEMPO<1,j> OR ENR_TEMPO<1,j> = "" 
	       j=j+1
	    REPEAT
         END
      
         IF ENR_TEMPO<1,j> # "" THEN
            IF ENR_TEMPO<W_Ligne,j> = "" THEN
	       ENR_TEMPO<W_Ligne,j>=0
	    END
	    IF ENR_TEMPO<W_Ligne,W_Nb+1> = "" THEN
	       ENR_TEMPO<W_Ligne,W_Nb+1>=0
	    END

	    ENR_TEMPO<W_Ligne,j>=ENR_TEMPO<W_Ligne,j>+INT(W_Cumul/100+(1/2))
	    ENR_TEMPO<W_Ligne,W_Nb+1>=ENR_TEMPO<W_Ligne,W_Nb+1>+INT(W_Cumul/100+(1/2))

         END
      END

      W_Cumul=0

      W_AidePrec = ENR_CONTRAT<3>

      IF W_Tri # "T" THEN
         BEGIN CASE
            CASE W_Tri = "R"
               IF W_ValeurActu # ENR_CIVILAIDE<39> THEN
                  IF W_Passe="VRAI" THEN
		     IF ENR_TEMPO<W_Ligne,W_Nb+1> # "" THEN
                        W_Ligne=W_Ligne+1
                     END
                  END
                  W_ValeurActu = ENR_CIVILAIDE<39>
                  READ ENR_RESPONSABLE FROM F.RESPONSABLE,W_ValeurActu ELSE ENR_RESPONSABLE=""
	          ENR_TEMPO<W_Ligne,1>=ENR_RESPONSABLE<1>
               END
            CASE W_Tri = "S"
               IF W_ValeurActu # ENR_CIVILAIDE<40>[1,3] THEN
                  IF W_Passe="VRAI" THEN
		     IF ENR_TEMPO<W_Ligne,W_Nb+1> # "" THEN
                        W_Ligne=W_Ligne+1
                     END
                  END
                  W_ValeurActu = ENR_CIVILAIDE<40>[1,3]
                  READ ENR_SECTEUR FROM F.SECTEUR,W_ValeurActu ELSE ENR_SECTEUR=""
	          ENR_TEMPO<W_Ligne,1>=ENR_SECTEUR<1>
               END
            CASE W_Tri = "C"
               IF W_ValeurActu # ENR_CIVILAIDE<11> THEN
                  IF W_Passe="VRAI" THEN
		     IF ENR_TEMPO<W_Ligne,W_Nb+1> # "" THEN
                        W_Ligne=W_Ligne+1
                     END
                  END
                  W_ValeurActu = ENR_CIVILAIDE<11>
	          ENR_TEMPO<W_Ligne,1>=W_ValeurActu

               END
         END CASE
      END

      GOSUB 200

   END ELSE
      GOSUB 200
   END

RETURN

********************************************************************************************
* total colonne

700

   W_CountCol=DCOUNT(ENR_TEMPO<1>,CHAR(253))
   W_CountLigne=DCOUNT(ENR_TEMPO,CHAR(254))
   ENR_TEMPO<W_CountLigne+1,1>="TOTAL"

   FOR i = 2 TO W_CountCol
      ENR_TEMPO<W_CountLigne+1,i>=0
      FOR j = 2 TO W_CountLigne
         ENR_TEMPO<W_CountLigne+1,i>=ENR_TEMPO<W_CountLigne+1,i>+ENR_TEMPO<j,i>
      NEXT j
   NEXT i

RETURN

********************************************************************************************
* Libell motif exo

800

   W_Count=DCOUNT(ENR_TEMPO<1>,CHAR(253))
   FOR i = 2 TO W_Count

      j=1
      LOOP
      UNTIL ENR_TYPEEXO<1,j> = ENR_TEMPO<1,i> OR ENR_TYPEEXO<1,j> = "" 
         j=j+1
      REPEAT
      IF ENR_TYPEEXO<1,j> # "" THEN
         ENR_TEMPO<1,i>=ENR_TYPEEXO<2,j>
      END

   NEXT i

RETURN
