DEFINITION Multidistribution_Non_660004648 0
DEFINITION DISTRIBUTION_AIG_IMSI_660004648 2
DEFINITION C_Tdpv_660004648 "Tdpvgsm"
DEFINITION C_Article_660004648 "Tussd"
DEFINITION NUMTAB_660004648 4
DEFINITION TRAI_KO_660004648 -1
REGISTRE ENTIER date_plat_660004648
REGISTRE ENTIER date_fin_660004648
REGISTRE ENTIER erreur_660004648
REGISTRE ENTIER EFFICACE_660004648
REGISTRE ENTIER code_errone_660004648
REGISTRE ENTIER res_660004648
REGISTRE ENTIER date_audit_660004648
REGISTRE ENTIER longueur_660004648
REGISTRE ENTIER date_660004648
REGISTRE ENTIER ICAR_ABS_660004648
REGISTRE ENTIER index_660004648
REGISTRE ENTIER indx_660004648
REGISTRE ENTIER duree_660004648
REGISTRE ENTIER VAL_660004648
REGISTRE ENTIER MOD_660004648
REGISTRE ENTIER type_cra_660004648
REGISTRE POINTEUR pt_idemet_660004648
######################################################################
# DISTRIBUTION	Tussd_dist.src
#	Article Tussd 
#
######################################################################
#	HISTORIQUE
# creation le 19/09/2005
# 19/04/06 FO 180 dump article
# 19/04/06 FO 181 stockage en errone
# 20/04/06 FO 183 modif spec date
# 12/05/06 PSA Appel fonction i_incr_redist_dist pour compteur redistribution
# 01/09/06 JLG report FO CaME : 240, 242
# 09/08/07 Creation enveloppe optionnelle E_Redist2
# 21/12/2010 - BEA - G3R1 lot4 Verification/Correction des variables (constantes, entiers, pointeurs)
# 29/02/2012 - JLG -G3R6 QC1005 modif alarme retour aiguillage
# 02/07/2014 - JLG -G5R1 QC1405, champ eec du DPV si g_ieec > 500
#####################################################################





EFFICACE_660004648=2

##############################################################################
# ALLOCATION DES POINTEURS
##############################################################################

pt_idemet_660004648	= "4444444444444444444444444444444444444444444444444444444444444444444444444"

trace("[Tussd_dis] Debut Pcode Tussd distribution")
#erreur = i_fdump_art(g_iartin)

SI (i_LireRedistCpt() == 0)
ALORS
	erreur_660004648 = i_add_opt( "E_Redistri2" )
FINSI
erreur_660004648 = i_set_attr_val_n( $E_Redistri2::EnvoiRedis, 0)



##############################################################################
# Variables fonctionnelles
##############################################################################
########################################################
########### Date_Audit
date_audit_660004648=i_date_audit()
#trace1("[Tussd_dis] date_audit=%x",date_audit)

#############################
# REDISTRIBUTION
#############################
#Compteur de redistrib
##################################################################################
# la provenance de l'article 
##################################################################################

# FE_0028 comptabilisation des CRAs issus de la redistribution
date_fin_660004648=i_get_art_field(g_iartin,$Tussd::dfin)
erreur_660004648= i_incr_redist_dist_660004265(date_fin_660004648)


##############################################################################
# NORMALISATION et TRONCATURE
##############################################################################

##############################################################################
# VALORISATION
##############################################################################

##############################################################################
# Conversion DPV3.3
##############################################################################

############################################################################
# Duplication Tdpv33 (g_iartout)
############################################################################
#Duplication article d entree vers DPV TLV

SI (i_dup_art_tab( g_iartin, g_iartout, C_Tdpv_660004648))
ALORS
	#trace("ERREUR de duplication")
	code_errone_660004648 = 0xA0D0
	code_errone_660004648 = code_errone_660004648 + EFFICACE_660004648
	erreur_660004648 = i_PlvMessEmettre(6204,2,g_iartin,"",2,code_errone_660004648,C_Tdpv_660004648,0)
	SAUT DISTRI_ERR
FINSI

erreur_660004648 = i_cree_art("Conv_URS",g_iartout10)

# V3t1.3
# V3t1.3 idemet (defaut table dup)
########### ICAR_ABS
date_660004648 =i_get_art_field(g_iartin,$Tussd::DATE)
ICAR_ABS_660004648 =i_date_platine(g_ieec,g_iartin,date_660004648)

############ V3t1.3 idemet (defaut table dup)

i_strcpy(pt_idemet_660004648, "")
i_strcpy(pt_idemet_660004648, i_get_tab_field("VariableContexte", ICAR_ABS_660004648, "AX_IDEMET_USSD"))

SI (i_strcmp(pt_idemet_660004648,g_inull)) != 0
ALORS
	longueur_660004648= 0
	longueur_660004648=i_strlen(pt_idemet_660004648)
	erreur_660004648 = i_set_art_str(g_iartout10,$Conv_URS::RepTab, pt_idemet_660004648)
