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:


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

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}


IMPLEMENTAÇÃO NA LISTAGEM DE NOTA FISCAL

select valor from pluginintconfig where codigoelemento='CONF_GERAL' AND sglcampo='PENTAHO_URL'
{
	idnotafiscal:
}


{
    mensagem: {base64}
}

INTEGRAÇÃO

IMPORTAR VINCULO NOTA FISCAL X TÍTULO FINANCEIRO

API DOWNLOAD NOTA FISCAL

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

HEADERS: Authorization: Basic {TOKEN}

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' ); 


{
    mensagem: {base64}
}

Retornos:

{"code":500,"detailedMessage":"","message":"Internal Server Error"}
{
    "errorCode": 404,
    "errorMessage": "Nao encontrou a NF 01_05_000001838_11 "
}
{
    mensagem: {base64}
}

API DOWNLOAD BOLETO

APLICAÇÃO

CRIAR PLUGIN

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

select valor from pluginintconfig where codigoelemento='CONF_GERAL' AND sglcampo='PENTAHO_URL'


{
	idnotafiscal:
}


{
    "lStatus": true,
    "cMensagem": "Sucesso",
    "cBoleto": {base64}
}

INTEGRAÇÃO

API DOWNLOAD BOLETO

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

HEADERS: Authorization: Basic {TOKEN}

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' ); 


{
    "lStatus": true,
    "cMensagem": "Sucesso",
    "cBoleto": {base64}
}

Retornos:

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