pgsql/x-dragon-expense.sql
[Pman.Xtuple] / pgsql / x-timewarp-triggers.sql
1 CREATE SCHEMA timewarp;
2
3
4 CREATE OR REPLACE FUNCTION timewarp.trialbaltrigger() RETURNS trigger 
5 AS $BODY$
6 DECLARE
7      v_tmp_id INT;
8 BEGIN
9     
10     SELECT period_id INTO v_tmp_id  FROM timewarp.period LIMIT 1;
11     IF NOT FOUND THEN
12         RETURN NEW;
13     END IF;
14     
15     -- if there is no change in the trailbalance values, do not update the
16     IF (
17         (TG_OP = 'UPDATE')
18         AND
19         (OLD IS NOT NULL)
20         AND
21         (OLD.trialbal_beginning = NEW.trialbal_beginning)
22         AND
23         (OLD.trialbal_ending = NEW.trialbal_ending)
24         AND
25         (OLD.trialbal_credits = NEW.trialbal_credits)
26         AND
27         (OLD.trialbal_debits = NEW.trialbal_debits)
28     ) THEN
29         RETURN NEW;
30     END IF;
31         
32     
33     PERFORM timewarp.trialbal_fill(NEW.trialbal_id);
34       
35     RETURN NEW;   
36         
37 END;
38 $BODY$
39   LANGUAGE plpgsql VOLATILE
40   COST 100;
41   
42 ALTER FUNCTION  timewarp.trialbaltrigger()
43   OWNER TO admin;
44
45 GRANT ALL ON FUNCTION timewarp.trialbaltrigger() TO xtrole;
46
47 CREATE TRIGGER _trialbaltrigger 
48     AFTER INSERT OR UPDATE ON public.trialbal
49         FOR EACH ROW EXECUTE PROCEDURE timewarp.trialbaltrigger();
50
51
52 -------- yearperiod----------------
53
54
55
56
57 CREATE OR REPLACE FUNCTION timewarp.yearperiodtrigger() RETURNS trigger 
58 AS $BODY$
59 DECLARE
60      v_tmp_id INT;
61 BEGIN
62     
63       SELECT period_id INTO v_tmp_id  FROM timewarp.period LIMIT 1;
64     IF NOT FOUND THEN
65         RETURN NEW;
66     END IF;
67     
68     
69     PERFORM timewarp.yearperiod_fill(NEW.yearperiod_id);
70       
71     RETURN NEW;   
72         
73 END;
74 $BODY$
75   LANGUAGE plpgsql VOLATILE
76   COST 100;
77   
78 ALTER FUNCTION  timewarp.yearperiodtrigger()
79   OWNER TO admin;
80
81
82 GRANT ALL ON FUNCTION timewarp.yearperiodtrigger() TO xtrole;
83
84 CREATE TRIGGER _yearperiodtrigger 
85     AFTER INSERT OR UPDATE ON public.yearperiod
86         FOR EACH ROW EXECUTE PROCEDURE timewarp.yearperiodtrigger();
87         
88
89 ---------------------- period--------------------------------------
90
91
92
93 CREATE OR REPLACE FUNCTION timewarp.periodtrigger() RETURNS trigger 
94 AS $BODY$
95 DECLARE
96      v_tmp_id INT;
97 BEGIN
98      SELECT period_id INTO v_tmp_id FROM timewarp.period LIMIT 1;
99     IF NOT FOUND THEN
100         RETURN NEW;
101     END IF;
102     
103     PERFORM timewarp.period_fill(NEW.period_id);
104       
105     RETURN NEW;   
106         
107 END;
108 $BODY$
109   LANGUAGE plpgsql VOLATILE
110   COST 100;
111   
112 ALTER FUNCTION  timewarp.periodtrigger()
113   OWNER TO admin;
114 GRANT ALL ON FUNCTION timewarp.periodtrigger() TO xtrole;
115
116 CREATE TRIGGER _periodtrigger 
117     AFTER INSERT OR UPDATE ON public.period
118         FOR EACH ROW EXECUTE PROCEDURE timewarp.periodtrigger();