# Fonction PCODE ID = 860026233
REGISTRE ENTIER ic_num_demandeur
REGISTRE ENTIER PrefixeTrans
REGISTRE ENTIER ETSI_I
REGISTRE ENTIER ETSI_N
REGISTRE ENTIER TransG
REGISTRE ENTIER ic_num_demande
REGISTRE ARTOBJ article_in
############################################################################
#
# Nom du fichier: Extraction_STP.src
# 	Retourne pour le numero demande le transporteur correspondant (France Telecom ou autre)
#   (Renvoie la valeur E du numero (premier chiffre) ou la valeur XY caracteristique du transporteur )
#
# ENTIER E =Extraction_STP( ARTOBJ article,
#		  	    ENTIER indice_numero_demande,
#			    ENTIER TransG,
#			    ENTIER ETSI_N,
#			    ENTIER ETSI_I,
#			    ENTIER PrefixeTrans,
#			    ENTIER indice_numero_demandeur )
#
#      avec : TransG, ETSI_N, ETSI_I des booleens ( 1 pour vrai )
#            et PrefixeTrans le prefixe transporteur s'il est deja connu (<0 sinon)
#
# 09/04/2001                  Creation
# Version :                   00.00
#
############################################################################

#---------------------------------------------------------------------------
# CONSTANTES LOCALES
#---------------------------------------------------------------------------


#---------------------------------------------------------------------------
# VARIABLES LOCALES
#---------------------------------------------------------------------------


# Variables pour la reception des arguments de la fonction
# TransG, ETSI_N, ETSI_I sont en fait des booleens

# 1er chiffre du numero demande
REGISTRE ENTIER	        U

# Indice du 1er chiffre du numero demande dans le numero demande
# (en fait on ne fait aucune modification du numero demande [ajout ou
# suppression de quartet] mais on "marque" la position du 1er chiffre,
# qui peut se trouver en position 1, 4 ou 6...)
REGISTRE ENTIER         indice

# XY d'un numero debutant par 16XY
REGISTRE ENTIER         XY

# Divers
REGISTRE ENTIER		erreur
REGISTRE POINTEUR       p_buffer

#---------------------------------------------------------------------------
# DEBUT DES TRAITEMENTS
#---------------------------------------------------------------------------

ic_num_demandeur = depilerENTIER()
PrefixeTrans = depilerENTIER()
ETSI_I = depilerENTIER()
ETSI_N = depilerENTIER()
TransG = depilerENTIER()
ic_num_demande = depilerENTIER()
article_in = depilerARTOBJ()
trace("APPEL Extraction_STP")

#
# recuperation des valeurs d'entree
#    

trace1( "  ic_num_demande = <%d>", ic_num_demande )
trace1( "          TransG = <%d>", TransG  )
trace1( "          ETSI_N = <%d>", ETSI_N )
trace1( "          ETSI_I = <%d>", ETSI_I )
trace1( "    PrefixeTrans = <%d>", PrefixeTrans)
trace1( "ic_num_demandeur = <%d>", ic_num_demandeur)


#########################################################################################
# Numero demandeur debutant par 262, 590, 594 ou 596 et qui comporte moins de 10 chiffres
#########################################################################################
SI( ( i_get_art_fieldlength( article_in, ic_num_demande ) < 10 )
    &&(   (      (i_get_art_fieldtab( article_in, ic_num_demandeur, 0 ) == 0x2)
              && (i_get_art_fieldtab( article_in, ic_num_demandeur, 1 ) == 0x6)
              && (i_get_art_fieldtab( article_in, ic_num_demandeur, 2 ) == 0x2)  )

        ||(      (i_get_art_fieldtab( article_in, ic_num_demandeur, 0 ) == 0x5)
   	      && (i_get_art_fieldtab( article_in, ic_num_demandeur, 1 ) == 0x9)
	      && (    (i_get_art_fieldtab( article_in, ic_num_demandeur, 2 ) == 0x0)
	   	   || (i_get_art_fieldtab( article_in, ic_num_demandeur, 2 ) == 0x4)
		   || (i_get_art_fieldtab( article_in, ic_num_demandeur, 2 ) == 0x6) ) ) ) )
ALORS
	#trace( "Numero demandeur debutant par 262, 590, 594 ou 596 et qui comporte moins de 10 chiffres" )
	RETOUR 0
FINSI


# initialisation indice et 1er chiffre du numero demande
indice  = 0
U       = -1	

