********************************************
* TRAITEMENT MAGNETIQUE CRAM VERSION PICK  *
* SUITE AU PLANTAGE MEMOIRE                *
* JEROME                      JUILLET 2000 *
* RAJOUT REJET                AOUT    2000 *
* MODIF INIT                  OCTOBRE 2000 *
* AJOUT SUB 500               JUILLET 2006 *
********************************************

************
* FICHIERS *
************
EXECUTE "SET-THOUS ."
EXECUTE "SET-DEC ,"
EXECUTE "DATE.FORMAT"
OPEN "","TEMPO" TO F.TEMPO ELSE STOP
OPEN "","FACTURATION" TO F.FACTURATION ELSE STOP
OPEN "","ORGPRISECHARGE" TO F.ORGPRISECHARGE ELSE STOP
OPEN "","ACCORD" TO F.ACCORD ELSE STOP
OPEN "","CIVILAIDE" TO F.CIVILAIDE ELSE STOP
OPEN "","FACTURORG" TO F.FACTURORG ELSE STOP
OPEN "","REJETSORGCHG" TO F.REJETSORGCHG ELSE STOP
OPEN "","SECTEUR" TO F.SECTEUR ELSE STOP
OPEN "","ACTIVITES" TO F.ACTIVITES ELSE STOP
OPEN "","REGLTORG" TO F.REGLTORG ELSE STOP
******************************
* Recuperation des arguments *
******************************
PROCREAD ARGUMENTS ELSE PRINT "PROCREAD"

W_Periode=FIELD(ARGUMENTS,"|",2)
Txt_CodAssoc=FIELD(ARGUMENTS,"|",3)
W_Requete=FIELD(ARGUMENTS,"|",4)
W_Org=FIELD(ARGUMENTS,"|",5)
W_CodOrga = FIELD(ARGUMENTS,"|",6)

****************************
* Procdures               *
****************************
* 100  --->   REQUETE
* 200  --->   PARCOURS FACTURE
* 250  --->   PARCOURS REJET
* 300  --->   CREATION LIGNES FACTURES
* 350  --->   CREATION LIGNES REJET
* 400  --->   SUPPRESSION D'ESPACES NON REDONDANTS

****************************
* Initialisation           *
****************************
	ENR_ORGPRISECHARGE=""
	
	W_PeriodeFact=0
	ENR_FACTURATION=""
	ENR_REGLTORG=""
	ENR_ORGPRISECHARGE=""
	ENR_REGLTORGTemp=""
	W_Tampon=""
	W_RequeteFacture=""
	W_RequeteRejet=""
	W_IndicTrait=0
	
	W_HeuresNormales=0
	W_HeuresFeriees=0
	W_NBHeures=0
	ENR_TEMPO=""
	iAbat=0
	W_ID500=0
	
	READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,W_Org ELSE ENR_ORGPRISECHARGE=""
	i=1
	LOOP
		UNTIL ENR_ORGPRISECHARGE<25,i> <= ICONV("01/":W_Periode[5,2]:"/":W_Periode[1,4], "D4/") OR ENR_ORGPRISECHARGE<25,i> = ""
		i=i+1
	REPEAT
	IF ENR_ORGPRISECHARGE<25,i> = "" THEN
		i = i - 1
	END
	W_IDEffet = i
	
	GOSUB 100
STOP

