# Fonction PCODE ID = 860026233
REGISTRE POINTEUR pt_MTHTDOM
REGISTRE POINTEUR pt_CoefConvTVA
REGISTRE POINTEUR pt_CoefTVA
REGISTRE POINTEUR pt_MontantTTC

REGISTRE ENTIER erreur
REGISTRE ENTIER VAL

REGISTRE POINTEUR pt_temp
REGISTRE POINTEUR pt_ValEntier
REGISTRE POINTEUR pt_MTHT
REGISTRE POINTEUR pt_MTHT1
REGISTRE POINTEUR pt_MTHT2
REGISTRE POINTEUR pt_ValDec
REGISTRE POINTEUR pt_Separateur
REGISTRE POINTEUR pt_MntTTC
REGISTRE POINTEUR pt_MntTTC2
REGISTRE POINTEUR pt_MntCoefTVA
REGISTRE POINTEUR pt_MntCoefConvTVA


pt_MTHTDOM = depilerPOINTEUR()
pt_CoefConvTVA = depilerPOINTEUR()
pt_CoefTVA = depilerPOINTEUR()
pt_MontantTTC = depilerPOINTEUR()
#
pt_temp			= "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
pt_ValEntier		= "444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444"
pt_MTHT			= "555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555"
pt_MTHT1		= "333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"
pt_MTHT2		= "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
pt_ValDec		= "666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666"
pt_Separateur		= "7777777"
pt_MntTTC		= "888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888"
pt_MntTTC2		= "222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"
pt_MntCoefTVA		= "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"
pt_MntCoefConvTVA	= "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"

i_strcpy(pt_temp,"")
i_strcpy(pt_ValEntier,"")
i_strcpy(pt_MTHT,"")
i_strcpy(pt_MTHT1,"")
i_strcpy(pt_MTHT2,"")
i_strcpy(pt_ValDec,"")
i_strcpy(pt_Separateur,".")
i_strcpy(pt_MntTTC,"")
i_strcpy(pt_MntTTC2,"")
i_strcpy(pt_MntCoefTVA,"")
i_strcpy(pt_MntCoefConvTVA,"")

erreur	= 0
VAL	= 0


# Recuperation des donnees d'entree
i_strcpy(pt_MntTTC,pt_MontantTTC)
i_strcpy(pt_MntCoefTVA,pt_CoefTVA)
i_strcpy(pt_MntCoefConvTVA,pt_CoefConvTVA)

#trace2(" ############# pt_MntTTC = >%s< #############",pt_MntTTC,"")
#trace2(" ############# pt_MntCoefTVA = >%s< #############",pt_MntCoefTVA,"")

# Traitement Montant TTC
	# si le montant en entree contient une virgule alors remplacement par un point
	SI i_adequation_chaine_expreg(pt_MntTTC,",") == 0
	ALORS
		i_replace_str(pt_MntTTC,",",".",pt_MntTTC)
		i_strcpy(pt_Separateur,",")
	FINSI
	i_strcpy(pt_temp,pt_MntTTC)
	#trace2(" ############# pt_temp = >%s< ##### pt_MntTTC = >%s< ########",pt_temp,pt_MntTTC)

	# extraction de la partie entiere et decimale
	erreur = i_recupererValeur(pt_temp, pt_ValEntier, i_strlen(pt_temp),'.')
	i_strcpy(pt_ValDec,pt_temp)
	#trace2(" ############# pt_ValDec = >%s< #############",pt_ValDec,"")

	# forcage a 5 decimales si besoin
	SI  i_strlen(pt_ValDec) < 5
	ALORS
		erreur = i_format_str2( pt_ValDec, "%s%s", pt_temp,"00000" )
	FINSI
	i_get_sub_str (pt_ValDec, 0, 4,pt_ValDec)
	#trace2(" ############# pt_ValDec (5) = >%s< #############",pt_ValDec,"")
	
	# reconstitution du montant TTC sous forme de chaine sans separateur

	i_strcpy(pt_MntTTC,pt_ValDec)
	SI i_strcmp(pt_ValEntier,"0") != 0
	ALORS
		erreur = i_format_str2( pt_MntTTC, "%s%s", pt_ValEntier,pt_ValDec )
	FINSI
	SI i_strplcmp (pt_MntTTC,"0",0,1) == 0
	ALORS
		i_get_sub_str (pt_MntTTC, 1, -1,pt_MntTTC)
	FINSI

