Árvore de páginas

01. DADOS GERAIS


Produto:

TOTVS CRM Automação da Força de Vendas

Linha de Produto:

Linha TOTVS CRM SFA

Módulo:Venda
Função:Pedido
Ticket:
Requisito/Story/Issue:

TSFAFSWE-3952 - Obtendo detalhes do item... STATUS

02. ESCOPO FUNCIONAL

Atualmente,

Pela tela de Cadastro → Venda → Desconto,

O sistema permite que todo o tipo de desconto seja cadastrado na mesma tela, e por consequência, armazenado na mesma tabela em banco de dados.

Essa característica produz algumas dificuldades de usabilidade, sendo elas:

  1. Não é usual identificar e filtrar todos os descontos com o mesmo perfil de variação, visto que todos os registros são exibidos de uma só vez
  2. Ao cadastrar um conjunto de registros de descontos que necessitem receber o mesmo filtro por alguma entidade, é necessário cadastrar em todos os registros o filtro em questão, não é possível cadastrar de uma só vez, de maneira múltipla.
  3. Não é possível atualmente cadastrar somente um desconto que será vinculado com múltiplos registros de outra entidade, devido à estrutura de ligação entre desconto e outras entidades é 1x1. Dessa forma, caso seja necessário criar uma política de desconto com 3 tabelas de preço específicas, é necessário realizar a criação de três registros de desconto idênticos, variando apenas as tabelas de preço vinculadas.

Agora,

No ambiente Web, abaixo do menu Cadastro → Venda,

O sistema deve possuir uma tela de cadastros para Classes de desconto/acréscimo, de forma a agrupar registros de desconto de determinado perfil.

A criação desta nova entidade tem como pretensão resolver as dificuldades citadas, das seguintes formas

  1. A nova entidade poderá servir de filtro para abertura da tela de descontos da mesma classe, com a intenção de facilitar a organização da manutenção de registros de desconto
  2. O usuário poderá informar filtros vinculados à classe de descontos, que poderão ser herdados por todos os registros de desconto, se devidamente configurados em Configuração → Configuração pedido → Busca Produto → DESCONTO.
  3. A nova entidade poderá servir de maneira para vinculação do desconto com múltiplos registros de outra entidade, com estrutura de ligação NxN, ou seja, aproveitando o exemplo anterior, haverá a possibilidade de que o mesmo registro de descontos seja vinculado com as 3 tabelas de preço específicas, uma vez que elas podem ser vinculadas com a classe de descontos vinculado ao desconto

Ainda, a nova entidade poderá receber cadastro de valor numérico inteiro para determinar a ordem de cálculo dos descontos, caso exista um modelo de múltiplos descontos em que a ordem de cálculo de descontos influencie no preço final calculado. O épico referente à associação de múltiplos descontos pode ser acessada por este link

03. ESCOPO TÉCNICO

03.01 Alteração de banco de dados

03.01.01 Criação de tabela classedesconto

Contexto / Gatilho:

  • Tools, opção 3

Lógica:

  • Criação de tabela classedesconto, com os seguintes campos

    idclassedesconto: pk
    idnativo: byte, default 1, not-null
    descricao: string(200), not-null
    codigo: string(20), not-null
    ordemaplicacao: integer, not-null
    codigoerp
    wsversao

03.01.02 Criação de registro padrão na tabela classedesconto

Contexto / Gatilho:

  • Tools, opção 5

Lógica:

  • Criação de registro na tabela classedesconto, sendo:

    idclassedesconto: nextval('seqpkclassedesconto')
    idnativo: 1
    descricao: Padrão
    codigo: PAD
    ordemaplicacao: 1
    codigoerp: null

03.01.03 Adição de coluna idclassedesconto na tabela desconto

Contexto / Gatilho:

  • Tools, opção 3

Lógica:

  • Criação de coluna idclassedesconto na tabela desconto, sendo:

    idclassedesconto: integer, nullable, fk para tabela 

03.01.04 Atualização de descontos sem classe para classe de desconto padrão

Contexto / Gatilho:

  • Tools, opção 5, executado somente uma vez

