01. DATOS GENERALES


Producto

Línea de producto: 

Segmento:

Módulo:SIGAFIN - FINANCIERO
Función:
RutinaNombre TécnicoFecha
FINA998.APPAplicativo de TOTVS Recibo (Front-end)
FINA998.PRWAplicativo de TOTVS Recibo (Back-end)

FINA998A.PRWLlamada de servicios por ADVPL

GETCONTENTINI.SERVICE.TLPPServicio para obtener las configuraciones iniciales

FINANCIAL-TITLES.CONTROLLER.TLPPControlador para obtener los títulos financieros

FINANCIAL-TITLES.SERVICE.TLPPServicio para obtener los títulos financieros

SAVE-RECEIPT.SERVICE.TLPPServicio para guardar los recibos

País:Todos
Ticket:N/A
Requisito/Story/Issue (informe el requisito vinculado):DMINA-23387


02. 
DESCRIPCIÓN

Se requiere habilitar el punto de entrada F998VALBX el cual tiene el objetivo de habilitar la opción de "Descuento por pronto pago" en la ventana "Edición de cobro" y realizar un descuento al título seleccionado por un porciento (%).


03. INFORMACIÓN ADICIONAL

Se realizan cambios en los siguientes fuentes:

Importante

La solución estará presente en el patch de expedición continua con fecha  superior  al 18/07/2024.



  1. Realizar un respaldo del repositorio (RPO).
  2. Aplicar el paquete de expedición continua Financiero - Totvs Recibo MI con fecha del o posterior.  
  3. Aplicar el parche correspondiente al issue DMINA-23387.
  4. Validar que las rutinas actualizadas en el repositorio, coincidan con las descritas en el encabezado del presente Documento Técnico, así como las fechas.
  5. Crear la función de usuario "Descuento por pronto pago" (F998VALBX) el cual retornará un objeto Json con las siguientes opciones:
    1. Nombre del campo nuevo a mostrar.
    2. Deshabilitar o habilitar el campo de descuento, multa o interés.
    3. Habilitar o deshabilitar el campo "Descuento por pronto pago".
  6. Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
  7. En la rutina de Clientes (MATA030), ubicada en el módulo Financiero (Actualizaciones | Archivos) registré un cliente.

  8. En la rutina de Facturaciones (MATA467N), ubicada en el módulo de Facturación (Actualizaciones | Facturaciones) generamos un nuevo título.
  1. Ingresar a la rutina TOTVS Recibo; SIGAFIN - Actualizaciones | Cuentas por Cobrar | TOTVS Recibo.

    1. Ingresar a la opción Nuevo Recibo.

      1. Informe el encabezado del recibo con los datos configurados anteriormente y damos clic en "Extraer Títulos". 

      2. Localizamos el título generado anteriormente y damos clic en "Editar cobro".
      3. Verificamos que se visualice el nuevo campo configurado "Descuento por pronto pago".
      4. Verificamos que se realice la lógica matemática adecuadamente.


DescripciónActualizaciones
Nombre del programa fuente:FINANCIAL-TITLES.SERVICE.TLPP
Parámetros recibidos
Punto de entrada:F998VALBX
Respuesta:

Objeto json con las siguientes opciones:

Nombre

Tipo

Descripción

Obligatorio

oJson['label']L

Nombre del campo nuevo a mostrar.

Si
oJson['disabledDiscount']LDeshabilitar o habilitar el campo de descuento.Si
oJson['disabledInterest']LDeshabilitar o habilitar el campo de Intereses.Si
oJson['disabledFine']LDeshabilitar o habilitar el campo de Multa.Si
oJson['disabledInput']LDeshabilitar o habilitar el input nuevoSi
#Include 'Protheus.ch'

User Function F998VALBX()

    Local oResponse := JsonObject():New() as Object
    Local oJsonData := JsonObject():New() as JsonObject
    oJsonData:fromJson(PARAMIXB[1])
    
    IF !PARAMIXB[2]  //Vista 
        oResponse['label']              := "% Descuento"        //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']      := isDisable(oJsonData) //Deshabilitar o habilitar el input nuevo
        oResponse['maxDiscount']        := GetLimite(oJsonData) //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
    ELSE 
       SaveData(oJsonData) //Grabación
    ENDIF

Return oResponse

/*/{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

04. ASUNTOS RELACIONADOS