public function getBoletosAtualizados($CodArquivo) { $sql = "SELECT EMP.NOME_FANTASIA AS CLIENTE, CR2.F_LANCA_CR2_ID AS NUM_BOLETO, IDENTIFICACAO.NOME_OCORRENCIA FROM F_SITUACAO_BOLETO_RETORNO RETORNO INNER JOIN F_CNAB_OCORRENCIA IDENTIFICACAO ON (IDENTIFICACAO.CODIGO_OCORRENCIA = RETORNO.CODIGO_OCORRENCIA) INNER JOIN F_LANCA_CR2 CR2 ON (RETORNO.F_LANCA_CR2_ID = CR2.F_LANCA_CR2_ID) INNER JOIN F_LANCA_CR CR ON (CR2.F_LANCA_CR_ID = CR.F_LANCA_CR_ID) INNER JOIN EMPRESA EMP ON (CR.EMPRESA_ID = EMP.EMPRESA_ID) WHERE RETORNO.CODIGO_ARQUIVO = $CodArquivo"; $sql = parent::execute_query($sql); $ListaBoletosAtualizados = array(); while ($linha = parent::criaObjetoConsulta($sql)){ $BoletoAtualizado = new ModelRetorno(); $BoletoAtualizado->setCliente($linha->CLIENTE); $BoletoAtualizado->setNumBoleto($linha->NUM_BOLETO); $BoletoAtualizado->setStatusBoleto($linha->NOME_OCORRENCIA); array_push($ListaBoletosAtualizados, $BoletoAtualizado); } return $ListaBoletosAtualizados; }
public function AtualizaLancamentos() { $Bd = new ModelRetorno(); $identificacao = 1; $cont = 1; if ($this->getAquivo()) { //Abre o arquivo $handle = @fopen($this->getAquivo(), "r"); while (!feof($handle)){ $buffer = fgets($handle, 4096); //Verifica se é a primeira linha do arquivo if ($cont == 1) { $codigo_retorno = str_replace(" ", "", substr($buffer, 109, 5)); $codigo_empresa = ltrim(substr($buffer, 26, 20), 0); if (!$Bd->VerificaArquivoPertenceConta($codigo_empresa)) { return $this->setMotivoErro("Arquivo não pertence a nenhuma conta cadastrada"); } //Apaga todas as informações referente ao arquivo processadas anteriormente if (!parent::DeleteProcessamentosAnteriores($codigo_retorno, $this->getTransacaoAtiva())) { return $this->setMotivoErro("Não foi possível localizar dados outros processamentos referente a esse arquivo"); } else { if (!parent::DeleteBaixaAnterior($codigo_retorno, $this->getTransacaoAtiva())) { return $this->setMotivoErro("Não foi possível atualizar os lançamento processados anterioremente"); } } } else { //Identifica todas as posições do arquivo $identificacao = substr($buffer, 0, 1); //001 a 001 Identificação do Registro $inscricao_empresa = substr($buffer, 01, 02); //002 a 003 Tipo de Inscrição Empresa $cpf_cnpj = substr($buffer, 03, 14); //004 a 017 CNPJ/CPF $zeros_1 = substr($buffer, 17, 03); //018 a 020 Zeros $identificacao_empresa = substr($buffer, 20, 37); //031 a 037 Identificação da Empresa Cedente no Banco $numero_controle_partici = substr($buffer, 37, 25); //038 a 062 Nº Controle do Participante $zeros_2 = substr($buffer, 62, 08); //063 a 070 Zeros $identificacao_titulo = substr($buffer, 70, 12); //071 a 082 (*) Identificação do Título no Banco $uso_banco1 = substr($buffer, 82, 10); //083 a 092 Uso do Banco $uso_banco2 = substr($buffer, 91, 12); //093 a 104 Uso do Banco $indicador_rateio = substr($buffer, 103, 1); //105 a 105 Indicador de Rateio Crédito $zeros3 = substr($buffer, 105, 2); //106 a 107 Zeros $carteira = substr($buffer, 107, 1); //108 a 108 Carteira $identificao_ocorrencia = substr($buffer, 108, 2); //109 a 110 Identificação de Ocorrência $data_ocorrencia_banco = substr($buffer, 110, 6); //111 a 116 Data Ocorrência no Banco $numero_documento = substr($buffer, 116, 10); //117 a 126 Número do Documento $id_titulo_banco = substr($buffer, 126, 20); //127 a 146 (*) Identificação do Título no Banco $data_vencimento = substr($buffer, 146, 6); //147 a 152 Data Vencimento do Título $valor_titulo = substr($buffer, 154, 13); //153 a 165 Valor do Título $banco_cobrador = substr($buffer, 165, 3); //166 a 168 Banco Cobrador $agencia_cobradora = substr($buffer, 168, 5); //169 a 173 Agência Cobradora $especie_titulos = substr($buffer, 173, 2); //174 a 175 Espécie do Título $despesa_confirmacao = substr($buffer, 175, 13); //176 a 188 Despesas de cobrança para os Códigos de Ocorrência / 02 - Entrada Confirmada / 28 - Débito de Tarifas $custas_protesto = substr($buffer, 188, 13); //189 a 201 Outras despesas Custas de Protesto $juros_atraso = substr($buffer, 201, 13); //202 a 214 Juros Operação em Atraso $iof_devido = substr($buffer, 214, 13); //215 a 227 IOF Devido $abatimento_titulo = substr($buffer, 227, 13); //228 a 240 Abatimento Concedido sobre o Título $desconto_concedido = substr($buffer, 240, 13); //241 a 253 Desconto Concedido $valor_pago = substr($buffer, 253, 13); //254 a 266 Valor Pago $juros_mora = substr($buffer, 266, 13); //267 a 279 Juros de Mora $outros_creditos = substr($buffer, 279, 13); //280 a 292 Outros Créditos $brancos_1 = substr($buffer, 292, 2); //293 a 294 Brancos $confirmacao_protesto = substr($buffer, 294, 1); //295 a 295 Motivo do Código de Ocorrência 19 (A – Aceito / D – Desprezado) $data_credito = substr($buffer, 295, 6); //296 a 301 Data do Crédito $brancos_2 = substr($buffer, 301, 17); //302 a 318 Brancos $motivo_rejeicao = str_replace(" ", "", substr($buffer, 318, 10)); //319 a 328 Motivos das Rejeições para os Códigos de Ocorrência da Posição 109 a 110 $brancos_3 = substr($buffer, 328, 66); //329 a 394 Brancos $sequencial = substr($buffer, 394, 6); //395 a 400 Seqüencial de Registro if ($cont > 1) { //Recupera as informações necessárias para atualizar os boletos $valor_pago_formatado = $valor_pago > 0 ? $this->formata_inteiro_moeda(ltrim($valor_pago, 0)) : '0.00'; $despesa_registro = $despesa_confirmacao > '0' ? $this->formata_inteiro_moeda(ltrim($despesa_confirmacao, 0)) : '0.00'; $outras_despesas = $custas_protesto > 0 ? $this->formata_inteiro_moeda(ltrim($custas_protesto, 0)) : '0.00'; $valor_multa = $juros_atraso > 0 ? $this->formata_inteiro_moeda(ltrim($juros_atraso, 0)) : '0.00'; $valor_mora = $juros_mora > 0 ? $this->formata_inteiro_moeda(ltrim($juros_mora, 0)) : '0.00'; $ValorDesconto = $desconto_concedido > 0 ? $this->formata_inteiro_moeda(ltrim($desconto_concedido, 0)) : '0.00'; $data_pagamento = $this->data_pagamento($data_ocorrencia_banco); $TotalAcrescimosPagamento = $valor_multa + $valor_mora; $TotalAcrescimosPagamento > 0 ? $TotalAcrescimosPagamento : '0.00'; } //Verifica se não é a última linha do arquivo if ($identificacao == 1) { //Caso o título foi emitido sem registro, o código do mesmo será localizado na posição 071 a 082 //No caso do Bradesco a posição caso o título não tenha registro, o código retornado na posição 109 a 110 é 17, //Caso o título tenha sido registrado, será retornado o código 06 if ($identificao_ocorrencia == 17) { $CodigoBoleto = substr(ltrim($id_titulo_banco, 0), 0, strlen(ltrim($id_titulo_banco, 0)) - 1); } elseif ($identificao_ocorrencia == 06) { $CodigoBoleto = trim($numero_documento); } else { $CodigoBoleto = trim($numero_documento); } //Antes de fazer as alterações, verifica o boleto do retorno encontra-se na base de dados if ($CodigoBoleto == parent::VerificaIntegridadeLancamento($CodigoBoleto)) { //Recupera a data de vencimento do título $dataVencimento = parent::DataVencimentoBoleto($CodigoBoleto); //Recupera o código do registro pai $CodigoRegistroPai = parent::CodigoRegistroPai($CodigoBoleto); //Caso o boleto tenha sido pago, efetua a baixa do mesmo if ($valor_pago_formatado > 0) { if (!parent::EfetuaRecebimentoBoletos($CodigoRegistroPai, $TotalAcrescimosPagamento, $valor_pago_formatado, $ValorDesconto, $this->getIdUsuario(), $data_pagamento, "", $dataVencimento, false, $this->getTransacaoAtiva(), $codigo_retorno)) { return $this->setMotivoErro("Não foi possível efetuar a baixa de algum lançamento, processo não concluído!"); break; } } //Recupera o código da conta corrente $idConta = parent::CodigoContaCorrenteArquivo($codigo_empresa); //Atualiza o retorno do banco if (!parent::AtualizaSituacaoAtualRetorno($idConta, $identificao_ocorrencia, $CodigoBoleto, $motivo_rejeicao, $codigo_retorno, $data_pagamento, $despesa_registro, $outras_despesas, $valor_multa, $valor_mora, $this->getTransacaoAtiva())) { return $this->setMotivoErro("Não foi possível atualizar a situação do boleto, processo não concluído"); break; } } } } $cont++; } //Caso consiga atualizar todos os títulos, atualiza as informações referente ao arquivo processado $dataProcessamento = date('Y-m-d H:i:s'); if (parent::AtualizaInformacoesProcessamento($dataProcessamento, $this->getAquivo(), $codigo_retorno, $this->getIdUsuario(), $this->getTransacaoAtiva())) { if (parent::finalizaTransacao($this->getTransacaoAtiva(), true)) { return $this->setStatusProcessamento(true); } else { if (parent::finalizaTransacao($this->getTransacaoAtiva(), false)) { return $this->setMotivoErro("Não foi possível atualizar as informações do arquivo"); } } } else { $this->setMotivoErro("Não foi possível concluir a transação"); } } else { $this->setMotivoErro("Nenhum arquivo encontrado"); } fclose($handle); }