From 3fd2ce35bd968bd7910118052affd9f73b206bab Mon Sep 17 00:00:00 2001 From: vinicius Date: Wed, 13 Jun 2018 10:41:27 -0300 Subject: [PATCH] =?UTF-8?q?[UPDATE]=20CNAB400BB=20atualiza=C3=A7=C3=B5es?= =?UTF-8?q?=20para=20funcionamento=20correto=20para=20gera=C3=A7=C3=A3o=20?= =?UTF-8?q?do=20arquivo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Builder/BBCnab400Builder.php | 52 +++++++++++++++----------------- src/Builder/Builder.php | 9 +++--- src/Cnab/Cnab400/BB/Detalhe.php | 19 ++++++------ src/Cnab/Cnab400/BB/Header.php | 8 ++--- src/Cnab/Cnab400/BB/Trailler.php | 3 +- src/RemessaFactory.php | 19 +++++++----- src/Validator/Validator.php | 8 +++-- src/config/validator.yml | 3 ++ 8 files changed, 61 insertions(+), 60 deletions(-) diff --git a/src/Builder/BBCnab400Builder.php b/src/Builder/BBCnab400Builder.php index a6885d8..c55b872 100755 --- a/src/Builder/BBCnab400Builder.php +++ b/src/Builder/BBCnab400Builder.php @@ -10,7 +10,6 @@ class BBCnab400Builder extends Builder { - /** * Dados configurados no arquivo "src/config/params.yml" * @var array @@ -38,8 +37,7 @@ public function build() return $this ->detalhes() ->header() - ->trailler() - ; + ->trailler(); } /** @@ -48,12 +46,12 @@ public function build() */ protected function detalhes() { - $seqConvenio = $this->getSeqConvenio($this->detalhesBoleto['convenios']); - $convenioBancario = $this->detalhesBoleto['convenios'][$seqConvenio]; - $documentosArrecadacao = $this->detalhesBoleto['transacoes'][$seqConvenio]; - + $seqConvenio = $this->getSeqConvenio($this->detalhesBoleto['convenios']); + $convenioBancario = $this->detalhesBoleto['convenios'][$seqConvenio]; + $documentosArrecadacao = $this->detalhesBoleto['transacoes'][$seqConvenio]; $arrDetalhes = []; - foreach ($documentosArrecadacao['dam'] as $key => $documento) { + + foreach ($documentosArrecadacao['dam'] as $documento) { $detalhe = new Detalhe; $detalhe->setIdentificacaoRegistro(7); @@ -69,12 +67,9 @@ protected function detalhes() $detalhe->setNumeroPrestacao('00'); $detalhe->setGrupoValor('00'); $detalhe->setComplementoRegistroBranco1(''); - $detalhe->setMsgSacadorAvalista(' '); + $detalhe->setMsgSacadorAvalista(''); $detalhe->setPrefixoTitulo(''); - - /** @TODO: variação da carteira... */ - $detalhe->setVariacaoCarteira('019'); - + $detalhe->setVariacaoCarteira($convenioBancario['variacaoCarteira']); $detalhe->setContaCaucao('0'); $detalhe->setNumeroBordero('000000'); $detalhe->setTipoCobranca(''); @@ -83,15 +78,14 @@ protected function detalhes() $detalhe->setNumTituloCedente(''); $detalhe->setDtVencimento((new \DateTime($documento['dataVencimento']))->format('dmy')); $detalhe->setVlTitulo($documento['valor']); - $detalhe->setEspecieTitulo('26'); $detalhe->setNumBanco('001'); $detalhe->setPrefixoAgenciaCobradora('0000'); - $detalhe->setPrefixoAgenciaDVCobranca(' '); - $detalhe->setEspecieTitulo(''); + $detalhe->setPrefixoAgenciaDVCobranca(''); + $detalhe->setEspecieTitulo('12'); $detalhe->setAceiteTitulo('N'); $detalhe->setDtEmissaoTitulo((new \DateTime($documento['dataEmissao']))->format('dmy')); $detalhe->setInstrucaoCodificada1('00'); - $detalhe->setInstrucaoCodificada2('00'); + $detalhe->setInstrucaoCodificada2(''); $detalhe->setJurisMoraDia(''); $detalhe->setDtLimiteConcessaoDesconto(''); $detalhe->setVlDesconto(''); @@ -106,13 +100,14 @@ protected function detalhes() $detalhe->setCepSacado($documento['pessoa']['cep']); $detalhe->setCidadeSacado($this->removerAcentos($documento['pessoa']['municipio']['nome'])); $detalhe->setUfCidadeSacado($this->removerAcentos($documento['pessoa']['municipio']['uf']['sigla'])); - $detalhe->setObsMensagemSacadorAvalista(''); /***/ - $detalhe->setNumDiasProtesto(''); /***/ + $detalhe->setObsMensagemSacadorAvalista(''); + $detalhe->setNumDiasProtesto(''); $detalhe->setComplementoRegistroBranco3(''); $arrDetalhes[] = $detalhe; } $this->detalhes = $arrDetalhes; + return $this; } @@ -122,10 +117,10 @@ protected function detalhes() */ protected function header() { - $seqConvenio = $this->getSeqConvenio($this->detalhesBoleto['convenios']); - $convenioBancario = $this->detalhesBoleto['convenios'][$seqConvenio]; + $seqConvenio = $this->getSeqConvenio($this->detalhesBoleto['convenios']); + $convenioBancario = $this->detalhesBoleto['convenios'][$seqConvenio]; - $header = new Header(); + $header = new Header(); $header->setIdRegistroHeader($this->dadosBoleto['identificacao_registro']); $header->setTipoOperacao($this->dadosBoleto['identificacao_operacao']); @@ -182,27 +177,28 @@ public function montarArquivo(string $path) throw new \Exception("Não foi possivel abrir o arquivo para criar a remessa {$fullpath}"); } - $header = $this->header; + $header = $this->header; $transacoes = $this->detalhes; - $trailler = $this->trailler; + $trailler = $this->trailler; - $stringHeader = $header->getHeaderToString(); + $stringHeader = mb_convert_encoding($header->getHeaderToString() . "\n", 'ISO-8859-1', 'UTF-8'); - fwrite($file, $stringHeader . "\n"); + fwrite($file, $stringHeader); $sequencialRegistro = 2; foreach ($transacoes as $transacao) { $transacao->setSequencialRegistro($sequencialRegistro++); $stringTransacao = $transacao->getDetalhesToString(); - fwrite($file, $stringTransacao . "\n"); + fwrite($file, mb_convert_encoding($stringTransacao . "\n", 'ISO-8859-1', 'UTF-8')); } $trailler->setSequencialRegistro($sequencialRegistro); $stringTrailler = $trailler->getTraillerToString(); - fwrite($file, $stringTrailler . "\n"); + fwrite($file, mb_convert_encoding($stringTrailler . "\n", 'ISO-8859-1', 'UTF-8')); fclose($file); + return $fullpath; } } diff --git a/src/Builder/Builder.php b/src/Builder/Builder.php index b6f12cb..4205a07 100755 --- a/src/Builder/Builder.php +++ b/src/Builder/Builder.php @@ -21,6 +21,7 @@ class Builder public function __construct(int $bancoIdentificador) { $fileValidator = dirname(__FILE__) . self::CONFIG_FILE; + if (!file_exists($fileValidator)) { throw new \Exception("Arquivo de configuração nao localizado: {$fileValidator}"); } @@ -35,6 +36,7 @@ public function __construct(int $bancoIdentificador) private function carregarDadosBoletoBanco(int $bancoIdentificador) { $fileValidator = dirname(__FILE__) . self::CONFIG_FILE; + switch ($bancoIdentificador) { case BancoEnum::BRADESCO: $this->dadosBoleto = Yaml::parseFile($fileValidator)['cnab400']['bradesco']; @@ -63,7 +65,7 @@ private function carregarDadosBoletoBanco(int $bancoIdentificador) */ protected function concatenarDados() { - $args = func_get_args(); + $args = func_get_args(); $output = ''; foreach ($args as $dado) { @@ -80,7 +82,8 @@ protected function concatenarDados() protected function parseInteger($string) { $retorno = preg_replace("/[^0-9]/", '', trim($string)); - return (int) $retorno; + + return (int)$retorno; } /** @@ -114,6 +117,4 @@ protected function getSeqConvenio($arrConvenio) return $key; }; } - - } diff --git a/src/Cnab/Cnab400/BB/Detalhe.php b/src/Cnab/Cnab400/BB/Detalhe.php index e8de466..90a1563 100755 --- a/src/Cnab/Cnab400/BB/Detalhe.php +++ b/src/Cnab/Cnab400/BB/Detalhe.php @@ -6,7 +6,6 @@ class Detalhe { - private $identificacaoRegistro = '7'; private $numeroPrestacao = '00'; private $grupoValor = '00'; @@ -62,7 +61,7 @@ class Detalhe /** * @return string */ - public function getIdentificacaoRegistro(): string + public function getIdentificacaoRegistro() { return str_pad( substr($this->identificacaoRegistro, 0, 1), @@ -83,7 +82,7 @@ public function setIdentificacaoRegistro(string $identificacaoRegistro) /** * @return string */ - public function getNumeroPrestacao(): string + public function getNumeroPrestacao() { return $this->numeroPrestacao; } @@ -99,7 +98,7 @@ public function setNumeroPrestacao(string $numeroPrestacao) /** * @return string */ - public function getGrupoValor(): string + public function getGrupoValor() { return $this->grupoValor; } @@ -115,7 +114,7 @@ public function setGrupoValor(string $grupoValor) /** * @return string */ - public function getNumBanco(): string + public function getNumBanco() { return $this->numBanco; } @@ -131,7 +130,7 @@ public function setNumBanco(string $numBanco) /** * @return string */ - public function getPrefixoAgenciaCobradora(): string + public function getPrefixoAgenciaCobradora() { return $this->prefixoAgenciaCobradora; } @@ -147,7 +146,7 @@ public function setPrefixoAgenciaCobradora(string $prefixoAgenciaCobradora) /** * @return string */ - public function getPrefixoAgenciaDVCobranca(): string + public function getPrefixoAgenciaDVCobranca() { return $this->prefixoAgenciaDVCobranca; } @@ -163,7 +162,7 @@ public function setPrefixoAgenciaDVCobranca(string $prefixoAgenciaDVCobranca) /** * @return string */ - public function getComplementoRegistroBranco1(): string + public function getComplementoRegistroBranco1() { return $this->complementoRegistroBranco1; } @@ -179,7 +178,7 @@ public function setComplementoRegistroBranco1(string $complementoRegistroBranco1 /** * @return string */ - public function getComplementoRegistroBranco2(): string + public function getComplementoRegistroBranco2() { return $this->complementoRegistroBranco2; } @@ -195,7 +194,7 @@ public function setComplementoRegistroBranco2(string $complementoRegistroBranco2 /** * @return string */ - public function getComplementoRegistroBranco3(): string + public function getComplementoRegistroBranco3() { return $this->complementoRegistroBranco3; } diff --git a/src/Cnab/Cnab400/BB/Header.php b/src/Cnab/Cnab400/BB/Header.php index 38dfda3..4f5e1e8 100755 --- a/src/Cnab/Cnab400/BB/Header.php +++ b/src/Cnab/Cnab400/BB/Header.php @@ -4,7 +4,6 @@ class Header { - private $idRegistroHeader; private $tipoOperacao; private $tipoOperacaoExtenso; @@ -285,7 +284,7 @@ public function setNomeCedente($nomeCedente) /** * @return string */ - public function getIdBanco(): string + public function getIdBanco() { return $this->idBanco; } @@ -294,7 +293,7 @@ public function getIdBanco(): string * @param string $idBanco * @return Header */ - public function setIdBanco(string $idBanco): Header + public function setIdBanco(string $idBanco) { $this->idBanco = str_pad( mb_substr($idBanco, 0, 18), @@ -473,7 +472,6 @@ public function getHeaderToString() . $this->getComplementoRegistroBranco2() . $this->getNumeroConvenioLider() . $this->getComplementoRegistroBranco3() - . $this->getSequencialRegistro() - ; + . $this->getSequencialRegistro(); } } diff --git a/src/Cnab/Cnab400/BB/Trailler.php b/src/Cnab/Cnab400/BB/Trailler.php index 8f48331..fa80320 100755 --- a/src/Cnab/Cnab400/BB/Trailler.php +++ b/src/Cnab/Cnab400/BB/Trailler.php @@ -4,14 +4,13 @@ class Trailler { - private $identificacaoRegistro = '9'; private $sequencialRegistro = '0'; /** * @return string */ - public function getSequencialRegistro(): string + public function getSequencialRegistro() { return $this->sequencialRegistro; } diff --git a/src/RemessaFactory.php b/src/RemessaFactory.php index 961a695..af9fada 100755 --- a/src/RemessaFactory.php +++ b/src/RemessaFactory.php @@ -1,6 +1,5 @@ configure($bancoIdentificador, $dadosArrecadacao) ->build() ->createFile() - ->remessaFile - ; + ->remessaFile; } catch (\Exception $e) { var_dump($e); exit; @@ -69,15 +66,16 @@ private function path(string $path) ); } $this->path = rtrim($path, "/"); + return $this; } /** * define a classe que gera o arquivo + * @param int $bancoIdentificador + * @param array $dadosArrecadacao + * @return $this * @throws \Exception - * @param int $bancoIdentificador - * @param array $dadosArrecadacao - * @return RemessaFactory */ private function configure(int $bancoIdentificador, array $dadosArrecadacao) { @@ -103,6 +101,7 @@ private function configure(int $bancoIdentificador, array $dadosArrecadacao) ); break; } + return $this; } @@ -128,12 +127,16 @@ private function build() private function createFile() { $this->remessaFile = $this->cnabBuilder->montarArquivo($this->path); + return $this; } /** * Validar dados do boleto - * @return RemessaFactory + * @param $identificadorBanco + * @param $dadosArrecadacao + * @return $this + * @throws \Exception */ private function validarDadosBoleto($identificadorBanco, $dadosArrecadacao) { diff --git a/src/Validator/Validator.php b/src/Validator/Validator.php index b4db90b..e2cb0a9 100644 --- a/src/Validator/Validator.php +++ b/src/Validator/Validator.php @@ -17,7 +17,6 @@ class Validator */ private $dataValidator; - /** * @var array */ @@ -30,7 +29,8 @@ class Validator public function __construct(int $bancoIdentificador) { $fileValidator = dirname(__FILE__) . self::CONFIG_FILE; - if (!file_exists($fileValidator )) { + + if (!file_exists($fileValidator)) { throw new \Exception("Arquivo de configuração nao localizado: " . $fileValidator); } @@ -46,6 +46,7 @@ public function __construct(int $bancoIdentificador) private function loadDataValidator(int $bancoIdentificador) { $fileValidator = dirname(__FILE__) . self::CONFIG_FILE; + switch ($bancoIdentificador) { case BancoEnum::BRADESCO: $this->dataValidator = Yaml::parseFile($fileValidator)['bradesco']; @@ -89,7 +90,8 @@ public function run($data) */ private function compareArray($dataValidator, $data, $emptyFields = null) { - $emptyFields = $emptyFields ?? []; + $emptyFields = $emptyFields ?: []; + foreach (array_keys($dataValidator) as $value) { if (is_array($dataValidator[$value])) { $controller = ($value == "SEQ") ? key($data) : $value; diff --git a/src/config/validator.yml b/src/config/validator.yml index 05d3ed5..ba1962e 100644 --- a/src/config/validator.yml +++ b/src/config/validator.yml @@ -73,6 +73,7 @@ bb: cedente: convenio: conta: + variacaoCarteira: orgao: pessoa: cnpj: @@ -86,6 +87,8 @@ bb: nossoNumero: numeroDocumento: valor: + desconto: + correcaoMonetaria: pessoa: cpfCnpj: nome: