Árvore de páginas

01. DADOS GERAIS

Produto:

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

Linha de Produto:

Linha TOTVS CRM

ERPs impactados:Protheus, Datasul e ERPs terceiros
Módulo:Cadastro
Função:Visão 360 Cliente
Ambiente:Web/Android
Ticket:15677137
Requisito/Story/Issue:

DTSFAPD-2515 - Obtendo detalhes do item... STATUS


02. ESCOPO FUNCIONAL

Importar boleto e nota fiscal para geração de 2° via pelo SFA

Na versão atual do TOTVS SFA, não existe a possibilidade de fazer o download do boleto e nota fiscal.

Portanto será disponibilizado botões nas listagens de "Títulos" e "Nota fiscal":



Novo botão em "Listagem de títulos"


Novo botão em "Nota Fiscal"


Deverá ser criado dois novos plugins de integração, com descrição "Download de notas fiscais " e "Download de boletos":



Com essas alterações, será possível fazer o download das notas fiscais e boletos que foram emitidos/gerados pelo Protheus, através da API que será disponibilizada para o SFA.

03. ESCOPO TÉCNICO

API NOTA FISCAL

APLICAÇÃO

CRIAR PLUGIN

  • Pelo tools opção 5 deverá ser criado o registro:
pluginintegracao {
	codigo: DOWNNF,
    descricao: API Para download Danfe (PDF),
	idnAtivo: 0
}
Campo "URL Nota Fiscal"
	idpluginintegracao: select idpluginintegracao from pluginintegracao where codigo = 'DOWNNF',
	codigoelemento: DOWNNF,
	agrupador: 0,
	sglcampo: DOWNNF_URL
	valor: {valor inserido no campo URL}
Campo "Usuário"
	idpluginintegracao: select idpluginintegracao from pluginintegracao where codigo = 'DOWNNF',
	codigoelemento: DOWNNF,
	agrupador: 0,
	sglcampo: DOWNNF_USER
	valor: {valor inserido no campo USUÁRIO}

Campo "Senha"
	idpluginintegracao: select idpluginintegracao from pluginintegracao where codigo = 'DOWNNF',
	codigoelemento: DOWNNF,
	agrupador: 0,
	sglcampo: DOWNNF_PASSWORD
	valor: {valor inserido no campo Senha}

Campo "Timeout Consulta"
	idpluginintegracao: select idpluginintegracao from pluginintegracao where codigo = 'DOWNNF',
	codigoelemento: DOWNNF,
	agrupador: 0,
	sglcampo: DOWNNF_TIMEOUT
	valor: {valor inserido no campo Timeout consulta}
Campo "Rep"
	idpluginintegracao: select idpluginintegracao from pluginintegracao where codigo = 'DOWNNF',
	codigoelemento: DOWNNF,
	agrupador: 0,
	sglcampo: DOWNNF_REP
	valor: {COMMONS_SERVICES}
Campo "Job"
	idpluginintegracao: select idpluginintegracao from pluginintegracao where codigo = 'DOWNNF',
	codigoelemento: DOWNNF,
	agrupador: 0,
	sglcampo: DOWNNF_JOB
	valor: {DOWNLOADNOTAFISCAL}


  • Segue protótipo de tela:

IMPLEMENTAÇÃO NA LISTAGEM DE NOTA FISCAL

  • Na tela, "Venda → Nota Fiscal → Listar", exibir o botão para download do PDF, ao lado do botão de visualização conforme protótipo, de acordo com as configurações do plugin:
    • idnAtivo = 1: select idnAtivo from pluginintegracao where codigo = 'DOWNNF'
  • Ao clicar no botão de download a aplicação deverá consultar o carte de acordo com a sql:

URL_PENTAHO
select valor from pluginintconfig where codigoelemento='CONF_GERAL' AND sglcampo='PENTAHO_URL'
    • A url do download deve ser montada da seguinte forma: URL=${Configurações do Pentaho.URL}/kettle/executeJob/?rep={}&job={}

    • No body da requisição, passar as seguintes informações:
{
	idnotafiscal:
}


  • O retorno desta url será o arquivo em base64 para download:
200 - Ok
{
    mensagem: {base64}
}

INTEGRAÇÃO

IMPORTAR VINCULO NOTA FISCAL X TÍTULO FINANCEIRO

  • Importar do ERP Protheus, o vínculo entre o título financeiro e a nota fiscal;
    • Vincular o título com a respectiva nota fiscal no campo FINANCEIROTITULO.IDNOTAFISCAL;

    • Associar o título com o boleto usando os campos:

      SE1.E1_SERIE            = SF2.F2_SERIE
      SE1.E1_NUMNOTA   = SF2.F2_DOC
      SE1.E1_FILIAL           = SF2.F2_FILIAL

