Árvore de páginas

01. DADOS GERAIS


Produto:

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

Linha de Produto:

Linha TOTVS CRM SFA

ERPs impactados:

Winthor

Módulo:Venda
Função:Pedido
Ticket:
Requisito/Story/Issue:


02. ESCOPO FUNCIONAL

Anteriormente, para integrações com ERP Winthor,

O SFA somente faz o consumo da precificação por região, com origem pela tabela PCTABPR. Entretanto, ao ativar o parâmetro do Winthor "1065/2257- Trabalha com preço por embalagem", o preço do SFA ainda continua se originando da tabela PCTABPR, quando deveria consumir originado da tabela PCEMBALAGEM.

Agora,

O SFA deverá adaptar a integração para receber os preços da tabela PCEMBALAGEM, para filiais que contém o parâmetro "1065/2257- Trabalha com preço por embalagem" como preço de tabela do produto.

A aplicação do SFA deverá fazer a leitura desse parâmetro integrado. Quando marcado, o SFA deverá preferir a precificação do produto por sua embalagem para a filial selecionada no cabeçalho. Quando desmarcado, o sistema continuará fazendo a utilização da precificação por região.

03. ESCOPO TÉCNICO

03.01 Integração


03.01.01 Importação de preços

Contexto / Gatilho:

  • Integração, na importação de tabelaprecoproduto

Lógica:

  • Criação de nova union, trazendo os preços específicos das filiais, quando existe precificação por embalagem, dessa forma:



SELECT * FROM pctabpr ptp
CROSS JOIN pcparamfilial pcf
LEFT JOIN pcembalagem pe ON pcf.CODFILIAL = pe.CODFILIAL AND pe.codprod = ptp.CODPROD 
WHERE pcf.NOME = 'FIL_PRECOPOREMBALAGEM'
AND pcf.VALOR = 'S'
AND pcf.CODFILIAL <> 99
  • As colunas deverão ser as mesmas origens da union que busca da pctabpr, com exceção das colunas a seguir:
WinthorSFA (TABELAPRECOPRODUTO)
PCEMBALAGEM.PVENDA

PRECO

PRECO2

PRECO3

PRECO4

PRECO5

PRECO6

PRECO7

PCEMBALAGEM.PTABELA

PRECOREFERENCIA

PRECOREFERENCIA2

PRECOREFERENCIA3

PRECOREFERENCIA4

PRECOREFERENCIA5

PRECOREFERENCIA6

PRECOREFERENCIA7

PCEMBALAGEM.CODFILIAL

IDLOCALFILIAL

03.01.02 Importação parâmetro

  • Adicionar importação do parâmetro na transformação SOPERACAO:

SELECT
	DISTINCT 
	CAST(1 AS INT) AS IDNATIVO,
	CAST('PRECOEMBAL' AS VARCHAR2(80))AS DESCRICAO,
	CAST(NULL AS VARCHAR2(10))AS SGLTIPOOPERACAO,
	CAST('PRECOEMBAL' AS VARCHAR2(10))AS SGLOPERACAO,
	CAST(NULL AS VARCHAR2(10))AS SGLTIPOVALOR,
	CAST('PRECOEMBAL' AS VARCHAR2(80))AS CODIGOERP
FROM
	PCPARAMFILIAL
WHERE NOME ='FIL_PRECOPOREMBAL';


  • Importar para OPERACAOLOCAL o vínculo entre a operação e o idlocalfilial:

SELECT
    CAST('PRECOEMBAL' AS VARCHAR2(80)) AS IDOPERACAO_,
    CAST(NULL AS VARCHAR2(80)) AS IDLOCAL_,
    CAST(CODFILIAL AS VARCHAR(80)) || '#UEM' AS IDLOCALFILIAL_,
    CAST(CASE WHEN VALOR = 'S' THEN 1 ELSE 0 END AS NUMERIC(18,6)) AS VALOR,
    CAST(NULL AS VARCHAR2(20)) AS CODIGO,
    CAST('PRECOEMBAL#' || CAST(CODFILIAL AS VARCHAR2(80)) || '#UEM' AS VARCHAR2(80)) AS CODIGOERP,
    CAST(CODFILIAL AS VARCHAR2(80)) AS CODFILIAL
FROM
    PCPARAMFILIAL
