cseverino 0 Denunciar post Postado Julho 1, 2015 Boa Noite pessoal, Preciso de uma ajuda de vocês, preciso criar uma rotina que funcione da seguinte maneira. Após executar o script abaixo o sistema deverá fazer um update em uma outra tabela, porém com as seguinte regras, se tipo = ENTRADA o sistema deverá pegar o valor do campo quantidade do inserte e somar com o valor do campo saldo da tabela estoque e depois efetuar um update neste campo com o valor novo, se caso for tipo = SAIDA, o query deverá pegar o valor do campo quantidade do insert fazer uma subtração no campo saldo da tabela estoque e efetuar um update no campo saldo com o novo valor. Alguém consegue me ajudar com essa rotina? <?php include('./config.php'); ?> <?php $qdata = $_REQUEST['data']; $qcodigo_produto = $_REQUEST['codigo_produto']; $qquantidade = $_REQUEST['quantidade']; $qobservacao = $_REQUEST['observacao']; $qtipo = $_REQUEST['tipo']; $sql = "insert into movimentacao_estoque (data, codigo_produto, quantidade, observacao, tipo) values ('$qdata', '$qcodigo_produto', '$qquantidade', '$qobservacao','$qtipo')"; mysql_query($sql, $conexao); header("Location: ./movimento_estoque.php"); exit; ?> Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 1, 2015 Pesquise sobre TRIGGERS , exemplo típico de seu uso. Compartilhar este post Link para o post Compartilhar em outros sites
cseverino 0 Denunciar post Postado Julho 1, 2015 Motta, Pesquisei sobre triggers porém tenho algumas dúvidas... primeira vez que crio uma triggers. tenho dúvida como aplica o parametro do tipo Entrada ou Saida. DELIMITER $$ CREATE TRIGGER Trigger_ItenEstoque_Insert AFTER INSERT ON Estoque FOR EACH ROW BEGIN UPDATE estoque SET saldo = saldo + NEW.Quantidade WHERE id = NEW.codigo_produto and NEW.tipo = 'Entrada'; -- Acho que essa parte está incorreta, porém não sei o jeito correto de aplicar END$$ Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 1, 2015 #cseverino , não entendi sua dúvida , qual a movimentação que precisa ser feita ? no insert de qual tabela atualizar qual ? não faz sentido no insert de ESTOQUE atualizar o próprio ESTOQUE. Compartilhar este post Link para o post Compartilhar em outros sites
cseverino 0 Denunciar post Postado Julho 1, 2015 Motta, Quando ocorrer um inserte na tabela movimentacao, preciso pegar o valor do campo quantidade (Tabela movimentacao) e atualizar o campo saldo da tabela estoque, porém preciso fazer a seguinte analise, se o tipo na tabela movimentacao for Entrada ele soma com o campo Saldo, se for Saida ele diminui o valor do campo saldo da tabela estoque. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 1, 2015 então a trigger tem de ser em movimentacao , o update é sim então em estoque.saldo , a questão de entrada / saida pode ser resolvida com um CASE algo assim SET saldo = saldo + (case when new.tipo = 'entrada' then 1 else -1 end) * NEW.Quantidade Compartilhar este post Link para o post Compartilhar em outros sites
wolfphw 60 Denunciar post Postado Julho 1, 2015 Motta o que ele quer é tipo um controle de estoque.. Ele quer fazer isso logo após fazer a movimentação... vc vai fazer um IF no tipo.. e dependendo da informação vc faz o UPDATE na tabela... exemplo simples.. mas vc implementa no seu ai... <?php include('./config.php'); $qdata = $_REQUEST['data']; $qcodigo_produto = $_REQUEST['codigo_produto']; $qquantidade = $_REQUEST['quantidade']; $qobservacao = $_REQUEST['observacao']; $qtipo = $_REQUEST['tipo']; $sql = "insert into movimentacao_estoque (data, codigo_produto, quantidade, observacao, tipo) values ('$qdata', '$qcodigo_produto', '$qquantidade', '$qobservacao','$qtipo')"; mysql_query($sql, $conexao); // pega informação de quantos produtos tem em estoque $sql_estoque = "SELECT saldo FROM estoque WHERE codigo_produto='$qcodigo_produto'"; $query_estoque = mysql_query($sql_estoque); $row_estoque = mysql_fetch_array($$query_estoque); $saldo = $row_estoque["saldo"]; // verifica o tipo de movimentação if ($qtipo == "ENTRADA") { $total = $saldo + $qquantidade; } else if ($qtipo == "SAIDA") { $total = $saldo - $qquantidade; } // atualiza saldo na tabela de estoque $sql_update = "UPDATE estoque SET saldo='$total' WHERE codigo_produto='$qcodigo_produto'"; mysql_query($sql_update); ?> Eu recomendaria vc alterar esse formato do seu TIPO... eu mudaria ele para um CHAR ou INT... Onde informaria 0 ou 1... sendo 0 = ENTRADA e 1 = SAIDA... ou no CHAR S = Saida e E = Entrada.... Compartilhar este post Link para o post Compartilhar em outros sites
cseverino 0 Denunciar post Postado Julho 2, 2015 wolfphw, Era isso mesmo que eu precisava obrigado, porém só tem um problema. Eu tinha um produto com o saldo 0, fiz uma lançamento de entrada de 2, o sistema somou corretamente ficando saldo 2, quando lancei uma saida de quantidade 1, o sistema mudou o saldo para -1, onde o correto seria 1. Será que está fincando informações na memoria? como posso resolver essa situação? Depois fiz um novo lançamento de entrada de quantidade 10 e o Saldo ficou 10, onde o correto seria 0+2 -1 + 10 =11 <?php include('./config.php'); ?> <?php $qdata = $_REQUEST['data']; $qcodigo_produto = $_REQUEST['codigo_produto']; $qquantidade = $_REQUEST['quantidade']; $qobservacao = $_REQUEST['observacao']; $qtipo = $_REQUEST['tipo']; $sql = "insert into movimentacao_estoque (data, codigo_produto, quantidade, observacao, tipo) values ('$qdata', '$qcodigo_produto', '$qquantidade', '$qobservacao','$qtipo')"; mysql_query($sql, $conexao); //Pega a informação de quantos produtos tem em estoque $sql_estoque = "Select saldo from estoque where id ='$qcodigo_produto'"; $query_estoque = mysql_query($sql_estoque); $row_estoque = mysql_fetch_array($$query_estoque); $saldo = $row_estoque["saldo"]; //Verifica o tipo de movimentação if ($qtipo =="ENTRADA") { $total = $saldo + $qquantidade; }else if ($qtipo =="SAIDA"){ $total = $saldo - $qquantidade; } //Atualiza saldo na tabela de estoque $sql_update = "UPDATE estoque set saldo='$total' where id='$qcodigo_produto'"; mysql_query($sql_update); header("Location: ./movimento_estoque.php"); exit; ?> Compartilhar este post Link para o post Compartilhar em outros sites
NoService 3 Denunciar post Postado Julho 2, 2015 É apenas um leve detalhe no seu código, e eu não sei como você não viu o aviso de erro..Disso: $row_estoque = mysql_fetch_array($$query_estoque); Mude para isso: $row_estoque = mysql_fetch_array($query_estoque); At.te,NoService Compartilhar este post Link para o post Compartilhar em outros sites
cseverino 0 Denunciar post Postado Julho 2, 2015 Valeu NoService. Acho que não percebi porque o erro não explode em tela, e passou despercebido no log. Compartilhar este post Link para o post Compartilhar em outros sites