#	trace2("[Tussd_dis] *****RepTab***=%s",pt_idemet,"")
	index_660004648=0
	POINT BOUCLE0
	SI (index_660004648 < longueur_660004648)
	ALORS
		g_iartout10.ax_idemet[index_660004648]=g_iartout10.RepTab[index_660004648] - 0x30
		SI (g_iartout10.RepTab[index_660004648] > 0x40)
		ALORS
			g_iartout10.ax_idemet[index_660004648]=g_iartout10.RepTab[index_660004648] - 0x37
		FINSI
#		trace1("index=%d",index)
#		trace1("g_iartout10.ax_idemet=%x",g_iartout10.RepTab[index] - 0x30)
		index_660004648=index_660004648+1
		SAUT BOUCLE0
	FINSI
	erreur_660004648 = i_dup_chp_1val(g_iartout10, g_iartout, $Conv_URS::ax_idemet, $Tdpvgsm::idemet)
SINON
#	pt_idemet : "33015000000FFFFFFF"
#	longueur = g_iartout.idemet!NELEM
	g_iartout.idemet[0]= 0x3
	g_iartout.idemet[1]= 0x3
	g_iartout.idemet[2]= 0x0
	g_iartout.idemet[3]= 0x1
	g_iartout.idemet[4]= 0x5
	index_660004648 = 5
	POINT BOUCLE
	SI index_660004648 < 11
	ALORS
		g_iartout.idemet[index_660004648]= 0x0
		index_660004648 = index_660004648 + 1
		SAUT BOUCLE
	FINSI
FINSI

# V3t1.5  date
date_660004648 = i_get_art_field(g_iartin,$Tussd::DATE)
ICAR_ABS_660004648 = i_DHgetLocalTime(NUMTAB_660004648, 7, date_660004648)
erreur_660004648 = i_set_art_field(g_iartout, $Tdpvgsm::DATE,ICAR_ABS_660004648)

# V3t1.6
duree_660004648 = i_get_art_field(g_iartin, $Tussd::DUREE)
erreur_660004648 = i_set_art_field(g_iartout, $Tdpvgsm::DUREE,duree_660004648)

# V3t1.16


#V3T30.1 date audit
# date_plat
date_plat_660004648 = i_DHgetLocalTime(NUMTAB_660004648, 7, date_audit_660004648)
#trace1("======== date_plat = %d ========",date_plat)
erreur_660004648 = i_set_art_field(g_iartout, $Tdpvgsm::timeInCE,date_plat_660004648)

#V3T30.2 EEC
# QC1405
SI (g_ieec > 500)
ALORS
  erreur_660004648 = i_set_art_field(g_iartout, $Tdpvgsm::eec, g_ieec - 500)
SINON
  erreur_660004648 = i_set_art_field(g_iartout, $Tdpvgsm::eec, g_ieec)
FINSI
#/QC1405

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

# T3t2
# idpart <> CalledMsisdn
#trace( " ============= CalledMsisdn => idpart " )
#trace("============Boucle1=================")
index_660004648 = 0
indx_660004648 = 0
#trace1( " ============= CalledTab = %x", g_iartin.CalledTab[index])
SI g_iartin.CalledTab[index_660004648] == 0x51
ALORS
	index_660004648=index_660004648 + 1
	#trace1(" index : %d",index)
	SI g_iartin.CalledTab[index_660004648] == 0x39
	ALORS
		index_660004648=index_660004648 + 1
		#trace1(" index : %d",index)
		SI g_iartin.CalledTab[index_660004648] == 0x39
		ALORS
			index_660004648=index_660004648 + 1
			#trace1(" index : %d",index)
			SI g_iartin.CalledTab[index_660004648] == 0x23 || g_iartin.CalledTab[index_660004648] == 0x2A
			ALORS
				SI g_iartin.CalledTab[index_660004648] == 0x23
				ALORS
					VAL_660004648=0xC
				SINON
					SI g_iartin.CalledTab[index_660004648] == 0x2A
					ALORS
						VAL_660004648=0xB
					FINSI
				FINSI
				g_iartout.idpart[indx_660004648]=VAL_660004648
				index_660004648=index_660004648 + 1
				indx_660004648 = indx_660004648 +1
				#trace1(" index : %d",index)
				#trace1(" indx : %d",indx)
				POINT BOUCLE2
				SI g_iartin.CalledTab[index_660004648] >= 0x30 && g_iartin.CalledTab[index_660004648] <= 0x39
				ALORS
					#trace1(" indx : %d",indx)
					g_iartout.idpart[indx_660004648]=g_iartin.CalledTab[index_660004648]- 0x30
					index_660004648=index_660004648 + 1
					indx_660004648 = indx_660004648 +1
					#trace1( " ============= CalledTab = %x", g_iartin.CalledTab[index])
					#trace1(" index : %d",index)
					#trace1( " ============= CalledTab = %x", g_iartout.idpart[indx])
					SAUT BOUCLE2
				SINON
					g_iartout.idpart[indx_660004648]=VAL_660004648
				FINSI
			FINSI
		FINSI
	FINSI
