DEFINITION ERR_SYNTAX_840003650 0x5040
DEFINITION ERR_CROISE_840003650 0x50F0
REGISTRE ENTIER erreur_840003650
REGISTRE ENTIER taille_840003650
REGISTRE ENTIER taille_Oaddr_840003650
REGISTRE ENTIER taille_Daddr_840003650
REGISTRE ENTIER indice_octet_840003650
REGISTRE ENTIER code_rejet_840003650
REGISTRE ENTIER EFFICACE_840003650
REGISTRE ENTIER date_DC_840003650
REGISTRE ENTIER RecordType_840003650
REGISTRE ENTIER successindic_840003650
REGISTRE ENTIER oiwtype_840003650
REGISTRE ENTIER diwtype_840003650
REGISTRE ENTIER b_MailOaddr_840003650
REGISTRE ENTIER b_MailDaddr_840003650
REGISTRE ENTIER indice_840003650
REGISTRE POINTEUR pt_CHAMP_ERRONE_840003650
REGISTRE POINTEUR pt_Oaddr_840003650
REGISTRE POINTEUR pt_Daddr_840003650

############################################################################
# TRAITEMENT TmmscNsn_trt.src
#	Article Article : CDR de bloc du TMMSC-NSN en entree de Platine
#	Pcode de traitement
#	Creation le 31/03/2011 pour la G3R3 lot3
#
# TYPE_MMSOM	48 0x30
# TYPE_MMSTM	49 0x31
# TYPE_MM3OR	50 0x32
# TYPE_MM3RR	51 0x33
# TYPE_MM4OR	52 0x34
# TYPE_MM4RR	53 0x35
# TYPE_MM7OR	54 0x36
# TYPE_MM7RR	55 0x37
#
# Historique
#  04/05/2011 DECI -JLG- G3R3 lot3 item remplacement du MMS-C
#  01/06/2011 DECI -JLG- G3R3 lot3 QC875 format mail
#  03/06/2011 DECI -JLG- G3R3 lot3 QC877 Evolution spec : verification si MsgId (partie zzzz) est une representation ascii d'un nombre decimal
#  06/06/2011 DECI -JLG- G3R3 lot3 correction sur le controle du format short
#  07/06/2011 DECI -JLG- G3R3 lot3 QC883 MMSC-NSN : Ctrl valeurs emises OIWTYPE 333 et DIWTYPE 472
#  08/06/2011 DECI -JLG- G3R3 lot3 QC886 controle sur le zzzz du MSG ID
#  10/06/2011 DECI -JLG- G3R3 lot3 QC887 QC886
#  06/07/2011 DECI -JLG- Modif longueur des chaines pointees par pt_Oaddr et pt_Daddr
#  07/12/2011 DECI -JLG- QC966 evolution spec pour les controles croises
#  11/01/2012 DECI -PKH- QC990 report G3R4C8 - deplacement test msgsize=0 apres les controles croises
#  25/01/2012 DECI -JLG- QC1003 controle sur chp MsgLen au lieu de MsgSize + modif numero d'alarme
#  03/02/2012 DECI -JLG- G3R5 lot2 QC1006 : retour arriere QC1003
############################################################################




RecordType_840003650 = 0

pt_CHAMP_ERRONE_840003650 = "pt_CHAMP_ERRONE55555555555555555555555555555555555666666666666666"
pt_Oaddr_840003650 = "pt_Oaddr333333333333333333333333333333333333333333333333333333333333333333333333333"
pt_Daddr_840003650 = "pt_Daddr444444444444444444444444444444444444444444444444444444444444444444444444444"


trace("<<<__LINE__<<<__FILE__<<< ======= Debut du pcode de TRAITEMENT =========")

# i_strcpy(pt_CHAMP_ERRONE,"") , inutile realise plus bas
i_strcpy(pt_Oaddr_840003650,"")
i_strcpy(pt_Daddr_840003650,"")


#################################################################
# Variables fonctionnelles
# et
# Controles des champs
#################################################################

# Duree = 0 (toujours nulle)

# DATE_DC (date_DC extraite du champ Loggingtime) a voir
date_DC_840003650 = i_get_art_field(g_iartin, $TmmscNsn::ddebut)
SI (date_DC_840003650 == -1)
ALORS
	code_rejet_840003650 = ERR_SYNTAX_840003650 + EFFICACE_840003650
	erreur_840003650 = i_PlvMessEmettre(6401,2,g_iartin,"",2,code_rejet_840003650, date_DC_840003650, 0)
	SAUT STOCKE_ERRONE
