コード例 #1
0
 /**
  * Salva o arquivo do banco do brasil:
  * toda vez que acessar aqui, verificar se o arquivo do BB existe,
  * caso o arquivo exista, grava os dados no banco e exclui o arquivo.
  * ****************************************************************************************************
  * OBS: Por enquanto foi substituído pela TRIGGER/SP, mas, é bom não retirá-lo para o caso de precisar
  * ****************************************************************************************************
  * @access public
  * @param void
  * @return void
  */
 public function salvararquivobbAction()
 {
     $this->_helper->layout->disableLayout();
     // desabilita o layout
     // diretório onde se encontram os arquivos do banco
     $dir = getcwd() . $this->arquivoTXT;
     // abre o diretório
     if (($abrir = opendir($dir)) === false) {
         throw new Exception('Não foi possível abrir o diretório ' . $dir . '!');
     }
     // busca todos os arquivos do diretório
     while (($arq = readdir($abrir)) !== false) {
         // verifica se a extensão do arquivo é .txt
         if (substr(strtolower($arq), -4) == '.txt') {
             // array contendo o caminho/nome completo de cada arquivo
             $arquivos[] = $dir . '/' . $arq;
         }
         // fecha if
     }
     // fecha while
     // caso exista arquivo(s) .txt no diretório:
     // 	1. Varre o conteúdo de cada arquivo
     // 	2. Grava o conteúdo de cada arquivo no banco
     // 	3. Deleta o arquivo do diretório
     if (isset($arquivos) && count($arquivos) > 0) {
         // ========== INÍCIO - VARRE O ARQUIVO DETALHADAMENTE ==========
         foreach ($arquivos as $arquivoTXT) {
             // abre o arquivo para leitura
             $abrir_arquivo = fopen($arquivoTXT, 'r');
             // contador para os dados das constantes
             $cont1 = 0;
             // constante 1
             $cont2 = 0;
             // constante 2
             $cont3 = 0;
             // constante 3
             $cont9 = 0;
             // constante 9
             // arrays com os dados de cada constante
             $movimentacao1 = array();
             // constante 1
             $movimentacao2 = array();
             // constante 2
             $movimentacao3 = array();
             // constante 3
             $movimentacao9 = array();
             // constante 9
             $id_ultima_movimentacao = 0;
             // id contendo a última movimentação
             $id_ultima_movimentacao_item = 0;
             // id contendo o último item movimentação
             $erros = array();
             // verificador de erros
             // início while de leitura do arquivo linha por linha
             while (!feof($abrir_arquivo)) {
                 // pega a linha do arquivo
                 $linha = fgets($abrir_arquivo, 4096);
                 //echo $linha . '<br />';
                 // ========== INÍCIO CONSTANTE 1 (HEADER) ==========
                 if (substr($linha, 0, 1) == 1) {
                     $movimentacao1['nr_banco'][$cont1] = substr($linha, 1, 3);
                     // NÚMERO DO BANCO
                     $movimentacao1['nm_arquivo'][$cont1] = substr($linha, 4, 40);
                     // NOME DO ARQUIVO
                     $movimentacao1['dt_arquivo'][$cont1] = substr($linha, 44, 8);
                     // DATA DA GERAÇÃO DO ARQUIVO
                     $movimentacao1['dt_inicio_movimentacao'][$cont1] = substr($linha, 52, 8);
                     // DATA DE INÍCIO DA MOVIMENTAÇÃO BANCÁRIA
                     $movimentacao1['dt_fim_movimentacao'][$cont1] = substr($linha, 60, 8);
                     // DATA FINAL DA MOVIMENTAÇÃO BANCÁRIA
                     // gravar no banco os dados do arquivo
                     $dados_movimentacao = array('nrBanco' => $movimentacao1['nr_banco'][$cont1], 'nmArquivo' => $movimentacao1['nm_arquivo'][$cont1], 'dtArquivo' => Data::dataAmericana(Mascara::addMaskDataBrasileira($movimentacao1['dt_arquivo'][$cont1])), 'dtInicioMovimento' => Data::dataAmericana(Mascara::addMaskDataBrasileira($movimentacao1['dt_inicio_movimentacao'][$cont1])), 'dtFimMovimento' => Data::dataAmericana(Mascara::addMaskDataBrasileira($movimentacao1['dt_fim_movimentacao'][$cont1])), 'idAgente' => $this->getIdUsuario);
                     $this->tbMovimentacaoBancaria = new tbMovimentacaoBancaria();
                     $id_ultima_movimentacao = $this->tbMovimentacaoBancaria->cadastrarDados($dados_movimentacao);
                     $cont1++;
                     //incrementa o contador
                 }
                 // ========== FIM CONSTANTE 1 (HEADER) ==========
                 // ========== INÍCIO CONSTANTE 2 ==========
                 if (substr($linha, 0, 1) == 2) {
                     $movimentacao2['agencia'][$cont2] = substr($linha, 1, 4);
                     // PREFIXO DA AGÊNCIA
                     $movimentacao2['dv_agencia'][$cont2] = substr($linha, 5, 1);
                     // DIGITO VERIFICADOR DA AGÊNCIA
                     $movimentacao2['conta'][$cont2] = substr($linha, 6, 9);
                     // NÚMERO DA CONTA CORRENTE
                     $movimentacao2['dv_conta'][$cont2] = substr($linha, 15, 1);
                     // DIGITO VERIFICADOR DA CONTA CORRENTE
                     $movimentacao2['titulo_razao'][$cont2] = substr($linha, 16, 12);
                     // CÓDIGO TÍTULO RAZÃO DA CONTA CORRENTE
                     $movimentacao2['nome_abreviado'][$cont2] = substr($linha, 28, 30);
                     // NOME ABREVIADO
                     $movimentacao2['dt_abertura'][$cont2] = substr($linha, 58, 8);
                     // DATA DA ABERTURA DA CONTA CORRENTE
                     $movimentacao2['cnpj_cpf'][$cont2] = substr($linha, 66, 14);
                     // CNPJ OU CPF DA CONTA CORRENTE
                     $movimentacao2['saldo_inicial'][$cont2] = (double) substr($linha, 80, 18);
                     // SALDO INICIAL DA CONTA CORRENTE
                     $movimentacao2['dc_saldo_inicial'][$cont2] = substr($linha, 98, 1);
                     // DEBITO OU CREDITO DO SALDO INICIAL
                     $movimentacao2['saldo_final'][$cont2] = (double) substr($linha, 99, 18);
                     // SALDO FINAL NA CONTA CORRENTE
                     $movimentacao2['dc_saldo_final'][$cont2] = substr($linha, 117, 1);
                     // DEBITO OU CREDITO DO SALDO FINAL
                     // gravar no banco os dados da movimentação
                     $dados_movimentacao_item = array('tpRegistro' => substr($linha, 0, 1), 'nrAgencia' => $movimentacao2['agencia'][$cont2] . $movimentacao2['dv_agencia'][$cont2], 'nrDigitoConta' => '00' . $movimentacao2['conta'][$cont2] . $movimentacao2['dv_conta'][$cont2], 'nmTituloRazao' => $movimentacao2['titulo_razao'][$cont2], 'nmAbreviado' => $movimentacao2['nome_abreviado'][$cont2], 'dtAberturaConta' => Data::dataAmericana(Mascara::addMaskDataBrasileira($movimentacao2['dt_abertura'][$cont2])), 'nrCNPJCPF' => $movimentacao2['cnpj_cpf'][$cont2], 'vlSaldoInicial' => number_format($movimentacao2['saldo_inicial'][$cont2] / 100, 2, '.', ''), 'tpSaldoInicial' => $movimentacao2['dc_saldo_inicial'][$cont2], 'vlSaldoFinal' => number_format($movimentacao2['saldo_final'][$cont2] / 100, 2, '.', ''), 'tpSaldoFinal' => $movimentacao2['dc_saldo_final'][$cont2], 'idMovimentacaoBancaria' => $id_ultima_movimentacao);
                     $this->tbMovimentacaoBancariaItem = new tbMovimentacaoBancariaItem();
                     $id_ultima_movimentacao_item = $this->tbMovimentacaoBancariaItem->cadastrarDados($dados_movimentacao_item);
                     // busca os dados (nome) do cnpj ou cpf da conta corrente
                     $this->Nomes = new Nomes();
                     $dadosAgente = $this->Nomes->buscarNomePorCPFCNPJ($movimentacao2['cnpj_cpf'][$cont2], null, null, null, false);
                     if (!$dadosAgente) {
                         // filtra somente por cpf (retira os 3 primeiros caracteres)
                         $dadosAgente = $this->Nomes->buscarNomePorCPFCNPJ(substr($movimentacao2['cnpj_cpf'][$cont2], 3, 14), null, null, null, false);
                         if (!$dadosAgente) {
                             // grava no banco a inconsistência
                             $dados_inconsistencia = array('idMovimentacaoBancariaItem' => $id_ultima_movimentacao_item, 'idTipoInconsistencia' => '6');
                             $this->tbMovimentacaoBancariaItemxTipoInconsistencia = new tbMovimentacaoBancariaItemxTipoInconsistencia();
                             $cadastrar_inconsistencia = $this->tbMovimentacaoBancariaItemxTipoInconsistencia->cadastrarDados($dados_inconsistencia);
                         }
                     }
                     $movimentacao2['nm_agente'][$cont2] = $dadosAgente ? $dadosAgente['Nome'] : '';
                     // NOME DO AGENTE
                     // busca o pronac de acordo com a agência e a conta do projeto
                     // obs: a conta tem 12 carateres na tabela SAC.dbo.ContaBancaria
                     $agencia = $movimentacao2['agencia'][$cont2] . $movimentacao2['dv_agencia'][$cont2];
                     $conta = '00' . $movimentacao2['conta'][$cont2] . $movimentacao2['dv_conta'][$cont2];
                     $this->ContaBancaria = new ContaBancaria();
                     $dadosProjeto = $this->ContaBancaria->buscarDados(null, null, $agencia, $conta, false);
                     if (!$dadosProjeto) {
                         // busca somente pela conta
                         $dadosProjeto = $this->ContaBancaria->buscarDados(null, null, null, $conta, false);
                         if (!$dadosProjeto) {
                             // grava no banco a inconsistência
                             $dados_inconsistencia = array('idMovimentacaoBancariaItem' => $id_ultima_movimentacao_item, 'idTipoInconsistencia' => '7');
                             $this->tbMovimentacaoBancariaItemxTipoInconsistencia = new tbMovimentacaoBancariaItemxTipoInconsistencia();
                             $cadastrar_inconsistencia = $this->tbMovimentacaoBancariaItemxTipoInconsistencia->cadastrarDados($dados_inconsistencia);
                         }
                     }
                     $movimentacao2['ano_projeto'][$cont2] = $dadosProjeto ? $dadosProjeto['AnoProjeto'] : '';
                     $movimentacao2['sequencial'][$cont2] = $dadosProjeto ? $dadosProjeto['Sequencial'] : '';
                     // busca o enquadramento do projeto
                     $pronac = $movimentacao2['ano_projeto'][$cont2] . $movimentacao2['sequencial'][$cont2];
                     if (!empty($pronac)) {
                         $this->Enquadramento = new Enquadramento();
                         $dadosEnquadramento = $this->Enquadramento->buscarDados(null, $pronac, false);
                     } else {
                         $dadosEnquadramento = false;
                         // grava no banco a inconsistência
                         $dados_inconsistencia = array('idMovimentacaoBancariaItem' => $id_ultima_movimentacao_item, 'idTipoInconsistencia' => '9');
                         $this->tbMovimentacaoBancariaItemxTipoInconsistencia = new tbMovimentacaoBancariaItemxTipoInconsistencia();
                         $cadastrar_inconsistencia = $this->tbMovimentacaoBancariaItemxTipoInconsistencia->cadastrarDados($dados_inconsistencia);
                     }
                     if (!$dadosEnquadramento) {
                         // grava no banco a inconsistência
                         $dados_inconsistencia = array('idMovimentacaoBancariaItem' => $id_ultima_movimentacao_item, 'idTipoInconsistencia' => '8');
                         $this->tbMovimentacaoBancariaItemxTipoInconsistencia = new tbMovimentacaoBancariaItemxTipoInconsistencia();
                         $cadastrar_inconsistencia = $this->tbMovimentacaoBancariaItemxTipoInconsistencia->cadastrarDados($dados_inconsistencia);
                     }
                     $cont2++;
                     //incrementa o contador
                 }
                 // ========== FIM CONSTANTE 2 ==========
                 // ========== INÍCIO CONSTANTE 3 ==========
                 if (substr($linha, 0, 1) == 3) {
                     $movimentacao3['agencia'][$cont3] = substr($linha, 1, 4);
                     // PREFIXO DA AGÊNCIA
                     $movimentacao3['dv_agencia'][$cont3] = substr($linha, 5, 1);
                     // DIGITO VERIFICADOR DA AGÊNCIA
                     $movimentacao3['conta'][$cont3] = substr($linha, 6, 9);
                     // NÚMERO DA CONTA CORRENTE
                     $movimentacao3['dv_conta'][$cont3] = substr($linha, 15, 1);
                     // DIGITO VERIFICADOR DA CONTA CORRENTE
                     $movimentacao3['dt_movimento'][$cont3] = substr($linha, 16, 8);
                     // DATA DO MOVIMENTO NA CONTA CORRENTE
                     $movimentacao3['cod_historico'][$cont3] = substr($linha, 24, 4);
                     // CÓDIGO DO HISTÓRICO DO BANCO
                     $movimentacao3['historico'][$cont3] = substr($linha, 28, 15);
                     // HISTÓRICO DO BANCO
                     $movimentacao3['nr_documento'][$cont3] = substr($linha, 43, 10);
                     // NÚMERO DO DOCUMENTO PARA O BANCO
                     $movimentacao3['valor_movimento'][$cont3] = (double) substr($linha, 53, 18);
                     // VALOR DO MOVIMENTO NA CONTA CORRENTE
                     $movimentacao3['dc_valor_movimento'][$cont3] = substr($linha, 71, 1);
                     // DEBITO OU CREDITO DO MOVIMENTO NA CONTA CORRENTE
                     // gravar no banco os dados da movimentação
                     $dados_movimentacao_item = array('tpRegistro' => substr($linha, 0, 1), 'nrAgencia' => $movimentacao3['agencia'][$cont3] . $movimentacao3['dv_agencia'][$cont3], 'nrDigitoConta' => '00' . $movimentacao3['conta'][$cont3] . $movimentacao3['dv_conta'][$cont3], 'dtMovimento' => Data::dataAmericana(Mascara::addMaskDataBrasileira($movimentacao3['dt_movimento'][$cont3])), 'cdHistorico' => $movimentacao3['cod_historico'][$cont3], 'dsHistorico' => $movimentacao3['historico'][$cont3], 'nrDocumento' => $movimentacao3['nr_documento'][$cont3], 'vlMovimento' => number_format($movimentacao3['valor_movimento'][$cont3] / 100, 2, '.', ''), 'cdMovimento' => $movimentacao3['dc_valor_movimento'][$cont3], 'idMovimentacaoBancaria' => $id_ultima_movimentacao);
                     $this->tbMovimentacaoBancariaItem = new tbMovimentacaoBancariaItem();
                     $id_ultima_movimentacao_item = $this->tbMovimentacaoBancariaItem->cadastrarDados($dados_movimentacao_item);
                     // busca o pronac de acordo com a agência e a conta do projeto
                     // obs: a conta tem 12 carateres na tabela SAC.dbo.ContaBancaria
                     $agencia = $movimentacao3['agencia'][$cont3] . $movimentacao3['dv_agencia'][$cont3];
                     $conta = '00' . $movimentacao3['conta'][$cont3] . $movimentacao3['dv_conta'][$cont3];
                     $this->ContaBancaria = new ContaBancaria();
                     $dadosProjeto = $this->ContaBancaria->buscarDados(null, null, $agencia, $conta, false);
                     if (!$dadosProjeto) {
                         // busca somente pela conta
                         $dadosProjeto = $this->ContaBancaria->buscarDados(null, null, null, $conta, false);
                         if (!$dadosProjeto) {
                             // grava no banco a inconsistência
                             $dados_inconsistencia = array('idMovimentacaoBancariaItem' => $id_ultima_movimentacao_item, 'idTipoInconsistencia' => '7');
                             $this->tbMovimentacaoBancariaItemxTipoInconsistencia = new tbMovimentacaoBancariaItemxTipoInconsistencia();
                             $cadastrar_inconsistencia = $this->tbMovimentacaoBancariaItemxTipoInconsistencia->cadastrarDados($dados_inconsistencia);
                         }
                     }
                     $movimentacao3['ano_projeto'][$cont3] = $dadosProjeto ? $dadosProjeto['AnoProjeto'] : '';
                     $movimentacao3['sequencial'][$cont3] = $dadosProjeto ? $dadosProjeto['Sequencial'] : '';
                     // busca o enquadramento do projeto
                     // verifica se o projeto está com a data de execução vigente
                     // verifica se o projeto está com a data de captação vigente
                     $pronac = $movimentacao3['ano_projeto'][$cont3] . $movimentacao3['sequencial'][$cont3];
                     if (!empty($pronac)) {
                         $this->Enquadramento = new Enquadramento();
                         $dadosEnquadramento = $this->Enquadramento->buscarDados(null, $pronac, false);
                         $this->Projetos = new Projetos();
                         $dadosPeriodoExecucao = $this->Projetos->buscarPeriodoExecucao(null, $pronac, Data::dataAmericana(Mascara::addMaskDataBrasileira($movimentacao3['dt_movimento'][$cont3])));
                         $dadosPeriodoCaptacao = $this->Projetos->buscarPeriodoCaptacao(null, $pronac, Data::dataAmericana(Mascara::addMaskDataBrasileira($movimentacao3['dt_movimento'][$cont3])), false);
                     } else {
                         $dadosEnquadramento = false;
                         $dadosPeriodoExecucao = false;
                         $dadosPeriodoCaptacao = false;
                         // grava no banco a inconsistência
                         $dados_inconsistencia = array('idMovimentacaoBancariaItem' => $id_ultima_movimentacao_item, 'idTipoInconsistencia' => '9');
                         $this->tbMovimentacaoBancariaItemxTipoInconsistencia = new tbMovimentacaoBancariaItemxTipoInconsistencia();
                         $cadastrar_inconsistencia = $this->tbMovimentacaoBancariaItemxTipoInconsistencia->cadastrarDados($dados_inconsistencia);
                     }
                     if (!$dadosEnquadramento) {
                         // grava no banco a inconsistência
                         $dados_inconsistencia = array('idMovimentacaoBancariaItem' => $id_ultima_movimentacao_item, 'idTipoInconsistencia' => '8');
                         $this->tbMovimentacaoBancariaItemxTipoInconsistencia = new tbMovimentacaoBancariaItemxTipoInconsistencia();
                         $cadastrar_inconsistencia = $this->tbMovimentacaoBancariaItemxTipoInconsistencia->cadastrarDados($dados_inconsistencia);
                     }
                     if (!$dadosPeriodoExecucao) {
                         // grava no banco a inconsistência
                         $dados_inconsistencia = array('idMovimentacaoBancariaItem' => $id_ultima_movimentacao_item, 'idTipoInconsistencia' => '1');
                         $this->tbMovimentacaoBancariaItemxTipoInconsistencia = new tbMovimentacaoBancariaItemxTipoInconsistencia();
                         $cadastrar_inconsistencia = $this->tbMovimentacaoBancariaItemxTipoInconsistencia->cadastrarDados($dados_inconsistencia);
                     }
                     if (!$dadosPeriodoCaptacao) {
                         // grava no banco a inconsistência
                         $dados_inconsistencia = array('idMovimentacaoBancariaItem' => $id_ultima_movimentacao_item, 'idTipoInconsistencia' => '2');
                         $this->tbMovimentacaoBancariaItemxTipoInconsistencia = new tbMovimentacaoBancariaItemxTipoInconsistencia();
                         $cadastrar_inconsistencia = $this->tbMovimentacaoBancariaItemxTipoInconsistencia->cadastrarDados($dados_inconsistencia);
                     }
                     $cont3++;
                     //incrementa o contador
                 }
                 // ========== FIM CONSTANTE 3 ==========
                 // ========== INÍCIO CONSTANTE 9 ==========
                 if (substr($linha, 0, 1) == 9) {
                     $movimentacao9['qtd_registros'][$cont9] = substr($linha, 1, 7);
                     // QUANTIDADE DE REGISTROS
                     $cont9++;
                     //incrementa o contador
                 }
                 // ========== FIM CONSTANTE 9 ==========
             }
             // fim while de leitura do arquivo linha por linha
             // fecha o arquivo
             fclose($abrir_arquivo);
             // exclui o arquivo
             unlink($arquivoTXT);
         }
         // ========== FIM - VARRE O ARQUIVO DETALHADAMENTE ==========
     }
     // fecha if (caso exista arquivo(s) .txt no diretório)
     parent::message('Arquivo enviado com sucesso!', 'controlarmovimentacaobancaria/upload', 'CONFIRM');
 }