pgsql/x-dragon-expense.sql
[Pman.Xtuple] / pgsql / x-dragon-period-temp-open.sql
1
2 CREATE OR REPLACE FUNCTION  period_temp_open(i_target_dt DATE)
3     RETURNS  INTEGER
4     
5 AS $BODY$
6 DECLARE        
7     v_tmp INTEGER;
8     v_btmp BOOLEAN;
9     v_ret INTEGER;
10     
11     r_period RECORD;
12     r_invlocdist RECORD;
13     r_tmp RECORD;
14     
15     v_period_start DATE;
16     v_period_end DATE;
17     v_period_closed BOOLEAN;
18     v_period_freeze BOOLEAN;
19 BEGIN
20
21     
22     SELECT
23             period_start INTO v_period_start
24         FROM
25             period
26         WHERE
27             period_start <= i_target_dt
28             AND
29             period_end >= i_target_dt
30         LIMIT 1;
31     
32     
33     SELECT
34             period_closed,  period_freeze
35             INTO
36             v_period_closed, v_period_freeze
37         FROM
38             period
39         WHERE
40             period_start = v_period_start;
41     
42     
43     
44     --RAISE NOTICE 'period state is % ', v_period_closed;
45     
46     IF NOT v_period_closed AND NOT v_period_freeze THEN
47         RETURN 0;
48     END IF;
49     
50     SELECT
51             period_start INTO v_period_end
52         FROM
53             period
54         WHERE
55             period_closed
56         ORDER BY
57             period_start DESC LIMIT 1;
58
59     --RAISE NOTICE 'opening periods between % and %', v_period_start, v_period_end;
60     
61     PERFORM thawAccountingPeriod(period_id) FROM
62         (SELECT
63                 period_id
64             FROM
65                 period
66             WHERE
67                 period_start >= v_period_start
68                 AND
69                 period_start <= v_period_end
70             ORDER BY
71                 period_start DESC
72         ) x;
73     
74     PERFORM openAccountingPeriod( period_id ) FROM
75         (SELECT
76                 period_id
77             FROM
78                 period
79             WHERE
80                 period_start >= v_period_start
81                 AND
82                 period_start <= v_period_end
83             ORDER BY
84                 period_start DESC
85         ) x;
86     
87         --IF v_tmp < 0 THEN
88         --    RAISE EXCEPTION 'open period returned %', v_tmp;
89         --END IF;
90     
91     SELECT period_id INTO v_ret FROM period where period_start = v_period_end LIMIT 1;
92     RETURN v_ret;
93 END;
94 $BODY$
95   LANGUAGE plpgsql VOLATILE
96   COST 100;
97   
98 ALTER FUNCTION  period_temp_open(  DATE)
99   OWNER TO admin;    
100
101
102