FVERS = 2
REFOBJET : ID = 840007654 ; ID_INIT = 840000668 ; NOM = TmmsR2 ; VERSION = T27 ; DATE = 10/10/13-14:26:11 ( 1381415171 ) ; CAT = 7 ; ETAT = 0 ; NB_FILS =1 ; ID_FILS = 780042430
ID_EST = 840000164
COMMENT = ""
CREATEUR = jlgambin
# DEBUT_CORPS
PCODE_PERE=mms_Nokia_R2
####################################################################
#	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)
#
####################################################################


REGISTRE   ENTIER   erreur
REGISTRE   ENTIER   taille_destinationN
REGISTRE   ENTIER   taille_destination1
REGISTRE   ENTIER   taille_originator
REGISTRE   ENTIER   indice_octet
REGISTRE   ENTIER   indice
REGISTRE   ENTIER   messageType
REGISTRE   ENTIER   eventDisposition
REGISTRE   ENTIER   MultiDestinations
REGISTRE   ENTIER   count
REGISTRE   POINTEUR str_destination1
REGISTRE   POINTEUR str_originator
REGISTRE   POINTEUR str_recordType
REGISTRE   ENTIER   dest_is_not_numcourt
REGISTRE   ENTIER   typeCom
# FE 54 ##
REGISTRE ENTIER code_rejet
REGISTRE ENTIER EFFICACE
REGISTRE ENTIER MODULE
REGISTRE ENTIER ERREUR
# /FE 54 ##


DEFINITION	TYPE_MMSOM	48
DEFINITION	TYPE_MMSTM	49
DEFINITION	TYPE_MM3OR	50
DEFINITION	TYPE_MM3RR	51
DEFINITION	TYPE_MM4OR	52
DEFINITION	TYPE_MM4RR	53
DEFINITION	TYPE_MM7OR	54
DEFINITION	TYPE_MM7RR	55
# FE 54 ##
DEFINITION	MODULE_TRAIT	0x5000
DEFINITION	ERR_SEM			0x040
DEFINITION	ERR_TAILLE	0x050
# /FE 54 ##



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

# Initialisations
# FE 54 ##
EFFICACE = 1
MODULE = MODULE_TRAIT
ERREUR = 0
code_rejet = 0
# /FE 54 ##

str_destination1="strdestination1232121234567890123456789012345678901234567890123456789012345678901234567890123456789999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999111222444555661232121234567890123456789012345678901234567890123456789012345678901234567890123456789999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
str_originator="stroriginator12345671234567890123456444444444444444444444444444444444444444488888888888888888888888888888888888888888888888888888888888888888888888888888888884444444444488888884444444789012345678901234567890123456789012345678901234567890123456789111111111111112345671234567890123456444444444444444444444444444444444444444488888888888888888888888888888888888888888888888888888888888888888888888888888888884444444444488888884444444789012345678901234567890123456789012345678901234567890123456789"
str_recordType = "str45678900034567890"

# OGA MMS DEV7 30/03/2007
i_strcpy(str_destination1, "")
i_strcpy(str_originator, "")
i_strcpy(str_recordType, "")
# /OGA MMS DEV7

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

	SI(!i_strcmp(str_recordType, "MMSOrecord"))
	ALORS
	typeCom=TYPE_MMSOM
	FINSI
	SI(!i_strcmp(str_recordType, "MMSRrecord"))
	ALORS
	typeCom=TYPE_MMSTM
	FINSI
	SI(!i_strcmp(str_recordType, "MM3Orecord"))
	ALORS
	typeCom=TYPE_MM3OR
	FINSI
	SI(!i_strcmp(str_recordType, "MM3Rrecord"))
	ALORS
	typeCom=TYPE_MM3RR
	FINSI
	SI(!i_strcmp(str_recordType, "MM4Orecord"))
	ALORS
	typeCom=TYPE_MM4OR
	FINSI
	SI(!i_strcmp(str_recordType, "MM4Rrecord"))
	ALORS
	typeCom=TYPE_MM4RR
	FINSI
	SI(!i_strcmp(str_recordType, "MM7Orecord"))
	ALORS
	typeCom=TYPE_MM7OR
	FINSI
	SI(!i_strcmp(str_recordType, "MM7Rrecord"))
	ALORS
	typeCom=TYPE_MM7RR
	FINSI

##################################
# controle presence champ DATE selon type
##################################
# ano MMS 29/03/2007
SI ( (typeCom==TYPE_MMSTM) || (typeCom==TYPE_MM3RR) || (typeCom==TYPE_MM4RR) || (typeCom==TYPE_MM7RR) )
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 = ERR_SEM
		code_rejet = MODULE + ERREUR + EFFICACE
		erreur=i_PlvMessEmettre(8215 , 2, g_iartin, "", 3, code_rejet, "0xFFFFFF","DeliverTime")
		SAUT STOCKE_ERRONE
	FINSI
