DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_FP_CALC_UTILS

Source


1 PACKAGE BODY PA_FP_CALC_UTILS AS
2 --$Header: PAFPCL1B.pls 120.20.12010000.11 2009/01/28 07:39:38 amehrotr ship $
3 
4     g_module_name VARCHAR2(100) := 'pa.plsql.PA_FP_CALC_UTILS';
5     g_stage          Varchar2(1000);
6     P_PA_DEBUG_MODE varchar2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
7     g_LAST_UPDATE_DATE  Date  := SYSDATE;
8     g_LAST_UPDATED_BY   Number:= fnd_global.user_id;
9     g_CREATION_DATE Date  := SYSDATE;
10     g_CREATED_BY        Number:= fnd_global.user_id;
11     g_LAST_UPDATE_LOGIN   Number:= fnd_global.login_id;
12     g_rollup_required_flag   Varchar2(10) := 'Y';
13     g_budget_version_id      Number;
14     g_budget_version_type    Varchar2(100);
15     g_budget_version_name    Varchar2(250);
16     g_etc_start_date     Date;
17     g_wp_version_flag        Varchar2(10);
18     g_project_name           pa_projects_all.segment1%type;
19     g_project_id             Number;
20     g_ciid                   Number;
21     g_Plan_Class_Type        Varchar2(50);
22     g_project_currency_code  Varchar2(50);
23     g_projfunc_currency_code  Varchar2(50);
24     g_refresh_rates_flag     Varchar2(10);
25     g_refresh_conv_rates_flag Varchar2(10);
26     g_mass_adjust_flag    Varchar2(10);
27     g_source_context          Varchar2(100);
28     g_apply_progress_flag     Varchar2(10);
29     g_baseline_funding_flag   Varchar2(10);
30     g_approved_revenue_flag   Varchar2(10);
31     g_calling_module          Varchar2(100);
32 
33 	g_time_phase_changed_flag   Varchar2(1) := 'N'; /* Bug fix:4613444 */
34 	g_wp_cost_changed_flag      Varchar2(1) := 'N';
35 
36     g_RsAtrb_RaId_tab       pa_plsql_datatypes.NumTabTyp;
37         g_RsAtrb_TxnCur_tab     pa_plsql_datatypes.Char50TabTyp;
38 
39     g_Rspd_RaId_tab         pa_plsql_datatypes.NumTabTyp;
40         g_Rspd_TxnCur_tab       pa_plsql_datatypes.Char50TabTyp;
41         g_Rspd_Pjcur_tab        pa_plsql_datatypes.Char50TabTyp;
42         g_Rspd_pjf_cur_tab      pa_plsql_datatypes.Char50TabTyp;
43         g_Rspd_SdShrk_Flg_tab       pa_plsql_datatypes.Char1TabTyp;
44         g_Rspd_EdShrk_Flg_tab       pa_plsql_datatypes.Char1TabTyp;
45         g_Rspd_SD_old_tab       pa_plsql_datatypes.DateTabTyp;
46         g_Rspd_SD_new_tab       pa_plsql_datatypes.DateTabTyp;
47         g_Rspd_ED_old_tab       pa_plsql_datatypes.DateTabTyp;
48         g_Rspd_ED_new_tab       pa_plsql_datatypes.DateTabTyp;
49 
50     /* cursor to fetch the period details for the given budget version */
51         CURSOR periodDetails(p_budget_version_id Number) IS
52         SELECT gsb.period_set_name              period_set_name
53                 ,gsb.accounted_period_type      accounted_period_type
54                 ,pia.pa_period_type             pa_period_type
55                 ,pbv.version_type               version_type
56                 ,decode(pbv.version_type,
57                         'COST',ppfo.cost_time_phased_code,
58                         'REVENUE',ppfo.revenue_time_phased_code,
59                          ppfo.all_time_phased_code) time_phased_code
60          FROM gl_sets_of_books          gsb
61                 ,pa_implementations_all pia
62                 ,pa_projects_all        ppa
63                 ,pa_budget_versions     pbv
64                 ,pa_proj_fp_options     ppfo
65         WHERE ppa.project_id        = pbv.project_id
66         AND pbv.budget_version_id = ppfo.fin_plan_version_id
67         /* MOAC changes: AND nvl(ppa.org_id,-99)   = nvl(pia.org_id,-99) */
68 	AND  ppa.org_id = pia.org_id
69         AND gsb.set_of_books_id   = pia.set_of_books_id
70         AND pbv.budget_version_id = p_budget_version_id;
71         perdRec         periodDetails%ROWTYPE;
72 
73 
74     /* curosr to select the version level details */
75     CURSOR cur_bvDetails(p_budget_version_id Number) IS
76     SELECT decode(nvl(bv.wp_version_flag,'N'),'Y',NVL(pfo.track_workplan_costs_flag,'N'),'Y') track_workplan_costs_flag
77           ,bv.version_type
78           ,bv.resource_list_id
79           ,bv.approved_rev_plan_type_flag
80           ,nvl(pfo.plan_in_multi_curr_flag,'N') plan_in_multi_curr_flag
81           ,bv.etc_start_date
82           ,nvl(bv.wp_version_flag,'N') wp_version_flag
83           ,decode(bv.version_type,
84                   'COST',NVL(pfo.cost_time_phased_code,'N'),
85                   'REVENUE',NVL(pfo.revenue_time_phased_code,'N'),
86                   NVL(pfo.all_time_phased_code,'N')) time_phased_code
87       ,pp.segment1  project_name
88       ,pp.project_currency_code
89       ,pp.projfunc_currency_code
90       ,bv.version_name
91       ,NVL(pp.baseline_funding_flag,'N') baseline_funding_flag
92         ,bv.project_id
93         ,bv.ci_id ciId
94         ,decode(fpt.plan_class_code,'BUDGET'
95             ,decode(bv.wp_version_flag,'Y','WORKPLAN',fpt.plan_class_code),fpt.plan_class_code) Plan_Class_Type
96         FROM pa_proj_fp_options pfo
97             ,pa_budget_versions bv
98         ,pa_projects_all pp
99         ,pa_fin_plan_types_b fpt
100         WHERE pfo.fin_plan_version_id = bv.budget_version_id
101         AND bv.project_id = pp.project_id
102         AND bv.budget_version_id = p_budget_version_id
103         AND  fpt.fin_plan_type_id = pfo.fin_plan_type_id;
104     bvDetailsRec    cur_bvDetails%ROWTYPE;
105 
106 /**
107 procedure calc_log(p_msg  varchar2) IS
108 
109         pragma autonomous_transaction ;
110 BEGIN
111         --dbms_output.put_line(p_msg);
112         --IF P_PA_DEBUG_MODE = 'Y' Then
113             NULL;
114             INSERT INTO PA_FP_CALCULATE_LOG
115                 (SESSIONID
116                 ,SEQ_NUMBER
117                 ,LOG_MESSAGE)
118             VALUES
119                 (userenv('sessionid')
120                 ,HR.PAY_US_GARN_FEE_RULES_S.nextval
121                 ,substr(P_MSG,1,240)
122                 );
123         --END IF;
124         COMMIT;
125 
126 end calc_log;
127 **/
128 procedure PRINT_MSG(P_MSG  VARCHAR2) is
129 
130 BEGIN
131         --calc_log(P_MSG);
132     --dbms_output.put_line(P_MSG);
133         IF P_PA_DEBUG_MODE = 'Y' Then
134             pa_debug.g_err_stage := substr('LOG:'||p_msg,1,240);
135             PA_DEBUG.write
136                 (x_Module       => g_module_name
137                 ,x_Msg          => pa_debug.g_err_stage
138                 ,x_Log_Level    => 3);
139         END IF;
140         Return;
141 END PRINT_MSG;
142 
143 PROCEDURE Init_plsqlTabs IS
144 
145 BEGIN
146     g_RsAtrb_RaId_tab.delete;
147         g_RsAtrb_TxnCur_tab.delete;
148 
149         g_Rspd_RaId_tab.delete;
150         g_Rspd_TxnCur_tab.delete;
151         g_Rspd_Pjcur_tab.delete;
152         g_Rspd_pjf_cur_tab.delete;
153         g_Rspd_SdShrk_Flg_tab.delete;
154         g_Rspd_EdShrk_Flg_tab.delete;
155         g_Rspd_SD_old_tab.delete;
156         g_Rspd_SD_new_tab.delete;
157         g_Rspd_ED_old_tab.delete;
158         g_Rspd_ED_new_tab.delete;
159 END;
160 FUNCTION IsResMultiCurrency(p_resAsgnId  Number
161             ,p_budget_version_id  Number) RETURN varchar2 IS
162 
163     CURSOR cur_check IS
164     SELECT 'Y'
165     FROM dual
166     WHERE EXISTS ( select null
167             from pa_budget_lines bl
168             where bl.budget_version_id = p_budget_version_id
169             and   bl.resource_assignment_id = p_resAsgnId
170             GROUP BY bl.resource_assignment_id
171             HAVING COUNT(*) > 1
172              );
173 
174     l_exists_flag  Varchar2(1);
175 BEGIN
176     OPEN cur_check;
177     FETCH cur_check INTO l_exists_flag;
178     CLOSE cur_check;
179 
180     RETURN NVL(l_exists_flag,'N');
181 
182 END IsResMultiCurrency;
183 
184 /* bug fix:5726773 */
185  	 /* This API gets the sum of budget line quantity for the given resource assignment id and txn currency
186  	  * combo. This API is used to check whether user try to change amounts only when budget lines exists which makes
187  	  * total sum of quantity is zero. This causes the ORA error:divide-by-zero error
188  	  */
189  	 PROCEDURE get_bl_sum
190  	                 (p_budget_version_id Number
191  	                 ,p_ra_id Number
192  	                 ,p_txn_cur_code Varchar2
193  	                 ,p_source_context  varchar2 default 'RESOURCE_ASSIGNMENT'
194  	                 ,p_start_date date
195  	                 ,p_end_date   date
196  	                 ,x_bl_qty_sum  OUT NOCOPY NUMBER ) IS
197 
198  	     /* bug fix:5726773: Added for supporting neg or zero quantity spread */
199 
200  	     Cursor  cur_asgn_bl_sumchk IS
201  	     SELECT /*+ INDEX(BL PA_BUDGET_LINES_U1) */
202  	         sum(bl.quantity)  bl_sum_quantity
203  	         ,sum(bl.init_quantity) bl_sum_act_quantity
204  	     FroM pa_budget_lines bl
205  	     where bl.resource_assignment_id = p_ra_id
206  	     and bl.txn_currency_code = p_txn_cur_code
207  	     and bl.budget_version_id = p_budget_version_id;
208 
209 
210  	     Cursor  cur_periodic_bl_sumchk IS
211  	     SELECT /*+ INDEX(BL PA_BUDGET_LINES_U1) */
212  	         sum(bl.quantity) bl_sum_quantity
213  	         ,sum(bl.init_quantity) bl_sum_act_quantity
214  	     FroM pa_budget_lines bl
215  	     where bl.resource_assignment_id = p_ra_id
216  	     and bl.txn_currency_code = p_txn_cur_code
217  	     and bl.budget_version_id = p_budget_version_id
218  	     and bl.start_date between p_start_date and p_end_date;
219 
220  	         l_bl_act_sum   Number;
221 
222  	 BEGIN
223  	         x_bl_qty_sum := NULL;
224  	         l_bl_act_sum := NULL;
225 
226  	         If p_source_context = 'BUDGET_LINE' then
227  	                 OPEN cur_periodic_bl_sumchk;
228  	                 FETCH cur_periodic_bl_sumchk INTO x_bl_qty_sum,l_bl_act_sum;
229  	                 CLOSE cur_periodic_bl_sumchk;
230  	         Else
231  	                 OPEN cur_asgn_bl_sumchk;
232  	                 FETCH cur_asgn_bl_sumchk INTO x_bl_qty_sum,l_bl_act_sum;
233  	                 CLOSE cur_asgn_bl_sumchk;
234  	         End If;
235  	         /* Note: nvl should not be added to x_bl_qty_sum, the idea is to check the
236  	          * budget line quantity sum which makes zero */
237  	         x_bl_qty_sum := x_bl_qty_sum - nvl(l_bl_act_sum,0);
238 
239  	 END get_bl_sum;
240 
241 /* Throw an error If budget lines having zero qty and actuals, these lines corrupted budget lines
242  * getting created through the AMG apis and budget generation process. Just abort the process
243 */
244 PROCEDURE Check_ZeroQty_Bls
245                 ( p_budget_version_id  IN NUMBER
246                  ,x_return_status    OUT NOCOPY VARCHAR2
247                 ) IS
248 
249     CURSOR cur_CorruptedBls IS
250     SELECT tmp.resource_assignment_id
251           ,rl.alias resource_name
252           ,tmp.txn_currency_code
253     FROM  pa_fp_spread_calc_tmp tmp
254          ,pa_resource_assignments ra
255          ,pa_resource_list_members rl
256     WHERE tmp.budget_version_id = p_budget_version_id
257     AND   ra.resource_assignment_id = tmp.resource_assignment_id
258     AND   rl.resource_list_member_id = ra.resource_list_member_id
259     AND EXISTS (SELECT NULL
260             FROM pa_budget_lines bl
261                 WHERE  bl.resource_assignment_id = tmp.resource_assignment_id
262             AND  bl.txn_currency_code = tmp.txn_currency_code
263             /* Bug fix: 4294902 :Check zero quantity only for the open periods */
264                 AND   NVL(g_etc_start_date,bl.start_date) BETWEEN bl.start_date and bl.end_date
265                 AND  ((NVL(bl.quantity,0)       = 0
266                   AND (NVL(bl.txn_raw_cost,0)   <> 0
267                 OR NVL(bl.txn_burdened_cost,0)<> 0
268                 OR NVL(bl.txn_revenue,0)    <> 0
269                 OR NVL(bl.init_quantity,0)  <> 0 )
270               )
271             OR
272                     (NVL(bl.init_quantity,0)    = 0
273                          AND (NVL(bl.txn_init_raw_cost,0)   <> 0
274                              OR NVL(bl.txn_init_burdened_cost,0) <> 0
275                              OR NVL(bl.txn_init_revenue,0)  <> 0)
276                         ))
277          );
278 
279     /* This cursor picks all the resource assignments where budget line end date is less than start date */
280     /* Bug fix:4440255 changes will provide the following xplain plan
281      * EXPLAIN PLAN IS:
282      * ================
283      *1:SELECT STATEMENT   :(cost=22,rows=1)
284      * 2:NESTED LOOPS   :(cost=22,rows=1)
285          *  3:NESTED LOOPS   :(cost=21,rows=1)
286          *   4:HASH JOIN SEMI  :(cost=20,rows=1)
287          *    5:TABLE ACCESS BY INDEX ROWID PA_FP_SPREAD_CALC_TMP :(cost=6,rows=82)
288          *      6:INDEX RANGE SCAN PA_FP_SPREAD_CALC_TMP_N2 :(cost=2,rows=33)
289          *    5:TABLE ACCESS BY INDEX ROWID PA_BUDGET_LINES :(cost=13,rows=8)
290          *      6:INDEX RANGE SCAN PA_BUDGET_LINES_N3 :(cost=2,rows=1)
291          *   4:TABLE ACCESS BY INDEX ROWID PA_RESOURCE_ASSIGNMENTS :(cost=1,rows=1)
292          *    5:INDEX UNIQUE SCAN PA_RESOURCE_ASSIGNMENTS_U1 :(cost=,rows=1)
293          *  3:TABLE ACCESS BY INDEX ROWID PA_RESOURCE_LIST_MEMBERS :(cost=1,rows=1)
294          *   4:INDEX UNIQUE SCAN PA_RESOURCE_LIST_MEMBERS_U1 :(cost=,rows=1)
295      **/
296     CURSOR cur_blDatesCheck IS
297     SELECT tmp.resource_assignment_id
298               ,rl.alias resource_name
299           ,tmp.txn_currency_code
300         FROM  pa_fp_spread_calc_tmp tmp
301              ,pa_resource_assignments ra
302              ,pa_resource_list_members rl
303         WHERE tmp.budget_version_id = p_budget_version_id
304         AND   ra.resource_assignment_id = tmp.resource_assignment_id
305         AND   rl.resource_list_member_id = ra.resource_list_member_id
306         AND EXISTS (SELECT /*+ NO_UNNEST INDEX (BL,PA_BUDGET_LINES_U1) */ NULL  -- Bug#4728472
307                     FROM pa_budget_lines bl
308                     WHERE  bl.resource_assignment_id = tmp.resource_assignment_id
309                     AND  bl.txn_currency_code = tmp.txn_currency_code
310             AND  bl.end_date < bl.start_date
311             /* Bug:4440255 : added the following conditions reduces the FTS on pa_budget_lines and cost will reduce from 50 to 22 */
312             AND bl.budget_version_id = tmp.budget_version_id
313             /* end of bug fix:4440255 */
314            );
315 BEGIN
316 
317     x_return_status := 'S';
318     If P_PA_DEBUG_MODE = 'Y' Then
319     	print_msg('Entered Check_ZeroQty_Bls API');
320     End If;
321     /* cache the period details info */
322         perdRec := NULL;
323         OPEN periodDetails(p_budget_version_id);
324         FETCH periodDetails INTO perdRec;
325         CLOSE periodDetails;
326 
327     /* Bug fix: 4296019: As discussed with Ramesh, Mani ,Sakthi and sanjay, removing this check as a short term solution
328          * This corruption needs to be avoided, otherwise data corruption will be carried forward
329     --print_msg('Check for Quantity corruption');
330     FOR i IN  cur_CorruptedBls LOOP
331                 x_return_status := 'E';
332         PA_UTILS.ADD_MESSAGE
333                  (p_app_short_name => 'PA'
334                  ,p_msg_name       => 'PA_FP_ZERO_QTY_BL_CORRUPTED'
335                  ,p_token1         => 'BUDGET_VERSION_NAME'
336                  ,p_value1         =>  g_budget_version_name
337                  ,p_token2         => 'RESOURCE_NAME'
338                  ,p_value2         => i.resource_name
339                  ,p_token3         => 'RESOURCE_ASSIGNMENT'
340                  ,p_value3         => i.resource_assignment_id
341          ,p_token4         => 'TXN_CURRENCY_CODE'
342          ,p_value4         => i.txn_currency_code
343          ,p_token5         => 'Error Message'
344          ,p_value5         => 'Budget Lines Corrupted: Lines with zero/Null quantity exists'
345                  );
346     END LOOP;
347     * End of bug fix: 4296019 **/
348 
349     IF P_PA_DEBUG_MODE = 'Y' Then
350     print_msg('Check for Dates corruption');
351     End If;
352     FOR i IN  cur_blDatesCheck LOOP
353                 x_return_status := 'E';
354                 PA_UTILS.ADD_MESSAGE
355                  (p_app_short_name => 'PA'
356                  ,p_msg_name       => 'PA_FP_BL_DATES_CORRUPTED'
357                  ,p_token1         => 'BUDGET_VERSION_NAME'
358                  ,p_value1         =>  g_budget_version_name
359                  ,p_token2         => 'RESOURCE_NAME'
360                  ,p_value2         => i.resource_name
361                  ,p_token3         => 'RESOURCE_ASSIGNMENT'
362                  ,p_value3         => i.resource_assignment_id
363          ,p_token4         => 'TXN_CURRENCY_CODE'
364                  ,p_value4         => i.txn_currency_code
365                  ,p_token5         => 'Error Message'
366                  ,p_value5         => 'Budget Lines Corrupted: End date is prior to start date'
367                  );
368         END LOOP;
369 
370 EXCEPTION
371         WHEN OTHERS THEN
372                 x_return_status := 'U';
373                 print_msg('Failed in Check_ZeroQty_ActualBlsAPI'||sqlcode||sqlerrm);
374                  fnd_msg_pub.add_exc_msg
375                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
376                  ,p_procedure_name => 'Check_ZeroQty_Bls');
377                 RAISE;
378 END Check_ZeroQty_Bls;
379 
380 /* Bug fix:5309529: This is new API created to pre-process the IN params
381  * table. This avoids additional loop through plsql arrays just to extend the plsql table
382  * Logic:
383  * if param passes value is fnd_api.g_miss_num then user intentionally entered null value from UI or AMG
384  * so null out the param.  if param value passed is null or param is not passed at all,
385  * then copy the db value from budget lines to the param so that user has made no change.
386  * if param value is passed, then retain the param value.
387  */
388 PROCEDURE pre_process_param_values
389 	(p_budget_version_id 		IN NUMBER
390 	,p_resource_assignment		IN NUMBER
391 	,p_txn_currency_code		IN VARCHAR2
392 	,p_txn_currency_override	IN VARCHAR2
393 	,p_bdgt_line_sDate		IN DATE
394 	,p_bdgt_line_eDate		IN DATE
395 	,p_delete_bl_flag               IN VARCHAR2
396 	,p_Qty_miss_num_flag		IN VARCHAR2
397 	,p_bl_quantity			IN NUMBER
398 	,p_bl_init_quantity		IN NUMBER
399 	,x_total_quantity		IN OUT NOCOPY NUMBER
400 	,p_Rw_miss_num_flag		IN VARCHAR2
401 	,p_bl_txn_raw_cost		IN NUMBER
402 	,p_bl_txn_init_raw_cost		IN NUMBER
403 	,x_total_raw_cost		IN OUT NOCOPY NUMBER
404 	,p_Br_miss_num_flag		IN VARCHAR2
405 	,p_bl_txn_burdened_cost		IN NUMBER
406 	,p_bl_txn_init_burdened_cost	IN NUMBER
407 	,x_total_burdened_cost		IN OUT NOCOPY NUMBER
408 	,p_Rv_miss_num_flag		IN VARCHAR2
409 	,p_bl_txn_revenue		IN NUMBER
410 	,p_bl_txn_init_revenue		IN NUMBER
411 	,x_total_revenue		IN OUT NOCOPY NUMBER
412 	,p_cost_rt_miss_num_flag	IN VARCHAR2
413 	,p_bl_etc_cost_rate		IN NUMBER
414 	,p_bl_etc_cost_rate_override	IN NUMBER
415 	,x_raw_cost_rate		IN OUT NOCOPY NUMBER
416 	,x_rw_cost_rate_override	IN OUT NOCOPY NUMBER
417 	,p_burd_rt_miss_num_flag	IN VARCHAR2
418 	,p_bl_etc_burden_rate		IN NUMBER
419 	,p_bl_etc_burden_rate_override	IN NUMBER
420 	,x_b_cost_rate			IN OUT NOCOPY NUMBER
421 	,x_b_cost_rate_override		IN OUT NOCOPY NUMBER
422 	,p_bill_rt_miss_num_flag	IN VARCHAR2
423 	,p_bl_etc_bill_rate		IN NUMBER
424 	,p_bl_etc_bill_rate_override	IN NUMBER
425 	,x_bill_rate			IN OUT NOCOPY NUMBER
426 	,x_bill_rate_override		IN OUT NOCOPY NUMBER
427 	,x_return_status		OUT NOCOPY VARCHAR2
428 	) IS
429 
430 	l_message_name		varchar2(100);
431 	l_invalid_exception	EXCEPTION;
432 BEGIN
433 
434 	x_return_status := 'S';
435         IF p_resource_assignment is NULL OR p_txn_currency_code is NULL Then
436         	--print_msg(to_char(l_stage)||' ERROR Resource assignment or currency NOT passed');
437         	pa_utils.add_message
438         	( p_app_short_name => 'PA',
439         	p_msg_name       => 'PA_FP_CALC_RA_BL_REQ',
440         	p_token1         => 'BUDGET_VERSION_ID',
441         	p_value1         =>  p_budget_version_id,
442         	p_token2         => 'PROJECT_ID',
443         	p_value2         =>  g_project_id);
444         	x_return_status := 'E';
445 		Raise l_invalid_exception;
446         END IF;
447 
448         IF  g_source_context  = 'BUDGET_LINE' THEN
449         	IF p_bdgt_line_sDate is NULL OR p_bdgt_line_eDate is NULL Then
450         	pa_utils.add_message
451         	( p_app_short_name => 'PA'
452         	,p_msg_name       => 'PA_FP_CALC_BL_DATES_REQ'
453         	,p_token1         => 'BUDGET_VERSION_ID'
454         	,p_value1         =>  p_budget_version_id
455         	,p_token2         => 'PROJECT_ID'
456         	,p_value2         =>  g_project_id
457         	,p_token3         =>  'RESOURCE_ASSIGNMENT'
458         	,p_value3         =>  p_resource_assignment
459         	,p_token4         =>  'TXN_CURRENCY'
460         	,p_value4         =>  p_txn_currency_code
461         	);
462         	x_return_status := 'E';
463 		Raise l_invalid_exception;
464         	END IF;
465         END IF;
466 
467 	/* Start of Bug fix:5726773: printing all input parameters  */
468  	         If p_pa_debug_mode = 'Y' Then
469 
470  	             print_msg('p_resource_assignment          => '||p_resource_assignment        );
471  	             print_msg('p_txn_currency_code            => '||p_txn_currency_code );
472  	             print_msg('p_txn_currency_override        => '||p_txn_currency_override     );
473  	             print_msg('p_bdgt_line_sDate              => '||p_bdgt_line_sDate   );
474  	             print_msg('p_bdgt_line_eDate              => '||p_bdgt_line_eDate   );
475  	             print_msg('p_delete_bl_flag               => '||p_delete_bl_flag    );
476  	             print_msg('p_Qty_miss_num_flag            => '||p_Qty_miss_num_flag );
477  	             print_msg('p_bl_quantity                  => '||p_bl_quantity       );
478  	             print_msg('p_bl_init_quantity             => '||p_bl_init_quantity  );
479  	             print_msg('x_total_quantity               => '||x_total_quantity    );
480  	             print_msg('p_Rw_miss_num_flag             => '||p_Rw_miss_num_flag  );
481  	             print_msg('p_bl_txn_raw_cost              => '||p_bl_txn_raw_cost   );
482  	             print_msg('p_bl_txn_init_raw_cost         => '||p_bl_txn_init_raw_cost      );
483  	             print_msg('x_total_raw_cost               => '||x_total_raw_cost    );
484  	             print_msg('p_Br_miss_num_flag             => '||p_Br_miss_num_flag  );
485  	             print_msg('p_bl_txn_burdened_cost         => '||p_bl_txn_burdened_cost      );
486  	             print_msg('p_bl_txn_init_burdened_cost    => '||p_bl_txn_init_burdened_cost );
487  	             print_msg('x_total_burdened_cost          => '||x_total_burdened_cost       );
488  	             print_msg('p_Rv_miss_num_flag             => '||p_Rv_miss_num_flag  );
489  	             print_msg('p_bl_txn_revenue               => '||p_bl_txn_revenue    );
490  	             print_msg('p_bl_txn_init_revenue          => '||p_bl_txn_init_revenue       );
491  	             print_msg('x_total_revenue                => '||x_total_revenue     );
492  	             print_msg('p_cost_rt_miss_num_flag        => '||p_cost_rt_miss_num_flag     );
493  	             print_msg('p_bl_etc_cost_rate             => '||p_bl_etc_cost_rate  );
494  	             print_msg('p_bl_etc_cost_rate_override    => '||p_bl_etc_cost_rate_override );
495  	             print_msg('x_raw_cost_rate                => '||x_raw_cost_rate     );
496  	             print_msg('x_rw_cost_rate_override        => '||x_rw_cost_rate_override     );
497  	             print_msg('p_burd_rt_miss_num_flag        => '||p_burd_rt_miss_num_flag     );
498  	             print_msg('p_bl_etc_burden_rate           => '||p_bl_etc_burden_rate        );
499  	             print_msg('p_bl_etc_burden_rate_override  => '||p_bl_etc_burden_rate_override       );
500  	             print_msg('x_b_cost_rate                  => '||x_b_cost_rate       );
501  	             print_msg('x_b_cost_rate_override         => '||x_b_cost_rate_override      );
502  	             print_msg('p_bill_rt_miss_num_flag        => '||p_bill_rt_miss_num_flag     );
503  	             print_msg('p_bl_etc_bill_rate             => '||p_bl_etc_bill_rate  );
504  	             print_msg('p_bl_etc_bill_rate_override    => '||p_bl_etc_bill_rate_override );
505  	             print_msg('x_bill_rate                    => '||x_bill_rate );
506  	             print_msg('x_bill_rate_override               => '||x_bill_rate_override        );
507 
508  	          End If;
509  	/* End of Bug fix:5726773 */
510 
511         /* Now open up the budget line cursor and follow the logic
512          * if param passes value is fnd_api.g_miss_num then user purposely entered null value from UI or AMG
513          * so null out the param.  if param passed value is null, the copy the value from budget lines
514 	 * so that no change is made from top if param passed value is not null, then retain the param value.
515         */
516 
517 	/* start of quantity param processing */
518         IF NVL(p_Qty_miss_num_flag,'N') = 'Y' Then
519         	x_total_quantity := NULL;
520         Elsif x_total_quantity is NULL Then
521            	IF g_calling_module <> 'FORECAST_GENERATION' Then  /* Bug fix:4211776 */
522                 	x_total_quantity := p_bl_quantity;
523 	   	Else
524 			x_total_quantity := nvl(x_total_quantity,0) + NVL(p_bl_init_quantity,0);
525            	End If;
526 	Else
527 	   	IF g_calling_module <> 'FORECAST_GENERATION' Then  /* Bug fix:4211776 */
528                 	NULL; -- retain parameter value
529            	Else
530                 	x_total_quantity := nvl(x_total_quantity,0) + NVL(p_bl_init_quantity,0);
531            	End If;
532 	End If;
533 
534 	/* start of raw cost param processing */
535 	IF NVL(p_Rw_miss_num_flag,'N') = 'Y' Then
536                   x_total_raw_cost := 0;
537         Elsif x_total_raw_cost is NULL Then
538         	If p_txn_currency_override is NULL Then
539         	   IF g_calling_module <> 'FORECAST_GENERATION' Then /* Bug fix:4211776 */
540         		x_total_raw_cost := p_bl_txn_raw_cost;
541 		   Else
542 			x_total_raw_cost := NVL(x_total_raw_cost,0) + nvl(p_bl_txn_init_raw_cost,0);
543 		   End If;
544         	END IF;
545 	Else
546 		If p_txn_currency_override is NULL Then
547                    IF g_calling_module <> 'FORECAST_GENERATION' Then /* Bug fix:4211776 */
548                         NULL;  -- retain the param value
549                    Else
550                         x_total_raw_cost := NVL(x_total_raw_cost,0) + nvl(p_bl_txn_init_raw_cost,0);
551                    End If;
552                 END IF;
553         End If;
554 
555 	/* start of burden cost param processing */
556         IF NVL(p_Br_miss_num_flag,'N') = 'Y' Then
557             x_total_burdened_cost := 0;
558         Elsif x_total_burdened_cost is NULL Then
559         	If p_txn_currency_override is NULL  Then
560         	   IF g_calling_module <> 'FORECAST_GENERATION' Then /* Bug fix:4211776 */
561         		x_total_burdened_cost := p_bl_txn_burdened_cost;
562 		   Else
563 			x_total_burdened_cost := NVL(x_total_burdened_cost,0)+NVL(p_bl_txn_init_burdened_cost,0);
564 		   End If;
565         	End If;
566 	Else
567         	If p_txn_currency_override is NULL  Then
568                    IF g_calling_module <> 'FORECAST_GENERATION' Then /* Bug fix:4211776 */
569                         NULL; -- retain the param value
570                    Else
571                         x_total_burdened_cost := NVL(x_total_burdened_cost,0)+NVL(p_bl_txn_init_burdened_cost,0);
572                    End If;
573         	End If;
574 	End If;
575 
576 	/* start of revenue param processing */
577         IF NVL(p_Rv_miss_num_flag,'N') = 'Y' Then
578         	x_total_revenue := 0;
579         Elsif x_total_revenue is NULL Then
580         	If p_txn_currency_override is NULL Then
581         	   IF g_calling_module <> 'FORECAST_GENERATION' Then /* Bug fix:4211776 */
582         		x_total_revenue := p_bl_txn_revenue;
583 		   Else
584 			x_total_revenue := NVL(x_total_revenue,0)+NVL(p_bl_txn_init_revenue,0);
585         	   End If;
586         	End If;
587 	Else
588                 If p_txn_currency_override is NULL Then
589                    IF g_calling_module <> 'FORECAST_GENERATION' Then /* Bug fix:4211776 */
590                         NULL; --retain param value
591                    Else
592                         x_total_revenue := NVL(x_total_revenue,0)+NVL(p_bl_txn_init_revenue,0);
593                    End If;
594                 End If;
595         End If;
596 
597 	/* start of cost rate param processing */
598 	IF NVL(p_cost_rt_miss_num_flag,'N') = 'Y' Then
599 		x_raw_cost_rate := NULL;
600 	Elsif x_raw_cost_rate is NULL Then
601 		If p_txn_currency_override is NULL Then
602         	  IF g_calling_module <> 'FORECAST_GENERATION' Then /* Bug fix:4211776 */
603         	    /* Bug fix:4232221 x_raw_cost_rate := NVL(blrec.etc_cost_rate,blrec.txn_standard_cost_rate); */
604         	    x_raw_cost_rate := p_bl_etc_cost_rate;
605         	  End If;
606         	Elsif (p_txn_currency_override is NOT NULL ) Then
607         	--print_msg('Cost rate is passed but override cur exists so null out this and keep override cost rate');
608         	    x_raw_cost_rate := NULL;
609         	End IF;
610 	Else
611                 If p_txn_currency_override is NULL Then
612                     NULL; -- retain param value
613                 Elsif (p_txn_currency_override is NOT NULL ) Then
614                 --print_msg('Cost rate is passed but override cur exists so null out this and keep override cost rate');
615                     x_raw_cost_rate := NULL;
616                 End IF;
617 	End If;
618 
619 	/* start of cost rate override param processing */
620 	IF NVL(p_cost_rt_miss_num_flag,'N') = 'Y' Then
621                 x_rw_cost_rate_override := NULL;
622         Elsif x_rw_cost_rate_override is NULL Then
623 		x_rw_cost_rate_override := NULL;
624 	Else
625 		NULL; -- retain param value
626         End IF;
627 
628 	/* start of burden rate param processing */
629 	If NVL(p_burd_rt_miss_num_flag,'N') = 'Y' Then
630                 x_b_cost_rate := NULL;
631         Elsif x_b_cost_rate is NULL Then
632         	If p_txn_currency_override is NULL Then
633         	   IF g_calling_module <> 'FORECAST_GENERATION' Then /* Bug fix:4211776 */
634         	   /* Bug fix:4232221 x_b_cost_rate := NVL(blrec.etc_burden_rate,blrec.burden_cost_rate); */
635         		x_b_cost_rate :=  p_bl_etc_burden_rate;
636         	   End If;
637 		Elsif (p_txn_currency_override is NOT NULL ) Then
638 			x_b_cost_rate := NULL;
639         	End If;
640 	Else
641 		If p_txn_currency_override is NULL Then
642 			NULL; -- retain param value
643         	ElsIf (p_txn_currency_override is NOT NULL ) Then
644         		print_msg('Burd Cost rate is passed but override cur exists so null out this rate');
645 			x_b_cost_rate := NULL;
646 		End If;
647 	End If;
648 
649 	/* start of burden rate override param processing */
650 	If NVL(p_burd_rt_miss_num_flag,'N') = 'Y' Then
651             	x_b_cost_rate_override := NULL;
652         Elsif x_b_cost_rate_override is NULL Then
653 		x_b_cost_rate_override := NULL;
654 	Else
655 		NULL; -- retain the param value
656         End If;
657 
658 	/* start of bill rate param processing */
659 	IF NVL(p_bill_rt_miss_num_flag,'N') = 'Y' Then
660                	x_bill_rate := NULL;
661 
662        	Elsif x_bill_rate is NULL Then
663        		If p_txn_currency_override is NULL Then
664        		  IF g_calling_module <> 'FORECAST_GENERATION' Then /* Bug fix:4211776 */
665        		   /* Bug fix:4232221 x_bill_rate := NVL(blrec.etc_bill_rate,blrec.txn_standard_bill_rate);*/
666        			x_bill_rate := p_bl_etc_bill_rate;
667        		  End If;
668        		Elsif (p_txn_currency_override is NOT NULL ) Then
669        		  	print_msg('Bill rate is passed but override cur exists so null out this rate');
670        			x_bill_rate := NULL;
671 		End If;
672 	Else
673 		If p_txn_currency_override is NULL Then
674 			NULL; --retain param value
675 		Elsif (p_txn_currency_override is NOT NULL ) Then
676 			x_bill_rate := NULL;
677 		End If;
678 	End If;
679 
680 
681 	/* start of bill rate override param processing */
682 	IF NVL(p_bill_rt_miss_num_flag,'N') = 'Y' Then
683             	x_bill_rate_override := NULL;
684 	Elsif x_bill_rate_override is NULL Then
685 		x_bill_rate_override := NULL;
686 	Else
687 		NULL; -- retain the param value
688         End IF;
689 
690      	/* BUG FIX:4211776 FORECAST GENERATION PROCESS CREATEs BUDGET LINES WITH ACTUALS = PLAN
691 	*PRIOR TO ETC START DATE. Then PASSES ETC VALUES to CALC API
692 	*(but calc api ALWAYS EXPECTS PLAN QTY/AMOUNTS FROM ALL FLOWS).
693 	*IN ORDER TO ACCOMODATE THE FORECAST GENERATION FLOW, ADD BACK THE ACTUAL FROM BL TO PARAM VALUES TO
694 	*ARRIVE AT THE PLAN QTY / AMOUNTS
695 	*/
696         IF g_calling_module = 'FORECAST_GENERATION' Then
697 		If x_total_quantity = 0 then x_total_quantity := NULL; End if;
698 		If x_total_raw_cost = 0 then x_total_raw_cost := NULL; end if;
699 		If x_total_burdened_cost = 0 then x_total_burdened_cost := NULL; end if;
700 		If x_total_revenue = 0 then x_total_revenue := NULL; end if;
701         END IF;
702 
703       	/* Bug fix:4343985 : Logic:
704        	* 1.Always ensure that etc qty is +ve or zero
705        	* 2.Plan quantity must be > or = Actual quantity
706        	* 3.Plan quantity should not be zero when acutals exists
707        	*/
708        	/* Bug fix:5726773: The following condition is removed for enhancement support
709 	 * negative quantity spread
710 	 * IF NVL(p_delete_bl_flag,'N') <> 'Y' Then --{
711 	 * END IF; --}
712 	 *****End of bug fix:5726773 */
713 	--print_msg('End of  pre_process_param_values API');
714 EXCEPTION
715 	WHEN l_invalid_exception Then
716 		print_msg('exception occured inpre_process_param_values['||sqlcode||sqlerrm);
717                 x_return_status := 'E';
718 
719 	WHEN OTHERS THEN
720 		print_msg('exception occured inpre_process_param_values['||sqlcode||sqlerrm);
721 		x_return_status := 'E';
722 		Raise;
723 END pre_process_param_values;
724 
725 /* Bug fix:5309529: This API extends the IN param araays and bulk inserts into spread calc tmp
726  * table. This avoids looping through plsql arrays just to extend the plsql table
727  * Did performance test on pjperf instance. if the number of records in plsql table increases
728  * the time gain is almost half of the original time.
729  * Example:
730  * Num#RAs      Old Code     New Code
731  * --------------------------------------
732  *  1698        1.52 sec     1.01 sec
733  *  8574       13.23 sec     9.25 sec
734  *  10206      15.69 sec    10.99 sec
735  */
736 PROCEDURE insert_calcTmp_records
737 	  ( x_resource_assignment_tab       IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
738                 ,x_delete_budget_lines_tab       IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
739                 ,x_spread_amts_flag_tab          IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
740                 ,x_txn_currency_code_tab         IN  OUT NOCOPY SYSTEM.pa_varchar2_15_tbl_type
741                 ,x_txn_currency_override_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_15_tbl_type
742                 ,x_total_qty_tab                 IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
743                 ,x_addl_qty_tab                  IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
744                 ,x_total_raw_cost_tab            IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
745                 ,x_addl_raw_cost_tab             IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
746                 ,x_total_burdened_cost_tab       IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
747                 ,x_addl_burdened_cost_tab        IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
748                 ,x_total_revenue_tab             IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
749                 ,x_addl_revenue_tab              IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
750                 ,x_raw_cost_rate_tab             IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
751                 ,x_rw_cost_rate_override_tab     IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
752                 ,x_b_cost_rate_tab               IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
753                 ,x_b_cost_rate_override_tab      IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
754                 ,x_bill_rate_tab                 IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
755                 ,x_bill_rate_override_tab        IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
756                 ,x_line_start_date_tab           IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
757                 ,x_line_end_date_tab             IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
758                 ,x_apply_progress_flag_tab       IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
759                 ,x_spread_curve_id_old_tab       IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
760                 ,x_spread_curve_id_new_tab       IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
761                 ,x_sp_fixed_date_old_tab         IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
762                 ,x_sp_fixed_date_new_tab         IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
763                 ,x_plan_start_date_old_tab       IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
764                 ,x_plan_start_date_new_tab       IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
765                 ,x_plan_end_date_old_tab         IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
766 		,x_plan_end_date_new_tab         IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
767                 ,x_re_spread_flag_tab            IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
768                 ,x_sp_curve_change_flag_tab      IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
769                 ,x_plan_dates_change_flag_tab    IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
770                 ,x_spfix_date_flag_tab           IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
771                 ,x_mfc_cost_change_flag_tab      IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
772                 ,x_mfc_cost_type_id_old_tab      IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
773                 ,x_mfc_cost_type_id_new_tab      IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
774         	,x_rlm_id_change_flag_tab        IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
775         	,x_plan_sdate_shrunk_flag_tab    IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
776                 ,x_plan_edate_shrunk_flag_tab    IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
777                 ,x_mfc_cost_refresh_flag_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
778         	,x_ra_in_multi_cur_flag_tab      IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
779         	,x_quantity_changed_flag_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
780                 ,x_raw_cost_changed_flag_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
781                 ,x_cost_rate_changed_flag_tab    IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
782                 ,x_burden_cost_changed_flag_tab  IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
783                 ,x_burden_rate_changed_flag_tab  IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
784                 ,x_rev_changed_flag_tab          IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
785                 ,x_bill_rate_changed_flag_tab    IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
786                 ,x_multcur_plan_start_date_tab   IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
787                 ,x_multcur_plan_end_date_tab     IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
788                 ,x_fp_task_billable_flag_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
789                 ,x_cost_rt_miss_num_flag_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
790                 ,x_burd_rt_miss_num_flag_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
791                 ,x_bill_rt_miss_num_flag_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
792                 ,x_Qty_miss_num_flag_tab         IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
793                 ,x_Rw_miss_num_flag_tab          IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
794                 ,x_Br_miss_num_flag_tab          IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
795                 ,x_Rv_miss_num_flag_tab          IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
796                 ,x_rev_only_entry_flag_tab       IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
797                 ,x_return_status                 OUT NOCOPY VARCHAR2
798                 ,x_msg_data                      OUT NOCOPY varchar2
799                 ) IS
800 
801 	CURSOR cur_validate IS
802 	SELECT tmp.resource_assignment_id
803 		,tmp.txn_currency_code
804 		,tmp.start_date
805 	FROM pa_fp_spread_calc_tmp tmp
806 	WHERE tmp.budget_version_id = g_budget_version_id
807 	AND   (tmp.start_date is NULL OR tmp.end_date is NULL);
808 
809 	l_miss_num 	Number := fnd_api.g_miss_num;
810 	l_miss_char	Varchar2(1000) := fnd_api.g_miss_char;
811 	l_miss_date     Date := fnd_api.g_miss_date;
812 	l_numRows       Integer;
813 
814 
815 BEGIN
816 	x_return_status := 'S';
817 	x_msg_data := NULL;
818 	l_numRows := x_resource_assignment_tab.count;
819 	If l_numRows > 0 Then --{
820 		 --extend the tables where plsql tabs are not passed
821 	   	If x_delete_budget_lines_tab.count = 0 Then
822 			x_delete_budget_lines_tab.extend(l_numRows);
823 		End If;
824                 If x_spread_amts_flag_tab.count = 0 Then
825 			x_spread_amts_flag_tab.extend(l_numRows);
826                 End If;
827                 If x_txn_currency_code_tab.count = 0 Then
828 			x_txn_currency_code_tab.extend(l_numRows);
829                 End If;
830                 If x_txn_currency_override_tab.count = 0 Then
831 			x_txn_currency_override_tab.extend(l_numRows);
832                 End If;
833                 If x_total_qty_tab.count = 0 Then
834 			x_total_qty_tab.extend(l_numRows);
835                 End If;
836                 If x_addl_qty_tab.count = 0 Then
837 			x_addl_qty_tab.extend(l_numRows);
838                 End If;
839                 If x_total_raw_cost_tab.count = 0 Then
840 			x_total_raw_cost_tab.extend(l_numRows);
841                 End If;
842                 If x_addl_raw_cost_tab.count = 0 Then
843 			x_addl_raw_cost_tab.extend(l_numRows);
844                 End If;
845                 If x_total_burdened_cost_tab.count = 0 Then
846 			x_total_burdened_cost_tab.extend(l_numRows);
847                 End If;
848                 If x_addl_burdened_cost_tab.count = 0 Then
849 			x_addl_burdened_cost_tab.extend(l_numRows);
850                 End If;
851                 If x_total_revenue_tab.count = 0 Then
852 			x_total_revenue_tab.extend(l_numRows);
853                 End If;
854                 If x_addl_revenue_tab.count = 0 Then
855 			x_addl_revenue_tab.extend(l_numRows);
856                 End If;
857                 If x_raw_cost_rate_tab.count = 0 Then
858 			x_raw_cost_rate_tab.extend(l_numRows);
859                 End If;
860                 If x_rw_cost_rate_override_tab.count = 0 Then
861 			x_rw_cost_rate_override_tab.extend(l_numRows);
862                 End If;
863                 If x_b_cost_rate_tab.count = 0 Then
864 			x_b_cost_rate_tab.extend(l_numRows);
865                 End If;
866                 If x_b_cost_rate_override_tab.count = 0 Then
867 			x_b_cost_rate_override_tab.extend(l_numRows);
868                 End If;
869                 If x_bill_rate_tab.count = 0 Then
870 			x_bill_rate_tab.extend(l_numRows);
871                 End If;
872                 If x_bill_rate_override_tab.count = 0 Then
873 			x_bill_rate_override_tab.extend(l_numRows);
874                 End If;
875                 If x_line_start_date_tab.count = 0 Then
876 			x_line_start_date_tab.extend(l_numRows);
877                 End If;
878                 If x_line_end_date_tab.count = 0 Then
879 			x_line_end_date_tab.extend(l_numRows);
880                 End If;
881                 If x_apply_progress_flag_tab.count = 0 Then
882 			x_apply_progress_flag_tab.extend(l_numRows);
883                 End If;
884                 If x_spread_curve_id_old_tab.count = 0 Then
885 			x_spread_curve_id_old_tab.extend(l_numRows);
886                 End If;
887                 If x_spread_curve_id_new_tab.count = 0 Then
888 			x_spread_curve_id_new_tab.extend(l_numRows);
889                 End If;
890                 If x_sp_fixed_date_old_tab.count = 0 Then
891 			x_sp_fixed_date_old_tab.extend(l_numRows);
892                 End If;
893                 If x_sp_fixed_date_new_tab.count = 0 Then
894 			x_sp_fixed_date_new_tab.extend(l_numRows);
895                 End If;
896                 If x_plan_start_date_old_tab.count = 0 Then
897 			x_plan_start_date_old_tab.extend(l_numRows);
898                 End If;
899                 If x_plan_start_date_new_tab.count = 0 Then
900 			x_plan_start_date_new_tab.extend(l_numRows);
901                 End If;
902                 If x_plan_end_date_old_tab.count = 0 Then
903 			x_plan_end_date_old_tab.extend(l_numRows);
904                 End If;
905                 If x_plan_end_date_new_tab.count = 0 Then
906 			x_plan_end_date_new_tab.extend(l_numRows);
907                 End If;
908                 If x_re_spread_flag_tab.count = 0 Then
909 			x_re_spread_flag_tab.extend(l_numRows);
910                 End If;
911                 If x_sp_curve_change_flag_tab.count = 0 Then
912 			x_sp_curve_change_flag_tab.extend(l_numRows);
913                 End If;
914                 If x_plan_dates_change_flag_tab.count = 0 Then
915 			x_plan_dates_change_flag_tab.extend(l_numRows);
916                 End If;
917                 If x_spfix_date_flag_tab.count = 0 Then
918 			x_spfix_date_flag_tab.extend(l_numRows);
919                 End If;
920 		If x_mfc_cost_change_flag_tab.count = 0 Then
921 			x_mfc_cost_change_flag_tab.extend(l_numRows);
922                 End If;
923                 If x_mfc_cost_type_id_old_tab.count = 0 Then
924 			x_mfc_cost_type_id_old_tab.extend(l_numRows);
925                 End If;
926                 If x_mfc_cost_type_id_new_tab.count = 0 Then
927 			x_mfc_cost_type_id_new_tab.extend(l_numRows);
928                 End If;
929                 If x_rlm_id_change_flag_tab.count = 0 Then
930 			x_rlm_id_change_flag_tab.extend(l_numRows);
931                 End If;
932                 If x_fp_task_billable_flag_tab.count = 0 Then
933 			x_fp_task_billable_flag_tab.extend(l_numRows);
934                 End If;
935                 If x_cost_rt_miss_num_flag_tab.count = 0 Then
936 			x_cost_rt_miss_num_flag_tab.extend(l_numRows);
937                 End If;
938                 If x_burd_rt_miss_num_flag_tab.count = 0 Then
939 			x_burd_rt_miss_num_flag_tab.extend(l_numRows);
940                 End If;
941                 If x_bill_rt_miss_num_flag_tab.count = 0 Then
942 			x_bill_rt_miss_num_flag_tab.extend(l_numRows);
943                 End If;
944                 If x_Qty_miss_num_flag_tab.count = 0 Then
945 			x_Qty_miss_num_flag_tab.extend(l_numRows);
946                 End If;
947                 If x_Rw_miss_num_flag_tab.count = 0 Then
948 			x_Rw_miss_num_flag_tab.extend(l_numRows);
949                 End If;
950                 If x_Br_miss_num_flag_tab.count = 0 Then
951 			x_Br_miss_num_flag_tab.extend(l_numRows);
952                 End If;
953                 If x_Rv_miss_num_flag_tab.count = 0 Then
954 			x_Rv_miss_num_flag_tab.extend(l_numRows);
955                 End If;
956 	   If p_pa_debug_mode = 'Y' Then
957 	   print_msg(' Inserting records into spread calc tmp table');
958 	   End If;
959            FORALL i IN x_resource_assignment_tab.FIRST .. x_resource_assignment_tab.LAST
960                 INSERT INTO pa_fp_spread_calc_tmp
961                         (RESOURCE_ASSIGNMENT_ID --resource_assignment_id
962                          ,DELETE_BL_FLAG          --delete_budget_lines_flag
963                          ,SPREAD_AMTS_FLAG      --spread_amts_flag
964                          ,TXN_CURRENCY_CODE     --txn_currency_code
965                          ,TXN_CURR_CODE_OVERRIDE --txn_currency_override
966                          ,QUANTITY              --total_qty
967                          ,SYSTEM_REFERENCE_NUM1 --addl_qty
968                          ,TXN_RAW_COST          --total_raw_cost
969                          ,SYSTEM_REFERENCE_NUM2 --addl_raw_cost
970                          ,TXN_BURDENED_COST     --total_burdened_cost
971                          ,SYSTEM_REFERENCE_NUM3 --addl_burdened_cost
972                          ,TXN_REVENUE           --total_revenue
973                          ,SYSTEM_REFERENCE_NUM4 --addl_revenue
974                          ,COST_RATE             --raw_cost_rate
975                          ,COST_RATE_OVERRIDE    --rw_cost_rate_override
976                          ,BURDEN_COST_RATE      --b_cost_rate
977                          ,BURDEN_COST_RATE_OVERRIDE --b_cost_rate_override
978                          ,BILL_RATE             --bill_rate
979                          ,BILL_RATE_OVERRIDE    --bill_rate_override
980                          ,START_DATE            --line_start_date
981                          ,END_DATE              --line_end_date
982                          ,APPLY_PROGRESS_FLAG   --apply_progress_flag
983                          ,BUDGET_VERSION_ID     --budget_version_id
984                          ,OLD_SPREAD_CURVE_ID   --x_spread_curve_id_old_tab
985                          ,NEW_SPREAD_CURVE_ID   --x_spread_curve_id_new_tab
986                          ,OLD_SP_FIX_DATE       --x_sp_fixed_date_old_tab
987                          ,NEW_SP_FIX_DATE       --x_sp_fixed_date_new_tab
988                          ,OLD_PLAN_START_DATE   --x_plan_start_date_old_tab
989                          ,NEW_PLAN_START_DATE   --x_plan_start_date_new_tab
990                          ,OLD_PLAN_END_DATE     --x_plan_end_date_old_tab
991                          ,NEW_PLAN_END_DATE     --x_plan_end_date_new_tab
992                          ,RE_SPREAD_AMTS_FLAG   --x_re_spread_flag_tab
993                          ,SP_CURVE_CHANGE_FLAG  --x_sp_curve_change_flag_tab
994                          ,PLAN_DATES_CHANGE_FLAG --x_plan_dates_change_flag_tab
995                          ,SP_FIX_DATE_CHANGE_FLAG --x_spfix_date_flag_tab
996                          ,MFC_COST_CHANGE_FLAG   --x_mfc_cost_change_flag_tab
997                          ,OLD_MFC_COST_TYPE_ID   --x_mfc_cost_type_id_old_tab
998                          ,NEW_MFC_COST_TYPE_ID   --x_mfc_cost_type_id_new_tab
999              		 ,ETC_START_DATE
1000              		,PROJECT_CURRENCY_CODE
1001              		,PROJFUNC_CURRENCY_CODE
1002              		,RLM_ID_CHANGE_FLAG
1003              		,BUDGET_VERSION_TYPE
1004             		,BILLABLE_FLAG
1005 			,COST_RATE_G_MISS_NUM_FLAG
1006 			,BURDEN_RATE_G_MISS_NUM_FLAG
1007 			,BILL_RATE_G_MISS_NUM_FLAG
1008 			,QUANTITY_G_MISS_NUM_FLAG
1009 			,RAW_COST_G_MISS_NUM_FLAG
1010 			,BURDEN_COST_G_MISS_NUM_FLAG
1011 			,REVENUE_G_MISS_NUM_FLAG
1012                         )
1013                 VALUES (
1014                         x_resource_assignment_tab(i)
1015 			,decode(NVL(g_wp_cost_changed_flag,'N'),'Y',decode(NVL(g_time_phase_changed_flag,'N'),'Y','Y')
1016                          ,decode(NVL(g_time_phase_changed_flag,'N'),'Y','Y'
1017 			  ,decode(g_source_context,'RESOURCE_ASSIGNMENT','N'
1018 			   ,decode(x_delete_budget_lines_tab(i),l_miss_char,'N',NULL,'N'
1019 			    ,x_delete_budget_lines_tab(i)))))
1020                         ,decode(NVL(g_wp_cost_changed_flag,'N'),'Y'
1021  	                  ,decode(NVL(g_time_phase_changed_flag,'N'),'Y','Y','N')
1022  	                    ,decode(NVL(g_time_phase_changed_flag,'N'),'Y','Y','N'))
1023                         ,x_txn_currency_code_tab(i)
1024                         ,decode(x_txn_currency_override_tab(i),l_miss_char,NULL
1025 			  ,NULL,NULL,x_txn_currency_code_tab(i),NULL,x_txn_currency_override_tab(i))
1026                         ,decode(x_total_qty_tab(i),l_miss_num,NULL,x_total_qty_tab(i))
1027                         ,NULL  --x_addl_qty_tab(i)
1028                         ,decode(x_total_raw_cost_tab(i),l_miss_num,0,x_total_raw_cost_tab(i))
1029                         ,NULL --x_addl_raw_cost_tab(i)
1030                         ,decode(x_total_burdened_cost_tab(i),l_miss_num,0,x_total_burdened_cost_tab(i))
1031                         ,NULL  --x_addl_burdened_cost_tab(i)
1032                         ,decode(x_total_revenue_tab(i),l_miss_num,0,x_total_revenue_tab(i))
1033                         ,NULL  --x_addl_revenue_tab(i)
1034                         ,decode(x_raw_cost_rate_tab(i),l_miss_num,NULL,x_raw_cost_rate_tab(i))
1035                         ,decode(x_rw_cost_rate_override_tab(i),l_miss_num,NULL,x_rw_cost_rate_override_tab(i))
1036                         ,decode(x_b_cost_rate_tab(i),l_miss_num,NULL,x_b_cost_rate_tab(i))
1037                         ,decode(x_b_cost_rate_override_tab(i),l_miss_num,NULL,x_b_cost_rate_override_tab(i))
1038                         ,decode(x_bill_rate_tab(i),l_miss_num,NULL,x_bill_rate_tab(i))
1039                         ,decode(x_bill_rate_override_tab(i),l_miss_num,NULL,x_bill_rate_override_tab(i))
1040                         ,decode(g_source_context,'RESOURCE_ASSIGNMENT',NULL
1041 				,decode(x_line_start_date_tab(i),l_miss_date,NULL,x_line_start_date_tab(i)))
1042                         ,decode(g_source_context,'RESOURCE_ASSIGNMENT',NULL
1043 				,decode(x_line_end_date_tab(i),l_miss_date,NULL,x_line_end_date_tab(i)))
1044                         ,NVL(g_apply_progress_flag,'N') --x_apply_progress_flag_tab(i)
1045                         ,g_budget_version_id
1046                         ,decode(x_spread_curve_id_old_tab(i),l_miss_num,NULL,x_spread_curve_id_old_tab(i))
1047                         ,decode(x_spread_curve_id_new_tab(i),l_miss_num,NULL,x_spread_curve_id_new_tab(i))
1048                         ,decode(x_sp_fixed_date_old_tab(i),l_miss_date,NULL,x_sp_fixed_date_old_tab(i))
1049                         ,decode(x_sp_fixed_date_new_tab(i),l_miss_date,NULL,x_sp_fixed_date_new_tab(i))
1050                         ,decode(x_plan_start_date_old_tab(i),l_miss_date,NULL,x_plan_start_date_old_tab(i))
1051                         ,decode(x_plan_start_date_new_tab(i),l_miss_date,NULL,x_plan_start_date_new_tab(i))
1052                         ,decode(x_plan_end_date_old_tab(i),l_miss_date,NULL,x_plan_end_date_old_tab(i))
1053                         ,decode(x_plan_end_date_new_tab(i),l_miss_date,NULL,x_plan_end_date_new_tab(i))
1054                         ,decode(x_re_spread_flag_tab(i),l_miss_char,'N',NULL,'N',x_re_spread_flag_tab(i))
1055                         ,decode(x_sp_curve_change_flag_tab(i),l_miss_char,'N',NULL,'N'
1056 					,x_sp_curve_change_flag_tab(i))
1057                         ,decode(x_plan_dates_change_flag_tab(i),l_miss_char,'N',NULL,'N'
1058 					,x_plan_dates_change_flag_tab(i))
1059                         ,decode(x_spfix_date_flag_tab(i),l_miss_char,'N',NULL,'N'
1060 					,x_spfix_date_flag_tab(i))
1061                         ,decode(x_mfc_cost_change_flag_tab(i),l_miss_char,'N',NULL,'N'
1062 					,x_mfc_cost_change_flag_tab(i))
1063                         ,decode(x_mfc_cost_type_id_old_tab(i),l_miss_num,NULL,x_mfc_cost_type_id_old_tab(i))
1064                         ,decode(x_mfc_cost_type_id_new_tab(i),l_miss_num,NULL,x_mfc_cost_type_id_new_tab(i))
1065             		,g_etc_start_date
1066             		,g_project_currency_code
1067             		,g_projfunc_currency_code
1068             		,decode(x_rlm_id_change_flag_tab(i),l_miss_char,'N',NULL,'N'
1069 				,x_rlm_id_change_flag_tab(i))
1070             		,g_budget_version_type
1071             		,decode(x_fp_task_billable_flag_tab(i),l_miss_char,'D',NULL,'D'
1072 				,x_fp_task_billable_flag_tab(i))
1073 			,decode(x_rw_cost_rate_override_tab(i),l_miss_num,'Y'
1074 				,decode(x_raw_cost_rate_tab(i),l_miss_num,'Y'
1075 				,'N')) -- x_cost_rt_miss_num_flag_tab(i)
1076                 	,decode(x_b_cost_rate_tab(i),l_miss_num,'Y'
1077                           	,decode(x_b_cost_rate_override_tab(i),l_miss_num,'Y'
1078 				,'N'))  --x_burd_rt_miss_num_flag_tab(i)
1079                 	,decode(x_bill_rate_tab(i),l_miss_num,'Y'
1080                         	,decode(x_bill_rate_override_tab(i),l_miss_num,'Y'
1081 				,'N')) --x_bill_rt_miss_num_flag_tab(i)
1082 			,decode(x_total_qty_tab(i),l_miss_num,'Y','N') --x_Qty_miss_num_flag_tab(i)
1083                 	,decode(x_total_raw_cost_tab(i),l_miss_num,'Y','N') --x_Rw_miss_num_flag_tab(i)
1084                 	,decode(x_total_burdened_cost_tab(i),l_miss_num,'Y','N') --x_Br_miss_num_flag_tab(i)
1085                 	,decode(x_total_revenue_tab(i),l_miss_num,'Y','N') --x_Rv_miss_num_flag_tab(i)
1086               );
1087 	     If p_pa_debug_mode = 'Y' Then
1088 		print_msg('Number of records inserted into calctemp:['||sql%rowcount||']');
1089 	     End If;
1090 	     IF  g_source_context  = 'BUDGET_LINE' THEN
1091                 FOR i IN cur_validate LOOP
1092                 pa_utils.add_message
1093                 ( p_app_short_name => 'PA'
1094                 ,p_msg_name       => 'PA_FP_CALC_BL_DATES_REQ'
1095                 ,p_token1         => 'BUDGET_VERSION_ID'
1096                 ,p_value1         =>  g_budget_version_id
1097                 ,p_token2         => 'PROJECT_ID'
1098                 ,p_value2         =>  g_project_id
1099                 ,p_token3         =>  'RESOURCE_ASSIGNMENT'
1100                 ,p_value3         =>  i.resource_assignment_id
1101                 ,p_token4         =>  'TXN_CURRENCY'
1102                 ,p_value4         =>  i.txn_currency_code
1103                 );
1104                 x_return_status := 'E';
1105 		END LOOP;
1106        	     END IF;
1107 
1108 	     /* bug fix: 5726773: For non-timephased records generation process passes 0,0,1 as rate
1109  	      * overrides to indicate that revenue only records exists in cost and revenue together version
1110  	      * During generation process calculate skips most of the code which resets rates, rate baseflags, qty
1111  	      * etc.. In order to minimize the code impact, the following code is added
1112  	      * Logic: populate the fp_gen_rate_tmp table (which is populated by generation process in all flows
1113  	      * except for non-timephase) with rate overrides as 0,0,1 and use these rates to stamp on the budget
1114  	      * lines before calling rate api. so that rate api donot derive rawcost and burden cost
1115  	      */
1116  	                 IF g_calling_module in ('BUDGET_GENERATION','FORECAST_GENERATION')
1117  	                    and perdRec.time_phased_code = 'N' and g_refresh_rates_flag = 'N'
1118  	                    and g_budget_version_type = 'ALL'
1119  	                    and g_source_context = 'RESOURCE_ASSIGNMENT' Then
1120 
1121  	                         INSERT INTO pa_fp_gen_rate_tmp fptmp
1122  	                         (fptmp.target_res_asg_id
1123  	                         ,fptmp.txn_currency_code
1124  	                         ,fptmp.raw_cost_rate
1125  	                         ,fptmp.burdened_cost_rate
1126  	                         ,fptmp.revenue_bill_rate
1127  	                         )
1128  	                         SELECT tmp.resource_assignment_id
1129  	                                 ,tmp.txn_currency_code
1130  	                                 ,tmp.cost_rate_override
1131  	                                 ,tmp.burden_cost_rate_override
1132  	                                 ,tmp.bill_rate_override
1133  	                         FROM pa_fp_spread_calc_tmp tmp
1134  	                         WHERE tmp.budget_version_id = g_budget_version_id
1135  	                         AND tmp.cost_rate_override = 0
1136  	                         AND tmp.burden_cost_rate_override = 0
1137  	                         AND tmp.bill_rate_override = 1
1138  	                         AND NOT EXISTS (select null
1139  	                                         from pa_fp_gen_rate_tmp fptmp1
1140  	                                         where fptmp1.target_res_asg_id = tmp.resource_assignment_id
1141  	                                         and fptmp1.txn_currency_code = tmp.txn_currency_code
1142  	                                         );
1143  	                         print_msg('Number of records inserted into pa_fp_gen_rate_tmp['||sql%rowcount||']');
1144  	     End If;
1145 	End If; --}
1146 
1147 exception
1148 	when others then
1149 		print_msg('Exception occured in insert_calcTmp_records['||sqlerrm||sqlcode||']');
1150 		x_return_status := 'U';
1151 		raise;
1152 
1153 END insert_calcTmp_records;
1154 
1155 PROCEDURE Compare_bdgtLine_Values
1156            (p_budget_version_id             IN  Number
1157            ,p_budget_version_type           IN  Varchar2
1158            ,p_source_context                IN  pa_fp_res_assignments_tmp.source_context%TYPE
1159            ,p_apply_progress_flag           IN  Varchar2 DEFAULT 'N'
1160        ,x_return_status                 OUT NOCOPY Varchar2
1161            ,x_msg_data                      OUT NOCOPY Varchar2
1162            ) IS
1163 
1164     CURSOR cur_bl_vals IS
1165     SELECT tmp2.quantity        bl_quantity
1166                ,tmp2.txn_raw_cost   bl_txn_raw_cost
1167                ,tmp2.txn_burdened_cost  bl_txn_burdened_cost
1168                ,tmp2.txn_revenue    bl_txn_revenue
1169                ,tmp2.init_quantity  bl_init_quantity
1170                ,tmp2.txn_init_raw_cost  bl_txn_init_raw_cost
1171                ,tmp2.txn_init_burdened_cost bl_txn_init_burdened_cost
1172                ,tmp2.txn_init_revenue    bl_txn_init_revenue
1173                ,tmp2.cost_rate       bl_cost_rate
1174                ,tmp2.cost_rate_override  bl_cost_rate_override
1175                ,tmp2.burden_cost_rate    bl_burden_cost_rate
1176                ,tmp2.burden_cost_rate_override  bl_burden_cost_rate_override
1177                ,tmp2.bill_rate      bl_bill_rate
1178                ,tmp2.bill_rate_override bl_bill_rate_override
1179            ,tmp.quantity
1180                ,tmp.txn_raw_cost
1181                ,tmp.txn_burdened_cost
1182                ,tmp.txn_revenue
1183                ,tmp.cost_rate
1184                ,tmp.cost_rate_override
1185                ,tmp.burden_cost_rate
1186                ,tmp.burden_cost_rate_override
1187                ,tmp.bill_rate
1188                ,tmp.bill_rate_override
1189            ,tmp.txn_curr_code_override
1190            ,tmp.rowid
1191            ,tmp.resource_assignment_id
1192            ,tmp.txn_currency_code
1193            ,nvl(ra.rate_based_flag,'N') rate_based_flag
1194 	    /*Bug fix:  */
1195 	   ,tmp2.system_reference_num1         	bl_zero_null_quantity
1196            ,tmp2.system_reference_num2         	bl_zero_null_rawcost
1197            ,tmp2.system_reference_num3     	bl_zero_null_burdencost
1198            ,tmp2.system_reference_num4          bl_zero_null_revenue
1199 	   ,tmp2.system_reference_var1  	avg_zero_null_cost_rate
1200            ,tmp2.system_reference_var2  	avg_zero_null_burden_rate
1201            ,tmp2.system_reference_var3  	avg_zero_null_bill_rate
1202 	   ,NVL(ra.resource_rate_based_flag,'N') resource_rate_based_flag
1203 	   ,tmp2.bill_markup_percentage
1204 	   ,NVL(tmp.cost_rate_g_miss_num_flag,'N') cost_rate_g_miss_num_flag
1205 	   ,NVL(tmp.burden_rate_g_miss_num_flag,'N') burden_rate_g_miss_num_flag
1206 	   ,NVL(tmp.bill_rate_g_miss_num_flag,'N') bill_rate_g_miss_num_flag
1207 	   ,nvl(tmp.raw_cost_g_miss_num_flag,'N') raw_cost_g_miss_num_flag
1208 	   ,nvl(tmp.burden_cost_g_miss_num_flag,'N') burden_cost_g_miss_num_flag
1209 	   ,nvl(tmp.revenue_g_miss_num_flag,'N') revenue_g_miss_num_flag
1210 	   ,nvl(tmp.quantity_g_miss_num_flag,'N') quantity_g_miss_num_flag
1211 	   ,rlm.unit_of_measure resource_uom
1212 	   ,tmp.start_date
1213 	   ,tmp.end_date
1214 	   ,NVL(tmp.delete_bl_flag,'N') delete_bl_flag
1215     FROM pa_fp_spread_calc_tmp tmp
1216         ,pa_fp_spread_calc_tmp2 tmp2
1217         ,pa_resource_assignments ra
1218 	,pa_resource_list_members rlm
1219     WHERE tmp.budget_version_id = p_budget_version_id
1220     AND   ra.resource_assignment_id = tmp.resource_assignment_id
1221     AND   rlm.resource_list_member_id = ra.resource_list_member_id
1222     AND   tmp.resource_assignment_id = tmp2.resource_assignment_id
1223     AND   tmp.txn_currency_code = tmp2.txn_currency_code
1224     AND   ((p_source_context = 'BUDGET_LINE'
1225           and tmp.start_date = tmp2.start_date)
1226           OR
1227           p_source_context <> 'BUDGET_LINE'
1228          );
1229 
1230     l_cntr                  INTEGER;
1231     l_res_Asgn_Id_Tab   pa_plsql_datatypes.NumTabTyp;
1232     l_txn_cur_code_Tab  pa_plsql_datatypes.Char50TabTyp;
1233     l_Start_date_tab    pa_plsql_datatypes.DateTabTyp;
1234     l_end_date_tab      pa_plsql_datatypes.DateTabTyp;
1235     l_rowid_tab     pa_plsql_datatypes.rowIdTabTyp;
1236     l_quantity_ch_flag_tab      pa_plsql_datatypes.Char1TabTyp;
1237     l_rawCost_ch_flag_tab      pa_plsql_datatypes.Char1TabTyp;
1238     l_burdenCost_ch_flag_tab      pa_plsql_datatypes.Char1TabTyp;
1239     l_Revnue_ch_flag_tab      pa_plsql_datatypes.Char1TabTyp;
1240     l_costRt_ch_flag_tab      pa_plsql_datatypes.Char1TabTyp;
1241     l_burdRt_ch_flag_tab      pa_plsql_datatypes.Char1TabTyp;
1242     l_billRt_ch_flag_tab      pa_plsql_datatypes.Char1TabTyp;
1243 
1244     l_resource_assingment_id_tab    pa_plsql_datatypes.NumTabTyp;
1245     l_txn_currency_code_tab         pa_plsql_datatypes.Char50TabTyp;
1246     l_bl_Start_date_tab             pa_plsql_datatypes.DateTabTyp;
1247     l_bl_quantity_tab       pa_plsql_datatypes.NumTabTyp;
1248         l_bl_txn_raw_cost_tab       pa_plsql_datatypes.NumTabTyp;
1249         l_bl_txn_burden_cost_tab    pa_plsql_datatypes.NumTabTyp;
1250         l_bl_txn_revenue_tab        pa_plsql_datatypes.NumTabTyp;
1251         l_bl_init_quantity_tab      pa_plsql_datatypes.NumTabTyp;
1252         l_bl_txn_init_raw_cost_tab  pa_plsql_datatypes.NumTabTyp;
1253         l_bl_txn_init_burden_cost_tab   pa_plsql_datatypes.NumTabTyp;
1254         l_bl_txn_init_revenue_tab   pa_plsql_datatypes.NumTabTyp;
1255         l_bl_cost_rate_tab      pa_plsql_datatypes.NumTabTyp;
1256         l_bl_cost_rate_override_tab pa_plsql_datatypes.NumTabTyp;
1257         l_bl_burden_cost_rate_tab   pa_plsql_datatypes.NumTabTyp;
1258         l_bl_burden_rate_override_tab   pa_plsql_datatypes.NumTabTyp;
1259         l_bl_bill_rate_tab      pa_plsql_datatypes.NumTabTyp;
1260         l_bl_bill_rate_override_tab pa_plsql_datatypes.NumTabTyp;
1261     l_rate_based_flag_tab           pa_plsql_datatypes.Char10TabTyp;
1262     l_res_rate_based_flag_tab           pa_plsql_datatypes.Char10TabTyp;
1263 	l_bl_txn_markup_tab		pa_plsql_datatypes.NumTabTyp;
1264 	l_costRt_g_miss_num_flag_tab   pa_plsql_datatypes.Char1TabTyp;
1265         l_burdRt_g_miss_num_flag_tab   pa_plsql_datatypes.Char1TabTyp;
1266         l_revRt_g_miss_num_flag_tab    pa_plsql_datatypes.Char1TabTyp;
1267 	l_rwCost_g_miss_num_flag_tab   pa_plsql_datatypes.Char1TabTyp;
1268 	l_brdCost_g_miss_num_flag_tab   pa_plsql_datatypes.Char1TabTyp;
1269 	l_revenue_g_miss_num_flag_tab   pa_plsql_datatypes.Char1TabTyp;
1270 	l_resource_uom_tab		pa_plsql_datatypes.Char50TabTyp;
1271 
1272 	l_quantity_tab			pa_plsql_datatypes.NumTabTyp;
1273 	l_raw_cost_tab			pa_plsql_datatypes.NumTabTyp;
1274 	l_burdened_cost_tab		pa_plsql_datatypes.NumTabTyp;
1275 	l_revenue_tab			pa_plsql_datatypes.NumTabTyp;
1276 	l_raw_cost_rate_tab		pa_plsql_datatypes.NumTabTyp;
1277 	l_rw_cost_rate_override_tab	pa_plsql_datatypes.NumTabTyp;
1278 	l_b_cost_rate_tab		pa_plsql_datatypes.NumTabTyp;
1279 	l_b_cost_rate_override_tab	pa_plsql_datatypes.NumTabTyp;
1280 	l_bill_rate_tab			pa_plsql_datatypes.NumTabTyp;
1281 	l_bill_rate_override_tab	pa_plsql_datatypes.NumTabTyp;
1282 
1283 	-- Bug fix:5726773
1284  	l_negQty_Change_flag_tab        pa_plsql_datatypes.Char1TabTyp;
1285  	l_negRawCst_Change_flag_tab     pa_plsql_datatypes.Char1TabTyp;
1286  	l_neg_BurdCst_Change_flag_tab   pa_plsql_datatypes.Char1TabTyp;
1287  	l_neg_revChange_flag_tab        pa_plsql_datatypes.Char1TabTyp;
1288 
1289 	l_return_status 	Varchar2(1);
1290 	skip_record		EXCEPTION;
1291 BEGIN
1292     x_return_status := 'S';
1293     l_return_status := 'S';
1294     x_msg_data := NULL;
1295     IF P_PA_DEBUG_MODE = 'Y' Then
1296     print_msg('Entered Compare_bdgtLine_Values API');
1297     End If;
1298         DELETE FROM pa_fp_spread_calc_tmp2
1299         WHERE budget_version_id = p_budget_version_id;
1300         l_res_Asgn_Id_Tab.delete;
1301         l_txn_cur_code_Tab.delete;
1302         l_start_date_tab.delete;
1303                 l_end_date_tab.delete;
1304         l_rowid_tab.delete;
1305             l_quantity_ch_flag_tab.delete;
1306             l_rawCost_ch_flag_tab.delete;
1307             l_burdenCost_ch_flag_tab.delete;
1308             l_Revnue_ch_flag_tab.delete;
1309             l_costRt_ch_flag_tab.delete;
1310             l_burdRt_ch_flag_tab.delete;
1311             l_billRt_ch_flag_tab.delete;
1312         SELECT  tmp.resource_assignment_id
1313             ,tmp.txn_currency_code
1314             ,decode(p_source_context,'BUDGET_LINE',tmp.start_date,to_date(null))
1315             ,decode(p_source_context,'BUDGET_LINE',tmp.end_date,to_date(null))
1316         BULK COLLECT INTO
1317             l_res_Asgn_Id_Tab
1318             ,l_txn_cur_code_Tab
1319             ,l_start_date_tab
1320                         ,l_end_date_tab
1321         FROM pa_fp_spread_calc_tmp tmp
1322         WHERE tmp.budget_version_id = p_budget_version_id;
1323 
1324         IF l_res_Asgn_Id_Tab.COUNT > 0 Then  --{
1325 	   IF P_PA_DEBUG_MODE = 'Y' Then
1326            print_msg('NumOf Lines inserted['||l_res_Asgn_Id_Tab.count||']');
1327 	   End If;
1328            FORALL i IN  l_res_Asgn_Id_Tab.FIRST .. l_res_Asgn_Id_Tab.LAST
1329             INSERT INTO pa_fp_spread_calc_tmp2
1330                 (BUDGET_VERSION_ID
1331                 ,BUDGET_VERSION_TYPE
1332                 ,RESOURCE_ASSIGNMENT_ID
1333                 ,TXN_CURRENCY_CODE
1334                 ,START_DATE
1335                 ,END_DATE
1336                 )
1337             VALUES (p_budget_version_id
1338                 ,p_budget_version_type
1339                 ,l_res_Asgn_Id_Tab(i)
1340                 ,l_txn_cur_code_Tab(i)
1341                 ,l_start_date_tab(i)
1342                 ,l_end_date_tab(i)
1343                 );
1344 	 IF p_source_context = 'RESOURCE_ASSIGNMENT' Then --{
1345 	        IF P_PA_DEBUG_MODE = 'Y' Then
1346 		print_msg('Inserting records into sprdcalctmp2 for resource assignment context');
1347 		End If;
1348 		FORALL i IN l_res_Asgn_Id_Tab.FIRST .. l_res_Asgn_Id_Tab.LAST
1349 		UPDATE /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP2_N1) */ pa_fp_spread_calc_tmp2 tmp
1350             	SET ( tmp.quantity
1351                 ,tmp.txn_raw_cost
1352                 ,tmp.txn_burdened_cost
1353                 ,tmp.txn_revenue
1354                 ,tmp.init_quantity
1355                 ,tmp.txn_init_raw_cost
1356                 ,tmp.txn_init_burdened_cost
1357                 ,tmp.txn_init_revenue
1358                 ,tmp.cost_rate
1359                 ,tmp.cost_rate_override
1360                 ,tmp.burden_cost_rate
1361                 ,tmp.burden_cost_rate_override
1362                 ,tmp.bill_rate
1363                 ,tmp.bill_rate_override
1364                 ,tmp.system_reference_num1  --quantity
1365                 ,tmp.system_reference_num2  --txnRaw
1366                 ,tmp.system_reference_num3  --txnburd
1367                 ,tmp.system_reference_num4  --txnrev
1368 		,tmp.system_reference_var1  --avg_zero_null_cost_rate
1369                 ,tmp.system_reference_var2  --avg_zero_null_burden_rate
1370                 ,tmp.system_reference_var3  --avg_zero_null_bill_rate
1371 		) =
1372 		(SELECT decode(rtx.total_quantity,0,null,rtx.total_quantity) quantity
1373                 ,decode(rtx.total_txn_raw_cost,0,NULL,rtx.total_txn_raw_cost) txn_raw_cost
1374                 ,decode(rtx.total_txn_burdened_cost,0,NULL,rtx.total_txn_burdened_cost) txn_burdened_cost
1375                 ,decode(rtx.total_txn_revenue,0,NULL,rtx.total_txn_revenue) txn_revenue
1376                 ,decode(rtx.total_init_quantity,0,NULL,rtx.total_init_quantity) init_quantity
1377                 ,decode(rtx.total_txn_init_raw_cost,0,NULL,rtx.total_txn_init_raw_cost) init_raw_cost
1378                 ,decode(rtx.total_txn_init_burdened_cost,0,NULL,rtx.total_txn_init_burdened_cost) init_burdened_cost
1379                 ,decode(rtx.total_txn_init_revenue,0,NULL,rtx.total_txn_init_revenue) init_revenue
1380                 ,rtx.TXN_ETC_RAW_COST_RATE              etc_cost_rate
1381                 ,rtx.TXN_RAW_COST_RATE_OVERRIDE         etc_cost_rate_override
1382                 ,rtx.TXN_ETC_BURDEN_COST_RATE           etc_burden_rate
1383                 ,rtx.TXN_BURDEN_COST_RATE_OVERRIDE      etc_burden_rate_override
1384                 ,rtx.TXN_ETC_BILL_RATE                  etc_bill_rate
1385                 ,rtx.TXN_BILL_RATE_OVERRIDE             etc_bill_rate_override
1386                 ,rtx.total_quantity                     bl_zero_null_quantity
1387                 ,rtx.total_txn_raw_cost                 bl_zero_null_rawcost
1388                 ,rtx.total_txn_burdened_cost            bl_zero_null_burdencost
1389                 ,rtx.total_txn_revenue                  bl_zero_null_revenue
1390 	        ,rtx.TXN_RAW_COST_RATE_OVERRIDE
1391 		,rtx.TXN_BURDEN_COST_RATE_OVERRIDE
1392 		,rtx.TXN_BILL_RATE_OVERRIDE
1393         	FROM pa_resource_asgn_curr rtx
1394         	WHERE rtx.resource_assignment_id = l_res_Asgn_Id_Tab(i)
1395         	AND  rtx.txn_currency_code = l_txn_cur_code_Tab(i)
1396 		)
1397 	     WHERE tmp.resource_assignment_id = l_res_Asgn_Id_Tab(i)
1398              AND  tmp.txn_currency_code = l_txn_cur_code_Tab(i);
1399 
1400 		/* update table with txn markup percentage */
1401 		UPDATE /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP2_N1) */ pa_fp_spread_calc_tmp2 tmp
1402 		SET tmp.bill_markup_percentage = (select AVG(bl.txn_markup_percent)
1403 						  from pa_budget_lines bl
1404 						  where bl.resource_assignment_id = tmp.resource_assignment_id
1405 						  and  bl.txn_currency_code = tmp.txn_currency_code
1406 						 )
1407 		WHERE tmp.budget_version_id = p_budget_version_id
1408 		AND EXISTS ( select null
1409 			     from pa_budget_lines bl1
1410                              where bl1.resource_assignment_id = tmp.resource_assignment_id
1411                              and  bl1.txn_currency_code = tmp.txn_currency_code
1412 			   );
1413 
1414 	 ELSE
1415 	    IF P_PA_DEBUG_MODE = 'Y' Then
1416             print_msg('Updating calcTmp2 with budgetLine values');
1417 	    End If;
1418             FORALL i IN l_res_Asgn_Id_Tab.FIRST .. l_res_Asgn_Id_Tab.LAST
1419                 UPDATE  /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP2_N1) */ pa_fp_spread_calc_tmp2 tmp
1420                 SET (tmp.avg_cost_rate_override
1421                     ,tmp.avg_burden_rate_override
1422                     ,tmp.avg_bill_rate_override
1423 		    /* Bug fix:4693839 */
1424 		    ,tmp.system_reference_var1  --avg_zero_null_cost_rate
1425 		    ,tmp.system_reference_var2  --avg_zero_null_burden_rate
1426 		    ,tmp.system_reference_var3  --avg_zero_null_bill_rate
1427 		    ,tmp.bill_markup_percentage
1428 		    ) =
1429                     (SELECT /*+ INDEX(BLAVGRT PA_BUDGET_LINES_U1) */
1430 				AVG(DECODE((nvl(blavgrt.quantity,0) - nvl(blavgrt.init_quantity,0)),0
1431                                                 ,NULL,blavgrt.txn_cost_rate_override)) avg_txn_cost_rate_override
1432                                          ,AVG(DECODE((nvl(blavgrt.quantity,0) - nvl(blavgrt.init_quantity,0)),0
1433                                                 ,NULL,blavgrt.burden_cost_rate_override))   avg_burden_cost_rate_override
1434                                          ,AVG(DECODE((nvl(blavgrt.quantity,0) - nvl(blavgrt.init_quantity,0)),0
1435                                                 ,NULL,blavgrt.txn_bill_rate_override)) avg_txn_bill_rate_override
1436 				     	,AVG(NVL(blavgrt.txn_cost_rate_override,blavgrt.txn_standard_cost_rate))
1437 				    	,AVG(NVL(blavgrt.burden_cost_rate_override,blavgrt.burden_cost_rate))
1438 					,AVG(NVL(blavgrt.txn_bill_rate_override,blavgrt.txn_standard_bill_rate))
1439 					,AVG(blavgrt.txn_markup_percent)
1440                                     FROM pa_budget_lines blavgrt
1441                                     WHERE blavgrt.budget_version_id = p_budget_version_id
1442                                     AND  blavgrt.resource_assignment_id = tmp.resource_assignment_id
1443                                     AND blavgrt.txn_currency_code      = tmp.txn_currency_code
1444                                     AND ( (tmp.start_date is NULL AND tmp.end_date is NULL )
1445                                         OR
1446                                         (tmp.start_date is NOT NULL AND tmp.end_date is NOT NULL
1447                                         AND blavgrt.start_date BETWEEN tmp.start_date AND tmp.end_date))
1448                                         )
1449                 /* Perf fix: WHERE tmp.budget_version_id = p_budget_version_id to avoid N2 index */
1450                 WHERE tmp.resource_assignment_id = l_res_Asgn_Id_Tab(i)
1451                 AND   tmp.txn_currency_code = l_txn_cur_code_Tab(i)
1452                 AND   ((tmp.start_date is NOT NULL
1453                     and tmp.start_date = l_start_date_tab(i))
1454                       OR tmp.start_date is NULL
1455                       );
1456 
1457            FORALL i IN  l_res_Asgn_Id_Tab.FIRST .. l_res_Asgn_Id_Tab.LAST
1458             UPDATE /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP2_N1) */ pa_fp_spread_calc_tmp2 tmp
1459             SET (tmp.quantity
1460                 ,tmp.txn_raw_cost
1461                 ,tmp.txn_burdened_cost
1462                 ,tmp.txn_revenue
1463                 ,tmp.init_quantity
1464                 ,tmp.txn_init_raw_cost
1465                 ,tmp.txn_init_burdened_cost
1466                 ,tmp.txn_init_revenue
1467                 ,tmp.cost_rate
1468                 ,tmp.cost_rate_override
1469                 ,tmp.burden_cost_rate
1470                 ,tmp.burden_cost_rate_override
1471                 ,tmp.bill_rate
1472                 ,tmp.bill_rate_override
1473 		/* Bug fix:4693839 */
1474 		,tmp.system_reference_num1  --quantity
1475 		,tmp.system_reference_num2  --txnRaw
1476 		,tmp.system_reference_num3  --txnburd
1477 		,tmp.system_reference_num4  --txnrev
1478 		) =
1479                ( SELECT /*+ INDEX(BL PA_BUDGET_LINES_U1) */
1480                 decode(sum(bl.quantity),0,NULL,sum(bl.quantity)) --quantity
1481                 ,decode(sum(bl.txn_raw_cost),0,NULL,sum(bl.txn_raw_cost))  --txn_raw_cost
1482                 ,decode(sum(bl.txn_burdened_cost),0,NULL,sum(bl.txn_burdened_cost)) --txn_burdened_cost
1483                 ,decode(sum(bl.txn_revenue),0,NULL,sum(bl.txn_revenue)) --txn_revenue
1484                 ,decode(sum(bl.init_quantity),0,NULL,sum(bl.init_quantity)) --init_quantity
1485                 ,decode(sum(bl.txn_init_raw_cost),0,NULL,sum(bl.txn_init_raw_cost)) --init_raw_cost
1486                 ,decode(sum(bl.txn_init_burdened_cost),0,NULL,sum(bl.txn_init_burdened_cost)) --init_burdened_cost
1487                 ,decode(sum(bl.txn_init_revenue),0,NULL,sum(bl.txn_init_revenue)) --init_revenue
1488                 ,(sum(( decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,null
1489                          ,decode(nvl(bl.txn_cost_rate_override,nvl(bl.txn_standard_cost_rate,0)),0,null
1490                          ,((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)) * nvl(bl.txn_cost_rate_override,nvl(bl.txn_standard_cost_rate,0)))))))
1491                     / DECODE((sum(decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,null
1492                                 ,decode(nvl(bl.txn_cost_rate_override,nvl(bl.txn_standard_cost_rate,0)),0,null
1493                        		  ,(nvl(bl.quantity,0)- nvl(bl.init_quantity,0))))))
1494 			      ,0,NULL,
1495 			       	(sum(decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,null
1496                                 ,decode(nvl(bl.txn_cost_rate_override,nvl(bl.txn_standard_cost_rate,0)),0,null
1497                                   ,(nvl(bl.quantity,0)- nvl(bl.init_quantity,0))))))
1498 				)
1499                   ) --etc_cost_rate
1500                 ,(sum(decode(tmp.avg_cost_rate_override,NULL,NULL
1501                                ,decode((nvl(bl.quantity,0) - nvl(bl.init_quantity,0)),0,NULL
1502                                 ,decode(nvl(bl.txn_cost_rate_override,nvl(bl.txn_standard_cost_rate,0)),0,NULL
1503                                      ,((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)) * nvl(bl.txn_cost_rate_override,nvl(bl.txn_standard_cost_rate,0)))))))
1504                     / DECODE((sum(decode(tmp.avg_cost_rate_override,NULL,NULL
1505                             ,decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,NULL
1506                               ,decode(nvl(bl.txn_cost_rate_override,nvl(bl.txn_standard_cost_rate,0)),0,null
1507                     	        ,(nvl(bl.quantity,0)- nvl(bl.init_quantity,0)))))))
1508 			 ,0,NULL,
1509 			  (sum(decode(tmp.avg_cost_rate_override,NULL,NULL
1510                             ,decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,NULL
1511                               ,decode(nvl(bl.txn_cost_rate_override,nvl(bl.txn_standard_cost_rate,0)),0,null
1512                                 ,(nvl(bl.quantity,0)- nvl(bl.init_quantity,0)))))))
1513 			 )
1514                  ) --etc_cost_rate_override
1515                 ,(sum(( decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,null
1516                        ,decode(nvl(bl.burden_cost_rate_override,nvl(bl.burden_cost_rate,0)),0,null
1517                            ,((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)) * nvl(bl.burden_cost_rate_override,nvl(bl.burden_cost_rate,0)))))))
1518                    / DECODE((sum(decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,null
1519                         ,decode(nvl(bl.burden_cost_rate_override,nvl(bl.burden_cost_rate,0)),0,null
1520                     	  ,(nvl(bl.quantity,0)- nvl(bl.init_quantity,0))))))
1521 			,0,NULL,
1522 			(sum(decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,null
1523                         ,decode(nvl(bl.burden_cost_rate_override,nvl(bl.burden_cost_rate,0)),0,null
1524                           ,(nvl(bl.quantity,0)- nvl(bl.init_quantity,0))))))
1525 		   	)
1526                  ) --etc_burden_rate
1527                 ,(sum(decode(tmp.avg_burden_rate_override,NULL,NULL
1528                      ,decode((nvl(bl.quantity,0) - nvl(bl.init_quantity,0)),0,NULL
1529                        ,decode(nvl(bl.burden_cost_rate_override,nvl(bl.burden_cost_rate,0)),0,NULL
1530                           ,((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)) * nvl(bl.burden_cost_rate_override,nvl(bl.burden_cost_rate,0)))))))
1531                     / DECODE((sum(decode(tmp.avg_burden_rate_override,NULL,NULL
1532                           ,decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,NULL
1533                             ,decode(nvl(bl.burden_cost_rate_override,nvl(bl.burden_cost_rate,0)),0,NULL
1534                          	,(nvl(bl.quantity,0)- nvl(bl.init_quantity,0)))))))
1535 			,0,NULL,
1536 			(sum(decode(tmp.avg_burden_rate_override,NULL,NULL
1537                           ,decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,NULL
1538                             ,decode(nvl(bl.burden_cost_rate_override,nvl(bl.burden_cost_rate,0)),0,NULL
1539                                 ,(nvl(bl.quantity,0)- nvl(bl.init_quantity,0)))))))
1540 			)
1541                  ) --etc_burden_rate_override
1542                 ,(sum((decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,null
1543                        ,decode(nvl(bl.txn_bill_rate_override,nvl(bl.txn_standard_bill_rate,0)),0,null
1544                          ,((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)) * nvl(bl.txn_bill_rate_override,nvl(bl.txn_standard_bill_rate,0)))))))
1545                    / DECODE((sum(decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,null
1546                        ,decode(nvl(bl.txn_bill_rate_override,nvl(bl.txn_standard_bill_rate,0)),0,null
1547                     	  ,(nvl(bl.quantity,0)- nvl(bl.init_quantity,0))))))
1548 			,0,NULL,
1549 			(sum(decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,null
1550                        ,decode(nvl(bl.txn_bill_rate_override,nvl(bl.txn_standard_bill_rate,0)),0,null
1551                           ,(nvl(bl.quantity,0)- nvl(bl.init_quantity,0))))))
1552 			)
1553                  ) --etc_bill_rate
1554                 ,(sum(decode(tmp.avg_bill_rate_override,NULL,NULL
1555                       , decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,NULL
1556                          ,decode(nvl(bl.txn_bill_rate_override,nvl(bl.txn_standard_bill_rate,0)),0,NULL
1557                             ,((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)) * nvl(bl.txn_bill_rate_override,nvl(bl.txn_standard_bill_rate,0)))))))
1558                    / DECODE((sum(decode(tmp.avg_bill_rate_override,NULL,NULL
1559                         ,decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,NULL
1560                           ,decode(nvl(bl.txn_bill_rate_override,nvl(bl.txn_standard_bill_rate,0)),0,null
1561                       		,(nvl(bl.quantity,0)- nvl(bl.init_quantity,0)))))))
1562 			,0,NULL,
1563 			(sum(decode(tmp.avg_bill_rate_override,NULL,NULL
1564                         ,decode((nvl(bl.quantity,0)- nvl(bl.init_quantity,0)),0,NULL
1565                           ,decode(nvl(bl.txn_bill_rate_override,nvl(bl.txn_standard_bill_rate,0)),0,null
1566                                 ,(nvl(bl.quantity,0)- nvl(bl.init_quantity,0)))))))
1567 			)
1568                 ) --etc_bill_rate_override
1569 		/* Bug fix:4693839 Currently all the UI page shows null instead of zeros, and when they pass to param value
1570 		 * will be passed null, representing no change, but some other API like AMG etc, may pass zero in param value.
1571 	         * In order to avoid changing all the calling api, this api is modified to handle nulls and zeros carefully */
1572 		,SUM(tmp.quantity)	 	-- bl_zero_null_quantity
1573                 ,SUM(tmp.txn_raw_cost)	   	-- bl_zero_null_rawcost
1574                 ,SUM(tmp.txn_burdened_cost)	-- bl_zero_null_burdencost
1575                 ,SUM(tmp.txn_revenue)		-- bl_zero_null_revenue
1576                 FROM pa_budget_lines bl
1577                 WHERE bl.budget_version_id = p_budget_version_id
1578                 AND  bl.resource_assignment_id = tmp.resource_assignment_id
1579                 AND bl.txn_currency_code      = tmp.txn_currency_code
1580                 AND ( (tmp.start_date is NULL AND tmp.end_date is NULL )
1581                             OR
1582                            (tmp.start_date is NOT NULL AND tmp.end_date is NOT NULL
1583                             AND bl.start_date BETWEEN tmp.start_date AND tmp.end_date)
1584                        )
1585                 )
1586       	/* Perf fix: WHERE tmp.budget_version_id = p_budget_version_id to avoid N2 index */
1587       	WHERE tmp.resource_assignment_id = l_res_Asgn_Id_Tab(i)
1588       	AND   tmp.txn_currency_code = l_txn_cur_code_Tab(i)
1589       	AND   ((tmp.start_date is NOT NULL
1590                   and tmp.start_date = l_start_date_tab(i))
1591                 OR tmp.start_date is NULL
1592               );
1593             --print_msg('Number of budgtLines got updated['||l_res_Asgn_Id_Tab.count||']');
1594 	END IF; --}
1595             /** added this for debug testing
1596             FOR tmp in (select * from pa_fp_spread_calc_tmp2 where budget_version_id = p_budget_version_id) LOOP
1597             print_msg('Res['||tmp.resource_assignment_id||']blTxncur['||tmp.txn_currency_code||'blQty['||tmp.quantity||']');
1598             print_msg('RawCst['||tmp.txn_raw_cost||']BdCst['||tmp.txn_burdened_cost||']Rev['||tmp.txn_revenue||']');
1599             print_msg('cstRt['||tmp.cost_rate||']cstRtOvr['||tmp.cost_rate_override||']BdRt['||tmp.burden_cost_rate||']');
1600             print_msg('BdRtOv['||tmp.burden_cost_rate_override||']BilRt['||tmp.bill_rate||']BilRtOvr['||tmp.bill_rate_override||']');
1601 	    print_msg('init_quantity['||tmp.init_quantity||']txn_init_raw_cost['||tmp.txn_init_raw_cost||']');
1602             END LOOP;
1603             **/
1604             l_cntr := 0;
1605             l_resource_assingment_id_tab.delete;
1606 		l_txn_currency_code_tab.delete;
1607                 l_bl_Start_date_tab.delete;
1608                 l_bl_quantity_tab.delete;
1609                 l_bl_txn_raw_cost_tab.delete;
1610                 l_bl_txn_burden_cost_tab.delete;
1611                 l_bl_txn_revenue_tab.delete;
1612                 l_bl_init_quantity_tab.delete;
1613                 l_bl_txn_init_raw_cost_tab.delete;
1614                 l_bl_txn_init_burden_cost_tab.delete;
1615                 l_bl_txn_init_revenue_tab.delete;
1616                 l_bl_cost_rate_tab.delete;
1617                 l_bl_cost_rate_override_tab.delete;
1618                 l_bl_burden_cost_rate_tab.delete;
1619                 l_bl_burden_rate_override_tab.delete;
1620                 l_bl_bill_rate_tab.delete;
1621                 l_bl_bill_rate_override_tab.delete;
1622             	l_rate_based_flag_tab.delete;
1623 		l_res_rate_based_flag_tab.delete;
1624 		l_bl_txn_markup_tab.delete;
1625 		l_costRt_g_miss_num_flag_tab.delete;
1626                 l_burdRt_g_miss_num_flag_tab.delete;
1627                 l_revRt_g_miss_num_flag_tab.delete;
1628 		l_rwCost_g_miss_num_flag_tab.delete;
1629         	l_brdCost_g_miss_num_flag_tab.delete;
1630         	l_revenue_g_miss_num_flag_tab.delete;
1631 	        l_resource_uom_tab.delete;
1632 		l_quantity_tab.delete;
1633         	l_raw_cost_tab.delete;
1634         	l_burdened_cost_tab.delete;
1635         	l_revenue_tab.delete;
1636         	l_raw_cost_rate_tab.delete;
1637         	l_rw_cost_rate_override_tab.delete;
1638         	l_b_cost_rate_tab.delete;
1639         	l_b_cost_rate_override_tab.delete;
1640         	l_bill_rate_tab.delete;
1641         	l_bill_rate_override_tab.delete;
1642 		--bug fix:5726773
1643  	        l_negQty_Change_flag_tab.delete;
1644  	        l_negRawCst_Change_flag_tab.delete;
1645  	        l_neg_BurdCst_Change_flag_tab.delete;
1646  	        l_neg_revChange_flag_tab.delete;
1647 
1648             FOR i IN cur_bl_vals LOOP
1649 		BEGIN --{
1650                 l_cntr := l_cntr +1;
1651                 l_rowid_tab(l_cntr) := i.rowid;
1652                         l_quantity_ch_flag_tab(l_cntr)  := 'N';
1653                         l_rawCost_ch_flag_tab(l_cntr)  := 'N';
1654                         l_burdenCost_ch_flag_tab(l_cntr)  := 'N';
1655                         l_Revnue_ch_flag_tab(l_cntr)  := 'N';
1656                         l_costRt_ch_flag_tab(l_cntr)  := 'N';
1657                         l_burdRt_ch_flag_tab(l_cntr)  := 'N';
1658                         l_billRt_ch_flag_tab(l_cntr)  := 'N';
1659                 l_resource_assingment_id_tab(l_cntr)    := i.resource_assignment_id;
1660                             l_txn_currency_code_tab(l_cntr)     := i.txn_currency_code;
1661 			l_resource_uom_tab(l_cntr)    := i.resource_uom;
1662                             l_bl_quantity_tab(l_cntr)       := i.bl_quantity;
1663                             l_bl_txn_raw_cost_tab(l_cntr)       := i.bl_txn_raw_cost;
1664                             l_bl_txn_burden_cost_tab(l_cntr)    := i.bl_txn_burdened_cost;
1665                             l_bl_txn_revenue_tab(l_cntr)        := i.bl_txn_revenue;
1666                             l_bl_init_quantity_tab(l_cntr)      := i.bl_init_quantity;
1667                             l_bl_txn_init_raw_cost_tab(l_cntr)      := i.bl_txn_init_raw_cost;
1668                             l_bl_txn_init_burden_cost_tab(l_cntr)   := i.bl_txn_init_burdened_cost;
1669                             l_bl_txn_init_revenue_tab(l_cntr)   := i.bl_txn_init_revenue;
1670                             l_bl_cost_rate_tab(l_cntr)          := i.bl_cost_rate;
1671                             l_bl_cost_rate_override_tab(l_cntr)     := i.bl_cost_rate_override;
1672                             l_bl_burden_cost_rate_tab(l_cntr)   := i.bl_burden_cost_rate;
1673                             l_bl_burden_rate_override_tab(l_cntr)   := i.bl_burden_cost_rate_override;
1674                             l_bl_bill_rate_tab(l_cntr)          := i.bl_bill_rate;
1675                             l_bl_bill_rate_override_tab(l_cntr)     := i.bl_bill_rate_override;
1676                 l_rate_based_flag_tab(l_cntr)       := i.rate_based_flag;
1677                 l_res_rate_based_flag_tab(l_cntr)       := i.resource_rate_based_flag;
1678 		l_bl_txn_markup_tab(l_cntr)       := i.bill_markup_percentage;
1679 		l_costRt_g_miss_num_flag_tab(l_cntr) := i.cost_rate_g_miss_num_flag;
1680                 l_burdRt_g_miss_num_flag_tab(l_cntr) := i.burden_rate_g_miss_num_flag;
1681                 l_revRt_g_miss_num_flag_tab(l_cntr)  := i.bill_rate_g_miss_num_flag;
1682 		l_rwCost_g_miss_num_flag_tab(l_cntr)  := i.raw_cost_g_miss_num_flag;
1683                 l_brdCost_g_miss_num_flag_tab(l_cntr)  := i.burden_cost_g_miss_num_flag;
1684                 l_revenue_g_miss_num_flag_tab(l_cntr)  := i.revenue_g_miss_num_flag;
1685 		-- Bug fix:5726773
1686  	        l_negQty_Change_flag_tab(l_cntr)            := 'N';
1687  	        l_negRawCst_Change_flag_tab(l_cntr)     := 'N';
1688  	        l_neg_BurdCst_Change_flag_tab(l_cntr)        := 'N';
1689  	        l_neg_revChange_flag_tab(l_cntr)            := 'N';
1690 
1691 
1692 		/*Perf Impr:5309529 Added this and removed muliple execution of AvgblRec cursor for param validation*/
1693 		pre_process_param_values
1694         	(p_budget_version_id            => p_budget_version_id
1695         	,p_resource_assignment          => i.resource_assignment_id
1696         	,p_txn_currency_code            => i.txn_currency_code
1697         	,p_txn_currency_override        => i.txn_curr_code_override
1698         	,p_bdgt_line_sDate              => i.start_date
1699         	,p_bdgt_line_eDate              => i.end_date
1700         	,p_delete_bl_flag               => i.delete_bl_flag
1701         	,p_Qty_miss_num_flag            => i.quantity_g_miss_num_flag
1702         	,p_bl_quantity                  => i.bl_quantity
1703         	,p_bl_init_quantity             => i.bl_init_quantity
1704         	,x_total_quantity               => i.quantity
1705         	,p_Rw_miss_num_flag             => i.raw_cost_g_miss_num_flag
1706         	,p_bl_txn_raw_cost              => i.bl_txn_raw_cost
1707         	,p_bl_txn_init_raw_cost         => i.bl_txn_init_raw_cost
1708         	,x_total_raw_cost               => i.txn_raw_cost
1709         	,p_Br_miss_num_flag             => i.burden_cost_g_miss_num_flag
1710         	,p_bl_txn_burdened_cost         => i.bl_txn_burdened_cost
1711         	,p_bl_txn_init_burdened_cost    => i.bl_txn_init_burdened_cost
1712         	,x_total_burdened_cost          => i.txn_burdened_cost
1713         	,p_Rv_miss_num_flag             => i.revenue_g_miss_num_flag
1714         	,p_bl_txn_revenue               => i.bl_txn_revenue
1715         	,p_bl_txn_init_revenue          => i.bl_txn_init_revenue
1716         	,x_total_revenue                => i.txn_revenue
1717         	,p_cost_rt_miss_num_flag        => i.cost_rate_g_miss_num_flag
1718         	,p_bl_etc_cost_rate             => i.bl_cost_rate
1719         	,p_bl_etc_cost_rate_override    => i.bl_cost_rate_override
1720         	,x_raw_cost_rate                => i.cost_rate
1721         	,x_rw_cost_rate_override        => i.cost_rate_override
1722         	,p_burd_rt_miss_num_flag        => i.burden_rate_g_miss_num_flag
1723         	,p_bl_etc_burden_rate           => i.bl_burden_cost_rate
1724         	,p_bl_etc_burden_rate_override  => i.bl_burden_cost_rate_override
1725         	,x_b_cost_rate                  => i.burden_cost_rate
1726         	,x_b_cost_rate_override         => i.burden_cost_rate_override
1727         	,p_bill_rt_miss_num_flag        => i.bill_rate_g_miss_num_flag
1728         	,p_bl_etc_bill_rate             => i.bl_bill_rate
1729         	,p_bl_etc_bill_rate_override    => i.bl_bill_rate_override
1730         	,x_bill_rate                    => i.bill_rate
1731         	,x_bill_rate_override           => i.bill_rate_override
1732         	,x_return_status                => l_return_status
1733         	);
1734 
1735 		If NVL(l_return_status,'S') <> 'S' Then
1736 			x_return_status := l_return_status;
1737 			Raise skip_record;
1738 		End If;
1739 		l_quantity_tab(l_cntr)  		:= i.quantity;
1740                 l_raw_cost_tab(l_cntr)  		:= i.txn_raw_cost;
1741                 l_burdened_cost_tab(l_cntr)  		:= i.txn_burdened_cost;
1742                 l_revenue_tab(l_cntr)  			:= i.txn_revenue;
1743                 l_raw_cost_rate_tab(l_cntr)  		:= i.cost_rate;
1744                 l_rw_cost_rate_override_tab(l_cntr)  	:= i.cost_rate_override;
1745                 l_b_cost_rate_tab(l_cntr)  		:= i.burden_cost_rate;
1746                 l_b_cost_rate_override_tab(l_cntr)  	:= i.burden_cost_rate_override;
1747                 l_bill_rate_tab(l_cntr)  		:= i.bill_rate;
1748                 l_bill_rate_override_tab(l_cntr)  	:= i.bill_rate_override;
1749 		/* end of Perf Impr:5309529 */
1750 
1751 		If g_wp_version_flag = 'Y' Then
1752                   If ((Nvl(i.quantity,0) <> NVL(i.bl_quantity,0)) OR
1753 	            (i.quantity = 0 AND i.bl_zero_null_quantity is NULL)) Then /* Bug fix:4693839 */
1754                     l_quantity_ch_flag_tab(l_cntr)  := 'Y';
1755                   End If;
1756 
1757 		Else
1758 		  If g_calling_module NOT IN ('BUDGET_GENERATION','FORECAST_GENERATION') and i.resource_rate_based_flag = 'N' Then
1759 			/* ignore change of quantity for non-rate base resources */
1760 			l_quantity_ch_flag_tab(l_cntr)  := 'N';
1761 		  Else
1762 		     If ((Nvl(i.quantity,0) <> NVL(i.bl_quantity,0)) OR
1763                     	(i.quantity = 0 AND i.bl_zero_null_quantity is NULL)) Then /* Bug fix:4693839 */
1764                     	 l_quantity_ch_flag_tab(l_cntr)  := 'Y';
1765 		     End If;
1766                   /*
1767              Bug 6429285
1768              Below if condition will handle a corner case
1769              If a rate based resource is added as non rate based resource assignment
1770              in pa_resource_asgn_curr and pa_budget_lines quantity will be populated
1771              as raw_cost and display_quantity will be null.Now if we want to enter
1772              the quantity same as raw cost (i.e existing quantity) the above if condition will fail because
1773              the user entered quantity is same as what is alreay existing*/
1774 
1775              -- Added condition and i.quantity <> '' as part of fix 7704110
1776              If (i.quantity is not null and i.quantity <> '' and i.resource_rate_based_flag = 'Y' and i.rate_based_flag = 'N') Then
1777                     l_quantity_ch_flag_tab(l_cntr)  := 'Y';
1778              END If;
1779              --End 6429285
1780                   End If;
1781 		End if;
1782 
1783 		/* Bug fix:5726773: when quantity is changed from +ve to -ve or -ve to +ve then
1784  	          * initialize the flags. Later in the spread api. place the additional quantity in
1785  	          * in the last existing period. Refer to TAD for detail architecture
1786  	          * Logic: Example shows when to initialize the flags
1787  	          *    ExistingDB value  paramValue   Result
1788  	          *  1.          -10         20          Y
1789  	          *  2.          100         -100        Y
1790  	          *  3.          100         150         N
1791  	          *  4.          0           100         N
1792  	          *  5.          0           -100        N
1793  	          *  6.          10          0           N
1794  	          *  7.          -10         0           N
1795  	        */
1796  	        If l_quantity_ch_flag_tab(l_cntr) = 'Y' Then
1797  	            If nvl(i.bl_zero_null_quantity,0) <> 0 AND Nvl(i.quantity,0) <> 0 Then
1798  	                   If sign(nvl(i.bl_zero_null_quantity,0)) <> sign(Nvl(i.quantity,0)) Then
1799  	                        l_negQty_Change_flag_tab(l_cntr)        := 'Y';
1800  	                   End If;
1801  	            End If;
1802  	        End If;
1803  	        /* end of bug fix:5726773 */
1804 
1805                 If ((NVL(i.txn_raw_cost,0) <> NVL(i.bl_txn_raw_cost,0))
1806 		    OR (i.txn_raw_cost = 0 AND i.bl_zero_null_rawcost is NULL ))  Then /* Bug fix:4693839 */
1807                    /* Bug fix:4293020: Changing the quantity and currency for Non-rate base resource is nulling out the quantity
1808                     * Reason: the below flag setting to y makes the cost is changed and precedence rules will copy the
1809                     * null costs to quantity.
1810                     * fix: When override currency is passed, set the flag based on the user passed amounts in the param.
1811                     * donot retain the costs from the budget lines.
1812                     */
1813                     If (i.txn_curr_code_override is NOT NULL AND NVL(i.txn_raw_cost,0) = 0) Then
1814                     l_rawCost_ch_flag_tab(l_cntr) := 'N';
1815                     Else
1816                     l_rawCost_ch_flag_tab(l_cntr) := 'Y';
1817                     End If;
1818                 End If;
1819 
1820 		/* Bug fix:5726773: */
1821  	            If l_rawCost_ch_flag_tab(l_cntr) = 'Y' Then
1822  	                If nvl(i.bl_zero_null_rawcost,0) <> 0 AND Nvl(i.txn_raw_cost,0) <> 0 Then
1823  	                     If sign(nvl(i.bl_zero_null_rawcost,0)) <> sign(Nvl(i.txn_raw_cost,0)) Then
1824  	                         l_negRawCst_Change_flag_tab(l_cntr)    := 'Y';
1825  	                    End If;
1826  	              End If;
1827  	            End If;
1828  	        /* end of bug fix:5726773 */
1829 
1830                 IF ((nvl(i.txn_burdened_cost,0) <> nvl(i.bl_txn_burdened_cost,0))
1831 		    OR (i.txn_burdened_cost = 0 AND i.bl_zero_null_burdencost is NULL )) Then /* Bug fix:4693839 */
1832                     /* bug fix:4293020 */
1833                     If (i.txn_curr_code_override is NOT NULL AND nvl(i.txn_burdened_cost,0) = 0) Then
1834                     l_burdenCost_ch_flag_tab(l_cntr) := 'N';
1835                     Else
1836                     l_burdenCost_ch_flag_tab(l_cntr) := 'Y';
1837                     End If;
1838                 End If;
1839 
1840 		 /* Bug fix:5726773: */
1841  	             If l_burdenCost_ch_flag_tab(l_cntr) = 'Y' Then
1842  	                 If nvl(i.bl_zero_null_burdencost,0) <> 0 AND Nvl(i.txn_burdened_cost,0) <> 0 Then
1843  	                      If sign(nvl(i.bl_zero_null_burdencost,0)) <> sign(Nvl(i.txn_burdened_cost,0)) Then
1844  	                          l_neg_BurdCst_Change_flag_tab(l_cntr)    := 'Y';
1845  	                      End If;
1846  	                End If;
1847  	             End If;
1848  	         /* end of bug fix:5726773 */
1849 
1850                 IF ((nvl(i.txn_revenue,0) <> nvl(i.bl_txn_revenue,0))
1851 		    OR ( i.txn_revenue = 0 AND i.bl_zero_null_revenue is NULL )) Then /* Bug fix:4693839 */
1852                     /* bug fix:4293020 */
1853                     If (i.txn_curr_code_override is NOT NULL AND nvl(i.txn_revenue,0) = 0) Then
1854                     	l_Revnue_ch_flag_tab(l_cntr) := 'N';
1855                     Else
1856                     	l_Revnue_ch_flag_tab(l_cntr) := 'Y';
1857                     End If;
1858                 End If;
1859 
1860 		/* Bug fix:5726773: */
1861  	            If l_Revnue_ch_flag_tab(l_cntr) = 'Y' Then
1862  	                If nvl(i.bl_zero_null_revenue,0) <> 0 AND Nvl(i.txn_revenue,0) <> 0 Then
1863  	                     If sign(nvl(i.bl_zero_null_revenue,0)) <> sign(Nvl(i.txn_revenue,0)) Then
1864  	                          l_neg_revChange_flag_tab(l_cntr)    := 'Y';
1865  	                     End If;
1866  	               End If;
1867  	            End If;
1868  	       /* end of bug fix:5726773 */
1869 
1870                 /*** Bug fix:4297663 : While comparing the nulls should be handled properly.Add NVLs **/
1871                 If p_source_context = 'BUDGET_LINE' Then
1872 		  If ( NVL(i.cost_rate_override,NVL(i.cost_rate,0)) <>
1873                      	nvl(i.bl_cost_rate_override,NVL(i.bl_cost_rate,0))
1874                      OR (i.cost_rate = 0 AND i.avg_zero_null_cost_rate is NULL) /* Bug fix:4693839 */
1875                      OR (i.cost_rate_override = 0 AND i.avg_zero_null_cost_rate is NULL)) Then
1876 			  print_msg('Setting the cost rate changed flag to Y');
1877                            l_costRt_ch_flag_tab(l_cntr) := 'Y';
1878 		  End If;
1879 		Else -- with new entity changes compare only the rate overrides, as all the calling apis passes
1880 		     -- rate overrides only
1881 		  If i.resource_rate_based_flag = 'Y'
1882 		     AND ( NVL(i.cost_rate_override,nvl(i.bl_cost_rate_override,0)) <> nvl(i.bl_cost_rate_override,0)
1883                      OR (i.cost_rate_override = 0 AND i.avg_zero_null_cost_rate is NULL)) Then
1884 			If i.rate_based_flag = 'N' Then
1885 			   if l_quantity_ch_flag_tab(l_cntr) = 'N' then
1886 				l_costRt_ch_flag_tab(l_cntr) := 'N';
1887 			   else
1888 				l_costRt_ch_flag_tab(l_cntr) := 'Y';
1889 			   End If;
1890 			Else
1891                            l_costRt_ch_flag_tab(l_cntr) := 'Y';
1892 			End If;
1893 		  Else
1894 			l_costRt_ch_flag_tab(l_cntr) := 'N';
1895                   End If;
1896                 End If;
1897 
1898                 If p_source_context = 'BUDGET_LINE' Then
1899 		   If (( NVL(i.burden_cost_rate_override,NVL(i.burden_cost_rate,0)) <>
1900                          NVL(i.bl_burden_cost_rate_override,NVL(i.bl_burden_cost_rate,0)))
1901 		      OR ( i.burden_cost_rate = 0 AND i.avg_zero_null_burden_rate is NULL ) /* Bug fix:4693839 */
1902 		      OR ( i.burden_cost_rate_override = 0 AND i.avg_zero_null_burden_rate is NULL )) Then
1903                            l_burdRt_ch_flag_tab(l_cntr)  := 'Y';
1904 		   End If;
1905 		Else
1906 		  If g_wp_version_flag = 'Y' Then
1907 		     If (( NVL(i.burden_cost_rate_override,NVL(i.bl_burden_cost_rate_override,0)) <>
1908                          NVL(i.bl_burden_cost_rate_override,0))
1909                         OR ( i.burden_cost_rate_override = 0 AND i.avg_zero_null_burden_rate is NULL )) Then
1910                            l_burdRt_ch_flag_tab(l_cntr)  := 'Y';
1911 		     End If;
1912 		  Else
1913 		     If i.resource_rate_based_flag = 'Y'
1914 			AND (( NVL(i.burden_cost_rate_override,NVL(i.bl_burden_cost_rate_override,0)) <>
1915                          NVL(i.bl_burden_cost_rate_override,0))
1916                          OR ( i.burden_cost_rate_override = 0 AND i.avg_zero_null_burden_rate is NULL )) Then
1917 			l_burdRt_ch_flag_tab(l_cntr)  := 'Y';
1918 		     Else
1919 			l_burdRt_ch_flag_tab(l_cntr)  := 'N';
1920 		     End If;
1921 		  End If;
1922                 End If;
1923 
1924                 If p_source_context = 'BUDGET_LINE' Then
1925 		   If ((NVL(i.bill_rate_override,NVL(i.bill_rate,0)) <>
1926                          nvl (i.bl_bill_rate_override,NVL(i.bl_bill_rate,0)))
1927 		     OR (i.bill_rate = 0 AND i.avg_zero_null_bill_rate is NULL ) /* Bug fix:4693839 */
1928 		     OR (i.bill_rate_override = 0 AND i.avg_zero_null_bill_rate is NULL )) Then
1929                            l_billRt_ch_flag_tab(l_cntr) := 'Y';
1930 		   End If;
1931 		Else
1932 		   If i.resource_rate_based_flag = 'Y'
1933 		     AND ((NVL(i.bill_rate_override,NVL(i.bl_bill_rate_override,0)) <>
1934                          nvl (i.bl_bill_rate_override,0))
1935                      OR (i.bill_rate_override = 0 AND i.avg_zero_null_bill_rate is NULL )) Then
1936                            l_billRt_ch_flag_tab(l_cntr) := 'Y';
1937 		   Else
1938 			l_billRt_ch_flag_tab(l_cntr) := 'N';
1939                    End If;
1940                 End If;
1941 
1942                 IF i.txn_curr_code_override is NOT NULL Then
1943                     If i.cost_rate_override is NOT NULL Then
1944                         l_costRt_ch_flag_tab(l_cntr) := 'Y';
1945                     End If;
1946                     If i.burden_cost_rate_override is NOT NULL Then
1947                         l_burdRt_ch_flag_tab(l_cntr)  := 'Y';
1948                     End If;
1949                     If i.bill_rate_override is NOT NULL Then
1950                         l_billRt_ch_flag_tab(l_cntr) := 'Y';
1951                     End If;
1952                 END IF;
1953 		--print_msg('G_MissNumFlgs:Cst['||i.cost_rate_g_miss_num_flag||']');
1954 		--print_msg('Burd['||i.burden_rate_g_miss_num_flag||']Bil['||i.bill_rate_g_miss_num_flag||']');
1955 
1956 	        If g_wp_version_flag = 'Y' Then
1957 		  IF i.rate_based_flag = 'Y' and i.cost_rate_g_miss_num_flag = 'Y' Then
1958 			l_costRt_ch_flag_tab(l_cntr) := 'Y';
1959 		  End If;
1960 
1961 		  IF i.burden_rate_g_miss_num_flag = 'Y' Then
1962                         l_burdRt_ch_flag_tab(l_cntr) := 'Y';
1963                   End If;
1964 		End If;
1965 
1966 		/* handling g miss nums for rates */
1967 		If g_wp_version_flag = 'N' Then --{
1968 		  If i.rate_based_flag = 'Y' Then
1969 		      If NVL(l_rawCost_ch_flag_tab(l_cntr),'N') = 'Y'
1970 			 and l_quantity_ch_flag_tab(l_cntr) = 'Y' Then
1971 			 i.cost_rate_g_miss_num_flag := 'N';
1972 			 l_costRt_g_miss_num_flag_tab(l_cntr) := 'N';
1973 			 l_costRt_ch_flag_tab(l_cntr) := 'N';
1974 		      Elsif NVL(l_rawCost_ch_flag_tab(l_cntr),'N') = 'Y'
1975 			  and i.cost_rate_g_miss_num_flag = 'Y' Then
1976 			 i.cost_rate_g_miss_num_flag := 'N';
1977                          l_costRt_g_miss_num_flag_tab(l_cntr) := 'N';
1978                          l_costRt_ch_flag_tab(l_cntr) := 'N';
1979                       ElsIF i.cost_rate_g_miss_num_flag = 'Y' Then
1980                         l_costRt_ch_flag_tab(l_cntr) := 'Y';
1981                       End If;
1982 
1983 		    If NVL(l_burdenCost_ch_flag_tab(l_cntr),'N') = 'Y'
1984 			and i.burden_rate_g_miss_num_flag = 'Y' Then
1985 			i.burden_rate_g_miss_num_flag := 'N';
1986 			l_burdRt_ch_flag_tab(l_cntr) := 'Y';
1987 			l_burdRt_g_miss_num_flag_tab(l_cntr) := 'N';
1988                     ElsIF i.burden_rate_g_miss_num_flag = 'Y' Then
1989                         l_burdRt_ch_flag_tab(l_cntr) := 'Y';
1990                     End If;
1991 
1992 		    If NVL(l_Revnue_ch_flag_tab(l_cntr),'N') = 'Y'
1993 			and i.bill_rate_g_miss_num_flag = 'Y' Then
1994 			i.bill_rate_g_miss_num_flag := 'N';
1995 			l_billRt_ch_flag_tab(l_cntr) := 'N';
1996 			l_revRt_g_miss_num_flag_tab(l_cntr) := 'N';
1997 		    ElsIF i.bill_rate_g_miss_num_flag = 'Y' Then
1998 			print_msg('setting bill rate change flag to Y due to g_miss_num');
1999                         l_billRt_ch_flag_tab(l_cntr) := 'Y';
2000                     End If;
2001 
2002 		  Else
2003 		     If i.resource_rate_based_flag = 'Y' AND i.rate_based_flag = 'N'  then
2004 			If NVL(l_quantity_ch_flag_tab(l_cntr),'N') = 'Y' Then
2005 				IF i.cost_rate_g_miss_num_flag = 'Y' Then
2006                         		l_costRt_ch_flag_tab(l_cntr) := 'Y';
2007                     		End If;
2008                     		IF i.burden_rate_g_miss_num_flag = 'Y' Then
2009                         		l_burdRt_ch_flag_tab(l_cntr) := 'Y';
2010                     		End If;
2011                     		IF i.bill_rate_g_miss_num_flag = 'Y' Then
2012                         		l_billRt_ch_flag_tab(l_cntr) := 'Y';
2013                     		End If;
2014 		        Else
2015 				l_costRt_ch_flag_tab(l_cntr) := 'N';
2016 				l_burdRt_ch_flag_tab(l_cntr) := 'N';
2017 				l_billRt_ch_flag_tab(l_cntr) := 'N';
2018 			   	l_costRt_g_miss_num_flag_tab(l_cntr) := 'N';
2019 			   	l_burdRt_g_miss_num_flag_tab(l_cntr) := 'N';
2020 			   	l_revRt_g_miss_num_flag_tab(l_cntr) := 'N';
2021 			End If;
2022 		      Elsif i.resource_rate_based_flag = 'N' AND i.rate_based_flag = 'N' Then
2023 				l_costRt_ch_flag_tab(l_cntr) := 'N';
2024                                 l_burdRt_ch_flag_tab(l_cntr) := 'N';
2025                                 l_billRt_ch_flag_tab(l_cntr) := 'N';
2026 				l_costRt_g_miss_num_flag_tab(l_cntr) := 'N';
2027                                 l_burdRt_g_miss_num_flag_tab(l_cntr) := 'N';
2028                                 l_revRt_g_miss_num_flag_tab(l_cntr) := 'N';
2029 		      End If;
2030 		  End If;
2031 		End If; --}
2032 		/* handling g miss nums for the amounts */
2033 	--print_msg('corrected G_MissNumFlgs:Cst['||l_costRt_g_miss_num_flag_tab(l_cntr)||']');
2034 	--print_msg('Burd['||l_burdRt_g_miss_num_flag_tab(l_cntr)||']Bil['||l_revRt_g_miss_num_flag_tab(l_cntr)||']');
2035 	  	EXCEPTION
2036 			WHEN skip_record THEN
2037 				NULL;
2038 		END; --}
2039             END LOOP;
2040 
2041             IF NVL(x_return_status,'S') = 'S' AND l_rowid_tab.COUNT > 0 Then
2042 		IF P_PA_DEBUG_MODE = 'Y' Then
2043                 print_msg('setting the Changed Flags NumofRowsUpd['||l_rowid_tab.COUNT||']');
2044 		End If;
2045 		--/** added this for debug testing
2046 		for i IN l_rowid_tab.FIRST .. l_rowid_tab.LAST loop
2047 		print_msg('Raid['||l_resource_assingment_id_tab(i)||']TxnCur['||l_txn_currency_code_tab(i)||']');
2048 		print_msg('QtyFlag['||l_quantity_ch_flag_tab(i)||']CstFlg['||l_rawCost_ch_flag_tab(i)||']');
2049 		print_msg('CstRtFlg['||l_costRt_ch_flag_tab(i)||']');
2050 		print_msg('BdFlg['||l_burdenCost_ch_flag_tab(i)||']BdRtFlg['||l_burdRt_ch_flag_tab(i)||']');
2051 		print_msg('Rev['||l_Revnue_ch_flag_tab(i)||']BilRtFlg['||l_billRt_ch_flag_tab(i)||']');
2052 		end loop;
2053 		--*/
2054 
2055                 FORALL i IN l_rowid_tab.FIRST .. l_rowid_tab.LAST
2056                    UPDATE  pa_fp_spread_calc_tmp tmp
2057                    SET  tmp.QUANTITY_CHANGED_FLAG      = NVL(l_quantity_ch_flag_tab(i),'N')
2058                     ,tmp.COST_RATE_CHANGED_FLAG   = NVL(l_costRt_ch_flag_tab(i),'N')
2059                     ,tmp.BURDEN_RATE_CHANGED_FLAG = NVL(l_burdRt_ch_flag_tab(i),'N')
2060                     ,tmp.BILL_RATE_CHANGED_FLAG   = NVL(l_billRt_ch_flag_tab(i),'N')
2061                     ,tmp.RAW_COST_CHANGED_FLAG    = NVL(l_rawCost_ch_flag_tab(i),'N')
2062                     ,tmp.BURDEN_COST_CHANGED_FLAG = NVL(l_burdenCost_ch_flag_tab(i),'N')
2063                     ,tmp.REVENUE_CHANGED_FLAG     = NVL(l_Revnue_ch_flag_tab(i),'N')
2064 		    ,tmp.QUANTITY                 = decode(NVL(l_quantity_ch_flag_tab(i),'N'),'Y'
2065 							,l_quantity_tab(i),l_bl_quantity_tab(i))
2066                     ,tmp.BL_QUANTITY          = l_bl_quantity_tab(i)
2067                     ,tmp.BL_TXN_RAW_COST      = l_bl_txn_raw_cost_tab(i)
2068                     ,tmp.BL_TXN_BURDENED_COST     = l_bl_txn_burden_cost_tab(i)
2069                     ,tmp.BL_TXN_REVENUE           = l_bl_txn_revenue_tab(i)
2070                     ,tmp.BL_TXN_INIT_RAW_COST     = l_bl_txn_init_raw_cost_tab(i)
2071                     ,tmp.BL_TXN_INIT_BURDENED_COST = l_bl_txn_init_burden_cost_tab(i)
2072                     ,tmp.BL_TXN_INIT_REVENUE      =l_bl_txn_init_revenue_tab(i)
2073                     ,tmp.BL_INIT_QUANTITY     = l_bl_init_quantity_tab(i)
2074                     ,tmp.BL_COST_RATE         = l_bl_cost_rate_tab(i)
2075                     ,tmp.BL_COST_RATE_OVERRIDE    = l_bl_cost_rate_override_tab(i)
2076                     ,tmp.BL_BURDEN_COST_RATE      = l_bl_burden_cost_rate_tab(i)
2077                     ,tmp.BL_BURDEN_COST_RATE_OVERRIDE = l_bl_burden_rate_override_tab(i)
2078                     ,tmp.BL_BILL_RATE          = l_bl_bill_rate_tab(i)
2079                     ,tmp.BL_BILL_RATE_OVERRIDE     = l_bl_bill_rate_override_tab(i)
2080                     /* Bug fix:4293020 : For rate base resource retain the param value. for non-rate base
2081                      * resource: hard code the cost rate 1 and bill rate to 1 based on the version type
2082                      * Reason: the rates cannot be changed for non-rate base resource
2083                     ,tmp.COST_RATE_OVERRIDE        = decode(l_rate_based_flag_tab(i),'Y',tmp.COST_RATE_OVERRIDE
2084                                            ,decode(g_budget_version_type,'COST',nvl(tmp.COST_RATE_OVERRIDE,1)
2085                                           ,'ALL',nvl(tmp.COST_RATE_OVERRIDE,1),tmp.COST_RATE_OVERRIDE))
2086                     ,tmp.BILL_RATE_OVERRIDE        = decode(l_rate_based_flag_tab(i),'Y',tmp.BILL_RATE_OVERRIDE
2087                                           ,decode(g_budget_version_type,'REVENUE',nvl(tmp.BILL_RATE_OVERRIDE,1)
2088                                          ,tmp.BILL_RATE_OVERRIDE))
2089                     **/
2090                     ,tmp.COST_RATE_OVERRIDE = decode(l_costRt_g_miss_num_flag_tab(i),'Y',NULL
2091 					,decode(NVL(l_costRt_ch_flag_tab(i),'N'),'N',NULL
2092 					,decode(l_rate_based_flag_tab(i),'Y',l_rw_cost_rate_override_tab(i)
2093 					,decode(l_res_rate_based_flag_tab(i),'Y'
2094 						,l_rw_cost_rate_override_tab(i)
2095 						,decode(l_bl_cost_rate_override_tab(i),0,0,1)))))
2096                     ,tmp.BILL_RATE_OVERRIDE = decode(l_revRt_g_miss_num_flag_tab(i),'Y',NULL
2097 					,decode(NVL(l_billRt_ch_flag_tab(i),'N'),'N',NULL
2098 					,decode(l_rate_based_flag_tab(i),'Y',l_bill_rate_override_tab(i)
2099                                         ,decode(g_budget_version_type,'REVENUE'
2100 					,decode(l_res_rate_based_flag_tab(i),'Y',l_bill_rate_override_tab(i),1)
2101 						,'ALL',l_bill_rate_override_tab(i)
2102 						,l_bill_rate_override_tab(i)))))
2103 		    ,tmp.BILL_MARKUP_PERCENTAGE   = decode(l_revRt_g_miss_num_flag_tab(i),'Y',NULL,l_bl_txn_markup_tab(i))
2104 		    ,tmp.burden_cost_rate_override  = decode(l_burdRt_g_miss_num_flag_tab(i),'Y',NULL
2105 						        ,decode(NVL(l_burdRt_ch_flag_tab(i),'N'),'N',NULL
2106 							   ,l_b_cost_rate_override_tab(i)))
2107 		    ,tmp.cost_rate_g_miss_num_flag  = l_costRt_g_miss_num_flag_tab(i)
2108                     ,tmp.burden_rate_g_miss_num_flag = l_burdRt_g_miss_num_flag_tab(i)
2109                     ,tmp.bill_rate_g_miss_num_flag = l_revRt_g_miss_num_flag_tab(i)
2110 		    ,tmp.rate_based_flag	= l_rate_based_flag_tab(i)
2111 		    ,tmp.resource_rate_based_flag = l_res_rate_based_flag_tab(i)
2112 		    ,tmp.resource_uom	= l_resource_uom_tab(i)
2113 		    /* added for perf impr: removed loop and execution of cursor */
2114                     ,tmp.txn_raw_cost = l_raw_cost_tab(i)
2115                     ,tmp.txn_burdened_cost = l_burdened_cost_tab(i)
2116                     ,tmp.txn_revenue = l_revenue_tab(i)
2117                     ,tmp.cost_rate = l_raw_cost_rate_tab(i)
2118                     ,tmp.burden_cost_rate = l_b_cost_rate_tab(i)
2119                     ,tmp.bill_rate = l_bill_rate_tab(i)
2120 		    /* bug fix: 5726773 */
2121  	            ,tmp.NEG_QUANTITY_CHANGE_FLAG  = l_negQty_Change_flag_tab(i)
2122  	            ,tmp.NEG_RAWCOST_CHANGE_FLAG  = l_negRawCst_Change_flag_tab(i)
2123  	            ,tmp.NEG_BURDEN_CHANGE_FALG =  l_neg_BurdCst_Change_flag_tab(i)
2124  	            ,tmp.NEG_REVENUE_CHANGE_FLAG  = l_neg_revChange_flag_tab(i)
2125                    WHERE tmp.rowid = l_rowid_tab(i) ;
2126 
2127             End IF;
2128 
2129         END IF;  --}
2130 	IF P_PA_DEBUG_MODE = 'Y' Then
2131         	print_msg('End of Compare_bdgtLine_Values api ReturnStatus['||x_return_status||']');
2132 	End If;
2133 
2134 EXCEPTION
2135         WHEN OTHERS THEN
2136                 x_return_status := 'U';
2137                 x_msg_data := sqlcode||sqlerrm;
2138                 print_msg('Failed in Compare_bdgtLine_Values API'||x_msg_data);
2139                  fnd_msg_pub.add_exc_msg
2140                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
2141                  ,p_procedure_name => 'Compare_bdgtLine_Values');
2142                 RAISE;
2143 
2144 END Compare_bdgtLine_Values;
2145 
2146 /* IPM Changes: This is the new api created to handle to massag the data before calling the spread
2147  * for non-rate based resources.
2148  * This API sets the rate overrides for a non-rate base resources when any of the planning
2149  * resource attributes such as spread curve, plan dates, etc changes and when user perform
2150  * the distribute(re-spread) action from periodic page.
2151  * Test Cases: When user enters say revenue only for a planning resource
2152  * from periodic page and presses distribute button. The process should distribute revenue only
2153  * it should not derive raw cost or burden cost for all other feilds.
2154  */
2155 
2156 PROCEDURE process_NonRtBsRec_forSprd
2157 		(p_budget_version_id              IN  Number
2158                 ,p_source_context                IN  pa_fp_res_assignments_tmp.source_context%TYPE
2159                 ,x_return_status                 OUT NOCOPY VARCHAR2
2160                 ) IS
2161 
2162         CURSOR cur_NonRtBsRecs IS
2163         SELECT tmp.resource_assignment_id
2164                 ,tmp.txn_currency_code
2165                 ,tmp.start_date
2166                 ,tmp.end_date
2167                 ,ra.resource_rate_based_flag
2168                 ,ra.rate_based_flag
2169                 ,tmp.raw_cost_changed_flag
2170                 ,tmp.burden_cost_changed_flag
2171                 ,tmp.revenue_changed_flag
2172                 ,tmp.revenue_only_entered_flag
2173                 ,tmp.burden_only_entered_flag
2174 		,tmp.bl_txn_raw_cost
2175 		,tmp.bl_txn_burdened_cost
2176 		,tmp.bl_txn_revenue
2177 		,tmp.BL_TXN_INIT_RAW_COST
2178                 ,tmp.BL_TXN_INIT_BURDENED_COST
2179                 ,tmp.BL_TXN_INIT_REVENUE
2180                 ,NVL(tmp.RE_SPREAD_AMTS_FLAG,'N')  re_spread_amts_flag
2181                 ,NVL(tmp.SP_CURVE_CHANGE_FLAG,'N')  sp_curve_change_flag
2182                 ,NVL(tmp.PLAN_DATES_CHANGE_FLAG,'N') plan_dates_change_flag
2183                 ,NVL(tmp.SP_FIX_DATE_CHANGE_FLAG,'N') spfix_date_change_flag
2184                 ,NVL(tmp.MFC_COST_CHANGE_FLAG,'N') mfc_cost_change_flag
2185                 ,NVL(tmp.RLM_ID_CHANGE_FLAG,'N') rlm_id_change_flag
2186                 ,NVL(tmp.system_reference_var1 ,'N') ra_in_multi_cur_flag
2187         FROM pa_fp_spread_calc_tmp tmp
2188                 ,pa_resource_assignments ra
2189         WHERE tmp.budget_version_id = p_budget_version_id
2190         AND   tmp.resource_assignment_id = ra.resource_assignment_id
2191         AND   ra.rate_based_flag = 'N'
2192         AND   ( (NVL(tmp.bl_txn_raw_cost,0) = nvl(tmp.bl_quantity,0)
2193 		and NVL(tmp.bl_txn_raw_cost,0) <> 0 )
2194 	        OR
2195 		(NVL(tmp.bl_txn_revenue,0) = nvl(tmp.bl_quantity,0)
2196 		 and NVL(tmp.bl_txn_revenue,0) <> 0)
2197 	      )
2198 	 and  (nvl(tmp.bl_txn_raw_cost,0) - nvl(tmp.bl_txn_init_raw_cost,0)) <> 0 --Added for bug 6842835
2199 	AND  (NVL(tmp.RE_SPREAD_AMTS_FLAG,'N')  = 'Y'
2200               OR NVL(tmp.SP_CURVE_CHANGE_FLAG,'N')  = 'Y'
2201               OR NVL(tmp.PLAN_DATES_CHANGE_FLAG,'N') = 'Y'
2202               OR NVL(tmp.SP_FIX_DATE_CHANGE_FLAG,'N') = 'Y'
2203               --OR NVL(tmp.MFC_COST_CHANGE_FLAG,'N') = 'Y'
2204               OR NVL(tmp.RLM_ID_CHANGE_FLAG,'N') = 'Y'
2205 	     );
2206 
2207         l_resource_assignment_tab       pa_plsql_datatypes.NumTabTyp;
2208         l_txn_currency_code_tab         pa_plsql_datatypes.Char50TabTyp;
2209         l_start_date_tab                pa_plsql_datatypes.DateTabTyp;
2210         l_end_date_tab                  pa_plsql_datatypes.DateTabTyp;
2211         l_bilRtSetFlag_Tab              pa_plsql_datatypes.Char1TabTyp;
2212         l_resetamts_Tab         pa_plsql_datatypes.Char1TabTyp;
2213         l_bl_resprd_flag_tab            pa_plsql_datatypes.Char1TabTyp;
2214 	l_cost_rate_override_tab        pa_plsql_datatypes.NumTabTyp;
2215 	l_burden_rate_override_tab      pa_plsql_datatypes.NumTabTyp;
2216 	l_bill_rate_override_tab        pa_plsql_datatypes.NumTabTyp;
2217         l_Cntr                          INTEGER := 0;
2218 
2219 
2220 BEGIN
2221         x_return_status := 'S';
2222         l_resource_assignment_tab.delete;
2223         l_txn_currency_code_tab.delete;
2224         l_start_date_tab.delete;
2225         l_end_date_tab.delete;
2226         l_bilRtSetFlag_Tab.delete;
2227         l_bl_resprd_flag_tab.delete;
2228         l_resetAmts_Tab.delete;
2229 	l_cost_rate_override_tab.delete;
2230         l_burden_rate_override_tab.delete;
2231         l_bill_rate_override_tab.delete;
2232         l_Cntr := 0;
2233         IF g_wp_version_flag = 'N' Then
2234 		IF P_PA_DEBUG_MODE = 'Y' Then
2235 		print_msg('Entered process_NonRtBsRec_forSprd API');
2236 		End If;
2237 		FOR i IN cur_NonRtBsRecs LOOP
2238 		   l_Cntr := l_Cntr +1 ;
2239 		   l_resource_assignment_tab(l_Cntr) := i.resource_assignment_id;
2240                    l_txn_currency_code_tab(l_Cntr) := i.txn_currency_code;
2241                    l_start_date_tab(l_Cntr) := i.start_date;
2242                    l_end_date_tab(l_Cntr) := i.end_date;
2243 		   l_cost_rate_override_tab(l_Cntr) := NULL;
2244         	   l_burden_rate_override_tab(l_Cntr) := NULL;
2245         	   l_bill_rate_override_tab(l_Cntr) := NULL;
2246 		   If g_budget_version_type = 'ALL' Then
2247 			If i.bl_txn_raw_cost is NULL Then
2248 			   -- revenue only record
2249 			   l_cost_rate_override_tab(l_Cntr) := 0;
2250 			   l_burden_rate_override_tab(l_Cntr) := 0;
2251 			   l_bill_rate_override_tab(l_Cntr) := 1;
2252 			Else
2253 			   l_cost_rate_override_tab(l_Cntr) := 1;
2254                            l_burden_rate_override_tab(l_Cntr) :=
2255 				(nvl(i.bl_txn_burdened_cost,0) - nvl(i.bl_txn_init_burdened_cost,0))/
2256 				 (nvl(i.bl_txn_raw_cost,0) - nvl(i.bl_txn_init_raw_cost,0));
2257 			   If i.bl_txn_revenue is NOT NULL Then
2258                               l_bill_rate_override_tab(l_Cntr) :=
2259 				(nvl(i.bl_txn_revenue,0) - nvl(i.bl_txn_init_revenue,0))/
2260 				 (nvl(i.bl_txn_raw_cost,0) - nvl(i.bl_txn_init_raw_cost,0));
2261 			   End If;
2262 			End If;
2263 		   Elsif g_budget_version_type = 'COST' Then
2264 			   l_cost_rate_override_tab(l_Cntr) := 1;
2265                            l_burden_rate_override_tab(l_Cntr) :=
2266                                 (nvl(i.bl_txn_burdened_cost,0) - nvl(i.bl_txn_init_burdened_cost,0))/
2267                                  (nvl(i.bl_txn_raw_cost,0) - nvl(i.bl_txn_init_raw_cost,0));
2268 		   Elsif g_budget_version_type = 'REVENUE' Then
2269 			   l_bill_rate_override_tab(l_Cntr) := 1;
2270 		   End If;
2271 		END LOOP;
2272 	End If;
2273 
2274 	If l_resource_assignment_tab.COUNT > 0 Then
2275 		FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
2276                   UPDATE pa_resource_asgn_curr rtx
2277                   SET   rtx.txn_raw_cost_rate_override = l_cost_rate_override_tab(i)
2278                         ,rtx.txn_burden_cost_rate_override = l_burden_rate_override_tab(i)
2279                         ,rtx.txn_bill_rate_override = l_bill_rate_override_tab(i)
2280                    WHERE rtx.resource_assignment_id = l_resource_assignment_tab(i)
2281                    AND rtx.txn_currency_code = l_txn_currency_code_tab(i);
2282 
2283 		FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
2284                 UPDATE pa_budget_lines bl
2285                 SET bl.txn_bill_rate_override = l_bill_rate_override_tab(i)
2286                     ,bl.txn_cost_rate_override = l_cost_rate_override_tab(i)
2287                     ,bl.burden_cost_rate_override = l_burden_rate_override_tab(i)
2288                 WHERE bl.resource_assignment_id = l_resource_assignment_tab(i)
2289                 AND  bl.txn_currency_code = l_txn_currency_code_tab(i);
2290 
2291 		FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
2292                    UPDATE /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP_N1) */ pa_fp_spread_calc_tmp tmp
2293                    SET  tmp.cost_rate_override = l_cost_rate_override_tab(i)
2294 			,tmp.burden_cost_rate_override = l_burden_rate_override_tab(i)
2295 			,tmp.bill_rate_override = l_bill_rate_override_tab(i)
2296                    WHERE tmp.resource_assignment_id = l_resource_assignment_tab(i)
2297                    AND  tmp.txn_currency_code = l_txn_currency_code_tab(i);
2298 
2299 	End If;
2300 
2301 
2302 EXCEPTION
2303         WHEN OTHERS THEN
2304                 x_return_status := 'U';
2305                 print_msg('Failed in process_NonRtBsRec_forSprd'||sqlcode||sqlerrm);
2306                  fnd_msg_pub.add_exc_msg
2307                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
2308                  ,p_procedure_name => 'process_NonRtBsRec_forSprd');
2309                 RAISE;
2310 END process_NonRtBsRec_forSprd;
2311 
2312 
2313 /* This API is newly added to handle the mixture of revenue only in some priodic lines
2314  * and cost and revenue together in some periodic lines for ALL (cost and revenue together)
2315  * version.
2316  * Test Case1: When user enters raw cost or burden cost for a planning resource
2317  *             that has revenue only entered earlier.
2318  * Test case2: When planning resource attribute changes / re-spreads for
2319  *             a mixture of revenue only and cost and revenue lines
2320  */
2321 PROCEDURE pre_process_Revenue_Only_Recs
2322 		(p_budget_version_id              IN  Number
2323                 ,p_source_context                IN  pa_fp_res_assignments_tmp.source_context%TYPE
2324                 ,x_return_status                 OUT NOCOPY VARCHAR2
2325                 ) IS
2326 
2327 	CURSOR cur_RevOnlyRecs IS
2328 	SELECT tmp.resource_assignment_id
2329 		,tmp.txn_currency_code
2330 		,tmp.start_date
2331 		,tmp.end_date
2332 		,ra.resource_rate_based_flag
2333 		,ra.rate_based_flag
2334 		,tmp.raw_cost_changed_flag
2335 		,tmp.burden_cost_changed_flag
2336 		,tmp.revenue_changed_flag
2337 		,tmp.revenue_only_entered_flag
2338 		,tmp.burden_only_entered_flag
2339 		,tmp.txn_raw_cost
2340 		,tmp.txn_burdened_cost
2341 		,tmp.txn_revenue
2342 		,tmp.BL_TXN_INIT_RAW_COST
2343                 ,tmp.BL_TXN_INIT_BURDENED_COST
2344                 ,tmp.BL_TXN_INIT_REVENUE
2345 		,tmp.bl_txn_raw_cost
2346 		,tmp.bl_quantity
2347 		,NVL(tmp.RE_SPREAD_AMTS_FLAG,'N')  re_spread_amts_flag
2348                 ,NVL(tmp.SP_CURVE_CHANGE_FLAG,'N')  sp_curve_change_flag
2349                 ,NVL(tmp.PLAN_DATES_CHANGE_FLAG,'N') plan_dates_change_flag
2350                 ,NVL(tmp.SP_FIX_DATE_CHANGE_FLAG,'N') spfix_date_change_flag
2351                 ,NVL(tmp.MFC_COST_CHANGE_FLAG,'N') mfc_cost_change_flag
2352 		,NVL(tmp.RLM_ID_CHANGE_FLAG,'N') rlm_id_change_flag
2353 		,NVL(tmp.system_reference_var1 ,'N') ra_in_multi_cur_flag
2354 		,NVL(tmp.DELETE_BL_FLAG,'N') delete_bl_flag
2355 	FROM pa_fp_spread_calc_tmp tmp
2356 		,pa_resource_assignments ra
2357 	WHERE tmp.budget_version_id = p_budget_version_id
2358 	AND   tmp.resource_assignment_id = ra.resource_assignment_id
2359 	AND   nvl(ra.rate_based_flag,'N') = 'N'
2360 	AND   NVL(tmp.quantity_changed_flag,'N') = 'N'
2361 	AND   NVL(tmp.bl_txn_raw_cost,0) <> 0
2362 	AND   NVL(tmp.bl_txn_raw_cost,0) <> nvl(tmp.bl_quantity,0)
2363 	AND   NVL(tmp.revenue_only_entered_flag,'N') <> 'Y'
2364 	/*AND   NVL(tmp.RE_SPREAD_AMTS_FLAG,'N')  = 'N'
2365         AND   NVL(tmp.SP_CURVE_CHANGE_FLAG,'N')  = 'N'
2366         AND   NVL(tmp.PLAN_DATES_CHANGE_FLAG,'N') = 'N'
2367         AND   NVL(tmp.SP_FIX_DATE_CHANGE_FLAG,'N') = 'N'
2368         AND   NVL(tmp.RLM_ID_CHANGE_FLAG,'N') = 'N'
2369 	*/
2370 	AND   NVL(tmp.DELETE_BL_FLAG,'N') = 'N'
2371 	AND   EXISTS ( select null
2372 			from pa_budget_lines bl
2373 			where bl.resource_assignment_id = tmp.resource_assignment_id
2374 			and   bl.txn_currency_code = tmp.txn_currency_code
2375 			and   ((p_source_context = 'BUDGET_LINE'
2376 				and bl.start_date between tmp.start_date and tmp.end_date)
2377 				OR
2378 				p_source_context <> 'BUDGET_LINE'
2379 				)
2380 		    );
2381 
2382     	l_resource_assignment_tab   	pa_plsql_datatypes.NumTabTyp;
2383     	l_txn_currency_code_tab     	pa_plsql_datatypes.Char50TabTyp;
2384     	l_start_date_tab             	pa_plsql_datatypes.DateTabTyp;
2385     	l_end_date_tab             	pa_plsql_datatypes.DateTabTyp;
2386 	l_bilRtSetFlag_Tab   		pa_plsql_datatypes.Char1TabTyp;
2387 	l_resetamts_Tab		pa_plsql_datatypes.Char1TabTyp;
2388 	l_bl_resprd_flag_tab            pa_plsql_datatypes.Char1TabTyp;
2389 	l_Cntr				INTEGER := 0;
2390 	l_cost_rate_override_tab        pa_plsql_datatypes.NumTabTyp;
2391         l_burden_rate_override_tab      pa_plsql_datatypes.NumTabTyp;
2392         l_bill_rate_override_tab        pa_plsql_datatypes.NumTabTyp;
2393 
2394 BEGIN
2395 	x_return_status := 'S';
2396 	IF P_PA_DEBUG_MODE = 'Y' Then
2397 	print_msg('1: Inside pre_process_Revenue_Only_Recs api');
2398 	End If;
2399 	l_resource_assignment_tab.delete;
2400         l_txn_currency_code_tab.delete;
2401         l_start_date_tab.delete;
2402         l_end_date_tab.delete;
2403         l_bilRtSetFlag_Tab.delete;
2404 	l_bl_resprd_flag_tab.delete;
2405 	l_resetAmts_Tab.delete;
2406 	l_cost_rate_override_tab.delete;
2407         l_burden_rate_override_tab.delete;
2408         l_bill_rate_override_tab.delete;
2409 	l_Cntr := 0;
2410 	IF g_wp_version_flag = 'N' AND g_budget_version_type = 'ALL' Then
2411 	   FOR i IN cur_RevOnlyRecs LOOP
2412 		--print_msg('inside loop: rawCost['||i.bl_txn_raw_cost||']qty['||i.bl_quantity||']');
2413 		l_Cntr := l_Cntr +1 ;
2414 		If (NVL(i.re_spread_amts_flag,'N' ) = 'Y'
2415                    	OR i.sp_curve_change_flag = 'Y'
2416                		OR i.spfix_date_change_flag = 'Y'
2417                		OR i.rlm_id_change_flag = 'Y'
2418                    	OR (nvl(i.ra_in_multi_cur_flag,'N') = 'N'
2419 			   AND i.plan_dates_change_flag = 'Y') ) Then
2420 			--print_msg('1.1: Resetting Amnts and Rate overrides Resource attribute changes');
2421 			l_resetAmts_Tab(l_Cntr) := 'Y';
2422                         l_resource_assignment_tab(l_Cntr) := i.resource_assignment_id;
2423                         l_txn_currency_code_tab(l_Cntr) := i.txn_currency_code;
2424                         l_start_date_tab(l_Cntr) := i.start_date;
2425                         l_end_date_tab(l_Cntr) := i.end_date;
2426 
2427 		Elsif (NVL(i.raw_cost_changed_flag,'N') = 'Y'
2428 		   OR (nvl(i.burden_cost_changed_flag,'N') = 'Y'
2429 			and nvl(i.burden_only_entered_flag,'N') = 'Y')) Then
2430 			--print_msg('1.2:Resetting bill rates for mix of rev and cost and reve lines ');
2431 			l_bilRtSetFlag_Tab(l_Cntr) := 'Y';
2432 			l_resource_assignment_tab(l_Cntr) := i.resource_assignment_id;
2433 			l_txn_currency_code_tab(l_Cntr) := i.txn_currency_code;
2434 			l_start_date_tab(l_Cntr) := i.start_date;
2435 			l_end_date_tab(l_Cntr) := i.end_date;
2436 			l_bl_resprd_flag_tab(l_Cntr) := 'Y';
2437 			l_cost_rate_override_tab(l_Cntr) := NULL;
2438                    	l_burden_rate_override_tab(l_Cntr) := NULL;
2439                    	l_bill_rate_override_tab(l_Cntr) := NULL;
2440 			If nvl(i.burden_cost_changed_flag,'N') = 'Y' Then
2441 				l_burden_rate_override_tab(l_Cntr) :=
2442 					(NVL(i.txn_burdened_cost,0)-nvl(i.bl_txn_init_burdened_cost,0))/
2443 					(nvl(i.txn_raw_cost,0) - nvl(i.bl_txn_init_raw_cost,0));
2444 			End If;
2445 			If nvl(i.revenue_changed_flag,'N') = 'Y' Then
2446 				l_bill_rate_override_tab(l_Cntr) :=
2447 					(nvl(i.txn_revenue,0) - nvl(i.bl_txn_init_revenue,0))/
2448 					(nvl(i.txn_raw_cost,0) - nvl(i.bl_txn_init_raw_cost,0));
2449 			End If;
2450 		End If;
2451 	   END LOOP;
2452 
2453 	   /* rederive the budget rate overrides on the budget lines to retain the amounts
2454 	    * in case of re spread, planning dates change etc
2455 	    */
2456 	   If p_source_context = 'RESOURCE_ASSIGNMENT' and l_resetAmts_Tab.COUNT > 0 Then --{
2457 		IF P_PA_DEBUG_MODE = 'Y' Then
2458 		print_msg('1.3: Upd Resource asgn cur with rate overrides ');
2459 		End If;
2460 		FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
2461                   UPDATE pa_resource_asgn_curr rtx
2462                   SET   (rtx.txn_raw_cost_rate_override
2463 			,rtx.txn_burden_cost_rate_override
2464 			,rtx.txn_bill_rate_override) =
2465                         (select decode(sum(nvl(bl.txn_raw_cost,0) - nvl(bl.txn_init_raw_cost,0)),0,rtx.txn_raw_cost_rate_override,1)
2466 				,decode(sum(nvl(bl.txn_raw_cost,0) - nvl(bl.txn_init_raw_cost,0)),0,0
2467 					,(sum(nvl(bl.txn_burdened_cost,0) - nvl(bl.txn_init_burdened_cost,0))/
2468 					(sum(nvl(bl.txn_raw_cost,0) - nvl(bl.txn_init_raw_cost,0)))))
2469 				,decode(sum(nvl(bl.txn_revenue,0)-nvl(bl.txn_init_revenue,0)),0,rtx.txn_bill_rate_override
2470 					,(sum(nvl(bl.txn_revenue,0)-nvl(bl.txn_init_revenue,0)))/
2471 					 (sum(nvl(bl.txn_raw_cost,0) - nvl(bl.txn_init_raw_cost,0))))
2472                         from pa_budget_lines bl
2473                         where bl.resource_assignment_id = rtx.resource_assignment_id
2474                         and bl.txn_currency_code = rtx.txn_currency_code
2475                         )
2476                    WHERE rtx.resource_assignment_id = l_resource_assignment_tab(i)
2477                    AND rtx.txn_currency_code = l_txn_currency_code_tab(i)
2478                    AND EXISTS (select null
2479 				from pa_budget_lines bl1
2480 				where bl1.resource_assignment_id = rtx.resource_assignment_id
2481 				and bl1.txn_currency_code = rtx.txn_currency_code
2482 				);
2483 
2484 		/* Now spread the raw cost: so copy raw cost to quantity param */
2485 		IF P_PA_DEBUG_MODE = 'Y' Then
2486 		print_msg('1.4: Update spread calc tmp with quantity = raw cost');
2487 		End If;
2488 		FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
2489                    UPDATE /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP_N1) */ pa_fp_spread_calc_tmp tmp
2490                    SET tmp.quantity =
2491 				(select decode(sum(bl.txn_raw_cost),NULL,sum(bl.txn_revenue),sum(bl.txn_raw_cost))
2492 				from pa_budget_lines bl
2493                         	where bl.resource_assignment_id = tmp.resource_assignment_id
2494                         	and bl.txn_currency_code = tmp.txn_currency_code
2495 				)
2496                    WHERE tmp.resource_assignment_id = l_resource_assignment_tab(i)
2497                    AND  tmp.txn_currency_code = l_txn_currency_code_tab(i)
2498 		   AND EXISTS (select null
2499                                 from pa_budget_lines bl1
2500                                 where bl1.resource_assignment_id = tmp.resource_assignment_id
2501                                 and bl1.txn_currency_code = tmp.txn_currency_code
2502                                 );
2503 
2504 		--print_msg('1.5: update budget lines set override rates to null');
2505 		FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
2506                 UPDATE pa_budget_lines bl
2507                 SET bl.txn_bill_rate_override = null
2508 		    ,bl.burden_cost_rate_override = null
2509                     ,bl.txn_cost_rate_override = 1
2510                 WHERE bl.resource_assignment_id = l_resource_assignment_tab(i)
2511                 AND  bl.txn_currency_code = l_txn_currency_code_tab(i);
2512 	   End If; --} // end of sprd processing
2513 
2514 	   If l_bilRtSetFlag_Tab.count > 0 Then --{
2515 		--print_msg('1.1.1: Update budget lines to set override rates');
2516 		FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
2517 		UPDATE pa_budget_lines bl
2518 		SET bl.txn_bill_rate_override = l_bill_rate_override_tab(i)
2519 			/* bug fix: 5089153 stamp bill rate override only if revenue is changed along with cost
2520 			decode(bl.txn_cost_rate_override,0
2521 			,decode(bl.txn_bill_rate_override,1,l_bill_rate_override_tab(i)
2522 				,nvl(l_bill_rate_override_tab(i),bl.txn_bill_rate_override))
2523 			,decode(bl.txn_bill_rate_override,1,l_bill_rate_override_tab(i)
2524 				,nvl(l_bill_rate_override_tab(i),bl.txn_bill_rate_override))) */
2525 		    ,bl.txn_cost_rate_override = 1
2526 		    ,bl.burden_cost_rate_override =
2527 			decode(bl.txn_cost_rate_override,0,l_burden_rate_override_tab(i)
2528 				,NULL,l_burden_rate_override_tab(i)
2529 				,NVL(l_burden_rate_override_tab(i),bl.burden_cost_rate_override))
2530 		WHERE bl.resource_assignment_id = l_resource_assignment_tab(i)
2531 		AND  bl.txn_currency_code = l_txn_currency_code_tab(i)
2532 		AND  ((p_source_context = 'BUDGET_LINE'
2533                        and bl.start_date between l_start_date_tab(i) and l_end_date_tab(i))
2534                        OR
2535                        p_source_context <> 'BUDGET_LINE'
2536                      );
2537 
2538 		If p_source_context <> 'BUDGET_LINE' Then
2539 		  --print_msg('1.1.2: update resource asgn cur to set rate overrides');
2540 		  FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
2541 		  UPDATE pa_resource_asgn_curr rtx
2542 		  SET (rtx.txn_bill_rate_override
2543 			,rtx.txn_burden_cost_rate_override ) =
2544 			(select decode(rtx.txn_bill_rate_override,NULL
2545 				  ,nvl(l_bill_rate_override_tab(i),rtx.txn_bill_rate_override)
2546 				,decode((nvl(tmp.bl_txn_raw_cost,0)-nvl(tmp.bl_txn_init_raw_cost,0)),0
2547 				 ,nvl(l_bill_rate_override_tab(i),rtx.txn_bill_rate_override)
2548 			          ,((tmp.txn_revenue - nvl(tmp.bl_txn_init_revenue,0))/
2549 				  (nvl(tmp.bl_txn_raw_cost,0)-nvl(tmp.bl_txn_init_raw_cost,0)))))
2550 			  ,decode(nvl(tmp.burden_cost_changed_flag,'N'), 'Y'
2551 					,nvl(l_burden_rate_override_tab(i),rtx.txn_burden_cost_rate_override))
2552 		  	from pa_fp_spread_calc_tmp tmp
2553 			where tmp.resource_assignment_id = rtx.resource_assignment_id
2554 			and tmp.txn_currency_code = rtx.txn_currency_code
2555 			and tmp.raw_cost_changed_flag = 'Y'
2556 			)
2557 		   WHERE rtx.resource_assignment_id = l_resource_assignment_tab(i)
2558 		   AND rtx.txn_currency_code = l_txn_currency_code_tab(i)
2559 		   ;
2560 
2561 		End If;
2562 		--print_msg('1.1.3: update spread calc tmp to rate overrides');
2563 		   FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
2564 		   UPDATE /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP_N1) */ pa_fp_spread_calc_tmp tmp
2565 		   SET tmp.re_spread_amts_flag =
2566 				decode(tmp.re_spread_amts_flag,'Y','Y',l_bl_resprd_flag_tab(i))
2567 			,tmp.delete_bl_flag = decode(tmp.delete_bl_flag,'Y','Y'
2568 				,decode(l_bl_resprd_flag_tab(i),'Y','Y',tmp.delete_bl_flag))
2569 			,tmp.bill_rate_override =
2570 				nvl(l_bill_rate_override_tab(i),tmp.bill_rate_override)
2571 			,tmp.burden_cost_rate_override =
2572 				nvl(l_burden_rate_override_tab(i),tmp.burden_cost_rate_override)
2573 			/* bug fix:5463690 */
2574  	                ,tmp.NEG_QUANTITY_CHANGE_FLAG  = decode(nvl(l_bl_resprd_flag_tab(i),'N'),'Y','N'
2575  	                                                         ,tmp.NEG_QUANTITY_CHANGE_FLAG)
2576  	                ,tmp.NEG_RAWCOST_CHANGE_FLAG = decode(nvl(l_bl_resprd_flag_tab(i),'N'),'Y','N'
2577  	                                                         ,tmp.NEG_RAWCOST_CHANGE_FLAG)
2578  	                ,tmp.NEG_BURDEN_CHANGE_FALG = decode(nvl(l_bl_resprd_flag_tab(i),'N'),'Y','N'
2579  	                                                         ,tmp.NEG_BURDEN_CHANGE_FALG)
2580  	                ,tmp.NEG_REVENUE_CHANGE_FLAG = decode(nvl(l_bl_resprd_flag_tab(i),'N'),'Y','N'
2581  	                                                         ,tmp.NEG_REVENUE_CHANGE_FLAG)
2582 		   WHERE tmp.resource_assignment_id = l_resource_assignment_tab(i)
2583                    AND  tmp.txn_currency_code = l_txn_currency_code_tab(i)
2584                    AND  ((p_source_context = 'BUDGET_LINE'
2585                        and tmp.start_date = l_start_date_tab(i) )
2586                        OR
2587                        p_source_context <> 'BUDGET_LINE'
2588                      );
2589 
2590 	   End If; --}
2591 	End If;
2592 EXCEPTION
2593         WHEN OTHERS THEN
2594                 x_return_status := 'U';
2595                 print_msg('Failed in pre_process_Revenue_Only_RecsAPI'||sqlcode||sqlerrm);
2596                  fnd_msg_pub.add_exc_msg
2597                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
2598                  ,p_procedure_name => 'pre_process_Revenue_Only_Recs');
2599                 RAISE;
2600 END pre_process_Revenue_Only_Recs;
2601 
2602 /* This api is added as an IPM enhancement request: For a rate based planning transaction if no quantity is passed
2603  * then mark the resource as a Non-Rate planning transaction, Again when user enters quantity and or rates
2604  * revert back the Non-rate base to rate base flag
2605  */
2606 PROCEDURE Reset_ratebased_pltrxns(
2607                 p_budget_version_id              IN  Number
2608                 ,p_source_context                IN  pa_fp_res_assignments_tmp.source_context%TYPE
2609                 ,x_return_status                 OUT NOCOPY VARCHAR2
2610                 ) IS
2611 
2612     l_resource_assignment_tab   pa_plsql_datatypes.NumTabTyp;
2613     l_txn_currency_code_tab     pa_plsql_datatypes.Char50TabTyp;
2614     l_start_date_tab             pa_plsql_datatypes.DateTabTyp;
2615     l_end_date_tab               pa_plsql_datatypes.DateTabTyp;
2616     l_period_name_tab            pa_plsql_datatypes.Char50TabTyp;
2617     l_quantity_tab              pa_plsql_datatypes.NumTabTyp;
2618     l_raw_cost_tab              pa_plsql_datatypes.NumTabTyp;
2619     l_burden_cost_tab           pa_plsql_datatypes.NumTabTyp;
2620     l_revenue_tab               pa_plsql_datatypes.NumTabTyp;
2621     l_revenue_only_flag_tab     pa_plsql_datatypes.Char1TabTyp;
2622     l_burden_only_flag_tab     pa_plsql_datatypes.Char1TabTyp;
2623     l_reset_rate_based_flag_tab pa_plsql_datatypes.Char1TabTyp;
2624     l_bd_cost_rate_override_tab pa_plsql_datatypes.NumTabTyp;
2625     l_rw_cost_rate_override_tab pa_plsql_datatypes.NumTabTyp;
2626     l_bill_rate_override_tab    pa_plsql_datatypes.NumTabTyp;
2627     l_mark_non_rate_base_flag   Varchar2(1);
2628     l_exists_flag               Varchar2(1);
2629     l_tbl_counter               Number;
2630     l_start_date            DATE;
2631     l_end_date          DATE;
2632     l_uom_tab			pa_plsql_datatypes.Char30TabTyp;
2633 	l_rwRtSetFlag_Tab	pa_plsql_datatypes.Char1TabTyp;
2634            l_bilRtSetFlag_Tab	pa_plsql_datatypes.Char1TabTyp;
2635 	l_bdRtSetFlag_tab	pa_plsql_datatypes.Char1TabTyp;
2636 	l_reCalcbdRt_Tab	pa_plsql_datatypes.Char1TabTyp;
2637         l_reCalcBilRt_Tab	pa_plsql_datatypes.Char1TabTyp;
2638 	l_costRt_g_miss_num_flag_tab pa_plsql_datatypes.Char1TabTyp;
2639         l_burdRt_g_miss_num_flag_tab pa_plsql_datatypes.Char1TabTyp;
2640         l_revRt_g_miss_num_flag_tab  pa_plsql_datatypes.Char1TabTyp;
2641 
2642     Cursor cur_ra IS
2643     SELECT tmp.resource_assignment_id
2644         ,tmp.txn_currency_code
2645         ,tmp.quantity
2646         ,tmp.txn_raw_cost
2647         ,tmp.txn_burdened_cost
2648         ,tmp.txn_revenue
2649         ,g_budget_version_type  version_type
2650         ,tmp.start_date
2651         ,tmp.end_date
2652         ,rlm.alias
2653         ,g_budget_version_name  version_name
2654         ,tmp.bl_quantity
2655 	,tmp.bl_txn_raw_cost
2656 	,tmp.bl_cost_rate_override bl_rw_cost_rate
2657 	,tmp.bl_burden_cost_rate_override bl_burd_rate
2658 	,tmp.bl_bill_rate_override bl_bill_rate
2659 	,tmp.cost_rate_override
2660 	,tmp.burden_cost_rate_override
2661 	,tmp.bill_rate_override
2662 	,tmp.bl_init_quantity  		init_quantity
2663 	,tmp.bl_txn_init_raw_cost 	txn_init_raw_cost
2664 	,tmp.bl_txn_init_burdened_cost 	txn_init_burdened_cost
2665 	,tmp.bl_txn_init_revenue	txn_init_revenue
2666         ,NVL(ra.resource_rate_based_flag,'N') resource_rate_based_flag
2667 	,NVL(ra.rate_based_flag ,'N') rate_based_flag
2668 	,rlm.unit_of_measure UOM
2669 	,ra.unit_of_measure currentUOM
2670 	,NVL(tmp.quantity_changed_flag,'N') quantity_changed_flag
2671 	,NVL(tmp.cost_rate_changed_flag,'N') cost_rate_changed_flag
2672 	,NVL(tmp.burden_rate_changed_flag,'N') burden_rate_changed_flag
2673 	,NVL(tmp.bill_rate_changed_flag,'N') bill_rate_changed_flag
2674 	,NVL(tmp.raw_cost_changed_flag,'N') raw_cost_changed_flag
2675 	,NVL(tmp.burden_cost_changed_flag,'N') burden_cost_changed_flag
2676 	,NVL(tmp.revenue_changed_flag,'N') revenue_changed_flag
2677     FROM pa_fp_spread_calc_tmp tmp
2678         ,pa_resource_assignments ra
2679         ,pa_resource_list_members rlm
2680     WHERE ra.budget_version_id = p_budget_version_id
2681     AND  ra.resource_assignment_id = tmp.resource_assignment_id
2682     AND  rlm.resource_list_member_id = ra.resource_list_member_id
2683     AND  NVL(ra.rate_based_flag,'N') <> NVL(ra.resource_rate_based_flag,'N')
2684     AND  NVL(ra.resource_rate_based_flag,'N') = 'Y'
2685     ORDER BY tmp.resource_assignment_id,tmp.txn_currency_code;
2686 
2687     Cursor cur_NonRtRas IS
2688     SELECT tmp.resource_assignment_id
2689         ,tmp.txn_currency_code
2690         ,tmp.quantity
2691         ,tmp.txn_raw_cost
2692         ,tmp.txn_burdened_cost
2693         ,tmp.txn_revenue
2694         ,g_budget_version_type  version_type
2695         ,tmp.start_date
2696         ,tmp.end_date
2697         ,rlm.alias
2698         ,g_budget_version_name  version_name
2699         ,tmp.bl_quantity
2700 	,tmp.bl_txn_raw_cost
2701         ,tmp.bl_cost_rate_override bl_rw_cost_rate
2702         ,tmp.bl_burden_cost_rate_override bl_burd_rate
2703 	,tmp.bl_bill_rate_override bl_bill_rate
2704         ,tmp.cost_rate_override
2705         ,tmp.burden_cost_rate_override
2706         ,tmp.bill_rate_override
2707 	,tmp.bl_init_quantity           init_quantity
2708         ,tmp.bl_txn_init_raw_cost       txn_init_raw_cost
2709         ,tmp.bl_txn_init_burdened_cost  txn_init_burdened_cost
2710         ,tmp.bl_txn_init_revenue        txn_init_revenue
2711         ,NVL(ra.resource_rate_based_flag,'N') resource_rate_based_flag
2712         ,NVL(ra.rate_based_flag ,'N') rate_based_flag
2713         ,rlm.unit_of_measure UOM
2714 	,ra.unit_of_measure currentUOM
2715         ,NVL(tmp.quantity_changed_flag,'N') quantity_changed_flag
2716         ,NVL(tmp.cost_rate_changed_flag,'N') cost_rate_changed_flag
2717         ,NVL(tmp.burden_rate_changed_flag,'N') burden_rate_changed_flag
2718         ,NVL(tmp.bill_rate_changed_flag,'N') bill_rate_changed_flag
2719         ,NVL(tmp.raw_cost_changed_flag,'N') raw_cost_changed_flag
2720         ,NVL(tmp.burden_cost_changed_flag,'N') burden_cost_changed_flag
2721         ,NVL(tmp.revenue_changed_flag,'N') revenue_changed_flag
2722 	,tmp.bill_markup_percentage
2723     FROM pa_fp_spread_calc_tmp tmp
2724         ,pa_resource_assignments ra
2725         ,pa_resource_list_members rlm
2726     WHERE ra.budget_version_id = p_budget_version_id
2727     AND  ra.resource_assignment_id = tmp.resource_assignment_id
2728     AND  rlm.resource_list_member_id = ra.resource_list_member_id
2729     AND  NVL(ra.rate_based_flag,'N') = 'N'
2730     AND  ( (tmp.txn_raw_cost is NOT NULL or tmp.txn_revenue is NOT NULL)
2731  	           OR
2732  	        /* added this to pickup the lines where budget line exists and sum raw is zero and sum revenue is zero
2733  	          * and user changed burdened cost only
2734  	        */
2735  	        (nvl(tmp.txn_raw_cost,0)=0 and nvl(tmp.txn_revenue,0) =0 and tmp.txn_burdened_cost is NOT NULL)
2736  	        )
2737     AND  NVL(ra.resource_rate_based_flag,'N') = 'N'
2738     /* bug fix:5726773: commented out this and added exist clause
2739      * reason: when budget line exists and total plan qty is zero, the above cursor fails
2740      * AND  tmp.quantity is not null */
2741  	     AND  EXISTS (select /*+ INDEX(BL PA_BUDGET_LINES_U1) */ null
2742  	                  from pa_budget_lines bl1
2743  	                  where bl1.resource_assignment_id = tmp.resource_assignment_id
2744  	                  and bl1.txn_currency_code = tmp.txn_currency_code
2745  	                  and ((g_source_context = 'BUDGET_LINE'
2746  	                        and bl1.start_date between tmp.start_date and tmp.end_date)
2747  	                         OR
2748  	                        (g_source_context <> 'BUDGET_LINE')
2749  	                      )
2750  	                 )
2751     ORDER BY tmp.resource_assignment_id,tmp.txn_currency_code;
2752 
2753 	l_NonRrtRec_Exists_Exception	EXCEPTION;
2754 	l_NonRrtRec_Exists_Flg		VARCHAR2(1);
2755 
2756 BEGIN
2757 	x_return_status := 'S';
2758 	   l_resource_assignment_tab.delete;
2759            l_txn_currency_code_tab.delete;
2760            l_quantity_tab.delete;
2761            l_raw_cost_tab.delete;
2762            l_burden_cost_tab.delete;
2763            l_revenue_tab.delete;
2764            l_start_date_tab.delete;
2765            l_end_date_tab.delete;
2766            l_revenue_only_flag_tab.delete;
2767 	   l_reset_rate_based_flag_tab.delete;
2768 	   l_bd_cost_rate_override_tab.delete;
2769 	   l_rw_cost_rate_override_tab.delete;
2770 	   l_bill_rate_override_tab.delete;
2771 	   l_uom_tab.delete;
2772 	   l_rwRtSetFlag_Tab.delete;
2773 	   l_bilRtSetFlag_Tab.delete;
2774 	   l_bdRtSetFlag_tab.delete;
2775 	   l_reCalcbdRt_Tab.delete;
2776            l_reCalcBilRt_Tab.delete;
2777 	   l_revenue_only_flag_tab.delete;
2778 	   l_costRt_g_miss_num_flag_tab.delete;
2779            l_burdRt_g_miss_num_flag_tab.delete;
2780            l_revRt_g_miss_num_flag_tab.delete;
2781 	   l_burden_only_flag_tab.delete;
2782 
2783 	  l_tbl_counter := 0;
2784 	   For i IN cur_ra LOOP --{
2785 
2786 		/*
2787 		print_msg('Looping through RAs for Rate Base flg = N and Resource Rate base flag = Y');
2788 		print_msg('OrgRwCst['||i.txn_raw_cost||']Rt['||i.bl_rw_cost_rate||']OrgBurd['||i.txn_burdened_cost||']Rt['||i.bl_burd_rate||']');
2789 		print_msg('OrgRev['||i.txn_revenue||']Rt['||i.bl_bill_rate||']OrgQty['||i.quantity||']');
2790 		print_msg('currentUOM['||i.currentUOM||']ResUOM['||i.UOM||']');
2791 		*/
2792 		l_tbl_counter := l_tbl_counter + 1;
2793 		l_resource_assignment_tab(l_tbl_counter) := i.resource_assignment_id;
2794 		l_txn_currency_code_tab(l_tbl_counter) := i.txn_currency_code;
2795 		l_start_date_tab(l_tbl_counter) := i.start_date;
2796            	l_end_date_tab(l_tbl_counter) := i.end_date;
2797 		l_quantity_tab(l_tbl_counter) := null;
2798 		l_raw_cost_tab(l_tbl_counter) := null;
2799 		l_burden_cost_tab(l_tbl_counter) := null;
2800 		l_revenue_tab(l_tbl_counter) := null;
2801 		l_revenue_only_flag_tab(l_tbl_counter) := 'N';
2802 		l_reset_rate_based_flag_tab(l_tbl_counter) := 'N';
2803 		l_bd_cost_rate_override_tab(l_tbl_counter) := null;
2804            	l_rw_cost_rate_override_tab(l_tbl_counter) := null;
2805            	l_bill_rate_override_tab(l_tbl_counter) := null;
2806 		l_uom_tab(l_tbl_counter) := i.UOM;
2807 		l_rwRtSetFlag_Tab(l_tbl_counter) := 'N';
2808            	l_bilRtSetFlag_Tab(l_tbl_counter) := 'N';
2809 		l_bdRtSetFlag_tab(l_tbl_counter) := 'N';
2810 		l_reCalcbdRt_Tab(l_tbl_counter) := 'N';
2811 		l_reCalcBilRt_Tab(l_tbl_counter) := 'N';
2812 	        l_revenue_only_flag_tab(l_tbl_counter ) := 'N';
2813 		l_costRt_g_miss_num_flag_tab(l_tbl_counter ) := NULL;
2814         	l_burdRt_g_miss_num_flag_tab(l_tbl_counter ) := NULL;
2815         	l_revRt_g_miss_num_flag_tab(l_tbl_counter ) := NULL;
2816 		l_burden_only_flag_tab(l_tbl_counter ) := 'N';
2817 		IF i.version_type = 'COST' Then
2818 		   If i.rate_based_flag = 'N' and i.resource_rate_based_flag = 'Y' Then
2819 			If i.quantity_changed_flag = 'Y' Then
2820 			   l_reset_rate_based_flag_tab(l_tbl_counter) := 'Y';
2821 			   IF i.cost_rate_changed_flag = 'Y'
2822 			       and i.raw_cost_changed_flag = 'Y' Then
2823 				If (nvl(i.quantity,0) - nvl(i.init_quantity,0) <> 0 ) Then
2824 			   	   l_rw_cost_rate_override_tab(l_tbl_counter) :=
2825 					(NVL(i.txn_raw_cost,0) - NVL(i.txn_init_raw_cost,0)) /
2826 						(nvl(i.quantity,0) - nvl(i.init_quantity,0));
2827 				End If;
2828 			   ElsIf i.cost_rate_changed_flag = 'N' and i.raw_cost_changed_flag = 'Y' Then
2829 				If (nvl(i.quantity,0) - nvl(i.init_quantity,0) <> 0 ) Then
2830                                    l_rw_cost_rate_override_tab(l_tbl_counter) :=
2831                                         (NVL(i.txn_raw_cost,0) - NVL(i.txn_init_raw_cost,0)) /
2832                                                 (nvl(i.quantity,0) - nvl(i.init_quantity,0));
2833                                 End If;
2834 			   ElsIf i.cost_rate_changed_flag = 'N' and i.raw_cost_changed_flag = 'N' then
2835 				l_rw_cost_rate_override_tab(l_tbl_counter) := NULL;
2836                                 l_rwRtSetFlag_tab(l_tbl_counter) := 'Y';
2837 			   End if;
2838 
2839 			   If i.burden_cost_changed_flag = 'Y' then
2840 				If (nvl(i.quantity,0) - nvl(i.init_quantity,0) <> 0 ) Then
2841                                    l_bd_cost_rate_override_tab(l_tbl_counter) :=
2842                                         (NVL(i.txn_burdened_cost,0) - NVL(i.txn_init_burdened_cost,0)) /
2843                                                 (nvl(i.quantity,0) - nvl(i.init_quantity,0));
2844                                 End If;
2845                            Elsif i.burden_rate_changed_flag = 'N' Then
2846                                 l_bdRtSetFlag_tab(l_tbl_counter) := 'Y';
2847                                 l_bd_cost_rate_override_tab(l_tbl_counter) := NULL;
2848                            End If;
2849 			Else -- quantity dnot changed
2850 			   IF i.raw_cost_changed_flag = 'Y' and i.burden_cost_changed_flag = 'N'  and nvl(i.bl_burd_rate,0) in (1,0) Then
2851 				l_bdRtSetFlag_tab(l_tbl_counter) := 'Y';
2852                                 l_bd_cost_rate_override_tab(l_tbl_counter) := NULL;
2853 			   End If;
2854 			   If i.burden_cost_changed_flag = 'Y' then
2855                                 If (nvl(i.quantity,0) - nvl(i.init_quantity,0) <> 0 ) Then
2856                                    l_bd_cost_rate_override_tab(l_tbl_counter) :=
2857                                         (NVL(i.txn_burdened_cost,0) - NVL(i.txn_init_burdened_cost,0)) /
2858                                                 (nvl(i.quantity,0) - nvl(i.init_quantity,0));
2859                                 End If;
2860                            End If;
2861 
2862 			End If;
2863 		   End If;
2864 		Elsif i.version_type = 'REVENUE' Then
2865 		   If i.rate_based_flag = 'N' and i.resource_rate_based_flag = 'Y' Then
2866 			If i.quantity_changed_flag = 'Y' Then
2867 			   l_reset_rate_based_flag_tab(l_tbl_counter) := 'Y';
2868                            IF i.bill_rate_changed_flag = 'N'
2869 				and i.revenue_changed_flag = 'Y' Then
2870 				If (nvl(i.quantity,0) - nvl(i.init_quantity,0) <> 0 ) Then
2871                            	    l_bill_rate_override_tab(l_tbl_counter) :=
2872 					(nvl(i.txn_revenue,0) - nvl(i.txn_init_revenue,0)) /
2873 					   (nvl(i.quantity,0) - nvl(i.init_quantity,0));
2874 				End If;
2875 			   Elsif i.bill_rate_changed_flag = 'Y' and i.revenue_changed_flag = 'Y' Then
2876 				If (nvl(i.quantity,0) - nvl(i.init_quantity,0) <> 0 ) Then
2877                                     l_bill_rate_override_tab(l_tbl_counter) :=
2878                                         (nvl(i.txn_revenue,0) - nvl(i.txn_init_revenue,0)) /
2879                                            (nvl(i.quantity,0) - nvl(i.init_quantity,0));
2880                                 End If;
2881 			   Elsif i.bill_rate_changed_flag = 'N' and i.revenue_changed_flag = 'N' Then
2882 				l_bilRtSetFlag_tab(l_tbl_counter) := 'Y';
2883 				l_bill_rate_override_tab(l_tbl_counter) := NULL;
2884 			   End If;
2885 			Else -- quantity is not changed
2886 			   If i.bill_rate_changed_flag = 'Y' Then
2887 			   	l_reCalcBilRt_tab(l_tbl_counter) := 'Y';
2888 			   	l_bill_rate_override_tab(l_tbl_counter) := 1;
2889 			   End If;
2890 			End If;
2891 		   End If;
2892 		Elsif i.version_type = 'ALL' then
2893 		   If i.rate_based_flag = 'N' and i.resource_rate_based_flag = 'Y' Then
2894 			If i.quantity_changed_flag = 'Y' Then
2895 				l_reset_rate_based_flag_tab(l_tbl_counter) := 'Y';
2896 				If i.raw_cost_changed_flag = 'Y' Then
2897 				  If (nvl(i.quantity,0) - nvl(i.init_quantity,0) <> 0 ) Then
2898                                    	l_rw_cost_rate_override_tab(l_tbl_counter) :=
2899                                         (NVL(i.txn_raw_cost,0) - NVL(i.txn_init_raw_cost,0)) /
2900                                                 (nvl(i.quantity,0) - nvl(i.init_quantity,0));
2901                                   End If;
2902 				Elsif i.cost_rate_changed_flag = 'N' Then
2903 					l_rw_cost_rate_override_tab(l_tbl_counter) := NULL;
2904 					l_rwRtSetFlag_tab(l_tbl_counter) := 'Y';
2905 				End If;
2906 				If i.burden_cost_changed_flag = 'Y' then
2907 				  If (nvl(i.quantity,0) - nvl(i.init_quantity,0) <> 0 ) Then
2908                                    	l_bd_cost_rate_override_tab(l_tbl_counter) :=
2909                                         (NVL(i.txn_burdened_cost,0) - NVL(i.txn_init_burdened_cost,0)) /
2910                                                 (nvl(i.quantity,0) - nvl(i.init_quantity,0));
2911                                   End If;
2912 				Elsif i.burden_rate_changed_flag = 'N' Then
2913 					l_bdRtSetFlag_tab(l_tbl_counter) := 'Y';
2914 					l_bd_cost_rate_override_tab(l_tbl_counter) := NULL;
2915 				End If;
2916 
2917 				If i.revenue_changed_flag = 'Y' Then
2918 				  If (nvl(i.quantity,0) - nvl(i.init_quantity,0) <> 0 ) Then
2919                                     	l_bill_rate_override_tab(l_tbl_counter) :=
2920                                         (nvl(i.txn_revenue,0) - nvl(i.txn_init_revenue,0)) /
2921                                            (nvl(i.quantity,0) - nvl(i.init_quantity,0));
2922                                   End If;
2923 				Elsif i.bill_rate_changed_flag = 'N' Then
2924 					l_bill_rate_override_tab(l_tbl_counter) := NULL;
2925 					l_bilRtSetFlag_Tab(l_tbl_counter) := 'Y';
2926 				End If;
2927 				/* in case if we donot want calculate raw and burden then open this code
2928 				l_bill_rate_override_tab(l_tbl_counter) := i.txn_revenue / i.quantity;
2929 				if i.cost_rate_changed_flag = 'N' and i.raw_cost_changed_flag = 'N' and i.bl_rw_cost_rate = 0 Then
2930                                       l_rw_cost_rate_override_tab(l_tbl_counter) := 0;
2931 				Else
2932 					l_rw_cost_rate_override_tab(l_tbl_counter) := i.txn_raw_cost / i.quantity;
2933                                 End If;
2934 				*/
2935 
2936 			Elsif i.quantity_changed_flag = 'N' Then
2937 				--print_msg('Qty not changed');
2938 				l_quantity_tab(l_tbl_counter) := i.quantity;
2939 
2940 				If i.resource_rate_based_flag = 'Y' AND i.rate_based_flag = 'N'  then
2941                                 	l_costRt_g_miss_num_flag_tab(l_tbl_counter) := 'N';
2942                                 	l_burdRt_g_miss_num_flag_tab(l_tbl_counter) := 'N';
2943                                 	l_revRt_g_miss_num_flag_tab(l_tbl_counter) := 'N';
2944                       		Elsif i.resource_rate_based_flag = 'N' AND i.rate_based_flag = 'N' Then
2945                                 	l_costRt_g_miss_num_flag_tab(l_tbl_counter) := 'N';
2946                                 	l_burdRt_g_miss_num_flag_tab(l_tbl_counter) := 'N';
2947                                 	l_revRt_g_miss_num_flag_tab(l_tbl_counter) := 'N';
2948                       		End If;
2949 				If i.revenue_changed_flag = 'Y' Then --{
2950 				   --print_msg('Rev changed');
2951 				   If i.raw_cost_changed_flag = 'Y' OR i.burden_cost_changed_flag = 'Y' then
2952 					If i.raw_cost_changed_flag = 'Y' Then
2953 						--print_msg('RawChanged');
2954 						l_quantity_tab(l_tbl_counter) := i.txn_raw_cost;
2955 						l_rw_cost_rate_override_tab(l_tbl_counter) := 1;
2956 						If i.burden_cost_changed_flag = 'N' and nvl(i.bl_burd_rate,0) in (1) Then
2957 						    l_bdRtSetFlag_Tab(l_tbl_counter) := 'Y';
2958 						End If;
2959 					End If;
2960 					If i.burden_cost_changed_flag = 'Y' and i.raw_cost_changed_flag = 'N'
2961 					   and NVL(i.bl_rw_cost_rate,0) = 0 and NVL(i.bl_burd_rate,0) IN (1,0) and i.bl_txn_raw_cost is NULL Then
2962 						--print_msg('burden cost changed');
2963 					    l_quantity_tab(l_tbl_counter) := i.txn_burdened_cost;
2964 					    l_raw_cost_tab(l_tbl_counter) := i.txn_burdened_cost;
2965 					    l_burden_only_flag_tab(l_tbl_counter ) := 'Y';
2966 					     l_rw_cost_rate_override_tab(l_tbl_counter) := 1;
2967 					     l_bd_cost_rate_override_tab(l_tbl_counter) := 1;
2968 					Elsif i.burden_cost_changed_flag = 'Y' and i.bl_rw_cost_rate in (1,0) and i.bl_burd_rate NOT IN (1) Then
2969 					    If (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0) <> 0) Then
2970 						If i.bl_txn_raw_cost is NOT NULL and i.bl_txn_raw_cost = i.bl_quantity Then
2971 					           l_bd_cost_rate_override_tab(l_tbl_counter) :=
2972 							(nvl(i.txn_burdened_cost,0) - nvl(i.txn_init_burdened_cost,0))/
2973 							 (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0));
2974 						Else
2975 						   l_bd_cost_rate_override_tab(l_tbl_counter) :=
2976                                                         (nvl(i.txn_burdened_cost,0) - nvl(i.txn_init_burdened_cost,0))/
2977                                                          (NVL(l_raw_cost_tab(l_tbl_counter),i.bl_txn_raw_cost)-nvl(i.txn_init_raw_cost,0));
2978 						End If;
2979 					    End If;
2980 					End If;
2981 				   End If;
2982 					--l_bill_rate_override_tab(l_tbl_counter) := i.txn_revenue / l_quantity_tab(l_tbl_counter);
2983 				    if i.cost_rate_changed_flag = 'N' and i.raw_cost_changed_flag = 'N' and i.burden_cost_changed_flag = 'N'
2984 					and (i.bl_rw_cost_rate = 0 OR i.bl_txn_raw_cost is NULL )  Then
2985 					l_rw_cost_rate_override_tab(l_tbl_counter) := 0;
2986 				    End If;
2987 				    if i.burden_rate_changed_flag = 'N' and i.burden_cost_changed_flag = 'N'
2988 				       and i.raw_cost_changed_flag = 'N' and i.bl_burd_rate = 0 Then
2989 					l_bd_cost_rate_override_tab(l_tbl_counter) := 0;
2990 
2991 				    /* when burden rate only changed for non-rate base resource ignore the rate */
2992 				    ElsIf g_wp_version_flag = 'N' and i.burden_rate_changed_flag = 'Y' and i.burden_cost_changed_flag = 'N' Then
2993 					l_reCalcbdRt_Tab(l_tbl_counter) := 'Y';
2994 					l_bd_cost_rate_override_tab(l_tbl_counter) := NULL;
2995 				    End If;
2996 
2997 				    If  i.raw_cost_changed_flag = 'N'
2998                                      and i.burden_cost_changed_flag = 'N'
2999                                      and (i.bl_rw_cost_rate = 0 OR i.bl_txn_raw_cost is NULL ) Then
3000                                         l_quantity_tab(l_tbl_counter) := i.txn_revenue;
3001 					l_revenue_only_flag_tab(l_tbl_counter) := 'Y';
3002 					If (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0) <> 0) Then
3003                                         	l_bill_rate_override_tab(l_tbl_counter) :=
3004 						 (nvl(i.txn_revenue,0) - nvl(i.txn_init_revenue,0)) /
3005 						 (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0));
3006 					End If;
3007                                     Else
3008                                         If (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0) <> 0) Then
3009                                                 l_bill_rate_override_tab(l_tbl_counter) :=
3010                                                  (nvl(i.txn_revenue,0) - nvl(i.txn_init_revenue,0)) /
3011                                                  (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0));
3012                                         End If;
3013                                     End If;
3014 				Elsif i.revenue_changed_flag = 'N' Then
3015                                    If i.bill_rate_changed_flag = 'Y' Then
3016                                         l_reCalcBilRt_tab(l_tbl_counter) := 'Y';
3017                                         l_bill_rate_override_tab(l_tbl_counter) := NULL;
3018                                    End If;
3019 				   If (i.raw_cost_changed_flag = 'Y' OR i.burden_cost_changed_flag = 'Y') then --{
3020 					--print_msg('Rev not changed');
3021 					If i.raw_cost_changed_flag = 'Y' Then
3022 						--print_msg('Rawchanged');
3023                                                 l_quantity_tab(l_tbl_counter) := i.txn_raw_cost;
3024 					        l_rw_cost_rate_override_tab(l_tbl_counter) := 1;
3025 						If i.bl_bill_rate = 1 Then
3026                                                 	l_bilRtSetFlag_Tab(l_tbl_counter) := 'Y';
3027                                         	End If;
3028                                                 If i.burden_cost_changed_flag = 'N' and nvl(i.bl_burd_rate,0) in (0,1) Then
3029                                                     l_bdRtSetFlag_Tab(l_tbl_counter) := 'Y';
3030 						/* ignore the burden rate changes for non-rate base resource */
3031 						ElsIf g_wp_version_flag = 'N' and i.burden_rate_changed_flag = 'Y' and i.burden_cost_changed_flag = 'N' then
3032                                         		l_reCalcbdRt_Tab(l_tbl_counter) := 'Y';
3033                                         		l_bd_cost_rate_override_tab(l_tbl_counter) := NULL;
3034                                                 End If;
3035                                         End If;
3036                                         If i.burden_cost_changed_flag = 'Y' and i.raw_cost_changed_flag = 'N'
3037                                            and NVL(i.bl_rw_cost_rate,0) = 0 and NVL(i.bl_burd_rate,0) IN (1,0) and i.bl_txn_raw_cost is NULL Then
3038                                             l_quantity_tab(l_tbl_counter) := i.txn_burdened_cost;
3039                                             l_raw_cost_tab(l_tbl_counter) := i.txn_burdened_cost;
3040 					    l_burden_only_flag_tab(l_tbl_counter ) := 'Y';
3041 					    l_rw_cost_rate_override_tab(l_tbl_counter) := 1;
3042 					    l_bd_cost_rate_override_tab(l_tbl_counter) := 1;
3043 					    If i.bl_bill_rate = 1 Then
3044                                                    l_bilRtSetFlag_Tab(l_tbl_counter) := 'Y';
3045                                             End If;
3046                                         Elsif i.burden_cost_changed_flag = 'Y' and (i.bl_rw_cost_rate in (1,0) )
3047 					       and i.bl_burd_rate NOT IN (1) Then
3048 					    If (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0) <> 0) Then
3049 					       If nvl(l_raw_cost_tab(l_tbl_counter),i.bl_txn_raw_cost) = nvl(l_quantity_tab(l_tbl_counter),0) Then
3050                                             	l_bd_cost_rate_override_tab(l_tbl_counter) :=
3051 						   (nvl(i.txn_burdened_cost,0) - nvl(i.txn_init_burdened_cost,0))/
3052 						    (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0));
3053 					       Else
3054 						l_bd_cost_rate_override_tab(l_tbl_counter) :=
3055                                                    (nvl(i.txn_burdened_cost,0) - nvl(i.txn_init_burdened_cost,0))/
3056                                                     (NVL(l_raw_cost_tab(l_tbl_counter),i.bl_txn_raw_cost)-nvl(i.txn_init_raw_cost,0));
3057 						End If;
3058 					    End If;
3059                                         End If;
3060 				    Elsif g_wp_version_flag = 'N' and i.burden_rate_changed_flag = 'Y' and i.burden_cost_changed_flag = 'N' then
3061 					   /* ignore the burden rate change for non-rate base resource */
3062 					   l_reCalcbdRt_Tab(l_tbl_counter) := 'Y';
3063                                            l_bd_cost_rate_override_tab(l_tbl_counter) := NULL;
3064 				    End If; --}
3065 				End If; --}
3066 		   	End If;
3067 		  End If;
3068 	     End If;
3069 	   End LOOP; --}
3070 
3071 	/* process records for Non rate base when revenue only entered */
3072 	If g_budget_version_type = 'ALL' Then --{
3073 	   FOR i IN cur_NonRtRas LOOP
3074 		l_tbl_counter := l_tbl_counter + 1;
3075                 l_resource_assignment_tab(l_tbl_counter) := i.resource_assignment_id;
3076                 l_txn_currency_code_tab(l_tbl_counter) := i.txn_currency_code;
3077 		l_start_date_tab(l_tbl_counter) := i.start_date;
3078                 l_end_date_tab(l_tbl_counter) := i.end_date;
3079                 l_quantity_tab(l_tbl_counter) := null;
3080                 l_raw_cost_tab(l_tbl_counter) := null;
3081                 l_burden_cost_tab(l_tbl_counter) := null;
3082                 l_revenue_tab(l_tbl_counter) := null;
3083                 l_revenue_only_flag_tab(l_tbl_counter) := 'N';
3084                 l_reset_rate_based_flag_tab(l_tbl_counter) := 'N';
3085                 l_bd_cost_rate_override_tab(l_tbl_counter) := null;
3086                 l_rw_cost_rate_override_tab(l_tbl_counter) := null;
3087                 l_bill_rate_override_tab(l_tbl_counter) := null;
3088                 l_uom_tab(l_tbl_counter) := i.UOM;
3089                 l_rwRtSetFlag_Tab(l_tbl_counter) := 'N';
3090                 l_bilRtSetFlag_Tab(l_tbl_counter) := 'N';
3091                 l_bdRtSetFlag_tab(l_tbl_counter) := 'N';
3092 		l_reCalcbdRt_Tab(l_tbl_counter) := 'N';
3093                 l_reCalcBilRt_Tab(l_tbl_counter) := 'N';
3094 		l_revenue_only_flag_tab(l_tbl_counter ) := 'N';
3095 		l_costRt_g_miss_num_flag_tab(l_tbl_counter ) := NULL;
3096                 l_burdRt_g_miss_num_flag_tab(l_tbl_counter ) := NULL;
3097                 l_revRt_g_miss_num_flag_tab(l_tbl_counter ) := NULL;
3098 		l_burden_only_flag_tab(l_tbl_counter ) := 'N';
3099 		/*
3100 		print_msg('Looping through RAs for Rate Base flg = N and Resource Rate base flag = N');
3101 		print_msg('bdRtflag['||i.burden_cost_changed_flag||']RwFlag['||i.raw_cost_changed_flag||']');
3102 		print_msg('RevFlag['||i.revenue_changed_flag||']');
3103 		print_msg('currentUOM['||i.currentUOM||']ResUOM['||i.UOM||']');
3104 		*/
3105 		If i.rate_based_flag = 'N' and i.resource_rate_based_flag = 'N' Then
3106 			l_quantity_tab(l_tbl_counter) := i.quantity;
3107                         if i.resource_rate_based_flag = 'N' AND i.rate_based_flag = 'N' Then
3108                               l_costRt_g_miss_num_flag_tab(l_tbl_counter) := 'N';
3109                               l_burdRt_g_miss_num_flag_tab(l_tbl_counter) := 'N';
3110                               l_revRt_g_miss_num_flag_tab(l_tbl_counter) := 'N';
3111                         End If;
3112                         If i.raw_cost_changed_flag = 'Y' Then
3113 				l_quantity_tab(l_tbl_counter) := i.txn_raw_cost;
3114 				l_rw_cost_rate_override_tab(l_tbl_counter) := 1;
3115 				If i.burden_cost_changed_flag = 'Y' Then
3116 				  If (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0) <> 0) Then
3117                                        l_bd_cost_rate_override_tab(l_tbl_counter) :=
3118                                          (nvl(i.txn_burdened_cost,0) - nvl(i.txn_init_burdened_cost,0))/
3119                                          (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0));
3120                                   End If;
3121 				Elsif i.burden_cost_changed_flag = 'N' and nvl(i.bl_burd_rate,0) in (0,1) Then
3122 				  l_bdRtSetFlag_tab(l_tbl_counter) := 'Y';
3123 				  l_bd_cost_rate_override_tab(l_tbl_counter) := NULL;
3124 				Elsif g_wp_version_flag = 'N' and i.burden_rate_changed_flag = 'Y' and i.burden_cost_changed_flag = 'N' then
3125                                            /* ignore the burden rate change for non-rate base resource */
3126                                            l_reCalcbdRt_Tab(l_tbl_counter) := 'Y';
3127                                            l_bd_cost_rate_override_tab(l_tbl_counter) := NULL;
3128 				End If;
3129 
3130 				If i.revenue_changed_flag = 'Y' Then
3131 					If (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0) <> 0) Then
3132                                                 l_bill_rate_override_tab(l_tbl_counter) :=
3133                                                  (nvl(i.txn_revenue,0) - nvl(i.txn_init_revenue,0)) /
3134                                                  (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0));
3135                                         End If;
3136 				Elsif i.revenue_changed_flag = 'N' and nvl(i.bl_bill_rate,0) in (1) Then
3137 					l_bill_rate_override_tab(l_tbl_counter) := NULL;
3138 					l_bilRtSetFlag_tab(l_tbl_counter) := 'Y';
3139 				End If;
3140 			End If;
3141 
3142 			If i.burden_cost_changed_flag = 'Y' Then
3143 			    	If i.raw_cost_changed_flag = 'N' and ((NVL(i.bl_rw_cost_rate,0) = 0 and i.bl_txn_raw_cost is NULL) OR (i.txn_init_raw_cost = i.bl_txn_raw_cost) ) Then --Bug 6781055
3144 
3145 					l_quantity_tab(l_tbl_counter) := i.txn_burdened_cost;
3146 					l_raw_cost_tab(l_tbl_counter) := i.txn_burdened_cost;
3147 					l_rw_cost_rate_override_tab(l_tbl_counter) := 1;
3148 			        	l_bd_cost_rate_override_tab(l_tbl_counter) := 1;
3149 					l_burden_only_flag_tab(l_tbl_counter ) := 'Y';
3150 			    	Else
3151 					If (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0) <> 0) Then
3152 					  if NVL(l_raw_cost_tab(l_tbl_counter),i.bl_txn_raw_cost) = NVL(l_quantity_tab(l_tbl_counter),0) Then
3153                                             l_bd_cost_rate_override_tab(l_tbl_counter) :=
3154                                               (nvl(i.txn_burdened_cost,0) - nvl(i.txn_init_burdened_cost,0))/
3155                                               (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0));
3156                                           -- Modified Else to Elsif for Bug# 6784234
3157 					  Elsif (NVL(l_raw_cost_tab(l_tbl_counter),i.bl_txn_raw_cost)-nvl(i.txn_init_raw_cost,0)) <> 0 Then
3158 
3159 					    l_bd_cost_rate_override_tab(l_tbl_counter) :=
3160                                               (nvl(i.txn_burdened_cost,0) - nvl(i.txn_init_burdened_cost,0))/
3161                                               (NVL(l_raw_cost_tab(l_tbl_counter),i.bl_txn_raw_cost)-nvl(i.txn_init_raw_cost,0));
3162 					  End If;
3163                                   	End If;
3164 			    	End If;
3165 
3166 			    	If i.revenue_changed_flag = 'Y' Then
3167                                         If (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0) <> 0) Then
3168                                                 l_bill_rate_override_tab(l_tbl_counter) :=
3169                                                  (nvl(i.txn_revenue,0) - nvl(i.txn_init_revenue,0)) /
3170                                                  (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0));
3171                                         End If;
3172                                 Elsif i.revenue_changed_flag = 'N' and nvl(i.bl_bill_rate,0) in (1) Then
3173                                         l_bill_rate_override_tab(l_tbl_counter) := NULL;
3174                                         l_bilRtSetFlag_tab(l_tbl_counter) := 'Y';
3175                                 End If;
3176 			End If;
3177 
3178 			If i.revenue_changed_flag = 'Y' Then
3179 				If ( (i.bl_rw_cost_rate = 0 OR i.bl_txn_raw_cost is NULL ) OR (i.txn_init_raw_cost = i.bl_txn_raw_cost) ) and NVL(i.bl_burd_rate,0) = 0 --Bug 6781055
3180 				   and i.raw_cost_changed_flag = 'N' and i.burden_cost_changed_flag = 'N' Then
3181                                         -- revenue only entered for pl resource
3182                                         l_quantity_tab(l_tbl_counter) := i.txn_revenue;
3183 					l_revenue_only_flag_tab(l_tbl_counter) := 'Y';
3184 					If i.txn_revenue = 0 then
3185 						l_bill_rate_override_tab(l_tbl_counter) := 0;
3186 					Else
3187 						l_bill_rate_override_tab(l_tbl_counter) := 1;
3188 					End If;
3189 				 Else
3190 					If (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0) <> 0) Then
3191                                                 l_bill_rate_override_tab(l_tbl_counter) :=
3192                                                  (nvl(i.txn_revenue,0) - nvl(i.txn_init_revenue,0)) /
3193                                                  (NVL(l_quantity_tab(l_tbl_counter),0)-nvl(i.init_quantity,0));
3194                                         End If;
3195                                  End If;
3196                                  if i.cost_rate_changed_flag = 'N' and i.raw_cost_changed_flag = 'N'
3197  	                                     and i.bl_rw_cost_rate = 0
3198  	                                     and i.burden_cost_changed_flag = 'N' Then
3199                                         l_rw_cost_rate_override_tab(l_tbl_counter) := 0;
3200                                  End If;
3201                                  if i.burden_rate_changed_flag = 'N' and i.burden_cost_changed_flag = 'N' and i.bl_burd_rate = 0 Then
3202                                        l_bd_cost_rate_override_tab(l_tbl_counter) := 0;
3203 				 Elsif g_wp_version_flag = 'N' and i.burden_rate_changed_flag = 'Y' and i.burden_cost_changed_flag = 'N' Then
3204 					/* ignore the burden rate change for non-rate base resource */
3205                                            l_reCalcbdRt_Tab(l_tbl_counter) := 'Y';
3206                                            l_bd_cost_rate_override_tab(l_tbl_counter) := NULL;
3207                                  End If;
3208 			Else
3209 			    	if i.bill_rate_changed_flag = 'Y' Then
3210                               		l_reCalcBilRt_tab(l_tbl_counter) := 'Y';
3211                               		l_bill_rate_override_tab(l_tbl_counter) := NULL;
3212 				End If;
3213 			End If;
3214 			If g_wp_version_flag = 'N' and i.burden_rate_changed_flag = 'Y' and i.burden_cost_changed_flag = 'N'
3215 				and i.revenue_changed_flag = 'N' and i.raw_cost_changed_flag = 'N' Then
3216                                            /* ignore the burden rate change for non-rate base resource */
3217                                            l_reCalcbdRt_Tab(l_tbl_counter) := 'Y';
3218                                            l_bd_cost_rate_override_tab(l_tbl_counter) := NULL;
3219 			End If;
3220                 End If;
3221 	   END LOOP;
3222 	End If; --}
3223 
3224 	   /* Update the RA and set the rate based flag = Y */
3225        	If x_return_status = 'S' AND l_resource_assignment_tab.COUNT > 0 Then --{
3226 
3227 	/*
3228 	for i in l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST loop
3229 	print_msg('Contxt['||p_source_context||']raid['||l_resource_assignment_tab(i)||']');
3230 	print_msg('txnCur['||l_txn_currency_code_tab(i)||']');
3231 	print_msg('ResetFlg['||l_reset_rate_based_flag_tab(i)||']uom['||l_uom_tab(i)||']Qty['||l_quantity_tab(i)||']');
3232 	print_msg('RwCost['||l_raw_cost_tab(i)||']Rt['||l_rw_cost_rate_override_tab(i)||']');
3233 	print_msg('billRt['||l_bill_rate_override_tab(i)||']');
3234 	print_msg('resetCstFlg['||l_rwRtSetFlag_Tab(i)||']resetBilFlg['||l_bilRtSetFlag_Tab(i)||']');
3235 	print_msg('resetBdRtFlg['||l_bdRtSetFlag_Tab(i)||']');
3236 	print_msg('reCalcBdFlag['||l_reCalcBdRt_tab(i)||']reCalcBilRtFlag['||l_reCalcBilRt_tab(i)||']');
3237 	print_msg('RevOnlyFlg['||l_revenue_only_flag_tab(i)||']');
3238 	end loop;
3239 	*/
3240 	     IF p_source_context = 'RESOURCE_ASSIGNMENT' Then
3241 
3242 		/* before resetting the rate base flag check whenter budget lines exists for this planning
3243 		 * resource with other currency. if so abort the process
3244 		 */
3245 		DELETE FROM pa_fp_spread_calc_tmp2;
3246 		FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
3247 		INSERT INTO pa_fp_spread_calc_tmp2 tmp2
3248 		   	(budget_version_id
3249 			,resource_assignment_id
3250 			,txn_currency_code
3251 			,task_id
3252 			,resource_name
3253 			)
3254 		SELECT /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP_N1) */ p_budget_version_id
3255 			,tmp.resource_assignment_id
3256 			,tmp.txn_currency_code
3257 			,tmp.task_id
3258 			,tmp.resource_name
3259 		FROM pa_fp_spread_calc_tmp tmp
3260 		WHERE tmp.budget_version_id = p_budget_version_id
3261 		AND tmp.resource_assignment_id = l_resource_assignment_tab(i)
3262 		AND tmp.txn_currency_code = l_txn_currency_code_tab(i)
3263 		AND  l_reset_rate_based_flag_tab(i) = 'Y'
3264 		AND EXISTS (select null
3265 				from pa_budget_lines bl
3266 				WHERE tmp.resource_assignment_id = bl.resource_assignment_id
3267 				AND  (tmp.txn_currency_code <> bl.txn_currency_code
3268 				    OR
3269 				    ( tmp.txn_currency_code = bl.txn_currency_code
3270 				      and nvl(bl.init_quantity,0) <> 0 )
3271 				     )
3272 			   );
3273 
3274 	     ELSE  -- source context = BUDGET LINE then
3275 
3276                 DELETE FROM pa_fp_spread_calc_tmp2;
3277                 FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
3278                 INSERT INTO pa_fp_spread_calc_tmp2 tmp2
3279                         (budget_version_id
3280                         ,resource_assignment_id
3281                         ,txn_currency_code
3282                         ,task_id
3283                         ,resource_name
3284                         ,start_date
3285                         ,end_date
3286                         )
3287                 SELECT /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP_N1) */ p_budget_version_id
3288                         ,tmp.resource_assignment_id
3289                         ,tmp.txn_currency_code
3290                         ,tmp.task_id
3291                         ,tmp.resource_name
3292                         ,tmp.start_date
3293                         ,tmp.end_date
3294                 FROM pa_fp_spread_calc_tmp tmp
3295                 WHERE tmp.budget_version_id = p_budget_version_id
3296                 AND tmp.resource_assignment_id = l_resource_assignment_tab(i)
3297                 AND tmp.txn_currency_code = l_txn_currency_code_tab(i)
3298 		AND tmp.start_date = l_start_date_tab(i)
3299                 AND l_reset_rate_based_flag_tab(i) = 'Y'
3300                 AND EXISTS (select null
3301                                 from pa_budget_lines bl
3302                                 WHERE tmp.resource_assignment_id = bl.resource_assignment_id
3303                                 AND  ( (tmp.txn_currency_code <> bl.txn_currency_code)
3304 				      OR (tmp.txn_currency_code = bl.txn_currency_code
3305 					  --and bl.start_date NOT BETWEEN tmp.start_date and tmp.end_date
3306 					  and nvl(bl.init_quantity,0) <> 0  --7185263
3307 					 ))
3308                            );
3309 	     END IF;
3310 
3311 		/* loop through each record add it to stack and then raise error */
3312 		l_NonRrtRec_Exists_Flg := 'N';
3313 		FOR i IN (SELECT tmp2.resource_assignment_id
3314 				,tmp2.txn_currency_code
3315 				,tmp2.task_id
3316 				,tmp2.resource_name
3317 				,tmp2.start_date
3318 			 FROM pa_fp_spread_calc_tmp2 tmp2
3319 			 WHERE tmp2.budget_version_id = p_budget_version_id ) LOOP --{
3320 
3321 			g_stage := 'PA_FP_RATE_BASE_QTY_REQD:RaId['||i.resource_assignment_id||']';
3322 			g_stage := 'Currency['||i.txn_currency_code||']SDate['||i.start_date||']';
3323                 	IF P_PA_DEBUG_MODE = 'Y' Then
3324                 	   print_msg(g_stage);
3325                 	End If;
3326 
3327 			PA_UTILS.ADD_MESSAGE
3328                             (p_app_short_name => 'PA'
3329                             ,p_msg_name       => 'PA_FP_RATE_BASE_RES_QTY_REQD'
3330                             ,p_token1         => 'P_BUDGET_VERSION_NAME'
3331                             ,p_value1         => g_budget_version_name
3332                             ,p_token2         => 'P_RESOURCE_NAME'
3333                             ,p_value2         => i.resource_name
3334                             ,p_token3         => 'P_RESOURCE_ASSIGNMENT'
3335                             ,p_value3         => i.resource_assignment_id
3336                             ,p_token4         => 'P_TXN_CURRENCY_CODE'
3337                             ,p_value4         => i.txn_currency_code
3338                             ,p_token5         => 'P_START_DATE'
3339                             ,p_value5         => i.start_date
3340                             );
3341 
3342 			    x_return_status := 'E';
3343 			    l_NonRrtRec_Exists_Flg := 'Y';
3344 		END LOOP; --}
3345 
3346 		If l_NonRrtRec_Exists_Flg = 'Y' THEN
3347 			x_return_status := 'E';
3348 			g_stage := 'Found Errors during reset Rate base flag validation: Raising Error';
3349                         IF P_PA_DEBUG_MODE = 'Y' Then
3350                            print_msg(g_stage);
3351                         End If;
3352 			RAISE l_NonRrtRec_Exists_Exception;
3353 		End If;
3354 
3355         	g_stage := 'reset_ratebased_pltrxns:104';
3356 		IF P_PA_DEBUG_MODE = 'Y' Then
3357         	print_msg(g_stage);
3358 		End If;
3359         	FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
3360             		UPDATE PA_RESOURCE_ASSIGNMENTS ra
3361             		SET ra.rate_based_flag = 'Y'
3362                		,ra.unit_of_measure = l_uom_tab(i)
3363             	WHERE ra.resource_assignment_id = l_resource_assignment_tab(i)
3364 		AND l_reset_rate_based_flag_tab(i) = 'Y';
3365 		IF P_PA_DEBUG_MODE = 'Y' Then
3366 		print_msg('reset the override rates in new entity');
3367 		End If;
3368 		FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
3369 			UPDATE PA_RESOURCE_ASGN_CURR rtx
3370 			SET rtx.txn_raw_cost_rate_override = decode(l_rwRtSetFlag_Tab(i),'Y',NULL,rtx.txn_raw_cost_rate_override)
3371 			    ,rtx.txn_bill_rate_override = decode(l_bilRtSetFlag_Tab(i),'Y',NULL,rtx.txn_bill_rate_override)
3372 			    ,rtx.txn_burden_cost_rate_override = decode(l_bdRtSetFlag_Tab(i),'Y',NULL,rtx.txn_burden_cost_rate_override)
3373 			WHERE rtx.resource_assignment_id = l_resource_assignment_tab(i)
3374                         AND  rtx.txn_currency_code = l_txn_currency_code_tab(i)
3375 			AND  (l_rwRtSetFlag_Tab(i) = 'Y' OR l_bilRtSetFlag_Tab(i) = 'Y' OR l_bdRtSetFlag_Tab(i) = 'Y' )
3376 			AND ( p_source_context = 'RESOURCE_ASSIGNMENT'
3377 			      OR
3378 			      (p_source_context = 'BUDGET_LINE'
3379 				and l_reset_rate_based_flag_tab(i) = 'Y')
3380 			    );
3381 		IF P_PA_DEBUG_MODE = 'Y' Then
3382 		print_msg('reset the override rates in budgetLines');
3383 		End If;
3384                 FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
3385                         UPDATE PA_BUDGET_LINES bl
3386                         SET bl.txn_cost_rate_override = decode(l_rwRtSetFlag_Tab(i),'Y',NULL,bl.txn_cost_rate_override)
3387                             ,bl.txn_bill_rate_override = decode(l_bilRtSetFlag_Tab(i),'Y',NULL,bl.txn_bill_rate_override)
3388 			    ,bl.burden_cost_rate_override = decode(l_bdRtSetFlag_Tab(i),'Y',NULL,bl.burden_cost_rate_override)
3389                         WHERE bl.resource_assignment_id = l_resource_assignment_tab(i)
3390                         AND  bl.txn_currency_code = l_txn_currency_code_tab(i)
3391 			AND  ((p_source_context = 'BUDGET_LINE'
3392 				and bl.start_date BETWEEN l_start_date_tab(i) and l_end_date_tab(i))
3393 			      OR
3394 				p_source_context <> 'BUDGET_LINE'
3395 			     )
3396                         AND  (l_rwRtSetFlag_Tab(i) = 'Y' OR l_bilRtSetFlag_Tab(i) = 'Y' OR l_bdRtSetFlag_Tab(i) = 'Y');
3397 		IF P_PA_DEBUG_MODE = 'Y' Then
3398         	g_stage := 'reset_ratebased_pltrxns:105';
3399 		End If;
3400         	/* Now update the rollup tmp with the new qty and raw cost */
3401         	print_msg('Updating tmp table  with qty = rawcost or burden cost');
3402         	FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
3403             		UPDATE /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP_N1) */ pa_fp_spread_calc_tmp tmp
3404             		SET tmp.quantity = NVL(l_quantity_tab(i),tmp.quantity)
3405                		,tmp.txn_raw_cost = NVL(l_raw_cost_tab(i),tmp.txn_raw_cost)
3406                		,tmp.cost_rate_override = decode(l_rwRtSetFlag_Tab(i),'Y',NULL,NVL(l_rw_cost_rate_override_tab(i),tmp.cost_rate_override))
3407 			,tmp.bill_rate_override = decode(l_bilRtSetFlag_Tab(i),'Y',NULL,NVL(l_bill_rate_override_tab(i),tmp.bill_rate_override))
3408 			,tmp.burden_cost_rate_override = decode(l_bdRtSetFlag_Tab(i),'Y',NULL
3409 							   ,decode(l_reCalcBdRt_tab(i),'Y',NULL,NVL(l_bd_cost_rate_override_tab(i),tmp.burden_cost_rate_override)))
3410 			,tmp.burden_rate_changed_flag = decode(l_bdRtSetFlag_Tab(i),'Y',tmp.burden_rate_changed_flag
3411 							   ,decode(l_reCalcBdRt_tab(i),'Y','N',tmp.burden_rate_changed_flag))
3412 			,tmp.burden_rate_g_miss_num_flag = decode(l_bdRtSetFlag_Tab(i),'Y',nvl(l_burdRt_g_miss_num_flag_tab(i),tmp.burden_rate_g_miss_num_flag)
3413 								,decode(l_reCalcBdRt_tab(i),'Y','N'
3414 								  ,nvl(l_burdRt_g_miss_num_flag_tab(i), tmp.burden_rate_g_miss_num_flag)))
3415 			,tmp.bill_rate_changed_flag = decode(l_bilRtSetFlag_tab(i),'Y',tmp.bill_rate_changed_flag
3416 								,decode(l_reCalcBilRt_tab(i),'Y','N',tmp.bill_rate_changed_flag))
3417 			,tmp.revenue_only_entered_flag = l_revenue_only_flag_tab(i)
3418                         ,tmp.cost_rate_g_miss_num_flag = NVL(l_costRt_g_miss_num_flag_tab(i),tmp.cost_rate_g_miss_num_flag)
3419                         ,tmp.bill_rate_g_miss_num_flag = NVL(l_revRt_g_miss_num_flag_tab(i),tmp.bill_rate_g_miss_num_flag)
3420 			,tmp.burden_only_entered_flag = l_burden_only_flag_tab(i)
3421 			,(tmp.rate_based_flag
3422                  	 ,tmp.resource_rate_based_flag
3423 			 ,tmp.resource_UOM) =
3424                                         (select nvl(ra.rate_based_flag,'N' )
3425                                                 ,nvl(ra.resource_rate_based_flag,'N')
3426 						,l_uom_tab(i)
3427                                         from pa_resource_assignments ra
3428                                         where ra.resource_assignment_id = tmp.resource_assignment_id)
3429 			/* bug fix:5116157: to store the reset flag so that correct rate base flag and uom can pass to PJI*/
3430 			,tmp.system_reference_var3 = NVL(l_reset_rate_based_flag_tab(i),'N') -- Reset_Rate_Base_Flag
3431 			/* bug fix:5726773 */
3432  	                ,tmp.NEG_QUANTITY_CHANGE_FLAG = decode(nvl(l_reset_rate_based_flag_tab(i),'N'),'Y','N'
3433  	                                                         ,tmp.NEG_QUANTITY_CHANGE_FLAG)
3434  	                ,tmp.NEG_RAWCOST_CHANGE_FLAG = decode(nvl(l_reset_rate_based_flag_tab(i),'N'),'Y','N'
3435  	                                                         ,tmp.NEG_RAWCOST_CHANGE_FLAG)
3436  	                ,tmp.NEG_BURDEN_CHANGE_FALG= decode(nvl(l_reset_rate_based_flag_tab(i),'N'),'Y','N'
3437  	                                                         ,tmp.NEG_BURDEN_CHANGE_FALG)
3438  	                ,tmp.NEG_REVENUE_CHANGE_FLAG = decode(nvl(l_reset_rate_based_flag_tab(i),'N'),'Y','N'
3439  	                                                         ,tmp.NEG_REVENUE_CHANGE_FLAG)
3440             		WHERE tmp.resource_assignment_id = l_resource_assignment_tab(i)
3441             		AND  tmp.txn_currency_code = l_txn_currency_code_tab(i)
3442 			AND  ((p_source_context = 'BUDGET_LINE'
3443                                 and tmp.start_date BETWEEN l_start_date_tab(i) and l_end_date_tab(i))
3444                               OR
3445                                 p_source_context <> 'BUDGET_LINE'
3446                              );
3447 
3448 
3449        	End If; --}
3450     	g_stage := 'reset_ratebased_pltrxns:107';
3451 	IF P_PA_DEBUG_MODE = 'Y' Then
3452     	print_msg('Leaving reset_ratebased_pltrxns with retSts['||x_return_status||']');
3453 	End If;
3454 EXCEPTION
3455 	WHEN l_NonRrtRec_Exists_Exception THEN
3456 		x_return_status := 'E';
3457 		RETURN;
3458         WHEN OTHERS THEN
3459                 x_return_status := 'U';
3460                 print_msg('Failed in Reset_ratebased_pltrxns API'||sqlcode||sqlerrm);
3461                  fnd_msg_pub.add_exc_msg
3462                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
3463                  ,p_procedure_name => 'Reset_ratebased_pltrxns');
3464                 RAISE;
3465 
3466 END Reset_ratebased_pltrxns;
3467 
3468 
3469 /* This api is added as an enhancement request: For a rate based planning transaction if no quantity is passed
3470  * then mark the resource as a Non-Rate planning transaction
3471  * Logic:  For source context Resource assignment: check budget line exists for RAID and Txn cur combo
3472  * If NO budget line exists and passed in param value of quantity is NULL is then
3473  *  mark this transaction as NON-RATE based and copy raw cost to quantity
3474  * For source context Budget Line: check whether the periodic line exists, If not check budget line exists for RA and txn currency
3475  *  If No budget line exists and user has entered mix and match of qty and amounts
3476  *  then throw an error:'Enter quantity for rate based planning transaction'
3477  */
3478 PROCEDURE Check_ratebased_pltrxns(
3479                 p_budget_version_id              IN  Number
3480                 ,p_source_context                IN  pa_fp_res_assignments_tmp.source_context%TYPE
3481                 ,x_return_status                 OUT NOCOPY VARCHAR2
3482                 ) IS
3483 
3484     l_resource_assignment_tab   pa_plsql_datatypes.NumTabTyp;
3485     l_txn_currency_code_tab     pa_plsql_datatypes.Char50TabTyp;
3486     l_start_date_tab             pa_plsql_datatypes.DateTabTyp;
3487     l_end_date_tab               pa_plsql_datatypes.DateTabTyp;
3488     l_period_name_tab            pa_plsql_datatypes.Char50TabTyp;
3489     l_quantity_tab              pa_plsql_datatypes.NumTabTyp;
3490     l_raw_cost_tab              pa_plsql_datatypes.NumTabTyp;
3491     l_burden_cost_tab           pa_plsql_datatypes.NumTabTyp;
3492     l_revenue_tab               pa_plsql_datatypes.NumTabTyp;
3493     l_revenue_only_flag_tab     pa_plsql_datatypes.Char1TabTyp;
3494     l_burden_only_flag_tab      pa_plsql_datatypes.Char1TabTyp;
3495     l_costRt_g_miss_num_flag_tab pa_plsql_datatypes.Char1TabTyp;
3496     l_burdRt_g_miss_num_flag_tab pa_plsql_datatypes.Char1TabTyp;
3497     l_revRt_g_miss_num_flag_tab  pa_plsql_datatypes.Char1TabTyp;
3498 
3499     l_costRt_changed_flag_tab    pa_plsql_datatypes.Char1TabTyp;
3500     l_burdRt_changed_flag_tab    pa_plsql_datatypes.Char1TabTyp;
3501     l_billRt_changed_flag_tab    pa_plsql_datatypes.Char1TabTyp;
3502     l_uom_tab			 pa_plsql_datatypes.Char50TabTyp;
3503     l_mark_non_rate_base_flag   Varchar2(1);
3504     l_exists_flag               Varchar2(1);
3505     l_tbl_counter               Number;
3506     l_start_date            DATE;
3507     l_end_date          DATE;
3508 
3509 
3510 
3511     Cursor cur_ra IS
3512     SELECT tmp.resource_assignment_id
3513         ,tmp.txn_currency_code
3514         ,tmp.quantity
3515         ,tmp.txn_raw_cost
3516         ,tmp.txn_burdened_cost
3517         ,tmp.txn_revenue
3518         ,g_budget_version_type  version_type
3519         ,tmp.start_date
3520         ,tmp.end_date
3521         ,rlm.alias
3522         ,g_budget_version_name  version_name
3523         ,tmp.bl_quantity
3524 	,ra.resource_rate_based_flag
3525 	,rlm.unit_of_measure uom
3526 	/* bug fix:5726773 */
3527  	,to_number(null) bl_sum_qty
3528  	,nvl(tmp.cost_rate_changed_flag,'N') cost_rate_changed_flag
3529  	,nvl(tmp.burden_rate_changed_flag,'N') burden_rate_changed_flag
3530  	,nvl(tmp.bill_rate_changed_flag,'N') bill_rate_changed_flag
3531  	,NVL(tmp.RE_SPREAD_AMTS_FLAG,'N') re_spread_amts_flag
3532  	,NVL(tmp.SP_CURVE_CHANGE_FLAG,'N') sp_curve_change_flag
3533  	,NVL(tmp.PLAN_DATES_CHANGE_FLAG,'N') plan_dates_change_flag
3534  	,NVL(tmp.SP_FIX_DATE_CHANGE_FLAG,'N') sp_fix_date_change_flag
3535  	,NVL(tmp.MFC_COST_CHANGE_FLAG,'N') mfc_cost_change_flag
3536  	,NVL(tmp.RLM_ID_CHANGE_FLAG,'N') rlm_id_change_flag
3537  	,NVL(tmp.delete_bl_flag,'N') delete_bl_flag
3538  	,NVL(tmp.raw_cost_changed_flag,'N') raw_cost_changed_flag
3539  	,NVL(tmp.burden_cost_changed_flag,'N') burden_cost_changed_flag
3540  	,NVL(tmp.revenue_changed_flag,'N') revenue_changed_flag
3541     FROM pa_fp_spread_calc_tmp tmp
3542         ,pa_resource_assignments ra
3543         ,pa_resource_list_members rlm
3544     WHERE ra.budget_version_id = p_budget_version_id
3545     AND  ra.resource_assignment_id = tmp.resource_assignment_id
3546     AND  rlm.resource_list_member_id = ra.resource_list_member_id
3547     AND  NVL(ra.rate_based_flag,'N') = 'Y'
3548         AND  NVL(tmp.quantity,0) = 0
3549     AND NVL(tmp.quantity_changed_flag,'N') = 'N'
3550     ORDER BY tmp.resource_assignment_id,tmp.txn_currency_code;
3551 
3552     Cursor  cur_bl_chk(p_ra_id Number,p_txn_cur_code Varchar2) IS
3553     SELECT 'Y'
3554     FROM dual
3555     WHERE EXISTS (select null
3556             from pa_budget_lines bl
3557                 ,pa_resource_assignments ra
3558             where ra.resource_assignment_id = p_ra_id
3559             and bl.resource_assignment_id = ra.resource_assignment_id
3560             and NVL(ra.rate_based_flag,'N') = 'Y'
3561             /* Bug fix:4083873 and bl.txn_currency_code = p_txn_cur_code */
3562             and bl.budget_version_id = p_budget_version_id
3563              );
3564 
3565     Cursor cur_tmp_chk(p_ra_id Number,p_txn_cur_code Varchar2) IS
3566         SELECT 'Y'
3567         FROM dual
3568         WHERE EXISTS (select null
3569                         from pa_fp_spread_calc_tmp bl
3570                         where bl.resource_assignment_id = p_ra_id
3571                         /* Bug fix:4083873 and bl.txn_currency_code = p_txn_cur_code */
3572             and nvl(bl.quantity,0) <>  0
3573                      );
3574 
3575     /* Bug fix: 4156225 : For a Non-rate base resource If burden cost only entered then copy
3576     * burden cost to raw cost and quantity and set rate override as 1
3577         */
3578     CURSOR cur_NonRtBaseRa IS
3579         SELECT tmp.resource_assignment_id
3580                 ,tmp.txn_currency_code
3581                 ,tmp.quantity
3582                 ,tmp.txn_raw_cost
3583                 ,tmp.txn_burdened_cost
3584                 ,tmp.txn_revenue
3585                 ,tmp.start_date
3586                 ,tmp.end_date
3587         	,tmp.bl_quantity
3588 		,rlm.unit_of_measure uom
3589         FROM pa_fp_spread_calc_tmp tmp
3590         ,pa_resource_assignments ra
3591 	,pa_resource_list_members rlm
3592         WHERE tmp.budget_version_id = p_budget_version_id
3593         AND   ra.resource_assignment_id = tmp.resource_assignment_id
3594 	AND  rlm.resource_list_member_id = ra.resource_list_member_id
3595         AND  NVL(ra.rate_based_flag,'N') = 'N'
3596         AND  ( g_budget_version_type IN ('COST','ALL')
3597         AND NVL(tmp.quantity,0) = 0
3598         AND NVL(tmp.txn_raw_cost,0) = 0
3599         AND ((NVL(tmp.txn_burdened_cost,0) <> 0 )
3600              OR
3601              NVL(tmp.txn_revenue,0) <> 0
3602             )
3603          )
3604     AND NOT EXISTS ( select null
3605             from pa_budget_lines bl
3606             where bl.budget_version_id = p_budget_version_id
3607             and   bl.resource_assignment_id = tmp.resource_assignment_id
3608             and  bl.txn_currency_code = tmp.txn_currency_code
3609             and  (p_source_context <> 'BUDGET_LINE'
3610                  OR
3611                  (p_source_context = 'BUDGET_LINE'
3612                   and bl.start_date between tmp.start_date and tmp.end_date)
3613                  )
3614             );
3615     l_reset_plsql_tab_flag  VARCHAR2(10) := 'N';
3616 
3617     -- bug 4431269: added the followings
3618     -- variables to be used to call process_errors in web adi flow.
3619     l_webadi_task_id                   pa_resource_assignments.task_id%TYPE;
3620     l_webadi_rlm_id                    pa_resource_assignments.resource_list_member_id%TYPE;
3621     l_webAdi_context                   VARCHAR2(250) ;
3622 
3623     /* bug fix:5726773 */
3624     SKIP_RECORD         EXCEPTION;
3625     l_message_name      VARCHAR2(30);
3626     l_lkp_code          VARCHAR2(30);
3627 
3628 BEGIN
3629     x_return_status := 'S';
3630     IF P_PA_DEBUG_MODE = 'Y' Then
3631     print_msg('start of Check_ratebased_pltrxns API');
3632     End If;
3633     g_stage := 'Check_ratebased_pltrxns:100';
3634     l_webAdi_context := PA_FP_WEBADI_PKG.G_FP_WA_CALC_CALLING_CONTEXT;
3635 
3636        l_resource_assignment_tab.delete;
3637            l_txn_currency_code_tab.delete;
3638            l_quantity_tab.delete;
3639            l_raw_cost_tab.delete;
3640            l_burden_cost_tab.delete;
3641            l_revenue_tab.delete;
3642            l_start_date_tab.delete;
3643            l_end_date_tab.delete;
3644 	   l_revenue_only_flag_tab.delete;
3645 	   l_costRt_g_miss_num_flag_tab.delete;
3646            l_burdRt_g_miss_num_flag_tab.delete;
3647            l_revRt_g_miss_num_flag_tab.delete;
3648 	   l_costRt_changed_flag_tab.delete;
3649     	   l_burdRt_changed_flag_tab.delete;
3650     	   l_billRt_changed_flag_tab.delete;
3651 	   l_burden_only_flag_tab.delete;
3652 	   l_uom_tab.delete;
3653     g_stage := 'Check_ratebased_pltrxns:101';
3654     --print_msg('Check for Non-rate resource with qty and raw cost are not passed');
3655     l_tbl_counter := 0;
3656     /* Start of Bug fix:4156225 process rate based resources */
3657     /* Bug fix:4214137 If version type is revenue only then plsql tabs are not populated, hence opening cursor fails with
3658      * ORA-22160: element at index [1] does not exist in Package
3659      * Fix: Open the cursor only if budget version is cost or all */
3660     IF g_budget_version_type IN ('COST','ALL') Then
3661        FOR i IN cur_NonRtBaseRa LOOP
3662 	/*
3663         print_msg('RA['||i.resource_assignment_id||']Cur['||i.txn_currency_code||']');
3664 	print_msg('qty['||i.quantity||']Raw['||i.txn_raw_cost||']brd['||i.txn_burdened_cost||']');
3665 	*/
3666         l_tbl_counter := l_tbl_counter +1;
3667         If p_source_context = 'RESOURCE_ASSIGNMENT' then
3668                         l_start_date := NULL;
3669                         l_end_date := NULL;
3670                 Else
3671                         l_start_date := i.start_date;
3672                         l_end_date := i.end_date;
3673                 End If;
3674         l_resource_assignment_tab(l_tbl_counter) := i.resource_assignment_id;
3675         l_txn_currency_code_tab(l_tbl_counter) := i.txn_currency_code;
3676         l_start_date_tab(l_tbl_counter)        := i.start_date;
3677         l_end_date_tab(l_tbl_counter)        := i.end_date;
3678 	l_uom_tab(l_tbl_counter)        := i.uom;
3679 	l_revenue_only_flag_tab(l_tbl_counter) := 'N';
3680 	l_costRt_g_miss_num_flag_tab(l_tbl_counter ) := NULL;
3681         l_burdRt_g_miss_num_flag_tab(l_tbl_counter ) := NULL;
3682         l_revRt_g_miss_num_flag_tab(l_tbl_counter ) := NULL;
3683 	l_costRt_changed_flag_tab(l_tbl_counter ) := NULL;
3684         l_burdRt_changed_flag_tab(l_tbl_counter ) := NULL;
3685         l_billRt_changed_flag_tab(l_tbl_counter ) := NULL;
3686 	l_burden_only_flag_tab(l_tbl_counter) := 'N';
3687         IF g_budget_version_type in ('COST') Then
3688             --print_msg('Assigning burden cost to quantity');
3689             l_quantity_tab(l_tbl_counter) := i.txn_burdened_cost;
3690             l_raw_cost_tab(l_tbl_counter) := i.txn_burdened_cost;
3691 	    l_burden_only_flag_tab(l_tbl_counter) := 'Y';
3692 	    l_costRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
3693 	    l_costRt_changed_flag_tab(l_tbl_counter ) := 'N';
3694 	    l_burdRt_changed_flag_tab(l_tbl_counter ) := 'N';
3695         Elsif g_budget_version_type in ('ALL') Then
3696             If NVL(i.txn_burdened_cost,0) <> 0 Then
3697                --print_msg('Assigning burden cost to quantity');
3698                l_quantity_tab(l_tbl_counter) := i.txn_burdened_cost;
3699                l_raw_cost_tab(l_tbl_counter) := i.txn_burdened_cost;
3700 		l_burden_only_flag_tab(l_tbl_counter) := 'Y';
3701 	        l_costRt_changed_flag_tab(l_tbl_counter ) := 'N';
3702                 l_burdRt_changed_flag_tab(l_tbl_counter ) := 'N';
3703 		l_billRt_changed_flag_tab(l_tbl_counter ) := 'N';
3704 	       l_costRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
3705         	l_burdRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
3706         	l_revRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
3707             Else
3708                --print_msg('Assigning Revenue to quantity');
3709                 l_quantity_tab(l_tbl_counter) := i.txn_revenue;
3710                 l_raw_cost_tab(l_tbl_counter) := i.txn_revenue;
3711 		l_revenue_only_flag_tab(l_tbl_counter) := 'Y';
3712 		l_costRt_changed_flag_tab(l_tbl_counter ) := 'N';
3713                 l_burdRt_changed_flag_tab(l_tbl_counter ) := 'N';
3714 		l_billRt_changed_flag_tab(l_tbl_counter ) := 'N';
3715 		l_costRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
3716                 l_burdRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
3717                 l_revRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
3718             End If;
3719         End If;
3720        END LOOP;
3721        IF l_resource_assignment_tab.COUNT > 0 Then
3722         g_stage := 'Check_ratebased_pltrxns:102';
3723         --print_msg(g_stage);
3724         l_reset_plsql_tab_flag := 'Y';
3725         FORALL i IN l_resource_assignment_tab.FIRST ..l_resource_assignment_tab.LAST
3726             UPDATE /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP_N1) */ pa_fp_spread_calc_tmp tmp
3727                         SET tmp.quantity = l_quantity_tab(i)
3728                            ,tmp.txn_raw_cost = decode(nvl(tmp.txn_raw_cost,0),0,l_raw_cost_tab(i),tmp.txn_raw_cost)
3729                		   ,tmp.cost_rate_override = decode(l_revenue_only_flag_tab(i),'Y',0,1)
3730 			   ,tmp.burden_cost_rate_override = decode(l_revenue_only_flag_tab(i),'Y',0
3731 						,decode(g_wp_version_flag,'Y',tmp.burden_cost_rate_override
3732 						 , decode(nvl(tmp.burden_cost_changed_flag,'N'),'N',NULL,tmp.burden_cost_rate_override)))
3733 			   ,tmp.revenue_only_entered_flag = l_revenue_only_flag_tab(i)
3734 			   ,tmp.cost_rate_g_miss_num_flag = NVL(l_costRt_g_miss_num_flag_tab(i),tmp.cost_rate_g_miss_num_flag)
3735 			   ,tmp.burden_rate_g_miss_num_flag = nvl(l_burdRt_g_miss_num_flag_tab(i),tmp.burden_rate_g_miss_num_flag)
3736                            ,tmp.bill_rate_g_miss_num_flag = NVL(l_revRt_g_miss_num_flag_tab(i),tmp.bill_rate_g_miss_num_flag)
3737 			   ,tmp.cost_rate_changed_flag = nvl(l_costRt_changed_flag_tab(i),tmp.cost_rate_changed_flag)
3738 			   ,tmp.burden_rate_changed_flag = Nvl(l_burdRt_changed_flag_tab(i),tmp.burden_rate_changed_flag)
3739 			   ,tmp.bill_rate_changed_flag = nvl(l_billRt_changed_flag_tab(i),tmp.bill_rate_changed_flag)
3740 			   ,tmp.burden_only_entered_flag = l_burden_only_flag_tab(i)
3741                         WHERE tmp.resource_assignment_id = l_resource_assignment_tab(i)
3742                         AND  tmp.txn_currency_code = l_txn_currency_code_tab(i)
3743                         AND  ((p_source_context = 'RESOURCE_ASSIGNMENT')
3744                               OR
3745                               (p_source_context = 'BUDGET_LINE'
3746                                and tmp.start_date = l_start_date_tab(i)
3747                                and tmp.end_date = l_end_date_tab(i)
3748                              ));
3749        End If;
3750     END IF;
3751     /* end of bug fix: 4156225 */
3752     IF P_PA_DEBUG_MODE = 'Y' Then
3753     print_msg('Check for Rateresource with qty and raw cost are not passed');
3754     End If;
3755     /* process rate based resources */
3756     l_tbl_counter := 0;
3757     l_resource_assignment_tab.delete;
3758         l_txn_currency_code_tab.delete;
3759         l_quantity_tab.delete;
3760         l_raw_cost_tab.delete;
3761         l_burden_cost_tab.delete;
3762         l_revenue_tab.delete;
3763         l_start_date_tab.delete;
3764         l_end_date_tab.delete;
3765 	l_revenue_only_flag_tab.delete;
3766 	l_costRt_g_miss_num_flag_tab.delete;
3767         l_burdRt_g_miss_num_flag_tab.delete;
3768         l_revRt_g_miss_num_flag_tab.delete;
3769 	l_costRt_changed_flag_tab.delete;
3770            l_burdRt_changed_flag_tab.delete;
3771            l_billRt_changed_flag_tab.delete;
3772 	 l_burden_only_flag_tab.delete;
3773 	 l_uom_tab.delete;
3774     g_stage := 'Check_ratebased_pltrxns:103';
3775 
3776     FOR i IN cur_ra LOOP
3777 	BEGIN  --{ bug fix:5726773
3778       -- bug 4431269: initializing the following variables to null
3779       IF l_webAdi_context = 'WEBADI_CALCULATE' AND
3780          (l_webadi_task_id IS NOT NULL OR l_webadi_rlm_id IS NOT NULL) THEN
3781           l_webadi_task_id := null;
3782           l_webadi_rlm_id  := null;
3783       END IF;
3784 
3785       IF (NVl(i.txn_raw_cost,0) = 0
3786              AND NVL(i.txn_burdened_cost,0) = 0
3787              AND NVL(i.txn_revenue,0) = 0) THEN       --{
3788                  --this is a new record, needs to be skipped
3789                  NULL;
3790       ELSIF (i.re_spread_amts_flag = 'Y'
3791  	                 or i.sp_curve_change_flag = 'Y'
3792  	                 or i.plan_dates_change_flag = 'Y'
3793  	                 or i.sp_fix_date_change_flag = 'Y'
3794  	                 or i.mfc_cost_change_flag = 'Y'
3795  	                 or i.rlm_id_change_flag = 'Y'
3796  	                 or i.delete_bl_flag = 'Y' ) Then
3797  	                 -- Resource attribute changed, so skip this record
3798  	                 NULL;
3799  	       ELSIF ((i.version_type in ('COST','ALL')
3800  	                 and i.raw_cost_changed_flag = 'N'
3801  	                 and i.burden_cost_changed_flag ='N'
3802  	                 and i.revenue_changed_flag = 'N') OR
3803  	              (i.version_type = 'REVENUE' and i.revenue_changed_flag = 'N')) Then
3804  	                 -- amounts are not changed so skip this record
3805  	                 NULL;
3806       ELSE
3807 	-- amounts only changed for a rate based resource
3808  	         IF P_PA_DEBUG_MODE = 'Y' Then
3809  	                 print_msg('amounts only changed for rate based planning resource:'||i.resource_assignment_id);
3810  	         End If;
3811         If p_source_context = 'RESOURCE_ASSIGNMENT' then
3812             l_start_date := NULL;
3813                         l_end_date := NULL;
3814         Else
3815             l_start_date := i.start_date;
3816             l_end_date := i.end_date;
3817         End If;
3818 
3819 	/* bug fix:5726773 */
3820  	         get_bl_sum
3821  	                 (p_budget_version_id => p_budget_version_id
3822  	                 ,p_ra_id        => i.resource_assignment_id
3823  	                 ,p_txn_cur_code => i.txn_currency_code
3824  	                 ,p_source_context  =>p_source_context
3825  	                 ,p_start_date      => l_start_date
3826  	                 ,p_end_date        => l_end_date
3827  	                 ,x_bl_qty_sum  => i.bl_sum_qty );
3828 
3829         If p_source_context = 'BUDGET_LINE' Then
3830             If i.bl_quantity is NULL and  NVL(i.quantity,0) = 0 Then
3831                print_msg('periodic budget lines not exists, now check at least budget line exists for ra ');
3832                l_mark_non_rate_base_flag := 'N';
3833                l_exists_flag := 'N';
3834                OPEN cur_bl_chk(i.resource_assignment_id,i.txn_currency_code);
3835                FETCH cur_bl_chk INTO l_exists_flag;
3836                CLOSE cur_bl_chk;
3837 
3838 	       /*bug fix:5726773 */
3839  	                If i.bl_sum_qty = 0 and l_exists_flag = 'Y' Then
3840  	                  If ((i.version_type in ('COST','ALL') and i.cost_rate_changed_flag = 'Y')
3841  	                      OR (i.version_type = 'REVENUE' and i.bill_rate_changed_flag = 'Y')) Then
3842  	                         print_msg('By passing planning resource record from Check Rate base resource@BUDGET-lINE');
3843  	                         RAISE SKIP_RECORD;
3844  	                  End If;
3845  	                End If;
3846 
3847                If NVL(l_exists_flag,'N') = 'Y' Then
3848                 print_msg('budget line exists and user has entered only the amounts so throw an error');
3849  	                      /*bug fix:5726773 */
3850  	                         If i.bl_sum_qty = 0 and l_exists_flag = 'Y' Then
3851  	                            If g_Plan_Class_Type = 'BUDGET' Then
3852  	                                 l_message_name := 'PA_FP_RATE_BASE_PLAN_QTY_REQD';
3853  	                                 l_lkp_code := 'PA_FP_WA_CAL_NO_QTY_ERR';
3854  	                            Else
3855  	                                 l_message_name := 'PA_FP_RATE_BASE_ETC_QTY_REQD';
3856  	                                 l_lkp_code := 'PA_FP_WA_CAL_NO_ETCQTY_ERR';
3857  	                            End If;
3858  	                         Else
3859  	                                 l_message_name :='PA_FP_RATE_BASE_QTY_REQD';
3860  	                                 l_lkp_code := 'PA_FP_WA_CAL_NO_QTY_ERR';
3861  	                         End If;
3862                     -- bug 4431269: added the following condition
3863                     IF l_webAdi_context = 'WEBADI_CALCULATE' THEN
3864                         -- getting task_id and rlm_id for the corresponding ra_id
3865                         -- only for the invalid records
3866                         SELECT pra.task_id,
3867                                pra.resource_list_member_id
3868                         INTO   l_webadi_task_id,
3869                                l_webadi_rlm_id
3870                         FROM   pa_resource_assignments pra
3871                         WHERE  pra.resource_assignment_id = i.resource_assignment_id
3872                         AND    pra.budget_version_id = p_budget_version_id;
3873                         -- populating the error tables.
3874                         --print_msg('1100.1.1.1:Web ADI context populating errors');
3875                         PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl.EXTEND(1);
3876 			--bug fix:5726773 PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl
3877                         --(PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl.COUNT).error_code   := 'PA_FP_WA_CAL_NO_QTY_ERR';
3878 			PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl
3879 			(PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl.COUNT).error_code := l_lkp_code;
3880  	                         PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl
3881  	                           (PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl.COUNT).task_id      := l_webadi_task_id;
3882  	                         PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl
3883  	                           (PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl.COUNT).rlm_id       := l_webadi_rlm_id;
3884  	                         PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl
3885  	                           (PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl.COUNT).txn_currency := i.txn_currency_code;
3886                     ELSE
3887 
3888                           PA_UTILS.ADD_MESSAGE
3889                             (p_app_short_name => 'PA'
3890                             ,p_msg_name       => l_message_name
3891                             ,p_token1         => 'P_BUDGET_VERSION_NAME'
3892                             ,p_value1         => i.version_name
3893                             ,p_token2         => 'P_RESOURCE_NAME'
3894                             ,p_value2         => i.alias
3895                             ,p_token3         => 'P_RESOURCE_ASSIGNMENT'
3896                             ,p_value3         => i.resource_assignment_id
3897                             );
3898                     END IF;
3899                     x_return_status := 'E';
3900                Else
3901                 l_exists_flag := 'N';
3902                 OPEN cur_tmp_chk(i.resource_assignment_id,i.txn_currency_code);
3903                             FETCH cur_tmp_chk INTO l_exists_flag;
3904                             CLOSE cur_tmp_chk;
3905                 If NVL(l_exists_flag,'N') = 'Y' Then
3906                      print_msg('user has entered mix and match of qty and amounts so throw an error');
3907  	                         /*bug fix:5726773 */
3908  	                         If i.bl_sum_qty = 0 and l_exists_flag = 'Y' Then
3909  	                            If g_Plan_Class_Type = 'BUDGET' Then
3910  	                                 l_message_name := 'PA_FP_RATE_BASE_PLAN_QTY_REQD';
3911  	                                 l_lkp_code := 'PA_FP_WA_CAL_NO_QTY_ERR';
3912  	                            Else
3913  	                                 l_message_name := 'PA_FP_RATE_BASE_ETC_QTY_REQD';
3914  	                                 l_lkp_code := 'PA_FP_WA_CAL_NO_ETCQTY_ERR';
3915  	                            End If;
3916  	                         Else
3917  	                                 l_message_name :='PA_FP_RATE_BASE_QTY_REQD';
3918  	                                 l_lkp_code := 'PA_FP_WA_CAL_NO_QTY_ERR';
3919  	                         End If;
3920                      -- bug 4431269: added the following condition
3921                     IF l_webAdi_context = 'WEBADI_CALCULATE' THEN
3922                         -- getting task_id and rlm_id for the corresponding ra_id
3923                         -- only for the invalid records
3924                         SELECT pra.task_id,
3925                                pra.resource_list_member_id
3926                         INTO   l_webadi_task_id,
3927                                l_webadi_rlm_id
3928                         FROM   pa_resource_assignments pra
3929                         WHERE  pra.resource_assignment_id = i.resource_assignment_id
3930                         AND    pra.budget_version_id = p_budget_version_id;
3931                         -- populating the error tables.
3932                         --print_msg('1100.1.1.1:Web ADI context populating errors');
3933                         PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl.EXTEND(1);
3934 			--bug fix:5726773 added new lookup code :l_lkp_code to display based on plan class type
3935 			--PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl
3936 			--(PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl.COUNT).error_code   := 'PA_FP_WA_CAL_NO_QTY_ERR';
3937 			PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl
3938  	                           (PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl.COUNT).error_code := l_lkp_code;
3939  	                         PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl
3940  	                           (PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl.COUNT).task_id      := l_webadi_task_id;
3941  	                         PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl
3942  	                           (PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl.COUNT).rlm_id       := l_webadi_rlm_id;
3943  	                         PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl
3944  	                           (PA_FP_WEBADI_PKG.g_fp_webadi_rec_tbl.COUNT).txn_currency := i.txn_currency_code;
3945                     ELSE
3946                                       PA_UTILS.ADD_MESSAGE
3947                                 (p_app_short_name => 'PA'
3948                                         ,p_msg_name       => l_message_name
3949                                         ,p_token1         => 'P_BUDGET_VERSION_NAME'
3950                                         ,p_value1         => i.version_name
3951                                         ,p_token2         => 'P_RESOURCE_NAME'
3952                                         ,p_value2         => i.alias
3953                                         ,p_token3         => 'P_RESOURCE_ASSIGNMENT'
3954                                         ,p_value3         => i.resource_assignment_id
3955                                         );
3956                     END IF;
3957                     x_return_status := 'E';
3958                 Else
3959                     --print_msg('Mark this transaction as Non-Rate based');
3960                     l_mark_non_rate_base_flag := 'Y';
3961                 End If;
3962                End If;
3963             End If;
3964         End If;
3965 
3966         /* Now populate the local plsql tabls to copy the costs to qty and make trx as non-rate base */
3967                 IF ( p_source_context = 'RESOURCE_ASSIGNMENT' OR l_mark_non_rate_base_flag = 'Y' ) Then
3968                         If i.bl_quantity is NULL and  NVL(i.quantity,0) = 0 Then
3969 
3970               /* Check budgetline exists for this resource with other currency */
3971               If p_source_context = 'RESOURCE_ASSIGNMENT' Then
3972                 l_exists_flag := 'N';
3973                             OPEN cur_bl_chk(i.resource_assignment_id,i.txn_currency_code);
3974                             FETCH cur_bl_chk INTO l_exists_flag;
3975                             CLOSE cur_bl_chk;
3976 
3977 			    /*bug fix:5726773 */
3978  	                         If i.bl_sum_qty = 0 and l_exists_flag = 'Y' Then
3979  	                          If ((i.version_type in ('COST','ALL') and i.cost_rate_changed_flag = 'Y')
3980  	                            OR (i.version_type = 'REVENUE' and i.bill_rate_changed_flag = 'Y')) Then
3981  	                               print_msg('By passing planning resource record from Check Rate base resource@BUDGET-lINE');
3982  	                               RAISE SKIP_RECORD;
3983  	                          End If;
3984  	                         End If;
3985 
3986  	                         If i.bl_sum_qty = 0 and l_exists_flag = 'Y' Then
3987  	                            If g_Plan_Class_Type = 'BUDGET' Then
3988  	                                 l_message_name := 'PA_FP_RATE_BASE_PLAN_QTY_REQD';
3989  	                                 l_lkp_code := 'PA_FP_WA_CAL_NO_QTY_ERR';
3990  	                            Else
3991  	                                 l_message_name := 'PA_FP_RATE_BASE_ETC_QTY_REQD';
3992  	                                 l_lkp_code := 'PA_FP_WA_CAL_NO_ETCQTY_ERR';
3993  	                            End If;
3994  	                         Else
3995  	                                 l_message_name :='PA_FP_RATE_BASE_QTY_REQD';
3996  	                                 l_lkp_code := 'PA_FP_WA_CAL_NO_QTY_ERR';
3997  	                         End If;
3998  	                         /* end of bug fix:5726773 */
3999 
4000                             If NVL(l_exists_flag,'N') = 'Y' Then
4001                                       PA_UTILS.ADD_MESSAGE
4002                                 (p_app_short_name => 'PA'
4003                                         ,p_msg_name       => l_message_name
4004                                         ,p_token1         => 'P_BUDGET_VERSION_NAME'
4005                                         ,p_value1         => i.version_name
4006                                         ,p_token2         => 'P_RESOURCE_NAME'
4007                                         ,p_value2         => i.alias
4008                                         ,p_token3         => 'P_RESOURCE_ASSIGNMENT'
4009                                         ,p_value3         => i.resource_assignment_id
4010                                         );
4011                                         x_return_status := 'E';
4012                 End If;
4013                End If;
4014                IF x_return_status = 'S'  Then  --{
4015                                 print_msg('No budget lines exists, User has entered only the amounts for rate based trxn');
4016                                 l_tbl_counter := l_tbl_counter +1;
4017                                 l_resource_assignment_tab(l_tbl_counter) := i.resource_assignment_id;
4018                                 l_txn_currency_code_tab(l_tbl_counter) := i.txn_currency_code;
4019 				l_uom_tab(l_tbl_counter) := i.Uom;
4020                                 l_quantity_tab(l_tbl_counter) := i.quantity;
4021                                 l_raw_cost_tab(l_tbl_counter) := i.txn_raw_cost;
4022                                 l_burden_cost_tab(l_tbl_counter) := i.txn_burdened_cost;
4023                                 l_revenue_tab(l_tbl_counter) := i.txn_revenue;
4024                                 l_start_date_tab(l_tbl_counter) := i.start_date;
4025                                 l_end_date_tab(l_tbl_counter) := i.end_date;
4026 				l_revenue_only_flag_tab(l_tbl_counter) := 'N';
4027 				l_costRt_g_miss_num_flag_tab(l_tbl_counter ) := NULL;
4028                 		l_burdRt_g_miss_num_flag_tab(l_tbl_counter ) := NULL;
4029                 		l_revRt_g_miss_num_flag_tab(l_tbl_counter ) := NULL;
4030 				l_burden_only_flag_tab(l_tbl_counter) := 'N';
4031                                 IF i.version_type = 'ALL' Then
4032                                    If nvl(i.txn_raw_cost,0) = 0
4033                                       and nvl(i.txn_burdened_cost,0) = 0
4034                                       and nvl(i.txn_revenue,0) <> 0 Then
4035                                         -- revenue only entered so copy this to quantity
4036                                         l_quantity_tab(l_tbl_counter) := i.txn_revenue;
4037 					l_revenue_only_flag_tab(l_tbl_counter) := 'Y';
4038 					l_costRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4039                 			l_burdRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4040                 			l_revRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4041 					l_costRt_changed_flag_tab(l_tbl_counter ) := 'N';
4042                 			l_burdRt_changed_flag_tab(l_tbl_counter ) := 'N';
4043                 			l_billRt_changed_flag_tab(l_tbl_counter ) := 'N';
4044                                    Elsif nvl(i.txn_raw_cost,0) = 0
4045                                         and nvl(i.txn_burdened_cost,0) <> 0 Then
4046                                         -- only burden and revenu is entered so copy burden to raw and qty
4047                                         l_quantity_tab(l_tbl_counter) := i.txn_burdened_cost;
4048                                         l_raw_cost_tab(l_tbl_counter) := i.txn_burdened_cost;
4049 					l_burden_only_flag_tab(l_tbl_counter) := 'Y';
4050 					l_costRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4051                 			l_burdRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4052                 			l_revRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4053 					l_costRt_changed_flag_tab(l_tbl_counter ) := 'N';
4054                 			l_burdRt_changed_flag_tab(l_tbl_counter ) := 'N';
4055                 			l_billRt_changed_flag_tab(l_tbl_counter ) := 'N';
4056                                    Elsif nvl(i.txn_raw_cost,0) <> 0 Then
4057                                         l_quantity_tab(l_tbl_counter) := i.txn_raw_cost;
4058 					l_costRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4059                                         l_burdRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4060                                         l_revRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4061 					l_costRt_changed_flag_tab(l_tbl_counter ) := 'N';
4062                 			l_burdRt_changed_flag_tab(l_tbl_counter ) := 'N';
4063                 			l_billRt_changed_flag_tab(l_tbl_counter ) := 'N';
4064                                    End If;
4065                                 Elsif i.version_type = 'COST' Then
4066                                    If nvl(i.txn_raw_cost,0) = 0
4067                                         and nvl(i.txn_burdened_cost,0) <> 0 Then
4068                                         -- only burden cost is entered so copy burden to raw and qty
4069                                         l_quantity_tab(l_tbl_counter) := i.txn_burdened_cost;
4070                                         l_raw_cost_tab(l_tbl_counter) := i.txn_burdened_cost;
4071 					l_burden_only_flag_tab(l_tbl_counter) := 'Y';
4072 					l_costRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4073                                         l_burdRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4074                                         l_revRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4075 					l_costRt_changed_flag_tab(l_tbl_counter ) := 'N';
4076                 			l_burdRt_changed_flag_tab(l_tbl_counter ) := 'N';
4077                 			l_billRt_changed_flag_tab(l_tbl_counter ) := 'N';
4078                                    Elsif nvl(i.txn_raw_cost,0) <> 0 Then
4079                                         l_quantity_tab(l_tbl_counter) := i.txn_raw_cost;
4080 					l_costRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4081                                         l_burdRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4082                                         l_revRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4083 					l_costRt_changed_flag_tab(l_tbl_counter ) := 'N';
4084                 			l_burdRt_changed_flag_tab(l_tbl_counter ) := 'N';
4085                 			l_billRt_changed_flag_tab(l_tbl_counter ) := 'N';
4086                                    End If;
4087                                 Elsif i.version_type = 'REVENUE' Then
4088                                    If  nvl(i.txn_revenue,0) <> 0 Then
4089                                         -- revenue only entered so copy this to quantity
4090                                         l_quantity_tab(l_tbl_counter) := i.txn_revenue;
4091 					l_costRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4092                                         l_burdRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4093                                         l_revRt_g_miss_num_flag_tab(l_tbl_counter ) := 'N';
4094 					l_costRt_changed_flag_tab(l_tbl_counter ) := 'N';
4095                 			l_burdRt_changed_flag_tab(l_tbl_counter ) := 'N';
4096                 			l_billRt_changed_flag_tab(l_tbl_counter ) := 'N';
4097                                    End If;
4098                                 End if;
4099                            End If;
4100             End If; --}
4101         End IF;
4102        END IF; --}
4103 
4104        EXCEPTION
4105  	          WHEN SKIP_RECORD then
4106  	                 NULL;
4107  	END; --}
4108     END LOOP;
4109 
4110     IF l_resource_assignment_tab.count > 0 Then
4111        If x_return_status = 'S' Then
4112         g_stage := 'Check_ratebased_pltrxns:104';
4113         l_reset_plsql_tab_flag := 'Y';
4114 
4115         /* bug fix:5088944: When rate base resource changed to Non-rate base then clear out any override rates present */
4116         --print_msg('Updating Resource asgn curr table clear out rate overrides');
4117         FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
4118                 UPDATE pa_resource_asgn_curr rtx
4119                 SET rtx.txn_raw_cost_rate_override = NULL
4120                    ,rtx.txn_burden_cost_rate_override = NULL
4121                    ,rtx.txn_bill_rate_override = NULL
4122                 WHERE rtx.resource_assignment_id = l_resource_assignment_tab(i)
4123                 AND rtx.txn_currency_code = l_txn_currency_code_tab(i)
4124                 AND EXISTS ( select null
4125                                 from pa_resource_assignments ra
4126                                 where ra.rate_based_flag = 'Y'
4127                                 and ra.resource_assignment_id = rtx.resource_assignment_id
4128                         );
4129 
4130         /* update the resource assignments mark it as Non-Rate based */
4131 	IF P_PA_DEBUG_MODE = 'Y' Then
4132         print_msg('Updating RA with Non-Rate base flag');
4133 	End If;
4134         FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
4135             UPDATE PA_RESOURCE_ASSIGNMENTS ra
4136             SET ra.rate_based_flag = 'N'
4137                ,ra.unit_of_measure = 'DOLLARS'
4138             WHERE ra.resource_assignment_id = l_resource_assignment_tab(i);
4139 
4140         g_stage := 'Check_ratebased_pltrxns:105';
4141         /* Now update the rollup tmp with the new qty and raw cost */
4142 	IF P_PA_DEBUG_MODE = 'Y' Then
4143         print_msg('Updating rollup tmp with qty = rawcost or burden cost');
4144 	End If;
4145         FORALL i IN l_resource_assignment_tab.FIRST .. l_resource_assignment_tab.LAST
4146             UPDATE /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP_N1) */ pa_fp_spread_calc_tmp tmp
4147             SET tmp.quantity = l_quantity_tab(i)
4148                ,tmp.txn_raw_cost = decode(nvl(tmp.txn_raw_cost,0),0,l_raw_cost_tab(i),tmp.txn_raw_cost)
4149 	       ,tmp.cost_rate_override = decode(nvl(l_revenue_only_flag_tab(i),'N'),'Y',0
4150 					   ,decode(nvl(l_burden_only_flag_tab(i),'N'),'Y',1,tmp.cost_rate_override))
4151 	       ,tmp.burden_cost_rate_override = decode(l_revenue_only_flag_tab(i),'Y',0
4152                                                 ,decode(g_wp_version_flag,'Y',tmp.burden_cost_rate_override
4153                                                  , decode(nvl(tmp.burden_cost_changed_flag,'N'),'N',NULL,tmp.burden_cost_rate_override)))
4154 	       ,tmp.revenue_only_entered_flag = l_revenue_only_flag_tab(i)
4155 		,tmp.cost_rate_g_miss_num_flag = NVL(l_costRt_g_miss_num_flag_tab(i),tmp.cost_rate_g_miss_num_flag)
4156                ,tmp.burden_rate_g_miss_num_flag = nvl(l_burdRt_g_miss_num_flag_tab(i),tmp.burden_rate_g_miss_num_flag)
4157                ,tmp.bill_rate_g_miss_num_flag = NVL(l_revRt_g_miss_num_flag_tab(i),tmp.bill_rate_g_miss_num_flag)
4158 		,tmp.cost_rate_changed_flag = nvl(l_costRt_changed_flag_tab(i),tmp.cost_rate_changed_flag)
4159                 ,tmp.burden_rate_changed_flag = Nvl(l_burdRt_changed_flag_tab(i),tmp.burden_rate_changed_flag)
4160                 ,tmp.bill_rate_changed_flag = nvl(l_billRt_changed_flag_tab(i),tmp.bill_rate_changed_flag)
4161 		,tmp.burden_only_entered_flag = l_burden_only_flag_tab(i)
4162 		,(tmp.rate_based_flag
4163 		 ,tmp.resource_rate_based_flag
4164 		 ,tmp.resource_uom) =
4165 					(select nvl(ra.rate_based_flag,'N' )
4166 						,nvl(ra.resource_rate_based_flag,'N')
4167 						,l_uom_tab(i)
4168 					from pa_resource_assignments ra
4169 					where ra.resource_assignment_id = tmp.resource_assignment_id)
4170             WHERE tmp.resource_assignment_id = l_resource_assignment_tab(i)
4171             AND  tmp.txn_currency_code = l_txn_currency_code_tab(i)
4172             AND  ((p_source_context = 'RESOURCE_ASSIGNMENT')
4173                   OR
4174                   (p_source_context = 'BUDGET_LINE'
4175                    and tmp.start_date = l_start_date_tab(i)
4176                    and tmp.end_date = l_end_date_tab(i)
4177                  ));
4178        End If;
4179     END If;
4180     g_stage := 'Check_ratebased_pltrxns:107';
4181 	IF P_PA_DEBUG_MODE = 'Y' Then
4182     	print_msg('Leaving Check_ratebased_pltrxns with retSts['||x_return_status||']');
4183 	End if;
4184         RETURN;
4185 EXCEPTION
4186         WHEN OTHERS THEN
4187                 x_return_status := 'U';
4188                 print_msg('Failed in Check_ratebased_pltrxns API'||sqlcode||sqlerrm);
4189                  fnd_msg_pub.add_exc_msg
4190                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
4191                  ,p_procedure_name => 'Check_ratebased_pltrxns');
4192                 RAISE;
4193 END Check_ratebased_pltrxns;
4194 
4195 /* Bug fix:5483430: This API checks at lease one period exists between planning start and end date
4196  * Logic: If time phase code is GL
4197  *  Check at lease one gl period exists between the planning resource assignment dates
4198  *  If the time phase code is PA
4199  *  Check at least one PA period exists between the planning resource assignment dates
4200  *  If the time phase is none then donot check as the period make no sense for non-time phase budgets
4201  *  For a fixed date spread curve, period must be defined for the sp_fixed_date
4202  */
4203 PROCEDURE Check_GLPA_periods_exists(
4204                         p_budget_verson_id  IN NUMBER
4205                         ,p_time_phase_code  IN VARCHAR2
4206                         ,x_return_status    OUT NOCOPY VARCHAR2
4207                         ,x_msg_data         OUT NOCOPY VARCHAR2
4208                         ) IS
4209 
4210 	CURSOR get_name_and_type_csr IS
4211         SELECT gsb.period_set_name 		period_set_name
4212                 ,gsb.accounted_period_type	accounted_period_type
4213                 ,pia.pa_period_type		pa_period_type
4214          FROM gl_sets_of_books          gsb
4215                 ,pa_implementations_all pia
4216                 ,pa_projects_all        ppa
4217                 ,pa_budget_versions     pbv
4218                 ,pa_proj_fp_options     ppfo
4219         WHERE ppa.project_id        = pbv.project_id
4220           AND pbv.budget_version_id = ppfo.fin_plan_version_id
4221           AND ppa.org_id   = pia.org_id
4222           AND gsb.set_of_books_id   = pia.set_of_books_id
4223           AND pbv.budget_version_id = p_budget_verson_id;
4224 
4225 	periodDetailsRec 	get_name_and_type_csr%rowtype;
4226 
4227 	CURSOR get_ra_error_details IS
4228 	SELECT ra.resource_assignment_id
4229 		,ra.task_id
4230 		,DECODE(ra.spread_curve_id,6,ra.sp_fixed_date
4231 			,decode(LEAST(NVL(g_etc_start_date,ra.planning_start_date),ra.planning_end_date),ra.planning_end_date,ra.planning_start_date,NVL(g_etc_start_date,ra.planning_start_date))) planning_start_date   --Bug#6936782
4232 		,DECODE(ra.spread_curve_id,6,ra.sp_fixed_date,ra.planning_end_date) planning_end_date
4233 		,tmp.task_name
4234 		,tmp.resource_name
4235 	FROM pa_resource_assignments ra
4236 	    ,pa_fp_spread_calc_tmp tmp
4237 	WHERE ra.budget_version_id = p_budget_verson_id
4238 	AND  ra.resource_assignment_id = tmp.resource_assignment_id
4239 	AND NOT EXISTS
4240 		(SELECT 'No period exist'
4241         	FROM gl_periods gp
4242         	WHERE gp.period_set_name  = periodDetailsRec.period_set_name
4243         	AND gp.period_type        = decode(p_time_phase_code,'G',periodDetailsRec.accounted_period_type
4244 							,'P',periodDetailsRec.pa_period_type)
4245         	AND gp.adjustment_period_flag = 'N'
4246         	AND gp.start_date  <= decode(nvl(ra.spread_curve_id,1),6
4247 					 ,ra.sp_fixed_date,ra.planning_end_date)   -- plan end date
4248         	AND  gp.end_date   >= decode(nvl(ra.spread_curve_id,1),6
4249 					,ra.sp_fixed_date,decode(LEAST(NVL(g_etc_start_date,ra.planning_start_date),ra.planning_end_date),ra.planning_end_date,ra.planning_start_date,NVL(g_etc_start_date,ra.planning_start_date)))
4250 					-- planning start date Bug#6936782
4251 		);
4252 
4253 BEGIN
4254 	x_return_status := 'S';
4255 	x_msg_data := NULL;
4256 	IF p_time_phase_code IN ('G','P') Then
4257 		/* get set of book details from implementation setups */
4258 		OPEN get_name_and_type_csr;
4259 		FETCH get_name_and_type_csr INTO periodDetailsRec;
4260 		IF get_name_and_type_csr%NOTFOUND THEN
4261 			--raise others;
4262 			null;
4263 		END If;
4264 		CLOSE get_name_and_type_csr;
4265 
4266 		/* loop through each record for which no period has been defined in GL / PA
4267 		* populate error message for each planning resource
4268 		*/
4269 		FOR i IN get_ra_error_details LOOP
4270             		x_return_status := 'E';
4271             		PA_UTILS.ADD_MESSAGE
4272             		(p_app_short_name => 'PA'
4273                         ,p_msg_name      => 'PA_FP_PERIODS_IS_NULL'
4274             		,p_token1         => 'L_PROJECT_NAME'
4275                         ,p_value1         => g_project_name
4276                         ,p_token2         => 'L_TASK_NAME'
4277                         ,p_value2         => i.task_name
4278                         ,p_token3         => 'L_RESOURCE_NAME'
4279                         ,p_value3         => i.resource_name
4280                         ,p_token4         => 'L_LINE_START_DATE'
4281                         ,p_value4         => i.planning_start_date
4282                         ,p_token5        => 'L_LINE_END_DATE'
4283                         ,p_value5        => i.planning_end_date
4284             		);
4285 		END LOOP;
4286 	Else
4287 		NULL;
4288 	END If;
4289 	IF P_PA_DEBUG_MODE = 'Y' Then
4290          print_msg('End of Check_GLPA_periods_exists api ReturnStatus['||x_return_status||']');
4291         End If;
4292 
4293 EXCEPTION
4294 
4295         WHEN OTHERS THEN
4296                 x_return_status := 'U';
4297                 print_msg('Failed in Check_GLPA_periods_exists API'||sqlcode||sqlerrm);
4298                  fnd_msg_pub.add_exc_msg
4299                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
4300                  ,p_procedure_name => 'Check_GLPA_periods_exists');
4301                 RAISE;
4302 
4303 END Check_GLPA_periods_exists;
4304 
4305 
4306 /* This API will process the Non-Time phased budget lines */
4307 PROCEDURE process_NonTimePhase_Lines
4308                   (p_budget_version_id         IN Number
4309                   ,p_time_phased_code          IN Varchar2
4310                   ,p_apply_progress_flag       IN Varchar2
4311                   ,p_source_context            IN Varchar2
4312                   ,x_return_status             OUT NOCOPY Varchar2
4313                   ,x_msg_data                  OUT NOCOPY Varchar2
4314                   ) IS
4315 
4316         l_budget_line_id_tab       pa_plsql_datatypes.NumTabTyp;
4317         l_resAsgn_id_tab           pa_plsql_datatypes.NumTabTyp;
4318         l_txn_curr_code_tab        pa_plsql_datatypes.Char50TabTyp;
4319         l_start_date_tab           pa_plsql_datatypes.dateTabTyp;
4320         l_end_date_tab             pa_plsql_datatypes.dateTabTyp;
4321         l_rwCounter                INTEGER;
4322 
4323     CURSOR cur_blCorrupted IS
4324     SELECT tmp.resource_assignment_id
4325           ,tmp.txn_currency_code
4326           ,ra.planning_start_date
4327           ,ra.planning_end_date
4328           ,rl.alias resource_name
4329     FROM  pa_fp_spread_calc_tmp tmp
4330          ,pa_resource_assignments ra
4331          ,pa_resource_list_members rl
4332     WHERE tmp.budget_version_id = p_budget_version_id
4333     AND   ra.resource_assignment_id = tmp.resource_assignment_id
4334     AND   rl.resource_list_member_id = ra.resource_list_member_id
4335     AND   EXISTS ( select null
4336             from pa_budget_lines bl
4337             where bl.budget_version_id = p_budget_version_id
4338             and bl.resource_assignment_id = tmp.resource_assignment_id
4339             and bl.txn_currency_code = tmp.txn_currency_code
4340             group by bl.resource_assignment_id,bl.txn_currency_code
4341             having count(*) > 1
4342              );
4343 
4344     CURSOR cur_NonTimePhLines IS
4345     SELECT /*+ INDEX(BL PA_BUDGET_LINES_U1) */ bl.budget_line_id
4346                 ,bl.resource_assignment_id
4347                 ,bl.txn_currency_code
4348                 ,bl.start_date
4349                 ,bl.end_date
4350                 ,bl.period_name
4351                 ,bl.budget_version_id
4352                 ,bl.quantity bl_quantity
4353                 ,bl.txn_standard_cost_rate
4354                 ,bl.txn_cost_rate_override
4355                 ,bl.txn_raw_cost
4356                 ,bl.burden_cost_rate
4357                 ,bl.burden_cost_rate_override
4358                 ,bl.txn_burdened_cost
4359                 ,bl.txn_standard_bill_rate
4360                 ,bl.txn_bill_rate_override
4361                 ,bl.txn_revenue
4362                 ,bl.project_currency_code
4363                 ,bl.project_raw_cost
4364                 ,bl.project_burdened_cost
4365                 ,bl.project_revenue
4366                 ,bl.projfunc_currency_code
4367                 ,bl.raw_cost
4368                 ,bl.burdened_cost
4369                 ,bl.revenue
4370                 ,bl.cost_rejection_code
4371                 ,bl.burden_rejection_code
4372                 ,bl.revenue_rejection_code
4373                 ,bl.pc_cur_conv_rejection_code
4374                 ,bl.pfc_cur_conv_rejection_code
4375                 ,bl.init_quantity  bl_init_quantity
4376                 ,bl.txn_init_raw_cost
4377                 ,bl.txn_init_burdened_cost
4378                 ,bl.txn_init_revenue
4379                 ,tmp.new_plan_start_date   plan_start_date
4380         ,tmp.new_plan_end_date    plan_end_date
4381         FROM pa_budget_lines bl
4382             ,pa_fp_spread_calc_tmp tmp
4383         WHERE bl.budget_version_id = p_budget_version_id
4384         AND  bl.resource_assignment_id = tmp.resource_assignment_id
4385         AND  bl.txn_currency_code = tmp.txn_currency_code
4386     AND  NVL(tmp.plan_dates_change_flag,'N') = 'Y'
4387     AND  NVL(tmp.system_reference_var1,'N') = 'Y'  --ResourceWithMultiCurrency
4388     AND  ( (bl.start_date <> trunc(tmp.new_plan_start_date))
4389           OR
4390            (bl.end_date <> trunc(tmp.new_plan_end_date))
4391          );
4392 
4393     l_r_budget_line_id_tab          pa_plsql_datatypes.NumTabTyp;
4394         l_r_assignment_id_tab           pa_plsql_datatypes.NumTabTyp;
4395         l_r_txn_currency_code_tab       pa_plsql_datatypes.Char30TabTyp;
4396         l_r_start_date_tab          pa_plsql_datatypes.DateTabTyp;
4397         l_r_end_date_tab            pa_plsql_datatypes.DateTabTyp;
4398         l_r_period_name_tab         pa_plsql_datatypes.Char50TabTyp;
4399         l_r_quantity_tab            pa_plsql_datatypes.NumTabTyp;
4400         l_r_txn_raw_cost_tab            pa_plsql_datatypes.NumTabTyp;
4401         l_r_txn_burdened_cost_tab       pa_plsql_datatypes.NumTabTyp;
4402         l_r_txn_revenue_tab         pa_plsql_datatypes.NumTabTyp;
4403         l_r_project_currency_code_tab       pa_plsql_datatypes.Char30TabTyp;
4404         l_r_project_raw_cost_tab        pa_plsql_datatypes.NumTabTyp;
4405         l_r_project_burdened_cost_tab       pa_plsql_datatypes.NumTabTyp;
4406         l_r_project_revenue_tab         pa_plsql_datatypes.NumTabTyp;
4407         l_r_projfunc_currency_code_tab      pa_plsql_datatypes.Char30TabTyp;
4408         l_r_raw_cost_tab            pa_plsql_datatypes.NumTabTyp;
4409         l_r_burdened_cost_tab           pa_plsql_datatypes.NumTabTyp;
4410         l_r_revenue_tab             pa_plsql_datatypes.NumTabTyp;
4411         l_r_cost_rejection_code_tab     pa_plsql_datatypes.Char30TabTyp;
4412         l_r_burden_rejection_code_tab       pa_plsql_datatypes.Char30TabTyp;
4413         l_r_revenue_rejection_code_tab      pa_plsql_datatypes.Char30TabTyp;
4414         l_r_pc_cur_rejection_code_tab       pa_plsql_datatypes.Char30TabTyp;
4415         l_r_pfc_cur_rejection_code_tab      pa_plsql_datatypes.Char30TabTyp;
4416 
4417 
4418     Procedure InitReturningPlsqlTabls IS
4419 
4420     Begin
4421         l_r_budget_line_id_tab.delete;
4422             l_r_assignment_id_tab.delete;
4423             l_r_txn_currency_code_tab.delete;
4424             l_r_start_date_tab.delete;
4425             l_r_end_date_tab.delete;
4426             l_r_period_name_tab.delete;
4427             l_r_quantity_tab.delete;
4428             l_r_txn_raw_cost_tab.delete;
4429             l_r_txn_burdened_cost_tab.delete;
4430             l_r_txn_revenue_tab.delete;
4431             l_r_project_currency_code_tab.delete;
4432             l_r_project_raw_cost_tab.delete;
4433             l_r_project_burdened_cost_tab.delete;
4434             l_r_project_revenue_tab.delete;
4435             l_r_projfunc_currency_code_tab.delete;
4436             l_r_raw_cost_tab.delete;
4437             l_r_burdened_cost_tab.delete;
4438             l_r_revenue_tab.delete;
4439             l_r_cost_rejection_code_tab.delete;
4440             l_r_burden_rejection_code_tab.delete;
4441             l_r_revenue_rejection_code_tab.delete;
4442             l_r_pc_cur_rejection_code_tab.delete;
4443             l_r_pfc_cur_rejection_code_tab.delete;
4444 
4445     End InitReturningPlsqlTabls;
4446 
4447 
4448 BEGIN
4449     x_return_status := 'S';
4450     x_msg_data      := NULL;
4451 
4452     IF (p_time_phased_code NOT IN ('P','G') AND p_source_context <> 'BUDGET_LINE') Then  --{
4453         FOR i IN cur_blCorrupted LOOP
4454             x_return_status := 'E';
4455             PA_UTILS.ADD_MESSAGE
4456             (p_app_short_name => 'PA'
4457                         ,p_msg_name      => 'PA_FP_MULTI_NON_PERIOD'
4458             ,p_token1         => 'L_PROJECT_NAME'
4459                         ,p_value1         => g_project_name
4460                         ,p_token2         => 'L_TASK_NAME'
4461                         ,p_value2         => null
4462                         ,p_token3         => 'L_RESOURCE_NAME'
4463                         ,p_value3         => i.resource_name
4464                         ,p_token4         => 'L_LINE_START_DATE'
4465                         ,p_value4         => i.planning_start_date
4466                         ,p_token5        => 'L_LINE_END_DATE'
4467                         ,p_value5        => i.planning_end_date
4468             );
4469 
4470         END LOOP;
4471         IF x_return_status = 'S' Then  --{
4472            l_budget_line_id_tab.delete;
4473                l_resAsgn_id_tab.delete;
4474                l_txn_curr_code_tab.delete;
4475                l_start_date_tab.delete;
4476                l_end_date_tab.delete;
4477                l_rwCounter := 0;
4478            FOR i IN cur_NonTimePhLines LOOP
4479                    /* populate the plsql tabs for bulk update of budget lines later */
4480                    l_rwCounter := l_rwCounter + 1;
4481                    l_budget_line_id_tab(l_rwCounter) := i.budget_line_id;
4482                    l_resAsgn_id_tab(l_rwCounter) := i.resource_assignment_id;
4483                    l_txn_curr_code_tab(l_rwCounter) := i.txn_currency_code;
4484                    l_start_date_tab(l_rwCounter) := i.plan_start_date;
4485                    l_end_date_tab(l_rwCounter) := i.plan_end_date;
4486 
4487                    IF (g_rollup_required_flag = 'Y'
4488 		       /* bug fix:5031388
4489                        AND i.cost_rejection_code is NULL
4490                        AND i.burden_rejection_code is NULL
4491                        AND i.revenue_rejection_code is NULL
4492                        AND i.pc_cur_conv_rejection_code is NULL
4493                        AND i.pfc_cur_conv_rejection_code is NULL */
4494 		      	)  Then
4495 
4496                        /* before updating the existing budget line call the reporting API to pass -ve amts */
4497                        PA_FP_CALC_PLAN_PKG.Add_Toreporting_Tabls
4498                        (p_calling_module               => 'CALCULATE_API'
4499                        ,p_activity_code                => 'UPDATE'
4500                        ,p_budget_version_id            => p_budget_version_id
4501                        ,p_budget_line_id               => i.budget_line_id
4502                        ,p_resource_assignment_id       => i.resource_assignment_id
4503                        ,p_start_date                   => i.start_date
4504                        ,p_end_date                     => i.end_date
4505                        ,p_period_name                  => i.period_name
4506                        ,p_txn_currency_code            => i.txn_currency_code
4507                        ,p_quantity                     => i.bl_quantity *-1
4508                        ,p_txn_raw_cost                 => i.txn_raw_cost *-1
4509                        ,p_txn_burdened_cost            => i.txn_burdened_cost *-1
4510                        ,p_txn_revenue                  => i.txn_revenue *-1
4511                        ,p_project_currency_code        => i.project_currency_code
4512                        ,p_project_raw_cost             => i.project_raw_cost *-1
4513                        ,p_project_burdened_cost        => i.project_burdened_cost *-1
4514                        ,p_project_revenue              => i.project_revenue *-1
4515                        ,p_projfunc_currency_code       => i.projfunc_currency_code
4516                        ,p_projfunc_raw_cost            => i.raw_cost *-1
4517                        ,p_projfunc_burdened_cost       => i.burdened_cost *-1
4518                        ,p_projfunc_revenue             => i.revenue *-1
4519 			,p_rep_line_mode               => 'REVERSAL'
4520                        ,x_msg_data                     => x_msg_data
4521                        ,x_return_status                => x_return_status
4522                        );
4523                   End If;
4524               END LOOP;
4525           IF l_budget_line_id_tab.COUNT > 0 THEN  --{
4526             InitReturningPlsqlTabls;
4527             --print_msg('Updating budget lines with planning start and end dates for Non-TimePhase budget');
4528             FORALL i IN l_budget_line_id_tab.FIRST .. l_budget_line_id_tab.LAST
4529             UPDATE PA_BUDGET_LINES bl
4530             SET bl.start_date = NVL(l_start_date_tab(i),bl.start_date)
4531                ,bl.end_date   = NVL(l_end_date_tab(i),bl.end_date)
4532             WHERE bl.budget_version_id = p_budget_version_id
4533             AND  bl.budget_line_id = l_budget_line_id_tab(i)
4534             RETURNING
4535              bl.budget_line_id
4536             ,bl.resource_assignment_id
4537             ,bl.txn_currency_code
4538             ,bl.start_date
4539             ,bl.end_date
4540             ,bl.period_name
4541             ,bl.quantity
4542             ,bl.txn_raw_cost
4543             ,bl.txn_burdened_cost
4544             ,bl.txn_revenue
4545             ,bl.project_currency_code
4546             ,bl.project_raw_cost
4547             ,bl.project_burdened_cost
4548             ,bl.project_revenue
4549             ,bl.projfunc_currency_code
4550             ,bl.raw_cost
4551             ,bl.burdened_cost
4552             ,bl.revenue
4553             ,bl.cost_rejection_code
4554                         ,bl.burden_rejection_code
4555                         ,bl.revenue_rejection_code
4556                         ,bl.pc_cur_conv_rejection_code
4557                         ,bl.pfc_cur_conv_rejection_code
4558             BULK COLLECT INTO
4559                 l_r_budget_line_id_tab
4560                             ,l_r_assignment_id_tab
4561                             ,l_r_txn_currency_code_tab
4562                             ,l_r_start_date_tab
4563                             ,l_r_end_date_tab
4564                             ,l_r_period_name_tab
4565                             ,l_r_quantity_tab
4566                             ,l_r_txn_raw_cost_tab
4567                             ,l_r_txn_burdened_cost_tab
4568                             ,l_r_txn_revenue_tab
4569                             ,l_r_project_currency_code_tab
4570                             ,l_r_project_raw_cost_tab
4571                             ,l_r_project_burdened_cost_tab
4572                             ,l_r_project_revenue_tab
4573                             ,l_r_projfunc_currency_code_tab
4574                             ,l_r_raw_cost_tab
4575                             ,l_r_burdened_cost_tab
4576                             ,l_r_revenue_tab
4577                             ,l_r_cost_rejection_code_tab
4578                             ,l_r_burden_rejection_code_tab
4579                             ,l_r_revenue_rejection_code_tab
4580                             ,l_r_pc_cur_rejection_code_tab
4581                             ,l_r_pfc_cur_rejection_code_tab ;
4582             /* Now pass the +ve values to pji rollup api */
4583             IF g_rollup_required_flag = 'Y' Then  --{
4584             IF l_r_budget_line_id_tab.COUNT > 0 Then
4585                     FOR i IN l_r_budget_line_id_tab.FIRST .. l_r_budget_line_id_tab.LAST LOOP
4586                           IF (g_rollup_required_flag = 'Y'
4587 			   /* bug fix:5031388
4588                            AND l_r_cost_rejection_code_tab(i) is NULL
4589                            AND l_r_burden_rejection_code_tab(i) is NULL
4590                            AND l_r_revenue_rejection_code_tab(i) is NULL
4591                            AND l_r_pc_cur_rejection_code_tab(i) is NULL
4592                            AND l_r_pfc_cur_rejection_code_tab(i) is NULL */
4593 				)  Then
4594 
4595                            /* After updating the budget line dates, pass the +ve values */
4596                            PA_FP_CALC_PLAN_PKG.Add_Toreporting_Tabls
4597                            (p_calling_module               => 'CALCULATE_API'
4598                            ,p_activity_code                => 'UPDATE'
4599                            ,p_budget_version_id            => p_budget_version_id
4600                            ,p_budget_line_id               => l_r_budget_line_id_tab(i)
4601                            ,p_resource_assignment_id       => l_r_assignment_id_tab(i)
4602                            ,p_start_date                   => l_r_start_date_tab(i)
4603                            ,p_end_date                     => l_r_end_date_tab(i)
4604                            ,p_period_name                  => l_r_period_name_tab(i)
4605                            ,p_txn_currency_code            => l_r_txn_currency_code_tab(i)
4606                            ,p_quantity                     => l_r_quantity_tab(i)
4607                            ,p_txn_raw_cost                 => l_r_txn_raw_cost_tab(i)
4608                            ,p_txn_burdened_cost            => l_r_txn_burdened_cost_tab(i)
4609                            ,p_txn_revenue                  => l_r_txn_revenue_tab(i)
4610                            ,p_project_currency_code        => l_r_project_currency_code_tab(i)
4611                            ,p_project_raw_cost             => l_r_project_raw_cost_tab(i)
4612                            ,p_project_burdened_cost        => l_r_project_burdened_cost_tab(i)
4613                            ,p_project_revenue              => l_r_project_revenue_tab(i)
4614                            ,p_projfunc_currency_code       => l_r_projfunc_currency_code_tab(i)
4615                            ,p_projfunc_raw_cost            => l_r_raw_cost_tab(i)
4616                            ,p_projfunc_burdened_cost       => l_r_burdened_cost_tab(i)
4617                            ,p_projfunc_revenue             => l_r_revenue_tab(i)
4618 			   ,p_rep_line_mode               => 'POSITIVE_ENTRY'
4619                            ,x_msg_data                     => x_msg_data
4620                            ,x_return_status                => x_return_status
4621                            );
4622                        End If;
4623                       END LOOP;
4624               END IF;
4625               /* release the buffer */
4626               InitReturningPlsqlTabls;
4627               END If; --}
4628           END IF; --}
4629         END IF; --}
4630     END IF; --}
4631 	IF P_PA_DEBUG_MODE = 'Y' Then
4632          print_msg('End of process_NonTimePhase_Lines api ReturnStatus['||x_return_status||']');
4633 	End If;
4634 
4635 EXCEPTION
4636         WHEN OTHERS THEN
4637                 x_return_status := 'U';
4638                 x_msg_data := sqlcode||sqlerrm;
4639                 print_msg('Failed in process_NonTimePhase_Lines API'||x_msg_data);
4640                  fnd_msg_pub.add_exc_msg
4641                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
4642                  ,p_procedure_name => 'process_NonTimePhase_Lines');
4643                 RAISE;
4644 END process_NonTimePhase_Lines;
4645 
4646 /* This API deletes all the budget lines which falls beyond the planning start and end dates
4647 */
4648 PROCEDURE delete_budget_lines(
4649         p_budget_version_id             IN Number
4650                 ,p_budget_version_type          IN Varchar2
4651                 ,p_rollup_required_flag         IN Varchar2
4652         ,p_process_mode                 IN Varchar2
4653                 ,x_return_status                OUT NOCOPY Varchar2
4654                 ,x_msg_data                     OUT NOCOPY Varchar2
4655                 ) IS
4656         /* This cursor picks all the budget lines which falls beyond the plan dates
4657          * where actual donot exists and deletes the records from pa_budget_lines table
4658          */
4659         CURSOR cur_Delbl_Lines IS
4660         SELECT /*+ INDEX(BL PA_BUDGET_LINES_U1) */ bl.budget_line_id
4661                 ,bl.resource_assignment_id
4662                 ,bl.txn_currency_code
4663                 ,bl.start_date
4664                 ,bl.end_date
4665                 ,bl.period_name
4666                 ,bl.budget_version_id
4667                 ,bl.quantity bl_quantity
4668                 ,bl.txn_standard_cost_rate
4669                 ,bl.txn_cost_rate_override
4670                 ,bl.txn_raw_cost
4671                 ,bl.burden_cost_rate
4672                 ,bl.burden_cost_rate_override
4673                 ,bl.txn_burdened_cost
4674                 ,bl.txn_standard_bill_rate
4675                 ,bl.txn_bill_rate_override
4676                 ,bl.txn_revenue
4677                 ,bl.project_currency_code
4678                 ,bl.project_raw_cost
4679                 ,bl.project_burdened_cost
4680                 ,bl.project_revenue
4681                 ,bl.projfunc_currency_code
4682                 ,bl.raw_cost
4683                 ,bl.burdened_cost
4684                 ,bl.revenue
4685                 ,bl.cost_rejection_code
4686                 ,bl.burden_rejection_code
4687                 ,bl.revenue_rejection_code
4688                 ,bl.pc_cur_conv_rejection_code
4689                 ,bl.pfc_cur_conv_rejection_code
4690                 ,bl.init_quantity  bl_init_quantity
4691                 ,bl.txn_init_raw_cost
4692                 ,bl.txn_init_burdened_cost
4693                 ,bl.txn_init_revenue
4694         ,tmp.start_date  plan_start_date ,tmp.end_date plan_end_date
4695         FROM pa_budget_lines bl
4696             ,pa_fp_rollup_tmp tmp
4697         WHERE bl.budget_version_id = p_budget_version_id
4698         AND  bl.resource_assignment_id = tmp.resource_assignment_id
4699         AND  bl.txn_currency_code = tmp.txn_currency_code
4700     AND  NVL(tmp.processed_flag,'N') = 'Y'
4701     AND  ( NVL(bl.init_quantity,0) = 0
4702         and NVL(bl.txn_init_raw_cost,0) = 0
4703         and NVL(bl.txn_init_burdened_cost,0) = 0
4704         and NVL(bl.txn_init_revenue,0) = 0
4705          )
4706         AND  (( p_process_mode = 'PLAN_START_DATE'
4707         AND NVL(plan_Start_Date_shrunk_flag,'N') = 'Y'
4708             AND bl.end_date  < tmp.start_date )
4709          OR (p_process_mode = 'PLAN_END_DATE'
4710         AND NVL(plan_End_Date_shrunk_flag,'N') = 'Y'
4711         AND bl.start_date > tmp.END_DATE)
4712         );
4713 
4714     l_budget_line_id_tab       pa_plsql_datatypes.NumTabTyp;
4715         l_resAsgn_id_tab           pa_plsql_datatypes.NumTabTyp;
4716         l_txn_curr_code_tab        pa_plsql_datatypes.Char50TabTyp;
4717         l_start_date_tab           pa_plsql_datatypes.dateTabTyp;
4718     l_rwCounter                INTEGER;
4719     l_populate_mrc_tab_flag   Varchar2(10) := 'N';  --MRC Elimination Changes:NVL(PA_FP_CALC_PLAN_PKG.G_populate_mrc_tab_flag,'N');
4720 BEGIN
4721         x_return_status := 'S';
4722         /* Initialize the error stack */
4723     If p_pa_debug_mode = 'Y' Then
4724             pa_debug.init_err_stack('PA_FP_CALC_UTILS.delete_budget_lines');
4725     End If;
4726 
4727     --print_msg('Entered delete_budget_lines api');
4728         /* Initialize the plsql tabs */
4729         l_budget_line_id_tab.delete;
4730         l_resAsgn_id_tab.delete;
4731         l_txn_curr_code_tab.delete;
4732         l_start_date_tab.delete;
4733         l_rwCounter := 0;
4734 
4735         FOR i IN cur_Delbl_Lines LOOP  --{
4736         --print_msg('Loop for bdgetlined['||i.budget_line_id||']curCode['||i.txn_currency_code||']plSd['||i.plan_start_date||']plEd['||i.plan_end_date||']');
4737            /* populate the plsql tabs for bulk update of budget lines later */
4738            l_rwCounter := l_rwCounter + 1;
4739            l_budget_line_id_tab(l_rwCounter) := i.budget_line_id;
4740            l_resAsgn_id_tab(l_rwCounter) := i.resource_assignment_id;
4741            l_txn_curr_code_tab(l_rwCounter) := i.txn_currency_code;
4742            l_start_date_tab(l_rwCounter) := i.start_date;
4743 
4744            IF (p_rollup_required_flag = 'Y'
4745 		/* bug fix:5031388
4746                 AND i.cost_rejection_code is NULL
4747                 AND i.burden_rejection_code is NULL
4748                 AND i.revenue_rejection_code is NULL
4749                 AND i.pc_cur_conv_rejection_code is NULL
4750                 AND i.pfc_cur_conv_rejection_code is NULL */
4751 		 )  Then
4752 
4753                 /* before updating the existing budget line call the reporting API to pass -ve amts */
4754                 PA_FP_CALC_PLAN_PKG.Add_Toreporting_Tabls
4755                 (p_calling_module               => 'CALCULATE_API'
4756                 ,p_activity_code                => 'UPDATE'
4757                 ,p_budget_version_id            => p_budget_version_id
4758                 ,p_budget_line_id               => i.budget_line_id
4759                 ,p_resource_assignment_id       => i.resource_assignment_id
4760                 ,p_start_date                   => i.start_date
4761                 ,p_end_date                     => i.end_date
4762                 ,p_period_name                  => i.period_name
4763                 ,p_txn_currency_code            => i.txn_currency_code
4764                 ,p_quantity                     => i.bl_quantity *-1
4765                 ,p_txn_raw_cost                 => i.txn_raw_cost *-1
4766                 ,p_txn_burdened_cost            => i.txn_burdened_cost *-1
4767                 ,p_txn_revenue                  => i.txn_revenue *-1
4768                 ,p_project_currency_code        => i.project_currency_code
4769                 ,p_project_raw_cost             => i.project_raw_cost *-1
4770                 ,p_project_burdened_cost        => i.project_burdened_cost *-1
4771                 ,p_project_revenue              => i.project_revenue *-1
4772                 ,p_projfunc_currency_code       => i.projfunc_currency_code
4773                 ,p_projfunc_raw_cost            => i.raw_cost *-1
4774                 ,p_projfunc_burdened_cost       => i.burdened_cost *-1
4775                 ,p_projfunc_revenue             => i.revenue *-1
4776 		,p_rep_line_mode               => 'REVERSAL'
4777                 ,x_msg_data                     => x_msg_data
4778                 ,x_return_status                => x_return_status
4779                 );
4780           End If;
4781 
4782       /* Added for MRC enhancements */
4783           IF NVL(l_populate_mrc_tab_flag,'N') = 'Y' Then --{
4784         PA_FP_CALC_PLAN_PKG.populate_MRC_plsqltabs
4785                 (p_calling_module               => 'CALCULATE_API'
4786                 ,p_budget_version_id            => p_budget_version_id
4787                 ,p_budget_line_id               => i.budget_line_id
4788                 ,p_resource_assignment_id       => i.resource_assignment_id
4789                 ,p_start_date                   => i.start_date
4790                 ,p_end_date                     => i.end_date
4791                 ,p_period_name                  => i.period_name
4792                 ,p_txn_currency_code            => i.txn_currency_code
4793                 ,p_quantity                     => i.bl_quantity
4794                 ,p_txn_raw_cost                 => i.txn_raw_cost
4795                 ,p_txn_burdened_cost            => i.txn_burdened_cost
4796                 ,p_txn_revenue                  => i.txn_revenue
4797                 ,p_project_currency_code        => i.project_currency_code
4798                 ,p_project_raw_cost             => i.project_raw_cost
4799                 ,p_project_burdened_cost        => i.project_burdened_cost
4800                 ,p_project_revenue              => i.project_revenue
4801                 ,p_projfunc_currency_code       => i.projfunc_currency_code
4802                 ,p_projfunc_raw_cost            => i.raw_cost
4803                 ,p_projfunc_burdened_cost       => i.burdened_cost
4804                 ,p_projfunc_revenue             => i.revenue
4805         ,p_delete_flag                  => 'Y'
4806                 ,x_msg_data                     => x_msg_data
4807                 ,x_return_status                => x_return_status
4808                 );
4809       End If;
4810 
4811     END LOOP;
4812 
4813     print_msg('Number of budgetLines deleted['||l_budget_line_id_tab.COUNT||']');
4814     /* Now delete the budget lines */
4815     IF l_budget_line_id_tab.COUNT > 0 THEN
4816         FORALL i IN l_budget_line_id_tab.FIRST .. l_budget_line_id_tab.LAST
4817         DELETE FROM PA_BUDGET_LINES bl
4818         WHERE bl.budget_version_id = p_budget_version_id
4819         AND bl.budget_line_id = l_budget_line_id_tab(i);
4820     END IF;
4821 
4822     --print_msg('ReturnStatus['||x_return_status||']');
4823         /* reset the error stack */
4824     If p_pa_debug_mode = 'Y' Then
4825             pa_debug.reset_err_stack;
4826     End If;
4827 
4828 EXCEPTION
4829         WHEN OTHERS THEN
4830                 x_return_status := 'U';
4831                 x_msg_data := sqlcode||sqlerrm;
4832                 print_msg('Failed in delete_budget_lines API'||x_msg_data);
4833         If p_pa_debug_mode = 'Y' Then
4834                     pa_debug.reset_err_stack;
4835         End If;
4836                  fnd_msg_pub.add_exc_msg
4837                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
4838                  ,p_procedure_name => 'delete_budget_lines');
4839                 RAISE;
4840 END delete_budget_lines ;
4841 
4842 /* This API inserts a new budget line with the given quantity for new budget line dates
4843  * If duplicate line exists then updates the existing line by adding the given quantity
4844  */
4845 PROCEDURE insert_budget_lines(
4846         p_budget_version_id             IN Number
4847         ,p_budget_version_type          IN Varchar2
4848         ,p_rollup_required_flag         IN Varchar2
4849         ,x_return_status                OUT NOCOPY Varchar2
4850         ,x_msg_data                     OUT NOCOPY Varchar2
4851         ) IS
4852 
4853     CURSOR cur_Oldbl_Lines IS
4854     SELECT /*+ INDEX(BL PA_BUDGET_LINES_U1) */ bl.budget_line_id
4855         ,bl.resource_assignment_id
4856         ,bl.txn_currency_code
4857         ,bl.start_date
4858         ,bl.end_date
4859         ,bl.period_name
4860         ,bl.budget_version_id
4861         ,bl.quantity bl_quantity
4862         ,bl.txn_standard_cost_rate
4863         ,bl.txn_cost_rate_override
4864         ,bl.txn_raw_cost
4865         ,bl.burden_cost_rate
4866         ,bl.burden_cost_rate_override
4867         ,bl.txn_burdened_cost
4868         ,bl.txn_standard_bill_rate
4869         ,bl.txn_bill_rate_override
4870         ,bl.txn_revenue
4871         ,bl.project_currency_code
4872         ,bl.project_raw_cost
4873         ,bl.project_burdened_cost
4874         ,bl.project_revenue
4875         ,bl.projfunc_currency_code
4876         ,bl.raw_cost
4877         ,bl.burdened_cost
4878         ,bl.revenue
4879         ,bl.cost_rejection_code
4880         ,bl.burden_rejection_code
4881         ,bl.revenue_rejection_code
4882         ,bl.pc_cur_conv_rejection_code
4883         ,bl.pfc_cur_conv_rejection_code
4884         ,bl.init_quantity  bl_init_quantity
4885         ,bl.txn_init_raw_cost
4886         ,bl.txn_init_burdened_cost
4887         ,bl.txn_init_revenue
4888         ,tmp.quantity  fp_quantity
4889     FROM pa_budget_lines bl
4890         ,pa_fp_rollup_tmp tmp
4891     WHERE bl.budget_version_id = p_budget_version_id
4892     AND  bl.resource_assignment_id = tmp.resource_assignment_id
4893     AND  bl.txn_currency_code = tmp.txn_currency_code
4894     AND  bl.start_date = tmp.start_date
4895     AND  NVL(tmp.quantity,0) <> 0 ;
4896 
4897     /* This cursor picks all the records from rollup tmp where budget line donot exists
4898      * and insert these records into budget lines */
4899     CURSOR cur_newtmp_lines IS
4900     SELECT PA_BUDGET_LINES_S.NEXTVAL
4901            ,tmp.resource_assignment_id
4902            ,tmp.txn_currency_code
4903            ,tmp.start_date
4904            ,tmp.end_date
4905         ,tmp.period_name
4906         ,tmp.quantity
4907         ,tmp.project_currency_code
4908         ,tmp.projfunc_currency_code
4909     FROM pa_fp_rollup_tmp tmp
4910     WHERE tmp.budget_version_id = p_budget_version_id
4911     AND NOT EXISTS
4912         (SELECT null
4913         FROM pa_budget_lines bl
4914         WHERE bl.budget_version_id = p_budget_version_id
4915         AND  bl.resource_assignment_id = tmp.resource_assignment_id
4916             AND  bl.txn_currency_code = tmp.txn_currency_code
4917             AND  bl.start_date = tmp.start_date
4918         );
4919 
4920     l_budget_line_id_tab       pa_plsql_datatypes.NumTabTyp;
4921     l_resAsgn_id_tab           pa_plsql_datatypes.NumTabTyp;
4922     l_txn_curr_code_tab        pa_plsql_datatypes.Char50TabTyp;
4923     l_start_date_tab           pa_plsql_datatypes.dateTabTyp;
4924     l_end_date_tab             pa_plsql_datatypes.dateTabTyp;
4925     l_period_name_tab      pa_plsql_datatypes.Char50TabTyp;
4926     l_quantity_tab             pa_plsql_datatypes.NumTabTyp;
4927     l_proj_curr_code_tab       pa_plsql_datatypes.Char50TabTyp;
4928     l_projfunc_curr_code_tab   pa_plsql_datatypes.Char50TabTyp;
4929     l_txn_raw_cost_tab     pa_plsql_datatypes.NumTabTyp;
4930     l_txn_burden_cost_tab      pa_plsql_datatypes.NumTabTyp;
4931     l_txn_revenue_tab      pa_plsql_datatypes.NumTabTyp;
4932 
4933     l_rwCounter        Number;
4934     l_populate_mrc_tab_flag   Varchar2(10) := 'N'; --MRC Elimination changes:NVL(PA_FP_CALC_PLAN_PKG.G_populate_mrc_tab_flag,'N');
4935 
4936 BEGIN
4937 
4938     x_return_status := 'S';
4939     /* Initialize the error stack */
4940     If p_pa_debug_mode = 'Y' Then
4941         pa_debug.init_err_stack('PA_FP_CALC_UTILS.insert_budget_lines');
4942     End If;
4943     --print_msg('Entered insert_budget_lines api');
4944         /* Initialize the plsql tabs */
4945         l_budget_line_id_tab.delete;
4946         l_resAsgn_id_tab.delete;
4947         l_txn_curr_code_tab.delete;
4948         l_start_date_tab.delete;
4949         l_end_date_tab.delete;
4950         l_period_name_tab.delete;
4951         l_quantity_tab.delete;
4952         l_proj_curr_code_tab.delete;
4953         l_projfunc_curr_code_tab.delete;
4954     l_txn_raw_cost_tab.delete;
4955     l_txn_burden_cost_tab.delete;
4956     l_txn_revenue_tab.delete;
4957     l_rwCounter := 0;
4958 
4959     FOR i IN cur_Oldbl_Lines LOOP  --{
4960 
4961        --print_msg('Inside Loop OldbdgtLineId['||i.budget_line_id||']Qty['||i.bl_quantity||']FpQty['||i.fp_quantity||']');
4962        /* populate the plsql tabs for bulk update of budget lines later */
4963        l_rwCounter := l_rwCounter + 1;
4964        l_budget_line_id_tab(l_rwCounter) := i.budget_line_id;
4965        l_resAsgn_id_tab(l_rwCounter) := i.resource_assignment_id;
4966        l_txn_curr_code_tab(l_rwCounter) := i.txn_currency_code;
4967        l_start_date_tab(l_rwCounter) := i.start_date;
4968        l_end_date_tab(l_rwCounter) := i.end_date;
4969        l_period_name_tab(l_rwCounter) := i.period_name;
4970        l_quantity_tab(l_rwCounter) :=  nvl(i.fp_quantity,0);
4971        IF p_budget_version_type in ('ALL','COST') Then
4972             l_txn_raw_cost_tab(l_rwCounter) := pa_currency.round_trans_currency_amt1((((nvl(i.bl_quantity,0)-nvl(i.bl_init_quantity,0) + nvl(i.fp_quantity,0))*
4973                                         nvl(i.txn_cost_rate_override,i.txn_standard_cost_rate)) +nvl(i.txn_init_raw_cost,0)),i.txn_currency_code);
4974                 l_txn_burden_cost_tab(l_rwCounter) := pa_currency.round_trans_currency_amt1((((nvl(i.bl_quantity,0)-nvl(i.bl_init_quantity,0) + nvl(i.fp_quantity,0))*
4975                                         nvl(i.burden_cost_rate_override,i.burden_cost_rate)) + nvl(i.txn_init_burdened_cost,0)),i.txn_currency_code);
4976        ELSE
4977         l_txn_raw_cost_tab(l_rwCounter) := NULL;
4978         l_txn_burden_cost_tab(l_rwCounter) := NULL;
4979        END IF;
4980        IF p_budget_version_type in ('ALL','REVENUE') Then
4981                 l_txn_revenue_tab(l_rwCounter) := pa_currency.round_trans_currency_amt1((((nvl(i.bl_quantity,0)-nvl(i.bl_init_quantity,0) + nvl(i.fp_quantity,0))*
4982                                         nvl(i.txn_bill_rate_override,i.txn_standard_bill_rate)) +nvl(i.txn_init_revenue,0)),i.txn_currency_code);
4983        Else
4984         l_txn_revenue_tab(l_rwCounter) := NULL;
4985        End If;
4986 
4987        IF (p_rollup_required_flag = 'Y'
4988 	/* bug fix:5031388
4989         AND i.cost_rejection_code is NULL
4990         AND i.burden_rejection_code is NULL
4991         AND i.revenue_rejection_code is NULL
4992         AND i.pc_cur_conv_rejection_code is NULL
4993         AND i.pfc_cur_conv_rejection_code is NULL */
4994 	 )  Then
4995 
4996         /* before updating the existing budget line call the reporting API to pass -ve amts */
4997         PA_FP_CALC_PLAN_PKG.Add_Toreporting_Tabls
4998                 (p_calling_module               => 'CALCULATE_API'
4999                 ,p_activity_code                => 'UPDATE'
5000                 ,p_budget_version_id            => p_budget_version_id
5001                 ,p_budget_line_id               => i.budget_line_id
5002                 ,p_resource_assignment_id       => i.resource_assignment_id
5003                 ,p_start_date                   => i.start_date
5004                 ,p_end_date                     => i.end_date
5005                 ,p_period_name                  => i.period_name
5006                 ,p_txn_currency_code            => i.txn_currency_code
5007                 ,p_quantity                     => i.bl_quantity *-1
5008                 ,p_txn_raw_cost                 => i.txn_raw_cost *-1
5009                 ,p_txn_burdened_cost            => i.txn_burdened_cost *-1
5010                 ,p_txn_revenue                  => i.txn_revenue *-1
5011                 ,p_project_currency_code        => i.project_currency_code
5012                 ,p_project_raw_cost             => i.project_raw_cost *-1
5013                 ,p_project_burdened_cost        => i.project_burdened_cost *-1
5014                 ,p_project_revenue              => i.project_revenue *-1
5015                 ,p_projfunc_currency_code       => i.projfunc_currency_code
5016                 ,p_projfunc_raw_cost            => i.raw_cost *-1
5017                 ,p_projfunc_burdened_cost       => i.burdened_cost *-1
5018                 ,p_projfunc_revenue             => i.revenue *-1
5019 		,p_rep_line_mode               => 'REVERSAL'
5020                 ,x_msg_data                     => x_msg_data
5021                 ,x_return_status                => x_return_status
5022                 );
5023       End If;
5024 
5025     END LOOP;  --}
5026 
5027     /* Now bulk update the budget lines */
5028     IF l_budget_line_id_tab.COUNT > 0 THEN
5029         --print_msg('Number of budget Lines updated['||l_budget_line_id_tab.COUNT||']');
5030         FORALL i IN l_budget_line_id_tab.FIRST .. l_budget_line_id_tab.LAST
5031             /* now update the budget lines with new quantity */
5032             UPDATE PA_BUDGET_LINES bl
5033             SET bl.quantity = NVL(bl.quantity,0) + NVL(l_quantity_tab(i),0)
5034                 ,bl.txn_raw_cost =  decode(p_budget_version_type,'REVENUE',bl.txn_raw_cost,l_txn_raw_cost_tab(i))
5035                 ,bl.txn_burdened_cost = decode(p_budget_version_type,'REVENUE',bl.txn_burdened_cost,l_txn_burden_cost_tab(i))
5036                 ,bl.txn_revenue = decode(p_budget_version_type,'COST',bl.txn_revenue,l_txn_revenue_tab(i))
5037             WHERE bl.budget_line_id = l_budget_line_id_tab(i)
5038             AND   bl.budget_version_id = p_budget_version_id ;
5039 
5040         FORALL i IN l_budget_line_id_tab.FIRST .. l_budget_line_id_tab.LAST
5041             UPDATE PA_BUDGET_LINES bl
5042                 SET bl.project_raw_cost = decode(p_budget_version_type,'REVENUE',bl.project_raw_cost
5043                     ,decode(bl.project_currency_code,bl.txn_currency_code,bl.txn_raw_cost
5044                     ,pa_currency.round_trans_currency_amt1((bl.txn_raw_cost * bl.project_cost_exchange_rate ),bl.project_currency_code)))
5045                 ,bl.project_burdened_cost = decode(p_budget_version_type,'REVENUE',bl.project_burdened_cost
5046                     ,decode(bl.project_currency_code,bl.txn_currency_code,bl.txn_burdened_cost
5047                     ,pa_currency.round_trans_currency_amt1((bl.txn_burdened_cost * bl.project_cost_exchange_rate ),bl.project_currency_code)))
5048                 ,bl.project_revenue = decode(p_budget_version_type,'COST',bl.project_revenue
5049                     ,decode(bl.project_currency_code,bl.txn_currency_code,bl.project_revenue
5050                     ,pa_currency.round_trans_currency_amt1((bl.project_revenue*bl.project_rev_exchange_rate ),bl.project_currency_code)))
5051                 ,bl.raw_cost = decode(p_budget_version_type,'REVENUE',bl.raw_cost
5052                     ,decode(bl.projfunc_currency_code,bl.txn_currency_code,bl.txn_raw_cost
5053                                         ,pa_currency.round_trans_currency_amt1((bl.txn_raw_cost * bl.projfunc_cost_exchange_rate ),bl.projfunc_currency_code)))
5054                     ,bl.burdened_cost = decode(p_budget_version_type,'REVENUE',bl.burdened_cost
5055                     ,decode(bl.projfunc_currency_code,bl.txn_currency_code,bl.txn_burdened_cost
5056                                         ,pa_currency.round_trans_currency_amt1((bl.txn_burdened_cost * bl.projfunc_cost_exchange_rate ),bl.projfunc_currency_code)))
5057                     ,bl.revenue = decode(p_budget_version_type,'COST',bl.revenue
5058                     ,decode(bl.projfunc_currency_code,bl.txn_currency_code,bl.project_revenue
5059                                         ,pa_currency.round_trans_currency_amt1((bl.project_revenue*bl.projfunc_rev_exchange_rate ),bl.projfunc_currency_code)))
5060                 WHERE bl.budget_line_id = l_budget_line_id_tab(i)
5061                 AND   bl.budget_version_id = p_budget_version_id ;
5062 
5063     END IF;
5064 
5065     /* after updating the budget lines pass +ve values to pji reporting apis */
5066     IF p_rollup_required_flag = 'Y' OR NVL(l_populate_mrc_tab_flag,'N') = 'Y'  Then
5067        FOR i IN cur_Oldbl_Lines LOOP
5068               IF (p_rollup_required_flag = 'Y'
5069 		/* bug fix:5031388
5070         	AND i.cost_rejection_code is NULL
5071                 AND i.burden_rejection_code is NULL
5072                 AND i.revenue_rejection_code is NULL
5073                 AND i.pc_cur_conv_rejection_code is NULL
5074                 AND i.pfc_cur_conv_rejection_code is NULL */
5075 		)  Then
5076 
5077                 /* before updating the existing budget line call the reporting API to pass -ve amts */
5078                 PA_FP_CALC_PLAN_PKG.Add_Toreporting_Tabls
5079                 (p_calling_module               => 'CALCULATE_API'
5080                 ,p_activity_code                => 'UPDATE'
5081                 ,p_budget_version_id            => p_budget_version_id
5082                 ,p_budget_line_id               => i.budget_line_id
5083                 ,p_resource_assignment_id       => i.resource_assignment_id
5084                 ,p_start_date                   => i.start_date
5085                 ,p_end_date                     => i.end_date
5086                 ,p_period_name                  => i.period_name
5087                 ,p_txn_currency_code            => i.txn_currency_code
5088                 ,p_quantity                     => i.bl_quantity
5089                 ,p_txn_raw_cost                 => i.txn_raw_cost
5090                 ,p_txn_burdened_cost            => i.txn_burdened_cost
5091                 ,p_txn_revenue                  => i.txn_revenue
5092                 ,p_project_currency_code        => i.project_currency_code
5093                 ,p_project_raw_cost             => i.project_raw_cost
5094                 ,p_project_burdened_cost        => i.project_burdened_cost
5095                 ,p_project_revenue              => i.project_revenue
5096                 ,p_projfunc_currency_code       => i.projfunc_currency_code
5097                 ,p_projfunc_raw_cost            => i.raw_cost
5098                 ,p_projfunc_burdened_cost       => i.burdened_cost
5099                 ,p_projfunc_revenue             => i.revenue
5100 		,p_rep_line_mode               => 'POSITIVE_ENTRY'
5101                 ,x_msg_data                     => x_msg_data
5102                 ,x_return_status                => x_return_status
5103                 );
5104           END IF;
5105 
5106       /* Added for MRC enhancements */
5107           IF NVL(l_populate_mrc_tab_flag,'N') = 'Y' Then --{
5108                 PA_FP_CALC_PLAN_PKG.populate_MRC_plsqltabs
5109         	(p_calling_module               => 'CALCULATE_API'
5110                 ,p_budget_version_id            => p_budget_version_id
5111                 ,p_budget_line_id               => i.budget_line_id
5112                 ,p_resource_assignment_id       => i.resource_assignment_id
5113                 ,p_start_date                   => i.start_date
5114                 ,p_end_date                     => i.end_date
5115                 ,p_period_name                  => i.period_name
5116                 ,p_txn_currency_code            => i.txn_currency_code
5117                 ,p_quantity                     => i.bl_quantity
5118                 ,p_txn_raw_cost                 => i.txn_raw_cost
5119                 ,p_txn_burdened_cost            => i.txn_burdened_cost
5120                 ,p_txn_revenue                  => i.txn_revenue
5121                 ,p_project_currency_code        => i.project_currency_code
5122                 ,p_project_raw_cost             => i.project_raw_cost
5123                 ,p_project_burdened_cost        => i.project_burdened_cost
5124                 ,p_project_revenue              => i.project_revenue
5125                 ,p_projfunc_currency_code       => i.projfunc_currency_code
5126                 ,p_projfunc_raw_cost            => i.raw_cost
5127                 ,p_projfunc_burdened_cost       => i.burdened_cost
5128                 ,p_projfunc_revenue             => i.revenue
5129         	,p_delete_flag                  => 'N'
5130                 ,x_msg_data                     => x_msg_data
5131                 ,x_return_status                => x_return_status
5132                 );
5133       End If;
5134        END LOOP;
5135     END IF;
5136 
5137     IF    1 = 1 then --{ no budget line exists so insert a new line
5138         /* Initialize the plsql tabs */
5139         l_budget_line_id_tab.delete;
5140                 l_resAsgn_id_tab.delete;
5141                 l_txn_curr_code_tab.delete;
5142                 l_start_date_tab.delete;
5143                 l_end_date_tab.delete;
5144                 l_period_name_tab.delete;
5145                 l_quantity_tab.delete;
5146                 l_proj_curr_code_tab.delete;
5147                 l_projfunc_curr_code_tab.delete;
5148 
5149         OPEN cur_newtmp_lines;
5150         FETCH cur_newtmp_lines BULK COLLECT INTO
5151             l_budget_line_id_tab
5152                 ,l_resAsgn_id_tab
5153                 ,l_txn_curr_code_tab
5154                 ,l_start_date_tab
5155                 ,l_end_date_tab
5156                 ,l_period_name_tab
5157                 ,l_quantity_tab
5158                 ,l_proj_curr_code_tab
5159                 ,l_projfunc_curr_code_tab;
5160         CLOSE cur_newtmp_lines;
5161 
5162         IF l_budget_line_id_tab.COUNT > 0 THEN  --{
5163             --print_msg('Number of New budget lines inserted ['||l_budget_line_id_tab.COUNT||']');
5164             FORALL i in l_budget_line_id_tab.FIRST .. l_budget_line_id_tab.LAST
5165                 INSERT INTO PA_BUDGET_LINES(
5166                 BUDGET_VERSION_ID
5167                         ,BUDGET_LINE_ID
5168                         ,RESOURCE_ASSIGNMENT_ID
5169                 ,TXN_CURRENCY_CODE
5170                 ,PROJECT_CURRENCY_CODE
5171                     ,PROJFUNC_CURRENCY_CODE
5172                 ,PERIOD_NAME
5173                     ,START_DATE
5174                 ,END_DATE
5175                 ,QUANTITY
5176                     ,LAST_UPDATE_DATE
5177                     ,LAST_UPDATED_BY
5178                     ,CREATION_DATE
5179                     ,CREATED_BY
5180                     ,LAST_UPDATE_LOGIN
5181                 ,QUANTITY_SOURCE
5182                 ,RAW_COST_SOURCE
5183                 ,BURDENED_COST_SOURCE
5184                 ,REVENUE_SOURCE
5185                     )
5186                 SELECT
5187                     p_BUDGET_VERSION_ID
5188                     ,l_budget_line_id_tab(i)
5189                     ,l_resAsgn_id_tab(i)
5190                     ,l_txn_curr_code_tab(i)
5191                     ,l_proj_curr_code_tab(i)
5192                     ,l_projfunc_curr_code_tab(i)
5193                     ,l_period_name_tab(i)
5194                     ,l_start_date_tab(i)
5195                     ,l_end_date_tab(i)
5196                 ,l_quantity_tab(i)
5197                     ,g_LAST_UPDATE_DATE
5198                     ,g_LAST_UPDATED_BY
5199                     ,g_CREATION_DATE
5200                     ,g_CREATED_BY
5201                     ,g_LAST_UPDATE_LOGIN
5202                 ,'SP'
5203                 ,'SP'
5204                 ,'SP'
5205                 ,'SP'
5206             FROM dual
5207             WHERE NVL(l_quantity_tab(i),0) <> 0;
5208 
5209             If p_rollup_required_flag = 'Y' Then
5210             FOR i IN l_budget_line_id_tab.FIRST .. l_budget_line_id_tab.LAST LOOP
5211                  IF NVL(l_quantity_tab(i),0) <> 0 Then
5212                         /* before updating the existing budget line call the reporting API to pass -ve amts */
5213                         PA_FP_CALC_PLAN_PKG.Add_Toreporting_Tabls
5214                         (p_calling_module               => 'CALCULATE_API'
5215                         ,p_activity_code                => 'UPDATE'
5216                         ,p_budget_version_id            => p_budget_version_id
5217                         ,p_budget_line_id               => l_budget_line_id_tab(i)
5218                         ,p_resource_assignment_id       => l_resAsgn_id_tab(i)
5219                         ,p_start_date                   => l_start_date_tab(i)
5220                         ,p_end_date                     => l_end_date_tab(i)
5221                         ,p_period_name                  => l_period_name_tab(i)
5222                         ,p_txn_currency_code            => l_txn_curr_code_tab(i)
5223                         ,p_quantity                     => l_quantity_tab(i)
5224                         ,p_txn_raw_cost                 => null
5225                         ,p_txn_burdened_cost            => null
5226                         ,p_txn_revenue                  => null
5227                         ,p_project_currency_code        => l_proj_curr_code_tab(i)
5228                         ,p_project_raw_cost             => null
5229                         ,p_project_burdened_cost        => null
5230                         ,p_project_revenue              => null
5231                         ,p_projfunc_currency_code       => l_projfunc_curr_code_tab(i)
5232                         ,p_projfunc_raw_cost            => null
5233                         ,p_projfunc_burdened_cost       => null
5234                         ,p_projfunc_revenue             => null
5235 			,p_rep_line_mode               => 'POSITIVE_ENTRY'
5236                         ,x_msg_data                     => x_msg_data
5237                         ,x_return_status                => x_return_status
5238                         );
5239                 END IF;
5240             END LOOP;
5241                 End If;
5242         End If; --}
5243     End If; --}
5244 
5245         /* reset the error stack */
5246     If p_pa_debug_mode = 'Y' Then
5247     	print_msg('RetSts of Insert_budget_lines api['||x_return_status||']');
5248             pa_debug.reset_err_stack;
5249     End If;
5250 
5251 EXCEPTION
5252         WHEN OTHERS THEN
5253                 x_return_status := 'U';
5254                 x_msg_data := sqlcode||sqlerrm;
5255                 print_msg('Failed in insert_budget_lines API'||x_msg_data);
5256         If p_pa_debug_mode = 'Y' Then
5257                     pa_debug.reset_err_stack;
5258         End If;
5259                  fnd_msg_pub.add_exc_msg
5260                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
5261                  ,p_procedure_name => 'insert_budget_lines');
5262                 RAISE;
5263 END insert_budget_lines;
5264 
5265 /* This API populates the plsql tables required for bulk update of process_ResAttribs */
5266 PROCEDURE Populate_ResAttribTabs
5267         (p_resource_assignment_id  IN  Number
5268         ,p_txn_currency_code       IN  Varchar2) IS
5269 
5270 BEGIN
5271     g_RsAtrb_RaId_tab(NVL(g_RsAtrb_RaId_tab.LAST,0)+1) := p_resource_assignment_id;
5272     g_RsAtrb_TxnCur_tab(NVL(g_RsAtrb_TxnCur_tab.LAST,0)+1) := p_txn_currency_code;
5273 
5274 END Populate_ResAttribTabs;
5275 
5276 /* LOGIC: When resource is planned in multiple currencies, changing the resource attributes such as
5277  * spread curve,sp fixed date, mfc cost type, re spread from periodic page spreads the quantity from
5278  * MIN budget line start date to MAX budget line end date
5279  * To ensure this, a reference dates SYSTEM_REFERENCE_DAT1 is populated with MIN blstart date
5280  * and SYSTEM_REFERENCE_DAT2 is populated with MAX blend date
5281  * These dates will be passed to spread api.
5282  */
5283 PROCEDURE process_ResAttribs(
5284                 p_budget_version_id              IN  Number
5285                 ,p_resource_assignment_id_tab    IN  pa_plsql_datatypes.NumTabTyp
5286                 ,p_txn_currency_code_tab         IN  pa_plsql_datatypes.Char50TabTyp
5287                 ,x_return_status                 OUT NOCOPY Varchar2
5288                 ,x_msg_data                      OUT NOCOPY Varchar2 ) IS
5289 
5290 BEGIN
5291     x_return_status := 'S';
5292     x_msg_data      := NULL;
5293     IF p_resource_assignment_id_tab.COUNT > 0 THEN
5294         FORALL i IN p_resource_assignment_id_tab.FIRST .. p_resource_assignment_id_tab.LAST
5295         UPDATE /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP_N1) */ pa_fp_spread_calc_tmp tmp
5296         SET (tmp.SYSTEM_REFERENCE_DAT1
5297             ,tmp.SYSTEM_REFERENCE_DAT2) = (select MIN(bl.start_date),MAX(bl.end_date)
5298                                from pa_budget_lines bl
5299                            where bl.resource_assignment_id = tmp.resource_assignment_id
5300                            and   bl.txn_currency_code = tmp.txn_currency_code)
5301         WHERE tmp.resource_assignment_id = p_resource_assignment_id_tab(i)
5302         AND  tmp.txn_currency_code = p_txn_currency_code_tab(i)
5303         AND  NVL(tmp.system_reference_var1,'N') = 'Y'
5304         AND  tmp.budget_version_id = p_budget_version_id ;
5305             --print_msg('Number of tmp lines updated with MIN and MAX bldates for ResourcePlanned In Multicurr['||sql%rowcount||']');
5306 
5307         /* If planning start date is prior to MIN start date, then qty should be spread from planning start date similarly
5308         * if planning end date is prior to MAX date then qty should be spread to planned end date
5309                 * based on this logic Now update the DAT1 and DAT2 from planning dates
5310         */
5311         FORALL i IN p_resource_assignment_id_tab.FIRST .. p_resource_assignment_id_tab.LAST
5312         UPDATE /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP_N1) */ pa_fp_spread_calc_tmp tmp
5313                 SET (tmp.SYSTEM_REFERENCE_DAT1
5314                     ,tmp.SYSTEM_REFERENCE_DAT2) = (select decode(tmp.SYSTEM_REFERENCE_DAT1,NULL,NULL
5315                                ,decode(sign(trunc(tmp.SYSTEM_REFERENCE_DAT1)-trunc(ra.planning_start_date)),-1
5316                                       ,ra.planning_start_date,tmp.SYSTEM_REFERENCE_DAT1))
5317                             ,decode(tmp.SYSTEM_REFERENCE_DAT2,NULL,NULL
5318                                                            ,decode(sign(trunc(tmp.SYSTEM_REFERENCE_DAT2)-trunc(ra.planning_end_date)),1
5319                                                                       ,ra.planning_end_date,tmp.SYSTEM_REFERENCE_DAT2))
5320                                                    from pa_resource_assignments ra
5321                                                    where ra.resource_assignment_id = tmp.resource_assignment_id
5322                            and ra.budget_version_id = tmp.budget_version_id)
5323                 WHERE tmp.resource_assignment_id = p_resource_assignment_id_tab(i)
5324                 AND  NVL(tmp.system_reference_var1,'N') = 'Y'
5325         AND  tmp.budget_version_id = p_budget_version_id ;
5326             --print_msg('Number of tmp lines updated with DAT1 and DAT2  for ResourcePlanned In Multicurr['||sql%rowcount||']');
5327     END IF;
5328 
5329 EXCEPTION
5330     WHEN OTHERS THEN
5331         x_return_status := 'U';
5332                 x_msg_data := sqlcode||sqlerrm;
5333                 print_msg('Failed in insert_budget_lines API'||x_msg_data);
5334         If p_pa_debug_mode = 'Y' Then
5335                     pa_debug.reset_err_stack;
5336         End If;
5337                  fnd_msg_pub.add_exc_msg
5338                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
5339                  ,p_procedure_name => 'process_ResAttribs');
5340                 RAISE;
5341 
5342 END process_ResAttribs;
5343 
5344 PROCEDURE populate_planDates_Tabs
5345         (p_resource_assignment_id        IN  Number
5346                 ,p_txn_currency_code             IN  Varchar2
5347                 ,p_project_currency_code         IN  Varchar2
5348                 ,p_projfunc_currency_code        IN  Varchar2
5349                 ,p_start_dates_shrunk_flag       IN  Varchar2
5350                 ,p_end_dates_shrunk_flag         IN  Varchar2
5351                 ,p_plan_start_date_old           IN  Date
5352                 ,p_plan_start_date_new           IN  Date
5353                 ,p_plan_end_date_old             IN  Date
5354                 ,p_plan_end_date_new             IN  Date ) IS
5355 
5356 BEGIN
5357     g_Rspd_RaId_tab(NVL(g_Rspd_RaId_tab.LAST,0)+1) := p_resource_assignment_id;
5358         g_Rspd_TxnCur_tab(NVL(g_Rspd_TxnCur_tab.LAST,0)+1) := p_txn_currency_code;
5359     g_Rspd_Pjcur_tab(NVL(g_Rspd_Pjcur_tab.LAST,0)+1) := p_project_currency_code;
5360     g_Rspd_pjf_cur_tab(NVL(g_Rspd_pjf_cur_tab.LAST,0)+1) := p_projfunc_currency_code;
5361     g_Rspd_SdShrk_Flg_tab(NVL(g_Rspd_SdShrk_Flg_tab.LAST,0)+1) := p_start_dates_shrunk_flag;
5362     g_Rspd_EdShrk_Flg_tab(NVL(g_Rspd_EdShrk_Flg_tab.LAST,0)+1) := p_end_dates_shrunk_flag;
5363     g_Rspd_SD_old_tab(NVL(g_Rspd_SD_old_tab.LAST,0)+1) := p_plan_start_date_old;
5364     g_Rspd_SD_new_tab(NVL(g_Rspd_SD_new_tab.LAST,0)+1) := p_plan_start_date_new;
5365     g_Rspd_ED_old_tab(NVL(g_Rspd_ED_old_tab.LAST,0)+1) := p_plan_end_date_old;
5366     g_Rspd_ED_new_tab(NVL(g_Rspd_ED_new_tab.LAST,0)+1) := p_plan_end_date_new;
5367 
5368 END populate_planDates_Tabs;
5369 
5370 /* LOGIC: When both planning start date and end dates are extended then do nothing
5371  * If Planning Start date is shrunk then sum (quantity) of all bdgt lines prior to plan start date
5372  * and then delete all the budgetlines prior to new start date and update a budget line existsing on the new plan start
5373  * date. If no budget line exists then insert a new budget line with the sum (quantity)
5374  *
5375  * IF Planning end date is shrunk, then sum (quantity) all budget line later than new end date
5376  * and then delete all the budget lines later than new plan end date.
5377  * update existing budget line on new plan end with the above sum(quantity), If no budget line exists then
5378  * insert a new budget line
5379  */
5380 PROCEDURE process_planDates_change(
5381         p_budget_version_id              IN  Number
5382         ,x_return_status                 OUT NOCOPY Varchar2
5383         ,x_msg_data                      OUT NOCOPY Varchar2 ) IS
5384 
5385     l_period_type   Varchar2(100);
5386 
5387 BEGIN
5388     x_return_status := 'S';
5389     If p_pa_debug_mode = 'Y' Then
5390         pa_debug.init_err_stack('PA_FP_CALC_UTILS.process_planDates_change');
5391         --print_msg('Entered process_planDates_change api NumLinetoProcess['||g_Rspd_RaId_tab.COUNT||']');
5392     End If;
5393     IF perdRec.time_phased_code = 'P' Then
5394         l_period_type := perdRec.pa_period_type;
5395     Else
5396         l_period_type := perdRec.accounted_period_type;
5397     End If;
5398 
5399     /* reset the rollup tmp table */
5400     -- bug fix:5203868
5401     DELETE FROM pa_fp_rollup_tmp
5402     WHERE budget_version_id = p_budget_version_id;
5403 
5404     IF g_Rspd_RaId_tab.COUNT > 0 Then
5405         /* populate records for start date change */
5406         FORALL i IN g_Rspd_RaId_tab.FIRST .. g_Rspd_RaId_tab.LAST
5407            INSERT INTO pa_fp_rollup_tmp tmp
5408             (resource_assignment_id
5409             ,txn_currency_code
5410             ,start_date
5411             ,end_date
5412             ,period_name
5413             ,project_currency_code
5414             ,projfunc_currency_code
5415             ,quantity
5416             ,plan_Start_Date_shrunk_flag
5417             )
5418            SELECT g_Rspd_RaId_tab(i)
5419             , g_Rspd_TxnCur_tab(i)
5420             , glp1.start_date
5421             , glp1.end_date
5422             , glp1.period_name
5423             , g_Rspd_Pjcur_tab(i)
5424             , g_Rspd_Pjf_cur_tab(i)
5425             , null
5426             ,NVL(g_Rspd_SdShrk_Flg_tab(i),'N')
5427            FROM  gl_periods glp1
5428                WHERE glp1.adjustment_period_flag = 'N'
5429                AND   glp1.period_set_name = perdRec.period_set_name
5430                AND   glp1.period_type = l_period_type
5431                AND   trunc(g_Rspd_SD_new_tab(i)) BETWEEN glp1.start_date and glp1.end_date
5432            AND   NVL(g_Rspd_SdShrk_Flg_tab(i),'N') = 'Y';
5433         --print_msg('Number lines inserted into fp_rollupTmp for StartDateShrunk['||sql%rowcount||']');
5434 
5435         /* Now update the rollup tmp table with the sum of bl line quantities prior to new plan start date*/
5436         UPDATE pa_fp_rollup_tmp tmp
5437         SET tmp.processed_flag = 'Y'
5438            ,tmp.quantity = (SELECT SUM(nvl(bl.quantity,0)-nvl(bl.init_quantity,0))
5439                         FROM  pa_budget_lines bl
5440                         WHERE bl.budget_version_id = p_budget_version_id
5441                         AND   bl.resource_assignment_id = tmp.resource_assignment_id
5442                         AND   bl.txn_currency_code = tmp.txn_currency_code
5443                             AND   bl.end_date < ( tmp.start_date) )
5444         WHERE NVL(tmp.processed_flag,'N') = 'N'
5445         AND  NVL(plan_Start_Date_shrunk_flag,'N') = 'Y';
5446 
5447         /* Delete all the budget lines which falls beyond the plan start date */
5448         delete_budget_lines(
5449                 p_budget_version_id             => p_budget_version_id
5450                 ,p_budget_version_type          => g_budget_version_type
5451                 ,p_rollup_required_flag         => g_rollup_required_flag
5452                 ,p_process_mode                 => 'PLAN_START_DATE'
5453                 ,x_return_status                => x_return_status
5454                 ,x_msg_data                     => x_msg_data
5455                 );
5456 
5457         /* populate records for end date change */
5458                 FORALL i IN g_Rspd_RaId_tab.FIRST .. g_Rspd_RaId_tab.LAST
5459                    INSERT INTO pa_fp_rollup_tmp tmp
5460                         (resource_assignment_id
5461                         ,txn_currency_code
5462                         ,start_date
5463                         ,end_date
5464                         ,period_name
5465                         ,project_currency_code
5466                         ,projfunc_currency_code
5467                         ,quantity
5468             ,plan_End_Date_shrunk_flag
5469                         )
5470                    SELECT g_Rspd_RaId_tab(i)
5471                         , g_Rspd_TxnCur_tab(i)
5472                         , glp1.start_date
5473                         , glp1.end_date
5474                         , glp1.period_name
5475                         , g_Rspd_Pjcur_tab(i)
5476                         , g_Rspd_Pjf_cur_tab(i)
5477                         , null
5478             , NVL(g_Rspd_EdShrk_Flg_tab(i),'N')
5479                    FROM  gl_periods glp1
5480                    WHERE glp1.adjustment_period_flag = 'N'
5481                    AND   glp1.period_set_name = perdRec.period_set_name
5482                    AND   glp1.period_type = l_period_type
5483                    AND   trunc(g_Rspd_ED_new_tab(i)) BETWEEN glp1.start_date and glp1.end_date
5484                    AND   NVL(g_Rspd_EdShrk_Flg_tab(i),'N') = 'Y';
5485 
5486         --print_msg('Number lines inserted into fp_rollupTmp for EndDateShrunk['||sql%rowcount||']');
5487                 /* Now update the rollup tmp table with the sum of bl line quantities later than new plan end date */
5488                 UPDATE pa_fp_rollup_tmp tmp
5489                 SET tmp.processed_flag = 'Y'
5490                    ,tmp.quantity = (SELECT SUM(nvl(bl.quantity,0)-nvl(bl.init_quantity,0))
5491                                     FROM  pa_budget_lines bl
5492                                     WHERE bl.budget_version_id = p_budget_version_id
5493                                     AND   bl.resource_assignment_id = tmp.resource_assignment_id
5494                                     AND   bl.txn_currency_code = tmp.txn_currency_code
5495                                     AND   bl.start_date > ( tmp.end_date) )
5496         WHERE NVL(tmp.processed_flag,'N') = 'N'
5497         AND NVL(plan_End_Date_shrunk_flag,'N') = 'Y' ;
5498 
5499         /* Delete all the budget lines which falls beyond the plan end date */
5500                 delete_budget_lines(
5501                 p_budget_version_id             => p_budget_version_id
5502                 ,p_budget_version_type          => g_budget_version_type
5503                 ,p_rollup_required_flag         => g_rollup_required_flag
5504                 ,p_process_mode                 => 'PLAN_END_DATE'
5505                 ,x_return_status                => x_return_status
5506                 ,x_msg_data                     => x_msg_data
5507                 );
5508 
5509         --print_msg('Calling insert_budget_lines api');
5510         /* Finally update the existing budget line or insert the new budget lines */
5511         insert_budget_lines(
5512                 p_budget_version_id             => p_budget_version_id
5513                 ,p_budget_version_type          => g_budget_version_type
5514                 ,p_rollup_required_flag         => g_rollup_required_flag
5515                 ,x_return_status                => x_return_status
5516                 ,x_msg_data                     => x_msg_data
5517                 );
5518 
5519     END IF;
5520 
5521     --print_msg('ReturnStatus of process_planDates_change ['||x_return_status||']');
5522         /* reset the error stack */
5523     If p_pa_debug_mode = 'Y' Then
5524             pa_debug.reset_err_stack;
5525     End If;
5526 
5527 EXCEPTION
5528         WHEN OTHERS THEN
5529                 x_return_status := 'U';
5530                 x_msg_data := sqlcode||sqlerrm;
5531                 print_msg('Failed in process_planDates_change API'||x_msg_data);
5532         If p_pa_debug_mode = 'Y' Then
5533                     pa_debug.reset_err_stack;
5534         End If;
5535                  fnd_msg_pub.add_exc_msg
5536                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
5537                  ,p_procedure_name => 'process_planDates_change');
5538                 RAISE;
5539 END process_planDates_change;
5540 
5541 PROCEDURE populate_blTxnCurCombo
5542         (p_budget_version_id  IN NUMBER
5543         ,x_return_status    OUT NOCOPY VARCHAR2
5544         ) IS
5545 
5546     l_msg_data      Varchar2(1000);
5547     l_raId_Tab  pa_plsql_datatypes.NumTabTyp;
5548     l_TxnCur_Tab    pa_plsql_datatypes.Char50TabTyp;
5549     l_TmpTxnCur_Tab pa_plsql_datatypes.Char50TabTyp;
5550     l_Qty_Tab   pa_plsql_datatypes.NumTabTyp;
5551 BEGIN
5552     x_return_status := 'S';
5553     /* bulk select all the RA+Txn currency combo from budget lines and later insert these records into tmp table
5554      * for processing
5555      */
5556     If p_pa_debug_mode = 'Y' Then
5557         pa_debug.init_err_stack('PA_FP_CALC_UTILS.populate_blTxnCurCombo');
5558     	print_msg('Entered populate_blTxnCurCombo api');
5559     End If;
5560         SELECT /*+ INDEX(BL PA_BUDGET_LINES_U1) */
5561 	  bl.resource_assignment_id
5562             ,bl.txn_currency_code
5563         BULK COLLECT INTO
5564             l_raId_Tab
5565             ,l_TxnCur_Tab
5566         FROM pa_budget_lines bl
5567              ,pa_fp_spread_calc_tmp tmp
5568         WHERE bl.budget_version_id = p_budget_version_id
5569         AND  bl.resource_assignment_id = tmp.resource_assignment_id
5570         AND  bl.txn_currency_code <> tmp.txn_currency_code
5571         AND  NVL(tmp.system_reference_var1,'N') = 'Y'
5572             AND  ( NVL(tmp.sp_curve_change_flag,'N') = 'Y'
5573                     OR NVL(tmp.plan_dates_change_flag,'N') = 'Y'
5574                     OR NVL(tmp.mfc_cost_change_flag,'N') = 'Y'
5575                     OR NVL(tmp.sp_fix_date_change_flag,'N') = 'Y'
5576             OR NVL(tmp.rlm_id_change_flag,'N') = 'Y'
5577                     )
5578         AND  NOT EXISTS (select null
5579                                 from pa_fp_spread_calc_tmp tmp1
5580                                 where tmp1.budget_version_id = p_budget_version_id
5581                                 and tmp1.resource_assignment_id = tmp.resource_assignment_id
5582                                 and tmp1.txn_currency_code = bl.txn_currency_code
5583                 )
5584         GROUP BY bl.resource_assignment_id
5585                         ,bl.txn_currency_code ;
5586 
5587         --print_msg('Number of ra+txn combo selected from bl['||sql%rowcount||']');
5588 
5589         IF l_raId_Tab.COUNT > 0 THEN
5590             FORALL i IN l_raId_Tab.FIRST .. l_raId_Tab.LAST
5591             INSERT INTO pa_fp_spread_calc_tmp
5592                             (BUDGET_VERSION_ID
5593                 ,BUDGET_VERSION_TYPE
5594                 ,RESOURCE_ASSIGNMENT_ID --resource_assignment_id
5595                             ,TXN_CURRENCY_CODE     --txn_currency_code
5596                 ,SYSTEM_REFERENCE_VAR2
5597                 )
5598             VALUES (p_budget_version_id
5599                 ,g_budget_version_type
5600                 ,l_raId_Tab(i)
5601                 ,l_TxnCur_Tab(i)
5602                 ,'Y'
5603                 );
5604 	    IF P_PA_DEBUG_MODE = 'Y' Then
5605               print_msg('Number of rows inserted ra+txncur into tmp['||sql%rowcount||']');
5606 	    End If;
5607 
5608             /* Now updates the other attributes for the newly inserted rows */
5609             FORALL i IN l_raId_Tab.FIRST .. l_raId_Tab.LAST
5610             UPDATE /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP_N1) */ pa_fp_spread_calc_tmp tmp
5611             SET tmp.quantity = (select sum(bl.quantity)
5612                        from pa_budget_lines bl
5613                        where bl.budget_version_id = tmp.budget_version_id
5614                            and   bl.resource_assignment_id = tmp.resource_assignment_id
5615                        and   bl.txn_currency_code = tmp.txn_currency_code)
5616                 ,tmp.system_reference_var2 = NULL
5617                 ,(tmp.OLD_SPREAD_CURVE_ID   --x_spread_curve_id_old_tab
5618                             ,NEW_SPREAD_CURVE_ID   --x_spread_curve_id_new_tab
5619                             ,OLD_SP_FIX_DATE       --x_sp_fixed_date_old_tab
5620                             ,NEW_SP_FIX_DATE       --x_sp_fixed_date_new_tab
5621                             ,OLD_PLAN_START_DATE   --x_plan_start_date_old_tab
5622                             ,NEW_PLAN_START_DATE   --x_plan_start_date_new_tab
5623                             ,OLD_PLAN_END_DATE     --x_plan_end_date_old_tab
5624                             ,NEW_PLAN_END_DATE     --x_plan_end_date_new_tab
5625                             ,RE_SPREAD_AMTS_FLAG   --x_re_spread_flag_tab
5626                             ,SP_CURVE_CHANGE_FLAG  --x_sp_curve_change_flag_tab
5627                             ,PLAN_DATES_CHANGE_FLAG --x_plan_dates_change_flag_tab
5628                             ,SP_FIX_DATE_CHANGE_FLAG --x_spfix_date_flag_tab
5629                             ,MFC_COST_CHANGE_FLAG   --x_mfc_cost_change_flag_tab
5630                             ,OLD_MFC_COST_TYPE_ID   --x_mfc_cost_type_id_old_tab
5631                             ,NEW_MFC_COST_TYPE_ID   --x_mfc_cost_type_id_new_tab
5632                             ,ETC_START_DATE
5633                             ,PROJECT_CURRENCY_CODE
5634                             ,PROJFUNC_CURRENCY_CODE
5635                 ,SYSTEM_REFERENCE_VAR1
5636                 ,PLAN_START_DATE_SHRUNK_FLAG
5637                 ,PLAN_END_DATE_SHRUNK_FLAG
5638                 ,RLM_ID_CHANGE_FLAG
5639                 ) = (SELECT /*+ INDEX(TMP1 PA_FP_SPREAD_CALC_TMP_N1) */
5640                             tmp1.OLD_SPREAD_CURVE_ID
5641                             ,tmp1.NEW_SPREAD_CURVE_ID
5642                             ,tmp1.OLD_SP_FIX_DATE
5643                             ,tmp1.NEW_SP_FIX_DATE
5644                             ,tmp1.OLD_PLAN_START_DATE
5645                             ,tmp1.NEW_PLAN_START_DATE
5646                             ,tmp1.OLD_PLAN_END_DATE
5647                             ,tmp1.NEW_PLAN_END_DATE
5648                             ,tmp1.RE_SPREAD_AMTS_FLAG
5649                             ,tmp1.SP_CURVE_CHANGE_FLAG
5650                             ,tmp1.PLAN_DATES_CHANGE_FLAG
5651                             ,tmp1.SP_FIX_DATE_CHANGE_FLAG
5652                             ,tmp1.MFC_COST_CHANGE_FLAG
5653                             ,tmp1.OLD_MFC_COST_TYPE_ID
5654                             ,tmp1.NEW_MFC_COST_TYPE_ID
5655                             ,tmp1.ETC_START_DATE
5656                             ,tmp1.PROJECT_CURRENCY_CODE
5657                             ,tmp1.PROJFUNC_CURRENCY_CODE
5658                 ,tmp1.SYSTEM_REFERENCE_VAR1
5659                 ,tmp1.PLAN_START_DATE_SHRUNK_FLAG
5660                 ,tmp1.PLAN_END_DATE_SHRUNK_FLAG
5661                 ,tmp1.RLM_ID_CHANGE_FLAG
5662                 FROM pa_fp_spread_calc_tmp tmp1
5663                 WHERE tmp1.budget_version_id = p_budget_version_id
5664                 AND   tmp1.resource_assignment_id = tmp.resource_assignment_id
5665                 AND  tmp1.txn_currency_code <> tmp.txn_currency_code
5666                 AND  NVL(tmp1.SYSTEM_REFERENCE_VAR2,'N') = 'N'
5667                 AND rownum =1 )
5668             WHERE tmp.budget_version_id = p_budget_version_id
5669             AND  tmp.resource_assignment_id = l_raId_Tab(i)
5670             AND  tmp.txn_currency_code = l_TxnCur_Tab(i)
5671             AND  tmp.SYSTEM_REFERENCE_VAR2 = 'Y';
5672             print_msg('Num of rows updated in tmp ['||sql%rowcount||']');
5673 
5674         END IF;
5675 
5676         /* Note: when planning resource is changed, then ignore all other attribute changes on the RA
5677          * change in the planning resource should be treated as a new RA
5678          */
5679         UPDATE pa_fp_spread_calc_tmp tmp
5680         SET tmp.SP_CURVE_CHANGE_FLAG  = decode(nvl(tmp.rlm_id_change_flag,'N'),'Y','N',tmp.SP_CURVE_CHANGE_FLAG)
5681             ,tmp.PLAN_DATES_CHANGE_FLAG = decode(nvl(tmp.rlm_id_change_flag,'N'),'Y','N',tmp.PLAN_DATES_CHANGE_FLAG)
5682             ,tmp.SP_FIX_DATE_CHANGE_FLAG = decode(nvl(tmp.rlm_id_change_flag,'N'),'Y','N',tmp.SP_FIX_DATE_CHANGE_FLAG)
5683             ,tmp.MFC_COST_CHANGE_FLAG = decode(nvl(tmp.rlm_id_change_flag,'N'),'Y','N',tmp.MFC_COST_CHANGE_FLAG)
5684         WHERE tmp.budget_version_id = p_budget_version_id;
5685         If p_pa_debug_mode = 'Y' Then
5686             pa_debug.reset_err_stack;
5687         End If;
5688 EXCEPTION
5689         WHEN OTHERS THEN
5690                 x_return_status := 'U';
5691                 l_msg_data := sqlcode||sqlerrm;
5692                 print_msg('Failed in populate_blTxnCurCombo API'||l_msg_data);
5693         If p_pa_debug_mode = 'Y' Then
5694                     pa_debug.reset_err_stack;
5695         End if;
5696                  fnd_msg_pub.add_exc_msg
5697                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
5698                  ,p_procedure_name => 'populate_blTxnCurCombo');
5699                 RAISE;
5700 
5701 END populate_blTxnCurCombo;
5702 
5703 PROCEDURE synch_resAttribs(p_budget_version_id Number
5704              ,p_calling_module  IN Varchar2 ) IS
5705 
5706     l_return_status   Varchar2(1);
5707     l_msg_data        Varchar2(1000);
5708 BEGIN
5709     IF P_PA_DEBUG_MODE = 'Y' Then
5710     print_msg('Enetered synch_resAttribs api');
5711 	End If;
5712     IF (p_calling_module NOT IN ('BUDGET_GENERATION','FORECAST_GENERATION')
5713        and NVL(g_apply_progress_flag,'N') <> 'Y'
5714         and g_source_context = 'RESOURCE_ASSIGNMENT' ) Then  --{
5715                 /* If multiple RA + Txn cur combo is passed, then updates the res attributes whereever it is null */
5716             UPDATE pa_fp_spread_calc_tmp tmp
5717                 SET tmp.RLM_ID_CHANGE_FLAG = decode(tmp.RLM_ID_CHANGE_FLAG,NULL,(select tmp1.RLM_ID_CHANGE_FLAG
5718                                                 from pa_fp_spread_calc_tmp tmp1
5719                                                 where tmp1.resource_assignment_id = tmp.resource_assignment_id
5720                                                 and tmp1.txn_currency_code <> tmp.txn_currency_code
5721                                                 and tmp1.RLM_ID_CHANGE_FLAG is not null
5722                                                 and rownum = 1
5723                                               ),tmp.RLM_ID_CHANGE_FLAG)
5724                    ,tmp.OLD_SPREAD_CURVE_ID = decode(tmp.OLD_SPREAD_CURVE_ID,NULL,(select tmp1.OLD_SPREAD_CURVE_ID
5725                                                 from pa_fp_spread_calc_tmp tmp1
5726                                                 where tmp1.resource_assignment_id = tmp.resource_assignment_id
5727                                                 and tmp1.txn_currency_code <> tmp.txn_currency_code
5728                                                 and tmp1.OLD_SPREAD_CURVE_ID is not null
5729                                                 and rownum = 1
5730                                               ),tmp.OLD_SPREAD_CURVE_ID)
5731                    ,tmp.NEW_SPREAD_CURVE_ID = decode(tmp.NEW_SPREAD_CURVE_ID,NULL,(select tmp1.NEW_SPREAD_CURVE_ID
5732                                                 from pa_fp_spread_calc_tmp tmp1
5733                                                 where tmp1.resource_assignment_id = tmp.resource_assignment_id
5734                                                 and tmp1.txn_currency_code <> tmp.txn_currency_code
5735                                                 and tmp1.NEW_SPREAD_CURVE_ID is not null
5736                                                 and rownum = 1
5737                                               ),tmp.NEW_SPREAD_CURVE_ID)
5738                    ,tmp.OLD_SP_FIX_DATE = decode(tmp.OLD_SP_FIX_DATE,NULL,(select tmp1.OLD_SP_FIX_DATE
5739                                                 from pa_fp_spread_calc_tmp tmp1
5740                                                 where tmp1.resource_assignment_id = tmp.resource_assignment_id
5741                                                 and tmp1.txn_currency_code <> tmp.txn_currency_code
5742                                                 and tmp1.OLD_SP_FIX_DATE is not null
5743                                                 and rownum = 1
5744                                               ),tmp.OLD_SP_FIX_DATE)
5745                    ,tmp.NEW_SP_FIX_DATE = decode(tmp.NEW_SP_FIX_DATE,NULL,(select tmp1.NEW_SP_FIX_DATE
5746                                                 from pa_fp_spread_calc_tmp tmp1
5747                                                 where tmp1.resource_assignment_id = tmp.resource_assignment_id
5748                                                 and tmp1.txn_currency_code <> tmp.txn_currency_code
5749                                                 and tmp1.NEW_SP_FIX_DATE is not null
5750                                                 and rownum = 1
5751                                               ),tmp.NEW_SP_FIX_DATE)
5752                    ,tmp.OLD_MFC_COST_TYPE_ID = decode(tmp.OLD_MFC_COST_TYPE_ID,NULL,(select tmp1.OLD_MFC_COST_TYPE_ID
5753                                                 from pa_fp_spread_calc_tmp tmp1
5754                                                 where tmp1.resource_assignment_id = tmp.resource_assignment_id
5755                                                 and tmp1.txn_currency_code <> tmp.txn_currency_code
5756                                                 and tmp1.OLD_MFC_COST_TYPE_ID is not null
5757                                                 and rownum = 1
5758                                               ),tmp.OLD_MFC_COST_TYPE_ID)
5759                    ,tmp.NEW_MFC_COST_TYPE_ID = decode(tmp.NEW_MFC_COST_TYPE_ID,NULL,(select tmp1.NEW_MFC_COST_TYPE_ID
5760                                                 from pa_fp_spread_calc_tmp tmp1
5761                                                 where tmp1.resource_assignment_id = tmp.resource_assignment_id
5762                                                 and tmp1.txn_currency_code <> tmp.txn_currency_code
5763                                                 and tmp1.NEW_MFC_COST_TYPE_ID is not null
5764                                                 and rownum = 1
5765                                               ),tmp.NEW_MFC_COST_TYPE_ID)
5766                    ,tmp.OLD_PLAN_START_DATE = decode(tmp.OLD_PLAN_START_DATE,NULL,(select tmp1.OLD_PLAN_START_DATE
5767                                                 from pa_fp_spread_calc_tmp tmp1
5768                                                 where tmp1.resource_assignment_id = tmp.resource_assignment_id
5769                                                 and tmp1.txn_currency_code <> tmp.txn_currency_code
5770                                                 and tmp1.OLD_PLAN_START_DATE is not null
5771                                                 and rownum = 1
5772                                               ),tmp.OLD_PLAN_START_DATE)
5773                    ,tmp.OLD_PLAN_END_DATE = decode(tmp.OLD_PLAN_END_DATE,NULL,(select tmp1.OLD_PLAN_END_DATE
5774                                                 from pa_fp_spread_calc_tmp tmp1
5775                                                 where tmp1.resource_assignment_id = tmp.resource_assignment_id
5776                                                 and tmp1.txn_currency_code <> tmp.txn_currency_code
5777                                                 and tmp1.OLD_PLAN_END_DATE is not null
5778                                                 and rownum = 1
5779                                               ),tmp.OLD_PLAN_END_DATE)
5780            ,tmp.NEW_PLAN_START_DATE = decode(tmp.NEW_PLAN_START_DATE,NULL,(select ra.planning_start_date
5781                                                 from pa_resource_assignments ra
5782                                                 where ra.resource_assignment_id = tmp.resource_assignment_id
5783                                               ),tmp.NEW_PLAN_START_DATE)
5784            ,tmp.NEW_PLAN_END_DATE = decode(tmp.NEW_PLAN_END_DATE,NULL,(select ra.planning_end_date
5785                                                 from pa_resource_assignments ra
5786                                                 where ra.resource_assignment_id = tmp.resource_assignment_id
5787                                               ),tmp.NEW_PLAN_END_DATE)
5788             WHERE tmp.budget_version_id = p_budget_version_id;
5789             --print_msg('synch_Upd: NumOfRowUpdated['||sql%rowcount||']');
5790 
5791                    /* set the respective changed flags */
5792 		   /* Bug #5031939: remove budget_version id joins in the sub query */
5793                    UPDATE pa_fp_spread_calc_tmp tmp
5794                    SET tmp.SP_CURVE_CHANGE_FLAG = decode(NVL(tmp.OLD_SPREAD_CURVE_ID,1),NVL(tmp.NEW_SPREAD_CURVE_ID,1),'N','Y')
5795                    ,tmp.PLAN_DATES_CHANGE_FLAG =decode(tmp.OLD_PLAN_START_DATE,NULL,'N'
5796                                                             ,decode(tmp.NEW_PLAN_START_DATE,NULL,'N'
5797                                                              ,decode(tmp.OLD_PLAN_START_DATE,tmp.NEW_PLAN_START_DATE,'N','Y')))
5798                    ,tmp.SP_FIX_DATE_CHANGE_FLAG = decode(tmp.OLD_SP_FIX_DATE,NULL,'N'
5799                                                         ,decode(tmp.NEW_SP_FIX_DATE,NULL,'N'
5800                                                          ,decode(tmp.OLD_SP_FIX_DATE,tmp.NEW_SP_FIX_DATE,'N','Y')))
5801                    ,tmp.MFC_COST_CHANGE_FLAG = decode(NVL(tmp.OLD_MFC_COST_TYPE_ID,-999),NVL(tmp.NEW_MFC_COST_TYPE_ID,-999),'N','Y')
5802                    ,tmp.SYSTEM_REFERENCE_VAR1 = (SELECT 'Y'
5803                                                  FROM dual
5804                                                  WHERE EXISTS ( select null
5805                                                                 from pa_budget_lines bl
5806                                                                 where bl.budget_version_id = tmp.budget_version_id
5807                                                                 and   bl.resource_assignment_id = tmp.resource_assignment_id
5808                                                                 and   bl.txn_currency_code <> tmp.txn_currency_code
5809                                                                 GROUP BY bl.resource_assignment_id,bl.txn_currency_code
5810                                                         ))
5811                    WHERE tmp.budget_version_id = p_budget_version_id;
5812 
5813                    UPDATE pa_fp_spread_calc_tmp tmp
5814                    SET tmp.PLAN_DATES_CHANGE_FLAG = decode(tmp.PLAN_DATES_CHANGE_FLAG,'Y','Y'
5815                                                         ,decode(tmp.OLD_PLAN_END_DATE,NULL,'N'
5816                                                             ,decode(tmp.NEW_PLAN_END_DATE,NULL,'N'
5817                                                              ,decode(tmp.OLD_PLAN_END_DATE,tmp.NEW_PLAN_END_DATE,'N','Y'))))
5818                         ,tmp.system_reference_var1 = NVL(system_reference_var1,'N')
5819                    WHERE tmp.budget_version_id = p_budget_version_id;
5820                    --print_msg('Number of rows updated with resp resAtrbflag['||sql%rowcount||']');
5821 
5822                    UPDATE pa_fp_spread_calc_tmp tmp
5823                    SET tmp.PLAN_START_DATE_SHRUNK_FLAG = decode(tmp.PLAN_DATES_CHANGE_FLAG,'N','N'
5824                                              ,decode(tmp.new_plan_start_date,NULL,'N'
5825                                               ,decode(tmp.old_plan_start_date,NULL,'N'
5826                                                ,decode(sign(trunc(tmp.new_plan_start_date) - trunc(tmp.old_plan_start_date)),1 ,'Y','N'))))
5827                    ,tmp.PLAN_END_DATE_SHRUNK_FLAG = decode(tmp.PLAN_DATES_CHANGE_FLAG,'N','N'
5828                                              ,decode(tmp.new_plan_end_date,NULL,'N'
5829                                                ,decode(tmp.old_plan_end_date,NULL,'N'
5830                                                 ,decode(sign(trunc(tmp.new_plan_end_date) - trunc(tmp.old_plan_end_date)),-1 ,'Y','N'))))
5831                    WHERE tmp.budget_version_id = p_budget_version_id;
5832     END IF; --}
5833 
5834     IF P_PA_DEBUG_MODE = 'Y' Then
5835     print_msg('Out of synch_resAttribs api');
5836     End If;
5837 
5838 EXCEPTION
5839         WHEN OTHERS THEN
5840                 l_return_status := 'U';
5841                 l_msg_data := sqlcode||sqlerrm;
5842                 print_msg('Failed in synch_resAttribs API'||l_msg_data);
5843                  fnd_msg_pub.add_exc_msg
5844                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
5845                  ,p_procedure_name => 'synch_resAttribs ');
5846                 RAISE;
5847 
5848 END synch_resAttribs;
5849 
5850 PROCEDURE synch_ChangedFlags(p_budget_version_id Number
5851             ,p_calling_module   IN Varchar2) IS
5852 
5853     l_msg_data      Varchar2(1000);
5854     l_return_status Varchar2(1);
5855 
5856 BEGIN
5857 	IF P_PA_DEBUG_MODE = 'Y' Then
5858     		print_msg('Enetered synch_ChangedFlags API');
5859 	End If;
5860     IF (p_calling_module NOT IN ('BUDGET_GENERATION','FORECAST_GENERATION')
5861         and NVL(g_apply_progress_flag,'N') <> 'Y'
5862     and g_source_context = 'RESOURCE_ASSIGNMENT' ) Then  --{
5863 	   /* Bug #5031939: remove budget_version id joins in the sub query */
5864             UPDATE pa_fp_spread_calc_tmp tmp
5865                 SET tmp.SP_CURVE_CHANGE_FLAG = (select 'Y'
5866                             from dual
5867                         where exists (select null
5868                                  from pa_fp_spread_calc_tmp tmp1
5869                                  where tmp1.resource_assignment_id = tmp.resource_assignment_id
5870                                  and tmp1.sp_curve_change_flag = 'Y' ))
5871                    ,tmp.PLAN_DATES_CHANGE_FLAG = (select 'Y'
5872                                                 from dual
5873                                                 where exists (select null
5874                                                              from pa_fp_spread_calc_tmp tmp1
5875                                                              where tmp1.resource_assignment_id = tmp.resource_assignment_id
5876                                                              and tmp1.plan_dates_change_flag = 'Y' ))
5877                    ,tmp.SP_FIX_DATE_CHANGE_FLAG = (select 'Y'
5878                                                 from dual
5879                                                 where exists (select null
5880                                                              from pa_fp_spread_calc_tmp tmp1
5881                                                              where tmp1.resource_assignment_id = tmp.resource_assignment_id
5882                                                              and tmp1.sp_fix_date_change_flag = 'Y' ))
5883                    ,tmp.MFC_COST_CHANGE_FLAG = (select 'Y'
5884                                                 from dual
5885                                                 where exists (select null
5886                                                              from pa_fp_spread_calc_tmp tmp1
5887                                                              where tmp1.resource_assignment_id = tmp.resource_assignment_id
5888                                                              and tmp1.mfc_cost_change_flag = 'Y' ))
5889           ,tmp.PLAN_START_DATE_SHRUNK_FLAG = (select 'Y'
5890                             from dual
5891                             where exists (select null
5892                                 from pa_fp_spread_calc_tmp tmp1
5893                                 where tmp1.resource_assignment_id = tmp.resource_assignment_id
5894                                 and tmp1.plan_start_date_shrunk_flag = 'Y'))
5895           ,tmp.PLAN_END_DATE_SHRUNK_FLAG = (select 'Y'
5896                                                         from dual
5897                                                         where exists (select null
5898                                                                 from pa_fp_spread_calc_tmp tmp1
5899                                                                 where tmp1.resource_assignment_id = tmp.resource_assignment_id
5900                                                                 and tmp1.plan_end_date_shrunk_flag = 'Y'))
5901           ,tmp.RLM_ID_CHANGE_FLAG  = (select 'Y'
5902                                                         from dual
5903                                                         where exists (select null
5904                                                                 from pa_fp_spread_calc_tmp tmp1
5905                                                                 where tmp1.resource_assignment_id = tmp.resource_assignment_id
5906                                                                 and tmp1.rlm_id_change_flag = 'Y'))
5907           ,(tmp.task_id,tmp.resource_name) =
5908                 (select ra.task_id,rlm.alias
5909                  from pa_resource_assignments ra
5910                     ,pa_resource_list_members rlm
5911                  where ra.resource_assignment_id = tmp.resource_assignment_id
5912                  and  rlm.resource_list_member_id = ra.resource_list_member_id
5913                 )
5914           ,tmp.billable_flag = NVL((select decode(NVL(tmp.billable_flag,'D'),'D'
5915 					,decode(NVL(ra.task_id,0),0,'Y',NVL(t.billable_flag,'N')),NVL(tmp.billable_flag,'N'))
5916                       from pa_resource_assignments ra
5917                          ,pa_tasks t
5918                       where ra.resource_assignment_id = tmp.resource_assignment_id
5919                       and   t.task_id(+) = ra.task_id
5920                       ),'N')
5921 	   ,tmp.task_name = (select t.task_name
5922 			     from pa_resource_assignments ra
5923                          	,pa_tasks t
5924                       		where ra.resource_assignment_id = tmp.resource_assignment_id
5925                       		and   t.task_id = ra.task_id
5926 			     )
5927            WHERE tmp.budget_version_id = p_budget_version_id;
5928                 --print_msg('Number of rows updated with resp resAtrbflag['||sql%rowcount||']');
5929 
5930         /* Now set all the resource attributs N when planning resource is changed */
5931                 UPDATE pa_fp_spread_calc_tmp tmp
5932                 SET tmp.SP_CURVE_CHANGE_FLAG = 'N'
5933                    ,tmp.PLAN_DATES_CHANGE_FLAG = 'N'
5934                    ,tmp.SP_FIX_DATE_CHANGE_FLAG = 'N'
5935                    ,tmp.MFC_COST_CHANGE_FLAG = 'N'
5936                    ,tmp.PLAN_START_DATE_SHRUNK_FLAG = 'N'
5937                    ,tmp.PLAN_END_DATE_SHRUNK_FLAG = 'N'
5938                 WHERE tmp.budget_version_id = p_budget_version_id
5939         AND  tmp.RLM_ID_CHANGE_FLAG  = 'Y' ;
5940                 --print_msg('Number of rows updated with resp resAtrbflag['||sql%rowcount||']');
5941 
5942     ELSE
5943         /* This is done to avoid executing the cursors multiple times for passing token values */
5944         UPDATE pa_fp_spread_calc_tmp tmp
5945         SET (tmp.task_id,tmp.resource_name) =
5946                                 (select ra.task_id,rlm.alias
5947                                  from pa_resource_assignments ra
5948                                         ,pa_resource_list_members rlm
5949                                  where ra.resource_assignment_id = tmp.resource_assignment_id
5950                                  and  rlm.resource_list_member_id = ra.resource_list_member_id
5951                                 )
5952                 ,tmp.billable_flag = NVL((select decode(NVL(tmp.billable_flag,'D'),'D'
5953                                         ,decode(NVL(ra.task_id,0),0,'Y',NVL(t.billable_flag,'N')),NVL(tmp.billable_flag,'N'))
5954                       from pa_resource_assignments ra
5955                          ,pa_tasks t
5956                       where ra.resource_assignment_id = tmp.resource_assignment_id
5957                       and   t.task_id(+) = ra.task_id
5958                       ),'N')
5959 		,tmp.task_name = (select t.task_name
5960                              from pa_resource_assignments ra
5961                                 ,pa_tasks t
5962                                 where ra.resource_assignment_id = tmp.resource_assignment_id
5963                                 and   t.task_id = ra.task_id
5964                              )
5965                 WHERE tmp.budget_version_id = p_budget_version_id;
5966 
5967     END IF; --}
5968 EXCEPTION
5969         WHEN OTHERS THEN
5970                 l_return_status := 'U';
5971                 l_msg_data := sqlcode||sqlerrm;
5972                 print_msg('Failed in synch_ChangedFlags API'||l_msg_data);
5973                  fnd_msg_pub.add_exc_msg
5974                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
5975                  ,p_procedure_name => 'synch_ChangedFlags');
5976                 RAISE;
5977 
5978 END synch_ChangedFlags;
5979 
5980 /* This is the main API called from the calculate api. This api populates the tmp table from passed in
5981  * plsql params. and later used this global tmp table for further processing in bulk mode
5982  */
5983 PROCEDURE populate_spreadCalc_Tmp(
5984                 p_budget_version_id              IN  Number
5985         ,p_budget_version_type           IN  Varchar2
5986         ,p_calling_module                IN  Varchar2
5987                 ,p_source_context                IN  Varchar2
5988         ,p_time_phased_code              IN  Varchar2
5989         ,p_apply_progress_flag           IN  Varchar2 DEFAULT 'N'
5990         ,p_rollup_required_flag          IN  Varchar2 DEFAULT 'Y'
5991         ,p_refresh_rates_flag        IN  Varchar2 DEFAULT 'N'
5992             ,p_refresh_conv_rates_flag   IN  Varchar2 DEFAULT 'N'
5993             ,p_mass_adjust_flag      IN  Varchar2 DEFAULT 'N'
5994 	    ,p_time_phase_changed_flag   IN Varchar2 DEFAULT 'N' /* Bug fix:4613444 */
5995 	    	,p_wp_cost_changed_flag   IN Varchar2 DEFAULT 'N' /* Bug fix:4613444 */
5996                 ,x_resource_assignment_tab       IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
5997                 ,x_delete_budget_lines_tab       IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
5998                 ,x_spread_amts_flag_tab          IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
5999                 ,x_txn_currency_code_tab         IN  OUT NOCOPY SYSTEM.pa_varchar2_15_tbl_type
6000                 ,x_txn_currency_override_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_15_tbl_type
6001                 ,x_total_qty_tab                 IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6002                 ,x_addl_qty_tab                  IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6003                 ,x_total_raw_cost_tab            IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6004                 ,x_addl_raw_cost_tab             IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6005                 ,x_total_burdened_cost_tab       IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6006                 ,x_addl_burdened_cost_tab        IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6007                 ,x_total_revenue_tab             IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6008                 ,x_addl_revenue_tab              IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6009                 ,x_raw_cost_rate_tab             IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6010                 ,x_rw_cost_rate_override_tab     IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6011                 ,x_b_cost_rate_tab               IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6012                 ,x_b_cost_rate_override_tab      IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6013                 ,x_bill_rate_tab                 IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6014                 ,x_bill_rate_override_tab        IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6015                 ,x_line_start_date_tab           IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
6016                 ,x_line_end_date_tab             IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
6017                 ,x_apply_progress_flag_tab       IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6018                 ,x_spread_curve_id_old_tab       IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6019                 ,x_spread_curve_id_new_tab       IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6020                 ,x_sp_fixed_date_old_tab         IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
6021                 ,x_sp_fixed_date_new_tab         IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
6022                 ,x_plan_start_date_old_tab       IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
6023                 ,x_plan_start_date_new_tab       IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
6024                 ,x_plan_end_date_old_tab         IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
6025                 ,x_plan_end_date_new_tab         IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
6026                 ,x_re_spread_flag_tab            IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6027                 ,x_sp_curve_change_flag_tab      IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6028                 ,x_plan_dates_change_flag_tab    IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6029                 ,x_spfix_date_flag_tab           IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6030                 ,x_mfc_cost_change_flag_tab      IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6031                 ,x_mfc_cost_type_id_old_tab      IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6032                 ,x_mfc_cost_type_id_new_tab      IN  OUT NOCOPY SYSTEM.pa_num_tbl_type
6033         ,x_rlm_id_change_flag_tab        IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6034         ,x_plan_sdate_shrunk_flag_tab    IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6035                 ,x_plan_edate_shrunk_flag_tab    IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6036                 ,x_mfc_cost_refresh_flag_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6037         ,x_ra_in_multi_cur_flag_tab      IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6038         ,x_quantity_changed_flag_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6039                 ,x_raw_cost_changed_flag_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6040                 ,x_cost_rate_changed_flag_tab    IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6041                 ,x_burden_cost_changed_flag_tab  IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6042                 ,x_burden_rate_changed_flag_tab  IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6043                 ,x_rev_changed_flag_tab          IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6044                 ,x_bill_rate_changed_flag_tab    IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6045         	,x_multcur_plan_start_date_tab   IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
6046                 ,x_multcur_plan_end_date_tab     IN  OUT NOCOPY SYSTEM.pa_date_tbl_type
6047         	,x_fp_task_billable_flag_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6048 		,x_cost_rt_miss_num_flag_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6049                 ,x_burd_rt_miss_num_flag_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6050                 ,x_bill_rt_miss_num_flag_tab     IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6051                 ,x_Qty_miss_num_flag_tab         IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6052                 ,x_Rw_miss_num_flag_tab          IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6053                 ,x_Br_miss_num_flag_tab          IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6054                 ,x_Rv_miss_num_flag_tab          IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6055                 ,x_rev_only_entry_flag_tab       IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6056 		/* bug fix:5726773 */
6057  	        ,x_neg_Qty_Changflag_tab           IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6058  	        ,x_neg_Raw_Changflag_tab         IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6059  	        ,x_neg_Burd_Changflag_tab          IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6060  	        ,x_neg_rev_Changflag_tab           IN  OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type
6061                 ,x_return_status                 OUT NOCOPY VARCHAR2
6062         ,x_msg_data                      OUT NOCOPY varchar2
6063                 ) IS
6064 
6065     l_stage     Varchar2(1000);
6066 
6067     CURSOR cur_sprdRecs IS
6068     SELECT tmp.resource_assignment_id
6069         ,tmp.txn_currency_code
6070         ,tmp.old_spread_curve_id
6071         ,tmp.new_spread_curve_id
6072         ,tmp.old_sp_fix_date
6073         ,tmp.new_sp_fix_date
6074         ,tmp.old_plan_start_date
6075         ,tmp.new_plan_start_date
6076         ,tmp.old_plan_end_date
6077         ,tmp.new_plan_end_date
6078         ,tmp.re_spread_amts_flag
6079         ,tmp.sp_curve_change_flag
6080         ,tmp.plan_dates_change_flag
6081         ,tmp.sp_fix_date_change_flag
6082         ,tmp.mfc_cost_change_flag
6083         ,tmp.old_mfc_cost_type_id
6084         ,tmp.new_mfc_cost_type_id
6085         ,tmp.etc_start_date
6086         ,tmp.project_currency_code
6087         ,tmp.projfunc_currency_code
6088         ,NVL(tmp.system_reference_var1,'N')  MultiCurrLineFlag
6089         ,NVL(tmp.plan_start_date_shrunk_flag,'N') plan_start_date_shrunk_flag
6090         ,NVL(tmp.plan_end_date_shrunk_flag,'N') plan_end_date_shrunk_flag
6091         ,NVL(tmp.rlm_id_change_flag,'N') rlm_id_change_flag
6092     FROM pa_fp_spread_calc_tmp tmp
6093     WHERE  tmp.budget_version_id = p_budget_version_id
6094     AND    NVL(tmp.system_reference_var1,'N') = 'Y'
6095     AND    NVL(tmp.rlm_id_change_flag,'N') <> 'Y'
6096     AND   (tmp.re_spread_amts_flag  = 'Y'
6097                OR tmp.sp_curve_change_flag  = 'Y'
6098                OR tmp.plan_dates_change_flag  = 'Y'
6099                OR tmp.sp_fix_date_change_flag  = 'Y'
6100                OR tmp.mfc_cost_change_flag = 'Y'
6101         );
6102 
6103 
6104     CURSOR cur_MultipleAdjustments_chk IS
6105     SELECT 'Y'
6106     FROM DUAL
6107     WHERE EXISTS (SELECT 'MultipleLAdjustments'
6108             FROM pa_fp_spread_calc_tmp tmp
6109             WHERE tmp.budget_version_id = p_budget_version_id
6110             AND  ((decode(tmp.OLD_PLAN_START_DATE,NULL,'N'
6111                                  ,decode(tmp.NEW_PLAN_START_DATE,NULL,'N'
6112                                   ,decode(tmp.OLD_PLAN_START_DATE,tmp.NEW_PLAN_START_DATE,'N','Y'))) ='Y')
6113                 OR
6114                 (decode(tmp.OLD_PLAN_END_DATE,NULL,'N'
6115                                  ,decode(tmp.NEW_PLAN_END_DATE,NULL,'N'
6116                                   ,decode(tmp.OLD_PLAN_END_DATE,tmp.NEW_PLAN_END_DATE,'N','Y'))) = 'Y')
6117                  )
6118             GROUP BY tmp.resource_assignment_id
6119             HAVING count(*) > 1
6120              );
6121 
6122     /* This cursor picks all the required info to populate error msg stack */
6123     CURSOR cur_msgStackDetails IS
6124     SELECT tmp.resource_assignment_id
6125         ,rl.alias  resource_name
6126     ,tmp.txn_currency_code
6127         ,tmp.old_plan_start_date
6128         ,tmp.new_plan_start_date
6129         ,tmp.old_plan_end_date
6130         ,tmp.new_plan_end_date
6131         ,tmp.old_spread_curve_id
6132         ,tmp.new_spread_curve_id
6133         ,tmp.old_sp_fix_date
6134         ,tmp.new_sp_fix_date
6135         ,tmp.old_mfc_cost_type_id
6136         ,tmp.new_mfc_cost_type_id
6137     FROM pa_fp_spread_calc_tmp tmp
6138         ,pa_resource_list_members rl
6139         ,pa_resource_assignments ra
6140         WHERE tmp.budget_version_id = p_budget_version_id
6141     AND   ra.resource_assignment_id = tmp.resource_assignment_id
6142     AND   rl.resource_list_member_id = ra.resource_list_member_id
6143     /** Bug fix:  ORA-00979: not a GROUP BY expression in Package PA_FP_CALC_UTILS
6144         AND  ((decode(tmp.OLD_PLAN_START_DATE,NULL,'N'
6145                 ,decode(tmp.NEW_PLAN_START_DATE,NULL,'N'
6146                   ,decode(tmp.OLD_PLAN_START_DATE,tmp.NEW_PLAN_START_DATE,'N','Y'))) ='Y')
6147                OR
6148                (decode(tmp.OLD_PLAN_END_DATE,NULL,'N'
6149                  ,decode(tmp.NEW_PLAN_END_DATE,NULL,'N'
6150                    ,decode(tmp.OLD_PLAN_END_DATE,tmp.NEW_PLAN_END_DATE,'N','Y'))) = 'Y')
6151                )
6152         GROUP BY tmp.resource_assignment_id
6153         HAVING count(*) > 1 ;
6154         *** End of bug fix**/
6155         AND EXISTS (SELECT 'MultipleLAdjustments'
6156                     FROM pa_fp_spread_calc_tmp tmpb
6157                     WHERE tmpb.budget_version_id = tmp.budget_version_id
6158                     AND   tmpb.resource_assignment_id = tmp.resource_assignment_id
6159                     AND  ((decode(tmpb.OLD_PLAN_START_DATE,NULL,'N'
6160                            ,decode(tmpb.NEW_PLAN_START_DATE,NULL,'N'
6161                             ,decode(tmpb.OLD_PLAN_START_DATE,tmpb.NEW_PLAN_START_DATE,'N','Y'))) ='Y')
6162                           OR
6163                            (decode(tmpb.OLD_PLAN_END_DATE,NULL,'N'
6164                             ,decode(tmpb.NEW_PLAN_END_DATE,NULL,'N'
6165                              ,decode(tmpb.OLD_PLAN_END_DATE,tmpb.NEW_PLAN_END_DATE,'N','Y'))) = 'Y')
6166                           )
6167                     GROUP BY tmpb.resource_assignment_id
6168                     HAVING count(*) > 1
6169                     );
6170 
6171     /* This cursor checks that calling api has passed duplicate set of records */
6172     CURSOR cur_chk_dupRecords IS
6173         SELECT tmp.resource_assignment_id
6174                 ,tmp.txn_currency_code
6175         FROM pa_fp_spread_calc_tmp tmp
6176         WHERE tmp.budget_version_id = p_budget_version_id
6177         GROUP BY tmp.resource_assignment_id
6178                 ,tmp.txn_currency_code
6179         HAVING COUNT(*) > 1 ;
6180 
6181     l_plan_start_date_shrunk Varchar2(10) := 'N';
6182         l_plan_end_date_shrunk   Varchar2(10) := 'N';
6183     l_MultipleAdjustments_Flag  Varchar2(10) := 'N';
6184 
6185     l_return_status      Varchar2(1) := 'S';
6186 
6187     FUNCTION IsCacheReqd(p_calling_context VARCHAR2 ) RETURN VARCHAR2 IS
6188 
6189         l_return_flg  Varchar2(1) := 'N';
6190     BEGIN
6191         SELECT 'Y'
6192         INTO l_return_flg
6193         FROM DUAL
6194         WHERE EXISTS (Select null
6195                 from pa_fp_spread_calc_tmp tmp
6196                 where  ( NVL(tmp.sp_curve_change_flag,'N') = 'Y'
6197                             OR NVL(tmp.plan_dates_change_flag,'N') = 'Y'
6198                             OR NVL(tmp.sp_fix_date_change_flag,'N') = 'Y'
6199                     OR NVL(tmp.re_spread_amts_flag,'N') = 'Y'
6200                             OR ( (NVL(tmp.mfc_cost_change_flag,'N') = 'Y'
6201                           AND p_calling_context = 'RATXNCOMBO')
6202                        )
6203                     --OR NVL(tmp.rlm_id_changed_flag,'N') = 'Y'
6204                         ));
6205 
6206         RETURN l_return_flg;
6207     EXCEPTION
6208         WHEN NO_DATA_FOUND THEN
6209             l_return_flg := 'N';
6210             RETURN l_return_flg;
6211     END IsCacheReqd;
6212 
6213 BEGIN
6214         x_return_status := 'S';
6215     l_return_status := 'S';
6216         x_msg_data := NULL;
6217 
6218         /* Initialize the error stack */
6219     If p_pa_debug_mode = 'Y' Then
6220         pa_debug.init_err_stack('PA_FP_CALC_UTILS.populate_spreadCalc_Tmp');
6221     	print_msg(' Entered populate_spreadCalc_Tmp API');
6222     End If;
6223     /* populate tmp table with the data */
6224        Init_plsqlTabs;
6225        DELETE FROM pa_fp_spread_calc_tmp;
6226        DELETE FROM pa_fp_rollup_tmp
6227        WHERE budget_version_id = p_budget_version_id;
6228 
6229        bvDetailsRec := NULL;
6230        OPEN cur_bvDetails(p_budget_version_id);
6231        FETCH cur_bvDetails INTO bvDetailsRec;
6232        CLOSE cur_bvDetails;
6233        /* cache the period details info */
6234  	         perdRec := NULL;
6235  	         OPEN periodDetails(p_budget_version_id);
6236  	         FETCH periodDetails INTO perdRec;
6237  	         CLOSE periodDetails;
6238 
6239        g_rollup_required_flag :=  NVL(p_rollup_required_flag,'N');
6240        g_calling_module       := p_calling_module;
6241        g_budget_version_id    := p_budget_version_id;
6242        g_budget_version_type  := bvDetailsRec.version_type;
6243        g_budget_version_name  := bvDetailsRec.version_name;
6244        g_etc_start_date       := bvDetailsRec.etc_start_date;
6245        g_project_name         := bvDetailsRec.project_name;
6246            g_wp_version_flag      := NVL(bvDetailsRec.wp_version_flag,'N');
6247        g_refresh_rates_flag    := NVL(p_refresh_rates_flag,'N');
6248            g_refresh_conv_rates_flag  := NVL(p_refresh_conv_rates_flag,'N');
6249            g_mass_adjust_flag       := NVL(p_mass_adjust_flag,'N');
6250            g_source_context         := p_source_context;
6251            g_apply_progress_flag    := NVL(p_apply_progress_flag,'N');
6252        g_project_currency_code  := bvDetailsRec.project_currency_code;
6253        g_projfunc_currency_code  := bvDetailsRec.projfunc_currency_code;
6254        g_baseline_funding_flag  := NVL(bvDetailsRec.baseline_funding_flag,'N');
6255        g_approved_revenue_flag  := NVL(bvDetailsRec.approved_rev_plan_type_flag,'N');
6256 	g_project_id    := bvDetailsRec.project_id;
6257         g_ciId          := bvDetailsRec.ciId;
6258         g_plan_class_type :=    bvDetailsRec.plan_class_type;
6259         g_time_phase_changed_flag := NVL(p_time_phase_changed_flag,'N');  /* Bug fix:4613444 */
6260         g_wp_cost_changed_flag    := NVL(p_wp_cost_changed_flag,'N');
6261 
6262 	IF P_PA_DEBUG_MODE = 'Y' Then
6263        		print_msg('populating spread_calc_tmp table from in params');
6264 	End If;
6265 
6266 	/*Start of Perf Impr:5309529: Added this new api as part of perf enhancement */
6267 	  insert_calcTmp_records
6268 		( x_resource_assignment_tab       => x_resource_assignment_tab
6269                 ,x_delete_budget_lines_tab        => x_delete_budget_lines_tab
6270                 ,x_spread_amts_flag_tab           => x_spread_amts_flag_tab
6271                 ,x_txn_currency_code_tab          => x_txn_currency_code_tab
6272                 ,x_txn_currency_override_tab      => x_txn_currency_override_tab
6273                 ,x_total_qty_tab                  => x_total_qty_tab
6274                 ,x_addl_qty_tab                   => x_addl_qty_tab
6275                 ,x_total_raw_cost_tab             => x_total_raw_cost_tab
6276                 ,x_addl_raw_cost_tab              => x_addl_raw_cost_tab
6277                 ,x_total_burdened_cost_tab        => x_total_burdened_cost_tab
6278                 ,x_addl_burdened_cost_tab         => x_addl_burdened_cost_tab
6279                 ,x_total_revenue_tab              => x_total_revenue_tab
6280                 ,x_addl_revenue_tab               => x_addl_revenue_tab
6281                 ,x_raw_cost_rate_tab              => x_raw_cost_rate_tab
6282                 ,x_rw_cost_rate_override_tab      => x_rw_cost_rate_override_tab
6283                 ,x_b_cost_rate_tab                => x_b_cost_rate_tab
6284                 ,x_b_cost_rate_override_tab       => x_b_cost_rate_override_tab
6285                 ,x_bill_rate_tab                  => x_bill_rate_tab
6286                 ,x_bill_rate_override_tab         => x_bill_rate_override_tab
6287                 ,x_line_start_date_tab            => x_line_start_date_tab
6288                 ,x_line_end_date_tab              => x_line_end_date_tab
6289                 ,x_apply_progress_flag_tab        => x_apply_progress_flag_tab
6290                 ,x_spread_curve_id_old_tab        => x_spread_curve_id_old_tab
6291                 ,x_spread_curve_id_new_tab        => x_spread_curve_id_new_tab
6292                 ,x_sp_fixed_date_old_tab          => x_sp_fixed_date_old_tab
6293                 ,x_sp_fixed_date_new_tab          => x_sp_fixed_date_new_tab
6294                 ,x_plan_start_date_old_tab        => x_plan_start_date_old_tab
6295                 ,x_plan_start_date_new_tab        => x_plan_start_date_new_tab
6296                 ,x_plan_end_date_old_tab          => x_plan_end_date_old_tab
6297 		,x_plan_end_date_new_tab          => x_plan_end_date_new_tab
6298                 ,x_re_spread_flag_tab             => x_re_spread_flag_tab
6299                 ,x_sp_curve_change_flag_tab       => x_sp_curve_change_flag_tab
6300                 ,x_plan_dates_change_flag_tab     => x_plan_dates_change_flag_tab
6301                 ,x_spfix_date_flag_tab            => x_spfix_date_flag_tab
6302                 ,x_mfc_cost_change_flag_tab       => x_mfc_cost_change_flag_tab
6303                 ,x_mfc_cost_type_id_old_tab       => x_mfc_cost_type_id_old_tab
6304                 ,x_mfc_cost_type_id_new_tab       => x_mfc_cost_type_id_new_tab
6305         	,x_rlm_id_change_flag_tab         => x_rlm_id_change_flag_tab
6306         	,x_plan_sdate_shrunk_flag_tab     => x_plan_sdate_shrunk_flag_tab
6307                 ,x_plan_edate_shrunk_flag_tab     => x_plan_edate_shrunk_flag_tab
6308                 ,x_mfc_cost_refresh_flag_tab      => x_mfc_cost_refresh_flag_tab
6309         	,x_ra_in_multi_cur_flag_tab       => x_ra_in_multi_cur_flag_tab
6310         	,x_quantity_changed_flag_tab      => x_quantity_changed_flag_tab
6311                 ,x_raw_cost_changed_flag_tab      => x_raw_cost_changed_flag_tab
6312                 ,x_cost_rate_changed_flag_tab     => x_cost_rate_changed_flag_tab
6313                 ,x_burden_cost_changed_flag_tab   => x_burden_cost_changed_flag_tab
6314                 ,x_burden_rate_changed_flag_tab   => x_burden_rate_changed_flag_tab
6315                 ,x_rev_changed_flag_tab           => x_rev_changed_flag_tab
6316                 ,x_bill_rate_changed_flag_tab     => x_bill_rate_changed_flag_tab
6317                 ,x_multcur_plan_start_date_tab    => x_multcur_plan_start_date_tab
6318                 ,x_multcur_plan_end_date_tab      => x_multcur_plan_end_date_tab
6319                 ,x_fp_task_billable_flag_tab      => x_fp_task_billable_flag_tab
6320                 ,x_cost_rt_miss_num_flag_tab      => x_cost_rt_miss_num_flag_tab
6321                 ,x_burd_rt_miss_num_flag_tab      => x_burd_rt_miss_num_flag_tab
6322                 ,x_bill_rt_miss_num_flag_tab      => x_bill_rt_miss_num_flag_tab
6323                 ,x_Qty_miss_num_flag_tab          => x_Qty_miss_num_flag_tab
6324                 ,x_Rw_miss_num_flag_tab           => x_Rw_miss_num_flag_tab
6325                 ,x_Br_miss_num_flag_tab           => x_Br_miss_num_flag_tab
6326                 ,x_Rv_miss_num_flag_tab           => x_Rv_miss_num_flag_tab
6327                 ,x_rev_only_entry_flag_tab        => x_rev_only_entry_flag_tab
6328                 ,x_return_status                  => l_return_status
6329                 ,x_msg_data                       => x_msg_data
6330 		);
6331 		IF l_return_status <> 'S' Then
6332 			x_return_status := 'E';
6333 		End If;
6334 	   /* end of Perf Impr:5309529 */
6335 	   /*******
6336            FORALL i IN x_resource_assignment_tab.FIRST .. x_resource_assignment_tab.LAST
6337                 INSERT INTO pa_fp_spread_calc_tmp
6338                         (RESOURCE_ASSIGNMENT_ID --resource_assignment_id
6339                          ,DELETE_BL_FLAG          --delete_budget_lines_flag
6340                          ,SPREAD_AMTS_FLAG      --spread_amts_flag
6341                          ,TXN_CURRENCY_CODE     --txn_currency_code
6342                          ,TXN_CURR_CODE_OVERRIDE --txn_currency_override
6343                          ,QUANTITY              --total_qty
6344                          ,SYSTEM_REFERENCE_NUM1 --addl_qty
6345                          ,TXN_RAW_COST          --total_raw_cost
6346                          ,SYSTEM_REFERENCE_NUM2 --addl_raw_cost
6347                          ,TXN_BURDENED_COST     --total_burdened_cost
6348                          ,SYSTEM_REFERENCE_NUM3 --addl_burdened_cost
6349                          ,TXN_REVENUE           --total_revenue
6350                          ,SYSTEM_REFERENCE_NUM4 --addl_revenue
6351                          ,COST_RATE             --raw_cost_rate
6352                          ,COST_RATE_OVERRIDE    --rw_cost_rate_override
6353                          ,BURDEN_COST_RATE      --b_cost_rate
6354                          ,BURDEN_COST_RATE_OVERRIDE --b_cost_rate_override
6355                          ,BILL_RATE             --bill_rate
6356                          ,BILL_RATE_OVERRIDE    --bill_rate_override
6357                          ,START_DATE            --line_start_date
6358                          ,END_DATE              --line_end_date
6359                          ,APPLY_PROGRESS_FLAG   --apply_progress_flag
6360                          ,BUDGET_VERSION_ID     --budget_version_id
6361                          ,OLD_SPREAD_CURVE_ID   --x_spread_curve_id_old_tab
6362                          ,NEW_SPREAD_CURVE_ID   --x_spread_curve_id_new_tab
6363                          ,OLD_SP_FIX_DATE       --x_sp_fixed_date_old_tab
6364                          ,NEW_SP_FIX_DATE       --x_sp_fixed_date_new_tab
6365                          ,OLD_PLAN_START_DATE   --x_plan_start_date_old_tab
6366                          ,NEW_PLAN_START_DATE   --x_plan_start_date_new_tab
6367                          ,OLD_PLAN_END_DATE     --x_plan_end_date_old_tab
6368                          ,NEW_PLAN_END_DATE     --x_plan_end_date_new_tab
6369                          ,RE_SPREAD_AMTS_FLAG   --x_re_spread_flag_tab
6370                          ,SP_CURVE_CHANGE_FLAG  --x_sp_curve_change_flag_tab
6371                          ,PLAN_DATES_CHANGE_FLAG --x_plan_dates_change_flag_tab
6372                          ,SP_FIX_DATE_CHANGE_FLAG --x_spfix_date_flag_tab
6373                          ,MFC_COST_CHANGE_FLAG   --x_mfc_cost_change_flag_tab
6374                          ,OLD_MFC_COST_TYPE_ID   --x_mfc_cost_type_id_old_tab
6375                          ,NEW_MFC_COST_TYPE_ID   --x_mfc_cost_type_id_new_tab
6376              ,ETC_START_DATE
6377              ,PROJECT_CURRENCY_CODE
6378              ,PROJFUNC_CURRENCY_CODE
6379              ,RLM_ID_CHANGE_FLAG
6380              ,BUDGET_VERSION_TYPE
6381             ,BILLABLE_FLAG
6382 			,COST_RATE_G_MISS_NUM_FLAG
6383 			,BURDEN_RATE_G_MISS_NUM_FLAG
6384 			,BILL_RATE_G_MISS_NUM_FLAG
6385 			,QUANTITY_G_MISS_NUM_FLAG
6386 			,RAW_COST_G_MISS_NUM_FLAG
6387 			,BURDEN_COST_G_MISS_NUM_FLAG
6388 			,REVENUE_G_MISS_NUM_FLAG
6389                         )
6390                 VALUES (
6391                         x_resource_assignment_tab(i)
6392                         ,x_delete_budget_lines_tab(i)
6393                         ,x_spread_amts_flag_tab(i)
6394                         ,x_txn_currency_code_tab(i)
6395                         ,x_txn_currency_override_tab(i)
6396                         ,x_total_qty_tab(i)
6397                         ,x_addl_qty_tab(i)
6398                         ,x_total_raw_cost_tab(i)
6399                         ,x_addl_raw_cost_tab(i)
6400                         ,x_total_burdened_cost_tab(i)
6401                         ,x_addl_burdened_cost_tab(i)
6402                         ,x_total_revenue_tab(i)
6403                         ,x_addl_revenue_tab(i)
6404                         ,x_raw_cost_rate_tab(i)
6405                         ,x_rw_cost_rate_override_tab(i)
6406                         ,x_b_cost_rate_tab(i)
6407                         ,x_b_cost_rate_override_tab(i)
6408                         ,x_bill_rate_tab(i)
6409                         ,x_bill_rate_override_tab(i)
6410                         ,x_line_start_date_tab(i)
6411                         ,x_line_end_date_tab(i)
6412                         ,x_apply_progress_flag_tab(i)
6413                         ,g_budget_version_id
6414                         ,x_spread_curve_id_old_tab(i)
6415                         ,x_spread_curve_id_new_tab(i)
6416                         ,x_sp_fixed_date_old_tab(i)
6417                         ,x_sp_fixed_date_new_tab(i)
6418                         ,x_plan_start_date_old_tab(i)
6419                         ,x_plan_start_date_new_tab(i)
6420                         ,x_plan_end_date_old_tab(i)
6421                         ,x_plan_end_date_new_tab(i)
6422                         ,x_re_spread_flag_tab(i)
6423                         ,x_sp_curve_change_flag_tab(i)
6424                         ,x_plan_dates_change_flag_tab(i)
6425                         ,x_spfix_date_flag_tab(i)
6426                         ,x_mfc_cost_change_flag_tab(i)
6427                         ,x_mfc_cost_type_id_old_tab(i)
6428                         ,x_mfc_cost_type_id_new_tab(i)
6429             		,g_etc_start_date
6430             		,g_project_currency_code
6431             		,g_projfunc_currency_code
6432             		,x_rlm_id_change_flag_tab(i)
6433             		,g_budget_version_type
6434             		,x_fp_task_billable_flag_tab(i)
6435 			,x_cost_rt_miss_num_flag_tab(i)
6436                 	,x_burd_rt_miss_num_flag_tab(i)
6437                 	,x_bill_rt_miss_num_flag_tab(i)
6438 			,x_Qty_miss_num_flag_tab(i)
6439                 	,x_Rw_miss_num_flag_tab(i)
6440                 	,x_Br_miss_num_flag_tab(i)
6441                 	,x_Rv_miss_num_flag_tab(i)
6442               );
6443 	 ************/
6444 	IF P_PA_DEBUG_MODE = 'Y' Then
6445         print_msg('Number of rows populated['||sql%rowcount||']');
6446 	End If;
6447 
6448         /* Bug fix: 3841644 Added the following check to validate the duplicate records sent by calling API */
6449                 IF g_source_context = 'RESOURCE_ASSIGNMENT'
6450 		   AND NVL(g_time_phase_changed_flag,'N') = 'N' Then
6451             	   FOR i IN cur_chk_dupRecords LOOP
6452                         --print_msg('Duplicate Resource Assignments sent for Calcaulate API');
6453                         pa_utils.add_message
6454                         ( p_app_short_name => 'PA'
6455                         ,p_msg_name       => 'PA_FP_DUPRES_RECORDS'
6456                         ,p_token1       => 'RESOURCE_ID'
6457                         ,p_value1       => i.resource_assignment_id
6458                         ,p_token2       => 'TXN_CURRENCY_CODE'
6459                         ,p_value2       => i.txn_currency_code
6460                         ,p_token3       => 'BUDGET_VERSION_ID'
6461                         ,p_value3       => p_budget_version_id
6462                         );
6463                         --print_msg('ResId['||i.resource_assignment_id||']txnCur['||i.txn_currency_code||']');
6464                         l_return_status := 'E';
6465             		x_return_status := 'E';
6466                     END LOOP;
6467         End If;
6468 
6469     IF p_calling_module NOT IN ('BUDGET_GENERATION','FORECAST_GENERATION') Then  --{
6470             IF NVL(l_return_status,'S') = 'S'
6471  	                 AND g_source_context = 'RESOURCE_ASSIGNMENT'
6472  	                 AND NVL(g_time_phase_changed_flag,'N') = 'N' Then
6473                    /* Check that If User changes the plan dates for same resource more than once then abort the process */
6474                    OPEN cur_MultipleAdjustments_chk;
6475                    FETCH cur_MultipleAdjustments_chk INTO l_MultipleAdjustments_flag;
6476                    CLOSE cur_MultipleAdjustments_chk;
6477 
6478                    print_msg('Check MultipleLinesAdjustmentFlag['||l_MultipleAdjustments_flag||']');
6479                    IF NVL(l_MultipleAdjustments_flag,'N') = 'Y' THEN
6480                         l_return_status := 'E';
6481                         x_return_status := 'E';
6482 			IF P_PA_DEBUG_MODE = 'Y' Then
6483                         print_msg('Multiple adjustments found for the single resource');
6484 			End If;
6485                         FOR i IN cur_msgStackDetails LOOP
6486                          l_stage := 'RaId['||i.resource_assignment_id||']TxnCur['||i.txn_currency_code||']oldSD[';
6487                          l_stage := l_stage||i.old_plan_start_date||']NewSD['||i.new_plan_start_date;
6488                          l_stage := l_stage||']oldED['||i.old_plan_end_date||']newED['||i.new_plan_end_date||']';
6489                          --print_msg(l_stage);
6490                             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
6491                                 ,p_msg_name      => 'PA_FP_RA_MULTI_ADJUSTMENT'
6492                                 ,p_token1        => 'L_RESOURCE_NAME'
6493                                 ,p_value1        =>  i.resource_name
6494                                 ,p_token2        => 'L_OLD_START_DATE'
6495                                 ,p_value2        =>  i.old_plan_start_date
6496                                 ,p_token3        => 'L_NEW_START_DATE'
6497                                 ,p_value3        => i.new_plan_start_date
6498                                 ,p_token4        => 'L_OLD_END_DATE'
6499                                 ,p_value4        => i.old_plan_end_date
6500                                 ,p_token5        => 'L_NEW_END_DATE'
6501                                 ,p_value5        =>  i.new_plan_end_date
6502                                 );
6503                         END LOOP;
6504                    END IF;
6505            END IF;
6506         END IF;  --}
6507 
6508         IF ( g_refresh_rates_flag = 'N'
6509              AND g_refresh_conv_rates_flag = 'N'
6510 	     AND NVL(g_time_phase_changed_flag,'N') = 'N'
6511              AND g_mass_adjust_flag = 'N') Then  --{
6512 
6513           If NVL(l_return_status,'S') = 'S' Then
6514             /* Bug fix:4221650,4221590 : AMG apis are creating budget lines with null quantity and calling calculate API
6515              * to spread the amounts. The existing line distribution methods spreads the quantiy based on the exisiting plan quantity
6516                      * since budget line donot have any quantity, the spread fails to create a budget lines
6517                      * This is happening through MSP/AMG flow
6518              * call to pji api is not required as these corrupted lines was not passed to pji
6519              */
6520                 /* Bug fix:4272944 Starts */
6521             IF ( NVL(g_baseline_funding_flag,'N') = 'Y'
6522             AND NVL(g_baseline_funding_flag,'N') = 'Y' ) THEN
6523                 --print_msg('Bug fix:4272944: DONOT DELETE AUTOBASELINE zero qty budget lines');
6524                 null;
6525                 /* Bug fix:4272944 Ends */
6526             ELSIF x_resource_assignment_tab.COUNT > 0 THEN
6527 	     IF P_PA_DEBUG_MODE = 'Y' Then
6528              print_msg('Delete zero Quantity budget lines where actuals donot exists');
6529 	     End If;
6530              FORALL i IN x_resource_assignment_tab.FIRST .. x_resource_assignment_tab.LAST
6531              DELETE FROM pa_budget_lines bl
6532              WHERE bl.budget_version_id = p_budget_version_id
6533              AND  bl.resource_assignment_id = x_resource_assignment_tab(i)
6534              AND  NVL(bl.quantity,0)            = 0
6535              AND (NVL(bl.init_quantity,0)       = 0
6536               and NVL(bl.txn_raw_cost,0)        = 0
6537                           and NVL(bl.txn_burdened_cost,0)   = 0
6538                           and NVL(bl.txn_revenue,0)         = 0
6539                   and NVL(bl.txn_init_raw_cost,0)   = 0
6540               and NVL(bl.txn_init_burdened_cost,0)  = 0
6541               and NVL(bl.txn_init_revenue,0)    = 0
6542              );
6543 	     IF P_PA_DEBUG_MODE = 'Y' Then
6544             	print_msg('Number of lines deleted['||sql%rowcount||']');
6545 	     End If;
6546             END IF;
6547 
6548             IF NVL(l_return_status,'S') = 'S' Then
6549                 /* Now update the Rate/Amount/Qty changed flags on the Tmp table */
6550 		IF P_PA_DEBUG_MODE = 'Y' Then
6551                 print_msg('Calling Compare_bdgtLine_Values Api');
6552 		End If;
6553                 Compare_bdgtLine_Values
6554             	    (p_budget_version_id             => p_budget_version_id
6555                     ,p_budget_version_type           => p_budget_version_type
6556                     ,p_source_context                => p_source_context
6557                     ,p_apply_progress_flag           => p_apply_progress_flag
6558             ,x_return_status                 => l_return_status
6559             ,x_msg_data                      => x_msg_data
6560             );
6561                 If l_return_status <> 'S' Then
6562                 x_return_status := 'E';
6563                 End If;
6564             End If;
6565         END IF;  --}
6566 
6567         /* If multiple RA + Txn cur combo is passed, then updates the res attributes whereever it is null */
6568 	IF P_PA_DEBUG_MODE = 'Y' Then
6569         print_msg('Calling synchronize resource attributes api');
6570 	End If;
6571         synch_resAttribs(p_budget_version_id => p_budget_version_id
6572                 ,p_calling_module    => p_calling_module );
6573 
6574         /* now synchronize all the flags */
6575 	IF P_PA_DEBUG_MODE = 'Y' Then
6576         print_msg('calling synchronize changed flag api');
6577 	End If;
6578         synch_ChangedFlags(p_budget_version_id => p_budget_version_id
6579                    ,p_calling_module    => p_calling_module );
6580 
6581         IF ( g_refresh_rates_flag = 'N'
6582                      AND g_refresh_conv_rates_flag = 'N'
6583                      AND g_mass_adjust_flag = 'N'
6584 		AND NVL(g_time_phase_changed_flag,'N') = 'N'
6585              AND g_apply_progress_flag = 'N' ) THEN  --{
6586 
6587          IF (l_return_status = 'S'
6588              AND bvDetailsRec.Wp_Version_Flag <> 'Y'
6589              AND IsCacheReqd(p_calling_context => 'RATXNCOMBO') = 'Y'
6590              AND p_calling_module NOT IN ('BUDGET_GENERATION','FORECAST_GENERATION')) Then
6591            /* Now populate the tmp table with other RA +Txn currnecy combo for resource planned in multi currency */
6592 	   IF P_PA_DEBUG_MODE = 'Y' Then
6593            print_msg('Calling populate_blTxnCurCombo api');
6594 	   End If;
6595            populate_blTxnCurCombo
6596                    (p_budget_version_id     => p_budget_version_id
6597                    ,x_return_status             => l_return_status
6598                    );
6599 	   IF P_PA_DEBUG_MODE = 'Y' Then
6600            print_msg('RetSts after populate_blTxnCurCombo ['||l_return_status||']');
6601 	   End If;
6602            If l_return_status <> 'S' Then
6603             x_return_status := l_return_status;
6604             x_msg_data := sqlcode||sqlerrm ;
6605            End If;
6606          End IF;
6607 
6608 	    /* Ipm changes */
6609 	    If l_return_status = 'S' AND NVL(g_apply_progress_flag,'N') <> 'Y' Then --{
6610 	       If p_calling_module NOT IN ('BUDGET_GENERATION','FORECAST_GENERATION') Then
6611 		IF P_PA_DEBUG_MODE = 'Y' Then
6612             	print_msg('Calling Reset_ratebased_pltrxns API');
6613 		End If;
6614             	Reset_ratebased_pltrxns(
6615                     p_budget_version_id              => p_budget_version_id
6616                     ,p_source_context                => p_source_context
6617                     ,x_return_status                 => l_return_status
6618                     );
6619 		IF P_PA_DEBUG_MODE = 'Y' Then
6620             	print_msg('RetSts of Reset_ratebased_pltrxns API ['||l_return_status||']');
6621 		End If;
6622             	If l_return_status <> 'S' Then
6623                             x_return_status := 'E';
6624             	End If;
6625 	       End If;
6626 
6627 		If l_return_status = 'S' and p_calling_module NOT IN ('BUDGET_GENERATION','FORECAST_GENERATION') Then
6628 			IF P_PA_DEBUG_MODE = 'Y' Then
6629 			print_msg('Calling process_NonRtBsRec_forSprd API');
6630 			End If;
6631 			process_NonRtBsRec_forSprd
6632 			(p_budget_version_id              => p_budget_version_id
6633                     	,p_source_context                => p_source_context
6634                     	,x_return_status                 => l_return_status
6635                     	);
6636 			IF P_PA_DEBUG_MODE = 'Y' Then
6637                         print_msg('RetSts of process_NonRtBsRec_forSprd API ['||l_return_status||']');
6638 			End If;
6639                         If l_return_status <> 'S' Then
6640                             x_return_status := 'E';
6641                         End If;
6642                 End If;
6643 
6644 
6645 		If p_calling_module NOT IN ('BUDGET_GENERATION','FORECAST_GENERATION') and
6646 		   g_budget_version_type = 'ALL' and l_return_status = 'S' Then
6647 		   IF P_PA_DEBUG_MODE = 'Y' Then
6648 		   print_msg('Calling pre_process_Revenue_Only_Recs API');
6649 		   End If;
6650 		   pre_process_Revenue_Only_Recs
6651                     (p_budget_version_id              => p_budget_version_id
6652                     ,p_source_context                => p_source_context
6653                     ,x_return_status                 => l_return_status
6654                     );
6655 			IF P_PA_DEBUG_MODE = 'Y' Then
6656                 	print_msg('RetSts of pre_process_Revenue_Only_Recs API ['||l_return_status||']');
6657 			End If;
6658                 	If l_return_status <> 'S' Then
6659                             x_return_status := 'E';
6660                 	End If;
6661 		End If;
6662 
6663             If l_return_status = 'S' AND NVL(g_apply_progress_flag,'N') <> 'Y' Then
6664 	    IF P_PA_DEBUG_MODE = 'Y' Then
6665             print_msg('Calling Check_ratebased_pltrxns API');
6666 	    End If;
6667             Check_ratebased_pltrxns(
6668                     p_budget_version_id              => p_budget_version_id
6669                     ,p_source_context                => p_source_context
6670                     ,x_return_status                 => l_return_status
6671                     );
6672 	    IF P_PA_DEBUG_MODE = 'Y' Then
6673             print_msg('RetSts of Check_ratebased_pltrxns API ['||l_return_status||']');
6674 	    End If;
6675             If l_return_status <> 'S' Then
6676                             x_return_status := 'E';
6677                         End If;
6678             End If;
6679           End If;
6680         END IF; --}
6681 	END IF; --}
6682 
6683         /** added this for debug purpose
6684         FOR i IN (select * from pa_fp_spread_calc_tmp ) LOOP
6685             print_msg('Ra['||i.resource_assignment_id||']TxnCur['||i.txn_currency_code||']');
6686             print_msg('respFlag['||i.re_spread_amts_flag||']');
6687                     print_msg('spCurvFlag['||i.sp_curve_change_flag||']');
6688                     print_msg('PlanDtFlag['||i.plan_dates_change_flag||']');
6689                     print_msg('SpFixDtFlag['||i.sp_fix_date_change_flag||']');
6690                     print_msg('mfcCstFlag['||i.mfc_cost_change_flag||']');
6691             print_msg('RlmIdChangFlag['||i.rlm_id_change_flag||']');
6692 
6693         END LOOP;
6694         **/
6695 
6696         /* Now process the resource attribute changes */
6697         IF (l_return_status = 'S'
6698              AND g_refresh_rates_flag = 'N'
6699                      AND g_refresh_conv_rates_flag = 'N'
6700                      AND g_mass_adjust_flag = 'N'
6701                      AND g_apply_progress_flag = 'N'
6702 		AND NVL(g_time_phase_changed_flag,'N') = 'N'
6703              AND p_calling_module NOT IN ('BUDGET_GENERATION','FORECAST_GENERATION')
6704              AND perdRec.time_phased_code IN ('G','P')) Then --{
6705 
6706             FOR i IN cur_sprdRecs LOOP  --{
6707 	    /**
6708             print_msg('ResMultiCurLineFlag['||i.MultiCurrLineFlag||']');
6709             print_msg('Looping for RA['||i.resource_assignment_id||']Txncur['||i.txn_currency_code||']');
6710             print_msg('oldplsd['||i.old_plan_start_date||']newplsd['||i.new_plan_start_date||']');
6711 	    print_msg('oldpled['||i.old_plan_end_date||']');
6712             print_msg('newpled['||i.new_plan_end_date||']SdShrunkFlg['||i.plan_start_date_shrunk_flag||']');
6713 	    print_msg('EDshrkFlg['||i.plan_end_date_shrunk_flag||']');
6714 	    **/
6715             IF (i.MultiCurrLineFlag = 'Y' AND bvDetailsRec.Wp_Version_Flag <> 'Y')  Then
6716                /* process planning dates change */
6717                IF (NVL(i.re_spread_amts_flag,'N') = 'N'
6718                     AND (i.plan_end_date_shrunk_flag = 'Y' OR i.plan_start_date_shrunk_flag = 'Y')) THEN
6719 
6720                 populate_planDates_Tabs(
6721                         p_resource_assignment_id        => i.resource_assignment_id
6722                         ,p_txn_currency_code             => i.txn_currency_code
6723                 ,p_project_currency_code         => i.project_currency_code
6724                 ,p_projfunc_currency_code        => i.projfunc_currency_code
6725                         ,p_start_dates_shrunk_flag       => i.plan_start_date_shrunk_flag
6726                         ,p_end_dates_shrunk_flag         => i.plan_end_date_shrunk_flag
6727                         ,p_plan_start_date_old           => i.old_plan_start_date
6728                         ,p_plan_start_date_new           => i.new_plan_start_date
6729                         ,p_plan_end_date_old             => i.old_plan_end_date
6730                         ,p_plan_end_date_new             => i.new_plan_end_date
6731                 );
6732 
6733                End If;
6734 
6735                /* Process spread curve change */
6736                IF (NVL(i.sp_curve_change_flag,'N') = 'Y'
6737                 OR NVL(i.sp_fix_date_change_flag,'N') = 'Y'
6738                 --OR NVL(i.mfc_cost_change_flag,'N') = 'Y'
6739                 OR NVL(i.re_spread_amts_flag,'N') = 'Y'
6740                 OR NVL(i.rlm_id_change_flag,'N') = 'Y' ) THEN
6741 
6742                 Populate_ResAttribTabs(
6743                                 p_resource_assignment_id        => i.resource_assignment_id
6744                                 ,p_txn_currency_code             => i.txn_currency_code
6745                                 );
6746 
6747                END IF;
6748 
6749             END IF; -- end of MultiCurrLineFlag
6750            END LOOP; --}
6751            /* process tmp table for planning dates change*/
6752            IF g_Rspd_RaId_Tab.COUNT > 0 Then
6753 	    IF P_PA_DEBUG_MODE = 'Y' Then
6754             print_msg('Calling process_planDates_change api');
6755 	    End If;
6756             process_planDates_change(
6757                         p_budget_version_id              => p_budget_version_id
6758                         ,x_return_status                 => l_return_status
6759                         ,x_msg_data                      => x_msg_data
6760                 );
6761 	    IF P_PA_DEBUG_MODE = 'Y' Then
6762             print_msg('returnStatus of process_planDates_change api['||l_return_status||']');
6763 	    End If;
6764             If l_return_status <> 'S' Then
6765                 x_return_status := l_return_status;
6766             End If;
6767            END IF;
6768            /* process tmp table for other res attribute changes flag */
6769            IF g_RsAtrb_RaId_tab.COUNT > 0 THEN
6770 	    IF P_PA_DEBUG_MODE = 'Y' Then
6771             print_msg('Calling process_ResAttribs api');
6772 	    End if;
6773             process_ResAttribs(
6774                         p_budget_version_id              => p_budget_version_id
6775                         ,p_resource_assignment_id_tab    => g_RsAtrb_RaId_tab
6776                         ,p_txn_currency_code_tab         => g_RsAtrb_Txncur_Tab
6777                         ,x_return_status                 => l_return_status
6778                         ,x_msg_data                      => x_msg_data
6779                 );
6780 	    IF P_PA_DEBUG_MODE = 'Y' Then
6781             print_msg('returnStatus of process_ResAttribs api['||l_return_status||']');
6782 	    End If;
6783                         If l_return_status <> 'S' Then
6784                                 x_return_status := l_return_status;
6785                         End If;
6786            END IF;
6787         END IF;  --}
6788 
6789         IF ( l_return_status = 'S'
6790              AND g_refresh_rates_flag = 'N'
6791                      AND g_refresh_conv_rates_flag = 'N'
6792                      AND g_mass_adjust_flag = 'N'
6793                      AND g_apply_progress_flag = 'N'
6794 		AND NVL(g_time_phase_changed_flag,'N') = 'N'
6795              AND perdRec.time_phased_code NOT IN ('G','P')
6796              AND p_calling_module NOT IN ('BUDGET_GENERATION','FORECAST_GENERATION') ) Then --{
6797 		IF P_PA_DEBUG_MODE = 'Y' Then
6798             print_msg('Calling process_NonTimePhase_Lines API ');
6799 		End If;
6800             process_NonTimePhase_Lines
6801                 (p_budget_version_id            => p_budget_version_id
6802                 ,p_time_phased_code             => perdRec.time_phased_code
6803                                 ,p_apply_progress_flag          => p_apply_progress_flag
6804                                 ,p_source_context               => p_source_context
6805                                 ,x_return_status                => l_return_status
6806                                 ,x_msg_data                     => x_msg_data
6807                                 );
6808 		IF P_PA_DEBUG_MODE = 'Y' Then
6809             print_msg('returnStatus of process_NonTimePhase_Lines api['||l_return_status||']');
6810 		End If;
6811                         If l_return_status <> 'S' Then
6812                                 x_return_status := l_return_status;
6813                         End If;
6814         END IF;  --}
6815 
6816         IF (l_return_status = 'S'
6817            AND g_refresh_rates_flag = 'N'
6818                    AND g_refresh_conv_rates_flag = 'N'
6819                    AND g_mass_adjust_flag = 'N'
6820                    AND g_apply_progress_flag = 'N'
6821 		AND NVL(g_time_phase_changed_flag,'N') = 'N'
6822            AND p_calling_module NOT IN ('BUDGET_GENERATION','FORECAST_GENERATION')) Then --{
6823            IF IsCacheReqd(p_calling_context => 'RATES') = 'Y' Then
6824                     /* cache all the override rates and currency conversion attributes */
6825 		IF P_PA_DEBUG_MODE = 'Y' Then
6826             		print_msg('Calling cache_rates API');
6827 		End If;
6828                     cache_rates(
6829                         p_budget_verson_id              => p_budget_version_id
6830                 ,p_apply_progress_flag          => p_apply_progress_flag
6831                         ,p_source_context               => p_source_context
6832                         ,x_return_status                => l_return_status
6833                         ,x_msg_data                     => x_msg_data
6834                             );
6835 		IF P_PA_DEBUG_MODE = 'Y' Then
6836             		print_msg('returnSts of cache_rates api['||l_return_status||']');
6837 		End If;
6838             IF l_return_status <> 'S' Then
6839                 x_return_status := l_return_status;
6840             End If;
6841            END IF;
6842         END IF; --}
6843 
6844         /* Bug fix:5483430 */
6845         IF (l_return_status = 'S'
6846            AND g_refresh_rates_flag = 'N'
6847            AND g_refresh_conv_rates_flag = 'N'
6848            AND g_mass_adjust_flag = 'N'
6849            AND g_apply_progress_flag = 'N'
6850            AND NVL(g_time_phase_changed_flag,'N') = 'N'
6851            AND perdRec.time_phased_code IN ('G','P')
6852            AND g_source_context = 'RESOURCE_ASSIGNMENT'
6853            AND p_calling_module NOT IN ('BUDGET_GENERATION','FORECAST_GENERATION')) Then --{
6854                 IF P_PA_DEBUG_MODE = 'Y' Then
6855                         print_msg('Calling Check_GLPA_periods_exists ');
6856                 End If;
6857                 Check_GLPA_periods_exists(
6858                         p_budget_verson_id  => p_budget_version_id
6859                         ,p_time_phase_code  => perdRec.time_phased_code
6860                         ,x_return_status    => l_return_status
6861                         ,x_msg_data         => x_msg_data
6862                         );
6863                 IF P_PA_DEBUG_MODE = 'Y' Then
6864                         print_msg('returnSts of Check_GLPA_periods_exists ['||l_return_status||']');
6865                 End If;
6866         END If;
6867         /* end of bug:5483430 */
6868 
6869         /* Now reset the plsql indexes. Ideally this is not requires we can use the tmp table
6870         * this requires lot of code changes in the calculate api. due to time constraint
6871                 * avoiding this and populating the plsql table */
6872                 SELECT tmp.RESOURCE_ASSIGNMENT_ID --resource_assignment_id
6873                          ,tmp.DELETE_BL_FLAG          --delete_budget_lines_flag
6874                          ,tmp.SPREAD_AMTS_FLAG      --spread_amts_flag
6875                          ,tmp.TXN_CURRENCY_CODE     --txn_currency_code
6876                          ,tmp.TXN_CURR_CODE_OVERRIDE --txn_currency_override
6877                          ,tmp.QUANTITY              --total_qty
6878                          ,tmp.SYSTEM_REFERENCE_NUM1 --addl_qty
6879                          ,tmp.TXN_RAW_COST          --total_raw_cost
6880                          ,tmp.SYSTEM_REFERENCE_NUM2 --addl_raw_cost
6881                          ,tmp.TXN_BURDENED_COST     --total_burdened_cost
6882                          ,tmp.SYSTEM_REFERENCE_NUM3 --addl_burdened_cost
6883                          ,tmp.TXN_REVENUE           --total_revenue
6884                          ,tmp.SYSTEM_REFERENCE_NUM4 --addl_revenue
6885                          ,tmp.COST_RATE             --raw_cost_rate
6886                          ,tmp.COST_RATE_OVERRIDE    --rw_cost_rate_override
6887                          ,tmp.BURDEN_COST_RATE      --b_cost_rate
6888                          ,tmp.BURDEN_COST_RATE_OVERRIDE --b_cost_rate_override
6889                          ,tmp.BILL_RATE             --bill_rate
6890                          ,tmp.BILL_RATE_OVERRIDE    --bill_rate_override
6891                          ,tmp.START_DATE            --line_start_date
6892                          ,tmp.END_DATE              --line_end_date
6893                          ,tmp.APPLY_PROGRESS_FLAG   --apply_progress_flag
6894                          ,tmp.OLD_SPREAD_CURVE_ID   --x_spread_curve_id_old_tab
6895                          ,tmp.NEW_SPREAD_CURVE_ID   --x_spread_curve_id_new_tab
6896                          ,tmp.OLD_SP_FIX_DATE       --x_sp_fixed_date_old_tab
6897                          ,tmp.NEW_SP_FIX_DATE       --x_sp_fixed_date_new_tab
6898                          ,tmp.OLD_PLAN_START_DATE   --x_plan_start_date_old_tab
6899                          ,tmp.NEW_PLAN_START_DATE   --x_plan_start_date_new_tab
6900                          ,tmp.OLD_PLAN_END_DATE     --x_plan_end_date_old_tab
6901                          ,tmp.NEW_PLAN_END_DATE     --x_plan_end_date_new_tab
6902                          ,NVL(tmp.RE_SPREAD_AMTS_FLAG,'N')   --x_re_spread_flag_tab
6903                          ,NVL(tmp.SP_CURVE_CHANGE_FLAG,'N')  --x_sp_curve_change_flag_tab
6904                          ,NVL(tmp.PLAN_DATES_CHANGE_FLAG,'N') --x_plan_dates_change_flag_tab
6905                          ,NVL(tmp.SP_FIX_DATE_CHANGE_FLAG,'N') --x_spfix_date_flag_tab
6906                          ,NVL(tmp.MFC_COST_CHANGE_FLAG,'N')   --x_mfc_cost_change_flag_tab
6907                          ,tmp.OLD_MFC_COST_TYPE_ID   --x_mfc_cost_type_id_old_tab
6908                          ,tmp.NEW_MFC_COST_TYPE_ID   --x_mfc_cost_type_id_new_tab
6909              ,NVL(tmp.RLM_ID_CHANGE_FLAG,'N')
6910              ,NVL(tmp.plan_start_date_shrunk_flag,'N')
6911              ,NVL(tmp.plan_end_date_shrunk_flag,'N')
6912              ,NVL(tmp.mfc_cost_refresh_flag,'N')
6913              ,NVL(tmp.system_reference_var1 ,'N') --ResourceWithMultiCurrency
6914              ,NVL(tmp.quantity_changed_flag,'N')
6915                      ,NVL(tmp.raw_cost_changed_flag,'N')
6916                      ,NVL(tmp.cost_rate_changed_flag,'N')
6917                      ,NVL(tmp.burden_cost_changed_flag,'N')
6918                      ,NVL(tmp.burden_rate_changed_flag,'N')
6919                      ,NVL(tmp.revenue_changed_flag,'N')
6920                      ,NVL(tmp.bill_rate_changed_flag,'N')
6921              ,tmp.system_reference_dat1  --newPlanStartDate for resPlannedIn Multicur
6922              ,tmp.system_reference_dat2  --newPlanEndDate for resPlannedIn Multicur
6923 			,NVL(tmp.COST_RATE_G_MISS_NUM_FLAG,'N')
6924                         ,NVL(tmp.BURDEN_RATE_G_MISS_NUM_FLAG,'N')
6925                         ,NVL(tmp.BILL_RATE_G_MISS_NUM_FLAG,'N')
6926 			,NVL(tmp.revenue_only_entered_flag,'N')
6927 			,NVL(tmp.QUANTITY_G_MISS_NUM_FLAG,'N')
6928                        ,NVL(tmp.RAW_COST_G_MISS_NUM_FLAG,'N')
6929                        ,NVL(tmp.BURDEN_COST_G_MISS_NUM_FLAG,'N')
6930                       ,NVL(tmp.REVENUE_G_MISS_NUM_FLAG,'N')
6931 		      /* bug fix:5726773 */
6932  	              ,NVL(tmp.NEG_QUANTITY_CHANGE_FLAG,'N') -- negQtyChangeflag
6933  	              ,NVL(tmp.NEG_RAWCOST_CHANGE_FLAG,'N') -- negRawCostChangeFlag
6934  	              ,NVL(tmp.NEG_BURDEN_CHANGE_FALG,'N') -- negBurdChangeFlag
6935  	              ,NVL(tmp.NEG_REVENUE_CHANGE_FLAG,'N') -- negRevChangeFlag
6936                 BULK COLLECT INTO
6937                         x_resource_assignment_tab
6938                         ,x_delete_budget_lines_tab
6939                         ,x_spread_amts_flag_tab
6940                         ,x_txn_currency_code_tab
6941                         ,x_txn_currency_override_tab
6942                         ,x_total_qty_tab
6943                         ,x_addl_qty_tab
6944                         ,x_total_raw_cost_tab
6945                         ,x_addl_raw_cost_tab
6946                         ,x_total_burdened_cost_tab
6947                         ,x_addl_burdened_cost_tab
6948                         ,x_total_revenue_tab
6949                         ,x_addl_revenue_tab
6950                         ,x_raw_cost_rate_tab
6951                         ,x_rw_cost_rate_override_tab
6952                         ,x_b_cost_rate_tab
6953                         ,x_b_cost_rate_override_tab
6954                         ,x_bill_rate_tab
6955                         ,x_bill_rate_override_tab
6956                         ,x_line_start_date_tab
6957                         ,x_line_end_date_tab
6958                         ,x_apply_progress_flag_tab
6959                         ,x_spread_curve_id_old_tab
6960                         ,x_spread_curve_id_new_tab
6961                         ,x_sp_fixed_date_old_tab
6962                         ,x_sp_fixed_date_new_tab
6963                         ,x_plan_start_date_old_tab
6964                         ,x_plan_start_date_new_tab
6965                         ,x_plan_end_date_old_tab
6966                         ,x_plan_end_date_new_tab
6967                         ,x_re_spread_flag_tab
6968                         ,x_sp_curve_change_flag_tab
6969                         ,x_plan_dates_change_flag_tab
6970                         ,x_spfix_date_flag_tab
6971                         ,x_mfc_cost_change_flag_tab
6972                         ,x_mfc_cost_type_id_old_tab
6973                         ,x_mfc_cost_type_id_new_tab
6974             ,x_rlm_id_change_flag_tab
6975             ,x_plan_sdate_shrunk_flag_tab
6976                     ,x_plan_edate_shrunk_flag_tab
6977                     ,x_mfc_cost_refresh_flag_tab
6978             ,x_ra_in_multi_cur_flag_tab
6979             ,x_quantity_changed_flag_tab
6980                     ,x_raw_cost_changed_flag_tab
6981                     ,x_cost_rate_changed_flag_tab
6982                     ,x_burden_cost_changed_flag_tab
6983                     ,x_burden_rate_changed_flag_tab
6984                     ,x_rev_changed_flag_tab
6985                     ,x_bill_rate_changed_flag_tab
6986             ,x_multcur_plan_start_date_tab
6987                     ,x_multcur_plan_end_date_tab
6988 		,x_cost_rt_miss_num_flag_tab
6989                 ,x_burd_rt_miss_num_flag_tab
6990                 ,x_bill_rt_miss_num_flag_tab
6991 		,x_rev_only_entry_flag_tab
6992 		,x_Qty_miss_num_flag_tab
6993                 ,x_Rw_miss_num_flag_tab
6994                 ,x_Br_miss_num_flag_tab
6995                 ,x_Rv_miss_num_flag_tab
6996 		/* bug fix:5726773 */
6997  	        ,x_neg_Qty_Changflag_tab
6998  	        ,x_neg_Raw_Changflag_tab
6999  	        ,x_neg_Burd_Changflag_tab
7000  	        ,x_neg_rev_Changflag_tab
7001                 FROM PA_FP_SPREAD_CALC_TMP tmp
7002                 WHERE tmp.budget_version_id = p_budget_version_id;
7003 
7004     x_return_status := l_return_status;
7005 
7006         /* reset the error stack */
7007     If p_pa_debug_mode = 'Y' Then
7008     	print_msg('RetSts of the populate_spreadTmp_OvrRates ['||x_return_status||']');
7009         pa_debug.reset_err_stack;
7010     End If;
7011 
7012 EXCEPTION
7013         WHEN OTHERS THEN
7014                 x_return_status := 'U';
7015                 x_msg_data := sqlcode||sqlerrm;
7016                 print_msg('Failed in populate_spreadTmp_OvrRates API'||x_msg_data);
7017          fnd_msg_pub.add_exc_msg
7018                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
7019                  ,p_procedure_name => 'populate_spreadCalc_Tmp ');
7020         If p_pa_debug_mode = 'Y' Then
7021                     pa_debug.reset_err_stack;
7022         End If;
7023                 RAISE;
7024 
7025 END  populate_spreadCalc_Tmp ;
7026 
7027 /* This API caches the override rates,currency conversion attributes, DFFs and other attributes from budget lines to
7028  * tmp2 table. later after spread, for that matching RA+TXN+START DATE periodic lines the attributes will be stamped back
7029  * This is required in order to avoid loosing manual periodic overrides during resource attribute changes
7030  */
7031 PROCEDURE cache_rates(
7032         p_budget_verson_id              IN  Number
7033         ,p_apply_progress_flag          IN Varchar2
7034                 ,p_source_context                IN  pa_fp_res_assignments_tmp.source_context%TYPE
7035         ,x_return_status                 OUT NOCOPY varchar2
7036         ,x_msg_data                      OUT NOCOPY varchar2
7037              ) IS
7038 
7039     l_rowcount    Number;
7040 
7041     CURSOR cur_ovr_rts IS
7042     SELECT tmp.resource_assignment_id
7043         ,tmp.txn_currency_code
7044         ,tmp.cost_rate_override
7045         ,tmp.burden_cost_rate_override
7046         ,tmp.bill_rate_override
7047         ,tmp.budget_version_type
7048         ,tmp.quantity_changed_flag
7049         ,tmp.cost_rate_changed_flag
7050         ,tmp.burden_rate_changed_flag
7051         ,tmp.bill_rate_changed_flag
7052         ,tmp.mfc_cost_change_flag
7053     FROM pa_fp_spread_calc_tmp tmp
7054     WHERE tmp.budget_version_id = p_budget_verson_id
7055     AND   nvl(tmp.rlm_id_change_flag,'N') <> 'Y'
7056     AND   (tmp.cost_rate_override is NOT NULL
7057         OR tmp.burden_cost_rate_override is NOT NULL
7058         OR tmp.bill_rate_override is NOT NULL
7059         OR tmp.mfc_cost_change_flag = 'Y' );
7060 BEGIN
7061     /* Initialize the error stack */
7062     If p_pa_debug_mode = 'Y' Then
7063         pa_debug.init_err_stack('PA_FP_CALC_UTILS.cache_rates');
7064     End If;
7065     x_return_status := 'S';
7066     x_msg_data := NULL;
7067 
7068     INSERT INTO pa_fp_spread_calc_tmp1
7069             (RESOURCE_ASSIGNMENT_ID --resource_assignment_id
7070                          ,BUDGET_VERSION_ID     --budget_version_id
7071              ,BUDGET_VERSION_TYPE
7072              ,BUDGET_LINE_ID
7073                          ,TXN_CURRENCY_CODE     --txn_currency_code
7074                          ,TXN_CURR_CODE_OVERRIDE --txn_currency_override
7075                          ,QUANTITY              --total_qty
7076                          ,TXN_RAW_COST          --total_raw_cost
7077                          ,TXN_BURDENED_COST     --total_burdened_cost
7078                          ,TXN_REVENUE           --total_revenue
7079                          ,COST_RATE             --raw_cost_rate
7080                          ,COST_RATE_OVERRIDE    --rw_cost_rate_override
7081                          ,BURDEN_COST_RATE      --b_cost_rate
7082                          ,BURDEN_COST_RATE_OVERRIDE --b_cost_rate_override
7083                          ,BILL_RATE             --bill_rate
7084                          ,BILL_RATE_OVERRIDE    --bill_rate_override
7085                          ,START_DATE            --line_start_date
7086                          ,END_DATE              --line_end_date
7087              ,PERIOD_NAME
7088             ,PROJECT_CURRENCY_CODE
7089             ,PROJFUNC_CURRENCY_CODE
7090             ,PROJECT_COST_RATE_TYPE
7091             ,PROJECT_COST_EXCHANGE_RATE
7092             ,PROJECT_COST_RATE_DATE_TYPE
7093             ,PROJECT_COST_RATE_DATE
7094             ,PROJECT_REV_RATE_TYPE
7095             ,PROJECT_REV_EXCHANGE_RATE
7096             ,PROJECT_REV_RATE_DATE_TYPE
7097             ,PROJECT_REV_RATE_DATE
7098             ,PROJFUNC_COST_RATE_TYPE
7099             ,PROJFUNC_COST_EXCHANGE_RATE
7100             ,PROJFUNC_COST_RATE_DATE_TYPE
7101             ,PROJFUNC_COST_RATE_DATE
7102             ,PROJFUNC_REV_RATE_TYPE
7103             ,PROJFUNC_REV_EXCHANGE_RATE
7104             ,PROJFUNC_REV_RATE_DATE_TYPE
7105             ,PROJFUNC_REV_RATE_DATE
7106             ,CHANGE_REASON_CODE
7107             ,DESCRIPTION
7108             ,ATTRIBUTE_CATEGORY
7109             ,ATTRIBUTE1
7110             ,ATTRIBUTE2
7111             ,ATTRIBUTE3
7112             ,ATTRIBUTE4
7113             ,ATTRIBUTE5
7114             ,ATTRIBUTE6
7115             ,ATTRIBUTE7
7116             ,ATTRIBUTE8
7117             ,ATTRIBUTE9
7118             ,ATTRIBUTE10
7119             ,ATTRIBUTE11
7120             ,ATTRIBUTE12
7121             ,ATTRIBUTE13
7122             ,ATTRIBUTE14
7123             ,ATTRIBUTE15
7124             ,RAW_COST_SOURCE
7125             ,BURDENED_COST_SOURCE
7126             ,QUANTITY_SOURCE
7127             ,REVENUE_SOURCE
7128             ,PM_PRODUCT_CODE
7129             ,PM_BUDGET_LINE_REFERENCE
7130             ,CODE_COMBINATION_ID
7131             ,CCID_GEN_STATUS_CODE
7132             ,CCID_GEN_REJ_MESSAGE
7133             ,BORROWED_REVENUE
7134             ,TP_REVENUE_IN
7135             ,TP_REVENUE_OUT
7136             ,REVENUE_ADJ
7137             ,LENT_RESOURCE_COST
7138             ,TP_COST_IN
7139             ,TP_COST_OUT
7140             ,COST_ADJ
7141             ,UNASSIGNED_TIME_COST
7142             ,UTILIZATION_PERCENT
7143             ,UTILIZATION_HOURS
7144             ,UTILIZATION_ADJ
7145             ,CAPACITY
7146             ,HEAD_COUNT
7147             ,HEAD_COUNT_ADJ
7148             ,BUCKETING_PERIOD_CODE
7149             ,TXN_DISCOUNT_PERCENTAGE
7150             ,TRANSFER_PRICE_RATE
7151             ,BL_CREATED_BY
7152             ,BL_CREATION_DATE
7153             ,mfc_cost_change_flag
7154             )
7155         SELECT /*+ INDEX(BL PA_BUDGET_LINES_U1) */
7156             bl.RESOURCE_ASSIGNMENT_ID --resource_assignment_id
7157                          ,bl.BUDGET_VERSION_ID     --budget_version_id
7158              ,tmp.BUDGET_VERSION_TYPE
7159              ,bl.BUDGET_LINE_ID
7160                          ,bl.TXN_CURRENCY_CODE     --txn_currency_code
7161                          ,tmp.TXN_CURR_CODE_OVERRIDE --txn_currency_override
7162                          ,bl.QUANTITY              --total_qty
7163                          ,bl.TXN_RAW_COST          --total_raw_cost
7164                          ,bl.TXN_BURDENED_COST     --total_burdened_cost
7165                          ,bl.TXN_REVENUE           --total_revenue
7166                          ,bl.TXN_STANDARD_COST_RATE             --raw_cost_rate
7167                          ,bl.TXN_COST_RATE_OVERRIDE    --rw_cost_rate_override
7168                          ,bl.BURDEN_COST_RATE      --b_cost_rate
7169                          ,bl.BURDEN_COST_RATE_OVERRIDE --b_cost_rate_override
7170                          ,bl.TXN_STANDARD_BILL_RATE             --bill_rate
7171                          ,bl.TXN_BILL_RATE_OVERRIDE    --bill_rate_override
7172                          ,bl.START_DATE            --line_start_date
7173                          ,bl.END_DATE              --line_end_date
7174             ,bl.PERIOD_NAME
7175             ,bl.PROJECT_CURRENCY_CODE
7176             ,bl.PROJFUNC_CURRENCY_CODE
7177             ,bl.PROJECT_COST_RATE_TYPE
7178             ,bl.PROJECT_COST_EXCHANGE_RATE
7179             ,bl.PROJECT_COST_RATE_DATE_TYPE
7180             ,bl.PROJECT_COST_RATE_DATE
7181             ,bl.PROJECT_REV_RATE_TYPE
7182             ,bl.PROJECT_REV_EXCHANGE_RATE
7183             ,bl.PROJECT_REV_RATE_DATE_TYPE
7184             ,bl.PROJECT_REV_RATE_DATE
7185             ,bl.PROJFUNC_COST_RATE_TYPE
7186             ,bl.PROJFUNC_COST_EXCHANGE_RATE
7187             ,bl.PROJFUNC_COST_RATE_DATE_TYPE
7188             ,bl.PROJFUNC_COST_RATE_DATE
7189             ,bl.PROJFUNC_REV_RATE_TYPE
7190             ,bl.PROJFUNC_REV_EXCHANGE_RATE
7191             ,bl.PROJFUNC_REV_RATE_DATE_TYPE
7192             ,bl.PROJFUNC_REV_RATE_DATE
7193             ,bl.CHANGE_REASON_CODE
7194             ,bl.DESCRIPTION
7195             ,bl.ATTRIBUTE_CATEGORY
7196             ,bl.ATTRIBUTE1
7197             ,bl.ATTRIBUTE2
7198             ,bl.ATTRIBUTE3
7199             ,bl.ATTRIBUTE4
7200             ,bl.ATTRIBUTE5
7201             ,bl.ATTRIBUTE6
7202             ,bl.ATTRIBUTE7
7203             ,bl.ATTRIBUTE8
7204             ,bl.ATTRIBUTE9
7205             ,bl.ATTRIBUTE10
7206             ,bl.ATTRIBUTE11
7207             ,bl.ATTRIBUTE12
7208             ,bl.ATTRIBUTE13
7209             ,bl.ATTRIBUTE14
7210             ,bl.ATTRIBUTE15
7211             ,bl.RAW_COST_SOURCE
7212             ,bl.BURDENED_COST_SOURCE
7213             ,bl.QUANTITY_SOURCE
7214             ,bl.REVENUE_SOURCE
7215             ,bl.PM_PRODUCT_CODE
7216             ,bl.PM_BUDGET_LINE_REFERENCE
7217             ,bl.CODE_COMBINATION_ID
7218             ,bl.CCID_GEN_STATUS_CODE
7219             ,bl.CCID_GEN_REJ_MESSAGE
7220             ,bl.BORROWED_REVENUE
7221             ,bl.TP_REVENUE_IN
7222             ,bl.TP_REVENUE_OUT
7223             ,bl.REVENUE_ADJ
7224             ,bl.LENT_RESOURCE_COST
7225             ,bl.TP_COST_IN
7226             ,bl.TP_COST_OUT
7227             ,bl.COST_ADJ
7228             ,bl.UNASSIGNED_TIME_COST
7229             ,bl.UTILIZATION_PERCENT
7230             ,bl.UTILIZATION_HOURS
7231             ,bl.UTILIZATION_ADJ
7232             ,bl.CAPACITY
7233             ,bl.HEAD_COUNT
7234             ,bl.HEAD_COUNT_ADJ
7235             ,bl.BUCKETING_PERIOD_CODE
7236             ,bl.TXN_DISCOUNT_PERCENTAGE
7237             ,bl.TRANSFER_PRICE_RATE
7238             ,bl.CREATED_BY
7239             ,bl.CREATION_DATE
7240             ,tmp.mfc_cost_change_flag
7241         FROM PA_BUDGET_LINES bl
7242             ,PA_FP_SPREAD_CALC_TMP tmp
7243         WHERE bl.budget_version_id = p_budget_verson_id
7244         AND   bl.budget_version_id = tmp.budget_version_id
7245         AND   bl.resource_assignment_id = tmp.resource_assignment_id
7246         AND   bl.txn_currency_code = tmp.txn_currency_code
7247         AND   ((tmp.ETC_START_DATE is NOT NULL
7248             AND bl.end_date >= tmp.ETC_START_DATE)
7249             OR
7250             tmp.ETC_START_DATE is NULL
7251               )
7252         AND  NVL(tmp.RLM_ID_CHANGE_FLAG,'N') <> 'Y'
7253         AND   (NVL(tmp.SP_CURVE_CHANGE_FLAG,'N') = 'Y'
7254             OR NVL(tmp.SP_FIX_DATE_CHANGE_FLAG,'N') = 'Y'
7255             OR NVL(tmp.PLAN_DATES_CHANGE_FLAG,'N') = 'Y'
7256             OR NVL(tmp.MFC_COST_CHANGE_FLAG,'N') = 'Y'
7257             OR NVL(tmp.RE_SPREAD_AMTS_FLAG,'N') = 'Y'
7258               );
7259     l_rowcount := sql%rowcount;
7260     IF P_PA_DEBUG_MODE = 'Y' Then
7261     print_msg('Number of rows cached['||l_rowcount||']');
7262     End If;
7263 
7264     /* Now update the override rates If any passed from the Page */
7265     FOR i IN cur_ovr_rts LOOP
7266 	/*
7267         print_msg('mfcCostFlag['||i.mfc_cost_change_flag||'Ver['||i.budget_version_type||']');
7268         print_msg('costRtChFlag['||i.cost_rate_changed_flag||']Rt['||i.cost_rate_override||']');
7269         print_msg('burRtOvr['||i.burden_cost_rate_override||']');
7270 	*/
7271         UPDATE /*+ INDEX(TMP1 PA_FP_SPREAD_CALC_TMP1_N1) */  pa_fp_spread_calc_tmp1 tmp1
7272         SET tmp1.cost_rate_override = decode(i.budget_version_type,'REVENUE',tmp1.cost_rate_override
7273                         ,decode(nvl(i.cost_rate_changed_flag,'N')
7274                           ,'Y',decode(i.mfc_cost_change_flag,'Y'
7275                            ,decode(nvl(i.cost_rate_override,0),0,NULL,i.cost_rate_override),i.cost_rate_override)
7276                           ,'N',decode(i.mfc_cost_change_flag,'Y'
7277                                ,decode(nvl(i.cost_rate_override,0),0,NULL,i.cost_rate_override),tmp1.cost_rate_override)))
7278            ,tmp1.burden_cost_rate_override = decode(i.budget_version_type,'REVENUE',tmp1.burden_cost_rate_override
7279                         ,decode(nvl(i.burden_rate_changed_flag,'N')
7280                          ,'Y',decode(i.mfc_cost_change_flag,'Y'
7281                                                    ,decode(nvl(i.burden_cost_rate_override,0),0,NULL,i.burden_cost_rate_override),i.burden_cost_rate_override)
7282                          ,'N',decode(i.mfc_cost_change_flag,'Y'
7283                                                        ,decode(nvl(i.burden_cost_rate_override,0),0,NULL,i.burden_cost_rate_override),tmp1.burden_cost_rate_override)))
7284            ,tmp1.bill_rate_override = decode(i.budget_version_type,'COST',tmp1.bill_rate_override
7285                         ,decode(nvl(i.bill_rate_changed_flag,'N')
7286                                                   ,'Y',decode(i.mfc_cost_change_flag,'Y'
7287                                                    ,decode(nvl(i.bill_rate_override,0),0,NULL,i.bill_rate_override),i.bill_rate_override)
7288                                                   ,'N',decode(i.mfc_cost_change_flag,'Y'
7289                                                        ,decode(nvl(i.bill_rate_override,0),0,NULL,i.bill_rate_override),tmp1.bill_rate_override)))
7290         WHERE tmp1.budget_version_id = p_budget_verson_id
7291         AND  tmp1.resource_assignment_id = i.resource_assignment_id
7292         AND  tmp1.txn_currency_code = i.txn_currency_code ;
7293 
7294         l_rowcount := sql%rowcount;
7295 	IF P_PA_DEBUG_MODE = 'Y' Then
7296         print_msg('Number of cached rows updated['||l_rowcount||']');
7297 	End If;
7298 
7299     END LOOP;
7300 
7301     /* reset the error stack */
7302     If p_pa_debug_mode = 'Y' Then
7303         pa_debug.reset_err_stack;
7304     End If;
7305 
7306 EXCEPTION
7307     WHEN OTHERS THEN
7308                 x_return_status := 'U';
7309                 x_msg_data := sqlcode||sqlerrm;
7310         print_msg('Failed in cache_rates API'||x_msg_data);
7311          fnd_msg_pub.add_exc_msg
7312                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
7313                  ,p_procedure_name => 'cache_rates');
7314         If p_pa_debug_mode = 'Y' Then
7315             pa_debug.reset_err_stack;
7316         End If;
7317                 RAISE;
7318 
7319 END cache_rates;
7320 
7321 /* This API copies the override rates, currency conversion attributes, DFF attributes from cache to rollup tmp lines
7322  * so the after spread, the old values are retained
7323  */
7324 PROCEDURE copy_BlAttributes(
7325                 p_budget_verson_id               IN  Number
7326                 ,p_source_context                IN  Varchar2
7327                 ,p_calling_module                IN  Varchar2
7328                 ,p_apply_progress_flag           IN Varchar2
7329                 ,x_return_status                 OUT NOCOPY varchar2
7330                 ,x_msg_data                      OUT NOCOPY varchar2
7331                  ) IS
7332 
7333     CURSOR fptmpDetails IS
7334                 /* Bug Fix 4332086
7335                 Whenever currency is overridden along with a change in quantity in the workplan flow
7336                 in Update Task Details page, the following piece of code gets executed.
7337 
7338                 This code caches several attributes from pa_budget_lines table and will use them in the
7339                 later part of the flow, thus causing the above bug. When ever currency code is overwritten
7340                 we need to use the new currency's conversion attributes, but where as this code will use
7341                 old currency's conversion attributes.
7342 
7343                 As a part of the fix the following cursor is rewritten to cache old attrs only if the
7344                 currency code is not overwritten
7345 
7346     SELECT tmp.rowid
7347               ,tmp.resource_assignment_id
7348               ,tmp.txn_currency_code
7349               ,tmp.start_date
7350               ,tmp.end_date
7351               ,tmp.period_name
7352               ,decode(cache.Budget_version_type ,'ALL'
7353             , decode(cache.txn_curr_code_override,NULL
7354                 ,decode(NVL(cache.mfc_cost_change_flag,'N'),'Y'
7355                 ,cache.cost_rate_override,NVL(cache.cost_rate_override,tmp.rw_cost_rate_override))
7356                     ,cache.cost_rate_override)
7357                         ,'COST',decode(cache.txn_curr_code_override,NULL
7358                             ,decode(NVL(cache.mfc_cost_change_flag,'N'),'Y'
7359                                  ,cache.cost_rate_override,NVL(cache.cost_rate_override,tmp.rw_cost_rate_override))
7360                                       ,cache.cost_rate_override)
7361                  ,tmp.rw_cost_rate_override) cost_rate_override
7362               ,decode(cache.Budget_version_type ,'ALL', decode(cache.txn_curr_code_override,NULL
7363                        ,decode(NVL(cache.mfc_cost_change_flag,'N'),'Y'
7364                ,cache.burden_cost_rate_override,NVL(cache.burden_cost_rate_override,tmp.burden_cost_rate_override))
7365                     ,cache.burden_cost_rate_override)
7366                        ,'COST',decode(cache.txn_curr_code_override,NULL
7367                            ,decode(NVL(cache.mfc_cost_change_flag,'N'),'Y'
7368                                ,cache.burden_cost_rate_override,NVL(cache.burden_cost_rate_override,tmp.burden_cost_rate_override))
7369                                   ,cache.burden_cost_rate_override)
7370             ,tmp.burden_cost_rate_override) burden_rate_override
7371               ,decode(cache.budget_version_type ,'ALL',decode(cache.txn_curr_code_override,NULL
7372                         ,decode(NVL(cache.mfc_cost_change_flag,'N'),'Y'
7373                 ,cache.bill_rate_override,NVL(cache.bill_rate_override,tmp.bill_rate_override))
7374                     ,cache.bill_rate_override)
7375                         ,'REVENUE',decode(cache.txn_curr_code_override,NULL
7376                            ,decode(NVL(cache.mfc_cost_change_flag,'N'),'Y'
7377                               ,cache.bill_rate_override,NVL(cache.bill_rate_override,tmp.bill_rate_override))
7378                                   ,cache.bill_rate_override)
7379                              ,tmp.bill_rate_override) bill_rate_override
7380               ,decode(cache.txn_currency_code,tmp.txn_currency_code,cache.PROJECT_COST_RATE_TYPE
7381                 ,tmp.PROJECT_COST_RATE_TYPE) PROJECT_COST_RATE_TYPE
7382               ,decode(cache.txn_currency_code,tmp.txn_currency_code
7383                 ,cache.PROJECT_COST_EXCHANGE_RATE,tmp.PROJECT_COST_EXCHANGE_RATE) PROJECT_COST_EXCHANGE_RATE
7384               ,decode(cache.txn_currency_code,tmp.txn_currency_code
7385                 ,cache.PROJECT_COST_RATE_DATE_TYPE,tmp.PROJECT_COST_RATE_DATE_TYPE) PROJECT_COST_RATE_DATE_TYPE
7386               ,decode(cache.txn_currency_code,tmp.txn_currency_code
7387                 ,cache.PROJECT_COST_RATE_DATE,tmp.PROJECT_COST_RATE_DATE) PROJECT_COST_RATE_DATE
7388               ,decode(cache.txn_currency_code,tmp.txn_currency_code
7389                 ,cache.PROJECT_REV_RATE_TYPE,tmp.PROJECT_REV_RATE_TYPE) PROJECT_REV_RATE_TYPE
7390               ,decode(cache.txn_currency_code,tmp.txn_currency_code
7391                 ,cache.PROJECT_REV_EXCHANGE_RATE,tmp.PROJECT_REV_EXCHANGE_RATE) PROJECT_REV_EXCHANGE_RATE
7392               ,decode(cache.txn_currency_code,tmp.txn_currency_code
7393                 ,cache.PROJECT_REV_RATE_DATE_TYPE,tmp.PROJECT_REV_RATE_DATE_TYPE) PROJECT_REV_RATE_DATE_TYPE
7394               ,decode(cache.txn_currency_code,tmp.txn_currency_code
7395                 ,cache.PROJECT_REV_RATE_DATE,tmp.PROJECT_REV_RATE_DATE) PROJECT_REV_RATE_DATE
7396               ,decode(cache.txn_currency_code,tmp.txn_currency_code
7397                 ,cache.PROJFUNC_COST_RATE_TYPE,tmp.PROJFUNC_COST_RATE_TYPE) PROJFUNC_COST_RATE_TYPE
7398               ,decode(cache.txn_currency_code,tmp.txn_currency_code
7399                 ,cache.PROJFUNC_COST_EXCHANGE_RATE,tmp.PROJFUNC_COST_EXCHANGE_RATE) PROJFUNC_COST_EXCHANGE_RATE
7400               ,decode(cache.txn_currency_code,tmp.txn_currency_code
7401                 ,cache.PROJFUNC_COST_RATE_DATE_TYPE,tmp.PROJFUNC_COST_RATE_DATE_TYPE) PROJFUNC_COST_RATE_DATE_TYPE
7402               ,decode(cache.txn_currency_code,tmp.txn_currency_code
7403                 ,cache.PROJFUNC_COST_RATE_DATE,tmp.PROJFUNC_COST_RATE_DATE) PROJFUNC_COST_RATE_DATE
7404               ,decode(cache.txn_currency_code,tmp.txn_currency_code
7405                 ,cache.PROJFUNC_REV_RATE_TYPE,tmp.PROJFUNC_REV_RATE_TYPE) PROJFUNC_REV_RATE_TYPE
7406               ,decode(cache.txn_currency_code,tmp.txn_currency_code
7407                 ,cache.PROJFUNC_REV_EXCHANGE_RATE,tmp.PROJFUNC_REV_EXCHANGE_RATE) PROJFUNC_REV_EXCHANGE_RATE
7408               ,decode(cache.txn_currency_code,tmp.txn_currency_code
7409                 ,cache.PROJFUNC_REV_RATE_DATE_TYPE,tmp.PROJFUNC_REV_RATE_DATE_TYPE) PROJFUNC_REV_RATE_DATE_TYPE
7410               ,decode(cache.txn_currency_code,tmp.txn_currency_code
7411                 ,cache.PROJFUNC_REV_RATE_DATE,tmp.PROJFUNC_REV_RATE_DATE) PROJFUNC_REV_RATE_DATE
7412               */
7413                 SELECT tmp.rowid
7414               ,tmp.resource_assignment_id
7415               ,tmp.txn_currency_code
7416               ,tmp.start_date
7417               ,tmp.end_date
7418               ,tmp.period_name
7419               ,DECODE(cache.txn_curr_code_override,NULL,
7420                decode(cache.Budget_version_type ,'ALL'
7421                 ,decode(cache.txn_curr_code_override,NULL
7422                 ,decode(NVL(cache.mfc_cost_change_flag,'N'),'Y'
7423                 ,cache.cost_rate_override,NVL(cache.cost_rate_override,tmp.rw_cost_rate_override))
7424                     ,cache.cost_rate_override)
7425                         ,'COST',decode(cache.txn_curr_code_override,NULL
7426                             ,decode(NVL(cache.mfc_cost_change_flag,'N'),'Y'
7427                                  ,cache.cost_rate_override,NVL(cache.cost_rate_override,tmp.rw_cost_rate_override))
7428                                       ,cache.cost_rate_override)
7429                  ,tmp.rw_cost_rate_override),NULL) cost_rate_override
7430              ,DECODE(cache.txn_curr_code_override,NULL,
7431                decode(cache.Budget_version_type ,'ALL', decode(cache.txn_curr_code_override,NULL
7432                        ,decode(NVL(cache.mfc_cost_change_flag,'N'),'Y'
7433                ,cache.burden_cost_rate_override,NVL(cache.burden_cost_rate_override,tmp.burden_cost_rate_override))
7434                     ,cache.burden_cost_rate_override)
7435                        ,'COST',decode(cache.txn_curr_code_override,NULL
7436                            ,decode(NVL(cache.mfc_cost_change_flag,'N'),'Y'
7437                                ,cache.burden_cost_rate_override,NVL(cache.burden_cost_rate_override,tmp.burden_cost_rate_override))
7438                                   ,cache.burden_cost_rate_override)
7439             ,tmp.burden_cost_rate_override),NULL) burden_rate_override
7440             ,DECODE(cache.txn_curr_code_override,NULL,
7441              decode(cache.budget_version_type ,'ALL',decode(cache.txn_curr_code_override,NULL
7442                         ,decode(NVL(cache.mfc_cost_change_flag,'N'),'Y'
7443                 ,cache.bill_rate_override,NVL(cache.bill_rate_override,tmp.bill_rate_override))
7444                     ,cache.bill_rate_override)
7445                         ,'REVENUE',decode(cache.txn_curr_code_override,NULL
7446                            ,decode(NVL(cache.mfc_cost_change_flag,'N'),'Y'
7447                               ,cache.bill_rate_override,NVL(cache.bill_rate_override,tmp.bill_rate_override))
7448                                   ,cache.bill_rate_override)
7449                              ,tmp.bill_rate_override),NULL) bill_rate_override
7450                --Bug 4224464. Changed the decode below to handle the G_MISS_XXX values for curreny conversion attributes.
7451             ,DECODE(cache.txn_curr_code_override,
7452                                          NULL,decode(cache.txn_currency_code,
7453                                                         tmp.txn_currency_code,decode(cache.PROJECT_COST_RATE_TYPE,
7454                                                                                         NULL,tmp.PROJECT_COST_RATE_TYPE,
7455                                                                                         FND_API.G_MISS_CHAR, NULL,
7456                                                                                         cache.PROJECT_COST_RATE_TYPE),
7457                                                         tmp.PROJECT_COST_RATE_TYPE),
7458                                          NULL) PROJECT_COST_RATE_TYPE
7459             ,DECODE(cache.txn_curr_code_override,
7460                                          NULL,decode(cache.txn_currency_code,
7461                                                         tmp.txn_currency_code,decode(cache.PROJECT_COST_EXCHANGE_RATE,
7462                                                                                         NULL,tmp.PROJECT_COST_EXCHANGE_RATE,
7463                                                                                         FND_API.G_MISS_NUM, NULL,
7464                                                                                         cache.PROJECT_COST_EXCHANGE_RATE),
7465                                                         tmp.PROJECT_COST_EXCHANGE_RATE),
7466                                          NULL) PROJECT_COST_EXCHANGE_RATE
7467             ,DECODE(cache.txn_curr_code_override,
7468                                          NULL,decode(cache.txn_currency_code,
7469                                                         tmp.txn_currency_code,decode(cache.PROJECT_COST_RATE_DATE_TYPE,
7470                                                                                         NULL,tmp.PROJECT_COST_RATE_DATE_TYPE,
7471                                                                                         FND_API.G_MISS_CHAR, NULL,
7472                                                                                         cache.PROJECT_COST_RATE_DATE_TYPE),
7473                                                         tmp.PROJECT_COST_RATE_DATE_TYPE),
7474                                          NULL) PROJECT_COST_RATE_DATE_TYPE
7475             ,DECODE(cache.txn_curr_code_override,
7476                                          NULL,decode(cache.txn_currency_code,
7477                                                         tmp.txn_currency_code,decode(cache.PROJECT_COST_RATE_DATE,
7478                                                                                         NULL,tmp.PROJECT_COST_RATE_DATE,
7479                                                                                         FND_API.G_MISS_DATE, NULL,
7480                                                                                         cache.PROJECT_COST_RATE_DATE),
7481                                                         tmp.PROJECT_COST_RATE_DATE),
7482                                          NULL) PROJECT_COST_RATE_DATE
7483             ,DECODE(cache.txn_curr_code_override,
7484                                          NULL,decode(cache.txn_currency_code,
7485                                                         tmp.txn_currency_code,decode(cache.PROJECT_REV_RATE_TYPE,
7486                                                                                         NULL,tmp.PROJECT_REV_RATE_TYPE,
7487                                                                                         FND_API.G_MISS_CHAR, NULL,
7488                                                                                         cache.PROJECT_REV_RATE_TYPE),
7489                                                         tmp.PROJECT_REV_RATE_TYPE),
7490                                          NULL) PROJECT_REV_RATE_TYPE
7491             ,DECODE(cache.txn_curr_code_override,
7492                                          NULL,decode(cache.txn_currency_code,
7493                                                         tmp.txn_currency_code,decode(cache.PROJECT_REV_EXCHANGE_RATE,
7494                                                                                         NULL,tmp.PROJECT_REV_EXCHANGE_RATE,
7495                                                                                         FND_API.G_MISS_NUM, NULL,
7496                                                                                         cache.PROJECT_REV_EXCHANGE_RATE),
7497                                                         tmp.PROJECT_REV_EXCHANGE_RATE),
7498                                          NULL) PROJECT_REV_EXCHANGE_RATE
7499             ,DECODE(cache.txn_curr_code_override,
7500                                          NULL,decode(cache.txn_currency_code,
7501                                                         tmp.txn_currency_code,decode(cache.PROJECT_REV_RATE_DATE_TYPE,
7502                                                                                         NULL,tmp.PROJECT_REV_RATE_DATE_TYPE,
7503                                                                                         FND_API.G_MISS_CHAR, NULL,
7504                                                                                         cache.PROJECT_REV_RATE_DATE_TYPE),
7505                                                         tmp.PROJECT_REV_RATE_DATE_TYPE),
7506                                          NULL) PROJECT_REV_RATE_DATE_TYPE
7507             ,DECODE(cache.txn_curr_code_override,
7508                                          NULL,decode(cache.txn_currency_code,
7509                                                         tmp.txn_currency_code,decode(cache.PROJECT_REV_RATE_DATE,
7510                                                                                         NULL,tmp.PROJECT_REV_RATE_DATE,
7511                                                                                         FND_API.G_MISS_DATE, NULL,
7512                                                                                         cache.PROJECT_REV_RATE_DATE),
7513                                                         tmp.PROJECT_REV_RATE_DATE),
7514                                          NULL) PROJECT_REV_RATE_DATE
7515             ,DECODE(cache.txn_curr_code_override,
7516                                          NULL,decode(cache.txn_currency_code,
7517                                                         tmp.txn_currency_code,decode(cache.PROJFUNC_COST_RATE_TYPE,
7518                                                                                         NULL,tmp.PROJFUNC_COST_RATE_TYPE,
7519                                                                                         FND_API.G_MISS_CHAR, NULL,
7520                                                                                         cache.PROJFUNC_COST_RATE_TYPE),
7521                                                         tmp.PROJFUNC_COST_RATE_TYPE),
7522                                          NULL) PROJFUNC_COST_RATE_TYPE
7523             ,DECODE(cache.txn_curr_code_override,
7524                                          NULL,decode(cache.txn_currency_code,
7525                                                         tmp.txn_currency_code,decode(cache.PROJFUNC_COST_EXCHANGE_RATE,
7526                                                                                         NULL,tmp.PROJFUNC_COST_EXCHANGE_RATE,
7527                                                                                         FND_API.G_MISS_NUM, NULL,
7528                                                                                         cache.PROJFUNC_COST_EXCHANGE_RATE),
7529                                                         tmp.PROJFUNC_COST_EXCHANGE_RATE),
7530                                          NULL) PROJFUNC_COST_EXCHANGE_RATE
7531             ,DECODE(cache.txn_curr_code_override,
7532                                          NULL,decode(cache.txn_currency_code,
7533                                                         tmp.txn_currency_code,decode(cache.PROJFUNC_COST_RATE_DATE_TYPE,
7534                                                                                         NULL,tmp.PROJFUNC_COST_RATE_DATE_TYPE,
7535                                                                                         FND_API.G_MISS_CHAR, NULL,
7536                                                                                         cache.PROJFUNC_COST_RATE_DATE_TYPE),
7537                                                         tmp.PROJFUNC_COST_RATE_DATE_TYPE),
7538                                          NULL) PROJFUNC_COST_RATE_DATE_TYPE
7539             ,DECODE(cache.txn_curr_code_override,
7540                                          NULL,decode(cache.txn_currency_code,
7541                                                         tmp.txn_currency_code,decode(cache.PROJFUNC_COST_RATE_DATE,
7542                                                                                         NULL,tmp.PROJFUNC_COST_RATE_DATE,
7543                                                                                         FND_API.G_MISS_DATE, NULL,
7544                                                                                         cache.PROJFUNC_COST_RATE_DATE),
7545                                                         tmp.PROJFUNC_COST_RATE_DATE),
7546                                          NULL) PROJFUNC_COST_RATE_DATE
7547             ,DECODE(cache.txn_curr_code_override,
7548                                          NULL,decode(cache.txn_currency_code,
7549                                                         tmp.txn_currency_code,decode(cache.PROJFUNC_REV_RATE_TYPE,
7550                                                                                         NULL,tmp.PROJFUNC_REV_RATE_TYPE,
7551                                                                                         FND_API.G_MISS_CHAR, NULL,
7552                                                                                         cache.PROJFUNC_REV_RATE_TYPE),
7553                                                         tmp.PROJFUNC_REV_RATE_TYPE),
7554                                          NULL) PROJFUNC_REV_RATE_TYPE
7555             ,DECODE(cache.txn_curr_code_override,
7556                                          NULL,decode(cache.txn_currency_code,
7557                                                         tmp.txn_currency_code,decode(cache.PROJFUNC_REV_EXCHANGE_RATE,
7558                                                                                         NULL,tmp.PROJFUNC_REV_EXCHANGE_RATE,
7559                                                                                         FND_API.G_MISS_NUM, NULL,
7560                                                                                         cache.PROJFUNC_REV_EXCHANGE_RATE),
7561                                                         tmp.PROJFUNC_REV_EXCHANGE_RATE),
7562                                          NULL) PROJFUNC_REV_EXCHANGE_RATE
7563             ,DECODE(cache.txn_curr_code_override,
7564                                          NULL,decode(cache.txn_currency_code,
7565                                                         tmp.txn_currency_code,decode(cache.PROJFUNC_REV_RATE_DATE_TYPE,
7566                                                                                         NULL,tmp.PROJFUNC_REV_RATE_DATE_TYPE,
7567                                                                                         FND_API.G_MISS_CHAR, NULL,
7568                                                                                         cache.PROJFUNC_REV_RATE_DATE_TYPE),
7569                                                         tmp.PROJFUNC_REV_RATE_DATE_TYPE),
7570                                          NULL) PROJFUNC_REV_RATE_DATE_TYPE
7571             ,DECODE(cache.txn_curr_code_override,
7572                                          NULL,decode(cache.txn_currency_code,
7573                                                         tmp.txn_currency_code,decode(cache.PROJFUNC_REV_RATE_DATE,
7574                                                                                         NULL,tmp.PROJFUNC_REV_RATE_DATE,
7575                                                                                         FND_API.G_MISS_DATE, NULL,
7576                                                                                         cache.PROJFUNC_REV_RATE_DATE),
7577                                                         tmp.PROJFUNC_REV_RATE_DATE),
7578                                          NULL) PROJFUNC_REV_RATE_DATE
7579         FROM  pa_fp_rollup_tmp tmp
7580               ,pa_fp_spread_calc_tmp1 cache
7581         WHERE  tmp.budget_version_id = p_budget_verson_id
7582         AND    tmp.budget_version_id = cache.budget_version_id
7583         AND    tmp.resource_assignment_id = cache.resource_assignment_id
7584         AND    tmp.txn_currency_code = cache.txn_currency_code
7585         AND    tmp.start_date = cache.start_date
7586         ;
7587 
7588     /* This cursor picks budget line attributes which needs to be retained after spread
7589          * though the currency code changes */
7590         CURSOR blAttribDetails IS
7591         SELECT tmp.rowid
7592               /*Bug 4224464. Changed the decode below for dff's, change reason code,PM_PRODUCT_CODE,PM_BUDGET_LINE_REFERENCE
7593                 and description columns to handle the the G_MISS_XXX values for these columns*/
7594          , decode(cache.CHANGE_REASON_CODE   ,null, bl.change_reason_code, FND_API.G_MISS_CHAR, null, cache.CHANGE_REASON_CODE)
7595          , decode(cache.DESCRIPTION          ,null, bl.DESCRIPTION, FND_API.G_MISS_CHAR, null, cache.DESCRIPTION)
7596          , decode(cache.ATTRIBUTE_CATEGORY   ,null, bl.ATTRIBUTE_CATEGORY, FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE_CATEGORY)
7597          , decode(cache.ATTRIBUTE1           ,null, bl.ATTRIBUTE1,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE1)
7598          , decode(cache.ATTRIBUTE2           ,null, bl.ATTRIBUTE2,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE2)
7599          , decode(cache.ATTRIBUTE3           ,null, bl.ATTRIBUTE3,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE3)
7600          , decode(cache.ATTRIBUTE4           ,null, bl.ATTRIBUTE4,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE4)
7601          , decode(cache.ATTRIBUTE5           ,null, bl.ATTRIBUTE5,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE5)
7602          , decode(cache.ATTRIBUTE6           ,null, bl.ATTRIBUTE6,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE6)
7603          , decode(cache.ATTRIBUTE7           ,null, bl.ATTRIBUTE7,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE7)
7604          , decode(cache.ATTRIBUTE8           ,null, bl.ATTRIBUTE8,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE8)
7605          , decode(cache.ATTRIBUTE9           ,null, bl.ATTRIBUTE9,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE9)
7606          , decode(cache.ATTRIBUTE10          ,null, bl.ATTRIBUTE10, FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE10)
7607          , decode(cache.ATTRIBUTE11          ,null, bl.ATTRIBUTE11, FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE11)
7608          , decode(cache.ATTRIBUTE12          ,null, bl.ATTRIBUTE12, FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE12)
7609          , decode(cache.ATTRIBUTE13          ,null, bl.ATTRIBUTE13, FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE13)
7610          , decode(cache.ATTRIBUTE14          ,null, bl.ATTRIBUTE14, FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE14)
7611          , decode(cache.ATTRIBUTE15          ,null, bl.ATTRIBUTE15, FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE15)
7612          , cache.RAW_COST_SOURCE
7613          , cache.BURDENED_COST_SOURCE
7614          , cache.QUANTITY_SOURCE
7615          , cache.REVENUE_SOURCE
7616          , decode(cache.PM_PRODUCT_CODE  ,null,bl.PM_PRODUCT_CODE, FND_API.G_MISS_CHAR, null, cache.PM_PRODUCT_CODE)
7617          , decode(cache.PM_BUDGET_LINE_REFERENCE ,null,bl.PM_BUDGET_LINE_REFERENCE, FND_API.G_MISS_CHAR, null, cache.PM_BUDGET_LINE_REFERENCE)
7618          , cache.CODE_COMBINATION_ID
7619          , cache.CCID_GEN_STATUS_CODE
7620          , cache.CCID_GEN_REJ_MESSAGE
7621          , cache.BORROWED_REVENUE
7622          , cache.TP_REVENUE_IN
7623          , cache.TP_REVENUE_OUT
7624          , cache.REVENUE_ADJ
7625          , cache.LENT_RESOURCE_COST
7626          , cache.TP_COST_IN
7627          , cache.TP_COST_OUT
7628          , cache.COST_ADJ
7629          , cache.UNASSIGNED_TIME_COST
7630          , cache.UTILIZATION_PERCENT
7631          , cache.UTILIZATION_HOURS
7632          , cache.UTILIZATION_ADJ
7633          , cache.CAPACITY
7634          , cache.HEAD_COUNT
7635          , cache.HEAD_COUNT_ADJ
7636          , cache.BUCKETING_PERIOD_CODE
7637          , cache.TXN_DISCOUNT_PERCENTAGE
7638          , cache.TRANSFER_PRICE_RATE
7639          , cache.BL_CREATED_BY
7640          , cache.BL_CREATION_DATE
7641         FROM  pa_fp_rollup_tmp tmp
7642               ,pa_fp_spread_calc_tmp1 cache
7643               ,pa_budget_lines bl
7644         WHERE  tmp.budget_version_id = p_budget_verson_id
7645     AND    tmp.budget_version_id = cache.budget_version_id
7646         AND    tmp.resource_assignment_id = cache.resource_assignment_id
7647     AND    tmp.txn_currency_code = cache.txn_currency_code
7648     AND    tmp.start_date = cache.start_date
7649     and    cache.budget_version_id = bl.budget_version_id(+)    --Bug 4224464. Added the join with pa_budget_lines
7650         AND    cache.resource_assignment_id = bl.resource_assignment_id(+)
7651     AND    cache.txn_currency_code = bl.txn_currency_code(+)
7652     AND    cache.start_date = bl.start_date(+);
7653 
7654 
7655     l_rowid_tab                     pa_plsql_datatypes.RowidTabTyp;
7656         l_resource_assignment_id_tab    pa_plsql_datatypes.IdTabTyp;
7657         l_txn_currency_code_tab         pa_plsql_datatypes.Char50TabTyp;
7658         l_start_date_tab                pa_plsql_datatypes.DateTabTyp;
7659         l_end_date_tab                  pa_plsql_datatypes.DateTabTyp;
7660         l_period_name_tab               pa_plsql_datatypes.Char50TabTyp;
7661         l_cost_rate_override_tab        pa_plsql_datatypes.NumTabTyp;
7662         l_burden_rate_override_tab      pa_plsql_datatypes.NumTabTyp;
7663         l_bill_rate_override_tab        pa_plsql_datatypes.NumTabTyp;
7664         l_PROJECT_COST_RATE_TYPE_tab    pa_plsql_datatypes.Char50TabTyp;
7665         l_PROJECT_COST_EXG_RATE_tab     pa_plsql_datatypes.NumTabTyp;
7666         l_PROJECT_COST_DATE_TYPE_tab    pa_plsql_datatypes.Char50TabTyp;
7667         l_PROJECT_COST_RATE_DATE_tab    pa_plsql_datatypes.DateTabTyp;
7668         l_PROJECT_REV_RATE_TYPE_tab     pa_plsql_datatypes.Char50TabTyp;
7669         l_PROJECT_REV_EXG_RATE_tab      pa_plsql_datatypes.NumTabTyp;
7670         l_PROJECT_REV_DATE_TYPE_tab     pa_plsql_datatypes.Char50TabTyp;
7671         l_PROJECT_REV_RATE_DATE_tab     pa_plsql_datatypes.DateTabTyp;
7672         l_PROJFUNC_COST_RATE_TYPE_tab   pa_plsql_datatypes.Char50TabTyp;
7673         l_PROJFUNC_COST_EXG_RATE_tab    pa_plsql_datatypes.NumTabTyp;
7674         l_PROJFUNC_COST_DATE_TYPE_tab   pa_plsql_datatypes.Char50TabTyp;
7675         l_PROJFUNC_COST_RATE_DATE_tab   pa_plsql_datatypes.DateTabTyp;
7676         l_PROJFUNC_REV_RATE_TYPE_tab    pa_plsql_datatypes.Char50TabTyp;
7677         l_PROJFUNC_REV_EXG_RATE_tab     pa_plsql_datatypes.NumTabTyp;
7678         l_PROJFUNC_REV_DATE_TYPE_tab    pa_plsql_datatypes.Char50TabTyp;
7679         l_PROJFUNC_REV_RATE_DATE_tab    pa_plsql_datatypes.DateTabTyp;
7680     l_CHANGE_REASON_CODE_tab        pa_plsql_datatypes.Char30TabTyp;
7681     l_DESCRIPTION_tab               pa_plsql_datatypes.Char250TabTyp;
7682     l_ATTRIBUTE_CATEGORY_tab        pa_plsql_datatypes.Char30TabTyp;
7683     l_ATTRIBUTE1_tab                pa_plsql_datatypes.Char150TabTyp;
7684     l_ATTRIBUTE2_tab                pa_plsql_datatypes.Char150TabTyp;
7685     l_ATTRIBUTE3_tab                pa_plsql_datatypes.Char150TabTyp;
7686     l_ATTRIBUTE4_tab                pa_plsql_datatypes.Char150TabTyp;
7687     l_ATTRIBUTE5_tab                pa_plsql_datatypes.Char150TabTyp;
7688     l_ATTRIBUTE6_tab                pa_plsql_datatypes.Char150TabTyp;
7689     l_ATTRIBUTE7_tab                pa_plsql_datatypes.Char150TabTyp;
7690     l_ATTRIBUTE8_tab                pa_plsql_datatypes.Char150TabTyp;
7691     l_ATTRIBUTE9_tab                pa_plsql_datatypes.Char150TabTyp;
7692     l_ATTRIBUTE10_tab               pa_plsql_datatypes.Char150TabTyp;
7693     l_ATTRIBUTE11_tab               pa_plsql_datatypes.Char150TabTyp;
7694     l_ATTRIBUTE12_tab               pa_plsql_datatypes.Char150TabTyp;
7695     l_ATTRIBUTE13_tab               pa_plsql_datatypes.Char150TabTyp;
7696     l_ATTRIBUTE14_tab               pa_plsql_datatypes.Char150TabTyp;
7697     l_ATTRIBUTE15_tab               pa_plsql_datatypes.Char150TabTyp;
7698     l_RAW_COST_SOURCE_tab           pa_plsql_datatypes.Char5TabTyp;
7699     l_BURDENED_COST_SOURCE_tab      pa_plsql_datatypes.Char5TabTyp;
7700     l_QUANTITY_SOURCE_tab           pa_plsql_datatypes.Char5TabTyp;
7701     l_REVENUE_SOURCE_tab            pa_plsql_datatypes.Char5TabTyp;
7702     l_PM_PRODUCT_CODE_tab           pa_plsql_datatypes.Char30TabTyp;
7703     l_PM_BUDGET_LINE_REFERENCE_tab  pa_plsql_datatypes.Char30TabTyp;
7704     l_CODE_COMBINATION_ID_tab       pa_plsql_datatypes.NumTabTyp;
7705     l_CCID_GEN_STATUS_CODE_tab      pa_plsql_datatypes.Char1TabTyp;
7706     l_CCID_GEN_REJ_MESSAGE_tab      pa_plsql_datatypes.Char2000TabTyp;
7707     l_BORROWED_REVENUE_tab          pa_plsql_datatypes.NumTabTyp;
7708     l_TP_REVENUE_IN_tab             pa_plsql_datatypes.NumTabTyp;
7709     l_TP_REVENUE_OUT_tab            pa_plsql_datatypes.NumTabTyp;
7710     l_REVENUE_ADJ_tab               pa_plsql_datatypes.NumTabTyp;
7711     l_LENT_RESOURCE_COST_tab        pa_plsql_datatypes.NumTabTyp;
7712     l_TP_COST_IN_tab                pa_plsql_datatypes.NumTabTyp;
7713     l_TP_COST_OUT_tab               pa_plsql_datatypes.NumTabTyp;
7714     l_COST_ADJ_tab                  pa_plsql_datatypes.NumTabTyp;
7715     l_UNASSIGNED_TIME_COST_tab      pa_plsql_datatypes.NumTabTyp;
7716     l_UTILIZATION_PERCENT_tab       pa_plsql_datatypes.NumTabTyp;
7717     l_UTILIZATION_HOURS_tab         pa_plsql_datatypes.NumTabTyp;
7718     l_UTILIZATION_ADJ_tab           pa_plsql_datatypes.NumTabTyp;
7719     l_CAPACITY_tab                  pa_plsql_datatypes.NumTabTyp;
7720     l_HEAD_COUNT_tab                pa_plsql_datatypes.NumTabTyp;
7721     l_HEAD_COUNT_ADJ_tab            pa_plsql_datatypes.NumTabTyp;
7722     l_BUCKETING_PERIOD_CODE_tab     pa_plsql_datatypes.Char30TabTyp;
7723     l_TXN_DISCOUNT_PERCENTAGE_tab   pa_plsql_datatypes.NumTabTyp;
7724     l_TRANSFER_PRICE_RATE_tab       pa_plsql_datatypes.NumTabTyp;
7725     l_BL_CREATED_BY_tab     pa_plsql_datatypes.NumTabTyp;
7726     l_BL_CREATION_DATE_tab          pa_plsql_datatypes.DateTabTyp;
7727 
7728     PROCEDURE INIT_PLSQL_TABS IS
7729 
7730     BEGIN
7731                 l_rowid_tab.delete;
7732                 l_resource_assignment_id_tab.delete;
7733                 l_txn_currency_code_tab.delete;
7734                 l_start_date_tab.delete;
7735                 l_end_date_tab.delete;
7736                 l_period_name_tab.delete;
7737                 l_cost_rate_override_tab.delete;
7738                 l_burden_rate_override_tab.delete;
7739                 l_bill_rate_override_tab.delete;
7740                 l_PROJECT_COST_RATE_TYPE_tab.delete;
7741                 l_PROJECT_COST_EXG_RATE_tab.delete;
7742                 l_PROJECT_COST_DATE_TYPE_tab.delete;
7743                 l_PROJECT_COST_RATE_DATE_tab.delete;
7744                 l_PROJECT_REV_RATE_TYPE_tab.delete;
7745                 l_PROJECT_REV_EXG_RATE_tab.delete;
7746                 l_PROJECT_REV_DATE_TYPE_tab.delete;
7747                 l_PROJECT_REV_RATE_DATE_tab.delete;
7748                 l_PROJFUNC_COST_RATE_TYPE_tab.delete;
7749                 l_PROJFUNC_COST_EXG_RATE_tab.delete;
7750                 l_PROJFUNC_COST_DATE_TYPE_tab.delete;
7751                 l_PROJFUNC_COST_RATE_DATE_tab.delete;
7752                 l_PROJFUNC_REV_RATE_TYPE_tab.delete;
7753                 l_PROJFUNC_REV_EXG_RATE_tab.delete;
7754                 l_PROJFUNC_REV_DATE_TYPE_tab.delete;
7755                 l_PROJFUNC_REV_RATE_DATE_tab.delete;
7756         l_CHANGE_REASON_CODE_tab.delete;
7757         l_DESCRIPTION_tab.delete;
7758         l_ATTRIBUTE_CATEGORY_tab.delete;
7759         l_ATTRIBUTE1_tab.delete;
7760         l_ATTRIBUTE2_tab.delete;
7761         l_ATTRIBUTE3_tab.delete;
7762         l_ATTRIBUTE4_tab.delete;
7763         l_ATTRIBUTE5_tab.delete;
7764         l_ATTRIBUTE6_tab.delete;
7765         l_ATTRIBUTE7_tab.delete;
7766         l_ATTRIBUTE8_tab.delete;
7767         l_ATTRIBUTE9_tab.delete;
7768         l_ATTRIBUTE10_tab.delete;
7769         l_ATTRIBUTE11_tab.delete;
7770         l_ATTRIBUTE12_tab.delete;
7771         l_ATTRIBUTE13_tab.delete;
7772         l_ATTRIBUTE14_tab.delete;
7773         l_ATTRIBUTE15_tab.delete;
7774         l_RAW_COST_SOURCE_tab.delete;
7775         l_BURDENED_COST_SOURCE_tab.delete;
7776         l_QUANTITY_SOURCE_tab.delete;
7777         l_REVENUE_SOURCE_tab.delete;
7778         l_PM_PRODUCT_CODE_tab.delete;
7779         l_PM_BUDGET_LINE_REFERENCE_tab.delete;
7780         l_CODE_COMBINATION_ID_tab.delete;
7781         l_CCID_GEN_STATUS_CODE_tab.delete;
7782         l_CCID_GEN_REJ_MESSAGE_tab.delete;
7783         l_BORROWED_REVENUE_tab.delete;
7784         l_TP_REVENUE_IN_tab.delete;
7785         l_TP_REVENUE_OUT_tab.delete;
7786         l_REVENUE_ADJ_tab.delete;
7787         l_LENT_RESOURCE_COST_tab.delete;
7788         l_TP_COST_IN_tab.delete;
7789         l_TP_COST_OUT_tab.delete;
7790         l_COST_ADJ_tab.delete;
7791         l_UNASSIGNED_TIME_COST_tab.delete;
7792         l_UTILIZATION_PERCENT_tab.delete;
7793         l_UTILIZATION_HOURS_tab.delete;
7794         l_UTILIZATION_ADJ_tab.delete;
7795         l_CAPACITY_tab.delete;
7796         l_HEAD_COUNT_tab.delete;
7797         l_HEAD_COUNT_ADJ_tab.delete;
7798         l_BUCKETING_PERIOD_CODE_tab.delete;
7799         l_TXN_DISCOUNT_PERCENTAGE_tab.delete;
7800         l_TRANSFER_PRICE_RATE_tab.delete;
7801         l_BL_CREATED_BY_tab.delete;
7802         l_BL_CREATION_DATE_tab.delete;
7803 
7804     END INIT_PLSQL_TABS;
7805 BEGIN
7806         /* Initialize the out variables */
7807         x_return_status := 'S';
7808         x_msg_data := NULL;
7809     If p_pa_debug_mode = 'Y' Then
7810         pa_debug.init_err_stack('PA_FP_CALC_UTILS.copy_BlAttributes');
7811     End If;
7812     IF p_calling_module NOT IN ('BUDGET_GENERATION','FORECAST_GENERATION') Then  --{
7813 	IF P_PA_DEBUG_MODE = 'Y' Then
7814         print_msg('Entered copy_BlAttributes API');
7815 	End If;
7816         INIT_PLSQL_TABS;
7817                 OPEN fptmpDetails;
7818                 FETCH fptmpDetails BULK COLLECT INTO
7819                         l_rowid_tab
7820                         ,l_resource_assignment_id_tab
7821                         ,l_txn_currency_code_tab
7822                         ,l_start_date_tab
7823                         ,l_end_date_tab
7824                         ,l_period_name_tab
7825                         ,l_cost_rate_override_tab
7826                         ,l_burden_rate_override_tab
7827                         ,l_bill_rate_override_tab
7828                         ,l_PROJECT_COST_RATE_TYPE_tab
7829                         ,l_PROJECT_COST_EXG_RATE_tab
7830                         ,l_PROJECT_COST_DATE_TYPE_tab
7831                         ,l_PROJECT_COST_RATE_DATE_tab
7832                         ,l_PROJECT_REV_RATE_TYPE_tab
7833                         ,l_PROJECT_REV_EXG_RATE_tab
7834                         ,l_PROJECT_REV_DATE_TYPE_tab
7835                         ,l_PROJECT_REV_RATE_DATE_tab
7836                         ,l_PROJFUNC_COST_RATE_TYPE_tab
7837                         ,l_PROJFUNC_COST_EXG_RATE_tab
7838                         ,l_PROJFUNC_COST_DATE_TYPE_tab
7839                         ,l_PROJFUNC_COST_RATE_DATE_tab
7840                         ,l_PROJFUNC_REV_RATE_TYPE_tab
7841                         ,l_PROJFUNC_REV_EXG_RATE_tab
7842                         ,l_PROJFUNC_REV_DATE_TYPE_tab
7843                         ,l_PROJFUNC_REV_RATE_DATE_tab;
7844                 CLOSE fptmpDetails;
7845                 IF l_rowid_tab.COUNT > 0 THEN
7846                         --print_msg('Number of rows fetched['||l_rowid_tab.COUNT||']');
7847                         FORALL i IN  l_rowid_tab.FIRST .. l_rowid_tab.LAST
7848                         UPDATE pa_fp_rollup_tmp tmp
7849                         SET tmp.rw_cost_rate_override = l_cost_rate_override_tab(i)
7850                            ,tmp.burden_cost_rate_override = l_burden_rate_override_tab(i)
7851                            ,tmp.bill_rate_override = l_bill_rate_override_tab(i)
7852                            ,tmp.PROJECT_COST_RATE_TYPE = l_PROJECT_COST_RATE_TYPE_tab(i)
7853                            ,tmp.PROJECT_COST_EXCHANGE_RATE = l_PROJECT_COST_EXG_RATE_tab(i)
7854                            ,tmp.PROJECT_COST_RATE_DATE_TYPE = l_PROJECT_COST_DATE_TYPE_tab(i)
7855                            ,tmp.PROJECT_COST_RATE_DATE   = l_PROJECT_COST_RATE_DATE_tab(i)
7856                            ,tmp.PROJECT_REV_RATE_TYPE    = l_PROJECT_REV_RATE_TYPE_tab(i)
7857                            ,tmp.PROJECT_REV_EXCHANGE_RATE  = l_PROJECT_REV_EXG_RATE_tab(i)
7858                            ,tmp.PROJECT_REV_RATE_DATE_TYPE = l_PROJECT_REV_DATE_TYPE_tab(i)
7859                            ,tmp.PROJECT_REV_RATE_DATE   = l_PROJECT_REV_RATE_DATE_tab(i)
7860                            ,tmp.PROJFUNC_COST_RATE_TYPE   = l_PROJFUNC_COST_RATE_TYPE_tab(i)
7861                            ,tmp.PROJFUNC_COST_EXCHANGE_RATE  = l_PROJFUNC_COST_EXG_RATE_tab(i)
7862                            ,tmp.PROJFUNC_COST_RATE_DATE_TYPE  = l_PROJFUNC_COST_DATE_TYPE_tab(i)
7863                            ,tmp.PROJFUNC_COST_RATE_DATE     = l_PROJFUNC_COST_RATE_DATE_tab(i)
7864                            ,tmp.PROJFUNC_REV_RATE_TYPE    = l_PROJFUNC_REV_RATE_TYPE_tab(i)
7865                            ,tmp.PROJFUNC_REV_EXCHANGE_RATE  = l_PROJFUNC_REV_EXG_RATE_tab(i)
7866                            ,tmp.PROJFUNC_REV_RATE_DATE_TYPE   = l_PROJFUNC_REV_DATE_TYPE_tab(i)
7867                            ,tmp.PROJFUNC_REV_RATE_DATE = l_PROJFUNC_REV_RATE_DATE_tab(i)
7868             WHERE tmp.rowid = l_rowid_tab(i);
7869                         --print_msg('Number of rows updated['||sql%rowcount||']');
7870                 END IF;
7871 
7872         --print_msg('Fetching budget Line Attributes such as DFFs details from cache ');
7873         INIT_PLSQL_TABS;
7874                 OPEN blAttribDetails;
7875                 FETCH blAttribDetails BULK COLLECT INTO
7876                         l_rowid_tab
7877             ,l_CHANGE_REASON_CODE_tab
7878             ,l_DESCRIPTION_tab
7879             ,l_ATTRIBUTE_CATEGORY_tab
7880             ,l_ATTRIBUTE1_tab
7881             ,l_ATTRIBUTE2_tab
7882             ,l_ATTRIBUTE3_tab
7883             ,l_ATTRIBUTE4_tab
7884             ,l_ATTRIBUTE5_tab
7885             ,l_ATTRIBUTE6_tab
7886             ,l_ATTRIBUTE7_tab
7887             ,l_ATTRIBUTE8_tab
7888             ,l_ATTRIBUTE9_tab
7889             ,l_ATTRIBUTE10_tab
7890             ,l_ATTRIBUTE11_tab
7891             ,l_ATTRIBUTE12_tab
7892             ,l_ATTRIBUTE13_tab
7893             ,l_ATTRIBUTE14_tab
7894             ,l_ATTRIBUTE15_tab
7895             ,l_RAW_COST_SOURCE_tab
7896             ,l_BURDENED_COST_SOURCE_tab
7897             ,l_QUANTITY_SOURCE_tab
7898             ,l_REVENUE_SOURCE_tab
7899             ,l_PM_PRODUCT_CODE_tab
7900             ,l_PM_BUDGET_LINE_REFERENCE_tab
7901             ,l_CODE_COMBINATION_ID_tab
7902             ,l_CCID_GEN_STATUS_CODE_tab
7903             ,l_CCID_GEN_REJ_MESSAGE_tab
7904             ,l_BORROWED_REVENUE_tab
7905             ,l_TP_REVENUE_IN_tab
7906             ,l_TP_REVENUE_OUT_tab
7907             ,l_REVENUE_ADJ_tab
7908             ,l_LENT_RESOURCE_COST_tab
7909             ,l_TP_COST_IN_tab
7910             ,l_TP_COST_OUT_tab
7911             ,l_COST_ADJ_tab
7912             ,l_UNASSIGNED_TIME_COST_tab
7913             ,l_UTILIZATION_PERCENT_tab
7914             ,l_UTILIZATION_HOURS_tab
7915             ,l_UTILIZATION_ADJ_tab
7916             ,l_CAPACITY_tab
7917             ,l_HEAD_COUNT_tab
7918             ,l_HEAD_COUNT_ADJ_tab
7919             ,l_BUCKETING_PERIOD_CODE_tab
7920             ,l_TXN_DISCOUNT_PERCENTAGE_tab
7921             ,l_TRANSFER_PRICE_RATE_tab
7922             ,l_BL_CREATED_BY_tab
7923                     ,l_BL_CREATION_DATE_tab;
7924                 CLOSE blAttribDetails;
7925                 IF l_rowid_tab.COUNT > 0 THEN
7926                         --print_msg('Number of blAttrib rows fetched['||l_rowid_tab.COUNT||']');
7927                         FORALL i IN  l_rowid_tab.FIRST .. l_rowid_tab.LAST
7928                         UPDATE pa_fp_rollup_tmp tmp
7929                         SET tmp.CHANGE_REASON_CODE = l_CHANGE_REASON_CODE_tab(i)
7930                ,tmp.DESCRIPTION = l_DESCRIPTION_tab(i)
7931                ,tmp.ATTRIBUTE_CATEGORY = l_ATTRIBUTE_CATEGORY_tab(i)
7932                ,tmp.ATTRIBUTE1 = l_ATTRIBUTE1_tab(i)
7933                ,tmp.ATTRIBUTE2 = l_ATTRIBUTE2_tab(i)
7934                ,tmp.ATTRIBUTE3 = l_ATTRIBUTE3_tab(i)
7935                ,tmp.ATTRIBUTE4 = l_ATTRIBUTE4_tab(i)
7936                ,tmp.ATTRIBUTE5 = l_ATTRIBUTE5_tab(i)
7937                ,tmp.ATTRIBUTE6 = l_ATTRIBUTE6_tab(i)
7938                ,tmp.ATTRIBUTE7 = l_ATTRIBUTE7_tab(i)
7939                ,tmp.ATTRIBUTE8 = l_ATTRIBUTE8_tab(i)
7940                ,tmp.ATTRIBUTE9 = l_ATTRIBUTE9_tab(i)
7941                ,tmp.ATTRIBUTE10 = l_ATTRIBUTE10_tab(i)
7942                ,tmp.ATTRIBUTE11 = l_ATTRIBUTE11_tab(i)
7943                ,tmp.ATTRIBUTE12 = l_ATTRIBUTE12_tab(i)
7944                ,tmp.ATTRIBUTE13 = l_ATTRIBUTE13_tab(i)
7945                ,tmp.ATTRIBUTE14 = l_ATTRIBUTE14_tab(i)
7946                ,tmp.ATTRIBUTE15 = l_ATTRIBUTE15_tab(i)
7947                ,tmp.RAW_COST_SOURCE = nvl(l_RAW_COST_SOURCE_tab(i),tmp.RAW_COST_SOURCE)
7948                ,tmp.BURDENED_COST_SOURCE = nvl(l_BURDENED_COST_SOURCE_tab(i),tmp.BURDENED_COST_SOURCE)
7949                ,tmp.QUANTITY_SOURCE = nvl(l_QUANTITY_SOURCE_tab(i),tmp.QUANTITY_SOURCE)
7950                ,tmp.REVENUE_SOURCE = nvl(l_REVENUE_SOURCE_tab(i),tmp.REVENUE_SOURCE)
7951                ,tmp.PM_PRODUCT_CODE = l_PM_PRODUCT_CODE_tab(i)
7952                ,tmp.PM_BUDGET_LINE_REFERENCE = l_PM_BUDGET_LINE_REFERENCE_tab(i)
7953                ,tmp.CODE_COMBINATION_ID = nvl(l_CODE_COMBINATION_ID_tab(i),tmp.CODE_COMBINATION_ID)
7954                ,tmp.CCID_GEN_STATUS_CODE = nvl(l_CCID_GEN_STATUS_CODE_tab(i),tmp.CCID_GEN_STATUS_CODE)
7955                ,tmp.CCID_GEN_REJ_MESSAGE = nvl(l_CCID_GEN_REJ_MESSAGE_tab(i),tmp.CCID_GEN_REJ_MESSAGE)
7956                ,tmp.BORROWED_REVENUE = nvl(l_BORROWED_REVENUE_tab(i),tmp.BORROWED_REVENUE)
7957                ,tmp.TP_REVENUE_IN = nvl(l_TP_REVENUE_IN_tab(i),tmp.TP_REVENUE_IN)
7958                ,tmp.TP_REVENUE_OUT = nvl(l_TP_REVENUE_OUT_tab(i),tmp.TP_REVENUE_OUT)
7959                ,tmp.REVENUE_ADJ  = nvl(l_REVENUE_ADJ_tab(i),tmp.REVENUE_ADJ)
7960                ,tmp.LENT_RESOURCE_COST = nvl(l_LENT_RESOURCE_COST_tab(i),tmp.LENT_RESOURCE_COST)
7961                ,tmp.TP_COST_IN   = nvl(l_TP_COST_IN_tab(i),tmp.TP_COST_IN)
7962                ,tmp.TP_COST_OUT = nvl(l_TP_COST_OUT_tab(i),tmp.TP_COST_OUT)
7963                ,tmp.COST_ADJ = nvl(l_COST_ADJ_tab(i),tmp.COST_ADJ)
7964                ,tmp.UNASSIGNED_TIME_COST = nvl(l_UNASSIGNED_TIME_COST_tab(i),tmp.UNASSIGNED_TIME_COST)
7965                ,tmp.UTILIZATION_PERCENT = nvl(l_UTILIZATION_PERCENT_tab(i),tmp.UTILIZATION_PERCENT)
7966                ,tmp.UTILIZATION_HOURS = nvl(l_UTILIZATION_HOURS_tab(i),tmp.UTILIZATION_HOURS)
7967                ,tmp.UTILIZATION_ADJ = nvl(l_UTILIZATION_ADJ_tab(i),tmp.UTILIZATION_ADJ)
7968                ,tmp.CAPACITY = nvl(l_CAPACITY_tab(i),tmp.CAPACITY)
7969                ,tmp.HEAD_COUNT = nvl(l_HEAD_COUNT_tab(i),tmp.HEAD_COUNT)
7970                ,tmp.HEAD_COUNT_ADJ =nvl(l_HEAD_COUNT_ADJ_tab(i),tmp.HEAD_COUNT_ADJ)
7971                ,tmp.BUCKETING_PERIOD_CODE = nvl(l_BUCKETING_PERIOD_CODE_tab(i),tmp.BUCKETING_PERIOD_CODE)
7972                ,tmp.TXN_DISCOUNT_PERCENTAGE = nvl(l_TXN_DISCOUNT_PERCENTAGE_tab(i),tmp.TXN_DISCOUNT_PERCENTAGE)
7973                ,tmp.TRANSFER_PRICE_RATE = nvl(l_TRANSFER_PRICE_RATE_tab(i),tmp.TRANSFER_PRICE_RATE)
7974                ,tmp.BL_CREATED_BY   = nvl(l_BL_CREATED_BY_tab(i),tmp.BL_CREATED_BY)
7975                ,tmp.BL_CREATION_DATE   = NVL(l_BL_CREATION_DATE_tab(i),tmp.BL_CREATION_DATE)
7976                         WHERE tmp.rowid = l_rowid_tab(i);
7977             --print_msg('Number of rows updated['||sql%rowcount||']');
7978 
7979                 END IF;
7980         /* release the buffer */
7981         INIT_PLSQL_TABS;
7982         END IF;  --}
7983     --print_msg('End of copy_BlAttributes retSts['||x_return_status||']');
7984     If p_pa_debug_mode = 'Y' Then
7985         pa_debug.reset_err_stack;
7986     End If;
7987 EXCEPTION
7988         WHEN OTHERS THEN
7989                 x_return_status := 'U';
7990                 x_msg_data := SQLCODE||SQLERRM;
7991         fnd_msg_pub.add_exc_msg
7992                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
7993                  ,p_procedure_name => 'copy_BlAttributes');
7994         If p_pa_debug_mode = 'Y' Then
7995                     pa_debug.reset_err_stack;
7996         End If;
7997                 RAISE;
7998 
7999 END copy_BlAttributes;
8000 
8001 /*This API is added to check the duplicate records sent in plsql tables for calculate api
8002  *If there are any duplicates (resource assignment and txn currency combination ) then
8003  * delete one of the record and proceed, instead of throwing an error
8004  * Logic used: Instead of looping through the plsql table in amg mode, the number of rows may be 1000
8005  * then loop through the plsql table will not scale the performance.
8006  * so use the tmp table, First dump all the records into tmp table then chk duplicate rows exists, then
8007  * delete the record from the tmp table finally assign the values from tmp to plsql tables.so that
8008  * the plsql index need not be manintained.
8009  */
8010 PROCEDURE Validate_duplicate_records (
8011                 p_budget_version_id              IN  Number
8012                 ,p_source_context                IN  VARCHAR2
8013         ,p_calling_module                IN  VARCHAR2
8014                 ,x_return_status                 OUT NOCOPY VARCHAR2
8015         ) IS
8016 
8017     l_duplicate_record_exists  varchar2(10) := 'N';
8018 
8019         CURSOR cur_chk_dupRecords IS
8020         SELECT tmp.resource_assignment_id
8021                 ,tmp.txn_currency_code
8022             ,tmp.start_date
8023         FROM pa_fp_spread_calc_tmp tmp
8024     WHERE  tmp.budget_version_id = p_budget_version_id
8025         GROUP BY tmp.resource_assignment_id
8026                 ,tmp.txn_currency_code
8027         ,tmp.start_date
8028         HAVING COUNT(*) > 1 ;
8029 
8030 BEGIN
8031     x_return_status := 'S';
8032     print_msg('Inside Validate_duplicate_records Api');
8033     g_stage := 'Validate_duplicate_records:100';
8034 
8035     IF p_calling_module NOT IN ('BUDGET_GENERATION','FORECAST_GENERATION') Then --{
8036        g_stage := 'Validate_duplicate_records:101';
8037        l_duplicate_record_exists := 'N';
8038        FOR i IN cur_chk_dupRecords LOOP
8039 		/*
8040                 print_msg('Duplicate Resource Assignments sent for Calcaulate API');
8041                 print_msg('ResId['||i.resource_assignment_id||']txnCur['||i.txn_currency_code||']');
8042 		*/
8043         l_duplicate_record_exists := 'Y';
8044         IF NVL(p_source_context,'RESOURCE_ASSIGNMENT') = 'RESOURCE_ASSIGNMENT' Then
8045             g_stage := 'Validate_duplicate_records:102';
8046             DELETE FROM pa_fp_spread_calc_tmp tmp1
8047             WHERE tmp1.resource_assignment_id = i.resource_assignment_id
8048             AND  tmp1.txn_currency_code = i.txn_currency_code
8049             AND tmp1.rowid NOT IN  (select min(rowid) from pa_fp_spread_calc_tmp tmp2
8050                             where tmp1.resource_assignment_id = tmp2.resource_assignment_id
8051                     and   tmp1.txn_currency_code = tmp2.txn_currency_code
8052                     group by tmp2.resource_assignment_id,tmp2.txn_currency_code
8053                     having count(*) > 1
8054                     )
8055             /* added this to make sure that even if code is executed multiple times this should delete the correct combo */
8056             /* this code is not required if not executed twice for the same combo*/
8057                         AND EXISTS  (select 'Y' from pa_fp_spread_calc_tmp tmp2
8058                                      where tmp1.resource_assignment_id = tmp2.resource_assignment_id
8059                                      and   tmp1.txn_currency_code = tmp2.txn_currency_code
8060                                      group by tmp2.resource_assignment_id,tmp2.txn_currency_code
8061                                      having count(*) > 1
8062                                  );
8063         Elsif NVL(p_source_context,'RESOURCE_ASSIGNMENT') = 'BUDGET_LINE' Then
8064             g_stage := 'Validate_duplicate_records:103';
8065                         DELETE FROM pa_fp_spread_calc_tmp tmp1
8066                         WHERE tmp1.resource_assignment_id = i.resource_assignment_id
8067                         AND  tmp1.txn_currency_code = i.txn_currency_code
8068             AND  tmp1.start_date = i.start_date
8069                         AND tmp1.rowid NOT IN  (select min(tmp2.rowid) from pa_fp_spread_calc_tmp tmp2
8070                                 where tmp1.resource_assignment_id = tmp2.resource_assignment_id
8071                                         and   tmp1.txn_currency_code = tmp2.txn_currency_code
8072                     and   tmp1.start_date = tmp2.start_date
8073                                         group by tmp2.resource_assignment_id,tmp2.txn_currency_code,tmp2.start_date
8074                                         having count(*) > 1
8075                                         )
8076                        AND EXISTS  (select 'Y' from pa_fp_spread_calc_tmp tmp2
8077                                     where tmp1.resource_assignment_id = tmp2.resource_assignment_id
8078                                     and   tmp1.txn_currency_code = tmp2.txn_currency_code
8079                                     and   tmp1.start_date = tmp2.start_date
8080                                     group by tmp2.resource_assignment_id,tmp2.txn_currency_code,tmp2.start_date
8081                                     having count(*) > 1
8082                                     );
8083         End If;
8084         --print_msg('Number of duplicate records deleted['||sql%rowcount||']');
8085            END LOOP;
8086     END IF; --}
8087     g_stage := 'End of Validate_duplicate_records:105';
8088     RETURN;
8089 EXCEPTION
8090     WHEN OTHERS THEN
8091         x_return_status := 'U';
8092         RAISE;
8093 
8094 END Validate_duplicate_records;
8095 
8096 /* Bug fix: 4184159 The following API will update the budget lines in bulk. This API uses oracle 9i feature of SQL%BULKEXCEPTION
8097  * during bulk update fails due to dup_val_on_index exception, the process the rejected rows.
8098  * Earlier the api was updating the budget line inside a loop for each row. this was causing the performance bottle neck
8099  * This API must be called at the end of calculate API, It copies the value from rollup tmp to budget lines.
8100  */
8101 PROCEDURE BLK_update_budget_lines
8102     (p_budget_version_id              IN  NUMBER
8103     ,p_calling_module                  IN VARCHAR2 DEFAULT 'UPDATE_PLAN_TRANSACTION'-- Added for Bug#5395732
8104     ,x_return_status                 OUT NOCOPY VARCHAR2
8105         ,x_msg_count                     OUT NOCOPY NUMBER
8106         ,x_msg_data                      OUT NOCOPY VARCHAR2) IS
8107 
8108     l_debug_mode        VARCHAR2(30);
8109     l_stage             NUMBER;
8110     l_populate_mrc_tab_flag   Varchar2(10) := 'N'; --MRC Elimination Changes:NVL(PA_FP_CALC_PLAN_PKG.G_populate_mrc_tab_flag,'N');
8111     l_existing_bl_id                pa_budget_lines.budget_line_id%TYPE;
8112 
8113         l_bl_raId_tab               pa_plsql_datatypes.NumTabTyp;
8114         l_bl_sDate_tab              pa_plsql_datatypes.dateTabTyp;
8115     l_bl_edate_tab              pa_plsql_datatypes.dateTabTyp;
8116     l_bl_period_name_tab            pa_plsql_datatypes.char30TabTyp;
8117         l_bl_budget_line_id_tab         pa_plsql_datatypes.NumTabTyp;
8118         l_bl_txn_curcode_tab            pa_plsql_datatypes.char30TabTyp;
8119         l_bl_quantity_tab               pa_plsql_datatypes.NumTabTyp;
8120         l_bl_pjfc_raw_cost_tab          pa_plsql_datatypes.NumTabTyp;
8121     l_bl_pjfc_burden_cost_tab       pa_plsql_datatypes.NumTabTyp;
8122     l_bl_pjfc_revenue_tab           pa_plsql_datatypes.NumTabTyp;
8123     l_bl_cost_rejection_tab         pa_plsql_datatypes.char30TabTyp;
8124     l_bl_rev_rejection_tab          pa_plsql_datatypes.char30TabTyp;
8125     l_bl_burden_rejection_tab       pa_plsql_datatypes.char30TabTyp;
8126     l_bl_pfc_cur_rejection_tab      pa_plsql_datatypes.char30TabTyp;
8127     l_bl_pc_cur_rejection_tab       pa_plsql_datatypes.char30TabTyp;
8128     l_bl_pfc_curcode_tab            pa_plsql_datatypes.char30TabTyp;
8129         l_bl_pfc_cost_rate_type_tab     pa_plsql_datatypes.char100TabTyp;
8130         l_bl_pfc_cost_exchng_rate_tab       pa_plsql_datatypes.NumTabTyp;
8131         l_bl_pfc_cost_date_type_tab     pa_plsql_datatypes.char100TabTyp;
8132         l_bl_pfc_cost_date_tab          pa_plsql_datatypes.dateTabTyp;
8133         l_bl_pfc_rev_rate_type_tab      pa_plsql_datatypes.char100TabTyp;
8134         l_bl_pfc_rev_exchange_rate_tab      pa_plsql_datatypes.NumTabTyp;
8135         l_bl_pfc_rev_date_type_tab      pa_plsql_datatypes.char100TabTyp;
8136         l_bl_pfc_rev_date_tab           pa_plsql_datatypes.dateTabTyp;
8137         l_bl_pc_cur_code_tab            pa_plsql_datatypes.char30TabTyp;
8138         l_bl_pc_cost_rate_type_tab      pa_plsql_datatypes.char100TabTyp;
8139         l_bl_pc_cost_exchange_rate_tab      pa_plsql_datatypes.NumTabTyp;
8140         l_bl_pc_cost_date_type_tab      pa_plsql_datatypes.char100TabTyp;
8141         l_bl_pc_cost_date_tab           pa_plsql_datatypes.dateTabTyp;
8142         l_bl_project_raw_cost_tab       pa_plsql_datatypes.NumTabTyp;
8143         l_bl_project_burdened_cost_tab      pa_plsql_datatypes.NumTabTyp;
8144         l_bl_pc_rev_rate_type_tab       pa_plsql_datatypes.char100TabTyp;
8145         l_bl_pc_rev_exchange_rate_tab       pa_plsql_datatypes.NumTabTyp;
8146         l_bl_pc_rev_date_type_tab       pa_plsql_datatypes.char100TabTyp;
8147         l_bl_pc_rev_date_tab            pa_plsql_datatypes.dateTabTyp;
8148         l_bl_project_revenue_tab        pa_plsql_datatypes.NumTabTyp;
8149         l_bl_txn_raw_cost_tab           pa_plsql_datatypes.NumTabTyp;
8150         l_bl_txn_burdened_cost_tab      pa_plsql_datatypes.NumTabTyp;
8151         l_bl_txn_revenue_tab            pa_plsql_datatypes.NumTabTyp;
8152         l_bl_init_quantity_tab          pa_plsql_datatypes.NumTabTyp;
8153         l_bl_txn_init_raw_cost_tab      pa_plsql_datatypes.NumTabTyp;
8154         l_bl_txn_init_burden_cost_tab       pa_plsql_datatypes.NumTabTyp;
8155         l_bl_txn_init_revenue_tab       pa_plsql_datatypes.NumTabTyp;
8156         l_bl_pfc_init_raw_cost_tab      pa_plsql_datatypes.NumTabTyp;
8157         l_bl_pfc_init_burden_cost_tab       pa_plsql_datatypes.NumTabTyp;
8158         l_bl_pfc_init_revenue_tab       pa_plsql_datatypes.NumTabTyp;
8159         l_bl_pc_init_raw_cost_tab       pa_plsql_datatypes.NumTabTyp;
8160         l_bl_pc_init_burden_cost_tab        pa_plsql_datatypes.NumTabTyp;
8161         l_bl_pc_init_revenue_tab        pa_plsql_datatypes.NumTabTyp;
8162         l_bl_markup_percentage_tab      pa_plsql_datatypes.NumTabTyp;
8163         l_bl_bill_rate_tab          pa_plsql_datatypes.NumTabTyp;
8164         l_bl_cost_rate_tab          pa_plsql_datatypes.NumTabTyp;
8165         l_bl_cost_rate_override_tab     pa_plsql_datatypes.NumTabTyp;
8166         l_bl_burden_cost_rate_tab       pa_plsql_datatypes.NumTabTyp;
8167         l_bl_bill_rate_override_tab     pa_plsql_datatypes.NumTabTyp;
8168         l_bl_burden_rate_override_tab       pa_plsql_datatypes.NumTabTyp;
8169         l_bl_compiled_set_id_tab        pa_plsql_datatypes.NumTabTyp;
8170     l_bl_version_type_tab           pa_plsql_datatypes.char100TabTyp;
8171     l_bl_final_txn_cur_code_tab     pa_plsql_datatypes.char100TabTyp;
8172     l_bl_CHANGE_REASON_CODE_tab     pa_plsql_datatypes.char2000TabTyp;
8173         l_bl_DESCRIPTION_tab            pa_plsql_datatypes.char2000TabTyp;
8174         l_bl_ATTRIBUTE_CATEGORY_tab         pa_plsql_datatypes.char30TabTyp;
8175         l_bl_ATTRIBUTE1_tab             pa_plsql_datatypes.Char150TabTyp;
8176         l_bl_ATTRIBUTE2_tab         pa_plsql_datatypes.Char150TabTyp;
8177         l_bl_ATTRIBUTE3_tab             pa_plsql_datatypes.Char150TabTyp;
8178         l_bl_ATTRIBUTE4_tab             pa_plsql_datatypes.Char150TabTyp;
8179         l_bl_ATTRIBUTE5_tab             pa_plsql_datatypes.Char150TabTyp;
8180         l_bl_ATTRIBUTE6_tab             pa_plsql_datatypes.Char150TabTyp;
8181         l_bl_ATTRIBUTE7_tab             pa_plsql_datatypes.Char150TabTyp;
8182         l_bl_ATTRIBUTE8_tab             pa_plsql_datatypes.Char150TabTyp;
8183         l_bl_ATTRIBUTE9_tab             pa_plsql_datatypes.Char150TabTyp;
8184         l_bl_ATTRIBUTE10_tab            pa_plsql_datatypes.Char150TabTyp;
8185         l_bl_ATTRIBUTE11_tab            pa_plsql_datatypes.Char150TabTyp;
8186         l_bl_ATTRIBUTE12_tab            pa_plsql_datatypes.Char150TabTyp;
8187         l_bl_ATTRIBUTE13_tab            pa_plsql_datatypes.Char150TabTyp;
8188         l_bl_ATTRIBUTE14_tab            pa_plsql_datatypes.Char150TabTyp;
8189         l_bl_ATTRIBUTE15_tab            pa_plsql_datatypes.Char150TabTyp;
8190         l_bl_RAW_COST_SOURCE_tab        pa_plsql_datatypes.Char5TabTyp;
8191         l_bl_BURDENED_COST_SOURCE_tab       pa_plsql_datatypes.Char5TabTyp;
8192         l_bl_QUANTITY_SOURCE_tab        pa_plsql_datatypes.Char5TabTyp;
8193         l_bl_REVENUE_SOURCE_tab         pa_plsql_datatypes.Char5TabTyp;
8194         l_bl_PM_PRODUCT_CODE_tab        pa_plsql_datatypes.char30TabTyp;
8195         l_bl_PM_LINE_REFERENCE_tab      pa_plsql_datatypes.char30TabTyp;
8196         l_bl_CODE_COMBINATION_ID_tab        pa_plsql_datatypes.NumTabTyp;
8197         l_bl_CCID_GEN_STATUS_CODE_tab       pa_plsql_datatypes.Char1TabTyp;
8198         l_bl_CCID_GEN_REJ_MESSAGE_tab       pa_plsql_datatypes.Char150TabTyp;
8199         l_bl_BORROWED_REVENUE_tab       pa_plsql_datatypes.NumTabTyp;
8200         l_bl_TP_REVENUE_IN_tab          pa_plsql_datatypes.NumTabTyp;
8201         l_bl_TP_REVENUE_OUT_tab         pa_plsql_datatypes.NumTabTyp;
8202         l_bl_REVENUE_ADJ_tab            pa_plsql_datatypes.NumTabTyp;
8203         l_bl_LENT_RESOURCE_COST_tab         pa_plsql_datatypes.NumTabTyp;
8204         l_bl_TP_COST_IN_tab             pa_plsql_datatypes.NumTabTyp;
8205         l_bl_TP_COST_OUT_tab            pa_plsql_datatypes.NumTabTyp;
8206         l_bl_COST_ADJ_tab           pa_plsql_datatypes.NumTabTyp;
8207         l_bl_UNASSIGNED_TIME_COST_tab       pa_plsql_datatypes.NumTabTyp;
8208         l_bl_UTILIZATION_PERCENT_tab        pa_plsql_datatypes.NumTabTyp;
8209         l_bl_UTILIZATION_HOURS_tab      pa_plsql_datatypes.NumTabTyp;
8210         l_bl_UTILIZATION_ADJ_tab        pa_plsql_datatypes.NumTabTyp;
8211         l_bl_CAPACITY_tab           pa_plsql_datatypes.NumTabTyp;
8212         l_bl_HEAD_COUNT_tab             pa_plsql_datatypes.NumTabTyp;
8213         l_bl_HEAD_COUNT_ADJ_tab         pa_plsql_datatypes.NumTabTyp;
8214         l_bl_BUCKETING_PERIOD_CODE_tab      pa_plsql_datatypes.char30TabTyp;
8215         l_bl_TXN_DISCOUNT_PERCENT_tab       pa_plsql_datatypes.NumTabTyp;
8216         l_bl_TRANSFER_PRICE_RATE_tab        pa_plsql_datatypes.NumTabTyp;
8217         l_bl_BL_CREATED_BY_tab          pa_plsql_datatypes.NumTabTyp;
8218         l_bl_BL_CREATION_DATE_tab       pa_plsql_datatypes.DateTabTyp;
8219 	l_rate_base_flag_tab            pa_plsql_datatypes.Char1TabTyp;
8220 
8221 
8222     CURSOR Cur_RollupLines IS
8223         SELECT /*+ INDEX(B PA_BUDGET_LINES_U2) */ r.resource_assignment_id
8224           ,b.start_date
8225       ,b.end_date
8226       ,b.period_name
8227           ,r.budget_line_id
8228           ,r.txn_currency_code                                  txn_currency_code
8229           ,case when r.quantity = 0 and r.init_quantity = 0 then null else r.quantity end  quantity
8230           ,DECODE(r.projfunc_raw_cost,0,NULL,r.projfunc_raw_cost)           projfunc_raw_cost
8231           ,DECODE(r.projfunc_burdened_cost,0,NULL,r.projfunc_burdened_cost) projfunc_burdened_cost
8232           ,DECODE(r.projfunc_revenue,0,NULL,r.projfunc_revenue)             projfunc_revenue
8233           ,r.cost_rejection_code
8234           ,r.revenue_rejection_code
8235           ,r.burden_rejection_code
8236           ,r.pfc_cur_conv_rejection_code
8237           ,r.pc_cur_conv_rejection_code
8238           ,r.projfunc_currency_code
8239           ,r.projfunc_cost_rate_type
8240           ,r.projfunc_cost_exchange_rate
8241           ,r.projfunc_cost_rate_date_type
8242           ,r.projfunc_cost_rate_date
8243           ,r.projfunc_rev_rate_type
8244           ,r.projfunc_rev_exchange_rate
8245           ,r.projfunc_rev_rate_date_type
8246           ,r.projfunc_rev_rate_date
8247           ,r.project_currency_code
8248           ,r.project_cost_rate_type
8249           ,r.project_cost_exchange_rate
8250           ,r.project_cost_rate_date_type
8251           ,r.project_cost_rate_date
8252           ,DECODE(r.project_raw_cost,0,NULL,r.project_raw_cost)             project_raw_cost
8253           ,DECODE(r.project_burdened_cost,0,NULL,r.project_burdened_cost)   project_burdened_cost
8254           ,r.project_rev_rate_type
8255           ,r.project_rev_exchange_rate
8256           ,r.project_rev_rate_date_type
8257           ,r.project_rev_rate_date
8258           ,DECODE(r.project_revenue,0,NULL,r.project_revenue)               project_revenue
8259           ,case when r.txn_raw_cost = 0 and r.txn_init_raw_cost = 0 then null else r.txn_raw_cost end txn_raw_cost
8260           ,case when r.txn_burdened_cost = 0 and r.txn_init_burdened_cost = 0 then null else r.txn_burdened_cost end txn_burdened_cost
8261           ,case when r.txn_revenue = 0 and r.init_revenue = 0 then null else  r.txn_revenue end txn_revenue
8262           ,DECODE(r.init_quantity,0,NULL,r.init_quantity)                   init_quantity
8263           ,DECODE(r.txn_init_raw_cost,0,NULL,r.txn_init_raw_cost)           txn_init_raw_cost
8264           ,DECODE(r.txn_init_burdened_cost,0,NULL,r.txn_init_burdened_cost) txn_init_burdened_cost
8265           ,DECODE(r.txn_init_revenue,0,NULL,r.txn_init_revenue)             txn_init_revenue
8266           ,DECODE(b.init_raw_cost,0,NULL,b.init_raw_cost)                   init_raw_cost
8267           ,DECODE(b.init_burdened_cost,0,NULL,b.init_burdened_cost)         init_burdened_cost
8268           ,DECODE(b.init_revenue,0,NULL,b.init_revenue)                     init_revenue
8269           ,DECODE(b.project_init_raw_cost,0,NULL,b.project_init_raw_cost)   project_init_raw_cost
8270           ,DECODE(b.project_init_burdened_cost,0,NULL,b.project_init_burdened_cost) project_init_burdened_cost
8271           ,DECODE(b.project_init_revenue,0,NULL,b.project_init_revenue)     project_init_revenue
8272           ,r.bill_markup_percentage
8273           ,DECODE(r.bill_rate,0,NULL,r.bill_rate)                           bill_rate
8274           ,DECODE(r.cost_rate,0,NULL,r.cost_rate)                           cost_rate
8275           --,DECODE(r.rw_cost_rate_override,0,NULL,r.rw_cost_rate_override)   rw_cost_rate_override
8276           ,DECODE(r.rw_cost_rate_override,0,0,NULL,NULL,r.rw_cost_rate_override)   rw_cost_rate_override
8277           ,DECODE(r.burden_cost_rate,0,NULL,r.burden_cost_rate)             burden_cost_rate
8278           --,DECODE(r.bill_rate_override,0,NULL,r.bill_rate_override)         bill_rate_override
8279           ,DECODE(r.bill_rate_override,0,0,NULL,NULL,r.bill_rate_override)         bill_rate_override
8280           --,DECODE(r.burden_cost_rate_override,0,NULL,r.burden_cost_rate_override)   burden_cost_rate_override
8281           ,DECODE(r.burden_cost_rate_override,0,0,NULL,NULL,r.burden_cost_rate_override)   burden_cost_rate_override
8282           ,r.cost_ind_compiled_set_id
8283       ,g_budget_version_type  version_type
8284 	,r.final_txn_curr_code final_txn_currency_code
8285         /* bug fix:5014538: Added nvl to retain the exisiting budget line attribs */
8286         ,nvl(r.CHANGE_REASON_CODE,b.CHANGE_REASON_CODE)                 CHANGE_REASON_CODE
8287           ,nvl(r.DESCRIPTION,b.DESCRIPTION)                             DESCRIPTION
8288           ,nvl(r.ATTRIBUTE_CATEGORY,b.ATTRIBUTE_CATEGORY)               ATTRIBUTE_CATEGORY
8289           ,nvl(r.ATTRIBUTE1,b.ATTRIBUTE1)                               ATTRIBUTE1
8290           ,nvl(r.ATTRIBUTE2,b.ATTRIBUTE2)                               ATTRIBUTE2
8291           ,nvl(r.ATTRIBUTE3,b.ATTRIBUTE3)                               ATTRIBUTE3
8292           ,nvl(r.ATTRIBUTE4,b.ATTRIBUTE4)                               ATTRIBUTE4
8293           ,nvl(r.ATTRIBUTE5,b.ATTRIBUTE5)                               ATTRIBUTE5
8294           ,nvl(r.ATTRIBUTE6,b.ATTRIBUTE6)                               ATTRIBUTE6
8295           ,nvl(r.ATTRIBUTE7,b.ATTRIBUTE7)                               ATTRIBUTE7
8296           ,nvl(r.ATTRIBUTE8,b.ATTRIBUTE8)                               ATTRIBUTE8
8297           ,nvl(r.ATTRIBUTE9,b.ATTRIBUTE9)                               ATTRIBUTE9
8298           ,nvl(r.ATTRIBUTE10,b.ATTRIBUTE10)                             ATTRIBUTE10
8299           ,nvl(r.ATTRIBUTE11,b.ATTRIBUTE11)                             ATTRIBUTE11
8300           ,nvl(r.ATTRIBUTE12,b.ATTRIBUTE12)                             ATTRIBUTE12
8301           ,nvl(r.ATTRIBUTE13,b.ATTRIBUTE13)                             ATTRIBUTE13
8302           ,nvl(r.ATTRIBUTE14,b.ATTRIBUTE14)                             ATTRIBUTE14
8303           ,nvl(r.ATTRIBUTE15,b.ATTRIBUTE15)                             ATTRIBUTE15
8304           ,r.RAW_COST_SOURCE
8305           ,r.BURDENED_COST_SOURCE
8306           ,r.QUANTITY_SOURCE
8307           ,r.REVENUE_SOURCE
8308 	  ,nvl(r.PM_PRODUCT_CODE,b.PM_PRODUCT_CODE)                     PM_PRODUCT_CODE
8309           ,nvl(r.PM_BUDGET_LINE_REFERENCE,b.PM_BUDGET_LINE_REFERENCE)   PM_BUDGET_LINE_REFERENCE
8310           ,nvl(r.CODE_COMBINATION_ID,b.CODE_COMBINATION_ID)             CODE_COMBINATION_ID
8311           ,nvl(r.CCID_GEN_STATUS_CODE,b.CCID_GEN_STATUS_CODE)           CCID_GEN_STATUS_CODE
8312           ,nvl(r.CCID_GEN_REJ_MESSAGE,b.CCID_GEN_REJ_MESSAGE)           CCID_GEN_REJ_MESSAGE
8313           ,nvl(r.BORROWED_REVENUE,b.BORROWED_REVENUE)                   BORROWED_REVENUE
8314           ,nvl(r.TP_REVENUE_IN,b.TP_REVENUE_IN)                         TP_REVENUE_IN
8315           ,nvl(r.TP_REVENUE_OUT,b.TP_REVENUE_OUT)                       TP_REVENUE_OUT
8316           ,nvl(r.REVENUE_ADJ,b.REVENUE_ADJ)                             REVENUE_ADJ
8317           ,nvl(r.LENT_RESOURCE_COST,b.LENT_RESOURCE_COST)               LENT_RESOURCE_COST
8318           ,nvl(r.TP_COST_IN,b.TP_COST_IN)                               TP_COST_IN
8319           ,nvl(r.TP_COST_OUT,b.TP_COST_OUT)                             TP_COST_OUT
8320           ,nvl(r.COST_ADJ,b.COST_ADJ)                                   COST_ADJ
8321           ,nvl(r.UNASSIGNED_TIME_COST,b.UNASSIGNED_TIME_COST)           UNASSIGNED_TIME_COST
8322           ,nvl(r.UTILIZATION_PERCENT,b.UTILIZATION_PERCENT)             UTILIZATION_PERCENT
8323           ,nvl(r.UTILIZATION_HOURS,b.UTILIZATION_HOURS)                 UTILIZATION_HOURS
8324           ,nvl(r.UTILIZATION_ADJ,b.UTILIZATION_ADJ)                     UTILIZATION_ADJ
8325           ,nvl(r.CAPACITY,b.CAPACITY)                                   CAPACITY
8326           ,nvl(r.HEAD_COUNT,b.HEAD_COUNT)                               HEAD_COUNT
8327           ,nvl(r.HEAD_COUNT_ADJ,b.HEAD_COUNT_ADJ)                       HEAD_COUNT_ADJ
8328           ,nvl(r.BUCKETING_PERIOD_CODE,b.BUCKETING_PERIOD_CODE)         BUCKETING_PERIOD_CODE
8329           ,nvl(r.TXN_DISCOUNT_PERCENTAGE,b.TXN_DISCOUNT_PERCENTAGE)     TXN_DISCOUNT_PERCENTAGE
8330           ,nvl(r.TRANSFER_PRICE_RATE,b.TRANSFER_PRICE_RATE)             TRANSFER_PRICE_RATE
8331           ,r.BL_CREATED_BY
8332           ,r.BL_CREATION_DATE
8333           ,NVL(ra.rate_based_flag,'N')
8334 	FROM pa_fp_rollup_tmp r
8335            ,pa_budget_lines  b
8336            ,pa_resource_assignments ra
8337         WHERE r.budget_line_id = b.budget_line_id
8338         AND  b.budget_version_id = p_budget_version_id
8339         AND  b.budget_version_id = r.budget_version_id  --Bug 7520706
8340         AND  ra.budget_version_id = r.budget_version_id  --Bug 7520706
8341         AND r.resource_assignment_id = ra.resource_assignment_id
8342         ORDER by r.resource_assignment_id,r.start_date,decode(b.txn_currency_code,r.txn_currency_code,0,1)
8343     ;
8344 
8345 
8346     /* This cursor is used only for before and after updated the budget line values */
8347     CURSOR cur_blAmts IS
8348     SELECT bl.budget_line_id
8349          ,bl.txn_raw_cost
8350          ,bl.txn_burdened_cost
8351          ,bl.txn_revenue
8352          ,bl.project_raw_cost
8353          ,bl.project_burdened_cost
8354          ,bl.project_revenue
8355          ,bl.raw_cost      projfunc_raw_cost
8356          ,bl.burdened_cost projfunc_burdened_cost
8357          ,bl.revenue       projfunc_revenue
8358          ,bl.quantity
8359      ,bl.start_date
8360      ,bl.end_date
8361      ,bl.period_name
8362      ,bl.resource_assignment_id
8363      ,bl.txn_currency_code
8364      ,bl.project_currency_code
8365      ,bl.projfunc_currency_code
8366         FROM pa_budget_lines bl
8367         ,pa_fp_rollup_tmp r
8368     WHERE  bl.budget_version_id = p_budget_version_id
8369     AND  bl.budget_line_id = r.budget_line_id
8370     AND  NVL(r.processed_flag,'Y') <> 'N';
8371 	/* bug fix:5031388
8372     	AND  bl.cost_rejection_code         IS NULL
8373         AND  bl.revenue_rejection_code      IS NULL
8374         AND  bl.burden_rejection_code       IS NULL
8375         AND  bl.pfc_cur_conv_rejection_code IS NULL
8376         AND  bl.pc_cur_conv_rejection_code  IS NULL
8377 	*/
8378 
8379     /* This cursor is used for passing values to rollup api for dupVal rejected bl rows */
8380     CURSOR cur_ExistingblAmts IS
8381         SELECT bl.budget_line_id
8382          ,bl.txn_raw_cost
8383          ,bl.txn_burdened_cost
8384          ,bl.txn_revenue
8385          ,bl.project_raw_cost
8386          ,bl.project_burdened_cost
8387          ,bl.project_revenue
8388          ,bl.raw_cost      projfunc_raw_cost
8389          ,bl.burdened_cost projfunc_burdened_cost
8390          ,bl.revenue       projfunc_revenue
8391          ,bl.quantity
8392          ,bl.start_date
8393          ,bl.end_date
8394          ,bl.period_name
8395          ,bl.resource_assignment_id
8396          ,bl.txn_currency_code
8397          ,bl.project_currency_code
8398          ,bl.projfunc_currency_code
8399         FROM pa_budget_lines bl
8400         ,pa_fp_spread_calc_tmp2 tmp2
8401         WHERE  bl.budget_version_id = p_budget_version_id
8402     AND  tmp2.budget_version_id = bl.budget_version_id
8403     AND  tmp2.resource_assignment_id = bl.resource_assignment_id
8404     AND  tmp2.txn_currency_code = bl.txn_currency_code
8405     AND  tmp2.start_date = bl.start_date;
8406 	/* bug fix:5031388
8407         AND  bl.cost_rejection_code         IS NULL
8408         AND  bl.revenue_rejection_code      IS NULL
8409         AND  bl.burden_rejection_code       IS NULL
8410         AND  bl.pfc_cur_conv_rejection_code IS NULL
8411         AND  bl.pc_cur_conv_rejection_code  IS NULL
8412 	*/
8413 
8414 
8415     l_err_error_code_tab           pa_plsql_datatypes.char30TabTyp;
8416         l_err_budget_line_id_tab       pa_plsql_datatypes.NumTabTyp;
8417         l_err_raId_tab                 pa_plsql_datatypes.NumTabTyp;
8418         l_err_txn_cur_tab              pa_plsql_datatypes.char30TabTyp;
8419         l_err_sdate_tab                pa_plsql_datatypes.DateTabTyp;
8420         l_err_quantity_tab             pa_plsql_datatypes.NumTabTyp;
8421         l_err_cost_rate_tab            pa_plsql_datatypes.NumTabTyp;
8422         l_err_cost_rate_ovr_tab        pa_plsql_datatypes.NumTabTyp;
8423         l_err_burden_rate_tab          pa_plsql_datatypes.NumTabTyp;
8424         l_err_burden_rate_ovr_tab      pa_plsql_datatypes.NumTabTyp;
8425         l_err_compiled_set_id_tab      pa_plsql_datatypes.NumTabTyp;
8426         l_err_bill_rate_tab            pa_plsql_datatypes.NumTabTyp;
8427         l_err_bill_rate_ovr_tab        pa_plsql_datatypes.NumTabTyp;
8428         l_err_markup_percent_tab       pa_plsql_datatypes.NumTabTyp;
8429         l_err_cost_rejection_tab       pa_plsql_datatypes.char30TabTyp;
8430         l_err_revenue_rejection_tab    pa_plsql_datatypes.char30TabTyp;
8431         l_err_burden_rejection_tab     pa_plsql_datatypes.char30TabTyp;
8432         l_err_pfc_cur_rejection_tab    pa_plsql_datatypes.char30TabTyp;
8433         l_err_pc_cur_rejection_tab     pa_plsql_datatypes.char30TabTyp;
8434 
8435     CURSOR cur_errorBdgtLines IS
8436     SELECT tmp1.budget_line_id
8437           ,tmp1.resource_assignment_id
8438           ,tmp1.txn_currency_code
8439           ,tmp1.start_date
8440           ,tmp1.end_date
8441           ,tmp1.quantity
8442           ,tmp1.cost_rate
8443           ,tmp1.cost_rate_override
8444           ,tmp1.burden_cost_rate
8445           ,tmp1.burden_cost_rate_override
8446           ,tmp1.bill_rate
8447           ,tmp1.bill_rate_override
8448           ,tmp1.cost_ind_compiled_set_id
8449           ,tmp1.bill_markup_percentage
8450           ,tmp1.cost_rejection_code
8451           ,tmp1.revenue_rejection_code
8452           ,tmp1.burden_rejection_code
8453           ,tmp1.pfc_cur_conv_rejection_code
8454           ,tmp1.pc_cur_conv_rejection_code
8455           ,tmp1.system_reference_num1  Existing_budget_line_id
8456     FROM pa_fp_spread_calc_tmp1 tmp1
8457     WHERE tmp1.budget_version_id = p_budget_version_id;
8458 
8459     l_del_budget_line_id_tab        pa_plsql_datatypes.NumTabTyp;
8460     CURSOR cur_delBlLines IS
8461     SELECT tmp1.budget_line_id
8462     FROM pa_fp_spread_calc_tmp1 tmp1
8463         WHERE tmp1.budget_version_id = p_budget_version_id;
8464 
8465 
8466     CURSOR cur_Tmp2ExblAmts(p_budget_line_id Number) IS
8467         SELECT tmp2.budget_line_id  existing_budget_line_id
8468      ,tmp2.cost_rate        existing_cost_rate
8469      ,tmp2.cost_rate_override   existing_cost_rate_ovride
8470      ,tmp2.burden_cost_rate     existing_burden_rate
8471      ,tmp2.burden_cost_rate_override existing_burden_rate_ovride
8472      ,tmp2.bill_rate        existing_bill_rate
8473      ,tmp2.bill_rate_override   existing_bill_rate_ovride
8474      ,tmp2.bill_markup_percentage   existing_markup_percentage
8475      ,tmp2.system_reference_num1    existing_compile_set_id
8476         FROM pa_fp_spread_calc_tmp2 tmp2
8477         WHERE  tmp2.budget_version_id = p_budget_version_id
8478         AND  tmp2.budget_line_id = p_budget_line_id;
8479     ExBlRec   cur_Tmp2ExblAmts%ROWTYPE;
8480 
8481 
8482     l_last_updated_by               NUMBER := FND_GLOBAL.user_id;
8483     l_last_login_id                 NUMBER := FND_GLOBAL.login_id;
8484     l_sysdate                       DATE   := SYSDATE;
8485     l_rep_budget_line_id_tab        pa_plsql_datatypes.NumTabTyp;
8486     l_rep_txn_raw_cost_tab          pa_plsql_datatypes.NumTabTyp;
8487         l_rep_txn_burdened_cost_tab     pa_plsql_datatypes.NumTabTyp;
8488         l_rep_txn_revenue_tab           pa_plsql_datatypes.NumTabTyp;
8489         l_rep_prj_raw_cost_tab          pa_plsql_datatypes.NumTabTyp;
8490         l_rep_prj_burdened_cost_tab     pa_plsql_datatypes.NumTabTyp;
8491         l_rep_prj_revenue_tab           pa_plsql_datatypes.NumTabTyp;
8492         l_rep_pfc_raw_cost_tab          pa_plsql_datatypes.NumTabTyp;
8493         l_rep_pfc_burdened_cost_tab     pa_plsql_datatypes.NumTabTyp;
8494         l_rep_pfc_revenue_tab           pa_plsql_datatypes.NumTabTyp;
8495         l_rep_quantity_tab              pa_plsql_datatypes.NumTabTyp;
8496         l_rep_start_date_tab            pa_plsql_datatypes.DateTabTyp;
8497         l_rep_end_date_tab              pa_plsql_datatypes.DateTabTyp;
8498         l_rep_period_name_tab           pa_plsql_datatypes.Char30TabTyp;
8499         l_rep_resAss_id_tab             pa_plsql_datatypes.NumTabTyp;
8500         l_rep_txn_curr_code_tab         pa_plsql_datatypes.Char30TabTyp;
8501         l_rep_prj_curr_code_tab         pa_plsql_datatypes.Char30TabTyp;
8502         l_rep_pfc_curr_code_tab         pa_plsql_datatypes.Char30TabTyp;
8503         l_rep_called_flag_tab       pa_plsql_datatypes.Char30TabTyp;
8504     l_rep_cost_rejection_tab    pa_plsql_datatypes.Char30TabTyp;
8505         l_rep_burden_rejection_tab  pa_plsql_datatypes.Char30TabTyp;
8506         l_rep_revenue_rejection_tab pa_plsql_datatypes.Char30TabTyp;
8507         l_rep_pfc_cur_rejection_tab pa_plsql_datatypes.Char30TabTyp;
8508         l_rep_pc_cur_rejection_tab  pa_plsql_datatypes.Char30TabTyp;
8509 
8510     l_exception_return_status   Varchar2(1) := 'S';
8511         v_NumErrors         Number := 0;
8512     V_INDEX_POSITION                Number := 0;
8513     v_error_code                    Number := 0;
8514     l_x_cntr            Number := 0;
8515 
8516     l_msg_index_out                 NUMBER;
8517         l_return_status                 Varchar2(100);
8518         l_error_msg_code        Varchar2(100);
8519         l_rep_called_flag           Varchar2(10);
8520     l_rep_return_status             Varchar2(10);
8521     l_rep_msg_data              Varchar2(1000);
8522     l_bl_upd_markup_percentage  Number;
8523         l_bl_upd_bill_rate      Number;
8524         l_bl_upd_cost_rate      Number;
8525         l_bl_upd_burden_rate        Number;
8526         l_bl_upd_bill_rate_ovride   Number;
8527         l_bl_upd_cost_rate_ovride   Number;
8528         l_bl_upd_burden_rate_ovride Number;
8529         l_bl_upd_compile_set_id     Number;
8530 
8531     l_tmp2_budget_line_id_tab   pa_plsql_datatypes.NumTabTyp;
8532     l_tmp2_raId_tab         pa_plsql_datatypes.NumTabTyp;
8533     l_tmp2_sdate_tab        pa_plsql_datatypes.DateTabTyp;
8534     l_tmp2_txn_curr_code_tab    pa_plsql_datatypes.Char30TabTyp;
8535         l_tmp2_quantity_tab     pa_plsql_datatypes.NumTabTyp;
8536         l_tmp2_cost_rejection_tab   pa_plsql_datatypes.Char30TabTyp;
8537         l_tmp2_revenue_rejection_tab    pa_plsql_datatypes.Char30TabTyp;
8538         l_tmp2_burden_rejection_tab pa_plsql_datatypes.Char30TabTyp;
8539         l_tmp2_pfc_cur_rejection_tab    pa_plsql_datatypes.Char30TabTyp;
8540         l_tmp2_pc_cur_rejection_tab pa_plsql_datatypes.Char30TabTyp;
8541         l_tmp2_markup_percent_tab   pa_plsql_datatypes.NumTabTyp;
8542         l_tmp2_bill_rate_tab        pa_plsql_datatypes.NumTabTyp;
8543         l_tmp2_cost_rate_tab        pa_plsql_datatypes.NumTabTyp;
8544         l_tmp2_burden_rate_tab      pa_plsql_datatypes.NumTabTyp;
8545         l_tmp2_bill_rate_ovr_tab    pa_plsql_datatypes.NumTabTyp;
8546         l_tmp2_cost_rate_ovr_tab    pa_plsql_datatypes.NumTabTyp;
8547         l_tmp2_burden_rate_ovr_tab  pa_plsql_datatypes.NumTabTyp;
8548         l_tmp2_compile_set_id_tab   pa_plsql_datatypes.NumTabTyp;
8549 	l_tmp2_rate_based_flag_tab  pa_plsql_datatypes.Char1TabTyp;
8550 
8551     PROCEDURE InitPlsqlTabs IS
8552 
8553     BEGIN
8554         print_msg('Entered InitPlsqlTabs API');
8555 
8556         /* initialize these plsql tables for bulk exception records*/
8557         l_err_error_code_tab.delete;
8558             l_err_budget_line_id_tab.delete;
8559             l_err_raId_tab.delete;
8560             l_err_txn_cur_tab.delete;
8561             l_err_sdate_tab.delete;
8562             l_err_quantity_tab.delete;
8563             l_err_cost_rate_tab.delete;
8564             l_err_cost_rate_ovr_tab.delete;
8565             l_err_burden_rate_tab.delete;
8566             l_err_burden_rate_ovr_tab.delete;
8567             l_err_compiled_set_id_tab.delete;
8568             l_err_bill_rate_tab.delete;
8569             l_err_bill_rate_ovr_tab.delete;
8570             l_err_markup_percent_tab.delete;
8571             l_err_cost_rejection_tab.delete;
8572             l_err_revenue_rejection_tab.delete;
8573             l_err_burden_rejection_tab.delete;
8574             l_err_pfc_cur_rejection_tab.delete;
8575             l_err_pc_cur_rejection_tab.delete;
8576 
8577         /* Initialize these plsql tables for budget Lies which needs to updated in bulk after exception
8578         * records */
8579         l_tmp2_budget_line_id_tab.delete;
8580                 l_tmp2_raId_tab.delete;
8581                 l_tmp2_sdate_tab.delete;
8582                 l_tmp2_txn_curr_code_tab.delete;
8583                 l_tmp2_quantity_tab.delete;
8584                 l_tmp2_cost_rejection_tab.delete;
8585                 l_tmp2_revenue_rejection_tab.delete;
8586                 l_tmp2_burden_rejection_tab.delete;
8587                 l_tmp2_pfc_cur_rejection_tab.delete;
8588                 l_tmp2_pc_cur_rejection_tab.delete;
8589                 l_tmp2_markup_percent_tab.delete;
8590                 l_tmp2_bill_rate_tab.delete;
8591                 l_tmp2_cost_rate_tab.delete;
8592                 l_tmp2_burden_rate_tab.delete;
8593                 l_tmp2_bill_rate_ovr_tab.delete;
8594                 l_tmp2_cost_rate_ovr_tab.delete;
8595                 l_tmp2_burden_rate_ovr_tab.delete;
8596                 l_tmp2_compile_set_id_tab.delete;
8597 		l_tmp2_rate_based_flag_tab.delete;
8598 
8599         /* Initialize these plsql tables for main rollup rec processing*/
8600             l_bl_raId_tab.delete;
8601             l_bl_sDate_tab.delete;
8602         l_bl_edate_tab.delete;
8603         l_bl_period_name_tab.delete;
8604             l_bl_budget_line_id_tab.delete;
8605             l_bl_txn_curcode_tab.delete;
8606             l_bl_quantity_tab.delete;
8607             l_bl_pjfc_raw_cost_tab.delete;
8608         l_bl_pjfc_burden_cost_tab.delete;
8609         l_bl_pjfc_revenue_tab.delete;
8610         l_bl_cost_rejection_tab.delete;
8611         l_bl_rev_rejection_tab.delete;
8612         l_bl_burden_rejection_tab.delete;
8613         l_bl_pfc_cur_rejection_tab.delete;
8614         l_bl_pc_cur_rejection_tab.delete;
8615         l_bl_pfc_curcode_tab.delete;
8616             l_bl_pfc_cost_rate_type_tab.delete;
8617             l_bl_pfc_cost_exchng_rate_tab.delete;
8618             l_bl_pfc_cost_date_type_tab.delete;
8619             l_bl_pfc_cost_date_tab.delete;
8620             l_bl_pfc_rev_rate_type_tab.delete;
8621             l_bl_pfc_rev_exchange_rate_tab.delete;
8622             l_bl_pfc_rev_date_type_tab.delete;
8623             l_bl_pfc_rev_date_tab.delete;
8624             l_bl_pc_cur_code_tab.delete;
8625             l_bl_pc_cost_rate_type_tab.delete;
8626             l_bl_pc_cost_exchange_rate_tab.delete;
8627             l_bl_pc_cost_date_type_tab.delete;
8628             l_bl_pc_cost_date_tab.delete;
8629             l_bl_project_raw_cost_tab.delete;
8630             l_bl_project_burdened_cost_tab.delete;
8631             l_bl_pc_rev_rate_type_tab.delete;
8632             l_bl_pc_rev_exchange_rate_tab.delete;
8633             l_bl_pc_rev_date_type_tab.delete;
8634             l_bl_pc_rev_date_tab.delete;
8635             l_bl_project_revenue_tab.delete;
8636             l_bl_txn_raw_cost_tab.delete;
8637             l_bl_txn_burdened_cost_tab.delete;
8638             l_bl_txn_revenue_tab.delete;
8639             l_bl_init_quantity_tab.delete;
8640             l_bl_txn_init_raw_cost_tab.delete;
8641             l_bl_txn_init_burden_cost_tab.delete;
8642             l_bl_txn_init_revenue_tab.delete;
8643             l_bl_pfc_init_raw_cost_tab.delete;
8644             l_bl_pfc_init_burden_cost_tab.delete;
8645             l_bl_pfc_init_revenue_tab.delete;
8646             l_bl_pc_init_raw_cost_tab.delete;
8647             l_bl_pc_init_burden_cost_tab.delete;
8648             l_bl_pc_init_revenue_tab.delete;
8649             l_bl_markup_percentage_tab.delete;
8650             l_bl_bill_rate_tab.delete;
8651             l_bl_cost_rate_tab.delete;
8652             l_bl_cost_rate_override_tab.delete;
8653             l_bl_burden_cost_rate_tab.delete;
8654             l_bl_bill_rate_override_tab.delete;
8655             l_bl_burden_rate_override_tab.delete;
8656             l_bl_compiled_set_id_tab.delete;
8657         l_bl_version_type_tab.delete;
8658         l_bl_final_txn_cur_code_tab.delete;
8659         l_bl_CHANGE_REASON_CODE_tab.delete;
8660             l_bl_DESCRIPTION_tab.delete;
8661             l_bl_ATTRIBUTE_CATEGORY_tab.delete;
8662             l_bl_ATTRIBUTE1_tab.delete;
8663             l_bl_ATTRIBUTE2_tab.delete;
8664             l_bl_ATTRIBUTE3_tab.delete;
8665             l_bl_ATTRIBUTE4_tab.delete;
8666             l_bl_ATTRIBUTE5_tab.delete;
8667             l_bl_ATTRIBUTE6_tab.delete;
8668             l_bl_ATTRIBUTE7_tab.delete;
8669             l_bl_ATTRIBUTE8_tab.delete;
8670             l_bl_ATTRIBUTE9_tab.delete;
8671             l_bl_ATTRIBUTE10_tab.delete;
8672             l_bl_ATTRIBUTE11_tab.delete;
8673             l_bl_ATTRIBUTE12_tab.delete;
8674             l_bl_ATTRIBUTE13_tab.delete;
8675             l_bl_ATTRIBUTE14_tab.delete;
8676             l_bl_ATTRIBUTE15_tab.delete;
8677             l_bl_RAW_COST_SOURCE_tab.delete;
8678             l_bl_BURDENED_COST_SOURCE_tab.delete;
8679             l_bl_QUANTITY_SOURCE_tab.delete;
8680             l_bl_REVENUE_SOURCE_tab.delete;
8681             l_bl_PM_PRODUCT_CODE_tab.delete;
8682             l_bl_PM_LINE_REFERENCE_tab.delete;
8683             l_bl_CODE_COMBINATION_ID_tab.delete;
8684             l_bl_CCID_GEN_STATUS_CODE_tab.delete;
8685             l_bl_CCID_GEN_REJ_MESSAGE_tab.delete;
8686             l_bl_BORROWED_REVENUE_tab.delete;
8687             l_bl_TP_REVENUE_IN_tab.delete;
8688             l_bl_TP_REVENUE_OUT_tab.delete;
8689             l_bl_REVENUE_ADJ_tab.delete;
8690             l_bl_LENT_RESOURCE_COST_tab.delete;
8691             l_bl_TP_COST_IN_tab.delete;
8692             l_bl_TP_COST_OUT_tab.delete;
8693             l_bl_COST_ADJ_tab.delete;
8694             l_bl_UNASSIGNED_TIME_COST_tab.delete;
8695             l_bl_UTILIZATION_PERCENT_tab.delete;
8696             l_bl_UTILIZATION_HOURS_tab.delete;
8697             l_bl_UTILIZATION_ADJ_tab.delete;
8698             l_bl_CAPACITY_tab.delete;
8699             l_bl_HEAD_COUNT_tab.delete;
8700             l_bl_HEAD_COUNT_ADJ_tab.delete;
8701             l_bl_BUCKETING_PERIOD_CODE_tab.delete;
8702             l_bl_TXN_DISCOUNT_PERCENT_tab.delete;
8703             l_bl_TRANSFER_PRICE_RATE_tab.delete;
8704             l_bl_BL_CREATED_BY_tab.delete;
8705             l_bl_BL_CREATION_DATE_tab.delete;
8706 	    l_rate_base_flag_tab.delete;
8707     END InitPlsqlTabs;
8708 
8709     PROCEDURE Populate_tmp2Plsql_tab IS
8710 
8711     BEGIN
8712         print_msg('Entered Populate_tmp2Plsql_tab API');
8713         SELECT tmp2.budget_line_id
8714             ,tmp2.resource_assignment_id
8715             ,tmp2.start_date
8716             ,tmp2.txn_currency_code
8717             ,tmp2.quantity
8718             ,tmp2.system_reference_var1   --tmp2.cost_rejection_code
8719             ,tmp2.system_reference_var2   --tmp2.revenue_rejection_code
8720             ,tmp2.system_reference_var3   --tmp2.burden_rejection_code
8721             ,tmp2.system_reference_var4   --tmp2.pfc_cur_conv_rejection_code
8722             ,tmp2.system_reference_var5   --tmp2.pc_cur_conv_rejection_code
8723             ,tmp2.bill_markup_percentage
8724             ,tmp2.bill_rate
8725             ,tmp2.cost_rate
8726             ,tmp2.burden_cost_rate
8727                     ,tmp2.bill_rate_override
8728                     ,tmp2.cost_rate_override
8729                     ,tmp2.burden_cost_rate_override
8730                     ,tmp2.system_reference_num1  --tmp2.compile_set_id
8731 		,NVL(ra.rate_based_flag,'N') /* bug fix: 4900436 */
8732         BULK COLLECT INTO
8733             l_tmp2_budget_line_id_tab
8734             ,l_tmp2_raId_tab
8735             ,l_tmp2_sdate_tab
8736             ,l_tmp2_txn_curr_code_tab
8737                     ,l_tmp2_quantity_tab
8738                     ,l_tmp2_cost_rejection_tab
8739                     ,l_tmp2_revenue_rejection_tab
8740                     ,l_tmp2_burden_rejection_tab
8741                     ,l_tmp2_pfc_cur_rejection_tab
8742                     ,l_tmp2_pc_cur_rejection_tab
8743                     ,l_tmp2_markup_percent_tab
8744                     ,l_tmp2_bill_rate_tab
8745                     ,l_tmp2_cost_rate_tab
8746                     ,l_tmp2_burden_rate_tab
8747                     ,l_tmp2_bill_rate_ovr_tab
8748                     ,l_tmp2_cost_rate_ovr_tab
8749                     ,l_tmp2_burden_rate_ovr_tab
8750                     ,l_tmp2_compile_set_id_tab
8751 		    ,l_tmp2_rate_based_flag_tab /* bug fix: 4900436 */
8752 	FROM pa_fp_spread_calc_tmp2 tmp2
8753             ,pa_resource_assignments ra
8754         WHERE tmp2.budget_version_id = p_budget_version_id
8755         AND ra.resource_assignment_id = tmp2.resource_assignment_id;
8756     END Populate_tmp2Plsql_tab;
8757 
8758 
8759     /* This API will inserts the bulk exceptions records into tmp1 table
8760     * later this tmp1 table will be used for populating tmp2 table with budget line
8761     * details in bulk
8762     */
8763     PROCEDURE Populate_blkExcpRecs
8764                         (p_budget_version_id            IN Number
8765                         ,p_err_error_code_tab           IN pa_plsql_datatypes.char30TabTyp
8766                         ,p_err_budget_line_id_tab       IN pa_plsql_datatypes.NumTabTyp
8767                         ,p_err_raId_tab                 IN pa_plsql_datatypes.NumTabTyp
8768                         ,p_err_txn_cur_tab              IN pa_plsql_datatypes.char30TabTyp
8769                         ,p_err_sdate_tab                IN pa_plsql_datatypes.DateTabTyp
8770                         ,p_err_quantity_tab             IN pa_plsql_datatypes.NumTabTyp
8771                         ,p_err_cost_rate_tab            IN pa_plsql_datatypes.NumTabTyp
8772                         ,p_err_cost_rate_ovr_tab        IN pa_plsql_datatypes.NumTabTyp
8773                         ,p_err_burden_rate_tab          IN pa_plsql_datatypes.NumTabTyp
8774                         ,p_err_burden_rate_ovr_tab      IN pa_plsql_datatypes.NumTabTyp
8775                         ,p_err_compiled_set_id_tab      IN pa_plsql_datatypes.NumTabTyp
8776                         ,p_err_bill_rate_tab            IN pa_plsql_datatypes.NumTabTyp
8777                         ,p_err_bill_rate_ovr_tab        IN pa_plsql_datatypes.NumTabTyp
8778                         ,p_err_markup_percent_tab       IN pa_plsql_datatypes.NumTabTyp
8779                         ,p_err_cost_rejection_tab       IN pa_plsql_datatypes.char30TabTyp
8780                         ,p_err_revenue_rejection_tab    IN pa_plsql_datatypes.char30TabTyp
8781                         ,p_err_burden_rejection_tab     IN pa_plsql_datatypes.char30TabTyp
8782                         ,p_err_pfc_cur_rejection_tab    IN pa_plsql_datatypes.char30TabTyp
8783                         ,p_err_pc_cur_rejection_tab     IN pa_plsql_datatypes.char30TabTyp
8784                         ,x_return_status                OUT NOCOPY VARCHAR2
8785                         ) IS
8786     BEGIN
8787         x_return_status := 'S';
8788         print_msg('Entered Populate_blkExcpRecs API');
8789         DELETE FROM PA_FP_SPREAD_CALC_TMP1;
8790         FORALL i IN p_err_error_code_tab.FIRST .. p_err_error_code_tab.LAST
8791             INSERT INTO PA_FP_SPREAD_CALC_TMP1 tmp
8792         (tmp.budget_line_id
8793          ,tmp.budget_version_id
8794                  ,tmp.resource_assignment_id
8795                  ,tmp.txn_currency_code
8796                  ,tmp.start_date
8797                  ,tmp.quantity
8798                  ,tmp.cost_rate
8799                  ,tmp.cost_rate_override
8800                  ,tmp.burden_cost_rate
8801                  ,tmp.burden_cost_rate_override
8802                  ,tmp.cost_ind_compiled_set_id
8803                  ,tmp.bill_rate
8804                  ,tmp.bill_rate_override
8805                  ,tmp.bill_markup_percentage
8806                  ,tmp.cost_rejection_code
8807                  ,tmp.revenue_rejection_code
8808                  ,tmp.burden_rejection_code
8809                  ,tmp.pfc_cur_conv_rejection_code
8810                  ,tmp.pc_cur_conv_rejection_code
8811         )
8812             SELECT p_err_budget_line_id_tab(i)
8813          ,p_budget_version_id
8814                  ,p_err_raId_tab(i)
8815                  ,p_err_txn_cur_tab(i)
8816                  ,p_err_sdate_tab(i)
8817                  ,p_err_quantity_tab(i)
8818                  ,p_err_cost_rate_tab(i)
8819                  ,p_err_cost_rate_ovr_tab(i)
8820                  ,p_err_burden_rate_tab(i)
8821                  ,p_err_burden_rate_ovr_tab(i)
8822                  ,p_err_compiled_set_id_tab(i)
8823                  ,p_err_bill_rate_tab(i)
8824                  ,p_err_bill_rate_ovr_tab(i)
8825                  ,p_err_markup_percent_tab(i)
8826                  ,p_err_cost_rejection_tab(i)
8827                  ,p_err_revenue_rejection_tab(i)
8828                  ,p_err_burden_rejection_tab(i)
8829                  ,p_err_pfc_cur_rejection_tab(i)
8830                  ,p_err_pc_cur_rejection_tab(i)
8831         FROM DUAL
8832         WHERE p_err_error_code_tab(i) = 1 ;
8833          print_msg('Number of rows inserted ['||sql%rowcount||']');
8834             print_msg('Leaving populate spread calc tmp1 API with retSts['||x_return_status||']');
8835 
8836     EXCEPTION
8837             WHEN OTHERS THEN
8838                     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8839                     fnd_msg_pub.add_exc_msg
8840                     ( p_pkg_name       => 'PA_FP_CALC_PLAN_PKG'
8841                     ,p_procedure_name => 'Populate_blkExcpRecs' );
8842                     print_msg('Exception from Populate_blkExcpRecs ['||substr(SQLERRM,1,240));
8843                     RAISE;
8844 
8845     END Populate_blkExcpRecs;
8846 
8847     /* This API will populate exisiting budget line details(Dup val on index records) into
8848     * into tmp2 table. Later this table will be used for bulk update of budget lines
8849     * and rollup tmp tables
8850     */
8851     PROCEDURE Populate_ExistingBlRecs
8852                         (p_budget_version_id            IN Number
8853                         ,x_return_status                OUT NOCOPY Varchar2
8854                         ) IS
8855     BEGIN
8856             x_return_status := 'S';
8857         print_msg('Entered Populate_ExistingBlRecs API');
8858             DELETE FROM PA_FP_SPREAD_CALC_TMP2;
8859                 INSERT INTO PA_FP_SPREAD_CALC_TMP2 tmp
8860                 (tmp.budget_line_id
8861                  ,tmp.budget_version_id
8862                  ,tmp.resource_assignment_id
8863                  ,tmp.txn_currency_code
8864                  ,tmp.start_date
8865                  ,tmp.quantity
8866                  ,tmp.cost_rate
8867                  ,tmp.cost_rate_override
8868                  ,tmp.burden_cost_rate
8869                  ,tmp.burden_cost_rate_override
8870                  ,tmp.system_reference_num1  --tmp.compiled_set_id
8871                  ,tmp.bill_rate
8872                  ,tmp.bill_rate_override
8873                  ,tmp.bill_markup_percentage
8874                  ,tmp.system_reference_var1  --tmp.cost_rejection_code
8875                  ,tmp.system_reference_var2  --tmp.revenue_rejection_code
8876                  ,tmp.system_reference_var3  --tmp.burden_rejection_code
8877                  ,tmp.system_reference_var4  --tmp.pfc_cur_conv_rejection_code
8878                  ,tmp.system_reference_var5  --tmp.pc_cur_conv_rejection_code
8879              ,tmp.project_currency_code
8880              ,tmp.projfunc_currency_code
8881                 )
8882             SELECT bl.budget_line_id
8883                  ,bl.budget_version_id
8884                  ,bl.resource_assignment_id
8885                  ,bl.txn_currency_code
8886                  ,bl.start_date
8887                  ,bl.quantity
8888                  ,bl.txn_standard_cost_rate
8889                  ,bl.txn_cost_rate_override
8890                  ,bl.burden_cost_rate
8891                  ,bl.burden_cost_rate_override
8892                  ,bl.cost_ind_compiled_set_id
8893                  ,bl.txn_standard_bill_rate
8894                  ,bl.txn_bill_rate_override
8895                  ,bl.txn_markup_percent
8896                  ,bl.cost_rejection_code
8897                  ,bl.revenue_rejection_code
8898                  ,bl.burden_rejection_code
8899                  ,bl.pfc_cur_conv_rejection_code
8900                  ,bl.pc_cur_conv_rejection_code
8901              ,bl.project_currency_code
8902              ,bl.projfunc_currency_code
8903                 FROM pa_budget_lines bl
8904                 WHERE bl.budget_version_id = p_budget_version_id
8905             AND EXISTS (select  null
8906             From pa_fp_spread_calc_tmp1 tmp1
8907             where tmp1.budget_version_id = p_budget_version_id
8908             and  tmp1.resource_assignment_id = bl.resource_assignment_id
8909             and  tmp1.txn_currency_code = bl.txn_currency_code
8910             and  tmp1.start_date = bl.start_date
8911             );
8912         print_msg('Number of lines inserted['||sql%Rowcount||']');
8913 
8914         /* Now store the existing budget line id on tmp1 table to read the values
8915         * from both tables */
8916         UPDATE pa_fp_spread_calc_tmp1 tmp1
8917         SET tmp1.system_reference_num1 = (select tmp2.budget_line_id
8918                       from pa_fp_spread_calc_tmp2 tmp2
8919                       where tmp2.budget_version_id = p_budget_version_id
8920                       and tmp2.resource_assignment_id = tmp1.resource_assignment_id
8921                       and  tmp2.txn_currency_code = tmp1.txn_currency_code
8922                       and  tmp2.start_date = tmp1.start_date
8923                      )
8924         WHERE tmp1.budget_version_id = p_budget_version_id;
8925         print_msg('Number of lines updated['||sql%Rowcount||']');
8926             print_msg('Leaving populate spread calc tmp2 API with retSts['||x_return_status||']');
8927 
8928     EXCEPTION
8929             WHEN OTHERS THEN
8930                     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8931                     fnd_msg_pub.add_exc_msg
8932                     ( p_pkg_name       => 'PA_FP_CALC_PLAN_PKG'
8933                     ,p_procedure_name => 'Populate_ExistingBlRecs' );
8934                     print_msg('Exception from Populate_ExistingBlRecs api['|| substr(SQLERRM,1,240));
8935                     RAISE;
8936 
8937     END Populate_ExistingBlRecs;
8938 
8939 BEGIN
8940 
8941         x_return_status := FND_API.G_RET_STS_SUCCESS;
8942         l_return_status := 'S';
8943     If p_pa_debug_mode = 'Y' Then
8944             pa_debug.init_err_stack('PA_FP_CALC_PLAN_PKG.BLK_update_budget_lines');
8945     End If;
8946 	IF P_PA_DEBUG_MODE = 'Y' Then
8947         print_msg('Entered PA_FP_CALC_PLAN_PKG.BLK_update_budget_lines');
8948 	End If;
8949         l_stage             := 4000;
8950     InitPlsqlTabs;
8951     OPEN Cur_RollupLines;
8952     FETCH Cur_RollupLines BULK COLLECT INTO
8953             l_bl_raId_tab
8954             ,l_bl_sDate_tab
8955         ,l_bl_edate_tab
8956         ,l_bl_period_name_tab
8957             ,l_bl_budget_line_id_tab
8958             ,l_bl_txn_curcode_tab
8959             ,l_bl_quantity_tab
8960             ,l_bl_pjfc_raw_cost_tab
8961         ,l_bl_pjfc_burden_cost_tab
8962         ,l_bl_pjfc_revenue_tab
8963         ,l_bl_cost_rejection_tab
8964         ,l_bl_rev_rejection_tab
8965         ,l_bl_burden_rejection_tab
8966         ,l_bl_pfc_cur_rejection_tab
8967         ,l_bl_pc_cur_rejection_tab
8968         ,l_bl_pfc_curcode_tab
8969             ,l_bl_pfc_cost_rate_type_tab
8970             ,l_bl_pfc_cost_exchng_rate_tab
8971             ,l_bl_pfc_cost_date_type_tab
8972             ,l_bl_pfc_cost_date_tab
8973             ,l_bl_pfc_rev_rate_type_tab
8974             ,l_bl_pfc_rev_exchange_rate_tab
8975             ,l_bl_pfc_rev_date_type_tab
8976             ,l_bl_pfc_rev_date_tab
8977             ,l_bl_pc_cur_code_tab
8978             ,l_bl_pc_cost_rate_type_tab
8979             ,l_bl_pc_cost_exchange_rate_tab
8980             ,l_bl_pc_cost_date_type_tab
8981             ,l_bl_pc_cost_date_tab
8982             ,l_bl_project_raw_cost_tab
8983             ,l_bl_project_burdened_cost_tab
8984             ,l_bl_pc_rev_rate_type_tab
8985             ,l_bl_pc_rev_exchange_rate_tab
8986             ,l_bl_pc_rev_date_type_tab
8987             ,l_bl_pc_rev_date_tab
8988             ,l_bl_project_revenue_tab
8989             ,l_bl_txn_raw_cost_tab
8990             ,l_bl_txn_burdened_cost_tab
8991             ,l_bl_txn_revenue_tab
8992             ,l_bl_init_quantity_tab
8993             ,l_bl_txn_init_raw_cost_tab
8994             ,l_bl_txn_init_burden_cost_tab
8995             ,l_bl_txn_init_revenue_tab
8996             ,l_bl_pfc_init_raw_cost_tab
8997             ,l_bl_pfc_init_burden_cost_tab
8998             ,l_bl_pfc_init_revenue_tab
8999             ,l_bl_pc_init_raw_cost_tab
9000             ,l_bl_pc_init_burden_cost_tab
9001             ,l_bl_pc_init_revenue_tab
9002             ,l_bl_markup_percentage_tab
9003             ,l_bl_bill_rate_tab
9004             ,l_bl_cost_rate_tab
9005             ,l_bl_cost_rate_override_tab
9006             ,l_bl_burden_cost_rate_tab
9007             ,l_bl_bill_rate_override_tab
9008             ,l_bl_burden_rate_override_tab
9009             ,l_bl_compiled_set_id_tab
9010         ,l_bl_version_type_tab
9011         ,l_bl_final_txn_cur_code_tab
9012         ,l_bl_CHANGE_REASON_CODE_tab
9013             ,l_bl_DESCRIPTION_tab
9014             ,l_bl_ATTRIBUTE_CATEGORY_tab
9015             ,l_bl_ATTRIBUTE1_tab
9016             ,l_bl_ATTRIBUTE2_tab
9017             ,l_bl_ATTRIBUTE3_tab
9018             ,l_bl_ATTRIBUTE4_tab
9019             ,l_bl_ATTRIBUTE5_tab
9020             ,l_bl_ATTRIBUTE6_tab
9021             ,l_bl_ATTRIBUTE7_tab
9022             ,l_bl_ATTRIBUTE8_tab
9023             ,l_bl_ATTRIBUTE9_tab
9024             ,l_bl_ATTRIBUTE10_tab
9025             ,l_bl_ATTRIBUTE11_tab
9026             ,l_bl_ATTRIBUTE12_tab
9027             ,l_bl_ATTRIBUTE13_tab
9028             ,l_bl_ATTRIBUTE14_tab
9029             ,l_bl_ATTRIBUTE15_tab
9030             ,l_bl_RAW_COST_SOURCE_tab
9031             ,l_bl_BURDENED_COST_SOURCE_tab
9032             ,l_bl_QUANTITY_SOURCE_tab
9033             ,l_bl_REVENUE_SOURCE_tab
9034             ,l_bl_PM_PRODUCT_CODE_tab
9035             ,l_bl_PM_LINE_REFERENCE_tab
9036             ,l_bl_CODE_COMBINATION_ID_tab
9037             ,l_bl_CCID_GEN_STATUS_CODE_tab
9038             ,l_bl_CCID_GEN_REJ_MESSAGE_tab
9039             ,l_bl_BORROWED_REVENUE_tab
9040             ,l_bl_TP_REVENUE_IN_tab
9041             ,l_bl_TP_REVENUE_OUT_tab
9042             ,l_bl_REVENUE_ADJ_tab
9043             ,l_bl_LENT_RESOURCE_COST_tab
9044             ,l_bl_TP_COST_IN_tab
9045             ,l_bl_TP_COST_OUT_tab
9046             ,l_bl_COST_ADJ_tab
9047             ,l_bl_UNASSIGNED_TIME_COST_tab
9048             ,l_bl_UTILIZATION_PERCENT_tab
9049             ,l_bl_UTILIZATION_HOURS_tab
9050             ,l_bl_UTILIZATION_ADJ_tab
9051             ,l_bl_CAPACITY_tab
9052             ,l_bl_HEAD_COUNT_tab
9053             ,l_bl_HEAD_COUNT_ADJ_tab
9054             ,l_bl_BUCKETING_PERIOD_CODE_tab
9055             ,l_bl_TXN_DISCOUNT_PERCENT_tab
9056             ,l_bl_TRANSFER_PRICE_RATE_tab
9057             ,l_bl_BL_CREATED_BY_tab
9058             ,l_bl_BL_CREATION_DATE_tab
9059 	    ,l_rate_base_flag_tab;
9060     CLOSE Cur_RollupLines;
9061 
9062     IF l_bl_budget_line_id_tab.COUNT > 0 THEN  --{
9063            <<NEW_BUDGET_LINE>>
9064 	IF P_PA_DEBUG_MODE = 'Y' Then
9065         print_msg('Entered NEW_BUDGET_LINE block');
9066 	End If;
9067         BEGIN
9068             /* Call the update reporting line by passing -ve amounts of the existsing budgetline
9069              * before update and +ve amounts of budget line after update. so that the delta passing to the reporting
9070              * will be always in synch with the budget lines
9071                      */
9072                 IF NVL(g_rollup_required_flag,'N') = 'Y'  THEN
9073             FOR blRec IN cur_blAmts LOOP
9074               IF blRec.budget_line_id is NOT NULL Then
9075                     --print_msg('Getting Budget line Amts for budget_line_id => '||to_char(blrec.budget_line_id));
9076                     l_stage := 4028;
9077                 --print_msg('Calling Add_Toreporting_Tabls api by old -ve amts of bl['||(blRec.quantity * -1)||']Cur['||blRec.txn_currency_code||']');
9078                 PA_FP_CALC_PLAN_PKG.Add_Toreporting_Tabls
9079                         (p_calling_module               => 'CALCULATE_API'
9080                         ,p_activity_code                => 'UPDATE'
9081                         ,p_budget_version_id            => p_budget_version_id
9082                         ,p_budget_line_id               => blRec.budget_line_id
9083                         ,p_resource_assignment_id       => blRec.resource_assignment_id
9084                         ,p_start_date                   => blRec.start_date
9085                         ,p_end_date                     => blRec.end_date
9086                         ,p_period_name                  => blRec.period_name
9087                         ,p_txn_currency_code            => blRec.txn_currency_code
9088                         ,p_quantity                     => blRec.quantity * -1
9089                         ,p_txn_raw_cost                 => blRec.txn_raw_cost * -1
9090                         ,p_txn_burdened_cost            => blRec.txn_burdened_cost * -1
9091                         ,p_txn_revenue                  => blRec.txn_revenue * -1
9092                         ,p_project_currency_code        => blRec.project_currency_code
9093                         ,p_project_raw_cost             => blRec.project_raw_cost * -1
9094                         ,p_project_burdened_cost        => blRec.project_burdened_cost * -1
9095                         ,p_project_revenue              => blRec.project_revenue * -1
9096                         ,p_projfunc_currency_code       => blRec.projfunc_currency_code
9097                         ,p_projfunc_raw_cost            => blRec.projfunc_raw_cost * -1
9098                         ,p_projfunc_burdened_cost       => blRec.projfunc_burdened_cost * -1
9099                         ,p_projfunc_revenue             => blRec.projfunc_revenue * -1
9100 			,p_rep_line_mode               => 'REVERSAL'
9101                 	,x_msg_data                     => l_rep_msg_data
9102                         ,x_return_status                => l_rep_return_status
9103                         );
9104                 --print_msg('After Calling update_reporting_from_b_lines for BdLine['||blRec.budget_line_id||']');
9105                 --print_msg('RtSts['||l_rep_return_status||']x_msgData['||l_rep_msg_data||']');
9106                     IF l_rep_return_status <> 'S' Then
9107                     l_error_msg_code := l_rep_msg_data;
9108                     EXIT;
9109                 END IF;
9110                    END IF;
9111              END LOOP;
9112           END IF ; -- g_rollup requried = Y
9113 
9114             /* update budget line with the new currency and amounts If there budget line is already with
9115         * the same currency the update will fail with duplicate value on index.
9116         * in such case update the existing budget line and overrwrite all the amounts
9117         * with the new bugdetlines
9118         */
9119         --print_msg('Bulk updating budget lines');
9120         /* Now Bulk Update the budget Lines */
9121         FORALL i IN l_bl_budget_line_id_tab.FIRST .. l_bl_budget_line_id_tab.LAST  SAVE EXCEPTIONS
9122             UPDATE pa_budget_lines bl
9123         SET bl.txn_currency_code             = l_bl_txn_curcode_tab(i)
9124                  ,bl.quantity                        = l_bl_quantity_tab(i)
9125 		 /* Bug fix:4900436 */
9126                  ,bl.display_quantity                = decode(g_wp_version_flag,'Y',l_bl_quantity_tab(i)
9127                                                          ,Decode(l_rate_base_flag_tab(i),'N',NULL,l_bl_quantity_tab(i)))
9128                  /* End of bug fix:4900436 */
9129                  ,bl.raw_cost                        = l_bl_pjfc_raw_cost_tab(i)
9130                  ,bl.burdened_cost                   = l_bl_pjfc_burden_cost_tab(i)
9131                  ,bl.revenue                         = l_bl_pjfc_revenue_tab(i)
9132                  ,bl.cost_rejection_code             = l_bl_cost_rejection_tab(i)
9133                  ,bl.revenue_rejection_code          = l_bl_rev_rejection_tab(i)
9134                  ,bl.burden_rejection_code           = l_bl_burden_rejection_tab(i)
9135                  ,bl.pfc_cur_conv_rejection_code     = l_bl_pfc_cur_rejection_tab(i)
9136                  ,bl.pc_cur_conv_rejection_code      = l_bl_pc_cur_rejection_tab(i)
9137                  ,bl.projfunc_currency_code          = l_bl_pfc_curcode_tab(i)
9138                  ,bl.projfunc_cost_rate_type         = l_bl_pfc_cost_rate_type_tab(i)
9139                  ,bl.projfunc_cost_exchange_rate     = l_bl_pfc_cost_exchng_rate_tab(i)
9140                  ,bl.projfunc_cost_rate_date_type    = l_bl_pfc_cost_date_type_tab(i)
9141                  ,bl.projfunc_cost_rate_date         = l_bl_pfc_cost_date_tab(i)
9142                  ,bl.projfunc_rev_rate_type          = l_bl_pfc_rev_rate_type_tab(i)
9143                  ,bl.projfunc_rev_exchange_rate      = l_bl_pfc_rev_exchange_rate_tab(i)
9144                  ,bl.projfunc_rev_rate_date_type     = l_bl_pfc_rev_date_type_tab(i)
9145                  ,bl.projfunc_rev_rate_date          = l_bl_pfc_rev_date_tab(i)
9146                  ,bl.project_currency_code           = l_bl_pc_cur_code_tab(i)
9147                  ,bl.project_cost_rate_type          = l_bl_pc_cost_rate_type_tab(i)
9148                  ,bl.project_cost_exchange_rate      = l_bl_pc_cost_exchange_rate_tab(i)
9149                  ,bl.project_cost_rate_date_type     = l_bl_pc_cost_date_type_tab(i)
9150                  ,bl.project_cost_rate_date          = l_bl_pc_cost_date_tab(i)
9151                  ,bl.project_raw_cost                = l_bl_project_raw_cost_tab(i)
9152                  ,bl.project_burdened_cost           = l_bl_project_burdened_cost_tab(i)
9153                  ,bl.project_rev_rate_type           = l_bl_pc_rev_rate_type_tab(i)
9154                  ,bl.project_rev_exchange_rate       = l_bl_pc_rev_exchange_rate_tab(i)
9155                  ,bl.project_rev_rate_date_type      = l_bl_pc_rev_date_type_tab(i)
9156                  ,bl.project_rev_rate_date           = l_bl_pc_rev_date_tab(i)
9157                  ,bl.project_revenue                 = l_bl_project_revenue_tab(i)
9158                  ,bl.txn_raw_cost                    = l_bl_txn_raw_cost_tab(i)
9159                  ,bl.txn_burdened_cost               = l_bl_txn_burdened_cost_tab(i)
9160                  ,bl.txn_revenue                     = l_bl_txn_revenue_tab(i)
9161                  ,bl.txn_markup_percent              = l_bl_markup_percentage_tab(i)
9162                  ,bl.txn_standard_bill_rate          = l_bl_bill_rate_tab(i)
9163                  ,bl.txn_standard_cost_rate          = l_bl_cost_rate_tab(i)
9164                  ,bl.txn_cost_rate_override          = l_bl_cost_rate_override_tab(i)
9165                  ,bl.burden_cost_rate                = l_bl_burden_cost_rate_tab(i)
9166                  ,bl.txn_bill_rate_override          = l_bl_bill_rate_override_tab(i)
9167                  ,bl.burden_cost_rate_override       = l_bl_burden_rate_override_tab(i)
9168                  ,bl.cost_ind_compiled_set_id        = l_bl_compiled_set_id_tab(i)
9169                  ,bl.last_update_date                = l_sysdate           ---sysdate
9170                  ,bl.last_updated_by                 = l_last_updated_by   ---fnd_global.user_id
9171                  ,bl.last_update_login               = l_last_login_id     ---fnd_global.login_id
9172                  ,bl.CHANGE_REASON_CODE = l_bl_CHANGE_REASON_CODE_tab(i)     /*Bug4224464 Removed the nvl checks from dff's
9173                   ,change reason code, PM_PRODUCT_CODE, PM_BUDGET_LINE_REFERENCE, and description columns. The cursor
9174                   definitions in copy_blattributes have been modified to handle the G_MISS_XXX values for these columns.*/
9175                  ,bl.DESCRIPTION = l_bl_DESCRIPTION_tab(i)
9176                  ,bl.ATTRIBUTE_CATEGORY = l_bl_ATTRIBUTE_CATEGORY_tab(i)
9177                  ,bl.ATTRIBUTE1 = l_bl_ATTRIBUTE1_tab(i)
9178                  ,bl.ATTRIBUTE2 = l_bl_ATTRIBUTE2_tab(i)
9179                  ,bl.ATTRIBUTE3 = l_bl_ATTRIBUTE3_tab(i)
9180                  ,bl.ATTRIBUTE4 = l_bl_ATTRIBUTE4_tab(i)
9181                  ,bl.ATTRIBUTE5 = l_bl_ATTRIBUTE5_tab(i)
9182                  ,bl.ATTRIBUTE6 = l_bl_ATTRIBUTE6_tab(i)
9183                  ,bl.ATTRIBUTE7 = l_bl_ATTRIBUTE7_tab(i)
9184                  ,bl.ATTRIBUTE8 = l_bl_ATTRIBUTE8_tab(i)
9185                  ,bl.ATTRIBUTE9 = l_bl_ATTRIBUTE9_tab(i)
9186                  ,bl.ATTRIBUTE10 = l_bl_ATTRIBUTE10_tab(i)
9187                  ,bl.ATTRIBUTE11 = l_bl_ATTRIBUTE11_tab(i)
9188                  ,bl.ATTRIBUTE12 = l_bl_ATTRIBUTE12_tab(i)
9189                  ,bl.ATTRIBUTE13 = l_bl_ATTRIBUTE13_tab(i)
9190                  ,bl.ATTRIBUTE14 = l_bl_ATTRIBUTE14_tab(i)
9191                  ,bl.ATTRIBUTE15 = l_bl_ATTRIBUTE15_tab(i)
9192                  ,bl.RAW_COST_SOURCE = nvl(l_bl_RAW_COST_SOURCE_tab(i),bl.RAW_COST_SOURCE)
9193                  ,bl.BURDENED_COST_SOURCE = nvl(l_bl_BURDENED_COST_SOURCE_tab(i),bl.BURDENED_COST_SOURCE)
9194                  ,bl.QUANTITY_SOURCE = nvl(l_bl_QUANTITY_SOURCE_tab(i),bl.QUANTITY_SOURCE)
9195                  ,bl.REVENUE_SOURCE = nvl(l_bl_REVENUE_SOURCE_tab(i),bl.REVENUE_SOURCE)
9196                  ,bl.PM_PRODUCT_CODE = l_bl_PM_PRODUCT_CODE_tab(i)
9197                  ,bl.PM_BUDGET_LINE_REFERENCE = l_bl_PM_LINE_REFERENCE_tab(i)
9198                  ,bl.CODE_COMBINATION_ID = nvl(l_bl_CODE_COMBINATION_ID_tab(i),bl.CODE_COMBINATION_ID)
9199                  ,bl.CCID_GEN_STATUS_CODE = nvl(l_bl_CCID_GEN_STATUS_CODE_tab(i),bl.CCID_GEN_STATUS_CODE)
9200                  ,bl.CCID_GEN_REJ_MESSAGE = nvl(l_bl_CCID_GEN_REJ_MESSAGE_tab(i),bl.CCID_GEN_REJ_MESSAGE)
9201                  ,bl.BORROWED_REVENUE = nvl(l_bl_BORROWED_REVENUE_tab(i),bl.BORROWED_REVENUE)
9202                  ,bl.TP_REVENUE_IN = nvl(l_bl_TP_REVENUE_IN_tab(i),bl.TP_REVENUE_IN)
9203                  ,bl.TP_REVENUE_OUT = nvl(l_bl_TP_REVENUE_OUT_tab(i),bl.TP_REVENUE_OUT)
9204                  ,bl.REVENUE_ADJ  = nvl(l_bl_REVENUE_ADJ_tab(i),bl.REVENUE_ADJ)
9205                  ,bl.LENT_RESOURCE_COST = nvl(l_bl_LENT_RESOURCE_COST_tab(i),bl.LENT_RESOURCE_COST)
9206                  ,bl.TP_COST_IN   = nvl(l_bl_TP_COST_IN_tab(i),bl.TP_COST_IN)
9207                  ,bl.TP_COST_OUT = nvl(l_bl_TP_COST_OUT_tab(i),bl.TP_COST_OUT)
9208                  ,bl.COST_ADJ = nvl(l_bl_COST_ADJ_tab(i),bl.COST_ADJ)
9209                  ,bl.UNASSIGNED_TIME_COST = nvl(l_bl_UNASSIGNED_TIME_COST_tab(i),bl.UNASSIGNED_TIME_COST)
9210                  ,bl.UTILIZATION_PERCENT = nvl(l_bl_UTILIZATION_PERCENT_tab(i),bl.UTILIZATION_PERCENT)
9211                  ,bl.UTILIZATION_HOURS = nvl(l_bl_UTILIZATION_HOURS_tab(i),bl.UTILIZATION_HOURS)
9212                  ,bl.UTILIZATION_ADJ = nvl(l_bl_UTILIZATION_ADJ_tab(i),bl.UTILIZATION_ADJ)
9213                  ,bl.CAPACITY = nvl(l_bl_CAPACITY_tab(i),bl.CAPACITY)
9214                  ,bl.HEAD_COUNT = nvl(l_bl_HEAD_COUNT_tab(i),bl.HEAD_COUNT)
9215                  ,bl.HEAD_COUNT_ADJ =nvl(l_bl_HEAD_COUNT_ADJ_tab(i),bl.HEAD_COUNT_ADJ)
9216                  ,bl.BUCKETING_PERIOD_CODE = nvl(l_bl_BUCKETING_PERIOD_CODE_tab(i),bl.BUCKETING_PERIOD_CODE)
9217                  ,bl.TXN_DISCOUNT_PERCENTAGE = nvl(l_bl_TXN_DISCOUNT_PERCENT_tab(i),bl.TXN_DISCOUNT_PERCENTAGE)
9218                  ,bl.TRANSFER_PRICE_RATE = nvl(l_bl_TRANSFER_PRICE_RATE_tab(i),bl.TRANSFER_PRICE_RATE)
9219                  ,bl.CREATED_BY   = nvl(l_bl_BL_CREATED_BY_tab(i),bl.CREATED_BY)
9220                  ,bl.CREATION_DATE   = nvl(l_bl_BL_CREATION_DATE_tab(i),bl.CREATION_DATE)
9221             WHERE bl.budget_line_id  = l_bl_budget_line_id_tab(i);
9222         /* Bug fix: returning clause is taking more time performance hit so commenting it out
9223         RETURNING bl.budget_line_id
9224                         ,bl.txn_raw_cost
9225                         ,bl.txn_burdened_cost
9226                         ,bl.txn_revenue
9227                         ,bl.project_raw_cost
9228                         ,bl.project_burdened_cost
9229                         ,bl.project_revenue
9230                         ,bl.raw_cost      --projfunc_raw_cost
9231                         ,bl.burdened_cost --projfunc_burdened_cost
9232                         ,bl.revenue       --projfunc_revenue
9233                         ,bl.quantity
9234                         ,bl.start_date
9235                         ,bl.end_date
9236                         ,bl.period_name
9237                         ,bl.resource_assignment_id
9238                         ,bl.txn_currency_code
9239                         ,bl.project_currency_code
9240                         ,bl.projfunc_currency_code
9241                         ,bl.cost_rejection_code
9242                         ,bl.burden_rejection_code
9243                         ,bl.revenue_rejection_code
9244                         ,bl.pfc_cur_conv_rejection_code
9245                         ,bl.pc_cur_conv_rejection_code
9246         BULK COLLECT INTO
9247                         l_rep_budget_line_id_tab
9248                         ,l_rep_txn_raw_cost_tab
9249                         ,l_rep_txn_burdened_cost_tab
9250                         ,l_rep_txn_revenue_tab
9251                         ,l_rep_prj_raw_cost_tab
9252                         ,l_rep_prj_burdened_cost_tab
9253                         ,l_rep_prj_revenue_tab
9254                         ,l_rep_pfc_raw_cost_tab
9255                         ,l_rep_pfc_burdened_cost_tab
9256                         ,l_rep_pfc_revenue_tab
9257                         ,l_rep_quantity_tab
9258                         ,l_rep_start_date_tab
9259                         ,l_rep_end_date_tab
9260                         ,l_rep_period_name_tab
9261                         ,l_rep_resAss_id_tab
9262                         ,l_rep_txn_curr_code_tab
9263                         ,l_rep_prj_curr_code_tab
9264                         ,l_rep_pfc_curr_code_tab
9265                         ,l_rep_cost_rejection_tab
9266                         ,l_rep_burden_rejection_tab
9267                         ,l_rep_revenue_rejection_tab
9268                         ,l_rep_pfc_cur_rejection_tab
9269                         ,l_rep_pc_cur_rejection_tab ;
9270          ***/
9271         --print_msg('Number of rows bulk updated ['||sql%rowcount||']');
9272         /* now pass the +ve values for the updated budget lines based on the processed flag from the tmp table */
9273                 IF NVL(g_rollup_required_flag,'N') = 'Y'  THEN
9274                   FOR blRec IN cur_blAmts LOOP
9275                    IF blRec.budget_line_id is NOT NULL Then
9276                        --print_msg('Getting Budget line Amts for budget_line_id => '||to_char(blrec.budget_line_id));
9277                        l_stage := 4022;
9278                        --print_msg('Calling Add_Toreporting_Tabls api by sending old +ve amts of bl['||(blRec.quantity)||']Cur['||blRec.txn_currency_code||']');
9279                        PA_FP_CALC_PLAN_PKG.Add_Toreporting_Tabls
9280                        (p_calling_module               => 'CALCULATE_API'
9281                        ,p_activity_code                => 'UPDATE'
9282                        ,p_budget_version_id            => p_budget_version_id
9283                        ,p_budget_line_id               => blRec.budget_line_id
9284                        ,p_resource_assignment_id       => blRec.resource_assignment_id
9285                        ,p_start_date                   => blRec.start_date
9286                        ,p_end_date                     => blRec.end_date
9287                        ,p_period_name                  => blRec.period_name
9288                        ,p_txn_currency_code            => blRec.txn_currency_code
9289                        ,p_quantity                     => blRec.quantity
9290                        ,p_txn_raw_cost                 => blRec.txn_raw_cost
9291                        ,p_txn_burdened_cost            => blRec.txn_burdened_cost
9292                        ,p_txn_revenue                  => blRec.txn_revenue
9293                        ,p_project_currency_code        => blRec.project_currency_code
9294                        ,p_project_raw_cost             => blRec.project_raw_cost
9295                        ,p_project_burdened_cost        => blRec.project_burdened_cost
9296                        ,p_project_revenue              => blRec.project_revenue
9297                        ,p_projfunc_currency_code       => blRec.projfunc_currency_code
9298                        ,p_projfunc_raw_cost            => blRec.projfunc_raw_cost
9299                        ,p_projfunc_burdened_cost       => blRec.projfunc_burdened_cost
9300                        ,p_projfunc_revenue             => blRec.projfunc_revenue
9301 		       ,p_rep_line_mode               => 'POSITIVE_ENTRY'
9302                        ,x_msg_data                     => l_rep_msg_data
9303                        ,x_return_status                => l_rep_return_status
9304                        );
9305                        --print_msg('After Calling update_reporting_from_b_lines for BdLine['||blRec.budget_line_id||']');
9306                        --print_msg('RtSts['||l_rep_return_status||']x_msgData['||l_rep_msg_data||']');
9307                        IF l_rep_return_status <> 'S' Then
9308                             l_error_msg_code := l_rep_msg_data;
9309                             EXIT;
9310                        END IF;
9311                     END IF;
9312                    END LOOP;
9313                 END IF ; -- g_rollup requried = Y
9314         /* Note If there is any dup val on index exception then control goes to exception portion
9315         * so the same call has to make in the exception portion alos */
9316             --print_msg('End of bulk budget Lines update ');
9317 
9318         EXCEPTION
9319           WHEN OTHERS THEN
9320         print_msg('Entered bulk exception portion');
9321         /* Now process the exceptions lines one-by-one */
9322         l_exception_return_status := 'S';
9323             v_NumErrors := SQL%BULK_EXCEPTIONS.COUNT;
9324         l_x_cntr := 0;
9325         FOR v_Count IN 1..v_NumErrors LOOP   --{
9326             l_x_cntr := l_x_cntr +1;
9327                 v_index_position  :=SQL%BULK_EXCEPTIONS(v_Count).error_index;
9328                 v_error_code      :=SQL%BULK_EXCEPTIONS(v_Count).error_code;
9329             l_err_error_code_tab(l_x_cntr)  := SQL%BULK_EXCEPTIONS(v_Count).error_code;
9330             l_err_budget_line_id_tab(l_x_cntr)  := l_bl_budget_line_id_tab(v_index_position);
9331             l_err_raId_tab(l_x_cntr)        := l_bl_raId_Tab(v_index_position);
9332             l_err_txn_cur_tab(l_x_cntr)     := l_bl_txn_curcode_tab(v_index_position);
9333             l_err_sdate_tab(l_x_cntr)       := l_bl_sdate_tab(v_index_position);
9334             l_err_quantity_tab(l_x_cntr)    := l_bl_quantity_tab(v_index_position);
9335             l_err_cost_rate_tab(l_x_cntr)   := l_bl_cost_rate_tab(v_index_position);
9336             l_err_cost_rate_ovr_tab(l_x_cntr)   := l_bl_cost_rate_override_tab(v_index_position);
9337             l_err_burden_rate_tab(l_x_cntr)     := l_bl_burden_cost_rate_tab(v_index_position);
9338             l_err_burden_rate_ovr_tab(l_x_cntr) := l_bl_burden_rate_override_tab(v_index_position);
9339             l_err_compiled_set_id_tab(l_x_cntr) := l_bl_compiled_set_id_tab(v_index_position);
9340             l_err_bill_rate_tab(l_x_cntr)   := l_bl_bill_rate_tab(v_index_position);
9341             l_err_bill_rate_ovr_tab(l_x_cntr)   := l_bl_bill_rate_override_tab(v_index_position);
9342             l_err_markup_percent_tab(l_x_cntr)  := l_bl_markup_percentage_tab(v_index_position);
9343             l_err_cost_rejection_tab(l_x_cntr)  := l_bl_cost_rejection_tab(v_index_position);
9344             l_err_revenue_rejection_tab(l_x_cntr) :=l_bl_rev_rejection_tab(v_index_position);
9345             l_err_burden_rejection_tab(l_x_cntr) := l_bl_burden_rejection_tab(v_index_position);
9346             l_err_pfc_cur_rejection_tab(l_x_cntr) := l_bl_pfc_cur_rejection_tab(v_index_position);
9347             l_err_pc_cur_rejection_tab(l_x_cntr) := l_bl_pc_cur_rejection_tab(v_index_position);
9348 
9349                 If v_error_code <> 1 then -- 1 means unique constraint voilation.
9350             l_exception_return_status := 'U';
9351             l_return_status := 'U';
9352             x_return_status := l_exception_return_status;
9353             l_error_msg_code := SQLERRM(0 - SQL%BULK_EXCEPTIONS(v_Count).error_code);
9354             -- add error message to stack and finall raise the error
9355             PA_UTILS.ADD_MESSAGE
9356                         (p_app_short_name => 'PA'
9357             ,p_msg_name       => v_error_code||'-'||l_error_msg_code
9358                     ,p_token1         => 'G_PROJECT_NAME'
9359                     ,p_value1         => g_project_name
9360                     ,p_token2         => 'G_RESOURCE_ASSIGNMENT_ID'
9361                     ,p_value2         => l_err_raId_tab(l_x_cntr)
9362                     ,p_token3         => 'G_TXN_CURRENCY_CODE'
9363                     ,p_value3         => l_err_txn_cur_tab(l_x_cntr)
9364             ,p_token4         => 'G_BUDGET_LINE_ID'
9365             ,p_value4         => l_err_budget_line_id_tab(l_x_cntr)
9366             );
9367             End If;
9368 
9369         END LOOP; --}
9370         END ;
9371 
9372         /* Now process the exception records in bulk */
9373        <<EXISTING_BUDGET_LINES>>
9374         IF l_exception_return_status = 'S' AND l_err_error_code_tab.COUNT > 0 THEN --{
9375 	IF P_PA_DEBUG_MODE = 'Y' Then
9376         print_msg('Entered EXISTING_BUDGET_LINES block:NUM ROWS UPTD['||l_rep_budget_line_id_tab.COUNT||']REJECTED['||l_err_budget_line_id_tab.COUNT||']');
9377 	End If;
9378 
9379         /*We should pass the +ve values for the updated rows. having returning clause in the bulk update returns the
9380                  * rejected records with the updated values, so the returning clause cannot be used. In order to pass the correct bl values
9381                  * update the rollup tmp processed flag with N for the rejected records */
9382         FORALL i IN l_err_error_code_tab.FIRST .. l_err_error_code_tab.LAST
9383         UPDATE PA_FP_ROLLUP_TMP tmp
9384         SET tmp.processed_flag = 'N'
9385         WHERE tmp.budget_line_id = l_err_budget_line_id_tab(i);
9386                 /* now pass the +ve values for the updated budget lines based on the processed flag from the tmp table */
9387                 IF NVL(g_rollup_required_flag,'N') = 'Y'  THEN
9388                   FOR blRec IN cur_blAmts LOOP
9389                    IF blRec.budget_line_id is NOT NULL Then
9390                        --print_msg('Getting Budget line Amts for budget_line_id => '||to_char(blrec.budget_line_id));
9391                        l_stage := 4028;
9392                        --print_msg('Calling Add_Toreporting_Tabls api by sending old +ve amts of bl['||(blRec.quantity)||']Cur['||blRec.txn_currency_code||']');
9393                        PA_FP_CALC_PLAN_PKG.Add_Toreporting_Tabls
9394                        (p_calling_module               => 'CALCULATE_API'
9395                        ,p_activity_code                => 'UPDATE'
9396                        ,p_budget_version_id            => p_budget_version_id
9397                        ,p_budget_line_id               => blRec.budget_line_id
9398                        ,p_resource_assignment_id       => blRec.resource_assignment_id
9399                        ,p_start_date                   => blRec.start_date
9400                        ,p_end_date                     => blRec.end_date
9401                        ,p_period_name                  => blRec.period_name
9402                        ,p_txn_currency_code            => blRec.txn_currency_code
9403                        ,p_quantity                     => blRec.quantity
9404                        ,p_txn_raw_cost                 => blRec.txn_raw_cost
9405                        ,p_txn_burdened_cost            => blRec.txn_burdened_cost
9406                        ,p_txn_revenue                  => blRec.txn_revenue
9407                        ,p_project_currency_code        => blRec.project_currency_code
9408                        ,p_project_raw_cost             => blRec.project_raw_cost
9409                        ,p_project_burdened_cost        => blRec.project_burdened_cost
9410                        ,p_project_revenue              => blRec.project_revenue
9411                        ,p_projfunc_currency_code       => blRec.projfunc_currency_code
9412                        ,p_projfunc_raw_cost            => blRec.projfunc_raw_cost
9413                        ,p_projfunc_burdened_cost       => blRec.projfunc_burdened_cost
9414                        ,p_projfunc_revenue             => blRec.projfunc_revenue
9415 		       	,p_rep_line_mode               => 'REVERSAL'  -- special case passing reversal of reversal entries
9416                        ,x_msg_data                     => l_rep_msg_data
9417                        ,x_return_status                => l_rep_return_status
9418                        );
9419                        --print_msg('After Calling update_reporting_from_b_lines for BdLine['||blRec.budget_line_id||']');
9420                        --print_msg('RtSts['||l_rep_return_status||']x_msgData['||l_rep_msg_data||']');
9421                        IF l_rep_return_status <> 'S' Then
9422                             l_error_msg_code := l_rep_msg_data;
9423                             EXIT;
9424                        END IF;
9425                     END IF;
9426                    END LOOP;
9427                 END IF ; -- g_rollup requried = Y
9428                 /* Note If there is any dup val on index exception then control comes here. so partly updated budget lines
9429                 * must be passed to rollup api with +ve values */
9430         /* Now populate tmp1 table with bulk exception records */
9431         --print_msg('Calling Populate_blkExcpRecs ');
9432         Populate_blkExcpRecs
9433             (p_budget_version_id        => p_budget_version_id
9434             ,p_err_error_code_tab       =>l_err_error_code_tab
9435             ,p_err_budget_line_id_tab   =>l_err_budget_line_id_tab
9436                         ,p_err_raId_tab         =>l_err_raId_tab
9437                         ,p_err_txn_cur_tab      =>l_err_txn_cur_tab
9438                         ,p_err_sdate_tab        =>l_err_sdate_tab
9439                         ,p_err_quantity_tab     =>l_err_quantity_tab
9440                         ,p_err_cost_rate_tab        =>l_err_cost_rate_tab
9441                         ,p_err_cost_rate_ovr_tab    =>l_err_cost_rate_ovr_tab
9442                         ,p_err_burden_rate_tab      =>l_err_burden_rate_tab
9443                         ,p_err_burden_rate_ovr_tab  =>l_err_burden_rate_ovr_tab
9444                         ,p_err_compiled_set_id_tab  =>l_err_compiled_set_id_tab
9445                         ,p_err_bill_rate_tab        =>l_err_bill_rate_tab
9446                         ,p_err_bill_rate_ovr_tab    =>l_err_bill_rate_ovr_tab
9447                         ,p_err_markup_percent_tab   =>l_err_markup_percent_tab
9448                         ,p_err_cost_rejection_tab   =>l_err_cost_rejection_tab
9449                         ,p_err_revenue_rejection_tab    =>l_err_revenue_rejection_tab
9450                         ,p_err_burden_rejection_tab =>l_err_burden_rejection_tab
9451                         ,p_err_pfc_cur_rejection_tab    =>l_err_pfc_cur_rejection_tab
9452                         ,p_err_pc_cur_rejection_tab =>l_err_pc_cur_rejection_tab
9453             ,x_return_status        => x_return_status
9454             );
9455 
9456         /* Now populate the tmp2 with exisiting budget line details */
9457         --print_msg('Calling Populate_ExistingBlRecs ');
9458         Populate_ExistingBlRecs
9459             (p_budget_version_id            => p_budget_version_id
9460             ,x_return_status                => x_return_status
9461                         );
9462 
9463         /* Before updating the existing budgetLines, we need to pass the -ve entries to rollup api */
9464         IF NVL(g_rollup_required_flag,'N') = 'Y'  THEN
9465                      FOR blRec IN cur_ExistingblAmts LOOP
9466                           IF blRec.budget_line_id is NOT NULL Then
9467                             --print_msg('Getting Budget line Amts for budget_line_id => '||to_char(blrec.budget_line_id));
9468                             l_stage := 4028;
9469                             --print_msg('Calling Add_Toreporting_Tabls by old -ve amts of bl['||(blRec.quantity *-1)||']Cur['||blRec.txn_currency_code||']');
9470                             PA_FP_CALC_PLAN_PKG.Add_Toreporting_Tabls
9471                                 (p_calling_module               => 'CALCULATE_API'
9472                                 ,p_activity_code                => 'UPDATE'
9473                                 ,p_budget_version_id            => p_budget_version_id
9474                                 ,p_budget_line_id               => blRec.budget_line_id
9475                                 ,p_resource_assignment_id       => blRec.resource_assignment_id
9476                                 ,p_start_date                   => blRec.start_date
9477                                 ,p_end_date                     => blRec.end_date
9478                                 ,p_period_name                  => blRec.period_name
9479                                 ,p_txn_currency_code            => blRec.txn_currency_code
9480                                 ,p_quantity                     => blRec.quantity * -1
9481                                 ,p_txn_raw_cost                 => blRec.txn_raw_cost * -1
9482                                 ,p_txn_burdened_cost            => blRec.txn_burdened_cost * -1
9483                                 ,p_txn_revenue                  => blRec.txn_revenue * -1
9484                                 ,p_project_currency_code        => blRec.project_currency_code
9485                                 ,p_project_raw_cost             => blRec.project_raw_cost * -1
9486                                 ,p_project_burdened_cost        => blRec.project_burdened_cost * -1
9487                                 ,p_project_revenue              => blRec.project_revenue * -1
9488                                 ,p_projfunc_currency_code       => blRec.projfunc_currency_code
9489                                 ,p_projfunc_raw_cost            => blRec.projfunc_raw_cost * -1
9490                                 ,p_projfunc_burdened_cost       => blRec.projfunc_burdened_cost * -1
9491                                 ,p_projfunc_revenue             => blRec.projfunc_revenue * -1
9492 				,p_rep_line_mode               => 'REVERSAL'
9493                                 ,x_msg_data                     => l_rep_msg_data
9494                                 ,x_return_status                => l_rep_return_status
9495                                 );
9496                             --print_msg('After Calling update_reporting_from_b_lines for BdLine['||blRec.budget_line_id||']');
9497                             --print_msg('RtSts['||l_rep_return_status||']x_msgData['||l_rep_msg_data||']');
9498                             IF l_rep_return_status <> 'S' Then
9499                                  l_error_msg_code := l_rep_msg_data;
9500                                  EXIT;
9501                             END IF;
9502                        END IF;
9503                    END LOOP;
9504                END IF ; -- g_rollup requried = Y
9505 
9506            /* Now process the exception records. update the tmp2 with the final quantity , rates and rejections
9507                 * and then finally in one bulk update the budget lines */
9508            FOR newRec IN cur_errorBdgtLines LOOP
9509 
9510         print_msg('Updating the budgetline with Existsing bl['||newRec.Existing_budget_line_id||']');
9511         OPEN cur_Tmp2ExblAmts(newRec.Existing_budget_line_id);
9512         FETCH cur_Tmp2ExblAmts INTO ExBlRec;
9513         CLOSE cur_Tmp2ExblAmts;
9514 
9515         /* Rounding enhancements:  While updating budget lines, instead of deriving the override rate use the following logic
9516          * to derive the rates and amounts
9517          * OldBdgetLine                NewBdgtLine              Resultant
9518          * --------------------------------------------------------------------------------------
9519          * 1.Ovrride rate exists      Ovrride rate exists   Use New BdgtLine Override rate
9520          * 2.Ovrride rate exists      No Override rate          Use Old BdgtLine Override rate
9521                  * 3.No Override rate         Ovrride rate exists       Use New BdgtLine Override rate
9522          * 4.No Override rate         No Override rate      Use New BdgtLine rate
9523          * ---------------------------------------------------------------------------------------
9524          */
9525 
9526         If newRec.cost_rate_override is NOT NULL Then
9527             l_bl_upd_cost_rate := newRec.cost_rate_override;
9528             l_bl_upd_cost_rate_ovride := newRec.cost_rate_override;
9529         Elsif ExBlRec.existing_cost_rate_ovride IS NOT NULL Then
9530             l_bl_upd_cost_rate := ExBlRec.existing_cost_rate_ovride;
9531                         l_bl_upd_cost_rate_ovride := ExBlRec.existing_cost_rate_ovride;
9532         Else
9533             l_bl_upd_cost_rate := newRec.cost_rate;
9534                         l_bl_upd_cost_rate_ovride := NULL;
9535         End If;
9536 
9537         If newRec.burden_cost_rate_override is NOT NULL Then
9538             l_bl_upd_burden_rate := newRec.burden_cost_rate_override;
9539             l_bl_upd_burden_rate_ovride := newRec.burden_cost_rate_override;
9540             l_bl_upd_compile_set_id := newRec.cost_ind_compiled_set_id;
9541         Elsif ExBlRec.existing_burden_rate_ovride is NOT NULL Then
9542             l_bl_upd_burden_rate := ExBlRec.existing_burden_rate_ovride;
9543                         l_bl_upd_burden_rate_ovride := ExBlRec.existing_burden_rate_ovride;
9544             l_bl_upd_compile_set_id := ExBlRec.existing_compile_set_id;
9545         Else
9546             l_bl_upd_burden_rate := newRec.burden_cost_rate;
9547                         l_bl_upd_burden_rate_ovride := NULL;
9548             l_bl_upd_compile_set_id := newRec.cost_ind_compiled_set_id;
9549         End If;
9550 
9551         If newRec.bill_rate_override is NOT NULL Then
9552             l_bl_upd_bill_rate := newRec.bill_rate_override;
9553             l_bl_upd_bill_rate_ovride := newRec.bill_rate_override;
9554             l_bl_upd_markup_percentage := newRec.bill_markup_percentage;
9555         Elsif ExBlRec.existing_bill_rate_ovride is NOT NULL Then
9556             l_bl_upd_bill_rate := ExBlRec.existing_bill_rate_ovride;
9557                         l_bl_upd_bill_rate_ovride :=ExBlRec.existing_bill_rate_ovride;
9558             l_bl_upd_markup_percentage := ExBlRec.existing_markup_percentage;
9559         Else
9560             l_bl_upd_bill_rate := newRec.bill_rate;
9561                         l_bl_upd_bill_rate_ovride := NULL;
9562             l_bl_upd_markup_percentage := newRec.bill_markup_percentage;
9563         End If;
9564 
9565 
9566             UPDATE pa_fp_spread_calc_tmp2 tmp2
9567         SET tmp2.txn_currency_code              = newRec.txn_currency_code
9568                  ,tmp2.quantity                         = nvl(tmp2.quantity,0) + newRec.quantity
9569                  ,tmp2.system_reference_var1        = newRec.cost_rejection_code
9570                  ,tmp2.system_reference_var2        = newRec.revenue_rejection_code
9571                  ,tmp2.system_reference_var3        = newRec.burden_rejection_code
9572                  ,tmp2.system_reference_var4        = newRec.pfc_cur_conv_rejection_code
9573                  ,tmp2.system_reference_var5        = newRec.pc_cur_conv_rejection_code
9574                  ,tmp2.bill_markup_percentage           = l_bl_upd_markup_percentage
9575                  ,tmp2.bill_rate                = l_bl_upd_bill_rate
9576                  ,tmp2.cost_rate                = l_bl_upd_cost_rate
9577                  ,tmp2.burden_cost_rate                 = l_bl_upd_burden_rate
9578                  ,tmp2.bill_rate_override           = l_bl_upd_bill_rate_ovride
9579                  ,tmp2.cost_rate_override           = l_bl_upd_cost_rate_ovride
9580                  ,tmp2.burden_cost_rate_override        = l_bl_upd_burden_rate_ovride
9581                  ,tmp2.system_reference_num1            = l_bl_upd_compile_set_id
9582             WHERE tmp2.budget_line_id  = ExBlRec.Existing_budget_line_id;
9583 
9584          END LOOP;
9585 
9586 
9587          /* Now update the budgetLines in bulk from tmp2 table */
9588          Populate_tmp2Plsql_tab;
9589          IF l_tmp2_budget_line_id_tab.COUNT > 0 THEN --{
9590         --print_msg('Bulk updating dup val index exception rows');
9591         FORALL i IN l_tmp2_budget_line_id_tab.FIRST .. l_tmp2_budget_line_id_tab.LAST
9592         UPDATE pa_budget_lines bl
9593                 SET bl.txn_currency_code             = l_tmp2_txn_curr_code_tab(i)
9594                  ,bl.quantity                        = l_tmp2_quantity_tab(i)
9595 		 /* Bug fix:4900436 */
9596                  ,bl.display_quantity                = decode(g_wp_version_flag,'Y',l_tmp2_quantity_tab(i)
9597                                                          ,decode(NVL(l_tmp2_rate_based_flag_tab(i),'N'),'N',NULL
9598 							   	,l_tmp2_quantity_tab(i)))
9599                  /* Bug fix:4900436 */
9600                  ,bl.cost_rejection_code             = l_tmp2_cost_rejection_tab(i)
9601                  ,bl.revenue_rejection_code          = l_tmp2_revenue_rejection_tab(i)
9602                  ,bl.burden_rejection_code           = l_tmp2_burden_rejection_tab(i)
9603                  ,bl.pfc_cur_conv_rejection_code     = l_tmp2_pfc_cur_rejection_tab(i)
9604                  ,bl.pc_cur_conv_rejection_code      = l_tmp2_pc_cur_rejection_tab(i)
9605                  ,bl.txn_markup_percent              = l_tmp2_markup_percent_tab(i)
9606                  ,bl.txn_standard_bill_rate          = l_tmp2_bill_rate_tab(i)
9607                  ,bl.txn_standard_cost_rate          = l_tmp2_cost_rate_tab(i)
9608                  ,bl.burden_cost_rate                = l_tmp2_burden_rate_tab(i)
9609                  ,bl.txn_bill_rate_override          = l_tmp2_bill_rate_ovr_tab(i)
9610                  ,bl.txn_cost_rate_override          = l_tmp2_cost_rate_ovr_tab(i)
9611                  ,bl.burden_cost_rate_override       = l_tmp2_burden_rate_ovr_tab(i)
9612                  ,bl.cost_ind_compiled_set_id        = l_tmp2_compile_set_id_tab(i)
9613                  ,bl.last_update_date                = l_sysdate
9614                  ,bl.last_updated_by                 = l_last_updated_by
9615                  ,bl.last_update_login               = l_last_login_id
9616                 WHERE bl.budget_line_id  = l_tmp2_budget_line_id_tab(i);
9617 
9618             --print_msg(' Num Of rows UPDATED ['||sql%rowcount||']');
9619         FORALL i IN l_tmp2_budget_line_id_tab.FIRST .. l_tmp2_budget_line_id_tab.LAST
9620                 UPDATE pa_budget_lines bl
9621                 SET bl.txn_raw_cost = decode((nvl(bl.txn_init_raw_cost,0) + pa_currency.round_trans_currency_amt1(
9622                                         (nvl(bl.quantity,0) - nvl(bl.init_quantity,0)) *
9623                                         (nvl(bl.txn_cost_rate_override,nvl(txn_standard_cost_rate,0))),bl.txn_currency_code)),0,NULL,
9624                     (nvl(bl.txn_init_raw_cost,0) + pa_currency.round_trans_currency_amt1(
9625                     (nvl(bl.quantity,0) - nvl(bl.init_quantity,0)) *
9626                     (nvl(bl.txn_cost_rate_override,nvl(txn_standard_cost_rate,0))),bl.txn_currency_code)))
9627            ,bl.txn_burdened_cost = decode((nvl(bl.txn_init_burdened_cost,0) + pa_currency.round_trans_currency_amt1(
9628                                         (nvl(bl.quantity,0) - nvl(bl.init_quantity,0)) *
9629                                         (nvl(bl.burden_cost_rate_override,nvl(burden_cost_rate,0))),bl.txn_currency_code)),0,NULL,
9630                                         (nvl(bl.txn_init_burdened_cost,0) + pa_currency.round_trans_currency_amt1(
9631                                         (nvl(bl.quantity,0) - nvl(bl.init_quantity,0)) *
9632                                         (nvl(bl.burden_cost_rate_override,nvl(burden_cost_rate,0))),bl.txn_currency_code)))
9633            ,bl.txn_revenue = decode((nvl(bl.txn_init_raw_cost,0) + pa_currency.round_trans_currency_amt1(
9634                                         (nvl(bl.quantity,0) - nvl(bl.init_quantity,0)) *
9635                                         (nvl(bl.txn_bill_rate_override,nvl(txn_standard_bill_rate,0))),bl.txn_currency_code)),0,NULL,
9636                                         (nvl(bl.txn_init_raw_cost,0) + pa_currency.round_trans_currency_amt1(
9637                                         (nvl(bl.quantity,0) - nvl(bl.init_quantity,0)) *
9638                                         (nvl(bl.txn_bill_rate_override,nvl(txn_standard_bill_rate,0))),bl.txn_currency_code)))
9639                 WHERE bl.budget_line_id  = l_tmp2_budget_line_id_tab(i);
9640 
9641         /* Call the pc and pfc conv attributes for this budget line */
9642             FOR exBlId IN l_tmp2_budget_line_id_tab.FIRST .. l_tmp2_budget_line_id_tab.LAST LOOP
9643             --print_msg('Calling pa_fp_multi_currency_pkg.convert_txn_currency api()');
9644                     pa_fp_multi_currency_pkg.convert_txn_currency
9645                         ( p_budget_version_id         => g_budget_version_id
9646              ,p_budget_line_id            => l_tmp2_budget_line_id_tab(exBlId)
9647                          ,p_source_context            => 'BUDGET_LINE'
9648                          ,p_entire_version            => 'Y'
9649                          ,p_calling_module              => p_calling_module -- Added for Bug#5395732
9650                          ,x_return_status             => l_return_status
9651                          ,x_msg_count                 => x_msg_count
9652                          ,x_msg_data                  => x_msg_data
9653                          );
9654             -- Note the return status of converttxn currn need not checked as the rejections will be stamped on budgetLines
9655                     --print_msg('End of convert_txn_currency api retSts['||l_return_status||']');
9656         END LOOP;
9657 
9658            /* Now delete the exception records from budget lines */
9659         InitPlsqlTabs;
9660         l_del_budget_line_id_tab.delete;
9661         OPEN cur_delBlLines;
9662         FETCH cur_delBlLines BULK COLLECT INTO l_del_budget_line_id_tab;
9663         CLOSE cur_delBlLines;
9664         IF l_del_budget_line_id_tab.COUNT > 0 THEN  --{
9665         /* MRC enhancements */
9666         IF NVL(l_populate_mrc_tab_flag,'N') = 'Y' Then
9667             FORALL i IN l_del_budget_line_id_tab.FIRST .. l_del_budget_line_id_tab.LAST
9668             UPDATE pa_fp_rollup_tmp tmp
9669             SET tmp.delete_flag = 'Y'
9670         WHERE tmp.budget_line_id = l_del_budget_line_id_tab(i);
9671         END IF;
9672 
9673         /* Now delete the duplval budget lines */
9674             FORALL i IN l_del_budget_line_id_tab.FIRST .. l_del_budget_line_id_tab.LAST
9675                 DELETE FROM pa_budget_lines bl
9676                 WHERE bl.budget_line_id = l_del_budget_line_id_tab(i);
9677          END IF; --}
9678 
9679     /* MRC ehancements changes: */
9680     IF NVL(l_populate_mrc_tab_flag,'N') = 'Y' AND l_tmp2_budget_line_id_tab.COUNT > 0 THEN --{
9681 	/* update rollup data with existing budget lines data */
9682         FORALL exBlId IN l_tmp2_budget_line_id_tab.FIRST .. l_tmp2_budget_line_id_tab.LAST
9683         UPDATE pa_fp_rollup_tmp tmp
9684         SET ( tmp.quantity
9685              ,tmp.txn_raw_cost
9686              ,tmp.txn_burdened_cost
9687              ,tmp.txn_revenue
9688              ,tmp.project_raw_cost
9689              ,tmp.project_burdened_cost
9690              ,tmp.project_revenue
9691              ,tmp.projfunc_raw_cost
9692              ,tmp.projfunc_burdened_cost
9693              ,tmp.projfunc_revenue
9694              ,tmp.project_cost_rate_type
9695              ,tmp.project_cost_exchange_rate
9696              ,tmp.project_cost_rate_date_type
9697              ,tmp.project_cost_rate_date
9698              ,tmp.project_rev_rate_type
9699              ,tmp.project_rev_exchange_rate
9700              ,tmp.project_rev_rate_date_type
9701              ,tmp.project_rev_rate_date
9702              ,tmp.projfunc_cost_rate_type
9703              ,tmp.projfunc_cost_exchange_rate
9704              ,tmp.projfunc_cost_rate_date_type
9705              ,tmp.projfunc_cost_rate_date
9706              ,tmp.projfunc_rev_rate_type
9707              ,tmp.projfunc_rev_exchange_rate
9708              ,tmp.projfunc_rev_rate_date_type
9709              ,tmp.projfunc_rev_rate_date
9710            ) =
9711           (SELECT bl.quantity
9712               ,bl.txn_raw_cost
9713               ,bl.txn_burdened_cost
9714               ,bl.txn_revenue
9715               ,bl.project_raw_cost
9716               ,bl.project_burdened_cost
9717               ,bl.project_revenue
9718               ,bl.raw_cost
9719               ,bl.burdened_cost
9720               ,bl.revenue
9721               ,bl.project_cost_rate_type
9722               ,bl.project_cost_exchange_rate
9723               ,bl.project_cost_rate_date_type
9724               ,bl.project_cost_rate_date
9725               ,bl.project_rev_rate_type
9726               ,bl.project_rev_exchange_rate
9727               ,bl.project_rev_rate_date_type
9728               ,bl.project_rev_rate_date
9729               ,bl.projfunc_cost_rate_type
9730               ,bl.projfunc_cost_exchange_rate
9731               ,bl.projfunc_cost_rate_date_type
9732               ,bl.projfunc_cost_rate_date
9733               ,bl.projfunc_rev_rate_type
9734               ,bl.projfunc_rev_exchange_rate
9735               ,bl.projfunc_rev_rate_date_type
9736               ,bl.projfunc_rev_rate_date
9737           FROM pa_budget_lines bl
9738           WHERE bl.budget_line_id = tmp.budget_line_id
9739           )
9740         WHERE tmp.budget_line_id = l_tmp2_budget_line_id_tab(exBlId);
9741 
9742 	/* Copy the rows from budget lines to rollup tmp when existing budget line id doesnot exists in rollup tmp */
9743 	FORALL exBlId IN l_tmp2_budget_line_id_tab.FIRST .. l_tmp2_budget_line_id_tab.LAST
9744         INSERT INTO  pa_fp_rollup_tmp tmp
9745             ( tmp.budget_line_id
9746 	     ,tmp.budget_version_id
9747 	     ,tmp.resource_assignment_id
9748 	     ,tmp.txn_currency_code
9749 	     ,tmp.start_date
9750 	     ,tmp.end_date
9751 	     ,tmp.period_name
9752 	     ,tmp.quantity
9753              ,tmp.txn_raw_cost
9754              ,tmp.txn_burdened_cost
9755              ,tmp.txn_revenue
9756              ,tmp.project_raw_cost
9757              ,tmp.project_burdened_cost
9758              ,tmp.project_revenue
9759              ,tmp.projfunc_raw_cost
9760              ,tmp.projfunc_burdened_cost
9761              ,tmp.projfunc_revenue
9762              ,tmp.project_cost_rate_type
9763              ,tmp.project_cost_exchange_rate
9764              ,tmp.project_cost_rate_date_type
9765              ,tmp.project_cost_rate_date
9766              ,tmp.project_rev_rate_type
9767              ,tmp.project_rev_exchange_rate
9768              ,tmp.project_rev_rate_date_type
9769              ,tmp.project_rev_rate_date
9770              ,tmp.projfunc_cost_rate_type
9771              ,tmp.projfunc_cost_exchange_rate
9772              ,tmp.projfunc_cost_rate_date_type
9773              ,tmp.projfunc_cost_rate_date
9774              ,tmp.projfunc_rev_rate_type
9775              ,tmp.projfunc_rev_exchange_rate
9776              ,tmp.projfunc_rev_rate_date_type
9777              ,tmp.projfunc_rev_rate_date
9778            )
9779 	SELECT bl.budget_line_id
9780 	     ,bl.budget_version_id
9781              ,bl.resource_assignment_id
9782              ,bl.txn_currency_code
9783              ,bl.start_date
9784              ,bl.end_date
9785              ,bl.period_name
9786 	     ,bl.quantity
9787              ,bl.txn_raw_cost
9788              ,bl.txn_burdened_cost
9789              ,bl.txn_revenue
9790              ,bl.project_raw_cost
9791              ,bl.project_burdened_cost
9792              ,bl.project_revenue
9793              ,bl.raw_cost
9794              ,bl.burdened_cost
9795              ,bl.revenue
9796              ,bl.project_cost_rate_type
9797              ,bl.project_cost_exchange_rate
9798              ,bl.project_cost_rate_date_type
9799              ,bl.project_cost_rate_date
9800              ,bl.project_rev_rate_type
9801              ,bl.project_rev_exchange_rate
9802              ,bl.project_rev_rate_date_type
9803              ,bl.project_rev_rate_date
9804              ,bl.projfunc_cost_rate_type
9805              ,bl.projfunc_cost_exchange_rate
9806              ,bl.projfunc_cost_rate_date_type
9807              ,bl.projfunc_cost_rate_date
9808              ,bl.projfunc_rev_rate_type
9809              ,bl.projfunc_rev_exchange_rate
9810              ,bl.projfunc_rev_rate_date_type
9811              ,bl.projfunc_rev_rate_date
9812           FROM pa_budget_lines bl
9813           WHERE bl.budget_line_id = l_tmp2_budget_line_id_tab(exBlId)
9814 	  AND NOT EXISTS ( SELECT NULL
9815 			   FROM PA_FP_ROLLUP_TMP tmp1
9816 			   WHERE tmp1.budget_line_id = l_tmp2_budget_line_id_tab(exBlId)
9817 			);
9818 
9819     END IF; --}
9820 
9821         /* Now pass the +ve values for the updated existing budget Lines */
9822         IF NVL(g_rollup_required_flag,'N') = 'Y'  THEN
9823                      FOR blRec IN cur_ExistingblAmts LOOP
9824                           IF blRec.budget_line_id is NOT NULL Then
9825                                 l_stage := 4028;
9826                                 --print_msg('Calling ExistAdd_Toreporting_Tabls api by New +ve amts of bl qty['||blRec.quantity||']cur['||blRec.txn_currency_code||']');
9827                                 PA_FP_CALC_PLAN_PKG.Add_Toreporting_Tabls
9828                                 (p_calling_module               => 'CALCULATE_API'
9829                                 ,p_activity_code                => 'UPDATE'
9830                                 ,p_budget_version_id            => p_budget_version_id
9831                                 ,p_budget_line_id               => blRec.budget_line_id
9832                                 ,p_resource_assignment_id       => blRec.resource_assignment_id
9833                                 ,p_start_date                   => blRec.start_date
9834                                 ,p_end_date                     => blRec.end_date
9835                                 ,p_period_name                  => blRec.period_name
9836                                 ,p_txn_currency_code            => blRec.txn_currency_code
9837                                 ,p_quantity                     => blRec.quantity
9838                                 ,p_txn_raw_cost                 => blRec.txn_raw_cost
9839                                 ,p_txn_burdened_cost            => blRec.txn_burdened_cost
9840                                 ,p_txn_revenue                  => blRec.txn_revenue
9841                                 ,p_project_currency_code        => blRec.project_currency_code
9842                                 ,p_project_raw_cost             => blRec.project_raw_cost
9843                                 ,p_project_burdened_cost        => blRec.project_burdened_cost
9844                                 ,p_project_revenue              => blRec.project_revenue
9845                                 ,p_projfunc_currency_code       => blRec.projfunc_currency_code
9846                                 ,p_projfunc_raw_cost            => blRec.projfunc_raw_cost
9847                                 ,p_projfunc_burdened_cost       => blRec.projfunc_burdened_cost
9848                                 ,p_projfunc_revenue             => blRec.projfunc_revenue
9849 				,p_rep_line_mode                => 'POSITIVE_ENTRY'
9850                                 ,x_msg_data                     => l_rep_msg_data
9851                                 ,x_return_status                => l_rep_return_status
9852                                 );
9853                                 --print_msg('After Calling update_reporting_from_b_lines for BdLine['||blRec.budget_line_id||']');
9854                                 --print_msg('RtSts['||l_rep_return_status||']x_msgData['||l_rep_msg_data||']');
9855                                 IF l_rep_return_status <> 'S' Then
9856                                         l_error_msg_code := l_rep_msg_data;
9857                                         EXIT;
9858                                 END IF;
9859                        END IF;
9860                    END LOOP;
9861                END IF ; -- g_rollup requried = Y
9862          END IF; --}
9863        END IF; --}  -- end of existing budget Line
9864 
9865        /* Now release the buffer */
9866        InitPlsqlTabs;
9867     END IF; --}  -- end of New budget Line
9868     x_return_status := l_return_status;
9869         print_msg('Leaving BLK_update_budget_lines:x_return_status : '||x_return_status);
9870     If p_pa_debug_mode = 'Y' Then
9871             pa_debug.reset_err_stack;
9872     End If;
9873 
9874 EXCEPTION
9875     WHEN OTHERS THEN
9876             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9877         x_msg_data := SQLCODE||SQLERRM;
9878             fnd_msg_pub.add_exc_msg
9879             ( p_pkg_name       => 'PA_FP_CALC_PLAN_PKG'
9880                 ,p_procedure_name => 'BLK_update_budget_lines' );
9881             pa_debug.g_err_stage := 'Stage : '||to_char(l_stage)||' '||substr(SQLERRM,1,240);
9882             l_stage := 4120;
9883             print_msg(to_char(l_stage)||' substr(SQLERRM,1,240) => '|| substr(SQLERRM,1,240));
9884         If p_pa_debug_mode = 'Y' Then
9885                 pa_debug.reset_err_stack;
9886         End If;
9887             RAISE;
9888 
9889 END BLK_update_budget_lines;
9890 
9891 
9892 /*Bug 4224464.This procedure update_dffcols would be called to insert into pa_fp_rollup_tmp
9893  * all those budget lines which are not already present in pa_fp_rollup_tmp.
9894  * These lines would be the ones with no changes to qty/amnt and rate columns.
9895  * The lines with changes to qty/amnt and rate columns would not be processed by this API
9896  * as earlier call to copy_blattributes would have handled theselines  Also using the
9897  * same signature for this API as used for copy_blattributes above.
9898  */
9899 PROCEDURE update_dffcols(
9900                  p_budget_verson_id               IN  Number
9901                 ,p_source_context                 IN  Varchar2
9902                 ,p_calling_module                 IN  Varchar2
9903                 ,p_apply_progress_flag            IN Varchar2
9904                 ,x_return_status                  OUT NOCOPY varchar2
9905                 ,x_msg_count                      OUT NOCOPY NUMBER
9906                 ,x_msg_data                       OUT NOCOPY varchar2
9907                  ) IS
9908 
9909         /* This cursor picks budget line attributes which needs to be retained and updated even if there was no change detected by
9910            core calculate api flow -- that is, no qty/amt/rate changed */
9911         CURSOR blAttribDetails IS
9912         SELECT /*+ INDEX(BL PA_BUDGET_LINES_U1) */ cache.resource_assignment_id
9913               ,cache.start_date
9914               ,cache.period_name
9915               ,cache.end_Date
9916               ,cache.budget_version_id
9917               ,bl.budget_line_id
9918               ,bl.quantity
9919               ,bl.txn_raw_cost
9920               ,bl.txn_burdened_cost
9921               ,bl.txn_revenue
9922               ,bl.init_quantity
9923               ,bl.txn_init_raw_cost
9924               ,bl.txn_init_burdened_cost
9925               ,bl.txn_init_revenue
9926               ,bl.txn_cost_rate_override
9927               ,bl.burden_cost_rate_override
9928               ,bl.txn_bill_rate_override
9929               ,bl.raw_cost
9930               ,bl.burdened_cost
9931               ,bl.revenue
9932               ,bl.cost_rejection_code
9933               ,bl.revenue_rejection_code
9934               ,bl.burden_rejection_code
9935               ,bl.project_raw_cost
9936               ,bl.project_burdened_cost
9937               ,bl.project_revenue
9938               ,bl.txn_markup_percent
9939               ,bl.txn_standard_bill_rate
9940               ,bl.txn_standard_cost_rate
9941               ,bl.burden_cost_rate
9942               ,bl.cost_ind_compiled_set_id
9943               ,bl.init_raw_cost
9944               ,bl.init_burdened_cost
9945               ,bl.init_revenue
9946               ,bl.project_init_raw_cost
9947               ,bl.project_init_burdened_cost
9948               ,bl.project_init_revenue
9949               ,cache.txn_currency_code
9950               ,cache.projfunc_currency_code
9951               ,cache.PROJECT_CURRENCY_CODE
9952               ,decode(cache.PROJECT_COST_RATE_TYPE,      null, bl.PROJECT_COST_RATE_TYPE, FND_API.G_MISS_CHAR, null, cache.PROJECT_COST_RATE_TYPE)
9953               ,decode(cache.PROJECT_COST_EXCHANGE_RATE,  null, bl.project_cost_exchange_rate, FND_API.G_MISS_NUM, null, cache.PROJECT_COST_EXCHANGE_RATE)
9954               ,decode(cache.PROJECT_COST_RATE_DATE_TYPE, null, bl.project_cost_rate_date_type, FND_API.G_MISS_CHAR, null, cache.PROJECT_COST_RATE_DATE_TYPE)
9955               ,decode(cache.PROJECT_COST_RATE_DATE,      null, bl.project_cost_rate_date, FND_API.G_MISS_DATE, null, cache.PROJECT_COST_RATE_DATE)
9956               ,decode(cache.PROJECT_REV_RATE_TYPE,       null, bl.project_rev_rate_type, FND_API.G_MISS_CHAR, null, cache.PROJECT_REV_RATE_TYPE)
9957               ,decode(cache.PROJECT_REV_EXCHANGE_RATE,   null, bl.project_rev_exchange_rate, FND_API.G_MISS_NUM, null, cache.PROJECT_REV_EXCHANGE_RATE)
9958               ,decode(cache.PROJECT_REV_RATE_DATE_TYPE,  null, bl.project_rev_rate_date_type, FND_API.G_MISS_CHAR, null, cache.PROJECT_REV_RATE_DATE_TYPE)
9959               ,decode(cache.PROJECT_REV_RATE_DATE,       null, bl.project_rev_rate_date, FND_API.G_MISS_DATE, null, cache.PROJECT_REV_RATE_DATE)
9960               ,decode(cache.PROJFUNC_COST_RATE_TYPE,     null, bl.projfunc_cost_rate_type, FND_API.G_MISS_CHAR, null, cache.PROJFUNC_COST_RATE_TYPE)
9961               ,decode(cache.PROJFUNC_COST_EXCHANGE_RATE, null, bl.projfunc_cost_exchange_rate, FND_API.G_MISS_NUM, null, cache.PROJFUNC_COST_EXCHANGE_RATE)
9962               ,decode(cache.PROJFUNC_COST_RATE_DATE_TYPE,null, bl.projfunc_cost_rate_date_type, FND_API.G_MISS_CHAR, null, cache.PROJFUNC_COST_RATE_DATE_TYPE)
9963               ,decode(cache.PROJFUNC_COST_RATE_DATE,     null, bl.projfunc_cost_rate_date, FND_API.G_MISS_DATE, null, cache.PROJFUNC_COST_RATE_DATE)
9964               ,decode(cache.PROJFUNC_REV_RATE_TYPE,      null, bl.projfunc_rev_rate_type, FND_API.G_MISS_CHAR, null, cache.PROJFUNC_REV_RATE_TYPE)
9965               ,decode(cache.PROJFUNC_REV_EXCHANGE_RATE,  null, bl.projfunc_rev_exchange_rate, FND_API.G_MISS_NUM, null, cache.PROJFUNC_REV_EXCHANGE_RATE)
9966               ,decode(cache.PROJFUNC_REV_RATE_DATE_TYPE, null, bl.projfunc_rev_rate_date_type, FND_API.G_MISS_CHAR, null, cache.PROJFUNC_REV_RATE_DATE_TYPE)
9967               ,decode(cache.PROJFUNC_REV_RATE_DATE,      null, bl.projfunc_rev_rate_date, FND_API.G_MISS_DATE, null, cache.PROJFUNC_REV_RATE_DATE)
9968               ,decode(cache.CHANGE_REASON_CODE,          null, bl.change_reason_code, FND_API.G_MISS_CHAR, null, cache.CHANGE_REASON_CODE)
9969               ,decode(cache.DESCRIPTION          ,null, bl.DESCRIPTION, FND_API.G_MISS_CHAR, null, cache.DESCRIPTION)
9970               ,decode(cache.ATTRIBUTE_CATEGORY   ,null, bl.ATTRIBUTE_CATEGORY, FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE_CATEGORY)
9971               ,decode(cache.ATTRIBUTE1           ,null, bl.ATTRIBUTE1,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE1)
9972               ,decode(cache.ATTRIBUTE2           ,null, bl.ATTRIBUTE2,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE2)
9973               ,decode(cache.ATTRIBUTE3           ,null, bl.ATTRIBUTE3,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE3)
9974               ,decode(cache.ATTRIBUTE4           ,null, bl.ATTRIBUTE4,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE4)
9975               ,decode(cache.ATTRIBUTE5           ,null, bl.ATTRIBUTE5,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE5)
9976               ,decode(cache.ATTRIBUTE6           ,null, bl.ATTRIBUTE6,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE6)
9977               ,decode(cache.ATTRIBUTE7           ,null, bl.ATTRIBUTE7,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE7)
9978               ,decode(cache.ATTRIBUTE8           ,null, bl.ATTRIBUTE8,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE8)
9979               ,decode(cache.ATTRIBUTE9           ,null, bl.ATTRIBUTE9,  FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE9)
9980               ,decode(cache.ATTRIBUTE10          ,null, bl.ATTRIBUTE10, FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE10)
9981               ,decode(cache.ATTRIBUTE11          ,null, bl.ATTRIBUTE11, FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE11)
9982               ,decode(cache.ATTRIBUTE12          ,null, bl.ATTRIBUTE12, FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE12)
9983               ,decode(cache.ATTRIBUTE13          ,null, bl.ATTRIBUTE13, FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE13)
9984               ,decode(cache.ATTRIBUTE14          ,null, bl.ATTRIBUTE14, FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE14)
9985               ,decode(cache.ATTRIBUTE15          ,null, bl.ATTRIBUTE15, FND_API.G_MISS_CHAR, null, cache.ATTRIBUTE15)
9986               ,cache.RAW_COST_SOURCE
9987               ,cache.BURDENED_COST_SOURCE
9988               ,cache.QUANTITY_SOURCE
9989               ,cache.REVENUE_SOURCE
9990               , decode(cache.PM_PRODUCT_CODE  ,null,bl.PM_PRODUCT_CODE, FND_API.G_MISS_CHAR, null, cache.PM_PRODUCT_CODE)
9991               , decode(cache.PM_BUDGET_LINE_REFERENCE ,null,bl.PM_BUDGET_LINE_REFERENCE, FND_API.G_MISS_CHAR, null, cache.PM_BUDGET_LINE_REFERENCE)
9992               , cache.CODE_COMBINATION_ID
9993               , cache.CCID_GEN_STATUS_CODE
9994               , cache.CCID_GEN_REJ_MESSAGE
9995               , cache.BORROWED_REVENUE
9996               , cache.TP_REVENUE_IN
9997               , cache.TP_REVENUE_OUT
9998               , cache.REVENUE_ADJ
9999               , cache.LENT_RESOURCE_COST
10000               , cache.TP_COST_IN
10001               , cache.TP_COST_OUT
10002               , cache.COST_ADJ
10003               , cache.UNASSIGNED_TIME_COST
10004               , cache.UTILIZATION_PERCENT
10005               , cache.UTILIZATION_HOURS
10006               , cache.UTILIZATION_ADJ
10007               , cache.CAPACITY
10008               , cache.HEAD_COUNT
10009               , cache.HEAD_COUNT_ADJ
10010               , cache.BUCKETING_PERIOD_CODE
10011               , cache.TXN_DISCOUNT_PERCENTAGE
10012               , cache.TRANSFER_PRICE_RATE
10013               , cache.BL_CREATED_BY
10014               , cache.BL_CREATION_DATE
10015               FROM   pa_fp_spread_calc_tmp1 cache, pa_budget_lines bl
10016               WHERE  cache.budget_version_id = p_budget_verson_id
10017               AND    cache.budget_version_id = bl.budget_version_id
10018               AND    cache.resource_assignment_id = bl.resource_assignment_id
10019               AND    cache.txn_currency_code = bl.txn_currency_code
10020               AND    cache.start_date = bl.start_date
10021             /*If a new budget line (not exists in pa_budget_lines) is attempted to be created with all amts/qty/rate as null but
10022              * with dffs/mc/change reason, from amg flow, that budget line would not be selected due to the join with pa_budget_lines.
10023              * This is only intended as budget lines with null amts/qty are not maintained in pa_budget_lines any more.
10024              */
10025               AND    NOT EXISTS (SELECT 'X' FROM pa_fp_rollup_tmp  tmp WHERE tmp.budget_version_id = cache.budget_version_id
10026               AND    tmp.resource_assignment_id = cache.resource_assignment_id
10027               AND    tmp.txn_currency_code = cache.txn_currency_code
10028               AND    tmp.start_date = cache.start_date);
10029 
10030         l_resource_assignment_id_tab     pa_plsql_datatypes.Num15TabTyp;
10031         l_start_date_tab                 pa_plsql_datatypes.DateTabTyp;
10032         l_period_name_tab                pa_plsql_datatypes.Char50TabTyp;
10033         l_end_date_tab                   pa_plsql_datatypes.DateTabTyp;
10034         l_budget_line_id_tab             pa_plsql_datatypes.Num15TabTyp;
10035         l_quantity_tab                   pa_plsql_datatypes.NumTabTyp;
10036         l_txn_raw_cost_tab               pa_plsql_datatypes.NumTabTyp;
10037         l_txn_burdened_cost_tab          pa_plsql_datatypes.NumTabTyp;
10038         l_txn_revenue_tab                pa_plsql_datatypes.NumTabTyp;
10039         l_init_quantity_tab              pa_plsql_datatypes.NumTabTyp;
10040         l_txn_init_raw_cost_tab          pa_plsql_datatypes.NumTabTyp;
10041         l_txn_init_burdened_cost_tab     pa_plsql_datatypes.NumTabTyp;
10042         l_txn_init_revenue_tab           pa_plsql_datatypes.NumTabTyp;
10043         l_cost_rate_override_tab         pa_plsql_datatypes.NumTabTyp;
10044         l_burden_rate_override_tab       pa_plsql_datatypes.NumTabTyp;
10045         l_bill_rate_override_tab         pa_plsql_datatypes.NumTabTyp;
10046         l_pjfc_raw_cost_tab              pa_plsql_datatypes.NumTabTyp;
10047         l_pjfc_burden_cost_tab           pa_plsql_datatypes.NumTabTyp;
10048         l_pjfc_revenue_tab               pa_plsql_datatypes.NumTabTyp;
10049         l_cost_rejection_tab             pa_plsql_datatypes.Char30TabTyp;
10050         l_rev_rejection_tab              pa_plsql_datatypes.Char30TabTyp;
10051         l_burden_rejection_tab           pa_plsql_datatypes.Char30TabTyp;
10052         l_project_raw_cost_tab           pa_plsql_datatypes.NumTabTyp;
10053         l_project_burdened_cost_tab      pa_plsql_datatypes.NumTabTyp;
10054         l_project_revenue_tab            pa_plsql_datatypes.NumTabTyp;
10055         l_markup_percentage_tab          pa_plsql_datatypes.NumTabTyp;
10056         l_bill_rate_tab                  pa_plsql_datatypes.NumTabTyp;
10057         l_cost_rate_tab                  pa_plsql_datatypes.NumTabTyp;
10058         l_burden_cost_rate_tab           pa_plsql_datatypes.NumTabTyp;
10059         l_compiled_set_id_tab            pa_plsql_datatypes.Num15TabTyp;
10060         l_init_raw_cost_tab              pa_plsql_datatypes.NumTabTyp;
10061         l_init_burdened_cost_tab         pa_plsql_datatypes.NumTabTyp;
10062         l_init_revenue_tab               pa_plsql_datatypes.NumTabTyp;
10063         l_project_init_raw_cost_tab      pa_plsql_datatypes.NumTabTyp;
10064         l_prjct_init_burdened_cost_tab   pa_plsql_datatypes.NumTabTyp;
10065         l_project_init_revenue_tab       pa_plsql_datatypes.NumTabTyp;
10066         l_txn_currency_code_tab          pa_plsql_datatypes.Char50TabTyp;
10067         l_projfunc_currency_code_tab     pa_plsql_datatypes.Char15TabTyp;
10068         l_PROJECT_CURRENCY_CODE_tab      pa_plsql_datatypes.Char15TabTyp;
10069         l_PROJECT_COST_RATE_TYPE_tab     pa_plsql_datatypes.Char50TabTyp;
10070         l_PROJECT_COST_EXG_RATE_tab      pa_plsql_datatypes.NumTabTyp;
10071         l_PROJECT_COST_DATE_TYPE_tab     pa_plsql_datatypes.Char50TabTyp;
10072         l_PROJECT_COST_RATE_DATE_tab     pa_plsql_datatypes.DateTabTyp;
10073         l_PROJECT_REV_RATE_TYPE_tab      pa_plsql_datatypes.Char50TabTyp;
10074         l_PROJECT_REV_EXG_RATE_tab       pa_plsql_datatypes.NumTabTyp;
10075         l_PROJECT_REV_DATE_TYPE_tab      pa_plsql_datatypes.Char50TabTyp;
10076         l_PROJECT_REV_RATE_DATE_tab      pa_plsql_datatypes.DateTabTyp;
10077         l_PROJFUNC_COST_RATE_TYPE_tab    pa_plsql_datatypes.Char50TabTyp;
10078         l_PROJFUNC_COST_EXG_RATE_tab     pa_plsql_datatypes.NumTabTyp;
10079         l_PROJFUNC_COST_DATE_TYPE_tab    pa_plsql_datatypes.Char50TabTyp;
10080         l_PROJFUNC_COST_RATE_DATE_tab    pa_plsql_datatypes.DateTabTyp;
10081         l_PROJFUNC_REV_RATE_TYPE_tab     pa_plsql_datatypes.Char50TabTyp;
10082         l_PROJFUNC_REV_EXG_RATE_tab      pa_plsql_datatypes.NumTabTyp;
10083         l_PROJFUNC_REV_DATE_TYPE_tab     pa_plsql_datatypes.Char50TabTyp;
10084         l_PROJFUNC_REV_RATE_DATE_tab     pa_plsql_datatypes.DateTabTyp;
10085         l_CHANGE_REASON_CODE_tab         pa_plsql_datatypes.Char30TabTyp;
10086         l_DESCRIPTION_tab                pa_plsql_datatypes.Char250TabTyp;
10087         l_ATTRIBUTE_CATEGORY_tab         pa_plsql_datatypes.Char30TabTyp;
10088         l_ATTRIBUTE1_tab                 pa_plsql_datatypes.Char150TabTyp;
10089         l_ATTRIBUTE2_tab                 pa_plsql_datatypes.Char150TabTyp;
10090         l_ATTRIBUTE3_tab                 pa_plsql_datatypes.Char150TabTyp;
10091         l_ATTRIBUTE4_tab                 pa_plsql_datatypes.Char150TabTyp;
10092         l_ATTRIBUTE5_tab                 pa_plsql_datatypes.Char150TabTyp;
10093         l_ATTRIBUTE6_tab                 pa_plsql_datatypes.Char150TabTyp;
10094         l_ATTRIBUTE7_tab                 pa_plsql_datatypes.Char150TabTyp;
10095         l_ATTRIBUTE8_tab                 pa_plsql_datatypes.Char150TabTyp;
10096         l_ATTRIBUTE9_tab                 pa_plsql_datatypes.Char150TabTyp;
10097         l_ATTRIBUTE10_tab                pa_plsql_datatypes.Char150TabTyp;
10098         l_ATTRIBUTE11_tab                pa_plsql_datatypes.Char150TabTyp;
10099         l_ATTRIBUTE12_tab                pa_plsql_datatypes.Char150TabTyp;
10100         l_ATTRIBUTE13_tab                pa_plsql_datatypes.Char150TabTyp;
10101         l_ATTRIBUTE14_tab                pa_plsql_datatypes.Char150TabTyp;
10102         l_ATTRIBUTE15_tab                pa_plsql_datatypes.Char150TabTyp;
10103         l_RAW_COST_SOURCE_tab            pa_plsql_datatypes.Char2TabTyp;
10104         l_BURDENED_COST_SOURCE_tab       pa_plsql_datatypes.Char2TabTyp;
10105         l_QUANTITY_SOURCE_tab            pa_plsql_datatypes.Char2TabTyp;
10106         l_REVENUE_SOURCE_tab             pa_plsql_datatypes.Char2TabTyp;
10107         l_PM_PRODUCT_CODE_tab            pa_plsql_datatypes.Char30TabTyp;
10108         l_PM_BUDGET_LINE_REFERENCE_tab   pa_plsql_datatypes.Char30TabTyp;
10109         l_CODE_COMBINATION_ID_tab        pa_plsql_datatypes.Num15TabTyp;
10110         l_CCID_GEN_STATUS_CODE_tab       pa_plsql_datatypes.Char1TabTyp;
10111         l_CCID_GEN_REJ_MESSAGE_tab       pa_plsql_datatypes.Char2000TabTyp;
10112         l_BORROWED_REVENUE_tab           pa_plsql_datatypes.NumTabTyp;
10113         l_TP_REVENUE_IN_tab              pa_plsql_datatypes.NumTabTyp;
10114         l_TP_REVENUE_OUT_tab             pa_plsql_datatypes.NumTabTyp;
10115         l_REVENUE_ADJ_tab                pa_plsql_datatypes.NumTabTyp;
10116         l_LENT_RESOURCE_COST_tab         pa_plsql_datatypes.NumTabTyp;
10117         l_TP_COST_IN_tab                 pa_plsql_datatypes.NumTabTyp;
10118         l_TP_COST_OUT_tab                pa_plsql_datatypes.NumTabTyp;
10119         l_COST_ADJ_tab                   pa_plsql_datatypes.NumTabTyp;
10120         l_UNASSIGNED_TIME_COST_tab       pa_plsql_datatypes.NumTabTyp;
10121         l_UTILIZATION_PERCENT_tab        pa_plsql_datatypes.NumTabTyp;
10122         l_UTILIZATION_HOURS_tab          pa_plsql_datatypes.NumTabTyp;
10123         l_UTILIZATION_ADJ_tab            pa_plsql_datatypes.NumTabTyp;
10124         l_CAPACITY_tab                   pa_plsql_datatypes.NumTabTyp;
10125         l_HEAD_COUNT_tab                 pa_plsql_datatypes.NumTabTyp;
10126         l_HEAD_COUNT_ADJ_tab             pa_plsql_datatypes.NumTabTyp;
10127         l_BUCKETING_PERIOD_CODE_tab      pa_plsql_datatypes.Char30TabTyp;
10128         l_TXN_DISCOUNT_PERCENTAGE_tab    pa_plsql_datatypes.NumTabTyp;
10129         l_TRANSFER_PRICE_RATE_tab        pa_plsql_datatypes.NumTabTyp;
10130         l_BL_CREATED_BY_tab              pa_plsql_datatypes.NumTabTyp;
10131         l_BL_CREATION_DATE_tab           pa_plsql_datatypes.DateTabTyp;
10132 
10133         l_budget_version_id_tab          pa_plsql_datatypes.Num15TabTyp;
10134 
10135     PROCEDURE INIT_PLSQL_TABS IS
10136     BEGIN
10137                         l_resource_assignment_id_tab.delete;
10138             l_start_date_tab.delete;
10139             l_period_name_tab.delete;
10140             l_end_date_tab.delete;
10141             l_budget_line_id_tab.delete;
10142             l_quantity_tab.delete;
10143                     l_txn_raw_cost_tab.delete;
10144                         l_txn_burdened_cost_tab.delete;
10145                     l_txn_revenue_tab.delete;
10146                     l_init_quantity_tab.delete;
10147                     l_txn_init_raw_cost_tab.delete;
10148                     l_txn_init_burdened_cost_tab.delete;
10149                     l_txn_init_revenue_tab.delete;
10150                     l_cost_rate_override_tab.delete;
10151             l_burden_rate_override_tab.delete;
10152             l_bill_rate_override_tab.delete;
10153             l_pjfc_raw_cost_tab.delete;
10154             l_pjfc_burden_cost_tab.delete;
10155             l_pjfc_revenue_tab.delete;
10156             l_cost_rejection_tab.delete;
10157             l_rev_rejection_tab.delete;
10158             l_burden_rejection_tab.delete;
10159             l_project_raw_cost_tab.delete;
10160             l_project_burdened_cost_tab.delete;
10161             l_project_revenue_tab.delete;
10162             l_markup_percentage_tab.delete;
10163             l_bill_rate_tab.delete;
10164             l_cost_rate_tab.delete;
10165             l_burden_cost_rate_tab.delete;
10166             l_compiled_set_id_tab.delete;
10167             l_init_raw_cost_tab.delete;
10168             l_init_burdened_cost_tab.delete;
10169             l_init_revenue_tab.delete;
10170             l_project_init_raw_cost_tab.delete;
10171             l_prjct_init_burdened_cost_tab.delete;
10172             l_project_init_revenue_tab.delete;
10173             l_txn_currency_code_tab.delete;
10174             l_projfunc_currency_code_tab.delete;
10175             l_PROJECT_CURRENCY_CODE_tab.delete;
10176             l_PROJECT_COST_RATE_TYPE_tab.delete;
10177             l_PROJECT_COST_EXG_RATE_tab.delete;
10178             l_PROJECT_COST_DATE_TYPE_tab.delete;
10179             l_PROJECT_COST_RATE_DATE_tab.delete;
10180             l_PROJECT_REV_RATE_TYPE_tab.delete;
10181             l_PROJECT_REV_EXG_RATE_tab.delete;
10182             l_PROJECT_REV_DATE_TYPE_tab.delete;
10183             l_PROJECT_REV_RATE_DATE_tab.delete;
10184             l_PROJFUNC_COST_RATE_TYPE_tab.delete;
10185             l_PROJFUNC_COST_EXG_RATE_tab.delete;
10186             l_PROJFUNC_COST_DATE_TYPE_tab.delete;
10187             l_PROJFUNC_COST_RATE_DATE_tab.delete;
10188             l_PROJFUNC_REV_RATE_TYPE_tab.delete;
10189             l_PROJFUNC_REV_EXG_RATE_tab.delete;
10190             l_PROJFUNC_REV_DATE_TYPE_tab.delete;
10191             l_PROJFUNC_REV_RATE_DATE_tab.delete;
10192             l_CHANGE_REASON_CODE_tab.delete;
10193             l_DESCRIPTION_tab.delete;
10194             l_ATTRIBUTE_CATEGORY_tab.delete;
10195             l_ATTRIBUTE1_tab.delete;
10196             l_ATTRIBUTE2_tab.delete;
10197             l_ATTRIBUTE3_tab.delete;
10198             l_ATTRIBUTE4_tab.delete;
10199             l_ATTRIBUTE5_tab.delete;
10200             l_ATTRIBUTE6_tab.delete;
10201             l_ATTRIBUTE7_tab.delete;
10202             l_ATTRIBUTE8_tab.delete;
10203             l_ATTRIBUTE9_tab.delete;
10204             l_ATTRIBUTE10_tab.delete;
10205             l_ATTRIBUTE11_tab.delete;
10206             l_ATTRIBUTE12_tab.delete;
10207             l_ATTRIBUTE13_tab.delete;
10208             l_ATTRIBUTE14_tab.delete;
10209             l_ATTRIBUTE15_tab.delete;
10210             l_RAW_COST_SOURCE_tab.delete;
10211             l_BURDENED_COST_SOURCE_tab.delete;
10212             l_QUANTITY_SOURCE_tab.delete;
10213             l_REVENUE_SOURCE_tab.delete;
10214             l_PM_PRODUCT_CODE_tab.delete;
10215             l_PM_BUDGET_LINE_REFERENCE_tab.delete;
10216             l_CODE_COMBINATION_ID_tab.delete;
10217             l_CCID_GEN_STATUS_CODE_tab.delete;
10218             l_CCID_GEN_REJ_MESSAGE_tab.delete;
10219             l_BORROWED_REVENUE_tab.delete;
10220             l_TP_REVENUE_IN_tab.delete;
10221             l_TP_REVENUE_OUT_tab.delete;
10222             l_REVENUE_ADJ_tab.delete;
10223             l_LENT_RESOURCE_COST_tab.delete;
10224             l_TP_COST_IN_tab.delete;
10225             l_TP_COST_OUT_tab.delete;
10226             l_COST_ADJ_tab.delete;
10227             l_UNASSIGNED_TIME_COST_tab.delete;
10228             l_UTILIZATION_PERCENT_tab.delete;
10229             l_UTILIZATION_HOURS_tab.delete;
10230             l_UTILIZATION_ADJ_tab.delete;
10231             l_CAPACITY_tab.delete;
10232             l_HEAD_COUNT_tab.delete;
10233             l_HEAD_COUNT_ADJ_tab.delete;
10234             l_BUCKETING_PERIOD_CODE_tab.delete;
10235             l_TXN_DISCOUNT_PERCENTAGE_tab.delete;
10236             l_TRANSFER_PRICE_RATE_tab.delete;
10237             l_BL_CREATED_BY_tab.delete;
10238             l_BL_CREATION_DATE_tab.delete;
10239             l_budget_version_id_tab.delete;
10240     END INIT_PLSQL_TABS;
10241 BEGIN
10242         /* Initialize the out variables */
10243         x_return_status := 'S';
10244         x_msg_data := NULL;
10245         x_msg_count := fnd_msg_pub.count_msg;
10246         If p_pa_debug_mode = 'Y' Then
10247                 pa_debug.init_err_stack('PA_FP_CALC_UTILS.update_dffcols');
10248         End If;
10249         IF p_calling_module NOT IN ('BUDGET_GENERATION','FORECAST_GENERATION') Then  --{
10250                 INIT_PLSQL_TABS;
10251                 --print_msg('Fetching budget Line Attributes such as DFFs details from cache ');
10252                 OPEN blAttribDetails;
10253                 FETCH blAttribDetails BULK COLLECT INTO
10254                          l_resource_assignment_id_tab
10255                         ,l_start_date_tab
10256                         ,l_period_name_tab
10257                         ,l_end_date_tab
10258                         ,l_budget_version_id_tab
10259                         ,l_budget_line_id_tab
10260                         ,l_quantity_tab
10261                         ,l_txn_raw_cost_tab
10262                         ,l_txn_burdened_cost_tab
10263                         ,l_txn_revenue_tab
10264                         ,l_init_quantity_tab
10265                         ,l_txn_init_raw_cost_tab
10266                         ,l_txn_init_burdened_cost_tab
10267                         ,l_txn_init_revenue_tab
10268                         ,l_cost_rate_override_tab
10269                         ,l_burden_rate_override_tab
10270                         ,l_bill_rate_override_tab
10271                         ,l_pjfc_raw_cost_tab
10272                         ,l_pjfc_burden_cost_tab
10273                         ,l_pjfc_revenue_tab
10274                         ,l_cost_rejection_tab
10275                         ,l_rev_rejection_tab
10276                         ,l_burden_rejection_tab
10277                         ,l_project_raw_cost_tab
10278                         ,l_project_burdened_cost_tab
10279                         ,l_project_revenue_tab
10280                         ,l_markup_percentage_tab
10281                         ,l_bill_rate_tab
10282                         ,l_cost_rate_tab
10283                         ,l_burden_cost_rate_tab
10284                         ,l_compiled_set_id_tab
10285                         ,l_init_raw_cost_tab
10286                         ,l_init_burdened_cost_tab
10287                         ,l_init_revenue_tab
10288                         ,l_project_init_raw_cost_tab
10289                         ,l_prjct_init_burdened_cost_tab
10290                         ,l_project_init_revenue_tab
10291                         ,l_txn_currency_code_tab
10292                         ,l_projfunc_currency_code_tab
10293                         ,l_PROJECT_CURRENCY_CODE_tab
10294                         ,l_PROJECT_COST_RATE_TYPE_tab
10295                         ,l_PROJECT_COST_EXG_RATE_tab
10296                         ,l_PROJECT_COST_DATE_TYPE_tab
10297                         ,l_PROJECT_COST_RATE_DATE_tab
10298                         ,l_PROJECT_REV_RATE_TYPE_tab
10299                         ,l_PROJECT_REV_EXG_RATE_tab
10300                         ,l_PROJECT_REV_DATE_TYPE_tab
10301                         ,l_PROJECT_REV_RATE_DATE_tab
10302                         ,l_PROJFUNC_COST_RATE_TYPE_tab
10303                         ,l_PROJFUNC_COST_EXG_RATE_tab
10304                         ,l_PROJFUNC_COST_DATE_TYPE_tab
10305                         ,l_PROJFUNC_COST_RATE_DATE_tab
10306                         ,l_PROJFUNC_REV_RATE_TYPE_tab
10307                         ,l_PROJFUNC_REV_EXG_RATE_tab
10308                         ,l_PROJFUNC_REV_DATE_TYPE_tab
10309                         ,l_PROJFUNC_REV_RATE_DATE_tab
10310                         ,l_CHANGE_REASON_CODE_tab
10311                         ,l_DESCRIPTION_tab
10312                         ,l_ATTRIBUTE_CATEGORY_tab
10313                         ,l_ATTRIBUTE1_tab
10314                         ,l_ATTRIBUTE2_tab
10315                         ,l_ATTRIBUTE3_tab
10316                         ,l_ATTRIBUTE4_tab
10317                         ,l_ATTRIBUTE5_tab
10318                         ,l_ATTRIBUTE6_tab
10319                         ,l_ATTRIBUTE7_tab
10320                         ,l_ATTRIBUTE8_tab
10321                         ,l_ATTRIBUTE9_tab
10322                         ,l_ATTRIBUTE10_tab
10323                         ,l_ATTRIBUTE11_tab
10324                         ,l_ATTRIBUTE12_tab
10325                         ,l_ATTRIBUTE13_tab
10326                         ,l_ATTRIBUTE14_tab
10327                         ,l_ATTRIBUTE15_tab
10328                         ,l_RAW_COST_SOURCE_tab
10329                         ,l_BURDENED_COST_SOURCE_tab
10330                         ,l_QUANTITY_SOURCE_tab
10331                         ,l_REVENUE_SOURCE_tab
10332                         ,l_PM_PRODUCT_CODE_tab
10333                         ,l_PM_BUDGET_LINE_REFERENCE_tab
10334                         ,l_CODE_COMBINATION_ID_tab
10335                         ,l_CCID_GEN_STATUS_CODE_tab
10336                         ,l_CCID_GEN_REJ_MESSAGE_tab
10337                         ,l_BORROWED_REVENUE_tab
10338                         ,l_TP_REVENUE_IN_tab
10339                         ,l_TP_REVENUE_OUT_tab
10340                         ,l_REVENUE_ADJ_tab
10341                         ,l_LENT_RESOURCE_COST_tab
10342                         ,l_TP_COST_IN_tab
10343                         ,l_TP_COST_OUT_tab
10344                         ,l_COST_ADJ_tab
10345                         ,l_UNASSIGNED_TIME_COST_tab
10346                         ,l_UTILIZATION_PERCENT_tab
10347                         ,l_UTILIZATION_HOURS_tab
10348                         ,l_UTILIZATION_ADJ_tab
10349                         ,l_CAPACITY_tab
10350                         ,l_HEAD_COUNT_tab
10351                         ,l_HEAD_COUNT_ADJ_tab
10352                         ,l_BUCKETING_PERIOD_CODE_tab
10353                         ,l_TXN_DISCOUNT_PERCENTAGE_tab
10354                         ,l_TRANSFER_PRICE_RATE_tab
10355                         ,l_BL_CREATED_BY_tab
10356                         ,l_BL_CREATION_DATE_tab;
10357                 CLOSE blAttribDetails;
10358                 --print_msg('Number of blAttrib rows fetched['||l_resource_assignment_id_tab.COUNT||']');
10359 
10360                 IF l_resource_assignment_id_tab.COUNT > 0 THEN
10361                         --print_msg('Number of blAttrib rows fetched['||l_resource_assignment_id_tab.COUNT||']');
10362 
10363                         FORALL i IN  l_resource_assignment_id_tab.FIRST .. l_resource_assignment_id_tab.LAST
10364                         INSERT INTO pa_fp_rollup_tmp tmp
10365             (
10366              budget_version_id
10367             ,resource_assignment_id
10368             ,start_date
10369             ,period_name
10370             ,end_date
10371             ,budget_line_id
10372             ,quantity
10373             ,txn_raw_cost
10374             ,txn_burdened_cost
10375             ,txn_revenue
10376             ,init_quantity
10377             ,txn_init_raw_cost
10378             ,txn_init_burdened_cost
10379             ,txn_init_revenue
10380             ,rw_cost_rate_override
10381             ,burden_cost_rate_override
10382             ,bill_rate_override
10383             ,projfunc_raw_cost
10384             ,projfunc_burdened_cost
10385             ,projfunc_revenue
10386             ,cost_rejection_code
10387             ,revenue_rejection_code
10388             ,burden_rejection_code
10389             ,project_raw_cost
10390             ,project_burdened_cost
10391             ,project_revenue
10392             ,bill_markup_percentage
10393             ,bill_rate
10394             ,cost_rate
10395             ,burden_cost_rate
10396             ,cost_ind_compiled_set_id
10397             ,init_raw_cost
10398             ,init_burdened_cost
10399             ,init_revenue
10400             ,project_init_raw_cost
10401             ,project_init_burdened_cost
10402             ,project_init_revenue
10403             ,txn_currency_code
10404             ,projfunc_currency_code
10405             ,project_currency_code
10406             ,project_cost_rate_type
10407             ,project_cost_exchange_rate
10408             ,project_cost_rate_date_type
10409             ,project_cost_rate_date
10410             ,project_rev_rate_type
10411             ,project_rev_exchange_rate
10412             ,project_rev_rate_date_type
10413             ,project_rev_rate_date
10414             ,projfunc_cost_rate_type
10415             ,projfunc_cost_exchange_rate
10416             ,projfunc_cost_rate_date_type
10417             ,projfunc_cost_rate_date
10418             ,projfunc_rev_rate_type
10419             ,projfunc_rev_exchange_rate
10420             ,projfunc_rev_rate_date_type
10421             ,projfunc_rev_rate_date
10422             ,CHANGE_REASON_CODE
10423             ,DESCRIPTION
10424             ,ATTRIBUTE_CATEGORY
10425             ,ATTRIBUTE1
10426             ,ATTRIBUTE2
10427             ,ATTRIBUTE3
10428             ,ATTRIBUTE4
10429             ,ATTRIBUTE5
10430             ,ATTRIBUTE6
10431             ,ATTRIBUTE7
10432             ,ATTRIBUTE8
10433             ,ATTRIBUTE9
10434             ,ATTRIBUTE10
10435             ,ATTRIBUTE11
10436             ,ATTRIBUTE12
10437             ,ATTRIBUTE13
10438             ,ATTRIBUTE14
10439             ,ATTRIBUTE15
10440             ,RAW_COST_SOURCE
10441             ,BURDENED_COST_SOURCE
10442             ,QUANTITY_SOURCE
10443             ,REVENUE_SOURCE
10444             ,PM_PRODUCT_CODE
10445             ,PM_BUDGET_LINE_REFERENCE
10446             ,CODE_COMBINATION_ID
10447             ,CCID_GEN_STATUS_CODE
10448             ,CCID_GEN_REJ_MESSAGE
10449             ,BORROWED_REVENUE
10450             ,TP_REVENUE_IN
10451             ,TP_REVENUE_OUT
10452             ,REVENUE_ADJ
10453             ,LENT_RESOURCE_COST
10454             ,TP_COST_IN
10455             ,TP_COST_OUT
10456             ,COST_ADJ
10457             ,UNASSIGNED_TIME_COST
10458             ,UTILIZATION_PERCENT
10459             ,UTILIZATION_HOURS
10460             ,UTILIZATION_ADJ
10461             ,CAPACITY
10462             ,HEAD_COUNT
10463             ,HEAD_COUNT_ADJ
10464             ,BUCKETING_PERIOD_CODE
10465             ,TXN_DISCOUNT_PERCENTAGE
10466             ,TRANSFER_PRICE_RATE
10467             ,BL_CREATED_BY
10468             ,BL_CREATION_DATE
10469             )
10470             VALUES
10471             (
10472              l_budget_version_id_tab(i)
10473             ,l_resource_assignment_id_tab(i)
10474             ,l_start_date_tab(i)
10475             ,l_period_name_tab(i)
10476             ,l_end_date_tab(i)
10477             ,l_budget_line_id_tab(i)
10478             ,l_quantity_tab(i)
10479             ,l_txn_raw_cost_tab(i)
10480             ,l_txn_burdened_cost_tab(i)
10481             ,l_txn_revenue_tab(i)
10482             ,l_init_quantity_tab(i)
10483             ,l_txn_init_raw_cost_tab(i)
10484             ,l_txn_init_burdened_cost_tab(i)
10485             ,l_txn_init_revenue_tab(i)
10486             ,l_cost_rate_override_tab(i)
10487             ,l_burden_rate_override_tab(i)
10488             ,l_bill_rate_override_tab(i)
10489             ,l_pjfc_raw_cost_tab(i)
10490             ,l_pjfc_burden_cost_tab(i)
10491             ,l_pjfc_revenue_tab(i)
10492             ,l_cost_rejection_tab(i)
10493             ,l_rev_rejection_tab(i)
10494             ,l_burden_rejection_tab(i)
10495             ,l_project_raw_cost_tab(i)
10496             ,l_project_burdened_cost_tab(i)
10497             ,l_project_revenue_tab(i)
10498             ,l_markup_percentage_tab(i)
10499             ,l_bill_rate_tab(i)
10500             ,l_cost_rate_tab(i)
10501             ,l_burden_cost_rate_tab(i)
10502             ,l_compiled_set_id_tab(i)
10503             ,l_init_raw_cost_tab(i)
10504             ,l_init_burdened_cost_tab(i)
10505             ,l_init_revenue_tab(i)
10506             ,l_project_init_raw_cost_tab(i)
10507             ,l_prjct_init_burdened_cost_tab(i)
10508             ,l_project_init_revenue_tab(i)
10509             ,l_txn_currency_code_tab(i)
10510             ,l_projfunc_currency_code_tab(i)
10511             ,l_PROJECT_CURRENCY_CODE_tab(i)
10512             ,l_PROJECT_COST_RATE_TYPE_tab(i)
10513             ,l_PROJECT_COST_EXG_RATE_tab(i)
10514             ,l_PROJECT_COST_DATE_TYPE_tab(i)
10515             ,l_PROJECT_COST_RATE_DATE_tab(i)
10516             ,l_PROJECT_REV_RATE_TYPE_tab(i)
10517             ,l_PROJECT_REV_EXG_RATE_tab(i)
10518             ,l_PROJECT_REV_DATE_TYPE_tab(i)
10519             ,l_PROJECT_REV_RATE_DATE_tab(i)
10520             ,l_PROJFUNC_COST_RATE_TYPE_tab(i)
10521             ,l_PROJFUNC_COST_EXG_RATE_tab(i)
10522             ,l_PROJFUNC_COST_DATE_TYPE_tab(i)
10523             ,l_PROJFUNC_COST_RATE_DATE_tab(i)
10524             ,l_PROJFUNC_REV_RATE_TYPE_tab(i)
10525             ,l_PROJFUNC_REV_EXG_RATE_tab(i)
10526             ,l_PROJFUNC_REV_DATE_TYPE_tab(i)
10527             ,l_PROJFUNC_REV_RATE_DATE_tab(i)
10528             ,l_CHANGE_REASON_CODE_tab(i)
10529             ,l_DESCRIPTION_tab(i)
10530             ,l_ATTRIBUTE_CATEGORY_tab(i)
10531             ,l_ATTRIBUTE1_tab(i)
10532             ,l_ATTRIBUTE2_tab(i)
10533             ,l_ATTRIBUTE3_tab(i)
10534             ,l_ATTRIBUTE4_tab(i)
10535             ,l_ATTRIBUTE5_tab(i)
10536             ,l_ATTRIBUTE6_tab(i)
10537             ,l_ATTRIBUTE7_tab(i)
10538             ,l_ATTRIBUTE8_tab(i)
10539             ,l_ATTRIBUTE9_tab(i)
10540             ,l_ATTRIBUTE10_tab(i)
10541             ,l_ATTRIBUTE11_tab(i)
10542             ,l_ATTRIBUTE12_tab(i)
10543             ,l_ATTRIBUTE13_tab(i)
10544             ,l_ATTRIBUTE14_tab(i)
10545             ,l_ATTRIBUTE15_tab(i)
10546             ,l_RAW_COST_SOURCE_tab(i)
10547             ,l_BURDENED_COST_SOURCE_tab(i)
10548             ,l_QUANTITY_SOURCE_tab(i)
10549             ,l_REVENUE_SOURCE_tab(i)
10550             ,l_PM_PRODUCT_CODE_tab(i)
10551             ,l_PM_BUDGET_LINE_REFERENCE_tab(i)
10552             ,l_CODE_COMBINATION_ID_tab(i)
10553             ,l_CCID_GEN_STATUS_CODE_tab(i)
10554             ,l_CCID_GEN_REJ_MESSAGE_tab(i)
10555             ,l_BORROWED_REVENUE_tab(i)
10556             ,l_TP_REVENUE_IN_tab(i)
10557             ,l_TP_REVENUE_OUT_tab(i)
10558             ,l_REVENUE_ADJ_tab(i)
10559             ,l_LENT_RESOURCE_COST_tab(i)
10560             ,l_TP_COST_IN_tab(i)
10561             ,l_TP_COST_OUT_tab(i)
10562             ,l_COST_ADJ_tab(i)
10563             ,l_UNASSIGNED_TIME_COST_tab(i)
10564             ,l_UTILIZATION_PERCENT_tab(i)
10565             ,l_UTILIZATION_HOURS_tab(i)
10566             ,l_UTILIZATION_ADJ_tab(i)
10567             ,l_CAPACITY_tab(i)
10568             ,l_HEAD_COUNT_tab(i)
10569             ,l_HEAD_COUNT_ADJ_tab(i)
10570             ,l_BUCKETING_PERIOD_CODE_tab(i)
10571             ,l_TXN_DISCOUNT_PERCENTAGE_tab(i)
10572             ,l_TRANSFER_PRICE_RATE_tab(i)
10573             ,l_BL_CREATED_BY_tab(i)
10574             ,l_BL_CREATION_DATE_tab(i) );
10575             --print_msg('Number of rows updated['||sql%rowcount||']');
10576                 END IF;
10577         /* release the buffer */
10578         INIT_PLSQL_TABS;
10579         END IF;  --}
10580 
10581         x_msg_count := fnd_msg_pub.count_msg;
10582     --print_msg('End of update_dffcols retSts['||x_return_status||']');
10583     If p_pa_debug_mode = 'Y' Then
10584         pa_debug.reset_err_stack;
10585     End If;
10586 
10587 EXCEPTION
10588         WHEN OTHERS THEN
10589                 x_return_status := 'U';
10590                 x_msg_data := SQLCODE||SQLERRM;
10591         fnd_msg_pub.add_exc_msg
10592                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
10593                  ,p_procedure_name => 'update_dffcols');
10594         If p_pa_debug_mode = 'Y' Then
10595                     pa_debug.reset_err_stack;
10596         End If;
10597                 RAISE;
10598 
10599 END update_dffcols;
10600 
10601 /*Bug:4272944: Added new procedure to insert zero qty budget lines from pa_fp_spread_calc_tmp1 to
10602 *pa_budget_lines. This fix is done specific to Funding of Autobase line is failing.
10603 *donot populate or use pa_fp_spread_calc_tmp1 table for any other purpose.
10604 *Note: Calling API may populate this table only for AMG/MSP/Autobaseline purpose.
10605 */
10606 PROCEDURE InsertFunding_ReqdLines
10607 	( p_budget_verson_id               IN  Number
10608          ,p_source_context                 IN  Varchar2
10609          ,p_calling_module                 IN  Varchar2
10610          ,p_apply_progress_flag            IN  Varchar2
10611 	 ,p_approved_rev_flag              IN  Varchar2
10612 	 ,p_autoBaseLine_flag              IN  Varchar2
10613          ,x_return_status                  OUT NOCOPY varchar2
10614          ) IS
10615 
10616 	CURSOR cur_tmp1Recs IS
10617 	SELECT tmp.resource_assignment_id
10618 		,tmp.txn_currency_code
10619 		,tmp.start_date
10620 		,tmp.end_date
10621 		,tmp.period_name
10622 		,pa_budget_lines_s.nextval
10623 	FROM  pa_fp_spread_calc_tmp1 tmp
10624 	WHERE tmp.budget_version_id = p_budget_verson_id;
10625 
10626 	l_bl_source		VARCHAR2(10) := 'AB';  --'indicates lines created for funding auto baseline'
10627 	l_resource_assignment_id_tab     pa_plsql_datatypes.Num15TabTyp;
10628 	l_txn_cur_code_tab		 pa_plsql_datatypes.Char30TabTyp;
10629         l_start_date_tab                 pa_plsql_datatypes.DateTabTyp;
10630         l_end_date_tab                   pa_plsql_datatypes.DateTabTyp;
10631         l_period_name_tab                pa_plsql_datatypes.Char50TabTyp;
10632         l_budget_line_id_tab             pa_plsql_datatypes.Num15TabTyp;
10633         l_quantity_tab                   pa_plsql_datatypes.NumTabTyp;
10634 	l_exception_return_status  Varchar2(1);
10635 	l_error_msg_code  Varchar2(1000);
10636 	v_NumErrors 	Number;
10637 	l_x_cntr	Number;
10638 	v_index_position  Number;
10639 	v_error_code      Number;
10640 	l_err_error_code_tab    	pa_plsql_datatypes.Char80TabTyp;
10641 	l_err_budget_line_id_tab	pa_plsql_datatypes.IdTabTyp;
10642 	l_err_raId_tab			pa_plsql_datatypes.IdTabTyp;
10643 	l_err_txn_cur_tab		pa_plsql_datatypes.Char80TabTyp;
10644 	l_err_sdate_tab			pa_plsql_datatypes.DateTabTyp;
10645 	l_err_edate_tab			pa_plsql_datatypes.DateTabTyp;
10646 
10647 
10648 	PROCEDURE INIT_PLSQL_TABS IS
10649     	BEGIN
10650             l_resource_assignment_id_tab.delete;
10651 	    l_txn_cur_code_tab.delete;
10652             l_start_date_tab.delete;
10653             l_end_date_tab.delete;
10654             l_period_name_tab.delete;
10655 	    l_budget_line_id_tab.delete;
10656 	    l_err_error_code_tab.delete;
10657             l_err_budget_line_id_tab.delete;
10658             l_err_raId_tab.delete;
10659             l_err_txn_cur_tab.delete;
10660             l_err_sdate_tab.delete;
10661             l_err_edate_tab.delete;
10662 	END;
10663 BEGIN
10664 
10665 	x_return_status := 'S';
10666 	IF NVL(p_approved_rev_flag,'N') = 'Y' AND NVL(p_autoBaseLine_flag,'N') = 'Y' Then
10667 		Init_plsql_tabs;
10668 		OPEN cur_tmp1Recs;
10669 		FETCH cur_tmp1Recs BULK COLLECT INTO
10670 			l_resource_assignment_id_tab
10671             		,l_txn_cur_code_tab
10672             		,l_start_date_tab
10673             		,l_end_date_tab
10674             		,l_period_name_tab
10675             		,l_budget_line_id_tab;
10676 		CLOSE cur_tmp1Recs;
10677 		--print_msg('Number of lines present in calc_tmp1 table inserted by calling api ['||l_budget_line_id_tab.COUNT||']');
10678 		IF l_budget_line_id_tab.COUNT > 0 THEN --{
10679 		 BEGIN  --{
10680 
10681 		  FORALL i IN l_budget_line_id_tab.FIRST .. l_budget_line_id_tab.LAST
10682 			INSERT INTO PA_BUDGET_LINES bl
10683             		(bl.BUDGET_LINE_ID
10684 			,bl.RESOURCE_ASSIGNMENT_ID --resource_assignment_id
10685                          ,bl.BUDGET_VERSION_ID     --budget_version_id
10686                          ,bl.TXN_CURRENCY_CODE     --txn_currency_code
10687                          ,bl.QUANTITY              --total_qty
10688                          ,bl.TXN_RAW_COST          --total_raw_cost
10689                          ,bl.TXN_BURDENED_COST     --total_burdened_cost
10690                          ,bl.TXN_REVENUE           --total_revenue
10691                          ,bl.TXN_STANDARD_COST_RATE             --raw_cost_rate
10692                          ,bl.TXN_COST_RATE_OVERRIDE    --rw_cost_rate_override
10693                          ,bl.BURDEN_COST_RATE      --b_cost_rate
10694                          ,bl.BURDEN_COST_RATE_OVERRIDE --b_cost_rate_override
10695                          ,bl.TXN_STANDARD_BILL_RATE             --bill_rate
10696                          ,bl.TXN_BILL_RATE_OVERRIDE    --bill_rate_override
10697                          ,bl.START_DATE            --line_start_date
10698                          ,bl.END_DATE              --line_end_date
10699             		 ,bl.PERIOD_NAME
10700             		 ,bl.PROJECT_CURRENCY_CODE
10701             		 ,bl.PROJFUNC_CURRENCY_CODE
10702             		 ,bl.PROJECT_COST_RATE_TYPE
10703             		 ,bl.PROJECT_COST_EXCHANGE_RATE
10704             		 ,bl.PROJECT_COST_RATE_DATE_TYPE
10705             		 ,bl.PROJECT_COST_RATE_DATE
10706             		 ,bl.PROJECT_REV_RATE_TYPE
10707             		 ,bl.PROJECT_REV_EXCHANGE_RATE
10708             		 ,bl.PROJECT_REV_RATE_DATE_TYPE
10709             		 ,bl.PROJECT_REV_RATE_DATE
10710             		 ,bl.PROJFUNC_COST_RATE_TYPE
10711             		 ,bl.PROJFUNC_COST_EXCHANGE_RATE
10712             		 ,bl.PROJFUNC_COST_RATE_DATE_TYPE
10713             		 ,bl.PROJFUNC_COST_RATE_DATE
10714             		 ,bl.PROJFUNC_REV_RATE_TYPE
10715             		 ,bl.PROJFUNC_REV_EXCHANGE_RATE
10716             		 ,bl.PROJFUNC_REV_RATE_DATE_TYPE
10717             		 ,bl.PROJFUNC_REV_RATE_DATE
10718             		 ,bl.CHANGE_REASON_CODE
10719             		 ,bl.DESCRIPTION
10720             		 ,bl.ATTRIBUTE_CATEGORY
10721             		 ,bl.ATTRIBUTE1
10722             		 ,bl.ATTRIBUTE2
10723             		,bl.ATTRIBUTE3
10724             		,bl.ATTRIBUTE4
10725             		,bl.ATTRIBUTE5
10726             		,bl.ATTRIBUTE6
10727             		,bl.ATTRIBUTE7
10728             		,bl.ATTRIBUTE8
10729             		,bl.ATTRIBUTE9
10730             		,bl.ATTRIBUTE10
10731             		,bl.ATTRIBUTE11
10732             		,bl.ATTRIBUTE12
10733             		,bl.ATTRIBUTE13
10734             		,bl.ATTRIBUTE14
10735             		,bl.ATTRIBUTE15
10736             		,bl.RAW_COST_SOURCE
10737             		,bl.BURDENED_COST_SOURCE
10738             		,bl.QUANTITY_SOURCE
10739             		,bl.REVENUE_SOURCE
10740             		,bl.PM_PRODUCT_CODE
10741             		,bl.PM_BUDGET_LINE_REFERENCE
10742             		,bl.CODE_COMBINATION_ID
10743             		,bl.CCID_GEN_STATUS_CODE
10744             		,bl.CCID_GEN_REJ_MESSAGE
10745             		,bl.BORROWED_REVENUE
10746             		,bl.TP_REVENUE_IN
10747             		,bl.TP_REVENUE_OUT
10748             		,bl.REVENUE_ADJ
10749             		,bl.LENT_RESOURCE_COST
10750             		,bl.TP_COST_IN
10751             		,bl.TP_COST_OUT
10752             		,bl.COST_ADJ
10753             		,bl.UNASSIGNED_TIME_COST
10754             		,bl.UTILIZATION_PERCENT
10755 			,bl.UTILIZATION_HOURS
10756             		,bl.UTILIZATION_ADJ
10757             		,bl.CAPACITY
10758             		,bl.HEAD_COUNT
10759             		,bl.HEAD_COUNT_ADJ
10760             		,bl.BUCKETING_PERIOD_CODE
10761             		,bl.TXN_DISCOUNT_PERCENTAGE
10762             		,bl.TRANSFER_PRICE_RATE
10763             		,bl.CREATED_BY
10764             		,bl.CREATION_DATE
10765 			,bl.LAST_UPDATED_BY
10766 			,bl.LAST_UPDATE_LOGIN
10767 			,bl.LAST_UPDATE_DATE
10768 				)
10769             		SELECT /*+ INDEX(TMP PA_FP_SPREAD_CALC_TMP1_N1) */ l_budget_line_id_tab(i)
10770 			 ,tmp.RESOURCE_ASSIGNMENT_ID --resource_assignment_id
10771                          ,tmp.BUDGET_VERSION_ID     --budget_version_id
10772                          ,tmp.TXN_CURRENCY_CODE     --txn_currency_code
10773                          ,tmp.QUANTITY              --total_qty
10774                          ,tmp.TXN_RAW_COST          --total_raw_cost
10775                          ,tmp.TXN_BURDENED_COST     --total_burdened_cost
10776                          ,tmp.TXN_REVENUE           --total_revenue
10777                          ,tmp.COST_RATE             --raw_cost_rate
10778                          ,tmp.COST_RATE_OVERRIDE    --rw_cost_rate_override
10779                          ,tmp.BURDEN_COST_RATE      --b_cost_rate
10780                          ,tmp.BURDEN_COST_RATE_OVERRIDE --b_cost_rate_override
10781                          ,tmp.BILL_RATE             --bill_rate
10782                          ,tmp.BILL_RATE_OVERRIDE    --bill_rate_override
10783                          ,tmp.START_DATE            --line_start_date
10784                          ,tmp.END_DATE              --line_end_date
10785              		,tmp.PERIOD_NAME
10786             		,tmp.PROJECT_CURRENCY_CODE
10787             		,tmp.PROJFUNC_CURRENCY_CODE
10788             		,tmp.PROJECT_COST_RATE_TYPE
10789             		,tmp.PROJECT_COST_EXCHANGE_RATE
10790             		,tmp.PROJECT_COST_RATE_DATE_TYPE
10791             		,tmp.PROJECT_COST_RATE_DATE
10792             		,tmp.PROJECT_REV_RATE_TYPE
10793             		,tmp.PROJECT_REV_EXCHANGE_RATE
10794             		,tmp.PROJECT_REV_RATE_DATE_TYPE
10795             		,tmp.PROJECT_REV_RATE_DATE
10796             		,tmp.PROJFUNC_COST_RATE_TYPE
10797             		,tmp.PROJFUNC_COST_EXCHANGE_RATE
10798             		,tmp.PROJFUNC_COST_RATE_DATE_TYPE
10799             		,tmp.PROJFUNC_COST_RATE_DATE
10800             		,tmp.PROJFUNC_REV_RATE_TYPE
10801             		,tmp.PROJFUNC_REV_EXCHANGE_RATE
10802             		,tmp.PROJFUNC_REV_RATE_DATE_TYPE
10803             		,tmp.PROJFUNC_REV_RATE_DATE
10804             		,tmp.CHANGE_REASON_CODE
10805             		,tmp.DESCRIPTION
10806             		,tmp.ATTRIBUTE_CATEGORY
10807             		,tmp.ATTRIBUTE1
10808             		,tmp.ATTRIBUTE2
10809             		,tmp.ATTRIBUTE3
10810             		,tmp.ATTRIBUTE4
10811             		,tmp.ATTRIBUTE5
10812             		,tmp.ATTRIBUTE6
10813             		,tmp.ATTRIBUTE7
10814             		,tmp.ATTRIBUTE8
10815             		,tmp.ATTRIBUTE9
10816             		,tmp.ATTRIBUTE10
10817             		,tmp.ATTRIBUTE11
10818             		,tmp.ATTRIBUTE12
10819             		,tmp.ATTRIBUTE13
10820             		,tmp.ATTRIBUTE14
10821             		,tmp.ATTRIBUTE15
10822             		,NVL(tmp.RAW_COST_SOURCE,l_bl_source)
10823             		,NVL(tmp.BURDENED_COST_SOURCE,l_bl_source)
10824             		,NVL(tmp.QUANTITY_SOURCE,l_bl_source)
10825             		,NVL(tmp.REVENUE_SOURCE,l_bl_source)
10826             		,tmp.PM_PRODUCT_CODE
10827             		,tmp.PM_BUDGET_LINE_REFERENCE
10828             		,tmp.CODE_COMBINATION_ID
10829             		,tmp.CCID_GEN_STATUS_CODE
10830             		,tmp.CCID_GEN_REJ_MESSAGE
10831             		,tmp.BORROWED_REVENUE
10832             		,tmp.TP_REVENUE_IN
10833             		,tmp.TP_REVENUE_OUT
10834             		,tmp.REVENUE_ADJ
10835             		,tmp.LENT_RESOURCE_COST
10836             		,tmp.TP_COST_IN
10837             		,tmp.TP_COST_OUT
10838             		,tmp.COST_ADJ
10839             		,tmp.UNASSIGNED_TIME_COST
10840             		,tmp.UTILIZATION_PERCENT
10841             		,tmp.UTILIZATION_HOURS
10842             		,tmp.UTILIZATION_ADJ
10843             		,tmp.CAPACITY
10844             		,tmp.HEAD_COUNT
10845             		,tmp.HEAD_COUNT_ADJ
10846             		,tmp.BUCKETING_PERIOD_CODE
10847             		,tmp.TXN_DISCOUNT_PERCENTAGE
10848             		,tmp.TRANSFER_PRICE_RATE
10849             		,tmp.BL_CREATED_BY
10850             		,tmp.BL_CREATION_DATE
10851 			,tmp.BL_CREATED_BY  --last updated by
10852 			,tmp.BL_CREATED_BY  -- lastupdate login
10853 			,trunc(sysdate)    -- last update dated
10854         		FROM PA_FP_SPREAD_CALC_TMP1 tmp
10855         		WHERE  tmp.resource_assignment_id = l_resource_assignment_id_tab(i)
10856         		AND   tmp.txn_currency_code =	l_txn_cur_code_tab(i)
10857 			AND   tmp.start_date = 	l_start_date_tab(i);
10858 
10859 		 EXCEPTION
10860 			WHEN OTHERS THEN
10861         			print_msg('Entered AutoBaseline bulk exception portion');
10862         			/* Now process the exceptions lines one-by-one */
10863         			l_exception_return_status := 'S';
10864             			v_NumErrors := SQL%BULK_EXCEPTIONS.COUNT;
10865         			l_x_cntr := 0;
10866         			FOR v_Count IN 1..v_NumErrors LOOP   --{
10867             			  l_x_cntr := l_x_cntr +1;
10868                 		  v_index_position  :=SQL%BULK_EXCEPTIONS(v_Count).error_index;
10869                 		  v_error_code      :=SQL%BULK_EXCEPTIONS(v_Count).error_code;
10870             			  l_err_error_code_tab(l_x_cntr)  := SQL%BULK_EXCEPTIONS(v_Count).error_code;
10871             			  l_err_budget_line_id_tab(l_x_cntr)  := l_budget_line_id_tab(v_index_position);
10872             			  l_err_raId_tab(l_x_cntr) := l_resource_assignment_id_tab(v_index_position);
10873             			  l_err_txn_cur_tab(l_x_cntr) := l_txn_cur_code_tab(v_index_position);
10874             			  l_err_sdate_tab(l_x_cntr)   := l_start_date_tab(v_index_position);
10875 				  l_err_edate_tab(l_x_cntr)   := l_end_date_tab(v_index_position);
10876 				  If v_error_code <> 1 then -- 1 means unique constraint voilation.
10877             				l_exception_return_status := 'U';
10878             				x_return_status := l_exception_return_status;
10879             				l_error_msg_code := SQLERRM(0 - SQL%BULK_EXCEPTIONS(v_Count).error_code);
10880 					print_msg('ErrorRaId['||l_err_raId_tab(l_x_cntr)||']TxnCur['||l_err_txn_cur_tab(l_x_cntr)||']');
10881 				        print_msg('SD['||l_err_sdate_tab(l_x_cntr)||']ED['||l_err_edate_tab(l_x_cntr)||']ErrorCode['||l_error_msg_code);
10882             				PA_UTILS.ADD_MESSAGE
10883                         		(p_app_short_name => 'PA'
10884             				,p_msg_name       => v_error_code||'-'||l_error_msg_code
10885                     			,p_token1         => 'G_PROJECT_NAME'
10886                     			,p_value1         => g_project_name
10887                     			,p_token2         => 'G_RESOURCE_ASSIGNMENT_ID'
10888                     			,p_value2         => l_err_raId_tab(l_x_cntr)
10889                     			,p_token3         => 'G_TXN_CURRENCY_CODE'
10890                     			,p_value3         => l_err_txn_cur_tab(l_x_cntr)
10891             				,p_token4         => 'G_BUDGET_LINE_ID'
10892             				,p_value4         => l_err_budget_line_id_tab(l_x_cntr)
10893             				);
10894             			  End If;
10895 			        END LOOP; --}
10896 				x_return_status := l_exception_return_status;
10897 		 END; --}
10898 		END IF; --} end of l_budget_line_id_tab.COUNT > 0
10899 	END IF;
10900 	Init_plsql_tabs;
10901 	IF P_PA_DEBUG_MODE = 'Y' Then
10902 	print_msg('Return Status of InsertFunding_ReqdLines api ['||x_return_status||']');
10903 	End If;
10904 EXCEPTION
10905 
10906  	WHEN OTHERS THEN
10907                 x_return_status := 'U';
10908                 print_msg('Error occured in InsertFunding_ReqdLines['|| SQLCODE||SQLERRM);
10909         	fnd_msg_pub.add_exc_msg
10910                 ( p_pkg_name       => 'PA_FP_CALC_UTILS'
10911                  ,p_procedure_name => 'InsertFunding_ReqdLines');
10912                 RAISE;
10913 
10914 END InsertFunding_ReqdLines;
10915 
10916 
10917 END PA_FP_CALC_UTILS;