Árvore de páginas

01. DADOS GERAIS


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:

TSFAFSWE-3995 - Obtendo detalhes do item... STATUS

02. ESCOPO FUNCIONAL

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:

    • Descrição: Descrição do preço / fatores de influência do preço:
    • Valor unitário
    • Valor total: Valor unitário * quantidade

A seção deverá conter a quantidade de itens que foram selecionados no item do pedido

A seção deverá conter os seguintes registros:

    • "Preço original": Valor final de preço de tabela do item no pedido
      • "Preço de tabela (${Nome tabela})": Preço do item na tabela de preços selecionada no cabeçalho
      • "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
      • "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
      • "Desconto / Acréscimo - Data base tabela preço (${Nome tabela preço} - ${Data base})"
      • "Desconto / Acréscimo - ${Classe de desconto} (${Descrição desconto}"): Percentual/valor de descontos referentes às classes de descontos configuradas.
    • "Preço de venda": Valor final do preço de venda do item no pedido
      • "Desconto / Acréscimo comercial": Percentual / valor de descontos/acréscimos fornecidos nas colunas % Desconto / R$ Desconto 
    • "Preço com impostos" Valor final do item com impostos
      • "${Nome imposto}": Percentual / Valor de impostos aplicados sobre o preço

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.

03. ESCOPO TÉCNICO

03.01.01 Criação de campo para histórico de extrato de preço

Contexto / Gatilho:

  • Pelo tools, opção 3

Lógica:

  • O sistema deverá criar o seguinte campo na tabela pedidoproduto:

    detalhepreco: bytea, nullable

03.01.02 Criação de Parâmetro para ativar persistência de extrato de preços

Contexto / Gatilho:

  • Pelo tools, opção 18

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"
    }

03.02.01 Implementação de nova coluna na grid do item do pedido de venda

Contexto / Gatilho:

  • Nos ambientes Web e Android, no pedido de venda, no contexto de item de pedido

Lógica:

  • No ambiente Web,

    • Na grid de itens, o sistema deverá criar nova coluna de nome "Detalhes de preço"
      • Quando clicado
        • O sistema deverá disparar a lógica da seção 03.02.02
        • O sistema deverá disparar a persistência do objeto de detalhes de preço no campo pedidoproduto.detalhepreco, no formato JSON
          • 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%)"  
            				},
            				...
            			]
            		}
            	]
            }
  • No ambiente Android,

03.02.02 Tela / Modal de extrato

Contexto / Gatilho:

  • Nos ambientes Web e Android, no pedido de venda, no contexto de item de pedido, quando clicado sobre os botões de "Detalhes de preço"

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

03.02.03 Descontinuação de visão de impostos por item anterior, para incorporar aos detalhes de preço

Contexto / Gatilho:

  • No ambiente Web/Android, no pedido de vendas, no contexto de itens

Lógica:

  • O ícone específico de impostos deverá ser removido, devido a que ele estará presente nos detalhes de preço

  • Sem rótulos