FINSI
SI ( (typeCom==TYPE_MMSOM) || (typeCom==TYPE_MM3OR) || (typeCom==TYPE_MM4OR) || (typeCom==TYPE_MM7OR) )
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 = ERR_SEM
		code_rejet = MODULE + ERREUR + EFFICACE
		erreur=i_PlvMessEmettre(8215 , 2, g_iartin, "", 3, code_rejet, "0xFFFFFF","SubmissTime")
		SAUT STOCKE_ERRONE
	FINSI
FINSI
# /ano MMS 29/03/2007

 messageType = 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 == 1) || (messageType == 2) || (messageType == 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 = i_get_field_str(g_iartin,"Destination1",str_destination1)
	erreur = i_get_field_str(g_iartin,"RecordType",str_recordType)

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

eventDisposition = i_get_art_field(g_iartin, $TmmsR2::eventdisposit)
SI (MultiDestinations > 1)
ALORS
	SI ((messageType==0) && (i_strcmp(str_recordType,"MMSRrecord")==0) && (eventDisposition ==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,"MMSRrecord") && (MultiDestinations >1))
ALORS
#         callType = 0x31
#         typeCom = TYPE_MMSTM
	  trace("TmmsR2: [Trai] Type MMSRrecord et multidestination")
	  SAUT STOCKE_ELIMINE
FINSI

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

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

SI (! i_strcmp(str_recordType,"MM7Rrecord") && (MultiDestinations >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 = i_get_field_str(g_iartin,"RecordType",str_recordType)

  SI ( (i_strcmp(str_recordType,"MMSOrecord")) && (i_strcmp(str_recordType,"MMSRrecord")) && (i_strcmp(str_recordType,"MM3Orecord"))
       && (i_strcmp(str_recordType,"MM3Rrecord")) && (i_strcmp(str_recordType,"MM4Orecord")) && (i_strcmp(str_recordType,"MM4Rrecord"))
       && (i_strcmp(str_recordType,"MM7Orecord")) && (i_strcmp(str_recordType,"MM7Rrecord")) )
  ALORS
	trace("TmmsR2 : [trait] Le champ RecordType presente une syntaxe erronee")
# FE 54 ##
	ERREUR = ERR_SEM
	code_rejet = MODULE + ERREUR + EFFICACE
# /FE 54 ##
	erreur=i_PlvMessEmettre(8214 , 2, g_iartin, "", 3, code_rejet, str_recordType ,"RecordType")
	SAUT STOCKE_ERRONE
  FINSI

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

  SI ( ( messageType < 0) || ( messageType > 3) )
  ALORS
	trace("TmmsR2 : [trait] Le champ MessageType presente une syntaxe erronee")
# FE 54 ##
	ERREUR = ERR_SEM
	code_rejet = MODULE + ERREUR + EFFICACE
# /FE 54 ##
	erreur=i_PlvMessEmettre(8215 , 2, g_iartin, "", 3, code_rejet, messageType ,"MessageType")
	SAUT STOCKE_ERRONE
  FINSI

# Test syntaxe du champ eventdisposition

eventDisposition = i_get_art_field(g_iartin, $TmmsR2::eventdisposit)
  
  SI ( ((eventDisposition <= 0) || (eventDisposition > 0x0D))
	&& (eventDisposition != 0x13) && (eventDisposition != 0x1C) && (eventDisposition != 0x25) )
  ALORS
	trace("TmmsR2 : [trait] Le champ eventDisposition presente une syntaxe erronee")
# FE 54 ##
	ERREUR = ERR_SEM
	code_rejet = MODULE + ERREUR + EFFICACE
# /FE 54 ##
	erreur=i_PlvMessEmettre(8215 , 2, g_iartin, "", 3, code_rejet, eventDisposition ,"eventdisposit")
	SAUT STOCKE_ERRONE
  FINSI

# Test syntaxique de date

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

#Test syntaxique de  "Originator"

	erreur = i_get_field_str(g_iartin,"Originator",str_originator)
SI ( (i_get_art_fieldtab(g_iartin,$TmmsR2::Originator,0) != '+')
 && (i_strcmp(i_strchr(str_originator,'@'),g_inull)==0) )
ALORS
	trace("TmmsR2 : [trait]Le champ Originator ne commence pas par + et n'est pas une adresse mail")
	taille_originator = i_get_art_field(g_iartin,$TmmsR2::Originator - 1)
			
	indice_octet = 0
	POINT BOUCLE_ORIG
	SI (indice_octet < taille_originator)
	ALORS
		SI ((i_get_art_fieldtab(g_iartin,$TmmsR2::Originator,indice_octet) < '0') 
				|| (i_get_art_fieldtab(g_iartin,$TmmsR2::Originator,indice_octet) > '9'))
		ALORS
        		SAUT FIN_BOUCLE_ORIG
		FINSI
			
			indice_octet = indice_octet + 1
        		SAUT BOUCLE_ORIG
	FINSI
		
		SI ( taille_originator > 5)
		ALORS
			trace(" TmmsR2 : Originator n'est pas un numero court : 5 digits maxi => Envoi en errone ")
# FE 54 ##
			ERREUR = ERR_TAILLE
			code_rejet = MODULE + ERREUR + EFFICACE
# /FE 54 ##
			erreur=i_PlvMessEmettre(8216 , 2, g_iartin, "", 3, code_rejet, "Originator", taille_originator)
			SAUT STOCKE_ERRONE
		FINSI
	FINSI
POINT FIN_BOUCLE_ORIG	
	
# Test syntaxique de "DestinationN" 

POINT NOUV_DESTINATION
SI (count < MultiDestinations)
ALORS
	SI (MultiDestinations ==1)
#   cas d'un unique destination
	ALORS
	
	SI ( (i_get_art_fieldtab(g_iartin,$TmmsR2::Destination1,0) != '+')
 && (i_strcmp(i_strchr(str_destination1,'@'),g_inull) ==0) )
	ALORS
		trace("TmmsR2 : [trait] Le champ Destination1 ne commence pas par + et n'est pas une adresse mail")
		taille_destination1 = i_get_art_field(g_iartin,$TmmsR2::Destination1 - 1)				
		indice_octet = 0
		POINT BOUCLE_DEST1
		SI (indice_octet < taille_destination1)
		ALORS
		SI ((i_get_art_fieldtab(g_iartin,$TmmsR2::Destination1,indice_octet) < '0') 
		|| (i_get_art_fieldtab(g_iartin,$TmmsR2::Destination1,indice_octet) > '9'))
		ALORS
        		SAUT FIN_BOUCLE_DEST
		FINSI
			
			indice_octet = indice_octet + 1
        		SAUT BOUCLE_DEST1
		FINSI
		
		SI ( taille_destination1 > 5)
		ALORS
			trace(" TmmsR2 :Destination1 n'est pas un numero court : 5 digits maxi => Envoi en errone ")
# FE 54 ##
			ERREUR = ERR_TAILLE
			code_rejet = MODULE + ERREUR + EFFICACE
# /FE 54 ##
      erreur=i_PlvMessEmettre(8216 , 2, g_iartin, "", 3, code_rejet, "Destination1", taille_destination1)
			SAUT STOCKE_ERRONE
		FINSI
	FINSI
SINON
# cas de multiDestination	
	SI ( (i_get_art_fieldtab(g_iartin,$TmmsR2::Destination1+3*count,0) != '+') )
	ALORS
		trace("  TmmsR2 : [trait] Le champ DestinationN ne commence pas par + ")
		taille_destinationN = i_get_art_field(g_iartin,$TmmsR2::Destination1+3*count-1)
		dest_is_not_numcourt = 0
		indice_octet = 0
		POINT BOUCLE_DEST
		SI (indice_octet < taille_destinationN)
		ALORS
			SI ((i_get_art_fieldtab(g_iartin,$TmmsR2::Destination1+3*count,indice_octet) < '0') 
				|| (i_get_art_fieldtab(g_iartin,$TmmsR2::Destination1+3*count,indice_octet) > '9'))
			ALORS
        			dest_is_not_numcourt = 1
        			SAUT FIN_BOUCLE_DEST
			FINSI
			
			indice_octet = indice_octet + 1
        		SAUT BOUCLE_DEST
		FINSI
		
		SI ( taille_destinationN > 5)
		ALORS
			trace(" TmmsR2 : DestinationN n'est pas un numero court : 5 digits maxi => Envoi en errone ")
# FE 54 ##
	ERREUR = ERR_TAILLE
	code_rejet = MODULE + ERREUR + EFFICACE
# /FE 54 ##
			erreur=i_PlvMessEmettre(8216 , 2, g_iartin, "", 3, code_rejet, "DestinationN", taille_destinationN)
			SAUT  ERREUR_DESTINATION
		FINSI
	FINSI
	FINSI	
POINT FIN_BOUCLE_DEST

		count = count + 1
		SAUT NOUV_DESTINATION
	FINSI

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


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


POINT ERREUR_DESTINATION
	erreur = 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 = count + 1
   	SAUT NOUV_DESTINATION
#------------------------------------- Fin TmmsR2_tr.src --------------------------------------# FIN_CORPS
