Skip to content

Commit 1a4898c

Browse files
authored
Merge pull request #4 from tecnospeed/feature/cancel
Feature/cancel
2 parents 0f0e0ef + 843276d commit 1a4898c

25 files changed

+951
-49
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
# Changelog
22
Alterações na biblioteca
33

4+
## [1.3.0] - 12/03/2019
5+
### Adicionado
6+
7+
Cancelamento de NFSe utilizando o id da nota, consulta do status do cancelamento.
8+
49
## [1.2.0] - 11/03/2019
510
### Adicionado
611

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,16 @@ Os arquivos serão salvos na pasta configurada (a qual precisa ter permissão de
8383

8484
[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).
8585

86+
### Cancelamento
87+
88+
O cancelamento de uma NFSe pode ser realizado da mesma forma com que a busca e o download, informando o ID da Nfse ou o Cnpj do prestador e o ID Integração.
89+
90+
Da mesma forma que a consulta e o download do PDF da Nfse é necessário de um objeto do tipo `TecnoSpeed\Plugnotas\Configuration`, o qual deve ser setado num novo objeto `TecnoSpeed\Plugnotas\Nfse` utilizando o método `setConfiguration`.
91+
92+
Os respectivos métodos para realizar este procedimento são: `cancel` e `cancelByCnpjAndIdIntegracao`.
93+
94+
Ao criar um cancelamento será retornado um protocolo, tal protocolo pode ser utilizado para consultar o status do cancelamento utilizando a rota `cancelStatus`.
95+
8696
### Exemplos
8797

8898
Você pode conferir alguns exemplos na pasta `/examples`.

examples/nfse.cancel.cnpjId.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
require '../vendor/autoload.php';
4+
5+
use TecnoSpeed\Plugnotas\Configuration;
6+
use TecnoSpeed\Plugnotas\Nfse;
7+
8+
try {
9+
// Criando configuração (este objeto é onde você irá colocar seu api-key)
10+
$configuration = new Configuration(
11+
Configuration::TYPE_ENVIRONMENT_SANDBOX, // Ambiente a ser enviada a requisição
12+
'2da392a6-79d2-4304-a8b7-959572c7e44d' // API-Key
13+
);
14+
15+
$nfse = new Nfse();
16+
$nfse->setConfiguration($configuration);
17+
$cancelation = $nfse->cancelByCnpjAndIdIntegracao('00000000000191', '000000000001914');
18+
var_dump($cancelation);
19+
} catch (\Exception $e) {
20+
var_dump($e);
21+
}
22+

examples/nfse.cancel.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
require '../vendor/autoload.php';
4+
5+
use TecnoSpeed\Plugnotas\Configuration;
6+
use TecnoSpeed\Plugnotas\Nfse;
7+
8+
try {
9+
// Criando configuração (este objeto é onde você irá colocar seu api-key)
10+
$configuration = new Configuration(
11+
Configuration::TYPE_ENVIRONMENT_SANDBOX, // Ambiente a ser enviada a requisição
12+
'2da392a6-79d2-4304-a8b7-959572c7e44d' // API-Key
13+
);
14+
15+
$nfse = new Nfse();
16+
$nfse->setConfiguration($configuration);
17+
$cancelation = $nfse->cancel('5c3118127ab98414de5e2bd6');
18+
var_dump($cancelation);
19+
} catch (\Exception $e) {
20+
var_dump($e);
21+
}
22+

examples/tmp/.gitkeep

Whitespace-only changes.

src/Communication/CallApi.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ public function __construct(Configuration $configuration)
2828
$this->url = $configuration->getUrl();
2929
}
3030

31+
public function setClient($client)
32+
{
33+
$this->client = $client;
34+
}
35+
3136
public function send($method, $destination, $data)
3237
{
3338
try {
@@ -42,7 +47,7 @@ public function send($method, $destination, $data)
4247

4348
return ResponseObject::parse($response);
4449
}
45-
50+
4651
$response = $this->client->request(
4752
$method,
4853
$destination,
@@ -74,7 +79,7 @@ public function download($method, $destination, $data, $fileName)
7479

7580
return ResponseObject::parse($response);
7681
}
77-
82+
7883
$response = $this->client->request(
7984
$method,
8085
$destination,
@@ -85,7 +90,7 @@ public function download($method, $destination, $data, $fileName)
8590
]
8691
);
8792

