Árvore de páginas

01. DADOS GERAIS


Produto:

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

Linha de Produto:

Linha TOTVS CRM SFA

ERPs impactados:Protheus, Datasul e ERPs terceiros
Módulo:Vendas
Função:Itens de pedido
Ticket:
Requisito/Story/Issue:


03. ESCOPO TÉCNICO

1. Criação de campos em banco de dados

O sistema deverá, via opção 3 do tools, criar a tabela wsconfigpedcampovinculo, com os seguintes campos:

  • idwsconfigpedidocampo: fk para wsconfigpedidocampo, nullable
  • contexto: varchar(20), not-null
  • idndiferente: byte, default 0, nullable
  • idusuario: fk para tabela usuario, nullable
  • idparceiro: fk para tabela parceiro, nullable
  • idlocal: fk para tabela local, nullable
  • idlocalcobranca: fk para tabela local, nullable
  • idregiao: fk para tabela regiao, nullable
  • idcidade: fk para tabela cidade, nullable
  • idunidadefederativa: fk para tabela unidadefederativa, nullable
  • idfilial: fk para tabela local, nullable
  • idcondicaopagamento: fk para tabela condicaopagamento, nullable
  • idgrupoparceiro: fk para tabela grupoparceiro, nullable
  • idsegmento: fk para tabela segmento, nullable
  • idtipologia: fk para tabela tipologia, nullable
  • idtipopedido_cab: fk para tabela tipopedido, nullable
  • idtipopedido_item: fk para tabela tipopedido, nullable
  • idtipocobranca: fk para tabela tipocobranca, nullable
  • idtabelapreco_cab: fk para tabela tabelapreco, nullable
  • idtabelapreco_item: fk para tabela tabelapreco, nullable
  • idindexador: fk para tabela indexador, nullable
  • idwsconfigpedidoagrupador: fk para tabela wsconfigpedidoagrupador, nullable

  • idoperacao: fk para tabela operacao, nullable
  • idtipoestoque_cab: fk para tabela tipoestoque, nullable
  • idtipoestoque_item: fk para tabela tipoestoque, nullable
  • idsafra_cab: fk para tabela safra, nullable
  • idsafra_item: fk para tabela safra, nullable
  • idcultura_cab: fk para tabela cultura, nullable
  • idcultura_item: fk para tabela cultura, nullable
  • idtipodesconto: fk para tabela tipodesconto, nullable
  • idcontroleflex: fk para tabela controleflex, nullable

2. Tela de configuração de "Operações condicionais"

  • Na tela de Configuração > Configuração Pedido > Produto, deverá existir um botão com label "Operações condicionais", com ícone definido pelo link: https://www.flaticon.com/free-icon/rules_9798461?term=rules&page=1&position=14&origin=search&related_id=9798461
    • Quando clicado, o sistema abrirá uma nova tela, com título "Operações condicionais - ${Código do campo selecionado na tela anterior}"
      • Essa tela conterá 3 abas:
        • Visualização
          • A tela de visualização será implementada no futuro. Por hora, o sistema pode exibir mensagem: "A visualização condicional de campos ainda não está implementada"
        • Edição 
          • A aba deverá exibir elemento de pesquisa rápida.
          • A aba deverá exibir grid, com os seguintes campos:
            • Profissional
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idusuario
            • Cliente
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idparceiro
            • Local
              • Trazer todos os ativos vinculados ao parceiro selecionado.
              • Se não houver parceiro selecionado, trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idlocal
            • Local cobrança
              • Trazer todos os ativos vinculados ao parceiro selecionado.
              • Se não houver parceiro selecionado, trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idlocalcobranca
            • Região
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idregiao
            • Cidade
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idcidade
            • Unidade federativa
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idunidadefederativa
            • Filial
              • Trazer todos os ativos
              • Trazer todos os locais do tipo UEM
              • Persistir em wsconfigpedcampovinculo.idfilial
            • Condição de pagamento
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idcondicaopagamento
            • Grupo de parceiro
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idgrupoparceiro
            • Segmento
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idsegmento
            • Tipologia
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idtipologia
            • Tipo de pedido - Cabeçalho
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idtipopedido_cab
            • Tipo de pedido - Item
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idtipopedido_item
            • Tipo de cobrança
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idtipocobranca
            • Tabela de preço - Cabeçalho
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idtabelapreco_cab
            • Tabela de preço - Item
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idtabelapreco_item
            • Moeda
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idindexador
            • Agrupador
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idwsconfigpedidoagrupador
            • Operação
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idoperacao
            • Tipo estoque - Cabeçalho
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idtipoestoque_cab
            • Tipo estoque - Item
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idtipoestoque_item
            • Safra - Cabeçalho
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idsafra_cab
            • Safra - Item
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idsafra_item
            • Cultura - Cabeçalho
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idcultura_cab
            • Cultura - Item
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idcultura_item
            • Tipo desconto
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idtipodesconto
            • Controle Flex
              • Trazer todos os ativos
              • Persistir em wsconfigpedcampovinculo.idcontroleflex
          • A aba deverá possuir coluna de label "Diferente de": check-box com valores de tela Sim/Não
            • Persistir em wsconfigpedcampovinculo.idndiferente
          • Ao gravar um registro nessa grid, o sistema deverá persistir o campo wsconfigpedcampovinculo.contexto como 'EDI'

