Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions src/Common/ConfigNfse/Config.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
<?php

namespace TecnoSpeed\Plugnotas\Common\ConfigNfse;

use FerFabricio\Hydrator\Hydrate;
use Respect\Validation\Validator as v;

use TecnoSpeed\Plugnotas\Common\ConfigNfse\Rps;
use TecnoSpeed\Plugnotas\Common\ConfigNfse\Prefeitura;

use TecnoSpeed\Plugnotas\Error\ValidationError;
use TecnoSpeed\Plugnotas\Error\InvalidTypeError;
use TecnoSpeed\Plugnotas\Abstracts\BuilderAbstract;

class Config extends BuilderAbstract
{
private $producao;
private $rps;
private $prefeitura;

public static function fromArray($data)
{
if (!is_array($data)) {
throw new InvalidTypeError('Deve ser informado um array.');
}

if (array_key_exists('rps', $data)) {
$data['rps'] = Rps::fromArray($data['rps']);
}

if (array_key_exists('prefeitura', $data)) {
$data['prefeitura'] = Prefeitura::fromArray($data['prefeitura']);
}

return Hydrate::toObject(self::class, $data);
}

public function setPrefeitura(Prefeitura $prefeitura)
{
$this->prefeitura = $prefeitura;
}

public function getPrefeitura()
{
return $this->prefeitura;
}

public function setRps(Rps $rps)
{
$this->rps = $rps;
}

public function getRps()
{
return $this->rps;
}

public function setProducao($producao)
{
if (
!v::boolVal()->validate($producao)
) {
throw new ValidationError(
'Producao tem que ser um valor booleano'
);
}

$this->producao = $producao;
}

public function getProducao()
{
return $this->producao;
}
}
74 changes: 74 additions & 0 deletions src/Common/ConfigNfse/Prefeitura.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
<?php

namespace TecnoSpeed\Plugnotas\Common\ConfigNfse;

use Respect\Validation\Validator as v;
use TecnoSpeed\Plugnotas\Error\ValidationError;
use TecnoSpeed\Plugnotas\Abstracts\BuilderAbstract;

class Prefeitura extends BuilderAbstract
{
private $login;
private $senha;
private $receitaBruta;
private $lei;
private $dataInicio;

public function setLogin($login)
{
$this->login = $login;
}

public function getLogin()
{
return $this->login;
}

public function setSenha($senha)
{
$this->senha = $senha;
}

public function getSenha()
{
return $this->senha;
}

public function setReceitaBruta($receitaBruta)
{
$this->receitaBruta = $receitaBruta;
}

public function getReceitaBruta()
{
return $this->receitaBruta;
}

public function setLei($lei)
{
$this->lei = $lei;
}

public function getLei()
{
return $this->lei;
}

public function setDataInicio($dataInicio)
{
if(
!is_null($dataInicio) &&
!v::date('Y-m-d')->validate($dataInicio)
) {
throw new ValidationError(
'Formato da data é inválido. Formato válido YYYY-MM-DD.'
);
}
$this->dataInicio = $dataInicio;
}

public function getDataInicio()
{
return $this->dataInicio;
}
}
72 changes: 72 additions & 0 deletions src/Common/ConfigNfse/Rps.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php

namespace TecnoSpeed\Plugnotas\Common\ConfigNfse;

use Respect\Validation\Validator as v;

use TecnoSpeed\Plugnotas\Error\ValidationError;
use TecnoSpeed\Plugnotas\Abstracts\BuilderAbstract;

class Rps extends BuilderAbstract
{
private $serie;
private $numero;
private $lote;

public function setSerie($serie)
{
if(
!is_null($serie) &&
!v::stringType()->validate($serie)
) {
throw new ValidationError(
'Serie tem que ser um valor string'
);
}

$this->serie = $serie;
}

public function getSerie()
{
return $this->serie;
}

public function setNumero($numero)
{
if(
!is_null($numero) &&
!v::intType()->validate($numero)
) {
throw new ValidationError(
'Numero tem que ser um valor inteiro'
);
}

$this->numero = $numero;
}

public function getNumero()
{
return $this->numero;
}

public function setLote($lote)
{
if(
!is_null($lote) &&
!v::intType()->validate($lote)
) {
throw new ValidationError(
'Lote tem que ser um valor inteiro'
);
}

$this->lote = $lote;
}

public function getLote()
{
return $this->lote;
}
}
42 changes: 35 additions & 7 deletions src/Common/Nfse.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,32 @@

