[Home] [Help]
PACKAGE BODY: APPS.PA_FP_GEN_FCST_AMT_PUB4
Source
1 PACKAGE body PA_FP_GEN_FCST_AMT_PUB4 as
2 /* $Header: PAFPFG4B.pls 120.5 2007/02/06 09:51:54 dthakker ship $ */
3
4 P_PA_DEBUG_MODE varchar2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
5
6 PROCEDURE GET_ETC_BDGT_COMPLETE_AMTS (
7 P_SRC_RES_ASG_ID IN PA_RESOURCE_ASSIGNMENTS.RESOURCE_ASSIGNMENT_ID%TYPE,
8 P_TGT_RES_ASG_ID IN PA_RESOURCE_ASSIGNMENTS.RESOURCE_ASSIGNMENT_ID%TYPE,
9 P_FP_COLS_SRC_REC IN PA_FP_GEN_AMOUNT_UTILS.FP_COLS,
10 P_FP_COLS_TGT_REC IN PA_FP_GEN_AMOUNT_UTILS.FP_COLS,
11 P_TASK_ID IN PA_TASKS.TASK_ID%TYPE,
12 P_RESOURCE_LIST_MEMBER_ID IN PA_RESOURCE_LIST_MEMBERS.RESOURCE_LIST_MEMBER_ID%TYPE,
13 P_ETC_SOURCE_CODE IN PA_TASKS.GEN_ETC_SOURCE_CODE%TYPE,
14 P_WP_STRUCTURE_VERSION_ID IN PA_PROJ_ELEM_VER_STRUCTURE.ELEMENT_VERSION_ID%TYPE,
15 P_ACTUALS_THRU_DATE IN PA_PERIODS_ALL.END_DATE%TYPE,
16 P_PLANNING_OPTIONS_FLAG IN VARCHAR2,
17 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
18 X_MSG_COUNT OUT NOCOPY NUMBER,
19 X_MSG_DATA OUT NOCOPY VARCHAR2)
20 IS
21 l_module_name VARCHAR2(200) := 'pa.plsql.PA_FP_GEN_FCST_AMT_PUB4.GEN_ETC_BDGT_COMPLETE_AMTS';
22
23 l_structure_type VARCHAR2(30):= null;
24 l_structure_status VARCHAR2(30):= null;
25 l_structure_status_flag VARCHAR2(1):= null;
26 l_wp_structure_version_id NUMBER;
27 lx_percent_complete NUMBER;
28 l_percent_complete NUMBER;
29
30 l_rate_based_flag VARCHAR2(1);
31 l_currency_flag VARCHAR2(30);
32 l_currency_count_flag VARCHAR2(1);
33 l_pc_currency_code pa_projects_all.project_currency_code%type;
34 l_pfc_currency_code pa_projects_all.project_currency_code%type;
35 l_rev_gen_method VARCHAR2(3);
36
37 l_target_version_type pa_budget_versions.version_type%type;
38 l_tot_currency_code_tab PA_PLSQL_DATATYPES.Char30TabTyp;
39 l_tot_quantity_tab PA_PLSQL_DATATYPES.NumTabTyp;
40 l_tot_raw_cost_tab PA_PLSQL_DATATYPES.NumTabTyp;
41 l_tot_brdn_cost_tab PA_PLSQL_DATATYPES.NumTabTyp;
42 l_tot_revenue_tab PA_PLSQL_DATATYPES.NumTabTyp;
43
44 l_etc_quantity_tab PA_PLSQL_DATATYPES.NumTabTyp;
45
46 /*For average rates*/
47 l_pc_rate_quantity NUMBER;
48 l_pc_rate_raw_cost NUMBER;
49 l_pc_rate_brdn_cost NUMBER;
50 l_pc_rate_revenue NUMBER;
51 l_pfc_rate_raw_cost NUMBER;
52 l_pfc_rate_brdn_cost NUMBER;
53 l_pfc_rate_revenue NUMBER;
54
55 l_txn_rate_quantity NUMBER;
56 l_txn_rate_raw_cost NUMBER;
57 l_txn_rate_brdn_cost NUMBER;
58 l_txn_rate_revenue NUMBER;
59
60 l_txn_raw_cost_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
61 l_txn_brdn_cost_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
62 l_txn_revenue_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
63 l_pc_raw_cost_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
64 l_pc_brdn_cost_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
65 l_pc_revenue_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
66 l_pfc_raw_cost_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
67 l_pfc_brdn_cost_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
68 l_pfc_revenue_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
69 l_transaction_source_code VARCHAR2(30);
70
71 l_msg_count NUMBER;
72 l_msg_data VARCHAR2(2000);
73 l_data VARCHAR2(2000);
74 l_msg_index_out NUMBER:=0;
75
76 BEGIN
77 IF p_pa_debug_mode = 'Y' THEN
78 pa_debug.set_curr_function( p_function => 'GEN_ETC_BDGT_COMPLETE_AMTS',
79 p_debug_mode=> p_pa_debug_mode);
80 END IF;
81 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
82 X_MSG_COUNT := 0;
83
84 /* Get percent complete from workplan side:
85 For getting the financial percent complete,
86 we dont have to pass the structure version id.
87 It always comes from the latest published
88 financial structure version. */
89 IF P_ETC_SOURCE_CODE = 'FINANCIAL_PLAN' THEN
90 l_structure_type := 'FINANCIAL';
91 ELSE
92 l_structure_type := 'WORKPLAN';
93 l_wp_structure_version_id := P_WP_STRUCTURE_VERSION_ID;
94
95 l_structure_status_flag :=
96 PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Published(
97 P_FP_COLS_TGT_REC.X_PROJECT_ID,l_wp_structure_version_id);
98 IF l_structure_status_flag = 'Y' THEN
99 l_structure_status := 'PUBLISHED';
100 ELSE
101 l_structure_status := 'WORKING';
102 END IF;
103 END IF;
104
105 IF P_PA_DEBUG_MODE = 'Y' THEN
106 pa_fp_gen_amount_utils.fp_debug
107 (p_msg => 'Before calling PA_PROGRESS_UTILS.REDEFAULT_BASE_PC',
108 p_module_name => l_module_name,
109 p_log_level => 5);
110 END IF;
111 PA_PROGRESS_UTILS.REDEFAULT_BASE_PC (
112 p_Project_ID => P_FP_COLS_TGT_REC.X_PROJECT_ID,
113 p_Proj_element_id => P_TASK_ID,
114 p_Structure_type => l_structure_type,
115 p_object_type => 'PA_TASKS',
116 p_As_Of_Date => P_ACTUALS_THRU_DATE,
117 P_STRUCTURE_VERSION_ID => l_wp_structure_version_id,
118 P_STRUCTURE_STATUS => l_structure_status,
119 p_calling_context => 'FINANCIAL_PLANNING',
120 X_base_percent_complete => lx_percent_complete,
121 x_return_status => x_return_status,
122 x_msg_count => x_msg_count,
123 x_msg_data => x_msg_data );
124 IF P_PA_DEBUG_MODE = 'Y' THEN
125 pa_fp_gen_amount_utils.fp_debug
126 (p_msg => 'After calling PA_PROGRESS_UTILS.REDEFAULT_BASE_PC,
127 return status is:'||x_return_status,
128 p_module_name => l_module_name,
129 p_log_level => 5);
130 END IF;
131 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
132 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
133 END IF;
134
135 l_percent_complete := NVL(lx_percent_complete,0)/100;
136 IF (l_percent_complete = 1) THEN
137 IF P_PA_DEBUG_MODE = 'Y' THEN
138 PA_DEBUG.RESET_CURR_FUNCTION;
139 END IF;
140 RETURN;
141 END IF;
142
143 IF NVL(P_TGT_RES_ASG_ID,-99)>0 THEN
144 SELECT rate_based_flag
145 INTO l_rate_based_flag
146 FROM pa_resource_assignments
147 WHERE resource_assignment_id = p_tgt_res_asg_id;
148 ELSE
149 l_rate_based_flag:='N';
150 END IF;
151
152 /* When generate cost based revenue version, always take PFC
153 When target version is not multi currency enabled, take PC */
154 l_currency_flag := 'TC';
155
156 l_rev_gen_method := nvl(P_FP_COLS_TGT_REC.x_revenue_derivation_method,PA_FP_GEN_FCST_PG_PKG.GET_REV_GEN_METHOD(P_FP_COLS_TGT_REC.x_project_id)); -- Bug 5462471
157 --l_rev_gen_method := PA_FP_GEN_FCST_PG_PKG.GET_REV_GEN_METHOD(P_FP_COLS_TGT_REC.x_project_id);
158
159 IF (p_fp_cols_tgt_rec.x_version_type = 'REVENUE' and l_rev_gen_method = 'C') THEN
160 l_currency_flag := 'PFC';
161 ELSIF p_fp_cols_tgt_rec.X_PLAN_IN_MULTI_CURR_FLAG = 'N' THEN
162 l_currency_flag := 'PC';
163 END IF;
164
165 /* No matter ETC source is 'FINANCIAL_PLAN' or 'WORKPLAN_RESOURCES',
166 always get total plan amounts in PC or TC or PFC (bug fix 4102848) from financial data model.*/
167 l_pc_currency_code := p_fp_cols_tgt_rec.x_project_currency_code;
168 l_pfc_currency_code := p_fp_cols_tgt_rec.x_projfunc_currency_code;
169 SELECT /*+ INDEX(PA_FP_CALC_AMT_TMP2,PA_FP_CALC_AMT_TMP2_N2)*/
170 DECODE(l_currency_flag,
171 'PC', l_pc_currency_code,
172 'TC', txn_currency_code,
173 'PFC',l_pfc_currency_code),
174 SUM(NVL(total_plan_quantity,0)),
175 SUM(DECODE(l_currency_flag,
176 'PC',NVL(total_pc_raw_cost,0),
177 'TC',NVL(total_txn_raw_cost,0),
178 'PFC',NVL(total_pfc_raw_cost,0))),
179 SUM(DECODE(l_currency_flag,
180 'PC', NVL(total_pc_burdened_cost,0),
181 'TC', NVL(total_txn_burdened_cost,0),
182 'PFC', NVL(total_pfc_burdened_cost,0))),
183 SUM(DECODE(l_currency_flag,
184 'PC', NVL(total_pc_revenue,0),
185 'TC', NVL(total_txn_revenue,0),
186 'PFC', NVL(total_pfc_revenue,0)))
187 BULK COLLECT INTO
188 l_tot_currency_code_tab,
189 l_tot_quantity_tab,
190 l_tot_raw_cost_tab,
191 l_tot_brdn_cost_tab,
192 l_tot_revenue_tab
193 FROM PA_FP_CALC_AMT_TMP2
194 WHERE resource_assignment_id = p_src_res_asg_id
195 AND transaction_source_code = p_etc_source_code
196 GROUP BY DECODE(l_currency_flag, 'PC', l_pc_currency_code,
197 'TC', txn_currency_code,
198 'PFC',l_pfc_currency_code);
199
200 l_target_version_type := p_fp_cols_src_rec.x_version_type;
201 IF l_rate_based_flag = 'N' THEN
202 l_tot_quantity_tab := l_tot_raw_cost_tab;
203 END IF;
204
205 /* Get total ETC quantity */
206 FOR i IN 1..l_tot_currency_code_tab.count LOOP
207 l_etc_quantity_tab(i) := l_tot_quantity_tab(i) * (1 - l_percent_complete);
208 END LOOP;
209
210 /*When not taking periodic rates, we need to calculate out the average rates
211 from the source resource assignments that are mapped to the current target
212 resource assignment.*/
213 FOR i IN 1..l_tot_currency_code_tab.count LOOP
214 SELECT /*+ INDEX(pa_fp_calc_amt_tmp2,PA_FP_CALC_AMT_TMP2_N2)*/
215 NVL(SUM(NVL(total_plan_quantity,0)),0),
216 NVL(DECODE(l_currency_flag, 'TC', SUM(NVL(total_txn_raw_cost,0)),
217 'PC', SUM(NVL(total_pc_raw_cost,0)),
218 'PFC', SUM(NVL(total_pfc_raw_cost,0))),0),
219 NVL(DECODE(l_currency_flag, 'TC', SUM(NVL(total_txn_burdened_cost,0)),
220 'PC', SUM(NVL(total_pc_burdened_cost,0)),
221 'PFC', SUM(NVL(total_pfc_burdened_cost,0))),0),
222 NVL(DECODE(l_currency_flag, 'TC', SUM(NVL(total_txn_revenue,0)),
223 'PC', SUM(NVL(total_pc_revenue,0)),
224 'PFC', SUM(NVL(total_pfc_revenue,0))),0),
225 NVL(SUM(NVL(total_pc_raw_cost,0)),0),
226 NVL(SUM(NVL(total_pc_burdened_cost,0)),0),
227 NVL(SUM(NVL(total_pc_revenue,0)),0),
228 NVL(SUM(NVL(total_pfc_raw_cost,0)),0),
229 NVL(SUM(NVL(total_pfc_burdened_cost,0)),0),
230 NVL(SUM(NVL(total_pfc_revenue,0)),0)
231 INTO l_txn_rate_quantity,
232 l_txn_rate_raw_cost,
233 l_txn_rate_brdn_cost,
234 l_txn_rate_revenue,
235 l_pc_rate_raw_cost,
236 l_pc_rate_brdn_cost,
237 l_pc_rate_revenue,
238 l_pfc_rate_raw_cost,
239 l_pfc_rate_brdn_cost,
240 l_pfc_rate_revenue
241 FROM pa_fp_calc_amt_tmp2
242 WHERE resource_assignment_id = p_src_res_asg_id
243 AND DECODE(l_currency_flag, 'TC', txn_currency_code,
244 'PC', l_tot_currency_code_tab(i),
245 'PFC', l_tot_currency_code_tab(i)) = l_tot_currency_code_tab(i)
246 AND transaction_source_code IN ('FINANCIAL_PLAN','WORKPLAN_RESOURCES');
247
248 IF l_rate_based_flag = 'N' THEN
249 l_txn_rate_quantity := l_txn_rate_raw_cost;
250 END IF;
251
252 -- hr_utility.trace('l_txn_rate_quantity == '||l_txn_rate_quantity);
253 -- hr_utility.trace('l_pfc_rate_revenue == '||l_pfc_rate_revenue);
254 -- hr_utility.trace('l_pfc_revenue_rate_tab == '||l_pfc_rate_revenue/l_txn_rate_quantity);
255
256 IF l_txn_rate_quantity <> 0 THEN
257 l_txn_raw_cost_rate_tab(i) := l_txn_rate_raw_cost
258 / l_txn_rate_quantity;
259 l_txn_brdn_cost_rate_tab(i) := l_txn_rate_brdn_cost
260 / l_txn_rate_quantity;
261 l_txn_revenue_rate_tab(i) := l_txn_rate_revenue
262 / l_txn_rate_quantity;
263 l_pc_raw_cost_rate_tab(i) := l_pc_rate_raw_cost
264 / l_txn_rate_quantity;
265 l_pc_brdn_cost_rate_tab(i) := l_pc_rate_brdn_cost
266 / l_txn_rate_quantity;
267 l_pc_revenue_rate_tab(i) := l_pc_rate_revenue
268 / l_txn_rate_quantity;
269 l_pfc_raw_cost_rate_tab(i) := l_pfc_rate_raw_cost
270 / l_txn_rate_quantity;
271 l_pfc_brdn_cost_rate_tab(i) := l_pfc_rate_brdn_cost
272 / l_txn_rate_quantity;
273 l_pfc_revenue_rate_tab(i) := l_pfc_rate_revenue
274 / l_txn_rate_quantity;
275 ELSE
276 l_txn_raw_cost_rate_tab(i) := NULL;
277 l_txn_brdn_cost_rate_tab(i) := NULL;
278 l_txn_revenue_rate_tab(i) := NULL;
279 l_pc_raw_cost_rate_tab(i) := NULL;
280 l_pc_brdn_cost_rate_tab(i) := NULL;
281 l_pc_revenue_rate_tab(i) := NULL;
282 l_pfc_raw_cost_rate_tab(i) := NULL;
283 l_pfc_brdn_cost_rate_tab(i) := NULL;
284 l_pfc_revenue_rate_tab(i) := NULL;
285 END IF;
286 END LOOP;
287
288
289 /* If commitment is not included, record is inserted directly as
290 'ETC' record, if commitment is to be considered, record is
291 inserted as 'TOTAL_ETC' for further processing. */
292 IF P_FP_COLS_TGT_REC.X_GEN_INCL_OPEN_COMM_FLAG = 'Y' THEN
293 l_transaction_source_code := 'TOTAL_ETC';
294 ELSE
295 l_transaction_source_code := 'ETC';
296 END IF;
297
298 /* Insert total ETC amounts */
299 FORALL i IN 1..l_tot_currency_code_tab.count
300 INSERT INTO PA_FP_CALC_AMT_TMP2 (
301 RESOURCE_ASSIGNMENT_ID,
302 TARGET_RES_ASG_ID,
303 ETC_CURRENCY_CODE,
304 ETC_PLAN_QUANTITY,
305 ETC_TXN_RAW_COST,
306 ETC_TXN_BURDENED_COST,
307 ETC_TXN_REVENUE,
308 ETC_PC_RAW_COST,
309 ETC_PC_BURDENED_COST,
310 ETC_PC_REVENUE,
311 ETC_PFC_RAW_COST,
312 ETC_PFC_BURDENED_COST,
313 ETC_PFC_REVENUE,
314 TRANSACTION_SOURCE_CODE )
315 VALUES (
316 P_SRC_RES_ASG_ID,
317 P_TGT_RES_ASG_ID,
318 l_tot_currency_code_tab(i),
319 l_etc_quantity_tab(i),
320 l_etc_quantity_tab(i) * l_txn_raw_cost_rate_tab(i),
321 l_etc_quantity_tab(i) * l_txn_brdn_cost_rate_tab(i),
322 l_etc_quantity_tab(i) * l_txn_revenue_rate_tab(i),
323 l_etc_quantity_tab(i) * l_pc_raw_cost_rate_tab(i),
324 l_etc_quantity_tab(i) * l_pc_brdn_cost_rate_tab(i),
325 l_etc_quantity_tab(i) * l_pc_revenue_rate_tab(i),
326 l_etc_quantity_tab(i) * l_pfc_raw_cost_rate_tab(i),
327 l_etc_quantity_tab(i) * l_pfc_brdn_cost_rate_tab(i),
328 l_etc_quantity_tab(i) * l_pfc_revenue_rate_tab(i),
329 l_transaction_source_code );
330
331 IF P_PA_DEBUG_MODE = 'Y' THEN
332 PA_DEBUG.RESET_CURR_FUNCTION;
333 END IF;
334 EXCEPTION
335 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
336 l_msg_count := FND_MSG_PUB.count_msg;
337 IF l_msg_count = 1 THEN
338 PA_INTERFACE_UTILS_PUB.get_messages
339 ( p_encoded => FND_API.G_TRUE,
340 p_msg_index => 1,
341 p_msg_count => l_msg_count,
342 p_msg_data => l_msg_data,
343 p_data => l_data,
344 p_msg_index_out => l_msg_index_out);
345 x_msg_data := l_data;
346 x_msg_count := l_msg_count;
347 ELSE
348 x_msg_count := l_msg_count;
349 END IF;
350
351 ROLLBACK;
352 x_return_status := FND_API.G_RET_STS_ERROR;
353
354 IF P_PA_DEBUG_MODE = 'Y' THEN
355 pa_fp_gen_amount_utils.fp_debug
356 (p_msg => 'Invalid Arguments Passed',
357 p_module_name => l_module_name,
358 p_log_level => 5);
359 PA_DEBUG.RESET_CURR_FUNCTION;
360 END IF;
361 RAISE;
362 WHEN OTHERS THEN
363 rollback;
364 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
365 x_msg_count := 1;
366 x_msg_data := substr(sqlerrm,1,240);
367 -- dbms_output.put_line('error msg :'||x_msg_data);
368 FND_MSG_PUB.add_exc_msg
369 ( p_pkg_name => 'PA_FP_GEN_FCST_AMT_PUB4',
370 p_procedure_name => 'GEN_ETC_BDGT_COMPLETE_AMTS',
371 p_error_text => substr(sqlerrm,1,240));
372
373 IF P_PA_DEBUG_MODE = 'Y' THEN
374 pa_fp_gen_amount_utils.fp_debug
375 (p_msg => 'Unexpected Error'||substr(sqlerrm, 1, 240),
376 p_module_name => l_module_name,
377 p_log_level => 5);
378 PA_DEBUG.RESET_CURR_FUNCTION;
379 END IF;
380 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
381 END GET_ETC_BDGT_COMPLETE_AMTS;
382
383 PROCEDURE GET_ETC_BDGT_COMPLETE_AMTS_BLK (
384 P_SRC_RES_ASG_ID_TAB IN PA_PLSQL_DATATYPES.IdTabTyp,
385 P_TGT_RES_ASG_ID_TAB IN PA_PLSQL_DATATYPES.IdTabTyp,
386 P_FP_COLS_SRC_REC_FP IN PA_FP_GEN_AMOUNT_UTILS.FP_COLS,
387 P_FP_COLS_SRC_REC_WP IN PA_FP_GEN_AMOUNT_UTILS.FP_COLS,
388 P_FP_COLS_TGT_REC IN PA_FP_GEN_AMOUNT_UTILS.FP_COLS,
389 P_TASK_ID_TAB IN PA_PLSQL_DATATYPES.IdTabTyp,
390 P_RES_LIST_MEMBER_ID_TAB IN PA_PLSQL_DATATYPES.IdTabTyp,
391 P_ETC_SOURCE_CODE_TAB IN PA_PLSQL_DATATYPES.Char30TabTyp,
392 P_WP_STRUCTURE_VERSION_ID IN PA_PROJ_ELEM_VER_STRUCTURE.ELEMENT_VERSION_ID%TYPE,
393 P_ACTUALS_THRU_DATE IN PA_PERIODS_ALL.END_DATE%TYPE,
394 P_PLANNING_OPTIONS_FLAG IN VARCHAR2,
395 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
396 X_MSG_COUNT OUT NOCOPY NUMBER,
397 X_MSG_DATA OUT NOCOPY VARCHAR2)
398 IS
399 l_module_name VARCHAR2(200) := 'pa.plsql.PA_FP_GEN_FCST_AMT_PUB4.GEN_ETC_BDGT_COMPLETE_AMTS_BLK';
400
401 l_structure_type VARCHAR2(30):= null;
402 l_structure_status VARCHAR2(30):= null;
403 l_structure_status_flag VARCHAR2(1):= null;
404 l_wp_structure_version_id NUMBER;
405 lx_percent_complete NUMBER;
406 l_percent_complete NUMBER;
407
408 l_rate_based_flag VARCHAR2(1);
409 l_currency_flag VARCHAR2(30);
410 l_currency_count_flag VARCHAR2(1);
411 l_pc_currency_code pa_projects_all.project_currency_code%type;
412 l_pfc_currency_code pa_projects_all.project_currency_code%type;
413 l_rev_gen_method VARCHAR2(3);
414
415 l_target_version_type pa_budget_versions.version_type%type;
416 l_source_version_type pa_budget_versions.version_type%type; /* Added for IPM */
417 l_tot_currency_code_tab PA_PLSQL_DATATYPES.Char30TabTyp;
418 l_tot_quantity_tab PA_PLSQL_DATATYPES.NumTabTyp;
419 l_tot_raw_cost_tab PA_PLSQL_DATATYPES.NumTabTyp;
420 l_tot_brdn_cost_tab PA_PLSQL_DATATYPES.NumTabTyp;
421 l_tot_revenue_tab PA_PLSQL_DATATYPES.NumTabTyp;
422
423 l_etc_quantity_tab PA_PLSQL_DATATYPES.NumTabTyp;
424
425 /*For average rates*/
426 l_pc_rate_quantity NUMBER;
427 l_pc_rate_raw_cost NUMBER;
428 l_pc_rate_brdn_cost NUMBER;
429 l_pc_rate_revenue NUMBER;
430 l_pfc_rate_raw_cost NUMBER;
431 l_pfc_rate_brdn_cost NUMBER;
432 l_pfc_rate_revenue NUMBER;
433
434 l_txn_rate_quantity NUMBER;
435 l_txn_rate_raw_cost NUMBER;
436 l_txn_rate_brdn_cost NUMBER;
437 l_txn_rate_revenue NUMBER;
438
439 l_txn_raw_cost_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
440 l_txn_brdn_cost_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
441 l_txn_revenue_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
442 l_pc_raw_cost_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
443 l_pc_brdn_cost_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
444 l_pc_revenue_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
445 l_pfc_raw_cost_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
446 l_pfc_brdn_cost_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
447 l_pfc_revenue_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
448 l_transaction_source_code VARCHAR2(30);
449
450 /*Added for Bulk insert at version level*/
451 l_blk_src_res_asg_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
452 l_blk_tgt_res_asg_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
453 l_blk_tot_currency_code_tab PA_PLSQL_DATATYPES.Char30TabTyp;
454 l_blk_etc_quantity_tab PA_PLSQL_DATATYPES.NumTabTyp;
455 l_blk_etc_txn_rcost_tab PA_PLSQL_DATATYPES.NumTabTyp;
456 l_blk_etc_txn_bcost_tab PA_PLSQL_DATATYPES.NumTabTyp;
457 l_blk_etc_txn_revenue_tab PA_PLSQL_DATATYPES.NumTabTyp;
458 l_blk_etc_pc_rcost_tab PA_PLSQL_DATATYPES.NumTabTyp;
459 l_blk_etc_pc_bcost_tab PA_PLSQL_DATATYPES.NumTabTyp;
460 l_blk_etc_pc_revenue_tab PA_PLSQL_DATATYPES.NumTabTyp;
461 l_blk_etc_pfc_rcost_tab PA_PLSQL_DATATYPES.NumTabTyp;
462 l_blk_etc_pfc_bcost_tab PA_PLSQL_DATATYPES.NumTabTyp;
463 l_blk_etc_pfc_revenue_tab PA_PLSQL_DATATYPES.NumTabTyp;
464
465 continue_loop EXCEPTION;
466 l_count NUMBER := 0;
467 l_dummy NUMBER;
468
469 l_msg_count NUMBER;
470 l_msg_data VARCHAR2(2000);
471 l_data VARCHAR2(2000);
472 l_msg_index_out NUMBER:=0;
473
474 BEGIN
475 IF p_pa_debug_mode = 'Y' THEN
476 pa_debug.set_curr_function( p_function => 'GEN_ETC_BDGT_COMPLETE_AMTS_BLK',
477 p_debug_mode=> p_pa_debug_mode);
478 END IF;
479 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
480 X_MSG_COUNT := 0;
481
482 IF P_SRC_RES_ASG_ID_TAB.count = 0 THEN
483 RETURN;
484 END IF;
485
486 FOR main_loop IN 1..P_SRC_RES_ASG_ID_TAB.count LOOP
487 BEGIN
488 l_tot_currency_code_tab.delete;
489 l_tot_quantity_tab.delete;
490 l_tot_raw_cost_tab.delete;
491 l_tot_brdn_cost_tab.delete;
492 l_tot_revenue_tab.delete;
493
494 l_txn_raw_cost_rate_tab.delete;
495 l_txn_brdn_cost_rate_tab.delete;
496 l_txn_revenue_rate_tab.delete;
497 l_pc_raw_cost_rate_tab.delete;
498 l_pc_brdn_cost_rate_tab.delete;
499 l_pc_revenue_rate_tab.delete;
500 l_pfc_raw_cost_rate_tab.delete;
501 l_pfc_brdn_cost_rate_tab.delete;
502 l_pfc_revenue_rate_tab.delete;
503
504 l_etc_quantity_tab.delete;
505
506 -- Bug 4346205: We need to initialize l_wp_structure_version_id and
507 -- l_structure_status to NULL on each main loop iteration so that
508 -- REDEFAULT_BASE_PC gives the correct percent complete for tasks
509 -- with source of Financial Plan that are called after a task with
510 -- source of Workplan has been processed.
511
512 l_wp_structure_version_id := null;
513 l_structure_status := null;
514
515 /* Get percent complete from workplan side:
516 For getting the financial percent complete,
517 we dont have to pass the structure version id.
518 It always comes from the latest published
519 financial structure version. */
520 IF P_ETC_SOURCE_CODE_TAB(main_loop) = 'FINANCIAL_PLAN' THEN
521 l_structure_type := 'FINANCIAL';
522 ELSE
523 l_structure_type := 'WORKPLAN';
524 l_wp_structure_version_id := P_WP_STRUCTURE_VERSION_ID;
525
526 l_structure_status_flag :=
527 PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Published(
528 P_FP_COLS_TGT_REC.X_PROJECT_ID,l_wp_structure_version_id);
529 IF l_structure_status_flag = 'Y' THEN
530 l_structure_status := 'PUBLISHED';
531 ELSE
532 l_structure_status := 'WORKING';
533 END IF;
534 END IF;
535
536 IF P_PA_DEBUG_MODE = 'Y' THEN
537 pa_fp_gen_amount_utils.fp_debug
538 (p_msg => 'Before calling PA_PROGRESS_UTILS.REDEFAULT_BASE_PC',
539 p_module_name => l_module_name,
540 p_log_level => 5);
541 END IF;
542 PA_PROGRESS_UTILS.REDEFAULT_BASE_PC (
543 p_Project_ID => P_FP_COLS_TGT_REC.X_PROJECT_ID,
544 p_Proj_element_id => P_TASK_ID_TAB(main_loop),
545 p_Structure_type => l_structure_type,
546 p_object_type => 'PA_TASKS',
547 p_As_Of_Date => P_ACTUALS_THRU_DATE,
548 P_STRUCTURE_VERSION_ID => l_wp_structure_version_id,
549 P_STRUCTURE_STATUS => l_structure_status,
550 p_calling_context => 'FINANCIAL_PLANNING',
551 X_base_percent_complete => lx_percent_complete,
552 x_return_status => x_return_status,
553 x_msg_count => x_msg_count,
554 x_msg_data => x_msg_data );
555 IF P_PA_DEBUG_MODE = 'Y' THEN
556 pa_fp_gen_amount_utils.fp_debug
557 (p_msg => 'After calling PA_PROGRESS_UTILS.REDEFAULT_BASE_PC,
558 return status is:'||x_return_status,
559 p_module_name => l_module_name,
560 p_log_level => 5);
561 END IF;
562 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
563 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
564 END IF;
565
566 l_percent_complete := NVL(lx_percent_complete,0)/100;
567 IF (l_percent_complete = 1) THEN
568 RAISE continue_loop;
569 END IF;
570
571 IF NVL(P_TGT_RES_ASG_ID_TAB(main_loop),-99)>0 THEN
572 SELECT rate_based_flag
573 INTO l_rate_based_flag
574 FROM pa_resource_assignments
575 WHERE resource_assignment_id = p_tgt_res_asg_id_tab(main_loop);
576 ELSE
577 l_rate_based_flag:='N';
578 END IF;
579
580 /* When generate cost based revenue version, always take PFC
581 When target version is not multi currency enabled, take PC */
582 l_currency_flag := 'TC';
583 l_rev_gen_method := nvl(P_FP_COLS_TGT_REC.x_revenue_derivation_method,PA_FP_GEN_FCST_PG_PKG.GET_REV_GEN_METHOD(P_FP_COLS_TGT_REC.x_project_id)); --Bug 5462471
584 --l_rev_gen_method := PA_FP_GEN_FCST_PG_PKG.GET_REV_GEN_METHOD(P_FP_COLS_TGT_REC.x_project_id);
585
586 IF (p_fp_cols_tgt_rec.x_version_type = 'REVENUE' and l_rev_gen_method = 'C') THEN
587 l_currency_flag := 'PFC';
588 ELSIF p_fp_cols_tgt_rec.X_PLAN_IN_MULTI_CURR_FLAG = 'N' THEN
589 l_currency_flag := 'PC';
590 END IF;
591
592 /* No matter ETC source is 'FINANCIAL_PLAN' or 'WORKPLAN_RESOURCES',
593 always get total plan amounts in PC or TC or PFC (bug fix 4102848) from financial data model.*/
594 l_pc_currency_code := p_fp_cols_tgt_rec.x_project_currency_code;
595 l_pfc_currency_code := p_fp_cols_tgt_rec.x_projfunc_currency_code;
596 SELECT /*+ INDEX(PA_FP_CALC_AMT_TMP2,PA_FP_CALC_AMT_TMP2_N2)*/
597 DECODE(l_currency_flag,
598 'PC', l_pc_currency_code,
599 'TC', txn_currency_code,
600 'PFC',l_pfc_currency_code),
601 SUM(NVL(total_plan_quantity,0)),
602 SUM(DECODE(l_currency_flag,
603 'PC',NVL(total_pc_raw_cost,0),
604 'TC',NVL(total_txn_raw_cost,0),
605 'PFC',NVL(total_pfc_raw_cost,0))),
606 SUM(DECODE(l_currency_flag,
607 'PC', NVL(total_pc_burdened_cost,0),
608 'TC', NVL(total_txn_burdened_cost,0),
609 'PFC', NVL(total_pfc_burdened_cost,0))),
610 SUM(DECODE(l_currency_flag,
611 'PC', NVL(total_pc_revenue,0),
612 'TC', NVL(total_txn_revenue,0),
613 'PFC', NVL(total_pfc_revenue,0)))
614 BULK COLLECT INTO
615 l_tot_currency_code_tab,
616 l_tot_quantity_tab,
617 l_tot_raw_cost_tab,
618 l_tot_brdn_cost_tab,
619 l_tot_revenue_tab
620 FROM PA_FP_CALC_AMT_TMP2
621 WHERE resource_assignment_id = p_src_res_asg_id_tab(main_loop)
622 AND transaction_source_code = p_etc_source_code_tab(main_loop)
623 GROUP BY DECODE(l_currency_flag, 'PC', l_pc_currency_code,
624 'TC', txn_currency_code,
625 'PFC',l_pfc_currency_code);
626
627 l_target_version_type := p_fp_cols_tgt_rec.x_version_type;
628
629 -- Get Source version tpe
630 IF P_ETC_SOURCE_CODE_TAB(main_loop) = 'FINANCIAL_PLAN' THEN
631 l_source_version_type := p_fp_cols_src_rec_fp.x_version_type;
632 ELSE -- P_ETC_SOURCE_CODE_TAB(main_loop) = 'WORKPLAN_RESOURCES'
633 l_source_version_type := p_fp_cols_src_rec_wp.x_version_type;
634 END IF;
635
636 -- IPM Change:
637 -- For non-rate-based target transactions,
638 -- if the Source is a Cost and Revenue together version,
639 -- then regardless of the Target version type:
640 -- set target quantity to source raw cost if it exists, OR
641 -- set target quantity to source revenue otherwise.
642 -- This is done to handle source planning transactions that
643 -- have only revenue amounts (without cost amounts).
644 --
645 -- For non-rate-based target transactions and other Source
646 -- version types, set target quantity to source raw cost as before.
647
648 IF l_rate_based_flag = 'N' THEN
649 IF l_source_version_type = 'ALL' THEN
650 -- Set total quantity for each Currency depending on whether
651 -- source raw cost exists (i.e. if it is a revenue-only txn).
652 FOR i IN 1..l_tot_quantity_tab.count LOOP
653 IF nvl(l_tot_raw_cost_tab(i),0) = 0 THEN
654 l_tot_quantity_tab(i) := l_tot_revenue_tab(i);
655 ELSE
656 l_tot_quantity_tab(i) := l_tot_raw_cost_tab(i);
657 END IF;
658 END LOOP;
659 ELSE
660 l_tot_quantity_tab := l_tot_raw_cost_tab;
661 END IF;
662 END IF;
663
664 /* Get total ETC quantity */
665 FOR i IN 1..l_tot_currency_code_tab.count LOOP
666 l_etc_quantity_tab(i) := l_tot_quantity_tab(i) * (1 - l_percent_complete);
667 END LOOP;
668
669 /*When not taking periodic rates, we need to calculate out the average rates
670 from the source resource assignments that are mapped to the current target
671 resource assignment.*/
672 FOR i IN 1..l_tot_currency_code_tab.count LOOP
673 SELECT /*+ INDEX(pa_fp_calc_amt_tmp2,PA_FP_CALC_AMT_TMP2_N2)*/
674 NVL(SUM(NVL(total_plan_quantity,0)),0),
675 NVL(DECODE(l_currency_flag, 'TC', SUM(NVL(total_txn_raw_cost,0)),
676 'PC', SUM(NVL(total_pc_raw_cost,0)),
677 'PFC', SUM(NVL(total_pfc_raw_cost,0))),0),
678 NVL(DECODE(l_currency_flag, 'TC', SUM(NVL(total_txn_burdened_cost,0)),
679 'PC', SUM(NVL(total_pc_burdened_cost,0)),
680 'PFC', SUM(NVL(total_pfc_burdened_cost,0))),0),
681 NVL(DECODE(l_currency_flag, 'TC', SUM(NVL(total_txn_revenue,0)),
682 'PC', SUM(NVL(total_pc_revenue,0)),
683 'PFC', SUM(NVL(total_pfc_revenue,0))),0),
684 NVL(SUM(NVL(total_pc_raw_cost,0)),0),
685 NVL(SUM(NVL(total_pc_burdened_cost,0)),0),
686 NVL(SUM(NVL(total_pc_revenue,0)),0),
687 NVL(SUM(NVL(total_pfc_raw_cost,0)),0),
688 NVL(SUM(NVL(total_pfc_burdened_cost,0)),0),
689 NVL(SUM(NVL(total_pfc_revenue,0)),0)
690 INTO l_txn_rate_quantity,
691 l_txn_rate_raw_cost,
692 l_txn_rate_brdn_cost,
693 l_txn_rate_revenue,
694 l_pc_rate_raw_cost,
695 l_pc_rate_brdn_cost,
696 l_pc_rate_revenue,
697 l_pfc_rate_raw_cost,
698 l_pfc_rate_brdn_cost,
699 l_pfc_rate_revenue
700 FROM pa_fp_calc_amt_tmp2
701 WHERE resource_assignment_id = p_src_res_asg_id_tab(main_loop)
702 AND DECODE(l_currency_flag, 'TC', txn_currency_code,
703 'PC', l_tot_currency_code_tab(i),
704 'PFC', l_tot_currency_code_tab(i)) = l_tot_currency_code_tab(i)
705 AND transaction_source_code IN ('FINANCIAL_PLAN','WORKPLAN_RESOURCES');
706
707 -- IPM Change:
708 -- For non-rate-based target transactions,
709 -- if the Source is a Cost and Revenue together version,
710 -- then regardless of the Target version type:
711 -- set rate quantity to rate raw cost if it exists, OR
712 -- set rate quantity to rate revenue otherwise.
713 -- This is done to handle source planning transactions that
714 -- have only revenue amounts (without cost amounts).
715 --
716 -- For non-rate-based target transactions and other Source
717 -- version types, set rate quantity to rate raw cost as before.
718
719 IF l_rate_based_flag = 'N' THEN
720 IF l_source_version_type = 'ALL' THEN
721 IF nvl(l_txn_rate_raw_cost,0) = 0 THEN
722 l_txn_rate_quantity := l_txn_rate_revenue;
723 ELSE
724 l_txn_rate_quantity := l_txn_rate_raw_cost;
725 END IF;
726 ELSE
727 l_txn_rate_quantity := l_txn_rate_raw_cost;
728 END IF;
729 END IF;
730
731 IF l_txn_rate_quantity <> 0 THEN
732 l_txn_raw_cost_rate_tab(i) := l_txn_rate_raw_cost
733 / l_txn_rate_quantity;
734 l_txn_brdn_cost_rate_tab(i) := l_txn_rate_brdn_cost
735 / l_txn_rate_quantity;
736 l_txn_revenue_rate_tab(i) := l_txn_rate_revenue
737 / l_txn_rate_quantity;
738 l_pc_raw_cost_rate_tab(i) := l_pc_rate_raw_cost
739 / l_txn_rate_quantity;
740 l_pc_brdn_cost_rate_tab(i) := l_pc_rate_brdn_cost
741 / l_txn_rate_quantity;
742 l_pc_revenue_rate_tab(i) := l_pc_rate_revenue
743 / l_txn_rate_quantity;
744 l_pfc_raw_cost_rate_tab(i) := l_pfc_rate_raw_cost
745 / l_txn_rate_quantity;
746 l_pfc_brdn_cost_rate_tab(i) := l_pfc_rate_brdn_cost
747 / l_txn_rate_quantity;
748 l_pfc_revenue_rate_tab(i) := l_pfc_rate_revenue
749 / l_txn_rate_quantity;
750 ELSE
751 l_txn_raw_cost_rate_tab(i) := NULL;
752 l_txn_brdn_cost_rate_tab(i) := NULL;
753 l_txn_revenue_rate_tab(i) := NULL;
754 l_pc_raw_cost_rate_tab(i) := NULL;
755 l_pc_brdn_cost_rate_tab(i) := NULL;
756 l_pc_revenue_rate_tab(i) := NULL;
757 l_pfc_raw_cost_rate_tab(i) := NULL;
758 l_pfc_brdn_cost_rate_tab(i) := NULL;
759 l_pfc_revenue_rate_tab(i) := NULL;
760 END IF;
761
762 l_count := l_count + 1;
763 l_blk_src_res_asg_id_tab(l_count) := P_SRC_RES_ASG_ID_TAB(main_loop);
764 l_blk_tgt_res_asg_id_tab(l_count) := P_TGT_RES_ASG_ID_TAB(main_loop);
765 l_blk_tot_currency_code_tab(l_count) := l_tot_currency_code_tab(i);
766 l_blk_etc_quantity_tab(l_count) := l_etc_quantity_tab(i);
767 l_blk_etc_txn_rcost_tab(l_count) := l_etc_quantity_tab(i) * l_txn_raw_cost_rate_tab(i);
768 l_blk_etc_txn_bcost_tab(l_count) := l_etc_quantity_tab(i) * l_txn_brdn_cost_rate_tab(i);
769 l_blk_etc_txn_revenue_tab(l_count) := l_etc_quantity_tab(i) * l_txn_revenue_rate_tab(i);
770 l_blk_etc_pc_rcost_tab(l_count) := l_etc_quantity_tab(i) * l_pc_raw_cost_rate_tab(i);
771 l_blk_etc_pc_bcost_tab(l_count) := l_etc_quantity_tab(i) * l_pc_brdn_cost_rate_tab(i);
772 l_blk_etc_pc_revenue_tab(l_count) := l_etc_quantity_tab(i) * l_pc_revenue_rate_tab(i);
773 l_blk_etc_pfc_rcost_tab(l_count) := l_etc_quantity_tab(i) * l_pfc_raw_cost_rate_tab(i);
774 l_blk_etc_pfc_bcost_tab(l_count) := l_etc_quantity_tab(i) * l_pfc_brdn_cost_rate_tab(i);
775 l_blk_etc_pfc_revenue_tab(l_count) := l_etc_quantity_tab(i) * l_pfc_revenue_rate_tab(i);
776 END LOOP;
777
778 EXCEPTION
779 WHEN CONTINUE_LOOP THEN
780 l_dummy := 1;
781 WHEN OTHERS THEN
782 RAISE;
783 END;
784 END LOOP; /*Main loop*/
785
786 /* If commitment is not included, record is inserted directly as
787 'ETC' record, if commitment is to be considered, record is
788 inserted as 'TOTAL_ETC' for further processing. */
789 IF P_FP_COLS_TGT_REC.X_GEN_INCL_OPEN_COMM_FLAG = 'Y' THEN
790 l_transaction_source_code := 'TOTAL_ETC';
791 ELSE
792 l_transaction_source_code := 'ETC';
793 END IF;
794
795 /* Insert total ETC amounts */
796 FORALL i IN 1..l_blk_tot_currency_code_tab.count
797 INSERT INTO PA_FP_CALC_AMT_TMP2 (
798 RESOURCE_ASSIGNMENT_ID,
799 TARGET_RES_ASG_ID,
800 ETC_CURRENCY_CODE,
801 ETC_PLAN_QUANTITY,
802 ETC_TXN_RAW_COST,
803 ETC_TXN_BURDENED_COST,
804 ETC_TXN_REVENUE,
805 ETC_PC_RAW_COST,
806 ETC_PC_BURDENED_COST,
807 ETC_PC_REVENUE,
808 ETC_PFC_RAW_COST,
809 ETC_PFC_BURDENED_COST,
810 ETC_PFC_REVENUE,
811 TRANSACTION_SOURCE_CODE )
812 VALUES (
813 l_blk_src_res_asg_id_tab(i),
814 l_blk_tgt_res_asg_id_tab(i),
815 l_blk_tot_currency_code_tab(i),
816 l_blk_etc_quantity_tab(i),
817 l_blk_etc_txn_rcost_tab(i),
818 l_blk_etc_txn_bcost_tab(i),
819 l_blk_etc_txn_revenue_tab(i),
820 l_blk_etc_pc_rcost_tab(i),
821 l_blk_etc_pc_bcost_tab(i),
822 l_blk_etc_pc_revenue_tab(i),
823 l_blk_etc_pfc_rcost_tab(i),
824 l_blk_etc_pfc_bcost_tab(i),
825 l_blk_etc_pfc_revenue_tab(i),
826 l_transaction_source_code );
827 IF P_PA_DEBUG_MODE = 'Y' THEN
828 PA_DEBUG.RESET_CURR_FUNCTION;
829 END IF;
830 EXCEPTION
831 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
832 l_msg_count := FND_MSG_PUB.count_msg;
833 IF l_msg_count = 1 THEN
834 PA_INTERFACE_UTILS_PUB.get_messages
835 ( p_encoded => FND_API.G_TRUE,
836 p_msg_index => 1,
837 p_msg_count => l_msg_count,
838 p_msg_data => l_msg_data,
839 p_data => l_data,
840 p_msg_index_out => l_msg_index_out);
841 x_msg_data := l_data;
842 x_msg_count := l_msg_count;
843 ELSE
844 x_msg_count := l_msg_count;
845 END IF;
846
847 ROLLBACK;
848 x_return_status := FND_API.G_RET_STS_ERROR;
849
850 IF P_PA_DEBUG_MODE = 'Y' THEN
851 pa_fp_gen_amount_utils.fp_debug
852 (p_msg => 'Invalid Arguments Passed',
853 p_module_name => l_module_name,
854 p_log_level => 5);
855 PA_DEBUG.RESET_CURR_FUNCTION;
856 END IF;
857 RAISE;
858 WHEN OTHERS THEN
859 rollback;
860 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
861 x_msg_count := 1;
862 x_msg_data := substr(sqlerrm,1,240);
863 -- dbms_output.put_line('error msg :'||x_msg_data);
864 FND_MSG_PUB.add_exc_msg
865 ( p_pkg_name => 'PA_FP_GEN_FCST_AMT_PUB4',
866 p_procedure_name => 'GEN_ETC_BDGT_COMPLETE_AMTS_BLK',
867 p_error_text => substr(sqlerrm,1,240));
868
869 IF P_PA_DEBUG_MODE = 'Y' THEN
870 pa_fp_gen_amount_utils.fp_debug
871 (p_msg => 'Unexpected Error'||substr(sqlerrm, 1, 240),
872 p_module_name => l_module_name,
873 p_log_level => 5);
874 PA_DEBUG.RESET_CURR_FUNCTION;
875 END IF;
876 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
877 END GET_ETC_BDGT_COMPLETE_AMTS_BLK;
878
879 END PA_FP_GEN_FCST_AMT_PUB4;