*********************
* EXECUTION REQUETE *
*********************
100

	IF W_Org=1 THEN
	  EXECUTE 'SELECT REGLTORG AVEC CodeOrg = "':W_CodOrga:'" AND AVEC PeriodeTrait = "':W_Periode:'" PAR @ID'
	  W_Fin100 = ""
	  LOOP
		READNEXT W_Cle ELSE W_Fin100 = "V"
	  WHILE W_Fin100 # "V"  
		DELETE F.REGLTORG,W_Cle
	  REPEAT
	  
	END



	EXECUTE W_Requete
	EXECUTE 'SAUVE-LISTE W_RequeteFacture'
	EXECUTE "LISTE W_RequeteFacture" RETURNING MSGCODE
 
	IF MSGCODE<1>#209 THEN
		W_IndicTrait=W_IndicTrait+1
		SELECT F.FACTURORG TO W_RequeteFacture
		GOSUB 200
    END

	
	EXECUTE 'SELECT REJETSORGCHG AVEC CodAssoRejet = "':Txt_CodAssoc:'" AND AVEC CodOrgaRejet = "':W_CodOrga:'" AND AVEC PeriodeTraitRejets = "':W_Periode:'" OR = "" PAR NomPrenomAideRejet PAR @ID'
	EXECUTE 'SAUVE-LISTE W_RequeteRejet'
	EXECUTE "LISTE W_RequeteRejet" RETURNING MSGCODE
 
	IF MSGCODE<1>#209 THEN
		W_IndicTrait=W_IndicTrait+1
		SELECT F.REJETSORGCHG TO W_RequeteRejet
		GOSUB 250
    END


	IF W_IndicTrait<>0  THEN

           IF W_Org=1 THEN
		WRITE ENR_FACTURATION ON F.FACTURATION,"CRAM":W_Periode:Txt_CodAssoc:W_CodOrga
           END ELSE
		WRITE ENR_FACTURATION ON F.FACTURATION,"MSA":W_Periode:Txt_CodAssoc:W_CodOrga
           END
		ENR_TEMPO<1>=W_HeuresNormales
		ENR_TEMPO<2>=W_HeuresFeriees
		ENR_TEMPO<3>=i
		WRITE ENR_TEMPO ON F.TEMPO,"CRAM"
	END

RETURN

********************
* PARCOURS FACTURE *
********************
200
	i=0
	W_FINI="FAUX"

	LOOP
		READNEXT W_Cle FROM W_RequeteFacture ELSE W_FINI="VRAI"
	WHILE W_FINI="FAUX" DO
		IF W_CodOrga="" THEN
			W_CodOrga=W_Cle[1,3]
		END
		GOSUB 300
	REPEAT

RETURN


******************
* PARCOURS REJET *
******************
250
	IF i="" THEN
		i=0
	END

	W_FINIREJ="FAUX"

	LOOP
		READNEXT W_Cle FROM W_RequeteRejet ELSE W_FINIREJ="VRAI"
	WHILE W_FINIREJ="FAUX" DO
		GOSUB 350
		ENR_REJETSORGCHG<5> = W_Periode
		WRITE ENR_REJETSORGCHG ON F.REJETSORGCHG,W_Cle
	REPEAT

RETURN


********************
* CREATION FICHIER *
********************
300
    
	READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,W_Cle[1,3] ELSE STOP
        READ ENR_CIVILAIDE FROM F.CIVILAIDE,W_Cle[5,5] ELSE STOP
        READ ENR_SECTEUR FROM F.SECTEUR,ENR_CIVILAIDE<40>[1,3] ELSE STOP
        IF W_Org=1 THEN
           * CRAM
           IF ENR_SECTEUR<20> # "" THEN
 	      W_Tampon = ENR_SECTEUR<20>
           END ELSE
	      W_Tampon = ENR_ORGPRISECHARGE<42>
           END 
        END ELSE
           * MSA
	   W_Tampon = ENR_ORGPRISECHARGE<42>
        END

