DEFINITION TYPE_MMSOM_840007654 48
DEFINITION TYPE_MMSTM_840007654 49
DEFINITION TYPE_MM3OR_840007654 50
DEFINITION TYPE_MM3RR_840007654 51
DEFINITION TYPE_MM4OR_840007654 52
DEFINITION TYPE_MM4RR_840007654 53
DEFINITION TYPE_MM7OR_840007654 54
DEFINITION TYPE_MM7RR_840007654 55
DEFINITION MODULE_TRAIT_840007654 0x5000
DEFINITION ERR_SEM_840007654 0x040
DEFINITION ERR_TAILLE_840007654 0x050
REGISTRE ENTIER erreur_840007654
REGISTRE ENTIER taille_destinationN_840007654
REGISTRE ENTIER taille_destination1_840007654
REGISTRE ENTIER taille_originator_840007654
REGISTRE ENTIER indice_octet_840007654
REGISTRE ENTIER indice_840007654
REGISTRE ENTIER messageType_840007654
REGISTRE ENTIER eventDisposition_840007654
REGISTRE ENTIER MultiDestinations_840007654
REGISTRE ENTIER count_840007654
REGISTRE POINTEUR str_destination1_840007654
REGISTRE POINTEUR str_originator_840007654
REGISTRE POINTEUR str_recordType_840007654
REGISTRE ENTIER dest_is_not_numcourt_840007654
REGISTRE ENTIER typeCom_840007654
REGISTRE ENTIER code_rejet_840007654
REGISTRE ENTIER EFFICACE_840007654
REGISTRE ENTIER MODULE_840007654
REGISTRE ENTIER ERREUR_840007654

####################################################################
#	TmmsR2.src article MMS-C R2 Originated VASP
#
#	MP 30/01/03	Creation
#
# 02/07/07 URS/PSA FO 544 : mauvaise incrementation du 1501
# 18/01/11 - BEA - G3R1 lot4 Verification/Correction des variables (constantes, entiers, pointeurs)
#
####################################################################


# FE 54 ##
# /FE 54 ##


# FE 54 ##
# /FE 54 ##



trace("")
trace("**** MMS-C R2 : Debut de traitement ****")

# Initialisations
# FE 54 ##
EFFICACE_840007654 = 1
MODULE_840007654 = MODULE_TRAIT_840007654
ERREUR_840007654 = 0
code_rejet_840007654 = 0
# /FE 54 ##

str_destination1_840007654="strdestination1232121234567890123456789012345678901234567890123456789012345678901234567890123456789999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999111222444555661232121234567890123456789012345678901234567890123456789012345678901234567890123456789999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
str_originator_840007654="stroriginator12345671234567890123456444444444444444444444444444444444444444488888888888888888888888888888888888888888888888888888888888888888888888888888888884444444444488888884444444789012345678901234567890123456789012345678901234567890123456789111111111111112345671234567890123456444444444444444444444444444444444444444488888888888888888888888888888888888888888888888888888888888888888888888888888888884444444444488888884444444789012345678901234567890123456789012345678901234567890123456789"
str_recordType_840007654 = "str45678900034567890"

# OGA MMS DEV7 30/03/2007
i_strcpy(str_destination1_840007654, "")
i_strcpy(str_originator_840007654, "")
i_strcpy(str_recordType_840007654, "")
# /OGA MMS DEV7

####################################################################
#   Stockage des CRAs MMS R2 inefficaces
####################################################################  
          		
#
# Boucle sur les N destinations
#
         count_840007654 = 0
	MultiDestinations_840007654 = 0
	indice_840007654 = 0
POINT BOUCLE
	SI (i_get_art_field(g_iartin,$TmmsR2::Destination1+3*indice_840007654 -1) > 0)
	ALORS 
		MultiDestinations_840007654 = MultiDestinations_840007654 + 1
		indice_840007654 = indice_840007654 +1
		SAUT BOUCLE
	FINSI
	#	Mise a jour des types de com
