# Fonction PCODE ID = 860026233
REGISTRE POINTEUR pt_table
REGISTRE POINTEUR pt_Num
REGISTRE ENTIER date

# Nom du fichier: CodeOperateurTable6.src
#
# Fonction:
#    Recupere le code operateur en fonction de la date du numero demande et
#     de la table 6 (45S ou ACLA)
# En entree :
#    DATE
#    Numero Demande
#    Nom de la table "45S" ou "ACLA"
#
# En sortie:
#    si OK      : Code operateur
#    si NOK     : 0
#
#	FO49 : on prend les 9 derniers caracteres du NUM pour appel a la table
#	FO55 : utilisation de i_EnvoiReqConsTabDistDouble
#	10/01/05 : FAL creation pour Cbb a partir de CodeOperateur
#	18/03/05 : FAL FO1164 optimisation appel ACLA 3BPQ ou Z=8
#	24/06/14 : THE G4R7 Lot1 Appel ACLA pour tous les dde
#
############################################################################

REGISTRE	POINTEUR  pt_Code
REGISTRE	POINTEUR  pt_Buffer

REGISTRE	ENTIER    erreur
REGISTRE	ENTIER    res
REGISTRE	ENTIER    instTable6
REGISTRE	ENTIER    L_Num

pt_table = depilerPOINTEUR()
pt_Num = depilerPOINTEUR()
date = depilerENTIER()
# Recuperation des arguments en entree
#

# Initialisation des variables

pt_Buffer ="AAAAAAAAAAAAAAA"
pt_Code   ="BBBBBBBBBBBBBBB"

#############################################################################
#
# Correction PSA G1R2C3 : on prend les 9 derniers digits du demande
# A revoir : probleme de surnumerotation
#i_get_sub_str(Num,1,i_strlen(Num)-1,Num)

SI (i_strlen(pt_Num) >= 9)
ALORS
	i_get_sub_str(pt_Num,-9,-1,pt_Num)
SINON
	i_get_sub_str(pt_Num,-4,-1,pt_Num)
FINSI

#SI (i_strcmp(pt_table, "ACLA") == 0)
#ALORS
#	trace ("concerne ACLA")
#	i_get_sub_str(pt_Num,0,0,pt_Buffer)
#	SI ((i_strcmp(pt_Buffer, "3") != 0) && (i_strcmp(pt_Buffer, "8") != 0))
#	ALORS
#		trace (" pas d appel ACLA cause optimise ")
#		RETOUR 0
#	FINSI
#FINSI


####################################################
# Recherche instance 45S
#####################################################
instTable6 = i_LireInstanceECC(pt_table)
#trace1("instTable6=<%d>",instTable6)

############################################################################
# Envoi requetes Table de Distribution
############################################################################

L_Num = i_conv_ascii_dcb(pt_Num, pt_Buffer)
#erreur = i_EnvoiReqConsTabDist(6, date, pt_Buffer, L_Num,0,1)
erreur = i_EnvoiReqConsTabDistDouble(6, 6, date, pt_Buffer, L_Num,L_Num,1,0,1)
SI (erreur != 0)
ALORS
	trace("Erreur i_EnvoiReqConsTabDist")
	RETOUR 0
FINSI

############################################################################
# Attente requetes Table de Distribution
############################################################################

erreur = i_LireReqConsTabDist()

SI ( erreur != 0 )
ALORS
	trace1( "Erreur i_LireReqConsTabDist: <%d>", erreur)
	RETOUR 0
FINSI

############################################################################
# Lecture du Code Operateur
############################################################################

res = i_LireInfoECC( instTable6, 0 )

SI (res != 0)
ALORS
	erreur = i_LireChaineInfo( res, 0, 5, pt_Code )
	trace2( " Resultat de i_LireChaineInfo : <%s>", pt_Code, "" )
SINON
	trace2("pas trouve dans le referentiel %s", pt_table, "")
	RETOUR 0
FINSI

RETOUR pt_Code