*	GOSUB 400 
	W_Ligne = W_Tampon "L#15"

        READ ENR_ACCORD FROM F.ACCORD,W_Cle[5,8] ELSE STOP
		ENR_ACCORD<2>=CONVERT(" ","",ENR_ACCORD<2>)
        W_Tampon = ENR_ACCORD<2>
	GOSUB 400
        IF W_Org=1 THEN
           * CRAM
           W_Tampon = W_Tampon "L%10"
           W_Ligne = W_Ligne:W_Tampon

           W_Ligne = W_Ligne:SPACE(3)
        END ELSE
           * MSA
           W_Tampon = W_Tampon "L#13"
           W_Ligne = W_Ligne:W_Tampon
        END

        W_Ligne = W_Ligne:W_Cle[15,4] "L#4"
        W_Ligne = W_Ligne:"00000"

        IF ENR_CIVILAIDE<4> # "" THEN
            W_Tampon = ENR_CIVILAIDE<4>:" ":ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
        END ELSE
            W_Tampon = ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
        END
        W_Ligne = W_Ligne:W_Tampon "L#40"
        W_Ligne = W_Ligne:"0000000"
        W_Ligne = W_Ligne:OCONV(ENR_ACCORD<5>, "D4/")[9,2]:OCONV(ENR_ACCORD<5>, "D4/")[4,2]
        W_Ligne = W_Ligne:OCONV(ENR_ACCORD<6>, "D4/")[9,2]:OCONV(ENR_ACCORD<6>, "D4/")[4,2]
        W_Ligne = W_Ligne:"0000000000"
    
        READ ENR_FACTURORG FROM F.FACTURORG,W_Cle ELSE STOP
		
		W_PeriodeFact = W_Cle[13,6]
		
		FOR k=1 TO 8
			ENR_REGLTORG<k>=ENR_FACTURORG<k>
		NEXT k
		
		ENR_REGLTORG<9> = W_Cle[5,5]
		
		IF W_Org=1 THEN
			ENR_ACCORD<2>=CONVERT(" ","",ENR_ACCORD<2>)
			W_TamponR = ENR_ACCORD<2> "L%10"
			k=1
			LOOP
				W_Ordre = k "R%3"
				READ ENR_REGLTORGT FROM F.REGLTORG,Txt_CodAssoc:W_Cle[1,3]:W_Ordre:W_Periode:W_PeriodeFact:W_TamponR ELSE ENR_REGLTORGT = ""
				WHILE ENR_REGLTORGT # ""
				k=k+1
			REPEAT
			
			W_Man="0"
			WRITE ENR_REGLTORG ON F.REGLTORG,Txt_CodAssoc:W_Cle[1,3]:W_Ordre:W_Periode:W_PeriodeFact:W_TamponR 
		END

        W_NbVal = DCOUNT(ENR_FACTURORG<1>,CHAR(253))
        W_Heures = 0
        FOR j = 1 TO W_NbVal
            W_Heures = W_Heures + ENR_FACTURORG<1, j>
        NEXT j
        W_HeuresNormales = W_HeuresNormales + W_Heures
        W_Ligne = W_Ligne:W_Heures"R%5"
    
        IF W_Heures = "" OR W_Heures = 0 THEN
            W_Ligne = W_Ligne:"0"
        END ELSE
            W_Ligne = W_Ligne:"1"
        END

        IF W_Org=1 THEN
           * CRAM        
           W_Ligne = W_Ligne:"                "
        END ELSE
           * MSA
           READ ENR_ACTIVITES FROM F.ACTIVITES,ENR_ORGPRISECHARGE<47,1> ELSE ENR_ACTIVITES=""
           IF ENR_ACTIVITES<12>="P" THEN
              W_Ligne = W_Ligne:ENR_FACTURORG<3,1> "R%16"
           END ELSE
              IF ENR_ACTIVITES<12>="M" THEN
                 IF ENR_FACTURORG<3,1> # 0 THEN
                    W_Ligne = W_Ligne:ENR_FACTURORG<3,1> "R%16"
                 END ELSE
                    W_Ligne = W_Ligne:"0000000000000000"
                 END
              END
           END
        END

        W_Heures = ENR_FACTURORG<5>
        W_Ligne = W_Ligne:W_Heures "R%5"
        W_HeuresFeriees = W_HeuresFeriees + W_Heures
        
        IF W_Heures = "" OR W_Heures = 0 THEN                                                            
            W_Ligne = W_Ligne:"0"
        END ELSE
            W_Ligne = W_Ligne:"1"
        END
    
        W_Ligne = W_Ligne:"                    "
	i=i+1
        ENR_FACTURATION<i> = W_Ligne

RETURN


********************
* CREATION FICHIER *
********************
350
    
	READ ENR_ORGPRISECHARGE FROM F.ORGPRISECHARGE,W_Cle[15,3] ELSE STOP
	READ ENR_REJETSORGCHG FROM F.REJETSORGCHG,W_Cle ELSE STOP
	W_Tampon = ENR_ORGPRISECHARGE<42>
