01. DADOS GERAIS
Produto: | TOTVS CRM Automação da Força de Vendas |
---|
Linha de Produto: | |
---|
ERPs impactados: | Protheus, Datasul e ERPs terceiros |
---|
Módulo: | Pedido |
---|
Função: | Desconto |
---|
Ambiente: | Web/Android |
---|
Ticket: |
|
---|
Requisito/Story/Issue: |
DTSFAPD-2519
-
Obtendo detalhes do item...
STATUS
|
---|
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 Destino
- Filial
- Segmento
- Dias para entrega
- "Tipo 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:
- Busque os prazos por Cliente
- 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:
/* 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:
/* 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:
/* 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:
/* 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:
/* 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:
-- 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:
-- 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:
-- 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:
-- 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:
-- 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
-- Filial de venda selecionada no pedido
where prazoentrega.idlocalfilial = ${Identificador da filial selecionada no pedido}
- SEGMENTO_IDSEGMENTO: Segmento selecionado no pedido
- Texto de ajuda:
-- 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:
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 registro de prazo de entrega retornado pela busca configurada no ponto 3 esteja com sgltipoprazo = 'DIASCORR', o sistema deverá adicionar o prazo do campo prazoentrega.prazo à data corrente, sem desconsiderar finais de semanas e feriados.
- (CURRENT_DATE + {prazoentrega.prazo})
- Caso o registro de prazo de entrega retornado pela busca configurada no ponto 3 esteja com sgltipoprazo = 'DIASUTEIS', o sistema deverá adicionar o prazo do campo prazoentrega.prazo à data corrente, desconsiderando finais de semanas e feriados.
- (CURRENT_DATE + {prazoentrega.prazo} + contagem de feriados e finais de semana entre current_date e data final)
- Os feriados do sistema são considerados a partir da consulta a seguir:
/* select * from datacomemorativa where idnferiado = 1
- A entidade feriado não é utilizada atualmente pelo sistema e pode ser depreciada em código-fonte.
- 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}