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: |
O protótipo do cadastro de ofertas vinculado a descontos pode ser acessado pelo seguinte link: https://www.figma.com/proto/dftygcLkxSdam64Vf0SXAp/Descontos-como-ofertas?node-id=0-1&t=euV1Gec2P9tYav2e-1
Contexto / Gatilho:
Lógica:
O sistema deverá adicionar os seguintes campos na tabela desconto
idnexibiroferta: byte, default 0 descontooferta: decimal 18,6, nullable quantidadeoferta: decimal 18,6, nullable
Contexto / Gatilho:
Lógica:
O sistema deverá adicionar o seguinte registro na tabela parametro
INSERT INTO public.parametro (idnativo,chave,descricao,observacao,valor) VALUES (1,'sim3g.cadastro.tabelapreco.produto.exibeoferta','Parâmetro que define se a opção de cadastro de oferta será exibido no cadastro de itens de tabela de preço','Quando marcado como 1, exibirá coluna "Oferta" na tela de cadastro de itens de tabela de preço. Caso contário, não exibirá a coluna.','0');
Contexto / Gatilho:
Lógica:
O sistema deverá exibir nova coluna com ícone de oferta https://icons8.com.br/icon/set/discount/family-material–static
- "Exibir o desconto como oferta?": título da modal
- "Quando marcado, o sistema irá exibir os produtos referentes à regra de desconto na aba “Oferta” do pedido de venda.": Subtítulo da modal
- Botão de ativar o desconto como oferta: Botão do tipo Switch (pode ser checkbox também, se complexo)
- Quando marcado, deverá exibir os campos "${Percentual / Valor} de desconto da oferta" e "Quantidade da oferta"
- Caso contrário, deverá ocultar os referidos campos
- "${Percentual / Valor} de desconto da oferta": Campo de entrada (input) numérico, aceitando valores monetários
- O campo de entrada deverá respeitar parâmetros de arredondamento / quantidade de casas para valores monetários QTD_CASAS_DECIMAIS_MONETARIO / MODO_ARREDONDAMENTO_MONETARIO)
- A label do campo deve ser renderizada de maneira dinâmica com base no valor do campo desconto.modeloaplicacao.
- Se 'perc', a label deverá ser: "Percentual de desconto da oferta"
- Se 'val', a label deverá ser: "Valor de desconto da oferta"
- "Quantidade da oferta": Campo de entrada (input) numérico, aceitando valores numéricos fracionados
- O campo de entrada deverá respeitar parâmetros de arredondamento / quantidade de casas para valores de quantidade fracionada QTD_CASAS_DECIMAIS_QUANTIDADE_FRACIONADA / MODO_ARREDONDAMENTO_QUANTIDADE)
- "Cancelar": Botão que, quando clicado, fecha a modal.
- "Confirmar": Botão que, quando clicado,
O sistema deverá persistir os valores da tela nos seguintes campos do banco de dados:
Botão de ativar o desconto como oferta -> desconto.idnexibiroferta Se marcado, persistir 1 Se desmarcado, persistir 0 "${Percentual / Valor} de desconto da oferta" -> desconto.descontooferta "Quantidade da oferta" -> desconto.quantidadeoferta- Após a persistência, o sistema deve marcar um alerta no botão gravar da grid, exigindo que o usuário faça a gravação das informações preenchidas na modal.
- Semelhante ao processo de quanto existe uma alteração de um valor na grid, ainda não gravado
Contexto / Gatilho:
Lógica:
O sistema deverá consultar o campo parametro.valor do parâmetro de parametro.chave = "sim3g.cadastro.tabelapreco.produto.exibeoferta"
Contexto / Gatilho:
Lógica:
A partir do cache de descontos de preço de venda carregados somente com filtros de dados informados no cabeçalho, ou seja, filtrando somente as informações de:
Segmento Filial Região Unidade federativa Profissional Grupo de clientes Cliente Local Tipologia Produto Tabela preço Condição de pagamento Perfil de acesso Grupo usuário Tipo de pedido (selecionado no cabeçalho) Cidade Classificação parceiro Tipo frete
[{ "idproduto": 1, -- produto projetado pelas consultas anteriores "desconto.iddesconto": 12652, "desconto.descricao": "Promoção mês Abril", -- Descrição do registro de desconto "classedesconto.descricao": "Grupo produto Sorvetes" -- Descrição do registro de classe de desconto "desconto.descontooferta": 10, -- Valor do desconto, seja ele em percentual ou valor "desconto.modeloaplicacao": "perc" -- Modelo de aplicação do desconto, em percentual ou valor "desconto.quantidadeoferta": 4 -- Quantidade associada ao desconto },{ "idproduto": 2, "desconto.iddesconto": 12653, "desconto.descricao": "Promoção mês Abril", "classedesconto.descricao": "Grupo produto Sorvetes", "desconto.descontooferta": 3, "desconto.modeloaplicacao": "val" "desconto.quantidadeoferta: 2 }, ... ]
A lógica de exibição dos produtos na aba oferta ocorrerá de maneira semelhante ao que acontece atualmente com a tabela produtoconfigvenda, com o seguinte critério comparativo:
Coluna na tabela produtoconfigvenda (idnoferta = 1) | Coluna no objeto em memória |
---|---|
descricao | classedesconto.descricao + " " + desconto.descricao |
quantidadesugestao | desconto.quantidadeoferta |
valordescontooferta | desconto.descontooferta, onde desconto.modeloaplicacao = 'val' |
percentualdescontooferta | desconto.descontooferta, onde desconto.modeloaplicacao = 'perc' |
Contexto / Gatilho:
Lógica:
O sistema deverá verificar se irá inserir nova linha de item de pedido ou atualizar linhas existentes.
Se "Sim", o sistema deverá realizar a sobrescrita dos valores específicos do contexto de item vindos da oferta, sendo: Produto, Quantidade, % Desconto (se modeloaplicacao = 'perc'), R$ Desconto (se modeloaplicacao = 'val'), Embalagem, Tipo estoque, Lote.
As informações atualizadas / inseridas poderão ser projetadas a partir da seguinte lógica:
Produto: cache_oferta.idproduto Quantidade: cache_oferta.quantidadedesconto. Se não for informado, respeitar a quantidade padrão inserida pela aplicação (quantidadeapresentacao, fatorembalagem, idnrequerqtdmultipla ...) % Desconto: cache_oferta.descontooferta, caso cache_oferta.modeloaplicacao = 'perc' R$ Desconto: cache_oferta.descontooferta, caso cache_oferta.modeloaplicacao = 'val'
Para os campos "Embalagem", "Tipo estoque" e "Lote", que são campos inseridos no contexto de item, e podem servir para a busca de descontos, o sistema deve inserir, partindo do cache de produtos, a primeira combinação desses campos em que o desconto é encontrado. Por exemplo:
Se Para o produto 300, o cache está assim: { "EMBALAGENS": [ { "idembalagem": 1, }, { "idembalagem": 2, } ], "TIPOESTOQUES": [ { "idtipoestoque": 4 }, { "idtipoestoque": 5 } ], "LOTES": [ { "idlote": 8 } ] } O sistema deve tentar utilizar as combinações entre os campos do cache na busca do desconto (respeitando os níveis do pedidoengine) vinculado à oferta, sendo: [1,4,8] [1,5,8] [2,4,8] [2,5,8] Quando um registro respeitar a regra de busca, o sistema deve inserir o item com esses respectivos valores e interromper o loop da busca.