*	GOSUB 400 
	W_Ligne = W_Tampon "L#15"

        READ ENR_ACCORD FROM F.ACCORD,W_Cle[1,5]:ENR_REJETSORGCHG<4> ELSE STOP
		ENR_ACCORD<2>=CONVERT(" ","",ENR_ACCORD<2>)
        W_Tampon = ENR_ACCORD<2>
        GOSUB 400
        IF W_Org=1 THEN
           * CRAM
           W_Tampon = W_Tampon "L%10"
           W_Ligne = W_Ligne:W_Tampon

           W_Ligne = W_Ligne:SPACE(3)
        END ELSE
           * MSA
           W_Tampon = W_Tampon "L#13"
           W_Ligne = W_Ligne:W_Tampon
        END

        W_Ligne = W_Ligne:W_Cle[8,4] "L#4"
        W_Ligne = W_Ligne:"00000"
        READ ENR_CIVILAIDE FROM F.CIVILAIDE,W_Cle[1, 5] ELSE STOP
        IF ENR_CIVILAIDE<4> # "" THEN
            W_Tampon = ENR_CIVILAIDE<4>:" ":ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
        END ELSE
            W_Tampon = ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
        END
        W_Ligne = W_Ligne:W_Tampon "L#40"
        W_Ligne = W_Ligne:"0000000"

        W_Ligne = W_Ligne:OCONV(ENR_ACCORD<5>, "D4/")[9,2]:OCONV(ENR_ACCORD<5>, "D4/")[4,2]
        W_Ligne = W_Ligne:OCONV(ENR_ACCORD<6>, "D4/")[9,2]:OCONV(ENR_ACCORD<6>, "D4/")[4,2]

        W_Ligne = W_Ligne:"0000000000"

        W_Heures = ENR_REJETSORGCHG<1>

        W_HeuresNormales = W_HeuresNormales + W_Heures
        W_Ligne = W_Ligne:W_Heures"R%5"
    
        IF W_Heures = "" OR W_Heures = 0 THEN
            W_Ligne = W_Ligne:"0"
        END ELSE
            W_Ligne = W_Ligne:"1"
        END
        
        IF W_Org=1 THEN
           * CRAM        
           W_Ligne = W_Ligne:"                "
        END ELSE
           * MSA
           READ ENR_ACTIVITES FROM F.ACTIVITES,ENR_ORGPRISECHARGE<47,1> ELSE ENR_ACTIVITES=""
           IF ENR_ACTIVITES<12>="P" THEN
              W_Ligne = W_Ligne:ENR_REJETSORGCHG<3> "R%16"
           END ELSE
              IF ENR_ACTIVITES<12>="M" THEN
                 IF ENR_REJETSORGCHG<3> # 0 THEN
                    W_Ligne = W_Ligne:ENR_REJETSORGCHG<3> "R%16"
                 END ELSE
                    W_Ligne = W_Ligne:"0000000000000000"
                 END
              END
           END
        END

        W_Heures = ENR_REJETSORGCHG<2>
        W_Ligne = W_Ligne:W_Heures "R%5"
        W_HeuresFeriees = W_HeuresFeriees + W_Heures
 	  W_PartBenef = ENR_REJETSORGCHG<3>
        IF W_Org=1 THEN
			GOSUB 500
        END
        IF W_Heures = "" OR W_Heures = 0 THEN                                                            
            W_Ligne = W_Ligne:"0"
        END ELSE
            W_Ligne = W_Ligne:"1"
        END
    
        W_Ligne = W_Ligne:"                    "
	i=i+1
        ENR_FACTURATION<i> = W_Ligne


RETURN


************************
* SUPPRESSION D'ESPACE *
************************
400
	k=1
	W_Long=LEN(W_Tampon)

	LOOP
	WHILE k < W_Long
		IF W_Tampon[k,1]=" " THEN
			W_Tampon=W_Tampon[1,k-1]:W_Tampon[k+1,W_Long-k]
			W_Long=W_Long-1	
		END ELSE
			k=k+1
		END

	REPEAT

RETURN

