DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_BUDGET_LINES_UTILS

Source


1 PACKAGE BODY PA_BUDGET_LINES_UTILS as
2 /* $Header: PAFPBLUB.pls 120.2 2007/02/06 09:44:28 dthakker noship $
3    Start of Comments
4    Package name     : PA_BUDGET_LINES_UTILS
5    Purpose          : utility API's for pa_budget_lines table
6    NOTE             : Used in Generation, WebADI, Change Document, upgrade, etc flows
7                       in which pa_budget_lines are updated directly without going
8                       through calculate API.
9    End of Comments
10 */
11 
12 
13 -- bug 5067200: Added this private API to null out display_quantity for
14 -- non rate based planning txns. It is called from populate_display_qty.
15 PROCEDURE clear_non_rate_res_disp_qty
16     (p_budget_version_id           IN    pa_budget_versions.budget_version_id%TYPE,
17      x_return_status               OUT   NOCOPY VARCHAR2)
18 IS
19 
20 CURSOR get_non_rate_based_asgn
21 IS
22 SELECT resource_assignment_id
23 FROM   pa_resource_assignments
24 WHERE  budget_version_id = p_budget_version_id
25 AND    rate_based_flag = 'N';
26 
27 l_non_rate_based_asgmt_id_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
28 L_DEBUG_MODE varchar2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
29 li_curr_level NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
30 
31 BEGIN
32     x_return_status := FND_API.G_RET_STS_SUCCESS;
33 
34     IF L_DEBUG_MODE = 'Y' AND (li_curr_level <= 6) THEN
35         pa_debug.g_err_stage:='In PA_BUDGET_LINES_UTILS.clear_non_rate_res_disp_qty';
36         pa_debug.write('PA_BUDGET_LINES_UTILS',pa_debug.g_err_stage,3);
37     END IF;
38 
39     OPEN  get_non_rate_based_asgn;
40     FETCH get_non_rate_based_asgn BULK COLLECT INTO l_non_rate_based_asgmt_id_tab;
41     CLOSE get_non_rate_based_asgn;
42 
43       IF l_non_rate_based_asgmt_id_tab.COUNT > 0 THEN
44 
45         FORALL i IN l_non_rate_based_asgmt_id_tab.FIRST .. l_non_rate_based_asgmt_id_tab.LAST
46         UPDATE pa_budget_lines
47            SET display_quantity = null
48          WHERE budget_version_id = p_budget_version_id
49            AND resource_assignment_id = l_non_rate_based_asgmt_id_tab(i);
50       END IF;
51 
52 EXCEPTION
53     WHEN OTHERS THEN
54            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
55            IF L_DEBUG_MODE = 'Y' AND (li_curr_level <= 6) THEN
56                PA_DEBUG.write_log (x_module    => 'PA_BUDGET_LINES_UTILS',
57                                    x_msg       => 'Unexp. Error:' || 'clear_non_rate_res_disp_qty' || SQLERRM,
58                                    x_log_level => 6);
59            END IF;
60            FND_MSG_PUB.add_exc_msg( p_pkg_name       => 'PA_BUDGET_LINES_UTILS',
61                                     p_procedure_name => 'clear_non_rate_res_disp_qty');
62            RAISE;
63 END clear_non_rate_res_disp_qty;
64 
65 procedure Populate_Display_Qty
66     (p_budget_version_id           IN  NUMBER,
67      p_context                     IN  VARCHAR2,
68      p_use_temp_table_flag         IN  VARCHAR2 DEFAULT 'N',
69      p_resource_assignment_id_tab  IN  SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.pa_num_tbl_type(),
70      p_set_disp_qty_null_for_nrbf  IN  VARCHAR2,
71      x_return_status               OUT NOCOPY VARCHAR2) is
72 
73 CURSOR get_rate_based_assignments IS
74 SELECT resource_assignment_id
75 FROM pa_resource_assignments
76 WHERE budget_version_id = p_budget_version_id
77 AND rate_based_flag = 'Y';
78 
79 CURSOR get_rate_based_asgmts_temp_fp IS
80 SELECT ra.resource_assignment_id
81 FROM pa_resource_assignments ra,
82      pa_resource_asgn_curr_tmp ract
83 WHERE ra.budget_version_id = p_budget_version_id
84 AND ra.resource_assignment_id = ract.resource_assignment_id
85 AND ra.rate_based_flag = 'Y';
86 
87 CURSOR get_rate_based_asgmts_temp_wp IS
88 SELECT resource_assignment_id
89 FROM pa_resource_asgn_curr_tmp;
90 
91 l_rate_based_asgmt_id_tab SYSTEM.pa_num_tbl_type;
92 L_DEBUG_MODE varchar2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
93 li_curr_level NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
94 
95 
96 BEGIN
97 
98   x_return_status := FND_API.G_RET_STS_SUCCESS;
99 
100   IF L_DEBUG_MODE = 'Y' AND (li_curr_level <= 6) THEN
101     pa_debug.g_err_stage:='In PA_BUDGET_LINES_UTILS.Populate_Display_Qty';
102     pa_debug.write('PA_BUDGET_LINES_UTILS',pa_debug.g_err_stage,3);
103   END IF;
104 
105   -- Option #1: Process all pa_budget_lines of resource_assignment_id's read
106   --            from the pa_resource_asgn_curr_tmp temporary table.
107   -- Option #2: Process all pa_budget_lines of resource_assignment_id's read
108   --            from the IN parameter, p_resource_assignment_id_tab.
109   -- Option #3: Process all pa_budget_lines in the given budget version id.
110 
111   -- IF p_context = 'WORKPLAN', simply copy quantity to display_quantity
112   -- IF p_context = 'FINANCIAL', copy quantity according to rate_based_flag
113 
114   IF p_use_temp_table_flag = 'Y' THEN
115 
116     IF p_context = 'WORKPLAN' THEN
117       OPEN get_rate_based_asgmts_temp_wp;
118       FETCH get_rate_based_asgmts_temp_wp BULK COLLECT INTO l_rate_based_asgmt_id_tab;
119       CLOSE  get_rate_based_asgmts_temp_wp;
120     ELSE
121       OPEN get_rate_based_asgmts_temp_fp;
122       FETCH get_rate_based_asgmts_temp_fp BULK COLLECT INTO l_rate_based_asgmt_id_tab;
123       CLOSE  get_rate_based_asgmts_temp_fp;
124     END IF;
125 
126     IF l_rate_based_asgmt_id_tab IS NOT NULL AND l_rate_based_asgmt_id_tab.COUNT > 0 THEN
127 
128       FORALL i IN l_rate_based_asgmt_id_tab.FIRST..l_rate_based_asgmt_id_tab.LAST
129       UPDATE pa_budget_lines
130          SET display_quantity = quantity
131        WHERE budget_version_id = p_budget_version_id
132          AND resource_assignment_id = l_rate_based_asgmt_id_tab(i);
133     END IF;
134 
135   ELSIF p_resource_assignment_id_tab is not null AND p_resource_assignment_id_tab.count > 0 THEN
136 
137     IF p_context = 'WORKPLAN' THEN
138 
139       FORALL i IN p_resource_assignment_id_tab.FIRST..p_resource_assignment_id_tab.LAST
140         UPDATE pa_budget_lines
141            SET display_quantity = quantity
142          WHERE budget_version_id = p_budget_version_id
143            AND resource_assignment_id = p_resource_assignment_id_tab(i);
144 
145     ELSE
146 
147       FORALL i IN p_resource_assignment_id_tab.FIRST..p_resource_assignment_id_tab.LAST
148       UPDATE pa_budget_lines
149          SET display_quantity = quantity
150        WHERE budget_version_id = p_budget_version_id
151          AND resource_assignment_id = p_resource_assignment_id_tab(i)
152          AND resource_assignment_id in
153              (select resource_assignment_id
154                 from pa_resource_assignments
155                where rate_based_flag = 'Y'
156                  and budget_version_id = p_budget_version_id
157                  and resource_assignment_id = p_resource_assignment_id_tab(i));
158     END IF;
159 
160   ELSE
161 
162     IF p_context = 'WORKPLAN' THEN
163 
164         UPDATE pa_budget_lines
165            SET display_quantity = quantity
166          WHERE budget_version_id = p_budget_version_id;
167 
168     ELSE
169 
170       OPEN get_rate_based_assignments;
171       FETCH get_rate_based_assignments BULK COLLECT INTO l_rate_based_asgmt_id_tab;
172       CLOSE  get_rate_based_assignments;
173 
174       IF l_rate_based_asgmt_id_tab IS NOT NULL AND l_rate_based_asgmt_id_tab.COUNT > 0 THEN
175 
176         FORALL i IN l_rate_based_asgmt_id_tab.FIRST .. l_rate_based_asgmt_id_tab.LAST
177         UPDATE pa_budget_lines
178            SET display_quantity = quantity
179          WHERE budget_version_id = p_budget_version_id
180            AND resource_assignment_id = l_rate_based_asgmt_id_tab(i);
181       END IF;
182     END IF;
183 
184   END IF;
185 
186     -- bug 5067200: Calling a private API clear_non_rate_res_disp_qty to clear out
187     -- display_quantity column for non rate based planning txns, as it is possible
188     -- that some rate based planning txn have been converted to a non rate based one
189     -- and we need to null out values from display_quantity in pa_budget_lines
190     IF p_context = 'FINANCIAL' AND
191        p_set_disp_qty_null_for_nrbf = 'Y' THEN -- bug 5006029: added this condition.
192         clear_non_rate_res_disp_qty
193             (p_budget_version_id => p_budget_version_id,
194              x_return_status     => x_return_status);
195     END IF;
196 
197 EXCEPTION
198 
199   WHEN OTHERS THEN
200            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
201            IF L_DEBUG_MODE = 'Y' AND (li_curr_level <= 6) THEN
202                PA_DEBUG.write_log (x_module    => 'PA_BUDGET_LINES_UTILS',
203                                    x_msg       => 'Unexp. Error:' || 'Populate_Display_Qty' || SQLERRM,
204                                    x_log_level => 6);
205            END IF;
206            FND_MSG_PUB.add_exc_msg( p_pkg_name       => 'PA_BUDGET_LINES_UTILS',
207                                     p_procedure_name => 'Populate_Display_Qty');
208            RAISE;
209 
210 
211 END Populate_Display_Qty;
212 
213 
214 END PA_BUDGET_LINES_UTILS;