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: |
No ambiente Web, na tela de pedido de venda, em contexto de itens, substituindo o ícone de detalhes de impostos.
O sistema deverá conter ícone para consultar detalhes da negociação do item, recebendo seção de "Detalhes do preço", que conterá detalhes sobre a confecção do preço original e preço de venda do item do pedido
A seção conterá as seguintes colunas:
A seção deverá conter a quantidade de itens que foram selecionados no item do pedido
A seção deverá conter os seguintes registros:
Imagem de referência:
No ambiente Android, a tela de negociação de item já existe e receberá nova aba "Detalhes preço", exibindo o mesmo conteúdo da seção da Web citada anteriormente
Para questão de auditoria e suporte, será necessário que, via parâmetro, o sistema faça a persistência de todas as informações exibidas na modal de detalhes, para que se tenha a possibilidade de auditar a o histórico da formação de preços.
Contexto / Gatilho:
Lógica:
O sistema deverá criar o seguinte campo na tabela pedidoproduto:
detalhepreco: bytea, nullable
Contexto / Gatilho:
Lógica:
O sistema deverá criar o seguinte parâmetro na tabela parametro
{ "chave": "sim3g.pedido.pedidoproduto.persistir.detalhepreco", "descricao": "Parâmetro que define se o sistema irá persistir o objeto de extrato de preços no banco de dados para auditoria e suporte", "observacao": "Caso o valor seja 1, o campo pedidoproduto.detalhepreco será persistido com o objeto das informações do extrato de preços do item do pedido. Caso contrário, o campo não será preenchido", "valor" "0" }
Contexto / Gatilho:
Lógica:
No ambiente Web,
Não há necessidade de respeitar esse formato, especificamente, mas um objeto esperado seria, por exemplo: { "precotabela": [ { "descricao": "Preço de tabela (${Nome tabela})" "unitario": "R$ 10,15", "total": "R$ 20,30" }, ... ], "precovenda": [ { "descricao": "Desconto / Acréscimo comercial" "unitario": "R$ 0,8 (2%)", "total": "R$ 1,6 (2%)" }, ... ] "precocomimposto": [ { "imposto": [ { "descricao": "ICMS" "unitario": "", "total": "R$ 2,60 (20%)" }, ... ] } ] }
Contexto / Gatilho:
Lógica:
O sistema devera abrir modal (Web) ou tela (Android) contendo as seguintes informações:
- Quantidade de itens que foram selecionados no item do pedido
- Tabela com as seguintes colunas:
- "Descrição": Descrição do preço / fatores de influência do preço:
- Valor unitário: Valores monetários e percentuais ancorados ao valor unitário do item
- Valor total: Valores monetários e percentuais ancorados ao valor total do item, sendo: Valor unitário * quantidade. A porcentagem se mantém constante.
- A Tabela deverá conter os seguintes registros:
"Preço original": Valor final de preço de tabela do item no pedido
Valor unitário: pedidoproduto.precooriginal Valor total: pedidoproduto.precooriginal * pedidoproduto.quantidade
"Preço de tabela (${Nome tabela})": Preço do item na tabela de preços selecionada no cabeçalho
${Nome tabela} = /* select descricao from tabelapreco where idtabelapreco = ${id da tabela de preço selecionada no cabeçalho} */ Valor unitário: tabelaprecoproduto.preco Valor total: tabelaprecoproduto.preco * pedidoproduto.quantidade"Desconto/Acréscimo - Condição de pagamento (${Nome condição pagamento})": Percentual de desconto/acréscimo vinculado à condição de pagamento selecionada no cabeçalho
${Nome condição pagamento} = /* select descricao from condicaopagamento where idcondicaopagamento = ${id da condição de pagamento selecionada no cabeçalho} */ Valor unitário: /* select case when condicaopagamento.percentualdesconto > 0 then condicaopagamento.percentualdesconto case when condicaopagamento.percentualacrescimo > 0 then condicaopagamento.percentualacrescimo end from condicaopagamento where idcondicaopagamento = ${id da condição de pagamento selecionada no cabeçalho} */ Valor total: "" -- Valor vazio, visto que é um valor somente percentual"Desconto / Acréscimo - Tipo desconto (${Nome tipo desconto})": Percentual/valor de desconto/acréscimo vinculado ao tipo de desconto selecionado no cabeçalho/resumo, se aplicados sobre preço de tabela
${Nome tipo desconto} = /* select descricao from tipodesconto where idtipodesconto = ${id do tipodesconto selecionado no cabeçalho} */ Valor unitário: /* select (valor > 0 ? valor : percentual) from tipodesconto where idtipodesconto = ${id do tipodesconto selecionado no cabeçalho} */ Valor total: se tipodesconto.valor > 0, "Valor unitário" * quantidade, caso contrário, valor vazio."Desconto / Acréscimo - Data base tabela preço (${Nome tabela preço} - ${Data base})"}
${Nome tabela preço} = /* select descricao from tabelapreco where idtabelapreco = ${id da tabela de preço selecionada no cabeçalho} */ ${Data base} = /* select database from tabelapreco where idtabelapreco = ${id da tabela de preço selecionada no cabeçalho} */ Valor unitário = ${Percentual de descontos ou acréscimos com juros simples ou compostos, baseados na lógica do campo tabelapreco.sgltipodescjuro}"Desconto / Acréscimo - ${Classe de desconto} (${Descrição desconto}"): Percentual/valor de descontos referentes às classes de descontos configuradas.
Como é um array, o sistema deve iterar sobre os múltiplos descontos aplicados em preços de tabela, sendo: ${Classe de desconto} = /* select descricao from classedesconto where idclassedesconto = ( select idclassedesconto from desconto where iddesconto = ${identificador do desconto aplicado sobre preço de tabela} */ ) ${Descrição desconto} = /* select descricao from desconto where iddesconto ${identificador do desconto aplicado sobre preço de tabela} */ Valor unitário = desconto.valor > 0 ? desconto.valor : desconto.percentual Valor total = desconto.valor > 0 ? "Valor unitário" * quantidade : valor vazio"Preço de venda": Valor final do preço de venda do item no pedido
Valor unitário: pedidoproduto.precovenda Valor total: pedidoproduto.precovenda * pedidoproduto.quantidade
"Desconto / Acréscimo comercial": Percentual / valor de descontos/acréscimos fornecidos nas colunas % Desconto / R$ Desconto
Valor unitário: "R$ ${valor_desconto_acrescimo}(${percentual_desconto_acréscimo}%) onde: ${valor_desconto_acrescimo} = pedidoproduto.valordesconto > 0 pedidoproduto.valordesconto : pedidoproduto.valoracrescimo * (-1) ${percentual_desconto_acréscimo} = pedidoproduto.percentualdesconto > 0 pedidoproduto.percentualdesconto : pedidoproduto.percentualacrescimo * (-1) Valor total: R$ ${${valor_desconto_acrescimo} * quantidade}(${percentual_desconto_acréscimo}%)"Preço com impostos" Valor final do item com impostos
Agrupamento somente exibido quando o imposto foi calculado Valor unitário: valor vazio Valor total: pedidoproduto.valortotalcomimpostos
"${Nome imposto}": Percentual / Valor de impostos aplicados sobre o preço
Mesmos valores da modal de impostos atual, sendo: ${Nome imposto} = /* select descricao from imposto where idimposto ( select idimposto from pedidoimposto where idpedidoproduto = ${identificador do pedidoproduto} ) */ Valor unitário: valor vazio Valor total: ${Valor do imposto} ("Aliq: "${alíquota do imposto})- "Valor despesa": Valor retornado pela API de impostos sobre a despesa de frete
- "Valor frete": Valor de frete fracionado pelo item, também retornado pela API de impostos.
- "Valor seguro": Valor do seguro referente ao frete, também retornado pela API de impostos
Contexto / Gatilho:
Lógica:
O ícone específico de impostos deverá ser removido, devido a que ele estará presente nos detalhes de preço