DBA Data[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;