# Fonction PCODE ID = 660003942
REGISTRE POINTEUR pt_Table_Externe
REGISTRE ENTIER date_fin
REGISTRE ENTIER type_cra
REGISTRE ARTOBJ tapin_2p5
REGISTRE ARTOBJ tapin_2pp
REGISTRE ARTOBJ artin_tlv

DEFINITION  CPT_1511  1511
DEFINITION  STCK_KO   0
DEFINITION  STCK_OK   1

# Application poubelle de redistribution
DEFINITION   IC_DATEREDIST    $Tcrae_header::DateOfRedistri

REGISTRE  ENTIER  nb_entree
REGISTRE  ENTIER  indice
REGISTRE  ENTIER  erreur
REGISTRE  ENTIER  res
REGISTRE  ENTIER  instanceECC
REGISTRE  ENTIER  inst1erECCP

REGISTRE  POINTEUR  pt_appli
REGISTRE  POINTEUR  pt_format
# G5R4lot2
REGISTRE  POINTEUR  pt_1
REGISTRE  POINTEUR  pt_2
REGISTRE  POINTEUR  pt_res_table
REGISTRE  ENTIER    FlagEtatCritere

pt_Table_Externe = depilerPOINTEUR()
date_fin = depilerENTIER()
type_cra = depilerENTIER()
tapin_2p5 = depilerARTOBJ()
tapin_2pp = depilerARTOBJ()
artin_tlv = depilerARTOBJ()

#-INITIALISATION DES VARIABLES

pt_appli = "01234567890"
pt_format ="123456789451123456789451"
pt_1 ="pt_1_01234567897412536120120123456789741253612012"
pt_2 ="pt_2_12345"
pt_res_table ="pt_res_table_55555555555555555555555555554444444455555555555555555555555555555555555555555555555"

i_strcpy(pt_1, "")
i_strcpy(pt_2, "")

inst1erECCP = -1
indice=0
nb_entree = 0
FlagEtatCritere = 0

# DEBUT ALGORITHME DE LA FONCTION AIGUILLAGE_HEADER_NOTIF

# Choix des ECCs selon  NameFile de collecte et table EtatCritere
erreur = i_get_art_str(artin_tlv, $Tcrae_header::NameOfFile, pt_1)
i_get_sub_str (pt_1, 7, 11, pt_2)
##trace2("<<<__LINE__<<<__FILE__<< pt_1=<%s>,  pt_2=<%s>",  pt_1,  pt_2)
erreur=i_format_str2(pt_1, "%s%s", "EccCrae_", pt_2)
i_strcpy(pt_res_table, i_get_tab_field("EtatCritere", date_fin, pt_1))
#trace2("<<<__LINE__<<<__FILE__<< pt_res_table=<%s>,  cle=pt_1=<%s>",  pt_res_table,  pt_1)
SI (i_strcmp(pt_res_table, "") != 0)
ALORS
  POINT BOUCLE_APPLI_CRIT
  erreur = i_recupererValeur(pt_res_table, pt_appli, 10, '_')
  #trace1("<<<__LINE__<<<__FILE__<<< erreur=<%d>", erreur)
  SI (!erreur && nb_entree < 10)
  ALORS
    FlagEtatCritere = 1
    nb_entree = nb_entree + 1
    #trace2("<<<__LINE__<<<__FILE__<< Liste=pt_1=<%s>,  Terme=pt_appli=<%s>",  pt_res_table,  pt_appli)
    i_strcpy(pt_format, i_get_tab_field(pt_Table_Externe, date_fin, pt_appli))
    #trace2("<<<__LINE__<<<__FILE__<< pt_format=<%s>",  pt_format,  "")

    SAUT DEB_CRIT
    ## execution algorithme commun de stockage plus bas
    POINT FIN_CRIT

    SAUT BOUCLE_APPLI_CRIT
  FINSI
FINSI

#trace1("<<<__LINE__<<<__FILE__<<< bla bla FIN BOUCLE_APPLI, FlagEtatCritere=<%d>", FlagEtatCritere)


