# Fonction PCODE ID = 660004265
REGISTRE ARTOBJ artobjSource

DEFINITION TableNumSpecial "num_special_complet"
DEFINITION TablePrefNumSpecial "prefix_num_special"
DEFINITION TableInhibCalcul "param_calcul_ut"

DEFINITION TYPE "type"
DEFINITION NDE "idpart"

DEFINITION APPEL_NATIONAL 1
DEFINITION APPEL_INTERNATIONAL 2
DEFINITION APPEL_NUMERO_SPECIAL 3

REGISTRE ENTIER typeDPV
REGISTRE POINTEUR pt_nde
REGISTRE POINTEUR pt_prefix
REGISTRE ENTIER nde_type
REGISTRE POINTEUR pt_Liste
REGISTRE ENTIER Erreur
REGISTRE ENTIER NombreUT
REGISTRE POINTEUR pt_cleInhibNDE
REGISTRE POINTEUR pt_cleInhib
# Longueur du prefixe Num special, 0 si num complet
REGISTRE ENTIER longueurNum
REGISTRE POINTEUR pt_calculInhib
REGISTRE ENTIER date

artobjSource = depilerARTOBJ()

trace("debut de preval_ut")

SI (i_get_field_num(artobjSource, TYPE) <0 )
ALORS
  trace2 ("champ <%s> inexistant", TYPE, "")
  RETOUR -1
FINSI

SI (i_get_field_num(artobjSource,"DATE")<0 )
ALORS
  trace2 ("champs <%s> inexistant", "DATE", "")
  RETOUR -1
FINSI

SI (i_get_field_num(artobjSource,"indtax")<0 )
ALORS
  trace2 ("champs <%s> inexistant", "indtax", "")
  RETOUR -1
FINSI

trace ("verification effectue")
typeDPV = i_get_art_field(artobjSource,i_get_field_num(artobjSource, TYPE))

#####################################################################################
#determination du type de l appele =>nde_type
#####################################################################################

date = i_get_art_field(artobjSource, i_get_field_num( artobjSource, "DATE" ))

SI (typeDPV == 0x00)
ALORS
  SI (i_get_field_num(artobjSource, NDE) <0 )
  ALORS
    trace2 ("<<<__LINE__<<<__FILE__<<< champ <%s> inexistant", NDE, "")
    RETOUR -1
  FINSI

#recuperation de numero de l appele
  pt_nde  = "01234567890123456789012345678901234567890123456789012345678901234567890123456789"
  i_strcpy(pt_nde,"")

# report QC1434 dela G5R1C5
  Erreur = i_get_art_str(artobjSource, i_get_field_num(artobjSource, NDE), pt_nde)
  SI ( i_strcmp(pt_nde,"") == 0 || i_strlen(pt_nde) == 0 )
  ALORS
    trace("<<<__LINE__<<<__FILE__<<< champ NDE vide")
    RETOUR -1
  FINSI

  trace2("<<<__LINE__<<<__FILE__<<< champ idpart valeur : <%s>", pt_nde,"")
#numero d urgence
  SI (i_get_art_fieldtab (artobjSource, i_get_field_num( artobjSource, NDE),0) == 0xff)
  ALORS
    nde_type = APPEL_NATIONAL
    pt_cleInhibNDE = "NAT"
    trace ("<<<__LINE__<<<__FILE__<<< appel d'urgence --> APPEL_NATIONAL ")
    SAUT NDE_TYPE_TROUVE
  FINSI

  pt_Liste = i_get_tab_field ( TableNumSpecial ,date ,pt_nde)

  trace ("recherche du NDE dans les table externes")

  longueurNum = 0
  SI ( pt_Liste!= g_inull)
  ALORS
    nde_type = APPEL_NUMERO_SPECIAL
    pt_cleInhibNDE = "SPE"
    trace2 ("numero <%s> trouve dans la table des num speciaux <%s>", pt_nde, TableNumSpecial)
    SAUT NDE_TYPE_TROUVE
  SINON
    pt_prefix = "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
    longueurNum = i_strlen(pt_nde)
    trace ("recherche dans la table des prefixes")
    POINT RECHERCHE_PREFIX

    i_get_sub_str (pt_nde,0,longueurNum ,pt_prefix)
    SI (longueurNum > 0)
    ALORS
      pt_Liste = i_get_tab_field ( TablePrefNumSpecial , date, pt_prefix)
      SI (pt_Liste == g_inull)
      ALORS
        trace2 ("numero pt_prefix : <%s> <%s>", pt_prefix, pt_prefix)
        longueurNum = longueurNum - 1
        SAUT RECHERCHE_PREFIX
      SINON
        nde_type = APPEL_NUMERO_SPECIAL
        pt_cleInhibNDE = "SPE"
        trace2 ("numero <%s> trouve dans la table des num speciaux <%s>", pt_prefix, TablePrefNumSpecial)
        SAUT NDE_TYPE_TROUVE
      FINSI
    FINSI
  FINSI


  trace ("numero non special")
  SI ((i_strtab (pt_nde ,0) == '3') && (i_strtab (pt_nde ,1) == '3') )
  ALORS
    trace ("appel national")
    nde_type = APPEL_NATIONAL
    pt_cleInhibNDE = "NAT"
  SINON
    trace ("appel international")
    nde_type = APPEL_INTERNATIONAL
    pt_cleInhibNDE = "INT"
  FINSI
