Skip to content

Commit

Permalink
Merge pull request #3 from tecnospeed/feature/download
Browse files Browse the repository at this point in the history
Feature/download
  • Loading branch information
ferfabricio authored Mar 11, 2019
2 parents f789394 + aeb7be6 commit 131c8a3
Show file tree
Hide file tree
Showing 11 changed files with 180 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@ teste.php
# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control
# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
# composer.lock
!/examples/tmp/.gitkeep
/examples/tmp/
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
# Changelog
Alterações na biblioteca

## [1.2.0] - 11/03/2019
### Adicionado

Download de PDF da NFSe utilizando o id, também como CNPJ do Prestador e ID Integração.

## [1.1.0] - 11/03/2019
### Adicionado

Expand Down
15 changes: 15 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,25 @@ Nos links a seguir você encontra exemplos dos cadastros dos tipos:
### Consultando uma NFSe

Para consultar uma NFSe é necessário criar um objeto do tipo `TecnoSpeed\Plugnotas\Configuration`, setar ele num novo objeto `TecnoSpeed\Plugnotas\Nfse` utilizando o método `setConfiguration`.

Após este setup realizado, existe duas possibilidades de consulta, pelo ID da nota ou protocolo gerado na hora que você enviou a nota, ou passando o ID Integração e o CNPJ do Prestador utilizado para criar a NFSe. Os respectivos métodos são: `findByCnpjAndIdIntegracao` e `findByIdOrProtocol`.

Exemplo utilizando o [método findByCnpjAndIdIntegracao pode ser encontrado aqui](https://github.com/tecnospeed/plugnotas-php/blob/master/examples/nfse.consulta.cnpjId.php) e [exemplo utilizando o método findByIdOrProtocol pode ser encontrado aqui](https://github.com/tecnospeed/plugnotas-php/blob/master/examples/nfse.consulta.cnpjId.php).

### Download do PDF de uma NFSe

Da mesma forma que a consulta o download do PDF da Nfse necessita de um objeto do tipo `TecnoSpeed\Plugnotas\Configuration`, o qual deve ser setado num novo objeto `TecnoSpeed\Plugnotas\Nfse` utilizando o método `setConfiguration`.
Uma particularidade é que é necessário indicar a pasta para escrita dos arquivos no objeto de configuração utilizando o método `setNfseDownloadDirectory`.

Existe a possibilidade de realizar o download utilizando o ID da nota retornado na criação utilizando o método `download`, como também realizar o download utilizando o CNPJ do Prestador e o ID Integração utilizados no envio da NFSe através do método `downloadPdfByCnpjAndIdIntegracao`.

Os arquivos serão salvos na pasta configurada (a qual precisa ter permissão de escrita), o padrão do nome do arquivo será o seguinte:

* Quando utilizado o método `download`: <pasta informada>/<id>.pdf
* Quando utilizado o método `downloadPdfByCnpjAndIdIntegracao`: <pasta informada>/<cnpj>-<id integração>.pdf

[Exemplo de download utilizando o ID pode ser encontrado aqui](https://github.com/tecnospeed/plugnotas-php/blob/master/examples/nfse.download.php) e [exemplo de download utilizando o CNPJ e ID Integração aqui](https://github.com/tecnospeed/plugnotas-php/blob/master/examples/nfse.download.cnpjId.php).

### Exemplos

Você pode conferir alguns exemplos na pasta `/examples`.
Expand Down
23 changes: 23 additions & 0 deletions examples/nfse.download.cnpjId.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

require '../vendor/autoload.php';

use TecnoSpeed\Plugnotas\Configuration;
use TecnoSpeed\Plugnotas\Nfse;

try {
// Criando configuração (este objeto é onde você irá colocar seu api-key)
$configuration = new Configuration(
Configuration::TYPE_ENVIRONMENT_SANDBOX, // Ambiente a ser enviada a requisição
'2da392a6-79d2-4304-a8b7-959572c7e44d' // API-Key
);
$configuration->setNfseDownloadDirectory('./tmp/');

$nfse = new Nfse();
$nfse->setConfiguration($configuration);
$download = $nfse->downloadPdfByCnpjAndIdIntegracao('00000000000191', '000000000001914');
var_dump($download);
} catch (\Exception $e) {
var_dump($e);
}

23 changes: 23 additions & 0 deletions examples/nfse.download.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

require '../vendor/autoload.php';

use TecnoSpeed\Plugnotas\Configuration;
use TecnoSpeed\Plugnotas\Nfse;

try {
// Criando configuração (este objeto é onde você irá colocar seu api-key)
$configuration = new Configuration(
Configuration::TYPE_ENVIRONMENT_SANDBOX, // Ambiente a ser enviada a requisição
'2da392a6-79d2-4304-a8b7-959572c7e44d' // API-Key
);
$configuration->setNfseDownloadDirectory('./tmp/');

$nfse = new Nfse();
$nfse->setConfiguration($configuration);
$download = $nfse->downloadPdf('5c3118127ab98414de5e2bd6');
var_dump($download);
} catch (\Exception $e) {
var_dump($e);
}

33 changes: 33 additions & 0 deletions src/Communication/CallApi.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,37 @@ public function send($method, $destination, $data)
return ResponseObject::parse($response);
}
}

