***********************************************************
*                                                         *
* CALCUL DES COMPLEMENTS DE FACTURATION                   *
*                                                         *
* JUIN 2000                               STEPHANE HERVET *
* Avril 2001		         	MICHAEL THOUVENIN *
* Septembre 2001			MICHAEL THOUVENIN *
* (ajout notion de report)		      	          *
* MARS 2002                                ALAIN ALLOCHON *
* JANVIER 04 Gestion COMPLFACT avec periode 	Michael	  *
* Grgory -> 27/01/04 : correction du bug pour la priode *
*    en att. 9 de COMPLFACT (si priode 200312, mettre    *
*    200401 et non 200313)                                *
***********************************************************

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

***********************************************************
***********************************************************
* OUVERTURE DES FICHIERS

EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","ACTIVITES" TO F.ACTIVITES ELSE STOP
OPEN "","ACTIVITESAIDE" TO F.ACTIVITESAIDE ELSE STOP
OPEN "","BAREMEPARTEMP" TO F.BAREMEPARTEMP ELSE STOP
OPEN "","CIVILAIDE" TO F.CIVILAIDE ELSE STOP
OPEN "","COMPLFACT" TO F.COMPLFACT ELSE STOP
OPEN "","ELTSPARTEMP" TO F.ELTSPARTEMP ELSE STOP
OPEN "","FACTURAIDE" TO F.FACTURAIDE ELSE STOP
OPEN "","NUMEROFACT" TO F.NUMEROFACT ELSE STOP
OPEN "","PERIODESPAIE" TO F.PERIODESPAIE ELSE STOP
OPEN "","TABLES" TO F.TABLES ELSE STOP

***********************************************************
* DEBUT TRAITEMENT DES ARTICLES

PROCREAD PARAMETRES ELSE STOP

* RECUPERE LE CODE ENTITE
W_RANGENTITE=INDEX(PARAMETRES," ",2)
W_CODEENTITE=PARAMETRES[W_RANGENTITE+1,3]
* MAJ 11/04/01 : lecture de l'etat du traitement des avoirs...
W_RangTraitementAvoirs = INDEX(PARAMETRES," ",7)
W_TraitementAvoirs = PARAMETRES[W_RangTraitementAvoirs+1,1]
***********************************************************
* CHARGEMENT DE LA LISTE DES ARTICLES SELECTIONNES

LISTECOMPLFACT = ""
LISTACTIVITES = ""

READ ENR_PERIODESPAIE FROM F.PERIODESPAIE,"1" ELSE ENR_PERIODESPAIE=""

DatDebPer = '01/':ENR_PERIODESPAIE<1>[5,2]:'/':ENR_PERIODESPAIE<1>[1,4]
DatDebPer = ICONV(DatDebPer,"D4/")

DatFinPer = (ENR_PERIODESPAIE<1>[5,2])+1

IF DatFinPer = 13 THEN
	DatFinPer = (ENR_PERIODESPAIE<1>[1,4])+1
	DatFinPer = '01/01/':DatFinPer
END ELSE
	DatFinPer = '01/':DatFinPer:'/':ENR_PERIODESPAIE<1>[1,4]
END

DatFinPer = ICONV(DatFinPer,"D4/")
DatFinPer = DatFinPer-1

READ ENR_NUMEROFACT FROM F.NUMEROFACT,W_CODEENTITE ELSE ENR_NUMEROFACT=""

EXECUTE "LISTE LISTECOMPLFACT" CAPTURING MSG RETURNING MSGCODE

IF MSGCODE<1>=209 THEN 
    *PRINT "ERREUR MSGCODE"
    STOP
END

SELECT F.COMPLFACT TO LISTECOMPLFACT

W_REQVIDE="FAUX"
W_PASSAGE=0
W_TAUXTVA=0

LOOP
10
    * LECTURE RESULTAT REQUETE JUSQUE REQUETE = VIDE
    READNEXT CLE FROM LISTECOMPLFACT ELSE W_REQVIDE="VRAI"