SINON
# pour les types autres que 0x00, la cle d'inhibition NDE sera : "TOUS"
  pt_cleInhibNDE = "TOUS"
FINSI

# nde_type trouve

POINT NDE_TYPE_TROUVE

#####################################################################################
# calcul de la cle d inhibition
#####################################################################################
pt_cleInhib = "0123456789012345678901234567890123456789"
Erreur = i_EntierToString(typeDPV, pt_cleInhib, 10)
Erreur = i_format_str2(pt_cleInhib,"%s_%s", pt_cleInhib , pt_cleInhibNDE )

trace2 (" %s : %s", "cle inhibition", pt_cleInhib)
#####################################################################################
#Appel de la fonction de calcul suivant le type de DPV
#####################################################################################
trace ("traitement pour Appel sortant (type 00)")
SI (typeDPV == 0x00)
ALORS

  SI (nde_type == APPEL_NATIONAL)
  ALORS
    trace (" appel national ")
    RETOUR -2
  FINSI

  SI (nde_type == APPEL_INTERNATIONAL)
  ALORS
    pt_calculInhib = i_get_tab_field (TableInhibCalcul , date, pt_cleInhib)
    trace(" appel international ")

    SI (pt_calculInhib == g_inull)
    ALORS
      trace (" calcul non inhibe ")
      NombreUT = tax_fil_660004265 (artobjSource)
      SI (NombreUT == -2)
      ALORS
        trace ("pas de prevalorisation")
        RETOUR -2
      FINSI
      SI (NombreUT == -1)
      ALORS
        trace ("erreur de calcul du nombre d'UT")
        RETOUR -1
      FINSI
    SINON
      trace ("preval inhibee")
      RETOUR 0
    FINSI
  FINSI

  SI ( nde_type == APPEL_NUMERO_SPECIAL )
  ALORS
    pt_calculInhib = i_get_tab_field (TableInhibCalcul ,date , pt_cleInhib)

    SI (pt_calculInhib == g_inull)
    ALORS
      SI ( longueurNum !=0)
      ALORS
        NombreUT = app_ns_UT_660004265 (artobjSource , pt_prefix, 1 )
      SINON
        NombreUT = app_ns_UT_660004265 (artobjSource , pt_nde, 0 )
      FINSI

      SI (NombreUT == -1)
      ALORS
        trace ("Erreur de calcul du nombre d'UT")
        RETOUR -1
      FINSI
      SI (NombreUT == -2)
      ALORS
        trace ("Pas de prevalorisation")
        RETOUR -2
      FINSI
    SINON
      trace ("preval inhibee")
      RETOUR 0
    FINSI
  FINSI
SINON

  SI ( (typeDPV==0x02) || (typeDPV==0x04) || (typeDPV==0x05) || (typeDPV==0x06) )
  ALORS
    trace ("traitement pour les types 02, 04, 05 et 06 ")
    pt_calculInhib = i_get_tab_field (TableInhibCalcul , date ,  pt_cleInhib)
    SI (pt_calculInhib == g_inull)
    ALORS
      NombreUT = tax_fil_660004265 (artobjSource)
      SI (NombreUT == -2)
      ALORS
        trace ("pas de prevalorisation")
        RETOUR -2
      FINSI
      SI (NombreUT == -1)
      ALORS
        trace ("erreur de calcul du nombre d'UT")
        RETOUR -1
      FINSI
    SINON
      trace ("preval inhibee")
      RETOUR 0
    FINSI
  SINON
    trace ("type DPV non reconnu")
    RETOUR -1
  FINSI
FINSI
trace1(" nombre d'UT <%d>", NombreUT)
RETOUR NombreUT

