DatabaseProgramming: 05 Invoice balance trigger.sql

File 05 Invoice balance trigger.sql, 806 bytes (added by 231139, 10 days ago)
Line 
1DROP TRIGGER IF EXISTS trg_sync_account_balance_on_invoice ON public.invoices;
2CREATE OR REPLACE FUNCTION public.trg_fn_sync_account_balance_on_invoice()
3RETURNS trigger
4LANGUAGE plpgsql
5AS $$
6BEGIN
7 IF TG_OP <> 'DELETE' THEN
8 PERFORM public.fn_recalculate_account_balance(NEW.account_id);
9 END IF;
10 IF TG_OP = 'DELETE' THEN
11 PERFORM public.fn_recalculate_account_balance(OLD.account_id);
12 RETURN OLD;
13 ELSIF TG_OP = 'UPDATE' AND OLD.account_id IS DISTINCT FROM NEW.account_id THEN
14 PERFORM public.fn_recalculate_account_balance(OLD.account_id);
15 END IF;
16 RETURN NEW;
17END;
18$$;
19
20CREATE TRIGGER trg_sync_account_balance_on_invoice
21AFTER INSERT OR UPDATE OR DELETE ON public.invoices
22FOR EACH ROW
23EXECUTE FUNCTION public.trg_fn_sync_account_balance_on_invoice();