UNTIL W_REQVIDE="VRAI" DO

    IF W_PASSAGE=0 THEN  
       * RECHERCHE DU TAUX TVA
       W_TYPEACTIVITE=CLE[9,1]
       EXECUTE 'TSELECT ACTIVITES AVEC 0 = "':W_CODEENTITE:']" AND AVEC 12 = "':W_TYPEACTIVITE:'" PAR 0'
       EXECUTE "SAUVE-LISTE LISTACTIVITES"
       EXECUTE "LISTE LISTACTIVITES" RETURNING W_MSG
       SELECT F.ACTIVITES TO LISTACTIVITES

       READNEXT CLE1 FROM LISTACTIVITES THEN
        READ ENR_ACTIVITES FROM F.ACTIVITES,CLE1 THEN
   	    W_CODETVA=ENR_ACTIVITES<11>
	    READ ENR_TAUXTVA FROM F.TABLES,"TAUXTVA" THEN
	    I=1
	    LOOP
		 UNTIL ENR_TAUXTVA<2,I>=W_CODETVA DO
		 I=I+1
	    REPEAT
	    W_TAUXTVA=ENR_TAUXTVA<4,I>
	    END
        END ELSE
	    W_TAUXTVA=0
        END
       END

       EXECUTE "EFFACER-LISTE LISTACTIVITES"
       W_PASSAGE=1
    END

    * LECTURE COMPLFACT
    READ ENR_COMPLFACT FROM F.COMPLFACT,CLE ELSE ENR_COMPLFACT=""

*******************************************************
* TEST SI AIDE ACTIF ET SI AIDE A UNE ACTIVITE VALIDE *
*******************************************************

    W.CODAID = CLE[1,5]
    READ ENR_CIVILAIDE FROM F.CIVILAIDE,W.CODAID ELSE ENR_CIVILAIDE=""
    IF ENR_CIVILAIDE<43> # "" THEN
	IF ENR_CIVILAIDE<43> < DatDebPer THEN
		DELETE F.COMPLFACT,CLE
		GOTO 10
	END
    END
    READ ENR_ACTIVITESAIDE FROM F.ACTIVITESAIDE,W.CODAID ELSE ENR_ACTIVITESAIDE=""
    W.ACT = "FAUX"
    ACT = 0
    LOOP
	ACT=ACT+1
    UNTIL ENR_ACTIVITESAIDE<1,ACT> = "" DO
        READ ENR_ACTIVITES FROM F.ACTIVITES,ENR_ACTIVITESAIDE<1,ACT> ELSE ENR_ACTIVITES = ""
	  IF ENR_ACTIVITES<12> = W_TYPEACTIVITE THEN
		IF ENR_ACTIVITESAIDE<2,ACT> <= DatFinPer THEN
			IF ENR_ACTIVITESAIDE<3,ACT> => DatDebPer THEN
				W.ACT = "VRAI"
			END ELSE
				IF ENR_ACTIVITESAIDE<3,ACT> = "" THEN
					W.ACT = "VRAI"
				END
			END
		END
	  END
    REPEAT

    IF W.ACT = "FAUX" THEN
	DELETE F.COMPLFACT,CLE
	GOTO 10
    END

***************
* FIN DE TEST *
***************

    * CALCUL TOTAL DES LIGNES QUI COMPOSENT LE COMPLEMENT DE FACTURATION 
    W_TOTALFACTURE=0
    D=1
    LOOP
    UNTIL ENR_COMPLFACT<1,D>="" DO
     IF ENR_COMPLFACT<9,D> = "" OR ENR_COMPLFACT<9,D> <= ENR_PERIODESPAIE<1> THEN 
      IF ENR_COMPLFACT<4,D> # "" AND (ENR_COMPLFACT<7,D> = 0 OR ENR_COMPLFACT<7,D> = "" OR (ENR_COMPLFACT<7,D> = 1 AND ENR_COMPLFACT<8,D> < ENR_PERIODESPAIE<1>) OR (ENR_COMPLFACT<7,D> = 2 AND ENR_COMPLFACT<8,D> < ENR_PERIODESPAIE<1>)) THEN 
	   W_TOTALFACTURE=W_TOTALFACTURE+ENR_COMPLFACT<4,D>
      END
     END
     D=D+1
    REPEAT

  IF W_TOTALFACTURE > 0 OR (W_TOTALFACTURE <= 0 AND W_TraitementAvoirs = 1) THEN

       IF CLE[9,1]="M" THEN
        READ ENR_ELTSPARTEMP FROM F.ELTSPARTEMP,CLE[1,5] ELSE ENR_ELTSPARTEMP=""
        CODBAREMEPARTEMP=EXTRACT(ENR_ELTSPARTEMP,13)
        READ ENR_BAREMEPARTEMP FROM F.BAREMEPARTEMP,CODBAREMEPARTEMP ELSE ENR_BAREMEPARTEMP=""
        BASECALCUL=EXTRACT(ENR_BAREMEPARTEMP,2)
       END

     * ECRITURE FACTURAIDE
     J=1
     I=1
     ENR_FACTURAIDE=""
	* Michael, le 05/12 : 
     W_COUNT = DCOUNT(ENR_COMPLFACT<1>, CHAR(253))
     LOOP 
     * Michael, le 05/12 : 
     *UNTIL ENR_COMPLFACT<1,J>="" DO
	UNTIL J>W_COUNT DO
	* Michael, le 05/12/07 :
	*IF ENR_COMPLFACT<9,D> = "" OR ENR_COMPLFACT<9,D> <= ENR_PERIODESPAIE<1> THEN 
	IF ENR_COMPLFACT<9,J> = "" OR ENR_COMPLFACT<9,J> <= ENR_PERIODESPAIE<1> THEN 

       IF (ENR_COMPLFACT<7,J> = 0 OR ENR_COMPLFACT<7,J> = "" OR (ENR_COMPLFACT<7,J> = 1 AND ENR_COMPLFACT<8,J> < ENR_PERIODESPAIE<1>) OR (ENR_COMPLFACT<7,J> = 2 AND ENR_COMPLFACT<8,J> < ENR_PERIODESPAIE<1>)) THEN    		

           ENR_FACTURAIDE<1,I>=ENR_COMPLFACT<9,J>
           ENR_FACTURAIDE<2,I>=ENR_COMPLFACT<1,J>
           ENR_FACTURAIDE<3,I>=ENR_COMPLFACT<2,J>
