********************************************
* Rapprochement des factures et rglements *
* Cr par Vanessa Septembre 2009          *
********************************************
*Modifications :                           *
* Guillaume Mai 2010 : Mise  jour de la   *
* Nomenclature du fichier de paiement      *
*										   *
********************************************
********************************************

************
* FICHIERS *
************
EXECUTE 'DATE.FORMAT'
EXECUTE 'SET-DEC ,'
EXECUTE "SET-THOUS ."

OPEN "","REGLTORG" TO F.REGLTORG ELSE STOP
OPEN "","FACTPAIEMENT" TO F.FACTPAIEMENT ELSE STOP
OPEN "","CIVILAIDE" TO F.CIVILAIDE ELSE STOP
OPEN "","TEMPO" TO F.TEMPO ELSE STOP
OPEN "","FUSION" TO F.FUSION ELSE STOP

******************************
* Recuperation des arguments *
******************************
PROCREAD ARGUMENTS ELSE PRINT "PROCREAD"

W_Fichier=FIELD(ARGUMENTS,"|",2)



********************************
* Initialisation des variables *
********************************
ENR_REGLTORG=""
ENR_FACTPAIEMENT=""
ENR_CIVILAIDE=""
ENR_TEMPO=""
ENR_REGLTORGValide=""
W_Cle=""
W_PeriodeTrait=""
W_NRetraite=""
W_Patronyme=""
W_NBRelgt=0
W_Err=0
W_MontFact=0
W_MontReglt=0
W_MontTotReglt=0
W_MontTotFact=0
W_ListeReq=""
W_CleAide = ""
W_CleValide = ""


W_Anomalies=""
iAnom=1
i=0
iReglt=1




*************************
* Droulement programme *
*************************
*100 ===> Lecture du fichier de rglement CRAM et recherche/comparaison des factures correspondantes
*200 ===> Gnration des erreurs
*300 ===> Recherche des demandes de rglement

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

W_Anomalies = ""

* Parcours du fichier de rglement.
GOSUB 100


* Ecriture dans le fichier TEMPO des anomalies dtectes *
WRITE W_Anomalies ON F.TEMPO, "ANOMALIESREGLTANTARES"

	
STOP

*****************************
* Lecture du rglement CRAM *
*****************************

