Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

01. DADOS GERAIS

Produto:

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

Linha de Produto:

Linha TOTVS CRM

ERPs impactados:Todos
Módulo:Pedido
Função:Desconto
Ambiente:Web/Android
Ticket:
Requisito/Story/Issue:


02. ESCOPO FUNCIONAL

O sistema deverá possuir tela cadastral para determinação de tempo de entrega, contendo os seguintes campos:

  • Cliente
  • Cidade Origem
  • Cidade Destino
  • UF Origem
  • UF DestinoUnidade Federativa
  • Filial
  • Segmento
  • Dias para entrega
  • "Considerar diasTipo Prazo", podendo determinar se o cálculo será feito sobre dias corridos, ou dias úteis (desconsiderando finais de semana e feriados)

Além disso, o sistema deverá ter forma de configurar os critérios de busca dos prazos de entrega em níveis, por exemplo:

  1. Busque os prazos por Cliente
  2. Se não encontrar, busque os prazos por UF Origem / UF Destino

No pedido de venda, a partir da busca configurada acima, o sistema deverá trazer o campo "Data entrega" automaticamente preenchido segundo o contexto do pedido.

Caso o campo "Data entrega" seja configurado como editável, e o usuário alterá-lo manualmente, o sistema deverá apenas restringir que o prazo de entrega mínimo não seja infringido, ou seja, que o campo não possa ser inferior à data de entrega calculada automaticamente.

03. ESCOPO TÉCNICO

1.

...

Banco de dados

  • Pelo tools, opção 3, o sistema deve adicionar as seguintes colunas na tabela prazoentrega:
    • idparceiro: FK para tabela parceiro, nullable
  • Pelo tools, opção 3, na tabela prazoentrega, o sistema deve tornar a coluna idlocalfilial nullable

2. Telas de cadastro

  • Abaixo do menu Configuração > Configuração Pedido, o sistema deverá receber nova tela de cadastro, de nome "Prazo Entrega",
    • A nova tela conterá grid contendo as seguintes colunas:
      • "Cliente": campo seleção, cujas opções selecionáveis são os parceiros ativos do sistema. 
        • Persistência no campo prazoentrega.idparceiro
      • "Cidade Origem": campo seleção, cujas opções selecionáveis são as cidades ativas do sistema.
        • Caso selecionada alguma opção no campo "UF Origem", o sistema deverá filtrar as seleções do presente campo segundo a consulta:
          • Bloco de código
            /* select idcidade, descricao from cidade where idunidadefederativa = "ID da UF Origem selecionada" and idnativo = 1 */
        • Persistência no campo prazoentrega.idcidadeorigem
      • Cidade Destino
        • Caso selecionada alguma opção no campo "UF Destino", o sistema deverá filtrar as seleções do presente campo segundo a consulta:
          • Bloco de código
            /* select idcidade, descricao from cidade where idunidadefederativa = "ID da UF Destino selecionada" and idnativo = 1 */
        • Persistência no campo prazoentrega.idcidadedestino
      • "UF Origem": campo seleção, cujas opções selecionáveis são as unidades federativas ativas do sistema
        • Caso selecionada alguma opção no campo "Cidade Origem", o sistema deverá filtrar as seleções do presente campo segundo a consulta:
          • Bloco de código
            /* select 
            	uf.idunidadefederativa, uf.descricao
            from cidade c
            inner join unidadefederativa uf on uf.idunidadefederativa = c.idunidadefederativa
            where c.idcidade = "ID da Cidade Origem selecionada" 
            and uf.idnativo = 1 */
        • Persistência no campo prazoentrega.idunidadefedorigem
      • "UF Destino"; campo seleção, cujas opções selecionáveis são as unidades federativas ativas do sistema
        • Caso selecionada alguma opção no campo "Cidade Destino", o sistema deverá filtrar as seleções do presente campo segundo a consulta:
          • Bloco de código
            /* select 
            	uf.idunidadefederativa, uf.descricao
            from cidade c
            inner join unidadefederativa uf on uf.idunidadefederativa = c.idunidadefederativa
            where c.idcidade = "ID da Cidade Destino selecionada" 
            and uf.idnativo = 1 */
        • Persistência no campo prazoentrega.idunidadefeddestino
      • "Filial": campo seleção, cujas opções selecionáveis são as filiais ativas do sistema, segundo a consulta:
        • Bloco de código
          /* select l.idlocal from local l
          inner join localtipolocal ltl on ltl.idlocal = l.idlocal
          inner join tipolocal tl on tl.idtipolocal = ltl.idtipolocal
          where tl.sgltipolocal = "UEM"
          */
        • Persistência no campo prazoentrega.idlocalfilial
      • "Segmento": campo seleção, cujas opções selecionáveis são os segmentos ativos do sistema
        • Persistência no campo prazoentrega.idsegmento
      • "Dias para entrega": Campo numérico editável, aceitando valores inteiros positivos
        • Persistência no campo prazoentrega.prazo
      • "Tipo Prazo": campo drop-down, com as seguintes opções fixas:
          • "Dias corridos": valor "DIASCORR"
          • "Dias úteis": valor "DIASUTEIS"
        • Persistência no campo prazoentrega.sgltipoprazo
      • Persistir o campo prazoentrega.sgltipoentrega como "ENT" de maneira fixa.

