Jump to content
Fórum Script Brasil
  • 0

Estoque


MTavares

Question

Olá colegas,

estou fechando um sistema de compras para um cliente, só que esse sistema terá controle de estoque, mas estou esbarrando com uma dúvida, já que nunca trabalhei com controle de estoques antes. Por ex:

O sistema tem no seu estoque 05 produtos. Um usuário entre no site e compra 04. Ao clicar no botão "Comprar", ele já abate do estoque os 04 produtos. Porém se ele optar pagar no PagSeguro por ex e desistir no meio do processo, como posso reabastecer automaticamente o estoque que não foi finalizado? A minha idéia inicial será colocar um prazo de finalização, pegando a sessão do cliente, o produto, a quantidade e a data/hora da compra e o status da compra. Se dentro de um determinado tempo essa compra não for finalizada, daria um update automático reabastecendo o estoque novamente com a quantidade que o cliente selecionou. Sinceramente achei esse meu raciocínio muito complexo. Alguém teria uma idéia melhor para esse tipo de desafio?

abraços

Link to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0

Oi Willian,

Desculpe, não consegui entender muito bem. Se não me engano, o cancelamento do PagSeguro é efetuado após um determinado período (dias) inativo. O que quero exatamente é que não dependa desse período do PagSeguro, pois o cliente pode clicar em comprar e quando chegar na parte da escolha do pagamento, desistir e sair da loja. É aí que entra o grande desafio do estoque. Eu coloquei o PagSeguro como forma de exemplo.

abraços

Link to comment
Share on other sites

  • 0

Era assim que estava, aliás, na verdade eu estava abatendo o produto no retorno do PagSeguro (quando o pagamento for feito pelo PagSeguro), mas o cliente fez o seguinte questionamento. Imagine o produto ter 02 quantidades no estoque, um cliente vai e compra esses dois produtos e quando ele for selecionar a forma de pagamento, outro cliente vai e escolhe mais 02 produtos, sendo que o estoque já está zerado. Por isso a opção de colocar o abatimento no momento da compra, ou seja, quando o usuário clicar no botão comprar, dessa forma, quando o usuário comprar esses 02 produtos e for para o processo do pagamento, outro usuário for comprar, já irá aparecer a mensagem que o produto está esgotado....

abraços

Link to comment
Share on other sites

  • 0

Bom, sou iniciante em PHP, então eu possa estar comendo alguma bola, por isso vou dar minha opiniao dentro do conhecimento da lógica.

Mas ao usuario clicar na forma de pagamento, depois disso faz a transação do PagSeguro e etc não é?

então, faça uma rotina logo ao clicar no botão comprar para verificar se ainda existe o item no estoque. Se sim continue, senao exiba a mensagem e o usuario faz o pedido novamente.

Voce retira do estoque quando ele clicar em comprar. Coloque uma mensagem de produto indisponível pois outro usuario esta efetuando a transação nesse caso que seu cliente citou.

Ai após o retorno do PagSeguro você coloca ok ou não ok no registro da venda em um campo para sinalizar finalizado ou não. Se sim deixe o estoque como está, senão recoloque cada item ao seu respectivo produto.

Eu faria com este pensamento.

Link to comment
Share on other sites

  • 0

Olá sacofritoxd,

a idéia é mais ou menos essa... quando o cliente clicar no botão comprar, ir abatendo no estoque, exatamente por isso, para quando o estoque zerar, um outro cliente ao clicar no mesmo produto, apareça essa mensagem que você falou, porém e se o cliente desitir no meio do processo antes de ir para o PagSeguro ou outra opção de pagamento (Cartão de crédito, boleto, etc)? a minha idéia inicial em relação ao abastecimento do estoque baseado na quantidade que o cliente selecionou era um pouco complexa, queria ver se alguém tem outro raciocínio menos complexo que o meu....

abraços

Link to comment
Share on other sites

  • 0

Voce pode colocar uma variavel ou mesmo umcampo na tabela de pedido.

Tipo assim.

Iniciou_transacao(quando clica no botao de efetuar compra) - 0 ou (quando selecionou a forma de pagamento) - 1

Se sim aguarda a resposta do tipo de pagamento

Se não você conta algum tempo pra desconectar o login pois ficou muito tempo oscioso. Pois o cara não pode derepente ficar com a tela de pedido aberta o dia inteiro e 'empacar' outros clientes, enquanto o mesmo pode desistir da compra.

Nessa operação de desconectar o login do cara, você devolve os produtos para o estoque e seta aquele registro como cancelado ou mesmodeleta ele.

Agora como fazer isso via código ainda não aprendi rsrs.

Link to comment
Share on other sites

  • 0

Exatamente era isso que estou pensando em fazer, porém esbarramos no tempo que devemos esperar. Por ex. hoje está funcionando da seguinte forma:

