✏️ 正在编辑: ArquivoRemessa.php
路径:
/srv/systems_dir/contemax/library/Core/ArquivoRemessa.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_ArquivoRemessa { protected $headerArquivo = array( '01.0' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '104', ), '02.0' => array( 'digitos' => 4, 'formato' => 'N', 'default' => '0000', ), '03.0' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '0', // Tipo registro ), '04.0' => array( 'digitos' => 9, 'formato' => 'A', 'default' => ' ', ), '05.0' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '06.0' => array( 'digitos' => 14, 'formato' => 'N', 'default' => '', ), '07.0' => array( 'digitos' => 20, 'formato' => 'N', 'default' => '0', ), '08.0' => array( 'digitos' => 5, 'formato' => 'N', 'default' => '', ), '09.0' => array( 'digitos' => 1, 'formato' => 'A', 'default' => '', ), '10.0' => array( 'digitos' => 6, 'formato' => 'N', 'default' => '', ), '11.0' => array( 'digitos' => 7, 'formato' => 'N', 'default' => '0', ), '12.0' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '0', ), '13.0' => array( 'digitos' => 30, 'formato' => 'A', 'default' => '', ), '14.0' => array( 'digitos' => 30, 'formato' => 'A', 'default' => '', ), '15.0' => array( 'digitos' => 10, 'formato' => 'A', 'default' => ' ', ), '16.0' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '17.0' => array( 'digitos' => 8, 'formato' => 'N', 'default' => '', ), '18.0' => array( 'digitos' => 6, 'formato' => 'N', 'default' => '', ), '19.0' => array( 'digitos' => 6, 'formato' => 'N', 'default' => '', ), '20.0' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '050', ), '21.0' => array( 'digitos' => 5, 'formato' => 'N', 'default' => '0', ), '22.0' => array( 'digitos' => 20, 'formato' => 'A', 'default' => '', ), '23.0' => array( 'digitos' => 20, 'formato' => 'A', 'default' => '', ), '24.0' => array( 'digitos' => 4, 'formato' => 'A', 'default' => '', ), '25.0' => array( 'digitos' => 25, 'formato' => 'A', 'default' => ' ', ), ); protected $trailerArquivo = array( '01.9' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '104', ), '02.9' => array( 'digitos' => 4, 'formato' => 'N', 'default' => '9999', ), '03.9' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '9', // Tipo registro ), '04.9' => array( 'digitos' => 9, 'formato' => 'A', 'default' => ' ', ), '05.9' => array( 'digitos' => 6, 'formato' => 'N', 'default' => '', ), '06.9' => array( 'digitos' => 6, 'formato' => 'N', 'default' => '', ), '07.9' => array( 'digitos' => 6, 'formato' => 'A', 'default' => ' ', ), '08.9' => array( 'digitos' => 205, 'formato' => 'A', 'default' => ' ', ), ); protected $headerLote = array( '01.1' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '104', ), '02.1' => array( 'digitos' => 4, 'formato' => 'N', 'default' => '', ), '03.1' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '1', // Tipo registro ), '04.1' => array( 'digitos' => 1, 'formato' => 'A', 'default' => '', ), '05.1' => array( 'digitos' => 2, 'formato' => 'N', 'default' => '', ), '06.1' => array( 'digitos' => 2, 'formato' => 'N', 'default' => '00', ), '07.1' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '030', ), '08.1' => array( 'digitos' => 1, 'formato' => 'A', 'default' => ' ', ), '09.1' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '10.1' => array( 'digitos' => 15, 'formato' => 'N', 'default' => '', ), '11.1' => array( 'digitos' => 6, 'formato' => 'N', 'default' => '', ), '12.1' => array( 'digitos' => 14, 'formato' => 'N', 'default' => '0', ), '13.1' => array( 'digitos' => 5, 'formato' => 'N', 'default' => '', ), '14.1' => array( 'digitos' => 1, 'formato' => 'A', 'default' => '', ), '15.1' => array( 'digitos' => 6, 'formato' => 'N', 'default' => '', ), '16.1' => array( 'digitos' => 7, 'formato' => 'N', 'default' => '', ), '17.1' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '0', ), '18.1' => array( 'digitos' => 30, 'formato' => 'A', 'default' => '', ), '19.1' => array( 'digitos' => 40, 'formato' => 'A', 'default' => '', ), '20.1' => array( 'digitos' => 40, 'formato' => 'A', 'default' => '', ), '21.1' => array( 'digitos' => 8, 'formato' => 'N', 'default' => '', ), '22.1' => array( 'digitos' => 8, 'formato' => 'N', 'default' => '', ), '23.1' => array( 'digitos' => 8, 'formato' => 'N', 'default' => '', ), '24.1' => array( 'digitos' => 33, 'formato' => 'A', 'default' => ' ', ), ); /** * Registro Detalhe - Segmento P (Obrigatório - Remessa) * * @var array */ protected $segmentoP = array( '01.3P' => array( //Código do Banco na Compensação 'digitos' => 3, 'formato' => 'N', 'default' => '104', ), '02.3P' => array( //Lote de Serviço 'digitos' => 4, 'formato' => 'N', 'default' => '', ), '03.3P' => array( //Tipo de Registro 'digitos' => 1, 'formato' => 'N', 'default' => '3', ), '04.3P' => array( //No Sequencial do Registro no Lote 'digitos' => 5, 'formato' => 'N', 'default' => '', ), '05.3P' => array( //Cód. Segmento do Registro Detalhe 'digitos' => 1, 'formato' => 'A', 'default' => 'P', ), '06.3P' => array( //Uso Exclusivo FEBRABAN/CNAB 'digitos' => 1, 'formato' => 'A', 'default' => ' ', ), '07.3P' => array( //Código de Movimento Remessa 'digitos' => 2, 'formato' => 'N', 'default' => '', ), '08.3P' => array( //Agência Mantenedora da Conta 'digitos' => 5, 'formato' => 'N', 'default' => '', ), '09.3P' => array( //Dígito Verificador da Agência 'digitos' => 1, 'formato' => 'A', 'default' => '', ), '10.3P' => array( //Código do Convênio no Banco 'digitos' => 6, 'formato' => 'N', 'default' => '', ), '11.3P' => array( //Uso Exclusivo da CAIXA 'digitos' => 11, 'formato' => 'N', 'default' => '0', ), '12.3P' => array( //Modalidade da Carteira 'digitos' => 2, 'formato' => 'N', 'default' => '', ), '13.3P' => array( //Identificação do Título no Banco 'digitos' => 15, 'formato' => 'N', 'default' => '', ), '14.3P' => array( //Código da Carteira 'digitos' => 1, //1 = Cobrança Simples 'formato' => 'N', //3 = Cobrança Caucionada 'default' => '', //4 = Cobrança Descontada ), '15.3P' => array( //Forma de Cadastr. do Título no Banco 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '16.3P' => array( //Tipo de Documento 'digitos' => 1, 'formato' => 'A', 'default' => '2', ), '17.3P' => array( //Identificação da Emissão do Bloqueto 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '18.3P' => array( //Identificação da Entrega do Bloqueto 'digitos' => 1, 'formato' => 'A', 'default' => '', ), '19.3P' => array( //Número do Documento de Cobrança 'digitos' => 11, 'formato' => 'A', 'default' => '', ), '19.3P2' => array( //Uso Exclusivo CAIXA 'digitos' => 4, 'formato' => 'A', 'default' => ' ', ), '20.3P' => array( //Data de Vencimento do Título 'digitos' => 8, 'formato' => 'N', 'default' => '', ), '21.3P' => array( //Valor Nominal do Título 'digitos' => 13, 'decimais' => 2, 'formato' => 'N', 'default' => '2', ), '22.3P' => array( //Agência Encarregada da Cobrança 'digitos' => 5, 'formato' => 'N', 'default' => '', ), '23.3P' => array( //Dígito Verificador da Agência 'digitos' => 1, 'formato' => 'A', 'default' => '', ), '24.3P' => array( //Espécie do Título 'digitos' => 2, 'formato' => 'N', 'default' => '', ), '25.3P' => array( //Identific. de Título Aceito/Não Aceito 'digitos' => 1, 'formato' => 'A', 'default' => '', ), '26.3P' => array( //Data da Emissão do Título 'digitos' => 8, 'formato' => 'N', 'default' => '', ), '27.3P' => array( //Código do Juros de Mora 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '28.3P' => array( //Data do Juros de Mora 'digitos' => 8, 'formato' => 'N', 'default' => '', ), '29.3P' => array( //Juros de Mora por Dia/Taxa 'digitos' => 13, 'decimais' => 2, 'formato' => 'N', 'default' => '', ), '30.3P' => array( //Código do Desconto 1 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '31.3P' => array( //Data do Desconto 1 'digitos' => 8, 'formato' => 'N', 'default' => '', ), '32.3P' => array( //Valor/Percentual a ser Concedido 'digitos' => 13, 'decimais' => 2, 'formato' => 'N', 'default' => '', ), '33.3P' => array( //Valor do IOF a ser Recolhido 'digitos' => 13, 'decimais' => 2, 'formato' => 'N', 'default' => '', ), '34.3P' => array( //Valor do Abatimento 'digitos' => 13, 'decimais' => 2, 'formato' => 'N', 'default' => '', ), '35.3P' => array( //Identificação do Título na Empresa 'digitos' => 25, 'formato' => 'A', 'default' => '', ), '36.3P' => array( //Código para Protesto 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '37.3P' => array( //Número de Dias para Protesto 'digitos' => 2, 'formato' => 'N', 'default' => '', ), '38.3P' => array( //Código para Baixa/Devolução 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '39.3P' => array( //Número de Dias para Baixa/Devolução 'digitos' => 3, 'formato' => 'A', 'default' => '', ), '40.3P' => array( //Código da Moeda 'digitos' => 2, 'formato' => 'N', 'default' => '', ), '41.3P' => array( //Uso Exclusivo CAIXA 'digitos' => 10, 'formato' => 'N', 'default' => '0', ), '42.3P' => array( //Uso Exclusivo FEBRABAN/CNAB 'digitos' => 1, 'formato' => 'A', 'default' => ' ', ), ); /** * Registro Detalhe - Segmento Q (Obrigatório - Remessa) * * @var array */ protected $segmentoQ = array( '01.3Q' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '104', ), '02.3Q' => array( 'digitos' => 4, 'formato' => 'N', 'default' => '', ), '03.3Q' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '3', ), '04.3Q' => array( //No Sequencial do Registro no Lote 'digitos' => 5, 'formato' => 'N', 'default' => '', ), '05.3Q' => array( 'digitos' => 1, 'formato' => 'A', 'default' => 'Q', ), '06.3Q' => array( 'digitos' => 1, 'formato' => 'A', 'default' => ' ', ), '07.3Q' => array( 'digitos' => 2, 'formato' => 'N', 'default' => '', ), '08.3Q' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '09.3Q' => array( 'digitos' => 15, 'formato' => 'N', 'default' => '', ), '10.3Q' => array( 'digitos' => 40, 'formato' => 'A', 'default' => '', ), '11.3Q' => array( 'digitos' => 40, 'formato' => 'A', 'default' => '', ), '12.3Q' => array( 'digitos' => 15, 'formato' => 'A', 'default' => '', ), '13.3Q' => array( 'digitos' => 5, 'formato' => 'N', 'default' => '', ), '14.3Q' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '', ), '15.3Q' => array( 'digitos' => 15, 'formato' => 'A', 'default' => '', ), '16.3Q' => array( 'digitos' => 2, 'formato' => 'A', 'default' => '', ), '17.3Q' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '18.3Q' => array( 'digitos' => 15, 'formato' => 'N', 'default' => '', ), '19.3Q' => array( 'digitos' => 40, 'formato' => 'A', 'default' => '', ), '20.3Q' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '', ), '21.3Q' => array( 'digitos' => 20, 'formato' => 'A', 'default' => '', ), '22.3Q' => array( 'digitos' => 8, 'formato' => 'A', 'default' => ' ', ), ); /** * Registro Detalhe - Segmento Q (Obrigatório - Remessa) * Código de Movimento: 36, 37, 38 (Banco de Sacados) * * @var array */ protected $segmentoQ2 = array( '17.3Q' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '', ), '18.3Q' => array( 'digitos' => 20, 'formato' => 'A', 'default' => '', ), '19.3Q' => array( 'digitos' => 15, 'formato' => 'A', 'default' => '', ), '20.3Q' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '21.3Q' => array( 'digitos' => 13, 'decimais' => 2, 'formato' => 'N', 'default' => '', ), '22.3Q' => array( 'digitos' => 2, 'formato' => 'A', 'default' => ' ', ), '23.3Q' => array( 'digitos' => 31, 'formato' => 'A', 'default' => ' ', ) ); /** * Registro Detalhe - Segmento R (Opcional - Remessa) * * @var array */ protected $segmentoR = array( '01.3R' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '104', ), '02.3R' => array( 'digitos' => 4, 'formato' => 'N', 'default' => '', ), '03.3R' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '3', ), '04.3R' => array( 'digitos' => 5, 'formato' => 'N', 'default' => '', ), '05.3R' => array( 'digitos' => 1, 'formato' => 'A', 'default' => 'R', ), '06.3R' => array( 'digitos' => 1, 'formato' => 'A', 'default' => ' ', ), '07.3R' => array( 'digitos' => 2, 'formato' => 'N', 'default' => '', ), '08.3R' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '09.3R' => array( 'digitos' => 8, 'formato' => 'N', 'default' => '', ), '10.3R' => array( 'digitos' => 13, 'decimais' => 2, 'formato' => 'N', 'default' => '', ), '11.3R' => array( 'digitos' => 42, 'formato' => 'N', 'default' => '', ), '12.3R' => array( 'digitos' => 8, 'formato' => 'N', 'default' => '', ), '13.3R' => array( 'digitos' => 13, 'decimais' => 2, 'formato' => 'N', 'default' => '', ), '14.3R' => array( 'digitos' => 1, 'formato' => 'A', 'default' => '', ), '15.3R' => array( 'digitos' => 8, 'formato' => 'N', 'default' => '', ), '16.3R' => array( 'digitos' => 13, 'decimais' => 2, 'formato' => 'N', 'default' => '', ), '17.3R' => array( 'digitos' => 10, 'formato' => 'A', 'default' => '', ), '18.3R' => array( 'digitos' => 40, 'formato' => 'A', 'default' => '', ), '19.3R' => array( 'digitos' => 40, 'formato' => 'A', 'default' => '', ), '20.3R' => array( 'digitos' => 50, 'formato' => 'A', 'default' => '', ), '21.3R' => array( 'digitos' => 11, 'formato' => 'A', 'default' => ' ', ), ); /** * Registro Detalhe - Segmento S (Opcional - Remessa) * * @var array */ protected $segmentoS = array( '01.3S' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '104', ), '02.3S' => array( 'digitos' => 4, 'formato' => 'N', 'default' => '', ), '03.3S' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '3', ), '04.3S' => array( 'digitos' => 5, 'formato' => 'N', 'default' => '', ), '05.3S' => array( 'digitos' => 1, 'formato' => 'A', 'default' => 'S', ), '06.3S' => array( 'digitos' => 1, 'formato' => 'A', 'default' => ' ', ), '07.3S' => array( 'digitos' => 2, 'formato' => 'N', 'default' => '', ), ); /** * Para Tipo de Impressão 1 ou 2: * * @var array */ protected $segmentoSTipo1e2 = array( '08.3S' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '09.3S' => array( 'digitos' => 2, 'formato' => 'N', 'default' => '0', ), '10.3S' => array( 'digitos' => 140, 'formato' => 'A', 'default' => '', ), '11.3S' => array( 'digitos' => 2, 'formato' => 'N', 'default' => '0', ), '12.3S' => array( 'digitos' => 78, 'formato' => 'A', 'default' => ' ', ), ); /** * Para Tipo de Impressão 3 (Mensagens a serem impressas na parte Recibo do Sacado do Bloqueto): * * @var array */ protected $segmentoSTipo3 = array( '08.3S' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '09.3S' => array( 'digitos' => 40, 'formato' => 'A', 'default' => '', ), '10.3S' => array( 'digitos' => 40, 'formato' => 'A', 'default' => '', ), '11.3S' => array( 'digitos' => 40, 'formato' => 'A', 'default' => '', ), '12.3S' => array( 'digitos' => 40, 'formato' => 'A', 'default' => '', ), '13.3S' => array( 'digitos' => 40, 'formato' => 'A', 'default' => ' ', ), '14.3S' => array( 'digitos' => 22, 'formato' => 'A', 'default' => ' ', ), ); /** * Registro Detalhe - Segmento Y (Opcional - Remessa) * * @var array */ protected $segmentoY = array( '01.3Y' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '104', ), '02.3Y' => array( 'digitos' => 4, 'formato' => 'N', 'default' => '', ), '03.3Y' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '3', ), '04.3Y' => array( 'digitos' => 5, 'formato' => 'N', 'default' => '', ), '05.3Y' => array( 'digitos' => 1, 'formato' => 'A', 'default' => 'Y', ), '06.3Y' => array( 'digitos' => 1, 'formato' => 'A', 'default' => ' ', ), '07.3Y' => array( 'digitos' => 2, 'formato' => 'N', 'default' => '', ), '08.3Y' => array( 'digitos' => 2, 'formato' => 'N', 'default' => '', ), ); /** * Registro Opcional para Informação do Modelo de Bloqueto 10 - Genérico Mod 01 (Cód. Reg. Opcional = 10) * Registro Tipo 1 * * @var array */ protected $segmentoYBloqueto10 = array( '09.3Y' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '10.3Y' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '', ), '11.3Y' => array( 'digitos' => 10, 'formato' => 'N', 'default' => '', ), '12.3Y' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '', ), '13.3Y' => array( 'digitos' => 10, 'formato' => 'N', 'default' => '', ), '14.3Y' => array( 'digitos' => 3, 'formato' => 'N', 'default' => ' ', ), '15.3Y' => array( 'digitos' => 10, 'formato' => 'N', 'default' => '', ), '16.3Y' => array( 'digitos' => 15, 'formato' => 'A', 'default' => '', ), '17.3Y' => array( 'digitos' => 10, 'formato' => 'A', 'default' => '', ), '18.3Y' => array( 'digitos' => 156, 'formato' => 'A', 'default' => '', ), ); /** * Registro Opcional para Informação do Modelo de Bloqueto 11 - Genérico Mod 02 (Cód. Reg. Opcional = 11) * Registro Tipo 1 * * @var array */ protected $segmentoYBloqueto11 = array( '09.3Y' => array( 'digitos' => 1, 'formato' => 'N', 'default' => '', ), '10.3Y' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '', ), '11.3Y' => array( 'digitos' => 10, 'formato' => 'N', 'default' => '', ), '12.3Y' => array( 'digitos' => 3, 'formato' => 'N', 'default' => '', ), '13.3Y' => array( 'digitos' => 10, 'formato' => 'N', 'default' => '', ), '14.3Y' => array( 'digitos' => 3, 'formato' => 'N', 'default' => ' ', ), '15.3Y' => array( 'digitos' => 10, 'formato' => 'N', 'default' => '', ), '16.3Y' => array( 'digitos' => 15, 'formato' => 'A', 'default' => '', ), '17.3Y' => array( 'digitos' => 10, 'formato' => 'A', 'default' => '', ), '18.3Y' => array( 'digitos' => 156, 'formato' => 'A', 'default' => '', ), ); protected $empresaId; protected $contaId; protected $bancoId; protected $dataVencimentoDe; protected $dataVencimentoA; protected $numero; protected $codigoRemessa; protected $pagamentos = array(); public function __construct($empresaId, $dataVencimentoDe, $dataVencimentoA, $lancamentos, $codigoRemessa, $contaId, $bancoId) { $lancamento = Financeiro_Model_Container::getLancamento(); $this->empresaId = $empresaId; $this->contaId = $contaId; $this->bancoId = $bancoId; $this->dataVencimentoDe = $dataVencimentoDe; $this->dataVencimentoA = $dataVencimentoA; $this->codigoRemessa = $codigoRemessa; $this->pagamentos = $lancamento->getLancamentosRemessa(array( 'empresa_id' => $empresaId, 'data_vencimento_de' => $dataVencimentoDe, 'data_vencimento_a' => $dataVencimentoA, 'lancamentos' => $lancamentos, 'conta_id' => $contaId, 'banco_id' => $bancoId ), array('lancamento.empresa_id', 'data_vencimento ASC') ); } public function getNumero() { return $this->numero; } protected function formatar(array $tabela, array $valores) { require_once 'Core/Filter/Alnum.php'; require_once 'Core/Filter/RemoverAcentos.php'; foreach($tabela as $sCod => $sInfo) { if (!isset($valores[$sCod])) { $valores[$sCod] = $sInfo['default']; } if ($sInfo['formato'] == 'N') { $filter = new Zend_Filter_Digits(); } else { $filter = new Zend_Filter(); $filter->addFilter(new Core_Filter_Alnum(true, true)) ->addFilter(new Core_Filter_RemoverAcentos()) ->addFilter(new Zend_Filter_StringToUpper()); } $valores[$sCod] = $filter->filter($valores[$sCod]); // if (strstr($valores[$sCod], 'CONDOMINIO') || // strstr($valores[$sCod], 'RESIDENCIAL')) { // $valores[$sCod] = // str_replace(array('CONDOMINIO', 'RESIDENCIAL'), // array('COND', 'RESID'), $valores[$sCod]); // } $digitos = ($sInfo['formato'] == 'N' && isset($sInfo['decimais']) && $sInfo['decimais']) ? $sInfo['digitos'] + $sInfo['decimais'] : $sInfo['digitos']; if (strlen($valores[$sCod]) < $digitos) { $restante = $digitos - strlen($valores[$sCod]); for ($i=0; $i < $restante; $i++) { if ($sInfo['formato'] == 'N') { $valores[$sCod] = '0' . $valores[$sCod]; } else { $valores[$sCod] .= ' '; } } } else if (strlen($valores[$sCod]) > $digitos) { $valores[$sCod] = substr($valores[$sCod], 0, $digitos); } // if ($sInfo['formato'] == 'N' // && isset($sInfo['decimais']) && $sInfo['decimais']) { // for ($j=0; $j < $sInfo['decimais']; $j++) { // $valores[$sCod] .= '0'; // } // } } ksort($valores); return $valores; } protected function gerarHeaderArquivo($empresa, $conta) { $data = Zend_Date::now(); $banco = $conta->getBanco(); $h = array( '05.0' => '2', // CNPJ '06.0' => $empresa->cnpj, '08.0' => $conta->agencia, '09.0' => $conta->agencia_dv, '10.0' => $conta->codigo_cedente, '13.0' => $empresa->nome, '14.0' => $banco->nome, '16.0' => '1', '17.0' => $data->get('ddMMyyyy'), '18.0' => $data->get('HHmmss'), '19.0' => $this->numero, '23.0' => 'REMESSA-TESTE' ); return $this->formatar($this->headerArquivo, $h); } protected function gerarTrailerArquivo($qtdRegistros) { $t = array( '05.9' => 1, '06.9' => $qtdRegistros ); return $this->formatar($this->trailerArquivo, $t); } protected function gerarHeaderLote($empresa, $conta) { $h = array( // '02.1' => $lote, '05.1' => '1', // Cobrança '09.1' => '2', // CNPJ '10.1' => $empresa->cnpj, '11.1' => $conta->codigo_cedente, '13.1' => $conta->agencia, '14.1' => $conta->agencia_dv, '15.1' => $conta->codigo_cedente, '18.1' => $empresa->nome, ); return $this->formatar($this->headerLote, $h); } protected function gerarSegmentoP($pagamento, $registroNoLote) { $dataLancamento = new Zend_Date($pagamento->data_lancamento, 'yyyy-MM-dd'); $emissaoBloqueto = false; if($pagamento->codigo_remessa == 31 && $pagamento->emissao_bloqueto == 4 || $pagamento->emissao_bloqueto == 5){ $emissaoBloqueto = true; } $p = array( '02.3P' => '0001', '04.3P' => $registroNoLote, '07.3P' => '01', '08.3P' => $pagamento->agencia, '09.3P' => $pagamento->agencia_dv, '10.3P' => $pagamento->codigo_cedente, '12.3P' => $pagamento->carteira, '13.3P' => $pagamento->id, '14.3P' => $pagamento->carteira_cobranca, '15.3P' => '1',//$condominio->forma_cadastramento, '16.3P' => $pagamento->emissao_bloqueto, '17.3P' => '2',//$condominio->entrega_bloqueto, '18.3P' => '0', '19.3P' => $pagamento->id, '21.3P' => Zend_Locale_Format::toFloat($pagamento->valor, array('precision' => 2)), '22.3P' => $pagamento->agencia, '23.3P' => $pagamento->agencia_dv, '24.3P' => '02', '25.3P' => 'N', '26.3P' => $dataLancamento->get('ddMMyyyy'), '27.3P' => '1', '40.3P' => '09' ); if ($pagamento->data_vencimento) { $dataVencimento = new Zend_Date($pagamento->data_vencimento, 'yyyy-MM-dd'); $p['20.3P'] = $dataVencimento->get('ddMMyyyy'); } return $this->formatar($this->segmentoP, $p); } protected function gerarSegmentoQ($empresa, $pagamento, $registroNoLote) { $q = array( '02.3Q' => '0001', '04.3Q' => $registroNoLote, '07.3Q' => '01', '08.3Q' => '1', // CPF '09.3Q' => $pagamento->cpf_cliente, '10.3Q' => $pagamento->cliente, '11.3Q' => $empresa->endereco, '12.3Q' => $empresa->bairro, '13.3Q' => $empresa->cep ? substr($empresa->cep, 0, 5) : '', '14.3Q' => $empresa->cep ? trim(substr($empresa->cep, 5), '-') : '', '15.3Q' => $empresa->cidade, '16.3Q' => $empresa->uf, '21.3Q' => $pagamento->id ); return $this->formatar($this->segmentoQ, $q); } public function gerar() { if (count($this->pagamentos) == 0) { throw new Exception('Lista de lançamentos vazia'); } $mEmpresa = Operacional_Model_Container::getEmpresa(); $mConta = Financeiro_Model_Container::getConta(); $rows = array(); $arquivo = array(); $qtdRegistros = 1; $arquivoRemessa = Financeiro_Model_Container::getArquivoRemessa(); $remessa = $arquivoRemessa->createRow(array( 'usuario_id' => Yuppie_Auth::getIdentity()->id, 'data_criacao' => Zend_Date::now()->get('yyyy-MM-dd HH:mm:ss'), 'empresa_id' => $this->empresaId, 'data_vencimento_de' => $this->dataVencimentoDe, 'data_vencimento_a' => $this->dataVencimentoA, 'banco_id' => $this->bancoId)); $this->numero = $remessa->save(); $empresa = $mEmpresa->findById($this->empresaId); $conta = $mConta->findById($this->contaId); $rows['headerArquivo'] = $this->gerarHeaderArquivo($empresa, $conta); $arquivo[] = implode('', $rows['headerArquivo']); $rows['headerLote'] = $this->gerarHeaderLote($empresa, $conta); $arquivo[] = implode('', $rows['headerLote']); $i=1; $remessasLancadas = Financeiro_Model_Container::getRemessasLancadas(); $lancamento = Financeiro_Model_Container::getLancamento(); foreach($this->pagamentos as $pagamento) { $rows['segmentoP'] = $this->gerarSegmentoP($pagamento, $i++); $arquivo[] = implode('', $rows['segmentoP']); $rows['segmentoQ'] = $this->gerarSegmentoQ($empresa, $pagamento, $i++); $arquivo[] = implode('', $rows['segmentoQ']); $re = $remessasLancadas->createRow( array('lancamento_id' => $pagamento->id, 'arquivo_remessa_id' => $this->numero, 'codigo_remessa' => !empty($pagamento->codigo_remessa) ? $pagamento->codigo_remessa : $this->codigoRemessa)); if($re->save()){ //caso tenha gerado remessa, seta a flag no lançamento e o código da remessa $lancamento->update(array('gerado_remessa' => 1, 'codigo_remessa' => !empty($pagamento->codigo_remessa) ? $pagamento->codigo_remessa : $this->codigoRemessa), "id = " . $pagamento->id); } } foreach($rows as $row) { $qtdRegistros += count($row); } $arquivo[] = implode('', $this->gerarTrailerArquivo($qtdRegistros)); return implode(PHP_EOL, $arquivo); } }
💾 保存文件
← 返回文件管理器