FINSI

#/QC883
#Oiwtype (OIWTYPE)
oiwtype_840003650 = i_get_art_field(g_iartin, $TmmscNsn::Oiwtype)
SI (oiwtype_840003650 != 0 && oiwtype_840003650 != 451 && oiwtype_840003650/100 != 7 && oiwtype_840003650 != 471 && oiwtype_840003650 != 333)
ALORS
	code_rejet_840003650 = ERR_SYNTAX_840003650 + EFFICACE_840003650
	erreur_840003650 = i_PlvMessEmettre(6402,2,g_iartin,"",2,code_rejet_840003650, oiwtype_840003650, 0)
	SAUT STOCKE_ERRONE
FINSI

#Diwtype (DIWTYPE)
diwtype_840003650 = i_get_art_field(g_iartin, $TmmscNsn::Diwtype)
SI (diwtype_840003650 != 0 && diwtype_840003650 != 450 && diwtype_840003650/100 != 7 && diwtype_840003650 != 470 && diwtype_840003650 != 472)
ALORS
	code_rejet_840003650 = ERR_SYNTAX_840003650 + EFFICACE_840003650
	erreur_840003650 = i_PlvMessEmettre(6403,2,g_iartin,"",2,code_rejet_840003650, diwtype_840003650, 0)
	SAUT STOCKE_ERRONE
FINSI
#/QC883

#Success_indicator (champ : successIndic, variable : successindic) ok
successindic_840003650 = i_get_art_field(g_iartin, $TmmscNsn::SuccessIndic)
SI (successindic_840003650 != 128 && successindic_840003650 != 134 && successindic_840003650 != 302 && successindic_840003650 != 132 && successindic_840003650 != 135 &&  successindic_840003650 != 308 )
ALORS
	code_rejet_840003650 = ERR_SYNTAX_840003650 + EFFICACE_840003650
	erreur_840003650 = i_PlvMessEmettre(6404,2,g_iartin,"",2,code_rejet_840003650, successindic_840003650, 0)
	SAUT STOCKE_ERRONE
FINSI


#MsgId Ex : "0414100957100100000064001" zzzz=4001
# Evolution spec : verification si MsgId (partie zzzz) est une representation ascii d'un nombre decimal ou si zzzz = "0000"
# QC886
SI (
    i_get_art_fieldtab(g_iartin,$TmmscNsn::MsgId,21) < '0' || i_get_art_fieldtab(g_iartin,$TmmscNsn::MsgId,21) > '9' ||
    i_get_art_fieldtab(g_iartin,$TmmscNsn::MsgId,22) < '0' || i_get_art_fieldtab(g_iartin,$TmmscNsn::MsgId,22) > '9' ||
    i_get_art_fieldtab(g_iartin,$TmmscNsn::MsgId,23) < '0' || i_get_art_fieldtab(g_iartin,$TmmscNsn::MsgId,23) > '9' ||
    i_get_art_fieldtab(g_iartin,$TmmscNsn::MsgId,24) < '0' || i_get_art_fieldtab(g_iartin,$TmmscNsn::MsgId,24) > '9' 
   )
ALORS
	i_strcpy(pt_CHAMP_ERRONE_840003650,"")
	erreur_840003650 = i_get_art_str(g_iartin, $TmmscNsn::MsgId, pt_CHAMP_ERRONE_840003650)
	code_rejet_840003650 = ERR_SYNTAX_840003650 + EFFICACE_840003650
	i_get_sub_str(pt_CHAMP_ERRONE_840003650, 42, 49, pt_CHAMP_ERRONE_840003650)
	erreur_840003650 = i_PlvMessEmettre(6405,2,g_iartin,"",2,code_rejet_840003650, pt_CHAMP_ERRONE_840003650, 0)
	SAUT STOCKE_ERRONE
FINSI
#/QC886


# QC990 deplacement du test MsgSize==0 apres tests croises

#test du Format Msisdn ou mail ou short
# spec : FormatMsisdn
# spec : FormatMail
# spec : FormatLong
# spec : FormatNum