erreur_840007654 = i_get_field_str(g_iartin,"RecordType",str_recordType_840007654)

	SI(!i_strcmp(str_recordType_840007654, "MMSOrecord"))
	ALORS
	typeCom_840007654=TYPE_MMSOM_840007654
	FINSI
	SI(!i_strcmp(str_recordType_840007654, "MMSRrecord"))
	ALORS
	typeCom_840007654=TYPE_MMSTM_840007654
	FINSI
	SI(!i_strcmp(str_recordType_840007654, "MM3Orecord"))
	ALORS
	typeCom_840007654=TYPE_MM3OR_840007654
	FINSI
	SI(!i_strcmp(str_recordType_840007654, "MM3Rrecord"))
	ALORS
	typeCom_840007654=TYPE_MM3RR_840007654
	FINSI
	SI(!i_strcmp(str_recordType_840007654, "MM4Orecord"))
	ALORS
	typeCom_840007654=TYPE_MM4OR_840007654
	FINSI
	SI(!i_strcmp(str_recordType_840007654, "MM4Rrecord"))
	ALORS
	typeCom_840007654=TYPE_MM4RR_840007654
	FINSI
	SI(!i_strcmp(str_recordType_840007654, "MM7Orecord"))
	ALORS
	typeCom_840007654=TYPE_MM7OR_840007654
	FINSI
	SI(!i_strcmp(str_recordType_840007654, "MM7Rrecord"))
	ALORS
	typeCom_840007654=TYPE_MM7RR_840007654
	FINSI

##################################
# controle presence champ DATE selon type
##################################
# ano MMS 29/03/2007
SI ( (typeCom_840007654==TYPE_MMSTM_840007654) || (typeCom_840007654==TYPE_MM3RR_840007654) || (typeCom_840007654==TYPE_MM4RR_840007654) || (typeCom_840007654==TYPE_MM7RR_840007654) )
ALORS
	SI( !i_valid_field_n(g_iartin,$TmmsR2::DeliverTime) || (i_get_art_field(g_iartin,$TmmsR2::DeliverTime)==-1) )
	ALORS
		trace("TmmsR2 : [trait] Le champ DeliverTime est absent")
		ERREUR_840007654 = ERR_SEM_840007654
		code_rejet_840007654 = MODULE_840007654 + ERREUR_840007654 + EFFICACE_840007654
		erreur_840007654=i_PlvMessEmettre(8215 , 2, g_iartin, "", 3, code_rejet_840007654, "0xFFFFFF","DeliverTime")
		SAUT STOCKE_ERRONE
	FINSI
FINSI
SI ( (typeCom_840007654==TYPE_MMSOM_840007654) || (typeCom_840007654==TYPE_MM3OR_840007654) || (typeCom_840007654==TYPE_MM4OR_840007654) || (typeCom_840007654==TYPE_MM7OR_840007654) )
ALORS
	SI( !i_valid_field_n(g_iartin,$TmmsR2::SubmissTime) || (i_get_art_field(g_iartin,$TmmsR2::SubmissTime)==-1) )
	ALORS
		trace("TmmsR2 : [trait] Le champ SubmissTime est absent")
		ERREUR_840007654 = ERR_SEM_840007654
		code_rejet_840007654 = MODULE_840007654 + ERREUR_840007654 + EFFICACE_840007654
		erreur_840007654=i_PlvMessEmettre(8215 , 2, g_iartin, "", 3, code_rejet_840007654, "0xFFFFFF","SubmissTime")
		SAUT STOCKE_ERRONE
	FINSI
FINSI
# /ano MMS 29/03/2007

 messageType_840007654 = i_get_art_field(g_iartin,$TmmsR2::MessageType)
#
# Pas de duplication si MessageType = 1 2 ou 3 (MMS-N MMS-DR et MMS RR)
# Stockage en entree et comptage
#
        SI ( (messageType_840007654 == 1) || (messageType_840007654 == 2) || (messageType_840007654 == 3) )
        ALORS
		trace("TmmsR2: [Trait] le champ messageType present une syntaxe errone")
                SAUT STOCKE_ELIMINE
        FINSI
        
# Les CRAS de "MMSRrecord" avec une adresse mail dans le champ ICC_Destinations sont comptes en inefficaces pours le cas multiple
	
	erreur_840007654 = i_get_field_str(g_iartin,"Destination1",str_destination1_840007654)
	erreur_840007654 = i_get_field_str(g_iartin,"RecordType",str_recordType_840007654)

