/** * 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'); }