37 lines
1.5 KiB
PL/PgSQL
37 lines
1.5 KiB
PL/PgSQL
-- Verificar relacionamento entre tabelas e criar trigger para reverter empenhos automaticamente
|
|
|
|
-- Primeiro, vamos limpar dados inconsistentes como solicitado
|
|
DELETE FROM empenhos_material;
|
|
DELETE FROM movimentacoes_estoque;
|
|
|
|
-- Criar trigger para reverter automaticamente empenhos quando movimentação de empenho é excluída
|
|
CREATE OR REPLACE FUNCTION reverter_empenho_na_exclusao()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
-- Se a movimentação excluída for do tipo 'empenho', reverter o empenho correspondente
|
|
IF OLD.tipo_movimentacao = 'empenho' THEN
|
|
-- Buscar e cancelar empenho vinculado a esta movimentação
|
|
UPDATE empenhos_material
|
|
SET status = 'Cancelado',
|
|
movimentacao_empenho_id = NULL
|
|
WHERE movimentacao_empenho_id = OLD.id;
|
|
|
|
-- Reverter quantidades no estoque
|
|
UPDATE estoque_materiais
|
|
SET quantidade_empenhada = quantidade_empenhada - OLD.quantidade,
|
|
quantidade_disponivel = quantidade_disponivel + OLD.quantidade
|
|
WHERE id = OLD.material_id;
|
|
|
|
RAISE NOTICE 'Empenho revertido para movimentação %', OLD.id;
|
|
END IF;
|
|
|
|
RETURN OLD;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
-- Criar trigger que será executado ANTES da exclusão
|
|
DROP TRIGGER IF EXISTS trigger_reverter_empenho_exclusao ON movimentacoes_estoque;
|
|
CREATE TRIGGER trigger_reverter_empenho_exclusao
|
|
BEFORE DELETE ON movimentacoes_estoque
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION reverter_empenho_na_exclusao(); |