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