[Home] [Help]
PACKAGE BODY: APPS.PA_FP_GEN_BUDGET_AMT_PUB
Source
1 PACKAGE body PA_FP_GEN_BUDGET_AMT_PUB as
2 /* $Header: PAFPGAMB.pls 120.22.12020000.4 2013/05/23 07:35:56 bpottipa ship $ */
3
4 P_PA_DEBUG_MODE varchar2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N');
5
6 /**
7 * Wrapper API
8 *
9 * 23-MAY-05 dkuo Added parameters P_CHECK_SRC_ERRORS, X_WARNING_MESSAGE.
10 * Please check body of VALIDATE_SUPPORT_CASES in PAFPGAUB.pls
11 * for list of valid parameter values.
12 **/
13 PROCEDURE GENERATE_BUDGET_AMT_WRP
14 (P_PROJECT_ID IN pa_projects_all.PROJECT_ID%TYPE,
15 P_BUDGET_VERSION_ID IN PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE,
16 P_CALLED_MODE IN VARCHAR2,
17 P_COMMIT_FLAG IN VARCHAR2,
18 P_INIT_MSG_FLAG IN VARCHAR2,
19 P_CHECK_SRC_ERRORS_FLAG IN VARCHAR2,
20 X_WARNING_MESSAGE OUT NOCOPY VARCHAR2,
21 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
22 X_MSG_COUNT OUT NOCOPY NUMBER,
23 X_MSG_DATA OUT NOCOPY VARCHAR2) IS
24
25 l_module_name VARCHAR2(200) := 'pa.plsql.PA_FP_GEN_BUDGET_AMT_PUB.GENERATE_BUDGET_AMT_WRP';
26
27 l_cost_version_id PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE;
28 l_ci_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
29 l_gen_res_asg_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
30 l_deleted_res_asg_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
31 l_commit_flag VARCHAR2(1);
32 l_init_msg_flag VARCHAR2(1);
33 l_ret_status VARCHAR2(100);
34 l_msg_count NUMBER;
35 l_msg_data VARCHAR2(2000);
36 l_data VARCHAR2(2000);
37 l_msg_index_out NUMBER:=0;
38
39 l_fp_cols_rec PA_FP_GEN_AMOUNT_UTILS.FP_COLS;
40 l_rev_gen_method VARCHAR2(3);
41
42 -- Bug Fix: 4569365. Removed MRC code.
43 -- g_mrc_exception EXCEPTION;
44
45 l_wp_track_cost_flag VARCHAR2(1);
46
47 l_source_bv_id PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE;
48
49 l_record_version_number PA_BUDGET_VERSIONS.RECORD_VERSION_NUMBER%TYPE;
50
51 l_res_as_id PA_PLSQL_DATATYPES.IdTabTyp; /* Bug 4160375 */
52 BEGIN
53 --hr_utility.trace_on(null,'mftest');
54 --hr_utility.trace('---BEGIN---');
55
56 --Setting initial values
57 IF p_init_msg_flag = 'Y' THEN
58 FND_MSG_PUB.initialize;
59 END IF;
60
61 X_MSG_COUNT := 0;
62 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
63
64 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
65 PA_DEBUG.init_err_stack('PA_FP_GEN_BUDGET_AMT_PUB.GENERATE_BUDGET_AMT_WRP');
66 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
67 pa_debug.set_curr_function( p_function => 'GENERATE_BUDGET_AMT_WRP'
68 ,p_debug_mode => p_pa_debug_mode);
69 END IF;
70
71 /*CBS enhancement to validate Planning Options of the budget bug#16600305*/
72 PA_ALTERNATE_TASK_PVT.Is_Planning_Options_Valid(
73 P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
74 X_RETURN_STATUS => X_RETURN_STATUS,
75 X_MSG_COUNT => X_MSG_COUNT,
76 X_MSG_DATA => X_MSG_DATA);
77 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
78 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
79 p_msg_name => x_msg_data);
80 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
81 END IF;
82
83 --Calling the get_plan_version_dtls api
84 IF p_pa_debug_mode = 'Y' THEN
85 pa_fp_gen_amount_utils.fp_debug
86 (p_called_mode => p_called_mode,
87 p_msg => 'Before calling
88 pa_fp_gen_amount_utils.get_plan_version_dtls',
89 p_module_name => l_module_name,
90 p_log_level => 5);
91 END IF;
92 PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS
93 (P_PROJECT_ID => P_PROJECT_ID,
94 P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
95 X_FP_COLS_REC => l_fp_cols_rec,
96 X_RETURN_STATUS => X_RETURN_STATUS,
97 X_MSG_COUNT => X_MSG_COUNT,
98 X_MSG_DATA => X_MSG_DATA);
99 IF p_pa_debug_mode = 'Y' THEN
100 pa_fp_gen_amount_utils.fp_debug
101 (p_called_mode => p_called_mode,
102 p_msg => 'Status after calling
103 pa_fp_gen_amount_utils.get_plan_version_dtls: '
104 ||x_return_status,
105 p_module_name => l_module_name,
106 p_log_level => 5);
107 END IF;
108 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
109 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
110 END IF;
111
112 /* This API validates that the current generation is supported.
113 * For a list of unsupported cases, please see comments at the
114 * beginning of the VALIDATE_SUPPORT_CASES API (PAFPGAUB.pls) */
115
116 IF p_pa_debug_mode = 'Y' THEN
117 pa_fp_gen_amount_utils.fp_debug
118 ( p_msg => 'Before calling
119 pa_fp_gen_amount_utils.validate_support_cases',
120 p_module_name => l_module_name,
121 p_log_level => 5 );
122 END IF;
123
124 PA_FP_GEN_AMOUNT_UTILS.VALIDATE_SUPPORT_CASES (
125 P_FP_COLS_REC_TGT => l_fp_cols_rec,
126 P_CHECK_SRC_ERRORS_FLAG => P_CHECK_SRC_ERRORS_FLAG,
127 P_CALLING_CONTEXT => P_CALLED_MODE, /* Added for ER 4391321 */
128 X_WARNING_MESSAGE => X_WARNING_MESSAGE,
129 X_RETURN_STATUS => X_RETURN_STATUS,
130 X_MSG_COUNT => X_MSG_COUNT,
131 X_MSG_DATA => X_MSG_DATA );
132
133 IF p_pa_debug_mode = 'Y' THEN
134 pa_fp_gen_amount_utils.fp_debug
135 ( p_msg => 'Status after calling
136 pa_fp_gen_amount_utils.validate_support_cases: '
137 ||x_return_status,
138 p_module_name => l_module_name,
139 p_log_level => 5 );
140 END IF;
141 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
142 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
143 END IF;
144
145 /* When VALIDATE_SUPPORT_CASES returns a non-null warning message,
146 * we need to Return control to the page/front-end so that a warning
147 * can be displayed asking the user whether or not to proceed.
148 */
149 IF X_WARNING_MESSAGE IS NOT NULL THEN
150 -- Before returning, we always have the following check.
151 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
152 PA_DEBUG.reset_err_stack;
153 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
154 PA_DEBUG.Reset_Curr_Function;
155 END IF;
156
157 RETURN;
158 END IF;
159
160 --acquire version lock
161
162 SELECT record_version_number
163 INTO l_record_version_number
164 FROM pa_budget_versions
165 WHERE budget_version_id = p_budget_version_id;
166 IF p_pa_debug_mode = 'Y' THEN
167 pa_fp_gen_amount_utils.fp_debug
168 (p_called_mode => p_called_mode,
169 p_msg => 'Before calling pa_fin_plan_pvt.lock_unlock_version',
170 p_module_name => l_module_name,
171 p_log_level => 5);
172 END IF;
173 pa_fin_plan_pvt.lock_unlock_version
174 (p_budget_version_id => P_BUDGET_VERSION_ID,
175 p_record_version_number => l_record_version_number,
176 p_action => 'L',
177 p_user_id => FND_GLOBAL.USER_ID,
178 p_person_id => NULL,
179 x_return_status => x_return_status,
180 x_msg_count => x_msg_count,
181 x_msg_data => x_msg_data);
182 IF p_pa_debug_mode = 'Y' THEN
183 pa_fp_gen_amount_utils.fp_debug
184 (p_called_mode => p_called_mode,
185 p_msg => 'Status after calling pa_fin_plan_pvt.lock_unlock_version:'
186 ||x_return_status,
187 p_module_name => l_module_name,
188 p_log_level => 5);
189 END IF;
190 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
191 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
192 PA_DEBUG.reset_err_stack;
193 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
194 PA_DEBUG.Reset_Curr_Function;
195 END IF;
196 RETURN;
197 END IF;
198
199 COMMIT;
200
201 /* we need to commit the changes so that the locked by person info
202 will be available for other sessions. */
203
204 /* This API returns generic error message that
205 can be used for any other process for
206 locking the main budget table */
207
208 --Calling the acquire_locks_for_copy_actual api
209 IF p_pa_debug_mode = 'Y' THEN
210 pa_fp_gen_amount_utils.fp_debug
211 (p_called_mode => p_called_mode,
212 p_msg => 'Before calling
213 pa_fp_copy_from_pkg.acquire_locks_for_copy_actual',
214 p_module_name => l_module_name,
215 p_log_level => 5);
216 END IF;
217 PA_FP_COPY_FROM_PKG.ACQUIRE_LOCKS_FOR_COPY_ACTUAL
218 (P_PLAN_VERSION_ID => P_BUDGET_VERSION_ID,
219 X_RETURN_STATUS => X_RETURN_STATUS,
220 X_MSG_COUNT => X_MSG_COUNT,
221 X_MSG_DATA => X_MSG_DATA);
222 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
223 --If we can't acquire lock, customized message is thrown from within
224 -- the API, so we should suppress exception error.
225 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
226 PA_DEBUG.reset_err_stack;
227 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
228 PA_DEBUG.Reset_Curr_Function;
229 END IF;
230 RETURN;
231 END IF;
232 IF p_pa_debug_mode = 'Y' THEN
233 pa_fp_gen_amount_utils.fp_debug
234 (p_called_mode => p_called_mode,
235 p_msg => 'Status after calling
236 pa_fp_copy_from_pkg.acquire_locks_for_copy_actual: '
237 ||x_return_status,
238 p_module_name => l_module_name,
239 p_log_level => 5);
240 END IF;
241
242 /* Records are deleted from pa_budget_lines and PA_RESOURCE_ASSIGNMENTS
243 tables when the flag is set to N */
244 IF l_fp_cols_rec.x_gen_ret_manual_line_flag = 'N' THEN
245 DELETE FROM PA_BUDGET_LINES
246 WHERE budget_version_id = p_budget_version_id ;
247
248 DELETE FROM PA_RESOURCE_ASSIGNMENTS
249 WHERE budget_version_id = p_budget_version_id ;
250
251 -- IPM: New Entity ER ------------------------------------------
252 -- Call the maintenance api in DELETE mode
253 IF p_pa_debug_mode = 'Y' THEN
254 PA_FP_GEN_AMOUNT_UTILS.FP_DEBUG
255 ( P_MSG => 'Before calling PA_RES_ASG_CURRENCY_PUB.'
256 || 'MAINTAIN_DATA',
257 P_CALLED_MODE => p_called_mode,
258 P_MODULE_NAME => l_module_name,
259 P_LOG_LEVEL => 5 );
260 END IF;
261 PA_RES_ASG_CURRENCY_PUB.MAINTAIN_DATA
262 ( P_FP_COLS_REC => l_fp_cols_rec,
263 P_CALLING_MODULE => 'BUDGET_GENERATION',
264 P_DELETE_FLAG => 'Y',
265 P_VERSION_LEVEL_FLAG => 'Y',
266 P_CALLED_MODE => p_called_mode,
267 X_RETURN_STATUS => x_return_status,
268 X_MSG_COUNT => x_msg_count,
269 X_MSG_DATA => x_msg_data );
270 IF p_pa_debug_mode = 'Y' THEN
271 PA_FP_GEN_AMOUNT_UTILS.FP_DEBUG
272 ( P_MSG => 'After calling PA_RES_ASG_CURRENCY_PUB.'
273 || 'MAINTAIN_DATA: ' || x_return_status,
274 P_CALLED_MODE => p_called_mode,
275 P_MODULE_NAME => l_module_name,
276 P_LOG_LEVEL => 5 );
277 END IF;
278 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
279 raise PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
280 END IF;
281 -- END OF IPM: New Entity ER ------------------------------------------
282
283 ELSIF l_fp_cols_rec.x_gen_ret_manual_line_flag = 'Y' THEN
284 -- Bug 4344111: We should delete budget lines for all resources with
285 -- non-null transaction source code and then null-out the transaction
286 -- source code for these resources. Moved the logic for Bug 4160375
287 -- from right before Commitments are processed to this location, and
288 -- modified the SELECT statement's WHERE clause to check that the
289 -- transaction_source_code IS NOT NULL (which includes the previous
290 -- check that transaction_source_code was either Open Commitments,
291 -- Billing Events, or Change Documents).
292
293 /* Bug 4160375 Fixed the problem of Comm. getting incremented on every round of budget generation */
294
295 SELECT resource_assignment_id
296 BULK COLLECT INTO
297 l_res_as_id
298 FROM PA_RESOURCE_ASSIGNMENTS
299 WHERE budget_version_id = p_budget_version_id AND
300 transaction_source_code IS NOT NULL;
301
302 IF (l_res_as_id.count > 0) THEN
303 FORALL i IN 1 .. l_res_as_id.count
304 DELETE FROM PA_BUDGET_LINES
305 WHERE resource_assignment_id = l_res_as_id(i);
306
307 FORALL j IN 1 .. l_res_as_id.count
308 UPDATE PA_RESOURCE_ASSIGNMENTS
309 SET transaction_source_code = null
310 WHERE resource_assignment_id = l_res_as_id(j);
311
312 -- IPM: New Entity ER ------------------------------------------
313 DELETE pa_resource_asgn_curr_tmp;
314
315 FORALL k IN 1..l_res_as_id.count
316 INSERT INTO pa_resource_asgn_curr_tmp (
317 RESOURCE_ASSIGNMENT_ID,
318 DELETE_FLAG )
319 VALUES (
320 l_res_as_id(k),
321 'Y' );
322
323 -- Call the maintenance api in DELETE mode
324 IF p_pa_debug_mode = 'Y' THEN
325 PA_FP_GEN_AMOUNT_UTILS.FP_DEBUG
326 ( P_MSG => 'Before calling PA_RES_ASG_CURRENCY_PUB.'
327 || 'MAINTAIN_DATA',
328 P_CALLED_MODE => p_called_mode,
329 P_MODULE_NAME => l_module_name,
330 P_LOG_LEVEL => 5 );
331 END IF;
332 PA_RES_ASG_CURRENCY_PUB.MAINTAIN_DATA
333 ( P_FP_COLS_REC => l_fp_cols_rec,
334 P_CALLING_MODULE => 'BUDGET_GENERATION',
335 P_DELETE_FLAG => 'Y',
336 P_VERSION_LEVEL_FLAG => 'N',
337 P_CALLED_MODE => p_called_mode,
338 X_RETURN_STATUS => x_return_status,
339 X_MSG_COUNT => x_msg_count,
340 X_MSG_DATA => x_msg_data );
341 IF p_pa_debug_mode = 'Y' THEN
342 PA_FP_GEN_AMOUNT_UTILS.FP_DEBUG
343 ( P_MSG => 'After calling PA_RES_ASG_CURRENCY_PUB.'
344 || 'MAINTAIN_DATA: ' || x_return_status,
345 P_CALLED_MODE => p_called_mode,
346 P_MODULE_NAME => l_module_name,
347 P_LOG_LEVEL => 5 );
348 END IF;
349 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
350 raise PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
351 END IF;
352 -- END OF IPM: New Entity ER ------------------------------------------
353
354 END IF;
355 END IF; -- Manual lines logic
356
357 --l_rev_gen_method := PA_FP_GEN_FCST_PG_PKG.GET_REV_GEN_METHOD(p_project_id);
358 l_rev_gen_method := nvl(l_fp_cols_rec.x_revenue_derivation_method,PA_FP_GEN_FCST_PG_PKG.GET_REV_GEN_METHOD(p_project_id)); --Bug 5462471
359 /* Checking for the planning level and calling appropriate API */
360 IF l_fp_cols_rec.x_gen_src_code = 'RESOURCE_SCHEDULE' THEN
361 IF l_fp_cols_rec.x_version_type = 'REVENUE'
362 AND l_rev_gen_method = 'C' THEN
363 IF p_pa_debug_mode = 'Y' THEN
364 pa_fp_gen_amount_utils.fp_debug
365 (p_called_mode => p_called_mode,
366 p_msg => 'Before calling
367 pa_fp_gen_budget_amt_pub.gen_rev_bdgt_amt_res_sch_wrp',
368 p_module_name => l_module_name,
369 p_log_level => 5);
370 END IF;
371 --hr_utility.trace('before PA_FP_GEN_BUDGET_AMT_PUB.GEN_REV_BDGT_AMT_RES_SCH_WRP');
372 PA_FP_GEN_BUDGET_AMT_PUB.GEN_REV_BDGT_AMT_RES_SCH_WRP
373 (P_PROJECT_ID => P_PROJECT_ID,
374 P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
375 P_FP_COLS_REC => l_fp_cols_rec,
376 P_PLAN_CLASS_CODE => l_fp_cols_rec.x_plan_class_code,
377 P_GEN_SRC_CODE => l_fp_cols_rec.x_gen_src_code,
378 P_COST_PLAN_TYPE_ID => l_fp_cols_rec.x_gen_src_plan_type_id,
379 p_COST_VERSION_ID => l_cost_version_id,
380 P_RETAIN_MANUAL_FLAG => l_fp_cols_rec.x_gen_ret_manual_line_flag,
381 P_CALLED_MODE => 'SELF_SERVICE',
382 P_INC_CHG_DOC_FLAG => l_fp_cols_rec.x_gen_incl_change_doc_flag,
383 P_INC_BILL_EVENT_FLAG => l_fp_cols_rec.x_gen_incl_bill_event_flag,
384 P_INC_OPEN_COMMIT_FLAG => l_fp_cols_rec.x_gen_incl_open_comm_flag,
385 P_ACTUALS_THRU_DATE => NULL,
386 P_CI_ID_TAB => l_ci_id_tab,
387 PX_GEN_RES_ASG_ID_TAB => l_gen_res_asg_id_tab,
388 PX_DELETED_RES_ASG_ID_TAB => l_deleted_res_asg_id_tab,
389 P_COMMIT_FLAG => P_COMMIT_FLAG,
390 P_INIT_MSG_FLAG => P_INIT_MSG_FLAG,
391 X_RETURN_STATUS => X_RETURN_STATUS,
392 X_MSG_COUNT => X_MSG_COUNT,
393 X_MSG_DATA => X_MSG_DATA);
394
395 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
396 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
397 END IF;
398 IF p_pa_debug_mode = 'Y' THEN
399 pa_fp_gen_amount_utils.fp_debug
400 (p_called_mode => p_called_mode,
401 p_msg => 'Status after calling pa_fp_gen_budget_amt_pub.'||
402 'gen_rev_bdgt_amt_res_sch_wrp:'||x_return_status,
403 p_module_name => l_module_name,
404 p_log_level => 5);
405 END IF;
406 ELSE
407 /* Calling Resource Schedule API */
408 IF p_pa_debug_mode = 'Y' THEN
409 pa_fp_gen_amount_utils.fp_debug
410 (p_called_mode => p_called_mode,
411 p_msg => 'Before calling
412 pa_fp_gen_budget_amt_pub.generate_budget_amt_res_sch',
413 p_module_name => l_module_name,
414 p_log_level => 5);
415 END IF;
416 --hr_utility.trace('before PA_FP_GEN_BUDGET_AMT_PUB.GENERATE_BUDGET_AMT_RES_SCH');
417 PA_FP_GEN_BUDGET_AMT_PUB.GENERATE_BUDGET_AMT_RES_SCH
418 (P_PROJECT_ID => P_PROJECT_ID,
419 P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
420 P_FP_COLS_REC => l_fp_cols_rec,
421 P_PLAN_CLASS_CODE => l_fp_cols_rec.x_plan_class_code,
422 P_GEN_SRC_CODE => l_fp_cols_rec.x_gen_src_code,
423 P_COST_PLAN_TYPE_ID => l_fp_cols_rec.x_gen_src_plan_type_id,
424 p_COST_VERSION_ID => l_cost_version_id,
425 P_RETAIN_MANUAL_FLAG => l_fp_cols_rec.x_gen_ret_manual_line_flag,
426 P_CALLED_MODE => 'SELF_SERVICE',
427 P_INC_CHG_DOC_FLAG => l_fp_cols_rec.x_gen_incl_change_doc_flag,
428 P_INC_BILL_EVENT_FLAG => l_fp_cols_rec.x_gen_incl_bill_event_flag,
429 P_INC_OPEN_COMMIT_FLAG => l_fp_cols_rec.x_gen_incl_open_comm_flag,
430 P_CI_ID_TAB => l_ci_id_tab,
431 PX_GEN_RES_ASG_ID_TAB => l_gen_res_asg_id_tab,
432 PX_DELETED_RES_ASG_ID_TAB => l_deleted_res_asg_id_tab,
433 P_COMMIT_FLAG => P_COMMIT_FLAG,
434 P_INIT_MSG_FLAG => P_INIT_MSG_FLAG,
435 X_RETURN_STATUS => X_RETURN_STATUS,
436 X_MSG_COUNT => X_MSG_COUNT,
437 X_MSG_DATA => X_MSG_DATA);
438 --dbms_output.put_line('after PA_FP_GEN_BUDGET_AMT_PUB.GENERATE_BUDGET_AMT_RES_SCH:'||x_return_status);
439 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
440 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
441 END IF;
442 IF p_pa_debug_mode = 'Y' THEN
443 pa_fp_gen_amount_utils.fp_debug
444 (p_called_mode => p_called_mode,
445 p_msg => 'Status after calling
446 pa_fp_gen_budget_amt_pub.generate_budget_amt_res_sch: '
447 ||x_return_status,
448 p_module_name => l_module_name,
449 p_log_level => 5);
450 END IF;
451 END IF;
452 ELSIF l_fp_cols_rec.x_gen_src_code = 'WORKPLAN_RESOURCES'
453 OR l_fp_cols_rec.x_gen_src_code = 'FINANCIAL_PLAN' THEN
454 /* Calling Work Plan API */
455 l_wp_track_cost_flag := Pa_Fp_wp_gen_amt_utils.get_wp_track_cost_amt_flag (p_project_id);
456 IF l_fp_cols_rec.x_version_type = 'REVENUE'
457 AND l_rev_gen_method = 'C'
458 AND l_wp_track_cost_flag <> 'Y' THEN
459 IF p_pa_debug_mode = 'Y' THEN
460 pa_fp_gen_amount_utils.fp_debug
461 (p_called_mode => p_called_mode,
462 p_msg => 'Before calling
463 pa_fp_wp_gen_budget_amt_pub.generate_wp_budget_amt',
464 p_module_name => l_module_name,
465 p_log_level => 5);
466 END IF;
467 PA_FP_GEN_BUDGET_AMT_PUB.GEN_WP_REV_BDGT_AMT_WRP
468 (P_PROJECT_ID => P_PROJECT_ID,
469 P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
470 P_PLAN_CLASS_CODE => l_fp_cols_rec.x_plan_class_code,
471 P_GEN_SRC_CODE => l_fp_cols_rec.x_gen_src_code,
472 P_COST_PLAN_TYPE_ID => l_fp_cols_rec.x_gen_src_plan_type_id,
473 P_COST_VERSION_ID => l_cost_version_id,
474 P_RETAIN_MANUAL_FLAG => l_fp_cols_rec.x_gen_ret_manual_line_flag,
475 P_CALLED_MODE => 'SELF_SERVICE',
476 P_INC_CHG_DOC_FLAG => l_fp_cols_rec.x_gen_incl_change_doc_flag,
477 P_INC_BILL_EVENT_FLAG => l_fp_cols_rec.x_gen_incl_bill_event_flag,
478 P_INC_OPEN_COMMIT_FLAG => l_fp_cols_rec.x_gen_incl_open_comm_flag,
479 P_CI_ID_TAB => l_ci_id_tab,
480 PX_GEN_RES_ASG_ID_TAB => l_gen_res_asg_id_tab,
481 PX_DELETED_RES_ASG_ID_TAB => l_deleted_res_asg_id_tab,
482 P_INIT_MSG_FLAG => P_INIT_MSG_FLAG,
483 P_COMMIT_FLAG => P_COMMIT_FLAG,
484 X_RETURN_STATUS => X_RETURN_STATUS,
485 X_MSG_COUNT => X_MSG_COUNT,
486 X_MSG_DATA => X_MSG_DATA);
487 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
488 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
489 END IF;
490 IF p_pa_debug_mode = 'Y' THEN
491 pa_fp_gen_amount_utils.fp_debug
492 (p_called_mode => p_called_mode,
493 p_msg => 'Status after calling
494 pa_fp_wp_gen_budget_amt_pub.generate_wp_budget_amt: '
495 ||x_return_status,
496 p_module_name => l_module_name,
497 p_log_level => 5);
498 END IF;
499 ELSE
500 IF p_pa_debug_mode = 'Y' THEN
501 pa_fp_gen_amount_utils.fp_debug
502 (p_called_mode => p_called_mode,
503 p_msg => 'Before calling
504 pa_fp_wp_gen_budget_amt_pub.generate_wp_budget_amt',
505 p_module_name => l_module_name,
506 p_log_level => 5);
507 END IF;
508 PA_FP_WP_GEN_BUDGET_AMT_PUB.GENERATE_WP_BUDGET_AMT
509 (P_PROJECT_ID => P_PROJECT_ID,
510 P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
511 P_PLAN_CLASS_CODE => l_fp_cols_rec.x_plan_class_code,
512 P_GEN_SRC_CODE => l_fp_cols_rec.x_gen_src_code,
513 P_COST_PLAN_TYPE_ID => l_fp_cols_rec.x_gen_src_plan_type_id,
514 P_COST_VERSION_ID => l_cost_version_id,
515 P_RETAIN_MANUAL_FLAG => l_fp_cols_rec.x_gen_ret_manual_line_flag,
516 P_CALLED_MODE => 'SELF_SERVICE',
517 P_INC_CHG_DOC_FLAG => l_fp_cols_rec.x_gen_incl_change_doc_flag,
518 P_INC_BILL_EVENT_FLAG => l_fp_cols_rec.x_gen_incl_bill_event_flag,
519 P_INC_OPEN_COMMIT_FLAG => l_fp_cols_rec.x_gen_incl_open_comm_flag,
520 P_CI_ID_TAB => l_ci_id_tab,
521 PX_GEN_RES_ASG_ID_TAB => l_gen_res_asg_id_tab,
522 PX_DELETED_RES_ASG_ID_TAB => l_deleted_res_asg_id_tab,
523 P_INIT_MSG_FLAG => P_INIT_MSG_FLAG,
524 P_COMMIT_FLAG => P_COMMIT_FLAG,
525 X_RETURN_STATUS => X_RETURN_STATUS,
526 X_MSG_COUNT => X_MSG_COUNT,
527 X_MSG_DATA => X_MSG_DATA);
528
529 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
530 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
531 END IF;
532 IF p_pa_debug_mode = 'Y' THEN
533 pa_fp_gen_amount_utils.fp_debug
534 (p_called_mode => p_called_mode,
535 p_msg => 'Status after calling
536 pa_fp_wp_gen_budget_amt_pub.generate_wp_budget_amt: '
537 ||x_return_status,
538 p_module_name => l_module_name,
539 p_log_level => 5);
540 END IF;
541 END IF;
542 END IF;
543
544 IF l_fp_cols_rec.x_gen_incl_open_comm_flag = 'Y' THEN
545 /* Calling Commitment API*/
546 IF p_pa_debug_mode = 'Y' THEN
547 pa_fp_gen_amount_utils.fp_debug
548 (p_called_mode => p_called_mode,
549 p_msg => 'Before calling
550 pa_fp_gen_commitment_amounts.gen_commitment_amounts',
551 p_module_name => l_module_name,
552 p_log_level => 5);
553 END IF;
554 PA_FP_GEN_COMMITMENT_AMOUNTS.GEN_COMMITMENT_AMOUNTS
555 (P_PROJECT_ID => P_PROJECT_ID,
556 P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
557 P_FP_COLS_REC => l_fp_cols_rec,
558 PX_GEN_RES_ASG_ID_TAB => l_gen_res_asg_id_tab,
559 PX_DELETED_RES_ASG_ID_TAB => l_deleted_res_asg_id_tab,
560 X_RETURN_STATUS => X_RETURN_STATUS,
561 X_MSG_COUNT => X_MSG_COUNT,
562 X_MSG_DATA => X_MSG_DATA);
563
564 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
565 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
566 END IF;
567 IF p_pa_debug_mode = 'Y' THEN
568 pa_fp_gen_amount_utils.fp_debug
569 (p_called_mode => p_called_mode,
570 p_msg =>'Status after calling
571 pa_fp_gen_commitment_amounts.gen_commitment_amounts: '
572 ||x_return_status,
573 p_module_name => l_module_name,
574 p_log_level => 5);
575 END IF;
576 END IF;
577
578 IF l_fp_cols_rec.x_gen_src_plan_version_id IS NOT NULL THEN
579 l_source_bv_id := l_fp_cols_rec.x_gen_src_plan_version_id;
580 ELSE
581 SELECT
582 DECODE(bv.version_type,
583 'COST', opt.gen_src_cost_plan_version_id,
584 'REVENUE',opt.gen_src_rev_plan_version_id,
585 'ALL',opt.gen_src_all_plan_version_id)
586 INTO l_source_bv_id
587 FROM pa_proj_fp_options opt, pa_budget_versions bv
588 WHERE bv.budget_version_id = opt.fin_plan_version_id
589 AND bv.budget_version_id = p_budget_version_id ;
590 END IF;
591
592 IF (l_fp_cols_rec.x_version_type = 'ALL'
593 OR l_fp_cols_rec.x_version_type = 'REVENUE')
594 AND l_rev_gen_method = 'C' THEN
595
596 -- Bug 4549862: When generating a Cost and Revenue together version
597 -- from Staffing Plan with revenue accrual method of COST, the
598 -- currency conversion step is performed on the PA_FP_ROLLUP_TMP
599 -- table (instead of pa_budget_lines) earlier in the code flow by the
600 -- GENERATE_BUDGET_AMT_RES_SCH API so that pc/pfc Commitment amounts
601 -- can be honored. We should not call the currency conversion API in
602 -- this case.
603
604 IF l_fp_cols_rec.x_version_type = 'ALL' AND
605 l_fp_cols_rec.x_gen_src_code <> 'RESOURCE_SCHEDULE' THEN
606 /* Calling the currency conversion API*/
607 IF p_pa_debug_mode = 'Y' THEN
608 pa_fp_gen_amount_utils.fp_debug
609 (p_called_mode => p_called_mode,
610 p_msg => 'Before calling
611 pa_fp_multi_currency_pkg.convert_txn_currency',
612 p_module_name => l_module_name,
613 p_log_level => 5);
614 END IF;
615 PA_FP_MULTI_CURRENCY_PKG.CONVERT_TXN_CURRENCY
616 (p_budget_version_id => P_BUDGET_VERSION_ID,
617 p_entire_version => 'Y',
618 p_calling_module => 'BUDGET_GENERATION', -- Added for Bug#5395732
619 X_RETURN_STATUS => X_RETURN_STATUS,
620 X_MSG_COUNT => X_MSG_COUNT,
621 X_MSG_DATA => X_MSG_DATA);
622 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
623 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
624 END IF;
625 IF p_pa_debug_mode = 'Y' THEN
626 pa_fp_gen_amount_utils.fp_debug
627 (p_called_mode => p_called_mode,
628 p_msg => 'Status after calling
629 pa_fp_multi_currency_pkg.convert_txn_currency: '
630 ||x_return_status,
631 p_module_name => l_module_name,
632 p_log_level => 5);
633 END IF;
634 END IF;
635
636 -- Bug 4549862: Removed ROLLUP_BUDGET_VERSION API call that used
637 -- to be before the GEN_COST_BASED_REVENUE API call. The same API
638 -- call is commented out in GENERATE_FCST_AMT_WRP. The Rollup API
639 -- is called at the end of the generation process in the Maintain
640 -- Budget Version API already. The Cost Based Revenue Generation
641 -- API may have used rolled up amounts in the past, but does not
642 -- currently use them. Lastly, the Change Documents process uses
643 -- rolled up amounts, but the Change Document wrapper API takes
644 -- care of this already.
645
646 /* Calling gen cost based revenue api */
647 IF p_pa_debug_mode = 'Y' THEN
648 pa_fp_gen_amount_utils.fp_debug
649 (p_called_mode => p_called_mode,
650 p_msg => 'Before calling
651 pa_fp_rev_gen_pub.gen_cost_based_revenue',
652 p_module_name => l_module_name,
653 p_log_level => 5);
654 END IF;
655 PA_FP_REV_GEN_PUB.GEN_COST_BASED_REVENUE
656 (P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
657 P_FP_COLS_REC => l_fp_cols_rec,
658 X_RETURN_STATUS => X_RETURN_STATUS,
659 X_MSG_COUNT => X_MSG_COUNT,
660 X_MSG_DATA => X_MSG_DATA);
661 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
662 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
663 END IF;
664 IF p_pa_debug_mode = 'Y' THEN
665 pa_fp_gen_amount_utils.fp_debug
666 (p_called_mode => p_called_mode,
667 p_msg => 'Status after calling
668 pa_fp_rev_gen_pub.gen_cost_based_revenue: '
669 ||x_return_status,
670 p_module_name => l_module_name,
671 p_log_level => 5);
672 END IF;
673 END IF;
674
675 /* Calling include_change_document_wrp api */
676 IF l_fp_cols_rec.x_gen_incl_change_doc_flag = 'Y' THEN
677 IF l_fp_cols_rec.x_gen_src_code = 'FINANCIAL_PLAN' THEN
678 IF p_pa_debug_mode = 'Y' THEN
679 pa_fp_gen_amount_utils.fp_debug
680 (p_called_mode => p_called_mode,
681 p_msg => 'Before calling
682 pa_fp_ci_merge.copy_merged_ctrl_items',
683 p_module_name => l_module_name,
684 p_log_level => 5);
685 END IF;
686 PA_FP_CI_MERGE.copy_merged_ctrl_items
687 (p_project_id => p_project_id
688 ,p_source_version_id => l_source_bv_id
689 ,p_target_version_id => l_fp_cols_rec.x_budget_version_id
690 ,p_calling_context => 'GENERATION' --Bug 4247703
691 ,x_return_status => x_return_status
692 ,x_msg_count => x_msg_count
693 ,x_msg_data => x_msg_data);
694 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
695 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
696 END IF;
697 IF p_pa_debug_mode = 'Y' THEN
698 pa_fp_gen_amount_utils.fp_debug
699 (p_called_mode => p_called_mode,
700 p_msg => 'Status after calling
701 pa_fp_ci_merge.copy_merged_ctrl_items: '
702 ||x_return_status,
703 p_module_name => l_module_name,
704 p_log_level => 5);
705 END IF;
706 END IF;
707
708 IF p_pa_debug_mode = 'Y' THEN
709 pa_fp_gen_amount_utils.fp_debug
710 (p_called_mode => p_called_mode,
711 p_msg => 'Before calling PA_FP_GEN_PUB.include_change_document_wrp',
712 p_module_name => l_module_name,
713 p_log_level => 5);
714 END IF;
715 --dbms_output.put_line('before chg_doc');
716 PA_FP_GEN_PUB.INCLUDE_CHANGE_DOCUMENT_WRP
717 (P_FP_COLS_REC => l_fp_cols_rec,
718 X_RETURN_STATUS => X_RETURN_STATUS,
719 X_MSG_COUNT => X_MSG_COUNT,
720 X_MSG_DATA => X_MSG_DATA);
721 --dbms_output.put_line('after chg_doc:'||x_return_status);
722 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
723 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
724 END IF;
725 IF p_pa_debug_mode = 'Y' THEN
726 pa_fp_gen_amount_utils.fp_debug
727 (p_called_mode => p_called_mode,
728 p_msg => 'Status after calling PA_FP_GEN_PUB.include_change_document_wrp: '
729 ||x_return_status,
730 p_module_name => l_module_name,
731 p_log_level => 5);
732 END IF;
733 END IF;
734
735 /*Only for ALL or Revenue version, revenue generation method can be set
736 and include billing event flag can be chosen. This logic is implemented
737 in both here and UI*/
738 IF (l_fp_cols_rec.x_version_type = 'ALL'
739 OR l_fp_cols_rec.x_version_type = 'REVENUE')
740 AND (l_rev_gen_method = 'E'
741 OR l_fp_cols_rec.x_gen_incl_bill_event_flag = 'Y') THEN
742 /* Calling Billing Events API */
743 IF p_pa_debug_mode = 'Y' THEN
744 pa_fp_gen_amount_utils.fp_debug
745 (p_called_mode => p_called_mode,
746 p_msg => 'Before calling
747 pa_fp_gen_billing_amounts.gen_billing_amounts',
748 p_module_name => l_module_name,
749 p_log_level => 5);
750 END IF;
751 PA_FP_GEN_BILLING_AMOUNTS.GEN_BILLING_AMOUNTS
752 (P_PROJECT_ID => P_PROJECT_ID,
753 P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
754 P_FP_COLS_REC => l_fp_cols_rec,
755 PX_GEN_RES_ASG_ID_TAB => l_gen_res_asg_id_tab,
756 PX_DELETED_RES_ASG_ID_TAB => l_deleted_res_asg_id_tab,
757 X_RETURN_STATUS => X_RETURN_STATUS,
758 X_MSG_COUNT => X_MSG_COUNT,
759 X_MSG_DATA => X_MSG_DATA);
760
761 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
762 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
763 END IF;
764 IF p_pa_debug_mode = 'Y' THEN
765 pa_fp_gen_amount_utils.fp_debug
766 (p_called_mode => p_called_mode,
767 p_msg => 'Status after calling
768 pa_fp_gen_billing_amounts.gen_billing_amounts: '
769 ||x_return_status,
770 p_module_name => l_module_name,
771 p_log_level => 5);
772 END IF;
773 END IF;
774
775 IF l_fp_cols_rec.x_version_type = 'REVENUE' THEN
776 IF p_pa_debug_mode = 'Y' THEN
777 pa_fp_gen_amount_utils.fp_debug
778 (p_called_mode => p_called_mode,
779 p_msg => 'Before calling
780 pa_fp_gen_budget_amt_pub.reset_cost_amounts',
781 p_module_name => l_module_name,
782 p_log_level => 5);
783 END IF;
784 PA_FP_GEN_BUDGET_AMT_PUB.RESET_COST_AMOUNTS
785 (P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
786 X_RETURN_STATUS => X_RETURN_STATUS,
787 X_MSG_COUNT => X_MSG_COUNT,
788 X_MSG_DATA => X_MSG_DATA);
789
790 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
791 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
792 END IF;
793 IF p_pa_debug_mode = 'Y' THEN
794 pa_fp_gen_amount_utils.fp_debug
795 (p_called_mode => p_called_mode,
796 p_msg => 'Status after calling
797 pa_fp_gen_budget_amt_pub.reset_cost_amounts: '
798 ||x_return_status,
799 p_module_name => l_module_name,
800 p_log_level => 5);
801 END IF;
802 END IF;
803 IF p_pa_debug_mode = 'Y' THEN
804 pa_fp_gen_amount_utils.fp_debug
805 (p_called_mode => p_called_mode,
806 p_msg => 'Before calling
807 pa_fp_gen_fcst_amt_pub1.maintain_budget_version',
808 p_module_name => l_module_name,
809 p_log_level => 5);
810 END IF;
811 --hr_utility.trace('before pub1.maintain bv');
812 PA_FP_GEN_FCST_AMT_PUB1.MAINTAIN_BUDGET_VERSION
813 (P_PROJECT_ID => P_PROJECT_ID,
814 P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
815 X_RETURN_STATUS => X_RETURN_STATUS,
816 X_MSG_COUNT => X_MSG_COUNT,
817 X_MSG_DATA => X_MSG_DATA);
818 --hr_utility.trace('after pub1.maintain bv:'||x_return_status);
819 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
820 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
821 END IF;
822 IF p_pa_debug_mode = 'Y' THEN
823 pa_fp_gen_amount_utils.fp_debug
824 (p_called_mode => p_called_mode,
825 p_msg => 'Status after calling
826 pa_fp_gen_fcst_amt_pub1.maintain_budget_version: '
827 ||x_return_status,
828 p_module_name => l_module_name,
829 p_log_level => 5);
830 END IF;
831
832 IF P_COMMIT_FLAG = 'Y' THEN
833 COMMIT;
834 END IF;
835
836 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
837 PA_DEBUG.reset_err_stack;
838 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
839 PA_DEBUG.Reset_Curr_Function;
840 END IF;
841
842 EXCEPTION
843 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
844 -- Bug Fix: 4569365. Removed MRC code.
845 -- PA_MRC_FINPLAN.G_CALLING_MODULE := Null;
846 l_msg_count := FND_MSG_PUB.count_msg;
847 IF l_msg_count = 1 THEN
848 PA_INTERFACE_UTILS_PUB.get_messages
849 (p_encoded => FND_API.G_TRUE
850 ,p_msg_index => 1
851 ,p_msg_count => l_msg_count
852 ,p_msg_data => l_msg_data
853 ,p_data => l_data
854 ,p_msg_index_out => l_msg_index_out);
855 x_msg_data := l_data;
856 x_msg_count := l_msg_count;
857 ELSE
858 x_msg_count := l_msg_count;
859 END IF;
860 ROLLBACK;
861 x_return_status := FND_API.G_RET_STS_ERROR;
862
863 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
864 PA_DEBUG.reset_err_stack;
865 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
866 PA_DEBUG.Reset_Curr_Function;
867 END IF;
868
869 WHEN OTHERS THEN
870 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
871 x_msg_data := SUBSTR(SQLERRM,1,240);
872 FND_MSG_PUB.add_exc_msg
873 ( p_pkg_name => 'PA_FP_GEN_BUDGET_AMT_PUB'
874 ,p_procedure_name => 'GENERATE_BUDGET_AMT_WRP');
875
876 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
877 PA_DEBUG.reset_err_stack;
878 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
879 PA_DEBUG.Reset_Curr_Function;
880 END IF;
881
882 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
883
884 END GENERATE_BUDGET_AMT_WRP;
885
886 FUNCTION Get_Person_Id(p_res_id NUMBER)
887 RETURN NUMBER IS
888 x_person_id NUMBER;
889
890 BEGIN
891 SELECT person_id INTO x_person_id FROM
892 PA_RESOURCE_TXN_ATTRIBUTES WHERE
893 RESOURCE_ID = p_res_id;
894 RETURN x_person_id;
895 EXCEPTION
896 WHEN NO_DATA_FOUND THEN
897 RETURN NULL;
898 WHEN OTHERS THEN
899 RETURN NULL;
900 END;
901
902 PROCEDURE UPDATE_BUDG_VERSION(p_budget_version_id IN NUMBER ) IS
903 BEGIN
904 UPDATE PA_BUDGET_VERSIONS SET PLAN_PROCESSING_CODE = 'E'
905 WHERE BUDGET_VERSION_ID = p_budget_version_id;
906 COMMIT;
907 END;
908
909 /* Procedure to generate budget amount when
910 planning level is Resource Schedule */
911 PROCEDURE GENERATE_BUDGET_AMT_RES_SCH
912 (P_PROJECT_ID IN PA_PROJECTS_ALL.PROJECT_ID%TYPE,
913 P_BUDGET_VERSION_ID IN PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE,
914 P_FP_COLS_REC IN PA_FP_GEN_AMOUNT_UTILS.FP_COLS,
915 P_PLAN_CLASS_CODE IN PA_FIN_PLAN_TYPES_B.PLAN_CLASS_CODE%TYPE,
916 P_GEN_SRC_CODE IN PA_PROJ_FP_OPTIONS.GEN_ALL_SRC_CODE%TYPE,
917 P_COST_PLAN_TYPE_ID IN PA_PROJ_FP_OPTIONS.GEN_SRC_COST_PLAN_TYPE_ID%TYPE,
918 P_COST_VERSION_ID IN PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE,
919 P_RETAIN_MANUAL_FLAG IN PA_PROJ_FP_OPTIONS.GEN_COST_RET_MANUAL_LINE_FLAG%TYPE,
920 P_CALLED_MODE IN VARCHAR2,
921 P_INC_CHG_DOC_FLAG IN PA_PROJ_FP_OPTIONS.GEN_COST_INCL_CHANGE_DOC_FLAG%TYPE,
922 P_INC_BILL_EVENT_FLAG IN PA_PROJ_FP_OPTIONS.GEN_REV_INCL_BILL_EVENT_FLAG%TYPE,
923 P_INC_OPEN_COMMIT_FLAG IN PA_PROJ_FP_OPTIONS.GEN_COST_INCL_OPEN_COMM_FLAG%TYPE,
924 P_ACTUALS_THRU_DATE IN PA_PERIODS_ALL.END_DATE%TYPE,
925 P_CI_ID_TAB IN PA_PLSQL_DATATYPES.IdTabTyp,
926 PX_GEN_RES_ASG_ID_TAB IN OUT NOCOPY PA_PLSQL_DATATYPES.IdTabTyp,
927 --this pl/sql table is used to update the initial res_asg_id from the generated amounts
928 PX_DELETED_RES_ASG_ID_TAB IN OUT NOCOPY PA_PLSQL_DATATYPES.IdTabTyp,
929 --this pl/sql table will have res_asg_id for which manual budget lines are already deleted
930 P_COMMIT_FLAG IN VARCHAR2,
931 P_INIT_MSG_FLAG IN VARCHAR2,
932 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
933 X_MSG_COUNT OUT NOCOPY NUMBER,
934 X_MSG_DATA OUT NOCOPY VARCHAR2) IS
935
936 l_module_name VARCHAR2(200) := 'pa.plsql.PA_FP_GEN_BUDGET_AMT_PUB.GENERATE_BUDGET_AMT_RES_SCH';
937
938 l_budget_line_id PA_BUDGET_LINES.BUDGET_LINE_ID%type;
939
940 CURSOR PROJ_DETAILS IS
941 SELECT P.PROJECT_TYPE,
942 P.PROJECT_CURRENCY_CODE,
943 P.CARRYING_OUT_ORGANIZATION_ID,
944 P.PROJECT_VALUE,
945 P.JOB_BILL_RATE_SCHEDULE_ID,
946 P.EMP_BILL_RATE_SCHEDULE_ID,
947 P.DISTRIBUTION_RULE,
948 P.BILL_JOB_GROUP_ID,
949 NVL(P.ORG_ID,-99),
950 P.COMPLETION_DATE,
951 NVL(P.TEMPLATE_FLAG,'N'),
952 P.PROJFUNC_CURRENCY_CODE,
953 P.PROJFUNC_BIL_RATE_DATE_CODE,
954 P.PROJFUNC_BIL_RATE_TYPE,
955 P.PROJFUNC_BIL_RATE_DATE,
956 P.PROJFUNC_BIL_EXCHANGE_RATE,
957 P.COST_JOB_GROUP_ID,
958 P.PROJECT_RATE_DATE,
959 P.PROJECT_RATE_TYPE,
960 P.PROJECT_BIL_RATE_DATE_CODE,
961 P.PROJECT_BIL_RATE_TYPE,
962 P.PROJECT_BIL_RATE_DATE,
963 P.PROJECT_BIL_EXCHANGE_RATE,
964 P.PROJFUNC_COST_RATE_TYPE,
965 P.PROJFUNC_COST_RATE_DATE,
966 P.LABOR_TP_SCHEDULE_ID,
967 P.LABOR_TP_FIXED_DATE,
968 P.LABOR_SCHEDULE_DISCOUNT,
969 NVL(P.ASSIGN_PRECEDES_TASK,'N'),
970 NVL(P.LABOR_BILL_RATE_ORG_ID,-99),
971 P.LABOR_STD_BILL_RATE_SCHDL,
972 P.LABOR_SCHEDULE_FIXED_DATE,
973 P.LABOR_SCH_TYPE
974 FROM PA_PROJECTS_ALL P
975 WHERE PROJECT_ID = P_PROJECT_ID;
976
977 CURSOR PROJ_ASSIGNMENTS IS
978 SELECT DISTINCT PA.ASSIGNMENT_ID,
979 PA.START_DATE,
980 PA.RESOURCE_ID,
981 PA.PROJECT_ROLE_ID,
982 PA.FCST_JOB_ID,
983 PA.FCST_JOB_GROUP_ID,
984 PR.MEANING,
985 PA.ASSIGNMENT_TYPE ,
986 NVL(PA.EXPENDITURE_ORGANIZATION_ID,
987 NVL(p.CARRYING_OUT_ORGANIZATION_ID,-99))
988 EXPENDITURE_ORGANIZATION_ID,
989 PA.EXPENDITURE_TYPE,
990 PA.REVENUE_BILL_RATE,
991 NVL(PA.EXPENDITURE_ORG_ID,
992 NVL(p.ORG_ID,-99)) EXPENDITURE_ORG_ID,
993 PA.STATUS_CODE,
994 WB.BILLABLE_CAPITALIZABLE_FLAG,
995 'Y' PROCESS_CODE,
996 to_char(null) ERROR_MSG_CODE,
997 PA.END_DATE,
998 RTA.PERSON_ID,
999 PA.ASSIGNMENT_NAME,
1000 FI.EXPENDITURE_ORGANIZATION_ID,
1001 DECODE(PA.EXPENDITURE_TYPE,null,NULL,'EXPENDITURE_TYPE')
1002 FROM PA_PROJECT_ASSIGNMENTS PA,
1003 PA_WORK_TYPES_B WB,
1004 PA_PROJECT_ROLE_TYPES PR,
1005 PA_PROJECTS_ALL P,
1006 PA_RESOURCE_TXN_ATTRIBUTES RTA,
1007 PA_FORECAST_ITEMS FI
1008 WHERE PA.PROJECT_ID = p_project_id
1009 AND PA.PROJECT_ROLE_ID = PR.PROJECT_ROLE_ID
1010 AND P.PROJECT_ID = p_project_id
1011 AND WB.WORK_TYPE_ID = PA.WORK_TYPE_ID(+)
1012 AND PA.RESOURCE_ID = RTA.RESOURCE_ID(+)
1013 AND DECODE(PA.STATUS_CODE,NULL,'Y',
1014 DECODE(PA.ASSIGNMENT_TYPE,
1015 'OPEN_ASSIGNMENT',
1016 PA_ASSIGNMENT_UTILS.Is_Asgmt_In_Open_Status(PA.STATUS_CODE,'OPEN_ASGMT'),
1017 'STAFFED_ASSIGNMENT',
1018 DECODE(PA_ASSIGNMENT_UTILS.Is_Staffed_Asgmt_Cancelled(PA.STATUS_CODE,'STAFFED_ASGMT'),
1019 'Y','N','N','Y'),
1020 'STAFFED_ADMIN_ASSIGNMENT',
1021 DECODE(PA_ASSIGNMENT_UTILS.Is_Staffed_Asgmt_Cancelled(PA.STATUS_CODE,'STAFFED_ASGMT'),
1022 'Y','N','N','Y'))) = 'Y'
1023 AND PA.ASSIGNMENT_ID = FI.ASSIGNMENT_ID
1024 AND FI.DELETE_FLAG = 'N' -- Added for Bug 5029939
1025 AND FI.ERROR_FLAG = 'N'; -- Added for Bug 5029939
1026
1027 /* Bug 5657334: Added org_id join in pa_periods_all to avoid multiple row selection */
1028 CURSOR FCST_PA(p_prj_assignment_id NUMBER, c_act_thru_date DATE, c_exp_organization_id NUMBER, c_org_id NUMBER) IS
1029 SELECT FI.EXPENDITURE_ORG_ID,
1030 FI.EXPENDITURE_ORGANIZATION_ID,
1031 FI.RCVR_PA_PERIOD_NAME,
1032 P.START_DATE,
1033 P.END_DATE,
1034 SUM(FI.ITEM_QUANTITY),
1035 MIN(FI.FORECAST_ITEM_ID)
1036 FROM PA_FORECAST_ITEMS FI,
1037 PA_FORECAST_ITEM_DETAILS FID,
1038 PA_PERIODS_ALL P
1039 WHERE FI.PROJECT_ORG_ID = NVL(P.ORG_ID,-99)
1040 AND P.ORG_ID = c_org_id /* Bug 5657334 */
1041 AND P.PERIOD_NAME = FI.RCVR_PA_PERIOD_NAME
1042 AND FI.FORECAST_ITEM_ID = FID.FORECAST_ITEM_ID
1043 AND FID.FORECAST_SUMMARIZED_CODE = 'N'
1044 AND FID.NET_ZERO_FLAG = 'N'
1045 AND FI.ERROR_FLAG = 'N'
1046 AND FI.DELETE_FLAG = 'N'
1047 AND ASSIGNMENT_ID = p_prj_assignment_id
1048 AND FI.EXPENDITURE_ORG_ID <>-88
1049 AND FI.ITEM_DATE >= NVL(c_act_thru_date+1,FI.ITEM_DATE)
1050 AND FI.EXPENDITURE_ORGANIZATION_ID = c_exp_organization_id
1051 GROUP BY FI.EXPENDITURE_ORG_ID,
1052 FI.EXPENDITURE_ORGANIZATION_ID,
1053 P.START_DATE,
1054 P.END_DATE,
1055 FI.RCVR_PA_PERIOD_NAME;
1056
1057 CURSOR FCST_GL(p_prj_assignment_id NUMBER, c_act_thru_date DATE, c_exp_organization_id NUMBER) IS
1058 SELECT FI.EXPENDITURE_ORG_ID,
1059 FI.EXPENDITURE_ORGANIZATION_ID,
1060 FI.RCVR_GL_PERIOD_NAME,
1061 GLP.START_DATE,
1062 GLP.END_DATE,
1063 SUM(FI.ITEM_QUANTITY),
1064 MIN(FI.FORECAST_ITEM_ID)
1065 FROM PA_FORECAST_ITEMS FI,
1066 PA_FORECAST_ITEM_DETAILS FID,
1067 GL_PERIODS GLP
1068 WHERE FI.FORECAST_ITEM_ID = FID.FORECAST_ITEM_ID
1069 AND FID.FORECAST_SUMMARIZED_CODE = 'N'
1070 AND FID.NET_ZERO_FLAG = 'N'
1071 AND FI.ERROR_FLAG = 'N'
1072 AND FI.DELETE_FLAG = 'N'
1073 AND GLP.PERIOD_SET_NAME = FI.RCVR_PERIOD_SET_NAME
1074 AND GLP.PERIOD_NAME = FI.RCVR_GL_PERIOD_NAME
1075 AND ASSIGNMENT_ID = p_prj_assignment_id
1076 AND FI.EXPENDITURE_ORG_ID <> -88
1077 AND FI.ITEM_DATE >= NVL(c_act_thru_date+1,FI.ITEM_DATE)
1078 AND FI.EXPENDITURE_ORGANIZATION_ID = c_exp_organization_id
1079 GROUP BY FI.EXPENDITURE_ORG_ID,
1080 FI.EXPENDITURE_ORGANIZATION_ID,
1081 GLP.START_DATE,
1082 GLP.END_DATE,
1083 FI.RCVR_GL_PERIOD_NAME;
1084
1085 CURSOR FCST_NONE(p_prj_assignment_id NUMBER, c_act_thru_date DATE, c_exp_organization_id NUMBER) IS
1086 SELECT FI.EXPENDITURE_ORG_ID,
1087 FI.EXPENDITURE_ORGANIZATION_ID,
1088 SUM(FI.ITEM_QUANTITY),
1089 MIN(FI.FORECAST_ITEM_ID),
1090 null period_name,
1091 min(fi.item_Date) start_date,
1092 max(fi.item_Date) end_date -- Bug 4549862: Changed min to max.
1093 FROM PA_FORECAST_ITEMS FI,
1094 PA_FORECAST_ITEM_DETAILS FID
1095 WHERE FI.FORECAST_ITEM_ID = FID.FORECAST_ITEM_ID
1096 AND FID.FORECAST_SUMMARIZED_CODE = 'N'
1097 AND FID.NET_ZERO_FLAG = 'N'
1098 AND FI.ERROR_FLAG = 'N'
1099 AND FI.DELETE_FLAG = 'N'
1100 AND ASSIGNMENT_ID = p_prj_assignment_id
1101 AND FI.EXPENDITURE_ORG_ID <> -88
1102 AND FI.ITEM_DATE >= NVL(c_act_thru_date+1,FI.ITEM_DATE)
1103 AND FI.EXPENDITURE_ORGANIZATION_ID = c_exp_organization_id
1104 GROUP BY FI.EXPENDITURE_ORG_ID,
1105 FI.EXPENDITURE_ORGANIZATION_ID;
1106
1107 CURSOR BUDGET_LINES(c_budget_version_id PA_RESOURCE_ASSIGNMENTS.BUDGET_VERSION_ID%TYPE,
1108 c_project_id PA_RESOURCE_ASSIGNMENTS.PROJECT_ID%TYPE,
1109 c_resource_assignment_id PA_RESOURCE_ASSIGNMENTS.RESOURCE_ASSIGNMENT_ID%TYPE) IS
1110 SELECT BL.PERIOD_NAME,
1111 BL.START_DATE,
1112 BL.BURDENED_COST
1113 FROM PA_BUDGET_LINES BL,
1114 PA_RESOURCE_ASSIGNMENTS RA
1115 WHERE BL.RESOURCE_ASSIGNMENT_ID = RA.RESOURCE_ASSIGNMENT_ID
1116 AND RA.BUDGET_VERSION_ID = c_budget_version_id
1117 AND RA.PROJECT_ID = c_project_id
1118 AND RA.RESOURCE_LIST_MEMBER_ID = 103
1119 ORDER BY BL.START_DATE;
1120
1121 -- M-Closeout: Bill Rate Override ER ------------------------------------------
1122 -- Also query up the rate API parameters per period
1123
1124 /* Bug 5657334: Added org_id join in pa_periods_all to avoid multiple row selection */
1125 CURSOR FCST_RATE_PA(p_prj_assignment_id NUMBER, c_act_thru_date DATE, c_exp_organization_id NUMBER, c_org_id NUMBER) IS
1126 SELECT FI.EXPENDITURE_ORG_ID,
1127 FI.EXPENDITURE_ORGANIZATION_ID,
1128 FI.RCVR_PA_PERIOD_NAME,
1129 P.START_DATE,
1130 P.END_DATE,
1131 SUM(FI.ITEM_QUANTITY),
1132 MIN(FI.FORECAST_ITEM_ID),
1133 RA.RESOURCE_ASSIGNMENT_ID,
1134 RA.UNIT_OF_MEASURE,
1135 RA.RESOURCE_CLASS_CODE,
1136 RA.ORGANIZATION_ID,
1137 RA.JOB_ID,
1138 RA.PERSON_ID,
1139 RA.EXPENDITURE_TYPE,
1140 RA.NON_LABOR_RESOURCE,
1141 RA.BOM_RESOURCE_ID,
1142 RA.INVENTORY_ITEM_ID,
1143 RA.ITEM_CATEGORY_ID,
1144 RA.MFC_COST_TYPE_ID,
1145 RA.RATE_EXPENDITURE_TYPE,
1146 NVL(RA.RATE_BASED_FLAG, 'N') RATE_BASED_FLAG,
1147 RA.RATE_EXPENDITURE_ORG_ID,
1148 RLM.RES_FORMAT_ID,
1149 RLM.RESOURCE_LIST_MEMBER_ID,
1150 RLM.RESOURCE_ID,
1151 RLM.RESOURCE_LIST_ID,
1152 RLM.ALIAS
1153 FROM PA_FORECAST_ITEMS FI,
1154 PA_FORECAST_ITEM_DETAILS FID,
1155 PA_PERIODS_ALL P,
1156 PA_RES_LIST_MAP_TMP4 TMP4,
1157 PA_RESOURCE_ASSIGNMENTS RA,
1158 PA_RESOURCE_LIST_MEMBERS RLM
1159 WHERE FI.PROJECT_ORG_ID = NVL(P.ORG_ID,-99)
1160 AND P.ORG_ID = c_org_id /* Bug 5657334 */
1161 AND P.PERIOD_NAME = FI.RCVR_PA_PERIOD_NAME
1162 AND FI.FORECAST_ITEM_ID = FID.FORECAST_ITEM_ID
1163 AND FID.FORECAST_SUMMARIZED_CODE = 'N'
1164 AND FID.NET_ZERO_FLAG = 'N'
1165 AND FI.ERROR_FLAG = 'N'
1166 AND FI.DELETE_FLAG = 'N'
1167 AND ASSIGNMENT_ID = p_prj_assignment_id
1168 AND FI.EXPENDITURE_ORG_ID <>-88
1169 AND FI.ITEM_DATE >= NVL(c_act_thru_date+1,FI.ITEM_DATE)
1170 AND FI.EXPENDITURE_ORGANIZATION_ID = c_exp_organization_id
1171 AND ASSIGNMENT_ID = TMP4.TXN_SOURCE_ID
1172 AND RA.RESOURCE_ASSIGNMENT_ID = TMP4.TXN_RESOURCE_ASSIGNMENT_ID
1173 AND RA.RESOURCE_LIST_MEMBER_ID = RLM.RESOURCE_LIST_MEMBER_ID
1174 GROUP BY FI.EXPENDITURE_ORG_ID,
1175 FI.EXPENDITURE_ORGANIZATION_ID,
1176 P.START_DATE,
1177 P.END_DATE,
1178 FI.RCVR_PA_PERIOD_NAME,
1179 RA.RESOURCE_ASSIGNMENT_ID,
1180 RA.UNIT_OF_MEASURE,
1181 RA.RESOURCE_CLASS_CODE,
1182 RA.ORGANIZATION_ID,
1183 RA.JOB_ID,
1184 RA.PERSON_ID,
1185 RA.EXPENDITURE_TYPE,
1186 RA.NON_LABOR_RESOURCE,
1187 RA.BOM_RESOURCE_ID,
1188 RA.INVENTORY_ITEM_ID,
1189 RA.ITEM_CATEGORY_ID,
1190 RA.MFC_COST_TYPE_ID,
1191 RA.RATE_EXPENDITURE_TYPE,
1192 RA.RATE_BASED_FLAG,
1193 RA.RATE_EXPENDITURE_ORG_ID,
1194 RLM.RES_FORMAT_ID,
1195 RLM.RESOURCE_LIST_MEMBER_ID,
1196 RLM.RESOURCE_ID,
1197 RLM.RESOURCE_LIST_ID,
1198 RLM.ALIAS;
1199
1200 CURSOR FCST_RATE_GL(p_prj_assignment_id NUMBER, c_act_thru_date DATE, c_exp_organization_id NUMBER) IS
1201 SELECT FI.EXPENDITURE_ORG_ID,
1202 FI.EXPENDITURE_ORGANIZATION_ID,
1203 FI.RCVR_GL_PERIOD_NAME,
1204 GLP.START_DATE,
1205 GLP.END_DATE,
1206 SUM(FI.ITEM_QUANTITY),
1207 MIN(FI.FORECAST_ITEM_ID),
1208 RA.RESOURCE_ASSIGNMENT_ID,
1209 RA.UNIT_OF_MEASURE,
1210 RA.RESOURCE_CLASS_CODE,
1211 RA.ORGANIZATION_ID,
1212 RA.JOB_ID,
1213 RA.PERSON_ID,
1214 RA.EXPENDITURE_TYPE,
1215 RA.NON_LABOR_RESOURCE,
1216 RA.BOM_RESOURCE_ID,
1217 RA.INVENTORY_ITEM_ID,
1218 RA.ITEM_CATEGORY_ID,
1219 RA.MFC_COST_TYPE_ID,
1220 RA.RATE_EXPENDITURE_TYPE,
1221 NVL(RA.RATE_BASED_FLAG, 'N') RATE_BASED_FLAG,
1222 RA.RATE_EXPENDITURE_ORG_ID,
1223 RLM.RES_FORMAT_ID,
1224 RLM.RESOURCE_LIST_MEMBER_ID,
1225 RLM.RESOURCE_ID,
1226 RLM.RESOURCE_LIST_ID,
1227 RLM.ALIAS
1228 FROM PA_FORECAST_ITEMS FI,
1229 PA_FORECAST_ITEM_DETAILS FID,
1230 GL_PERIODS GLP,
1231 PA_RES_LIST_MAP_TMP4 TMP4,
1232 PA_RESOURCE_ASSIGNMENTS RA,
1233 PA_RESOURCE_LIST_MEMBERS RLM
1234 WHERE FI.FORECAST_ITEM_ID = FID.FORECAST_ITEM_ID
1235 AND FID.FORECAST_SUMMARIZED_CODE = 'N'
1236 AND FID.NET_ZERO_FLAG = 'N'
1237 AND FI.ERROR_FLAG = 'N'
1238 AND FI.DELETE_FLAG = 'N'
1239 AND GLP.PERIOD_SET_NAME = FI.RCVR_PERIOD_SET_NAME
1240 AND GLP.PERIOD_NAME = FI.RCVR_GL_PERIOD_NAME
1241 AND ASSIGNMENT_ID = p_prj_assignment_id
1242 AND FI.EXPENDITURE_ORG_ID <> -88
1243 AND FI.ITEM_DATE >= NVL(c_act_thru_date+1,FI.ITEM_DATE)
1244 AND FI.EXPENDITURE_ORGANIZATION_ID = c_exp_organization_id
1245 AND ASSIGNMENT_ID = TMP4.TXN_SOURCE_ID
1246 AND RA.RESOURCE_ASSIGNMENT_ID = TMP4.TXN_RESOURCE_ASSIGNMENT_ID
1247 AND RA.RESOURCE_LIST_MEMBER_ID = RLM.RESOURCE_LIST_MEMBER_ID
1248 GROUP BY FI.EXPENDITURE_ORG_ID,
1249 FI.EXPENDITURE_ORGANIZATION_ID,
1250 GLP.START_DATE,
1251 GLP.END_DATE,
1252 FI.RCVR_GL_PERIOD_NAME,
1253 RA.RESOURCE_ASSIGNMENT_ID,
1254 RA.UNIT_OF_MEASURE,
1255 RA.RESOURCE_CLASS_CODE,
1256 RA.ORGANIZATION_ID,
1257 RA.JOB_ID,
1258 RA.PERSON_ID,
1259 RA.EXPENDITURE_TYPE,
1260 RA.NON_LABOR_RESOURCE,
1261 RA.BOM_RESOURCE_ID,
1262 RA.INVENTORY_ITEM_ID,
1263 RA.ITEM_CATEGORY_ID,
1264 RA.MFC_COST_TYPE_ID,
1265 RA.RATE_EXPENDITURE_TYPE,
1266 RA.RATE_BASED_FLAG,
1267 RA.RATE_EXPENDITURE_ORG_ID,
1268 RLM.RES_FORMAT_ID,
1269 RLM.RESOURCE_LIST_MEMBER_ID,
1270 RLM.RESOURCE_ID,
1271 RLM.RESOURCE_LIST_ID,
1272 RLM.ALIAS;
1273
1274
1275 CURSOR FCST_RATE_NONE(p_prj_assignment_id NUMBER, c_act_thru_date DATE, c_exp_organization_id NUMBER) IS
1276 SELECT FI.EXPENDITURE_ORG_ID,
1277 FI.EXPENDITURE_ORGANIZATION_ID,
1278 SUM(FI.ITEM_QUANTITY),
1279 MIN(FI.FORECAST_ITEM_ID),
1280 null period_name,
1281 min(fi.item_Date) start_date,
1282 max(fi.item_Date) end_date, -- Bug 4621534: Changed min to max.
1283 RA.RESOURCE_ASSIGNMENT_ID,
1284 RA.UNIT_OF_MEASURE,
1285 RA.RESOURCE_CLASS_CODE,
1286 RA.ORGANIZATION_ID,
1287 RA.JOB_ID,
1288 RA.PERSON_ID,
1289 RA.EXPENDITURE_TYPE,
1290 RA.NON_LABOR_RESOURCE,
1291 RA.BOM_RESOURCE_ID,
1292 RA.INVENTORY_ITEM_ID,
1293 RA.ITEM_CATEGORY_ID,
1294 RA.MFC_COST_TYPE_ID,
1295 RA.RATE_EXPENDITURE_TYPE,
1296 NVL(RA.RATE_BASED_FLAG, 'N') RATE_BASED_FLAG,
1297 RA.RATE_EXPENDITURE_ORG_ID,
1298 RLM.RES_FORMAT_ID,
1299 RLM.RESOURCE_LIST_MEMBER_ID,
1300 RLM.RESOURCE_ID,
1301 RLM.RESOURCE_LIST_ID,
1302 RLM.ALIAS
1303 FROM PA_FORECAST_ITEMS FI,
1304 PA_FORECAST_ITEM_DETAILS FID,
1305 PA_RES_LIST_MAP_TMP4 TMP4,
1306 PA_RESOURCE_ASSIGNMENTS RA,
1307 PA_RESOURCE_LIST_MEMBERS RLM
1308 WHERE FI.FORECAST_ITEM_ID = FID.FORECAST_ITEM_ID
1309 AND FID.FORECAST_SUMMARIZED_CODE = 'N'
1310 AND FID.NET_ZERO_FLAG = 'N'
1311 AND FI.ERROR_FLAG = 'N'
1312 AND FI.DELETE_FLAG = 'N'
1313 AND ASSIGNMENT_ID = p_prj_assignment_id
1314 AND FI.EXPENDITURE_ORG_ID <> -88
1315 AND FI.ITEM_DATE >= NVL(c_act_thru_date+1,FI.ITEM_DATE)
1316 AND FI.EXPENDITURE_ORGANIZATION_ID = c_exp_organization_id
1317 AND ASSIGNMENT_ID = TMP4.TXN_SOURCE_ID
1318 AND RA.RESOURCE_ASSIGNMENT_ID = TMP4.TXN_RESOURCE_ASSIGNMENT_ID
1319 AND RA.RESOURCE_LIST_MEMBER_ID = RLM.RESOURCE_LIST_MEMBER_ID
1320 GROUP BY FI.EXPENDITURE_ORG_ID,
1321 FI.EXPENDITURE_ORGANIZATION_ID,
1322 RA.RESOURCE_ASSIGNMENT_ID,
1323 RA.UNIT_OF_MEASURE,
1324 RA.RESOURCE_CLASS_CODE,
1325 RA.ORGANIZATION_ID,
1326 RA.JOB_ID,
1327 RA.PERSON_ID,
1328 RA.EXPENDITURE_TYPE,
1329 RA.NON_LABOR_RESOURCE,
1330 RA.BOM_RESOURCE_ID,
1331 RA.INVENTORY_ITEM_ID,
1332 RA.ITEM_CATEGORY_ID,
1333 RA.MFC_COST_TYPE_ID,
1334 RA.RATE_EXPENDITURE_TYPE,
1335 RA.RATE_BASED_FLAG,
1336 RA.RATE_EXPENDITURE_ORG_ID,
1337 RLM.RES_FORMAT_ID,
1338 RLM.RESOURCE_LIST_MEMBER_ID,
1339 RLM.RESOURCE_ID,
1340 RLM.RESOURCE_LIST_ID,
1341 RLM.ALIAS;
1342
1343
1344 CURSOR GET_RATE_API_PARAMS_CUR IS
1345 SELECT DECODE(NVL(pfo.use_planning_rates_flag,'N'),'N',pfo.res_class_bill_rate_sch_id,
1346 DECODE(bv.version_type,'REVENUE',pfo.rev_res_class_rate_sch_id,
1347 'ALL' ,pfo.rev_res_class_rate_sch_id,
1348 NULL)) res_class_bill_rate_sch_id
1349 ,DECODE(NVL(pfo.use_planning_rates_flag,'N'),'N',pfo.res_class_raw_cost_sch_id,
1350 DECODE(bv.version_type,'COST',pfo.cost_res_class_rate_sch_id,
1351 'ALL' ,pfo.cost_res_class_rate_sch_id,
1352 NULL)) res_class_raw_cost_sch_id
1353 ,NVL(pfo.use_planning_rates_flag,'N') use_planning_rates_flag
1354 ,DECODE(NVL(pfo.use_planning_rates_flag,'N'),'N',NULL,
1355 DECODE(bv.version_type,'REVENUE',pfo.rev_job_rate_sch_id,
1356 'ALL' ,pfo.rev_job_rate_sch_id,
1357 NULL)) rev_job_rate_sch_id
1358 ,DECODE(NVL(pfo.use_planning_rates_flag,'N'),'N',NULL,
1359 DECODE(bv.version_type,'COST' ,pfo.cost_job_rate_sch_id,
1360 'ALL' ,pfo.cost_job_rate_sch_id,
1361 NULL)) cost_job_rate_sch_id
1362 ,DECODE(NVL(pfo.use_planning_rates_flag,'N'),'N',NULL,
1363 DECODE(bv.version_type,'REVENUE',pfo.rev_emp_rate_sch_id,
1364 'ALL' ,pfo.rev_emp_rate_sch_id,
1365 NULL)) rev_emp_rate_sch_id
1366 ,DECODE(NVL(pfo.use_planning_rates_flag,'N'),'N',NULL,
1367 DECODE(bv.version_type,'COST' ,pfo.cost_emp_rate_sch_id,
1368 'ALL' ,pfo.cost_emp_rate_sch_id,
1369 NULL)) cost_emp_rate_sch_id
1370 ,DECODE(NVL(pfo.use_planning_rates_flag,'N'),'N',NULL,
1371 DECODE(bv.version_type,'REVENUE',pfo.rev_non_labor_res_rate_sch_id,
1372 'ALL' ,pfo.rev_non_labor_res_rate_sch_id,
1373 NULL)) rev_non_labor_res_rate_sch_id
1374 ,DECODE(NVL(pfo.use_planning_rates_flag,'N'),'N',NULL,
1375 DECODE(bv.version_type,'COST' ,pfo.cost_non_labor_res_rate_sch_id,
1376 'ALL' ,pfo.cost_non_labor_res_rate_sch_id,
1377 NULL)) cost_non_labor_res_rate_sch_id
1378 ,DECODE(NVL(pfo.use_planning_rates_flag,'N'),'N',NULL,
1379 DECODE(bv.version_type,'COST' ,pfo.cost_burden_rate_sch_id,
1380 'ALL' ,pfo.cost_burden_rate_sch_id,
1381 NULL)) cost_burden_rate_sch_id
1382 ,bv.version_type fp_budget_version_type
1383 ,NVL(bv.approved_rev_plan_type_flag,'N') approved_rev_plan_type_flag
1384 ,NVL(pfo.plan_in_multi_curr_flag,'N') plan_in_multi_curr_flag
1385 ,pp.assign_precedes_task
1386 ,pp.bill_job_group_id
1387 ,pp.carrying_out_organization_id
1388 ,NVL(pp.multi_currency_billing_flag,'N') multi_currency_billing_flag
1389 ,pp.org_id
1390 ,pp.non_labor_bill_rate_org_id
1391 ,pp.project_currency_code
1392 ,pp.non_labor_schedule_discount
1393 ,pp.non_labor_schedule_fixed_date
1394 ,pp.non_lab_std_bill_rt_sch_id
1395 ,pp.project_type
1396 ,pp.projfunc_currency_code
1397 ,pp.emp_bill_rate_schedule_id
1398 ,pp.job_bill_rate_schedule_id
1399 ,pp.labor_bill_rate_org_id
1400 ,pp.labor_sch_type
1401 ,pp.non_labor_sch_type
1402 ,pp.name project_name
1403 FROM pa_proj_fp_options pfo
1404 ,pa_budget_versions bv
1405 ,pa_projects_all pp
1406 WHERE pfo.fin_plan_version_id = bv.budget_version_id
1407 AND bv.budget_version_id = p_budget_version_id
1408 AND pp.project_id = bv.project_id
1409 AND pfo.project_id = pp.project_id;
1410
1411 rate_rec get_rate_api_params_cur%ROWTYPE;
1412
1413 CURSOR CHECK_BILL_RATE_OVRD_EXISTS IS
1414 SELECT 'Y'
1415 FROM DUAL
1416 WHERE EXISTS (SELECT assignment_id
1417 FROM pa_project_assignments
1418 WHERE project_id = p_project_id
1419 AND bill_rate_override is not null);
1420
1421 l_bill_rate_ovrd_exists_flag VARCHAR2(1) := 'N';
1422
1423 -- Bug 4615787: Added 'PA_GL_' to cursor name to emphasize that
1424 -- it should be used when the Target timephase is either PA or GL.
1425
1426 CURSOR GROUP_TO_INSERT_INTO_PA_GL_BL IS
1427 SELECT RESOURCE_ASSIGNMENT_ID,
1428 START_DATE,
1429 END_DATE,
1430 PERIOD_NAME,
1431 SUM(QUANTITY),
1432 TXN_CURRENCY_CODE,
1433 SUM(TXN_RAW_COST),
1434 SUM(TXN_BURDENED_COST),
1435 SUM(TXN_REVENUE),
1436 BILL_MARKUP_PERCENTAGE,
1437 COST_REJECTION_CODE,
1438 BURDEN_REJECTION_CODE,
1439 REVENUE_REJECTION_CODE,
1440 COST_IND_COMPILED_SET_ID
1441 FROM pa_fp_rollup_tmp
1442 GROUP BY resource_assignment_id,
1443 txn_currency_code,
1444 start_date,
1445 end_date,
1446 period_name,
1447 BILL_MARKUP_PERCENTAGE,
1448 COST_REJECTION_CODE,
1449 BURDEN_REJECTION_CODE,
1450 REVENUE_REJECTION_CODE,
1451 COST_IND_COMPILED_SET_ID;
1452
1453 -- Bug 4615787: Added cursor GROUP_TO_INSERT_INTO_NTP_BL to
1454 -- aggregate data correctly when the Target version is None
1455 -- timephased. Derived from GROUP_TO_INSERT_INTO_NTP_BL,
1456 -- this cursor is different in that it does not group by
1457 -- start_date, end_date, period_name, bill_markup_percentage,
1458 -- or cost_ind_compiled_set_id. In the SELECT clause, we can
1459 -- take the MIN(start_date), MAX(end_date), and NULL for the
1460 -- remaining ungrouped columns.
1461 -- The goal is to ensure that a single record is fetched for
1462 -- each (Resource Assignment Id, Txn Currency) combination.
1463
1464 CURSOR GROUP_TO_INSERT_INTO_NTP_BL IS
1465 SELECT RESOURCE_ASSIGNMENT_ID,
1466 MIN(START_DATE),
1467 MAX(END_DATE),
1468 NULL, --PERIOD_NAME,
1469 SUM(QUANTITY),
1470 TXN_CURRENCY_CODE,
1471 SUM(TXN_RAW_COST),
1472 SUM(TXN_BURDENED_COST),
1473 SUM(TXN_REVENUE),
1474 NULL, --BILL_MARKUP_PERCENTAGE,
1475 COST_REJECTION_CODE,
1476 BURDEN_REJECTION_CODE,
1477 REVENUE_REJECTION_CODE,
1478 NULL --COST_IND_COMPILED_SET_ID
1479 FROM pa_fp_rollup_tmp
1480 GROUP BY resource_assignment_id,
1481 txn_currency_code,
1482 COST_REJECTION_CODE,
1483 BURDEN_REJECTION_CODE,
1484 REVENUE_REJECTION_CODE;
1485
1486 -- Bug 4549862: Added cursor for when the target version is None
1487 -- Time Phased and the context is Forecast Generation. In this
1488 -- case, budget lines may exist with actuals. Fetch temp table
1489 -- data for which budget lines do not yet exist, which should be
1490 -- Inserted into pa_budget_lines.
1491
1492 -- Bug 4615787: Removed start_date, end_date, period_name,
1493 -- bill_markup_percentage, and cost_ind_compiled_set_id from the
1494 -- GROUP BY clause. In the SELECT clause, take MIN(start_date),
1495 -- MAX(end_date), and NULL for the remaining ungrouped columns.
1496 -- The goal is to ensure that a single record is fetched for
1497 -- each (Resource Assignment Id, Txn Currency) combination.
1498
1499 CURSOR GROUP_TO_INS_INTO_NTP_FCST_BL IS
1500 SELECT RESOURCE_ASSIGNMENT_ID,
1501 MIN(START_DATE),
1502 MAX(END_DATE),
1503 NULL, --PERIOD_NAME,
1504 SUM(QUANTITY),
1505 TXN_CURRENCY_CODE,
1506 SUM(TXN_RAW_COST),
1507 SUM(TXN_BURDENED_COST),
1508 SUM(TXN_REVENUE),
1509 NULL, --BILL_MARKUP_PERCENTAGE,
1510 COST_REJECTION_CODE,
1511 BURDEN_REJECTION_CODE,
1512 REVENUE_REJECTION_CODE,
1513 NULL --COST_IND_COMPILED_SET_ID
1514 FROM pa_fp_rollup_tmp tmp
1515 GROUP BY resource_assignment_id,
1516 txn_currency_code,
1517 COST_REJECTION_CODE,
1518 BURDEN_REJECTION_CODE,
1519 REVENUE_REJECTION_CODE
1520 HAVING ( SELECT count(*)
1521 FROM pa_budget_lines bl
1522 WHERE tmp.resource_assignment_id = bl.resource_assignment_id
1523 AND tmp.txn_currency_code = bl.txn_currency_code ) = 0;
1524
1525
1526 -- Bug 4549862: Added cursor for when the target version is None
1527 -- Time Phased and the context is Forecast Generation. In this
1528 -- case, budget lines may exist with actuals. Fetch temp table
1529 -- data for which budget lines exist, which whould be Updated
1530 -- into pa_budget_lines.
1531
1532 -- Bug 4615787: Removed start_date, end_date, period_name,
1533 -- bill_markup_percentage, and cost_ind_compiled_set_id from the
1534 -- GROUP BY clause. In the SELECT clause, take MIN(start_date),
1535 -- MAX(end_date), and NULL for the remaining ungrouped columns.
1536 -- The goal is to ensure that a single record is fetched for
1537 -- each (Resource Assignment Id, Txn Currency) combination.
1538
1539 CURSOR GROUP_TO_UPD_INTO_NTP_FCST_BL IS
1540 SELECT RESOURCE_ASSIGNMENT_ID,
1541 MIN(START_DATE),
1542 MAX(END_DATE),
1543 NULL, --PERIOD_NAME,
1544 SUM(QUANTITY),
1545 TXN_CURRENCY_CODE,
1546 SUM(TXN_RAW_COST),
1547 SUM(TXN_BURDENED_COST),
1548 SUM(TXN_REVENUE),
1549 NULL, --BILL_MARKUP_PERCENTAGE,
1550 COST_REJECTION_CODE,
1551 BURDEN_REJECTION_CODE,
1552 REVENUE_REJECTION_CODE,
1553 NULL --COST_IND_COMPILED_SET_ID
1554 FROM pa_fp_rollup_tmp tmp
1555 GROUP BY resource_assignment_id,
1556 txn_currency_code,
1557 COST_REJECTION_CODE,
1558 BURDEN_REJECTION_CODE,
1559 REVENUE_REJECTION_CODE
1560 HAVING ( SELECT count(*)
1561 FROM pa_budget_lines bl
1562 WHERE tmp.resource_assignment_id = bl.resource_assignment_id
1563 AND tmp.txn_currency_code = bl.txn_currency_code ) > 0;
1564
1565
1566 CURSOR FIND_REJECTION_CODE IS
1567 SELECT tmp1.resource_assignment_id,
1568 tmp1.start_date,
1569 tmp1.txn_currency_code,
1570 tmp1.revenue_rejection_code
1571 FROM pa_fp_rollup_tmp tmp1,
1572 pa_fp_rollup_tmp tmp2
1573 WHERE tmp2.txn_revenue IS NOT NULL
1574 AND tmp1.revenue_rejection_code IS NOT NULL
1575 AND tmp1.resource_assignment_id = tmp2.resource_assignment_id
1576 AND tmp1.txn_currency_code = tmp2.txn_currency_code
1577 AND tmp1.start_date = tmp2.start_date;
1578 -- END of M-closeout: Bill Rate Override ER ------------------------------------------
1579
1580 l_carrying_out_organization_id PA_PROJECTS_ALL.CARRYING_OUT_ORGANIZATION_ID%TYPE;
1581 l_project_currency_code PA_PROJECTS_ALL.PROJECT_CURRENCY_CODE%TYPE;
1582 l_projfunc_currency_code PA_PROJECTS_ALL.PROJFUNC_CURRENCY_CODE%TYPE;
1583 l_project_value PA_PROJECTS_ALL.PROJECT_VALUE%TYPE;
1584 l_job_bill_rate_schedule_id PA_PROJECTS_ALL.JOB_BILL_RATE_SCHEDULE_ID%TYPE;
1585 l_emp_bill_rate_schedule_id PA_PROJECTS_ALL.EMP_BILL_RATE_SCHEDULE_ID%TYPE;
1586 l_rev_gen_method VARCHAR2(3);
1587 l_distribution_rule PA_PROJECTS_ALL.DISTRIBUTION_RULE%TYPE;
1588 l_project_type PA_PROJECTS_ALL.PROJECT_TYPE%TYPE;
1589 l_bill_job_group_id PA_PROJECTS_ALL.BILL_JOB_GROUP_ID%TYPE;
1590 l_org_id PA_PROJECTS_ALL.ORG_ID%TYPE;
1591 l_completion_date PA_PROJECTS_ALL.COMPLETION_DATE%TYPE;
1592 l_template_flag PA_PROJECTS_ALL.TEMPLATE_FLAG%TYPE;
1593 l_projfunc_bil_rate_date_code PA_PROJECTS_ALL.PROJECT_BIL_RATE_DATE_CODE%TYPE;
1594 l_projfunc_bil_rate_type PA_PROJECTS_ALL.PROJECT_BIL_RATE_TYPE%TYPE;
1595 l_projfunc_bil_rate_date PA_PROJECTS_ALL.PROJECT_BIL_RATE_DATE%TYPE;
1596 l_projfunc_bil_exchange_rate PA_PROJECTS_ALL.PROJECT_BIL_EXCHANGE_RATE%TYPE;
1597
1598 l_system_linkage Pa_Forecast_Items.EXPENDITURE_TYPE_CLASS%TYPE;
1599 /* Added for Org Forecasting */
1600
1601 l_cost_job_group_id Pa_Projects_All.Cost_Job_Group_Id%TYPE;
1602 l_prj_rate_date Pa_Projects_All.PROJECT_RATE_DATE%TYPE;
1603 l_prj_rate_type Pa_Projects_All.PROJECT_RATE_TYPE%TYPE;
1604 l_prj_bil_rate_date_code Pa_Projects_All.PROJECT_BIL_RATE_DATE_CODE%TYPE;
1605 l_prj_bil_rate_type Pa_Projects_All.PROJECT_BIL_RATE_TYPE%TYPE;
1606 l_prj_bil_rate_date Pa_Projects_All.PROJECT_BIL_RATE_DATE%TYPE;
1607 l_prj_bil_ex_rate Pa_Projects_All.PROJECT_BIL_EXCHANGE_RATE%TYPE;
1608 l_prjfunc_cost_rate_type Pa_Projects_All.PROJFUNC_COST_RATE_TYPE%TYPE;
1609 l_prjfunc_cost_rate_date Pa_Projects_All.PROJFUNC_COST_RATE_DATE%TYPE;
1610 l_labor_tp_schedule_id Pa_Projects_All.LABOR_TP_SCHEDULE_ID%TYPE;
1611 l_labor_tp_fixed_date Pa_Projects_All.LABOR_TP_FIXED_DATE%TYPE;
1612
1613 l_labor_sch_discount Pa_Projects_All.LABOR_SCHEDULE_DISCOUNT%TYPE;
1614 l_asg_precedes_task Pa_Projects_All.ASSIGN_PRECEDES_TASK%TYPE;
1615 l_labor_bill_rate_orgid Pa_Projects_All.LABOR_BILL_RATE_ORG_ID%TYPE;
1616 l_labor_std_bill_rate_sch Pa_Projects_All.LABOR_STD_BILL_RATE_SCHDL%TYPE;
1617 l_labor_sch_fixed_dt Pa_Projects_All.LABOR_SCHEDULE_FIXED_DATE%TYPE;
1618 l_labor_sch_type Pa_Projects_All.LABOR_SCH_TYPE%TYPE;
1619
1620
1621 l_budget_version_id PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE;
1622 l_version_number PA_BUDGET_VERSIONS.VERSION_NUMBER%TYPE;
1623 l_plan_processing_code PA_BUDGET_VERSIONS.PLAN_PROCESSING_CODE%TYPE;
1624
1625 --Declaring PL/SQL tables for bulk binding
1626 l_proj_assignment_id PA_PLSQL_DATATYPES.IdTabTyp;
1627 l_proj_start_date PA_PLSQL_DATATYPES.DateTabTyp;
1628 l_proj_resource_id PA_PLSQL_DATATYPES.IdTabTyp;
1629 l_proj_project_role_id PA_PLSQL_DATATYPES.IdTabTyp;
1630 l_proj_fcst_job_id PA_PLSQL_DATATYPES.IdTabTyp;
1631 l_proj_fcst_job_group_id PA_PLSQL_DATATYPES.IdTabTyp;
1632 l_proj_meaning PA_PLSQL_DATATYPES.Char80TabTyp;
1633 l_proj_named_role PA_PLSQL_DATATYPES.Char80TabTyp;
1634 l_proj_assignment_type PA_PLSQL_DATATYPES.Char30TabTyp;
1635 l_proj_exp_org_id PA_PLSQL_DATATYPES.IdTabTyp;
1636 l_proj_exp_organization_id PA_PLSQL_DATATYPES.IdTabTyp;
1637 l_proj_expenditure_org_id PA_PLSQL_DATATYPES.IdTabTyp;
1638 l_fi_exp_organization_id PA_PLSQL_DATATYPES.IdTabTyp;
1639 l_proj_exp_type PA_PLSQL_DATATYPES.Char30TabTyp;
1640 l_proj_person_id PA_PLSQL_DATATYPES.IdTabTyp;
1641 l_proj_revenue_bill_rate PA_PLSQL_DATATYPES.NumTabTyp;
1642 l_proj_short_assignment_type PA_PLSQL_DATATYPES.Char30TabTyp;
1643 l_proj_status_code PA_PLSQL_DATATYPES.Char30TabTyp;
1644 l_proj_billable_flag PA_PLSQL_DATATYPES.Char2TabTyp;
1645 l_proj_process_code PA_PLSQL_DATATYPES.Char30TabTyp;
1646 l_proj_error_msg_code PA_PLSQL_DATATYPES.Char30TabTyp;
1647 l_proj_end_date PA_PLSQL_DATATYPES.DateTabTyp;
1648 l_proj_fc_res_type_code PA_PLSQL_DATATYPES.Char30TabTyp;
1649
1650 l_role_error_code PA_RESOURCE_ASSIGNMENTS.PLAN_ERROR_CODE%TYPE;
1651
1652 l_err_code VARCHAR2(30);
1653 l_err_stack VARCHAR2(2000);
1654 l_err_stage VARCHAR2(2000);
1655 l_err_id NUMBER;
1656
1657
1658 l_projfunc_bill_rate NUMBER;
1659 l_projfunc_raw_revenue NUMBER;
1660 l_projfunc_raw_cost NUMBER;
1661 l_projfunc_raw_cost_rate NUMBER;
1662 l_projfunc_burdened_cost NUMBER;
1663 l_projfunc_burdened_cost_rate NUMBER;
1664 l_error_msg VARCHAR2(30);
1665
1666 l_std_raw_revenue NUMBER;
1667 l_rev_currency_code PA_PROJECTS_ALL.PROJECT_CURRENCY_CODE%TYPE;
1668 l_billable_flag VARCHAR2(2);
1669
1670 l_rev_reject_reason VARCHAR2(1000);
1671 l_cost_reject_reason VARCHAR2(1000);
1672 l_burdened_reject_reason VARCHAR2(1000);
1673 l_other_reject_reason VARCHAR2(1000);
1674
1675 l_resource_list_member_id PA_RESOURCE_LIST_MEMBERS.RESOURCE_LIST_MEMBER_ID%TYPE;
1676 l_resource_id PA_RESOURCE_LIST_MEMBERS.RESOURCE_LIST_MEMBER_ID%TYPE;
1677 l_resource_assignment_id PA_RESOURCE_ASSIGNMENTS.RESOURCE_ASSIGNMENT_ID%TYPE;
1678 l_track_as_labor_flag PA_RESOURCE_LIST_MEMBERS.TRACK_AS_LABOR_FLAG%TYPE;
1679 l_parent_member_id PA_RESOURCE_LIST_MEMBERS.PARENT_MEMBER_ID%TYPE;
1680 l_prj_res_assignment_id PA_RESOURCE_ASSIGNMENTS.RESOURCE_ASSIGNMENT_ID%TYPE;
1681
1682 l_fcst_opt_jobcostrate_sch_id PA_FORECASTING_OPTIONS_ALL.JOB_COST_RATE_SCHEDULE_ID%TYPE;
1683
1684 l_calling_mode VARCHAR2(50);
1685 l_rowid ROWID;
1686 l_counter NUMBER := 1 ;
1687 l_cost_cnt NUMBER := 1 ;
1688
1689 l_created_by NUMBER(15) := PA_FORECAST_GLOBAL.G_who_columns.G_created_by;
1690 l_request_id NUMBER(15) := PA_FORECAST_GLOBAL.G_who_columns.G_request_id;
1691 l_program_id NUMBER(15) := PA_FORECAST_GLOBAL.G_who_columns.G_program_id;
1692 l_program_application_id NUMBER(15) := PA_FORECAST_GLOBAL.G_who_columns.G_program_application_id;
1693 l_creation_date DATE := PA_FORECAST_GLOBAL.G_who_columns.G_creation_date;
1694 l_program_update_date DATE := PA_FORECAST_GLOBAL.G_who_columns.G_last_update_date;
1695
1696 l_period_name_flag VARCHAR2(1);
1697 l_period_name_tot_flag VARCHAR2(1);
1698 l_current_index PLS_INTEGER;
1699 l_current_index_tot PLS_INTEGER:=1;
1700 l_cnt PLS_INTEGER;
1701 l_budget_lines_tbl PA_GENERATE_FORECAST_PUB.budget_lines_tbl_type;
1702 l_budget_lines_tot_tbl PA_GENERATE_FORECAST_PUB.budget_lines_tbl_type;
1703
1704
1705 l_prj_revenue_tab PA_RATE_PVT_PKG.ProjAmt_TabTyp;
1706 l_prj_cost_tab PA_RATE_PVT_PKG.ProjAmt_TabTyp;
1707 l_project_id NUMBER(15);
1708
1709 l_ret_status VARCHAR2(100);
1710 l_msg_count NUMBER;
1711 l_msg_data VARCHAR2(2000);
1712 l_data VARCHAR2(2000);
1713 l_msg_index_out NUMBER:=0;
1714 l_init_bill_rate_flag VARCHAR2(1);
1715 l_role_error_code_flag VARCHAR2(1);
1716 l_prj_level_revenue NUMBER:=0;
1717 l_process_fis_flag VARCHAR2(1);
1718 l_asgmt_status_flag VARCHAR2(1);
1719 l_commit_cnt NUMBER:= 0;
1720 l_event_error_msg VARCHAR2(100);
1721
1722 l_bl_start_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
1723 l_bl_end_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
1724 l_bl_pd_name_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1725 l_bl_qty_tab PA_PLSQL_DATATYPES.NumTabTyp;
1726 l_bl_rcost_tab PA_PLSQL_DATATYPES.NumTabTyp;
1727 l_bl_revenue_tab PA_PLSQL_DATATYPES.NumTabTyp;
1728 l_bl_bcost_tab PA_PLSQL_DATATYPES.NumTabTyp;
1729 l_bl_cost_rej_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1730 l_bl_bcost_rej_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1731 l_bl_rev_rej_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1732 l_bl_oth_rej_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1733
1734 l_rt_forecast_item_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
1735 l_rt_pd_name_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1736 l_rt_start_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
1737 l_rt_end_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
1738
1739 l_rt_qty_tab PA_PLSQL_DATATYPES.NumTabTyp;
1740 l_rt_exp_org_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
1741 l_rt_exp_organization_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
1742
1743 -- M-closeout: Bill Rate Override ER ------------------------------------------
1744 l_rt_res_assignment_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1745 l_rt_uom_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1746 l_rt_res_class_code_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1747 l_rt_organization_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1748 l_rt_job_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1749 l_rt_person_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1750 l_rt_expenditure_type_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1751 l_rt_non_labor_resource_tab SYSTEM.pa_varchar2_20_tbl_type:=SYSTEM.pa_varchar2_20_tbl_type();
1752 l_rt_bom_resource_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1753 l_rt_inventory_item_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1754 l_rt_item_category_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1755 l_rt_mfc_cost_type_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1756 l_rt_rate_expenditure_type_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1757 l_rt_rate_based_flag_tab SYSTEM.pa_varchar2_1_tbl_type:=SYSTEM.pa_varchar2_1_tbl_type();
1758 l_rt_rate_exp_org_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1759 l_rt_res_format_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1760 l_rt_res_list_member_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1761 l_rt_resource_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1762 l_rt_resource_list_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1763 l_rt_alias_tab SYSTEM.pa_varchar2_80_tbl_type:=SYSTEM.pa_varchar2_80_tbl_type();
1764 l_mfc_cost_source CONSTANT NUMBER := 2;
1765 l_txn_currency_code VARCHAR2(100);
1766
1767 l_bl_RES_ASSIGNMENT_ID_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1768 l_bl_PERIOD_NAME_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1769 l_bl_QUANTITY_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1770 l_bl_TXN_CURRENCY_CODE_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1771 l_bl_TXN_RAW_COST_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1772 l_bl_TXN_BURDENED_COST_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1773 l_bl_TXN_REVENUE_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1774 l_bl_BILL_MARKUP_PERCENT_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1775 l_bl_COST_REJECTION_CODE_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1776 l_bl_BURDEN_REJECTION_CODE_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1777 l_bl_REV_REJECTION_CODE_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1778 l_bl_COST_IND_C_SET_ID_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1779
1780 l_rej_res_assignment_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1781 l_rej_start_date_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1782 l_rej_txn_currency_code_tab SYSTEM.pa_varchar2_80_tbl_type:=SYSTEM.pa_varchar2_80_tbl_type();
1783 l_rej_revenue_rej_code_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1784 -- END OF M-closeout: Bill Rate Override ER ------------------------------------------
1785
1786 l_rt_exp_func_raw_cst_rt_tab PA_PLSQL_DATATYPES.NumTabTyp;
1787 l_rt_exp_func_raw_cst_tab PA_PLSQL_DATATYPES.NumTabTyp;
1788 l_rt_exp_func_bur_cst_rt_tab PA_PLSQL_DATATYPES.NumTabTyp;
1789 l_rt_exp_func_burdned_cst_tab PA_PLSQL_DATATYPES.NumTabTyp;
1790 l_rt_projfunc_bill_rt_tab PA_PLSQL_DATATYPES.NumTabTyp;
1791 l_rt_projfunc_raw_revenue_tab PA_PLSQL_DATATYPES.NumTabTyp;
1792 l_rt_projfunc_raw_cst_tab PA_PLSQL_DATATYPES.NumTabTyp;
1793 l_rt_projfunc_raw_cst_rt_tab PA_PLSQL_DATATYPES.NumTabTyp;
1794 l_rt_projfunc_burdned_cst_tab PA_PLSQL_DATATYPES.NumTabTyp;
1795 l_rt_projfunc_bd_cst_rt_tab PA_PLSQL_DATATYPES.NumTabTyp;
1796 l_rt_rev_rejct_reason_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1797 l_rt_cst_rejct_reason_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1798 l_rt_burdned_rejct_reason_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1799 l_rt_others_rejct_reason_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1800 l_bulk_fetch_count NUMBER:= 0;
1801 l_markup_percentage NUMBER;
1802 l_cost_based_error_code VARCHAR2(100);
1803
1804 l_prj_asg_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
1805 l_avg_bill_rate_tab PA_PLSQL_DATATYPES.NumTabTyp;
1806
1807 l_rowcount number :=0;
1808
1809 l_amount_set_id PA_PROJ_FP_OPTIONS.COST_AMOUNT_SET_ID%TYPE;
1810 l_fin_plan_level_code PA_PROJ_FP_OPTIONS.COST_FIN_PLAN_LEVEL_CODE%TYPE;
1811 l_time_phased_code PA_PROJ_FP_OPTIONS.COST_TIME_PHASED_CODE%TYPE;
1812 l_resource_list_id PA_PROJ_FP_OPTIONS.COST_RESOURCE_LIST_ID%TYPE;
1813 l_res_planning_level PA_PROJ_FP_OPTIONS.COST_RES_PLANNING_LEVEL%TYPE;
1814 l_rbs_version_id PA_PROJ_FP_OPTIONS.RBS_VERSION_ID%TYPE;
1815 --l_plan_res_list_id PA_PROJ_FP_OPTIONS.COST_PLAN_RES_LIST_ID%TYPE;
1816 l_emp_rate_sch_id PA_PROJ_FP_OPTIONS.COST_EMP_RATE_SCH_ID%TYPE;
1817 l_job_rate_sch_id PA_PROJ_FP_OPTIONS.COST_JOB_RATE_SCH_ID%TYPE;
1818 l_non_labor_res_rate_sch_id PA_PROJ_FP_OPTIONS.COST_NON_LABOR_RES_RATE_SCH_ID%TYPE;
1819 l_res_class_rate_sch_id PA_PROJ_FP_OPTIONS.COST_RES_CLASS_RATE_SCH_ID%TYPE;
1820 l_burden_rate_sch_id PA_PROJ_FP_OPTIONS.COST_BURDEN_RATE_SCH_ID%TYPE;
1821 l_current_planning_period PA_PROJ_FP_OPTIONS.COST_CURRENT_PLANNING_PERIOD%TYPE;
1822 l_period_mask_id PA_PROJ_FP_OPTIONS.COST_PERIOD_MASK_ID%TYPE;
1823 l_gen_src_plan_type_id PA_PROJ_FP_OPTIONS.GEN_SRC_COST_PLAN_TYPE_ID%TYPE;
1824 l_gen_src_plan_version_id PA_PROJ_FP_OPTIONS.GEN_SRC_COST_PLAN_VERSION_ID%TYPE;
1825 l_gen_src_plan_ver_code PA_PROJ_FP_OPTIONS.GEN_SRC_COST_PLAN_VER_CODE%TYPE;
1826 l_gen_src_code PA_PROJ_FP_OPTIONS.GEN_COST_SRC_CODE%TYPE;
1827 l_gen_etc_src_code PA_PROJ_FP_OPTIONS.GEN_COST_ETC_SRC_CODE%TYPE;
1828 l_gen_incl_change_doc_flag PA_PROJ_FP_OPTIONS.GEN_COST_INCL_CHANGE_DOC_FLAG%TYPE;
1829 l_gen_incl_open_comm_flag PA_PROJ_FP_OPTIONS.GEN_COST_INCL_OPEN_COMM_FLAG%TYPE;
1830 l_gen_incl_bill_event_flag PA_PROJ_FP_OPTIONS.GEN_REV_INCL_BILL_EVENT_FLAG%TYPE;
1831 l_gen_ret_manual_line_flag PA_PROJ_FP_OPTIONS.GEN_COST_RET_MANUAL_LINE_FLAG%TYPE;
1832 l_gen_actual_amts_thru_code PA_PROJ_FP_OPTIONS.GEN_COST_ACTUAL_AMTS_THRU_CODE%TYPE;
1833 l_gen_incl_unspent_amt_flag PA_PROJ_FP_OPTIONS.GEN_COST_INCL_UNSPENT_AMT_FLAG%TYPE;
1834
1835 l_raw_cost_flag PA_FIN_PLAN_AMOUNT_SETS.RAW_COST_FLAG%TYPE;
1836 l_burdened_flag PA_FIN_PLAN_AMOUNT_SETS.BURDENED_COST_FLAG%TYPE;
1837 l_revenue_flag PA_FIN_PLAN_AMOUNT_SETS.REVENUE_FLAG%TYPE;
1838 l_cost_quantity_flag PA_FIN_PLAN_AMOUNT_SETS.COST_QTY_FLAG%TYPE;
1839 l_rev_quantity_flag PA_FIN_PLAN_AMOUNT_SETS.REVENUE_QTY_FLAG%TYPE;
1840 l_all_quantity_flag PA_FIN_PLAN_AMOUNT_SETS.ALL_QTY_FLAG%TYPE;
1841 l_bill_rate_flag PA_FIN_PLAN_AMOUNT_SETS.BILL_RATE_FLAG%TYPE;
1842 l_cost_rate_flag PA_FIN_PLAN_AMOUNT_SETS.COST_RATE_FLAG%TYPE;
1843 l_burden_rate_flag PA_FIN_PLAN_AMOUNT_SETS.BURDEN_RATE_FLAG%TYPE;
1844
1845 l_fp_cols_rec PA_FP_GEN_AMOUNT_UTILS.FP_COLS;
1846
1847 l_res_assgn_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
1848 l_res_assgn_id_tmp_tab SYSTEM.pa_num_tbl_type:=SYSTEM.pa_num_tbl_type();
1849 l_total_plan_quantity number;
1850 l_rlm_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
1851
1852 l_last_updated_by NUMBER := FND_GLOBAL.user_id;
1853 l_last_update_login NUMBER := FND_GLOBAL.login_id;
1854 l_sysdate DATE := SYSDATE;
1855 l_sysdate_trunc DATE;
1856 l_proj_assgn_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
1857 l_proj_exp_organization_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
1858 l_proj_res_assgn_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
1859 -- M-Closeout ER: Bill Rate Override ER
1860 l_proj_bill_rate_override_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1861 l_proj_bill_rate_cur_ovrd_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1862 l_calculate_mode VARCHAR2(30);
1863 l_cost_rate_multiplier CONSTANT pa_labor_cost_multipliers.multiplier%TYPE := 1;
1864 l_bill_rate_multiplier CONSTANT pa_labor_cost_multipliers.multiplier%TYPE := 1;
1865 l_cost_sch_type VARCHAR2(30) := 'COST';
1866 l_override_organization_id NUMBER := NULL;
1867 l_Final_Txn_Currency_Code VARCHAR2(100);
1868 l_insert_Txn_Currency_Code VARCHAR2(100); -- Bug 4615589
1869 l_return_status VARCHAR2(1);
1870 l_error_code VARCHAR2(100);
1871 l_stage VARCHAR2(100);
1872 l_status VARCHAR2(100);
1873 l_entire_return_status VARCHAR2(1);
1874 x_bill_rate NUMBER := NULL;
1875 x_cost_rate NUMBER := NULL;
1876 x_raw_cost NUMBER := NULL;
1877 x_cost_txn_curr_code VARCHAR2(100) := NULL;
1878 x_rev_txn_curr_code VARCHAR2(100) := NULL;
1879 x_burden_cost_rate NUMBER := NULL;
1880 x_burden_cost NUMBER := NULL;
1881 x_raw_revenue NUMBER := NULL;
1882 x_burden_multiplier NUMBER := NULL;
1883 x_bill_markup_percentage NUMBER := NULL;
1884 x_raw_cost_rejection_code VARCHAR2(30) := NULL;
1885 x_burden_cost_rejection_code VARCHAR2(30) := NULL;
1886 x_revenue_rejection_code VARCHAR2(30) := NULL;
1887 x_cost_ind_compiled_set_id NUMBER := NULL;
1888 l_ce_raw_cost NUMBER := NULL;
1889 l_ce_burdened_cost NUMBER := NULL;
1890 l_ce_revenue NUMBER := NULL;
1891 l_final_txn_rate_type VARCHAR2(100);
1892 l_final_txn_rate_date DATE := NULL;
1893 l_final_txn_exch_rate NUMBER := NULL;
1894 l_final_txn_quantity NUMBER := NULL;
1895 l_final_txn_revenue NUMBER := NULL;
1896 l_final_txn_raw_cost NUMBER := NULL;
1897 l_final_txn_burden_cost NUMBER := NULL;
1898
1899 x_dummy_rate_date DATE;
1900 x_dummy_rate_type VARCHAR2(100);
1901 x_dummy_exch_rate NUMBER;
1902 x_dummy_cost NUMBER;
1903 -- END of M-Closeout ER: Bill Rate Override ER
1904
1905 --Local PL/SQL table used for calling Calculate API
1906 l_calling_module VARCHAR2(30) := 'BUDGET_GENERATION';
1907 l_refresh_rates_flag VARCHAR2(1) := 'Y';
1908 l_refresh_conv_rates_flag VARCHAR2(1) := 'N';
1909 l_spread_required_flag VARCHAR2(1) := 'N';
1910 l_conv_rates_required_flag VARCHAR2(1) := 'N';
1911 l_rollup_required_flag VARCHAR2(1) := 'N';
1912 l_mass_adjust_flag VARCHAR2(1) := 'N';
1913 l_raTxn_rollup_api_call_flag VARCHAR2(1) := 'N'; -- Added for IPM new entity ER
1914 l_quantity_adj_pct NUMBER := NULL;
1915 l_cost_rate_adj_pct NUMBER := NULL;
1916 l_burdened_rate_adj_pct NUMBER := NULL;
1917 l_bill_rate_adj_pct NUMBER := NULL;
1918 l_source_context pa_fp_res_assignments_tmp.source_context%TYPE := 'RESOURCE_ASSIGNMENT';
1919
1920 l_delete_budget_lines_tab SYSTEM.pa_varchar2_1_tbl_type:=SYSTEM.pa_varchar2_1_tbl_type();
1921 l_spread_amts_flag_tab SYSTEM.pa_varchar2_1_tbl_type:=SYSTEM.pa_varchar2_1_tbl_type();
1922 l_txn_currency_code_tab SYSTEM.pa_varchar2_15_tbl_type:=SYSTEM.pa_varchar2_15_tbl_type();
1923 l_txn_currency_override_tab SYSTEM.pa_varchar2_15_tbl_type:=SYSTEM.pa_varchar2_15_tbl_type();
1924 l_total_qty_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1925 l_addl_qty_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1926 l_total_raw_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1927 l_addl_raw_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1928 l_total_burdened_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1929 l_addl_burdened_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1930 l_total_revenue_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1931 l_addl_revenue_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1932 l_raw_cost_rate_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1933 l_rw_cost_rate_override_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1934 l_b_cost_rate_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1935 l_b_cost_rate_override_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1936
1937
1938 l_bill_rate_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1939 l_bill_rate_override_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
1940 l_line_start_date_tab SYSTEM.pa_date_tbl_type:=SYSTEM.pa_date_tbl_type();
1941 l_line_end_date_tab SYSTEM.pa_date_tbl_type:=SYSTEM.pa_date_tbl_type();
1942
1943 l_stru_sharing_code PA_PROJECTS_ALL.STRUCTURE_SHARING_CODE%TYPE;
1944 l_count NUMBER;
1945 l_count1 NUMBER;
1946 l_gen_res_asg_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
1947 l_chk_duplicate_flag VARCHAR2(1) := 'N';
1948 l_deleted_res_asg_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
1949
1950 l_resource_class_id PA_RESOURCE_CLASSES_B.RESOURCE_CLASS_ID%TYPE;
1951 l_dp_counter NUMBER;
1952 l_dp_flag VARCHAR2(1);
1953
1954 tmp_flag varchar2(1);
1955 tmp_rlm_tab pa_plsql_datatypes.IdTabTyp;
1956 tmp_task_tab pa_plsql_datatypes.IdTabTyp;
1957 tmp_ra_tab pa_plsql_datatypes.IdTabTyp;
1958
1959 --Local pl/sql table to call Map_Rlmi_Rbs api
1960 l_TXN_SOURCE_ID_tab PA_PLSQL_DATATYPES.IdTabTyp;
1961 l_TXN_SOURCE_TYPE_CODE_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1962 l_PERSON_ID_tab PA_PLSQL_DATATYPES.IdTabTyp;
1963 l_JOB_ID_tab PA_PLSQL_DATATYPES.IdTabTyp;
1964 l_ORGANIZATION_ID_tab PA_PLSQL_DATATYPES.IdTabTyp;
1965 l_VENDOR_ID_tab PA_PLSQL_DATATYPES.IdTabTyp;
1966 l_EXPENDITURE_TYPE_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1967 l_EVENT_TYPE_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1968 l_NON_LABOR_RESOURCE_tab PA_PLSQL_DATATYPES.Char20TabTyp;
1969 l_EXPENDITURE_CATEGORY_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1970 l_REVENUE_CATEGORY_CODE_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1971 l_NLR_ORGANIZATION_ID_tab PA_PLSQL_DATATYPES.IdTabTyp;
1972 l_EVENT_CLASSIFICATION_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1973 l_SYS_LINK_FUNCTION_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1974 l_PROJECT_ROLE_ID_tab PA_PLSQL_DATATYPES.IdTabTyp;
1975 l_RESOURCE_CLASS_CODE_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1976 l_MFC_COST_TYPE_ID_tab PA_PLSQL_DATATYPES.IDTabTyp;
1977 l_RESOURCE_CLASS_FLAG_tab PA_PLSQL_DATATYPES.Char1TabTyp;
1978 l_FC_RES_TYPE_CODE_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1979 l_INVENTORY_ITEM_ID_tab PA_PLSQL_DATATYPES.IDTabTyp;
1980 l_ITEM_CATEGORY_ID_tab PA_PLSQL_DATATYPES.IDTabTyp;
1981 l_PERSON_TYPE_CODE_tab PA_PLSQL_DATATYPES.Char30TabTyp;
1982 l_BOM_RESOURCE_ID_tab PA_PLSQL_DATATYPES.IDTabTyp;
1983 l_NAMED_ROLE_tab PA_PLSQL_DATATYPES.Char80TabTyp;
1984 l_INCURRED_BY_RES_FLAG_tab PA_PLSQL_DATATYPES.Char1TabTyp;
1985 l_RATE_BASED_FLAG_tab PA_PLSQL_DATATYPES.Char1TabTyp;
1986 l_TXN_TASK_ID_tab PA_PLSQL_DATATYPES.IdTabTyp;
1987 l_TXN_WBS_ELEMENT_VER_ID_tab PA_PLSQL_DATATYPES.IdTabTyp;
1988 l_TXN_RBS_ELEMENT_ID_tab PA_PLSQL_DATATYPES.IdTabTyp;
1989 l_TXN_PLAN_START_DATE_tab PA_PLSQL_DATATYPES.DateTabTyp;
1990 l_TXN_PLAN_END_DATE_tab PA_PLSQL_DATATYPES.DateTabTyp;
1991 --out param from PA_RLMI_RBS_MAP_PUB.MAP_RLMI_RBS
1992 l_map_txn_source_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
1993 l_map_rlm_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
1994 l_map_rbs_element_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
1995 l_map_txn_accum_header_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
1996
1997 --Local PL/SQL table used for calling Calculate API
1998 l_t_refresh_rates_flag VARCHAR2(1) := 'Y';
1999 l_t_refresh_conv_rates_flag VARCHAR2(1) := 'N';
2000 l_t_spread_required_flag VARCHAR2(1) := 'N';
2001 l_t_conv_rates_required_flag VARCHAR2(1) := 'N';
2002 l_t_mass_adjust_flag VARCHAR2(1) := 'N';
2003 l_t_quantity_adj_pct NUMBER := NULL;
2004 l_t_cost_rate_adj_pct NUMBER := NULL;
2005 l_t_burdened_rate_adj_pct NUMBER := NULL;
2006 l_t_bill_rate_adj_pct NUMBER := NULL;
2007 l_t_source_context pa_fp_res_assignments_tmp.source_context%TYPE := 'RESOURCE_ASSIGNMENT';
2008
2009 l_t_res_assgn_id_tmp_tab SYSTEM.pa_num_tbl_type:=SYSTEM.pa_num_tbl_type();
2010 l_t_delete_budget_lines_tab SYSTEM.pa_varchar2_1_tbl_type:=SYSTEM.pa_varchar2_1_tbl_type();
2011 l_t_spread_amts_flag_tab SYSTEM.pa_varchar2_1_tbl_type:=SYSTEM.pa_varchar2_1_tbl_type();
2012 l_t_txn_currency_code_tab SYSTEM.pa_varchar2_15_tbl_type:=SYSTEM.pa_varchar2_15_tbl_type();
2013 l_t_txn_currency_override_tab SYSTEM.pa_varchar2_15_tbl_type:=SYSTEM.pa_varchar2_15_tbl_type();
2014 l_t_total_qty_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2015 l_t_addl_qty_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2016 l_t_total_raw_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2017 l_t_addl_raw_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2018 l_t_total_burdened_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2019 l_t_addl_burdened_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2020 l_t_total_revenue_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2021 l_t_addl_revenue_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2022 l_t_raw_cost_rate_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2023 l_t_rw_cost_rate_override_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2024 l_t_b_cost_rate_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2025 l_t_b_cost_rate_override_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2026
2027
2028 l_t_bill_rate_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2029 l_t_bill_rate_override_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2030 l_t_line_start_date_tab SYSTEM.pa_date_tbl_type:=SYSTEM.pa_date_tbl_type();
2031 l_t_line_end_date_tab SYSTEM.pa_date_tbl_type:=SYSTEM.pa_date_tbl_type();
2032
2033 l_bl_count NUMBER;
2034 l_transaction_source_code PA_RESOURCE_ASSIGNMENTS.TRANSACTION_SOURCE_CODE%TYPE;
2035
2036 -- Bug 4548733: Added new pl/sql table to hold billability flag values for
2037 -- Calculate API. Corresponds to p_fp_task_billable_flag_tab IN parameter.
2038 l_calc_billable_flag_tab SYSTEM.pa_varchar2_1_tbl_type:=SYSTEM.pa_varchar2_1_tbl_type();
2039
2040 -- Bug 4549862: Added counter to track unique budget_line_id values for
2041 -- the PA_FP_ROLLUP_TMP table. Will be arbitrarily initialized to 0 and
2042 -- then incremented by 1 prior to each Insert to the temp table.
2043 -- Note: these are not valid budget_line_id values in pa_budget_lines.
2044 -- Rather, we are using the column to index records for processing of
2045 -- cost-based revenue amounts, since an Index exists for the column.
2046 l_bl_id_counter NUMBER;
2047
2048 -- Bug 4549862: Added pl/sql tables for budget line update.
2049 l_upd_bl_start_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
2050 l_upd_bl_end_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
2051 l_upd_bl_RES_ASSIGNMENT_ID_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2052 l_upd_bl_PERIOD_NAME_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
2053 l_upd_bl_QUANTITY_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2054 l_upd_bl_TXN_CURRENCY_CODE_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
2055 l_upd_bl_TXN_RAW_COST_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2056 l_upd_bl_TXN_BURDENED_COST_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2057 l_upd_bl_TXN_REVENUE_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2058 l_upd_bl_BILL_MARKUP_PRCNT_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2059 l_upd_bl_COST_REJ_CODE_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
2060 l_upd_bl_BURDEN_REJ_CODE_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
2061 l_upd_bl_REV_REJ_CODE_tab SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
2062 l_upd_bl_COST_IND_C_SET_ID_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
2063
2064 -- Bug 4549862: PL/SQL tables for rejection code processing
2065 l_rej_code_ra_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
2066 l_rej_code_txn_currency_tab PA_PLSQL_DATATYPES.Char15TabTyp;
2067 l_rej_code_msg_name_tab PA_PLSQL_DATATYPES.Char30TabTyp;
2068
2069 BEGIN
2070 /* Setting the initial values */
2071 IF p_init_msg_flag = 'Y' THEN
2072 FND_MSG_PUB.initialize;
2073 END IF;
2074 X_MSG_COUNT := 0;
2075 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
2076
2077 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
2078 PA_DEBUG.init_err_stack('PA_FP_GEN_BUDGET_AMT_PUB.GENERATE_BUDGET_AMT_RES_SCH');
2079 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
2080 pa_debug.set_curr_function( p_function => 'GENERATE_BUDGET_AMT_RES_SCH'
2081 ,p_debug_mode => p_pa_debug_mode);
2082 END IF;
2083
2084 -- Bug 4549862: Added counter to track unique budget_line_id values for
2085 -- the PA_FP_ROLLUP_TMP table. Will be arbitrarily initialized to 0 and
2086 -- then incremented by 1 prior to each Insert to the temp table.
2087 l_bl_id_counter := 0;
2088
2089 -- Bug 4549862: Moved initialization of l_rev_gen_method before
2090 -- initialization of l_calculate_mode.
2091
2092 --l_rev_gen_method := PA_FP_GEN_FCST_PG_PKG.GET_REV_GEN_METHOD(p_project_id);
2093 l_rev_gen_method := nvl(l_fp_cols_rec.x_revenue_derivation_method,PA_FP_GEN_FCST_PG_PKG.GET_REV_GEN_METHOD(p_project_id)); --Bug 5462471
2094
2095 -- M-closeout: Bill Rate Override ER ------------------------------------------
2096
2097 -- Check whether there exist at least 1 project assignment with
2098 -- bill rate override in the project.
2099 OPEN CHECK_BILL_RATE_OVRD_EXISTS;
2100 FETCH CHECK_BILL_RATE_OVRD_EXISTS INTO l_bill_rate_ovrd_exists_flag;
2101 CLOSE CHECK_BILL_RATE_OVRD_EXISTS;
2102
2103 -- Only need to honor bill rate override and
2104 -- call rate API IF:
2105 -- a) version type is COST and REVENUE and,
2106 -- b) there is at least 1 project asgmt with
2107 -- bill rate override in the project.
2108
2109 -- Bug 4549862: Modified IF condition so that the code also proceeds
2110 -- along the Rate API flow when target version is ALL and revenue
2111 -- accrual method is COST.
2112
2113 IF p_fp_cols_rec.x_version_type = 'ALL' AND
2114 ( l_bill_rate_ovrd_exists_flag = 'Y' OR l_rev_gen_method = 'C' ) THEN
2115
2116 OPEN GET_RATE_API_PARAMS_CUR;
2117 FETCH GET_RATE_API_PARAMS_CUR INTO rate_rec;
2118 CLOSE GET_RATE_API_PARAMS_CUR;
2119
2120 END IF;
2121
2122 -- Bug 4549862: Modified logic for initializing l_calculate_mode
2123 -- to 'COST'. When the version type is Cost and Revenue together
2124 -- and the revenue accrual method is COST or EVENT, we will be
2125 -- generating revenue amounts using either GEN_COST_BASED_REVENUE
2126 -- or GEN_BILLING_AMOUNTS, respectively. Setting l_calculate_mode
2127 -- to 'COST' in these cases will tell the Rate API to return only
2128 -- cost rates when it is called later in this API.
2129
2130 IF p_fp_cols_rec.x_version_type = 'REVENUE' THEN
2131 l_calculate_mode := 'REVENUE';
2132 ELSIF p_fp_cols_rec.x_version_type = 'COST' OR
2133 ( p_fp_cols_rec.x_version_type = 'ALL' AND
2134 l_rev_gen_method IN ('C','E') ) THEN
2135 l_calculate_mode := 'COST';
2136 ELSIF p_fp_cols_rec.x_version_type = 'ALL' THEN
2137 -- Bug 4549862: l_rev_gen_method is implicitly 'T' in this case.
2138 l_calculate_mode := 'COST_REVENUE';
2139 END IF;
2140
2141 -- Final Currency:
2142 -- a. For Approved Revenue, final currency = PFC
2143 -- b. If multi-currency is disabled, final currency = PC
2144 IF rate_rec.approved_rev_plan_type_flag = 'Y' THEN
2145 l_Final_Txn_Currency_Code := rate_rec.projfunc_currency_code;
2146 ELSIF rate_rec.plan_in_multi_curr_flag = 'N' THEN
2147 l_Final_Txn_Currency_Code := rate_rec.project_currency_code;
2148 ELSE
2149 l_Final_Txn_Currency_Code := NULL;
2150 END IF;
2151
2152 -- END of M-closeout: Bill Rate Override ER ----------------------------------
2153
2154 /*Bug 4197666: when ret_manual_lines flag is 'N', budget lines and resource assignments
2155 are deleted completely for the target version. when ret_manual_lines flag is 'Y', for
2156 budget version,all budget lines that under resource assignment whose transaction source
2157 code is NOT NULL should be deleted. for forecast version, 'P' and 'G' time phased, all
2158 ETC budget lines should be deleted; 'N' time phased, ETC should be deleted or negated.*/
2159 IF p_fp_cols_rec.x_gen_ret_manual_line_flag = 'Y' THEN
2160 IF P_PLAN_CLASS_CODE = 'BUDGET' THEN
2161 DELETE FROM pa_budget_lines
2162 WHERE budget_version_id = p_budget_version_id
2163 AND budget_line_id IN
2164 (SELECT bl.budget_line_id
2165 FROM pa_budget_lines bl, pa_resource_assignments ra
2166 WHERE ra.budget_version_id = p_budget_version_id
2167 AND bl.budget_version_id = p_budget_version_id
2168 AND ra.transaction_source_code IS NOT NULL
2169 AND ra.resource_assignment_id = bl.resource_assignment_id);
2170 ELSIF P_PLAN_CLASS_CODE = 'FORECAST' THEN
2171 IF P_FP_COLS_REC.x_time_phased_code IN ('P','G') THEN
2172 DELETE FROM pa_budget_lines
2173 WHERE budget_version_id = p_budget_version_id
2174 AND budget_line_id IN
2175 (SELECT bl.budget_line_id
2176 FROM pa_budget_lines bl, pa_resource_assignments ra
2177 WHERE ra.budget_version_id = p_budget_version_id
2178 AND bl.budget_version_id = p_budget_version_id
2179 AND ra.transaction_source_code IS NOT NULL
2180 AND ra.resource_assignment_id = bl.resource_assignment_id
2181 AND bl.start_date > p_actuals_thru_date);
2182 ELSE
2183 DELETE FROM pa_budget_lines
2184 WHERE budget_version_id = p_budget_version_id
2185 AND NVL(init_quantity,0) = 0
2186 AND NVL(init_raw_cost,0) = 0
2187 AND NVL(init_burdened_cost,0) = 0
2188 AND NVL(init_revenue,0) = 0;
2189
2190 UPDATE pa_budget_lines
2191 SET quantity = init_quantity,
2192 txn_raw_cost = txn_init_raw_cost,
2193 txn_burdened_cost = txn_init_burdened_cost,
2194 txn_revenue = txn_init_revenue,
2195 project_raw_cost = project_init_raw_cost,
2196 project_burdened_cost = project_init_burdened_cost,
2197 project_revenue = project_init_revenue,
2198 raw_cost = init_raw_cost,
2199 burdened_cost = init_burdened_cost,
2200 revenue = init_revenue,
2201 txn_cost_rate_override = DECODE(NVL(init_quantity,0),0,NULL,txn_init_raw_cost/init_quantity),
2202 txn_bill_rate_override = DECODE(NVL(init_quantity,0),0,NULL,txn_init_revenue/init_quantity),
2203 project_cost_exchange_rate = DECODE(NVL(txn_init_raw_cost,0),0,NULL,project_init_raw_cost/txn_init_raw_cost),
2204 project_rev_exchange_rate = DECODE(NVL(txn_init_revenue,0),0,NULL,project_init_revenue/txn_init_revenue),
2205 projfunc_cost_exchange_rate = DECODE(NVL(txn_init_raw_cost,0),0,NULL,init_raw_cost/txn_init_raw_cost),
2206 projfunc_rev_exchange_rate = DECODE(NVL(txn_init_revenue,0),0,NULL,init_revenue/txn_init_revenue)
2207 WHERE budget_version_id = p_budget_version_id
2208 AND budget_line_id IN
2209 (SELECT bl.budget_line_id
2210 FROM pa_budget_lines bl, pa_resource_assignments ra
2211 WHERE ra.budget_version_id = p_budget_version_id
2212 AND bl.budget_version_id = p_budget_version_id
2213 AND ra.transaction_source_code IS NOT NULL
2214 AND ra.resource_assignment_id = bl.resource_assignment_id);
2215 END IF;
2216 END IF;
2217 END IF;
2218
2219 l_sysdate_trunc := trunc(sysdate);
2220 /* l_role_error_code_flag is used here
2221 for only checking whether to continue
2222 with forecasting process or not */
2223 l_role_error_code_flag := 'N';
2224 OPEN PROJ_DETAILS;
2225 FETCH PROJ_DETAILS INTO
2226 l_project_type,
2227 l_project_currency_code,
2228 l_carrying_out_organization_id,
2229 l_project_value,
2230 l_job_bill_rate_schedule_id,
2231 l_emp_bill_rate_schedule_id,
2232 l_distribution_rule,
2233 l_bill_job_group_id,
2234 l_org_id,
2235 l_completion_date,
2236 l_template_flag,
2237 l_projfunc_currency_code,
2238 l_projfunc_bil_rate_date_code,
2239 l_projfunc_bil_rate_type,
2240 l_projfunc_bil_rate_date,
2241 l_projfunc_bil_exchange_rate,
2242 l_cost_job_group_id,
2243 l_prj_rate_date,
2244 l_prj_rate_type,
2245 l_prj_bil_rate_date_code,
2246 l_prj_bil_rate_type,
2247 l_prj_bil_rate_date,
2248 l_prj_bil_ex_rate,
2249 l_prjfunc_cost_rate_type,
2250 l_prjfunc_cost_rate_date,
2251 l_labor_tp_schedule_id,
2252 l_labor_tp_fixed_date,
2253 l_labor_sch_discount,
2254 l_asg_precedes_task,
2255 l_labor_bill_rate_orgid,
2256 l_labor_std_bill_rate_sch,
2257 l_labor_sch_fixed_dt,
2258 l_labor_sch_type;
2259
2260 IF PROJ_DETAILS%NOTFOUND THEN
2261 x_return_status := FND_API.G_RET_STS_ERROR;
2262 l_role_error_code_flag := 'Y';
2263 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
2264 p_msg_name => 'PA_INVALID_PROJECT_ID');
2265 END IF;
2266
2267 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
2268 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2269 END IF;
2270 CLOSE PROJ_DETAILS;
2271
2272 -- Bug 4549862: REMOVED call to Get_Revenue_Generation_Method API.
2273 -- Added initialization of l_rev_gen_method at the beginning of
2274 -- this API using the GET_REV_GEN_METHOD wrapper API.
2275
2276 /* Set plan processing code to G - G(enerated Successfully) */
2277
2278 l_plan_processing_code := 'G';
2279 l_budget_lines_tot_tbl.DELETE;
2280
2281 OPEN PROJ_ASSIGNMENTS;
2282 FETCH PROJ_ASSIGNMENTS
2283 BULK COLLECT INTO l_proj_assignment_id,
2284 l_proj_start_date,
2285 l_proj_resource_id,
2286 l_proj_project_role_id,
2287 l_proj_fcst_job_id,
2288 l_proj_fcst_job_group_id,
2289 l_proj_meaning,
2290 l_proj_assignment_type,
2291 l_proj_exp_organization_id,
2292 l_proj_exp_type,
2293 l_proj_revenue_bill_rate,
2294 l_proj_expenditure_org_id,
2295 l_proj_status_code,
2296 l_proj_billable_flag,
2297 l_proj_process_code,
2298 l_proj_error_msg_code,
2299 l_proj_end_date,
2300 l_proj_person_id,
2301 l_proj_named_role,
2302 l_fi_exp_organization_id,
2303 l_proj_fc_res_type_code;
2304 CLOSE PROJ_ASSIGNMENTS;
2305
2306 FOR i IN 1..l_proj_person_id.count LOOP
2307 l_person_type_code_tab(i) := NULL;
2308 l_vendor_id_tab(i) := NULL;
2309 IF l_proj_person_id(i) IS NOT NULL THEN
2310 BEGIN
2311 SELECT p_type.SYSTEM_PERSON_TYPE
2312 INTO l_person_type_code_tab(i)
2313 FROM PER_PERSON_TYPES p_type,
2314 PER_PERSON_TYPE_USAGES_F p_usg
2315 WHERE p_type.SYSTEM_PERSON_TYPE IN ('EMP', 'CWK')
2316 AND p_type.PERSON_TYPE_ID = p_usg.PERSON_TYPE_ID
2317 AND l_proj_person_id(i) = p_usg.PERSON_ID
2318 AND l_proj_start_date(i) BETWEEN p_usg.EFFECTIVE_START_DATE AND p_usg.EFFECTIVE_END_DATE;
2319 EXCEPTION
2320 WHEN OTHERS THEN
2321 l_person_type_code_tab(i) := NULL;
2322 END;
2323 BEGIN
2324 SELECT p_asg.vendor_id
2325 INTO l_vendor_id_tab(i)
2326 FROM PER_ALL_ASSIGNMENTS_F p_asg
2327 WHERE l_proj_person_id(i) = p_asg.PERSON_ID
2328 AND l_proj_start_date(i) BETWEEN p_asg.EFFECTIVE_START_DATE AND p_asg.EFFECTIVE_END_DATE
2329 AND p_asg.PRIMARY_FLAG = 'Y';
2330 EXCEPTION
2331 WHEN OTHERS THEN
2332 l_vendor_id_tab(i) := NULL;
2333 END;
2334 END IF;
2335 END LOOP;
2336
2337 --hr_utility.trace('l_proj_assignment_id.count:'||l_proj_assignment_id.count);
2338 IF p_pa_debug_mode = 'Y' THEN
2339 pa_fp_gen_amount_utils.fp_debug
2340 (p_called_mode => p_called_mode,
2341 p_msg => 'l_proj_assignment_id.count:'||l_proj_assignment_id.count,
2342 p_module_name => l_module_name,
2343 p_log_level => 5);
2344 END IF;
2345
2346 if l_proj_resource_id.count = 0 then
2347 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
2348 PA_DEBUG.reset_err_stack;
2349 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
2350 PA_DEBUG.Reset_Curr_Function;
2351 END IF;
2352 return;
2353 end if;
2354
2355 /* code to populate to job and/or job group id is null */
2356 FOR i IN 1..l_proj_resource_id.count LOOP
2357 IF (l_proj_fcst_job_id(i) IS NULL)
2358 OR (l_proj_fcst_job_group_id(i) IS NULL) THEN
2359 BEGIN
2360 SELECT PR.DEFAULT_JOB_ID,PJ.JOB_GROUP_ID
2361 INTO l_proj_fcst_job_id(i),l_proj_fcst_job_group_id(i)
2362 FROM PA_PROJECT_ROLE_TYPES PR, PER_JOBS PJ
2363 WHERE PR.PROJECT_ROLE_ID = l_proj_project_role_id(i)
2364 AND PJ.JOB_ID = PR.DEFAULT_JOB_ID;
2365 EXCEPTION
2366 WHEN NO_DATA_FOUND THEN
2367 l_proj_process_code(i) := 'N';
2368 l_proj_error_msg_code(i) := 'N';
2369 END;
2370 END IF;
2371 END LOOP;
2372
2373 DELETE FROM PA_RES_LIST_MAP_TMP1;
2374 DELETE FROM PA_RES_LIST_MAP_TMP4;
2375
2376 l_TXN_SOURCE_ID_tab := l_proj_assignment_id;
2377 l_PERSON_ID_tab := l_proj_person_id;
2378 l_JOB_ID_tab := l_proj_fcst_job_id;
2379 l_ORGANIZATION_ID_tab := l_fi_exp_organization_id;
2380 l_EXPENDITURE_TYPE_tab := l_proj_exp_type;
2381 l_PROJECT_ROLE_ID_tab := l_proj_project_role_id;
2382 l_FC_RES_TYPE_CODE_tab := l_proj_fc_res_type_code;
2383 l_NAMED_ROLE_tab := l_proj_named_role;
2384 l_TXN_PLAN_START_DATE_tab := l_proj_start_date;
2385 l_TXN_PLAN_END_DATE_tab := l_proj_end_date;
2386
2387 FOR bb in 1..l_TXN_SOURCE_ID_tab.count LOOP
2388 l_TXN_SOURCE_TYPE_CODE_tab(bb) := null;
2389 l_EVENT_TYPE_tab(bb) := null;
2390 l_NON_LABOR_RESOURCE_tab(bb) := null;
2391 l_EXPENDITURE_CATEGORY_tab(bb) := null;
2392 l_REVENUE_CATEGORY_CODE_tab(bb):= null;
2393 l_NLR_ORGANIZATION_ID_tab(bb) := null;
2394 l_EVENT_CLASSIFICATION_tab(bb) := null;
2395 l_SYS_LINK_FUNCTION_tab(bb) := null;
2396 l_RESOURCE_CLASS_CODE_tab(bb) := 'PEOPLE';
2397 l_MFC_COST_TYPE_ID_tab(bb) := null;
2398 l_RESOURCE_CLASS_FLAG_tab(bb) := null;
2399 l_INVENTORY_ITEM_ID_tab(bb) := null;
2400 l_ITEM_CATEGORY_ID_tab(bb) := null;
2401 l_BOM_RESOURCE_ID_tab(bb) := null;
2402 l_INCURRED_BY_RES_FLAG_tab(bb) := null;
2403 l_RATE_BASED_FLAG_tab(bb) := null;
2404 l_TXN_TASK_ID_tab(bb) := null;
2405 l_TXN_WBS_ELEMENT_VER_ID_tab(bb):= null;
2406 l_TXN_RBS_ELEMENT_ID_tab(bb) := null;
2407 END LOOP;
2408
2409 IF P_PA_DEBUG_MODE = 'Y' THEN
2410 PA_FP_GEN_AMOUNT_UTILS.FP_DEBUG(
2411 P_MSG => 'Before calling PA_RLMI_RBS_MAP_PUB.MAP_RLMI_RBS',
2412 P_MODULE_NAME => l_module_name);
2413 END IF;
2414 PA_RLMI_RBS_MAP_PUB.MAP_RLMI_RBS (
2415 P_PROJECT_ID => p_project_id,
2416 P_BUDGET_VERSION_ID => NULL,
2417 P_RESOURCE_LIST_ID => P_FP_COLS_REC.X_RESOURCE_LIST_ID,
2418 P_RBS_VERSION_ID => NULL,
2419 P_CALLING_PROCESS => 'BUDGET_GENERATION',
2420 P_CALLING_CONTEXT => 'PLSQL',
2421 P_PROCESS_CODE => 'RES_MAP',
2422 P_CALLING_MODE => 'PLSQL_TABLE',
2423 P_INIT_MSG_LIST_FLAG => 'N',
2424 P_COMMIT_FLAG => 'N',
2425 P_TXN_SOURCE_ID_TAB => l_TXN_SOURCE_ID_tab,
2426 P_TXN_SOURCE_TYPE_CODE_TAB => l_TXN_SOURCE_TYPE_CODE_tab,
2427 P_PERSON_ID_TAB => l_PERSON_ID_tab,
2428 P_JOB_ID_TAB => l_JOB_ID_tab,
2429 P_ORGANIZATION_ID_TAB => l_ORGANIZATION_ID_tab,
2430 P_VENDOR_ID_TAB => l_VENDOR_ID_tab,
2431 P_EXPENDITURE_TYPE_TAB => l_EXPENDITURE_TYPE_tab,
2432 P_EVENT_TYPE_TAB => l_EVENT_TYPE_tab,
2433 P_NON_LABOR_RESOURCE_TAB => l_NON_LABOR_RESOURCE_tab,
2434 P_EXPENDITURE_CATEGORY_TAB => l_EXPENDITURE_CATEGORY_tab,
2435 P_REVENUE_CATEGORY_CODE_TAB =>l_REVENUE_CATEGORY_CODE_tab,
2436 P_NLR_ORGANIZATION_ID_TAB =>l_NLR_ORGANIZATION_ID_tab,
2437 P_EVENT_CLASSIFICATION_TAB => l_EVENT_CLASSIFICATION_tab,
2438 P_SYS_LINK_FUNCTION_TAB => l_SYS_LINK_FUNCTION_tab,
2439 P_PROJECT_ROLE_ID_TAB => l_PROJECT_ROLE_ID_tab,
2440 P_RESOURCE_CLASS_CODE_TAB => l_RESOURCE_CLASS_CODE_tab,
2441 P_MFC_COST_TYPE_ID_TAB => l_MFC_COST_TYPE_ID_tab,
2442 P_RESOURCE_CLASS_FLAG_TAB => l_RESOURCE_CLASS_FLAG_tab,
2443 P_FC_RES_TYPE_CODE_TAB => l_FC_RES_TYPE_CODE_tab,
2444 P_INVENTORY_ITEM_ID_TAB => l_INVENTORY_ITEM_ID_tab,
2445 P_ITEM_CATEGORY_ID_TAB => l_ITEM_CATEGORY_ID_tab,
2446 P_PERSON_TYPE_CODE_TAB => l_PERSON_TYPE_CODE_tab,
2447 P_BOM_RESOURCE_ID_TAB =>l_BOM_RESOURCE_ID_tab,
2448 P_NAMED_ROLE_TAB =>l_NAMED_ROLE_tab,
2449 P_INCURRED_BY_RES_FLAG_TAB =>l_INCURRED_BY_RES_FLAG_tab,
2450 P_RATE_BASED_FLAG_TAB =>l_RATE_BASED_FLAG_tab,
2451 P_TXN_TASK_ID_TAB =>l_TXN_TASK_ID_tab,
2452 P_TXN_WBS_ELEMENT_VER_ID_TAB => l_TXN_WBS_ELEMENT_VER_ID_tab,
2453 P_TXN_RBS_ELEMENT_ID_TAB => l_TXN_RBS_ELEMENT_ID_tab,
2454 P_TXN_PLAN_START_DATE_TAB => l_TXN_PLAN_START_DATE_tab,
2455 P_TXN_PLAN_END_DATE_TAB => l_TXN_PLAN_END_DATE_tab,
2456 X_TXN_SOURCE_ID_TAB =>l_map_txn_source_id_tab,
2457 X_RES_LIST_MEMBER_ID_TAB =>l_map_rlm_id_tab,
2458 X_RBS_ELEMENT_ID_TAB =>l_map_rbs_element_id_tab,
2459 X_TXN_ACCUM_HEADER_ID_TAB =>l_map_txn_accum_header_id_tab,
2460 X_RETURN_STATUS => x_return_status,
2461 X_MSG_COUNT => x_msg_count,
2462 X_MSG_DATA => x_msg_data );
2463 IF P_PA_DEBUG_MODE = 'Y' THEN
2464 PA_FP_GEN_AMOUNT_UTILS.FP_DEBUG(
2465 P_MSG => 'After calling PA_RLMI_RBS_MAP_PUB.MAP_RLMI_RBS: '||
2466 x_return_status,
2467 P_MODULE_NAME => l_module_name);
2468 END IF;
2469
2470 /* Added return status check for bug 4093872 */
2471 IF x_return_status <> 'S' THEN
2472 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2473 END IF;
2474
2475 SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/ count(*) INTO l_count
2476 FROM PA_RES_LIST_MAP_TMP4
2477 WHERE RESOURCE_LIST_MEMBER_ID IS NULL and rownum=1;
2478 IF l_count > 0 THEN
2479 PA_UTILS.ADD_MESSAGE
2480 (p_app_short_name => 'PA',
2481 p_msg_name => 'PA_INVALID_MAPPING_ERR');
2482 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2483 END IF;
2484
2485 SELECT count(*) INTO l_count
2486 FROM PA_RES_LIST_MAP_TMP4;
2487 IF p_pa_debug_mode = 'Y' THEN
2488 pa_fp_gen_amount_utils.fp_debug
2489 (p_called_mode => p_called_mode,
2490 p_msg => 'After calling pa_resource_mapping.map_resource_list,'||
2491 'pa_res_list_map_tmp4.count has '||l_count||' rows',
2492 p_module_name => l_module_name,
2493 p_log_level => 5);
2494 END IF;
2495
2496
2497 /* Calling the API to get the resource_assignment_id */
2498 IF p_pa_debug_mode = 'Y' THEN
2499 pa_fp_gen_amount_utils.fp_debug
2500 (p_called_mode => p_called_mode,
2501 p_msg => 'Before calling
2502 pa_fp_gen_budget_amt_pub.create_res_asg',
2503 p_module_name => l_module_name,
2504 p_log_level => 5);
2505 END IF;
2506
2507 PA_FP_GEN_BUDGET_AMT_PUB.CREATE_RES_ASG
2508 (P_PROJECT_ID => P_PROJECT_ID,
2509 P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
2510 P_STRU_SHARING_CODE => l_stru_sharing_code,
2511 P_GEN_SRC_CODE => 'RESOURCE_SCHEDULE',
2512 P_FP_COLS_REC => p_FP_COLS_REC,
2513 X_RETURN_STATUS => X_RETURN_STATUS,
2514 X_MSG_COUNT => X_MSG_COUNT,
2515 X_MSG_DATA => X_MSG_DATA);
2516 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
2517 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2518 END IF;
2519 IF p_pa_debug_mode = 'Y' THEN
2520 pa_fp_gen_amount_utils.fp_debug
2521 (p_called_mode => p_called_mode,
2522 p_msg => 'Status after calling
2523 pa_fp_gen_budget_amt_pub.create_res_asg: '
2524 ||x_return_status,
2525 p_module_name => l_module_name,
2526 p_log_level => 5);
2527 END IF;
2528
2529 /* Calling the API to update the tmp4
2530 table with resource_assignment_id */
2531 IF p_pa_debug_mode = 'Y' THEN
2532 pa_fp_gen_amount_utils.fp_debug
2533 (p_called_mode => p_called_mode,
2534 p_msg => 'Before calling
2535 pa_fp_gen_budget_amt_pub.update_res_asg',
2536 p_module_name => l_module_name,
2537 p_log_level => 5);
2538 END IF;
2539 PA_FP_GEN_BUDGET_AMT_PUB.UPDATE_RES_ASG
2540 (P_PROJECT_ID => P_PROJECT_ID,
2541 P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
2542 P_STRU_SHARING_CODE => l_stru_sharing_code,
2543 P_GEN_SRC_CODE => 'RESOURCE_SCHEDULE',
2544 P_FP_COLS_REC => p_FP_COLS_REC,
2545 X_RETURN_STATUS => X_RETURN_STATUS,
2546 X_MSG_COUNT => X_MSG_COUNT,
2547 X_MSG_DATA => X_MSG_DATA);
2548 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
2549 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2550 END IF;
2551 IF p_pa_debug_mode = 'Y' THEN
2552 pa_fp_gen_amount_utils.fp_debug
2553 (p_called_mode => p_called_mode,
2554 p_msg => 'Status after calling
2555 pa_fp_gen_budget_amt_pub.update_res_asg: '
2556 ||x_return_status,
2557 p_module_name => l_module_name,
2558 p_log_level => 5);
2559 END IF;
2560
2561 -- Bug 4549862: REMOVED old code for retaining manually added
2562 -- lines that was already commented out to reduce clutter.
2563
2564 l_proj_res_assgn_id_tab.delete;
2565 l_proj_exp_organization_id_tab.delete;
2566 l_proj_assgn_id_tab.delete;
2567 l_proj_bill_rate_override_tab.delete;
2568 l_proj_bill_rate_cur_ovrd_tab.delete;
2569
2570 SELECT tmp4.TXN_SOURCE_ID,
2571 tmp4.ORGANIZATION_ID,
2572 tmp4.TXN_RESOURCE_ASSIGNMENT_ID,
2573 PA.BILL_RATE_OVERRIDE, -- M-Closeout ER: Bill Rate Override ER
2574 PA.BILL_RATE_CURR_OVERRIDE, -- M-Closeout ER: Bill Rate Override ER
2575 nvl(WB.BILLABLE_CAPITALIZABLE_FLAG, 'N') -- M-Closeout ER: Honor billability flag ER
2576 BULK COLLECT
2577 INTO l_proj_assgn_id_tab,
2578 l_proj_exp_organization_id_tab,
2579 l_proj_res_assgn_id_tab,
2580 l_proj_bill_rate_override_tab, -- M-Closeout ER: Bill Rate Override ER
2581 l_proj_bill_rate_cur_ovrd_tab, -- M-Closeout ER: Bill Rate Override ER
2582 l_proj_billable_flag -- M-Closeout ER: Honor billability flag ER
2583 FROM PA_RES_LIST_MAP_TMP4 tmp4,
2584 PA_PROJECT_ASSIGNMENTS PA,
2585 PA_WORK_TYPES_B WB
2586 WHERE tmp4.txn_source_id = pa.assignment_id
2587 AND WB.WORK_TYPE_ID = PA.WORK_TYPE_ID(+);
2588
2589 --dbms_output.put_line('From tmp4, l_proj_assgn_id_tab:'||l_proj_assgn_id_tab.count
2590 -- ||';l_proj_res_assgn_id_tab.count:'||l_proj_res_assgn_id_tab.count);
2591 IF p_pa_debug_mode = 'Y' THEN
2592 pa_fp_gen_amount_utils.fp_debug
2593 (p_called_mode => p_called_mode,
2594 p_msg => 'From tmp4, l_proj_assgn_id_tab.count:'||l_proj_assgn_id_tab.count
2595 ||';l_proj_res_assgn_id_tab.count:'||l_proj_res_assgn_id_tab.count,
2596 p_module_name => l_module_name,
2597 p_log_level => 5);
2598 END IF;
2599
2600 -- M-closeout: Bill Rate Override ER ------------------------------------------
2601
2602 -- IF it is a COST and REVENUE budget or forecast AND
2603 -- there exist at least 1 project assignment with
2604 -- bill rate override in the whole project, honor bill rate
2605 -- override and call rate API
2606
2607 -- Bug 4549862: Modified IF condition so that the code also proceeds
2608 -- along the Rate API flow when target version is ALL and revenue
2609 -- accrual method is COST.
2610 -- The goal is to populate the PA_FP_ROLLUP_TMP global temp table
2611 -- with generation data and then let control return to the Budget
2612 -- or Forecast wrapper API without propagating data to the budget
2613 -- lines. The GEN_COST_BASED_REVENUE API will expect data in the
2614 -- temp table, which it will use to compute revenue amounts. The
2615 -- cost-based revenue API will propagate data from the temp table
2616 -- to the budget lines. Before the cost-based revenue API is called
2617 -- (e.g. in GEN_COMMITMENT_AMOUNTS), inserts/updates to the budget
2618 -- lines should go to the PA_FP_ROLLUP_TMP table instead so that
2619 -- the cost-based revenue API has all of the necessary data in the
2620 -- temp table when it is called.
2621 -- Note: this info only applies when generating ALL versions from
2622 -- Staffing Plan with revenue accrual method of COST.
2623
2624 IF p_fp_cols_rec.x_version_type = 'ALL' AND
2625 ( l_bill_rate_ovrd_exists_flag = 'Y' OR l_rev_gen_method = 'C' ) THEN
2626
2627 IF p_pa_debug_mode = 'Y' THEN
2628 pa_fp_gen_amount_utils.fp_debug
2629 (p_called_mode => p_called_mode,
2630 p_msg => 'Honoring bill rate override and call Rate API',
2631 p_module_name => l_module_name,
2632 p_log_level => 5);
2633 END IF;
2634
2635 DELETE FROM pa_fp_rollup_tmp;
2636
2637 FOR j IN 1..l_proj_assgn_id_tab.count LOOP
2638 --dbms_output.put_line('before cursor:l_proj_res_assgn_id_tab('||j
2639 -- ||'):'||l_proj_res_assgn_id_tab(j)
2640 -- ||';p_actuals_thru_date:'||p_actuals_thru_date);
2641 IF p_pa_debug_mode = 'Y' THEN
2642 pa_fp_gen_amount_utils.fp_debug
2643 (p_called_mode => p_called_mode,
2644 p_msg => 'before cursor:l_proj_assgn_id_tab('||j
2645 ||'):'||l_proj_assgn_id_tab(j)
2646 ||';p_actuals_thru_date:'||p_actuals_thru_date,
2647 p_module_name => l_module_name,
2648 p_log_level => 5);
2649
2650 END IF;
2651
2652 l_budget_lines_tbl.delete;
2653 l_rt_forecast_item_id_tab.delete;
2654 l_rt_pd_name_tab.delete;
2655 l_rt_start_date_tab.delete;
2656 l_rt_end_date_tab.delete;
2657 l_rt_qty_tab.delete;
2658 l_rt_res_assignment_id_tab.delete;
2659 l_rt_uom_tab.delete;
2660 l_rt_res_class_code_tab.delete;
2661 l_rt_organization_id_tab.delete;
2662 l_rt_job_id_tab.delete;
2663 l_rt_person_id_tab.delete;
2664 l_rt_expenditure_type_tab.delete;
2665 l_rt_non_labor_resource_tab.delete;
2666 l_rt_bom_resource_id_tab.delete;
2667 l_rt_inventory_item_id_tab.delete;
2668 l_rt_item_category_id_tab.delete;
2669 l_rt_mfc_cost_type_id_tab.delete;
2670 l_rt_rate_expenditure_type_tab.delete;
2671 l_rt_rate_based_flag_tab.delete;
2672 l_rt_rate_exp_org_id_tab.delete;
2673 l_rt_res_format_id_tab.delete;
2674
2675 -- 0. Execute SQLs (FCST_RATE_PA, FCST_RATE_GL, FCST_RATE_NONE cursors) to
2676 -- determine the qty and rate API parameters per period
2677 -- 1. Get PA_PLAN_REVENUE.GET_PLANNING_RATES API IN parameter values
2678
2679 IF p_FP_COLS_REC.X_TIME_PHASED_CODE = 'P' THEN
2680 OPEN FCST_RATE_PA(l_proj_assgn_id_tab(j),p_actuals_thru_date,l_proj_exp_organization_id_tab(j), l_org_id);
2681 FETCH FCST_RATE_PA BULK COLLECT INTO
2682 l_rt_exp_org_id_tab,
2683 l_rt_exp_organization_id_tab,
2684 l_rt_pd_name_tab,
2685 l_rt_start_date_tab,
2686 l_rt_end_date_tab,
2687 l_rt_qty_tab,
2688 l_rt_forecast_item_id_tab,
2689 l_rt_res_assignment_id_tab,
2690 l_rt_uom_tab,
2691 l_rt_res_class_code_tab,
2692 l_rt_organization_id_tab,
2693 l_rt_job_id_tab,
2694 l_rt_person_id_tab,
2695 l_rt_expenditure_type_tab,
2696 l_rt_non_labor_resource_tab,
2697 l_rt_bom_resource_id_tab,
2698 l_rt_inventory_item_id_tab,
2699 l_rt_item_category_id_tab,
2700 l_rt_mfc_cost_type_id_tab,
2701 l_rt_rate_expenditure_type_tab,
2702 l_rt_rate_based_flag_tab,
2703 l_rt_rate_exp_org_id_tab,
2704 l_rt_res_format_id_tab,
2705 l_rt_res_list_member_id_tab,
2706 l_rt_resource_id_tab,
2707 l_rt_resource_list_id_tab,
2708 l_rt_alias_tab;
2709 CLOSE FCST_RATE_PA;
2710
2711 ELSIF p_FP_COLS_REC.X_TIME_PHASED_CODE = 'G' THEN
2712 OPEN FCST_RATE_GL(l_proj_assgn_id_tab(j),p_actuals_thru_date,l_proj_exp_organization_id_tab(j));
2713 FETCH FCST_RATE_GL BULK COLLECT INTO
2714 l_rt_exp_org_id_tab,
2715 l_rt_exp_organization_id_tab,
2716 l_rt_pd_name_tab,
2717 l_rt_start_date_tab,
2718 l_rt_end_date_tab,
2719 l_rt_qty_tab,
2720 l_rt_forecast_item_id_tab,
2721 l_rt_res_assignment_id_tab,
2722 l_rt_uom_tab,
2723 l_rt_res_class_code_tab,
2724 l_rt_organization_id_tab,
2725 l_rt_job_id_tab,
2726 l_rt_person_id_tab,
2727 l_rt_expenditure_type_tab,
2728 l_rt_non_labor_resource_tab,
2729 l_rt_bom_resource_id_tab,
2730 l_rt_inventory_item_id_tab,
2731 l_rt_item_category_id_tab,
2732 l_rt_mfc_cost_type_id_tab,
2733 l_rt_rate_expenditure_type_tab,
2734 l_rt_rate_based_flag_tab,
2735 l_rt_rate_exp_org_id_tab,
2736 l_rt_res_format_id_tab,
2737 l_rt_res_list_member_id_tab,
2738 l_rt_resource_id_tab,
2739 l_rt_resource_list_id_tab,
2740 l_rt_alias_tab;
2741 CLOSE FCST_RATE_GL;
2742
2743 ELSE
2744 OPEN FCST_RATE_NONE(l_proj_assgn_id_tab(j),p_actuals_thru_date,l_proj_exp_organization_id_tab(j));
2745 FETCH FCST_RATE_NONE BULK COLLECT INTO
2746 l_rt_exp_org_id_tab,
2747 l_rt_exp_organization_id_tab,
2748 l_rt_qty_tab,
2749 l_rt_forecast_item_id_tab,
2750 l_rt_pd_name_tab,
2751 l_rt_start_date_tab,
2752 l_rt_end_date_tab,
2753 l_rt_res_assignment_id_tab,
2754 l_rt_uom_tab,
2755 l_rt_res_class_code_tab,
2756 l_rt_organization_id_tab,
2757 l_rt_job_id_tab,
2758 l_rt_person_id_tab,
2759 l_rt_expenditure_type_tab,
2760 l_rt_non_labor_resource_tab,
2761 l_rt_bom_resource_id_tab,
2762 l_rt_inventory_item_id_tab,
2763 l_rt_item_category_id_tab,
2764 l_rt_mfc_cost_type_id_tab,
2765 l_rt_rate_expenditure_type_tab,
2766 l_rt_rate_based_flag_tab,
2767 l_rt_rate_exp_org_id_tab,
2768 l_rt_res_format_id_tab,
2769 l_rt_res_list_member_id_tab,
2770 l_rt_resource_id_tab,
2771 l_rt_resource_list_id_tab,
2772 l_rt_alias_tab;
2773 CLOSE FCST_RATE_NONE;
2774
2775 END IF;
2776
2777 -- 2. Call PA_PLAN_REVENUE.GET_PLANNING_RATES API based on periodic data
2778 -- in PA/GL periods. Need to also pass in billability flag. (Project
2779 -- assignments with different bill rate override currency are mapped
2780 -- to different budget lines.)
2781 FOR k in 1..l_rt_start_date_tab.COUNT LOOP
2782
2783 IF p_pa_debug_mode = 'Y' THEN
2784 pa_fp_gen_amount_utils.fp_debug
2785 (p_called_mode => p_called_mode,
2786 p_msg => 'inside FOR k in 1..l_rt_start_date_tab.COUNT LOOP ('||k
2787 ||'):'||l_rt_start_date_tab(k),
2788 p_module_name => l_module_name,
2789 p_log_level => 5);
2790 END IF;
2791
2792 pa_cost.Override_exp_organization
2793 (P_item_date => l_rt_start_date_tab(k)
2794 ,P_person_id => l_rt_person_id_tab(k)
2795 ,P_project_id => p_project_id
2796 ,P_incurred_by_organz_id => l_rt_organization_id_tab(k)
2797 ,P_Expenditure_type => NVL(l_rt_expenditure_type_tab(k),l_rt_rate_expenditure_type_tab(k))
2798 ,X_overr_to_organization_id => l_override_organization_id
2799 ,X_return_status => l_return_status
2800 ,X_msg_count => x_msg_count
2801 ,X_msg_data => x_msg_data);
2802
2803 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2804 x_return_status := l_return_status;
2805 END IF;
2806
2807 BEGIN
2808
2809 IF l_proj_bill_rate_cur_ovrd_tab(j) IS NOT NULL THEN
2810 l_txn_currency_code := l_proj_bill_rate_cur_ovrd_tab(j);
2811 ELSE
2812 l_txn_currency_code := rate_rec.project_currency_code;
2813 END IF;
2814
2815 IF p_pa_debug_mode = 'Y' THEN
2816
2817 pa_fp_gen_amount_utils.fp_debug
2818 (p_called_mode => p_called_mode,
2819 p_msg => 'BEFORE calling pa_plan_revenue.Get_planning_Rates',
2820 p_module_name => l_module_name,
2821 p_log_level => 5);
2822 pa_fp_gen_amount_utils.fp_debug
2823 (p_called_mode => p_called_mode,
2824 p_msg => 'p_person_id:'||l_rt_person_id_tab(k),
2825 p_module_name => l_module_name,
2826 p_log_level => 5);
2827 pa_fp_gen_amount_utils.fp_debug
2828 (p_called_mode => p_called_mode,
2829 p_msg => 'p_job_id:'||l_rt_job_id_tab(k),
2830 p_module_name => l_module_name,
2831 p_log_level => 5);
2832 pa_fp_gen_amount_utils.fp_debug
2833 (p_called_mode => p_called_mode,
2834 p_msg => 'p_bill_job_grp_id:'||rate_rec.bill_job_group_id,
2835 p_module_name => l_module_name,
2836 p_log_level => 5);
2837 pa_fp_gen_amount_utils.fp_debug
2838 (p_called_mode => p_called_mode,
2839 p_msg => 'p_resource_class:'||l_rt_res_class_code_tab(k),
2840 p_module_name => l_module_name,
2841 p_log_level => 5);
2842 END IF;
2843
2844 -- Bug 4548733: Uncommented the p_billability_flag input parameter,
2845 -- passing it l_proj_billable_flag(j) as the value.
2846
2847 pa_plan_revenue.Get_planning_Rates
2848 (
2849 p_project_id => p_project_id
2850 ,p_task_id => 0
2851 ,p_top_task_id => NULL
2852 ,p_person_id => l_rt_person_id_tab(k)
2853 ,p_job_id => l_rt_job_id_tab(k)
2854 ,p_bill_job_grp_id => rate_rec.bill_job_group_id
2855 ,p_resource_class => l_rt_res_class_code_tab(k)
2856 ,p_planning_resource_format => l_rt_res_format_id_tab(k)
2857 ,p_use_planning_rates_flag => NVL(rate_rec.use_planning_rates_flag, 'N')
2858 ,p_rate_based_flag => l_rt_rate_based_flag_tab(k)
2859 ,p_uom => l_rt_uom_tab(k)
2860 ,p_system_linkage => NULL
2861 ,p_project_organz_id => rate_rec.carrying_out_organization_id
2862 ,p_rev_res_class_rate_sch_id => rate_rec.res_class_bill_rate_sch_id
2863 ,p_cost_res_class_rate_sch_id => rate_rec.res_class_raw_cost_sch_id
2864 ,p_rev_task_nl_rate_sch_id => NULL
2865 ,p_rev_proj_nl_rate_sch_id => rate_rec.non_lab_std_bill_rt_sch_id
2866 ,p_rev_job_rate_sch_id => rate_rec.job_bill_rate_schedule_id
2867 ,p_rev_emp_rate_sch_id => rate_rec.emp_bill_rate_schedule_id
2868 ,p_plan_rev_job_rate_sch_id => rate_rec.rev_job_rate_sch_id
2869 ,p_plan_cost_job_rate_sch_id => rate_rec.cost_job_rate_sch_id
2870 ,p_plan_rev_emp_rate_sch_id => rate_rec.rev_emp_rate_sch_id
2871 ,p_plan_cost_emp_rate_sch_id => rate_rec.cost_emp_rate_sch_id
2872 ,p_plan_rev_nlr_rate_sch_id => rate_rec.rev_non_labor_res_rate_sch_id
2873 ,p_plan_cost_nlr_rate_sch_id => rate_rec.cost_non_labor_res_rate_sch_id
2874 ,p_plan_burden_cost_sch_id => rate_rec.cost_burden_rate_sch_id
2875 ,p_calculate_mode => l_calculate_mode
2876 ,p_mcb_flag => rate_rec.multi_currency_billing_flag
2877 ,p_cost_rate_multiplier => l_cost_rate_multiplier
2878 ,p_bill_rate_multiplier => l_bill_rate_multiplier
2879 ,p_quantity => l_rt_qty_tab(k)
2880 ,p_item_date => l_rt_start_date_tab(k)
2881 ,p_cost_sch_type => l_cost_sch_type
2882 ,p_labor_sch_type => rate_rec.labor_sch_type
2883 ,p_non_labor_sch_type => rate_rec.non_labor_sch_type
2884 ,p_labor_schdl_discnt => NULL
2885 ,p_labor_bill_rate_org_id => rate_rec.labor_bill_rate_org_id
2886 ,p_labor_std_bill_rate_schdl => NULL
2887 ,p_labor_schdl_fixed_date => NULL
2888 ,p_assignment_id => l_rt_res_assignment_id_tab(k)
2889 ,p_project_org_id => rate_rec.org_id
2890 ,p_project_type => rate_rec.project_type
2891 ,p_expenditure_type => NVL(l_rt_expenditure_type_tab(k),l_rt_rate_expenditure_type_tab(k))
2892 ,p_non_labor_resource => l_rt_non_labor_resource_tab(k)
2893 ,p_incurred_by_organz_id => l_rt_organization_id_tab(k)
2894 ,p_override_to_organz_id => l_override_organization_id
2895 ,p_expenditure_org_id => NVL(l_rt_rate_exp_org_id_tab(k),rate_rec.org_id)
2896 ,p_assignment_precedes_task => rate_rec.assign_precedes_task
2897 ,p_planning_transaction_id => NULL
2898 ,p_task_bill_rate_org_id => NULL
2899 ,p_project_bill_rate_org_id => rate_rec.non_labor_bill_rate_org_id
2900 ,p_nlr_organization_id => l_rt_organization_id_tab(k)
2901 ,p_project_sch_date => rate_rec.non_labor_schedule_fixed_date
2902 ,p_task_sch_date => NULL
2903 ,p_project_sch_discount => rate_rec.non_labor_schedule_discount
2904 ,p_task_sch_discount => NULL
2905 ,p_inventory_item_id => l_rt_item_category_id_tab(k)
2906 ,p_BOM_resource_Id => l_rt_bom_resource_id_tab(k)
2907 ,P_mfc_cost_type_id => l_rt_mfc_cost_type_id_tab(k)
2908 ,P_item_category_id => l_rt_item_category_id_tab(k)
2909 ,p_mfc_cost_source => l_mfc_cost_source
2910 ,p_cost_override_rate => NULL
2911 ,p_revenue_override_rate => l_proj_bill_rate_override_tab(j)
2912 ,p_override_burden_cost_rate => NULL
2913 ,p_override_currency_code => l_proj_bill_rate_cur_ovrd_tab(j)
2914 ,p_txn_currency_code => l_txn_currency_code
2915 ,p_raw_cost => NULL
2916 ,p_burden_cost => NULL
2917 ,p_raw_revenue => NULL
2918 ,p_billability_flag => l_proj_billable_flag(j) /* Bug 4548733 */
2919 ,x_bill_rate => x_bill_rate
2920 ,x_cost_rate => x_cost_rate
2921 ,x_burden_cost_rate => x_burden_cost_rate
2922 ,x_burden_multiplier => x_burden_multiplier
2923 ,x_raw_cost => x_raw_cost
2924 ,x_burden_cost => x_burden_cost
2925 ,x_raw_revenue => x_raw_revenue
2926 ,x_bill_markup_percentage => x_bill_markup_percentage
2927 ,x_cost_txn_curr_code => x_cost_txn_curr_code
2928 ,x_rev_txn_curr_code => x_rev_txn_curr_code
2929 ,x_raw_cost_rejection_code => x_raw_cost_rejection_code
2930 ,x_burden_cost_rejection_code => x_burden_cost_rejection_code
2931 ,x_revenue_rejection_code => x_revenue_rejection_code
2932 ,x_cost_ind_compiled_set_id => x_cost_ind_compiled_set_id
2933 ,x_return_status => l_return_status
2934 ,x_msg_data => x_msg_data
2935 ,x_msg_count => x_msg_count
2936 );
2937
2938
2939 IF l_return_status = 'U' THEN
2940 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2941 END IF;
2942
2943 EXCEPTION
2944 WHEN OTHERS THEN
2945
2946 x_raw_cost_rejection_code := SUBSTR('PA_FP_ERROR_FROM_RATE_API_CALL',1,30);
2947 x_burden_cost_rejection_code := SUBSTR(SQLERRM,1,30);
2948 x_revenue_rejection_code := SUBSTR('PA_FP_ERROR_FROM_RATE_API_CALL',1,30);
2949 IF l_return_status = 'U' THEN
2950 x_return_status := l_return_status;
2951 pa_utils.add_message
2952 ( p_app_short_name => 'PA'
2953 ,p_msg_name => 'PA_FP_ERROR_FROM_RATE_API_CALL'
2954 ,p_token1 => 'G_PROJECT_NAME'
2955 ,p_value1 => rate_rec.project_name
2956 ,p_token2 => 'G_TASK_NAME'
2957 ,p_value2 => null
2958 ,p_token3 => 'G_RESOURCE_NAME'
2959 ,p_value3 => l_rt_alias_tab(k)
2960 ,p_token4 => 'TO_CHAR(L_TXN_CURRENCY_CODE)'
2961 ,p_value4 => l_txn_currency_code
2962 ,p_token5 => 'TO_CHAR(L_BUDGET_LINES_START_DATE)'
2963 ,p_value5 => TO_CHAR(l_rt_start_date_tab(k)));
2964 END IF;
2965
2966 x_return_status := l_return_status;
2967 RAISE;
2968 END;
2969
2970 IF p_pa_debug_mode = 'Y' THEN
2971 pa_fp_gen_amount_utils.fp_debug
2972 (p_called_mode => p_called_mode,
2973 p_msg => 'calling client extensions',
2974 p_module_name => l_module_name,
2975 p_log_level => 5);
2976 END IF;
2977
2978 -- 2.5. Call client extension
2979
2980 -- Bug 4549862: Changed IF condition so that l_calculate_mode is
2981 -- checked instead of the target version type. We should only call
2982 -- the cost client extensions if costs are being generated from
2983 -- source cost amounts, which is the case when l_calculate_mode
2984 -- is either 'COST_REVENUE' or 'COST'.
2985
2986 IF l_calculate_mode IN ('COST_REVENUE', 'COST') THEN
2987
2988 l_ce_raw_cost := x_raw_cost;
2989
2990 pa_client_extn_budget.calc_raw_cost
2991 ( x_budget_version_id => p_budget_version_id
2992 ,x_project_id => p_project_id
2993 ,x_task_id => 0
2994 ,x_resource_list_member_id => l_rt_res_list_member_id_tab(k)
2995 ,x_resource_list_id => l_rt_resource_list_id_tab(k)
2996 ,x_resource_id => l_rt_resource_id_tab(k)
2997 ,x_start_date => l_rt_start_date_tab(k)
2998 ,x_end_date => l_rt_end_date_tab(k)
2999 ,x_period_name => l_rt_pd_name_tab(k)
3000 ,x_quantity => l_rt_qty_tab(k)
3001 ,x_raw_cost => l_ce_raw_cost -- IN OUT
3002 ,x_pm_product_code => NULL
3003 ,x_txn_currency_code => x_cost_txn_curr_code
3004 ,x_error_code => l_return_status
3005 ,x_error_message => x_msg_data
3006 );
3007
3008 IF l_return_status <> '0' THEN
3009 x_return_status := FND_API.G_RET_STS_ERROR;
3010 END IF;
3011
3012 IF NVL(l_ce_raw_cost,0) <> NVL(x_raw_cost,0) THEN
3013 x_raw_cost := pa_currency.round_trans_currency_amt1(x_raw_cost,x_cost_txn_curr_code);
3014 END IF;
3015
3016 l_ce_burdened_cost := x_burden_cost;
3017
3018 -- Calling client extn for burdened amts
3019 pa_client_extn_budget.Calc_Burdened_Cost
3020 ( x_budget_version_id => p_budget_version_id
3021 ,x_project_id => p_project_id
3022 ,x_task_id => 0
3023 ,x_resource_list_member_id => l_rt_res_list_member_id_tab(k)
3024 ,x_resource_list_id => l_rt_resource_list_id_tab(k)
3025 ,x_resource_id => l_rt_resource_id_tab(k)
3026 ,x_start_date => l_rt_start_date_tab(k)
3027 ,x_end_date => l_rt_end_date_tab(k)
3028 ,x_period_name => l_rt_pd_name_tab(k)
3029 ,x_quantity => l_rt_qty_tab(k)
3030 ,x_raw_cost => x_raw_cost
3031 ,x_burdened_cost => l_ce_burdened_cost -- IN OUT
3032 ,x_pm_product_code => NULL
3033 ,x_txn_currency_code => x_cost_txn_curr_code
3034 ,x_error_code => l_return_status
3035 ,x_error_message => x_msg_data
3036 );
3037
3038 IF l_return_status <> '0' THEN
3039 x_return_status := FND_API.G_RET_STS_ERROR;
3040 END IF;
3041
3042 IF NVL(l_ce_burdened_cost,0) <> NVL(x_burden_cost,0) THEN
3043 x_burden_cost := pa_currency.round_trans_currency_amt1(l_ce_burdened_cost,x_cost_txn_curr_code);
3044 END IF;
3045
3046 END IF ; -- IF p_fp_cols_rec.x_version_type IN ('ALL','COST') THEN
3047
3048 -- Bug 4549862: Changed IF condition so that l_calculate_mode is
3049 -- checked instead of the target version type. We should only call
3050 -- the revenue client extension if revenue is being generated from
3051 -- source revenue amounts, which is the case when l_calculate_mode
3052 -- is either 'COST_REVENUE' or 'REVENUE'.
3053
3054 IF l_calculate_mode IN ('COST_REVENUE', 'REVENUE') THEN
3055
3056 l_ce_revenue := x_raw_revenue;
3057
3058 -- Calling clinet extn for revenue amts
3059 pa_client_extn_budget.calc_revenue
3060 ( x_budget_version_id => p_budget_version_id
3061 ,x_project_id => p_project_id
3062 ,x_task_id => 0
3063 ,x_resource_list_member_id => l_rt_res_list_member_id_tab(k)
3064 ,x_resource_list_id => l_rt_resource_list_id_tab(k)
3065 ,x_resource_id => l_rt_resource_id_tab(k)
3066 ,x_start_date => l_rt_start_date_tab(k)
3067 ,x_end_date => l_rt_end_date_tab(k)
3068 ,x_period_name => l_rt_pd_name_tab(k)
3069 ,x_quantity => l_rt_qty_tab(k)
3070 ,x_raw_cost => x_raw_cost
3071 ,x_burdened_cost => x_burden_cost
3072 ,x_revenue => l_ce_revenue -- IN OUT
3073 ,x_pm_product_code => NULL
3074 ,x_txn_currency_code => x_rev_txn_curr_code
3075 ,x_error_code => l_return_status
3076 ,x_error_message => x_msg_data
3077 );
3078 IF l_return_status <> '0' THEN
3079 x_return_status := FND_API.G_RET_STS_ERROR;
3080 END IF;
3081
3082 IF NVL(l_ce_revenue,0) <> NVL(x_raw_revenue,0) THEN
3083 x_raw_revenue := pa_currency.round_trans_currency_amt1(l_ce_revenue,x_rev_txn_curr_code);
3084 END IF;
3085
3086 END IF; -- IF p_fp_cols_rec.x_version_type IN ('ALL','REVENUE') THEN
3087
3088 -- Bug 4530753: Previously, local variables were passed to the
3089 -- pa_multi_currency_txn.get_currency_amounts API as IN OUT
3090 -- parameters but never modified by this procedure. The multi-
3091 -- currency API seems to use the given EI date only when the
3092 -- other rate dates are null. Thus, to get the correct periodic
3093 -- rates, we should null out the following local variables:
3094 -- x_dummy_rate_date, x_dummy_rate_type, x_dummy_exch_rate, x_dummy_cost,
3095 -- l_Final_txn_rate_type, l_Final_txn_rate_date, and l_Final_txn_exch_rate.
3096
3097 x_dummy_rate_date := NULL;
3098 x_dummy_rate_type := NULL;
3099 x_dummy_exch_rate := NULL;
3100 x_dummy_cost := NULL;
3101 l_Final_txn_rate_type := NULL;
3102 l_Final_txn_rate_date := NULL;
3103 l_Final_txn_exch_rate := NULL;
3104
3105 -- 3. Convert amounts
3106 -- a. For Approved Revenue, final currency = PFC
3107 -- b. If multi-currency is disabled, final currency = PC
3108 -- c. Otherwise, rev currency should be converted into cost currency (from Rate API).
3109 l_insert_Txn_Currency_Code := l_Final_Txn_Currency_Code; -- Bug 4615589
3110
3111 IF l_Final_Txn_Currency_Code IS NOT NULL THEN
3112
3113 -- Bug 4549862: Modified IF condition so that l_calculate_mode is
3114 -- checked in addition to x_cost_txn_curr_code. We should only call
3115 -- the currency conversion API for cost amounts if costs are
3116 -- being generated from source cost amounts, which is the case
3117 -- when l_calculate_mode is either 'COST_REVENUE' or 'COST'.
3118
3119 IF x_cost_txn_curr_code <> l_Final_Txn_Currency_Code AND
3120 l_calculate_mode IN ('COST_REVENUE', 'COST') THEN
3121
3122 IF p_pa_debug_mode = 'Y' THEN
3123 pa_fp_gen_amount_utils.fp_debug
3124 (p_called_mode => p_called_mode,
3125 p_msg => 'convert cost from '|| x_cost_txn_curr_code ||
3126 ' to '||l_Final_Txn_Currency_Code,
3127 p_module_name => l_module_name,
3128 p_log_level => 5);
3129 END IF;
3130
3131 pa_multi_currency_txn.get_currency_amounts (
3132 p_project_id => p_project_id
3133 ,p_exp_org_id => NVL(l_rt_rate_exp_org_id_tab(k),rate_rec.org_id)
3134 ,p_calling_module => 'WORKPLAN'
3135 ,p_task_id => 0
3136 ,p_ei_date => l_rt_start_date_tab(k)
3137 ,p_denom_raw_cost => 1
3138 ,p_denom_curr_code => x_cost_txn_curr_code -- FROM currency code
3139 ,p_acct_curr_code => x_cost_txn_curr_code
3140 ,p_accounted_flag => 'N'
3141 ,p_acct_rate_date => x_dummy_rate_date
3142 ,p_acct_rate_type => x_dummy_rate_type
3143 ,p_acct_exch_rate => x_dummy_exch_rate
3144 ,p_acct_raw_cost => x_dummy_cost
3145 ,p_project_curr_code => l_Final_Txn_Currency_Code -- TO currency code
3146 ,p_project_rate_type => l_Final_txn_rate_type
3147 ,p_project_rate_date => l_Final_txn_rate_date
3148 ,p_project_exch_rate => l_Final_txn_exch_rate
3149 ,p_project_raw_cost => x_dummy_cost
3150 ,p_projfunc_curr_code => l_Final_Txn_Currency_Code -- TO currency code
3151 ,p_projfunc_cost_rate_type => x_dummy_rate_type
3152 ,p_projfunc_cost_rate_date => x_dummy_rate_date
3153 ,p_projfunc_cost_exch_rate => x_dummy_exch_rate
3154 ,p_projfunc_raw_cost => x_dummy_cost
3155 ,p_system_linkage => 'NER'
3156 ,p_structure_version_id => NULL -- always NULL for finplan
3157 ,p_status => l_status
3158 ,p_stage => l_stage) ;
3159
3160
3161 IF l_final_txn_exch_rate IS NULL OR l_status IS NOT NULL THEN
3162
3163 x_return_status := FND_API.G_RET_STS_ERROR;
3164
3165 pa_utils.add_message
3166 ( p_app_short_name => 'PA'
3167 ,p_msg_name => 'PA_FP_PROJ_NO_TXNCONVRATE'
3168 ,p_token1 => 'G_PROJECT_NAME'
3169 ,p_value1 => rate_rec.project_name
3170 ,p_token2 => 'FROMCURRENCY'
3171 ,p_value2 => x_cost_txn_curr_code
3172 ,p_token3 => 'TOCURRENCY'
3173 ,p_value3 => l_Final_Txn_Currency_Code
3174 ,p_token4 => 'CONVERSION_TYPE'
3175 ,p_value4 => l_Final_txn_rate_type
3176 ,p_token5 => 'CONVERSION_DATE'
3177 ,p_value5 => l_Final_txn_rate_date
3178 );
3179
3180 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3181
3182 END IF; -- IF l_final_txn_exch_rate IS NULL OR l_status IS NOT NULL THEN
3183
3184 IF NVL(x_raw_cost,0) <> 0 THEN
3185 x_raw_cost := x_raw_cost * l_final_txn_exch_rate;
3186 x_raw_cost := pa_currency.round_trans_currency_amt1(x_raw_cost,l_final_txn_currency_code);
3187 END IF;
3188 IF NVL(x_burden_cost,0) <> 0 THEN
3189 x_burden_cost := x_burden_cost * l_final_txn_exch_rate;
3190 x_burden_cost := pa_currency.round_trans_currency_amt1(x_burden_cost,l_final_txn_currency_code);
3191 END IF;
3192
3193
3194 END IF; -- IF x_cost_txn_curr_code <> l_Final_Txn_Currency_Code THEN
3195
3196 -- Bug 4549862: Modified IF condition so that l_calculate_mode is
3197 -- checked in addition to x_rev_txn_curr_code. We should only call
3198 -- the currency conversion API for revenue amounts if revenue is
3199 -- being generated from source revenue amounts, which is the case
3200 -- when l_calculate_mode is either 'COST_REVENUE' or 'REVENUE'.
3201
3202 IF x_rev_txn_curr_code <> l_Final_Txn_Currency_Code AND
3203 l_calculate_mode IN ('COST_REVENUE', 'REVENUE') THEN
3204
3205 IF p_pa_debug_mode = 'Y' THEN
3206 pa_fp_gen_amount_utils.fp_debug
3207 (p_called_mode => p_called_mode,
3208 p_msg => 'convert revenue from '|| x_rev_txn_curr_code ||
3209 ' to '||l_Final_Txn_Currency_Code,
3210 p_module_name => l_module_name,
3211 p_log_level => 5);
3212 END IF;
3213
3214 pa_multi_currency_txn.get_currency_amounts (
3215 p_project_id => p_project_id
3216 ,p_exp_org_id => NVL(l_rt_rate_exp_org_id_tab(k),rate_rec.org_id)
3217 ,p_calling_module => 'WORKPLAN'
3218 ,p_task_id => 0
3219 ,p_ei_date => l_rt_start_date_tab(k)
3220 ,p_denom_raw_cost => 1
3221 ,p_denom_curr_code => x_rev_txn_curr_code -- FROM currency code
3222 ,p_acct_curr_code => x_rev_txn_curr_code
3223 ,p_accounted_flag => 'N'
3224 ,p_acct_rate_date => x_dummy_rate_date
3225 ,p_acct_rate_type => x_dummy_rate_type
3226 ,p_acct_exch_rate => x_dummy_exch_rate
3227 ,p_acct_raw_cost => x_dummy_cost
3228 ,p_project_curr_code => l_Final_Txn_Currency_Code -- TO currency code
3229 ,p_project_rate_type => l_Final_txn_rate_type
3230 ,p_project_rate_date => l_Final_txn_rate_date
3231 ,p_project_exch_rate => l_Final_txn_exch_rate
3232 ,p_project_raw_cost => x_dummy_cost
3233 ,p_projfunc_curr_code => l_Final_Txn_Currency_Code -- TO currency code
3234 ,p_projfunc_cost_rate_type => x_dummy_rate_type
3235 ,p_projfunc_cost_rate_date => x_dummy_rate_date
3236 ,p_projfunc_cost_exch_rate => x_dummy_exch_rate
3237 ,p_projfunc_raw_cost => x_dummy_cost
3238 ,p_system_linkage => 'NER'
3239 ,p_structure_version_id => NULL -- always NULL for finplan
3240 ,p_status => l_status
3241 ,p_stage => l_stage) ;
3242
3243
3244 IF l_final_txn_exch_rate IS NULL OR l_status IS NOT NULL THEN
3245
3246 x_return_status := FND_API.G_RET_STS_ERROR;
3247
3248 pa_utils.add_message
3249 ( p_app_short_name => 'PA'
3250 ,p_msg_name => 'PA_FP_PROJ_NO_TXNCONVRATE'
3251 ,p_token1 => 'G_PROJECT_NAME'
3252 ,p_value1 => rate_rec.project_name
3253 ,p_token2 => 'FROMCURRENCY'
3254 ,p_value2 =>x_rev_txn_curr_code
3255 ,p_token3 => 'TOCURRENCY'
3256 ,p_value3 => l_Final_Txn_Currency_Code
3257 ,p_token4 => 'CONVERSION_TYPE'
3258 ,p_value4 => l_Final_txn_rate_type
3259 ,p_token5 => 'CONVERSION_DATE'
3260 ,p_value5 => l_Final_txn_rate_date
3261 );
3262
3263 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3264
3265 END IF; -- IF l_final_txn_exch_rate IS NULL OR l_status IS NOT NULL THEN
3266
3267 IF NVL(x_raw_revenue,0) <> 0 THEN
3268 x_raw_revenue := x_raw_revenue * l_final_txn_exch_rate;
3269 x_raw_revenue := pa_currency.round_trans_currency_amt1(x_raw_revenue,l_final_txn_currency_code);
3270 END IF;
3271
3272 END IF; -- IF x_rev_txn_curr_code <> <> l_Final_Txn_Currency_Code THEN
3273
3274 -- Bug 4549862: Modified ELSIF condition so that l_calculate_mode
3275 -- also checked. We should only call the currency conversion API
3276 -- for revenue amounts if revenue is being generated from source
3277 -- revenue amounts, which is the case when l_calculate_mode is
3278 -- either 'COST_REVENUE' or 'REVENUE'.
3279
3280 ELSIF x_cost_txn_curr_code <> x_rev_txn_curr_code AND
3281 l_calculate_mode IN ('COST_REVENUE', 'REVENUE') THEN
3282
3283 l_insert_Txn_Currency_Code := x_cost_txn_curr_code; -- Bug 4615589
3284
3285 IF p_pa_debug_mode = 'Y' THEN
3286 pa_fp_gen_amount_utils.fp_debug
3287 (p_called_mode => p_called_mode,
3288 p_msg => 'cost cur <> rev cur, convert revenue from '|| x_rev_txn_curr_code ||
3289 ' to '||l_insert_Txn_Currency_Code, -- Bug 4615589
3290 p_module_name => l_module_name,
3291 p_log_level => 5);
3292 END IF;
3293
3294 pa_multi_currency_txn.get_currency_amounts (
3295 p_project_id => p_project_id
3296 ,p_exp_org_id => NVL(l_rt_rate_exp_org_id_tab(k),rate_rec.org_id)
3297 ,p_calling_module => 'WORKPLAN'
3298 ,p_task_id => 0
3299 ,p_ei_date => l_rt_start_date_tab(k)
3300 ,p_denom_raw_cost => 1
3301 ,p_denom_curr_code => x_rev_txn_curr_code -- FROM currency code
3302 ,p_acct_curr_code => x_rev_txn_curr_code
3303 ,p_accounted_flag => 'N'
3304 ,p_acct_rate_date => x_dummy_rate_date
3305 ,p_acct_rate_type => x_dummy_rate_type
3306 ,p_acct_exch_rate => x_dummy_exch_rate
3307 ,p_acct_raw_cost => x_dummy_cost
3308 ,p_project_curr_code => l_insert_Txn_Currency_Code -- Bug 4615589 TO currency code
3309 ,p_project_rate_type => l_Final_txn_rate_type
3310 ,p_project_rate_date => l_Final_txn_rate_date
3311 ,p_project_exch_rate => l_Final_txn_exch_rate
3312 ,p_project_raw_cost => x_dummy_cost
3313 ,p_projfunc_curr_code => x_rev_txn_curr_code -- 4615656: Should convert based on PC rate type
3314 ,p_projfunc_cost_rate_type => x_dummy_rate_type
3315 ,p_projfunc_cost_rate_date => x_dummy_rate_date
3316 ,p_projfunc_cost_exch_rate => x_dummy_exch_rate
3317 ,p_projfunc_raw_cost => x_dummy_cost
3318 ,p_system_linkage => 'NER'
3319 ,p_structure_version_id => NULL -- always NULL for finplan
3320 ,p_status => l_status
3321 ,p_stage => l_stage) ;
3322
3323
3324 IF l_final_txn_exch_rate IS NULL OR l_status IS NOT NULL THEN
3325
3326 x_return_status := FND_API.G_RET_STS_ERROR;
3327
3328 pa_utils.add_message
3329 ( p_app_short_name => 'PA'
3330 ,p_msg_name => 'PA_FP_PROJ_NO_TXNCONVRATE'
3331 ,p_token1 => 'G_PROJECT_NAME'
3332 ,p_value1 => rate_rec.project_name
3333 ,p_token2 => 'FROMCURRENCY'
3334 ,p_value2 => x_rev_txn_curr_code
3335 ,p_token3 => 'TOCURRENCY'
3336 ,p_value3 => l_insert_Txn_Currency_Code -- Bug 4615589
3337 ,p_token4 => 'CONVERSION_TYPE'
3338 ,p_value4 => l_Final_txn_rate_type
3339 ,p_token5 => 'CONVERSION_DATE'
3340 ,p_value5 => l_Final_txn_rate_date
3341 );
3342
3343 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3344
3345 END IF; -- IF l_final_txn_exch_rate IS NULL OR l_status IS NOT NULL THEN
3346
3347 IF NVL(x_raw_revenue,0) <> 0 THEN
3348 x_raw_revenue := x_raw_revenue * l_final_txn_exch_rate;
3349 x_raw_revenue := pa_currency.round_trans_currency_amt1(x_raw_revenue,l_insert_Txn_Currency_Code); -- Bug 4615589
3350 END IF;
3351
3352 ELSE
3353 l_insert_Txn_Currency_Code := x_cost_txn_curr_code; -- Bug 4615589
3354
3355 END IF; -- ELSIF x_cost_txn_curr_code <> x_rev_txn_curr_code THEN
3356
3357 IF p_pa_debug_mode = 'Y' THEN
3358 pa_fp_gen_amount_utils.fp_debug
3359 (p_called_mode => p_called_mode,
3360 p_msg => 'Populate temporary table (pa_fp_rollup_tmp) with rates and rejection code',
3361 p_module_name => l_module_name,
3362 p_log_level => 5);
3363 pa_fp_gen_amount_utils.fp_debug
3364 (p_called_mode => p_called_mode,
3365 p_msg => 'resource assignment id:'||l_rt_res_assignment_id_tab(k),
3366 p_module_name => l_module_name,
3367 p_log_level => 5);
3368 pa_fp_gen_amount_utils.fp_debug
3369 (p_called_mode => p_called_mode,
3370 p_msg => 'start date:'||l_rt_start_date_tab(k),
3371 p_module_name => l_module_name,
3372 p_log_level => 5);
3373 pa_fp_gen_amount_utils.fp_debug
3374 (p_called_mode => p_called_mode,
3375 p_msg => 'txn currency code:'||l_insert_Txn_Currency_Code,
3376 p_module_name => l_module_name,
3377 p_log_level => 5);
3378 END IF;
3379
3380 -- 5. Populate temporary table (pa_fp_rollup_tmp) with rates and rejection code
3381
3382 -- Bug 4549862: Increment counter to a new unique id.
3383 l_bl_id_counter := l_bl_id_counter + 1;
3384
3385 -- Bug 4549862: Added 2 additional columns to Insert statement (BUDGET_LINE_ID
3386 -- and BILLABLE_FLAG) for further processing by other APIs when generating
3387 -- ALL versions from Staffing Plan with revenue accrual method of COST.
3388
3389 INSERT INTO pa_fp_rollup_tmp(
3390 RESOURCE_ASSIGNMENT_ID,
3391 START_DATE,
3392 END_DATE,
3393 PERIOD_NAME,
3394 QUANTITY,
3395 TXN_CURRENCY_CODE,
3396 TXN_RAW_COST,
3397 TXN_BURDENED_COST,
3398 TXN_REVENUE,
3399 BILL_MARKUP_PERCENTAGE,
3400 COST_REJECTION_CODE,
3401 BURDEN_REJECTION_CODE,
3402 REVENUE_REJECTION_CODE,
3403 COST_IND_COMPILED_SET_ID,
3404 BUDGET_LINE_ID, -- Added for Bug 4549862
3405 BILLABLE_FLAG, -- Added for Bug 4549862
3406 BUDGET_VERSION_ID ) -- Added for Bug 6207688
3407 VALUES(
3408 l_rt_res_assignment_id_tab(k),
3409 l_rt_start_date_tab(k),
3410 l_rt_end_date_tab(k),
3411 l_rt_pd_name_tab(k),
3412 l_rt_qty_tab(k),
3413 l_insert_Txn_Currency_Code, -- Bug 4615589
3414 x_raw_cost,
3415 x_burden_cost,
3416 x_raw_revenue,
3417 x_bill_markup_percentage,
3418 x_raw_cost_rejection_code,
3419 x_burden_cost_rejection_code,
3420 x_revenue_rejection_code,
3421 x_cost_ind_compiled_set_id,
3422 l_bl_id_counter, -- Added for Bug 4549862
3423 l_proj_billable_flag(j), -- Added for Bug 4549862
3424 P_BUDGET_VERSION_ID ); -- Added for Bug 6207688
3425
3426
3427 END LOOP; -- FOR k in 1..l_rt_start_date_tab.COUNT LOOP
3428
3429 END LOOP; -- FOR j IN 1..l_proj_assgn_id_tab.count LOOP
3430
3431 -- Bug 4549862: The PA_FP_ROLLUP_TMP global temp table has now
3432 -- been populated with Txn generation data as well as rejection
3433 -- codes for raw cost, burden cost, and revenue.
3434 --
3435 -- If the revenue accrual method is COST, we should call the
3436 -- currency conversion API to populate pc/pfc amounts in the
3437 -- temp table and let control return to the Budget or Forecast
3438 -- wrapper API without propagating data to the budget lines.
3439 --
3440 -- If the revenue accrual method is NOT COST, then propagate
3441 -- temp table data to the budget lines as before.
3442
3443 IF l_rev_gen_method = 'C' THEN
3444
3445 -- Bug 4549862: Call currency conversion API. Passing 'N' for
3446 -- the p_entire_version parameter tells to the API to convert
3447 -- currencies in the PA_FP_ROLLUP_TMP table instead of in the
3448 -- PA_BUDGET_LINES table.
3449
3450 IF p_pa_debug_mode = 'Y' THEN
3451 pa_fp_gen_amount_utils.fp_debug
3452 (p_called_mode => p_called_mode,
3453 p_msg => 'Before calling
3454 pa_fp_multi_currency_pkg.convert_txn_currency',
3455 p_module_name => l_module_name,
3456 p_log_level => 5);
3457 END IF;
3458 PA_FP_MULTI_CURRENCY_PKG.CONVERT_TXN_CURRENCY
3459 ( p_budget_version_id => P_BUDGET_VERSION_ID,
3460 p_entire_version => 'N',
3461 p_calling_module => 'BUDGET_GENERATION', -- Added for Bug#5395732
3462 X_RETURN_STATUS => X_RETURN_STATUS,
3463 X_MSG_COUNT => X_MSG_COUNT,
3464 X_MSG_DATA => X_MSG_DATA );
3465 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
3466 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3467 END IF;
3468 IF p_pa_debug_mode = 'Y' THEN
3469 pa_fp_gen_amount_utils.fp_debug
3470 (p_called_mode => p_called_mode,
3471 p_msg => 'Status after calling
3472 pa_fp_multi_currency_pkg.convert_txn_currency: '
3473 ||x_return_status,
3474 p_module_name => l_module_name,
3475 p_log_level => 5);
3476 END IF;
3477
3478 END IF; -- l_rev_gen_method = 'C'
3479
3480
3481 -- Bug 4549862: At this point, for each set of requirements/assignments
3482 -- mapping to the same target resource, there may be multiple non-null
3483 -- values for each rejection code column when the target version is None
3484 -- timephased. However, we can only store one rejection code value per
3485 -- budget line. Our current approach is to randomly pick 1 rejection code
3486 -- value to store in each column when there are multiple values.
3487 -- At the same time, ff a requirement/assignment has a non-null rejection
3488 -- code, then all the other requirements/assignments mapping to the same
3489 -- target resource need to be updated with the same rejection code value,
3490 -- and the corresponding amounts should be nulled out.
3491 -- This logic applies if the target version is None timephased.
3492
3493 IF p_fp_cols_rec.x_time_phased_code = 'N' THEN
3494
3495 IF l_rev_gen_method = 'C' THEN
3496
3497 -- A1. Logic to update cost rejection code and cost columns
3498 SELECT RESOURCE_ASSIGNMENT_ID,
3499 TXN_CURRENCY_CODE,
3500 MIN(COST_REJECTION_CODE)
3501 BULK COLLECT INTO
3502 l_rej_code_ra_id_tab,
3503 l_rej_code_txn_currency_tab,
3504 l_rej_code_msg_name_tab
3505 FROM pa_fp_rollup_tmp
3506 WHERE cost_rejection_code is not null
3507 GROUP BY RESOURCE_ASSIGNMENT_ID,
3508 TXN_CURRENCY_CODE;
3509
3510 FORALL i IN 1..l_rej_code_ra_id_tab.COUNT
3511 UPDATE pa_fp_rollup_tmp
3512 SET TXN_RAW_COST = NULL,
3513 PROJECT_RAW_COST = NULL,
3514 PROJFUNC_RAW_COST = NULL,
3515 COST_REJECTION_CODE = l_rej_code_msg_name_tab(i)
3516 WHERE resource_assignment_id = l_rej_code_ra_id_tab(i)
3517 AND txn_currency_code = l_rej_code_txn_currency_tab(i);
3518
3519 -- A2. Logic to update burden rejection code and cost columns
3520 SELECT RESOURCE_ASSIGNMENT_ID,
3521 TXN_CURRENCY_CODE,
3522 MIN(BURDEN_REJECTION_CODE)
3523 BULK COLLECT INTO
3524 l_rej_code_ra_id_tab,
3525 l_rej_code_txn_currency_tab,
3526 l_rej_code_msg_name_tab
3527 FROM pa_fp_rollup_tmp
3528 WHERE burden_rejection_code is not null
3529 GROUP BY RESOURCE_ASSIGNMENT_ID,
3530 TXN_CURRENCY_CODE;
3531
3532 FORALL i IN 1..l_rej_code_ra_id_tab.COUNT
3533 UPDATE pa_fp_rollup_tmp
3534 SET TXN_BURDENED_COST = NULL,
3535 PROJECT_BURDENED_COST = NULL,
3536 PROJFUNC_BURDENED_COST = NULL,
3537 BURDEN_REJECTION_CODE = l_rej_code_msg_name_tab(i)
3538 WHERE resource_assignment_id = l_rej_code_ra_id_tab(i)
3539 AND txn_currency_code = l_rej_code_txn_currency_tab(i);
3540
3541 -- A3. Logic to update pc currency conversion rejection code and pc amounts
3542 SELECT RESOURCE_ASSIGNMENT_ID,
3543 TXN_CURRENCY_CODE,
3544 MIN(PC_CUR_CONV_REJECTION_CODE)
3545 BULK COLLECT INTO
3546 l_rej_code_ra_id_tab,
3547 l_rej_code_txn_currency_tab,
3548 l_rej_code_msg_name_tab
3549 FROM pa_fp_rollup_tmp
3550 WHERE pc_cur_conv_rejection_code is not null
3551 GROUP BY RESOURCE_ASSIGNMENT_ID,
3552 TXN_CURRENCY_CODE;
3553
3554 FORALL i IN 1..l_rej_code_ra_id_tab.COUNT
3555 UPDATE pa_fp_rollup_tmp
3556 SET PROJECT_RAW_COST = NULL,
3557 PROJECT_BURDENED_COST = NULL,
3558 PROJECT_REVENUE = NULL,
3559 PC_CUR_CONV_REJECTION_CODE = l_rej_code_msg_name_tab(i)
3560 WHERE resource_assignment_id = l_rej_code_ra_id_tab(i)
3561 AND txn_currency_code = l_rej_code_txn_currency_tab(i);
3562
3563 -- A4. Logic to update pfc currency conversion rejection code and pfc amounts
3564 SELECT RESOURCE_ASSIGNMENT_ID,
3565 TXN_CURRENCY_CODE,
3566 MIN(PFC_CUR_CONV_REJECTION_CODE)
3567 BULK COLLECT INTO
3568 l_rej_code_ra_id_tab,
3569 l_rej_code_txn_currency_tab,
3570 l_rej_code_msg_name_tab
3571 FROM pa_fp_rollup_tmp
3572 WHERE pfc_cur_conv_rejection_code is not null
3573 GROUP BY RESOURCE_ASSIGNMENT_ID,
3574 TXN_CURRENCY_CODE;
3575
3576 FORALL i IN 1..l_rej_code_ra_id_tab.COUNT
3577 UPDATE pa_fp_rollup_tmp
3578 SET PROJFUNC_RAW_COST = NULL,
3579 PROJFUNC_BURDENED_COST = NULL,
3580 PROJFUNC_REVENUE = NULL,
3581 PFC_CUR_CONV_REJECTION_CODE = l_rej_code_msg_name_tab(i)
3582 WHERE resource_assignment_id = l_rej_code_ra_id_tab(i)
3583 AND txn_currency_code = l_rej_code_txn_currency_tab(i);
3584
3585 ELSE -- l_rev_gen_method <> 'C'
3586
3587 -- B1. Logic to update cost rejection code and txn_raw_cost
3588 SELECT RESOURCE_ASSIGNMENT_ID,
3589 TXN_CURRENCY_CODE,
3590 MIN(COST_REJECTION_CODE)
3591 BULK COLLECT INTO
3592 l_rej_code_ra_id_tab,
3593 l_rej_code_txn_currency_tab,
3594 l_rej_code_msg_name_tab
3595 FROM pa_fp_rollup_tmp
3596 WHERE cost_rejection_code is not null
3597 GROUP BY RESOURCE_ASSIGNMENT_ID,
3598 TXN_CURRENCY_CODE;
3599
3600 FORALL i IN 1..l_rej_code_ra_id_tab.COUNT
3601 UPDATE pa_fp_rollup_tmp
3602 SET TXN_RAW_COST = NULL,
3603 COST_REJECTION_CODE = l_rej_code_msg_name_tab(i)
3604 WHERE resource_assignment_id = l_rej_code_ra_id_tab(i)
3605 AND txn_currency_code = l_rej_code_txn_currency_tab(i);
3606
3607 -- B2. Logic to update burden rejection code and txn_burdened_cost
3608 SELECT RESOURCE_ASSIGNMENT_ID,
3609 TXN_CURRENCY_CODE,
3610 MIN(BURDEN_REJECTION_CODE)
3611 BULK COLLECT INTO
3612 l_rej_code_ra_id_tab,
3613 l_rej_code_txn_currency_tab,
3614 l_rej_code_msg_name_tab
3615 FROM pa_fp_rollup_tmp
3616 WHERE burden_rejection_code is not null
3617 GROUP BY RESOURCE_ASSIGNMENT_ID,
3618 TXN_CURRENCY_CODE;
3619
3620 FORALL i IN 1..l_rej_code_ra_id_tab.COUNT
3621 UPDATE pa_fp_rollup_tmp
3622 SET TXN_BURDENED_COST = NULL,
3623 BURDEN_REJECTION_CODE = l_rej_code_msg_name_tab(i)
3624 WHERE resource_assignment_id = l_rej_code_ra_id_tab(i)
3625 AND txn_currency_code = l_rej_code_txn_currency_tab(i);
3626
3627 -- B3. Logic to update revenue rejection code and txn_revenue_cost.
3628 -- This logic differs from Step 5.5 because FIND_REJECTION_CODE
3629 -- matches requirement/assignment records based on start_date,
3630 -- which could miss records when the target is None timephased.
3631 SELECT DISTINCT
3632 RESOURCE_ASSIGNMENT_ID,
3633 TXN_CURRENCY_CODE,
3634 MIN(REVENUE_REJECTION_CODE)
3635 BULK COLLECT INTO
3636 l_rej_code_ra_id_tab,
3637 l_rej_code_txn_currency_tab,
3638 l_rej_code_msg_name_tab
3639 FROM pa_fp_rollup_tmp
3640 WHERE revenue_rejection_code is not null
3641 GROUP BY RESOURCE_ASSIGNMENT_ID,
3642 TXN_CURRENCY_CODE;
3643
3644 FORALL i IN 1..l_rej_code_ra_id_tab.COUNT
3645 UPDATE pa_fp_rollup_tmp
3646 SET TXN_REVENUE = NULL,
3647 REVENUE_REJECTION_CODE = l_rej_code_msg_name_tab(i)
3648 WHERE resource_assignment_id = l_rej_code_ra_id_tab(i)
3649 AND txn_currency_code = l_rej_code_txn_currency_tab(i);
3650
3651 END IF; -- l_rev_gen_method = 'C'
3652
3653 END IF; -- p_fp_cols_rec.x_time_phased_code = 'N'
3654
3655
3656 IF l_rev_gen_method = 'C' THEN
3657
3658 -- Bug 4549862: Returning control to the Budget or Forecast
3659 -- wrapper API, which will call GEN_COST_BASED_REVENUE to
3660 -- finish processing the data in PA_FP_ROLLUP_TMP and write
3661 -- it to the budget lines.
3662
3663 RETURN;
3664
3665 ELSE -- l_rev_gen_method <> 'C'
3666
3667 -- 5.5. If there are multiple lines with the same resource assignment
3668 -- id, txn currency code and start date, remove the revenue amount and stamp
3669 -- the rev rejection code on the lines with revenue amount. This situation is
3670 -- formed if there are multiple project assignments contributing to a single
3671 -- budget line. Some project assignment have bill rate override and the std rates
3672 -- are not available for the rest of the project assignments.
3673 OPEN FIND_REJECTION_CODE;
3674 FETCH FIND_REJECTION_CODE BULK COLLECT INTO
3675 l_rej_res_assignment_id_tab,
3676 l_rej_start_date_tab,
3677 l_rej_txn_currency_code_tab,
3678 l_rej_revenue_rej_code_tab;
3679 CLOSE FIND_REJECTION_CODE;
3680
3681 FOR m IN 1..l_rej_res_assignment_id_tab.COUNT LOOP
3682
3683 UPDATE pa_fp_rollup_tmp
3684 SET TXN_REVENUE = NULL,
3685 REVENUE_REJECTION_CODE = l_rej_revenue_rej_code_tab(m)
3686 WHERE resource_assignment_id = l_rej_res_assignment_id_tab(m)
3687 AND start_date = l_rej_start_date_tab(m)
3688 AND txn_currency_code = l_rej_txn_currency_code_tab(m)
3689 AND (txn_revenue is not null OR
3690 revenue_rejection_code is null);
3691
3692 END LOOP; -- FOR m IN 1..l_rej_res_assignment_id_tab.COUNT LOOP
3693
3694 IF p_pa_debug_mode = 'Y' THEN
3695 pa_fp_gen_amount_utils.fp_debug
3696 (p_called_mode => p_called_mode,
3697 p_msg => 'Group temp table data by res asgmt, txn cur and period. Insert into budget lines',
3698 p_module_name => l_module_name,
3699 p_log_level => 5);
3700 END IF;
3701
3702 -- 6. Group the temporary table data by resource assignment, txn currency code and period name
3703
3704 -- Bug 4549862: If the target version is None timephased and the
3705 -- context is Forecast generation, then budget lines containing
3706 -- actuals may exist. As a result, some of the data in the temp
3707 -- table may need to be Inserted while other data in the table
3708 -- may need to be Updated in pa_budget_lines.
3709 --
3710 -- Group the temporary table data by resource assignment and txn
3711 -- currency code using separate cursors for the Insert/Update cases.
3712
3713 IF p_fp_cols_rec.x_time_phased_code = 'N' AND
3714 p_fp_cols_rec.x_plan_class_code = 'FORECAST' THEN
3715
3716 -- Bug 4549862: Fetch data for Insert.
3717 OPEN GROUP_TO_INS_INTO_NTP_FCST_BL;
3718 FETCH GROUP_TO_INS_INTO_NTP_FCST_BL BULK COLLECT INTO
3719 l_bl_RES_ASSIGNMENT_ID_tab,
3720 l_bl_START_DATE_tab,
3721 l_bl_END_DATE_tab,
3722 l_bl_PERIOD_NAME_tab,
3723 l_bl_QUANTITY_tab,
3724 l_bl_TXN_CURRENCY_CODE_tab,
3725 l_bl_TXN_RAW_COST_tab,
3726 l_bl_TXN_BURDENED_COST_tab,
3727 l_bl_TXN_REVENUE_tab,
3728 l_bl_BILL_MARKUP_PERCENT_tab,
3729 l_bl_COST_REJECTION_CODE_tab,
3730 l_bl_BURDEN_REJECTION_CODE_tab,
3731 l_bl_REV_REJECTION_CODE_tab,
3732 l_bl_COST_IND_C_SET_ID_tab;
3733 CLOSE GROUP_TO_INS_INTO_NTP_FCST_BL;
3734
3735 -- Bug 4549862: Fetch data for Update.
3736 OPEN GROUP_TO_UPD_INTO_NTP_FCST_BL;
3737 FETCH GROUP_TO_UPD_INTO_NTP_FCST_BL BULK COLLECT INTO
3738 l_upd_bl_RES_ASSIGNMENT_ID_tab,
3739 l_upd_bl_START_DATE_tab,
3740 l_upd_bl_END_DATE_tab,
3741 l_upd_bl_PERIOD_NAME_tab,
3742 l_upd_bl_QUANTITY_tab,
3743 l_upd_bl_TXN_CURRENCY_CODE_tab,
3744 l_upd_bl_TXN_RAW_COST_tab,
3745 l_upd_bl_TXN_BURDENED_COST_tab,
3746 l_upd_bl_TXN_REVENUE_tab,
3747 l_upd_bl_BILL_MARKUP_PRCNT_tab,
3748 l_upd_bl_COST_REJ_CODE_tab,
3749 l_upd_bl_BURDEN_REJ_CODE_tab,
3750 l_upd_bl_REV_REJ_CODE_tab,
3751 l_upd_bl_COST_IND_C_SET_ID_tab;
3752 CLOSE GROUP_TO_UPD_INTO_NTP_FCST_BL;
3753
3754 -- Bug 4549862: If the context is Budget generation, then we do
3755 -- not need to worry about the existence of budget lines containing
3756 -- actuals, so all temp table data can be Inserted into the budget
3757 -- lines table. If the context is Forecast generation and the target
3758 -- version is timephased by either PA or GL, then budget lines with
3759 -- actuals will only exist for periods through the Actuals Through
3760 -- Date. Since the temp table will contain ETC data in this case,
3761 -- all temp table data can be Inserted into the budget lines table.
3762 -- Therefore, in the ELSE block, fetch all of the data.
3763
3764 ELSE
3765
3766 -- Bug 4615787: When the Target is timephased by PA or GL, we
3767 -- should continue to fetch pa_fp_rollup_tmp data using the
3768 -- GROUP_TO_INSERT_INTO_PA_GL_BL cursor. When the Target is None
3769 -- timephased, use the new GROUP_TO_INSERT_INTO_PA_GL_BL cursor
3770 -- instead so that only a single record is fetched for each
3771 -- (Resource Assignment Id, Txn Currency) combination.
3772
3773 IF p_fp_cols_rec.x_time_phased_code IN ('P','G') THEN
3774 OPEN GROUP_TO_INSERT_INTO_PA_GL_BL;
3775 FETCH GROUP_TO_INSERT_INTO_PA_GL_BL BULK COLLECT INTO
3776 l_bl_RES_ASSIGNMENT_ID_tab,
3777 l_bl_START_DATE_tab,
3778 l_bl_END_DATE_tab,
3779 l_bl_PERIOD_NAME_tab,
3780 l_bl_QUANTITY_tab,
3781 l_bl_TXN_CURRENCY_CODE_tab,
3782 l_bl_TXN_RAW_COST_tab,
3783 l_bl_TXN_BURDENED_COST_tab,
3784 l_bl_TXN_REVENUE_tab,
3785 l_bl_BILL_MARKUP_PERCENT_tab,
3786 l_bl_COST_REJECTION_CODE_tab,
3787 l_bl_BURDEN_REJECTION_CODE_tab,
3788 l_bl_REV_REJECTION_CODE_tab,
3789 l_bl_COST_IND_C_SET_ID_tab;
3790 CLOSE GROUP_TO_INSERT_INTO_PA_GL_BL;
3791 ELSIF p_fp_cols_rec.x_time_phased_code = 'N' THEN
3792 OPEN GROUP_TO_INSERT_INTO_NTP_BL;
3793 FETCH GROUP_TO_INSERT_INTO_NTP_BL BULK COLLECT INTO
3794 l_bl_RES_ASSIGNMENT_ID_tab,
3795 l_bl_START_DATE_tab,
3796 l_bl_END_DATE_tab,
3797 l_bl_PERIOD_NAME_tab,
3798 l_bl_QUANTITY_tab,
3799 l_bl_TXN_CURRENCY_CODE_tab,
3800 l_bl_TXN_RAW_COST_tab,
3801 l_bl_TXN_BURDENED_COST_tab,
3802 l_bl_TXN_REVENUE_tab,
3803 l_bl_BILL_MARKUP_PERCENT_tab,
3804 l_bl_COST_REJECTION_CODE_tab,
3805 l_bl_BURDEN_REJECTION_CODE_tab,
3806 l_bl_REV_REJECTION_CODE_tab,
3807 l_bl_COST_IND_C_SET_ID_tab;
3808 CLOSE GROUP_TO_INSERT_INTO_NTP_BL;
3809 END IF; -- time phase check
3810
3811 END IF; -- None timephased Forecast check
3812
3813
3814 -- 7. Insert into budget lines: quantity, cost and revenue amounts, txn currency code,
3815 -- cost ind compiled set id and rejection codes
3816 IF l_bl_RES_ASSIGNMENT_ID_tab.COUNT > 0 THEN
3817
3818 FORALL bl_index IN 1 .. l_bl_START_DATE_tab.COUNT
3819 INSERT INTO PA_BUDGET_LINES(
3820 RESOURCE_ASSIGNMENT_ID,
3821 START_DATE,
3822 LAST_UPDATE_DATE,
3823 LAST_UPDATED_BY,
3824 CREATION_DATE,
3825 CREATED_BY,
3826 LAST_UPDATE_LOGIN,
3827 END_DATE,
3828 PERIOD_NAME,
3829 QUANTITY,
3830 TXN_CURRENCY_CODE,
3831 BUDGET_LINE_ID,
3832 BUDGET_VERSION_ID,
3833 -- PROJECT_CURRENCY_CODE,
3834 -- PROJFUNC_CURRENCY_CODE,
3835 TXN_COST_RATE_OVERRIDE,
3836 TXN_BILL_RATE_OVERRIDE , -- override rate on project assignment
3837 BURDEN_COST_RATE_OVERRIDE,
3838 TXN_RAW_COST,
3839 TXN_BURDENED_COST,
3840 TXN_REVENUE,
3841 TXN_MARKUP_PERCENT_OVERRIDE,
3842 COST_REJECTION_CODE,
3843 BURDEN_REJECTION_CODE,
3844 REVENUE_REJECTION_CODE,
3845 COST_IND_COMPILED_SET_ID)
3846 VALUES(
3847 l_bl_RES_ASSIGNMENT_ID_tab(bl_index),
3848 l_bl_START_DATE_tab(bl_index),
3849 l_sysdate,
3850 l_last_updated_by,
3851 l_sysdate,
3852 l_last_updated_by,
3853 l_last_update_login,
3854 l_bl_END_DATE_tab(bl_index),
3855 l_bl_PERIOD_NAME_tab(bl_index),
3856 l_bl_QUANTITY_tab(bl_index),
3857 l_bl_TXN_CURRENCY_CODE_tab(bl_index),
3858 PA_BUDGET_LINES_S.nextval,
3859 P_BUDGET_VERSION_ID,
3860 DECODE(l_bl_QUANTITY_tab(bl_index), 0, NULL, l_bl_TXN_RAW_COST_tab(bl_index)/l_bl_QUANTITY_tab(bl_index)),
3861 DECODE(l_bl_QUANTITY_tab(bl_index), 0, NULL, l_bl_TXN_REVENUE_tab(bl_index)/l_bl_QUANTITY_tab(bl_index)),
3862 DECODE(l_bl_QUANTITY_tab(bl_index), 0, NULL, l_bl_TXN_BURDENED_COST_tab(bl_index)/l_bl_QUANTITY_tab(bl_index)),
3863 l_bl_TXN_RAW_COST_tab(bl_index),
3864 l_bl_TXN_BURDENED_COST_tab(bl_index),
3865 l_bl_TXN_REVENUE_tab(bl_index),
3866 l_bl_BILL_MARKUP_PERCENT_tab(bl_index),
3867 l_bl_COST_REJECTION_CODE_tab(bl_index),
3868 l_bl_BURDEN_REJECTION_CODE_tab(bl_index),
3869 l_bl_REV_REJECTION_CODE_tab(bl_index),
3870 l_bl_COST_IND_C_SET_ID_tab(bl_index));
3871
3872 END IF; -- IF l_bl_RES_ASSIGNMENT_ID_tab.COUNT > 0 THEN
3873
3874
3875 -- Bug 4549862: If the target version is None timephased and the
3876 -- context is Forecast generation, then budget lines containing
3877 -- actuals may exist. As a result, some of the data in the temp
3878 -- table may need to be Inserted while other data in the table
3879 -- may need to be Updated in pa_budget_lines.
3880 --
3881 -- The following code Updates the budget lines.
3882
3883 IF l_upd_bl_RES_ASSIGNMENT_ID_tab.COUNT > 0 THEN
3884
3885 FORALL bl_index IN 1 .. l_upd_bl_START_DATE_tab.COUNT
3886 UPDATE PA_BUDGET_LINES
3887 SET LAST_UPDATE_DATE = l_sysdate,
3888 LAST_UPDATED_BY = l_last_updated_by,
3889 LAST_UPDATE_LOGIN = l_last_update_login,
3890 START_DATE = LEAST(START_DATE, l_upd_bl_START_DATE_tab(bl_index)),
3891 END_DATE = GREATEST(END_DATE, l_upd_bl_END_DATE_tab(bl_index)),
3892 QUANTITY =
3893 DECODE(INIT_QUANTITY, null, l_upd_bl_QUANTITY_tab(bl_index),
3894 INIT_QUANTITY + NVL(l_upd_bl_QUANTITY_tab(bl_index),0)),
3895 TXN_RAW_COST =
3896 DECODE(TXN_INIT_RAW_COST, null, l_upd_bl_TXN_RAW_COST_tab(bl_index),
3897 TXN_INIT_RAW_COST + NVL(l_upd_bl_TXN_RAW_COST_tab(bl_index),0)),
3898 TXN_BURDENED_COST =
3899 DECODE(TXN_INIT_BURDENED_COST, null, l_upd_bl_TXN_BURDENED_COST_tab(bl_index),
3900 TXN_INIT_BURDENED_COST + NVL(l_upd_bl_TXN_BURDENED_COST_tab(bl_index),0)),
3901 TXN_REVENUE =
3902 DECODE(TXN_INIT_REVENUE, null, l_upd_bl_TXN_REVENUE_tab(bl_index),
3903 TXN_INIT_REVENUE + NVL(l_upd_bl_TXN_REVENUE_tab(bl_index),0)),
3904 TXN_COST_RATE_OVERRIDE =
3905 DECODE(l_upd_bl_QUANTITY_tab(bl_index), 0, NULL,
3906 l_upd_bl_TXN_RAW_COST_tab(bl_index)/l_upd_bl_QUANTITY_tab(bl_index)),
3907 -- override rate on project assignment
3908 TXN_BILL_RATE_OVERRIDE =
3909 DECODE(l_upd_bl_QUANTITY_tab(bl_index), 0, NULL,
3910 l_upd_bl_TXN_REVENUE_tab(bl_index)/l_upd_bl_QUANTITY_tab(bl_index)),
3911 BURDEN_COST_RATE_OVERRIDE =
3912 DECODE(l_upd_bl_QUANTITY_tab(bl_index), 0, NULL,
3913 l_upd_bl_TXN_BURDENED_COST_tab(bl_index)/l_upd_bl_QUANTITY_tab(bl_index)),
3914 TXN_MARKUP_PERCENT_OVERRIDE = l_upd_bl_BILL_MARKUP_PRCNT_tab(bl_index),
3915 COST_REJECTION_CODE = l_upd_bl_COST_REJ_CODE_tab(bl_index),
3916 BURDEN_REJECTION_CODE = l_upd_bl_BURDEN_REJ_CODE_tab(bl_index),
3917 REVENUE_REJECTION_CODE = l_upd_bl_REV_REJ_CODE_tab(bl_index),
3918 COST_IND_COMPILED_SET_ID = l_upd_bl_COST_IND_C_SET_ID_tab(bl_index)
3919 WHERE RESOURCE_ASSIGNMENT_ID = l_upd_bl_RES_ASSIGNMENT_ID_tab(bl_index)
3920 AND TXN_CURRENCY_CODE = l_upd_bl_TXN_CURRENCY_CODE_tab(bl_index);
3921
3922 END IF; -- l_upd_bl_RES_ASSIGNMENT_ID_tab.COUNT > 0 check
3923
3924 END IF; -- l_rev_gen_method check for Bug 4549862
3925
3926 ELSE -- p_fp_cols_rec.x_version_type = 'ALL' AND l_bill_rate_ovrd_exists_flag = 'Y' THEN
3927
3928 -- END OF M-closeout: Bill Rate Override ER
3929
3930 FOR j IN 1..l_proj_assgn_id_tab.count LOOP
3931 --dbms_output.put_line('before cursor:l_proj_res_assgn_id_tab('||j
3932 -- ||'):'||l_proj_res_assgn_id_tab(j)
3933 -- ||';p_actuals_thru_date:'||p_actuals_thru_date);
3934 IF p_pa_debug_mode = 'Y' THEN
3935 pa_fp_gen_amount_utils.fp_debug
3936 (p_called_mode => p_called_mode,
3937 p_msg => 'before cursor:l_proj_assgn_id_tab('||j
3938 ||'):'||l_proj_assgn_id_tab(j)
3939 ||';p_actuals_thru_date:'||p_actuals_thru_date,
3940 p_module_name => l_module_name,
3941 p_log_level => 5);
3942 END IF;
3943
3944 IF p_FP_COLS_REC.X_TIME_PHASED_CODE = 'P' THEN
3945 OPEN FCST_PA(l_proj_assgn_id_tab(j),p_actuals_thru_date,l_proj_exp_organization_id_tab(j), l_org_id);
3946
3947 ELSIF p_FP_COLS_REC.X_TIME_PHASED_CODE = 'G' THEN
3948 OPEN FCST_GL(l_proj_assgn_id_tab(j),p_actuals_thru_date,l_proj_exp_organization_id_tab(j));
3949
3950 ELSE
3951 OPEN FCST_NONE(l_proj_assgn_id_tab(j),p_actuals_thru_date,l_proj_exp_organization_id_tab(j));
3952 END IF;
3953
3954 l_budget_lines_tbl.delete;
3955 l_rt_forecast_item_id_tab.delete;
3956 l_rt_pd_name_tab.delete;
3957 l_rt_start_date_tab.delete;
3958 l_rt_end_date_tab.delete;
3959 l_rt_qty_tab.delete;
3960 l_rt_exp_org_id_tab.delete;
3961 l_rt_exp_organization_id_tab.delete;
3962 l_rt_exp_func_raw_cst_rt_tab.delete;
3963 l_rt_exp_func_raw_cst_tab.delete;
3964 l_rt_exp_func_bur_cst_rt_tab.delete;
3965 l_rt_exp_func_burdned_cst_tab.delete;
3966 l_rt_projfunc_bill_rt_tab.delete;
3967 l_rt_projfunc_raw_revenue_tab.delete;
3968 l_rt_projfunc_raw_cst_tab.delete;
3969 l_rt_projfunc_raw_cst_rt_tab.delete;
3970 l_rt_projfunc_burdned_cst_tab.delete;
3971 l_rt_projfunc_bd_cst_rt_tab.delete;
3972 l_rt_rev_rejct_reason_tab.delete;
3973 l_rt_cst_rejct_reason_tab.delete;
3974 l_rt_burdned_rejct_reason_tab.delete;
3975 l_rt_others_rejct_reason_tab.delete;
3976
3977 l_init_bill_rate_flag := 'N';
3978
3979 IF p_FP_COLS_REC.X_TIME_PHASED_CODE = 'P' THEN
3980 FETCH FCST_PA BULK COLLECT INTO
3981 l_rt_exp_org_id_tab,
3982 l_rt_exp_organization_id_tab,
3983 l_rt_pd_name_tab,
3984 l_rt_start_date_tab,
3985 l_rt_end_date_tab,
3986 l_rt_qty_tab,
3987 l_rt_forecast_item_id_tab;
3988
3989 ELSIF p_FP_COLS_REC.X_TIME_PHASED_CODE = 'G' THEN
3990 FETCH FCST_GL BULK COLLECT INTO
3991 l_rt_exp_org_id_tab,
3992 l_rt_exp_organization_id_tab,
3993 l_rt_pd_name_tab,
3994 l_rt_start_date_tab,
3995 l_rt_end_date_tab,
3996 l_rt_qty_tab,
3997 l_rt_forecast_item_id_tab;
3998 ELSE
3999 FETCH FCST_NONE BULK COLLECT INTO
4000 l_rt_exp_org_id_tab,
4001 l_rt_exp_organization_id_tab,
4002 l_rt_qty_tab,
4003 l_rt_forecast_item_id_tab,
4004 l_rt_pd_name_tab,
4005 l_rt_start_date_tab,
4006 l_rt_end_date_tab;
4007 END IF;
4008
4009 IF p_FP_COLS_REC.X_TIME_PHASED_CODE = 'P' THEN
4010 CLOSE FCST_PA;
4011
4012 ELSIF p_FP_COLS_REC.X_TIME_PHASED_CODE = 'G' THEN
4013 CLOSE FCST_GL;
4014
4015 ELSE
4016 CLOSE FCST_NONE;
4017 END IF;
4018
4019 IF p_pa_debug_mode = 'Y' THEN
4020 pa_fp_gen_amount_utils.fp_debug
4021 (p_called_mode => p_called_mode,
4022 p_msg => '==j=='||j
4023 ||';==l_rt_start_date_tab.count:'||l_rt_start_date_tab.count,
4024 p_module_name => l_module_name,
4025 p_log_level => 5);
4026 END IF;
4027 SELECT count(*)
4028 INTO l_count
4029 FROM pa_budget_lines
4030 WHERE resource_assignment_id = l_proj_res_assgn_id_tab(j)
4031 AND rownum <2;
4032
4033 --dbms_output.put_line('==j=='||j
4034 -- ||';l_proj_res_assgn_id_tab(j):'||l_proj_res_assgn_id_tab(j)
4035 -- ||';count:'||l_count
4036 -- ||';l_rt_start_date_tab.count:'||l_rt_start_date_tab.count);
4037 IF p_pa_debug_mode = 'Y' THEN
4038 pa_fp_gen_amount_utils.fp_debug
4039 (p_called_mode => p_called_mode,
4040 p_msg => '==j=='||j
4041 ||';l_proj_res_assgn_id_tab(j):'||l_proj_res_assgn_id_tab(j)
4042 ||';count:'||l_count
4043 ||';l_rt_start_date_tab.count:'||l_rt_start_date_tab.count,
4044 p_module_name => l_module_name,
4045 p_log_level => 5);
4046 END IF;
4047 --dbms_output.put_line('l_count:'||l_count);
4048 --dbms_output.put_line('l_rt_start_date_tab.COUNT:'||l_rt_start_date_tab.COUNT);
4049 --for i in 1..l_rt_start_date_tab.count loop
4050 --dbms_output.put_line(i);
4051 --dbms_output.put_line('l_proj_res_assgn_id_tab(j):'||l_proj_res_assgn_id_tab(j));
4052 --dbms_output.put_line('l_rt_start_date_tab(i),:'||l_rt_start_date_tab(i));
4053 --dbms_output.put_line('l_rt_pd_name_tab(i):'||l_rt_pd_name_tab(i));
4054 --end loop;
4055
4056 IF l_count = 0 THEN
4057 FORALL fp IN 1 .. l_rt_start_date_tab.COUNT
4058 INSERT INTO PA_BUDGET_LINES(RESOURCE_ASSIGNMENT_ID,
4059 START_DATE,
4060 LAST_UPDATE_DATE,
4061 LAST_UPDATED_BY,
4062 CREATION_DATE,
4063 CREATED_BY,
4064 LAST_UPDATE_LOGIN,
4065 END_DATE,
4066 PERIOD_NAME,
4067 QUANTITY,
4068 TXN_CURRENCY_CODE,
4069 BUDGET_LINE_ID,
4070 BUDGET_VERSION_ID,
4071 PROJECT_CURRENCY_CODE,
4072 PROJFUNC_CURRENCY_CODE)
4073 VALUES(l_proj_res_assgn_id_tab(j),
4074 l_rt_start_date_tab(fp),
4075 l_sysdate,
4076 l_last_updated_by,
4077 l_sysdate,
4078 l_last_updated_by,
4079 l_last_update_login,
4080 l_rt_end_date_tab(fp),
4081 l_rt_pd_name_tab(fp),
4082 l_rt_qty_tab(fp),
4083 l_project_currency_code,
4084 PA_BUDGET_LINES_S.nextval,
4085 P_BUDGET_VERSION_ID,
4086 p_FP_COLS_REC.X_PROJECT_CURRENCY_CODE,
4087 p_FP_COLS_REC.X_PROJFUNC_CURRENCY_CODE);
4088 ELSE
4089 FOR fp IN 1 .. l_rt_start_date_tab.COUNT LOOP
4090 -- Bug 4615787: When the Target is timephased by PA or GL, budget lines
4091 -- are unique given (Resource Assignment Id, Currency Code, Start Date).
4092 -- When the Target is None timephased, budget lines should be unique
4093 -- given (Resource Assignment Id, Currency Code). Thus, we need to check
4094 -- for budget line existence differently based on Target timephase.
4095 IF p_fp_cols_rec.x_time_phased_code IN ('P','G') THEN
4096 SELECT count(*)
4097 INTO l_count1
4098 FROM pa_budget_lines
4099 WHERE resource_assignment_id = l_proj_res_assgn_id_tab(j)
4100 AND txn_currency_code = l_project_currency_code
4101 AND start_date = l_rt_start_date_tab(fp);
4102 ELSIF p_fp_cols_rec.x_time_phased_code = 'N' THEN
4103 SELECT count(*)
4104 INTO l_count1
4105 FROM pa_budget_lines
4106 WHERE resource_assignment_id = l_proj_res_assgn_id_tab(j)
4107 AND txn_currency_code = l_project_currency_code;
4108 END IF;
4109 IF l_count1 = 0 then
4110 INSERT INTO PA_BUDGET_LINES(RESOURCE_ASSIGNMENT_ID,
4111 START_DATE,
4112 LAST_UPDATE_DATE,
4113 LAST_UPDATED_BY,
4114 CREATION_DATE,
4115 CREATED_BY,
4116 LAST_UPDATE_LOGIN,
4117 END_DATE,
4118 PERIOD_NAME,
4119 QUANTITY,
4120 TXN_CURRENCY_CODE,
4121 BUDGET_LINE_ID,
4122 BUDGET_VERSION_ID,
4123 PROJECT_CURRENCY_CODE,
4124 PROJFUNC_CURRENCY_CODE)
4125 VALUES(l_proj_res_assgn_id_tab(j),
4126 l_rt_start_date_tab(fp),
4127 l_sysdate,
4128 l_last_updated_by,
4129 l_sysdate,
4130 l_last_updated_by,
4131 l_last_update_login,
4132 l_rt_end_date_tab(fp),
4133 l_rt_pd_name_tab(fp),
4134 l_rt_qty_tab(fp),
4135 l_project_currency_code,
4136 PA_BUDGET_LINES_S.nextval,
4137 P_BUDGET_VERSION_ID,
4138 p_FP_COLS_REC.X_PROJECT_CURRENCY_CODE,
4139 p_FP_COLS_REC.X_PROJFUNC_CURRENCY_CODE);
4140 ELSE
4141 -- Bug 4615787: When the Target is timephased by PA or GL, budget lines
4142 -- are unique given (Resource Assignment Id, Currency Code, Start Date).
4143 -- When the Target is None timephased, budget lines should be unique
4144 -- given (Resource Assignment Id, Currency Code). Split Update logic into
4145 -- 2 cases based on Target timephase.
4146 IF p_fp_cols_rec.x_time_phased_code IN ('P','G') THEN
4147 UPDATE pa_budget_lines
4148 SET quantity = nvl(quantity,0) +
4149 l_rt_qty_tab(fp)
4150 WHERE resource_assignment_id = l_proj_res_assgn_id_tab(j)
4151 AND txn_currency_code = l_project_currency_code
4152 AND start_date = l_rt_start_date_tab(fp);
4153 ELSIF p_fp_cols_rec.x_time_phased_code = 'N' THEN
4154 UPDATE pa_budget_lines
4155 SET quantity = nvl(quantity,0) + l_rt_qty_tab(fp),
4156 start_date = least(start_date, l_rt_start_date_tab(fp)),
4157 end_date = greatest(end_date, l_rt_end_date_tab(fp))
4158 WHERE resource_assignment_id = l_proj_res_assgn_id_tab(j)
4159 AND txn_currency_code = l_project_currency_code;
4160 END IF; -- timephase check
4161 END IF;
4162 END LOOP; -- FOR fp IN 1 .. l_rt_start_date_tab.COUNT LOOP
4163 END IF;
4164
4165 END LOOP; -- FOR j IN 1..l_proj_assgn_id_tab.count LOOP
4166
4167 /*Duplicate res_assignment needs to be filtered before calling calculate API*/
4168 IF l_proj_res_assgn_id_tab.count = 0 THEN
4169 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
4170 PA_DEBUG.reset_err_stack;
4171 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
4172 PA_DEBUG.Reset_Curr_Function;
4173 END IF;
4174 RETURN;
4175 END IF;
4176 l_dp_counter := 0;
4177 FOR i IN 1..l_proj_res_assgn_id_tab.count LOOP
4178 l_dp_flag := 'N';
4179 FOR j IN 1..l_res_assgn_id_tmp_tab.count LOOP
4180 IF l_proj_res_assgn_id_tab(i) = l_res_assgn_id_tmp_tab(j) THEN
4181 l_dp_flag := 'Y';
4182 END IF;
4183 END LOOP;
4184 IF l_dp_flag = 'N' THEN
4185 l_dp_counter := l_dp_counter+1;
4186 l_res_assgn_id_tmp_tab.extend;
4187 l_res_assgn_id_tmp_tab(l_dp_counter) := l_proj_res_assgn_id_tab(i);
4188
4189 -- Bug 4548733: Populate l_calc_billable_flag_tab with billability
4190 -- flag values to pass to Calculate API.
4191 l_calc_billable_flag_tab.extend;
4192 l_calc_billable_flag_tab(l_dp_counter) := l_proj_billable_flag(i);
4193 END IF;
4194 END LOOP;
4195
4196 -- Bug 4549862: Moved initialization of l_rev_gen_method before
4197 -- initialization of l_calculate_mode earlier in the code.
4198
4199 IF p_fp_cols_rec.x_version_type = 'REVENUE' and l_rev_gen_method = 'C' THEN
4200 delete from pa_fp_calc_amt_tmp2;
4201
4202 FOR i IN 1..l_res_assgn_id_tmp_tab.count LOOP
4203 SELECT SUM(quantity)
4204 INTO l_total_plan_quantity
4205 FROM pa_budget_lines
4206 WHERE resource_assignment_id = l_res_assgn_id_tmp_tab(i); /* Bug 4093872 - Column name corrected from budget_version_id to resource_assignment_id */
4207
4208 INSERT INTO pa_fp_calc_amt_tmp2(
4209 resource_assignment_id,
4210 total_plan_quantity)
4211 VALUES(
4212 l_res_assgn_id_tmp_tab(i),
4213 l_total_plan_quantity);
4214 END LOOP;
4215 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
4216 PA_DEBUG.reset_err_stack;
4217 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
4218 PA_DEBUG.Reset_Curr_Function;
4219 END IF;
4220 RETURN;
4221 END IF;
4222 --dbms_output.put_line('gen_ret_manual_line_flag: '||p_fp_cols_rec.x_gen_ret_manual_line_flag);
4223
4224 /* Taken off the logic of checking if the Retain manually added plan lines flag
4225 is set to Y or N due to the new logic added. Bug 4046530 -sbhavsar */
4226
4227
4228 FOR i IN 1..l_res_assgn_id_tmp_tab.count LOOP
4229
4230 l_delete_budget_lines_tab.extend;
4231 l_spread_amts_flag_tab.extend;
4232 l_txn_currency_code_tab.extend;
4233 l_txn_currency_override_tab.extend;
4234 l_total_qty_tab.extend;
4235 l_addl_qty_tab.extend;
4236 l_total_raw_cost_tab.extend;
4237 l_addl_raw_cost_tab.extend;
4238 l_total_burdened_cost_tab.extend;
4239 l_addl_burdened_cost_tab.extend;
4240 l_total_revenue_tab.extend;
4241 l_addl_revenue_tab.extend;
4242 l_raw_cost_rate_tab.extend;
4243 l_rw_cost_rate_override_tab.extend;
4244 l_b_cost_rate_tab.extend;
4245 l_b_cost_rate_override_tab.extend;
4246 l_bill_rate_tab.extend;
4247 l_bill_rate_override_tab.extend;
4248 l_line_start_date_tab.extend;
4249 l_line_end_date_tab.extend;
4250
4251
4252 l_delete_budget_lines_tab(i) := Null;
4253 l_spread_amts_flag_tab(i) := Null;
4254 l_txn_currency_code_tab(i) := l_project_currency_code;
4255 l_txn_currency_override_tab(i) := Null;
4256 l_total_qty_tab(i) := Null;
4257 l_addl_qty_tab(i) := Null;
4258 l_total_raw_cost_tab(i) := Null;
4259 l_addl_raw_cost_tab(i) := Null;
4260 l_total_burdened_cost_tab(i) := Null;
4261 l_addl_burdened_cost_tab(i) := Null;
4262 l_total_revenue_tab(i) := Null;
4263 l_addl_revenue_tab(i) := Null;
4264 l_raw_cost_rate_tab(i) := Null;
4265 l_rw_cost_rate_override_tab(i) := Null;
4266 l_b_cost_rate_tab(i) := Null;
4267 l_b_cost_rate_override_tab(i) := Null;
4268 l_bill_rate_tab(i) := Null;
4269 l_bill_rate_override_tab(i) := Null;
4270 l_line_start_date_tab(i) := Null;
4271 l_line_end_date_tab(i) := Null;
4272 END LOOP;
4273
4274 -- Bug 4149684: Added p_calling_module and p_rollup_required_flag to parameter list of
4275 -- Calculate API with values 'BUDGET_GENERATION' and 'N', respectively, so that calling
4276 -- PJI rollup api is bypassed for increased performance.
4277
4278 /* Calling the calculate API */
4279 IF p_pa_debug_mode = 'Y' THEN
4280 pa_fp_gen_amount_utils.fp_debug
4281 (p_called_mode => p_called_mode,
4282 p_msg => 'Before calling
4283 pa_fp_calc_plan_pkg.calculate',
4284 p_module_name => l_module_name,
4285 p_log_level => 5);
4286 END IF;
4287
4288 -- Bug 4548733: Added a new pl/sql table to hold billability flag values for the
4289 -- Calculate API and passing it via the p_fp_task_billable_flag_tab IN parameter.
4290
4291 PA_FP_CALC_PLAN_PKG.calculate
4292 (p_calling_module => l_calling_module
4293 ,p_project_id => p_project_id
4294 ,p_budget_version_id => p_budget_version_id
4295 ,p_refresh_rates_flag => l_refresh_rates_flag
4296 ,p_refresh_conv_rates_flag => l_refresh_conv_rates_flag
4297 ,p_spread_required_flag => l_spread_required_flag
4298 ,p_conv_rates_required_flag => l_conv_rates_required_flag
4299 ,p_rollup_required_flag => l_rollup_required_flag
4300 ,p_mass_adjust_flag => l_mass_adjust_flag
4301 ,p_quantity_adj_pct => l_quantity_adj_pct
4302 ,p_cost_rate_adj_pct => l_cost_rate_adj_pct
4303 ,p_burdened_rate_adj_pct => l_burdened_rate_adj_pct
4304 ,p_bill_rate_adj_pct => l_bill_rate_adj_pct
4305 ,p_source_context => l_source_context
4306 ,p_resource_assignment_tab => l_res_assgn_id_tmp_tab
4307 ,p_delete_budget_lines_tab => l_delete_budget_lines_tab
4308 ,p_spread_amts_flag_tab => l_spread_amts_flag_tab
4309 ,p_txn_currency_code_tab => l_txn_currency_code_tab
4310 ,p_txn_currency_override_tab => l_txn_currency_override_tab
4311 ,p_total_qty_tab => l_total_qty_tab
4312 ,p_addl_qty_tab => l_addl_qty_tab
4313 ,p_total_raw_cost_tab => l_total_raw_cost_tab
4314 ,p_addl_raw_cost_tab => l_addl_raw_cost_tab
4315 ,p_total_burdened_cost_tab => l_total_burdened_cost_tab
4316 ,p_addl_burdened_cost_tab => l_addl_burdened_cost_tab
4317 ,p_total_revenue_tab => l_total_revenue_tab
4318 ,p_addl_revenue_tab => l_addl_revenue_tab
4319 ,p_raw_cost_rate_tab => l_raw_cost_rate_tab
4320 ,p_rw_cost_rate_override_tab => l_rw_cost_rate_override_tab
4321 ,p_b_cost_rate_tab => l_b_cost_rate_tab
4322 ,p_b_cost_rate_override_tab => l_b_cost_rate_override_tab
4323 ,p_bill_rate_tab => l_bill_rate_tab
4324 ,p_bill_rate_override_tab => l_bill_rate_override_tab
4325 ,p_line_start_date_tab => l_line_start_date_tab
4326 ,p_line_end_date_tab => l_line_end_date_tab
4327 ,p_fp_task_billable_flag_tab => l_calc_billable_flag_tab /* Added for Bug 4548733 */
4328 ,p_raTxn_rollup_api_call_flag => l_raTxn_rollup_api_call_flag, --Added for IPM new entity ER
4329 X_RETURN_STATUS => X_RETURN_STATUS,
4330 X_MSG_COUNT => X_MSG_COUNT,
4331 X_MSG_DATA => X_MSG_DATA);
4332
4333 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
4334 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4335 END IF;
4336 IF p_pa_debug_mode = 'Y' THEN
4337 pa_fp_gen_amount_utils.fp_debug
4338 (p_called_mode => p_called_mode,
4339 p_msg => 'Status after calling
4340 pa_fp_calc_plan_pkg.calculate: '
4341 ||x_return_status,
4342 p_module_name => l_module_name,
4343 p_log_level => 5);
4344 END IF;
4345
4346 -- M-closeout: Bill Rate Override ER
4347 END IF; -- IF p_fp_cols_rec.x_version_type = 'ALL' ...
4348 -- END OF M-closeout: Bill Rate Override ER
4349
4350 IF P_COMMIT_FLAG = 'Y' THEN
4351 COMMIT;
4352 END IF;
4353
4354 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
4355 PA_DEBUG.reset_err_stack;
4356 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
4357 PA_DEBUG.Reset_Curr_Function;
4358 END IF;
4359
4360
4361 EXCEPTION
4362
4363 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
4364 -- Bug Fix: 4569365. Removed MRC code.
4365 -- PA_MRC_FINPLAN.G_CALLING_MODULE := Null;
4366 l_msg_count := FND_MSG_PUB.count_msg;
4367 IF l_msg_count = 1 THEN
4368 PA_INTERFACE_UTILS_PUB.get_messages
4369 (p_encoded => FND_API.G_TRUE
4370 ,p_msg_index => 1
4371 ,p_msg_count => l_msg_count
4372 ,p_msg_data => l_msg_data
4373 ,p_data => l_data
4374 ,p_msg_index_out => l_msg_index_out);
4375 x_msg_data := l_data;
4376 x_msg_count := l_msg_count;
4377 ELSE
4378 x_msg_count := l_msg_count;
4379 END IF;
4380 ROLLBACK;
4381 x_return_status := FND_API.G_RET_STS_ERROR;
4382
4383 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
4384 PA_DEBUG.reset_err_stack;
4385 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
4386 PA_DEBUG.Reset_Curr_Function;
4387 END IF;
4388
4389 RAISE;
4390
4391 WHEN OTHERS THEN
4392 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4393 x_msg_data := SUBSTR(SQLERRM,1,240);
4394 FND_MSG_PUB.add_exc_msg
4395 ( p_pkg_name => 'PA_FP_GEN_BUDGET_AMT_PUB'
4396 ,p_procedure_name => 'GENERATE_BUDGET_AMT_RES_SCH');
4397
4398 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
4399 PA_DEBUG.reset_err_stack;
4400 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
4401 PA_DEBUG.Reset_Curr_Function;
4402 END IF;
4403
4404 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4405 END GENERATE_BUDGET_AMT_RES_SCH;
4406
4407 PROCEDURE CREATE_RES_ASG
4408 (P_PROJECT_ID IN PA_PROJ_FP_OPTIONS.PROJECT_ID%TYPE,
4409 P_BUDGET_VERSION_ID IN PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE,
4410 P_STRU_SHARING_CODE IN PA_PROJECTS_ALL.STRUCTURE_SHARING_CODE%TYPE,
4411 P_GEN_SRC_CODE IN PA_PROJ_FP_OPTIONS.GEN_ALL_SRC_CODE%TYPE,
4412 P_FP_COLS_REC IN PA_FP_GEN_AMOUNT_UTILS.FP_COLS,
4413 P_WP_STRUCTURE_VER_ID IN PA_BUDGET_VERSIONS.PROJECT_STRUCTURE_VERSION_ID%TYPE,
4414 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
4415 X_MSG_COUNT OUT NOCOPY NUMBER,
4416 X_MSG_DATA OUT NOCOPY VARCHAR2) IS
4417
4418 l_module_name VARCHAR2(200) := 'pa.plsql.PA_FP_GEN_BUDGET_AMT_PUB.CREATE_RES_ASG';
4419
4420 --Cursor used when planning type is Project
4421 CURSOR RES_ASG1 IS
4422 SELECT T.RESOURCE_LIST_MEMBER_ID,
4423 T.CBS_ELEMENT_ID, --bug#16827157
4424 MIN(T.TXN_PLANNING_START_DATE),
4425 MAX(T.TXN_PLANNING_END_DATE)
4426 FROM PA_RES_LIST_MAP_TMP4 T
4427 WHERE NOT EXISTS
4428 (SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/
4429 P.RESOURCE_LIST_MEMBER_ID
4430 FROM PA_RESOURCE_ASSIGNMENTS P
4431 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
4432 AND NVL(P.TASK_ID,0) = 0
4433 AND P.PROJECT_ASSIGNMENT_ID = -1
4434 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
4435 AND NVL(T.CBS_ELEMENT_ID,-1) = NVL(P.CBS_ELEMENT_ID,-1))--bug#16827157
4436 GROUP BY T.RESOURCE_LIST_MEMBER_ID, T.CBS_ELEMENT_ID;--bug#16827157
4437
4438 --Cursor used when planning type is Lowest task (Financial task only)
4439 CURSOR RES_ASG2 IS
4440 SELECT T.RESOURCE_LIST_MEMBER_ID,
4441 T.CBS_ELEMENT_ID, --bug#16827157
4442 NVL(T.TXN_TASK_ID,0),
4443 MIN(T.TXN_PLANNING_START_DATE),
4444 MAX(T.TXN_PLANNING_END_DATE)
4445 FROM PA_RES_LIST_MAP_TMP4 T
4446 WHERE NOT EXISTS
4447 (SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/ 1
4448 FROM PA_RESOURCE_ASSIGNMENTS P
4449 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
4450 AND NVL(P.TASK_ID,0) = NVL(T.TXN_TASK_ID,0)
4451 AND P.PROJECT_ASSIGNMENT_ID = -1
4452 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
4453 AND NVL(T.CBS_ELEMENT_ID,-1) = NVL(P.CBS_ELEMENT_ID,-1)) --bug#16827157
4454 GROUP BY T.RESOURCE_LIST_MEMBER_ID,T.CBS_ELEMENT_ID, --bug#16827157
4455 NVL(T.TXN_TASK_ID,0);
4456
4457 --Cursor used when planning type is Lowest task (Financial task only) and CBS enabled -- bug#16200605
4458 CURSOR RES_ASG2_CBS IS
4459 SELECT T.RESOURCE_LIST_MEMBER_ID,
4460 NVL(T.TXN_TASK_ID,0),
4461 NVL(T.TXN_SOURCE_ID,0),
4462 MIN(T.TXN_PLANNING_START_DATE),
4463 MAX(T.TXN_PLANNING_END_DATE),
4464 PRA.CBS_ELEMENT_ID
4465 FROM PA_RES_LIST_MAP_TMP4 T,
4466 PA_RESOURCE_ASSIGNMENTS PRA
4467 WHERE
4468 PRA.RESOURCE_ASSIGNMENT_ID = T.TXN_SOURCE_ID AND
4469 NOT EXISTS
4470 (SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/ 1
4471 FROM PA_RESOURCE_ASSIGNMENTS P
4472 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
4473 AND NVL(P.TASK_ID,0) = NVL(T.TXN_TASK_ID,0)
4474 AND P.PROJECT_ASSIGNMENT_ID = -1
4475 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID)
4476 GROUP BY T.RESOURCE_LIST_MEMBER_ID,
4477 NVL(T.TXN_TASK_ID,0),
4478 NVL(T.TXN_SOURCE_ID,0),
4479 PRA.CBS_ELEMENT_ID;
4480
4481
4482 --Cursor used when planning type is Top task(Financial task only)
4483 CURSOR RES_ASG3 IS
4484 SELECT T.RESOURCE_LIST_MEMBER_ID,
4485 T.CBS_ELEMENT_ID, --bug#16827157
4486 NVL(PAT.TOP_TASK_ID,0),
4487 MIN(T.TXN_PLANNING_START_DATE),
4488 MAX(T.TXN_PLANNING_END_DATE)
4489 FROM PA_RES_LIST_MAP_TMP4 T,
4490 PA_TASKS PAT
4491 WHERE NVL(T.TXN_TASK_ID,0) > 0
4492 AND NVL(T.TXN_TASK_ID,0) = PAT.TASK_ID
4493 AND NOT EXISTS
4494 (SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/ 1
4495 FROM PA_RESOURCE_ASSIGNMENTS P,PA_TASKS TS
4496 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
4497 AND NVL(T.TXN_TASK_ID,0) > 0
4498 AND TS.TASK_ID = NVL(T.TXN_TASK_ID,0)
4499 AND NVL(TS.TOP_TASK_ID,0) = NVL(P.TASK_ID,0)
4500 AND P.PROJECT_ASSIGNMENT_ID = -1
4501 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
4502 AND NVL(T.CBS_ELEMENT_ID,-1) = NVL(P.CBS_ELEMENT_ID,-1))--bug#16827157
4503 GROUP BY T.RESOURCE_LIST_MEMBER_ID,
4504 T.CBS_ELEMENT_ID, --bug#16827157
4505 NVL(PAT.TOP_TASK_ID,0)
4506 UNION
4507 SELECT T.RESOURCE_LIST_MEMBER_ID,
4508 T.CBS_ELEMENT_ID, --bug#16827157
4509 0,
4510 MIN(T.TXN_PLANNING_START_DATE),
4511 MAX(T.TXN_PLANNING_END_DATE)
4512 FROM PA_RES_LIST_MAP_TMP4 T
4513 WHERE NVL(T.TXN_TASK_ID,0) = 0
4514 AND NOT EXISTS
4515 (SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/ 1
4516 FROM PA_RESOURCE_ASSIGNMENTS P
4517 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
4518 AND NVL(T.TXN_TASK_ID,0) = 0
4519 AND NVL(P.TASK_ID,0) = 0
4520 AND P.RESOURCE_LIST_MEMBER_ID = T.RESOURCE_LIST_MEMBER_ID
4521 AND NVL(T.CBS_ELEMENT_ID,-1) = NVL(P.CBS_ELEMENT_ID,-1) --bug#16827157
4522 AND P.PROJECT_ASSIGNMENT_ID = -1)
4523 GROUP BY T.RESOURCE_LIST_MEMBER_ID,
4524 T.CBS_ELEMENT_ID, --bug#16827157
4525 0;
4526
4527 --Cursor used when planning type is Top task(Financial task only)and CBS enabled -- bug#16200605
4528 CURSOR RES_ASG3_CBS IS
4529 SELECT T.RESOURCE_LIST_MEMBER_ID,
4530 NVL(PAT.TOP_TASK_ID,0),
4531 MIN(T.TXN_PLANNING_START_DATE),
4532 MAX(T.TXN_PLANNING_END_DATE),
4533 PRA.CBS_ELEMENT_ID
4534 FROM PA_RES_LIST_MAP_TMP4 T,
4535 PA_TASKS PAT,
4536 PA_RESOURCE_ASSIGNMENTS PRA,
4537 PA_ALTERNATE_TASKS PALT
4538 WHERE NVL(T.TXN_TASK_ID,0) > 0
4539 AND NVL(T.TXN_TASK_ID,0) = PAT.TASK_ID
4540 AND PALT.CBS_ELEMENT_ID = PRA.CBS_ELEMENT_ID
4541 AND PALT.PROJ_ELEMENT_ID = NVL(PAT.TOP_TASK_ID,0)
4542 AND PRA.RESOURCE_ASSIGNMENT_ID = T.TXN_SOURCE_ID
4543 AND NOT EXISTS
4544 (SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/ 1
4545 FROM PA_RESOURCE_ASSIGNMENTS P,PA_TASKS TS
4546 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
4547 AND NVL(T.TXN_TASK_ID,0) > 0
4548 AND TS.TASK_ID = NVL(T.TXN_TASK_ID,0)
4549 AND NVL(TS.TOP_TASK_ID,0) = NVL(P.TASK_ID,0)
4550 AND P.PROJECT_ASSIGNMENT_ID = -1
4551 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID)
4552 GROUP BY T.RESOURCE_LIST_MEMBER_ID,
4553 NVL(PAT.TOP_TASK_ID,0),
4554 PRA.CBS_ELEMENT_ID
4555 UNION
4556 SELECT T.RESOURCE_LIST_MEMBER_ID,
4557 0,
4558 MIN(T.TXN_PLANNING_START_DATE),
4559 MAX(T.TXN_PLANNING_END_DATE),
4560 null
4561 FROM PA_RES_LIST_MAP_TMP4 T
4562 WHERE NVL(T.TXN_TASK_ID,0) = 0
4563 AND NOT EXISTS
4564 (SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/ 1
4565 FROM PA_RESOURCE_ASSIGNMENTS P
4566 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
4567 AND NVL(T.TXN_TASK_ID,0) = 0
4568 AND NVL(P.TASK_ID,0) = 0
4569 AND P.RESOURCE_LIST_MEMBER_ID = T.RESOURCE_LIST_MEMBER_ID
4570 AND P.PROJECT_ASSIGNMENT_ID = -1)
4571 GROUP BY T.RESOURCE_LIST_MEMBER_ID,
4572 0, null;
4573
4574
4575 /* Cursor used when planning type is Lowest task
4576 (both Financial task and Workplan task) */
4577 /* the union clause takes care of bringing the project level records. */
4578 CURSOR RES_ASG4 IS
4579 SELECT T.RESOURCE_LIST_MEMBER_ID resource_list_member_id,
4580 T.CBS_ELEMENT_ID, --bug#16827157
4581 NVL(V1.MAPPED_FIN_TASK_ID,0) mapped_fin_task_id,
4582 NVL(V1.MAPPED_FIN_TASK_VERSION_ID,0) mapped_fin_task_version_id,
4583 MIN(T.TXN_PLANNING_START_DATE) txn_planning_start_date,
4584 MAX(T.TXN_PLANNING_END_DATE) txn_planning_end_date
4585 FROM PA_RES_LIST_MAP_TMP4 T,
4586 PA_MAP_WP_TO_FIN_TASKS_V V1
4587 WHERE NOT EXISTS
4588 (SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/ 1
4589 FROM PA_RESOURCE_ASSIGNMENTS P,PA_MAP_WP_TO_FIN_TASKS_V V
4590 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
4591 AND V.PARENT_STRUCTURE_VERSION_ID = P_WP_STRUCTURE_VER_ID
4592 AND nvl(T.TXN_TASK_ID,0) = NVL(V.PROJ_ELEMENT_ID,0)
4593 AND P.PROJECT_ASSIGNMENT_ID = -1
4594 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
4595 AND NVL(T.CBS_ELEMENT_ID,-1) = NVL(P.CBS_ELEMENT_ID,-1) --bug#16827157
4596 AND NVL(V.MAPPED_FIN_TASK_ID,0) = NVL(P.TASK_ID,0))
4597 AND V1.PARENT_STRUCTURE_VERSION_ID = P_WP_STRUCTURE_VER_ID
4598 AND NVL(T.TXN_TASK_ID,0) = NVL(V1.PROJ_ELEMENT_ID,0)
4599 AND NVL(T.TXN_TASK_ID,0) > 0
4600 GROUP BY
4601 T.RESOURCE_LIST_MEMBER_ID,
4602 T.CBS_ELEMENT_ID, --bug#16827157
4603 NVL(V1.MAPPED_FIN_TASK_ID,0),
4604 NVL(V1.MAPPED_FIN_TASK_VERSION_ID,0)
4605 union
4606 SELECT T.RESOURCE_LIST_MEMBER_ID resource_list_member_id,
4607 T.CBS_ELEMENT_ID, --bug#16827157
4608 0 mapped_fin_task_id,
4609 0 mapped_fin_task_version_id,
4610 MIN(T.TXN_PLANNING_START_DATE) txn_planning_start_date,
4611 MAX(T.TXN_PLANNING_END_DATE) txn_planning_end_date
4612 FROM PA_RES_LIST_MAP_TMP4 T
4613 WHERE NVL(T.TXN_TASK_ID,0) = 0 AND
4614 NOT EXISTS
4615 (SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/ 1
4616 FROM PA_RESOURCE_ASSIGNMENTS P
4617 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
4618 AND P.PROJECT_ASSIGNMENT_ID = -1
4619 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
4620 AND NVL(T.CBS_ELEMENT_ID,-1) = NVL(P.CBS_ELEMENT_ID,-1) --bug#16827157
4621 AND NVL(P.TASK_ID,0) = 0 )
4622 GROUP BY T.RESOURCE_LIST_MEMBER_ID,
4623 T.CBS_ELEMENT_ID, --bug#16827157
4624 0,
4625 0;
4626
4627 /* Cursor used when planning type is Lowest task
4628 (both Financial task and Workplan task) */
4629 /* the union clause takes care of bringing the project level records. and CBS enabled -- bug#16200605
4630 */
4631 CURSOR RES_ASG4_CBS IS
4632 SELECT T.RESOURCE_LIST_MEMBER_ID resource_list_member_id,
4633 NVL(V1.MAPPED_FIN_TASK_ID,0) mapped_fin_task_id,
4634 NVL(V1.MAPPED_FIN_TASK_VERSION_ID,0) mapped_fin_task_version_id,
4635 MIN(T.TXN_PLANNING_START_DATE) txn_planning_start_date,
4636 MAX(T.TXN_PLANNING_END_DATE) txn_planning_end_date,
4637 PRA.CBS_ELEMENT_ID cbs_element_id
4638 FROM PA_RES_LIST_MAP_TMP4 T,
4639 PA_MAP_WP_TO_FIN_TASKS_V V1,
4640 PA_RESOURCE_ASSIGNMENTS PRA,
4641 PA_ALTERNATE_TASKS PAT
4642 WHERE NOT EXISTS
4643 (SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/ 1
4644 FROM PA_RESOURCE_ASSIGNMENTS P,PA_MAP_WP_TO_FIN_TASKS_V V
4645 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
4646 AND V.PARENT_STRUCTURE_VERSION_ID = P_WP_STRUCTURE_VER_ID
4647 AND nvl(T.TXN_TASK_ID,0) = NVL(V.PROJ_ELEMENT_ID,0)
4648 AND P.PROJECT_ASSIGNMENT_ID = -1
4649 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
4650 AND NVL(V.MAPPED_FIN_TASK_ID,0) = NVL(P.TASK_ID,0))
4651 AND V1.PARENT_STRUCTURE_VERSION_ID = P_WP_STRUCTURE_VER_ID
4652 AND NVL(T.TXN_TASK_ID,0) = NVL(V1.PROJ_ELEMENT_ID,0)
4653 AND NVL(T.TXN_TASK_ID,0) > 0
4654 AND PRA.RESOURCE_ASSIGNMENT_ID = T.TXN_SOURCE_ID
4655 AND PAT.CBS_ELEMENT_ID = PRA.CBS_ELEMENT_ID
4656 AND PAT.PROJ_ELEMENT_ID = nvl(V1.MAPPED_FIN_TASK_ID,0)
4657 GROUP BY
4658 T.RESOURCE_LIST_MEMBER_ID,
4659 NVL(V1.MAPPED_FIN_TASK_ID,0),
4660 NVL(V1.MAPPED_FIN_TASK_VERSION_ID,0),
4661 PRA.CBS_ELEMENT_ID
4662 union
4663 SELECT T.RESOURCE_LIST_MEMBER_ID resource_list_member_id,
4664 0 mapped_fin_task_id,
4665 0 mapped_fin_task_version_id,
4666 MIN(T.TXN_PLANNING_START_DATE) txn_planning_start_date,
4667 MAX(T.TXN_PLANNING_END_DATE) txn_planning_end_date,
4668 null cbs_element_id
4669 FROM PA_RES_LIST_MAP_TMP4 T
4670 WHERE NVL(T.TXN_TASK_ID,0) = 0 AND
4671 NOT EXISTS
4672 (SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/ 1
4673 FROM PA_RESOURCE_ASSIGNMENTS P
4674 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
4675 AND P.PROJECT_ASSIGNMENT_ID = -1
4676 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
4677 AND NVL(P.TASK_ID,0) = 0 )
4678 GROUP BY T.RESOURCE_LIST_MEMBER_ID,
4679 0,
4680 0,
4681 null;
4682
4683 /* Cursor used when planning type is Top task
4684 (both Financial task and Workplan task)*/
4685 CURSOR RES_ASG5 IS
4686 SELECT T.RESOURCE_LIST_MEMBER_ID,
4687 T.CBS_ELEMENT_ID, --bug#16827157
4688 NVL(PAT.TOP_TASK_ID,0),
4689 NVL(pa_proj_elements_utils.get_task_version_id(
4690 v1.MAPPED_FIN_STR_VERSION_ID,pat.top_task_id),0),
4691 MIN(T.TXN_PLANNING_START_DATE),
4692 MAX(T.TXN_PLANNING_END_DATE)
4693 FROM PA_RES_LIST_MAP_TMP4 T,
4694 PA_TASKS PAT,
4695 PA_MAP_WP_TO_FIN_TASKS_V V1
4696 WHERE NVL(V1.MAPPED_FIN_TASK_ID,0) = PAT.TASK_ID (+)
4697 AND NOT EXISTS
4698 (SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/ 1
4699 FROM PA_RESOURCE_ASSIGNMENTS P,PA_TASKS TS,PA_MAP_WP_TO_FIN_TASKS_V V
4700 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
4701 AND V.PARENT_STRUCTURE_VERSION_ID = P_WP_STRUCTURE_VER_ID
4702 AND NVL(T.TXN_TASK_ID,0) = NVL(V.PROJ_ELEMENT_ID,0)
4703 AND TS.TASK_ID(+) = NVL(V.MAPPED_FIN_TASK_ID,0)
4704 AND P.PROJECT_ASSIGNMENT_ID = -1
4705 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
4706 AND NVL(T.CBS_ELEMENT_ID,-1) = NVL(P.CBS_ELEMENT_ID,-1) --bug#16827157
4707 AND NVL(TS.TOP_TASK_ID,0) = NVL(P.TASK_ID,0))
4708 AND V1.PARENT_STRUCTURE_VERSION_ID = P_WP_STRUCTURE_VER_ID
4709 AND NVL(T.TXN_TASK_ID,0) = NVL(V1.PROJ_ELEMENT_ID,0)
4710 AND NVL(T.TXN_TASK_ID,0) > 0
4711 GROUP BY T.RESOURCE_LIST_MEMBER_ID,
4712 T.CBS_ELEMENT_ID, --bug#16827157
4713 NVL(PAT.TOP_TASK_ID,0),
4714 NVL(pa_proj_elements_utils.get_task_version_id(
4715 v1.MAPPED_FIN_STR_VERSION_ID,pat.top_task_id),0)
4716 union
4717 SELECT T.RESOURCE_LIST_MEMBER_ID resource_list_member_id,
4718 T.CBS_ELEMENT_ID, --bug#16827157
4719 0,
4720 0,
4721 MIN(T.TXN_PLANNING_START_DATE) txn_planning_start_date,
4722 MAX(T.TXN_PLANNING_END_DATE) txn_planning_end_date
4723 FROM PA_RES_LIST_MAP_TMP4 T
4724 WHERE NVL(T.TXN_TASK_ID,0) = 0 AND
4725 NOT EXISTS
4726 (SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/ 1
4727 FROM PA_RESOURCE_ASSIGNMENTS P
4728 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
4729 AND P.PROJECT_ASSIGNMENT_ID = -1
4730 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
4731 AND NVL(T.CBS_ELEMENT_ID,-1) = NVL(P.CBS_ELEMENT_ID,-1) --bug#16827157
4732 AND NVL(P.TASK_ID,0) = 0)
4733 GROUP BY T.RESOURCE_LIST_MEMBER_ID,
4734 T.CBS_ELEMENT_ID, --bug#16827157
4735 0,
4736 0;
4737
4738 --Cursor to get the cbs_element_id when CBS is enabled -- bug#16200605
4739 CURSOR GET_CBS_ELEMENT_ID(c_res_asgn_id NUMBER) IS
4740 SELECT CBS_ELEMENT_ID
4741 FROM PA_RESOURCE_ASSIGNMENTS T
4742 WHERE T.RESOURCE_ASSIGNMENT_ID = c_res_asgn_id;
4743
4744 l_stru_sharing_code PA_PROJECTS_ALL.STRUCTURE_SHARING_CODE%TYPE;
4745 l_unique_rlm_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
4746 l_res_list_member_id PA_PLSQL_DATATYPES.IdTabTyp;
4747 l_task_id PA_PLSQL_DATATYPES.IdTabTyp;
4748 l_res_asgn_id PA_PLSQL_DATATYPES.IdTabTyp; -- bug#16200605
4749 l_mapped_fin_task_version_id PA_PLSQL_DATATYPES.IdTabTyp;
4750 l_start_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
4751 l_end_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
4752 l_last_updated_by NUMBER := FND_GLOBAL.user_id;
4753 l_last_update_login NUMBER := FND_GLOBAL.login_id;
4754 l_sysdate DATE := SYSDATE;
4755 l_ret_status VARCHAR2(100);
4756 l_msg_count NUMBER;
4757 l_msg_data VARCHAR2(2000);
4758 l_data VARCHAR2(2000);
4759 l_msg_index_out NUMBER:=0;
4760 l_project_id NUMBER(15);
4761
4762 --Local Variables for calling get_resource_defaults API
4763 l_da_resource_list_members_tab SYSTEM.PA_NUM_TBL_TYPE:=SYSTEM.PA_NUM_TBL_TYPE();
4764 l_da_resource_class_flag_tab SYSTEM.PA_VARCHAR2_1_TBL_TYPE;
4765 l_da_resource_class_code_tab SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
4766 l_da_resource_class_id_tab SYSTEM.PA_NUM_TBL_TYPE;
4767 l_da_res_type_code_tab SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
4768 l_da_person_id_tab SYSTEM.PA_NUM_TBL_TYPE;
4769 l_da_job_id_tab SYSTEM.PA_NUM_TBL_TYPE;
4770 l_da_person_type_code_tab SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
4771 l_da_named_role_tab SYSTEM.PA_VARCHAR2_80_TBL_TYPE;
4772 l_da_bom_resource_id_tab SYSTEM.PA_NUM_TBL_TYPE;
4773 l_da_non_labor_resource_tab SYSTEM.PA_VARCHAR2_20_TBL_TYPE;
4774 l_da_inventory_item_id_tab SYSTEM.PA_NUM_TBL_TYPE;
4775 l_da_item_category_id_tab SYSTEM.PA_NUM_TBL_TYPE;
4776 l_da_project_role_id_tab SYSTEM.PA_NUM_TBL_TYPE;
4777 l_da_organization_id_tab SYSTEM.PA_NUM_TBL_TYPE;
4778 l_da_fc_res_type_code_tab SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
4779 l_da_expenditure_type_tab SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
4780 l_da_expenditure_category_tab SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
4781 l_da_event_type_tab SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
4782 l_da_revenue_category_code_tab SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
4783 l_da_supplier_id_tab SYSTEM.PA_NUM_TBL_TYPE;
4784 l_da_spread_curve_id_tab SYSTEM.PA_NUM_TBL_TYPE;
4785 l_da_etc_method_code_tab SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
4786 l_da_mfc_cost_type_id_tab SYSTEM.PA_NUM_TBL_TYPE;
4787 l_da_incurred_by_res_flag_tab SYSTEM.PA_VARCHAR2_1_TBL_TYPE;
4788 l_da_incur_by_res_cls_code_tab SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
4789 l_da_incur_by_role_id_tab SYSTEM.PA_NUM_TBL_TYPE;
4790 l_da_unit_of_measure_tab SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
4791 l_da_org_id_tab SYSTEM.PA_NUM_TBL_TYPE;
4792 l_da_rate_based_flag_tab SYSTEM.PA_VARCHAR2_1_TBL_TYPE;
4793 l_da_rate_expenditure_type_tab SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
4794 l_da_rate_func_curr_code_tab SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
4795 l_da_incur_by_res_type_tab SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
4796
4797 /* Performance-Variables to replace the literals in the Insert into
4798 pa_resource_assignments stmts. */
4799 l_task_id_01 NUMBER:=0;
4800 l_proj_asg_id_minus1 NUMBER:=-1;
4801 l_res_as_type_USER_ENTERED VARCHAR2(30):='USER_ENTERED';
4802 l_rec_ver_number_1 NUMBER:=1;
4803
4804 l_count NUMBER;
4805 l_count1 NUMBER;
4806 l_wp_version_flag pa_budget_Versions.wp_version_flag%TYPE;
4807 l_gen_src_code pa_proj_fp_options.gen_all_src_code%TYPE := null;
4808
4809 --Bug 4052036. This tbl will hold the ra ids that are inserted in this API
4810 l_ins_ra_id_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
4811 l_Cbs_Element_Id_tab SYSTEM.pa_num_tbl_type := SYSTEM.PA_NUM_TBL_TYPE(); -- bug#16200605
4812 l_Cbs_Enabled VARCHAR2(1) := 'N'; -- bug#16200605
4813 l_cbs_element_id NUMBER; -- bug#16200605
4814 l_cbs_ele_ids PA_PLSQL_DATATYPES.IdTabTyp; -- bug#16200605
4815 BEGIN
4816 X_MSG_COUNT := 0;
4817 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
4818
4819 l_project_id := p_project_id;
4820
4821 IF p_pa_debug_mode = 'Y' THEN
4822 PA_DEBUG.SET_CURR_FUNCTION
4823 ( p_function => 'CREATE_RES_ASG',
4824 p_debug_mode => p_pa_debug_mode );
4825 END IF;
4826
4827 l_stru_sharing_code :=
4828 PA_PROJECT_STRUCTURE_UTILS.GET_STRUCTURE_SHARING_CODE
4829 ( P_PROJECT_ID=> P_PROJECT_ID );
4830
4831 /* bug 4160375 The generation source code should always be populated
4832 whenever the planning resources are created. The source could be
4833 the primary source (FP / WP / Res Sch) or the additional options. */
4834
4835 l_gen_src_code := p_gen_src_code;
4836
4837 l_Cbs_Enabled := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => P_PROJECT_ID); -- bug#16200605
4838
4839
4840 /*
4841 --test# bhanu
4842 log1('l_project_id : '||l_project_id);
4843 log1('l_gen_src_code : '||l_gen_src_code);
4844 log1('l_stru_sharing_code : '||l_stru_sharing_code);
4845 log1('l_Cbs_Enabled : '||l_Cbs_Enabled);
4846 */
4847
4848 --IF (true OR l_Cbs_Enabled = 'N') THEN -- bug#16200605
4849 IF P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE = 'P' OR P_GEN_SRC_CODE = 'RESOURCE_SCHEDULE' THEN
4850 OPEN RES_ASG1;
4851 FETCH RES_ASG1
4852 BULK COLLECT
4853 INTO l_res_list_member_id,
4854 l_cbs_ele_ids,--bug#16827157
4855 l_start_date_tab,
4856 l_end_date_tab;
4857 CLOSE RES_ASG1;
4858
4859 IF l_res_list_member_id.count = 0 THEN
4860 IF P_PA_DEBUG_MODE = 'Y' THEN
4861 PA_DEBUG.Reset_Curr_Function;
4862 END IF;
4863 RETURN;
4864 END IF;
4865
4866 SELECT NVL(wp_version_flag,'N')
4867 INTO l_wp_version_flag
4868 FROM pa_budget_versions
4869 WHERE budget_version_id=P_BUDGET_VERSION_ID;
4870
4871 FORALL i IN 1..l_res_list_member_id.count
4872 INSERT INTO PA_RESOURCE_ASSIGNMENTS(RESOURCE_ASSIGNMENT_ID,
4873 BUDGET_VERSION_ID,
4874 PROJECT_ID,
4875 TASK_ID,
4876 RESOURCE_LIST_MEMBER_ID,
4877 CBS_ELEMENT_ID, --bug#16827157
4878 LAST_UPDATE_DATE,
4879 LAST_UPDATED_BY,
4880 CREATION_DATE,
4881 CREATED_BY,
4882 LAST_UPDATE_LOGIN,
4883 PROJECT_ASSIGNMENT_ID,
4884 resource_assignment_type,
4885 record_version_number,
4886 planning_start_date,
4887 planning_end_date,
4888 transaction_source_code)
4889 VALUES (PA_RESOURCE_ASSIGNMENTS_S.nextval,
4890 P_BUDGET_VERSION_ID,
4891 P_PROJECT_ID,
4892 l_task_id_01,
4893 l_res_list_member_id(i),
4894 l_cbs_ele_ids(i),--bug#16827157
4895 l_sysdate,
4896 l_last_updated_by,
4897 l_sysdate,
4898 l_last_updated_by,
4899 l_last_update_login,
4900 l_proj_asg_id_minus1 ,
4901 l_res_as_type_USER_ENTERED,
4902 l_rec_ver_number_1 ,
4903 l_start_date_tab(i),
4904 l_end_date_tab(i),
4905 l_gen_src_code )
4906 RETURNING resource_assignment_id BULK COLLECT INTO l_ins_ra_id_tbl;
4907
4908 ELSIF P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE = 'L'
4909 AND (l_stru_sharing_code IS NULL OR
4910 l_stru_sharing_code = 'SHARE_FULL' OR
4911 P_GEN_SRC_CODE IN ( 'FINANCIAL_PLAN',
4912 'OPEN_COMMITMENTS','BILLING_EVENTS' )) THEN
4913
4914 OPEN RES_ASG2;
4915 FETCH RES_ASG2
4916 BULK COLLECT
4917 INTO l_res_list_member_id,
4918 l_cbs_ele_ids,--bug#16827157
4919 l_task_id,
4920 l_start_date_tab,
4921 l_end_date_tab;
4922 CLOSE RES_ASG2;
4923
4924 IF l_res_list_member_id.count = 0 then
4925 IF P_PA_DEBUG_MODE = 'Y' THEN
4926 PA_DEBUG.Reset_Curr_Function;
4927 END IF;
4928 RETURN;
4929 END IF;
4930
4931 FORALL i IN 1..l_res_list_member_id.count
4932 INSERT INTO PA_RESOURCE_ASSIGNMENTS(RESOURCE_ASSIGNMENT_ID,
4933 BUDGET_VERSION_ID,
4934 PROJECT_ID,
4935 TASK_ID,
4936 RESOURCE_LIST_MEMBER_ID,
4937 CBS_ELEMENT_ID, --bug#16827157
4938 LAST_UPDATE_DATE,
4939 LAST_UPDATED_BY,
4940 CREATION_DATE,
4941 CREATED_BY,
4942 LAST_UPDATE_LOGIN,
4943 PROJECT_ASSIGNMENT_ID,
4944 resource_assignment_type,
4945 record_version_number,
4946 planning_start_date,
4947 planning_end_date,
4948 transaction_source_code)
4949 VALUES (PA_RESOURCE_ASSIGNMENTS_S.nextval,
4950 P_BUDGET_VERSION_ID,
4951 P_PROJECT_ID,
4952 l_task_id(i),
4953 l_res_list_member_id(i),
4954 l_cbs_ele_ids(i),--bug#16827157
4955 l_sysdate,
4956 l_last_updated_by,
4957 l_sysdate,
4958 l_last_updated_by,
4959 l_last_update_login,
4960 l_proj_asg_id_minus1,
4961 l_res_as_type_USER_ENTERED,
4962 l_rec_ver_number_1,
4963 l_start_date_tab(i),
4964 l_end_date_tab(i),
4965 l_gen_src_code )
4966 RETURNING resource_assignment_id BULK COLLECT INTO l_ins_ra_id_tbl;
4967 ELSIF P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE = 'T'
4968 AND ( l_stru_sharing_code IS NULL OR
4969 l_stru_sharing_code = 'SHARE_FULL' OR
4970 P_GEN_SRC_CODE IN ( 'FINANCIAL_PLAN',
4971 'OPEN_COMMITMENTS','BILLING_EVENTS' )) THEN
4972
4973 OPEN RES_ASG3;
4974 FETCH RES_ASG3
4975 BULK COLLECT
4976 INTO l_res_list_member_id,
4977 l_cbs_ele_ids,--bug#16827157
4978 l_task_id,
4979 l_start_date_tab,
4980 l_end_date_tab;
4981 CLOSE RES_ASG3;
4982
4983 IF l_res_list_member_id.count = 0 then
4984 IF P_PA_DEBUG_MODE = 'Y' THEN
4985 PA_DEBUG.Reset_Curr_Function;
4986 END IF;
4987 RETURN;
4988 END IF;
4989 FORALL i IN 1..l_res_list_member_id.count
4990 INSERT INTO PA_RESOURCE_ASSIGNMENTS(RESOURCE_ASSIGNMENT_ID,
4991 BUDGET_VERSION_ID,
4992 PROJECT_ID,
4993 TASK_ID,
4994 RESOURCE_LIST_MEMBER_ID,
4995 CBS_ELEMENT_ID, --bug#16827157
4996 LAST_UPDATE_DATE,
4997 LAST_UPDATED_BY,
4998 CREATION_DATE,
4999 CREATED_BY,
5000 LAST_UPDATE_LOGIN,
5001 PROJECT_ASSIGNMENT_ID,
5002 resource_assignment_type,
5003 record_version_number,
5004 planning_start_date,
5005 planning_end_date,
5006 transaction_source_code)
5007 VALUES (PA_RESOURCE_ASSIGNMENTS_S.nextval,
5008 P_BUDGET_VERSION_ID,
5009 P_PROJECT_ID,
5010 l_task_id(i),
5011 l_res_list_member_id(i),
5012 l_cbs_ele_ids(i),--bug#16827157
5013 l_sysdate,
5014 l_last_updated_by,
5015 l_sysdate,
5016 l_last_updated_by,
5017 l_last_update_login,
5018 l_proj_asg_id_minus1,
5019 l_res_as_type_USER_ENTERED,
5020 l_rec_ver_number_1,
5021 l_start_date_tab(i),
5022 l_end_date_tab(i),
5023 l_gen_src_code )
5024 RETURNING resource_assignment_id BULK COLLECT INTO l_ins_ra_id_tbl;
5025
5026 ELSIF P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE = 'L'
5027 AND l_stru_sharing_code IS NOT NULL THEN
5028 --dbms_output.put('before res_asg4 cursor');
5029
5030 --dbms_output.put('p_wp_structure_ver_id'||p_wp_structure_ver_id);
5031 --insert into ltmp4 select * from PA_RES_LIST_MAP_TMP4;
5032 --insert into lra select * from pa_resource_assignments where budget_version_id = p_budget_version_id;
5033 OPEN RES_ASG4;
5034 FETCH RES_ASG4
5035 BULK COLLECT
5036 INTO l_res_list_member_id,
5037 l_cbs_ele_ids,--bug#16827157
5038 l_task_id,
5039 l_mapped_fin_task_version_id,
5040 l_start_date_tab,
5041 l_end_date_tab;
5042 CLOSE RES_ASG4;
5043
5044 IF l_res_list_member_id.count = 0 then
5045 IF P_PA_DEBUG_MODE = 'Y' THEN
5046 PA_DEBUG.Reset_Curr_Function;
5047 END IF;
5048 RETURN;
5049 END IF;
5050 IF P_PA_DEBUG_MODE = 'Y' THEN
5051 FOR i IN 1..l_res_list_member_id.count LOOP
5052 pa_fp_gen_amount_utils.fp_debug
5053 (p_msg => 'in res_asg4:@@rlm in cursor:'||l_res_list_member_id(i)
5054 ||'; @@task in cursor:'||l_task_id(i)
5055 ||';@@start date in cursor:'||l_start_date_tab(i)
5056 ||';@@end date in cursor:'||l_end_date_tab(i),
5057 p_module_name => l_module_name,
5058 p_log_level => 5);
5059 END LOOP;
5060 END IF;
5061 --dbms_output.put_line('before insert in pa ra');
5062 --FOR i IN 1..l_res_list_member_id.count LOOP
5063 --dbms_output.put_line('--i--'||i);
5064 --dbms_output.put_line('l_res_list_member_id:'||l_res_list_member_id(i));
5065 --dbms_output.put_line('l_task_id:'||l_task_id(i));
5066 --END LOOP;
5067 --commit;
5068 FORALL i IN 1..l_res_list_member_id.count
5069 INSERT INTO PA_RESOURCE_ASSIGNMENTS(RESOURCE_ASSIGNMENT_ID,
5070 BUDGET_VERSION_ID,
5071 PROJECT_ID,
5072 TASK_ID,
5073 RESOURCE_LIST_MEMBER_ID,
5074 CBS_ELEMENT_ID, --bug#16827157
5075 LAST_UPDATE_DATE,
5076 LAST_UPDATED_BY,
5077 CREATION_DATE,
5078 CREATED_BY,
5079 LAST_UPDATE_LOGIN,
5080 PROJECT_ASSIGNMENT_ID,
5081 resource_assignment_type,
5082 planning_start_Date,
5083 planning_end_date,
5084 record_version_number,
5085 wbs_element_version_id,
5086 transaction_source_code)
5087 VALUES (PA_RESOURCE_ASSIGNMENTS_S.nextval,
5088 P_BUDGET_VERSION_ID,
5089 P_PROJECT_ID,
5090 l_task_id(i),
5091 l_res_list_member_id(i),
5092 l_cbs_ele_ids(i),--bug#16827157
5093 l_sysdate,
5094 l_last_updated_by,
5095 l_sysdate,
5096 l_last_updated_by,
5097 l_last_update_login,
5098 l_proj_asg_id_minus1,
5099 l_res_as_type_USER_ENTERED,
5100 l_start_date_tab(i),
5101 l_end_date_tab(i),
5102 l_rec_ver_number_1,
5103 DECODE(l_wp_version_flag,'Y',l_mapped_fin_task_version_id(i),
5104 NULL),
5105 l_gen_src_code )
5106 RETURNING resource_assignment_id BULK COLLECT INTO l_ins_ra_id_tbl;
5107
5108 ELSIF P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE = 'T' AND l_stru_sharing_code IS NOT NULL THEN
5109
5110 OPEN RES_ASG5;
5111 FETCH RES_ASG5
5112 BULK COLLECT
5113 INTO l_res_list_member_id,
5114 l_cbs_ele_ids, --bug#16827157
5115 l_task_id,
5116 l_mapped_fin_task_version_id,
5117 l_start_date_tab,
5118 l_end_date_tab;
5119 CLOSE RES_ASG5;
5120
5121 IF l_res_list_member_id.count = 0 then
5122 IF P_PA_DEBUG_MODE = 'Y' THEN
5123 PA_DEBUG.Reset_Curr_Function;
5124 END IF;
5125 RETURN;
5126 END IF;
5127 FORALL i IN 1..l_res_list_member_id.count
5128 INSERT INTO PA_RESOURCE_ASSIGNMENTS(RESOURCE_ASSIGNMENT_ID,
5129 BUDGET_VERSION_ID,
5130 PROJECT_ID,
5131 TASK_ID,
5132 RESOURCE_LIST_MEMBER_ID,
5133 CBS_ELEMENT_ID, --bug#16827157
5134 LAST_UPDATE_DATE,
5135 LAST_UPDATED_BY,
5136 CREATION_DATE,
5137 CREATED_BY,
5138 LAST_UPDATE_LOGIN,
5139 PROJECT_ASSIGNMENT_ID,
5140 resource_assignment_type,
5141 record_version_number,
5142 wbs_element_version_id,
5143 planning_start_date,
5144 planning_end_date,
5145 transaction_source_code)
5146 VALUES (PA_RESOURCE_ASSIGNMENTS_S.nextval,
5147 P_BUDGET_VERSION_ID,
5148 P_PROJECT_ID,
5149 l_task_id(i),
5150 l_res_list_member_id(i),
5151 l_cbs_ele_ids(i),--bug#16827157
5152 l_sysdate,
5153 l_last_updated_by,
5154 l_sysdate,
5155 l_last_updated_by,
5156 l_last_update_login,
5157 l_proj_asg_id_minus1,
5158 l_res_as_type_USER_ENTERED,
5159 l_rec_ver_number_1,
5160 DECODE(l_wp_version_flag,'Y',l_mapped_fin_task_version_id(i),
5161 NULL),
5162 l_start_date_tab(i),
5163 l_end_date_tab(i),
5164 l_gen_src_code )
5165 RETURNING resource_assignment_id BULK COLLECT INTO l_ins_ra_id_tbl;
5166 END IF;
5167
5168 IF SQL%ROWCOUNT = 0 THEN
5169 IF P_PA_DEBUG_MODE = 'Y' THEN
5170 PA_DEBUG.Reset_Curr_Function;
5171 END IF;
5172 RETURN;
5173 END IF;
5174 --dbms_output.put_line('before res_list_map');
5175 /* we need to pass only distinct
5176 RLM ids to the get res defa API */
5177 DELETE from pa_res_list_map_tmp1;
5178
5179 FORALL pp in 1 .. l_res_list_member_id.count
5180 INSERT INTO pa_res_list_map_tmp1
5181 (txn_resource_list_member_id)
5182 VALUES
5183 (l_res_list_member_id(pp));
5184
5185 l_unique_rlm_id_tab.delete;
5186
5187 SELECT DISTINCT txn_resource_list_member_id
5188 BULK COLLECT
5189 INTO l_unique_rlm_id_tab
5190 FROM pa_res_list_map_tmp1;
5191
5192 DELETE FROM pa_res_list_map_tmp1;
5193
5194 FOR kk in 1 .. l_unique_rlm_id_tab.count LOOP
5195 l_da_resource_list_members_tab.extend;
5196 l_da_resource_list_members_tab(kk) := l_unique_rlm_id_tab(kk);
5197 END LOOP;
5198
5199 --Calling resource defualt API
5200 IF p_pa_debug_mode = 'Y' THEN
5201 pa_fp_gen_amount_utils.fp_debug
5202 (p_msg => 'Before calling
5203 pa_planning_resource_utils.get_resource_defaults',
5204 p_module_name => l_module_name,
5205 p_log_level => 5);
5206 END IF;
5207 --dbms_output.put_line('before get_resource_defaults:'||x_return_status);
5208 --dbms_output.put_line('project_id:'||p_project_id);
5209 --dbms_output.put_line('l_da_resource_list_members_tab.count'||l_da_resource_list_members_tab.count);
5210 --for i in 1..l_da_resource_list_members_tab.count loop
5211 --dbms_output.put_line('l_da_resource_list_members_tab(i)'||l_da_resource_list_members_tab(i));
5212 --end loop;
5213 PA_PLANNING_RESOURCE_UTILS.get_resource_defaults (
5214 P_resource_list_members => l_da_resource_list_members_tab,
5215 P_project_id => p_project_id,
5216 X_resource_class_flag => l_da_resource_class_flag_tab,
5217 X_resource_class_code => l_da_resource_class_code_tab,
5218 X_resource_class_id => l_da_resource_class_id_tab,
5219 X_res_type_code => l_da_res_type_code_tab,
5220 X_incur_by_res_type => l_da_incur_by_res_type_tab,
5221 X_person_id => l_da_person_id_tab,
5222 X_job_id => l_da_job_id_tab,
5223 X_person_type_code => l_da_person_type_code_tab,
5224 X_named_role => l_da_named_role_tab,
5225 X_bom_resource_id => l_da_bom_resource_id_tab,
5226 X_non_labor_resource => l_da_non_labor_resource_tab,
5227 X_inventory_item_id => l_da_inventory_item_id_tab,
5228 X_item_category_id => l_da_item_category_id_tab,
5229 X_project_role_id => l_da_project_role_id_tab,
5230 X_organization_id => l_da_organization_id_tab,
5231 X_fc_res_type_code => l_da_fc_res_type_code_tab,
5232 X_expenditure_type => l_da_expenditure_type_tab,
5233 X_expenditure_category => l_da_expenditure_category_tab,
5234 X_event_type => l_da_event_type_tab,
5235 X_revenue_category_code => l_da_revenue_category_code_tab,
5236 X_supplier_id => l_da_supplier_id_tab,
5237 X_spread_curve_id => l_da_spread_curve_id_tab,
5238 X_etc_method_code => l_da_etc_method_code_tab,
5239 X_mfc_cost_type_id => l_da_mfc_cost_type_id_tab,
5240 X_incurred_by_res_flag => l_da_incurred_by_res_flag_tab,
5241 X_incur_by_res_class_code => l_da_incur_by_res_cls_code_tab,
5242 X_incur_by_role_id => l_da_incur_by_role_id_tab,
5243 X_unit_of_measure => l_da_unit_of_measure_tab,
5244 X_org_id => l_da_org_id_tab,
5245 X_rate_based_flag => l_da_rate_based_flag_tab,
5246 X_rate_expenditure_type => l_da_rate_expenditure_type_tab,
5247 X_rate_func_curr_code => l_da_rate_func_curr_code_tab,
5248 X_msg_data => X_MSG_DATA,
5249 X_msg_count => X_MSG_COUNT,
5250 X_return_status => X_RETURN_STATUS);
5251 --dbms_output.put_line('after get_resource_defaults:'||x_return_status);
5252 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
5253 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5254 END IF;
5255 IF p_pa_debug_mode = 'Y' THEN
5256 pa_fp_gen_amount_utils.fp_debug
5257 (p_msg => 'Status after calling
5258 pa_planning_resource_utils.get_resource_defaults'
5259 ||x_return_status,
5260 p_module_name => l_module_name,
5261 p_log_level => 5);
5262 END IF;
5263
5264 IF p_gen_src_code = 'RESOURCE_SCHEDULE' THEN
5265 FOR jj in 1..l_da_spread_curve_id_tab.count LOOP
5266 l_da_spread_curve_id_tab(jj) := null;
5267 END LOOP;
5268 END IF;
5269
5270 -- IPM: At the time of resource creation, the resource_rate_based_flag
5271 -- should be set based on the default rate_based_flag for the resource.
5272 -- Modified the Update statement below to set resource_rate_based_flag.
5273
5274 --Bug 4052036. Changed the check in the where clause to identify the resource assignments that got inserted
5275 --thru this API.
5276 FORALL i IN 1 .. l_da_resource_list_members_tab.count
5277 UPDATE PA_RESOURCE_ASSIGNMENTS
5278 SET RESOURCE_CLASS_FLAG = l_da_resource_class_flag_tab(i),
5279 RESOURCE_CLASS_CODE = l_da_resource_class_code_tab(i),
5280 RES_TYPE_CODE = l_da_res_type_code_tab(i),
5281 PERSON_ID = l_da_person_id_tab(i),
5282 JOB_ID = l_da_job_id_tab(i),
5283 PERSON_TYPE_CODE = l_da_person_type_code_tab(i),
5284 NAMED_ROLE = l_da_named_role_tab(i),
5285 BOM_RESOURCE_ID = l_da_bom_resource_id_tab(i),
5286 NON_LABOR_RESOURCE = l_da_non_labor_resource_tab(i),
5287 INVENTORY_ITEM_ID = l_da_inventory_item_id_tab(i),
5288 ITEM_CATEGORY_ID = l_da_item_category_id_tab(i),
5289 PROJECT_ROLE_ID = l_da_project_role_id_tab(i),
5290 ORGANIZATION_ID = l_da_organization_id_tab(i),
5291 FC_RES_TYPE_CODE = l_da_fc_res_type_code_tab(i),
5292 EXPENDITURE_TYPE = l_da_expenditure_type_tab(i),
5293 EXPENDITURE_CATEGORY = l_da_expenditure_category_tab(i),
5294 EVENT_TYPE = l_da_event_type_tab(i),
5295 REVENUE_CATEGORY_CODE = l_da_revenue_category_code_tab(i),
5296 SUPPLIER_ID = l_da_supplier_id_tab(i),
5297 SPREAD_CURVE_ID = l_da_spread_curve_id_tab(i),
5298 ETC_METHOD_CODE = l_da_etc_method_code_tab(i),
5299 MFC_COST_TYPE_ID = l_da_mfc_cost_type_id_tab(i),
5300 INCURRED_BY_RES_FLAG = l_da_incurred_by_res_flag_tab(i),
5301 INCUR_BY_RES_CLASS_CODE = l_da_incur_by_res_cls_code_tab(i),
5302 INCUR_BY_ROLE_ID = l_da_incur_by_role_id_tab(i),
5303 UNIT_OF_MEASURE = l_da_unit_of_measure_tab(i),
5304 RATE_BASED_FLAG = l_da_rate_based_flag_tab(i),
5305 RESOURCE_RATE_BASED_FLAG = l_da_rate_based_flag_tab(i), -- Added for IPM ER
5306 RATE_EXPENDITURE_TYPE = l_da_rate_expenditure_type_tab(i),
5307 RATE_EXP_FUNC_CURR_CODE = l_da_rate_func_curr_code_tab(i),
5308 LAST_UPDATE_DATE = l_sysdate,
5309 LAST_UPDATED_BY = l_last_updated_by,
5310 CREATION_DATE = l_sysdate,
5311 CREATED_BY = l_last_updated_by,
5312 LAST_UPDATE_LOGIN = l_last_update_login,
5313 RATE_EXPENDITURE_ORG_ID = l_da_org_id_tab(i)
5314 WHERE budget_version_id = p_budget_version_id
5315 AND RESOURCE_LIST_MEMBER_ID = l_da_resource_list_members_tab(i)
5316 AND (resource_assignment_id
5317 BETWEEN l_ins_ra_id_tbl(l_ins_ra_id_tbl.FIRST) AND l_ins_ra_id_tbl(l_ins_ra_id_tbl.LAST));
5318
5319 --ELSE -- Else condition l_Cbs_Enabled = 'Y' -- bug#16200605
5320 /*
5321 * Currently not handling the X_FIN_PLAN_LEVEL_CODE = 'P'
5322 */
5323
5324 /*
5325 --test #bhanu
5326 log1('P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE : '||P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE);
5327 log1('l_stru_sharing_code : '||l_stru_sharing_code);
5328 log1('P_GEN_SRC_CODE : '||P_GEN_SRC_CODE);
5329 */
5330 /* --bug#16827157
5331 IF P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE = 'L'
5332 AND (l_stru_sharing_code IS NULL OR
5333 l_stru_sharing_code = 'SHARE_FULL' OR
5334 P_GEN_SRC_CODE IN ( 'FINANCIAL_PLAN',
5335 'OPEN_COMMITMENTS','BILLING_EVENTS' )) THEN
5336 OPEN RES_ASG2_CBS;
5337 FETCH RES_ASG2_CBS
5338 BULK COLLECT
5339 INTO l_res_list_member_id,
5340 l_task_id,
5341 l_res_asgn_id,
5342 l_start_date_tab,
5343 l_end_date_tab,
5344 l_cbs_ele_ids;
5345 CLOSE RES_ASG2_CBS;
5346
5347 IF l_res_list_member_id.count = 0 then
5348 IF P_PA_DEBUG_MODE = 'Y' THEN
5349 PA_DEBUG.Reset_Curr_Function;
5350 END IF;
5351 RETURN;
5352 END IF;
5353
5354
5355 FORALL i IN 1..l_res_list_member_id.count
5356
5357 INSERT INTO PA_RESOURCE_ASSIGNMENTS(RESOURCE_ASSIGNMENT_ID,
5358 BUDGET_VERSION_ID,
5359 PROJECT_ID,
5360 TASK_ID,
5361 RESOURCE_LIST_MEMBER_ID,
5362 CBS_ELEMENT_ID,
5363 LAST_UPDATE_DATE,
5364 LAST_UPDATED_BY,
5365 CREATION_DATE,
5366 CREATED_BY,
5367 LAST_UPDATE_LOGIN,
5368 PROJECT_ASSIGNMENT_ID,
5369 resource_assignment_type,
5370 record_version_number,
5371 planning_start_date,
5372 planning_end_date,
5373 transaction_source_code)
5374 VALUES (PA_RESOURCE_ASSIGNMENTS_S.nextval,
5375 P_BUDGET_VERSION_ID,
5376 P_PROJECT_ID,
5377 l_task_id(i),
5378 l_res_list_member_id(i),
5379 l_cbs_ele_ids(i),
5380 l_sysdate,
5381 l_last_updated_by,
5382 l_sysdate,
5383 l_last_updated_by,
5384 l_last_update_login,
5385 l_proj_asg_id_minus1,
5386 l_res_as_type_USER_ENTERED,
5387 l_rec_ver_number_1,
5388 l_start_date_tab(i),
5389 l_end_date_tab(i),
5390 l_gen_src_code )
5391 RETURNING resource_assignment_id BULK COLLECT INTO l_ins_ra_id_tbl;
5392 ELSIF P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE = 'T'
5393 AND ( l_stru_sharing_code IS NULL OR
5394 l_stru_sharing_code = 'SHARE_FULL' OR
5395 P_GEN_SRC_CODE IN ( 'FINANCIAL_PLAN',
5396 'OPEN_COMMITMENTS','BILLING_EVENTS' )) THEN
5397
5398 OPEN RES_ASG3_CBS;
5399 FETCH RES_ASG3_CBS
5400 BULK COLLECT
5401 INTO l_res_list_member_id,
5402 l_task_id,
5403 l_start_date_tab,
5404 l_end_date_tab,
5405 l_cbs_ele_ids;
5406 CLOSE RES_ASG3_CBS;
5407
5408 IF l_res_list_member_id.count = 0 then
5409 IF P_PA_DEBUG_MODE = 'Y' THEN
5410 PA_DEBUG.Reset_Curr_Function;
5411 END IF;
5412 RETURN;
5413 END IF;
5414
5415
5416 FORALL i IN 1..l_res_list_member_id.count
5417 INSERT INTO PA_RESOURCE_ASSIGNMENTS(RESOURCE_ASSIGNMENT_ID,
5418 BUDGET_VERSION_ID,
5419 PROJECT_ID,
5420 TASK_ID,
5421 RESOURCE_LIST_MEMBER_ID,
5422 CBS_ELEMENT_ID,
5423 LAST_UPDATE_DATE,
5424 LAST_UPDATED_BY,
5425 CREATION_DATE,
5426 CREATED_BY,
5427 LAST_UPDATE_LOGIN,
5428 PROJECT_ASSIGNMENT_ID,
5429 resource_assignment_type,
5430 record_version_number,
5431 planning_start_date,
5432 planning_end_date,
5433 transaction_source_code)
5434 VALUES (PA_RESOURCE_ASSIGNMENTS_S.nextval,
5435 P_BUDGET_VERSION_ID,
5436 P_PROJECT_ID,
5437 l_task_id(i),
5438 l_res_list_member_id(i),
5439 l_cbs_ele_ids(i),
5440 l_sysdate,
5441 l_last_updated_by,
5442 l_sysdate,
5443 l_last_updated_by,
5444 l_last_update_login,
5445 l_proj_asg_id_minus1,
5446 l_res_as_type_USER_ENTERED,
5447 l_rec_ver_number_1,
5448 l_start_date_tab(i),
5449 l_end_date_tab(i),
5450 l_gen_src_code )
5451 RETURNING resource_assignment_id BULK COLLECT INTO l_ins_ra_id_tbl;
5452
5453 ELSIF P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE = 'L'
5454 AND l_stru_sharing_code IS NOT NULL THEN
5455 --dbms_output.put('before res_asg4 cursor');
5456
5457 --dbms_output.put('p_wp_structure_ver_id'||p_wp_structure_ver_id);
5458 --insert into ltmp4 select * from PA_RES_LIST_MAP_TMP4;
5459 --insert into lra select * from pa_resource_assignments where budget_version_id = p_budget_version_id;
5460 --insert_test_dump2(p_budget_version_id);
5461 OPEN RES_ASG4_CBS;
5462 FETCH RES_ASG4_CBS
5463 BULK COLLECT
5464 INTO l_res_list_member_id,
5465 l_task_id,
5466 l_mapped_fin_task_version_id,
5467 l_start_date_tab,
5468 l_end_date_tab,
5469 l_cbs_ele_ids;
5470 CLOSE RES_ASG4_CBS;
5471
5472 IF l_res_list_member_id.count = 0 then
5473 IF P_PA_DEBUG_MODE = 'Y' THEN
5474 PA_DEBUG.Reset_Curr_Function;
5475 END IF;
5476 RETURN;
5477 END IF;
5478 IF P_PA_DEBUG_MODE = 'Y' THEN
5479 FOR i IN 1..l_res_list_member_id.count LOOP
5480 pa_fp_gen_amount_utils.fp_debug
5481 (p_msg => 'in res_asg4:@@rlm in cursor:'||l_res_list_member_id(i)
5482 ||'; @@task in cursor:'||l_task_id(i)
5483 ||';@@start date in cursor:'||l_start_date_tab(i)
5484 ||';@@end date in cursor:'||l_end_date_tab(i),
5485 p_module_name => l_module_name,
5486 p_log_level => 5);
5487 END LOOP;
5488 END IF;
5489 --dbms_output.put_line('before insert in pa ra');
5490 --FOR i IN 1..l_res_list_member_id.count LOOP
5491 --dbms_output.put_line('--i--'||i);
5492 --dbms_output.put_line('l_res_list_member_id:'||l_res_list_member_id(i));
5493 --dbms_output.put_line('l_task_id:'||l_task_id(i));
5494 --END LOOP;
5495 --commit;
5496
5497 FORALL i IN 1..l_res_list_member_id.count
5498 INSERT INTO PA_RESOURCE_ASSIGNMENTS(RESOURCE_ASSIGNMENT_ID,
5499 BUDGET_VERSION_ID,
5500 PROJECT_ID,
5501 TASK_ID,
5502 RESOURCE_LIST_MEMBER_ID,
5503 CBS_ELEMENT_ID,
5504 LAST_UPDATE_DATE,
5505 LAST_UPDATED_BY,
5506 CREATION_DATE,
5507 CREATED_BY,
5508 LAST_UPDATE_LOGIN,
5509 PROJECT_ASSIGNMENT_ID,
5510 resource_assignment_type,
5511 planning_start_Date,
5512 planning_end_date,
5513 record_version_number,
5514 wbs_element_version_id,
5515 transaction_source_code)
5516 VALUES (PA_RESOURCE_ASSIGNMENTS_S.nextval,
5517 P_BUDGET_VERSION_ID,
5518 P_PROJECT_ID,
5519 l_task_id(i),
5520 l_res_list_member_id(i),
5521 l_cbs_ele_ids(i),
5522 l_sysdate,
5523 l_last_updated_by,
5524 l_sysdate,
5525 l_last_updated_by,
5526 l_last_update_login,
5527 l_proj_asg_id_minus1,
5528 l_res_as_type_USER_ENTERED,
5529 l_start_date_tab(i),
5530 l_end_date_tab(i),
5531 l_rec_ver_number_1,
5532 DECODE(l_wp_version_flag,'Y',l_mapped_fin_task_version_id(i),
5533 NULL),
5534 l_gen_src_code )
5535 RETURNING resource_assignment_id BULK COLLECT INTO l_ins_ra_id_tbl;
5536
5537 ELSIF P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE = 'T' AND l_stru_sharing_code IS NOT NULL THEN
5538
5539 OPEN RES_ASG5;
5540 FETCH RES_ASG5
5541 BULK COLLECT
5542 INTO l_res_list_member_id,
5543 l_cbs_ele_ids, --bug#16827157
5544 l_task_id,
5545 l_mapped_fin_task_version_id,
5546 l_start_date_tab,
5547 l_end_date_tab;
5548 CLOSE RES_ASG5;
5549
5550 IF l_res_list_member_id.count = 0 then
5551 IF P_PA_DEBUG_MODE = 'Y' THEN
5552 PA_DEBUG.Reset_Curr_Function;
5553 END IF;
5554 RETURN;
5555 END IF;
5556
5557
5558 FORALL i IN 1..l_res_list_member_id.count
5559 INSERT INTO PA_RESOURCE_ASSIGNMENTS(RESOURCE_ASSIGNMENT_ID,
5560 BUDGET_VERSION_ID,
5561 PROJECT_ID,
5562 TASK_ID,
5563 RESOURCE_LIST_MEMBER_ID,
5564 LAST_UPDATE_DATE,
5565 LAST_UPDATED_BY,
5566 CREATION_DATE,
5567 CREATED_BY,
5568 LAST_UPDATE_LOGIN,
5569 PROJECT_ASSIGNMENT_ID,
5570 resource_assignment_type,
5571 record_version_number,
5572 wbs_element_version_id,
5573 planning_start_date,
5574 planning_end_date,
5575 transaction_source_code)
5576 VALUES (PA_RESOURCE_ASSIGNMENTS_S.nextval,
5577 P_BUDGET_VERSION_ID,
5578 P_PROJECT_ID,
5579 l_task_id(i),
5580 l_res_list_member_id(i),
5581 l_sysdate,
5582 l_last_updated_by,
5583 l_sysdate,
5584 l_last_updated_by,
5585 l_last_update_login,
5586 l_proj_asg_id_minus1,
5587 l_res_as_type_USER_ENTERED,
5588 l_rec_ver_number_1,
5589 DECODE(l_wp_version_flag,'Y',l_mapped_fin_task_version_id(i),
5590 NULL),
5591 l_start_date_tab(i),
5592 l_end_date_tab(i),
5593 l_gen_src_code )
5594 RETURNING resource_assignment_id BULK COLLECT INTO l_ins_ra_id_tbl;
5595 END IF;
5596
5597 IF SQL%ROWCOUNT = 0 THEN
5598 IF P_PA_DEBUG_MODE = 'Y' THEN
5599 PA_DEBUG.Reset_Curr_Function;
5600 END IF;
5601 RETURN;
5602 END IF;
5603 --dbms_output.put_line('before res_list_map');
5604 DELETE from pa_res_list_map_tmp1;
5605
5606 FORALL pp in 1 .. l_res_list_member_id.count
5607 INSERT INTO pa_res_list_map_tmp1
5608 (txn_resource_list_member_id)
5609 VALUES
5610 (l_res_list_member_id(pp));
5611
5612 l_unique_rlm_id_tab.delete;
5613
5614 SELECT DISTINCT txn_resource_list_member_id
5615 BULK COLLECT
5616 INTO l_unique_rlm_id_tab
5617 FROM pa_res_list_map_tmp1;
5618
5619 DELETE FROM pa_res_list_map_tmp1;
5620
5621 FOR kk in 1 .. l_unique_rlm_id_tab.count LOOP
5622 l_da_resource_list_members_tab.extend;
5623 l_da_resource_list_members_tab(kk) := l_unique_rlm_id_tab(kk);
5624 END LOOP;
5625
5626 --Calling resource defualt API
5627 IF p_pa_debug_mode = 'Y' THEN
5628 pa_fp_gen_amount_utils.fp_debug
5629 (p_msg => 'Before calling
5630 pa_planning_resource_utils.get_resource_defaults',
5631 p_module_name => l_module_name,
5632 p_log_level => 5);
5633 END IF;
5634 --dbms_output.put_line('before get_resource_defaults:'||x_return_status);
5635 --dbms_output.put_line('project_id:'||p_project_id);
5636 --dbms_output.put_line('l_da_resource_list_members_tab.count'||l_da_resource_list_members_tab.count);
5637 --for i in 1..l_da_resource_list_members_tab.count loop
5638 --dbms_output.put_line('l_da_resource_list_members_tab(i)'||l_da_resource_list_members_tab(i));
5639 --end loop;
5640
5641 PA_PLANNING_RESOURCE_UTILS.get_resource_defaults (
5642 P_resource_list_members => l_da_resource_list_members_tab,
5643 P_project_id => p_project_id,
5644 X_resource_class_flag => l_da_resource_class_flag_tab,
5645 X_resource_class_code => l_da_resource_class_code_tab,
5646 X_resource_class_id => l_da_resource_class_id_tab,
5647 X_res_type_code => l_da_res_type_code_tab,
5648 X_incur_by_res_type => l_da_incur_by_res_type_tab,
5649 X_person_id => l_da_person_id_tab,
5650 X_job_id => l_da_job_id_tab,
5651 X_person_type_code => l_da_person_type_code_tab,
5652 X_named_role => l_da_named_role_tab,
5653 X_bom_resource_id => l_da_bom_resource_id_tab,
5654 X_non_labor_resource => l_da_non_labor_resource_tab,
5655 X_inventory_item_id => l_da_inventory_item_id_tab,
5656 X_item_category_id => l_da_item_category_id_tab,
5657 X_project_role_id => l_da_project_role_id_tab,
5658 X_organization_id => l_da_organization_id_tab,
5659 X_fc_res_type_code => l_da_fc_res_type_code_tab,
5660 X_expenditure_type => l_da_expenditure_type_tab,
5661 X_expenditure_category => l_da_expenditure_category_tab,
5662 X_event_type => l_da_event_type_tab,
5663 X_revenue_category_code => l_da_revenue_category_code_tab,
5664 X_supplier_id => l_da_supplier_id_tab,
5665 X_spread_curve_id => l_da_spread_curve_id_tab,
5666 X_etc_method_code => l_da_etc_method_code_tab,
5667 X_mfc_cost_type_id => l_da_mfc_cost_type_id_tab,
5668 X_incurred_by_res_flag => l_da_incurred_by_res_flag_tab,
5669 X_incur_by_res_class_code => l_da_incur_by_res_cls_code_tab,
5670 X_incur_by_role_id => l_da_incur_by_role_id_tab,
5671 X_unit_of_measure => l_da_unit_of_measure_tab,
5672 X_org_id => l_da_org_id_tab,
5673 X_rate_based_flag => l_da_rate_based_flag_tab,
5674 X_rate_expenditure_type => l_da_rate_expenditure_type_tab,
5675 X_rate_func_curr_code => l_da_rate_func_curr_code_tab,
5676 X_msg_data => X_MSG_DATA,
5677 X_msg_count => X_MSG_COUNT,
5678 X_return_status => X_RETURN_STATUS);
5679 --dbms_output.put_line('after get_resource_defaults:'||x_return_status);
5680 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
5681 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5682 END IF;
5683 IF p_pa_debug_mode = 'Y' THEN
5684 pa_fp_gen_amount_utils.fp_debug
5685 (p_msg => 'Status after calling
5686 pa_planning_resource_utils.get_resource_defaults'
5687 ||x_return_status,
5688 p_module_name => l_module_name,
5689 p_log_level => 5);
5690 END IF;
5691
5692 IF p_gen_src_code = 'RESOURCE_SCHEDULE' THEN
5693 FOR jj in 1..l_da_spread_curve_id_tab.count LOOP
5694 l_da_spread_curve_id_tab(jj) := null;
5695 END LOOP;
5696 END IF;
5697
5698
5699 -- IPM: At the time of resource creation, the resource_rate_based_flag
5700 -- should be set based on the default rate_based_flag for the resource.
5701 -- Modified the Update statement below to set resource_rate_based_flag.
5702
5703 --Bug 4052036. Changed the check in the where clause to identify the resource assignments that got inserted
5704 --thru this API.
5705 FORALL i IN 1 .. l_da_resource_list_members_tab.count
5706 UPDATE PA_RESOURCE_ASSIGNMENTS
5707 SET RESOURCE_CLASS_FLAG = l_da_resource_class_flag_tab(i),
5708 RESOURCE_CLASS_CODE = l_da_resource_class_code_tab(i),
5709 RES_TYPE_CODE = l_da_res_type_code_tab(i),
5710 PERSON_ID = l_da_person_id_tab(i),
5711 JOB_ID = l_da_job_id_tab(i),
5712 PERSON_TYPE_CODE = l_da_person_type_code_tab(i),
5713 NAMED_ROLE = l_da_named_role_tab(i),
5714 BOM_RESOURCE_ID = l_da_bom_resource_id_tab(i),
5715 NON_LABOR_RESOURCE = l_da_non_labor_resource_tab(i),
5716 INVENTORY_ITEM_ID = l_da_inventory_item_id_tab(i),
5717 ITEM_CATEGORY_ID = l_da_item_category_id_tab(i),
5718 PROJECT_ROLE_ID = l_da_project_role_id_tab(i),
5719 ORGANIZATION_ID = l_da_organization_id_tab(i),
5720 FC_RES_TYPE_CODE = l_da_fc_res_type_code_tab(i),
5721 EXPENDITURE_TYPE = l_da_expenditure_type_tab(i),
5722 EXPENDITURE_CATEGORY = l_da_expenditure_category_tab(i),
5723 EVENT_TYPE = l_da_event_type_tab(i),
5724 REVENUE_CATEGORY_CODE = l_da_revenue_category_code_tab(i),
5725 SUPPLIER_ID = l_da_supplier_id_tab(i),
5726 SPREAD_CURVE_ID = l_da_spread_curve_id_tab(i),
5727 ETC_METHOD_CODE = l_da_etc_method_code_tab(i),
5728 MFC_COST_TYPE_ID = l_da_mfc_cost_type_id_tab(i),
5729 INCURRED_BY_RES_FLAG = l_da_incurred_by_res_flag_tab(i),
5730 INCUR_BY_RES_CLASS_CODE = l_da_incur_by_res_cls_code_tab(i),
5731 INCUR_BY_ROLE_ID = l_da_incur_by_role_id_tab(i),
5732 UNIT_OF_MEASURE = l_da_unit_of_measure_tab(i),
5733 RATE_BASED_FLAG = l_da_rate_based_flag_tab(i),
5734 RESOURCE_RATE_BASED_FLAG = l_da_rate_based_flag_tab(i), -- Added for IPM ER
5735 RATE_EXPENDITURE_TYPE = l_da_rate_expenditure_type_tab(i),
5736 RATE_EXP_FUNC_CURR_CODE = l_da_rate_func_curr_code_tab(i),
5737 LAST_UPDATE_DATE = l_sysdate,
5738 LAST_UPDATED_BY = l_last_updated_by,
5739 CREATION_DATE = l_sysdate,
5740 CREATED_BY = l_last_updated_by,
5741 LAST_UPDATE_LOGIN = l_last_update_login,
5742 RATE_EXPENDITURE_ORG_ID = l_da_org_id_tab(i)
5743 WHERE budget_version_id = p_budget_version_id
5744 AND RESOURCE_LIST_MEMBER_ID = l_da_resource_list_members_tab(i)
5745 AND (resource_assignment_id
5746 BETWEEN l_ins_ra_id_tbl(l_ins_ra_id_tbl.FIRST) AND l_ins_ra_id_tbl(l_ins_ra_id_tbl.LAST));
5747
5748 */ --bug#16827157
5749 --END IF;
5750
5751 IF P_PA_DEBUG_MODE = 'Y' THEN
5752 PA_DEBUG.Reset_Curr_Function;
5753 END IF;
5754 RETURN;
5755
5756 EXCEPTION
5757 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
5758 -- Bug Fix: 4569365. Removed MRC code.
5759 -- PA_MRC_FINPLAN.G_CALLING_MODULE := Null;
5760 l_msg_count := FND_MSG_PUB.count_msg;
5761 IF l_msg_count = 1 THEN
5762 PA_INTERFACE_UTILS_PUB.get_messages
5763 (p_encoded => FND_API.G_TRUE
5764 ,p_msg_index => 1
5765 ,p_msg_count => l_msg_count
5766 ,p_msg_data => l_msg_data
5767 ,p_data => l_data
5768 ,p_msg_index_out => l_msg_index_out);
5769 x_msg_data := l_data;
5770 x_msg_count := l_msg_count;
5771 ELSE
5772 x_msg_count := l_msg_count;
5773 END IF;
5774 ROLLBACK;
5775 x_return_status := FND_API.G_RET_STS_ERROR;
5776
5777 IF P_PA_DEBUG_MODE = 'Y' THEN
5778 PA_DEBUG.Reset_Curr_Function;
5779 END IF;
5780 WHEN OTHERS THEN
5781 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5782 x_msg_data := SUBSTR(SQLERRM,1,240);
5783 -- dbms_output.put_line('inside excep create res asg');
5784 -- dbms_output.put_line(SUBSTR(SQLERRM,1,240));
5785 FND_MSG_PUB.add_exc_msg
5786 ( p_pkg_name => 'PA_FP_GEN_BUDGET_AMT_PUB'
5787 ,p_procedure_name => 'CREATE_RES_ASG');
5788
5789 IF P_PA_DEBUG_MODE = 'Y' THEN
5790 PA_DEBUG.Reset_Curr_Function;
5791 END IF;
5792 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5793
5794 END CREATE_RES_ASG;
5795
5796
5797 /* Procedure to update the reosurce_assignment_id
5798 in the resource assignment table*/
5799 PROCEDURE UPDATE_RES_ASG
5800 (P_PROJECT_ID IN PA_PROJ_FP_OPTIONS.PROJECT_ID%TYPE,
5801 P_BUDGET_VERSION_ID IN PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE,
5802 P_STRU_SHARING_CODE IN PA_PROJECTS_ALL.STRUCTURE_SHARING_CODE%TYPE,
5803 P_GEN_SRC_CODE IN PA_PROJ_FP_OPTIONS.GEN_ALL_SRC_CODE%TYPE,
5804 P_FP_COLS_REC IN PA_FP_GEN_AMOUNT_UTILS.FP_COLS,
5805 P_WP_STRUCTURE_VER_ID IN PA_BUDGET_VERSIONS.PROJECT_STRUCTURE_VERSION_ID%TYPE,
5806 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
5807 X_MSG_COUNT OUT NOCOPY NUMBER,
5808 X_MSG_DATA OUT NOCOPY VARCHAR2) IS
5809
5810 l_module_name VARCHAR2(200) := 'pa.plsql.PA_FP_GEN_BUDGET_AMT_PUB.UPDATE_RES_ASG';
5811
5812 l_stru_sharing_code PA_PROJECTS_ALL.STRUCTURE_SHARING_CODE%TYPE;
5813
5814 l_res_assgn_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
5815 l_res_assgn_id_del_tab PA_PLSQL_DATATYPES.IdTabTyp;
5816 l_rlm_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
5817 l_cbs_element_id_tab PA_PLSQL_DATATYPES.IdTabTyp; --bug#16827157
5818 l_txn_task_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
5819 l_txn_top_task_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
5820 l_txn_sub_task_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
5821 l_mapped_task_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
5822
5823 l_count number;
5824 l_project_id NUMBER(15);
5825
5826 tmp_count number;
5827 tmp_ra_id_tab PA_PLSQL_DATATYPES.IdTabTyp; -- PA_PLSQL_DATATYPES.Char30TabTyp;
5828 tmp_rlm_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
5829 tmp_task_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
5830
5831 l_txn_res_asg_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
5832 l_txn_plan_start_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
5833 l_txn_plan_end_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
5834
5835 l_txn_resource_asg_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
5836
5837 /* Variables for Manually Added Plan Lines logic */
5838 l_etc_start_date DATE;
5839 l_spread_curve_id pa_spread_curves_b.spread_curve_id%TYPE;
5840 BEGIN
5841 X_MSG_COUNT := 0;
5842 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
5843
5844 IF p_pa_debug_mode = 'Y' THEN
5845 pa_debug.set_curr_function( p_function => 'UPDATE_RES_ASG'
5846 ,p_debug_mode => p_pa_debug_mode);
5847 END IF;
5848 l_project_id := p_project_id;
5849
5850 l_stru_sharing_code := PA_PROJECT_STRUCTURE_UTILS.
5851 get_Structure_sharing_code(P_PROJECT_ID=> P_PROJECT_ID);
5852
5853 IF P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE = 'P' or
5854 P_GEN_SRC_CODE = 'RESOURCE_SCHEDULE' THEN
5855
5856 /* Updating the TMP4 table with resource_assignment_id */
5857 SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/
5858 distinct P.RESOURCE_ASSIGNMENT_ID,
5859 P.RESOURCE_LIST_MEMBER_ID
5860 BULK COLLECT
5861 INTO l_res_assgn_id_tab,
5862 l_rlm_id_tab
5863 FROM PA_RESOURCE_ASSIGNMENTS P,
5864 PA_RES_LIST_MAP_TMP4 T
5865 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
5866 AND NVL(P.TASK_ID,0) = 0
5867 AND P.PROJECT_ASSIGNMENT_ID = -1
5868 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
5869 AND NVL(T.CBS_ELEMENT_ID,-1) = NVL(P.CBS_ELEMENT_ID,-1); --bug#16827157
5870
5871 FORALL i IN 1..l_res_assgn_id_tab.count
5872 UPDATE /*+ INDEX(PA_RES_LIST_MAP_TMP4,PA_RES_LIST_MAP_TMP4_N1)*/
5873 PA_RES_LIST_MAP_TMP4
5874 SET TXN_RESOURCE_ASSIGNMENT_ID = l_res_assgn_id_tab(i)
5875 WHERE RESOURCE_LIST_MEMBER_ID = l_rlm_id_tab(i);
5876 /* AND NVL(TXN_TASK_ID,0) = l_txn_task_id_tab(i);
5877 task id check is not required. commented for bug 3475017 */
5878
5879 /* Updating the TMP4 table with resource_assignment_id
5880 when planning level is Lowest task (Financial task only)*/
5881 ELSIF P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE = 'L'
5882 AND ( l_stru_sharing_code IS NULL OR
5883 l_stru_sharing_code = 'SHARE_FULL' OR
5884 P_GEN_SRC_CODE IN ( 'FINANCIAL_PLAN',
5885 'OPEN_COMMITMENTS','BILLING_EVENTS' )) THEN
5886
5887 SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/
5888 distinct P.RESOURCE_ASSIGNMENT_ID,
5889 P.RESOURCE_LIST_MEMBER_ID,
5890 P.CBS_ELEMENT_ID, --bug#16827157
5891 NVL(T.TXN_TASK_ID,0)
5892 BULK COLLECT
5893 INTO l_res_assgn_id_tab,
5894 l_rlm_id_tab,
5895 l_cbs_element_id_tab, --bug#16827157
5896 l_txn_task_id_tab
5897 FROM PA_RESOURCE_ASSIGNMENTS P,
5898 PA_RES_LIST_MAP_TMP4 T
5899 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
5900 AND NVL(P.TASK_ID,0) = NVL(T.TXN_TASK_ID,0)
5901 AND P.PROJECT_ASSIGNMENT_ID = -1
5902 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
5903 AND NVL(T.CBS_ELEMENT_ID,-1) = NVL(P.CBS_ELEMENT_ID,-1); --bug#16827157
5904
5905 FORALL i IN 1..l_res_assgn_id_tab.count
5906 UPDATE /*+ INDEX(PA_RES_LIST_MAP_TMP4,PA_RES_LIST_MAP_TMP4_N1)*/
5907 PA_RES_LIST_MAP_TMP4
5908 SET TXN_RESOURCE_ASSIGNMENT_ID = l_res_assgn_id_tab(i)
5909 WHERE RESOURCE_LIST_MEMBER_ID = l_rlm_id_tab(i)
5910 AND NVL(TXN_TASK_ID,0) = l_txn_task_id_tab(i)
5911 AND NVL(CBS_ELEMENT_ID,-1) = NVL(l_cbs_element_id_tab(i),-1);--bug#16827157
5912
5913 /* Updating the TMP4 table with resource_assignment_id
5914 when planning level is Top task (Financial task only)*/
5915 ELSIF P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE = 'T'
5916 AND ( l_stru_sharing_code IS NULL OR
5917 l_stru_sharing_code = 'SHARE_FULL' OR
5918 P_GEN_SRC_CODE IN ( 'FINANCIAL_PLAN',
5919 'OPEN_COMMITMENTS','BILLING_EVENTS' )) THEN
5920
5921 --Bug 12890117;Forward Port:Bug 13110380
5922 SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/
5923 distinct P.RESOURCE_ASSIGNMENT_ID,
5924 P.RESOURCE_LIST_MEMBER_ID,
5925 P.CBS_ELEMENT_ID, --bug#16827157
5926 NVL(P.TASK_ID,0),
5927 NVL(T.TXN_TASK_ID,0)
5928 BULK COLLECT
5929 INTO l_res_assgn_id_tab,
5930 l_rlm_id_tab,
5931 l_cbs_element_id_tab, --bug#16827157
5932 l_txn_top_task_id_tab,
5933 l_txn_sub_task_id_tab
5934 FROM PA_RESOURCE_ASSIGNMENTS P,
5935 PA_RES_LIST_MAP_TMP4 T,
5936 PA_TASKS TS
5937 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
5938 AND TS.TASK_ID(+) = NVL(T.TXN_TASK_ID,0)
5939 AND NVL(P.TASK_ID,0) = NVL(TS.TOP_TASK_ID,0)
5940 AND P.PROJECT_ASSIGNMENT_ID = -1
5941 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
5942 AND NVL(T.CBS_ELEMENT_ID,-1) = NVL(P.CBS_ELEMENT_ID,-1); --bug#16827157
5943
5944 FORALL i IN 1..l_res_assgn_id_tab.count
5945 UPDATE /*+ INDEX(PA_RES_LIST_MAP_TMP4,PA_RES_LIST_MAP_TMP4_N1)*/
5946 PA_RES_LIST_MAP_TMP4 tmp4
5947 SET TXN_RESOURCE_ASSIGNMENT_ID = l_res_assgn_id_tab(i)
5948 WHERE RESOURCE_LIST_MEMBER_ID = l_rlm_id_tab(i)
5949 AND NVL(TXN_TASK_ID,0) = l_txn_sub_task_id_tab(i)
5950 AND NVL(CBS_ELEMENT_ID,-1) = NVL(l_cbs_element_id_tab(i),-1);--bug#16827157
5951
5952 /* Updating the TMP4 table with resource_assignment_id when
5953 planning level is Lowest task (both Financial task and Workplan task)*/
5954
5955 ELSIF P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE = 'L' AND l_stru_sharing_code IS NOT NULL THEN
5956 SELECT distinct resource_assignment_id,
5957 resource_list_member_id,
5958 cbs_element_id, --bug#16827157
5959 txn_task_id,
5960 mapped_fin_task_id
5961 BULK COLLECT INTO
5962 l_res_assgn_id_tab,
5963 l_rlm_id_tab,
5964 l_cbs_element_id_tab, --bug#16827157
5965 l_txn_task_id_tab,
5966 l_mapped_task_id_tab
5967 FROM
5968 (
5969 SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/
5970 P.RESOURCE_ASSIGNMENT_ID resource_assignment_id,
5971 P.RESOURCE_LIST_MEMBER_ID resource_list_member_id,
5972 P.CBS_ELEMENT_ID cbs_element_id, --bug#16827157
5973 NVL(T.TXN_TASK_ID,0) txn_task_id ,
5974 NVL(V.MAPPED_FIN_TASK_ID,0) mapped_fin_task_id
5975 FROM PA_RESOURCE_ASSIGNMENTS P,
5976 PA_RES_LIST_MAP_TMP4 T,
5977 PA_MAP_WP_TO_FIN_TASKS_V V
5978 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
5979 AND V.PARENT_STRUCTURE_VERSION_ID = P_WP_STRUCTURE_VER_ID
5980 AND NVL(T.TXN_TASK_ID,0) = NVL(V.PROJ_ELEMENT_ID,0)
5981 AND P.PROJECT_ASSIGNMENT_ID = -1
5982 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
5983 AND NVL(T.CBS_ELEMENT_ID,-1) = NVL(P.CBS_ELEMENT_ID,-1) --bug#16827157
5984 AND NVL(P.TASK_ID,0) = NVL(V.MAPPED_FIN_TASK_ID,0)
5985 AND NVL(T.TXN_TASK_ID,0) > 0
5986 union
5987 SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/
5988 P.RESOURCE_ASSIGNMENT_ID resource_assignment_id,
5989 P.RESOURCE_LIST_MEMBER_ID resource_list_member_id,
5990 P.CBS_ELEMENT_ID cbs_element_id, --bug#16827157
5991 0 txn_task_id,
5992 0 mapped_fin_task_id
5993 FROM PA_RESOURCE_ASSIGNMENTS P,
5994 PA_RES_LIST_MAP_TMP4 T
5995 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
5996 AND P.PROJECT_ASSIGNMENT_ID = -1
5997 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
5998 AND NVL(T.CBS_ELEMENT_ID,-1) = NVL(P.CBS_ELEMENT_ID,-1) --bug#16827157
5999 AND NVL(P.TASK_ID,0) = 0 );
6000
6001 --@@
6002 IF P_PA_DEBUG_MODE = 'Y' THEN
6003 for i in 1..l_res_assgn_id_tab.count loop
6004 pa_fp_gen_amount_utils.fp_debug
6005 (p_msg => 'within update when share partial and planning at lowest task i:'
6006 ||i||'; ra id in cursor:'||l_res_assgn_id_tab(i)
6007 ||';rlm id in cursor:'||l_rlm_id_tab(i)
6008 ||';task id in cursor:'||l_txn_task_id_tab(i)
6009 ||';mapped task id in cursor:'||l_mapped_task_id_tab(i),
6010 p_module_name => l_module_name,
6011 p_log_level => 5);
6012 end loop;
6013 END IF;
6014 --@@
6015
6016 --dbms_output.put_line('@@l_res_assgn_id_tab.count'||l_res_assgn_id_tab.count);
6017 --dbms_output.put_line('@@l_res_assgn_id_tab(1):'||l_res_assgn_id_tab(1));
6018 --dbms_output.put_line('@@l_res_assgn_id_tab(2):'||l_res_assgn_id_tab(2));
6019 --dbms_output.put_line('@@l_res_assgn_id_tab(3):'||l_res_assgn_id_tab(3));
6020 --dbms_output.put_line('@@l_res_assgn_id_tab(4):'||l_res_assgn_id_tab(4));
6021 --dbms_output.put_line('@@l_rlm_id_tab(1):'||l_rlm_id_tab(1));
6022 --dbms_output.put_line('@@l_rlm_id_tab(2):'||l_rlm_id_tab(2));
6023 --dbms_output.put_line('@@l_rlm_id_tab(1):'||l_rlm_id_tab(3));
6024 --dbms_output.put_line('@@l_rlm_id_tab(2):'||l_rlm_id_tab(4));
6025 --dbms_output.put_line('@@l_txn_task_id_tab(1):'||l_txn_task_id_tab(1));
6026 --dbms_output.put_line('@@l_txn_task_id_tab(2):'||l_txn_task_id_tab(2));
6027 --dbms_output.put_line('@@l_txn_task_id_tab(3):'||l_txn_task_id_tab(3));
6028 --dbms_output.put_line('@@l_txn_task_id_tab(4):'||l_txn_task_id_tab(4));
6029 --select count(*) into tmp_count from PA_RES_LIST_MAP_TMP4;
6030 --dbms_output.put_line('@@l_count of tmp4:'||tmp_count);
6031 --select txn_resource_assignment_id,resource_list_member_id, txn_task_id
6032 --bulk collect into tmp_ra_id_tab, tmp_rlm_id_tab, tmp_task_id_tab
6033 --from PA_RES_LIST_MAP_TMP4;
6034 --dbms_output.put_line('@@tmp_ra_id_tab.count'||tmp_ra_id_tab.count);
6035 --dbms_output.put_line('@@tmp_ra_id_tab(1):'||tmp_ra_id_tab(1));
6036 --dbms_output.put_line('@@tmp_ra_id_tab(2):'||tmp_ra_id_tab(2));
6037 --dbms_output.put_line('@@tmp_ra_id_tab(3):'||tmp_ra_id_tab(3));
6038 --dbms_output.put_line('@@tmp_rlm_id_tab(1):'||tmp_rlm_id_tab(1));
6039 --dbms_output.put_line('@@tmp_rlm_id_tab(2):'||tmp_rlm_id_tab(2));
6040 --dbms_output.put_line('@@tmp_rlm_id_tab(3):'||tmp_rlm_id_tab(3));
6041 --dbms_output.put_line('@@tmp_task_id_tab(1):'||tmp_task_id_tab(1));
6042 --dbms_output.put_line('@@tmp_task_id_tab(2):'||tmp_task_id_tab(2));
6043 --dbms_output.put_line('@@tmp_task_id_tab(3):'||tmp_task_id_tab(3));
6044
6045 FORALL i IN 1..l_res_assgn_id_tab.count
6046 UPDATE /*+ INDEX(PA_RES_LIST_MAP_TMP4,PA_RES_LIST_MAP_TMP4_N1)*/
6047 PA_RES_LIST_MAP_TMP4
6048 SET TXN_RESOURCE_ASSIGNMENT_ID = l_res_assgn_id_tab(i)
6049 WHERE RESOURCE_LIST_MEMBER_ID = l_rlm_id_tab(i)
6050 AND NVL(CBS_ELEMENT_ID,-1) = NVL(l_cbs_element_id_tab(i),-1) --bug#16827157
6051 AND NVL(TXN_TASK_ID,0) = l_txn_task_id_tab(i);
6052
6053 ELSIF P_FP_COLS_REC.X_FIN_PLAN_LEVEL_CODE = 'T'
6054 AND l_stru_sharing_code IS NOT NULL THEN
6055 SELECT distinct resource_assignment_id,
6056 resource_list_member_id,
6057 cbs_element_id, --bug#16827157
6058 txn_task_id,
6059 mapped_fin_task_id
6060 BULK COLLECT INTO
6061 l_res_assgn_id_tab,
6062 l_rlm_id_tab,
6063 l_cbs_element_id_tab, --bug#16827157
6064 l_txn_task_id_tab,
6065 l_mapped_task_id_tab
6066 FROM
6067 (
6068 SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/
6069 P.RESOURCE_ASSIGNMENT_ID resource_assignment_id,
6070 P.RESOURCE_LIST_MEMBER_ID resource_list_member_id,
6071 P.CBS_ELEMENT_ID cbs_element_id, --bug#16827157
6072 NVL(T.TXN_TASK_ID,0) txn_task_id,
6073 NVL(V.MAPPED_FIN_TASK_ID,0) mapped_fin_task_id
6074 FROM PA_RESOURCE_ASSIGNMENTS P,
6075 PA_RES_LIST_MAP_TMP4 T,
6076 PA_MAP_WP_TO_FIN_TASKS_V V,
6077 PA_TASKS TS
6078 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
6079 AND V.PARENT_STRUCTURE_VERSION_ID = P_WP_STRUCTURE_VER_ID
6080 AND t.txn_task_id = v.PROJ_ELEMENT_ID
6081 AND NVL(TS.top_TASK_ID,0) = NVL(p.task_id,0)
6082 AND TS.TASK_ID(+) = NVL(V.MAPPED_FIN_TASK_ID,0)
6083 AND P.PROJECT_ASSIGNMENT_ID = -1
6084 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
6085 AND NVL(T.CBS_ELEMENT_ID,-1) = NVL(P.CBS_ELEMENT_ID,-1) --bug#16827157
6086 AND NVL(T.TXN_TASK_ID,0) > 0
6087 union
6088 SELECT /*+ INDEX(T,PA_RES_LIST_MAP_TMP4_N1)*/
6089 DISTINCT P.RESOURCE_ASSIGNMENT_ID resource_assignment_id,
6090 P.RESOURCE_LIST_MEMBER_ID resource_list_member_id,
6091 P.CBS_ELEMENT_ID cbs_element_id, --bug#16827157
6092 0 txn_task_id,
6093 0 mapped_fin_task_id
6094 FROM PA_RESOURCE_ASSIGNMENTS P,
6095 PA_RES_LIST_MAP_TMP4 T
6096 WHERE P.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
6097 AND P.PROJECT_ASSIGNMENT_ID = -1
6098 AND T.RESOURCE_LIST_MEMBER_ID = P.RESOURCE_LIST_MEMBER_ID
6099 AND NVL(T.CBS_ELEMENT_ID,-1) = NVL(P.CBS_ELEMENT_ID,-1) --bug#16827157
6100 AND NVL(P.TASK_ID,0) = 0
6101 AND NVL(T.TXN_TASK_ID,0) = NVL(P.TASK_ID,0) );
6102
6103 FORALL i IN 1..l_res_assgn_id_tab.count
6104 UPDATE /*+ INDEX(PA_RES_LIST_MAP_TMP4,PA_RES_LIST_MAP_TMP4_N1)*/
6105 PA_RES_LIST_MAP_TMP4
6106 SET TXN_RESOURCE_ASSIGNMENT_ID = l_res_assgn_id_tab(i)
6107 WHERE RESOURCE_LIST_MEMBER_ID = l_rlm_id_tab(i)
6108 AND NVL(CBS_ELEMENT_ID,-1) = NVL(l_cbs_element_id_tab(i),-1) --bug#16827157
6109 AND NVL(TXN_TASK_ID,0) = l_txn_task_id_tab(i);
6110
6111 END IF;
6112
6113 -- Bug 4159172: Moved manual lines logic from CREATE_RES_ASG to after
6114 -- txn_resource_assignments have been updated in tmp4 so that we can
6115 -- delete tmp4 records for manually added resources based on txn ra_ids
6116 -- instead of txn_task_id. Checking for txn_task_id is not sufficient
6117 -- (e.g. when Target is planned at a higher level than the source or when
6118 -- the structure is Partially Shared).
6119
6120 /* If the Retain Manually Added Plan Lines option is enabled, we remove
6121 * all rows in the PA_RES_LIST_MAP_TMP4 table with target resources that
6122 * have manually added plan lines. Thus, after this point, we can use the
6123 * mapping table without checking for the manually added lines condition. */
6124 IF p_fp_cols_rec.x_gen_ret_manual_line_flag = 'Y' THEN
6125 IF p_fp_cols_rec.x_plan_class_code = 'BUDGET' THEN
6126 DELETE FROM pa_res_list_map_tmp4 tmp
6127 WHERE EXISTS
6128 ( SELECT /*+ INDEX(tmp,PA_RES_LIST_MAP_TMP4_N2)*/ 1
6129 FROM pa_resource_assignments ra
6130 WHERE ra.budget_version_id = p_budget_version_id
6131 AND ra.resource_assignment_id = tmp.txn_resource_assignment_id
6132 AND ra.transaction_source_code IS NULL
6133 AND EXISTS
6134 ( SELECT 1
6135 FROM pa_budget_lines bl
6136 WHERE bl.resource_assignment_id = ra.resource_assignment_id
6137 AND rownum = 1 ));
6138 ELSIF p_fp_cols_rec.x_plan_class_code = 'FORECAST' THEN
6139 l_etc_start_date := PA_FP_GEN_AMOUNT_UTILS.GET_ETC_START_DATE
6140 ( p_budget_version_id );
6141 DELETE FROM pa_res_list_map_tmp4 tmp
6142 WHERE EXISTS
6143 ( SELECT /*+ INDEX(tmp,PA_RES_LIST_MAP_TMP4_N2)*/ 1
6144 FROM pa_resource_assignments ra
6145 WHERE ra.budget_version_id = p_budget_version_id
6146 AND ra.resource_assignment_id = tmp.txn_resource_assignment_id
6147 AND ra.transaction_source_code IS NULL
6148 AND EXISTS
6149 ( SELECT 1
6150 FROM pa_budget_lines bl
6151 WHERE bl.resource_assignment_id = ra.resource_assignment_id
6152 AND bl.start_date >= l_etc_start_date
6153 AND rownum = 1 ));
6154 END IF;
6155 END IF; -- end manual lines logic
6156
6157 --Bug 6163120. Commented out the join on txn_budget_version_id
6158 --as its not populated in this table.
6159 SELECT txn_resource_assignment_id,
6160 min(txn_planning_start_date),
6161 max(txn_planning_end_date)
6162 BULK COLLECT
6163 INTO l_txn_res_asg_id_tab,
6164 l_txn_plan_start_date_tab,
6165 l_txn_plan_end_date_tab
6166 FROM PA_RES_LIST_MAP_TMP4
6167 --WHERE txn_budget_version_id = p_budget_version_id
6168 GROUP BY txn_resource_assignment_id;
6169
6170 FORALL j IN 1..l_txn_res_asg_id_tab.count
6171 UPDATE PA_RESOURCE_ASSIGNMENTS
6172 SET PLANNING_START_DATE = l_txn_plan_start_date_tab(j),
6173 PLANNING_END_DATE = l_txn_plan_end_date_tab(j)
6174 WHERE RESOURCE_ASSIGNMENT_ID = l_txn_res_asg_id_tab(j);
6175
6176 -- Bug 4159172: Moved update of sp_fixed_date from CREATE_RES_ASG to here.
6177
6178 SELECT spread_curve_id
6179 INTO l_spread_curve_id
6180 FROM pa_spread_curves_b
6181 WHERE spread_curve_code = 'FIXED_DATE';
6182
6183 UPDATE PA_RESOURCE_ASSIGNMENTS
6184 SET SP_FIXED_DATE = PLANNING_START_DATE
6185 WHERE SP_FIXED_DATE IS NULL
6186 AND SPREAD_CURVE_ID = l_spread_curve_id
6187 AND budget_version_id = p_budget_version_id
6188 AND EXISTS ( SELECT /*+ INDEX(tmp,PA_RES_LIST_MAP_TMP4_N2)*/ 1
6189 FROM pa_res_list_map_tmp4 tmp
6190 WHERE tmp.txn_resource_assignment_id = resource_assignment_id
6191 AND rownum = 1 );
6192
6193 -- Bug 3973015: Added the NOT EXISTS condition to the WHERE clause
6194 -- to reflect new Retain Manually Added Lines logic. The transaction
6195 -- source code should only be set if it is NULL and there are no
6196 -- budget lines for the resource assignment id.
6197 -- Update 12/1/04: We have changed how the Retain Manually Added
6198 -- Lines logic is handled, so replaced previous update logic.
6199
6200 --Bug 4198901 : Spread curve should be null when generate from source plan where actual exist
6201 -- added update for spread_curve_id /sp_fixed_date
6202 UPDATE PA_RESOURCE_ASSIGNMENTS
6203 SET transaction_source_code = p_gen_src_code,
6204 sp_fixed_date = decode (p_gen_src_code, 'RESOURCE_SCHEDULE', NULL, sp_fixed_date),
6205 spread_curve_id = decode (p_gen_src_code, 'RESOURCE_SCHEDULE', NULL, spread_curve_id)
6206 WHERE budget_version_id = p_budget_version_id
6207 AND EXISTS ( SELECT /*+ INDEX(tmp,PA_RES_LIST_MAP_TMP4_N2)*/ 1
6208 FROM pa_res_list_map_tmp4 tmp
6209 WHERE tmp.txn_resource_assignment_id = resource_assignment_id
6210 AND rownum = 1 );
6211
6212 IF P_PA_DEBUG_MODE = 'Y' THEN
6213 PA_DEBUG.Reset_Curr_Function;
6214 END IF;
6215 RETURN;
6216
6217 EXCEPTION
6218 WHEN OTHERS THEN
6219 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6220 x_msg_data := SUBSTR(SQLERRM,1,240);
6221 FND_MSG_PUB.add_exc_msg
6222 ( p_pkg_name => 'PA_FP_GEN_BUDGET_AMT_PUB'
6223 ,p_procedure_name => 'UPDATE_RES_ASG');
6224 IF P_PA_DEBUG_MODE = 'Y' THEN
6225 PA_DEBUG.Reset_Curr_Function;
6226 END IF;
6227 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6228
6229 END UPDATE_RES_ASG;
6230
6231 /*Procedure to delete the manually entered budget line records
6232 PX_RES_ASG_ID_TAB ->this pl sql table will have res asg id
6233 for which the budget lines has to be deleted.
6234 PX_DELETED_RES_ASG_ID_TAB->this pl sql table will have res asg ids
6235 for which the budget_lines are deleted by this API.
6236
6237 These two pl sql tables are used to make sure that
6238 we are not deleting budget lines records that was generated
6239 by the previous source in the same run.
6240 */
6241 PROCEDURE DEL_MANUAL_BDGT_LINES
6242 ( P_PROJECT_ID IN PA_PROJ_FP_OPTIONS.PROJECT_ID%TYPE,
6243 P_BUDGET_VERSION_ID IN PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE,
6244 PX_RES_ASG_ID_TAB IN OUT NOCOPY PA_PLSQL_DATATYPES.IdTabTyp,
6245 PX_DELETED_RES_ASG_ID_TAB IN OUT NOCOPY PA_PLSQL_DATATYPES.IdTabTyp,
6246 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
6247 X_MSG_COUNT OUT NOCOPY NUMBER,
6248 X_MSG_DATA OUT NOCOPY VARCHAR2) IS
6249 l_module_name VARCHAR2(200) := 'pa.plsql.PA_FP_GEN_BUDGET_AMT_PUB.DEL_MANUAL_BDGT_LINES';
6250
6251 l_del_res_asg_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6252 l_exist_flag VARCHAR2(1) := 'N';
6253 l_count NUMBER;
6254
6255 BEGIN
6256
6257 X_MSG_COUNT := 0;
6258 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
6259
6260 IF p_pa_debug_mode = 'Y' THEN
6261 pa_debug.set_curr_function( p_function => 'DEL_MANUAL_BDGT_LINES'
6262 ,p_debug_mode => p_pa_debug_mode);
6263 END IF;
6264
6265 FOR i IN 1..PX_RES_ASG_ID_TAB.count LOOP
6266 l_del_res_asg_id_tab(i) := PX_RES_ASG_ID_TAB(i);
6267 END LOOP;
6268
6269 IF PX_RES_ASG_ID_TAB.count > 0 THEN
6270 FOR i IN 1..PX_RES_ASG_ID_TAB.count LOOP
6271 l_exist_flag := 'N';
6272 FOR j IN 1..PX_DELETED_RES_ASG_ID_TAB.count LOOP
6273 IF PX_RES_ASG_ID_TAB(i) = PX_DELETED_RES_ASG_ID_TAB(j) THEN
6274 l_exist_flag := 'Y';
6275 EXIT;
6276 END IF;
6277 END LOOP;
6278
6279 IF l_exist_flag = 'N' THEN
6280 l_del_res_asg_id_tab(l_del_res_asg_id_tab.count+1) := PX_RES_ASG_ID_TAB(i);
6281 END IF;
6282 END LOOP;
6283 END IF;
6284
6285 -- Deleting the PL/SQL table
6286 PX_DELETED_RES_ASG_ID_TAB.delete;
6287
6288 FOR k in 1..l_del_res_asg_id_tab.count LOOP
6289 PX_DELETED_RES_ASG_ID_TAB(k) := l_del_res_asg_id_tab(k);
6290 END LOOP;
6291
6292 FORALL i in 1..PX_DELETED_RES_ASG_ID_TAB.count
6293 DELETE FROM PA_BUDGET_LINES
6294 WHERE RESOURCE_ASSIGNMENT_ID = PX_DELETED_RES_ASG_ID_TAB(i);
6295
6296 IF p_pa_debug_mode = 'Y' THEN
6297 pa_fp_gen_amount_utils.fp_debug
6298 (p_msg => 'Before calling
6299 pa_fp_rollup_pkg.rollup_budget_version',
6300 p_module_name => l_module_name,
6301 p_log_level => 5);
6302 END IF;
6303 PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION
6304 (p_budget_version_id => P_BUDGET_VERSION_ID,
6305 p_entire_version => 'Y',
6306 X_RETURN_STATUS => X_RETURN_STATUS,
6307 X_MSG_COUNT => X_MSG_COUNT,
6308 X_MSG_DATA => X_MSG_DATA);
6309
6310 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
6311 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6312 END IF;
6313 IF p_pa_debug_mode = 'Y' THEN
6314 pa_fp_gen_amount_utils.fp_debug
6315 (p_msg => 'Status after calling
6316 pa_fp_rollup_pkg.rollup_budget_version: '
6317 ||x_return_status,
6318 p_module_name => l_module_name,
6319 p_log_level => 5);
6320 END IF;
6321
6322 IF P_PA_DEBUG_MODE = 'Y' THEN
6323 PA_DEBUG.Reset_Curr_Function;
6324 END IF;
6325
6326 EXCEPTION
6327 WHEN OTHERS THEN
6328 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6329 x_msg_data := SUBSTR(SQLERRM,1,240);
6330 FND_MSG_PUB.add_exc_msg
6331 ( p_pkg_name => 'PA_FP_GEN_BUDGET_AMT_PUB'
6332 ,p_procedure_name => 'DEL_MANUAL_BDGT_LINES');
6333
6334 IF P_PA_DEBUG_MODE = 'Y' THEN
6335 PA_DEBUG.Reset_Curr_Function;
6336 END IF;
6337
6338 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6339 END DEL_MANUAL_BDGT_LINES;
6340
6341 PROCEDURE UPDATE_INIT_AMOUNTS
6342 (P_PROJECT_ID IN PA_PROJ_FP_OPTIONS.PROJECT_ID%TYPE,
6343 P_BUDGET_VERSION_ID IN PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE,
6344 P_RES_ASG_ID_TAB IN PA_PLSQL_DATATYPES.IdTabTyp,
6345 --this pl/sql table will have newly created res_asg_id from the source
6346 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
6347 X_MSG_COUNT OUT NOCOPY NUMBER,
6348 X_MSG_DATA OUT NOCOPY VARCHAR2) IS
6349
6350 l_module_name VARCHAR2(200) := 'pa.plsql.PA_FP_GEN_BUDGET_AMT_PUB.UPDATE_INIT_AMOUNTS';
6351
6352 BEGIN
6353
6354 X_MSG_COUNT := 0;
6355 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
6356
6357 IF p_pa_debug_mode = 'Y' THEN
6358 pa_debug.set_curr_function( p_function => 'UPDATE_INIT_AMOUNTS'
6359 ,p_debug_mode => p_pa_debug_mode);
6360 END IF;
6361
6362 FORALL i IN 1..P_RES_ASG_ID_TAB.count
6363 UPDATE PA_BUDGET_LINES
6364 SET INIT_QUANTITY = QUANTITY,
6365 INIT_QUANTITY_SOURCE = QUANTITY_SOURCE,
6366 INIT_RAW_COST = RAW_COST,
6367 INIT_BURDENED_COST = BURDENED_COST,
6368 INIT_REVENUE = REVENUE,
6369 INIT_RAW_COST_SOURCE = RAW_COST_SOURCE,
6370 INIT_BURDENED_COST_SOURCE = BURDENED_COST_SOURCE,
6371 INIT_REVENUE_SOURCE = REVENUE_SOURCE,
6372 PROJECT_INIT_RAW_COST = PROJECT_RAW_COST,
6373 PROJECT_INIT_BURDENED_COST = PROJECT_BURDENED_COST,
6374 PROJECT_INIT_REVENUE = PROJECT_REVENUE,
6375 TXN_INIT_RAW_COST = TXN_RAW_COST,
6376 TXN_INIT_BURDENED_COST = TXN_BURDENED_COST,
6377 TXN_INIT_REVENUE = TXN_REVENUE
6378 WHERE RESOURCE_ASSIGNMENT_ID = P_RES_ASG_ID_TAB(i);
6379
6380 IF P_PA_DEBUG_MODE = 'Y' THEN
6381 PA_DEBUG.Reset_Curr_Function;
6382 END IF;
6383
6384 EXCEPTION
6385 WHEN OTHERS THEN
6386 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6387 x_msg_data := SUBSTR(SQLERRM,1,240);
6388 FND_MSG_PUB.add_exc_msg
6389 ( p_pkg_name => 'PA_FP_GEN_BUDGET_AMT_PUB'
6390 ,p_procedure_name => 'UPDATE_INIT_AMOUNTS');
6391
6392 IF P_PA_DEBUG_MODE = 'Y' THEN
6393 PA_DEBUG.Reset_Curr_Function;
6394 END IF;
6395
6396 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6397
6398 END UPDATE_INIT_AMOUNTS;
6399
6400 /* Procedure to update the latest amount
6401 generation date in the budget versions table*/
6402 PROCEDURE UPDATE_BV_FOR_GEN_DATE
6403 (P_PROJECT_ID IN PA_PROJ_FP_OPTIONS.PROJECT_ID%TYPE,
6404 P_BUDGET_VERSION_ID IN PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE,
6405 P_ETC_START_DATE IN PA_BUDGET_VERSIONS.ETC_START_DATE%TYPE,
6406 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
6407 X_MSG_COUNT OUT NOCOPY NUMBER,
6408 X_MSG_DATA OUT NOCOPY VARCHAR2) IS
6409
6410 l_module_name VARCHAR2(200) := 'pa.plsql.PA_FP_GEN_BUDGET_AMT_PUB.UPDATE_BV_FOR_GEN_DATE';
6411
6412 l_last_updated_by NUMBER := FND_GLOBAL.user_id;
6413 l_last_update_login NUMBER := FND_GLOBAL.login_id;
6414 l_sysdate DATE := SYSDATE;
6415
6416 BEGIN
6417
6418 X_MSG_COUNT := 0;
6419 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
6420
6421 IF p_pa_debug_mode = 'Y' THEN
6422 pa_debug.set_curr_function( p_function => 'UPDATE_BV_FOR_GEN_DATE'
6423 ,p_debug_mode => p_pa_debug_mode);
6424 END IF;
6425
6426 UPDATE PA_BUDGET_VERSIONS
6427 SET LAST_AMT_GEN_DATE = l_sysdate,
6428 LAST_UPDATE_DATE = l_sysdate,
6429 LAST_UPDATED_BY = l_last_updated_by,
6430 CREATION_DATE = l_sysdate,
6431 CREATED_BY = l_last_updated_by,
6432 LAST_UPDATE_LOGIN = l_last_update_login,
6433 record_version_number = nvl(record_version_number,0)+1,
6434 ETC_START_DATE = p_etc_start_date
6435 WHERE BUDGET_VERSION_ID = P_BUDGET_VERSION_ID;
6436
6437 IF P_PA_DEBUG_MODE = 'Y' THEN
6438 PA_DEBUG.Reset_Curr_Function;
6439 END IF;
6440
6441 EXCEPTION
6442 WHEN OTHERS THEN
6443 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6444 x_msg_data := SUBSTR(SQLERRM,1,240);
6445 rollback;
6446 FND_MSG_PUB.add_exc_msg
6447 ( p_pkg_name => 'PA_FP_GEN_BUDGET_AMT_PUB'
6448 ,p_procedure_name => 'UPDATE_BV_FOR_GEN_DATE');
6449
6450 IF P_PA_DEBUG_MODE = 'Y' THEN
6451 PA_DEBUG.Reset_Curr_Function;
6452 END IF;
6453
6454 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6455
6456 END UPDATE_BV_FOR_GEN_DATE;
6457
6458 PROCEDURE GET_GENERATED_RES_ASG
6459 (P_PROJECT_ID IN PA_PROJ_FP_OPTIONS.PROJECT_ID%TYPE,
6460 P_BUDGET_VERSION_ID IN PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE,
6461 PX_GEN_RES_ASG_ID_TAB IN OUT NOCOPY PA_PLSQL_DATATYPES.IdTabTyp,
6462 P_CHK_DUPLICATE_FLAG IN VARCHAR2,
6463 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
6464 X_MSG_COUNT OUT NOCOPY NUMBER,
6465 X_MSG_DATA OUT NOCOPY VARCHAR2) IS
6466 l_module_name VARCHAR2(200) := 'pa.plsql.PA_FP_GEN_BUDGET_AMT_PUB.GET_GENERATED_RES_ASG';
6467
6468 l_gen_res_asg_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6469 l_cmt_res_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6470 l_exist_flag VARCHAR2(1);
6471
6472 BEGIN
6473 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
6474 X_MSG_COUNT := 0;
6475
6476 IF p_pa_debug_mode = 'Y' THEN
6477 pa_debug.set_curr_function( p_function => 'GET_GENERATED_RES_ASG'
6478 ,p_debug_mode => p_pa_debug_mode);
6479 END IF;
6480
6481 /* For first time call PA_GEN_RES_ASG_ID_TAB will
6482 be empty so it is bulk collected from tmp4 table*/
6483 IF P_CHK_DUPLICATE_FLAG = 'N' THEN
6484 SELECT DISTINCT TXN_RESOURCE_ASSIGNMENT_ID
6485 BULK COLLECT
6486 INTO PX_GEN_RES_ASG_ID_TAB
6487 FROM PA_RES_LIST_MAP_TMP4;
6488 END IF;
6489
6490 /*Code checking for duplicate res_asg_id */
6491 FOR i IN 1..PX_GEN_RES_ASG_ID_TAB.count LOOP
6492 l_gen_res_asg_id_tab(i) := PX_GEN_RES_ASG_ID_TAB(i);
6493 END LOOP;
6494
6495 SELECT DISTINCT TXN_RESOURCE_ASSIGNMENT_ID
6496 BULK COLLECT
6497 INTO l_cmt_res_id_tab
6498 FROM PA_RES_LIST_MAP_TMP4;
6499
6500 IF l_cmt_res_id_tab.count > 0 THEN
6501 FOR k IN 1..l_cmt_res_id_tab.count LOOP
6502 l_exist_flag := 'N';
6503 FOR kk IN 1..l_gen_res_asg_id_tab.count LOOP
6504 IF l_gen_res_asg_id_tab(kk) = l_cmt_res_id_tab(k) THEN
6505 l_exist_flag := 'Y';
6506 EXIT;
6507 END IF;
6508 END LOOP;
6509 IF l_exist_flag = 'N' THEN
6510 PX_GEN_RES_ASG_ID_TAB(PX_GEN_RES_ASG_ID_TAB.count+1) := l_cmt_res_id_tab(k);
6511 END IF;
6512 END LOOP;
6513 END IF;
6514
6515 IF P_PA_DEBUG_MODE = 'Y' THEN
6516 PA_DEBUG.Reset_Curr_Function;
6517 END IF;
6518
6519 EXCEPTION
6520 WHEN OTHERS THEN
6521 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6522 x_msg_data := SUBSTR(SQLERRM,1,240);
6523 FND_MSG_PUB.add_exc_msg
6524 ( p_pkg_name => 'PA_FP_GEN_BUDGET_AMT_PUB'
6525 ,p_procedure_name => 'GET_GENERATED_RES_ASG');
6526
6527 IF P_PA_DEBUG_MODE = 'Y' THEN
6528 PA_DEBUG.Reset_Curr_Function;
6529 END IF;
6530
6531 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6532 END GET_GENERATED_RES_ASG;
6533
6534
6535 /******************************************************************************
6536 This api is called in calculate flow to add the currencies in budget lines
6537 table for a budget version as txn currencies in pa_fp_txn_currencies table
6538
6539 AUG 10 2004 Raja Bug 3815266
6540 Re-written the entire code to take care of both finplan
6541 and workplan contexts. Previously refresh_wp_settings
6542 was being called for workplan context. This has been
6543 removed and re-structured the code such that there is
6544 no code duplication
6545 OCT 10 2004 Raja Bug 3919127
6546 In copy projet flow first published version is being
6547 created and later its copy as working version. Add the
6548 missing currencies to all the workplan versions
6549 ******************************************************************************/
6550 PROCEDURE INSERT_TXN_CURRENCY
6551 (P_PROJECT_ID IN PA_PROJ_FP_OPTIONS.PROJECT_ID%TYPE,
6552 P_BUDGET_VERSION_ID IN PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE,
6553 P_FP_COLS_REC IN PA_FP_GEN_AMOUNT_UTILS.FP_COLS,
6554 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
6555 X_MSG_COUNT OUT NOCOPY NUMBER,
6556 X_MSG_DATA OUT NOCOPY VARCHAR2) IS
6557 l_module_name VARCHAR2(200) := 'pa.plsql.PA_FP_GEN_BUDGET_AMT_PUB.INSERT_TXN_CURRENCY';
6558
6559 l_txn_curr_code_tab PA_PLSQL_DATATYPES.Char30TabTyp;
6560 l_budget_version_id_tbl PA_PLSQL_DATATYPES.NumTabTyp;
6561 l_proj_fp_options_id_tbl PA_PLSQL_DATATYPES.NumTabTyp;
6562
6563 l_fp_cols_rec PA_FP_GEN_AMOUNT_UTILS.FP_COLS;
6564 l_pc pa_budget_lines.txn_currency_code%type;
6565 l_pfc pa_budget_lines.txn_currency_code%type;
6566
6567 l_last_updated_by NUMBER := FND_GLOBAL.user_id;
6568 l_last_update_login NUMBER := FND_GLOBAL.login_id;
6569 l_sysdate DATE := SYSDATE;
6570
6571 l_wp_version_flag pa_budget_versions.wp_version_flag%type;
6572
6573 BEGIN
6574 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
6575 X_MSG_COUNT := 0;
6576
6577 IF p_pa_debug_mode = 'Y' THEN
6578 pa_debug.set_curr_function( p_function => 'INSERT_TXN_CURRENCY'
6579 ,p_debug_mode => p_pa_debug_mode);
6580 END IF;
6581
6582 l_fp_cols_rec := P_FP_COLS_REC;
6583
6584 /* get the plan version dtls if
6585 the record does have the version dtls */
6586 IF ( l_fp_cols_rec.x_proj_fp_options_id is null
6587 OR l_fp_cols_rec.x_fin_plan_type_id is null
6588 OR p_project_id is null) THEN
6589
6590 IF p_pa_debug_mode = 'Y' THEN
6591 pa_fp_gen_amount_utils.fp_debug
6592 (p_msg => 'Before calling
6593 pa_fp_gen_amount_utils.get_plan_version_dtls',
6594 p_module_name => l_module_name,
6595 p_log_level => 5);
6596 END IF;
6597
6598 PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS
6599 (P_PROJECT_ID => P_PROJECT_ID,
6600 P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
6601 X_FP_COLS_REC => l_fp_cols_rec,
6602 X_RETURN_STATUS => X_RETURN_STATUS,
6603 X_MSG_COUNT => X_MSG_COUNT,
6604 X_MSG_DATA => X_MSG_DATA);
6605
6606 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
6607 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6608 END IF;
6609 IF p_pa_debug_mode = 'Y' THEN
6610 pa_fp_gen_amount_utils.fp_debug
6611 (p_msg => 'Status after calling
6612 pa_fp_gen_amount_utils.get_plan_version_dtls: '
6613 ||x_return_status,
6614 p_module_name => l_module_name,
6615 p_log_level => 5);
6616 END IF;
6617 END IF;
6618
6619 l_pc := l_FP_COLS_REC.X_PROJECT_CURRENCY_CODE;
6620 l_pfc := l_FP_COLS_REC.X_PROJFUNC_CURRENCY_CODE;
6621
6622 /* If the version is a workplan version, then the missing
6623 currencies should first be added to the workplan plan
6624 type and then all the working workplan versions*/
6625
6626 SELECT nvl(wp_version_flag,'N')
6627 INTO l_wp_version_flag
6628 FROM pa_budget_versions
6629 WHERE budget_version_id = p_budget_version_id;
6630
6631 IF l_wp_version_flag = 'N' THEN
6632
6633 -- if the version is finplan version its sufficient to add the
6634 -- currencies for this version alone
6635 l_proj_fp_options_id_tbl(1) := l_fp_cols_rec.X_PROJ_FP_OPTIONS_ID;
6636 l_budget_version_id_tbl(1) := P_BUDGET_VERSION_ID;
6637 ELSE
6638 -- New Currencies should be added to both workplan plan type and
6639 -- all the working workplan versions
6640
6641 -- fetch all the working workplan versions
6642 -- bug 3919127 do not restrict workplan versions based on the
6643 -- structure version status
6644 SELECT bv.budget_version_id
6645 ,pfo.proj_fp_options_id
6646 BULK COLLECT INTO
6647 l_budget_version_id_tbl,
6648 l_proj_fp_options_id_tbl
6649 FROM pa_budget_versions bv,
6650 --bug 3919127 pa_proj_elem_ver_structure ver,
6651 pa_proj_fp_options pfo
6652 WHERE bv.project_id = p_project_id
6653 AND bv.wp_version_flag = 'Y'
6654 /* bug 3919127
6655 AND bv.project_id = ver.project_id
6656 AND bv.project_structure_version_id = ver.element_version_id
6657 AND (PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id) = 'N' OR
6658 ver.status_code IN('STRUCTURE_WORKING'))
6659 */
6660 AND pfo.project_id = p_project_id
6661 AND pfo.fin_plan_version_id = bv.budget_version_id;
6662
6663 -- Add plan type record to the plsql tables
6664 SELECT proj_fp_options_id,
6665 null
6666 INTO l_proj_fp_options_id_tbl(nvl(l_proj_fp_options_id_tbl.count,0) + 1),
6667 l_budget_version_id_tbl(nvl(l_proj_fp_options_id_tbl.count,0) + 1)
6668 FROM pa_proj_fp_options
6669 WHERE project_id = p_project_id AND
6670 fin_plan_type_id = l_fp_cols_rec.X_FIN_PLAN_TYPE_ID AND
6671 fin_plan_option_level_code = 'PLAN_TYPE';
6672 END IF;
6673
6674 -- For each of the fp option in the pl sql tables enter all the missing currencies
6675
6676 -- Add the currency for each of the workplan versions
6677 FOR i IN l_proj_fp_options_id_tbl.first .. l_proj_fp_options_id_tbl.last
6678 LOOP
6679
6680 l_txn_curr_code_tab.DELETE; -- this is really not necessary but kept here for clarity
6681
6682 -- Bulk collect all the txn currencies that should be added
6683 SELECT DISTINCT BL.TXN_CURRENCY_CODE
6684 BULK COLLECT
6685 INTO l_txn_curr_code_tab
6686 FROM PA_BUDGET_LINES BL
6687 WHERE BL.BUDGET_VERSION_ID = P_BUDGET_VERSION_ID
6688 AND NOT EXISTS
6689 (SELECT 1
6690 FROM PA_FP_TXN_CURRENCIES TC
6691 WHERE TC.proj_fp_options_id = l_proj_fp_options_id_tbl(i) AND
6692 TC.txn_currency_code = BL.txn_currency_code);
6693
6694 FORALL j IN 1..l_txn_curr_code_tab.count
6695 INSERT INTO PA_FP_TXN_CURRENCIES
6696 (
6697 FP_TXN_CURRENCY_ID,
6698 PROJ_FP_OPTIONS_ID,
6699 PROJECT_ID,
6700 FIN_PLAN_TYPE_ID,
6701 FIN_PLAN_VERSION_ID,
6702 TXN_CURRENCY_CODE,
6703 DEFAULT_REV_CURR_FLAG,
6704 DEFAULT_COST_CURR_FLAG,
6705 DEFAULT_ALL_CURR_FLAG,
6706 PROJECT_CURRENCY_FLAG,
6707 PROJFUNC_CURRENCY_FLAG,
6708 CREATION_DATE ,
6709 CREATED_BY ,
6710 LAST_UPDATE_LOGIN ,
6711 LAST_UPDATED_BY ,
6712 LAST_UPDATE_DATE
6713 )
6714 VALUES
6715 (
6716 PA_FP_TXN_CURRENCIES_S.NEXTVAL,
6717 l_proj_fp_options_id_tbl(i),
6718 l_fp_cols_rec.X_PROJECT_ID,
6719 l_fp_cols_rec.X_FIN_PLAN_TYPE_ID,
6720 l_budget_version_id_tbl(i),
6721 l_txn_curr_code_tab(j),
6722 'N',
6723 'N',
6724 'N',
6725 Decode(l_txn_curr_code_tab(j),l_pc,'Y','N'),
6726 Decode(l_txn_curr_code_tab(j),l_pfc,'Y','N'),
6727 l_sysdate,
6728 l_last_updated_by,
6729 l_last_update_login,
6730 l_last_updated_by,
6731 l_sysdate );
6732
6733 END LOOP; -- FOR j IN l_proj_fp_options_id_tbl.first .. l_proj_fp_options_id_tbl.last
6734
6735 IF P_PA_DEBUG_MODE = 'Y' THEN
6736 PA_DEBUG.Reset_Curr_Function;
6737 END IF;
6738
6739 EXCEPTION
6740 WHEN OTHERS THEN
6741 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6742 x_msg_data := SUBSTR(SQLERRM,1,240);
6743 FND_MSG_PUB.add_exc_msg
6744 ( p_pkg_name => 'PA_FP_GEN_BUDGET_AMT_PUB'
6745 ,p_procedure_name => 'INSERT_TXN_CURRENCY');
6746
6747 IF P_PA_DEBUG_MODE = 'Y' THEN
6748 PA_DEBUG.Reset_Curr_Function;
6749 END IF;
6750
6751 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6752 END INSERT_TXN_CURRENCY;
6753
6754 PROCEDURE RESET_COST_AMOUNTS
6755 (P_BUDGET_VERSION_ID IN PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE,
6756 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
6757 X_MSG_COUNT OUT NOCOPY NUMBER,
6758 X_MSG_DATA OUT NOCOPY VARCHAR2) IS
6759 l_module_name VARCHAR2(200) := 'pa.plsql.PA_FP_GEN_BUDGET_AMT_PUB.RESET_COST_AMOUNTS';
6760 BEGIN
6761
6762 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
6763 X_MSG_COUNT := 0;
6764
6765 IF p_pa_debug_mode = 'Y' THEN
6766 pa_debug.set_curr_function( p_function => 'RESET_COST_AMOUNTS'
6767 ,p_debug_mode => p_pa_debug_mode);
6768 END IF;
6769
6770 UPDATE PA_BUDGET_LINES
6771 SET RAW_COST = null,
6772 BURDENED_COST = null,
6773 PROJECT_RAW_COST = null,
6774 PROJECT_BURDENED_COST = null,
6775 TXN_RAW_COST = null,
6776 TXN_BURDENED_COST = null,
6777 PROJFUNC_COST_RATE_TYPE = null,
6778 PROJFUNC_COST_EXCHANGE_RATE = null,
6779 PROJFUNC_COST_RATE_DATE_TYPE= null,
6780 PROJFUNC_COST_RATE_DATE = null,
6781 PROJECT_COST_RATE_TYPE = null,
6782 PROJECT_COST_EXCHANGE_RATE = null,
6783 PROJECT_COST_RATE_DATE_TYPE = null,
6784 PROJECT_COST_RATE_DATE = null
6785 WHERE BUDGET_VERSION_ID = P_BUDGET_VERSION_ID;
6786
6787 IF P_PA_DEBUG_MODE = 'Y' THEN
6788 PA_DEBUG.Reset_Curr_Function;
6789 END IF;
6790
6791 EXCEPTION
6792 WHEN OTHERS THEN
6793 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6794 x_msg_data := SUBSTR(SQLERRM,1,240);
6795 FND_MSG_PUB.add_exc_msg
6796 ( p_pkg_name => 'PA_FP_GEN_BUDGET_AMT_PUB'
6797 ,p_procedure_name => 'RESET_COST_AMOUNTS');
6798
6799 IF P_PA_DEBUG_MODE = 'Y' THEN
6800 PA_DEBUG.Reset_Curr_Function;
6801 END IF;
6802
6803 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6804
6805 END RESET_COST_AMOUNTS;
6806
6807 PROCEDURE GEN_REV_BDGT_AMT_RES_SCH_WRP
6808 (P_PROJECT_ID IN pa_projects_all.PROJECT_ID%TYPE,
6809 P_BUDGET_VERSION_ID IN PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE,
6810 P_FP_COLS_REC IN PA_FP_GEN_AMOUNT_UTILS.FP_COLS,
6811 P_PLAN_CLASS_CODE IN PA_FIN_PLAN_TYPES_B.PLAN_CLASS_CODE%TYPE,
6812 P_GEN_SRC_CODE IN PA_PROJ_FP_OPTIONS.GEN_ALL_SRC_CODE%TYPE,
6813 P_COST_PLAN_TYPE_ID IN PA_PROJ_FP_OPTIONS.GEN_SRC_COST_PLAN_TYPE_ID%TYPE,
6814 P_COST_VERSION_ID IN PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE,
6815 P_RETAIN_MANUAL_FLAG IN PA_PROJ_FP_OPTIONS.GEN_COST_RET_MANUAL_LINE_FLAG%TYPE,
6816 P_CALLED_MODE IN VARCHAR2,
6817 P_INC_CHG_DOC_FLAG IN PA_PROJ_FP_OPTIONS.GEN_COST_INCL_CHANGE_DOC_FLAG%TYPE,
6818 P_INC_BILL_EVENT_FLAG IN PA_PROJ_FP_OPTIONS.GEN_REV_INCL_BILL_EVENT_FLAG%TYPE,
6819 P_INC_OPEN_COMMIT_FLAG IN PA_PROJ_FP_OPTIONS.GEN_COST_INCL_OPEN_COMM_FLAG%TYPE,
6820 P_ACTUALS_THRU_DATE IN PA_PERIODS_ALL.END_DATE%TYPE,
6821 P_CI_ID_TAB IN PA_PLSQL_DATATYPES.IdTabTyp,
6822 PX_GEN_RES_ASG_ID_TAB IN OUT NOCOPY PA_PLSQL_DATATYPES.IdTabTyp,
6823 PX_DELETED_RES_ASG_ID_TAB IN OUT NOCOPY PA_PLSQL_DATATYPES.IdTabTyp,
6824 P_COMMIT_FLAG IN VARCHAR2,
6825 P_INIT_MSG_FLAG IN VARCHAR2,
6826 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
6827 X_MSG_COUNT OUT NOCOPY NUMBER,
6828 X_MSG_DATA OUT NOCOPY VARCHAR2) IS
6829
6830 l_module_name VARCHAR2(200) := 'pa.plsql.PA_FP_GEN_BUDGET_AMT_PUB.GEN_REV_BDGT_AMT_RES_SCH_WRP';
6831
6832 /*local variable for calling get planning rates*/
6833 l_res_asg_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
6834 l_ra_quantity_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
6835 l_task_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6836 l_res_list_member_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6837 l_txn_currency_code_tab SYSTEM.pa_varchar2_15_tbl_type:=SYSTEM.pa_varchar2_15_tbl_type();
6838 l_ra_start_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
6839 l_uom_tab pa_plsql_datatypes.Char30TabTyp;
6840 l_rate_based_flag_tab pa_plsql_datatypes.Char30TabTyp;
6841 l_resource_class_code_tab pa_plsql_datatypes.Char30TabTyp;
6842 l_organization_id_tab pa_plsql_datatypes.Char30TabTyp;
6843 l_job_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6844 l_person_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6845 l_expenditure_type_tab pa_plsql_datatypes.Char30TabTyp;
6846 l_non_labor_resource_tab pa_plsql_datatypes.Char30TabTyp;
6847 l_bom_resource_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6848 l_inventory_item_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6849 l_item_category_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6850 l_mfc_cost_type_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6851 l_rate_incur_by_organz_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6852 l_rate_ovrd_to_organz_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6853 l_rate_expenditure_org_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6854 l_rate_expenditure_type_tab pa_plsql_datatypes.Char30TabTyp;
6855 l_rate_organization_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6856 l_project_assignment_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6857
6858 l_assign_precedes_task_tab pa_plsql_datatypes.Char30TabTyp;
6859 l_bill_job_group_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6860 l_carry_out_organiz_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6861 l_multi_currency_bill_flag_tab pa_plsql_datatypes.Char30TabTyp;
6862 l_org_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6863 l_non_lab_bill_rate_org_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6864 l_non_lab_sch_discount_tab PA_PLSQL_DATATYPES.NumTabTyp;
6865 l_non_lab_sch_fixed_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
6866 l_project_type_tab pa_plsql_datatypes.Char30TabTyp;
6867 l_lab_bill_rate_org_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6868
6869 l_lab_sch_FIXED_DATE_tab PA_PLSQL_DATATYPES.DateTabTyp;
6870 l_top_task_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6871 l_scheduled_start_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
6872 l_labor_scheduled_discount_tab PA_PLSQL_DATATYPES.NumTabTyp;
6873 l_labor_sch_type_tab pa_plsql_datatypes.Char30TabTyp;
6874 l_non_labor_sch_type_tab pa_plsql_datatypes.Char30TabTyp;
6875
6876 l_rev_res_class_rt_sch_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6877 l_cost_res_class_rt_sch_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6878
6879 l_res_format_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
6880
6881 l_bill_rate number;
6882 l_cost_rate number;
6883 l_burden_cost_rate number;
6884 l_burden_multiplier number;
6885 l_raw_cost number;
6886 l_burden_cost number;
6887 l_raw_revenue number;
6888 l_bill_markup_percentage number;
6889 l_cost_txn_curr_code varchar2(30);
6890 l_rev_txn_curr_code varchar2(30);
6891 l_raw_cost_rejection_code varchar2(30);
6892 l_burden_cost_rejection_code varchar2(30);
6893 l_revenue_rejection_code varchar2(30);
6894 l_cost_ind_compiled_set_id number;
6895
6896 /*Local PL/SQL table used for calling Calculate API*/
6897 l_calling_module VARCHAR2(30) := 'BUDGET_GENERATION';
6898 l_refresh_rates_flag VARCHAR2(1) := 'Y';
6899 l_refresh_conv_rates_flag VARCHAR2(1) := 'N';
6900 l_spread_required_flag VARCHAR2(1) := 'N';
6901 l_conv_rates_required_flag VARCHAR2(1) := 'N';
6902 l_rollup_required_flag VARCHAR2(1) := 'N';
6903 l_mass_adjust_flag VARCHAR2(1) := 'N';
6904 l_quantity_adj_pct NUMBER := NULL;
6905 l_cost_rate_adj_pct NUMBER := NULL;
6906 l_burdened_rate_adj_pct NUMBER := NULL;
6907 l_bill_rate_adj_pct NUMBER := NULL;
6908 l_source_context pa_fp_res_assignments_tmp.source_context%TYPE := 'RESOURCE_ASSIGNMENT';
6909
6910 l_delete_budget_lines_tab SYSTEM.pa_varchar2_1_tbl_type:=SYSTEM.pa_varchar2_1_tbl_type();
6911 l_spread_amts_flag_tab SYSTEM.pa_varchar2_1_tbl_type:=SYSTEM.pa_varchar2_1_tbl_type();
6912 l_txn_currency_override_tab SYSTEM.pa_varchar2_15_tbl_type:=SYSTEM.pa_varchar2_15_tbl_type();
6913 l_addl_qty_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
6914 l_total_raw_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
6915 l_addl_raw_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
6916 l_total_burdened_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
6917 l_addl_burdened_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
6918 l_total_revenue_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
6919 l_addl_revenue_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
6920 l_raw_cost_rate_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
6921 l_rw_cost_rate_override_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
6922 l_b_cost_rate_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
6923 l_b_cost_rate_override_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
6924 l_bill_rate_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
6925 l_bill_rate_override_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
6926 l_line_start_date_tab SYSTEM.pa_date_tbl_type:=SYSTEM.pa_date_tbl_type();
6927 l_line_end_date_tab SYSTEM.pa_date_tbl_type:=SYSTEM.pa_date_tbl_type();
6928 /*end variable for calculate*/
6929
6930 l_msg_count NUMBER;
6931 l_msg_data VARCHAR2(2000);
6932 l_data VARCHAR2(2000);
6933 l_msg_index_out NUMBER:=0;
6934 BEGIN
6935 IF p_init_msg_flag = 'Y' THEN
6936 FND_MSG_PUB.initialize;
6937 END IF;
6938 X_MSG_COUNT := 0;
6939 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
6940
6941 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
6942 PA_DEBUG.init_err_stack('PA_FP_GEN_BUDGET_AMT_PUB.GEN_REV_BDGT_AMT_RES_SCH_WRP');
6943 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
6944 pa_debug.set_curr_function( p_function => 'GEN_REV_BDGT_AMT_RES_SCH_WRP',
6945 p_debug_mode => p_pa_debug_mode);
6946 END IF;
6947
6948
6949 IF p_pa_debug_mode = 'Y' THEN
6950 pa_fp_gen_amount_utils.fp_debug
6951 (p_msg => 'Before calling
6952 pa_fp_gen_budget_amt_pub.generate_budget_amt_res_sch',
6953 p_module_name => l_module_name,
6954 p_log_level => 5);
6955 END IF;
6956 PA_FP_GEN_BUDGET_AMT_PUB.GENERATE_BUDGET_AMT_RES_SCH
6957 (P_PROJECT_ID => P_PROJECT_ID,
6958 P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
6959 P_FP_COLS_REC => P_FP_COLS_REC,
6960 P_PLAN_CLASS_CODE => P_PLAN_CLASS_CODE,
6961 P_GEN_SRC_CODE => P_GEN_SRC_CODE,
6962 P_COST_PLAN_TYPE_ID => P_COST_PLAN_TYPE_ID,
6963 P_COST_VERSION_ID => P_COST_VERSION_ID,
6964 P_RETAIN_MANUAL_FLAG => P_RETAIN_MANUAL_FLAG,
6965 P_CALLED_MODE => P_CALLED_MODE,
6966 P_INC_CHG_DOC_FLAG => P_INC_CHG_DOC_FLAG,
6967 P_INC_BILL_EVENT_FLAG => P_INC_BILL_EVENT_FLAG,
6968 P_INC_OPEN_COMMIT_FLAG => P_INC_OPEN_COMMIT_FLAG,
6969 P_ACTUALS_THRU_DATE => P_ACTUALS_THRU_DATE,
6970 P_CI_ID_TAB => P_CI_ID_TAB,
6971 PX_GEN_RES_ASG_ID_TAB => PX_GEN_RES_ASG_ID_TAB,
6972 PX_DELETED_RES_ASG_ID_TAB => PX_DELETED_RES_ASG_ID_TAB,
6973 P_COMMIT_FLAG => P_COMMIT_FLAG,
6974 P_INIT_MSG_FLAG => P_INIT_MSG_FLAG,
6975 X_RETURN_STATUS => X_RETURN_STATUS,
6976 X_MSG_COUNT => X_MSG_COUNT,
6977 X_MSG_DATA => X_MSG_DATA);
6978 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
6979 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6980 END IF;
6981 IF p_pa_debug_mode = 'Y' THEN
6982 pa_fp_gen_amount_utils.fp_debug
6983 (p_msg => 'Status after calling
6984 pa_fp_gen_budget_amt_pub.generate_budget_amt_res_sch: '
6985 ||x_return_status,
6986 p_module_name => l_module_name,
6987 p_log_level => 5);
6988 END IF;
6989
6990 SELECT /*+ INDEX(tmp,PA_FP_CALC_AMT_TMP2_N2)*/
6991 tmp.RESOURCE_ASSIGNMENT_ID,
6992 tmp.total_plan_quantity,
6993 ra.task_id,
6994 ra.resource_list_member_id,
6995 P_FP_COLS_REC.x_project_currency_code,
6996 ra.planning_start_date,
6997 ra.unit_of_measure,
6998 ra.rate_based_flag,
6999 ra.resource_class_code,
7000 ra.organization_id,
7001 ra.job_id,
7002 ra.person_id,
7003 ra.expenditure_type,
7004 ra.non_labor_resource,
7005 ra.bom_resource_id,
7006 ra.inventory_item_id,
7007 ra.item_category_id,
7008 ra.mfc_cost_type_id,
7009 ra.organization_id,
7010 null,
7011 ra.rate_expenditure_org_id,
7012 ra.rate_expenditure_type,
7013 ra.organization_id,
7014 ra.project_assignment_id,
7015
7016 proj.assign_precedes_task,
7017 proj.bill_job_group_id,
7018 proj.carrying_out_organization_id,
7019 proj.multi_currency_billing_flag,
7020 proj.org_id,
7021 proj.non_labor_bill_rate_org_id,
7022 proj.non_labor_schedule_discount,
7023 proj.non_labor_schedule_fixed_date,
7024 proj.project_type,
7025 proj.labor_bill_rate_org_id,
7026
7027 t.LABOR_SCHEDULE_FIXED_DATE,
7028 t.top_task_id,
7029 t.scheduled_start_date,
7030 t.labor_schedule_discount,
7031 t.labor_sch_type,
7032 t.non_labor_sch_type,
7033
7034 decode(fp.use_planning_rates_flag,'N',fp.res_class_bill_rate_sch_id,
7035 fp.rev_res_class_rate_sch_id),
7036 decode(fp.use_planning_rates_flag,'N',fp.res_class_raw_cost_sch_id,
7037 NULL),
7038
7039 res_format_id
7040 BULK COLLECT INTO
7041 l_res_asg_id_tab,
7042 l_ra_quantity_tab,
7043 l_task_id_tab,
7044 l_res_list_member_id_tab,
7045 l_txn_currency_code_tab,
7046 l_ra_start_date_tab,
7047 l_uom_tab,
7048 l_rate_based_flag_tab,
7049 l_resource_class_code_tab,
7050 l_organization_id_tab,
7051 l_job_id_tab,
7052 l_person_id_tab,
7053 l_expenditure_type_tab,
7054 l_non_labor_resource_tab,
7055 l_bom_resource_id_tab,
7056 l_inventory_item_id_tab,
7057 l_item_category_id_tab,
7058 l_mfc_cost_type_id_tab,
7059 l_rate_incur_by_organz_id_tab,
7060 l_rate_ovrd_to_organz_id_tab,
7061 l_rate_expenditure_org_id_tab,
7062 l_rate_expenditure_type_tab,
7063 l_rate_organization_id_tab,
7064 l_project_assignment_id_tab,
7065
7066 l_assign_precedes_task_tab,
7067 l_bill_job_group_id_tab,
7068 l_carry_out_organiz_id_tab,
7069 l_multi_currency_bill_flag_tab,
7070 l_org_id_tab,
7071 l_non_lab_bill_rate_org_id_tab,
7072 l_non_lab_sch_discount_tab,
7073 l_non_lab_sch_fixed_date_tab,
7074 l_project_type_tab,
7075
7076 l_lab_bill_rate_org_id_tab,
7077 l_lab_sch_FIXED_DATE_tab,
7078 l_top_task_id_tab,
7079 l_scheduled_start_date_tab,
7080 l_labor_scheduled_discount_tab,
7081 l_labor_sch_type_tab,
7082 l_non_labor_sch_type_tab,
7083
7084 l_rev_res_class_rt_sch_id_tab,
7085 l_cost_res_class_rt_sch_id_tab,
7086
7087 l_res_format_id_tab
7088 FROM pa_fp_calc_amt_tmp2 tmp, pa_resource_assignments ra,
7089 pa_projects_all proj, pa_tasks t,
7090 pa_proj_fp_options fp,
7091 pa_resource_list_members rlm
7092 WHERE tmp.resource_assignment_id = ra.resource_assignment_id
7093 AND ra.project_id = proj.project_id
7094 AND ra.task_id = t.task_id(+)
7095 AND fp.fin_plan_version_id = ra.budget_version_id
7096 AND ra.resource_list_member_id = rlm.resource_list_member_id;
7097
7098 FOR i IN 1..l_res_asg_id_tab.count LOOP
7099 IF p_pa_debug_mode = 'Y' THEN
7100 pa_fp_gen_amount_utils.fp_debug
7101 (p_msg => 'Before calling pa_plan_revenue.Get_planning_Rates',
7102 p_module_name => l_module_name,
7103 p_log_level => 5);
7104 END IF;
7105 PA_PLAN_REVENUE.GET_PLANNING_RATES(
7106 p_project_id => p_project_id,
7107 p_task_id => l_task_id_tab(i),
7108 p_top_task_id => l_top_task_id_tab(i),
7109 p_person_id => l_person_id_tab(i),
7110 p_job_id => l_job_id_tab(i),
7111 p_bill_job_grp_id => l_bill_job_group_id_tab(i),
7112 p_resource_class => l_resource_class_code_tab(i),
7113 p_planning_resource_format => l_res_format_id_tab(i),
7114 p_use_planning_rates_flag => 'N',
7115 p_rate_based_flag => l_rate_based_flag_tab(i),
7116 p_uom => l_uom_tab(i),
7117 p_system_linkage => NULL,
7118 p_project_organz_id => l_carry_out_organiz_id_tab(i),
7119 p_rev_res_class_rate_sch_id => l_rev_res_class_rt_sch_id_tab(i),
7120 p_cost_res_class_rate_sch_id => l_cost_res_class_rt_sch_id_tab(i),
7121 p_calculate_mode => 'REVENUE',
7122 p_mcb_flag => l_multi_currency_bill_flag_tab(i),
7123 p_quantity => l_ra_quantity_tab(i),
7124 p_item_date => l_ra_start_date_tab(i),
7125 p_cost_sch_type => 'COST',
7126 p_labor_sch_type => l_labor_sch_type_tab(i),
7127 p_non_labor_sch_type => l_non_labor_sch_type_tab(i),
7128 --p_labor_schdl_discnt => NULL,
7129 p_labor_bill_rate_org_id => l_lab_bill_rate_org_id_tab(i),
7130 --p_labor_std_bill_rate_schdl => NULL,
7131 p_labor_schdl_fixed_date => l_LAb_SCH_FIXED_DATE_tab(i),
7132 p_assignment_id => l_project_assignment_id_tab(i),
7133 p_project_org_id => l_org_id_tab(i),
7134 p_project_type => l_project_type_tab(i),
7135 p_expenditure_type => nvl(l_expenditure_type_tab(i),l_rate_expenditure_type_tab(i)),
7136 p_non_labor_resource => l_non_labor_resource_tab(i),
7137 p_incurred_by_organz_id => nvl(l_rate_incur_by_organz_id_tab(i),l_organization_id_tab(i)),
7138 p_override_to_organz_id => l_rate_ovrd_to_organz_id_tab(i),
7139 p_expenditure_org_id => nvl(l_rate_expenditure_org_id_tab(i),l_org_id_tab(i)),
7140 p_assignment_precedes_task => l_assign_precedes_task_tab(i),
7141 p_planning_transaction_id => l_res_asg_id_tab(i),
7142 --,p_task_bill_rate_org_id => l_task_bill_rate_org_id,
7143 p_project_bill_rate_org_id => l_non_lab_bill_rate_org_id_tab(i),
7144 p_nlr_organization_id => nvl(l_organization_id_tab(i),l_carry_out_organiz_id_tab(i)),
7145 p_project_sch_date => l_non_lab_sch_fixed_date_tab(i),
7146 p_task_sch_date => l_scheduled_start_date_tab(i),
7147 p_project_sch_discount => l_non_lab_sch_discount_tab(i),
7148 p_task_sch_discount => l_labor_scheduled_discount_tab(i),
7149 p_inventory_item_id => l_inventory_item_id_tab(i),
7150 p_BOM_resource_Id => l_bom_resource_id_tab(i),
7151 p_mfc_cost_type_id => l_mfc_cost_type_id_tab(i),
7152 p_item_category_id => l_item_category_id_tab(i),
7153 --,p_mfc_cost_source => l_mfc_cost_source,
7154 --,p_cost_override_rate => l_rw_cost_rate_override,
7155 --,p_revenue_override_rate => l_bill_rate_override,
7156 --,p_override_burden_cost_rate => l_burden_cost_rate_override,
7157 --,p_override_currency_code => l_txn_currency_code_override,
7158 p_txn_currency_code => l_txn_currency_code_tab(i),
7159 p_raw_cost => NULL,
7160 p_burden_cost => NULL,
7161 p_raw_revenue => NULL,
7162 x_bill_rate => l_bill_rate,
7163 x_cost_rate => l_cost_rate,
7164 x_burden_cost_rate => l_burden_cost_rate,
7165 x_burden_multiplier => l_burden_multiplier,
7166 x_raw_cost => l_raw_cost,
7167 x_burden_cost => l_burden_cost,
7168 x_raw_revenue => l_raw_revenue,
7169 x_bill_markup_percentage => l_bill_markup_percentage,
7170 x_cost_txn_curr_code => l_cost_txn_curr_code,
7171 x_rev_txn_curr_code => l_rev_txn_curr_code,
7172 x_raw_cost_rejection_code => l_raw_cost_rejection_code,
7173 x_burden_cost_rejection_code => l_burden_cost_rejection_code,
7174 x_revenue_rejection_code => l_revenue_rejection_code,
7175 x_cost_ind_compiled_set_id => l_cost_ind_compiled_set_id,
7176 x_return_status => x_return_status,
7177 x_msg_data => x_msg_data,
7178 x_msg_count => x_msg_count);
7179 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
7180 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7181 END IF;
7182 IF p_pa_debug_mode = 'Y' THEN
7183 pa_fp_gen_amount_utils.fp_debug
7184 (p_msg => 'Status after calling pa_plan_revenue.Get_planning_Rates'
7185 ||x_return_status,
7186 p_module_name => l_module_name,
7187 p_log_level => 5);
7188 END IF;
7189
7190 l_total_revenue_tab.extend;
7191 l_total_revenue_tab(i) := l_burden_cost;
7192
7193 END LOOP;
7194
7195 FOR i IN 1..l_res_asg_id_tab.count LOOP
7196 l_delete_budget_lines_tab.extend;
7197 l_spread_amts_flag_tab.extend;
7198 --l_txn_currency_code_tab.extend;
7199 l_txn_currency_override_tab.extend;
7200 --l_total_qty_tab.extend;
7201 l_addl_qty_tab.extend;
7202 l_total_raw_cost_tab.extend;
7203 l_addl_raw_cost_tab.extend;
7204 l_total_burdened_cost_tab.extend;
7205 l_addl_burdened_cost_tab.extend;
7206 l_addl_revenue_tab.extend;
7207 l_raw_cost_rate_tab.extend;
7208 l_rw_cost_rate_override_tab.extend;
7209 l_b_cost_rate_tab.extend;
7210 l_b_cost_rate_override_tab.extend;
7211 l_bill_rate_tab.extend;
7212 l_bill_rate_override_tab.extend;
7213 l_line_start_date_tab.extend;
7214 l_line_end_date_tab.extend;
7215
7216 l_delete_budget_lines_tab(i) := Null;
7217 l_spread_amts_flag_tab(i) := Null;
7218 --l_txn_currency_code_tab(i) := l_txn_currency_code_tab(i)
7219 l_txn_currency_override_tab(i) := Null;
7220 --l_total_qty_tab(i) := Null;
7221 l_addl_qty_tab(i) := Null;
7222 l_total_raw_cost_tab(i) := Null;
7223 l_addl_raw_cost_tab(i) := Null;
7224 l_total_burdened_cost_tab(i) := Null;
7225 l_addl_burdened_cost_tab(i) := Null;
7226 l_addl_revenue_tab(i) := Null;
7227 l_raw_cost_rate_tab(i) := Null;
7228 l_rw_cost_rate_override_tab(i) := Null;
7229 l_b_cost_rate_tab(i) := Null;
7230 l_b_cost_rate_override_tab(i) := Null;
7231 l_bill_rate_tab(i) := Null;
7232 l_bill_rate_override_tab(i) := Null;
7233 l_line_start_date_tab(i) := Null;
7234 l_line_end_date_tab(i) := Null;
7235 END LOOP;
7236
7237 -- Bug 4149684: Added p_calling_module and p_rollup_required_flag to parameter list of
7238 -- Calculate API with values 'BUDGET_GENERATION' and 'N', respectively, so that calling
7239 -- PJI rollup api is bypassed for increased performance.
7240
7241 /* Calling the calculate API */
7242 IF p_pa_debug_mode = 'Y' THEN
7243 pa_fp_gen_amount_utils.fp_debug
7244 (p_called_mode => p_called_mode,
7245 p_msg => 'Before calling
7246 pa_fp_calc_plan_pkg.calculate',
7247 p_module_name => l_module_name,
7248 p_log_level => 5);
7249 END IF;
7250 PA_FP_CALC_PLAN_PKG.calculate
7251 (p_calling_module => l_calling_module
7252 ,p_project_id => p_project_id
7253 ,p_budget_version_id => p_budget_version_id
7254 ,p_refresh_rates_flag => l_refresh_rates_flag
7255 ,p_refresh_conv_rates_flag => l_refresh_conv_rates_flag
7256 ,p_spread_required_flag => l_spread_required_flag
7257 ,p_conv_rates_required_flag => l_conv_rates_required_flag
7258 ,p_rollup_required_flag => l_rollup_required_flag
7259 ,p_mass_adjust_flag => l_mass_adjust_flag
7260 ,p_quantity_adj_pct => l_quantity_adj_pct
7261 ,p_cost_rate_adj_pct => l_cost_rate_adj_pct
7262 ,p_burdened_rate_adj_pct => l_burdened_rate_adj_pct
7263 ,p_bill_rate_adj_pct => l_bill_rate_adj_pct
7264 ,p_source_context => l_source_context
7265 ,p_resource_assignment_tab => l_res_asg_id_tab
7266 ,p_delete_budget_lines_tab => l_delete_budget_lines_tab
7267 ,p_spread_amts_flag_tab => l_spread_amts_flag_tab
7268 ,p_txn_currency_code_tab => l_txn_currency_code_tab
7269 ,p_txn_currency_override_tab => l_txn_currency_override_tab
7270 ,p_total_qty_tab => l_ra_quantity_tab --l_total_qty_tab
7271 ,p_addl_qty_tab => l_addl_qty_tab
7272 ,p_total_raw_cost_tab => l_total_raw_cost_tab
7273 ,p_addl_raw_cost_tab => l_addl_raw_cost_tab
7274 ,p_total_burdened_cost_tab => l_total_burdened_cost_tab
7275 ,p_addl_burdened_cost_tab => l_addl_burdened_cost_tab
7276 ,p_total_revenue_tab => l_total_revenue_tab
7277 ,p_addl_revenue_tab => l_addl_revenue_tab
7278 ,p_raw_cost_rate_tab => l_raw_cost_rate_tab
7279 ,p_rw_cost_rate_override_tab => l_rw_cost_rate_override_tab
7280 ,p_b_cost_rate_tab => l_b_cost_rate_tab
7281 ,p_b_cost_rate_override_tab => l_b_cost_rate_override_tab
7282 ,p_bill_rate_tab => l_bill_rate_tab
7283 ,p_bill_rate_override_tab => l_bill_rate_override_tab
7284 ,p_line_start_date_tab => l_line_start_date_tab
7285 ,p_line_end_date_tab => l_line_end_date_tab
7286 ,X_RETURN_STATUS => X_RETURN_STATUS
7287 ,X_MSG_COUNT => X_MSG_COUNT
7288 ,X_MSG_DATA => X_MSG_DATA);
7289 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
7290 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7291 END IF;
7292 IF p_pa_debug_mode = 'Y' THEN
7293 pa_fp_gen_amount_utils.fp_debug
7294 (p_called_mode => p_called_mode,
7295 p_msg => 'Status after calling
7296 pa_fp_calc_plan_pkg.calculate: '
7297 ||x_return_status,
7298 p_module_name => l_module_name,
7299 p_log_level => 5);
7300 END IF;
7301
7302 IF P_COMMIT_FLAG = 'Y' THEN
7303 COMMIT;
7304 END IF;
7305
7306 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
7307 PA_DEBUG.reset_err_stack;
7308 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
7309 PA_DEBUG.Reset_Curr_Function;
7310 END IF;
7311
7312 EXCEPTION
7313 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
7314 -- Bug Fix: 4569365. Removed MRC code.
7315 -- PA_MRC_FINPLAN.G_CALLING_MODULE := Null;
7316 l_msg_count := FND_MSG_PUB.count_msg;
7317 IF l_msg_count = 1 THEN
7318 PA_INTERFACE_UTILS_PUB.get_messages
7319 (p_encoded => FND_API.G_TRUE
7320 ,p_msg_index => 1
7321 ,p_msg_count => l_msg_count
7322 ,p_msg_data => l_msg_data
7323 ,p_data => l_data
7324 ,p_msg_index_out => l_msg_index_out);
7325 x_msg_data := l_data;
7326 x_msg_count := l_msg_count;
7327 ELSE
7328 x_msg_count := l_msg_count;
7329 END IF;
7330 ROLLBACK;
7331 x_return_status := FND_API.G_RET_STS_ERROR;
7332
7333 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
7334 PA_DEBUG.reset_err_stack;
7335 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
7336 PA_DEBUG.Reset_Curr_Function;
7337 END IF;
7338
7339 WHEN OTHERS THEN
7340 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7341 x_msg_data := SUBSTR(SQLERRM,1,240);
7342 FND_MSG_PUB.add_exc_msg
7343 ( p_pkg_name => 'PA_FP_GEN_BUDGET_AMT_PUB'
7344 ,p_procedure_name => 'GEN_REV_BDGT_AMT_RES_SCH_WRP');
7345
7346 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
7347 PA_DEBUG.reset_err_stack;
7348 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
7349 PA_DEBUG.Reset_Curr_Function;
7350 END IF;
7351
7352 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7353
7354 END GEN_REV_BDGT_AMT_RES_SCH_WRP;
7355
7356 PROCEDURE GEN_WP_REV_BDGT_AMT_WRP
7357 (P_PROJECT_ID IN PA_PROJ_FP_OPTIONS.PROJECT_ID%TYPE,
7358 P_BUDGET_VERSION_ID IN PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE,
7359 P_PLAN_CLASS_CODE IN PA_FIN_PLAN_TYPES_B.PLAN_CLASS_CODE%TYPE,
7360 P_GEN_SRC_CODE IN PA_PROJ_FP_OPTIONS.GEN_ALL_SRC_CODE%TYPE,
7361 P_COST_PLAN_TYPE_ID IN PA_PROJ_FP_OPTIONS.GEN_SRC_COST_PLAN_TYPE_ID%TYPE,
7362 P_COST_VERSION_ID IN PA_BUDGET_VERSIONS.BUDGET_VERSION_ID%TYPE,
7363 P_RETAIN_MANUAL_FLAG IN VARCHAR2,
7364 P_CALLED_MODE IN VARCHAR2,
7365 P_INC_CHG_DOC_FLAG IN VARCHAR2,
7366 P_INC_BILL_EVENT_FLAG IN VARCHAR2,
7367 P_INC_OPEN_COMMIT_FLAG IN VARCHAR2,
7368 P_CI_ID_TAB IN PA_PLSQL_DATATYPES.IdTabTyp,
7369 P_INIT_MSG_FLAG IN VARCHAR2,
7370 P_COMMIT_FLAG IN VARCHAR2,
7371 PX_DELETED_RES_ASG_ID_TAB IN OUT NOCOPY PA_PLSQL_DATATYPES.IdTabTyp,
7372 PX_GEN_RES_ASG_ID_TAB IN OUT NOCOPY PA_PLSQL_DATATYPES.IdTabTyp,
7373 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
7374 X_MSG_COUNT OUT NOCOPY NUMBER,
7375 X_MSG_DATA OUT NOCOPY VARCHAR2) IS
7376 l_module_name VARCHAR2(200) := 'pa.plsql.PA_FP_GEN_BUDGET_AMT_PUB.GEN_WP_REV_BDGT_AMT_WRP';
7377
7378 /*local variable for calling get planning rates*/
7379 l_res_asg_id_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
7380 l_ra_quantity_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
7381 l_task_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7382 l_res_list_member_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7383 l_txn_currency_code_tab SYSTEM.pa_varchar2_15_tbl_type:=SYSTEM.pa_varchar2_15_tbl_type();
7384 l_ra_start_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
7385 l_uom_tab pa_plsql_datatypes.Char30TabTyp;
7386 l_rate_based_flag_tab pa_plsql_datatypes.Char30TabTyp;
7387 l_resource_class_code_tab pa_plsql_datatypes.Char30TabTyp;
7388 l_organization_id_tab pa_plsql_datatypes.Char30TabTyp;
7389 l_job_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7390 l_person_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7391 l_expenditure_type_tab pa_plsql_datatypes.Char30TabTyp;
7392 l_non_labor_resource_tab pa_plsql_datatypes.Char30TabTyp;
7393 l_bom_resource_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7394 l_inventory_item_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7395 l_item_category_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7396 l_mfc_cost_type_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7397 l_rate_incur_by_organz_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7398 l_rate_ovrd_to_organz_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7399 l_rate_expenditure_org_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7400 l_rate_expenditure_type_tab pa_plsql_datatypes.Char30TabTyp;
7401 l_rate_organization_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7402 l_project_assignment_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7403
7404 l_assign_precedes_task_tab pa_plsql_datatypes.Char30TabTyp;
7405 l_bill_job_group_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7406 l_carry_out_organiz_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7407 l_multi_currency_bill_flag_tab pa_plsql_datatypes.Char30TabTyp;
7408 l_org_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7409 l_non_lab_bill_rate_org_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7410 l_non_lab_sch_discount_tab PA_PLSQL_DATATYPES.NumTabTyp;
7411 l_non_lab_sch_fixed_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
7412 l_project_type_tab pa_plsql_datatypes.Char30TabTyp;
7413 l_lab_bill_rate_org_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7414
7415 l_lab_sch_FIXED_DATE_tab PA_PLSQL_DATATYPES.DateTabTyp;
7416 l_top_task_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7417 l_scheduled_start_date_tab PA_PLSQL_DATATYPES.DateTabTyp;
7418 l_labor_scheduled_discount_tab PA_PLSQL_DATATYPES.NumTabTyp;
7419 l_labor_sch_type_tab pa_plsql_datatypes.Char30TabTyp;
7420 l_non_labor_sch_type_tab pa_plsql_datatypes.Char30TabTyp;
7421
7422 l_rev_res_class_rt_sch_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7423 l_cost_res_class_rt_sch_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7424
7425 l_res_format_id_tab PA_PLSQL_DATATYPES.IdTabTyp;
7426
7427 l_bill_rate number;
7428 l_cost_rate number;
7429 l_burden_cost_rate number;
7430 l_burden_multiplier number;
7431 l_raw_cost number;
7432 l_burden_cost number;
7433 l_raw_revenue number;
7434 l_bill_markup_percentage number;
7435 l_cost_txn_curr_code varchar2(30);
7436 l_rev_txn_curr_code varchar2(30);
7437 l_raw_cost_rejection_code varchar2(30);
7438 l_burden_cost_rejection_code varchar2(30);
7439 l_revenue_rejection_code varchar2(30);
7440 l_cost_ind_compiled_set_id number;
7441
7442 /*Local PL/SQL table used for calling Calculate API*/
7443 l_calling_module VARCHAR2(30) := 'BUDGET_GENERATION';
7444 l_refresh_rates_flag VARCHAR2(1) := 'Y';
7445 l_refresh_conv_rates_flag VARCHAR2(1) := 'N';
7446 l_spread_required_flag VARCHAR2(1) := 'N';
7447 l_conv_rates_required_flag VARCHAR2(1) := 'N';
7448 l_rollup_required_flag VARCHAR2(1) := 'N';
7449 l_mass_adjust_flag VARCHAR2(1) := 'N';
7450 l_quantity_adj_pct NUMBER := NULL;
7451 l_cost_rate_adj_pct NUMBER := NULL;
7452 l_burdened_rate_adj_pct NUMBER := NULL;
7453 l_bill_rate_adj_pct NUMBER := NULL;
7454 l_source_context pa_fp_res_assignments_tmp.source_context%TYPE := 'RESOURCE_ASSIGNMENT';
7455
7456 l_delete_budget_lines_tab SYSTEM.pa_varchar2_1_tbl_type:=SYSTEM.pa_varchar2_1_tbl_type();
7457 l_spread_amts_flag_tab SYSTEM.pa_varchar2_1_tbl_type:=SYSTEM.pa_varchar2_1_tbl_type();
7458 l_txn_currency_override_tab SYSTEM.pa_varchar2_15_tbl_type:=SYSTEM.pa_varchar2_15_tbl_type();
7459 l_addl_qty_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
7460 l_total_raw_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
7461 l_addl_raw_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
7462 l_total_burdened_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
7463 l_addl_burdened_cost_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
7464 l_total_revenue_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
7465 l_addl_revenue_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
7466 l_raw_cost_rate_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
7467 l_rw_cost_rate_override_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
7468 l_b_cost_rate_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
7469 l_b_cost_rate_override_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
7470 l_bill_rate_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
7471 l_bill_rate_override_tab SYSTEM.pa_num_tbl_type:= SYSTEM.pa_num_tbl_type();
7472 l_line_start_date_tab SYSTEM.pa_date_tbl_type:=SYSTEM.pa_date_tbl_type();
7473 l_line_end_date_tab SYSTEM.pa_date_tbl_type:=SYSTEM.pa_date_tbl_type();
7474 /*end variable for calculate*/
7475
7476 l_msg_count NUMBER;
7477 l_msg_data VARCHAR2(2000);
7478 l_data VARCHAR2(2000);
7479 l_msg_index_out NUMBER:=0;
7480 BEGIN
7481 IF p_init_msg_flag = 'Y' THEN
7482 FND_MSG_PUB.initialize;
7483 END IF;
7484 X_MSG_COUNT := 0;
7485 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
7486
7487 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
7488 PA_DEBUG.init_err_stack('PA_FP_GEN_BUDGET_AMT_PUB.GEN_REV_BDGT_AMT_RES_SCH_WRP');
7489 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
7490 pa_debug.set_curr_function(p_function => 'GEN_WP_REV_BDGT_AMT_WRP',
7491 p_debug_mode => p_pa_debug_mode);
7492 END IF;
7493
7494 IF p_pa_debug_mode = 'Y' THEN
7495 pa_fp_gen_amount_utils.fp_debug
7496 (p_called_mode => p_called_mode,
7497 p_msg => 'Before calling
7498 pa_fp_wp_gen_budget_amt_pub.generate_wp_budget_amt',
7499 p_module_name => l_module_name,
7500 p_log_level => 5);
7501 END IF;
7502 PA_FP_WP_GEN_BUDGET_AMT_PUB.GENERATE_WP_BUDGET_AMT
7503 (P_PROJECT_ID => P_PROJECT_ID,
7504 P_BUDGET_VERSION_ID => P_BUDGET_VERSION_ID,
7505 P_PLAN_CLASS_CODE => P_PLAN_CLASS_CODE,
7506 P_GEN_SRC_CODE => P_GEN_SRC_CODE,
7507 P_COST_PLAN_TYPE_ID => P_COST_PLAN_TYPE_ID,
7508 P_COST_VERSION_ID => P_COST_VERSION_ID,
7509 P_RETAIN_MANUAL_FLAG => P_RETAIN_MANUAL_FLAG,
7510 P_CALLED_MODE => P_CALLED_MODE,
7511 P_INC_CHG_DOC_FLAG => P_INC_CHG_DOC_FLAG,
7512 P_INC_BILL_EVENT_FLAG => P_INC_BILL_EVENT_FLAG,
7513 P_INC_OPEN_COMMIT_FLAG => P_INC_OPEN_COMMIT_FLAG,
7514 P_CI_ID_TAB => P_CI_ID_TAB,
7515 PX_GEN_RES_ASG_ID_TAB => PX_GEN_RES_ASG_ID_TAB,
7516 PX_DELETED_RES_ASG_ID_TAB => PX_DELETED_RES_ASG_ID_TAB,
7517 P_INIT_MSG_FLAG => P_INIT_MSG_FLAG,
7518 P_COMMIT_FLAG => P_COMMIT_FLAG,
7519 X_RETURN_STATUS => X_RETURN_STATUS,
7520 X_MSG_COUNT => X_MSG_COUNT,
7521 X_MSG_DATA => X_MSG_DATA);
7522 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
7523 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7524 END IF;
7525 IF p_pa_debug_mode = 'Y' THEN
7526 pa_fp_gen_amount_utils.fp_debug
7527 (p_called_mode => p_called_mode,
7528 p_msg => 'Status after calling pa_fp_wp_gen_budget_amt_pub.generate_wp_budget_amt:'
7529 ||x_return_status,
7530 p_module_name => l_module_name,
7531 p_log_level => 5);
7532 END IF;
7533
7534 SELECT
7535 tmp.RESOURCE_ASSIGNMENT_ID,
7536 tmp.total_plan_quantity,
7537 ra.task_id,
7538 ra.resource_list_member_id,
7539 tmp.txn_currency_code,
7540 ra.planning_start_date,
7541 ra.unit_of_measure,
7542 ra.rate_based_flag,
7543 ra.resource_class_code,
7544 ra.organization_id,
7545 ra.job_id,
7546 ra.person_id,
7547 ra.expenditure_type,
7548 ra.non_labor_resource,
7549 ra.bom_resource_id,
7550 ra.inventory_item_id,
7551 ra.item_category_id,
7552 ra.mfc_cost_type_id,
7553 ra.organization_id,
7554 null,
7555 ra.rate_expenditure_org_id,
7556 ra.rate_expenditure_type,
7557 ra.organization_id,
7558 ra.project_assignment_id,
7559
7560 proj.assign_precedes_task,
7561 proj.bill_job_group_id,
7562 proj.carrying_out_organization_id,
7563 proj.multi_currency_billing_flag,
7564 proj.org_id,
7565 proj.non_labor_bill_rate_org_id,
7566 proj.non_labor_schedule_discount,
7567 proj.non_labor_schedule_fixed_date,
7568 proj.project_type,
7569 proj.labor_bill_rate_org_id,
7570
7571 t.LABOR_SCHEDULE_FIXED_DATE,
7572 t.top_task_id,
7573 t.scheduled_start_date,
7574 t.labor_schedule_discount,
7575 t.labor_sch_type,
7576 t.non_labor_sch_type,
7577
7578 decode(fp.use_planning_rates_flag,'N',fp.res_class_bill_rate_sch_id,
7579 fp.rev_res_class_rate_sch_id),
7580 decode(fp.use_planning_rates_flag,'N',fp.res_class_raw_cost_sch_id,
7581 NULL),
7582
7583 res_format_id
7584 BULK COLLECT INTO
7585 l_res_asg_id_tab,
7586 l_ra_quantity_tab,
7587 l_task_id_tab,
7588 l_res_list_member_id_tab,
7589 l_txn_currency_code_tab,
7590 l_ra_start_date_tab,
7591 l_uom_tab,
7592 l_rate_based_flag_tab,
7593 l_resource_class_code_tab,
7594 l_organization_id_tab,
7595 l_job_id_tab,
7596 l_person_id_tab,
7597 l_expenditure_type_tab,
7598 l_non_labor_resource_tab,
7599 l_bom_resource_id_tab,
7600 l_inventory_item_id_tab,
7601 l_item_category_id_tab,
7602 l_mfc_cost_type_id_tab,
7603 l_rate_incur_by_organz_id_tab,
7604 l_rate_ovrd_to_organz_id_tab,
7605 l_rate_expenditure_org_id_tab,
7606 l_rate_expenditure_type_tab,
7607 l_rate_organization_id_tab,
7608 l_project_assignment_id_tab,
7609
7610 l_assign_precedes_task_tab,
7611 l_bill_job_group_id_tab,
7612 l_carry_out_organiz_id_tab,
7613 l_multi_currency_bill_flag_tab,
7614 l_org_id_tab,
7615 l_non_lab_bill_rate_org_id_tab,
7616 l_non_lab_sch_discount_tab,
7617 l_non_lab_sch_fixed_date_tab,
7618 l_project_type_tab,
7619
7620 l_lab_bill_rate_org_id_tab,
7621 l_lab_sch_FIXED_DATE_tab,
7622 l_top_task_id_tab,
7623 l_scheduled_start_date_tab,
7624 l_labor_scheduled_discount_tab,
7625 l_labor_sch_type_tab,
7626 l_non_labor_sch_type_tab,
7627
7628 l_rev_res_class_rt_sch_id_tab,
7629 l_cost_res_class_rt_sch_id_tab,
7630
7631 l_res_format_id_tab
7632 FROM pa_fp_calc_amt_tmp2 tmp, pa_resource_assignments ra,
7633 pa_projects_all proj, pa_tasks t,
7634 pa_proj_fp_options fp,
7635 pa_resource_list_members rlm
7636 WHERE tmp.resource_assignment_id = ra.resource_assignment_id
7637 AND ra.project_id = proj.project_id
7638 AND ra.task_id = t.task_id(+)
7639 AND fp.fin_plan_version_id = ra.budget_version_id
7640 AND ra.resource_list_member_id = rlm.resource_list_member_id;
7641
7642 FOR i IN 1..l_res_asg_id_tab.count LOOP
7643 IF p_pa_debug_mode = 'Y' THEN
7644 pa_fp_gen_amount_utils.fp_debug
7645 (p_msg => 'Before calling pa_plan_revenue.Get_planning_Rates',
7646 p_module_name => l_module_name,
7647 p_log_level => 5);
7648 END IF;
7649 PA_PLAN_REVENUE.GET_PLANNING_RATES(
7650 p_project_id => p_project_id,
7651 p_task_id => l_task_id_tab(i),
7652 p_top_task_id => l_top_task_id_tab(i),
7653 p_person_id => l_person_id_tab(i),
7654 p_job_id => l_job_id_tab(i),
7655 p_bill_job_grp_id => l_bill_job_group_id_tab(i),
7656 p_resource_class => l_resource_class_code_tab(i),
7657 p_planning_resource_format => l_res_format_id_tab(i),
7658 p_use_planning_rates_flag => 'N',
7659 p_rate_based_flag => l_rate_based_flag_tab(i),
7660 p_uom => l_uom_tab(i),
7661 p_system_linkage => NULL,
7662 p_project_organz_id => l_carry_out_organiz_id_tab(i),
7663 p_rev_res_class_rate_sch_id => l_rev_res_class_rt_sch_id_tab(i),
7664 p_cost_res_class_rate_sch_id => l_cost_res_class_rt_sch_id_tab(i),
7665 p_calculate_mode => 'REVENUE',
7666 p_mcb_flag => l_multi_currency_bill_flag_tab(i),
7667 p_quantity => l_ra_quantity_tab(i),
7668 p_item_date => l_ra_start_date_tab(i),
7669 p_cost_sch_type => 'COST',
7670 p_labor_sch_type => l_labor_sch_type_tab(i),
7671 p_non_labor_sch_type => l_non_labor_sch_type_tab(i),
7672 --p_labor_schdl_discnt => NULL,
7673 p_labor_bill_rate_org_id => l_lab_bill_rate_org_id_tab(i),
7674 --p_labor_std_bill_rate_schdl => NULL,
7675 p_labor_schdl_fixed_date => l_LAb_SCH_FIXED_DATE_tab(i),
7676 p_assignment_id => l_project_assignment_id_tab(i),
7677 p_project_org_id => l_org_id_tab(i),
7678 p_project_type => l_project_type_tab(i),
7679 p_expenditure_type => nvl(l_expenditure_type_tab(i),l_rate_expenditure_type_tab(i)),
7680 p_non_labor_resource => l_non_labor_resource_tab(i),
7681 p_incurred_by_organz_id => nvl(l_rate_incur_by_organz_id_tab(i),l_organization_id_tab(i)),
7682 p_override_to_organz_id => l_rate_ovrd_to_organz_id_tab(i),
7683 p_expenditure_org_id => nvl(l_rate_expenditure_org_id_tab(i),l_org_id_tab(i)),
7684 p_assignment_precedes_task => l_assign_precedes_task_tab(i),
7685 p_planning_transaction_id => l_res_asg_id_tab(i),
7686 --,p_task_bill_rate_org_id => l_task_bill_rate_org_id,
7687 p_project_bill_rate_org_id => l_non_lab_bill_rate_org_id_tab(i),
7688 p_nlr_organization_id => nvl(l_organization_id_tab(i),l_carry_out_organiz_id_tab(i)),
7689 p_project_sch_date => l_non_lab_sch_fixed_date_tab(i),
7690 p_task_sch_date => l_scheduled_start_date_tab(i),
7691 p_project_sch_discount => l_non_lab_sch_discount_tab(i),
7692 p_task_sch_discount => l_labor_scheduled_discount_tab(i),
7693 p_inventory_item_id => l_inventory_item_id_tab(i),
7694 p_BOM_resource_Id => l_bom_resource_id_tab(i),
7695 p_mfc_cost_type_id => l_mfc_cost_type_id_tab(i),
7696 p_item_category_id => l_item_category_id_tab(i),
7697 --,p_mfc_cost_source => l_mfc_cost_source,
7698 --,p_cost_override_rate => l_rw_cost_rate_override,
7699 --,p_revenue_override_rate => l_bill_rate_override,
7700 --,p_override_burden_cost_rate => l_burden_cost_rate_override,
7701 --,p_override_currency_code => l_txn_currency_code_override,
7702 p_txn_currency_code => l_txn_currency_code_tab(i),
7703 p_raw_cost => NULL,
7704 p_burden_cost => NULL,
7705 p_raw_revenue => NULL,
7706 x_bill_rate => l_bill_rate,
7707 x_cost_rate => l_cost_rate,
7708 x_burden_cost_rate => l_burden_cost_rate,
7709 x_burden_multiplier => l_burden_multiplier,
7710 x_raw_cost => l_raw_cost,
7711 x_burden_cost => l_burden_cost,
7712 x_raw_revenue => l_raw_revenue,
7713 x_bill_markup_percentage => l_bill_markup_percentage,
7714 x_cost_txn_curr_code => l_cost_txn_curr_code,
7715 x_rev_txn_curr_code => l_rev_txn_curr_code,
7716 x_raw_cost_rejection_code => l_raw_cost_rejection_code,
7717 x_burden_cost_rejection_code => l_burden_cost_rejection_code,
7718 x_revenue_rejection_code => l_revenue_rejection_code,
7719 x_cost_ind_compiled_set_id => l_cost_ind_compiled_set_id,
7720 x_return_status => x_return_status,
7721 x_msg_data => x_msg_data,
7722 x_msg_count => x_msg_count);
7723 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
7724 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7725 END IF;
7726 IF p_pa_debug_mode = 'Y' THEN
7727 pa_fp_gen_amount_utils.fp_debug
7728 (p_msg => 'Status after calling pa_plan_revenue.Get_planning_Rates'
7729 ||x_return_status,
7730 p_module_name => l_module_name,
7731 p_log_level => 5);
7732 END IF;
7733
7734 l_total_revenue_tab.extend;
7735 l_total_revenue_tab(i) := l_burden_cost;
7736
7737 END LOOP;
7738
7739 FOR i IN 1..l_res_asg_id_tab.count LOOP
7740 l_delete_budget_lines_tab.extend;
7741 l_spread_amts_flag_tab.extend;
7742 --l_txn_currency_code_tab.extend;
7743 l_txn_currency_override_tab.extend;
7744 --l_total_qty_tab.extend;
7745 l_addl_qty_tab.extend;
7746 l_total_raw_cost_tab.extend;
7747 l_addl_raw_cost_tab.extend;
7748 l_total_burdened_cost_tab.extend;
7749 l_addl_burdened_cost_tab.extend;
7750 l_addl_revenue_tab.extend;
7751 l_raw_cost_rate_tab.extend;
7752 l_rw_cost_rate_override_tab.extend;
7753 l_b_cost_rate_tab.extend;
7754 l_b_cost_rate_override_tab.extend;
7755 l_bill_rate_tab.extend;
7756 l_bill_rate_override_tab.extend;
7757 l_line_start_date_tab.extend;
7758 l_line_end_date_tab.extend;
7759
7760 l_delete_budget_lines_tab(i) := Null;
7761 l_spread_amts_flag_tab(i) := Null;
7762 --l_txn_currency_code_tab(i) := l_txn_currency_code_tab(i)
7763 l_txn_currency_override_tab(i) := Null;
7764 --l_total_qty_tab(i) := Null;
7765 l_addl_qty_tab(i) := Null;
7766 l_total_raw_cost_tab(i) := Null;
7767 l_addl_raw_cost_tab(i) := Null;
7768 l_total_burdened_cost_tab(i) := Null;
7769 l_addl_burdened_cost_tab(i) := Null;
7770 l_addl_revenue_tab(i) := Null;
7771 l_raw_cost_rate_tab(i) := Null;
7772 l_rw_cost_rate_override_tab(i) := Null;
7773 l_b_cost_rate_tab(i) := Null;
7774 l_b_cost_rate_override_tab(i) := Null;
7775 l_bill_rate_tab(i) := Null;
7776 l_bill_rate_override_tab(i) := Null;
7777 l_line_start_date_tab(i) := Null;
7778 l_line_end_date_tab(i) := Null;
7779 END LOOP;
7780
7781 -- Bug 4149684: Added p_calling_module and p_rollup_required_flag to parameter list of
7782 -- Calculate API with values 'BUDGET_GENERATION' and 'N', respectively, so that calling
7783 -- PJI rollup api is bypassed for increased performance.
7784
7785 /* Calling the calculate API */
7786 IF p_pa_debug_mode = 'Y' THEN
7787 pa_fp_gen_amount_utils.fp_debug
7788 (p_called_mode => p_called_mode,
7789 p_msg => 'Before calling pa_fp_calc_plan_pkg.calculate',
7790 p_module_name => l_module_name,
7791 p_log_level => 5);
7792 END IF;
7793 PA_FP_CALC_PLAN_PKG.calculate
7794 (p_calling_module => l_calling_module
7795 ,p_project_id => p_project_id
7796 ,p_budget_version_id => p_budget_version_id
7797 ,p_refresh_rates_flag => l_refresh_rates_flag
7798 ,p_refresh_conv_rates_flag => l_refresh_conv_rates_flag
7799 ,p_spread_required_flag => l_spread_required_flag
7800 ,p_conv_rates_required_flag => l_conv_rates_required_flag
7801 ,p_rollup_required_flag => l_rollup_required_flag
7802 ,p_mass_adjust_flag => l_mass_adjust_flag
7803 ,p_quantity_adj_pct => l_quantity_adj_pct
7804 ,p_cost_rate_adj_pct => l_cost_rate_adj_pct
7805 ,p_burdened_rate_adj_pct => l_burdened_rate_adj_pct
7806 ,p_bill_rate_adj_pct => l_bill_rate_adj_pct
7807 ,p_source_context => l_source_context
7808 ,p_resource_assignment_tab => l_res_asg_id_tab
7809 ,p_delete_budget_lines_tab => l_delete_budget_lines_tab
7810 ,p_spread_amts_flag_tab => l_spread_amts_flag_tab
7811 ,p_txn_currency_code_tab => l_txn_currency_code_tab
7812 ,p_txn_currency_override_tab => l_txn_currency_override_tab
7813 ,p_total_qty_tab => l_ra_quantity_tab --l_total_qty_tab
7814 ,p_addl_qty_tab => l_addl_qty_tab
7815 ,p_total_raw_cost_tab => l_total_raw_cost_tab
7816 ,p_addl_raw_cost_tab => l_addl_raw_cost_tab
7817 ,p_total_burdened_cost_tab => l_total_burdened_cost_tab
7818 ,p_addl_burdened_cost_tab => l_addl_burdened_cost_tab
7819 ,p_total_revenue_tab => l_total_revenue_tab
7820 ,p_addl_revenue_tab => l_addl_revenue_tab
7821 ,p_raw_cost_rate_tab => l_raw_cost_rate_tab
7822 ,p_rw_cost_rate_override_tab => l_rw_cost_rate_override_tab
7823 ,p_b_cost_rate_tab => l_b_cost_rate_tab
7824 ,p_b_cost_rate_override_tab => l_b_cost_rate_override_tab
7825 ,p_bill_rate_tab => l_bill_rate_tab
7826 ,p_bill_rate_override_tab => l_bill_rate_override_tab
7827 ,p_line_start_date_tab => l_line_start_date_tab
7828 ,p_line_end_date_tab => l_line_end_date_tab
7829 ,X_RETURN_STATUS => X_RETURN_STATUS
7830 ,X_MSG_COUNT => X_MSG_COUNT
7831 ,X_MSG_DATA => X_MSG_DATA);
7832 IF X_RETURN_STATUS <> FND_API.G_RET_STS_SUCCESS THEN
7833 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7834 END IF;
7835 IF p_pa_debug_mode = 'Y' THEN
7836 pa_fp_gen_amount_utils.fp_debug
7837 (p_called_mode => p_called_mode,
7838 p_msg => 'Status after calling
7839 pa_fp_calc_plan_pkg.calculate: '
7840 ||x_return_status,
7841 p_module_name => l_module_name,
7842 p_log_level => 5);
7843 END IF;
7844
7845 IF P_COMMIT_FLAG = 'Y' THEN
7846 COMMIT;
7847 END IF;
7848
7849 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
7850 PA_DEBUG.reset_err_stack;
7851 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
7852 PA_DEBUG.Reset_Curr_Function;
7853 END IF;
7854
7855 EXCEPTION
7856 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
7857 -- Bug Fix: 4569365. Removed MRC code.
7858 -- PA_MRC_FINPLAN.G_CALLING_MODULE := Null;
7859 l_msg_count := FND_MSG_PUB.count_msg;
7860 IF l_msg_count = 1 THEN
7861 PA_INTERFACE_UTILS_PUB.get_messages
7862 (p_encoded => FND_API.G_TRUE
7863 ,p_msg_index => 1
7864 ,p_msg_count => l_msg_count
7865 ,p_msg_data => l_msg_data
7866 ,p_data => l_data
7867 ,p_msg_index_out => l_msg_index_out);
7868 x_msg_data := l_data;
7869 x_msg_count := l_msg_count;
7870 ELSE
7871 x_msg_count := l_msg_count;
7872 END IF;
7873 ROLLBACK;
7874 x_return_status := FND_API.G_RET_STS_ERROR;
7875
7876 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
7877 PA_DEBUG.reset_err_stack;
7878 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
7879 PA_DEBUG.Reset_Curr_Function;
7880 END IF;
7881 WHEN OTHERS THEN
7882 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7883 x_msg_data := SUBSTR(SQLERRM,1,240);
7884 FND_MSG_PUB.add_exc_msg
7885 ( p_pkg_name => 'PA_FP_GEN_BUDGET_AMT_PUB'
7886 ,p_procedure_name => 'GEN_WP_REV_BDGT_AMT_WRP');
7887
7888 IF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'Y' THEN
7889 PA_DEBUG.reset_err_stack;
7890 ELSIF p_pa_debug_mode = 'Y' AND p_init_msg_flag = 'N' THEN
7891 PA_DEBUG.Reset_Curr_Function;
7892 END IF;
7893
7894 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7895
7896 END GEN_WP_REV_BDGT_AMT_WRP;
7897
7898 END PA_FP_GEN_BUDGET_AMT_PUB;