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