# calcul taille reelle de Oaddr (jusqu' a l'octet 0x00) et detection format mail
erreur_840003650 = i_get_art_str(g_iartin, $TmmscNsn::Oaddr, pt_Oaddr_840003650)
taille_840003650=i_strlen(pt_Oaddr_840003650)
indice_840003650 = 0
#QC875
b_MailOaddr_840003650 = 0
POINT Boucle_OaddrLg
SI (indice_840003650 < taille_840003650 && i_strplcmp(pt_Oaddr_840003650,"00", indice_840003650, 2) != 0)
ALORS
	SI (i_strplcmp(pt_Oaddr_840003650,"40", indice_840003650, 2) == 0)
	ALORS
		b_MailOaddr_840003650 = 1
	FINSI
	indice_840003650 = indice_840003650 + 2
	SAUT Boucle_OaddrLg
FINSI
taille_Oaddr_840003650 = indice_840003650
#trace1("<<<__LINE__<<<__FILE__<<< taille_Oaddr=<%d>",taille_Oaddr)

# calcul taille reelle de Daddr (jusqu' a l'octet 0x00) et detection format mail
erreur_840003650 = i_get_art_str(g_iartin, $TmmscNsn::Daddr, pt_Daddr_840003650)
taille_840003650=i_strlen(pt_Daddr_840003650)
indice_840003650 = 0
b_MailDaddr_840003650 = 0
POINT Boucle_DaddrLg
SI (indice_840003650 < taille_840003650 && i_strplcmp(pt_Daddr_840003650,"00", indice_840003650, 2) != 0)
ALORS
	SI (i_strplcmp(pt_Daddr_840003650,"40", indice_840003650, 2) == 0)
	ALORS
		b_MailDaddr_840003650 = 1
	FINSI
	indice_840003650 = indice_840003650 + 2
	SAUT Boucle_DaddrLg
FINSI
taille_Daddr_840003650 = indice_840003650
#trace1("<<<__LINE__<<<__FILE__<<< taille_Daddr=<%d>",taille_Daddr)
#/QC875

# OADDR (Oaddr)
#QC887
SI ( i_get_art_fieldtab(g_iartin,$TmmscNsn::Oaddr,0) != '+' &&  b_MailOaddr_840003650 == 0 )
ALORS
	trace("Le champ Oaddr ne commence pas par + et n'est pas une adresse mail")
	indice_octet_840003650 = 0
	POINT BOUCLE_Oaddr
	SI (indice_octet_840003650 < taille_Oaddr_840003650 && i_get_art_fieldtab(g_iartin,$TmmscNsn::Oaddr,indice_octet_840003650) != 0x00)
	ALORS
		SI (i_get_art_fieldtab(g_iartin,$TmmscNsn::Oaddr,indice_octet_840003650) < '0'
			|| i_get_art_fieldtab(g_iartin,$TmmscNsn::Oaddr,indice_octet_840003650) > '9')
		ALORS
			SAUT FIN_BOUCLE_Oaddr
		FINSI
		indice_octet_840003650 = indice_octet_840003650 + 1
		SAUT BOUCLE_Oaddr
	FINSI
	POINT FIN_BOUCLE_Oaddr
	SI (indice_octet_840003650 < 1 || indice_octet_840003650 > 5 || i_get_art_fieldtab(g_iartin,$TmmscNsn::Oaddr, 0) == 0x00)
	ALORS          
		trace(" TmmscNsn : Oaddr n'est pas un numero court : 5 digits maxi => Envoi en errone ")
		code_rejet_840003650 = ERR_SYNTAX_840003650 + EFFICACE_840003650
		erreur_840003650 = i_PlvMessEmettre(6406,2,g_iartin,"",2,code_rejet_840003650, indice_octet_840003650, 0)
		SAUT STOCKE_ERRONE
	FINSI
FINSI


# DADDR (Daddr)
SI ( i_get_art_fieldtab(g_iartin,$TmmscNsn::Daddr,0) != '+' &&  b_MailDaddr_840003650 == 0 )
ALORS
	trace("Le champ Daddr ne commence pas par + et n'est pas une adresse mail")
	indice_octet_840003650 = 0
	POINT BOUCLE_Daddr
	SI (indice_octet_840003650 < taille_Daddr_840003650 && i_get_art_fieldtab(g_iartin,$TmmscNsn::Daddr,indice_octet_840003650) != 0x00)
	ALORS
		SI (i_get_art_fieldtab(g_iartin,$TmmscNsn::Daddr,indice_octet_840003650) < '0'
			|| i_get_art_fieldtab(g_iartin,$TmmscNsn::Daddr,indice_octet_840003650) > '9')
		ALORS
			SAUT FIN_BOUCLE_Daddr
		FINSI
		indice_octet_840003650 = indice_octet_840003650 + 1
		SAUT BOUCLE_Daddr
	FINSI
	POINT FIN_BOUCLE_Daddr
	SI (indice_octet_840003650 < 1 || indice_octet_840003650 > 5 || i_get_art_fieldtab(g_iartin,$TmmscNsn::Daddr, 0) == 0x00)
	ALORS          
		trace(" TmmscNsn : Daddr n'est pas un numero court : 5 digits maxi => Envoi en errone ")
		code_rejet_840003650 = ERR_SYNTAX_840003650 + EFFICACE_840003650
		erreur_840003650 = i_PlvMessEmettre(6407,2,g_iartin,"",2,code_rejet_840003650, indice_octet_840003650, 0)
		SAUT STOCKE_ERRONE
	FINSI
