Interface de Integração de Orçamento via Stored Procedure.
Conceito
O processo de integração de orçamentos (DAVs e Pré-vendas) via stored procedure serve para que sistemas parceiros similares ao Totall Order possam enviar DAVs para serem resgatadas pelo Commerce Checkout.
A partir da versão 01.08 do PAF-ECF (2011) passam a vigorar as seguintes regras para a retaguarda:
- Gravação do DAV no banco de dados deve ser de forma concomitante, ou seja a cada novo item inserido deve-se gravar no banco de dados.
- O DAV não pode ser impresso mais de uma vez.
- Após impresso o DAV não pode ser alterado.
- Não é permitir exclusão de itens de orçamento, podendo apenas cancelar os mesmos.
- Não permitir alterar a quantidade de um item.
- Os itens cancelados precisam ser enviados para o Checkout com um campo para definir que ele foi cancelado.
- Não será permitido incluir novos itens de DAV se o mesmo tiver algum item vendido.
As imagens abaixo ilustram a principal mudança de conceito. Antes o DAV poderia ser todo criado na retaguarda para depois ser passado ao banco de dados.
Agora, essas duas etapas se fundiram porque o DAV precisa ser o tempo todo gravado no banco.
A imagem abaixo ilustra o uso das stored procedures para enviar um pedido de venda para o banco de dados.
ENVIA_DAV
Método responsável pela inserção ou atualização de uma DAV ou Pré-venda. Quando o orçamento é novo ele não ficará disponível para ser vendido enquanto não for executado o método VALIDA_DAV. Caso alguma inconsistência seja verificada o método gerará exceção. Para PostgreSQL foi implementado como uma função que retorna o campo NUMPED. No Oracle deve-se chamar como Stored Procedure passando os valores por parâmetro e pegando o retorno no parâmetro NUMPED.
Parâmetro | Significado | Tipo | Tamanho | Aceita Nulo | Default | Domínio | Coluna Retorno? |
---|---|---|---|---|---|---|---|
CODEXT | Código Externo | NUMBER | 15,0 | Sim | |||
CODSER | Série Padrão para a Venda | CHAR | 2 | Sim | |||
DOCNFP | Documento p/ NFP | VARCHAR2 | 15 | Sim | |||
DATAPR | Data de aprovação | DATE | 7 | Sim | |||
CODFIL | Filial | CHAR | 3 | ||||
TIPPED | Tipo de Pedido/OS | CHAR | 1 | 'O' | O - DAV P - Pré-Venda |
||
CLIEXT | Código externo do Cliente | VARCHAR | 20 | ||||
VLRTOT | Valor Total | NUMBER | 12,2 | ||||
VLRPAR | Valor da Parcela | NUMBER | 12,2 | ||||
VLRDES | Valor do Desconto/Acréscimo | NUMBER | 12,2 | ||||
QTDPAR | Qtd. de Parcelas | NUMBER | 5,0 | ||||
FILFAT | Filial. End. Fatura | CHAR | 3 | ||||
NUMFAT | Núm. End. Fatura | NUMBER | 4,0 | ||||
FILENT | Filial. End. Entrega | CHAR | 3 | ||||
NUMENT | Núm. End. Entrega | NUMBER | 4,0 | ||||
FILCOB | Filial. End Cobrança | CHAR | 3 | ||||
NUMCOB | Núm. End Cobrança | NUMBER | 4,0 | ||||
DATVAL | Validade | DATE | 7 | ||||
DATPRI | 1º Parcela | DATE | 7 | ||||
APEVEN | Apelido Vendedor | VARCHAR | 10 | ||||
PLANO | Plano | CHAR | 9 | ||||
DESPRE | Descrição da Tabela de Preços (se nulo utiliza VAREJO) | VARCHAR | 30 | Sim | |||
RESERV | Reserva? | VARCHAR2 | 1 | 'F' | F - Falso T - Verdadeiro |
||
EMIDES | Frete pelo Emitente? | VARCHAR2 | 1 | 'F' | F - Falso T - Verdadeiro |
||
PESLIQ | Peso Líquido | NUMBER | 12,2 | Sim | |||
PESBRU | Peso Bruto | NUMBER | 12,2 | Sim | |||
VLRSEG | Valor do Seguro | NUMBER | 12,2 | Sim | |||
VLRFRE | Valor do Frete | NUMBER | 12,2 | Sim | |||
SINAL | Sinal ou Entrada | NUMBER | 12,2 | Sim | |||
OBSERV | Observações de venda | VARCHAR2 | 4000 | Sim | |||
NUMBLO | Número do Bloco | VARCHAR2 | 8 | Sim | |||
OBSORC | Observação Orçamento | VARCHAR2 | 4000 | Sim | |||
DATSEG | 2º Parcela | DATE | 7 | Sim | |||
APROVA | Tipo Aprovação | CHAR | 1 | 'A' | A - Aprovado E - Em Aprovação |
||
APRCLI | Aprovação Cliente | CHAR | 1 | '1' | 1 - Aprovado A - Em Aberto 2 - Reprovado |
||
PLACAS | Placa Veículo | VARCHAR2 | 7 | Sim | |||
QTD_KM | Qtde KM | NUMBER | 7,0 | Sim | |||
CODSEQ | Cód. Sequen. NSU | NUMBER | 22 | Sim | |||
CODEMP | Código da Empresa da Retaguarda | NUMBER | 5 | (solicitar a Totall) | |||
ASSINA | Assinatura do Registro | VARCHAR | 256 | Sim | |||
NUMPED | Número da DAV ou Pré-Venda | CHAR | 8 | Sim | Sim | ||
ORCIMP | Imprimiu? | VARCHAR | 1 | 'F' | F - Falso T - Verdadeiro |
ENVIAITEM_DAV
Método responsável pela inserção ou atualização de um item de DAV ou Pré-venda. Somente pode ser executado após ter sido incluso o DAV pelo método ENVIA_DAV. Caso alguma inconsistência seja verificada gerará exceção.
Parâmetro | Significado | Tipo | Tamanho | Aceita Nulo | Default | Domínio | Coluna Retorno? |
---|---|---|---|---|---|---|---|
CODFIL | Filial da DAV | CHAR | 3 | ||||
TIPPED | Tipo Pedido/OS | CHAR | 1 | 'O' | O - DAV
P - Pré-Venda |
||
NUMPED | Número da DAV ou Pré-Venda | CHAR | 8 | ||||
NUMITE | Item (número seqüencial por DAV) | NUMBER | 5,0 | ||||
VLRCUS | Valor Total | NUMBER | 12,2 | ||||
VLRPGT | Valor Total Sem Desc/Acrés | NUMBER | 12,2 | ||||
QTDITE | Quantidade | NUMBER | 12,4 | ||||
VLRITE | Vlr. Unitário | NUMBER | 14,4 | ||||
VLRENT | Vlr. Unitário Sem desconto/Acrés. | NUMBER | 14,4 | ||||
PROEXT | Código externo do Produto | VARCHAR | 20 | ||||
PROMOC | Promoção | CHAR | 1 | 'N' | N - Não promocional no plano E - Promocional no plano Q - Promocional para qualquer plano |
||
PREUNI | Preço Unitário | NUMBER | 12,2 | Sim | |||
DESMUL | Sub-Estoque | VARCHAR | 30 | Sim | Nulo | ||
OBSERV | Observação | VARCHAR2 | 4000 | Sim | |||
PERIPI | % IPI Última Compra | NUMBER | 5,2 | Sim | |||
ASSINA | Assinatura do Registro | VARCHAR | 256 | Sim | |||
FLGEST | Situação do Item | CHAR | 1 | Sim | A - Aberto R - Reservado NULL - Sistema usa o que foi mandado na TT_ORC.RESERV |
CANCELAITEM_DAV
Método responsável por cancelar um item de DAV.
Caso não encontre o item ou o mesmo não possa ser cancelado gerará uma exceção.
Parâmetro | Significado | Tipo | Tamanho | Aceita Nulo | Default | Domínio | Coluna Retorno? |
---|---|---|---|---|---|---|---|
CODFIL | Filial da DAV | CHAR | 3 | ||||
TIPPED | Tipo Pedido/OS | CHAR | 1 | 'O' | O - DAV
P - Pré-Venda |
||
NUMPED | Número da DAV ou Pré-Venda | CHAR | 8 | ||||
NUMITE | Item (número seqüencial por DAV) | NUMBER | 5,0 |
VALIDA_DAV
Método responsável pela verificação do DAV e liberação para o Checkout. Realizando validações entre o DAV e seus itens. Caso a validação não gere exceção o DAV ficará disponível para ser resgatado na Venda. Caso alguma inconsistência seja verificada gerará exceção.
Parâmetro | Significado | Tipo | Tamanho | Aceita Nulo | Default | Domínio | Coluna Retorno? |
---|---|---|---|---|---|---|---|
CODFIL | Filial da DAV | CHAR | 3 | ||||
NUMPED | Número da DAV ou Pré-Venda | CHAR | 8 | ||||
TIPPED | Tipo Pedido/OS | CHAR | 1 | 'O' | O - DAV
P - Pré-Venda |
CANCELA_DAV
Função responsável pelo cancelamento de uma DAV.
Obs.: Função não existente para Pré-Venda por obrigação do PAF. Caso não seja possível o cancelamento gerará exceção.
Parâmetro | Significado | Tipo | Tamanho | Aceita Nulo | Default | Domínio | Coluna Retorno? |
---|---|---|---|---|---|---|---|
CODFIL | Filial da DAV | CHAR | 3 | ||||
NUMPED | Número da DAV ou Pré-Venda | CHAR | 8 |
ASSINA_DAV
Método serve para gravar a coluna ASSINA da TT_ORC em caso de inclusão de um novo orçamento. Isto porque é necessário executar ENVIA_DAV para obter o NUMPED. E o NUMPED faz parte da assinatura.
Parâmetro | Significado | Tipo | Tamanho | Aceita Nulo | Default | Domínio | Coluna Retorno? |
---|---|---|---|---|---|---|---|
CODFIL | Filial da DAV | CHAR | 3 | ||||
NUMPED | Número da DAV ou Pré-Venda | CHAR | 8 | ||||
TIPPED | Tipo Pedido/OS | CHAR | 1 | 'O' | O - DAV
P - Pré-Venda |
||
ASSINA | Assinatura do Registro | VARCHAR | 256 | Sim |
Procedimentos para Assinatura
Os parceiros que mandam a assinatura da DAV (TT_ORC) e do item de DAV (TT_IOR) devem se responsabilizar por conferir se a assinatura atual da tabela está correta antes de enviar as alterações.
O PAF-ECF proíbe que se assine um registro adulterado.
Para não se preocupar com isso, pode-se usar o método [RegistraAcesso] (vide Integração de Banco via Rotinas de Importação).
Com esse método não é necessário utilizar o ASSINA_DAV e basta mandar null nos campos ASSINA.
Assinatura de DAV
1. Chamar a função conecta para o código da empresa parceira na Totall:
SELECT Conecta(:CodigoEmpresa, path_ttsegur) AS pConecta, path_ttsegur AS pPathSegur FROM tt_cfg
CodigoEmpresa:
0 - TOTALL
1 - INTERSYS
2 - ADVANCE
3 - SARAIVA
4 - MODERNA
5 - WALLIS
6 - BENNER
2. Gerar Hash:
pSenhaFixa: É uma constante de segurança enviada parceiro por e-mail.
pHashConexao := md5(pConecta || pSenhaFixa)
3. Enviar a DAV:
SELECT ENVIA_DAV(...) as pNumped FROM dual
ou
DECLARE BEGIN ENVIA_DAV(..., pNumped); END;
4. Gerar texto a ser criptografado:
SELECT ConcatenaORC(CODFIL, TIPPED, NUMPED, NUMPED, PED_EM, VLRTOT, CODEMP , COOORC ) as pTexto FROM tt_orc WHERE CODFIL = :CODFIL AND TIPPED = :TIPPED AND NUMPED = :NUMPED
É importante concatenar os campos da TT_ORC da forma indicada para garantir que os dados concatenados sejam idênticos aos gravados.
5. Assinar os dados da DAV:
SELECT AssinaTab('TT_ORC' :pTexto :pConecta IN NUMBER, :pHashConexao IN VARCHAR2, '', :CodigoEmpresa, path_ttsegur) FROM tt_cfg;
6. Gravar Assinatura:
DECLARE BEGIN ASSINA_DAV(:CODFIL, :NUMPED, :TIPPED, :ASSINA) END;
ou
SELECT ASSINA_DAV(:CODFIL, :NUMPED, :TIPPED, :ASSINA);
Assinatura de Item de DAV
1. Chamar a função conecta:
SELECT Conecta (:CodigoEmpresa, path_ttsegur) as pConecta, path_ttsegur as pPathSegur FROM tt_cfg
CodigoEmpresa: N - Empresa
2. Gerar Hash da mesma forma como foi feita na assinatura da DAV.
3. Gerar texto a ser criptografado:
SELECT ConcatenaIOR(:CODFIL, :TIPPED, :NUMPED, :NUMITE, :COOVEN, :ECFVEN, :QTDITE, :VLRITE, ROUND(:VLRPGT-:VLRCUS,2), :VLRPGT, :FLGEST, :NUMITE ) as pTexto FROM dual
Parâmetro COOVEN refere-se à coluna gravada pelo Checkout após venda. Deve-se passar null.
Parâmetro ECFVEN refere-se à coluna gravada pelo Checkout após venda. Deve-se passar null.
4. Assinar os dados do item:
SELECT AssinaTab('TT_IOR', :pTexto, :pConecta IN NUMBER, :pHashConexao IN VARCHAR2, '', :CodigoEmpresa, path_ttsegur) FROM tt_cfg
5. Gravar Item da DAV.
Impressão de DAV
Não é permitido que o DAV/Pré-venda seja impresso mais de uma vez.
Com isso, quem quiser implementar a rotina de impressão deve se preocupar em mandar o parâmetro ORCIMP = 'T' no ENVIA_DAV.
No caso de uma tentativa de reimpressão o sistema deve apresentar a seguinte mensagem:
PAF Req VI item 11 - É vedada a reimpressão de DAV.
Alterações
Versão 5.2a
- Inclusão do campo LOT_CODEXT no ENVIAITEM_DAV.
Versão 5.0G
- Inclusão do campo ORCIMP no ENVIA_DAV.
- Inclusão do campo FLGEST no ENVIAITEM_DAV.
- Substituição da função EXCLUIITEM_DAV por CANCELAITEM_DAV.
- Inclusão de comentários Procedimentos para Assinatura explicando como utilizar RegistraAcesso ao invés de ASSINA_DAV.
- Inclusão de novas colunas nos parâmetros de ConcatenaIOR.
- Bloqueio para reimpressão de DAV.