88-
return true;
93+
return ResponseObject::parse($response);
8994
} catch (ClientException $ce) {
9095
$response = $ce->getResponse();
9196
return ResponseObject::parse($response);

src/Interfaces/IDfe.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@
66

77
interface IDfe
88
{
9-
public function downloadPdf($id);
10-
public function downloadPdfByCnpjAndIdIntegracao($cnpj, $idIntegracao);
9+
public function cancel($id);
10+
public function download($id);
1111
public function find($id);
12-
public function findByCnpjAndIdIntegracao($cnpj, $idIntegracao);
13-
public function findByIdOrProtocol($idOrProtocol);
1412
public function send(Configuration $configuration);
1513
public function toArray();
1614
public function validate();

src/Nfse.php

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44
use FerFabricio\Hydratator\Hydratate;
55
use Respect\Validation\Validator as v;
66
use TecnoSpeed\Plugnotas\Abstracts\BuilderAbstract;
7-
use TecnoSpeed\Plugnotas\Configuration;
87
use TecnoSpeed\Plugnotas\Communication\CallApi;
9-
use TecnoSpeed\Plugnotas\Error\ConfigurationRequiredError;
8+
use TecnoSpeed\Plugnotas\Configuration;
109
use TecnoSpeed\Plugnotas\Error\RequiredError;
1110
use TecnoSpeed\Plugnotas\Error\ValidationError;
1211
use TecnoSpeed\Plugnotas\Interfaces\IDfe;
@@ -16,9 +15,12 @@
1615
use TecnoSpeed\Plugnotas\Nfse\Rps;
1716
use TecnoSpeed\Plugnotas\Nfse\Servico;
1817
use TecnoSpeed\Plugnotas\Nfse\Tomador;
18+
use TecnoSpeed\Plugnotas\Traits\Communication;
1919

2020
class Nfse extends BuilderAbstract implements IDfe
2121
{
22+
use Communication;
23+
2224
private $cidadePrestacao;
2325
private $configuration;
2426
private $enviarEmail;
@@ -155,7 +157,7 @@ public function validate()
155157
v::keyNested('servico.discriminacao'),
156158
v::keyNested('servico.cnae'),
157159
v::keyNested('servico.iss.aliquota'),
158-
v::keyNested('servico.valor.servico')
160+
v::keyNested('servico.valor.servico')
159161
)->validate($data) ||
160162
!v::allOf(
161163
v::keyNested('prestador.cpfCnpj'),
@@ -210,45 +212,40 @@ public static function fromArray($data)
210212

211213
public function find($id)
212214
{
213-
if (!$this->configuration) {
214-
throw new ConfigurationRequiredError('É necessário setar a configuração utilizando o método setConfiguration.');
215-
}
216-
217-
$communication = new CallApi($this->configuration);
215+
$communication = $this->getCallApiInstance($this->configuration);
218216
return $communication->send('GET', "/nfse/${id}", null);
219217
}
220218

221219
public function findByCnpjAndIdIntegracao($cnpj, $idIntegracao)
222220
{
223-
if (!$this->configuration) {
224-
throw new ConfigurationRequiredError('É necessário setar a configuração utilizando o método setConfiguration.');
225-
}
226-
227-
$communication = new CallApi($this->configuration);
221+
$communication = $this->getCallApiInstance($this->configuration);
228222
return $communication->send('GET', "/nfse/consultar/${idIntegracao}/${cnpj}", null);
229223
}
230224

231225
public function findByIdOrProtocol($idOrProtocol)
232226
{
233-
if (!$this->configuration) {
234-
throw new ConfigurationRequiredError('É necessário setar a configuração utilizando o método setConfiguration.');
235-
}
236-
237-
$communication = new CallApi($this->configuration);
227+
$communication = $this->getCallApiInstance($this->configuration);
238228
return $communication->send('GET', "/nfse/consultar/${idOrProtocol}", null);
239229
}
240230

241-
public function downloadPdf($id)
231+
public function findCancel($id)
242232
{
243-
if (!$this->configuration) {
244-
throw new ConfigurationRequiredError('É necessário setar a configuração utilizando o método setConfiguration.');
245-
}
233+
$communication = $this->getCallApiInstance($this->configuration);
234+
return $communication->send('GET', "/nfse/cancelar/status/${id}", null);
235+
}
246236

237+
public function download($id)
238+
{
239+
return $this->downloadPdf($id);
240+
}
241+
242+
public function downloadPdf($id)
243+
{
244+
$communication = $this->getCallApiInstance($this->configuration);
247245
if (!$this->configuration->getNfseDownloadDirectory()) {
248246
throw new RequiredError('É necessário setar o diretório para download do PDF.');
249247
}
250248

251-
$communication = new CallApi($this->configuration);
252249
return $communication->download(
253250
'GET',
254251
"/nfse/pdf/${id}",
@@ -259,20 +256,35 @@ public function downloadPdf($id)
259256

260257
public function downloadPdfByCnpjAndIdIntegracao($cnpj, $idIntegracao)
261258
{
262-
if (!$this->configuration) {
263-
throw new ConfigurationRequiredError('É necessário setar a configuração utilizando o método setConfiguration.');
264-
}
259+
$communication = $this->getCallApiInstance($this->configuration);
265260

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

270-
$communication = new CallApi($this->configuration);
271265
return $communication->download(
272266
'GET',
273267
"/nfse/pdf/${idIntegracao}/${cnpj}",
274268
null,
275269
$this->configuration->getNfseDownloadDirectory() . '/' . $cnpj . '-' . $idIntegracao . '.pdf'
276270
);
277271
}
272+
273+
public function cancel($id)
274+
{
275+
$communication = $this->getCallApiInstance($this->configuration);
276+
return $communication->send('POST', "/nfse/cancelar/${id}", null);
277+
}
278+
279+
public function cancelByCnpjAndIdIntegracao($cnpj, $idIntegracao)
280+
{
281+
$communication = $this->getCallApiInstance($this->configuration);
282+
return $communication->send('POST', "/nfse/pdf/${idIntegracao}/${cnpj}", null);
283+
}
284+
285+
public function cancelStatus($id)
286+
{
287+
$communication = $this->getCallApiInstance($this->configuration);
288+
return $communication->send('POST', "/nfse/cancelar/status/${id}", null);
289+
}
278290
}

src/Nfse/Prestador.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,20 @@
44

55
use FerFabricio\Hydratator\Hydratate;
66
use Respect\Validation\Validator as v;
7-
use TecnoSpeed\Plugnotas\Configuration;
8-
use TecnoSpeed\Plugnotas\Communication\CallApi;
7+
use TecnoSpeed\Plugnotas\Abstracts\BuilderAbstract;
98
use TecnoSpeed\Plugnotas\Common\Endereco;
109
use TecnoSpeed\Plugnotas\Common\Telefone;
11-
use TecnoSpeed\Plugnotas\Abstracts\BuilderAbstract;
10+
use TecnoSpeed\Plugnotas\Communication\CallApi;
11+
use TecnoSpeed\Plugnotas\Configuration;
1212
use TecnoSpeed\Plugnotas\Error\InvalidTypeError;
13+
use TecnoSpeed\Plugnotas\Error\RequiredError;
1314
use TecnoSpeed\Plugnotas\Error\ValidationError;
15+
use TecnoSpeed\Plugnotas\Traits\Communication;
1416

1517
class Prestador extends BuilderAbstract
1618
{
19+
use Communication;
20+
1721
private $certificado;
1822
private $cpfCnpj;
1923
private $email;
@@ -255,7 +259,7 @@ public function send(Configuration $configuration)
255259
{
256260
$this->validate();
257261

258-
$communication = new CallApi($configuration);
262+
$communication = $this->getCallApiInstance($configuration);
259263
return $communication->send('POST', '/nfse/prestador', $this->toArray(true));
260264
}
261265
}

src/Nfse/Rps.php

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace TecnoSpeed\Plugnotas\Nfse;
44

5-
use Respect\Validation\Validator as v;
65
use TecnoSpeed\Plugnotas\Abstracts\BuilderAbstract;
76
use TecnoSpeed\Plugnotas\Error\ValidationError;
87

@@ -13,9 +12,6 @@ class Rps extends BuilderAbstract
1312

1413
public function setDataEmissao(\DateTimeInterface $dataEmissao)
1514
{
16-
if (!v::date()->validate($dataEmissao)) {
17-
throw new ValidationError('dataEmissao deve ser uma data válida.');
18-
}
1915
$this->dataEmissao = $dataEmissao->format('Y-m-d\TH:i:s');
2016
}
2117

@@ -26,9 +22,6 @@ public function getDataEmissao()
2622

2723
public function setCompetencia(\DateTimeInterface $competencia)
2824
{
29-
if (!v::date()->validate($competencia)) {
30-
throw new ValidationError('competencia deve ser uma data válida.');
31-
}
3225
$this->competencia = $competencia->format('Y-m-d');
3326
}
3427

0 commit comments

Comments
 (0)