namespace TecnoSpeed\Plugnotas\Common;

use TecnoSpeed\Plugnotas\Abstracts\BuilderAbstract;
use TecnoSpeed\Plugnotas\Error\ValidationError;
use FerFabricio\Hydrator\Hydrate;
use Respect\Validation\Validator as v;

use TecnoSpeed\Plugnotas\Error\ValidationError;
use TecnoSpeed\Plugnotas\Error\InvalidTypeError;
use TecnoSpeed\Plugnotas\Common\ConfigNfse\Config;
use TecnoSpeed\Plugnotas\Abstracts\BuilderAbstract;

class Nfse extends BuilderAbstract
{
private $ativo;
private $tipoContrato;
private $config;

public static function fromArray($data)
{
if (!is_array($data)) {
throw new InvalidTypeError('Deve ser informado um array.');
}

if (array_key_exists('config', $data)) {
$data['config'] = Config::fromArray($data['config']);
}

return Hydrate::toObject(self::class, $data);
}

public function setAtivo($ativo)
{
Expand All @@ -22,13 +40,13 @@ public function setAtivo($ativo)
);
}

$this->ativo = $ativo;
$this->ativo = $ativo;
}

public function getAtivo()
{
return $this->ativo;
}
}

public function setTipoContrato($tipoContrato)
{
Expand All @@ -39,14 +57,24 @@ public function setTipoContrato($tipoContrato)
){
throw new ValidationError(
'Valor inválido para o TipoContrato. Valores aceitos: null, 0, 1'
);
);
}

$this->tipoContrato = $tipoContrato;
$this->tipoContrato = $tipoContrato;
}

public function getTipoContrato()
{
return $this->tipoContrato;
}
}

public function setConfig(Config $config)
{
$this->config = $config;
}

public function getConfig()
{
return $this->config;
}
}
69 changes: 69 additions & 0 deletions tests/Common/ConfigNfse/ConfigTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?php

namespace TecnoSpeed\Plugnotas\Tests\Common\ConfigNfse;

use PHPUnit\Framework\TestCase;

use TecnoSpeed\Plugnotas\Error\ValidationError;
use TecnoSpeed\Plugnotas\Error\InvalidTypeError;

use TecnoSpeed\Plugnotas\Common\ConfigNfse\Rps;
use TecnoSpeed\Plugnotas\Common\ConfigNfse\Config;
use TecnoSpeed\Plugnotas\Common\ConfigNfse\Prefeitura;

class ConfigTest extends TestCase
{
/**
* @covers TecnoSpeed\Plugnotas\Common\ConfigNfse\Config::setProducao
*/
public function testInvalidProducao()
{
$this->expectException(ValidationError::class);
$this->expectExceptionMessage('Producao tem que ser um valor booleano');
$config = new Config();
$config->setProducao('teste');
}

/**
* @covers TecnoSpeed\Plugnotas\Common\ConfigNfse\Config::fromArray
*/
public function testWithInvalidArray()
{
$this->expectException(InvalidTypeError::class);
$this->expectExceptionMessage('Deve ser informado um array.');
Config::fromArray('invalid-array');
}

/**
* @covers TecnoSpeed\Plugnotas\Common\ConfigNfse\Config::fromArray
*/
public function testWithValidArray()
{
$config = Config::fromArray([
'producao' => true,
'rps' => [],
'prefeitura' => []
]);

$this->assertSame($config->getProducao(), true);
$this->assertEquals($config->getRps(), new Rps([]));
$this->assertEquals($config->getPrefeitura(), new Prefeitura([]));
}

/**
* @covers TecnoSpeed\Plugnotas\Common\ConfigNfse\Config::setRps
* @covers TecnoSpeed\Plugnotas\Common\ConfigNfse\Config::setPrefeitura
* @covers TecnoSpeed\Plugnotas\Common\ConfigNfse\Config::setProducao
*/
public function testWithValidData()
{
$config = new Config();
$config->setRps(new Rps([]));
$config->setPrefeitura(new Prefeitura([]));
$config->setProducao(true);

$this->assertSame($config->getProducao(), true);
$this->assertEquals($config->getRps(), new Rps([]));
$this->assertEquals($config->getPrefeitura(), new Prefeitura([]));
}
}
Loading