# ano validation MMS : innefficace seulement si NON multi destination	
SI (MultiDestinations_840007654 == 1)
ALORS
	SI ((messageType_840007654==0) &&(i_strcmp(str_recordType_840007654,"MMSRrecord")==0)
 && (i_strcmp(i_strchr_780042430(str_destination1_840007654,'@'),g_inull)) )
	ALORS
		trace("TmmsR2 : [Trait] article de type MMSRrecord et destination est un mail")
                SAUT STOCKE_ELIMINE
	FINSI 
FINSI       
# /ano validation MMS	

eventDisposition_840007654 = i_get_art_field(g_iartin, $TmmsR2::eventdisposit)
SI (MultiDestinations_840007654 > 1)
ALORS
	SI ((messageType_840007654==0) && (i_strcmp(str_recordType_840007654,"MMSRrecord")==0) && (eventDisposition_840007654 ==3))
	ALORS
               trace("TmmsR2 : [Trait] article de type MMSRrecord et messageType=0 et eventDisposition=3")
               SAUT STOCKE_ELIMINE
	FINSI   
FINSI
####################################################################
#	Controles semantiques
####################################################################
# --- les CRA multi de types 31 33 35 et 37 ne doivent pas etre dupliques
#typeCom = -1

SI (! i_strcmp(str_recordType_840007654,"MMSRrecord") && (MultiDestinations_840007654 >1))
ALORS
#         callType = 0x31
#         typeCom = TYPE_MMSTM
	  trace("TmmsR2: [Trai] Type MMSRrecord et multidestination")
	  SAUT STOCKE_ELIMINE
FINSI

SI (! i_strcmp(str_recordType_840007654,"MM3Rrecord") && (MultiDestinations_840007654 >1))
ALORS
#         callType = 0x33
#         typeCom = TYPE_MM3RR
	  trace("TmmsR2: [Trai] Type MM3Rrecord et multidestination")
	  SAUT STOCKE_ELIMINE
FINSI

SI (! i_strcmp(str_recordType_840007654,"MM4Rrecord") && (MultiDestinations_840007654 >1))
ALORS
#         callType = 0x35
#         typeCom = TYPE_MM4RR
	  trace("TmmsR2: [Trai] Type MM4Rrecord et multidestination")
	  SAUT STOCKE_ELIMINE
FINSI

SI (! i_strcmp(str_recordType_840007654,"MM7Rrecord") && (MultiDestinations_840007654 >1))
ALORS
#         callType = 0x37
#         typeCom = TYPE_MM7RR
	  trace("TmmsR2: [Trai] Type MM7Rrecord et multidestination")
	  SAUT STOCKE_ELIMINE
FINSI


####################################################################
#	fin des controles simantiques
####################################################################

####################################################################
#	Controles syntaxiques
####################################################################

# Test syntaxe du champ cDRRecordType
erreur_840007654 = i_get_field_str(g_iartin,"RecordType",str_recordType_840007654)

  SI ( (i_strcmp(str_recordType_840007654,"MMSOrecord")) && (i_strcmp(str_recordType_840007654,"MMSRrecord")) && (i_strcmp(str_recordType_840007654,"MM3Orecord"))
       && (i_strcmp(str_recordType_840007654,"MM3Rrecord")) && (i_strcmp(str_recordType_840007654,"MM4Orecord")) && (i_strcmp(str_recordType_840007654,"MM4Rrecord"))
       && (i_strcmp(str_recordType_840007654,"MM7Orecord")) && (i_strcmp(str_recordType_840007654,"MM7Rrecord")) )
  ALORS
	trace("TmmsR2 : [trait] Le champ RecordType presente une syntaxe erronee")
# FE 54 ##
	ERREUR_840007654 = ERR_SEM_840007654
	code_rejet_840007654 = MODULE_840007654 + ERREUR_840007654 + EFFICACE_840007654
# /FE 54 ##
	erreur_840007654=i_PlvMessEmettre(8214 , 2, g_iartin, "", 3, code_rejet_840007654, str_recordType_840007654 ,"RecordType")
	SAUT STOCKE_ERRONE
  FINSI

# Test syntaxe du champ MessageType
messageType_840007654 = i_get_art_field(g_iartin,$TmmsR2::MessageType)

  SI ( ( messageType_840007654 < 0) || ( messageType_840007654 > 3) )
  ALORS
	trace("TmmsR2 : [trait] Le champ MessageType presente une syntaxe erronee")
# FE 54 ##
	ERREUR_840007654 = ERR_SEM_840007654
	code_rejet_840007654 = MODULE_840007654 + ERREUR_840007654 + EFFICACE_840007654