* Michael, le 05/12/07 : Ne pas intervenir directement dans COMPLFACT car
* complfact risque d'etre ecrit ulterieurement, et si avoir alors 
* le complafct en question sera conserv avec la modif => le montant sera alors RE multipli par 10, ...
*          * PASSAGE A 3 DEC. SI MANDATAIRE ET BAREME EN FONCTION RUB. SAISIE
*           IF CLE[9,1]="M" THEN
*            IF BASECALCUL=4 THEN
*             IF ENR_COMPLFACT<3,J> <> "" THEN ENR_COMPLFACT<3,J>=ENR_COMPLFACT<3,J>*10
*             ENR_FACTURAIDE<13>="3"
*            END
*           END

	    ENR_FACTURAIDE<4,I>=ENR_COMPLFACT<3,J>

          * PASSAGE A 3 DEC. SI MANDATAIRE ET BAREME EN FONCTION RUB. SAISIE
           IF CLE[9,1]="M" THEN
            IF BASECALCUL=4 THEN
             IF ENR_FACTURAIDE<4,I> <> "" THEN ENR_FACTURAIDE<4,I>=ENR_FACTURAIDE<4,I>*10
             ENR_FACTURAIDE<13>="3"
            END
           END

            
            ENR_FACTURAIDE<5,I>=ENR_COMPLFACT<4,J>
            ENR_FACTURAIDE<6,I>=ENR_COMPLFACT<5,J>
            ENR_FACTURAIDE<7,I>=ENR_COMPLFACT<6,J>
            IF ENR_COMPLFACT<5,J>="" THEN
             ENR_FACTURAIDE<14,I>="1"
            END ELSE
             ENR_FACTURAIDE<14,I>="0"
            END
	    I=I+1
	    ENR_FACTURAIDE<15,I>=""
	
	   IF ENR_COMPLFACT<7,J> = 1 THEN
	    IF W_TOTALFACTURE <= 0  THEN
		
		* traitement des avoirs : on est cens laisser le COMPLFACT dans l'tat :
		* Or faire voluer la priode de la ligne avec report revient  
		* supprimer la ligne portant la priode prcdente...
		* => cration d'une ligne sans report gale  la ligne qui va voluer...
		
		ENR_COMPLFACT<1,-1> = ENR_COMPLFACT<1,J>
		ENR_COMPLFACT<2,-1> = ENR_COMPLFACT<2,J>
		ENR_COMPLFACT<3,-1> = ENR_COMPLFACT<3,J>
		ENR_COMPLFACT<4,-1> = ENR_COMPLFACT<4,J>
		ENR_COMPLFACT<5,-1> = ENR_COMPLFACT<5,J>
		ENR_COMPLFACT<6,-1> = ENR_COMPLFACT<6,J>
		ENR_COMPLFACT<7,-1> = ""
		ENR_COMPLFACT<8,-1> = ""
		ENR_COMPLFACT<9,-1> = ENR_COMPLFACT<9,J>
	    END

	    ENR_COMPLFACT<8,J> = ENR_PERIODESPAIE<1>
	    IF ENR_PERIODESPAIE<1>[5,2]>="12" THEN
		    ENR_COMPLFACT<9,J> = ENR_PERIODESPAIE<1>[1,4]+1:"01"
	    END ELSE
		    ENR_COMPLFACT<9,J> = ENR_PERIODESPAIE<1>+1
	    END
	    ENR_COMPLFACT<2,J> = ""
	    ENR_COMPLFACT<3,J> = ""
	    ENR_COMPLFACT<4,J> = 0 
	    J=J+1

	   END ELSE
	     IF ENR_COMPLFACT<7,J>= 2 THEN

		IF W_TOTALFACTURE <= 0 THEN
		    *Idem ci-dessus...
		    ENR_COMPLFACT<1,-1> = ENR_COMPLFACT<1,J>
		    ENR_COMPLFACT<2,-1> = ENR_COMPLFACT<2,J>
		    ENR_COMPLFACT<3,-1> = ENR_COMPLFACT<3,J>
		    ENR_COMPLFACT<4,-1> = ENR_COMPLFACT<4,J>
		    ENR_COMPLFACT<5,-1> = ENR_COMPLFACT<5,J>
		    ENR_COMPLFACT<6,-1> = ENR_COMPLFACT<6,J>
		    ENR_COMPLFACT<7,-1> = ""
		    ENR_COMPLFACT<8,-1> = ""
		    ENR_COMPLFACT<9,-1> = ENR_COMPLFACT<9,J>

		END

		ENR_COMPLFACT<8,J> = ENR_PERIODESPAIE<1>
	    	ENR_COMPLFACT<2,J> = ""
	    	ENR_COMPLFACT<3,J> = ""
	        IF ENR_PERIODESPAIE<1>[5,2]>="12" THEN
		    ENR_COMPLFACT<9,J> = ENR_PERIODESPAIE<1>[1,4]+1:"01"
	        END ELSE
		    ENR_COMPLFACT<9,J> = ENR_PERIODESPAIE<1>+1
	        END
	    	J=J+1

	     END ELSE
		
		* Pas de report : on efface si W_TOTALFACTURE > 0 
		* Pas de J = J + 1 car W_Count = W_Count - 1...

		IF W_TOTALFACTURE > 0 THEN
	    	    ENR_COMPLFACT = DELETE(ENR_COMPLFACT,1,J)
    	    	    ENR_COMPLFACT = DELETE(ENR_COMPLFACT,2,J)
    	    	    ENR_COMPLFACT = DELETE(ENR_COMPLFACT,3,J)
    	    	    ENR_COMPLFACT = DELETE(ENR_COMPLFACT,4,J)
	    	    ENR_COMPLFACT = DELETE(ENR_COMPLFACT,5,J)
	          ENR_COMPLFACT = DELETE(ENR_COMPLFACT,6,J)
	    	    ENR_COMPLFACT = DELETE(ENR_COMPLFACT,7,J)
	    	    ENR_COMPLFACT = DELETE(ENR_COMPLFACT,8,J)
		    ENR_COMPLFACT = DELETE(ENR_COMPLFACT,9,J)
		    * Michael, le 05/12/07 :
		    W_COUNT = W_COUNT - 1
		END ELSE
		    J=J+1
		END
	     END
	  END
     END ELSE
	J = J + 1
     END   
       END ELSE
	   J = J + 1
       END
     REPEAT


      IF ENR_FACTURAIDE#"" THEN
        ENR_FACTURAIDE<8>=W_TAUXTVA
        ENR_FACTURAIDE<9>=INT((W_TOTALFACTURE*W_TAUXTVA/10000)+1/2)
        ENR_FACTURAIDE<11>="0"
        IF CLE[9,1]="P" THEN
         ENR_NUMEROFACT<1>=ENR_NUMEROFACT<1>+1 "R%10"
         WRITE ENR_FACTURAIDE ON F.FACTURAIDE,CLE:ENR_PERIODESPAIE<1>:ENR_NUMEROFACT<1>:"0"
        END
        IF CLE[9,1]="M" THEN
         ENR_NUMEROFACT<3>=ENR_NUMEROFACT<3>+1 "R%10"
         WRITE ENR_FACTURAIDE ON F.FACTURAIDE,CLE:ENR_PERIODESPAIE<1>:ENR_NUMEROFACT<3>:"0"
        END
        IF CLE[9,1]="I" THEN
         ENR_NUMEROFACT<5>=ENR_NUMEROFACT<5>+1 "R%10"
         WRITE ENR_FACTURAIDE ON F.FACTURAIDE,CLE:ENR_PERIODESPAIE<1>:ENR_NUMEROFACT<5>:"0"
        END
      END
     
       * EFFACE LE COMPLEMENT DE FACTURATION TRAITE
       * SI COMPL FACT UNIQUEMENT > 0

       IF W_TOTALFACTURE > 0 THEN
	    IF ENR_COMPLFACT = "" THEN
            DELETE F.COMPLFACT,CLE
	    END ELSE
	      WRITE ENR_COMPLFACT ON F.COMPLFACT, CLE
	    END
       END ELSE
	    WRITE ENR_COMPLFACT ON F.COMPLFACT, CLE
       END

  END


REPEAT

WRITE ENR_NUMEROFACT ON F.NUMEROFACT,W_CODEENTITE