API DOWNLOAD NOTA FISCAL

  • Criar a variável de integração abaixo:



    ERP

    TODOS

    CONTEXTO

    API

    DESCRIÇÃO

    Se valor 1, a URL será no formato {URL_API_NOTA_FISCAL_CLIENTE}/{empresa}/{filial}/{documento}/{serie}; se a variável estiver inativa, então a URL montada será no formato {URL_API_NOTA_FISCAL_CLIENTE}/{filial}/{documento}/{serie}.

    TABELA

    WSCONFIGINTEGRACAO

    CAMPO

    VALOR

    VALOR

    1

    IDNATIVO

    1

    CODIGOERP

    API_DOWNNF

  • Criar para Pentaho-Carte o Job DOWNLOADNOTAFISCAL no repositório COMMONS_SERVICES;

  • URL de consulta deve ser montada no seguinte padrão:

GET: {URL_API_NOTA_FISCAL_CLIENTE}/{empresa}/{filial}/{documento}/{serie}

HEADERS: Authorization: Basic {TOKEN}

    • Informações da request serão obtidas a partir das consultas abaixo;

    • Se o campo EMPRESA estiver como NULL, então o parâmetro EMPRESA não deve ser repassado na URL da request. Dessa forma {URL_API_NOTA_FISCAL_CLIENTE}/{filial}/{documento}/{serie}:
SELECT n.numeronotafiscal AS DOCUMENTO,
       n.serie            AS SERIE,
       l.numeromatricula  AS FILIAL,
       CASE
         WHEN Cast(w.valor AS VARCHAR) = '1' THEN
         Split_part(n.codigoerp, '#', 1)
         ELSE NULL END    AS EMPRESA
FROM   notafiscal n
       INNER JOIN local l
               ON l.idlocal = n.idlocalfilialfaturamento
       LEFT JOIN wsconfigintegracao w
              ON w.codigoerp = 'API_DOWNNF'
                 AND w.idnativo = 1
WHERE  n.idnotafiscal = :IDNOTAFISCAL;


SELECT ( CASE
           WHEN sglcampo = 'DOWNNF_PASSWORD' THEN valor
         END ) AS SENHA,
       ( CASE
           WHEN sglcampo = 'DOWNNF_USER' THEN valor
         END ) AS USUARIO,
       ( CASE
           WHEN sglcampo = 'DOWNNF_URL' THEN valor
         END ) AS URL
FROM   pluginintconfig
WHERE  codigoelemento = 'DOWNNF'
       AND sglcampo IN ( 'DOWNNF_PASSWORD', 'DOWNNF_USER', 'DOWNNF_URL' ); 


  • O retorno recebido será no formato base64, e deve ser retornado para aplicação sem transformações dentro do XML do RESPONSE:
200 - Ok
{
    mensagem: {base64}
}
API - Nota Fiscal

Retornos:

500 - Internal Server Error
{"code":500,"detailedMessage":"","message":"Internal Server Error"}
404 - Nota Fiscal não encontrada
{
    "errorCode": 404,
    "errorMessage": "Nao encontrou a NF 01_05_000001838_11 "
}
200 - Ok
{
    mensagem: {base64}
}

API DOWNLOAD BOLETO

APLICAÇÃO

CRIAR PLUGIN

  • Pelo tools opção 5 deverá ser criado o registro:
pluginintegracao {
	codigo: DOWNBOL,
    descricao: API Para download Boleto (PDF),
	idnAtivo: 0
}
Campo "URL"
	idpluginintegracao: select idpluginintegracao from pluginintegracao where codigo = 'DOWNBOL',
	codigoelemento: DOWNBOL,
	agrupador: 0,
	sglcampo: DOWNBOL_URL
	valor: {valor inserido no campo URL}
Campo "Usuário"
	idpluginintegracao: select idpluginintegracao from pluginintegracao where codigo = 'DOWNBOL',
	codigoelemento: DOWNBOL,
	agrupador: 0,
	sglcampo: DOWNBOL_USER
	valor: {valor inserido no campo USUÁRIO}

Campo "Senha"
	idpluginintegracao: select idpluginintegracao from pluginintegracao where codigo = 'DOWNBOL',
	codigoelemento: DOWNBOL,
	agrupador: 0,
	sglcampo: DOWNBOL_PASSWORD
	valor: {valor inserido no campo Senha}

Campo "Timeout Consulta"
	idpluginintegracao: select idpluginintegracao from pluginintegracao where codigo = 'DOWNBOL',
	codigoelemento: DOWNBOL,
	agrupador: 0,
	sglcampo: DOWNBOL_TIMEOUT
	valor: {valor inserido no campo Timeout consulta}

Campo "Rep"
	idpluginintegracao: select idpluginintegracao from pluginintegracao where codigo = 'DOWNNF',
	codigoelemento: DOWNBOL,
	agrupador: 0,
	sglcampo: DOWNNF_REP
	valor: {COMMONS_SERVICES}
