Fórum Satisfazer condiçao para deletar registros em uma classe #620513
12/09/2023
0
Seguinte: tenho 2 classes sendo:
1 contas
1 itens_de_contas.
Na classe itens_de_contas, tenho um campo informando se o registro esta pendente de pagamento ou liquidado.
Problema:
Preciso que os registros lancados no itens_de_contas, sejam bloqueados para deleção caso houver um campo informando liquididado.
Exemplo:
No contas tenho um valor de 600,00 para pagamento em 3 parcelas.
Supondo-se que a primeira parcela no valor de 200,00 esteja com o campo status "LIQUIDADO" e o usuario por ventura resolva deletar o registro de contas e todos os lançamentos no itens_de_contas. Como fazer para bloquear essa exclusão?
Mais especificamente poderia ser assim, somente deletar tudo caso os registros do itens_de_contas fossem apenas "PENDENTES".
Att
Antonio Cesar
Antonio Pazebao
Curtir tópico
+ 0Posts
15/09/2023
Arthur Heinrich
Ao executar um delete na tabela "contas", a trigger faria uma busca na tabela "itens_de_contas" em busca de 1 registro com status 'LIQUIDADO' ou diferente de 'PENDENTE'.
Se encontrar algum item, aborta a transação.
Você também pode implementar algo nas classes, para evitar o acesso ao banco, mas isso não garante que todos os pontos do seu sistema estarão utilizando a classe, nem mesmo que um usuário não fará a exclusão manualmente.
Gostei + 0
18/09/2023
Antonio Pazebao
Ao executar um delete na tabela "contas", a trigger faria uma busca na tabela "itens_de_contas" em busca de 1 registro com status 'LIQUIDADO' ou diferente de 'PENDENTE'.
Se encontrar algum item, aborta a transação.
Você também pode implementar algo nas classes, para evitar o acesso ao banco, mas isso não garante que todos os pontos do seu sistema estarão utilizando a classe, nem mesmo que um usuário não fará a exclusão manualmente.
Boa noite!! Como implemento essa triger ? ????
Att
Antonio
Gostei + 0
19/09/2023
Arthur Heinrich
DELIMITER $$
CREATE TRIGGER DeviceCatalog_PreventDeletion
BEFORE DELETE ON DeviceCatalog
FOR EACH ROW
BEGIN
IF exists(select 1
from itens_de_contas
where
itens_de_contas.conta_id = old.conta_id and
itens_de_contas.status <> 'PENDENTE') THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Itens de conta não pendentes encontrados!';
ROLLBACK;
END IF;
END
$$
DELIMITER ;
Gostei + 0
19/09/2023
Arthur Heinrich
DELIMITER $$
CREATE TRIGGER contas_PreventDeletion
BEFORE DELETE ON contas
FOR EACH ROW
BEGIN
IF exists(select 1
from itens_de_contas
where
itens_de_contas.conta_id = old.conta_id and
itens_de_contas.status <> 'PENDENTE') THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Itens de conta não pendentes encontrados!';
ROLLBACK;
END IF;
END
$$
DELIMITER ;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)