*PARAMETRES*
*Vrification RIB SEPA*
*Vrification des RIB actifs  partir de cette priode (AAAAMM) |6N|TXT|O*
*FIN PARAMETRES*

*****************************************************
* Verification des RIB SEPA							*
* 												    *
* vanessa - 09/12/2013 				                *
*****************************************************

SUBROUTINE VERIFRIBSEPA(RETURNVAL,PARAMETRES,W_Sortie)

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

** Dclaration des fichiers **
OPEN "","ACTIVITESBISAIDE" TO F.ACTIVITESBISAIDE ELSE RETURN
OPEN "","ELTSFACTAIDE" TO F.ELTSFACTAIDE ELSE RETURN
OPEN "","CONTRAT" TO F.CONTRAT ELSE RETURN
OPEN "","RIBAIDANT" TO F.RIBAIDANT ELSE RETURN
OPEN "","FUSION" TO F.FUSION ELSE RETURN
OPEN "","BIC" TO F.BIC ELSE RETURN
OPEN "","CIVILAIDE" TO F.CIVILAIDE ELSE RETURN
OPEN "","CIVILAIDANT" TO F.CIVILAIDANT ELSE RETURN

********************************
* Rcupration des paramtres  *
********************************

W_Periode = PARAMETRES<1>

********************************
*     Dbut du traitement      *
********************************

ENR_FUSION="Type;Code;Nom Prnom;Anomalie;IBAN;Code BIC"
W_Ind=2

W_DateDebPeriode=ICONV("01/":W_Periode[5,2]:"/":W_Periode[1,4],"D4/")

W_ReqAct=""
W_SauveAide=""

EXECUTE 'SSELECT ACTIVITESBISAIDE AVEC DateDebAct <= "':W_DateDebPeriode:'" AND AVEC 1 = "" OR >= "':W_DateDebPeriode:'" PAR 0'
EXECUTE 'SAUVE-LISTE W_ReqAct'
EXECUTE "LISTE W_ReqAct" RETURNING MSGCODE

IF MSGCODE<1> # 209 THEN
	SELECT F.ACTIVITESBISAIDE TO W_ReqAct
	
	W_Fin="FAUX"
   	LOOP
		READNEXT W_Cle FROM W_ReqAct ELSE W_Fin = "VRAI"
   	WHILE W_Fin = "FAUX" DO
	
		IF W_SauveAide # W_Cle[1,5] THEN
			W_Erreur="FAUX"
			W_SauveAide = W_Cle[1,5]
			READ ENR_ELTSFACTAIDE FROM F.ELTSFACTAIDE,W_SauveAide ELSE ENR_ELTSFACTAIDE=""
			READ ENR_CIVILAIDE FROM F.CIVILAIDE,W_SauveAide ELSE ENR_CIVILAIDE=""
			
			IF ENR_ELTSFACTAIDE<16> # "" THEN
				READ ENR_BIC FROM F.BIC,ENR_ELTSFACTAIDE<18> THEN
					* ok
				END ELSE
					ENR_FUSION<W_Ind>="Aid;":W_SauveAide:";":ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>:";Problme de code BIC;":ENR_ELTSFACTAIDE<16>:";":ENR_ELTSFACTAIDE<17>
					W_Ind=W_Ind+1
					W_Erreur="VRAI"
				END
				
				IF W_Erreur="FAUX" THEN
					IF ENR_ELTSFACTAIDE<16>[5,23] # ENR_ELTSFACTAIDE<18>:ENR_ELTSFACTAIDE<19>:ENR_ELTSFACTAIDE<20>:ENR_ELTSFACTAIDE<21> THEN
						ENR_FUSION<W_Ind>="Aid;":W_SauveAide:";":ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>:";Incohrence entre le code IBAN et les autres infos du RIB;":ENR_ELTSFACTAIDE<16>:";":ENR_ELTSFACTAIDE<17>
						W_Ind=W_Ind+1
						W_Erreur="VRAI"
					END
				END
				
				IF W_Erreur="FAUX" THEN
					IF LEN(ENR_ELTSFACTAIDE<16>) # 27 THEN
						ENR_FUSION<W_Ind>="Aid;":W_SauveAide:";":ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>:";L'IBAN doit comporter 27 caractres;":ENR_ELTSFACTAIDE<16>:";":ENR_ELTSFACTAIDE<17>
						W_Ind=W_Ind+1
						W_Erreur="VRAI"
					END
				END
				
				W_Caractere1=ENR_ELTSFACTAIDE<16>[1,1]
				W_Caractere2=ENR_ELTSFACTAIDE<16>[2,1]
				
				IF W_Erreur="FAUX" THEN
					IF SEQ(W_Caractere1) < 65 OR SEQ(W_Caractere1) > 90 THEN
						ENR_FUSION<W_Ind>="Aid;":W_SauveAide:";":ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>:";Le 1er caractre de l'IBAN doit tre une lettre;":ENR_ELTSFACTAIDE<16>:";":ENR_ELTSFACTAIDE<17>
						W_Ind=W_Ind+1
						W_Erreur="VRAI"
					END
				END
				
				IF W_Erreur="FAUX" THEN
					IF SEQ(W_Caractere2) < 65 OR SEQ(W_Caractere2) > 90 THEN
						ENR_FUSION<W_Ind>="Aid;":W_SauveAide:";":ENR_CIVILAIDE<2>:" ":ENR_CIVILAIDE<3>:";Le 2eme caractre de l'IBAN doit tre une lettre;":ENR_ELTSFACTAIDE<16>:";":ENR_ELTSFACTAIDE<17>
						W_Ind=W_Ind+1
						W_Erreur="VRAI"
					END
				END
				
			END
		END
		
	REPEAT
	