3. Edição condicional de campos no pedido

  • Na tela de pedidos, ao realizar a tentativa de edição de um campo (onBeforeEditCell)
    • Para cada item do carrinho, o sistema deverá consultar na tabela wsconfigpedcampovinculo, passando os campos selecionados no pedido como critérios de filtro, para verificar a existência de regras condicionais de obrigatoriedade.
      • 1: Consulta de campos obrigatórios
        // Conjunto de registros com regra de igualdade
        select idwsconfigpedidocampo from wsconfigpedcampovinculo where
        contexto='EDI'
        AND idndiferente = 0
         AND (idusuario = ? or idusuario is null)
         AND (idparceiro = ? or idparceiro is null) 
         AND (idlocal = ? or  idlocal is null) 
         AND (idlocalcobranca = ? or  idlocalcobranca is null) 
         AND (idregiao = ?  or idregiao  is null) // select idregiao from localregiao where idlocal = ?
         AND (idcidade = ?  or idcidade  is null) // select idcidade from local where idlocal = ?
         AND (idunidadefederativa = ?  or idunidadefederativa  is null) // select idunidadefederativa from cidade where idcidade = (select idcidad select e from local where idlocal = ?)
         AND (idfilial = ? or  idfilial is null)  
         AND (idcondicaopagamento = ?  or idcondicaopagamento  is null) 
         AND (idgrupoparceiro = ?  or idgrupoparceiro  is null) 
         AND (idsegmento = ?  or idsegmento  is null) 
         AND (idtipologia = ?  or idtipologia  is null) 
         AND (idtipopedido_cab = ?  or idtipopedido_cab  is null) // tipopedido selecionado no cabeçalho
         AND (idtipopedido_item = ?  or idtipopedido_item  is null) // tipopedido selecionado no item
         AND (idtipocobranca = ?  or idtipocobranca  is null) 
         AND (idtabelapreco_cab = ?  or idtabelapreco_cab  is null) // tabelapreco selecionado no cabeçalho
         AND (idtabelapreco_item = ?  or idtabelapreco_item  is null) // tabelapreco selecionado no cabeçalho
         AND (idindexador = ?  or idindexador  is null) 
         AND (idwsconfigpedidoagrupador = ? or  idwsconfigpedidoagrupador is null)  
         AND (idoperacao = ?  or idoperacao  is null) 
         AND (idtipoestoque_cab = ?  or idtipoestoque_cab  is null) // tipoestoque selecionado no cabeçalho
         AND (idtipoestoque_item = ?  or idtipoestoque_item  is null) // tipoestoque selecionado no cabeçalho
         AND (idsafra_cab = ?  or idsafra_cab  is null) // safra selecionado no cabeçalho
         AND (idsafra_item = ?  or idsafra_item  is null) // safra selecionado no cabeçalho
         AND (idcultura_cab = ?  or idcultura_cab  is null) // cultura selecionado no cabeçalho
         AND (idcultura_item = ?  or idcultura_item  is null) // cultura selecionado no cabeçalho
         AND (idtipodesconto = ?  or idtipodesconto  is null) 
         AND (idcontroleflex = ?  or idcontroleflex  is null)  
         // Conjunto de registros com regra de DIFERENÇA
        UNION
        select idwsconfigpedidocampo from wsconfigpedcampovinculo where
        contexto='EDI'
        AND idndiferente = 1
         AND (idusuario <> ? or idusuario is null)
         AND (idparceiro <> ? or idparceiro is null) 
         AND (idlocal <> ? or  idlocal is null) 
         AND (idlocalcobranca <> ? or  idlocalcobranca is null) 
         AND (idregiao <> ?  or idregiao  is null) // select idregiao from localregiao where idlocal <> ?
         AND (idcidade <> ?  or idcidade  is null) // select idcidade from local where idlocal <> ?
         AND (idunidadefederativa <> ?  or idunidadefederativa  is null) // select idunidadefederativa from cidade where idcidade <> (select idcidad select e from local where idlocal <> ?)
         AND (idfilial <> ? or  idfilial is null)  
         AND (idcondicaopagamento <> ?  or idcondicaopagamento  is null) 
         AND (idgrupoparceiro <> ?  or idgrupoparceiro  is null) 
         AND (idsegmento <> ?  or idsegmento  is null) 
         AND (idtipologia <> ?  or idtipologia  is null) 
         AND (idtipopedido_cab <> ?  or idtipopedido_cab  is null) // tipopedido selecionado no cabeçalho
         AND (idtipopedido_item <> ?  or idtipopedido_item  is null) // tipopedido selecionado no item
         AND (idtipocobranca <> ?  or idtipocobranca  is null) 
         AND (idtabelapreco_cab <> ?  or idtabelapreco_cab  is null) // tabelapreco selecionado no cabeçalho
         AND (idtabelapreco_item <> ?  or idtabelapreco_item  is null) // tabelapreco selecionado no cabeçalho
         AND (idindexador <> ?  or idindexador  is null) 
         AND (idwsconfigpedidoagrupador <> ? or  idwsconfigpedidoagrupador is null)  
         AND (idoperacao <> ?  or idoperacao  is null) 
         AND (idtipoestoque_cab <> ?  or idtipoestoque_cab  is null) // tipoestoque selecionado no cabeçalho
         AND (idtipoestoque_item <> ?  or idtipoestoque_item  is null) // tipoestoque selecionado no cabeçalho
         AND (idsafra_cab <> ?  or idsafra_cab  is null) // safra selecionado no cabeçalho
         AND (idsafra_item <> ?  or idsafra_item  is null) // safra selecionado no cabeçalho
         AND (idcultura_cab <> ?  or idcultura_cab  is null) // cultura selecionado no cabeçalho
         AND (idcultura_item <> ?  or idcultura_item  is null) // cultura selecionado no cabeçalho
         AND (idtipodesconto <> ?  or idtipodesconto  is null) 
         AND (idcontroleflex <> ?  or idcontroleflex  is null)  
      • Se houverem registros retornados, o sistema deverá permitir a edição do campo clicado  (idwsconfigpedidocampo) do item em questão.
  • Na tela de pedidos, na alteração de campos relacionados com a tabela wsconfigpedidocampo,
    • O sistema deverá refazer a busca de edição condicional,
      • Caso o sistema encontre campos do item (wsconfigpedidocampo) que já tiveram seu valor alterado (valor de tela <> valor do cache)
        • O sistema deverá exibir a seguinte mensagem de confirmação:
          "O seguintes campos já não são mais editáveis e terão seus valores retornados para os valores padrão:
          ${Label do campo 1},
          ${Label do campo 2} 
          ...
          Deseja prosseguir? 
          "
          Opções Sim/não
        • Caso seja clicada a opção "Sim"
          • O sistema deverá retornar os valores dos campos que não são mais editáveis para o valor do cache.
        • Caso contrário, o sistema executará um rollback e a alteração do campo não será efetivada.
  • Sem rótulos