3. Configuração de busca

  • Na tela Configuração > Configuração Pedido > Busca entrega, o sistema deverá abrir para configuração os ícones de níveis e filtros gerais,
    • A tabela de origem da busca será a tabela prazoentrega, olhando para o universo de registros marcados como "ENT" no campo prazoentrega.sgltipoentrega
      • Não haverá outra tabela associada para join na busca por níveis.
    • Na última tela (Filtros), serão selecionáveis as seguintes opções no campo "Nome":
        • PARCEIRO_IDPARCEIRO: Parceiro selecionado no pedido
          • Texto de ajuda: 
            • Bloco de código
              -- Parceiro selecionado no pedido
              where prazoentrega.idparceiro = ${Identificador do parceiro selecionado no pedido}
        • CIDADEORIGEM_IDCIDADE: Cidade da filial de venda selecionada no pedido
          • Texto de ajuda:
            • Bloco de código
              -- Cidade da filial de venda selecionada no pedido
              where prazoentrega.idcidadeorigem = (select idcidade from local where idlocal = ${Identificador da filial selecionada no pedido})
        •  CIDADEDESTINO_IDCIDADE: Cidade do local do cliente selecionado no pedido
          • Texto de ajuda:
            • Bloco de código
              -- Cidade do local do cliente selecionado no pedido
              where prazoentrega.idcidadedestino = (select idcidade from local where idlocal = ${Identificador do local selecionado no pedido})
        • UFORIGEM_IDUNIDADEFEDERATIVA: Unidade federativa da cidade da filial de venda selecionada no pedido
          • Texto de ajuda:
            • Bloco de código
              -- Unidade federativa da cidade da filial de venda selecionada no pedido
              where prazoentrega.idunidadefedorigem = (select idunidadefederativa from cidade where idcidade = (select idcidade from local where idlocal = ${Identificador da filial selecionada no pedido}))
        • UFDESTINO_IDUNIDADEFEDERATIVA: Unidade federativa da cidade do local selecionado no pedido
          • Texto de ajuda:
            • Bloco de código
              -- Unidade federativa da cidade do local selecionado no pedido
              where prazoentrega.idunidadefeddestino = (select idunidadefederativa from cidade where idcidade = (select idcidade from local where idlocal = ${Identificador do local selecionado no pedido}))
        • FILIAL_IDLOCAL
          • Texto de ajuda: Filial de venda selecionada no pedido
            • Bloco de código
              -- Filial de venda selecionada no pedido
              where prazoentrega.idlocalfilial = ${Identificador da filial selecionada no pedido}
        • SEGMENTO_IDSEGMENTO: Segmento selecionado no pedido
          • Texto de ajuda:
            • Bloco de código
              -- Segmento selecionado no pedido
              where prazoentrega.idsegmento = ${Identificador do segmento selecionado no pedido}))
      • Os textos de ajuda (Tooltip) deverão ser mostrados ao passar o mouse sobre os registros, como ilustra a imagem a seguir:
        • Image Added

4. Implementação no pedido

  • No pedido de venda, 
    • No campo "Data entrega",
      • O sistema deverá preencher automaticamente o campo mediante a busca definida pela configuração referente ao ponto 3, adicionando o prazo de entrega resultante da consulta à data atual (current_date + prazoentrega.prazo)
      • Caso o usuário edite o campo manualmente, o sistema deverá somente validar ao finalizar o pedido que a data do campo seja maior ou igual que a data definida pela consulta acima.
        • Caso seja maior ou igual, o sistema deve permitir a finalização no pedido
        • Caso contrário, o sistema deve realizar Rollback, retornando a seguinte mensgem: a data de entrega mínima deva ser ${Data retornada pelo calculo current_date + prazoentrega.prazo retornado pela consulta}