✏️ 正在编辑: Planilha.php
路径:
/srv/systems_dir/yuppiecred-bkp/library/Core/Banco/Planilha.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Modules\Contrato\Service\SRCCService; class Core_Banco_Planilha { protected $_bancoId; private $_inicioLaco = 2; protected $_dateFormat = 'm-d-y'; protected $_source = 'planilha'; /** @var Service_AuthService */ protected $authService; /** @var Service_Importacao */ protected $service; /** @var SRCCService */ protected $SRCCService; protected $colunas = array( 'agencia_beneficiado' => '', 'bairro' => '', 'banco_beneficiado' => '', 'celular' => '', 'cep' => '', 'cidade' => '', 'cidade_uf_cliente' => '', 'codigo_agente' => '', 'codigo_barras_ade' => '', 'codigo_convenio' => '', 'codigo_tabela' => '', 'comissao_empresa' => '', 'complemento' => '', 'conta_beneficiado' => '', 'convenio' => '', 'corretor_id' => '', 'cpf_cliente' => '', 'cpf_agente' => '', 'data_emissao' => '', 'data_expedicao' => '', 'data_liberacao' => '', 'data_nascimento' => '', 'data_primeiro_vencimento' => '', 'digitador' => '', 'digito_agencia_beneficiado' => '', 'digito_conta_beneficiado' => '', 'endereco' => '', 'especie' => '', 'fone' => '', 'forma_liberacao' => '', 'matricula' => '', 'nome_cliente' => '', 'nome_mae' => '', 'nome_pai' => '', 'nome_produto' => '', 'numero' => '', 'numero_ade' => '', 'numero_beneficio' => '', 'numero_contrato' => '', 'orgao_expedidor' => '', 'obs' => '', 'prazo' => '', 'produto' => '', 'rg' => '', 'saldo_devedor' => '', 'status_proposta' => '', 'tabela' => '', 'uf' => '', 'uf_expedidor' => '', 'valor_adiantamento' => '', 'valor_bruto' => '', 'valor_bruto_empresa' => '', 'valor_liquido' => '', 'valor_prestacao' => '', 'valor_principal' => '', 'valor_refin' => '', 'vencimento_um' => '', 'tipo_formalizacao' => '', 'taxa_emprestimo' => '', 'anterior_numero' => '', 'anterior_banco' => '', 'anterior_prazo' => '', 'anterior_parcelas_pagas' => '', 'anterior_sequencial_compra' => '', 'anterior_tipo_quitacao' => '', ); protected $colunasOpcionais = array(); protected $naoImportados = array(); protected $contratosImportados = array(); protected $_dadosContrato = null; private $_subestabelecidoId = 0; private $_arquivoOrigem = NULL; protected $_extensoesAceitas = array( "xlsx", "txt", "xls", "csv" ); function getInicioLaco() { return $this->_inicioLaco; } function setInicioLaco($inicioLaco) { if ( !is_null($inicioLaco) ) { $this->_inicioLaco = $inicioLaco; } } function getExtensoesAceitas() { return $this->_extensoesAceitas; } function setExtensoesAceitas(array $extensoesAceitas) { $this->_extensoesAceitas = $extensoesAceitas; } public function __construct($bancoId, $extensao = null) { $this->setBancoId($bancoId); $this->validarExtensao($extensao); $this->authService = service('auth_service'); $this->service = service('importacao'); $this->SRCCService = new SRCCService(); } public function setArquivoOrigem($arquivoOrigem) { $this->_arquivoOrigem = $arquivoOrigem; return $this; } public function getArquivoOrigem() { return $this->_arquivoOrigem; } public function setBancoId($bancoId) { $this->_bancoId = $bancoId; return $this; } public function getSubestabelecidoId() { return $this->_subestabelecidoId; } public function setSubestabelecidoId($subestabelecidoId) { $this->_subestabelecidoId = $subestabelecidoId; } public function getBancoId() { return $this->_bancoId; } function getExtensao() { return $this->_extensao; } function setExtensao($extensao) { $this->_extensao = $extensao; } public function getColuna($coluna) { return isset($this->colunas[$coluna]) ? trim($this->colunas[$coluna]) : null; } public function getColunas() { return $this->colunas; } public function validarExtensao($extensao) { if ($extensao) { if (! in_array($extensao, $this->_extensoesAceitas)) { throw new Core_Exception("Formato do arquivo inválido para importação. Extensões permitidas para esta importação: " . implode(', ', $this->_extensoesAceitas)); } } } public function validarColunas(array $sheetData) { $colunas = array_flip($this->getColunas()); $colunas = array_diff($colunas, $this->colunasOpcionais); unset($colunas['']); $colunas = array_keys($colunas); $sheetDataColunas = array_keys(current($sheetData)); $colunasFaltando = array_diff($colunas, $sheetDataColunas); if ($colunasFaltando) { asort($colunasFaltando); $msg = count($colunasFaltando) == 1 ? "A coluna '" . current($colunasFaltando) . "' não existe na planilha enviada. " : 'As seguintes colunas não existem na planilha enviada:<br />' . implode(', ', $colunasFaltando) . '. '; $msg .= '<br />Confira na planilha padrão deste banco o que está diferente.'; throw new Core_Exception($msg); } } public function excluirLinhasVazias(array $sheetData, $coluna = 'numero_contrato') { $cont = $this->_inicioLaco; $newSheetData = array(); if ($this->_inicioLaco > 0) { $cont = $this->_inicioLaco - 1; } foreach ($sheetData as $l => $linha) { if (! empty($linha[$this->getColuna($coluna)])) { $newSheetData[$cont ++] = $linha; } } return $newSheetData; } public function importar(array $sheetData) { $this->validarColunas($sheetData); $sheetData = $this->excluirLinhasVazias($sheetData); end($sheetData); $lastKey = key($sheetData); reset($sheetData); // laço começa em 2 pois a planilha possui um cabeçalho if (count($sheetData) > 0) { for ($i = $this->getInicioLaco(); $i <= $lastKey; $i ++) { $dados = array( 'banco_id' => $this->getBancoId(), 'corretor_id' => null, 'empresa_id' => null, 'convenio_id' => null, 'tabela_id' => null, 'cliente_id' => null, 'produto' => null, 'prazo' => 0, 'valor_bruto' => null, 'valor_liquido' => null, 'valor_prestacao' => null, 'numero_contrato' => null, 'data_emissao' => null, 'data_liberacao' => null, 'data_recebimento_comissao' => null, 'digitador' => Yuppie_Auth::getIdentity()->login, 'forma_liberacao' => null, 'comissao_corretor' => null, 'comissao_empresa' => null, 'diferimento_corretor' => null, 'status_proposta' => null, 'subestabelecido_id' => null, 'verificar_contratos' => null, 'seguranca' => null, 'cartao' => 0, 'tipo_formalizacao' => 0 ); try { $this->_getSeguranca($sheetData[$i], $dados); $sheetData[$i][$this->getColuna('cpf_cliente')] = String_Refatorar::formatarCpf($sheetData[$i][$this->getColuna('cpf_cliente')]); $this->_getTipoContrato($sheetData[$i], $dados); $this->_getProduto($sheetData[$i], $dados); $this->_getPrazo($sheetData[$i], $dados); $this->_getValorBrutoLiquido($sheetData[$i], $dados); $this->_getValorParcela($sheetData[$i], $dados); $this->_getEstornado($sheetData[$i], $dados); $this->_getNumeroContrato($sheetData[$i], $dados); $this->_getNumeroAde($sheetData[$i], $dados); $this->_getFormaLiberacao($sheetData[$i], $dados); $this->_getConvenioIdTabelaId($sheetData[$i], $dados); $this->_getCorretorId($sheetData[$i], $dados); $this->_getEmpresaId($sheetData[$i], $dados); $this->_getClienteId($sheetData[$i], $dados); $this->_getDataEmissao($sheetData[$i], $dados); $this->_getComissaoCorretorAndEmpresa($sheetData[$i], $dados); $this->_getStatusProposta($sheetData[$i], $dados); $this->_getDataLiberacao($sheetData[$i], $dados); $this->_getOutros($sheetData[$i], $dados); $this->_getDigitador($sheetData[$i], $dados); $this->_getSubestabelecido($sheetData[$i], $dados); $this->_getContratoVerificado($sheetData[$i], $dados); $this->_getBancoBeneficiado($sheetData[$i], $dados); $this->_getContaBeneficiado($sheetData[$i], $dados); $this->_getAgenciaBeneficiado($sheetData[$i], $dados); $this->_getNumeroBeneficio($sheetData[$i], $dados); $this->_getStatusCartao($sheetData[$i], $dados); $this->_getObs($sheetData[$i], $dados); $this->_getCodigoBarrasAde($sheetData[$i], $dados); $this->_getDataRecebimentoComissao($sheetData[$i], $dados); $this->_getTipoFormalizacao($sheetData[$i], $dados); $this->_getAnteriorBanco($sheetData[$i], $dados); $this->_getAnteriorNumero($sheetData[$i], $dados); $this->_getAnteriorParcelasPagas($sheetData[$i], $dados); $this->_getAnteriorPrazo($sheetData[$i], $dados); $this->_getAnteriorSequencialCompra($sheetData[$i], $dados); $this->_getAnteriorTipoQuitacao($sheetData[$i], $dados); $this->_getTaxaContrato($sheetData[$i], $dados); $this->_getEspecie($sheetData[$i], $dados); $this->_getIdadeCliente($sheetData[$i], $dados); $this->setNaoComissionadoMotivo($sheetData[$i], $dados); $this->contratosImportados[] = $dados['numero_contrato']; $this->salvarLinha($sheetData[$i], $dados); } catch ( Core_Exception $e) { $this->_addNaoImportado($dados, $sheetData[$i], $this->naoImportados, $e->getMessage()); } catch ( Zend_Db_Exception $e){ $this->_addNaoImportado($dados, $sheetData[$i], $this->naoImportados, "Erro na consulta SQL" . $e->getMessage()); } } } return $this->naoImportados; } protected function _contratoExiste($dbtable, $dados) { $where = "numero_contrato = '{$dados['numero_contrato']}' AND banco_id = {$this->getBancoId()}"; $this->_dadosContrato = $dbtable->fetchRow($where); return $this->_dadosContrato; } protected function salvarLinha($sheetData, &$dados) { /* Apenas para LOG */ $urlSistema = Yuppie_Auth::getSiteKey(); $writer = new Zend_Log_Writer_Stream("/var/log/sistemayuppie/zf_log_{$this->_source}_{$urlSistema}_" . date('dmY') . ".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: " . $this->authService->getUsuarioLogadoResolve(), Zend_Log::INFO); $dataLiberacao = $this->getColuna('data_liberacao') ? $sheetData[$this->getColuna('data_liberacao')] : null; $log->log('Formatação (Dt Liberacao): ' . $dataLiberacao, Zend_Log::INFO); $log->log('Formatação (Dt Emissao): ' . $sheetData[$this->getColuna('data_emissao')], Zend_Log::INFO); $newContrato = new Model_DbTable_Contrato(); unset($dados['base_comissao']); unset($dados['base_comissao_empresa']); $this->_contratoExiste($newContrato, $dados); $isSRCC = (int) $this->SRCCService->isSRCC($dados['nao_comissionado_motivo']); unset($dados['nao_comissionado_motivo']); if ($this->_dadosContrato == null) { if(empty($dados['cliente_id'])){ $log->log("[Exception] Erro ao adicionar contrato. Não foi possível cadastrar o cliente: Dados insuficientes.", Zend_Log::INFO); $this->_addNaoImportado($dados, $sheetData, $this->naoImportados, "Não foi possível cadastrar o cliente: Dados insuficientes."); }else{ try { $log->log("Tentativa de inserção do contrato: {$dados['numero_contrato']}", Zend_Log::INFO); $this->_logFields($log, $dados); $dados['srcc'] = $isSRCC; $result = $newContrato->insert($dados); if ($result > 0) { $dados['id'] = $result; //necessário para adicionar os recebimentos, quando fizer necessário $this->_dadosContrato = $newContrato->fetchRow(['id = ?' => $result]); $log->log("Contrato adicionado.", Zend_Log::INFO); } else { $log->log("Contrato NAO foi adicionado.", Zend_Log::INFO); $this->_addNaoImportado($dados, $sheetData, $this->naoImportados, 'Contrato não inserido.'); } } catch (Exception $e) { $log->log("[Exception] Erro ao adicionar contrato. " . $e->getMessage(), Zend_Log::INFO); $this->_addNaoImportado($dados, $sheetData, $this->naoImportados, $e->getMessage()); } } } else { $protocoloContrato = new Model_DbTable_ProtocoloContrato(); $protocolos = $protocoloContrato->fetchRow("contrato_id = " . $this->_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 (!empty($dados['estornado']) && $dados['estornado'] == 1 && is_numeric($dados['estornado']) && $protocolos['valor'] >= 0) { $log->log("Contrato está pago e no arquivo veio um estorno: {$dados['numero_contrato']}", Zend_Log::INFO); $dadosAtualizacao = [ 'id' => $this->_dadosContrato['id'], 'status_proposta' => $dados['status_proposta'], 'estornado' => 1, 'srcc' => $isSRCC ]; $result = $newContrato->update($dadosAtualizacao, "id = {$this->_dadosContrato['id']}"); if ($result > 0) { $dados['id'] = $this->_dadosContrato['id']; $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, $sheetData, $this->naoImportados, 'Contrato está pago, no arquivo veio um estorno mas não pode ser alterado no sistema.'); } } else { $this->_addNaoImportado($dados, $sheetData, $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); if ($isSRCC) { table('contrato')->setContratoSRCC($this->_dadosContrato['id'], $this->_bancoId); } } } else { /* Caso o contrato encontrado já tenha corretor, não permitir atualizar o corretor */ if (isset($this->_dadosContrato['corretor_id']) && $this->_dadosContrato['corretor_id'] > 0 && $dados['corretor_id'] > 0 && $dados['corretor_id'] != $this->_dadosContrato['corretor_id']) { $log->log("[Contrato já tem o corretor: {$this->_dadosContrato['corretor_id']}] Tentativa de atualização para: {$dados['corretor_id']}. ", Zend_Log::INFO); unset($dados['corretor_id']); } $dados['id'] = $this->_dadosContrato['id']; $dados = $this->_getCamposAtualizacao($dados); try { $log->log("Tentativa de atualizaçao do contrato: {$this->_dadosContrato['numero_contrato']}.", Zend_Log::INFO); $this->_logFields($log, $dados); $dados['srcc'] = $isSRCC; $result = $newContrato->update($dados, "id = {$this->_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, $sheetData, $this->naoImportados, $e->getMessage()); } } } Model_Contrato::gravarEspelhoImportacao($dados['id'], $sheetData, $this->getArquivoOrigem()); $this->_receberComissao($sheetData, $dados); } /** * Bancos que precisam de uma verificação de segurança mais completa * podem criar um md5 dos dados da linha da planilha para ser verificado * antes de inserir no banco * * @param array $sheetData * @param array $dados */ protected function _getSeguranca(array $sheetData, array &$dados) { } /** * * @param array $naoImportados * @param string $motivo * @return void */ protected function _addNaoImportado(array $dados, array $sheetData, array &$naoImportados, $motivo = '') { array_push($naoImportados, array( 'numero_contrato' => $sheetData[$this->getColuna('numero_contrato')], 'tabela' => $this->getColuna('tabela') && isset($sheetData[$this->getColuna('tabela')]) ? $sheetData[$this->getColuna('tabela')] : null, 'cpf' => isset($sheetData[$this->getColuna('cpf_cliente')]) ? $sheetData[$this->getColuna('cpf_cliente')] : null, 'cliente' => isset($sheetData[$this->getColuna('nome_cliente')]) ? $sheetData[$this->getColuna('nome_cliente')] : null, 'valor' => $this->getColuna('valor_bruto') && isset($sheetData[$this->getColuna('valor_bruto')]) ? $sheetData[$this->getColuna('valor_bruto')] : null, 'valor_liquido' => $this->getColuna('valor_liquido') ? $sheetData[$this->getColuna('valor_liquido')] : null, 'prazo' => $this->getColuna('prazo') ? $sheetData[$this->getColuna('prazo')] : null, 'codigo_atendente' => isset($sheetData[$this->getColuna('codigo_agente')]) ? $sheetData[$this->getColuna('codigo_agente')] : null, 'codigo_vendedor' => $this->getColuna('corretor_id') && isset($sheetData[$this->getColuna('corretor_id')]) ? $sheetData[$this->getColuna('corretor_id')] : null, 'motivo' => $motivo )); } /** * * @param array $sheetData * @param array $dados * @return void */ protected function _getProduto(array $sheetData, array &$dados) { @$colunaCodigoProduto = $sheetData[$this->getColuna('produto')]; $colunaDescricaoProduto = isset($sheetData[$this->getColuna('nome_produto')]) ? $sheetData[$this->getColuna('nome_produto')] : null; $codigoProduto = 0; if ($colunaCodigoProduto) { $produto = new Model_Produto(); $dadosProduto = $produto->existe($colunaCodigoProduto, $this->getBancoId()); if ($dadosProduto == null) { $produto->setCodigo($colunaCodigoProduto); $produto->setDescricao($colunaDescricaoProduto); $produto->setBancoId($this->getBancoId()); $result = $produto->salvar($produto); if ($result != null) { $codigoProduto = $colunaCodigoProduto; $dados['tipo'] = !empty($dados['tipo']) ? $dados['tipo'] : ""; } } else { $codigoProduto = $dadosProduto['codigo']; // adiciona o tipo do contrato $dados['tipo'] = $dadosProduto['tipo']; } } $dados['produto'] = $codigoProduto; } /** * * @param array $sheetData * @param array $dados * @return void */ protected function _getPrazo(array $sheetData, array &$dados) { if ($this->getColuna('prazo')) { $dados['prazo'] = (int)$sheetData[$this->getColuna('prazo')]; } } /** * * @param array $sheetData * @param array $dados * @return void */ protected function _getNumeroContrato(array $sheetData, array &$dados) { if ($this->getColuna('numero_contrato')) { $dados['numero_contrato'] = String_Refatorar::soNumeros($sheetData[$this->getColuna('numero_contrato')]); } } /** * * @param array $sheetData * @param array $dados * @return void */ protected function _getFormaLiberacao(array $sheetData, array &$dados) { if ($this->getColuna('forma_liberacao')) { $colunaLiberacao = strtolower($sheetData[$this->getColuna('forma_liberacao')]); $dados['forma_liberacao'] = $colunaLiberacao == 'ordem de pagamento' ? 'O/P' : 'C/C'; } } /** * * @param array $sheetData * @param array $dados * @return void */ protected function _getValorBrutoLiquido(array $sheetData, array &$dados) { $valorBruto = $this->getColuna('valor_bruto') ? String_Refatorar::parseStringToFloat($sheetData[$this->getColuna('valor_bruto')]) : 0.00; $valorLiquido = $this->getColuna('valor_liquido') ? String_Refatorar::parseStringToFloat($sheetData[$this->getColuna('valor_liquido')]) : 0.00; $dados['valor_bruto'] = number_format($valorBruto, 2, ',', '.'); $dados['valor_liquido'] = number_format($valorLiquido, 2, ',', '.'); } /** * * @param array $sheetData * @param array $dados * @return void */ protected function _getValorParcela(array $sheetData, array &$dados) { $valorParcela = $this->getColuna('valor_prestacao') ? trim($sheetData[$this->getColuna('valor_prestacao')]) : null; $dados['valor_prestacao'] = number_format(String_Refatorar::parseStringToFloat($valorParcela), 2, ',', '.'); } protected function _getConvenioIdTabelaId(array $sheetData, array &$dados) { $colunaTabela = isset($sheetData[$this->getColuna('tabela')]) ? $sheetData[$this->getColuna('tabela')] : null; $colunaConvenio = $sheetData[$this->getColuna('convenio')]; if (!empty($colunaConvenio)) { // verifica se o convenio existe $dbtConvenio = new Model_DbTable_Convenio(); $convenio = $dbtConvenio->fetchRow("nome = '$colunaConvenio'"); if ($convenio) { if ($convenio->parent_id) { // verifica se o convenio tem parent_id, se tiver, usa o parent_id $parent = $dbtConvenio->fetchRow("id = $convenio->parent_id"); $convenio = $parent ? $parent : $convenio; } $convenio_id = $convenio->id; } else { // se não existir cadastra $convenio_id = $dbtConvenio->insert(array( 'nome' => $colunaConvenio )); } $dados['convenio_id'] = $convenio_id; } if (!empty($colunaTabela)) { // verifica se a tabela existe para o convênio e banco em questão $dbtTabela = new Model_DbTable_Tabela(); $tabela = $dbtTabela->fetchRow(array( "nome LIKE '$colunaTabela'", "convenio_id = ?" => $dados['convenio_id'], "banco_id = ?" => $this->getBancoId(), "excluido <> 1" )); // se não existe, verifica se a tabela existe sem banco e/ou convênio if (!$tabela) { $tabelas = $dbtTabela->fetchAll("nome = '$colunaTabela'"); if (count($tabelas) > 0) { foreach ($tabelas as $t) { if (!$t->convenio_id || !$t->banco_id) { $t->convenio_id = !$t->convenio_id ? $dados['convenio_id'] : $t->convenio_id; $t->banco_id = !$t->banco_id ? $this->getBancoId() : $t->banco_id; if ($t->save()) { $tabela = $t; break; } } } } } //se existe, verifica se tabela tem pai if($tabela && $tabela->parent_id){ $parent = $dbtTabela->fetchRow("id = $tabela->parent_id"); $tabela = $parent ? $parent : $tabela; } // se não existe, cadastra $dados['tabela_id'] = $tabela ? $tabela->id : $dbtTabela->insert(array( 'convenio_id' => $dados['convenio_id'], 'nome' => $colunaTabela, 'banco_id' => $this->getBancoId(), 'importacao' => true )); } } /** * * @param array $sheetData * @param array $dados * @return void */ protected function _getCorretorId(array $sheetData, array &$dados) { $colCorretorId = isset($sheetData[$this->getColuna('corretor_id')]) ? $sheetData[$this->getColuna('corretor_id')] : null; $corretor = new Model_Corretor(); $corretorId = 0; if ($colCorretorId != null) { $dadosCorretor = $corretor->exibir($colCorretorId); // pesquisa pelo ID if ($dadosCorretor != null) { $corretorId = $dadosCorretor['id']; } } if ($colCorretorId != null && ($corretorId <= 0 || $corretorId == null)) { // pesquisa pelo codigo do usuario $corretorSenha = new Model_CorretorSenha(); $corretorId = $corretorSenha->getCorretorIdBySenha($colCorretorId, $dados['banco_id']); } $dados['corretor_id'] = $corretorId; } /** * * @param array $sheetData * @param array $dados * @return void */ protected function _getEmpresaId(array $sheetData, array &$dados) { $corretorId = isset($dados['corretor_id']) && $dados['corretor_id'] > 0 ? $dados['corretor_id'] : 0; if ($corretorId > 0 && empty($dados['empresa_id'])) { $corretor = new Model_Corretor(); $dadosCorretor = $corretor->exibir($corretorId); $dados['empresa_id'] = $dadosCorretor['empresa_id']; } if ( empty($dados['empresa_id']) ) { $dados['empresa_id'] = $this->authService->getUsuarioEmpresaResolve(); } } /** * * @param array $sheetData * @param array $dados * @return void */ protected function _getClienteId(array $sheetData, array &$dados) { $cpfCliente = $sheetData[$this->getColuna('cpf_cliente')]; $cliente = new Model_DbTable_Cliente(); $dadosCliente = $cliente->fetchRow("cpf = '" . String_Refatorar::formatarCpf($cpfCliente) . "'"); if ($dadosCliente) { $dados['cliente_id'] = $dadosCliente->id; } else { // Se cidade e uf vierem num mesmo campo, separar $colunaCidadeUf = $this->getColuna('cidade_uf'); if ($colunaCidadeUf && (! $this->getColuna('cidade') || ! $this->getColuna('uf'))) { $cidadeUf = explode('-', $sheetData[$colunaCidadeUf]); $sheetData[$this->getColuna('cidade')] = trim($cidadeUf[0]); $sheetData[$this->getColuna('uf')] = isset($cidadeUf[1]) ? trim($cidadeUf[1]) : null; } $dadosCliente = [ 'empresa_id' => $dados['empresa_id'], 'nome' => trim($sheetData[$this->getColuna('nome_cliente')]), 'cpf' => $cpfCliente ]; if ($this->getColuna('rg')) { $dadosCliente['rg'] = $sheetData[$this->getColuna('rg')]; } if ($this->getColuna('data_nascimento')) { $dadosCliente['data_nascimento'] = $this->_getDataNascimento($sheetData, $dados); } if ($this->getColuna('nome_pai')) { $dadosCliente['nome_pai'] = $sheetData[$this->getColuna('nome_pai')]; } if ($this->getColuna('nome_mae')) { $dadosCliente['nome_mae'] = $sheetData[$this->getColuna('nome_mae')]; } if ($this->getColuna('endereco')) { $dadosCliente['endereco'] = $sheetData[$this->getColuna('endereco')]; if (isset($sheetData[$this->getColuna('numero')])) { $dadosCliente['endereco'] .= ", " . $sheetData[$this->getColuna('numero')]; } } if ($this->getColuna('complemento')) { $dadosCliente['complemento'] = $sheetData[$this->getColuna('complemento')]; } if ($this->getColuna('bairro')) { $dadosCliente['bairro'] = $sheetData[$this->getColuna('bairro')]; } if ($this->getColuna('cidade')) { $dadosCliente['cidade'] = $sheetData[$this->getColuna('cidade')]; } if ($this->getColuna('uf')) { $dadosCliente['uf'] = $sheetData[$this->getColuna('uf')]; } if ($this->getColuna('cep')) { $dadosCliente['cep'] = $sheetData[$this->getColuna('cep')]; } if ($this->getColuna('fone')) { $dadosCliente['fone'] = isset($sheetData[$this->getColuna('fone')]) ? $sheetData[$this->getColuna('fone')] : null; } if ($this->getColuna('celular')) { $dadosCliente['celular'] = $sheetData[$this->getColuna('celular')]; } if ($this->getColuna('email')) { $dadosCliente['email'] = $sheetData[$this->getColuna('email')]; } $dados['cliente_id'] = $cliente->insert($dadosCliente); } if (!$dados['cliente_id']) { $dadosCliente = $cliente->fetchRow("nome LIKE 'CLIENTE IMPORTACAO'"); if (!$dadosCliente) { $dados['cliente_id'] = $cliente->insert([ 'empresa_id' => Yuppie_Auth::getIdentity()->empresa_id, 'nome' => 'CLIENTE IMPORTACAO', 'cpf' => '11111111111' ]); return; } $dados['cliente_id'] = $dadosCliente->id; } } protected function _getDataNascimento(array $sheetData, array &$dados) { return trim($sheetData[$this->getColuna('data_nascimento')]); } /** * * @param array $sheetData * @param array $dados * @return void */ protected function _getDataEmissao(array $sheetData, array &$dados) { $colDtEmissao = $this->getColuna('data_emissao'); if(!empty($colDtEmissao)) { $colunaDtEmissao = trim($sheetData[$colDtEmissao]); $dataEmissao = null; if (!empty($colunaDtEmissao)) { $dataEmissao = Core_Util::convertDate($colunaDtEmissao); if (is_array($dataEmissao)) { throw new Core_Exception("Não foi possível converter a data de emissão para o banco de dados. ({$colunaDtEmissao}). Padrão esperado: {$this->_dateFormat}"); } } $dados['data_emissao'] = $dataEmissao; } } protected function _getComissaoCorretorAndEmpresa(array $sheetData, array &$dados) { $dbtable = new Model_DbTable_Contrato(); $tipoComissao = is_null($dados['corretor_id']) ? 2 : 0; $dbtable->getComissaoCorretorAndEmpresa($dados, $tipoComissao); if(empty($dados['comissao_empresa'])){ $this->_getComissaoEmpresa($sheetData, $dados); } if (empty($dados['comissao_corretor']) && empty($this->_dadosContrato['comissao_corretor'])) { $this->_getComissaoCorretor($sheetData, $dados); } } protected function _getComissaoEmpresa(array $sheetData, array &$dados) { $colunaComissao = $this->getColuna('comissao_empresa') ? String_Refatorar::parseStringToFloat($sheetData[$this->getColuna('comissao_empresa')]) : 0; $dados['comissao_empresa'] = number_format($colunaComissao, 2, ',', '.'); } protected function _getComissaoCorretor(array $sheetData, array &$dados) { $colunaComissao = $this->getColuna('comissao_corretor') ? String_Refatorar::parseStringToFloat($sheetData[$this->getColuna('comissao_corretor')]) : 0; $dados['comissao_corretor'] = number_format($colunaComissao, 2, ',', '.'); } /** * * @param array $sheetData * @param array $dados * @return void */ protected function _getDataLiberacao(array $sheetData, array &$dados) { $colunaDtLib = isset($sheetData[$this->getColuna('data_liberacao')]) ? trim($sheetData[$this->getColuna('data_liberacao')]) : null; $dataLiberacao = null; if ( !empty($colunaDtLib) ) { $dataLiberacao = Core_Util::convertDate($colunaDtLib); if( is_array($dataLiberacao) ){ throw new Core_Exception("Não foi possível converter a data de liberação para o banco de dados. ({$colunaDtLib})"); } } $dados['data_liberacao'] = $dataLiberacao; } /** * * @param array $sheetData * @param array $dados * @return void */ protected function _getStatusProposta(array $sheetData, array &$dados) { $colunaStatusProposta = isset($sheetData[$this->getColuna('status_proposta')]) ? trim($sheetData[$this->getColuna('status_proposta')]) : null; $status = new Model_StatusProposta(); $dadosStatus = $status->existe($colunaStatusProposta); // verifica se o status existe if ($dadosStatus == null) { // se não existir, cadastra $status->setDescricao($colunaStatusProposta); $statusId = $status->salvar($status); } else if ($dadosStatus['parent_id']) { $statusId = $dadosStatus['parent_id']; } else { $statusId = $dadosStatus['id']; } $dados['status_proposta'] = $statusId; } /** * Método para ser sobrescrito pelas classes filhas, caso necessário * definir outros campos específicos * * @param array $sheetData * @param array $dados */ protected function _getOutros(array $sheetData, array &$dados) {} protected function _getBonusEmpresa(array $sheetData, array &$dados) {} protected function _getEstornado(array $sheetData, array &$dados) {} protected function _getDigitador(array $sheetData, array &$dados) { $colCodigoAgente = isset($sheetData[$this->getColuna('codigo_agente')]) ? $sheetData[$this->getColuna('codigo_agente')] : null; if ($colCodigoAgente != null) { $dados['digitador'] = $colCodigoAgente; } else { $dados['digitador'] = Yuppie_Auth::getIdentity()->login; } } protected function _getTipoContrato(array $sheetData, array &$dados) {} protected function _getDataRecebimentoComissao(array $sheetData, array &$dados) {} protected function _getSubestabelecido(array $sheetData, array &$dados) { $dados['subestabelecido_id'] = $this->getSubestabelecidoId(); } 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'], 'valor_liquido' => $dados['valor_liquido'], ); if( !empty($dados['data_liberacao']) ){ $dadosAtualizacao['data_liberacao'] = $dados['data_liberacao']; } if( !empty($dados['subestabelecido_id']) ){ $dadosAtualizacao['subestabelecido_id'] = $dados['subestabelecido_id']; } if( !empty($dados['status_proposta']) ){ $dadosAtualizacao['status_proposta'] = $dados['status_proposta']; } if( array_key_exists('estornado', $dados) ){ $dadosAtualizacao['estornado'] = $dados['estornado']; } if ($dados['comissao_empresa'] != NULL) { $dadosAtualizacao['comissao_empresa'] = $dados['comissao_empresa']; } if( !empty($dados['base_comissao_empresa_valor']) && $dados['base_comissao_empresa_valor'] != $this->_dadosContrato['base_comissao_empresa_valor'] ){ $dadosAtualizacao['base_comissao_empresa_valor'] = $dados['base_comissao_empresa_valor']; } if ( !empty($dados['bonus_empresa']) ) { $dadosAtualizacao['bonus_empresa'] = $dados['bonus_empresa']; } if( !empty($dados['base_comissao_empresa_bonus']) && $dados['base_comissao_empresa_bonus'] != $this->_dadosContrato['base_comissao_empresa_bonus'] ){ $dadosAtualizacao['base_comissao_empresa_bonus'] = $dados['base_comissao_empresa_bonus']; } if ($dados['comissao_corretor'] != NULL) { $dadosAtualizacao['comissao_corretor'] = $dados['comissao_corretor']; } if( !empty($dados['base_comissao_valor']) && $dados['base_comissao_valor'] != $this->_dadosContrato['base_comissao_valor'] ){ $dadosAtualizacao['base_comissao_valor'] = $dados['base_comissao_valor']; } if ( !empty($dados['bonus_corretor']) ) { $dadosAtualizacao['bonus_corretor'] = $dados['bonus_corretor']; } if( !empty($dados['base_comissao_bonus']) && $dados['base_comissao_bonus'] != $this->_dadosContrato['base_comissao_bonus'] ){ $dadosAtualizacao['base_comissao_bonus'] = $dados['base_comissao_bonus']; } if ( !empty($dados['tabela_id']) ) { $dadosAtualizacao['tabela_id'] = $dados['tabela_id']; } if( !empty($dados['tipo_formalizacao']) ){ $dadosAtualizacao['tipo_formalizacao'] = $dados['tipo_formalizacao']; } if( !empty($dados['forma_liberacao']) ){ $dadosAtualizacao['forma_liberacao'] = $dados['forma_liberacao']; } if( !empty($dados['valor_prestacao']) ){ $dadosAtualizacao['valor_prestacao'] = $dados['valor_prestacao']; } if( !empty($dados['valor_bruto']) ){ $dadosAtualizacao['valor_bruto'] = $dados['valor_bruto']; } if (isset($dados['srcc']) && $dados['srcc']) { $dadosAtualizacao = table('contrato')->getComissoesSRCC($dados['id'], $dados); } if (empty($this->_dadosContrato['corretor_id']) && $dados['corretor_id'] > 0) { $dadosAtualizacao['corretor_id'] = $dados['corretor_id']; } return $dadosAtualizacao; } protected function _getDiferimentoCorretor(array $sheetData, array &$dados) { $colunaPrazo = $sheetData[$this->getColuna('prazo')]; // pega a comissao do corretor $comissaoCorretor = 0; if (isset($dados['corretor_id']) && $dados['corretor_id'] > 0) { $corretor = new Model_Corretor(); $comissaoCorretor = $corretor->getDiferimentoCorretor($dados['corretor_id'], $dados['banco_id'], $dados['tabela_id'], $dados['convenio_id'], $dados['produto'], $colunaPrazo, $dados['data_emissao'], str_replace(array( '.', ',' ), array( '', '.' ), $dados['base_comissao_valor']), null, $dados['base_comissao']); } $dados['diferimento_corretor'] = $comissaoCorretor; } protected function _getObs(array $sheetData, array &$dados) { $colunaObs = !empty($sheetData[$this->getColuna('obs')]) ? $sheetData[$this->getColuna('obs')] : null; if ( $colunaObs ) { $dados['obs'] = $colunaObs; } } protected function _getEspecie(array $sheetData, array &$dados) { $colunaEspecie = $sheetData[$this->getColuna('especie')] ?? null; if (! empty($colunaEspecie)) { $dados['especie'] = $colunaEspecie; } } protected function _getContratoVerificado(array $sheetData, array &$dados) { $dados['verificar_contratos'] = 0; } protected function _getNumeroAde(array $sheetData, array &$dados) { $colunaAde = isset($sheetData[$this->getColuna('numero_ade')]) ? $sheetData[$this->getColuna('numero_ade')] : null; if ($colunaAde) { $dados['numero_ade'] = str_replace("'", "", trim($colunaAde)); } } protected function _getBancoBeneficiado(array $sheetData, array &$dados) { $coluna = isset($sheetData[$this->getColuna('banco_beneficiado')]) ? trim($sheetData[$this->getColuna('banco_beneficiado')]) : null; if ($coluna) { $dados['banco_beneficiado'] = $coluna; } } protected function _getAgenciaBeneficiado(array $sheetData, array &$dados) { $coluna = !empty($sheetData[$this->getColuna('agencia_beneficiado')]) ? $sheetData[$this->getColuna('agencia_beneficiado')] : null; $colunaDigito = !empty($sheetData[$this->getColuna('digito_agencia_beneficiado')]) ? $sheetData[$this->getColuna('digito_agencia_beneficiado')] : null; if ($coluna) { $dados['agencia_beneficiado'] = \String_Refatorar::soNumeros($coluna); $dados['agencia_beneficiado'] .= $colunaDigito ? "-" . $colunaDigito : ""; } } protected function _getContaBeneficiado(array $sheetData, array &$dados) { $coluna = !empty($sheetData[$this->getColuna('conta_beneficiado')]) ? $sheetData[$this->getColuna('conta_beneficiado')] : null; $colunaDigito = !empty($sheetData[$this->getColuna('digito_conta_beneficiado')]) ? $sheetData[$this->getColuna('digito_conta_beneficiado')] : null; if ($coluna) { $dados['conta_beneficiado'] = \String_Refatorar::soNumeros($coluna); $dados['conta_beneficiado'] .= $colunaDigito ? "-" . $colunaDigito : ""; } } protected function _getNumeroBeneficio(array $sheetData, array &$dados) { $coluna = !empty($sheetData[$this->getColuna('numero_beneficio')]) ? $sheetData[$this->getColuna('numero_beneficio')] : null; if ($coluna) { $dados['numero_beneficio'] = $coluna; } } public static function arraySlice(array &$array, $qtde) { $pedaco = array(); for ($i = 0; $i < $qtde; $i ++) { if (isset($array[$i])) { $pedaco[] = $array[$i]; unset($array[$i]); } } $arrayAtualizado = array(); foreach ($array as $value) { $arrayAtualizado[] = $value; } $array = $arrayAtualizado; return $pedaco; } protected function _getStatusCartao(array $sheetData, array &$dados) { $dados['cartao'] = 0; } protected function _getCodigoBarrasAde(array $sheetData, array &$dados) { $colCodBarrasAde = isset($sheetData[$this->getColuna('codigo_barras_ade')]) ? $sheetData[$this->getColuna('codigo_barras_ade')] : null; $dados['codigo_barras_ade'] = $colCodBarrasAde; } protected function _getRco(array $sheetData, array &$dados) { $rco = $this->getColuna('rco') ? trim($sheetData[$this->getColuna('rco')]) : 0.00; $dados['rco'] = $rco; } public function _logFields($log, $dados) { if( empty($dados) ){ return; } foreach ( $dados as $key => $value ) { $log->log("[{$key}] => {$value}", Zend_Log::INFO); } } protected function _getTipoFormalizacao(array $sheetData, array &$dados) { $dados['tipo_formalizacao'] = 0; if ( !empty($sheetData[$this->getColuna('tipo_formalizacao')]) && stristr($sheetData[$this->getColuna('tipo_formalizacao')], 'Digital' )) { $dados['tipo_formalizacao'] = 1; } if (empty($dados['tipo_formalizacao'])) { $dados['tipo_formalizacao'] = Model_DbTable_BancoTiposFormalizacao::getTipoFormalizacaoBanco( $sheetData[$this->getColuna('tipo_formalizacao')], $dados['banco_id'] ); } } protected function _getAnteriorNumero(array $sheetData, array &$dados) { $coluna = !empty($sheetData[$this->getColuna('anterior_numero')]) ? $sheetData[$this->getColuna('anterior_numero')] : null; if ( !empty($coluna) ) { $dados['anterior_numero'] = $coluna; } } protected function _getAnteriorPrazo(array $sheetData, array &$dados) { $coluna = !empty($sheetData[$this->getColuna('anterior_prazo')]) ? $sheetData[$this->getColuna('anterior_prazo')] : null; if ( !empty($coluna) ) { $dados['anterior_prazo'] = $coluna; } } protected function _getAnteriorParcelasPagas(array $sheetData, array &$dados) { $coluna = !empty($sheetData[$this->getColuna('anterior_parcelas_pagas')]) ? $sheetData[$this->getColuna('anterior_parcelas_pagas')] : null; if ( !empty($coluna) ) { $dados['anterior_parcelas_pagas'] = $coluna; } } protected function _getAnteriorSequencialCompra(array $sheetData, array &$dados) { $coluna = !empty($sheetData[$this->getColuna('anterior_sequencial_compra')]) ? $sheetData[$this->getColuna('anterior_sequencial_compra')] : null; if ( !empty($coluna) ) { $dados['anterior_sequencial_compra'] = $coluna; } } protected function _getAnteriorTipoQuitacao(array $sheetData, array &$dados) { $coluna = !empty($sheetData[$this->getColuna('anterior_tipo_quitacao')]) ? $sheetData[$this->getColuna('anterior_tipo_quitacao')] : null; if ( !empty($coluna) ) { $dados['anterior_tipo_quitacao'] = $coluna; } } protected function _getAnteriorBanco(array $sheetData, array &$dados) { $coluna = !empty($sheetData[$this->getColuna('anterior_banco')]) ? $sheetData[$this->getColuna('anterior_banco')] : null; if ( !empty($coluna) ) { $dados['anterior_banco'] = $coluna; } } protected function _receberComissao(array $sheetData, array &$dados) { } protected function _getTaxaContrato(array $sheetData, array &$dados) { $colunaTaxa = $sheetData[$this->getColuna('taxa_emprestimo')] ?? null; $dados['taxa_contrato'] = number_format(String_Refatorar::parseStringToFloat($colunaTaxa), 2, ',', '.'); } protected function _getIdadeCliente(array $sheetData, array &$dados) { $colunaData = $sheetData[$this->getColuna('data_nascimento')] ?? null; if(empty($colunaData)) { return; } $dataNascimento = Core_Util::convertDate($colunaData); if (is_array($dataNascimento)) { throw new Core_Exception("Não foi possível converter a data de " . "nascimento para o banco de dados. ({$colunaData}). " . "Padrão esperado: {$this->_dateFormat}"); } $now = Zend_Date::now(); $dados['idade_cliente'] = (int)$now->subDate($dataNascimento, Zend_Date::YEAR)->get('YY'); } /** * @param array $sheetData * @param array $dados */ public function setNaoComissionadoMotivo(array $sheetData, array &$dados) { $dados['nao_comissionado_motivo'] = !empty($this->getColuna('nao_comissionado_motivo')) ? $sheetData[$this->getColuna('nao_comissionado_motivo')] : null; } public function _getClienteIdBB($sheetData, &$dados) { $digits = new Zend_Filter_Digits(); $cpfCliente = $digits->filter($sheetData[$this->getColuna('cpf_cliente')]); $nomeCliente = $sheetData[$this->getColuna('nome_cliente')]; $dbtable = new Model_DbTable_Cliente(); if (!empty($cpfCliente)) { if (($dadosCliente = $dbtable->fetchRow("cpf LIKE '{$cpfCliente}'")) != null) { $dados['cliente_id'] = $dadosCliente->id; } else { $dados['cliente_id'] = $dbtable->insert([ 'empresa_id' => $dados['empresa_id'], 'nome' => $nomeCliente, 'cpf' => $cpfCliente ]); } } if (!$dados['cliente_id']) { $dadosCliente = $dbtable->fetchRow("nome LIKE 'CLIENTE IMPORTACAO'"); if (!$dadosCliente) { $dados['cliente_id'] = $dbtable->insert([ 'empresa_id' => Yuppie_Auth::getIdentity()->empresa_id, 'nome' => 'CLIENTE IMPORTACAO', 'cpf' => '11111111111' ]); return ; } $dados['cliente_id'] = $dadosCliente->id; } } }
💾 保存文件
← 返回文件管理器