public function download($method, $destination, $data, $fileName)
{
try {
if ($method === 'GET') {
$response = $this->client->request(
$method,
$destination,
[
'headers' => $this->headers,
'sink' => $fileName
]
);

return ResponseObject::parse($response);
}

$response = $this->client->request(
$method,
$destination,
[
'headers' => $this->headers,
'json' => $data,
'sink' => $fileName
]
);

return true;
} catch (ClientException $ce) {
$response = $ce->getResponse();
return ResponseObject::parse($response);
}
}
}
11 changes: 11 additions & 0 deletions src/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class Configuration

private $apiKey = self::API_KEY_SANDBOX;
private $environment = self::TYPE_ENVIRONMENT_SANDBOX;
private $nfseDownloadDirectory;

public function __construct($environment = self::TYPE_ENVIRONMENT_SANDBOX, $apiKey = self::API_KEY_SANDBOX)
{
Expand Down Expand Up @@ -46,4 +47,14 @@ public function getUrl()

return self::URL_SANDBOX;
}

public function setNfseDownloadDirectory($directory)
{
$this->nfseDownloadDirectory = $directory;
}

public function getNfseDownloadDirectory()
{
return $this->nfseDownloadDirectory;
}
}
3 changes: 3 additions & 0 deletions src/Interfaces/IDfe.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@

interface IDfe
{
public function downloadPdf($id);
public function downloadPdfByCnpjAndIdIntegracao($cnpj, $idIntegracao);
public function find($id);
public function findByCnpjAndIdIntegracao($cnpj, $idIntegracao);
public function findByIdOrProtocol($idOrProtocol);
public function send(Configuration $configuration);
Expand Down
53 changes: 53 additions & 0 deletions src/Nfse.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,11 @@ public function setConfiguration(Configuration $configuration)
$this->configuration = $configuration;
}

public function getConfiguration()
{
return $this->configuration;
}

