✏️ 正在编辑: ImportacaoCapa.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Banco/Planilha/Bonsucesso/ImportacaoCapa.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_Banco_Planilha_Bonsucesso_ImportacaoCapa { protected $_bancoId; protected $naoImportados = array(); protected $contratosImportados = array(); protected $_dateFormat = 'dd-MM-yy'; private $_arquivoOrigem = NULL; public function importar($arquivo) { libxml_use_internal_errors(true); $this->_arquivoOrigem = $arquivo; $fileName = basename($arquivo, '.pdf'); $dirName = dirname($arquivo); $fileNameWithoutSpaces = str_replace(" ", "", $fileName); rename($arquivo, "$dirName/$fileNameWithoutSpaces.pdf"); $command = escapeshellcmd("pdftohtml -c $dirName/$fileNameWithoutSpaces.pdf"); shell_exec($command); $PATH_HTML = "$dirName/$fileNameWithoutSpaces-1.html"; $dom = new DOMDocument(); $dom->loadHTMLFile($PATH_HTML); $ps = $dom->getElementsByTagName("div"); if ($ps){ $data = array( 'convenio' => $this->getValue($ps, 'Convênio:'), 'status_proposta' => $this->getValue($ps, 'SITUAÇÃO:'), 'produto' => $this->getValue($ps, 'Produto:'), 'codigo_barras' => $this->getValue($ps, 'PLANILHA DE PROPOSTA Nº:'), 'prazo' => $this->getValue($ps, 'Qtd Parcela:'), 'valor_bruto' => $this->getValue($ps, 'Vl. Liberado:'), 'valor_prestacao' => $this->getValue($ps, 'Vlr Parcela:'), 'numero_contrato' => $this->getValue($ps, 'PLANILHA DE PROPOSTA Nº:'), 'data_emissao' => $this->getValue($ps, 'Data Base:'), 'digitador' => Yuppie_Auth::getIdentity()->login, 'nome_cliente' => $this->getValue($ps, "Cliente:"), 'cpf_cliente' => $this->getValue($ps, 'CPF:'), 'data_nasc_cliente' => $this->getValue($ps, 'Data de Nasc.:'), 'estado_civil_cliente' => $this->getValue($ps, 'Est.Civil:'), 'uf_cliente' => $this->getValue($ps, 'UF:'), 'numero_identidade' => $this->getValue($ps, 'RG:'), 'endereco' => $this->getValue($ps, 'Endereço:'), 'cep' => $this->getValue($ps, 'Cep:'), 'numero' => $this->getValue($ps, 'Nº:'), 'bairro' => $this->getValue($ps, 'Bairro:'), 'cidade' => $this->getValue($ps, 'Cidade:'), 'uf_endereco' => $this->getValue($ps, 'UF:') ); $dados = array( 'banco_id' => $this->getBancoId(), 'numero_beneficio' => null, 'especie' => null, 'corretor_id' => null, 'convenio_id' => null, 'cliente_id' => null, 'prazo' => null, 'valor_bruto' => null, 'valor_liquido' => null, 'forma_liberacao' => null, 'valor_prestacao' => null, 'numero_contrato' => null, 'numero_ade' => null, 'data_emissao' => null, 'tipo' => null, 'digitador' => Yuppie_Auth::getIdentity()->login, 'status_proposta' => null, 'tipo' => null ); try{ $this->_getCodBarrasAde($data,$dados); $this->_getStatusProposta($data, $dados); $this->_getTipoContrato($data, $dados); $this->_getEmpresaId($data, $dados); $this->_getConvenio($data, $dados); $this->_getNumeroBeneficio($data, $dados); $this->_getEspecie($data, $dados); $this->_getClienteId($data, $dados); $this->_getFormaLiberacao($data, $dados); $this->_getPrazo($data, $dados); $this->_getTipoContrato($data, $dados); $this->_getValorBruto($data, $dados); $this->_getValorLiquido($data, $dados); $this->_getValorParcela($data, $dados); $this->_getNumeroContrato($data,$dados); $this->_getDataEmissao($data,$dados); $this->_getSaldoDevedor($data,$dados); $this->_getBanco($data,$dados); $this->_getAgencia($data,$dados); $this->_getConta($data,$dados); $this->contratosImportados[] = $dados['numero_contrato']; $this->salvar($data, $dados); } catch (Exception $e){ $this->_addNaoImportado($data, $this->naoImportados, $e->getMessage()); } } $mask = "$fileNameWithoutSpaces*.*"; array_map('unlink', glob("$dirName/".$mask)); return $this->naoImportados; } protected function salvar($data, &$dados) { $urlSistema = Yuppie_Auth::getSiteKey(); $writer = new Zend_Log_Writer_Stream("/var/log/sistemayuppie/zf_log_planilha_{$urlSistema}_" . Zend_Date::now()->get("ddMMyyyy") . ".txt"); $classeChamada = get_class($this); $log = new Zend_Log($writer); $log->log('#######################', Zend_Log::INFO); $log->log("IMPORTAÇÃO: " . $classeChamada, Zend_Log::INFO); $log->log('ARQUIVO IMPORTADO: ' . print_r($this->getArquivoOrigem(), true), Zend_Log::INFO); $log->log("Usuário logado: " . Yuppie_Auth::getIdentity()->login, Zend_Log::INFO); $modelContrato = new Model_DbTable_Contrato(); $result = 0; if( !isset($dados['numero_contrato'])){ throw new Exception("Capa inválida"); } //verifica se o contrato existe $dadosContrato = isset($dados['numero_contrato']) && $dados['numero_contrato'] ? $modelContrato->fetchRow("(numero_contrato = '{$dados['numero_contrato']}' OR numero_ade = '{$dados['numero_contrato']}') " . "AND banco_id = " . $this->getBancoId()) : null; $protocolos = null; if( $dadosContrato == null ){ try { $log->log("Tentativa de inserção do contrato: {$dados['numero_contrato']}", Zend_Log::INFO); foreach ( $dados as $key => $value ) { $log->log("[{$key}] => {$value}", Zend_Log::INFO); } try { $result = $modelContrato->insert($dados); } catch (Exception $exc) { } if( $result > 0 ){ $log->log("Contrato adicionado.", Zend_Log::INFO); } else { $log->log("Contrato NAO foi foi adicionado.", Zend_Log::INFO); } if( $result <= 0 ){ $this->_addNaoImportado( $dados,$data, $this->naoImportados, 'Contrato não inserido.' ); } } catch ( Exception $e ) { $log->log("[Exception] Erro ao adicionar contrato. " . $e->getMessage(), Zend_Log::INFO); $this->_addNaoImportado( $dados,$data, $this->naoImportados, $e->getMessage() ); } } else { $protocoloContrato = new Model_DbTable_ProtocoloContrato(); $protocolos = $protocoloContrato->fetchRow("contrato_id = " . $dadosContrato['id'], 'id DESC'); if( $protocolos != null ){ $log->log("Protocolos: " . print_r($protocolos->toArray(), true), Zend_Log::INFO); //verifica se é um estorno e não foi estornado do corretor if( is_numeric($dados['estornado']) && $dados['estornado'] == 1 && $protocolos['valor'] >= 0 ){ $log->log("Contrato está pago e no arquivo veio um estorno: {$dados['numero_contrato']}", Zend_Log::INFO); $dadosAtualizacao = array( 'id' => $dadosContrato['id'], 'status_proposta' => $dados['status_proposta'], 'estornado' => 1, ); $result = $modelContrato->update($dadosAtualizacao, "id = {$dadosContrato['id']}"); if( $result > 0 ){ $log->log("Contrato sinalizado como estorno: {$dados['numero_contrato']}", Zend_Log::INFO); } else { $log->log("Contrato está pago, no arquivo veio um estorno mas não pode ser alterado no sistema: {$dados['numero_contrato']}", Zend_Log::INFO); $this->_addNaoImportado( $dados,$data, $this->naoImportados, 'Contrato está pago, no arquivo veio um estorno mas não pode ser alterado no sistema.' ); } } else { $this->_addNaoImportado( $dados,$data, $this->naoImportados, 'Contrato está pago e não pode ser alterado.' ); $log->log("Contrato está pago e nada foi alterado: {$dados['numero_contrato']}", Zend_Log::INFO); } } else { $dados['id'] = $dadosContrato['id']; /* Caso o contrato encontrado já tenha corretor, não permitir atualizar o conrretor */ if( isset($dadosContrato['corretor_id']) && $dadosContrato['corretor_id'] > 0 && $dados['corretor_id'] > 0 && $dados['corretor_id'] != $dadosContrato['corretor_id'] ){ $log->log("[Contrato já tem o corretor: {$dadosContrato['corretor_id']}] Tentativa de atualização para: {$dados['corretor_id']}. ", Zend_Log::INFO); unset($dados['corretor_id']); } $dados = $this->_getCamposAtualizacao($dados); try { $log->log("Tentativa de atualizaçao do contrato: {$dadosContrato['numero_contrato']}.", Zend_Log::INFO); foreach ( $dados as $key => $value ) { $log->log("[{$key}] => {$value}", Zend_Log::INFO); } $result = $modelContrato->update($dados, "id = {$dadosContrato['id']}"); if( $result > 0 ){ $log->log("Contrato atualizado.", Zend_Log::INFO); } else { $log->log("Contrato não foi atualizado.", Zend_Log::INFO); } } catch ( Exception $e ) { $log->log("[Exception] Erro ao atualizar contrato. " . $e->getMessage(), Zend_Log::INFO); $this->_addNaoImportado( $dados,$data, $this->naoImportados, $e->getMessage() ); } } } } protected function getValue($ps, $field) { foreach ($ps as $p) { $string = str_replace("\xc2\xa0",'',$p->nodeValue); preg_match("#{$field}([^\r\n]+)#i", $string, $matches); if($matches) return $matches[1]; break; } } protected function _getCorretorId(array $data, array &$dados) { $corretor = new Model_Corretor(); $corretorId = 0; if ($data['corretor_cpf'] != null){ $dadosCorretor = $corretor->getByCpf($data['corretor_cpf']); if ($dadosCorretor != null){ $corretorId = $dadosCorretor['id']; } } $dados['corretor_id'] = $corretorId; } protected function _getClienteId(array $data, array &$dados) { $cpfCliente = $data['cpf_cliente']; $clienteModel = new Model_DbTable_Cliente(); $clienteId = 0; $cliente = $clienteModel->fetchRow("cpf = '" . String_Refatorar::formatarCpf($cpfCliente) . "'"); $dadosCliente = array( 'empresa_id' => $dados['empresa_id'], 'nome' => $data['nome_cliente'], 'cpf' => String_Refatorar::formatarCpf($cpfCliente) ); if (isset($data['numero_identidade'])) { $dadosCliente['rg'] = $data['numero_identidade']; } if (isset($data['data_nasc_cliente'])) { $dataNasc = new Zend_Date($data['data_nasc_cliente'], 'dd/MM/yy'); if ($dataNasc->toString('yy') < 70) { $dadosCliente['data_nascimento'] = $dataNasc->subYear(100)->toString('yyyy-MM-dd'); } else { $dadosCliente['data_nascimento'] = $dataNasc->toString('yyyy-MM-dd'); } } if (isset($data['nome_pai_cliente'])) { $dadosCliente['nome_pai'] = $data['nome_pai_cliente']; } if (isset($data['nome_mae_cliente'])) { $dadosCliente['nome_mae'] = $data['nome_mae_cliente']; } if (isset($data['orgao_emissor'])) { $dadosCliente['orgao_expedidor'] = $data['orgao_emissor']; } if (isset($data['endereco'])) { $dadosCliente['endereco'] = $data['endereco']; if (isset($data['numero'])) { $dadosCliente['endereco'] .= ", " . $data['numero']; } } if (isset($data['complemento'])) { $dadosCliente['complemento'] = $data['complemento']; } if (isset($data['bairro'])) { $dadosCliente['bairro'] = $data['bairro']; } if (isset($data['cidade'])) { $dadosCliente['cidade'] = $data['cidade']; } if (isset($data['uf_endereco'])) { $dadosCliente['uf'] = $data['uf_endereco']; } if (isset($data['cep'])) { $dadosCliente['cep'] = String_Refatorar::soNumeros($data['cep']); } if (isset($data['telefone_fixo'])) { $dadosCliente['fone'] = $data['telefone_fixo']; } if (isset($data['celular'])) { $dadosCliente['celular'] = $data['celular']; } if ($cliente) { try { $clienteModel->update($dadosCliente, "id = $cliente->id"); $clienteId = $cliente->id; } catch (Exception $exc) { } } else { try { $clienteId = $clienteModel->insert($dadosCliente); } catch (Exception $exc) { } } $dados['cliente_id'] = $clienteId; } protected function _getCodBarrasAde(array $data, array &$dados) { if( isset($data['codigo_barras']) ){ $dados['codigo_barras_ade'] = String_Refatorar::soNumeros($data['codigo_barras']); } } protected function _getNumeroBeneficio(array $data, array &$dados) { if( isset($data['numero_beneficio']) ){ $dados['numero_beneficio'] = String_Refatorar::soNumeros($data['numero_beneficio']); } } protected function _getEspecie(array $data, array &$dados) { if( isset($data['especie']) ){ $dados['especie'] = String_Refatorar::soNumeros($data['especie']); } } protected function _getConvenio(array $data, array &$dados) { if (isset($data['convenio'])) { $colunaConvenio = $data['convenio']; $convenio = new Model_DbTable_Convenio(); $dadosConvenio = $convenio->fetchRow("nome='" . $colunaConvenio . "'"); if ($dadosConvenio == null) { $dados['convenio_id'] = $convenio->insert(array('nome' => $data['convenio'])); } else if ($dadosConvenio['parent_id']) { //verifica se o convenio tem parent_id, se tiver, usa o parent_id $dadosParent = $convenio->fetchRow("id='" . $dadosConvenio['parent_id'] . "'"); $dados['convenio_id'] = $dadosParent['id']; } else { $dados['convenio_id'] = $dadosConvenio['id']; } } } protected function _getPrazo(array $data, array &$dados) { if( isset($data['prazo']) ){ $dados['prazo'] = $data['prazo']; } } protected function _getBanco(array $data, array &$dados) { if( isset($data['numero_banco_cliente']) ){ $dados['banco_beneficiado'] = sprintf("%03d", $data['numero_banco_cliente']); } } protected function _getAgencia(array $data, array &$dados) { if( isset($data['agencia_banco']) ){ $dados['agencia_beneficiado'] = $data['agencia_banco']; } } protected function _getConta(array $data, array &$dados) { if( isset($data['conta_banco']) ){ $dados['conta_beneficiado'] = $data['conta_banco']; } } protected function _getSaldoDevedor(array $data, array &$dados) { if( isset($data['saldo_devedor']) ){ if ($dados['tipo'] == 'REFINANCIAMENTO') { $dados['saldo_banco'] = $data['saldo_devedor']; }else{ $dados['anterior_saldo_devedor'] = $data['saldo_devedor']; } } } protected function _getFormaLiberacao(array $data, array &$dados) { if( isset($data['forma_liberacao']) ){ $formaLiberacao = $data['forma_liberacao']; $formaLiberacao = $formaLiberacao == "TED Conta Crédito" ? 'LIBERACAO VIA TED' : $formaLiberacao; $dados['forma_liberacao'] = $formaLiberacao; } } protected function _getValorBruto(array $data, array &$dados) { if(isset($data['valor_bruto'])){ $valorBruto = floatval(preg_replace('/\.(?=.*\.)/', '', str_replace(",",".",$data['valor_bruto']))); $dados['valor_bruto'] = @number_format($valorBruto, 2, ',', '.'); } } protected function _getValorLiquido(array $data, array &$dados) { if( isset($data['valor_liquido']) ){ $valorLiquido = str_replace("R$", "", $data['valor_liquido']); $valorLiquido = trim(strtok($valorLiquido, " ")); $valorLiquido = str_replace(",", "", $valorLiquido); $dados['valor_liquido'] = @number_format($valorLiquido, 2, ',', '.'); } } protected function _getValorParcela(array $data, array &$dados) { $valorParcela = isset($data['valor_prestacao']) ? trim($data['valor_prestacao']) : null; $dados['valor_prestacao'] = Core_FilterValor::filter($valorParcela); } protected function _getNumeroContrato(array $data, array &$dados) { if( isset($data['numero_contrato']) ){ $dados['numero_contrato'] = String_Refatorar::soNumeros($data['numero_contrato']); $dados['numero_ade'] = String_Refatorar::soNumeros($data['numero_contrato']); } } protected function _getDataEmissao(array $data, array &$dados) { $dataEmissao = null; if( !empty($data['data_emissao']) ){ try { $data = new Zend_Date($data['data_emissao'], $this->_dateFormat); if( $data->get('yyyy') < 1900 ){ throw new Core_Exception("Padrão de data emissão está errado. (" . $data['data_emissao'] . " -> " . $data->get('dd/MM/yyyy') . ")"); } $dataEmissao = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataEmissao = null; } } $dados['data_emissao'] = $dataEmissao; } protected function _addNaoImportado(array $sheetData, array &$naoImportados, $motivo = '') { array_push($naoImportados, array( 'numero_contrato' => $sheetData['numero_contrato'], 'tabela' => null, 'cpf' => isset($sheetData['cpf_cliente']) ? $sheetData['cpf_cliente'] : null, 'cliente' => isset($sheetData['nome_cliente']) ? $sheetData['nome_cliente'] : null, 'valor' => $sheetData['valor_bruto'] ? $sheetData['valor_bruto'] : null, 'valor_liquido' => null, 'prazo' => $sheetData['prazo'] ? $sheetData['prazo'] : null, 'codigo_atendente' => null, 'codigo_vendedor' => null, 'motivo' => $motivo )); } protected function _getEmpresaId(array $data, array &$dados) { $empresaId = 0; $corretorId = isset($dados['corretor_id']) && $dados['corretor_id'] > 0 ? $dados['corretor_id'] : 0; if( $corretorId > 0 ){ $corretor = new Model_Corretor(); $dadosCorretor = $corretor->exibir($corretorId); $empresaId = $dadosCorretor['empresa_id']; } if( !isset($dados['empresa_id']) && $empresaId <= 0 ){ $empresaId = Yuppie_Auth::getIdentity()->empresa_id; } $dados['empresa_id'] = $empresaId; } public function getArquivoOrigem() { return $this->_arquivoOrigem; } public function setBancoId($bancoId) { $this->_bancoId = $bancoId; return $this; } public function getBancoId() { return $this->_bancoId; } protected function _getTipoContrato(array $data, array &$dados) { $colunaTipoContrato = isset($data['produto']) ? $data['produto'] : null; $tipo = null; if( strpos($colunaTipoContrato, "REFIN") > -1 && strpos($data['convenio'], 'PORTAB') > -1 ){ $tipo = 'REFIN DA PORTABILIDADE'; } elseif( strpos($colunaTipoContrato, "REFIN") > -1 && strpos($data['convenio'], 'REFIN') > -1){ $tipo = "REFINANCIAMENTO"; } elseif( strpos($colunaTipoContrato, "PORTABILIDADE") > -1 && strpos($data['convenio'], 'PORTABILIDADE') > -1 ){ $tipo = "PORTABILIDADE"; } elseif( strpos($colunaTipoContrato, "NOVO") > -1 || strpos($colunaTipoContrato, "EMPRÉSTIMO") > -1 || strpos($colunaTipoContrato, "CARTÃO") > -1 ){ $tipo = "NOVO"; } $dados['tipo'] = $tipo; } protected function _getCamposAtualizacao(array &$dados) { $dadosAtualizacao = array( 'empresa_id' => $dados['empresa_id'], 'verificar_contratos' => isset($dados['verificar_contratos']) ? $dados['verificar_contratos'] : 0, 'id' => $dados['id'] ); return $dadosAtualizacao; } protected function _getStatusProposta(array $data, array &$dados) { $statusId = null; $status = new Model_StatusProposta(); $dadosStatus = $status->existe($data['status_proposta']); if( $dadosStatus == null ){ $status->setDescricao($data['status_proposta']); $statusId = $status->salvar($status); } else { $statusId = $dadosStatus['id']; } $dados['status_proposta'] = $statusId; } }
💾 保存文件
← 返回文件管理器