100

	READ ENR_FACTPAIEMENT FROM F.FACTPAIEMENT, W_Fichier ELSE ENR_FACTPAIEMENT=""
	*W_NBLigne=DCOUNT(ENR_FACTPAIEMENT,CHAR(254))


	i=1
	LOOP 
	WHILE INDEX(ENR_FACTPAIEMENT,"<nir-per>",i) <> 0
	
		*IF INDEX(ENR_FACTPAIEMENT<i>,"<bordpai>",1) <> 0 THEN
		*	IF INDEX(ENR_FACTPAIEMENT<i>,"<id-org>",1) <> 0 THEN
		*		W_POrg = INDEX(ENR_FACTPAIEMENT<i>,"<id-org>",1)
		*		W_Org = ENR_FACTPAIEMENT<i>[W_POrg+8,8]
		*	END
		*END ELSE
		
			IF INDEX(ENR_FACTPAIEMENT,"<nir-per>",i) <> 0 THEN
				W_PNirPer = INDEX(ENR_FACTPAIEMENT,"<nir-per>",i)
				W_NirPer = ENR_FACTPAIEMENT[W_PNirPer+9,13]
    		    PRINT "NIR : ":W_NirPer
				W_PMontReglt1 = INDEX(ENR_FACTPAIEMENT,"<mt-op-cram>",i)
				W_MontReglt1 = ENR_FACTPAIEMENT[W_PMontReglt1+12,6]
				PRINT "Montant brut 1 :":W_MontReglt1
				IF W_MontReglt1[1,1] = "<" THEN
					W_MontReglt1 = 0.00
				END ELSE
					FOR a = 2 TO 6
						IF W_MontReglt1[a, 1] = "<" THEN
							W_MontReglt1 = W_MontReglt1[1, a-1]
						END
					NEXT a
				END
				W_PVirgule = INDEX(W_MontReglt1,".",1) 
				IF W_MontReglt1[W_PVirgule+2,1] = "" THEN
					W_MontReglt1 = W_MontReglt1:"0"
				END

				W_MontReglt1 = CONVERT (".","",W_MontReglt1)
				PRINT "Montant 1 : ":W_MontReglt1
				W_PMontReglt2 = INDEX(ENR_FACTPAIEMENT,"<mt-op-rc-a>",i)
				W_MontReglt2 = ENR_FACTPAIEMENT[W_PMontReglt2+12,6]
				PRINT "Montant brut 2 :":W_MontReglt2
				IF W_MontReglt2[1,1] = "<" THEN
					W_MontReglt2 = 0.00
				END ELSE
					FOR a = 2 TO 6
						IF W_MontReglt2[a, 1] = "<" THEN
							W_MontReglt2 = W_MontReglt2[1, a-1]
						END
					NEXT a
				END
				W_PVirgule = INDEX(W_MontReglt2,".",1) 
				IF W_MontReglt2[W_PVirgule+2,1] = "" THEN
					W_MontReglt2 = W_MontReglt2:"0"
				END
				W_MontReglt2 = CONVERT (".","",W_MontReglt2)
				PRINT "Montant 2 : ":W_MontReglt2
                				
				W_PMontReglt3 = INDEX(ENR_FACTPAIEMENT,"<mt-op-rc-i>",i)
				W_MontReglt3 = ENR_FACTPAIEMENT[W_PMontReglt3+12,6]
				PRINT "Montant brut 3 :":W_MontReglt3
				IF W_MontReglt3[1,1] = "<" THEN
					W_MontReglt3 = 0.00
				END ELSE				
					FOR a = 2 TO 6
						IF W_MontReglt3[a, 1] = "<" THEN
							W_MontReglt3 = W_MontReglt3[1, a-1]
						END
					NEXT a
				END
				W_PVirgule = INDEX(W_MontReglt3,".",1) 
				IF W_MontReglt3[W_PVirgule+2,1] = "" THEN
					W_MontReglt3 = W_MontReglt3:"0"
				END
				W_MontReglt3 = CONVERT (".","",W_MontReglt3)
				PRINT "Montant 3 : ":W_MontReglt3
                					
				W_MontTotReglt = W_MontReglt1 + W_MontReglt2 + W_MontReglt3
                PRINT "Montant total : ":W_MontTotReglt

				W_PPeriodeTraitDeb = INDEX(ENR_FACTPAIEMENT,"<dtd-interv>",i)
				W_PeriodeTraitDeb = ENR_FACTPAIEMENT[W_PPeriodeTraitDeb+12,10]
				W_PeriodeTraitDeb = W_PeriodeTraitDeb[7, 4]:W_PeriodeTraitDeb[4, 2]
                
				W_PPeriodeTraitFin = INDEX(ENR_FACTPAIEMENT,"<dtf-interv>",i)
				W_PeriodeTraitFin = ENR_FACTPAIEMENT[W_PPeriodeTraitFin+12,10]
				W_PeriodeTraitFin = W_PeriodeTraitFin[7, 4]:W_PeriodeTraitFin[4, 2]
				
				PRINT "Priode fact : ":W_PeriodeTrait
				
				W_PNomPrenomAide = INDEX(ENR_FACTPAIEMENT,"<nom-corresp>",i)
				W_NomPrenomAide = ENR_FACTPAIEMENT[W_PNomPrenomAide+13,36]
				FOR a = 2 TO 36
					IF W_NomPrenomAide[a, 1] = "<" THEN
						W_NomPrenomAide = W_NomPrenomAide[1, a-1]
					END
				NEXT a
                PRINT "Nom Prenom : ":W_NomPrenomAide

				W_PDateReglt = INDEX(ENR_FACTPAIEMENT,"<dt-pmt>",i)
				W_DateReglt = ENR_FACTPAIEMENT[W_PDateReglt+8,10]
				FOR a = 2 TO 10
					IF W_DateReglt[a, 1] = "<" THEN
						W_DateReglt = W_DateReglt[1, a-1]
					END
				NEXT a
				W_DateReglt = ICONV(W_DateReglt, "D4/")
                PRINT "Nom Prenom : ":W_DateReglt

                W_PNbHCram = INDEX(ENR_FACTPAIEMENT,"<qt-facture>",i)
                W_NbHCram = ENR_FACTPAIEMENT[W_PNbHCram+12,6]
                IF W_NbHCram[1,1] = "<" THEN
                	W_NbHCram=0.00
                END ELSE
                	FOR a = 2 TO 7
                		IF W_NbHCram[a, 1] = "<" THEN
                			W_NbHCram = W_NbHCram[1, a-1]
                		END
                	NEXT a
                END
                W_PVirgule = INDEX(W_NbHCram,".",1) 
                IF W_NbHCram[W_PVirgule+2,1] = "" THEN
                	W_NbHCram = W_NbHCram:"0"
                END
                W_NbHCram = CONVERT (".","",W_NbHCram)


				ENR_REGLTORG = ""
				W_Err=""
				iReglt = 0
				iReglt =iReglt + 1
				
				ENR_CIVILAIDE=""
				ENR_CIVILAIDE<2> = W_NomPrenomAide
				W_Trouve="FAUX"
				
				* Recherche des demandes de rglement
                GOSUB 300				
				
                
                *DEBUG
				PRINT " "
                GOSUB 200
				W_CleAide = ""
				W_CleValide = ""
		
			END
		*END
	i = i + 1
	REPEAT
	
	WRITE ENR_FACTPAIEMENT ON F.FACTPAIEMENT, W_Fichier:"t"
	DELETE F.FACTPAIEMENT, W_Fichier
