DBA Data[Home] [Help]

PACKAGE BODY: APPS.GL_SUMMARY_BC_OPTIONS_PKG

Source


1 PACKAGE BODY gl_summary_bc_options_pkg AS
2 /* $Header: glistbcb.pls 120.4.12010000.1 2008/07/28 13:26:46 appldev ship $ */
3 
4 --
5 -- PUBLIC FUNCTIONS
6 --
7 
8 PROCEDURE Insert_Row(X_Rowid                  IN OUT NOCOPY       VARCHAR2,
9                      X_Funds_Check_Level_Code              VARCHAR2,
10                      X_Dr_Cr_Code                          VARCHAR2,
11                      X_Amount_Type                         VARCHAR2,
12                      X_Boundary_Code                       VARCHAR2,
13                      X_Template_Id                         NUMBER,
14                      X_Last_Update_Date                    DATE,
15                      X_Last_Updated_by                     NUMBER,
16                      X_Created_By                          NUMBER,
17                      X_Creation_Date                       DATE,
18                      X_Last_Update_Login                   NUMBER,
19                      X_Funding_Budget_Version_Id           NUMBER
20                      ) IS
21 
22     CURSOR check_overlaps IS
23     SELECT 'Overlap'
24       FROM DUAL
25      WHERE EXISTS
26        (SELECT 'X'
27           FROM gl_budgets b1,
28                gl_budget_versions bv1,
29                gl_summary_bc_options sa,
30                gl_period_statuses pf1,
31                gl_period_statuses pl1,
32                gl_budgets b2,
33                gl_budget_versions bv2,
34                gl_period_statuses pf2,
35                gl_period_statuses pl2
36          WHERE b1.current_version_id = bv1.version_num
37            AND b1.budget_name = bv1.budget_name
38            AND bv1.budget_version_id = sa.funding_budget_version_id
39            AND b1.first_valid_period_name = pf1.period_name
40            AND b1.last_valid_period_name = pl1.period_name
41            AND b2.current_version_id = bv2.version_num
42            AND b2.budget_name = bv2.budget_name
43            AND bv2.budget_version_id = x_funding_budget_version_id
44            AND b2.first_valid_period_name = pf2.period_name
45            AND b2.last_valid_period_name = pl2.period_name
46            AND sa.template_id = X_Template_Id
47            AND pf1.application_id = 101
48            AND pf1.ledger_id = b1.ledger_id
49            AND pl1.application_id = 101
50            AND pl1.ledger_id = b1.ledger_id
51            AND pf2.application_id = 101
52            AND pf2.ledger_id = b2.ledger_id
53            AND pl2.application_id = 101
54            AND pl2.ledger_id = b2.ledger_id
55            AND NOT (   (pl1.effective_period_num < pf2.effective_period_num)
56                     OR (pf1.effective_period_num > pl2.effective_period_num)
57                    )
58        );
59 
60 
61 
62    CURSOR C IS
63    SELECT rowid
64      FROM gl_summary_bc_options
65     WHERE template_id = X_Template_Id
66       AND funding_budget_version_id = X_Funding_Budget_Version_Id;
67 
68     dummy VARCHAR2(100);
69 BEGIN
70 
71   OPEN check_overlaps;
72   FETCH check_overlaps into dummy;
73   IF check_overlaps%FOUND THEN
74     CLOSE check_overlaps;
75     fnd_message.set_name('SQLGL', 'GL_BC_BUDGET_OVERLAP');
76     app_exception.raise_exception;
77   ELSE
78     CLOSE check_overlaps;
79   END IF;
80 
81   INSERT INTO GL_SUMMARY_BC_OPTIONS(
82         template_id,
83         last_update_date,
84         last_updated_by,
85         funds_check_level_code,
86         amount_type,
87         boundary_code,
88         created_by,
89         creation_date,
90         dr_cr_code,
91         last_update_login,
92         funding_budget_version_id)
93    VALUES (
94         X_Template_Id,
95         X_Last_Update_Date,
96         X_Last_Updated_By,
97         X_Funds_Check_Level_Code,
98         X_Amount_Type,
99         X_Boundary_Code,
100         X_Created_By,
101         X_Creation_Date,
102         X_Dr_Cr_Code,
103         X_Last_Update_Login,
104         X_Funding_Budget_Version_Id);
105 
106      OPEN C;
107      FETCH C INTO X_Rowid;
108      if (C%NOTFOUND) then
109         CLOSE C;
110         RAISE NO_DATA_FOUND;
111      end if;
112      CLOSE C;
113 END Insert_Row;
114 
115 
116 PROCEDURE Lock_Row(X_Rowid                               VARCHAR2,
117                    X_Funds_Check_Level_Code              VARCHAR2,
118                    X_Dr_Cr_Code                          VARCHAR2,
119                    X_Amount_Type                         VARCHAR2,
120                    X_Boundary_Code                       VARCHAR2,
121                    X_Template_Id                         NUMBER,
122                    X_Last_Update_Date                    DATE,
123                    X_Last_Updated_by                     NUMBER,
124                    X_Created_By                          NUMBER,
125                    X_Creation_Date                       DATE,
126                    X_Last_Update_Login                   NUMBER,
127                    X_Funding_Budget_Version_Id           NUMBER
128                    ) IS
129       CURSOR C IS
130           SELECT *
131           FROM GL_SUMMARY_BC_OPTIONS
132           WHERE  rowid = X_Rowid
133           FOR UPDATE of template_id NOWAIT;
134       Recinfo  C%ROWTYPE;
135 BEGIN
136       OPEN C;
137       FETCH C INTO Recinfo;
138       if (C%NOTFOUND) then
139           CLOSE C;
140           RAISE NO_DATA_FOUND;
141       end if;
142       CLOSE C;
143       if(
144              ( (Recinfo.template_id = X_Template_Id)
145                 OR (    (Recinfo.template_id IS NULL)
146                     AND (X_Template_Id IS NULL)))
147          AND ( (Recinfo.last_update_date = X_Last_Update_Date)
148                 OR (    (Recinfo.last_update_date IS NULL)
149                     AND (X_Last_Update_Date IS NULL)))
150          AND ( (Recinfo.last_updated_by = X_Last_Updated_By)
151                 OR (    (Recinfo.last_updated_by IS NULL)
152                     AND (X_Last_Updated_By IS NULL)))
153          AND ( (Recinfo.funds_check_level_code = X_Funds_Check_Level_Code)
154                 OR (    (Recinfo.funds_check_level_code IS NULL)
155                     AND (X_Funds_Check_Level_Code IS NULL)))
156          AND ( (Recinfo.amount_type = X_Amount_Type)
157                 OR (    (Recinfo.amount_type IS NULL)
158                     AND (X_Amount_Type IS NULL)))
159          AND ( (Recinfo.boundary_code = X_Boundary_Code)
160                 OR (    (Recinfo.boundary_code IS NULL)
161                     AND (X_Boundary_Code IS NULL)))
162          AND ( (Recinfo.created_by = X_Created_By)
163                 OR (    (Recinfo.created_by IS NULL)
164                     AND (X_Created_By IS NULL)))
165          AND ( (Recinfo.creation_date = X_Creation_Date)
166                 OR (    (Recinfo.creation_date IS NULL)
167                     AND (X_Creation_Date IS NULL)))
168          AND ( (Recinfo.dr_cr_code = X_Dr_Cr_Code)
169                 OR (    (Recinfo.dr_cr_code IS NULL)
170                     AND (X_Dr_Cr_Code IS NULL)))
171          AND ( (Recinfo.last_update_login = X_Last_Update_Login)
172                 OR (    (Recinfo.last_update_login IS NULL)
173                     AND (X_Last_Update_Login IS NULL)))
174          AND ( (Recinfo.funding_budget_version_id = X_Funding_Budget_Version_Id)
175                 OR (    (Recinfo.funding_budget_version_id IS NULL)
176                     AND (X_Funding_Budget_Version_Id IS NULL)))
177         ) then
178          return;
179     else
180          FND_MESSAGE.Set_Name('FND', 'FORM_RECORD_CHANGED');
181          APP_EXCEPTION.RAISE_EXCEPTION;
182     end if;
183 END Lock_Row;
184 
185 PROCEDURE Insert_BC_Options(X_Rowid                  IN OUT NOCOPY       VARCHAR2,
186                             X_Funds_Check_Level_Code              VARCHAR2,
187                             X_Dr_Cr_Code                          VARCHAR2,
188                             X_Amount_Type                         VARCHAR2,
189                             X_Boundary_Code                       VARCHAR2,
190                             X_Template_Id                         NUMBER,
191                             X_Last_Update_Date                    DATE,
192                             X_Last_Updated_by                     NUMBER,
193                             X_Created_By                          NUMBER,
194                             X_Creation_Date                       DATE,
195                             X_Last_Update_Login                   NUMBER,
196                             X_Funding_Budget_Version_Id           NUMBER
197                            ) IS
198 
199  CURSOR check_funds_check_level IS
200    SELECT 'X'
201    FROM GL_LOOKUPS
202    WHERE LOOKUP_TYPE = 'FUNDS_CHECK_LEVEL'
203    AND lookup_code = X_Funds_Check_Level_Code;
204 
205  CURSOR check_amount_type IS
206    SELECT 'X'
207    FROM GL_LOOKUPS_AMOUNT_TYPES_V
208    WHERE amount_type = X_Amount_Type;
209 
210  CURSOR check_boundary_code IS
211    SELECT 'X'
212    FROM GL_LOOKUPS_BOUNDARIES_V
213    WHERE boundary_code = X_Boundary_Code;
214 
215  CURSOR check_budget_version IS
216    SELECT 'X'
217    FROM GL_BUDGET_VERSIONS
218    WHERE budget_version_id = X_Funding_Budget_Version_Id;
219 
220  CURSOR check_dr_cr_code IS
221    SELECT 'X'
222    FROM GL_LOOKUPS
223    WHERE LOOKUP_TYPE = 'DR_CR'
224    AND lookup_code = X_Dr_Cr_Code;
225 
226  L_Budgetary_Control_Flag VARCHAR2(1);
227  dummy VARCHAR2(80);
228 
229 BEGIN
230 
231 
232    -- Validate Funds Check Level
233    IF (X_Funds_Check_Level_Code IN ('D', 'B')) THEN
234      OPEN check_funds_check_level;
235      FETCH check_funds_check_level INTO dummy;
236      IF check_funds_check_level%NOTFOUND THEN
237         CLOSE check_funds_check_level;
238         fnd_message.set_name('SQLGL', 'GL_API_VALUE_NOT_EXIST');
239         fnd_message.set_token('VALUE', X_Funds_Check_Level_Code);
240         fnd_message.set_token('ATTRIBUTE', 'FundsCheckLevelCode');
241         app_exception.raise_exception;
242      END IF;
243      CLOSE check_funds_check_level;
244    ELSIF (X_Funds_Check_Level_Code IS NULL) THEN
245       fnd_message.set_name('SQLGL', 'GL_API_NULL_VALUE_ERROR');
246       fnd_message.set_token('ATTRIBUTE', 'FundsCheckLevelCode');
247       app_exception.raise_exception;
248    ELSE
249       fnd_message.set_name('SQLGL', 'GL_API_INVALID_VALUE');
250       fnd_message.set_token('VALUE', X_Funds_Check_Level_Code);
251       fnd_message.set_token('ATTRIBUTE', 'FundsCheckLevelCode');
252       app_exception.raise_exception;
253    END IF;
254 
255    -- Validate Amount Type
256    IF (X_Amount_Type IS NOT NULL) THEN
257      OPEN check_amount_type;
258      FETCH check_amount_type INTO dummy;
259      IF check_amount_type%NOTFOUND THEN
260         CLOSE check_amount_type;
261         fnd_message.set_name('SQLGL', 'GL_API_VALUE_NOT_EXIST');
262         fnd_message.set_token('VALUE', X_Amount_Type);
263         fnd_message.set_token('ATTRIBUTE', 'AmountType');
264         app_exception.raise_exception;
265      END IF;
266      CLOSE check_amount_type;
267    ELSE
268       fnd_message.set_name('SQLGL', 'GL_API_NULL_VALUE_ERROR');
269       fnd_message.set_token('ATTRIBUTE', 'AmountType');
270       app_exception.raise_exception;
271    END IF;
272 
273    -- Validate Boundary Code
274    IF (X_Boundary_Code IS NOT NULL) THEN
275      OPEN check_boundary_code;
276      FETCH check_boundary_code INTO dummy;
277      IF check_boundary_code%NOTFOUND THEN
278         CLOSE check_boundary_code;
279         fnd_message.set_name('SQLGL', 'GL_API_VALUE_NOT_EXIST');
280         fnd_message.set_token('VALUE', X_Boundary_Code);
281         fnd_message.set_token('ATTRIBUTE', 'BoundaryCode');
282         app_exception.raise_exception;
283      END IF;
284      CLOSE check_boundary_code;
285    ELSE
286       fnd_message.set_name('SQLGL', 'GL_API_NULL_VALUE_ERROR');
287       fnd_message.set_token('ATTRIBUTE', 'BoundaryCode');
288       app_exception.raise_exception;
289    END IF;
290 
291    -- Validate Budget Version
292    IF (X_Funding_Budget_Version_Id IS NOT NULL) THEN
293      OPEN check_budget_version;
294      FETCH check_budget_version INTO dummy;
295      IF check_budget_version%NOTFOUND THEN
296         CLOSE check_budget_version;
297         fnd_message.set_name('SQLGL', 'GL_API_VALUE_NOT_EXIST');
298         fnd_message.set_token('VALUE', X_Funding_Budget_Version_Id);
299         fnd_message.set_token('ATTRIBUTE', 'FundingBudgetVersionId');
300         app_exception.raise_exception;
301      END IF;
302      CLOSE check_budget_version;
303    ELSE
304       fnd_message.set_name('SQLGL', 'GL_API_NULL_VALUE_ERROR');
305       fnd_message.set_token('ATTRIBUTE', 'FundingBudgetVersionId');
306       app_exception.raise_exception;
307    END IF;
308 
309    -- Validate Debit/Credit Code
310    IF (X_Dr_Cr_Code IS NOT NULL) THEN
311      OPEN check_dr_cr_code;
312      FETCH check_dr_cr_code INTO dummy;
313      IF check_dr_cr_code%NOTFOUND THEN
314         CLOSE check_dr_cr_code;
315         fnd_message.set_name('SQLGL', 'GL_API_VALUE_NOT_EXIST');
316         fnd_message.set_token('VALUE', X_Dr_Cr_Code);
317         fnd_message.set_token('ATTRIBUTE', 'DrCrCode');
318         app_exception.raise_exception;
319      END IF;
320      CLOSE check_dr_cr_code;
321    ELSE
322       fnd_message.set_name('SQLGL', 'GL_API_NULL_VALUE_ERROR');
323       fnd_message.set_token('ATTRIBUTE', 'DrCrCode');
324       app_exception.raise_exception;
325    END IF;
326 
327    SELECT gl1.enable_budgetary_control_flag
328    INTO   L_Budgetary_Control_Flag
329    FROM   gl_ledgers gl1, gl_summary_templates gl2
330    WHERE  gl2.template_id = X_Template_Id
331       AND gl1.ledger_id = gl2.ledger_id;
332 
333 
334    -- Validate that funds check level code is D or B only if the set of
335    -- books is budgetary control enabled.
336    IF (X_Funds_Check_Level_Code = 'D' OR X_Funds_Check_Level_Code = 'B') THEN
337       IF (L_Budgetary_Control_Flag = 'Y') THEN
338          NULL;
339       ELSE
340          fnd_message.set_name('SQLGL', 'GL_API_SUMMTEMPL_FUNDS_LEVEL');
341          app_exception.raise_exception;
342       END IF;
343    END IF;
344 
345    -- Validate that boundary code is a logical selection depending on the
346    -- amount type
347    IF (X_Amount_Type = 'PTD') THEN
348       IF (X_Boundary_Code <> 'P') THEN
349          fnd_message.set_name('SQLGL', 'GL_API_SUMMTEMPL_BOUNDARY_ERR');
350          app_exception.raise_exception;
351       END IF;
352    ELSIF (X_Amount_Type = 'QTD') THEN
353       IF (X_Boundary_Code NOT IN ('P', 'Q')) THEN
354          fnd_message.set_name('SQLGL', 'GL_API_SUMMTEMPL_BOUNDARY_ERR');
355          app_exception.raise_exception;
356       END IF;
357    ELSIF (X_Amount_Type = 'YTD') THEN
358       IF (X_Boundary_Code NOT IN ('P', 'Q', 'Y')) THEN
359          fnd_message.set_name('SQLGL', 'GL_API_SUMMTEMPL_BOUNDARY_ERR');
360          app_exception.raise_exception;
361       END IF;
362    ELSIF (X_Amount_Type = 'PJTD') THEN
363       -- Already checked boundary code is J, P, Q or Y
364       NULL;
365    END IF;
366 
367    Insert_Row(X_Rowid,
368               X_Funds_Check_Level_Code,
369               X_Dr_Cr_Code,
370               X_Amount_Type,
371               X_Boundary_Code,
372               X_Template_Id,
373               X_Last_Update_Date,
374               X_Last_Updated_by,
375               X_Created_By,
376               X_Creation_Date,
377               X_Last_Update_Login,
378               X_Funding_Budget_Version_Id
379              );
380 
381 
382 EXCEPTION
383   WHEN app_exceptions.application_exception THEN
384     RAISE;
385   WHEN OTHERS THEN
386     fnd_message.set_name('SQLGL', 'GL_UNHANDLED_EXCEPTION');
387     fnd_message.set_token('PROCEDURE',
388                           'GL_SUMMARY_BC_OPTIONS_PKG.Insert_BC_Options');
389     RAISE;
390 
391 END Insert_BC_Options;
392 
393 END gl_summary_bc_options_pkg;