✏️ 正在编辑: Extrator.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Banco/Planilha/Pan/Extrator.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Modules\Contrato\Service\SRCCService; class Core_Banco_Planilha_Pan_Extrator { /** @var string[] */ public const REGISTROS_ACEITOS = [ "001", "002", "006", "011" ]; protected $bancoId; protected $_dateFormat = 'yyyyMMdd'; protected $naoImportados = array(); protected $contratosImportados = array(); protected $_log = null; protected $_versaoLayout = "0003"; protected $_dadosContrato = null; /** @var Service_Importacao */ private $service; /** @var SRCCService */ private $SRCCService; /** * @param $bancoId */ public function __construct($bancoId) { $this->service = service('importacao'); $this->SRCCService = new SRCCService(); $this->setBancoId($bancoId); } public function setArquivoOrigem($arquivoOrigem) { $this->_arquivoOrigem = $arquivoOrigem; return $this; } public function getArquivoOrigem() { return $this->_arquivoOrigem; } function getBancoId() { return $this->bancoId; } function setBancoId($bancoId) { $this->bancoId = $bancoId; } public function getSubestabelecidoId() { return $this->_subestabelecidoId; } public function setSubestabelecidoId($subestabelecidoId) { $this->_subestabelecidoId = $subestabelecidoId; } function getInicioLaco() { return $this->_inicioLaco; } function setInicioLaco($inicioLaco) { if (! is_null($inicioLaco)) { $this->_inicioLaco = $inicioLaco; } } public function getColuna($coluna, $cod) { return isset($this->colunas[$coluna]) ? trim($this->colunas[$coluna]) : null; } public function getColunas() { return $this->colunas; } protected function _validateLayout(array $sheetData) { if( isset($sheetData[0]) ){ $linha = str_replace("\0", "", substr($sheetData[0], 2)); if( substr($linha, 0, 3) == "000" ){ $versaoLayout = substr($linha, 20, 4); if( $versaoLayout != $this->_versaoLayout ){ throw new Core_Exception("Versão ({$versaoLayout}) do layout do arquivo está diferente da implementada no Yuppie."); } } } } public function importar($arquivo) { $urlSistema = Yuppie_Auth::getSiteKey(); $writer = new Zend_Log_Writer_Stream("/var/log/sistemayuppie/zf_log_pan_extrator_{$urlSistema}_" . date('dmY') . ".txt"); $classeChamada = get_class($this); $this->_log = new Zend_Log($writer); $this->_log->log("IMPORTAÇÃO: " . $classeChamada, Zend_Log::INFO); $this->_log->log('ARQUIVO IMPORTADO: ' . print_r($this->getArquivoOrigem(), true), Zend_Log::INFO); $this->_log->log("Usuário logado: " . Yuppie_Auth::getIdentity()->login, Zend_Log::INFO); $this->_validateLayout($arquivo); $sheetData = $this->obtencaoDados($arquivo); if( $sheetData ){ $this->processar($sheetData); } return $this->naoImportados; } protected function processar(array $sheetData) { if( count($sheetData) <= 0 ){ return; } $this->_log->log('########## INÍCIO DO PROCESSAMENTO #############', Zend_Log::INFO); for ( $i = $this->_inicioLaco; $i < count($sheetData); $i++ ) { if( !isset($sheetData[$i]['proposta']) || $sheetData[$i]['proposta'] == "" || $sheetData[$i]['tipo_registro'] == "005" //acertos manuais lote || $sheetData[$i]['tipo_registro'] == "007" //lancamentos futuros lote || $sheetData[$i]['tipo_registro'] == "010" //contratos refinanciados originais || $sheetData[$i]['tipo_registro'] == "012" //parcelas inadimplentes ){ continue; } $dados = array( 'banco_id' => $this->getBancoId(), '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, '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' => null, 'tipo_formalizacao' => 0 ); try { $this->_getTipoContrato($sheetData[$i], $dados); $this->_getProduto($sheetData[$i], $dados); $this->_getPrazo($sheetData[$i], $dados); $this->_getValorBrutoLiquido($sheetData[$i], $dados); $this->_getEstornado($sheetData[$i], $dados); $this->_getNumeroContrato($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->_getStatusCartao($sheetData[$i], $dados); $this->_getObs($sheetData[$i], $dados); $this->_getDataRecebimentoComissao($sheetData[$i], $dados); $this->_getTipoFormalizacao($sheetData[$i], $dados); $this->_getEspecie($sheetData[$i], $dados); $this->contratosImportados[] = $dados['numero_contrato']; $this->salvarLinha($sheetData[$i], $dados); } catch ( Exception $e ) { $this->_addNaoImportado( $dados, $sheetData[$i], $this->naoImportados, $e->getMessage() ); } } $this->_log->log('########## FIM DO PROCESSANMENTO #############', Zend_Log::INFO); } protected function salvarLinha($sheetData, &$dados) { unset($dados['base_comissao']); unset($dados['base_comissao_empresa']); $newContrato = new Model_DbTable_Contrato(); $result = 0; $this->_log->log("Processando contrato : " . $dados['numero_contrato'], Zend_Log::INFO); $protocolos = null; $isSRCC = $this->SRCCService->isSRCC($sheetData['nao_comissionado_observacao']); if( $this->_dadosContrato == null ){ if (!in_array($sheetData['tipo_registro'], self::REGISTROS_ACEITOS)) { throw new Core_Exception("Contrato {$dados['numero_contrato']}" . " listado no tipo {$sheetData['tipo_registro']}, " . "esse registro não possui informações suficientes para cadastro."); } $dados['srcc'] = (int) $isSRCC; $result = $newContrato->insert($dados); if( $result <= 0 ){ $this->_addNaoImportado( $dados, $sheetData, $this->naoImportados, 'Contrato não inserido.' ); $this->_log->log("Contrato NAO foi adicionado.", Zend_Log::ALERT); } else { $dados['id'] = $result; $this->_log->log("Contrato adicionado." . print_r($dados, true), Zend_Log::ALERT); $this->_dadosContrato = $newContrato->fetchRow("id = {$result}"); } } else { $protocoloContrato = new Model_DbTable_ProtocoloContrato(); $protocolos = $protocoloContrato->fetchRow("contrato_id = " . $this->_dadosContrato['id'], 'id DESC'); if ($protocolos != null) { if (!empty($dados['estornado']) && $protocolos['valor'] >= 0) { $this->_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']; $this->_log->log("Contrato sinalizado como estorno: {$dados['numero_contrato']}", Zend_Log::INFO); } else { $this->_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.' ); $this->_log->log("Contrato está pago e não pode ser alterado.", Zend_Log::ALERT); if ($isSRCC) { table('contrato')->setContratoSRCC($this->_dadosContrato['id'], $this->bancoId); } } } else { $dados['id'] = $this->_dadosContrato['id']; /* 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'] ){ $this->_log->log("[Contrato já tem o corretor: {$this->_dadosContrato['corretor_id']}] " . "Tentativa de atualização para: {$dados['corretor_id']}. ", Zend_Log::ALERT); unset($dados['corretor_id']); } $this->_log->log("Dados antes de _getCamposAtualizacao()" . print_r($dados, true), Zend_Log::INFO); $dados = $this->_getCamposAtualizacao($sheetData, $dados); $dados['srcc'] = (int) $isSRCC; $this->_log->log("Tentativa de atualizaçao do contrato: {$this->_dadosContrato['numero_contrato']}.", Zend_Log::INFO); $this->_log->log("Dados p/ atualização: " . print_r($dados, 1), Zend_Log::INFO); $result = $newContrato->update($dados, "id = {$this->_dadosContrato['id']}"); if( $result > 0 ){ $this->_log->log("Contrato atualizado.", Zend_Log::INFO); } else { $this->_log->log("Contrato NAO foi foi atualizado.", Zend_Log::ALERT); } //adiciona as informações na tabela de recebimentos $dados['numero_contrato'] = $this->_dadosContrato->numero_contrato; } } Model_Contrato::gravarEspelhoImportacao($dados['id'], $sheetData, $this->getArquivoOrigem()); //para adicionar o recebimento $this->_receberComissao($sheetData, $dados); } protected function _getProduto(array $sheetData, array &$dados) { $colunaCodigoProduto = trim($sheetData['tipo_operacao']); $colunaDescricaoProduto = isset($sheetData['tipo_operacao']) ? trim($sheetData['tipo_operacao']) : null; if( strstr($colunaDescricaoProduto, "REFIN COM PORTABILIDADE") ){ $tipo = 'REFIN DA PORTABILIDADE'; } elseif( strstr($colunaDescricaoProduto, "REFINANCIAMENTO") ){ $tipo = "REFINANCIAMENTO"; } elseif( strstr($colunaDescricaoProduto, "NOVO") || strstr($colunaDescricaoProduto, "MARGEM LIVRE") || strstr($colunaDescricaoProduto, "CARTÃO") ){ $tipo = "NOVO"; } elseif( strstr($colunaDescricaoProduto, "PORTABILIDADE") ){ $tipo = "PORTABILIDADE"; } $produto = new Model_Produto(); $dados['produto'] = $produto->getOrCreateProdutoCodigo(null, $colunaCodigoProduto, $this->getBancoId(), $tipo); } protected function _getPrazo(array $sheetData, array &$dados) { if( $sheetData['prazo'] ){ $dados['prazo'] = (int) $sheetData['prazo']; } } protected function _getTipoFormalizacao(array $sheetData, array &$dados) { $dados['tipo_formalizacao'] = 0; if ( stristr($sheetData['tipo_formalizacao'], 'Digital') ) { $dados['tipo_formalizacao'] = 1; } } protected function _getNumeroContrato(array $sheetData, array &$dados) { $digits = new Zend_Filter_Digits(); if( $sheetData['proposta'] ){ $dados['numero_contrato'] = ltrim($digits->filter($sheetData['proposta']), 0); //verifica se o contrato existe $contrato = new Model_DbTable_Contrato(); $this->_dadosContrato = $contrato->fetchRow("numero_contrato = '" . $dados['numero_contrato'] . "' " . "AND banco_id = " . $this->getBancoId()); } } protected function _getFormaLiberacao(array $sheetData, array &$dados) { if( $sheetData['tipo_pagto'] ){ $colunaLiberacao = $sheetData['tipo_pagto']; $dados['forma_liberacao'] = $colunaLiberacao == 'C' ? 'C/C' : 'O/P'; } } protected function _getValorBrutoLiquido(array $sheetData, array &$dados) { $colValorBruto = String_Refatorar::parseStringToFloat($sheetData['valor_financiado']); $valorBase = String_Refatorar::parseStringToFloat($sheetData['valor_base']); $valorContrato = String_Refatorar::parseStringToFloat($sheetData['valor_contrato']); if( $valorBase <= 0 ){ $colValorLiquido = $valorContrato; } else { $colValorLiquido = $valorBase; } $dados['valor_bruto'] = number_format($colValorBruto, 2, ',', '.'); $dados['valor_liquido'] = number_format($colValorLiquido, 2, ',', '.'); } protected function _getConvenioIdTabelaId(array $sheetData, array &$dados) { $colCodTabela = $sheetData['cod_tabela']; $colNomeTabela = $sheetData['desc_tabela']; $colunaConvenio = $sheetData['nome_empregador']; $colunaTipoFormalizacao = 0; if ( isset($sheetData['tipo_formalizacao']) && stristr($sheetData['tipo_formalizacao'], 'Digital') ) { $colunaTipoFormalizacao = 1; } if( !empty($colunaConvenio) ){ $convenio = new Model_Convenio(); $dados['convenio_id'] = $convenio->getOrCreateConvenio($colunaConvenio); } if( !empty($colCodTabela) ){ //verifica se a tabela existe $tabela = new Model_Tabela(); $dados['tabela_id'] = $tabela->getOrCreateTabelaByNome(NULL, $colNomeTabela, $dados['convenio_id'], $this->getBancoId(), $colunaTipoFormalizacao); } } protected function _getCorretorId(array $sheetData, array &$dados) { $colCorretorCodigo = isset($sheetData['login']) ? $sheetData['login'] : null; $colCorretorCpf = isset($sheetData['cpf_operador']) ? $this->_getFormatedNumber($sheetData['cpf_operador'], 11) : null; $corretorId = 0; if ($colCorretorCodigo) { $colCorretorCodigo = explode("_", $colCorretorCodigo); //pesquisa pelo codigo do usuario $corretorSenha = new Model_CorretorSenha(); $corretorId = (int) $corretorSenha->getCorretorIdBySenha($colCorretorCodigo[0], $this->getBancoId()); $this->_log->log("Contrato: {$dados['numero_contrato']} - Corretor localizado pelo usuário: {$colCorretorCodigo[0]}", Zend_Log::INFO); } if( $corretorId <= 0 && $colCorretorCpf ){ $this->_log->log("Contrato: {$dados['numero_contrato']} - Localizando o corretor pelo CPF: {$colCorretorCpf}", Zend_Log::INFO); $corretor = new Model_Corretor(); $fetch = $corretor->getByCpf($colCorretorCpf); if( $fetch ){ $this->_log->log("Corretor localizado pelo CPF {$fetch['id']}", Zend_Log::INFO); $dados['corretor_id'] = $fetch['id']; } } $dados['corretor_id'] = $corretorId; } protected function _getEmpresaId(array $sheetData, array &$dados) { $empresaId = 0; $corretorId = $dados['corretor_id'] ? $dados['corretor_id'] : 0; if( $corretorId > 0 ){ $corretor = new Model_Corretor(); $dadosCorretor = $corretor->exibir($corretorId); if( $dadosCorretor ){ $empresaId = $dadosCorretor['empresa_id']; } } if (!$empresaId) { $empresaId = service('auth_service')->getUsuarioEmpresaResolve(); } $dados['empresa_id'] = $empresaId; } protected function _getClienteId(array $sheetData, array &$dados) { $digits = new Zend_Filter_Digits(); $cpfCliente = $this->_getFormatedNumber($digits->filter($sheetData['cpf']), 11); $mCliente = new Model_Cliente(); $dadosCliente = $mCliente->existe($cpfCliente); if( $dadosCliente ){ $clienteId = $dadosCliente->id; } else { $mCliente->setCpf($cpfCliente); $mCliente->setNome($sheetData['nome_cliente']); $mCliente->setEmpresaId($dados['empresa_id']); $clienteId = $mCliente->salvar($mCliente); } $dados['cliente_id'] = $clienteId; } protected function _getDataEmissao(array $sheetData, array &$dados) { $colunaDtEmissao = $sheetData['data_proposta']; $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})"); } } $dados['data_emissao'] = $dataEmissao; } /** * * @param array $sheetData * @param array $dados * @return void */ protected function _getComissaoCorretorAndEmpresa(array $sheetData, array &$dados) { $comissaoCorretor = isset($sheetData[$this->getColuna('comissao_corretor')]) ? $sheetData[$this->getColuna('comissao_corretor')] : null; $comissaoEmpresa = isset($sheetData[$this->getColuna('comissao_empresa')]) ? $sheetData[$this->getColuna('comissao_empresa')] : null; if( $comissaoCorretor ){ $dados['comissao_corretor'] = Core_FilterValor::filter($comissaoCorretor); } if( $comissaoEmpresa ){ $dados['comissao_empresa'] = Core_FilterValor::filter($comissaoEmpresa); } $dbtable = new Model_DbTable_Contrato(); $dbtable->getComissaoCorretorAndEmpresa($dados); } protected function _getDataLiberacao(array $sheetData, array &$dados) { $colunaDtLib = isset($sheetData['data_contrato']) ? $sheetData['data_contrato'] : 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; } protected function _getStatusProposta(array $sheetData, array &$dados) { $colunaStatusProposta = null; if( $sheetData['tipo_registro'] == "001" || $sheetData['tipo_registro'] == "006" ){ $dados['status_proposta'] = 43; return; } elseif( $sheetData['tipo_registro'] == "002" ){ $colunaStatusProposta = "Estorno"; $dados['estornado'] = 1; } elseif( !$this->_dadosContrato ){ //se não encontrou o contrato, então é porque está cadastrando $colunaStatusProposta = "Digitado"; } if( $colunaStatusProposta != null ){ $statusId = 0; $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; } } protected function _getOutros(array $sheetData, array &$dados) { } protected function _getEstornado(array $sheetData, array &$dados) { switch ( $sheetData['tipo_registro'] ) { case "002": $dados['estornado'] = 1; break; default : $dados['estornado'] = 0; break; } } protected function _getDigitador(array $sheetData, array &$dados) { $colunaDigitador = $sheetData['digitador']; if( !empty($colunaDigitador) ){ $dados['digitador'] = $colunaDigitador; } } protected function _getTipoContrato(array $sheetData, array &$dados) { $colunaTipoContrato = isset($sheetData['tipo_operacao']) ? $sheetData['tipo_operacao'] : null; if( strstr($colunaTipoContrato, "REFIN COM PORTABILIDADE") ){ $tipo = 'REFIN DA PORTABILIDADE'; } elseif( strstr($colunaTipoContrato, "REFINANCIAMENTO") ){ $tipo = "REFINANCIAMENTO"; } elseif( strstr($colunaTipoContrato, "NOVO") || strstr($colunaTipoContrato, "MARGEM LIVRE") || strstr($colunaTipoContrato, "CARTÃO") ){ $tipo = "NOVO"; } elseif( strstr($colunaTipoContrato, "PORTABILIDADE") ){ $tipo = "PORTABILIDADE"; } $dados['tipo'] = $tipo; } protected function _getDataRecebimentoComissao(array $sheetData, array &$dados) { $ignorarAtualizar = ["004", "006", "011", "MANUTENCAO"]; if (in_array($sheetData['tipo_registro'], $ignorarAtualizar) || in_array($sheetData['cod_comissao'], $ignorarAtualizar)) { return; } $colunaDtComissao = isset($sheetData['data_cred_comis']) ? $sheetData['data_cred_comis'] : null; $dataComissao = null; if( !empty($colunaDtComissao) ){ $dataComissao = Core_Util::convertDate($colunaDtComissao); if( is_array($dataComissao) ){ throw new Core_Exception("Não foi possível converter a data da comissão para o banco de dados. ({$colunaDtComissao})"); } } $dados['data_recebimento_comissao'] = $dataComissao; return $dataComissao; } protected function _receberComissao(array $sheetData, array &$dados) { $dataComissao = $this->_getDataRecebimentoComissao($sheetData, $dados); if ($this->_dadosContrato != null && $dataComissao != null) { $digits = new Zend_Filter_Digits(); $valorLancamento = String_Refatorar::parseStringToFloat($sheetData['valor_lancto']); $valorComissaoPmt = isset($sheetData['vlr_comissao_pmt']) ? ($digits->filter($sheetData['vlr_comissao_pmt']) / 100) : 0; if (in_array($sheetData['tipo_registro'], ['002', '004'])) { $valorLancamento = $valorLancamento * (-1); } $percentualEmpresa = String_Refatorar::parseStringToFloat($sheetData['perc_comissao']); $dbtable = new Model_DbTable_RecebimentoContrato(); $result = $dbtable->receberComissao([ 'contrato_id' => $this->_dadosContrato->id, 'data_recebimento_comissao' => $dataComissao, 'parcelas' => isset($sheetData['num_parcela_paga']) ? $sheetData['num_parcela_paga'] : 0, 'valor_lancamento' => $valorLancamento, 'comissao_empresa' => ($percentualEmpresa*100) > 100 ? $percentualEmpresa : ($percentualEmpresa*100), 'data_saldo' => $dataComissao, 'codigo_tipo_pagamento' => trim($sheetData['cod_tipo_pagto']), 'natureza' => isset($sheetData['natureza']) ? $sheetData['natureza'] : null, 'tipo_remuneracao' => $sheetData['tipo_pagto'], 'descricao' => $sheetData['cod_comissao'], 'tipo_registro_pan' => isset($sheetData['tipo_registro']) ? $sheetData['tipo_registro'] : null, 'valor_comissao_pmt' => $valorComissaoPmt ]); if ($result <= 0) { $this->_addNaoImportado( $dados, $sheetData, $this->naoImportados, 'Uma falha pode ter ocorrido na inserção do recebimento do contrato' ); } } if (in_array($sheetData['tipo_registro'], ['001', '003'])) { $dados['data_recebimento_comissao'] = $dataComissao; } } protected function _getSubestabelecido(array $sheetData, array &$dados) { $dados['subestabelecido_id'] = $this->service->getSubestabelecido( (int) $sheetData['cod_promotora'], (int) $this->getSubestabelecidoId() ); } protected function _getCamposAtualizacao(array $sheetData, array &$dados) { $dadosAtualizacao = [ 'id' => $dados['id'] ]; $ignorarAtualizar = ["004", "006", "011", "MANUTENCAO"]; if (in_array($sheetData['tipo_registro'], $ignorarAtualizar) || in_array($sheetData['cod_comissao'], $ignorarAtualizar)) { return $dadosAtualizacao; } if(empty($this->_dadosContrato['data_recebimento_comissao'])){ $dadosAtualizacao['data_recebimento_comissao'] = $dados['data_recebimento_comissao']; } $dias = null; if ($sheetData['tipo_registro'] == '003') { $liberacao = new Zend_Date($dados['data_liberacao']); $dataComissao = new Zend_Date($dados['data_recebimento_comissao']); $dataComissao->subTimestamp($liberacao); $dias = ceil(($dataComissao->toValue()) / 60 / 60 / 24); if ($dias > 1 && $dias < 30) { $dadosAtualizacao['status_proposta'] = 43; } return $dadosAtualizacao; } if (!empty($dados['valor_bruto'])) { $dadosAtualizacao['valor_bruto'] = $dados['valor_bruto']; } if (!empty($dados['valor_liquido'])) { $dadosAtualizacao['valor_liquido'] = $dados['valor_liquido']; } if ( !empty($dados['comissao_empresa']) ) { $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['tipo']) ) { $dadosAtualizacao['tipo'] = $dados['tipo']; } 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 ( !empty($dados['comissao_corretor']) ) { $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['status_proposta']) ){ $dadosAtualizacao['status_proposta'] = $dados['status_proposta']; } if( !empty($dados['tabela_id']) ){ $dadosAtualizacao['tabela_id'] = $dados['tabela_id']; } if( !empty($dados['produto']) ){ $dadosAtualizacao['produto'] = $dados['produto']; } if( !empty($dados['data_liberacao']) ){ $dadosAtualizacao['data_liberacao'] = $dados['data_liberacao']; } if( !empty($dados['estornado']) ){ $dadosAtualizacao['estornado'] = $dados['estornado']; } if( !empty($dados['subestabelecido_id']) ){ $dadosAtualizacao['subestabelecido_id'] = $dados['subestabelecido_id']; } if( !empty($dados['tipo_formalizacao']) ){ $dadosAtualizacao['tipo_formalizacao'] = $dados['tipo_formalizacao']; } return $dadosAtualizacao; } protected function _getDiferimentoCorretor(array $sheetData, array &$dados) { //recupera 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'], $dados['prazo'], $dados['data_emissao']); } $dados['diferimento_corretor'] = $comissaoCorretor; } protected function _getObs(array $sheetData, array &$dados) { $colunaObs = isset($sheetData['observacao']) ? $sheetData['observacao'] : null; if( $colunaObs ){ $dados['obs'] = $colunaObs; } } protected function _getContratoVerificado(array $sheetData, array &$dados) { $dados['verificar_contratos'] = 0; } protected function _getStatusCartao(array $sheetData, array &$dados) { $dados['cartao'] = 0; } protected function _getBaseComissao(array $sheetData, array &$dados) { $colunaPrazo = isset($sheetData['prazo']) ? $sheetData['prazo'] : 0; if( isset($dados['corretor_id']) && $dados['corretor_id'] > 0 ){ $corretor = new Model_Corretor(); $baseComissaoCorretor = $corretor->getBaseComissao( $dados['corretor_id'], $dados['banco_id'], $dados['tabela_id'], $dados['convenio_id'], $dados['produto'], $colunaPrazo, $dados['data_emissao'], $dados['valor_liquido'] ); $dados['base_comissao'] = $baseComissaoCorretor; } if( $dados['empresa_id'] > 0 ){ $empresa = new Model_Empresa(); $baseComissaoEmpresa = $empresa->getBaseComissao( $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['valor_liquido']) ); $dados['base_comissao_empresa'] = $baseComissaoEmpresa; } } protected function _getBaseComissaoValor(array $sheetData, array &$dados) { $dados['base_comissao_empresa_valor'] = $dados['valor_liquido']; $dados['base_comissao_valor'] = $dados['valor_liquido']; if( isset($dados['base_comissao_empresa']) && !empty($dados['base_comissao_empresa']) ){ switch ( $dados['base_comissao_empresa'] ) { case "VALOR BRUTO": $dados['base_comissao_empresa_valor'] = $dados['valor_bruto']; break; } } if( isset($dados['base_comissao']) && !empty($dados['base_comissao']) ){ switch ( $dados['base_comissao'] ) { case "VALOR BRUTO": $dados['base_comissao_valor'] = $dados['valor_bruto']; break; } } } protected function _getFormatedNumber($number, $size) { $digits = new Zend_Filter_Digits(); $number = (int) $digits->filter($number); while ( strlen($number) < $size ) { $number = "0" . $number; } return $number; // $finalNumber = ""; // for( $i=1; $i<=strlen($number); $i++ ){ // if( $i <= $size ){ // $finalNumber = substr($number, strlen($number)-$i); // } // } // return $finalNumber; } /** * Recebe o endereço do arquivo e cria um array com * as linhas a serem inseridas * @param string $arquivo * @return array */ protected function obtencaoDados(array $arquivo) { $dadosGerais = array(); foreach ( $arquivo as $linha ) { $linha = str_replace("\0", "", substr($linha, 2)); $tipoRegistro = substr($linha, 0, 3); switch ( $tipoRegistro ) { case '000': // Header case '999': // Trailer $dadosGerais[] = $this->cabecalhoRodape($linha); break; default: $dadosGerais[] = $this->linha($linha); break; } } return $dadosGerais; } /** * Obtem os dados referentes as linhas de cabecalho e rodape * @param type $linha * @return type */ protected function cabecalhoRodape($linha) { $dados = array(); $dados['tipo_registro'] = substr($linha, 0, 3); $dados['inst_fin'] = substr($linha, 3, 3); $dados['data_arquivo'] = substr($linha, 6, 8); $dados['hora_arquivo'] = substr($linha, 19, 15); $dados['cod_comissionado'] = substr($linha, 24, 6); $dados['nome_comissionado'] = substr($linha, 30, 75); $dados['qtd_total_reg'] = substr($linha, 105, 6); $dados['vlr_bruto_comissao'] = substr($linha, 111, 11); $dados['vlr_total_credito'] = substr($linha, 122, 11); $dados['vlr_total_debito'] = substr($linha, 133, 11); $dados['vlr_sld_devedor'] = substr($linha, 133, 11); $dados['base_calculo_imposto'] = substr($linha, 155, 11); $dados['perc_iss'] = substr($linha, 166, 7); $dados['vlr_total_iss'] = substr($linha, 173, 11); $dados['perc_ir'] = substr($linha, 184, 7); $dados['vlr_total_ir'] = substr($linha, 191, 11); $dados['vlr_liquido'] = substr($linha, 202, 11); return $dados; } protected function linha($linha, $cod) { $dados = array(); $dados['tipo_registro'] = substr($linha, 0, 3); $dados['proposta'] = substr($linha, 3, 11); $dados['cpf'] = substr($linha, 14, 14); $dados['nome_cliente'] = substr($linha, 28, 60); $dados['data_proposta'] = substr($linha, 88, 8); $dados['data_contrato'] = substr($linha, 96, 8); $dados['prazo'] = substr($linha, 104, 4); $dados['cod_promotora'] = substr($linha, 108, 6); $dados['nome_promotora'] = substr($linha, 114, 75); $dados['cod_comissionado'] = substr($linha, 189, 6); $dados['nome_comissionado'] = substr($linha, 195, 75); $dados['cod_empregador'] = substr($linha, 270, 6); $dados['nome_empregador'] = substr($linha, 276, 75); $dados['cod_tabela'] = substr($linha, 351, 6); $dados['desc_tabela'] = substr($linha, 357, 60); $dados['taxa_tabela'] = substr($linha, 417, 8); //Apenas valor numérico considerando QUATRO casas decimais, sem ponto ou vírgula $dados['valor_financiado'] = substr($linha, 425, 11); //Apenas valor numérico considerando duas casas decimais, sem ponto ou vírgula $dados['valor_contrato'] = substr($linha, 436, 11); //Apenas valor numérico considerando duas casas decimais, sem ponto ou vírgula $dados['nome_operador'] = substr($linha, 447, 30); $dados['cpf_operador'] = substr($linha, 477, 14); $dados['login'] = substr($linha, 491, 30); $dados['tipo_operacao'] = substr($linha, 521, 50); $dados['cod_tipo_pagto'] = substr($linha, 571, 3); $dados['desc_pagto'] = substr($linha, 574, 30); $dados['tipo_pagto'] = substr($linha, 604, 1); $dados['data_cred_comis'] = substr($linha, 605, 8); $dados['valor_lancto'] = substr($linha, 613, 11); //Apenas valor numérico considerando duas casas decimais, sem ponto ou vírgula $dados['incide_impost'] = substr($linha, 624, 1); $dados['valor_base'] = substr($linha, 625, 11); //Apenas valor numérico considerando duas casas decimais, sem ponto ou vírgula $dados['perc_comissao'] = substr($linha, 636, 8); $dados['cod_comissao'] = substr($linha, 644, 6); $dados['observacao'] = substr($linha, 650, 100); $dados['data_original'] = substr($linha, 750, 8); $dados['valor_original'] = substr($linha, 758, 11); //Apenas valor numérico considerando duas casas decimais, sem ponto ou vírgula $dados['saldo_dia_inicial'] = substr($linha, 769, 11); $dados['saldo_dia_final'] = substr($linha, 780, 11); $dados['cod_hist_fin'] = substr($linha, 791, 3); $dados['nome_hist_fin'] = substr($linha, 794, 100); $dados['cnpj'] = substr($linha, 894, 14); $dados['nome_cnpj'] = substr($linha, 908, 100); $dados['valor_desdobro'] = substr($linha, 1008, 11); //Apenas valor numérico considerando duas casas decimais, sem ponto ou vírgula $dados['prop_ant'] = substr($linha, 1019, 11); $dados['pmt_prop_ant'] = substr($linha, 1030, 11); $dados['prazo_tot_prop_ant'] = substr($linha, 1041, 4); $dados['prazo_refin_prop_ant'] = substr($linha, 1045, 4); $dados['prazo_pag_prop_ant'] = substr($linha, 1049, 4); $dados['vlr_sld_dev_ctr_ant'] = substr($linha, 1053, 11); //Apenas valor numérico considerando duas casas decimais, sem ponto ou vírgula $dados['vlr_comissao_pmt'] = substr($linha, 1064, 11); //Apenas valor numérico considerando duas casas decimais, sem ponto ou vírgula $dados['num_parcela_paga'] = substr($linha, 1075, 3); $dados['digitador'] = substr($linha, 1105, 50); $dados['valor_limite_adiantamento'] = substr($linha, 1155, 11); //Apenas valor numérico considerando duas casas decimais, sem ponto ou vírgula $dados['percentual_esperado_adiantamento'] = substr($linha, 1166, 8); return $dados; } public static function lerArquivo($arquivo) { $fd = fopen($arquivo, "r"); $read = fread($fd, filesize($arquivo)); fclose($fd); return explode("\r", $read); } /** * * @param array $naoImportados * @param string $motivo * @return void */ protected function _addNaoImportado(array $dados, array $sheetData, array &$naoImportados, $motivo = '') { $result = array_push($naoImportados, array( 'numero_contrato' => isset($dados['numero_contrato']) ? print_r($dados['numero_contrato'], true) : null, 'tabela' => isset($dados['tabela']) ? $dados['tabela'] : null, 'cpf' => isset($dados['cpf']) ? $dados['cpf'] : null, 'cliente' => isset($dados['nome_cliente']) ? $dados['nome_cliente'] : null, 'valor' => isset($dados['valor_liquido']) ? $dados['valor_liquido'] : null, 'prazo' => isset($dados['prazo']) ? $dados['prazo'] : null, 'codigo_atendente' => null, 'codigo_vendedor' => null, 'motivo' => $motivo )); return $result; } protected function _getValorFixoEmpresaCorretor(array $sheetData, array &$dados) { $colunaPrazo = isset($sheetData[$this->getColuna('prazo')]) ? $sheetData[$this->getColuna('prazo')] : 0; if( isset($dados['corretor_id']) && $dados['corretor_id'] > 0 ){ $corretor = new Model_Corretor(); $valorFixoCorretor = $corretor->getValorFixo( $dados['corretor_id'], $dados['banco_id'], $dados['tabela_id'], $dados['convenio_id'], $dados['produto'], $colunaPrazo, $dados['data_emissao'] ); $dados['valor_fixo_corretor'] = $valorFixoCorretor; } if( $dados['empresa_id'] > 0 ){ $empresa = new Model_Empresa(); $valorFixoEmpresa = $empresa->getValorFixo( $dados['empresa_id'], $dados['banco_id'], $dados['tabela_id'], $dados['convenio_id'], $dados['produto'], $colunaPrazo, $dados['data_emissao'] ); $dados['valor_fixo_empresa'] = $valorFixoEmpresa; } } /** * @param $sheetData * @return bool */ protected function isTipoRegistroSRCC($sheetData): bool { return $this->SRCCService::NAO_COMISSIONADOS === (int)$sheetData['tipo_registro']; } protected function _getEspecie(array $sheetData, array &$dados) { $colunaEspecie = $sheetData['especie'] ?? null; if (! empty($colunaEspecie)) { $dados['especie'] = $colunaEspecie; } } }
💾 保存文件
← 返回文件管理器