Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde.
Tenho um sistema multinivel onde preciso alterar, ou criar, alguns paramentros para definir a forma como as graduações sao alcancadas no mesmo.
Atualmente as graduações no sistema sao alcancadas conforme pontuação pre-definida. Porem, preciso definir parametros que façam com que as graduações sejam alcancadas conforme o numero de donwlines ativos.
A minha matriz e de 3x5.
EXEMPLO: no nivel se os 3 downlines estiverem ativos(compraram esse mes) , o cadastrado atinge a graduação de consumidor start.
no nivel 2 são 9 downlines, que se somados com os 3 do 1º nivel, totalizam 12 pessoas. Se essas 12 pessoas estiverem ativas (efetuaram compra no mes) , o cadastrado se torna um consumidor inteligente. e assim por diante.
Alguma ideia de como insiro esseparametro para coleta de dados de ativação dos downlines para que o sistema reconhça quais graduações dar a cada um deles?
Meu codigo esta assim\: (alterei as nomenclaturas das graduações, porém, nas funcoes permanece como o original "getQuantosQualificadosBronze, getQuantosQualificadosPrata, etc...")
function getGraduacaoPorId($graduacao){
switch($graduacao){
case 1 :
return "Consumidor Start";
break;return "Consumidor Inteligente";
break;return "Consumidor Star";
break;return "Consumidor Sênior";
break;return "Consumidor Diamante";
break;return "Consumidor Duplo Diamante";
break;return "Consumidor Triplo Diamante";
break;
default :
return "S/ Graduacao";
break;
}
}
function getGraduacao($arr){
$graduacao = 0;
// Consumidor Start
if($arr['pontos'] >= 2000){
$graduacao = 1;
}
$q = quantosQualificados($arr);
// Consumidor Inteligente
if($arr['pontos'] >= 5000){$graduacao = 2;
}
}
// Consumidor Star
if($arr['pontos'] >= 10000){
if($q >= 4){
if(getQuantosQualificadosPrata($arr) > 0){
$graduacao = 3;
}
}
}
// Consumidor Sênior
if($arr['pontos'] >= 25000){
if($q >= 4){
if(getQuantosQualificadosPrata($arr) >= 2){
$graduacao = 4;
}
}
}
// Consumidor Diamante
if($arr['pontos'] >= 50000){
if($q >= 4){
if(getQuantosQualificadosPrata($arr) > 0 && getQuantosQualificadosOuro($arr) > 0){
$graduacao = 5;
}
}
}
// Consumidor Duplo Diamante
if($arr['pontos'] >= 120000){
if($q >= 6){
if(getQuantosQualificadosOuro($arr) > 0 && getQuantosQualificadosTopazio($arr) > 0){
$graduacao = 6;
}
}
}
// Consumidor Triplo Diamante
if($arr['pontos'] >= 250000){
if($q >= 6){
if(getQuantosQualificadosOuro($arr) > 0 && getQuantosQualificadosTopazio($arr) > 0 && getQuantosQualificadosPrata($arr) > 0){
$graduacao = 7;
}
}
}
return $graduacao;
}
function quantosQualificados($arr){
$rs = mysql_query("SELECT ID FROM members WHERE Leader = '".$arr['ID']."' AND status = 1");
$qualificados = 0;
for($i = 0; $i < mysql_num_rows($rs); $i++) {
$iddd = mysql_result($rs,$i,"ID");
$q = mysql_num_rows(mysql_query("SELECT ID FROM members WHERE Leader = '".$iddd."' AND status = 1"));
$qualificados += $q;
}
return $qualificados;
}
function getQuantosQualificadosBronze($arr){
$rs = mysql_query("SELECT ID FROM members WHERE Leader = '".$arr['ID']."' AND graduacao = 'bronze'");
return mysql_num_rows($rs);
}
function getQuantosQualificadosPrata($arr){
$rs = mysql_query("SELECT ID FROM members WHERE Leader = '".$arr['ID']."' AND graduacao = 'prata'");
return mysql_num_rows($rs);
}
function getQuantosQualificadosOuro($arr){
$rs = mysql_query("SELECT ID FROM members WHERE Leader = '".$arr['ID']."' AND graduacao = 'ouro'");
return mysql_num_rows($rs);
}
function getQuantosQualificadosTopazio($arr){
$rs = mysql_query("SELECT ID FROM members WHERE Leader = '".$arr['ID']."' AND graduacao = 'topazio'");
return mysql_num_rows($rs);
}
function getQuantosQualificadosEsmeralda($arr){
$rs = mysql_query("SELECT ID FROM members WHERE Leader = '".$arr['ID']."' AND graduacao = 'esmeralda'");
return mysql_num_rows($rs);
}
function getQuantosQualificadoRubi($arr){
$rs = mysql_query("SELECT ID FROM members WHERE Leader = '".$arr['ID']."' AND graduacao = 'rubi'");
return mysql_num_rows($rs);
}
function getQuantosQualificadosPlatinium($arr){
$rs = mysql_query("SELECT ID FROM members WHERE Leader = '".$arr['ID']."' AND graduacao = 'platinium'");
return mysql_num_rows($rs);
}
$DISP = $DISP == 1987 ? 0 : $DISP;
$DISP = $arr['Unpaid'];
$ganhos = $arr['Total'];
//$DISP < 0 ? $DISP = 0 : false;
$DISP = $arr['status'] == 0 ? 0 : $DISP;
mysql_query("UPDATE members SET saldo = '".($DISP)."' WHERE ID = '".$id."' LIMIT 1");
$_SESSION['DISP'] = $DISP;
function IsMemberCestaBasica($CodigoMembro)$ConsMem = mysql_query( "
Select
IsStandby,
DatePagamentoBonusUnilevel,
DateDiff(Now(), DatePagamentoBonusUnilevel) as DatePagamentoBonusUnilevelDiff
From
members
Where
ID = " . $CodigoMembro . "
Limit 1
");
$TotaMem = mysql_num_rows($ConsMem);
$DadoMem = mysql_fetch_array($ConsMem);
$RetFinal = array();
if($TotaMem)if( $DadoMem["IsStandby"] == "S" )
{
$RetFinal = array("Imagem" => "Laranja", "Mensagem" => "Standby");
}else{
if( $DadoMem["DatePagamentoBonusUnilevel"] == "0000-00-00" )
{
$RetFinal = array("Imagem" => "Nunca", "Mensagem" => "Nenhuma Compra Feita");
}else{
if( $DadoMem["DatePagamentoBonusUnilevelDiff"] < 30 ){
$RetFinal = array("Imagem" => "Verde", "Mensagem" => "Última Compra á " . $DadoMem["DatePagamentoBonusUnilevelDiff"] . " dias");
}elseif( $DadoMem["DatePagamentoBonusUnilevelDiff"] >= 30 && $DadoMem["DatePagamentoBonusUnilevelDiff"] <= 60 ){
$RetFinal = array("Imagem" => "Amarelo", "Mensagem" => "Última Compra á " . $DadoMem["DatePagamentoBonusUnilevelDiff"] . " dias");
}else{
$RetFinal = array("Imagem" => "Vermelho", "Mensagem" => "Última Compra á " . $DadoMem["DatePagamentoBonusUnilevelDiff"] . " dias");
}
}
}
}else{
$RetFinal = array("Imagem" => "Nunca", "Mensagem" => "Nenhuma Compra Feita");
}
mysql_free_result($ConsMem);
return $RetFinal;
}
?>Então....
O código esta confuso mesmo,eu sei.
Pois no codigo que tenho as graduações tem nomes diferentes (Bronze,Prata,ouro,topazio,etc...), e as graduações são definidas por pontuação alcancada e por conseguir graduar os downlines...
Estou tentando alterá-lo para deixar as graduações por nível completo e não por pontuação, como está definido...
Exemplo:
A primeira graduação é o consumidor start.
No codigo esta definido que para tal é necessario atingir 2000 pontos.
Porem, o que quero fazer é definir parametros para que as pessoas não graduem por pontos e sim por níveis completos.
Para atingir a primeira graduação (consumidor start), por exemplo, a pessoa teria que ter seu primeiro nivel completo, ou seja, 3 consumidores ativos.
E assim por diante...
A Tabela "Members" (onde estao armazenados os dados dos consumidores), fica no banco de dados nomedaempresa_mmn e Tem as seguintes colunas:
CREATE TABLE dummy (
`ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(75) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`Address` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`City` VARCHAR(75) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`State` VARCHAR(75) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`Zip` VARCHAR(75) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`Country` VARCHAR(75) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`Phone` VARCHAR(75) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`Email` VARCHAR(75) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`Password` VARCHAR(75) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`PaymentDetails` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`ref_by` INT(10) UNSIGNED NOT NULL,
`Level1` INT(10) UNSIGNED NOT NULL,
`Level2` INT(10) UNSIGNED NOT NULL,
`Level3` INT(10) UNSIGNED NOT NULL,
`Level4` INT(10) UNSIGNED NOT NULL,
`Level5` INT(10) UNSIGNED NOT NULL,
`Level6` INT(10) UNSIGNED NOT NULL,
`Level7` INT(10) UNSIGNED NOT NULL,
`Level8` INT(10) UNSIGNED NOT NULL,
`Level9` INT(10) UNSIGNED NOT NULL,
`Level10` INT(10) UNSIGNED NOT NULL,
`Leader` INT(10) UNSIGNED NOT NULL,
`Total` FLOAT(8,2) NULL DEFAULT '0.00',
`Unpaid` FLOAT(8,2) NULL DEFAULT '0.00',
`Paid` FLOAT(8,2) NULL DEFAULT '0.00',
`IP` VARCHAR(75) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`Date` DATETIME NULL DEFAULT NULL,
`DatePagamentoBonus` DATE NULL DEFAULT NULL,
`pacote` VARCHAR(100) NOT NULL DEFAULT 'lider' COLLATE 'utf8_unicode_ci',
`cpf` VARCHAR(32) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`banco` VARCHAR(255) NOT NULL COLLATE 'utf8_unicode_ci',
`agencia` VARCHAR(255) NOT NULL COLLATE 'utf8_unicode_ci',
`conta` VARCHAR(255) NOT NULL COLLATE 'utf8_unicode_ci',
`titular` VARCHAR(255) NOT NULL COLLATE 'utf8_unicode_ci',
`neteller` VARCHAR(255) NOT NULL COLLATE 'utf8_unicode_ci',
`contasuper` VARCHAR(255) NOT NULL COLLATE 'utf8_unicode_ci',
`paypal` VARCHAR(255) NOT NULL COLLATE 'utf8_unicode_ci',
`token` VARCHAR(255) NOT NULL COLLATE 'utf8_unicode_ci',
`status` INT(11) NOT NULL COMMENT '1 para ativado, 0 para inativo para recebimento de bonus (login independe disso!)',
`banco_cpf` VARCHAR(30) NOT NULL COLLATE 'utf8_unicode_ci',
`tipo_conta` ENUM('cc','poupanca') NOT NULL DEFAULT 'cc' COLLATE 'utf8_unicode_ci',
`bairro` VARCHAR(255) NOT NULL COLLATE 'utf8_unicode_ci',
`n_reativacoes` INT(11) NOT NULL DEFAULT '0',
`pontos` INT(20) NULL DEFAULT '0',
`totalultimascompras` FLOAT NOT NULL DEFAULT '0' COMMENT 'soma do montante de todas compras na loja virtual desde do ultimo saque efetuado, isso eh usado para manter o saldo disponivel coerente',
`fb_uid` VARCHAR(50) NOT NULL COLLATE 'utf8_unicode_ci',
`saldo_binario_sacado_e` INT(20) NOT NULL DEFAULT '0' COMMENT 'perna esquerda',
`saldo_binario_sacado_d` INT(20) NOT NULL COMMENT 'perna direita',
`produtos_indicados` INT(20) NOT NULL DEFAULT '0' COMMENT 'armazena a quantidade de produtos comprados na loja quando o comprador acessa via url pessoal do membro indicador',
`graduacao` VARCHAR(30) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`saldo` FLOAT NOT NULL DEFAULT '0',
`saldo_indiretos_sacado` FLOAT(20,2) NOT NULL DEFAULT '0.00',
`proxima_perna` ENUM('e','d','a') NOT NULL DEFAULT 'a' COLLATE 'utf8_unicode_ci',
`perna` ENUM('e','d') NOT NULL DEFAULT 'e' COLLATE 'utf8_unicode_ci',
`pagamento_unilevel` DATE NOT NULL,
`DatePagamentoBonusUnilevel` DATE NOT NULL,
`ponto` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`rg` VARCHAR(40) NOT NULL COLLATE 'utf8_unicode_ci',
`cestas` INT(10) NOT NULL DEFAULT '0',
`feito_unilevel` DATE NOT NULL,
`IsStandby` ENUM('S','N') NOT NULL DEFAULT 'N' COLLATE 'utf8_unicode_ci',
`pagou_adesao` DATE NULL DEFAULT NULL,
`cupom` FLOAT NULL DEFAULT NULL,
`codigocupom` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci'
)
A questão é...
Como definir parametros para identificar quantas pessoas tem em cada "nível"(Level1, Level2,Level3,etc...), e se as mesmas estão "ativas".
OBS: AS ativações mensais de cada um aparecem na coluna DatePagamentoBonusUnilevel, so que aparecem em forma de data....
Tirou as redundâncias do código, mas criou outro problema diretamente no banco.
Level1 INT(10) UNSIGNED NOT NULL,
Level2 INT(10) UNSIGNED NOT NULL,
Level3 INT(10) UNSIGNED NOT NULL,
Level4 INT(10) UNSIGNED NOT NULL,
Level5 INT(10) UNSIGNED NOT NULL,
Level6 INT(10) UNSIGNED NOT NULL,
Level7 INT(10) UNSIGNED NOT NULL,
Level8 INT(10) UNSIGNED NOT NULL,
Level9 INT(10) UNSIGNED NOT NULL,
Level10 INT(10) UNSIGNED NOT NULL,
Essa tabela tem responsabilidade demais, normalize os dados
A normalização é o processo de organizar dados em um banco de dados. Isso inclui criar tabelas e estabelecer relacionamentos entre as tabelas de acordo com regras projetadas para proteger os dados e tornar o banco de dados mais flexível, eliminando a redundância e dependência inconsistente.
Mas Fácil deixar o código mais enxuto do que tentar adaptar, para ai sim tenta incrementar algo novo, confesso que não entendi nada neste código!
Veja a quantidade de querys fazendo praticamente a mesma coisa. Elimine as redundâncias, assim você saberá o que sera necessário para que o sistema funcione corretamente
Veja que, em uma única função voce elimina outras seis funções totalmente desnecessárias.
/**
* Obter ID Members
* @param $arr array contendo o ID
* @param $graduacao graduação do usuário
*/
De uma olhada no que mais possa ser otimizado, assim entenderemos melhor oque você quer.