###########################################################
# Numero demandeur transgroupe ?
###########################################################
SI( TransG )
ALORS
	# Numero demandeur transgroupe
	#trace( "Le numero demandeur est transgroupe" )
	
	# => "simlation automate T1" ( appels debutants par 036510, 0*31*0 ou simplement 0 )
	SI( i_get_art_fieldtab( article_in, ic_num_demande, 0 ) == 0x0 )
	ALORS
		trace( "Appel debutant par 0" )
		SI( (   (i_get_art_fieldtab( article_in, ic_num_demande, 1 ) == 0x3)
		     && (i_get_art_fieldtab( article_in, ic_num_demande, 2 ) == 0x6)
		     && (i_get_art_fieldtab( article_in, ic_num_demande, 3 ) == 0x5)
		     && (i_get_art_fieldtab( article_in, ic_num_demande, 4 ) == 0x1)
	     	     && (i_get_art_fieldtab( article_in, ic_num_demande, 5 ) == 0x0)  )
	   	    ||(   (i_get_art_fieldtab( article_in, ic_num_demande, 1 ) == 0xB)
	      	       && (i_get_art_fieldtab( article_in, ic_num_demande, 2 ) == 0x3)
	      	       && (i_get_art_fieldtab( article_in, ic_num_demande, 3 ) == 0x1)
		       && (i_get_art_fieldtab( article_in, ic_num_demande, 4 ) == 0xB)
	               && (i_get_art_fieldtab( article_in, ic_num_demande, 5 ) == 0x0)  ) )
		ALORS	
			trace( "Appel debutant par 036510 ou 0*31*0 => retrait 6 premiers chiffres" )
	
			# "Retrait" des 6 premiers chiffres du numero demandeur
			indice = 6

		SINON
			trace( "Appel debutant par 0XXXX...=> retrait du 0" )

			# "Retrait" 0 du debut au numero demandeur
			indice = 1

		FINSI
	FINSI
SINON
	# Numero demandeur non transgroupe
	#trace( "Numero demandeur non transgroupe" )

	# => "simulation automate T2" ( traitement uniquement pour les appels
	# debutants par 3651 ou *31* [secret dus demandeur] )
	SI( (   (i_get_art_fieldtab( article_in, ic_num_demande, 0 ) == 0x3)
	     && (i_get_art_fieldtab( article_in, ic_num_demande, 1 ) == 0x6)
	     && (i_get_art_fieldtab( article_in, ic_num_demande, 2 ) == 0x5)
	     && (i_get_art_fieldtab( article_in, ic_num_demande, 3 ) == 0x1) )
	   ||(   (i_get_art_fieldtab( article_in, ic_num_demande, 0 ) == 0xB)
	      && (i_get_art_fieldtab( article_in, ic_num_demande, 1 ) == 0x3)
	      && (i_get_art_fieldtab( article_in, ic_num_demande, 2 ) == 0x1)
	      && (i_get_art_fieldtab( article_in, ic_num_demande, 3 ) == 0xB) ) )
	ALORS
		#trace( "Appel debutant par 3651 ou *31* => retrait 4 premiers chiffres" )

		# "Retrait" des 4 premiers chiffres du numero demandeur
		indice = 4
	#SINON
		#trace( "Tous appels sauf ceux debutant par 3651 ou *31*" )
		# Rien a faire ici
	FINSI
FINSI
	

#############################################################
# Communication ETSI nationale ou internationale
#############################################################
SI( ( ETSI_N ) || ( ETSI_I ) )
ALORS
	#trace( "Appel ETSI national ou ETSI international (ETSI_N ou ETSI_I) => ajout 0 ou 00 en debut de numero" )
	# 1er chiffre = 0
	U = 0		
#SINON
	#trace( "Appel ni ETSI_N ni ETSI_I" )
	# Rien a faire ici
FINSI

##############################################################
# En fonction du 1er chiffre du numero demande
##############################################################
#Si U non renseigne, recuperation "1er chiffre" (qui peut se trouver en position 1, 4 ou 6 ) du numero demande
SI( U != 0 ) 
ALORS
	U = i_get_art_fieldtab( article_in, ic_num_demande, indice )
	#trace1( "1er chiffre = <%d>", U )
FINSI

# En fonction de U
SI( U==0 )
ALORS
	SI( PrefixeTrans>=0 )
	ALORS
		trace1( "PrefixeTransporteur deja renseigne => E = <%d> ",  PrefixeTrans )
		RETOUR PrefixeTrans
	SINON
		trace( "PrefixeTransporteur non renseigne => E = 0" )
		RETOUR 0
	FINSI
SINON   SI( ( U!=1 ) && ( U!=3 ) && ( U!=0x0B ) && ( U!=0x0C ) )
        ALORS
		trace1( "1er chiffre different de 1,3,* et # => E = <%d>", U )
		RETOUR U
	SINON
		SI( (U==1) && (i_get_art_fieldtab( article_in, ic_num_demande, indice+1 ) == 0x6) )
		ALORS
			#trace( "Appel debutant par 16XY" )
			XY = i_get_art_fieldtab( article_in, ic_num_demande, indice+2 )*10 + i_get_art_fieldtab( article_in, ic_num_demande, indice+3 )
			trace1( "Retour E = XY=<%d>", XY) 
			RETOUR XY
		SINON
			trace( "Retour E = 0" )
			RETOUR 0
		FINSI
	FINSI
FINSI