# Toutes les ECC DCH sont concernees pour la distribution si non-reponse a table EtatCritere
SI (!FlagEtatCritere)
ALORS

  #-- recuperer le nombre d entree dans la table exterbe pt_Table_Externe

  nb_entree = i_get_tab_nb_entries(pt_Table_Externe, date_fin)

  #trace1("CRAE Auiguillage nb d entrees de la table est :<%d>",nb_entree)

  SI (nb_entree == 0)
  ALORS
    #trace("CRAE Aiguillage, zero entree dans la table")
    RETOUR STCK_KO
  FINSI

  POINT BOUCLE_APPLI_CRAE

  erreur = i_get_tab_one_entry (pt_Table_Externe, date_fin,indice, pt_1)
  erreur = i_recupererValeur(pt_1, pt_appli, 10, ';')

  SI (erreur!=0)
  ALORS
    #trace("CRAE Auiguillage, erreur fonction i_recupererValeur")
    RETOUR STCK_KO
  FINSI
  # correction recupererValeursur chaine de 13 octets au lieu de 12 !
  erreur = i_recupererValeur(pt_1, pt_format, 13, ';')

  SI (erreur!=0)
  ALORS
    #trace("CRAE Auiguillage, erreur fonction i_recupererValeur")
    RETOUR STCK_KO
  FINSI

  ## debut algorithme commun de stockage
  POINT DEB_CRIT
  SI (i_strplcmp(pt_format, "CRAE_", 0, 5) == 0)
  ALORS
    trace2("**CRAE Aiguillage , application destinatrice:<%s> , format:<%s>", pt_appli ,pt_format)
    instanceECC = i_LireInstanceECC(pt_appli)
    SI (instanceECC > 0)
    ALORS
      erreur = i_AjouterCouranteECC(instanceECC)
      # Enrichissement du CRA pour l'envoi a l'application poubelle de redistribution
      SI (i_strplcmp(pt_format, "REDIST", 7, 6) == 0 && type_cra == 10)
      ALORS
        erreur = i_dup_art_id(artin_tlv ,g_iartout3)
        SI (!i_valid_field_n(artin_tlv,IC_DATEREDIST))
        ALORS
          erreur = i_ajout_tlv(g_iartout3, "T3t2_DateOfRedi", "")
          erreur = i_resize_tlv(g_iartout3, "T3t2_DateOfRedi", "DateOfRedistri",4)
          erreur = i_set_art_field(g_iartout3 ,IC_DATEREDIST ,i_cur_time())
        FINSI

        res = i_stocke_art_iecc(g_iartout3, instanceECC)
        SI (res !=0)
        ALORS
          trace("CRAE Auiguillage, erreur de stockage de l'article g_iartout3")
          RETOUR STCK_KO
        FINSI
      SINON
        SI (i_strplcmp(pt_format, "TAP2++", 7, 6) == 0)
        ALORS
          res = i_stocke_art_iecc(tapin_2pp, instanceECC)
          SI (res !=0)
          ALORS
            trace("CRAE Auiguillage, erreur de stockage de l'article tapin_2pp")
            RETOUR STCK_KO
          FINSI
        SINON
          SI (i_strplcmp(pt_format, "TAP2.5", 7, 6) == 0)
          ALORS
            res = i_stocke_art_iecc(tapin_2p5, instanceECC)
            SI (res !=0)
            ALORS
              trace("CRAE Auiguillage, erreur de stockage de l'article TAP2.5")
              RETOUR STCK_KO
            FINSI
          SINON
            SI (i_strplcmp(pt_format, "TLV16", 7, 5) == 0 && type_cra == 10)
            ALORS
              res = i_stocke_art_iecc(artin_tlv, instanceECC)
              SI (res !=0)
              ALORS
                trace("CRAE Auiguillage, erreur de stockage de l'article artin_tlv")
                RETOUR STCK_KO
              FINSI
            FINSI
          FINSI
        FINSI
      FINSI
    FINSI
    SI (i_strplcmp(pt_format, "CRAE_P_", 0, 7) == 0 && inst1erECCP == -1 )
    ALORS
      inst1erECCP = instanceECC
    FINSI
  FINSI
  SI (FlagEtatCritere)
  ALORS
    SAUT FIN_CRIT
  FINSI
  ## fin algorithme commun de stockage

  indice = indice +1
  SI (indice < nb_entree )
  ALORS
    SAUT BOUCLE_APPLI_CRAE
  FINSI

FINSI


# incrementation du compteur 1511 pour le type header une fois pour la premiere application principle
SI (type_cra == 10 && inst1erECCP != -1)
ALORS
  erreur = i_incr_cpt(CPT_1511, type_cra, inst1erECCP, 0, date_fin, 1)
  SI (res !=0)
  ALORS
    trace("CRAE Auiguillage, erreur d'incrementation du compteur 1511")
    RETOUR STCK_KO
  FINSI
FINSI
RETOUR  STCK_OK

