From 73a92b27025d49a3a85928c06ec1166e24490c99 Mon Sep 17 00:00:00 2001 From: Thiago Ribeiro Date: Tue, 16 Jun 2020 02:23:01 -0300 Subject: [PATCH] Adicionando suporte a rota Empresa; Adicionando IE para o Prestador. --- .gitignore | 1 + examples/nfse.prestador.create.php | 14 ++++-- src/Common/Nfse.php | 52 ++++++++++++++++++++++ src/Nfse/Prestador.php | 35 ++++++++++++--- tests/Builders/NfseBuilderTest.php | 1 + tests/Nfse/PrestadorTest.php | 69 ++++++++++++++++++++++++------ 6 files changed, 147 insertions(+), 25 deletions(-) create mode 100644 src/Common/Nfse.php diff --git a/.gitignore b/.gitignore index 6a04fd2..db7f9c2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ composer.phar /vendor/ /report/ teste.php +.phpunit.result.cache # 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 diff --git a/examples/nfse.prestador.create.php b/examples/nfse.prestador.create.php index e35e3a4..a88df56 100644 --- a/examples/nfse.prestador.create.php +++ b/examples/nfse.prestador.create.php @@ -1,6 +1,6 @@ '00.000.000/0001-91', + 'cpfCnpj' => '80.681.272/0001-33', 'inscricaoMunicipal' => '123456', 'razaoSocial' => 'Razao Social do Prestador', + 'simplesNacional' => true, 'endereco' => [ 'logradouro' => 'Rua de Teste', 'numero' => '1234', 'codigoCidade' => '4115200', - 'cep' => '87.050-800' + 'cep' => '87.050-800', + 'estado' => 'PR', + 'bairro' => 'CENTRO' + ], + 'nfse' => [ + 'ativo' => true ] ]); - $configuration = new Configuration(); + $configuration = new Configuration(Configuration::TYPE_ENVIRONMENT_SANDBOX); $response = $prestador->send($configuration); var_dump($response); diff --git a/src/Common/Nfse.php b/src/Common/Nfse.php new file mode 100644 index 0000000..ce8f001 --- /dev/null +++ b/src/Common/Nfse.php @@ -0,0 +1,52 @@ +validate($ativo) + ) { + throw new ValidationError( + 'Ativo é requerido para o cadastro de NFS-e.' + ); + } + + $this->ativo = $ativo; + } + + public function getAtivo() + { + return $this->ativo; + } + + public function setTipoContrato($tipoContrato) + { + if ( + !is_null($tipoContrato) && + !($tipoContrato === 0 || + $tipoContrato === 1) + ){ + throw new ValidationError( + 'Valor inválido para o TipoContrato. Valores aceitos: null, 0, 1' + ); + } + + $this->tipoContrato = $tipoContrato; + } + + public function getTipoContrato() + { + return $this->tipoContrato; + } +} diff --git a/src/Nfse/Prestador.php b/src/Nfse/Prestador.php index 8eaff8e..ade1039 100644 --- a/src/Nfse/Prestador.php +++ b/src/Nfse/Prestador.php @@ -13,6 +13,7 @@ use TecnoSpeed\Plugnotas\Error\RequiredError; use TecnoSpeed\Plugnotas\Error\ValidationError; use TecnoSpeed\Plugnotas\Traits\Communication; +use TecnoSpeed\Plugnotas\Common\Nfse; class Prestador extends BuilderAbstract { @@ -25,12 +26,14 @@ class Prestador extends BuilderAbstract private $incentivadorCultural; private $incentivoFiscal; private $inscricaoMunicipal; + private $inscricaoEstadual; private $nomeFantasia; private $razaoSocial; private $regimeTributario; private $regimeTributarioEspecial; private $simplesNacional; private $telefone; + private $nfse; public function setCertificado($certificado) { @@ -107,6 +110,16 @@ public function getEndereco() return $this->endereco; } + public function setNfse(Nfse $nfse) + { + $this->nfse = $nfse; + } + + public function getNfse() + { + return $this->nfse; + } + public function setIncentivadorCultural($incentivadorCultural) { $this->incentivadorCultural = $incentivadorCultural; @@ -129,11 +142,6 @@ public function getIncentivoFiscal() public function setInscricaoMunicipal($inscricaoMunicipal) { - if (is_null($inscricaoMunicipal)) { - throw new ValidationError( - 'Inscrição municipal é requerida para NFSe.' - ); - } $this->inscricaoMunicipal = $inscricaoMunicipal; } @@ -142,6 +150,16 @@ public function getInscricaoMunicipal() return $this->inscricaoMunicipal; } + public function setInscricaoEstadual($inscricaoEstadual) + { + $this->inscricaoEstadual = $inscricaoEstadual; + } + + public function getInscricaoEstadual() + { + return $this->inscricaoEstadual; + } + public function setNomeFantasia($nomeFantasia) { $this->nomeFantasia = $nomeFantasia; @@ -229,6 +247,10 @@ public static function fromArray($data) $data['endereco'] = Endereco::fromArray($data['endereco']); } + if (array_key_exists('nfse', $data)) { + $data['nfse'] = Nfse::fromArray($data['nfse']); + } + return Hydrate::toObject(self::class, $data); } @@ -238,7 +260,6 @@ public function validate() if( !v::allOf( v::keyNested('cpfCnpj'), - v::keyNested('inscricaoMunicipal'), v::keyNested('razaoSocial'), v::keyNested('simplesNacional'), v::keyNested('endereco.logradouro'), @@ -260,6 +281,6 @@ public function send(Configuration $configuration) $this->validate(); $communication = $this->getCallApiInstance($configuration); - return $communication->send('POST', '/nfse/prestador', $this->toArray(true)); + return $communication->send('POST', '/empresa', $this->toArray(true)); } } diff --git a/tests/Builders/NfseBuilderTest.php b/tests/Builders/NfseBuilderTest.php index 0841ce2..78e5a2f 100644 --- a/tests/Builders/NfseBuilderTest.php +++ b/tests/Builders/NfseBuilderTest.php @@ -6,6 +6,7 @@ use TecnoSpeed\Plugnotas\Builders\NfseBuilder; use TecnoSpeed\Plugnotas\Common\Endereco; use TecnoSpeed\Plugnotas\Common\Telefone; +use TecnoSpeed\Plugnotas\Common\Nfse; use TecnoSpeed\Plugnotas\Error\InvalidTypeError; use TecnoSpeed\Plugnotas\Error\ValidationError; use TecnoSpeed\Plugnotas\Nfse\CidadePrestacao; diff --git a/tests/Nfse/PrestadorTest.php b/tests/Nfse/PrestadorTest.php index 2863de0..e6d33d8 100644 --- a/tests/Nfse/PrestadorTest.php +++ b/tests/Nfse/PrestadorTest.php @@ -10,6 +10,7 @@ use PHPUnit\Framework\TestCase; use TecnoSpeed\Plugnotas\Common\Endereco; use TecnoSpeed\Plugnotas\Common\Telefone; +use TecnoSpeed\Plugnotas\Common\Nfse; use TecnoSpeed\Plugnotas\Communication\CallApi; use TecnoSpeed\Plugnotas\Configuration; use TecnoSpeed\Plugnotas\Error\InvalidTypeError; @@ -85,17 +86,6 @@ public function testWithNullRazaoSocial() $prestador->setRazaoSocial(null); } - /** - * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::setInscricaoMunicipal - */ - public function testWithNullIncricaoMunicipal() - { - $this->expectException(ValidationError::class); - $this->expectExceptionMessage('Inscrição municipal é requerida para NFSe.'); - $prestador = new Prestador(); - $prestador->setInscricaoMunicipal(null); - } - /** * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::setEmail */ @@ -121,6 +111,7 @@ public function testWithInvalidEmail() * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::getRegimeTributarioEspecial * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::getSimplesNacional * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::getTelefone + * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::getNfse * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::setCertificado * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::setCpfCnpj * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::setEmail @@ -134,6 +125,7 @@ public function testWithInvalidEmail() * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::setRegimeTributarioEspecial * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::setSimplesNacional * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::setTelefone + * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::setNfse */ public function testValidPrestadorCreation() { @@ -151,6 +143,10 @@ public function testValidPrestadorCreation() $telefone = new Telefone('44', '1234-1234'); + $nfse = new Nfse(); + $nfse->setAtivo(true); + $nfse->setTipoContrato(1); + $prestador = new Prestador(); $prestador->setCertificado('5b855b0926ddb251e0f0ef42'); $prestador->setCpfCnpj('00.000.000/0001-91'); @@ -165,7 +161,8 @@ public function testValidPrestadorCreation() $prestador->setRegimeTributarioEspecial(0); $prestador->setSimplesNacional(0); $prestador->setTelefone($telefone); - + $prestador->setNfse($nfse); + $this->assertSame($prestador->getCertificado(), '5b855b0926ddb251e0f0ef42'); $this->assertSame($prestador->getCpfCnpj(), '00000000000191'); $this->assertSame($prestador->getEmail(), 'teste@plugnotas.com.br'); @@ -179,7 +176,9 @@ public function testValidPrestadorCreation() $this->assertSame($prestador->getRegimeTributarioEspecial(), 0); $this->assertSame($prestador->getSimplesNacional(), 0); $this->assertSame($prestador->getTelefone()->getDdd(), '44'); - $this->assertSame($prestador->getTelefone()->getNumero(), '12341234'); + $this->assertSame($prestador->getTelefone()->getNumero(), '12341234'); + $this->assertSame($prestador->getNfse()->getAtivo(), true); + $this->assertSame($prestador->getNfse()->getTipoContrato(), 1); } /** @@ -193,6 +192,44 @@ public function testBuildFromArray() $this->assertSame($prestador->getCertificado(), '5b855b0926ddb251e0f0ef42'); } + /** + * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::fromArray + */ + public function testBuildFromArrayWithNfse() + { + $data = [ + 'certificado' => '5b855b0926ddb251e0f0ef42', + 'nfse' => [ + 'ativo' => true, + 'tipoContrato' => 1 + ] + ]; + $prestador = Prestador::fromArray($data); + $this->assertInstanceOf(Prestador::class, $prestador); + $this->assertSame($prestador->getCertificado(), '5b855b0926ddb251e0f0ef42'); + $this->assertInstanceOf(Nfse::class, $prestador->getNfse()); + } + + /** + * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::fromArray + */ + public function testBuildFromArrayWithNfseInvalid() + { + $this->expectExceptionMessage( + 'Valor inválido para o TipoContrato. Valores aceitos: null, 0, 1' + ); + + $data = [ + 'certificado' => '5b855b0926ddb251e0f0ef42', + 'nfse' => [ + 'ativo' => true, + 'tipoContrato' => 3 + ] + ]; + $prestador = Prestador::fromArray($data); + $prestador->validate(); + } + /** * @covers TecnoSpeed\Plugnotas\Nfse\Prestador::fromArray */ @@ -248,7 +285,6 @@ public function testValidateWithValidObject() { $data = [ 'cpfCnpj' => '00.000.000/0001-91', - 'inscricaoMunicipal' => '123456', 'razaoSocial' => 'Razao Social do Prestador', 'simplesNacional' => false, 'endereco' => [ @@ -295,10 +331,15 @@ public function testSend() 'codigoCidade' => '4115200', 'cep' => '87.050-800' ]); + $nfse = Nfse::fromArray([ + 'ativo' => true, + 'tipoContrato' => 1 + ]); $prestador->setCpfCnpj('00.000.000/0001-91'); $prestador->setInscricaoMunicipal('123456'); $prestador->setRazaoSocial('Razao Social do Prestador'); $prestador->setEndereco($endereco); + $prestador->setNfse($nfse); $prestador->setSimplesNacional(false); $response = $prestador->send($configuration);