# Traitement CoefTVA
	# remplacement d'une virgule par un point
	i_replace_str(pt_MntCoefTVA,",",".",pt_MntCoefTVA)
	
	
	i_strcpy(pt_temp,pt_MntCoefTVA)
	# extraction de la partie entiere et decimale
	erreur = i_recupererValeur(pt_temp, pt_ValEntier, i_strlen(pt_temp),'.')
	# forcage a 6 decimales si besoin
	i_strcpy(pt_ValDec,pt_temp)
	SI  i_strlen(pt_ValDec) < 3
	ALORS
		erreur = i_format_str2( pt_ValDec, "%s%s", pt_temp,"000" )
	FINSI
	i_get_sub_str (pt_ValDec, 0, 2,pt_ValDec)

	# reconstitution du montant TVA sous forme de chaine sans separateur
	i_strcpy(pt_MntCoefTVA,pt_ValDec)
	SI i_strcmp(pt_ValEntier,"0") != 0
	ALORS
		erreur = i_format_str2( pt_MntCoefTVA, "%s%s", pt_ValEntier,pt_ValDec )
	FINSI

	#trace2(" ############# pt_MntTTC = >%s< ##### pt_MntCoefTVA = >%s< ########",pt_MntTTC,pt_MntCoefTVA)

# Traitement CoefConvTVA
    # remplacement d'une virgule par un point
	i_replace_str(pt_MntCoefConvTVA,",",".",pt_MntCoefConvTVA)
    # extraction de la partie decimale
	erreur = i_recupererValeur(pt_MntCoefConvTVA, pt_ValEntier, i_strlen(pt_temp),'.')
    # forcage a 8 entier
	SI  i_strlen(pt_MntCoefConvTVA) < 8
	ALORS
		i_strcpy(pt_temp,pt_MntCoefConvTVA)
		erreur = i_format_str2( pt_MntCoefConvTVA, "%s%s", pt_temp,"00000000" )
	FINSI
	i_get_sub_str (pt_MntCoefConvTVA, 0, 7,pt_MntCoefConvTVA)
	

# Calcul des montanrts HT

    # Calcul du montant HT pour MMDM prevu pour 5 decimales
	i_strcpy(pt_temp,pt_MntTTC)
	erreur = i_largeIntegersMultiply (pt_temp, 255, pt_MntCoefConvTVA, 255)
	i_get_sub_str (pt_temp, 0, -9,pt_temp)
	#Montant HT DOM en centieme d'euro exemple 94460523   pour 944,60523 euros (5 decimales)
    # Stockage dans le parametre de sortie	
	i_strcpy(pt_MTHTDOM,pt_temp)
	
	
	# trace2(" ############# pt_MTHTDOM  = >%s< ############",pt_MTHTDOM,"")
	
	
    # Calcul du montant HT NON arrondi tronque au centieme d'euro (2 decimales)
	i_strcpy(pt_temp,pt_MTHTDOM)
	SI i_strlen(pt_temp) < 6
	ALORS
		erreur = i_format_str2( pt_ValEntier, "%s%s","000000",pt_temp )
		i_get_sub_str (pt_ValEntier, -6, -1,pt_temp)
	FINSI
	i_get_sub_str (pt_temp, 0, -4,pt_temp)
	# Montant HT arrondi en centieme d'euro exemple : TTC = 1025,63000 euros,  HT = 94461 pour 944,61 euros
	i_strcpy(pt_MTHT2,pt_temp)
	SI i_strlen(pt_temp) < 3
	ALORS
		erreur = i_format_str2( pt_MTHT2, "%s%s","000",pt_temp )
		i_get_sub_str (pt_MTHT2, -3, -1,pt_MTHT2)
	FINSI
	
    # Calcul du montant HT arrondi tronque au centieme d'euro (2 decimales)
	i_strcpy(pt_temp,pt_MTHTDOM)
	SI i_strlen(pt_temp) < 6
	ALORS
		erreur = i_format_str2( pt_ValEntier, "%s%s","000000",pt_temp )
		i_get_sub_str (pt_ValEntier, -6, -1,pt_temp)
	FINSI
	# on fait l'arrondi par ajout de 500 puis troncature au centieme d'euro
	erreur = i_largeIntegersAdd (pt_temp, 255, "500", 255)
	i_get_sub_str (pt_temp, 0, -4,pt_temp)
	# Montant HT arrondi en centieme d'euro exemple : TTC = 1025,63000 euros,  HT = 94461 pour 944,61 euros
	i_strcpy(pt_MTHT1,pt_temp)
	SI i_strlen(pt_temp) < 3
	ALORS
		erreur = i_format_str2( pt_MTHT1, "%s%s","00",pt_temp )
		i_get_sub_str (pt_MTHT1, -3, -1,pt_MTHT1)
	FINSI
	
	#trace2(" ############# pt_MTHT1 arrondi  = >%s< ###### pt_MTHT2 non arrondi  = >%s< #######",pt_MTHT1,pt_MTHT2)
	
	