quando o usuário clica em comprar, ele vai abater no estoque a quantidade que o usuário escolheu na compra. No carrinho de compras, quando o usuário adiciona mais quantidade eu pego a quantidade de estoque dos produtos e diminuo com a quantidade que ele adicionou e o mesmo acontece caso ele retire alguma quantidade do carrinho, só que nesse caso eu pego a quantidade da sessão dele e vou somar com a quantidade que ele excluiu para recolocar no estoque do produto.

Porém quando o usuário clicar em finalizar compras e desistir por algum motivo, vamos supor que ele deixou no carrinho 04 produtos, a idéia inicial é definir um tempo a inatividade dele para recolocar o estoque novamente no banco, só que isso vai dar problemas, já que nesse meio tempo o estoque irá ficar empacado e irá impedir de um outro cliente que realmente queira esse produto de comprar...

Eu pensei em colocar o dobro do produto, por ex: meu cliente colocou 03 produtos, na verdade o sistema iria colocar 06..sempre o dobro na loja.. só que ainda não cheguei a um raciocínio lógico de como eu faria isso...

abs

Link to comment
Share on other sites

  • 0

Cara, acredito que do jeito que você falou vai dar um nó no cérebro.

Bola um jeito de desconectar o usuario. Conta alguns minutos de inatividade. Caixas eletronicos são assim. Se acontece algo e o cara vai embora, o sistema desconecta ele.

O ideal seria conversar com o cliente e ver oque ele prefere. Diz que voce já pensou nessa solução mas ainda não implementou. E oque ele acha da solução. Expor os pontos positivos seria uma boa. Senao o sistema ficaria muito complicado pra voce e para seu cliente mexer.

Link to comment
Share on other sites

  • 0

é verdade.... não só em caixa eletrônica, como também em compras coletivas funcionam dessa forma... você tem razão.. vou trabalhar com o tempo de inatividade.. se o sistema perceber que ele ficou inativo por um determinado tempo, desconecto ele e recoloco os produtos no estoque....

Obrigado sacofritoxd por essa troca de idéias. Foi muito produtivo.

Grande abraço!

Link to comment
Share on other sites

  • 0

Show de bola sacofritoxd, pode contar com a gente sim e lhe desejo boa sorte nessa nova escolha de sua vida. Para compartilhar nossos conhecimentos, segue abaixo a solução:

Na tabela produtos, alterei o campo data para DATETIME, ele irá retornar algo como: YYYY-MM-DD hh:mm:ss para inserir as compras;

Quando vou inserir ou alterar qualquer produto no carrinho, uso dessa forma:

<?php
mysql_query(sprintf("INSERT INTO sessao VALUES(null,'%s',NOW())",mysql_escape_string($IdProduto)));
?>
Para fazer o que conversamos na nossa troca de idéias, fiz dessa forma: Depois selecionei a tabela sessão, aonde fica armazenado as compras dos clientes com o mysql_query dessa forma:
<?php

// A tabela sessão é aonde armazeno as compras efetuadas na loja
$sqlInativo = mysql_query(sprintf("SELECT * FROM sessao WHERE sessao = '%s' ORDER BY data DESC", mysql_escape_string($SessaoCliente)));
$mtInativo = mysql_fetch_object($sqlInativo);

$agora = date("Y-m-d H:i:s"); 
$tempoInativo = (strtotime($agora) - strtotime($mtInativo->data)); // diminuo o tempo de agora com o campo da tabela

//Verifico se o tempo inativo é maior que 20 minutos
if($tempoInativo >= 1200): // 1200 = 20 minutos

   $expirar = "Sua sessão expirou!"; // um texto para colocar no carrinho de compras

   // faço uma nova query. Poderíamos usar também o Inner Join, mas coloquei dessa forma para ficar mais fácil o entendimento
   $sqlDevolver = mysql_query(sprintf("SELECT * FROM sessao WHERE Sessao = '%s'", mysql_escape_string($SessaoCliente)));
   
    while($mtDevolver = mysql_fetch_object($sqlDevolver)):
       
// faço a query agora da tabela produtos  
        $sqlProdutosDevolver = mysql_query(sprintf("SELECT * FROM produtos WHERE IdProduto = '%s'", mysql_escape_string($mtDevolver->IdProduto)));
        
 while($mtProdutosDevolver = mysql_fetch_object($sqlProdutosDevolver)):

          $reporProdutos = $mtDevolver->Quantidade + $mtProdutosDevolver->Estoque;

              // faço a alteração no estoque
              mysql_query(sprintf("UPDATE mm_produtos SET estoque = '%s' WHERE id_produto = '%s'",mysql_escape_string($reporProdutos), mysql_escape_string($mtDevolver->id_produto)));
         endwhile;
   endwhile;

// e deleto as compras do carrinho
   mysql_query(sprintf("DELETE FROM Sessao WHERE Sessao = '%s'", mysql_escape_string($SessaoCliente)));
endif;

?>

Abraços e boa sorte!

Edited by MTavares
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...