| Producto | |||||||
|---|---|---|---|---|---|---|---|
| Línea de producto: | |||||||
| Segmento: | |||||||
| Módulo: | SIGAFIN - Financiero | ||||||
| Función: |
| ||||||
| País: | Todos | ||||||
| Ticket: | N/A | ||||||
| Requisito/Story/Issue (informe el requisito vinculado): | DMINA-25574 |
|
En la rutina FINA998, cuando se realiza un descuento por pronto pago utilizando el PE F998VALBX, al colocar un pago parcial de una factura y después un porcentaje de descuento, no toma el valor ingresado en la moneda correspondiente, toma el valor total del titulo limitando la funcionalidad de un pago parcial.
Cambios realizados en los fuentes del aplicativo:
El uso de este Punto de Entrada solo está habilitado para la versión de PO UI. |
|
| Descripción | Actualizaciones | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Punto de entrada: | F998VALBX | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Parámetros recibidos |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Respuesta: | Descripción del objeto de respuesta cuando en el JSON la bandera PARAMIXB[2] es Verdadera (.T.) y la bandera ["recalculate" ] este como falsa (.F.)
Descripción del objeto de respuesta cuando en el JSON la bandera PARAMIXB[2] es Verdadera (.T.) y la bandera ["recalculate" ] este como True (.T.)
Descripción de los objetos de respuesta en el JSON cuando la bandera PARAMIXB[2] sea Falsa (.F.) N/A |
Ejemplo donde el descuento se calcula con el saldo total del titulo
#Include 'Protheus.ch'
User Function F998VALBX()
Local oResponse := JsonObject():New() as Object
IF PARAMIXB[2] //Vista
IF PARAMIXB[1]['recalculate']
oResponse:=setValues(PARAMIXB[1])
ELSE
oResponse['label'] := "% Descuento por pronto pago" //Nombre del campo nuevo a mostrar.
oResponse['readonlyDiscount'] := .T. //Deshabilitar o habilitar el campo de descuento.
oResponse['readonlyInterest'] := .T. //Deshabilitar o habilitar el campo de Intereses.
oResponse['readonlyFine'] := .T. //Deshabilitar o habilitar el campo de Multa.
oResponse['disabledInput'] := .F.//isDisable(PARAMIXB[1]) //Deshabilitar o habilitar el input nuevo
oResponse['maxDiscount'] := 50//GetLimite(PARAMIXB[1]) //Se informa el descuento permitido debe tener un rango mayor a 0 y menor a 100
oResponse['warningMaxDiscount'] := "Descuento por Pronto Pago mayor al permitido. En esta condición el tope es:"+ALLTRIM(STR(oResponse['maxDiscount'])) //Mensaje personalizado por si se excede el descuento permitido, si no se informa el front mandara uno por default
ENDIF
ELSE
SaveData(PARAMIXB[1]) //Grabación
ENDIF
Return oResponse
/*/{Protheus.doc} setValues
Esta funcion determina los valores a mostrar en los campos de descuento, residuo, multa e interés
@type function
@version
@author luis.aboytes
@since 25/7/2024
@param oJson, object, param_description
@return variant, return_description
/*/
Static Function setValues(oJson)
Local oRes := JsonObject():New() }
// El cálculo se realiza por el total del título si se utiliza el dato PARAMIXB[1]['bind']['saldo']
oRes['descuento'] := Round(PARAMIXB[1]['bind']['discountInput']/100*PARAMIXB[1]['bind']['saldo'],2) //Calculo con el total del titulo
oRes['residuo'] := Round(PARAMIXB[1]['bind']['saldo']-oRes['descuento'],MsDecimais(SE1->E1_MOEDA)) //Calculo con el total del titulo
oRes['multa'] := 0
oRes['interes'] := 0
Return oRes
/*/{Protheus.doc} SaveData
Guardamos el dato en un campo en especifico
@type function
@author luis.aboytes
@since 18/7/2024
/*/
Static Function SaveData(oJsonData)
Local nCont as Numeric
For nCont := 1 to LEN(oJsonData['titulos'])
SE1->(dbSetOrder(1))
SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['titulos'][nCont]['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['titulos'][nCont]['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['titulos'][nCont]['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO"))))
RecLock("SE1",.F.)
SE1->E1_XPERDES := oJsonData['titulos'][nCont]['percentDiscount']
MsUnLock()
Next
Return
/*/{Protheus.doc} GetLimite
Se retorna el limite de descuento
@type function
@author luis.aboytes
@since 18/7/2024
/*/
Static Function GetLimite(oJsonData)
Local nTope := 0
SE1->(dbSetOrder(1))
SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO"))))
nTope:=IIF(VAZIO(Posicione("SE4", 1,xFilial("SE4")+SE1->E1_XCONDPP,"E4_XDESCON")),0,Posicione("SE4", 1,xFilial("SE4")+SE1->E1_XCONDPP,"E4_XDESCON"))
Return nTope
/*/{Protheus.doc} isDisable
Funcion que retorna si es editable o no el valor del input
@type function
@author luis.aboytes
@since 18/7/2024
/*/
Static Function isDisable(oJsonData)
Local lRet := .t.
SE1->(dbSetOrder(1))
SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO"))))
IF SE1->E1_XCONDPP == '999'
lRet := .f.
ENDIF
Return lRet
|
Ejemplo donde el descuento se calcula con el valor ingresado en la moneda 1
#Include 'Protheus.ch'
User Function F998VALBX()
Local oResponse := JsonObject():New() as Object
IF PARAMIXB[2] //Vista
IF PARAMIXB[1]['recalculate']
oResponse:=setValues(PARAMIXB[1])
ELSE
oResponse['label'] := "% Descuento por pronto pago" //Nombre del campo nuevo a mostrar.
oResponse['readonlyDiscount'] := .T. //Deshabilitar o habilitar el campo de descuento.
oResponse['readonlyInterest'] := .T. //Deshabilitar o habilitar el campo de Intereses.
oResponse['readonlyFine'] := .T. //Deshabilitar o habilitar el campo de Multa.
oResponse['disabledInput'] := .F.//isDisable(PARAMIXB[1]) //Deshabilitar o habilitar el input nuevo
oResponse['maxDiscount'] := 50//GetLimite(PARAMIXB[1]) //Se informa el descuento permitido debe tener un rango mayor a 0 y menor a 100
oResponse['warningMaxDiscount'] := "Descuento por Pronto Pago mayor al permitido. En esta condición el tope es:"+ALLTRIM(STR(oResponse['maxDiscount'])) //Mensaje personalizado por si se excede el descuento permitido, si no se informa el front mandara uno por default
ENDIF
ELSE
SaveData(PARAMIXB[1]) //Grabación
ENDIF
Return oResponse
/*/{Protheus.doc} setValues
Esta funcion determina los valores a mostrar en los campos de descuento, residuo,multa e interes
@type function
@version
@author luis.aboytes
@since 25/7/2024
@param oJson, object, param_description
@return variant, return_description
/*/
Static Function setValues(oJson)
Local oRes := JsonObject():New()
// El cálculo se realiza con el dato ingresado en la moneda 1 o en cualquier moneda puede
// utilizar por ejemplo PARAMIXB[1]["coins"][1]['value'] para la moneda 1.
oRes['descuento'] := Round(PARAMIXB[1]['bind']['discountInput']/100*PARAMIXB[1]["coins"][1]['value'],2) //Calculo con el valor ingresado a pagar
oRes['residuo'] := Round(PARAMIXB[1]["coins"][1]['value']-oRes['descuento'],MsDecimais(SE1->E1_MOEDA)) //Calculo con el valor ingresado a pagar
oRes['multa'] := 0
oRes['interes'] := 0
Return oRes
/*/{Protheus.doc} SaveData
Guardamos el dato en un campo en especifico
@type function
@author luis.aboytes
@since 18/7/2024
/*/
Static Function SaveData(oJsonData)
Local nCont as Numeric
For nCont := 1 to LEN(oJsonData['titulos'])
SE1->(dbSetOrder(1))
SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['titulos'][nCont]['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['titulos'][nCont]['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['titulos'][nCont]['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO"))))
RecLock("SE1",.F.)
SE1->E1_XPERDES := oJsonData['titulos'][nCont]['percentDiscount']
MsUnLock()
Next
Return
/*/{Protheus.doc} GetLimite
Se retorna el limite de descuento
@type function
@author luis.aboytes
@since 18/7/2024
/*/
Static Function GetLimite(oJsonData)
Local nTope := 0
SE1->(dbSetOrder(1))
SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO"))))
nTope:=IIF(VAZIO(Posicione("SE4", 1,xFilial("SE4")+SE1->E1_XCONDPP,"E4_XDESCON")),0,Posicione("SE4", 1,xFilial("SE4")+SE1->E1_XCONDPP,"E4_XDESCON"))
Return nTope
/*/{Protheus.doc} isDisable
Funcion que retorna si es editable o no el valor del input
@type function
@author luis.aboytes
@since 18/7/2024
/*/
Static Function isDisable(oJsonData)
Local lRet := .t.
SE1->(dbSetOrder(1))
SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO"))))
IF SE1->E1_XCONDPP == '999'
lRet := .f.
ENDIF
Return lRet
|