RETURN

**************************
* Gnration des erreurs *
**************************
*Codes Erreurs :
*1 = Rglement non trouv en facturation
*2 = Rglement diffrent de la facturation
*

200

    
    
    BEGIN CASE 
    	CASE W_Err = 1
    		W_Anomalies<iAnom,1> = W_CleAide
    		W_Anomalies<iAnom,2> = ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>
    		W_Anomalies<iAnom,3> = W_NirPer
    		W_Anomalies<iAnom,4> = W_PeriodeTraitDeb
    		W_Anomalies<iAnom,5> = W_PeriodeTraitFin
    		W_Anomalies<iAnom,6> = W_NbHCram
    		W_Anomalies<iAnom,7> = W_MontReglt
    		W_Anomalies<iAnom,8> = W_MontTotReglt
    		iAnom = iAnom + 1
    		
    	CASE W_Err = 2
*            ENR_RELGTORGValide<11> = W_MontTotReglt
*    		ENR_RELGTORGValide<12> = W_NbHCram
*        	WRITE ENR_REGLTORGValide ON F.REGLTORG, W_CleValide
    END CASE
    	
    W_Err = 0
RETURN



******************************************
* Recherche des demandes de rglement    *
* et cumul des montants                  *
******************************************

300
    W_Trouve = "FAUX"
    W_CumulHNorm = 0
    W_CumulHDimJF = 0
    W_ListeRegltOrg = ""
    W_CleAide = ""
    W_MontFact = 0
    
    * Modif Guillaume DA10149 ver 02 26/07/2010
    W_MontRegltDispo = W_MontTotReglt
    W_HresRegltDispo = W_NbHCram
    
    * Variable permettant de retenir la cl du REGLTORG contenant les donnes du remboursement de la CRAM.
    W_CleRegltFinal = ""
    
*     IF W_NirPer = "2200710387250" THEN
*         DEBUG
*     END
    
    W_RequeteRegltOrg = 'SELECT REGLTORG AVEC 10 = "" AND AVEC @ID = "[':W_NirPer:'" AND AVEC PeriodeFact <= "':W_PeriodeTraitFin:'" AND >= "':W_PeriodeTraitDeb:'" PAR PeriodeTrait PAR PeriodeFact'

