# Fonction PCODE ID = 660004265
REGISTRE ENTIER isPrefix
REGISTRE POINTEUR pt_nde
REGISTRE ARTOBJ artobjSource

DEFINITION TableNumSpecial "num_special_complet"
DEFINITION TablePrefNumSpecial "prefix_num_special"

REGISTRE POINTEUR pt_Liste
REGISTRE POINTEUR pt_ListeTmp

REGISTRE POINTEUR pt_formule
REGISTRE POINTEUR pt_PFS
REGISTRE POINTEUR pt_KFS
REGISTRE POINTEUR pt_P2FS
REGISTRE POINTEUR pt_K2FS
REGISTRE POINTEUR pt_TFS
REGISTRE POINTEUR pt_HFS
REGISTRE POINTEUR pt_buffer

REGISTRE ENTIER formule_F
REGISTRE ENTIER PFS_F
REGISTRE ENTIER KFS_F
REGISTRE ENTIER P2FS_F
REGISTRE ENTIER K2FS_F
REGISTRE ENTIER TFS_F
REGISTRE ENTIER HFS_F

REGISTRE ENTIER nombreUT
REGISTRE ENTIER erreur

REGISTRE ENTIER date
REGISTRE ENTIER duree

REGISTRE ENTIER size


isPrefix = depilerENTIER()
pt_nde = depilerPOINTEUR()
artobjSource = depilerARTOBJ()

trace2 ("appel a app_ns_UT <pt_nde %s>", pt_nde, "")

#####################################################################################
# lecture de la table externe
#####################################################################################

pt_Liste = "0123456789012345678901234567890123456789i12345678901234567890"
pt_buffer = "1111111111111111111111111111111111111111111111111111111111111111111111"
i_strcpy(pt_Liste,"")

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

SI (isPrefix == 1)
ALORS
  pt_ListeTmp= i_get_tab_field( TablePrefNumSpecial , date, pt_nde)
  SI (pt_ListeTmp == g_inull)
  ALORS
    trace2("numero <%s> non trouve dans la table <%s>", pt_nde , TableNumSpecial)
    RETOUR -1
  FINSI
SINON
  pt_ListeTmp = i_get_tab_field( TableNumSpecial , date, pt_nde)
  SI (pt_ListeTmp == g_inull)
  ALORS
    trace2("numero <%s> non trouve dans la table <%s>", pt_nde , TableNumSpecial)
    RETOUR -1
  FINSI
FINSI

size = 50
i_strcpy ( pt_Liste , pt_ListeTmp )
pt_formule = "formule01234"
i_strcpy(pt_formule,"")
erreur = i_recupererValeur ( pt_Liste , pt_formule , size , ':' )
SI (erreur)
ALORS
  trace("champ <formule> inexistant")
  RETOUR -1
FINSI
erreur = i_format_str2 (pt_buffer, "%s <%s>", "formule" , pt_formule)

pt_PFS = "PFS01234"
i_strcpy(pt_PFS,"")
erreur = i_recupererValeur ( pt_Liste , pt_PFS  , size , ':')
SI (erreur)
ALORS
  trace("champ <PFS> inexistant")
  RETOUR -1
FINSI
erreur = i_format_str2 (pt_buffer, "%s PFS <%s>", pt_buffer, pt_PFS)

pt_KFS = "KFS01234"
i_strcpy(pt_KFS,"")
erreur = i_recupererValeur ( pt_Liste , pt_KFS , size , ':')
SI (erreur)
ALORS
  trace("champ <KFS> inexistant")
  RETOUR -1
FINSI
erreur = i_format_str2 (pt_buffer, "%s KFS <%s>", pt_buffer, pt_KFS)

pt_P2FS = "P2FS01234"
i_strcpy(pt_P2FS,"")
erreur = i_recupererValeur ( pt_Liste , pt_P2FS  , size , ':')
SI (erreur)
ALORS
  trace("champ <P2FS> inexistant")
  RETOUR -1
FINSI
erreur = i_format_str2 (pt_buffer, "%s P2FS <%s>", pt_buffer, pt_P2FS)

pt_K2FS = "K2FS01234"
i_strcpy(pt_K2FS,"")
erreur = i_recupererValeur ( pt_Liste , pt_K2FS  , size , ':')
SI (erreur)
ALORS
  trace("champ <K2FS> inexistant")
  RETOUR -1
FINSI
erreur = i_format_str2 (pt_buffer, "%s K2FS <%s>", pt_buffer, pt_K2FS)

pt_TFS = "TFS01234"
i_strcpy(pt_TFS,"")
erreur = i_recupererValeur ( pt_Liste , pt_TFS  , size , ':')
SI (erreur)
ALORS
  trace("champ <TFS> inexistant")
  RETOUR -1
