✏️ 正在编辑: MeuLayout.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Banco/Planilha/MeuLayout.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Modules\Contrato\Service\SRCCService; class Core_Banco_Planilha_MeuLayout extends Core_Banco_Planilha { protected $_dateFormat = 'd/m/Y'; protected $_updateColumns = array(); protected $colunas = array( 'agencia_beneficiado' => '', 'bairro' => '', 'banco_beneficiado' => '', 'celular' => '', 'cep' => '', 'cidade' => '', 'cidade_uf_cliente' => '', 'codigo_agente' => '', 'codigo_convenio' => '', 'codigo_tabela' => '', 'comissao_corretor' => '', 'comissao_empresa' => '', 'bonus_corretor' => '', 'bonus_empresa' => '', 'diferimento_corretor' => '', 'complemento' => '', 'conta_beneficiado' => '', 'convenio' => '', 'corretor_id' => '', 'cpf_cliente' => '', 'cpf_agente' => '', 'data_emissao' => '', 'data_expedicao' => '', 'data_liberacao' => '', 'data_nascimento' => '', 'data_primeiro_vencimento' => '', 'digitador' => '', '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' => '', // Identificação de Estorno 'valor_liquido' => '', 'valor_prestacao' => '', 'valor_principal' => '', 'valor_refin' => '', 'vencimento_um' => '', 'banco' => '', 'data_recebimento_comissao' => '', 'tipo_formalizacao' => '', 'taxa_contrato' => '', 'midia_origem' => '', 'tipo_contrato' => '' ); private $_meuLayout = NULL; private $_bancoGenerico = NULL; private $_camposClientes = NULL; public function getMeuLayout() { return $this->_meuLayout; } public function setMeuLayout($meuLayout) { $this->_meuLayout = $meuLayout; } public function getBancoGenerico() { return $this->_bancoGenerico; } public function setBancoGenerico($bancoGenerico) { $this->_bancoGenerico = $bancoGenerico; } public function importar(array $sheetData) { $this->_populateColunas(); $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' => null, 'corretor_id' => null, 'empresa_id' => null, 'convenio_id' => null, 'tabela_id' => null, 'cliente_id' => null, 'produto' => null, 'prazo' => null, '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, 'numero_beneficio' => null, 'subestabelecido_id' => null, 'verificar_contratos' => null, 'seguranca' => null, 'cartao' => null, 'bonus_corretor' => null, 'bonus_empresa' => null, 'diferimento_corretor' => null, 'data_recebimento_comissao' => null ); try { $this->_getBancoId($sheetData[$i], $dados); $this->_getSeguranca($sheetData[$i], $dados); $sheetData[$i][$this->getColuna('cpf_cliente')] = !empty($sheetData[$i][$this->getColuna('cpf_cliente')]) ? String_Refatorar::formatarCpf( $sheetData[$i][$this->getColuna('cpf_cliente')]) : null; $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->_getNumeroBeneficio($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->_getDataRecebimentoComissao($sheetData[$i], $dados); $this->_getBancoBeneficiado($sheetData[$i], $dados); $this->_getAgenciaBeneficiado($sheetData[$i], $dados); $this->_getContaBeneficiado($sheetData[$i], $dados); $this->_getStatusCartao($sheetData[$i], $dados); $this->_getObs($sheetData[$i], $dados); $this->_getEspecie($sheetData[$i], $dados); $this->_getTaxaContrato($sheetData[$i], $dados); $this->_getTipoFormalizacao($sheetData[$i], $dados); $this->_getIdadeCliente($sheetData[$i], $dados); $this->getSRCC($sheetData[$i], $dados); $this->_getMidiaOrigem($sheetData[$i], $dados); $this->_getBonusEmpresa($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"); break; } catch ( Exception $e ) { $this->_addNaoImportado( $dados, $sheetData[$i], $this->naoImportados, $e->getMessage() ); } } } return $this->naoImportados; } protected function salvarLinha($sheetData, &$dados) { $dataLiberacao = null; /* Apenas para LOG */ $urlSistema = Yuppie_Auth::getSiteKey(); $writer = new Zend_Log_Writer_Stream("/var/log/sistemayuppie/zf_log_planilha_{$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: " . Yuppie_Auth::getIdentity()->login, Zend_Log::INFO); if( $this->getColuna('data_liberacao') != null ){ $dataLiberacao = $sheetData[$this->getColuna('data_liberacao')]; } $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(); //verifica se o contrato existe $dadosContrato = $this->_contratoExiste($newContrato, $dados); $protocolos = null; $isSRCC = $dados['srcc'] ?? 0; 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); } $result = $newContrato->insert($dados); if( $result > 0 ){ $dados['id'] = $result; if (!empty($dados['token_proposta']) && $dados['numero_contrato'] == "AUTO") { $newContrato->updateNumeroContrato(['numero_contrato' => $dados['id'] . '-AUTO'], $dados['id']); } $log->log("Contrato adicionado.", Zend_Log::INFO); } else { $log->log("Contrato não foi adicionado.", Zend_Log::INFO); } if( $result <= 0 ){ $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 { $dados['id'] = $dadosContrato['id']; $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, 'srcc' => $isSRCC ); $result = $newContrato->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, $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); } } else { $dados['id'] = $dadosContrato['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); } $dados['srcc'] = $isSRCC; $result = $newContrato->update($dados, "id = {$dadosContrato['id']}"); if( $result > 0 ){ $log->log("Contrato atualizado.", Zend_Log::INFO); } else { $log->log("Contrato NAO foi 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()); } protected function _getCorretorId(array $sheetData, array &$dados) { $colCorretorId = !empty(trim($sheetData[$this->getColuna('corretor_id')])) ? $sheetData[$this->getColuna('corretor_id')] : null; $colDigitador = !empty(trim($sheetData[$this->getColuna('digitador')])) ? trim($sheetData[$this->getColuna('digitador')]) : null; $colAgente = !empty(trim($sheetData[$this->getColuna('codigo_agente')])) ? trim($sheetData[$this->getColuna('codigo_agente')]) : null; $corretorIdComplemento = !empty(trim($sheetData[$this->getColuna('complemento')])) ? trim($sheetData[$this->getColuna('complemento')]) : null; $colCodigoCorretor = $colAgente ? $colAgente : $colDigitador; $corretor = new Model_Corretor(); if ($colCorretorId) { $dadosCorretor = $corretor->exibir($colCorretorId); if ($dadosCorretor) { $dados['corretor_id'] = $dadosCorretor->id; return; } } if (empty($colCodigoCorretor)) { $dados['corretor_id'] = null; return; } $corretorSenha = new Model_CorretorSenha(); $corretorBySenha = $corretorSenha->getCorretorBySenha($colCodigoCorretor, $dados['banco_id']); if (empty($corretorBySenha)) { $dados['corretor_id'] = null; return; } $dados['corretor_id'] = $corretorBySenha->id; $modelBanco = new Model_DbTable_Banco(); $banco = $modelBanco->fetchRow("id = {$this->_bancoId}"); if ($banco->obedecer_id && $corretorBySenha->obedecer_id && is_numeric($corretorIdComplemento)) { $dadosCorretor = $corretor->exibir($corretorIdComplemento); if ($dadosCorretor) { $dados['corretor_id'] = $dadosCorretor->id; return; } } $dados['verificar_contratos'] = 1; } protected function _getValorBrutoLiquido(array $sheetData, array &$dados) { $valorBruto = $this->getColuna('valor_bruto') ? trim($sheetData[$this->getColuna('valor_bruto')]) : null; $valorLiquido = $this->getColuna('valor_liquido') ? trim($sheetData[$this->getColuna('valor_liquido')]) : null; $dados['valor_bruto'] = number_format(String_Refatorar::parseStringToFloat($valorBruto), 2, ',', '.'); $dados['valor_liquido'] = number_format(String_Refatorar::parseStringToFloat($valorLiquido), 2, ',', '.'); } protected function _getComissaoEmpresa(array $sheetData, array &$dados) { $comissaoEmpresa = $this->getColuna('comissao_empresa'); if( isset($comissaoEmpresa) && !empty($comissaoEmpresa) ){ $valorComissao = $sheetData[$this->getColuna('comissao_empresa')]; $dados['comissao_empresa'] = str_replace('.', ',', $valorComissao); } else { $colunaPrazo = $sheetData[$this->getColuna('prazo')]; //pega a comissao da empresa $comissaoEmpresa = 0; if( $dados['empresa_id'] > 0 ){ $empresa = new Model_Empresa(); $comissaoEmpresa = $empresa->getComissao( $dados['empresa_id'], isset($dados['banco_id']) ? $dados['banco_id'] : 0, isset($dados['tabela_id']) ? $dados['tabela_id'] : 0, isset($dados['convenio_id']) ? $dados['convenio_id'] : 0, isset($dados['produto']) ? $dados['produto'] : 0, $colunaPrazo, $dados['data_emissao'], str_replace(array( '.', ',' ), array( '', '.' ), $dados['base_comissao_empresa_valor']), $dados['base_comissao_empresa'] ); } $dados['comissao_empresa'] = $comissaoEmpresa; } } protected function _getCamposAtualizacao(array &$dados) { $updateColumns = $this->_updateColumns; $dadosAtualizacao = array( 'id' => $dados['id'] ); if ($updateColumns) { foreach ($updateColumns as $campo => $value) { if (in_array($campo, $this->_camposClientes)) { continue; } if ($value) { switch ($campo) { case 'convenio': $dadosAtualizacao['convenio_id'] = isset($dados['convenio_id']) ? $dados['convenio_id'] : null; break; case 'tabela': $dadosAtualizacao['tabela_id'] = isset($dados['tabela_id']) ? $dados['tabela_id'] : null; break; case 'produto': $dadosAtualizacao['tipo'] = isset($dados['tipo']) ? $dados['tipo'] : null; $dadosAtualizacao['produto'] = isset($dados['produto']) ? $dados['produto'] : null; break; case 'cpf_cliente': if (!empty($dados['cliente_id'])) { $dadosAtualizacao['cliente_id'] = $dados['cliente_id']; } break; case 0: default: $dadosAtualizacao[$campo] = isset($dados[$campo]) ? $dados[$campo] : null; } } } } return $dadosAtualizacao; } protected function _getDigitador(array $sheetData, array &$dados) { $colDigitador = isset($sheetData[$this->getColuna('digitador')]) ? trim($sheetData[$this->getColuna('digitador')]) : null; $colAgente = isset($sheetData[$this->getColuna('codigo_agente')]) ? trim($sheetData[$this->getColuna('codigo_agente')]) : null; $colCodigoCorretor = $colAgente ? $colAgente : $colDigitador; if ($colCodigoCorretor != null) { $dados['digitador'] = $colCodigoCorretor; } } protected function _getNumeroBeneficio(array $sheetData, array &$dados) { $colNumeroBeneficio = isset($sheetData[$this->getColuna('numero_beneficio')]) ? $sheetData[$this->getColuna('numero_beneficio')] : null; if( $colNumeroBeneficio != null ){ $dados['numero_beneficio'] = $colNumeroBeneficio; } } protected function _getEstornado(array $sheetData, array &$dados) { $colunaValorLiquido = $this->getColuna('valor_liquido'); if( !empty($colunaValorLiquido) ){ $valorLiquido = $sheetData[$this->getColuna('valor_liquido')]; $dados['estornado'] = $valorLiquido >= 0 ? 0 : 1; } } protected function _getDataEmissao(array $sheetData, array &$dados) { $colunaDtEmissao = $sheetData[$this->getColuna('data_emissao')]; $dataEmissao = null; if( !empty($colunaDtEmissao) ){ //Ajuste para corrigir importações das planilhas if( $this->_dateFormat != "yyyy-MM-dd" && strstr($colunaDtEmissao, "-") ){ $this->_dateFormat = "MM-dd-yy"; } if( preg_match("/[0-9]{2}\/[0-9]{2}\/[0-9]{4}[0-9]{2}\:[0-9]{2}\:[0-9]{2}/", $colunaDtEmissao) ){ $colunaDtEmissao = preg_replace('/[0-9]{2}\:[0-9]{2}\:[0-9]{2}/i', "", $colunaDtEmissao); } //caso a data não possua ano ou esteja vazio, da erro. if( !preg_match("/((([0-9]{2})\/([0-9]{2})\/([0-9]{4}))|(([0-9]{2})\-([0-9]{2})\-([0-9]{2})))/", $colunaDtEmissao) ){ throw new Core_Exception("Padrão de data emissão está errado. ($colunaDtEmissao), favor preencher com: 'dd/mm/aaaa' ou 'mm-dd-aa'"); } $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})"); } } $dados['data_emissao'] = $dataEmissao; } protected function _getDataLiberacao(array $sheetData, array &$dados) { $colunaDtLib = isset($sheetData[$this->getColuna('data_liberacao')]) ? $sheetData[$this->getColuna('data_liberacao')] : null; $dataLiberacao = null; if( !empty($colunaDtLib) ){ /** * caso a data não possua ano ou esteja vazio, da erro. */ if( isset($colunaDtLib) && !preg_match("/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/", $colunaDtLib) ){ throw new Exception("Padrão de data liberação está errado. (" . $colunaDtLib . "), favor preencher com: 'dd/mm/aaaa'"); } if( preg_match("/[0-9]{2}\/[0-9]{2}\/[0-9]{4}[0-9]{2}\:[0-9]{2}\:[0-9]{2}/", $colunaDtLib) ){ $colunaDtLib = preg_replace('/[0-9]{2}\:[0-9]{2}\:[0-9]{2}/i', "", $colunaDtLib); } /* Ajuste para corrigir importações das planilhas */ if( $this->_dateFormat != "yyyy-MM-dd" && strstr($colunaDtLib, "-") ){ $this->_dateFormat = "MM-dd-yy"; } $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; } protected function _getConvenioIdTabelaId(array $sheetData, array &$dados) { $colunaCodigoTabela = isset($sheetData[$this->getColuna('codigo_tabela')]) ? trim($sheetData[$this->getColuna('codigo_tabela')]) : null; $colunaTabela = isset($sheetData[$this->getColuna('tabela')]) ? trim($sheetData[$this->getColuna('tabela')]) : null; $colunaConvenio = isset($sheetData[$this->getColuna('convenio')]) ? trim($sheetData[$this->getColuna('convenio')]) : null; $colunaTipoFormalizacao = isset($sheetData[$this->getColuna('tipo_formalizacao')]) ? trim($sheetData[$this->getColuna('tipo_formalizacao')]) : null; $tipoFormalizacao = stristr($colunaTipoFormalizacao, "Digital") ? 1 : 0; if (!empty($colunaConvenio)) { $convenio = new Model_DbTable_Convenio(); $dadosConvenio = $convenio->fetchRow("nome='" . $colunaConvenio . "'"); //verifica se o convenio existe if ($dadosConvenio == null) { // se não existir cadastra $dados['convenio_id'] = $convenio->insert(array( 'nome' => $colunaConvenio )); } elseif ($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']; } } if (empty($dados['convenio_id'])) { throw new Core_Exception("Convênio não localizado ou não informado."); } if (!empty($colunaTabela)) { $dados['tabela_id'] = (new Model_Tabela())->getOrCreateTabelaByNome($colunaCodigoTabela, $colunaTabela, $dados['convenio_id'], $this->getBancoId(), $tipoFormalizacao); } } protected function _populateColunas() { $layout = new Model_Layouts(); $layoutLetras = $layout->getLayoutLetras($this->getMeuLayout()); $colunas = $this->getColunas(); $mountColumns = array(); $changeColumns = array(); $updateColumns = array(); //Para atualizar os campos com _id $arrayCollumnsId = array('tabela', 'convenio'); $valueCampo = ''; $dbContrato = new Model_DbTable_Contrato(); $infoContrato = $dbContrato->info(); $dbCliente = new Model_DbTable_Cliente(); $infoCliente = $dbCliente->info(); foreach ( $layoutLetras as $values ) { $mountColumns[$values->campo] = $values->letra; $changeColumns = array_merge($colunas, $mountColumns); if(in_array($values->campo, $arrayCollumnsId)){ $valueCampo = $values->campo.'_id'; }else{ $valueCampo = $values->campo; } //só adiciona as colunas das tabelas contratos e clientes if( in_array($valueCampo, $infoContrato['cols']) || in_array($valueCampo, $infoCliente['cols']) ){ $updateColumns[$valueCampo] = $values->atualizar_campo; } } $this->_updateColumns = array_filter($updateColumns); $this->colunas = $changeColumns; } protected function _getBancoId(array $sheetData, array &$dados) { $bancoId = null; if( $this->getBancoGenerico() ){ $banco = isset($sheetData[$this->getColuna('banco')]) && !empty($sheetData[$this->getColuna('banco')]) ? $sheetData[$this->getColuna('banco')] : null; if( !$banco ){ throw new Exception("Campo 'Banco' do layout banco está vazio, favor inserir."); } $existBanco = Model_Banco::bancoPorNome($banco); if( !$existBanco ){ throw new Exception("Banco: '{$banco}' não encontrado no sistema."); } $bancoId = $existBanco; } else { $bancoId = $this->getBancoId(); } if( !$bancoId ){ throw new Exception("Banco não identificado."); } $this->_bancoId = $bancoId; $dados['banco_id'] = $bancoId; } /** * * @param array $sheetData * @param array $dados * @return void */ protected function _getProduto(array $sheetData, array &$dados) { $colunaCodigoProduto = trim($sheetData[$this->getColuna('produto')]); $colunaDescricaoProduto = isset($sheetData[$this->getColuna('nome_produto')]) ? trim($sheetData[$this->getColuna('nome_produto')]) : null; $tipo = null; $codigoProduto = null; if ($colunaCodigoProduto) { $produto = new Model_Produto(); $layout = (new Model_DbTable_Layouts())->fetchRow(["id = ?" => $this->getMeuLayout()]); if ($layout->produto_descricao == 1) { $dadosProduto = $produto->existe($colunaCodigoProduto, $this->getBancoId(), $colunaDescricaoProduto); } else { $dadosProduto = $produto->existe($colunaCodigoProduto, $this->getBancoId()); } if (!empty($dadosProduto)) { $codigoProduto = $dadosProduto['codigo']; $tipo = $dadosProduto['tipo']; } else { $result = (new Model_DbTable_Produto())->insert([ 'codigo' => $colunaCodigoProduto, 'descricao' => $colunaDescricaoProduto, 'banco_id' => $this->getBancoId() ]); if ($result) { $codigoProduto = $colunaCodigoProduto; $tipo = null; } } } $dados['tipo'] = $tipo; $dados['produto'] = $codigoProduto; } /** * * @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 ){ $clienteId = $dadosCliente->id; $this->_atualizarDadosCliente($sheetData, $clienteId); } parent::_getClienteId($sheetData, $dados); } protected function _atualizarDadosCliente(array $sheetData, $clienteId) { $dadosCliente = array(); $dbtable = new Model_DbTable_Cliente(); if( $clienteId <= 0 ){ return null; } $updateColumns = $this->_updateColumns; if( $updateColumns ){ $this->_camposClientes = [ 'rg', 'data_nascimento', 'endereco', 'complemento', 'bairro', 'cidade', 'uf', 'cep', 'fone', 'celular', 'email' ]; foreach ( $updateColumns as $campo => $value ) { if( in_array($campo, $this->_camposClientes) ){ if( $campo == 'data_nascimento' ){ //caso a data não possua ano ou esteja vazio, da erro. if( !preg_match("/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/", $sheetData[$this->getColuna($campo)]) ){ continue; } //Ajuste para corrigir importações das planilhas if( $this->_dateFormat != "yyyy-MM-dd" && strstr($sheetData[$this->getColuna($campo)], "-") ){ $this->_dateFormat = "MM-dd-yy"; } $dataNascimento = Core_Util::convertDate($sheetData[$this->getColuna($campo)]); if( is_array($dataNascimento) ){ continue; } $sheetData[$this->getColuna($campo)] = $dataNascimento; } $verifiedCamp = $this->getColuna($campo); if( !empty($verifiedCamp) ){ $dadosCliente[$campo] = $sheetData[$verifiedCamp]; } $dadosCliente = array_filter($dadosCliente); if( $dadosCliente ){ $dbtable->update($dadosCliente, "id = {$clienteId}"); } } } } } protected function _getDataRecebimentoComissao(array $sheetData, array &$dados) { $colunaDtRecebimentoComissao = isset($sheetData[$this->getColuna('data_recebimento_comissao')]) ? $sheetData[$this->getColuna('data_recebimento_comissao')] : null; if( !empty($colunaDtRecebimentoComissao) ){ //Ajuste para corrigir importações das planilhas if( $this->_dateFormat != "yyyy-MM-dd" && strstr($colunaDtRecebimentoComissao, "-") ){ $this->_dateFormat = "MM-dd-yy"; } //caso a data não possua ano ou esteja vazio, da erro. if( !preg_match("/((([0-9]{2})\/([0-9]{2})\/([0-9]{4}))|(([0-9]{2})\-([0-9]{2})\-([0-9]{2})))/", $colunaDtRecebimentoComissao) ){ throw new Core_Exception("Padrão de data emissão está errado. ($colunaDtRecebimentoComissao), favor preencher com: 'dd/mm/aaaa' ou 'mm-dd-aa'"); } $dataRecebimentoComissao = Core_Util::convertDate($colunaDtRecebimentoComissao); if( is_array($dataRecebimentoComissao) ){ throw new Core_Exception("Padrão da data de recebimento está errado. ($colunaDtRecebimentoComissao), favor preencher com: 'dd/mm/aaaa' ou 'mm-dd-aa'"); } $dados['data_recebimento_comissao'] = $dataRecebimentoComissao; } } /** * Sobreposição para pegar o número do contrato alfanumerico * @param array $sheetData * @param array $dados */ protected function _getNumeroContrato(array $sheetData, array &$dados) { $banco = new Model_Banco(); $dadosBanco = $banco->exibir($this->getBancoId()); if (!$dadosBanco) { throw new Core_Exception("Banco não localizado na importação de layout próprio."); } if ($this->getColuna('numero_contrato')) { if ($dadosBanco->importar_token_proposta) { $dados['token_proposta'] = trim($sheetData[$this->getColuna('numero_contrato')]); $dados['numero_contrato'] = "AUTO"; } elseif ($dadosBanco->contrato_alfanumerico) { $dados['numero_contrato'] = str_replace("'", "", trim($sheetData[$this->getColuna('numero_contrato')])); } else { $dados['numero_contrato'] = String_Refatorar::soNumeros( $sheetData[$this->getColuna('numero_contrato')] ); } } } public function getPopulateColunas() { $this->_populateColunas(); } /** * Se no arquivo tem uma coluna informando o tipo de formalização, então * lê do arquivo. Senão, puxa da tabela cadastrada. * @param array $sheetData * @param array $dados * @return type */ protected function _getTipoFormalizacao(array $sheetData, array &$dados) { $colunaTipoFormalizacao = isset($sheetData[$this->getColuna('tipo_formalizacao')]) ? trim($sheetData[$this->getColuna('tipo_formalizacao')]) : null; if (!empty($colunaTipoFormalizacao)) { $dados['tipo_formalizacao'] = stristr($colunaTipoFormalizacao, "Digital") ? 1 : 0; if (empty($dados['tipo_formalizacao'])) { $dados['tipo_formalizacao'] = Model_DbTable_BancoTiposFormalizacao::getTipoFormalizacaoBanco( $colunaTipoFormalizacao, $dados['banco_id'] ); } return; } if (empty($dados['tabela_id'])){ return; } $dados['tipo_formalizacao'] = (new Model_Tabela()) ->exibir($dados['tabela_id']) ->tipo_formalizacao; } /** * @param array $sheetData * @param array $dados */ public function getSRCC(array $sheetData, array &$dados): void { $flagSRCC = $sheetData[$this->getColuna('srcc')]; $dados['srcc'] = (int) (new SRCCService())->isFlagSRCC($flagSRCC); } protected function _getMidiaOrigem(array $sheetData, array &$dados) { $midia = $this->getColuna('midia_origem') ? trim($sheetData[$this->getColuna('midia_origem')]) : null; if (empty($midia)) { return; } $model = (new Model_MidiaOrigem())->existe($midia); $dados['midia_origem_id'] = $model->id; } protected function _getBonusEmpresa(array $sheetData, array &$dados) { $colunaComissao = $sheetData[$this->getColuna('bonus_empresa')] ?? 0; $dados['bonus_empresa'] = $colunaComissao; } protected function _contratoExiste($dbtable, $dados) { $banco = new Model_Banco(); $dadosBanco = $banco->exibir($this->getBancoId()); if ($dadosBanco->importar_token_proposta) { $where = "token_proposta = '{$dados['token_proposta']}' AND banco_id = {$dadosBanco->id}"; $this->_dadosContrato = $dbtable->fetchRow($where); return $this->_dadosContrato; } return parent::_contratoExiste($dbtable, $dados); } protected function _getTaxaContrato(array $sheetData, array &$dados) { $colunaTaxa = $sheetData[$this->getColuna('taxa_contrato')] ?? null; $dados['taxa_contrato'] = number_format(String_Refatorar::parseStringToFloat($colunaTaxa), 2, ',', '.'); } }
💾 保存文件
← 返回文件管理器