#trace1(" indx : %d",indx)
FINSI
#indx=indx - 1
MOD_660004648=indx_660004648%2
SI MOD_660004648!=0
ALORS
	VAL_660004648=((index_660004648/2) + 1)*8
	#trace1(" VAL1 : %d",VAL)
SINON
	VAL_660004648=(index_660004648/2)*8
	#trace1(" VAL2 : %d",VAL)
FINSI
#trace1( " VAL : %d",VAL)
erreur_660004648 = i_resize_tlv(g_iartout, "T3t2", "idpart", VAL_660004648)

# T3t4
# MSISDN <> CallingMsisdn
#trace( " =============CallingMsisdn => idpart " )
SI ( !i_valid_field_n(g_iartin, $Tussd::CallingMsisdn))
ALORS
	erreur_660004648 = i_supprChamp(g_iartout, "T3t4")
SINON
#	index=0
#	POINT BOUCLE1
#	#trace1( " =============CallingMsisdn = %x", g_iartin.CallingMsisdn[index])
#	SI (g_iartin.CallingMsisdn[index] >= 0x0 && g_iartin.CallingMsisdn[index] <= 0x9)
#	# || g_iartin.CallingMsisdn[index] == 0x41 || g_iartin.CallingMsisdn[index] == 0x4A || g_iartin.CallingMsisdn[index] == 0x53 || g_iartin.CallingMsisdn[index] == 0x43 
#	ALORS
#		SI (g_iartin.CallingMsisdn[index] >= 0x30 && g_iartin.CallingMsisdn[index] <= 0x39)
#		ALORS
#			g_iartout.MSISDN[index]=g_iartin.CallingMsisdn[index]- 0x30
#		SINON
#			SI g_iartin.CallingMsisdn[index] == 0x41
#			ALORS
#				g_iartout.MSISDN[index]= 0xB
#			SINON
#				SI g_iartin.CallingMsisdn[index] == 0x4A
#				ALORS
#					g_iartout.MSISDN[index]= 0xC
#				SINON
#					SI g_iartin.CallingMsisdn[index] == 0x53
#					ALORS
#						g_iartout.MSISDN[index]= 0xD
#					SINON
#						SI g_iartin.CallingMsisdn[index] == 0x43
#						ALORS
#							g_iartout.MSISDN[index]= 0xE
#						FINSI
#					FINSI
#				FINSI
#			FINSI
#		FINSI
#		index=index+1
#		#trace1(" index : %d",index)
#		SAUT BOUCLE1
#	FINSI
	index_660004648 = g_iartout.MSISDN!NELEM
	#trace1(" MOD = %d",MOD)
	MOD_660004648 = index_660004648%2
	#trace1(" MOD = %d",MOD)
	SI MOD_660004648!=0
	ALORS
		VAL_660004648=((index_660004648/2) + 1)*8
		#trace1(" VAL1 : %d",VAL)
	SINON
		VAL_660004648=(index_660004648/2)*8
		#trace1(" VAL2 : %d",VAL)
	FINSI
#	trace1( " VAL : %d",VAL)
	erreur_660004648 = i_resize_tlv(g_iartout, "T3t4", "MSISDN", VAL_660004648)
FINSI

##############################################################################
# Critere de distribution
##############################################################################

#######################################
# Appel fonction distribution
#######################################
#erreur = i_fdump_art(g_iartout)

erreur_660004648 = aiguillage2_660004590 (g_iartin, g_iartout, DISTRIBUTION_AIG_IMSI_660004648, Multidistribution_Non_660004648)
SI (erreur_660004648 == TRAI_KO_660004648)
ALORS
# QC1005
	trace("<<<__LINE__<<<__FILE__<<< Erreur retour fonction aiguillage2")
#	code_errone = 0xA0B0
#	code_errone = code_errone + EFFICACE
#	type_cra=i_get_art_field(g_iartout,$Tdpvgsm::type)
#	erreur = i_PlvMessEmettre(7500,2,g_iartin,"",3,code_errone,C_Article,type_cra)
	SAUT DISTRI_ERR
FINSI

RETOUR TRAIT_OK

##############################################################################
# Stockage en Errone
##############################################################################

POINT DISTRI_ERR
POINT   STOCKE_ERRONE

trace( "Stockage en errone de distribution")
res_660004648 = i_make_art_rej(g_iartin, g_iartout8, 0)
res_660004648 = i_stocke_art( g_iartout8, 0, PT_ERRONE, 0)

RETOUR TRAIT_OK

##############################################################################
# Stockage en Elimine Divers
##############################################################################

POINT STOCKE_DIV

trace( "Pcode de traitement   Stockage en DIVERS" )

erreur_660004648 = i_stocke_art( g_iartin, 0, PT_DIVERS, 0 )


RETOUR TRAIT_OK

#---------------------------------------FIN Tussd_dis.src-------------------
