01. DADOS GERAIS

Produto:

Linha de Produto:

 

Segmento:

Varejo 

Módulo:PDV OMNI - DESKTOP
Função:CONSULTA CONFIGURAÇÕES
Ticket:
Requisito/Story/Issue (informe o requisito relacionado) :DVAROMNICK-745


02. 
SITUAÇÃO/REQUISITO

Situação Atual: A tela de cadastro de "Motivos de Experiência de Uso" no PDV Central não possui paginação nativa. Atualmente, a grid carrega os registros baseada apenas nos filtros, exigindo que o usuário altere manualmente a quantidade de registros a serem exibidos para visualizar mais dados. Isso torna a navegação ineficiente, especialmente em cenários com grande volume de dados, e pode impactar a performance da renderização.

Além disso, foram identificados comportamentos instáveis na aplicação relacionados ao gerenciamento de threads na UI (travamentos) e exceções (ObjectDisposedException) no componente de Debouncer durante pesquisas rápidas, bem como erros de referência nula (NullReferenceException) na manipulação de entidades de domínio quando carregadas sem seus relacionamentos.

Requisito: Implementar paginação nativa (server-side) na listagem de motivos de experiência de uso, permitindo a navegação fluida entre as páginas (Próxima, Anterior, Primeira, Última) e respeitando os filtros aplicados. O sistema deve garantir performance adequada com grandes volumes de dados e manter a seleção de registros ao alterar filtros (reiniciando a paginação). Também é necessário corrigir os bugs críticos de estabilidade (entidades e threading) e padronizar a localização dos botões de ação nos filtros para melhorar a usabilidade.

03. SOLUÇÃO

Backend (Repositório e Domínio):

Nova Consulta Paginada: Implementado o método ObterListaMotivoExperienciaEQuantidadeAsync no MotivoExperienciaReadRepository. Este método suporta paginação (Skip/Take), ordenação primária e secundária (Then), filtro textual via ILike e retorna o total de registros para cálculo das páginas.

Correção de Entidades: As classes ExperienciaUso e MotivoExperiencia foram refatoradas para inicializar as listas de relacionamento (ICollection) diretamente no construtor e tratar nulos nos getters/setters. Isso elimina o erro de NullReferenceException ao instanciar entidades sem carregar os objetos filhos.

Namespaces: Refatoração de diversas classes de Domínio e Aplicação para utilizar File-scoped Namespaces.

Frontend (Blazor e UI):

Paginação: A tabela da tela ExperienciaUso.razor foi reescrita para utilizar o componente TotvsPager. Foi adicionada lógica para alternar entre "Pager Numérico" e "Input", além de um seletor para definir a quantidade de "Resultados por página".

Pesquisa Otimizada: Implementado o uso de Debouncer no campo de pesquisa por descrição. Isso evita requisições excessivas ao banco de dados enquanto o usuário digita.

Correção no Debouncer: Corrigido um bug crítico na classe Debouncer.cs onde o CancellationTokenSource recebia Dispose indevidamente, causando exceções durante digitações rápidas.

Correção de Threading: Removida a chamada .ForAwait() (que configura ConfigureAwait(false)) dentro do código da UI (.razor.cs), garantindo que as atualizações da interface ocorram na Thread correta e evitando travamentos.

Padronização Visual: O botão "Limpar Filtros" foi movido para o rodapé (Footer) do componente TotvsFilter para padronização visual e melhor usabilidade.

04. DEMAIS INFORMAÇÕES

Não se aplica

05. ASSUNTOS RELACIONADOS

        Não se aplica