✏️ 正在编辑: Campanha.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/application/models/Campanha.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Model_Campanha { private $_id; private $_descricao; private $_dataInicial; private $_dataFinal; private $_valorPonto; private $_prazoResgate; //prazo máximo em dias para resgate de pontos private $_producaoMedia; private $_protocoloFisico; private $_frequenciaResgate; private $_acrescimoUltimoResgate; private $_periodoSemProducao; private $_regras; public function getId() { return $this->_id; } public function setId($id) { $this->_id = $id; } public function getDescricao() { return $this->_descricao; } public function setDescricao($descricao) { $this->_descricao = $descricao; } public function getDataInicial() { return $this->_dataInicial; } public function setDataInicial($dataInicial) { if( !empty($dataInicial) ){ try { $data = new Zend_Date($dataInicial, Zend_Date::DATES, 'pt'); $dataInicial = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataInicial = null; } } else { $dataInicial = null; } $this->_dataInicial = $dataInicial; } public function getDataFinal() { return $this->_dataFinal; } public function setDataFinal($dataFinal) { if( !empty($dataFinal) ){ try { $data = new Zend_Date($dataFinal, Zend_Date::DATES, 'pt'); $dataFinal = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataFinal = null; } } else { $dataFinal = null; } $this->_dataFinal = $dataFinal; } public function getValorPonto() { return $this->_valorPonto; } public function setValorPonto($valorPonto) { $this->_valorPonto = $valorPonto; } public function getPrazoResgate() { return $this->_prazoResgate; } public function setPrazoResgate($prazoResgate) { $this->_prazoResgate = $prazoResgate; } public function getProducaoMedia() { return $this->_producaoMedia; } public function setProducaoMedia($producaoMedia) { $this->_producaoMedia = $producaoMedia; } public function getProtocoloFisico() { return $this->_protocoloFisico; } public function setProtocoloFisico($protocoloFisico) { $this->_protocoloFisico = $protocoloFisico; } public function getFrequenciaResgate() { return $this->_frequenciaResgate; } public function setFrequenciaResgate($frequenciaResgate) { $this->_frequenciaResgate = $frequenciaResgate; } public function getAcrescimoUltimoResgate() { return $this->_acrescimoUltimoResgate; } public function setAcrescimoUltimoResgate($acrescimoUltimoResgate) { $this->_acrescimoUltimoResgate = $acrescimoUltimoResgate; } public function getPeriodoSemProducao() { return $this->_periodoSemProducao; } public function setPeriodoSemProducao($periodoSemProducao) { $this->_periodoSemProducao = $periodoSemProducao; } function getRegras() { return $this->_regras; } function setRegras($regras) { $this->_regras = $regras; } public function __construct($options = null) { 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_Campanha(); $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 registro passado por parâmetro * @param Model_Campanha $campanha */ public function salvar(Model_Campanha $campanha) { $dbtable = new Model_DbTable_Campanha(); if( $campanha->getId() > 0 ){ $dbtable->update($campanha->_toArray(), "id = " . $campanha->getId()); return $campanha->getId(); } else { return $dbtable->insert($campanha->_toArray()); } } /** * Retorna uma lista * @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_Campanha(); return $dbtable->fetchAll($where, $order, $count, $offset); } /** * Exclui o registro 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_Campanha(); return $dbtable->delete("id = " . $id); } return null; } /** * 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_Campanha(); return $dbtable->fetchRow("id = " . $id); } public function getContratos($fields, $order = 'data_liberacao') { $fields['campanha'] = 1; if( isset($fields['campanha_id']) && !empty($fields['campanha_id']) ){ $campanha = new Model_DbTable_Campanha(); $dadosCampanha = $campanha->fetchRow("id = " . $fields['campanha_id']); unset($fields['data_liberacao']); // unset($fields['campanha_id']); $fields['data_liberacao_de'] = date('d/m/Y', strtotime($dadosCampanha['data_inicial'])); $fields['data_liberacao_a'] = date('d/m/Y', strtotime($dadosCampanha['data_final'])); $fields['protocolo_fisico'] = $dadosCampanha['protocolo_fisico']; $fields['periodo_sem_producao'] = $dadosCampanha['periodo_sem_producao']; $fields['producao_media'] = $dadosCampanha['producao_media']; } $dbtable = new Model_DbTable_Contrato(); return $dbtable->fetchAllDependents($fields, $order); } public function getEtiquetas($fields = null) { $dbtable = new Model_DbTable_CallcenterBase(); $select = $dbtable->getAdapter()->select()->from(array( 'callcenter' => 'tb_callcenter_base' ), array( 'nome', 'endereco', 'numero', 'bairro', 'cidade', 'cep', 'uf', 'cpf')); if( isset($fields['campanha_id']) && !empty($fields['campanha_id']) ){ if( is_array($fields['campanha_id']) ){ $fields['campanha_id'] = array_filter($fields['campanha_id']); $select->where("callcenter.campanha_id IN ('" . implode("','", $fields['campanha_id']) . "')"); } else { $select->where("callcenter.campanha_id = " . $fields['campanha_id']); } } if( isset($fields['status_atendimento']) && !empty($fields['status_atendimento']) ){ if( is_array($fields['status_atendimento']) && count($fields['status_atendimento']) ){ $where_status = implode( "' OR callcenter.status_atendimento LIKE '", array_filter($fields['status_atendimento']) ); $where_status = "callcenter.status_atendimento LIKE '$where_status'"; if(in_array("sem_status", $fields['status_atendimento'])){ $where_status = "$where_status OR callcenter.status_atendimento IS NULL"; } $select->where("($where_status)"); } else { if(!is_bool(strpos($fields['status_atendimento'], "sem_status"))){ $where_status = "callcenter.status_atendimento IS NULL"; } else { $where_status = "callcenter.status_atendimento LIKE '{$fields['status_atendimento']}'"; } $select->where("($where_status)"); } } if( isset($fields['uf']) && !empty($fields['uf']) ){ $select->where("callcenter.uf = '" . $fields['uf'] . "'"); } if( isset($fields['cpf']) && !empty($fields['cpf']) ){ $select->where("callcenter.cpf = '" . String_Refatorar::formatarCpf($fields['cpf']) . "'"); } if( isset($fields['nome']) && !empty($fields['nome']) ){ $select->where("callcenter.nome LIKE '%" . $fields['nome'] . "%'"); } $select->where("callcenter.ativo = 1"); $count = !empty($fields['cliente_a']) ? $fields['cliente_a'] : 1200; $offset = !empty($fields['cliente_de']) ? $fields['cliente_de'] - 1 : 0; $select->limit($count, $offset); return $dbtable->getAdapter()->fetchAll($select, '', Zend_Db::FETCH_OBJ); } public function getIdsTabelas($campanhaId) { $mCampanhaTabela = new Model_CampanhaTabela(); $tabelas = $mCampanhaTabela->listar("campanha_id = " . $campanhaId); $idsTabelas = array(); foreach ( $tabelas as $tabela ) { $idsTabelas[] = $tabela['tabela_id']; } return $idsTabelas; } public function getIdsConvenios($campanhaId) { $mCampanhaConvenio = new Model_CampanhaConvenio(); $convenios = $mCampanhaConvenio->listar("campanha_id = " . $campanhaId); $idsConvenios = array(); foreach ( $convenios as $convenio ) { $idsConvenios[] = $convenio['convenio_id']; } return $idsConvenios; } public function getIdsStatus($campanhaId) { $mCampanhaStatus = new Model_CampanhaStatus(); $status = $mCampanhaStatus->listar("campanha_id = " . $campanhaId); $idsStatus = array(); foreach ( $status as $dadosStatus ) { $idsStatus[] = $dadosStatus['status_id']; } return $idsStatus; } public function relatorioCampanha(array $fields) { // dados da campanha $dbCampanha = new Model_DbTable_Campanha(); $campanha = $dbCampanha->fetchRow('id = ' . $fields['campanha_id']); $idsTabelas = $this->getIdsTabelas($campanha['id']); $idsConvenios = $this->getIdsConvenios($campanha['id']); $idsStatus = $this->getIdsStatus($campanha['id']); // data inicial e final da campanha $dataInicial = new Zend_Date($campanha['data_inicial']); $dataFinal = new Zend_Date($campanha['data_final']); // consulta para retornar a data de emissao do primeiro contrato $dbcontrato = new Model_DbTable_Contrato(); // calculando os periodos $periodos = array(); $meses = (int) (($dataFinal->getTimestamp() - $dataInicial->getTimestamp()) / (86400 * 30)); $intervalos = $campanha['frequencia_resgate'] > 0 ? ceil($meses / $campanha['frequencia_resgate']) : 0; // buscando os contratos por periodo $resultadosPorPeriodo = array(); $ultimaData = null; $dataPeriodoInicio = new Zend_Date($dataInicial->get('dd/MM/yyyy')); $dataPeriodoFinal = new Zend_Date($dataInicial->addMonth($campanha['frequencia_resgate'])); $diasMes = $dataPeriodoFinal->get(Zend_Date::MONTH_DAYS); $dataPeriodoFinal = $dataPeriodoFinal->setDay($diasMes); for ( $i = 0; $i < $intervalos; $i++ ) { if ($i > 0) { $finalTemp = clone $dataPeriodoFinal; $dataPeriodoInicio = $finalTemp->setDay(1)->addMonth(1); $dataPeriodoFinal = $dataPeriodoFinal->addMonth($campanha['frequencia_resgate']); $diasMes = $dataPeriodoFinal->get(Zend_Date::MONTH_DAYS); $dataPeriodoFinal = $dataPeriodoFinal->setDay($diasMes); } $dados = array( 'ids_convenios' => $idsConvenios, 'ids_tabelas' => $idsTabelas, 'ids_status' => $idsStatus, 'protocolo_fisico' => $campanha['protocolo_fisico'], 'corretor_id' => $fields['corretor_id'], 'data_emissao_de' => $dataPeriodoInicio->get('dd/MM/yyyy'), 'data_emissao_a' => $dataPeriodoFinal->get('dd/MM/yyyy'), 'producao_media' => $campanha['producao_media'], 'p_sem_producao' => $campanha['periodo_sem_producao'], 'valor_ponto' => $campanha['valor_ponto'], 'intervalos' => $intervalos ); $mediaMensal = $dbcontrato->temMediaMensal($dados); $semProducao = $dbcontrato->temPeriodoSemProducao($dados, $i, $ultimaData); if( $dados['protocolo_fisico'] ){ $protNaoRecebido = $dbcontrato->temProtNaoRecebido($dados); if( isset($protNaoRecebido['total']) && $protNaoRecebido['total'] > 0 ){ $msgProtNaoRecebido = 'Você possui ' . $protNaoRecebido['total'] . ' contrato(s) sem entrega de físico.'; $resultadosPorPeriodo[$i]['protocolo_nao_recebido'] = $msgProtNaoRecebido; } } if( !$semProducao['status'] && !is_null($semProducao['data']) ){ $ultimaData = new Zend_Date($semProducao['data']); } $resultadosPorPeriodo[$i]['media_mensal'] = $mediaMensal; $resultadosPorPeriodo[$i]['sem_producao'] = $semProducao; if( $mediaMensal != "Não possui produção média" && !$semProducao['status'] ){ $arrayDados = array( 'corretor_id' => $dados['corretor_id'], 'campanha_id' => $fields['campanha_id'], 'data_inicial' => $dados['data_emissao_de'], 'data_final' => $dados['data_emissao_a'] ); $pontuacao = $dbCampanha->getPontuacaoGeral($arrayDados); $resultadosPorPeriodo[$i]['pontuacao'] = $pontuacao; } else { $resultadosPorPeriodo[$i]['pontuacao'] = 0.00; } } return $resultadosPorPeriodo; } public function auditoriaCampanha(array $fields) { // dados da campanha $dbCampanha = new Model_DbTable_Campanha(); $campanha = $dbCampanha->fetchRow('id = ' . $fields['campanha_id']); // data inicial e final da campanha $dataInicial = new Zend_Date($campanha['data_inicial']); $dataFinal = new Zend_Date($campanha['data_final']); // calculando os periodos $periodos = array(); $meses = (int) (($dataFinal->getTimestamp() - $dataInicial->getTimestamp()) / (86400 * 30)); $intervalos = ceil($meses / $campanha['frequencia_resgate']); $ref = 0; $dataPeriodo = new Zend_Date($dataInicial->get('dd/MM/yyyy')); $periodos[] = $dataPeriodo->get('dd/MM/yyyy'); for ( $i = 0; $i < $meses; $i++ ) { if( $ref == $campanha['frequencia_resgate'] ){ $periodos[] = $dataPeriodo->get('dd/MM/yyyy'); $ref = 0; } else { $ref++; } $dataPeriodo->setDay(1)->addMonth(1); } $idsTabelas = $this->getIdsTabelas($campanha['id']); $idsConvenios = $this->getIdsConvenios($campanha['id']); $idsStatus = $this->getIdsStatus($campanha['id']); // buscando os contratos por periodo $resultadosPorPeriodo = array(); $totalPeriodos = count($periodos); $contratos = array(); for ( $i = 0; $i < $totalPeriodos; $i++ ) { $dataPeriodo = new Zend_Date($periodos[$i]); $inicio = $dataPeriodo->get('dd/MM/yyyy'); $final = $dataPeriodo->addMonth($meses)->get('dd/MM/yyyy'); $dados = array( 'ids_convenios' => $idsConvenios, 'ids_tabelas' => $idsTabelas, 'ids_status' => $idsStatus, 'protocolo_fisico' => $campanha['protocolo_fisico'], 'corretor_id' => $fields['corretor_id'], 'data_emissao_de' => $inicio, 'data_emissao_a' => $final, 'producao_media' => $campanha['producao_media'], 'p_sem_producao' => $campanha['periodo_sem_producao'], 'valor_ponto' => $campanha['valor_ponto'], 'intervalos' => $intervalos ); $dbcontrato = new Model_DbTable_Contrato(); $contratos[] = $dbcontrato->getContratos($dados); } return $contratos; } public function rankValores($params) { $dbtable = new Model_DbTable_Campanha(); $dbcontratos = new Model_DbTable_Contrato(); $idsTabelas = $this->getIdsTabelas($params['campanha_id']); $idsConvenios = $this->getIdsConvenios($params['campanha_id']); $idsStatus = $this->getIdsStatus($params['campanha_id']); $campanha = $dbtable->getById($params['campanha_id']); $sqlContratos = $dbcontratos->getAdapter()->select() ->from(array( 'contratos' => 'tb_contratos' ), array( 'valor_liquido' => 'SUM(IF(contratos.valor_liquido IS NULL, 0, contratos.valor_liquido))' )) ->joinInner(array( 'corretores' => 'tb_corretores' ), 'corretores.id = contratos.corretor_id', array( 'corretor' => 'nome', 'corretor_id' => 'id' )) ->where("contratos.excluido <> 1 and contratos.tipo_registro = 1 " . "and corretores.excluido <> 1 and (corretores.corretor_desativado = 0 OR corretores.corretor_desativado IS NULL)") ->where("contratos.data_emissao >= '" . $campanha['data_inicial'] . "'") ->where("contratos.data_emissao <= '" . $campanha['data_final'] . "'") ->group('contratos.corretor_id') ->order('valor_liquido DESC'); if( $campanha['protocolo_fisico'] == 1 ){ $sqlContratos->where("(contratos.data_recebimento_fisico IS NOT NULL AND contratos.data_recebimento_fisico <> '0000-00-00')"); } if( isset($idsConvenios) && $idsConvenios ){ $sqlContratos->where("contratos.convenio_id IN (" . implode(", ", $idsConvenios) . ")"); } if( isset($idsTabelas) && $idsTabelas ){ $sqlContratos->where("contratos.tabela_id IN (" . implode(", ", $idsTabelas) . ")"); } if( isset($idsStatus) && $idsStatus ){ $sqlContratos->where("contratos.status_proposta IN (" . implode(",", $idsStatus) . ")"); } $select = $dbtable->getAdapter()->select()->from(array( 'campanha' => 'tb_campanhas' ), array()) ->joinLeft(array( 'faixas' => 'tb_campanha_faixa_valores' ), 'faixas.campanha_id = campanha.id', array( 'nome' )) ->joinInner(array( 'contratos' => $sqlContratos ), 'contratos.valor_liquido >= faixas.valor_inicial ' . 'and contratos.valor_liquido <= faixas.valor_final ') ->where('campanha.id = ?', $params['campanha_id']) ->where('campanha.excluido = 0') ->where('faixas.excluido = 0') ->order(array( 'valor_liquido DESC', 'faixas.nome' )); return $dbtable->getAdapter()->fetchAll($select); } }
💾 保存文件
← 返回文件管理器