Lógica:

  • Realização do seguinte script de atualização:

     /* update desconto set idclassedesconto = (select idclassedesconto from classedesconto where codigo = 'PAD') where idclassedesconto is null */

03.01.05 Criação de tabela classedescontovinculo

Contexto / Gatilho:

  • Tools, opção 3

Lógica:

  • Criação da tabela classedescontovinculo, com os seguintes campos

    idclassedescontovinculo: pk
    idsegmento: fk para tabela segmento
    idfilial: fk para tabela filial
    idregiao: fk para tabela regiao
    idUnidadefederativa: fk para tabela Unidadefederativa
    idusuario: fk para tabela usuario
    idGrupoparceiro: fk para tabela Grupoparceiro
    idparceiro: fk para tabela parceiro
    idlocal: fk para tabela local
    idTipologia: fk para tabela Tipologia
    idGrupoproduto: fk para tabela Grupoproduto
    idProduto: fk para tabela Produto
    idTabelapreco: fk para tabela Tabelapreco
    idCondicaopagamento: fk para tabela Condicaopagamento
    idPerfilacesso: fk para tabela Perfilacesso
    idGrupousuario: fk para tabela Grupousuario
    idTipopedido: fk para tabela Tipopedido
    idEmbalagem: fk para tabela Embalagem
    idTipoproduto: fk para tabela Tipoproduto
    idCidade: fk para tabela Cidade
    idClassificacaoparceiro: fk para tabela Classificacaoparceiro
    idLinha: fk para tabela Linha
    idTipofrete: fk para tabela Tipofrete
    idTipoestoque: fk para tabela Tipoestoque
    idFaixavidautil: fk para tabela Faixavidautil
    idLote: fk para tabela Lote

03.02 Cadastro de classes de desconto

03.02.01 Criação de tela de cadastro

Contexto / Gatilho:

  • Ambiente Web, abaixo do menu Cadastro → Venda

Lógica:

  • O sistema deverá realizar a criação de uma opção de menu de nome "Classe de desconto".

  • Clicando sobre a opção do menu "Classe de desconto", o sistema deve exibir tela com os seguintes elementos:
  • SlickGrid contendo as seguintes colunas:
      • "Classes de desconto": Título da página
      • "Descrição": Campo texto, editável, representando o valor da coluna classedesconto.descricao
      • "Código": Campo texto, editável representando o valor da coluna classedesconto.codigo
      • "Situação": Texto, editável exibindo Ativo/Inativo quando o campo classedesconto.idnativo estiver com respectivos valores 1/0. Ao editar o campo, o tipo do campo vira check-box marcada/desmarcada quando o campo classedesconto.idnativo estiver com respectivos valores 1/0
      • : botão "Vínculos" que, quando clicado, enviará o usuário para a tela de vínculos de classe de desconto.
        : ícone "Ordem de aplicação" que ao clicado e arrastado (drag), possibilita a alteração de ordenação entre os registros de classe de desconto, ordenação essa administrada pelo campo classedesconto.ordemaplicacao
    • A grid deverá ter recurso de adicionar novo registro, disponibilizando botão "Adicionar" que, quando clicado, adicionará nova linha na grid, para que os campos sejam preenchidos e o registro preenchido ao clicar em "Gravar".
      • Caso o usuário deseje cancelar a alteração do registro adicionado, ou a alteração de um registro não gravado, poderá clicar em botão "Cancelar alteração"
    • A pesquisa rápida deve considerar os campos classedesconto.descricao e classedesconto.codigo
    • A pesquisa avançada deverá disponibilizar os seguintes campos:
      • "Descrição": campo texto.
        • Quando preenchido buscará pelo campo classedesconto.descricao
      • "Código": campo texto
        • Quando preenchido buscará pelo campo classedesconto.codigo
      • "Situação": campos check-box com opções:
        • "Ativo": Marcado por padrão. Quando marcado, filtra registros de credencial onde o campo credencial.idnativo = 1
        • "Inativo": Desmarcado por padrão. Quando marcado, filtra registros de credencial onde o campo credencial.idnativo = 0

