Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá a todos;
Estou montando uma rede de níveis tipo marketing multinível e cheguei em um ponto que não estou conseguindo avançar, é o seguinte: A pessoa entra no site faz o cadastro dela, e vai fazendo compras durante aquele mês, e dessas compras vai acumulando os seus pontos, e vou gravando esses pontos no banco de dados com datas e tudo. Se a pessoa quiser trocar os seus pontos por produto, ela tem que ter um x de pontos para poder trocar, até aí beleza. Só que ela tem que trocar os seus pontos durante aquele período ou mês, e se ela não trocar durante aquele período e virar o mês, os seus pontos devem ir para uma tabela de pontos acumulados pois não pode passar para o próximo período ou mês e juntar com os pontos daquele período ou mês, é aí que estou parado. Não consigo pensar em uma logica para transferir esses pontos que ela não trocou naquele período ou mês para uma outra tabela de pontos acumulados quando estiver acabando aquele período, alguém poderia me auxiliar nessa lógica?Vejo duas formas de fazer, ou pelo banco ou pelo PHP:
No banco você pode criar uma rotina que vai executar sempre no dia 01 às 00:00:00. No SQL Server essa rotina se chama JOB, no Mysql se chama Evento. E essa rotina vai chamar uma procedure que verifica se existem pontos não trocados e copiar para a tabela de pontos acumulados etc...
A outra forma é você criar uma rotina no windows ou um crontab no linux que vai executar sempre no dia 01 às 00:00:00, e essa rotina ou crontab vai executar um arquivo .php que faz esse esquema: Verifica se existem pontos não trocados e copia para a tabela de pontos acumulados etc...
halfar, bom dia.
Pois é, não é exigência minha não é para um cliente que estou tentando pegar esse serviço dele.
Ele quer que todos os pontos que a pessoa acumulou naquele período vai para essa tabela, e lá pode ir acumulando para ser usado para fazer compras depois. Ele quer de certa forma, forçar a pessoa a comprar dentro daquele periodo para ganhar mais pontos ou trocar por mercadorias. Também acho que pode aborrecer a pessoa e ela ir comprar em outra loja, más fazer o que, ele quer. Aí minha dúvida é justamente aí, pois tenho que pegar quem tem pontos naquele mês ou periodo e jogar para essa tabela. O problema EdCesar, como eu vou fazer isso para cada cliente pelo evento, pois cada cliente tem um id especifico e como esse evento faria isso. Pois o evento tem que saber se aquele cliente daquele id fez ou não compra durante aquele periodo e se ele tem pontos acumulados o suficiente para ir para a outra tabela caso ele não opte por trocar naquele periodo. Minha cabeça já esta doendo, más agradeço a todos.
Primeiro que você não precisaria ter 2 tabelas para isto, se você tem os pontos e sabe em que mês eles foram criados você pode determinar se é o mês corrente ou não.
Agora, se você deseja realizar esse processo, crie um arquivo que faça isto (leia a tabela e faça o processo do modo que você deseje, seja lá como for isto) e agende no cron para rodar no primeiro segundo do primeiro dia de cada mês, pronto.
Bom dia ESerra,
Vou estudar mais sobre o cron e ver como eu faço essa logica para rodar todo o dia primeiro do mês, e ver quem são os clientes que tem pontos dentro daquele periodo e transferir para a outra tabela de pontos acumulados, obrigado.
Se o seu servidor for cpanel, existe uma interface gráfica para fazer o agendamento.
Utilizo o servidor da locaweb, vou ver.
Lá também tem uma interface gráfica para isto (ou tinha).
ESerra, seria esse agendador de tarefas?

