Dados Gerais

Módulo:

TOTVS Automação Fiscal (SIGATAF)

Issue:

DSERTAF1-34795

Descrição:

Criação do evento S-5503

Data

28/02/2024

Analistas

Fabio Mendonça / Lucas Passos

Descrição Funcional

Realizar o estudo das necessidade para realizar a criação deste cadastro utilizando o POUI.
Analisar também as possíveis melhorias que podem ser realizadas no back-end.


Estudo:


Realizado estudo do evento conforme layout do esocial considerando os recursos disponíveis no produto e recursos disponíveis na biblioteca do PO-UI e foi desenvolvido esboço das telas no figma:


Com base no layout proposto no Figma foi criada a branc esocial/sprint-meninosDoEvandro/DSERTAF1-34795 no Gitea onde a proposta das telas ficou da seguinte maneira.




01. ADAPTAÇÕES

Existe um leiaute de componentes pré-definidos para a inclusão de painéis no projeto taf-thf que deve ser seguido, composto pelos componentes: div com a class "po-wrapper", app-menu, po-page-default, app-header. Logo em seguida ao app-header, abaixo dos componentes mencionados anteriormente, é colocado o(s) componente(s) do novo painel.

Ao usarmos o componente po-page-dynamic-table, contudo, houve conflito com os componentes po-page-default e com a visualização do título do app-header. Em vista disso, foi necessário eliminar o po-page-default para correto dimensionamento do po-page-dynamic-table, e ocultar o título do app-header e utilizar o título do próprio componente po-page-dynamic-trable, ficando conforme abaixo:


02. PRINCIPAIS VANTAGENS

02.01. Page Dynamic Table

O componente POUI Page Dynamic Table dispõe de funcionalidades que abrangem outros componentes inteiros, que de outra forma precisariam ser implementados e estilizados individualmente. Sem contar funcionalidades que não são componentes, mas que precisariam ter sua lógica implementada via typescript, como, por exemplo, a funcionalidade do Carregar Mais, sinalizações de carga de tabela, entre outras.

Os elementos próprios de POUI que não foi preciso implementar são mencionados abaixo e nos prints que seguem:

> Services

> Buttons

> Input (Para permitir pesquisa rápida)

> Pipe

> Disclaimer

> Table



Nesta tela será apresentado as informações principais do registro do totalizador e as ações que serão possíveis executar para cada registro:



04. Back-end para o painel


Exemplo de API feito em TLPP onde foi criada a classe principal e seus métodos para retornar a informação de acordo com end-point requisitado pelo front. 


                  

Class Totalizador5503

    public Method New() as object
      

      //Browser
    @Get("/totalizadorS5503")
    public Method totalizadorS5503()

    //Tabela 1 (Neste exemplo usamos apenas esse metodo para as duas tabelas)
    //Pode ser implementado um segundo metodo para a tabela 2
    @Get("/totalizadorS5503/Details")
    public Method totalizadorDetails()

EndClass



Para a exibição do browser foi criado o Método totalizadorS5503(), onde será retornado além das informações necessárias para o preenchimento dos campos do componente Page Dynamic Table o RECNO da tabela pai do evento S-5503 que será usado como chave para os demais métodos. 

                  

Method totalizadorS5503() Class Totalizador5503



    Local oJson     := JsonObject():New()
    Local oJsonAux  
    Local nPage     as numeric
    Local nPageSize as numeric
    Local nRegIni   as numeric
    Local nRegFim   as numeric
    Local cPerRef   as character
    Local cCPF      as character
    Local cQry      as character
    Local cNome     as character
    Local cSearch   as character
    Local jQuery := oRest:getQueryRequest()

    T2M->(DbSetOrder(1))
    T2M->(DbGoTop())


    oJson['items'] := {}
    cPerRef     := IIF(jQuery['perRef']     <> Nil, jQuery['perRef'],           '')
    cCPF        := IIF(jQuery['cpf']        <> Nil, jQuery['cpf'],              '')
    cSearch     := IIF(jQuery['search']     <> Nil, jQuery['search'],           '')
    nPage       := IIF(jQuery['page']       <> Nil, Val(jQuery['page']),        1 )
    nPageSize   := IIF(jQuery['pageSize']   <> Nil, Val(jQuery['pageSize']),    15)

    nRegIni := ( ( nPage - 1 ) * nPageSize ) + 1    
    nRegFim := nPage * nPageSize

    cQry += "        SELECT * FROM ( "
    cQry += "           SELECT ROW_NUMBER() OVER( ORDER BY T2M.R_E_C_N_O_ ) LINE_NUMBER, "
    cQry += "               T2M.R_E_C_N_O_  RECNO, T2M_PERAPU PERIODO, T2M_CPFTRB CPF, T2M_NRRECI RECIBO "
    cQry += "           FROM " + RetSqlName("T2M") + " T2M "
    cQry += "           WHERE T2M_PERAPU = ? "

    If !Empty(cCPF) .or. !Empty(cSearch)
        cQry += "           AND T2M_CPFTRB = ? "
    EndIf

    cQry += "           AND D_E_L_E_T_ = '' "
    cQry += "       ) TAB  "
    cQry += "        WHERE LINE_NUMBER BETWEEN "+ cValTochar(nRegIni) + "AND " + cValTochar(nRegFim) + " "

    oStatement := FWPreparedStatement():New( ChangeQuery(cQry) )

    oStatement:setString(1, cPerRef)

    If !Empty(cCPF)
        oStatement:setString(2, cCPF)
    EndIf  

    If !Empty(cSearch)
        oStatement:setString(2, cSearch)
    EndIf    

    cQry := oStatement:getFixQuery()

    cAliasProd := MPSysOpenQuery(cQry)

    While (cAliasProd)->(!EoF())

        cNome   := TAFGetNT1U((cAliasProd)->CPF)

        If Empty(cNome)
            C9V->(DbSetOrder(3))

            If C9V->(MsSeek(xFilial("C9V") + (cAliasProd)->CPF + "1"))
                cNome := C9V->C9V_NOME
            Else
                cNome := TAFGetNT3A((cAliasProd)->CPF)
            EndIf

        EndIf

        oJsonAux := JsonObject():New()
        oJsonAux['period']          := Transform((cAliasProd)->PERIODO, "@R 9999-99")
        oJsonAux['cpf']             := AllTrim(Transform((cAliasProd)->CPF,"@R 999.999.999-99"))
        oJsonAux['name']            := cNome
        oJsonAux['receipt']         := AllTrim((cAliasProd)->RECIBO)
        oJsonAux['processNumber']   := '1234556'
        oJsonAux['RECNO']           := (cAliasProd)->RECNO

        Aadd(oJson['items'],oJsonAux)
        FreeObj(oJsonAux)

        (cAliasProd)->(DbSkip())

    End

    oJson["hasNext"] := HasNext( nRegFim, cPerRef )

    (cAliasProd)->(DbCloseArea())
    T2M->(DbCloseArea())
    FreeObj(oStatement)

Return oRest:SetResponse(oJson)

05. Links de consulta:

https://po-ui.io/documentation

https://www.gov.br/esocial/pt-br/documentacao-tecnica/leiautes-esocial-v-1-2-nt-02-2024/index.html#evtFGTSProcTrab

Padronização para nomenclaturas no uso do TLPP

TLPP