03.02.02 Criação de tela de vínculos

Contexto / Gatilho:

  • Ambiente Web, abaixo do menu Cadastro → Venda → Classe de desconto, ao clicar sobre o ícone "Vínculos"

Lógica:

  • O sistema deve exibir tela com os seguintes elementos visuais:
  • "Vinculos da classe de desconto": Título da página
  • ${Descrição da classe de desconto}: Sub-título da página
  • SlickGrid contendo as seguintes colunas:
    • Check-box para seleção, para que se possa realizar a deleção massiva de registros através do botão "Remover selecionados"
    • "Segmento": Campo de pesquisa, editável, pesquisando registros ativos da entidade segmento, possibilitando a seleção de múltiplos registros
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idsegmento
    • "Filial": Campo de pesquisa, editável, pesquisando registros ativos da entidade local, filtrados como tipolocal UEM, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idtipolocal
    • "Região": Campo de pesquisa, editável, pesquisando registros ativos da entidade regiao, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idregiao
    • "Unidade federativa": Campo de pesquisa, editável, pesquisando registros ativos da entidade unidadefederativa, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idunidadefederativa
    • "Profissional": Campo de pesquisa, editável, pesquisando registros ativos da entidade usuario, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idusuario
    • "Grupo de clientes": Campo de pesquisa, editável, pesquisando registros ativos da entidade grupoparceiro, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idgrupoparceiro
    • "Cliente": Campo de pesquisa, editável, pesquisando registros ativos da entidade parceiro, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idparceiro
    • "Local": Campo de pesquisa, editável, pesquisando registros ativos da entidade local, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idlocal
    • "Tipologia": Campo de pesquisa, editável, pesquisando registros ativos da entidade tipologia, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idtipologia
    • "Grupo de produtos": Campo de pesquisa, editável, pesquisando registros ativos da entidade grupoproduto, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idgrupoproduto
    • "Produto": Campo de pesquisa, editável, pesquisando registros ativos da entidade produto, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idproduto
    • "Tabela preço": Campo de pesquisa, editável, pesquisando registros ativos da entidade tabelapreco, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idtabelapreco
    • "Condição de pagamento": Campo de pesquisa, editável, pesquisando registros ativos da entidade condicaopagamento, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idcondicaopagamento
    • "Perfil de acesso": Campo de pesquisa, editável, pesquisando registros ativos da entidade perfilacesso, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idperfilacesso
    • "Grupo usuário": Campo de pesquisa, editável, pesquisando registros ativos da entidade grupousuario, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idgrupousuario
    • "Tipo de pedido": Campo de pesquisa, editável, pesquisando registros ativos da entidade tipopedido, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idtipopedido
    • "Embalagem": Campo de pesquisa, editável, pesquisando registros ativos da entidade embalagem, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idembalagem
    • "Tipo de produto": Campo de pesquisa, editável, pesquisando registros ativos da entidade tipoproduto, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idtipoproduto
    • "Cidade": Campo de pesquisa, editável, pesquisando registros ativos da entidade cidade, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idcidade
    • "Classificação parceiro": Campo de pesquisa, editável, pesquisando registros ativos da entidade classificacaoparceiro, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idclassificacaoparceiro
    • "Linha": Campo de pesquisa, editável, pesquisando registros ativos da entidade linha, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idlinha
    • "Tipo frete": Campo de pesquisa, editável, pesquisando registros ativos da entidade tipofrete, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idtipofrete
    • "Tipo estoque": Campo de pesquisa, editável, pesquisando registros ativos da entidade tipoestoque, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idtipoestoque
    • "Faixa vida útil": Campo de pesquisa, editável, pesquisando registros ativos da entidade faixavidautil, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idfaixavidautil
    • "Lote": Campo de pesquisa, editável, pesquisando registros ativos da entidade lote, possibilitando a seleção de único registro
      • O valor do campo ser exibido a partir do campo classedescontovinculo.idlote
    • : botão "Remover" que, quando clicado, marca o registro para deleção .
      • Ao clicar em gravar, o registro deve ser devidamente excluído do banco de dados
  • A pesquisa rápida deve pesquisar pelo valor de todos os campos da grid
  • A pesquisa avançada deve conter todos os campos da grid, com seleção múltipla.
  • A grid deverá ter recurso de adicionar novo registro, disponibilizando botão "Adicionar" que, quando clicado, adicionará nova linha na grid, para que os campos sejam preenchidos e o registro preenchido ao clicar em "Gravar".
    • Caso o usuário deseje cancelar a alteração do registro adicionado, ou a alteração de um registro não gravado, poderá clicar em botão "Cancelar alteração"

