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