Processos Diretos e Processos Inversos.

Boa Tarde,

Pessoal, estou fazendo uma tela de pagamentos, fiz uma grade editável onde o usuário escolhe a forma de pagamento e o valor.
Dinheiro, 1000
Cartão Crédito, 500 ETC.
Criei um método PHP este método identifica se é dinheiro, cartão e processa o campo (correto tabela pagamentos) no banco de dados.
Ocorre que a função ficou capenga pois, quando insiro funciona, mas quando apago não funciona.

Queria fazer tudo em um método só, mas parece que terei que criar 2, 1 para “+ processo direto” e outro para “- processo inverso”

Ou tem como eu saber dentro do método qual ação esta sendo executada, tipo,

Incluindo, Editando Excluindo, aí eu resolveria tudo com um método só. (eu acredito que isso diminui chances de erros em processos inversos).

Como vocês estão fazendo estes processos com 2 metodos ?

Abraços.

Claudney

Bem, dar uma sugestão sem entender COMO você está fazendo é meio complicado. Se você puder explicar como estás fazendo todo esse procedimento, ficará mais fácil.

Olá,

Se entendi, …, crio em o método com o que preciso em: Programação, Métodos PHP
Nos eventos ajax faço a chamada do método
Nos eventos antes de gravar e antes de inserir eu chamo novamente o método com o cálculo.

Em SQL não se faz Processos Diretos e Inversos isso era para Época do DBF, ou bancos de dados lentos, você deve criar Key Indices em todos os campos,
principais envolvidos tanto no WHERE quanto que no INNER JOIN, existe uma outra ferramenta no Mercado que Ainda mantem essa
filosofia antiga ‘de processos diretos/invertidos’, ehehe começava com G.

Ai crie Em Programação > PHP Método PHP > AtualizarEstoque << Ele vai servir tanto para Incluir, Atualizar ou Excluir/Cancelar.

** Observação no MySQL é possível fazer uma formula só, usando o SUM (**)
ai ele já calcula uma só vez, se for estoque é ESTOQUE ATUAL = (ESTOQUE INICIAL + (TABELA ITENS > COMPRAS - TABELA ITENS > VENDAS)) WHERES CANCELADO<>‘S’
ai neste caso não será necessario usar formulas diretas e invertidas.
EXEMPLO USANDO SÓ O SQL DIRETO QUE JÁ FAZ TUDO:
// ESTOQUE
$sql ="
UPDATE
estoque
SET
EntradasQtde = (SELECT IF(SUM(Quantidade)>0,SUM(Quantidade)) FROM ComprasItens WHERE CodigoProdutoID=[glo_CodigoProdutoID] AND Cancelado<>‘S’),
SaidasQtde = (SELECT IF(SUM(Quantidade)>0,SUM(Quantidade)) FROM VendasItens WHERE CodigoProdutoID=[glo_CodigoProdutoID] AND Cancelado<>‘S’),
EstoqueAtual = EstoqueInicial + QtdeEntradas - QtdeSaidas
WHERE
CodigoProdutoID = [glo_CodigoProdutoID]
";

sc_exec_sql($sql);


// CUSTO MÉDIO
$sql ="
	UPDATE 
		estoque
	SET	
		EntradasQtde = (SELECT IF(SUM(Quantidade)>0,SUM(Quantidade)) FROM ComprasItens WHERE CodigoProdutoID=[glo_CodigoProdutoID] AND Cancelado<>'S'),
		EntradasValorTotal = (SELECT IF(SUM(ValorTotalItem)>0,SUM(ValorTotalItem)) FROM ComprasItens WHERE CodigoProdutoID=[glo_CodigoProdutoID] AND Cancelado<>'S'),
		CustoMedio = IF(EntradasValorTotal/EntradasQtde>0,EntradasValorTotal/EntradasQtde,0)
	WHERE
		CodigoProdutoID = [glo_CodigoProdutoID]
";

sc_exec_sql($sql);   



Criar Programção > PHP > Metódos: AtualizarEstoque

Como Usar:
OnAfterInsert:
[glo_CodigoProdutoID]={CodigoProdutoID};  // [glo_CodigoProdutoID] = Variável de Saída marcar.
AtualizarEstoque();

OnAfterUpdate:
[glo_CodigoProdutoID]={CodigoProdutoID};
AtualizarEstoque();	


OnBeforeDelete:
[glo_CodigoProdutoID]={CodigoProdutoID};

OnAfterDelete:
AtualizarEstoque();	   

Em Mestres detalhes filhos é a mesma coisa, ai você atualiza todas as tabelas com uma única formula e no final os campos na tela com:
AtualizarEstoque();
sc_master_value(‘VALOR_TOTAL’, sc_format_num($_Total_Soma_Itens, ‘.’, ‘,’, 2, ‘S’, ‘1’, ‘’));

Com essa dica suas quantidades sempre vão bater mesmo se o cliente decidir fazer uma listagem de contagem e decidir ticar na caneta
quanto ele tinha, quanto entrou item por item e quanto saiu, sempre bate o resultado.