*        DEBUG
    EXECUTE W_RequeteRegltOrg
	EXECUTE 'SAUVE-LISTE W_ListeRegltOrg'
	EXECUTE 'LISTE W_ListeRegltOrg' RETURNING MSGCODE

    IF MSGCODE<1> # "209" THEN
        SELECT F.REGLTORG TO W_ListeRegltOrg
        W_Trouve = "VRAI"
        W_FinRegltOrg = "F"
		LOOP
			READNEXT W_CleRegltOrg FROM W_ListeRegltOrg ELSE W_FinRegltOrg = "V"
		WHILE W_FinRegltOrg = "F"
            IF W_CleRegltFinal = "" THEN W_CleRegltFinal = W_CleRegltOrg
			READ ENR_REGLTORG FROM F.REGLTORG, W_CleRegltOrg THEN
                IF W_CleAide = "" THEN
                    W_CleAide = ENR_REGLTORG<9>

            		READ ENR_CIVILAIDE FROM F.CIVILAIDE, ENR_REGLTORG<9> THEN
            			*Test de concordance du numro d'ordre avec l'aid
            			IF W_NirPer <> CONVERT(" ","",ENR_CIVILAIDE<18>) THEN
            				W_Err = 1
            			END ELSE
            				W_Err = 0
            			END
            		END ELSE
            			ENR_CIVILAIDE=""
            			ENR_CIVILAIDE<2>=W_NomPrenomAide
            		END
        		END
        		
        		IF W_MontRegltDispo <> 0 THEN
                    * il reste de quoi rgler toute ou partie de la facture dans la variable RegltDispo
                    
            		IF TRIM(ENR_REGLTORG<4>) = "" THEN ENR_REGLTORG<4> = 0
            		IF TRIM(ENR_REGLTORG<8>) = "" THEN ENR_REGLTORG<8> = 0
            		W_MontFact = SUM(ENR_REGLTORG<4>) + SUM(ENR_REGLTORG<8>)
            		IF TRIM(ENR_REGLTORG<1>) = "" THEN ENR_REGLTORG<1> = 0
            		IF TRIM(ENR_REGLTORG<5>) = "" THEN ENR_REGLTORG<5> = 0
            		W_HresFact = SUM(ENR_REGLTORG<1>) + SUM(ENR_REGLTORG<5>)
                    
					* christophe 11/07/2011 pour indiquer tous les carts de facture
					IF W_MontRegltDispo = W_MontFact THEN
                    *IF W_MontRegltDispo >= W_MontFact THEN
                        * Il y a suffisament pour rgler toute la facture
                        ENR_REGLTORG<10> = W_DateReglt
                        ENR_REGLTORG<11> = W_MontFact
                        ENR_REGLTORG<12> = W_HresFact
                        ENR_REGLTORG<13> = W_PeriodeTraitDeb
                        ENR_REGLTORG<14> = W_PeriodeTraitFin
                        
                        * On retire le rglement de la facture du montant restant
                        W_MontRegltDispo = W_MontRegltDispo - W_MontFact
                        IF W_HresRegltDispo <> 0 THEN
                            W_HresRegltDispo = W_HresRegltDispo - W_HresFact
                        END
                    END ELSE
                        * Le montant disponible n'est pas suffisant pour rgler TOUTE la facture
                        ENR_REGLTORG<10> = W_DateReglt
                        ENR_REGLTORG<11> = W_MontRegltDispo
                        ENR_REGLTORG<12> = W_HresRegltDispo
                        ENR_REGLTORG<13> = W_PeriodeTraitDeb
                        ENR_REGLTORG<14> = W_PeriodeTraitFin
                        
                        W_MontRegltDispo = 0
                        W_HresRegltDispo = 0
                    END

        			FOR j=1 TO DCOUNT(ENR_REGLTORG<1>, CHAR(253))
        				W_CumulHNorm = W_CumulHNorm + ENR_REGLTORG<1,j>
        				W_CumulHDimJF = W_CumulHDimJF + ENR_REGLTORG<5,j>
        			NEXT j
        			
                    WRITE ENR_REGLTORG ON F.REGLTORG, W_CleRegltOrg                    
                END

			END
		REPEAT
    END 

    
    W_MontTotFact = W_MontTotFact + W_MontFact   	
    
	
	IF W_Trouve="FAUX" THEN
		ENR_REGLTORG=""
		W_Err=1				
	END

EXECUTE 'EFFACER-LISTE W_ListeRegltOrg'

RETURN