Campo "Job"
	idpluginintegracao: select idpluginintegracao from pluginintegracao where codigo = 'DOWNNF',
	codigoelemento: DOWNBOL,
	agrupador: 0,
	sglcampo: DOWNNF_JOB
	valor: {DOWNLOADBOLETO}

IMPLEMENTAÇÃO NA TELA DE LISTAGEM DE TÍTULOS

  • Na tela, "Visão 360 → Títulos":  exibir o botão para download do PDF, ao lado do botão de visualização conforme protótipo acima, de acordo com as configurações do plugin:

    • idnAtivo = 1: select idnAtivo from pluginintegracao where codigo = 'DOWNBOL'
  • Ao clicar no botão de download a aplicação deverá consultar a url do carte de acordo com a sql:
URL_PENTAHO
select valor from pluginintconfig where codigoelemento='CONF_GERAL' AND sglcampo='PENTAHO_URL'


    • A url do download deve ser montada da seguinte forma: URL=${Configurações do Pentaho.URL}/kettle/executeJob/?rep={}&job={}

    • Realizar a consulta em banco para obter os dados de REP e JOB:

      URL_PENTAHO
      select  
      (select valor as JOB from pluginintconfig p where codigoelemento ='DOWNBOL' and sglcampo ='DOWNBOL_JOB'),
      (select valor as REP from pluginintconfig p where codigoelemento ='DOWNBOL' and sglcampo ='DOWNBOL_REP');
    • No body da requisição, passar as seguintes informações:
{
	idnotafiscal:
}


  • O retorno do Carte para a aplicação será no formato abaixo:
200 - Ok
{
    "lStatus": true,
    "cMensagem": "Sucesso",
    "cBoleto": {base64}
}
  • Na tela "Visão 360 → Títulos" acrescentar uma nova coluna Nota Fiscal, referente a nota fiscal vinculada ao título:

    • Utilizar a consulta abaixo para obter os dados da nota

      URL_PENTAHO
      select numeronotafiscal || '-' || serie as NF from notafiscal n where idnotafiscal =(select idnotafiscal from financeirotitulo f where idfinanceirotitulo=:idtitulo)

INTEGRAÇÃO

API DOWNLOAD BOLETO

  • Criar para Pentaho-Carte o Job DOWNLOADBOLETO no repositório COMMONS_SERVICES;

  • URL de consulta deve ser montada no seguinte padrão:

GET: {URL_API_BOLETO_CLIENTE}/{empresa}/{filial}/{documento}/{serie}

HEADERS: Authorization: Basic {TOKEN}

    • Informações da request serão obtidas a partir das consultas abaixo;

    • Se o campo EMPRESA estiver como NULL, então o parâmetro EMPRESA não deve ser repassado na URL da request, ficando dessa forma {URL_API_BOLETO_CLIENTE}/{filial}/{documento}/{serie}:

Consulta Dados Requisição
SELECT n.numeronotafiscal AS DOCUMENTO,
       n.serie            AS SERIE,
       l.numeromatricula  AS FILIAL,
       CASE
         WHEN Cast(w.valor AS VARCHAR) = '1' THEN
         Split_part(n.codigoerp, '#', 1)
         ELSE NULL END    AS EMPRESA
FROM   notafiscal n
       INNER JOIN local l
               ON l.idlocal = n.idlocalfilialfaturamento
       LEFT JOIN wsconfigintegracao w
              ON w.codigoerp = 'API_DOWNNF'
                 AND w.idnativo = 1
WHERE  n.idnotafiscal = :IDNOTAFISCAL;


SELECT ( CASE
           WHEN sglcampo = 'DOWNBOL_PASSWORD' THEN valor
         END ) AS SENHA,
       ( CASE
           WHEN sglcampo = 'DOWNBOL_USER' THEN valor
         END ) AS USUARIO,
       ( CASE
           WHEN sglcampo = 'DOWNBOL_URL' THEN valor
         END ) AS URL
FROM   pluginintconfig
WHERE  codigoelemento = 'DOWNBOL'
       AND sglcampo IN ( 'DOWNBOL_PASSWORD', 'DOWNBOL_USER', 'DOWNBOL_URL' ); 


  • O retorno recebido será no formato base64, e deve ser retornado para aplicação sem transformações dentro do XML do RESPONSE:
200 - Ok
{
    "lStatus": true,
    "cMensagem": "Sucesso",
    "cBoleto": {base64}
}
API - Boleto

Retornos:

500 - Internal Server Error
{"code":500,"detailedMessage":"","message":"Internal Server Error"}
404 - Boleto Não encontrado
{
    "lStatus": false,
    "cMensagem": " Não foi encontrado o título referente ao boleto.",
    "cBoleto": ""
}
200 - Ok
{
    "lStatus": true,
    "cMensagem": "Sucesso",
    "cBoleto": {base64}
}