public function setEnviarEmail($enviarEmail)
{
if (!v::boolVal()->validate($enviarEmail)) {
Expand Down Expand Up @@ -203,6 +208,16 @@ public static function fromArray($data)
return Hydratate::toObject(Nfse::class, $data);
}

public function find($id)
{
if (!$this->configuration) {
throw new ConfigurationRequiredError('É necessário setar a configuração utilizando o método setConfiguration.');
}

$communication = new CallApi($this->configuration);
return $communication->send('GET', "/nfse/${id}", null);
}

public function findByCnpjAndIdIntegracao($cnpj, $idIntegracao)
{
if (!$this->configuration) {
Expand All @@ -222,4 +237,42 @@ public function findByIdOrProtocol($idOrProtocol)
$communication = new CallApi($this->configuration);
return $communication->send('GET', "/nfse/consultar/${idOrProtocol}", null);
}

public function downloadPdf($id)
{
if (!$this->configuration) {
throw new ConfigurationRequiredError('É necessário setar a configuração utilizando o método setConfiguration.');
}

if (!$this->configuration->getNfseDownloadDirectory()) {
throw new RequiredError('É necessário setar o diretório para download do PDF.');
}

$communication = new CallApi($this->configuration);
return $communication->download(
'GET',
"/nfse/pdf/${id}",
null,
$this->configuration->getNfseDownloadDirectory() . '/' . $id . '.pdf'
);
}

public function downloadPdfByCnpjAndIdIntegracao($cnpj, $idIntegracao)
{
if (!$this->configuration) {
throw new ConfigurationRequiredError('É necessário setar a configuração utilizando o método setConfiguration.');
}

if (!$this->configuration->getNfseDownloadDirectory()) {
throw new RequiredError('É necessário setar o diretório para download do PDF.');
}

$communication = new CallApi($this->configuration);
return $communication->download(
'GET',
"/nfse/pdf/${idIntegracao}/${cnpj}",
null,
$this->configuration->getNfseDownloadDirectory() . '/' . $cnpj . '-' . $idIntegracao . '.pdf'
);
}
}
7 changes: 7 additions & 0 deletions tests/ConfigurationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,11 @@ public function testTestChangeEnvironment()
$this->assertSame($configuration->getEnvironment(), Configuration::TYPE_ENVIRONMENT_PRODUCTION);
$this->assertSame($configuration->getUrl(), 'https://api.plugnotas.com.br');
}

public function testWithNfseDownloadDirectory()
{
$configuration = new Configuration();
$configuration->setNfseDownloadDirectory('/some/test/directory/');
$this->assertSame($configuration->getNfseDownloadDirectory(), '/some/test/directory/');
}
}
5 changes: 5 additions & 0 deletions tests/NfseTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use TecnoSpeed\Plugnotas\Common\Endereco;
use TecnoSpeed\Plugnotas\Common\Telefone;
use TecnoSpeed\Plugnotas\Common\ValorAliquota;
use TecnoSpeed\Plugnotas\Configuration;
use TecnoSpeed\Plugnotas\Error\RequiredError;
use TecnoSpeed\Plugnotas\Error\ValidationError;
use TecnoSpeed\Plugnotas\Nfse;
Expand Down Expand Up @@ -175,6 +176,8 @@ public function testWithValidData()
$impressao = new Impressao();
$impressao->setCamposCustomizados(['teste'=>'testeImpressao']);

$configuration = new Configuration();

$nfse = new Nfse();
$nfse->setCidadePrestacao($cidadePrestacao);
$nfse->setEnviarEmail(false);
Expand All @@ -185,6 +188,7 @@ public function testWithValidData()
$nfse->setServico($this->getServico());
$nfse->setSubstituicao(false);
$nfse->setTomador($this->getTomador());
$nfse->setConfiguration($configuration);

$this->assertSame($nfse->getCidadePrestacao()->getDescricao(), 'Cidade de Teste');
$this->assertSame($nfse->getEnviarEmail(), false);
Expand All @@ -195,6 +199,7 @@ public function testWithValidData()
$this->assertSame($nfse->getServico()->getIdIntegracao(), 'A001XT');
$this->assertSame($nfse->getSubstituicao(), false);
$this->assertSame($nfse->getTomador()->getCpfCnpj(), '00000000000191');
$this->assertInstanceOf(Configuration::class, $nfse->getConfiguration());
}

public function testCreateObjectFromArray()
Expand Down

0 comments on commit 131c8a3

Please sign in to comment.