FVERS = 2
REFOBJET : ID = 840003650 ; ID_INIT = 840003395 ; NOM = TmmscNsn ; VERSION = T10 ; DATE = 10/10/13-14:26:11 ( 1381415171 ) ; CAT = 7 ; ETAT = 0 ; NB_FILS =1 ; ID_FILS = 780042430
ID_EST = 840000085
COMMENT = "03/02/2012 DECI -JLG- G3R5 lot2 QC1006 : retour arriere QC1003"
CREATEUR = jlgambin
# DEBUT_CORPS
PCODE_PERE=mms_Nokia_R2
############################################################################
# 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
############################################################################

DEFINITION ERR_SYNTAX 0x5040
DEFINITION ERR_CROISE 0x50F0

REGISTRE ENTIER erreur
REGISTRE ENTIER taille
REGISTRE ENTIER taille_Oaddr
REGISTRE ENTIER taille_Daddr
REGISTRE ENTIER indice_octet
REGISTRE ENTIER code_rejet
REGISTRE ENTIER EFFICACE
REGISTRE ENTIER date_DC
REGISTRE ENTIER RecordType
REGISTRE ENTIER successindic
REGISTRE ENTIER oiwtype
REGISTRE ENTIER diwtype
#REGISTRE ENTIER msgsize
#REGISTRE ENTIER msglen
REGISTRE ENTIER b_MailOaddr
REGISTRE ENTIER b_MailDaddr
REGISTRE ENTIER indice

REGISTRE POINTEUR pt_CHAMP_ERRONE
REGISTRE POINTEUR pt_Oaddr
REGISTRE POINTEUR pt_Daddr

RecordType = 0

pt_CHAMP_ERRONE = "pt_CHAMP_ERRONE55555555555555555555555555555555555666666666666666"
pt_Oaddr = "pt_Oaddr333333333333333333333333333333333333333333333333333333333333333333333333333"
pt_Daddr = "pt_Daddr444444444444444444444444444444444444444444444444444444444444444444444444444"


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

# i_strcpy(pt_CHAMP_ERRONE,"") , inutile realise plus bas
i_strcpy(pt_Oaddr,"")
i_strcpy(pt_Daddr,"")


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

# Duree = 0 (toujours nulle)

# DATE_DC (date_DC extraite du champ Loggingtime) a voir
date_DC = i_get_art_field(g_iartin, $TmmscNsn::ddebut)
SI (date_DC == -1)
ALORS
	code_rejet = ERR_SYNTAX + EFFICACE
	erreur = i_PlvMessEmettre(6401,2,g_iartin,"",2,code_rejet, date_DC, 0)
	SAUT STOCKE_ERRONE
FINSI

#/QC883
#Oiwtype (OIWTYPE)
oiwtype = i_get_art_field(g_iartin, $TmmscNsn::Oiwtype)
SI (oiwtype != 0 && oiwtype != 451 && oiwtype/100 != 7 && oiwtype != 471 && oiwtype != 333)
ALORS
	code_rejet = ERR_SYNTAX + EFFICACE
	erreur = i_PlvMessEmettre(6402,2,g_iartin,"",2,code_rejet, oiwtype, 0)
	SAUT STOCKE_ERRONE
FINSI

#Diwtype (DIWTYPE)
diwtype = i_get_art_field(g_iartin, $TmmscNsn::Diwtype)
SI (diwtype != 0 && diwtype != 450 && diwtype/100 != 7 && diwtype != 470 && diwtype != 472)
ALORS
	code_rejet = ERR_SYNTAX + EFFICACE
	erreur = i_PlvMessEmettre(6403,2,g_iartin,"",2,code_rejet, diwtype, 0)
	SAUT STOCKE_ERRONE
FINSI
#/QC883