WHERE
    UPPER(NOME) LIKE '%FIL_PRECOPOREMBALAGEM%'    
    --AND (CAST(CODFILIAL AS VARCHAR2(80)) IS NULL OR CAST(CODFILIAL AS VARCHAR2(80)) IN (?,'99') OR COALESCE(?,'') IS NULL)
    AND (CAST(CODFILIAL AS VARCHAR2(80)) IS NULL OR CAST(CODFILIAL AS VARCHAR2(80)) IN ((SELECT REGEXP_SUBSTR(?, '[^,]+' , 1, LEVEL) FILIAL FROM DUAL CONNECT BY REGEXP_SUBSTR(? , '[^,]+' , 1, LEVEL) IS NOT NULL)) OR CAST(CODFILIAL AS VARCHAR2(80)) IN ('99') OR COALESCE(?, '') IS NULL)

03.02 Aplicação

03.02.01 Implementação de preços por filial

Contexto / Gatilho:

  • Ambiente Web/Android, na busca de preços do produto

Lógica:

  • Após a primeira validação se há preço fixo para o produto (idnprecofixo=1), a aplicação deverá realizar a busca abaixo para identificar preços por embalagem na filial selecionada no cabeçalho:

    select 
    	preco, 
    	idembalagem 
    from tabelaprecoproduto 
    where idlocalfilial = :filial_cabecalho 
    	  and idproduto = :produto_grid 
    	  and idnprecofixo = 0 
    	  and idembalagem is not null


    • Caso a busca retorne resultados, o preço de tabela exibido deve condizer com a embalagem informada no campo Embalagem no carrinho;

  • Se o vendedor mudar a embalagem selecionada, o preço de tabela também deve ser atualizado para corresponder à nova embalagem selecionada;

    03.02.02 Validação de preço por embalagem - Parte II

  • A aplicação deve validar se a filial informada no cabeçalho utiliza ou não preço por embalagem. Se a filial estiver vinculada a operação 'PRECOEMBAL', significa que ela utiliza preço por embalagem e, consequentemente, o cálculo do Valor Total Produto será por embalagem:

    select 
    	o.sgloperacao, 
    	ol.idlocalfilial 
    from operacaolocal ol inner join operacao o 
    	on o.idoperacao =ol.idoperacao
    where o.sgloperacao ='PRECOEMBAL'
    	and ol.valor=1
  • Quando o preço for por embalagem, a aplicação deve ignorar o cálculo de multiplicação utilizando PRODUTOEMBALAGEM.FATORPRECO; esse cálculo não deve ser feito e o preço exibido para o item no campo Preço Tabela deve ser o valor retornado de TABELAPRECOPRODUTO.PRECO e o desconto/acréscimo da condição de pagamento (quando houver);

  • O cálculo para o campo Valor Total Líquido deve olhar para Quantidade Embalagem, e não mais Quantidade, como é hoje:
    • Preço Venda * Quantidade Embalagem = Valor Total Líquido

    • Quando a filial utilizar preço por embalagem, a aplicação deve buscar por preços aplicáveis ao pedido na seguinte ordem:

      1° TABELAPRECOPRODUTO.PRECO + IDNPRECOFIXO =1
      2° TABELAPRECOPRODUTO.PRECO + IDLOCALFILIAL + IDNPRECOFIXO =0 + IDEMBALAGEM IS NOT NULL
       
    • Não é mais necessária a 3° busca de preços como ocorre atualmente;

  • Persistir a quantidade de embalagens em PEDIDOPRODUTO.QUANTIDADEEMBALAGEM;
    • A quantidade embalagem deve ser persistida em todas as vendas sempre o campo Quantidade Embalagem estiver visível em tela;

    • Quando um pedido gravado ou finalizado, for aberto em tela para visualização/edição, exibir a informação gravado em banco;

  • Persistir em banco os campos PEDIDOPRODUTO.VALORTOTALLIQUIDO em todas as vendas;

    • Para o caso de pedidos em que a filial utiliza preço por embalagem, os campos devem ser persistidos com o cálculo:
      VALORTOTALLIQUIDO = PREÇO VENDA X QUANTIDADE EMBALAGENS

    • Para o caso de pedidos em que a filial NÃO utiliza preço por embalagem, os campos devem ser persistidos com o cálculo:
      VALORTOTALLIQUIDO = PREÇO VENDA X QUANTIDADE

    • Quando um pedido gravado ou finalizado, for aberto em tela para visualização/edição, exibir a informação gravado em banco;
  • Sem rótulos