Aparentemente é... mas veja isto cm o suporte do host.
deixa eu entender uma coisa:
o cliente acumula pontos num determinado mes, mas se não conseguir um númeo mínimo de mes vai para uma outra tabela de pontos acumulados.
Então vamos supor que a pontuacao mínima é de 100 pontos.
No mes de janeiro fez 70 pontos (não pode trocar os pontos, pois não atingiu o minimo de 100 pontos)
No mes de fevereiro fez 30 pontos (não pode trocar os pontos, pois não atingiu o minimo de 100 pontos)
No mes de março fez 60 pontos (não pode trocar os pontos, pois não atingiu o minimo de 100 pontos)
etc....
Então estes pontos que não pode trocar vai para uma tabela de acumulados, que no caso estará com 160 pontos.
Quando, como ela irá trocar estes 160 pontos??? Pois voce disse que " não pode passar para o próximo período ou mês e juntar com os pontos daquele período ou mês" (desculpa, mas os negritos não estão funcionando, era para grifar a frase toda).
Só quero entender bem para poder ajudar.
Bom dia Halfar,
É isso mesmo, se ela não conseguiu dentro do período a pontuação minima, os pontos que ela conseguiu dentro desse período deve ir para a tabela de pontos acumulados e lá quando ela conseguir os 100 pontos ela já pode utilizar eles fazendo novas compras com esses pontos, pois ela estará acumulando eles em outra tabela.
bem, acho que agora esclareceu, ela pode comprar com pontos do mes somente se tiver atingido o mínimo, ou poderá usar os acumulados, MAS NA TABELA DE ACUMULADOS TEM QUE TER O MÍNIMO ACUMULADO TAMBÉM (EM NOSSO EXEMPLO 100 PONTOS). O que não pode é ter 30 no mes vigente, e mais 70 na tabela acumulada, que totaliza 100 pontos, mas não pode usar, pois é necessário que na tabela de acumulado seja 100 pontos tambem...
Acho que é esta sua ideia.
Seu comentário abaixo:
>
Citar
O problema EdCesar, como eu vou fazer isso para cada cliente pelo evento, pois cada cliente tem um id especifico e como esse evento faria isso. Pois o evento tem que saber se aquele cliente daquele id fez ou não compra durante aquele periodo e se ele tem pontos acumulados o suficiente para ir para a outra tabela caso ele não opte por trocar naquele periodo
Creio que voce se expressou por engano na seguinte frase:
"e se ele tem pontos acumulados o suficiente para ir para a outra tabela"
O SUFICIENTE PARA IR PARA TABELA DE ACUMULADOS??? TEM QUE TER UM MÍNIMO DE PONTOS SUFICIENTES PARA IR PARA OUTRA TABELA?? OU VAI PARA OUTRA TABELA DE QUALQUER FORMA QUANDO NÃO ATINGE OS 100 PONTOS??
Mas partindo do princípio que vai para tabela de acumulados todos os pontos não utilizados:
De acordo com o que voce disse tambem, "Pois o evento tem que saber se aquele cliente daquele id fez ou não compra durante aquele periodo ".
Pelo o que percebo, estas tabelas de pontuações são independentes, apenas informa o id do cliente e a quantidade de pontos, sem dar para saber se usou ou não estes pontos, pois conforme voce disse: "tem que saber se aquele cliente daquele id fez ou não compras...".
Partindo deste principio, é claro que voce deve ter no seu sistema alguma tabela que informe estas compras realizadas.
Como é que funciona aí no seu sistema quando o cliente faz a compra e utiliza os pontos? Automaticamente o sistema grava essa informação onde?
Eu estou achando que voce deve trabalhar com tres tabelas:
1 - tabela_pontos_mes_vigente
2 - tabela_pontos_utilizados
3 - tabela_pontos_acumulados
Quando for fechar o mes, para transferir os pontos acumulados é só executar uma rotina que que some a quantidade de pontos do mes vigente, subtraia os pontos da tabela de pontos utilizados, e transfira o saldo para
a tabela de pontos acumulados. Isso é fácil, é só executar uma instrucao sql com um SUM para cada uma das tabelas e fazer uma continha básica depois...
Conforme disse os demais colegas, é uma rotina que pode ficar de pontidão lá no servidor para ser executada no último dia do mes a meia noite, ou coisa parecida.
Halfar boa tarde, o sistema funciona assim;
O cliente cadastra no site como todos os outros, e a partir daí eu gero para ele um link de indicação no painel dele para ele indicar quantas pessoas ele quiser através desse link. Ou seja; todas as pessoas que cadastrarem através desse link dele, vai fazer parte da rede dele. Eu gravo o id dele no cadastro das pessoas que cadastraram nesse link, formando a rede dele. A partir desse momento, quando as pessoas da rede dele compra na loja, eu pego um percentual dessa compra e transfiro para o cliente e vai acumulando dentro do limite do mês, podendo ele o cliente solicitar a troca por produtos. Só que ele o cliente para solicitar aquele percentual que eu gravei na base de dados, e que ele ganhou pelas compras dos seus clientes indicados por ele, através daquele link, ele tem que ter um minimo de pontos dentro daquele período. Para isso ele precisa ter feito uma compra que contenha a quantidade de pontos equivalente ou varias compras, para ele receber as porcentagens dos clientes. Só que ele não pode perder esses percentuais que ele ganhou dos seus clientes, é onde entra a tabela de pontos acumulados que estou tendo a dificuldade de transferir. Dentro do mês ele só pode retirar esses percentuais se ele atingiu os pontos necessários, aí ele pode trocar por produtos, más se ele não tirar esses percentuais e mudar o período, esses percentuais deve passar para essa tabela para ele e ir acumulando e trocando por produtos. Esse que é o x da questão, pois quando estiver acabando o período eu devo transferir esses percentuais para a tabela acumulados automaticamente, pegando assim cada cliente que estiver nessa condição. Não sei se deu para entender direito como funciona. Mas te agradeço pela ajuda.eu entendi a logica da coisa sim...
creio que a dificuldade é como montar a instrucao sql para retirar de uma tabela e transferir para outra.
eu imagino uma instrucao sql desta forma, considerando a hipotética existencia das seguintes duas tabelas:
tabela_mes_vigente
tabela_acumulados
imagino também que nesta tabela de acumulados deva existir os seguintes campos:
id, pontos, mes_referencia (este campo se refere ao mes do qual está se extraindo os pontos acumulados).
Percebo também que possa haver uma dificuldade em montar uma instrucao sql para inserir os dados nesta tabela,
então para contornar esta dificuldade melhor realizar um update. Neste caso voce ja deve ter a tabela de acumulados já previamente com registros de todos os clientes com valores em branco. Aí é só dar um update que ficaria da seguinte forma:
$sql = "update tabela_acumulados set id = tabela_mes_vigente.id,
mes_referencia = tabela_mes_vigente.mes_referencia,
pontos = tabela_acumulados.pontos + tabela_mes_vigente.pontos
where tabela_acumulados.id = tabela_mes_referencia.id";
a idéia, como deu para perceber, é um relacionamento entre tabelas , como se estivesse utilizando o inner join (o que talvez venha a ser necessário utilizar realmente o inner join,)
eu me lembro que há uns bons tempos atrás escrevi um codigo mais ou menos da maneira como fiz acima. Estou apenas te dando a ideia, tem que dar uma pesquisada e fuçada.
A tabela de mes vigente, os pontos deixa como está, não deve ser zerada. Isto facilita para aproveitar, caso o cliente questione quantos pontos ele tinha em determinado mes, desfazendo assim a necessidade de uma outra tabela para deixar gravado o que ele já tinha em todos os meses.
qualquer outra dúvida, estamos ai...
corrigindo o script, pois errei na ideia:
$sql = "update tabela_acumulados set id = tabela_mes_vigente.id,
mes_referencia = tabela_mes_vigente.mes_referencia,
pontos = tabela_mes_vigente.pontos
where tabela_acumulados.id = tabela_mes_referencia.id";
não é necessário somar como havia feito no script anterior, pois já existe um campo mes_referencia, então cada mes terá seu campo próprio...desculpe foi um lapso...Boa tarde a todos,
Obrigado Halfar, e obrigado Eserra pela ajuda que vocês me deram. Consegui montar minha logica e está funcionando perfeito. Grato a todos.
tabela_acumulados, contem 2 campos: mes_ano e pontos, fica assim:
janeiro_2017 = 10 pontos
fevereiro_2017 = 15 pontos
março_2017 = 20 pontos
etc....
mas estes pontos acumulados vai poder usar quando??
não seria melhor descomplicar e deixar usar sempre que acumulou os pontos?? Fica ai dificultando as coisas, a pessoa se aborrece e vai comprar em outra loja....