#Success_indicator (champ : successIndic, variable : successindic) ok
successindic = i_get_art_field(g_iartin, $TmmscNsn::SuccessIndic)
SI (successindic != 128 && successindic != 134 && successindic != 302 && successindic != 132 && successindic != 135 &&  successindic != 308 )
ALORS
	code_rejet = ERR_SYNTAX + EFFICACE
	erreur = i_PlvMessEmettre(6404,2,g_iartin,"",2,code_rejet, successindic, 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,"")
	erreur = i_get_art_str(g_iartin, $TmmscNsn::MsgId, pt_CHAMP_ERRONE)
	code_rejet = ERR_SYNTAX + EFFICACE
	i_get_sub_str(pt_CHAMP_ERRONE, 42, 49, pt_CHAMP_ERRONE)
	erreur = i_PlvMessEmettre(6405,2,g_iartin,"",2,code_rejet, pt_CHAMP_ERRONE, 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 = i_get_art_str(g_iartin, $TmmscNsn::Oaddr, pt_Oaddr)
taille=i_strlen(pt_Oaddr)
indice = 0
#QC875
b_MailOaddr = 0
POINT Boucle_OaddrLg
SI (indice < taille && i_strplcmp(pt_Oaddr,"00", indice, 2) != 0)
ALORS
	SI (i_strplcmp(pt_Oaddr,"40", indice, 2) == 0)
	ALORS
		b_MailOaddr = 1
	FINSI
	indice = indice + 2
	SAUT Boucle_OaddrLg
FINSI
taille_Oaddr = indice
#trace1("<<<__LINE__<<<__FILE__<<< taille_Oaddr=<%d>",taille_Oaddr)

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

# OADDR (Oaddr)
#QC887
SI ( i_get_art_fieldtab(g_iartin,$TmmscNsn::Oaddr,0) != '+' &&  b_MailOaddr == 0 )
ALORS
	trace("Le champ Oaddr ne commence pas par + et n'est pas une adresse mail")
	indice_octet = 0
	POINT BOUCLE_Oaddr
	SI (indice_octet < taille_Oaddr && i_get_art_fieldtab(g_iartin,$TmmscNsn::Oaddr,indice_octet) != 0x00)
	ALORS
		SI (i_get_art_fieldtab(g_iartin,$TmmscNsn::Oaddr,indice_octet) < '0'
			|| i_get_art_fieldtab(g_iartin,$TmmscNsn::Oaddr,indice_octet) > '9')
		ALORS
			SAUT FIN_BOUCLE_Oaddr
		FINSI
		indice_octet = indice_octet + 1
		SAUT BOUCLE_Oaddr
	FINSI
	POINT FIN_BOUCLE_Oaddr
	SI (indice_octet < 1 || indice_octet > 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 = ERR_SYNTAX + EFFICACE
		erreur = i_PlvMessEmettre(6406,2,g_iartin,"",2,code_rejet, indice_octet, 0)
		SAUT STOCKE_ERRONE
	FINSI
FINSI


# DADDR (Daddr)
SI ( i_get_art_fieldtab(g_iartin,$TmmscNsn::Daddr,0) != '+' &&  b_MailDaddr == 0 )
ALORS
	trace("Le champ Daddr ne commence pas par + et n'est pas une adresse mail")
	indice_octet = 0
	POINT BOUCLE_Daddr
	SI (indice_octet < taille_Daddr && i_get_art_fieldtab(g_iartin,$TmmscNsn::Daddr,indice_octet) != 0x00)
	ALORS
		SI (i_get_art_fieldtab(g_iartin,$TmmscNsn::Daddr,indice_octet) < '0'
			|| i_get_art_fieldtab(g_iartin,$TmmscNsn::Daddr,indice_octet) > '9')
		ALORS
			SAUT FIN_BOUCLE_Daddr
		FINSI
		indice_octet = indice_octet + 1
		SAUT BOUCLE_Daddr
	FINSI
	POINT FIN_BOUCLE_Daddr
	SI (indice_octet < 1 || indice_octet > 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 = ERR_SYNTAX + EFFICACE
		erreur = i_PlvMessEmettre(6407,2,g_iartin,"",2,code_rejet, indice_octet, 0)
		SAUT STOCKE_ERRONE
	FINSI
FINSI
#/QC887

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

#Calcul variable fonctionnelle Recordtype

#successindic et oiwtype ok
SI (successindic == 128)
ALORS
	SI (oiwtype == 0)
	ALORS
		RecordType = 0x30
	SINON
		SI (oiwtype == 471)
		ALORS
			RecordType = 0x32
		SINON
			SI (oiwtype == 451)
			ALORS
				RecordType = 0x34
			SINON
				SI (oiwtype / 100 == 7)
				ALORS
					RecordType = 0x36
				SINON
# QC966
					SI (oiwtype == 333)
					ALORS
						SAUT STOCKE_ELIMINE
					SINON
						code_rejet = ERR_CROISE
						erreur = i_PlvMessEmettre(6408,2,g_iartin,"",2,code_rejet, oiwtype, 0)
						SAUT STOCKE_ERRONE
					FINSI
				FINSI
			FINSI
		FINSI
	FINSI
FINSI

#successindic et diwtype ok
SI (successindic == 134 || successindic == 132 || successindic == 135 || successindic == 302 || successindic == 308)
ALORS
	SI (diwtype == 0)
	ALORS
		RecordType = 0x31
	SINON
		SI (diwtype == 470)
		ALORS
			RecordType = 0x33
		SINON
			SI (diwtype == 450)
			ALORS
				RecordType = 0x35
			SINON
				SI (diwtype / 100 == 7)
				ALORS
					RecordType = 0x37
				SINON
# QC966
					SI (diwtype == 472)
					ALORS
						SAUT STOCKE_ELIMINE
					SINON
						code_rejet = ERR_CROISE
						erreur = i_PlvMessEmettre(6411,2,g_iartin,"",2,code_rejet, diwtype, 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 = i_incr_cpt(1501, RecordType, 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_ERRONE
erreur = i_make_art_rej(g_iartin, g_iartout, code_rejet)
erreur = i_stocke_art(g_iartout,0,PT_ERRONE,0)
RETOUR TRAIT_OK


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