03.02.03 Adição massiva de vínculos

Contexto / Gatilho:

  • Ambiente Web, abaixo do menu Cadastro → Venda → Classe de desconto, ao clicar sobre o ícone "Vínculos"

Lógica:

  • A grid deverá ter recurso de "Adicionar múltiplos", que quando selecionado, deverá levar o usuário a nova tela de formulário
    • A tela deverá conter os seguintes elementos visuais:
  • "Adição massiva de vínculos": Título da página
  • ${Descrição da classe de desconto}: Sub-título da página
  • Botão "Gerar vínculos" no canto superior direito da tela
    • Quando clicado, o sistema deverá realizar um insert de todas as combinações das entidades selecionadas no corpo da tela (CROSS JOIN)
      • Para evitar falhas de falta de exigência demasiada do servidor, o sistema deverá múltiplicar a quantidade registros selecionados de cada entidade,  e o botão "Gerar vínculos" deve ser desabilitado caso o valor multiplicado ultrapasse 10000
        • Nesse cenário, no hover no mouse sobre o botão, exibir tooltip: "Limite de 10000 combinações atingido. Diminua a quantidade de registros selecionados"
      • Como o sistema pode levar um tempo considerável para realizar a operação, é necessário que o sistema exiba a mensagem: "Por favor aguarde. Esse processo pode levar alguns minutos"
  • No corpo da tela, o sistema deve exibir os campos de pesquisa referenciados anteriormente na grid, porém aceitando múltipla seleção.

03.03 Alteração de cadastro de desconto

03.03.01 Adição de coluna "Classe desconto"

Contexto / Gatilho:

  • Ambiente Web, abaixo do menu Cadastro → Venda → Desconto

Lógica:

  • O sistema deverá exibir nova coluna, sendo
  • "Classe desconto": campo pesquisa, exibindo como opções selecionáveis registros ativos da entidade classedesconto, obrigatório, editável.
    • O valor selecionado na coluna deve ser persistido no campo desconto.idclassedesconto

03.04 Alteração de configuração de níveis de desconto

03.04.01 Novas entidades para join nos níveis

Contexto / Gatilho:

  • Ambiente Web, em Busca Produto → DESCONTO → DESCONTO - Níveis

Lógica:

  • O sistema deve adicionar as entidades "CLASSEDESCONTO" e "CLASSEDESCONTOVINCULO" como tabelas vinculáveis na busca de níveis
    • Ao selecionar respectivamente os registros acima, o sistema deve fazer a vinculação em banco pelos critérios a seguir:

      inner join classedesconto on desconto.idclassedesconto = classedesconto.idclassedesconto
      inner join classedescontovinculo on desconto.idclassedesconto = classedescontovinculo.idclassedesconto

03.04.02 Filtros das entidades adicionadas

Contexto / Gatilho:

  • Ambiente Web, em Configuração → Configuração pedido → Busca Produto → DESCONTO → DESCONTO - Cadastro de filtros

