DBA Data[Home] [Help]

PACKAGE BODY: APPS.GL_JE_HEADER_SECURITY

Source


1 PACKAGE BODY gl_je_header_security AS
2 /* $Header: gluhdsvb.pls 120.2 2003/04/24 01:38:12 djogg noship $ */
3 
4 --
5 -- PUBLIC FUNCTIONS
6 --
7 
8 -- **********************************************************************
9 
10   --   NAME
11   --     check_header_valid_lsv
12   --   DESCRIPTION
13   --     Return 'Y' if all the ledger segment values are valid
14   --     for the given header and a date.
15   --     If no date is provided, the date is ignored.
16   FUNCTION check_header_valid_lsv ( x_je_header_id          IN NUMBER,
17                                     x_edate                 IN DATE)  RETURN VARCHAR2
18   IS
19     CURSOR has_all_lsv( p_je_header_id  NUMBER )
20     IS
21       SELECT ldg.ledger_id,
22              ldg.bal_seg_value_option_code,
23              ldg.mgt_seg_value_option_code
24       FROM   GL_LEDGERS ldg,
25              GL_JE_HEADERS h
26       WHERE  ldg.ledger_id = h.ledger_id
27         AND  h.je_header_id = p_je_header_id;
28 
29     CURSOR is_invalid_lsv( p_je_header_id         NUMBER,
30                            p_segment_type_code    VARCHAR2,
31                            p_edate                DATE,
32                            p_ledger_id            NUMBER)
33     IS
34       SELECT  'Invalid'
35       FROM    GL_JE_SEGMENT_VALUES jsv
36       WHERE   jsv.segment_type_code = p_segment_type_code
37         AND   jsv.je_header_id = p_je_header_id
38         AND   NOT EXISTS (SELECT 'Valid'
39                           FROM   GL_LEDGER_SEGMENT_VALUES sv
40                           WHERE  NVL(trunc(p_edate), NVL(sv.start_date,TO_DATE('1950/01/01','YYYY/MM/DD')))
41                                  BETWEEN NVL(sv.start_date,TO_DATE('1950/01/01','YYYY/MM/DD'))
42                                      AND NVL(sv.end_date,TO_DATE('9999/01/01','YYYY/MM/DD'))
43                             AND  sv.segment_value = jsv.segment_value
44                             AND  sv.segment_type_code = p_segment_type_code
45                             AND  sv.ledger_id = p_ledger_id);
46 
47     CURSOR is_invalid( p_je_header_id         NUMBER,
48                        p_edate                DATE,
49                        p_ledger_id            NUMBER)
50     IS
51       SELECT  'Invalid'
52       FROM    GL_JE_SEGMENT_VALUES jsv
53       WHERE   jsv.je_header_id = p_je_header_id
54         AND   NOT EXISTS (SELECT 'Valid'
55                           FROM   GL_LEDGER_SEGMENT_VALUES sv
56                           WHERE  NVL(trunc(p_edate), NVL(sv.start_date,TO_DATE('1950/01/01','YYYY/MM/DD')))
57                                  BETWEEN NVL(sv.start_date,TO_DATE('1950/01/01','YYYY/MM/DD'))
58                                      AND NVL(sv.end_date,TO_DATE('9999/01/01','YYYY/MM/DD'))
59                             AND  sv.segment_value = jsv.segment_value
60                             AND  sv.segment_type_code = jsv.segment_type_code
61                             AND  sv.ledger_id = p_ledger_id);
62 
63     dummy          VARCHAR2(30);
64     x_ledger_id    NUMBER(15);
65     bsv_option     VARCHAR2(1);
66     msv_option     VARCHAR2(1);
67     valid_lsv      VARCHAR2(1) := 'N';
68 
69     INVALID_JE_HEADER_ID    EXCEPTION;
70 
71   BEGIN
72     OPEN has_all_lsv( x_je_header_id );
73     FETCH has_all_lsv INTO x_ledger_id,
74                            bsv_option,
75                            msv_option;
76 
77     IF (has_all_lsv%NOTFOUND) THEN
78       CLOSE has_all_lsv;
79       RAISE INVALID_JE_HEADER_ID;
80     ELSE
81       CLOSE has_all_lsv;
82     END IF;
83 
84     IF (bsv_option = 'A' AND msv_option = 'A') THEN
85       -- All the lsvs are allowed, return Yes.
86       valid_lsv := 'Y';
87       RETURN(valid_lsv);
88 
89     ELSIF (bsv_option = 'I' AND msv_option = 'A') THEN
90       -- All the msvs are allowed.
91       -- Check if all the bsvs of the header are allowed.
92       OPEN is_invalid_lsv(x_je_header_id,
93                           'B',
94                           x_edate,
95                           x_ledger_id);
96       FETCH is_invalid_lsv INTO dummy;
97 
98       IF is_invalid_lsv%FOUND THEN
99         CLOSE is_invalid_lsv;
100         RETURN(valid_lsv);
101       ELSE
102         CLOSE is_invalid_lsv;
103         valid_lsv := 'Y';
104         RETURN(valid_lsv);
105       END IF;
106 
107     ELSIF (bsv_option = 'A' AND msv_option = 'I') THEN
108       -- All the bsvs are allowed.
109       -- Check if all the msvs of the header are allowed.
110       OPEN is_invalid_lsv(x_je_header_id,
111                           'M',
112                           x_edate,
113                           x_ledger_id);
114       FETCH is_invalid_lsv INTO dummy;
115 
116       IF is_invalid_lsv%FOUND THEN
117         CLOSE is_invalid_lsv;
118         RETURN(valid_lsv);
119       ELSE
120         CLOSE is_invalid_lsv;
121         valid_lsv := 'Y';
122         RETURN(valid_lsv);
123       END IF;
124 
125     ELSIF (bsv_option = 'I' AND msv_option = 'I') THEN
126 
127       -- Check if all the lsvs of the header are allowed.
128       OPEN is_invalid(x_je_header_id,
129                       x_edate,
130                       x_ledger_id);
131       FETCH is_invalid INTO dummy;
132 
133       IF is_invalid%FOUND THEN
134         CLOSE is_invalid;
135         RETURN(valid_lsv);
136       ELSE
137         CLOSE is_invalid;
138         valid_lsv := 'Y';
139         RETURN(valid_lsv);
140       END IF;
141     END IF;
142 
143   EXCEPTION
144     WHEN OTHERS THEN
145       app_exception.raise_exception;
146   END check_header_valid_lsv;
147 
148 -- **********************************************************************
149 
150   -- NAME
151   --   check_header_write_all
152   -- DESCRIPTION
153   --   Check both the valid ledger segment values and whether the user has write access.
154   --   The valid ledger segment values are checked first, then if they are valid,
155   --   the access privilege is checked.
156   FUNCTION check_header_write_all ( x_access_set_id    IN NUMBER,
157                                     x_je_header_id     IN NUMBER,
158                                     x_edate            IN DATE)  RETURN VARCHAR2
159   IS
160     valid_lsv                VARCHAR2(1);
161     access_privilege_code    VARCHAR2(1) := 'Z';
162     x_je_batch_id            NUMBER;
163 
164   BEGIN
165     -- Check the header segment values
166     valid_lsv := gl_je_header_security.check_header_valid_lsv ( x_je_header_id      => x_je_header_id,
167                                                                    x_edate             => x_edate);
168     IF (valid_lsv = 'N') THEN
169       RETURN (access_privilege_code);
170     END IF;
171 
172     SELECT je_batch_id
173     INTO x_je_batch_id
174     FROM gl_je_headers
175     WHERE je_header_id = x_je_header_id;
176 
177     -- Check if the user has write access to the header
178     access_privilege_code :=  gl_access_set_security_pkg.get_journal_access(
179           access_set_id => x_access_set_id,
180           header_only => FALSE,
181           check_mode => gl_access_set_security_pkg.WRITE_ACCESS,
182           je_id  => x_je_batch_id);
183 
184     IF (access_privilege_code=gl_access_set_security_pkg.WRITE_ACCESS) THEN
185       access_privilege_code := 'Y';
186     ELSE
187       access_privilege_code := 'N';
188     END IF;
189 
190     RETURN (access_privilege_code);
191 
192   EXCEPTION
193     WHEN OTHERS THEN
194       app_exception.raise_exception;
195   END check_header_write_all;
196 
197 END gl_je_header_security;