Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adicionei algumas melhorias... #101

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
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
11 changes: 9 additions & 2 deletions src/Cnab/Factory.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public function createRemessa($codigo_banco, $formato = 'cnab400', $layoutVersao
*
* @param string $filename
*
* @return \Cnab\Remessa\IArquivo
* @return \Cnab\Retorno\IArquivo
*/
public function createRetorno($filename)
{
Expand All @@ -70,7 +70,12 @@ public function createRetorno($filename)
throw new \Exception('Formato do arquivo não identificado');
}

if ($format['tipo'] != 'retorno') {
if (
$format['tipo'] != 'retorno' &&
$format['tipo'] != 'remessa_processada' &&
$format['tipo'] != 'remessa_processada_parcial' &&
$format['tipo'] != 'remessa_rejeitada') {

throw new \Exception('Este não é um arquivo de retorno');
}

Expand All @@ -84,6 +89,8 @@ public function createRetorno($filename)

// por enquanto só suporta o Cnab400



if ($format['bytes'] == 400) {
return new Retorno\Cnab400\Arquivo($format['banco'], $filename, $format['layout_versao']);
} elseif ($format['bytes'] == 240) {
Expand Down
16 changes: 15 additions & 1 deletion src/Cnab/Format/Identifier.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,14 @@ public function identifyFile($filename)

$lines = \explode("\n", $contents);



if (\count($lines) < 2) {
return;
}



$length = 0;
foreach ($lines as $line) {
$length = \max($length, strlen($line));
Expand All @@ -37,6 +41,8 @@ public function identifyFile($filename)
return;
}



$layout_versao = null;

if ($bytes == 400) {
Expand All @@ -54,7 +60,9 @@ public function identifyFile($filename)
$codigo_tipo = \substr($lines[0], 142, 1);
$tipo = null;

// Pega a Versao do Layout da CEF


// Pega a Versao do Layout da CEF
if (\Cnab\Banco::CEF == $codigo_banco) {
$layout_versao = \substr($lines[0], 163, 3);

Expand All @@ -71,6 +79,12 @@ public function identifyFile($filename)
$tipo = 'remessa';
} elseif (\strtoupper($codigo_tipo) == '2') {
$tipo = 'retorno';
} elseif (\strtoupper($codigo_tipo) == '3') {
$tipo = 'remessa_processada';
} elseif (\strtoupper($codigo_tipo) == '4') {
$tipo = 'remessa_processada_parcial';
} elseif (\strtoupper($codigo_tipo) == '5') {
$tipo = 'remessa_rejeitada';
}
} else {
return;
Expand Down
2 changes: 1 addition & 1 deletion src/Cnab/Remessa/Cnab240/Arquivo.php
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ public function insertDetalhe(array $boleto, $tipo = 'remessa')
$detalhe->segmento_q->codigo_banco = $this->headerArquivo->codigo_banco;
$detalhe->segmento_q->lote_servico = $this->headerLote->lote_servico;
$detalhe->segmento_q->codigo_ocorrencia = $detalhe->segmento_p->codigo_ocorrencia;
if (@$boleto['sacado_cnpj']) {
if ( @$boleto['sacado_tipo'] == 'cnpj' ) {
$detalhe->segmento_q->sacado_codigo_inscricao = '2';
$detalhe->segmento_q->sacado_numero_inscricao = $this->prepareText($boleto['sacado_cnpj'], '.-/');
$detalhe->segmento_q->nome = $this->prepareText($boleto['sacado_razao_social']);
Expand Down
26 changes: 24 additions & 2 deletions src/Cnab/Retorno/Cnab240/Arquivo.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@

namespace Cnab\Retorno\Cnab240;

use Cnab\Retorno\IHeaderArquivo;
use Cnab\Retorno\Linha;
use DateTime;

class Arquivo implements \Cnab\Retorno\IArquivo
{
private $content;

public $header = false;
public $header = null;
public $lotes = array();
public $linhas = array();
public $trailer = false;
Expand Down Expand Up @@ -115,6 +117,16 @@ public function getConta()
return $this->header->getConta();
}

/**
* Retorna o Header do arquivo re retorno
*
* @return IHeaderArquivo
*/
public function getHeader()
{
return $this->header;
}

/**
* Retorna o digito de auto conferencia da conta.
*
Expand All @@ -132,7 +144,17 @@ public function getContaDac()
*/
public function getCodigoBanco()
{
return $this->header->codigo_banco;
return $this->codigo_banco;
}

/**
* Retorna o Código da Remessa ou Retorno
*
* @return string
*/
public function getCodigoRemessaRetorno()
{
return $this->header->codigo_remessa_retorno;
}

/**
Expand Down
53 changes: 44 additions & 9 deletions src/Cnab/Retorno/Cnab240/Detalhe.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,21 @@ public function getCodigo()
return (int) $this->segmento_t->codigo_movimento;
}

/**
* Código adotado pela FEBRABAN para identificar o tipo de registro:
* 0 = Header de Arquivo
* 1 = Header de Lote
* 3 = Detalhe
* 5 = Trailer de Lote
* 9 = Trailer de Arquivo
*
* @return int
*/
public function getTipoRegistro()
{
return (int) $this->segmento_t->tipo_registro;
}

/**
* Retorna o valor recebido em conta.
*
Expand Down Expand Up @@ -373,27 +388,47 @@ public function getCodigoNome()
}

/**
* Retorna o código de liquidação, normalmente usado para
* Retorna o código de liquidação ou da baixa, normalmente usado para
* saber onde o cliente efetuou o pagamento.
*
* @return string
* @return int
*/
public function getCodigoLiquidacao()
public function getCodigoLiquidacaoOuBaixa()
{
// @TODO: Resgatar o código de liquidação
return;
return (int) substr($this->segmento_t->identificacao_rejeicao,0,2);
}

/**
* Retorna a descrição do código de liquidação, normalmente usado para
* Retorna a descrição do código de liquidação ou da baixa, normalmente usado para
* saber onde o cliente efetuou o pagamento.
*
* @return string
*/
public function getDescricaoLiquidacao()
public function getDescricaoLiquidacaoOuBaixa()
{
// @TODO: Resgator descrição do código de liquidação
return;
$codigo = (int) $this->getCodigoLiquidacaoOuBaixa();

$table = array(
2 => 'Casa Lotérica',
3 => 'Agências CAIXA',
4 => 'Compensação Eletrônica',
5 => 'Compoensação Convencional',
6 => 'Internet Banking',
7 => 'Correspondente Bancário',
8 => 'Em Cartório',
9 => 'Comandada Banco',
10 => 'Comandada Cliente via Arquivo',
11 => 'Comandada Cliente On-Line',
12 => 'Decurso Prazo - Cliente',
13 => 'Decurso Prazo - Banco',
14 => 'Protestado'
);

if (array_key_exists($codigo, $table)) {
return $table[$codigo];
} else {
return 'Desconhecido';
}
}

public function dump()
Expand Down
20 changes: 19 additions & 1 deletion src/Cnab/Retorno/Cnab240/HeaderArquivo.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

namespace Cnab\Retorno\Cnab240;

class HeaderArquivo extends \Cnab\Format\Linha
use Cnab\Retorno\IHeaderArquivo;

class HeaderArquivo extends \Cnab\Format\Linha implements IHeaderArquivo
{

public function __construct(\Cnab\Retorno\IArquivo $arquivo)
{
$yamlLoad = new \Cnab\Format\YamlLoad($arquivo->codigo_banco, $arquivo->layoutVersao);
Expand Down Expand Up @@ -36,4 +39,19 @@ public function getCodigoConvenio()
return;
}
}

public function getCodigoRetorno()
{
if ($this->existField('codigo_remessa_retorno')) {
return $this->codigo_remessa_retorno;
} else {
return;
}
}

public function getCodigoBanco()
{
return $this->codigo_banco;
}

}
13 changes: 12 additions & 1 deletion src/Cnab/Retorno/Cnab400/Arquivo.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Cnab\Retorno\Cnab400;

use Cnab\Retorno\IHeaderArquivo;
use Cnab\Retorno\Linha;

class Arquivo implements \Cnab\Retorno\IArquivo
Expand Down Expand Up @@ -77,6 +78,16 @@ public function listDetalhes()
return $this->detalhes;
}

/**
* Retorna o Header do arquivo re retorno
*
* @return IHeaderArquivo
*/
public function getHeader()
{
return $this->header;
}

/**
* Retorna o numero da conta.
*
Expand Down Expand Up @@ -114,7 +125,7 @@ public function getContaDac()
*/
public function getCodigoBanco()
{
return $this->header->codigo_do_banco;
return $this->codigo_banco;
}

/**
Expand Down
20 changes: 19 additions & 1 deletion src/Cnab/Retorno/Cnab400/Header.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

namespace Cnab\Retorno\Cnab400;

class Header extends \Cnab\Format\Linha
use \Cnab\Retorno\IHeaderArquivo;

class Header extends \Cnab\Format\Linha implements IHeaderArquivo
{
private $_codigo_banco = null;

Expand Down Expand Up @@ -41,4 +43,20 @@ public function getCodigoCedente()
return $this->codigo_cedente;
}
}

public function getCodigoRetorno()
{
if ($this->existField('codigo_de_retorno')) {
return $this->codigo_de_retorno;
} else {
return;
}
}

public function getCodigoBanco()
{
//return $this->_codigo_banco;
return $this->codigo_do_banco;
}

}
7 changes: 7 additions & 0 deletions src/Cnab/Retorno/IArquivo.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,11 @@ public function getDataGeracao();
* @return \DateTime
*/
public function getDataCredito();

/**
* Retorna o Header do arquivo re retorno
*
* @return IHeaderArquivo
*/
public function getHeader();
}
4 changes: 2 additions & 2 deletions src/Cnab/Retorno/IDetalhe.php
Original file line number Diff line number Diff line change
Expand Up @@ -164,15 +164,15 @@ public function isBaixaRejeitada();
*
* @return string
*/
public function getCodigoLiquidacao();
public function getCodigoLiquidacaoOuBaixa();

/**
* Retorna a descrição do código de liquidação, normalmente usado para
* saber onde o cliente efetuou o pagamento.
*
* @return string
*/
public function getDescricaoLiquidacao();
public function getDescricaoLiquidacaoOuBaixa();

/**
* Retorna de o boleto foi pago através do Débito Direto Autorizado.
Expand Down
16 changes: 16 additions & 0 deletions src/Cnab/Retorno/IHeaderArquivo.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?php

namespace Cnab\Retorno;

interface IHeaderArquivo
{

public function getContaDac();

public function getConta();

public function getCodigoRetorno();

public function getCodigoBanco();

}
2 changes: 2 additions & 0 deletions tests/Cnab/Retorno/Cnab240/ArquivoTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ public function testArquivoCaixaSigcbPodeSerLido()
$detalhe = $arquivo->listDetalhes();
$detalhe = $detalhe[0];

$this->assertEquals(3, $detalhe->getTipoRegistro());
$this->assertEquals(6, $detalhe->getCodigo());
$this->assertEquals(80.00, $detalhe->getValorRecebido());
$this->assertEquals(80.00, $detalhe->getValorTitulo());
Expand All @@ -81,6 +82,7 @@ public function testArquivoCaixaSigcbPodeSerLido()
$this->assertEquals(null, $detalhe->getNumeroDocumento());
$this->assertEquals(null, $detalhe->getCarteira());
$this->assertEquals('0', $detalhe->getAgencia());

$this->assertEquals(11136997, $detalhe->getNossoNumero());
$this->assertEquals(new \DateTime('2014-01-02 00:00:00'), $detalhe->getDataVencimento());
$this->assertEquals(new \DateTime('2014-01-07 00:00:00'), $detalhe->getDataCredito());
Expand Down