Lógica:

  • Para a entidade CLASSEDESCONTOVINCULO
    • O sistema deve adicionar os seguintes filtros, com o campo operação e valor somente leitúra:
  • IDUSUARIOLOGADO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idusuario = :usuario_logado
  • IDUSUARIOPROFISSIONAL: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.usuario = :usuario_selecionado_cabecalho
  • LOCALFILIAL_IDLOCAL: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idfilial = :filial_selecionada_cabecalho
  • PARCEIRO_IDPARCEIRO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idparceiro = :parceiro_selecionado_cabecalho
  • CLASSIFICACAOPARCEIRO_IDCLASSIFICACAOPARCEIRO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idclassificacaoparceiro = (select idclassificacaoparceiro from parceiro where idparceiro = :parceiro_selecionado_cabecalho)
  • GRUPOPARCEIRO_IDGRUPOPARCEIRO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idgrupoparceiro in (select idgrupoparceiro from parceirogrupoparceiro where idparceiro = :parceiro_selecionado_cabecalho)
  • LOCAL_IDLOCAL: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idlocal = :local_selecionado_cabecalho
  • LOCAL_IDREGIAO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idregiao in (select idregiao from localregiao where idlocal = :local_selecionado_cabecalho)
  • LOCALFILIAL_IDREGIAO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idregiao in (select idregiao from localregiao where idlocal = :filial_selecionada_cabecalho)
  • LOCAL_IDTIPOLOGIA: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idtipologia in (select idtipologia from localtipologia where idlocal = :local_selecionado_cabecalho)
  • LOCALFILIAL_IDTIPOLOGIA: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idtipologia in (select idtipologia from localtipologia where idlocal = :filial_selecionada_cabecalho)
  • LOCAL_IDUNIDADEFEDERATIVA: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idunidadefederativa in (select idunidadefederativa from cidade where idcidade in (select idcidade from local where idlocal = :local_selecionado_cabecalho))
  • LOCALFILIAL_IDUNIDADEFEDERATIVA: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idunidadefederativa in (select idunidadefederativa from cidade where idcidade in (select idcidade from local where idlocal = :filial))
  • CONDICAOPAGAMENTO_IDCONDICAOPAGAMENTO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idcondicaopagamento = :condicaopagamento_selecionada_cabecalho
  • TABELAPRECO_IDTABELAPRECO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idtabelapreco = :tabelapreco_selecionada_cabecalho
  • IDTIPOPRODUTO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idtipoproduto = :tipoproduto_selecionada_cabecalho
  • PRODUTO_IDTIPOPRODUTO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idtipoproduto in (select idtipoproduto from produtotipoproduto where idproduto = :pedidoproduto_idproduto)
  • IDGRUPOPRODUTO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idgrupoproduto = :grupoproduto_selecionado_cabecalho
  • IDTIPOLOGIA: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idtipologia = :tipologia_selecionada_cabecalho
  • PRODUTO_IDTIPOLOGIA : Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idproduto = :pedidoproduto_idproduto
  • PRODUTO_IDGRUPOPRODUTO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idgrupo in (select idgrupo from produtogrupoproduto where idproduto = :pedidoproduto_idproduto)
  • PRODUTO_IDEMBALAGEM: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idembalagem in (select idembalagem from produtoembalagem where idproduto = :pedidoproduto_idproduto)
  • PRODUTO_IDLINHA: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idlinha in (select idlinha from linhaproduto where idproduto = :pedidoproduto_idproduto)
  • IDCIDADE: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idcidade = (select idcidade from local where idlocal = :local_selecionado_cabecalho)
  • IDTIPOFRETE: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idtipofrete = :tipofrete_selecionado
  • IDGRUPOUSUARIO_LOGADO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idgrupousuario in (select idgrupousuario from usuariogrupousuario where idusuario = :usuario_logado)
  • IDGRUPOUSUARIO_PROFISSIONAL: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idgrupousuario in (select idgrupousuario from usuariogrupousuario where idusuario = :usuario_selecionado_cabecalho)
  • IDPERFIL_USUARIOLOGADO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idperfilacesso = (select idperfilacesso from usuario where idusuario = :usuario_logado)
  • IDPERFIL_USUARIOPROFISSIONAL: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idperfilacesso = (select idperfilacesso from usuario where idusuario = :usuario_selecionado_cabecalho)
  • IDTIPOPEDIDO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idtipopedido = :tipopedido_selecionado_cabecalho
  • SEGMENTO_IDSEGMENTO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idsegmento = :segmento_selecionado_cabecalho
  • PRODUTO_IDPRODUTO: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idproduto = :pedidoproduto_idproduto
  • PRODUTO_IDTIPOESTOQUE: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idtipoestque = :tipoestque_selecionado_cabecalho
  • PRODUTO_IDFAIXAVIDAUTIL: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idfaixavidautil = :pedidoproduto_idfaixavidautil
  • PRODUTO_IDLOTE: Quando selecionado, o sistema deverá adicionar a seguinte cláusula where à consulta SQL
    • where classedescontovinculo.idlote = :pedidoproduto_idlote_selecionado
  • Para a entidade CLASSEDESCONTO
    • O sistema deve adicionar os seguintes filtros com os campos operacao e valor abertos para edição:
  • IDNATIVO: referente ao campo classedesconto.idnativo
    • Exibir operações referentes a valores byte
  • DESCRICAO: referente ao campo classedesconto.descricao
    • Exibir operações referentes a valores textuais
  • CODIGO: referente ao campo classedesconto.codigo
    • Exibir operações referentes a valores textuais
  • ORDEMAPLICACAO: referente ao campo classedesconto.ordemaplicacao
    • Exibir operações referentes a valores numéricos

03.05 Implementação de busca de descontos por classe de desconto

03.05.01 Implementação de busca de descontos de entidades adicionadas na configuração de níveis

Contexto / Gatilho:

  • Ambiente Web/Android, no pedido de venda, ao buscar o cache de descontos dos produtos

Lógica:

  • O sistema deve levar em consideração as novas entidades adicionadas na seção 03.04, filtrando as tabelas vinculáveis "CLASSEDESCONTO"  e "CLASSEDESCONTOVINCULO", com seus respectivos filtros, se cadastrados em Configuração → Configuração pedido → Busca Produto → DESCONTO


Configuração → Configuração pedido → Busca Produto → DESCONTO
	1º nível
		Entidade DESCONTO
			Filtro PRODUTO_IDPRODUTO
		Entidade CLASSEDESCONTO
			Filtro CODIGO EQ "PAD"
		Entidade CLASSEDESCONTOVINCULO
			Filtro TABELAPRECO_IDTABELAPRECO
	2º nível
		Entidade CLASSEDESCONTOVINCULO
			Filtro LOCALFILIAL_IDLOCAL

Cadastro de descontos (desconto)
{
	idproduto: 1,
	idclassedesconto: 1,
	idfilial: 1,
	idtabelapreco: 1,
	faixapercentualinicial: 0,
	falxapercentualfinal: 20,
	sgllogicaexceder: null	
},
{
	idproduto: 1,
	idclassedesconto: 1,
	idfilial: 1,
	idtabelapreco: 1,
	faixapercentualinicial: 20.000001,
	falxapercentualfinal: 50,
	sgllogicaexceder: APR	
},
{
    idclassedesconto: 2,
	faixapercentualinicial: 0,
	falxapercentualfinal: 100,
	sgllogicaexceder: BLQ
},
{
    idclassedesconto: 3,
	faixapercentualinicial: 0,
	falxapercentualfinal: 100,
	sgllogicaexceder: null
}

Cadastro de classes de descontos (classedesconto):
{
	idclassedesconto: 1,
	codigo: "PAD"
},
{
	idclassedesconto: 2,
 	codigo: "A" 
},
{
	idclassedesconto: 3,
 	codigo: "B" 
}

Cadastro de vínculos de classes de desconto (classedescontovinculo):
{
	idclassedesconto: 1,
	idtabelapreco: 2,
},
{
	idclassedesconto: 2,
	idfilial: 1
},
{
	idclassedesconto: 2,
	idfilial: 2
},
{
	idclassedesconto: 3,
	idfilial: 3
}

