DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_FP_WEBADI_PKG

Source


1 PACKAGE BODY pa_fp_webadi_pkg as
2 /* $Header: PAFPWAPB.pls 120.47.12010000.3 2008/10/21 14:02:49 vgovvala ship $ */
3 
4 Validation_Failed_Exc Exception ;
5 BV_Validation_Failed_Exc Exception; -- Exception to be used if the validation fails at version level
6 
7 g_module_name  VARCHAR2(100) := 'pa.plsql.pa_fp_webadi_pkg';
8 --wlog           varchar2(1):='Y';
9 
10 -- Bug 3986129: FP.M Web ADI Dev changes. Added the following exceptions
11 Bv_Period_Mask_Changed_Exc     EXCEPTION;
12 No_Bv_Maint_Previlege_Exc      EXCEPTION;
13 Bv_Non_Editable_Exc            EXCEPTION;
14 Co_Ver_Non_Editable_Exc        EXCEPTION;
15 Bv_Not_Curr_Working_Exc        EXCEPTION;
16 Ci_Ver_Sumbit_Flag_Exc         EXCEPTION;
17 Fp_Webadi_Skip_Dup_Rec_Exc     EXCEPTION;
18 Fp_Webadi_Skip_Rec_Proc_Exc    EXCEPTION;
19 Fp_Webadi_Skip_Next_Rec_Exc    EXCEPTION;
20 No_Bv_Dtls_Found_Exc           EXCEPTION; --Bug 4584865.
21 
22 
23 TYPE varchar_70_indexed_num_tbl_typ IS TABLE OF NUMBER INDEX BY VARCHAR2(70);
24 TYPE varchar_32_indexed_num_tbl_typ IS TABLE OF NUMBER INDEX BY VARCHAR2(32);
25 
26 -- local variables to simulate fnd_api.g_miss_xxx
27       l_fnd_miss_char                    CONSTANT      VARCHAR(1) := FND_API.G_MISS_CHAR;
28       l_fnd_miss_num                     CONSTANT      NUMBER     := FND_API.G_MISS_NUM;
29       l_fnd_miss_date                    CONSTANT      DATE       := FND_API.G_MISS_DATE;
30 
31       --These variables will contain the values that will be inserted into the interface table when the
32       --corresponding columns in the layout are hidden. These values are default values given in table
33       --creation script
34       g_hidden_col_num                   CONSTANT      NUMBER     := 9.99E125;
35       g_hidden_col_date                  CONSTANT      DATE       := TO_DATE('1','j');
36       g_hidden_col_char                  CONSTANT      VARCHAR2(1):= chr(0);
37 
38       /* Bug 5144013: Made changes to the cursor to refer override rates from the interface table and
39          made changes in change_reason derivation. This is done as part of merging the MRUP3 changes
40          done in 11i into R12.
41       */
42       CURSOR inf_tbl_data_csr
43       (c_run_id                         pa_fp_webadi_upload_inf.run_id%TYPE,
44        c_allow_qty_flag                 VARCHAR2,
45        c_allow_raw_cost_flag            VARCHAR2,
46        c_allow_burd_cost_flag           VARCHAR2,
47        c_allow_revenue_flag             VARCHAR2,
48        c_allow_raw_cost_rate_flag       VARCHAR2,
49        c_allow_burd_cost_rate_flag      VARCHAR2,
50        c_allow_bill_rate_flag           VARCHAR2,
51        c_project_id                     pa_projects_all.project_id%TYPE,
52        c_fin_plan_type_id               pa_fin_plan_types_b.fin_plan_type_id%TYPE,
53        c_version_type                   pa_budget_versions.version_type%TYPE,
54        c_request_id                     pa_budget_versions.request_id%TYPE
55       )
56       IS
57       SELECT  inf.budget_version_id budget_version_id,
58               inf.resource_list_member_id resource_list_member_id,
59               inf.task_id task_id,
60               inf.amount_type_code amount_type_code,
61               inf.txn_currency_code txn_currency_code,
62               DECODE (inf.delete_flag, g_hidden_col_char, 'N', DECODE(inf.delete_flag, 'Y', 'Y', 'N')) delete_flag,
63               DECODE (inf.planning_start_date, g_hidden_col_date, TO_DATE(NULL), inf.planning_start_date) planning_start_date,
64               DECODE (inf.planning_end_date, g_hidden_col_date, TO_DATE(NULL), inf.planning_end_date) planning_end_date,
65               '-99' unit_of_measure,
66               DECODE (inf.description, g_hidden_col_char, NULL, DECODE(inf.description, NULL, l_fnd_miss_char, inf.description)) description,
67               DECODE (inf.change_reason_code, g_hidden_col_char, NULL,
68                                               'MULTIPLE', NULL,
69                                                NULL,l_fnd_miss_char,
70                                                inf.change_reason_code) change_reason,
71               DECODE (c_allow_qty_flag,'N',NULL,
72                      DECODE (inf.quantity, g_hidden_col_num, NULL, DECODE(inf.quantity, NULL, l_fnd_miss_num, inf.quantity))) quantity,
73               DECODE (c_allow_qty_flag,'N',NULL,
74                      DECODE (inf.etc_quantity, g_hidden_col_num, NULL, DECODE(inf.etc_quantity, NULL, l_fnd_miss_num, inf.etc_quantity))) etc_quantity,
75               DECODE (c_allow_raw_cost_flag,'N',NULL,
76                      DECODE (inf.raw_cost, g_hidden_col_num, NULL, DECODE(inf.raw_cost, NULL, l_fnd_miss_num, inf.raw_cost))) raw_cost,
77               DECODE (c_allow_raw_cost_flag,'N',NULL,
78                      DECODE (inf.etc_raw_cost, g_hidden_col_num, NULL, DECODE(inf.etc_raw_cost, NULL, l_fnd_miss_num, inf.etc_raw_cost))) etc_raw_cost,
79               DECODE (c_allow_raw_cost_rate_flag,'N',NULL,
80                      DECODE (inf.raw_cost_over_rate, g_hidden_col_num, NULL, DECODE(inf.raw_cost_over_rate, NULL, l_fnd_miss_num, inf.raw_cost_over_rate))) raw_cost_rate,
81               DECODE (c_allow_burd_cost_flag,'N',NULL,
82                      DECODE (inf.burdened_cost, g_hidden_col_num, NULL, DECODE(inf.burdened_cost, NULL, l_fnd_miss_num, inf.burdened_cost))) burdened_cost,
83               DECODE (c_allow_burd_cost_flag,'N',NULL,
84                      DECODE (inf.etc_burdened_cost, g_hidden_col_num, NULL, DECODE(inf.etc_burdened_cost, NULL, l_fnd_miss_num, inf.etc_burdened_cost))) etc_burdened_cost,
85               DECODE (c_allow_burd_cost_rate_flag,'N',NULL,
86                      DECODE (inf.burdened_cost_over_rate, g_hidden_col_num, NULL, DECODE(inf.burdened_cost_over_rate, NULL, l_fnd_miss_num, inf.burdened_cost_over_rate))) burdened_cost_rate,
87               DECODE (c_allow_revenue_flag,'N',NULL,
88                      DECODE (inf.revenue, g_hidden_col_num, NULL, DECODE(inf.revenue, NULL, l_fnd_miss_num, inf.revenue))) revenue,
89               DECODE (c_allow_revenue_flag,'N',NULL,
90                      DECODE (inf.etc_revenue, g_hidden_col_num, NULL, DECODE(inf.etc_revenue, NULL, l_fnd_miss_num, inf.etc_revenue))) etc_revenue,
91               DECODE (c_allow_bill_rate_flag,'N',NULL,
92                   DECODE (inf.bill_over_rate, g_hidden_col_num, NULL, DECODE(inf.bill_over_rate, NULL, l_fnd_miss_num, inf.bill_over_rate))) bill_rate,
93               DECODE (c_version_type, 'REVENUE', NULL,
94                       DECODE(inf.projfunc_cost_rate_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_cost_rate_type, NULL, l_fnd_miss_char, inf.projfunc_cost_rate_type))) projfunc_cost_rate_type,
95               DECODE (c_version_type, 'REVENUE', NULL,
96                       DECODE(inf.projfunc_cost_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_cost_rate_date_type, NULL, l_fnd_miss_char, inf.projfunc_cost_rate_date_type))) projfunc_cost_rate_date_type,
97               DECODE (c_version_type, 'REVENUE', NULL,
98                       DECODE(inf.projfunc_cost_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.projfunc_cost_exchange_rate, NULL, l_fnd_miss_num, inf.projfunc_cost_exchange_rate))) projfunc_cost_exchange_rate,
99               DECODE (c_version_type, 'REVENUE', TO_DATE(NULL),
100                       DECODE(inf.projfunc_cost_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.projfunc_cost_rate_date, NULL, l_fnd_miss_date, inf.projfunc_cost_rate_date))) projfunc_cost_rate_date,
101               DECODE (c_version_type, 'REVENUE', NULL,
102                       DECODE(inf.project_cost_rate_type, g_hidden_col_char, NULL, DECODE(inf.project_cost_rate_type, NULL, l_fnd_miss_char, inf.project_cost_rate_type))) project_cost_rate_type,
103               DECODE (c_version_type, 'REVENUE', NULL,
104                       DECODE(inf.project_cost_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.project_cost_rate_date_type, NULL, l_fnd_miss_char, inf.project_cost_rate_date_type))) project_cost_rate_date_type,
105               DECODE (c_version_type, 'REVENUE', NULL,
106                       DECODE(inf.project_cost_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.project_cost_exchange_rate, NULL, l_fnd_miss_num, inf.project_cost_exchange_rate))) project_cost_exchange_rate,
107               DECODE (c_version_type, 'REVENUE', TO_DATE(NULL),
108                       DECODE(inf.project_cost_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.project_cost_rate_date, NULL, l_fnd_miss_date, inf.project_cost_rate_date))) project_cost_rate_date,
109               DECODE (c_version_type, 'COST', NULL,
110                       DECODE(inf.projfunc_rev_rate_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_rev_rate_type, NULL, l_fnd_miss_char, inf.projfunc_rev_rate_type))) projfunc_rev_rate_type,
111               DECODE (c_version_type, 'COST', NULL,
112                       DECODE(inf.projfunc_rev_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_rev_rate_date_type, NULL, l_fnd_miss_char, inf.projfunc_rev_rate_date_type))) projfunc_rev_rate_date_type,
113               DECODE (c_version_type, 'COST', NULL,
114                       DECODE(inf.projfunc_rev_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.projfunc_rev_exchange_rate, NULL, l_fnd_miss_num, inf.projfunc_rev_exchange_rate))) projfunc_rev_exchange_rate,
115               DECODE (c_version_type, 'COST', TO_DATE(NULL),
116                       DECODE(inf.projfunc_rev_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.projfunc_rev_rate_date, NULL, l_fnd_miss_date, inf.projfunc_rev_rate_date))) projfunc_rev_rate_date,
117               DECODE (c_version_type, 'COST', NULL,
118                       DECODE(inf.project_rev_rate_type, g_hidden_col_char, NULL, DECODE(inf.project_rev_rate_type, NULL, l_fnd_miss_char, inf.project_rev_rate_type))) project_rev_rate_type,
119               DECODE (c_version_type, 'COST', NULL,
120                       DECODE(inf.project_rev_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.project_rev_rate_date_type, NULL, l_fnd_miss_char, inf.project_rev_rate_date_type))) project_rev_rate_date_type,
121               DECODE (c_version_type, 'COST', NULL,
122                       DECODE(inf.project_rev_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.project_rev_exchange_rate, NULL, l_fnd_miss_num, inf.project_rev_exchange_rate))) project_rev_exchange_rate,
123               DECODE (c_version_type, 'COST', TO_DATE(NULL),
124                       DECODE(inf.project_rev_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.project_rev_rate_date, NULL, l_fnd_miss_date, inf.project_rev_rate_date))) project_rev_rate_date,
125               DECODE (inf.projfunc_rate_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_rate_type, NULL, l_fnd_miss_char, inf.projfunc_rate_type)) projfunc_rate_type,
126               DECODE (inf.projfunc_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_rate_date_type, NULL, l_fnd_miss_char, inf.projfunc_rate_date_type)) projfunc_rate_date_type,
127               DECODE (inf.projfunc_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.projfunc_exchange_rate, NULL, l_fnd_miss_num, inf.projfunc_exchange_rate)) projfunc_exchange_rate,
128               DECODE (inf.projfunc_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.projfunc_rate_date, NULL, l_fnd_miss_date, inf.projfunc_rate_date)) projfunc_rate_date,
129               DECODE (inf.project_rate_type, g_hidden_col_char, NULL, DECODE(inf.project_rate_type, NULL, l_fnd_miss_char, inf.project_rate_type)) project_rate_type,
130               DECODE (inf.project_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.project_rate_date_type, NULL, l_fnd_miss_char, inf.project_rate_date_type)) project_rate_date_type,
131               DECODE (inf.project_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.project_exchange_rate, NULL, l_fnd_miss_num, inf.project_exchange_rate)) project_exchange_rate,
132               DECODE (inf.project_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.project_rate_date, NULL, l_fnd_miss_date, inf.project_rate_date)) project_rate_date,
133               --DECODE (inf.spread_curve_id, g_hidden_col_char, NULL, DECODE(inf.spread_curve_name, NULL, l_fnd_miss_char, inf.spread_curve_name))
134               '-99' spread_curve_name,
135               --DECODE (inf.etc_method_name, g_hidden_col_char, NULL, DECODE(inf.etc_method_name, NULL, l_fnd_miss_char, inf.etc_method_name))
136               '-99' etc_method_name,
137               --DECODE (inf.mfc_cost_type_name, g_hidden_col_char, NULL, DECODE(inf.mfc_cost_type_name, NULL, l_fnd_miss_char, inf.mfc_cost_type_name))
138               '-99' mfc_cost_type_name,
139               DECODE (inf.pd_prd, g_hidden_col_num, NULL, DECODE(inf.pd_prd, NULL, l_fnd_miss_num, inf.pd_prd)) pd_prd,
140               DECODE (inf.prd1, g_hidden_col_num, NULL, DECODE(inf.prd1, NULL, l_fnd_miss_num, inf.prd1)) prd1,
141               DECODE (inf.prd2, g_hidden_col_num, NULL, DECODE(inf.prd2, NULL, l_fnd_miss_num, inf.prd2)) prd2,
142               DECODE (inf.prd3, g_hidden_col_num, NULL, DECODE(inf.prd3, NULL, l_fnd_miss_num, inf.prd3)) prd3,
143               DECODE (inf.prd4, g_hidden_col_num, NULL, DECODE(inf.prd4, NULL, l_fnd_miss_num, inf.prd4)) prd4,
144               DECODE (inf.prd5, g_hidden_col_num, NULL, DECODE(inf.prd5, NULL, l_fnd_miss_num, inf.prd5)) prd5,
145               DECODE (inf.prd6, g_hidden_col_num, NULL, DECODE(inf.prd6, NULL, l_fnd_miss_num, inf.prd6)) prd6,
146               DECODE (inf.prd7, g_hidden_col_num, NULL, DECODE(inf.prd7, NULL, l_fnd_miss_num, inf.prd7)) prd7,
147               DECODE (inf.prd8, g_hidden_col_num, NULL, DECODE(inf.prd8, NULL, l_fnd_miss_num, inf.prd8)) prd8,
148               DECODE (inf.prd9, g_hidden_col_num, NULL, DECODE(inf.prd9, NULL, l_fnd_miss_num, inf.prd9)) prd9,
149               DECODE (inf.prd10, g_hidden_col_num, NULL, DECODE(inf.prd10, NULL, l_fnd_miss_num, inf.prd10)) prd10,
150               DECODE (inf.prd11, g_hidden_col_num, NULL, DECODE(inf.prd11, NULL, l_fnd_miss_num, inf.prd11)) prd11,
151               DECODE (inf.prd12, g_hidden_col_num, NULL, DECODE(inf.prd12, NULL, l_fnd_miss_num, inf.prd12)) prd12,
152               DECODE (inf.prd13, g_hidden_col_num, NULL, DECODE(inf.prd13, NULL, l_fnd_miss_num, inf.prd13)) prd13,
153               DECODE (inf.prd14, g_hidden_col_num, NULL, DECODE(inf.prd14, NULL, l_fnd_miss_num, inf.prd14)) prd14,
154               DECODE (inf.prd15, g_hidden_col_num, NULL, DECODE(inf.prd15, NULL, l_fnd_miss_num, inf.prd15)) prd15,
155               DECODE (inf.prd16, g_hidden_col_num, NULL, DECODE(inf.prd16, NULL, l_fnd_miss_num, inf.prd16)) prd16,
156               DECODE (inf.prd17, g_hidden_col_num, NULL, DECODE(inf.prd17, NULL, l_fnd_miss_num, inf.prd17)) prd17,
157               DECODE (inf.prd18, g_hidden_col_num, NULL, DECODE(inf.prd18, NULL, l_fnd_miss_num, inf.prd18)) prd18,
158               DECODE (inf.prd19, g_hidden_col_num, NULL, DECODE(inf.prd19, NULL, l_fnd_miss_num, inf.prd19)) prd19,
159               DECODE (inf.prd20, g_hidden_col_num, NULL, DECODE(inf.prd20, NULL, l_fnd_miss_num, inf.prd20)) prd20,
160               DECODE (inf.prd21, g_hidden_col_num, NULL, DECODE(inf.prd21, NULL, l_fnd_miss_num, inf.prd21)) prd21,
161               DECODE (inf.prd22, g_hidden_col_num, NULL, DECODE(inf.prd22, NULL, l_fnd_miss_num, inf.prd22)) prd22,
162               DECODE (inf.prd23, g_hidden_col_num, NULL, DECODE(inf.prd23, NULL, l_fnd_miss_num, inf.prd23)) prd23,
163               DECODE (inf.prd24, g_hidden_col_num, NULL, DECODE(inf.prd24, NULL, l_fnd_miss_num, inf.prd24)) prd24,
164               DECODE (inf.prd25, g_hidden_col_num, NULL, DECODE(inf.prd25, NULL, l_fnd_miss_num, inf.prd25)) prd25,
165               DECODE (inf.prd26, g_hidden_col_num, NULL, DECODE(inf.prd26, NULL, l_fnd_miss_num, inf.prd26)) prd26,
166               DECODE (inf.prd27, g_hidden_col_num, NULL, DECODE(inf.prd27, NULL, l_fnd_miss_num, inf.prd27)) prd27,
167               DECODE (inf.prd28, g_hidden_col_num, NULL, DECODE(inf.prd28, NULL, l_fnd_miss_num, inf.prd28)) prd28,
168               DECODE (inf.prd29, g_hidden_col_num, NULL, DECODE(inf.prd29, NULL, l_fnd_miss_num, inf.prd29)) prd29,
169               DECODE (inf.prd30, g_hidden_col_num, NULL, DECODE(inf.prd30, NULL, l_fnd_miss_num, inf.prd30)) prd30,
170               DECODE (inf.prd31, g_hidden_col_num, NULL, DECODE(inf.prd31, NULL, l_fnd_miss_num, inf.prd31)) prd31,
171               DECODE (inf.prd32, g_hidden_col_num, NULL, DECODE(inf.prd32, NULL, l_fnd_miss_num, inf.prd32)) prd32,
172               DECODE (inf.prd33, g_hidden_col_num, NULL, DECODE(inf.prd33, NULL, l_fnd_miss_num, inf.prd33)) prd33,
173               DECODE (inf.prd34, g_hidden_col_num, NULL, DECODE(inf.prd34, NULL, l_fnd_miss_num, inf.prd34)) prd34,
174               DECODE (inf.prd35, g_hidden_col_num, NULL, DECODE(inf.prd35, NULL, l_fnd_miss_num, inf.prd35)) prd35,
175               DECODE (inf.prd36, g_hidden_col_num, NULL, DECODE(inf.prd36, NULL, l_fnd_miss_num, inf.prd36)) prd36,
176               DECODE (inf.prd37, g_hidden_col_num, NULL, DECODE(inf.prd37, NULL, l_fnd_miss_num, inf.prd37)) prd37,
177               DECODE (inf.prd38, g_hidden_col_num, NULL, DECODE(inf.prd38, NULL, l_fnd_miss_num, inf.prd38)) prd38,
178               DECODE (inf.prd39, g_hidden_col_num, NULL, DECODE(inf.prd39, NULL, l_fnd_miss_num, inf.prd39)) prd39,
179               DECODE (inf.prd40, g_hidden_col_num, NULL, DECODE(inf.prd40, NULL, l_fnd_miss_num, inf.prd40)) prd40,
180               DECODE (inf.prd41, g_hidden_col_num, NULL, DECODE(inf.prd41, NULL, l_fnd_miss_num, inf.prd41)) prd41,
181               DECODE (inf.prd42, g_hidden_col_num, NULL, DECODE(inf.prd42, NULL, l_fnd_miss_num, inf.prd42)) prd42,
182               DECODE (inf.prd43, g_hidden_col_num, NULL, DECODE(inf.prd43, NULL, l_fnd_miss_num, inf.prd43)) prd43,
183               DECODE (inf.prd44, g_hidden_col_num, NULL, DECODE(inf.prd44, NULL, l_fnd_miss_num, inf.prd44)) prd44,
184               DECODE (inf.prd45, g_hidden_col_num, NULL, DECODE(inf.prd45, NULL, l_fnd_miss_num, inf.prd45)) prd45,
185               DECODE (inf.prd46, g_hidden_col_num, NULL, DECODE(inf.prd46, NULL, l_fnd_miss_num, inf.prd46)) prd46,
186               DECODE (inf.prd47, g_hidden_col_num, NULL, DECODE(inf.prd47, NULL, l_fnd_miss_num, inf.prd47)) prd47,
187               DECODE (inf.prd48, g_hidden_col_num, NULL, DECODE(inf.prd48, NULL, l_fnd_miss_num, inf.prd48)) prd48,
188               DECODE (inf.prd49, g_hidden_col_num, NULL, DECODE(inf.prd49, NULL, l_fnd_miss_num, inf.prd49)) prd49,
189               DECODE (inf.prd50, g_hidden_col_num, NULL, DECODE(inf.prd50, NULL, l_fnd_miss_num, inf.prd50)) prd50,
190               DECODE (inf.prd51, g_hidden_col_num, NULL, DECODE(inf.prd51, NULL, l_fnd_miss_num, inf.prd51)) prd51,
191               DECODE (inf.prd52, g_hidden_col_num, NULL, DECODE(inf.prd52, NULL, l_fnd_miss_num, inf.prd52)) prd52,
192               DECODE (inf.sd_prd, g_hidden_col_num, NULL, DECODE(inf.sd_prd, NULL, l_fnd_miss_num, inf.sd_prd)) sd_prd
193       FROM    pa_fp_webadi_upload_inf inf
194       WHERE   inf.run_id=c_run_id
195       AND     Nvl(inf.val_error_flag, 'N') <> 'Y'
196       AND     inf.val_error_code IS NULL
197       AND     (inf.amount_type_name IS NULL      OR
198                (inf.amount_type_code IN ('TOTAL_QTY','FCST_QTY','ETC_QTY') AND
199                 c_allow_qty_flag='Y')            OR
200                (inf.amount_type_code IN ('TOTAL_RAW_COST','FCST_RAW_COST','ETC_RAW_COST') AND
201                 c_allow_raw_cost_flag='Y')       OR
202                (inf.amount_type_code IN ('TOTAL_BURDENED_COST','FCST_BURDENED_COST','ETC_BURDENED_COST') AND
203                 c_allow_burd_cost_flag='Y')      OR
204                (inf.amount_type_code IN ('TOTAL_REV','FCST_REVENUE','ETC_REVENUE') AND
205                 c_allow_revenue_flag='Y')        OR
206                (inf.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') AND
207                 c_allow_raw_cost_rate_flag='Y')  OR
208                (inf.amount_type_code IN ('BURDENED_COST_RATE','ETC_BURDENED_COST_RATE') AND
209                 c_allow_burd_cost_rate_flag='Y') OR
210                (inf.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') AND
211                 c_allow_bill_rate_flag='Y') )
212       AND     Nvl(c_request_id, -99) = Nvl(inf.request_id, -99)
213       ORDER BY inf.task_id, inf.resource_list_member_id, Nvl(inf.txn_currency_code, '-99'),
214                DECODE (inf.amount_type_code, 'TOTAL_BURDENED_COST',   1,
215                                              'TOTAL_RAW_COST',        2,
216                                              'TOTAL_REV',             3,
217                                              'TOTAL_QTY',             4,
218                                              'BURDENED_COST_RATE',    5,
219                                              'RAW_COST_RATE',         6,
220                                              'BILL_RATE',             7,
221                                              'FCST_BURDENED_COST',    10,
222                                              'ETC_BURDENED_COST',     11,
223                                              'FCST_RAW_COST',         12,
224                                              'ETC_RAW_COST',          13,
225                                              'FCST_REVENUE',          14,
226                                              'ETC_REVENUE',           15,
227                                              'FCST_QTY',              16,
228                                              'ETC_QTY',               17,
229                                              'ETC_BURDENED_COST_RATE',18,
230                                              'ETC_RAW_COST_RATE',     19,
231                                              'ETC_BILL_RATE',         20, 0);
232 
233 TYPE inf_cur_tbl_typ IS TABLE OF inf_tbl_data_csr%ROWTYPE INDEX BY BINARY_INTEGER;
234 
235 /* Start of changes done for Bug : 4584865 */
236 
237 /*This Record is used to store the Start Date and End Date of each Period based on the Period Mask associated
238   with the budget version.
239 */
240 TYPE periods_rec IS RECORD(sequence_number   NUMBER,
241                           period_name   VARCHAR2(50),--gl_periods.period_name%TYPE,
242                           start_date   gl_periods.start_date%TYPE,
243                           end_date   gl_periods.end_date%TYPE);
244 --PL/SQL table created based on Record periods_rec.
245 TYPE periods_tbl IS TABLE OF periods_rec;
246 
247 /* End of Changes done for Bug : 4584865*/
248 
249 PROCEDURE write_log(
250                     p_module_name          IN  VARCHAR2,
251                     p_err_msg              IN  VARCHAR2,
252                     p_debug_level          IN  NUMBER
253                    )
254 IS
255 PRAGMA AUTONOMOUS_TRANSACTION;
256 BEGIN
257 
258   INSERT INTO FND_LOG_MESSAGES
259   (module
260   ,log_level
261   ,message_text
262   ,session_id
263   ,user_id
264   ,timestamp
265   ,log_sequence)
266   values
267   (p_module_name
268   ,p_debug_level
269   ,p_err_msg
270   ,-1
271   ,fnd_global.user_id
272   ,sysdate
273   ,fnd_log_messages_s.nextval
274   );
275 
276 commit;
277 
278 EXCEPTION
279     WHEN OTHERS THEN
280           RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
281 END write_log;
282 
283 /*PROCEDURE log1(p_err_msg              IN  VARCHAR2
284                )
285 IS
286 PRAGMA AUTONOMOUS_TRANSACTION;
287 BEGIN
288 if wlog='N' then
289   return;
290   end if;
291   INSERT INTO t1
292   (c1,
293    c2)
294   values
295   (pa_fp_elements_s.nextval,
296    p_err_msg
297   );
298 
299 commit;
300 
301 EXCEPTION
302     WHEN OTHERS THEN
303           RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
304 END log1;
305 */
306 
307 PROCEDURE delete_xface
308                   ( p_run_id               IN   pa_fp_webadi_upload_inf.run_id%TYPE
309                    ,x_return_status        OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
310                    ,x_msg_count            OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
311                    ,x_msg_data             OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
312                    ,p_calling_module       IN   VARCHAR2  DEFAULT NULL
313                   )
314 IS
315   l_debug_mode                    VARCHAR2(1) ;
316   l_msg_count                     NUMBER := 0;
317   l_data                          VARCHAR2(2000);
318   l_msg_data                      VARCHAR2(2000);
319   l_msg_index_out                 NUMBER;
320   l_del_record_count              NUMBER;
321   l_budget_version_id             pa_budget_versions.budget_version_id%TYPE;
322   l_bv_request_id                 pa_budget_versions.request_id%TYPE;
323   l_inf_request_id                pa_budget_versions.request_id%TYPE;
324   l_preserve_rows_flag            VARCHAR2(1);
325   l_nothing_delete_flag           VARCHAR2(1);
326 
327 BEGIN
328     x_msg_count := 0;
329     x_return_status := FND_API.G_RET_STS_SUCCESS;
330     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'Y');
331 
332     IF l_debug_mode = 'Y' THEN
333          pa_debug.set_curr_function( p_function   => 'DELETE_XFACE'
334                                     ,p_debug_mode => l_debug_mode );
335          pa_debug.g_err_stage := ':In pa_fp_webadi_pkg.DELETE_XFACE' ;
336          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
337     END IF;
338 
339     l_preserve_rows_flag   := 'N';
340     l_nothing_delete_flag  := 'N';
341 
342     -- validating input parameter
343     IF p_run_id IS NULL THEN
344            IF l_debug_mode = 'Y' THEN
345                pa_debug.g_err_stage := 'p_run_id is passed as null';
346                pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
347            END IF;
348            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
349                                 p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
350                                 p_token1         => 'PROCEDURENAME',
351                                 p_value1         => g_module_name);
352            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
353     END IF;
354 
355     -- checking, if this api is called from web adi directly and if yes, if there is a pending
356     -- concurrent request for processing, then the rows in the interface table should not be deleted
357     IF p_calling_module = 'XL_UPLOAD' THEN
358         BEGIN
359             SELECT 'Y'
360             INTO   l_preserve_rows_flag
361             FROM   DUAL
362             WHERE  EXISTS (SELECT 'X'
363                            FROM   pa_fp_webadi_upload_inf inf,
364                                   pa_budget_versions bv
365                            WHERE  inf.run_id = p_run_id
366                            AND    inf.budget_version_id = bv.budget_version_id
367                            AND    Nvl(inf.request_id, -99) = Nvl(bv.request_id, -99)
368                            AND    bv.plan_processing_code IN ('XLUP', 'XLUE'));
369             -- there is a pending concurrent request, which is yet to be processed
370             -- inf table data should not be deleted
371             IF l_debug_mode = 'Y' THEN
372                pa_debug.g_err_stage := 'Concurrent Request pending, returning';
373                pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
374             END IF;
375         EXCEPTION
376             WHEN NO_DATA_FOUND THEN
377                 IF l_debug_mode = 'Y' THEN
378                    pa_debug.g_err_stage := 'This has been called for online mode';
379                    pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
380                END IF;
381                -- do nothing
382                l_preserve_rows_flag := 'N';
383 --               l_nothing_delete_flag := 'Y';
384         END;
385     END IF;
386 
387     IF l_preserve_rows_flag <> 'Y' THEN
388         DELETE FROM PA_FP_WEBADI_UPLOAD_INF
389         WHERE  run_id = p_run_id;
390 
391         IF l_debug_mode = 'Y' THEN
392              l_del_record_count := SQL%ROWCOUNT;
393              pa_debug.g_err_stage := ':Deleted '||l_del_record_count||' records from PA_FP_WEBADI_UPLOAD_INF';
394              pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
395              pa_debug.reset_curr_function;
396         END IF;
397     END IF;
398 EXCEPTION
399     WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
400          l_msg_count := FND_MSG_PUB.count_msg;
401 
402          IF l_msg_count = 1 and x_msg_data IS NULL THEN
403                PA_INTERFACE_UTILS_PUB.get_messages
404                  (p_encoded        => FND_API.G_TRUE
405                  ,p_msg_index      => 1
406                  ,p_msg_count      => l_msg_count
407                  ,p_msg_data       => l_msg_data
408                  ,p_data           => l_data
409                  ,p_msg_index_out  => l_msg_index_out);
410               x_msg_data := l_data;
411               x_msg_count := l_msg_count;
412          ELSE
413               x_msg_count := l_msg_count;
414          END IF;
415          x_return_status := FND_API.G_RET_STS_ERROR;
416 
417          IF l_debug_mode = 'Y' THEN
418              pa_debug.reset_curr_function;
419          END IF;
420          RETURN;
421     WHEN OTHERS THEN
422           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
423           x_msg_count     := 1;
424           x_msg_data      := SQLERRM;
425           FND_MSG_PUB.add_exc_msg
426              ( p_pkg_name       => 'pa_fp_webadi_pkg'
427               ,p_procedure_name => 'DELETE_XFACE' );
428           IF l_debug_mode = 'Y' THEN
429              pa_debug.write('DELETE_XFACE' || g_module_name,SQLERRM,4);
430              pa_debug.write('DELETE_XFACE' || g_module_name,pa_debug.G_Err_Stack,4);
431              pa_debug.reset_curr_function;
432           END IF;
433 
434           RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
435 
436 END DELETE_XFACE;
437 
438   -- Bug 3986129: FP.M Web ADI Dev changes. Added the followings:
439 
440   PROCEDURE validate_header_info
441      ( p_calling_mode              IN           VARCHAR2,
442        p_run_id                    IN           pa_fp_webadi_upload_inf.run_id%TYPE,
443        p_budget_version_id         IN           pa_budget_versions.budget_version_id%TYPE,
444        p_record_version_number     IN           pa_budget_versions.record_version_number%TYPE,
445        p_pm_rec_version_number     IN           pa_period_masks_b.record_version_number%TYPE,
446        p_submit_flag               IN           VARCHAR2,
447        p_request_id                IN           pa_budget_versions.request_id%TYPE,
448        x_return_status             OUT          NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
449        x_msg_data                  OUT          NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
450        x_msg_count                 OUT          NOCOPY NUMBER) --File.Sql.39 bug 4440895
451 
452   IS
453 
454       CURSOR l_version_info_csr (c_budget_version_id      pa_budget_versions.budget_version_id%TYPE)
455       IS
456       SELECT  bv.record_version_number,
457               bv.period_mask_id,
458               bv.project_id,
459               bv.fin_plan_type_id,
460               Nvl(bv.ci_id, -1),
461               bv.version_type,
462               Nvl(bv.approved_cost_plan_type_flag, 'N'),
463               Nvl(bv.approved_rev_plan_type_flag, 'N'),
464               Nvl(bv.primary_cost_forecast_flag, 'N'),
465               Nvl(bv.primary_rev_forecast_flag, 'N'),
466               Nvl(bv.current_working_flag, 'N'),
467               fpt.plan_class_code,
468               Decode(bv.version_type, 'COST', fpo.cost_time_phased_code,
469                      'REVENUE', fpo.revenue_time_phased_code, 'ALL', fpo.all_time_phased_code) time_phased_code
470        FROM   pa_budget_versions bv,
471               pa_fin_plan_types_b fpt,
472               pa_proj_fp_options fpo
473        WHERE  bv.budget_version_id = c_budget_version_id
474        AND    bv.budget_version_id = fpo.fin_plan_version_id
475        AND    bv.project_id = fpo.project_id
476        AND    bv.fin_plan_type_id = fpt.fin_plan_type_id;
477 
478        l_record_version_number              pa_budget_versions.record_version_number%TYPE;
479        l_period_mask_id                     pa_period_masks_b.period_mask_id%TYPE;
480        l_project_id                         pa_projects_all.project_id%TYPE;
481        l_fin_plan_type_id                   pa_fin_plan_types_b.fin_plan_type_id%TYPE;
482        l_ci_id                              pa_control_items.ci_id%TYPE;
483        l_version_type                       pa_budget_versions.version_type%TYPE;
484        l_app_cost_plan_type_flag            pa_budget_versions.approved_cost_plan_type_flag%TYPE;
485        l_rev_plan_type_flag                 pa_budget_versions.approved_rev_plan_type_flag%TYPE;
486        l_prime_cost_fcst_flag               pa_budget_versions.primary_cost_forecast_flag%TYPE;
487        l_prime_rev_fcst_flag                pa_budget_versions.primary_rev_forecast_flag%TYPE;
488        l_current_working_flag               pa_budget_versions.current_working_flag%TYPE;
489        l_plan_class_code                    pa_fin_plan_types_b.plan_class_code%TYPE;
490        l_time_phase_code                    pa_proj_fp_options.all_time_phased_code%TYPE;
491        l_pm_rec_version_number              pa_period_masks_b.record_version_number%TYPE;
492 
493        is_periodic_layout                   VARCHAR2(1) := 'N';
494 
495        l_sec_ret_code                       VARCHAR2(30);
496        l_locked_by_persion_id               pa_budget_versions.locked_by_person_id%TYPE;
497        l_val_err_code                       VARCHAR2(30);
498        l_ci_status_code                     pa_control_items.status_code%TYPE;
499 
500        l_return_status                      VARCHAR2(1);
501        l_msg_data                           VARCHAR2(2000);
502        l_msg_count                          NUMBER;
503 
504        l_debug_mode                         VARCHAR2(1);
505        l_module_name                        VARCHAR2(100) := 'pa_fp_webadi_pkg.validate_header_info';
506        l_debug_level3                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
507        l_debug_level5                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
508        l_data                               VARCHAR2(2000);
509        l_msg_index_out                      NUMBER;
510 
511 
512        BEGIN
513 
514                fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
515                x_msg_count := 0;
516                x_return_status := FND_API.G_RET_STS_SUCCESS;
517                IF l_debug_mode = 'Y' THEN
518                      PA_DEBUG.Set_Curr_Function( p_function   => l_module_name,
519                                                  p_debug_mode => l_debug_mode );
520                END IF;
521                IF l_debug_mode = 'Y' THEN
522                      pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.validate_header_info';
523                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
524                END IF;
525 
526                --log1('----- Entering into validate_header_info-------');
527 
528                IF l_debug_mode = 'Y' THEN
529                      pa_debug.g_err_stage := 'Opening l_version_info_csr';
530                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
531                END IF;
532 
533                -- since there would be check for null budget_version_id in the
534                -- calling place, no check is made here for the same
535                OPEN l_version_info_csr(p_budget_version_id);
536                FETCH l_version_info_csr INTO
537                      l_record_version_number,
538                      l_period_mask_id,
539                      l_project_id,
540                      l_fin_plan_type_id,
541                      l_ci_id,
542                      l_version_type,
543                      l_app_cost_plan_type_flag,
544                      l_rev_plan_type_flag,
545                      l_prime_cost_fcst_flag,
546                      l_prime_rev_fcst_flag,
547                      l_current_working_flag,
548                      l_plan_class_code,
549                      l_time_phase_code;
550 
551                      IF l_version_info_csr%NOTFOUND THEN
552                            IF l_debug_mode = 'Y' THEN
553                                 pa_debug.g_err_stage := 'Cursor l_version_info_csr failed to fetch data';
554                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
555                            END IF;
556                            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
557                      END IF;
558                CLOSE l_version_info_csr;
559 
560                IF l_debug_mode = 'Y' THEN
561                      pa_debug.g_err_stage := 'Data fetched from l_version_info_csr';
562                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
563                END IF;
564 
565                --log1('----- STAGE 1-------');
566                IF l_debug_mode = 'Y' THEN
567                      pa_debug.g_err_stage := 'Validating record version number';
568                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
569                END IF;
570                IF l_record_version_number <> p_record_version_number THEN
571                       IF l_debug_mode = 'Y' THEN
572                           pa_debug.g_err_stage := 'Record version number has changed';
573                           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
574                       END IF;
575                       RAISE BV_validation_failed_exc;
576                END IF;
577                --Update the interface table with error_code 'PA_FP_WEBADI_VER_MODIFIED'
578 
579                IF l_debug_mode = 'Y' THEN
580                      pa_debug.g_err_stage := 'Checking for periodic layout';
581                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
582                END IF;
583 
584                BEGIN
585                      SELECT  'Y'
586                      INTO    is_periodic_layout
587                      FROM    DUAL
588                      WHERE EXISTS(SELECT  'X'
589                                   FROM    pa_fp_webadi_upload_inf
590                                   WHERE   run_id = p_run_id
591                                   AND     amount_type_name IS NOT NULL
592                                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99));
593                EXCEPTION
594                      WHEN NO_DATA_FOUND THEN
595                           is_periodic_layout := 'N';
596                END;
597 
598                --log1('----- STAGE 2-------');
599                IF is_periodic_layout = 'Y' THEN
600                     IF l_debug_mode = 'Y' THEN
601                          pa_debug.g_err_stage := 'Validating period mask';
602                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
603                     END IF;
604 
605                     IF l_time_phase_code <> 'N' THEN
606                          BEGIN
607                             SELECT record_version_number
608                             INTO   l_pm_rec_version_number
609                             FROM   pa_period_masks_b
610                             WHERE  period_mask_id = l_period_mask_id;
611                          EXCEPTION
612                              WHEN NO_DATA_FOUND THEN
613                                   IF l_debug_mode = 'Y' THEN
614                                       pa_debug.g_err_stage := 'No data found for period mask';
615                                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
616                                   END IF;
617                                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
618                          END;
619                          -- the following validation is only for timephased budgets downloaded in
620                          -- periodic layouts
621                          IF l_pm_rec_version_number <> p_pm_rec_version_number THEN
622                             IF l_debug_mode = 'Y' THEN
623                                 pa_debug.g_err_stage := 'period mask has changed';
624                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
625                             END IF;
626                             RAISE Bv_period_mask_changed_Exc;
627                             --Update the interface table with error_code 'PA_FP_WEBADI_TP_MODIFIED'
628                          END IF;
629                     END IF;
630                END IF;
631 
632                --log1('----- STAGE 3-------');
633                IF l_debug_mode = 'Y' THEN
634                      pa_debug.g_err_stage := 'Checking for function security';
635                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
636                END IF;
637 
638                IF l_ci_id = -1 THEN
639                      -- budget version
640                      PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY
641                         (p_api_version_number => PA_BUDGET_PUB.G_API_VERSION_NUMBER,
642                          p_project_id         => l_project_id,
643                          p_fin_plan_type_id   => l_fin_plan_type_id,
644                          p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN,
645                          p_function_name      => 'PA_PM_UPDATE_BUDGET',
646                          p_version_type       => l_version_type,
647                          x_return_status      => l_return_status,
648                          x_ret_code           => l_sec_ret_code);
649                ELSE
650                      -- change order version
651                      PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY
652                         (p_api_version_number => PA_BUDGET_PUB.G_API_VERSION_NUMBER,
653                          p_project_id         => l_project_id,
654                          p_fin_plan_type_id   => l_fin_plan_type_id,
655                          p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN,
656                          p_function_name      => 'PA_PM_UPDATE_CHG_DOC',
657                          p_version_type       => l_version_type,
658                          x_return_status      => l_return_status,
659                          x_ret_code           => l_sec_ret_code);
660                END IF;
661 
662                IF l_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
663                    IF l_debug_mode = 'Y' THEN
664                        pa_debug.g_err_stage := 'Function security not present';
665                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
666                    END IF;
667                    RAISE No_Bv_Maint_Previlege_Exc;
668                    --Update the interface table with error_code 'PA_FP_WEBADI_NO_BV_MAINT_PVLG'
669                END IF;
670 
671                --log1('----- STAGE 4-------');
672                -- Checking, if the budget version can be edited or not
673                IF l_debug_mode = 'Y' THEN
674                      pa_debug.g_err_stage := 'Checking if the version can be edited';
675                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
676                END IF;
677 
678                IF l_ci_id = -1 THEN
679                    pa_fin_plan_utils.validate_editable_bv
680                        (p_budget_version_id     => p_budget_version_id,
681                         p_user_id               => fnd_global.user_id,
682                         p_context               => 'WEBADI',
683                         p_excel_calling_mode    => p_calling_mode,
684                         x_locked_by_person_id   => l_locked_by_persion_id,
685                         x_err_code              => l_val_err_code,
686                         x_return_status         => l_return_status,
687                         x_msg_count             => l_msg_count,
688                         x_msg_data              => l_msg_data);
689 
690                    IF l_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
691                       IF l_val_err_code IS NOT NULL THEN
692                             IF l_debug_mode = 'Y' THEN
693                                 pa_debug.g_err_stage := 'The version can not be edited';
694                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
695                             END IF;
696                             RAISE Bv_Non_Editable_Exc;
697                             --update the interface table with the error_code;
698                       END IF;
699                    END IF;
700 
701                    --log1('----- STAGE 5-------');
702                ELSE
703                      -- Check if the ci is not editable
704                      IF l_debug_mode = 'Y' THEN
705                            pa_debug.g_err_stage := 'Checking if the CO can be updated';
706                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
707                      END IF;
708                      BEGIN
709                              SELECT pjs.project_system_status_code
710                              INTO   l_ci_status_code
711                              FROM   pa_control_items pci,
712                                     pa_project_statuses pjs
713                              WHERE  pci.ci_id = l_ci_id
714                              and    pci.status_code = pjs.project_status_code;
715                      EXCEPTION
716                              WHEN NO_DATA_FOUND THEN
717                                IF l_debug_mode = 'Y' THEN
718                                  pa_debug.g_err_stage := 'Status code not found';
719                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
720                                END IF;
721                                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
722                      END;
723 
724                      IF l_ci_status_code NOT IN ('CI_DRAFT', 'CI_WORKING') THEN
725                            IF l_debug_mode = 'Y' THEN
726                                pa_debug.g_err_stage := 'CO version cannot be updated';
727                                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
728                            END IF;
729                            RAISE Co_Ver_Non_Editable_Exc;
730                            --update the interface table with error_code 'PA_FP_WA_CI_VER_NON_EDITABLE'
731                      END IF;
732 
733                      --log1('----- STAGE 6-------');
734                END IF;
735                /* check if the p_submit flag is passed as 'Y', if yes then
736                 * check if the version is current working version or not,
737                 * if the user has the submit privilege or not
738                 * throw an error, if the version is CI
739                 */
740 
741                IF l_debug_mode = 'Y' THEN
742                      pa_debug.g_err_stage := 'Checking for submit previlege';
743                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
744                END IF;
745                IF p_submit_flag = 'Y' THEN
746                        -- call to check if the version is current working
747                        IF l_ci_id = -1 THEN
748                            IF l_current_working_flag = 'N' THEN
749                               IF l_debug_mode = 'Y' THEN
750                                  pa_debug.g_err_stage := 'Submittin while not current working';
751                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
752                               END IF;
753                               RAISE Bv_Not_Curr_Working_Exc;
754                               --Update the interface table with error_code 'PA_FP_WA_BV_NOT_CURR_WORKING';
755                            END IF;
756                        ELSE -- for CI version the p_submit_flag = 'Y'
757                           IF l_debug_mode = 'Y' THEN
758                               pa_debug.g_err_stage := 'Submitting CO version';
759                               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
760                           END IF;
761                           RAISE Ci_Ver_Sumbit_Flag_Exc;
762                           --Update the interface table with error_code 'PA_FP_WA_CI_VER_SUBMIT_FLAG';
763                        END IF;
764 
765                        PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY
766                        (p_api_version_number => PA_BUDGET_PUB.G_API_VERSION_NUMBER,
767                         p_project_id         => l_project_id,
768                         p_fin_plan_type_id   => l_fin_plan_type_id,
769                         p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN,
770                         p_function_name      => 'PA_PM_SUBMIT_BUDGET',
771                         p_version_type       => l_version_type,
772                         x_return_status      => l_return_status,
773                         x_ret_code           => l_sec_ret_code);
774 
775                        IF l_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
776                             IF l_debug_mode = 'Y' THEN
777                                 pa_debug.g_err_stage := 'No submit previlege';
778                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
779                             END IF;
780                             RAISE No_Bv_Maint_Previlege_Exc;
781                             --Update the interface table with error_code 'PA_FP_WEBADI_NO_BV_MAINT_PVLG'
782                        END IF;
783 
784                        --log1('----- STAGE 7-------');
785                END IF; -- p_submit_flag = 'Y'
786 
787                IF l_debug_mode = 'Y' THEN
788                   pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.validate_header_info';
789                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
790                END IF;
791                IF l_debug_mode = 'Y' THEN
792                   pa_debug.reset_curr_function;
793                END IF;
794 
795                --log1('----- Leaving validate_header_info-------');
796 
797       EXCEPTION
798            -- handling all the pre defined exceptions
799            WHEN BV_validation_failed_exc THEN
800                   IF l_debug_mode = 'Y' THEN
801                       pa_debug.g_err_stage := 'Updating tmp table with error code: PA_FP_WEBADI_VER_MODIFIED';
802                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
803                   END IF;
804 
805                   UPDATE pa_fp_webadi_upload_inf
806                   SET    val_error_flag       = 'Y',
807                          val_error_code       = 'PA_FP_WEBADI_VER_MODIFIED',
808                          err_task_name        = nvl(task_name,'-98'),
809                          err_task_number      = nvl(task_number,'-98'),
810                          err_alias            = nvl(resource_alias,'-98'),
811                          err_amount_type_code = nvl(amount_type_code,'-98')
812                   WHERE  run_id=p_run_id
813                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
814 
815                   x_return_status := FND_API.G_RET_STS_ERROR;
816                   IF l_debug_mode = 'Y' THEN
817                      pa_debug.reset_curr_function;
818                   END IF;
819 
820                   RETURN;
821            WHEN Bv_period_mask_changed_Exc THEN
822                   IF l_debug_mode = 'Y' THEN
823                       pa_debug.g_err_stage := 'Updating tmp table with error code: PA_FP_WEBADI_TP_MODIFIED';
824                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
825                   END IF;
826 
827                   UPDATE pa_fp_webadi_upload_inf
828                   SET    val_error_flag = 'Y',
829                          val_error_code = 'PA_FP_WEBADI_TP_MODIFIED',
830                          err_task_name        = nvl(task_name,'-98'),
831                          err_task_number      = nvl(task_number,'-98'),
832                          err_alias            = nvl(resource_alias,'-98'),
833                          err_amount_type_code = nvl(amount_type_code,'-98')
834                   WHERE  run_id=p_run_id
835                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
836 
837                   x_return_status := FND_API.G_RET_STS_ERROR;
838                   IF l_debug_mode = 'Y' THEN
839                      pa_debug.reset_curr_function;
840                   END IF;
841 
842                   RETURN;
843            WHEN No_Bv_Maint_Previlege_Exc THEN
844                   IF l_debug_mode = 'Y' THEN
845                       pa_debug.g_err_stage := 'Updating tmp table with error code: PA_FP_WEBADI_NO_BV_MAINT_PVLG';
846                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
847                   END IF;
848 
849                   UPDATE pa_fp_webadi_upload_inf
850                   SET    val_error_flag = 'Y',
851                          val_error_code = 'PA_FP_WEBADI_NO_BV_MAINT_PVLG',
852                          err_task_name        = nvl(task_name,'-98'),
853                          err_task_number      = nvl(task_number,'-98'),
854                          err_alias            = nvl(resource_alias,'-98'),
855                          err_amount_type_code = nvl(amount_type_code,'-98')
856                   WHERE  run_id=p_run_id
857                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
858 
859                   x_return_status := FND_API.G_RET_STS_ERROR;
860                   IF l_debug_mode = 'Y' THEN
861                      pa_debug.reset_curr_function;
862                   END IF;
863 
864                   RETURN;
865            WHEN Bv_Non_Editable_Exc THEN
866                   IF l_debug_mode = 'Y' THEN
867                       pa_debug.g_err_stage := 'Updating tmp table with error code: ' || l_val_err_code;
868                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
869                   END IF;
870 
871                   UPDATE pa_fp_webadi_upload_inf
872                   SET    val_error_flag = 'Y',
873                          val_error_code = l_val_err_code,
874                          err_task_name        = nvl(task_name,'-98'),
875                          err_task_number      = nvl(task_number,'-98'),
876                          err_alias            = nvl(resource_alias,'-98'),
877                          err_amount_type_code = nvl(amount_type_code,'-98')
878                   WHERE  run_id=p_run_id
879                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
880 
881                   x_return_status := FND_API.G_RET_STS_ERROR;
882                   IF l_debug_mode = 'Y' THEN
883                      pa_debug.reset_curr_function;
884                   END IF;
885 
886                   RETURN;
887            WHEN Co_Ver_Non_Editable_Exc THEN
888                   IF l_debug_mode = 'Y' THEN
889                       pa_debug.g_err_stage := 'Updating tmp table with error code: FP_WEBADI_CI_VER_NON_EDITABLE';
890                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
891                   END IF;
892 
893                   UPDATE pa_fp_webadi_upload_inf
894                   SET    val_error_flag = 'Y',
895                          val_error_code = 'PA_FP_WA_CI_VER_NON_EDITABLE',
896                          err_task_name        = nvl(task_name,'-98'),
897                          err_task_number      = nvl(task_number,'-98'),
898                          err_alias            = nvl(resource_alias,'-98'),
899                          err_amount_type_code = nvl(amount_type_code,'-98')
900                   WHERE  run_id=p_run_id
901                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
902 
903                   x_return_status := FND_API.G_RET_STS_ERROR;
904                   IF l_debug_mode = 'Y' THEN
905                      pa_debug.reset_curr_function;
906                   END IF;
907 
908                   RETURN;
909            WHEN Bv_Not_Curr_Working_Exc THEN
910                   IF l_debug_mode = 'Y' THEN
911                       pa_debug.g_err_stage := 'Updating tmp table with error code: FP_WEBADI_BV_NOT_CURR_WORKING';
912                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
913                   END IF;
914 
915                   UPDATE pa_fp_webadi_upload_inf
916                   SET    val_error_flag = 'Y',
917                          val_error_code = 'PA_FP_WA_BV_NOT_CURR_WORKING',
918                          err_task_name        = nvl(task_name,'-98'),
919                          err_task_number      = nvl(task_number,'-98'),
920                          err_alias            = nvl(resource_alias,'-98'),
921                          err_amount_type_code = nvl(amount_type_code,'-98')
922                   WHERE  run_id=p_run_id
923                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
924 
925                   x_return_status := FND_API.G_RET_STS_ERROR;
926                   IF l_debug_mode = 'Y' THEN
927                      pa_debug.reset_curr_function;
928                   END IF;
929 
930                   RETURN;
931            WHEN Ci_Ver_Sumbit_Flag_Exc THEN
932                   IF l_debug_mode = 'Y' THEN
933                       pa_debug.g_err_stage := 'Updating tmp table with error code: FP_WEBADI_CI_VER_SUBMIT_FLAG';
934                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
935                   END IF;
936 
937                   UPDATE pa_fp_webadi_upload_inf
938                   SET    val_error_flag = 'Y',
939                          val_error_code = 'PA_FP_WA_CI_VER_SUBMIT_FLAG',
940                          err_task_name        = nvl(task_name,'-98'),
941                          err_task_number      = nvl(task_number,'-98'),
942                          err_alias            = nvl(resource_alias,'-98'),
943                          err_amount_type_code = nvl(amount_type_code,'-98')
944                   WHERE  run_id=p_run_id
945                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
946 
947                   x_return_status := FND_API.G_RET_STS_ERROR;
948                   IF l_debug_mode = 'Y' THEN
949                      pa_debug.reset_curr_function;
950                   END IF;
951 
952                   RETURN;
953 
954            WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
955                l_msg_count := FND_MSG_PUB.count_msg;
956 
957                IF l_msg_count = 1 and x_msg_data IS NULL THEN
958                      PA_INTERFACE_UTILS_PUB.get_messages
959                        (p_encoded        => FND_API.G_TRUE
960                        ,p_msg_index      => 1
961                        ,p_msg_count      => l_msg_count
962                        ,p_msg_data       => l_msg_data
963                        ,p_data           => l_data
964                        ,p_msg_index_out  => l_msg_index_out);
965                     x_msg_data := l_data;
966                     x_msg_count := l_msg_count;
967                ELSE
968                     x_msg_count := l_msg_count;
969                END IF;
970                x_return_status := FND_API.G_RET_STS_ERROR;
971 
972                IF l_debug_mode = 'Y' THEN
973                    pa_debug.reset_curr_function;
974                END IF;
975                RETURN;
976 
977            WHEN OTHERS THEN
978                x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
979                x_msg_count     := 1;
980                x_msg_data      := SQLERRM;
981 
982                FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
983                                        ,p_procedure_name  => 'prepare_val_input');
984                IF l_debug_mode = 'Y' THEN
985                     pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
986                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
987                END IF;
988 
989                IF l_debug_mode = 'Y' THEN
990                   pa_debug.reset_curr_function;
991                END IF;
992                RAISE;
993 
994       END validate_header_info; -- of validate_header_info
995 
996   /* The input parameter p_context would only be passed if the task id can not be derived
997    * from the task number/ task name provided i.e task_id is returned as null from the select
998    * in prepare_val_input api. The valid value of this is 'INV_TASK.
999    * For other validation errors, the corresponding error code would be passed to the api
1000    * along with other informations like task_id, resource_alias, amount_type_code
1001    */
1002 
1003    -- Making this procedure an autonomous transition block as the errors reported
1004    -- on the interface table have to be retained even after rolling back all the
1005    -- other DML performed in the course of validation processing till the point
1006    -- a validation failure occurs.
1007 
1008   PROCEDURE process_errors
1009                  ( p_run_id             IN           pa_fp_webadi_upload_inf.run_id%TYPE,
1010                    p_context            IN           VARCHAR2,
1011                    p_periodic_flag      IN           VARCHAR2,
1012                    p_error_code_tbl     IN           SYSTEM.PA_VARCHAR2_30_TBL_TYPE,
1013                    p_task_id_tbl        IN           SYSTEM.PA_NUM_TBL_TYPE,
1014                    p_rlm_id_tbl         IN           SYSTEM.PA_NUM_TBL_TYPE,
1015                    p_txn_curr_tbl       IN           SYSTEM.PA_VARCHAR2_30_TBL_TYPE,
1016                    p_amount_type_tbl    IN           SYSTEM.PA_VARCHAR2_30_TBL_TYPE,
1017                    p_request_id         IN           pa_budget_versions.request_id%TYPE,
1018                    x_return_status      OUT          NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1019                    x_msg_data           OUT          NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1020                    x_msg_count          OUT          NOCOPY NUMBER) --File.Sql.39 bug 4440895
1021   IS
1022 --  PRAGMA AUTONOMOUS_TRANSACTION;
1023 
1024        l_return_status                      VARCHAR2(1);
1025        l_msg_data                           VARCHAR2(2000);
1026        l_msg_count                          NUMBER;
1027 
1028        l_debug_mode                         VARCHAR2(1);
1029        l_module_name                        VARCHAR2(100) := 'pa_fp_webadi_pkg.process_errors';
1030        l_debug_level3                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1031        l_debug_level5                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1032        l_msg_index_out                      NUMBER;
1033        l_data                               VARCHAR2(2000);
1034        l_periodic_flag                      VARCHAR2(1);
1035 
1036   BEGIN
1037        fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1038        x_msg_count := 0;
1039        x_return_status := FND_API.G_RET_STS_SUCCESS;
1040        IF l_debug_mode = 'Y' THEN
1041              PA_DEBUG.Set_Curr_Function( p_function   => l_module_name,
1042                                          p_debug_mode => l_debug_mode );
1043        END IF;
1044        IF l_debug_mode = 'Y' THEN
1045              pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.process_errors';
1046              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1047        END IF;
1048 
1049        --log1('PE 1'||p_error_code_tbl.COUNT);
1050        --log1('PE 2'||p_periodic_flag);
1051        --log1('PE 3'||p_task_id_tbl.COUNT);
1052        --log1('PE 4'||p_rlm_id_tbl.COUNT);
1053        --log1('PE 5'||p_txn_curr_tbl.COUNT);
1054        --log1('PE 6'||p_run_id);
1055        --log1('PE 7'||p_context);
1056        /*FOR  k IN 1..p_error_code_tbl.COUNT LOOP
1057 
1058             log1('p_error_code_tbl('||k||') is '||p_error_code_tbl(k));
1059             log1('p_task_id_tbl('||k||') is '||p_task_id_tbl(k));
1060             log1('p_rlm_id_tbl('||k||') is '||p_rlm_id_tbl(k));
1061             log1('p_txn_curr_tbl('||k||') is '||p_txn_curr_tbl(k));
1062             IF p_amount_type_tbl.EXISTS(k) THEN
1063                 log1('p_amount_type_tbl('||k||') is '||p_amount_type_tbl(k));
1064 
1065             ELSE
1066 
1067                 log1('p_amount_type_tbl('||k||') is NULL5');
1068             END IF;
1069       end loop;*/
1070 
1071       l_periodic_flag := p_periodic_flag;
1072 
1073       -- 4497322.Perf Fix:A condition is added in the WHERE clause.
1074       IF l_periodic_flag IS NULL THEN
1075 
1076         BEGIN
1077             SELECT 'Y'
1078             INTO   l_periodic_flag
1079             FROM   DUAL
1080             WHERE  EXISTS (SELECT 1
1081                            FROM   pa_fp_webadi_upload_inf
1082                            WHERE  run_id=p_run_id
1083                            AND    amount_type_name IS NOT NULL
1084                            AND    Nvl(p_request_id, -99) = Nvl(request_id, -99));
1085 
1086         EXCEPTION
1087         WHEN NO_DATA_FOUND THEN
1088 
1089             l_periodic_flag := 'N';
1090 
1091         END;
1092 
1093       END IF;
1094 
1095 
1096 
1097        IF p_context IS NOT NULL THEN
1098            IF p_context = 'INV_TASK' THEN
1099                UPDATE pa_fp_webadi_upload_inf
1100                SET    val_error_flag       = 'Y',
1101                       val_error_code       = 'INVALID_TASK_INFO',
1102                       err_task_name        = nvl(task_name,'-98'),
1103                       err_task_number      = nvl(task_number,'-98'),
1104                       err_alias            = nvl(resource_alias,'-98'),
1105                       err_amount_type_code = nvl(amount_type_code,'-98')
1106                WHERE  run_id = p_run_id
1107                AND    task_id IS NULL
1108                AND    val_error_flag IS NULL
1109                AND    Nvl(p_request_id, -99) = Nvl(request_id, -99);
1110            ELSIF p_context = 'INV_RESOURCE' THEN
1111                UPDATE pa_fp_webadi_upload_inf
1112                SET    val_error_flag       = 'Y',
1113                       val_error_code       = 'INVALID_RESOURCE_INFO',
1114                       err_task_name        = nvl(task_name,'-98'),
1115                       err_task_number      = nvl(task_number,'-98'),
1116                       err_alias            = nvl(resource_alias,'-98'),
1117                       err_amount_type_code = nvl(amount_type_code,'-98')
1118                WHERE  run_id = p_run_id
1119                AND    resource_list_member_id IS NULL
1120                AND    val_error_flag IS NULL
1121                AND    Nvl(p_request_id, -99) = Nvl(request_id, -99);
1122            ELSE -- no other valid not null context
1123                IF l_debug_mode = 'Y' THEN
1124                    pa_debug.g_err_stage := 'Not a valid calling context passed';
1125                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1126                END IF;
1127                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1128            END IF;
1129 
1130        ELSE  -- when p_context is not passed
1131            IF p_error_code_tbl.count > 0 THEN
1132 
1133                IF p_periodic_flag = 'Y' THEN
1134 
1135                   IF p_error_code_tbl.COUNT = p_task_id_tbl.COUNT AND
1136                      p_error_code_tbl.COUNT = p_rlm_id_tbl.COUNT AND
1137                      p_error_code_tbl.COUNT = p_amount_type_tbl.COUNT AND
1138                      p_error_code_tbl.COUNT = p_txn_curr_tbl.COUNT THEN
1139                         FORALL i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST
1140                              UPDATE pa_fp_webadi_upload_inf
1141                              SET    val_error_flag       = 'Y',
1142                                     val_error_code       = p_error_code_tbl(i),
1143                                     err_task_name        = nvl(task_name,'-98'),
1144                                     err_task_number      = nvl(task_number,'-98'),
1145                                     err_alias            = nvl(resource_alias,'-98'),
1146                                     err_amount_type_code = nvl(amount_type_code,'-98')
1147                              WHERE  run_id = p_run_id
1148                              AND    task_id = p_task_id_tbl(i)
1149                              AND    resource_list_member_id = p_rlm_id_tbl(i)
1150                              AND    Nvl(txn_currency_code, '-11') = Nvl(p_txn_curr_tbl(i), '-11')
1151                              AND    amount_type_code = p_amount_type_tbl(i)
1152                              AND    Nvl(p_request_id, -99) = Nvl(request_id, -99)
1153                              AND    ROWNUM=1;
1154 
1155                   ELSE -- input table length not same
1156                       IF l_debug_mode = 'Y' THEN
1157                          pa_debug.g_err_stage := 'Information mismatch to process: periodic';
1158                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1159                       END IF;
1160                       RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1161                   END IF;
1162 
1163                ELSE -- non periodic
1164 
1165                   IF p_error_code_tbl.COUNT = p_task_id_tbl.COUNT AND
1166                      p_error_code_tbl.COUNT = p_rlm_id_tbl.COUNT AND
1167                      p_error_code_tbl.COUNT = p_txn_curr_tbl.COUNT THEN
1168                            FORALL i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST
1169                                 UPDATE pa_fp_webadi_upload_inf inf
1170                                 SET    inf.val_error_flag       = 'Y',
1171                                        inf.val_error_code       = p_error_code_tbl(i),
1172                                        inf.err_task_name        = nvl(inf.task_name,'-98'),
1173                                        inf.err_task_number      = nvl(inf.task_number,'-98'),
1174                                        inf.err_alias            = nvl(inf.resource_alias,'-98'),
1175                                        inf.err_amount_type_code = nvl(inf.amount_type_code,'-98')
1176                                 WHERE  inf.run_id = p_run_id
1177                                 AND    inf.task_id = p_task_id_tbl(i)
1178                                 AND    inf.resource_list_member_id = p_rlm_id_tbl(i)
1179                                 AND    Nvl(inf.txn_currency_code, '-11') = Nvl(p_txn_curr_tbl(i), '-11')
1180                                 AND    Nvl(p_request_id, -99) = Nvl(inf.request_id, -99)
1181                                 AND    ROWNUM=1;
1182 
1183                                 IF l_debug_mode = 'Y' THEN
1184                                      pa_debug.g_err_stage := 'SQL%COUNT' || SQL%ROWCOUNT;
1185                                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1186                                END IF;
1187                   ELSE
1188                         IF l_debug_mode = 'Y' THEN
1189                            pa_debug.g_err_stage := 'Information mismatch to process: non periodic';
1190                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1191                         END IF;
1192                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1193                   END IF;
1194                END IF;
1195 
1196            ELSE -- lenght of error code table is 0 when context is not passed
1197                IF l_debug_mode = 'Y' THEN
1198                    pa_debug.g_err_stage := 'No error code passed, returning';
1199                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1200                END IF;
1201                IF l_debug_mode = 'Y' THEN
1202                    pa_debug.reset_curr_function;
1203                END IF;
1204                RETURN;
1205            END IF;
1206        END IF;  -- p_context
1207 
1208        -- placing a commit here to retain all the error codes stamped.
1209 --       COMMIT;
1210 
1211        IF l_debug_mode = 'Y' THEN
1212              pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.process_errors';
1213              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1214        END IF;
1215        IF l_debug_mode = 'Y' THEN
1216              pa_debug.reset_curr_function;
1217        END IF;
1218 
1219   EXCEPTION
1220        WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1221            l_msg_count := FND_MSG_PUB.count_msg;
1222 
1223            IF l_msg_count = 1 and x_msg_data IS NULL THEN
1224                  PA_INTERFACE_UTILS_PUB.get_messages
1225                    (p_encoded        => FND_API.G_TRUE
1226                    ,p_msg_index      => 1
1227                    ,p_msg_count      => l_msg_count
1228                    ,p_msg_data       => l_msg_data
1229                    ,p_data           => l_data
1230                    ,p_msg_index_out  => l_msg_index_out);
1231                 x_msg_data := l_data;
1232                 x_msg_count := l_msg_count;
1233            ELSE
1234                 x_msg_count := l_msg_count;
1235            END IF;
1236            x_return_status := FND_API.G_RET_STS_ERROR;
1237 
1238            IF l_debug_mode = 'Y' THEN
1239                pa_debug.reset_curr_function;
1240            END IF;
1241            RETURN;
1242 
1243        WHEN OTHERS THEN
1244            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1245            x_msg_count     := 1;
1246            x_msg_data      := SQLERRM;
1247 
1248            FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
1249                                    ,p_procedure_name  => 'process_errors');
1250            IF l_debug_mode = 'Y' THEN
1251                 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1252                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1253            END IF;
1254 
1255            IF l_debug_mode = 'Y' THEN
1256               pa_debug.reset_curr_function;
1257            END IF;
1258            RAISE;
1259   END process_errors;
1260 
1261 
1262   /* Bug 4431269: Added the following private api to read the global table of
1263    * rec type returned from calculate api and then to call process_errors api
1264    * to report the errors in interface table.
1265    */
1266   PROCEDURE read_global_var_to_report_err
1267       (    p_run_id                   IN         pa_fp_webadi_upload_inf.run_id%TYPE,
1268            x_return_status            OUT        NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1269            x_msg_count                OUT        NOCOPY NUMBER, --File.Sql.39 bug 4440895
1270            x_msg_data                 OUT        NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1271       )
1272 
1273   IS
1274      l_return_status                      VARCHAR2(1);
1275      l_msg_data                           VARCHAR2(2000);
1276      l_msg_count                          NUMBER;
1277 
1278      l_debug_mode                         VARCHAR2(1);
1279      l_module_name                        VARCHAR2(100) := 'pa_fp_webadi_pkg.read_global_var_to_report_err';
1280      l_debug_level3                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1281      l_debug_level5                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1282      l_msg_index_out                      NUMBER;
1283      l_data                               VARCHAR2(2000);
1284 
1285      l_err_val_code_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1286      l_err_task_id_tbl                  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1287      l_err_rlm_id_tbl                   SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1288      l_err_txn_curr_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1289 
1290   BEGIN
1291        fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1292        x_msg_count := 0;
1293        x_return_status := FND_API.G_RET_STS_SUCCESS;
1294        IF l_debug_mode = 'Y' THEN
1295              PA_DEBUG.Set_Curr_Function( p_function   => l_module_name,
1296                                          p_debug_mode => l_debug_mode );
1297        END IF;
1298        IF l_debug_mode = 'Y' THEN
1299              pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.read_global_var_to_report_err';
1300              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1301        END IF;
1302 
1303        -- checking if there is some value in the global table
1304        IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1305            IF l_debug_mode = 'Y' THEN
1306                pa_debug.g_err_stage := 'There are some values in the global table';
1307                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1308            END IF;
1309 
1310            -- processing starts
1311            FOR i IN g_fp_webadi_rec_tbl.FIRST .. g_fp_webadi_rec_tbl.LAST LOOP
1312                l_err_val_code_tbl.EXTEND(1);
1313                l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := g_fp_webadi_rec_tbl(i).error_code;
1314                l_err_task_id_tbl.EXTEND(1);
1315                l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := g_fp_webadi_rec_tbl(i).task_id;
1316                l_err_rlm_id_tbl.EXTEND(1);
1317                l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := g_fp_webadi_rec_tbl(i).rlm_id;
1318                l_err_txn_curr_tbl.EXTEND(1);
1319                l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := g_fp_webadi_rec_tbl(i).txn_currency;
1320            END LOOP;
1321 
1322            pa_fp_webadi_pkg.process_errors
1323                   ( p_run_id          => p_run_id,
1324                     p_error_code_tbl  => l_err_val_code_tbl,
1325                     p_task_id_tbl     => l_err_task_id_tbl,
1326                     p_rlm_id_tbl      => l_err_rlm_id_tbl,
1327                     p_txn_curr_tbl    => l_err_txn_curr_tbl,
1328                     x_return_status   => l_return_status,
1329                     x_msg_data        => l_msg_data,
1330                     x_msg_count       => l_msg_count);
1331                   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1332                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1333                   END IF;
1334 
1335            -- clearing the table of rec type
1336            IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1337                g_fp_webadi_rec_tbl.DELETE;
1338            END IF;
1339        ELSE
1340            IF l_debug_mode = 'Y' THEN
1341                pa_debug.g_err_stage := 'There is no value stored in the global table, returning';
1342                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1343            END IF;
1344            RAISE PA_FP_CONSTANTS_PKG.Just_Ret_Exc;
1345        END IF;
1346        IF l_debug_mode = 'Y' THEN
1347              pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.read_global_var_to_report_err';
1348              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1349        END IF;
1350        IF l_debug_mode = 'Y' THEN
1351              pa_debug.reset_curr_function;
1352        END IF;
1353   EXCEPTION
1354        WHEN PA_FP_CONSTANTS_PKG.Just_Ret_Exc THEN
1355             IF l_debug_mode = 'Y' THEN
1356                 pa_debug.reset_curr_function;
1357             END IF;
1358             RETURN;
1359        WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1360 
1361            -- clearing the table of rec type
1362            IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1363                g_fp_webadi_rec_tbl.DELETE;
1364            END IF;
1365 
1366            l_msg_count := FND_MSG_PUB.count_msg;
1367 
1368            IF l_msg_count = 1 and x_msg_data IS NULL THEN
1369                  PA_INTERFACE_UTILS_PUB.get_messages
1370                    (p_encoded        => FND_API.G_TRUE
1371                    ,p_msg_index      => 1
1372                    ,p_msg_count      => l_msg_count
1373                    ,p_msg_data       => l_msg_data
1374                    ,p_data           => l_data
1375                    ,p_msg_index_out  => l_msg_index_out);
1376                 x_msg_data := l_data;
1377                 x_msg_count := l_msg_count;
1378            ELSE
1379                 x_msg_count := l_msg_count;
1380            END IF;
1381            x_return_status := FND_API.G_RET_STS_ERROR;
1382 
1383            IF l_debug_mode = 'Y' THEN
1384                pa_debug.reset_curr_function;
1385            END IF;
1386            RETURN;
1387 
1388        WHEN OTHERS THEN
1389            -- clearing the table of rec type
1390            IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1391                g_fp_webadi_rec_tbl.DELETE;
1392            END IF;
1393 
1394            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1395            x_msg_count     := 1;
1396            x_msg_data      := SQLERRM;
1397 
1398            FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
1399                                    ,p_procedure_name  => 'read_global_var_to_report_err');
1400            IF l_debug_mode = 'Y' THEN
1401                 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1402                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1403            END IF;
1404 
1405            IF l_debug_mode = 'Y' THEN
1406               pa_debug.reset_curr_function;
1407            END IF;
1408            RAISE;
1409   END read_global_var_to_report_err;
1410 
1411   -- bug 4428112: introduced this private api to stamp the valid txn curr codes
1412   -- in the respective lines in the table of records of the interface table,
1413   -- for a non MC enabled version
1414   -- if the txn curr code was not populated earlier by the user, this is required
1415   -- as the cursor on the interface table would be opened again in prepare_pbl_input
1416   -- to prepare the input tables to process_budget_lines.
1417 
1418   PROCEDURE check_and_update_txn_curr_code
1419                (p_budget_line_tbl   IN         PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE,
1420                 px_inf_cur_rec_tbl  IN   OUT   NOCOPY inf_cur_tbl_typ, --File.Sql.39 bug 4440895
1421                 x_return_status     OUT        NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1422                 x_msg_count         OUT        NOCOPY NUMBER,   --File.Sql.39 bug 4440895
1423                 x_msg_data          OUT        NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
1424 
1425   IS
1426        l_return_status                      VARCHAR2(1);
1427        l_msg_data                           VARCHAR2(2000);
1428        l_msg_count                          NUMBER;
1429 
1430        l_debug_mode                         VARCHAR2(1);
1431        l_module_name                        VARCHAR2(100) := 'PAFPWAPB.check_and_update_txn_curr_code';
1432        l_debug_level3                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1433        l_debug_level5                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1434        l_msg_index_out                      NUMBER;
1435        l_data                               VARCHAR2(2000);
1436 
1437        l_task_id_tbl                        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1438        l_rlm_id_tbl                         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1439 
1440   BEGIN
1441        fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1442        x_msg_count := 0;
1443        x_return_status := FND_API.G_RET_STS_SUCCESS;
1444        IF l_debug_mode = 'Y' THEN
1445              PA_DEBUG.Set_Curr_Function( p_function   => l_module_name,
1446                                          p_debug_mode => l_debug_mode );
1447        END IF;
1448        IF l_debug_mode = 'Y' THEN
1449              pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.check_and_update_txn_curr_code';
1450              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1451        END IF;
1452 
1453        -- validating input params.
1454        IF p_budget_line_tbl.COUNT < 1 THEN
1455             IF l_debug_mode = 'Y' THEN
1456                 pa_debug.g_err_stage:=' Nothing to be updated, returning';
1457                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1458            END IF;
1459            RAISE PA_FP_CONSTANTS_PKG.Just_Ret_Exc;
1460        ELSE
1461            IF l_debug_mode = 'Y' THEN
1462                 pa_debug.g_err_stage:=' Values passed, checking for null txn curr recs.';
1463                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1464            END IF;
1465 
1466            FOR i IN p_budget_line_tbl.FIRST .. p_budget_line_tbl.LAST LOOP
1467                 -- looping through both the table types
1468                 FOR j IN px_inf_cur_rec_tbl.FIRST .. px_inf_cur_rec_tbl.LAST LOOP
1469                     IF p_budget_line_tbl(i).pa_task_id = px_inf_cur_rec_tbl(j).task_id AND
1470                        p_budget_line_tbl(i).resource_list_member_id = px_inf_cur_rec_tbl(j).resource_list_member_id AND
1471                        px_inf_cur_rec_tbl(j).txn_currency_code IS NULL THEN
1472                             px_inf_cur_rec_tbl(j).txn_currency_code := p_budget_line_tbl(i).txn_currency_code;
1473                     END IF;
1474                 END LOOP;
1475            END LOOP;
1476        END IF;
1477 
1478        IF l_debug_mode = 'Y' THEN
1479              pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.check_and_update_txn_curr_code';
1480              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1481        END IF;
1482        IF l_debug_mode = 'Y' THEN
1483              pa_debug.reset_curr_function;
1484        END IF;
1485   EXCEPTION
1486        WHEN PA_FP_CONSTANTS_PKG.Just_Ret_Exc THEN
1487             IF l_debug_mode = 'Y' THEN
1488                 pa_debug.reset_curr_function;
1489             END IF;
1490             RETURN;
1491        WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1492            l_msg_count := FND_MSG_PUB.count_msg;
1493 
1494            IF l_msg_count = 1 and x_msg_data IS NULL THEN
1495                  PA_INTERFACE_UTILS_PUB.get_messages
1496                    (p_encoded        => FND_API.G_TRUE
1497                    ,p_msg_index      => 1
1498                    ,p_msg_count      => l_msg_count
1499                    ,p_msg_data       => l_msg_data
1500                    ,p_data           => l_data
1501                    ,p_msg_index_out  => l_msg_index_out);
1502                 x_msg_data := l_data;
1503                 x_msg_count := l_msg_count;
1504            ELSE
1505                 x_msg_count := l_msg_count;
1506            END IF;
1507            x_return_status := FND_API.G_RET_STS_ERROR;
1508 
1509            IF l_debug_mode = 'Y' THEN
1510                pa_debug.reset_curr_function;
1511            END IF;
1512            RETURN;
1513 
1514        WHEN OTHERS THEN
1515            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1516            x_msg_count     := 1;
1517            x_msg_data      := SQLERRM;
1518 
1519            FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
1520                                    ,p_procedure_name  => 'check_and_update_txn_curr_code');
1521            IF l_debug_mode = 'Y' THEN
1522                 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1523                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1524            END IF;
1525 
1526            IF l_debug_mode = 'Y' THEN
1527               pa_debug.reset_curr_function;
1528            END IF;
1529            RAISE;
1530   END check_and_update_txn_curr_code;
1531 
1532   -- bug 4479036: a private function to check if the conversion
1533   -- attribute columns are displayed in the layout used, so that
1534   -- these attribute can be defaulted to null values or version
1535   -- level attributes accordingly.
1536 
1537   FUNCTION conv_attributes_displayed
1538             (p_run_id       IN       pa_fp_webadi_upload_inf.run_id%TYPE)
1539   RETURN VARCHAR2
1540   IS
1541 
1542     l_debug_mode                         VARCHAR2(1);
1543     l_module_name                        VARCHAR2(100) := 'PAFPWAPB.check_and_update_txn_curr_code';
1544     l_debug_level3                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1545     l_debug_level5                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1546 
1547     conv_attrb_displayed                 VARCHAR2(1);
1548 
1549     l_projfunc_rate_type                 pa_fp_webadi_upload_inf.projfunc_rate_type%TYPE;
1550     l_projfunc_rate_date_type            pa_fp_webadi_upload_inf.projfunc_rate_date_type%TYPE;
1551     l_projfunc_rate_date                 pa_fp_webadi_upload_inf.projfunc_rate_date%TYPE;
1552     l_project_rate_type                  pa_fp_webadi_upload_inf.project_rate_type%TYPE;
1553     l_project_rate_date_type             pa_fp_webadi_upload_inf.project_rate_date_type%TYPE;
1554     l_project_rate_date                  pa_fp_webadi_upload_inf.project_rate_date%TYPE;
1555 
1556 
1557   BEGIN
1558     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1559 
1560     IF l_debug_mode = 'Y' THEN
1561           PA_DEBUG.Set_Curr_Function( p_function   => l_module_name,
1562                                       p_debug_mode => l_debug_mode );
1563     END IF;
1564     IF l_debug_mode = 'Y' THEN
1565           pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.conv_attributes_displayed';
1566           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1567     END IF;
1568 
1569     conv_attrb_displayed := 'N';
1570 
1571     IF p_run_id IS NULL THEN
1572         IF l_debug_mode = 'Y' THEN
1573            pa_debug.g_err_stage := 'p_run_id is passed as null';
1574            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1575         END IF;
1576         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1577     END IF;
1578 
1579     IF l_debug_mode = 'Y' THEN
1580           pa_debug.g_err_stage := 'Checking for the values in conv attrb cols';
1581           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1582     END IF;
1583 
1584     BEGIN
1585         SELECT projfunc_rate_type,
1586                projfunc_rate_date_type,
1587                projfunc_rate_date,
1588                project_rate_type,
1589                project_rate_date_type,
1590                project_rate_date
1591         INTO   l_projfunc_rate_type,
1592                l_projfunc_rate_date_type,
1593                l_projfunc_rate_date,
1594                l_project_rate_type,
1595                l_project_rate_date_type,
1596                l_project_rate_date
1597         FROM   pa_fp_webadi_upload_inf
1598         WHERE  run_id = p_run_id
1599         AND    ROWNUM = 1;
1600 
1601         IF l_projfunc_rate_type <> g_hidden_col_char OR
1602            l_projfunc_rate_date_type <> g_hidden_col_char OR
1603            l_projfunc_rate_date <> g_hidden_col_date OR
1604            l_project_rate_type <> g_hidden_col_char OR
1605            l_project_rate_date_type <> g_hidden_col_char OR
1606            l_project_rate_date <> g_hidden_col_date THEN
1607             IF l_debug_mode = 'Y' THEN
1608                   pa_debug.g_err_stage := 'Conv attrb cols displayed in layout';
1609                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1610             END IF;
1611             conv_attrb_displayed := 'Y';
1612         END IF;
1613     EXCEPTION
1614         WHEN NO_DATA_FOUND THEN
1615             IF l_debug_mode = 'Y' THEN
1616                   pa_debug.g_err_stage := 'No rows in the interface table';
1617                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1618             END IF;
1619             conv_attrb_displayed := 'N';
1620     END;
1621 
1622 
1623     IF l_debug_mode = 'Y' THEN
1624           pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.conv_attributes_displayed';
1625           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1626           pa_debug.g_err_stage := 'conv_attrb_displayed: ' || conv_attrb_displayed;
1627           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1628     END IF;
1629     IF l_debug_mode = 'Y' THEN
1630           pa_debug.reset_curr_function;
1631     END IF;
1632 
1633     -- returning
1634     RETURN conv_attrb_displayed;
1635 
1636   EXCEPTION
1637     WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1638            IF l_debug_mode = 'Y' THEN
1639                 pa_debug.g_err_stage:='Invalid_Arg_Exc raised in conv_attributes_displayed';
1640                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1641            END IF;
1642            IF l_debug_mode = 'Y' THEN
1643                pa_debug.reset_curr_function;
1644            END IF;
1645            RAISE;
1646 
1647        WHEN OTHERS THEN
1648            FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
1649                                    ,p_procedure_name  => 'conv_attributes_displayed');
1650            IF l_debug_mode = 'Y' THEN
1651                 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1652                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1653            END IF;
1654 
1655            IF l_debug_mode = 'Y' THEN
1656               pa_debug.reset_curr_function;
1657            END IF;
1658            RAISE;
1659   END conv_attributes_displayed;
1660 
1661   PROCEDURE prepare_val_input
1662       ( p_run_id                   IN         pa_fp_webadi_upload_inf.run_id%TYPE,
1663         p_request_id               IN         pa_budget_versions.request_id%TYPE    DEFAULT  NULL,
1664         p_version_info_rec         IN         pa_fp_gen_amount_utils.fp_cols,
1665         p_prd_start_date_tbl       IN         SYSTEM.PA_DATE_TBL_TYPE,
1666         p_prd_end_date_tbl         IN         SYSTEM.PA_DATE_TBL_TYPE,
1667         p_org_id                   IN         pa_projects_all.org_id%TYPE,
1668         x_budget_lines             OUT        NOCOPY PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE, --File.Sql.39 bug 4440895
1669         x_etc_quantity_tbl         OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1670         x_etc_raw_cost_tbl         OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1671         x_etc_burdened_cost_tbl    OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1672         x_etc_revenue_tbl          OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1673         x_raw_cost_rate_tbl        OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1674         x_burd_cost_rate_tbl       OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1675         x_bill_rate_tbl            OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1676         x_planning_start_date_tbl  OUT        NOCOPY SYSTEM.PA_DATE_TBL_TYPE, --File.Sql.39 bug 4440895
1677         x_planning_end_date_tbl    OUT        NOCOPY SYSTEM.PA_DATE_TBL_TYPE, --File.Sql.39 bug 4440895
1678         x_uom_tbl                  OUT        NOCOPY SYSTEM.PA_VARCHAR2_80_TBL_TYPE, --File.Sql.39 bug 4440895
1679         x_mfc_cost_type_tbl        OUT        NOCOPY SYSTEM.PA_VARCHAR2_15_TBL_TYPE, --File.Sql.39 bug 4440895
1680         x_spread_curve_name_tbl    OUT        NOCOPY SYSTEM.PA_VARCHAR2_240_TBL_TYPE, --File.Sql.39 bug 4440895
1681         x_sp_fixed_date_tbl        OUT        NOCOPY SYSTEM.PA_DATE_TBL_TYPE, --File.Sql.39 bug 4440895
1682         x_etc_method_name_tbl      OUT        NOCOPY SYSTEM.PA_VARCHAR2_80_TBL_TYPE, --File.Sql.39 bug 4440895
1683         x_spread_curve_id_tbl      OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1684         x_delete_flag_tbl          OUT        NOCOPY SYSTEM.PA_VARCHAR2_1_TBL_TYPE, --File.Sql.39 bug 4440895
1685         x_ra_id_tbl                OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1686         x_res_class_code_tbl       OUT        NOCOPY SYSTEM.PA_VARCHAR2_30_TBL_TYPE, --File.Sql.39 bug 4440895
1687         x_rate_based_flag_tbl      OUT        NOCOPY SYSTEM.PA_VARCHAR2_1_TBL_TYPE, --File.Sql.39 bug 4440895
1688         x_rbs_elem_id_tbl          OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1689         x_amt_type_tbl             OUT        NOCOPY SYSTEM.PA_VARCHAR2_30_TBL_TYPE, --File.Sql.39 bug 4440895
1690         x_first_pd_bf_pm_en_dt     OUT        NOCOPY DATE, --File.Sql.39 bug 4440895
1691         x_last_pd_af_pm_st_dt      OUT        NOCOPY DATE, --File.Sql.39 bug 4440895
1692         x_inf_tbl_rec_tbl          OUT        NOCOPY inf_cur_tbl_typ, --File.Sql.39 bug 4440895
1693         x_num_of_rec_processed     OUT        NOCOPY NUMBER, --File.Sql.39 bug 4440895
1694         x_return_status            OUT        NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1695         x_msg_count                OUT        NOCOPY NUMBER, --File.Sql.39 bug 4440895
1696         x_msg_data                 OUT        NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
1697   IS
1698 
1699       l_return_status                     VARCHAR2(30);
1700       l_msg_data                          VARCHAR2(2000);
1701       l_msg_count                         NUMBER;
1702 
1703       l_debug_mode                        VARCHAR2(1);
1704       l_module_name                       VARCHAR2(100) := 'pa_fp_webadi_pkg.prepare_val_input';
1705       l_debug_level3                      CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1706       l_debug_level5                      CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1707       l_msg_index_out                     NUMBER;
1708       l_data                              VARCHAR2(2000);
1709 
1710       -- variable to held the start_date and end_date of individual periods
1711       l_prd_start_date_tbl                SYSTEM.pa_date_tbl_type  := SYSTEM.pa_date_tbl_type();
1712       l_prd_end_date_tbl                  SYSTEM.pa_date_tbl_type  := SYSTEM.pa_date_tbl_type();
1713 
1714       l_inf_tbl_data_prev_rec             inf_tbl_data_csr%ROWTYPE;
1715       l_inf_tbl_data_curr_rec             inf_tbl_data_csr%ROWTYPE;
1716       l_inf_tbl_data_next_rec             inf_tbl_data_csr%ROWTYPE;
1717       -- record type used to skip the duplicate records
1718       l_inf_tbl_data_skip_rec             inf_tbl_data_csr%ROWTYPE;
1719       l_loop_exit_flag                    VARCHAR2(1) := 'N';
1720 
1721       i                                   INTEGER := 0;
1722       l_uncategorized_flag                pa_resource_lists_all_bg.uncategorized_flag%TYPE;
1723       l_prc_error_code                    VARCHAR2(30);
1724 
1725       l_unct_rlm_id                      pa_resource_list_members.resource_list_member_id%TYPE;
1726       l_etc_start_date                   pa_budget_versions.etc_start_date%TYPE;
1727 
1728       l_plan_trans_attr_copied_flag      VARCHAR2(1);
1729       l_cost_conv_attr_copied_flag       VARCHAR2(1);
1730       l_rev_conv_attr_copied_flag        VARCHAR2(1);
1731       l_plan_start_date                  DATE;
1732       l_plan_end_date                    DATE;
1733       l_prcd_pd_start_date               DATE;
1734       l_prcd_pd_end_date                 DATE;
1735       l_original_prd_count               INTEGER;
1736       l_int_new_prd_count                INTEGER;
1737       l_scd_pd_start_date                DATE;
1738       l_scd_pd_end_date                  DATE;
1739       l_first_pd_bf_pm_st_dt             DATE;   /* variable to hold the start date of the first period that falls before first period in the period mask */
1740       l_first_pd_bf_pm_en_dt             DATE;   /* variable to hold the end date of the first period that falls before first period in the period mask */
1741       l_last_pd_af_pm_st_dt              DATE;   /* variable to hold the start date of the last period that falls before last period in the period mask */
1742       l_last_pd_af_pm_en_dt              DATE;   /* variable to hold the end date of the last period that falls before last period in the period mask */
1743       is_forecast_version                VARCHAR2(1) := 'N';
1744       is_periodic_setup                  VARCHAR2(1) := 'N';
1745       l_bdgt_line_start_date             DATE;
1746       l_bdgt_line_end_date               DATE;
1747       l_min_bdgt_line_start_date         DATE;
1748       l_max_bdgt_line_end_date           DATE;
1749       l_sysdate                          CONSTANT DATE:= SYSDATE;
1750 
1751       l_tmp_sum_amt                      NUMBER;
1752       l_raw_cost                         NUMBER;
1753       l_etc_raw_cost                     NUMBER;
1754       l_burdened_cost                    NUMBER;
1755       l_etc_burdened_cost                NUMBER;
1756       l_revenue                          NUMBER;
1757       l_etc_revenue                      NUMBER;
1758       l_quantity                         NUMBER;
1759       l_etc_quantity                     NUMBER;
1760 
1761       l_projfunc_cost_rate               pa_budget_lines.projfunc_cost_exchange_rate%TYPE;
1762       l_projfunc_rev_rate                pa_budget_lines.projfunc_rev_exchange_rate%TYPE;
1763       l_project_cost_rate                pa_budget_lines.project_cost_exchange_rate%TYPE;
1764       l_project_rev_rate                 pa_budget_lines.project_rev_exchange_rate%TYPE;
1765 
1766 
1767       -- variable to keep track of number of records inserted to the budget line record type
1768       bl_count                           INTEGER := 1;
1769 
1770       -- variables to be used to pass data to validate_budget_line
1771       l_budget_line_in_out_tbl           PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE;
1772       l_budget_line_out_tbl              PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE;
1773 
1774       l_amount_set_id                    pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
1775       l_allow_qty_flag                   VARCHAR2(1);
1776 
1777       l_bdgt_ln_tbl_description          VARCHAR2(255);
1778       l_pfunc_cost_rate_type_mning          pa_conversion_types_v.user_conversion_type%TYPE;
1779       l_pfunc_cost_rate_dt_typ_mning        pa_lookups.meaning%TYPE;
1780       l_pfunc_rev_rate_type_mning           pa_conversion_types_v.user_conversion_type%TYPE;
1781       l_pfunc_rev_rate_dt_typ_mning         pa_lookups.meaning%TYPE;
1782       l_prj_cost_rate_type_mning            pa_conversion_types_v.user_conversion_type%TYPE;
1783       l_prj_cost_rate_dt_typ_mning          pa_lookups.meaning%TYPE;
1784       l_prj_rev_rate_type_mning             pa_conversion_types_v.user_conversion_type%TYPE;
1785       l_prj_rev_rate_date_type_mning        pa_lookups.meaning%TYPE;
1786 
1787       d_projfunc_cost_rate_type          pa_proj_fp_options.projfunc_cost_rate_type%TYPE     ;
1788       d_projfunc_cost_rate_date_type     pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE;
1789       d_projfunc_cost_rate_date          pa_proj_fp_options.projfunc_cost_rate_date%TYPE     ;
1790       d_projfunc_rev_rate_type           pa_proj_fp_options.projfunc_rev_rate_type%TYPE      ;
1791       d_projfunc_rev_rate_date_type      pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE ;
1792       d_projfunc_rev_rate_date           pa_proj_fp_options.projfunc_rev_rate_date%TYPE      ;
1793       d_project_cost_rate_type           pa_proj_fp_options.project_cost_rate_type%TYPE      ;
1794       d_project_cost_rate_date_type      pa_proj_fp_options.project_cost_rate_date_type%TYPE ;
1795       d_project_cost_rate_date           pa_proj_fp_options.project_cost_rate_date%TYPE      ;
1796       d_project_rev_rate_type            pa_proj_fp_options.project_rev_rate_type%TYPE       ;
1797       d_project_rev_rate_date_type       pa_proj_fp_options.project_rev_rate_date_type%TYPE  ;
1798       d_project_rev_rate_date            pa_proj_fp_options.project_rev_rate_date%TYPE       ;
1799       d_projfunc_cost_exc_rate_tab       SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1800       d_projfunc_rev_exc_rate_tab        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1801       d_project_cost_exc_rate_tab        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1802       d_project_rev_exc_rate_tab         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1803       d_txn_curr_tab                     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1804 
1805       l_projfunc_cost_rate_type          pa_proj_fp_options.projfunc_cost_rate_type%TYPE     ;
1806       l_projfunc_cost_rate_date_type     pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE;
1807       l_projfunc_cost_rate_date          pa_proj_fp_options.projfunc_cost_rate_date%TYPE     ;
1808       l_projfunc_cost_exchange_rate      pa_budget_lines.projfunc_cost_exchange_rate%TYPE    ;
1809       l_projfunc_rev_rate_type           pa_proj_fp_options.projfunc_rev_rate_type%TYPE      ;
1810       l_projfunc_rev_rate_date_type      pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE ;
1811       l_projfunc_rev_rate_date           pa_proj_fp_options.projfunc_rev_rate_date%TYPE      ;
1812       l_projfunc_rev_exchange_rate       pa_budget_lines.projfunc_rev_exchange_rate%TYPE     ;
1813       l_project_cost_rate_type           pa_proj_fp_options.project_cost_rate_type%TYPE      ;
1814       l_project_cost_rate_date_type      pa_proj_fp_options.project_cost_rate_date_type%TYPE ;
1815       l_project_cost_rate_date           pa_proj_fp_options.project_cost_rate_date%TYPE      ;
1816       l_project_cost_exchange_rate       pa_budget_lines.project_cost_exchange_rate%TYPE     ;
1817       l_project_rev_rate_type            pa_proj_fp_options.project_rev_rate_type%TYPE       ;
1818       l_project_rev_rate_date_type       pa_proj_fp_options.project_rev_rate_date_type%TYPE  ;
1819       l_project_rev_rate_date            pa_proj_fp_options.project_rev_rate_date%TYPE       ;
1820       l_project_rev_exchange_rate        pa_budget_lines.project_rev_exchange_rate%TYPE      ;
1821       l_change_reason_code               pa_budget_lines.change_reason_code%TYPE             ;
1822 
1823       l_rc_rate                          NUMBER;
1824       l_bc_rate                          NUMBER;
1825       l_bill_rate                        NUMBER;
1826 
1827       l_etc_quantity_tbl                 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1828       l_etc_raw_cost_tbl                 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1829       l_etc_burdened_cost_tbl            SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1830       l_etc_revenue_tbl                  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1831       l_rc_rate_tbl                      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1832       l_bc_rate_tbl                      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1833       l_bill_rate_tbl                    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1834       l_uom_tbl                          SYSTEM.pa_varchar2_80_tbl_type := SYSTEM.pa_varchar2_80_tbl_type();
1835       l_plan_start_date_tbl              SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1836       l_delete_flag                      VARCHAR2(1);
1837       l_plan_end_date_tbl                SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1838       l_delete_flag_tbl                  SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
1839       l_spread_curve_name_tbl            SYSTEM.pa_varchar2_240_tbl_type := SYSTEM.pa_varchar2_240_tbl_type();
1840       l_etc_method_code_tbl              SYSTEM.pa_varchar2_80_tbl_type := SYSTEM.pa_varchar2_80_tbl_type();
1841       l_mfc_cost_type_name_tbl           SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
1842       l_sp_fixed_date_tbl                SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1843       l_spread_curve_id_tbl              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1844 
1845       -- variables to be used to call process_errors
1846       l_err_val_code_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1847       l_err_task_id_tbl                  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1848       l_err_rlm_id_tbl                   SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1849       l_err_txn_curr_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1850       l_err_amt_type_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1851 
1852       l_fixed_spread_curve_id            pa_spread_curves_b.spread_curve_id%TYPE;
1853       l_fixed_spread_curve_name          pa_spread_curves_tl.name%TYPE;
1854       l_spread_curve_id                  pa_spread_curves_b.spread_curve_id%TYPE;
1855       l_sp_fixed_date                    pa_resource_assignments.sp_fixed_date%TYPE;
1856       l_not_null_period_cnt              NUMBER;
1857       l_fix_sc_amt_pd_curr_index         NUMBER; /* to get the period index for which amount is present if the spread curve */
1858       l_fix_sc_amt_pd_next_index         NUMBER; /* associated with the resource is fixed date type */
1859 
1860       /* Bug 5144013: The following variable declarations are made to refer the new entity
1861          pa_resource_asgn_curr columns. This is done as part of merging MRUP3 changes done
1862          in 11i into R12.
1863       */
1864       l_ratxn_total_quantity             pa_resource_asgn_curr.total_quantity%TYPE;
1865       l_ratxn_total_raw_cost             pa_resource_asgn_curr.total_txn_raw_cost%TYPE;
1866       l_ratxn_total_burdened_cost        pa_resource_asgn_curr.total_txn_burdened_cost%TYPE;
1867       l_ratxn_total_revenue              pa_resource_asgn_curr.total_txn_revenue%TYPE;
1868       l_ratxn_raw_cost_over_rate         pa_resource_asgn_curr.txn_raw_cost_rate_override%TYPE;
1869       l_ratxn_burden_cost_over_rate      pa_resource_asgn_curr.txn_burden_cost_rate_override%TYPE;
1870       l_ratxn_bill_over_rate             pa_resource_asgn_curr.txn_bill_rate_override%TYPE;
1871       l_ratxn_etc_quantity               pa_resource_asgn_curr.total_quantity%TYPE;
1872       l_ratxn_etc_raw_cost               pa_resource_asgn_curr.total_txn_raw_cost%TYPE;
1873       l_ratxn_etc_burdened_cost          pa_resource_asgn_curr.total_txn_burdened_cost%TYPE;
1874       l_ratxn_etc_revenue                pa_resource_asgn_curr.total_txn_revenue%TYPE;
1875       l_ra_rate_based_flag               pa_resource_assignments.rate_based_flag%TYPE; -- Bug 5068203.
1876 
1877 
1878       -- cursor to get the start/end date of the first period before the first period displayed in the period mask
1879       CURSOR l_first_pd_st_en_dt_csr (c_org_id   pa_projects_all.org_id%TYPE,
1880                                       c_first_prd_st_dt   DATE,
1881                                       c_time_phased_code  pa_proj_fp_options.cost_time_phased_code%TYPE)
1882       IS
1883       SELECT gl.start_date start_date,
1884              gl.end_date end_date,
1885              gl.period_name period_name
1886       FROM   gl_periods gl,
1887              pa_implementations_all pim,
1888              gl_sets_of_books gsb
1889       WHERE  gl.end_date < c_first_prd_st_dt
1890       AND    gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
1891       AND    gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
1892       AND    gl.adjustment_period_flag='N'
1893       AND    pim.org_id = c_org_id
1894       AND    gsb.set_of_books_id = pim.set_of_books_id
1895       ORDER BY gl.start_date DESC;
1896 
1897       l_first_pd_st_en_dt_rec        l_first_pd_st_en_dt_csr%ROWTYPE;
1898 
1899       -- cursor to get the start/end date of the last period before the last period displayed in the period mask
1900       CURSOR l_last_pd_st_en_dt_csr (c_org_id   pa_projects_all.org_id%TYPE,
1901                                      c_last_prd_en_dt   DATE,
1902                                      c_time_phased_code  pa_proj_fp_options.cost_time_phased_code%TYPE)
1903       IS
1904       SELECT gl.start_date start_date,
1905              gl.end_date end_date,
1906              gl.period_name period_name
1907       FROM   gl_periods gl,
1908              pa_implementations_all pim,
1909              gl_sets_of_books gsb
1910       WHERE  gl.end_date > c_last_prd_en_dt
1911       AND    gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
1912       AND    gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
1913       AND    gl.adjustment_period_flag='N'
1914       AND    pim.org_id = c_org_id
1915       AND    gsb.set_of_books_id = pim.set_of_books_id
1916       ORDER BY gl.start_date ;
1917 
1918       l_last_pd_st_en_dt_rec         l_last_pd_st_en_dt_csr%ROWTYPE;
1919 
1920       /* Bug 5144013: Made changes in the query of the cursor non_prd_lyt_null_val_cur to refer to the
1921          new entity pa_resource_asgn_curr. This is done as part of merging MRUP3 changes done in 11i
1922          into R12.
1923       */
1924       CURSOR non_prd_lyt_null_val_cur(c_budget_version_id IN pa_budget_versions.budget_version_id%TYPE,
1925                                       c_task_id IN pa_resource_assignments.task_id%TYPE,
1926                                       c_resource_list_member_id IN pa_resource_assignments.resource_list_member_id%TYPE,
1927                                       c_txn_currency_code IN pa_resource_asgn_curr.txn_currency_code%TYPE)
1928       IS
1929       SELECT rac.total_display_quantity,
1930              rac.total_txn_raw_cost,
1931              rac.total_txn_burdened_cost,
1932              rac.total_txn_revenue,
1933              rac.total_display_quantity-NVL(rac.total_init_quantity,0),
1934              rac.total_txn_raw_cost-NVL(rac.total_txn_init_raw_cost,0),
1935              rac.total_txn_burdened_cost-NVL(rac.total_txn_init_burdened_cost,0),
1936              rac.total_txn_revenue-NVL(rac.total_txn_init_revenue,0),
1937              rac.txn_raw_cost_rate_override,
1938              rac.txn_burden_cost_rate_override,
1939              rac.txn_bill_rate_override,
1940              pra.rate_based_flag
1941       FROM   pa_resource_asgn_curr rac,
1942              pa_resource_assignments pra
1943       WHERE rac.budget_version_id = c_budget_version_id
1944       AND   rac.budget_version_id = pra.budget_version_id
1945       AND   rac.resource_assignment_id = pra.resource_assignment_id
1946       AND   pra.task_id = c_task_id
1947       AND   pra.resource_list_member_id = c_resource_list_member_id
1948       AND   rac.txn_currency_code = c_txn_currency_code;
1949 
1950       TYPE l_cached_ra_id_info IS TABLE OF NUMBER INDEX BY VARCHAR2(32);
1951 
1952       l_cached_ra_id_tbl       l_cached_ra_id_info;
1953       l_cached_ra_index        VARCHAR2(32);
1954       l_ra_id                  pa_resource_assignments.resource_assignment_id%TYPE;
1955       l_start_ra_index         NUMBER :=1;
1956       l_end_ra_index           NUMBER :=1;
1957       l_sp_fix_prd_st_dt       DATE;
1958       l_sp_fix_prd_en_dt       DATE;
1959 
1960       l_res_class_code         pa_resource_assignments.resource_class_code%TYPE;
1961       l_rate_based_flag        pa_resource_assignments.rate_based_flag%TYPE;
1962       l_rbs_elem_id            pa_resource_assignments.rbs_element_id%TYPE;
1963 
1964       l_ra_id_tbl              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1965       l_res_class_code_tbl     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1966       l_rate_based_flag_tbl    SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
1967       l_rbs_elem_id_tbl        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1968 
1969       l_min_ra_plan_start_date DATE;
1970       l_max_ra_plan_end_date   DATE;
1971 
1972       l_amount_type_tbl        SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1973       l_lookup_type            pa_lookups.lookup_type%TYPE;
1974       l_amount                 NUMBER;
1975       --l_temp                   DATE;
1976 
1977      -- Added for the bug 4414062
1978       l_period_time_phased_code  VARCHAR(1);
1979       l_period_plan_start_date   DATE;
1980       l_period_plan_end_date     DATE;
1981       l_rl_control_flag          pa_resource_lists_all_bg.control_flag%TYPE;
1982       l_fin_struct_id            NUMBER; -- Bug 4929163.
1983 
1984       -- bug 4479036
1985       l_conv_attrb_displayed     VARCHAR(1);
1986 
1987       --Added thses date tables for bug#4488926.
1988       TYPE date_tbl_type IS TABLE OF DATE INDEX BY VARCHAR2(20);
1989       l_period_plan_start_date_tbl    date_tbl_type;
1990       l_period_plan_end_date_tbl      date_tbl_type;
1991 BEGIN
1992 
1993       fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1994       x_msg_count := 0;
1995       x_return_status := FND_API.G_RET_STS_SUCCESS;
1996 
1997       PA_DEBUG.Set_Curr_Function( p_function   => l_module_name,
1998                                   p_debug_mode => l_debug_mode );
1999 
2000       IF l_debug_mode = 'Y' THEN
2001           pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.prepare_val_input';
2002           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2003       END IF;
2004 
2005       --log1('----- Entering into prepare_val_input-------');
2006       -- deriving all the required version level info
2007       IF l_debug_mode = 'Y' THEN
2008           pa_debug.g_err_stage := 'validating input';
2009           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2010       END IF;
2011       l_fin_struct_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUCTURE_ID(p_version_info_rec.x_project_id);    /* Bug 4929163 */
2012       IF p_version_info_rec.x_project_id IS NULL THEN
2013            IF l_debug_mode = 'Y' THEN
2014                pa_debug.g_err_stage := 'project_id not passed';
2015                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2016            END IF;
2017            pa_utils.add_message
2018                 (p_app_short_name  => 'PA',
2019                  p_msg_name        => 'PA_FP_INV_PARAM_PASSED',
2020                  p_token1          => 'PROCEDURENAME',
2021                  p_value1          => l_module_name);
2022            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2023       END IF;
2024 
2025       -- checking is org_id is passed as null for periodic layouts
2026       IF (p_prd_start_date_tbl.COUNT > 0 OR
2027           p_prd_end_date_tbl.COUNT > 0 ) AND
2028          p_org_id IS NULL THEN
2029             IF l_debug_mode = 'Y' THEN
2030                pa_debug.g_err_stage := 'org_id not passed for periodic layouts';
2031                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2032            END IF;
2033            pa_utils.add_message
2034                 (p_app_short_name  => 'PA',
2035                  p_msg_name        => 'PA_FP_INV_PARAM_PASSED',
2036                  p_token1          => 'PROCEDURENAME',
2037                  p_value1          => l_module_name);
2038            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2039       END IF;
2040 
2041       -- initializing the out parameter for number of records processed
2042       x_num_of_rec_processed := 0;
2043 
2044       l_conv_attrb_displayed := 'N';
2045 
2046       -- updating the temp table with the task_id for the task name/ task number
2047       -- given in the excel after deriving the same. if not a valid task, leaving
2048       -- task_id column null
2049       IF l_debug_mode = 'Y' THEN
2050           pa_debug.g_err_stage := 'Updating task_id for the task name/number given';
2051           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2052       END IF;
2053 
2054       --log1('----- STAGE 1-------');
2055       BEGIN
2056             -- Bug 4464838: Perf Fix: Selecting the control_flag for the
2057             -- resource list and depending upon the value returned, executing
2058             -- one of the update statments to improve the performance by avoiding
2059             -- the select for control flag for each record and as well, removing
2060             -- the OR cluase from the where clause.
2061             SELECT  control_flag,
2062                     uncategorized_flag
2063             INTO    l_rl_control_flag,
2064                     l_uncategorized_flag
2065             FROM    pa_resource_lists_all_bg
2066             WHERE   resource_list_id = p_version_info_rec.x_resource_list_id;
2067 
2068             --log1('----- STAGE 3.2------- '||l_uncategorized_flag);
2069             IF l_uncategorized_flag = 'N' THEN
2070                  IF l_rl_control_flag = 'N' THEN
2071                       -- updating the rlm ids for categorized resource lists with control_fl as N
2072                      UPDATE  pa_fp_webadi_upload_inf inf
2073                      SET     inf.task_id = (SELECT  pt.task_id
2074                                             FROM    (SELECT  pt.name task_name,   /* Bug 4929163. Modified the select statement to refer to pa_proj_elements instead of pa_tasks*/
2075                                                              pt.element_number task_number,
2076                                                              pt.proj_element_id task_id
2077                                                      FROM    pa_proj_elements pt
2078                                                      WHERE   pt.project_id = p_version_info_rec.x_project_id
2079                                                      AND     object_type = 'PA_TASKS'
2080                                                      AND     parent_structure_id = l_fin_struct_id
2081                                                      UNION ALL
2082                                                      SELECT  p.long_name task_name,  /* Bug 5345336 */
2083                                                              p.segment1 task_number,
2084                                                              0 task_id
2085                                                      FROM    pa_projects_all p
2086                                                      WHERE   p.project_id = p_version_info_rec.x_project_id) pt
2087                                             WHERE    (inf.task_name IS NOT NULL
2088                                                       AND inf.task_number IS NULL
2089                                                       AND inf.task_name = pt.task_name) OR
2090                                                      (inf.task_name IS NULL
2091                                                       AND inf.task_number IS NOT NULL
2092                                                       AND inf.task_number = pt.task_number) OR
2093                                                      (inf.task_name IS NOT NULL
2094                                                       AND inf.task_number IS NOT NULL
2095                                                       AND inf.task_name = pt.task_name
2096                                                       AND inf.task_number = pt.task_number)),
2097 
2098                               inf.change_reason_code           = DECODE(inf.delete_flag,'Y',NULL,inf.change_reason_code),
2099                               inf.quantity                     = DECODE(inf.delete_flag,'Y',NULL,inf.quantity),
2100                               inf.raw_cost                     = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost),
2101                               inf.raw_cost_over_rate           = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost_over_rate),
2102                               inf.burdened_cost                = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost),
2103                               inf.burdened_cost_over_rate      = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost_over_rate),
2104                               inf.revenue                      = DECODE(inf.delete_flag,'Y',NULL,inf.revenue),
2105                               inf.bill_over_rate               = DECODE(inf.delete_flag,'Y',NULL,inf.bill_over_rate ),
2106                               inf.projfunc_cost_rate_type      = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_type),
2107                               inf.projfunc_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_date_type),
2108                               inf.projfunc_cost_exchange_rate  = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_exchange_rate ),
2109                               inf.projfunc_cost_rate_date      = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_cost_rate_date),
2110                               inf.project_cost_rate_type       = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_type),
2111                               inf.project_cost_rate_date_type  = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_date_type),
2112                               inf.project_cost_exchange_rate   = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_exchange_rate),
2113                               inf.project_cost_rate_date       = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_cost_rate_date),
2114                               inf.projfunc_rev_rate_type       = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_type      ),
2115                               inf.projfunc_rev_rate_date_type  = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_date_type ),
2116                               inf.projfunc_rev_exchange_rate   = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_exchange_rate  ),
2117                               inf.projfunc_rev_rate_date       = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rev_rate_date),
2118                               inf.project_rev_rate_type        = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_type       ),
2119                               inf.project_rev_rate_date_type   = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_date_type  ),
2120                               inf.project_rev_exchange_rate    = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_exchange_rate   ),
2121                               inf.project_rev_rate_date        = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rev_rate_date),
2122                               inf.projfunc_rate_type           = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_type          ),
2123                               inf.projfunc_rate_date_type      = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_date_type     ),
2124                               inf.projfunc_exchange_rate       = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_exchange_rate      ),
2125                               inf.projfunc_rate_date           = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rate_date),
2126                               inf.project_rate_type            = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_type           ),
2127                               inf.project_rate_date_type       = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_date_type      ),
2128                               inf.project_exchange_rate        = DECODE(inf.delete_flag,'Y',NULL,inf.project_exchange_rate       ),
2129                               inf.project_rate_date            = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rate_date),
2130                               inf.pd_prd                       = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.pd_prd),
2131                               inf.prd1                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd1  ),
2132                               inf.prd2                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd2  ),
2133                               inf.prd3                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd3  ),
2134                               inf.prd4                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd4  ),
2135                               inf.prd5                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd5  ),
2136                               inf.prd6                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd6  ),
2137                               inf.prd7                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd7  ),
2138                               inf.prd8                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd8  ),
2139                               inf.prd9                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd9  ),
2140                               inf.prd10                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd10 ),
2141                               inf.prd11                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd11 ),
2142                               inf.prd12                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd12 ),
2143                               inf.prd13                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd13 ),
2144                               inf.prd14                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd14 ),
2145                               inf.prd15                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd15 ),
2146                               inf.prd16                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd16 ),
2147                               inf.prd17                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd17 ),
2148                               inf.prd18                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd18 ),
2149                               inf.prd19                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd19 ),
2150                               inf.prd20                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd20 ),
2151                               inf.prd21                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd21 ),
2152                               inf.prd22                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd22 ),
2153                               inf.prd23                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd23 ),
2154                               inf.prd24                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd24 ),
2155                               inf.prd25                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd25 ),
2156                               inf.prd26                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd26 ),
2157                               inf.prd27                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd27 ),
2158                               inf.prd28                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd28 ),
2159                               inf.prd29                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd29 ),
2160                               inf.prd30                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd30 ),
2161                               inf.prd31                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd31 ),
2162                               inf.prd32                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd32 ),
2163                               inf.prd33                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd33 ),
2164                               inf.prd34                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd34 ),
2165                               inf.prd35                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd35 ),
2166                               inf.prd36                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd36 ),
2167                               inf.prd37                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd37 ),
2168                               inf.prd38                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd38 ),
2169                               inf.prd39                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd39 ),
2170                               inf.prd40                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd40 ),
2171                               inf.prd41                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd41 ),
2172                               inf.prd42                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd42 ),
2173                               inf.prd43                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd43 ),
2174                               inf.prd44                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd44 ),
2175                               inf.prd45                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd45 ),
2176                               inf.prd46                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd46 ),
2177                               inf.prd47                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd47 ),
2178                               inf.prd48                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd48 ),
2179                               inf.prd49                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd49 ),
2180                               inf.prd50                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd50 ),
2181                               inf.prd51                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd51 ),
2182                               inf.prd52                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd52 ),
2183                               inf.sd_prd                       = DECODE(inf.delete_flag,'Y',l_fnd_miss_num , inf.sd_prd),
2184                               inf.resource_list_member_id      = (SELECT rlm.resource_list_member_id
2185                                                                   FROM   pa_resource_list_members rlm
2186                                                                   WHERE  inf.resource_alias = rlm.alias
2187                                                                   AND    rlm.resource_list_id = p_version_info_rec.x_resource_list_id
2188                                                                   AND    rlm.object_type = 'PROJECT'
2189                                                                   AND    rlm.object_id = p_version_info_rec.x_project_id)
2190                      WHERE    inf.run_id= p_run_id
2191                      AND      Nvl(p_request_id, -99) = Nvl(inf.request_id, -99);
2192 
2193                  ELSE -- control_flag = Y
2194                       -- updating the rlm ids for categorized resource lists with control_fl as Y
2195                      UPDATE  pa_fp_webadi_upload_inf inf
2196                      SET     inf.task_id = (SELECT  pt.task_id
2197                                             FROM    (SELECT  pt.name task_name, /* Bug 4929163. Modified the select statement to refer to pa_proj_elements instead of pa_tasks*/
2198                                                              pt.element_number task_number,
2199                                                              pt.proj_element_id task_id
2200                                                      FROM    pa_proj_elements pt
2201                                                      WHERE   pt.project_id = p_version_info_rec.x_project_id
2202                                                      AND     object_type = 'PA_TASKS'
2203                                                      AND     parent_structure_id = l_fin_struct_id
2204                                                      UNION ALL
2205                                                      SELECT  p.long_name task_name,  /* Bug 5345336 */
2206                                                              p.segment1 task_number,
2207                                                              0 task_id
2208                                                      FROM    pa_projects_all p
2209                                                      WHERE   p.project_id = p_version_info_rec.x_project_id) pt
2210                                             WHERE    (inf.task_name IS NOT NULL
2211                                                       AND inf.task_number IS NULL
2212                                                       AND inf.task_name = pt.task_name) OR
2213                                                      (inf.task_name IS NULL
2214                                                       AND inf.task_number IS NOT NULL
2215                                                       AND inf.task_number = pt.task_number) OR
2216                                                      (inf.task_name IS NOT NULL
2217                                                       AND inf.task_number IS NOT NULL
2218                                                       AND inf.task_name = pt.task_name
2219                                                       AND inf.task_number = pt.task_number)),
2220 
2221                               inf.change_reason_code           = DECODE(inf.delete_flag,'Y',NULL,inf.change_reason_code),
2222                               inf.quantity                     = DECODE(inf.delete_flag,'Y',NULL,inf.quantity),
2223                               inf.raw_cost                     = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost),
2224                               inf.raw_cost_over_rate           = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost_over_rate),
2225                               inf.burdened_cost                = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost),
2226                               inf.burdened_cost_over_rate      = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost_over_rate),
2227                               inf.revenue                      = DECODE(inf.delete_flag,'Y',NULL,inf.revenue),
2228                               inf.bill_over_rate               = DECODE(inf.delete_flag,'Y',NULL,inf.bill_over_rate ),
2229                               inf.projfunc_cost_rate_type      = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_type),
2230                               inf.projfunc_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_date_type),
2231                               inf.projfunc_cost_exchange_rate  = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_exchange_rate ),
2232                               inf.projfunc_cost_rate_date      = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_cost_rate_date),
2233                               inf.project_cost_rate_type       = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_type),
2234                               inf.project_cost_rate_date_type  = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_date_type),
2235                               inf.project_cost_exchange_rate   = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_exchange_rate),
2236                               inf.project_cost_rate_date       = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_cost_rate_date),
2237                               inf.projfunc_rev_rate_type       = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_type      ),
2238                               inf.projfunc_rev_rate_date_type  = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_date_type ),
2239                               inf.projfunc_rev_exchange_rate   = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_exchange_rate  ),
2240                               inf.projfunc_rev_rate_date       = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rev_rate_date),
2241                               inf.project_rev_rate_type        = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_type       ),
2242                               inf.project_rev_rate_date_type   = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_date_type  ),
2243                               inf.project_rev_exchange_rate    = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_exchange_rate   ),
2244                               inf.project_rev_rate_date        = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rev_rate_date),
2245                               inf.projfunc_rate_type           = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_type          ),
2246                               inf.projfunc_rate_date_type      = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_date_type     ),
2247                               inf.projfunc_exchange_rate       = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_exchange_rate      ),
2248                               inf.projfunc_rate_date           = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rate_date),
2249                               inf.project_rate_type            = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_type           ),
2250                               inf.project_rate_date_type       = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_date_type      ),
2251                               inf.project_exchange_rate        = DECODE(inf.delete_flag,'Y',NULL,inf.project_exchange_rate       ),
2252                               inf.project_rate_date            = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rate_date),
2253                               inf.pd_prd                       = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.pd_prd),
2254                               inf.prd1                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd1  ),
2255                               inf.prd2                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd2  ),
2256                               inf.prd3                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd3  ),
2257                               inf.prd4                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd4  ),
2258                               inf.prd5                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd5  ),
2259                               inf.prd6                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd6  ),
2260                               inf.prd7                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd7  ),
2261                               inf.prd8                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd8  ),
2262                               inf.prd9                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd9  ),
2263                               inf.prd10                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd10 ),
2264                               inf.prd11                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd11 ),
2265                               inf.prd12                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd12 ),
2266                               inf.prd13                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd13 ),
2267                               inf.prd14                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd14 ),
2268                               inf.prd15                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd15 ),
2269                               inf.prd16                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd16 ),
2270                               inf.prd17                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd17 ),
2271                               inf.prd18                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd18 ),
2272                               inf.prd19                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd19 ),
2273                               inf.prd20                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd20 ),
2274                               inf.prd21                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd21 ),
2275                               inf.prd22                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd22 ),
2276                               inf.prd23                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd23 ),
2277                               inf.prd24                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd24 ),
2278                               inf.prd25                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd25 ),
2279                               inf.prd26                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd26 ),
2280                               inf.prd27                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd27 ),
2281                               inf.prd28                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd28 ),
2282                               inf.prd29                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd29 ),
2283                               inf.prd30                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd30 ),
2284                               inf.prd31                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd31 ),
2285                               inf.prd32                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd32 ),
2286                               inf.prd33                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd33 ),
2287                               inf.prd34                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd34 ),
2288                               inf.prd35                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd35 ),
2289                               inf.prd36                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd36 ),
2290                               inf.prd37                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd37 ),
2291                               inf.prd38                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd38 ),
2292                               inf.prd39                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd39 ),
2293                               inf.prd40                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd40 ),
2294                               inf.prd41                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd41 ),
2295                               inf.prd42                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd42 ),
2296                               inf.prd43                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd43 ),
2297                               inf.prd44                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd44 ),
2298                               inf.prd45                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd45 ),
2299                               inf.prd46                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd46 ),
2300                               inf.prd47                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd47 ),
2301                               inf.prd48                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd48 ),
2302                               inf.prd49                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd49 ),
2303                               inf.prd50                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd50 ),
2304                               inf.prd51                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd51 ),
2305                               inf.prd52                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd52 ),
2306                               inf.sd_prd                       = DECODE(inf.delete_flag,'Y',l_fnd_miss_num , inf.sd_prd),
2307                               inf.resource_list_member_id      = (SELECT rlm.resource_list_member_id
2308                                                                   FROM   pa_resource_list_members rlm
2309                                                                   WHERE  inf.resource_alias = rlm.alias
2310                                                                   AND    rlm.resource_list_id = p_version_info_rec.x_resource_list_id
2311                                                                   AND    rlm.object_type = 'RESOURCE_LIST'
2312                                                                   AND    rlm.object_id = p_version_info_rec.x_resource_list_id)
2313                      WHERE    inf.run_id= p_run_id
2314                      AND      Nvl(p_request_id, -99) = Nvl(inf.request_id, -99);
2315                  END IF; -- control_flag = N
2316 
2317             ELSE -- Resource list is not categorized
2318                   --log1('----- STAGE 3.3------- '||l_unct_rlm_id);
2319                   -- update the rlm id columns with rlm id of FINANCIAL_ELEMENTS, if the resource list
2320                   -- is uncategorized one
2321 
2322                   -- 4497319.Perf Fix:Added two AND conditions in the WHERE clause in order to improve the performance.
2323                   SELECT resource_list_member_id
2324                   INTO   l_unct_rlm_id
2325                   FROM   pa_resource_list_members
2326                   WHERE  resource_list_id = p_version_info_rec.x_resource_list_id
2327                   AND    resource_class_flag = 'Y'
2328                   AND    resource_class_code = 'FINANCIAL_ELEMENTS'
2329                   AND    object_type = 'RESOURCE_LIST'
2330                   AND    object_id = p_version_info_rec.x_resource_list_id;
2331 
2332                   --log1('----- STAGE 3.4------- '||l_unct_rlm_id);
2333                  UPDATE  pa_fp_webadi_upload_inf inf
2334                  SET     inf.task_id = (SELECT  pt.task_id
2335                                         FROM    (SELECT  pt.name task_name, /* Bug 4929163. Modidfied the select statement to refer to pa_proj_elements instead of pa_tasks*/
2336                                                          pt.element_number task_number,
2337                                                          pt.proj_element_id task_id
2338                                                  FROM    pa_proj_elements pt
2339                                                  WHERE   pt.project_id = p_version_info_rec.x_project_id
2340                                                  AND     object_type = 'PA_TASKS'
2341                                                  AND     parent_structure_id = l_fin_struct_id
2342                                                  UNION ALL
2343                                                  SELECT  p.long_name task_name,  /* Bug 5345336 */
2344                                                          p.segment1 task_number,
2345                                                          0 task_id
2346                                                  FROM    pa_projects_all p
2347                                                  WHERE   p.project_id = p_version_info_rec.x_project_id) pt
2348                                         WHERE    (inf.task_name IS NOT NULL
2349                                                   AND inf.task_number IS NULL
2350                                                   AND inf.task_name = pt.task_name) OR
2351                                                  (inf.task_name IS NULL
2352                                                   AND inf.task_number IS NOT NULL
2353                                                   AND inf.task_number = pt.task_number) OR
2354                                                  (inf.task_name IS NOT NULL
2355                                                   AND inf.task_number IS NOT NULL
2356                                                   AND inf.task_name = pt.task_name
2357                                                   AND inf.task_number = pt.task_number)),
2358 
2359                           inf.change_reason_code           = DECODE(inf.delete_flag,'Y',NULL,inf.change_reason_code),
2360                           inf.quantity                     = DECODE(inf.delete_flag,'Y',NULL,inf.quantity),
2361                           inf.raw_cost                     = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost),
2362                           inf.raw_cost_over_rate           = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost_over_rate),
2363                           inf.burdened_cost                = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost),
2364                           inf.burdened_cost_over_rate      = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost_over_rate),
2365                           inf.revenue                      = DECODE(inf.delete_flag,'Y',NULL,inf.revenue),
2366                           inf.bill_over_rate               = DECODE(inf.delete_flag,'Y',NULL,inf.bill_over_rate ),
2367                           inf.projfunc_cost_rate_type      = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_type),
2368                           inf.projfunc_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_date_type),
2369                           inf.projfunc_cost_exchange_rate  = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_exchange_rate ),
2370                           inf.projfunc_cost_rate_date      = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_cost_rate_date),
2371                           inf.project_cost_rate_type       = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_type),
2372                           inf.project_cost_rate_date_type  = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_date_type),
2373                           inf.project_cost_exchange_rate   = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_exchange_rate),
2374                           inf.project_cost_rate_date       = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_cost_rate_date),
2375                           inf.projfunc_rev_rate_type       = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_type      ),
2376                           inf.projfunc_rev_rate_date_type  = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_date_type ),
2377                           inf.projfunc_rev_exchange_rate   = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_exchange_rate  ),
2378                           inf.projfunc_rev_rate_date       = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rev_rate_date),
2379                           inf.project_rev_rate_type        = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_type       ),
2380                           inf.project_rev_rate_date_type   = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_date_type  ),
2381                           inf.project_rev_exchange_rate    = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_exchange_rate   ),
2382                           inf.project_rev_rate_date        = DECODE(inf.delete_flag,'Y',TO_DATE(NULL), inf.project_rev_rate_date),
2383                           inf.projfunc_rate_type           = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_type          ),
2384                           inf.projfunc_rate_date_type      = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_date_type     ),
2385                           inf.projfunc_exchange_rate       = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_exchange_rate      ),
2386                           inf.projfunc_rate_date           = DECODE(inf.delete_flag,'Y',TO_DATE(NULL), inf.projfunc_rate_date),
2387                           inf.project_rate_type            = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_type           ),
2388                           inf.project_rate_date_type       = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_date_type      ),
2389                           inf.project_exchange_rate        = DECODE(inf.delete_flag,'Y',NULL,inf.project_exchange_rate       ),
2390                           inf.project_rate_date            = DECODE(inf.delete_flag,'Y',TO_DATE(NULL), inf.project_rate_date),
2391                           inf.pd_prd                       = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.pd_prd),
2392                           inf.prd1                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd1  ),
2393                           inf.prd2                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd2  ),
2394                           inf.prd3                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd3  ),
2395                           inf.prd4                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd4  ),
2396                           inf.prd5                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd5  ),
2397                           inf.prd6                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd6  ),
2398                           inf.prd7                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd7  ),
2399                           inf.prd8                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd8  ),
2400                           inf.prd9                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd9  ),
2401                           inf.prd10                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd10 ),
2402                           inf.prd11                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd11 ),
2403                           inf.prd12                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd12 ),
2404                           inf.prd13                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd13 ),
2405                           inf.prd14                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd14 ),
2406                           inf.prd15                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd15 ),
2407                           inf.prd16                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd16 ),
2408                           inf.prd17                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd17 ),
2409                           inf.prd18                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd18 ),
2410                           inf.prd19                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd19 ),
2411                           inf.prd20                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd20 ),
2412                           inf.prd21                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd21 ),
2413                           inf.prd22                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd22 ),
2414                           inf.prd23                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd23 ),
2415                           inf.prd24                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd24 ),
2416                           inf.prd25                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd25 ),
2417                           inf.prd26                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd26 ),
2418                           inf.prd27                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd27 ),
2419                           inf.prd28                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd28 ),
2420                           inf.prd29                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd29 ),
2421                           inf.prd30                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd30 ),
2422                           inf.prd31                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd31 ),
2423                           inf.prd32                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd32 ),
2424                           inf.prd33                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd33 ),
2425                           inf.prd34                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd34 ),
2426                           inf.prd35                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd35 ),
2427                           inf.prd36                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd36 ),
2428                           inf.prd37                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd37 ),
2429                           inf.prd38                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd38 ),
2430                           inf.prd39                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd39 ),
2431                           inf.prd40                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd40 ),
2432                           inf.prd41                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd41 ),
2433                           inf.prd42                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd42 ),
2434                           inf.prd43                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd43 ),
2435                           inf.prd44                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd44 ),
2436                           inf.prd45                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd45 ),
2437                           inf.prd46                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd46 ),
2438                           inf.prd47                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd47 ),
2439                           inf.prd48                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd48 ),
2440                           inf.prd49                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd49 ),
2441                           inf.prd50                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd50 ),
2442                           inf.prd51                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd51 ),
2443                           inf.prd52                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd52 ),
2444                           inf.sd_prd                       = DECODE(inf.delete_flag,'Y',l_fnd_miss_num , inf.sd_prd),
2445                           inf.resource_list_member_id      = l_unct_rlm_id
2446                  WHERE    inf.run_id= p_run_id
2447                  AND      Nvl(p_request_id, -99) = Nvl(inf.request_id, -99);
2448             END IF; -- uncategorized flag
2449       EXCEPTION
2450            WHEN OTHERS THEN
2451                  IF l_debug_mode = 'Y' THEN
2452                       pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2453                       pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2454                  END IF;
2455 
2456                  RAISE;
2457       END;
2458       IF l_debug_mode = 'Y' THEN
2459           pa_debug.g_err_stage := 'Task ids updated';
2460           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2461       END IF;
2462 
2463       --log1('----- STAGE 2-------');
2464       -- checking, if the layout is periodic one
2465       IF l_debug_mode = 'Y' THEN
2466           pa_debug.g_err_stage := 'Checking for periodic setup';
2467           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2468       END IF;
2469 
2470       BEGIN
2471             SELECT  'Y'
2472             INTO    is_periodic_setup
2473             FROM    DUAL
2474             WHERE EXISTS(SELECT  'X'
2475                          FROM    pa_fp_webadi_upload_inf
2476                          WHERE   amount_type_name IS NOT NULL
2477                          AND     run_id = p_run_id
2478                          AND    Nvl(p_request_id, -99) = Nvl(request_id, -99));
2479       EXCEPTION
2480             WHEN NO_DATA_FOUND THEN
2481                  is_periodic_setup := 'N';
2482       END;
2483 
2484       IF l_debug_mode = 'Y' THEN
2485           pa_debug.g_err_stage := 'is_periodic_setup: =' || is_periodic_setup;
2486           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2487           pa_debug.g_err_stage := 'Getting the fixed date spread curve id/name';
2488           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2489       END IF;
2490       --The following update  on the interface will be used for
2491       ----Updating the error codes where task/resource info is missing
2492       ----Updating the amount type codes for the corresponding amount type names in case of periodic layout
2493       IF is_periodic_setup='Y' THEN
2494 
2495           IF p_version_info_rec.x_plan_class_code='BUDGET' THEN
2496 
2497               l_lookup_type := 'PA_FP_XL_ALL_BDGT_AMT_TYPES';
2498 
2499           ELSE
2500 
2501               l_lookup_type := 'PA_FP_XL_ALL_FCST_AMT_TYPES';
2502 
2503           END IF;
2504 
2505 
2506           UPDATE pa_fp_webadi_upload_inf inf
2507           SET    amount_type_code     = (SELECT pl.lookup_code
2508                                          FROM   pa_lookups pl,pa_fp_proj_xl_amt_types xlt
2509                                          WHERE  lookup_type=l_lookup_type
2510                                          AND    meaning=inf.amount_type_name
2511                                          AND    xlt.project_id=p_version_info_rec.x_project_id
2512                                          AND    xlt.fin_plan_type_id=p_version_info_rec.x_fin_plan_type_id
2513                                          AND    xlt.option_type=p_version_info_rec.x_version_type
2514                                          AND    xlt.amount_type_code=pl.lookup_code),
2515                  val_error_flag       = NVL(val_error_flag,
2516                                             DECODE(task_id,
2517                                                    NULL,'Y',
2518                                                    DECODE(resource_list_member_id,
2519                                                           NULL,'Y',
2520                                                           NULL))),
2521                  val_error_code       = NVL(val_error_code,
2522                                             DECODE(task_id,
2523                                                    NULL,'INVALID_TASK_INFO',
2524                                                    DECODE(resource_list_member_id,
2525                                                           NULL,'INVALID_RESOURCE_INFO',
2526                                                           NULL))),
2527                  err_task_name        = nvl(task_name,'-98'),
2528                  err_task_number      = nvl(task_number,'-98'),
2529                  err_alias            = nvl(resource_alias,'-98'),
2530                  err_amount_type_code = nvl(amount_type_code,'-98')
2531           WHERE  run_id=p_run_id
2532           AND    Nvl(p_request_id, -99) = Nvl(request_id, -99);
2533 
2534       ELSE --Non Periodic layout
2535 
2536           UPDATE pa_fp_webadi_upload_inf inf
2537           SET    val_error_flag       = NVL(val_error_flag,
2538                                             DECODE(task_id,
2539                                                    NULL,'Y',
2540                                                    DECODE(resource_list_member_id,
2541                                                           NULL,'Y',
2542                                                           NULL))),
2543                 val_error_code       = NVL(val_error_code,
2544                                             DECODE(task_id,
2545                                                    NULL,'INVALID_TASK_INFO',
2546                                                    DECODE(resource_list_member_id,
2547                                                           NULL,'INVALID_RESOURCE_INFO',
2548                                                           NULL))),
2549                  err_task_name        = nvl(task_name,'-98'),
2550                  err_task_number      = nvl(task_number,'-98'),
2551                  err_alias            = nvl(resource_alias,'-98'),
2552                  err_amount_type_code = nvl(amount_type_code,'-98')
2553           WHERE  run_id=p_run_id
2554           AND    Nvl(p_request_id, -99) = Nvl(request_id, -99);
2555 
2556       END IF;
2557 
2558       --log1('----- STAGE 5-------');
2559       IF l_debug_mode = 'Y' THEN
2560           pa_debug.g_err_stage := 'plan class code of the version: ' || p_version_info_rec.x_plan_class_code;
2561           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2562       END IF;
2563 
2564 
2565       IF p_version_info_rec.x_plan_class_code = PA_FP_CONSTANTS_PKG.G_PLAN_CLASS_FORECAST THEN
2566            is_forecast_version := 'Y';
2567 
2568            -- calling an api to derive the etc_start_date
2569            IF l_debug_mode = 'Y' THEN
2570                pa_debug.g_err_stage := 'Calling pa_fp_gen_amount_utils.get_etc_start_date';
2571                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2572            END IF;
2573 
2574            l_etc_start_date := pa_fp_gen_amount_utils.get_etc_start_date(p_version_info_rec.x_budget_version_id);
2575       END IF;
2576 
2577       --log1('----- STAGE 6-------');
2578       BEGIN
2579             SELECT t.name,
2580                    a.spread_curve_id
2581             INTO   l_fixed_spread_curve_name,
2582                    l_fixed_spread_curve_id
2583             FROM   pa_spread_curves_b a,
2584                    pa_spread_curves_tl t
2585             WHERE  a.spread_curve_id = t.spread_curve_id
2586             AND    a.spread_curve_code = 'FIXED_DATE'
2587             AND    t.language = userenv('LANG');
2588       EXCEPTION
2589             WHEN OTHERS THEN
2590                  IF l_debug_mode = 'Y' THEN
2591                       pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2592                       pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2593                  END IF;
2594 
2595                  RAISE;
2596       END;
2597       --log1('----- STAGE 7-------');
2598       IF is_periodic_setup = 'Y' THEN
2599             /* The structure of the both tables for start date and end date table would be as follows:
2600              * - If the number of flexible periods shown on the layout is n, then the first n elements
2601              *   in each of the tables would contain corresponding start date/end date of a period whose
2602              *   number would be specified by the index.
2603              */
2604 
2605              l_prd_start_date_tbl := p_prd_start_date_tbl;
2606              l_prd_end_date_tbl   := p_prd_end_date_tbl;
2607 
2608              --log1('--p_prd_start_date_tbl.COUNT-- ' || p_prd_start_date_tbl.COUNT);
2609              l_original_prd_count := p_prd_start_date_tbl.COUNT;
2610              l_int_new_prd_count  := 52 - (l_original_prd_count);
2611              IF l_int_new_prd_count > 0 THEN
2612                    -- extending the period start/end date tables to have total 52 periods
2613                    l_prd_start_date_tbl.EXTEND(l_int_new_prd_count);
2614                    l_prd_end_date_tbl.EXTEND(l_int_new_prd_count);
2615              END IF;
2616        END IF;
2617 
2618       -- initializing the conversion attributes for ALL version
2619       -- and for periodic layouts
2620 
2621       IF is_periodic_setup = 'Y' THEN
2622           IF p_version_info_rec.x_version_type = 'ALL' AND
2623              p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
2624 
2625                 l_conv_attrb_displayed := conv_attributes_displayed(p_run_id => p_run_id);
2626 
2627                 BEGIN
2628                     SELECT project_cost_rate_type,
2629                            project_cost_rate_date_type,
2630                            project_cost_rate_date,
2631                            projfunc_cost_rate_type,
2632                            projfunc_cost_rate_date_type,
2633                            projfunc_cost_rate_date,
2634                            project_rev_rate_type,
2635                            project_rev_rate_date_type,
2636                            project_rev_rate_date,
2637                            projfunc_rev_rate_type,
2638                            projfunc_rev_rate_date_type,
2639                            projfunc_rev_rate_date
2640                     INTO   d_project_cost_rate_type,
2641                            d_project_cost_rate_date_type,
2642                            d_project_cost_rate_date,
2643                            d_projfunc_cost_rate_type,
2644                            d_projfunc_cost_rate_date_type,
2645                            d_projfunc_cost_rate_date,
2646                            d_project_rev_rate_type,
2647                            d_project_rev_rate_date_type,
2648                            d_project_rev_rate_date,
2649                            d_projfunc_rev_rate_type,
2650                            d_projfunc_rev_rate_date_type,
2651                            d_projfunc_rev_rate_date
2652                     FROM   pa_proj_fp_options
2653                     WHERE  fin_plan_version_id = p_version_info_rec.x_budget_version_id
2654                     AND    fin_plan_preference_code = 'COST_AND_REV_SAME';
2655                 EXCEPTION
2656                     WHEN OTHERS THEN
2657                          IF l_debug_mode = 'Y' THEN
2658                               pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2659                               pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2660                          END IF;
2661 
2662                          RAISE;
2663                 END;
2664 
2665                 -- selecting the exchange rates for all the transaction currencies available
2666                 -- for the version
2667                 BEGIN
2668                     SELECT txn_currency_code,
2669                            project_cost_exchange_rate,
2670                            project_rev_exchange_rate,
2671                            projfunc_cost_exchange_rate,
2672                            projfunc_rev_exchange_rate
2673                     BULK COLLECT INTO
2674                            d_txn_curr_tab,
2675                            d_project_cost_exc_rate_tab,
2676                            d_project_rev_exc_rate_tab,
2677                            d_projfunc_cost_exc_rate_tab,
2678                            d_projfunc_rev_exc_rate_tab
2679                     FROM   pa_fp_txn_currencies
2680                     WHERE  proj_fp_options_id = p_version_info_rec.x_proj_fp_options_id;
2681                 EXCEPTION
2682                     WHEN OTHERS THEN
2683                          IF l_debug_mode = 'Y' THEN
2684                               pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2685                               pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2686                          END IF;
2687 
2688                          RAISE;
2689                 END;
2690           END IF;
2691       END IF;
2692       -- initializing l_plan_trans_attr_copied_flag to N
2693       l_plan_trans_attr_copied_flag := 'N';
2694       l_cost_conv_attr_copied_flag := 'N';
2695       l_rev_conv_attr_copied_flag := 'N';
2696       IF l_debug_mode = 'Y' THEN
2697           pa_debug.g_err_stage := 'l_plan_trans_attr_copied_flag initialized to N';
2698           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2699           pa_debug.g_err_stage := 'Opening cursor inf_tbl_data_csr';
2700           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2701       END IF;
2702 
2703       --Initialize the OUT variables
2704       x_etc_quantity_tbl := SYSTEM.pa_num_tbl_type();
2705       x_etc_raw_cost_tbl := SYSTEM.pa_num_tbl_type();
2706       x_etc_burdened_cost_tbl := SYSTEM.pa_num_tbl_type();
2707       x_etc_revenue_tbl := SYSTEM.pa_num_tbl_type();
2708 
2709       --log1('----- STAGE 8-------');
2710       IF p_version_info_rec.x_version_type = 'COST' THEN
2711           l_allow_qty_flag := p_version_info_rec.x_cost_quantity_flag;
2712       ELSIF p_version_info_rec.x_version_type = 'REVENUE' THEN
2713           l_allow_qty_flag := p_version_info_rec.x_rev_quantity_flag;
2714       ELSIF p_version_info_rec.x_version_type = 'ALL' THEN
2715           l_allow_qty_flag := p_version_info_rec.x_all_quantity_flag;
2716       END IF;
2717 
2718       IF is_periodic_setup = 'Y' THEN
2719 
2720           -- deriving the start/end date of the first period that falls before the first period
2721           -- displayed in the period mask
2722           --log1('----- STAGE 8.0.1------- '||1);
2723           --log1('----- STAGE 8.0.2------- '||p_prd_start_date_tbl(1));
2724           OPEN l_first_pd_st_en_dt_csr(p_org_id,
2725                                        p_prd_start_date_tbl(1),
2726                                        p_version_info_rec.x_time_phased_code);
2727                 FETCH l_first_pd_st_en_dt_csr
2728                 INTO  l_first_pd_st_en_dt_rec;
2729                 l_first_pd_bf_pm_st_dt := l_first_pd_st_en_dt_rec.start_date;
2730                 l_first_pd_bf_pm_en_dt := l_first_pd_st_en_dt_rec.end_date;
2731           CLOSE l_first_pd_st_en_dt_csr;
2732 
2733           -- deriving the start/end date of the last period that falls after the last period
2734           -- displayed in the period mask
2735           --log1('----- STAGE 8.1.1------- '||l_original_prd_count);
2736           --log1('----- STAGE 8.1.2------- '||p_prd_end_date_tbl(l_original_prd_count));
2737           OPEN l_last_pd_st_en_dt_csr(p_org_id,
2738                                       p_prd_end_date_tbl(l_original_prd_count),
2739                                       p_version_info_rec.x_time_phased_code);
2740                 FETCH l_last_pd_st_en_dt_csr
2741                 INTO l_last_pd_st_en_dt_rec;
2742                 l_last_pd_af_pm_st_dt := l_last_pd_st_en_dt_rec.start_date;
2743                 l_last_pd_af_pm_en_dt := l_last_pd_st_en_dt_rec.end_date;
2744           CLOSE l_last_pd_st_en_dt_csr;
2745 
2746           x_first_pd_bf_pm_en_dt := l_first_pd_bf_pm_en_dt;
2747           x_last_pd_af_pm_st_dt := l_last_pd_af_pm_st_dt;
2748 
2749       END IF;
2750 
2751       -- initializing the conversion attributes for the firsr record for a periodic layout
2752       -- for a ALL version, these values would be overwritten
2753       IF is_periodic_setup = 'Y' THEN
2754           IF p_version_info_rec.x_version_type = 'ALL' AND
2755              p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
2756 
2757                   -- bug 4479036: need to assign these default values only if the
2758                   -- conversion attribute columns are selected in the layout.
2759                   -- otherwise keep them as null.
2760                   IF l_conv_attrb_displayed = 'Y' THEN
2761                       l_project_cost_rate_type      := d_project_cost_rate_type      ;
2762                       l_project_cost_rate_date_type := d_project_cost_rate_date_type ;
2763                       l_project_cost_rate_date      := d_project_cost_rate_date      ;
2764                       l_projfunc_cost_rate_type     := d_projfunc_cost_rate_type     ;
2765                       l_projfunc_cost_rate_date_type:= d_projfunc_cost_rate_date_type;
2766                       l_projfunc_cost_rate_date     := d_projfunc_cost_rate_date     ;
2767 
2768                       l_project_rev_rate_type       := d_project_rev_rate_type       ;
2769                       l_project_rev_rate_date_type  := d_project_rev_rate_date_type  ;
2770                       l_project_rev_rate_date       := d_project_rev_rate_date       ;
2771                       l_projfunc_rev_rate_type      := d_projfunc_rev_rate_type      ;
2772                       l_projfunc_rev_rate_date_type := d_projfunc_rev_rate_date_type ;
2773                       l_projfunc_rev_rate_date      := d_projfunc_rev_rate_date      ;
2774 
2775                       IF l_inf_tbl_data_curr_rec.txn_currency_code IS NOT NULL THEN
2776                           IF d_txn_curr_tab.COUNT > 0 THEN
2777                               FOR i IN d_txn_curr_tab.FIRST .. d_txn_curr_tab.LAST LOOP
2778                                   IF d_txn_curr_tab(i) = l_inf_tbl_data_curr_rec.txn_currency_code THEN
2779                                       l_project_cost_exchange_rate  := d_project_cost_exc_rate_tab(i);
2780                                       l_projfunc_cost_exchange_rate := d_projfunc_cost_exc_rate_tab(i);
2781                                       l_project_rev_exchange_rate   := d_project_rev_exc_rate_tab(i);
2782                                       l_projfunc_rev_exchange_rate  := d_projfunc_rev_exc_rate_tab(i);
2783 
2784                                       EXIT;
2785                                   END IF;
2786                               END LOOP;
2787                           END IF;
2788                       END IF;
2789                   END IF;
2790           END IF;
2791       END IF;
2792       --log1('----- STAGE 8.2.0------- ');
2793 
2794       l_inf_tbl_data_prev_rec := NULL;
2795       IF inf_tbl_data_csr%ISOPEN THEN
2796 
2797           CLOSE inf_tbl_data_csr;
2798 
2799       END IF;
2800 
2801       OPEN inf_tbl_data_csr
2802       (c_run_id                    => p_run_id,
2803        c_allow_qty_flag            => l_allow_qty_flag,
2804        c_allow_raw_cost_flag       => p_version_info_rec.x_raw_cost_flag,
2805        c_allow_burd_cost_flag      => p_version_info_rec.x_burdened_flag,
2806        c_allow_revenue_flag        => p_version_info_rec.x_revenue_flag,
2807        c_allow_raw_cost_rate_flag  => p_version_info_rec.x_cost_rate_flag,
2808        c_allow_burd_cost_rate_flag => p_version_info_rec.x_burden_rate_flag,
2809        c_allow_bill_rate_flag      => p_version_info_rec.x_bill_rate_flag,
2810        c_project_id                => p_version_info_rec.x_project_id,
2811        c_fin_plan_type_id          => p_version_info_rec.x_fin_plan_type_id,
2812        c_version_type              => p_version_info_rec.x_version_type,
2813        c_request_id                => p_request_id);
2814       --log1('----- STAGE 8.2.1------- ');
2815 
2816       --Added for bug#4488926
2817       IF(p_version_info_rec.x_time_phased_code is null)
2818       THEN
2819           l_period_time_phased_code := PA_FIN_PLAN_UTILS.Get_Time_Phased_code(p_version_info_rec.x_budget_version_id);
2820       ELSE
2821          l_period_time_phased_code := p_version_info_rec.x_time_phased_code;
2822       END IF;
2823 
2824       FETCH inf_tbl_data_csr INTO l_inf_tbl_data_curr_rec;
2825       --log1('----- STAGE 8.2.2------- ');
2826       LOOP
2827             --log1('----- STAGE 8.2.3------- l_inf_tbl_data_curr_rec.task_id '||l_inf_tbl_data_curr_rec.task_id);
2828             --log1('----- STAGE 8.2.4-------');
2829             -- resetting budget line start date/ end date varibales
2830             l_bdgt_line_start_date := null;
2831             l_bdgt_line_end_date := null;
2832 
2833             --log1('----- STAGE 8.2.4.0.1-------');
2834             --Initialize the variables used for processing
2835             IF l_inf_tbl_data_curr_rec.task_id IS NULL OR
2836                (l_inf_tbl_data_prev_rec.task_id IS NOT NULL AND
2837                 (l_inf_tbl_data_prev_rec.task_id <>  l_inf_tbl_data_curr_rec.task_id OR
2838                  l_inf_tbl_data_prev_rec.resource_list_member_id <>  l_inf_tbl_data_curr_rec.resource_list_member_id OR
2839                  Nvl(l_inf_tbl_data_prev_rec.txn_currency_code, '-99') <>  Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') OR
2840                  NVL(l_inf_tbl_data_prev_rec.amount_type_code,'-99') <>  NVL(l_inf_tbl_data_curr_rec.amount_type_code,'-99'))) THEN
2841 
2842                 --log1('----- STAGE 8.2.4.0.2-------');
2843                 --Reset Planning Transaction Level Variables
2844                 IF l_inf_tbl_data_curr_rec.task_id IS NULL OR
2845                    l_inf_tbl_data_prev_rec.task_id <>  l_inf_tbl_data_curr_rec.task_id OR
2846                    l_inf_tbl_data_prev_rec.resource_list_member_id <>  l_inf_tbl_data_curr_rec.resource_list_member_id OR
2847                    Nvl(l_inf_tbl_data_prev_rec.txn_currency_code, '-99') <>  Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') THEN
2848 
2849                     l_plan_trans_attr_copied_flag := 'N';
2850                     l_min_bdgt_line_start_date := NULL;
2851                     l_max_bdgt_line_end_date   := NULL;
2852 
2853                     l_project_cost_rate_type      := NULL;
2854                     l_project_cost_rate_date_type := NULL;
2855                     l_project_cost_rate_date      := NULL;
2856                     l_project_cost_exchange_rate  := NULL;
2857                     l_projfunc_cost_rate_type     := NULL;
2858                     l_projfunc_cost_rate_date_type:= NULL;
2859                     l_projfunc_cost_rate_date     := NULL;
2860                     l_projfunc_cost_exchange_rate := NULL;
2861 
2862                     l_project_rev_rate_type      := NULL;
2863                     l_project_rev_rate_date_type := NULL;
2864                     l_project_rev_rate_date      := NULL;
2865                     l_project_rev_exchange_rate  := NULL;
2866                     l_projfunc_rev_rate_type     := NULL;
2867                     l_projfunc_rev_rate_date_type:= NULL;
2868                     l_projfunc_rev_rate_date     := NULL;
2869                     l_projfunc_rev_exchange_rate := NULL;
2870 
2871                     l_cost_conv_attr_copied_flag := 'N';
2872                     l_rev_conv_attr_copied_flag  := 'N';
2873                     --log1('----- STAGE 8.2.4.0.3-------');
2874 
2875                     -- initializing the conversion attributes for subsequent reords for periodic layout
2876                     -- for a ALL version, these values would be overwritten
2877                     IF is_periodic_setup = 'Y' THEN
2878                         IF p_version_info_rec.x_version_type = 'ALL' AND
2879                            p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
2880                                -- bug 4479036: need to assign these default values only if the
2881                                -- conversion attribute columns are selected in the layout.
2882                                -- otherwise keep them as null.
2883                                IF l_conv_attrb_displayed = 'Y' THEN
2884                                    l_project_cost_rate_type      := d_project_cost_rate_type      ;
2885                                    l_project_cost_rate_date_type := d_project_cost_rate_date_type ;
2886                                    l_project_cost_rate_date      := d_project_cost_rate_date      ;
2887                                    l_projfunc_cost_rate_type     := d_projfunc_cost_rate_type     ;
2888                                    l_projfunc_cost_rate_date_type:= d_projfunc_cost_rate_date_type;
2889                                    l_projfunc_cost_rate_date     := d_projfunc_cost_rate_date     ;
2890 
2891                                    l_project_rev_rate_type       := d_project_rev_rate_type       ;
2892                                    l_project_rev_rate_date_type  := d_project_rev_rate_date_type  ;
2893                                    l_project_rev_rate_date       := d_project_rev_rate_date       ;
2894                                    l_projfunc_rev_rate_type      := d_projfunc_rev_rate_type      ;
2895                                    l_projfunc_rev_rate_date_type := d_projfunc_rev_rate_date_type ;
2896                                    l_projfunc_rev_rate_date      := d_projfunc_rev_rate_date      ;
2897 
2898                                    IF Nvl(l_inf_tbl_data_prev_rec.txn_currency_code, '-99') <>
2899                                       Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') THEN
2900                                        IF d_txn_curr_tab.COUNT > 0 THEN
2901                                            FOR i IN d_txn_curr_tab.FIRST .. d_txn_curr_tab.LAST LOOP
2902                                                IF d_txn_curr_tab(i) = l_inf_tbl_data_curr_rec.txn_currency_code THEN
2903                                                   l_project_cost_exchange_rate  := d_project_cost_exc_rate_tab(i);
2904                                                   l_projfunc_cost_exchange_rate := d_projfunc_cost_exc_rate_tab(i);
2905                                                   l_project_rev_exchange_rate   := d_project_rev_exc_rate_tab(i);
2906                                                   l_projfunc_rev_exchange_rate  := d_projfunc_rev_exc_rate_tab(i);
2907 
2908                                                   EXIT;
2909                                                END IF;
2910                                            END LOOP;
2911                                        END IF;
2912                                    END IF;
2913                                END IF;
2914                         END IF;
2915                     END IF;
2916                 END IF;
2917 
2918                 --log1('----- STAGE 8.2.4.0.4-------');
2919                 --Reset the Resource assignment level Variables
2920                 IF l_inf_tbl_data_curr_rec.task_id IS NULL OR
2921                    l_inf_tbl_data_curr_rec.task_id <> l_inf_tbl_data_prev_rec.task_id OR
2922                    l_inf_tbl_data_curr_rec.resource_list_member_id <> l_inf_tbl_data_prev_rec.resource_list_member_id THEN
2923                     -- nulling out the fixed spread curve period counter
2924                     l_fix_sc_amt_pd_curr_index := null;
2925 
2926                     l_end_ra_index := bl_count -1;
2927                     --log1('----- STAGE 8.2.4.0.5-------'||l_start_ra_index);
2928                     --log1('----- STAGE 8.2.4.0.6-------'||l_end_ra_index);
2929                     --log1('----- STAGE 8.2.4.0.7-------'||l_min_ra_plan_start_date);
2930                     --log1('----- STAGE 8.2.4.0.8-------'||l_max_ra_plan_end_date);
2931 
2932                     IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
2933                        l_cached_ra_id_tbl(l_cached_ra_index) = -1 THEN
2934                           FOR kk IN l_start_ra_index..l_end_ra_index LOOP
2935                             l_plan_start_date_tbl(kk) := l_min_ra_plan_start_date;
2936                             l_plan_end_date_tbl(kk)   := l_max_ra_plan_end_date;
2937                           END LOOP;
2938                     END IF;
2939                     l_start_ra_index := bl_count;
2940                     l_min_ra_plan_start_date := null;
2941                     l_max_ra_plan_end_date   := null;
2942                 END IF;
2943 
2944             END IF;--IF l_inf_tbl_data_prev_rec.task_id IS NOT NULL AND
2945 
2946             EXIT WHEN l_inf_tbl_data_curr_rec.task_id IS NULL;
2947             x_inf_tbl_rec_tbl (x_inf_tbl_rec_tbl.COUNT + 1):= l_inf_tbl_data_curr_rec;
2948             BEGIN
2949                  --log1('----- STAGE 9-------');
2950                  -- preparing the index to be used for cached RA id table
2951                  l_cached_ra_index := 'T' || l_inf_tbl_data_curr_rec.task_id || 'R' || l_inf_tbl_data_curr_rec.resource_list_member_id;
2952 
2953                  -- checking if the RA is an existing one or a new one
2954                  IF NOT l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) THEN
2955                        -- deriving planning dates and spread curve information from pa_resource_assignments for existing RAs
2956                        -- or from pa_resource_list_members for new RAs.
2957                        BEGIN
2958                               SELECT resource_assignment_id,
2959                                      planning_start_date,
2960                                      planning_end_date,
2961                                      spread_curve_id,
2962                                      sp_fixed_date,
2963                                      rbs_element_id,
2964                                      resource_class_code,
2965                                      rate_based_flag
2966                               INTO   l_ra_id,
2967                                      l_plan_start_date,
2968                                      l_plan_end_date,
2969                                      l_spread_curve_id,
2970                                      l_sp_fixed_date,
2971                                      l_rbs_elem_id,
2972                                      l_res_class_code,
2973                                      l_rate_based_flag
2974                               FROM   pa_resource_assignments
2975                               WHERE  project_id = p_version_info_rec.x_project_id
2976                               AND    budget_version_id = p_version_info_rec.x_budget_version_id
2977                               AND    task_id = l_inf_tbl_data_curr_rec.task_id
2978                               AND    resource_list_member_id = l_inf_tbl_data_curr_rec.resource_list_member_id
2979                               AND    project_assignment_id = -1;
2980 
2981                               l_cached_ra_id_tbl(l_cached_ra_index) := l_ra_id;
2982                        EXCEPTION
2983                               WHEN NO_DATA_FOUND THEN
2984                                     --log1('----- STAGE 10-------');
2985                                     BEGIN
2986                                           SELECT spread_curve_id
2987                                           INTO   l_spread_curve_id
2988                                           FROM   pa_resource_list_members
2989                                           WHERE  resource_list_member_id = l_inf_tbl_data_curr_rec.resource_list_member_id;
2990                                     EXCEPTION
2991                                           WHEN OTHERS THEN
2992                                                IF l_debug_mode = 'Y' THEN
2993                                                     pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2994                                                     pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2995                                                END IF;
2996 
2997                                                RAISE;
2998                                     END;
2999                                     l_ra_id           := NULL;
3000                                     l_plan_start_date := NULL;
3001                                     l_plan_end_date   := NULL;
3002                                     l_sp_fixed_date   := NULL;
3003                                     l_rbs_elem_id     := NULL;
3004                                     l_res_class_code  := NULL;
3005                                     l_rate_based_flag := NULL;
3006                                     -- storing -1 for the index of corresoponding task/resource to indicate new RA
3007                                     l_cached_ra_id_tbl(l_cached_ra_index) := -1;
3008                        END;
3009                        --log1('----- STAGE 11-------');
3010                  END IF;
3011 
3012                  -- initializing the local temp variables
3013                  l_raw_cost             := NULL;
3014                  l_burdened_cost        := NULL;
3015                  l_revenue              := NULL;
3016                  l_quantity             := NULL;
3017                  l_etc_quantity         := NULL;
3018                  l_etc_raw_cost         := NULL;
3019                  l_etc_burdened_cost    := NULL;
3020                  l_etc_revenue          := NULL;
3021                  l_tmp_sum_amt          := NULL;
3022                  l_not_null_period_cnt  := NULL;
3023 
3024                  -- budget line dates processing starts
3025                  IF l_inf_tbl_data_curr_rec.delete_flag = 'Y' THEN
3026                         l_bdgt_line_start_date := l_plan_start_date;
3027                         l_bdgt_line_end_date := l_plan_end_date;
3028                  ELSE
3029                      IF is_periodic_setup = 'Y' THEN
3030                           IF is_forecast_version = 'Y' THEN
3031                               IF l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) AND
3032                                  l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3033                                  l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3034                                       l_bdgt_line_start_date := l_prd_start_date_tbl(1);
3035                               ELSIF l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) AND
3036                                     l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3037                                     l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3038                                       l_bdgt_line_start_date := l_prd_start_date_tbl(2);
3039                               ELSIF l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) AND
3040                                     l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3041                                     l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3042                                       l_bdgt_line_start_date := l_prd_start_date_tbl(3);
3043                               ELSIF l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) AND
3044                                     l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3045                                     l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3046                                       l_bdgt_line_start_date := l_prd_start_date_tbl(4);
3047                               ELSIF l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) AND
3048                                     l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3049                                     l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3050                                       l_bdgt_line_start_date := l_prd_start_date_tbl(5);
3051                               ELSIF l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) AND
3052                                     l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3053                                     l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3054                                       l_bdgt_line_start_date := l_prd_start_date_tbl(6);
3055                               ELSIF l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) AND
3056                                     l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3057                                     l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3058                                       l_bdgt_line_start_date := l_prd_start_date_tbl(7);
3059                               ELSIF l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) AND
3060                                     l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3061                                     l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3062                                       l_bdgt_line_start_date := l_prd_start_date_tbl(8);
3063                               ELSIF l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) AND
3064                                     l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3065                                     l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3066                                       l_bdgt_line_start_date := l_prd_start_date_tbl(9);
3067                               ELSIF l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) AND
3068                                     l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3069                                     l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3070                                       l_bdgt_line_start_date := l_prd_start_date_tbl(10);
3071                               ELSIF l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) AND
3072                                     l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3073                                     l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3074                                       l_bdgt_line_start_date := l_prd_start_date_tbl(11);
3075                               ELSIF l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) AND
3076                                     l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3077                                     l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3078                                       l_bdgt_line_start_date := l_prd_start_date_tbl(12);
3079                               ELSIF l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) AND
3080                                     l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3081                                     l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3082                                       l_bdgt_line_start_date := l_prd_start_date_tbl(13);
3083                               ELSIF l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) AND
3084                                     l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3085                                     l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3086                                       l_bdgt_line_start_date := l_prd_start_date_tbl(14);
3087                               ELSIF l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) AND
3088                                     l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3089                                     l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3090                                       l_bdgt_line_start_date := l_prd_start_date_tbl(15);
3091                               ELSIF l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) AND
3092                                     l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3093                                     l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3094                                       l_bdgt_line_start_date := l_prd_start_date_tbl(16);
3095                               ELSIF l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) AND
3096                                     l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3097                                     l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3098                                       l_bdgt_line_start_date := l_prd_start_date_tbl(17);
3099                               ELSIF l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) AND
3100                                     l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3101                                     l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3102                                       l_bdgt_line_start_date := l_prd_start_date_tbl(18);
3103                               ELSIF l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) AND
3104                                     l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3105                                     l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3106                                       l_bdgt_line_start_date := l_prd_start_date_tbl(19);
3107                               ELSIF l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) AND
3108                                     l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3109                                     l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3110                                       l_bdgt_line_start_date := l_prd_start_date_tbl(20);
3111                               ELSIF l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) AND
3112                                     l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3113                                     l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3114                                       l_bdgt_line_start_date := l_prd_start_date_tbl(21);
3115                               ELSIF l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) AND
3116                                     l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3117                                     l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3118                                       l_bdgt_line_start_date := l_prd_start_date_tbl(22);
3119                               ELSIF l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) AND
3120                                     l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3121                                     l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3122                                       l_bdgt_line_start_date := l_prd_start_date_tbl(23);
3123                               ELSIF l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(24) - 1)) AND
3124                                     l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3125                                     l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3126                                       l_bdgt_line_start_date := l_prd_start_date_tbl(24);
3127                               ELSIF l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) AND
3128                                     l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3129                                     l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3130                                       l_bdgt_line_start_date := l_prd_start_date_tbl(25);
3131                               ELSIF l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) AND
3132                                     l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3133                                     l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3134                                       l_bdgt_line_start_date := l_prd_start_date_tbl(26);
3135                               ELSIF l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) AND
3136                                     l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3137                                     l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3138                                       l_bdgt_line_start_date := l_prd_start_date_tbl(27);
3139                               ELSIF l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) AND
3140                                     l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3141                                     l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3142                                       l_bdgt_line_start_date := l_prd_start_date_tbl(28);
3143                               ELSIF l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) AND
3144                                     l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3145                                     l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3146                                       l_bdgt_line_start_date := l_prd_start_date_tbl(29);
3147                               ELSIF l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) AND
3148                                     l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3149                                     l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3150                                       l_bdgt_line_start_date := l_prd_start_date_tbl(30);
3151                               ELSIF l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 0)) AND
3152                                     l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3153                                     l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3154                                       l_bdgt_line_start_date := l_prd_start_date_tbl(31);
3155                               ELSIF l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) AND
3156                                     l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3157                                     l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3158                                       l_bdgt_line_start_date := l_prd_start_date_tbl(32);
3159                               ELSIF l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) AND
3160                                     l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3161                                     l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3162                                       l_bdgt_line_start_date := l_prd_start_date_tbl(33);
3163                               ELSIF l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) AND
3164                                     l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3165                                     l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3166                                       l_bdgt_line_start_date := l_prd_start_date_tbl(34);
3167                               ELSIF l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) AND
3168                                     l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3169                                     l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3170                                       l_bdgt_line_start_date := l_prd_start_date_tbl(35);
3171                               ELSIF l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) AND
3172                                     l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3173                                     l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3174                                       l_bdgt_line_start_date := l_prd_start_date_tbl(36);
3175                               ELSIF l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) AND
3176                                     l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3177                                     l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3178                                       l_bdgt_line_start_date := l_prd_start_date_tbl(37);
3179                               ELSIF l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) AND
3180                                     l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3181                                     l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3182                                       l_bdgt_line_start_date := l_prd_start_date_tbl(38);
3183                               ELSIF l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) AND
3184                                     l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3185                                     l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3186                                       l_bdgt_line_start_date := l_prd_start_date_tbl(39);
3187                               ELSIF l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) AND
3188                                     l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3189                                     l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3190                                       l_bdgt_line_start_date := l_prd_start_date_tbl(40);
3191                               ELSIF l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) AND
3192                                     l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3193                                     l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3194                                       l_bdgt_line_start_date := l_prd_start_date_tbl(41);
3195                               ELSIF l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) AND
3196                                     l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3197                                     l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3198                                       l_bdgt_line_start_date := l_prd_start_date_tbl(42);
3199                               ELSIF l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) AND
3200                                     l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3201                                     l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3202                                       l_bdgt_line_start_date := l_prd_start_date_tbl(43);
3203                               ELSIF l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) AND
3204                                     l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3205                                     l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3206                                       l_bdgt_line_start_date := l_prd_start_date_tbl(44);
3207                               ELSIF l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) AND
3208                                     l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
3209                                     l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
3210                                       l_bdgt_line_start_date := l_prd_start_date_tbl(45);
3211                               ELSIF l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) AND
3212                                     l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3213                                     l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3214                                       l_bdgt_line_start_date := l_prd_start_date_tbl(46);
3215                               ELSIF l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) AND
3216                                     l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3217                                     l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3218                                       l_bdgt_line_start_date := l_prd_start_date_tbl(47);
3219                               ELSIF l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) AND
3220                                     l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3221                                     l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3222                                       l_bdgt_line_start_date := l_prd_start_date_tbl(48);
3223                               ELSIF l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) AND
3224                                     l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3225                                     l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3226                                       l_bdgt_line_start_date := l_prd_start_date_tbl(49);
3227                               ELSIF l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) AND
3228                                     l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3229                                     l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3230                                       l_bdgt_line_start_date := l_prd_start_date_tbl(50);
3231                               ELSIF l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) AND
3232                                     l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3233                                     l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3234                                       l_bdgt_line_start_date := l_prd_start_date_tbl(51);
3235                               ELSIF l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) AND
3236                                     l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3237                                     l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3238                                       l_bdgt_line_start_date := l_prd_start_date_tbl(52);
3239                               END IF;
3240                           ELSE  -- budget version
3241                               IF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3242                                  l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3243                                      l_bdgt_line_start_date := l_prd_start_date_tbl(1);
3244                               ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3245                                     l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3246                                      l_bdgt_line_start_date := l_prd_start_date_tbl(2);
3247                               ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3248                                     l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3249                                      l_bdgt_line_start_date := l_prd_start_date_tbl(3);
3250                               ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3251                                     l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3252                                      l_bdgt_line_start_date := l_prd_start_date_tbl(4);
3253                               ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3254                                     l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3255                                      l_bdgt_line_start_date := l_prd_start_date_tbl(5);
3256                               ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3257                                     l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3258                                      l_bdgt_line_start_date := l_prd_start_date_tbl(6);
3259                               ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3260                                     l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3261                                      l_bdgt_line_start_date := l_prd_start_date_tbl(7);
3262                               ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3263                                     l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3264                                      l_bdgt_line_start_date := l_prd_start_date_tbl(8);
3265                               ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3266                                     l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3267                                      l_bdgt_line_start_date := l_prd_start_date_tbl(9);
3268                               ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3269                                     l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3270                                      l_bdgt_line_start_date := l_prd_start_date_tbl(10);
3271                               ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3272                                     l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3273                                      l_bdgt_line_start_date := l_prd_start_date_tbl(11);
3274                               ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3275                                     l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3276                                      l_bdgt_line_start_date := l_prd_start_date_tbl(12);
3277                               ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3278                                     l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3279                                      l_bdgt_line_start_date := l_prd_start_date_tbl(13);
3280                               ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3281                                     l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3282                                      l_bdgt_line_start_date := l_prd_start_date_tbl(14);
3283                               ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3284                                     l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3285                                      l_bdgt_line_start_date := l_prd_start_date_tbl(15);
3286                               ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3287                                     l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3288                                      l_bdgt_line_start_date := l_prd_start_date_tbl(16);
3289                               ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3290                                     l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3291                                      l_bdgt_line_start_date := l_prd_start_date_tbl(17);
3292                               ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3293                                     l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3294                                      l_bdgt_line_start_date := l_prd_start_date_tbl(18);
3295                               ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3296                                     l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3297                                      l_bdgt_line_start_date := l_prd_start_date_tbl(19);
3298                               ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3299                                     l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3300                                      l_bdgt_line_start_date := l_prd_start_date_tbl(20);
3301                               ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3302                                     l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3303                                      l_bdgt_line_start_date := l_prd_start_date_tbl(21);
3304                               ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3305                                     l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3306                                      l_bdgt_line_start_date := l_prd_start_date_tbl(22);
3307                               ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3308                                     l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3309                                      l_bdgt_line_start_date := l_prd_start_date_tbl(23);
3310                               ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3311                                     l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3312                                      l_bdgt_line_start_date := l_prd_start_date_tbl(24);
3313                               ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3314                                     l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3315                                      l_bdgt_line_start_date := l_prd_start_date_tbl(25);
3316                               ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3317                                     l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3318                                      l_bdgt_line_start_date := l_prd_start_date_tbl(26);
3319                               ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3320                                     l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3321                                      l_bdgt_line_start_date := l_prd_start_date_tbl(27);
3322                               ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3323                                     l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3324                                      l_bdgt_line_start_date := l_prd_start_date_tbl(28);
3325                               ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3326                                     l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3327                                      l_bdgt_line_start_date := l_prd_start_date_tbl(29);
3328                               ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3329                                     l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3330                                      l_bdgt_line_start_date := l_prd_start_date_tbl(30);
3331                               ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3332                                     l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3333                                      l_bdgt_line_start_date := l_prd_start_date_tbl(31);
3334                               ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3335                                     l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3336                                      l_bdgt_line_start_date := l_prd_start_date_tbl(32);
3337                               ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3338                                     l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3339                                      l_bdgt_line_start_date := l_prd_start_date_tbl(33);
3340                               ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3341                                     l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3342                                      l_bdgt_line_start_date := l_prd_start_date_tbl(34);
3343                               ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3344                                     l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3345                                      l_bdgt_line_start_date := l_prd_start_date_tbl(35);
3346                               ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3347                                     l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3348                                      l_bdgt_line_start_date := l_prd_start_date_tbl(36);
3349                               ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3350                                     l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3351                                      l_bdgt_line_start_date := l_prd_start_date_tbl(37);
3352                               ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3353                                     l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3354                                      l_bdgt_line_start_date := l_prd_start_date_tbl(38);
3355                               ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3356                                     l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3357                                      l_bdgt_line_start_date := l_prd_start_date_tbl(39);
3358                               ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3359                                     l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3360                                      l_bdgt_line_start_date := l_prd_start_date_tbl(40);
3361                               ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3362                                     l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3363                                      l_bdgt_line_start_date := l_prd_start_date_tbl(41);
3364                               ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3365                                     l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3366                                      l_bdgt_line_start_date := l_prd_start_date_tbl(42);
3367                               ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3368                                     l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3369                                      l_bdgt_line_start_date := l_prd_start_date_tbl(43);
3370                               ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3371                                     l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3372                                      l_bdgt_line_start_date := l_prd_start_date_tbl(44);
3373                               ELSIF l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
3374                                     l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
3375                                      l_bdgt_line_start_date := l_prd_start_date_tbl(45);
3376                               ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3377                                     l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3378                                      l_bdgt_line_start_date := l_prd_start_date_tbl(46);
3379                               ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3380                                     l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3381                                      l_bdgt_line_start_date := l_prd_start_date_tbl(47);
3382                               ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3383                                     l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3384                                      l_bdgt_line_start_date := l_prd_start_date_tbl(48);
3385                               ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3386                                     l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3387                                      l_bdgt_line_start_date := l_prd_start_date_tbl(49);
3388                               ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3389                                     l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3390                                      l_bdgt_line_start_date := l_prd_start_date_tbl(50);
3391                               ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3392                                     l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3393                                      l_bdgt_line_start_date := l_prd_start_date_tbl(51);
3394                               ELSIF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3395                                     l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3396                                      l_bdgt_line_start_date := l_prd_start_date_tbl(52);
3397                               END IF;
3398                           END IF;
3399 
3400                           -- for budget line end dates
3401                           IF is_forecast_version = 'Y' THEN
3402                               IF l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) AND
3403                                  l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3404                                  l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3405                                       l_bdgt_line_end_date := l_prd_end_date_tbl(52);
3406                               ELSIF l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) AND
3407                                     l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3408                                     l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3409                                       l_bdgt_line_end_date := l_prd_end_date_tbl(51);
3410                               ELSIF l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) AND
3411                                     l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3412                                     l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3413                                       l_bdgt_line_end_date := l_prd_end_date_tbl(50);
3414                               ELSIF l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) AND
3415                                     l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3416                                     l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3417                                       l_bdgt_line_end_date := l_prd_end_date_tbl(49);
3418                               ELSIF l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) AND
3419                                     l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3420                                     l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3421                                       l_bdgt_line_end_date := l_prd_end_date_tbl(48);
3422                               ELSIF l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) AND
3423                                     l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3424                                     l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3425                                       l_bdgt_line_end_date := l_prd_end_date_tbl(47);
3426                               ELSIF l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) AND
3427                                     l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3428                                     l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3429                                       l_bdgt_line_end_date := l_prd_end_date_tbl(46);
3430                               ELSIF l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) AND
3431                                     l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
3432                                     l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
3433                                       l_bdgt_line_end_date := l_prd_end_date_tbl(45);
3434                               ELSIF l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) AND
3435                                     l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3436                                     l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3437                                       l_bdgt_line_end_date := l_prd_end_date_tbl(44);
3438                               ELSIF l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) AND
3439                                     l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3440                                     l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3441                                       l_bdgt_line_end_date := l_prd_end_date_tbl(43);
3442                               ELSIF l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) AND
3443                                     l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3444                                     l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3445                                       l_bdgt_line_end_date := l_prd_end_date_tbl(42);
3446                               ELSIF l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) AND
3447                                     l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3448                                     l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3449                                       l_bdgt_line_end_date := l_prd_end_date_tbl(41);
3450                               ELSIF l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) AND
3451                                     l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3452                                     l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3453                                       l_bdgt_line_end_date := l_prd_end_date_tbl(40);
3454                               ELSIF l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) AND
3455                                     l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3456                                     l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3457                                       l_bdgt_line_end_date := l_prd_end_date_tbl(39);
3458                               ELSIF l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) AND
3459                                     l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3460                                     l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3461                                       l_bdgt_line_end_date := l_prd_end_date_tbl(38);
3462                               ELSIF l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) AND
3463                                     l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3464                                     l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3465                                       l_bdgt_line_end_date := l_prd_end_date_tbl(37);
3466                               ELSIF l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) AND
3467                                     l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3468                                     l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3469                                       l_bdgt_line_end_date := l_prd_end_date_tbl(36);
3470                               ELSIF l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) AND
3471                                     l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3472                                     l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3473                                       l_bdgt_line_end_date := l_prd_end_date_tbl(35);
3474                               ELSIF l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) AND
3475                                     l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3476                                     l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3477                                       l_bdgt_line_end_date := l_prd_end_date_tbl(34);
3478                               ELSIF l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) AND
3479                                     l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3480                                     l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3481                                       l_bdgt_line_end_date := l_prd_end_date_tbl(33);
3482                               ELSIF l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) AND
3483                                     l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3484                                     l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3485                                       l_bdgt_line_end_date := l_prd_end_date_tbl(32);
3486                               ELSIF l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 1)) AND
3487                                     l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3488                                     l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3489                                       l_bdgt_line_end_date := l_prd_end_date_tbl(31);
3490                               ELSIF l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) AND
3491                                     l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3492                                     l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3493                                       l_bdgt_line_end_date := l_prd_end_date_tbl(30);
3494                               ELSIF l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) AND
3495                                     l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3496                                     l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3497                                       l_bdgt_line_end_date := l_prd_end_date_tbl(29);
3498                               ELSIF l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) AND
3499                                     l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3500                                     l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3501                                       l_bdgt_line_end_date := l_prd_end_date_tbl(28);
3502                               ELSIF l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) AND
3503                                     l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3504                                     l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3505                                       l_bdgt_line_end_date := l_prd_end_date_tbl(27);
3506                               ELSIF l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) AND
3507                                     l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3508                                     l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3509                                       l_bdgt_line_end_date := l_prd_end_date_tbl(26);
3510                               ELSIF l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) AND
3511                                     l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3512                                     l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3513                                       l_bdgt_line_end_date := l_prd_end_date_tbl(25);
3514                               ELSIF l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(24) - 1)) AND
3515                                     l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3516                                     l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3517                                       l_bdgt_line_end_date := l_prd_end_date_tbl(24);
3518                               ELSIF l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) AND
3519                                     l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3520                                     l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3521                                       l_bdgt_line_end_date := l_prd_end_date_tbl(23);
3522                               ELSIF l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) AND
3523                                     l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3524                                     l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3525                                       l_bdgt_line_end_date := l_prd_end_date_tbl(22);
3526                               ELSIF l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) AND
3527                                     l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3528                                     l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3529                                       l_bdgt_line_end_date := l_prd_end_date_tbl(21);
3530                               ELSIF l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) AND
3531                                     l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3532                                     l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3533                                       l_bdgt_line_end_date := l_prd_end_date_tbl(20);
3534                               ELSIF l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) AND
3535                                     l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3536                                     l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3537                                       l_bdgt_line_end_date := l_prd_end_date_tbl(19);
3538                               ELSIF l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) AND
3539                                     l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3540                                     l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3541                                       l_bdgt_line_end_date := l_prd_end_date_tbl(18);
3542                               ELSIF l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) AND
3543                                     l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3544                                     l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3545                                       l_bdgt_line_end_date := l_prd_end_date_tbl(17);
3546                               ELSIF l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) AND
3547                                     l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3548                                     l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3549                                       l_bdgt_line_end_date := l_prd_end_date_tbl(16);
3550                               ELSIF l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) AND
3551                                     l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3552                                     l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3553                                       l_bdgt_line_end_date := l_prd_end_date_tbl(15);
3554                               ELSIF l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) AND
3555                                     l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3556                                     l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3557                                       l_bdgt_line_end_date := l_prd_end_date_tbl(14);
3558                               ELSIF l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) AND
3559                                     l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3560                                     l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3561                                       l_bdgt_line_end_date := l_prd_end_date_tbl(13);
3562                               ELSIF l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) AND
3563                                     l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3564                                     l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3565                                       l_bdgt_line_end_date := l_prd_end_date_tbl(12);
3566                               ELSIF l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) AND
3567                                     l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3568                                     l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3569                                       l_bdgt_line_end_date := l_prd_end_date_tbl(11);
3570                               ELSIF l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) AND
3571                                     l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3572                                     l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3573                                       l_bdgt_line_end_date := l_prd_end_date_tbl(10);
3574                               ELSIF l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) AND
3575                                     l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3576                                     l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3577                                       l_bdgt_line_end_date := l_prd_end_date_tbl(9);
3578                               ELSIF l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) AND
3579                                     l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3580                                     l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3581                                       l_bdgt_line_end_date := l_prd_end_date_tbl(8);
3582                               ELSIF l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) AND
3583                                     l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3584                                     l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3585                                       l_bdgt_line_end_date := l_prd_end_date_tbl(7);
3586                               ELSIF l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) AND
3587                                     l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3588                                     l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3589                                       l_bdgt_line_end_date := l_prd_end_date_tbl(6);
3590                               ELSIF l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) AND
3591                                     l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3592                                     l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3593                                       l_bdgt_line_end_date := l_prd_end_date_tbl(5);
3594                               ELSIF l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) AND
3595                                     l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3596                                     l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3597                                       l_bdgt_line_end_date := l_prd_end_date_tbl(4);
3598                               ELSIF l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) AND
3599                                     l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3600                                     l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3601                                       l_bdgt_line_end_date := l_prd_end_date_tbl(3);
3602                               ELSIF l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) AND
3603                                     l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3604                                     l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3605                                       l_bdgt_line_end_date := l_prd_end_date_tbl(2);
3606                               ELSIF l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) AND
3607                                     l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3608                                     l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3609                                       l_bdgt_line_end_date := l_prd_end_date_tbl(1);
3610                               END IF;
3611                           ELSE  -- budget version
3612                               IF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3613                                  l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3614                                      l_bdgt_line_end_date := l_prd_end_date_tbl(52);
3615                               ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3616                                     l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3617                                      l_bdgt_line_end_date := l_prd_end_date_tbl(51);
3618                               ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3619                                     l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3620                                      l_bdgt_line_end_date := l_prd_end_date_tbl(50);
3621                               ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3622                                     l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3623                                      l_bdgt_line_end_date := l_prd_end_date_tbl(49);
3624                               ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3625                                     l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3626                                      l_bdgt_line_end_date := l_prd_end_date_tbl(48);
3627                               ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3628                                     l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3629                                      l_bdgt_line_end_date := l_prd_end_date_tbl(47);
3630                               ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3631                                     l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3632                                      l_bdgt_line_end_date := l_prd_end_date_tbl(46);
3633                               ELSIF l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
3634                                     l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
3635                                      l_bdgt_line_end_date := l_prd_end_date_tbl(45);
3636                               ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3637                                     l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3638                                      l_bdgt_line_end_date := l_prd_end_date_tbl(44);
3639                               ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3640                                     l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3641                                      l_bdgt_line_end_date := l_prd_end_date_tbl(43);
3642                               ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3643                                     l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3644                                      l_bdgt_line_end_date := l_prd_end_date_tbl(42);
3645                               ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3646                                     l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3647                                      l_bdgt_line_end_date := l_prd_end_date_tbl(41);
3648                               ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3649                                     l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3650                                      l_bdgt_line_end_date := l_prd_end_date_tbl(40);
3651                               ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3652                                     l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3653                                      l_bdgt_line_end_date := l_prd_end_date_tbl(39);
3654                               ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3655                                     l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3656                                      l_bdgt_line_end_date := l_prd_end_date_tbl(38);
3657                               ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3658                                     l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3659                                      l_bdgt_line_end_date := l_prd_end_date_tbl(37);
3660                               ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3661                                     l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3662                                      l_bdgt_line_end_date := l_prd_end_date_tbl(36);
3663                               ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3664                                     l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3665                                      l_bdgt_line_end_date := l_prd_end_date_tbl(35);
3666                               ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3667                                     l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3668                                      l_bdgt_line_end_date := l_prd_end_date_tbl(34);
3669                               ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3670                                     l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3671                                      l_bdgt_line_end_date := l_prd_end_date_tbl(33);
3672                               ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3673                                     l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3674                                      l_bdgt_line_end_date := l_prd_end_date_tbl(32);
3675                               ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3676                                     l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3677                                      l_bdgt_line_end_date := l_prd_end_date_tbl(31);
3678                               ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3679                                     l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3680                                      l_bdgt_line_end_date := l_prd_end_date_tbl(30);
3681                               ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3682                                     l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3683                                      l_bdgt_line_end_date := l_prd_end_date_tbl(29);
3684                               ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3685                                     l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3686                                      l_bdgt_line_end_date := l_prd_end_date_tbl(28);
3687                               ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3688                                     l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3689                                      l_bdgt_line_end_date := l_prd_end_date_tbl(27);
3690                               ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3691                                     l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3692                                      l_bdgt_line_end_date := l_prd_end_date_tbl(26);
3693                               ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3694                                     l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3695                                      l_bdgt_line_end_date := l_prd_end_date_tbl(25);
3696                               ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3697                                     l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3698                                      l_bdgt_line_end_date := l_prd_end_date_tbl(24);
3699                               ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3700                                     l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3701                                      l_bdgt_line_end_date := l_prd_end_date_tbl(23);
3702                               ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3703                                     l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3704                                      l_bdgt_line_end_date := l_prd_end_date_tbl(22);
3705                               ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3706                                     l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3707                                      l_bdgt_line_end_date := l_prd_end_date_tbl(21);
3708                               ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3709                                     l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3710                                      l_bdgt_line_end_date := l_prd_end_date_tbl(20);
3711                               ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3712                                     l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3713                                      l_bdgt_line_end_date := l_prd_end_date_tbl(19);
3714                               ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3715                                     l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3716                                      l_bdgt_line_end_date := l_prd_end_date_tbl(18);
3717                               ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3718                                     l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3719                                      l_bdgt_line_end_date := l_prd_end_date_tbl(17);
3720                               ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3721                                     l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3722                                      l_bdgt_line_end_date := l_prd_end_date_tbl(16);
3723                               ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3724                                     l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3725                                      l_bdgt_line_end_date := l_prd_end_date_tbl(15);
3726                               ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3727                                     l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3728                                      l_bdgt_line_end_date := l_prd_end_date_tbl(14);
3729                               ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3730                                     l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3731                                      l_bdgt_line_end_date := l_prd_end_date_tbl(13);
3732                               ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3733                                     l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3734                                      l_bdgt_line_end_date := l_prd_end_date_tbl(12);
3735                               ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3736                                     l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3737                                      l_bdgt_line_end_date := l_prd_end_date_tbl(11);
3738                               ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3739                                     l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3740                                      l_bdgt_line_end_date := l_prd_end_date_tbl(10);
3741                               ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3742                                     l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3743                                      l_bdgt_line_end_date := l_prd_end_date_tbl(9);
3744                               ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3745                                     l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3746                                      l_bdgt_line_end_date := l_prd_end_date_tbl(8);
3747                               ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3748                                     l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3749                                      l_bdgt_line_end_date := l_prd_end_date_tbl(7);
3750                               ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3751                                     l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3752                                      l_bdgt_line_end_date := l_prd_end_date_tbl(6);
3753                               ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3754                                     l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3755                                      l_bdgt_line_end_date := l_prd_end_date_tbl(5);
3756                               ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3757                                     l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3758                                      l_bdgt_line_end_date := l_prd_end_date_tbl(4);
3759                               ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3760                                     l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3761                                      l_bdgt_line_end_date := l_prd_end_date_tbl(3);
3762                               ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3763                                     l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3764                                      l_bdgt_line_end_date := l_prd_end_date_tbl(2);
3765                               ELSIF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3766                                     l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3767                                      l_bdgt_line_end_date := l_prd_end_date_tbl(1);
3768                               END IF;
3769                           END IF;
3770 
3771                      ELSE  -- non periodic
3772                           IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
3773                              l_cached_ra_id_tbl(l_cached_ra_index) = -1 THEN
3774                               -- populating the planning start/end dates as the budget line start/end dates
3775                               l_bdgt_line_start_date := l_inf_tbl_data_curr_rec.planning_start_date;
3776                               l_bdgt_line_end_date := l_inf_tbl_data_curr_rec.planning_end_date;
3777                           ELSE
3778                               l_bdgt_line_start_date := l_plan_start_date;
3779                               l_bdgt_line_end_date := l_plan_end_date;
3780                           END IF;
3781 
3782                      END IF;
3783                 END IF;
3784                 -- budget line dates processing ends
3785 
3786                 -- derivation of amounts i.e. raw cost, burdened cost, revenue,
3787                 -- quantity, raw cost rate, burdened cost, bill rate
3788                 IF l_inf_tbl_data_curr_rec.delete_flag = 'Y' THEN
3789                      IF is_periodic_setup = 'Y' THEN
3790                          IF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_RAW_COST' THEN
3791                              l_raw_cost := l_fnd_miss_num;
3792                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_RAW_COST' THEN
3793                              l_raw_cost := l_fnd_miss_num;
3794                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_RAW_COST' THEN
3795                              l_etc_raw_cost := l_fnd_miss_num;
3796                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_BURDENED_COST' THEN
3797                              l_burdened_cost := l_fnd_miss_num;
3798                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_BURDENED_COST' THEN
3799                              l_burdened_cost := l_fnd_miss_num;
3800                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_BURDENED_COST' THEN
3801                              l_etc_burdened_cost := l_fnd_miss_num;
3802                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_REV' THEN
3803                              l_revenue := l_fnd_miss_num;
3804                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_REVENUE' THEN
3805                              l_revenue := l_fnd_miss_num;
3806                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_REVENUE' THEN
3807                              l_etc_revenue := l_fnd_miss_num;
3808                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_QTY' THEN
3809                              l_quantity := l_fnd_miss_num;
3810                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_QTY' THEN
3811                              l_quantity := l_fnd_miss_num;
3812                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_QTY' THEN
3813                              l_etc_quantity := l_fnd_miss_num;
3814                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') THEN
3815                              l_rc_rate := l_fnd_miss_num;
3816                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('BURDENED_COST_RATE','ETC_BURDENED_COST_RATE') THEN
3817                              l_bc_rate := l_fnd_miss_num;
3818                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') THEN
3819                              l_bill_rate := l_fnd_miss_num;
3820                          END IF;
3821 
3822                      ELSE
3823                          l_raw_cost          := l_fnd_miss_num;
3824                          l_burdened_cost     := l_fnd_miss_num;
3825                          l_revenue           := l_fnd_miss_num;
3826                          l_quantity          := l_fnd_miss_num;
3827                          l_etc_quantity      := l_fnd_miss_num;
3828                          l_etc_raw_cost      := l_fnd_miss_num;
3829                          l_etc_burdened_cost := l_fnd_miss_num;
3830                          l_etc_revenue       := l_fnd_miss_num;
3831 
3832                          l_rc_rate := l_fnd_miss_num;
3833                          l_bc_rate := l_fnd_miss_num;
3834                          l_bill_rate := l_fnd_miss_num;
3835                      END IF;
3836 
3837                 ELSE
3838                      IF is_periodic_setup = 'Y' THEN
3839                            -- summing up periods for for particular amount type
3840                            l_amount:=0;
3841                            l_tmp_sum_amt:=0;
3842                            l_not_null_period_cnt:=0;
3843                            FOR tt IN 1..52 LOOP
3844 
3845                                 l_amount:=0;
3846                                 IF tt =1 THEN
3847                                     l_amount := l_inf_tbl_data_curr_rec.prd1;
3848                                 ELSIF tt =2 THEN
3849                                     l_amount := l_inf_tbl_data_curr_rec.prd2;
3850                                 ELSIF tt =3 THEN
3851                                     l_amount := l_inf_tbl_data_curr_rec.prd3;
3852                                 ELSIF tt =4 THEN
3853                                     l_amount := l_inf_tbl_data_curr_rec.prd4;
3854                                 ELSIF tt =5 THEN
3855                                     l_amount := l_inf_tbl_data_curr_rec.prd5;
3856                                 ELSIF tt =6 THEN
3857                                     l_amount := l_inf_tbl_data_curr_rec.prd6;
3858                                 ELSIF tt =7 THEN
3859                                     l_amount := l_inf_tbl_data_curr_rec.prd7;
3860                                 ELSIF tt =8 THEN
3861                                     l_amount := l_inf_tbl_data_curr_rec.prd8;
3862                                 ELSIF tt =9 THEN
3863                                     l_amount := l_inf_tbl_data_curr_rec.prd9;
3864                                 ELSIF tt =10 THEN
3865                                     l_amount := l_inf_tbl_data_curr_rec.prd10;
3866                                 ELSIF tt =11 THEN
3867                                     l_amount := l_inf_tbl_data_curr_rec.prd11;
3868                                 ELSIF tt =12 THEN
3869                                     l_amount := l_inf_tbl_data_curr_rec.prd12;
3870                                 ELSIF tt =13 THEN
3871                                     l_amount := l_inf_tbl_data_curr_rec.prd13;
3872                                 ELSIF tt =14 THEN
3873                                     l_amount := l_inf_tbl_data_curr_rec.prd14;
3874                                 ELSIF tt =15 THEN
3875                                     l_amount := l_inf_tbl_data_curr_rec.prd15;
3876                                 ELSIF tt =16 THEN
3877                                     l_amount := l_inf_tbl_data_curr_rec.prd16;
3878                                 ELSIF tt =17 THEN
3879                                     l_amount := l_inf_tbl_data_curr_rec.prd17;
3880                                 ELSIF tt =18 THEN
3881                                     l_amount := l_inf_tbl_data_curr_rec.prd18;
3882                                 ELSIF tt =19 THEN
3883                                     l_amount := l_inf_tbl_data_curr_rec.prd19;
3884                                 ELSIF tt =20 THEN
3885                                     l_amount := l_inf_tbl_data_curr_rec.prd20;
3886                                 ELSIF tt =21 THEN
3887                                     l_amount := l_inf_tbl_data_curr_rec.prd21;
3888                                 ELSIF tt =22 THEN
3889                                     l_amount := l_inf_tbl_data_curr_rec.prd22;
3890                                 ELSIF tt =23 THEN
3891                                     l_amount := l_inf_tbl_data_curr_rec.prd23;
3892                                 ELSIF tt =24 THEN
3893                                     l_amount := l_inf_tbl_data_curr_rec.prd24;
3894                                 ELSIF tt =25 THEN
3895                                     l_amount := l_inf_tbl_data_curr_rec.prd25;
3896                                 ELSIF tt =26 THEN
3897                                     l_amount := l_inf_tbl_data_curr_rec.prd26;
3898                                 ELSIF tt =27 THEN
3899                                     l_amount := l_inf_tbl_data_curr_rec.prd27;
3900                                 ELSIF tt =28 THEN
3901                                     l_amount := l_inf_tbl_data_curr_rec.prd28;
3902                                 ELSIF tt =29 THEN
3903                                     l_amount := l_inf_tbl_data_curr_rec.prd29;
3904                                 ELSIF tt =30 THEN
3905                                     l_amount := l_inf_tbl_data_curr_rec.prd30;
3906                                 ELSIF tt =31 THEN
3907                                     l_amount := l_inf_tbl_data_curr_rec.prd31;
3908                                 ELSIF tt =32 THEN
3909                                     l_amount := l_inf_tbl_data_curr_rec.prd32;
3910                                 ELSIF tt =33 THEN
3911                                     l_amount := l_inf_tbl_data_curr_rec.prd33;
3912                                 ELSIF tt =34 THEN
3913                                     l_amount := l_inf_tbl_data_curr_rec.prd34;
3914                                 ELSIF tt =35 THEN
3915                                     l_amount := l_inf_tbl_data_curr_rec.prd35;
3916                                 ELSIF tt =36 THEN
3917                                     l_amount := l_inf_tbl_data_curr_rec.prd36;
3918                                 ELSIF tt =37 THEN
3919                                     l_amount := l_inf_tbl_data_curr_rec.prd37;
3920                                 ELSIF tt =38 THEN
3921                                     l_amount := l_inf_tbl_data_curr_rec.prd38;
3922                                 ELSIF tt =39 THEN
3923                                     l_amount := l_inf_tbl_data_curr_rec.prd39;
3924                                 ELSIF tt =40 THEN
3925                                     l_amount := l_inf_tbl_data_curr_rec.prd40;
3926                                 ELSIF tt =41 THEN
3927                                     l_amount := l_inf_tbl_data_curr_rec.prd41;
3928                                 ELSIF tt =42 THEN
3929                                     l_amount := l_inf_tbl_data_curr_rec.prd42;
3930                                 ELSIF tt =43 THEN
3931                                     l_amount := l_inf_tbl_data_curr_rec.prd43;
3932                                 ELSIF tt =44 THEN
3933                                     l_amount := l_inf_tbl_data_curr_rec.prd44;
3934                                 ELSIF tt =45 THEN
3935                                     l_amount := l_inf_tbl_data_curr_rec.prd45;
3936                                 ELSIF tt =46 THEN
3937                                     l_amount := l_inf_tbl_data_curr_rec.prd46;
3938                                 ELSIF tt =47 THEN
3939                                     l_amount := l_inf_tbl_data_curr_rec.prd47;
3940                                 ELSIF tt =48 THEN
3941                                     l_amount := l_inf_tbl_data_curr_rec.prd48;
3942                                 ELSIF tt =49 THEN
3943                                     l_amount := l_inf_tbl_data_curr_rec.prd49;
3944                                 ELSIF tt =50 THEN
3945                                     l_amount := l_inf_tbl_data_curr_rec.prd50;
3946                                 ELSIF tt =51 THEN
3947                                     l_amount := l_inf_tbl_data_curr_rec.prd51;
3948                                 ELSIF tt =52 THEN
3949                                     l_amount := l_inf_tbl_data_curr_rec.prd52;
3950                                 END IF;
3951 
3952                                 IF l_amount = l_fnd_miss_num THEN
3953 
3954                                     l_amount:= 0;
3955 
3956                                 ELSIF l_amount IS NULL THEN
3957 
3958                                     l_amount := 0;
3959 
3960                                 END IF;
3961 
3962                                 IF l_amount <> 0 THEN
3963 
3964                                     l_not_null_period_cnt := l_not_null_period_cnt+1;
3965                                     l_tmp_sum_amt := l_tmp_sum_amt+l_amount;
3966 
3967                                 END IF;
3968 
3969                            END LOOP;--FOR tt IN 1..52 LOOP
3970                      END IF;
3971                 END IF;
3972 
3973                 --log1('----- STAGE 12-------');
3974                 --log1('----- STAGE 12.1------- '||l_cached_ra_index);
3975                 --log1('----- STAGE 12.2------- '||l_cached_ra_id_tbl(l_cached_ra_index));
3976                 IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
3977                    l_cached_ra_id_tbl(l_cached_ra_index) <> -1 THEN
3978                        -- for existing RAs
3979                       -- for periodic layouts getting the start/end date of the preceeding and succeeding periods
3980                       IF is_periodic_setup = 'Y' THEN
3981                              --log1('----- STAGE 13-------');
3982                              IF l_inf_tbl_data_curr_rec.pd_prd IS NOT NULL AND
3983                                 l_inf_tbl_data_curr_rec.pd_prd <> l_fnd_miss_num THEN
3984                                     IF l_plan_start_date >= p_prd_start_date_tbl(1) THEN
3985                                           l_bdgt_line_start_date := l_first_pd_bf_pm_st_dt;
3986                                     ELSE
3987                                           l_bdgt_line_start_date := l_plan_start_date;
3988                                     END IF;
3989                              END IF;
3990 
3991                              IF l_inf_tbl_data_curr_rec.sd_prd IS NOT NULL AND
3992                                 l_inf_tbl_data_curr_rec.sd_prd <> l_fnd_miss_num THEN
3993                                     IF l_plan_end_date <= p_prd_end_date_tbl(l_original_prd_count) THEN
3994                                           l_bdgt_line_end_date := l_last_pd_af_pm_en_dt;
3995                                     ELSE
3996                                           l_bdgt_line_end_date := l_plan_end_date;
3997                                     END IF;
3998                              END IF;
3999                              --log1('----- STAGE 13.1------- '||l_bdgt_line_start_date);
4000                              --log1('----- STAGE 13.2------- '||l_bdgt_line_end_date);
4001                              --log1('----- STAGE 13.3------- '||l_plan_start_date);
4002                              --log1('----- STAGE 13.4------- '||l_plan_end_date);
4003                              -- checking if the budget line start/end dates are outside the planning date range
4004 
4005 
4006                             ---Added this code for bug#4488926. Caching the values of l_period_plan_start_date and
4007                             --l_period_plan_end_date
4008                              IF ( NOT(l_period_plan_start_date_tbl.exists(to_char(l_plan_start_date))
4009                                   AND l_period_plan_end_date_tbl.exists(to_char(l_plan_end_date))))
4010                              THEN
4011                                 --For periodic case get the start and end dates.
4012                                 l_period_plan_start_date := PA_FIN_PLAN_UTILS.get_period_start_date(l_plan_start_date,l_period_time_phased_code);
4013                                 l_period_plan_end_date :=  PA_FIN_PLAN_UTILS.get_period_end_date (l_plan_end_date ,  l_period_time_phased_code);
4014                                 l_period_plan_start_date_tbl(to_char(l_plan_start_date)) := l_period_plan_start_date;
4015                                 l_period_plan_end_date_tbl(to_char(l_plan_end_date)) := l_period_plan_end_date;
4016                              ELSE
4017                                 l_period_plan_start_date := l_period_plan_start_date_tbl(to_char(l_plan_start_date));
4018                                 l_period_plan_end_date := l_period_plan_end_date_tbl(to_char(l_plan_end_date));
4019                              END IF;
4020 
4021                              IF l_bdgt_line_start_date < l_period_plan_start_date OR
4022                                 l_bdgt_line_end_date > l_period_plan_end_date THEN
4023                                     l_err_val_code_tbl.extend(1);
4024                                     l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_BL_OUT_OF_PLAN_RANGE';
4025                                     l_err_task_id_tbl.extend(1);
4026                                     l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4027                                     l_err_rlm_id_tbl.extend(1);
4028                                     l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4029                                     l_err_txn_curr_tbl.extend(1);
4030                                     l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4031                                     l_err_amt_type_tbl.extend(1);
4032                                     l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4033 
4034                                     -- raising an exception to skip processing for the dulpicate record
4035                                     RAISE Fp_Webadi_Skip_Rec_Proc_Exc;
4036                              END IF;
4037                       END IF; -- if periodic setup
4038                 ELSE
4039                       -- for new RAs
4040                       --log1('----- STAGE 12.3------- '||is_periodic_setup);
4041                       IF is_periodic_setup = 'Y' THEN
4042                              -- for new RAs, amounts in preceding and succeeding periods cann't be entered
4043                              --log1('----- STAGE 12.4------- '|| l_inf_tbl_data_curr_rec.pd_prd);
4044                              IF l_inf_tbl_data_curr_rec.pd_prd IS NOT NULL AND
4045                                 l_inf_tbl_data_curr_rec.pd_prd <> l_fnd_miss_num THEN
4046                                     l_err_val_code_tbl.extend(1);
4047                                     l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_NW_RA_PCD_PRD_AMT_ERR';
4048                                     l_err_task_id_tbl.extend(1);
4049                                     l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4050                                     l_err_rlm_id_tbl.extend(1);
4051                                     l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4052                                     l_err_txn_curr_tbl.extend(1);
4053                                     l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4054                                     l_err_amt_type_tbl.extend(1);
4055                                     l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4056 
4057                                     -- raising an exception to skip processing for the dulpicate record
4058                                     RAISE Fp_Webadi_Skip_Rec_Proc_Exc;
4059                              END IF;
4060                              --log1('----- STAGE 12.5------- '|| l_inf_tbl_data_curr_rec.sd_prd);
4061                              IF l_inf_tbl_data_curr_rec.sd_prd IS NOT NULL AND
4062                                 l_inf_tbl_data_curr_rec.sd_prd <> l_fnd_miss_num THEN
4063                                     l_err_val_code_tbl.extend(1);
4064                                     l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_NW_RA_PCD_PRD_AMT_ERR';
4065                                     l_err_task_id_tbl.extend(1);
4066                                     l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4067                                     l_err_rlm_id_tbl.extend(1);
4068                                     l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4069                                     l_err_txn_curr_tbl.extend(1);
4070                                     l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4071                                     l_err_amt_type_tbl.extend(1);
4072                                     l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4073 
4074                                     -- raising an exception to skip processing for the dulpicate record
4075                                     RAISE Fp_Webadi_Skip_Rec_Proc_Exc;
4076                              END IF;
4077                       END IF;
4078                 END IF; -- if existing RA check
4079                 --log1('----- STAGE 15-------');
4080 
4081                 --log1('----- STAGE 16-------');
4082                 -- copying the following attributes from the first record
4083                 IF l_inf_tbl_data_curr_rec.delete_flag = 'N' THEN
4084                     IF l_plan_trans_attr_copied_flag = 'N' THEN
4085 
4086                         l_bdgt_ln_tbl_description := l_inf_tbl_data_curr_rec.description;
4087                         l_change_reason_code := l_inf_tbl_data_curr_rec.change_reason;
4088                         -- flipping the value of l_plan_trans_attr_copied_flag
4089                         l_plan_trans_attr_copied_flag := 'Y';
4090 
4091                     END IF;
4092 
4093                     IF l_cost_conv_attr_copied_flag ='N' OR
4094                        l_rev_conv_attr_copied_flag ='N' THEN
4095 
4096                         IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
4097 
4098                             IF is_periodic_setup = 'N' THEN
4099 
4100                                 l_project_cost_rate_type      := l_inf_tbl_data_curr_rec.project_cost_rate_type;
4101                                 l_project_cost_rate_date_type := l_inf_tbl_data_curr_rec.project_cost_rate_date_type;
4102                                 l_project_cost_rate_date      := l_inf_tbl_data_curr_rec.project_cost_rate_date;
4103                                 l_project_cost_exchange_rate  := l_inf_tbl_data_curr_rec.project_cost_exchange_rate;
4104                                 l_projfunc_cost_rate_type     := l_inf_tbl_data_curr_rec.projfunc_cost_rate_type;
4105                                 l_projfunc_cost_rate_date_type:= l_inf_tbl_data_curr_rec.projfunc_cost_rate_date_type;
4106                                 l_projfunc_cost_rate_date     := l_inf_tbl_data_curr_rec.projfunc_cost_rate_date;
4107                                 l_projfunc_cost_exchange_rate := l_inf_tbl_data_curr_rec.projfunc_cost_exchange_rate;
4108 
4109                                 l_project_rev_rate_type       := l_inf_tbl_data_curr_rec.project_rev_rate_type;
4110                                 l_project_rev_rate_date_type  := l_inf_tbl_data_curr_rec.project_rev_rate_date_type;
4111                                 l_project_rev_rate_date       := l_inf_tbl_data_curr_rec.project_rev_rate_date;
4112                                 l_project_rev_exchange_rate   := l_inf_tbl_data_curr_rec.project_rev_exchange_rate;
4113                                 l_projfunc_rev_rate_type      := l_inf_tbl_data_curr_rec.projfunc_rev_rate_type;
4114                                 l_projfunc_rev_rate_date_type := l_inf_tbl_data_curr_rec.projfunc_rev_rate_date_type;
4115                                 l_projfunc_rev_rate_date      := l_inf_tbl_data_curr_rec.projfunc_rev_rate_date;
4116                                 l_projfunc_rev_exchange_rate  := l_inf_tbl_data_curr_rec.projfunc_rev_exchange_rate;
4117 
4118                                 l_cost_conv_attr_copied_flag :='Y';
4119                                 l_rev_conv_attr_copied_flag := 'Y';
4120 
4121                             ELSE--Periodic Setup
4122 
4123                                 IF l_cost_conv_attr_copied_flag ='N' AND
4124                                    l_inf_tbl_data_curr_rec.amount_type_code IN ('TOTAL_BURDENED_COST',
4125                                                                                 'TOTAL_RAW_COST',
4126                                                                                 'BURDENED_COST_RATE',
4127                                                                                 'RAW_COST_RATE',
4128                                                                                 'FCST_BURDENED_COST',
4129                                                                                 'ETC_BURDENED_COST',
4130                                                                                 'FCST_RAW_COST',
4131                                                                                 'ETC_RAW_COST',
4132                                                                                 'ETC_BURDENED_COST_RATE',
4133                                                                                 'ETC_RAW_COST_RATE')  THEN
4134 
4135                                     l_cost_conv_attr_copied_flag  := 'Y';
4136                                     l_project_cost_rate_type       := l_inf_tbl_data_curr_rec.project_rate_type;
4137                                     l_project_cost_rate_date_type  := l_inf_tbl_data_curr_rec.project_rate_date_type;
4138                                     l_project_cost_rate_date       := l_inf_tbl_data_curr_rec.project_rate_date;
4139                                     l_project_cost_exchange_rate   := l_inf_tbl_data_curr_rec.project_exchange_rate;
4140                                     l_projfunc_cost_rate_type      := l_inf_tbl_data_curr_rec.projfunc_rate_type;
4141                                     l_projfunc_cost_rate_date_type := l_inf_tbl_data_curr_rec.projfunc_rate_date_type;
4142                                     l_projfunc_cost_rate_date      := l_inf_tbl_data_curr_rec.projfunc_rate_date;
4143                                     l_projfunc_cost_exchange_rate  := l_inf_tbl_data_curr_rec.projfunc_exchange_rate;
4144 
4145                                 ELSIF l_rev_conv_attr_copied_flag ='N' AND
4146                                       l_inf_tbl_data_curr_rec.amount_type_code IN ('TOTAL_REV',
4147                                                                                    'BILL_RATE',
4148                                                                                    'FCST_REVENUE',
4149                                                                                    'ETC_REVENUE',
4150                                                                                    'ETC_BILL_RATE')  THEN
4151 
4152                                     l_rev_conv_attr_copied_flag  := 'Y';
4153                                     l_project_rev_rate_type      := l_inf_tbl_data_curr_rec.project_rate_type;
4154                                     l_project_rev_rate_date_type := l_inf_tbl_data_curr_rec.project_rate_date_type;
4155                                     l_project_rev_rate_date      := l_inf_tbl_data_curr_rec.project_rate_date;
4156                                     l_project_rev_exchange_rate  := l_inf_tbl_data_curr_rec.project_exchange_rate;
4157                                     l_projfunc_rev_rate_type     := l_inf_tbl_data_curr_rec.projfunc_rate_type;
4158                                     l_projfunc_rev_rate_date_type:= l_inf_tbl_data_curr_rec.projfunc_rate_date_type;
4159                                     l_projfunc_rev_rate_date     := l_inf_tbl_data_curr_rec.projfunc_rate_date;
4160                                     l_projfunc_rev_exchange_rate := l_inf_tbl_data_curr_rec.projfunc_exchange_rate;
4161 
4162                                 END IF;
4163 
4164                             END IF;--IF is_periodic_setup = 'N' THEN
4165 
4166                             --log1('l_project_cost_rate_type = ' || l_project_cost_rate_type);
4167                             --log1('l_project_cost_rate_date_type = ' || l_project_cost_rate_date_type);
4168                             --log1('-- to_char(l_project_cost_rate_date)-1-- ' || to_char(l_project_cost_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4169                             --log1('-- to_char(l_project_cost_rate_date)-2-- ' || to_char(l_project_cost_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4170                             --log1('l_projfunc_cost_rate_type = ' || l_projfunc_cost_rate_type);
4171                             --log1('l_projfunc_cost_rate_date_type = ' || l_projfunc_cost_rate_date_type);
4172                             --log1('-- to_char(l_projfunc_cost_rate_date)--1- ' || to_char(l_projfunc_cost_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4173                             --log1('-- to_char(l_projfunc_cost_rate_date)--2- ' || to_char(l_projfunc_cost_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4174                             --log1('l_project_rev_rate_type = ' || l_project_rev_rate_type);
4175                             --log1('l_project_rev_rate_date_type = ' || l_project_rev_rate_date_type);
4176                             --log1('-- to_char(l_project_rev_rate_date)-1-- ' || to_char(l_project_rev_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4177                             --log1('-- to_char(l_project_rev_rate_date)-2-- ' || to_char(l_project_rev_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4178                             --log1('l_projfunc_rev_rate_type = ' || l_projfunc_rev_rate_type);
4179                             --log1('l_projfunc_rev_rate_date_type = ' || l_projfunc_rev_rate_date_type);
4180                             --log1('-- to_char(l_projfunc_rev_rate_date)-1-- ' || to_char(l_projfunc_rev_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4181                             --log1('-- to_char(l_projfunc_rev_rate_date)-2-- ' || to_char(l_projfunc_rev_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4182 
4183                         END IF;--IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
4184 
4185                     END IF;--IF l_cost_conv_attr_copied_flag ='N' OR
4186                 END IF;
4187                 -- nulling out the next record
4188                l_inf_tbl_data_next_rec := NULL;
4189                -- fetching the next record
4190                FETCH inf_tbl_data_csr INTO l_inf_tbl_data_next_rec;
4191                --log1('----- STAGE 19-------');
4192                IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
4193                   l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
4194                   l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id AND
4195                   Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') = Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') THEN
4196 
4197                       IF is_periodic_setup = 'Y' THEN
4198                            IF l_inf_tbl_data_curr_rec.amount_type_code = l_inf_tbl_data_next_rec.amount_type_code THEN
4199                                  -- populating the error codes to call process_errors at the end
4200                                  IF l_debug_mode = 'Y' THEN
4201                                     pa_debug.g_err_stage := 'Duplicate record found';
4202                                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4203                                  END IF;
4204 
4205                                  l_err_val_code_tbl.extend(1);
4206                                  l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_DUPL_REC_PASSED';
4207                                  l_err_task_id_tbl.extend(1);
4208                                  l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4209                                  l_err_rlm_id_tbl.extend(1);
4210                                  l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4211                                  l_err_txn_curr_tbl.extend(1);
4212                                  l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4213                                  l_err_amt_type_tbl.extend(1);
4214                                  l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4215 
4216                                  -- raising an exception to skip processing for the dulpicate record
4217                                  RAISE Fp_Webadi_Skip_Dup_Rec_Exc;
4218                            END IF;
4219                       ELSE
4220                            -- populating the error codes to call process_errors at the end
4221                            IF l_debug_mode = 'Y' THEN
4222                               pa_debug.g_err_stage := 'Duplicate record found';
4223                               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4224                            END IF;
4225 
4226                            l_err_val_code_tbl.extend(1);
4227                            l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_DUPL_REC_PASSED';
4228                            l_err_task_id_tbl.extend(1);
4229                            l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4230                            l_err_rlm_id_tbl.extend(1);
4231                            l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4232                            l_err_txn_curr_tbl.extend(1);
4233                            l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4234 
4235                            -- raising an exception to skip processing for the dulpicate record
4236                            RAISE Fp_Webadi_Skip_Dup_Rec_Exc;
4237                       END IF;
4238                END IF;
4239 
4240                --log1('----- STAGE 19.1-------');
4241                --Throw an error if planning start/end dates are not entered for a planning transaction at all.
4242                IF l_inf_tbl_data_next_rec.task_id IS NULL OR
4243                   l_inf_tbl_data_curr_rec.task_id <> l_inf_tbl_data_next_rec.task_id OR
4244                   l_inf_tbl_data_curr_rec.resource_list_member_id <> l_inf_tbl_data_next_rec.resource_list_member_id OR
4245                   Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') OR
4246                   is_periodic_setup = 'Y' THEN
4247                      IF is_periodic_setup = 'Y' THEN
4248                         -- Checking if the spread curve is of fixed date type
4249                         IF (l_inf_tbl_data_curr_rec.spread_curve_name IS NOT NULL AND
4250                             l_inf_tbl_data_curr_rec.spread_curve_name = l_fixed_spread_curve_name) OR
4251                             l_fixed_spread_curve_id = l_spread_curve_id THEN
4252                                     -- spread curve specified is of fixed date type
4253                                     IF l_not_null_period_cnt > 1 THEN
4254                                           -- there are valid amounts entered in more than 1 period
4255                                           l_err_val_code_tbl.extend(1);
4256                                           l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
4257                                           l_err_task_id_tbl.extend(1);
4258                                           l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4259                                           l_err_rlm_id_tbl.extend(1);
4260                                           l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4261                                           l_err_txn_curr_tbl.extend(1);
4262                                           l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4263                                           l_err_amt_type_tbl.extend(1);
4264                                           l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4265                                        RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
4266                                     ELSIF l_not_null_period_cnt = 1 THEN
4267                                           IF l_fix_sc_amt_pd_curr_index IS NULL THEN
4268                                                 -- finding out the period index for which amount is present
4269 
4270                                                 IF is_forecast_version = 'Y' THEN
4271                                                       IF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
4272                                                          l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num AND
4273                                                          l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) THEN
4274                                                             l_fix_sc_amt_pd_curr_index := 1;
4275                                                       ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
4276                                                             l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num AND
4277                                                             l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) THEN
4278                                                                 l_fix_sc_amt_pd_curr_index := 2;
4279                                                       ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
4280                                                             l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num AND
4281                                                             l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) THEN
4282                                                                 l_fix_sc_amt_pd_curr_index := 3;
4283                                                       ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
4284                                                             l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num AND
4285                                                             l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) THEN
4286                                                                 l_fix_sc_amt_pd_curr_index := 4;
4287                                                       ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
4288                                                             l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num AND
4289                                                             l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) THEN
4290                                                                 l_fix_sc_amt_pd_curr_index := 5;
4291                                                       ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
4292                                                             l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num AND
4293                                                             l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) THEN
4294                                                                 l_fix_sc_amt_pd_curr_index := 6;
4295                                                       ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
4296                                                             l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num AND
4297                                                             l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) THEN
4298                                                                 l_fix_sc_amt_pd_curr_index := 7;
4299                                                       ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
4300                                                             l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num AND
4301                                                             l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) THEN
4302                                                                 l_fix_sc_amt_pd_curr_index := 8;
4303                                                       ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
4304                                                             l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num AND
4305                                                             l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) THEN
4306                                                                 l_fix_sc_amt_pd_curr_index := 9;
4307                                                       ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
4308                                                             l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num AND
4309                                                             l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) THEN
4310                                                                 l_fix_sc_amt_pd_curr_index := 10;
4311                                                       ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
4312                                                             l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num AND
4313                                                             l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) THEN
4314                                                                 l_fix_sc_amt_pd_curr_index := 11;
4315                                                       ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
4316                                                             l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num AND
4317                                                             l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) THEN
4318                                                                 l_fix_sc_amt_pd_curr_index := 12;
4319                                                       ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
4320                                                             l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num AND
4321                                                             l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) THEN
4322                                                                 l_fix_sc_amt_pd_curr_index := 13;
4323                                                       ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
4324                                                             l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num AND
4325                                                             l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) THEN
4326                                                                 l_fix_sc_amt_pd_curr_index := 14;
4327                                                       ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
4328                                                             l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num AND
4329                                                             l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) THEN
4330                                                                 l_fix_sc_amt_pd_curr_index := 15;
4331                                                       ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
4332                                                             l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num AND
4333                                                             l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) THEN
4334                                                                 l_fix_sc_amt_pd_curr_index := 16;
4335                                                       ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
4336                                                             l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num AND
4337                                                             l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) THEN
4338                                                                 l_fix_sc_amt_pd_curr_index := 17;
4339                                                       ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
4340                                                             l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num AND
4341                                                             l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) THEN
4342                                                                 l_fix_sc_amt_pd_curr_index := 18;
4343                                                       ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
4344                                                             l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num AND
4345                                                             l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) THEN
4346                                                                 l_fix_sc_amt_pd_curr_index := 19;
4347                                                       ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
4348                                                             l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num AND
4349                                                             l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) THEN
4350                                                                 l_fix_sc_amt_pd_curr_index := 20;
4351                                                       ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
4352                                                             l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num AND
4353                                                             l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) THEN
4354                                                                 l_fix_sc_amt_pd_curr_index := 21;
4355                                                       ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
4356                                                             l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num AND
4357                                                             l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) THEN
4358                                                                 l_fix_sc_amt_pd_curr_index := 22;
4359                                                       ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
4360                                                             l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num AND
4361                                                             l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) THEN
4362                                                                 l_fix_sc_amt_pd_curr_index := 23;
4363                                                       ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
4364                                                             l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num AND
4365                                                             l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(24) - 1)) THEN
4366                                                                 l_fix_sc_amt_pd_curr_index := 24;
4367                                                       ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
4368                                                             l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num AND
4369                                                             l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) THEN
4370                                                                 l_fix_sc_amt_pd_curr_index := 25;
4371                                                       ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
4372                                                             l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num AND
4373                                                             l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) THEN
4374                                                                 l_fix_sc_amt_pd_curr_index := 26;
4375                                                       ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
4376                                                             l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num AND
4377                                                             l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) THEN
4378                                                                 l_fix_sc_amt_pd_curr_index := 27;
4379                                                       ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
4380                                                             l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num AND
4381                                                             l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) THEN
4382                                                                 l_fix_sc_amt_pd_curr_index := 28;
4383                                                       ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
4384                                                             l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num AND
4385                                                             l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) THEN
4386                                                                 l_fix_sc_amt_pd_curr_index := 29;
4387                                                       ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
4388                                                             l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num AND
4389                                                             l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) THEN
4390                                                                 l_fix_sc_amt_pd_curr_index := 30;
4391                                                       ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
4392                                                             l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num AND
4393                                                             l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 1)) THEN
4394                                                                 l_fix_sc_amt_pd_curr_index := 31;
4395                                                       ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
4396                                                             l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num AND
4397                                                             l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) THEN
4398                                                                 l_fix_sc_amt_pd_curr_index := 32;
4399                                                       ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
4400                                                             l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num AND
4401                                                             l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) THEN
4402                                                                 l_fix_sc_amt_pd_curr_index := 33;
4403                                                       ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
4404                                                             l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num AND
4405                                                             l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) THEN
4406                                                                 l_fix_sc_amt_pd_curr_index := 34;
4407                                                       ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
4408                                                             l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num AND
4409                                                             l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) THEN
4410                                                                 l_fix_sc_amt_pd_curr_index := 35;
4411                                                       ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
4412                                                             l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num AND
4413                                                             l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) THEN
4414                                                                 l_fix_sc_amt_pd_curr_index := 36;
4415                                                       ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
4416                                                             l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num AND
4417                                                             l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) THEN
4418                                                                 l_fix_sc_amt_pd_curr_index := 37;
4419                                                       ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
4420                                                             l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num AND
4421                                                             l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) THEN
4422                                                                 l_fix_sc_amt_pd_curr_index := 38;
4423                                                       ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
4424                                                             l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num AND
4425                                                             l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) THEN
4426                                                                 l_fix_sc_amt_pd_curr_index := 39;
4427                                                       ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
4428                                                             l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num AND
4429                                                             l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) THEN
4430                                                                 l_fix_sc_amt_pd_curr_index := 40;
4431                                                       ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
4432                                                             l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num AND
4433                                                             l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) THEN
4434                                                                 l_fix_sc_amt_pd_curr_index := 41;
4435                                                       ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
4436                                                             l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num AND
4437                                                             l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) THEN
4438                                                                 l_fix_sc_amt_pd_curr_index := 42;
4439                                                       ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
4440                                                             l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num AND
4441                                                             l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) THEN
4442                                                                 l_fix_sc_amt_pd_curr_index := 43;
4443                                                       ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
4444                                                             l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num AND
4445                                                             l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) THEN
4446                                                                 l_fix_sc_amt_pd_curr_index := 44;
4447                                                       ELSIF l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
4448                                                             l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num AND
4449                                                             l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) THEN
4450                                                                 l_fix_sc_amt_pd_curr_index := 45;
4451                                                       ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
4452                                                             l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num AND
4453                                                             l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) THEN
4454                                                                 l_fix_sc_amt_pd_curr_index := 46;
4455                                                       ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
4456                                                             l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num AND
4457                                                             l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) THEN
4458                                                                 l_fix_sc_amt_pd_curr_index := 47;
4459                                                       ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
4460                                                             l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num AND
4461                                                             l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) THEN
4462                                                                 l_fix_sc_amt_pd_curr_index := 48;
4463                                                       ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
4464                                                             l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num AND
4465                                                             l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) THEN
4466                                                                 l_fix_sc_amt_pd_curr_index := 49;
4467                                                       ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
4468                                                             l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num AND
4469                                                             l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) THEN
4470                                                                 l_fix_sc_amt_pd_curr_index := 50;
4471                                                       ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
4472                                                             l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num AND
4473                                                             l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) THEN
4474                                                                 l_fix_sc_amt_pd_curr_index := 51;
4475                                                       ELSIF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
4476                                                             l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num AND
4477                                                             l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) THEN
4478                                                                 l_fix_sc_amt_pd_curr_index := 52;
4479                                                       END IF;
4480                                                 ELSE
4481                                                       -- budget version
4482                                                       IF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
4483                                                          l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
4484                                                             l_fix_sc_amt_pd_curr_index := 1;
4485                                                       ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
4486                                                          l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
4487                                                             l_fix_sc_amt_pd_curr_index := 2;
4488                                                       ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
4489                                                          l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
4490                                                             l_fix_sc_amt_pd_curr_index := 3;
4491                                                       ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
4492                                                          l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
4493                                                             l_fix_sc_amt_pd_curr_index := 4;
4494                                                       ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
4495                                                          l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
4496                                                             l_fix_sc_amt_pd_curr_index := 5;
4497                                                       ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
4498                                                          l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
4499                                                             l_fix_sc_amt_pd_curr_index := 6;
4500                                                       ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
4501                                                          l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
4502                                                             l_fix_sc_amt_pd_curr_index := 7;
4503                                                       ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
4504                                                          l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
4505                                                             l_fix_sc_amt_pd_curr_index := 8;
4506                                                       ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
4507                                                          l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
4508                                                             l_fix_sc_amt_pd_curr_index := 9;
4509                                                       ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
4510                                                          l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
4511                                                             l_fix_sc_amt_pd_curr_index := 10;
4512                                                       ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
4513                                                          l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
4514                                                             l_fix_sc_amt_pd_curr_index := 11;
4515                                                       ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
4516                                                          l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
4517                                                             l_fix_sc_amt_pd_curr_index := 12;
4518                                                       ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
4519                                                          l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
4520                                                             l_fix_sc_amt_pd_curr_index := 13;
4521                                                       ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
4522                                                          l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
4523                                                             l_fix_sc_amt_pd_curr_index := 14;
4524                                                       ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
4525                                                          l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
4526                                                             l_fix_sc_amt_pd_curr_index := 15;
4527                                                       ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
4528                                                          l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
4529                                                             l_fix_sc_amt_pd_curr_index := 16;
4530                                                       ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
4531                                                          l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
4532                                                             l_fix_sc_amt_pd_curr_index := 17;
4533                                                       ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
4534                                                          l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
4535                                                             l_fix_sc_amt_pd_curr_index := 18;
4536                                                       ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
4537                                                          l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
4538                                                             l_fix_sc_amt_pd_curr_index := 19;
4539                                                       ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
4540                                                          l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
4541                                                             l_fix_sc_amt_pd_curr_index := 20;
4542                                                       ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
4543                                                          l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
4544                                                             l_fix_sc_amt_pd_curr_index := 21;
4545                                                       ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
4546                                                          l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
4547                                                             l_fix_sc_amt_pd_curr_index := 22;
4548                                                       ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
4549                                                          l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
4550                                                             l_fix_sc_amt_pd_curr_index := 23;
4551                                                       ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
4552                                                          l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
4553                                                             l_fix_sc_amt_pd_curr_index := 24;
4554                                                       ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
4555                                                          l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
4556                                                             l_fix_sc_amt_pd_curr_index := 25;
4557                                                       ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
4558                                                          l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
4559                                                             l_fix_sc_amt_pd_curr_index := 26;
4560                                                       ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
4561                                                          l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
4562                                                             l_fix_sc_amt_pd_curr_index := 27;
4563                                                       ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
4564                                                          l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
4565                                                             l_fix_sc_amt_pd_curr_index := 28;
4566                                                       ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
4567                                                          l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
4568                                                             l_fix_sc_amt_pd_curr_index := 29;
4569                                                       ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
4570                                                          l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
4571                                                             l_fix_sc_amt_pd_curr_index := 30;
4572                                                       ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
4573                                                          l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
4574                                                             l_fix_sc_amt_pd_curr_index := 31;
4575                                                       ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
4576                                                          l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
4577                                                             l_fix_sc_amt_pd_curr_index := 32;
4578                                                       ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
4579                                                          l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
4580                                                             l_fix_sc_amt_pd_curr_index := 33;
4581                                                       ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
4582                                                          l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
4583                                                             l_fix_sc_amt_pd_curr_index := 34;
4584                                                       ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
4585                                                          l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
4586                                                             l_fix_sc_amt_pd_curr_index := 35;
4587                                                       ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
4588                                                          l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
4589                                                             l_fix_sc_amt_pd_curr_index := 36;
4590                                                       ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
4591                                                          l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
4592                                                             l_fix_sc_amt_pd_curr_index := 37;
4593                                                       ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
4594                                                          l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
4595                                                             l_fix_sc_amt_pd_curr_index := 38;
4596                                                       ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
4597                                                          l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
4598                                                             l_fix_sc_amt_pd_curr_index := 39;
4599                                                       ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
4600                                                          l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
4601                                                             l_fix_sc_amt_pd_curr_index := 40;
4602                                                       ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
4603                                                          l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
4604                                                             l_fix_sc_amt_pd_curr_index := 41;
4605                                                       ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
4606                                                          l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
4607                                                             l_fix_sc_amt_pd_curr_index := 42;
4608                                                       ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
4609                                                          l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
4610                                                             l_fix_sc_amt_pd_curr_index := 43;
4611                                                       ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
4612                                                          l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
4613                                                             l_fix_sc_amt_pd_curr_index := 44;
4614                                                       ELSIF l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
4615                                                          l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
4616                                                             l_fix_sc_amt_pd_curr_index := 45;
4617                                                       ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
4618                                                          l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
4619                                                             l_fix_sc_amt_pd_curr_index := 46;
4620                                                       ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
4621                                                          l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
4622                                                             l_fix_sc_amt_pd_curr_index := 47;
4623                                                       ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
4624                                                          l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
4625                                                             l_fix_sc_amt_pd_curr_index := 48;
4626                                                       ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
4627                                                          l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
4628                                                             l_fix_sc_amt_pd_curr_index := 49;
4629                                                       ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
4630                                                          l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
4631                                                             l_fix_sc_amt_pd_curr_index := 50;
4632                                                       ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
4633                                                          l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
4634                                                             l_fix_sc_amt_pd_curr_index := 51;
4635                                                       ELSIF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
4636                                                          l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
4637                                                             l_fix_sc_amt_pd_curr_index := 52;
4638                                                       END IF;
4639                                                 END IF;
4640                                           END IF; -- cur index null
4641 
4642                                           --log1('C l_cached_ra_index '||l_cached_ra_index);
4643                                           --log1('C l_fix_sc_amt_pd_curr_index '||l_fix_sc_amt_pd_curr_index);
4644                                           --log1('C l_sp_fix_prd_st_dt '||l_sp_fix_prd_st_dt);
4645                                           --log1('C l_sp_fix_prd_en_dt '||l_sp_fix_prd_en_dt);
4646                                           --log1('C l_sp_fixed_date '||l_sp_fixed_date);
4647                                           --log1('C amount type '||l_inf_tbl_data_curr_rec.amount_type_code);
4648                                           --log1('C txn curr '||l_inf_tbl_data_curr_rec.txn_currency_code);
4649 
4650                                           -- checking for existing RAs, the sp_fixed_date lies in the correct
4651                                           -- period where amounts have been entered
4652                                           IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
4653                                              l_cached_ra_id_tbl(l_cached_ra_index) <> -1 AND
4654                                              l_fix_sc_amt_pd_curr_index IS NOT NULL THEN
4655                                                  l_sp_fix_prd_st_dt := p_prd_start_date_tbl(l_fix_sc_amt_pd_curr_index);
4656                                                  l_sp_fix_prd_en_dt := p_prd_end_date_tbl(l_fix_sc_amt_pd_curr_index);
4657 
4658                                                  IF NOT (l_sp_fixed_date >= l_sp_fix_prd_st_dt AND
4659                                                          l_sp_fix_prd_st_dt <= l_sp_fix_prd_en_dt) THEN
4660                                                          l_err_val_code_tbl.extend(1);
4661                                                          l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
4662                                                          l_err_task_id_tbl.extend(1);
4663                                                          l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4664                                                          l_err_rlm_id_tbl.extend(1);
4665                                                          l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4666                                                          l_err_txn_curr_tbl.extend(1);
4667                                                          l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4668                                                          l_err_amt_type_tbl.extend(1);
4669                                                          l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4670 
4671                                                          RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
4672                                                  END IF;
4673                                           END IF;
4674                                     END IF; -- period not null
4675 
4676                                     --If the next record too belongs to the same RA as that of the current record
4677                                     --Find out the period for which amounts are entered in that record
4678                                     IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
4679                                        l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
4680                                        l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id THEN
4681                                               -- checkin for fixed date spread curve
4682                                               -- if the same resource appears in the next record too
4683                                               -- finding out the period index for which amount is present
4684                                               l_fix_sc_amt_pd_next_index := NULL;
4685                                               IF is_forecast_version = 'Y' THEN
4686                                                      IF l_inf_tbl_data_next_rec.prd1 IS NOT NULL AND
4687                                                         l_inf_tbl_data_next_rec.prd1 <> l_fnd_miss_num AND
4688                                                         l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) THEN
4689                                                            l_fix_sc_amt_pd_next_index := 1;
4690                                                      ELSIF l_inf_tbl_data_next_rec.prd2 IS NOT NULL AND
4691                                                            l_inf_tbl_data_next_rec.prd2 <> l_fnd_miss_num AND
4692                                                            l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) THEN
4693                                                                 l_fix_sc_amt_pd_next_index := 2;
4694                                                      ELSIF l_inf_tbl_data_next_rec.prd3 IS NOT NULL AND
4695                                                            l_inf_tbl_data_next_rec.prd3 <> l_fnd_miss_num AND
4696                                                            l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) THEN
4697                                                                 l_fix_sc_amt_pd_next_index := 3;
4698                                                      ELSIF l_inf_tbl_data_next_rec.prd4 IS NOT NULL AND
4699                                                            l_inf_tbl_data_next_rec.prd4 <> l_fnd_miss_num AND
4700                                                            l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) THEN
4701                                                                 l_fix_sc_amt_pd_next_index := 4;
4702                                                      ELSIF l_inf_tbl_data_next_rec.prd5 IS NOT NULL AND
4703                                                            l_inf_tbl_data_next_rec.prd5 <> l_fnd_miss_num AND
4704                                                            l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) THEN
4705                                                                 l_fix_sc_amt_pd_next_index := 5;
4706                                                      ELSIF l_inf_tbl_data_next_rec.prd6 IS NOT NULL AND
4707                                                            l_inf_tbl_data_next_rec.prd6 <> l_fnd_miss_num AND
4708                                                            l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) THEN
4709                                                                 l_fix_sc_amt_pd_next_index := 6;
4710                                                      ELSIF l_inf_tbl_data_next_rec.prd7 IS NOT NULL AND
4711                                                            l_inf_tbl_data_next_rec.prd7 <> l_fnd_miss_num AND
4712                                                            l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) THEN
4713                                                                 l_fix_sc_amt_pd_next_index := 7;
4714                                                      ELSIF l_inf_tbl_data_next_rec.prd8 IS NOT NULL AND
4715                                                            l_inf_tbl_data_next_rec.prd8 <> l_fnd_miss_num AND
4716                                                            l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) THEN
4717                                                                 l_fix_sc_amt_pd_next_index := 8;
4718                                                      ELSIF l_inf_tbl_data_next_rec.prd9 IS NOT NULL AND
4719                                                            l_inf_tbl_data_next_rec.prd9 <> l_fnd_miss_num AND
4720                                                            l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) THEN
4721                                                                 l_fix_sc_amt_pd_next_index := 9;
4722                                                      ELSIF l_inf_tbl_data_next_rec.prd10 IS NOT NULL AND
4723                                                            l_inf_tbl_data_next_rec.prd10 <> l_fnd_miss_num AND
4724                                                            l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) THEN
4725                                                                 l_fix_sc_amt_pd_next_index := 10;
4726                                                      ELSIF l_inf_tbl_data_next_rec.prd11 IS NOT NULL AND
4727                                                            l_inf_tbl_data_next_rec.prd11 <> l_fnd_miss_num AND
4728                                                            l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) THEN
4729                                                                 l_fix_sc_amt_pd_next_index := 11;
4730                                                      ELSIF l_inf_tbl_data_next_rec.prd12 IS NOT NULL AND
4731                                                            l_inf_tbl_data_next_rec.prd12 <> l_fnd_miss_num AND
4732                                                            l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) THEN
4733                                                                 l_fix_sc_amt_pd_next_index := 12;
4734                                                      ELSIF l_inf_tbl_data_next_rec.prd13 IS NOT NULL AND
4735                                                            l_inf_tbl_data_next_rec.prd13 <> l_fnd_miss_num AND
4736                                                            l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) THEN
4737                                                                 l_fix_sc_amt_pd_next_index := 13;
4738                                                      ELSIF l_inf_tbl_data_next_rec.prd14 IS NOT NULL AND
4739                                                            l_inf_tbl_data_next_rec.prd14 <> l_fnd_miss_num AND
4740                                                            l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) THEN
4741                                                                 l_fix_sc_amt_pd_next_index := 14;
4742                                                      ELSIF l_inf_tbl_data_next_rec.prd15 IS NOT NULL AND
4743                                                            l_inf_tbl_data_next_rec.prd15 <> l_fnd_miss_num AND
4744                                                            l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) THEN
4745                                                                 l_fix_sc_amt_pd_next_index := 15;
4746                                                      ELSIF l_inf_tbl_data_next_rec.prd16 IS NOT NULL AND
4747                                                            l_inf_tbl_data_next_rec.prd16 <> l_fnd_miss_num AND
4748                                                            l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) THEN
4749                                                                 l_fix_sc_amt_pd_next_index := 16;
4750                                                      ELSIF l_inf_tbl_data_next_rec.prd17 IS NOT NULL AND
4751                                                            l_inf_tbl_data_next_rec.prd17 <> l_fnd_miss_num AND
4752                                                            l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) THEN
4753                                                                 l_fix_sc_amt_pd_next_index := 17;
4754                                                      ELSIF l_inf_tbl_data_next_rec.prd18 IS NOT NULL AND
4755                                                            l_inf_tbl_data_next_rec.prd18 <> l_fnd_miss_num AND
4756                                                            l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) THEN
4757                                                                 l_fix_sc_amt_pd_next_index := 18;
4758                                                      ELSIF l_inf_tbl_data_next_rec.prd19 IS NOT NULL AND
4759                                                            l_inf_tbl_data_next_rec.prd19 <> l_fnd_miss_num AND
4760                                                            l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) THEN
4761                                                                 l_fix_sc_amt_pd_next_index := 19;
4762                                                      ELSIF l_inf_tbl_data_next_rec.prd20 IS NOT NULL AND
4763                                                            l_inf_tbl_data_next_rec.prd20 <> l_fnd_miss_num AND
4764                                                            l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) THEN
4765                                                                 l_fix_sc_amt_pd_next_index := 20;
4766                                                      ELSIF l_inf_tbl_data_next_rec.prd21 IS NOT NULL AND
4767                                                            l_inf_tbl_data_next_rec.prd21 <> l_fnd_miss_num AND
4768                                                            l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) THEN
4769                                                                 l_fix_sc_amt_pd_next_index := 21;
4770                                                      ELSIF l_inf_tbl_data_next_rec.prd22 IS NOT NULL AND
4771                                                            l_inf_tbl_data_next_rec.prd22 <> l_fnd_miss_num AND
4772                                                            l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) THEN
4773                                                                 l_fix_sc_amt_pd_next_index := 22;
4774                                                      ELSIF l_inf_tbl_data_next_rec.prd23 IS NOT NULL AND
4775                                                            l_inf_tbl_data_next_rec.prd23 <> l_fnd_miss_num AND
4776                                                            l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) THEN
4777                                                                 l_fix_sc_amt_pd_next_index := 23;
4778                                                      ELSIF l_inf_tbl_data_next_rec.prd24 IS NOT NULL AND
4779                                                            l_inf_tbl_data_next_rec.prd24 <> l_fnd_miss_num AND
4780                                                            l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) THEN
4781                                                                 l_fix_sc_amt_pd_next_index := 24;
4782                                                      ELSIF l_inf_tbl_data_next_rec.prd25 IS NOT NULL AND
4783                                                            l_inf_tbl_data_next_rec.prd25 <> l_fnd_miss_num AND
4784                                                            l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) THEN
4785                                                                 l_fix_sc_amt_pd_next_index := 25;
4786                                                      ELSIF l_inf_tbl_data_next_rec.prd26 IS NOT NULL AND
4787                                                            l_inf_tbl_data_next_rec.prd26 <> l_fnd_miss_num AND
4788                                                            l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) THEN
4789                                                                 l_fix_sc_amt_pd_next_index := 26;
4790                                                      ELSIF l_inf_tbl_data_next_rec.prd27 IS NOT NULL AND
4791                                                            l_inf_tbl_data_next_rec.prd27 <> l_fnd_miss_num AND
4792                                                            l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) THEN
4793                                                                 l_fix_sc_amt_pd_next_index := 27;
4794                                                      ELSIF l_inf_tbl_data_next_rec.prd28 IS NOT NULL AND
4795                                                            l_inf_tbl_data_next_rec.prd28 <> l_fnd_miss_num AND
4796                                                            l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) THEN
4797                                                                 l_fix_sc_amt_pd_next_index := 28;
4798                                                      ELSIF l_inf_tbl_data_next_rec.prd29 IS NOT NULL AND
4799                                                            l_inf_tbl_data_next_rec.prd29 <> l_fnd_miss_num AND
4800                                                            l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) THEN
4801                                                                 l_fix_sc_amt_pd_next_index := 29;
4802                                                      ELSIF l_inf_tbl_data_next_rec.prd30 IS NOT NULL AND
4803                                                            l_inf_tbl_data_next_rec.prd30 <> l_fnd_miss_num AND
4804                                                            l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) THEN
4805                                                                 l_fix_sc_amt_pd_next_index := 30;
4806                                                      ELSIF l_inf_tbl_data_next_rec.prd31 IS NOT NULL AND
4807                                                            l_inf_tbl_data_next_rec.prd31 <> l_fnd_miss_num AND
4808                                                            l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 1)) THEN
4809                                                                 l_fix_sc_amt_pd_next_index := 31;
4810                                                      ELSIF l_inf_tbl_data_next_rec.prd32 IS NOT NULL AND
4811                                                            l_inf_tbl_data_next_rec.prd32 <> l_fnd_miss_num AND
4812                                                            l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) THEN
4813                                                                 l_fix_sc_amt_pd_next_index := 32;
4814                                                      ELSIF l_inf_tbl_data_next_rec.prd33 IS NOT NULL AND
4815                                                            l_inf_tbl_data_next_rec.prd33 <> l_fnd_miss_num AND
4816                                                            l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) THEN
4817                                                                 l_fix_sc_amt_pd_next_index := 33;
4818                                                      ELSIF l_inf_tbl_data_next_rec.prd34 IS NOT NULL AND
4819                                                            l_inf_tbl_data_next_rec.prd34 <> l_fnd_miss_num AND
4820                                                            l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) THEN
4821                                                                 l_fix_sc_amt_pd_next_index := 34;
4822                                                      ELSIF l_inf_tbl_data_next_rec.prd35 IS NOT NULL AND
4823                                                            l_inf_tbl_data_next_rec.prd35 <> l_fnd_miss_num AND
4824                                                            l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) THEN
4825                                                                 l_fix_sc_amt_pd_next_index := 35;
4826                                                      ELSIF l_inf_tbl_data_next_rec.prd36 IS NOT NULL AND
4827                                                            l_inf_tbl_data_next_rec.prd36 <> l_fnd_miss_num AND
4828                                                            l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) THEN
4829                                                                 l_fix_sc_amt_pd_next_index := 36;
4830                                                      ELSIF l_inf_tbl_data_next_rec.prd37 IS NOT NULL AND
4831                                                            l_inf_tbl_data_next_rec.prd37 <> l_fnd_miss_num AND
4832                                                            l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) THEN
4833                                                                 l_fix_sc_amt_pd_next_index := 37;
4834                                                      ELSIF l_inf_tbl_data_next_rec.prd38 IS NOT NULL AND
4835                                                            l_inf_tbl_data_next_rec.prd38 <> l_fnd_miss_num AND
4836                                                            l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) THEN
4837                                                                 l_fix_sc_amt_pd_next_index := 38;
4838                                                      ELSIF l_inf_tbl_data_next_rec.prd39 IS NOT NULL AND
4839                                                            l_inf_tbl_data_next_rec.prd39 <> l_fnd_miss_num AND
4840                                                            l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) THEN
4841                                                                 l_fix_sc_amt_pd_next_index := 39;
4842                                                      ELSIF l_inf_tbl_data_next_rec.prd40 IS NOT NULL AND
4843                                                            l_inf_tbl_data_next_rec.prd40 <> l_fnd_miss_num AND
4844                                                            l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) THEN
4845                                                                 l_fix_sc_amt_pd_next_index := 40;
4846                                                      ELSIF l_inf_tbl_data_next_rec.prd41 IS NOT NULL AND
4847                                                            l_inf_tbl_data_next_rec.prd41 <> l_fnd_miss_num AND
4848                                                            l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) THEN
4849                                                                 l_fix_sc_amt_pd_next_index := 41;
4850                                                      ELSIF l_inf_tbl_data_next_rec.prd42 IS NOT NULL AND
4851                                                            l_inf_tbl_data_next_rec.prd42 <> l_fnd_miss_num AND
4852                                                            l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) THEN
4853                                                                 l_fix_sc_amt_pd_next_index := 42;
4854                                                      ELSIF l_inf_tbl_data_next_rec.prd43 IS NOT NULL AND
4855                                                            l_inf_tbl_data_next_rec.prd43 <> l_fnd_miss_num AND
4856                                                            l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) THEN
4857                                                                 l_fix_sc_amt_pd_next_index := 43;
4858                                                      ELSIF l_inf_tbl_data_next_rec.prd44 IS NOT NULL AND
4859                                                            l_inf_tbl_data_next_rec.prd44 <> l_fnd_miss_num AND
4860                                                            l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) THEN
4861                                                                 l_fix_sc_amt_pd_next_index := 44;
4862                                                      ELSIF l_inf_tbl_data_next_rec.prd45 IS NOT NULL AND
4863                                                            l_inf_tbl_data_next_rec.prd45 <> l_fnd_miss_num AND
4864                                                            l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) THEN
4865                                                                 l_fix_sc_amt_pd_next_index := 45;
4866                                                      ELSIF l_inf_tbl_data_next_rec.prd46 IS NOT NULL AND
4867                                                            l_inf_tbl_data_next_rec.prd46 <> l_fnd_miss_num AND
4868                                                            l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) THEN
4869                                                                 l_fix_sc_amt_pd_next_index := 46;
4870                                                      ELSIF l_inf_tbl_data_next_rec.prd47 IS NOT NULL AND
4871                                                            l_inf_tbl_data_next_rec.prd47 <> l_fnd_miss_num AND
4872                                                            l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) THEN
4873                                                                 l_fix_sc_amt_pd_next_index := 47;
4874                                                      ELSIF l_inf_tbl_data_next_rec.prd48 IS NOT NULL AND
4875                                                            l_inf_tbl_data_next_rec.prd48 <> l_fnd_miss_num AND
4876                                                            l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) THEN
4877                                                                 l_fix_sc_amt_pd_next_index := 48;
4878                                                      ELSIF l_inf_tbl_data_next_rec.prd49 IS NOT NULL AND
4879                                                            l_inf_tbl_data_next_rec.prd49 <> l_fnd_miss_num AND
4880                                                            l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) THEN
4881                                                                 l_fix_sc_amt_pd_next_index := 49;
4882                                                      ELSIF l_inf_tbl_data_next_rec.prd50 IS NOT NULL AND
4883                                                            l_inf_tbl_data_next_rec.prd50 <> l_fnd_miss_num AND
4884                                                            l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) THEN
4885                                                                 l_fix_sc_amt_pd_next_index := 50;
4886                                                      ELSIF l_inf_tbl_data_next_rec.prd51 IS NOT NULL AND
4887                                                            l_inf_tbl_data_next_rec.prd51 <> l_fnd_miss_num AND
4888                                                            l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) THEN
4889                                                                 l_fix_sc_amt_pd_next_index := 51;
4890                                                      ELSIF l_inf_tbl_data_next_rec.prd52 IS NOT NULL AND
4891                                                            l_inf_tbl_data_next_rec.prd52 <> l_fnd_miss_num AND
4892                                                            l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) THEN
4893                                                                 l_fix_sc_amt_pd_next_index := 52;
4894                                                      END IF; -- period not null
4895                                               ELSE
4896                                                      -- budget versions
4897                                                      IF l_inf_tbl_data_next_rec.prd1 IS NOT NULL AND
4898                                                         l_inf_tbl_data_next_rec.prd1 <> l_fnd_miss_num THEN
4899                                                            l_fix_sc_amt_pd_next_index := 1;
4900                                                      ELSIF l_inf_tbl_data_next_rec.prd2 IS NOT NULL AND
4901                                                         l_inf_tbl_data_next_rec.prd2 <> l_fnd_miss_num THEN
4902                                                            l_fix_sc_amt_pd_next_index := 2;
4903                                                      ELSIF l_inf_tbl_data_next_rec.prd3 IS NOT NULL AND
4904                                                         l_inf_tbl_data_next_rec.prd3 <> l_fnd_miss_num THEN
4905                                                            l_fix_sc_amt_pd_next_index := 3;
4906                                                      ELSIF l_inf_tbl_data_next_rec.prd4 IS NOT NULL AND
4907                                                         l_inf_tbl_data_next_rec.prd4 <> l_fnd_miss_num THEN
4908                                                            l_fix_sc_amt_pd_next_index := 4;
4909                                                      ELSIF l_inf_tbl_data_next_rec.prd5 IS NOT NULL AND
4910                                                         l_inf_tbl_data_next_rec.prd5 <> l_fnd_miss_num THEN
4911                                                            l_fix_sc_amt_pd_next_index := 5;
4912                                                      ELSIF l_inf_tbl_data_next_rec.prd6 IS NOT NULL AND
4913                                                         l_inf_tbl_data_next_rec.prd6 <> l_fnd_miss_num THEN
4914                                                            l_fix_sc_amt_pd_next_index := 6;
4915                                                      ELSIF l_inf_tbl_data_next_rec.prd7 IS NOT NULL AND
4916                                                         l_inf_tbl_data_next_rec.prd7 <> l_fnd_miss_num THEN
4917                                                            l_fix_sc_amt_pd_next_index := 7;
4918                                                      ELSIF l_inf_tbl_data_next_rec.prd8 IS NOT NULL AND
4919                                                         l_inf_tbl_data_next_rec.prd8 <> l_fnd_miss_num THEN
4920                                                            l_fix_sc_amt_pd_next_index := 8;
4921                                                      ELSIF l_inf_tbl_data_next_rec.prd9 IS NOT NULL AND
4922                                                         l_inf_tbl_data_next_rec.prd9 <> l_fnd_miss_num THEN
4923                                                            l_fix_sc_amt_pd_next_index := 9;
4924                                                      ELSIF l_inf_tbl_data_next_rec.prd10 IS NOT NULL AND
4925                                                         l_inf_tbl_data_next_rec.prd10 <> l_fnd_miss_num THEN
4926                                                            l_fix_sc_amt_pd_next_index := 10;
4927                                                      ELSIF l_inf_tbl_data_next_rec.prd11 IS NOT NULL AND
4928                                                         l_inf_tbl_data_next_rec.prd11 <> l_fnd_miss_num THEN
4929                                                            l_fix_sc_amt_pd_next_index := 11;
4930                                                      ELSIF l_inf_tbl_data_next_rec.prd12 IS NOT NULL AND
4931                                                         l_inf_tbl_data_next_rec.prd12 <> l_fnd_miss_num THEN
4932                                                            l_fix_sc_amt_pd_next_index := 12;
4933                                                      ELSIF l_inf_tbl_data_next_rec.prd13 IS NOT NULL AND
4934                                                         l_inf_tbl_data_next_rec.prd13 <> l_fnd_miss_num THEN
4935                                                            l_fix_sc_amt_pd_next_index := 13;
4936                                                      ELSIF l_inf_tbl_data_next_rec.prd14 IS NOT NULL AND
4937                                                         l_inf_tbl_data_next_rec.prd14 <> l_fnd_miss_num THEN
4938                                                            l_fix_sc_amt_pd_next_index := 14;
4939                                                      ELSIF l_inf_tbl_data_next_rec.prd15 IS NOT NULL AND
4940                                                         l_inf_tbl_data_next_rec.prd15 <> l_fnd_miss_num THEN
4941                                                            l_fix_sc_amt_pd_next_index := 15;
4942                                                      ELSIF l_inf_tbl_data_next_rec.prd16 IS NOT NULL AND
4943                                                         l_inf_tbl_data_next_rec.prd16 <> l_fnd_miss_num THEN
4944                                                            l_fix_sc_amt_pd_next_index := 16;
4945                                                      ELSIF l_inf_tbl_data_next_rec.prd17 IS NOT NULL AND
4946                                                         l_inf_tbl_data_next_rec.prd17 <> l_fnd_miss_num THEN
4947                                                            l_fix_sc_amt_pd_next_index := 17;
4948                                                      ELSIF l_inf_tbl_data_next_rec.prd18 IS NOT NULL AND
4949                                                         l_inf_tbl_data_next_rec.prd18 <> l_fnd_miss_num THEN
4950                                                            l_fix_sc_amt_pd_next_index := 18;
4951                                                      ELSIF l_inf_tbl_data_next_rec.prd19 IS NOT NULL AND
4952                                                         l_inf_tbl_data_next_rec.prd19 <> l_fnd_miss_num THEN
4953                                                            l_fix_sc_amt_pd_next_index := 19;
4954                                                      ELSIF l_inf_tbl_data_next_rec.prd20 IS NOT NULL AND
4955                                                         l_inf_tbl_data_next_rec.prd20 <> l_fnd_miss_num THEN
4956                                                            l_fix_sc_amt_pd_next_index := 20;
4957                                                      ELSIF l_inf_tbl_data_next_rec.prd21 IS NOT NULL AND
4958                                                         l_inf_tbl_data_next_rec.prd21 <> l_fnd_miss_num THEN
4959                                                            l_fix_sc_amt_pd_next_index := 21;
4960                                                      ELSIF l_inf_tbl_data_next_rec.prd22 IS NOT NULL AND
4961                                                         l_inf_tbl_data_next_rec.prd22 <> l_fnd_miss_num THEN
4962                                                            l_fix_sc_amt_pd_next_index := 22;
4963                                                      ELSIF l_inf_tbl_data_next_rec.prd23 IS NOT NULL AND
4964                                                         l_inf_tbl_data_next_rec.prd23 <> l_fnd_miss_num THEN
4965                                                            l_fix_sc_amt_pd_next_index := 23;
4966                                                      ELSIF l_inf_tbl_data_next_rec.prd24 IS NOT NULL AND
4967                                                         l_inf_tbl_data_next_rec.prd24 <> l_fnd_miss_num THEN
4968                                                            l_fix_sc_amt_pd_next_index := 24;
4969                                                      ELSIF l_inf_tbl_data_next_rec.prd25 IS NOT NULL AND
4970                                                         l_inf_tbl_data_next_rec.prd25 <> l_fnd_miss_num THEN
4971                                                            l_fix_sc_amt_pd_next_index := 25;
4972                                                      ELSIF l_inf_tbl_data_next_rec.prd26 IS NOT NULL AND
4973                                                         l_inf_tbl_data_next_rec.prd26 <> l_fnd_miss_num THEN
4974                                                            l_fix_sc_amt_pd_next_index := 26;
4975                                                      ELSIF l_inf_tbl_data_next_rec.prd27 IS NOT NULL AND
4976                                                         l_inf_tbl_data_next_rec.prd27 <> l_fnd_miss_num THEN
4977                                                            l_fix_sc_amt_pd_next_index := 27;
4978                                                      ELSIF l_inf_tbl_data_next_rec.prd28 IS NOT NULL AND
4979                                                         l_inf_tbl_data_next_rec.prd28 <> l_fnd_miss_num THEN
4980                                                            l_fix_sc_amt_pd_next_index := 28;
4981                                                      ELSIF l_inf_tbl_data_next_rec.prd29 IS NOT NULL AND
4982                                                         l_inf_tbl_data_next_rec.prd29 <> l_fnd_miss_num THEN
4983                                                            l_fix_sc_amt_pd_next_index := 29;
4984                                                      ELSIF l_inf_tbl_data_next_rec.prd30 IS NOT NULL AND
4985                                                         l_inf_tbl_data_next_rec.prd30 <> l_fnd_miss_num THEN
4986                                                            l_fix_sc_amt_pd_next_index := 30;
4987                                                      ELSIF l_inf_tbl_data_next_rec.prd31 IS NOT NULL AND
4988                                                         l_inf_tbl_data_next_rec.prd31 <> l_fnd_miss_num THEN
4989                                                            l_fix_sc_amt_pd_next_index := 31;
4990                                                      ELSIF l_inf_tbl_data_next_rec.prd32 IS NOT NULL AND
4991                                                         l_inf_tbl_data_next_rec.prd32 <> l_fnd_miss_num THEN
4992                                                            l_fix_sc_amt_pd_next_index := 32;
4993                                                      ELSIF l_inf_tbl_data_next_rec.prd33 IS NOT NULL AND
4994                                                         l_inf_tbl_data_next_rec.prd33 <> l_fnd_miss_num THEN
4995                                                            l_fix_sc_amt_pd_next_index := 33;
4996                                                      ELSIF l_inf_tbl_data_next_rec.prd34 IS NOT NULL AND
4997                                                         l_inf_tbl_data_next_rec.prd34 <> l_fnd_miss_num THEN
4998                                                            l_fix_sc_amt_pd_next_index := 34;
4999                                                      ELSIF l_inf_tbl_data_next_rec.prd35 IS NOT NULL AND
5000                                                         l_inf_tbl_data_next_rec.prd35 <> l_fnd_miss_num THEN
5001                                                            l_fix_sc_amt_pd_next_index := 35;
5002                                                      ELSIF l_inf_tbl_data_next_rec.prd36 IS NOT NULL AND
5003                                                         l_inf_tbl_data_next_rec.prd36 <> l_fnd_miss_num THEN
5004                                                            l_fix_sc_amt_pd_next_index := 36;
5005                                                      ELSIF l_inf_tbl_data_next_rec.prd37 IS NOT NULL AND
5006                                                         l_inf_tbl_data_next_rec.prd37 <> l_fnd_miss_num THEN
5007                                                            l_fix_sc_amt_pd_next_index := 37;
5008                                                      ELSIF l_inf_tbl_data_next_rec.prd38 IS NOT NULL AND
5009                                                         l_inf_tbl_data_next_rec.prd38 <> l_fnd_miss_num THEN
5010                                                            l_fix_sc_amt_pd_next_index := 38;
5011                                                      ELSIF l_inf_tbl_data_next_rec.prd39 IS NOT NULL AND
5012                                                         l_inf_tbl_data_next_rec.prd39 <> l_fnd_miss_num THEN
5013                                                            l_fix_sc_amt_pd_next_index := 39;
5014                                                      ELSIF l_inf_tbl_data_next_rec.prd40 IS NOT NULL AND
5015                                                         l_inf_tbl_data_next_rec.prd40 <> l_fnd_miss_num THEN
5016                                                            l_fix_sc_amt_pd_next_index := 40;
5017                                                      ELSIF l_inf_tbl_data_next_rec.prd41 IS NOT NULL AND
5018                                                         l_inf_tbl_data_next_rec.prd41 <> l_fnd_miss_num THEN
5019                                                            l_fix_sc_amt_pd_next_index := 41;
5020                                                      ELSIF l_inf_tbl_data_next_rec.prd42 IS NOT NULL AND
5021                                                         l_inf_tbl_data_next_rec.prd42 <> l_fnd_miss_num THEN
5022                                                            l_fix_sc_amt_pd_next_index := 42;
5023                                                      ELSIF l_inf_tbl_data_next_rec.prd43 IS NOT NULL AND
5024                                                         l_inf_tbl_data_next_rec.prd43 <> l_fnd_miss_num THEN
5025                                                            l_fix_sc_amt_pd_next_index := 43;
5026                                                      ELSIF l_inf_tbl_data_next_rec.prd44 IS NOT NULL AND
5027                                                         l_inf_tbl_data_next_rec.prd44 <> l_fnd_miss_num THEN
5028                                                            l_fix_sc_amt_pd_next_index := 44;
5029                                                      ELSIF l_inf_tbl_data_next_rec.prd45 IS NOT NULL AND
5030                                                         l_inf_tbl_data_next_rec.prd45 <> l_fnd_miss_num THEN
5031                                                            l_fix_sc_amt_pd_next_index := 45;
5032                                                      ELSIF l_inf_tbl_data_next_rec.prd46 IS NOT NULL AND
5033                                                         l_inf_tbl_data_next_rec.prd46 <> l_fnd_miss_num THEN
5034                                                            l_fix_sc_amt_pd_next_index := 46;
5035                                                      ELSIF l_inf_tbl_data_next_rec.prd47 IS NOT NULL AND
5036                                                         l_inf_tbl_data_next_rec.prd47 <> l_fnd_miss_num THEN
5037                                                            l_fix_sc_amt_pd_next_index := 47;
5038                                                      ELSIF l_inf_tbl_data_next_rec.prd48 IS NOT NULL AND
5039                                                         l_inf_tbl_data_next_rec.prd48 <> l_fnd_miss_num THEN
5040                                                            l_fix_sc_amt_pd_next_index := 48;
5041                                                      ELSIF l_inf_tbl_data_next_rec.prd49 IS NOT NULL AND
5042                                                         l_inf_tbl_data_next_rec.prd49 <> l_fnd_miss_num THEN
5043                                                            l_fix_sc_amt_pd_next_index := 49;
5044                                                      ELSIF l_inf_tbl_data_next_rec.prd50 IS NOT NULL AND
5045                                                         l_inf_tbl_data_next_rec.prd50 <> l_fnd_miss_num THEN
5046                                                            l_fix_sc_amt_pd_next_index := 50;
5047                                                      ELSIF l_inf_tbl_data_next_rec.prd51 IS NOT NULL AND
5048                                                         l_inf_tbl_data_next_rec.prd51 <> l_fnd_miss_num THEN
5049                                                            l_fix_sc_amt_pd_next_index := 51;
5050                                                      ELSIF l_inf_tbl_data_next_rec.prd52 IS NOT NULL AND
5051                                                         l_inf_tbl_data_next_rec.prd52 <> l_fnd_miss_num THEN
5052                                                            l_fix_sc_amt_pd_next_index := 52;
5053                                                      END IF; -- period not null
5054                                               END IF;
5055                                               --log1('l_cached_ra_index is '||l_cached_ra_index);
5056                                               --log1('l_cached_ra_id_tbl(l_cached_ra_index) is '||l_cached_ra_id_tbl(l_cached_ra_index));
5057 
5058                                               --log1('l_fix_sc_amt_pd_next_index is '||l_fix_sc_amt_pd_next_index);
5059                                               --log1('l_fix_sc_amt_pd_curr_index is '||l_fix_sc_amt_pd_curr_index);
5060                                               -- checking for existing RAs, the sp_fixed_date lies in the correct
5061                                               -- period where amounts have been entered
5062                                               IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
5063                                                  l_cached_ra_id_tbl(l_cached_ra_index) <> -1 AND
5064                                                  l_fix_sc_amt_pd_next_index IS NOT NULL THEN
5065                                                      l_sp_fix_prd_st_dt := p_prd_start_date_tbl(l_fix_sc_amt_pd_next_index);
5066                                                      l_sp_fix_prd_en_dt := p_prd_end_date_tbl(l_fix_sc_amt_pd_next_index);
5067 
5068                                                      --log1('l_sp_fix_prd_st_dt is '||l_sp_fix_prd_st_dt);
5069                                                      --log1('l_sp_fix_prd_en_dt is '||l_sp_fix_prd_en_dt);
5070 
5071                                                      IF NOT (l_sp_fixed_date >= l_sp_fix_prd_st_dt AND
5072                                                              l_sp_fix_prd_st_dt <= l_sp_fix_prd_en_dt) THEN
5073                                                              l_err_val_code_tbl.extend(1);
5074                                                              l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
5075                                                              l_err_task_id_tbl.extend(1);
5076                                                              l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_next_rec.task_id;
5077                                                              l_err_rlm_id_tbl.extend(1);
5078                                                              l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_next_rec.resource_list_member_id;
5079                                                              l_err_txn_curr_tbl.extend(1);
5080                                                              l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_next_rec.txn_currency_code;
5081                                                              l_err_amt_type_tbl.extend(1);
5082                                                              l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_next_rec.amount_type_code;
5083 
5084                                                              RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5085                                                      END IF;
5086                                               END IF;
5087 
5088                                               IF l_fix_sc_amt_pd_curr_index <> l_fix_sc_amt_pd_next_index THEN
5089                                                     -- amount has been entred in a different period from the previous record
5090                                                     l_err_val_code_tbl.extend(1);
5091                                                     l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
5092                                                     l_err_task_id_tbl.extend(1);
5093                                                     l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_next_rec.task_id;
5094                                                     l_err_rlm_id_tbl.extend(1);
5095                                                     l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_next_rec.resource_list_member_id;
5096                                                     l_err_txn_curr_tbl.extend(1);
5097                                                     l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_next_rec.txn_currency_code;
5098                                                     l_err_amt_type_tbl.extend(1);
5099                                                     l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_next_rec.amount_type_code;
5100 
5101                                                     RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5102                                               END IF;
5103                                               -- assigning the index of not null period of the next record to the current one
5104                                               l_fix_sc_amt_pd_curr_index := NVL(l_fix_sc_amt_pd_next_index,l_fix_sc_amt_pd_curr_index);
5105 
5106                                     END IF;
5107 
5108                         END IF;
5109 
5110                         -- validation for UOM and other resource attributes, to check if they are same for all the rows,
5111                         -- if the RA is same as well checking for planning start date/end date
5112                         IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
5113                            l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
5114                            l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id THEN
5115 
5116 
5117                                   -- checking for UOM
5118                                   IF l_inf_tbl_data_curr_rec.unit_of_measure <> l_inf_tbl_data_next_rec.unit_of_measure THEN
5119                                        l_err_val_code_tbl.extend(1);
5120                                        l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_UOM_MISS_MATCH_ERR';
5121                                        l_err_task_id_tbl.extend(1);
5122                                        l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5123                                        l_err_rlm_id_tbl.extend(1);
5124                                        l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5125                                        l_err_txn_curr_tbl.extend(1);
5126                                        l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5127                                        l_err_amt_type_tbl.extend(1);
5128                                        l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5129 
5130                                        RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5131                                   END IF;
5132                                   -- checking for spread curve
5133                                   IF l_inf_tbl_data_curr_rec.spread_curve_name <> l_inf_tbl_data_next_rec.spread_curve_name THEN
5134                                        l_err_val_code_tbl.extend(1);
5135                                        l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_SC_MISS_MATCH_ERR';
5136                                        l_err_task_id_tbl.extend(1);
5137                                        l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5138                                        l_err_rlm_id_tbl.extend(1);
5139                                        l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5140                                        l_err_txn_curr_tbl.extend(1);
5141                                        l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5142                                        l_err_amt_type_tbl.extend(1);
5143                                        l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5144 
5145                                        RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5146                                   END IF;
5147                                   -- checking for etc method
5148                                   IF l_inf_tbl_data_curr_rec.etc_method_name <> l_inf_tbl_data_next_rec.etc_method_name THEN
5149                                        l_err_val_code_tbl.extend(1);
5150                                        l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_ETC_MISS_MATCH_ERR';
5151                                        l_err_task_id_tbl.extend(1);
5152                                        l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5153                                        l_err_rlm_id_tbl.extend(1);
5154                                        l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5155                                        l_err_txn_curr_tbl.extend(1);
5156                                        l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5157                                        l_err_amt_type_tbl.extend(1);
5158                                        l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5159 
5160                                        RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5161                                   END IF;
5162                                   -- checking for mfc cost type
5163                                   IF l_inf_tbl_data_curr_rec.mfc_cost_type_name <> l_inf_tbl_data_next_rec.mfc_cost_type_name THEN
5164                                        l_err_val_code_tbl.extend(1);
5165                                        l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_MFC_MISS_MATCH_ERR';
5166                                        l_err_task_id_tbl.extend(1);
5167                                        l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5168                                        l_err_rlm_id_tbl.extend(1);
5169                                        l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5170                                        l_err_txn_curr_tbl.extend(1);
5171                                        l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5172                                        l_err_amt_type_tbl.extend(1);
5173                                        l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5174 
5175                                        RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5176                                   END IF;
5177 /* commenting out this code block as its not required to check now
5178 
5179                                   -- checking if the planning start date and end dates are same across same RA
5180                                   IF l_inf_tbl_data_curr_rec.planning_start_date <> l_inf_tbl_data_next_rec.planning_start_date THEN
5181                                         l_err_val_code_tbl.extend(1);
5182                                         l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_ST_DT_MISS_MATCH';
5183                                         l_err_task_id_tbl.extend(1);
5184                                         l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5185                                         l_err_rlm_id_tbl.extend(1);
5186                                         l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5187                                         l_err_txn_curr_tbl.extend(1);
5188                                         l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5189                                         l_err_amt_type_tbl.extend(1);
5190                                         l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5191 
5192                                         RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5193                                   END IF;
5194                                   IF l_inf_tbl_data_curr_rec.planning_end_date <> l_inf_tbl_data_next_rec.planning_end_date THEN
5195                                         l_err_val_code_tbl.extend(1);
5196                                         l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_EN_DT_MISS_MATCH';
5197                                         l_err_task_id_tbl.extend(1);
5198                                         l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5199                                         l_err_rlm_id_tbl.extend(1);
5200                                         l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5201                                         l_err_txn_curr_tbl.extend(1);
5202                                         l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5203                                         l_err_amt_type_tbl.extend(1);
5204                                         l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5205 
5206                                         RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5207                                   END IF;
5208 */
5209                         END IF;  -- same task and resource
5210 
5211                      ELSE  -- non periodic
5212                           --log1('----- STAGE 19.2-------');
5213                           IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
5214                              l_cached_ra_id_tbl(l_cached_ra_index) = -1 THEN
5215                                 IF l_plan_start_date IS NULL AND
5216                                    l_plan_end_date IS NOT NULL THEN
5217                                          l_err_val_code_tbl.extend(1);
5218                                          l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_ST_DT_MISS_ERR';
5219                                          l_err_task_id_tbl.extend(1);
5220                                          l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5221                                          l_err_rlm_id_tbl.extend(1);
5222                                          l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5223                                          l_err_txn_curr_tbl.extend(1);
5224                                          l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5225                                          RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
5226                                 ELSIF l_plan_start_date IS NOT NULL AND
5227                                       l_plan_end_date IS NULL THEN
5228                                          l_err_val_code_tbl.extend(1);
5229                                          l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_END_DT_MISS_ERR';
5230                                          l_err_task_id_tbl.extend(1);
5231                                          l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5232                                          l_err_rlm_id_tbl.extend(1);
5233                                          l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5234                                          l_err_txn_curr_tbl.extend(1);
5235                                          l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5236                                          RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
5237                                 END IF;  -- planning dates null
5238                           END IF;
5239 
5240                           --log1('----- STAGE 19.3-------');
5241                           -- checking if the sp fixed date is within planning start/end date
5242                           IF (l_plan_start_date > Nvl(l_sp_fixed_date, (l_plan_start_date + 1)))OR
5243                              (l_plan_end_date < Nvl(l_sp_fixed_date, (l_plan_end_date - 1))) THEN
5244                                 l_err_val_code_tbl.extend(1);
5245                                 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_SP_FX_DT_OUT_RANGE';
5246                                 l_err_task_id_tbl.extend(1);
5247                                 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5248                                 l_err_rlm_id_tbl.extend(1);
5249                                 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5250                                 l_err_txn_curr_tbl.extend(1);
5251                                 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5252                                 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
5253                           END IF;
5254 
5255                           --log1('----- STAGE 19.4-------');
5256                           -- validation for UOM and other resource attributes, to check if they are same for all the rows,
5257                           -- if the RA is same
5258                           IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
5259                              l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
5260                              l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id THEN
5261                                     -- checking for UOM
5262                                     IF l_inf_tbl_data_curr_rec.unit_of_measure <> l_inf_tbl_data_next_rec.unit_of_measure THEN
5263                                          l_err_val_code_tbl.extend(1);
5264                                          l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_UOM_MISS_MATCH_ERR';
5265                                          l_err_task_id_tbl.extend(1);
5266                                          l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5267                                          l_err_rlm_id_tbl.extend(1);
5268                                          l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5269                                          l_err_txn_curr_tbl.extend(1);
5270                                          l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5271 
5272                                          RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5273                                     END IF;
5274                                     -- checking for spread curve name
5275                                     IF l_inf_tbl_data_curr_rec.spread_curve_name <> l_inf_tbl_data_next_rec.spread_curve_name THEN
5276                                          l_err_val_code_tbl.extend(1);
5277                                          l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_SC_MISS_MATCH_ERR';
5278                                          l_err_task_id_tbl.extend(1);
5279                                          l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5280                                          l_err_rlm_id_tbl.extend(1);
5281                                          l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5282                                          l_err_txn_curr_tbl.extend(1);
5283                                          l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5284 
5285                                          RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5286                                     END IF;
5287                                     -- checking for etc method name
5288                                     IF l_inf_tbl_data_curr_rec.etc_method_name <> l_inf_tbl_data_next_rec.etc_method_name THEN
5289                                          l_err_val_code_tbl.extend(1);
5290                                          l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_ETC_MISS_MATCH_ERR';
5291                                          l_err_task_id_tbl.extend(1);
5292                                          l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5293                                          l_err_rlm_id_tbl.extend(1);
5294                                          l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5295                                          l_err_txn_curr_tbl.extend(1);
5296                                          l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5297 
5298                                          RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5299                                     END IF;
5300                                     -- checking for mfc cost type name
5301                                     IF l_inf_tbl_data_curr_rec.mfc_cost_type_name <> l_inf_tbl_data_next_rec.mfc_cost_type_name THEN
5302                                          l_err_val_code_tbl.extend(1);
5303                                          l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_MFC_MISS_MATCH_ERR';
5304                                          l_err_task_id_tbl.extend(1);
5305                                          l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5306                                          l_err_rlm_id_tbl.extend(1);
5307                                          l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5308                                          l_err_txn_curr_tbl.extend(1);
5309                                          l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5310 
5311                                          RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5312                                     END IF;
5313 
5314 /* commenting out this code block as its not required to check now
5315                                     -- checking if the planning start date and end dates are same across same RA
5316                                     IF l_inf_tbl_data_curr_rec.planning_start_date <> l_inf_tbl_data_next_rec.planning_start_date THEN
5317                                           l_err_val_code_tbl.extend(1);
5318                                           l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_ST_DT_MISS_MATCH';
5319                                           l_err_task_id_tbl.extend(1);
5320                                           l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5321                                           l_err_rlm_id_tbl.extend(1);
5322                                           l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5323                                           l_err_txn_curr_tbl.extend(1);
5324                                           l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5325 
5326                                           RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5327                                     END IF;
5328                                     IF l_inf_tbl_data_curr_rec.planning_end_date <> l_inf_tbl_data_next_rec.planning_end_date THEN
5329                                           l_err_val_code_tbl.extend(1);
5330                                           l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_EN_DT_MISS_MATCH';
5331                                           l_err_task_id_tbl.extend(1);
5332                                           l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5333                                           l_err_rlm_id_tbl.extend(1);
5334                                           l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5335                                           l_err_txn_curr_tbl.extend(1);
5336                                           l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5337 
5338                                           RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5339                                     END IF;
5340 */
5341                           END IF;  -- same task and resource
5342                           --log1('----- STAGE 19.5-------');
5343 
5344                      END IF;  -- non periodic
5345 
5346                      IF l_plan_trans_attr_copied_flag = 'N' THEN
5347                           --log1('----- STAGE 101-------');
5348                           -- populating an indicator to be passed to validate_budget_lines for the record
5349                           l_delete_flag := 'Y';
5350                      ELSE
5351                           --log1('----- STAGE 102-------');
5352                           l_delete_flag := 'N';
5353                      END IF;
5354 
5355                      IF is_periodic_setup = 'Y' THEN
5356                           --log1('----- STAGE 103-------');
5357                           IF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_RAW_COST' THEN
5358                              l_raw_cost := l_tmp_sum_amt;
5359                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_RAW_COST' THEN
5360                                 l_raw_cost := l_tmp_sum_amt;
5361                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_RAW_COST' THEN
5362                                 l_etc_raw_cost := l_tmp_sum_amt;
5363                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_BURDENED_COST' THEN
5364                                 l_burdened_cost := l_tmp_sum_amt;
5365                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_BURDENED_COST' THEN
5366                                 l_burdened_cost := l_tmp_sum_amt;
5367                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_BURDENED_COST' THEN
5368                                 l_etc_burdened_cost := l_tmp_sum_amt;
5369                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_REV' THEN
5370                                 l_revenue := l_tmp_sum_amt;
5371                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_REVENUE' THEN
5372                                 l_revenue := l_tmp_sum_amt;
5373                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_REVENUE' THEN
5374                                 l_etc_revenue := l_tmp_sum_amt;
5375                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_QTY' THEN
5376                                 l_quantity := l_tmp_sum_amt;
5377                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_QTY' THEN
5378                                 l_quantity := l_tmp_sum_amt;
5379                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_QTY' THEN
5380                                 l_etc_quantity := l_tmp_sum_amt;
5381                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') THEN
5382                                    l_rc_rate := l_tmp_sum_amt;
5383                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('ETC_BURDENED_COST_RATE','BURDENED_COST_RATE') THEN
5384                                    l_bc_rate := l_tmp_sum_amt;
5385                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') THEN
5386                                    l_bill_rate := l_tmp_sum_amt;
5387                           END IF;
5388                      ELSE
5389                            --log1('----- STAGE 104-------');
5390                        IF l_debug_mode = 'Y' THEN
5391                            pa_debug.g_err_stage := 'Opening Cursor non_prd_lyt_null_val_cur';
5392                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5393                        END IF;
5394                            OPEN non_prd_lyt_null_val_cur( l_inf_tbl_data_curr_rec.budget_version_id,
5395                                                           l_inf_tbl_data_curr_rec.task_id,
5396                                                           l_inf_tbl_data_curr_rec.resource_list_member_id,
5397                                                           l_inf_tbl_data_curr_rec.txn_currency_code);
5398                            FETCH non_prd_lyt_null_val_cur INTO
5399                                                               l_ratxn_total_quantity,
5400                                                               l_ratxn_total_raw_cost,
5401                                                               l_ratxn_total_burdened_cost,
5402                                                               l_ratxn_total_revenue,
5403                                                               l_ratxn_etc_quantity,
5404                                                               l_ratxn_etc_raw_cost,
5405                                                               l_ratxn_etc_burdened_cost,
5406                                                               l_ratxn_etc_revenue,
5407                                                               l_ratxn_raw_cost_over_rate,
5408                                                               l_ratxn_burden_cost_over_rate,
5409                                                               l_ratxn_bill_over_rate,
5410                                                               l_ra_rate_based_flag;
5411                            CLOSE non_prd_lyt_null_val_cur;
5412                        IF l_debug_mode = 'Y' THEN
5413                            pa_debug.g_err_stage := 'l_ratxn_total_quantity' || l_ratxn_total_quantity;
5414                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5415                            pa_debug.g_err_stage := 'l_ratxn_total_raw_cost' || l_ratxn_total_raw_cost;
5416                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5417                            pa_debug.g_err_stage := 'l_ratxn_total_burdened_cost' || l_ratxn_total_burdened_cost;
5418                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5419                            pa_debug.g_err_stage := 'l_ratxn_etc_quantity' || l_ratxn_etc_quantity;
5420                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5421                            pa_debug.g_err_stage := 'l_ratxn_etc_raw_cost' || l_ratxn_etc_raw_cost;
5422                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5423                            pa_debug.g_err_stage := 'l_ratxn_etc_burdened_cost' || l_ratxn_etc_burdened_cost;
5424                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5425                            pa_debug.g_err_stage := 'l_ratxn_etc_revenue' || l_ratxn_etc_revenue;
5426                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5427                            pa_debug.g_err_stage := 'l_ratxn_etc_revenue' || l_ratxn_etc_revenue;
5428                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5429                            pa_debug.g_err_stage := 'l_ratxn_bill_over_rate' || l_ratxn_bill_over_rate;
5430                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5431                            pa_debug.g_err_stage := 'l_ra_rate_based_flag' || l_ra_rate_based_flag;
5432                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5433                        END IF;
5434 
5435 
5436                            IF l_ratxn_total_quantity IS NULL AND (l_inf_tbl_data_curr_rec.quantity = l_fnd_miss_num) THEN
5437                               l_quantity := NULL;
5438                            ELSE
5439                               l_quantity := l_inf_tbl_data_curr_rec.quantity;
5440                            END IF;
5441                            IF l_ratxn_total_raw_cost IS NULL AND (l_inf_tbl_data_curr_rec.raw_cost = l_fnd_miss_num) THEN
5442                               l_raw_cost := NULL;
5443                            ELSE
5444                               l_raw_cost := l_inf_tbl_data_curr_rec.raw_cost;
5445                            END IF;
5446                            IF l_ratxn_total_burdened_cost IS NULL AND (l_inf_tbl_data_curr_rec.burdened_cost = l_fnd_miss_num) THEN
5447                               l_burdened_cost := NULL;
5448                            ELSE
5449                               l_burdened_cost := l_inf_tbl_data_curr_rec.burdened_cost;
5450                            END IF;
5451                            IF l_ratxn_total_revenue IS NULL AND (l_inf_tbl_data_curr_rec.revenue = l_fnd_miss_num) THEN
5452                               l_revenue := NULL;
5453                            ELSE
5454                               l_revenue := l_inf_tbl_data_curr_rec.revenue;
5455                            END IF;
5456                            IF l_ratxn_etc_quantity IS NULL AND (l_inf_tbl_data_curr_rec.etc_quantity = l_fnd_miss_num) THEN
5457                               l_etc_quantity := NULL;
5458                            ELSE
5459                               l_etc_quantity := l_inf_tbl_data_curr_rec.etc_quantity;
5460                            END IF;
5461                            IF l_ratxn_etc_raw_cost IS NULL AND (l_inf_tbl_data_curr_rec.etc_raw_cost = l_fnd_miss_num) THEN
5462                               l_etc_raw_cost := NULL;
5463                            ELSE
5464                               l_etc_raw_cost := l_inf_tbl_data_curr_rec.etc_raw_cost;
5465                            END IF;
5466                            IF l_ratxn_etc_burdened_cost IS NULL AND (l_inf_tbl_data_curr_rec.etc_burdened_cost = l_fnd_miss_num) THEN
5467                               l_etc_burdened_cost := NULL;
5468                            ELSE
5469                               l_etc_burdened_cost := l_inf_tbl_data_curr_rec.etc_burdened_cost;
5470                            END IF;
5471                            IF l_ratxn_etc_revenue IS NULL AND (l_inf_tbl_data_curr_rec.etc_revenue = l_fnd_miss_num) THEN
5472                               l_etc_revenue := NULL;
5473                            ELSE
5474                               l_etc_revenue := l_inf_tbl_data_curr_rec.etc_revenue;
5475                            END IF;
5476                            /* Bug 5068203 : Changes are made to the override rates so that the override rates
5477                               will be calculated as NULL instead of g_miss_num for a resource assignment
5478                               with rate_based_flag as 'N' and has value for override rates in new entity
5479                               and has no changes in Excel while uploaded from Excel with Non-Periodic layout.
5480                            */
5481                            IF l_ra_rate_based_flag = 'Y' THEN
5482                               IF l_ratxn_raw_cost_over_rate IS NULL AND (l_inf_tbl_data_curr_rec.raw_cost_rate = l_fnd_miss_num) THEN
5483                                  l_rc_rate := NULL;
5484                               ELSE
5485                                  l_rc_rate := l_inf_tbl_data_curr_rec.raw_cost_rate;
5486                               END IF;
5487                            ELSE
5488                               IF l_inf_tbl_data_curr_rec.quantity = l_fnd_miss_num AND (l_inf_tbl_data_curr_rec.etc_quantity IS NULL OR l_inf_tbl_data_curr_rec.etc_quantity = l_fnd_miss_num) THEN
5489                                  l_rc_rate := NULL;
5490                               ELSIF l_inf_tbl_data_curr_rec.raw_cost_rate = l_fnd_miss_num THEN
5491                                  l_rc_rate := NULL;
5492                               ELSE
5493                                  l_rc_rate := l_inf_tbl_data_curr_rec.raw_cost_rate;
5494                               END IF;
5495                            END IF;
5496 
5497                            IF l_ra_rate_based_flag = 'Y' THEN
5498                               IF l_ratxn_burden_cost_over_rate IS NULL AND (l_inf_tbl_data_curr_rec.burdened_cost_rate = l_fnd_miss_num) THEN
5499                                  l_bc_rate := NULL;
5500                               ELSE
5501                                  l_bc_rate := l_inf_tbl_data_curr_rec.burdened_cost_rate;
5502                               END IF;
5503                            ELSE
5504                               IF l_inf_tbl_data_curr_rec.quantity = l_fnd_miss_num AND (l_inf_tbl_data_curr_rec.etc_quantity IS NULL OR l_inf_tbl_data_curr_rec.etc_quantity = l_fnd_miss_num) THEN
5505                                  l_bc_rate := NULL;
5506                               ELSIF l_inf_tbl_data_curr_rec.burdened_cost_rate = l_fnd_miss_num THEN
5507                                  l_bc_rate := NULL;
5508                               ELSE
5509                                  l_bc_rate := l_inf_tbl_data_curr_rec.burdened_cost_rate;
5510                               END IF;
5511                            END IF;
5512 
5513                            IF l_ra_rate_based_flag = 'Y' THEN
5514                               IF l_ratxn_bill_over_rate IS NULL AND (l_inf_tbl_data_curr_rec.bill_rate = l_fnd_miss_num) THEN
5515                                  l_bill_rate := NULL;
5516                               ELSE
5517                                  l_bill_rate := l_inf_tbl_data_curr_rec.bill_rate;
5518                               END IF;
5519                            ELSE
5520                               IF l_inf_tbl_data_curr_rec.quantity = l_fnd_miss_num AND (l_inf_tbl_data_curr_rec.etc_quantity IS NULL OR l_inf_tbl_data_curr_rec.etc_quantity = l_fnd_miss_num) THEN
5521                                  l_bill_rate := NULL;
5522                               ELSIF l_inf_tbl_data_curr_rec.bill_rate = l_fnd_miss_num THEN
5523                                  l_bill_rate := NULL;
5524                               ELSE
5525                                  l_bill_rate := l_inf_tbl_data_curr_rec.bill_rate;
5526                               END IF;
5527                            END IF;
5528 
5529            /*                l_raw_cost          := l_inf_tbl_data_curr_rec.raw_cost;
5530                            l_burdened_cost     := l_inf_tbl_data_curr_rec.burdened_cost;
5531                            l_revenue           := l_inf_tbl_data_curr_rec.revenue;
5532                            l_quantity          := l_inf_tbl_data_curr_rec.quantity;
5533                            l_etc_quantity      := l_inf_tbl_data_curr_rec.etc_quantity;
5534                            l_etc_raw_cost      := l_inf_tbl_data_curr_rec.etc_raw_cost;
5535                            l_etc_burdened_cost := l_inf_tbl_data_curr_rec.etc_burdened_cost;
5536                            l_etc_revenue       := l_inf_tbl_data_curr_rec.etc_revenue;
5537 
5538                            l_rc_rate := l_inf_tbl_data_curr_rec.raw_cost_rate;
5539                            l_bc_rate := l_inf_tbl_data_curr_rec.burdened_cost_rate;
5540                            l_bill_rate := l_inf_tbl_data_curr_rec.bill_rate;   */
5541                      END IF;
5542 
5543                      -- initializing the min and max budget line dates
5544                      IF l_min_bdgt_line_start_date IS NULL THEN
5545                          l_min_bdgt_line_start_date:=l_bdgt_line_start_date;
5546                      ELSIF l_bdgt_line_start_date IS NOT NULL AND l_bdgt_line_start_date < l_min_bdgt_line_start_date THEN
5547                          l_min_bdgt_line_start_date:=l_bdgt_line_start_date;
5548                      END IF;
5549 
5550                      IF l_max_bdgt_line_end_date IS NULL THEN
5551                          l_max_bdgt_line_end_date:=l_bdgt_line_end_date;
5552                      ELSIF l_bdgt_line_end_date IS NOT NULL AND l_bdgt_line_end_date > l_max_bdgt_line_end_date THEN
5553                          l_max_bdgt_line_end_date:=l_bdgt_line_end_date;
5554                      END IF;
5555 
5556                      --log1('----- STAGE 105-------');
5557                      --Prepare the pl/sql tbls to be passed to validate_budget_lines API for each
5558                      --planning transaction
5559                      IF l_inf_tbl_data_next_rec.task_id IS NULL OR
5560                         Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') OR
5561                         l_inf_tbl_data_next_rec.task_id <> l_inf_tbl_data_curr_rec.task_id OR
5562                         l_inf_tbl_data_next_rec.resource_list_member_id <> l_inf_tbl_data_curr_rec.resource_list_member_id THEN
5563 
5564                         l_budget_line_in_out_tbl(bl_count).pa_task_id        := l_inf_tbl_data_curr_rec.task_id;
5565                         l_budget_line_in_out_tbl(bl_count).resource_list_member_id := l_inf_tbl_data_curr_rec.resource_list_member_id;
5566 
5567                         l_budget_line_in_out_tbl(bl_count).budget_start_date := l_min_bdgt_line_start_date;
5568                         l_budget_line_in_out_tbl(bl_count).budget_end_date   := l_max_bdgt_line_end_date;
5569 
5570                         l_budget_line_in_out_tbl(bl_count).raw_cost          := l_raw_cost;
5571                         l_budget_line_in_out_tbl(bl_count).burdened_cost     := l_burdened_cost;
5572                         l_budget_line_in_out_tbl(bl_count).revenue           := l_revenue;
5573                         l_budget_line_in_out_tbl(bl_count).quantity          := l_quantity;
5574 
5575                         x_etc_quantity_tbl.extend;
5576                         x_etc_raw_cost_tbl.extend;
5577                         x_etc_burdened_cost_tbl.extend;
5578                         x_etc_revenue_tbl.extend;
5579                         x_etc_quantity_tbl(x_etc_quantity_tbl.COUNT):=l_etc_quantity;
5580                         x_etc_raw_cost_tbl(x_etc_raw_cost_tbl.COUNT):=l_etc_raw_cost;
5581                         x_etc_burdened_cost_tbl(x_etc_burdened_cost_tbl.COUNT):=l_etc_burdened_cost;
5582                         x_etc_revenue_tbl(x_etc_revenue_tbl.COUNT):=l_etc_revenue;
5583 
5584                         --log1('--txn_currency_code-----' || l_inf_tbl_data_curr_rec.txn_currency_code);
5585                         l_budget_line_in_out_tbl(bl_count).txn_currency_code := l_inf_tbl_data_curr_rec.txn_currency_code;
5586 
5587                         l_budget_line_in_out_tbl(bl_count).description := l_bdgt_ln_tbl_description;
5588 
5589                         l_delete_flag_tbl.EXTEND(1);
5590                         l_delete_flag_tbl(bl_count) := l_delete_flag;
5591 
5592                         --log1('----- STAGE 113-------');
5593                         IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
5594                             --log1('----- STAGE 114-------');
5595                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_type      := l_projfunc_cost_rate_type;
5596                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date_type := l_projfunc_cost_rate_date_type;
5597                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date      := l_projfunc_cost_rate_date;
5598                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_exchange_rate  := l_projfunc_cost_exchange_rate;
5599                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_type       := l_projfunc_rev_rate_type;
5600                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date_type  := l_projfunc_rev_rate_date_type;
5601                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date       := l_projfunc_rev_rate_date;
5602                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_exchange_rate   := l_projfunc_rev_exchange_rate;
5603                             l_budget_line_in_out_tbl(bl_count).project_cost_rate_type       := l_project_cost_rate_type;
5604                             l_budget_line_in_out_tbl(bl_count).project_cost_rate_date_type  := l_project_cost_rate_date_type;
5605                             l_budget_line_in_out_tbl(bl_count).project_cost_rate_date       := l_project_cost_rate_date;
5606                             l_budget_line_in_out_tbl(bl_count).project_cost_exchange_rate   := l_project_cost_exchange_rate;
5607                             l_budget_line_in_out_tbl(bl_count).project_rev_rate_type        := l_project_rev_rate_type;
5608                             l_budget_line_in_out_tbl(bl_count).project_rev_rate_date_type   := l_project_rev_rate_date_type;
5609                             l_budget_line_in_out_tbl(bl_count).project_rev_rate_date        := l_project_rev_rate_date;
5610                             l_budget_line_in_out_tbl(bl_count).project_rev_exchange_rate    := l_project_rev_exchange_rate;
5611                         ELSE
5612                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_type      := null;
5613                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date_type := null;
5614                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date      := null;
5615                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_exchange_rate  := null;
5616                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_type       := null;
5617                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date_type  := null;
5618                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date       := null;
5619                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_exchange_rate   := null;
5620                             l_budget_line_in_out_tbl(bl_count).project_cost_rate_type       := null;
5621                             l_budget_line_in_out_tbl(bl_count).project_cost_rate_date_type  := null;
5622                             l_budget_line_in_out_tbl(bl_count).project_cost_rate_date       := null;
5623                             l_budget_line_in_out_tbl(bl_count).project_cost_exchange_rate   := null;
5624                             l_budget_line_in_out_tbl(bl_count).project_rev_rate_type        := null;
5625                             l_budget_line_in_out_tbl(bl_count).project_rev_rate_date_type   := null;
5626                             l_budget_line_in_out_tbl(bl_count).project_rev_rate_date        := null;
5627                             l_budget_line_in_out_tbl(bl_count).project_rev_exchange_rate    := null;
5628                         END IF;
5629 
5630                         l_budget_line_in_out_tbl(bl_count).change_reason_code := l_change_reason_code;
5631 
5632                         -- populating other parameters to be passed to validate_budget_lines
5633                         l_rc_rate_tbl.EXTEND(1);
5634                         l_rc_rate_tbl(bl_count) := l_rc_rate;
5635                         l_bc_rate_tbl.EXTEND(1);
5636                         l_bc_rate_tbl(bl_count) := l_bc_rate;
5637                         l_bill_rate_tbl.EXTEND(1);
5638                         l_bill_rate_tbl(bl_count) := l_bill_rate;
5639 
5640                         l_plan_start_date_tbl.extend(1);
5641                         l_plan_start_date_tbl(bl_count) := l_plan_start_date;
5642                         l_plan_end_date_tbl.extend(1);
5643                         l_plan_end_date_tbl(bl_count) := l_plan_end_date;
5644 
5645                         -- passing null for all the resource attributes as they are meant to be read-only
5646                         l_uom_tbl.extend(1);
5647                         l_uom_tbl(bl_count) := null;
5648                         l_spread_curve_name_tbl.extend(1);
5649                         l_spread_curve_name_tbl(bl_count) := null;
5650                         l_etc_method_code_tbl.extend(1);
5651                         l_etc_method_code_tbl(bl_count) := null;
5652                         l_mfc_cost_type_name_tbl.extend(1);
5653                         l_mfc_cost_type_name_tbl(bl_count) := null;
5654 
5655                         l_sp_fixed_date_tbl.extend(1);
5656                         l_sp_fixed_date_tbl(bl_count) := l_sp_fixed_date;
5657 
5658                         -- populating the spread curve id obtained in the out table
5659                         l_spread_curve_id_tbl.EXTEND(1);
5660                         l_spread_curve_id_tbl(bl_count) := l_spread_curve_id;
5661 
5662                         -- deriving the min and max of the budget line start/end dates
5663                         IF l_min_ra_plan_start_date IS NULL THEN
5664 
5665                             l_min_ra_plan_start_date := l_min_bdgt_line_start_date;
5666 
5667                         ELSIF l_min_bdgt_line_start_date IS NOT NULL AND
5668                               l_min_bdgt_line_start_date < l_min_ra_plan_start_date THEN
5669 
5670                             l_min_ra_plan_start_date := l_min_bdgt_line_start_date;
5671 
5672                         END IF;
5673 
5674                         IF l_max_ra_plan_end_date IS NULL THEN
5675 
5676                             l_max_ra_plan_end_date := l_max_bdgt_line_end_date;
5677 
5678                         ELSIF l_max_bdgt_line_end_date IS NOT NULL AND
5679                               l_max_bdgt_line_end_date > l_max_ra_plan_end_date THEN
5680 
5681                             l_max_ra_plan_end_date := l_max_bdgt_line_end_date;
5682 
5683                         END IF;
5684 
5685                         -- populating other out variables
5686                         l_ra_id_tbl.EXTEND(1);
5687                         l_ra_id_tbl(bl_count) := l_ra_id;
5688                         l_res_class_code_tbl.EXTEND(1);
5689                         l_res_class_code_tbl(bl_count) := l_res_class_code;
5690                         l_rate_based_flag_tbl.EXTEND(1);
5691                         l_rate_based_flag_tbl(bl_count) := l_rate_based_flag;
5692                         l_rbs_elem_id_tbl.EXTEND(1);
5693                         l_rbs_elem_id_tbl(bl_count) := l_rbs_elem_id;
5694 
5695                         l_amount_type_tbl.EXTEND(1);
5696                         l_amount_type_tbl(bl_count) := l_inf_tbl_data_curr_rec.amount_type_code;
5697 
5698                         -- incrementing the bl_count
5699                         bl_count := bl_count + 1;
5700 
5701                      END IF;
5702 
5703                      --log1('----- STAGE 107-------');
5704 
5705                END IF; -- for a distinct current record
5706 
5707                --log1('----- STAGE 115-------');
5708             EXCEPTION -- inside the loop to catch skip_ra_exc
5709                  WHEN Fp_Webadi_Skip_Dup_Rec_Exc THEN
5710                        -- exception to skip processing of the duplicate records entered
5711                        IF l_debug_mode = 'Y' THEN
5712                            pa_debug.g_err_stage := 'Fp_Webadi_Skip_Dup_Rec_Exc Raised';
5713                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5714                        END IF;
5715                        LOOP
5716                              l_inf_tbl_data_skip_rec:=NULL;
5717                              FETCH inf_tbl_data_csr INTO l_inf_tbl_data_skip_rec;
5718                              EXIT WHEN l_loop_exit_flag = 'Y' OR l_inf_tbl_data_skip_rec.task_id IS NULL;
5719 
5720                              IF l_inf_tbl_data_skip_rec.task_id <> l_inf_tbl_data_next_rec.task_id OR
5721                                 l_inf_tbl_data_skip_rec.resource_list_member_id <> l_inf_tbl_data_next_rec.resource_list_member_id OR
5722                                 Nvl(l_inf_tbl_data_skip_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') OR
5723                                 NVL(l_inf_tbl_data_skip_rec.amount_type_code,'-99') <> NVL(l_inf_tbl_data_next_rec.amount_type_code,'-99') THEN
5724 
5725                                  -- assigning the next distinct planning txn to the next_rec record
5726                                  l_inf_tbl_data_next_rec := l_inf_tbl_data_skip_rec;
5727                                  l_loop_exit_flag := 'Y';
5728 
5729                              END IF;
5730                        END LOOP;
5731                  WHEN Fp_Webadi_Skip_Rec_Proc_Exc THEN
5732                        -- exception to skip processing of the record, if any validation
5733                        -- failure occurs in the current record, so that there would be
5734                        -- at max one error code populated for any particular record.
5735                        IF l_debug_mode = 'Y' THEN
5736                            pa_debug.g_err_stage := 'Fp_Webadi_Skip_Rec_Proc_Exc Raised';
5737                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5738                        END IF;
5739                        IF l_inf_tbl_data_next_rec.task_id IS NULL THEN
5740                            FETCH inf_tbl_data_csr INTO l_inf_tbl_data_next_rec;
5741                        END IF;
5742 
5743                  WHEN Fp_Webadi_Skip_Next_Rec_Exc THEN
5744                        -- exception to skip processing of the next record, if any validation
5745                        -- failure occurs in that record, so that there would be
5746                        -- at max one error code populated for any particular record.
5747                        IF l_debug_mode = 'Y' THEN
5748                            pa_debug.g_err_stage := 'Fp_Webadi_Skip_Next_Rec_Exc Raised';
5749                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5750                        END IF;
5751                        l_inf_tbl_data_skip_rec:=NULL;
5752                        FETCH inf_tbl_data_csr INTO l_inf_tbl_data_skip_rec;
5753                        l_inf_tbl_data_next_rec := l_inf_tbl_data_skip_rec;
5754 
5755 
5756                        /* Do nothing just skip the current record and proceed with the next one */
5757             END; -- end of the processing block inside the loop
5758 
5759             -- making the next_rec as the current_rec
5760             l_inf_tbl_data_prev_rec := l_inf_tbl_data_curr_rec;
5761             l_inf_tbl_data_curr_rec := l_inf_tbl_data_next_rec;
5762             l_inf_tbl_data_next_rec := NULL;
5763 
5764             x_num_of_rec_processed := x_num_of_rec_processed + 1;
5765       END LOOP; -- end of main loop
5766 
5767       CLOSE inf_tbl_data_csr;
5768 
5769       --log1('----- STAGE 115-------'||l_err_val_code_tbl.COUNT);
5770 
5771       --  calling process_errors
5772       IF l_err_val_code_tbl.COUNT > 0 THEN
5773            IF l_debug_mode = 'Y' THEN
5774                pa_debug.g_err_stage := 'Error Code Exists.Calling process_errors';
5775                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5776            END IF;
5777            process_errors ( p_run_id          => p_run_id,
5778                             p_periodic_flag   => is_periodic_setup,
5779                             p_error_code_tbl  => l_err_val_code_tbl,
5780                             p_task_id_tbl     => l_err_task_id_tbl,
5781                             p_rlm_id_tbl      => l_err_rlm_id_tbl,
5782                             p_txn_curr_tbl    => l_err_txn_curr_tbl,
5783                             p_amount_type_tbl => l_err_amt_type_tbl,
5784                             p_request_id      => p_request_id,
5785                             x_return_status   => l_return_status,
5786                             x_msg_data        => l_msg_data,
5787                             x_msg_count       => l_msg_count);
5788               IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5789                     IF l_debug_mode = 'Y' THEN
5790                          pa_debug.g_err_stage := 'Call to process_errors returned with error';
5791                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5792                     END IF;
5793                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5794               END IF;
5795       END IF;
5796 
5797       --log1('----- STAGE 116-------'||l_err_val_code_tbl.COUNT);
5798 
5799 /*      FOR zz IN 1..l_budget_line_in_out_tbl.COUNT LOOP
5800 
5801           log1('-l_budget_line_in_out_tbl('||zz||').pa_task_id- ' || l_budget_line_in_out_tbl(zz).pa_task_id);
5802           log1('-l_budget_line_in_out_tbl('||zz||').resource_list_member_id- ' || l_budget_line_in_out_tbl(zz).resource_list_member_id);
5803           log1('-l_budget_line_in_out_tbl('||zz||').txn_currency_code- ' || l_budget_line_in_out_tbl(zz).txn_currency_code);
5804           log1('-l_budget_line_in_out_tbl('||zz||').quantity- ' || l_budget_line_in_out_tbl(zz).quantity);
5805           log1('-l_budget_line_in_out_tbl('||zz||').raw_cost- ' || l_budget_line_in_out_tbl(zz).raw_cost);
5806           log1('-l_budget_line_in_out_tbl('||zz||').burdened_cost- ' || l_budget_line_in_out_tbl(zz).burdened_cost);
5807           log1('-l_budget_line_in_out_tbl('||zz||').revenue- ' || l_budget_line_in_out_tbl(zz).revenue);
5808 
5809       END LOOP;*/
5810 
5811       -- populating the out variables
5812       x_budget_lines             := l_budget_line_in_out_tbl;
5813       x_raw_cost_rate_tbl        := l_rc_rate_tbl;
5814       x_burd_cost_rate_tbl       := l_bc_rate_tbl;
5815       x_bill_rate_tbl            := l_bill_rate_tbl;
5816       x_planning_start_date_tbl  := l_plan_start_date_tbl;
5817       x_planning_end_date_tbl    := l_plan_end_date_tbl;
5818       x_uom_tbl                  := l_uom_tbl;
5819       x_mfc_cost_type_tbl        := l_mfc_cost_type_name_tbl;
5820       x_spread_curve_name_tbl    := l_spread_curve_name_tbl;
5821       x_sp_fixed_date_tbl        := l_sp_fixed_date_tbl;
5822       x_etc_method_name_tbl      := l_etc_method_code_tbl;
5823       x_delete_flag_tbl          := l_delete_flag_tbl;
5824       -- additional parameter to validate_budget_lines
5825       x_spread_curve_id_tbl      := l_spread_curve_id_tbl;
5826 
5827       x_ra_id_tbl := l_ra_id_tbl;
5828       x_res_class_code_tbl := l_res_class_code_tbl;
5829       x_rate_based_flag_tbl := l_rate_based_flag_tbl;
5830       x_rbs_elem_id_tbl := l_rbs_elem_id_tbl;
5831       x_amt_type_tbl := l_amount_type_tbl;
5832 
5833       IF l_debug_mode = 'Y' THEN
5834           pa_debug.g_err_stage := 'Leaving pa_fp_webadi_pkg.prepare_val_input';
5835           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5836       END IF;
5837 
5838       pa_debug.reset_curr_function;
5839 
5840       --log1('----- Leaving prepare_val_input-------');
5841 
5842 EXCEPTION
5843       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
5844           l_msg_count := FND_MSG_PUB.count_msg;
5845 
5846           IF l_msg_count = 1 and x_msg_data IS NULL THEN
5847                PA_INTERFACE_UTILS_PUB.get_messages
5848                      (p_encoded        => FND_API.G_TRUE
5849                       ,p_msg_index      => 1
5850                       ,p_msg_count      => l_msg_count
5851                       ,p_msg_data       => l_msg_data
5852                       ,p_data           => l_data
5853                       ,p_msg_index_out  => l_msg_index_out);
5854                x_msg_data := l_data;
5855                x_msg_count := l_msg_count;
5856           ELSE
5857               x_msg_count := l_msg_count;
5858           END IF;
5859           x_return_status := FND_API.G_RET_STS_ERROR;
5860 
5861           pa_debug.reset_curr_function;
5862 
5863           RETURN;
5864 
5865      WHEN OTHERS THEN
5866           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5867           x_msg_count     := 1;
5868           x_msg_data      := SQLERRM;
5869 
5870           FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
5871                                   ,p_procedure_name  => 'prepare_val_input');
5872           IF l_debug_mode = 'Y' THEN
5873                pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
5874                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5875           END IF;
5876 
5877           pa_debug.reset_curr_function;
5878 
5879           RAISE;
5880 
5881 END prepare_val_input;
5882 
5883 --This is a private function used by prepare_pbl_input. This function expects p_rec, record in pa_fp_webadi_upload_inf
5884 --and p_prd that indicates the period in p_rec from which the amount should be returned.
5885 --valid values for prd are ('SD,'PD', '1'..'52')
5886 
5887 FUNCTION get_amount_in_prd_x
5888 (p_rec      IN  inf_tbl_data_csr%ROWTYPE,
5889  p_prd      IN  VARCHAR2
5890 )
5891 RETURN NUMBER
5892 IS
5893 -- variables used for debugging
5894 l_module_name               VARCHAR2(100) := 'pa_fp_webadi_pkg.get_amount_in_prd_x';
5895 l_debug_mode                VARCHAR2(1) := 'N';
5896 l_amount                    NUMBER;
5897 BEGIN
5898     fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
5899 
5900 
5901     IF l_debug_mode = 'Y' THEN
5902           pa_debug.g_err_stage := 'Entering into get_amount_in_prd_x';
5903           pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
5904           pa_debug.g_err_stage := 'Validating input parameters';
5905           pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
5906     END IF;
5907 
5908     IF l_debug_mode = 'Y' THEN
5909           pa_debug.Set_Curr_Function
5910                       (p_function   => l_module_name,
5911                        p_debug_mode => l_debug_mode);
5912     END IF;
5913 
5914     IF p_prd IS NULL THEN
5915 
5916         IF l_debug_mode = 'Y' THEN
5917 
5918             pa_debug.g_err_stage := 'p_rec is null';
5919             pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
5920             pa_debug.g_err_stage := 'p_prd is null';
5921             pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
5922             pa_debug.reset_curr_function;
5923 
5924         END IF;
5925         RETURN NULL;
5926 
5927     END IF;
5928 
5929     IF l_debug_mode = 'Y' THEN
5930           pa_debug.g_err_stage := 'p_prd is '||p_prd;
5931           pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
5932     END IF;
5933 
5934     IF p_prd ='PD' THEN
5935        l_amount := p_rec.pd_prd;
5936     ELSIF p_prd ='SD' THEN
5937         l_amount := p_rec.sd_prd;
5938     ELSIF p_prd ='1' THEN
5939         l_amount := p_rec.prd1;
5940     ELSIF p_prd ='2' THEN
5941         l_amount := p_rec.prd2;
5942     ELSIF p_prd ='3' THEN
5943         l_amount := p_rec.prd3;
5944     ELSIF p_prd ='4' THEN
5945         l_amount := p_rec.prd4;
5946     ELSIF p_prd ='5' THEN
5947         l_amount := p_rec.prd5;
5948     ELSIF p_prd ='6' THEN
5949         l_amount := p_rec.prd6;
5950     ELSIF p_prd ='7' THEN
5951         l_amount := p_rec.prd7;
5952     ELSIF p_prd ='8' THEN
5953         l_amount := p_rec.prd8;
5954     ELSIF p_prd ='9' THEN
5955         l_amount := p_rec.prd9;
5956     ELSIF p_prd ='10' THEN
5957         l_amount := p_rec.prd10;
5958     ELSIF p_prd ='11' THEN
5959         l_amount := p_rec.prd11;
5960     ELSIF p_prd ='12' THEN
5961         l_amount := p_rec.prd12;
5962     ELSIF p_prd ='13' THEN
5963         l_amount := p_rec.prd13;
5964     ELSIF p_prd ='14' THEN
5965         l_amount := p_rec.prd14;
5966     ELSIF p_prd ='15' THEN
5967         l_amount := p_rec.prd15;
5968     ELSIF p_prd ='16' THEN
5969         l_amount := p_rec.prd16;
5970     ELSIF p_prd ='17' THEN
5971         l_amount := p_rec.prd17;
5972     ELSIF p_prd ='18' THEN
5973         l_amount := p_rec.prd18;
5974     ELSIF p_prd ='19' THEN
5975         l_amount := p_rec.prd19;
5976     ELSIF p_prd ='20' THEN
5977         l_amount := p_rec.prd20;
5978     ELSIF p_prd ='21' THEN
5979         l_amount := p_rec.prd21;
5980     ELSIF p_prd ='22' THEN
5981         l_amount := p_rec.prd22;
5982     ELSIF p_prd ='23' THEN
5983         l_amount := p_rec.prd23;
5984     ELSIF p_prd ='24' THEN
5985         l_amount := p_rec.prd24;
5986     ELSIF p_prd ='25' THEN
5987         l_amount := p_rec.prd25;
5988     ELSIF p_prd ='26' THEN
5989         l_amount := p_rec.prd26;
5990     ELSIF p_prd ='27' THEN
5991         l_amount := p_rec.prd27;
5992     ELSIF p_prd ='28' THEN
5993         l_amount := p_rec.prd28;
5994     ELSIF p_prd ='29' THEN
5995         l_amount := p_rec.prd29;
5996     ELSIF p_prd ='30' THEN
5997         l_amount := p_rec.prd30;
5998     ELSIF p_prd ='31' THEN
5999         l_amount := p_rec.prd31;
6000     ELSIF p_prd ='32' THEN
6001         l_amount := p_rec.prd32;
6002     ELSIF p_prd ='33' THEN
6003         l_amount := p_rec.prd33;
6004     ELSIF p_prd ='34' THEN
6005         l_amount := p_rec.prd34;
6006     ELSIF p_prd ='35' THEN
6007         l_amount := p_rec.prd35;
6008     ELSIF p_prd ='36' THEN
6009         l_amount := p_rec.prd36;
6010     ELSIF p_prd ='37' THEN
6011         l_amount := p_rec.prd37;
6012     ELSIF p_prd ='38' THEN
6013         l_amount := p_rec.prd38;
6014     ELSIF p_prd ='39' THEN
6015         l_amount := p_rec.prd39;
6016     ELSIF p_prd ='40' THEN
6017         l_amount := p_rec.prd40;
6018     ELSIF p_prd ='41' THEN
6019         l_amount := p_rec.prd41;
6020     ELSIF p_prd ='42' THEN
6021         l_amount := p_rec.prd42;
6022     ELSIF p_prd ='43' THEN
6023         l_amount := p_rec.prd43;
6024     ELSIF p_prd ='44' THEN
6025         l_amount := p_rec.prd44;
6026     ELSIF p_prd ='45' THEN
6027         l_amount := p_rec.prd45;
6028     ELSIF p_prd ='46' THEN
6029         l_amount := p_rec.prd46;
6030     ELSIF p_prd ='47' THEN
6031         l_amount := p_rec.prd47;
6032     ELSIF p_prd ='48' THEN
6033         l_amount := p_rec.prd48;
6034     ELSIF p_prd ='49' THEN
6035         l_amount := p_rec.prd49;
6036     ELSIF p_prd ='50' THEN
6037         l_amount := p_rec.prd50;
6038     ELSIF p_prd ='51' THEN
6039         l_amount := p_rec.prd51;
6040     ELSIF p_prd ='52' THEN
6041         l_amount := p_rec.prd52;
6042     END IF;
6043 
6044     IF l_debug_mode = 'Y' THEN
6045         pa_debug.reset_curr_function;
6046     END IF;
6047 
6048     RETURN l_amount;
6049 
6050 EXCEPTION
6051     WHEN OTHERS THEN
6052 
6053         FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
6054                               ,p_procedure_name  => 'get_amount_in_prd_x');
6055         IF l_debug_mode = 'Y' THEN
6056            pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
6057            pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
6058         END IF;
6059 
6060         IF l_debug_mode = 'Y' THEN
6061           pa_debug.reset_curr_function;
6062         END IF;
6063         RAISE;
6064 END get_amount_in_prd_x;
6065 
6066 --This API is internally called from prepare_pbl_input
6067 PROCEDURE get_total_fcst_amounts
6068 (p_project_id                 IN      pa_projects_all.project_id%TYPE,
6069  p_budget_version_id          IN      pa_budget_versions.budget_version_id%TYPE,
6070  p_task_id                    IN      pa_tasks.task_id%TYPE,
6071  p_resource_list_member_id    IN      pa_resource_list_members.resource_list_member_id%TYPE,
6072  p_txn_currency_code          IN      pa_budget_lines.txn_currency_code%TYPE,
6073  p_line_start_date            IN      DATE,
6074  p_line_end_date              IN      DATE,
6075  p_prd_mask_st_date_tbl       IN      SYSTEM.pa_date_tbl_type,
6076  p_prd_mask_end_date_tbl      IN      SYSTEM.pa_date_tbl_type,
6077  p_st_index_in_prd_mask       IN      NUMBER,
6078  p_end_index_in_prd_mask      IN      NUMBER,
6079  p_etc_start_date             IN      DATE,
6080  p_etc_quantity               IN      NUMBER,
6081  p_fcst_quantity              IN      NUMBER,
6082  p_etc_raw_cost               IN      NUMBER,
6083  p_fcst_raw_cost              IN      NUMBER,
6084  p_etc_burd_cost              IN      NUMBER,
6085  p_fcst_burd_cost             IN      NUMBER,
6086  p_etc_revenue                IN      NUMBER,
6087  p_fcst_revenue               IN      NUMBER,
6088  px_cached_fcst_qty_tbl       IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6089  px_cached_fcst_raw_cost_tbl  IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6090  px_cached_fcst_burd_cost_tbl IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6091  px_cached_fcst_revenue_tbl   IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6092  px_cached_etc_qty_tbl        IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6093  px_cached_etc_raw_cost_tbl   IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6094  px_cached_etc_burd_cost_tbl  IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6095  px_cached_etc_revenue_tbl    IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6096  x_total_quantity                 OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6097  x_total_raw_cost                 OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6098  x_total_burd_cost                OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6099  x_total_revenue                  OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6100  x_return_status                  OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
6101  x_msg_count                      OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6102  x_msg_data                       OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6103  )
6104  IS
6105 --Start of variables used for debugging
6106 l_return_status                       VARCHAR2(1);
6107 l_msg_count                           NUMBER := 0;
6108 l_msg_data                            VARCHAR2(2000);
6109 l_data                                VARCHAR2(2000);
6110 l_msg_index_out                       NUMBER;
6111 l_debug_mode                          VARCHAR2(30);
6112 l_module_name                         VARCHAR2(100):='PAFPWAPB.get_total_fcst_amounts';
6113 
6114 --End of variables used for debugging
6115 l_varchar_index                       VARCHAR2(50);
6116 l_amt_typs_to_be_populated_tbl        pa_plsql_datatypes.char30TabTyp;
6117 l_amt_typ_index                       NUMBER;
6118 l_amt_exists_flag                     VARCHAR2(1);
6119 l_existing_fcst_amount                NUMBER;
6120 l_existing_etc_amount                 NUMBER;
6121 l_entered_fcst_amount                 NUMBER;
6122 l_entered_etc_amount                  NUMBER;
6123 l_total_amount                        NUMBER;
6124 l_index                               NUMBER;
6125 l_fcst_qty_tbl                        pa_plsql_datatypes.numTabTyp;
6126 l_etc_qty_tbl                         pa_plsql_datatypes.numTabTyp;
6127 l_fcst_raw_cost_tbl                   pa_plsql_datatypes.numTabTyp;
6128 l_etc_raw_cost_tbl                    pa_plsql_datatypes.numTabTyp;
6129 l_fcst_burd_cost_tbl                  pa_plsql_datatypes.numTabTyp;
6130 l_etc_burd_cost_tbl                   pa_plsql_datatypes.numTabTyp;
6131 l_fcst_revenue_tbl                    pa_plsql_datatypes.numTabTyp;
6132 l_etc_revenue_tbl                     pa_plsql_datatypes.numTabTyp;
6133 l_txn_currency_code_tbl               pa_plsql_datatypes.char15TabTyp;
6134 l_start_date_tbl                      pa_plsql_datatypes.dateTabTyp;
6135 l_end_date_tbl                        pa_plsql_datatypes.dateTabTyp;
6136 BEGIN
6137     x_msg_count := 0;
6138     x_return_status := FND_API.G_RET_STS_SUCCESS;
6139 
6140     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
6141     l_debug_mode := NVL(l_debug_mode, 'Y');
6142 
6143     -- Set curr function
6144     IF l_debug_mode='Y' THEN
6145 
6146         pa_debug.set_curr_function(
6147                     p_function   =>'PAFPWAPB.get_total_fcst_amounts'
6148                    ,p_debug_mode => l_debug_mode );
6149     END IF;
6150 
6151     IF p_task_id                  IS NULL OR
6152        p_resource_list_member_id  IS NULL OR
6153        p_txn_currency_code        IS NULL THEN
6154 
6155         IF l_debug_mode = 'Y' THEN
6156 
6157             pa_debug.g_err_stage:='p_task_id is'|| p_task_id;
6158             pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6159 
6160             pa_debug.g_err_stage:='p_resource_list_member_id is'|| p_resource_list_member_id ;
6161             pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6162 
6163             pa_debug.g_err_stage:='p_txn_currency_code is'|| p_txn_currency_code;
6164             pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6165 
6166 
6167         END IF;
6168 
6169                    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6170                                         p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
6171                                         p_token1         => 'PROCEDURENAME',
6172                                         p_value1         => 'PAFPWAPB.get_total_fcst_amount',
6173                                         p_token2         => 'STAGE',
6174                                         p_value2         => '[Task, Rlm,Txn]'||'['||p_task_id||','||p_resource_list_member_id||','||p_txn_currency_code||']');
6175 
6176         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6177 
6178     END IF;
6179 
6180     IF p_line_start_date IS NOT NULL THEN
6181 
6182         IF p_line_end_date IS NULL OR
6183            p_prd_mask_st_date_tbl.COUNT <> p_prd_mask_end_date_tbl.COUNT OR
6184            p_st_index_in_prd_mask IS NULL OR
6185            p_end_index_in_prd_mask IS NULL THEN
6186 
6187            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6188                                 p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
6189                                 p_token1         => 'PROCEDURENAME',
6190                                 p_value1         => 'PAFPWAPB.get_total_fcst_amount',
6191                                 p_token2         => 'STAGE',
6192                                 p_value2         => 'Invalid Budget Level parameters');
6193 
6194             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6195 
6196         END IF;
6197 
6198     END IF;
6199 
6200     l_amt_typ_index:=0;
6201     IF p_etc_quantity  IS NULL AND
6202        p_fcst_quantity IS NULL THEN
6203 
6204         x_total_quantity := NULL;
6205 
6206     ELSIF p_etc_quantity  IS NULL AND
6207           p_fcst_quantity IS NOT NULL THEN
6208 
6209         x_total_quantity := p_fcst_quantity;
6210 
6211     ELSE
6212         l_amt_typ_index:=l_amt_typ_index+1;
6213         l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='QUANTITY';
6214     END IF;
6215 
6216     IF p_etc_raw_cost  IS NULL AND
6217        p_fcst_raw_cost IS NULL THEN
6218 
6219         x_total_raw_cost := NULL;
6220 
6221     ELSIF p_etc_raw_cost  IS NULL AND
6222           p_fcst_raw_cost IS NOT NULL THEN
6223 
6224         x_total_raw_cost := p_fcst_raw_cost;
6225 
6226     ELSE
6227         l_amt_typ_index:=l_amt_typ_index+1;
6228         l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='RAW_COST';
6229     END IF;
6230 
6231 
6232     IF  p_etc_burd_cost  IS NULL AND
6233         p_fcst_burd_cost IS NULL THEN
6234 
6235         x_total_burd_cost := NULL;
6236 
6237     ELSIF p_etc_burd_cost IS NULL AND
6238           p_fcst_burd_cost IS NOT NULL THEN
6239 
6240         x_total_burd_cost := p_fcst_burd_cost;
6241 
6242     ELSE
6243 
6244         l_amt_typ_index:=l_amt_typ_index+1;
6245         l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='BURDENED_COST';
6246 
6247     END IF;
6248 
6249 
6250     IF p_etc_revenue  IS NULL AND
6251        p_fcst_revenue IS NULL THEN
6252 
6253         x_total_revenue := NULL;
6254 
6255     ELSIF p_etc_revenue  IS NULL AND
6256           p_fcst_revenue IS NOT NULL THEN
6257 
6258         x_total_revenue := p_fcst_revenue;
6259 
6260     ELSE
6261         l_amt_typ_index:=l_amt_typ_index+1;
6262         l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='REVENUE';
6263     END IF;
6264 
6265     IF l_debug_mode = 'Y' THEN
6266         pa_debug.g_err_stage:='l_amt_typs_to_be_populated_tbl.COUNT '||l_amt_typs_to_be_populated_tbl.COUNT;
6267         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
6268     END IF;
6269 
6270     IF l_amt_typs_to_be_populated_tbl.COUNT>0 THEN
6271 
6272         --Check if the details of the planning transactions for this resource assignment are already fetched or not.
6273         --If the details are already fetched then the RA index of px_cached_fcst_qty_tbl will contain the no. of
6274         --planning transactions/periodic lines for the RA.
6275         l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) ;
6276         IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6277 
6278             IF p_line_start_date IS NULL THEN
6279 
6280                 SELECT SUM(NVL(pbl.quantity,0)),
6281                        SUM(NVL(pbl.quantity,0)-NVL(pbl.init_quantity,0)),
6282                        SUM(NVL(pbl.txn_raw_cost,0)),
6283                        SUM(NVL(pbl.txn_raw_cost,0)-NVL(pbl.txn_init_raw_cost,0)),
6284                        SUM(NVL(pbl.txn_burdened_cost,0)),
6285                        SUM(NVL(pbl.txn_burdened_cost,0)-NVL(pbl.txn_init_burdened_cost,0)),
6286                        SUM(NVL(pbl.txn_revenue,0)),
6287                        SUM(NVL(pbl.txn_revenue,0)-NVL(txn_init_revenue,0)),
6288                        pbl.txn_currency_code
6289                 BULK COLLECT INTO
6290                        l_fcst_qty_tbl,
6291                        l_etc_qty_tbl,
6292                        l_fcst_raw_cost_tbl,
6293                        l_etc_raw_cost_tbl,
6294                        l_fcst_burd_cost_tbl,
6295                        l_etc_burd_cost_tbl,
6296                        l_fcst_revenue_tbl,
6297                        l_etc_revenue_tbl,
6298                        l_txn_currency_code_tbl
6299                 FROM   pa_budget_lines pbl,
6300                        pa_resource_assignments pra
6301                 WHERE  pra.budget_version_id=p_budget_version_id
6302                 AND    pra.project_id=p_project_id
6303                 AND    pra.task_id=p_task_id
6304                 AND    pra.resource_list_member_id=p_resource_list_member_id
6305                 AND    pra.project_assignment_id=-1
6306                 AND    pbl.resource_assignment_id=pra.resource_assignment_id
6307                 GROUP BY pbl.txn_currency_code;
6308 
6309                 FOR i IN 1..l_txn_currency_code_tbl.COUNT LOOP
6310 
6311                     l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) || 'C' || l_txn_currency_code_tbl(i);
6312 
6313                     px_cached_fcst_qty_tbl(l_varchar_index)       := l_fcst_qty_tbl(i);
6314                     px_cached_etc_qty_tbl(l_varchar_index)        := l_etc_qty_tbl(i);
6315                     px_cached_fcst_raw_cost_tbl(l_varchar_index)  := l_fcst_raw_cost_tbl(i);
6316                     px_cached_etc_raw_cost_tbl(l_varchar_index)   := l_etc_raw_cost_tbl(i);
6317                     px_cached_fcst_burd_cost_tbl(l_varchar_index) := l_fcst_burd_cost_tbl(i);
6318                     px_cached_etc_burd_cost_tbl(l_varchar_index)  := l_etc_burd_cost_tbl(i);
6319                     px_cached_fcst_revenue_tbl(l_varchar_index)   := l_fcst_revenue_tbl(i);
6320                     px_cached_etc_revenue_tbl(l_varchar_index)    := l_etc_revenue_tbl(i);
6321 
6322                 END LOOP;
6323 
6324                 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) ;
6325                 px_cached_fcst_qty_tbl(l_varchar_index):=l_txn_currency_code_tbl.COUNT;
6326 
6327             ELSE--The layout is a periodic layout
6328 
6329                 SELECT NVL(pbl.quantity,0),
6330                        NVL(pbl.quantity,0)-NVL(pbl.init_quantity,0),
6331                        NVL(pbl.txn_raw_cost,0),
6332                        NVL(pbl.txn_raw_cost,0)-NVL(pbl.txn_init_raw_cost,0),
6333                        NVL(pbl.txn_burdened_cost,0),
6334                        NVL(pbl.txn_burdened_cost,0)-NVL(pbl.txn_init_burdened_cost,0),
6335                        NVL(pbl.txn_revenue,0),
6336                        NVL(pbl.txn_revenue,0)-NVL(txn_init_revenue,0),
6337                        pbl.txn_currency_code,
6338                        pbl.start_date,
6339                        pbl.end_date
6340                 BULK COLLECT INTO
6341                        l_fcst_qty_tbl,
6342                        l_etc_qty_tbl,
6343                        l_fcst_raw_cost_tbl,
6344                        l_etc_raw_cost_tbl,
6345                        l_fcst_burd_cost_tbl,
6346                        l_etc_burd_cost_tbl,
6347                        l_fcst_revenue_tbl,
6348                        l_etc_revenue_tbl,
6349                        l_txn_currency_code_tbl,
6350                        l_start_date_tbl,
6351                        l_end_date_tbl
6352                 FROM   pa_budget_lines pbl,
6353                        pa_resource_assignments pra
6354                 WHERE  pra.budget_version_id=p_budget_version_id
6355                 AND    pra.project_id=p_project_id
6356                 AND    pra.task_id=p_task_id
6357                 AND    pra.resource_list_member_id=p_resource_list_member_id
6358                 AND    pra.project_assignment_id=-1
6359                 AND    pbl.resource_assignment_id=pra.resource_assignment_id
6360                 ORDER BY pbl.start_date,pbl.end_date,pbl.txn_currency_code;
6361 
6362 
6363                 l_index:=1;
6364                 FOR i IN p_st_index_in_prd_mask..p_end_index_in_prd_mask LOOP
6365 
6366                     IF l_start_date_tbl.COUNT < l_index THEN
6367 
6368                         EXIT;
6369 
6370                     END IF;
6371 
6372                     LOOP
6373 
6374                         EXIT WHEN l_start_date_tbl.COUNT < l_index OR
6375                                   l_start_date_tbl(l_index) NOT BETWEEN p_prd_mask_st_date_tbl(i) AND p_prd_mask_end_date_tbL(i);
6376 
6377                         l_varchar_index:=  'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id)
6378                                          ||'C' || l_txn_currency_code_tbl(l_index)
6379                                          ||'S' || TO_CHAR(p_prd_mask_st_date_tbl(i),'DD-MM-YYYY')
6380                                          ||'E' || TO_CHAR(p_prd_mask_end_date_tbl(i),'DD-MM-YYYY');
6381 
6382                         IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6383 
6384                             px_cached_fcst_qty_tbl(l_varchar_index)       := l_fcst_qty_tbl(l_index);
6385                             px_cached_etc_qty_tbl(l_varchar_index)        := l_etc_qty_tbl(l_index);
6386                             px_cached_fcst_raw_cost_tbl(l_varchar_index)  := l_fcst_raw_cost_tbl(l_index);
6387                             px_cached_etc_raw_cost_tbl(l_varchar_index)   := l_etc_raw_cost_tbl(l_index);
6388                             px_cached_fcst_burd_cost_tbl(l_varchar_index) := l_fcst_burd_cost_tbl(l_index);
6389                             px_cached_etc_burd_cost_tbl(l_varchar_index)  := l_etc_burd_cost_tbl(l_index);
6390                             px_cached_fcst_revenue_tbl(l_varchar_index)   := l_fcst_revenue_tbl(l_index);
6391                             px_cached_etc_revenue_tbl(l_varchar_index)    := l_etc_revenue_tbl(l_index);
6392 
6393                         ELSE
6394 
6395                             px_cached_fcst_qty_tbl(l_varchar_index)       := px_cached_fcst_qty_tbl(l_varchar_index) + l_fcst_qty_tbl(l_index);
6396                             px_cached_etc_qty_tbl(l_varchar_index)        := px_cached_etc_qty_tbl(l_varchar_index) + l_etc_qty_tbl(l_index);
6397                             px_cached_fcst_raw_cost_tbl(l_varchar_index)  := px_cached_fcst_raw_cost_tbl(l_varchar_index)+l_fcst_raw_cost_tbl(l_index);
6398                             px_cached_etc_raw_cost_tbl(l_varchar_index)   := px_cached_etc_raw_cost_tbl(l_varchar_index)+l_etc_raw_cost_tbl(l_index);
6399                             px_cached_fcst_burd_cost_tbl(l_varchar_index) := px_cached_fcst_burd_cost_tbl(l_varchar_index)+l_fcst_burd_cost_tbl(l_index);
6400                             px_cached_etc_burd_cost_tbl(l_varchar_index)  := px_cached_etc_burd_cost_tbl(l_varchar_index)+l_etc_burd_cost_tbl(l_index);
6401                             px_cached_fcst_revenue_tbl(l_varchar_index)   := px_cached_fcst_revenue_tbl(l_varchar_index)+l_fcst_revenue_tbl(l_index);
6402                             px_cached_etc_revenue_tbl(l_varchar_index)    := px_cached_etc_revenue_tbl(l_varchar_index)+l_etc_revenue_tbl(l_index);
6403 
6404                         END IF;
6405 
6406                         l_index:=l_index+1;
6407 
6408                     END LOOP;--For the budget lines
6409 
6410 
6411                 END LOOP;--FOR i IN p_st_index_in_prd_mask..p_end_index_in_prd_mask LOOP
6412 
6413                 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) ;
6414                 px_cached_fcst_qty_tbl(l_varchar_index):=px_cached_fcst_qty_tbl.COUNT;
6415 
6416 
6417             END IF;----The layout is a periodic layout
6418 
6419 
6420         END IF;--IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6421 
6422         IF p_line_start_date IS NULL THEN
6423             l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) || 'C' || p_txn_currency_code;
6424         ELSE
6425             l_varchar_index:=  'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id)
6426                              ||'C' || p_txn_currency_code
6427                              ||'S' || TO_CHAR(p_line_start_date,'DD-MM-YYYY')
6428                              ||'E' || TO_CHAR(p_line_end_date,'DD-MM-YYYY');
6429         END IF;
6430         --log1('1 l_varchar_index '||l_varchar_index);
6431         --log1('2 p_fcst_quantity '||p_fcst_quantity);
6432         --log1('3 p_etc_quantity '||p_etc_quantity);
6433         --log1('4 p_line_start_date '||p_line_start_date);
6434         --log1('5 p_line_end_date '||p_line_end_date);
6435 
6436         FOR i IN 1..l_amt_typs_to_be_populated_tbl.COUNT LOOP
6437 
6438             l_entered_fcst_amount:=NULL;
6439             l_entered_etc_amount:=NULL;
6440             l_existing_fcst_amount:=NULL;
6441             l_existing_etc_amount:=NULL;
6442             l_amt_exists_flag:='N';
6443             l_total_amount:=NULL;
6444 
6445             IF l_amt_typs_to_be_populated_tbl(i)='QUANTITY' THEN
6446 
6447                 l_entered_fcst_amount:=p_fcst_quantity;
6448                 l_entered_etc_amount :=p_etc_quantity;
6449 
6450                 --Budget lines for the planning transaction do not exist
6451                 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6452 
6453                     l_amt_exists_flag:='N';
6454 
6455                 ELSE
6456 
6457                     l_amt_exists_flag:='Y';
6458                     l_existing_fcst_amount:=px_cached_fcst_qty_tbl(l_varchar_index);
6459                     l_existing_etc_amount:=px_cached_etc_qty_tbl(l_varchar_index);
6460 
6461                 END IF;
6462 
6463             ELSIF l_amt_typs_to_be_populated_tbl(i)='RAW_COST' THEN
6464 
6465                 l_entered_fcst_amount:=p_fcst_raw_cost;
6466                 l_entered_etc_amount :=p_etc_raw_cost;
6467 
6468                 --Budget lines for the planning transaction do not exist
6469                 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6470 
6471                     l_amt_exists_flag:='N';
6472 
6473                 ELSE
6474 
6475                     l_amt_exists_flag:='Y';
6476                     l_existing_fcst_amount:=px_cached_fcst_raw_cost_tbl(l_varchar_index);
6477                     l_existing_etc_amount:=px_cached_etc_raw_cost_tbl(l_varchar_index);
6478 
6479                 END IF;
6480 
6481             ELSIF l_amt_typs_to_be_populated_tbl(i)='BURDENED_COST' THEN
6482 
6483                 l_entered_fcst_amount:=p_fcst_burd_cost;
6484                 l_entered_etc_amount :=p_etc_burd_cost;
6485 
6486                 --Budget lines for the planning transaction do not exist
6487                 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6488 
6489                     l_amt_exists_flag:='N';
6490 
6491                 ELSE
6492 
6493                     l_amt_exists_flag:='Y';
6494                     l_existing_fcst_amount:=px_cached_fcst_burd_cost_tbl(l_varchar_index);
6495                     l_existing_etc_amount:=px_cached_etc_burd_cost_tbl(l_varchar_index);
6496 
6497                 END IF;
6498 
6499             ELSIF l_amt_typs_to_be_populated_tbl(i)='REVENUE' THEN
6500 
6501                 l_entered_fcst_amount:=p_fcst_revenue;
6502                 l_entered_etc_amount :=p_etc_revenue;
6503 
6504                 --Budget lines for the planning transaction do not exist
6505                 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6506 
6507                     l_amt_exists_flag:='N';
6508 
6509                 ELSE
6510 
6511                     l_amt_exists_flag:='Y';
6512                     l_existing_fcst_amount:=px_cached_fcst_revenue_tbl(l_varchar_index);
6513                     l_existing_etc_amount:=px_cached_etc_revenue_tbl(l_varchar_index);
6514 
6515                 END IF;
6516 
6517             END IF;
6518             --log1('6 l_amt_exists_flag '||l_amt_exists_flag);
6519             --log1('7 l_entered_fcst_amount '||l_entered_fcst_amount);
6520             --log1('8 l_entered_etc_amount '||l_entered_etc_amount);
6521 
6522             IF l_amt_exists_flag='N' THEN
6523 
6524                 --IF forecast is not g miss num then it should be considered. Note that g miss num
6525                 --will be there if NULL is entered in the layout.
6526                 IF l_entered_fcst_amount IS NOT NULL  AND
6527                    l_entered_fcst_amount <> l_fnd_miss_num THEN
6528 
6529                     l_total_amount:=l_entered_fcst_amount;
6530 
6531                 --IF ETC is not g miss num then it should be considered. Note that g miss num
6532                 --will be there if NULL is entered in the layout.
6533                 ELSIF l_entered_etc_amount IS NOT NULL  AND
6534                       l_entered_etc_amount <> l_fnd_miss_num THEN
6535 
6536                     l_total_amount:=l_entered_etc_amount;
6537 
6538                 ELSE
6539 
6540                     l_total_amount:=NULL;
6541 
6542                 END IF;
6543 
6544             --Budget lines for the planning transaction  exist
6545             ELSE
6546 
6547                 IF l_existing_fcst_amount IS NULL AND
6548                    l_entered_fcst_amount  IS NOT NULL AND
6549                    l_entered_fcst_amount <> l_fnd_miss_num  THEN
6550 
6551                     l_total_amount:=l_entered_fcst_amount;
6552 
6553                 ELSIF l_existing_fcst_amount IS NOT NULL AND
6554                       l_entered_fcst_amount  IS NOT NULL AND
6555                       l_entered_fcst_amount <> l_existing_fcst_amount  THEN
6556 
6557                     l_total_amount:=l_entered_fcst_amount;
6558 
6559                 ELSIF l_existing_etc_amount IS NULL AND
6560                       l_entered_etc_amount IS NOT NULL AND
6561                       l_entered_etc_amount <> l_fnd_miss_num  THEN
6562 
6563                     l_total_amount:=l_entered_etc_amount + NVL(l_existing_fcst_amount,0) - NVL(l_existing_etc_amount,0);
6564 
6565                 ELSIF l_existing_etc_amount IS NOT NULL AND
6566                       l_entered_etc_amount IS NOT NULL AND
6567                       l_entered_etc_amount <> l_existing_etc_amount  THEN
6568 
6569                     l_total_amount:=l_entered_etc_amount + NVL(l_existing_fcst_amount,0) - NVL(l_existing_etc_amount,0);
6570 
6571                 ELSE
6572 
6573                     l_total_amount:=NULL;
6574 
6575                 END IF;
6576 
6577             END IF;--IF l_amt_exists_flag='N' THEN
6578 
6579             --Assign the above derived total amount to the appropriate OUT variable
6580             IF l_amt_typs_to_be_populated_tbl(i)='QUANTITY' THEN
6581 
6582                 x_total_quantity:=l_total_amount;
6583 
6584             ELSIF l_amt_typs_to_be_populated_tbl(i)='RAW_COST' THEN
6585 
6586                 x_total_raw_cost:=l_total_amount;
6587 
6588             ELSIF l_amt_typs_to_be_populated_tbl(i)='BURDENED_COST' THEN
6589 
6590                 x_total_burd_cost:=l_total_amount;
6591 
6592             ELSIF l_amt_typs_to_be_populated_tbl(i)='REVENUE' THEN
6593 
6594                 x_total_revenue:=l_total_amount;
6595 
6596             END IF;
6597 
6598         END LOOP;--FOR i IN 1..l_amt_typs_to_be_populated_tbl.COUNT LOOP
6599 
6600     END IF;--IF l_amt_typs_to_be_populated_tbl.COUNT>0 THEN
6601 
6602     IF l_debug_mode = 'Y' THEN
6603         pa_debug.g_err_stage:='Leaving get_total_fcst_amounts';
6604         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
6605         pa_debug.reset_curr_function;
6606     END IF;
6607 
6608 EXCEPTION
6609 
6610    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
6611        l_msg_count := FND_MSG_PUB.count_msg;
6612        IF l_msg_count = 1 THEN
6613            PA_INTERFACE_UTILS_PUB.get_messages
6614                  (p_encoded        => FND_API.G_TRUE
6615                   ,p_msg_index      => 1
6616                   ,p_msg_count      => l_msg_count
6617                   ,p_msg_data       => l_msg_data
6618                   ,p_data           => l_data
6619                   ,p_msg_index_out  => l_msg_index_out);
6620 
6621            x_msg_data := l_data;
6622            x_msg_count := l_msg_count;
6623        ELSE
6624            x_msg_count := l_msg_count;
6625        END IF;
6626        x_return_status := FND_API.G_RET_STS_ERROR;
6627 
6628        IF l_debug_mode = 'Y' THEN
6629            pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
6630            pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6631            -- reset curr function
6632            pa_debug.reset_curr_function();
6633 
6634        END IF;
6635 
6636        RETURN;
6637    WHEN OTHERS THEN
6638        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6639        x_msg_count     := 1;
6640        x_msg_data      := SQLERRM;
6641 
6642        FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'pa_fp_webadi_pkg'
6643                                ,p_procedure_name  => 'get_total_fcst_amounts');
6644 
6645        IF l_debug_mode = 'Y' THEN
6646            pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
6647            pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6648           -- reset curr function
6649            pa_debug.Reset_Curr_Function();
6650        END IF;
6651        RAISE;
6652 
6653 END get_total_fcst_amounts;
6654 
6655 --This is a private API called from Switcher API. This API assumes that the data exists
6656 --in pa_fp_webadi_upload_inf table and this data has been already validated.
6657 
6658 --Note: p_budget_lines_tbl contains records ordered by task id, resource alias and curr. This
6659 --API assumes that there exists only one record for an RA/TXN Currency Code in p_budget_lines_tbl
6660 
6661 --p_prd_mask_st/end_date_tbl contains the start/end dates of flexible periods in the period mask. If period mask contains
6662 --10 elements then elements between 1 t0 10 will contain start/end dates of the flexible periods in the mask.
6663 --p_first_pd_bf_pm_en_dt contains the end date of the period that immediately preceeds the first period in the period mask
6664 --and it will be used as the end date if the amounts are entered in preceeding bucket
6665 --p_last_pd_af_pm_st_dt contains the start date of the period that immediately succeeds the last period in the period mask
6666 --and it will be used as the start date if the amounts are entered in preceeding bucket
6667 
6668 PROCEDURE prepare_pbl_input
6669 (p_context                         IN    VARCHAR2,
6670  p_run_id                          IN    pa_fp_webadi_upload_inf.run_id%TYPE,
6671  p_request_id                      IN    pa_budget_versions.request_id%TYPE    DEFAULT  NULL,
6672  p_inf_tbl_rec_tbl                 IN    inf_cur_tbl_typ,
6673  p_version_info_rec                IN    pa_fp_gen_amount_utils.fp_cols,
6674  p_project_id                      IN    pa_projects_all.project_id%TYPE,
6675  p_budget_version_id               IN    pa_budget_versions.budget_version_id%TYPE,
6676  p_budget_lines_tbl                IN    PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE,
6677  p_ra_id_tbl                       IN    SYSTEM.pa_num_tbl_type,
6678  p_etc_start_date                  IN    pa_budget_versions.etc_start_date%TYPE,
6679  p_plan_class_code                 IN    pa_fin_plan_types_b.plan_class_code%TYPE,
6680  p_first_pd_bf_pm_en_dt            IN    DATE,
6681  p_last_pd_af_pm_st_dt             IN    DATE,
6682  p_prd_mask_st_date_tbl            IN    SYSTEM.pa_date_tbl_type,
6683  p_prd_mask_end_date_tbl           IN    SYSTEM.pa_date_tbl_type,
6684  p_planning_start_date_tbl         IN    SYSTEM.pa_date_tbl_type,
6685  p_planning_end_date_tbl           IN    SYSTEM.pa_date_tbl_type,
6686  p_etc_quantity_tbl                IN    SYSTEM.pa_num_tbl_type,
6687  p_etc_raw_cost_tbl                IN    SYSTEM.pa_num_tbl_type,
6688  p_etc_burdened_cost_tbl           IN    SYSTEM.pa_num_tbl_type,
6689  p_etc_revenue_tbl                 IN    SYSTEM.pa_num_tbl_type,
6690  p_raw_cost_rate_tbl               IN    SYSTEM.pa_num_tbl_type,
6691  p_burd_cost_rate_tbl              IN    SYSTEM.pa_num_tbl_type,
6692  p_bill_rate_tbl                   IN    SYSTEM.pa_num_tbl_type,
6693  p_spread_curve_id_tbl             IN    SYSTEM.pa_num_tbl_type,
6694  p_mfc_cost_type_id_tbl            IN    SYSTEM.pa_num_tbl_type,
6695  p_etc_method_code_tbl             IN    SYSTEM.pa_varchar2_30_tbl_type ,
6696  p_sp_fixed_date_tbl               IN    SYSTEM.pa_date_tbl_type,
6697  p_res_class_code_tbl              IN    SYSTEM.pa_varchar2_30_tbl_type ,
6698  p_rate_based_flag_tbl             IN    SYSTEM.pa_varchar2_1_tbl_type ,
6699  p_rbs_elem_id_tbl                 IN    SYSTEM.pa_num_tbl_type,
6700  p_delete_flag_tbl                 IN    SYSTEM.pa_varchar2_1_tbl_type ,
6701  x_task_id_tbl                     OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6702  x_rlm_id_tbl                      OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6703  x_ra_id_tbl                       OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6704  x_txn_currency_code_tbl           OUT   NOCOPY SYSTEM.pa_varchar2_15_tbl_type , --File.Sql.39 bug 4440895
6705  x_planning_start_date_tbl         OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6706  x_planning_end_date_tbl           OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6707  x_total_qty_tbl                   OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6708  x_total_raw_cost_tbl              OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6709  x_total_burdened_cost_tbl         OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6710  x_total_revenue_tbl               OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6711  x_raw_cost_rate_tbl               OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6712  x_burdened_cost_rate_tbl          OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6713  x_bill_rate_tbl                   OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6714  x_line_start_date_tbl             OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6715  x_line_end_date_tbl               OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6716  x_proj_cost_rate_type_tbl         OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6717  x_proj_cost_rate_date_type_tbl    OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6718  x_proj_cost_rate_tbl              OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6719  x_proj_cost_rate_date_tbl         OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6720  x_proj_rev_rate_type_tbl          OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6721  x_proj_rev_rate_date_type_tbl     OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6722  x_proj_rev_rate_tbl               OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6723  x_proj_rev_rate_date_tbl          OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6724  x_pfunc_cost_rate_type_tbl        OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6725  x_pfunc_cost_rate_date_typ_tbl    OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6726  x_pfunc_cost_rate_tbl             OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6727  x_pfunc_cost_rate_date_tbl        OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6728  x_pfunc_rev_rate_type_tbl         OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6729  x_pfunc_rev_rate_date_type_tbl    OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6730  x_pfunc_rev_rate_tbl              OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6731  x_pfunc_rev_rate_date_tbl         OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6732  x_delete_flag_tbl                 OUT   NOCOPY SYSTEM.pa_varchar2_1_tbl_type, --File.Sql.39 bug 4440895
6733  x_spread_curve_id_tbl             OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6734  x_mfc_cost_type_id_tbl            OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6735  x_etc_method_code_tbl             OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6736  x_sp_fixed_date_tbl               OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6737  x_res_class_code_tbl              OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6738  x_rate_based_flag_tbl             OUT   NOCOPY SYSTEM.pa_varchar2_1_tbl_type , --File.Sql.39 bug 4440895
6739  x_rbs_elem_id_tbl                 OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6740  x_change_reason_code_tbl          OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type, --File.Sql.39 bug 4440895
6741  x_description_tbl                 OUT   NOCOPY SYSTEM.pa_varchar2_2000_tbl_type, --File.Sql.39 bug 4440895
6742  x_return_status                   OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
6743  x_msg_count                       OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
6744  x_msg_data                        OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6745 )
6746 IS
6747 -- variables used for debugging
6748 l_module_name                   VARCHAR2(100) := 'pa_fp_webadi_pkg.prepare_pbl_input';
6749 l_debug_mode                    VARCHAR2(1) := 'N';
6750 l_debug_level3                  CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
6751 l_debug_level5                  CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
6752 
6753 l_msg_count                     NUMBER;
6754 l_msg_data                      VARCHAR2(2000);
6755 l_data                          VARCHAR2(2000);
6756 l_msg_index_out                 NUMBER;
6757 
6758 --Variable used in processing
6759 l_prev_task_id                  NUMBER;
6760 l_prev_rlm_id                   NUMBER;
6761 l_prev_txn_curr_code            pa_budget_lines.txn_currency_code%TYPE;
6762 l_bl_index                      NUMBER;
6763 l_st_index_in_prd_mask          NUMBER;
6764 l_end_index_in_prd_mask         NUMBER;
6765 l_sd_prd_exists_flag            VARCHAR2(1);
6766 l_pd_prd_exists_flag            VARCHAR2(1);
6767 l_num_of_prds_for_plan_txn      NUMBER;
6768 l_extend_pbl_out_tbls_flag      VARCHAR2(1);
6769 l_prev_pbl_tbl_count            NUMBER;
6770 l_amount                        NUMBER;
6771 l_prd_index                     VARCHAR2(2);
6772 l_tmp_index                     NUMBER;
6773 l_plan_txn_attrs_copied_flag    VARCHAR2(1);
6774 
6775 kk                              NUMBER;
6776 l_g_miss_char   CONSTANT        VARCHAR(1)  := FND_API.G_MISS_CHAR;
6777 l_g_miss_num    CONSTANT        NUMBER      := FND_API.G_MISS_NUM;
6778 l_g_miss_date   CONSTANT        DATE        := FND_API.G_MISS_DATE;
6779 
6780 l_curr_rec                      inf_tbl_data_csr%ROWTYPE;
6781 
6782 l_cached_fcst_qty_tbl           varchar_70_indexed_num_tbl_typ;
6783 l_cached_fcst_raw_cost_tbl      varchar_70_indexed_num_tbl_typ;
6784 l_cached_fcst_burd_cost_tbl     varchar_70_indexed_num_tbl_typ;
6785 l_cached_fcst_revenue_tbl       varchar_70_indexed_num_tbl_typ;
6786 l_cached_etc_qty_tbl            varchar_70_indexed_num_tbl_typ;
6787 l_cached_etc_raw_cost_tbl       varchar_70_indexed_num_tbl_typ;
6788 l_cached_etc_burd_cost_tbl      varchar_70_indexed_num_tbl_typ;
6789 l_cached_etc_revenue_tbl        varchar_70_indexed_num_tbl_typ;
6790 l_tmp_quantity                  NUMBER;
6791 l_tmp_raw_cost                  NUMBER;
6792 l_tmp_burd_cost                 NUMBER;
6793 l_tmp_revenue                   NUMBER;
6794 l_allow_qty_flag                VARCHAR2(1);
6795 l_skip_ra_flag                  VARCHAR2(1);
6796 l_skip_task_id                  pa_resource_assignments.task_id%TYPE;
6797 l_skip_rlm_id                   pa_resource_assignments.resource_list_member_id%TYPE;
6798 
6799 
6800 --These tbls will be prepared in this manner
6801 ----First element is for the proceeding bucket . Next p_prd_mask_st_date_tbl.COUNT buckets will contain
6802 ----start/end dates of the periods in the period mask. Last element will be for the succeeding bucket.
6803 l_prd_mask_st_date_tbl          SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
6804 l_prd_mask_end_date_tbl         SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
6805 
6806 tt                              NUMBER;
6807 
6808 BEGIN
6809     fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
6810 
6811     x_return_status := FND_API.G_RET_STS_SUCCESS;
6812     x_msg_count := 0;
6813 
6814     IF l_debug_mode = 'Y' THEN
6815           pa_debug.Set_Curr_Function
6816                       (p_function   => l_module_name,
6817                        p_debug_mode => l_debug_mode);
6818     END IF;
6819 
6820     IF l_debug_mode = 'Y' THEN
6821           pa_debug.g_err_stage := 'Entering into prepare_pbl_input';
6822           pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
6823           pa_debug.g_err_stage := 'Validating input parameters';
6824           pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
6825     END IF;
6826 
6827 
6828     -- valid p_context are WEBADI_PERIODIC and WEBADI_NON_PERIODIC
6829     IF p_context IS NULL THEN
6830         IF l_debug_mode = 'Y' THEN
6831            pa_debug.g_err_stage := 'p_context is passed as null';
6832            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
6833         END IF;
6834         pa_utils.add_message(p_app_short_name => 'PA',
6835                            p_msg_name         => 'PA_FP_INV_PARAM_PASSED',
6836                            p_token1           => 'PROCEDURENAME',
6837                            p_value1           => l_module_name);
6838 
6839         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6840     END IF;
6841 
6842     --If there are no records to process return
6843     IF p_budget_lines_tbl.COUNT=0 THEN
6844 
6845         IF l_debug_mode = 'Y' THEN
6846            pa_debug.g_err_stage := 'p_budget_lines_tbl is empty';
6847            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6848            pa_debug.reset_curr_function;
6849         END IF;
6850         RETURN;
6851 
6852     END IF;
6853 
6854     --log1('-p_planning_start_date_tbl.COUNT- ' || p_planning_start_date_tbl.COUNT);
6855     --log1('-p_planning_end_date_tbl.COUNT- ' || p_planning_end_date_tbl.COUNT);
6856     --log1('-p_budget_lines_tbl.COUNT- ' || p_budget_lines_tbl.COUNT);
6857     --log1('-p_raw_cost_rate_tbl.COUNT- ' || p_raw_cost_rate_tbl.COUNT);
6858     --log1('-p_burd_cost_rate_tbl.COUNT- ' || p_burd_cost_rate_tbl.COUNT);
6859     --log1('-p_bill_rate_tbl.COUNT- ' || p_bill_rate_tbl.COUNT);
6860     --log1('-p_spread_curve_id_tbl.COUNT- ' || p_spread_curve_id_tbl.COUNT);
6861     --log1('-p_etc_method_code_tbl.COUNT- ' || p_etc_method_code_tbl.COUNT);
6862     --log1('-p_sp_fixed_date_tbl.COUNT- ' || p_sp_fixed_date_tbl.COUNT);
6863     --log1('-p_delete_flag_tbl.COUNT- ' || p_delete_flag_tbl.COUNT);
6864     --log1('-p_mfc_cost_type_id_tbl.COUNT- ' || p_mfc_cost_type_id_tbl.COUNT);
6865 
6866     --log1('-p_budget_lines_tbl(1).quantity- ' || p_budget_lines_tbl(1).quantity);
6867     --log1('-p_budget_lines_tbl(1).raw_cost- ' || p_budget_lines_tbl(1).raw_cost);
6868     --log1('-p_budget_lines_tbl(1).burdened_cost- ' || p_budget_lines_tbl(1).burdened_cost);
6869     --log1('-p_budget_lines_tbl(1).revenue- ' || p_budget_lines_tbl(1).revenue);
6870 
6871     IF p_planning_start_date_tbl.COUNT <> p_planning_end_date_tbl.COUNT OR
6872        p_planning_start_date_tbl.COUNT <> p_budget_lines_tbl.COUNT      OR
6873        p_planning_start_date_tbl.COUNT <> p_raw_cost_rate_tbl.COUNT     OR
6874        p_planning_start_date_tbl.COUNT <> p_burd_cost_rate_tbl.COUNT    OR
6875        p_planning_start_date_tbl.COUNT <> p_bill_rate_tbl.COUNT         OR
6876        p_planning_start_date_tbl.COUNT <> p_spread_curve_id_tbl.COUNT   OR
6877        p_planning_start_date_tbl.COUNT <> p_mfc_cost_type_id_tbl.COUNT  OR
6878        p_planning_start_date_tbl.COUNT <> p_etc_method_code_tbl.COUNT   OR
6879        p_planning_start_date_tbl.COUNT <> p_sp_fixed_date_tbl.COUNT     OR
6880        p_planning_start_date_tbl.COUNT <> p_delete_flag_tbl.COUNT       OR
6881        p_planning_start_date_tbl.COUNT <> p_ra_id_tbl.COUNT             OR
6882        p_planning_start_date_tbl.COUNT <> p_res_class_code_tbl.COUNT    OR
6883        p_planning_start_date_tbl.COUNT <> p_rate_based_flag_tbl.COUNT   OR
6884        p_planning_start_date_tbl.COUNT <> p_rbs_elem_id_tbl.COUNT       THEN
6885 
6886 
6887         IF l_debug_mode = 'Y' THEN
6888 
6889            pa_debug.g_err_stage := ' p_planning_start_date_tbl.COUNT '|| p_planning_start_date_tbl.COUNT;
6890            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6891 
6892            pa_debug.g_err_stage := ' p_planning_end_date_tbl.COUNT '|| p_planning_end_date_tbl.COUNT;
6893            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6894 
6895            pa_debug.g_err_stage := ' p_budget_lines_tbl.COUNT '|| p_budget_lines_tbl.COUNT;
6896            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6897 
6898            pa_debug.g_err_stage := ' p_raw_cost_rate_tbl.COUNT '|| p_raw_cost_rate_tbl.COUNT;
6899            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6900 
6901            pa_debug.g_err_stage := ' p_burd_cost_rate_tbl.COUNT '|| p_burd_cost_rate_tbl.COUNT;
6902            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6903 
6904            pa_debug.g_err_stage := ' p_bill_rate_tbl.COUNT '|| p_bill_rate_tbl.COUNT;
6905            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6906 
6907            pa_debug.g_err_stage := ' p_spread_curve_id_tbl.COUNT '|| p_spread_curve_id_tbl.COUNT;
6908            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6909 
6910            pa_debug.g_err_stage := ' p_mfc_cost_type_id_tbl.COUNT '|| p_mfc_cost_type_id_tbl.COUNT;
6911            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6912 
6913            pa_debug.g_err_stage := ' p_etc_method_code_tbl.COUNT '|| p_etc_method_code_tbl.COUNT;
6914            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6915 
6916            pa_debug.g_err_stage := ' p_sp_fixed_date_tbl.COUNT '|| p_sp_fixed_date_tbl.COUNT;
6917            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6918 
6919            pa_debug.g_err_stage := ' p_delete_flag_tbl.COUNT '|| p_delete_flag_tbl.COUNT;
6920            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6921 
6922            pa_debug.g_err_stage := ' p_ra_id_tbl.COUNT '|| p_ra_id_tbl.COUNT;
6923            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6924 
6925            pa_debug.g_err_stage := ' p_res_class_code_tbl.COUNT '|| p_res_class_code_tbl.COUNT;
6926            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6927 
6928            pa_debug.g_err_stage := ' p_rate_based_flag_tbl.COUNT '|| p_rate_based_flag_tbl.COUNT;
6929            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6930 
6931            pa_debug.g_err_stage := ' p_rbs_elem_id_tbl.COUNT '|| p_rbs_elem_id_tbl.COUNT;
6932            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6933 
6934         END IF;
6935         pa_utils.add_message(p_app_short_name => 'PA',
6936                            p_msg_name         => 'PA_FP_INV_PARAM_PASSED',
6937                            p_token1           => 'PROCEDURENAME',
6938                            p_value1           => l_module_name);
6939 
6940         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6941 
6942     END IF;
6943     --log1('----- STAGE 1-------');
6944     l_prev_pbl_tbl_count :=0;
6945     l_skip_ra_flag:='N';
6946 
6947 
6948     x_task_id_tbl                     :=   SYSTEM.pa_num_tbl_type();
6949     x_rlm_id_tbl                      :=   SYSTEM.pa_num_tbl_type();
6950     x_ra_id_tbl                       :=   SYSTEM.pa_num_tbl_type();
6951     x_txn_currency_code_tbl           :=   SYSTEM.pa_varchar2_15_tbl_type();
6952     x_planning_start_date_tbl         :=   SYSTEM.pa_date_tbl_type();
6953     x_planning_end_date_tbl           :=   SYSTEM.pa_date_tbl_type();
6954     x_total_qty_tbl                   :=   SYSTEM.pa_num_tbl_type();
6955     x_total_raw_cost_tbl              :=   SYSTEM.pa_num_tbl_type();
6956     x_total_burdened_cost_tbl         :=   SYSTEM.pa_num_tbl_type();
6957     x_total_revenue_tbl               :=   SYSTEM.pa_num_tbl_type();
6958     x_raw_cost_rate_tbl               :=   SYSTEM.pa_num_tbl_type();
6959     x_burdened_cost_rate_tbl          :=   SYSTEM.pa_num_tbl_type();
6960     x_bill_rate_tbl                   :=   SYSTEM.pa_num_tbl_type();
6961     x_line_start_date_tbl             :=   SYSTEM.pa_date_tbl_type();
6962     x_line_end_date_tbl               :=   SYSTEM.pa_date_tbl_type();
6963     x_proj_cost_rate_type_tbl         :=   SYSTEM.pa_varchar2_30_tbl_type();
6964     x_proj_cost_rate_date_type_tbl    :=   SYSTEM.pa_varchar2_30_tbl_type();
6965     x_proj_cost_rate_tbl              :=   SYSTEM.pa_num_tbl_type();
6966     x_proj_cost_rate_date_tbl         :=   SYSTEM.pa_date_tbl_type();
6967     x_proj_rev_rate_type_tbl          :=   SYSTEM.pa_varchar2_30_tbl_type();
6968     x_proj_rev_rate_date_type_tbl     :=   SYSTEM.pa_varchar2_30_tbl_type();
6969     x_proj_rev_rate_tbl               :=   SYSTEM.pa_num_tbl_type();
6970     x_proj_rev_rate_date_tbl          :=   SYSTEM.pa_date_tbl_type();
6971     x_pfunc_cost_rate_type_tbl        :=   SYSTEM.pa_varchar2_30_tbl_type();
6972     x_pfunc_cost_rate_date_typ_tbl    :=   SYSTEM.pa_varchar2_30_tbl_type();
6973     x_pfunc_cost_rate_tbl             :=   SYSTEM.pa_num_tbl_type();
6974     x_pfunc_cost_rate_date_tbl        :=   SYSTEM.pa_date_tbl_type();
6975     x_pfunc_rev_rate_type_tbl         :=   SYSTEM.pa_varchar2_30_tbl_type();
6976     x_pfunc_rev_rate_date_type_tbl    :=   SYSTEM.pa_varchar2_30_tbl_type();
6977     x_pfunc_rev_rate_tbl              :=   SYSTEM.pa_num_tbl_type();
6978     x_pfunc_rev_rate_date_tbl         :=   SYSTEM.pa_date_tbl_type();
6979     x_delete_flag_tbl                 :=   SYSTEM.pa_varchar2_1_tbl_type();
6980     x_spread_curve_id_tbl             :=   SYSTEM.pa_num_tbl_type();
6981     x_mfc_cost_type_id_tbl            :=   SYSTEM.pa_num_tbl_type();
6982     x_etc_method_code_tbl             :=   SYSTEM.pa_varchar2_30_tbl_type();
6983     x_sp_fixed_date_tbl               :=   SYSTEM.pa_date_tbl_type();
6984     x_res_class_code_tbl              :=   SYSTEM.pa_varchar2_30_tbl_type();
6985     x_rate_based_flag_tbl             :=   SYSTEM.pa_varchar2_1_tbl_type();
6986     x_rbs_elem_id_tbl                 :=   SYSTEM.pa_num_tbl_type();
6987     x_change_reason_code_tbl          :=   SYSTEM.pa_varchar2_30_tbl_type();
6988     x_description_tbl                 :=   SYSTEM.pa_varchar2_2000_tbl_type();
6989 
6990     --log1('----- STAGE 2-------');
6991     IF p_context = 'WEBADI_PERIODIC' THEN
6992        --log1('----- STAGE 2P-------');
6993         --These variables will be used to store the values corresponding to the previous
6994         --row while looping thru the rows in the interface table.
6995         l_prev_task_id          := -1;
6996         l_prev_rlm_id           := l_g_miss_num;
6997         l_prev_txn_curr_code    := l_g_miss_char;
6998         l_bl_index              := 1;
6999 
7000         --Initialize the OUT variables l_prd_mask_st_date_tbl/l_prd_mask_end_date_tbl
7001         --First element is reserved for preceeding bucket which will be set for each resource assignment later
7002         l_prd_mask_st_date_tbl.extend;
7003         l_prd_mask_end_date_tbl.extend;
7004         l_prd_mask_end_date_tbl(1):=p_first_pd_bf_pm_en_dt;
7005         FOR i IN 1..p_prd_mask_st_date_tbl.COUNT LOOP
7006             l_prd_mask_st_date_tbl.extend;
7007             l_prd_mask_st_date_tbl(l_prd_mask_st_date_tbl.COUNT):=p_prd_mask_st_date_tbl(i);
7008             l_prd_mask_end_date_tbl.extend;
7009             l_prd_mask_end_date_tbl(l_prd_mask_end_date_tbl.COUNT):=p_prd_mask_end_date_tbl(i);
7010         END LOOP;
7011         --Reserve the last element for succeding bucket which will be set for each resource assignment later
7012         l_prd_mask_st_date_tbl.extend;
7013         l_prd_mask_st_date_tbl(l_prd_mask_st_date_tbl.COUNT):=p_last_pd_af_pm_st_dt;
7014         l_prd_mask_end_date_tbl.extend;
7015 
7016         --log1('----- STAGE 3P-------');
7017         IF l_debug_mode = 'Y' THEN
7018            pa_debug.g_err_stage := 'About to loop thru inf_tbl_data_csr';
7019            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7020         END IF;
7021         IF p_version_info_rec.x_version_type = 'COST' THEN
7022           l_allow_qty_flag := p_version_info_rec.x_cost_quantity_flag;
7023         ELSIF p_version_info_rec.x_version_type = 'REVENUE' THEN
7024           l_allow_qty_flag := p_version_info_rec.x_rev_quantity_flag;
7025         ELSIF p_version_info_rec.x_version_type = 'ALL' THEN
7026           l_allow_qty_flag := p_version_info_rec.x_all_quantity_flag;
7027         END IF;
7028 
7029         /*FOR l_curr_rec IN inf_tbl_data_csr LOOP*/
7030         -- Changing the for loop to a while loop so that the variable can be incremented inside
7031         -- This is for bug 4477397
7032         tt := 0;
7033         while tt <= p_inf_tbl_rec_tbl.COUNT
7034         LOOP
7035             tt := tt + 1;
7036 
7037             IF tt > p_inf_tbl_rec_tbl.COUNT THEN
7038                 EXIT;
7039             END IF;
7040 
7041             l_curr_rec:=NULL;
7042             IF l_skip_ra_flag ='N' THEN
7043 
7044 --                FETCH inf_tbl_data_csr INTO l_curr_rec;
7045                 l_curr_rec := p_inf_tbl_rec_tbl(tt);
7046 
7047             ELSE
7048 
7049                 LOOP
7050 
7051                     IF tt <= p_inf_tbl_rec_tbl.COUNT THEN
7052                         l_curr_rec := p_inf_tbl_rec_tbl(tt);
7053                     ELSE
7054                         l_curr_rec := NULL;
7055                     END IF;
7056 
7057                     EXIT WHEN l_curr_rec.task_id IS NULL OR
7058                               l_curr_rec.task_id <> l_skip_task_id OR
7059                               l_curr_rec.resource_list_member_id <> l_skip_rlm_id;
7060                     l_curr_rec:=NULL;
7061                     tt := tt + 1;
7062 --                    FETCH inf_tbl_data_csr INTO l_curr_rec;
7063 
7064                 END LOOP;
7065 
7066             END IF;
7067 
7068             IF tt > p_inf_tbl_rec_tbl.COUNT THEN
7069                 EXIT;
7070             END IF;
7071 
7072             l_skip_ra_flag := 'N';
7073             l_skip_task_id := NULL;
7074             l_skip_rlm_id := NULL;
7075             --EXIT WHEN l_curr_rec.task_id IS NULL;
7076             --log1('----- STAGE X1-------');
7077             --Reset l_extend_pbl_out_tbls_flag. This flag will be set to Y for each planning
7078             --TXN so that the OUT tbls for process_budget_lines are correctly increased in length
7079             l_extend_pbl_out_tbls_flag := 'N';
7080 
7081             --Loop thru the p_budget_lines_tbl to find the record with RA/Curr same as
7082             --l_curr_rec
7083             LOOP
7084                 --log1('----- STAGE X2-------');
7085                 EXIT WHEN p_budget_lines_tbl(l_bl_index).pa_task_id = l_curr_rec.task_id AND
7086                           p_budget_lines_tbl(l_bl_index).resource_list_member_id = l_curr_rec.resource_list_member_id AND
7087                           p_budget_lines_tbl(l_bl_index).txn_currency_code = l_curr_rec.txn_currency_code;
7088 
7089                 l_bl_index:=l_bl_index+1;
7090                 --log1('----- STAGE X3-------');
7091             END LOOP;
7092 
7093             IF p_planning_start_date_tbl(l_bl_index) IS NOT NULL AND
7094                p_planning_end_date_tbl(l_bl_index) IS NOT NULL
7095               AND (p_etc_start_date IS NULL OR ( p_etc_start_date < p_planning_end_date_tbl(l_bl_index) ) ) THEN
7096 
7097                 --For each resource assignment find out the no. of periods in the period mask
7098                 --that would fall between the planning start/end dates. If n such periods exist,
7099                 --then n rows in the OUT tbls for each RA/currency/amount type should be prepared
7100                 IF l_curr_rec.task_id <> l_prev_task_id OR
7101                    NVL(l_curr_rec.resource_list_member_id,'-99') <> l_prev_rlm_id THEN
7102 
7103                     IF l_debug_mode = 'Y' THEN
7104                        pa_debug.g_err_stage := 'Finding out no. of periods for RA with task_id '||l_curr_rec.task_id||' Res '||l_curr_rec.resource_list_member_id;
7105                        pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7106                     END IF;
7107 
7108                     /*IF l_debug_mode = 'Y' THEN
7109                        pa_debug.g_err_stage := 'p_version_info_rec.x_org_id: ' || p_version_info_rec.x_org_id;
7110                        pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7111                        pa_debug.g_err_stage := 'l_bl_index: ' || l_bl_index;
7112                        pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7113                        pa_debug.g_err_stage := 'p_planning_start_date_tbl(l_bl_index): ' || p_planning_start_date_tbl(l_bl_index);
7114                        pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7115                        pa_debug.g_err_stage := 'p_version_info_rec.x_time_phased_code: ' || p_version_info_rec.x_time_phased_code;
7116                        pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7117                        pa_debug.g_err_stage := 'p_planning_end_date_tbl(l_bl_index): ' || p_planning_end_date_tbl(l_bl_index);
7118                        pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7119                     END IF;*/
7120                     --Populate the preceeding and succeeding buckets in the period mask table
7121                     --log1('----- STAGE X3.1------- '||p_version_info_rec.x_org_id);
7122                     --log1('----- STAGE X3.2------- '||l_bl_index);
7123                     --log1('----- STAGE X3.3------- '||p_planning_start_date_tbl(l_bl_index));
7124                     --log1('----- STAGE X3.4------- '|| p_version_info_rec.x_org_id);
7125                     --log1('----- STAGE X3.5------- '|| p_version_info_rec.x_time_phased_code);
7126                     --log1('----- STAGE X3.6------- '|| p_planning_end_date_tbl(l_bl_index));
7127                     SELECT gl.start_date
7128                     INTO   l_prd_mask_st_date_tbl(1)
7129                     FROM   gl_periods gl,
7130                            pa_implementations_all pim,
7131                            gl_sets_of_books gsb
7132                     WHERE  pim.org_id = p_version_info_rec.x_org_id
7133                     AND    gsb.set_of_books_id = pim.set_of_books_id
7134                     AND    gl.period_set_name= DECODE(p_version_info_rec.x_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
7135                     AND    gl.period_type = DECODE(p_version_info_rec.x_time_phased_code,
7136                                                    'P',pim.pa_period_type,
7137                                                    'G',gsb.accounted_period_type)
7138                     AND    gl.adjustment_period_flag='N'
7139                     AND    gl.start_date <= p_planning_start_date_tbl(l_bl_index)
7140                     AND    gl.end_date >=p_planning_start_date_tbl(l_bl_index);
7141 
7142                     SELECT gl.end_date
7143                     INTO   l_prd_mask_end_date_tbl(l_prd_mask_end_date_tbl.COUNT)
7144                     FROM   gl_periods gl,
7145                            pa_implementations_all pim,
7146                            gl_sets_of_books gsb
7147                     WHERE  pim.org_id = p_version_info_rec.x_org_id
7148                     AND    gsb.set_of_books_id = pim.set_of_books_id
7149                     AND    gl.period_set_name= DECODE(p_version_info_rec.x_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
7150                     AND    gl.period_type = DECODE(p_version_info_rec.x_time_phased_code,
7151                                                    'P',pim.pa_period_type,
7152                                                    'G',gsb.accounted_period_type)
7153                     AND    gl.adjustment_period_flag='N'
7154                     AND    gl.start_date <= p_planning_end_date_tbl(l_bl_index)
7155                     AND    gl.end_date >=p_planning_end_date_tbl(l_bl_index);
7156 
7157                     l_extend_pbl_out_tbls_flag:= 'Y';
7158                     l_plan_txn_attrs_copied_flag := 'N';
7159                     l_prev_task_id:=l_curr_rec.task_id;
7160                     l_prev_rlm_id:=l_curr_rec.resource_list_member_id;
7161                     l_prev_txn_curr_code:=l_curr_rec.txn_currency_code;
7162 
7163                     --Find out the flexible periods in the period mask that should be considered
7164                     --based on RA's planning start/end dates
7165                     l_st_index_in_prd_mask      := NULL;
7166                     l_end_index_in_prd_mask     := NULL;
7167                     l_sd_prd_exists_flag        := NULL;
7168                     l_pd_prd_exists_flag        := NULL;
7169                     l_num_of_prds_for_plan_txn  :=0;
7170 
7171                     --log1('----- STAGE X4-------');
7172                     IF NVL(p_etc_start_date,p_planning_start_date_tbl(l_bl_index)) < p_prd_mask_st_date_tbl(1) THEN
7173                         --log1('----- STAGE X5-------');
7174                         l_st_index_in_prd_mask:=1;
7175                         l_pd_prd_exists_flag :='Y';
7176 
7177                     END IF;
7178 
7179                     --log1('----- STAGE X5.1------- '||l_bl_index);
7180                     --log1('----- STAGE X5.2------- '||p_planning_end_date_tbl(l_bl_index) );
7181                     --log1('----- STAGE X5.3------- '||p_prd_mask_end_date_tbl(p_prd_mask_end_date_tbl.COUNT));
7182                     IF p_planning_end_date_tbl(l_bl_index) > p_prd_mask_end_date_tbl(p_prd_mask_end_date_tbl.COUNT) THEN
7183 
7184                         l_end_index_in_prd_mask:=l_prd_mask_end_date_tbl.COUNT;
7185                         l_sd_prd_exists_flag :='Y';
7186 
7187                     END IF;
7188 
7189                     --log1('----- STAGE X5.4------- '||l_st_index_in_prd_mask);
7190                     --log1('----- STAGE X5.5------- '||l_end_index_in_prd_mask);
7191                     IF l_st_index_in_prd_mask IS NULL OR
7192                        l_end_index_in_prd_mask IS NULL THEN
7193 
7194                         --Find out the flexbile period in which the planning start/end dates fall
7195                         FOR kk IN 2..l_prd_mask_st_date_tbl.LAST-1 LOOP
7196 
7197                             IF l_st_index_in_prd_mask IS NULL THEN
7198 
7199                                 --log1('----- STAGE X5.6------- '||l_bl_index);
7200                                 --log1('----- STAGE X5.7------- '||p_planning_start_date_tbl(l_bl_index));
7201                                 --log1('----- STAGE X5.8------- '||kk);
7202                                 --log1('----- STAGE X5.9------- '|| l_prd_mask_st_date_tbl(kk));
7203                                 --log1('----- STAGE X5.10------- '|| l_prd_mask_end_date_tbl(kk));
7204                                 IF NVL(p_etc_start_date,p_planning_start_date_tbl(l_bl_index)) >= l_prd_mask_st_date_tbl(kk) AND
7205                                    NVL(p_etc_start_date,p_planning_start_date_tbl(l_bl_index)) <= l_prd_mask_end_date_tbl(kk)  THEN
7206 
7207                                     l_st_index_in_prd_mask:= kk;
7208 
7209                                 END IF;
7210 
7211                             END IF;
7212 
7213                             IF l_end_index_in_prd_mask IS NULL THEN
7214 
7215                                 --log1('----- STAGE X5.10------- '||l_bl_index);
7216                                 --log1('----- STAGE X5.11------- '||p_planning_end_date_tbl(l_bl_index));
7217                                 --log1('----- STAGE X5.12------- '||kk);
7218                                 --log1('----- STAGE X5.13------- '|| l_prd_mask_st_date_tbl(kk));
7219                                 --log1('----- STAGE X5.14------- '|| l_prd_mask_end_date_tbl(kk));
7220                                 IF p_planning_end_date_tbl(l_bl_index) >= l_prd_mask_st_date_tbl(kk) AND
7221                                    p_planning_end_date_tbl(l_bl_index) <= l_prd_mask_end_date_tbl(kk) THEN
7222 
7223                                     l_end_index_in_prd_mask:= kk;
7224 
7225                                 END IF;
7226 
7227                             END IF;
7228 
7229                             IF l_st_index_in_prd_mask IS NOT NULL AND
7230                                l_end_index_in_prd_mask IS NOT NULL THEN
7231 
7232                                 EXIT;
7233 
7234                             END IF;
7235 
7236                         END LOOP;--FOR kk IN 2..l_prd_mask_st_date_tbl LOOP
7237 
7238                     END IF;--IF l_st_index_in_prd_mask IS NULL OR
7239 
7240                     IF l_st_index_in_prd_mask IS NULL AND
7241                        l_end_index_in_prd_mask IS NOT NULL THEN
7242 
7243                         l_st_index_in_prd_mask :=l_end_index_in_prd_mask;
7244 
7245                     END IF;
7246 
7247                     IF l_st_index_in_prd_mask IS NOT NULL AND
7248                        l_end_index_in_prd_mask IS  NULL THEN
7249 
7250                         l_end_index_in_prd_mask := l_st_index_in_prd_mask;
7251 
7252                     END IF;
7253 
7254                     l_num_of_prds_for_plan_txn := l_end_index_in_prd_mask -  l_st_index_in_prd_mask +1;
7255 
7256                     l_extend_pbl_out_tbls_flag := 'Y';
7257 
7258                 END IF;--IF l_curr_rec.task_id <> l_prev_task_id OR
7259 
7260                 --Currency /amount type of this record is different from one that of previous record.
7261                 IF l_prev_txn_curr_code <> l_curr_rec.txn_currency_code  THEN
7262 
7263                     l_extend_pbl_out_tbls_flag:= 'Y';
7264                     l_plan_txn_attrs_copied_flag := 'N';
7265                     l_prev_txn_curr_code:=l_curr_rec.txn_currency_code;
7266 
7267                 END IF;
7268 
7269                 --Extend the OUT tbls and populate the Line start/end tbls. Header level tbls such as
7270                 --task/rlm etc will also be populated.
7271                 IF l_extend_pbl_out_tbls_flag ='Y' THEN
7272 
7273                     l_extend_pbl_out_tbls_flag := 'N';
7274                     --This variable will be used to store the index till which the OUT tbls for prepare_pbl_input are
7275                     --populated.
7276                     l_prev_pbl_tbl_count := x_task_id_tbl.COUNT;
7277                     x_task_id_tbl.extend(l_num_of_prds_for_plan_txn);
7278                     x_rlm_id_tbl.extend(l_num_of_prds_for_plan_txn);
7279                     x_ra_id_tbl.extend(l_num_of_prds_for_plan_txn);
7280                     x_spread_curve_id_tbl.extend(l_num_of_prds_for_plan_txn);
7281                     x_mfc_cost_type_id_tbl.extend(l_num_of_prds_for_plan_txn);
7282                     x_etc_method_code_tbl.extend(l_num_of_prds_for_plan_txn);
7283                     x_sp_fixed_date_tbl.extend(l_num_of_prds_for_plan_txn);
7284                     x_res_class_code_tbl.extend(l_num_of_prds_for_plan_txn);
7285                     x_rate_based_flag_tbl.extend(l_num_of_prds_for_plan_txn);
7286                     x_rbs_elem_id_tbl.extend(l_num_of_prds_for_plan_txn);
7287                     x_txn_currency_code_tbl.extend(l_num_of_prds_for_plan_txn);
7288                     x_planning_start_date_tbl.extend(l_num_of_prds_for_plan_txn);
7289                     x_planning_end_date_tbl.extend(l_num_of_prds_for_plan_txn);
7290                     x_total_qty_tbl.extend(l_num_of_prds_for_plan_txn);
7291                     x_total_raw_cost_tbl.extend(l_num_of_prds_for_plan_txn);
7292                     x_total_burdened_cost_tbl.extend(l_num_of_prds_for_plan_txn);
7293                     x_total_revenue_tbl.extend(l_num_of_prds_for_plan_txn);
7294                     x_raw_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7295                     x_burdened_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7296                     x_bill_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7297                     x_line_start_date_tbl.extend(l_num_of_prds_for_plan_txn);
7298                     x_line_end_date_tbl.extend(l_num_of_prds_for_plan_txn);
7299                     x_proj_cost_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7300                     x_proj_cost_rate_date_type_tbl.extend(l_num_of_prds_for_plan_txn);
7301                     x_proj_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7302                     x_proj_cost_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7303                     x_proj_rev_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7304                     x_proj_rev_rate_date_type_tbl.extend(l_num_of_prds_for_plan_txn);
7305                     x_proj_rev_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7306                     x_proj_rev_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7307                     x_pfunc_cost_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7308                     x_pfunc_cost_rate_date_typ_tbl.extend(l_num_of_prds_for_plan_txn);
7309                     x_pfunc_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7310                     x_pfunc_cost_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7311                     x_pfunc_rev_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7312                     x_pfunc_rev_rate_date_type_tbl.extend(l_num_of_prds_for_plan_txn);
7313                     x_pfunc_rev_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7314                     x_pfunc_rev_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7315                     x_delete_flag_tbl.extend(l_num_of_prds_for_plan_txn);
7316                     x_change_reason_code_tbl.extend(l_num_of_prds_for_plan_txn);
7317                     x_description_tbl.extend(l_num_of_prds_for_plan_txn);
7318 
7319                     --log1('----- STAGE X5.15.0------- '||l_st_index_in_prd_mask);
7320                     --log1('----- STAGE X5.15.0.1------- '||l_end_index_in_prd_mask);
7321 
7322                     IF l_st_index_in_prd_mask IS NOT NULL THEN
7323 
7324                         FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7325 
7326                             l_tmp_index := l_prev_pbl_tbl_count + kk - l_st_index_in_prd_mask + 1;
7327                             --log1('----- STAGE X5.15.1 ------- '||l_tmp_index);
7328 
7329                              x_line_start_date_tbl(l_tmp_index):=l_prd_mask_st_date_tbl(kk);
7330 
7331                             --log1('----- STAGE X5.15.2 ------- ');
7332 
7333                             x_line_end_date_tbl(l_tmp_index):=l_prd_mask_end_date_tbl(kk);
7334 
7335                             --log1('----- STAGE X5.15.3 ------- ');
7336                             x_task_id_tbl(l_tmp_index)            := l_curr_rec.task_id;
7337                             x_rlm_id_tbl(l_tmp_index)             := p_budget_lines_tbl(l_bl_index).resource_list_member_id;
7338                             x_ra_id_tbl(l_tmp_index)              := p_ra_id_tbl(l_bl_index);
7339                             x_txn_currency_code_tbl(l_tmp_index)  := l_curr_rec.txn_currency_code;
7340                             --log1('----- STAGE X5.15.4 ------- ');
7341                             x_planning_start_date_tbl(l_tmp_index):= p_planning_start_date_tbl(l_bl_index);
7342                             x_planning_end_date_tbl(l_tmp_index)  := p_planning_end_date_tbl(l_bl_index);
7343                             x_spread_curve_id_tbl(l_tmp_index)    := p_spread_curve_id_tbl(l_bl_index);
7344                             --log1('----- STAGE X5.15.5 ------- ');
7345                             x_mfc_cost_type_id_tbl(l_tmp_index)   := p_mfc_cost_type_id_tbl(l_bl_index);
7346                             x_etc_method_code_tbl(l_tmp_index)    := p_etc_method_code_tbl(l_bl_index);
7347                             x_sp_fixed_date_tbl(l_tmp_index)      := p_sp_fixed_date_tbl(l_bl_index);
7348                             --log1('----- STAGE X5.15.6 ------- ');
7349                             x_res_class_code_tbl(l_tmp_index)     := p_res_class_code_tbl(l_bl_index);
7350                             x_rate_based_flag_tbl(l_tmp_index)    := p_rate_based_flag_tbl(l_bl_index);
7351                             x_rbs_elem_id_tbl(l_tmp_index)        := p_rbs_elem_id_tbl(l_bl_index);
7352                             --Assigning N since for periodic layouts, amounts a  type with delete flag as N would be NULLED
7353                             --out
7354                             x_delete_flag_tbl(l_tmp_index)        :='N';
7355 
7356 
7357 
7358                         END LOOP;--FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7359 
7360                     END IF;--IF l_st_index_in_prd_mask IS NOT NULL THEN
7361 
7362                 END IF;--IF l_extend_pbl_out_tbls_flag ='Y' THEN
7363 
7364                 --log1('----- STAGE X5.16------- ');
7365                 IF l_st_index_in_prd_mask IS NOT NULL THEN
7366 
7367                     --For the current record, populate amounts for appropriate amount types
7368                     FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7369 
7370                         IF l_curr_rec.delete_flag ='Y' THEN
7371 
7372                             l_amount := l_g_miss_num;
7373 
7374                         ELSE
7375 
7376                             IF kk = 1 THEN
7377                             --Indicates that the flex period corresponds to FIRST period before the first flexible period in
7378                             --the period mask. This period stands for PD period
7379                                 l_prd_index := 'PD';
7380 
7381                             ELSIF kk = l_prd_mask_st_date_tbl.COUNT THEN
7382                             --Indicates that the flex period corresponds to FIRST period AFTER the LAST flexible period in
7383                             --the period mask. This period stands for SD period
7384                                 l_prd_index := 'SD';
7385 
7386                             ELSE
7387 
7388                                 --kk-1 should be used since the periods in the period mask are
7389                                 --stored staring from the second bucket of l_prd_mask_st_date_tbl
7390                                 l_prd_index := to_char(kk-1);
7391 
7392                             END IF;
7393 
7394                             l_amount := get_amount_in_prd_x(p_rec => l_curr_rec,
7395                                                             p_prd => l_prd_index);
7396 
7397                         END IF;
7398 
7399                         l_tmp_index := l_prev_pbl_tbl_count + kk - l_st_index_in_prd_mask + 1;
7400 
7401                         --In the below block amounts that should be passed to the calculate API will be derived
7402                         --In case of Budgets, only one column per amount type is editable
7403                         --In case of Forecasts two columns (Forecast and ETC) are editable.
7404                         ---->If both are hidden in the layout NULL will be passed
7405                         ---->If ETC is hidden and Forecast is displayed in the layout then Forecast entered will be passed
7406                         ---->If Forecast is hidden and ETC is displayed in the layout then ETC entered + Actuals will be passed
7407                         ---->If both Forecast and ETC are displayed in the layout then
7408                         ------>If Forecast is entered is different from the existing value then it will be passed
7409                         ------>Else If ETC entered is different from existing value then ETC + actuals will be passed
7410                         ------>Else NULL will be passed
7411                         ---->Note that amount columns in budget lines tbl will contain the forecast values and ETC values
7412                         ---->are passed as input to this API
7413                         IF  l_curr_rec.amount_type_code = 'TOTAL_BURDENED_COST' THEN
7414 
7415                             x_total_burdened_cost_tbl(l_tmp_index) := l_amount;
7416 
7417                         ELSIF  l_curr_rec.amount_type_code = 'FCST_BURDENED_COST' THEN
7418 
7419                             x_total_burdened_cost_tbl(l_tmp_index) := l_amount;
7420 
7421                         ELSIF  l_curr_rec.amount_type_code = 'ETC_BURDENED_COST' THEN
7422 
7423                             get_total_fcst_amounts
7424                            (p_project_id                    =>p_project_id,
7425                             p_budget_version_id             =>p_budget_version_id,
7426                             p_task_id                       =>l_curr_rec.task_id,
7427                             p_resource_list_member_id       =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7428                             p_txn_currency_code             =>l_curr_rec.txn_currency_code,
7429                             p_line_start_date               =>l_prd_mask_st_date_tbl(kk),
7430                             p_line_end_date                 =>l_prd_mask_end_date_tbl(kk),
7431                             p_prd_mask_st_date_tbl          =>l_prd_mask_st_date_tbl,
7432                             p_prd_mask_end_date_tbl         =>l_prd_mask_end_date_tbl,
7433                             p_st_index_in_prd_mask          =>l_st_index_in_prd_mask,
7434                             p_end_index_in_prd_mask         =>l_end_index_in_prd_mask,
7435                             p_etc_start_date                =>p_etc_start_date,
7436                             p_etc_quantity                  =>NULL,
7437                             p_fcst_quantity                 =>NULL,
7438                             p_etc_raw_cost                  =>NULL,
7439                             p_fcst_raw_cost                 =>NULL,
7440                             p_etc_burd_cost                 =>l_amount,
7441                             p_fcst_burd_cost                =>x_total_burdened_cost_tbl(l_tmp_index),
7442                             p_etc_revenue                   =>NULL,
7443                             p_fcst_revenue                  =>NULL,
7444                             px_cached_fcst_qty_tbl          =>l_cached_fcst_qty_tbl,
7445                             px_cached_fcst_raw_cost_tbl     =>l_cached_fcst_raw_cost_tbl,
7446                             px_cached_fcst_burd_cost_tbl    =>l_cached_fcst_burd_cost_tbl,
7447                             px_cached_fcst_revenue_tbl      =>l_cached_fcst_revenue_tbl,
7448                             px_cached_etc_qty_tbl           =>l_cached_etc_qty_tbl,
7449                             px_cached_etc_raw_cost_tbl      =>l_cached_etc_raw_cost_tbl,
7450                             px_cached_etc_burd_cost_tbl     =>l_cached_etc_burd_cost_tbl,
7451                             px_cached_etc_revenue_tbl       =>l_cached_etc_revenue_tbl,
7452                             x_total_quantity                =>l_tmp_quantity,
7453                             x_total_raw_cost                =>l_tmp_raw_cost,
7454                             x_total_burd_cost               =>x_total_burdened_cost_tbl(l_tmp_index),
7455                             x_total_revenue                 =>l_tmp_revenue,
7456                             x_return_status                 =>x_return_status,
7457                             x_msg_count                     =>x_msg_count,
7458                             x_msg_data                      =>x_msg_data    );
7459 
7460                             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7461                                  IF l_debug_mode = 'Y' THEN
7462                                       pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7463                                       pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7464                                  END IF;
7465                                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7466                             END IF;
7467 
7468 
7469                         ELSIF l_curr_rec.amount_type_code = 'TOTAL_RAW_COST' THEN
7470 
7471                             x_total_raw_cost_tbl(l_tmp_index) := l_amount;
7472 
7473                         ELSIF l_curr_rec.amount_type_code = 'FCST_RAW_COST' THEN
7474 
7475                             x_total_raw_cost_tbl(l_tmp_index) := l_amount;
7476 
7477                         ELSIF  l_curr_rec.amount_type_code = 'ETC_RAW_COST' THEN
7478 
7479                             get_total_fcst_amounts
7480                            (p_project_id                    =>p_project_id,
7481                             p_budget_version_id             =>p_budget_version_id,
7482                             p_task_id                       =>l_curr_rec.task_id,
7483                             p_resource_list_member_id       =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7484                             p_txn_currency_code             =>l_curr_rec.txn_currency_code,
7485                             p_line_start_date               =>l_prd_mask_st_date_tbl(kk),
7486                             p_line_end_date                 =>l_prd_mask_end_date_tbl(kk),
7487                             p_prd_mask_st_date_tbl          =>l_prd_mask_st_date_tbl,
7488                             p_prd_mask_end_date_tbl         =>l_prd_mask_end_date_tbl,
7489                             p_st_index_in_prd_mask          =>l_st_index_in_prd_mask,
7490                             p_end_index_in_prd_mask         =>l_end_index_in_prd_mask,
7491                             p_etc_start_date                =>p_etc_start_date,
7492                             p_etc_quantity                  =>NULL,
7493                             p_fcst_quantity                 =>NULL,
7494                             p_etc_raw_cost                  =>l_amount,
7495                             p_fcst_raw_cost                 =>x_total_raw_cost_tbl(l_tmp_index),
7496                             p_etc_burd_cost                 =>NULL,
7497                             p_fcst_burd_cost                =>NULL,
7498                             p_etc_revenue                   =>NULL,
7499                             p_fcst_revenue                  =>NULL,
7500                             px_cached_fcst_qty_tbl          =>l_cached_fcst_qty_tbl,
7501                             px_cached_fcst_raw_cost_tbl     =>l_cached_fcst_raw_cost_tbl,
7502                             px_cached_fcst_burd_cost_tbl    =>l_cached_fcst_burd_cost_tbl,
7503                             px_cached_fcst_revenue_tbl      =>l_cached_fcst_revenue_tbl,
7504                             px_cached_etc_qty_tbl           =>l_cached_etc_qty_tbl,
7505                             px_cached_etc_raw_cost_tbl      =>l_cached_etc_raw_cost_tbl,
7506                             px_cached_etc_burd_cost_tbl     =>l_cached_etc_burd_cost_tbl,
7507                             px_cached_etc_revenue_tbl       =>l_cached_etc_revenue_tbl,
7508                             x_total_quantity                =>l_tmp_quantity,
7509                             x_total_raw_cost                =>x_total_raw_cost_tbl(l_tmp_index),
7510                             x_total_burd_cost               =>l_tmp_burd_cost,
7511                             x_total_revenue                 =>l_tmp_revenue,
7512                             x_return_status                 =>x_return_status,
7513                             x_msg_count                     =>x_msg_count,
7514                             x_msg_data                      =>x_msg_data    );
7515 
7516                             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7517                                  IF l_debug_mode = 'Y' THEN
7518                                       pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7519                                       pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7520                                  END IF;
7521                                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7522                             END IF;
7523 
7524 
7525                         ELSIF l_curr_rec.amount_type_code = 'TOTAL_REV' THEN
7526 
7527                             x_total_revenue_tbl(l_tmp_index) := l_amount;
7528 
7529                         ELSIF l_curr_rec.amount_type_code = 'FCST_REVENUE' THEN
7530 
7531                             x_total_revenue_tbl(l_tmp_index) := l_amount;
7532 
7533                         ELSIF l_curr_rec.amount_type_code = 'ETC_REVENUE' THEN
7534 
7535                             get_total_fcst_amounts
7536                            (p_project_id                    =>p_project_id,
7537                             p_budget_version_id             =>p_budget_version_id,
7538                             p_task_id                       =>l_curr_rec.task_id,
7539                             p_resource_list_member_id       =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7540                             p_txn_currency_code             =>l_curr_rec.txn_currency_code,
7541                             p_line_start_date               =>l_prd_mask_st_date_tbl(kk),
7542                             p_line_end_date                 =>l_prd_mask_end_date_tbl(kk),
7543                             p_prd_mask_st_date_tbl          =>l_prd_mask_st_date_tbl,
7544                             p_prd_mask_end_date_tbl         =>l_prd_mask_end_date_tbl,
7545                             p_st_index_in_prd_mask          =>l_st_index_in_prd_mask,
7546                             p_end_index_in_prd_mask         =>l_end_index_in_prd_mask,
7547                             p_etc_start_date                =>p_etc_start_date,
7548                             p_etc_quantity                  =>NULL,
7549                             p_fcst_quantity                 =>NULL,
7550                             p_etc_raw_cost                  =>NULL,
7551                             p_fcst_raw_cost                 =>NULL,
7552                             p_etc_burd_cost                 =>NULL,
7553                             p_fcst_burd_cost                =>NULL,
7554                             p_etc_revenue                   =>l_amount,
7555                             p_fcst_revenue                  =>x_total_revenue_tbl(l_tmp_index),
7556                             px_cached_fcst_qty_tbl          =>l_cached_fcst_qty_tbl,
7557                             px_cached_fcst_raw_cost_tbl     =>l_cached_fcst_raw_cost_tbl,
7558                             px_cached_fcst_burd_cost_tbl    =>l_cached_fcst_burd_cost_tbl,
7559                             px_cached_fcst_revenue_tbl      =>l_cached_fcst_revenue_tbl,
7560                             px_cached_etc_qty_tbl           =>l_cached_etc_qty_tbl,
7561                             px_cached_etc_raw_cost_tbl      =>l_cached_etc_raw_cost_tbl,
7562                             px_cached_etc_burd_cost_tbl     =>l_cached_etc_burd_cost_tbl,
7563                             px_cached_etc_revenue_tbl       =>l_cached_etc_revenue_tbl,
7564                             x_total_quantity                =>l_tmp_quantity,
7565                             x_total_raw_cost                =>l_tmp_raw_cost,
7566                             x_total_burd_cost               =>l_tmp_burd_cost,
7567                             x_total_revenue                 =>x_total_revenue_tbl(l_tmp_index),
7568                             x_return_status                 =>x_return_status,
7569                             x_msg_count                     =>x_msg_count,
7570                             x_msg_data                      =>x_msg_data    );
7571 
7572                             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7573                                  IF l_debug_mode = 'Y' THEN
7574                                       pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7575                                       pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7576                                  END IF;
7577                                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7578                             END IF;
7579 
7580 
7581                         ELSIF l_curr_rec.amount_type_code = 'TOTAL_QTY' THEN
7582 
7583                             x_total_qty_tbl(l_tmp_index) := l_amount;
7584 
7585                         ELSIF l_curr_rec.amount_type_code = 'FCST_QTY' THEN
7586 
7587                             x_total_qty_tbl(l_tmp_index) := l_amount;
7588 
7589                         ELSIF l_curr_rec.amount_type_code = 'ETC_QTY' THEN
7590 
7591                             get_total_fcst_amounts
7592                            (p_project_id                    =>p_project_id,
7593                             p_budget_version_id             =>p_budget_version_id,
7594                             p_task_id                       =>l_curr_rec.task_id,
7595                             p_resource_list_member_id       =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7596                             p_txn_currency_code             =>l_curr_rec.txn_currency_code,
7597                             p_line_start_date               =>l_prd_mask_st_date_tbl(kk),
7598                             p_line_end_date                 =>l_prd_mask_end_date_tbl(kk),
7599                             p_prd_mask_st_date_tbl          =>l_prd_mask_st_date_tbl,
7600                             p_prd_mask_end_date_tbl         =>l_prd_mask_end_date_tbl,
7601                             p_st_index_in_prd_mask          =>l_st_index_in_prd_mask,
7602                             p_end_index_in_prd_mask         =>l_end_index_in_prd_mask,
7603                             p_etc_start_date                =>p_etc_start_date,
7604                             p_etc_quantity                  =>l_amount,
7605                             p_fcst_quantity                 =>x_total_qty_tbl(l_tmp_index),
7606                             p_etc_raw_cost                  =>NULL,
7607                             p_fcst_raw_cost                 =>NULL,
7608                             p_etc_burd_cost                 =>NULL,
7609                             p_fcst_burd_cost                =>NULL,
7610                             p_etc_revenue                   =>NULL,
7611                             p_fcst_revenue                  =>NULL,
7612                             px_cached_fcst_qty_tbl          =>l_cached_fcst_qty_tbl,
7613                             px_cached_fcst_raw_cost_tbl     =>l_cached_fcst_raw_cost_tbl,
7614                             px_cached_fcst_burd_cost_tbl    =>l_cached_fcst_burd_cost_tbl,
7615                             px_cached_fcst_revenue_tbl      =>l_cached_fcst_revenue_tbl,
7616                             px_cached_etc_qty_tbl           =>l_cached_etc_qty_tbl,
7617                             px_cached_etc_raw_cost_tbl      =>l_cached_etc_raw_cost_tbl,
7618                             px_cached_etc_burd_cost_tbl     =>l_cached_etc_burd_cost_tbl,
7619                             px_cached_etc_revenue_tbl       =>l_cached_etc_revenue_tbl,
7620                             x_total_quantity                =>x_total_qty_tbl(l_tmp_index),
7621                             x_total_raw_cost                =>l_tmp_raw_cost,
7622                             x_total_burd_cost               =>l_tmp_burd_cost,
7623                             x_total_revenue                 =>l_tmp_revenue,
7624                             x_return_status                 =>x_return_status,
7625                             x_msg_count                     =>x_msg_count,
7626                             x_msg_data                      =>x_msg_data    );
7627 
7628                             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7629                                  IF l_debug_mode = 'Y' THEN
7630                                       pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7631                                       pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7632                                  END IF;
7633                                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7634                             END IF;
7635 
7636                         ELSIF l_curr_rec.amount_type_code IN ('ETC_BURDENED_COST_RATE','BURDENED_COST_RATE') THEN
7637 
7638                             x_burdened_cost_rate_tbl(l_tmp_index) := l_amount;
7639 
7640                         ELSIF l_curr_rec.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') THEN
7641 
7642                             x_raw_cost_rate_tbl(l_tmp_index) := l_amount;
7643 
7644                         ELSIF l_curr_rec.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') THEN
7645 
7646                             x_bill_rate_tbl(l_tmp_index) := l_amount;
7647 
7648                         END IF;
7649 
7650                     END LOOP;--FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7651 
7652                     --log1('----- STAGE X5.17------- ');
7653 
7654                     IF nvl(l_curr_rec.delete_flag,'N') <> 'Y' AND
7655                            l_plan_txn_attrs_copied_flag ='N' THEN
7656 
7657                         FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7658 
7659                             l_tmp_index := l_prev_pbl_tbl_count + kk - l_st_index_in_prd_mask + 1;
7660 
7661                             --log1('----- STAGE X5.17.1------- '||l_tmp_index);
7662 
7663                             x_proj_cost_rate_type_tbl(l_tmp_index)      := p_budget_lines_tbl(l_bl_index).project_cost_rate_type;
7664                             x_proj_cost_rate_date_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_cost_rate_date_type;
7665                             x_proj_cost_rate_tbl(l_tmp_index)           := p_budget_lines_tbl(l_bl_index).project_cost_exchange_rate;
7666                             x_proj_cost_rate_date_tbl(l_tmp_index)      := p_budget_lines_tbl(l_bl_index).project_cost_rate_date;
7667                             --log1('----- STAGE X5.17.2------- ');
7668                             x_proj_rev_rate_type_tbl(l_tmp_index)       := p_budget_lines_tbl(l_bl_index).project_rev_rate_type;
7669                             x_proj_rev_rate_date_type_tbl(l_tmp_index)  := p_budget_lines_tbl(l_bl_index).project_rev_rate_date_type;
7670                             x_proj_rev_rate_tbl(l_tmp_index)            := p_budget_lines_tbl(l_bl_index).project_rev_exchange_rate;
7671                             x_proj_rev_rate_date_tbl(l_tmp_index)       := p_budget_lines_tbl(l_bl_index).project_rev_rate_date;
7672                             --log1('----- STAGE X5.17.3------- ');
7673                             x_pfunc_cost_rate_type_tbl(l_tmp_index)     := p_budget_lines_tbl(l_bl_index).projfunc_cost_rate_type;
7674                             x_pfunc_cost_rate_date_typ_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_cost_rate_date_type;
7675                             x_pfunc_cost_rate_tbl(l_tmp_index)          := p_budget_lines_tbl(l_bl_index).projfunc_cost_exchange_rate;
7676                             x_pfunc_cost_rate_date_tbl(l_tmp_index)     := p_budget_lines_tbl(l_bl_index).projfunc_cost_rate_date;
7677                             --log1('----- STAGE X5.17.4------- ');
7678                             x_pfunc_rev_rate_type_tbl(l_tmp_index)      := p_budget_lines_tbl(l_bl_index).projfunc_rev_rate_type;
7679                             x_pfunc_rev_rate_date_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_rev_rate_date_type;
7680                             x_pfunc_rev_rate_tbl(l_tmp_index)           := p_budget_lines_tbl(l_bl_index).projfunc_rev_exchange_rate;
7681                             x_pfunc_rev_rate_date_tbl(l_tmp_index)      := p_budget_lines_tbl(l_bl_index).projfunc_rev_rate_date;
7682 
7683                             -- stamping null for change reason and description
7684                             x_change_reason_code_tbl(l_tmp_index)       := NULL;
7685                             x_description_tbl(l_tmp_index)              := NULL;
7686 
7687                         END LOOP;--IF nvl(l_curr_rec.delete_flag,'N') <> 'Y' AND
7688 
7689                         l_plan_txn_attrs_copied_flag :='Y';
7690 
7691                     END IF;
7692 
7693                 END IF;--IF l_st_index_in_prd_mask IS NOT NULL THEN
7694 
7695              --Bug 6877488 : The below code should be executed only when the planning dates are null. Added that
7696              --condition to remove the case where planning dates are not null but etc start date is >= planning end date
7697              ELSIF p_planning_start_date_tbl(l_bl_index) IS  NULL AND
7698                    p_planning_end_date_tbl(l_bl_index) IS  NULL THEN
7699 
7700                  --Planning Start/End Dates both are null. This can happen only for new resource assignments when
7701 
7702                  ----1.Delete flag is Y or
7703                  ----2.Amounts are not entered at all.
7704                  --In the first case RA will be ignored and in the second case RA with no amounts would be created
7705                 IF l_curr_rec.delete_flag='N' THEN
7706 
7707                     x_task_id_tbl.extend(1);
7708                     x_rlm_id_tbl.extend(1);
7709                     x_ra_id_tbl.extend(1);
7710                     x_spread_curve_id_tbl.extend(1);
7711                     x_mfc_cost_type_id_tbl.extend(1);
7712                     x_etc_method_code_tbl.extend(1);
7713                     x_sp_fixed_date_tbl.extend(1);
7714                     x_res_class_code_tbl.extend(1);
7715                     x_rate_based_flag_tbl.extend(1);
7716                     x_rbs_elem_id_tbl.extend(1);
7717                     x_txn_currency_code_tbl.extend(1);
7718                     x_planning_start_date_tbl.extend(1);
7719                     x_planning_end_date_tbl.extend(1);
7720                     x_total_qty_tbl.extend(1);
7721                     x_total_raw_cost_tbl.extend(1);
7722                     x_total_burdened_cost_tbl.extend(1);
7723                     x_total_revenue_tbl.extend(1);
7724                     x_raw_cost_rate_tbl.extend(1);
7725                     x_burdened_cost_rate_tbl.extend(1);
7726                     x_bill_rate_tbl.extend(1);
7727                     x_line_start_date_tbl.extend(1);
7728                     x_line_end_date_tbl.extend(1);
7729                     x_proj_cost_rate_type_tbl.extend(1);
7730                     x_proj_cost_rate_date_type_tbl.extend(1);
7731                     x_proj_cost_rate_tbl.extend(1);
7732                     x_proj_cost_rate_date_tbl.extend(1);
7733                     x_proj_rev_rate_type_tbl.extend(1);
7734                     x_proj_rev_rate_date_type_tbl.extend(1);
7735                     x_proj_rev_rate_tbl.extend(1);
7736                     x_proj_rev_rate_date_tbl.extend(1);
7737                     x_pfunc_cost_rate_type_tbl.extend(1);
7738                     x_pfunc_cost_rate_date_typ_tbl.extend(1);
7739                     x_pfunc_cost_rate_tbl.extend(1);
7740                     x_pfunc_cost_rate_date_tbl.extend(1);
7741                     x_pfunc_rev_rate_type_tbl.extend(1);
7742                     x_pfunc_rev_rate_date_type_tbl.extend(1);
7743                     x_pfunc_rev_rate_tbl.extend(1);
7744                     x_pfunc_rev_rate_date_tbl.extend(1);
7745                     x_delete_flag_tbl.extend(1);
7746                     x_change_reason_code_tbl.extend(1);
7747                     x_description_tbl.extend(1);
7748                     x_task_id_tbl(x_task_id_tbl.COUNT)                    := l_curr_rec.task_id;
7749                     x_rlm_id_tbl(x_rlm_id_tbl.COUNT)                      := p_budget_lines_tbl(l_bl_index).resource_list_member_id;
7750                     x_ra_id_tbl(x_ra_id_tbl.COUNT)                        := p_ra_id_tbl(l_bl_index);
7751                     x_txn_currency_code_tbl(x_txn_currency_code_tbl.COUNT):= l_curr_rec.txn_currency_code;
7752                     --Assigning N since for periodic layouts, amounts a  type with delete flag as N would be NULLED
7753                     --out
7754                     x_delete_flag_tbl(x_delete_flag_tbl.COUNT)            :='N';
7755 
7756                 END IF;
7757                 --Skip the processing of all the records pertaining to this ra id
7758                 l_skip_ra_flag:='Y';
7759                 l_skip_task_id:=l_curr_rec.task_id;
7760                 l_skip_rlm_id:=p_budget_lines_tbl(l_bl_index).resource_list_member_id;
7761 
7762             END IF;--            IF p_planning_start_date_tbl(l_bl_index) IS NOT NULL AND
7763 
7764 
7765         END LOOP;
7766 
7767     ELSE --p_context is WEBADI_NON_PERIODIC
7768         --log1('----- STAGE X6-------');
7769         FOR kk IN 1..p_budget_lines_tbl.COUNT LOOP
7770             --log1('----- STAGE X7-------');
7771             x_task_id_tbl.EXTEND(1);
7772             x_task_id_tbl(kk)                  := p_budget_lines_tbl(kk).pa_task_id;
7773             x_rlm_id_tbl.EXTEND(1);
7774             x_rlm_id_tbl(kk)                   := p_budget_lines_tbl(kk).resource_list_member_id;
7775             x_ra_id_tbl.EXTEND(1);
7776             x_ra_id_tbl(kk)                    := p_ra_id_tbl(kk);
7777             x_txn_currency_code_tbl.EXTEND(1);
7778             x_txn_currency_code_tbl(kk)        := p_budget_lines_tbl(kk).txn_currency_code;
7779             --log1('----- STAGE X71-------');
7780             x_planning_start_date_tbl.EXTEND(1);
7781             x_planning_start_date_tbl(kk)      := p_planning_start_date_tbl(kk);
7782             x_planning_end_date_tbl.EXTEND(1);
7783             x_planning_end_date_tbl(kk)        := p_planning_end_date_tbl(kk);
7784             --log1('----- STAGE X72-------');
7785             x_total_qty_tbl.EXTEND(1);
7786             x_total_qty_tbl(kk)                := p_budget_lines_tbl(kk).quantity;
7787             x_total_raw_cost_tbl.EXTEND(1);
7788             x_total_raw_cost_tbl(kk)           := p_budget_lines_tbl(kk).raw_cost;
7789             x_total_burdened_cost_tbl.EXTEND(1);
7790             x_total_burdened_cost_tbl(kk)      := p_budget_lines_tbl(kk).burdened_cost;
7791             x_total_revenue_tbl.EXTEND(1);
7792             x_total_revenue_tbl(kk)            := p_budget_lines_tbl(kk).revenue;
7793             --log1('----- STAGE X73-------');
7794             x_raw_cost_rate_tbl.EXTEND(1);
7795             x_raw_cost_rate_tbl(kk)            := p_raw_cost_rate_tbl(kk);
7796             x_burdened_cost_rate_tbl.EXTEND(1);
7797             x_burdened_cost_rate_tbl(kk)       := p_burd_cost_rate_tbl(kk);
7798             x_bill_rate_tbl.EXTEND(1);
7799             x_bill_rate_tbl(kk)                := p_bill_rate_tbl(kk);
7800             --log1('----- STAGE X74-------');
7801 
7802             x_line_start_date_tbl.EXTEND(1);
7803             x_line_start_date_tbl(kk)          := NULL;
7804             x_line_end_date_tbl.EXTEND(1);
7805             x_line_end_date_tbl(kk)            := NULL;
7806             --log1('----- STAGE X75-------');
7807             x_proj_cost_rate_type_tbl.EXTEND(1);
7808             x_proj_cost_rate_type_tbl(kk)      := p_budget_lines_tbl(kk).project_cost_rate_type;
7809             x_proj_cost_rate_date_type_tbl.EXTEND(1);
7810             x_proj_cost_rate_date_type_tbl(kk) := p_budget_lines_tbl(kk).project_cost_rate_date_type;
7811             x_proj_cost_rate_tbl.EXTEND(1);
7812             x_proj_cost_rate_tbl(kk)           := p_budget_lines_tbl(kk).project_cost_exchange_rate;
7813             x_proj_cost_rate_date_tbl.EXTEND(1);
7814             x_proj_cost_rate_date_tbl(kk)      := p_budget_lines_tbl(kk).project_cost_rate_date;
7815             x_proj_rev_rate_type_tbl.EXTEND(1);
7816             x_proj_rev_rate_type_tbl(kk)       := p_budget_lines_tbl(kk).project_rev_rate_type;
7817             x_proj_rev_rate_date_type_tbl.EXTEND(1);
7818             x_proj_rev_rate_date_type_tbl(kk)  := p_budget_lines_tbl(kk).project_rev_rate_date_type;
7819             x_proj_rev_rate_tbl.EXTEND(1);
7820             x_proj_rev_rate_tbl(kk)            := p_budget_lines_tbl(kk).project_rev_exchange_rate;
7821             x_proj_rev_rate_date_tbl.EXTEND(1);
7822             x_proj_rev_rate_date_tbl(kk)       := p_budget_lines_tbl(kk).project_rev_rate_date;
7823             x_pfunc_cost_rate_type_tbl.EXTEND(1);
7824             x_pfunc_cost_rate_type_tbl(kk)     := p_budget_lines_tbl(kk).projfunc_cost_rate_type;
7825             x_pfunc_cost_rate_date_typ_tbl.EXTEND(1);
7826             x_pfunc_cost_rate_date_typ_tbl(kk) := p_budget_lines_tbl(kk).projfunc_cost_rate_date_type;
7827             x_pfunc_cost_rate_tbl.EXTEND(1);
7828             x_pfunc_cost_rate_tbl(kk)          := p_budget_lines_tbl(kk).projfunc_cost_exchange_rate;
7829             x_pfunc_cost_rate_date_tbl.EXTEND(1);
7830             x_pfunc_cost_rate_date_tbl(kk)     := p_budget_lines_tbl(kk).projfunc_cost_rate_date;
7831             x_pfunc_rev_rate_type_tbl.EXTEND(1);
7832             x_pfunc_rev_rate_type_tbl(kk)      := p_budget_lines_tbl(kk).projfunc_rev_rate_type;
7833             x_pfunc_rev_rate_date_type_tbl.EXTEND(1);
7834             x_pfunc_rev_rate_date_type_tbl(kk) := p_budget_lines_tbl(kk).projfunc_rev_rate_date_type;
7835             x_pfunc_rev_rate_tbl.EXTEND(1);
7836             x_pfunc_rev_rate_tbl(kk)           := p_budget_lines_tbl(kk).projfunc_rev_exchange_rate;
7837             x_pfunc_rev_rate_date_tbl.EXTEND(1);
7838             x_pfunc_rev_rate_date_tbl(kk)      := p_budget_lines_tbl(kk).projfunc_rev_rate_date;
7839             --log1('----- STAGE X76-------');
7840             x_delete_flag_tbl.EXTEND(1);
7841             x_delete_flag_tbl(kk)              := p_delete_flag_tbl(kk);
7842             x_spread_curve_id_tbl.EXTEND(1);
7843             x_spread_curve_id_tbl(kk)          := p_spread_curve_id_tbl(kk);
7844             x_mfc_cost_type_id_tbl.EXTEND(1);
7845             x_mfc_cost_type_id_tbl(kk)         := p_mfc_cost_type_id_tbl(kk);
7846             x_etc_method_code_tbl.EXTEND(1);
7847             x_etc_method_code_tbl(kk)          := p_etc_method_code_tbl(kk);
7848             x_sp_fixed_date_tbl.EXTEND(1);
7849             x_sp_fixed_date_tbl(kk)            := p_sp_fixed_date_tbl(kk);
7850             x_res_class_code_tbl.EXTEND(1);
7851             x_res_class_code_tbl(kk)           := p_res_class_code_tbl(kk);
7852             x_rate_based_flag_tbl.EXTEND(1);
7853             x_rate_based_flag_tbl(kk)          := p_rate_based_flag_tbl(kk);
7854             x_rbs_elem_id_tbl.EXTEND(1);
7855             x_rbs_elem_id_tbl(kk)              := p_rbs_elem_id_tbl(kk);
7856             x_change_reason_code_tbl.EXTEND(1);
7857             x_change_reason_code_tbl(kk)       := p_budget_lines_tbl(kk).change_reason_code;
7858             x_description_tbl.EXTEND(1);
7859             x_description_tbl(kk)              := p_budget_lines_tbl(kk).description;
7860             --log1('----- STAGE X8-------');
7861 
7862             --For forecast version, The above amount tbls contain the Forecast amounts, The below
7863             --API is called to modify the Forecast amounts entered based on the ETC amounts entered.
7864             IF p_plan_class_code='FORECAST' THEN
7865 
7866                     get_total_fcst_amounts
7867                    (p_project_id                    =>p_project_id,
7868                     p_budget_version_id             =>p_budget_version_id,
7869                     p_task_id                       =>p_budget_lines_tbl(kk).pa_task_id,
7870                     p_resource_list_member_id       =>p_budget_lines_tbl(kk).resource_list_member_id,
7871                     p_txn_currency_code             =>p_budget_lines_tbl(kk).txn_currency_code,
7872                     p_line_start_date               =>NULL,
7873                     p_line_end_date                 =>NULL,
7874                     p_prd_mask_st_date_tbl          =>SYSTEM.pa_date_tbl_type(),
7875                     p_prd_mask_end_date_tbl         =>SYSTEM.pa_date_tbl_type(),
7876                     p_st_index_in_prd_mask          =>NULL,
7877                     p_end_index_in_prd_mask         =>NULL,
7878                     p_etc_start_date                =>p_etc_start_date,
7879                     p_etc_quantity                  =>p_etc_quantity_tbl(kk),
7880                     p_fcst_quantity                 =>p_budget_lines_tbl(kk).quantity,
7881                     p_etc_raw_cost                  =>p_etc_raw_cost_tbl(kk),
7882                     p_fcst_raw_cost                 =>p_budget_lines_tbl(kk).raw_cost,
7883                     p_etc_burd_cost                 =>p_etc_burdened_cost_tbl(kk),
7884                     p_fcst_burd_cost                =>p_budget_lines_tbl(kk).burdened_cost,
7885                     p_etc_revenue                   =>p_etc_revenue_tbl(kk),
7886                     p_fcst_revenue                  =>p_budget_lines_tbl(kk).revenue,
7887                     px_cached_fcst_qty_tbl          =>l_cached_fcst_qty_tbl,
7888                     px_cached_fcst_raw_cost_tbl     =>l_cached_fcst_raw_cost_tbl,
7889                     px_cached_fcst_burd_cost_tbl    =>l_cached_fcst_burd_cost_tbl,
7890                     px_cached_fcst_revenue_tbl      =>l_cached_fcst_revenue_tbl,
7891                     px_cached_etc_qty_tbl           =>l_cached_etc_qty_tbl,
7892                     px_cached_etc_raw_cost_tbl      =>l_cached_etc_raw_cost_tbl,
7893                     px_cached_etc_burd_cost_tbl     =>l_cached_etc_burd_cost_tbl,
7894                     px_cached_etc_revenue_tbl       =>l_cached_etc_revenue_tbl,
7895                     x_total_quantity                =>x_total_qty_tbl(kk),
7896                     x_total_raw_cost                =>x_total_raw_cost_tbl(kk),
7897                     x_total_burd_cost               =>x_total_burdened_cost_tbl(kk),
7898                     x_total_revenue                 =>x_total_revenue_tbl(kk),
7899                     x_return_status                 =>x_return_status,
7900                     x_msg_count                     =>x_msg_count,
7901                     x_msg_data                      =>x_msg_data    );
7902 
7903                     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7904                          IF l_debug_mode = 'Y' THEN
7905                               pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7906                               pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7907                          END IF;
7908                          RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7909                     END IF;
7910 
7911                 END IF;
7912 
7913         END LOOP;--FOR kk IN 1..p_budget_lines_tbl.COUNT LOOP
7914         --log1('----- STAGE X9-------');
7915     END IF; --p_context
7916 
7917 
7918     IF l_debug_mode = 'Y' THEN
7919         pa_debug.g_err_stage := 'Leaving pa_fp_webadi_pkg.prepare_pbl_input';
7920         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
7921     END IF;
7922 
7923     IF l_debug_mode = 'Y' THEN
7924         pa_debug.reset_curr_function;
7925     END IF;
7926 
7927 EXCEPTION
7928     WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
7929         l_msg_count := FND_MSG_PUB.count_msg;
7930         IF l_msg_count = 1 and x_msg_data IS NULL THEN
7931            PA_INTERFACE_UTILS_PUB.get_messages
7932                  (p_encoded        => FND_API.G_TRUE
7933                   ,p_msg_index      => 1
7934                   ,p_msg_count      => l_msg_count
7935                   ,p_msg_data       => l_msg_data
7936                   ,p_data           => l_data
7937                   ,p_msg_index_out  => l_msg_index_out);
7938            x_msg_data := l_data;
7939            x_msg_count := l_msg_count;
7940         ELSE
7941            x_msg_count := l_msg_count;
7942         END IF;
7943         x_return_status := FND_API.G_RET_STS_ERROR;
7944 
7945         IF l_debug_mode = 'Y' THEN
7946           pa_debug.reset_curr_function;
7947         END IF;
7948         RETURN;
7949 
7950     WHEN OTHERS THEN
7951         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7952         x_msg_count     := 1;
7953         x_msg_data      := SQLERRM;
7954 
7955         FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
7956                               ,p_procedure_name  => 'prepare_pbl_input');
7957         IF l_debug_mode = 'Y' THEN
7958            pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
7959            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7960         END IF;
7961 
7962         IF l_debug_mode = 'Y' THEN
7963           pa_debug.reset_curr_function;
7964         END IF;
7965         RAISE;
7966 
7967 END prepare_pbl_input;
7968 
7969 PROCEDURE process_budget_lines
7970 ( p_context                         IN              VARCHAR2,
7971   p_budget_version_id               IN              pa_budget_versions.budget_version_id%TYPE,
7972   p_version_info_rec                IN              pa_fp_gen_amount_utils.fp_cols,
7973   p_task_id_tbl                     IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
7974   p_rlm_id_tbl                      IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
7975   p_ra_id_tbl                       IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
7976   p_spread_curve_id_tbl             IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
7977   p_mfc_cost_type_id_tbl            IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
7978   p_etc_method_code_tbl             IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
7979   p_sp_fixed_date_tbl               IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
7980   p_res_class_code_tbl              IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
7981   p_rate_based_flag_tbl             IN              SYSTEM.pa_varchar2_1_tbl_type    := SYSTEM.pa_varchar2_1_tbl_type(),
7982   p_rbs_elem_id_tbl                 IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
7983   p_txn_currency_code_tbl           IN              SYSTEM.pa_varchar2_15_tbl_type   := SYSTEM.pa_varchar2_15_tbl_type(),
7984   p_planning_start_date_tbl         IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
7985   p_planning_end_date_tbl           IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
7986   p_total_qty_tbl                   IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
7987   p_total_raw_cost_tbl              IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
7988   p_total_burdened_cost_tbl         IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
7989   p_total_revenue_tbl               IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
7990   p_raw_cost_rate_tbl               IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
7991   p_burdened_cost_rate_tbl          IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
7992   p_bill_rate_tbl                   IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
7993   p_line_start_date_tbl             IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
7994   p_line_end_date_tbl               IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
7995   p_proj_cost_rate_type_tbl         IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
7996   p_proj_cost_rate_date_type_tbl    IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
7997   p_proj_cost_rate_tbl              IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
7998   p_proj_cost_rate_date_tbl         IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
7999   p_proj_rev_rate_type_tbl          IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8000   p_proj_rev_rate_date_type_tbl     IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8001   p_proj_rev_rate_tbl               IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8002   p_proj_rev_rate_date_tbl          IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
8003   p_pfunc_cost_rate_type_tbl        IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8004   p_pfunc_cost_rate_date_typ_tbl    IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8005   p_pfunc_cost_rate_tbl             IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8006   p_pfunc_cost_rate_date_tbl        IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
8007   p_pfunc_rev_rate_type_tbl         IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8008   p_pfunc_rev_rate_date_type_tbl    IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8009   p_pfunc_rev_rate_tbl              IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8010   p_pfunc_rev_rate_date_tbl         IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
8011   p_change_reason_code_tbl          IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8012   p_description_tbl                 IN              SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type(),
8013   p_delete_flag_tbl                 IN              SYSTEM.pa_varchar2_1_tbl_type    := SYSTEM.pa_varchar2_1_tbl_type(),
8014   x_return_status                   OUT             NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
8015   x_msg_count                       OUT             NOCOPY NUMBER, --File.Sql.39 bug 4440895
8016   x_msg_data                        OUT             NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8017  )
8018 
8019 IS
8020       -- variables used for debugging
8021       l_module_name             VARCHAR2(100) := 'pa_fp_webadi_pkg.process_budget_lines';
8022       l_debug_mode              VARCHAR2(1) := 'N';
8023       l_debug_level3            CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
8024       l_debug_level5            CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
8025 
8026       l_return_status           VARCHAR2(1);
8027       l_msg_count               NUMBER;
8028       l_msg_data                VARCHAR2(2000);
8029       l_data                    VARCHAR2(2000);
8030       l_msg_index_out           NUMBER;
8031 
8032       -- variables used to copy the inputs and to be used inside the api
8033       l_task_id_tbl                            SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8034       l_rlm_id_tbl                             SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8035       l_ra_id_tbl                              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8036       l_spread_curve_id_tbl                    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8037       l_mfc_cost_type_id_tbl                   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8038       l_etc_method_code_tbl                    SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8039       l_sp_fixed_date_tbl                      SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8040       l_res_class_code_tbl                     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8041       l_rate_based_flag_tbl                    SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8042       l_rbs_elem_id_tbl                        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8043       l_txn_currency_code_tbl                  SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8044       l_planning_start_date_tbl                SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8045       l_planning_end_date_tbl                  SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8046       l_total_qty_tbl                          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8047       l_total_raw_cost_tbl                     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8048       l_total_burdened_cost_tbl                SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8049       l_total_revenue_tbl                      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8050       l_raw_cost_rate_tbl                      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8051       l_burdened_cost_rate_tbl                 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8052       l_bill_rate_tbl                          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8053       l_line_start_date_tbl                    SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8054       l_line_end_date_tbl                      SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8055       l_proj_cost_rate_type_tbl                SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8056       l_proj_cost_rate_date_type_tbl           SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8057       l_proj_cost_rate_tbl                     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8058       l_proj_cost_rate_date_tbl                SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8059       l_proj_rev_rate_type_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8060       l_proj_rev_rate_date_type_tbl            SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8061       l_proj_rev_rate_tbl                      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8062       l_proj_rev_rate_date_tbl                 SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8063       l_pfunc_cost_rate_type_tbl               SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8064       l_pfunc_cost_rate_date_typ_tbl           SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8065       l_pfunc_cost_rate_tbl                    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8066       l_pfunc_cost_rate_date_tbl               SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8067       l_pfunc_rev_rate_type_tbl                SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8068       l_pfunc_rev_rate_date_type_tbl           SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8069       l_pfunc_rev_rate_tbl                     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8070       l_pfunc_rev_rate_date_tbl                SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8071       l_change_reason_code_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8072       l_description_tbl                        SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8073 
8074 
8075       -- variables to copy the records with delete_flag = Y
8076       l_df_task_id_tbl                         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8077       l_df_rlm_id_tbl                          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8078       l_df_ra_id_tbl                           SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8079       l_df_spread_curve_id_tbl                 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8080       l_df_mfc_cost_type_id_tbl                SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8081       l_df_etc_method_code                     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8082       l_df_sp_fixed_date_tbl                   SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8083       l_df_res_class_code_tbl                  SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8084       l_df_rate_based_flag_tbl                 SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8085       l_df_rbs_elem_id_tbl                     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8086       l_df_txn_currency_code_tbl               SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8087       l_df_planning_start_date_tbl             SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8088       l_df_planning_end_date_tbl               SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8089       l_df_total_qty_tbl                       SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8090       l_df_total_raw_cost_tbl                  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8091       l_df_total_burdened_cost_tbl             SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8092       l_df_total_revenue_tbl                   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8093       l_df_raw_cost_rate_tbl                   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8094       l_df_burdened_cost_rate_tbl              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8095       l_df_bill_rate_tbl                       SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8096       l_df_line_start_date_tbl                 SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8097       l_df_line_end_date_tbl                   SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8098       l_df_pj_cost_rate_typ_tbl                SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8099       l_df_pj_cost_rate_date_typ_tbl           SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8100       l_df_pj_cost_rate_tbl                    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8101       l_df_pj_cost_rate_date_tbl               SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8102       l_df_pj_rev_rate_typ_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8103       l_df_pj_rev_rate_date_typ_tbl            SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8104       l_df_pj_rev_rate_tbl                     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8105       l_df_pj_rev_rate_date_tbl                SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8106       l_df_pf_cost_rate_typ_tbl                SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8107       l_df_pf_cost_rate_date_typ_tbl           SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8108       l_df_pf_cost_rate_tbl                    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8109       l_df_pf_cost_rate_date_tbl               SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8110       l_df_pf_rev_rate_typ_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8111       l_df_pf_rev_rate_date_typ_tbl            SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8112       l_df_pf_rev_rate_tbl                     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8113       l_df_pf_rev_rate_date_tbl                SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8114       l_df_change_reason_code_tbl              SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8115       l_df_description_tbl                     SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8116 
8117       l_total_rec_passed        INTEGER := 0;
8118       l_curr_ra_id_seq          NUMBER;
8119 
8120       -- counter variables
8121       i                         INTEGER;
8122 
8123       -- variables used to call add_planning_transactions
8124       l_new_elem_ver_id             pa_proj_element_versions.element_version_id%TYPE;
8125       l_new_elem_ver_id_tbl         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8126       l_new_rlm_id_tbl              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8127       l_new_planning_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8128       l_new_planning_end_date_tbl   SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8129 
8130       -- variables used to insert into pa_fp_rollup_tmp
8131       -- with delete flag = Y
8132       l_bl_del_flag_ra_id_tbl            SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8133       l_bl_del_flag_st_dt_tbl            SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8134       l_bl_del_flag_en_dt_tbl            SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8135       l_bl_del_flag_txn_curr_tbl         SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8136       l_bl_del_flag_txn_rc_tbl           SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8137       l_bl_del_flag_txn_bc_tbl           SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8138       l_bl_del_flag_txn_rev_tbl          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8139       l_bl_del_flag_pf_curr_tbl          SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8140       l_bl_del_flag_pf_cr_typ_tbl        SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8141       l_bl_del_flag_pf_cr_dt_typ_tbl     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8142       l_bl_del_flag_pf_cexc_rate_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8143       l_bl_del_flag_pf_cr_date_tbl       SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8144       l_bl_del_flag_pf_rr_typ_tbl        SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8145       l_bl_del_flag_pf_rr_dt_typ_tbl     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8146       l_bl_del_flag_pf_rexc_rate_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8147       l_bl_del_flag_pf_rr_date_tbl       SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8148       l_bl_del_flag_pj_curr_tbl          SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8149       l_bl_del_flag_pj_cr_typ_tbl        SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8150       l_bl_del_flag_pj_cr_dt_typ_tbl     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8151       l_bl_del_flag_pj_cexc_rate_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8152       l_bl_del_flag_pj_cr_date_tbl       SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8153       l_bl_del_flag_pj_rr_typ_tbl        SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8154       l_bl_del_flag_pj_rr_dt_typ_tbl     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8155       l_bl_del_flag_pj_rexc_rate_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8156       l_bl_del_flag_pj_rr_date_tbl       SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8157       l_bl_del_flag_bl_id_tbl            SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8158       l_bl_del_flag_per_name_tbl         SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8159       l_bl_del_flag_pj_raw_cost_tbl      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8160       l_bl_del_flag_pj_burd_cost_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8161       l_bl_del_flag_pj_rev_tbl           SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8162       l_bl_del_flag_raw_cost_tbl         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8163       l_bl_del_flag_burd_cost_tbl        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8164       l_bl_del_flag_rev_tbl              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8165       l_bl_del_flag_qty_tbl              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8166       l_bl_del_flag_c_rej_code_tbl       SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8167       l_bl_del_flag_b_rej_code_tbl       SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8168       l_bl_del_flag_r_rej_code_tbl       SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8169       l_bl_del_flag_o_rej_code_tbl       SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8170       l_bl_del_fg_pc_cnv_rej_cd_tbl      SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8171       l_bl_del_fg_pf_cnv_rej_cd_tbl      SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8172 
8173 
8174           -- for budget line context to spread the amounts
8175       l_new_ra_id                           pa_resource_assignments.resource_assignment_id%TYPE;
8176       l_calc_calling_context                VARCHAR2(30);
8177 
8178       -- variables used to call update_reporting_lines
8179       l_pji_res_ass_id_tbl                 SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8180       l_pji_period_name_tbl                SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8181       l_pji_start_date_tbl                 SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8182       l_pji_end_date_tbl                   SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8183       l_pji_txn_curr_code_tbl              SYSTEM.pa_varchar2_15_tbl_type   := SYSTEM.pa_varchar2_15_tbl_type();
8184       l_pji_txn_raw_cost_tbl               SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8185       l_pji_txn_burd_cost_tbl              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8186       l_pji_txn_revenue_tbl                SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8187       l_pji_project_raw_cost_tbl           SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8188       l_pji_project_burd_cost_tbl          SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8189       l_pji_project_revenue_tbl            SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8190       l_pji_raw_cost_tbl                   SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8191       l_pji_burd_cost_tbl                  SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8192       l_pji_revenue_tbl                    SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8193       l_pji_cost_rej_code_tbl              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8194       l_pji_revenue_rej_code_tbl           SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8195       l_pji_burden_rej_code_tbl            SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8196       l_pji_other_rej_code                 SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8197       l_pji_pc_cur_conv_rej_code_tbl       SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8198       l_pji_pf_cur_conv_rej_code_tbl       SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8199       l_pji_quantity_tbl                   SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8200 
8201       --This table will hold the distinct NEW resource assignments passed to this API for processing (excluding delete flag = Y recs)
8202       --Index will be in the following format : 'T' || <Task Id> || 'R' || <Rlm Id>
8203       l_distinct_new_ra_tbl                varchar_32_indexed_num_tbl_typ;
8204       l_distinct_new_ra_index              VARCHAR2(32);
8205 
8206 
8207       l_new_res_asg_rbs_elem_id         pa_resource_assignments.rbs_element_id%TYPE;
8208       l_new_res_asg_res_class_code      pa_resource_assignments.resource_class_code%TYPE;
8209       l_new_res_asg_rate_based_flag     pa_resource_assignments.rate_based_flag%TYPE;
8210 
8211       l_g_miss_char   CONSTANT      VARCHAR(1)  := FND_API.G_MISS_CHAR;
8212       l_g_miss_num    CONSTANT      NUMBER      := FND_API.G_MISS_NUM;
8213       l_g_miss_date   CONSTANT      DATE        := FND_API.G_MISS_DATE;
8214 
8215       l_debug_st_dt  DATE;
8216       l_debug_en_dt  DATE;
8217       l_debug_st_dt_tbl      SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8218       l_debug_en_dt_tbl      SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8219 
8220       l_debug_quantity           NUMBER;
8221       l_debug_quantity_tbl       SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8222       l_debug_raw_cost           NUMBER;
8223       l_debug_raw_cost_tbl       SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8224       l_debug_burdened_cost      NUMBER;
8225       l_debug_burdened_cost_tbl  SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8226       l_debug_revenue            NUMBER;
8227       l_debug_revenue_tbl        SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8228       l_temp                     VARCHAR2(100);
8229       l_upd_init_quantity_tbl            SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8230       l_upd_init_raw_cost_tbl            SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8231       l_upd_init_burdened_cost_tbl       SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8232       l_upd_init_revenue_tbl             SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8233       l_upd_proj_init_raw_cost_tbl       SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8234       l_upd_proj_init_burd_cost_tbl      SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8235       l_upd_proj_init_revenue_tbl        SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8236       l_upd_txn_init_raw_cost_tbl        SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8237       l_upd_txn_init_burd_cost_tbl       SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8238       l_upd_txn_init_revenue_tbl         SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8239       l_upd_budget_line_id_tbl           SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8240       l_upd_delete_flag_tbl              SYSTEM.pa_varchar2_1_tbl_type    := SYSTEM.pa_varchar2_1_tbl_type();
8241       l_upd_pj_cost_rate_typ_tbl         SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8242       l_upd_pj_cost_exc_rate_tbl         SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8243       l_upd_pj_cost_rate_dt_typ_tbl      SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8244       l_upd_pj_cost_rate_date_tbl        SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8245       l_upd_pj_rev_rate_typ_tbl          SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8246       l_upd_pj_rev_exc_rate_tbl          SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8247       l_upd_pj_rev_rate_dt_typ_tbl       SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8248       l_upd_pj_rev_rate_date_tbl         SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8249       l_upd_pf_cost_rate_typ_tbl         SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8250       l_upd_pf_cost_exc_rate_tbl         SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8251       l_upd_pf_cost_rate_dt_typ_tbl      SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8252       l_upd_pf_cost_rate_date_tbl        SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8253       l_upd_pf_rev_rate_typ_tbl          SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8254       l_upd_pf_rev_exc_rate_tbl          SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8255       l_upd_pf_rev_rate_dt_typ_tbl       SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8256       l_upd_pf_rev_rate_date_tbl         SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8257       --Bug 4424457
8258       l_bl_count_tbl                     SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8259       l_bls_proccessed_flag              VARCHAR2(1);
8260       l_error_msg_code                   VARCHAR2(2000);
8261       l_dest_ver_id_tbl                  SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8262       l_chg_reason_code_tbl              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8263       l_desc_tbl                         SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8264 
8265       --bug 5962744
8266       l_extra_bl_flag_tbl                SYSTEM.pa_varchar2_1_tbl_type    := SYSTEM.pa_varchar2_1_tbl_type();
8267       l_ex_chg_rsn_code_tbl              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8268       l_ex_desc_tbl                      SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8269       l_ra_exists                        VARCHAR2(1);
8270       l_extra_bls_exists                 VARCHAR2(1);
8271       j                                  INTEGER;
8272 BEGIN
8273         --log1('PBL Begin '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8274         fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
8275 
8276         x_return_status := FND_API.G_RET_STS_SUCCESS;
8277         x_msg_count := 0;
8278         --log1('----- STAGE PBL1.0-------');
8279 
8280         IF l_debug_mode = 'Y' THEN
8281               pa_debug.Set_Curr_Function
8282                           (p_function   => l_module_name,
8283                            p_debug_mode => l_debug_mode);
8284         END IF;
8285 
8286         IF l_debug_mode = 'Y' THEN
8287               pa_debug.g_err_stage := 'Entering into process_budget_lines';
8288               pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8289               pa_debug.g_err_stage := 'Validating input parameters';
8290               pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8291         END IF;
8292 
8293         -- validate the mandatory input parameters
8294 
8295         -- valid p_context are WEBADI_PERIODIC and WEBADI_NON_PERIODIC
8296         IF p_context IS NULL THEN
8297               IF l_debug_mode = 'Y' THEN
8298                    pa_debug.g_err_stage := 'p_context is passed as null';
8299                    pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8300               END IF;
8301               pa_utils.add_message(p_app_short_name   => 'PA',
8302                                    p_msg_name         => 'PA_FP_INV_PARAM_PASSED',
8303                                    p_token1           => 'PROCEDURENAME',
8304                                    p_value1           => l_module_name);
8305 
8306               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8307         END IF;
8308 
8309         -- budget_version_id is not passed
8310         IF p_budget_version_id IS NULL THEN
8311               IF l_debug_mode = 'Y' THEN
8312                    pa_debug.g_err_stage := 'p_budget_version_id is passed as null';
8313                    pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8314               END IF;
8315               pa_utils.add_message(p_app_short_name   => 'PA',
8316                                    p_msg_name         => 'PA_FP_INV_PARAM_PASSED',
8317                                    p_token1           => 'PROCEDURENAME',
8318                                    p_value1           => l_module_name);
8319 
8320               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8321         END IF;
8322         -- version_info_rec type is null
8323         IF p_version_info_rec.x_project_id IS NULL THEN
8324               IF l_debug_mode = 'Y' THEN
8325                    pa_debug.g_err_stage := 'p_version_info_rec is passed as null';
8326                    pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8327               END IF;
8328               pa_utils.add_message(p_app_short_name   => 'PA',
8329                                    p_msg_name         => 'PA_FP_INV_PARAM_PASSED',
8330                                    p_token1           => 'PROCEDURENAME',
8331                                    p_value1           => l_module_name);
8332 
8333               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8334         END IF;
8335 
8336         -- if no data is present in the task id table
8337         IF NOT p_task_id_tbl.EXISTS(1) THEN
8338               IF l_debug_mode = 'Y' THEN
8339                    pa_debug.g_err_stage := 'task id table is passed as null';
8340                    pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8341               END IF;
8342               RETURN;
8343         END IF;
8344 
8345         --log1('----- STAGE PBL1.1-------');
8346         /*FOR zz IN 1..p_ra_id_tbl.COUNT LOOP
8347 
8348             log1('p_ra_id_tbl ('||zz||') is '||p_ra_id_tbl(zz));
8349             log1('p_planning_start_date_tbl ('||zz||') is '||p_planning_start_date_tbl(zz));
8350             log1('p_planning_end_date_tbl ('||zz||') is '||p_planning_end_date_tbl(zz));
8351 
8352         end loop;*/
8353 
8354         -- the length of all the input tables should be same
8355         IF p_task_id_tbl.COUNT <> p_rlm_id_tbl.COUNT OR
8356            p_task_id_tbl.COUNT <> p_ra_id_tbl.COUNT OR
8357            p_task_id_tbl.COUNT <> p_txn_currency_code_tbl.COUNT OR
8358            p_task_id_tbl.COUNT <> p_planning_start_date_tbl.COUNT OR
8359            p_task_id_tbl.COUNT <> p_planning_end_date_tbl.COUNT OR
8360            p_task_id_tbl.COUNT <> p_line_start_date_tbl.COUNT OR
8361            p_task_id_tbl.COUNT <> p_line_end_date_tbl.COUNT OR
8362            p_task_id_tbl.COUNT <> p_spread_curve_id_tbl.COUNT OR
8363            p_task_id_tbl.COUNT <> p_mfc_cost_type_id_tbl.COUNT OR
8364            p_task_id_tbl.COUNT <> p_etc_method_code_tbl.COUNT OR
8365            p_task_id_tbl.COUNT <> p_sp_fixed_date_tbl.COUNT OR
8366            p_task_id_tbl.COUNT <> p_res_class_code_tbl.COUNT OR
8367            p_task_id_tbl.COUNT <> p_rate_based_flag_tbl.COUNT OR
8368            p_task_id_tbl.COUNT <> p_rbs_elem_id_tbl.COUNT OR
8369            p_task_id_tbl.COUNT <> p_total_qty_tbl.COUNT OR
8370            p_task_id_tbl.COUNT <> p_total_raw_cost_tbl.COUNT OR
8371            p_task_id_tbl.COUNT <> p_total_burdened_cost_tbl.COUNT OR
8372            p_task_id_tbl.COUNT <> p_total_revenue_tbl.COUNT OR
8373            p_task_id_tbl.COUNT <> p_raw_cost_rate_tbl.COUNT OR
8374            p_task_id_tbl.COUNT <> p_burdened_cost_rate_tbl.COUNT OR
8375            p_task_id_tbl.COUNT <> p_bill_rate_tbl.COUNT OR
8376            p_task_id_tbl.COUNT <> p_line_start_date_tbl.COUNT OR
8377            p_task_id_tbl.COUNT <> p_line_end_date_tbl.COUNT OR
8378            p_task_id_tbl.COUNT <> p_proj_cost_rate_type_tbl.COUNT OR
8379            p_task_id_tbl.COUNT <> p_proj_cost_rate_date_type_tbl.COUNT OR
8380            p_task_id_tbl.COUNT <> p_proj_cost_rate_tbl.COUNT OR
8381            p_task_id_tbl.COUNT <> p_proj_cost_rate_date_tbl.COUNT OR
8382            p_task_id_tbl.COUNT <> p_proj_rev_rate_type_tbl.COUNT OR
8383            p_task_id_tbl.COUNT <> p_proj_rev_rate_date_type_tbl.COUNT OR
8384            p_task_id_tbl.COUNT <> p_proj_rev_rate_tbl.COUNT OR
8385            p_task_id_tbl.COUNT <> p_proj_rev_rate_date_tbl.COUNT OR
8386            p_task_id_tbl.COUNT <> p_pfunc_cost_rate_type_tbl.COUNT OR
8387            p_task_id_tbl.COUNT <> p_pfunc_cost_rate_date_typ_tbl.COUNT OR
8388            p_task_id_tbl.COUNT <> p_pfunc_cost_rate_tbl.COUNT OR
8389            p_task_id_tbl.COUNT <> p_pfunc_cost_rate_date_tbl.COUNT OR
8390            p_task_id_tbl.COUNT <> p_pfunc_rev_rate_type_tbl.COUNT OR
8391            p_task_id_tbl.COUNT <> p_pfunc_rev_rate_date_type_tbl.COUNT OR
8392            p_task_id_tbl.COUNT <> p_pfunc_rev_rate_tbl.COUNT OR
8393            p_task_id_tbl.COUNT <> p_pfunc_rev_rate_date_tbl.COUNT OR
8394            p_task_id_tbl.COUNT <> p_change_reason_code_tbl.COUNT OR
8395            p_task_id_tbl.COUNT <> p_description_tbl.COUNT OR
8396            p_task_id_tbl.COUNT <> p_delete_flag_tbl.COUNT THEN
8397 
8398             --log1(' 1 '||p_rlm_id_tbl.COUNT);
8399             --log1(' 2 '||p_ra_id_tbl.COUNT);
8400             --log1(' 3 '||p_txn_currency_code_tbl.COUNT);
8401             --log1(' 4 '||p_planning_start_date_tbl.COUNT);
8402             --log1(' 5 '||p_planning_end_date_tbl.COUNT);
8403             --log1(' 6 '||p_line_start_date_tbl.COUNT);
8404             --log1(' 7 '||p_line_end_date_tbl.COUNT);
8405             --log1(' 8 '||p_spread_curve_id_tbl.COUNT);
8406             --log1(' 9 '||p_mfc_cost_type_id_tbl.COUNT);
8407             --log1(' 10 '||p_etc_method_code_tbl.COUNT);
8408             --log1(' 11 '||p_sp_fixed_date_tbl.COUNT);
8409             --log1(' 12 '||p_total_qty_tbl.COUNT);
8410             --log1(' 13 '||p_total_raw_cost_tbl.COUNT);
8411             --log1(' 14 '||p_total_burdened_cost_tbl.COUNT);
8412             --log1(' 15 '||p_total_revenue_tbl.COUNT);
8413             --log1(' 16 '||p_raw_cost_rate_tbl.COUNT);
8414             --log1(' 17 '||p_burdened_cost_rate_tbl.COUNT);
8415             --log1(' 18 '||p_bill_rate_tbl.COUNT);
8416             --log1(' 19 '||p_line_start_date_tbl.COUNT);
8417             --log1(' 20 '||p_line_end_date_tbl.COUNT);
8418             --log1(' 21 '||p_proj_cost_rate_type_tbl.COUNT);
8419             --log1(' 22 '||p_proj_cost_rate_date_type_tbl.COUNT);
8420             --log1(' 23 '||p_proj_cost_rate_tbl.COUNT);
8421             --log1(' 24 '||p_proj_cost_rate_date_tbl.COUNT);
8422             --log1(' 25 '||p_proj_rev_rate_type_tbl.COUNT);
8423             --log1(' 26 '||p_proj_rev_rate_date_type_tbl.COUNT);
8424             --log1(' 27 '||p_proj_rev_rate_tbl.COUNT);
8425             --log1(' 28 '||p_proj_rev_rate_date_tbl.COUNT);
8426             --log1(' 29 '||p_pfunc_cost_rate_type_tbl.COUNT);
8427             --log1(' 30 '||p_pfunc_cost_rate_date_typ_tbl.COUNT);
8428             --log1(' 31 '||p_pfunc_cost_rate_tbl.COUNT);
8429             --log1(' 32 '||p_pfunc_cost_rate_date_tbl.COUNT);
8430             --log1(' 33 '||p_pfunc_rev_rate_type_tbl.COUNT);
8431             --log1(' 34 '||p_pfunc_rev_rate_date_type_tbl.COUNT);
8432             --log1(' 35 '||p_pfunc_rev_rate_tbl.COUNT);
8433             --log1(' 36 '||p_pfunc_rev_rate_date_tbl.COUNT);
8434             --log1(' 37 '||p_change_reason_code_tbl.COUNT);
8435             --log1(' 38 '||p_description_tbl.COUNT);
8436             --log1(' 39 '||p_delete_flag_tbl.COUNT );
8437 
8438               IF l_debug_mode = 'Y' THEN
8439                    pa_debug.g_err_stage := 'Required input tables are not equal in length';
8440                    pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8441               END IF;
8442               pa_utils.add_message(p_app_short_name   => 'PA',
8443                                    p_msg_name         => 'PA_FP_INV_PARAM_PASSED',
8444                                    p_token1           => 'PROCEDURENAME',
8445                                    p_value1           => l_module_name);
8446 
8447               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8448         END IF;
8449         --log1('----- STAGE PBL1.2-------');
8450 
8451         -- input parameters validation done
8452 
8453         -- checking for the context and if its non periodic context, then
8454         -- filtering out the records with delete flag <> Y
8455         IF l_debug_mode = 'Y' THEN
8456              pa_debug.g_err_stage := 'p_context is: ' || p_context;
8457              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8458         END IF;
8459 
8460         --log1('PBL 1 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8461         IF p_context = 'WEBADI_NON_PERIODIC' THEN
8462             FOR i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST LOOP
8463                   IF Nvl(p_delete_flag_tbl(i), 'N') <> 'Y' THEN
8464                         l_ra_id_tbl.extend(1);
8465                         l_ra_id_tbl(l_ra_id_tbl.COUNT)                                        := p_ra_id_tbl(i);
8466                         l_task_id_tbl.EXTEND(1);
8467                         l_task_id_tbl(l_task_id_tbl.COUNT)                                    := p_task_id_tbl(i);
8468                         l_rlm_id_tbl.EXTEND(1);
8469                         l_rlm_id_tbl(l_rlm_id_tbl.COUNT)                                      := p_rlm_id_tbl(i);
8470                         l_spread_curve_id_tbl.EXTEND(1);
8471                         l_spread_curve_id_tbl(l_spread_curve_id_tbl.COUNT)                    := p_spread_curve_id_tbl(i);
8472                         l_mfc_cost_type_id_tbl.EXTEND(1);
8473                         l_mfc_cost_type_id_tbl(l_mfc_cost_type_id_tbl.COUNT)                  := p_mfc_cost_type_id_tbl(i);
8474                         l_etc_method_code_tbl.EXTEND(1);
8475                         l_etc_method_code_tbl(l_etc_method_code_tbl.COUNT)                    := p_etc_method_code_tbl(i);
8476                         l_sp_fixed_date_tbl.EXTEND(1);
8477                         l_sp_fixed_date_tbl(l_sp_fixed_date_tbl.COUNT)                        := p_sp_fixed_date_tbl(i);
8478                         l_res_class_code_tbl.EXTEND(1);
8479                         l_res_class_code_tbl(l_res_class_code_tbl.COUNT)                      := p_res_class_code_tbl(i);
8480                         l_rate_based_flag_tbl.EXTEND(1);
8481                         l_rate_based_flag_tbl(l_rate_based_flag_tbl.COUNT)                    := p_rate_based_flag_tbl(i);
8482                         l_rbs_elem_id_tbl.EXTEND(1);
8483                         l_rbs_elem_id_tbl(l_rbs_elem_id_tbl.COUNT)                            := p_rbs_elem_id_tbl(i);
8484                         l_txn_currency_code_tbl.EXTEND(1);
8485                         l_txn_currency_code_tbl(l_txn_currency_code_tbl.COUNT)                := p_txn_currency_code_tbl(i);
8486                         l_planning_start_date_tbl.EXTEND(1);
8487                         l_planning_start_date_tbl(l_planning_start_date_tbl.COUNT)            := p_planning_start_date_tbl(i);
8488                         l_planning_end_date_tbl.EXTEND(1);
8489                         l_planning_end_date_tbl(l_planning_end_date_tbl.COUNT)                := p_planning_end_date_tbl(i);
8490                         l_total_qty_tbl.EXTEND(1);
8491                         l_total_qty_tbl(l_total_qty_tbl.COUNT)                                := p_total_qty_tbl(i);
8492                         l_total_raw_cost_tbl.EXTEND(1);
8493                         l_total_raw_cost_tbl(l_total_raw_cost_tbl.COUNT)                      := p_total_raw_cost_tbl(i);
8494                         l_total_burdened_cost_tbl.EXTEND(1);
8495                         l_total_burdened_cost_tbl(l_total_burdened_cost_tbl.COUNT)            := p_total_burdened_cost_tbl(i);
8496                         l_total_revenue_tbl.EXTEND(1);
8497                         l_total_revenue_tbl(l_total_revenue_tbl.COUNT)                        := p_total_revenue_tbl(i);
8498                         l_raw_cost_rate_tbl.EXTEND(1);
8499                         l_raw_cost_rate_tbl(l_raw_cost_rate_tbl.COUNT)                        := p_raw_cost_rate_tbl(i);
8500                         l_burdened_cost_rate_tbl.EXTEND(1);
8501                         l_burdened_cost_rate_tbl(l_burdened_cost_rate_tbl.COUNT)              := p_burdened_cost_rate_tbl(i);
8502                         l_bill_rate_tbl.EXTEND(1);
8503                         l_bill_rate_tbl(l_bill_rate_tbl.COUNT)                                := p_bill_rate_tbl(i);
8504                         l_proj_cost_rate_type_tbl.EXTEND(1);
8505                         l_proj_cost_rate_type_tbl(l_proj_cost_rate_type_tbl.COUNT)            := p_proj_cost_rate_type_tbl(i);
8506                         l_proj_cost_rate_date_type_tbl.EXTEND(1);
8507                         l_proj_cost_rate_date_type_tbl(l_proj_cost_rate_date_type_tbl.COUNT)  := p_proj_cost_rate_date_type_tbl(i);
8508                         l_proj_cost_rate_tbl.EXTEND(1);
8509                         l_proj_cost_rate_tbl(l_proj_cost_rate_tbl.COUNT)                      := p_proj_cost_rate_tbl(i);
8510                         l_proj_cost_rate_date_tbl.EXTEND(1);
8511                         l_proj_cost_rate_date_tbl(l_proj_cost_rate_date_tbl.COUNT)            := p_proj_cost_rate_date_tbl(i);
8512                         l_proj_rev_rate_type_tbl.EXTEND(1);
8513                         l_proj_rev_rate_type_tbl(l_proj_rev_rate_type_tbl.COUNT)              := p_proj_rev_rate_type_tbl(i);
8514                         l_proj_rev_rate_date_type_tbl.EXTEND(1);
8515                         l_proj_rev_rate_date_type_tbl(l_proj_rev_rate_date_type_tbl.COUNT)    := p_proj_rev_rate_date_type_tbl(i);
8516                         l_proj_rev_rate_tbl.EXTEND(1);
8517                         l_proj_rev_rate_tbl(l_proj_rev_rate_tbl.COUNT)                        := p_proj_rev_rate_tbl(i);
8518                         l_proj_rev_rate_date_tbl.EXTEND(1);
8519                         l_proj_rev_rate_date_tbl(l_proj_rev_rate_date_tbl.COUNT)              := p_proj_rev_rate_date_tbl(i);
8520                         l_pfunc_cost_rate_type_tbl.EXTEND(1);
8521                         l_pfunc_cost_rate_type_tbl(l_pfunc_cost_rate_type_tbl.COUNT)          := p_pfunc_cost_rate_type_tbl(i);
8522                         l_pfunc_cost_rate_date_typ_tbl.EXTEND(1);
8523                         l_pfunc_cost_rate_date_typ_tbl(l_pfunc_cost_rate_date_typ_tbl.COUNT)  := p_pfunc_cost_rate_date_typ_tbl(i);
8524                         l_pfunc_cost_rate_tbl.EXTEND(1);
8525                         l_pfunc_cost_rate_tbl(l_pfunc_cost_rate_tbl.COUNT)                    := p_pfunc_cost_rate_tbl(i);
8526                         l_pfunc_cost_rate_date_tbl.EXTEND(1);
8527                         l_pfunc_cost_rate_date_tbl(l_pfunc_cost_rate_date_tbl.COUNT)          := p_pfunc_cost_rate_date_tbl(i);
8528                         l_pfunc_rev_rate_type_tbl.EXTEND(1);
8529                         l_pfunc_rev_rate_type_tbl(l_pfunc_rev_rate_type_tbl.COUNT)            := p_pfunc_rev_rate_type_tbl(i);
8530                         l_pfunc_rev_rate_date_type_tbl.EXTEND(1);
8531                         l_pfunc_rev_rate_date_type_tbl(l_pfunc_rev_rate_date_type_tbl.COUNT)  := p_pfunc_rev_rate_date_type_tbl(i);
8532                         l_pfunc_rev_rate_tbl.EXTEND(1);
8533                         l_pfunc_rev_rate_tbl(l_pfunc_rev_rate_tbl.COUNT)                      := p_pfunc_rev_rate_tbl(i);
8534                         l_pfunc_rev_rate_date_tbl.EXTEND(1);
8535                         l_pfunc_rev_rate_date_tbl(l_pfunc_rev_rate_date_tbl.COUNT)            := p_pfunc_rev_rate_date_tbl(i);
8536                         l_change_reason_code_tbl.EXTEND(1);
8537                         l_change_reason_code_tbl(l_change_reason_code_tbl.COUNT)              := p_change_reason_code_tbl(i);
8538                         l_description_tbl.EXTEND(1);
8539                         l_description_tbl(l_description_tbl.COUNT)                            := p_description_tbl(i);
8540 
8541                   ELSIF Nvl(p_delete_flag_tbl(i), 'N') = 'Y' THEN
8542                         -- if the delete flag is Y then collecting them separately
8543                         l_df_ra_id_tbl.EXTEND(1);
8544                         l_df_ra_id_tbl(l_df_ra_id_tbl.COUNT)                                  := p_ra_id_tbl(i);
8545                         l_df_task_id_tbl.EXTEND(1);
8546                         l_df_task_id_tbl(l_df_task_id_tbl.COUNT)                              := p_task_id_tbl(i);
8547                         l_df_rlm_id_tbl.EXTEND(1);
8548                         l_df_rlm_id_tbl(l_df_rlm_id_tbl.COUNT)                                := p_rlm_id_tbl(i);
8549                         l_df_spread_curve_id_tbl.EXTEND(1);
8550                         l_df_spread_curve_id_tbl(l_df_spread_curve_id_tbl.COUNT)              := p_spread_curve_id_tbl(i);
8551                         l_df_mfc_cost_type_id_tbl.EXTEND(1);
8552                         l_df_mfc_cost_type_id_tbl(l_df_mfc_cost_type_id_tbl.COUNT)            := p_mfc_cost_type_id_tbl(i);
8553                         l_df_etc_method_code.EXTEND(1);
8554                         l_df_etc_method_code(l_df_etc_method_code.COUNT)                      := p_etc_method_code_tbl(i);
8555                         l_df_sp_fixed_date_tbl.EXTEND(1);
8556                         l_df_sp_fixed_date_tbl(l_df_sp_fixed_date_tbl.COUNT)                  := p_sp_fixed_date_tbl(i);
8557                         l_df_res_class_code_tbl.EXTEND(1);
8558                         l_df_res_class_code_tbl(l_df_res_class_code_tbl.COUNT)                := p_res_class_code_tbl(i);
8559                         l_df_rate_based_flag_tbl.EXTEND(1);
8560                         l_df_rate_based_flag_tbl(l_df_rate_based_flag_tbl.COUNT)              := p_rate_based_flag_tbl(i);
8561                         l_df_rbs_elem_id_tbl.EXTEND(1);
8562                         l_df_rbs_elem_id_tbl(l_df_rbs_elem_id_tbl.COUNT)                      := p_rbs_elem_id_tbl(i);
8563                         l_df_txn_currency_code_tbl.EXTEND(1);
8564                         l_df_txn_currency_code_tbl(l_df_txn_currency_code_tbl.COUNT)          := p_txn_currency_code_tbl(i);
8565                         l_df_planning_start_date_tbl.EXTEND(1);
8566                         l_df_planning_start_date_tbl(l_df_planning_start_date_tbl.COUNT)      := p_planning_start_date_tbl(i);
8567                         l_df_planning_end_date_tbl.EXTEND(1);
8568                         l_df_planning_end_date_tbl(l_df_planning_end_date_tbl.COUNT)          := p_planning_end_date_tbl(i);
8569                         l_df_total_qty_tbl.EXTEND(1);
8570                         l_df_total_qty_tbl(l_df_total_qty_tbl.COUNT)                          := p_total_qty_tbl(i);
8571                         l_df_total_raw_cost_tbl.EXTEND(1);
8572                         l_df_total_raw_cost_tbl(l_df_total_raw_cost_tbl.COUNT)                := p_total_raw_cost_tbl(i);
8573                         l_df_total_burdened_cost_tbl.EXTEND(1);
8574                         l_df_total_burdened_cost_tbl(l_df_total_burdened_cost_tbl.COUNT)      := p_total_burdened_cost_tbl(i);
8575                         l_df_total_revenue_tbl.EXTEND(1);
8576                         l_df_total_revenue_tbl(l_df_total_revenue_tbl.COUNT)                  := p_total_revenue_tbl(i);
8577                         l_df_raw_cost_rate_tbl.EXTEND(1);
8578                         l_df_raw_cost_rate_tbl(l_df_raw_cost_rate_tbl.COUNT)                  := p_raw_cost_rate_tbl(i);
8579                         l_df_burdened_cost_rate_tbl.EXTEND(1);
8580                         l_df_burdened_cost_rate_tbl(l_df_burdened_cost_rate_tbl.COUNT)        := p_burdened_cost_rate_tbl(i);
8581                         l_df_bill_rate_tbl.EXTEND(1);
8582                         l_df_bill_rate_tbl(l_df_bill_rate_tbl.COUNT)                          := p_bill_rate_tbl(i);
8583                         l_df_line_start_date_tbl.EXTEND(1);
8584                         l_df_line_start_date_tbl(l_df_line_start_date_tbl.COUNT)              := p_line_start_date_tbl(i);
8585                         l_df_line_end_date_tbl.EXTEND(1);
8586                         l_df_line_end_date_tbl(l_df_line_end_date_tbl.COUNT)                  := p_line_end_date_tbl(i);
8587                         l_df_pj_cost_rate_typ_tbl.EXTEND(1);
8588                         l_df_pj_cost_rate_typ_tbl(l_df_pj_cost_rate_typ_tbl.COUNT)            := p_proj_cost_rate_type_tbl(i);
8589                         l_df_pj_cost_rate_date_typ_tbl.EXTEND(1);
8590                         l_df_pj_cost_rate_date_typ_tbl(l_df_pj_cost_rate_date_typ_tbl.COUNT)  := p_proj_cost_rate_date_type_tbl(i);
8591                         l_df_pj_cost_rate_tbl.EXTEND(1);
8592                         l_df_pj_cost_rate_tbl(l_df_pj_cost_rate_tbl.COUNT)                    := p_proj_cost_rate_tbl(i);
8593                         l_df_pj_cost_rate_date_tbl.EXTEND(1);
8594                         l_df_pj_cost_rate_date_tbl(l_df_pj_cost_rate_date_tbl.COUNT)          := p_proj_cost_rate_date_tbl(i);
8595                         l_df_pj_rev_rate_typ_tbl.EXTEND(1);
8596                         l_df_pj_rev_rate_typ_tbl(l_df_pj_rev_rate_typ_tbl.COUNT)              := p_proj_rev_rate_type_tbl(i);
8597                         l_df_pj_rev_rate_date_typ_tbl.EXTEND(1);
8598                         l_df_pj_rev_rate_date_typ_tbl(l_df_pj_rev_rate_date_typ_tbl.COUNT)    := p_proj_rev_rate_date_type_tbl(i);
8599                         l_df_pj_rev_rate_tbl.EXTEND(1);
8600                         l_df_pj_rev_rate_tbl(l_df_pj_rev_rate_tbl.COUNT)                      := p_proj_rev_rate_tbl(i);
8601                         l_df_pj_rev_rate_date_tbl.EXTEND(1);
8602                         l_df_pj_rev_rate_date_tbl(l_df_pj_rev_rate_date_tbl.COUNT)            := p_proj_rev_rate_date_tbl(i);
8603                         l_df_pf_cost_rate_typ_tbl.EXTEND(1);
8604                         l_df_pf_cost_rate_typ_tbl(l_df_pf_cost_rate_typ_tbl.COUNT)            := p_pfunc_cost_rate_type_tbl(i);
8605                         l_df_pf_cost_rate_date_typ_tbl.EXTEND(1);
8606                         l_df_pf_cost_rate_date_typ_tbl(l_df_pf_cost_rate_date_typ_tbl.COUNT)  := p_pfunc_cost_rate_date_typ_tbl(i);
8607                         l_df_pf_cost_rate_tbl.EXTEND(1);
8608                         l_df_pf_cost_rate_tbl(l_df_pf_cost_rate_tbl.COUNT)                    := p_pfunc_cost_rate_tbl(i);
8609                         l_df_pf_cost_rate_date_tbl.EXTEND(1);
8610                         l_df_pf_cost_rate_date_tbl(l_df_pf_cost_rate_date_tbl.COUNT)          := p_pfunc_cost_rate_date_tbl(i);
8611                         l_df_pf_rev_rate_typ_tbl.EXTEND(1);
8612                         l_df_pf_rev_rate_typ_tbl(l_df_pf_rev_rate_typ_tbl.COUNT)              := p_pfunc_rev_rate_type_tbl(i);
8613                         l_df_pf_rev_rate_date_typ_tbl.EXTEND(1);
8614                         l_df_pf_rev_rate_date_typ_tbl(l_df_pf_rev_rate_date_typ_tbl.COUNT)    := p_pfunc_rev_rate_date_type_tbl(i);
8615                         l_df_pf_rev_rate_tbl.EXTEND(1);
8616                         l_df_pf_rev_rate_tbl(l_df_pf_rev_rate_tbl.COUNT)                      := p_pfunc_rev_rate_tbl(i);
8617                         l_df_pf_rev_rate_date_tbl.EXTEND(1);
8618                         l_df_pf_rev_rate_date_tbl(l_df_pf_rev_rate_date_tbl.COUNT)            := p_pfunc_rev_rate_date_tbl(i);
8619                         l_df_change_reason_code_tbl.EXTEND(1);
8620                         l_df_change_reason_code_tbl(l_df_change_reason_code_tbl.COUNT)        := p_change_reason_code_tbl(i);
8621                         l_df_description_tbl.EXTEND(1);
8622                         l_df_description_tbl(l_df_description_tbl.COUNT)                      := p_description_tbl(i);
8623                   END IF; -- delete_flag
8624             END LOOP;
8625         ELSE  -- periodic, considering all the records passed
8626               l_task_id_tbl                      := p_task_id_tbl;
8627               l_rlm_id_tbl                       := p_rlm_id_tbl;
8628               l_ra_id_tbl                        := p_ra_id_tbl;
8629               l_txn_currency_code_tbl            := p_txn_currency_code_tbl;
8630               l_planning_start_date_tbl          := p_planning_start_date_tbl;
8631               l_planning_end_date_tbl            := p_planning_end_date_tbl;
8632               l_spread_curve_id_tbl              := p_spread_curve_id_tbl;
8633               l_mfc_cost_type_id_tbl             := p_mfc_cost_type_id_tbl;
8634               l_etc_method_code_tbl              := p_etc_method_code_tbl;
8635               l_sp_fixed_date_tbl                := p_sp_fixed_date_tbl;
8636               l_res_class_code_tbl               := p_res_class_code_tbl;
8637               l_rate_based_flag_tbl              := p_rate_based_flag_tbl;
8638               l_rbs_elem_id_tbl                  := p_rbs_elem_id_tbl;
8639               l_total_qty_tbl                    := p_total_qty_tbl;
8640               l_total_raw_cost_tbl               := p_total_raw_cost_tbl;
8641               l_total_burdened_cost_tbl          := p_total_burdened_cost_tbl;
8642               l_total_revenue_tbl                := p_total_revenue_tbl;
8643               l_raw_cost_rate_tbl                := p_raw_cost_rate_tbl;
8644               l_burdened_cost_rate_tbl           := p_burdened_cost_rate_tbl;
8645               l_bill_rate_tbl                    := p_bill_rate_tbl;
8646               l_line_start_date_tbl              := p_line_start_date_tbl;
8647               l_line_end_date_tbl                := p_line_end_date_tbl;
8648               l_proj_cost_rate_type_tbl          := p_proj_cost_rate_type_tbl;
8649               l_proj_cost_rate_date_type_tbl     := p_proj_cost_rate_date_type_tbl;
8650               l_proj_cost_rate_tbl               := p_proj_cost_rate_tbl;
8651               l_proj_cost_rate_date_tbl          := p_proj_cost_rate_date_tbl;
8652               l_proj_rev_rate_type_tbl           := p_proj_rev_rate_type_tbl;
8653               l_proj_rev_rate_date_type_tbl      := p_proj_rev_rate_date_type_tbl;
8654               l_proj_rev_rate_tbl                := p_proj_rev_rate_tbl;
8655               l_proj_rev_rate_date_tbl           := p_proj_rev_rate_date_tbl;
8656               l_pfunc_cost_rate_type_tbl         := p_pfunc_cost_rate_type_tbl;
8657               l_pfunc_cost_rate_date_typ_tbl     := p_pfunc_cost_rate_date_typ_tbl;
8658               l_pfunc_cost_rate_tbl              := p_pfunc_cost_rate_tbl;
8659               l_pfunc_cost_rate_date_tbl         := p_pfunc_cost_rate_date_tbl;
8660               l_pfunc_rev_rate_type_tbl          := p_pfunc_rev_rate_type_tbl;
8661               l_pfunc_rev_rate_date_type_tbl     := p_pfunc_rev_rate_date_type_tbl;
8662               l_pfunc_rev_rate_tbl               := p_pfunc_rev_rate_tbl;
8663               l_pfunc_rev_rate_date_tbl          := p_pfunc_rev_rate_date_tbl;
8664               l_change_reason_code_tbl           := p_change_reason_code_tbl;
8665               l_description_tbl                  := p_description_tbl;
8666         END IF; -- p_context
8667         --log1('PBL 2 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8668 
8669         --log1('----- STAGE PBL1.3-------');
8670         IF l_debug_mode = 'Y' THEN
8671              pa_debug.g_err_stage := 'Input parameters are copied to local variables';
8672              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8673              pa_debug.g_err_stage := 'Checking for existing RAs';
8674              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8675         END IF;
8676 
8677         --log1('PBL 3 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8678         -- noting down the number of records passed
8679         l_total_rec_passed := p_task_id_tbl.COUNT;
8680         --log1('----- STAGE PBL1.4-------');
8681         FOR i IN 1..l_ra_id_tbl.COUNT LOOP
8682              -- checking for existing RAs
8683              -- firing the select only if it has not been done for the task-resource combination
8684              l_distinct_new_ra_index:= 'T'||l_task_id_tbl(i)||'R'||l_rlm_id_tbl(i);
8685              IF l_ra_id_tbl(i) IS NULL AND
8686                 (NOT l_distinct_new_ra_tbl.EXISTS(l_distinct_new_ra_index)) THEN
8687 
8688                    --log1('----- STAGE PBL2-------');
8689                    --Populate the l_distinct_new_ra_tbl for the index corresponding to the Task/Rlm
8690                    --with the value 0 to indicate the Task/Rlm has already been selected as input
8691                    --for insertion
8692                    l_distinct_new_ra_tbl(l_distinct_new_ra_index):=0;
8693                    IF l_task_id_tbl(i) <> 0 THEN
8694                            --Copy input params for add i.e derive the element version id,rlm id
8695                            -- selecting element_version_id
8696                            BEGIN
8697                                  SELECT  pev.element_version_id
8698                                  INTO    l_new_elem_ver_id
8699                                  FROM    pa_proj_element_versions pev
8700                                  WHERE   pev.proj_element_id = l_task_id_tbl(i)
8701                                  AND     pev.parent_structure_version_id = p_version_info_rec.x_project_structure_version_id;
8702                                  --log1('----- STAGE PBL5-------');
8703                            EXCEPTION
8704                                  WHEN NO_DATA_FOUND THEN
8705                                        --log1('----- STAGE PBL6-------');
8706                                        IF l_debug_mode = 'Y' THEN
8707                                             pa_debug.g_err_stage := 'No Elem Version Id found for the task id passed';
8708                                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8709                                        END IF;
8710                                        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8711                            END;
8712                    ELSE
8713                         -- for project level plannings
8714                         l_new_elem_ver_id := 0;
8715                    END IF;
8716                    --log1('----- STAGE PBL7-------');
8717                    -- populating the other required inputs for add_plan_txn
8718                    l_new_elem_ver_id_tbl.EXTEND(1);
8719                    l_new_elem_ver_id_tbl(l_new_elem_ver_id_tbl.COUNT) := l_new_elem_ver_id;
8720                    l_new_rlm_id_tbl.EXTEND(1);
8721                    l_new_rlm_id_tbl(l_new_rlm_id_tbl.COUNT) := l_rlm_id_tbl(i);
8722                    l_new_planning_start_date_tbl.EXTEND(1);
8723                    l_new_planning_start_date_tbl(l_new_planning_start_date_tbl.COUNT) := l_planning_start_date_tbl(i);
8724                    l_new_planning_end_date_tbl.EXTEND(1);
8725                    l_new_planning_end_date_tbl(l_new_planning_end_date_tbl.COUNT) := l_planning_end_date_tbl(i);
8726 
8727                    --log1('----- STAGE PBL9-------');
8728              END IF; /* if RA is null at index */
8729              --log1('----- STAGE PBL11-------');
8730         END LOOP;
8731         --log1('PBL 4 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8732         --log1('PBL 4.1 '||l_new_elem_ver_id_tbl.COUNT );
8733         --log1('----- STAGE PBL11.7------- || '||l_new_elem_ver_id_tbl.COUNT);
8734         IF l_new_elem_ver_id_tbl.COUNT > 0 THEN
8735               -- there are new task-resource records to be inserted
8736               IF l_debug_mode = 'Y' THEN
8737                     pa_debug.g_err_stage := 'Inputs prepared for add_plan_txn and calling';
8738                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8739               END IF;
8740               -- Calling add_planning_transaction for those records for which RA doesnot exists
8741 
8742               --Note down the current value of pa_resource_assignments_s.nextval
8743               BEGIN
8744                     --log1('----- STAGE PBL15-------');
8745                     SELECT  pa_resource_assignments_s.nextval
8746                     INTO    l_curr_ra_id_seq
8747                     FROM    DUAL
8748                     WHERE   1 = 1;
8749                     --log1('----- STAGE PBL16-------');
8750               EXCEPTION
8751                     WHEN OTHERS THEN
8752                           IF l_debug_mode = 'Y' THEN
8753                                pa_debug.g_err_stage := 'Error while getting RA Id sequence';
8754                                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8755                           END IF;
8756                           RAISE;
8757               END;
8758               --log1('----- STAGE PBL17-------');
8759               --log1('----- STAGE PBL17.1------- '||l_new_elem_ver_id_tbl.count);
8760               --log1('----- STAGE PBL17.2------- '||l_new_rlm_id_tbl.count);
8761               --log1('----- STAGE PBL17.3------- '||p_version_info_rec.x_plan_class_code);
8762               -- calling  add_planning_transaction
8763               PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions
8764                       (p_context                      => p_version_info_rec.x_plan_class_code
8765                       ,p_one_to_one_mapping_flag      => 'Y'
8766                       ,p_calling_module               => 'WEBADI'
8767                       ,p_project_id                   => p_version_info_rec.x_project_id
8768                       ,p_budget_version_id            => p_budget_version_id
8769                       ,p_task_elem_version_id_tbl     => l_new_elem_ver_id_tbl
8770                       ,p_resource_list_member_id_tbl  => l_new_rlm_id_tbl
8771                       ,p_planning_start_date_tbl      => l_new_planning_start_date_tbl
8772                       ,p_planning_end_date_tbl        => l_new_planning_end_date_tbl
8773                       ,x_return_status                => x_return_status
8774                       ,x_msg_data                     => l_msg_data
8775                       ,x_msg_count                    => l_msg_count);
8776 
8777               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8778                        IF l_debug_mode = 'Y' THEN
8779                              pa_debug.g_err_stage:='Called API pa_fp_planning_transaction_pub.add_planning_transaction api returned error';
8780                              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8781                        END IF;
8782                        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8783               END IF;
8784               IF l_debug_mode = 'Y' THEN
8785                     pa_debug.g_err_stage := 'Add_planning_transaction called';
8786                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8787               END IF;
8788         END IF; -- new RAs
8789         --log1('PBL 5 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8790 
8791         --log1('----- STAGE PBL11.8------- || '||l_ra_id_tbl.COUNT);
8792 
8793         FOR i IN 1 .. l_ra_id_tbl.COUNT LOOP
8794             IF l_ra_id_tbl(i) IS NULL THEN
8795                   -- collect all the new RA ids for that task-resource
8796                   BEGIN
8797                         SELECT pra.resource_assignment_id,
8798                                pra.rbs_element_id,
8799                                pra.resource_class_code,
8800                                pra.rate_based_flag
8801                         INTO   l_new_ra_id,
8802                                l_new_res_asg_rbs_elem_id,
8803                                l_new_res_asg_res_class_code,
8804                                l_new_res_asg_rate_based_flag
8805                         FROM   pa_resource_assignments pra
8806                         WHERE  pra.budget_version_id = p_budget_version_id
8807                         AND    pra.project_id = p_version_info_rec.x_project_id
8808                         AND    pra.task_id = l_task_id_tbl(i)
8809                         AND    pra.resource_list_member_id = l_rlm_id_tbl(i)
8810                         AND    pra.project_assignment_id = -1;
8811 
8812                         -- stamping the value of new RA id over null in p_ra_id_tbl
8813                         l_ra_id_tbl(i) := l_new_ra_id;
8814 
8815                   EXCEPTION
8816                         WHEN NO_DATA_FOUND THEN
8817                               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8818                   END;
8819             END IF;
8820         END LOOP;
8821         --log1('PBL 6 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8822         --log1('PBL 7 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8823 
8824         -- Deleting records from pa_budget_lines, for the records with delete_flag as Y
8825         -- and if it is non periodic layout
8826         -- Bug 4424457.  Moved the delete statement before calculate. This is done for the following reason
8827         ----Consider a case where RA has currencies C1 and C2 and delete flag is marked for C1. If calculate API
8828         ----changes C2 to C1 and if delete is executed for RA and C1 after call to calculate API then amounts
8829         ----entered against C2 by customer will not be honoured and this is not intended.
8830         IF p_context = 'WEBADI_NON_PERIODIC' THEN
8831             -- checking if there is any reord with delete_flag = Y
8832             IF l_df_ra_id_tbl.COUNT > 0 THEN
8833                      IF l_debug_mode = 'Y' THEN
8834                           pa_debug.g_err_stage := 'Deleting from pa_budget_lines for the records with delete_flag = Y';
8835                           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8836                      END IF;
8837                       --log1('PBL 11 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8838 
8839                      /* Bug 5144013 : Modified the logic so that the attributes of the transaction
8840                      for which delete flag is set as 'Y' in Excel will be populated in pa_fp_rollup_tmp as
8841                      deletion of those planning transactions are taken care by delete_planning_transaction api.
8842                      This is done as part of merging the MRUP3 changes done in 11i into R12.
8843                      */
8844                      FOR i IN 1..l_df_ra_id_tbl.COUNT LOOP
8845                           l_bl_del_flag_ra_id_tbl.extend();
8846                           l_bl_del_flag_st_dt_tbl.extend();
8847                           l_bl_del_flag_en_dt_tbl.extend();
8848                           l_bl_del_flag_txn_curr_tbl.extend();
8849                           l_bl_del_flag_txn_rc_tbl.extend();
8850                           l_bl_del_flag_txn_bc_tbl.extend();
8851                           l_bl_del_flag_txn_rev_tbl.extend();
8852                           l_bl_del_flag_pf_curr_tbl.extend();
8853                           l_bl_del_flag_pf_cr_typ_tbl.extend();
8854                           l_bl_del_flag_pf_cr_dt_typ_tbl.extend();
8855                           l_bl_del_flag_pf_cexc_rate_tbl.extend();
8856                           l_bl_del_flag_pf_cr_date_tbl.extend();
8857                           l_bl_del_flag_pf_rr_typ_tbl.extend();
8858                           l_bl_del_flag_pf_rr_dt_typ_tbl.extend();
8859                           l_bl_del_flag_pf_rexc_rate_tbl.extend();
8860                           l_bl_del_flag_pf_rr_date_tbl.extend();
8861                           l_bl_del_flag_pj_curr_tbl.extend();
8862                           l_bl_del_flag_pj_cr_typ_tbl.extend();
8863                           l_bl_del_flag_pj_cr_dt_typ_tbl.extend();
8864                           l_bl_del_flag_pj_cexc_rate_tbl.extend();
8865                           l_bl_del_flag_pj_cr_date_tbl.extend();
8866                           l_bl_del_flag_pj_rr_typ_tbl.extend();
8867                           l_bl_del_flag_pj_rr_dt_typ_tbl.extend();
8868                           l_bl_del_flag_pj_rexc_rate_tbl.extend();
8869                           l_bl_del_flag_pj_rr_date_tbl.extend();
8870                           l_bl_del_flag_bl_id_tbl.extend();
8871                           l_bl_del_flag_per_name_tbl.extend();
8872                           l_bl_del_flag_pj_raw_cost_tbl.extend();
8873                           l_bl_del_flag_pj_burd_cost_tbl.extend();
8874                           l_bl_del_flag_pj_rev_tbl.extend();
8875                           l_bl_del_flag_raw_cost_tbl.extend();
8876                           l_bl_del_flag_burd_cost_tbl.extend();
8877                           l_bl_del_flag_rev_tbl.extend();
8878                           l_bl_del_flag_qty_tbl.extend();
8879                           l_bl_del_flag_c_rej_code_tbl.extend();
8880                           l_bl_del_flag_b_rej_code_tbl.extend();
8881                           l_bl_del_flag_r_rej_code_tbl.extend();
8882                           l_bl_del_flag_o_rej_code_tbl.extend();
8883                           l_bl_del_fg_pc_cnv_rej_cd_tbl.extend();
8884                           l_bl_del_fg_pf_cnv_rej_cd_tbl.extend();
8885                           SELECT
8886                                  pbl.resource_assignment_id,
8887                                  pbl.start_date,
8888                                  pbl.end_date,
8889                                  pbl.txn_currency_code,
8890                                  pbl.txn_raw_cost,
8891                                  pbl.txn_burdened_cost,
8892                                  pbl.txn_revenue,
8893                                  pbl.projfunc_currency_code,
8894                                  pbl.projfunc_cost_rate_type,
8895                                  pbl.projfunc_cost_rate_date_type,
8896                                  pbl.projfunc_cost_exchange_rate,
8897                                  pbl.projfunc_cost_rate_date,
8898                                  pbl.projfunc_rev_rate_type,
8899                                  pbl.projfunc_rev_rate_date_type,
8900                                  pbl.projfunc_rev_exchange_rate,
8901                                  pbl.projfunc_rev_rate_date,
8902                                  pbl.project_currency_code,
8903                                  pbl.project_cost_rate_type,
8904                                  pbl.project_cost_rate_date_type,
8905                                  pbl.project_cost_exchange_rate,
8906                                  pbl.project_cost_rate_date,
8907                                  pbl.project_rev_rate_type,
8908                                  pbl.project_rev_rate_date_type,
8909                                  pbl.project_rev_exchange_rate,
8910                                  pbl.project_rev_rate_date,
8911                                  pbl.budget_line_id,
8912                                  pbl.period_name,
8913                                  pbl.project_raw_cost,
8914                                  pbl.project_burdened_cost,
8915                                  pbl.project_revenue,
8916                                  pbl.raw_cost,
8917                                  pbl.burdened_cost,
8918                                  pbl.revenue,
8919                                  pbl.quantity,
8920                                  pbl.cost_rejection_code,
8921                                  pbl.burden_rejection_code,
8922                                  pbl.revenue_rejection_code,
8923                                  pbl.other_rejection_code,
8924                                  pbl.pc_cur_conv_rejection_code,
8925                                  pbl.pfc_cur_conv_rejection_code
8926                           INTO
8927                                  l_bl_del_flag_ra_id_tbl(i),
8928                                  l_bl_del_flag_st_dt_tbl(i),
8929                                  l_bl_del_flag_en_dt_tbl(i),
8930                                  l_bl_del_flag_txn_curr_tbl(i),
8931                                  l_bl_del_flag_txn_rc_tbl(i),
8932                                  l_bl_del_flag_txn_bc_tbl(i),
8933                                  l_bl_del_flag_txn_rev_tbl(i),
8934                                  l_bl_del_flag_pf_curr_tbl(i),
8935                                  l_bl_del_flag_pf_cr_typ_tbl(i),
8936                                  l_bl_del_flag_pf_cr_dt_typ_tbl(i),
8937                                  l_bl_del_flag_pf_cexc_rate_tbl(i),
8938                                  l_bl_del_flag_pf_cr_date_tbl(i),
8939                                  l_bl_del_flag_pf_rr_typ_tbl(i),
8940                                  l_bl_del_flag_pf_rr_dt_typ_tbl(i),
8941                                  l_bl_del_flag_pf_rexc_rate_tbl(i),
8942                                  l_bl_del_flag_pf_rr_date_tbl(i),
8943                                  l_bl_del_flag_pj_curr_tbl(i),
8944                                  l_bl_del_flag_pj_cr_typ_tbl(i),
8945                                  l_bl_del_flag_pj_cr_dt_typ_tbl(i),
8946                                  l_bl_del_flag_pj_cexc_rate_tbl(i),
8947                                  l_bl_del_flag_pj_cr_date_tbl(i),
8948                                  l_bl_del_flag_pj_rr_typ_tbl(i),
8949                                  l_bl_del_flag_pj_rr_dt_typ_tbl(i),
8950                                  l_bl_del_flag_pj_rexc_rate_tbl(i),
8951                                  l_bl_del_flag_pj_rr_date_tbl(i),
8952                                  l_bl_del_flag_bl_id_tbl(i),
8953                                  l_bl_del_flag_per_name_tbl(i),
8954                                  l_bl_del_flag_pj_raw_cost_tbl(i),
8955                                  l_bl_del_flag_pj_burd_cost_tbl(i),
8956                                  l_bl_del_flag_pj_rev_tbl(i),
8957                                  l_bl_del_flag_raw_cost_tbl(i),
8958                                  l_bl_del_flag_burd_cost_tbl(i),
8959                                  l_bl_del_flag_rev_tbl(i),
8960                                  l_bl_del_flag_qty_tbl(i),
8961                                  l_bl_del_flag_c_rej_code_tbl(i),
8962                                  l_bl_del_flag_b_rej_code_tbl(i),
8963                                  l_bl_del_flag_r_rej_code_tbl(i),
8964                                  l_bl_del_flag_o_rej_code_tbl(i),
8965                                  l_bl_del_fg_pc_cnv_rej_cd_tbl(i),
8966                                  l_bl_del_fg_pf_cnv_rej_cd_tbl(i)
8967                           FROM   pa_budget_lines pbl
8968                           WHERE  pbl.resource_assignment_id = l_df_ra_id_tbl(i)
8969                           AND    pbl.txn_currency_code = l_df_txn_currency_code_tbl(i);
8970                      END LOOP;
8971 
8972                      /*Bug 5144013: Calling delete_planning_transactions api to delete the planning transaction
8973                       from pa_budget_lines and from new entity when delete flag is set as 'Y' in Excel for a
8974                       planning transaction. This is done as part of merging the MRUP3 changes done in 11i into R12.
8975                       */
8976                      IF l_debug_mode = 'Y' THEN
8977                           pa_debug.g_err_stage := 'Before Calling pa_fp_planning_transaction_pub.delete_planning_transactions';
8978                           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8979                      END IF;
8980                          pa_fp_planning_transaction_pub.delete_planning_transactions(
8981                                                         p_context                  => 'BUDGET'
8982                                                        ,p_task_or_res              => 'ASSIGNMENT'
8983                                                        ,p_resource_assignment_tbl  => l_df_ra_id_tbl
8984                                                        ,p_currency_code_tbl        => l_df_txn_currency_code_tbl
8985                                                        ,x_return_status            => x_return_status
8986                                                        ,x_msg_count                => l_msg_count
8987                                                        ,x_msg_data                 => l_msg_data);
8988                      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8989                          IF l_debug_mode = 'Y' THEN
8990                              pa_debug.g_err_stage:='Called API pa_fp_planning_transactions_pub.delete_planning_transactions returned error';
8991                              pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8992                          END IF;
8993                          RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8994                      END IF;
8995                      IF l_debug_mode = 'Y' THEN
8996                           pa_debug.g_err_stage := 'After Calling pa_fp_planning_transaction_pub.delete_planning_transactions';
8997                           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8998                      END IF;
8999 
9000                      IF l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
9001                         IF l_debug_mode = 'Y' THEN
9002                             pa_debug.g_err_stage := l_bl_del_flag_ra_id_tbl.COUNT || ' records deleted from pa_budget_lines';
9003                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9004                             pa_debug.g_err_stage := 'Inserting these records into pa_fp_rollup_tmp';
9005                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9006                         END IF;
9007 
9008                         --log1('Preparing ra attr tbls for rollup tmp ins');
9009 
9010                      END IF;
9011 
9012             END IF;--IF l_df_ra_id_tbl.COUNT > 0 THEN
9013 
9014         END IF;--IF p_context = 'WEBADI_NON_PERIODIC' THEN
9015 
9016 
9017         -- calling calculate api for budget line context for all the elligible records
9018         IF l_ra_id_tbl.COUNT > 0 THEN
9019               IF l_debug_mode = 'Y' THEN
9020                   pa_debug.g_err_stage := 'Calling calculate to spread amount';
9021                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9022               END IF;
9023               IF p_context = 'WEBADI_PERIODIC' THEN
9024                     l_calc_calling_context := PA_FP_CONSTANTS_PKG.G_CALC_API_BUDGET_LINE;
9025               ELSIF p_context = 'WEBADI_NON_PERIODIC' THEN
9026                          l_line_start_date_tbl := SYSTEM.pa_date_tbl_type();
9027                          l_line_end_date_tbl   := SYSTEM.pa_date_tbl_type();
9028                          l_calc_calling_context := PA_FP_CONSTANTS_PKG.G_CALC_API_RESOURCE_CONTEXT;
9029               END IF;
9030 
9031               IF l_debug_mode = 'Y' THEN
9032                   pa_debug.g_err_stage := 'Calling context' || l_calc_calling_context;
9033                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9034               END IF;
9035 
9036               --log1('PBL 8 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9037               --log1('Before callling calc in pbl');
9038              /* log1('l_calc_calling_context '||l_calc_calling_context);
9039               FOR zz IN 1..l_ra_id_tbl.COUNT LOOP
9040 
9041                   log1('l_ra_id_tbl('||zz||') is '||l_ra_id_tbl(zz));
9042                   log1('l_txn_currency_code_tbl('||zz||') is '||l_txn_currency_code_tbl(zz));
9043                   IF l_total_qty_tbl.COUNT >0 THEN
9044                       log1('l_total_qty_tbl('||zz||') is '||l_total_qty_tbl(zz));
9045                   END IF;
9046                   IF l_total_raw_cost_tbl.COUNT >0 THEN
9047                       log1('l_total_raw_cost_tbl('||zz||') is '||l_total_raw_cost_tbl(zz));
9048                   END IF;
9049                   IF l_total_burdened_cost_tbl.COUNT > 0 THEN
9050                       log1('l_total_burdened_cost_tbl('||zz||') is '||l_total_burdened_cost_tbl(zz));
9051                   END IF;
9052                   IF l_total_revenue_tbl.COUNT>0 THEN
9053                       log1('l_total_revenue_tbl('||zz||') is '||l_total_revenue_tbl(zz));
9054                   END IF;
9055                   IF l_raw_cost_rate_tbl.COUNT>0 THEN
9056                       log1('l_raw_cost_rate_tbl('||zz||') is '||l_raw_cost_rate_tbl(zz));
9057                   END IF;
9058                   IF l_burdened_cost_rate_tbl.COUNT>0 THEN
9059                       log1('l_burdened_cost_rate_tbl('||zz||') is '||l_burdened_cost_rate_tbl(zz));
9060                   END IF;
9061                   IF l_bill_rate_tbl.COUNT>0 THEN
9062                       log1('l_bill_rate_tbl('||zz||') is '||l_bill_rate_tbl(zz));
9063                   END IF;
9064                   IF l_line_start_date_tbl.COUNT>0 THEN
9065                       log1('l_line_start_date_tbl('||zz||') is '||l_line_start_date_tbl(zz));
9066                   END IF;
9067                   IF l_line_end_date_tbl.COUNT>0 THEN
9068                       log1('l_line_end_date_tbl('||zz||') is '||l_line_end_date_tbl(zz));
9069                   END IF;
9070 
9071               END LOOP;*/
9072               --log1('PBL 9 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9073               PA_FP_CALC_PLAN_PKG.calculate(
9074                   p_project_id                 =>   p_version_info_rec.x_project_id
9075                  ,p_budget_version_id          =>   p_budget_version_id
9076                  ,p_rollup_required_flag       =>   'N'
9077                  ,p_source_context             =>   l_calc_calling_context
9078                  ,p_conv_rates_required_flag   =>   'N'
9079                  ,p_resource_assignment_tab    =>   l_ra_id_tbl
9080                  ,p_txn_currency_code_tab      =>   l_txn_currency_code_tbl
9081                  ,p_total_qty_tab              =>   l_total_qty_tbl
9082                  ,p_total_raw_cost_tab         =>   l_total_raw_cost_tbl
9083                  ,p_total_burdened_cost_tab    =>   l_total_burdened_cost_tbl
9084                  ,p_total_revenue_tab          =>   l_total_revenue_tbl
9085                  ,p_rw_cost_rate_override_tab  =>   l_raw_cost_rate_tbl
9086                  ,p_b_cost_rate_override_tab   =>   l_burdened_cost_rate_tbl
9087                  ,p_bill_rate_override_tab     =>   l_bill_rate_tbl
9088                  ,p_line_start_date_tab        =>   l_line_start_date_tbl
9089                  ,p_line_end_date_tab          =>   l_line_end_date_tbl
9090                  ,p_raTxn_rollup_api_call_flag =>   'N'
9091                  ,x_return_status              =>   x_return_status
9092                  ,x_msg_count                  =>   l_msg_count
9093                  ,x_msg_data                   =>   l_msg_data);
9094               --log1('PBL 10 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9095                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9096 
9097                      IF l_debug_mode = 'Y' THEN
9098                          pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate returned error';
9099                          pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
9100                      END IF;
9101                      RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9102                  END IF;
9103 
9104                  --Bug 4424457. Find out if there are budget lines that are processed by calculate API
9105                  BEGIN
9106                     SELECT 'Y'
9107                     INTO   l_bls_proccessed_flag
9108                     FROM    DUAL
9109                     WHERE   EXISTS (SELECT 1
9110                                     FROM   pa_fp_rollup_tmp);
9111                  EXCEPTION
9112                  WHEN NO_DATA_FOUND THEN
9113                     l_bls_proccessed_flag:='N';
9114                  END;
9115 
9116         END IF;  -- if there are data in input tables prepared
9117 
9118         -- Deleting records from pa_budget_lines, for the records with delete_flag as Y
9119         -- and if it is non periodic layout
9120         IF p_context = 'WEBADI_NON_PERIODIC' THEN
9121             -- checking if there is any reord with delete_flag = Y
9122             IF l_df_ra_id_tbl.COUNT > 0 THEN
9123                           --log1('PBL 12 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9124                           IF l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
9125                                IF l_debug_mode = 'Y' THEN
9126                                    pa_debug.g_err_stage := l_bl_del_flag_ra_id_tbl.COUNT || ' records deleted from pa_budget_lines';
9127                                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9128                                    pa_debug.g_err_stage := 'Inserting these records into pa_fp_rollup_tmp';
9129                                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9130                                END IF;
9131 
9132                                --log1('Preparing ra attr tbls for rollup tmp ins');
9133 
9134                                -- inserting these deleted records into pa_fp_rollup_tmp with delete flag as Y
9135                                FORALL i IN l_bl_del_flag_ra_id_tbl.FIRST .. l_bl_del_flag_ra_id_tbl.LAST
9136                                        INSERT INTO
9137                                        pa_fp_rollup_tmp
9138                                            (resource_assignment_id,
9139                                             start_date,
9140                                             end_date,
9141                                             txn_currency_code,
9142                                             txn_raw_cost,
9143                                             txn_burdened_cost,
9144                                             txn_revenue,
9145                                             projfunc_currency_code,
9146                                             projfunc_cost_rate_type,
9147                                             projfunc_cost_rate_date_type,
9148                                             projfunc_cost_exchange_rate,
9149                                             projfunc_cost_rate_date,
9150                                             projfunc_rev_rate_type,
9151                                             projfunc_rev_rate_date_type,
9152                                             projfunc_rev_exchange_rate,
9153                                             projfunc_rev_rate_date,
9154                                             project_currency_code,
9155                                             project_cost_rate_type,
9156                                             project_cost_rate_date_type,
9157                                             project_cost_exchange_rate,
9158                                             project_cost_rate_date,
9159                                             project_rev_rate_type,
9160                                             project_rev_rate_date_type,
9161                                             project_rev_exchange_rate,
9162                                             project_rev_rate_date,
9163                                             budget_line_id,
9164                                             delete_flag,
9165                                             period_name,
9166                                             project_raw_cost,
9167                                             project_burdened_cost,
9168                                             project_revenue,
9169                                             projfunc_raw_cost,
9170                                             projfunc_burdened_cost,
9171                                             projfunc_revenue,
9172                                             quantity,
9173                                             cost_rejection_code,
9174                                             burden_rejection_code,
9175                                             revenue_rejection_code,
9176                                             pc_cur_conv_rejection_code,
9177                                             pfc_cur_conv_rejection_code,
9178                                             system_reference4) -- for other_rejection_code
9179                                        VALUES
9180                                            (l_bl_del_flag_ra_id_tbl(i),
9181                                             l_bl_del_flag_st_dt_tbl(i),
9182                                             l_bl_del_flag_en_dt_tbl(i),
9183                                             l_bl_del_flag_txn_curr_tbl(i),
9184                                             l_bl_del_flag_txn_rc_tbl(i),
9185                                             l_bl_del_flag_txn_bc_tbl(i),
9186                                             l_bl_del_flag_txn_rev_tbl(i),
9187                                             l_bl_del_flag_pf_curr_tbl(i),
9188                                             l_bl_del_flag_pf_cr_typ_tbl(i),
9189                                             l_bl_del_flag_pf_cr_dt_typ_tbl(i),
9190                                             l_bl_del_flag_pf_cexc_rate_tbl(i),
9191                                             l_bl_del_flag_pf_cr_date_tbl(i),
9192                                             l_bl_del_flag_pf_rr_typ_tbl(i),
9193                                             l_bl_del_flag_pf_rr_dt_typ_tbl(i),
9194                                             l_bl_del_flag_pf_rexc_rate_tbl(i),
9195                                             l_bl_del_flag_pf_rr_date_tbl(i),
9196                                             l_bl_del_flag_pj_curr_tbl(i),
9197                                             l_bl_del_flag_pj_cr_typ_tbl(i),
9198                                             l_bl_del_flag_pj_cr_dt_typ_tbl(i),
9199                                             l_bl_del_flag_pj_cexc_rate_tbl(i),
9200                                             l_bl_del_flag_pj_cr_date_tbl(i),
9201                                             l_bl_del_flag_pj_rr_typ_tbl(i),
9202                                             l_bl_del_flag_pj_rr_dt_typ_tbl(i),
9203                                             l_bl_del_flag_pj_rexc_rate_tbl(i),
9204                                             l_bl_del_flag_pj_rr_date_tbl(i),
9205                                             l_bl_del_flag_bl_id_tbl(i),
9206                                             'Y',  -- delete_flag
9207                                             l_bl_del_flag_per_name_tbl(i),
9208                                             l_bl_del_flag_pj_raw_cost_tbl(i),
9209                                             l_bl_del_flag_pj_burd_cost_tbl(i),
9210                                             l_bl_del_flag_pj_rev_tbl(i),
9211                                             l_bl_del_flag_raw_cost_tbl(i),
9212                                             l_bl_del_flag_burd_cost_tbl(i),
9213                                             l_bl_del_flag_rev_tbl(i),
9214                                             l_bl_del_flag_qty_tbl(i),
9215                                             l_bl_del_flag_c_rej_code_tbl(i),
9216                                             l_bl_del_flag_b_rej_code_tbl(i),
9217                                             l_bl_del_flag_r_rej_code_tbl(i),
9218                                             l_bl_del_fg_pc_cnv_rej_cd_tbl(i),
9219                                             l_bl_del_fg_pf_cnv_rej_cd_tbl(i),
9220                                             l_bl_del_flag_o_rej_code_tbl(i));
9221                                --log1('PBL 14 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9222                                IF l_debug_mode = 'Y' THEN
9223                                    pa_debug.g_err_stage := 'records inserted into pa_fp_rollup_tmp';
9224                                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9225                                END IF;
9226                           ELSE
9227                                -- no records deleted from pa_budget_lines
9228                                IF l_debug_mode = 'Y' THEN
9229                                    pa_debug.g_err_stage := 'No records deleted from pa_budget_lines';
9230                                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9231                                END IF;
9232                           END IF;
9233             END IF;  -- records with delete_flag
9234 
9235             -- releasing the memory occupied by deleting the temporary pl/sql table types
9236             l_df_task_id_tbl.DELETE;
9237             l_df_rlm_id_tbl.DELETE;
9238             l_df_spread_curve_id_tbl.DELETE;
9239             l_df_mfc_cost_type_id_tbl.DELETE;
9240             l_df_etc_method_code.DELETE;
9241             l_df_sp_fixed_date_tbl.DELETE;
9242             l_df_txn_currency_code_tbl.DELETE;
9243             l_df_planning_start_date_tbl.DELETE;
9244             l_df_planning_end_date_tbl.DELETE;
9245             l_df_total_qty_tbl.DELETE;
9246             l_df_total_raw_cost_tbl.DELETE;
9247             l_df_total_burdened_cost_tbl.DELETE;
9248             l_df_total_revenue_tbl.DELETE;
9249             l_df_raw_cost_rate_tbl.DELETE;
9250             l_df_burdened_cost_rate_tbl.DELETE;
9251             l_df_bill_rate_tbl.DELETE;
9252             l_df_line_start_date_tbl.DELETE;
9253             l_df_line_end_date_tbl.DELETE;
9254             l_df_pj_cost_rate_typ_tbl.DELETE;
9255             l_df_pj_cost_rate_date_typ_tbl.DELETE;
9256             l_df_pj_cost_rate_tbl.DELETE;
9257             l_df_pj_cost_rate_date_tbl.DELETE;
9258             l_df_pj_rev_rate_typ_tbl.DELETE;
9259             l_df_pj_rev_rate_date_typ_tbl.DELETE;
9260             l_df_pj_rev_rate_tbl.DELETE;
9261             l_df_pj_rev_rate_date_tbl.DELETE;
9262             l_df_pf_cost_rate_typ_tbl.DELETE;
9263             l_df_pf_cost_rate_date_typ_tbl.DELETE;
9264             l_df_pf_cost_rate_tbl.DELETE;
9265             l_df_pf_cost_rate_date_tbl.DELETE;
9266             l_df_pf_rev_rate_typ_tbl.DELETE;
9267             l_df_pf_rev_rate_date_typ_tbl.DELETE;
9268             l_df_pf_rev_rate_tbl.DELETE;
9269             l_df_pf_rev_rate_date_tbl.DELETE;
9270             l_df_change_reason_code_tbl.DELETE;
9271             l_df_description_tbl.DELETE;
9272 
9273             l_bl_del_flag_st_dt_tbl.DELETE;
9274             l_bl_del_flag_en_dt_tbl.DELETE;
9275             l_bl_del_flag_txn_curr_tbl.DELETE;
9276             l_bl_del_flag_txn_rc_tbl.DELETE;
9277             l_bl_del_flag_txn_bc_tbl.DELETE;
9278             l_bl_del_flag_txn_rev_tbl.DELETE;
9279             l_bl_del_flag_pf_curr_tbl.DELETE;
9280             l_bl_del_flag_pf_cr_typ_tbl.DELETE;
9281             l_bl_del_flag_pf_cr_dt_typ_tbl.DELETE;
9282             l_bl_del_flag_pf_cexc_rate_tbl.DELETE;
9283             l_bl_del_flag_pf_cr_date_tbl.DELETE;
9284             l_bl_del_flag_pf_rr_typ_tbl.DELETE;
9285             l_bl_del_flag_pf_rr_dt_typ_tbl.DELETE;
9286             l_bl_del_flag_pf_rexc_rate_tbl.DELETE;
9287             l_bl_del_flag_pf_rr_date_tbl.DELETE;
9288             l_bl_del_flag_pj_curr_tbl.DELETE;
9289             l_bl_del_flag_pj_cr_typ_tbl.DELETE;
9290             l_bl_del_flag_pj_cr_dt_typ_tbl.DELETE;
9291             l_bl_del_flag_pj_cexc_rate_tbl.DELETE;
9292             l_bl_del_flag_pj_cr_date_tbl.DELETE;
9293             l_bl_del_flag_pj_rr_typ_tbl.DELETE;
9294             l_bl_del_flag_pj_rr_dt_typ_tbl.DELETE;
9295             l_bl_del_flag_pj_rexc_rate_tbl.DELETE;
9296             l_bl_del_flag_pj_rr_date_tbl.DELETE;
9297             l_bl_del_flag_bl_id_tbl.DELETE;
9298             l_bl_del_flag_per_name_tbl.DELETE;
9299             l_bl_del_flag_pj_raw_cost_tbl.DELETE;
9300             l_bl_del_flag_pj_burd_cost_tbl.DELETE;
9301             l_bl_del_flag_pj_rev_tbl.DELETE;
9302             l_bl_del_flag_raw_cost_tbl.DELETE;
9303             l_bl_del_flag_burd_cost_tbl.DELETE;
9304             l_bl_del_flag_rev_tbl.DELETE;
9305             l_bl_del_flag_qty_tbl.DELETE;
9306             l_bl_del_flag_c_rej_code_tbl.DELETE;
9307             l_bl_del_flag_b_rej_code_tbl.DELETE;
9308             l_bl_del_flag_r_rej_code_tbl.DELETE;
9309             l_bl_del_flag_o_rej_code_tbl.DELETE;
9310             l_bl_del_fg_pc_cnv_rej_cd_tbl.DELETE;
9311             l_bl_del_fg_pf_cnv_rej_cd_tbl.DELETE;
9312 
9313         END IF;  -- p_context = WEBADI_NON_PERIODIC
9314 
9315         IF l_debug_mode = 'Y' THEN
9316             pa_debug.g_err_stage:='Updating pa_budget_lines with change reason code, desc and conv attr';
9317             pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
9318         END IF;
9319 
9320         -- updating conversion attributes if the version is enabled for multi currency
9321         -- Bug  4424457 : In all the below updates replaced pa_budget_lines with pa_fp_rollup_tmp. These
9322         -- attributes will be finally stamped back in pa_budget_lines after MC conversion
9323         IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' AND
9324            p_context = 'WEBADI_PERIODIC' THEN
9325             IF l_ra_id_tbl.COUNT > 0 AND
9326                l_bls_proccessed_flag ='Y' THEN
9327                  --log1('----- STAGE CRC1-------');
9328                  --log1('PBL 15 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9329                  FORALL i IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST
9330                        UPDATE  pa_fp_rollup_tmp   pbl
9331                        SET     pbl.projfunc_cost_rate_type = DECODE (l_pfunc_cost_rate_type_tbl(i), NULL, pbl.projfunc_cost_rate_type,
9332                                                                      DECODE(l_pfunc_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_type_tbl(i))),
9333                                pbl.projfunc_cost_rate_date_type = DECODE (l_pfunc_cost_rate_date_typ_tbl(i), NULL, pbl.projfunc_cost_rate_date_type,
9334                                                                           DECODE(l_pfunc_cost_rate_date_typ_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_date_typ_tbl(i))),
9335                                pbl.projfunc_cost_exchange_rate = DECODE (l_pfunc_cost_rate_tbl(i), NULL, pbl.projfunc_cost_exchange_rate,
9336                                                                          DECODE(l_pfunc_cost_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_cost_rate_tbl(i))),
9337                                pbl.projfunc_cost_rate_date = DECODE (l_pfunc_cost_rate_date_tbl(i), NULL, pbl.projfunc_cost_rate_date,
9338                                                                      DECODE(l_pfunc_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_cost_rate_date_tbl(i))),
9339                                pbl.projfunc_rev_rate_type = DECODE (l_pfunc_rev_rate_type_tbl(i), NULL, pbl.projfunc_rev_rate_type,
9340                                                                     DECODE(l_pfunc_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_type_tbl(i))),
9341                                pbl.projfunc_rev_rate_date_type = DECODE (l_pfunc_rev_rate_date_type_tbl(i), NULL, pbl.projfunc_rev_rate_date_type,
9342                                                                          DECODE(l_pfunc_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_date_type_tbl(i))),
9343                                pbl.projfunc_rev_exchange_rate = DECODE (l_pfunc_rev_rate_tbl(i), NULL, pbl.projfunc_rev_exchange_rate,
9344                                                                         DECODE(l_pfunc_rev_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_rev_rate_tbl(i))),
9345                                pbl.projfunc_rev_rate_date = DECODE (l_pfunc_rev_rate_date_tbl(i), NULL, pbl.projfunc_rev_rate_date,
9346                                                                     DECODE(l_pfunc_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_rev_rate_date_tbl(i))),
9347                                pbl.project_cost_rate_type = DECODE (l_proj_cost_rate_type_tbl(i), NULL, pbl.project_cost_rate_type,
9348                                                                     DECODE(l_proj_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_type_tbl(i))),
9349                                pbl.project_cost_rate_date_type = DECODE (l_proj_cost_rate_date_type_tbl(i), NULL, pbl.project_cost_rate_date_type,
9350                                                                          DECODE(l_proj_cost_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_date_type_tbl(i))),
9351                                pbl.project_cost_exchange_rate = DECODE (l_proj_cost_rate_tbl(i), NULL, pbl.project_cost_exchange_rate,
9352                                                                         DECODE(l_proj_cost_rate_tbl(i), l_g_miss_num, NULL, l_proj_cost_rate_tbl(i))),
9353                                pbl.project_cost_rate_date = DECODE (l_proj_cost_rate_date_tbl(i), NULL, pbl.project_cost_rate_date,
9354                                                                     DECODE(l_proj_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_cost_rate_date_tbl(i))),
9355                                pbl.project_rev_rate_type = DECODE (l_proj_rev_rate_type_tbl(i), NULL, pbl.project_rev_rate_type,
9356                                                                    DECODE(l_proj_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_type_tbl(i))),
9357                                pbl.project_rev_rate_date_type = DECODE (l_proj_rev_rate_date_type_tbl(i), NULL, pbl.project_rev_rate_date_type,
9358                                                                         DECODE(l_proj_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_date_type_tbl(i))),
9359                                pbl.project_rev_exchange_rate = DECODE (l_proj_rev_rate_tbl(i), NULL, pbl.project_rev_exchange_rate,
9360                                                                        DECODE(l_proj_rev_rate_tbl(i), l_g_miss_num, NULL, l_proj_rev_rate_tbl(i))),
9361                                pbl.project_rev_rate_date = DECODE (l_proj_rev_rate_date_tbl(i), NULL, pbl.project_rev_rate_date,
9362                                                                    DECODE(l_proj_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_rev_rate_date_tbl(i)))
9363                        WHERE   pbl.resource_assignment_id = l_ra_id_tbl(i)
9364                        AND     pbl.txn_currency_code = l_txn_currency_code_tbl(i)
9365                        AND     pbl.start_date >= l_line_start_date_tbl(i)
9366                        AND     pbl.end_date <= l_line_end_date_tbl(i);
9367                                --log1('PBL 16 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9368             END IF;  -- there are records in local ra tbl
9369         --END IF;  -- mc flag = Y
9370 
9371         -- updating change reason code and description if the version is non time phased
9372         ELSIF p_version_info_rec.x_plan_in_multi_curr_flag <> 'Y' AND
9373               p_context = 'WEBADI_NON_PERIODIC' THEN
9374             IF l_ra_id_tbl.COUNT > 0 AND
9375                l_bls_proccessed_flag ='Y' THEN
9376                  --log1('----- STAGE CRC2-------');
9377                  --log1('PBL 17 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9378                  FORALL i IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST
9379                        UPDATE  pa_fp_rollup_tmp pbl
9380                        SET     pbl.change_reason_code = l_change_reason_code_tbl(i),
9381                                pbl.description        = l_description_tbl(i)
9382                        WHERE   pbl.resource_assignment_id = l_ra_id_tbl(i)
9383                        AND     pbl.txn_currency_code = l_txn_currency_code_tbl(i);
9384                     --log1('PBL 18 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9385             END IF;  -- there are records in local ra tbl
9386         --END IF;  -- time phase  = N
9387         ELSIF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' AND
9388               p_context = 'WEBADI_NON_PERIODIC' THEN
9389                   --log1('----- STAGE PBL18-------');
9390                   IF l_ra_id_tbl.COUNT > 0 AND
9391                      l_bls_proccessed_flag ='Y' THEN
9392                      --log1('PBL 19 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9393                      FORALL i IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST
9394                            UPDATE  pa_fp_rollup_tmp   pbl
9395                            SET     pbl.change_reason_code = l_change_reason_code_tbl(i),
9396                                    pbl.description        = DECODE(l_description_tbl(i), NULL, pbl.description,
9397                                                                    DECODE(l_description_tbl(i), l_g_miss_char, NULL, l_description_tbl(i))),
9398                                    pbl.projfunc_cost_rate_type = DECODE (l_pfunc_cost_rate_type_tbl(i), NULL, pbl.projfunc_cost_rate_type,
9399                                                                          DECODE(l_pfunc_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_type_tbl(i))),
9400                                    pbl.projfunc_cost_rate_date_type = DECODE (l_pfunc_cost_rate_date_typ_tbl(i), NULL, pbl.projfunc_cost_rate_date_type,
9401                                                                               DECODE(l_pfunc_cost_rate_date_typ_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_date_typ_tbl(i))),
9402                                    pbl.projfunc_cost_exchange_rate = DECODE (l_pfunc_cost_rate_tbl(i), NULL, pbl.projfunc_cost_exchange_rate,
9403                                                                              DECODE(l_pfunc_cost_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_cost_rate_tbl(i))),
9404                                    pbl.projfunc_cost_rate_date = DECODE (l_pfunc_cost_rate_date_tbl(i), NULL, pbl.projfunc_cost_rate_date,
9405                                                                          DECODE(l_pfunc_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_cost_rate_date_tbl(i))),
9406                                    pbl.projfunc_rev_rate_type = DECODE (l_pfunc_rev_rate_type_tbl(i), NULL, pbl.projfunc_rev_rate_type,
9407                                                                         DECODE(l_pfunc_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_type_tbl(i))),
9408                                    pbl.projfunc_rev_rate_date_type = DECODE (l_pfunc_rev_rate_date_type_tbl(i), NULL, pbl.projfunc_rev_rate_date_type,
9409                                                                              DECODE(l_pfunc_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_date_type_tbl(i))),
9410                                    pbl.projfunc_rev_exchange_rate = DECODE (l_pfunc_rev_rate_tbl(i), NULL, pbl.projfunc_rev_exchange_rate,
9411                                                                             DECODE(l_pfunc_rev_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_rev_rate_tbl(i))),
9412                                    pbl.projfunc_rev_rate_date = DECODE (l_pfunc_rev_rate_date_tbl(i), NULL, pbl.projfunc_rev_rate_date,
9413                                                                         DECODE(l_pfunc_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_rev_rate_date_tbl(i))),
9414                                    pbl.project_cost_rate_type = DECODE (l_proj_cost_rate_type_tbl(i), NULL, pbl.project_cost_rate_type,
9415                                                                         DECODE(l_proj_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_type_tbl(i))),
9416                                    pbl.project_cost_rate_date_type = DECODE (l_proj_cost_rate_date_type_tbl(i), NULL, pbl.project_cost_rate_date_type,
9417                                                                              DECODE(l_proj_cost_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_date_type_tbl(i))),
9418                                    pbl.project_cost_exchange_rate = DECODE (l_proj_cost_rate_tbl(i), NULL, pbl.project_cost_exchange_rate,
9419                                                                             DECODE(l_proj_cost_rate_tbl(i), l_g_miss_num, NULL, l_proj_cost_rate_tbl(i))),
9420                                    pbl.project_cost_rate_date = DECODE (l_proj_cost_rate_date_tbl(i), NULL, pbl.project_cost_rate_date,
9421                                                                         DECODE(l_proj_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_cost_rate_date_tbl(i))),
9422                                    pbl.project_rev_rate_type = DECODE (l_proj_rev_rate_type_tbl(i), NULL, pbl.project_rev_rate_type,
9423                                                                        DECODE(l_proj_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_type_tbl(i))),
9424                                    pbl.project_rev_rate_date_type = DECODE (l_proj_rev_rate_date_type_tbl(i), NULL, pbl.project_rev_rate_date_type,
9425                                                                             DECODE(l_proj_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_date_type_tbl(i))),
9426                                    pbl.project_rev_exchange_rate = DECODE (l_proj_rev_rate_tbl(i), NULL, pbl.project_rev_exchange_rate,
9427                                                                            DECODE(l_proj_rev_rate_tbl(i), l_g_miss_num, NULL, l_proj_rev_rate_tbl(i))),
9428                                    pbl.project_rev_rate_date = DECODE (l_proj_rev_rate_date_tbl(i), NULL, pbl.project_rev_rate_date,
9429                                                                        DECODE(l_proj_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_rev_rate_date_tbl(i)))
9430                            WHERE   pbl.resource_assignment_id = l_ra_id_tbl(i)
9431                            AND     pbl.txn_currency_code = l_txn_currency_code_tbl(i);
9432                         --log1('PBL 20 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9433                 END IF;  -- there are records in local ra tbl
9434         END IF; -- end of update
9435 
9436         IF l_debug_mode = 'Y' THEN
9437             pa_debug.g_err_stage:='pa_budget_lines updated with change reason code, desc and conv attr';
9438             pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
9439         END IF;
9440 
9441 
9442         --log1('----- STAGE PBL18.3------- ');
9443         IF l_debug_mode = 'Y' THEN
9444             pa_debug.g_err_stage := 'Calling multi currency pkg';
9445             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9446         END IF;
9447         --log1('PBL 26 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9448         -- Bug  4424457. Call MC API only if there are some budget lines that are processed by calculate API
9449         IF  l_bls_proccessed_flag ='Y' THEN
9450 
9451             PA_FP_MULTI_CURRENCY_PKG.convert_txn_currency
9452                      (p_budget_version_id   => p_budget_version_id
9453                      ,p_entire_version     => 'N'
9454                      ,x_return_status      => x_return_status
9455                      ,x_msg_count          => l_msg_count
9456                      ,x_msg_data           => l_msg_data );
9457         --log1('PBL 27 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9458             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9459                 IF l_debug_mode = 'Y' THEN
9460                     pa_debug.g_err_stage:='convert_txn_currency returned error';
9461                     pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9462                 END IF;
9463                 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
9464             END IF;
9465 
9466         END IF;
9467 
9468        IF l_debug_mode = 'Y' THEN
9469             pa_debug.g_err_stage := 'Preparing data for the call to PJI api';
9470             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9471        END IF;
9472 
9473                IF l_debug_mode = 'Y' THEN
9474                     pa_debug.g_err_stage := 'About to select data for updating the budget lines '||l_bls_proccessed_flag;
9475                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9476                END IF;
9477 
9478                 --bug 5962744 moved below bulk select out of if condition
9479                 --Bug 4424457. Rollup tmp can contain multiple records for the same budget line id. This will happen when
9480                 --for a budget line passed as input, the txn currency code is converted to some other currency which
9481                 --already exiss for the same RA. This might get resolved with the MRC API changes. Till then this should
9482                 --be taken care
9483                 --Previously PJI plan_update was called and hence the required input was collected in _pji_ tbls. Now
9484                 --plan_delete  and plan_create are called. But the _pji_ tbls are still retained for update on
9485                 --pa_budget_lines
9486 
9487                     SELECT  rlp.resource_assignment_id,
9488                             max(rlp.period_name),
9489                             rlp.start_date,
9490                             max(rlp.end_date),
9491                             rlp.txn_currency_code,
9492                             max(rlp.budget_line_id),
9493                             sum(rlp.txn_raw_cost),
9494                             sum(rlp.txn_burdened_cost),
9495                             sum(rlp.txn_revenue),
9496                             sum(rlp.project_raw_cost),
9497                             sum(rlp.project_burdened_cost),
9498                             sum(rlp.project_revenue),
9499                             sum(rlp.projfunc_raw_cost),
9500                             sum(rlp.projfunc_burdened_cost),
9501                             sum(rlp.projfunc_revenue),
9502                             sum(rlp.init_quantity),
9503                             sum(rlp.init_raw_cost),
9504                             sum(rlp.init_burdened_cost),
9505                             sum(rlp.init_revenue),
9506                             sum(rlp.project_init_raw_cost),
9507                             sum(rlp.project_init_burdened_cost),
9508                             sum(rlp.project_init_revenue),
9509                             sum(rlp.txn_init_raw_cost),
9510                             sum(rlp.txn_init_burdened_cost),
9511                             sum(rlp.txn_init_revenue),
9512                             max(rlp.cost_rejection_code),
9513                             max(rlp.revenue_rejection_code),
9514                             max(rlp.burden_rejection_code),
9515                             max(rlp.system_reference4),  -- for other_rejection_code
9516                             max(rlp.pc_cur_conv_rejection_code),
9517                             max(rlp.pfc_cur_conv_rejection_code),
9518                             max(rlp.delete_flag),
9519                             sum(rlp.quantity),
9520                             max(rlp.project_cost_rate_type),
9521                             avg(rlp.project_cost_exchange_rate),
9522                             max(rlp.project_cost_rate_date_type),
9523                             max(rlp.project_cost_rate_date),
9524                             max(rlp.project_rev_rate_type),
9525                             avg(rlp.project_rev_exchange_rate),
9526                             max(rlp.project_rev_rate_date_type),
9527                             max(rlp.project_rev_rate_date),
9528                             max(rlp.projfunc_cost_rate_type),
9529                             avg(rlp.projfunc_cost_exchange_rate),
9530                             max(rlp.projfunc_cost_rate_date_type),
9531                             max(rlp.projfunc_cost_rate_date),
9532                             max(rlp.projfunc_rev_rate_type),
9533                             avg(rlp.projfunc_rev_exchange_rate),
9534                             max(rlp.projfunc_rev_rate_date_type),
9535                             max(rlp.projfunc_rev_rate_date),
9536                             count(*),
9537                             max(change_reason_code),
9538                             max(description)
9539                     BULK COLLECT INTO
9540                             l_pji_res_ass_id_tbl,
9541                             l_pji_period_name_tbl,
9542                             l_pji_start_date_tbl,
9543                             l_pji_end_date_tbl,
9544                             l_pji_txn_curr_code_tbl,
9545                             l_upd_budget_line_id_tbl,
9546                             l_pji_txn_raw_cost_tbl,
9547                             l_pji_txn_burd_cost_tbl,
9548                             l_pji_txn_revenue_tbl,
9549                             l_pji_project_raw_cost_tbl,
9550                             l_pji_project_burd_cost_tbl,
9551                             l_pji_project_revenue_tbl,
9552                             l_pji_raw_cost_tbl,
9553                             l_pji_burd_cost_tbl,
9554                             l_pji_revenue_tbl,
9555                             l_upd_init_quantity_tbl,
9556                             l_upd_init_raw_cost_tbl,
9557                             l_upd_init_burdened_cost_tbl,
9558                             l_upd_init_revenue_tbl,
9559                             l_upd_proj_init_raw_cost_tbl,
9560                             l_upd_proj_init_burd_cost_tbl,
9561                             l_upd_proj_init_revenue_tbl,
9562                             l_upd_txn_init_raw_cost_tbl,
9563                             l_upd_txn_init_burd_cost_tbl,
9564                             l_upd_txn_init_revenue_tbl,
9565                             l_pji_cost_rej_code_tbl,
9566                             l_pji_revenue_rej_code_tbl,
9567                             l_pji_burden_rej_code_tbl,
9568                             l_pji_other_rej_code,
9569                             l_pji_pc_cur_conv_rej_code_tbl,
9570                             l_pji_pf_cur_conv_rej_code_tbl,
9571                             l_upd_delete_flag_tbl,
9572                             l_pji_quantity_tbl,
9573                             l_upd_pj_cost_rate_typ_tbl,
9574                             l_upd_pj_cost_exc_rate_tbl,
9575                             l_upd_pj_cost_rate_dt_typ_tbl,
9576                             l_upd_pj_cost_rate_date_tbl,
9577                             l_upd_pj_rev_rate_typ_tbl,
9578                             l_upd_pj_rev_exc_rate_tbl,
9579                             l_upd_pj_rev_rate_dt_typ_tbl,
9580                             l_upd_pj_rev_rate_date_tbl,
9581                             l_upd_pf_cost_rate_typ_tbl,
9582                             l_upd_pf_cost_exc_rate_tbl,
9583                             l_upd_pf_cost_rate_dt_typ_tbl,
9584                             l_upd_pf_cost_rate_date_tbl,
9585                             l_upd_pf_rev_rate_typ_tbl,
9586                             l_upd_pf_rev_exc_rate_tbl,
9587                             l_upd_pf_rev_rate_dt_typ_tbl,
9588                             l_upd_pf_rev_rate_date_tbl,
9589                             l_bl_count_tbl,
9590                             l_chg_reason_code_tbl,
9591                             l_desc_tbl
9592                     FROM    pa_fp_rollup_tmp rlp
9593                     WHERE   delete_flag IS NULL OR delete_flag <> 'Y'
9594                     GROUP BY rlp.resource_assignment_id,rlp.txn_currency_code,rlp.start_date;
9595 
9596             --log1('PBL 28 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9597             --bug 5962744
9598        IF p_context = 'WEBADI_NON_PERIODIC' THEN
9599             l_extra_bl_flag_tbl.extend(l_upd_budget_line_id_tbl.COUNT);
9600             l_ex_chg_rsn_code_tbl.extend(l_upd_budget_line_id_tbl.COUNT);
9601             l_ex_desc_tbl.extend(l_upd_budget_line_id_tbl.COUNT);
9602 
9603             if l_upd_budget_line_id_tbl.count > 0 then
9604                 for i in l_upd_budget_line_id_tbl.first .. l_upd_budget_line_id_tbl.last loop
9605 
9606                     l_extra_bl_flag_tbl(i):='N';
9607                     l_ex_chg_rsn_code_tbl(i):=null;
9608                     l_ex_desc_tbl(i):=null;
9609                 end loop;
9610             end if;
9611 
9612             if l_ra_id_tbl.count > 0 then
9613                 for i in l_ra_id_tbl.first .. l_ra_id_tbl.last loop
9614 
9615                     l_ra_exists:='N';
9616                     if l_pji_res_ass_id_tbl.count > 0 then
9617                         for j in l_pji_res_ass_id_tbl.first .. l_pji_res_ass_id_tbl.last loop
9618                             if (l_pji_res_ass_id_tbl(j) = l_ra_id_tbl(i) and
9619                                    l_pji_txn_curr_code_tbl(j) =  l_txn_currency_code_tbl(i)) then
9620                                    l_ra_exists:='Y';
9621                             end if;
9622                         end loop;
9623                     end if;
9624 
9625                     if l_ra_exists ='N' then
9626                         l_extra_bl_flag_tbl.extend(1);
9627                         l_extra_bl_flag_tbl(l_extra_bl_flag_tbl.count):='Y';
9628                         l_pji_res_ass_id_tbl.extend(1);
9629                         l_pji_res_ass_id_tbl(l_pji_res_ass_id_tbl.count):=l_ra_id_tbl(i);
9630                         l_pji_txn_curr_code_tbl.extend(1);
9631                         l_pji_txn_curr_code_tbl(l_pji_txn_curr_code_tbl.count):=l_txn_currency_code_tbl(i);
9632                         l_ex_chg_rsn_code_tbl.extend(1);
9633                         l_ex_chg_rsn_code_tbl(l_ex_chg_rsn_code_tbl.count):=l_change_reason_code_tbl(i);
9634                         l_ex_desc_tbl.extend(1);
9635                         l_ex_desc_tbl(l_ex_desc_tbl.count):=l_description_tbl(i);
9636 
9637 
9638                         l_pji_project_raw_cost_tbl.extend(1);
9639                         l_pji_project_burd_cost_tbl.extend(1);
9640                         l_pji_project_revenue_tbl.extend(1);
9641                         l_pji_raw_cost_tbl.extend(1);
9642                         l_pji_burd_cost_tbl.extend(1);
9643                         l_pji_revenue_tbl.extend(1);
9644                         l_pji_quantity_tbl.extend(1);
9645                         l_pji_pc_cur_conv_rej_code_tbl.extend(1);
9646                         l_pji_pf_cur_conv_rej_code_tbl.extend(1);
9647                         l_upd_init_quantity_tbl.extend(1);
9648                         l_upd_init_raw_cost_tbl.extend(1);
9649                         l_upd_init_burdened_cost_tbl.extend(1);
9650                         l_upd_init_revenue_tbl.extend(1);
9651                         l_upd_proj_init_raw_cost_tbl.extend(1);
9652                         l_upd_proj_init_burd_cost_tbl.extend(1);
9653                         l_upd_proj_init_revenue_tbl.extend(1);
9654                         l_upd_txn_init_raw_cost_tbl.extend(1);
9655                         l_upd_txn_init_burd_cost_tbl.extend(1);
9656                         l_upd_txn_init_revenue_tbl.extend(1);
9657                         l_upd_pj_cost_rate_typ_tbl.extend(1);
9658                         l_upd_pj_cost_exc_rate_tbl.extend(1);
9659                         l_upd_pj_cost_rate_dt_typ_tbl.extend(1);
9660                         l_upd_pj_cost_rate_date_tbl.extend(1);
9661                         l_upd_pj_rev_rate_typ_tbl.extend(1);
9662                         l_upd_pj_rev_exc_rate_tbl.extend(1);
9663                         l_upd_pj_rev_rate_dt_typ_tbl.extend(1);
9664                         l_upd_pj_rev_rate_date_tbl.extend(1);
9665                         l_upd_pf_cost_rate_typ_tbl.extend(1);
9666                         l_upd_pf_cost_exc_rate_tbl.extend(1);
9667                         l_upd_pf_cost_rate_dt_typ_tbl.extend(1);
9668                         l_upd_pf_cost_rate_date_tbl.extend(1);
9669                         l_upd_pf_rev_rate_typ_tbl.extend(1);
9670                         l_upd_pf_rev_exc_rate_tbl.extend(1);
9671                         l_upd_pf_rev_rate_dt_typ_tbl.extend(1);
9672                         l_upd_pf_rev_rate_date_tbl.extend(1);
9673                         l_chg_reason_code_tbl.extend(1);
9674                         l_desc_tbl.extend(1);
9675                         l_upd_delete_flag_tbl.extend(1);
9676                         l_upd_delete_flag_tbl(l_upd_delete_flag_tbl.count) := null;
9677                         l_bl_count_tbl.extend(1);
9678                         l_bl_count_tbl(l_bl_count_tbl.count) := 1;
9679                     end if;
9680                 end loop;
9681             end if;
9682 
9683 
9684 
9685 
9686             FORALL i IN l_pji_res_ass_id_tbl.FIRST .. l_pji_res_ass_id_tbl.LAST
9687                    UPDATE  pa_budget_lines pbl
9688                    SET     pbl.project_raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_raw_cost,'N',l_pji_project_raw_cost_tbl(i)),
9689                            pbl.project_burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_burdened_cost,'N',l_pji_project_burd_cost_tbl(i)),
9690                            pbl.project_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_revenue,'N',l_pji_project_revenue_tbl(i)),
9691                            pbl.raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.raw_cost,'N',l_pji_raw_cost_tbl(i)),
9692                            pbl.burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.burdened_cost,'N',l_pji_burd_cost_tbl(i)),
9693                            pbl.revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.revenue,'N',l_pji_revenue_tbl(i)),
9694                            pbl.quantity = decode(l_extra_bl_flag_tbl(i),'Y',pbl.quantity,'N',l_pji_quantity_tbl(i)),
9695                            pbl.pc_cur_conv_rejection_code = decode(l_extra_bl_flag_tbl(i),'Y',pbl.pc_cur_conv_rejection_code,'N',l_pji_pc_cur_conv_rej_code_tbl(i)),
9696                            pbl.pfc_cur_conv_rejection_code = decode(l_extra_bl_flag_tbl(i),'Y',pbl.pfc_cur_conv_rejection_code,'N',l_pji_pf_cur_conv_rej_code_tbl(i)),
9697                            pbl.init_quantity = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_quantity,'N',l_upd_init_quantity_tbl(i)),
9698                            pbl.init_raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_raw_cost,'N',l_upd_init_raw_cost_tbl(i)),
9699                            pbl.init_burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_burdened_cost,'N',l_upd_init_burdened_cost_tbl(i)),
9700                            pbl.init_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_revenue,'N',l_upd_init_revenue_tbl(i)),
9701                            pbl.project_init_raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_init_raw_cost,'N',l_upd_proj_init_raw_cost_tbl(i)),
9702                            pbl.project_init_burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_init_burdened_cost,'N',l_upd_proj_init_burd_cost_tbl(i)),
9703                            pbl.project_init_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_init_revenue,'N',l_upd_proj_init_revenue_tbl(i)),
9704                            pbl.txn_init_raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.txn_init_raw_cost,'N',l_upd_txn_init_raw_cost_tbl(i)),
9705                            pbl.txn_init_burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.txn_init_burdened_cost,'N',l_upd_txn_init_burd_cost_tbl(i)),
9706                            pbl.txn_init_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.txn_init_revenue,'N',l_upd_txn_init_revenue_tbl(i)),
9707                            pbl.project_cost_rate_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_cost_rate_type,'N',l_upd_pj_cost_rate_typ_tbl(i)),
9708                            pbl.project_cost_exchange_rate = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_cost_exchange_rate,'N',l_upd_pj_cost_exc_rate_tbl(i)),
9709                            pbl.project_cost_rate_date_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_cost_rate_date_type,'N',l_upd_pj_cost_rate_dt_typ_tbl(i)),
9710                            pbl.project_cost_rate_date = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_cost_rate_date,'N',l_upd_pj_cost_rate_date_tbl(i)),
9711                            pbl.project_rev_rate_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_rev_rate_type,'N',l_upd_pj_rev_rate_typ_tbl(i)),
9712                            pbl.project_rev_exchange_rate = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_rev_exchange_rate,'N',l_upd_pj_rev_exc_rate_tbl(i)),
9713                            pbl.project_rev_rate_date_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_rev_rate_date_type,'N',l_upd_pj_rev_rate_dt_typ_tbl(i)),
9714                            pbl.project_rev_rate_date = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_rev_rate_date,'N',l_upd_pj_rev_rate_date_tbl(i)),
9715                            pbl.projfunc_cost_rate_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_cost_rate_type,'N',l_upd_pf_cost_rate_typ_tbl(i)),
9716                            pbl.projfunc_cost_exchange_rate = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_cost_exchange_rate,'N',l_upd_pf_cost_exc_rate_tbl(i)),
9717                            pbl.projfunc_cost_rate_date_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_cost_rate_date_type,'N',l_upd_pf_cost_rate_dt_typ_tbl(i)),
9718                            pbl.projfunc_cost_rate_date = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_cost_rate_date,'N',l_upd_pf_cost_rate_date_tbl(i)),
9719                            pbl.projfunc_rev_rate_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_rev_rate_type,'N',l_upd_pf_rev_rate_typ_tbl(i)),
9720                            pbl.projfunc_rev_exchange_rate = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_rev_exchange_rate,'N',l_upd_pf_rev_exc_rate_tbl(i)),
9721                            pbl.projfunc_rev_rate_date_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_rev_rate_date_type,'N',l_upd_pf_rev_rate_dt_typ_tbl(i)),
9722                            pbl.projfunc_rev_rate_date = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_rev_rate_date,'N',l_upd_pf_rev_rate_date_tbl(i)),
9723                            pbl.change_reason_code = decode(l_extra_bl_flag_tbl(i),'Y',l_ex_chg_rsn_code_tbl(i),'N',DECODE(l_chg_reason_code_tbl(i), NULL, pbl.change_reason_code,
9724                                                                                     l_fnd_miss_char, NULL,
9725                                                                                     l_chg_reason_code_tbl(i))), -- Bug 5014538.
9726                            pbl.description=decode(l_extra_bl_flag_tbl(i),'Y',l_ex_desc_tbl(i),'N',l_desc_tbl(i)),
9727                            pbl.last_updated_by = fnd_global.user_id,
9728                            pbl.last_update_date = SYSDATE,
9729                            pbl.last_update_login =  fnd_global.login_id
9730                    WHERE   pbl.budget_version_id = p_budget_version_id
9731                    AND     pbl.resource_assignment_id = l_pji_res_ass_id_tbl(i)
9732                    AND     pbl.txn_currency_code = l_pji_txn_curr_code_tbl(i)
9733                    AND     l_bl_count_tbl(i)=1
9734                    AND    (l_upd_delete_flag_tbl(i) IS  NULL OR
9735                            l_upd_delete_flag_tbl(i) <> 'Y');
9736        END IF; --if p_context = 'WEBADI_NON_PERIODIC'
9737        --bug 5962744
9738            IF l_debug_mode = 'Y' THEN
9739                pa_debug.g_err_stage := 'Stampping Amounts and rejection codes in budget lines';
9740                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9741            END IF;
9742 
9743            -- Bug 	4424457. If there are budget lines that either got deleted or updated/created then
9744        -- stamp the derived pc/pfc amounts back on budget lines and call PJI API
9745         IF l_bls_proccessed_flag ='Y' OR
9746            l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
9747            --Bug 4424457. Update only those budget lines for which duplicates do not exist in rollup tmp. Budget lines
9748            --with duplicates are already taken care of in calculate API
9749        --    IF l_pji_res_ass_id_tbl.COUNT > 0 THEN
9750            IF p_context <> 'WEBADI_NON_PERIODIC' THEN
9751                 FORALL i IN l_upd_budget_line_id_tbl.FIRST .. l_upd_budget_line_id_tbl.LAST
9752                        UPDATE  pa_budget_lines pbl
9753                        SET     pbl.project_raw_cost = l_pji_project_raw_cost_tbl(i),
9754                                pbl.project_burdened_cost = l_pji_project_burd_cost_tbl(i),
9755                                pbl.project_revenue = l_pji_project_revenue_tbl(i),
9756                                pbl.raw_cost = l_pji_raw_cost_tbl(i),
9757                                pbl.burdened_cost = l_pji_burd_cost_tbl(i),
9758                                pbl.revenue = l_pji_revenue_tbl(i),
9759                                pbl.quantity = l_pji_quantity_tbl(i),
9760                                pbl.pc_cur_conv_rejection_code = l_pji_pc_cur_conv_rej_code_tbl(i),
9761                                pbl.pfc_cur_conv_rejection_code = l_pji_pf_cur_conv_rej_code_tbl(i),
9762                                pbl.init_quantity = l_upd_init_quantity_tbl(i),
9763                                pbl.init_raw_cost = l_upd_init_raw_cost_tbl(i),
9764                                pbl.init_burdened_cost = l_upd_init_burdened_cost_tbl(i),
9765                                pbl.init_revenue = l_upd_init_revenue_tbl(i),
9766                                pbl.project_init_raw_cost = l_upd_proj_init_raw_cost_tbl(i),
9767                                pbl.project_init_burdened_cost = l_upd_proj_init_burd_cost_tbl(i),
9768                                pbl.project_init_revenue = l_upd_proj_init_revenue_tbl(i),
9769                                pbl.txn_init_raw_cost = l_upd_txn_init_raw_cost_tbl(i),
9770                                pbl.txn_init_burdened_cost = l_upd_txn_init_burd_cost_tbl(i),
9771                                pbl.txn_init_revenue = l_upd_txn_init_revenue_tbl(i),
9772                                pbl.project_cost_rate_type = l_upd_pj_cost_rate_typ_tbl(i),
9773                                pbl.project_cost_exchange_rate = l_upd_pj_cost_exc_rate_tbl(i),
9774                                pbl.project_cost_rate_date_type = l_upd_pj_cost_rate_dt_typ_tbl(i),
9775                                pbl.project_cost_rate_date = l_upd_pj_cost_rate_date_tbl(i),
9776                                pbl.project_rev_rate_type = l_upd_pj_rev_rate_typ_tbl(i),
9777                                pbl.project_rev_exchange_rate = l_upd_pj_rev_exc_rate_tbl(i),
9778                                pbl.project_rev_rate_date_type = l_upd_pj_rev_rate_dt_typ_tbl(i),
9779                                pbl.project_rev_rate_date = l_upd_pj_rev_rate_date_tbl(i),
9780                                pbl.projfunc_cost_rate_type = l_upd_pf_cost_rate_typ_tbl(i),
9781                                pbl.projfunc_cost_exchange_rate = l_upd_pf_cost_exc_rate_tbl(i),
9782                                pbl.projfunc_cost_rate_date_type = l_upd_pf_cost_rate_dt_typ_tbl(i),
9783                                pbl.projfunc_cost_rate_date = l_upd_pf_cost_rate_date_tbl(i),
9784                                pbl.projfunc_rev_rate_type = l_upd_pf_rev_rate_typ_tbl(i),
9785                                pbl.projfunc_rev_exchange_rate = l_upd_pf_rev_exc_rate_tbl(i),
9786                                pbl.projfunc_rev_rate_date_type = l_upd_pf_rev_rate_dt_typ_tbl(i),
9787                                pbl.projfunc_rev_rate_date = l_upd_pf_rev_rate_date_tbl(i),
9788                                pbl.change_reason_code = DECODE(l_chg_reason_code_tbl(i), NULL, pbl.change_reason_code,
9789                                                                                         l_fnd_miss_char, NULL,
9790                                                                                         l_chg_reason_code_tbl(i)), --Bug 5144013.
9791                                pbl.description=l_desc_tbl(i),
9792                                pbl.last_updated_by = fnd_global.user_id,
9793                                pbl.last_update_date = SYSDATE,
9794                                pbl.last_update_login =  fnd_global.login_id
9795                        WHERE   pbl.budget_version_id = p_budget_version_id
9796                        AND     pbl.resource_assignment_id = l_pji_res_ass_id_tbl(i)
9797                        AND     pbl.txn_currency_code = l_pji_txn_curr_code_tbl(i)
9798                        AND     pbl.start_date =l_pji_start_date_tbl(i)
9799                        AND     l_bl_count_tbl(i)=1
9800                        AND    (l_upd_delete_flag_tbl(i) IS  NULL OR
9801                                l_upd_delete_flag_tbl(i) <> 'Y');
9802            END IF;
9803 
9804            /* Start of fix for Bug : 5144013.Call is made to the api PA_BUDGET_LINES_UTILS.populate_display_qty
9805               to populate the display_quantity in pa_budget_lines. This is done as part of merging the MRUP3
9806               changes done in 11i into R12.
9807            */
9808            IF l_debug_mode = 'Y' THEN
9809                pa_debug.g_err_stage := 'Before calling Populate Display Qty api';
9810                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9811            END IF;
9812            PA_BUDGET_LINES_UTILS.populate_display_qty
9813                  ( p_budget_version_id     => p_budget_version_id
9814                   ,p_context               => 'FINANCIAL'
9815                   ,x_return_status         => x_return_status);
9816            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9817                IF l_debug_mode = 'Y' THEN
9818                   pa_debug.g_err_stage := 'The API PA_BUDGET_LINES_UTILS.populate_display_qty returned error';
9819                   pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
9820                END IF;
9821                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9822            END IF;
9823            IF l_debug_mode = 'Y' THEN
9824                pa_debug.g_err_stage := 'After calling Populate Display Qty api';
9825                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9826            END IF;
9827            -- Call is made to maintain_data api to rollup the data in new entity.
9828            IF l_debug_mode = 'Y' THEN
9829               pa_debug.g_err_stage := 'Before calling maintanance api maintain_data';
9830               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9831            END IF;
9832            PA_RES_ASG_CURRENCY_PUB.maintain_data(
9833                                                 p_fp_cols_rec           => p_version_info_rec
9834                                                ,p_calling_module        => 'WEBADI'
9835                                                ,p_rollup_flag           => 'Y'
9836                                                ,p_version_level_flag    => 'Y'
9837                                                ,x_return_status         => x_return_status
9838                                                ,x_msg_count             => l_msg_count
9839                                                ,x_msg_data              => l_msg_data);
9840             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9841                IF l_debug_mode = 'Y' THEN
9842                   pa_debug.g_err_stage := 'The API PA_RES_ASG_CURRENCY_PUB.maintain_data returned error';
9843                   pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
9844                END IF;
9845                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9846             END IF;
9847            IF l_debug_mode = 'Y' THEN
9848               pa_debug.g_err_stage := 'After calling maintanance api maintain_data';
9849               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9850            END IF;
9851            /* End of fix for Bug : 5144013*/
9852 
9853             --log1('PBL 29 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9854            IF l_debug_mode = 'Y' THEN
9855                pa_debug.g_err_stage := 'Calling rollup budget version api';
9856                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9857            END IF;
9858            --log1('----- STAGE PBL18.3------- ');
9859            --log1('PBL 30 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9860            PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION
9861                  ( p_budget_version_id     => p_budget_version_id
9862                   ,p_entire_version        => 'Y'
9863                   ,x_return_status         => x_return_status
9864                   ,x_msg_count             => l_msg_count
9865                   ,x_msg_data              => l_msg_data);
9866 
9867                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9868                      IF l_debug_mode = 'Y' THEN
9869                          pa_debug.g_err_stage:='The API PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION returned error';
9870                          pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9871                      END IF;
9872                      RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9873                  END IF;
9874            --log1('PBL 31 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9875            IF l_debug_mode = 'Y' THEN
9876                  pa_debug.g_err_stage := 'Checking whether MRC api needs to be called';
9877                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9878            END IF;
9879            --log1('----- STAGE PBL18.4------- ');
9880 
9881     /**************MRC ELIMINATION CHANGES: ********************************
9882      ** The following api calls are used for populating the mrc data which is not required
9883      ** as the mrc schema and entity are scrapped from R12
9884            PA_MRC_FINPLAN.check_mrc_install
9885                   (x_return_status        => x_return_status,
9886                    x_msg_count            => l_msg_count,
9887                    x_msg_data             => l_msg_data);
9888 
9889            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9890                IF l_debug_mode = 'Y' THEN
9891                    pa_debug.g_err_stage:='The API PA_MRC_FINPLAN.check_mrc_installed returned error';
9892                    pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9893                END IF;
9894                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9895            END IF;
9896 
9897            --log1('PBL 32 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9898            -- checking for valid requiered parameter values to call the MRC api
9899            IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS AND
9900                PA_MRC_FINPLAN.G_FINPLAN_MRC_OPTION_CODE = 'A' THEN
9901                   IF l_debug_mode = 'Y' THEN
9902                        pa_debug.g_err_stage := 'Calling MRC api ';
9903                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9904                   END IF;
9905                           --log1('PBL 33 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9906                   PA_MRC_FINPLAN.maintain_all_mc_budget_lines
9907                       (p_fin_plan_version_id  => p_budget_version_id,
9908                        p_entire_version       => 'N',
9909                        x_return_status        => x_return_status,
9910                        x_msg_count            => l_msg_count,
9911                        x_msg_data             => l_msg_data);
9912                        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9913                             IF l_debug_mode = 'Y' THEN
9914                                 pa_debug.g_err_stage:='The API PA_MRC_FINPLAN.maintain_all_mc_budget_lines returned error';
9915                                 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9916                             END IF;
9917                             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9918                        END IF;
9919                     --log1('PBL 34 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9920            ELSE
9921                   IF l_debug_mode = 'Y' THEN
9922                        pa_debug.g_err_stage := 'MRC api need not be called';
9923                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9924                   END IF;
9925            END IF;
9926     ***************End of MRC ELIMINATION CHANGES: ***********************/
9927 
9928            --log1('----- STAGE PBL18.5------- ');
9929            IF l_debug_mode = 'Y' THEN
9930                  pa_debug.g_err_stage := 'Data prepared for the call to PJI api';
9931                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9932                  pa_debug.Reset_Curr_Function;
9933            END IF;
9934            --log1('----- STAGE PBL18.6------- ');
9935            --log1('PBL 37'||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9936            --Bug 4424457. Replaced the call to plan_update with plan_delete and plan_create
9937            l_dest_ver_id_tbl.EXTEND;
9938            l_dest_ver_id_tbl(1):=p_budget_version_id;
9939            PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
9940               p_fp_version_ids   => l_dest_ver_id_tbl,
9941               x_return_status    => x_return_status,
9942               x_msg_code         => l_error_msg_code);
9943 
9944             IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
9945                IF l_debug_mode = 'Y' THEN
9946                   pa_debug.g_err_stage := 'API PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE returned ERROR 1 '|| l_error_msg_code;
9947                   pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
9948                END IF;
9949 
9950                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9951 
9952             END IF;
9953 
9954 
9955             PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE(p_fp_version_ids => l_dest_ver_id_tbl
9956                                               ,x_return_status  => l_return_status
9957                                               ,x_msg_code       => l_error_msg_code);
9958 
9959             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9960                        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9961             END IF;
9962 
9963             --log1('PBL 38 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9964             -- deleting contents from pl/sql tables to be used to call pji api
9965             l_pji_res_ass_id_tbl.DELETE;
9966             l_pji_period_name_tbl.DELETE;
9967             l_pji_start_date_tbl.DELETE;
9968             l_pji_end_date_tbl.DELETE;
9969             l_pji_txn_curr_code_tbl.DELETE;
9970             l_pji_txn_raw_cost_tbl.DELETE;
9971             l_pji_txn_burd_cost_tbl.DELETE;
9972             l_pji_txn_revenue_tbl.DELETE;
9973             l_pji_project_raw_cost_tbl.DELETE;
9974             l_pji_project_burd_cost_tbl.DELETE;
9975             l_pji_project_revenue_tbl.DELETE;
9976             l_pji_raw_cost_tbl.DELETE;
9977             l_pji_burd_cost_tbl.DELETE;
9978             l_pji_revenue_tbl.DELETE;
9979             l_pji_cost_rej_code_tbl.DELETE;
9980             l_pji_revenue_rej_code_tbl.DELETE;
9981             l_pji_burden_rej_code_tbl.DELETE;
9982             l_pji_other_rej_code.DELETE;
9983             l_pji_pc_cur_conv_rej_code_tbl.DELETE;
9984             l_pji_pf_cur_conv_rej_code_tbl.DELETE;
9985             l_pji_quantity_tbl.DELETE;
9986             l_upd_pj_cost_rate_typ_tbl.DELETE;
9987             l_upd_pj_cost_exc_rate_tbl.DELETE;
9988             l_upd_pj_cost_rate_dt_typ_tbl.DELETE;
9989             l_upd_pj_cost_rate_date_tbl.DELETE;
9990             l_upd_pj_rev_rate_typ_tbl.DELETE;
9991             l_upd_pj_rev_exc_rate_tbl.DELETE;
9992             l_upd_pj_rev_rate_dt_typ_tbl.DELETE;
9993             l_upd_pj_rev_rate_date_tbl.DELETE;
9994             l_upd_pf_cost_rate_typ_tbl.DELETE;
9995             l_upd_pf_cost_exc_rate_tbl.DELETE;
9996             l_upd_pf_cost_rate_dt_typ_tbl.DELETE;
9997             l_upd_pf_cost_rate_date_tbl.DELETE;
9998             l_upd_pf_rev_rate_typ_tbl.DELETE;
9999             l_upd_pf_rev_exc_rate_tbl.DELETE;
10000             l_upd_pf_rev_rate_dt_typ_tbl.DELETE;
10001             l_upd_pf_rev_rate_date_tbl.DELETE;
10002             l_upd_budget_line_id_tbl.DELETE;
10003             l_upd_init_quantity_tbl.DELETE;
10004             l_upd_init_raw_cost_tbl.DELETE;
10005             l_upd_init_burdened_cost_tbl.DELETE;
10006             l_upd_init_revenue_tbl.DELETE;
10007             l_upd_proj_init_raw_cost_tbl.DELETE;
10008             l_upd_proj_init_burd_cost_tbl.DELETE;
10009             l_upd_proj_init_revenue_tbl.DELETE;
10010             l_upd_txn_init_raw_cost_tbl.DELETE;
10011             l_upd_txn_init_burd_cost_tbl.DELETE;
10012             l_upd_txn_init_revenue_tbl.DELETE;
10013             l_upd_delete_flag_tbl.DELETE;
10014 
10015         END IF;--       IF l_bls_proccessed_flag ='Y' OR
10016                --      l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
10017 
10018         --log1('PBL 39 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10019         IF l_debug_mode = 'Y' THEN
10020              pa_debug.g_err_stage := 'Leaving process_budget_lines';
10021              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10022              pa_debug.Reset_Curr_Function;
10023         END IF;
10024 EXCEPTION
10025       WHEN PA_FP_CONSTANTS_PKG.Just_Ret_Exc THEN
10026             IF l_debug_mode = 'Y' THEN
10027                 pa_debug.reset_curr_function;
10028             END IF;
10029             RETURN;
10030       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
10031             l_msg_count := FND_MSG_PUB.count_msg;
10032 
10033             IF l_msg_count = 1 and x_msg_data IS NULL THEN
10034                    PA_INTERFACE_UTILS_PUB.get_messages
10035                      (p_encoded        => FND_API.G_TRUE
10036                      ,p_msg_index      => 1
10037                      ,p_msg_count      => l_msg_count
10038                      ,p_msg_data       => l_msg_data
10039                      ,p_data           => l_data
10040                      ,p_msg_index_out  => l_msg_index_out);
10041                    x_msg_data := l_data;
10042                    x_msg_count := l_msg_count;
10043             ELSE
10044                   x_msg_count := l_msg_count;
10045             END IF;
10046             x_return_status := FND_API.G_RET_STS_ERROR;
10047             IF l_debug_mode = 'Y' THEN
10048                 pa_debug.reset_curr_function;
10049             END IF;
10050             RETURN;
10051 
10052       WHEN OTHERS THEN
10053           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10054           x_msg_count     := 1;
10055           x_msg_data      := SQLERRM;
10056 
10057           FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
10058                                   ,p_procedure_name  => 'process_budget_lines');
10059           IF l_debug_mode = 'Y' THEN
10060                pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
10061                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
10062           END IF;
10063 
10064           IF l_debug_mode = 'Y' THEN
10065              pa_debug.reset_curr_function;
10066           END IF;
10067           RAISE;
10068 
10069 END process_budget_lines;
10070 
10071 --This procedure will update the budget version and its corresponding data in the interface table with
10072 --the latest request id and plan processing code(XLUP/XLUE).
10073 PROCEDURE update_xl_data_for_new_req
10074 (p_request_id              IN    pa_budget_versions.request_id%TYPE,
10075  p_run_id                  IN    pa_fp_webadi_upload_inf.run_id%TYPE,
10076  p_plan_processing_code    IN    pa_budget_versions.plan_processing_code%TYPE,
10077  p_budget_version_id       IN    pa_budget_versions.budget_version_id%TYPE,
10078  p_null_out_cols           IN    VARCHAR2)
10079 IS
10080 BEGIN
10081 
10082     --Record Version Number is not updated since the web ADI code checks the record Version Number at downloand
10083     --with the record version number at upload and throws an error if they dont match.
10084     UPDATE pa_budget_versions
10085     SET    request_id = p_request_id,
10086            plan_processing_code=p_plan_processing_code
10087     WHERE  budget_version_id = p_budget_version_id;
10088 
10089     --NULL out the IDS and values derived in the previous call to Switcher API do that all the validations
10090     --are done again
10091     UPDATE pa_fp_webadi_upload_inf
10092     SET    task_id                =DECODE(p_null_out_cols,'Y',NULL,task_id),
10093            resource_list_member_id=DECODE(p_null_out_cols,'Y',NULL,resource_list_member_id),
10094            val_error_flag         =DECODE(p_null_out_cols,'Y',NULL,val_error_flag),
10095            val_error_code         =DECODE(p_null_out_cols,'Y',NULL,val_error_code),
10096            err_task_name          =DECODE(p_null_out_cols,'Y',NULL,err_task_name),
10097            err_task_number        =DECODE(p_null_out_cols,'Y',NULL,err_task_number),
10098            err_alias              =DECODE(p_null_out_cols,'Y',NULL,err_alias),
10099            err_amount_type_code   =DECODE(p_null_out_cols,'Y',NULL,err_amount_type_code),
10100            request_id=p_request_id
10101    WHERE   run_id=p_run_id
10102    AND     request_id IS NULL;
10103 
10104 END;
10105 
10106 PROCEDURE switcher
10107 (x_return_status                OUT                NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10108  x_msg_count                    OUT                NOCOPY NUMBER, --File.Sql.39 bug 4440895
10109  x_msg_data                     OUT                NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10110  p_submit_budget_flag           IN                 VARCHAR2,
10111  p_run_id                       IN                 pa_fp_webadi_upload_inf.run_id%TYPE,
10112  x_success_msg                  OUT                NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10113  p_submit_forecast_flag         IN                 VARCHAR2,
10114  p_request_id                   IN                 pa_budget_versions.request_id%TYPE,
10115  p_calling_mode                 IN                 VARCHAR2)
10116 
10117  IS
10118   -- variables used for debugging
10119   l_module_name                   VARCHAR2(100) := 'pa_fp_webadi_pkg.switcher';
10120   l_debug_mode                    VARCHAR2(1) := 'N';
10121   l_debug_level3                  CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
10122   l_debug_level5                  CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
10123 
10124   l_msg_count                     NUMBER;
10125   l_msg_data                      VARCHAR2(2000);
10126   l_data                          VARCHAR2(2000);
10127   l_msg_index_out                 NUMBER;
10128 
10129   l_budget_version_id             pa_budget_versions.budget_version_id%TYPE;
10130   l_rec_version_number            pa_budget_versions.record_version_number%TYPE;
10131   l_pm_rec_version_number         pa_period_masks_b.record_version_number%TYPE;
10132   l_project_id                    pa_projects_all.project_id%TYPE;
10133   l_org_id                        pa_projects_all.org_id%TYPE;
10134   l_version_info_rec              pa_fp_gen_amount_utils.fp_cols;
10135 
10136   -- variable to held the start_date and end_date of individual periods
10137   l_prd_start_date_tbl            SYSTEM.pa_date_tbl_type  := SYSTEM.pa_date_tbl_type();
10138   l_prd_end_date_tbl              SYSTEM.pa_date_tbl_type  := SYSTEM.pa_date_tbl_type();
10139 
10140   l_budget_line_in_tbl            PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE;
10141   l_bl_raw_cost_rate_tbl          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10142   l_bl_burd_cost_rate_tbl         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10143   l_bl_bill_rate_tbl              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10144   l_bl_plan_start_date_tbl        SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
10145   l_bl_plan_end_date_tbl          SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
10146   l_bl_uom_tbl                    SYSTEM.pa_varchar2_80_tbl_type  := SYSTEM.pa_varchar2_80_tbl_type();
10147   l_mfc_cost_type_tbl             SYSTEM.PA_VARCHAR2_15_TBL_TYPE  := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
10148   l_spread_curve_name_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE :=  SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
10149   l_sp_fixed_date_tbl             SYSTEM.PA_DATE_TBL_TYPE         := SYSTEM.PA_DATE_TBL_TYPE();
10150   l_sp_fixed_date_tbl_1             SYSTEM.PA_DATE_TBL_TYPE         := SYSTEM.PA_DATE_TBL_TYPE();
10151   l_etc_method_name_tbl           SYSTEM.PA_VARCHAR2_80_TBL_TYPE  := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
10152   l_spread_curve_id_tbl           SYSTEM.PA_NUM_TBL_TYPE          := SYSTEM.PA_NUM_TBL_TYPE();
10153   l_spread_curve_id_tbl_1           SYSTEM.PA_NUM_TBL_TYPE          := SYSTEM.PA_NUM_TBL_TYPE();
10154 
10155   l_amount_set_id                 pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
10156   l_allow_qty_flag                VARCHAR2(1);
10157 
10158   l_set_ppc_flag_on_err           VARCHAR2(1);
10159 
10160   l_budget_line_out_tbl           PA_BUDGET_PUB.G_budget_lines_out_tbl%TYPE;
10161   l_delete_flag_tbl               SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
10162   l_delete_flag_tbl_1               SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
10163 
10164   i                               INTEGER;
10165   l_error_indicator_flag          VARCHAR2(1);
10166 
10167   l_mfc_cost_type_id_tbl          SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
10168   l_mfc_cost_type_id_tbl_1          SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
10169   l_etc_method_code_tbl           SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
10170   l_etc_method_code_tbl_1           SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
10171 
10172   is_periodic_setup               VARCHAR2(1) := 'N';
10173   l_prep_pbl_calling_context      VARCHAR2(30);
10174   l_plan_class_code               pa_fin_plan_types_b.plan_class_code%TYPE;
10175 
10176   l_ra_id_tbl                        SYSTEM.pa_num_tbl_type;
10177   l_task_id_tbl                      SYSTEM.pa_num_tbl_type;
10178   l_rlm_id_tbl                       SYSTEM.pa_num_tbl_type;
10179   l_txn_currency_code_tbl            SYSTEM.pa_varchar2_15_tbl_type;
10180   l_planning_start_date_tbl          SYSTEM.pa_date_tbl_type;
10181   l_planning_end_date_tbl            SYSTEM.pa_date_tbl_type;
10182   l_total_qty_tbl                    SYSTEM.pa_num_tbl_type;
10183   l_total_raw_cost_tbl               SYSTEM.pa_num_tbl_type;
10184   l_total_burdened_cost_tbl          SYSTEM.pa_num_tbl_type;
10185   l_total_revenue_tbl                SYSTEM.pa_num_tbl_type;
10186   l_raw_cost_rate_tbl                SYSTEM.pa_num_tbl_type;
10187   l_burdened_cost_rate_tbl           SYSTEM.pa_num_tbl_type;
10188   l_bill_rate_tbl                    SYSTEM.pa_num_tbl_type;
10189   l_line_start_date_tbl              SYSTEM.pa_date_tbl_type;
10190   l_line_end_date_tbl                SYSTEM.pa_date_tbl_type;
10191   l_proj_cost_rate_type_tbl          SYSTEM.pa_varchar2_30_tbl_type;
10192   l_proj_cost_rate_date_type_tbl     SYSTEM.pa_varchar2_30_tbl_type;
10193   l_proj_cost_rate_tbl               SYSTEM.pa_num_tbl_type;
10194   l_proj_cost_rate_date_tbl          SYSTEM.pa_date_tbl_type;
10195   l_proj_rev_rate_type_tbl           SYSTEM.pa_varchar2_30_tbl_type;
10196   l_proj_rev_rate_date_type_tbl      SYSTEM.pa_varchar2_30_tbl_type;
10197   l_proj_rev_rate_tbl                SYSTEM.pa_num_tbl_type;
10198   l_proj_rev_rate_date_tbl           SYSTEM.pa_date_tbl_type;
10199   l_pfunc_cost_rate_type_tbl         SYSTEM.pa_varchar2_30_tbl_type;
10200   l_pfunc_cost_rate_date_typ_tbl     SYSTEM.pa_varchar2_30_tbl_type;
10201   l_pfunc_cost_rate_tbl              SYSTEM.pa_num_tbl_type;
10202   l_pfunc_cost_rate_date_tbl         SYSTEM.pa_date_tbl_type;
10203   l_pfunc_rev_rate_type_tbl          SYSTEM.pa_varchar2_30_tbl_type;
10204   l_pfunc_rev_rate_date_type_tbl     SYSTEM.pa_varchar2_30_tbl_type;
10205   l_pfunc_rev_rate_tbl               SYSTEM.pa_num_tbl_type;
10206   l_pfunc_rev_rate_date_tbl          SYSTEM.pa_date_tbl_type;
10207   l_change_reason_code_tbl           SYSTEM.pa_varchar2_30_tbl_type;
10208   l_description_tbl                  SYSTEM.pa_varchar2_2000_tbl_type;
10209   l_etc_quantity_tbl                 SYSTEM.pa_num_tbl_type;
10210   l_etc_raw_cost_tbl                 SYSTEM.pa_num_tbl_type;
10211   l_etc_burdened_cost_tbl            SYSTEM.pa_num_tbl_type;
10212   l_etc_revenue_tbl                  SYSTEM.pa_num_tbl_type;
10213   l_res_class_code_tbl               SYSTEM.pa_varchar2_30_tbl_type;
10214   l_rate_based_flag_tbl              SYSTEM.pa_varchar2_1_tbl_type;
10215   l_rbs_elem_id_tbl                  SYSTEM.pa_num_tbl_type;
10216   l_amt_type_tbl                     SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
10217   l_prc_ra_id_tbl                    SYSTEM.pa_num_tbl_type;
10218   l_prc_res_class_code_tbl           SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
10219   l_prc_rate_based_flag_tbl          SYSTEM.PA_VARCHAR2_1_TBL_TYPE;
10220   l_prc_rbs_elem_id_tbl              SYSTEM.pa_num_tbl_type;
10221 
10222   CURSOR l_prd_start_end_date_csr (c_org_id                  pa_projects_all.org_id%TYPE,
10223                                    c_prd_mask_id             pa_proj_fp_options.cost_period_mask_id%TYPE,
10224                                    c_time_phased_code        pa_proj_fp_options.cost_time_phased_code%TYPE,
10225                                    c_current_planning_period pa_proj_fp_options.cost_current_planning_period%TYPE)
10226   IS
10227   SELECT glsd.start_date start_date,
10228          gled.end_date end_date
10229   FROM   (SELECT ROW_NUMBER() OVER(PARTITION BY gl.period_set_name,gl.period_type
10230                  ORDER BY gl.start_date) rn,
10231                  gl.start_date start_date,
10232                  gl.end_Date  end_date,
10233                  gl.period_name period_name,
10234                  gl.period_set_name period_set_name,
10235                  gl.period_type period_type
10236           FROM   gl_periods gl,
10237                  pa_implementations_all pim,
10238                  gl_sets_of_books gsb
10239           WHERE  gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
10240           AND    gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
10241           AND    gl.adjustment_period_flag='N'
10242           AND    pim.org_id = c_org_id
10243           AND    gsb.set_of_books_id = pim.set_of_books_id) glsd,
10244          (SELECT ROW_NUMBER() OVER(PARTITION BY gl.period_set_name,gl.period_type
10245                  ORDER BY gl.start_date) rn,
10246                  gl.start_date start_date,
10247                  gl.end_Date  end_date,
10248                  gl.period_name period_name,
10249                  gl.period_set_name period_set_name,
10250                  gl.period_type period_type
10251           FROM   gl_periods gl,
10252                  pa_implementations_all pim,
10253                  gl_sets_of_books gsb
10254           WHERE  gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
10255           AND    gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
10256           AND    gl.adjustment_period_flag='N'
10257           AND    pim.org_id = c_org_id
10258           AND    gsb.set_of_books_id = pim.set_of_books_id) gled,
10259          (SELECT ROW_NUMBER() OVER(PARTITION BY gl.period_set_name,gl.period_type
10260                  ORDER BY gl.start_date) rn,
10261                  gl.start_date start_date,
10262                  gl.end_Date  end_date,
10263                  gl.period_name period_name,
10264                  gl.period_set_name period_set_name,
10265                  gl.period_type period_type
10266           FROM   gl_periods gl,
10267                  pa_implementations_all pim,
10268                  gl_sets_of_books gsb
10269           WHERE  gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
10270           AND    gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
10271           AND    gl.adjustment_period_flag='N'
10272           AND    pim.org_id = c_org_id
10273           AND    gsb.set_of_books_id = pim.set_of_books_id)glcp,
10274           pa_period_mask_details pmd
10275   WHERE  pmd.period_mask_id = c_prd_mask_id
10276   AND    glcp.period_name = c_current_planning_period
10277   AND    glsd.rn = pmd.from_anchor_start + glcp.rn
10278   AND    gled.rn = pmd.from_anchor_end + glcp.rn
10279   AND    pmd.from_anchor_position NOT IN (99999,-99999)
10280   ORDER BY pmd.from_anchor_position;
10281 
10282   l_prd_date_rec            l_prd_start_end_date_csr%ROWTYPE;
10283   l_submit_flag             VARCHAR2(1);
10284   l_profile_val             VARCHAR2(30);
10285   l_profile_thsld_val       NUMBER;
10286   l_profile_thsld_num       NUMBER;
10287   l_etc_start_date          pa_budget_versions.etc_start_date%TYPE;
10288   l_request_id              NUMBER;
10289   l_rollback_flag           VARCHAR2(1);
10290   l_first_pd_bf_pm_en_dt    DATE;
10291   l_last_pd_af_pm_st_dt     DATE;
10292   l_inf_tbl_rec_tbl         inf_cur_tbl_typ;
10293   l_record_counter          NUMBER;
10294 
10295 
10296 BEGIN
10297     --log1('Begin '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10298     l_rollback_flag := 'N';
10299     COMMIT;  /*  Added this for bug 3736220
10300 
10301              Reason: To display budget client extension error messages customized by the Customers
10302              we need to stamp the val_error_code and val_error_flag of PA_FP_WEBADI_UPLOAD_INF table
10303              Only then these error messages will appear in Excel Sheet itself when any failure happens
10304              during upload.
10305 
10306              Code flow is designed as follows:
10307              1. When user clicks on Oracle Upload Toolbar Menu item in Excel
10308                 the WEB ADI related procedures will populate PA_FP_WEBADI_UPLOAD_INF table and does not commit
10309 
10310              2. Switcher API will be invoked after WEB ADI related code flow is completed.
10311 
10312              3. Swicher API internally invokes PA_FP_CALC_PLAN_PKG.CALCULATE which inturn
10313                 invokes the actual budget client extension
10314 
10315              4. In client extension, as part of bug fix 3736220 added code to Stamp client extension errors
10316                 in xface table (we stamp the val_error_code and val_error_flag of
10317                 PA_FP_WEBADI_UPLOAD_INF table)
10318 
10319              5. But the client extension is designed in such a way that when any error occurs in
10320                 client extension we roll back to the calling API PA_FP_CALC_PLAN_PKG. So the stamped data
10321                 gets rolled back. Ulimately the customers customized errors cannot be displayed in excel
10322                 due to this rollback.
10323 
10324               6. Hence in order to preserve the stamped  val_error_code and val_error_flag
10325                  of PA_FP_WEBADI_UPLOAD_INF table,introduced an autonomous procedure Stamp_Client_Extn_Errors
10326 
10327               7. As a result if we dont commit in the beginning when SWITCHER API is called, then when
10328                  Stamp_Client_Extn_Errors APi is invoked there will be no records in PA_FP_WEBADI_UPLOAD_INF.
10329             */
10330 
10331   fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
10332 
10333   x_return_status := FND_API.G_RET_STS_SUCCESS;
10334   x_msg_count := 0;
10335 
10336   -- initializing the translated out message string
10337   x_success_msg := FND_MESSAGE.GET_STRING
10338                         (APPIN   => 'PA',
10339                          NAMEIN  => 'PA_FP_UPL_ONLINE_SUCC_MSG');
10340 
10341   IF l_debug_mode = 'Y' THEN
10342         pa_debug.Set_Curr_Function
10343                     (p_function   => l_module_name,
10344                      p_debug_mode => l_debug_mode);
10345   END IF;
10346 
10347   --log1('----- Entering Switcher api -------');
10348 
10349   -- validating input parameter
10350   IF p_run_id IS NULL THEN
10351        IF l_debug_mode = 'Y' THEN
10352            pa_debug.g_err_stage := 'p_run_id is passed as null';
10353            pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
10354        END IF;
10355        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10356                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
10357                             p_token1         => 'PROCEDURENAME',
10358                             p_value1         => l_module_name);
10359        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10360   END IF;
10361 
10362   IF l_debug_mode = 'Y' THEN
10363         pa_debug.g_err_stage := 'Entering into switcher';
10364         pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
10365         pa_debug.g_err_stage := 'Fetching the header level info from tmp tbl';
10366         pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
10367   END IF;
10368 
10369   l_submit_flag:='N';
10370   IF p_submit_forecast_flag='Y' OR p_submit_budget_flag ='Y' THEN
10371 
10372        l_submit_flag:='Y';
10373 
10374   END IF;
10375 
10376 
10377   BEGIN
10378         SELECT  budget_version_id,
10379                 record_version_number,
10380                 prd_mask_rec_ver_number
10381         INTO    l_budget_version_id,
10382                 l_rec_version_number,
10383                 l_pm_rec_version_number
10384         FROM    pa_fp_webadi_upload_inf
10385         WHERE   run_id = p_run_id
10386         AND    Nvl(p_request_id, -99) = Nvl(request_id, -99)
10387         AND     rownum = 1;
10388   EXCEPTION
10389         WHEN NO_DATA_FOUND THEN
10390              IF l_debug_mode = 'Y' THEN
10391                  pa_debug.g_err_stage := 'No data found while reading header info';
10392                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10393              END IF;
10394              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10395   END;
10396 
10397 
10398   --Find out whether the layout is a periodic layout or not. This can be done by looking at the amount type column
10399   --in the table since it will be populated only for periodic layouts.
10400   BEGIN
10401         SELECT  'Y'
10402         INTO    is_periodic_setup
10403         FROM    DUAL
10404         WHERE EXISTS(SELECT  'X'
10405                      FROM    pa_fp_webadi_upload_inf
10406                      WHERE   amount_type_name IS NOT NULL
10407                      AND     run_id = p_run_id
10408                      AND    Nvl(p_request_id, -99) = Nvl(request_id, -99));
10409   EXCEPTION
10410         WHEN NO_DATA_FOUND THEN
10411              is_periodic_setup := 'N';
10412   END;
10413 
10414   IF l_debug_mode = 'Y' THEN
10415       pa_debug.g_err_stage := 'is_periodic_setup: =' || is_periodic_setup;
10416       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10417   END IF;
10418 
10419   -- throwing error if the header level info is missing
10420   IF l_budget_version_id IS NULL OR
10421      l_rec_version_number IS NULL  OR
10422      (is_periodic_setup='Y' AND l_pm_rec_version_number IS NULL) THEN
10423         IF l_debug_mode = 'Y' THEN
10424            pa_debug.g_err_stage := 'Header level values are null in interface table';
10425            pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
10426         END IF;
10427         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10428                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
10429                              p_token1         => 'PROCEDURENAME',
10430                              p_value1         => l_module_name);
10431         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10432   END IF;
10433 
10434 
10435   --log1('----- STAGE 1-------');
10436 
10437   IF l_debug_mode = 'Y' THEN
10438       pa_debug.g_err_stage := 'Deriving project id';
10439       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10440   END IF;
10441 
10442   BEGIN
10443        SELECT  bv.project_id,
10444                Nvl(pl.org_id, -99),
10445                etc_start_date
10446        INTO    l_project_id,
10447                l_org_id,
10448                l_etc_start_date
10449        FROM    pa_budget_versions bv,
10450                pa_projects_all pl
10451        WHERE   bv.budget_version_id = l_budget_version_id
10452        AND     bv.project_id = pl.project_id;
10453   EXCEPTION
10454        WHEN NO_DATA_FOUND THEN
10455              IF l_debug_mode = 'Y' THEN
10456                  pa_debug.g_err_stage := 'No data found while reading project id ..';
10457                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10458              END IF;
10459             UPDATE pa_fp_webadi_upload_inf
10460             SET    val_error_flag       = 'Y',
10461                    val_error_code       = 'PA_FP_WEBADI_VER_MODIFIED',
10462                    err_task_name        = nvl(task_name,'-98'),
10463                    err_task_number      = nvl(task_number,'-98'),
10464                    err_alias            = nvl(resource_alias,'-98'),
10465                    err_amount_type_code = nvl(amount_type_code,'-98')
10466             WHERE  run_id=p_run_id
10467             AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
10468 
10469             x_return_status := FND_API.G_RET_STS_ERROR;
10470             IF l_debug_mode = 'Y' THEN
10471                pa_debug.reset_curr_function;
10472             END IF;
10473 
10474              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10475   END;
10476 
10477   --log1('----- STAGE 2-------');
10478 
10479   MO_GLOBAL.SET_POLICY_CONTEXT('S',l_org_id);
10480 
10481   IF l_debug_mode = 'Y' THEN
10482       pa_debug.g_err_stage := 'Calling pa_fp_gen_amount_utils.get_plan_version_dtls';
10483       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10484   END IF;
10485   --log1('----- STAGE 2.1-------'||l_project_id);
10486     --log1('----- STAGE 2.2-------'||l_budget_version_id);
10487   pa_fp_gen_amount_utils.get_plan_version_dtls
10488         (p_project_id          => l_project_id,
10489          p_budget_version_id   => l_budget_version_id,
10490          x_fp_cols_rec         => l_version_info_rec,
10491          x_return_status       => x_return_status,
10492          x_msg_count           => l_msg_count,
10493          x_msg_data            => l_msg_data);
10494 
10495        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10496                 IF l_debug_mode = 'Y' THEN
10497                      pa_debug.g_err_stage := 'Call to get_plan_version_dtls returned with error';
10498                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10499                 END IF;
10500                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10501           END IF;
10502   --log1('----- STAGE 2.3-------'||x_return_status);
10503     --log1('----- STAGE 2.4-------'||l_budget_version_id);
10504 
10505   IF l_debug_mode = 'Y' THEN
10506       pa_debug.g_err_stage := 'Calling validate_header_info';
10507       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10508   END IF;
10509 
10510   --log1('----- STAGE 3-------');
10511     --log1('1 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10512   validate_header_info
10513      ( p_calling_mode           => p_calling_mode,
10514        p_run_id                 => p_run_id,
10515        p_budget_version_id      => l_budget_version_id,
10516        p_record_version_number  => l_rec_version_number,
10517        p_pm_rec_version_number  => l_pm_rec_version_number,
10518        p_submit_flag            => l_submit_flag,
10519        p_request_id             => p_request_id,
10520        x_return_status          => x_return_status,
10521        x_msg_data               => l_msg_count,
10522        x_msg_count              => l_msg_data);
10523     --log1('2 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10524 
10525      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10526            IF l_debug_mode = 'Y' THEN
10527                 pa_debug.g_err_stage := 'Call to validate_header_info returned with error';
10528                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10529            END IF;
10530            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10531      END IF;
10532 
10533   -- checking, if the layout is periodic one
10534   IF l_debug_mode = 'Y' THEN
10535       pa_debug.g_err_stage := 'Checking for periodic setup';
10536       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10537   END IF;
10538 
10539   --log1('----- STAGE 4-------');
10540 
10541   --log1('----- STAGE 5-------');
10542   --dbms_output.put_line('--------l_org_id ---------' || l_org_id);
10543   --dbms_output.put_line('--------l_version_info_rec.x_period_mask_id---------' || l_version_info_rec.x_period_mask_id);
10544   --dbms_output.put_line('--------l_version_info_rec.x_time_phased_code ---------' || l_version_info_rec.x_time_phased_code);
10545   --dbms_output.put_line('--------l_version_info_rec.x_current_planning_period ---------' ||l_version_info_rec.x_current_planning_period);
10546   -- populating the tables for period start/end date to be passed to prepare_val_input
10547   -- if the version is time phased and the layout is periodic
10548   IF l_version_info_rec.x_time_phased_code <> 'N' AND
10549      is_periodic_setup = 'Y' THEN
10550         OPEN l_prd_start_end_date_csr(l_org_id,
10551                                       l_version_info_rec.x_period_mask_id,
10552                                       l_version_info_rec.x_time_phased_code,
10553                                       l_version_info_rec.x_current_planning_period);
10554         /*LOOP*/
10555               FETCH l_prd_start_end_date_csr
10556               BULK COLLECT INTO  /*l_prd_date_rec;*/
10557               l_prd_start_date_tbl,
10558               l_prd_end_date_tbl;
10559               /*EXIT WHEN l_prd_date_rec.start_date IS NULL;
10560 
10561               l_prd_start_date_tbl.EXTEND(1);
10562               l_prd_start_date_tbl(l_prd_start_date_tbl.COUNT) := l_prd_date_rec.start_date;
10563               l_prd_end_date_tbl.EXTEND(1);
10564               l_prd_end_date_tbl(l_prd_end_date_tbl.COUNT) := l_prd_date_rec.end_date;
10565         END LOOP;*/
10566         CLOSE l_prd_start_end_date_csr;
10567 
10568   END IF; -- if periodic
10569 
10570   --dbms_output.put_line('--------l_prd_start_date_tbl.COUNT ---------' || l_prd_start_date_tbl.COUNT);
10571   --dbms_output.put_line('--------l_prd_end_date_tbl.COUNT ---------' || l_prd_end_date_tbl.COUNT);
10572 
10573   IF l_debug_mode = 'Y' THEN
10574       pa_debug.g_err_stage := 'Calling prepare_val_input';
10575       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10576   END IF;
10577 
10578   --log1('----- STAGE 6-------');
10579  --log1('3 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10580 
10581   IF is_periodic_setup = 'Y' THEN
10582         prepare_val_input
10583            ( p_run_id                   => p_run_id,
10584              p_request_id               => p_request_id,
10585              p_version_info_rec         => l_version_info_rec,
10586              p_prd_start_date_tbl       => l_prd_start_date_tbl,
10587              p_prd_end_date_tbl         => l_prd_end_date_tbl,
10588              p_org_id                   => l_org_id,
10589              x_budget_lines             => l_budget_line_in_tbl,
10590              x_etc_quantity_tbl         => l_etc_quantity_tbl,
10591              x_etc_raw_cost_tbl         => l_etc_raw_cost_tbl,
10592              x_etc_burdened_cost_tbl    => l_etc_burdened_cost_tbl,
10593              x_etc_revenue_tbl          => l_etc_revenue_tbl,
10594              x_raw_cost_rate_tbl        => l_bl_raw_cost_rate_tbl,
10595              x_burd_cost_rate_tbl       => l_bl_burd_cost_rate_tbl,
10596              x_bill_rate_tbl            => l_bl_bill_rate_tbl,
10597              x_planning_start_date_tbl  => l_bl_plan_start_date_tbl,
10598              x_planning_end_date_tbl    => l_bl_plan_end_date_tbl,
10599              x_uom_tbl                  => l_bl_uom_tbl,
10600              x_mfc_cost_type_tbl        => l_mfc_cost_type_tbl,
10601              x_spread_curve_name_tbl    => l_spread_curve_name_tbl,
10602              x_sp_fixed_date_tbl        => l_sp_fixed_date_tbl,
10603              x_etc_method_name_tbl      => l_etc_method_name_tbl,
10604              x_spread_curve_id_tbl      => l_spread_curve_id_tbl,
10605              x_delete_flag_tbl          => l_delete_flag_tbl,
10606              x_ra_id_tbl                => l_ra_id_tbl,
10607              x_res_class_code_tbl       => l_res_class_code_tbl,
10608              x_rate_based_flag_tbl      => l_rate_based_flag_tbl,
10609              x_rbs_elem_id_tbl          => l_rbs_elem_id_tbl,
10610              x_amt_type_tbl             => l_amt_type_tbl,
10611              x_first_pd_bf_pm_en_dt     => l_first_pd_bf_pm_en_dt,
10612              x_last_pd_af_pm_st_dt      => l_last_pd_af_pm_st_dt,
10613              x_inf_tbl_rec_tbl          => l_inf_tbl_rec_tbl,
10614              x_num_of_rec_processed     => l_record_counter,
10615              x_return_status            => x_return_status,
10616              x_msg_count                => l_msg_count,
10617              x_msg_data                 => l_msg_data);
10618 
10619            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10620                  IF l_debug_mode = 'Y' THEN
10621                       pa_debug.g_err_stage := 'Call to prepare_val_input returned with error';
10622                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10623                  END IF;
10624                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10625            END IF;
10626   ELSE
10627         prepare_val_input
10628            ( p_run_id                   => p_run_id,
10629              p_request_id               => p_request_id,
10630              p_version_info_rec         => l_version_info_rec,
10631              p_prd_start_date_tbl       => l_prd_start_date_tbl,
10632              p_prd_end_date_tbl         => l_prd_end_date_tbl,
10633              p_org_id                   => l_org_id,
10634              x_budget_lines             => l_budget_line_in_tbl,
10635              x_etc_quantity_tbl         => l_etc_quantity_tbl,
10636              x_etc_raw_cost_tbl         => l_etc_raw_cost_tbl,
10637              x_etc_burdened_cost_tbl    => l_etc_burdened_cost_tbl,
10638              x_etc_revenue_tbl          => l_etc_revenue_tbl,
10639              x_raw_cost_rate_tbl        => l_bl_raw_cost_rate_tbl,
10640              x_burd_cost_rate_tbl       => l_bl_burd_cost_rate_tbl,
10641              x_bill_rate_tbl            => l_bl_bill_rate_tbl,
10642              x_planning_start_date_tbl  => l_bl_plan_start_date_tbl,
10643              x_planning_end_date_tbl    => l_bl_plan_end_date_tbl,
10644              x_uom_tbl                  => l_bl_uom_tbl,
10645              x_mfc_cost_type_tbl        => l_mfc_cost_type_tbl,
10646              x_spread_curve_name_tbl    => l_spread_curve_name_tbl,
10647              x_sp_fixed_date_tbl        => l_sp_fixed_date_tbl,
10648              x_etc_method_name_tbl      => l_etc_method_name_tbl,
10649              x_spread_curve_id_tbl      => l_spread_curve_id_tbl,
10650              x_delete_flag_tbl          => l_delete_flag_tbl,
10651              x_ra_id_tbl                => l_ra_id_tbl,
10652              x_res_class_code_tbl       => l_res_class_code_tbl,
10653              x_rate_based_flag_tbl      => l_rate_based_flag_tbl,
10654              x_rbs_elem_id_tbl          => l_rbs_elem_id_tbl,
10655              x_amt_type_tbl             => l_amt_type_tbl,
10656              x_first_pd_bf_pm_en_dt     => l_first_pd_bf_pm_en_dt,
10657              x_last_pd_af_pm_st_dt      => l_last_pd_af_pm_st_dt,
10658              x_inf_tbl_rec_tbl          => l_inf_tbl_rec_tbl,
10659              x_num_of_rec_processed     => l_record_counter,
10660              x_return_status            => x_return_status,
10661              x_msg_count                => l_msg_count,
10662              x_msg_data                 => l_msg_data);
10663 
10664            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10665                  IF l_debug_mode = 'Y' THEN
10666                       pa_debug.g_err_stage := 'Call to prepare_val_input returned with error';
10667                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10668                  END IF;
10669                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10670            END IF;
10671   END IF; -- periodic check
10672     --log1('3 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10673     --log1('3.1 '||l_inf_tbl_rec_tbl.count);
10674   --log1('----- STAGE 7------- l_budget_line_in_tbl.count '||l_budget_line_in_tbl.count);
10675   -- getting other required information to call validate_budget_lines
10676 
10677   IF l_version_info_rec.x_version_type = 'COST' THEN
10678           l_allow_qty_flag := l_version_info_rec.x_cost_quantity_flag;
10679   ELSIF l_version_info_rec.x_version_type = 'REVENUE' THEN
10680           l_allow_qty_flag := l_version_info_rec.x_rev_quantity_flag;
10681   ELSIF l_version_info_rec.x_version_type = 'ALL' THEN
10682           l_allow_qty_flag := l_version_info_rec.x_all_quantity_flag;
10683   END IF;
10684 
10685   IF l_debug_mode = 'Y' THEN
10686       pa_debug.g_err_stage := 'Calling validate_budget_lines';
10687       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10688   END IF;
10689     --log1('4 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10690 
10691   l_spread_curve_id_tbl_1 := l_spread_curve_id_tbl;
10692   pa_budget_pvt.validate_budget_lines
10693      (p_run_id                          => p_run_id
10694      ,p_calling_context                 => 'WEBADI'
10695      ,p_pa_project_id                   => l_version_info_rec.x_project_id
10696      ,p_budget_type_code                => null     -- pass null
10697      ,p_fin_plan_type_id                => l_version_info_rec.x_fin_plan_type_id
10698      ,p_version_type                    => l_version_info_rec.x_version_type
10699      ,p_resource_list_id                => l_version_info_rec.x_resource_list_id
10700      ,p_time_phased_code                => l_version_info_rec.x_time_phased_code
10701      ,p_budget_entry_method_code        => null -- pass null
10702      ,p_entry_level_code                => l_version_info_rec.x_fin_plan_level_code
10703      ,p_allow_qty_flag                  => l_allow_qty_flag
10704      ,p_allow_raw_cost_flag             => l_version_info_rec.x_raw_cost_flag
10705      ,p_allow_burdened_cost_flag        => l_version_info_rec.x_burdened_flag
10706      ,p_allow_revenue_flag              => l_version_info_rec.x_revenue_flag
10707      ,p_multi_currency_flag             => l_version_info_rec.x_plan_in_multi_curr_flag
10708      ,p_project_cost_rate_type          => null
10709      ,p_project_cost_rate_date_typ      => null
10710      ,p_project_cost_rate_date          => null
10711      ,p_project_cost_exchange_rate      => null
10712      ,p_projfunc_cost_rate_type         => null
10713      ,p_projfunc_cost_rate_date_typ     => null
10714      ,p_projfunc_cost_rate_date         => null
10715      ,p_projfunc_cost_exchange_rate     => null
10716      ,p_project_rev_rate_type           => null
10717      ,p_project_rev_rate_date_typ       => null
10718      ,p_project_rev_rate_date           => null
10719      ,p_project_rev_exchange_rate       => null
10720      ,p_projfunc_rev_rate_type          => null
10721      ,p_projfunc_rev_rate_date_typ      => null
10722      ,p_projfunc_rev_rate_date          => null
10723      ,p_projfunc_rev_exchange_rate      => null
10724      ,p_version_info_rec                => l_version_info_rec
10725      ,p_allow_raw_cost_rate_flag        => l_version_info_rec.x_cost_rate_flag
10726      ,p_allow_burd_cost_rate_flag       => l_version_info_rec.x_burden_rate_flag
10727      ,p_allow_bill_rate_flag            => l_version_info_rec.x_bill_rate_flag
10728      ,p_raw_cost_rate_tbl               => l_bl_raw_cost_rate_tbl
10729      ,p_burd_cost_rate_tbl              => l_bl_burd_cost_rate_tbl
10730      ,p_bill_rate_tbl                   => l_bl_bill_rate_tbl
10731      ,p_uom_tbl                         => l_bl_uom_tbl
10732      ,p_planning_start_date_tbl         => l_bl_plan_start_date_tbl
10733      ,p_planning_end_date_tbl           => l_bl_plan_end_date_tbl
10734      ,p_delete_flag_tbl                 => l_delete_flag_tbl
10735      ,p_mfc_cost_type_tbl               => l_mfc_cost_type_tbl
10736      ,p_spread_curve_name_tbl           => l_spread_curve_name_tbl
10737      ,p_sp_fixed_date_tbl               => l_sp_fixed_date_tbl
10738      ,p_etc_method_name_tbl             => l_etc_method_name_tbl
10739      ,p_spread_curve_id_tbl             => l_spread_curve_id_tbl_1
10740      ,p_amount_type_tbl                 => l_amt_type_tbl
10741      ,px_budget_lines_in                => l_budget_line_in_tbl
10742      ,x_budget_lines_out                => l_budget_line_out_tbl
10743      ,x_mfc_cost_type_id_tbl            => l_mfc_cost_type_id_tbl
10744      ,x_etc_method_code_tbl             => l_etc_method_code_tbl
10745      ,x_spread_curve_id_tbl             => l_spread_curve_id_tbl
10746      ,x_msg_count                       => l_msg_count
10747      ,x_msg_data                        => l_msg_data
10748      ,x_return_status                   => x_return_status);
10749     --log1('5 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10750     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10751          IF l_debug_mode = 'Y' THEN
10752               pa_debug.g_err_stage := 'Call to validate_budget_lines returned with error';
10753               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10754          END IF;
10755          RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10756     END IF;
10757   --log1('----- STAGE 9------- l_budget_line_in_tbl.count '||l_budget_line_in_tbl.count);
10758 
10759   IF l_debug_mode = 'Y' THEN
10760       pa_debug.g_err_stage := 'Call to  validate_budget_lines is complete';
10761       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10762       pa_debug.g_err_stage := 'Checking for errors';
10763       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10764   END IF;
10765 
10766   BEGIN
10767         SELECT 'X'
10768         INTO   l_error_indicator_flag
10769         FROM   DUAL
10770         WHERE  EXISTS (SELECT  'Y'
10771                        FROM    pa_fp_webadi_upload_inf inf
10772                        WHERE   run_id = p_run_id
10773                        AND     Nvl(p_request_id, -99) = Nvl(request_id, -99)
10774                        AND     (inf.val_error_flag = 'Y'
10775                        OR       inf.val_error_code IS NOT NULL));
10776   EXCEPTION
10777         WHEN NO_DATA_FOUND THEN
10778              l_error_indicator_flag := 'N';
10779   END;
10780 
10781   IF l_debug_mode = 'Y' THEN
10782       pa_debug.g_err_stage := 'l_error_indicator_flag: ' || l_error_indicator_flag;
10783       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10784   END IF;
10785 
10786   --log1('----- STAGE 10-------');
10787   IF l_error_indicator_flag = 'X' THEN
10788         IF l_debug_mode = 'Y' THEN
10789             pa_debug.g_err_stage := 'Errors reported in the tmp tbl';
10790             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10791         END IF;
10792 
10793         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10794   END IF;
10795 
10796   -- bug 4428112: add the following procedure to update the txn currency code
10797   -- if it was not passed earlier, for a non MC enabled version with the validated
10798   -- currency code as returned from the validate_budget_lines.
10799   IF l_version_info_rec.x_plan_in_multi_curr_flag = 'N' THEN
10800         check_and_update_txn_curr_code
10801             (p_budget_line_tbl  => l_budget_line_in_tbl,
10802              px_inf_cur_rec_tbl => l_inf_tbl_rec_tbl,
10803              x_return_status    => x_return_status,
10804              x_msg_count        => l_msg_count,
10805              x_msg_data         => l_msg_data);
10806 
10807         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10808              IF l_debug_mode = 'Y' THEN
10809                   pa_debug.g_err_stage := 'Call to check_and_update_txn_curr_code returned with error';
10810                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10811              END IF;
10812              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10813         END IF;
10814   END IF;
10815 
10816 
10817   -- no errors reported in validate_budget_lines. Check if the processing can happen online or
10818   --a concurrent request has to be submitted
10819   IF p_calling_mode = 'STANDARD' THEN
10820       --log1('----- STAGE 10.1-------');
10821       -- For values other than site level
10822       l_profile_val := fnd_profile.value_specific
10823                      (name              => 'PA_FP_WEBADI_DATA_PRC_MODE',
10824                       user_id           => fnd_global.user_id,
10825                       responsibility_id => fnd_global.resp_id,
10826                       application_id    => 275);
10827       --log1('----- STAGE 10.2-------');
10828       IF l_profile_val IS NULL THEN
10829           -- For values at site level
10830           --log1('----- STAGE 10.3-------');
10831           l_profile_val := fnd_profile.value
10832                            (name => 'PA_FP_WEBADI_DATA_PRC_MODE');
10833           --log1('----- STAGE 10.4-------');
10834       END IF;
10835 
10836       IF l_profile_val = 'STANDARD' THEN
10837           --log1('----- STAGE 10.5-------');
10838           l_profile_thsld_val := fnd_profile.value_specific
10839                                  (name              => 'PA_FP_WEBADI_DATA_PRC_THSLD',
10840                                   user_id           => fnd_global.user_id,
10841                                   responsibility_id => fnd_global.resp_id,
10842                                   application_id    => 275);
10843           --log1('----- STAGE 10.6-------');
10844           IF l_profile_thsld_val IS NULL THEN
10845               --log1('----- STAGE 10.7-------');
10846               l_profile_thsld_val := fnd_profile.value
10847                                      (name => 'PA_FP_WEBADI_DATA_PRC_THSLD');
10848           --log1('----- STAGE 10.8-------');
10849           END IF;
10850 
10851           BEGIN
10852 
10853             SELECT to_number(l_profile_thsld_val)
10854             INTO   l_profile_thsld_num
10855             FROM   dual;
10856             --log1('----- STAGE 10.9-------');
10857           EXCEPTION
10858           WHEN INVALID_NUMBER THEN
10859              --log1('----- STAGE 10.10-------');
10860              l_profile_thsld_num := 0;
10861           END;
10862 
10863           IF l_profile_thsld_num < l_record_counter THEN
10864               --log1('----- STAGE 10.11-------');
10865               l_set_ppc_flag_on_err :='Y';
10866 
10867               -- bug 5657334: setting the conc program to refer only a single org as the same in the
10868               -- project context before submitting the request
10869               fnd_request.set_org_id(l_org_id);
10870               -- end bug 5657334
10871 
10872               l_request_id := FND_REQUEST.submit_request
10873                              (application   =>   'PA',
10874                               program       =>   'PAFPWACP',
10875                               argument1     =>   l_submit_flag, -- p_submit_ver_flag
10876                               argument2     =>   p_run_id );    -- p_run_id
10877               --log1('----- STAGE 10.12-------');
10878               IF l_request_id =0 THEN
10879                   --log1('----- STAGE 10.13-------');
10880                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10881 
10882               ELSE
10883                   --log1('----- STAGE 10.14-------');
10884 
10885                   -- updating the budget version with the request_id
10886                   UPDATE  pa_budget_versions
10887                   SET     plan_processing_code = 'XLUP',
10888                           request_id = l_request_id
10889                   WHERE   budget_version_id = l_budget_version_id;
10890 
10891                   UPDATE  pa_fp_webadi_upload_inf
10892                   SET     request_id = l_request_id
10893                   WHERE   run_id = p_run_id
10894                   AND     request_id IS NULL;
10895 
10896                   COMMIT; -- is required to query the interface table from conc prog.
10897                   --log1('----- STAGE 10.15-------');
10898 
10899                   -- If the concurrent request is submitted during upload then the request id should
10900                   -- be displayed to the user. Hence change the x_success_msg value
10901                   IF l_request_id IS NOT NULL AND
10902                      (l_request_id <> -99 OR
10903                       l_request_id <> -1) THEN
10904                           FND_MESSAGE.SET_NAME( APPLICATION =>'PA',
10905                                                 NAME        => 'PA_FP_WA_CONC_PRC_RESUB_INFO');
10906 
10907                           FND_MESSAGE.SET_TOKEN(TOKEN     => 'REQUEST_ID',
10908                                                 VALUE     => '' || l_request_id);
10909 
10910                           x_success_msg := FND_MESSAGE.GET;
10911                   END IF;
10912 
10913                   IF l_debug_mode = 'Y' THEN
10914                       pa_debug.reset_curr_function;
10915                   END IF;
10916 
10917                   RETURN;
10918 
10919               END IF;--IF l_request_id =0 THEN
10920 
10921           END IF;--IF l_profile_thsld_num < l_budget_line_in_tbl.COUNT
10922 
10923       END IF;--IF l_profile_val = 'STANDARD' THEN
10924 
10925   END IF;--IF p_calling_mode = 'STANDARD' TEHN
10926   -- preparing the inputs for preapre_pbl_input
10927 
10928   --log1('----- STAGE 11------- l_budget_line_in_tbl.count'||l_budget_line_in_tbl.count);
10929   IF is_periodic_setup = 'Y' THEN
10930         l_prep_pbl_calling_context := 'WEBADI_PERIODIC';
10931   ELSE
10932         l_prep_pbl_calling_context := 'WEBADI_NON_PERIODIC';
10933   END IF;
10934 
10935   -- calling prepare_pbl_input to prepare inputs for the process_budget_lines api from data passed
10936   -- back from validate_budget_lines
10937   IF l_debug_mode = 'Y' THEN
10938       pa_debug.g_err_stage := 'Calling prepare_pbl_input';
10939       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10940   END IF;
10941   --log1('6 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10942 
10943   l_spread_curve_id_tbl_1 := l_spread_curve_id_tbl;
10944   l_mfc_cost_type_id_tbl_1 := l_mfc_cost_type_id_tbl;
10945   l_delete_flag_tbl_1 := l_delete_flag_tbl;
10946   l_etc_method_code_tbl_1 := l_etc_method_code_tbl;
10947   l_sp_fixed_date_tbl_1 := l_sp_fixed_date_tbl;
10948 
10949   prepare_pbl_input
10950         (p_context                         => l_prep_pbl_calling_context,
10951          p_run_id                          => p_run_id,
10952          p_version_info_rec                => l_version_info_rec,
10953          p_inf_tbl_rec_tbl                 => l_inf_tbl_rec_tbl,
10954          p_project_id                      => l_project_id,
10955          p_budget_version_id               => l_budget_version_id,
10956          p_etc_start_date                  => l_etc_start_date,
10957          p_plan_class_code                 => l_version_info_rec.x_plan_class_code,
10958          p_first_pd_bf_pm_en_dt            => l_first_pd_bf_pm_en_dt,
10959          p_last_pd_af_pm_st_dt             => l_last_pd_af_pm_st_dt,
10960          p_budget_lines_tbl                => l_budget_line_in_tbl,
10961          p_ra_id_tbl                       => l_ra_id_tbl,
10962          p_prd_mask_st_date_tbl            => l_prd_start_date_tbl,
10963          p_prd_mask_end_date_tbl           => l_prd_end_date_tbl,
10964          p_planning_start_date_tbl         => l_bl_plan_start_date_tbl,
10965          p_planning_end_date_tbl           => l_bl_plan_end_date_tbl,
10966          p_etc_quantity_tbl                => l_etc_quantity_tbl,
10967          p_etc_raw_cost_tbl                => l_etc_raw_cost_tbl,
10968          p_etc_burdened_cost_tbl           => l_etc_burdened_cost_tbl,
10969          p_etc_revenue_tbl                 => l_etc_revenue_tbl,
10970          p_raw_cost_rate_tbl               => l_bl_raw_cost_rate_tbl,
10971          p_burd_cost_rate_tbl              => l_bl_burd_cost_rate_tbl,
10972          p_bill_rate_tbl                   => l_bl_bill_rate_tbl,
10973          p_spread_curve_id_tbl             => l_spread_curve_id_tbl_1,
10974          p_mfc_cost_type_id_tbl            => l_mfc_cost_type_id_tbl_1,
10975          p_etc_method_code_tbl             => l_etc_method_code_tbl_1,
10976          p_sp_fixed_date_tbl               => l_sp_fixed_date_tbl_1,
10977          p_res_class_code_tbl              => l_res_class_code_tbl,
10978          p_rate_based_flag_tbl             => l_rate_based_flag_tbl,
10979          p_rbs_elem_id_tbl                 => l_rbs_elem_id_tbl,
10980          p_delete_flag_tbl                 => l_delete_flag_tbl_1,
10981          p_request_id                      => p_request_id,
10982          x_task_id_tbl                     => l_task_id_tbl,
10983          x_rlm_id_tbl                      => l_rlm_id_tbl,
10984          x_ra_id_tbl                       => l_prc_ra_id_tbl,
10985          x_txn_currency_code_tbl           => l_txn_currency_code_tbl,
10986          x_planning_start_date_tbl         => l_planning_start_date_tbl,
10987          x_planning_end_date_tbl           => l_planning_end_date_tbl,
10988          x_total_qty_tbl                   => l_total_qty_tbl,
10989          x_total_raw_cost_tbl              => l_total_raw_cost_tbl,
10990          x_total_burdened_cost_tbl         => l_total_burdened_cost_tbl,
10991          x_total_revenue_tbl               => l_total_revenue_tbl,
10992          x_raw_cost_rate_tbl               => l_raw_cost_rate_tbl,
10993          x_burdened_cost_rate_tbl          => l_burdened_cost_rate_tbl,
10994          x_bill_rate_tbl                   => l_bill_rate_tbl,
10995          x_line_start_date_tbl             => l_line_start_date_tbl,
10996          x_line_end_date_tbl               => l_line_end_date_tbl,
10997          x_proj_cost_rate_type_tbl         => l_proj_cost_rate_type_tbl,
10998          x_proj_cost_rate_date_type_tbl    => l_proj_cost_rate_date_type_tbl,
10999          x_proj_cost_rate_tbl              => l_proj_cost_rate_tbl,
11000          x_proj_cost_rate_date_tbl         => l_proj_cost_rate_date_tbl,
11001          x_proj_rev_rate_type_tbl          => l_proj_rev_rate_type_tbl,
11002          x_proj_rev_rate_date_type_tbl     => l_proj_rev_rate_date_type_tbl,
11003          x_proj_rev_rate_tbl               => l_proj_rev_rate_tbl,
11004          x_proj_rev_rate_date_tbl          => l_proj_rev_rate_date_tbl,
11005          x_pfunc_cost_rate_type_tbl        => l_pfunc_cost_rate_type_tbl,
11006          x_pfunc_cost_rate_date_typ_tbl    => l_pfunc_cost_rate_date_typ_tbl,
11007          x_pfunc_cost_rate_tbl             => l_pfunc_cost_rate_tbl,
11008          x_pfunc_cost_rate_date_tbl        => l_pfunc_cost_rate_date_tbl,
11009          x_pfunc_rev_rate_type_tbl         => l_pfunc_rev_rate_type_tbl,
11010          x_pfunc_rev_rate_date_type_tbl    => l_pfunc_rev_rate_date_type_tbl,
11011          x_pfunc_rev_rate_tbl              => l_pfunc_rev_rate_tbl,
11012          x_pfunc_rev_rate_date_tbl         => l_pfunc_rev_rate_date_tbl,
11013          x_delete_flag_tbl                 => l_delete_flag_tbl,
11014          x_spread_curve_id_tbl             => l_spread_curve_id_tbl,
11015          x_mfc_cost_type_id_tbl            => l_mfc_cost_type_id_tbl,
11016          x_etc_method_code_tbl             => l_etc_method_code_tbl,
11017          x_sp_fixed_date_tbl               => l_sp_fixed_date_tbl,
11018          x_res_class_code_tbl              => l_prc_res_class_code_tbl,
11019          x_rate_based_flag_tbl             => l_prc_rate_based_flag_tbl,
11020          x_rbs_elem_id_tbl                 => l_prc_rbs_elem_id_tbl,
11021          x_change_reason_code_tbl          => l_change_reason_code_tbl,
11022          x_description_tbl                 => l_description_tbl,
11023          x_return_status                   => x_return_status,
11024          x_msg_count                       => l_msg_count,
11025          x_msg_data                        => l_msg_data);
11026 
11027          IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11028               IF l_debug_mode = 'Y' THEN
11029                    pa_debug.g_err_stage := 'Call to prepare_pbl_input returned with error';
11030                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11031               END IF;
11032               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11033          END IF;
11034 
11035   IF l_debug_mode = 'Y' THEN
11036       pa_debug.g_err_stage := 'Call to prepare_pbl_input done';
11037       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11038   END IF;
11039     --log1('7 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11040  --log1('----- STAGE 12-------');
11041   -- calling process_budget_lines to commit the validated data in DB
11042   IF l_debug_mode = 'Y' THEN
11043       pa_debug.g_err_stage := 'Calling process_budget_lines';
11044       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11045   END IF;
11046 
11047   --Till this point all the DMLs would have been executed on PA_FP_WEBADI_UPLOAD_INF. In case of any error
11048   --those changes need not be rolled back. process_budget_lines API will update the core B/F tables and hence
11049   --those updates should be reverted in case of any error. Hence establishing a savepoint now.
11050   SAVEPOINT SWITCHER;
11051   l_rollback_flag := 'Y';
11052       --log1('8 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11053 
11054   -- Bug 4431269: Populating the global variables to be used in calculate api
11055   -- for error reporting purpose
11056   G_FP_WA_CALC_CALLING_CONTEXT := 'WEBADI_CALCULATE';
11057 
11058   process_budget_lines
11059       ( p_context                         => l_prep_pbl_calling_context,
11060         p_budget_version_id               => l_budget_version_id,
11061         p_version_info_rec                => l_version_info_rec,
11062         p_task_id_tbl                     => l_task_id_tbl,
11063         p_rlm_id_tbl                      => l_rlm_id_tbl,
11064         p_ra_id_tbl                       => l_prc_ra_id_tbl,
11065         p_spread_curve_id_tbl             => l_spread_curve_id_tbl,
11066         p_mfc_cost_type_id_tbl            => l_mfc_cost_type_id_tbl,
11067         p_etc_method_code_tbl             => l_etc_method_code_tbl,
11068         p_sp_fixed_date_tbl               => l_sp_fixed_date_tbl,
11069         p_res_class_code_tbl              => l_prc_res_class_code_tbl,
11070         p_rate_based_flag_tbl             => l_prc_rate_based_flag_tbl,
11071         p_rbs_elem_id_tbl                 => l_prc_rbs_elem_id_tbl,
11072         p_txn_currency_code_tbl           => l_txn_currency_code_tbl,
11073         p_planning_start_date_tbl         => l_planning_start_date_tbl,
11074         p_planning_end_date_tbl           => l_planning_end_date_tbl,
11075         p_total_qty_tbl                   => l_total_qty_tbl,
11076         p_total_raw_cost_tbl              => l_total_raw_cost_tbl,
11077         p_total_burdened_cost_tbl         => l_total_burdened_cost_tbl,
11078         p_total_revenue_tbl               => l_total_revenue_tbl,
11079         p_raw_cost_rate_tbl               => l_raw_cost_rate_tbl,
11080         p_burdened_cost_rate_tbl          => l_burdened_cost_rate_tbl,
11081         p_bill_rate_tbl                   => l_bill_rate_tbl,
11082         p_line_start_date_tbl             => l_line_start_date_tbl,
11083         p_line_end_date_tbl               => l_line_end_date_tbl,
11084         p_proj_cost_rate_type_tbl         => l_proj_cost_rate_type_tbl,
11085         p_proj_cost_rate_date_type_tbl    => l_proj_cost_rate_date_type_tbl,
11086         p_proj_cost_rate_tbl              => l_proj_cost_rate_tbl,
11087         p_proj_cost_rate_date_tbl         => l_proj_cost_rate_date_tbl,
11088         p_proj_rev_rate_type_tbl          => l_proj_rev_rate_type_tbl,
11089         p_proj_rev_rate_date_type_tbl     => l_proj_rev_rate_date_type_tbl,
11090         p_proj_rev_rate_tbl               => l_proj_rev_rate_tbl,
11091         p_proj_rev_rate_date_tbl          => l_proj_rev_rate_date_tbl,
11092         p_pfunc_cost_rate_type_tbl        => l_pfunc_cost_rate_type_tbl,
11093         p_pfunc_cost_rate_date_typ_tbl    => l_pfunc_cost_rate_date_typ_tbl,
11094         p_pfunc_cost_rate_tbl             => l_pfunc_cost_rate_tbl,
11095         p_pfunc_cost_rate_date_tbl        => l_pfunc_cost_rate_date_tbl,
11096         p_pfunc_rev_rate_type_tbl         => l_pfunc_rev_rate_type_tbl,
11097         p_pfunc_rev_rate_date_type_tbl    => l_pfunc_rev_rate_date_type_tbl,
11098         p_pfunc_rev_rate_tbl              => l_pfunc_rev_rate_tbl,
11099         p_pfunc_rev_rate_date_tbl         => l_pfunc_rev_rate_date_tbl,
11100         p_change_reason_code_tbl          => l_change_reason_code_tbl,
11101         p_description_tbl                 => l_description_tbl,
11102         p_delete_flag_tbl                 => l_delete_flag_tbl,
11103         x_return_status                   => x_return_status,
11104         x_msg_count                       => l_msg_count,
11105         x_msg_data                        => l_msg_data);
11106     --log1('9 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11107         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11108              IF l_debug_mode = 'Y' THEN
11109                   pa_debug.g_err_stage := 'Call to process_budget_lines returned with error';
11110                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11111              END IF;
11112              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11113         END IF;
11114   -- Bug 4431269: Clearing the global variables used in calculate api
11115   -- for error reporting purpose
11116   G_FP_WA_CALC_CALLING_CONTEXT := null;
11117 
11118   IF l_debug_mode = 'Y' THEN
11119       pa_debug.g_err_stage := 'Call to process_budget_lines done';
11120       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11121   END IF;
11122       --log1('10 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11123   -- if the submit flag is passed as Y, then calling api to submit the version
11124   IF p_submit_budget_flag   = 'Y' OR
11125      p_submit_forecast_flag = 'Y' THEN
11126            IF l_debug_mode = 'Y' THEN
11127                pa_debug.g_err_stage := 'Calling pa_fin_plan_pub.Submit_Current_Working';
11128                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11129            END IF;
11130            pa_fin_plan_pub.Submit_Current_Working
11131                  (p_project_id              => l_version_info_rec.x_project_id,
11132                   p_budget_version_id       => l_budget_version_id,
11133                   p_record_version_number   => l_rec_version_number,
11134                   x_return_status           => x_return_status,
11135                   x_msg_count               => l_msg_count,
11136                   x_msg_data                => l_msg_data);
11137 
11138            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11139                 IF l_debug_mode = 'Y' THEN
11140                      pa_debug.g_err_stage := 'Call to pa_fin_plan_pub.Submit_Current_Working returned with error';
11141                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11142                 END IF;
11143                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11144            END IF;
11145   END IF;
11146       --log1('11 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11147   --log1('----- STAGE 13-------');
11148   -- If upload is successful then delete all the records
11149   -- from interface table
11150   IF l_debug_mode = 'Y' THEN
11151       pa_debug.g_err_stage := 'deleting from upload temp table';
11152       pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
11153   END IF;
11154     --log1('12 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11155 
11156   pa_fp_webadi_pkg.DELETE_XFACE
11157           ( p_run_id          =>  p_run_id
11158            ,x_return_status   =>  x_return_status
11159            ,x_msg_count       =>  x_msg_count
11160            ,x_msg_data        =>  l_msg_data     --x_msg_data  Bug 2764950
11161           ) ;
11162     --log1('13 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11163   COMMIT; /* to commit the data in DB after successful processing */
11164     --log1('14 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11165   --log1('----- STAGE 14-------');
11166   IF l_debug_mode = 'Y' THEN
11167       pa_debug.g_err_stage := 'Leaving pa_fp_webadi_pkg.switcher';
11168       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11169       pa_debug.reset_curr_function;
11170   END IF;
11171 
11172   --log1('----- Leaving Switcher api ------- '||x_return_status);
11173     --log1('End '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11174 EXCEPTION
11175 
11176 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11177   IF l_debug_mode = 'Y' THEN
11178       pa_debug.g_err_stage := 'Invalid Arg Exception Raised in Switcher';
11179       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11180       pa_debug.g_err_stage := 'Checking for errors';
11181       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11182   END IF;
11183 
11184   -- Bug 4431269: Clearing the global variables used in calculate api
11185   -- for error reporting purpose
11186   G_FP_WA_CALC_CALLING_CONTEXT := null;
11187   IF l_rollback_flag='Y' THEN
11188       IF l_debug_mode = 'Y' THEN
11189           pa_debug.g_err_stage := 'Rolling back to switcher';
11190           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11191       END IF;
11192       ROLLBACK TO SWITCHER;
11193       IF l_debug_mode = 'Y' THEN
11194           pa_debug.g_err_stage := 'Roll back to switcher done';
11195           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11196       END IF;
11197   END IF;
11198 
11199   -- checking if calculate has populated any errors in the global table
11200   IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
11201       -- calling an api to process the errors passed
11202       read_global_var_to_report_err
11203            (p_run_id          => p_run_id,
11204             x_return_status   => x_return_status,
11205             x_msg_count       => l_msg_count,
11206             x_msg_data        => l_msg_data);
11207   END IF;
11208 
11209   IF l_set_ppc_flag_on_err ='Y' THEN
11210       update_xl_data_for_new_req
11211        (p_request_id           => l_request_id,
11212         p_run_id               => p_run_id,
11213         p_plan_processing_code => 'XLUE',
11214         p_budget_version_id    => l_budget_version_id,
11215         p_null_out_cols        => 'N');
11216 
11217   END IF;
11218 
11219   COMMIT;
11220 
11221   l_msg_count := FND_MSG_PUB.count_msg;
11222 
11223   IF l_msg_count = 1 and x_msg_data IS NULL THEN
11224       PA_INTERFACE_UTILS_PUB.get_messages
11225           (p_encoded        => FND_API.G_TRUE
11226            ,p_msg_index      => 1
11227            ,p_msg_count      => l_msg_count
11228            ,p_msg_data       => l_msg_data
11229            ,p_data           => l_data
11230            ,p_msg_index_out  => l_msg_index_out);
11231       x_msg_data := l_data;
11232       x_msg_count := l_msg_count;
11233       x_success_msg:=l_data;
11234   ELSE
11235       x_msg_count := l_msg_count;
11236       x_success_msg :='Error In Upload';
11237   END IF;
11238 
11239   x_return_status := FND_API.G_RET_STS_ERROR;
11240 
11241   IF l_debug_mode = 'Y' THEN
11242       pa_debug.reset_curr_function;
11243   END IF;
11244   RETURN;
11245 
11246 WHEN OTHERS THEN
11247   -- Bug 4431269: Clearing the global variables used in calculate api
11248   -- for error reporting purpose
11249   G_FP_WA_CALC_CALLING_CONTEXT := null;
11250 
11251   IF l_rollback_flag='Y' THEN
11252       ROLLBACK TO SWITCHER;
11253   END IF;
11254   x_success_msg :='Error In Upload';
11255 
11256   -- checking if calculate has populated any errors in the global table
11257   IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
11258       -- calling an api to process the errors passed
11259       read_global_var_to_report_err
11260            (p_run_id          => p_run_id,
11261             x_return_status   => x_return_status,
11262             x_msg_count       => l_msg_count,
11263             x_msg_data        => l_msg_data);
11264   END IF;
11265 
11266   IF l_set_ppc_flag_on_err ='Y' THEN
11267       update_xl_data_for_new_req
11268        (p_request_id           => l_request_id,
11269         p_run_id               => p_run_id,
11270         p_plan_processing_code => 'XLUE',
11271         p_budget_version_id    => l_budget_version_id,
11272         p_null_out_cols        => 'N');
11273 
11274   END IF;
11275   COMMIT;
11276   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11277   x_msg_count     := 1;
11278   x_msg_data      := SQLERRM;
11279 
11280   FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
11281                           ,p_procedure_name  => 'switcher');
11282   IF l_debug_mode = 'Y' THEN
11283        pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
11284        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
11285   END IF;
11286 
11287   IF l_debug_mode = 'Y' THEN
11288       pa_debug.reset_curr_function;
11289   END IF;
11290   RAISE;
11291 
11292 END switcher;
11293 
11294 --This API will be called when thru the concurrent request that will be used to upload MS excel data to
11295 --Oracle Applications.
11296 PROCEDURE process_MSExcel_data
11297 (errbuf                      OUT    NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
11298  retcode                     OUT    NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
11299  p_submit_ver_flag           IN     VARCHAR2,
11300  p_run_id                    IN     pa_fp_webadi_upload_inf.run_id%TYPE)
11301  IS
11302 --Start of variables used for debugging
11303 l_return_status                            VARCHAR2(1);
11304 l_msg_count                                NUMBER := 0;
11305 l_msg_data                                 VARCHAR2(2000);
11306 l_data                                     VARCHAR2(2000);
11307 l_msg_index_out                            NUMBER;
11308 l_debug_mode                               VARCHAR2(30);
11309 l_module_name                              VARCHAR2(100):='PAFPWAPB.process_MSExcel_data';
11310 
11311 --End of variables used for debugging
11312  l_budget_version_id         pa_budget_versions.budget_version_id%TYPE;
11313  l_plan_class_code           pa_fin_plan_types_b.plan_class_code%TYPE;
11314  l_request_id                pa_budget_versions.request_id%TYPE;
11315  l_submit_bdgt_flag          VARCHAR2(1);
11316  l_submit_fcst_flag          VARCHAR2(1);
11317  l_version_type              pa_budget_versions.version_type%TYPE;
11318  l_success_msg               VARCHAR2(1000);
11319 
11320 -- the following cursor would query the interface table for any validation failure
11321  -- error messages present in the interface table corresponding to a set of run_id
11322  -- for the upload session.
11323 
11324  CURSOR l_get_error_msg_to_report_csr (c_run_id        pa_fp_webadi_upload_inf.run_id%TYPE,
11325                                        c_plan_class    pa_fin_plan_types_b.plan_class_code%TYPE,
11326                                        c_version_type  pa_budget_versions.version_type%TYPE,
11327                                        c_request_id    pa_budget_versions.request_id%TYPE)
11328  IS
11329  -- 4497321.Perf Fix:Modified SELECT query inorder to improve the performance.
11330  SELECT  inf.task_number || '/' || inf.task_name task_info,
11331          inf.resource_alias resource_info,
11332          inf.txn_currency_code currency,
11333          plu1.meaning amount_type,
11334          plu2.meaning error
11335  FROM    pa_fp_webadi_upload_inf inf,
11336          pa_lookups plu1,
11337          pa_lookups plu2
11338  WHERE   inf.run_id = c_run_id
11339  AND     Nvl(inf.val_error_flag, 'N') = 'Y'
11340  AND     inf.val_error_code IS NOT NULL
11341  AND     plu1.lookup_type = DECODE (c_plan_class, 'BUDGET',
11342                                                    DECODE(c_version_type,
11343                                                          'COST', 'PA_FP_XL_COST_BDGT_AMT_TYPES',
11344                                                          'REVENUE', 'PA_FP_XL_REV_BDGT_AMT_TYPES',
11345                                                          'PA_FP_XL_ALL_BDGT_AMT_TYPES'),
11346                                                  'FORECAST', DECODE(c_version_type,
11347                                                  'COST', 'PA_FP_XL_COST_FCST_AMT_TYPES',
11348                                                  'REVENUE', 'PA_FP_XL_REV_FCST_AMT_TYPES',
11349                                                  'PA_FP_XL_ALL_FCST_AMT_TYPES'))
11350  AND     (inf.amount_type_code IS NULL OR plu1.lookup_code = Nvl(inf.amount_type_code, '-99'))
11351  AND     plu2.lookup_type = 'PA_FP_WEBADI_ERR_1'
11352  AND     inf.val_error_code = plu2.lookup_code
11353  AND     Nvl(c_request_id, -99) = Nvl(inf.request_id, -99);
11354 
11355  l_error_info_rec l_get_error_msg_to_report_csr%ROWTYPE;
11356 
11357  BEGIN
11358     -- SAVEPOINT process_MSExcel_data;
11359     retcode:='0';
11360     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
11361     l_debug_mode := NVL(l_debug_mode, 'Y');
11362     --log1('----- STAGE CR1-------');
11363     -- Set curr function
11364     IF l_debug_mode='Y' THEN
11365         pa_debug.set_curr_function(
11366                     p_function   =>'PAFPWAPB.process_MSExcel_data'
11367                    ,p_debug_mode => l_debug_mode );
11368     END IF;
11369 
11370     l_request_id:=fnd_global.conc_request_id;
11371     --log1('----- STAGE CR2-------');
11372     --log1('----- p_run_id------' || p_run_id);
11373     --log1('----- p_submit_ver_flag------' || p_submit_ver_flag);
11374     --Get the budget version id from the interface table to find out whether the budget version belongs to a
11375     --BUDGET plan type or FORECAST plan type
11376 
11377     -- 4497323.Perf Fix:The SELECT query is splitted into two queries in order to improve performance.
11378     SELECT budget_version_id
11379     INTO   l_budget_version_id
11380     FROM   pa_fp_webadi_upload_inf inf
11381     WHERE  inf.run_id = p_run_id
11382     AND    Nvl(l_request_id,-99) = Nvl(request_id,-99)
11383     AND    rownum=1;
11384 
11385     SELECT fin.plan_class_code,
11386            pbv.version_type
11387     INTO   l_plan_class_code,
11388            l_version_type
11389     FROM   pa_budget_versions pbv,
11390            pa_fin_plan_types_b fin
11391     WHERE  pbv.budget_version_id = l_budget_version_id
11392     AND    fin.fin_plan_type_id = pbv.fin_plan_type_id;
11393 
11394         --log1('----- STAGE CR3-------');
11395     IF l_debug_mode='Y' THEN
11396         pa_debug.g_err_stage:='l_request_id '||l_request_id;
11397         pa_debug.write( l_module_name,pa_debug.g_err_stage,3);
11398 
11399         pa_debug.g_err_stage:='Callng update_xl_data_for_new_req';
11400         pa_debug.write( l_module_name,pa_debug.g_err_stage,3);
11401 
11402     END IF;
11403     --log1('----- STAGE CR4-------');
11404     update_xl_data_for_new_req
11405     (p_request_id           => l_request_id,
11406      p_run_id               => p_run_id,
11407      p_plan_processing_code => 'XLUP',
11408      p_budget_version_id    => l_budget_version_id,
11409      p_null_out_cols        => 'Y');
11410     --log1('----- STAGE CR5-------');
11411     COMMIT;--This is done so that the users can find that the concurrent request is in progress from the other
11412            --interfaces.
11413     --log1('----- STAGE CR6-------');
11414     l_submit_bdgt_flag:='N';
11415     l_submit_fcst_flag:='N';
11416     IF l_plan_class_code='BUDGET' THEN
11417 
11418         l_submit_bdgt_flag:=p_submit_ver_flag;
11419     ELSE
11420         l_submit_fcst_flag:=p_submit_ver_flag;
11421     END IF;
11422     --log1('----- STAGE CR7-------');
11423     pa_fp_webadi_pkg.switcher
11424     (p_calling_mode         => 'ONLINE',
11425      p_run_id               => p_run_id,
11426      p_submit_budget_flag   => l_submit_bdgt_flag,
11427      p_submit_forecast_flag => l_submit_fcst_flag,
11428      p_request_id           => l_request_id,
11429      x_success_msg          => l_success_msg,
11430      x_return_status        => l_return_status,
11431      x_msg_count            => l_msg_count,
11432      x_msg_data             => l_msg_data);
11433     --log1('----- STAGE CR8-------');
11434     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11435         --log1('----- STAGE CR9-------');
11436         IF l_debug_mode = 'Y' THEN
11437             pa_debug.g_err_stage:='pa_fp_webadi_pkg.switcher returned error';
11438             pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11439         END IF;
11440         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11441     END IF;
11442 
11443     -- upon successful completion of the concurrent processing,
11444     -- stamp success code in pa_budget_versions and retain the request_id
11445     UPDATE  pa_budget_versions
11446     SET     plan_processing_code = 'XLUS',
11447             record_version_number = (record_version_number + 1)
11448     WHERE   budget_version_id = l_budget_version_id;
11449 
11450     COMMIT; -- is required to query the interface table from conc prog.
11451     --log1('----- STAGE 10-------');
11452     IF l_debug_mode = 'Y' THEN
11453         pa_debug.reset_curr_function;
11454     END IF;
11455 
11456 EXCEPTION
11457 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11458     -- ROLLBACK TO process_MSExcel_data;
11459     -- bug 4477397: doing a general rollback instead to savepoint
11460     ROLLBACK;
11461     l_msg_count := FND_MSG_PUB.count_msg;
11462     IF l_msg_count = 1 THEN
11463        PA_INTERFACE_UTILS_PUB.get_messages
11464              (p_encoded        => FND_API.G_TRUE
11465               ,p_msg_index      => 1
11466               ,p_msg_count      => l_msg_count
11467               ,p_msg_data       => l_msg_data
11468               ,p_data           => l_data
11469               ,p_msg_index_out  => l_msg_index_out);
11470 
11471        errbuf  := l_data;
11472 
11473     END IF;
11474     retcode := '2';  --Changed this to '2' for bug #4504482
11475     --log1('----- STAGE CR10-------');
11476     -- preparing an output error log to display all the validation failures, if any,
11477     -- corresponding to a particular record in the interface table
11478     IF l_debug_mode = 'Y' THEN
11479            --Before calling pa_debug.write_file we shd call pa_debug.set_process if we want write_file to write to the log file.
11480            pa_debug.set_process( x_process    => 'PLSQL'
11481                                 ,x_write_file => 'LOG'
11482                                 ,x_debug_mode => l_debug_mode
11483                                );
11484            pa_debug.g_err_stage := '- Task Number/Task Name, Resource, Currency, Amount Type, Error - ';
11485            pa_debug.write_file('LOG', pa_debug.g_err_stage);
11486            pa_debug.g_err_stage := '------------------------------------------------------------------';
11487            pa_debug.write_file('LOG', pa_debug.g_err_stage);
11488 
11489            OPEN l_get_error_msg_to_report_csr(p_run_id, l_plan_class_code, l_version_type, l_request_id);
11490            LOOP
11491                  FETCH l_get_error_msg_to_report_csr
11492                  INTO  l_error_info_rec;
11493 
11494                  EXIT WHEN l_error_info_rec.task_info IS NULL;
11495 
11496                  pa_debug.g_err_stage := l_error_info_rec.task_info || ', ' || l_error_info_rec.resource_info || ', ' ||
11497                                          l_error_info_rec.currency || ', ' || l_error_info_rec.amount_type || ', ' ||
11498                                          l_error_info_rec.error;
11499                  pa_debug.write_file('LOG', pa_debug.g_err_stage);
11500            END LOOP;
11501            CLOSE l_get_error_msg_to_report_csr;
11502 
11503            --Bug 4504482: Added code to read the msg stack and populate the concurrent
11504            --program log in addition to the interface table.
11505            pa_debug.g_err_stage := '-----------------Additional Errors--------------------------------';
11506            pa_debug.write_file('LOG', pa_debug.g_err_stage);
11507            FOR msg_count IN 1 ..  l_msg_count
11508            LOOP
11509                PA_UTILS.Get_Encoded_Msg(p_index    => msg_count,
11510                                         p_msg_out  => l_data);
11511            pa_debug.g_err_stage := l_data;
11512            pa_debug.write_file('LOG', pa_debug.g_err_stage);
11513            END LOOP;
11514 
11515     END IF;
11516 
11517     IF l_debug_mode = 'Y' THEN
11518        pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
11519        pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11520         -- reset curr function
11521         pa_debug.reset_curr_function();
11522     END IF;
11523     --log1('----- STAGE CR11-------');
11524     update_xl_data_for_new_req
11525     (p_request_id           => l_request_id,
11526      p_run_id               => p_run_id,
11527      p_plan_processing_code => 'XLUE',
11528      p_budget_version_id    => l_budget_version_id,
11529      p_null_out_cols        => 'N');
11530     --log1('----- STAGE CR12-------');
11531     COMMIT;
11532     --log1('----- STAGE CR13-------');
11533     RETURN;
11534 WHEN OTHERS THEN
11535     -- ROLLBACK TO process_MSExcel_data;
11536     -- bug 4477397: doing a general rollback instead to savepoint
11537     ROLLBACK;
11538     errbuf      := SQLERRM;
11539 
11540     FND_MSG_PUB.add_exc_msg( p_pkg_name       => 'pa_fp_webadi_pkg'
11541                            ,p_procedure_name  => 'process_MSExcel_data');
11542 
11543     IF l_debug_mode = 'Y' THEN
11544        pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
11545        pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11546         -- reset curr function
11547         pa_debug.Reset_Curr_Function();
11548     END IF;
11549     retcode := '2';
11550 
11551     update_xl_data_for_new_req
11552     (p_request_id           => l_request_id,
11553      p_run_id               => p_run_id,
11554      p_plan_processing_code => 'XLUE',
11555      p_budget_version_id    => l_budget_version_id,
11556      p_null_out_cols        => 'N');
11557 
11558     COMMIT;
11559     RAISE;
11560 END process_MSExcel_data;
11561 
11562 
11563 --Bug 4584865
11564 /*This api is a private api which is called to calculate the Group Period information
11565   of the budget version based on the period mask of the budget version.The calculated
11566   Group Periods are stored in the OUT parameter x_periods_tbl.*/
11567 
11568 PROCEDURE GET_PERIOD_INFORMATION(p_period_mask_id          IN pa_proj_fp_options.cost_period_mask_id%TYPE,
11569                                  p_time_phased_code        IN pa_proj_fp_options.cost_time_phased_code%TYPE,
11570                                  p_org_id                  IN pa_projects_all.org_id%TYPE,
11571                                  p_current_planning_period IN pa_proj_fp_options.cost_current_planning_period%TYPE,
11572                                  x_periods_tbl             OUT NOCOPY periods_tbl,
11573                                  x_return_status           OUT NOCOPY VARCHAR2,
11574                                  x_msg_count               OUT NOCOPY NUMBER,
11575                                  x_msg_data                OUT NOCOPY NUMBER)
11576 IS
11577       --This Cursor is used to get Period Mask informations of the Period Mask associated with the budget version.
11578       CURSOR period_mask_cur(c_period_mask_id   pa_period_mask_details.period_mask_id%TYPE)
11579       IS
11580       SELECT pmd.period_mask_id,
11581              pmd.num_of_periods,
11582              pmd.anchor_period_flag,
11583              pmd.from_anchor_start,
11584              pmd.from_anchor_end,
11585              pmd.from_anchor_position
11586       FROM   pa_period_mask_details pmd
11587       WHERE  pmd.period_mask_id = c_period_mask_id
11588       AND    pmd.from_anchor_position not in(-99999,99999)
11589       ORDER BY pmd.from_anchor_position;
11590 --PL/SQL table created based on Cursor period_mask_cur.
11591 TYPE period_mask_tbl IS TABLE OF period_mask_cur%ROWTYPE;
11592 
11593       CURSOR pa_impl_cur(c_org_id   pa_implementations_all.org_id%TYPE)
11594       IS
11595       SELECT org_id,
11596              period_set_name,
11597              pa_period_type,
11598              set_of_books_id
11599       FROM   pa_implementations_all
11600       WHERE  org_id = c_org_id;
11601 
11602       --This Cursor is used to get period information based on the Time Phasing of the budget version.
11603       CURSOR period_grouping_cur(c_period_set_name   gl_periods.period_set_name%TYPE,
11604                                  c_set_of_books_id   gl_sets_of_books.set_of_books_id%TYPE,
11605                                  c_org_id            pa_implementations_all.org_id%TYPE,
11606                                  c_pa_period_type    pa_implementations_all.pa_period_type%TYPE,
11607                                  c_time_phased_code  pa_proj_fp_options.cost_time_phased_code%TYPE)
11608       IS
11609       SELECT ROW_NUMBER() OVER( PARTITION BY gl.period_set_name,gl.period_type ORDER BY gl.start_date ) row_num,
11610              gl.start_date start_date,
11611              gl.end_Date end_date,
11612              gl.period_name period_name,
11613              gl.period_type period_type,
11614              gl.period_set_name period_set_name,
11615              gsb.accounted_period_type accounted_period_type,
11616              c_org_id
11617       FROM   gl_periods gl,
11618              gl_sets_of_books gsb
11619       WHERE  gl.period_set_name=decode(c_time_phased_code,'P',c_period_set_name,'G',gsb.period_set_name)
11620       AND    gsb.set_of_books_id=c_set_of_books_id
11621       AND    gl.ADJUSTMENT_PERIOD_FLAG ='N'
11622       AND    gl.period_type = decode(c_time_phased_code,'P',c_pa_period_type,
11623                                                   'G',gsb.accounted_period_type);
11624 --PL/SQL table created based on Cursor period_grouping_cur.
11625 TYPE period_grouping_tbl IS TABLE OF period_grouping_cur%ROWTYPE
11626 INDEX BY PLS_INTEGER;
11627 
11628     l_debug_mode       VARCHAR2(1);
11629     l_return_status    VARCHAR2(1);
11630     l_data             VARCHAR2(2000);
11631     l_msg_count        NUMBER := 0;
11632     l_msg_data         VARCHAR2(2000);
11633     l_msg_index_out    NUMBER;
11634     l_module_name      VARCHAR2(100) := 'pa_fp_webadi_pkg.get_period_information';
11635     l_period_mask_tbl   period_mask_tbl;
11636     l_pa_impl_rec   pa_impl_cur%ROWTYPE;
11637     l_period_grouping_tbl   period_grouping_tbl;
11638     l_periods_rec   periods_rec;
11639     glcp_rownum   NUMBER;
11640     glsd_rownum   NUMBER;
11641     gled_rownum   NUMBER;
11642     period_name   VARCHAR2(50); --gl_periods.period_name%TYPE;
11643     start_date   gl_periods.start_date%TYPE;
11644     end_date   gl_periods.end_date%TYPE;
11645     x   NUMBER := 1;
11646 BEGIN
11647     x_msg_count := 0;
11648     x_return_status := FND_API.G_RET_STS_SUCCESS;
11649     l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'Y');
11650 
11651     IF l_debug_mode = 'Y' THEN
11652         pa_debug.set_curr_function(p_function   => 'GET_PERIOD_INFORMATION',
11653                                    p_debug_mode => l_debug_mode);
11654         pa_debug.g_err_stage := ':In pa_fp_webadi_pkg.GET_PERIOD_INFORMATION';
11655         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11656     END IF;
11657     --Validation is done for the input parameters.
11658     IF l_debug_mode = 'Y' THEN
11659        pa_debug.g_err_stage := 'Validating Input parameters';
11660        pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11661     END IF;
11662 
11663     IF p_period_mask_id IS NULL THEN
11664        IF l_debug_mode = 'Y' THEN
11665           pa_debug.g_err_stage := 'p_period_mask_id is passed as null';
11666           pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11667        END IF;
11668        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11669                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
11670                             p_token1         => 'PROCEDURENAME',
11671                             p_value1         => l_module_name);
11672        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11673     END IF;
11674 
11675     IF p_time_phased_code IS NULL THEN
11676        IF l_debug_mode = 'Y' THEN
11677           pa_debug.g_err_stage := 'p_time_phased_code is passed as null';
11678           pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11679        END IF;
11680        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11681                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
11682                             p_token1         => 'PROCEDURENAME',
11683                             p_value1         => l_module_name);
11684        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11685     END IF;
11686 
11687     IF p_org_id IS NULL THEN
11688        IF l_debug_mode = 'Y' THEN
11689           pa_debug.g_err_stage := 'p_org_id is passed as null';
11690           pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11691        END IF;
11692        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11693                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
11694                             p_token1         => 'PROCEDURENAME',
11695                             p_value1         => l_module_name);
11696        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11697     END IF;
11698 
11699     IF p_current_planning_period IS NULL THEN
11700        IF l_debug_mode = 'Y' THEN
11701           pa_debug.g_err_stage := 'p_current_planning_period is passed as null';
11702           pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11703        END IF;
11704        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11705                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
11706                             p_token1         => 'PROCEDURENAME',
11707                             p_value1         => l_module_name);
11708        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11709     END IF;
11710     --Initializing the out parameter which is pl/sql table.
11711     x_periods_tbl := periods_tbl();
11712 
11713     --Getting the Period Mask details of the period mask associated with the budget version.
11714     OPEN period_mask_cur(p_period_mask_id);
11715     FETCH period_mask_cur BULK COLLECT INTO l_period_mask_tbl;
11716     CLOSE period_mask_cur;
11717     IF l_period_mask_tbl.count = 0 THEN
11718        IF l_debug_mode = 'Y' THEN
11719           pa_debug.g_err_stage := 'Period Mask Details not found for the budget version';
11720           pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11721        END IF;
11722        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11723                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
11724                             p_token1         => 'PROCEDURENAME',
11725                             p_value1         => l_module_name);
11726        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11727     END IF;
11728 
11729     --Information are got from pa_implentations_all table for the project org_id and stored in a pl/sql record.
11730     OPEN pa_impl_cur(p_org_id);
11731     FETCH pa_impl_cur INTO l_pa_impl_rec;
11732     CLOSE pa_impl_cur;
11733 
11734     --Period Informations are got from gl_periods table and stored in a pl/sql table.
11735     FOR rec in period_grouping_cur(l_pa_impl_rec.period_set_name,
11736                                    l_pa_impl_rec.set_of_books_id,
11737                                    l_pa_impl_rec.org_id,
11738                                    l_pa_impl_rec.pa_period_type,
11739                                    p_time_phased_code)
11740     LOOP
11741         l_period_grouping_tbl(rec.row_num) := rec;
11742     END LOOP;
11743 
11744     --Getting the row number of the Current Planning period from the pl/sql table l_period_grouping_tbl.
11745     IF l_period_grouping_tbl.count >0 THEN
11746        FOR n IN l_period_grouping_tbl.first..l_period_grouping_tbl.last
11747        LOOP
11748           IF l_period_grouping_tbl(n).period_name = p_current_planning_period THEN
11749              glcp_rownum := l_period_grouping_tbl(n).row_num;
11750              EXIT;
11751           END IF;
11752        END LOOP;
11753     ELSE
11754        IF l_debug_mode = 'Y' THEN
11755           pa_debug.g_err_stage := 'Period information not found for the budget version';
11756           pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11757        END IF;
11758        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11759                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
11760                             p_token1         => 'PROCEDURENAME',
11761                             p_value1         => l_module_name);
11762        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11763     END IF;
11764 
11765     --The Group Period informations are got and stored in a pl/sql table based on the Period Mask.
11766     FOR i IN l_period_mask_tbl.first..l_period_mask_tbl.last
11767     LOOP
11768        glsd_rownum := l_period_mask_tbl(i).from_anchor_start+glcp_rownum;
11769        gled_rownum := l_period_mask_tbl(i).from_anchor_end+glcp_rownum;
11770        IF glsd_rownum >= l_period_grouping_tbl.first AND gled_rownum <= l_period_grouping_tbl.last THEN
11771          IF glsd_rownum = gled_rownum THEN
11772              period_name := l_period_grouping_tbl(glsd_rownum).period_name;
11773          ELSE
11774              period_name := l_period_grouping_tbl(glsd_rownum).period_name||' To '||l_period_grouping_tbl(gled_rownum).period_name;
11775          END IF;
11776           start_date := l_period_grouping_tbl(glsd_rownum).start_date;
11777           end_date := l_period_grouping_tbl(gled_rownum).end_date;
11778           l_periods_rec.sequence_number := x;
11779           l_periods_rec.period_name := period_name;
11780           l_periods_rec.start_date := start_date;
11781           l_periods_rec.end_date := end_date;
11782           x_periods_tbl.extend();
11783           x_periods_tbl(x) := l_periods_rec;
11784           x := x+1;
11785       ELSE
11786           NULL;
11787       END IF;
11788     END LOOP;
11789 
11790 EXCEPTION
11791     WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11792          l_msg_count := FND_MSG_PUB.count_msg;
11793          IF l_msg_count = 1 AND x_msg_data IS NULL THEN
11794              PA_INTERFACE_UTILS_PUB.get_messages
11795                    (p_encoded        => FND_API.G_TRUE
11796                    ,p_msg_index      => 1
11797                    ,p_msg_count      => l_msg_count
11798                    ,p_msg_data       => l_msg_data
11799                    ,p_data           => l_data
11800                    ,p_msg_index_out  => l_msg_index_out);
11801                    x_msg_data := l_data;
11802                    x_msg_count := l_msg_count;
11803          ELSE
11804             x_msg_count := l_msg_count;
11805          END IF;
11806             x_return_status := FND_API.G_RET_STS_ERROR;
11807          IF l_debug_mode = 'Y' THEN
11808              pa_debug.reset_curr_function;
11809          END IF;
11810     RETURN;
11811 
11812     WHEN OTHERS THEN
11813          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11814          x_msg_count     := 1;
11815          x_msg_data      := SQLERRM;
11816          FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'pa_fp_webadi_pkg'
11817                                  ,p_procedure_name  => 'get_period_information');
11818          IF l_debug_mode = 'Y' THEN
11819              pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
11820              pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11821              pa_debug.reset_curr_function;
11822          END IF;
11823     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11824 END GET_PERIOD_INFORMATION;
11825 
11826 --Bug 4584865.
11827 --This API is called to insert records into pa_fp_webadi_xface_tmp
11828 --during downloading budget line details into excel spreadsheet.
11829 
11830 PROCEDURE insert_periodic_tmp_table
11831           (p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE
11832           ,x_return_status     OUT NOCOPY VARCHAR2
11833           ,x_msg_count         OUT NOCOPY NUMBER
11834           ,x_msg_data          OUT NOCOPY VARCHAR2 )
11835 IS
11836       /* Bug 5144013: Changes are made in the cursor to make use of the new entity pa_resource_asgn_curr
11837          which is introduced in MRUP3 of 11i. The changes are done as part of merging the MRUP3 changes
11838          done in 11i into R12.
11839       */
11840       --This Cursor is used to get Resource Assignment information associated with the budget version.
11841       CURSOR res_ass_cur(c_budget_version_id   pa_budget_versions.budget_version_id%TYPE,
11842                          c_project_id   pa_projects_all.project_id%TYPE,
11843                          c_parent_structure_version_id   pa_proj_element_versions.parent_structure_version_id%TYPE,
11844                          c_proj_fp_options_id   pa_proj_fp_options.proj_fp_options_id%TYPE)
11845       IS
11846       SELECT pra.resource_assignment_id resource_assignment_id,
11847              nvl(pe.name,ppa.long_name) task_name,
11848              nvl(pe.element_number,ppa.segment1) task_number,
11849              nvl(pev.display_sequence,-1) task_display_sequence,
11850              prlm.alias resource_name,
11851              pra.resource_list_member_id,
11852              uom.meaning unit_of_measure,
11853              pra.spread_curve_id spread_curve_id,
11854              psc.name spread_curve,
11855              pra.planning_start_date,
11856              pra.planning_end_date,
11857              pra.mfc_cost_type_id mfc_cost_type_id,
11858              cct.cost_type mfc_cost_type,
11859              pra.etc_method_code etc_method_code,
11860              etc.meaning etc_method,
11861              pev.proj_element_id project_element_id,
11862              decode(pra.transaction_source_code,NULL,NULL,
11863                     (SELECT meaning
11864                      FROM PA_LOOKUPS
11865                      WHERE LOOKUP_TYPE='PA_FP_FCST_GEN_SRC_ALL'
11866                      AND LOOKUP_CODE= nvl(pra.transaction_source_code, (
11867                                                                         SELECT lookup_code
11868                                                                         FROM pa_lookups
11869                                                                         WHERE lookup_type='PA_FP_FCST_GEN_SRC_ALL'
11870                                                                         AND rownum=1)))) etc_source,
11871              pftc.txn_currency_code txn_currency_code,
11872              pftc.project_cost_exchange_rate project_cost_exchange_rate,
11873              pftc.project_rev_exchange_rate project_rev_exchange_rate,
11874              pftc.projfunc_cost_exchange_rate projfunc_cost_exchange_rate,
11875              pftc.projfunc_rev_exchange_rate projfunc_rev_exchange_rate
11876       FROM   pa_resource_assignments pra,
11877              pa_resource_asgn_curr prac,
11878              pa_fp_txn_currencies pftc,
11879              pa_proj_elements pe,
11880              pa_proj_element_versions pev,
11881              pa_resource_list_members prlm,
11882              pa_lookups uom,
11883              pa_spread_curves_tl psc,
11884              cst_cost_types cct,
11885              pa_lookups etc,
11886              pa_projects_all ppa
11887       WHERE pra.budget_version_id = c_budget_version_id
11888       AND prac.budget_version_id = pra.budget_version_id
11889       AND prac.resource_assignment_id = pra.resource_assignment_id
11890       AND pftc.fin_plan_version_id = prac.budget_version_id
11891       AND pftc.txn_currency_code = prac.txn_currency_code
11892       AND pftc.proj_fp_options_id = c_proj_fp_options_id
11893       AND pra.resource_list_member_id = prlm.resource_list_member_id
11894       AND decode(pra.task_id,0,pev.proj_element_id,pra.task_id)=pev.proj_element_id
11895       AND decode(pra.task_id,0,pev.parent_structure_version_id,pev.element_version_id)=pev.element_version_id
11896       AND pev.proj_element_id = pe.proj_element_id(+)
11897       AND pe.object_type(+)='PA_TASKS'
11898       AND pev.parent_structure_version_id = c_parent_structure_version_id
11899       AND nvl(pra.spread_curve_id,1) = psc.spread_curve_id
11900       AND etc.lookup_type = 'PA_FP_ETC_METHOD'
11901       AND etc.lookup_code(+) = pra.etc_method_code
11902       AND cct.cost_type_id(+) = pra.mfc_cost_type_id
11903       AND uom.lookup_type = 'UNIT'
11904       AND uom.LOOKUP_CODE = nvl(prlm.UNIT_OF_MEASURE,'HOURS')
11905       AND psc.language = userenv('LANG')
11906       AND ppa.project_id = c_project_id
11907       ORDER BY task_display_sequence;
11908 --PL/SQL table created based on Cursor res_ass_cur.
11909 TYPE res_ass_tbl IS TABLE OF res_ass_cur%ROWTYPE; --Bug 5641300: Converted the index by pl/sql table to ordinary pl/sql table.
11910 -- INDEX BY PLS_INTEGER;
11911 
11912 --This Record is used to store the Plan Settings level information of the budget version.
11913 Type proj_fp_options_rec  is record(fin_plan_preference_code   pa_proj_fp_options.fin_plan_preference_code%TYPE,
11914                                     projfunc_cost_rate_type   pa_proj_fp_options.projfunc_cost_rate_type%TYPE,
11915                                     projfunc_cost_rate_date_type   pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE,
11916                                     projfunc_cost_rate_date   pa_proj_fp_options.projfunc_cost_rate_date%TYPE,
11917                                     project_cost_rate_type   pa_proj_fp_options.project_cost_rate_type%TYPE,
11918                                     project_cost_rate_date_type   pa_proj_fp_options.project_cost_rate_date_type%TYPE,
11919                                     project_cost_rate_date   pa_proj_fp_options.project_cost_rate_date%TYPE,
11920                                     projfunc_rev_rate_type   pa_proj_fp_options.projfunc_rev_rate_type%TYPE,
11921                                     projfunc_rev_rate_date_type   pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE,
11922                                     projfunc_rev_rate_date   pa_proj_fp_options.projfunc_rev_rate_date%TYPE,
11923                                     project_rev_rate_type   pa_proj_fp_options.project_rev_rate_type%TYPE,
11924                                     project_rev_rate_date_type   pa_proj_fp_options.project_rev_rate_date_type%TYPE,
11925                                     project_rev_rate_date   pa_proj_fp_options.project_rev_rate_date%TYPE);
11926 l_proj_fp_options_rec   proj_fp_options_rec;
11927 
11928        --This Cursor is used to get the Amount Type and Conversion Attribute information of the budget version.
11929        CURSOR amt_type_cur(c_project_id   pa_fp_proj_xl_amt_types.project_id%TYPE,
11930                            c_fin_plan_type_id   pa_fp_proj_xl_amt_types.fin_plan_type_id%TYPE,
11931                            c_option_type   pa_fp_proj_xl_amt_types.option_type%TYPE,
11932                            c_plan_class_code   pa_fin_plan_types_b.plan_class_code%TYPE)
11933        IS
11934        SELECT  amt.amount_type_code,
11935                amt_lu.meaning amount_type_name,
11936                decode(decode(amt.amount_type_code,'TOTAL_REV',l_proj_fp_options_rec.projfunc_rev_rate_type,l_proj_fp_options_rec.projfunc_cost_rate_type),null,null,
11937                (SELECT pctv1.USER_CONVERSION_TYPE
11938                 FROM   GL_DAILY_CONVERSION_TYPES pctv1
11939                 WHERE  pctv1.CONVERSION_TYPE= nvl(decode(amt.amount_type_code,'TOTAL_REV',l_proj_fp_options_rec.projfunc_rev_rate_type,l_proj_fp_options_rec.projfunc_cost_rate_type),'Corporate'))) projfunc_rate_type,
11940 
11941                decode(decode(amt.amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.projfunc_rev_rate_type,'User',null,l_proj_fp_options_rec.projfunc_rev_rate_date_type),
11942                decode(l_proj_fp_options_rec.projfunc_cost_rate_type,'User',null,l_proj_fp_options_rec.projfunc_cost_rate_date_type)),null,null,
11943                (SELECT plk_d1.meaning
11944                 FROM   pa_lookups plk_d1
11945                 WHERE  plk_d1.lookup_type='PA_FP_RATE_DATE_TYPE'
11946                 AND    plk_d1.lookup_code=NVL(decode(amt.amount_type_code,'TOTAL_REV',
11947                decode(l_proj_fp_options_rec.projfunc_rev_rate_type,'User',null,l_proj_fp_options_rec.projfunc_rev_rate_date_type),
11948                decode(l_proj_fp_options_rec.projfunc_cost_rate_type,'User',null,l_proj_fp_options_rec.projfunc_cost_rate_date_type)),'FIXED_DATE'))) projfunc_rate_date_type,
11949 
11950                decode(amt.amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.projfunc_rev_rate_date_type,'FIXED_DATE',l_proj_fp_options_rec.projfunc_rev_rate_date,TO_DATE(null)),
11951                decode(l_proj_fp_options_rec.projfunc_cost_rate_date_type,'FIXED_DATE',l_proj_fp_options_rec.projfunc_cost_rate_date,TO_DATE(null))) projfunc_rate_date,
11952 
11953                decode(decode(amt.amount_type_code,'TOTAL_REV',l_proj_fp_options_rec.project_rev_rate_type,l_proj_fp_options_rec.project_cost_rate_type),null,null,
11954                (SELECT pctv2.USER_CONVERSION_TYPE
11955                 FROM   GL_DAILY_CONVERSION_TYPES pctv2
11956                 WHERE  pctv2.CONVERSION_TYPE= nvl(decode(amt.amount_type_code,'TOTAL_REV',l_proj_fp_options_rec.project_rev_rate_type,l_proj_fp_options_rec.project_cost_rate_type),'Corporate'))) project_rate_type,
11957 
11958                decode(decode(amt.amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.project_rev_rate_type,'User',null,l_proj_fp_options_rec.PROJECT_REV_RATE_DATE_TYPE),
11959                decode(l_proj_fp_options_rec.project_cost_rate_type,'User',null,l_proj_fp_options_rec.project_cost_rate_date_type)),null,null,
11960                (SELECT plk_d2.meaning
11961                 FROM   pa_lookups plk_d2
11962                 WHERE  plk_d2.lookup_type='PA_FP_RATE_DATE_TYPE'
11963                 AND    plk_d2.lookup_code=NVL(decode(amt.amount_type_code,'TOTAL_REV',
11964                decode(l_proj_fp_options_rec.project_rev_rate_type,'User',null,l_proj_fp_options_rec.project_rev_rate_date_type),
11965                decode(l_proj_fp_options_rec.project_cost_rate_type,'User',null,l_proj_fp_options_rec.project_cost_rate_date_type)),'FIXED_DATE'))) project_rate_date_type,
11966 
11967                decode(amt.amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.project_rev_rate_date_type,'FIXED_DATE',l_proj_fp_options_rec.project_rev_rate_date,TO_DATE(null)),
11968                decode(l_proj_fp_options_rec.project_cost_rate_date_type,'FIXED_DATE',l_proj_fp_options_rec.project_cost_rate_date,TO_DATE(null))) project_rate_date
11969       FROM     pa_fp_proj_xl_amt_types amt,
11970                pa_lookups amt_lu
11971       WHERE    amt.project_id = c_project_id
11972       AND      amt.fin_plan_type_id = c_fin_plan_type_id
11973       AND      amt.option_type = c_option_type
11974       AND      amt_lu.lookup_type = decode(c_plan_class_code,'BUDGET', decode(c_option_type,'COST','PA_FP_XL_COST_BDGT_AMT_TYPES','REVENUE','PA_FP_XL_REV_BDGT_AMT_TYPES','ALL','PA_FP_XL_ALL_BDGT_AMT_TYPES'),
11975                                                                             'FORECAST',decode(c_option_type,'COST','PA_FP_XL_COST_FCST_AMT_TYPES','REVENUE','PA_FP_XL_REV_FCST_AMT_TYPES','ALL','PA_FP_XL_ALL_FCST_AMT_TYPES'))
11976       AND      amt_lu.lookup_code = amt.amount_type_code
11977       ORDER BY amount_type_name;
11978 --PL/SQL table created based on amt_type_cur.
11979 TYPE amt_type_tbl IS TABLE OF amt_type_cur%ROWTYPE;
11980 
11981 --Commented out the below for bug 5330532
11982 /*
11983 --This Record is used to store the Transaction Currencies Associated with the budget version.
11984 TYPE txn_curr_rec IS RECORD(txn_currency_code            pa_fp_txn_currencies.txn_currency_code%TYPE,
11985                             project_cost_exchange_rate   pa_fp_txn_currencies.project_cost_exchange_rate%TYPE,
11986                             project_rev_exchange_rate    pa_fp_txn_currencies.project_rev_exchange_rate%TYPE,
11987                             projfunc_cost_exchange_rate  pa_fp_txn_currencies.projfunc_cost_exchange_rate%TYPE,
11988                             projfunc_rev_exchange_rate   pa_fp_txn_currencies.projfunc_rev_exchange_rate%TYPE);
11989 --PL/SQL table created based on txn_curr_rec.
11990 TYPE txn_curr_tbl IS TABLE OF txn_curr_rec;
11991 */
11992 
11993 /* Bug 5144013: Commented out the below cursors txn_curr_cur and txn_curr_rate_cur
11994    as the transaction currencies and the exchange rates of those currencies can be got
11995    from the cursor res_ass_cur. This is done as part of merging the MRUP3 changes done
11996    in 11i into R12.
11997 */
11998 /* Start of code changes for bug 5330532*/
11999 --Cursor created for fetching transaction currencies.
12000 /* --Bug 5144013.
12001 CURSOR txn_curr_cur(c_budget_version_id pa_budget_lines.budget_version_id%TYPE,
12002                     c_ra_id             pa_budget_lines.resource_assignment_id%TYPE)
12003 IS
12004 SELECT DISTINCT(txn_currency_code)
12005 FROM   pa_budget_lines pbl
12006 WHERE  pbl.budget_version_id = c_budget_version_id
12007 AND    pbl.resource_assignment_id = c_ra_id;
12008 --PL/SQL table created based on txn_curr_cur.
12009 TYPE txn_curr_tbl IS TABLE OF txn_curr_cur%ROWTYPE;
12010 
12011 --Cursor created for fetching transaction currency rates.
12012 CURSOR txn_curr_rate_cur(c_budget_version_id   pa_fp_txn_currencies.fin_plan_version_id%TYPE,
12013                          c_proj_fp_options_id  pa_fp_txn_currencies.proj_fp_options_id%TYPE)
12014 IS
12015 SELECT  pftc.txn_currency_code,
12016         pftc.project_cost_exchange_rate,
12017         pftc.project_rev_exchange_rate,
12018         pftc.projfunc_cost_exchange_rate,
12019         pftc.projfunc_rev_exchange_rate
12020 FROM pa_fp_txn_currencies pftc
12021 WHERE pftc.fin_plan_version_id = c_budget_version_id
12022 AND   pftc.proj_fp_options_id = c_proj_fp_options_id;
12023 --PL/SQL table created based on txn_curr_rate_cur.
12024 TYPE txn_curr_rate_tbl IS TABLE OF txn_curr_rate_cur%ROWTYPE INDEX BY VARCHAR2(15);
12025 */ --Bug 5144013.
12026 /* End of code changes for bug 5330532*/
12027 
12028 l_global_tmp_rec   pa_fp_webadi_xface_tmp%ROWTYPE; --Bug 5284640.
12029 NO_RA_EXC   EXCEPTION; --Bug 5360205.
12030 
12031     l_debug_mode             VARCHAR2(1);
12032     l_return_status          VARCHAR2(1);
12033     l_msg_count              NUMBER := 0;
12034     l_data                   VARCHAR2(2000);
12035     l_msg_data               VARCHAR2(2000);
12036     l_msg_index_out          NUMBER;
12037     l_module_name            VARCHAR2(100) := 'pa_fp_webadi_pkg.insert_periodic_tmp_table';
12038     l_project_id             pa_budget_versions.project_id%TYPE;
12039     l_budget_version_id      pa_budget_versions.budget_version_id%TYPE;
12040     l_version_info_rec       PA_FP_GEN_AMOUNT_UTILS.FP_COLS;
12041     l_project_structure_version_id   pa_budget_versions.project_structure_version_id%TYPE;
12042     l_struct_status_flag   VARCHAR2(1);
12043     l_ci_id   pa_budget_versions.ci_id%TYPE;
12044     l_AR_flag   pa_budget_versions.approved_rev_plan_type_flag%TYPE;
12045     l_agr_curr_code   pa_agreements_all.agreement_currency_code%TYPE;
12046     l_agr_conv_reqd_flag   VARCHAR2(1);
12047     l_fin_plan_type_id   pa_proj_fp_options.fin_plan_type_id%TYPE;
12048     l_proj_fp_options_id   pa_proj_fp_options.proj_fp_options_id%TYPE;
12049     l_version_type   pa_budget_versions.version_type%TYPE;
12050     l_period_mask_id   pa_proj_fp_options.cost_period_mask_id%TYPE;
12051     l_time_phased_code   pa_proj_fp_options.cost_time_phased_code%TYPE;
12052     l_org_id   pa_projects_all.org_id%TYPE;
12053     l_current_planning_period   pa_proj_fp_options.cost_current_planning_period%TYPE;
12054     l_fin_plan_preference_code   pa_proj_fp_options.fin_plan_preference_code%TYPE;
12055     l_plan_class_code   pa_fin_plan_types_b.plan_class_code%TYPE;
12056     l_project_name   pa_projects_all.name%TYPE;
12057     l_project_number   pa_projects_all.segment1%TYPE;
12058     l_txn_currency_code   pa_fp_txn_currencies.txn_currency_code%TYPE;
12059     l_projfunc_currency_code   pa_projects_all.projfunc_currency_code%TYPE;
12060     l_project_currency_code   pa_projects_all.project_currency_code%TYPE;
12061     l_multi_curr_flag   pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
12062     l_start_date   DATE;
12063     l_end_date   DATE;
12064     l_preceding_date   DATE;
12065     l_succeeding_date   DATE;
12066     cnt   NUMBER := 1;
12067     l_res_ass_tbl   res_ass_tbl;
12068     l_periods_tbl   periods_tbl;
12069     l_amt_type_tbl   amt_type_tbl;
12070     -- Bug 5144013: Commenting out the declaration of l_txn_curr_tbl and l_txn_curr_rate_tbl.
12071     --l_txn_curr_tbl   txn_curr_tbl := txn_curr_tbl(); --Bug 5330532.
12072     --l_txn_curr_rate_tbl   txn_curr_rate_tbl; --Bug 5330532.
12073     projfunc_exchange_rate   pa_fp_txn_currencies.projfunc_cost_exchange_rate%TYPE;
12074     project_exchange_rate   pa_fp_txn_currencies.project_cost_exchange_rate%TYPE;
12075     l_position NUMBER := 0; -- Bug 5284640.
12076     l_return NUMBER := 0; -- Bug 5284640.
12077 
12078 BEGIN
12079     x_msg_count := 0;
12080     x_return_status := FND_API.G_RET_STS_SUCCESS;
12081     l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'Y');
12082 
12083 
12084     IF l_debug_mode = 'Y' THEN
12085         pa_debug.set_curr_function( p_function   => 'INSERT_PERIODIC_TMP_TABLE'
12086                                    ,p_debug_mode => l_debug_mode );
12087         pa_debug.g_err_stage := ':In pa_fp_webadi_pkg.INSERT_PERIODIC_TMP_TABLE' ;
12088         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12089     END IF;
12090 
12091      l_budget_version_id := p_budget_version_id;
12092 
12093     --Validating Input Parameters.
12094     IF p_budget_version_id IS NULL THEN
12095         IF l_debug_mode = 'Y' THEN
12096             pa_debug.g_err_stage := 'p_budget_version_id is passed as null';
12097             pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12098         END IF;
12099         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12100                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12101                              p_token1         => 'PROCEDURENAME',
12102                              p_value1         => l_module_name);
12103         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12104     ELSE
12105         IF l_debug_mode = 'Y'  THEN
12106             pa_debug.g_err_stage := 'Fetching Project Information of the Budget Version';
12107             pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12108         END IF;
12109 
12110         --Fetching Project Information of the budget version and storing them in local variables.
12111         BEGIN
12112             SELECT ppa.project_id,
12113                    ppa.name,
12114                    ppa.segment1
12115             INTO   l_project_id,
12116                    l_project_name,
12117                    l_project_number
12118             FROM   pa_budget_versions pbv,
12119                    pa_projects_all ppa
12120             WHERE  pbv.budget_version_id = l_budget_version_id
12121             AND    pbv.project_id = ppa.project_id;
12122         EXCEPTION
12123             WHEN NO_DATA_FOUND THEN
12124                  IF l_debug_mode = 'Y'  THEN
12125                      pa_debug.g_err_stage := 'Error getting Project Information for the budget version';
12126                      pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12127                  END IF;
12128                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12129                                       p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12130                                       p_token1         => 'PROCEDURENAME',
12131                                       p_value1         => l_module_name);
12132             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12133         END;
12134     END IF;
12135     IF l_debug_mode = 'Y'  THEN
12136         pa_debug.g_err_stage := '-----Project Id : '||l_project_id||'-----';
12137         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12138         pa_debug.g_err_stage := 'Getting Budget Version Details';
12139         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12140     END IF;
12141 
12142     /*Getting Budget Version Details by calling the GET_PLAN_VERSION_DTLS api.
12143       The returned PL/SQL record l_version_info will contain the budget version details
12144     */
12145     PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS( p_project_id         => l_project_id,
12146                                                   p_budget_version_id  => l_budget_version_id,
12147                                                   x_fp_cols_rec        => l_version_info_rec,
12148                                                   x_return_status      => l_return_status,
12149                                                   x_msg_count          => l_msg_count,
12150                                                   x_msg_data           => l_msg_data);
12151 
12152     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12153        IF l_debug_mode = 'Y' THEN
12154            pa_debug.g_err_stage := 'Budget Version Details not found';
12155            pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12156        END IF;
12157        PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA',
12158                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12159                              p_token1         => 'PROCEDURENAME',
12160                              p_value1         => l_module_name);
12161        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12162     END IF;
12163 
12164     --Getting Structure Version Details and storing them in local variables.
12165     IF l_debug_mode = 'Y' THEN
12166         pa_debug.g_err_stage := 'Getting the Structure version information of the budget version';
12167         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12168     END IF;
12169        l_project_structure_version_id := l_version_info_rec.x_project_structure_version_id;
12170        l_struct_status_flag := PA_PROJECT_STRUCTURE_UTILS.check_struc_ver_published(l_project_id,
12171                                                                                  l_project_structure_version_id);
12172 
12173     /* Bug 5144013: Commenting out the below code by which we are getting the agreement currency of the plan
12174        version if the plan version is a change order version and the approved_rev_plan_type_flag of the plan
12175        version is 'Y'. This is done as we can get the the currencies from the cursor res_ass_cur by making use
12176        of the new entity pa_resource_asgn_curr. This is done as part of merging the MRUP3 changes done in 11i
12177        into R12
12178     */
12179     /* --Bug 5144013.
12180     --Getting CI Id and Approved Revenue Flag of the budget version and storing them in local variables.
12181     IF l_debug_mode = 'Y' THEN
12182         pa_debug.g_err_stage := 'Getting CI id and Approved Revenue flag of the budget version';
12183         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12184     END IF;
12185      BEGIN
12186          SELECT ci_id,
12187                 approved_rev_plan_type_flag
12188          INTO   l_ci_id,
12189                 l_AR_flag
12190          FROM   pa_budget_versions
12191          WHERE  budget_version_id = l_budget_version_id;
12192      EXCEPTION
12193          WHEN NO_DATA_FOUND THEN
12194                  IF l_debug_mode = 'Y'  THEN
12195                      pa_debug.g_err_stage := 'Error getting CI Id and Approved Revenue flag for the budget version';
12196                      pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12197                  END IF;
12198                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12199                                       p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12200                                       p_token1         => 'PROCEDURENAME',
12201                                       p_value1         => l_module_name);
12202             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12203      END;
12204     IF l_debug_mode = 'Y' THEN
12205         pa_debug.g_err_stage := '-----CI Id : '||l_ci_id||' , Approved Revenue Flag : '||l_AR_flag||'-----';
12206         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12207     END IF;
12208     */ --Bug 5144013.
12209 
12210     /*Getting the Agreement Details of the budget version if the budget version is CI version and and of
12211       Approved Revenue Plan Type.
12212     */
12213     /* --Bug 5144013.
12214     IF l_debug_mode = 'Y' THEN
12215         pa_debug.g_err_stage := 'Getting Agreement details if the budget versions is CI version and of Approved Revenue plan type';
12216         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12217     END IF;
12218     IF l_ci_id is not null AND L_AR_FLAG = 'Y' THEN
12219         PA_FIN_PLAN_UTILS2.get_agreement_details(
12220                                                  p_budget_version_id  => l_budget_version_id,
12221                                                  p_calling_mode       => 'WA_DOWNLOAD',
12222                                                  x_agr_curr_code      => l_agr_curr_code,
12223                                                  x_agr_conv_reqd_flag => l_agr_conv_reqd_flag,
12224                                                  x_return_status      => l_return_status);
12225          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12226             IF l_debug_mode = 'Y' THEN
12227                 pa_debug.g_err_stage := 'Error in Getting Agreement Details of the budget version';
12228                 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12229             END IF;
12230             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA',
12231                                   p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12232                                   p_token1         => 'PROCEDURENAME',
12233                                   p_value1         => l_module_name);
12234             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12235          END IF;
12236     END IF;
12237     IF l_debug_mode = 'Y' THEN
12238        pa_debug.g_err_stage := '-----Agreement Currency Code : '||l_agr_curr_code||'-----';
12239        pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12240     END IF;
12241     */ --Bug 5144013.
12242 
12243     /*Getting Plan Settings level information of the budget version and storing them in a PL/SQL record.
12244       The record l_proj_fp_options_rec will contain Plan Settings level information
12245     */
12246     IF l_debug_mode = 'Y' THEN
12247         pa_debug.g_err_stage := 'Getting Plan Settings level information of the budget version';
12248         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12249     END IF;
12250      l_fin_plan_type_id := l_version_info_rec.x_fin_plan_type_id;
12251      l_version_type := l_version_info_rec.x_version_type;
12252      l_proj_fp_options_id := l_version_info_rec.x_proj_fp_options_id;
12253      BEGIN
12254          SELECT  fin_plan_preference_code,
12255                  projfunc_cost_rate_type,
12256                  projfunc_cost_rate_date_type,
12257                  projfunc_cost_rate_date,
12258                  project_cost_rate_type,
12259                  project_cost_rate_date_type,
12260                  project_cost_rate_date,
12261                  projfunc_rev_rate_type,
12262                  projfunc_rev_rate_date_type,
12263                  projfunc_rev_rate_date,
12264                  project_rev_rate_type,
12265                  project_rev_rate_date_type,
12266                  project_rev_rate_date
12267          INTO    l_proj_fp_options_rec
12268          FROM    pa_proj_fp_options
12269          WHERE   proj_fp_options_id = l_proj_fp_options_id;
12270      EXCEPTION
12271          WHEN NO_DATA_FOUND THEN
12272                  IF l_debug_mode = 'Y'  THEN
12273                      pa_debug.g_err_stage := 'error getting Plan Settings level information of the budget version';
12274                      pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12275                  END IF;
12276                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12277                                       p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12278                                       p_token1         => 'PROCEDURENAME',
12279                                       p_value1         => l_module_name);
12280             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12281     END;
12282 
12283     /*Getting Amount Type Codes associated with the budget version.and storing them in a PL/SQL table.
12284       The PL/SQL table l_amt_type_tbl will contain the Amount Type codes and Conversion Attributes
12285       associated with the budget version.
12286     */
12287     l_plan_class_code := l_version_info_rec.x_plan_class_code;
12288     IF l_debug_mode = 'Y' THEN
12289         pa_debug.g_err_stage := 'Getting Amount Types associated with the budget version';
12290         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12291     END IF;
12292      BEGIN
12293          OPEN   amt_type_cur(l_project_id,l_fin_plan_type_id,l_version_type,l_plan_class_code);
12294          FETCH   amt_type_cur
12295          BULK COLLECT INTO   l_amt_type_tbl;
12296          CLOSE   amt_type_cur;
12297          IF l_amt_type_tbl.count = 0 THEN
12298             IF l_debug_mode = 'Y' THEN
12299                 pa_debug.g_err_stage := 'No Amount Types found for the budget version';
12300                 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12301             END IF;
12302             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA',
12303                                  p_msg_name        => 'PA_FP_INV_PARAM_PASSED',
12304                                  p_token1          => 'PROCEDURENAME',
12305                                  p_value1          => l_module_name);
12306             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12307          END IF;
12308      END;
12309 
12310     /*Calling GET_PERIOD_INFORMATION api to get the Group Period Information and Start/End dates of the Periods.
12311       The returned PL/SQL table l_periods_tbl will contain all the periods and Start and End dates of the periods
12312       associated with the budget version based on the period mask.
12313     */
12314     l_period_mask_id := l_version_info_rec.x_period_mask_id;
12315     l_time_phased_code := l_version_info_rec.x_time_phased_code;
12316     l_org_id := l_version_info_rec.x_org_id;
12317     l_current_planning_period := l_version_info_rec.x_current_planning_period;
12318     IF l_debug_mode = 'Y' THEN
12319         pa_debug.g_err_stage := 'Getting Group Period Information and Start/End dates of the periods';
12320         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12321     END IF;
12322      GET_PERIOD_INFORMATION(p_period_mask_id => l_period_mask_id,
12323                             p_time_phased_code => l_time_phased_code,
12324                             p_org_id => l_org_id,
12325                             p_current_planning_period => l_current_planning_period,
12326                             x_periods_tbl => l_periods_tbl,
12327                             x_return_status => l_return_status,
12328                             x_msg_count => l_msg_count,
12329                             x_msg_data => l_msg_data);
12330 
12331     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12332             IF l_debug_mode = 'Y' THEN
12333                 pa_debug.g_err_stage := 'Error in getting Group Period information of the budget version';
12334                 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12335             END IF;
12336             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA',
12337                                   p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12338                                   p_token1         => 'PROCEDURENAME',
12339                                   p_value1         => l_module_name);
12340             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12341     END IF;
12342     IF l_periods_tbl.count = 0 THEN
12343        IF l_debug_mode = 'Y' THEN
12344           pa_debug.g_err_stage := 'Period Informations not found for the budget version';
12345           pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12346        END IF;
12347        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12348                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12349                             p_token1         => 'PROCEDURENAME',
12350                             p_value1         => l_module_name);
12351        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12352     END IF;
12353 
12354     /* Start of code changes for Bug 5144013.
12355        Commenting out the below code by which we are getting the exchange rates of the
12356        transaction currencies of the plan version. This is done as we can get the exchange rates of
12357        the transaction currencies from the cursor res_ass_cur. This is done as part of merging the
12358        MRUP3 changes done in 11i into R12.
12359     */
12360     /*Getting Transaction Currency rates associated with the budget version.
12361       The PL/SQL table l_txn_curr_rate_tbl will contain all the Transaction Currency rates
12362       associated with the budget version.
12363     */
12364     /* --Bug 5144013.
12365     l_projfunc_currency_code := l_version_info_rec.x_projfunc_currency_code;
12366     l_project_currency_code := l_version_info_rec.x_project_currency_code;
12367     l_multi_curr_flag := l_version_info_rec.x_plan_in_multi_curr_flag;
12368     IF l_debug_mode = 'Y' THEN
12369        pa_debug.g_err_stage := 'Getting Transaction Currency rates associated with the budget version';
12370        pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12371     END IF;
12372 
12373      BEGIN
12374     */ --Bug 5144013.
12375          /* Start of code changes for bug 5330532. */
12376          /* --Bug 5144013.
12377          FOR rat IN txn_curr_rate_cur(l_budget_version_id, l_proj_fp_options_id) LOOP
12378             l_txn_curr_rate_tbl(rat.txn_currency_code).txn_currency_code := rat.txn_currency_code;
12379             l_txn_curr_rate_tbl(rat.txn_currency_code).project_cost_exchange_rate  := rat.project_cost_exchange_rate;
12380             l_txn_curr_rate_tbl(rat.txn_currency_code).project_rev_exchange_rate   := rat.project_rev_exchange_rate;
12381             l_txn_curr_rate_tbl(rat.txn_currency_code).projfunc_cost_exchange_rate := rat.projfunc_cost_exchange_rate;
12382             l_txn_curr_rate_tbl(rat.txn_currency_code).projfunc_rev_exchange_rate  := rat.projfunc_rev_exchange_rate;
12383          END LOOP;
12384          */ --Bug 5144013.
12385         /* End of code changes for bug 5330532. */
12386 
12387          -- Commented out the below for bug 5330532.
12388           /*
12389           SELECT DISTINCT(nvl(pbl.txn_currency_code,DECODE(l_ci_id,
12390                                                   null, DECODE(l_AR_flag,
12391                                                   'Y', l_projfunc_currency_code,
12392                                                        l_project_currency_code),
12393                                                         DECODE(l_version_type,
12394                                                                'ALL', l_agr_curr_code,
12395                                                                'REVENUE', l_agr_curr_code,
12396                                                                DECODE(l_AR_flag,
12397                                                                       'Y', l_projfunc_currency_code,
12398                                                                            l_project_currency_code))))) as txn_currency_code,
12399                   pftc.project_cost_exchange_rate,
12400                   pftc.project_rev_exchange_rate,
12401                   pftc.projfunc_cost_exchange_rate,
12402                   pftc.projfunc_rev_exchange_rate
12403           BULK COLLECT INTO l_txn_curr_tbl
12404           FROM pa_budget_lines pbl,
12405                pa_fp_txn_currencies pftc
12406           WHERE pbl.budget_version_id = l_budget_version_id
12407           AND   pftc.fin_plan_version_id = l_budget_version_id
12408           AND   pftc.proj_fp_options_id = l_proj_fp_options_id
12409           and   pbl.txn_currency_code = pftc.txn_currency_code;
12410 
12411          IF l_txn_curr_tbl.count = 0 THEN
12412             IF l_debug_mode = 'Y' THEN
12413                pa_debug.g_err_stage := 'No transaction currency found for the budget version';
12414                pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12415             END IF;
12416             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA',
12417                                  p_msg_name        => 'PA_FP_INV_PARAM_PASSED',
12418                                  p_token1          => 'PROCEDURENAME',
12419                                  p_value1          => l_module_name);
12420             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12421          END IF;
12422          */
12423      --END;
12424      /* End of code changes done for Bug 5144013.*/
12425 
12426     /*Getting Resource Assignment details of the budget version
12427       The PL/SQL table l_res_ass_tbl will contain all the Resource Assignment
12428       information associated with the budget version.
12429     */
12430      IF l_debug_mode = 'Y' THEN
12431         pa_debug.g_err_stage := 'Getting the Resource Assignment details of the budget version';
12432         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12433      END IF;
12434      BEGIN
12435           /* Start of coding done for bug 5641300: Using the bulk collect logic instead of for loop
12436              as res_ass_tbl is converted to ordinary pl/sql table from index by pl/sql table.
12437           */
12438           /*
12439           FOR rec in res_ass_cur(l_budget_version_id,l_project_id,l_project_structure_version_id)
12440           LOOP
12441              l_res_ass_tbl(rec.resource_assignment_id) := rec;
12442           END LOOP;
12443           */
12444           -- Bug 5144013: Made changes to pass proj_fp_options_id as a parameter to the cursor res_ass_cur.
12445           OPEN res_ass_cur(l_budget_version_id,l_project_id,l_project_structure_version_id,l_proj_fp_options_id);
12446           FETCH res_ass_cur BULK COLLECT INTO l_res_ass_tbl;
12447           CLOSE res_ass_cur;
12448           /* End of coding done for bug 5641300.*/
12449           IF l_res_ass_tbl.count = 0 THEN
12450              IF l_debug_mode = 'Y' THEN
12451                 pa_debug.g_err_stage := 'No Resource Assignments found for the budget version';
12452                 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12453              END IF;
12454              -- Bug 5360205: Commented out the following and raised NO_RA_EXC.
12455              /*
12456              PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA',
12457                                   p_msg_name        => 'PA_FP_INV_PARAM_PASSED',
12458                                   p_token1          => 'PROCEDURENAME',
12459                                   p_value1          => l_module_name);
12460              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12461              */
12462              RAISE NO_RA_EXC;
12463          END IF;
12464      END;
12465 
12466      l_fin_plan_preference_code := l_proj_fp_options_rec.fin_plan_preference_code;
12467     /*Getting the values of all the Amount Types for each Resource Assignment and Transaction
12468       Currency combination for all the periods associated with the budget version
12469     */
12470      IF l_debug_mode = 'Y' THEN
12471          pa_debug.g_err_stage := 'Getting Amounts of all the Periods associated with the budget version';
12472          pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12473      END IF;
12474       BEGIN
12475           l_global_tmp_tbl := global_tmp_tbl();
12476           l_global_tmp_rec.budget_version_id := l_budget_version_id;
12477           l_global_tmp_rec.fin_plan_preference_code := l_fin_plan_preference_code;
12478           l_global_tmp_rec.plan_class_code := l_plan_class_code;
12479           l_global_tmp_rec.project_name := l_project_name;
12480           l_global_tmp_rec.project_number := l_project_number;
12481           l_global_tmp_rec.project_id := l_project_id;
12482           l_global_tmp_rec.delete_flag := null;
12483           FOR res IN l_res_ass_tbl.first..l_res_ass_tbl.last LOOP
12484              l_global_tmp_rec.resource_assignment_id := l_res_ass_tbl(res).resource_assignment_id;
12485              l_global_tmp_rec.task_number := l_res_ass_tbl(res).task_number;
12486              l_global_tmp_rec.task_name := l_res_ass_tbl(res).task_name;
12487              l_global_tmp_rec.task_display_sequence := l_res_ass_tbl(res).task_display_sequence;
12488              l_global_tmp_rec.resource_alias := l_res_ass_tbl(res).resource_name;
12489              l_global_tmp_rec.unit_of_measure := l_res_ass_tbl(res).unit_of_measure;
12490              l_global_tmp_rec.resource_list_member_id := l_res_ass_tbl(res).resource_list_member_id;
12491              l_global_tmp_rec.spread_curve_id := l_res_ass_tbl(res).spread_curve_id;
12492              l_global_tmp_rec.spread_curve := l_res_ass_tbl(res).spread_curve;
12493              l_global_tmp_rec.start_date := l_res_ass_tbl(res).planning_start_date;
12494              l_global_tmp_rec.end_date := l_res_ass_tbl(res).planning_end_date;
12495              l_global_tmp_rec.mfc_cost_type_id := l_res_ass_tbl(res).mfc_cost_type_id;
12496              l_global_tmp_rec.mfc_cost_type := l_res_ass_tbl(res).mfc_cost_type;
12497              l_global_tmp_rec.etc_method_code := l_res_ass_tbl(res).etc_method_code;
12498              l_global_tmp_rec.etc_method := l_res_ass_tbl(res).etc_method;
12499              l_global_tmp_rec.etc_source := l_res_ass_tbl(res).etc_source;
12500              l_global_tmp_rec.physical_percent_complete := PA_FIN_PLAN_UTILS.get_physical_pc_complete
12501                                                             (p_project_id => l_project_id,
12502                                                              p_proj_element_id => l_res_ass_tbl(res).project_element_id);
12503 
12504              /* Bug 5144013: Commenting out the below code by which we get the transaction currencies of the
12505                 resource assignment. This is done as we can get the resource assignment and transaction currency
12506                 combination from the cursor res_ass_cur. This is done as part of merging the MRUP3 changes done
12507                 in 11i into R12.
12508              */
12509              /* Start of code changes for bug 5330532 */
12510              /* --Bug 5144013.
12511              BEGIN
12512                  l_txn_curr_tbl.DELETE;
12513                  OPEN txn_curr_cur(l_budget_version_id, l_res_ass_tbl(res).resource_assignment_id);
12514                  FETCH txn_curr_cur BULK COLLECT INTO l_txn_curr_tbl;
12515                  CLOSE txn_curr_cur;
12516                  IF l_txn_curr_tbl.COUNT = 0 THEN
12517                     l_txn_curr_tbl.extend(1);
12518                     SELECT    (DECODE(l_ci_id,
12519                                        null, DECODE(l_AR_flag,
12520                                        'Y', l_projfunc_currency_code,
12521                                             l_project_currency_code),
12522                                              DECODE(l_version_type,
12523                                                     'ALL', l_agr_curr_code,
12524                                                     'REVENUE', l_agr_curr_code,
12525                                                                l_project_currency_code)))
12526                     INTO l_txn_curr_tbl(1).txn_currency_code
12527                     FROM dual;
12528                  END IF;
12529              END;
12530              */ --Bug 5144013.
12531             /* End of code changes for bug 5330532 */
12532              --FOR txn IN l_txn_curr_tbl.first..l_txn_curr_tbl.last LOOP   Bug 5144013.
12533              l_global_tmp_rec.txn_currency_code := l_res_ass_tbl(res).txn_currency_code; --Bug 5144013.
12534                 FOR amt IN l_amt_type_tbl.first..l_amt_type_tbl.last LOOP
12535                     l_global_tmp_rec.amount_type_code := l_amt_type_tbl(amt).amount_type_code;
12536                     l_global_tmp_rec.amount_type_name := l_amt_type_tbl(amt).amount_type_name;
12537                     l_global_tmp_rec.projfunc_rate_type := l_amt_type_tbl(amt).projfunc_rate_type;
12538                     l_global_tmp_rec.projfunc_rate_date_type := l_amt_type_tbl(amt).projfunc_rate_date_type;
12539                     l_global_tmp_rec.projfunc_rate_date := l_amt_type_tbl(amt).projfunc_rate_date;
12540                     l_global_tmp_rec.project_rate_type := l_amt_type_tbl(amt).project_rate_type;
12541                     l_global_tmp_rec.project_rate_date_type := l_amt_type_tbl(amt).project_rate_date_type;
12542                     l_global_tmp_rec.project_rate_date := l_amt_type_tbl(amt).project_rate_date;
12543                     /* Bug 5144013. Made changes in the below select to get the exchange rates of the transaction
12544                        currencies from pl/sql table l_res_ass_tbl.
12545                     */
12546                     -- Bug 5330532. Used newly introduced rate table l_txn_curr_rate_tbl in the following select statement.
12547                     SELECT
12548                           decode(l_amt_type_tbl(amt).amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.projfunc_rev_rate_type,'User',l_res_ass_tbl(res).projfunc_rev_exchange_rate,TO_NUMBER(null)),
12549                           decode(l_proj_fp_options_rec.projfunc_cost_rate_type,'User',null,l_res_ass_tbl(res).projfunc_cost_exchange_rate,TO_NUMBER(null))),
12550 
12551                           decode(l_amt_type_tbl(amt).amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.project_rev_rate_type,'User',l_res_ass_tbl(res).project_rev_exchange_rate,TO_NUMBER(null)),
12552                           decode(l_proj_fp_options_rec.project_cost_rate_type,'User',null,l_res_ass_tbl(res).project_cost_exchange_rate,TO_NUMBER(null)))
12553                     INTO projfunc_exchange_rate,
12554                          project_exchange_rate
12555                     FROM dual;
12556                     l_global_tmp_rec.projfunc_exchange_rate := projfunc_exchange_rate;
12557                     l_global_tmp_rec.project_exchange_rate := project_exchange_rate;
12558                     FOR prd in l_periods_tbl.first-1..l_periods_tbl.last+1 LOOP
12559                         IF prd <> l_periods_tbl.first-1 and prd <> l_periods_tbl.last+1 THEN
12560                            l_position := l_periods_tbl(prd).sequence_number;
12561                            l_start_date := l_periods_tbl(prd).start_date;
12562                            l_end_date := l_periods_tbl(prd).end_date;
12563                            l_preceding_date := to_date(null);
12564                            l_succeeding_date := to_date(null);
12565                         ELSIF prd = l_periods_tbl.first-1 THEN
12566                            l_start_date := to_date(null);
12567                            l_end_date := to_date(null);
12568                            l_preceding_date := l_periods_tbl(l_periods_tbl.first).start_date;
12569                            l_succeeding_date := to_date(null);
12570                         ELSIF prd = l_periods_tbl.last+1 THEN
12571                            l_start_date := to_date(null);
12572                            l_end_date := to_date(null);
12573                            l_preceding_date := to_date(null);
12574                            l_succeeding_date := l_periods_tbl(l_periods_tbl.last).end_date;
12575                         END IF;
12576                         --Calling get_period_amounts api to get the value of the Amount Type for a period.
12577                         l_return := pa_fp_webadi_utils.get_period_amounts(
12578                                             p_budget_version_id => l_budget_version_id,
12579                                             p_amount_code => l_amt_type_tbl(amt).amount_type_code,
12580                                             p_resource_assignment_id => l_res_ass_tbl(res).resource_assignment_id,
12581                                             p_txn_currency_code => l_res_ass_tbl(res).txn_currency_code, --Bug 5144013.
12582                                             p_prd_start_date => l_start_date,
12583                                             p_prd_end_date => l_end_date,
12584                                             preceding_date => l_preceding_date,
12585                                             succedeing_date => l_succeeding_date);
12586                         IF prd = l_periods_tbl.first-1 THEN
12587                            l_global_tmp_rec.preceding_period_amount := l_return;
12588                         ELSIF prd = l_periods_tbl.last+1 THEN
12589                            l_global_tmp_rec.succeeding_period_amount := l_return;
12590                         ELSE
12591                         -- Bug 5284640: Commented out the below Dynamic SQL and added PL/SQL code for improving performance.
12592                         /*
12593                            --Dynamic SQL used to insert the Amount Type value in the corresponding period column.
12594                            EXECUTE IMMEDIATE
12595                                   'BEGIN '||
12596                                   'pa_fp_webadi_pkg.l_global_tmp_rec.prd'||pa_fp_webadi_pkg.l_position||' := pa_fp_webadi_pkg.l_return; '||
12597                                   'END;';
12598                         */
12599                            IF l_position = 1 THEN
12600                               l_global_tmp_rec.prd1 := l_return;
12601                            ELSIF l_position = 2 THEN
12602                               l_global_tmp_rec.prd2 := l_return;
12603                            ELSIF l_position = 3 THEN
12604                               l_global_tmp_rec.prd3 := l_return;
12605                            ELSIF l_position = 4 THEN
12606                               l_global_tmp_rec.prd4 := l_return;
12607                            ELSIF l_position = 5 THEN
12608                               l_global_tmp_rec.prd5 := l_return;
12609                            ELSIF l_position = 6 THEN
12610                               l_global_tmp_rec.prd6 := l_return;
12611                            ELSIF l_position =7 THEN
12612                               l_global_tmp_rec.prd7 := l_return;
12613                            ELSIF l_position = 8 THEN
12614                               l_global_tmp_rec.prd8 := l_return;
12615                            ELSIF l_position = 9 THEN
12616                               l_global_tmp_rec.prd9 := l_return;
12617                            ELSIF l_position = 10 THEN
12618                               l_global_tmp_rec.prd10 := l_return;
12619                            ELSIF l_position = 11 THEN
12620                               l_global_tmp_rec.prd11 := l_return;
12621                            ELSIF l_position = 12 THEN
12622                               l_global_tmp_rec.prd12 := l_return;
12623                            ELSIF l_position = 13 THEN
12624                               l_global_tmp_rec.prd13 := l_return;
12625                            ELSIF l_position = 14 THEN
12626                               l_global_tmp_rec.prd14 := l_return;
12627                            ELSIF l_position = 15 THEN
12628                               l_global_tmp_rec.prd15 := l_return;
12629                            ELSIF l_position = 16 THEN
12630                               l_global_tmp_rec.prd16 := l_return;
12631                            ELSIF l_position = 17 THEN
12632                               l_global_tmp_rec.prd17 := l_return;
12633                            ELSIF l_position = 18 THEN
12634                               l_global_tmp_rec.prd18 := l_return;
12635                            ELSIF l_position = 19 THEN
12636                               l_global_tmp_rec.prd19 := l_return;
12637                            ELSIF l_position = 20 THEN
12638                               l_global_tmp_rec.prd20 := l_return;
12639                            ELSIF l_position = 21 THEN
12640                               l_global_tmp_rec.prd21 := l_return;
12641                            ELSIF l_position = 22 THEN
12642                               l_global_tmp_rec.prd22 := l_return;
12643                            ELSIF l_position = 23 THEN
12644                               l_global_tmp_rec.prd23 := l_return;
12645                            ELSIF l_position = 24 THEN
12646                               l_global_tmp_rec.prd24 := l_return;
12647                            ELSIF l_position = 25 THEN
12648                               l_global_tmp_rec.prd25 := l_return;
12649                            ELSIF l_position = 26 THEN
12650                               l_global_tmp_rec.prd26 := l_return;
12651                            ELSIF l_position = 27 THEN
12652                               l_global_tmp_rec.prd27 := l_return;
12653                            ELSIF l_position = 28 THEN
12654                               l_global_tmp_rec.prd28 := l_return;
12655                            ELSIF l_position = 29 THEN
12656                               l_global_tmp_rec.prd29 := l_return;
12657                            ELSIF l_position = 30 THEN
12658                               l_global_tmp_rec.prd30 := l_return;
12659                            ELSIF l_position = 31 THEN
12660                               l_global_tmp_rec.prd31 := l_return;
12661                            ELSIF l_position = 32 THEN
12662                               l_global_tmp_rec.prd32 := l_return;
12663                            ELSIF l_position = 33 THEN
12664                               l_global_tmp_rec.prd33 := l_return;
12665                            ELSIF l_position = 34 THEN
12666                               l_global_tmp_rec.prd34 := l_return;
12667                            ELSIF l_position = 35 THEN
12668                               l_global_tmp_rec.prd35 := l_return;
12669                            ELSIF l_position = 36 THEN
12670                               l_global_tmp_rec.prd36 := l_return;
12671                            ELSIF l_position = 37 THEN
12672                               l_global_tmp_rec.prd37 := l_return;
12673                            ELSIF l_position = 38 THEN
12674                               l_global_tmp_rec.prd38 := l_return;
12675                            ELSIF l_position = 39 THEN
12676                               l_global_tmp_rec.prd39 := l_return;
12677                            ELSIF l_position = 40 THEN
12678                               l_global_tmp_rec.prd40 := l_return;
12679                            ELSIF l_position = 41 THEN
12680                               l_global_tmp_rec.prd41 := l_return;
12681                            ELSIF l_position = 42 THEN
12682                               l_global_tmp_rec.prd42 := l_return;
12683                            ELSIF l_position = 43 THEN
12684                               l_global_tmp_rec.prd43 := l_return;
12685                            ELSIF l_position = 44 THEN
12686                               l_global_tmp_rec.prd44 := l_return;
12687                            ELSIF l_position = 45 THEN
12688                               l_global_tmp_rec.prd45 := l_return;
12689                            ELSIF l_position = 46 THEN
12690                               l_global_tmp_rec.prd46 := l_return;
12691                            ELSIF l_position = 47 THEN
12692                               l_global_tmp_rec.prd47 := l_return;
12693                            ELSIF l_position = 48 THEN
12694                               l_global_tmp_rec.prd48 := l_return;
12695                            ELSIF l_position = 49 THEN
12696                               l_global_tmp_rec.prd49 := l_return;
12697                            ELSIF l_position = 50 THEN
12698                               l_global_tmp_rec.prd50 := l_return;
12699                            ELSIF l_position = 51 THEN
12700                               l_global_tmp_rec.prd51 := l_return;
12701                            ELSIF l_position = 52 THEN
12702                               l_global_tmp_rec.prd52 := l_return;
12703                            END IF;
12704                         END IF;
12705                     END LOOP;
12706                     --Inserting the record containig the budget line information into the PL/SQL table.
12707                     l_global_tmp_tbl.extend();
12708                     l_global_tmp_tbl(cnt) := l_global_tmp_rec;
12709                     cnt := cnt+1;
12710                 END LOOP;
12711              --END LOOP; Bug 5144013.
12712           END LOOP;
12713           --Resetting the value of all the global variables.
12714           l_position := 0;
12715           l_global_tmp_rec := null;
12716           l_return := 0;
12717       END;
12718        /*Populating Global Temparory Table pa_fp_webadi_xface_tmp using the PL/SQL
12719          table l_global_tmp_tbl which contains all the budget line details.
12720        */
12721        IF l_debug_mode = 'Y' THEN
12722            pa_debug.g_err_stage := 'Before inerting into Global Temporary Table';
12723            pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12724        END IF;
12725          BEGIN
12726 /*               FOR tmp IN l_global_tmp_tbl.first..l_global_tmp_tbl.last
12727                LOOP
12728                  INSERT INTO pa_fp_webadi_xface_tmp
12729                  VALUES l_global_tmp_tbl(tmp);
12730                END LOOP;
12731                commit;*/
12732              FORALL tmp IN l_global_tmp_tbl.first..l_global_tmp_tbl.last
12733                INSERT INTO pa_fp_webadi_xface_tmp
12734                VALUES l_global_tmp_tbl(tmp);
12735          EXCEPTION
12736              WHEN OTHERS THEN
12737                 RAISE;
12738          END;
12739        IF l_debug_mode = 'Y' THEN
12740            pa_debug.g_err_stage := 'Finished inserting into Global temparory table';
12741            pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12742        END IF;
12743        --Resetting the value of the Global PL/SQL table to NULL.
12744        l_global_tmp_tbl := null;
12745 
12746 EXCEPTION
12747     WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12748          l_msg_count := FND_MSG_PUB.count_msg;
12749          IF l_msg_count = 1 and x_msg_data IS NULL THEN
12750              PA_INTERFACE_UTILS_PUB.get_messages
12751                    (p_encoded        => FND_API.G_TRUE
12752                    ,p_msg_index      => 1
12753                    ,p_msg_count      => l_msg_count
12754                    ,p_msg_data       => l_msg_data
12755                    ,p_data           => l_data
12756                    ,p_msg_index_out  => l_msg_index_out);
12757                    x_msg_data := l_data;
12758                    x_msg_count := l_msg_count;
12759          ELSE
12760             x_msg_count := l_msg_count;
12761          END IF;
12762             x_return_status := FND_API.G_RET_STS_ERROR;
12763          IF l_debug_mode = 'Y' THEN
12764              pa_debug.reset_curr_function;
12765          END IF;
12766     RETURN;
12767 
12768     -- Bug 5360205: Added NO_RA_EXC block.
12769     WHEN NO_RA_EXC THEN
12770          x_return_status := FND_API.G_RET_STS_SUCCESS;
12771          IF l_debug_mode = 'Y' THEN
12772              pa_debug.reset_curr_function;
12773          END IF;
12774     RETURN;
12775 
12776     WHEN OTHERS THEN
12777          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12778          x_msg_count     := 1;
12779          x_msg_data      := SQLERRM;
12780          FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'pa_fp_webadi_pkg'
12781                                  ,p_procedure_name  => 'insert_periodic_tmp_table');
12782          IF l_debug_mode = 'Y' THEN
12783              pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
12784              pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12785              pa_debug.reset_curr_function;
12786          END IF;
12787     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12788 
12789 
12790 END insert_periodic_tmp_table;
12791 
12792 
12793 END pa_fp_webadi_pkg;