END

W_ReqContrat=""
W_SauveAidant=""

EXECUTE 'SSELECT CONTRAT AVEC 65 = "" AND AVEC 7 <= "':W_DateDebPeriode:'" AND AVEC 8 = "" OR >= "':W_DateDebPeriode:'" PAR 0'
EXECUTE 'SAUVE-LISTE W_ReqContrat'
EXECUTE "LISTE W_ReqContrat" RETURNING MSGCODE

IF MSGCODE<1> # 209 THEN
	SELECT F.CONTRAT TO W_ReqContrat
	
	W_Fin="FAUX"
   	LOOP
		READNEXT W_Cle FROM W_ReqContrat ELSE W_Fin = "VRAI"
   	WHILE W_Fin = "FAUX" DO
	
		IF W_SauveAidant # W_Cle[1,5] THEN
			W_Erreur="FAUX"
			W_SauveAidant = W_Cle[1,5]
			READ ENR_RIBAIDANT FROM F.RIBAIDANT,W_SauveAidant ELSE ENR_RIBAIDANT=""
			READ ENR_CIVILAIDANT FROM F.CIVILAIDANT,W_SauveAidant ELSE ENR_CIVILAIDANT=""
			
			IF ENR_RIBAIDANT<1> # "" THEN
				READ ENR_BIC FROM F.BIC,ENR_RIBAIDANT<3> THEN
					* ok
				END ELSE
					ENR_FUSION<W_Ind>="Aidant;":W_SauveAidant:";":ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>:";Problme de code BIC;":ENR_RIBAIDANT<1>:";":ENR_RIBAIDANT<2>
					W_Ind=W_Ind+1
					W_Erreur="VRAI"
				END
				
				IF W_Erreur="FAUX" THEN
					IF ENR_RIBAIDANT<1>[5,23] # ENR_RIBAIDANT<3>:ENR_RIBAIDANT<4>:ENR_RIBAIDANT<5>:ENR_RIBAIDANT<6> THEN
						ENR_FUSION<W_Ind>="Aidant;":W_SauveAidant:";":ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>:";Incohrence entre le code IBAN et les autres infos du RIB;":ENR_RIBAIDANT<1>:";":ENR_RIBAIDANT<2>
						W_Ind=W_Ind+1
						W_Erreur="VRAI"
					END
				END
				
				IF W_Erreur="FAUX" THEN
					IF LEN(ENR_RIBAIDANT<1>) # 27 THEN
						ENR_FUSION<W_Ind>="Aidant;":W_SauveAidant:";":ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>:";L'IBAN doit comporter 27 caractres;":ENR_RIBAIDANT<1>:";":ENR_RIBAIDANT<2>
						W_Ind=W_Ind+1
						W_Erreur="VRAI"
					END
				END
				
				W_Caractere1=ENR_RIBAIDANT<1>[1,1]
				W_Caractere2=ENR_RIBAIDANT<1>[2,1]
				
				IF W_Erreur="FAUX" THEN
					IF SEQ(W_Caractere1) < 65 OR SEQ(W_Caractere1) > 90 THEN
						ENR_FUSION<W_Ind>="Aidant;":W_SauveAidant:";":ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>:";Le 1er caractre de l'IBAN doit tre une lettre;":ENR_RIBAIDANT<1>:";":ENR_RIBAIDANT<2>
						W_Ind=W_Ind+1
						W_Erreur="VRAI"
					END
				END
				
				IF W_Erreur="FAUX" THEN
					IF SEQ(W_Caractere2) < 65 OR SEQ(W_Caractere2) > 90 THEN
						ENR_FUSION<W_Ind>="Aidant;":W_SauveAidant:";":ENR_CIVILAIDANT<2>:" ":ENR_CIVILAIDANT<3>:";Le 2eme caractre de l'IBAN doit tre une lettre;":ENR_RIBAIDANT<1>:";":ENR_RIBAIDANT<2>
						W_Ind=W_Ind+1
						W_Erreur="VRAI"
					END	
				END
			END
		END
		
	REPEAT
	
END

IF ENR_FUSION<2> # "" THEN
	WRITE ENR_FUSION ON F.FUSION,"AnomalieRIBSEPA.csv"
	W_Sortie="Des anomalies ont t dtectes dans les RIB. La liste a t gnre dans le fichier 'AnomalieRIBSEPA.csv' du rpertoire FUSION"
END ELSE
	W_Sortie="Aucune anomalie dtecte dans les RIB."
END

RETURN