FINSI
erreur = i_format_str2 (pt_buffer, "%s TFS <%s>", pt_buffer, pt_TFS)

pt_HFS = "HFS01234"
i_strcpy(pt_HFS,"")
erreur = i_recupererValeur ( pt_Liste, pt_HFS  , size , ':')
SI (erreur)
ALORS
  trace2("champ <HFS> inexistant pt_Liste : %s pt_buffer %s", pt_Liste, pt_buffer)
  RETOUR -1
FINSI
erreur = i_format_str2 (pt_buffer, "%s HFS <%s>", pt_buffer, pt_HFS)

trace2 (" liste decompose : %s", pt_buffer, "")

#####################################################################################
# choix de la formule de calcul du nombre d UT
#####################################################################################

SI (pt_formule == g_inull)
ALORS
  trace("erreur : champ obligatoire <formule> vide")
  RETOUR -1
SINON
  SI (i_strcmp(pt_formule, "F1")==0)
  ALORS
    SI ( (pt_PFS == g_inull) ||(pt_TFS == g_inull) ||(pt_HFS == g_inull) )
    ALORS
      trace("erreur : un des champs obligatoires <PFS TFS HFS> est vide")
      RETOUR -1
    SINON
      PFS_F = i_str_to_float(pt_PFS)
      TFS_F = i_str_to_float(pt_TFS)

      nombreUT = f_tax1_660004265(date , i_get_art_field(artobjSource, i_get_field_num( artobjSource, "DUREE" )), PFS_F, TFS_F, pt_HFS )
    FINSI

  SINON
    SI (i_strcmp(pt_formule, "F2")==0)
    ALORS
      SI ( (pt_P2FS == g_inull) ||(pt_KFS == g_inull) ||(pt_TFS == g_inull) ||(pt_HFS == g_inull) )
      ALORS
        trace("erreur : un des champs obligatoires est vide")
        RETOUR -1
      SINON
        P2FS_F = i_str_to_float(pt_P2FS)
        TFS_F = i_str_to_float(pt_TFS)
        KFS_F = i_str_to_float ( pt_KFS)
        nombreUT = f_tax2_660004265(date, i_get_art_field(artobjSource, i_get_field_num( artobjSource, "DUREE" )), P2FS_F, i_float_to_entier(KFS_F), TFS_F, pt_HFS)
      FINSI
    SINON
      SI (i_strcmp(pt_formule, "F3")==0)
      ALORS
        nombreUT = tax_fil_660004265 (artobjSource)
      SINON

        SI (i_strcmp(pt_formule, "F4")==0)
        ALORS
          SI ( (pt_PFS == g_inull) ||(pt_P2FS == g_inull) ||(pt_KFS == g_inull)
            ||(pt_K2FS == g_inull) ||(pt_TFS == g_inull) ||(pt_HFS == g_inull) )
          ALORS
            trace("erreur : un des champs obligatoires est vide")
            RETOUR -1
          SINON
# FO303 : Preval f_tax4 : les variables PFS_F et P2FS_F ne sont pas modifies apres l'init
            PFS_F = i_str_to_float (pt_PFS)
            P2FS_F = i_str_to_float (pt_P2FS)
            trace1("PFS_F %d",PFS_F)
            trace1("P2FS_F %d",P2FS_F)

# FO303 : Fin de modification
            K2FS_F = i_str_to_float(pt_K2FS)
            TFS_F = i_str_to_float(pt_TFS)
            KFS_F = i_str_to_float ( pt_KFS)
            HFS_F = i_str_to_float ( pt_HFS)

            nombreUT = f_tax4_660004265(i_get_art_field(artobjSource, i_get_field_num(artobjSource, "DUREE")), PFS_F, P2FS_F, i_float_to_entier(KFS_F), i_float_to_entier(K2FS_F), TFS_F, i_float_to_entier(HFS_F))
          FINSI
        SINON
          SI (i_strcmp(pt_formule, "F6")==0)
          ALORS
            SI (pt_HFS == g_inull)
            ALORS
              trace("erreur : un des champs obligatoires est vide")
              RETOUR -1
            SINON
              nombreUT = f_tax6_660004265( date, pt_HFS)
            FINSI
          SINON
            formule_F = i_str_to_float(pt_formule)
            nombreUT = i_float_to_entier (formule_F)
            trace1(" utilisation de forfait <%d> ", nombreUT)
          FINSI
        FINSI
      FINSI
    FINSI
  FINSI
FINSI

trace1("nombre d'UT calcule <%d>", nombreUT)
RETOUR nombreUT