# /FE 54 ##
	erreur_840007654=i_PlvMessEmettre(8215 , 2, g_iartin, "", 3, code_rejet_840007654, messageType_840007654 ,"MessageType")
	SAUT STOCKE_ERRONE
  FINSI

# Test syntaxe du champ eventdisposition

eventDisposition_840007654 = i_get_art_field(g_iartin, $TmmsR2::eventdisposit)
  
  SI ( ((eventDisposition_840007654 <= 0) || (eventDisposition_840007654 > 0x0D))
	&& (eventDisposition_840007654 != 0x13) && (eventDisposition_840007654 != 0x1C) && (eventDisposition_840007654 != 0x25) )
  ALORS
	trace("TmmsR2 : [trait] Le champ eventDisposition presente une syntaxe erronee")
# FE 54 ##
	ERREUR_840007654 = ERR_SEM_840007654
	code_rejet_840007654 = MODULE_840007654 + ERREUR_840007654 + EFFICACE_840007654
# /FE 54 ##
	erreur_840007654=i_PlvMessEmettre(8215 , 2, g_iartin, "", 3, code_rejet_840007654, eventDisposition_840007654 ,"eventdisposit")
	SAUT STOCKE_ERRONE
  FINSI

# Test syntaxique de date

#########################################################################

#Test syntaxique de  "Originator"

	erreur_840007654 = i_get_field_str(g_iartin,"Originator",str_originator_840007654)
SI ( (i_get_art_fieldtab(g_iartin,$TmmsR2::Originator,0) != '+')
 && (i_strcmp(i_strchr_780042430(str_originator_840007654,'@'),g_inull)==0) )
ALORS
	trace("TmmsR2 : [trait]Le champ Originator ne commence pas par + et n'est pas une adresse mail")
	taille_originator_840007654 = i_get_art_field(g_iartin,$TmmsR2::Originator - 1)
			
	indice_octet_840007654 = 0
	POINT BOUCLE_ORIG
	SI (indice_octet_840007654 < taille_originator_840007654)
	ALORS
		SI ((i_get_art_fieldtab(g_iartin,$TmmsR2::Originator,indice_octet_840007654) < '0') 
				|| (i_get_art_fieldtab(g_iartin,$TmmsR2::Originator,indice_octet_840007654) > '9'))
		ALORS
        		SAUT FIN_BOUCLE_ORIG
		FINSI
			
			indice_octet_840007654 = indice_octet_840007654 + 1
        		SAUT BOUCLE_ORIG
	FINSI
		
		SI ( taille_originator_840007654 > 5)
		ALORS
			trace(" TmmsR2 : Originator n'est pas un numero court : 5 digits maxi => Envoi en errone ")
# FE 54 ##
			ERREUR_840007654 = ERR_TAILLE_840007654
			code_rejet_840007654 = MODULE_840007654 + ERREUR_840007654 + EFFICACE_840007654
# /FE 54 ##
			erreur_840007654=i_PlvMessEmettre(8216 , 2, g_iartin, "", 3, code_rejet_840007654, "Originator", taille_originator_840007654)
			SAUT STOCKE_ERRONE
		FINSI
	FINSI
POINT FIN_BOUCLE_ORIG	
	
# Test syntaxique de "DestinationN" 

POINT NOUV_DESTINATION
SI (count_840007654 < MultiDestinations_840007654)
ALORS
	SI (MultiDestinations_840007654 ==1)
#   cas d'un unique destination
	ALORS
	
	SI ( (i_get_art_fieldtab(g_iartin,$TmmsR2::Destination1,0) != '+')
 && (i_strcmp(i_strchr_780042430(str_destination1_840007654,'@'),g_inull) ==0) )
	ALORS
		trace("TmmsR2 : [trait] Le champ Destination1 ne commence pas par + et n'est pas une adresse mail")
		taille_destination1_840007654 = i_get_art_field(g_iartin,$TmmsR2::Destination1 - 1)				
		indice_octet_840007654 = 0
		POINT BOUCLE_DEST1
		SI (indice_octet_840007654 < taille_destination1_840007654)
		ALORS
		SI ((i_get_art_fieldtab(g_iartin,$TmmsR2::Destination1,indice_octet_840007654) < '0') 
		|| (i_get_art_fieldtab(g_iartin,$TmmsR2::Destination1,indice_octet_840007654) > '9'))
		ALORS
        		SAUT FIN_BOUCLE_DEST
		FINSI
			
			indice_octet_840007654 = indice_octet_840007654 + 1
        		SAUT BOUCLE_DEST1
		FINSI
		
		SI ( taille_destination1_840007654 > 5)
		ALORS
			trace(" TmmsR2 :Destination1 n'est pas un numero court : 5 digits maxi => Envoi en errone ")
