✏️ 正在编辑: Corretor.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/application/models/Corretor.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Modules\Core\Exception\EmailJaUtilizadoException; use \Modules\Gatekeeper\Service\Gatekeeper as Gatekeeper; class Model_Corretor extends Model_PessoaFisica { private $_dadosCorretor; private $_empresaId; private $_rotaId; private $_apelido; private $_banco; private $_agencia; private $_conta; private $_tipoConta; //Corrente / Poupança private $_titular; private $_cpfTitular; private $_chavePix; private $_obs; private $_grupoComissao; private $_login; private $_senha; private $_prazoFisico; private $_telefoneResidencial; private $_bloquearPagamento; private $_motivo; private $_corretorDesativado; private $_obedecerId; private $_nomeMae; private $_mudarSenha; private $_descontarTaxaTransf; private $_dataAlteracaoSenha; private $_acessoAplicativo; private $_attDadosCorretor; private $_acessoTemporario; private $_dataTemporarioApp; private $_permitirSincYuppies; private $_tokenSincYuppies; private $_nivelEsteira; private $_tipoVenda; private $_diasBloqueioProducao; private $_percentualCorte; private $_potencialVenda; private $_numeroCertificado; private $_validadeCertificado; private $_statusCadastro; private $_automatizacaoOportunidadesNegocios; private $_oportunidadesNegociosFiltroId; private $_grupoAcesso; private $_responsavel; private $_cpfResponsavel; private $_estadoCivil; private $_nacionalidade; private $_profissao; private $_permitirAutocontratacao; private $_dataInicioOperacao; private $_dataFimOperacao; /** @var Model_DbTable_Corretor */ private $table; function getNivelEsteira() { return $this->_nivelEsteira; } function setNivelEsteira($_nivelEsteira) { $this->_nivelEsteira = $_nivelEsteira; } function getGrupoAcesso() { return $this->_grupoAcesso; } function setGrupoAcesso($_grupoAcesso) { $this->_grupoAcesso = $_grupoAcesso; } //<editor-fold> public function getEmpresaId() { return $this->_empresaId; } public function setEmpresaId($empresaId) { $this->_empresaId = $empresaId; } public function getRotaId() { return $this->_rotaId; } public function setRotaId($rotaId) { $this->_rotaId = $rotaId; } public function getApelido() { return $this->_apelido; } public function setApelido($apelido) { $this->_apelido = $apelido; } public function getBanco() { return $this->_banco; } public function setBanco($banco) { $this->_banco = $banco; } public function getAgencia() { return $this->_agencia; } public function setAgencia($agencia) { $this->_agencia = $agencia; } public function getConta() { return $this->_conta; } public function setConta($conta) { $this->_conta = $conta; } public function getTipoConta() { return $this->_tipoConta; } public function setTipoConta($tipoConta) { $this->_tipoConta = $tipoConta; } public function getTitular() { return $this->_titular; } public function setTitular($titular) { $this->_titular = $titular; } public function getCpfTitular() { return $this->_cpfTitular; } public function setCpfTitular($cpfTitular) { $this->_cpfTitular = $cpfTitular; } public function getChavePix() { return $this->_chavePix; } public function setChavePix($chavePix) { $this->_chavePix = $chavePix; } public function getObs() { return $this->_obs; } public function setObs($obs) { $this->_obs = $obs; } public function getGrupoComissao() { return $this->_grupoComissao; } public function setGrupoComissao($grupoComissao) { $this->_grupoComissao = $grupoComissao; } public function getLogin() { return $this->_login; } public function setLogin($login) { $this->_login = $login; } public function getSenha() { return $this->_senha; } public function setSenha($senha) { $this->_senha = $senha; } public function getPrazoFisico() { return $this->_prazoFisico; } public function setPrazoFisico($prazoFisico) { $this->_prazoFisico = $prazoFisico; } public function getTelefoneResidencial() { return $this->_telefoneResidencial; } public function setTelefoneResidencial($telefoneResidencial) { $this->_telefoneResidencial = $telefoneResidencial; } public function getBloquearPagamento() { return $this->_bloquearPagamento; } public function setBloquearPagamento($bloquearPagamento) { $this->_bloquearPagamento = $bloquearPagamento ? 1 : 0; if (!$this->getId()) { $this->_bloquearPagamento = 1; } if ($this->getBloquearPagamento() === 0) { $this->_motivo = null; } } public function getMotivo() { return $this->_motivo; } public function setMotivo($motivo) { if ($this->getBloquearPagamento()) { $this->_motivo = $motivo; } if (!$this->getId()) { $this->_motivo = 'CADASTRO EM ANÁLISE'; } } function getCorretorDesativado() { return $this->_corretorDesativado; } function setCorretorDesativado($_corretorDesativado) { $this->_corretorDesativado = $_corretorDesativado; } public function getObedecerId() { return $this->_obedecerId; } public function setObedecerId($obedecerId) { $this->_obedecerId = $obedecerId; } public function getNomeMae() { return $this->_nomeMae; } public function setNomeMae($nomeMae) { $this->_nomeMae = $nomeMae; } public function getMudarSenha() { return $this->_mudarSenha; } public function setMudarSenha($mudarSenha) { $this->_mudarSenha = $mudarSenha; return $this; } public function getDataAlteracaoSenha() { return $this->_dataAlteracaoSenha; } public function setDataAlteracaoSenha($dataAlteracaoSenha) { if( !empty($dataAlteracaoSenha) ){ try { $data = new Zend_Date($dataAlteracaoSenha, Zend_Date::DATES, 'pt'); $dataAlteracaoSenha = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataAlteracaoSenha = null; } } else { $dataAlteracaoSenha = null; } $this->_dataAlteracaoSenha = $dataAlteracaoSenha; } public function getDescontarTaxaTransf() { return $this->_descontarTaxaTransf; } public function setDescontarTaxaTransf($descontarTaxaTransf) { $this->_descontarTaxaTransf = $descontarTaxaTransf; return $this; } public function getAcessoAplicativo() { return $this->_acessoAplicativo; } public function setAcessoAplicativo($acessoAplicativo) { $this->_acessoAplicativo = $acessoAplicativo; } public function getAttDadosCorretor() { return $this->_attDadosCorretor; } public function setAttDadosCorretor($attDadosCorretor) { $this->_attDadosCorretor = $attDadosCorretor; } public function getAcessoTemporario() { return $this->_acessoTemporario; } function setAcessoTemporario($acessoTemporario) { $this->_acessoTemporario = $acessoTemporario; } public function setTokenSincYuppies($token) { return $this->_tokenSincYuppies = $token; } public function getTokenSincYuppies() { return $this->_tokenSincYuppies; } public function setPermitirSincYuppies($permitir) { $this->_permitirSincYuppies = $permitir; } public function getPermitirSincYuppies() { return $this->_permitirSincYuppies; } public function setAutomatizacaoOportunidadesNegocios($value) { $this->_automatizacaoOportunidadesNegocios = $value; } public function getAutomatizacaoOportunidadesNegocios() { return $this->_automatizacaoOportunidadesNegocios; } public function setOportunidadesNegociosFiltroId($value) { $this->_oportunidadesNegociosFiltroId = $value ?: null; } public function getOportunidadesNegociosFiltroId() { return $this->_oportunidadesNegociosFiltroId; } public function setDataTemporarioApp($dataTemporarioApp) { if( !empty($dataTemporarioApp) ){ try { $data = new Zend_Date($dataTemporarioApp, Zend_Date::DATES, 'pt'); $dataTemporarioApp = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataTemporarioApp = null; } } else { $dataTemporarioApp = null; } $this->_dataTemporarioApp = $dataTemporarioApp; } function getDataTemporarioApp() { return $this->_dataTemporarioApp; } public function getTipoVenda(){ return $this->_tipoVenda; } public function setTipoVenda($value){ $this->_tipoVenda = $value; } public function getDiasBloqueioProducao() { return $this->_diasBloqueioProducao; } public function setDiasBloqueioProducao($diasBloqueioProducao) { $this->_diasBloqueioProducao = $diasBloqueioProducao; } public function getPercentualCorte() { return $this->_percentualCorte; } public function setPercentualCorte($percentualCorte) { $this->_percentualCorte = Core_FilterValor::filter($percentualCorte); } public function getPotencialVenda() { return $this->_potencialVenda; } public function setPotencialVenda($potencialVenda) { $this->_potencialVenda = Core_FilterValor::filter($potencialVenda); } public function getNumeroCertificado() { return $this->_numeroCertificado; } public function setNumeroCertificado($numeroCertificado) { $this->_numeroCertificado = $numeroCertificado; } public function getValidadeCertificado() { return $this->_validadeCertificado; } /** * @return mixed */ public function getStatusCadastro() { return $this->_statusCadastro; } public function getResponsavel() { return $this->_responsavel; } public function setResponsavel($responsavel) { $this->_responsavel = $responsavel; } public function getCpfResponsavel() { return $this->_cpfResponsavel; } public function setCpfResponsavel($cpfResponsavel) { $this->_cpfResponsavel = $cpfResponsavel; } public function getEstadoCivil() { return $this->_estadoCivil; } public function setEstadoCivil($estadoCivil) { $this->_estadoCivil = $estadoCivil; } public function getNacionalidade() { return $this->_nacionalidade; } public function setNacionalidade($nacionalidade) { $this->_nacionalidade = $nacionalidade; } public function getProfissao() { return $this->_profissao; } public function setProfissao($profissao) { $this->_profissao = $profissao; } public function getPermitirAutocontratacao() { return $this->_permitirAutocontratacao; } public function setPermitirAutocontratacao($permitirAutocontratacao) { $this->_permitirAutocontratacao = $permitirAutocontratacao; } /** * @param $value * @return mixed */ public function setStatusCadastro($value) { return $this->_statusCadastro = $value; } public function setValidadeCertificado($validadeCertificado) { if (!empty($validadeCertificado)) { try { $data = new Zend_Date($validadeCertificado, Zend_Date::DATES, 'pt'); $validadeCertificado = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $validadeCertificado = null; } } else { $validadeCertificado = null; } $this->_validadeCertificado = $validadeCertificado; } public function getDataInicioOperacao() { return $this->_dataInicioOperacao; } public function setDataInicioOperacao($dataInicioOperacao) { if (!empty($dataInicioOperacao)) { try { $data = new Zend_Date($dataInicioOperacao, Zend_Date::DATES, 'pt'); $dataInicioOperacao = $data->toString('yyyy-MM-dd'); } catch (Zend_Date_Exception $e) { $dataInicioOperacao = null; } } else { $dataInicioOperacao = null; } $this->_dataInicioOperacao = $dataInicioOperacao; } public function getDataFimOperacao() { return $this->_dataFimOperacao; } public function setDataFimOperacao($dataFimOperacao) { if (!empty($dataFimOperacao)) { try { $data = new Zend_Date($dataFimOperacao, Zend_Date::DATES, 'pt'); $dataFimOperacao = $data->toString('yyyy-MM-dd'); } catch (Zend_Date_Exception $e) { $dataFimOperacao = null; } } else { $dataFimOperacao = null; } $this->_dataFimOperacao = $dataFimOperacao; } public function __construct($options = null) { $this->table = table('corretor'); if (is_array($options)) { $this->setOptions($options); } } public function setOptions(array $options) { $methods = get_class_methods($this); foreach ( $options as $key => $value ) { $explode = explode("_", $key); $methodName = ''; foreach ( $explode as $v ) { $methodName .= ucfirst($v); } $key = $methodName != '' ? $methodName : $key; $method = 'set' . ucfirst($key); if( in_array($method, $methods) ){ $this->$method($value); } } return $this; } public function _toArray() { $dbtable = new Model_DbTable_Corretor(); $info = $dbtable->info(); $methods = get_class_methods($this); $data = array(); foreach ( $info['cols'] as $key ) { $col = $key; $explode = explode("_", $key); $methodName = ''; foreach ( $explode as $v ) { $methodName .= ucfirst($v); } $key = $methodName != '' ? $methodName : $key; $method = 'get' . ucfirst($key); if( in_array($method, $methods) ){ $data[$col] = $this->$method(); } } return $data; } /** * Insere ou altera o corretor passado por parâmetro * @param Model_Corretor $corretor */ public function salvar(Model_Corretor $corretor) { $dbtable = new Model_DbTable_Corretor(); $dadosCorretor = $corretor->_toArray(); if ($corretor->getId() > 0) { $this->checkDadosBancarios($dadosCorretor); $result = $dbtable->update($dadosCorretor, 'id = ' . $corretor->getId()); if( $result > 0 ){ return $corretor->getId(); } else { return null; } } Gatekeeper::limiteCorretores(); return $dbtable->insert($dadosCorretor); } /** * Exclui o corretor passado por parâmetro * @param int $id * @return int The number of rows deleted */ public function excluir($id) { if( $id > 0 ){ $dbtable = new Model_DbTable_Corretor(); return $dbtable->delete("id = " . $id); } return null; } /** * Retorna uma lista de corretores * @param string $where * @param string $order * @param int $count * @param int $offset * @return array */ public function listar($where = null, $order = null, $count = null, $offset = null) { $dbtable = new Model_DbTable_Corretor(); return $dbtable->fetchAll($where, $order, $count, $offset); } /** * Retorna um fetchRow do item passado por parâmetro * @param int $id * @return Zend_Db_Table_Row_Abstract | null */ public function exibir($id) { $dbtable = new Model_DbTable_Corretor(); if( $id > 0 ){ $id = (int) $id; return $dbtable->fetchRow("id = '{$id}'"); } return null; } /** * * @param string $data YYYY-MM * @return Zend_Db_Table_Rowset_Abstract | array | null */ public function getLancamentosMes($data) { $dbtable = new Model_DbTable_Lancamento(); $select = $dbtable->select()->from('tb_lancamentos', array( 'valor_total' => "SUM(valor_pago)", 'corretor_id', 'data_pagamento', 'tipo' => "SUBSTRING(tipo,1,1)" )); $select->where("excluido<>1 AND (tipo = 'CREDITO_CORRETOR' OR tipo = 'DEBITO_CORRETOR') AND DATE_FORMAT(data_pagamento, '%Y-%m') = '" . $data . "'"); $select->group(array( 'corretor_id', 'data_pagamento', 'tipo' )); return $dbtable->fetchAll($select); } /** * Exibe a conta corrente do corretor. São contabilizados apenas os valores que possuem o campo "compor_saldo" = 1 * @param type $mes * @return Zend_Db_Table_Rowset_Abstract | array | null */ public function getSaldoCorretor($mes, $corretorId = 0) { $corretor = new Model_DbTable_Corretor(); $lancamento = new Model_DbTable_Lancamento(); $selectLancamentoAnterior = $lancamento->getAdapter()->select()->from('tb_lancamentos', array( 'corretor_id', 'credito' => "IF(SUBSTRING(tipo,1,1) = 'C', valor_pago, 0)", 'debito' => "IF(SUBSTRING(tipo,1,1) = 'D', valor_pago, 0)" )) ->where("excluido<>1 AND (tipo = 'CREDITO_CORRETOR' OR tipo = 'DEBITO_CORRETOR') AND DATE_FORMAT(data_pagamento, '%Y-%m') < '" . $mes . "' AND compor_saldo = 1"); $selectLancamento = $lancamento->getAdapter()->select()->from('tb_lancamentos', array( 'corretor_id', 'credito' => "IF(SUBSTRING(tipo,1,1) = 'C', valor_pago, 0)", 'debito' => "IF(SUBSTRING(tipo,1,1) = 'D', valor_pago, 0)" )) ->where("excluido<>1 AND (tipo = 'CREDITO_CORRETOR' OR tipo = 'DEBITO_CORRETOR') AND DATE_FORMAT(data_pagamento, '%Y-%m') = '" . $mes . "' AND compor_saldo = 1"); $select = $corretor->getAdapter()->select()->from(array( 'corretores' => 'tb_corretores' ), array( 'nome', 'apelido' )) ->joinInner(array( 'lancamentos' => $selectLancamento ), "corretores.id = lancamentos.corretor_id", array( 'total_credito' => 'SUM(lancamentos.credito)', 'total_debito' => 'SUM(lancamentos.debito)' )) ->joinLeft(array( 'lancamentos_anteriores' => $selectLancamentoAnterior ), "corretores.id = lancamentos_anteriores.corretor_id", array( 'total_credito_anterior' => 'SUM(lancamentos_anteriores.credito)', 'total_debito_anterior' => 'SUM(lancamentos_anteriores.debito)' )) ->where("corretores.excluido <> 1"); if( $corretorId > 0 ){ $select->where("corretores.id = " . $corretorId); } return $corretor->getAdapter()->fetchAll($select); } public function getPontuacao($campanhaId, $corretorId) { //pontuacao total da campanha $campanha = new Model_DbTable_Campanha(); $pontuacao = (int) $campanha->getPontuacao($campanhaId, $corretorId); //total de resgates $resgate = new Model_DbTable_ResgatePonto(); $totalResgate = (int) $resgate->getTotalResgate($campanhaId, $corretorId); return ($pontuacao - $totalResgate); } public function getResgates($campanhaId, $corretorId) { $resgate = new Model_DbTable_ResgatePonto(); return $resgate->getTotalResgate($campanhaId, $corretorId); } public function getProtocolos($corretorId, $limit = null) { if( $corretorId <= 0 ) return null; $dbtable = new Model_DbTable_Corretor(); $select = $dbtable->getAdapter()->select()->from(array( 'protocolos' => 'tb_protocolo_pagamento' ), array( 'data_pagamento', 'desconto', 'acrescimo', 'protocolo_id' => 'id', 'forma_pagamento_id', 'descontar_taxa_transf', 'data_quitacao' )) ->joinInner(array( 'protocolos_contratos' => 'tb_protocolo_contrato' ), 'protocolos.id = protocolos_contratos.protocolo_id', array( 'valor' )) ->joinInner(array( 'contratos' => 'tb_contratos' ), 'contratos.id = protocolos_contratos.contrato_id', array( 'id_contrato' => 'contratos.id', 'valor_liquido', 'comissao_corretor', 'bonus_corretor' )) ->joinInner(array( 'corretores' => 'tb_corretores' ), 'protocolos.corretor_id = corretores.id', array( 'banco', 'corretor_descontar_taxa_transf' => 'descontar_taxa_transf' )) ->joinLeft(array( 'tipos' => 'tb_tipos' ), 'tipos.id = protocolos.forma_pagamento_id', array( 'forma_pagamento' => 'descricao' )) ->joinLeft(array( 'bancos' => 'tb_bancos_febraban' ), 'bancos.codigo = corretores.banco', array( 'taxa_transf', 'banco_pagamento' => 'nome' )) ->where('protocolos.excluido<>1 AND contratos.excluido<>1 AND protocolos_contratos.excluido<>1 AND protocolos.corretor_id = ' . $corretorId) ->where('protocolos.liberado_pagamento = 1') ->group(array( 'protocolos.id' )) ->order('protocolos.id DESC'); if( $limit != null ){ $select->limit($limit); } $listProtocolos = $dbtable->getAdapter()->fetchAll($select); $protocolos = array(); foreach ( $listProtocolos as $protocolo ) { $protocoloContrato = new Model_ProtocoloContrato(); $contratos = $protocoloContrato->getContratosPorProtocolo($protocolo['protocolo_id']); $protocolo['total_comissao'] = 0; $protocolo['valor_comissao'] = 0; $protocolo['vl_comissao'] = 0; $protocolo['total_valor_comissao'] = 0; foreach ( $contratos as $c ) { $dadosContratoProtocolo = Model_ProtocoloContrato::getDadosProtocoloContrato($c['id'], $protocolo['protocolo_id']); if( !$dadosContratoProtocolo ){ $protocolo['total_comissao'] += (($c['base_comissao_valor'] * ($c['comissao_corretor'] / 100)) + ($c['base_comissao_bonus'] * ($c['bonus_corretor'] / 100))); } else { $protocolo['total_comissao'] += $dadosContratoProtocolo['valor']; $protocolo['total_valor_comissao'] += ($dadosContratoProtocolo['valor']); } //pega o valor da comissão do corretor if( $dadosContratoProtocolo['valor'] > 0 ){ $protocolo['valor_comissao'] += $dadosContratoProtocolo['valor']; $protocolo['vl_comissao'] += $dadosContratoProtocolo['valor']; } } $txTransferencia = !empty($protocolo['taxa_transferencia_banco']) ? $protocolo['taxa_transferencia_banco'] : 0; $protocolo['vl_comissao'] -= $txTransferencia; $protocolo['total_valor_comissao'] += ($protocolo['acrescimo'] - ($protocolo['desconto'] + $txTransferencia)); array_push($protocolos, $protocolo); } return $protocolos; } # retorna a comissão do usuário no mês atual public function getComissaoMes($corretorId, $limit = null) { $dataNow = new Zend_Date(); $dataEmissao = $dataNow->setDay(1)->get('dd/MM/yyyy'); $dataEmissaoA = $dataNow->now()->get('dd/MM/yyyy'); $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array()) ->columns(array( 'contratos.comissao_corretor','contratos.base_comissao_valor')) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array( )) ->joinInner(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array()) ->joinLeft(array( 'bancos' => 'tb_bancos' ), "bancos.id = contratos.banco_id", array( )) ->joinLeft(array( 'convenios' => 'tb_convenios' ), "convenios.id = contratos.convenio_id", array()) ->joinLeft(array( 'tabelas' => 'tb_tabelas' ), "tabelas.id = contratos.tabela_id", array()) ->joinLeft(array( 'status_propostas' => 'tb_tipos' ), 'contratos.status_proposta = status_propostas.id', array()) ->joinLeft(array( 'subestabelecidos' => 'tb_empresas' ), 'contratos.subestabelecido_id = subestabelecidos.id', array()) ->where("contratos.excluido<>1") ->where("contratos.tipo_registro = 1") ->where("clientes.excluido<>1") ->where("contratos.status_proposta IN ('43','42')") ->where("corretores.id = ?", $corretorId) ->where("data_emissao >= STR_TO_DATE('{$dataEmissao}', '%d/%m/%Y')") ->where("data_emissao <= STR_TO_DATE('{$dataEmissaoA}', '%d/%m/%Y')"); $contratos = $dbtable->getAdapter()->fetchAll($select); $totalComissao = 0; foreach( $contratos as $c ){ $totalComissao += (($c['comissao_corretor'] * $c['base_comissao_valor']) / 100); } return $totalComissao; } public function getSenhas() { $dbtable = new Model_DbTable_Corretor(); $select = $dbtable->getAdapter()->select()->from(array( "c" => "tb_corretores" ), array( "c.id" )) ->joinInner(array( "cs" => 'tb_corretores_senhas' ), "c.id=cs.corretor_id", array( 'cs.senha' )) ->where("c.excluido<>1 AND cs.excluido<>1"); $values = $dbtable->getAdapter()->fetchAll($select); $senhas = array(); foreach ( $values as $value ) { $senhas[$value['id']] = $value['senha']; } return $senhas; } public function getIds() { $dbtable = new Model_DbTable_Corretor(); $values = $dbtable->fetchAll(); $ids = array(); foreach ( $values as $value ) { $ids[$value['id']] = $value['id']; } return $ids; } public function getPrazoBanco($corretorId, $contratoId, $bancoId = null) { if(is_null($bancoId)){ $contrato = new Model_Contrato(array("id" => $contratoId)); } $dbtable = new Model_DbTable_CorretorPrazoBanco(); return $dbtable->fetchRow("corretor_id = $corretorId AND banco_id = {$contrato->getBancoId()}"); } public function getCorretoresBySupervisor($supervisorId) { $dbtable = new Model_DbTable_Corretor(); $select = $dbtable->getAdapter()->select()->from(array( "corretores" => "tb_corretores" ), array( "nome", "id" )) ->joinInner(array( "rotas" => "tb_rotas" ), "corretores.rota_id = rotas.id", array()) ->joinInner(array( "gerentes" => "tb_gerente_rota" ), "rotas.gerente_id = gerentes.id", array()) ->where("corretores.excluido<>1 AND gerentes.id = " . $supervisorId) ->order("nome ASC") ->group("corretores.id"); return $dbtable->getAdapter()->fetchAll($select); } public function autenticarSinc($token) { if( !empty($token) ){ //o corretor tem permissão através desse sistema com esse token? $dbtCorretor = new Model_DbTable_Corretor; if( !$corretor = $dbtCorretor->fetchRow(array("token_sinc_yuppies = ?" => $token)) ) return false; return $corretor; } return false; } public function getPontuacaoGeral($dados) { //pontuacao total da campanha $campanha = new Model_DbTable_Campanha(); $pontuacao = $campanha->getPontuacaoGeral($dados); //total de resgates $resgate = new Model_DbTable_ResgatePonto(); $totalResgate = $resgate->getTotalResgateGeral($dados['corretor_id']); return ($pontuacao - $totalResgate); } public function getCredito($corretorId) { $dbtable = new Model_DbTable_CorretorCredito(); $dados = $dbtable->select()->from($dbtable, array( 'total' => 'SUM(credito)' )) ->where("corretor_id = " . $corretorId); if( $dados != null ) return $dados['total']; return 0; } private function _getComissaoOuBonus($campo, $corretorId, $bancoId, $tabelaId, $convenioId, $codigoProduto, $prazo, $dataEmissao, $valorLiquido = 0, $tipoContrato = null, $baseComissao = 'VALOR LIQUIDO') { $valorComissao = 0; if( $corretorId > 0 && $bancoId > 0 && $tabelaId > 0 && $convenioId > 0 && $prazo >= 0 && $dataEmissao != null ){ //verifica se a comissão do banco está desativada $banco = new Model_Banco(); $dadosBanco = $banco->exibir($bancoId); if( $dadosBanco->desativar_comissoes == 1 ){ return 0; } $comissionamento = new Model_DbTable_ComissionamentoCorretor(); $produto = $comissionamento->getAdapter()->select()->from(array( 'produtos' => 'tb_produtos' ), array( 'tipo' )) ->where("codigo = '" . $codigoProduto . "'") ->where("banco_id = " . $bancoId) ->where("produtos.excluido <> 1"); if( $tipoContrato ){ $produto->where("tipo = '" . $tipoContrato . "'"); } $tipoProduto = $comissionamento->getAdapter()->fetchCol($produto); if( !$tipoProduto[0] ){ return 0; } $where = "corretor_id = $corretorId" . " AND banco_id = $bancoId" . " AND tabela_id = '$tabelaId'" . " AND convenio_id = $convenioId" . " AND (prazo_de <= '$prazo' AND prazo_a >= '$prazo')" . " AND tipo_produto = '$tipoProduto[0]'" . " AND base_comissao = '$baseComissao'"; if( $dadosBanco->importacao_valor_contrato > 0 && $valorLiquido > 0 ){ $liquido = str_replace(array( '.', ',' ), array( '', '.' ), $valorLiquido); $where .= " AND (((valor_de = 0 AND valor_a = 0 OR valor_de IS NULL AND valor_a IS NULL)) " ." OR (valor_de <= $liquido AND valor_a >= $liquido))"; } $dadosComissao = $comissionamento->fetchRow($where, 'id DESC'); if( $dadosComissao != null ){ $comissaoPercentual = $dadosComissao->findDependentRowset( 'Model_DbTable_ComissionamentoCorretorPercentual', null, $dadosComissao->select()->order("data_inicial ASC")); if( count($comissaoPercentual) > 0 ){ foreach ( $comissaoPercentual as $comissao ) { if( $comissao['data_final'] != null ){ if( $dataEmissao >= $comissao['data_inicial'] && $dataEmissao <= $comissao['data_final'] ){ $valorComissao = number_format($comissao[$campo], 2, ',', '.'); break; } } elseif( $dataEmissao >= $comissao['data_inicial'] ){ $valorComissao = number_format($comissao[$campo], 2, ',', '.'); break; } } } } } return $valorComissao; } public function getComissao($corretorId, $bancoId, $tabelaId, $convenioId, $codigoProduto, $prazo, $dataEmissao, $valorLiquido = 0, $tipoContrato = null, $baseComissao = 'VALOR LIQUIDO') { if( $codigoProduto == null ){ return null; } else { $valorComissao = $this->_getComissaoOuBonus('comissao', $corretorId, $bancoId, $tabelaId, $convenioId, $codigoProduto, $prazo, $dataEmissao, $valorLiquido, $tipoContrato, $baseComissao); // Se o corretor não tiver comissão, verifica no grupo de comissão if( !$valorComissao ){ $modelCorretor = new Model_Corretor(); $corretor = $modelCorretor->exibir($corretorId); if( $corretor->grupo_comissao ){ $comissionamentoGrupo = new Model_ComissionamentoGrupo(); $valorComissao = $comissionamentoGrupo->getComissao( $corretor->grupo_comissao, $bancoId, $tabelaId, $convenioId, $codigoProduto, $prazo, $dataEmissao, $valorLiquido, $tipoContrato, $baseComissao); } } } return $valorComissao; } public function getBonus($corretorId, $bancoId, $tabelaId, $convenioId, $codigoProduto, $prazo, $dataEmissao, $valorLiquido = 0, $tipoContrato = null, $baseComissao = 'VALOR LIQUIDO') { $valorBonus = 0; if( $codigoProduto == null ){ return null; } else { $valorBonus = $this->_getComissaoOuBonus('bonus', $corretorId, $bancoId, $tabelaId, $convenioId, $codigoProduto, $prazo, $dataEmissao, $valorLiquido, $tipoContrato = null, $baseComissao); // Se o corretor não tiver comissão, verifica no grupo de comissão if( !$valorBonus ){ $modelCorretor = new Model_Corretor(); $corretor = $modelCorretor->exibir($corretorId); if( $corretor->grupo_comissao ){ $comissionamentoGrupo = new Model_ComissionamentoGrupo(); $valorBonus = $comissionamentoGrupo->getBonus( $corretor->grupo_comissao, $bancoId, $tabelaId, $convenioId, $codigoProduto, $prazo, $dataEmissao, $valorLiquido, $tipoContrato, $baseComissao); } } } return $valorBonus; } public function getDiferimentoCorretor($corretorId, $bancoId, $tabelaId, $convenioId, $codigoProduto, $prazo, $dataEmissao, $valorLiquido = 0, $tipoContrato = null, $baseComissao = null) { $valorDiferimento = 0; if( $codigoProduto == null ){ return null; } else { $valorDiferimento = $this->_getComissaoOuBonus('diferimento', $corretorId, $bancoId, $tabelaId, $convenioId, $codigoProduto, $prazo, $dataEmissao, $valorLiquido, $tipoContrato, $baseComissao); // Se o corretor não tiver comissão, verifica no grupo de comissão if( !$valorDiferimento ){ $modelCorretor = new Model_Corretor(); $corretor = $modelCorretor->exibir($corretorId); if( $corretor->grupo_comissao ){ $comissionamentoGrupo = new Model_ComissionamentoGrupo(); $valorDiferimento = $comissionamentoGrupo->getDiferimentoCorretor( $corretor->grupo_comissao, $bancoId, $tabelaId, $convenioId, $codigoProduto, $prazo, $dataEmissao, $valorLiquido, $tipoContrato, $baseComissao); } } } return $valorDiferimento; } public function getByCpf($cpf, $exibirDesativado = true) { if (empty($cpf)) { return null; } $dbtable = new Model_DbTable_Corretor(); $where = "cpf = '" . String_Refatorar::formatarCpf($cpf) . "'"; if (!$exibirDesativado) { $where .= " AND corretor_desativado = 0"; } return $dbtable->fetchRow($where); } public function getByCpfResponsavel($cpf, $exibirDesativado = true) { if ($cpf != null) { $dbtable = new Model_DbTable_Corretor(); $where = "cpf_responsavel = '" . String_Refatorar::formatarCpf($cpf) . "'"; if (!$exibirDesativado) { $where .= " AND corretor_desativado = 0"; } return $dbtable->fetchRow($where); } return null; } /** * * @param string $where * @param type $order * @param type $count * @param type $offset * @return type */ public function getCorretores($where = null, $order = null) { $dbtable = new Model_DbTable_Corretor(); $select = $dbtable->select()->from($dbtable, array( 'corretor' => "CONCAT(id,'|', nome)" )); if( $where != null ){ if( ($where instanceof Zend_Db_Table_Select ) ){ $strWhere = "excluido<>1 "; foreach ( $where->getPart(Zend_Db_Table_Select::WHERE) as $w ) { $strWhere .= " AND " . $w; } $where->where($strWhere); } elseif( $where != null ){ $where = $where . " AND excluido<>1 "; } else { $where = "excluido<>1 "; } $select->where($where); } else { $select->where("excluido<>1"); } if( $order != null ){ $select->order($order); } $select->limit(10); return $dbtable->getAdapter()->fetchCol($select); } public function getCorretoresProducaoDespesa($fields) { $dbtable = new Model_DbTable_Corretor(); $params = array(); $where = null; if( isset($fields['empresa_id']) && !empty($fields['empresa_id']) ){ $params[] = 'co.empresa_id = ' . $fields['empresa_id']; } if( isset($fields['rota_id']) && !empty($fields['rota_id']) ){ $params[] = 'co.rota_id = ' . $fields['rota_id']; } if( isset($fields['supervisor_id']) && !empty($fields['supervisor_id']) ){ $params[] = 'su.id = ' . $fields['supervisor_id']; } if( isset($fields['corretor_id']) && !empty($fields['corretor_id']) ){ $params[] = 'co.id = ' . $fields['corretor_id']; } if( count($params) > 0 ){ $where = implode(' AND ', $params); } $selectProduzido = $dbtable->getAdapter()->select() ->from(['contratos' => 'tb_contratos'], []) ->joinInner(['recebimentos' => 'tb_recebimento_contratos'], 'contratos.id = recebimentos.contrato_id', ['total' => new Zend_Db_Expr('sum(recebimentos.valor_lancamento)')]) ->joinInner(['corretores' => 'tb_corretores'], 'corretores.id = contratos.corretor_id', []) ->where('(recebimentos.data_recebimento_comissao >= STR_TO_DATE("' . $fields['pagamento_de'] . '", "%d/%m/%Y")' . 'AND recebimentos.data_recebimento_comissao <= STR_TO_DATE("' . $fields['pagamento_a'] . '", "%d/%m/%Y"))') ->where('contratos.excluido<>1 AND corretores.id = co.id AND contratos.status_proposta = 43'); $selectDespesa = $dbtable->getAdapter()->select() ->from(array( 'lancamentos' => 'tb_lancamentos' ), array( 'total' => new Zend_Db_Expr('sum(lancamentos.valor_pago)' ))) ->joinInner(array( 'corretores' => 'tb_corretores' ), 'corretores.id = lancamentos.corretor_id', array()) ->where('lancamentos.tipo = "DESPESA"') ->where('(lancamentos.data_pagamento >= STR_TO_DATE("' . $fields['pagamento_de'] . '", "%d/%m/%Y")' . 'AND lancamentos.data_pagamento <= STR_TO_DATE("' . $fields['pagamento_a'] . '", "%d/%m/%Y"))') ->where('lancamentos.excluido<>1 AND corretores.id = co.id'); $select = $dbtable->getAdapter()->select() ->from(array( 'co' => 'tb_corretores' ), array( 'corretor' => 'nome', 'total_produzido' => new Zend_Db_Expr("(" . $selectProduzido . ")"), 'total_despesa' => new Zend_Db_Expr("(" . $selectDespesa . ")") )) ->joinLeft(array( 'rotas' => 'tb_rotas' ), 'rotas.id = co.rota_id', array()) ->joinLeft(array( 'su' => 'tb_gerente_rota' ), 'su.id = rotas.gerente_id', array( 'supervisor' => 'nome' )) ->where("co.excluido<>1") ->order('corretor ASC'); if( $where != null ){ $select->where($where); } return $dbtable->getAdapter()->fetchAll($select); } public function getByCodCorretor($codCorretor) { $dbTable = new Model_DbTable_Corretor(); $sql = $dbTable->getAdapter()->select() ->from(['corretores' => 'tb_corretores'], ['id']) ->joinInner(['senhas' => 'tb_corretores_senhas'], 'corretores.id = senhas.corretor_id', []) ->where("trim(leading 0 from senhas.senha) = '" . ltrim($codCorretor, '0') . "'"); return $dbTable->getAdapter()->fetchAll($sql); } public function getCorretoresComissionamento($fields = null, $order = null) { $dbtable = new Model_DbTable_Corretor(); $select = $dbtable->getAdapter()->select()->from(array( "corretores" => "tb_corretores" ), array( "corretores.*" )) ->joinLeft(array( "rotas" => "tb_rotas" ), "corretores.rota_id = rotas.id", array()) ->joinLeft(array( "gerentes" => "tb_gerente_rota" ), "rotas.gerente_id = gerentes.id", array( 'supervisor' => 'gerentes.nome' )) ->where("corretores.excluido<>1") ->order($order) ->group("corretores.id"); if( isset($fields['grupo_comissao']) && !empty($fields['grupo_comissao']) ){ $select->where("corretores.grupo_comissao = '{$fields['grupo_comissao']}'"); } if( isset($fields['supervisor_id']) && !empty($fields['supervisor_id']) ){ $select->where("gerentes.id = '{$fields['supervisor_id']}'"); } return $dbtable->getAdapter()->fetchAll($select); } public function getBaseComissao($corretorId, $bancoId, $tabelaId, $convenioId, $codigoProduto, $prazo, $dataEmissao, $valorLiquido = 0, $tipoContrato = null) { $tipoComissaoValor = null; $dadosComissao = null; if( $codigoProduto == null ){ return null; } else { if( $corretorId > 0 && $bancoId > 0 && $tabelaId > 0 && $convenioId > 0 && $prazo >= 0 && $dataEmissao != null ){ $comissionamento = new Model_DbTable_ComissionamentoCorretor(); $produto = $comissionamento->getAdapter()->select()->from(array( 'produtos' => 'tb_produtos' ), array( 'tipo' )) ->where("codigo = '" . $codigoProduto . "'") ->where("banco_id = " . $bancoId) ->where("produtos.excluido <> 1"); if( $tipoContrato ){ $produto->where("tipo = '" . $tipoContrato . "'"); } $tipoProduto = $comissionamento->getAdapter()->fetchCol($produto); if( !$tipoProduto[0] ){ return 'VALOR LIQUIDO'; } $where = "corretor_id = " . $corretorId . " AND banco_id = " . $bancoId . " AND tabela_id = '" . $tabelaId . "'" . " AND convenio_id = '" . $convenioId . "'" . " AND (prazo_de <= '" . $prazo . "' AND prazo_a >= '" . $prazo . "')" . " AND tipo_produto = '" . $tipoProduto[0] . "'"; $dadosComissao = $comissionamento->fetchRow($where, 'id DESC'); } if( $dadosComissao ){ $tipoComissaoValor = $dadosComissao->base_comissao; } // Se o corretor não tiver comissão, verifica no grupo de comissão if( !$dadosComissao || !$dadosComissao->base_comissao ){ $modelCorretor = new Model_Corretor(); $corretor = $modelCorretor->exibir($corretorId); if( !empty($corretor) && $corretor->grupo_comissao ){ $comissionamento = new Model_DbTable_ComissionamentoGrupo(); $produto = $comissionamento->getAdapter()->select()->from(array( 'produtos' => 'tb_produtos' ), array( 'tipo' )) ->where("codigo = '" . $codigoProduto . "'") ->where("banco_id = " . $bancoId) ->where("produtos.excluido <> 1"); if( $tipoContrato ){ $produto->where("tipo = '" . $tipoContrato . "'"); } $tipoProduto = $comissionamento->getAdapter()->fetchCol($produto); if( !$tipoProduto[0] ){ return 'VALOR LIQUIDO'; } $where = "grupo_id = " . $corretor->grupo_comissao . " AND banco_id = " . $bancoId . " AND tabela_id = '" . $tabelaId . "'" . " AND convenio_id = '" . $convenioId . "'" . " AND (prazo_de <= '" . $prazo . "' AND prazo_a >= '" . $prazo . "')" . " AND tipo_produto = '" . $tipoProduto[0] . "'"; $dadosComissao = $comissionamento->fetchRow($where, 'id DESC'); } if( $dadosComissao ){ $tipoComissaoValor = $dadosComissao->base_comissao; } } } return $tipoComissaoValor; } public function getValorFixo($corretorId, $bancoId, $tabelaId, $convenioId, $codigoProduto, $prazo, $dataEmissao, $tipoContrato = null) { $valorFixo = 0; $dadosComissao = null; $digits = new Zend_Filter_Digits(); if( $codigoProduto == null ){ return null; } else { if( $corretorId > 0 && $bancoId > 0 && $tabelaId > 0 && $convenioId > 0 && $prazo >= 0 && $dataEmissao != null ){ $comissionamento = new Model_DbTable_ComissionamentoCorretor(); $produto = $comissionamento->getAdapter()->select()->from(array( 'produtos' => 'tb_produtos' ), array( 'tipo' )) ->where("codigo = '" . $codigoProduto . "'") ->where("banco_id = " . $bancoId) ->where("produtos.excluido <> 1"); if( $tipoContrato ){ $produto->where("tipo = '" . $tipoContrato . "'"); } $tipoProduto = $comissionamento->getAdapter()->fetchCol($produto); if( !$tipoProduto[0] ){ return 0; } $where = "corretor_id = " . $corretorId . " AND banco_id = " . $bancoId . " AND tabela_id = '" . $tabelaId . "'" . " AND convenio_id = '" . $convenioId . "'" . " AND (prazo_de <= '" . $prazo . "' AND prazo_a >= '" . $prazo . "')" . " AND tipo_produto = '" . $tipoProduto[0] . "'"; $dadosComissao = $comissionamento->fetchRow($where, 'id DESC'); } if( $dadosComissao ){ $valorFixo = Core_Util::filterValor($dadosComissao->valor_fixo); } // Se o corretor não tiver comissão, verifica no grupo de comissão if( !$dadosComissao || !$dadosComissao->base_comissao ){ $modelCorretor = new Model_Corretor(); $corretor = $modelCorretor->exibir($corretorId); if( !empty($corretor) && $corretor->grupo_comissao ){ $comissionamento = new Model_DbTable_ComissionamentoGrupo(); $produto = $comissionamento->getAdapter()->select()->from(array( 'produtos' => 'tb_produtos' ), array( 'tipo' )) ->where("codigo = '" . $codigoProduto . "'") ->where("banco_id = " . $bancoId) ->where("produtos.excluido <> 1"); if( $tipoContrato ){ $produto->where("tipo = '" . $tipoContrato . "'"); } $tipoProduto = $comissionamento->getAdapter()->fetchCol($produto); if( !$tipoProduto[0] ){ return 0; } $where = "grupo_id = " . $corretor->grupo_comissao . " AND banco_id = " . $bancoId . " AND tabela_id = '" . $tabelaId . "'" . " AND convenio_id = '" . $convenioId . "'" . " AND (prazo_de <= '" . $prazo . "' AND prazo_a >= '" . $prazo . "')" . " AND tipo_produto = '" . $tipoProduto[0] . "'"; $dadosComissao = $comissionamento->fetchRow($where, 'id DESC'); } if( $dadosComissao ){ $valorFixo = Core_Util::filterValor($dadosComissao->valor_fixo); } } } return $valorFixo; } public function atualizarDadosCorretor($dadosCorretor = null) { $dados = array( 'email' => $dadosCorretor->email, 'telefone_residencial' => $dadosCorretor->telefone_residencial, 'celular' => $dadosCorretor->celular, 'fax' => $dadosCorretor->fax, 'telefone_comercial' => $dadosCorretor->telefone_comercial, 'corretor_id' => $dadosCorretor->id ); return $dados; } public function getTotalCorretoresCadastrados($registro = array()) { $totalCorretoresCadastrados = 0; $dbtable = new Model_DbTable_Corretor(); $select = $dbtable->getAdapter()->select()->from(array( "corretores" => "tb_corretores" ), array( 'total_cadastrados' => 'COUNT(corretores.id)' )) ->joinInner(array( 'rota' => 'tb_rotas' ), 'corretores.rota_id = rota.id', array()) ->joinInner(array( 'gerentes_rotas' => 'tb_gerente_rota' ), 'rota.gerente_id = gerentes_rotas.id', array()) ->where("corretores.excluido <> 1 AND (corretores.corretor_desativado = 0 OR corretores.corretor_desativado IS NULL)"); if( $registro['supervisor_id'] > 0 ){ $select->where("gerentes_rotas.id = {$registro['supervisor_id']} AND corretores.excluido <> 1"); $result = $dbtable->getAdapter()->fetchRow($select); if( $result ){ $totalCorretoresCadastrados = $result['total_cadastrados']; } } return $totalCorretoresCadastrados; } public function getTotalCorretoresProduzindo($registro = array(), $fields = array()) { $totalCorretoresProduzindo = 0; $dbtable = new Model_DbTable_Corretor(); $select = $dbtable->getAdapter()->select()->from(array( "corretores" => "tb_corretores" ), array( 'total_produzindo' => 'COUNT(DISTINCT corretores.id)' )) ->joinInner(array( 'contratos' => 'tb_contratos' ), 'contratos.corretor_id = corretores.id', array()) ->joinInner(array( 'rota' => 'tb_rotas' ), 'corretores.rota_id = rota.id', array()) ->joinInner(array( 'gerentes_rotas' => 'tb_gerente_rota' ), 'rota.gerente_id = gerentes_rotas.id', array()) ->where("corretores.excluido <> 1 AND (corretores.corretor_desativado = 0 OR corretores.corretor_desativado IS NULL)"); if( $registro['supervisor_id'] > 0 ){ $select->where("gerentes_rotas.id = {$registro['supervisor_id']} AND corretores.excluido <> 1"); if( isset($fields['data_emissao_de']) && !empty($fields['data_emissao_de']) ){ $select->where("data_emissao >= STR_TO_DATE('" . $fields['data_emissao_de'] . "', '%d/%m/%Y')"); } if( isset($fields['data_emissao_a']) && !empty($fields['data_emissao_a']) ){ $select->where("data_emissao <= STR_TO_DATE('" . $fields['data_emissao_a'] . "', '%d/%m/%Y')"); } $result = $dbtable->getAdapter()->fetchRow($select); if( $result ){ $totalCorretoresProduzindo = $result['total_produzindo']; } } return $totalCorretoresProduzindo; } public function selectCorretorEmpresa($corretorId) { $dbtable = new Model_DbTable_Corretor(); $select = $dbtable->getAdapter()->select()->from(array( "corretores" => "tb_corretores" ), array('corretores.*')) ->joinLeft('tb_empresas', 'tb_empresas.id = corretores.empresa_id', array( 'empresa' => 'nome' )) ->where('corretores.id = ?', $corretorId); return $dbtable->getAdapter()->fetchRow($select); } public function getReceberEmailsComCopia($corretorId) { $dbtable = new Model_DbTable_Contrato(); if( !$corretorId ){ return null; } $where = "rota.excluido <> 1 AND corretores.excluido <> 1 AND corretores.id = $corretorId"; $select = $dbtable->getAdapter()->select()->from(array( 'corretores' => 'tb_corretores' ), array()) ->joinLeft(array( 'rota' => 'tb_rotas' ), 'corretores.rota_id = rota.id', array()) ->joinLeft(array( 'gerentes_rotas' => 'tb_gerente_rota' ), 'rota.gerente_id = gerentes_rotas.id', array( 'supervisor' => 'gerentes_rotas.nome', 'email_supervisor' => 'gerentes_rotas.email', 'receber_email_supervisor' => 'gerentes_rotas.receber_email_copia' )) ->joinLeft(array( 'gerentes' => 'tb_gerentes' ), 'gerentes_rotas.gerente_id = gerentes.id', array( 'gerente' => 'gerentes.nome', 'email_gerente' => 'gerentes.email', 'receber_email_gerente' => 'gerentes.receber_email_copia' )) ->where($where); return $dbtable->getAdapter()->fetchAll($select); } public function notificarPendenciaSupervisor($corretorId) { if( !$corretorId ){ return null; } $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( 'corretores' => 'tb_corretores' ), array()) ->joinLeft(array( 'rota' => 'tb_rotas' ), 'corretores.rota_id = rota.id', array()) ->joinLeft(array( 'gerentes_rotas' => 'tb_gerente_rota' ), 'rota.gerente_id = gerentes_rotas.id', array( 'nome' => 'gerentes_rotas.nome', 'email' => 'gerentes_rotas.email')) ->where("rota.excluido <> 1 AND corretores.excluido <> 1 AND corretores.id = {$corretorId}"); return $dbtable->getAdapter()->fetchAll($select); } public function meuDesempenhoComercial($fields = array()) { $dataNow = new Zend_Date(); $result = array(); $fields['data_emissao_de'] = $dataNow->setDay(1)->get('dd/MM/yyyy'); $fields['data_emissao_a'] = $dataNow->now()->get('dd/MM/yyyy'); $contrato = new Model_Contrato(); $producaoComercial = $contrato->getDesempenhoComercialCorretor($fields); if( $producaoComercial ){ $fields['corretor'] = true; $result = $this->_prepareProducaoComercial($producaoComercial, $fields); } return $result; } public function _prepareProducaoComercial($producaoComercial = array(), $fields = array()) { $producaoCorretor = array(); $contrato = new Model_Contrato(); foreach ( $producaoComercial as $registro ) { if( !isset($producaoCorretor[$registro['corretor_id']]) ){ $producaoCorretor[$registro['corretor_id']] = array( 'producao_media_diaria' => 0, #Média Diária 'total_producao' => 0, # Digitação atual 'projecao_final_mes' => 0, #Projeção de quanto ele pode vender 'projecao_comissao_final_mes' => 0, #Projeção de quanto ele pode receber em comissão 'comissao_receber' => 0, #Comissão a receber 'pendencias' => 0 #Pendencias ); } # Quantidade de pendências $pendenciasCount = $contrato->getFisicosPendentesCount($fields); $dt = new Zend_Date(); $qtdDiasConsulta = $dt->get(Zend_Date::DAY); $qtdDiasDoMes = $dt->get(Zend_Date::MONTH_DAYS); $mediaDiaria = $registro['total_liquido'] / $qtdDiasConsulta; $projecaoFinalMes = $mediaDiaria * $qtdDiasDoMes; $comissao_receber = $this->getComissaoMes($registro['corretor_id']); $producaoCorretor[$registro["corretor_id"]]['producao_media_diaria'] += $mediaDiaria; $producaoCorretor[$registro["corretor_id"]]['total_producao'] += $registro['total_liquido']; $producaoCorretor[$registro["corretor_id"]]['projecao_final_mes'] += $projecaoFinalMes; $producaoCorretor[$registro['corretor_id']]['comissao_receber'] = $comissao_receber; $producaoCorretor[$registro['corretor_id']]['pendencias'] = $pendenciasCount; } return $producaoCorretor; } public function _producaoUltimoDiaUtil(array $registro) { $dataNow = new Zend_Date(); $diaUtil = $dataNow->get(Zend_Date::WEEKDAY_NAME); $producaoUltDiaUtil = 0; switch ( $diaUtil ) { case 'seg': $ultimaDataUtil = $dataNow->subDay(3); break; case 'dom': $ultimaDataUtil = $dataNow->subDay(2); break; default: $ultimaDataUtil = $dataNow->subDay(1); break; } $contrato = new Model_Contrato(); $fields['data_liberacao_de'] = $ultimaDataUtil->get('dd/MM/yyyy'); $fields['data_liberacao_a'] = $ultimaDataUtil->get('dd/MM/yyyy'); $statusId = Model_Contrato::findByNameStatus(array( "Operação Finalizada", "Pagamento Enviado" )); $fields['status_proposta'] = $statusId; $result = $contrato->getProducaoCorretor($fields); if( $result ){ $producaoUltDiaUtil = $result['total_liquido']; } return $producaoUltDiaUtil; } /** * Verifica já faz mais de 3 meses que houve atualização nos dados cadastrais * @return boolean */ public function estaAtualizado() { $dataAtualizacao = new Zend_Date(Yuppie_Auth::getIdentity()->data_ultima_atualizacao); $dataAtualizacao->addMonth(3); if( $dataAtualizacao->isEarlier(Zend_Date::now()) ){ return false; } return true; } public function exibirDashboard() { $ns = new Zend_Session_Namespace(); $acl = $ns->acl; $corretorId = Yuppie_Auth::getIdentity()->id; $fields = array( 'corretor_id' => $corretorId, 'status_formalizacao' => 'fisico-pendente-alem-prazo' ); $params = array( 'status_proposta' => '43', 'corretores' => "$corretorId" ); $contratoModel = new Model_Contrato(); $comissaoReceber = 0; $fisicosNaoEntreguesPagos = 0; $fisicosPendentes = null; $producao = null; $contratosCancelados = null; $producaoUltimosMeses = [ 'valor_liquido' => 0, 'producao_atual' => 0, 'producao_anterior' => 0 ]; if( $acl->isAllowed(Yuppie_Auth::getIdentity()->grupo, 'visualizar-box-comissao-receber') ){ $contratos = $contratoModel->getComissaoPagar($params); foreach ($contratos as $contrato){ if(count($contrato) > 0){ foreach ($contrato as $c){ if(isset($c['data_emissao'])){ $dataEmissao = explode('-', $c['data_emissao']); if($dataEmissao[0] >= '2016'){ if (isset($c['valor_liquido'])) { if ($c['estornado'] == 1) { if($c['comissao_corretor'] > 0){ $c['comissao'] = $c['base_comissao_valor'] * $c['comissao_corretor'] / 100; $comissaoReceber -= $c['comissao']; } } else{ if($c['comissao_corretor'] > 0){ $c['comissao'] = $c['base_comissao_valor'] * $c['comissao_corretor'] / 100; $comissaoReceber += $c['comissao']; } } } } } } } } } if( $acl->isAllowed(Yuppie_Auth::getIdentity()->grupo, 'visualizar-box-pendencias-pago-nao-entregue') ){ $filtroPagoNaoEntregue = $fields; $filtroPagoNaoEntregue['protocolo_pagamento_gerado'] = 1; $fisicosNaoEntreguesPagos = $contratoModel->getFormalizacaoFisicosPendentes($filtroPagoNaoEntregue); } if( $acl->isAllowed(Yuppie_Auth::getIdentity()->grupo, 'visualizar-box-producao-atual') ){ $producao = $contratoModel->getProducaoCorretorMensal($fields); $mesAtual = date('m-Y', strtotime("today")); $mesAnterior = date('m-Y', strtotime("-1 month")); foreach ( $producao as $m ) { $producaoUltimosMeses['valor_liquido'] += $m['total_producao']; if($m['data_emissao'] == $mesAtual){ $producaoUltimosMeses['producao_atual'] = $m['total_producao']; } if($m['data_emissao'] == $mesAnterior){ $producaoUltimosMeses['producao_anterior'] = $m['total_producao']; } } } if( $acl->isAllowed(Yuppie_Auth::getIdentity()->grupo, 'visualizar-box-pendencias-alem-prazo') ){ $params['status_formalizacao'] = array('fisico-pendente-alem-prazo'); unset($params['status_proposta']); $fisicosPendentes = $contratoModel->getFormalizacaoFisicosPendentes($params); } if( $acl->isAllowed(Yuppie_Auth::getIdentity()->grupo, 'relatorio', 'contratos-cancelados') ){ $contratosCancelados = (new Model_DbTable_Contrato())->getContratosCancelados([ 'data_emissao_de' => Zend_Date::now()->subDay(30)->get('dd/MM/yyyy'), 'data_emissao_a' => Zend_Date::now()->get('dd/MM/yyyy'), ]); } $contratosAcoesJudiciais = $contratoModel->acoesJudiciaisFraude(Yuppie_Auth::getIdentity()->id); $propostasRecusadas = (new Model_Proposta())->getPropostaRecusada(); $esteiraContratos = (new Model_EsteiraContrato())->listar(['cpf_corretor' => Yuppie_Auth::getIdentity()->cpf, 'aprovado_negado' => 1]); return array( 'comissao_receber' => $comissaoReceber, 'producao' => $producaoUltimosMeses, 'fisicos_pendentes' => $fisicosPendentes, 'fisicos_nao_ent_pag' => $fisicosNaoEntreguesPagos, 'acoes_judiciais' => $contratosAcoesJudiciais, 'propostas_recusadas' => $propostasRecusadas, 'esteira_contratos' => $esteiraContratos, 'contratos_cancelados' => $contratosCancelados, ); } public function exportarProtocoloCorretorExcel($contratos, $dadosProtocolos) { $corretor = $dadosProtocolos->findParentRow('Model_DbTable_Corretor'); $banco = $corretor ? $corretor->findParentRow('Model_DbTable_BancoFebraban') : null; $formaPagamento = $dadosProtocolos->findParentRow('Model_DbTable_Tipos'); $totalComissao = $totalEstorno = 0; $taxaTransf = isset($banco->taxa_transf) && $dadosProtocolos->descontar_taxa_transf == 1 ? $banco->taxa_transf : null; foreach ( $contratos as $c ) { $dadosContratoProtocolo = Model_ProtocoloContrato::getDadosProtocoloContrato($c['id'], $dadosProtocolos->id); if( !$dadosContratoProtocolo ){ $valor = (($c['base_comissao_valor'] * ($c['comissao_corretor'] / 100)) + ($c['base_comissao_bonus'] * ($c['bonus_corretor'] / 100))); } else { $valor = $dadosContratoProtocolo['valor']; } if( $valor > 0 ){ $totalComissao += $valor; } else { $totalEstorno += $valor; } } if( isset($dadosProtocolos->forma_pagamento_id) && $dadosProtocolos->forma_pagamento_id != 7 || $totalComissao == 0 ){ $taxaTransf = 0; } $totalComissao -= $taxaTransf; $dadosCorretor = array(); $dadosCorretor[] = implode(";", array( 'Corretor', 'Banco', 'Agência', 'Conta', 'Titular conta', 'Titular CPF', )); $nomeCorretor = !empty($corretor['apelido']) ? $corretor['nome'] . "({$corretor['apelido']})" : $corretor['nome']; $dadosCorretor[] = implode(";", array( $nomeCorretor, $banco['nome'], $corretor['agencia'], $corretor['conta'] . "-" . $corretor['tipo_conta'], $corretor['titular'], $corretor['cpf_titular'] . "\n\n\n", )); $dadosProtocolo = array(); $dadosProtocolo[] = implode(";", array( 'Nº protocolo', 'Data/Hora Registro', 'Data Pagamento', 'Data Quitação', 'Total Comissão', 'Total Estorno', 'Forma pagto', 'Taxa transf', 'Acréscimo', 'Desconto', 'Total', )); $dadosProtocolo[] = implode(";", array( $dadosProtocolos->id, date('d/m/Y - H:i:s', strtotime($dadosProtocolos['data_baixa'])), date('d/m/Y', strtotime($dadosProtocolos['data_pagamento'])), !empty($dadosProtocolos['data_quitacao']) && $dadosProtocolos['data_quitacao'] != '0000-00-00' ? date('d/m/Y', strtotime($dadosProtocolos['data_quitacao'])) : "", number_format($totalComissao, 2, ',', '.'), number_format($totalEstorno, 2, ',', '.'), $formaPagamento ? $formaPagamento->descricao : '', number_format($taxaTransf, 2, ',', '.'), number_format($dadosProtocolos['acrescimo'], 2, ',', '.'), number_format($dadosProtocolos['desconto'], 2, ',', '.'), number_format(($totalComissao + $dadosProtocolos['acrescimo'] - ($dadosProtocolos['desconto'] - $totalEstorno)), 2, ',', '.') . "\n\n" )); $dadosCsv = array(); $dadosCsv[] = implode(";", array( 'CPF', 'Forma liberação', 'Cliente', 'Tabela', 'Convenio', 'Nº Contrato', 'Emissão', 'Liberação', 'Prazo', 'Banco', 'Produto', 'Valor Bruto', 'Valor Líquido', 'Base Cálculo', 'Comissão %', 'Vlr. Comissão', 'Base Cálculo', 'Comissão %', 'Vlr. Comissão', 'Vlr. Fixo', 'Vlr. Pagto.', 'Status', 'Situação', 'Data Quitação', 'Digitador', 'Valor Parcela', )); foreach ( $contratos as $contrato ) { $dadosContratoProtocolo = Model_ProtocoloContrato::getDadosProtocoloContrato($contrato['id'], $dadosProtocolos->id); if( !$dadosContratoProtocolo || $dadosContratoProtocolo['base_comissao'] == 0 ){ $baseComissao = $contrato['base_comissao_valor']; $percentualComissao = $contrato['comissao_corretor']; $comissao = ($baseComissao * $percentualComissao / 100); $baseBonus = $contrato['base_comissao_bonus']; $percentualBonus = $contrato['bonus_corretor']; $bonus = ($baseBonus * $percentualBonus / 100); } else { $baseComissao = $dadosContratoProtocolo['base_comissao']; $percentualComissao = $dadosContratoProtocolo['percentual']; $comissao = ($baseComissao * $percentualComissao / 100); $baseBonus = $dadosContratoProtocolo['base_bonus']; $percentualBonus = $dadosContratoProtocolo['percentual_bonus']; $bonus = ($baseBonus * $percentualBonus / 100); } $ocultarSeCartao = Model_Contrato::ocultarSeCartao($contrato['tipo']); $dadosCsv[] = implode(";", array( String_Refatorar::resetCpf($contrato['cpfCliente']), $contrato['forma_liberacao'], $contrato['cliente'], $contrato['tabela'], $contrato['convenio'], $contrato['numero_contrato'], date('d/m/Y', strtotime($contrato['data_emissao'])), date('d/m/Y', strtotime($contrato['data_liberacao'])), $contrato['prazo'], $contrato['banco'], $contrato['produto'] . "({$contrato['tipo']})", !$ocultarSeCartao ? number_format($contrato['valor_bruto'], 2, ',', '.') : "-", !$ocultarSeCartao ? number_format($contrato['valor_liquido'], 2, ',', '.') : "-", !$ocultarSeCartao ? number_format($baseComissao, 2, ',', '.') : "-", !$ocultarSeCartao ? number_format($percentualComissao, 2, ',', '.') . "%" : "-", !$ocultarSeCartao ? number_format($comissao, 2, ',', '.') : "-", !$ocultarSeCartao ? number_format($baseBonus, 2, ',', '.') : "-", !$ocultarSeCartao ? number_format($percentualBonus, 2, ',', '.') . "%" : "-", !$ocultarSeCartao ? number_format($bonus, 2, ',', '.') : "-", !$ocultarSeCartao ? number_format($dadosContratoProtocolo['valor_fixo_corretor'], 2, ',', '.') : "-", number_format($dadosContratoProtocolo['valor'], 2, ',', '.'), $comissao < 0 ? "Estornado" : $contrato['status_proposta'], $dadosContratoProtocolo['situacao'], !empty($dadosProtocolos['data_quitacao']) && $dadosProtocolos['data_quitacao'] != '0000-00-00' ? date('d/m/Y', strtotime($dadosProtocolos['data_quitacao'])) : "", $contrato['digitador'], number_format($contrato['valor_prestacao'], 2, ',', '.'), )); } $exportCsv = implode("\n", $dadosCsv); $exportCsv = implode("\n", $dadosCorretor) . $exportCsv; $exportCsv = implode("\n", $dadosProtocolo) . $exportCsv; $exportCsv = iconv(mb_detect_encoding($exportCsv), 'Windows-1252//TRANSLIT', $exportCsv); $name = "protocolos-corretor-" . time() . ".csv"; $fileName = getcwd() . "/downloads/$name"; $fp = fopen($fileName, "w+"); fwrite($fp, $exportCsv); fclose($fp); return $name; } public function getMediaComissionamento($fields = array()){ $dbtable = new Model_DbTable_ProtocoloContrato(); $select = $dbtable->getAdapter()->select()->from(['pc' => 'tb_protocolo_contrato'], [ 'corretores.id', 'corretor' => 'corretores.nome', 'contratos.tipo', "media_comissao" => new Zend_Db_Expr("round(sum(pc.percentual)/count(contratos.id), 2)"), "media_bonus" => new Zend_Db_Expr("round(sum(pc.percentual_bonus)/count(contratos.id), 2)"), "soma_percentual" => new Zend_Db_Expr("round(sum(pc.percentual), 2)"), "soma_bonus" => new Zend_Db_Expr("round(sum(pc.percentual_bonus), 2)"), "qtd_contratos" => new Zend_Db_Expr("count(contratos.id)") ]) ->joinInner(['contratos' => 'tb_contratos'], "pc.contrato_id = contratos.id and contratos.excluido<>1", []) ->joinInner(['protocolos_pagamentos' => 'tb_protocolo_pagamento'], "protocolos_pagamentos.id = pc.protocolo_id and protocolos_pagamentos.liberado_pagamento = 1 " . "and protocolos_pagamentos.excluido<>1", []) ->joinInner(['corretores' => 'tb_corretores'], "contratos.corretor_id = corretores.id", []) ->where("pc.excluido<>1") ->where("contratos.tipo is not null") ->group(['corretores.id', 'contratos.tipo']) ->order(['corretores.id', 'contratos.tipo']); Core_Filters::_prepareFilterSelectContrato($fields, $select); Core_Filters::_prepareFilterContrato($fields, $select); return $dbtable->getAdapter()->fetchAll($select); } public static function corretorPorNome($nome) { $dbtable = new Model_DbTable_Corretor(); $dados = $dbtable->selectCorretorPorNome($nome); if( $dados != null ){ return (int)$dados['id']; } } public function alterarVarios($corretores, $acoes) { if( empty(array_filter($corretores)) ){ return; } $cont = 0; $ns = new Zend_Session_Namespace(); //tratamento por causa do prazo_fisico que estava vindo vazio mas, // mesmo assim o usuário pode querer setar como zero. $acoes = array_filter($acoes, function($v){ return (!empty($v) || $v == "0"); }); $alterarPrazo = $ns->acl->isAllowed(Yuppie_Auth::getIdentity()->grupo, 'alterar-prazo-fisico'); if( !$alterarPrazo && (!empty($acoes['prazo_fisico']) || !empty($acoes['banco_prazo_fisico'])) ){ unset($acoes['prazo_fisico']); unset($acoes['banco_prazo_fisico']); } $dbtable = new Model_DbTable_Corretor(); if( count($acoes) > 0 ){ $acoesCorretor = $acoes; unset($acoesCorretor['banco_prazo_fisico']); unset($acoesCorretor['substituir_prazo']); foreach ( $corretores as $corretorId ) { if( !empty($acoes['banco_prazo_fisico']) ){ //cadastrar prazo para cada banco selecionado foreach ( $acoes['banco_prazo_fisico'] as $bancoId ) { $prazo = new Model_CorretorPrazoBanco(); if( $acoes['substituir_prazo'] ){ $dbtablePrazo = new Model_DbTable_CorretorPrazoBanco(); $existePrazo = $dbtablePrazo->fetchRow([ "banco_id = ?" => $bancoId, "corretor_id = ?" => $corretorId ]); if( $existePrazo ){ $prazo->setId($existePrazo['id']); } } $prazo->setBancoId($bancoId); $prazo->setPrazo($acoes['prazo_fisico']); $prazo->setCorretorId($corretorId); try { $savePrazo = $prazo->salvar($prazo); } catch ( Exception $e ) { } } //retira para não setar o prazo geral, já que fez por banco unset($acoesCorretor['prazo_fisico']); } if( !empty($acoes['desativar_corretores']) ){ $acoesCorretor['corretor_desativado'] = 0; if( $acoes['desativar_corretores'] == 1 ){ $acoesCorretor['corretor_desativado'] = 1; } unset($acoesCorretor['desativar_corretores']); } if( $acoesCorretor ){ $update = $dbtable->update($acoesCorretor, ["id = ?" => $corretorId]); } if( $update || $savePrazo ) $cont++; } } return $cont; } public function estaSenhaAtualizada() { $data = empty(Yuppie_Auth::getIdentity()->data_alteracao_senha) ? Yuppie_Auth::getIdentity()->data_cadastro : Yuppie_Auth::getIdentity()->data_alteracao_senha; $dataAtualizacao = new Zend_Date($data); $dataAtualizacao->addMonth(3); //se dataAtualizacao for menor que a data de hoje, senha está desatualizada if( $dataAtualizacao->getTimestamp() < Zend_Date::now()->getTimestamp() ){ return false; } return true; } public function getCorretorTermo($id) { $dbtable = new Model_DbTable_Corretor(); if ($id > 0) { $select = $dbtable->getAdapter()->select()->from([ "corretores" => "tb_corretores" ], ['*']) ->joinInner(["rotas" => "tb_rotas"], "corretores.rota_id = rotas.id", []) ->joinInner(["supervisores" => "tb_gerente_rota"], "rotas.gerente_id = supervisores.id", ['supervisor_nome' => 'nome', 'supervisor_cpf' => 'cpf']) ->joinInner(["gerentes" => "tb_gerentes"], "supervisores.gerente_id = gerentes.id", ['gerente_nome' => 'nome', 'gerente_cpf' => 'cpf']) ->where("corretores.excluido<>1 AND corretores.id = " . $id); return $dbtable->getAdapter()->fetchRow($select); } return null; } public function getSupervisor() { if( empty($this->getId()) ){ return null; } $this->setOptions($this->exibir($this->getId())->toArray()); $rota = (new Model_DbTable_Rota())->fetchRow(["id = ?" => $this->getRotaId()]); if( empty($rota) ){ return null; } return $rota->findParentRow('Model_DbTable_GerenteRota'); } public function enviarMensagemBoasVindas($mensagem, $view) { try { $email = new Core_Mail(); $result = $email->enviarMensagemHtml( $this->getNome(), $this->getEmail(), 'Cadastro efetuado com sucesso', $mensagem ); } catch ( Exception $exc ) { $result = ["msg" => $exc->getMessage()]; } if ($whatsapp = Core_Whatsapp_Factory::load()){ $textoMensagem = "*{$this->getNome()}*\n\n" . "Seu cadastro foi efetuado com sucesso em nosso sistema.\n" . "Seja bem-vindo e desejamos que essa parceria gere negócios duradouros.\n\n" . "A partir de agora você já pode acessar o *Sistema Yuppie* com os seguintes dados:\n\n" . "*Link:* " . $view->serverUrl() . $view->baseUrl() . "\n" . "*Usuário:* " . $this->getLogin() . "\n" . "*Senha:* " . base64_encode($this->getId()) . "\n\n\n _Esta é uma mensagem enviada, automaticamente, pelo Sistema Yuppie_"; $whatsapp->sendMessage(String_Refatorar::formatarTelefone($this->getCelular()), $textoMensagem); } return $result; } public function atualizarValidadeCertificado($parametros) { if (empty($parametros['id_corretor'])) { return [ 'success' => false, 'msg' => 'Corretor inválido.' ]; } $formatDate = new Zend_Date($parametros['nova_data']); $novaData = $formatDate->get('yyyy-MM-dd'); $dbTableCorretores = new Model_DbTable_Corretor(); $atualizado = $dbTableCorretores->fetchRow([ 'id = ?' => $parametros['id_corretor'], 'validade_certificado = ?' => $novaData ]); if ($atualizado) { return [ 'success' => false, 'msg' => 'Data igual a anterior.' ]; } $atualizado = $dbTableCorretores->update([ 'validade_certificado' => $novaData ], ['id = ?' => $parametros['id_corretor']]); if ($atualizado) { return [ 'success' => true, 'msg' => 'Data atualizada.' ]; } } public function getDiasVencimentoCertificado($validadeCertificado) { $dataValidade = new Zend_Date($this->getValidadeCertificado()); $diff = $dataValidade->subTimestamp(Zend_Date::now()); return ceil(($diff->toValue()) / 60 / 60 / 24); } public function enviarNotificacaoValidadeCertificado($corretores) { foreach ($corretores as $corretor) { $dataValidade = new Zend_Date($corretor['validade_certificado']); $validade = $dataValidade->get('dd/MM/yyyy'); $dias = $this->getDiasVencimentoCertificado($corretor['validade_certificado']); $mensagem = "Prezado(a) parceiro(a),<br><br>" . "Informamos que o seu certificado <strong>Nº <u> {$corretor['numero_certificado']} </u></strong> está próximo de se vencer. Sua data de validade é <strong>{$validade}</strong>.<br><br>" . "Lembramos que conforme <strong>resolução do Banco Central, todo agente que faça o atendimento ao cliente, deve ser certificado por uma entidade reconhecida pelo BACEN</strong>.<br><br>" . "Diante disto, solicitamos que você providencie a renovação da sua certificação em tempo hábil para que não tenha sua produção prejudicada, sendo impedido de digitar.<br><br>" . "Nossa equipe de suporte está à disposição para fornecer informações adicionais a qualquer momento, colaborando e orientando para que você tenha sua certificação atualizada.<br><br>" . "A direção.<br><br><br>" . "<div style='font-size: 11px; text-align: center;'> <p>Esta mensagem foi enviada pelo Sistema Yuppie - <a href='http://www.yuppietech.com.br' target='_blank'>www.yuppietech.com.br</a></p> </div>"; $assunto = $dias > 1 ? "Faltam {$dias} dias para seu certificado vencer!" : "Falta {$dias} dia para seu certificado vencer!"; if( in_array($dias, [1, 30, 45]) ){ $this->dispararEmail($corretor['nome'], $corretor['email'], $assunto, $mensagem); } } } public function dispararEmail($nome, $emailDestino, $assunto, $mensagem) { $emailConfiguracao = new Model_DbTable_EmailConfiguracao(); $emailOrigem = $emailConfiguracao->fetchRow(['tipo = ?' => 'Validade Certificado'])->email; try { $email = new Core_Mail(); $email->setFrom($emailOrigem); $result = $email->enviarMensagemHtml( $nome, $emailDestino, $assunto, $mensagem ); } catch ( Exception $exc ) { $result = ["error" => $exc->getMessage()]; } return $result; } /** * @param $corretor */ public function checkDadosBancarios(&$corretor) { $dadosCorretor = $this->exibir($corretor['id']); $dadosBancarios = (new Model_DbTable_Corretor())->getCamposDadosBancarios($corretor['id']); $dadosAlterados = array_diff_assoc(array_intersect_key($this->_toArray(), $dadosBancarios), $dadosBancarios); if (count($dadosAlterados) > 0) { $corretor['dados_banco_alterado'] = 1; return; } $corretor['dados_banco_alterado'] = $dadosCorretor->dados_banco_alterado; } /** * @param $corretorId * @return array|null */ public static function getEmailsAdicionaisCorretor($corretorId) { $modelEmail = new Model_CorretorEmail(); $emailsAdicionaisCorretor = $modelEmail->listar(['corretor_id' => $corretorId]); if (!$emailsAdicionaisCorretor) { return null; } $emailsAdicionais = []; foreach ($emailsAdicionaisCorretor as $em) { if ($em->juridico == 1) { $emailsAdicionais[] = $em->email_adicional; } } return $emailsAdicionais; } /** * @param int $corretorId * @return bool * @throws Zend_Date_Exception */ public function checarIndiceFraude(int $corretorId): bool { $dataInicial = Zend_Date::now()->subMonth(1)->setDay(1)->get('yyyy-MM-dd'); $dataFinal = Zend_Date::now()->setDay(1)->get('yyyy-MM-dd'); $tbContratos = new Model_DbTable_Contrato(); $contratosCorretor = $tbContratos->getContratosPeriodoPorCorretor($corretorId, $dataInicial, $dataFinal); $contratosFraude = $tbContratos->getContratosPeriodoPorCorretor($corretorId, $dataInicial, $dataFinal, 3); $tbAcoes = new Model_DbTable_ContratoAcao(); $acoesFraude = $tbAcoes->getQtdFraudeCorretor($corretorId, $dataInicial, $dataFinal); $indice = 0; if ($contratosCorretor > 0) { $indice = ($contratosFraude + $acoesFraude) / $contratosCorretor; } if ($indice > 0.06) { return true; } return false; } /** * @param string $email */ public static function validarEmail(string $email): void { $corretorExistente = (new Model_DbTable_Corretor())->findByEmail($email); if (!empty($corretorExistente)) { throw new EmailJaUtilizadoException(); } } public function getOrCreate($bancoId, $login = null) { $usuario = explode("_", $login); $dadosCorretor = (new Model_CorretorSenha()) ->getCorretorBySenha($usuario[0], $bancoId); if ($dadosCorretor) { return $dadosCorretor->id; } $cpfCorretor = (new Validators_Cpf())->isValid($usuario[0]) ? $usuario[0] : "11111111111"; $dadosCorretor = $this->getByCpf($cpfCorretor); if ($dadosCorretor) { return $dadosCorretor->id; } $empresa = (new Model_Empresa())->getPrimeiraEmpresaAtiva(); $rota = (new Model_DbTable_Rota())->fetchRow(null, "id ASC"); $corretor = new Model_Corretor(); $corretor->setNome('Corretor autocontratação'); $corretor->setCpf($cpfCorretor); $corretor->setEmpresaId($empresa['id']); $corretor->setRotaId($rota->id); $corretor->setBloquearPagamento(1); $corretor->setPermitirSincYuppies(0); $corretor->setNivelEsteira(0); $corretor->setTipoVenda(0); $corretorId = $corretor->salvar($corretor); $corretorSenha = new Model_CorretorSenha(); $corretorSenha->setSenha($usuario[0]); $corretorSenha->setCorretorId($corretorId); $corretorSenha->setBancoId($bancoId); $corretorSenha->salvar($corretorSenha); return $corretorId; } /** * @param array $tipos * @param array $links * @param string $controller * @param bool $landingPage */ public function gerarMeusLinks(array $tipos, array &$links, string $controller, bool $landingPage = false) { $corretorId = Yuppie_Auth::getIdentity()->id; $front = Zend_Controller_Front::getInstance(); $server = (new Zend_Controller_Request_Http())->getServer(); foreach ($tipos as $key => $tipo) { $parametros = !empty($landingPage) ? "corretor_id={$corretorId}&tipo_operacao=$key&ldp=$landingPage" : "corretor_id={$corretorId}&tipo_operacao=$key" ; $links[$tipo] = Core_Link::criaLink( "https://{$_SERVER['HTTP_HOST']}{$front->getBaseUrl()}/{$controller}", $parametros ); } } /** * @param int $corretorId * @return mixed */ public function getGerenteRota(int $corretorId) { $tbCorretor = new Model_DbTable_Corretor(); return $tbCorretor->getGerenteRota($corretorId); } public function getEmpresaByCodCorretor($corretorId) { $dbtable = new Model_DbTable_Corretor(); $select = $dbtable->getAdapter()->select()->from(["corretores" => "tb_corretores"], []) ->joinInner('tb_empresas', 'tb_empresas.id = corretores.empresa_id'); if ($corretorId) { $select->where('corretores.id = ?', $corretorId); } return $dbtable->getAdapter()->fetchRow($select); } /** * Faz o reset do campo secret_gauth * @params int $id */ public function resetGauth(int $id) { if (!$id) { return; } return (new Model_DbTable_Corretor())->update(['secret_gauth' => null], "id = " . $id); } public function saveSecretGauth(string $secret, int $corretorId) { if (empty($secret) || !$corretorId) { return; } return (new Model_DbTable_Corretor())->update(['secret_gauth' => $secret], "id = " . $corretorId); } public function temCreditoConsultas(int $corretorId) { $creditos = (new Model_DbTable_ConsultaHiscon())->corretorTemCreditos($corretorId); if ($creditos == false) { return false; } return true; } }
💾 保存文件
← 返回文件管理器