**********************************************
*CREATION DU FICHIER REGLTORG POUR LES REJETS*
**********************************************
500
	W_PeriodeFact = W_Cle[6,6]

	i500=1
	LOOP
		UNTIL ENR_ORGPRISECHARGE<25,i500> <= ICONV("01/":W_PeriodeFact[5,2]:"/":W_PeriodeFact[1,4], "D4/") OR ENR_ORGPRISECHARGE<25,i500> = ""
		i500=i500+1
	REPEAT
	IF ENR_ORGPRISECHARGE<25,i500> = "" THEN i500 = i500 - 1
	W_ID500 = i500
	
	ENR_REGLTORG = ""
	
	ENR_REGLTORG<1> = ENR_REJETSORGCHG<1>
	ENR_REGLTORG<2,1> = W_PartBenef
	ENR_REGLTORG<3,1> = ENR_ORGPRISECHARGE<26,W_ID500> - ENR_REGLTORG<2,1>
	
	W_NbHeures = ENR_REGLTORG<1,1>
	IF ENR_REJETSORGCHG<2,1> # "" THEN
	  W_NbHeures=W_NbHeures+ENR_REJETSORGCHG<2,1>
	  ENR_REGLTORG<5> = ENR_REJETSORGCHG<2,1>
	  ENR_REGLTORG<6> = W_PartBenef
	  ENR_REGLTORG<7> = ENR_ORGPRISECHARGE<27,W_ID500> - W_PartBenef
	  ENR_REGLTORG<8> = INT(ENR_REGLTORG<5>*ENR_REGLTORG<7>/100+1/2)
	  ENR_REGLTORG<9> = W_Cle[1,5]
	END
	* parcours des tranches d'abattement
	W_Sup=0
	iAbat=1
	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_REGLTORG<1,jAbat>=W_Sup-ENR_ORGPRISECHARGE<29,iAbat>
		W_Reste=ENR_REGLTORG<1,jAbat>
		
		ENR_REGLTORG<2,jAbat>=INT(ENR_REGLTORG<2,1>-ENR_REGLTORG<2,1>*ENR_ORGPRISECHARGE<31,iAbat>/10000+1/2)
		ENR_REGLTORG<3,jAbat>=ENR_REGLTORG<3,1>+ENR_REGLTORG<2,1>-ENR_REGLTORG<2,jAbat>
		ENR_REGLTORG<4,jAbat>=INT(ENR_REGLTORG<1,jAbat>*ENR_REGLTORG<3,jAbat>/100+1/2)


*		kAbat=1
*		LOOP
*		  ENR_REGLTORG<1,kAbat>=ENR_REGLTORG<1,kAbat>-W_Reste
*		  ENR_REGLTORG<4,kAbat>=INT(ENR_REGLTORG<1,kAbat>*ENR_REGLTORG<3,kAbat>/100+1/2)
*		WHILE kAbat < jAbat DO
*		   W_Reste=ABS(ENR_REGLTORG<1,kAbat>)
*		   ENR_REGLTORG<1,kAbat>=0
*		   kAbat=kAbat+1
*		REPEAT
		ENR_REGLTORG<1,1>=ENR_REGLTORG<1,1>-W_Reste
		ENR_REGLTORG<4,1>=INT(ENR_REGLTORG<1,1>*ENR_REGLTORG<3,1>/100+1/2)

		
*		lAbat=2
*		W_CalculPartOrg=INT(ENR_REGLTORG<1,jAbat> * ENR_REGLTORG<3,1> /100 + 1/2)
		iAbat=iAbat+1
	 END ELSE
		iAbat=999
	 END
	REPEAT

	*Enregistrement de REGLTORG
	ENR_ACCORD<2>=CONVERT(" ","",ENR_ACCORD<2>)
	W_Tampon = ENR_ACCORD<2> "L%10"
	k=1
	LOOP
		W_Ordre = k "R%3"
		READ ENR_REGLTORGTemp FROM F.REGLTORG,Txt_CodAssoc:W_CodOrga:W_Ordre:W_Periode:W_PeriodeFact:W_Tampon ELSE ENR_REGLTORGTemp = ""
		WHILE ENR_REGLTORGTemp # ""
		k=k+1
	REPEAT
	
	WRITE ENR_REGLTORG ON F.REGLTORG,Txt_CodAssoc:W_CodOrga:W_Ordre:W_Periode:W_PeriodeFact:W_Tampon

RETURN