FINSI
#/QC887

#################################################################
# Variables fonctionnelles
# et
# Controles croises des champs
#################################################################

#Calcul variable fonctionnelle Recordtype

#successindic et oiwtype ok
SI (successindic_840003650 == 128)
ALORS
	SI (oiwtype_840003650 == 0)
	ALORS
		RecordType_840003650 = 0x30
	SINON
		SI (oiwtype_840003650 == 471)
		ALORS
			RecordType_840003650 = 0x32
		SINON
			SI (oiwtype_840003650 == 451)
			ALORS
				RecordType_840003650 = 0x34
			SINON
				SI (oiwtype_840003650 / 100 == 7)
				ALORS
					RecordType_840003650 = 0x36
				SINON
# QC966
					SI (oiwtype_840003650 == 333)
					ALORS
						SAUT STOCKE_ELIMINE
					SINON
						code_rejet_840003650 = ERR_CROISE_840003650
						erreur_840003650 = i_PlvMessEmettre(6408,2,g_iartin,"",2,code_rejet_840003650, oiwtype_840003650, 0)
						SAUT STOCKE_ERRONE
					FINSI
				FINSI
			FINSI
		FINSI
	FINSI
FINSI

#successindic et diwtype ok
SI (successindic_840003650 == 134 || successindic_840003650 == 132 || successindic_840003650 == 135 || successindic_840003650 == 302 || successindic_840003650 == 308)
ALORS
	SI (diwtype_840003650 == 0)
	ALORS
		RecordType_840003650 = 0x31
	SINON
		SI (diwtype_840003650 == 470)
		ALORS
			RecordType_840003650 = 0x33
		SINON
			SI (diwtype_840003650 == 450)
			ALORS
				RecordType_840003650 = 0x35
			SINON
				SI (diwtype_840003650 / 100 == 7)
				ALORS
					RecordType_840003650 = 0x37
				SINON
# QC966
					SI (diwtype_840003650 == 472)
					ALORS
						SAUT STOCKE_ELIMINE
					SINON
						code_rejet_840003650 = ERR_CROISE_840003650
						erreur_840003650 = i_PlvMessEmettre(6411,2,g_iartin,"",2,code_rejet_840003650, diwtype_840003650, 0)
						SAUT STOCKE_ERRONE
					FINSI
				FINSI
			FINSI
		FINSI
	FINSI
FINSI


#QC1006 suppression controle longueur message
##QC1003 + modif numero d'alarme 6410
#msglen = i_get_art_field(g_iartin, $TmmscNsn::MsgLen)
#SI (msglen == 0)
#ALORS
#	code_rejet = ERR_SYNTAX + EFFICACE
#	erreur = i_PlvMessEmettre(6410,2,g_iartin,"",2,code_rejet, msglen, 0)
#	SAUT STOCKE_ERRONE
#FINSI
##/QC1003
##/QC1006

trace("**** TMMSC-NSN : fin traitement ok ****")

# Compteur 1501 (par Type/EEC/Jour)
erreur_840003650 = i_incr_cpt(1501, RecordType_840003650, g_ieec, 0, i_DHgetLocalTime(4, 7, i_date_audit()), 1)

erreur_840003650 = i_stocke_art(g_iartin,0,PT_OK,0)
RETOUR TRAIT_OK


POINT	STOCKE_ERRONE
erreur_840003650 = i_make_art_rej(g_iartin, g_iartout, code_rejet_840003650)
erreur_840003650 = i_stocke_art(g_iartout,0,PT_ERRONE,0)
RETOUR TRAIT_OK


POINT STOCKE_ELIMINE
erreur_840003650 = i_stocke_art(g_iartin,0,PT_DIVERS,0)
trace("TmmscNsn : Article elimine  => Fin de traitement")
RETOUR TRAIT_OK
#--------------------------------------------- Fin TmmscNsn_trt.src -----------------------------