Caso 1) Fazendo um pedido com:
	pedido.idlocalfilialfaturamento = 1
	pedido.idtabelapreco = 1
	pedidoproduto.idproduto = 1
	pedidoproduto.percentualdesconto = 20

		Select 1º Nível: 
			/* select * from
				desconto d 
				inner join classedesconto cd on cd.idclassedesconto = d.idclassedesconto
				inner join classedescontovinculo cdv on cdv.idclassedesconto = d.idclassedesconto
				where d.produto = 1
				and 20 between d.faixapercentualinicial and d.faixapercentualfinal
				and cd.codigo = 'PAD'
				and cdv.idtabelapreco = 1	
			*/
			Nenhum resultado encontrado
		Select 2º Nível:
			 /* select * from
				desconto d 
				inner join classedescontovinculo cdv on cdv.idclassedesconto = d.idclassedesconto
				where 20 between d.faixapercentualinicial and d.faixapercentualfinal
				cdv.idfilial = 1
			*/
			1 registro encontrado: 
			 {
			    idclassedesconto: 2,
				faixapercentualinicial: 0,
				falxapercentualfinal: 100,
				sgllogicaexceder: BLQ
			},
	Resultado: O sistema vai bloquear a inserção do desconto

Caso 2) Fazendo um pedido com:
	pedido.idlocalfilialfaturamento = 1
	pedido.idtabelapreco = 2
	pedidoproduto.idproduto = 1
	pedidoproduto.percentualdesconto = 20

		Select 1º Nível: 
			/* select * from
				desconto d 
				inner join classedesconto cd on cd.idclassedesconto = d.idclassedesconto
				inner join classedescontovinculo cdv on cdv.idclassedesconto = d.idclassedesconto
				where d.produto = 1
				and 20 between d.faixapercentualinicial and d.faixapercentualfinal
			    and cd.codigo = 'PAD'
				and cdv.idtabelapreco = 2
			*/
			1 registro encontrado:  
			{
				idproduto: 1,
				idclassedesconto: 1,
				idfilial: 1,
				idtabelapreco: 1,
				faixapercentualinicial: 0,
				falxapercentualfinal: 20,
				sgllogicaexceder: null	
			}

Resultado: O sistema vai permitir a inserção do desconto

Caso 3) Fazendo um pedido com:
	pedido.idlocalfilialfaturamento = 1
	pedido.idtabelapreco = 2
	pedidoproduto.idproduto = 1
	pedidoproduto.percentualdesconto = 35

		Select 1º Nível: 
			/* select * from
				desconto d 
				inner join classedesconto cd on cd.idclassedesconto = d.idclassedesconto
				inner join classedescontovinculo cdv on cdv.idclassedesconto = d.idclassedesconto
				where d.produto = 1
				and 35 between d.faixapercentualinicial and d.faixapercentualfinal
			    and cd.codigo = 'PAD'
				and cdv.idtabelapreco = 2
			*/
			1 registro encontrado:  
			{
				idproduto: 1,
				idclassedesconto: 1,
				idfilial: 1,
				idtabelapreco: 1,
				faixapercentualinicial: 20.000001,
				falxapercentualfinal: 50,
				sgllogicaexceder: APR	
			},

Resultado: O sistema vai permitir a inserção do desconto, porém encaminhará o pedidopara aprovação selecionada em desconto.idtipoaprovacao

Caso 4) Fazendo um pedido com:
	pedido.idlocalfilialfaturamento = 1
	pedido.idtabelapreco = 2
	pedidoproduto.idproduto = 1
	pedidoproduto.percentualdesconto = 60

		Select 1º Nível: 
			/* select * from
				desconto d 
				inner join classedesconto cd on cd.idclassedesconto = d.idclassedesconto
				inner join classedescontovinculo cdv on cdv.idclassedesconto = d.idclassedesconto
				where d.produto = 1
				and 60 between d.faixapercentualinicial and d.faixapercentualfinal
			    and cd.codigo = 'PAD'
				and cdv.idtabelapreco = 2
			*/
			Nenhum registro encontrado:  
 		Select 2º Nível:
			 /* select * from
				desconto d 
				inner join classedescontovinculo cdv on cdv.idclassedesconto = d.idclassedesconto
				where 60 between d.faixapercentualinicial and d.faixapercentualfinal
				cdv.idfilial = 1
			*/
			1 registro encontrado: 
			 {
			    idclassedesconto: 2,
				faixapercentualinicial: 0,
				falxapercentualfinal: 100,
				sgllogicaexceder: BLQ
			}, 

Resultado: O sistema vai bloquear a inserção do desconto 
  • Sem rótulos