# Recalcul du montant TTC a partir du montant HT arrondi en centieme d'euro
	i_strcpy(pt_temp,pt_MTHT1)
	erreur = i_largeIntegersMultiply (pt_temp, 255, pt_MntCoefTVA, 255)
	erreur = i_largeIntegersAdd (pt_temp, 255, "500", 255)
	i_strcpy(pt_MntTTC2,pt_temp)

# 12/02/2014 - DRE - G4R5 QC791 Mise en forme pt_MntTTC (meme nombre de caractere que pt_MntTTC2) pour comparaison des chaines
	SI i_strlen(pt_MntTTC) < i_strlen(pt_MntTTC2)
	ALORS
		erreur = i_format_str2( pt_temp, "%s%s", "0",pt_MntTTC )
		i_strcpy(pt_MntTTC,pt_temp)
	FINSI	

	i_get_sub_str (pt_MntTTC2, 0, -4,pt_MntTTC2)
	i_get_sub_str (pt_MntTTC, 0, -4,pt_MntTTC)
	
	#trace2(" #-#-#-#-#-#-#-# pt_MntTTC2 apres  = >%s< ###### pt_MntTTC   = >%s< #-#-#-#-#-#-#-#",pt_MntTTC2,pt_MntTTC)  
	
# La difference entre les 2 montants TTC se fait par comparaison des 2 chaines
	# si le resultat est negatif, on renvoie le monatnt HT NON ARRONDI
	# sinon on renvoie le monant HT ARRONDI
	VAL = i_strcmp(pt_MntTTC, pt_MntTTC2)
	#trace1("############# VAL = %d #############",VAL)
	SI VAL < 0
	ALORS
		i_strcpy(pt_MTHT,pt_MTHT2)
	SINON
		i_strcpy(pt_MTHT,pt_MTHT1)
	FINSI
	
	
    # Formatage et Stockage dans le parametre de sortie MTHTDOM (format : 123456,12345  ou 123456.12345) 	
	i_strcpy(pt_temp,pt_MTHTDOM)
# DRE - G4R5 QC791 Bug calcul Price_HT formatage pour valeur inferieure a 1 euro
	SI i_strlen(pt_temp) < 6
	ALORS
		erreur = i_format_str2( pt_ValEntier, "%s%s","000000",pt_temp )
		i_get_sub_str (pt_ValEntier, -6, -1,pt_temp)
	FINSI
	i_get_sub_str (pt_temp, 0, -6,pt_ValEntier)
	i_get_sub_str (pt_temp, -5, -1,pt_ValDec)
	erreur = i_format_str2( pt_temp, "%s%s", pt_ValEntier,pt_Separateur )
	erreur = i_format_str2( pt_MTHTDOM, "%s%s", pt_temp,pt_ValDec )


RETOUR pt_MTHT	

