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