# FE 54 ##
			ERREUR_840007654 = ERR_TAILLE_840007654
			code_rejet_840007654 = MODULE_840007654 + ERREUR_840007654 + EFFICACE_840007654
# /FE 54 ##
      erreur_840007654=i_PlvMessEmettre(8216 , 2, g_iartin, "", 3, code_rejet_840007654, "Destination1", taille_destination1_840007654)
			SAUT STOCKE_ERRONE
		FINSI
	FINSI
SINON
# cas de multiDestination	
	SI ( (i_get_art_fieldtab(g_iartin,$TmmsR2::Destination1+3*count_840007654,0) != '+') )
	ALORS
		trace("  TmmsR2 : [trait] Le champ DestinationN ne commence pas par + ")
		taille_destinationN_840007654 = i_get_art_field(g_iartin,$TmmsR2::Destination1+3*count_840007654-1)
		dest_is_not_numcourt_840007654 = 0
		indice_octet_840007654 = 0
		POINT BOUCLE_DEST
		SI (indice_octet_840007654 < taille_destinationN_840007654)
		ALORS
			SI ((i_get_art_fieldtab(g_iartin,$TmmsR2::Destination1+3*count_840007654,indice_octet_840007654) < '0') 
				|| (i_get_art_fieldtab(g_iartin,$TmmsR2::Destination1+3*count_840007654,indice_octet_840007654) > '9'))
			ALORS
        			dest_is_not_numcourt_840007654 = 1
        			SAUT FIN_BOUCLE_DEST
			FINSI
			
			indice_octet_840007654 = indice_octet_840007654 + 1
        		SAUT BOUCLE_DEST
		FINSI
		
		SI ( taille_destinationN_840007654 > 5)
		ALORS
			trace(" TmmsR2 : DestinationN n'est pas un numero court : 5 digits maxi => Envoi en errone ")
# FE 54 ##
	ERREUR_840007654 = ERR_TAILLE_840007654
	code_rejet_840007654 = MODULE_840007654 + ERREUR_840007654 + EFFICACE_840007654
# /FE 54 ##
			erreur_840007654=i_PlvMessEmettre(8216 , 2, g_iartin, "", 3, code_rejet_840007654, "DestinationN", taille_destinationN_840007654)
			SAUT  ERREUR_DESTINATION
		FINSI
	FINSI
	FINSI	
POINT FIN_BOUCLE_DEST

		count_840007654 = count_840007654 + 1
		SAUT NOUV_DESTINATION
	FINSI

	trace("")
	trace("**** MMS R2 : Fin du traitement pcode ok ****")
	erreur_840007654 = i_incr_cpt(1501, typeCom_840007654,g_ieec, 0, i_DHgetLocalTime(4, 7, i_date_audit()), 1)
	erreur_840007654 = i_stocke_art(g_iartin,0,PT_OK,0)
	RETOUR TRAIT_OK	


POINT	STOCKE_ELIMINE
	erreur_840007654 = i_stocke_art(g_iartin,0,PT_DIVERS,0)
	trace("TmmsR2 : [trait] article ELIMINE")
	RETOUR TRAIT_OK
	
	
POINT	STOCKE_ERRONE
# FE 54 ##
	erreur_840007654 = i_make_art_rej(g_iartin, g_iartout, code_rejet_840007654)
# /FE 54
	erreur_840007654 = i_stocke_art(g_iartout,0,PT_ERRONE,0)
	RETOUR TRAIT_OK


POINT ERREUR_DESTINATION
	erreur_840007654 = i_stocke_art(g_iartin,0,PT_ERRONE,0)
	trace("TmmsR2 : Erreur de normalisation champ DestinationN")
# il faut creer les articles pour les N destinations restantes
   	count_840007654 = count_840007654 + 1
   	SAUT NOUV_DESTINATION
#------------------------------------- Fin TmmsR2_tr.src --------------------------------------
