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.55.12020000.5 2013/06/21 06:34:32 bpottipa 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.cbs_element_id cbs_element_id, -- cbs enhancement changes bug#16445106
60               inf.task_id task_id,
61               inf.amount_type_code amount_type_code,
62               inf.txn_currency_code txn_currency_code,
63               DECODE (inf.delete_flag, g_hidden_col_char, 'N', DECODE(inf.delete_flag, 'Y', 'Y', 'N')) delete_flag,
64               DECODE (inf.planning_start_date, g_hidden_col_date, TO_DATE(NULL), inf.planning_start_date) planning_start_date,
65               DECODE (inf.planning_end_date, g_hidden_col_date, TO_DATE(NULL), inf.planning_end_date) planning_end_date,
66               '-99' unit_of_measure,
67               DECODE (inf.description, g_hidden_col_char, NULL, DECODE(inf.description, NULL, l_fnd_miss_char, inf.description)) description,
68               DECODE (inf.change_reason_code, g_hidden_col_char, NULL,
69                                               'MULTIPLE', NULL,
70                                                NULL,l_fnd_miss_char,
71                                                inf.change_reason_code) change_reason,
72               DECODE (c_allow_qty_flag,'N',NULL,
73                      DECODE (inf.quantity, g_hidden_col_num, NULL, DECODE(inf.quantity, NULL, l_fnd_miss_num, inf.quantity))) quantity,
74               DECODE (c_allow_qty_flag,'N',NULL,
75                      DECODE (inf.etc_quantity, g_hidden_col_num, NULL, DECODE(inf.etc_quantity, NULL, l_fnd_miss_num, inf.etc_quantity))) etc_quantity,
76               DECODE (c_allow_raw_cost_flag,'N',NULL,
77                      DECODE (inf.raw_cost, g_hidden_col_num, NULL, DECODE(inf.raw_cost, NULL, l_fnd_miss_num, inf.raw_cost))) raw_cost,
78               DECODE (c_allow_raw_cost_flag,'N',NULL,
79                      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,
80               DECODE (c_allow_raw_cost_rate_flag,'N',NULL,
81                      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,
82               DECODE (c_allow_burd_cost_flag,'N',NULL,
83                      DECODE (inf.burdened_cost, g_hidden_col_num, NULL, DECODE(inf.burdened_cost, NULL, l_fnd_miss_num, inf.burdened_cost))) burdened_cost,
84               DECODE (c_allow_burd_cost_flag,'N',NULL,
85                      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,
86               DECODE (c_allow_burd_cost_rate_flag,'N',NULL,
87                      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,
88               DECODE (c_allow_revenue_flag,'N',NULL,
89                      DECODE (inf.revenue, g_hidden_col_num, NULL, DECODE(inf.revenue, NULL, l_fnd_miss_num, inf.revenue))) revenue,
90               DECODE (c_allow_revenue_flag,'N',NULL,
91                      DECODE (inf.etc_revenue, g_hidden_col_num, NULL, DECODE(inf.etc_revenue, NULL, l_fnd_miss_num, inf.etc_revenue))) etc_revenue,
92               DECODE (c_allow_bill_rate_flag,'N',NULL,
93                   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,
94               DECODE (c_version_type, 'REVENUE', NULL,
95                       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,
96               DECODE (c_version_type, 'REVENUE', NULL,
97                       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,
98               DECODE (c_version_type, 'REVENUE', NULL,
99                       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,
100               DECODE (c_version_type, 'REVENUE', TO_DATE(NULL),
101                       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,
102               DECODE (c_version_type, 'REVENUE', NULL,
103                       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,
104               DECODE (c_version_type, 'REVENUE', NULL,
105                       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,
106               DECODE (c_version_type, 'REVENUE', NULL,
107                       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,
108               DECODE (c_version_type, 'REVENUE', TO_DATE(NULL),
109                       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,
110               DECODE (c_version_type, 'COST', NULL,
111                       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,
112               DECODE (c_version_type, 'COST', NULL,
113                       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,
114               DECODE (c_version_type, 'COST', NULL,
115                       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,
116               DECODE (c_version_type, 'COST', TO_DATE(NULL),
117                       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,
118               DECODE (c_version_type, 'COST', NULL,
119                       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,
120               DECODE (c_version_type, 'COST', NULL,
121                       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,
122               DECODE (c_version_type, 'COST', NULL,
123                       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,
124               DECODE (c_version_type, 'COST', TO_DATE(NULL),
125                       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,
126               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,
127               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,
128               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,
129               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,
130               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,
131               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,
132               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,
133               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,
134               --DECODE (inf.spread_curve_id, g_hidden_col_char, NULL, DECODE(inf.spread_curve_name, NULL, l_fnd_miss_char, inf.spread_curve_name))
135               '-99' spread_curve_name,
136               --DECODE (inf.etc_method_name, g_hidden_col_char, NULL, DECODE(inf.etc_method_name, NULL, l_fnd_miss_char, inf.etc_method_name))
137               '-99' etc_method_name,
138               --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))
139               '-99' mfc_cost_type_name,
140               DECODE (inf.pd_prd, g_hidden_col_num, NULL, DECODE(inf.pd_prd, NULL, l_fnd_miss_num, inf.pd_prd)) pd_prd,
141               DECODE (inf.prd1, g_hidden_col_num, NULL, DECODE(inf.prd1, NULL, l_fnd_miss_num, inf.prd1)) prd1,
142               DECODE (inf.prd2, g_hidden_col_num, NULL, DECODE(inf.prd2, NULL, l_fnd_miss_num, inf.prd2)) prd2,
143               DECODE (inf.prd3, g_hidden_col_num, NULL, DECODE(inf.prd3, NULL, l_fnd_miss_num, inf.prd3)) prd3,
144               DECODE (inf.prd4, g_hidden_col_num, NULL, DECODE(inf.prd4, NULL, l_fnd_miss_num, inf.prd4)) prd4,
145               DECODE (inf.prd5, g_hidden_col_num, NULL, DECODE(inf.prd5, NULL, l_fnd_miss_num, inf.prd5)) prd5,
146               DECODE (inf.prd6, g_hidden_col_num, NULL, DECODE(inf.prd6, NULL, l_fnd_miss_num, inf.prd6)) prd6,
147               DECODE (inf.prd7, g_hidden_col_num, NULL, DECODE(inf.prd7, NULL, l_fnd_miss_num, inf.prd7)) prd7,
148               DECODE (inf.prd8, g_hidden_col_num, NULL, DECODE(inf.prd8, NULL, l_fnd_miss_num, inf.prd8)) prd8,
149               DECODE (inf.prd9, g_hidden_col_num, NULL, DECODE(inf.prd9, NULL, l_fnd_miss_num, inf.prd9)) prd9,
150               DECODE (inf.prd10, g_hidden_col_num, NULL, DECODE(inf.prd10, NULL, l_fnd_miss_num, inf.prd10)) prd10,
151               DECODE (inf.prd11, g_hidden_col_num, NULL, DECODE(inf.prd11, NULL, l_fnd_miss_num, inf.prd11)) prd11,
152               DECODE (inf.prd12, g_hidden_col_num, NULL, DECODE(inf.prd12, NULL, l_fnd_miss_num, inf.prd12)) prd12,
153               DECODE (inf.prd13, g_hidden_col_num, NULL, DECODE(inf.prd13, NULL, l_fnd_miss_num, inf.prd13)) prd13,
154               DECODE (inf.prd14, g_hidden_col_num, NULL, DECODE(inf.prd14, NULL, l_fnd_miss_num, inf.prd14)) prd14,
155               DECODE (inf.prd15, g_hidden_col_num, NULL, DECODE(inf.prd15, NULL, l_fnd_miss_num, inf.prd15)) prd15,
156               DECODE (inf.prd16, g_hidden_col_num, NULL, DECODE(inf.prd16, NULL, l_fnd_miss_num, inf.prd16)) prd16,
157               DECODE (inf.prd17, g_hidden_col_num, NULL, DECODE(inf.prd17, NULL, l_fnd_miss_num, inf.prd17)) prd17,
158               DECODE (inf.prd18, g_hidden_col_num, NULL, DECODE(inf.prd18, NULL, l_fnd_miss_num, inf.prd18)) prd18,
159               DECODE (inf.prd19, g_hidden_col_num, NULL, DECODE(inf.prd19, NULL, l_fnd_miss_num, inf.prd19)) prd19,
160               DECODE (inf.prd20, g_hidden_col_num, NULL, DECODE(inf.prd20, NULL, l_fnd_miss_num, inf.prd20)) prd20,
161               DECODE (inf.prd21, g_hidden_col_num, NULL, DECODE(inf.prd21, NULL, l_fnd_miss_num, inf.prd21)) prd21,
162               DECODE (inf.prd22, g_hidden_col_num, NULL, DECODE(inf.prd22, NULL, l_fnd_miss_num, inf.prd22)) prd22,
163               DECODE (inf.prd23, g_hidden_col_num, NULL, DECODE(inf.prd23, NULL, l_fnd_miss_num, inf.prd23)) prd23,
164               DECODE (inf.prd24, g_hidden_col_num, NULL, DECODE(inf.prd24, NULL, l_fnd_miss_num, inf.prd24)) prd24,
165               DECODE (inf.prd25, g_hidden_col_num, NULL, DECODE(inf.prd25, NULL, l_fnd_miss_num, inf.prd25)) prd25,
166               DECODE (inf.prd26, g_hidden_col_num, NULL, DECODE(inf.prd26, NULL, l_fnd_miss_num, inf.prd26)) prd26,
167               DECODE (inf.prd27, g_hidden_col_num, NULL, DECODE(inf.prd27, NULL, l_fnd_miss_num, inf.prd27)) prd27,
168               DECODE (inf.prd28, g_hidden_col_num, NULL, DECODE(inf.prd28, NULL, l_fnd_miss_num, inf.prd28)) prd28,
169               DECODE (inf.prd29, g_hidden_col_num, NULL, DECODE(inf.prd29, NULL, l_fnd_miss_num, inf.prd29)) prd29,
170               DECODE (inf.prd30, g_hidden_col_num, NULL, DECODE(inf.prd30, NULL, l_fnd_miss_num, inf.prd30)) prd30,
171               DECODE (inf.prd31, g_hidden_col_num, NULL, DECODE(inf.prd31, NULL, l_fnd_miss_num, inf.prd31)) prd31,
172               DECODE (inf.prd32, g_hidden_col_num, NULL, DECODE(inf.prd32, NULL, l_fnd_miss_num, inf.prd32)) prd32,
173               DECODE (inf.prd33, g_hidden_col_num, NULL, DECODE(inf.prd33, NULL, l_fnd_miss_num, inf.prd33)) prd33,
174               DECODE (inf.prd34, g_hidden_col_num, NULL, DECODE(inf.prd34, NULL, l_fnd_miss_num, inf.prd34)) prd34,
175               DECODE (inf.prd35, g_hidden_col_num, NULL, DECODE(inf.prd35, NULL, l_fnd_miss_num, inf.prd35)) prd35,
176               DECODE (inf.prd36, g_hidden_col_num, NULL, DECODE(inf.prd36, NULL, l_fnd_miss_num, inf.prd36)) prd36,
177               DECODE (inf.prd37, g_hidden_col_num, NULL, DECODE(inf.prd37, NULL, l_fnd_miss_num, inf.prd37)) prd37,
178               DECODE (inf.prd38, g_hidden_col_num, NULL, DECODE(inf.prd38, NULL, l_fnd_miss_num, inf.prd38)) prd38,
179               DECODE (inf.prd39, g_hidden_col_num, NULL, DECODE(inf.prd39, NULL, l_fnd_miss_num, inf.prd39)) prd39,
180               DECODE (inf.prd40, g_hidden_col_num, NULL, DECODE(inf.prd40, NULL, l_fnd_miss_num, inf.prd40)) prd40,
181               DECODE (inf.prd41, g_hidden_col_num, NULL, DECODE(inf.prd41, NULL, l_fnd_miss_num, inf.prd41)) prd41,
182               DECODE (inf.prd42, g_hidden_col_num, NULL, DECODE(inf.prd42, NULL, l_fnd_miss_num, inf.prd42)) prd42,
183               DECODE (inf.prd43, g_hidden_col_num, NULL, DECODE(inf.prd43, NULL, l_fnd_miss_num, inf.prd43)) prd43,
184               DECODE (inf.prd44, g_hidden_col_num, NULL, DECODE(inf.prd44, NULL, l_fnd_miss_num, inf.prd44)) prd44,
185               DECODE (inf.prd45, g_hidden_col_num, NULL, DECODE(inf.prd45, NULL, l_fnd_miss_num, inf.prd45)) prd45,
186               DECODE (inf.prd46, g_hidden_col_num, NULL, DECODE(inf.prd46, NULL, l_fnd_miss_num, inf.prd46)) prd46,
187               DECODE (inf.prd47, g_hidden_col_num, NULL, DECODE(inf.prd47, NULL, l_fnd_miss_num, inf.prd47)) prd47,
188               DECODE (inf.prd48, g_hidden_col_num, NULL, DECODE(inf.prd48, NULL, l_fnd_miss_num, inf.prd48)) prd48,
189               DECODE (inf.prd49, g_hidden_col_num, NULL, DECODE(inf.prd49, NULL, l_fnd_miss_num, inf.prd49)) prd49,
190               DECODE (inf.prd50, g_hidden_col_num, NULL, DECODE(inf.prd50, NULL, l_fnd_miss_num, inf.prd50)) prd50,
191               DECODE (inf.prd51, g_hidden_col_num, NULL, DECODE(inf.prd51, NULL, l_fnd_miss_num, inf.prd51)) prd51,
192               DECODE (inf.prd52, g_hidden_col_num, NULL, DECODE(inf.prd52, NULL, l_fnd_miss_num, inf.prd52)) prd52,
193               DECODE (inf.sd_prd, g_hidden_col_num, NULL, DECODE(inf.sd_prd, NULL, l_fnd_miss_num, inf.sd_prd)) sd_prd
194       FROM    pa_fp_webadi_upload_inf inf
195       WHERE   inf.run_id=c_run_id
196       AND     Nvl(inf.val_error_flag, 'N') <> 'Y'
197       AND     inf.val_error_code IS NULL
198       AND     (inf.amount_type_name IS NULL      OR
199                (inf.amount_type_code IN ('TOTAL_QTY','FCST_QTY','ETC_QTY') AND
200                 c_allow_qty_flag='Y')            OR
201                (inf.amount_type_code IN ('TOTAL_RAW_COST','FCST_RAW_COST','ETC_RAW_COST') AND
202                 c_allow_raw_cost_flag='Y')       OR
203                (inf.amount_type_code IN ('TOTAL_BURDENED_COST','FCST_BURDENED_COST','ETC_BURDENED_COST') AND
204                 c_allow_burd_cost_flag='Y')      OR
205                (inf.amount_type_code IN ('TOTAL_REV','FCST_REVENUE','ETC_REVENUE') AND
206                 c_allow_revenue_flag='Y')        OR
207                (inf.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') AND
208                 c_allow_raw_cost_rate_flag='Y')  OR
209                (inf.amount_type_code IN ('BURDENED_COST_RATE','ETC_BURDENED_COST_RATE') AND
210                 c_allow_burd_cost_rate_flag='Y') OR
211                (inf.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') AND
212                 c_allow_bill_rate_flag='Y') )
213       AND     Nvl(c_request_id, -99) = Nvl(inf.request_id, -99)
214       ORDER BY inf.task_id, inf.resource_list_member_id, Nvl(inf.txn_currency_code, '-99'),
215                DECODE (inf.amount_type_code, 'TOTAL_BURDENED_COST',   1,
216                                              'TOTAL_RAW_COST',        2,
217                                              'TOTAL_REV',             3,
218                                              'TOTAL_QTY',             4,
219                                              'BURDENED_COST_RATE',    5,
220                                              'RAW_COST_RATE',         6,
221                                              'BILL_RATE',             7,
222                                              'FCST_BURDENED_COST',    10,
223                                              'ETC_BURDENED_COST',     11,
224                                              'FCST_RAW_COST',         12,
225                                              'ETC_RAW_COST',          13,
226                                              'FCST_REVENUE',          14,
227                                              'ETC_REVENUE',           15,
228                                              'FCST_QTY',              16,
229                                              'ETC_QTY',               17,
230                                              'ETC_BURDENED_COST_RATE',18,
231                                              'ETC_RAW_COST_RATE',     19,
232                                              'ETC_BILL_RATE',         20, 0);
233 
234 TYPE inf_cur_tbl_typ IS TABLE OF inf_tbl_data_csr%ROWTYPE INDEX BY BINARY_INTEGER;
235 
236 /* Start of changes done for Bug : 4584865 */
237 
238 /*This Record is used to store the Start Date and End Date of each Period based on the Period Mask associated
239   with the budget version.
240 */
241 TYPE periods_rec IS RECORD(sequence_number   NUMBER,
242                           period_name   VARCHAR2(50),--gl_periods.period_name%TYPE,
243                           start_date   gl_periods.start_date%TYPE,
244                           end_date   gl_periods.end_date%TYPE);
245 --PL/SQL table created based on Record periods_rec.
246 TYPE periods_tbl IS TABLE OF periods_rec;
247 
248 /* End of Changes done for Bug : 4584865*/
249 
250 PROCEDURE write_log(
251                     p_module_name          IN  VARCHAR2,
252                     p_err_msg              IN  VARCHAR2,
253                     p_debug_level          IN  NUMBER
254                    )
255 IS
256 PRAGMA AUTONOMOUS_TRANSACTION;
257 BEGIN
258 
259   INSERT INTO FND_LOG_MESSAGES
260   (module
261   ,log_level
262   ,message_text
263   ,session_id
264   ,user_id
265   ,timestamp
266   ,log_sequence)
267   values
268   (p_module_name
269   ,p_debug_level
270   ,p_err_msg
271   ,-1
272   ,fnd_global.user_id
273   ,sysdate
274   ,fnd_log_messages_s.nextval
275   );
276 
277 commit;
278 
279 EXCEPTION
280     WHEN OTHERS THEN
281           RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
282 END write_log;
283 
284 /*PROCEDURE log1(p_err_msg              IN  VARCHAR2
285                )
286 IS
287 PRAGMA AUTONOMOUS_TRANSACTION;
288 BEGIN
289 if wlog='N' then
290   return;
291   end if;
292   INSERT INTO t1
293   (c1,
294    c2)
295   values
296   (pa_fp_elements_s.nextval,
297    p_err_msg
298   );
299 
300 commit;
301 
302 EXCEPTION
303     WHEN OTHERS THEN
304           RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
305 END log1;
306 */
307 
308 PROCEDURE delete_xface
309                   ( p_run_id               IN   pa_fp_webadi_upload_inf.run_id%TYPE
310                    ,x_return_status        OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
311                    ,x_msg_count            OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
312                    ,x_msg_data             OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
313                    ,p_calling_module       IN   VARCHAR2  DEFAULT NULL
314                   )
315 IS
316   l_debug_mode                    VARCHAR2(1) ;
317   l_msg_count                     NUMBER := 0;
318   l_data                          VARCHAR2(2000);
319   l_msg_data                      VARCHAR2(2000);
320   l_msg_index_out                 NUMBER;
321   l_del_record_count              NUMBER;
322   l_budget_version_id             pa_budget_versions.budget_version_id%TYPE;
323   l_bv_request_id                 pa_budget_versions.request_id%TYPE;
324   l_inf_request_id                pa_budget_versions.request_id%TYPE;
325   l_preserve_rows_flag            VARCHAR2(1);
326   l_nothing_delete_flag           VARCHAR2(1);
327 
328 BEGIN
329     x_msg_count := 0;
330     x_return_status := FND_API.G_RET_STS_SUCCESS;
331     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'Y');
332 
333     IF l_debug_mode = 'Y' THEN
334          pa_debug.set_curr_function( p_function   => 'DELETE_XFACE'
335                                     ,p_debug_mode => l_debug_mode );
336          pa_debug.g_err_stage := ':In pa_fp_webadi_pkg.DELETE_XFACE' ;
337          pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
338     END IF;
339 
340     l_preserve_rows_flag   := 'N';
341     l_nothing_delete_flag  := 'N';
342 
343     -- validating input parameter
344     IF p_run_id IS NULL THEN
345            IF l_debug_mode = 'Y' THEN
346                pa_debug.g_err_stage := 'p_run_id is passed as null';
347                pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
348            END IF;
349            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
350                                 p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
351                                 p_token1         => 'PROCEDURENAME',
352                                 p_value1         => g_module_name);
353            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
354     END IF;
355 
356     -- checking, if this api is called from web adi directly and if yes, if there is a pending
357     -- concurrent request for processing, then the rows in the interface table should not be deleted
358     IF p_calling_module = 'XL_UPLOAD' THEN
359         BEGIN
360             SELECT 'Y'
361             INTO   l_preserve_rows_flag
362             FROM   DUAL
363             WHERE  EXISTS (SELECT 'X'
364                            FROM   pa_fp_webadi_upload_inf inf,
365                                   pa_budget_versions bv
366                            WHERE  inf.run_id = p_run_id
367                            AND    inf.budget_version_id = bv.budget_version_id
368                            AND    Nvl(inf.request_id, -99) = Nvl(bv.request_id, -99)
369                            AND    bv.plan_processing_code IN ('XLUP', 'XLUE'));
370             -- there is a pending concurrent request, which is yet to be processed
371             -- inf table data should not be deleted
372             IF l_debug_mode = 'Y' THEN
373                pa_debug.g_err_stage := 'Concurrent Request pending, returning';
374                pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
375             END IF;
376         EXCEPTION
377             WHEN NO_DATA_FOUND THEN
378                 IF l_debug_mode = 'Y' THEN
379                    pa_debug.g_err_stage := 'This has been called for online mode';
380                    pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
381                END IF;
382                -- do nothing
383                l_preserve_rows_flag := 'N';
384 --               l_nothing_delete_flag := 'Y';
385         END;
386     END IF;
387 
388     IF l_preserve_rows_flag <> 'Y' THEN
389         DELETE FROM PA_FP_WEBADI_UPLOAD_INF
390         WHERE  run_id = p_run_id;
391 
392         IF l_debug_mode = 'Y' THEN
393              l_del_record_count := SQL%ROWCOUNT;
394              pa_debug.g_err_stage := ':Deleted '||l_del_record_count||' records from PA_FP_WEBADI_UPLOAD_INF';
395              pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
396              pa_debug.reset_curr_function;
397         END IF;
398     END IF;
399 EXCEPTION
400     WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
401          l_msg_count := FND_MSG_PUB.count_msg;
402 
403          IF l_msg_count = 1 and x_msg_data IS NULL THEN
404                PA_INTERFACE_UTILS_PUB.get_messages
405                  (p_encoded        => FND_API.G_TRUE
406                  ,p_msg_index      => 1
407                  ,p_msg_count      => l_msg_count
408                  ,p_msg_data       => l_msg_data
409                  ,p_data           => l_data
410                  ,p_msg_index_out  => l_msg_index_out);
411               x_msg_data := l_data;
412               x_msg_count := l_msg_count;
413          ELSE
414               x_msg_count := l_msg_count;
415          END IF;
416          x_return_status := FND_API.G_RET_STS_ERROR;
417 
418          IF l_debug_mode = 'Y' THEN
419              pa_debug.reset_curr_function;
420          END IF;
421          RETURN;
422     WHEN OTHERS THEN
423           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
424           x_msg_count     := 1;
425           x_msg_data      := SQLERRM;
426           FND_MSG_PUB.add_exc_msg
427              ( p_pkg_name       => 'pa_fp_webadi_pkg'
428               ,p_procedure_name => 'DELETE_XFACE' );
429           IF l_debug_mode = 'Y' THEN
430              pa_debug.write('DELETE_XFACE' || g_module_name,SQLERRM,4);
431              pa_debug.write('DELETE_XFACE' || g_module_name,pa_debug.G_Err_Stack,4);
432              pa_debug.reset_curr_function;
433           END IF;
434 
435           RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
436 
437 END DELETE_XFACE;
438 
439   -- Bug 3986129: FP.M Web ADI Dev changes. Added the followings:
440 
441   PROCEDURE validate_header_info
442      ( p_calling_mode              IN           VARCHAR2,
443        p_run_id                    IN           pa_fp_webadi_upload_inf.run_id%TYPE,
444        p_budget_version_id         IN           pa_budget_versions.budget_version_id%TYPE,
445        p_record_version_number     IN           pa_budget_versions.record_version_number%TYPE,
446        p_pm_rec_version_number     IN           pa_period_masks_b.record_version_number%TYPE,
447        p_submit_flag               IN           VARCHAR2,
448        p_request_id                IN           pa_budget_versions.request_id%TYPE,
449        x_return_status             OUT          NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
450        x_msg_data                  OUT          NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
451        x_msg_count                 OUT          NOCOPY NUMBER) --File.Sql.39 bug 4440895
452 
453   IS
454 
455       CURSOR l_version_info_csr (c_budget_version_id      pa_budget_versions.budget_version_id%TYPE)
456       IS
457       SELECT  bv.record_version_number,
458               bv.period_mask_id,
459               bv.project_id,
460               bv.fin_plan_type_id,
461               Nvl(bv.ci_id, -1),
462               bv.version_type,
463               Nvl(bv.approved_cost_plan_type_flag, 'N'),
464               Nvl(bv.approved_rev_plan_type_flag, 'N'),
465               Nvl(bv.primary_cost_forecast_flag, 'N'),
466               Nvl(bv.primary_rev_forecast_flag, 'N'),
467               Nvl(bv.current_working_flag, 'N'),
468               fpt.plan_class_code,
469               Decode(bv.version_type, 'COST', fpo.cost_time_phased_code,
470                      'REVENUE', fpo.revenue_time_phased_code, 'ALL', fpo.all_time_phased_code) time_phased_code
471        FROM   pa_budget_versions bv,
472               pa_fin_plan_types_b fpt,
473               pa_proj_fp_options fpo
474        WHERE  bv.budget_version_id = c_budget_version_id
475        AND    bv.budget_version_id = fpo.fin_plan_version_id
476        AND    bv.project_id = fpo.project_id
477        AND    bv.fin_plan_type_id = fpt.fin_plan_type_id;
478 
479        l_record_version_number              pa_budget_versions.record_version_number%TYPE;
480        l_period_mask_id                     pa_period_masks_b.period_mask_id%TYPE;
481        l_project_id                         pa_projects_all.project_id%TYPE;
482        l_fin_plan_type_id                   pa_fin_plan_types_b.fin_plan_type_id%TYPE;
483        l_ci_id                              pa_control_items.ci_id%TYPE;
484        l_version_type                       pa_budget_versions.version_type%TYPE;
485        l_app_cost_plan_type_flag            pa_budget_versions.approved_cost_plan_type_flag%TYPE;
486        l_rev_plan_type_flag                 pa_budget_versions.approved_rev_plan_type_flag%TYPE;
487        l_prime_cost_fcst_flag               pa_budget_versions.primary_cost_forecast_flag%TYPE;
488        l_prime_rev_fcst_flag                pa_budget_versions.primary_rev_forecast_flag%TYPE;
489        l_current_working_flag               pa_budget_versions.current_working_flag%TYPE;
490        l_plan_class_code                    pa_fin_plan_types_b.plan_class_code%TYPE;
491        l_time_phase_code                    pa_proj_fp_options.all_time_phased_code%TYPE;
492        l_pm_rec_version_number              pa_period_masks_b.record_version_number%TYPE;
493 
494        is_periodic_layout                   VARCHAR2(1) := 'N';
495 
496        l_sec_ret_code                       VARCHAR2(30);
497        l_locked_by_persion_id               pa_budget_versions.locked_by_person_id%TYPE;
498        l_val_err_code                       VARCHAR2(30);
499        l_ci_status_code                     pa_control_items.status_code%TYPE;
500 
501        l_return_status                      VARCHAR2(1);
502        l_msg_data                           VARCHAR2(2000);
503        l_msg_count                          NUMBER;
504 
505        l_debug_mode                         VARCHAR2(1);
506        l_module_name                        VARCHAR2(100) := 'pa_fp_webadi_pkg.validate_header_info';
507        l_debug_level3                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
508        l_debug_level5                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
509        l_data                               VARCHAR2(2000);
510        l_msg_index_out                      NUMBER;
511 
512 
513        BEGIN
514 
515                fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
516                x_msg_count := 0;
517                x_return_status := FND_API.G_RET_STS_SUCCESS;
518                IF l_debug_mode = 'Y' THEN
519                      PA_DEBUG.Set_Curr_Function( p_function   => l_module_name,
520                                                  p_debug_mode => l_debug_mode );
521                END IF;
522                IF l_debug_mode = 'Y' THEN
523                      pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.validate_header_info';
524                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
525                END IF;
526 
527                --log1('----- Entering into validate_header_info-------');
528 
529                IF l_debug_mode = 'Y' THEN
530                      pa_debug.g_err_stage := 'Opening l_version_info_csr';
531                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
532                END IF;
533 
534                -- since there would be check for null budget_version_id in the
535                -- calling place, no check is made here for the same
536                OPEN l_version_info_csr(p_budget_version_id);
537                FETCH l_version_info_csr INTO
538                      l_record_version_number,
539                      l_period_mask_id,
540                      l_project_id,
541                      l_fin_plan_type_id,
542                      l_ci_id,
543                      l_version_type,
544                      l_app_cost_plan_type_flag,
545                      l_rev_plan_type_flag,
546                      l_prime_cost_fcst_flag,
547                      l_prime_rev_fcst_flag,
548                      l_current_working_flag,
549                      l_plan_class_code,
550                      l_time_phase_code;
551 
552                      IF l_version_info_csr%NOTFOUND THEN
553                            IF l_debug_mode = 'Y' THEN
554                                 pa_debug.g_err_stage := 'Cursor l_version_info_csr failed to fetch data';
555                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
556                            END IF;
557                            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
558                      END IF;
559                CLOSE l_version_info_csr;
560 
561                IF l_debug_mode = 'Y' THEN
562                      pa_debug.g_err_stage := 'Data fetched from l_version_info_csr';
563                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
564                END IF;
565 
566                --log1('----- STAGE 1-------');
567                IF l_debug_mode = 'Y' THEN
568                      pa_debug.g_err_stage := 'Validating record version number';
569                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
570                END IF;
571                IF l_record_version_number <> p_record_version_number THEN
572                       IF l_debug_mode = 'Y' THEN
573                           pa_debug.g_err_stage := 'Record version number has changed';
574                           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
575                       END IF;
576                       RAISE BV_validation_failed_exc;
577                END IF;
578                --Update the interface table with error_code 'PA_FP_WEBADI_VER_MODIFIED'
579 
580                IF l_debug_mode = 'Y' THEN
581                      pa_debug.g_err_stage := 'Checking for periodic layout';
582                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
583                END IF;
584 
585                BEGIN
586                      SELECT  'Y'
587                      INTO    is_periodic_layout
588                      FROM    DUAL
589                      WHERE EXISTS(SELECT  'X'
590                                   FROM    pa_fp_webadi_upload_inf
591                                   WHERE   run_id = p_run_id
592                                   AND     amount_type_name IS NOT NULL
593                                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99));
594                EXCEPTION
595                      WHEN NO_DATA_FOUND THEN
596                           is_periodic_layout := 'N';
597                END;
598 
599                --log1('----- STAGE 2-------');
600                IF is_periodic_layout = 'Y' THEN
601                     IF l_debug_mode = 'Y' THEN
602                          pa_debug.g_err_stage := 'Validating period mask';
603                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
604                     END IF;
605 
606                     IF l_time_phase_code <> 'N' THEN
607                          BEGIN
608                             SELECT record_version_number
609                             INTO   l_pm_rec_version_number
610                             FROM   pa_period_masks_b
611                             WHERE  period_mask_id = l_period_mask_id;
612                          EXCEPTION
613                              WHEN NO_DATA_FOUND THEN
614                                   IF l_debug_mode = 'Y' THEN
615                                       pa_debug.g_err_stage := 'No data found for period mask';
616                                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
617                                   END IF;
618                                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
619                          END;
620                          -- the following validation is only for timephased budgets downloaded in
621                          -- periodic layouts
622                          IF l_pm_rec_version_number <> p_pm_rec_version_number THEN
623                             IF l_debug_mode = 'Y' THEN
624                                 pa_debug.g_err_stage := 'period mask has changed';
625                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
626                             END IF;
627                             RAISE Bv_period_mask_changed_Exc;
628                             --Update the interface table with error_code 'PA_FP_WEBADI_TP_MODIFIED'
629                          END IF;
630                     END IF;
631                END IF;
632 
633                --log1('----- STAGE 3-------');
634                IF l_debug_mode = 'Y' THEN
635                      pa_debug.g_err_stage := 'Checking for function security';
636                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
637                END IF;
638 
639                IF l_ci_id = -1 THEN
640                      -- budget version
641                      PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY
642                         (p_api_version_number => PA_BUDGET_PUB.G_API_VERSION_NUMBER,
643                          p_project_id         => l_project_id,
644                          p_fin_plan_type_id   => l_fin_plan_type_id,
645                          p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN,
646                          p_function_name      => 'PA_PM_UPDATE_BUDGET',
647                          p_version_type       => l_version_type,
648                          x_return_status      => l_return_status,
649                          x_ret_code           => l_sec_ret_code);
650                ELSE
651                      -- change order version
652                      PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY
653                         (p_api_version_number => PA_BUDGET_PUB.G_API_VERSION_NUMBER,
654                          p_project_id         => l_project_id,
655                          p_fin_plan_type_id   => l_fin_plan_type_id,
656                          p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN,
657                          p_function_name      => 'PA_PM_UPDATE_CHG_DOC',
658                          p_version_type       => l_version_type,
659                          x_return_status      => l_return_status,
660                          x_ret_code           => l_sec_ret_code);
661                END IF;
662 
663                IF l_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
664                    IF l_debug_mode = 'Y' THEN
665                        pa_debug.g_err_stage := 'Function security not present';
666                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
667                    END IF;
668                    RAISE No_Bv_Maint_Previlege_Exc;
669                    --Update the interface table with error_code 'PA_FP_WEBADI_NO_BV_MAINT_PVLG'
670                END IF;
671 
672                --log1('----- STAGE 4-------');
673                -- Checking, if the budget version can be edited or not
674                IF l_debug_mode = 'Y' THEN
675                      pa_debug.g_err_stage := 'Checking if the version can be edited';
676                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
677                END IF;
678 
679                IF l_ci_id = -1 THEN
680                    pa_fin_plan_utils.validate_editable_bv
681                        (p_budget_version_id     => p_budget_version_id,
682                         p_user_id               => fnd_global.user_id,
683                         p_context               => 'WEBADI',
684                         p_excel_calling_mode    => p_calling_mode,
685                         x_locked_by_person_id   => l_locked_by_persion_id,
686                         x_err_code              => l_val_err_code,
687                         x_return_status         => l_return_status,
688                         x_msg_count             => l_msg_count,
689                         x_msg_data              => l_msg_data);
690 
691                    IF l_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
692                       IF l_val_err_code IS NOT NULL THEN
693                             IF l_debug_mode = 'Y' THEN
694                                 pa_debug.g_err_stage := 'The version can not be edited';
695                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
696                             END IF;
697                             RAISE Bv_Non_Editable_Exc;
698                             --update the interface table with the error_code;
699                       END IF;
700                    END IF;
701 
702                    --log1('----- STAGE 5-------');
703                ELSE
704                      -- Check if the ci is not editable
705                      IF l_debug_mode = 'Y' THEN
706                            pa_debug.g_err_stage := 'Checking if the CO can be updated';
707                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
708                      END IF;
709                      BEGIN
710                              SELECT pjs.project_system_status_code
711                              INTO   l_ci_status_code
712                              FROM   pa_control_items pci,
713                                     pa_project_statuses pjs
714                              WHERE  pci.ci_id = l_ci_id
715                              and    pci.status_code = pjs.project_status_code;
716                      EXCEPTION
717                              WHEN NO_DATA_FOUND THEN
718                                IF l_debug_mode = 'Y' THEN
719                                  pa_debug.g_err_stage := 'Status code not found';
720                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
721                                END IF;
722                                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
723                      END;
724 
725                      IF l_ci_status_code NOT IN ('CI_DRAFT', 'CI_WORKING') THEN
726                            IF l_debug_mode = 'Y' THEN
727                                pa_debug.g_err_stage := 'CO version cannot be updated';
728                                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
729                            END IF;
730                            RAISE Co_Ver_Non_Editable_Exc;
731                            --update the interface table with error_code 'PA_FP_WA_CI_VER_NON_EDITABLE'
732                      END IF;
733 
734                      --log1('----- STAGE 6-------');
735                END IF;
736                /* check if the p_submit flag is passed as 'Y', if yes then
737                 * check if the version is current working version or not,
738                 * if the user has the submit privilege or not
739                 * throw an error, if the version is CI
740                 */
741 
742                IF l_debug_mode = 'Y' THEN
743                      pa_debug.g_err_stage := 'Checking for submit previlege';
744                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
745                END IF;
746                IF p_submit_flag = 'Y' THEN
747                        -- call to check if the version is current working
748                        IF l_ci_id = -1 THEN
749                            IF l_current_working_flag = 'N' THEN
750                               IF l_debug_mode = 'Y' THEN
751                                  pa_debug.g_err_stage := 'Submittin while not current working';
752                                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
753                               END IF;
754                               RAISE Bv_Not_Curr_Working_Exc;
755                               --Update the interface table with error_code 'PA_FP_WA_BV_NOT_CURR_WORKING';
756                            END IF;
757                        ELSE -- for CI version the p_submit_flag = 'Y'
758                           IF l_debug_mode = 'Y' THEN
759                               pa_debug.g_err_stage := 'Submitting CO version';
760                               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
761                           END IF;
762                           RAISE Ci_Ver_Sumbit_Flag_Exc;
763                           --Update the interface table with error_code 'PA_FP_WA_CI_VER_SUBMIT_FLAG';
764                        END IF;
765 
766                        PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY
767                        (p_api_version_number => PA_BUDGET_PUB.G_API_VERSION_NUMBER,
768                         p_project_id         => l_project_id,
769                         p_fin_plan_type_id   => l_fin_plan_type_id,
770                         p_calling_context    => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN,
771                         p_function_name      => 'PA_PM_SUBMIT_BUDGET',
772                         p_version_type       => l_version_type,
773                         x_return_status      => l_return_status,
774                         x_ret_code           => l_sec_ret_code);
775 
776                        IF l_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
777                             IF l_debug_mode = 'Y' THEN
778                                 pa_debug.g_err_stage := 'No submit previlege';
779                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
780                             END IF;
781                             RAISE No_Bv_Maint_Previlege_Exc;
782                             --Update the interface table with error_code 'PA_FP_WEBADI_NO_BV_MAINT_PVLG'
783                        END IF;
784 
785                        --log1('----- STAGE 7-------');
786                END IF; -- p_submit_flag = 'Y'
787 
788                IF l_debug_mode = 'Y' THEN
789                   pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.validate_header_info';
790                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
791                END IF;
792                IF l_debug_mode = 'Y' THEN
793                   pa_debug.reset_curr_function;
794                END IF;
795 
796                --log1('----- Leaving validate_header_info-------');
797 
798       EXCEPTION
799            -- handling all the pre defined exceptions
800            WHEN BV_validation_failed_exc THEN
801                   IF l_debug_mode = 'Y' THEN
802                       pa_debug.g_err_stage := 'Updating tmp table with error code: PA_FP_WEBADI_VER_MODIFIED';
803                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
804                   END IF;
805 
806                   UPDATE pa_fp_webadi_upload_inf
807                   SET    val_error_flag       = 'Y',
808                          val_error_code       = 'PA_FP_WEBADI_VER_MODIFIED',
809                          err_task_name        = nvl(task_name,'-98'),
810                          err_task_number      = nvl(task_number,'-98'),
811                          err_alias            = nvl(resource_alias,'-98'),
812                          err_amount_type_code = nvl(amount_type_code,'-98')
813                   WHERE  run_id=p_run_id
814                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
815 
816                   x_return_status := FND_API.G_RET_STS_ERROR;
817                   IF l_debug_mode = 'Y' THEN
818                      pa_debug.reset_curr_function;
819                   END IF;
820 
821                   RETURN;
822            WHEN Bv_period_mask_changed_Exc THEN
823                   IF l_debug_mode = 'Y' THEN
824                       pa_debug.g_err_stage := 'Updating tmp table with error code: PA_FP_WEBADI_TP_MODIFIED';
825                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
826                   END IF;
827 
828                   UPDATE pa_fp_webadi_upload_inf
829                   SET    val_error_flag = 'Y',
830                          val_error_code = 'PA_FP_WEBADI_TP_MODIFIED',
831                          err_task_name        = nvl(task_name,'-98'),
832                          err_task_number      = nvl(task_number,'-98'),
833                          err_alias            = nvl(resource_alias,'-98'),
834                          err_amount_type_code = nvl(amount_type_code,'-98')
835                   WHERE  run_id=p_run_id
836                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
837 
838                   x_return_status := FND_API.G_RET_STS_ERROR;
839                   IF l_debug_mode = 'Y' THEN
840                      pa_debug.reset_curr_function;
841                   END IF;
842 
843                   RETURN;
844            WHEN No_Bv_Maint_Previlege_Exc THEN
845                   IF l_debug_mode = 'Y' THEN
846                       pa_debug.g_err_stage := 'Updating tmp table with error code: PA_FP_WEBADI_NO_BV_MAINT_PVLG';
847                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
848                   END IF;
849 
850                   UPDATE pa_fp_webadi_upload_inf
851                   SET    val_error_flag = 'Y',
852                          val_error_code = 'PA_FP_WEBADI_NO_BV_MAINT_PVLG',
853                          err_task_name        = nvl(task_name,'-98'),
854                          err_task_number      = nvl(task_number,'-98'),
855                          err_alias            = nvl(resource_alias,'-98'),
856                          err_amount_type_code = nvl(amount_type_code,'-98')
857                   WHERE  run_id=p_run_id
858                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
859 
860                   x_return_status := FND_API.G_RET_STS_ERROR;
861                   IF l_debug_mode = 'Y' THEN
862                      pa_debug.reset_curr_function;
863                   END IF;
864 
865                   RETURN;
866            WHEN Bv_Non_Editable_Exc THEN
867                   IF l_debug_mode = 'Y' THEN
868                       pa_debug.g_err_stage := 'Updating tmp table with error code: ' || l_val_err_code;
869                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
870                   END IF;
871 
872                   UPDATE pa_fp_webadi_upload_inf
873                   SET    val_error_flag = 'Y',
874                          val_error_code = l_val_err_code,
875                          err_task_name        = nvl(task_name,'-98'),
876                          err_task_number      = nvl(task_number,'-98'),
877                          err_alias            = nvl(resource_alias,'-98'),
878                          err_amount_type_code = nvl(amount_type_code,'-98')
879                   WHERE  run_id=p_run_id
880                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
881 
882                   x_return_status := FND_API.G_RET_STS_ERROR;
883                   IF l_debug_mode = 'Y' THEN
884                      pa_debug.reset_curr_function;
885                   END IF;
886 
887                   RETURN;
888            WHEN Co_Ver_Non_Editable_Exc THEN
889                   IF l_debug_mode = 'Y' THEN
890                       pa_debug.g_err_stage := 'Updating tmp table with error code: FP_WEBADI_CI_VER_NON_EDITABLE';
891                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
892                   END IF;
893 
894                   UPDATE pa_fp_webadi_upload_inf
895                   SET    val_error_flag = 'Y',
896                          val_error_code = 'PA_FP_WA_CI_VER_NON_EDITABLE',
897                          err_task_name        = nvl(task_name,'-98'),
898                          err_task_number      = nvl(task_number,'-98'),
899                          err_alias            = nvl(resource_alias,'-98'),
900                          err_amount_type_code = nvl(amount_type_code,'-98')
901                   WHERE  run_id=p_run_id
902                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
903 
904                   x_return_status := FND_API.G_RET_STS_ERROR;
905                   IF l_debug_mode = 'Y' THEN
906                      pa_debug.reset_curr_function;
907                   END IF;
908 
909                   RETURN;
910            WHEN Bv_Not_Curr_Working_Exc THEN
911                   IF l_debug_mode = 'Y' THEN
912                       pa_debug.g_err_stage := 'Updating tmp table with error code: FP_WEBADI_BV_NOT_CURR_WORKING';
913                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
914                   END IF;
915 
916                   UPDATE pa_fp_webadi_upload_inf
917                   SET    val_error_flag = 'Y',
918                          val_error_code = 'PA_FP_WA_BV_NOT_CURR_WORKING',
919                          err_task_name        = nvl(task_name,'-98'),
920                          err_task_number      = nvl(task_number,'-98'),
921                          err_alias            = nvl(resource_alias,'-98'),
922                          err_amount_type_code = nvl(amount_type_code,'-98')
923                   WHERE  run_id=p_run_id
924                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
925 
926                   x_return_status := FND_API.G_RET_STS_ERROR;
927                   IF l_debug_mode = 'Y' THEN
928                      pa_debug.reset_curr_function;
929                   END IF;
930 
931                   RETURN;
932            WHEN Ci_Ver_Sumbit_Flag_Exc THEN
933                   IF l_debug_mode = 'Y' THEN
934                       pa_debug.g_err_stage := 'Updating tmp table with error code: FP_WEBADI_CI_VER_SUBMIT_FLAG';
935                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
936                   END IF;
937 
938                   UPDATE pa_fp_webadi_upload_inf
939                   SET    val_error_flag = 'Y',
940                          val_error_code = 'PA_FP_WA_CI_VER_SUBMIT_FLAG',
941                          err_task_name        = nvl(task_name,'-98'),
942                          err_task_number      = nvl(task_number,'-98'),
943                          err_alias            = nvl(resource_alias,'-98'),
944                          err_amount_type_code = nvl(amount_type_code,'-98')
945                   WHERE  run_id=p_run_id
946                   AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
947 
948                   x_return_status := FND_API.G_RET_STS_ERROR;
949                   IF l_debug_mode = 'Y' THEN
950                      pa_debug.reset_curr_function;
951                   END IF;
952 
953                   RETURN;
954 
955            WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
956                l_msg_count := FND_MSG_PUB.count_msg;
957 
958                IF l_msg_count = 1 and x_msg_data IS NULL THEN
959                      PA_INTERFACE_UTILS_PUB.get_messages
960                        (p_encoded        => FND_API.G_TRUE
961                        ,p_msg_index      => 1
962                        ,p_msg_count      => l_msg_count
963                        ,p_msg_data       => l_msg_data
964                        ,p_data           => l_data
965                        ,p_msg_index_out  => l_msg_index_out);
966                     x_msg_data := l_data;
967                     x_msg_count := l_msg_count;
968                ELSE
969                     x_msg_count := l_msg_count;
970                END IF;
971                x_return_status := FND_API.G_RET_STS_ERROR;
972 
973                IF l_debug_mode = 'Y' THEN
974                    pa_debug.reset_curr_function;
975                END IF;
976                RETURN;
977 
978            WHEN OTHERS THEN
979                x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
980                x_msg_count     := 1;
981                x_msg_data      := SQLERRM;
982 
983                FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
984                                        ,p_procedure_name  => 'prepare_val_input');
985                IF l_debug_mode = 'Y' THEN
986                     pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
987                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
988                END IF;
989 
990                IF l_debug_mode = 'Y' THEN
991                   pa_debug.reset_curr_function;
992                END IF;
993                RAISE;
994 
995       END validate_header_info; -- of validate_header_info
996 
997   /* The input parameter p_context would only be passed if the task id can not be derived
998    * from the task number/ task name provided i.e task_id is returned as null from the select
999    * in prepare_val_input api. The valid value of this is 'INV_TASK.
1000    * For other validation errors, the corresponding error code would be passed to the api
1001    * along with other informations like task_id, resource_alias, amount_type_code
1002    */
1003 
1004    -- Making this procedure an autonomous transition block as the errors reported
1005    -- on the interface table have to be retained even after rolling back all the
1006    -- other DML performed in the course of validation processing till the point
1007    -- a validation failure occurs.
1008 
1009   PROCEDURE process_errors
1010                  ( p_run_id             IN           pa_fp_webadi_upload_inf.run_id%TYPE,
1011                    p_context            IN           VARCHAR2,
1012                    p_periodic_flag      IN           VARCHAR2,
1013                    p_error_code_tbl     IN           SYSTEM.PA_VARCHAR2_30_TBL_TYPE,
1014                    p_task_id_tbl        IN           SYSTEM.PA_NUM_TBL_TYPE,
1015                    p_rlm_id_tbl         IN           SYSTEM.PA_NUM_TBL_TYPE,
1016                    p_txn_curr_tbl       IN           SYSTEM.PA_VARCHAR2_30_TBL_TYPE,
1017                    p_amount_type_tbl    IN           SYSTEM.PA_VARCHAR2_30_TBL_TYPE,
1018                    p_request_id         IN           pa_budget_versions.request_id%TYPE,
1019                    x_return_status      OUT          NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1020                    x_msg_data           OUT          NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1021                    x_msg_count          OUT          NOCOPY NUMBER) --File.Sql.39 bug 4440895
1022   IS
1023 --  PRAGMA AUTONOMOUS_TRANSACTION;
1024 
1025        l_return_status                      VARCHAR2(1);
1026        l_msg_data                           VARCHAR2(2000);
1027        l_msg_count                          NUMBER;
1028 
1029        l_debug_mode                         VARCHAR2(1);
1030        l_module_name                        VARCHAR2(100) := 'pa_fp_webadi_pkg.process_errors';
1031        l_debug_level3                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1032        l_debug_level5                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1033        l_msg_index_out                      NUMBER;
1034        l_data                               VARCHAR2(2000);
1035        l_periodic_flag                      VARCHAR2(1);
1036 
1037   BEGIN
1038        fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1039        x_msg_count := 0;
1040        x_return_status := FND_API.G_RET_STS_SUCCESS;
1041        IF l_debug_mode = 'Y' THEN
1042              PA_DEBUG.Set_Curr_Function( p_function   => l_module_name,
1043                                          p_debug_mode => l_debug_mode );
1044        END IF;
1045        IF l_debug_mode = 'Y' THEN
1046              pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.process_errors';
1047              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1048        END IF;
1049 
1050        --log1('PE 1'||p_error_code_tbl.COUNT);
1051        --log1('PE 2'||p_periodic_flag);
1052        --log1('PE 3'||p_task_id_tbl.COUNT);
1053        --log1('PE 4'||p_rlm_id_tbl.COUNT);
1054        --log1('PE 5'||p_txn_curr_tbl.COUNT);
1055        --log1('PE 6'||p_run_id);
1056        --log1('PE 7'||p_context);
1057        /*FOR  k IN 1..p_error_code_tbl.COUNT LOOP
1058 
1059             log1('p_error_code_tbl('||k||') is '||p_error_code_tbl(k));
1060             log1('p_task_id_tbl('||k||') is '||p_task_id_tbl(k));
1061             log1('p_rlm_id_tbl('||k||') is '||p_rlm_id_tbl(k));
1062             log1('p_txn_curr_tbl('||k||') is '||p_txn_curr_tbl(k));
1063             IF p_amount_type_tbl.EXISTS(k) THEN
1064                 log1('p_amount_type_tbl('||k||') is '||p_amount_type_tbl(k));
1065 
1066             ELSE
1067 
1068                 log1('p_amount_type_tbl('||k||') is NULL5');
1069             END IF;
1070       end loop;*/
1071 
1072       l_periodic_flag := p_periodic_flag;
1073 
1074       -- 4497322.Perf Fix:A condition is added in the WHERE clause.
1075       IF l_periodic_flag IS NULL THEN
1076 
1077         BEGIN
1078             SELECT 'Y'
1079             INTO   l_periodic_flag
1080             FROM   DUAL
1081             WHERE  EXISTS (SELECT 1
1082                            FROM   pa_fp_webadi_upload_inf
1083                            WHERE  run_id=p_run_id
1084                            AND    amount_type_name IS NOT NULL
1085                            AND    Nvl(p_request_id, -99) = Nvl(request_id, -99));
1086 
1087         EXCEPTION
1088         WHEN NO_DATA_FOUND THEN
1089 
1090             l_periodic_flag := 'N';
1091 
1092         END;
1093 
1094       END IF;
1095 
1096 
1097 
1098        IF p_context IS NOT NULL THEN
1099            IF p_context = 'INV_TASK' THEN
1100                UPDATE pa_fp_webadi_upload_inf
1101                SET    val_error_flag       = 'Y',
1102                       val_error_code       = 'INVALID_TASK_INFO',
1103                       err_task_name        = nvl(task_name,'-98'),
1104                       err_task_number      = nvl(task_number,'-98'),
1105                       err_alias            = nvl(resource_alias,'-98'),
1106                       err_amount_type_code = nvl(amount_type_code,'-98')
1107                WHERE  run_id = p_run_id
1108                AND    task_id IS NULL
1109                AND    val_error_flag IS NULL
1110                AND    Nvl(p_request_id, -99) = Nvl(request_id, -99);
1111            ELSIF p_context = 'INV_RESOURCE' THEN
1112                UPDATE pa_fp_webadi_upload_inf
1113                SET    val_error_flag       = 'Y',
1114                       val_error_code       = 'INVALID_RESOURCE_INFO',
1115                       err_task_name        = nvl(task_name,'-98'),
1116                       err_task_number      = nvl(task_number,'-98'),
1117                       err_alias            = nvl(resource_alias,'-98'),
1118                       err_amount_type_code = nvl(amount_type_code,'-98')
1119                WHERE  run_id = p_run_id
1120                AND    resource_list_member_id IS NULL
1121                AND    val_error_flag IS NULL
1122                AND    Nvl(p_request_id, -99) = Nvl(request_id, -99);
1123            ELSE -- no other valid not null context
1124                IF l_debug_mode = 'Y' THEN
1125                    pa_debug.g_err_stage := 'Not a valid calling context passed';
1126                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1127                END IF;
1128                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1129            END IF;
1130 
1131        ELSE  -- when p_context is not passed
1132            IF p_error_code_tbl.count > 0 THEN
1133 
1134                IF p_periodic_flag = 'Y' THEN
1135 
1136                   IF p_error_code_tbl.COUNT = p_task_id_tbl.COUNT AND
1137                      p_error_code_tbl.COUNT = p_rlm_id_tbl.COUNT AND
1138                      p_error_code_tbl.COUNT = p_amount_type_tbl.COUNT AND
1139                      p_error_code_tbl.COUNT = p_txn_curr_tbl.COUNT THEN
1140                         FORALL i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST
1141                              UPDATE pa_fp_webadi_upload_inf
1142                              SET    val_error_flag       = 'Y',
1143                                     val_error_code       = p_error_code_tbl(i),
1144                                     err_task_name        = nvl(task_name,'-98'),
1145                                     err_task_number      = nvl(task_number,'-98'),
1146                                     err_alias            = nvl(resource_alias,'-98'),
1147                                     err_amount_type_code = nvl(amount_type_code,'-98')
1148                              WHERE  run_id = p_run_id
1149                              AND    task_id = p_task_id_tbl(i)
1150                              AND    resource_list_member_id = p_rlm_id_tbl(i)
1151                              AND    Nvl(txn_currency_code, '-11') = Nvl(p_txn_curr_tbl(i), '-11')
1152                              AND    amount_type_code = p_amount_type_tbl(i)
1153                              AND    Nvl(p_request_id, -99) = Nvl(request_id, -99)
1154                              AND    ROWNUM=1;
1155 
1156                   ELSE -- input table length not same
1157                       IF l_debug_mode = 'Y' THEN
1158                          pa_debug.g_err_stage := 'Information mismatch to process: periodic';
1159                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1160                       END IF;
1161                       RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1162                   END IF;
1163 
1164                ELSE -- non periodic
1165 
1166                   IF p_error_code_tbl.COUNT = p_task_id_tbl.COUNT AND
1167                      p_error_code_tbl.COUNT = p_rlm_id_tbl.COUNT AND
1168                      p_error_code_tbl.COUNT = p_txn_curr_tbl.COUNT THEN
1169                            FORALL i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST
1170                                 UPDATE pa_fp_webadi_upload_inf inf
1171                                 SET    inf.val_error_flag       = 'Y',
1172                                        inf.val_error_code       = p_error_code_tbl(i),
1173                                        inf.err_task_name        = nvl(inf.task_name,'-98'),
1174                                        inf.err_task_number      = nvl(inf.task_number,'-98'),
1175                                        inf.err_alias            = nvl(inf.resource_alias,'-98'),
1176                                        inf.err_amount_type_code = nvl(inf.amount_type_code,'-98')
1177                                 WHERE  inf.run_id = p_run_id
1178                                 AND    inf.task_id = p_task_id_tbl(i)
1179                                 AND    inf.resource_list_member_id = p_rlm_id_tbl(i)
1180                                 AND    Nvl(inf.txn_currency_code, '-11') = Nvl(p_txn_curr_tbl(i), '-11')
1181                                 AND    Nvl(p_request_id, -99) = Nvl(inf.request_id, -99)
1182                                 AND    ROWNUM=1;
1183 
1184                                 IF l_debug_mode = 'Y' THEN
1185                                      pa_debug.g_err_stage := 'SQL%COUNT' || SQL%ROWCOUNT;
1186                                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1187                                END IF;
1188                   ELSE
1189                         IF l_debug_mode = 'Y' THEN
1190                            pa_debug.g_err_stage := 'Information mismatch to process: non periodic';
1191                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1192                         END IF;
1193                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1194                   END IF;
1195                END IF;
1196 
1197            ELSE -- lenght of error code table is 0 when context is not passed
1198                IF l_debug_mode = 'Y' THEN
1199                    pa_debug.g_err_stage := 'No error code passed, returning';
1200                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1201                END IF;
1202                IF l_debug_mode = 'Y' THEN
1203                    pa_debug.reset_curr_function;
1204                END IF;
1205                RETURN;
1206            END IF;
1207        END IF;  -- p_context
1208 
1209        -- placing a commit here to retain all the error codes stamped.
1210 --       COMMIT;
1211 
1212        IF l_debug_mode = 'Y' THEN
1213              pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.process_errors';
1214              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1215        END IF;
1216        IF l_debug_mode = 'Y' THEN
1217              pa_debug.reset_curr_function;
1218        END IF;
1219 
1220   EXCEPTION
1221        WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1222            l_msg_count := FND_MSG_PUB.count_msg;
1223 
1224            IF l_msg_count = 1 and x_msg_data IS NULL THEN
1225                  PA_INTERFACE_UTILS_PUB.get_messages
1226                    (p_encoded        => FND_API.G_TRUE
1227                    ,p_msg_index      => 1
1228                    ,p_msg_count      => l_msg_count
1229                    ,p_msg_data       => l_msg_data
1230                    ,p_data           => l_data
1231                    ,p_msg_index_out  => l_msg_index_out);
1232                 x_msg_data := l_data;
1233                 x_msg_count := l_msg_count;
1234            ELSE
1235                 x_msg_count := l_msg_count;
1236            END IF;
1237            x_return_status := FND_API.G_RET_STS_ERROR;
1238 
1239            IF l_debug_mode = 'Y' THEN
1240                pa_debug.reset_curr_function;
1241            END IF;
1242            RETURN;
1243 
1244        WHEN OTHERS THEN
1245            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1246            x_msg_count     := 1;
1247            x_msg_data      := SQLERRM;
1248 
1249            FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
1250                                    ,p_procedure_name  => 'process_errors');
1251            IF l_debug_mode = 'Y' THEN
1252                 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1253                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1254            END IF;
1255 
1256            IF l_debug_mode = 'Y' THEN
1257               pa_debug.reset_curr_function;
1258            END IF;
1259            RAISE;
1260   END process_errors;
1261 
1262 
1263   /* Bug 4431269: Added the following private api to read the global table of
1264    * rec type returned from calculate api and then to call process_errors api
1265    * to report the errors in interface table.
1266    */
1267   PROCEDURE read_global_var_to_report_err
1268       (    p_run_id                   IN         pa_fp_webadi_upload_inf.run_id%TYPE,
1269            x_return_status            OUT        NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1270            x_msg_count                OUT        NOCOPY NUMBER, --File.Sql.39 bug 4440895
1271            x_msg_data                 OUT        NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1272       )
1273 
1274   IS
1275      l_return_status                      VARCHAR2(1);
1276      l_msg_data                           VARCHAR2(2000);
1277      l_msg_count                          NUMBER;
1278 
1279      l_debug_mode                         VARCHAR2(1);
1280      l_module_name                        VARCHAR2(100) := 'pa_fp_webadi_pkg.read_global_var_to_report_err';
1281      l_debug_level3                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1282      l_debug_level5                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1283      l_msg_index_out                      NUMBER;
1284      l_data                               VARCHAR2(2000);
1285 
1286      l_err_val_code_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1287      l_err_task_id_tbl                  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1288      l_err_rlm_id_tbl                   SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1289      l_err_txn_curr_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1290 
1291   BEGIN
1292        fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1293        x_msg_count := 0;
1294        x_return_status := FND_API.G_RET_STS_SUCCESS;
1295        IF l_debug_mode = 'Y' THEN
1296              PA_DEBUG.Set_Curr_Function( p_function   => l_module_name,
1297                                          p_debug_mode => l_debug_mode );
1298        END IF;
1299        IF l_debug_mode = 'Y' THEN
1300              pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.read_global_var_to_report_err';
1301              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1302        END IF;
1303 
1304        -- checking if there is some value in the global table
1305        IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1306            IF l_debug_mode = 'Y' THEN
1307                pa_debug.g_err_stage := 'There are some values in the global table';
1308                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1309            END IF;
1310 
1311            -- processing starts
1312            FOR i IN g_fp_webadi_rec_tbl.FIRST .. g_fp_webadi_rec_tbl.LAST LOOP
1313                l_err_val_code_tbl.EXTEND(1);
1314                l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := g_fp_webadi_rec_tbl(i).error_code;
1315                l_err_task_id_tbl.EXTEND(1);
1316                l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := g_fp_webadi_rec_tbl(i).task_id;
1317                l_err_rlm_id_tbl.EXTEND(1);
1318                l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := g_fp_webadi_rec_tbl(i).rlm_id;
1319                l_err_txn_curr_tbl.EXTEND(1);
1320                l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := g_fp_webadi_rec_tbl(i).txn_currency;
1321            END LOOP;
1322 
1323            pa_fp_webadi_pkg.process_errors
1324                   ( p_run_id          => p_run_id,
1325                     p_error_code_tbl  => l_err_val_code_tbl,
1326                     p_task_id_tbl     => l_err_task_id_tbl,
1327                     p_rlm_id_tbl      => l_err_rlm_id_tbl,
1328                     p_txn_curr_tbl    => l_err_txn_curr_tbl,
1329                     x_return_status   => l_return_status,
1330                     x_msg_data        => l_msg_data,
1331                     x_msg_count       => l_msg_count);
1332                   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1333                         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1334                   END IF;
1335 
1336            -- clearing the table of rec type
1337            IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1338                g_fp_webadi_rec_tbl.DELETE;
1339            END IF;
1340        ELSE
1341            IF l_debug_mode = 'Y' THEN
1342                pa_debug.g_err_stage := 'There is no value stored in the global table, returning';
1343                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1344            END IF;
1345            RAISE PA_FP_CONSTANTS_PKG.Just_Ret_Exc;
1346        END IF;
1347        IF l_debug_mode = 'Y' THEN
1348              pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.read_global_var_to_report_err';
1349              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1350        END IF;
1351        IF l_debug_mode = 'Y' THEN
1352              pa_debug.reset_curr_function;
1353        END IF;
1354   EXCEPTION
1355        WHEN PA_FP_CONSTANTS_PKG.Just_Ret_Exc THEN
1356             IF l_debug_mode = 'Y' THEN
1357                 pa_debug.reset_curr_function;
1358             END IF;
1359             RETURN;
1360        WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1361 
1362            -- clearing the table of rec type
1363            IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1364                g_fp_webadi_rec_tbl.DELETE;
1365            END IF;
1366 
1367            l_msg_count := FND_MSG_PUB.count_msg;
1368 
1369            IF l_msg_count = 1 and x_msg_data IS NULL THEN
1370                  PA_INTERFACE_UTILS_PUB.get_messages
1371                    (p_encoded        => FND_API.G_TRUE
1372                    ,p_msg_index      => 1
1373                    ,p_msg_count      => l_msg_count
1374                    ,p_msg_data       => l_msg_data
1375                    ,p_data           => l_data
1376                    ,p_msg_index_out  => l_msg_index_out);
1377                 x_msg_data := l_data;
1378                 x_msg_count := l_msg_count;
1379            ELSE
1380                 x_msg_count := l_msg_count;
1381            END IF;
1382            x_return_status := FND_API.G_RET_STS_ERROR;
1383 
1384            IF l_debug_mode = 'Y' THEN
1385                pa_debug.reset_curr_function;
1386            END IF;
1387            RETURN;
1388 
1389        WHEN OTHERS THEN
1390            -- clearing the table of rec type
1391            IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1392                g_fp_webadi_rec_tbl.DELETE;
1393            END IF;
1394 
1395            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1396            x_msg_count     := 1;
1397            x_msg_data      := SQLERRM;
1398 
1399            FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
1400                                    ,p_procedure_name  => 'read_global_var_to_report_err');
1401            IF l_debug_mode = 'Y' THEN
1402                 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1403                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1404            END IF;
1405 
1406            IF l_debug_mode = 'Y' THEN
1407               pa_debug.reset_curr_function;
1408            END IF;
1409            RAISE;
1410   END read_global_var_to_report_err;
1411 
1412   -- bug 4428112: introduced this private api to stamp the valid txn curr codes
1413   -- in the respective lines in the table of records of the interface table,
1414   -- for a non MC enabled version
1415   -- if the txn curr code was not populated earlier by the user, this is required
1416   -- as the cursor on the interface table would be opened again in prepare_pbl_input
1417   -- to prepare the input tables to process_budget_lines.
1418 
1419   PROCEDURE check_and_update_txn_curr_code
1420                (p_budget_line_tbl   IN         PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE,
1421                 px_inf_cur_rec_tbl  IN   OUT   NOCOPY inf_cur_tbl_typ, --File.Sql.39 bug 4440895
1422                 x_return_status     OUT        NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1423                 x_msg_count         OUT        NOCOPY NUMBER,   --File.Sql.39 bug 4440895
1424                 x_msg_data          OUT        NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
1425 
1426   IS
1427        l_return_status                      VARCHAR2(1);
1428        l_msg_data                           VARCHAR2(2000);
1429        l_msg_count                          NUMBER;
1430 
1431        l_debug_mode                         VARCHAR2(1);
1432        l_module_name                        VARCHAR2(100) := 'PAFPWAPB.check_and_update_txn_curr_code';
1433        l_debug_level3                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1434        l_debug_level5                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1435        l_msg_index_out                      NUMBER;
1436        l_data                               VARCHAR2(2000);
1437 
1438        l_task_id_tbl                        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1439        l_rlm_id_tbl                         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1440 
1441   BEGIN
1442        fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1443        x_msg_count := 0;
1444        x_return_status := FND_API.G_RET_STS_SUCCESS;
1445        IF l_debug_mode = 'Y' THEN
1446              PA_DEBUG.Set_Curr_Function( p_function   => l_module_name,
1447                                          p_debug_mode => l_debug_mode );
1448        END IF;
1449        IF l_debug_mode = 'Y' THEN
1450              pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.check_and_update_txn_curr_code';
1451              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1452        END IF;
1453 
1454        -- validating input params.
1455        IF p_budget_line_tbl.COUNT < 1 THEN
1456             IF l_debug_mode = 'Y' THEN
1457                 pa_debug.g_err_stage:=' Nothing to be updated, returning';
1458                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1459            END IF;
1460            RAISE PA_FP_CONSTANTS_PKG.Just_Ret_Exc;
1461        ELSE
1462            IF l_debug_mode = 'Y' THEN
1463                 pa_debug.g_err_stage:=' Values passed, checking for null txn curr recs.';
1464                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1465            END IF;
1466 
1467            FOR i IN p_budget_line_tbl.FIRST .. p_budget_line_tbl.LAST LOOP
1468                 -- looping through both the table types
1469                 FOR j IN px_inf_cur_rec_tbl.FIRST .. px_inf_cur_rec_tbl.LAST LOOP
1470                     IF p_budget_line_tbl(i).pa_task_id = px_inf_cur_rec_tbl(j).task_id AND
1471                        p_budget_line_tbl(i).resource_list_member_id = px_inf_cur_rec_tbl(j).resource_list_member_id AND
1472                        px_inf_cur_rec_tbl(j).txn_currency_code IS NULL THEN
1473                             px_inf_cur_rec_tbl(j).txn_currency_code := p_budget_line_tbl(i).txn_currency_code;
1474                     END IF;
1475                 END LOOP;
1476            END LOOP;
1477        END IF;
1478 
1479        IF l_debug_mode = 'Y' THEN
1480              pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.check_and_update_txn_curr_code';
1481              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1482        END IF;
1483        IF l_debug_mode = 'Y' THEN
1484              pa_debug.reset_curr_function;
1485        END IF;
1486   EXCEPTION
1487        WHEN PA_FP_CONSTANTS_PKG.Just_Ret_Exc THEN
1488             IF l_debug_mode = 'Y' THEN
1489                 pa_debug.reset_curr_function;
1490             END IF;
1491             RETURN;
1492        WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1493            l_msg_count := FND_MSG_PUB.count_msg;
1494 
1495            IF l_msg_count = 1 and x_msg_data IS NULL THEN
1496                  PA_INTERFACE_UTILS_PUB.get_messages
1497                    (p_encoded        => FND_API.G_TRUE
1498                    ,p_msg_index      => 1
1499                    ,p_msg_count      => l_msg_count
1500                    ,p_msg_data       => l_msg_data
1501                    ,p_data           => l_data
1502                    ,p_msg_index_out  => l_msg_index_out);
1503                 x_msg_data := l_data;
1504                 x_msg_count := l_msg_count;
1505            ELSE
1506                 x_msg_count := l_msg_count;
1507            END IF;
1508            x_return_status := FND_API.G_RET_STS_ERROR;
1509 
1510            IF l_debug_mode = 'Y' THEN
1511                pa_debug.reset_curr_function;
1512            END IF;
1513            RETURN;
1514 
1515        WHEN OTHERS THEN
1516            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1517            x_msg_count     := 1;
1518            x_msg_data      := SQLERRM;
1519 
1520            FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
1521                                    ,p_procedure_name  => 'check_and_update_txn_curr_code');
1522            IF l_debug_mode = 'Y' THEN
1523                 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1524                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1525            END IF;
1526 
1527            IF l_debug_mode = 'Y' THEN
1528               pa_debug.reset_curr_function;
1529            END IF;
1530            RAISE;
1531   END check_and_update_txn_curr_code;
1532 
1533   -- bug 4479036: a private function to check if the conversion
1534   -- attribute columns are displayed in the layout used, so that
1535   -- these attribute can be defaulted to null values or version
1536   -- level attributes accordingly.
1537 
1538   FUNCTION conv_attributes_displayed
1539             (p_run_id       IN       pa_fp_webadi_upload_inf.run_id%TYPE)
1540   RETURN VARCHAR2
1541   IS
1542 
1543     l_debug_mode                         VARCHAR2(1);
1544     l_module_name                        VARCHAR2(100) := 'PAFPWAPB.check_and_update_txn_curr_code';
1545     l_debug_level3                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1546     l_debug_level5                       CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1547 
1548     conv_attrb_displayed                 VARCHAR2(1);
1549 
1550     l_projfunc_rate_type                 pa_fp_webadi_upload_inf.projfunc_rate_type%TYPE;
1551     l_projfunc_rate_date_type            pa_fp_webadi_upload_inf.projfunc_rate_date_type%TYPE;
1552     l_projfunc_rate_date                 pa_fp_webadi_upload_inf.projfunc_rate_date%TYPE;
1553     l_project_rate_type                  pa_fp_webadi_upload_inf.project_rate_type%TYPE;
1554     l_project_rate_date_type             pa_fp_webadi_upload_inf.project_rate_date_type%TYPE;
1555     l_project_rate_date                  pa_fp_webadi_upload_inf.project_rate_date%TYPE;
1556 
1557 
1558   BEGIN
1559     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1560 
1561     IF l_debug_mode = 'Y' THEN
1562           PA_DEBUG.Set_Curr_Function( p_function   => l_module_name,
1563                                       p_debug_mode => l_debug_mode );
1564     END IF;
1565     IF l_debug_mode = 'Y' THEN
1566           pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.conv_attributes_displayed';
1567           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1568     END IF;
1569 
1570     conv_attrb_displayed := 'N';
1571 
1572     IF p_run_id IS NULL THEN
1573         IF l_debug_mode = 'Y' THEN
1574            pa_debug.g_err_stage := 'p_run_id is passed as null';
1575            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1576         END IF;
1577         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1578     END IF;
1579 
1580     IF l_debug_mode = 'Y' THEN
1581           pa_debug.g_err_stage := 'Checking for the values in conv attrb cols';
1582           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1583     END IF;
1584 
1585     BEGIN
1586         SELECT projfunc_rate_type,
1587                projfunc_rate_date_type,
1588                projfunc_rate_date,
1589                project_rate_type,
1590                project_rate_date_type,
1591                project_rate_date
1592         INTO   l_projfunc_rate_type,
1593                l_projfunc_rate_date_type,
1594                l_projfunc_rate_date,
1595                l_project_rate_type,
1596                l_project_rate_date_type,
1597                l_project_rate_date
1598         FROM   pa_fp_webadi_upload_inf
1599         WHERE  run_id = p_run_id
1600         AND    ROWNUM = 1;
1601 
1602         IF l_projfunc_rate_type <> g_hidden_col_char OR
1603            l_projfunc_rate_date_type <> g_hidden_col_char OR
1604            l_projfunc_rate_date <> g_hidden_col_date OR
1605            l_project_rate_type <> g_hidden_col_char OR
1606            l_project_rate_date_type <> g_hidden_col_char OR
1607            l_project_rate_date <> g_hidden_col_date THEN
1608             IF l_debug_mode = 'Y' THEN
1609                   pa_debug.g_err_stage := 'Conv attrb cols displayed in layout';
1610                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1611             END IF;
1612             conv_attrb_displayed := 'Y';
1613         END IF;
1614     EXCEPTION
1615         WHEN NO_DATA_FOUND THEN
1616             IF l_debug_mode = 'Y' THEN
1617                   pa_debug.g_err_stage := 'No rows in the interface table';
1618                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1619             END IF;
1620             conv_attrb_displayed := 'N';
1621     END;
1622 
1623 
1624     IF l_debug_mode = 'Y' THEN
1625           pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.conv_attributes_displayed';
1626           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1627           pa_debug.g_err_stage := 'conv_attrb_displayed: ' || conv_attrb_displayed;
1628           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1629     END IF;
1630     IF l_debug_mode = 'Y' THEN
1631           pa_debug.reset_curr_function;
1632     END IF;
1633 
1634     -- returning
1635     RETURN conv_attrb_displayed;
1636 
1637   EXCEPTION
1638     WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1639            IF l_debug_mode = 'Y' THEN
1640                 pa_debug.g_err_stage:='Invalid_Arg_Exc raised in conv_attributes_displayed';
1641                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1642            END IF;
1643            IF l_debug_mode = 'Y' THEN
1644                pa_debug.reset_curr_function;
1645            END IF;
1646            RAISE;
1647 
1648        WHEN OTHERS THEN
1649            FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
1650                                    ,p_procedure_name  => 'conv_attributes_displayed');
1651            IF l_debug_mode = 'Y' THEN
1652                 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1653                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1654            END IF;
1655 
1656            IF l_debug_mode = 'Y' THEN
1657               pa_debug.reset_curr_function;
1658            END IF;
1659            RAISE;
1660   END conv_attributes_displayed;
1661 
1662   PROCEDURE prepare_val_input
1663       ( p_run_id                   IN         pa_fp_webadi_upload_inf.run_id%TYPE,
1664         p_request_id               IN         pa_budget_versions.request_id%TYPE    DEFAULT  NULL,
1665         p_version_info_rec         IN         pa_fp_gen_amount_utils.fp_cols,
1666         p_prd_start_date_tbl       IN         SYSTEM.PA_DATE_TBL_TYPE,
1667         p_prd_end_date_tbl         IN         SYSTEM.PA_DATE_TBL_TYPE,
1668         p_org_id                   IN         pa_projects_all.org_id%TYPE,
1669         x_budget_lines             OUT        NOCOPY PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE, --File.Sql.39 bug 4440895
1670         x_etc_quantity_tbl         OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1671         x_etc_raw_cost_tbl         OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1672         x_etc_burdened_cost_tbl    OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1673         x_etc_revenue_tbl          OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1674         x_raw_cost_rate_tbl        OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1675         x_burd_cost_rate_tbl       OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1676         x_bill_rate_tbl            OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1677         x_planning_start_date_tbl  OUT        NOCOPY SYSTEM.PA_DATE_TBL_TYPE, --File.Sql.39 bug 4440895
1678         x_planning_end_date_tbl    OUT        NOCOPY SYSTEM.PA_DATE_TBL_TYPE, --File.Sql.39 bug 4440895
1679         x_uom_tbl                  OUT        NOCOPY SYSTEM.PA_VARCHAR2_80_TBL_TYPE, --File.Sql.39 bug 4440895
1680         x_mfc_cost_type_tbl        OUT        NOCOPY SYSTEM.PA_VARCHAR2_15_TBL_TYPE, --File.Sql.39 bug 4440895
1681         x_spread_curve_name_tbl    OUT        NOCOPY SYSTEM.PA_VARCHAR2_240_TBL_TYPE, --File.Sql.39 bug 4440895
1682         x_sp_fixed_date_tbl        OUT        NOCOPY SYSTEM.PA_DATE_TBL_TYPE, --File.Sql.39 bug 4440895
1683         x_etc_method_name_tbl      OUT        NOCOPY SYSTEM.PA_VARCHAR2_80_TBL_TYPE, --File.Sql.39 bug 4440895
1684         x_spread_curve_id_tbl      OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1685         x_delete_flag_tbl          OUT        NOCOPY SYSTEM.PA_VARCHAR2_1_TBL_TYPE, --File.Sql.39 bug 4440895
1686         x_ra_id_tbl                OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1687         x_res_class_code_tbl       OUT        NOCOPY SYSTEM.PA_VARCHAR2_30_TBL_TYPE, --File.Sql.39 bug 4440895
1688         x_rate_based_flag_tbl      OUT        NOCOPY SYSTEM.PA_VARCHAR2_1_TBL_TYPE, --File.Sql.39 bug 4440895
1689         x_rbs_elem_id_tbl          OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1690 		x_cbs_elem_id_tbl          OUT        NOCOPY SYSTEM.PA_NUM_TBL_TYPE, -- cbs enhancement changes bug#16445106
1691         x_amt_type_tbl             OUT        NOCOPY SYSTEM.PA_VARCHAR2_30_TBL_TYPE, --File.Sql.39 bug 4440895
1692         x_first_pd_bf_pm_en_dt     OUT        NOCOPY DATE, --File.Sql.39 bug 4440895
1693         x_last_pd_af_pm_st_dt      OUT        NOCOPY DATE, --File.Sql.39 bug 4440895
1694         x_inf_tbl_rec_tbl          OUT        NOCOPY inf_cur_tbl_typ, --File.Sql.39 bug 4440895
1695         x_num_of_rec_processed     OUT        NOCOPY NUMBER, --File.Sql.39 bug 4440895
1696         x_return_status            OUT        NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1697         x_msg_count                OUT        NOCOPY NUMBER, --File.Sql.39 bug 4440895
1698         x_msg_data                 OUT        NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
1699   IS
1700 
1701       l_return_status                     VARCHAR2(30);
1702       l_msg_data                          VARCHAR2(2000);
1703       l_msg_count                         NUMBER;
1704 
1705       l_debug_mode                        VARCHAR2(1);
1706       l_module_name                       VARCHAR2(100) := 'pa_fp_webadi_pkg.prepare_val_input';
1707       l_debug_level3                      CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1708       l_debug_level5                      CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1709       l_msg_index_out                     NUMBER;
1710       l_data                              VARCHAR2(2000);
1711 
1712       -- variable to held the start_date and end_date of individual periods
1713       l_prd_start_date_tbl                SYSTEM.pa_date_tbl_type  := SYSTEM.pa_date_tbl_type();
1714       l_prd_end_date_tbl                  SYSTEM.pa_date_tbl_type  := SYSTEM.pa_date_tbl_type();
1715 
1716       l_inf_tbl_data_prev_rec             inf_tbl_data_csr%ROWTYPE;
1717       l_inf_tbl_data_curr_rec             inf_tbl_data_csr%ROWTYPE;
1718       l_inf_tbl_data_next_rec             inf_tbl_data_csr%ROWTYPE;
1719       -- record type used to skip the duplicate records
1720       l_inf_tbl_data_skip_rec             inf_tbl_data_csr%ROWTYPE;
1721       l_loop_exit_flag                    VARCHAR2(1) := 'N';
1722 
1723       i                                   INTEGER := 0;
1724       l_uncategorized_flag                pa_resource_lists_all_bg.uncategorized_flag%TYPE;
1725       l_prc_error_code                    VARCHAR2(30);
1726 
1727       l_unct_rlm_id                      pa_resource_list_members.resource_list_member_id%TYPE;
1728       l_etc_start_date                   pa_budget_versions.etc_start_date%TYPE;
1729 
1730       l_plan_trans_attr_copied_flag      VARCHAR2(1);
1731       l_cost_conv_attr_copied_flag       VARCHAR2(1);
1732       l_rev_conv_attr_copied_flag        VARCHAR2(1);
1733       l_plan_start_date                  DATE;
1734       l_plan_end_date                    DATE;
1735       l_prcd_pd_start_date               DATE;
1736       l_prcd_pd_end_date                 DATE;
1737       l_original_prd_count               INTEGER;
1738       l_int_new_prd_count                INTEGER;
1739       l_scd_pd_start_date                DATE;
1740       l_scd_pd_end_date                  DATE;
1741       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 */
1742       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 */
1743       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 */
1744       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 */
1745       is_forecast_version                VARCHAR2(1) := 'N';
1746       is_periodic_setup                  VARCHAR2(1) := 'N';
1747       l_bdgt_line_start_date             DATE;
1748       l_bdgt_line_end_date               DATE;
1749       l_min_bdgt_line_start_date         DATE;
1750       l_max_bdgt_line_end_date           DATE;
1751       l_sysdate                          CONSTANT DATE:= SYSDATE;
1752 
1753       l_tmp_sum_amt                      NUMBER;
1754       l_raw_cost                         NUMBER;
1755       l_etc_raw_cost                     NUMBER;
1756       l_burdened_cost                    NUMBER;
1757       l_etc_burdened_cost                NUMBER;
1758       l_revenue                          NUMBER;
1759       l_etc_revenue                      NUMBER;
1760       l_quantity                         NUMBER;
1761       l_etc_quantity                     NUMBER;
1762 
1763       l_projfunc_cost_rate               pa_budget_lines.projfunc_cost_exchange_rate%TYPE;
1764       l_projfunc_rev_rate                pa_budget_lines.projfunc_rev_exchange_rate%TYPE;
1765       l_project_cost_rate                pa_budget_lines.project_cost_exchange_rate%TYPE;
1766       l_project_rev_rate                 pa_budget_lines.project_rev_exchange_rate%TYPE;
1767 
1768 
1769       -- variable to keep track of number of records inserted to the budget line record type
1770       bl_count                           INTEGER := 1;
1771 
1772       -- variables to be used to pass data to validate_budget_line
1773       l_budget_line_in_out_tbl           PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE;
1774       l_budget_line_out_tbl              PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE;
1775 
1776       l_amount_set_id                    pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
1777       l_allow_qty_flag                   VARCHAR2(1);
1778 
1779       l_bdgt_ln_tbl_description          VARCHAR2(255);
1780       l_pfunc_cost_rate_type_mning          pa_conversion_types_v.user_conversion_type%TYPE;
1781       l_pfunc_cost_rate_dt_typ_mning        pa_lookups.meaning%TYPE;
1782       l_pfunc_rev_rate_type_mning           pa_conversion_types_v.user_conversion_type%TYPE;
1783       l_pfunc_rev_rate_dt_typ_mning         pa_lookups.meaning%TYPE;
1784       l_prj_cost_rate_type_mning            pa_conversion_types_v.user_conversion_type%TYPE;
1785       l_prj_cost_rate_dt_typ_mning          pa_lookups.meaning%TYPE;
1786       l_prj_rev_rate_type_mning             pa_conversion_types_v.user_conversion_type%TYPE;
1787       l_prj_rev_rate_date_type_mning        pa_lookups.meaning%TYPE;
1788 
1789       d_projfunc_cost_rate_type          pa_proj_fp_options.projfunc_cost_rate_type%TYPE     ;
1790       d_projfunc_cost_rate_date_type     pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE;
1791       d_projfunc_cost_rate_date          pa_proj_fp_options.projfunc_cost_rate_date%TYPE     ;
1792       d_projfunc_rev_rate_type           pa_proj_fp_options.projfunc_rev_rate_type%TYPE      ;
1793       d_projfunc_rev_rate_date_type      pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE ;
1794       d_projfunc_rev_rate_date           pa_proj_fp_options.projfunc_rev_rate_date%TYPE      ;
1795       d_project_cost_rate_type           pa_proj_fp_options.project_cost_rate_type%TYPE      ;
1796       d_project_cost_rate_date_type      pa_proj_fp_options.project_cost_rate_date_type%TYPE ;
1797       d_project_cost_rate_date           pa_proj_fp_options.project_cost_rate_date%TYPE      ;
1798       d_project_rev_rate_type            pa_proj_fp_options.project_rev_rate_type%TYPE       ;
1799       d_project_rev_rate_date_type       pa_proj_fp_options.project_rev_rate_date_type%TYPE  ;
1800       d_project_rev_rate_date            pa_proj_fp_options.project_rev_rate_date%TYPE       ;
1801       d_projfunc_cost_exc_rate_tab       SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1802       d_projfunc_rev_exc_rate_tab        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1803       d_project_cost_exc_rate_tab        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1804       d_project_rev_exc_rate_tab         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1805       d_txn_curr_tab                     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1806 
1807       l_projfunc_cost_rate_type          pa_proj_fp_options.projfunc_cost_rate_type%TYPE     ;
1808       l_projfunc_cost_rate_date_type     pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE;
1809       l_projfunc_cost_rate_date          pa_proj_fp_options.projfunc_cost_rate_date%TYPE     ;
1810       l_projfunc_cost_exchange_rate      pa_budget_lines.projfunc_cost_exchange_rate%TYPE    ;
1811       l_projfunc_rev_rate_type           pa_proj_fp_options.projfunc_rev_rate_type%TYPE      ;
1812       l_projfunc_rev_rate_date_type      pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE ;
1813       l_projfunc_rev_rate_date           pa_proj_fp_options.projfunc_rev_rate_date%TYPE      ;
1814       l_projfunc_rev_exchange_rate       pa_budget_lines.projfunc_rev_exchange_rate%TYPE     ;
1815       l_project_cost_rate_type           pa_proj_fp_options.project_cost_rate_type%TYPE      ;
1816       l_project_cost_rate_date_type      pa_proj_fp_options.project_cost_rate_date_type%TYPE ;
1817       l_project_cost_rate_date           pa_proj_fp_options.project_cost_rate_date%TYPE      ;
1818       l_project_cost_exchange_rate       pa_budget_lines.project_cost_exchange_rate%TYPE     ;
1819       l_project_rev_rate_type            pa_proj_fp_options.project_rev_rate_type%TYPE       ;
1820       l_project_rev_rate_date_type       pa_proj_fp_options.project_rev_rate_date_type%TYPE  ;
1821       l_project_rev_rate_date            pa_proj_fp_options.project_rev_rate_date%TYPE       ;
1822       l_project_rev_exchange_rate        pa_budget_lines.project_rev_exchange_rate%TYPE      ;
1823       l_change_reason_code               pa_budget_lines.change_reason_code%TYPE             ;
1824 
1825       l_rc_rate                          NUMBER;
1826       l_bc_rate                          NUMBER;
1827       l_bill_rate                        NUMBER;
1828 
1829       l_etc_quantity_tbl                 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1830       l_etc_raw_cost_tbl                 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1831       l_etc_burdened_cost_tbl            SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1832       l_etc_revenue_tbl                  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1833       l_rc_rate_tbl                      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1834       l_bc_rate_tbl                      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1835       l_bill_rate_tbl                    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1836       l_uom_tbl                          SYSTEM.pa_varchar2_80_tbl_type := SYSTEM.pa_varchar2_80_tbl_type();
1837       l_plan_start_date_tbl              SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1838       l_delete_flag                      VARCHAR2(1);
1839       l_plan_end_date_tbl                SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1840       l_delete_flag_tbl                  SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
1841       l_spread_curve_name_tbl            SYSTEM.pa_varchar2_240_tbl_type := SYSTEM.pa_varchar2_240_tbl_type();
1842       l_etc_method_code_tbl              SYSTEM.pa_varchar2_80_tbl_type := SYSTEM.pa_varchar2_80_tbl_type();
1843       l_mfc_cost_type_name_tbl           SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
1844       l_sp_fixed_date_tbl                SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1845       l_spread_curve_id_tbl              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1846 
1847       -- variables to be used to call process_errors
1848       l_err_val_code_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1849       l_err_task_id_tbl                  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1850       l_err_rlm_id_tbl                   SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1851       l_err_txn_curr_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1852       l_err_amt_type_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1853 
1854       l_fixed_spread_curve_id            pa_spread_curves_b.spread_curve_id%TYPE;
1855       l_fixed_spread_curve_name          pa_spread_curves_tl.name%TYPE;
1856       l_spread_curve_id                  pa_spread_curves_b.spread_curve_id%TYPE;
1857       l_sp_fixed_date                    pa_resource_assignments.sp_fixed_date%TYPE;
1858       l_not_null_period_cnt              NUMBER;
1859       l_fix_sc_amt_pd_curr_index         NUMBER; /* to get the period index for which amount is present if the spread curve */
1860       l_fix_sc_amt_pd_next_index         NUMBER; /* associated with the resource is fixed date type */
1861 
1862       /* Bug 5144013: The following variable declarations are made to refer the new entity
1863          pa_resource_asgn_curr columns. This is done as part of merging MRUP3 changes done
1864          in 11i into R12.
1865       */
1866       l_ratxn_total_quantity             pa_resource_asgn_curr.total_quantity%TYPE;
1867       l_ratxn_total_raw_cost             pa_resource_asgn_curr.total_txn_raw_cost%TYPE;
1868       l_ratxn_total_burdened_cost        pa_resource_asgn_curr.total_txn_burdened_cost%TYPE;
1869       l_ratxn_total_revenue              pa_resource_asgn_curr.total_txn_revenue%TYPE;
1870       l_ratxn_raw_cost_over_rate         pa_resource_asgn_curr.txn_raw_cost_rate_override%TYPE;
1871       l_ratxn_burden_cost_over_rate      pa_resource_asgn_curr.txn_burden_cost_rate_override%TYPE;
1872       l_ratxn_bill_over_rate             pa_resource_asgn_curr.txn_bill_rate_override%TYPE;
1873       l_ratxn_etc_quantity               pa_resource_asgn_curr.total_quantity%TYPE;
1874       l_ratxn_etc_raw_cost               pa_resource_asgn_curr.total_txn_raw_cost%TYPE;
1875       l_ratxn_etc_burdened_cost          pa_resource_asgn_curr.total_txn_burdened_cost%TYPE;
1876       l_ratxn_etc_revenue                pa_resource_asgn_curr.total_txn_revenue%TYPE;
1877       l_ra_rate_based_flag               pa_resource_assignments.rate_based_flag%TYPE; -- Bug 5068203.
1878 
1879 	  l_Cbs_Enabled	  VARCHAR2(1) := 'N'; -- cbs enhancement changes bug#16445106
1880 
1881 
1882       -- cursor to get the start/end date of the first period before the first period displayed in the period mask
1883       CURSOR l_first_pd_st_en_dt_csr (c_org_id   pa_projects_all.org_id%TYPE,
1884                                       c_first_prd_st_dt   DATE,
1885                                       c_time_phased_code  pa_proj_fp_options.cost_time_phased_code%TYPE)
1886       IS
1887       SELECT gl.start_date start_date,
1888              gl.end_date end_date,
1889              gl.period_name period_name
1890       FROM   gl_periods gl,
1891              pa_implementations_all pim,
1892              gl_sets_of_books gsb
1893       WHERE  gl.end_date < c_first_prd_st_dt
1894       AND    gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
1895       AND    gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
1896       AND    gl.adjustment_period_flag='N'
1897       AND    pim.org_id = c_org_id
1898       AND    gsb.set_of_books_id = pim.set_of_books_id
1899       ORDER BY gl.start_date DESC;
1900 
1901       l_first_pd_st_en_dt_rec        l_first_pd_st_en_dt_csr%ROWTYPE;
1902 
1903       -- cursor to get the start/end date of the last period before the last period displayed in the period mask
1904       CURSOR l_last_pd_st_en_dt_csr (c_org_id   pa_projects_all.org_id%TYPE,
1905                                      c_last_prd_en_dt   DATE,
1906                                      c_time_phased_code  pa_proj_fp_options.cost_time_phased_code%TYPE)
1907       IS
1908       SELECT gl.start_date start_date,
1909              gl.end_date end_date,
1910              gl.period_name period_name
1911       FROM   gl_periods gl,
1912              pa_implementations_all pim,
1913              gl_sets_of_books gsb
1914       WHERE  gl.end_date > c_last_prd_en_dt
1915       AND    gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
1916       AND    gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
1917       AND    gl.adjustment_period_flag='N'
1918       AND    pim.org_id = c_org_id
1919       AND    gsb.set_of_books_id = pim.set_of_books_id
1920       ORDER BY gl.start_date ;
1921 
1922       l_last_pd_st_en_dt_rec         l_last_pd_st_en_dt_csr%ROWTYPE;
1923 
1924       /* Bug 5144013: Made changes in the query of the cursor non_prd_lyt_null_val_cur to refer to the
1925          new entity pa_resource_asgn_curr. This is done as part of merging MRUP3 changes done in 11i
1926          into R12.
1927       */
1928       CURSOR non_prd_lyt_null_val_cur(c_budget_version_id IN pa_budget_versions.budget_version_id%TYPE,
1929                                       c_task_id IN pa_resource_assignments.task_id%TYPE,
1930                                       c_resource_list_member_id IN pa_resource_assignments.resource_list_member_id%TYPE,
1931 									  c_cbs_element_id IN pa_resource_assignments.cbs_element_id%TYPE,
1932                                       c_txn_currency_code IN pa_resource_asgn_curr.txn_currency_code%TYPE)
1933       IS
1934       SELECT rac.total_display_quantity,
1935              rac.total_txn_raw_cost,
1936              rac.total_txn_burdened_cost,
1937              rac.total_txn_revenue,
1938              rac.total_display_quantity-NVL(rac.total_init_quantity,0),
1939              rac.total_txn_raw_cost-NVL(rac.total_txn_init_raw_cost,0),
1940              rac.total_txn_burdened_cost-NVL(rac.total_txn_init_burdened_cost,0),
1941              rac.total_txn_revenue-NVL(rac.total_txn_init_revenue,0),
1942              rac.txn_raw_cost_rate_override,
1943              rac.txn_burden_cost_rate_override,
1944              rac.txn_bill_rate_override,
1945              pra.rate_based_flag
1946       FROM   pa_resource_asgn_curr rac,
1947              pa_resource_assignments pra
1948       WHERE rac.budget_version_id = c_budget_version_id
1949       AND   rac.budget_version_id = pra.budget_version_id
1950       AND   rac.resource_assignment_id = pra.resource_assignment_id
1951       AND   pra.task_id = c_task_id
1952       AND   pra.resource_list_member_id = c_resource_list_member_id
1953 	  AND   nvl(pra.cbs_element_id,-1) = nvl(c_cbs_element_id,-1)  -- cbs enhancement changes bug#16445106
1954       AND   rac.txn_currency_code = c_txn_currency_code;
1955 
1956       TYPE l_cached_ra_id_info IS TABLE OF NUMBER INDEX BY VARCHAR2(32);
1957 
1958       l_cached_ra_id_tbl       l_cached_ra_id_info;
1959       l_cached_ra_index        VARCHAR2(32);
1960       l_ra_id                  pa_resource_assignments.resource_assignment_id%TYPE;
1961       l_start_ra_index         NUMBER :=1;
1962       l_end_ra_index           NUMBER :=1;
1963       l_sp_fix_prd_st_dt       DATE;
1964       l_sp_fix_prd_en_dt       DATE;
1965 
1966       l_res_class_code         pa_resource_assignments.resource_class_code%TYPE;
1967       l_rate_based_flag        pa_resource_assignments.rate_based_flag%TYPE;
1968       l_rbs_elem_id            pa_resource_assignments.rbs_element_id%TYPE;
1969 
1970       l_ra_id_tbl              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1971       l_res_class_code_tbl     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1972       l_rate_based_flag_tbl    SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
1973       l_rbs_elem_id_tbl        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1974 
1975 	  l_cbs_elem_id_tbl        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();-- cbs enhancement changes bug#16445106
1976 	  l_cbs_elem_id            pa_resource_assignments.cbs_element_id%TYPE;-- cbs enhancement changes bug#16445106
1977 
1978       l_min_ra_plan_start_date DATE;
1979       l_max_ra_plan_end_date   DATE;
1980 
1981       l_amount_type_tbl        SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1982       l_lookup_type            pa_lookups.lookup_type%TYPE;
1983       l_amount                 NUMBER;
1984       --l_temp                   DATE;
1985 
1986      -- Added for the bug 4414062
1987       l_period_time_phased_code  VARCHAR(1);
1988       l_period_plan_start_date   DATE;
1989       l_period_plan_end_date     DATE;
1990       l_rl_control_flag          pa_resource_lists_all_bg.control_flag%TYPE;
1991       l_fin_struct_id            NUMBER; -- Bug 4929163.
1992 
1993       -- bug 4479036
1994       l_conv_attrb_displayed     VARCHAR(1);
1995 
1996       --Added thses date tables for bug#4488926.
1997       TYPE date_tbl_type IS TABLE OF DATE INDEX BY VARCHAR2(20);
1998       l_period_plan_start_date_tbl    date_tbl_type;
1999       l_period_plan_end_date_tbl      date_tbl_type;
2000 BEGIN
2001 
2002       fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
2003       x_msg_count := 0;
2004       x_return_status := FND_API.G_RET_STS_SUCCESS;
2005 
2006       PA_DEBUG.Set_Curr_Function( p_function   => l_module_name,
2007                                   p_debug_mode => l_debug_mode );
2008 
2009       IF l_debug_mode = 'Y' THEN
2010           pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.prepare_val_input';
2011           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2012       END IF;
2013 
2014       --log1('----- Entering into prepare_val_input-------');
2015       -- deriving all the required version level info
2016       IF l_debug_mode = 'Y' THEN
2017           pa_debug.g_err_stage := 'validating input';
2018           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2019       END IF;
2020       l_fin_struct_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUCTURE_ID(p_version_info_rec.x_project_id);    /* Bug 4929163 */
2021       IF p_version_info_rec.x_project_id IS NULL THEN
2022            IF l_debug_mode = 'Y' THEN
2023                pa_debug.g_err_stage := 'project_id not passed';
2024                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2025            END IF;
2026            pa_utils.add_message
2027                 (p_app_short_name  => 'PA',
2028                  p_msg_name        => 'PA_FP_INV_PARAM_PASSED',
2029                  p_token1          => 'PROCEDURENAME',
2030                  p_value1          => l_module_name);
2031            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2032       END IF;
2033 
2034       -- checking is org_id is passed as null for periodic layouts
2035       IF (p_prd_start_date_tbl.COUNT > 0 OR
2036           p_prd_end_date_tbl.COUNT > 0 ) AND
2037          p_org_id IS NULL THEN
2038             IF l_debug_mode = 'Y' THEN
2039                pa_debug.g_err_stage := 'org_id not passed for periodic layouts';
2040                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2041            END IF;
2042            pa_utils.add_message
2043                 (p_app_short_name  => 'PA',
2044                  p_msg_name        => 'PA_FP_INV_PARAM_PASSED',
2045                  p_token1          => 'PROCEDURENAME',
2046                  p_value1          => l_module_name);
2047            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2048       END IF;
2049 
2050 	  l_Cbs_Enabled := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => p_version_info_rec.x_project_id);-- cbs enhancement changes bug#16445106
2051 
2052 	  --DEBUG_NS('l_Cbs_Enabled :: ' ||l_Cbs_Enabled);
2053 
2054       -- initializing the out parameter for number of records processed
2055       x_num_of_rec_processed := 0;
2056 
2057       l_conv_attrb_displayed := 'N';
2058 
2059       -- updating the temp table with the task_id for the task name/ task number
2060       -- given in the excel after deriving the same. if not a valid task, leaving
2061       -- task_id column null
2062       IF l_debug_mode = 'Y' THEN
2063           pa_debug.g_err_stage := 'Updating task_id for the task name/number given';
2064           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2065       END IF;
2066 
2067       --log1('----- STAGE 1-------');
2068       BEGIN
2069             -- Bug 4464838: Perf Fix: Selecting the control_flag for the
2070             -- resource list and depending upon the value returned, executing
2071             -- one of the update statments to improve the performance by avoiding
2072             -- the select for control flag for each record and as well, removing
2073             -- the OR cluase from the where clause.
2074             SELECT  control_flag,
2075                     uncategorized_flag
2076             INTO    l_rl_control_flag,
2077                     l_uncategorized_flag
2078             FROM    pa_resource_lists_all_bg
2079             WHERE   resource_list_id = p_version_info_rec.x_resource_list_id;
2080 
2081             --log1('----- STAGE 3.2------- '||l_uncategorized_flag);
2082 			--DEBUG_NS('l_uncategorized_flag :: ' ||l_uncategorized_flag);
2083 			--DEBUG_NS('l_rl_control_flag :: ' ||l_rl_control_flag);
2084 
2085             IF l_uncategorized_flag = 'N' THEN
2086                  IF l_rl_control_flag = 'N' THEN
2087                       -- updating the rlm ids for categorized resource lists with control_fl as N
2088                      UPDATE  pa_fp_webadi_upload_inf inf
2089                      SET     inf.task_id = (SELECT  pt.task_id
2090                                             FROM    (SELECT  pt.name task_name,   /* Bug 4929163. Modified the select statement to refer to pa_proj_elements instead of pa_tasks*/
2091                                                              pt.element_number task_number,
2092                                                              pt.proj_element_id task_id
2093                                                      FROM    pa_proj_elements pt
2094                                                      WHERE   pt.project_id = p_version_info_rec.x_project_id
2095                                                      AND     object_type = 'PA_TASKS'
2096                                                      AND     parent_structure_id = l_fin_struct_id
2097                                                      UNION ALL
2098                                                      SELECT  p.long_name task_name,  /* Bug 5345336 */
2099                                                              p.segment1 task_number,
2100                                                              0 task_id
2101                                                      FROM    pa_projects_all p
2102                                                      WHERE   p.project_id = p_version_info_rec.x_project_id) pt
2103                                             WHERE    (inf.task_name IS NOT NULL
2104                                                       AND inf.task_number IS NULL
2105                                                       AND inf.task_name = pt.task_name) OR
2106                                                      (inf.task_name IS NULL
2107                                                       AND inf.task_number IS NOT NULL
2108                                                       AND inf.task_number = pt.task_number) OR
2109                                                      (inf.task_name IS NOT NULL
2110                                                       AND inf.task_number IS NOT NULL
2111                                                       AND inf.task_name = pt.task_name
2112                                                       AND inf.task_number = pt.task_number)),
2113 
2114                               inf.change_reason_code           = DECODE(inf.delete_flag,'Y',NULL,inf.change_reason_code),
2115                               inf.quantity                     = DECODE(inf.delete_flag,'Y',NULL,inf.quantity),
2116                               inf.raw_cost                     = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost),
2117                               inf.raw_cost_over_rate           = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost_over_rate),
2118                               inf.burdened_cost                = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost),
2119                               inf.burdened_cost_over_rate      = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost_over_rate),
2120                               inf.revenue                      = DECODE(inf.delete_flag,'Y',NULL,inf.revenue),
2121                               inf.bill_over_rate               = DECODE(inf.delete_flag,'Y',NULL,inf.bill_over_rate ),
2122                               inf.projfunc_cost_rate_type      = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_type),
2123                               inf.projfunc_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_date_type),
2124                               inf.projfunc_cost_exchange_rate  = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_exchange_rate ),
2125                               inf.projfunc_cost_rate_date      = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_cost_rate_date),
2126                               inf.project_cost_rate_type       = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_type),
2127                               inf.project_cost_rate_date_type  = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_date_type),
2128                               inf.project_cost_exchange_rate   = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_exchange_rate),
2129                               inf.project_cost_rate_date       = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_cost_rate_date),
2130                               inf.projfunc_rev_rate_type       = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_type      ),
2131                               inf.projfunc_rev_rate_date_type  = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_date_type ),
2132                               inf.projfunc_rev_exchange_rate   = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_exchange_rate  ),
2133                               inf.projfunc_rev_rate_date       = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rev_rate_date),
2134                               inf.project_rev_rate_type        = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_type       ),
2135                               inf.project_rev_rate_date_type   = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_date_type  ),
2136                               inf.project_rev_exchange_rate    = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_exchange_rate   ),
2137                               inf.project_rev_rate_date        = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rev_rate_date),
2138                               inf.projfunc_rate_type           = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_type          ),
2139                               inf.projfunc_rate_date_type      = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_date_type     ),
2140                               inf.projfunc_exchange_rate       = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_exchange_rate      ),
2141                               inf.projfunc_rate_date           = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rate_date),
2142                               inf.project_rate_type            = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_type           ),
2143                               inf.project_rate_date_type       = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_date_type      ),
2144                               inf.project_exchange_rate        = DECODE(inf.delete_flag,'Y',NULL,inf.project_exchange_rate       ),
2145                               inf.project_rate_date            = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rate_date),
2146                               inf.pd_prd                       = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.pd_prd),
2147                               inf.prd1                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd1  ),
2148                               inf.prd2                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd2  ),
2149                               inf.prd3                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd3  ),
2150                               inf.prd4                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd4  ),
2151                               inf.prd5                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd5  ),
2152                               inf.prd6                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd6  ),
2153                               inf.prd7                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd7  ),
2154                               inf.prd8                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd8  ),
2155                               inf.prd9                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd9  ),
2156                               inf.prd10                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd10 ),
2157                               inf.prd11                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd11 ),
2158                               inf.prd12                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd12 ),
2159                               inf.prd13                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd13 ),
2160                               inf.prd14                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd14 ),
2161                               inf.prd15                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd15 ),
2162                               inf.prd16                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd16 ),
2163                               inf.prd17                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd17 ),
2164                               inf.prd18                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd18 ),
2165                               inf.prd19                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd19 ),
2166                               inf.prd20                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd20 ),
2167                               inf.prd21                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd21 ),
2168                               inf.prd22                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd22 ),
2169                               inf.prd23                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd23 ),
2170                               inf.prd24                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd24 ),
2171                               inf.prd25                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd25 ),
2172                               inf.prd26                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd26 ),
2173                               inf.prd27                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd27 ),
2174                               inf.prd28                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd28 ),
2175                               inf.prd29                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd29 ),
2176                               inf.prd30                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd30 ),
2177                               inf.prd31                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd31 ),
2178                               inf.prd32                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd32 ),
2179                               inf.prd33                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd33 ),
2180                               inf.prd34                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd34 ),
2181                               inf.prd35                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd35 ),
2182                               inf.prd36                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd36 ),
2183                               inf.prd37                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd37 ),
2184                               inf.prd38                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd38 ),
2185                               inf.prd39                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd39 ),
2186                               inf.prd40                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd40 ),
2187                               inf.prd41                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd41 ),
2188                               inf.prd42                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd42 ),
2189                               inf.prd43                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd43 ),
2190                               inf.prd44                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd44 ),
2191                               inf.prd45                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd45 ),
2192                               inf.prd46                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd46 ),
2193                               inf.prd47                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd47 ),
2194                               inf.prd48                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd48 ),
2195                               inf.prd49                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd49 ),
2196                               inf.prd50                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd50 ),
2197                               inf.prd51                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd51 ),
2198                               inf.prd52                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd52 ),
2199                               inf.sd_prd                       = DECODE(inf.delete_flag,'Y',l_fnd_miss_num , inf.sd_prd),
2200                               inf.resource_list_member_id      = (SELECT rlm.resource_list_member_id
2201                                                                   FROM   pa_resource_list_members rlm
2202                                                                   WHERE  inf.resource_alias = rlm.alias
2203                                                                   AND    rlm.resource_list_id = p_version_info_rec.x_resource_list_id
2204                                                                   AND    rlm.object_type = 'PROJECT'
2205                                                                   AND    rlm.object_id = p_version_info_rec.x_project_id),
2206 							  inf.cbs_element_id			   =  DECODE(l_Cbs_Enabled,'N',NULL,
2207 																  (select pre.rbs_element_id from pa_rbs_elements pre where
2208 																  pre.rbs_version_id = (select cbs_version_id from pa_projects_all where project_id = p_version_info_rec.x_project_id) and
2209 																  inf.cost_code = pre.cost_code))-- cbs enhancement changes bug#16445106
2210 
2211                      WHERE    inf.run_id= p_run_id
2212                      AND      Nvl(p_request_id, -99) = Nvl(inf.request_id, -99);
2213 
2214 					 --DEBUG_NS('updated pa_fp_webadi_upload_inf :: ');
2215 
2216                  ELSE -- control_flag = Y
2217                       -- updating the rlm ids for categorized resource lists with control_fl as Y
2218                      UPDATE  pa_fp_webadi_upload_inf inf
2219                      SET     inf.task_id = (SELECT  pt.task_id
2220                                             FROM    (SELECT  pt.name task_name, /* Bug 4929163. Modified the select statement to refer to pa_proj_elements instead of pa_tasks*/
2221                                                              pt.element_number task_number,
2222                                                              pt.proj_element_id task_id
2223                                                      FROM    pa_proj_elements pt
2224                                                      WHERE   pt.project_id = p_version_info_rec.x_project_id
2225                                                      AND     object_type = 'PA_TASKS'
2226                                                      AND     parent_structure_id = l_fin_struct_id
2227                                                      UNION ALL
2228                                                      SELECT  p.long_name task_name,  /* Bug 5345336 */
2229                                                              p.segment1 task_number,
2230                                                              0 task_id
2231                                                      FROM    pa_projects_all p
2232                                                      WHERE   p.project_id = p_version_info_rec.x_project_id) pt
2233                                             WHERE    (inf.task_name IS NOT NULL
2234                                                       AND inf.task_number IS NULL
2235                                                       AND inf.task_name = pt.task_name) OR
2236                                                      (inf.task_name IS NULL
2237                                                       AND inf.task_number IS NOT NULL
2238                                                       AND inf.task_number = pt.task_number) OR
2239                                                      (inf.task_name IS NOT NULL
2240                                                       AND inf.task_number IS NOT NULL
2241                                                       AND inf.task_name = pt.task_name
2242                                                       AND inf.task_number = pt.task_number)),
2243 
2244                               inf.change_reason_code           = DECODE(inf.delete_flag,'Y',NULL,inf.change_reason_code),
2245                               inf.quantity                     = DECODE(inf.delete_flag,'Y',NULL,inf.quantity),
2246                               inf.raw_cost                     = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost),
2247                               inf.raw_cost_over_rate           = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost_over_rate),
2248                               inf.burdened_cost                = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost),
2249                               inf.burdened_cost_over_rate      = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost_over_rate),
2250                               inf.revenue                      = DECODE(inf.delete_flag,'Y',NULL,inf.revenue),
2251                               inf.bill_over_rate               = DECODE(inf.delete_flag,'Y',NULL,inf.bill_over_rate ),
2252                               inf.projfunc_cost_rate_type      = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_type),
2253                               inf.projfunc_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_date_type),
2254                               inf.projfunc_cost_exchange_rate  = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_exchange_rate ),
2255                               inf.projfunc_cost_rate_date      = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_cost_rate_date),
2256                               inf.project_cost_rate_type       = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_type),
2257                               inf.project_cost_rate_date_type  = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_date_type),
2258                               inf.project_cost_exchange_rate   = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_exchange_rate),
2259                               inf.project_cost_rate_date       = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_cost_rate_date),
2260                               inf.projfunc_rev_rate_type       = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_type      ),
2261                               inf.projfunc_rev_rate_date_type  = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_date_type ),
2262                               inf.projfunc_rev_exchange_rate   = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_exchange_rate  ),
2263                               inf.projfunc_rev_rate_date       = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rev_rate_date),
2264                               inf.project_rev_rate_type        = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_type       ),
2265                               inf.project_rev_rate_date_type   = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_date_type  ),
2266                               inf.project_rev_exchange_rate    = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_exchange_rate   ),
2267                               inf.project_rev_rate_date        = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rev_rate_date),
2268                               inf.projfunc_rate_type           = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_type          ),
2269                               inf.projfunc_rate_date_type      = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_date_type     ),
2270                               inf.projfunc_exchange_rate       = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_exchange_rate      ),
2271                               inf.projfunc_rate_date           = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rate_date),
2272                               inf.project_rate_type            = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_type           ),
2273                               inf.project_rate_date_type       = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_date_type      ),
2274                               inf.project_exchange_rate        = DECODE(inf.delete_flag,'Y',NULL,inf.project_exchange_rate       ),
2275                               inf.project_rate_date            = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rate_date),
2276                               inf.pd_prd                       = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.pd_prd),
2277                               inf.prd1                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd1  ),
2278                               inf.prd2                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd2  ),
2279                               inf.prd3                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd3  ),
2280                               inf.prd4                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd4  ),
2281                               inf.prd5                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd5  ),
2282                               inf.prd6                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd6  ),
2283                               inf.prd7                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd7  ),
2284                               inf.prd8                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd8  ),
2285                               inf.prd9                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd9  ),
2286                               inf.prd10                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd10 ),
2287                               inf.prd11                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd11 ),
2288                               inf.prd12                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd12 ),
2289                               inf.prd13                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd13 ),
2290                               inf.prd14                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd14 ),
2291                               inf.prd15                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd15 ),
2292                               inf.prd16                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd16 ),
2293                               inf.prd17                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd17 ),
2294                               inf.prd18                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd18 ),
2295                               inf.prd19                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd19 ),
2296                               inf.prd20                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd20 ),
2297                               inf.prd21                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd21 ),
2298                               inf.prd22                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd22 ),
2299                               inf.prd23                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd23 ),
2300                               inf.prd24                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd24 ),
2301                               inf.prd25                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd25 ),
2302                               inf.prd26                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd26 ),
2303                               inf.prd27                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd27 ),
2304                               inf.prd28                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd28 ),
2305                               inf.prd29                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd29 ),
2306                               inf.prd30                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd30 ),
2307                               inf.prd31                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd31 ),
2308                               inf.prd32                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd32 ),
2309                               inf.prd33                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd33 ),
2310                               inf.prd34                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd34 ),
2311                               inf.prd35                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd35 ),
2312                               inf.prd36                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd36 ),
2313                               inf.prd37                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd37 ),
2314                               inf.prd38                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd38 ),
2315                               inf.prd39                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd39 ),
2316                               inf.prd40                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd40 ),
2317                               inf.prd41                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd41 ),
2318                               inf.prd42                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd42 ),
2319                               inf.prd43                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd43 ),
2320                               inf.prd44                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd44 ),
2321                               inf.prd45                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd45 ),
2322                               inf.prd46                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd46 ),
2323                               inf.prd47                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd47 ),
2324                               inf.prd48                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd48 ),
2325                               inf.prd49                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd49 ),
2326                               inf.prd50                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd50 ),
2327                               inf.prd51                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd51 ),
2328                               inf.prd52                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd52 ),
2329                               inf.sd_prd                       = DECODE(inf.delete_flag,'Y',l_fnd_miss_num , inf.sd_prd),
2330                               inf.resource_list_member_id      = (SELECT rlm.resource_list_member_id
2331                                                                   FROM   pa_resource_list_members rlm
2332                                                                   WHERE  inf.resource_alias = rlm.alias
2333                                                                   AND    rlm.resource_list_id = p_version_info_rec.x_resource_list_id
2334                                                                   AND    rlm.object_type = 'RESOURCE_LIST'
2335                                                                   AND    rlm.object_id = p_version_info_rec.x_resource_list_id),
2336 							  inf.cbs_element_id			   =  DECODE(l_Cbs_Enabled,'N',NULL,
2337 																  (select pre.rbs_element_id from pa_rbs_elements pre where
2338 																  pre.rbs_version_id = (select cbs_version_id from pa_projects_all where project_id = p_version_info_rec.x_project_id) and
2339 																  inf.cost_code = pre.cost_code))-- cbs enhancement changes bug#16445106
2340                      WHERE    inf.run_id= p_run_id
2341                      AND      Nvl(p_request_id, -99) = Nvl(inf.request_id, -99);
2342                  END IF; -- control_flag = N
2343 
2344             ELSE -- Resource list is not categorized
2345                   --log1('----- STAGE 3.3------- '||l_unct_rlm_id);
2346                   -- update the rlm id columns with rlm id of FINANCIAL_ELEMENTS, if the resource list
2347                   -- is uncategorized one
2348 
2349                   -- 4497319.Perf Fix:Added two AND conditions in the WHERE clause in order to improve the performance.
2350                   SELECT resource_list_member_id
2351                   INTO   l_unct_rlm_id
2352                   FROM   pa_resource_list_members
2353                   WHERE  resource_list_id = p_version_info_rec.x_resource_list_id
2354                   AND    resource_class_flag = 'Y'
2355                   AND    resource_class_code = 'FINANCIAL_ELEMENTS'
2356                   AND    object_type = 'RESOURCE_LIST'
2357                   AND    object_id = p_version_info_rec.x_resource_list_id;
2358 
2359                   --log1('----- STAGE 3.4------- '||l_unct_rlm_id);
2360 				  --DEBUG_NS('l_unct_rlm_id :: ' ||l_unct_rlm_id);
2361 
2362                  UPDATE  pa_fp_webadi_upload_inf inf
2363                  SET     inf.task_id = (SELECT  pt.task_id
2364                                         FROM    (SELECT  pt.name task_name, /* Bug 4929163. Modidfied the select statement to refer to pa_proj_elements instead of pa_tasks*/
2365                                                          pt.element_number task_number,
2366                                                          pt.proj_element_id task_id
2367                                                  FROM    pa_proj_elements pt
2368                                                  WHERE   pt.project_id = p_version_info_rec.x_project_id
2369                                                  AND     object_type = 'PA_TASKS'
2370                                                  AND     parent_structure_id = l_fin_struct_id
2371                                                  UNION ALL
2372                                                  SELECT  p.long_name task_name,  /* Bug 5345336 */
2373                                                          p.segment1 task_number,
2374                                                          0 task_id
2375                                                  FROM    pa_projects_all p
2376                                                  WHERE   p.project_id = p_version_info_rec.x_project_id) pt
2377                                         WHERE    (inf.task_name IS NOT NULL
2378                                                   AND inf.task_number IS NULL
2379                                                   AND inf.task_name = pt.task_name) OR
2380                                                  (inf.task_name IS NULL
2381                                                   AND inf.task_number IS NOT NULL
2382                                                   AND inf.task_number = pt.task_number) OR
2383                                                  (inf.task_name IS NOT NULL
2384                                                   AND inf.task_number IS NOT NULL
2385                                                   AND inf.task_name = pt.task_name
2386                                                   AND inf.task_number = pt.task_number)),
2387 
2388                           inf.change_reason_code           = DECODE(inf.delete_flag,'Y',NULL,inf.change_reason_code),
2389                           inf.quantity                     = DECODE(inf.delete_flag,'Y',NULL,inf.quantity),
2390                           inf.raw_cost                     = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost),
2391                           inf.raw_cost_over_rate           = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost_over_rate),
2392                           inf.burdened_cost                = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost),
2393                           inf.burdened_cost_over_rate      = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost_over_rate),
2394                           inf.revenue                      = DECODE(inf.delete_flag,'Y',NULL,inf.revenue),
2395                           inf.bill_over_rate               = DECODE(inf.delete_flag,'Y',NULL,inf.bill_over_rate ),
2396                           inf.projfunc_cost_rate_type      = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_type),
2397                           inf.projfunc_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_date_type),
2398                           inf.projfunc_cost_exchange_rate  = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_exchange_rate ),
2399                           inf.projfunc_cost_rate_date      = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_cost_rate_date),
2400                           inf.project_cost_rate_type       = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_type),
2401                           inf.project_cost_rate_date_type  = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_date_type),
2402                           inf.project_cost_exchange_rate   = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_exchange_rate),
2403                           inf.project_cost_rate_date       = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_cost_rate_date),
2404                           inf.projfunc_rev_rate_type       = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_type      ),
2405                           inf.projfunc_rev_rate_date_type  = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_date_type ),
2406                           inf.projfunc_rev_exchange_rate   = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_exchange_rate  ),
2407                           inf.projfunc_rev_rate_date       = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rev_rate_date),
2408                           inf.project_rev_rate_type        = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_type       ),
2409                           inf.project_rev_rate_date_type   = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_date_type  ),
2410                           inf.project_rev_exchange_rate    = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_exchange_rate   ),
2411                           inf.project_rev_rate_date        = DECODE(inf.delete_flag,'Y',TO_DATE(NULL), inf.project_rev_rate_date),
2412                           inf.projfunc_rate_type           = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_type          ),
2413                           inf.projfunc_rate_date_type      = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_date_type     ),
2414                           inf.projfunc_exchange_rate       = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_exchange_rate      ),
2415                           inf.projfunc_rate_date           = DECODE(inf.delete_flag,'Y',TO_DATE(NULL), inf.projfunc_rate_date),
2416                           inf.project_rate_type            = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_type           ),
2417                           inf.project_rate_date_type       = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_date_type      ),
2418                           inf.project_exchange_rate        = DECODE(inf.delete_flag,'Y',NULL,inf.project_exchange_rate       ),
2419                           inf.project_rate_date            = DECODE(inf.delete_flag,'Y',TO_DATE(NULL), inf.project_rate_date),
2420                           inf.pd_prd                       = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.pd_prd),
2421                           inf.prd1                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd1  ),
2422                           inf.prd2                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd2  ),
2423                           inf.prd3                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd3  ),
2424                           inf.prd4                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd4  ),
2425                           inf.prd5                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd5  ),
2426                           inf.prd6                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd6  ),
2427                           inf.prd7                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd7  ),
2428                           inf.prd8                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd8  ),
2429                           inf.prd9                         = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd9  ),
2430                           inf.prd10                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd10 ),
2431                           inf.prd11                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd11 ),
2432                           inf.prd12                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd12 ),
2433                           inf.prd13                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd13 ),
2434                           inf.prd14                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd14 ),
2435                           inf.prd15                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd15 ),
2436                           inf.prd16                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd16 ),
2437                           inf.prd17                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd17 ),
2438                           inf.prd18                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd18 ),
2439                           inf.prd19                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd19 ),
2440                           inf.prd20                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd20 ),
2441                           inf.prd21                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd21 ),
2442                           inf.prd22                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd22 ),
2443                           inf.prd23                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd23 ),
2444                           inf.prd24                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd24 ),
2445                           inf.prd25                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd25 ),
2446                           inf.prd26                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd26 ),
2447                           inf.prd27                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd27 ),
2448                           inf.prd28                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd28 ),
2449                           inf.prd29                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd29 ),
2450                           inf.prd30                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd30 ),
2451                           inf.prd31                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd31 ),
2452                           inf.prd32                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd32 ),
2453                           inf.prd33                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd33 ),
2454                           inf.prd34                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd34 ),
2455                           inf.prd35                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd35 ),
2456                           inf.prd36                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd36 ),
2457                           inf.prd37                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd37 ),
2458                           inf.prd38                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd38 ),
2459                           inf.prd39                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd39 ),
2460                           inf.prd40                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd40 ),
2461                           inf.prd41                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd41 ),
2462                           inf.prd42                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd42 ),
2463                           inf.prd43                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd43 ),
2464                           inf.prd44                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd44 ),
2465                           inf.prd45                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd45 ),
2466                           inf.prd46                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd46 ),
2467                           inf.prd47                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd47 ),
2468                           inf.prd48                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd48 ),
2469                           inf.prd49                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd49 ),
2470                           inf.prd50                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd50 ),
2471                           inf.prd51                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd51 ),
2472                           inf.prd52                        = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd52 ),
2473                           inf.sd_prd                       = DECODE(inf.delete_flag,'Y',l_fnd_miss_num , inf.sd_prd),
2474                           inf.resource_list_member_id      = l_unct_rlm_id,
2475 						  inf.cbs_element_id			   =  DECODE(l_Cbs_Enabled,'N',NULL,
2476 																  (select pre.rbs_element_id from pa_rbs_elements pre where
2477 																  pre.rbs_version_id = (select cbs_version_id from pa_projects_all where project_id = p_version_info_rec.x_project_id) and
2478 																  inf.cost_code = pre.cost_code))-- cbs enhancement changes bug#16445106
2479                  WHERE    inf.run_id= p_run_id
2480                  AND      Nvl(p_request_id, -99) = Nvl(inf.request_id, -99);
2481             END IF; -- uncategorized flag
2482       EXCEPTION
2483            WHEN OTHERS THEN
2484                  IF l_debug_mode = 'Y' THEN
2485                       pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2486                       pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2487 					  --DEBUG_NS('Exception :: ' || SQLERRM);
2488                  END IF;
2489 
2490                  RAISE;
2491       END;
2492       IF l_debug_mode = 'Y' THEN
2493           pa_debug.g_err_stage := 'Task ids updated';
2494           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2495       END IF;
2496 
2497       --log1('----- STAGE 2-------');
2498       -- checking, if the layout is periodic one
2499       IF l_debug_mode = 'Y' THEN
2500           pa_debug.g_err_stage := 'Checking for periodic setup';
2501           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2502       END IF;
2503 
2504       BEGIN
2505             SELECT  'Y'
2506             INTO    is_periodic_setup
2507             FROM    DUAL
2508             WHERE EXISTS(SELECT  'X'
2509                          FROM    pa_fp_webadi_upload_inf
2510                          WHERE   amount_type_name IS NOT NULL
2511                          AND     run_id = p_run_id
2512                          AND    Nvl(p_request_id, -99) = Nvl(request_id, -99));
2513       EXCEPTION
2514             WHEN NO_DATA_FOUND THEN
2515                  is_periodic_setup := 'N';
2516       END;
2517 
2518 	  --DEBUG_NS('is_periodic_setup :: ' || is_periodic_setup);
2519 
2520       IF l_debug_mode = 'Y' THEN
2521           pa_debug.g_err_stage := 'is_periodic_setup: =' || is_periodic_setup;
2522           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2523           pa_debug.g_err_stage := 'Getting the fixed date spread curve id/name';
2524           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2525       END IF;
2526       --The following update  on the interface will be used for
2527       ----Updating the error codes where task/resource info is missing
2528       ----Updating the amount type codes for the corresponding amount type names in case of periodic layout
2529 
2530       IF is_periodic_setup='Y' THEN
2531 
2532           IF p_version_info_rec.x_plan_class_code='BUDGET' THEN
2533 
2534               l_lookup_type := 'PA_FP_XL_ALL_BDGT_AMT_TYPES';
2535 
2536           ELSE
2537 
2538               l_lookup_type := 'PA_FP_XL_ALL_FCST_AMT_TYPES';
2539 
2540           END IF;
2541 
2542 
2543           UPDATE pa_fp_webadi_upload_inf inf
2544           SET    amount_type_code     = (SELECT pl.lookup_code
2545                                          FROM   pa_lookups pl,pa_fp_proj_xl_amt_types xlt
2546                                          WHERE  lookup_type=l_lookup_type
2547                                          AND    meaning=inf.amount_type_name
2548                                          AND    xlt.project_id=p_version_info_rec.x_project_id
2549                                          AND    xlt.fin_plan_type_id=p_version_info_rec.x_fin_plan_type_id
2550                                          AND    xlt.option_type=p_version_info_rec.x_version_type
2551                                          AND    xlt.amount_type_code=pl.lookup_code),
2552                  val_error_flag       = NVL(val_error_flag,
2553                                             DECODE(task_id,
2554                                                    NULL,'Y',
2555                                                    DECODE(resource_list_member_id,
2556                                                           NULL,'Y',
2557                                                           DECODE(l_Cbs_Enabled,'N',NULL,
2558 															DECODE(cbs_element_id,
2559 															NULL,'Y',NULL))))),-- cbs enhancement changes bug#16445106
2560                  val_error_code       = NVL(val_error_code,
2561                                             DECODE(task_id,
2562                                                    NULL,'INVALID_TASK_INFO',
2563                                                    DECODE(resource_list_member_id,
2564                                                           NULL,'INVALID_RESOURCE_INFO',
2565                                                           DECODE(l_Cbs_Enabled,'N',NULL,
2566 															DECODE(cbs_element_id,
2567 															NULL,'INVALID_CBS_INFO',NULL))))),-- cbs enhancement changes bug#16445106
2568                  err_task_name        = nvl(task_name,'-98'),
2569                  err_task_number      = nvl(task_number,'-98'),
2570                  err_alias            = nvl(resource_alias,'-98'),
2571                  err_amount_type_code = nvl(amount_type_code,'-98')
2572           WHERE  run_id=p_run_id
2573           AND    Nvl(p_request_id, -99) = Nvl(request_id, -99);
2574 
2575       ELSE --Non Periodic layout
2576 
2577           UPDATE pa_fp_webadi_upload_inf inf
2578           SET    val_error_flag       = NVL(val_error_flag,
2579                                             DECODE(task_id,
2580                                                    NULL,'Y',
2581                                                    DECODE(resource_list_member_id,
2582                                                           NULL,'Y',
2583                                                           DECODE(l_Cbs_Enabled,'N',NULL,
2584 															DECODE(cbs_element_id,
2585 															NULL,'Y',NULL))))),-- cbs enhancement changes bug#16445106
2586                 val_error_code       = NVL(val_error_code,
2587                                             DECODE(task_id,
2588                                                    NULL,'INVALID_TASK_INFO',
2589                                                    DECODE(resource_list_member_id,
2590                                                           NULL,'INVALID_RESOURCE_INFO',
2591                                                           DECODE(l_Cbs_Enabled,'N',NULL,
2592 															DECODE(cbs_element_id,
2593 															NULL,'INVALID_CBS_INFO', NULL))))),-- cbs enhancement changes bug#16445106
2594                  err_task_name        = nvl(task_name,'-98'),
2595                  err_task_number      = nvl(task_number,'-98'),
2596                  err_alias            = nvl(resource_alias,'-98'),
2597                  err_amount_type_code = nvl(amount_type_code,'-98')
2598           WHERE  run_id=p_run_id
2599           AND    Nvl(p_request_id, -99) = Nvl(request_id, -99);
2600 
2601       END IF;
2602 	  --DEBUG_NS('before  insert_test_dump1:: ' );
2603 	  --commit;
2604 	  --insert_test_dump1;
2605 
2606       --log1('----- STAGE 5-------');
2607       IF l_debug_mode = 'Y' THEN
2608           pa_debug.g_err_stage := 'plan class code of the version: ' || p_version_info_rec.x_plan_class_code;
2609           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2610       END IF;
2611 
2612 
2613       IF p_version_info_rec.x_plan_class_code = PA_FP_CONSTANTS_PKG.G_PLAN_CLASS_FORECAST THEN
2614            is_forecast_version := 'Y';
2615 
2616            -- calling an api to derive the etc_start_date
2617            IF l_debug_mode = 'Y' THEN
2618                pa_debug.g_err_stage := 'Calling pa_fp_gen_amount_utils.get_etc_start_date';
2619                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2620            END IF;
2621 
2622            l_etc_start_date := pa_fp_gen_amount_utils.get_etc_start_date(p_version_info_rec.x_budget_version_id);
2623       END IF;
2624 
2625       --log1('----- STAGE 6-------');
2626       BEGIN
2627             SELECT t.name,
2628                    a.spread_curve_id
2629             INTO   l_fixed_spread_curve_name,
2630                    l_fixed_spread_curve_id
2631             FROM   pa_spread_curves_b a,
2632                    pa_spread_curves_tl t
2633             WHERE  a.spread_curve_id = t.spread_curve_id
2634             AND    a.spread_curve_code = 'FIXED_DATE'
2635             AND    t.language = userenv('LANG');
2636       EXCEPTION
2637             WHEN OTHERS THEN
2638                  IF l_debug_mode = 'Y' THEN
2639                       pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2640                       pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2641                  END IF;
2642 
2643                  RAISE;
2644       END;
2645       --log1('----- STAGE 7-------');
2646       IF is_periodic_setup = 'Y' THEN
2647             /* The structure of the both tables for start date and end date table would be as follows:
2648              * - If the number of flexible periods shown on the layout is n, then the first n elements
2649              *   in each of the tables would contain corresponding start date/end date of a period whose
2650              *   number would be specified by the index.
2651              */
2652 
2653              l_prd_start_date_tbl := p_prd_start_date_tbl;
2654              l_prd_end_date_tbl   := p_prd_end_date_tbl;
2655 
2656              --log1('--p_prd_start_date_tbl.COUNT-- ' || p_prd_start_date_tbl.COUNT);
2657              l_original_prd_count := p_prd_start_date_tbl.COUNT;
2658              l_int_new_prd_count  := 52 - (l_original_prd_count);
2659              IF l_int_new_prd_count > 0 THEN
2660                    -- extending the period start/end date tables to have total 52 periods
2661                    l_prd_start_date_tbl.EXTEND(l_int_new_prd_count);
2662                    l_prd_end_date_tbl.EXTEND(l_int_new_prd_count);
2663              END IF;
2664        END IF;
2665 
2666       -- initializing the conversion attributes for ALL version
2667       -- and for periodic layouts
2668 
2669       IF is_periodic_setup = 'Y' THEN
2670           IF p_version_info_rec.x_version_type = 'ALL' AND
2671              p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
2672 
2673                 l_conv_attrb_displayed := conv_attributes_displayed(p_run_id => p_run_id);
2674 
2675                 BEGIN
2676                     SELECT project_cost_rate_type,
2677                            project_cost_rate_date_type,
2678                            project_cost_rate_date,
2679                            projfunc_cost_rate_type,
2680                            projfunc_cost_rate_date_type,
2681                            projfunc_cost_rate_date,
2682                            project_rev_rate_type,
2683                            project_rev_rate_date_type,
2684                            project_rev_rate_date,
2685                            projfunc_rev_rate_type,
2686                            projfunc_rev_rate_date_type,
2687                            projfunc_rev_rate_date
2688                     INTO   d_project_cost_rate_type,
2689                            d_project_cost_rate_date_type,
2690                            d_project_cost_rate_date,
2691                            d_projfunc_cost_rate_type,
2692                            d_projfunc_cost_rate_date_type,
2693                            d_projfunc_cost_rate_date,
2694                            d_project_rev_rate_type,
2695                            d_project_rev_rate_date_type,
2696                            d_project_rev_rate_date,
2697                            d_projfunc_rev_rate_type,
2698                            d_projfunc_rev_rate_date_type,
2699                            d_projfunc_rev_rate_date
2700                     FROM   pa_proj_fp_options
2701                     WHERE  fin_plan_version_id = p_version_info_rec.x_budget_version_id
2702                     AND    fin_plan_preference_code = 'COST_AND_REV_SAME';
2703                 EXCEPTION
2704                     WHEN OTHERS THEN
2705                          IF l_debug_mode = 'Y' THEN
2706                               pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2707                               pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2708                          END IF;
2709 
2710                          RAISE;
2711                 END;
2712 
2713                 -- selecting the exchange rates for all the transaction currencies available
2714                 -- for the version
2715                 BEGIN
2716                     SELECT txn_currency_code,
2717                            project_cost_exchange_rate,
2718                            project_rev_exchange_rate,
2719                            projfunc_cost_exchange_rate,
2720                            projfunc_rev_exchange_rate
2721                     BULK COLLECT INTO
2722                            d_txn_curr_tab,
2723                            d_project_cost_exc_rate_tab,
2724                            d_project_rev_exc_rate_tab,
2725                            d_projfunc_cost_exc_rate_tab,
2726                            d_projfunc_rev_exc_rate_tab
2727                     FROM   pa_fp_txn_currencies
2728                     WHERE  proj_fp_options_id = p_version_info_rec.x_proj_fp_options_id;
2729                 EXCEPTION
2730                     WHEN OTHERS THEN
2731                          IF l_debug_mode = 'Y' THEN
2732                               pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2733                               pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2734                          END IF;
2735 
2736                          RAISE;
2737                 END;
2738           END IF;
2739       END IF;
2740       -- initializing l_plan_trans_attr_copied_flag to N
2741       l_plan_trans_attr_copied_flag := 'N';
2742       l_cost_conv_attr_copied_flag := 'N';
2743       l_rev_conv_attr_copied_flag := 'N';
2744       IF l_debug_mode = 'Y' THEN
2745           pa_debug.g_err_stage := 'l_plan_trans_attr_copied_flag initialized to N';
2746           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2747           pa_debug.g_err_stage := 'Opening cursor inf_tbl_data_csr';
2748           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2749       END IF;
2750 
2751       --Initialize the OUT variables
2752       x_etc_quantity_tbl := SYSTEM.pa_num_tbl_type();
2753       x_etc_raw_cost_tbl := SYSTEM.pa_num_tbl_type();
2754       x_etc_burdened_cost_tbl := SYSTEM.pa_num_tbl_type();
2755       x_etc_revenue_tbl := SYSTEM.pa_num_tbl_type();
2756 
2757       --log1('----- STAGE 8-------');
2758       IF p_version_info_rec.x_version_type = 'COST' THEN
2759           l_allow_qty_flag := p_version_info_rec.x_cost_quantity_flag;
2760       ELSIF p_version_info_rec.x_version_type = 'REVENUE' THEN
2761           l_allow_qty_flag := p_version_info_rec.x_rev_quantity_flag;
2762       ELSIF p_version_info_rec.x_version_type = 'ALL' THEN
2763           l_allow_qty_flag := p_version_info_rec.x_all_quantity_flag;
2764       END IF;
2765 
2766       IF is_periodic_setup = 'Y' THEN
2767 
2768           -- deriving the start/end date of the first period that falls before the first period
2769           -- displayed in the period mask
2770           --log1('----- STAGE 8.0.1------- '||1);
2771           --log1('----- STAGE 8.0.2------- '||p_prd_start_date_tbl(1));
2772           OPEN l_first_pd_st_en_dt_csr(p_org_id,
2773                                        p_prd_start_date_tbl(1),
2774                                        p_version_info_rec.x_time_phased_code);
2775                 FETCH l_first_pd_st_en_dt_csr
2776                 INTO  l_first_pd_st_en_dt_rec;
2777                 l_first_pd_bf_pm_st_dt := l_first_pd_st_en_dt_rec.start_date;
2778                 l_first_pd_bf_pm_en_dt := l_first_pd_st_en_dt_rec.end_date;
2779           CLOSE l_first_pd_st_en_dt_csr;
2780 
2781           -- deriving the start/end date of the last period that falls after the last period
2782           -- displayed in the period mask
2783           --log1('----- STAGE 8.1.1------- '||l_original_prd_count);
2784           --log1('----- STAGE 8.1.2------- '||p_prd_end_date_tbl(l_original_prd_count));
2785           OPEN l_last_pd_st_en_dt_csr(p_org_id,
2786                                       p_prd_end_date_tbl(l_original_prd_count),
2787                                       p_version_info_rec.x_time_phased_code);
2788                 FETCH l_last_pd_st_en_dt_csr
2789                 INTO l_last_pd_st_en_dt_rec;
2790                 l_last_pd_af_pm_st_dt := l_last_pd_st_en_dt_rec.start_date;
2791                 l_last_pd_af_pm_en_dt := l_last_pd_st_en_dt_rec.end_date;
2792           CLOSE l_last_pd_st_en_dt_csr;
2793 
2794           x_first_pd_bf_pm_en_dt := l_first_pd_bf_pm_en_dt;
2795           x_last_pd_af_pm_st_dt := l_last_pd_af_pm_st_dt;
2796 
2797       END IF;
2798 
2799       -- initializing the conversion attributes for the firsr record for a periodic layout
2800       -- for a ALL version, these values would be overwritten
2801       IF is_periodic_setup = 'Y' THEN
2802           IF p_version_info_rec.x_version_type = 'ALL' AND
2803              p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
2804 
2805                   -- bug 4479036: need to assign these default values only if the
2806                   -- conversion attribute columns are selected in the layout.
2807                   -- otherwise keep them as null.
2808                   IF l_conv_attrb_displayed = 'Y' THEN
2809                       l_project_cost_rate_type      := d_project_cost_rate_type      ;
2810                       l_project_cost_rate_date_type := d_project_cost_rate_date_type ;
2811                       l_project_cost_rate_date      := d_project_cost_rate_date      ;
2812                       l_projfunc_cost_rate_type     := d_projfunc_cost_rate_type     ;
2813                       l_projfunc_cost_rate_date_type:= d_projfunc_cost_rate_date_type;
2814                       l_projfunc_cost_rate_date     := d_projfunc_cost_rate_date     ;
2815 
2816                       l_project_rev_rate_type       := d_project_rev_rate_type       ;
2817                       l_project_rev_rate_date_type  := d_project_rev_rate_date_type  ;
2818                       l_project_rev_rate_date       := d_project_rev_rate_date       ;
2819                       l_projfunc_rev_rate_type      := d_projfunc_rev_rate_type      ;
2820                       l_projfunc_rev_rate_date_type := d_projfunc_rev_rate_date_type ;
2821                       l_projfunc_rev_rate_date      := d_projfunc_rev_rate_date      ;
2822 
2823                       IF l_inf_tbl_data_curr_rec.txn_currency_code IS NOT NULL THEN
2824                           IF d_txn_curr_tab.COUNT > 0 THEN
2825                               FOR i IN d_txn_curr_tab.FIRST .. d_txn_curr_tab.LAST LOOP
2826                                   IF d_txn_curr_tab(i) = l_inf_tbl_data_curr_rec.txn_currency_code THEN
2827                                       l_project_cost_exchange_rate  := d_project_cost_exc_rate_tab(i);
2828                                       l_projfunc_cost_exchange_rate := d_projfunc_cost_exc_rate_tab(i);
2829                                       l_project_rev_exchange_rate   := d_project_rev_exc_rate_tab(i);
2830                                       l_projfunc_rev_exchange_rate  := d_projfunc_rev_exc_rate_tab(i);
2831 
2832                                       EXIT;
2833                                   END IF;
2834                               END LOOP;
2835                           END IF;
2836                       END IF;
2837                   END IF;
2838           END IF;
2839       END IF;
2840       --log1('----- STAGE 8.2.0------- ');
2841 
2842       l_inf_tbl_data_prev_rec := NULL;
2843       IF inf_tbl_data_csr%ISOPEN THEN
2844 
2845           CLOSE inf_tbl_data_csr;
2846 
2847       END IF;
2848 
2849       OPEN inf_tbl_data_csr
2850       (c_run_id                    => p_run_id,
2851        c_allow_qty_flag            => l_allow_qty_flag,
2852        c_allow_raw_cost_flag       => p_version_info_rec.x_raw_cost_flag,
2853        c_allow_burd_cost_flag      => p_version_info_rec.x_burdened_flag,
2854        c_allow_revenue_flag        => p_version_info_rec.x_revenue_flag,
2855        c_allow_raw_cost_rate_flag  => p_version_info_rec.x_cost_rate_flag,
2856        c_allow_burd_cost_rate_flag => p_version_info_rec.x_burden_rate_flag,
2857        c_allow_bill_rate_flag      => p_version_info_rec.x_bill_rate_flag,
2858        c_project_id                => p_version_info_rec.x_project_id,
2859        c_fin_plan_type_id          => p_version_info_rec.x_fin_plan_type_id,
2860        c_version_type              => p_version_info_rec.x_version_type,
2861        c_request_id                => p_request_id);
2862       --log1('----- STAGE 8.2.1------- ');
2863 
2864       --Added for bug#4488926
2865       IF(p_version_info_rec.x_time_phased_code is null)
2866       THEN
2867           l_period_time_phased_code := PA_FIN_PLAN_UTILS.Get_Time_Phased_code(p_version_info_rec.x_budget_version_id);
2868       ELSE
2869          l_period_time_phased_code := p_version_info_rec.x_time_phased_code;
2870       END IF;
2871 
2872       FETCH inf_tbl_data_csr INTO l_inf_tbl_data_curr_rec;
2873       --log1('----- STAGE 8.2.2------- ');
2874       LOOP
2875             --log1('----- STAGE 8.2.3------- l_inf_tbl_data_curr_rec.task_id '||l_inf_tbl_data_curr_rec.task_id);
2876             --log1('----- STAGE 8.2.4-------');
2877             -- resetting budget line start date/ end date varibales
2878             l_bdgt_line_start_date := null;
2879             l_bdgt_line_end_date := null;
2880 
2881             --log1('----- STAGE 8.2.4.0.1-------');
2882             --Initialize the variables used for processing
2883             IF l_inf_tbl_data_curr_rec.task_id IS NULL OR
2884                (l_inf_tbl_data_prev_rec.task_id IS NOT NULL AND
2885                 (l_inf_tbl_data_prev_rec.task_id <>  l_inf_tbl_data_curr_rec.task_id OR
2886                  l_inf_tbl_data_prev_rec.resource_list_member_id <>  l_inf_tbl_data_curr_rec.resource_list_member_id OR
2887 				 ((l_Cbs_Enabled = 'Y' and
2888 						l_inf_tbl_data_curr_rec.cbs_element_id <> l_inf_tbl_data_next_rec.cbs_element_id) OR l_Cbs_Enabled = 'N') -- cbs enhancement changes bug#16445106
2889 						OR
2890                  Nvl(l_inf_tbl_data_prev_rec.txn_currency_code, '-99') <>  Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') OR
2891                  NVL(l_inf_tbl_data_prev_rec.amount_type_code,'-99') <>  NVL(l_inf_tbl_data_curr_rec.amount_type_code,'-99'))) THEN
2892 
2893                 --log1('----- STAGE 8.2.4.0.2-------');
2894                 --Reset Planning Transaction Level Variables
2895                 IF l_inf_tbl_data_curr_rec.task_id IS NULL OR
2896                    l_inf_tbl_data_prev_rec.task_id <>  l_inf_tbl_data_curr_rec.task_id OR
2897                    l_inf_tbl_data_prev_rec.resource_list_member_id <>  l_inf_tbl_data_curr_rec.resource_list_member_id OR
2898                    Nvl(l_inf_tbl_data_prev_rec.txn_currency_code, '-99') <>  Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') THEN
2899 
2900                     l_plan_trans_attr_copied_flag := 'N';
2901                     l_min_bdgt_line_start_date := NULL;
2902                     l_max_bdgt_line_end_date   := NULL;
2903 
2904                     l_project_cost_rate_type      := NULL;
2905                     l_project_cost_rate_date_type := NULL;
2906                     l_project_cost_rate_date      := NULL;
2907                     l_project_cost_exchange_rate  := NULL;
2908                     l_projfunc_cost_rate_type     := NULL;
2909                     l_projfunc_cost_rate_date_type:= NULL;
2910                     l_projfunc_cost_rate_date     := NULL;
2911                     l_projfunc_cost_exchange_rate := NULL;
2912 
2913                     l_project_rev_rate_type      := NULL;
2914                     l_project_rev_rate_date_type := NULL;
2915                     l_project_rev_rate_date      := NULL;
2916                     l_project_rev_exchange_rate  := NULL;
2917                     l_projfunc_rev_rate_type     := NULL;
2918                     l_projfunc_rev_rate_date_type:= NULL;
2919                     l_projfunc_rev_rate_date     := NULL;
2920                     l_projfunc_rev_exchange_rate := NULL;
2921 
2922                     l_cost_conv_attr_copied_flag := 'N';
2923                     l_rev_conv_attr_copied_flag  := 'N';
2924                     --log1('----- STAGE 8.2.4.0.3-------');
2925 
2926                     -- initializing the conversion attributes for subsequent reords for periodic layout
2927                     -- for a ALL version, these values would be overwritten
2928                     IF is_periodic_setup = 'Y' THEN
2929                         IF p_version_info_rec.x_version_type = 'ALL' AND
2930                            p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
2931                                -- bug 4479036: need to assign these default values only if the
2932                                -- conversion attribute columns are selected in the layout.
2933                                -- otherwise keep them as null.
2934                                IF l_conv_attrb_displayed = 'Y' THEN
2935                                    l_project_cost_rate_type      := d_project_cost_rate_type      ;
2936                                    l_project_cost_rate_date_type := d_project_cost_rate_date_type ;
2937                                    l_project_cost_rate_date      := d_project_cost_rate_date      ;
2938                                    l_projfunc_cost_rate_type     := d_projfunc_cost_rate_type     ;
2939                                    l_projfunc_cost_rate_date_type:= d_projfunc_cost_rate_date_type;
2940                                    l_projfunc_cost_rate_date     := d_projfunc_cost_rate_date     ;
2941 
2942                                    l_project_rev_rate_type       := d_project_rev_rate_type       ;
2943                                    l_project_rev_rate_date_type  := d_project_rev_rate_date_type  ;
2944                                    l_project_rev_rate_date       := d_project_rev_rate_date       ;
2945                                    l_projfunc_rev_rate_type      := d_projfunc_rev_rate_type      ;
2946                                    l_projfunc_rev_rate_date_type := d_projfunc_rev_rate_date_type ;
2947                                    l_projfunc_rev_rate_date      := d_projfunc_rev_rate_date      ;
2948 
2949                                    IF Nvl(l_inf_tbl_data_prev_rec.txn_currency_code, '-99') <>
2950                                       Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') THEN
2951                                        IF d_txn_curr_tab.COUNT > 0 THEN
2952                                            FOR i IN d_txn_curr_tab.FIRST .. d_txn_curr_tab.LAST LOOP
2953                                                IF d_txn_curr_tab(i) = l_inf_tbl_data_curr_rec.txn_currency_code THEN
2954                                                   l_project_cost_exchange_rate  := d_project_cost_exc_rate_tab(i);
2955                                                   l_projfunc_cost_exchange_rate := d_projfunc_cost_exc_rate_tab(i);
2956                                                   l_project_rev_exchange_rate   := d_project_rev_exc_rate_tab(i);
2957                                                   l_projfunc_rev_exchange_rate  := d_projfunc_rev_exc_rate_tab(i);
2958 
2959                                                   EXIT;
2960                                                END IF;
2961                                            END LOOP;
2962                                        END IF;
2963                                    END IF;
2964                                END IF;
2965                         END IF;
2966                     END IF;
2967                 END IF;
2968 
2969                 --log1('----- STAGE 8.2.4.0.4-------');
2970                 --Reset the Resource assignment level Variables
2971                 IF l_inf_tbl_data_curr_rec.task_id IS NULL OR
2972                    l_inf_tbl_data_curr_rec.task_id <> l_inf_tbl_data_prev_rec.task_id OR
2973                    l_inf_tbl_data_curr_rec.resource_list_member_id <> l_inf_tbl_data_prev_rec.resource_list_member_id OR
2974 				   ((l_Cbs_Enabled = 'Y' and
2975 						l_inf_tbl_data_curr_rec.cbs_element_id <> l_inf_tbl_data_next_rec.cbs_element_id) OR l_Cbs_Enabled = 'N') -- cbs enhancement changes bug#16445106
2976 						THEN
2977                     -- nulling out the fixed spread curve period counter
2978                     l_fix_sc_amt_pd_curr_index := null;
2979 
2980                     l_end_ra_index := bl_count -1;
2981                     --log1('----- STAGE 8.2.4.0.5-------'||l_start_ra_index);
2982                     --log1('----- STAGE 8.2.4.0.6-------'||l_end_ra_index);
2983                     --log1('----- STAGE 8.2.4.0.7-------'||l_min_ra_plan_start_date);
2984                     --log1('----- STAGE 8.2.4.0.8-------'||l_max_ra_plan_end_date);
2985 
2986                     IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
2987                        l_cached_ra_id_tbl(l_cached_ra_index) = -1 THEN
2988                           FOR kk IN l_start_ra_index..l_end_ra_index LOOP
2989                             l_plan_start_date_tbl(kk) := l_min_ra_plan_start_date;
2990                             l_plan_end_date_tbl(kk)   := l_max_ra_plan_end_date;
2991                           END LOOP;
2992                     END IF;
2993                     l_start_ra_index := bl_count;
2994                     l_min_ra_plan_start_date := null;
2995                     l_max_ra_plan_end_date   := null;
2996                 END IF;
2997 
2998             END IF;--IF l_inf_tbl_data_prev_rec.task_id IS NOT NULL AND
2999 
3000             EXIT WHEN l_inf_tbl_data_curr_rec.task_id IS NULL;
3001             x_inf_tbl_rec_tbl (x_inf_tbl_rec_tbl.COUNT + 1):= l_inf_tbl_data_curr_rec;
3002             BEGIN
3003                  --log1('----- STAGE 9-------');
3004                  -- preparing the index to be used for cached RA id table
3005                  l_cached_ra_index := 'T' || l_inf_tbl_data_curr_rec.task_id || 'R' || l_inf_tbl_data_curr_rec.resource_list_member_id;
3006 
3007                  -- checking if the RA is an existing one or a new one
3008                  IF NOT l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) THEN
3009                        -- deriving planning dates and spread curve information from pa_resource_assignments for existing RAs
3010                        -- or from pa_resource_list_members for new RAs.
3011                        BEGIN
3012                               SELECT resource_assignment_id,
3013                                      planning_start_date,
3014                                      planning_end_date,
3015                                      spread_curve_id,
3016                                      sp_fixed_date,
3017                                      rbs_element_id,
3018 									 cbs_element_id, -- cbs enhancement changes bug#16445106
3019                                      resource_class_code,
3020                                      rate_based_flag
3021                               INTO   l_ra_id,
3022                                      l_plan_start_date,
3023                                      l_plan_end_date,
3024                                      l_spread_curve_id,
3025                                      l_sp_fixed_date,
3026                                      l_rbs_elem_id,
3027 									 l_cbs_elem_id, -- cbs enhancement changes bug#16445106
3028                                      l_res_class_code,
3029                                      l_rate_based_flag
3030                               FROM   pa_resource_assignments
3031                               WHERE  project_id = p_version_info_rec.x_project_id
3032                               AND    budget_version_id = p_version_info_rec.x_budget_version_id
3033                               AND    task_id = l_inf_tbl_data_curr_rec.task_id
3034                               AND    resource_list_member_id = l_inf_tbl_data_curr_rec.resource_list_member_id
3035 							  AND 	 nvl(cbs_element_id,-1) = nvl(l_inf_tbl_data_curr_rec.cbs_element_id,-1)
3036                               AND    project_assignment_id = -1;
3037 
3038                               l_cached_ra_id_tbl(l_cached_ra_index) := l_ra_id;
3039                        EXCEPTION
3040                               WHEN NO_DATA_FOUND THEN
3041                                     --log1('----- STAGE 10-------');
3042                                     BEGIN
3043                                           SELECT spread_curve_id
3044                                           INTO   l_spread_curve_id
3045                                           FROM   pa_resource_list_members
3046                                           WHERE  resource_list_member_id = l_inf_tbl_data_curr_rec.resource_list_member_id;
3047                                     EXCEPTION
3048                                           WHEN OTHERS THEN
3049                                                IF l_debug_mode = 'Y' THEN
3050                                                     pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
3051                                                     pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
3052                                                END IF;
3053 
3054                                                RAISE;
3055                                     END;
3056                                     l_ra_id           := NULL;
3057                                     l_plan_start_date := NULL;
3058                                     l_plan_end_date   := NULL;
3059                                     l_sp_fixed_date   := NULL;
3060                                     l_rbs_elem_id     := NULL;
3061 									l_cbs_elem_id	  := NULL;
3062                                     l_res_class_code  := NULL;
3063                                     l_rate_based_flag := NULL;
3064                                     -- storing -1 for the index of corresoponding task/resource to indicate new RA
3065                                     l_cached_ra_id_tbl(l_cached_ra_index) := -1;
3066                        END;
3067                        --log1('----- STAGE 11-------');
3068                  END IF;
3069 
3070                  -- initializing the local temp variables
3071                  l_raw_cost             := NULL;
3072                  l_burdened_cost        := NULL;
3073                  l_revenue              := NULL;
3074                  l_quantity             := NULL;
3075                  l_etc_quantity         := NULL;
3076                  l_etc_raw_cost         := NULL;
3077                  l_etc_burdened_cost    := NULL;
3078                  l_etc_revenue          := NULL;
3079                  l_tmp_sum_amt          := NULL;
3080                  l_not_null_period_cnt  := NULL;
3081 
3082                  -- budget line dates processing starts
3083                  IF l_inf_tbl_data_curr_rec.delete_flag = 'Y' THEN
3084                         l_bdgt_line_start_date := l_plan_start_date;
3085                         l_bdgt_line_end_date := l_plan_end_date;
3086                  ELSE
3087                      IF is_periodic_setup = 'Y' THEN
3088                           IF is_forecast_version = 'Y' THEN
3089                               IF l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) AND
3090                                  l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3091                                  l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3092                                       l_bdgt_line_start_date := l_prd_start_date_tbl(1);
3093                               ELSIF l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) AND
3094                                     l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3095                                     l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3096                                       l_bdgt_line_start_date := l_prd_start_date_tbl(2);
3097                               ELSIF l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) AND
3098                                     l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3099                                     l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3100                                       l_bdgt_line_start_date := l_prd_start_date_tbl(3);
3101                               ELSIF l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) AND
3102                                     l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3103                                     l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3104                                       l_bdgt_line_start_date := l_prd_start_date_tbl(4);
3105                               ELSIF l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) AND
3106                                     l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3107                                     l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3108                                       l_bdgt_line_start_date := l_prd_start_date_tbl(5);
3109                               ELSIF l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) AND
3110                                     l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3111                                     l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3112                                       l_bdgt_line_start_date := l_prd_start_date_tbl(6);
3113                               ELSIF l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) AND
3114                                     l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3115                                     l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3116                                       l_bdgt_line_start_date := l_prd_start_date_tbl(7);
3117                               ELSIF l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) AND
3118                                     l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3119                                     l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3120                                       l_bdgt_line_start_date := l_prd_start_date_tbl(8);
3121                               ELSIF l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) AND
3122                                     l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3123                                     l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3124                                       l_bdgt_line_start_date := l_prd_start_date_tbl(9);
3125                               ELSIF l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) AND
3126                                     l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3127                                     l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3128                                       l_bdgt_line_start_date := l_prd_start_date_tbl(10);
3129                               ELSIF l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) AND
3130                                     l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3131                                     l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3132                                       l_bdgt_line_start_date := l_prd_start_date_tbl(11);
3133                               ELSIF l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) AND
3134                                     l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3135                                     l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3136                                       l_bdgt_line_start_date := l_prd_start_date_tbl(12);
3137                               ELSIF l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) AND
3138                                     l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3139                                     l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3140                                       l_bdgt_line_start_date := l_prd_start_date_tbl(13);
3141                               ELSIF l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) AND
3142                                     l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3143                                     l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3144                                       l_bdgt_line_start_date := l_prd_start_date_tbl(14);
3145                               ELSIF l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) AND
3146                                     l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3147                                     l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3148                                       l_bdgt_line_start_date := l_prd_start_date_tbl(15);
3149                               ELSIF l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) AND
3150                                     l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3151                                     l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3152                                       l_bdgt_line_start_date := l_prd_start_date_tbl(16);
3153                               ELSIF l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) AND
3154                                     l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3155                                     l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3156                                       l_bdgt_line_start_date := l_prd_start_date_tbl(17);
3157                               ELSIF l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) AND
3158                                     l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3159                                     l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3160                                       l_bdgt_line_start_date := l_prd_start_date_tbl(18);
3161                               ELSIF l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) AND
3162                                     l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3163                                     l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3164                                       l_bdgt_line_start_date := l_prd_start_date_tbl(19);
3165                               ELSIF l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) AND
3166                                     l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3167                                     l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3168                                       l_bdgt_line_start_date := l_prd_start_date_tbl(20);
3169                               ELSIF l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) AND
3170                                     l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3171                                     l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3172                                       l_bdgt_line_start_date := l_prd_start_date_tbl(21);
3173                               ELSIF l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) AND
3174                                     l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3175                                     l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3176                                       l_bdgt_line_start_date := l_prd_start_date_tbl(22);
3177                               ELSIF l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) AND
3178                                     l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3179                                     l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3180                                       l_bdgt_line_start_date := l_prd_start_date_tbl(23);
3181                               ELSIF l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(24) - 1)) AND
3182                                     l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3183                                     l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3184                                       l_bdgt_line_start_date := l_prd_start_date_tbl(24);
3185                               ELSIF l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) AND
3186                                     l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3187                                     l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3188                                       l_bdgt_line_start_date := l_prd_start_date_tbl(25);
3189                               ELSIF l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) AND
3190                                     l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3191                                     l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3192                                       l_bdgt_line_start_date := l_prd_start_date_tbl(26);
3193                               ELSIF l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) AND
3194                                     l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3195                                     l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3196                                       l_bdgt_line_start_date := l_prd_start_date_tbl(27);
3197                               ELSIF l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) AND
3198                                     l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3199                                     l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3200                                       l_bdgt_line_start_date := l_prd_start_date_tbl(28);
3201                               ELSIF l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) AND
3202                                     l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3203                                     l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3204                                       l_bdgt_line_start_date := l_prd_start_date_tbl(29);
3205                               ELSIF l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) AND
3206                                     l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3207                                     l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3208                                       l_bdgt_line_start_date := l_prd_start_date_tbl(30);
3209                               ELSIF l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 0)) AND
3210                                     l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3211                                     l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3212                                       l_bdgt_line_start_date := l_prd_start_date_tbl(31);
3213                               ELSIF l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) AND
3214                                     l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3215                                     l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3216                                       l_bdgt_line_start_date := l_prd_start_date_tbl(32);
3217                               ELSIF l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) AND
3218                                     l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3219                                     l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3220                                       l_bdgt_line_start_date := l_prd_start_date_tbl(33);
3221                               ELSIF l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) AND
3222                                     l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3223                                     l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3224                                       l_bdgt_line_start_date := l_prd_start_date_tbl(34);
3225                               ELSIF l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) AND
3226                                     l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3227                                     l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3228                                       l_bdgt_line_start_date := l_prd_start_date_tbl(35);
3229                               ELSIF l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) AND
3230                                     l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3231                                     l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3232                                       l_bdgt_line_start_date := l_prd_start_date_tbl(36);
3233                               ELSIF l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) AND
3234                                     l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3235                                     l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3236                                       l_bdgt_line_start_date := l_prd_start_date_tbl(37);
3237                               ELSIF l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) AND
3238                                     l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3239                                     l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3240                                       l_bdgt_line_start_date := l_prd_start_date_tbl(38);
3241                               ELSIF l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) AND
3242                                     l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3243                                     l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3244                                       l_bdgt_line_start_date := l_prd_start_date_tbl(39);
3245                               ELSIF l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) AND
3246                                     l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3247                                     l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3248                                       l_bdgt_line_start_date := l_prd_start_date_tbl(40);
3249                               ELSIF l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) AND
3250                                     l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3251                                     l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3252                                       l_bdgt_line_start_date := l_prd_start_date_tbl(41);
3253                               ELSIF l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) AND
3254                                     l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3255                                     l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3256                                       l_bdgt_line_start_date := l_prd_start_date_tbl(42);
3257                               ELSIF l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) AND
3258                                     l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3259                                     l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3260                                       l_bdgt_line_start_date := l_prd_start_date_tbl(43);
3261                               ELSIF l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) AND
3262                                     l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3263                                     l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3264                                       l_bdgt_line_start_date := l_prd_start_date_tbl(44);
3265                               ELSIF l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) AND
3266                                     l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
3267                                     l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
3268                                       l_bdgt_line_start_date := l_prd_start_date_tbl(45);
3269                               ELSIF l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) AND
3270                                     l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3271                                     l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3272                                       l_bdgt_line_start_date := l_prd_start_date_tbl(46);
3273                               ELSIF l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) AND
3274                                     l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3275                                     l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3276                                       l_bdgt_line_start_date := l_prd_start_date_tbl(47);
3277                               ELSIF l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) AND
3278                                     l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3279                                     l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3280                                       l_bdgt_line_start_date := l_prd_start_date_tbl(48);
3281                               ELSIF l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) AND
3282                                     l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3283                                     l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3284                                       l_bdgt_line_start_date := l_prd_start_date_tbl(49);
3285                               ELSIF l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) AND
3286                                     l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3287                                     l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3288                                       l_bdgt_line_start_date := l_prd_start_date_tbl(50);
3289                               ELSIF l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) AND
3290                                     l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3291                                     l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3292                                       l_bdgt_line_start_date := l_prd_start_date_tbl(51);
3293                               ELSIF l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) AND
3294                                     l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3295                                     l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3296                                       l_bdgt_line_start_date := l_prd_start_date_tbl(52);
3297                               END IF;
3298                           ELSE  -- budget version
3299                               IF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3300                                  l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3301                                      l_bdgt_line_start_date := l_prd_start_date_tbl(1);
3302                               ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3303                                     l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3304                                      l_bdgt_line_start_date := l_prd_start_date_tbl(2);
3305                               ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3306                                     l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3307                                      l_bdgt_line_start_date := l_prd_start_date_tbl(3);
3308                               ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3309                                     l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3310                                      l_bdgt_line_start_date := l_prd_start_date_tbl(4);
3311                               ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3312                                     l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3313                                      l_bdgt_line_start_date := l_prd_start_date_tbl(5);
3314                               ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3315                                     l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3316                                      l_bdgt_line_start_date := l_prd_start_date_tbl(6);
3317                               ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3318                                     l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3319                                      l_bdgt_line_start_date := l_prd_start_date_tbl(7);
3320                               ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3321                                     l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3322                                      l_bdgt_line_start_date := l_prd_start_date_tbl(8);
3323                               ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3324                                     l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3325                                      l_bdgt_line_start_date := l_prd_start_date_tbl(9);
3326                               ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3327                                     l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3328                                      l_bdgt_line_start_date := l_prd_start_date_tbl(10);
3329                               ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3330                                     l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3331                                      l_bdgt_line_start_date := l_prd_start_date_tbl(11);
3332                               ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3333                                     l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3334                                      l_bdgt_line_start_date := l_prd_start_date_tbl(12);
3335                               ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3336                                     l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3337                                      l_bdgt_line_start_date := l_prd_start_date_tbl(13);
3338                               ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3339                                     l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3340                                      l_bdgt_line_start_date := l_prd_start_date_tbl(14);
3341                               ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3342                                     l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3343                                      l_bdgt_line_start_date := l_prd_start_date_tbl(15);
3344                               ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3345                                     l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3346                                      l_bdgt_line_start_date := l_prd_start_date_tbl(16);
3347                               ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3348                                     l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3349                                      l_bdgt_line_start_date := l_prd_start_date_tbl(17);
3350                               ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3351                                     l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3352                                      l_bdgt_line_start_date := l_prd_start_date_tbl(18);
3353                               ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3354                                     l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3355                                      l_bdgt_line_start_date := l_prd_start_date_tbl(19);
3356                               ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3357                                     l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3358                                      l_bdgt_line_start_date := l_prd_start_date_tbl(20);
3359                               ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3360                                     l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3361                                      l_bdgt_line_start_date := l_prd_start_date_tbl(21);
3362                               ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3363                                     l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3364                                      l_bdgt_line_start_date := l_prd_start_date_tbl(22);
3365                               ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3366                                     l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3367                                      l_bdgt_line_start_date := l_prd_start_date_tbl(23);
3368                               ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3369                                     l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3370                                      l_bdgt_line_start_date := l_prd_start_date_tbl(24);
3371                               ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3372                                     l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3373                                      l_bdgt_line_start_date := l_prd_start_date_tbl(25);
3374                               ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3375                                     l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3376                                      l_bdgt_line_start_date := l_prd_start_date_tbl(26);
3377                               ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3378                                     l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3379                                      l_bdgt_line_start_date := l_prd_start_date_tbl(27);
3380                               ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3381                                     l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3382                                      l_bdgt_line_start_date := l_prd_start_date_tbl(28);
3383                               ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3384                                     l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3385                                      l_bdgt_line_start_date := l_prd_start_date_tbl(29);
3386                               ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3387                                     l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3388                                      l_bdgt_line_start_date := l_prd_start_date_tbl(30);
3389                               ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3390                                     l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3391                                      l_bdgt_line_start_date := l_prd_start_date_tbl(31);
3392                               ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3393                                     l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3394                                      l_bdgt_line_start_date := l_prd_start_date_tbl(32);
3395                               ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3396                                     l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3397                                      l_bdgt_line_start_date := l_prd_start_date_tbl(33);
3398                               ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3399                                     l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3400                                      l_bdgt_line_start_date := l_prd_start_date_tbl(34);
3401                               ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3402                                     l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3403                                      l_bdgt_line_start_date := l_prd_start_date_tbl(35);
3404                               ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3405                                     l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3406                                      l_bdgt_line_start_date := l_prd_start_date_tbl(36);
3407                               ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3408                                     l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3409                                      l_bdgt_line_start_date := l_prd_start_date_tbl(37);
3410                               ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3411                                     l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3412                                      l_bdgt_line_start_date := l_prd_start_date_tbl(38);
3413                               ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3414                                     l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3415                                      l_bdgt_line_start_date := l_prd_start_date_tbl(39);
3416                               ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3417                                     l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3418                                      l_bdgt_line_start_date := l_prd_start_date_tbl(40);
3419                               ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3420                                     l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3421                                      l_bdgt_line_start_date := l_prd_start_date_tbl(41);
3422                               ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3423                                     l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3424                                      l_bdgt_line_start_date := l_prd_start_date_tbl(42);
3425                               ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3426                                     l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3427                                      l_bdgt_line_start_date := l_prd_start_date_tbl(43);
3428                               ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3429                                     l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3430                                      l_bdgt_line_start_date := l_prd_start_date_tbl(44);
3431                               ELSIF 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_start_date := l_prd_start_date_tbl(45);
3434                               ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3435                                     l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3436                                      l_bdgt_line_start_date := l_prd_start_date_tbl(46);
3437                               ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3438                                     l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3439                                      l_bdgt_line_start_date := l_prd_start_date_tbl(47);
3440                               ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3441                                     l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3442                                      l_bdgt_line_start_date := l_prd_start_date_tbl(48);
3443                               ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3444                                     l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3445                                      l_bdgt_line_start_date := l_prd_start_date_tbl(49);
3446                               ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3447                                     l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3448                                      l_bdgt_line_start_date := l_prd_start_date_tbl(50);
3449                               ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3450                                     l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3451                                      l_bdgt_line_start_date := l_prd_start_date_tbl(51);
3452                               ELSIF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3453                                     l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3454                                      l_bdgt_line_start_date := l_prd_start_date_tbl(52);
3455                               END IF;
3456                           END IF;
3457 
3458                           -- for budget line end dates
3459                           IF is_forecast_version = 'Y' THEN
3460                               IF l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) AND
3461                                  l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3462                                  l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3463                                       l_bdgt_line_end_date := l_prd_end_date_tbl(52);
3464                               ELSIF l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) AND
3465                                     l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3466                                     l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3467                                       l_bdgt_line_end_date := l_prd_end_date_tbl(51);
3468                               ELSIF l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) AND
3469                                     l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3470                                     l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3471                                       l_bdgt_line_end_date := l_prd_end_date_tbl(50);
3472                               ELSIF l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) AND
3473                                     l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3474                                     l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3475                                       l_bdgt_line_end_date := l_prd_end_date_tbl(49);
3476                               ELSIF l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) AND
3477                                     l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3478                                     l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3479                                       l_bdgt_line_end_date := l_prd_end_date_tbl(48);
3480                               ELSIF l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) AND
3481                                     l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3482                                     l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3483                                       l_bdgt_line_end_date := l_prd_end_date_tbl(47);
3484                               ELSIF l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) AND
3485                                     l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3486                                     l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3487                                       l_bdgt_line_end_date := l_prd_end_date_tbl(46);
3488                               ELSIF l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) AND
3489                                     l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
3490                                     l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
3491                                       l_bdgt_line_end_date := l_prd_end_date_tbl(45);
3492                               ELSIF l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) AND
3493                                     l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3494                                     l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3495                                       l_bdgt_line_end_date := l_prd_end_date_tbl(44);
3496                               ELSIF l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) AND
3497                                     l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3498                                     l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3499                                       l_bdgt_line_end_date := l_prd_end_date_tbl(43);
3500                               ELSIF l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) AND
3501                                     l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3502                                     l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3503                                       l_bdgt_line_end_date := l_prd_end_date_tbl(42);
3504                               ELSIF l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) AND
3505                                     l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3506                                     l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3507                                       l_bdgt_line_end_date := l_prd_end_date_tbl(41);
3508                               ELSIF l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) AND
3509                                     l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3510                                     l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3511                                       l_bdgt_line_end_date := l_prd_end_date_tbl(40);
3512                               ELSIF l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) AND
3513                                     l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3514                                     l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3515                                       l_bdgt_line_end_date := l_prd_end_date_tbl(39);
3516                               ELSIF l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) AND
3517                                     l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3518                                     l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3519                                       l_bdgt_line_end_date := l_prd_end_date_tbl(38);
3520                               ELSIF l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) AND
3521                                     l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3522                                     l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3523                                       l_bdgt_line_end_date := l_prd_end_date_tbl(37);
3524                               ELSIF l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) AND
3525                                     l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3526                                     l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3527                                       l_bdgt_line_end_date := l_prd_end_date_tbl(36);
3528                               ELSIF l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) AND
3529                                     l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3530                                     l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3531                                       l_bdgt_line_end_date := l_prd_end_date_tbl(35);
3532                               ELSIF l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) AND
3533                                     l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3534                                     l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3535                                       l_bdgt_line_end_date := l_prd_end_date_tbl(34);
3536                               ELSIF l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) AND
3537                                     l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3538                                     l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3539                                       l_bdgt_line_end_date := l_prd_end_date_tbl(33);
3540                               ELSIF l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) AND
3541                                     l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3542                                     l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3543                                       l_bdgt_line_end_date := l_prd_end_date_tbl(32);
3544                               ELSIF l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 1)) AND
3545                                     l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3546                                     l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3547                                       l_bdgt_line_end_date := l_prd_end_date_tbl(31);
3548                               ELSIF l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) AND
3549                                     l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3550                                     l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3551                                       l_bdgt_line_end_date := l_prd_end_date_tbl(30);
3552                               ELSIF l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) AND
3553                                     l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3554                                     l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3555                                       l_bdgt_line_end_date := l_prd_end_date_tbl(29);
3556                               ELSIF l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) AND
3557                                     l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3558                                     l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3559                                       l_bdgt_line_end_date := l_prd_end_date_tbl(28);
3560                               ELSIF l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) AND
3561                                     l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3562                                     l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3563                                       l_bdgt_line_end_date := l_prd_end_date_tbl(27);
3564                               ELSIF l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) AND
3565                                     l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3566                                     l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3567                                       l_bdgt_line_end_date := l_prd_end_date_tbl(26);
3568                               ELSIF l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) AND
3569                                     l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3570                                     l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3571                                       l_bdgt_line_end_date := l_prd_end_date_tbl(25);
3572                               ELSIF l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(24) - 1)) AND
3573                                     l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3574                                     l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3575                                       l_bdgt_line_end_date := l_prd_end_date_tbl(24);
3576                               ELSIF l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) AND
3577                                     l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3578                                     l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3579                                       l_bdgt_line_end_date := l_prd_end_date_tbl(23);
3580                               ELSIF l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) AND
3581                                     l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3582                                     l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3583                                       l_bdgt_line_end_date := l_prd_end_date_tbl(22);
3584                               ELSIF l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) AND
3585                                     l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3586                                     l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3587                                       l_bdgt_line_end_date := l_prd_end_date_tbl(21);
3588                               ELSIF l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) AND
3589                                     l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3590                                     l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3591                                       l_bdgt_line_end_date := l_prd_end_date_tbl(20);
3592                               ELSIF l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) AND
3593                                     l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3594                                     l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3595                                       l_bdgt_line_end_date := l_prd_end_date_tbl(19);
3596                               ELSIF l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) AND
3597                                     l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3598                                     l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3599                                       l_bdgt_line_end_date := l_prd_end_date_tbl(18);
3600                               ELSIF l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) AND
3601                                     l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3602                                     l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3603                                       l_bdgt_line_end_date := l_prd_end_date_tbl(17);
3604                               ELSIF l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) AND
3605                                     l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3606                                     l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3607                                       l_bdgt_line_end_date := l_prd_end_date_tbl(16);
3608                               ELSIF l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) AND
3609                                     l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3610                                     l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3611                                       l_bdgt_line_end_date := l_prd_end_date_tbl(15);
3612                               ELSIF l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) AND
3613                                     l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3614                                     l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3615                                       l_bdgt_line_end_date := l_prd_end_date_tbl(14);
3616                               ELSIF l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) AND
3617                                     l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3618                                     l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3619                                       l_bdgt_line_end_date := l_prd_end_date_tbl(13);
3620                               ELSIF l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) AND
3621                                     l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3622                                     l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3623                                       l_bdgt_line_end_date := l_prd_end_date_tbl(12);
3624                               ELSIF l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) AND
3625                                     l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3626                                     l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3627                                       l_bdgt_line_end_date := l_prd_end_date_tbl(11);
3628                               ELSIF l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) AND
3629                                     l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3630                                     l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3631                                       l_bdgt_line_end_date := l_prd_end_date_tbl(10);
3632                               ELSIF l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) AND
3633                                     l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3634                                     l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3635                                       l_bdgt_line_end_date := l_prd_end_date_tbl(9);
3636                               ELSIF l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) AND
3637                                     l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3638                                     l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3639                                       l_bdgt_line_end_date := l_prd_end_date_tbl(8);
3640                               ELSIF l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) AND
3641                                     l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3642                                     l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3643                                       l_bdgt_line_end_date := l_prd_end_date_tbl(7);
3644                               ELSIF l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) AND
3645                                     l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3646                                     l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3647                                       l_bdgt_line_end_date := l_prd_end_date_tbl(6);
3648                               ELSIF l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) AND
3649                                     l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3650                                     l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3651                                       l_bdgt_line_end_date := l_prd_end_date_tbl(5);
3652                               ELSIF l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) AND
3653                                     l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3654                                     l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3655                                       l_bdgt_line_end_date := l_prd_end_date_tbl(4);
3656                               ELSIF l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) AND
3657                                     l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3658                                     l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3659                                       l_bdgt_line_end_date := l_prd_end_date_tbl(3);
3660                               ELSIF l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) AND
3661                                     l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3662                                     l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3663                                       l_bdgt_line_end_date := l_prd_end_date_tbl(2);
3664                               ELSIF l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) AND
3665                                     l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3666                                     l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3667                                       l_bdgt_line_end_date := l_prd_end_date_tbl(1);
3668                               END IF;
3669                           ELSE  -- budget version
3670                               IF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3671                                  l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3672                                      l_bdgt_line_end_date := l_prd_end_date_tbl(52);
3673                               ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3674                                     l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3675                                      l_bdgt_line_end_date := l_prd_end_date_tbl(51);
3676                               ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3677                                     l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3678                                      l_bdgt_line_end_date := l_prd_end_date_tbl(50);
3679                               ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3680                                     l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3681                                      l_bdgt_line_end_date := l_prd_end_date_tbl(49);
3682                               ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3683                                     l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3684                                      l_bdgt_line_end_date := l_prd_end_date_tbl(48);
3685                               ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3686                                     l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3687                                      l_bdgt_line_end_date := l_prd_end_date_tbl(47);
3688                               ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3689                                     l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3690                                      l_bdgt_line_end_date := l_prd_end_date_tbl(46);
3691                               ELSIF l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
3692                                     l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
3693                                      l_bdgt_line_end_date := l_prd_end_date_tbl(45);
3694                               ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3695                                     l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3696                                      l_bdgt_line_end_date := l_prd_end_date_tbl(44);
3697                               ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3698                                     l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3699                                      l_bdgt_line_end_date := l_prd_end_date_tbl(43);
3700                               ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3701                                     l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3702                                      l_bdgt_line_end_date := l_prd_end_date_tbl(42);
3703                               ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3704                                     l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3705                                      l_bdgt_line_end_date := l_prd_end_date_tbl(41);
3706                               ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3707                                     l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3708                                      l_bdgt_line_end_date := l_prd_end_date_tbl(40);
3709                               ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3710                                     l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3711                                      l_bdgt_line_end_date := l_prd_end_date_tbl(39);
3712                               ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3713                                     l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3714                                      l_bdgt_line_end_date := l_prd_end_date_tbl(38);
3715                               ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3716                                     l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3717                                      l_bdgt_line_end_date := l_prd_end_date_tbl(37);
3718                               ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3719                                     l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3720                                      l_bdgt_line_end_date := l_prd_end_date_tbl(36);
3721                               ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3722                                     l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3723                                      l_bdgt_line_end_date := l_prd_end_date_tbl(35);
3724                               ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3725                                     l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3726                                      l_bdgt_line_end_date := l_prd_end_date_tbl(34);
3727                               ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3728                                     l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3729                                      l_bdgt_line_end_date := l_prd_end_date_tbl(33);
3730                               ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3731                                     l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3732                                      l_bdgt_line_end_date := l_prd_end_date_tbl(32);
3733                               ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3734                                     l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3735                                      l_bdgt_line_end_date := l_prd_end_date_tbl(31);
3736                               ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3737                                     l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3738                                      l_bdgt_line_end_date := l_prd_end_date_tbl(30);
3739                               ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3740                                     l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3741                                      l_bdgt_line_end_date := l_prd_end_date_tbl(29);
3742                               ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3743                                     l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3744                                      l_bdgt_line_end_date := l_prd_end_date_tbl(28);
3745                               ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3746                                     l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3747                                      l_bdgt_line_end_date := l_prd_end_date_tbl(27);
3748                               ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3749                                     l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3750                                      l_bdgt_line_end_date := l_prd_end_date_tbl(26);
3751                               ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3752                                     l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3753                                      l_bdgt_line_end_date := l_prd_end_date_tbl(25);
3754                               ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3755                                     l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3756                                      l_bdgt_line_end_date := l_prd_end_date_tbl(24);
3757                               ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3758                                     l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3759                                      l_bdgt_line_end_date := l_prd_end_date_tbl(23);
3760                               ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3761                                     l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3762                                      l_bdgt_line_end_date := l_prd_end_date_tbl(22);
3763                               ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3764                                     l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3765                                      l_bdgt_line_end_date := l_prd_end_date_tbl(21);
3766                               ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3767                                     l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3768                                      l_bdgt_line_end_date := l_prd_end_date_tbl(20);
3769                               ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3770                                     l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3771                                      l_bdgt_line_end_date := l_prd_end_date_tbl(19);
3772                               ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3773                                     l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3774                                      l_bdgt_line_end_date := l_prd_end_date_tbl(18);
3775                               ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3776                                     l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3777                                      l_bdgt_line_end_date := l_prd_end_date_tbl(17);
3778                               ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3779                                     l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3780                                      l_bdgt_line_end_date := l_prd_end_date_tbl(16);
3781                               ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3782                                     l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3783                                      l_bdgt_line_end_date := l_prd_end_date_tbl(15);
3784                               ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3785                                     l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3786                                      l_bdgt_line_end_date := l_prd_end_date_tbl(14);
3787                               ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3788                                     l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3789                                      l_bdgt_line_end_date := l_prd_end_date_tbl(13);
3790                               ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3791                                     l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3792                                      l_bdgt_line_end_date := l_prd_end_date_tbl(12);
3793                               ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3794                                     l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3795                                      l_bdgt_line_end_date := l_prd_end_date_tbl(11);
3796                               ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3797                                     l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3798                                      l_bdgt_line_end_date := l_prd_end_date_tbl(10);
3799                               ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3800                                     l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3801                                      l_bdgt_line_end_date := l_prd_end_date_tbl(9);
3802                               ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3803                                     l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3804                                      l_bdgt_line_end_date := l_prd_end_date_tbl(8);
3805                               ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3806                                     l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3807                                      l_bdgt_line_end_date := l_prd_end_date_tbl(7);
3808                               ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3809                                     l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3810                                      l_bdgt_line_end_date := l_prd_end_date_tbl(6);
3811                               ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3812                                     l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3813                                      l_bdgt_line_end_date := l_prd_end_date_tbl(5);
3814                               ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3815                                     l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3816                                      l_bdgt_line_end_date := l_prd_end_date_tbl(4);
3817                               ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3818                                     l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3819                                      l_bdgt_line_end_date := l_prd_end_date_tbl(3);
3820                               ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3821                                     l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3822                                      l_bdgt_line_end_date := l_prd_end_date_tbl(2);
3823                               ELSIF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3824                                     l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3825                                      l_bdgt_line_end_date := l_prd_end_date_tbl(1);
3826                               END IF;
3827                           END IF;
3828 
3829                      ELSE  -- non periodic
3830                           IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
3831                              l_cached_ra_id_tbl(l_cached_ra_index) = -1 THEN
3832                               -- populating the planning start/end dates as the budget line start/end dates
3833                               l_bdgt_line_start_date := l_inf_tbl_data_curr_rec.planning_start_date;
3834                               l_bdgt_line_end_date := l_inf_tbl_data_curr_rec.planning_end_date;
3835                           ELSE
3836                               l_bdgt_line_start_date := l_plan_start_date;
3837                               l_bdgt_line_end_date := l_plan_end_date;
3838                           END IF;
3839 
3840                      END IF;
3841                 END IF;
3842                 -- budget line dates processing ends
3843 
3844                 -- derivation of amounts i.e. raw cost, burdened cost, revenue,
3845                 -- quantity, raw cost rate, burdened cost, bill rate
3846                 IF l_inf_tbl_data_curr_rec.delete_flag = 'Y' THEN
3847                      IF is_periodic_setup = 'Y' THEN
3848                          IF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_RAW_COST' THEN
3849                              l_raw_cost := l_fnd_miss_num;
3850                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_RAW_COST' THEN
3851                              l_raw_cost := l_fnd_miss_num;
3852                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_RAW_COST' THEN
3853                              l_etc_raw_cost := l_fnd_miss_num;
3854                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_BURDENED_COST' THEN
3855                              l_burdened_cost := l_fnd_miss_num;
3856                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_BURDENED_COST' THEN
3857                              l_burdened_cost := l_fnd_miss_num;
3858                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_BURDENED_COST' THEN
3859                              l_etc_burdened_cost := l_fnd_miss_num;
3860                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_REV' THEN
3861                              l_revenue := l_fnd_miss_num;
3862                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_REVENUE' THEN
3863                              l_revenue := l_fnd_miss_num;
3864                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_REVENUE' THEN
3865                              l_etc_revenue := l_fnd_miss_num;
3866                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_QTY' THEN
3867                              l_quantity := l_fnd_miss_num;
3868                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_QTY' THEN
3869                              l_quantity := l_fnd_miss_num;
3870                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_QTY' THEN
3871                              l_etc_quantity := l_fnd_miss_num;
3872                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') THEN
3873                              l_rc_rate := l_fnd_miss_num;
3874                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('BURDENED_COST_RATE','ETC_BURDENED_COST_RATE') THEN
3875                              l_bc_rate := l_fnd_miss_num;
3876                          ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') THEN
3877                              l_bill_rate := l_fnd_miss_num;
3878                          END IF;
3879 
3880                      ELSE
3881                          l_raw_cost          := l_fnd_miss_num;
3882                          l_burdened_cost     := l_fnd_miss_num;
3883                          l_revenue           := l_fnd_miss_num;
3884                          l_quantity          := l_fnd_miss_num;
3885                          l_etc_quantity      := l_fnd_miss_num;
3886                          l_etc_raw_cost      := l_fnd_miss_num;
3887                          l_etc_burdened_cost := l_fnd_miss_num;
3888                          l_etc_revenue       := l_fnd_miss_num;
3889 
3890                          l_rc_rate := l_fnd_miss_num;
3891                          l_bc_rate := l_fnd_miss_num;
3892                          l_bill_rate := l_fnd_miss_num;
3893                      END IF;
3894 
3895                 ELSE
3896                      IF is_periodic_setup = 'Y' THEN
3897                            -- summing up periods for for particular amount type
3898                            l_amount:=0;
3899                            l_tmp_sum_amt:=0;
3900                            l_not_null_period_cnt:=0;
3901                            FOR tt IN 1..52 LOOP
3902 
3903                                 l_amount:=0;
3904                                 IF tt =1 THEN
3905                                     l_amount := l_inf_tbl_data_curr_rec.prd1;
3906                                 ELSIF tt =2 THEN
3907                                     l_amount := l_inf_tbl_data_curr_rec.prd2;
3908                                 ELSIF tt =3 THEN
3909                                     l_amount := l_inf_tbl_data_curr_rec.prd3;
3910                                 ELSIF tt =4 THEN
3911                                     l_amount := l_inf_tbl_data_curr_rec.prd4;
3912                                 ELSIF tt =5 THEN
3913                                     l_amount := l_inf_tbl_data_curr_rec.prd5;
3914                                 ELSIF tt =6 THEN
3915                                     l_amount := l_inf_tbl_data_curr_rec.prd6;
3916                                 ELSIF tt =7 THEN
3917                                     l_amount := l_inf_tbl_data_curr_rec.prd7;
3918                                 ELSIF tt =8 THEN
3919                                     l_amount := l_inf_tbl_data_curr_rec.prd8;
3920                                 ELSIF tt =9 THEN
3921                                     l_amount := l_inf_tbl_data_curr_rec.prd9;
3922                                 ELSIF tt =10 THEN
3923                                     l_amount := l_inf_tbl_data_curr_rec.prd10;
3924                                 ELSIF tt =11 THEN
3925                                     l_amount := l_inf_tbl_data_curr_rec.prd11;
3926                                 ELSIF tt =12 THEN
3927                                     l_amount := l_inf_tbl_data_curr_rec.prd12;
3928                                 ELSIF tt =13 THEN
3929                                     l_amount := l_inf_tbl_data_curr_rec.prd13;
3930                                 ELSIF tt =14 THEN
3931                                     l_amount := l_inf_tbl_data_curr_rec.prd14;
3932                                 ELSIF tt =15 THEN
3933                                     l_amount := l_inf_tbl_data_curr_rec.prd15;
3934                                 ELSIF tt =16 THEN
3935                                     l_amount := l_inf_tbl_data_curr_rec.prd16;
3936                                 ELSIF tt =17 THEN
3937                                     l_amount := l_inf_tbl_data_curr_rec.prd17;
3938                                 ELSIF tt =18 THEN
3939                                     l_amount := l_inf_tbl_data_curr_rec.prd18;
3940                                 ELSIF tt =19 THEN
3941                                     l_amount := l_inf_tbl_data_curr_rec.prd19;
3942                                 ELSIF tt =20 THEN
3943                                     l_amount := l_inf_tbl_data_curr_rec.prd20;
3944                                 ELSIF tt =21 THEN
3945                                     l_amount := l_inf_tbl_data_curr_rec.prd21;
3946                                 ELSIF tt =22 THEN
3947                                     l_amount := l_inf_tbl_data_curr_rec.prd22;
3948                                 ELSIF tt =23 THEN
3949                                     l_amount := l_inf_tbl_data_curr_rec.prd23;
3950                                 ELSIF tt =24 THEN
3951                                     l_amount := l_inf_tbl_data_curr_rec.prd24;
3952                                 ELSIF tt =25 THEN
3953                                     l_amount := l_inf_tbl_data_curr_rec.prd25;
3954                                 ELSIF tt =26 THEN
3955                                     l_amount := l_inf_tbl_data_curr_rec.prd26;
3956                                 ELSIF tt =27 THEN
3957                                     l_amount := l_inf_tbl_data_curr_rec.prd27;
3958                                 ELSIF tt =28 THEN
3959                                     l_amount := l_inf_tbl_data_curr_rec.prd28;
3960                                 ELSIF tt =29 THEN
3961                                     l_amount := l_inf_tbl_data_curr_rec.prd29;
3962                                 ELSIF tt =30 THEN
3963                                     l_amount := l_inf_tbl_data_curr_rec.prd30;
3964                                 ELSIF tt =31 THEN
3965                                     l_amount := l_inf_tbl_data_curr_rec.prd31;
3966                                 ELSIF tt =32 THEN
3967                                     l_amount := l_inf_tbl_data_curr_rec.prd32;
3968                                 ELSIF tt =33 THEN
3969                                     l_amount := l_inf_tbl_data_curr_rec.prd33;
3970                                 ELSIF tt =34 THEN
3971                                     l_amount := l_inf_tbl_data_curr_rec.prd34;
3972                                 ELSIF tt =35 THEN
3973                                     l_amount := l_inf_tbl_data_curr_rec.prd35;
3974                                 ELSIF tt =36 THEN
3975                                     l_amount := l_inf_tbl_data_curr_rec.prd36;
3976                                 ELSIF tt =37 THEN
3977                                     l_amount := l_inf_tbl_data_curr_rec.prd37;
3978                                 ELSIF tt =38 THEN
3979                                     l_amount := l_inf_tbl_data_curr_rec.prd38;
3980                                 ELSIF tt =39 THEN
3981                                     l_amount := l_inf_tbl_data_curr_rec.prd39;
3982                                 ELSIF tt =40 THEN
3983                                     l_amount := l_inf_tbl_data_curr_rec.prd40;
3984                                 ELSIF tt =41 THEN
3985                                     l_amount := l_inf_tbl_data_curr_rec.prd41;
3986                                 ELSIF tt =42 THEN
3987                                     l_amount := l_inf_tbl_data_curr_rec.prd42;
3988                                 ELSIF tt =43 THEN
3989                                     l_amount := l_inf_tbl_data_curr_rec.prd43;
3990                                 ELSIF tt =44 THEN
3991                                     l_amount := l_inf_tbl_data_curr_rec.prd44;
3992                                 ELSIF tt =45 THEN
3993                                     l_amount := l_inf_tbl_data_curr_rec.prd45;
3994                                 ELSIF tt =46 THEN
3995                                     l_amount := l_inf_tbl_data_curr_rec.prd46;
3996                                 ELSIF tt =47 THEN
3997                                     l_amount := l_inf_tbl_data_curr_rec.prd47;
3998                                 ELSIF tt =48 THEN
3999                                     l_amount := l_inf_tbl_data_curr_rec.prd48;
4000                                 ELSIF tt =49 THEN
4001                                     l_amount := l_inf_tbl_data_curr_rec.prd49;
4002                                 ELSIF tt =50 THEN
4003                                     l_amount := l_inf_tbl_data_curr_rec.prd50;
4004                                 ELSIF tt =51 THEN
4005                                     l_amount := l_inf_tbl_data_curr_rec.prd51;
4006                                 ELSIF tt =52 THEN
4007                                     l_amount := l_inf_tbl_data_curr_rec.prd52;
4008                                 END IF;
4009 
4010                                 IF l_amount = l_fnd_miss_num THEN
4011 
4012                                     l_amount:= 0;
4013 
4014                                 ELSIF l_amount IS NULL THEN
4015 
4016                                     l_amount := 0;
4017 
4018                                 END IF;
4019 
4020                                 IF l_amount <> 0 THEN
4021 
4022                                     l_not_null_period_cnt := l_not_null_period_cnt+1;
4023                                     l_tmp_sum_amt := l_tmp_sum_amt+l_amount;
4024 
4025                                 END IF;
4026 
4027                            END LOOP;--FOR tt IN 1..52 LOOP
4028                      END IF;
4029                 END IF;
4030 
4031                 --log1('----- STAGE 12-------');
4032                 --log1('----- STAGE 12.1------- '||l_cached_ra_index);
4033                 --log1('----- STAGE 12.2------- '||l_cached_ra_id_tbl(l_cached_ra_index));
4034                 IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
4035                    l_cached_ra_id_tbl(l_cached_ra_index) <> -1 THEN
4036                        -- for existing RAs
4037                       -- for periodic layouts getting the start/end date of the preceeding and succeeding periods
4038                       IF is_periodic_setup = 'Y' THEN
4039                              --log1('----- STAGE 13-------');
4040                              IF l_inf_tbl_data_curr_rec.pd_prd IS NOT NULL AND
4041                                 l_inf_tbl_data_curr_rec.pd_prd <> l_fnd_miss_num THEN
4042                                     IF l_plan_start_date >= p_prd_start_date_tbl(1) THEN
4043                                           l_bdgt_line_start_date := l_first_pd_bf_pm_st_dt;
4044                                     ELSE
4045                                           l_bdgt_line_start_date := l_plan_start_date;
4046                                     END IF;
4047                              END IF;
4048 
4049                              IF l_inf_tbl_data_curr_rec.sd_prd IS NOT NULL AND
4050                                 l_inf_tbl_data_curr_rec.sd_prd <> l_fnd_miss_num THEN
4051                                     IF l_plan_end_date <= p_prd_end_date_tbl(l_original_prd_count) THEN
4052                                           l_bdgt_line_end_date := l_last_pd_af_pm_en_dt;
4053                                     ELSE
4054                                           l_bdgt_line_end_date := l_plan_end_date;
4055                                     END IF;
4056                              END IF;
4057                              --log1('----- STAGE 13.1------- '||l_bdgt_line_start_date);
4058                              --log1('----- STAGE 13.2------- '||l_bdgt_line_end_date);
4059                              --log1('----- STAGE 13.3------- '||l_plan_start_date);
4060                              --log1('----- STAGE 13.4------- '||l_plan_end_date);
4061                              -- checking if the budget line start/end dates are outside the planning date range
4062 
4063 
4064                             ---Added this code for bug#4488926. Caching the values of l_period_plan_start_date and
4065                             --l_period_plan_end_date
4066                              IF ( NOT(l_period_plan_start_date_tbl.exists(to_char(l_plan_start_date))
4067                                   AND l_period_plan_end_date_tbl.exists(to_char(l_plan_end_date))))
4068                              THEN
4069                                 --For periodic case get the start and end dates.
4070                                 l_period_plan_start_date := PA_FIN_PLAN_UTILS.get_period_start_date(l_plan_start_date,l_period_time_phased_code);
4071                                 l_period_plan_end_date :=  PA_FIN_PLAN_UTILS.get_period_end_date (l_plan_end_date ,  l_period_time_phased_code);
4072                                 l_period_plan_start_date_tbl(to_char(l_plan_start_date)) := l_period_plan_start_date;
4073                                 l_period_plan_end_date_tbl(to_char(l_plan_end_date)) := l_period_plan_end_date;
4074                              ELSE
4075                                 l_period_plan_start_date := l_period_plan_start_date_tbl(to_char(l_plan_start_date));
4076                                 l_period_plan_end_date := l_period_plan_end_date_tbl(to_char(l_plan_end_date));
4077                              END IF;
4078 
4079                              IF l_bdgt_line_start_date < l_period_plan_start_date OR
4080                                 l_bdgt_line_end_date > l_period_plan_end_date THEN
4081                                     l_err_val_code_tbl.extend(1);
4082                                     l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_BL_OUT_OF_PLAN_RANGE';
4083                                     l_err_task_id_tbl.extend(1);
4084                                     l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4085                                     l_err_rlm_id_tbl.extend(1);
4086                                     l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4087                                     l_err_txn_curr_tbl.extend(1);
4088                                     l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4089                                     l_err_amt_type_tbl.extend(1);
4090                                     l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4091 
4092                                     -- raising an exception to skip processing for the dulpicate record
4093                                     RAISE Fp_Webadi_Skip_Rec_Proc_Exc;
4094                              END IF;
4095                       END IF; -- if periodic setup
4096                 ELSE
4097                       -- for new RAs
4098                       --log1('----- STAGE 12.3------- '||is_periodic_setup);
4099                       IF is_periodic_setup = 'Y' THEN
4100                              -- for new RAs, amounts in preceding and succeeding periods cann't be entered
4101                              --log1('----- STAGE 12.4------- '|| l_inf_tbl_data_curr_rec.pd_prd);
4102                              IF l_inf_tbl_data_curr_rec.pd_prd IS NOT NULL AND
4103                                 l_inf_tbl_data_curr_rec.pd_prd <> l_fnd_miss_num THEN
4104                                     l_err_val_code_tbl.extend(1);
4105                                     l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_NW_RA_PCD_PRD_AMT_ERR';
4106                                     l_err_task_id_tbl.extend(1);
4107                                     l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4108                                     l_err_rlm_id_tbl.extend(1);
4109                                     l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4110                                     l_err_txn_curr_tbl.extend(1);
4111                                     l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4112                                     l_err_amt_type_tbl.extend(1);
4113                                     l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4114 
4115                                     -- raising an exception to skip processing for the dulpicate record
4116                                     RAISE Fp_Webadi_Skip_Rec_Proc_Exc;
4117                              END IF;
4118                              --log1('----- STAGE 12.5------- '|| l_inf_tbl_data_curr_rec.sd_prd);
4119                              IF l_inf_tbl_data_curr_rec.sd_prd IS NOT NULL AND
4120                                 l_inf_tbl_data_curr_rec.sd_prd <> l_fnd_miss_num THEN
4121                                     l_err_val_code_tbl.extend(1);
4122                                     l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_NW_RA_PCD_PRD_AMT_ERR';
4123                                     l_err_task_id_tbl.extend(1);
4124                                     l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4125                                     l_err_rlm_id_tbl.extend(1);
4126                                     l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4127                                     l_err_txn_curr_tbl.extend(1);
4128                                     l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4129                                     l_err_amt_type_tbl.extend(1);
4130                                     l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4131 
4132                                     -- raising an exception to skip processing for the dulpicate record
4133                                     RAISE Fp_Webadi_Skip_Rec_Proc_Exc;
4134                              END IF;
4135                       END IF;
4136                 END IF; -- if existing RA check
4137                 --log1('----- STAGE 15-------');
4138 
4139                 --log1('----- STAGE 16-------');
4140                 -- copying the following attributes from the first record
4141                 IF l_inf_tbl_data_curr_rec.delete_flag = 'N' THEN
4142                     IF l_plan_trans_attr_copied_flag = 'N' THEN
4143 
4144                         l_bdgt_ln_tbl_description := l_inf_tbl_data_curr_rec.description;
4145                         l_change_reason_code := l_inf_tbl_data_curr_rec.change_reason;
4146                         -- flipping the value of l_plan_trans_attr_copied_flag
4147                         l_plan_trans_attr_copied_flag := 'Y';
4148 
4149                     END IF;
4150 
4151                     IF l_cost_conv_attr_copied_flag ='N' OR
4152                        l_rev_conv_attr_copied_flag ='N' THEN
4153 
4154                         IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
4155 
4156                             IF is_periodic_setup = 'N' THEN
4157 
4158                                 l_project_cost_rate_type      := l_inf_tbl_data_curr_rec.project_cost_rate_type;
4159                                 l_project_cost_rate_date_type := l_inf_tbl_data_curr_rec.project_cost_rate_date_type;
4160                                 l_project_cost_rate_date      := l_inf_tbl_data_curr_rec.project_cost_rate_date;
4161                                 l_project_cost_exchange_rate  := l_inf_tbl_data_curr_rec.project_cost_exchange_rate;
4162                                 l_projfunc_cost_rate_type     := l_inf_tbl_data_curr_rec.projfunc_cost_rate_type;
4163                                 l_projfunc_cost_rate_date_type:= l_inf_tbl_data_curr_rec.projfunc_cost_rate_date_type;
4164                                 l_projfunc_cost_rate_date     := l_inf_tbl_data_curr_rec.projfunc_cost_rate_date;
4165                                 l_projfunc_cost_exchange_rate := l_inf_tbl_data_curr_rec.projfunc_cost_exchange_rate;
4166 
4167                                 l_project_rev_rate_type       := l_inf_tbl_data_curr_rec.project_rev_rate_type;
4168                                 l_project_rev_rate_date_type  := l_inf_tbl_data_curr_rec.project_rev_rate_date_type;
4169                                 l_project_rev_rate_date       := l_inf_tbl_data_curr_rec.project_rev_rate_date;
4170                                 l_project_rev_exchange_rate   := l_inf_tbl_data_curr_rec.project_rev_exchange_rate;
4171                                 l_projfunc_rev_rate_type      := l_inf_tbl_data_curr_rec.projfunc_rev_rate_type;
4172                                 l_projfunc_rev_rate_date_type := l_inf_tbl_data_curr_rec.projfunc_rev_rate_date_type;
4173                                 l_projfunc_rev_rate_date      := l_inf_tbl_data_curr_rec.projfunc_rev_rate_date;
4174                                 l_projfunc_rev_exchange_rate  := l_inf_tbl_data_curr_rec.projfunc_rev_exchange_rate;
4175 
4176                                 l_cost_conv_attr_copied_flag :='Y';
4177                                 l_rev_conv_attr_copied_flag := 'Y';
4178 
4179                             ELSE--Periodic Setup
4180 
4181                                 IF l_cost_conv_attr_copied_flag ='N' AND
4182                                    l_inf_tbl_data_curr_rec.amount_type_code IN ('TOTAL_BURDENED_COST',
4183                                                                                 'TOTAL_RAW_COST',
4184                                                                                 'BURDENED_COST_RATE',
4185                                                                                 'RAW_COST_RATE',
4186                                                                                 'FCST_BURDENED_COST',
4187                                                                                 'ETC_BURDENED_COST',
4188                                                                                 'FCST_RAW_COST',
4189                                                                                 'ETC_RAW_COST',
4190                                                                                 'ETC_BURDENED_COST_RATE',
4191                                                                                 'ETC_RAW_COST_RATE')  THEN
4192 
4193                                     l_cost_conv_attr_copied_flag  := 'Y';
4194                                     l_project_cost_rate_type       := l_inf_tbl_data_curr_rec.project_rate_type;
4195                                     l_project_cost_rate_date_type  := l_inf_tbl_data_curr_rec.project_rate_date_type;
4196                                     l_project_cost_rate_date       := l_inf_tbl_data_curr_rec.project_rate_date;
4197                                     l_project_cost_exchange_rate   := l_inf_tbl_data_curr_rec.project_exchange_rate;
4198                                     l_projfunc_cost_rate_type      := l_inf_tbl_data_curr_rec.projfunc_rate_type;
4199                                     l_projfunc_cost_rate_date_type := l_inf_tbl_data_curr_rec.projfunc_rate_date_type;
4200                                     l_projfunc_cost_rate_date      := l_inf_tbl_data_curr_rec.projfunc_rate_date;
4201                                     l_projfunc_cost_exchange_rate  := l_inf_tbl_data_curr_rec.projfunc_exchange_rate;
4202 
4203                                 ELSIF l_rev_conv_attr_copied_flag ='N' AND
4204                                       l_inf_tbl_data_curr_rec.amount_type_code IN ('TOTAL_REV',
4205                                                                                    'BILL_RATE',
4206                                                                                    'FCST_REVENUE',
4207                                                                                    'ETC_REVENUE',
4208                                                                                    'ETC_BILL_RATE')  THEN
4209 
4210                                     l_rev_conv_attr_copied_flag  := 'Y';
4211                                     l_project_rev_rate_type      := l_inf_tbl_data_curr_rec.project_rate_type;
4212                                     l_project_rev_rate_date_type := l_inf_tbl_data_curr_rec.project_rate_date_type;
4213                                     l_project_rev_rate_date      := l_inf_tbl_data_curr_rec.project_rate_date;
4214                                     l_project_rev_exchange_rate  := l_inf_tbl_data_curr_rec.project_exchange_rate;
4215                                     l_projfunc_rev_rate_type     := l_inf_tbl_data_curr_rec.projfunc_rate_type;
4216                                     l_projfunc_rev_rate_date_type:= l_inf_tbl_data_curr_rec.projfunc_rate_date_type;
4217                                     l_projfunc_rev_rate_date     := l_inf_tbl_data_curr_rec.projfunc_rate_date;
4218                                     l_projfunc_rev_exchange_rate := l_inf_tbl_data_curr_rec.projfunc_exchange_rate;
4219 
4220                                 END IF;
4221 
4222                             END IF;--IF is_periodic_setup = 'N' THEN
4223 
4224                             --log1('l_project_cost_rate_type = ' || l_project_cost_rate_type);
4225                             --log1('l_project_cost_rate_date_type = ' || l_project_cost_rate_date_type);
4226                             --log1('-- to_char(l_project_cost_rate_date)-1-- ' || to_char(l_project_cost_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4227                             --log1('-- to_char(l_project_cost_rate_date)-2-- ' || to_char(l_project_cost_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4228                             --log1('l_projfunc_cost_rate_type = ' || l_projfunc_cost_rate_type);
4229                             --log1('l_projfunc_cost_rate_date_type = ' || l_projfunc_cost_rate_date_type);
4230                             --log1('-- to_char(l_projfunc_cost_rate_date)--1- ' || to_char(l_projfunc_cost_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4231                             --log1('-- to_char(l_projfunc_cost_rate_date)--2- ' || to_char(l_projfunc_cost_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4232                             --log1('l_project_rev_rate_type = ' || l_project_rev_rate_type);
4233                             --log1('l_project_rev_rate_date_type = ' || l_project_rev_rate_date_type);
4234                             --log1('-- to_char(l_project_rev_rate_date)-1-- ' || to_char(l_project_rev_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4235                             --log1('-- to_char(l_project_rev_rate_date)-2-- ' || to_char(l_project_rev_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4236                             --log1('l_projfunc_rev_rate_type = ' || l_projfunc_rev_rate_type);
4237                             --log1('l_projfunc_rev_rate_date_type = ' || l_projfunc_rev_rate_date_type);
4238                             --log1('-- to_char(l_projfunc_rev_rate_date)-1-- ' || to_char(l_projfunc_rev_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4239                             --log1('-- to_char(l_projfunc_rev_rate_date)-2-- ' || to_char(l_projfunc_rev_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4240 
4241                         END IF;--IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
4242 
4243                     END IF;--IF l_cost_conv_attr_copied_flag ='N' OR
4244                 END IF;
4245                 -- nulling out the next record
4246                l_inf_tbl_data_next_rec := NULL;
4247                -- fetching the next record
4248                FETCH inf_tbl_data_csr INTO l_inf_tbl_data_next_rec;
4249                --log1('----- STAGE 19-------');
4250                IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
4251                   l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
4252                   l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id AND
4253 				  (l_Cbs_Enabled = 'N' OR
4254 						(l_Cbs_Enabled = 'Y' AND l_inf_tbl_data_curr_rec.cbs_element_id = l_inf_tbl_data_next_rec.cbs_element_id))-- cbs enhancement changes bug#16445106
4255 						AND
4256                   Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') = Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') THEN
4257 
4258                       IF is_periodic_setup = 'Y' THEN
4259                            IF l_inf_tbl_data_curr_rec.amount_type_code = l_inf_tbl_data_next_rec.amount_type_code THEN
4260                                  -- populating the error codes to call process_errors at the end
4261                                  IF l_debug_mode = 'Y' THEN
4262                                     pa_debug.g_err_stage := 'Duplicate record found';
4263                                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4264                                  END IF;
4265 
4266                                  l_err_val_code_tbl.extend(1);
4267                                  l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_DUPL_REC_PASSED';
4268                                  l_err_task_id_tbl.extend(1);
4269                                  l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4270                                  l_err_rlm_id_tbl.extend(1);
4271                                  l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4272                                  l_err_txn_curr_tbl.extend(1);
4273                                  l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4274                                  l_err_amt_type_tbl.extend(1);
4275                                  l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4276 
4277                                  -- raising an exception to skip processing for the dulpicate record
4278                                  RAISE Fp_Webadi_Skip_Dup_Rec_Exc;
4279                            END IF;
4280                       ELSE
4281                            -- populating the error codes to call process_errors at the end
4282                            IF l_debug_mode = 'Y' THEN
4283                               pa_debug.g_err_stage := 'Duplicate record found';
4284                               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4285                            END IF;
4286 
4287                            l_err_val_code_tbl.extend(1);
4288                            l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_DUPL_REC_PASSED';
4289                            l_err_task_id_tbl.extend(1);
4290                            l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4291                            l_err_rlm_id_tbl.extend(1);
4292                            l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4293                            l_err_txn_curr_tbl.extend(1);
4294                            l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4295 
4296                            -- raising an exception to skip processing for the dulpicate record
4297                            RAISE Fp_Webadi_Skip_Dup_Rec_Exc;
4298                       END IF;
4299                END IF;
4300 
4301                --log1('----- STAGE 19.1-------');
4302                --Throw an error if planning start/end dates are not entered for a planning transaction at all.
4303                IF l_inf_tbl_data_next_rec.task_id IS NULL OR
4304                   l_inf_tbl_data_curr_rec.task_id <> l_inf_tbl_data_next_rec.task_id OR
4305                   l_inf_tbl_data_curr_rec.resource_list_member_id <> l_inf_tbl_data_next_rec.resource_list_member_id OR
4306                   Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') OR
4307 				  ((l_Cbs_Enabled = 'Y' and
4308 						l_inf_tbl_data_curr_rec.cbs_element_id <> l_inf_tbl_data_next_rec.cbs_element_id) OR l_Cbs_Enabled = 'N') -- cbs enhancement changes bug#16445106
4309 						OR
4310                   is_periodic_setup = 'Y' THEN
4311                      IF is_periodic_setup = 'Y' THEN
4312                         -- Checking if the spread curve is of fixed date type
4313                         IF (l_inf_tbl_data_curr_rec.spread_curve_name IS NOT NULL AND
4314                             l_inf_tbl_data_curr_rec.spread_curve_name = l_fixed_spread_curve_name) OR
4315                             l_fixed_spread_curve_id = l_spread_curve_id THEN
4316                                     -- spread curve specified is of fixed date type
4317                                     IF l_not_null_period_cnt > 1 THEN
4318                                           -- there are valid amounts entered in more than 1 period
4319                                           l_err_val_code_tbl.extend(1);
4320                                           l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
4321                                           l_err_task_id_tbl.extend(1);
4322                                           l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4323                                           l_err_rlm_id_tbl.extend(1);
4324                                           l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4325                                           l_err_txn_curr_tbl.extend(1);
4326                                           l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4327                                           l_err_amt_type_tbl.extend(1);
4328                                           l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4329                                        RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
4330                                     ELSIF l_not_null_period_cnt = 1 THEN
4331                                           IF l_fix_sc_amt_pd_curr_index IS NULL THEN
4332                                                 -- finding out the period index for which amount is present
4333 
4334                                                 IF is_forecast_version = 'Y' THEN
4335                                                       IF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
4336                                                          l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num AND
4337                                                          l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) THEN
4338                                                             l_fix_sc_amt_pd_curr_index := 1;
4339                                                       ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
4340                                                             l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num AND
4341                                                             l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) THEN
4342                                                                 l_fix_sc_amt_pd_curr_index := 2;
4343                                                       ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
4344                                                             l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num AND
4345                                                             l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) THEN
4346                                                                 l_fix_sc_amt_pd_curr_index := 3;
4347                                                       ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
4348                                                             l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num AND
4349                                                             l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) THEN
4350                                                                 l_fix_sc_amt_pd_curr_index := 4;
4351                                                       ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
4352                                                             l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num AND
4353                                                             l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) THEN
4354                                                                 l_fix_sc_amt_pd_curr_index := 5;
4355                                                       ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
4356                                                             l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num AND
4357                                                             l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) THEN
4358                                                                 l_fix_sc_amt_pd_curr_index := 6;
4359                                                       ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
4360                                                             l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num AND
4361                                                             l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) THEN
4362                                                                 l_fix_sc_amt_pd_curr_index := 7;
4363                                                       ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
4364                                                             l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num AND
4365                                                             l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) THEN
4366                                                                 l_fix_sc_amt_pd_curr_index := 8;
4367                                                       ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
4368                                                             l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num AND
4369                                                             l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) THEN
4370                                                                 l_fix_sc_amt_pd_curr_index := 9;
4371                                                       ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
4372                                                             l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num AND
4373                                                             l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) THEN
4374                                                                 l_fix_sc_amt_pd_curr_index := 10;
4375                                                       ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
4376                                                             l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num AND
4377                                                             l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) THEN
4378                                                                 l_fix_sc_amt_pd_curr_index := 11;
4379                                                       ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
4380                                                             l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num AND
4381                                                             l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) THEN
4382                                                                 l_fix_sc_amt_pd_curr_index := 12;
4383                                                       ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
4384                                                             l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num AND
4385                                                             l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) THEN
4386                                                                 l_fix_sc_amt_pd_curr_index := 13;
4387                                                       ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
4388                                                             l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num AND
4389                                                             l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) THEN
4390                                                                 l_fix_sc_amt_pd_curr_index := 14;
4391                                                       ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
4392                                                             l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num AND
4393                                                             l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) THEN
4394                                                                 l_fix_sc_amt_pd_curr_index := 15;
4395                                                       ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
4396                                                             l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num AND
4397                                                             l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) THEN
4398                                                                 l_fix_sc_amt_pd_curr_index := 16;
4399                                                       ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
4400                                                             l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num AND
4401                                                             l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) THEN
4402                                                                 l_fix_sc_amt_pd_curr_index := 17;
4403                                                       ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
4404                                                             l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num AND
4405                                                             l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) THEN
4406                                                                 l_fix_sc_amt_pd_curr_index := 18;
4407                                                       ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
4408                                                             l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num AND
4409                                                             l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) THEN
4410                                                                 l_fix_sc_amt_pd_curr_index := 19;
4411                                                       ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
4412                                                             l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num AND
4413                                                             l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) THEN
4414                                                                 l_fix_sc_amt_pd_curr_index := 20;
4415                                                       ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
4416                                                             l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num AND
4417                                                             l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) THEN
4418                                                                 l_fix_sc_amt_pd_curr_index := 21;
4419                                                       ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
4420                                                             l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num AND
4421                                                             l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) THEN
4422                                                                 l_fix_sc_amt_pd_curr_index := 22;
4423                                                       ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
4424                                                             l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num AND
4425                                                             l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) THEN
4426                                                                 l_fix_sc_amt_pd_curr_index := 23;
4427                                                       ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
4428                                                             l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num AND
4429                                                             l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(24) - 1)) THEN
4430                                                                 l_fix_sc_amt_pd_curr_index := 24;
4431                                                       ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
4432                                                             l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num AND
4433                                                             l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) THEN
4434                                                                 l_fix_sc_amt_pd_curr_index := 25;
4435                                                       ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
4436                                                             l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num AND
4437                                                             l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) THEN
4438                                                                 l_fix_sc_amt_pd_curr_index := 26;
4439                                                       ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
4440                                                             l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num AND
4441                                                             l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) THEN
4442                                                                 l_fix_sc_amt_pd_curr_index := 27;
4443                                                       ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
4444                                                             l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num AND
4445                                                             l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) THEN
4446                                                                 l_fix_sc_amt_pd_curr_index := 28;
4447                                                       ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
4448                                                             l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num AND
4449                                                             l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) THEN
4450                                                                 l_fix_sc_amt_pd_curr_index := 29;
4451                                                       ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
4452                                                             l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num AND
4453                                                             l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) THEN
4454                                                                 l_fix_sc_amt_pd_curr_index := 30;
4455                                                       ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
4456                                                             l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num AND
4457                                                             l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 1)) THEN
4458                                                                 l_fix_sc_amt_pd_curr_index := 31;
4459                                                       ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
4460                                                             l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num AND
4461                                                             l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) THEN
4462                                                                 l_fix_sc_amt_pd_curr_index := 32;
4463                                                       ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
4464                                                             l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num AND
4465                                                             l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) THEN
4466                                                                 l_fix_sc_amt_pd_curr_index := 33;
4467                                                       ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
4468                                                             l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num AND
4469                                                             l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) THEN
4470                                                                 l_fix_sc_amt_pd_curr_index := 34;
4471                                                       ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
4472                                                             l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num AND
4473                                                             l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) THEN
4474                                                                 l_fix_sc_amt_pd_curr_index := 35;
4475                                                       ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
4476                                                             l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num AND
4477                                                             l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) THEN
4478                                                                 l_fix_sc_amt_pd_curr_index := 36;
4479                                                       ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
4480                                                             l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num AND
4481                                                             l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) THEN
4482                                                                 l_fix_sc_amt_pd_curr_index := 37;
4483                                                       ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
4484                                                             l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num AND
4485                                                             l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) THEN
4486                                                                 l_fix_sc_amt_pd_curr_index := 38;
4487                                                       ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
4488                                                             l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num AND
4489                                                             l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) THEN
4490                                                                 l_fix_sc_amt_pd_curr_index := 39;
4491                                                       ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
4492                                                             l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num AND
4493                                                             l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) THEN
4494                                                                 l_fix_sc_amt_pd_curr_index := 40;
4495                                                       ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
4496                                                             l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num AND
4497                                                             l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) THEN
4498                                                                 l_fix_sc_amt_pd_curr_index := 41;
4499                                                       ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
4500                                                             l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num AND
4501                                                             l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) THEN
4502                                                                 l_fix_sc_amt_pd_curr_index := 42;
4503                                                       ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
4504                                                             l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num AND
4505                                                             l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) THEN
4506                                                                 l_fix_sc_amt_pd_curr_index := 43;
4507                                                       ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
4508                                                             l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num AND
4509                                                             l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) THEN
4510                                                                 l_fix_sc_amt_pd_curr_index := 44;
4511                                                       ELSIF l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
4512                                                             l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num AND
4513                                                             l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) THEN
4514                                                                 l_fix_sc_amt_pd_curr_index := 45;
4515                                                       ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
4516                                                             l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num AND
4517                                                             l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) THEN
4518                                                                 l_fix_sc_amt_pd_curr_index := 46;
4519                                                       ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
4520                                                             l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num AND
4521                                                             l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) THEN
4522                                                                 l_fix_sc_amt_pd_curr_index := 47;
4523                                                       ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
4524                                                             l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num AND
4525                                                             l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) THEN
4526                                                                 l_fix_sc_amt_pd_curr_index := 48;
4527                                                       ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
4528                                                             l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num AND
4529                                                             l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) THEN
4530                                                                 l_fix_sc_amt_pd_curr_index := 49;
4531                                                       ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
4532                                                             l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num AND
4533                                                             l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) THEN
4534                                                                 l_fix_sc_amt_pd_curr_index := 50;
4535                                                       ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
4536                                                             l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num AND
4537                                                             l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) THEN
4538                                                                 l_fix_sc_amt_pd_curr_index := 51;
4539                                                       ELSIF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
4540                                                             l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num AND
4541                                                             l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) THEN
4542                                                                 l_fix_sc_amt_pd_curr_index := 52;
4543                                                       END IF;
4544                                                 ELSE
4545                                                       -- budget version
4546                                                       IF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
4547                                                          l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
4548                                                             l_fix_sc_amt_pd_curr_index := 1;
4549                                                       ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
4550                                                          l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
4551                                                             l_fix_sc_amt_pd_curr_index := 2;
4552                                                       ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
4553                                                          l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
4554                                                             l_fix_sc_amt_pd_curr_index := 3;
4555                                                       ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
4556                                                          l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
4557                                                             l_fix_sc_amt_pd_curr_index := 4;
4558                                                       ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
4559                                                          l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
4560                                                             l_fix_sc_amt_pd_curr_index := 5;
4561                                                       ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
4562                                                          l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
4563                                                             l_fix_sc_amt_pd_curr_index := 6;
4564                                                       ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
4565                                                          l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
4566                                                             l_fix_sc_amt_pd_curr_index := 7;
4567                                                       ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
4568                                                          l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
4569                                                             l_fix_sc_amt_pd_curr_index := 8;
4570                                                       ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
4571                                                          l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
4572                                                             l_fix_sc_amt_pd_curr_index := 9;
4573                                                       ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
4574                                                          l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
4575                                                             l_fix_sc_amt_pd_curr_index := 10;
4576                                                       ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
4577                                                          l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
4578                                                             l_fix_sc_amt_pd_curr_index := 11;
4579                                                       ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
4580                                                          l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
4581                                                             l_fix_sc_amt_pd_curr_index := 12;
4582                                                       ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
4583                                                          l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
4584                                                             l_fix_sc_amt_pd_curr_index := 13;
4585                                                       ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
4586                                                          l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
4587                                                             l_fix_sc_amt_pd_curr_index := 14;
4588                                                       ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
4589                                                          l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
4590                                                             l_fix_sc_amt_pd_curr_index := 15;
4591                                                       ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
4592                                                          l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
4593                                                             l_fix_sc_amt_pd_curr_index := 16;
4594                                                       ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
4595                                                          l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
4596                                                             l_fix_sc_amt_pd_curr_index := 17;
4597                                                       ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
4598                                                          l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
4599                                                             l_fix_sc_amt_pd_curr_index := 18;
4600                                                       ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
4601                                                          l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
4602                                                             l_fix_sc_amt_pd_curr_index := 19;
4603                                                       ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
4604                                                          l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
4605                                                             l_fix_sc_amt_pd_curr_index := 20;
4606                                                       ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
4607                                                          l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
4608                                                             l_fix_sc_amt_pd_curr_index := 21;
4609                                                       ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
4610                                                          l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
4611                                                             l_fix_sc_amt_pd_curr_index := 22;
4612                                                       ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
4613                                                          l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
4614                                                             l_fix_sc_amt_pd_curr_index := 23;
4615                                                       ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
4616                                                          l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
4617                                                             l_fix_sc_amt_pd_curr_index := 24;
4618                                                       ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
4619                                                          l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
4620                                                             l_fix_sc_amt_pd_curr_index := 25;
4621                                                       ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
4622                                                          l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
4623                                                             l_fix_sc_amt_pd_curr_index := 26;
4624                                                       ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
4625                                                          l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
4626                                                             l_fix_sc_amt_pd_curr_index := 27;
4627                                                       ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
4628                                                          l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
4629                                                             l_fix_sc_amt_pd_curr_index := 28;
4630                                                       ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
4631                                                          l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
4632                                                             l_fix_sc_amt_pd_curr_index := 29;
4633                                                       ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
4634                                                          l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
4635                                                             l_fix_sc_amt_pd_curr_index := 30;
4636                                                       ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
4637                                                          l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
4638                                                             l_fix_sc_amt_pd_curr_index := 31;
4639                                                       ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
4640                                                          l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
4641                                                             l_fix_sc_amt_pd_curr_index := 32;
4642                                                       ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
4643                                                          l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
4644                                                             l_fix_sc_amt_pd_curr_index := 33;
4645                                                       ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
4646                                                          l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
4647                                                             l_fix_sc_amt_pd_curr_index := 34;
4648                                                       ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
4649                                                          l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
4650                                                             l_fix_sc_amt_pd_curr_index := 35;
4651                                                       ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
4652                                                          l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
4653                                                             l_fix_sc_amt_pd_curr_index := 36;
4654                                                       ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
4655                                                          l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
4656                                                             l_fix_sc_amt_pd_curr_index := 37;
4657                                                       ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
4658                                                          l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
4659                                                             l_fix_sc_amt_pd_curr_index := 38;
4660                                                       ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
4661                                                          l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
4662                                                             l_fix_sc_amt_pd_curr_index := 39;
4663                                                       ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
4664                                                          l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
4665                                                             l_fix_sc_amt_pd_curr_index := 40;
4666                                                       ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
4667                                                          l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
4668                                                             l_fix_sc_amt_pd_curr_index := 41;
4669                                                       ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
4670                                                          l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
4671                                                             l_fix_sc_amt_pd_curr_index := 42;
4672                                                       ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
4673                                                          l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
4674                                                             l_fix_sc_amt_pd_curr_index := 43;
4675                                                       ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
4676                                                          l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
4677                                                             l_fix_sc_amt_pd_curr_index := 44;
4678                                                       ELSIF l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
4679                                                          l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
4680                                                             l_fix_sc_amt_pd_curr_index := 45;
4681                                                       ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
4682                                                          l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
4683                                                             l_fix_sc_amt_pd_curr_index := 46;
4684                                                       ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
4685                                                          l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
4686                                                             l_fix_sc_amt_pd_curr_index := 47;
4687                                                       ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
4688                                                          l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
4689                                                             l_fix_sc_amt_pd_curr_index := 48;
4690                                                       ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
4691                                                          l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
4692                                                             l_fix_sc_amt_pd_curr_index := 49;
4693                                                       ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
4694                                                          l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
4695                                                             l_fix_sc_amt_pd_curr_index := 50;
4696                                                       ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
4697                                                          l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
4698                                                             l_fix_sc_amt_pd_curr_index := 51;
4699                                                       ELSIF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
4700                                                          l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
4701                                                             l_fix_sc_amt_pd_curr_index := 52;
4702                                                       END IF;
4703                                                 END IF;
4704                                           END IF; -- cur index null
4705 
4706                                           --log1('C l_cached_ra_index '||l_cached_ra_index);
4707                                           --log1('C l_fix_sc_amt_pd_curr_index '||l_fix_sc_amt_pd_curr_index);
4708                                           --log1('C l_sp_fix_prd_st_dt '||l_sp_fix_prd_st_dt);
4709                                           --log1('C l_sp_fix_prd_en_dt '||l_sp_fix_prd_en_dt);
4710                                           --log1('C l_sp_fixed_date '||l_sp_fixed_date);
4711                                           --log1('C amount type '||l_inf_tbl_data_curr_rec.amount_type_code);
4712                                           --log1('C txn curr '||l_inf_tbl_data_curr_rec.txn_currency_code);
4713 
4714                                           -- checking for existing RAs, the sp_fixed_date lies in the correct
4715                                           -- period where amounts have been entered
4716                                           IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
4717                                              l_cached_ra_id_tbl(l_cached_ra_index) <> -1 AND
4718                                              l_fix_sc_amt_pd_curr_index IS NOT NULL THEN
4719                                                  l_sp_fix_prd_st_dt := p_prd_start_date_tbl(l_fix_sc_amt_pd_curr_index);
4720                                                  l_sp_fix_prd_en_dt := p_prd_end_date_tbl(l_fix_sc_amt_pd_curr_index);
4721 
4722                                                  IF NOT (l_sp_fixed_date >= l_sp_fix_prd_st_dt AND
4723                                                          l_sp_fix_prd_st_dt <= l_sp_fix_prd_en_dt) THEN
4724                                                          l_err_val_code_tbl.extend(1);
4725                                                          l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
4726                                                          l_err_task_id_tbl.extend(1);
4727                                                          l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4728                                                          l_err_rlm_id_tbl.extend(1);
4729                                                          l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4730                                                          l_err_txn_curr_tbl.extend(1);
4731                                                          l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4732                                                          l_err_amt_type_tbl.extend(1);
4733                                                          l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4734 
4735                                                          RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
4736                                                  END IF;
4737                                           END IF;
4738                                     END IF; -- period not null
4739 
4740                                     --If the next record too belongs to the same RA as that of the current record
4741                                     --Find out the period for which amounts are entered in that record
4742                                     IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
4743                                        l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
4744                                        l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id AND
4745 									   (l_Cbs_Enabled = 'N' OR
4746 						(l_Cbs_Enabled = 'Y' AND l_inf_tbl_data_curr_rec.cbs_element_id = l_inf_tbl_data_next_rec.cbs_element_id))-- cbs enhancement changes bug#16445106
4747 									   THEN
4748                                               -- checkin for fixed date spread curve
4749                                               -- if the same resource appears in the next record too
4750                                               -- finding out the period index for which amount is present
4751                                               l_fix_sc_amt_pd_next_index := NULL;
4752                                               IF is_forecast_version = 'Y' THEN
4753                                                      IF l_inf_tbl_data_next_rec.prd1 IS NOT NULL AND
4754                                                         l_inf_tbl_data_next_rec.prd1 <> l_fnd_miss_num AND
4755                                                         l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) THEN
4756                                                            l_fix_sc_amt_pd_next_index := 1;
4757                                                      ELSIF l_inf_tbl_data_next_rec.prd2 IS NOT NULL AND
4758                                                            l_inf_tbl_data_next_rec.prd2 <> l_fnd_miss_num AND
4759                                                            l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) THEN
4760                                                                 l_fix_sc_amt_pd_next_index := 2;
4761                                                      ELSIF l_inf_tbl_data_next_rec.prd3 IS NOT NULL AND
4762                                                            l_inf_tbl_data_next_rec.prd3 <> l_fnd_miss_num AND
4763                                                            l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) THEN
4764                                                                 l_fix_sc_amt_pd_next_index := 3;
4765                                                      ELSIF l_inf_tbl_data_next_rec.prd4 IS NOT NULL AND
4766                                                            l_inf_tbl_data_next_rec.prd4 <> l_fnd_miss_num AND
4767                                                            l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) THEN
4768                                                                 l_fix_sc_amt_pd_next_index := 4;
4769                                                      ELSIF l_inf_tbl_data_next_rec.prd5 IS NOT NULL AND
4770                                                            l_inf_tbl_data_next_rec.prd5 <> l_fnd_miss_num AND
4771                                                            l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) THEN
4772                                                                 l_fix_sc_amt_pd_next_index := 5;
4773                                                      ELSIF l_inf_tbl_data_next_rec.prd6 IS NOT NULL AND
4774                                                            l_inf_tbl_data_next_rec.prd6 <> l_fnd_miss_num AND
4775                                                            l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) THEN
4776                                                                 l_fix_sc_amt_pd_next_index := 6;
4777                                                      ELSIF l_inf_tbl_data_next_rec.prd7 IS NOT NULL AND
4778                                                            l_inf_tbl_data_next_rec.prd7 <> l_fnd_miss_num AND
4779                                                            l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) THEN
4780                                                                 l_fix_sc_amt_pd_next_index := 7;
4781                                                      ELSIF l_inf_tbl_data_next_rec.prd8 IS NOT NULL AND
4782                                                            l_inf_tbl_data_next_rec.prd8 <> l_fnd_miss_num AND
4783                                                            l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) THEN
4784                                                                 l_fix_sc_amt_pd_next_index := 8;
4785                                                      ELSIF l_inf_tbl_data_next_rec.prd9 IS NOT NULL AND
4786                                                            l_inf_tbl_data_next_rec.prd9 <> l_fnd_miss_num AND
4787                                                            l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) THEN
4788                                                                 l_fix_sc_amt_pd_next_index := 9;
4789                                                      ELSIF l_inf_tbl_data_next_rec.prd10 IS NOT NULL AND
4790                                                            l_inf_tbl_data_next_rec.prd10 <> l_fnd_miss_num AND
4791                                                            l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) THEN
4792                                                                 l_fix_sc_amt_pd_next_index := 10;
4793                                                      ELSIF l_inf_tbl_data_next_rec.prd11 IS NOT NULL AND
4794                                                            l_inf_tbl_data_next_rec.prd11 <> l_fnd_miss_num AND
4795                                                            l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) THEN
4796                                                                 l_fix_sc_amt_pd_next_index := 11;
4797                                                      ELSIF l_inf_tbl_data_next_rec.prd12 IS NOT NULL AND
4798                                                            l_inf_tbl_data_next_rec.prd12 <> l_fnd_miss_num AND
4799                                                            l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) THEN
4800                                                                 l_fix_sc_amt_pd_next_index := 12;
4801                                                      ELSIF l_inf_tbl_data_next_rec.prd13 IS NOT NULL AND
4802                                                            l_inf_tbl_data_next_rec.prd13 <> l_fnd_miss_num AND
4803                                                            l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) THEN
4804                                                                 l_fix_sc_amt_pd_next_index := 13;
4805                                                      ELSIF l_inf_tbl_data_next_rec.prd14 IS NOT NULL AND
4806                                                            l_inf_tbl_data_next_rec.prd14 <> l_fnd_miss_num AND
4807                                                            l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) THEN
4808                                                                 l_fix_sc_amt_pd_next_index := 14;
4809                                                      ELSIF l_inf_tbl_data_next_rec.prd15 IS NOT NULL AND
4810                                                            l_inf_tbl_data_next_rec.prd15 <> l_fnd_miss_num AND
4811                                                            l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) THEN
4812                                                                 l_fix_sc_amt_pd_next_index := 15;
4813                                                      ELSIF l_inf_tbl_data_next_rec.prd16 IS NOT NULL AND
4814                                                            l_inf_tbl_data_next_rec.prd16 <> l_fnd_miss_num AND
4815                                                            l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) THEN
4816                                                                 l_fix_sc_amt_pd_next_index := 16;
4817                                                      ELSIF l_inf_tbl_data_next_rec.prd17 IS NOT NULL AND
4818                                                            l_inf_tbl_data_next_rec.prd17 <> l_fnd_miss_num AND
4819                                                            l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) THEN
4820                                                                 l_fix_sc_amt_pd_next_index := 17;
4821                                                      ELSIF l_inf_tbl_data_next_rec.prd18 IS NOT NULL AND
4822                                                            l_inf_tbl_data_next_rec.prd18 <> l_fnd_miss_num AND
4823                                                            l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) THEN
4824                                                                 l_fix_sc_amt_pd_next_index := 18;
4825                                                      ELSIF l_inf_tbl_data_next_rec.prd19 IS NOT NULL AND
4826                                                            l_inf_tbl_data_next_rec.prd19 <> l_fnd_miss_num AND
4827                                                            l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) THEN
4828                                                                 l_fix_sc_amt_pd_next_index := 19;
4829                                                      ELSIF l_inf_tbl_data_next_rec.prd20 IS NOT NULL AND
4830                                                            l_inf_tbl_data_next_rec.prd20 <> l_fnd_miss_num AND
4831                                                            l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) THEN
4832                                                                 l_fix_sc_amt_pd_next_index := 20;
4833                                                      ELSIF l_inf_tbl_data_next_rec.prd21 IS NOT NULL AND
4834                                                            l_inf_tbl_data_next_rec.prd21 <> l_fnd_miss_num AND
4835                                                            l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) THEN
4836                                                                 l_fix_sc_amt_pd_next_index := 21;
4837                                                      ELSIF l_inf_tbl_data_next_rec.prd22 IS NOT NULL AND
4838                                                            l_inf_tbl_data_next_rec.prd22 <> l_fnd_miss_num AND
4839                                                            l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) THEN
4840                                                                 l_fix_sc_amt_pd_next_index := 22;
4841                                                      ELSIF l_inf_tbl_data_next_rec.prd23 IS NOT NULL AND
4842                                                            l_inf_tbl_data_next_rec.prd23 <> l_fnd_miss_num AND
4843                                                            l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) THEN
4844                                                                 l_fix_sc_amt_pd_next_index := 23;
4845                                                      ELSIF l_inf_tbl_data_next_rec.prd24 IS NOT NULL AND
4846                                                            l_inf_tbl_data_next_rec.prd24 <> l_fnd_miss_num AND
4847                                                            l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) THEN
4848                                                                 l_fix_sc_amt_pd_next_index := 24;
4849                                                      ELSIF l_inf_tbl_data_next_rec.prd25 IS NOT NULL AND
4850                                                            l_inf_tbl_data_next_rec.prd25 <> l_fnd_miss_num AND
4851                                                            l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) THEN
4852                                                                 l_fix_sc_amt_pd_next_index := 25;
4853                                                      ELSIF l_inf_tbl_data_next_rec.prd26 IS NOT NULL AND
4854                                                            l_inf_tbl_data_next_rec.prd26 <> l_fnd_miss_num AND
4855                                                            l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) THEN
4856                                                                 l_fix_sc_amt_pd_next_index := 26;
4857                                                      ELSIF l_inf_tbl_data_next_rec.prd27 IS NOT NULL AND
4858                                                            l_inf_tbl_data_next_rec.prd27 <> l_fnd_miss_num AND
4859                                                            l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) THEN
4860                                                                 l_fix_sc_amt_pd_next_index := 27;
4861                                                      ELSIF l_inf_tbl_data_next_rec.prd28 IS NOT NULL AND
4862                                                            l_inf_tbl_data_next_rec.prd28 <> l_fnd_miss_num AND
4863                                                            l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) THEN
4864                                                                 l_fix_sc_amt_pd_next_index := 28;
4865                                                      ELSIF l_inf_tbl_data_next_rec.prd29 IS NOT NULL AND
4866                                                            l_inf_tbl_data_next_rec.prd29 <> l_fnd_miss_num AND
4867                                                            l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) THEN
4868                                                                 l_fix_sc_amt_pd_next_index := 29;
4869                                                      ELSIF l_inf_tbl_data_next_rec.prd30 IS NOT NULL AND
4870                                                            l_inf_tbl_data_next_rec.prd30 <> l_fnd_miss_num AND
4871                                                            l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) THEN
4872                                                                 l_fix_sc_amt_pd_next_index := 30;
4873                                                      ELSIF l_inf_tbl_data_next_rec.prd31 IS NOT NULL AND
4874                                                            l_inf_tbl_data_next_rec.prd31 <> l_fnd_miss_num AND
4875                                                            l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 1)) THEN
4876                                                                 l_fix_sc_amt_pd_next_index := 31;
4877                                                      ELSIF l_inf_tbl_data_next_rec.prd32 IS NOT NULL AND
4878                                                            l_inf_tbl_data_next_rec.prd32 <> l_fnd_miss_num AND
4879                                                            l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) THEN
4880                                                                 l_fix_sc_amt_pd_next_index := 32;
4881                                                      ELSIF l_inf_tbl_data_next_rec.prd33 IS NOT NULL AND
4882                                                            l_inf_tbl_data_next_rec.prd33 <> l_fnd_miss_num AND
4883                                                            l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) THEN
4884                                                                 l_fix_sc_amt_pd_next_index := 33;
4885                                                      ELSIF l_inf_tbl_data_next_rec.prd34 IS NOT NULL AND
4886                                                            l_inf_tbl_data_next_rec.prd34 <> l_fnd_miss_num AND
4887                                                            l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) THEN
4888                                                                 l_fix_sc_amt_pd_next_index := 34;
4889                                                      ELSIF l_inf_tbl_data_next_rec.prd35 IS NOT NULL AND
4890                                                            l_inf_tbl_data_next_rec.prd35 <> l_fnd_miss_num AND
4891                                                            l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) THEN
4892                                                                 l_fix_sc_amt_pd_next_index := 35;
4893                                                      ELSIF l_inf_tbl_data_next_rec.prd36 IS NOT NULL AND
4894                                                            l_inf_tbl_data_next_rec.prd36 <> l_fnd_miss_num AND
4895                                                            l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) THEN
4896                                                                 l_fix_sc_amt_pd_next_index := 36;
4897                                                      ELSIF l_inf_tbl_data_next_rec.prd37 IS NOT NULL AND
4898                                                            l_inf_tbl_data_next_rec.prd37 <> l_fnd_miss_num AND
4899                                                            l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) THEN
4900                                                                 l_fix_sc_amt_pd_next_index := 37;
4901                                                      ELSIF l_inf_tbl_data_next_rec.prd38 IS NOT NULL AND
4902                                                            l_inf_tbl_data_next_rec.prd38 <> l_fnd_miss_num AND
4903                                                            l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) THEN
4904                                                                 l_fix_sc_amt_pd_next_index := 38;
4905                                                      ELSIF l_inf_tbl_data_next_rec.prd39 IS NOT NULL AND
4906                                                            l_inf_tbl_data_next_rec.prd39 <> l_fnd_miss_num AND
4907                                                            l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) THEN
4908                                                                 l_fix_sc_amt_pd_next_index := 39;
4909                                                      ELSIF l_inf_tbl_data_next_rec.prd40 IS NOT NULL AND
4910                                                            l_inf_tbl_data_next_rec.prd40 <> l_fnd_miss_num AND
4911                                                            l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) THEN
4912                                                                 l_fix_sc_amt_pd_next_index := 40;
4913                                                      ELSIF l_inf_tbl_data_next_rec.prd41 IS NOT NULL AND
4914                                                            l_inf_tbl_data_next_rec.prd41 <> l_fnd_miss_num AND
4915                                                            l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) THEN
4916                                                                 l_fix_sc_amt_pd_next_index := 41;
4917                                                      ELSIF l_inf_tbl_data_next_rec.prd42 IS NOT NULL AND
4918                                                            l_inf_tbl_data_next_rec.prd42 <> l_fnd_miss_num AND
4919                                                            l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) THEN
4920                                                                 l_fix_sc_amt_pd_next_index := 42;
4921                                                      ELSIF l_inf_tbl_data_next_rec.prd43 IS NOT NULL AND
4922                                                            l_inf_tbl_data_next_rec.prd43 <> l_fnd_miss_num AND
4923                                                            l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) THEN
4924                                                                 l_fix_sc_amt_pd_next_index := 43;
4925                                                      ELSIF l_inf_tbl_data_next_rec.prd44 IS NOT NULL AND
4926                                                            l_inf_tbl_data_next_rec.prd44 <> l_fnd_miss_num AND
4927                                                            l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) THEN
4928                                                                 l_fix_sc_amt_pd_next_index := 44;
4929                                                      ELSIF l_inf_tbl_data_next_rec.prd45 IS NOT NULL AND
4930                                                            l_inf_tbl_data_next_rec.prd45 <> l_fnd_miss_num AND
4931                                                            l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) THEN
4932                                                                 l_fix_sc_amt_pd_next_index := 45;
4933                                                      ELSIF l_inf_tbl_data_next_rec.prd46 IS NOT NULL AND
4934                                                            l_inf_tbl_data_next_rec.prd46 <> l_fnd_miss_num AND
4935                                                            l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) THEN
4936                                                                 l_fix_sc_amt_pd_next_index := 46;
4937                                                      ELSIF l_inf_tbl_data_next_rec.prd47 IS NOT NULL AND
4938                                                            l_inf_tbl_data_next_rec.prd47 <> l_fnd_miss_num AND
4939                                                            l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) THEN
4940                                                                 l_fix_sc_amt_pd_next_index := 47;
4941                                                      ELSIF l_inf_tbl_data_next_rec.prd48 IS NOT NULL AND
4942                                                            l_inf_tbl_data_next_rec.prd48 <> l_fnd_miss_num AND
4943                                                            l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) THEN
4944                                                                 l_fix_sc_amt_pd_next_index := 48;
4945                                                      ELSIF l_inf_tbl_data_next_rec.prd49 IS NOT NULL AND
4946                                                            l_inf_tbl_data_next_rec.prd49 <> l_fnd_miss_num AND
4947                                                            l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) THEN
4948                                                                 l_fix_sc_amt_pd_next_index := 49;
4949                                                      ELSIF l_inf_tbl_data_next_rec.prd50 IS NOT NULL AND
4950                                                            l_inf_tbl_data_next_rec.prd50 <> l_fnd_miss_num AND
4951                                                            l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) THEN
4952                                                                 l_fix_sc_amt_pd_next_index := 50;
4953                                                      ELSIF l_inf_tbl_data_next_rec.prd51 IS NOT NULL AND
4954                                                            l_inf_tbl_data_next_rec.prd51 <> l_fnd_miss_num AND
4955                                                            l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) THEN
4956                                                                 l_fix_sc_amt_pd_next_index := 51;
4957                                                      ELSIF l_inf_tbl_data_next_rec.prd52 IS NOT NULL AND
4958                                                            l_inf_tbl_data_next_rec.prd52 <> l_fnd_miss_num AND
4959                                                            l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) THEN
4960                                                                 l_fix_sc_amt_pd_next_index := 52;
4961                                                      END IF; -- period not null
4962                                               ELSE
4963                                                      -- budget versions
4964                                                      IF l_inf_tbl_data_next_rec.prd1 IS NOT NULL AND
4965                                                         l_inf_tbl_data_next_rec.prd1 <> l_fnd_miss_num THEN
4966                                                            l_fix_sc_amt_pd_next_index := 1;
4967                                                      ELSIF l_inf_tbl_data_next_rec.prd2 IS NOT NULL AND
4968                                                         l_inf_tbl_data_next_rec.prd2 <> l_fnd_miss_num THEN
4969                                                            l_fix_sc_amt_pd_next_index := 2;
4970                                                      ELSIF l_inf_tbl_data_next_rec.prd3 IS NOT NULL AND
4971                                                         l_inf_tbl_data_next_rec.prd3 <> l_fnd_miss_num THEN
4972                                                            l_fix_sc_amt_pd_next_index := 3;
4973                                                      ELSIF l_inf_tbl_data_next_rec.prd4 IS NOT NULL AND
4974                                                         l_inf_tbl_data_next_rec.prd4 <> l_fnd_miss_num THEN
4975                                                            l_fix_sc_amt_pd_next_index := 4;
4976                                                      ELSIF l_inf_tbl_data_next_rec.prd5 IS NOT NULL AND
4977                                                         l_inf_tbl_data_next_rec.prd5 <> l_fnd_miss_num THEN
4978                                                            l_fix_sc_amt_pd_next_index := 5;
4979                                                      ELSIF l_inf_tbl_data_next_rec.prd6 IS NOT NULL AND
4980                                                         l_inf_tbl_data_next_rec.prd6 <> l_fnd_miss_num THEN
4981                                                            l_fix_sc_amt_pd_next_index := 6;
4982                                                      ELSIF l_inf_tbl_data_next_rec.prd7 IS NOT NULL AND
4983                                                         l_inf_tbl_data_next_rec.prd7 <> l_fnd_miss_num THEN
4984                                                            l_fix_sc_amt_pd_next_index := 7;
4985                                                      ELSIF l_inf_tbl_data_next_rec.prd8 IS NOT NULL AND
4986                                                         l_inf_tbl_data_next_rec.prd8 <> l_fnd_miss_num THEN
4987                                                            l_fix_sc_amt_pd_next_index := 8;
4988                                                      ELSIF l_inf_tbl_data_next_rec.prd9 IS NOT NULL AND
4989                                                         l_inf_tbl_data_next_rec.prd9 <> l_fnd_miss_num THEN
4990                                                            l_fix_sc_amt_pd_next_index := 9;
4991                                                      ELSIF l_inf_tbl_data_next_rec.prd10 IS NOT NULL AND
4992                                                         l_inf_tbl_data_next_rec.prd10 <> l_fnd_miss_num THEN
4993                                                            l_fix_sc_amt_pd_next_index := 10;
4994                                                      ELSIF l_inf_tbl_data_next_rec.prd11 IS NOT NULL AND
4995                                                         l_inf_tbl_data_next_rec.prd11 <> l_fnd_miss_num THEN
4996                                                            l_fix_sc_amt_pd_next_index := 11;
4997                                                      ELSIF l_inf_tbl_data_next_rec.prd12 IS NOT NULL AND
4998                                                         l_inf_tbl_data_next_rec.prd12 <> l_fnd_miss_num THEN
4999                                                            l_fix_sc_amt_pd_next_index := 12;
5000                                                      ELSIF l_inf_tbl_data_next_rec.prd13 IS NOT NULL AND
5001                                                         l_inf_tbl_data_next_rec.prd13 <> l_fnd_miss_num THEN
5002                                                            l_fix_sc_amt_pd_next_index := 13;
5003                                                      ELSIF l_inf_tbl_data_next_rec.prd14 IS NOT NULL AND
5004                                                         l_inf_tbl_data_next_rec.prd14 <> l_fnd_miss_num THEN
5005                                                            l_fix_sc_amt_pd_next_index := 14;
5006                                                      ELSIF l_inf_tbl_data_next_rec.prd15 IS NOT NULL AND
5007                                                         l_inf_tbl_data_next_rec.prd15 <> l_fnd_miss_num THEN
5008                                                            l_fix_sc_amt_pd_next_index := 15;
5009                                                      ELSIF l_inf_tbl_data_next_rec.prd16 IS NOT NULL AND
5010                                                         l_inf_tbl_data_next_rec.prd16 <> l_fnd_miss_num THEN
5011                                                            l_fix_sc_amt_pd_next_index := 16;
5012                                                      ELSIF l_inf_tbl_data_next_rec.prd17 IS NOT NULL AND
5013                                                         l_inf_tbl_data_next_rec.prd17 <> l_fnd_miss_num THEN
5014                                                            l_fix_sc_amt_pd_next_index := 17;
5015                                                      ELSIF l_inf_tbl_data_next_rec.prd18 IS NOT NULL AND
5016                                                         l_inf_tbl_data_next_rec.prd18 <> l_fnd_miss_num THEN
5017                                                            l_fix_sc_amt_pd_next_index := 18;
5018                                                      ELSIF l_inf_tbl_data_next_rec.prd19 IS NOT NULL AND
5019                                                         l_inf_tbl_data_next_rec.prd19 <> l_fnd_miss_num THEN
5020                                                            l_fix_sc_amt_pd_next_index := 19;
5021                                                      ELSIF l_inf_tbl_data_next_rec.prd20 IS NOT NULL AND
5022                                                         l_inf_tbl_data_next_rec.prd20 <> l_fnd_miss_num THEN
5023                                                            l_fix_sc_amt_pd_next_index := 20;
5024                                                      ELSIF l_inf_tbl_data_next_rec.prd21 IS NOT NULL AND
5025                                                         l_inf_tbl_data_next_rec.prd21 <> l_fnd_miss_num THEN
5026                                                            l_fix_sc_amt_pd_next_index := 21;
5027                                                      ELSIF l_inf_tbl_data_next_rec.prd22 IS NOT NULL AND
5028                                                         l_inf_tbl_data_next_rec.prd22 <> l_fnd_miss_num THEN
5029                                                            l_fix_sc_amt_pd_next_index := 22;
5030                                                      ELSIF l_inf_tbl_data_next_rec.prd23 IS NOT NULL AND
5031                                                         l_inf_tbl_data_next_rec.prd23 <> l_fnd_miss_num THEN
5032                                                            l_fix_sc_amt_pd_next_index := 23;
5033                                                      ELSIF l_inf_tbl_data_next_rec.prd24 IS NOT NULL AND
5034                                                         l_inf_tbl_data_next_rec.prd24 <> l_fnd_miss_num THEN
5035                                                            l_fix_sc_amt_pd_next_index := 24;
5036                                                      ELSIF l_inf_tbl_data_next_rec.prd25 IS NOT NULL AND
5037                                                         l_inf_tbl_data_next_rec.prd25 <> l_fnd_miss_num THEN
5038                                                            l_fix_sc_amt_pd_next_index := 25;
5039                                                      ELSIF l_inf_tbl_data_next_rec.prd26 IS NOT NULL AND
5040                                                         l_inf_tbl_data_next_rec.prd26 <> l_fnd_miss_num THEN
5041                                                            l_fix_sc_amt_pd_next_index := 26;
5042                                                      ELSIF l_inf_tbl_data_next_rec.prd27 IS NOT NULL AND
5043                                                         l_inf_tbl_data_next_rec.prd27 <> l_fnd_miss_num THEN
5044                                                            l_fix_sc_amt_pd_next_index := 27;
5045                                                      ELSIF l_inf_tbl_data_next_rec.prd28 IS NOT NULL AND
5046                                                         l_inf_tbl_data_next_rec.prd28 <> l_fnd_miss_num THEN
5047                                                            l_fix_sc_amt_pd_next_index := 28;
5048                                                      ELSIF l_inf_tbl_data_next_rec.prd29 IS NOT NULL AND
5049                                                         l_inf_tbl_data_next_rec.prd29 <> l_fnd_miss_num THEN
5050                                                            l_fix_sc_amt_pd_next_index := 29;
5051                                                      ELSIF l_inf_tbl_data_next_rec.prd30 IS NOT NULL AND
5052                                                         l_inf_tbl_data_next_rec.prd30 <> l_fnd_miss_num THEN
5053                                                            l_fix_sc_amt_pd_next_index := 30;
5054                                                      ELSIF l_inf_tbl_data_next_rec.prd31 IS NOT NULL AND
5055                                                         l_inf_tbl_data_next_rec.prd31 <> l_fnd_miss_num THEN
5056                                                            l_fix_sc_amt_pd_next_index := 31;
5057                                                      ELSIF l_inf_tbl_data_next_rec.prd32 IS NOT NULL AND
5058                                                         l_inf_tbl_data_next_rec.prd32 <> l_fnd_miss_num THEN
5059                                                            l_fix_sc_amt_pd_next_index := 32;
5060                                                      ELSIF l_inf_tbl_data_next_rec.prd33 IS NOT NULL AND
5061                                                         l_inf_tbl_data_next_rec.prd33 <> l_fnd_miss_num THEN
5062                                                            l_fix_sc_amt_pd_next_index := 33;
5063                                                      ELSIF l_inf_tbl_data_next_rec.prd34 IS NOT NULL AND
5064                                                         l_inf_tbl_data_next_rec.prd34 <> l_fnd_miss_num THEN
5065                                                            l_fix_sc_amt_pd_next_index := 34;
5066                                                      ELSIF l_inf_tbl_data_next_rec.prd35 IS NOT NULL AND
5067                                                         l_inf_tbl_data_next_rec.prd35 <> l_fnd_miss_num THEN
5068                                                            l_fix_sc_amt_pd_next_index := 35;
5069                                                      ELSIF l_inf_tbl_data_next_rec.prd36 IS NOT NULL AND
5070                                                         l_inf_tbl_data_next_rec.prd36 <> l_fnd_miss_num THEN
5071                                                            l_fix_sc_amt_pd_next_index := 36;
5072                                                      ELSIF l_inf_tbl_data_next_rec.prd37 IS NOT NULL AND
5073                                                         l_inf_tbl_data_next_rec.prd37 <> l_fnd_miss_num THEN
5074                                                            l_fix_sc_amt_pd_next_index := 37;
5075                                                      ELSIF l_inf_tbl_data_next_rec.prd38 IS NOT NULL AND
5076                                                         l_inf_tbl_data_next_rec.prd38 <> l_fnd_miss_num THEN
5077                                                            l_fix_sc_amt_pd_next_index := 38;
5078                                                      ELSIF l_inf_tbl_data_next_rec.prd39 IS NOT NULL AND
5079                                                         l_inf_tbl_data_next_rec.prd39 <> l_fnd_miss_num THEN
5080                                                            l_fix_sc_amt_pd_next_index := 39;
5081                                                      ELSIF l_inf_tbl_data_next_rec.prd40 IS NOT NULL AND
5082                                                         l_inf_tbl_data_next_rec.prd40 <> l_fnd_miss_num THEN
5083                                                            l_fix_sc_amt_pd_next_index := 40;
5084                                                      ELSIF l_inf_tbl_data_next_rec.prd41 IS NOT NULL AND
5085                                                         l_inf_tbl_data_next_rec.prd41 <> l_fnd_miss_num THEN
5086                                                            l_fix_sc_amt_pd_next_index := 41;
5087                                                      ELSIF l_inf_tbl_data_next_rec.prd42 IS NOT NULL AND
5088                                                         l_inf_tbl_data_next_rec.prd42 <> l_fnd_miss_num THEN
5089                                                            l_fix_sc_amt_pd_next_index := 42;
5090                                                      ELSIF l_inf_tbl_data_next_rec.prd43 IS NOT NULL AND
5091                                                         l_inf_tbl_data_next_rec.prd43 <> l_fnd_miss_num THEN
5092                                                            l_fix_sc_amt_pd_next_index := 43;
5093                                                      ELSIF l_inf_tbl_data_next_rec.prd44 IS NOT NULL AND
5094                                                         l_inf_tbl_data_next_rec.prd44 <> l_fnd_miss_num THEN
5095                                                            l_fix_sc_amt_pd_next_index := 44;
5096                                                      ELSIF l_inf_tbl_data_next_rec.prd45 IS NOT NULL AND
5097                                                         l_inf_tbl_data_next_rec.prd45 <> l_fnd_miss_num THEN
5098                                                            l_fix_sc_amt_pd_next_index := 45;
5099                                                      ELSIF l_inf_tbl_data_next_rec.prd46 IS NOT NULL AND
5100                                                         l_inf_tbl_data_next_rec.prd46 <> l_fnd_miss_num THEN
5101                                                            l_fix_sc_amt_pd_next_index := 46;
5102                                                      ELSIF l_inf_tbl_data_next_rec.prd47 IS NOT NULL AND
5103                                                         l_inf_tbl_data_next_rec.prd47 <> l_fnd_miss_num THEN
5104                                                            l_fix_sc_amt_pd_next_index := 47;
5105                                                      ELSIF l_inf_tbl_data_next_rec.prd48 IS NOT NULL AND
5106                                                         l_inf_tbl_data_next_rec.prd48 <> l_fnd_miss_num THEN
5107                                                            l_fix_sc_amt_pd_next_index := 48;
5108                                                      ELSIF l_inf_tbl_data_next_rec.prd49 IS NOT NULL AND
5109                                                         l_inf_tbl_data_next_rec.prd49 <> l_fnd_miss_num THEN
5110                                                            l_fix_sc_amt_pd_next_index := 49;
5111                                                      ELSIF l_inf_tbl_data_next_rec.prd50 IS NOT NULL AND
5112                                                         l_inf_tbl_data_next_rec.prd50 <> l_fnd_miss_num THEN
5113                                                            l_fix_sc_amt_pd_next_index := 50;
5114                                                      ELSIF l_inf_tbl_data_next_rec.prd51 IS NOT NULL AND
5115                                                         l_inf_tbl_data_next_rec.prd51 <> l_fnd_miss_num THEN
5116                                                            l_fix_sc_amt_pd_next_index := 51;
5117                                                      ELSIF l_inf_tbl_data_next_rec.prd52 IS NOT NULL AND
5118                                                         l_inf_tbl_data_next_rec.prd52 <> l_fnd_miss_num THEN
5119                                                            l_fix_sc_amt_pd_next_index := 52;
5120                                                      END IF; -- period not null
5121                                               END IF;
5122                                               --log1('l_cached_ra_index is '||l_cached_ra_index);
5123                                               --log1('l_cached_ra_id_tbl(l_cached_ra_index) is '||l_cached_ra_id_tbl(l_cached_ra_index));
5124 
5125                                               --log1('l_fix_sc_amt_pd_next_index is '||l_fix_sc_amt_pd_next_index);
5126                                               --log1('l_fix_sc_amt_pd_curr_index is '||l_fix_sc_amt_pd_curr_index);
5127                                               -- checking for existing RAs, the sp_fixed_date lies in the correct
5128                                               -- period where amounts have been entered
5129                                               IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
5130                                                  l_cached_ra_id_tbl(l_cached_ra_index) <> -1 AND
5131                                                  l_fix_sc_amt_pd_next_index IS NOT NULL THEN
5132                                                      l_sp_fix_prd_st_dt := p_prd_start_date_tbl(l_fix_sc_amt_pd_next_index);
5133                                                      l_sp_fix_prd_en_dt := p_prd_end_date_tbl(l_fix_sc_amt_pd_next_index);
5134 
5135                                                      --log1('l_sp_fix_prd_st_dt is '||l_sp_fix_prd_st_dt);
5136                                                      --log1('l_sp_fix_prd_en_dt is '||l_sp_fix_prd_en_dt);
5137 
5138                                                      IF NOT (l_sp_fixed_date >= l_sp_fix_prd_st_dt AND
5139                                                              l_sp_fix_prd_st_dt <= l_sp_fix_prd_en_dt) THEN
5140                                                              l_err_val_code_tbl.extend(1);
5141                                                              l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
5142                                                              l_err_task_id_tbl.extend(1);
5143                                                              l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_next_rec.task_id;
5144                                                              l_err_rlm_id_tbl.extend(1);
5145                                                              l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_next_rec.resource_list_member_id;
5146                                                              l_err_txn_curr_tbl.extend(1);
5147                                                              l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_next_rec.txn_currency_code;
5148                                                              l_err_amt_type_tbl.extend(1);
5149                                                              l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_next_rec.amount_type_code;
5150 
5151                                                              RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5152                                                      END IF;
5153                                               END IF;
5154 
5155                                               IF l_fix_sc_amt_pd_curr_index <> l_fix_sc_amt_pd_next_index THEN
5156                                                     -- amount has been entred in a different period from the previous record
5157                                                     l_err_val_code_tbl.extend(1);
5158                                                     l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
5159                                                     l_err_task_id_tbl.extend(1);
5160                                                     l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_next_rec.task_id;
5161                                                     l_err_rlm_id_tbl.extend(1);
5162                                                     l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_next_rec.resource_list_member_id;
5163                                                     l_err_txn_curr_tbl.extend(1);
5164                                                     l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_next_rec.txn_currency_code;
5165                                                     l_err_amt_type_tbl.extend(1);
5166                                                     l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_next_rec.amount_type_code;
5167 
5168                                                     RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5169                                               END IF;
5170                                               -- assigning the index of not null period of the next record to the current one
5171                                               l_fix_sc_amt_pd_curr_index := NVL(l_fix_sc_amt_pd_next_index,l_fix_sc_amt_pd_curr_index);
5172 
5173                                     END IF;
5174 
5175                         END IF;
5176 
5177                         -- validation for UOM and other resource attributes, to check if they are same for all the rows,
5178                         -- if the RA is same as well checking for planning start date/end date
5179                         IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
5180                            l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
5181                            l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id AND
5182 						   (l_Cbs_Enabled = 'N' OR
5183 						(l_Cbs_Enabled = 'Y' AND l_inf_tbl_data_curr_rec.cbs_element_id = l_inf_tbl_data_next_rec.cbs_element_id))-- cbs enhancement changes bug#16445106
5184 						THEN
5185 
5186 
5187                                   -- checking for UOM
5188                                   IF l_inf_tbl_data_curr_rec.unit_of_measure <> l_inf_tbl_data_next_rec.unit_of_measure THEN
5189                                        l_err_val_code_tbl.extend(1);
5190                                        l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_UOM_MISS_MATCH_ERR';
5191                                        l_err_task_id_tbl.extend(1);
5192                                        l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5193                                        l_err_rlm_id_tbl.extend(1);
5194                                        l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5195                                        l_err_txn_curr_tbl.extend(1);
5196                                        l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5197                                        l_err_amt_type_tbl.extend(1);
5198                                        l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5199 
5200                                        RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5201                                   END IF;
5202                                   -- checking for spread curve
5203                                   IF l_inf_tbl_data_curr_rec.spread_curve_name <> l_inf_tbl_data_next_rec.spread_curve_name THEN
5204                                        l_err_val_code_tbl.extend(1);
5205                                        l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_SC_MISS_MATCH_ERR';
5206                                        l_err_task_id_tbl.extend(1);
5207                                        l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5208                                        l_err_rlm_id_tbl.extend(1);
5209                                        l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5210                                        l_err_txn_curr_tbl.extend(1);
5211                                        l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5212                                        l_err_amt_type_tbl.extend(1);
5213                                        l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5214 
5215                                        RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5216                                   END IF;
5217                                   -- checking for etc method
5218                                   IF l_inf_tbl_data_curr_rec.etc_method_name <> l_inf_tbl_data_next_rec.etc_method_name THEN
5219                                        l_err_val_code_tbl.extend(1);
5220                                        l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_ETC_MISS_MATCH_ERR';
5221                                        l_err_task_id_tbl.extend(1);
5222                                        l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5223                                        l_err_rlm_id_tbl.extend(1);
5224                                        l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5225                                        l_err_txn_curr_tbl.extend(1);
5226                                        l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5227                                        l_err_amt_type_tbl.extend(1);
5228                                        l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5229 
5230                                        RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5231                                   END IF;
5232                                   -- checking for mfc cost type
5233                                   IF l_inf_tbl_data_curr_rec.mfc_cost_type_name <> l_inf_tbl_data_next_rec.mfc_cost_type_name THEN
5234                                        l_err_val_code_tbl.extend(1);
5235                                        l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_MFC_MISS_MATCH_ERR';
5236                                        l_err_task_id_tbl.extend(1);
5237                                        l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5238                                        l_err_rlm_id_tbl.extend(1);
5239                                        l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5240                                        l_err_txn_curr_tbl.extend(1);
5241                                        l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5242                                        l_err_amt_type_tbl.extend(1);
5243                                        l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5244 
5245                                        RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5246                                   END IF;
5247 /* commenting out this code block as its not required to check now
5248 
5249                                   -- checking if the planning start date and end dates are same across same RA
5250                                   IF l_inf_tbl_data_curr_rec.planning_start_date <> l_inf_tbl_data_next_rec.planning_start_date THEN
5251                                         l_err_val_code_tbl.extend(1);
5252                                         l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_ST_DT_MISS_MATCH';
5253                                         l_err_task_id_tbl.extend(1);
5254                                         l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5255                                         l_err_rlm_id_tbl.extend(1);
5256                                         l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5257                                         l_err_txn_curr_tbl.extend(1);
5258                                         l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5259                                         l_err_amt_type_tbl.extend(1);
5260                                         l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5261 
5262                                         RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5263                                   END IF;
5264                                   IF l_inf_tbl_data_curr_rec.planning_end_date <> l_inf_tbl_data_next_rec.planning_end_date THEN
5265                                         l_err_val_code_tbl.extend(1);
5266                                         l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_EN_DT_MISS_MATCH';
5267                                         l_err_task_id_tbl.extend(1);
5268                                         l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5269                                         l_err_rlm_id_tbl.extend(1);
5270                                         l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5271                                         l_err_txn_curr_tbl.extend(1);
5272                                         l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5273                                         l_err_amt_type_tbl.extend(1);
5274                                         l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5275 
5276                                         RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5277                                   END IF;
5278 */
5279                         END IF;  -- same task and resource
5280 
5281                      ELSE  -- non periodic
5282                           --log1('----- STAGE 19.2-------');
5283                           IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
5284                              l_cached_ra_id_tbl(l_cached_ra_index) = -1 THEN
5285                                 IF l_plan_start_date IS NULL AND
5286                                    l_plan_end_date IS NOT NULL THEN
5287                                          l_err_val_code_tbl.extend(1);
5288                                          l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_ST_DT_MISS_ERR';
5289                                          l_err_task_id_tbl.extend(1);
5290                                          l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5291                                          l_err_rlm_id_tbl.extend(1);
5292                                          l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5293                                          l_err_txn_curr_tbl.extend(1);
5294                                          l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5295                                          RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
5296                                 ELSIF l_plan_start_date IS NOT NULL AND
5297                                       l_plan_end_date IS NULL THEN
5298                                          l_err_val_code_tbl.extend(1);
5299                                          l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_END_DT_MISS_ERR';
5300                                          l_err_task_id_tbl.extend(1);
5301                                          l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5302                                          l_err_rlm_id_tbl.extend(1);
5303                                          l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5304                                          l_err_txn_curr_tbl.extend(1);
5305                                          l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5306                                          RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
5307                                 END IF;  -- planning dates null
5308                           END IF;
5309 
5310                           --log1('----- STAGE 19.3-------');
5311                           -- checking if the sp fixed date is within planning start/end date
5312                           IF (l_plan_start_date > Nvl(l_sp_fixed_date, (l_plan_start_date + 1)))OR
5313                              (l_plan_end_date < Nvl(l_sp_fixed_date, (l_plan_end_date - 1))) THEN
5314                                 l_err_val_code_tbl.extend(1);
5315                                 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_SP_FX_DT_OUT_RANGE';
5316                                 l_err_task_id_tbl.extend(1);
5317                                 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5318                                 l_err_rlm_id_tbl.extend(1);
5319                                 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5320                                 l_err_txn_curr_tbl.extend(1);
5321                                 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5322                                 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
5323                           END IF;
5324 
5325                           --log1('----- STAGE 19.4-------');
5326                           -- validation for UOM and other resource attributes, to check if they are same for all the rows,
5327                           -- if the RA is same
5328                           IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
5329                              l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
5330                              l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id AND
5331 							 (l_Cbs_Enabled = 'N' OR
5332 						(l_Cbs_Enabled = 'Y' AND l_inf_tbl_data_curr_rec.cbs_element_id = l_inf_tbl_data_next_rec.cbs_element_id))-- cbs enhancement changes bug#16445106
5333 						THEN
5334                                     -- checking for UOM
5335                                     IF l_inf_tbl_data_curr_rec.unit_of_measure <> l_inf_tbl_data_next_rec.unit_of_measure THEN
5336                                          l_err_val_code_tbl.extend(1);
5337                                          l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_UOM_MISS_MATCH_ERR';
5338                                          l_err_task_id_tbl.extend(1);
5339                                          l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5340                                          l_err_rlm_id_tbl.extend(1);
5341                                          l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5342                                          l_err_txn_curr_tbl.extend(1);
5343                                          l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5344 
5345                                          RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5346                                     END IF;
5347                                     -- checking for spread curve name
5348                                     IF l_inf_tbl_data_curr_rec.spread_curve_name <> l_inf_tbl_data_next_rec.spread_curve_name THEN
5349                                          l_err_val_code_tbl.extend(1);
5350                                          l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_SC_MISS_MATCH_ERR';
5351                                          l_err_task_id_tbl.extend(1);
5352                                          l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5353                                          l_err_rlm_id_tbl.extend(1);
5354                                          l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5355                                          l_err_txn_curr_tbl.extend(1);
5356                                          l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5357 
5358                                          RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5359                                     END IF;
5360                                     -- checking for etc method name
5361                                     IF l_inf_tbl_data_curr_rec.etc_method_name <> l_inf_tbl_data_next_rec.etc_method_name THEN
5362                                          l_err_val_code_tbl.extend(1);
5363                                          l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_ETC_MISS_MATCH_ERR';
5364                                          l_err_task_id_tbl.extend(1);
5365                                          l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5366                                          l_err_rlm_id_tbl.extend(1);
5367                                          l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5368                                          l_err_txn_curr_tbl.extend(1);
5369                                          l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5370 
5371                                          RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5372                                     END IF;
5373                                     -- checking for mfc cost type name
5374                                     IF l_inf_tbl_data_curr_rec.mfc_cost_type_name <> l_inf_tbl_data_next_rec.mfc_cost_type_name THEN
5375                                          l_err_val_code_tbl.extend(1);
5376                                          l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_MFC_MISS_MATCH_ERR';
5377                                          l_err_task_id_tbl.extend(1);
5378                                          l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5379                                          l_err_rlm_id_tbl.extend(1);
5380                                          l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5381                                          l_err_txn_curr_tbl.extend(1);
5382                                          l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5383 
5384                                          RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5385                                     END IF;
5386 
5387 /* commenting out this code block as its not required to check now
5388                                     -- checking if the planning start date and end dates are same across same RA
5389                                     IF l_inf_tbl_data_curr_rec.planning_start_date <> l_inf_tbl_data_next_rec.planning_start_date THEN
5390                                           l_err_val_code_tbl.extend(1);
5391                                           l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_ST_DT_MISS_MATCH';
5392                                           l_err_task_id_tbl.extend(1);
5393                                           l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5394                                           l_err_rlm_id_tbl.extend(1);
5395                                           l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5396                                           l_err_txn_curr_tbl.extend(1);
5397                                           l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5398 
5399                                           RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5400                                     END IF;
5401                                     IF l_inf_tbl_data_curr_rec.planning_end_date <> l_inf_tbl_data_next_rec.planning_end_date THEN
5402                                           l_err_val_code_tbl.extend(1);
5403                                           l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_EN_DT_MISS_MATCH';
5404                                           l_err_task_id_tbl.extend(1);
5405                                           l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5406                                           l_err_rlm_id_tbl.extend(1);
5407                                           l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5408                                           l_err_txn_curr_tbl.extend(1);
5409                                           l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5410 
5411                                           RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5412                                     END IF;
5413 */
5414                           END IF;  -- same task and resource
5415                           --log1('----- STAGE 19.5-------');
5416 
5417                      END IF;  -- non periodic
5418 
5419                      IF l_plan_trans_attr_copied_flag = 'N' THEN
5420                           --log1('----- STAGE 101-------');
5421                           -- populating an indicator to be passed to validate_budget_lines for the record
5422                           l_delete_flag := 'Y';
5423                      ELSE
5424                           --log1('----- STAGE 102-------');
5425                           l_delete_flag := 'N';
5426                      END IF;
5427 
5428                      IF is_periodic_setup = 'Y' THEN
5429                           --log1('----- STAGE 103-------');
5430                           IF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_RAW_COST' THEN
5431                              l_raw_cost := l_tmp_sum_amt;
5432                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_RAW_COST' THEN
5433                                 l_raw_cost := l_tmp_sum_amt;
5434                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_RAW_COST' THEN
5435                                 l_etc_raw_cost := l_tmp_sum_amt;
5436                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_BURDENED_COST' THEN
5437                                 l_burdened_cost := l_tmp_sum_amt;
5438                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_BURDENED_COST' THEN
5439                                 l_burdened_cost := l_tmp_sum_amt;
5440                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_BURDENED_COST' THEN
5441                                 l_etc_burdened_cost := l_tmp_sum_amt;
5442                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_REV' THEN
5443                                 l_revenue := l_tmp_sum_amt;
5444                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_REVENUE' THEN
5445                                 l_revenue := l_tmp_sum_amt;
5446                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_REVENUE' THEN
5447                                 l_etc_revenue := l_tmp_sum_amt;
5448                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_QTY' THEN
5449                                 l_quantity := l_tmp_sum_amt;
5450                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_QTY' THEN
5451                                 l_quantity := l_tmp_sum_amt;
5452                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_QTY' THEN
5453                                 l_etc_quantity := l_tmp_sum_amt;
5454                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') THEN
5455                                    l_rc_rate := l_tmp_sum_amt;
5456                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('ETC_BURDENED_COST_RATE','BURDENED_COST_RATE') THEN
5457                                    l_bc_rate := l_tmp_sum_amt;
5458                           ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') THEN
5459                                    l_bill_rate := l_tmp_sum_amt;
5460                           END IF;
5461                      ELSE
5462                            --log1('----- STAGE 104-------');
5463                        IF l_debug_mode = 'Y' THEN
5464                            pa_debug.g_err_stage := 'Opening Cursor non_prd_lyt_null_val_cur';
5465                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5466                        END IF;
5467                            OPEN non_prd_lyt_null_val_cur( l_inf_tbl_data_curr_rec.budget_version_id,
5468                                                           l_inf_tbl_data_curr_rec.task_id,
5469                                                           l_inf_tbl_data_curr_rec.resource_list_member_id,
5470 														  l_inf_tbl_data_curr_rec.cbs_element_id,
5471                                                           l_inf_tbl_data_curr_rec.txn_currency_code);
5472                            FETCH non_prd_lyt_null_val_cur INTO
5473                                                               l_ratxn_total_quantity,
5474                                                               l_ratxn_total_raw_cost,
5475                                                               l_ratxn_total_burdened_cost,
5476                                                               l_ratxn_total_revenue,
5477                                                               l_ratxn_etc_quantity,
5478                                                               l_ratxn_etc_raw_cost,
5479                                                               l_ratxn_etc_burdened_cost,
5480                                                               l_ratxn_etc_revenue,
5481                                                               l_ratxn_raw_cost_over_rate,
5482                                                               l_ratxn_burden_cost_over_rate,
5483                                                               l_ratxn_bill_over_rate,
5484                                                               l_ra_rate_based_flag;
5485                            CLOSE non_prd_lyt_null_val_cur;
5486                        IF l_debug_mode = 'Y' THEN
5487                            pa_debug.g_err_stage := 'l_ratxn_total_quantity' || l_ratxn_total_quantity;
5488                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5489                            pa_debug.g_err_stage := 'l_ratxn_total_raw_cost' || l_ratxn_total_raw_cost;
5490                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5491                            pa_debug.g_err_stage := 'l_ratxn_total_burdened_cost' || l_ratxn_total_burdened_cost;
5492                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5493                            pa_debug.g_err_stage := 'l_ratxn_etc_quantity' || l_ratxn_etc_quantity;
5494                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5495                            pa_debug.g_err_stage := 'l_ratxn_etc_raw_cost' || l_ratxn_etc_raw_cost;
5496                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5497                            pa_debug.g_err_stage := 'l_ratxn_etc_burdened_cost' || l_ratxn_etc_burdened_cost;
5498                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5499                            pa_debug.g_err_stage := 'l_ratxn_etc_revenue' || l_ratxn_etc_revenue;
5500                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5501                            pa_debug.g_err_stage := 'l_ratxn_etc_revenue' || l_ratxn_etc_revenue;
5502                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5503                            pa_debug.g_err_stage := 'l_ratxn_bill_over_rate' || l_ratxn_bill_over_rate;
5504                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5505                            pa_debug.g_err_stage := 'l_ra_rate_based_flag' || l_ra_rate_based_flag;
5506                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5507                        END IF;
5508 
5509 
5510                            IF l_ratxn_total_quantity IS NULL AND (l_inf_tbl_data_curr_rec.quantity = l_fnd_miss_num) THEN
5511                               l_quantity := NULL;
5512                            ELSE
5513                               l_quantity := l_inf_tbl_data_curr_rec.quantity;
5514                            END IF;
5515                            IF l_ratxn_total_raw_cost IS NULL AND (l_inf_tbl_data_curr_rec.raw_cost = l_fnd_miss_num) THEN
5516                               l_raw_cost := NULL;
5517                            ELSE
5518                               l_raw_cost := l_inf_tbl_data_curr_rec.raw_cost;
5519                            END IF;
5520                            IF l_ratxn_total_burdened_cost IS NULL AND (l_inf_tbl_data_curr_rec.burdened_cost = l_fnd_miss_num) THEN
5521                               l_burdened_cost := NULL;
5522                            ELSE
5523                               l_burdened_cost := l_inf_tbl_data_curr_rec.burdened_cost;
5524                            END IF;
5525                            IF l_ratxn_total_revenue IS NULL AND (l_inf_tbl_data_curr_rec.revenue = l_fnd_miss_num) THEN
5526                               l_revenue := NULL;
5527                            ELSE
5528                               l_revenue := l_inf_tbl_data_curr_rec.revenue;
5529                            END IF;
5530                            IF l_ratxn_etc_quantity IS NULL AND (l_inf_tbl_data_curr_rec.etc_quantity = l_fnd_miss_num) THEN
5531                               l_etc_quantity := NULL;
5532                            ELSE
5533                               l_etc_quantity := l_inf_tbl_data_curr_rec.etc_quantity;
5534                            END IF;
5535                            IF l_ratxn_etc_raw_cost IS NULL AND (l_inf_tbl_data_curr_rec.etc_raw_cost = l_fnd_miss_num) THEN
5536                               l_etc_raw_cost := NULL;
5537                            ELSE
5538                               l_etc_raw_cost := l_inf_tbl_data_curr_rec.etc_raw_cost;
5539                            END IF;
5540                            IF l_ratxn_etc_burdened_cost IS NULL AND (l_inf_tbl_data_curr_rec.etc_burdened_cost = l_fnd_miss_num) THEN
5541                               l_etc_burdened_cost := NULL;
5542                            ELSE
5543                               l_etc_burdened_cost := l_inf_tbl_data_curr_rec.etc_burdened_cost;
5544                            END IF;
5545                            IF l_ratxn_etc_revenue IS NULL AND (l_inf_tbl_data_curr_rec.etc_revenue = l_fnd_miss_num) THEN
5546                               l_etc_revenue := NULL;
5547                            ELSE
5548                               l_etc_revenue := l_inf_tbl_data_curr_rec.etc_revenue;
5549                            END IF;
5550                            /* Bug 5068203 : Changes are made to the override rates so that the override rates
5551                               will be calculated as NULL instead of g_miss_num for a resource assignment
5552                               with rate_based_flag as 'N' and has value for override rates in new entity
5553                               and has no changes in Excel while uploaded from Excel with Non-Periodic layout.
5554                            */
5555                            IF l_ra_rate_based_flag = 'Y' THEN
5556                               IF l_ratxn_raw_cost_over_rate IS NULL AND (l_inf_tbl_data_curr_rec.raw_cost_rate = l_fnd_miss_num) THEN
5557                                  l_rc_rate := NULL;
5558                               ELSE
5559                                  l_rc_rate := l_inf_tbl_data_curr_rec.raw_cost_rate;
5560                               END IF;
5561                            ELSE
5562                               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
5563                                  l_rc_rate := NULL;
5564                               ELSIF l_inf_tbl_data_curr_rec.raw_cost_rate = l_fnd_miss_num THEN
5565                                  l_rc_rate := NULL;
5566                               ELSE
5567                                  l_rc_rate := l_inf_tbl_data_curr_rec.raw_cost_rate;
5568                               END IF;
5569                            END IF;
5570 
5571                            IF l_ra_rate_based_flag = 'Y' THEN
5572                               IF l_ratxn_burden_cost_over_rate IS NULL AND (l_inf_tbl_data_curr_rec.burdened_cost_rate = l_fnd_miss_num) THEN
5573                                  l_bc_rate := NULL;
5574                               ELSE
5575                                  l_bc_rate := l_inf_tbl_data_curr_rec.burdened_cost_rate;
5576                               END IF;
5577                            ELSE
5578                               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
5579                                  l_bc_rate := NULL;
5580                               ELSIF l_inf_tbl_data_curr_rec.burdened_cost_rate = l_fnd_miss_num THEN
5581                                  l_bc_rate := NULL;
5582                               ELSE
5583                                  l_bc_rate := l_inf_tbl_data_curr_rec.burdened_cost_rate;
5584                               END IF;
5585                            END IF;
5586 
5587                            IF l_ra_rate_based_flag = 'Y' THEN
5588                               IF l_ratxn_bill_over_rate IS NULL AND (l_inf_tbl_data_curr_rec.bill_rate = l_fnd_miss_num) THEN
5589                                  l_bill_rate := NULL;
5590                               ELSE
5591                                  l_bill_rate := l_inf_tbl_data_curr_rec.bill_rate;
5592                               END IF;
5593                            ELSE
5594                               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
5595                                  l_bill_rate := NULL;
5596                               ELSIF l_inf_tbl_data_curr_rec.bill_rate = l_fnd_miss_num THEN
5597                                  l_bill_rate := NULL;
5598                               ELSE
5599                                  l_bill_rate := l_inf_tbl_data_curr_rec.bill_rate;
5600                               END IF;
5601                            END IF;
5602 
5603            /*                l_raw_cost          := l_inf_tbl_data_curr_rec.raw_cost;
5604                            l_burdened_cost     := l_inf_tbl_data_curr_rec.burdened_cost;
5605                            l_revenue           := l_inf_tbl_data_curr_rec.revenue;
5606                            l_quantity          := l_inf_tbl_data_curr_rec.quantity;
5607                            l_etc_quantity      := l_inf_tbl_data_curr_rec.etc_quantity;
5608                            l_etc_raw_cost      := l_inf_tbl_data_curr_rec.etc_raw_cost;
5609                            l_etc_burdened_cost := l_inf_tbl_data_curr_rec.etc_burdened_cost;
5610                            l_etc_revenue       := l_inf_tbl_data_curr_rec.etc_revenue;
5611 
5612                            l_rc_rate := l_inf_tbl_data_curr_rec.raw_cost_rate;
5613                            l_bc_rate := l_inf_tbl_data_curr_rec.burdened_cost_rate;
5614                            l_bill_rate := l_inf_tbl_data_curr_rec.bill_rate;   */
5615                      END IF;
5616 
5617                      -- initializing the min and max budget line dates
5618                      IF l_min_bdgt_line_start_date IS NULL THEN
5619                          l_min_bdgt_line_start_date:=l_bdgt_line_start_date;
5620                      ELSIF l_bdgt_line_start_date IS NOT NULL AND l_bdgt_line_start_date < l_min_bdgt_line_start_date THEN
5621                          l_min_bdgt_line_start_date:=l_bdgt_line_start_date;
5622                      END IF;
5623 
5624                      IF l_max_bdgt_line_end_date IS NULL THEN
5625                          l_max_bdgt_line_end_date:=l_bdgt_line_end_date;
5626                      ELSIF l_bdgt_line_end_date IS NOT NULL AND l_bdgt_line_end_date > l_max_bdgt_line_end_date THEN
5627                          l_max_bdgt_line_end_date:=l_bdgt_line_end_date;
5628                      END IF;
5629 
5630                      --log1('----- STAGE 105-------');
5631                      --Prepare the pl/sql tbls to be passed to validate_budget_lines API for each
5632                      --planning transaction
5633 					 --DEBUG_NS('l_inf_tbl_data_curr_rec.task_id :: ' ||l_inf_tbl_data_curr_rec.task_id);
5634 					 --DEBUG_NS('l_inf_tbl_data_curr_rec.txn_currency_code :: ' ||l_inf_tbl_data_curr_rec.txn_currency_code);
5635 					 --DEBUG_NS('l_inf_tbl_data_curr_rec.resource_list_member_id :: ' ||l_inf_tbl_data_curr_rec.resource_list_member_id);
5636 					 --DEBUG_NS('l_inf_tbl_data_curr_rec.cbs_element_id :: ' ||l_inf_tbl_data_curr_rec.cbs_element_id);
5637 
5638 					 --DEBUG_NS('l_inf_tbl_data_next_rec.task_id :: ' ||l_inf_tbl_data_next_rec.task_id);
5639 					 --DEBUG_NS('l_inf_tbl_data_next_rec.txn_currency_code :: ' ||l_inf_tbl_data_next_rec.txn_currency_code);
5640 					 --DEBUG_NS('l_inf_tbl_data_next_rec.resource_list_member_id :: ' ||l_inf_tbl_data_next_rec.resource_list_member_id);
5641 					 --DEBUG_NS('l_inf_tbl_data_next_rec.cbs_element_id :: ' ||l_inf_tbl_data_next_rec.cbs_element_id);
5642 
5643                      IF l_inf_tbl_data_next_rec.task_id IS NULL OR
5644                         Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') OR
5645                         l_inf_tbl_data_next_rec.task_id <> l_inf_tbl_data_curr_rec.task_id OR
5646                         l_inf_tbl_data_next_rec.resource_list_member_id <> l_inf_tbl_data_curr_rec.resource_list_member_id OR
5647 						((l_Cbs_Enabled = 'Y' and
5648 						l_inf_tbl_data_curr_rec.cbs_element_id <> l_inf_tbl_data_next_rec.cbs_element_id) OR l_Cbs_Enabled = 'N')-- cbs enhancement changes bug#16445106
5649 						THEN
5650 
5651                         l_budget_line_in_out_tbl(bl_count).pa_task_id        := l_inf_tbl_data_curr_rec.task_id;
5652                         l_budget_line_in_out_tbl(bl_count).resource_list_member_id := l_inf_tbl_data_curr_rec.resource_list_member_id;
5653 
5654 						l_budget_line_in_out_tbl(bl_count).cbs_element_id := l_inf_tbl_data_curr_rec.cbs_element_id;-- cbs enhancement changes bug#16445106
5655 
5656                         l_budget_line_in_out_tbl(bl_count).budget_start_date := l_min_bdgt_line_start_date;
5657                         l_budget_line_in_out_tbl(bl_count).budget_end_date   := l_max_bdgt_line_end_date;
5658 
5659                         l_budget_line_in_out_tbl(bl_count).raw_cost          := l_raw_cost;
5660                         l_budget_line_in_out_tbl(bl_count).burdened_cost     := l_burdened_cost;
5661                         l_budget_line_in_out_tbl(bl_count).revenue           := l_revenue;
5662                         l_budget_line_in_out_tbl(bl_count).quantity          := l_quantity;
5663 
5664                         x_etc_quantity_tbl.extend;
5665                         x_etc_raw_cost_tbl.extend;
5666                         x_etc_burdened_cost_tbl.extend;
5667                         x_etc_revenue_tbl.extend;
5668                         x_etc_quantity_tbl(x_etc_quantity_tbl.COUNT):=l_etc_quantity;
5669                         x_etc_raw_cost_tbl(x_etc_raw_cost_tbl.COUNT):=l_etc_raw_cost;
5670                         x_etc_burdened_cost_tbl(x_etc_burdened_cost_tbl.COUNT):=l_etc_burdened_cost;
5671                         x_etc_revenue_tbl(x_etc_revenue_tbl.COUNT):=l_etc_revenue;
5672 
5673                         --log1('--txn_currency_code-----' || l_inf_tbl_data_curr_rec.txn_currency_code);
5674                         l_budget_line_in_out_tbl(bl_count).txn_currency_code := l_inf_tbl_data_curr_rec.txn_currency_code;
5675 
5676                         l_budget_line_in_out_tbl(bl_count).description := l_bdgt_ln_tbl_description;
5677 
5678                         l_delete_flag_tbl.EXTEND(1);
5679                         l_delete_flag_tbl(bl_count) := l_delete_flag;
5680 
5681                         --log1('----- STAGE 113-------');
5682                         IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
5683                             --log1('----- STAGE 114-------');
5684                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_type      := l_projfunc_cost_rate_type;
5685                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date_type := l_projfunc_cost_rate_date_type;
5686                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date      := l_projfunc_cost_rate_date;
5687                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_exchange_rate  := l_projfunc_cost_exchange_rate;
5688                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_type       := l_projfunc_rev_rate_type;
5689                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date_type  := l_projfunc_rev_rate_date_type;
5690                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date       := l_projfunc_rev_rate_date;
5691                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_exchange_rate   := l_projfunc_rev_exchange_rate;
5692                             l_budget_line_in_out_tbl(bl_count).project_cost_rate_type       := l_project_cost_rate_type;
5693                             l_budget_line_in_out_tbl(bl_count).project_cost_rate_date_type  := l_project_cost_rate_date_type;
5694                             l_budget_line_in_out_tbl(bl_count).project_cost_rate_date       := l_project_cost_rate_date;
5695                             l_budget_line_in_out_tbl(bl_count).project_cost_exchange_rate   := l_project_cost_exchange_rate;
5696                             l_budget_line_in_out_tbl(bl_count).project_rev_rate_type        := l_project_rev_rate_type;
5697                             l_budget_line_in_out_tbl(bl_count).project_rev_rate_date_type   := l_project_rev_rate_date_type;
5698                             l_budget_line_in_out_tbl(bl_count).project_rev_rate_date        := l_project_rev_rate_date;
5699                             l_budget_line_in_out_tbl(bl_count).project_rev_exchange_rate    := l_project_rev_exchange_rate;
5700                         ELSE
5701                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_type      := null;
5702                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date_type := null;
5703                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date      := null;
5704                             l_budget_line_in_out_tbl(bl_count).projfunc_cost_exchange_rate  := null;
5705                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_type       := null;
5706                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date_type  := null;
5707                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date       := null;
5708                             l_budget_line_in_out_tbl(bl_count).projfunc_rev_exchange_rate   := null;
5709                             l_budget_line_in_out_tbl(bl_count).project_cost_rate_type       := null;
5710                             l_budget_line_in_out_tbl(bl_count).project_cost_rate_date_type  := null;
5711                             l_budget_line_in_out_tbl(bl_count).project_cost_rate_date       := null;
5712                             l_budget_line_in_out_tbl(bl_count).project_cost_exchange_rate   := null;
5713                             l_budget_line_in_out_tbl(bl_count).project_rev_rate_type        := null;
5714                             l_budget_line_in_out_tbl(bl_count).project_rev_rate_date_type   := null;
5715                             l_budget_line_in_out_tbl(bl_count).project_rev_rate_date        := null;
5716                             l_budget_line_in_out_tbl(bl_count).project_rev_exchange_rate    := null;
5717                         END IF;
5718 
5719                         l_budget_line_in_out_tbl(bl_count).change_reason_code := l_change_reason_code;
5720 
5721                         -- populating other parameters to be passed to validate_budget_lines
5722                         l_rc_rate_tbl.EXTEND(1);
5723                         l_rc_rate_tbl(bl_count) := l_rc_rate;
5724                         l_bc_rate_tbl.EXTEND(1);
5725                         l_bc_rate_tbl(bl_count) := l_bc_rate;
5726                         l_bill_rate_tbl.EXTEND(1);
5727                         l_bill_rate_tbl(bl_count) := l_bill_rate;
5728 
5729                         l_plan_start_date_tbl.extend(1);
5730                         l_plan_start_date_tbl(bl_count) := l_plan_start_date;
5731                         l_plan_end_date_tbl.extend(1);
5732                         l_plan_end_date_tbl(bl_count) := l_plan_end_date;
5733 
5734                         -- passing null for all the resource attributes as they are meant to be read-only
5735                         l_uom_tbl.extend(1);
5736                         l_uom_tbl(bl_count) := null;
5737                         l_spread_curve_name_tbl.extend(1);
5738                         l_spread_curve_name_tbl(bl_count) := null;
5739                         l_etc_method_code_tbl.extend(1);
5740                         l_etc_method_code_tbl(bl_count) := null;
5741                         l_mfc_cost_type_name_tbl.extend(1);
5742                         l_mfc_cost_type_name_tbl(bl_count) := null;
5743 
5744                         l_sp_fixed_date_tbl.extend(1);
5745                         l_sp_fixed_date_tbl(bl_count) := l_sp_fixed_date;
5746 
5747                         -- populating the spread curve id obtained in the out table
5748                         l_spread_curve_id_tbl.EXTEND(1);
5749                         l_spread_curve_id_tbl(bl_count) := l_spread_curve_id;
5750 
5751                         -- deriving the min and max of the budget line start/end dates
5752                         IF l_min_ra_plan_start_date IS NULL THEN
5753 
5754                             l_min_ra_plan_start_date := l_min_bdgt_line_start_date;
5755 
5756                         ELSIF l_min_bdgt_line_start_date IS NOT NULL AND
5757                               l_min_bdgt_line_start_date < l_min_ra_plan_start_date THEN
5758 
5759                             l_min_ra_plan_start_date := l_min_bdgt_line_start_date;
5760 
5761                         END IF;
5762 
5763                         IF l_max_ra_plan_end_date IS NULL THEN
5764 
5765                             l_max_ra_plan_end_date := l_max_bdgt_line_end_date;
5766 
5767                         ELSIF l_max_bdgt_line_end_date IS NOT NULL AND
5768                               l_max_bdgt_line_end_date > l_max_ra_plan_end_date THEN
5769 
5770                             l_max_ra_plan_end_date := l_max_bdgt_line_end_date;
5771 
5772                         END IF;
5773 
5774                         -- populating other out variables
5775                         l_ra_id_tbl.EXTEND(1);
5776                         l_ra_id_tbl(bl_count) := l_ra_id;
5777                         l_res_class_code_tbl.EXTEND(1);
5778                         l_res_class_code_tbl(bl_count) := l_res_class_code;
5779                         l_rate_based_flag_tbl.EXTEND(1);
5780                         l_rate_based_flag_tbl(bl_count) := l_rate_based_flag;
5781                         l_rbs_elem_id_tbl.EXTEND(1);
5782                         l_rbs_elem_id_tbl(bl_count) := l_rbs_elem_id;
5783 
5784 						l_cbs_elem_id_tbl.EXTEND(1);
5785 						l_cbs_elem_id_tbl(bl_count) := l_cbs_elem_id;
5786 
5787                         l_amount_type_tbl.EXTEND(1);
5788                         l_amount_type_tbl(bl_count) := l_inf_tbl_data_curr_rec.amount_type_code;
5789 
5790                         -- incrementing the bl_count
5791                         bl_count := bl_count + 1;
5792 
5793                      END IF;
5794 
5795                      --log1('----- STAGE 107-------');
5796 
5797                END IF; -- for a distinct current record
5798 
5799                --log1('----- STAGE 115-------');
5800             EXCEPTION -- inside the loop to catch skip_ra_exc
5801                  WHEN Fp_Webadi_Skip_Dup_Rec_Exc THEN
5802                        -- exception to skip processing of the duplicate records entered
5803                        IF l_debug_mode = 'Y' THEN
5804                            pa_debug.g_err_stage := 'Fp_Webadi_Skip_Dup_Rec_Exc Raised';
5805                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5806                        END IF;
5807                        LOOP
5808                              l_inf_tbl_data_skip_rec:=NULL;
5809                              FETCH inf_tbl_data_csr INTO l_inf_tbl_data_skip_rec;
5810                              EXIT WHEN l_loop_exit_flag = 'Y' OR l_inf_tbl_data_skip_rec.task_id IS NULL;
5811 
5812                              IF l_inf_tbl_data_skip_rec.task_id <> l_inf_tbl_data_next_rec.task_id OR
5813                                 l_inf_tbl_data_skip_rec.resource_list_member_id <> l_inf_tbl_data_next_rec.resource_list_member_id OR
5814                                 Nvl(l_inf_tbl_data_skip_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') OR
5815                                 NVL(l_inf_tbl_data_skip_rec.amount_type_code,'-99') <> NVL(l_inf_tbl_data_next_rec.amount_type_code,'-99') THEN
5816 
5817                                  -- assigning the next distinct planning txn to the next_rec record
5818                                  l_inf_tbl_data_next_rec := l_inf_tbl_data_skip_rec;
5819                                  l_loop_exit_flag := 'Y';
5820 
5821                              END IF;
5822                        END LOOP;
5823                  WHEN Fp_Webadi_Skip_Rec_Proc_Exc THEN
5824                        -- exception to skip processing of the record, if any validation
5825                        -- failure occurs in the current record, so that there would be
5826                        -- at max one error code populated for any particular record.
5827                        IF l_debug_mode = 'Y' THEN
5828                            pa_debug.g_err_stage := 'Fp_Webadi_Skip_Rec_Proc_Exc Raised';
5829                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5830                        END IF;
5831                        IF l_inf_tbl_data_next_rec.task_id IS NULL THEN
5832                            FETCH inf_tbl_data_csr INTO l_inf_tbl_data_next_rec;
5833                        END IF;
5834 
5835                  WHEN Fp_Webadi_Skip_Next_Rec_Exc THEN
5836                        -- exception to skip processing of the next record, if any validation
5837                        -- failure occurs in that record, so that there would be
5838                        -- at max one error code populated for any particular record.
5839                        IF l_debug_mode = 'Y' THEN
5840                            pa_debug.g_err_stage := 'Fp_Webadi_Skip_Next_Rec_Exc Raised';
5841                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5842                        END IF;
5843                        l_inf_tbl_data_skip_rec:=NULL;
5844                        FETCH inf_tbl_data_csr INTO l_inf_tbl_data_skip_rec;
5845                        l_inf_tbl_data_next_rec := l_inf_tbl_data_skip_rec;
5846 
5847 
5848                        /* Do nothing just skip the current record and proceed with the next one */
5849             END; -- end of the processing block inside the loop
5850 
5851             -- making the next_rec as the current_rec
5852             l_inf_tbl_data_prev_rec := l_inf_tbl_data_curr_rec;
5853             l_inf_tbl_data_curr_rec := l_inf_tbl_data_next_rec;
5854             l_inf_tbl_data_next_rec := NULL;
5855 
5856             x_num_of_rec_processed := x_num_of_rec_processed + 1;
5857       END LOOP; -- end of main loop
5858 
5859       CLOSE inf_tbl_data_csr;
5860 
5861       --log1('----- STAGE 115-------'||l_err_val_code_tbl.COUNT);
5862 
5863       --  calling process_errors
5864       IF l_err_val_code_tbl.COUNT > 0 THEN
5865            IF l_debug_mode = 'Y' THEN
5866                pa_debug.g_err_stage := 'Error Code Exists.Calling process_errors';
5867                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5868            END IF;
5869            process_errors ( p_run_id          => p_run_id,
5870                             p_periodic_flag   => is_periodic_setup,
5871                             p_error_code_tbl  => l_err_val_code_tbl,
5872                             p_task_id_tbl     => l_err_task_id_tbl,
5873                             p_rlm_id_tbl      => l_err_rlm_id_tbl,
5874                             p_txn_curr_tbl    => l_err_txn_curr_tbl,
5875                             p_amount_type_tbl => l_err_amt_type_tbl,
5876                             p_request_id      => p_request_id,
5877                             x_return_status   => l_return_status,
5878                             x_msg_data        => l_msg_data,
5879                             x_msg_count       => l_msg_count);
5880               IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5881                     IF l_debug_mode = 'Y' THEN
5882                          pa_debug.g_err_stage := 'Call to process_errors returned with error';
5883                          pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5884                     END IF;
5885                     RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5886               END IF;
5887       END IF;
5888 
5889       --log1('----- STAGE 116-------'||l_err_val_code_tbl.COUNT);
5890 
5891 /*      FOR zz IN 1..l_budget_line_in_out_tbl.COUNT LOOP
5892 
5893           log1('-l_budget_line_in_out_tbl('||zz||').pa_task_id- ' || l_budget_line_in_out_tbl(zz).pa_task_id);
5894           log1('-l_budget_line_in_out_tbl('||zz||').resource_list_member_id- ' || l_budget_line_in_out_tbl(zz).resource_list_member_id);
5895           log1('-l_budget_line_in_out_tbl('||zz||').txn_currency_code- ' || l_budget_line_in_out_tbl(zz).txn_currency_code);
5896           log1('-l_budget_line_in_out_tbl('||zz||').quantity- ' || l_budget_line_in_out_tbl(zz).quantity);
5897           log1('-l_budget_line_in_out_tbl('||zz||').raw_cost- ' || l_budget_line_in_out_tbl(zz).raw_cost);
5898           log1('-l_budget_line_in_out_tbl('||zz||').burdened_cost- ' || l_budget_line_in_out_tbl(zz).burdened_cost);
5899           log1('-l_budget_line_in_out_tbl('||zz||').revenue- ' || l_budget_line_in_out_tbl(zz).revenue);
5900 
5901       END LOOP;*/
5902 
5903       -- populating the out variables
5904       x_budget_lines             := l_budget_line_in_out_tbl;
5905       x_raw_cost_rate_tbl        := l_rc_rate_tbl;
5906       x_burd_cost_rate_tbl       := l_bc_rate_tbl;
5907       x_bill_rate_tbl            := l_bill_rate_tbl;
5908       x_planning_start_date_tbl  := l_plan_start_date_tbl;
5909       x_planning_end_date_tbl    := l_plan_end_date_tbl;
5910       x_uom_tbl                  := l_uom_tbl;
5911       x_mfc_cost_type_tbl        := l_mfc_cost_type_name_tbl;
5912       x_spread_curve_name_tbl    := l_spread_curve_name_tbl;
5913       x_sp_fixed_date_tbl        := l_sp_fixed_date_tbl;
5914       x_etc_method_name_tbl      := l_etc_method_code_tbl;
5915       x_delete_flag_tbl          := l_delete_flag_tbl;
5916       -- additional parameter to validate_budget_lines
5917       x_spread_curve_id_tbl      := l_spread_curve_id_tbl;
5918 
5919       x_ra_id_tbl := l_ra_id_tbl;
5920       x_res_class_code_tbl := l_res_class_code_tbl;
5921       x_rate_based_flag_tbl := l_rate_based_flag_tbl;
5922       x_rbs_elem_id_tbl := l_rbs_elem_id_tbl;
5923 	  x_cbs_elem_id_tbl := l_cbs_elem_id_tbl;
5924       x_amt_type_tbl := l_amount_type_tbl;
5925 
5926       IF l_debug_mode = 'Y' THEN
5927           pa_debug.g_err_stage := 'Leaving pa_fp_webadi_pkg.prepare_val_input';
5928           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5929       END IF;
5930 
5931       pa_debug.reset_curr_function;
5932 
5933       --log1('----- Leaving prepare_val_input-------');
5934 
5935 EXCEPTION
5936       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
5937           l_msg_count := FND_MSG_PUB.count_msg;
5938 
5939           IF l_msg_count = 1 and x_msg_data IS NULL THEN
5940                PA_INTERFACE_UTILS_PUB.get_messages
5941                      (p_encoded        => FND_API.G_TRUE
5942                       ,p_msg_index      => 1
5943                       ,p_msg_count      => l_msg_count
5944                       ,p_msg_data       => l_msg_data
5945                       ,p_data           => l_data
5946                       ,p_msg_index_out  => l_msg_index_out);
5947                x_msg_data := l_data;
5948                x_msg_count := l_msg_count;
5949           ELSE
5950               x_msg_count := l_msg_count;
5951           END IF;
5952           x_return_status := FND_API.G_RET_STS_ERROR;
5953 
5954           pa_debug.reset_curr_function;
5955 
5956           RETURN;
5957 
5958      WHEN OTHERS THEN
5959           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5960           x_msg_count     := 1;
5961           x_msg_data      := SQLERRM;
5962 
5963           FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
5964                                   ,p_procedure_name  => 'prepare_val_input');
5965           IF l_debug_mode = 'Y' THEN
5966                pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
5967                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5968           END IF;
5969 
5970           pa_debug.reset_curr_function;
5971 
5972           RAISE;
5973 
5974 END prepare_val_input;
5975 
5976 --This is a private function used by prepare_pbl_input. This function expects p_rec, record in pa_fp_webadi_upload_inf
5977 --and p_prd that indicates the period in p_rec from which the amount should be returned.
5978 --valid values for prd are ('SD,'PD', '1'..'52')
5979 
5980 FUNCTION get_amount_in_prd_x
5981 (p_rec      IN  inf_tbl_data_csr%ROWTYPE,
5982  p_prd      IN  VARCHAR2
5983 )
5984 RETURN NUMBER
5985 IS
5986 -- variables used for debugging
5987 l_module_name               VARCHAR2(100) := 'pa_fp_webadi_pkg.get_amount_in_prd_x';
5988 l_debug_mode                VARCHAR2(1) := 'N';
5989 l_amount                    NUMBER;
5990 BEGIN
5991     fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
5992 
5993 
5994     IF l_debug_mode = 'Y' THEN
5995           pa_debug.g_err_stage := 'Entering into get_amount_in_prd_x';
5996           pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
5997           pa_debug.g_err_stage := 'Validating input parameters';
5998           pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
5999     END IF;
6000 
6001     IF l_debug_mode = 'Y' THEN
6002           pa_debug.Set_Curr_Function
6003                       (p_function   => l_module_name,
6004                        p_debug_mode => l_debug_mode);
6005     END IF;
6006 
6007     IF p_prd IS NULL THEN
6008 
6009         IF l_debug_mode = 'Y' THEN
6010 
6011             pa_debug.g_err_stage := 'p_rec is null';
6012             pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
6013             pa_debug.g_err_stage := 'p_prd is null';
6014             pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
6015             pa_debug.reset_curr_function;
6016 
6017         END IF;
6018         RETURN NULL;
6019 
6020     END IF;
6021 
6022     IF l_debug_mode = 'Y' THEN
6023           pa_debug.g_err_stage := 'p_prd is '||p_prd;
6024           pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
6025     END IF;
6026 
6027     IF p_prd ='PD' THEN
6028        l_amount := p_rec.pd_prd;
6029     ELSIF p_prd ='SD' THEN
6030         l_amount := p_rec.sd_prd;
6031     ELSIF p_prd ='1' THEN
6032         l_amount := p_rec.prd1;
6033     ELSIF p_prd ='2' THEN
6034         l_amount := p_rec.prd2;
6035     ELSIF p_prd ='3' THEN
6036         l_amount := p_rec.prd3;
6037     ELSIF p_prd ='4' THEN
6038         l_amount := p_rec.prd4;
6039     ELSIF p_prd ='5' THEN
6040         l_amount := p_rec.prd5;
6041     ELSIF p_prd ='6' THEN
6042         l_amount := p_rec.prd6;
6043     ELSIF p_prd ='7' THEN
6044         l_amount := p_rec.prd7;
6045     ELSIF p_prd ='8' THEN
6046         l_amount := p_rec.prd8;
6047     ELSIF p_prd ='9' THEN
6048         l_amount := p_rec.prd9;
6049     ELSIF p_prd ='10' THEN
6050         l_amount := p_rec.prd10;
6051     ELSIF p_prd ='11' THEN
6052         l_amount := p_rec.prd11;
6053     ELSIF p_prd ='12' THEN
6054         l_amount := p_rec.prd12;
6055     ELSIF p_prd ='13' THEN
6056         l_amount := p_rec.prd13;
6057     ELSIF p_prd ='14' THEN
6058         l_amount := p_rec.prd14;
6059     ELSIF p_prd ='15' THEN
6060         l_amount := p_rec.prd15;
6061     ELSIF p_prd ='16' THEN
6062         l_amount := p_rec.prd16;
6063     ELSIF p_prd ='17' THEN
6064         l_amount := p_rec.prd17;
6065     ELSIF p_prd ='18' THEN
6066         l_amount := p_rec.prd18;
6067     ELSIF p_prd ='19' THEN
6068         l_amount := p_rec.prd19;
6069     ELSIF p_prd ='20' THEN
6070         l_amount := p_rec.prd20;
6071     ELSIF p_prd ='21' THEN
6072         l_amount := p_rec.prd21;
6073     ELSIF p_prd ='22' THEN
6074         l_amount := p_rec.prd22;
6075     ELSIF p_prd ='23' THEN
6076         l_amount := p_rec.prd23;
6077     ELSIF p_prd ='24' THEN
6078         l_amount := p_rec.prd24;
6079     ELSIF p_prd ='25' THEN
6080         l_amount := p_rec.prd25;
6081     ELSIF p_prd ='26' THEN
6082         l_amount := p_rec.prd26;
6083     ELSIF p_prd ='27' THEN
6084         l_amount := p_rec.prd27;
6085     ELSIF p_prd ='28' THEN
6086         l_amount := p_rec.prd28;
6087     ELSIF p_prd ='29' THEN
6088         l_amount := p_rec.prd29;
6089     ELSIF p_prd ='30' THEN
6090         l_amount := p_rec.prd30;
6091     ELSIF p_prd ='31' THEN
6092         l_amount := p_rec.prd31;
6093     ELSIF p_prd ='32' THEN
6094         l_amount := p_rec.prd32;
6095     ELSIF p_prd ='33' THEN
6096         l_amount := p_rec.prd33;
6097     ELSIF p_prd ='34' THEN
6098         l_amount := p_rec.prd34;
6099     ELSIF p_prd ='35' THEN
6100         l_amount := p_rec.prd35;
6101     ELSIF p_prd ='36' THEN
6102         l_amount := p_rec.prd36;
6103     ELSIF p_prd ='37' THEN
6104         l_amount := p_rec.prd37;
6105     ELSIF p_prd ='38' THEN
6106         l_amount := p_rec.prd38;
6107     ELSIF p_prd ='39' THEN
6108         l_amount := p_rec.prd39;
6109     ELSIF p_prd ='40' THEN
6110         l_amount := p_rec.prd40;
6111     ELSIF p_prd ='41' THEN
6112         l_amount := p_rec.prd41;
6113     ELSIF p_prd ='42' THEN
6114         l_amount := p_rec.prd42;
6115     ELSIF p_prd ='43' THEN
6116         l_amount := p_rec.prd43;
6117     ELSIF p_prd ='44' THEN
6118         l_amount := p_rec.prd44;
6119     ELSIF p_prd ='45' THEN
6120         l_amount := p_rec.prd45;
6121     ELSIF p_prd ='46' THEN
6122         l_amount := p_rec.prd46;
6123     ELSIF p_prd ='47' THEN
6124         l_amount := p_rec.prd47;
6125     ELSIF p_prd ='48' THEN
6126         l_amount := p_rec.prd48;
6127     ELSIF p_prd ='49' THEN
6128         l_amount := p_rec.prd49;
6129     ELSIF p_prd ='50' THEN
6130         l_amount := p_rec.prd50;
6131     ELSIF p_prd ='51' THEN
6132         l_amount := p_rec.prd51;
6133     ELSIF p_prd ='52' THEN
6134         l_amount := p_rec.prd52;
6135     END IF;
6136 
6137     IF l_debug_mode = 'Y' THEN
6138         pa_debug.reset_curr_function;
6139     END IF;
6140 
6141     RETURN l_amount;
6142 
6143 EXCEPTION
6144     WHEN OTHERS THEN
6145 
6146         FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
6147                               ,p_procedure_name  => 'get_amount_in_prd_x');
6148         IF l_debug_mode = 'Y' THEN
6149            pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
6150            pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
6151         END IF;
6152 
6153         IF l_debug_mode = 'Y' THEN
6154           pa_debug.reset_curr_function;
6155         END IF;
6156         RAISE;
6157 END get_amount_in_prd_x;
6158 
6159 --This API is internally called from prepare_pbl_input
6160 PROCEDURE get_total_fcst_amounts
6161 (p_project_id                 IN      pa_projects_all.project_id%TYPE,
6162  p_budget_version_id          IN      pa_budget_versions.budget_version_id%TYPE,
6163  p_task_id                    IN      pa_tasks.task_id%TYPE,
6164  p_resource_list_member_id    IN      pa_resource_list_members.resource_list_member_id%TYPE,
6165  p_cbs_element_id    		  IN      pa_resource_assignments.cbs_element_id%TYPE, -- cbs enhancement changes bug#16445106
6166  p_txn_currency_code          IN      pa_budget_lines.txn_currency_code%TYPE,
6167  p_line_start_date            IN      DATE,
6168  p_line_end_date              IN      DATE,
6169  p_prd_mask_st_date_tbl       IN      SYSTEM.pa_date_tbl_type,
6170  p_prd_mask_end_date_tbl      IN      SYSTEM.pa_date_tbl_type,
6171  p_st_index_in_prd_mask       IN      NUMBER,
6172  p_end_index_in_prd_mask      IN      NUMBER,
6173  p_etc_start_date             IN      DATE,
6174  p_etc_quantity               IN      NUMBER,
6175  p_fcst_quantity              IN      NUMBER,
6176  p_etc_raw_cost               IN      NUMBER,
6177  p_fcst_raw_cost              IN      NUMBER,
6178  p_etc_burd_cost              IN      NUMBER,
6179  p_fcst_burd_cost             IN      NUMBER,
6180  p_etc_revenue                IN      NUMBER,
6181  p_fcst_revenue               IN      NUMBER,
6182  px_cached_fcst_qty_tbl       IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6183  px_cached_fcst_raw_cost_tbl  IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6184  px_cached_fcst_burd_cost_tbl IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6185  px_cached_fcst_revenue_tbl   IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6186  px_cached_etc_qty_tbl        IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6187  px_cached_etc_raw_cost_tbl   IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6188  px_cached_etc_burd_cost_tbl  IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6189  px_cached_etc_revenue_tbl    IN  OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6190  x_total_quantity                 OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6191  x_total_raw_cost                 OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6192  x_total_burd_cost                OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6193  x_total_revenue                  OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6194  x_return_status                  OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
6195  x_msg_count                      OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6196  x_msg_data                       OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6197  )
6198  IS
6199 --Start of variables used for debugging
6200 l_return_status                       VARCHAR2(1);
6201 l_msg_count                           NUMBER := 0;
6202 l_msg_data                            VARCHAR2(2000);
6203 l_data                                VARCHAR2(2000);
6204 l_msg_index_out                       NUMBER;
6205 l_debug_mode                          VARCHAR2(30);
6206 l_module_name                         VARCHAR2(100):='PAFPWAPB.get_total_fcst_amounts';
6207 
6208 --End of variables used for debugging
6209 l_varchar_index                       VARCHAR2(50);
6210 l_amt_typs_to_be_populated_tbl        pa_plsql_datatypes.char30TabTyp;
6211 l_amt_typ_index                       NUMBER;
6212 l_amt_exists_flag                     VARCHAR2(1);
6213 l_existing_fcst_amount                NUMBER;
6214 l_existing_etc_amount                 NUMBER;
6215 l_entered_fcst_amount                 NUMBER;
6216 l_entered_etc_amount                  NUMBER;
6217 l_total_amount                        NUMBER;
6218 l_index                               NUMBER;
6219 l_fcst_qty_tbl                        pa_plsql_datatypes.numTabTyp;
6220 l_etc_qty_tbl                         pa_plsql_datatypes.numTabTyp;
6221 l_fcst_raw_cost_tbl                   pa_plsql_datatypes.numTabTyp;
6222 l_etc_raw_cost_tbl                    pa_plsql_datatypes.numTabTyp;
6223 l_fcst_burd_cost_tbl                  pa_plsql_datatypes.numTabTyp;
6224 l_etc_burd_cost_tbl                   pa_plsql_datatypes.numTabTyp;
6225 l_fcst_revenue_tbl                    pa_plsql_datatypes.numTabTyp;
6226 l_etc_revenue_tbl                     pa_plsql_datatypes.numTabTyp;
6227 l_txn_currency_code_tbl               pa_plsql_datatypes.char15TabTyp;
6228 l_start_date_tbl                      pa_plsql_datatypes.dateTabTyp;
6229 l_end_date_tbl                        pa_plsql_datatypes.dateTabTyp;
6230 l_Cbs_Enabled	  VARCHAR2(1) := 'N'; -- cbs enhancement changes bug#16445106
6231 BEGIN
6232     x_msg_count := 0;
6233     x_return_status := FND_API.G_RET_STS_SUCCESS;
6234 
6235     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
6236     l_debug_mode := NVL(l_debug_mode, 'Y');
6237 
6238 	--DEBUG_NS('p_project_id :: '|| p_project_id);
6239 
6240     -- Set curr function
6241     IF l_debug_mode='Y' THEN
6242 
6243         pa_debug.set_curr_function(
6244                     p_function   =>'PAFPWAPB.get_total_fcst_amounts'
6245                    ,p_debug_mode => l_debug_mode );
6246     END IF;
6247 
6248 	l_Cbs_Enabled := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => p_project_id);-- cbs enhancement changes bug#16445106
6249 
6250 	--DEBUG_NS('Inside get_total_fcst_amounts l_Cbs_Enabled :: '|| l_Cbs_Enabled);
6251 
6252     IF p_task_id                  IS NULL OR
6253        p_resource_list_member_id  IS NULL OR
6254        p_txn_currency_code        IS NULL OR
6255 	   ((l_Cbs_Enabled = 'Y' and p_cbs_element_id IS NULL) OR l_Cbs_Enabled = 'N') -- cbs enhancement changes bug#16445106
6256 	   THEN
6257 
6258         IF l_debug_mode = 'Y' THEN
6259 
6260             pa_debug.g_err_stage:='p_task_id is'|| p_task_id;
6261             pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6262 
6263             pa_debug.g_err_stage:='p_resource_list_member_id is'|| p_resource_list_member_id ;
6264             pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6265 
6266             pa_debug.g_err_stage:='p_txn_currency_code is'|| p_txn_currency_code;
6267             pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6268 
6269 
6270         END IF;
6271 
6272                    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6273                                         p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
6274                                         p_token1         => 'PROCEDURENAME',
6275                                         p_value1         => 'PAFPWAPB.get_total_fcst_amount',
6276                                         p_token2         => 'STAGE',
6277                                         p_value2         => '[Task, Rlm,Txn]'||'['||p_task_id||','||p_resource_list_member_id||','||p_txn_currency_code||']');
6278 
6279         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6280 
6281     END IF;
6282 
6283     IF p_line_start_date IS NOT NULL THEN
6284 
6285         IF p_line_end_date IS NULL OR
6286            p_prd_mask_st_date_tbl.COUNT <> p_prd_mask_end_date_tbl.COUNT OR
6287            p_st_index_in_prd_mask IS NULL OR
6288            p_end_index_in_prd_mask IS NULL THEN
6289 
6290            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6291                                 p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
6292                                 p_token1         => 'PROCEDURENAME',
6293                                 p_value1         => 'PAFPWAPB.get_total_fcst_amount',
6294                                 p_token2         => 'STAGE',
6295                                 p_value2         => 'Invalid Budget Level parameters');
6296 
6297             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6298 
6299         END IF;
6300 
6301     END IF;
6302 
6303     l_amt_typ_index:=0;
6304     IF p_etc_quantity  IS NULL AND
6305        p_fcst_quantity IS NULL THEN
6306 
6307         x_total_quantity := NULL;
6308 
6309     ELSIF p_etc_quantity  IS NULL AND
6310           p_fcst_quantity IS NOT NULL THEN
6311 
6312         x_total_quantity := p_fcst_quantity;
6313 
6314     ELSE
6315         l_amt_typ_index:=l_amt_typ_index+1;
6316         l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='QUANTITY';
6317     END IF;
6318 
6319     IF p_etc_raw_cost  IS NULL AND
6320        p_fcst_raw_cost IS NULL THEN
6321 
6322         x_total_raw_cost := NULL;
6323 
6324     ELSIF p_etc_raw_cost  IS NULL AND
6325           p_fcst_raw_cost IS NOT NULL THEN
6326 
6327         x_total_raw_cost := p_fcst_raw_cost;
6328 
6329     ELSE
6330         l_amt_typ_index:=l_amt_typ_index+1;
6331         l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='RAW_COST';
6332     END IF;
6333 
6334 
6335     IF  p_etc_burd_cost  IS NULL AND
6336         p_fcst_burd_cost IS NULL THEN
6337 
6338         x_total_burd_cost := NULL;
6339 
6340     ELSIF p_etc_burd_cost IS NULL AND
6341           p_fcst_burd_cost IS NOT NULL THEN
6342 
6343         x_total_burd_cost := p_fcst_burd_cost;
6344 
6345     ELSE
6346 
6347         l_amt_typ_index:=l_amt_typ_index+1;
6348         l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='BURDENED_COST';
6349 
6350     END IF;
6351 
6352 
6353     IF p_etc_revenue  IS NULL AND
6354        p_fcst_revenue IS NULL THEN
6355 
6356         x_total_revenue := NULL;
6357 
6358     ELSIF p_etc_revenue  IS NULL AND
6359           p_fcst_revenue IS NOT NULL THEN
6360 
6361         x_total_revenue := p_fcst_revenue;
6362 
6363     ELSE
6364         l_amt_typ_index:=l_amt_typ_index+1;
6365         l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='REVENUE';
6366     END IF;
6367 
6368     IF l_debug_mode = 'Y' THEN
6369         pa_debug.g_err_stage:='l_amt_typs_to_be_populated_tbl.COUNT '||l_amt_typs_to_be_populated_tbl.COUNT;
6370         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
6371     END IF;
6372 
6373 	--DEBUG_NS('l_amt_typs_to_be_populated_tbl.COUNT :: '|| l_amt_typs_to_be_populated_tbl.COUNT);
6374 
6375     IF l_amt_typs_to_be_populated_tbl.COUNT>0 THEN
6376 
6377         --Check if the details of the planning transactions for this resource assignment are already fetched or not.
6378         --If the details are already fetched then the RA index of px_cached_fcst_qty_tbl will contain the no. of
6379         --planning transactions/periodic lines for the RA.
6380         l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) ;
6381         IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6382 
6383             IF p_line_start_date IS NULL THEN
6384 
6385                 SELECT SUM(NVL(pbl.quantity,0)),
6386                        SUM(NVL(pbl.quantity,0)-NVL(pbl.init_quantity,0)),
6387                        SUM(NVL(pbl.txn_raw_cost,0)),
6388                        SUM(NVL(pbl.txn_raw_cost,0)-NVL(pbl.txn_init_raw_cost,0)),
6389                        SUM(NVL(pbl.txn_burdened_cost,0)),
6390                        SUM(NVL(pbl.txn_burdened_cost,0)-NVL(pbl.txn_init_burdened_cost,0)),
6391                        SUM(NVL(pbl.txn_revenue,0)),
6392                        SUM(NVL(pbl.txn_revenue,0)-NVL(txn_init_revenue,0)),
6393                        pbl.txn_currency_code
6394                 BULK COLLECT INTO
6395                        l_fcst_qty_tbl,
6396                        l_etc_qty_tbl,
6397                        l_fcst_raw_cost_tbl,
6398                        l_etc_raw_cost_tbl,
6399                        l_fcst_burd_cost_tbl,
6400                        l_etc_burd_cost_tbl,
6401                        l_fcst_revenue_tbl,
6402                        l_etc_revenue_tbl,
6403                        l_txn_currency_code_tbl
6404                 FROM   pa_budget_lines pbl,
6405                        pa_resource_assignments pra
6406                 WHERE  pra.budget_version_id=p_budget_version_id
6407                 AND    pra.project_id=p_project_id
6408                 AND    pra.task_id=p_task_id
6409                 AND    pra.resource_list_member_id=p_resource_list_member_id
6410 				AND    nvl(pra.cbs_element_id,-1)=nvl(p_cbs_element_id,-1) -- cbs enhancement changes bug#16445106
6411                 AND    pra.project_assignment_id=-1
6412                 AND    pbl.resource_assignment_id=pra.resource_assignment_id
6413                 GROUP BY pbl.txn_currency_code;
6414 
6415                 FOR i IN 1..l_txn_currency_code_tbl.COUNT LOOP
6416 
6417                     l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) || 'C' || l_txn_currency_code_tbl(i);
6418 
6419                     px_cached_fcst_qty_tbl(l_varchar_index)       := l_fcst_qty_tbl(i);
6420                     px_cached_etc_qty_tbl(l_varchar_index)        := l_etc_qty_tbl(i);
6421                     px_cached_fcst_raw_cost_tbl(l_varchar_index)  := l_fcst_raw_cost_tbl(i);
6422                     px_cached_etc_raw_cost_tbl(l_varchar_index)   := l_etc_raw_cost_tbl(i);
6423                     px_cached_fcst_burd_cost_tbl(l_varchar_index) := l_fcst_burd_cost_tbl(i);
6424                     px_cached_etc_burd_cost_tbl(l_varchar_index)  := l_etc_burd_cost_tbl(i);
6425                     px_cached_fcst_revenue_tbl(l_varchar_index)   := l_fcst_revenue_tbl(i);
6426                     px_cached_etc_revenue_tbl(l_varchar_index)    := l_etc_revenue_tbl(i);
6427 
6428                 END LOOP;
6429 
6430                 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) ;
6431                 px_cached_fcst_qty_tbl(l_varchar_index):=l_txn_currency_code_tbl.COUNT;
6432 
6433             ELSE--The layout is a periodic layout
6434 
6435                 SELECT NVL(pbl.quantity,0),
6436                        NVL(pbl.quantity,0)-NVL(pbl.init_quantity,0),
6437                        NVL(pbl.txn_raw_cost,0),
6438                        NVL(pbl.txn_raw_cost,0)-NVL(pbl.txn_init_raw_cost,0),
6439                        NVL(pbl.txn_burdened_cost,0),
6440                        NVL(pbl.txn_burdened_cost,0)-NVL(pbl.txn_init_burdened_cost,0),
6441                        NVL(pbl.txn_revenue,0),
6442                        NVL(pbl.txn_revenue,0)-NVL(txn_init_revenue,0),
6443                        pbl.txn_currency_code,
6444                        pbl.start_date,
6445                        pbl.end_date
6446                 BULK COLLECT INTO
6447                        l_fcst_qty_tbl,
6448                        l_etc_qty_tbl,
6449                        l_fcst_raw_cost_tbl,
6450                        l_etc_raw_cost_tbl,
6451                        l_fcst_burd_cost_tbl,
6452                        l_etc_burd_cost_tbl,
6453                        l_fcst_revenue_tbl,
6454                        l_etc_revenue_tbl,
6455                        l_txn_currency_code_tbl,
6456                        l_start_date_tbl,
6457                        l_end_date_tbl
6458                 FROM   pa_budget_lines pbl,
6459                        pa_resource_assignments pra
6460                 WHERE  pra.budget_version_id=p_budget_version_id
6461                 AND    pra.project_id=p_project_id
6462                 AND    pra.task_id=p_task_id
6463                 AND    pra.resource_list_member_id=p_resource_list_member_id
6464 				AND    nvl(pra.cbs_element_id,-1)=nvl(p_cbs_element_id,-1) -- cbs enhancement changes bug#16445106
6465                 AND    pra.project_assignment_id=-1
6466                 AND    pbl.resource_assignment_id=pra.resource_assignment_id
6467                 ORDER BY pbl.start_date,pbl.end_date,pbl.txn_currency_code;
6468 
6469 
6470                 l_index:=1;
6471                 FOR i IN p_st_index_in_prd_mask..p_end_index_in_prd_mask LOOP
6472 
6473                     IF l_start_date_tbl.COUNT < l_index THEN
6474 
6475                         EXIT;
6476 
6477                     END IF;
6478 
6479                     LOOP
6480 
6481                         EXIT WHEN l_start_date_tbl.COUNT < l_index OR
6482                                   l_start_date_tbl(l_index) NOT BETWEEN p_prd_mask_st_date_tbl(i) AND p_prd_mask_end_date_tbL(i);
6483 
6484                         l_varchar_index:=  'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id)
6485                                          ||'C' || l_txn_currency_code_tbl(l_index)
6486                                          ||'S' || TO_CHAR(p_prd_mask_st_date_tbl(i),'DD-MM-YYYY')
6487                                          ||'E' || TO_CHAR(p_prd_mask_end_date_tbl(i),'DD-MM-YYYY');
6488 
6489                         IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6490 
6491                             px_cached_fcst_qty_tbl(l_varchar_index)       := l_fcst_qty_tbl(l_index);
6492                             px_cached_etc_qty_tbl(l_varchar_index)        := l_etc_qty_tbl(l_index);
6493                             px_cached_fcst_raw_cost_tbl(l_varchar_index)  := l_fcst_raw_cost_tbl(l_index);
6494                             px_cached_etc_raw_cost_tbl(l_varchar_index)   := l_etc_raw_cost_tbl(l_index);
6495                             px_cached_fcst_burd_cost_tbl(l_varchar_index) := l_fcst_burd_cost_tbl(l_index);
6496                             px_cached_etc_burd_cost_tbl(l_varchar_index)  := l_etc_burd_cost_tbl(l_index);
6497                             px_cached_fcst_revenue_tbl(l_varchar_index)   := l_fcst_revenue_tbl(l_index);
6498                             px_cached_etc_revenue_tbl(l_varchar_index)    := l_etc_revenue_tbl(l_index);
6499 
6500                         ELSE
6501 
6502                             px_cached_fcst_qty_tbl(l_varchar_index)       := px_cached_fcst_qty_tbl(l_varchar_index) + l_fcst_qty_tbl(l_index);
6503                             px_cached_etc_qty_tbl(l_varchar_index)        := px_cached_etc_qty_tbl(l_varchar_index) + l_etc_qty_tbl(l_index);
6504                             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);
6505                             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);
6506                             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);
6507                             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);
6508                             px_cached_fcst_revenue_tbl(l_varchar_index)   := px_cached_fcst_revenue_tbl(l_varchar_index)+l_fcst_revenue_tbl(l_index);
6509                             px_cached_etc_revenue_tbl(l_varchar_index)    := px_cached_etc_revenue_tbl(l_varchar_index)+l_etc_revenue_tbl(l_index);
6510 
6511                         END IF;
6512 
6513                         l_index:=l_index+1;
6514 
6515                     END LOOP;--For the budget lines
6516 
6517 
6518                 END LOOP;--FOR i IN p_st_index_in_prd_mask..p_end_index_in_prd_mask LOOP
6519 
6520                 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) ;
6521                 px_cached_fcst_qty_tbl(l_varchar_index):=px_cached_fcst_qty_tbl.COUNT;
6522 
6523 
6524             END IF;----The layout is a periodic layout
6525 
6526 
6527         END IF;--IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6528 
6529         IF p_line_start_date IS NULL THEN
6530             l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) || 'C' || p_txn_currency_code;
6531         ELSE
6532             l_varchar_index:=  'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id)
6533                              ||'C' || p_txn_currency_code
6534                              ||'S' || TO_CHAR(p_line_start_date,'DD-MM-YYYY')
6535                              ||'E' || TO_CHAR(p_line_end_date,'DD-MM-YYYY');
6536         END IF;
6537         --log1('1 l_varchar_index '||l_varchar_index);
6538         --log1('2 p_fcst_quantity '||p_fcst_quantity);
6539         --log1('3 p_etc_quantity '||p_etc_quantity);
6540         --log1('4 p_line_start_date '||p_line_start_date);
6541         --log1('5 p_line_end_date '||p_line_end_date);
6542 
6543         FOR i IN 1..l_amt_typs_to_be_populated_tbl.COUNT LOOP
6544 
6545             l_entered_fcst_amount:=NULL;
6546             l_entered_etc_amount:=NULL;
6547             l_existing_fcst_amount:=NULL;
6548             l_existing_etc_amount:=NULL;
6549             l_amt_exists_flag:='N';
6550             l_total_amount:=NULL;
6551 
6552             IF l_amt_typs_to_be_populated_tbl(i)='QUANTITY' THEN
6553 
6554                 l_entered_fcst_amount:=p_fcst_quantity;
6555                 l_entered_etc_amount :=p_etc_quantity;
6556 
6557                 --Budget lines for the planning transaction do not exist
6558                 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6559 
6560                     l_amt_exists_flag:='N';
6561 
6562                 ELSE
6563 
6564                     l_amt_exists_flag:='Y';
6565                     l_existing_fcst_amount:=px_cached_fcst_qty_tbl(l_varchar_index);
6566                     l_existing_etc_amount:=px_cached_etc_qty_tbl(l_varchar_index);
6567 
6568                 END IF;
6569 
6570             ELSIF l_amt_typs_to_be_populated_tbl(i)='RAW_COST' THEN
6571 
6572                 l_entered_fcst_amount:=p_fcst_raw_cost;
6573                 l_entered_etc_amount :=p_etc_raw_cost;
6574 
6575                 --Budget lines for the planning transaction do not exist
6576                 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6577 
6578                     l_amt_exists_flag:='N';
6579 
6580                 ELSE
6581 
6582                     l_amt_exists_flag:='Y';
6583                     l_existing_fcst_amount:=px_cached_fcst_raw_cost_tbl(l_varchar_index);
6584                     l_existing_etc_amount:=px_cached_etc_raw_cost_tbl(l_varchar_index);
6585 
6586                 END IF;
6587 
6588             ELSIF l_amt_typs_to_be_populated_tbl(i)='BURDENED_COST' THEN
6589 
6590                 l_entered_fcst_amount:=p_fcst_burd_cost;
6591                 l_entered_etc_amount :=p_etc_burd_cost;
6592 
6593                 --Budget lines for the planning transaction do not exist
6594                 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6595 
6596                     l_amt_exists_flag:='N';
6597 
6598                 ELSE
6599 
6600                     l_amt_exists_flag:='Y';
6601                     l_existing_fcst_amount:=px_cached_fcst_burd_cost_tbl(l_varchar_index);
6602                     l_existing_etc_amount:=px_cached_etc_burd_cost_tbl(l_varchar_index);
6603 
6604                 END IF;
6605 
6606             ELSIF l_amt_typs_to_be_populated_tbl(i)='REVENUE' THEN
6607 
6608                 l_entered_fcst_amount:=p_fcst_revenue;
6609                 l_entered_etc_amount :=p_etc_revenue;
6610 
6611                 --Budget lines for the planning transaction do not exist
6612                 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6613 
6614                     l_amt_exists_flag:='N';
6615 
6616                 ELSE
6617 
6618                     l_amt_exists_flag:='Y';
6619                     l_existing_fcst_amount:=px_cached_fcst_revenue_tbl(l_varchar_index);
6620                     l_existing_etc_amount:=px_cached_etc_revenue_tbl(l_varchar_index);
6621 
6622                 END IF;
6623 
6624             END IF;
6625             --log1('6 l_amt_exists_flag '||l_amt_exists_flag);
6626             --log1('7 l_entered_fcst_amount '||l_entered_fcst_amount);
6627             --log1('8 l_entered_etc_amount '||l_entered_etc_amount);
6628 
6629             IF l_amt_exists_flag='N' THEN
6630 
6631                 --IF forecast is not g miss num then it should be considered. Note that g miss num
6632                 --will be there if NULL is entered in the layout.
6633                 IF l_entered_fcst_amount IS NOT NULL  AND
6634                    l_entered_fcst_amount <> l_fnd_miss_num THEN
6635 
6636                     l_total_amount:=l_entered_fcst_amount;
6637 
6638                 --IF ETC is not g miss num then it should be considered. Note that g miss num
6639                 --will be there if NULL is entered in the layout.
6640                 ELSIF l_entered_etc_amount IS NOT NULL  AND
6641                       l_entered_etc_amount <> l_fnd_miss_num THEN
6642 
6643                     l_total_amount:=l_entered_etc_amount;
6644 
6645                 ELSE
6646 
6647                     l_total_amount:=NULL;
6648 
6649                 END IF;
6650 
6651             --Budget lines for the planning transaction  exist
6652             ELSE
6653 
6654                 IF l_existing_fcst_amount IS NULL AND
6655                    l_entered_fcst_amount  IS NOT NULL AND
6656                    l_entered_fcst_amount <> l_fnd_miss_num  THEN
6657 
6658                     l_total_amount:=l_entered_fcst_amount;
6659 
6660                 ELSIF l_existing_fcst_amount IS NOT NULL AND
6661                       l_entered_fcst_amount  IS NOT NULL AND
6662                       l_entered_fcst_amount <> l_existing_fcst_amount  THEN
6663 
6664                     l_total_amount:=l_entered_fcst_amount;
6665 
6666                 ELSIF l_existing_etc_amount IS NULL AND
6667                       l_entered_etc_amount IS NOT NULL AND
6668                       l_entered_etc_amount <> l_fnd_miss_num  THEN
6669 
6670                     l_total_amount:=l_entered_etc_amount + NVL(l_existing_fcst_amount,0) - NVL(l_existing_etc_amount,0);
6671 
6672                 ELSIF l_existing_etc_amount IS NOT NULL AND
6673                       l_entered_etc_amount IS NOT NULL AND
6674                       l_entered_etc_amount <> l_existing_etc_amount  THEN
6675 
6676                     l_total_amount:=l_entered_etc_amount + NVL(l_existing_fcst_amount,0) - NVL(l_existing_etc_amount,0);
6677 
6678                 ELSE
6679 
6680                     l_total_amount:=NULL;
6681 
6682                 END IF;
6683 
6684             END IF;--IF l_amt_exists_flag='N' THEN
6685 
6686             --Assign the above derived total amount to the appropriate OUT variable
6687             IF l_amt_typs_to_be_populated_tbl(i)='QUANTITY' THEN
6688 
6689                 x_total_quantity:=l_total_amount;
6690 
6691             ELSIF l_amt_typs_to_be_populated_tbl(i)='RAW_COST' THEN
6692 
6693                 x_total_raw_cost:=l_total_amount;
6694 
6695             ELSIF l_amt_typs_to_be_populated_tbl(i)='BURDENED_COST' THEN
6696 
6697                 x_total_burd_cost:=l_total_amount;
6698 
6699             ELSIF l_amt_typs_to_be_populated_tbl(i)='REVENUE' THEN
6700 
6701                 x_total_revenue:=l_total_amount;
6702 
6703             END IF;
6704 
6705         END LOOP;--FOR i IN 1..l_amt_typs_to_be_populated_tbl.COUNT LOOP
6706 
6707     END IF;--IF l_amt_typs_to_be_populated_tbl.COUNT>0 THEN
6708 
6709     IF l_debug_mode = 'Y' THEN
6710         pa_debug.g_err_stage:='Leaving get_total_fcst_amounts';
6711         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
6712         pa_debug.reset_curr_function;
6713     END IF;
6714 
6715 EXCEPTION
6716 
6717    WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
6718        l_msg_count := FND_MSG_PUB.count_msg;
6719        IF l_msg_count = 1 THEN
6720            PA_INTERFACE_UTILS_PUB.get_messages
6721                  (p_encoded        => FND_API.G_TRUE
6722                   ,p_msg_index      => 1
6723                   ,p_msg_count      => l_msg_count
6724                   ,p_msg_data       => l_msg_data
6725                   ,p_data           => l_data
6726                   ,p_msg_index_out  => l_msg_index_out);
6727 
6728            x_msg_data := l_data;
6729            x_msg_count := l_msg_count;
6730        ELSE
6731            x_msg_count := l_msg_count;
6732        END IF;
6733        x_return_status := FND_API.G_RET_STS_ERROR;
6734 
6735        IF l_debug_mode = 'Y' THEN
6736            pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
6737            pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6738            -- reset curr function
6739            pa_debug.reset_curr_function();
6740 
6741        END IF;
6742 
6743        RETURN;
6744    WHEN OTHERS THEN
6745        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6746        x_msg_count     := 1;
6747        x_msg_data      := SQLERRM;
6748 
6749        FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'pa_fp_webadi_pkg'
6750                                ,p_procedure_name  => 'get_total_fcst_amounts');
6751 
6752        IF l_debug_mode = 'Y' THEN
6753            pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
6754            pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6755           -- reset curr function
6756            pa_debug.Reset_Curr_Function();
6757        END IF;
6758        RAISE;
6759 
6760 END get_total_fcst_amounts;
6761 
6762 --This is a private API called from Switcher API. This API assumes that the data exists
6763 --in pa_fp_webadi_upload_inf table and this data has been already validated.
6764 
6765 --Note: p_budget_lines_tbl contains records ordered by task id, resource alias and curr. This
6766 --API assumes that there exists only one record for an RA/TXN Currency Code in p_budget_lines_tbl
6767 
6768 --p_prd_mask_st/end_date_tbl contains the start/end dates of flexible periods in the period mask. If period mask contains
6769 --10 elements then elements between 1 t0 10 will contain start/end dates of the flexible periods in the mask.
6770 --p_first_pd_bf_pm_en_dt contains the end date of the period that immediately preceeds the first period in the period mask
6771 --and it will be used as the end date if the amounts are entered in preceeding bucket
6772 --p_last_pd_af_pm_st_dt contains the start date of the period that immediately succeeds the last period in the period mask
6773 --and it will be used as the start date if the amounts are entered in preceeding bucket
6774 
6775 PROCEDURE prepare_pbl_input
6776 (p_context                         IN    VARCHAR2,
6777  p_run_id                          IN    pa_fp_webadi_upload_inf.run_id%TYPE,
6778  p_request_id                      IN    pa_budget_versions.request_id%TYPE    DEFAULT  NULL,
6779  p_inf_tbl_rec_tbl                 IN    inf_cur_tbl_typ,
6780  p_version_info_rec                IN    pa_fp_gen_amount_utils.fp_cols,
6781  p_project_id                      IN    pa_projects_all.project_id%TYPE,
6782  p_budget_version_id               IN    pa_budget_versions.budget_version_id%TYPE,
6783  p_budget_lines_tbl                IN    PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE,
6784  p_ra_id_tbl                       IN    SYSTEM.pa_num_tbl_type,
6785  p_etc_start_date                  IN    pa_budget_versions.etc_start_date%TYPE,
6786  p_plan_class_code                 IN    pa_fin_plan_types_b.plan_class_code%TYPE,
6787  p_first_pd_bf_pm_en_dt            IN    DATE,
6788  p_last_pd_af_pm_st_dt             IN    DATE,
6789  p_prd_mask_st_date_tbl            IN    SYSTEM.pa_date_tbl_type,
6790  p_prd_mask_end_date_tbl           IN    SYSTEM.pa_date_tbl_type,
6791  p_planning_start_date_tbl         IN    SYSTEM.pa_date_tbl_type,
6792  p_planning_end_date_tbl           IN    SYSTEM.pa_date_tbl_type,
6793  p_etc_quantity_tbl                IN    SYSTEM.pa_num_tbl_type,
6794  p_etc_raw_cost_tbl                IN    SYSTEM.pa_num_tbl_type,
6795  p_etc_burdened_cost_tbl           IN    SYSTEM.pa_num_tbl_type,
6796  p_etc_revenue_tbl                 IN    SYSTEM.pa_num_tbl_type,
6797  p_raw_cost_rate_tbl               IN    SYSTEM.pa_num_tbl_type,
6798  p_burd_cost_rate_tbl              IN    SYSTEM.pa_num_tbl_type,
6799  p_bill_rate_tbl                   IN    SYSTEM.pa_num_tbl_type,
6800  p_spread_curve_id_tbl             IN    SYSTEM.pa_num_tbl_type,
6801  p_mfc_cost_type_id_tbl            IN    SYSTEM.pa_num_tbl_type,
6802  p_etc_method_code_tbl             IN    SYSTEM.pa_varchar2_30_tbl_type ,
6803  p_sp_fixed_date_tbl               IN    SYSTEM.pa_date_tbl_type,
6804  p_res_class_code_tbl              IN    SYSTEM.pa_varchar2_30_tbl_type ,
6805  p_rate_based_flag_tbl             IN    SYSTEM.pa_varchar2_1_tbl_type ,
6806  p_rbs_elem_id_tbl                 IN    SYSTEM.pa_num_tbl_type,
6807  p_cbs_elem_id_tbl                 IN    SYSTEM.pa_num_tbl_type, -- cbs enhancement changes bug#16445106
6808  p_delete_flag_tbl                 IN    SYSTEM.pa_varchar2_1_tbl_type ,
6809  x_task_id_tbl                     OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6810  x_rlm_id_tbl                      OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6811  x_cbs_element_id_tbl              OUT   NOCOPY SYSTEM.pa_num_tbl_type, -- cbs enhancement changes bug#16445106
6812  x_ra_id_tbl                       OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6813  x_txn_currency_code_tbl           OUT   NOCOPY SYSTEM.pa_varchar2_15_tbl_type , --File.Sql.39 bug 4440895
6814  x_planning_start_date_tbl         OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6815  x_planning_end_date_tbl           OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6816  x_total_qty_tbl                   OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6817  x_total_raw_cost_tbl              OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6818  x_total_burdened_cost_tbl         OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6819  x_total_revenue_tbl               OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6820  x_raw_cost_rate_tbl               OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6821  x_burdened_cost_rate_tbl          OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6822  x_bill_rate_tbl                   OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6823  x_line_start_date_tbl             OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6824  x_line_end_date_tbl               OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6825  x_proj_cost_rate_type_tbl         OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6826  x_proj_cost_rate_date_type_tbl    OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6827  x_proj_cost_rate_tbl              OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6828  x_proj_cost_rate_date_tbl         OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6829  x_proj_rev_rate_type_tbl          OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6830  x_proj_rev_rate_date_type_tbl     OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6831  x_proj_rev_rate_tbl               OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6832  x_proj_rev_rate_date_tbl          OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6833  x_pfunc_cost_rate_type_tbl        OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6834  x_pfunc_cost_rate_date_typ_tbl    OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6835  x_pfunc_cost_rate_tbl             OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6836  x_pfunc_cost_rate_date_tbl        OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6837  x_pfunc_rev_rate_type_tbl         OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6838  x_pfunc_rev_rate_date_type_tbl    OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6839  x_pfunc_rev_rate_tbl              OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6840  x_pfunc_rev_rate_date_tbl         OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6841  x_delete_flag_tbl                 OUT   NOCOPY SYSTEM.pa_varchar2_1_tbl_type, --File.Sql.39 bug 4440895
6842  x_spread_curve_id_tbl             OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6843  x_mfc_cost_type_id_tbl            OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6844  x_etc_method_code_tbl             OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6845  x_sp_fixed_date_tbl               OUT   NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6846  x_res_class_code_tbl              OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6847  x_rate_based_flag_tbl             OUT   NOCOPY SYSTEM.pa_varchar2_1_tbl_type , --File.Sql.39 bug 4440895
6848  x_rbs_elem_id_tbl                 OUT   NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6849  x_change_reason_code_tbl          OUT   NOCOPY SYSTEM.pa_varchar2_30_tbl_type, --File.Sql.39 bug 4440895
6850  x_description_tbl                 OUT   NOCOPY SYSTEM.pa_varchar2_2000_tbl_type, --File.Sql.39 bug 4440895
6851  x_return_status                   OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
6852  x_msg_count                       OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
6853  x_msg_data                        OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6854 )
6855 IS
6856 -- variables used for debugging
6857 l_module_name                   VARCHAR2(100) := 'pa_fp_webadi_pkg.prepare_pbl_input';
6858 l_debug_mode                    VARCHAR2(1) := 'N';
6859 l_debug_level3                  CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
6860 l_debug_level5                  CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
6861 
6862 l_msg_count                     NUMBER;
6863 l_msg_data                      VARCHAR2(2000);
6864 l_data                          VARCHAR2(2000);
6865 l_msg_index_out                 NUMBER;
6866 
6867 --Variable used in processing
6868 l_prev_task_id                  NUMBER;
6869 l_prev_rlm_id                   NUMBER;
6870 l_prev_cbs_element_id           NUMBER;-- cbs enhancement changes bug#16445106
6871 l_prev_txn_curr_code            pa_budget_lines.txn_currency_code%TYPE;
6872 l_bl_index                      NUMBER;
6873 l_st_index_in_prd_mask          NUMBER;
6874 l_end_index_in_prd_mask         NUMBER;
6875 l_sd_prd_exists_flag            VARCHAR2(1);
6876 l_pd_prd_exists_flag            VARCHAR2(1);
6877 l_num_of_prds_for_plan_txn      NUMBER;
6878 l_extend_pbl_out_tbls_flag      VARCHAR2(1);
6879 l_prev_pbl_tbl_count            NUMBER;
6880 l_amount                        NUMBER;
6881 l_prd_index                     VARCHAR2(2);
6882 l_tmp_index                     NUMBER;
6883 l_plan_txn_attrs_copied_flag    VARCHAR2(1);
6884 
6885 kk                              NUMBER;
6886 l_g_miss_char   CONSTANT        VARCHAR(1)  := FND_API.G_MISS_CHAR;
6887 l_g_miss_num    CONSTANT        NUMBER      := FND_API.G_MISS_NUM;
6888 l_g_miss_date   CONSTANT        DATE        := FND_API.G_MISS_DATE;
6889 
6890 l_curr_rec                      inf_tbl_data_csr%ROWTYPE;
6891 
6892 l_cached_fcst_qty_tbl           varchar_70_indexed_num_tbl_typ;
6893 l_cached_fcst_raw_cost_tbl      varchar_70_indexed_num_tbl_typ;
6894 l_cached_fcst_burd_cost_tbl     varchar_70_indexed_num_tbl_typ;
6895 l_cached_fcst_revenue_tbl       varchar_70_indexed_num_tbl_typ;
6896 l_cached_etc_qty_tbl            varchar_70_indexed_num_tbl_typ;
6897 l_cached_etc_raw_cost_tbl       varchar_70_indexed_num_tbl_typ;
6898 l_cached_etc_burd_cost_tbl      varchar_70_indexed_num_tbl_typ;
6899 l_cached_etc_revenue_tbl        varchar_70_indexed_num_tbl_typ;
6900 l_tmp_quantity                  NUMBER;
6901 l_tmp_raw_cost                  NUMBER;
6902 l_tmp_burd_cost                 NUMBER;
6903 l_tmp_revenue                   NUMBER;
6904 l_allow_qty_flag                VARCHAR2(1);
6905 l_skip_ra_flag                  VARCHAR2(1);
6906 l_skip_task_id                  pa_resource_assignments.task_id%TYPE;
6907 l_skip_rlm_id                   pa_resource_assignments.resource_list_member_id%TYPE;
6908 l_skip_cbs_element_id           pa_resource_assignments.cbs_element_id%TYPE;-- cbs enhancement changes bug#16445106
6909 
6910 l_Cbs_Enabled	  VARCHAR2(1) := 'N'; -- cbs enhancement changes bug#16445106
6911 
6912 
6913 --These tbls will be prepared in this manner
6914 ----First element is for the proceeding bucket . Next p_prd_mask_st_date_tbl.COUNT buckets will contain
6915 ----start/end dates of the periods in the period mask. Last element will be for the succeeding bucket.
6916 l_prd_mask_st_date_tbl          SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
6917 l_prd_mask_end_date_tbl         SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
6918 
6919 tt                              NUMBER;
6920 
6921 BEGIN
6922     fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
6923 
6924     x_return_status := FND_API.G_RET_STS_SUCCESS;
6925     x_msg_count := 0;
6926 
6927     IF l_debug_mode = 'Y' THEN
6928           pa_debug.Set_Curr_Function
6929                       (p_function   => l_module_name,
6930                        p_debug_mode => l_debug_mode);
6931     END IF;
6932 
6933     IF l_debug_mode = 'Y' THEN
6934           pa_debug.g_err_stage := 'Entering into prepare_pbl_input';
6935           pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
6936           pa_debug.g_err_stage := 'Validating input parameters';
6937           pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
6938     END IF;
6939 
6940 
6941     -- valid p_context are WEBADI_PERIODIC and WEBADI_NON_PERIODIC
6942     IF p_context IS NULL THEN
6943         IF l_debug_mode = 'Y' THEN
6944            pa_debug.g_err_stage := 'p_context is passed as null';
6945            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
6946         END IF;
6947         pa_utils.add_message(p_app_short_name => 'PA',
6948                            p_msg_name         => 'PA_FP_INV_PARAM_PASSED',
6949                            p_token1           => 'PROCEDURENAME',
6950                            p_value1           => l_module_name);
6951 
6952         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6953     END IF;
6954 
6955     --If there are no records to process return
6956     IF p_budget_lines_tbl.COUNT=0 THEN
6957 
6958         IF l_debug_mode = 'Y' THEN
6959            pa_debug.g_err_stage := 'p_budget_lines_tbl is empty';
6960            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6961            pa_debug.reset_curr_function;
6962         END IF;
6963         RETURN;
6964 
6965     END IF;
6966 
6967 	l_Cbs_Enabled := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => p_project_id);-- cbs enhancement changes bug#16445106
6968 
6969 	--DEBUG_NS('Inside prepare_pbl_input l_Cbs_Enabled :: ' || l_Cbs_Enabled);
6970 	--DEBUG_NS('p_cbs_elem_id_tbl.COUNT :: ' || p_cbs_elem_id_tbl.COUNT);
6971 
6972     --log1('-p_planning_start_date_tbl.COUNT- ' || p_planning_start_date_tbl.COUNT);
6973     --log1('-p_planning_end_date_tbl.COUNT- ' || p_planning_end_date_tbl.COUNT);
6974     --log1('-p_budget_lines_tbl.COUNT- ' || p_budget_lines_tbl.COUNT);
6975     --log1('-p_raw_cost_rate_tbl.COUNT- ' || p_raw_cost_rate_tbl.COUNT);
6976     --log1('-p_burd_cost_rate_tbl.COUNT- ' || p_burd_cost_rate_tbl.COUNT);
6977     --log1('-p_bill_rate_tbl.COUNT- ' || p_bill_rate_tbl.COUNT);
6978     --log1('-p_spread_curve_id_tbl.COUNT- ' || p_spread_curve_id_tbl.COUNT);
6979     --log1('-p_etc_method_code_tbl.COUNT- ' || p_etc_method_code_tbl.COUNT);
6980     --log1('-p_sp_fixed_date_tbl.COUNT- ' || p_sp_fixed_date_tbl.COUNT);
6981     --log1('-p_delete_flag_tbl.COUNT- ' || p_delete_flag_tbl.COUNT);
6982     --log1('-p_mfc_cost_type_id_tbl.COUNT- ' || p_mfc_cost_type_id_tbl.COUNT);
6983 
6984     --log1('-p_budget_lines_tbl(1).quantity- ' || p_budget_lines_tbl(1).quantity);
6985     --log1('-p_budget_lines_tbl(1).raw_cost- ' || p_budget_lines_tbl(1).raw_cost);
6986     --log1('-p_budget_lines_tbl(1).burdened_cost- ' || p_budget_lines_tbl(1).burdened_cost);
6987     --log1('-p_budget_lines_tbl(1).revenue- ' || p_budget_lines_tbl(1).revenue);
6988 
6989     IF p_planning_start_date_tbl.COUNT <> p_planning_end_date_tbl.COUNT OR
6990        p_planning_start_date_tbl.COUNT <> p_budget_lines_tbl.COUNT      OR
6991        p_planning_start_date_tbl.COUNT <> p_raw_cost_rate_tbl.COUNT     OR
6992        p_planning_start_date_tbl.COUNT <> p_burd_cost_rate_tbl.COUNT    OR
6993        p_planning_start_date_tbl.COUNT <> p_bill_rate_tbl.COUNT         OR
6994        p_planning_start_date_tbl.COUNT <> p_spread_curve_id_tbl.COUNT   OR
6995        p_planning_start_date_tbl.COUNT <> p_mfc_cost_type_id_tbl.COUNT  OR
6996        p_planning_start_date_tbl.COUNT <> p_etc_method_code_tbl.COUNT   OR
6997        p_planning_start_date_tbl.COUNT <> p_sp_fixed_date_tbl.COUNT     OR
6998        p_planning_start_date_tbl.COUNT <> p_delete_flag_tbl.COUNT       OR
6999        p_planning_start_date_tbl.COUNT <> p_ra_id_tbl.COUNT             OR
7000        p_planning_start_date_tbl.COUNT <> p_res_class_code_tbl.COUNT    OR
7001        p_planning_start_date_tbl.COUNT <> p_rate_based_flag_tbl.COUNT   OR
7002        p_planning_start_date_tbl.COUNT <> p_rbs_elem_id_tbl.COUNT       OR
7003 	   p_planning_start_date_tbl.COUNT <> p_cbs_elem_id_tbl.COUNT       THEN
7004 
7005 
7006         IF l_debug_mode = 'Y' THEN
7007 
7008            pa_debug.g_err_stage := ' p_planning_start_date_tbl.COUNT '|| p_planning_start_date_tbl.COUNT;
7009            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7010 
7011            pa_debug.g_err_stage := ' p_planning_end_date_tbl.COUNT '|| p_planning_end_date_tbl.COUNT;
7012            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7013 
7014            pa_debug.g_err_stage := ' p_budget_lines_tbl.COUNT '|| p_budget_lines_tbl.COUNT;
7015            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7016 
7017            pa_debug.g_err_stage := ' p_raw_cost_rate_tbl.COUNT '|| p_raw_cost_rate_tbl.COUNT;
7018            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7019 
7020            pa_debug.g_err_stage := ' p_burd_cost_rate_tbl.COUNT '|| p_burd_cost_rate_tbl.COUNT;
7021            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7022 
7023            pa_debug.g_err_stage := ' p_bill_rate_tbl.COUNT '|| p_bill_rate_tbl.COUNT;
7024            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7025 
7026            pa_debug.g_err_stage := ' p_spread_curve_id_tbl.COUNT '|| p_spread_curve_id_tbl.COUNT;
7027            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7028 
7029            pa_debug.g_err_stage := ' p_mfc_cost_type_id_tbl.COUNT '|| p_mfc_cost_type_id_tbl.COUNT;
7030            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7031 
7032            pa_debug.g_err_stage := ' p_etc_method_code_tbl.COUNT '|| p_etc_method_code_tbl.COUNT;
7033            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7034 
7035            pa_debug.g_err_stage := ' p_sp_fixed_date_tbl.COUNT '|| p_sp_fixed_date_tbl.COUNT;
7036            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7037 
7038            pa_debug.g_err_stage := ' p_delete_flag_tbl.COUNT '|| p_delete_flag_tbl.COUNT;
7039            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7040 
7041            pa_debug.g_err_stage := ' p_ra_id_tbl.COUNT '|| p_ra_id_tbl.COUNT;
7042            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7043 
7044            pa_debug.g_err_stage := ' p_res_class_code_tbl.COUNT '|| p_res_class_code_tbl.COUNT;
7045            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7046 
7047            pa_debug.g_err_stage := ' p_rate_based_flag_tbl.COUNT '|| p_rate_based_flag_tbl.COUNT;
7048            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7049 
7050            pa_debug.g_err_stage := ' p_rbs_elem_id_tbl.COUNT '|| p_rbs_elem_id_tbl.COUNT;
7051            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7052 
7053 		   pa_debug.g_err_stage := ' p_cbs_elem_id_tbl.COUNT '|| p_cbs_elem_id_tbl.COUNT;
7054            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7055 
7056         END IF;
7057         pa_utils.add_message(p_app_short_name => 'PA',
7058                            p_msg_name         => 'PA_FP_INV_PARAM_PASSED',
7059                            p_token1           => 'PROCEDURENAME',
7060                            p_value1           => l_module_name);
7061 
7062         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7063 
7064     END IF;
7065     --log1('----- STAGE 1-------');
7066     l_prev_pbl_tbl_count :=0;
7067     l_skip_ra_flag:='N';
7068 
7069 
7070     x_task_id_tbl                     :=   SYSTEM.pa_num_tbl_type();
7071     x_rlm_id_tbl                      :=   SYSTEM.pa_num_tbl_type();
7072 	x_cbs_element_id_tbl              :=   SYSTEM.pa_num_tbl_type(); -- cbs enhancement changes bug#16445106
7073     x_ra_id_tbl                       :=   SYSTEM.pa_num_tbl_type();
7074     x_txn_currency_code_tbl           :=   SYSTEM.pa_varchar2_15_tbl_type();
7075     x_planning_start_date_tbl         :=   SYSTEM.pa_date_tbl_type();
7076     x_planning_end_date_tbl           :=   SYSTEM.pa_date_tbl_type();
7077     x_total_qty_tbl                   :=   SYSTEM.pa_num_tbl_type();
7078     x_total_raw_cost_tbl              :=   SYSTEM.pa_num_tbl_type();
7079     x_total_burdened_cost_tbl         :=   SYSTEM.pa_num_tbl_type();
7080     x_total_revenue_tbl               :=   SYSTEM.pa_num_tbl_type();
7081     x_raw_cost_rate_tbl               :=   SYSTEM.pa_num_tbl_type();
7082     x_burdened_cost_rate_tbl          :=   SYSTEM.pa_num_tbl_type();
7083     x_bill_rate_tbl                   :=   SYSTEM.pa_num_tbl_type();
7084     x_line_start_date_tbl             :=   SYSTEM.pa_date_tbl_type();
7085     x_line_end_date_tbl               :=   SYSTEM.pa_date_tbl_type();
7086     x_proj_cost_rate_type_tbl         :=   SYSTEM.pa_varchar2_30_tbl_type();
7087     x_proj_cost_rate_date_type_tbl    :=   SYSTEM.pa_varchar2_30_tbl_type();
7088     x_proj_cost_rate_tbl              :=   SYSTEM.pa_num_tbl_type();
7089     x_proj_cost_rate_date_tbl         :=   SYSTEM.pa_date_tbl_type();
7090     x_proj_rev_rate_type_tbl          :=   SYSTEM.pa_varchar2_30_tbl_type();
7091     x_proj_rev_rate_date_type_tbl     :=   SYSTEM.pa_varchar2_30_tbl_type();
7092     x_proj_rev_rate_tbl               :=   SYSTEM.pa_num_tbl_type();
7093     x_proj_rev_rate_date_tbl          :=   SYSTEM.pa_date_tbl_type();
7094     x_pfunc_cost_rate_type_tbl        :=   SYSTEM.pa_varchar2_30_tbl_type();
7095     x_pfunc_cost_rate_date_typ_tbl    :=   SYSTEM.pa_varchar2_30_tbl_type();
7096     x_pfunc_cost_rate_tbl             :=   SYSTEM.pa_num_tbl_type();
7097     x_pfunc_cost_rate_date_tbl        :=   SYSTEM.pa_date_tbl_type();
7098     x_pfunc_rev_rate_type_tbl         :=   SYSTEM.pa_varchar2_30_tbl_type();
7099     x_pfunc_rev_rate_date_type_tbl    :=   SYSTEM.pa_varchar2_30_tbl_type();
7100     x_pfunc_rev_rate_tbl              :=   SYSTEM.pa_num_tbl_type();
7101     x_pfunc_rev_rate_date_tbl         :=   SYSTEM.pa_date_tbl_type();
7102     x_delete_flag_tbl                 :=   SYSTEM.pa_varchar2_1_tbl_type();
7103     x_spread_curve_id_tbl             :=   SYSTEM.pa_num_tbl_type();
7104     x_mfc_cost_type_id_tbl            :=   SYSTEM.pa_num_tbl_type();
7105     x_etc_method_code_tbl             :=   SYSTEM.pa_varchar2_30_tbl_type();
7106     x_sp_fixed_date_tbl               :=   SYSTEM.pa_date_tbl_type();
7107     x_res_class_code_tbl              :=   SYSTEM.pa_varchar2_30_tbl_type();
7108     x_rate_based_flag_tbl             :=   SYSTEM.pa_varchar2_1_tbl_type();
7109     x_rbs_elem_id_tbl                 :=   SYSTEM.pa_num_tbl_type();
7110     x_change_reason_code_tbl          :=   SYSTEM.pa_varchar2_30_tbl_type();
7111     x_description_tbl                 :=   SYSTEM.pa_varchar2_2000_tbl_type();
7112 
7113 	--DEBUG_NS('p_context :: ' || p_context);
7114 
7115     --log1('----- STAGE 2-------');
7116     IF p_context = 'WEBADI_PERIODIC' THEN
7117        --log1('----- STAGE 2P-------');
7118         --These variables will be used to store the values corresponding to the previous
7119         --row while looping thru the rows in the interface table.
7120         l_prev_task_id          := -1;
7121         l_prev_rlm_id           := l_g_miss_num;
7122 		l_prev_cbs_element_id	:= l_g_miss_num;
7123         l_prev_txn_curr_code    := l_g_miss_char;
7124         l_bl_index              := 1;
7125 
7126         --Initialize the OUT variables l_prd_mask_st_date_tbl/l_prd_mask_end_date_tbl
7127         --First element is reserved for preceeding bucket which will be set for each resource assignment later
7128         l_prd_mask_st_date_tbl.extend;
7129         l_prd_mask_end_date_tbl.extend;
7130         l_prd_mask_end_date_tbl(1):=p_first_pd_bf_pm_en_dt;
7131         FOR i IN 1..p_prd_mask_st_date_tbl.COUNT LOOP
7132             l_prd_mask_st_date_tbl.extend;
7133             l_prd_mask_st_date_tbl(l_prd_mask_st_date_tbl.COUNT):=p_prd_mask_st_date_tbl(i);
7134             l_prd_mask_end_date_tbl.extend;
7135             l_prd_mask_end_date_tbl(l_prd_mask_end_date_tbl.COUNT):=p_prd_mask_end_date_tbl(i);
7136         END LOOP;
7137         --Reserve the last element for succeding bucket which will be set for each resource assignment later
7138         l_prd_mask_st_date_tbl.extend;
7139         l_prd_mask_st_date_tbl(l_prd_mask_st_date_tbl.COUNT):=p_last_pd_af_pm_st_dt;
7140         l_prd_mask_end_date_tbl.extend;
7141 
7142         --log1('----- STAGE 3P-------');
7143         IF l_debug_mode = 'Y' THEN
7144            pa_debug.g_err_stage := 'About to loop thru inf_tbl_data_csr';
7145            pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7146         END IF;
7147         IF p_version_info_rec.x_version_type = 'COST' THEN
7148           l_allow_qty_flag := p_version_info_rec.x_cost_quantity_flag;
7149         ELSIF p_version_info_rec.x_version_type = 'REVENUE' THEN
7150           l_allow_qty_flag := p_version_info_rec.x_rev_quantity_flag;
7151         ELSIF p_version_info_rec.x_version_type = 'ALL' THEN
7152           l_allow_qty_flag := p_version_info_rec.x_all_quantity_flag;
7153         END IF;
7154 
7155         /*FOR l_curr_rec IN inf_tbl_data_csr LOOP*/
7156         -- Changing the for loop to a while loop so that the variable can be incremented inside
7157         -- This is for bug 4477397
7158         tt := 0;
7159         while tt <= p_inf_tbl_rec_tbl.COUNT
7160         LOOP
7161             tt := tt + 1;
7162 
7163             IF tt > p_inf_tbl_rec_tbl.COUNT THEN
7164                 EXIT;
7165             END IF;
7166 
7167             l_curr_rec:=NULL;
7168             IF l_skip_ra_flag ='N' THEN
7169 
7170 --                FETCH inf_tbl_data_csr INTO l_curr_rec;
7171                 l_curr_rec := p_inf_tbl_rec_tbl(tt);
7172 
7173             ELSE
7174 
7175                 LOOP
7176 
7177                     IF tt <= p_inf_tbl_rec_tbl.COUNT THEN
7178                         l_curr_rec := p_inf_tbl_rec_tbl(tt);
7179                     ELSE
7180                         l_curr_rec := NULL;
7181                     END IF;
7182 
7183                     EXIT WHEN l_curr_rec.task_id IS NULL OR
7184                               l_curr_rec.task_id <> l_skip_task_id OR
7185                               l_curr_rec.resource_list_member_id <> l_skip_rlm_id OR
7186 							  ((l_Cbs_Enabled = 'Y' and l_curr_rec.cbs_element_id <> l_skip_cbs_element_id) OR l_Cbs_Enabled = 'N');-- cbs enhancement changes bug#16445106
7187                     l_curr_rec:=NULL;
7188                     tt := tt + 1;
7189 --                    FETCH inf_tbl_data_csr INTO l_curr_rec;
7190 
7191                 END LOOP;
7192 
7193             END IF;
7194 
7195             IF tt > p_inf_tbl_rec_tbl.COUNT THEN
7196                 EXIT;
7197             END IF;
7198 
7199             l_skip_ra_flag := 'N';
7200             l_skip_task_id := NULL;
7201             l_skip_rlm_id := NULL;
7202 			l_skip_cbs_element_id := NULL; -- cbs enhancement changes bug#16445106
7203             --EXIT WHEN l_curr_rec.task_id IS NULL;
7204             --log1('----- STAGE X1-------');
7205             --Reset l_extend_pbl_out_tbls_flag. This flag will be set to Y for each planning
7206             --TXN so that the OUT tbls for process_budget_lines are correctly increased in length
7207             l_extend_pbl_out_tbls_flag := 'N';
7208 
7209             --Loop thru the p_budget_lines_tbl to find the record with RA/Curr same as
7210             --l_curr_rec
7211             LOOP
7212                 --log1('----- STAGE X2-------');
7213                 EXIT WHEN p_budget_lines_tbl(l_bl_index).pa_task_id = l_curr_rec.task_id AND
7214                           p_budget_lines_tbl(l_bl_index).resource_list_member_id = l_curr_rec.resource_list_member_id AND
7215                           p_budget_lines_tbl(l_bl_index).txn_currency_code = l_curr_rec.txn_currency_code AND
7216 						  ((l_Cbs_Enabled = 'Y' and p_budget_lines_tbl(l_bl_index).cbs_element_id = l_curr_rec.cbs_element_id) OR l_Cbs_Enabled = 'N'); -- cbs enhancement changes bug#16445106
7217 
7218                 l_bl_index:=l_bl_index+1;
7219                 --log1('----- STAGE X3-------');
7220             END LOOP;
7221 
7222             IF p_planning_start_date_tbl(l_bl_index) IS NOT NULL AND
7223                p_planning_end_date_tbl(l_bl_index) IS NOT NULL
7224               AND (p_etc_start_date IS NULL OR ( p_etc_start_date <= p_planning_end_date_tbl(l_bl_index) ) ) THEN --Bug 10394190
7225 
7226                 --For each resource assignment find out the no. of periods in the period mask
7227                 --that would fall between the planning start/end dates. If n such periods exist,
7228                 --then n rows in the OUT tbls for each RA/currency/amount type should be prepared
7229                 IF l_curr_rec.task_id <> l_prev_task_id OR
7230                    NVL(l_curr_rec.resource_list_member_id,'-99') <> l_prev_rlm_id OR
7231 				   ((l_Cbs_Enabled = 'Y' and l_curr_rec.cbs_element_id<>l_prev_cbs_element_id) OR l_Cbs_Enabled = 'N') -- cbs enhancement changes bug#16445106
7232 				   THEN
7233 
7234                     IF l_debug_mode = 'Y' THEN
7235                        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;
7236                        pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7237                     END IF;
7238 
7239                     /*IF l_debug_mode = 'Y' THEN
7240                        pa_debug.g_err_stage := 'p_version_info_rec.x_org_id: ' || p_version_info_rec.x_org_id;
7241                        pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7242                        pa_debug.g_err_stage := 'l_bl_index: ' || l_bl_index;
7243                        pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7244                        pa_debug.g_err_stage := 'p_planning_start_date_tbl(l_bl_index): ' || p_planning_start_date_tbl(l_bl_index);
7245                        pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7246                        pa_debug.g_err_stage := 'p_version_info_rec.x_time_phased_code: ' || p_version_info_rec.x_time_phased_code;
7247                        pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7248                        pa_debug.g_err_stage := 'p_planning_end_date_tbl(l_bl_index): ' || p_planning_end_date_tbl(l_bl_index);
7249                        pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7250                     END IF;*/
7251                     --Populate the preceeding and succeeding buckets in the period mask table
7252                     --log1('----- STAGE X3.1------- '||p_version_info_rec.x_org_id);
7253                     --log1('----- STAGE X3.2------- '||l_bl_index);
7254                     --log1('----- STAGE X3.3------- '||p_planning_start_date_tbl(l_bl_index));
7255                     --log1('----- STAGE X3.4------- '|| p_version_info_rec.x_org_id);
7256                     --log1('----- STAGE X3.5------- '|| p_version_info_rec.x_time_phased_code);
7257                     --log1('----- STAGE X3.6------- '|| p_planning_end_date_tbl(l_bl_index));
7258                     SELECT gl.start_date
7259                     INTO   l_prd_mask_st_date_tbl(1)
7260                     FROM   gl_periods gl,
7261                            pa_implementations_all pim,
7262                            gl_sets_of_books gsb
7263                     WHERE  pim.org_id = p_version_info_rec.x_org_id
7264                     AND    gsb.set_of_books_id = pim.set_of_books_id
7265                     AND    gl.period_set_name= DECODE(p_version_info_rec.x_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
7266                     AND    gl.period_type = DECODE(p_version_info_rec.x_time_phased_code,
7267                                                    'P',pim.pa_period_type,
7268                                                    'G',gsb.accounted_period_type)
7269                     AND    gl.adjustment_period_flag='N'
7270                     AND    gl.start_date <= p_planning_start_date_tbl(l_bl_index)
7271                     AND    gl.end_date >=p_planning_start_date_tbl(l_bl_index);
7272 
7273                     SELECT gl.end_date
7274                     INTO   l_prd_mask_end_date_tbl(l_prd_mask_end_date_tbl.COUNT)
7275                     FROM   gl_periods gl,
7276                            pa_implementations_all pim,
7277                            gl_sets_of_books gsb
7278                     WHERE  pim.org_id = p_version_info_rec.x_org_id
7279                     AND    gsb.set_of_books_id = pim.set_of_books_id
7280                     AND    gl.period_set_name= DECODE(p_version_info_rec.x_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
7281                     AND    gl.period_type = DECODE(p_version_info_rec.x_time_phased_code,
7282                                                    'P',pim.pa_period_type,
7283                                                    'G',gsb.accounted_period_type)
7284                     AND    gl.adjustment_period_flag='N'
7285                     AND    gl.start_date <= p_planning_end_date_tbl(l_bl_index)
7286                     AND    gl.end_date >=p_planning_end_date_tbl(l_bl_index);
7287 
7288                     l_extend_pbl_out_tbls_flag:= 'Y';
7289                     l_plan_txn_attrs_copied_flag := 'N';
7290                     l_prev_task_id:=l_curr_rec.task_id;
7291                     l_prev_rlm_id:=l_curr_rec.resource_list_member_id;
7292 					l_prev_cbs_element_id:=l_curr_rec.cbs_element_id;-- cbs enhancement changes bug#16445106
7293                     l_prev_txn_curr_code:=l_curr_rec.txn_currency_code;
7294 
7295                     --Find out the flexible periods in the period mask that should be considered
7296                     --based on RA's planning start/end dates
7297                     l_st_index_in_prd_mask      := NULL;
7298                     l_end_index_in_prd_mask     := NULL;
7299                     l_sd_prd_exists_flag        := NULL;
7300                     l_pd_prd_exists_flag        := NULL;
7301                     l_num_of_prds_for_plan_txn  :=0;
7302 
7303                     --log1('----- STAGE X4-------');
7304                     IF NVL(p_etc_start_date,p_planning_start_date_tbl(l_bl_index)) < p_prd_mask_st_date_tbl(1) THEN
7305                         --log1('----- STAGE X5-------');
7306                         l_st_index_in_prd_mask:=1;
7307                         l_pd_prd_exists_flag :='Y';
7308 
7309                     END IF;
7310 
7311                     --log1('----- STAGE X5.1------- '||l_bl_index);
7312                     --log1('----- STAGE X5.2------- '||p_planning_end_date_tbl(l_bl_index) );
7313                     --log1('----- STAGE X5.3------- '||p_prd_mask_end_date_tbl(p_prd_mask_end_date_tbl.COUNT));
7314                     IF p_planning_end_date_tbl(l_bl_index) > p_prd_mask_end_date_tbl(p_prd_mask_end_date_tbl.COUNT) THEN
7315 
7316                         l_end_index_in_prd_mask:=l_prd_mask_end_date_tbl.COUNT;
7317                         l_sd_prd_exists_flag :='Y';
7318 
7319                     END IF;
7320 
7321                     --log1('----- STAGE X5.4------- '||l_st_index_in_prd_mask);
7322                     --log1('----- STAGE X5.5------- '||l_end_index_in_prd_mask);
7323                     IF l_st_index_in_prd_mask IS NULL OR
7324                        l_end_index_in_prd_mask IS NULL THEN
7325 
7326                         --Find out the flexbile period in which the planning start/end dates fall
7327                         FOR kk IN 2..l_prd_mask_st_date_tbl.LAST-1 LOOP
7328 
7329                             IF l_st_index_in_prd_mask IS NULL THEN
7330 
7331                                 --log1('----- STAGE X5.6------- '||l_bl_index);
7332                                 --log1('----- STAGE X5.7------- '||p_planning_start_date_tbl(l_bl_index));
7333                                 --log1('----- STAGE X5.8------- '||kk);
7334                                 --log1('----- STAGE X5.9------- '|| l_prd_mask_st_date_tbl(kk));
7335                                 --log1('----- STAGE X5.10------- '|| l_prd_mask_end_date_tbl(kk));
7336                                 IF NVL(p_etc_start_date,p_planning_start_date_tbl(l_bl_index)) >= l_prd_mask_st_date_tbl(kk) AND
7337                                    NVL(p_etc_start_date,p_planning_start_date_tbl(l_bl_index)) <= l_prd_mask_end_date_tbl(kk)  THEN
7338 
7339                                     l_st_index_in_prd_mask:= kk;
7340 
7341                                 END IF;
7342 
7343                             END IF;
7344 
7345                             IF l_end_index_in_prd_mask IS NULL THEN
7346 
7347                                 --log1('----- STAGE X5.10------- '||l_bl_index);
7348                                 --log1('----- STAGE X5.11------- '||p_planning_end_date_tbl(l_bl_index));
7349                                 --log1('----- STAGE X5.12------- '||kk);
7350                                 --log1('----- STAGE X5.13------- '|| l_prd_mask_st_date_tbl(kk));
7351                                 --log1('----- STAGE X5.14------- '|| l_prd_mask_end_date_tbl(kk));
7352                                 IF p_planning_end_date_tbl(l_bl_index) >= l_prd_mask_st_date_tbl(kk) AND
7353                                    p_planning_end_date_tbl(l_bl_index) <= l_prd_mask_end_date_tbl(kk) THEN
7354 
7355                                     l_end_index_in_prd_mask:= kk;
7356 
7357                                 END IF;
7358 
7359                             END IF;
7360 
7361                             IF l_st_index_in_prd_mask IS NOT NULL AND
7362                                l_end_index_in_prd_mask IS NOT NULL THEN
7363 
7364                                 EXIT;
7365 
7366                             END IF;
7367 
7368                         END LOOP;--FOR kk IN 2..l_prd_mask_st_date_tbl LOOP
7369 
7370                     END IF;--IF l_st_index_in_prd_mask IS NULL OR
7371 
7372                     IF l_st_index_in_prd_mask IS NULL AND
7373                        l_end_index_in_prd_mask IS NOT NULL THEN
7374 
7375                         l_st_index_in_prd_mask :=l_end_index_in_prd_mask;
7376 
7377                     END IF;
7378 
7379                     IF l_st_index_in_prd_mask IS NOT NULL AND
7380                        l_end_index_in_prd_mask IS  NULL THEN
7381 
7382                         l_end_index_in_prd_mask := l_st_index_in_prd_mask;
7383 
7384                     END IF;
7385 
7386                     l_num_of_prds_for_plan_txn := l_end_index_in_prd_mask -  l_st_index_in_prd_mask +1;
7387 
7388                     l_extend_pbl_out_tbls_flag := 'Y';
7389 
7390                 END IF;--IF l_curr_rec.task_id <> l_prev_task_id OR
7391 
7392                 --Currency /amount type of this record is different from one that of previous record.
7393                 IF l_prev_txn_curr_code <> l_curr_rec.txn_currency_code  THEN
7394 
7395                     l_extend_pbl_out_tbls_flag:= 'Y';
7396                     l_plan_txn_attrs_copied_flag := 'N';
7397                     l_prev_txn_curr_code:=l_curr_rec.txn_currency_code;
7398 
7399                 END IF;
7400 
7401                 --Extend the OUT tbls and populate the Line start/end tbls. Header level tbls such as
7402                 --task/rlm etc will also be populated.
7403                 IF l_extend_pbl_out_tbls_flag ='Y' THEN
7404 
7405                     l_extend_pbl_out_tbls_flag := 'N';
7406                     --This variable will be used to store the index till which the OUT tbls for prepare_pbl_input are
7407                     --populated.
7408                     l_prev_pbl_tbl_count := x_task_id_tbl.COUNT;
7409                     x_task_id_tbl.extend(l_num_of_prds_for_plan_txn);
7410                     x_rlm_id_tbl.extend(l_num_of_prds_for_plan_txn);
7411 					x_cbs_element_id_tbl.extend(l_num_of_prds_for_plan_txn);-- cbs enhancement changes bug#16445106
7412                     x_ra_id_tbl.extend(l_num_of_prds_for_plan_txn);
7413                     x_spread_curve_id_tbl.extend(l_num_of_prds_for_plan_txn);
7414                     x_mfc_cost_type_id_tbl.extend(l_num_of_prds_for_plan_txn);
7415                     x_etc_method_code_tbl.extend(l_num_of_prds_for_plan_txn);
7416                     x_sp_fixed_date_tbl.extend(l_num_of_prds_for_plan_txn);
7417                     x_res_class_code_tbl.extend(l_num_of_prds_for_plan_txn);
7418                     x_rate_based_flag_tbl.extend(l_num_of_prds_for_plan_txn);
7419                     x_rbs_elem_id_tbl.extend(l_num_of_prds_for_plan_txn);
7420                     x_txn_currency_code_tbl.extend(l_num_of_prds_for_plan_txn);
7421                     x_planning_start_date_tbl.extend(l_num_of_prds_for_plan_txn);
7422                     x_planning_end_date_tbl.extend(l_num_of_prds_for_plan_txn);
7423                     x_total_qty_tbl.extend(l_num_of_prds_for_plan_txn);
7424                     x_total_raw_cost_tbl.extend(l_num_of_prds_for_plan_txn);
7425                     x_total_burdened_cost_tbl.extend(l_num_of_prds_for_plan_txn);
7426                     x_total_revenue_tbl.extend(l_num_of_prds_for_plan_txn);
7427                     x_raw_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7428                     x_burdened_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7429                     x_bill_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7430                     x_line_start_date_tbl.extend(l_num_of_prds_for_plan_txn);
7431                     x_line_end_date_tbl.extend(l_num_of_prds_for_plan_txn);
7432                     x_proj_cost_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7433                     x_proj_cost_rate_date_type_tbl.extend(l_num_of_prds_for_plan_txn);
7434                     x_proj_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7435                     x_proj_cost_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7436                     x_proj_rev_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7437                     x_proj_rev_rate_date_type_tbl.extend(l_num_of_prds_for_plan_txn);
7438                     x_proj_rev_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7439                     x_proj_rev_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7440                     x_pfunc_cost_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7441                     x_pfunc_cost_rate_date_typ_tbl.extend(l_num_of_prds_for_plan_txn);
7442                     x_pfunc_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7443                     x_pfunc_cost_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7444                     x_pfunc_rev_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7445                     x_pfunc_rev_rate_date_type_tbl.extend(l_num_of_prds_for_plan_txn);
7446                     x_pfunc_rev_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7447                     x_pfunc_rev_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7448                     x_delete_flag_tbl.extend(l_num_of_prds_for_plan_txn);
7449                     x_change_reason_code_tbl.extend(l_num_of_prds_for_plan_txn);
7450                     x_description_tbl.extend(l_num_of_prds_for_plan_txn);
7451 
7452                     --log1('----- STAGE X5.15.0------- '||l_st_index_in_prd_mask);
7453                     --log1('----- STAGE X5.15.0.1------- '||l_end_index_in_prd_mask);
7454 
7455                     IF l_st_index_in_prd_mask IS NOT NULL THEN
7456 
7457                         FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7458 
7459                             l_tmp_index := l_prev_pbl_tbl_count + kk - l_st_index_in_prd_mask + 1;
7460                             --log1('----- STAGE X5.15.1 ------- '||l_tmp_index);
7461 
7462                              x_line_start_date_tbl(l_tmp_index):=l_prd_mask_st_date_tbl(kk);
7463 
7464                             --log1('----- STAGE X5.15.2 ------- ');
7465 
7466                             x_line_end_date_tbl(l_tmp_index):=l_prd_mask_end_date_tbl(kk);
7467 
7468                             --log1('----- STAGE X5.15.3 ------- ');
7469                             x_task_id_tbl(l_tmp_index)            := l_curr_rec.task_id;
7470                             x_rlm_id_tbl(l_tmp_index)             := p_budget_lines_tbl(l_bl_index).resource_list_member_id;
7471 							x_cbs_element_id_tbl(l_tmp_index)   := p_budget_lines_tbl(l_bl_index).cbs_element_id;-- cbs enhancement changes bug#16445106
7472                             x_ra_id_tbl(l_tmp_index)              := p_ra_id_tbl(l_bl_index);
7473                             x_txn_currency_code_tbl(l_tmp_index)  := l_curr_rec.txn_currency_code;
7474                             --log1('----- STAGE X5.15.4 ------- ');
7475                             x_planning_start_date_tbl(l_tmp_index):= p_planning_start_date_tbl(l_bl_index);
7476                             x_planning_end_date_tbl(l_tmp_index)  := p_planning_end_date_tbl(l_bl_index);
7477                             x_spread_curve_id_tbl(l_tmp_index)    := p_spread_curve_id_tbl(l_bl_index);
7478                             --log1('----- STAGE X5.15.5 ------- ');
7479                             x_mfc_cost_type_id_tbl(l_tmp_index)   := p_mfc_cost_type_id_tbl(l_bl_index);
7480                             x_etc_method_code_tbl(l_tmp_index)    := p_etc_method_code_tbl(l_bl_index);
7481                             x_sp_fixed_date_tbl(l_tmp_index)      := p_sp_fixed_date_tbl(l_bl_index);
7482                             --log1('----- STAGE X5.15.6 ------- ');
7483                             x_res_class_code_tbl(l_tmp_index)     := p_res_class_code_tbl(l_bl_index);
7484                             x_rate_based_flag_tbl(l_tmp_index)    := p_rate_based_flag_tbl(l_bl_index);
7485                             x_rbs_elem_id_tbl(l_tmp_index)        := p_rbs_elem_id_tbl(l_bl_index);
7486                             --Assigning N since for periodic layouts, amounts a  type with delete flag as N would be NULLED
7487                             --out
7488                             x_delete_flag_tbl(l_tmp_index)        :='N';
7489 
7490 
7491 
7492                         END LOOP;--FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7493 
7494                     END IF;--IF l_st_index_in_prd_mask IS NOT NULL THEN
7495 
7496                 END IF;--IF l_extend_pbl_out_tbls_flag ='Y' THEN
7497 
7498                 --log1('----- STAGE X5.16------- ');
7499                 IF l_st_index_in_prd_mask IS NOT NULL THEN
7500 
7501                     --For the current record, populate amounts for appropriate amount types
7502                     FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7503 
7504                         IF l_curr_rec.delete_flag ='Y' THEN
7505 
7506                             l_amount := l_g_miss_num;
7507 
7508                         ELSE
7509 
7510                             IF kk = 1 THEN
7511                             --Indicates that the flex period corresponds to FIRST period before the first flexible period in
7512                             --the period mask. This period stands for PD period
7513                                 l_prd_index := 'PD';
7514 
7515                             ELSIF kk = l_prd_mask_st_date_tbl.COUNT THEN
7516                             --Indicates that the flex period corresponds to FIRST period AFTER the LAST flexible period in
7517                             --the period mask. This period stands for SD period
7518                                 l_prd_index := 'SD';
7519 
7520                             ELSE
7521 
7522                                 --kk-1 should be used since the periods in the period mask are
7523                                 --stored staring from the second bucket of l_prd_mask_st_date_tbl
7524                                 l_prd_index := to_char(kk-1);
7525 
7526                             END IF;
7527 
7528                             l_amount := get_amount_in_prd_x(p_rec => l_curr_rec,
7529                                                             p_prd => l_prd_index);
7530 
7531                         END IF;
7532 
7533                         l_tmp_index := l_prev_pbl_tbl_count + kk - l_st_index_in_prd_mask + 1;
7534 
7535                         --In the below block amounts that should be passed to the calculate API will be derived
7536                         --In case of Budgets, only one column per amount type is editable
7537                         --In case of Forecasts two columns (Forecast and ETC) are editable.
7538                         ---->If both are hidden in the layout NULL will be passed
7539                         ---->If ETC is hidden and Forecast is displayed in the layout then Forecast entered will be passed
7540                         ---->If Forecast is hidden and ETC is displayed in the layout then ETC entered + Actuals will be passed
7541                         ---->If both Forecast and ETC are displayed in the layout then
7542                         ------>If Forecast is entered is different from the existing value then it will be passed
7543                         ------>Else If ETC entered is different from existing value then ETC + actuals will be passed
7544                         ------>Else NULL will be passed
7545                         ---->Note that amount columns in budget lines tbl will contain the forecast values and ETC values
7546                         ---->are passed as input to this API
7547                         IF  l_curr_rec.amount_type_code = 'TOTAL_BURDENED_COST' THEN
7548 
7549                             x_total_burdened_cost_tbl(l_tmp_index) := l_amount;
7550 
7551                         ELSIF  l_curr_rec.amount_type_code = 'FCST_BURDENED_COST' THEN
7552 
7553                             x_total_burdened_cost_tbl(l_tmp_index) := l_amount;
7554 
7555                         ELSIF  l_curr_rec.amount_type_code = 'ETC_BURDENED_COST' THEN
7556 
7557                             get_total_fcst_amounts
7558                            (p_project_id                    =>p_project_id,
7559                             p_budget_version_id             =>p_budget_version_id,
7560                             p_task_id                       =>l_curr_rec.task_id,
7561                             p_resource_list_member_id       =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7562 							p_cbs_element_id       =>p_budget_lines_tbl(l_bl_index).cbs_element_id, -- cbs enhancement changes bug#16445106
7563                             p_txn_currency_code             =>l_curr_rec.txn_currency_code,
7564                             p_line_start_date               =>l_prd_mask_st_date_tbl(kk),
7565                             p_line_end_date                 =>l_prd_mask_end_date_tbl(kk),
7566                             p_prd_mask_st_date_tbl          =>l_prd_mask_st_date_tbl,
7567                             p_prd_mask_end_date_tbl         =>l_prd_mask_end_date_tbl,
7568                             p_st_index_in_prd_mask          =>l_st_index_in_prd_mask,
7569                             p_end_index_in_prd_mask         =>l_end_index_in_prd_mask,
7570                             p_etc_start_date                =>p_etc_start_date,
7571                             p_etc_quantity                  =>NULL,
7572                             p_fcst_quantity                 =>NULL,
7573                             p_etc_raw_cost                  =>NULL,
7574                             p_fcst_raw_cost                 =>NULL,
7575                             p_etc_burd_cost                 =>l_amount,
7576                             p_fcst_burd_cost                =>x_total_burdened_cost_tbl(l_tmp_index),
7577                             p_etc_revenue                   =>NULL,
7578                             p_fcst_revenue                  =>NULL,
7579                             px_cached_fcst_qty_tbl          =>l_cached_fcst_qty_tbl,
7580                             px_cached_fcst_raw_cost_tbl     =>l_cached_fcst_raw_cost_tbl,
7581                             px_cached_fcst_burd_cost_tbl    =>l_cached_fcst_burd_cost_tbl,
7582                             px_cached_fcst_revenue_tbl      =>l_cached_fcst_revenue_tbl,
7583                             px_cached_etc_qty_tbl           =>l_cached_etc_qty_tbl,
7584                             px_cached_etc_raw_cost_tbl      =>l_cached_etc_raw_cost_tbl,
7585                             px_cached_etc_burd_cost_tbl     =>l_cached_etc_burd_cost_tbl,
7586                             px_cached_etc_revenue_tbl       =>l_cached_etc_revenue_tbl,
7587                             x_total_quantity                =>l_tmp_quantity,
7588                             x_total_raw_cost                =>l_tmp_raw_cost,
7589                             x_total_burd_cost               =>x_total_burdened_cost_tbl(l_tmp_index),
7590                             x_total_revenue                 =>l_tmp_revenue,
7591                             x_return_status                 =>x_return_status,
7592                             x_msg_count                     =>x_msg_count,
7593                             x_msg_data                      =>x_msg_data    );
7594 
7595                             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7596                                  IF l_debug_mode = 'Y' THEN
7597                                       pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7598                                       pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7599                                  END IF;
7600                                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7601                             END IF;
7602 
7603 
7604                         ELSIF l_curr_rec.amount_type_code = 'TOTAL_RAW_COST' THEN
7605 
7606                             x_total_raw_cost_tbl(l_tmp_index) := l_amount;
7607 
7608                         ELSIF l_curr_rec.amount_type_code = 'FCST_RAW_COST' THEN
7609 
7610                             x_total_raw_cost_tbl(l_tmp_index) := l_amount;
7611 
7612                         ELSIF  l_curr_rec.amount_type_code = 'ETC_RAW_COST' THEN
7613 
7614                             get_total_fcst_amounts
7615                            (p_project_id                    =>p_project_id,
7616                             p_budget_version_id             =>p_budget_version_id,
7617                             p_task_id                       =>l_curr_rec.task_id,
7618                             p_resource_list_member_id       =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7619 							p_cbs_element_id       =>p_budget_lines_tbl(l_bl_index).cbs_element_id, -- cbs enhancement changes bug#16445106
7620                             p_txn_currency_code             =>l_curr_rec.txn_currency_code,
7621                             p_line_start_date               =>l_prd_mask_st_date_tbl(kk),
7622                             p_line_end_date                 =>l_prd_mask_end_date_tbl(kk),
7623                             p_prd_mask_st_date_tbl          =>l_prd_mask_st_date_tbl,
7624                             p_prd_mask_end_date_tbl         =>l_prd_mask_end_date_tbl,
7625                             p_st_index_in_prd_mask          =>l_st_index_in_prd_mask,
7626                             p_end_index_in_prd_mask         =>l_end_index_in_prd_mask,
7627                             p_etc_start_date                =>p_etc_start_date,
7628                             p_etc_quantity                  =>NULL,
7629                             p_fcst_quantity                 =>NULL,
7630                             p_etc_raw_cost                  =>l_amount,
7631                             p_fcst_raw_cost                 =>x_total_raw_cost_tbl(l_tmp_index),
7632                             p_etc_burd_cost                 =>NULL,
7633                             p_fcst_burd_cost                =>NULL,
7634                             p_etc_revenue                   =>NULL,
7635                             p_fcst_revenue                  =>NULL,
7636                             px_cached_fcst_qty_tbl          =>l_cached_fcst_qty_tbl,
7637                             px_cached_fcst_raw_cost_tbl     =>l_cached_fcst_raw_cost_tbl,
7638                             px_cached_fcst_burd_cost_tbl    =>l_cached_fcst_burd_cost_tbl,
7639                             px_cached_fcst_revenue_tbl      =>l_cached_fcst_revenue_tbl,
7640                             px_cached_etc_qty_tbl           =>l_cached_etc_qty_tbl,
7641                             px_cached_etc_raw_cost_tbl      =>l_cached_etc_raw_cost_tbl,
7642                             px_cached_etc_burd_cost_tbl     =>l_cached_etc_burd_cost_tbl,
7643                             px_cached_etc_revenue_tbl       =>l_cached_etc_revenue_tbl,
7644                             x_total_quantity                =>l_tmp_quantity,
7645                             x_total_raw_cost                =>x_total_raw_cost_tbl(l_tmp_index),
7646                             x_total_burd_cost               =>l_tmp_burd_cost,
7647                             x_total_revenue                 =>l_tmp_revenue,
7648                             x_return_status                 =>x_return_status,
7649                             x_msg_count                     =>x_msg_count,
7650                             x_msg_data                      =>x_msg_data    );
7651 
7652                             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7653                                  IF l_debug_mode = 'Y' THEN
7654                                       pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7655                                       pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7656                                  END IF;
7657                                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7658                             END IF;
7659 
7660 
7661                         ELSIF l_curr_rec.amount_type_code = 'TOTAL_REV' THEN
7662 
7663                             x_total_revenue_tbl(l_tmp_index) := l_amount;
7664 
7665                         ELSIF l_curr_rec.amount_type_code = 'FCST_REVENUE' THEN
7666 
7667                             x_total_revenue_tbl(l_tmp_index) := l_amount;
7668 
7669                         ELSIF l_curr_rec.amount_type_code = 'ETC_REVENUE' THEN
7670 
7671                             get_total_fcst_amounts
7672                            (p_project_id                    =>p_project_id,
7673                             p_budget_version_id             =>p_budget_version_id,
7674                             p_task_id                       =>l_curr_rec.task_id,
7675                             p_resource_list_member_id       =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7676 							p_cbs_element_id       =>p_budget_lines_tbl(l_bl_index).cbs_element_id, -- cbs enhancement changes bug#16445106
7677                             p_txn_currency_code             =>l_curr_rec.txn_currency_code,
7678                             p_line_start_date               =>l_prd_mask_st_date_tbl(kk),
7679                             p_line_end_date                 =>l_prd_mask_end_date_tbl(kk),
7680                             p_prd_mask_st_date_tbl          =>l_prd_mask_st_date_tbl,
7681                             p_prd_mask_end_date_tbl         =>l_prd_mask_end_date_tbl,
7682                             p_st_index_in_prd_mask          =>l_st_index_in_prd_mask,
7683                             p_end_index_in_prd_mask         =>l_end_index_in_prd_mask,
7684                             p_etc_start_date                =>p_etc_start_date,
7685                             p_etc_quantity                  =>NULL,
7686                             p_fcst_quantity                 =>NULL,
7687                             p_etc_raw_cost                  =>NULL,
7688                             p_fcst_raw_cost                 =>NULL,
7689                             p_etc_burd_cost                 =>NULL,
7690                             p_fcst_burd_cost                =>NULL,
7691                             p_etc_revenue                   =>l_amount,
7692                             p_fcst_revenue                  =>x_total_revenue_tbl(l_tmp_index),
7693                             px_cached_fcst_qty_tbl          =>l_cached_fcst_qty_tbl,
7694                             px_cached_fcst_raw_cost_tbl     =>l_cached_fcst_raw_cost_tbl,
7695                             px_cached_fcst_burd_cost_tbl    =>l_cached_fcst_burd_cost_tbl,
7696                             px_cached_fcst_revenue_tbl      =>l_cached_fcst_revenue_tbl,
7697                             px_cached_etc_qty_tbl           =>l_cached_etc_qty_tbl,
7698                             px_cached_etc_raw_cost_tbl      =>l_cached_etc_raw_cost_tbl,
7699                             px_cached_etc_burd_cost_tbl     =>l_cached_etc_burd_cost_tbl,
7700                             px_cached_etc_revenue_tbl       =>l_cached_etc_revenue_tbl,
7701                             x_total_quantity                =>l_tmp_quantity,
7702                             x_total_raw_cost                =>l_tmp_raw_cost,
7703                             x_total_burd_cost               =>l_tmp_burd_cost,
7704                             x_total_revenue                 =>x_total_revenue_tbl(l_tmp_index),
7705                             x_return_status                 =>x_return_status,
7706                             x_msg_count                     =>x_msg_count,
7707                             x_msg_data                      =>x_msg_data    );
7708 
7709                             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7710                                  IF l_debug_mode = 'Y' THEN
7711                                       pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7712                                       pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7713                                  END IF;
7714                                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7715                             END IF;
7716 
7717 
7718                         ELSIF l_curr_rec.amount_type_code = 'TOTAL_QTY' THEN
7719 
7720                             x_total_qty_tbl(l_tmp_index) := l_amount;
7721 
7722                         ELSIF l_curr_rec.amount_type_code = 'FCST_QTY' THEN
7723 
7724                             x_total_qty_tbl(l_tmp_index) := l_amount;
7725 
7726                         ELSIF l_curr_rec.amount_type_code = 'ETC_QTY' THEN
7727 
7728                             get_total_fcst_amounts
7729                            (p_project_id                    =>p_project_id,
7730                             p_budget_version_id             =>p_budget_version_id,
7731                             p_task_id                       =>l_curr_rec.task_id,
7732                             p_resource_list_member_id       =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7733 							p_cbs_element_id       =>p_budget_lines_tbl(l_bl_index).cbs_element_id, -- cbs enhancement changes bug#16445106
7734                             p_txn_currency_code             =>l_curr_rec.txn_currency_code,
7735                             p_line_start_date               =>l_prd_mask_st_date_tbl(kk),
7736                             p_line_end_date                 =>l_prd_mask_end_date_tbl(kk),
7737                             p_prd_mask_st_date_tbl          =>l_prd_mask_st_date_tbl,
7738                             p_prd_mask_end_date_tbl         =>l_prd_mask_end_date_tbl,
7739                             p_st_index_in_prd_mask          =>l_st_index_in_prd_mask,
7740                             p_end_index_in_prd_mask         =>l_end_index_in_prd_mask,
7741                             p_etc_start_date                =>p_etc_start_date,
7742                             p_etc_quantity                  =>l_amount,
7743                             p_fcst_quantity                 =>x_total_qty_tbl(l_tmp_index),
7744                             p_etc_raw_cost                  =>NULL,
7745                             p_fcst_raw_cost                 =>NULL,
7746                             p_etc_burd_cost                 =>NULL,
7747                             p_fcst_burd_cost                =>NULL,
7748                             p_etc_revenue                   =>NULL,
7749                             p_fcst_revenue                  =>NULL,
7750                             px_cached_fcst_qty_tbl          =>l_cached_fcst_qty_tbl,
7751                             px_cached_fcst_raw_cost_tbl     =>l_cached_fcst_raw_cost_tbl,
7752                             px_cached_fcst_burd_cost_tbl    =>l_cached_fcst_burd_cost_tbl,
7753                             px_cached_fcst_revenue_tbl      =>l_cached_fcst_revenue_tbl,
7754                             px_cached_etc_qty_tbl           =>l_cached_etc_qty_tbl,
7755                             px_cached_etc_raw_cost_tbl      =>l_cached_etc_raw_cost_tbl,
7756                             px_cached_etc_burd_cost_tbl     =>l_cached_etc_burd_cost_tbl,
7757                             px_cached_etc_revenue_tbl       =>l_cached_etc_revenue_tbl,
7758                             x_total_quantity                =>x_total_qty_tbl(l_tmp_index),
7759                             x_total_raw_cost                =>l_tmp_raw_cost,
7760                             x_total_burd_cost               =>l_tmp_burd_cost,
7761                             x_total_revenue                 =>l_tmp_revenue,
7762                             x_return_status                 =>x_return_status,
7763                             x_msg_count                     =>x_msg_count,
7764                             x_msg_data                      =>x_msg_data    );
7765 
7766                             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7767                                  IF l_debug_mode = 'Y' THEN
7768                                       pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7769                                       pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7770                                  END IF;
7771                                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7772                             END IF;
7773 
7774                         ELSIF l_curr_rec.amount_type_code IN ('ETC_BURDENED_COST_RATE','BURDENED_COST_RATE') THEN
7775 
7776                             x_burdened_cost_rate_tbl(l_tmp_index) := l_amount;
7777 
7778                         ELSIF l_curr_rec.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') THEN
7779 
7780                             x_raw_cost_rate_tbl(l_tmp_index) := l_amount;
7781 
7782                         ELSIF l_curr_rec.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') THEN
7783 
7784                             x_bill_rate_tbl(l_tmp_index) := l_amount;
7785 
7786                         END IF;
7787 
7788                     END LOOP;--FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7789 
7790                     --log1('----- STAGE X5.17------- ');
7791 
7792                     IF nvl(l_curr_rec.delete_flag,'N') <> 'Y' AND
7793                            l_plan_txn_attrs_copied_flag ='N' THEN
7794 
7795                         FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7796 
7797                             l_tmp_index := l_prev_pbl_tbl_count + kk - l_st_index_in_prd_mask + 1;
7798 
7799                             --log1('----- STAGE X5.17.1------- '||l_tmp_index);
7800 
7801                             x_proj_cost_rate_type_tbl(l_tmp_index)      := p_budget_lines_tbl(l_bl_index).project_cost_rate_type;
7802                             x_proj_cost_rate_date_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_cost_rate_date_type;
7803                             x_proj_cost_rate_tbl(l_tmp_index)           := p_budget_lines_tbl(l_bl_index).project_cost_exchange_rate;
7804                             x_proj_cost_rate_date_tbl(l_tmp_index)      := p_budget_lines_tbl(l_bl_index).project_cost_rate_date;
7805                             --log1('----- STAGE X5.17.2------- ');
7806                             x_proj_rev_rate_type_tbl(l_tmp_index)       := p_budget_lines_tbl(l_bl_index).project_rev_rate_type;
7807                             x_proj_rev_rate_date_type_tbl(l_tmp_index)  := p_budget_lines_tbl(l_bl_index).project_rev_rate_date_type;
7808                             x_proj_rev_rate_tbl(l_tmp_index)            := p_budget_lines_tbl(l_bl_index).project_rev_exchange_rate;
7809                             x_proj_rev_rate_date_tbl(l_tmp_index)       := p_budget_lines_tbl(l_bl_index).project_rev_rate_date;
7810                             --log1('----- STAGE X5.17.3------- ');
7811                             x_pfunc_cost_rate_type_tbl(l_tmp_index)     := p_budget_lines_tbl(l_bl_index).projfunc_cost_rate_type;
7812                             x_pfunc_cost_rate_date_typ_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_cost_rate_date_type;
7813                             x_pfunc_cost_rate_tbl(l_tmp_index)          := p_budget_lines_tbl(l_bl_index).projfunc_cost_exchange_rate;
7814                             x_pfunc_cost_rate_date_tbl(l_tmp_index)     := p_budget_lines_tbl(l_bl_index).projfunc_cost_rate_date;
7815                             --log1('----- STAGE X5.17.4------- ');
7816                             x_pfunc_rev_rate_type_tbl(l_tmp_index)      := p_budget_lines_tbl(l_bl_index).projfunc_rev_rate_type;
7817                             x_pfunc_rev_rate_date_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_rev_rate_date_type;
7818                             x_pfunc_rev_rate_tbl(l_tmp_index)           := p_budget_lines_tbl(l_bl_index).projfunc_rev_exchange_rate;
7819                             x_pfunc_rev_rate_date_tbl(l_tmp_index)      := p_budget_lines_tbl(l_bl_index).projfunc_rev_rate_date;
7820 
7821                             -- stamping null for change reason and description
7822                             x_change_reason_code_tbl(l_tmp_index)       := NULL;
7823                             x_description_tbl(l_tmp_index)              := NULL;
7824 
7825                         END LOOP;--IF nvl(l_curr_rec.delete_flag,'N') <> 'Y' AND
7826 
7827                         l_plan_txn_attrs_copied_flag :='Y';
7828 
7829                     END IF;
7830 
7831                 END IF;--IF l_st_index_in_prd_mask IS NOT NULL THEN
7832 
7833              --Bug 6877488 : The below code should be executed only when the planning dates are null. Added that
7834              --condition to remove the case where planning dates are not null but etc start date is >= planning end date
7835              ELSIF p_planning_start_date_tbl(l_bl_index) IS  NULL AND
7836                    p_planning_end_date_tbl(l_bl_index) IS  NULL THEN
7837 
7838                  --Planning Start/End Dates both are null. This can happen only for new resource assignments when
7839 
7840                  ----1.Delete flag is Y or
7841                  ----2.Amounts are not entered at all.
7842                  --In the first case RA will be ignored and in the second case RA with no amounts would be created
7843                 IF l_curr_rec.delete_flag='N' THEN
7844 
7845                     x_task_id_tbl.extend(1);
7846                     x_rlm_id_tbl.extend(1);
7847 					x_cbs_element_id_tbl.extend(1);-- cbs enhancement changes bug#16445106
7848                     x_ra_id_tbl.extend(1);
7849                     x_spread_curve_id_tbl.extend(1);
7850                     x_mfc_cost_type_id_tbl.extend(1);
7851                     x_etc_method_code_tbl.extend(1);
7852                     x_sp_fixed_date_tbl.extend(1);
7853                     x_res_class_code_tbl.extend(1);
7854                     x_rate_based_flag_tbl.extend(1);
7855                     x_rbs_elem_id_tbl.extend(1);
7856                     x_txn_currency_code_tbl.extend(1);
7857                     x_planning_start_date_tbl.extend(1);
7858                     x_planning_end_date_tbl.extend(1);
7859                     x_total_qty_tbl.extend(1);
7860                     x_total_raw_cost_tbl.extend(1);
7861                     x_total_burdened_cost_tbl.extend(1);
7862                     x_total_revenue_tbl.extend(1);
7863                     x_raw_cost_rate_tbl.extend(1);
7864                     x_burdened_cost_rate_tbl.extend(1);
7865                     x_bill_rate_tbl.extend(1);
7866                     x_line_start_date_tbl.extend(1);
7867                     x_line_end_date_tbl.extend(1);
7868                     x_proj_cost_rate_type_tbl.extend(1);
7869                     x_proj_cost_rate_date_type_tbl.extend(1);
7870                     x_proj_cost_rate_tbl.extend(1);
7871                     x_proj_cost_rate_date_tbl.extend(1);
7872                     x_proj_rev_rate_type_tbl.extend(1);
7873                     x_proj_rev_rate_date_type_tbl.extend(1);
7874                     x_proj_rev_rate_tbl.extend(1);
7875                     x_proj_rev_rate_date_tbl.extend(1);
7876                     x_pfunc_cost_rate_type_tbl.extend(1);
7877                     x_pfunc_cost_rate_date_typ_tbl.extend(1);
7878                     x_pfunc_cost_rate_tbl.extend(1);
7879                     x_pfunc_cost_rate_date_tbl.extend(1);
7880                     x_pfunc_rev_rate_type_tbl.extend(1);
7881                     x_pfunc_rev_rate_date_type_tbl.extend(1);
7882                     x_pfunc_rev_rate_tbl.extend(1);
7883                     x_pfunc_rev_rate_date_tbl.extend(1);
7884                     x_delete_flag_tbl.extend(1);
7885                     x_change_reason_code_tbl.extend(1);
7886                     x_description_tbl.extend(1);
7887                     x_task_id_tbl(x_task_id_tbl.COUNT)                    := l_curr_rec.task_id;
7888                     x_rlm_id_tbl(x_rlm_id_tbl.COUNT)                      := p_budget_lines_tbl(l_bl_index).resource_list_member_id;
7889 					x_cbs_element_id_tbl(x_rlm_id_tbl.COUNT)  := p_budget_lines_tbl(l_bl_index).cbs_element_id;
7890                     x_ra_id_tbl(x_ra_id_tbl.COUNT)                        := p_ra_id_tbl(l_bl_index);
7891                     x_txn_currency_code_tbl(x_txn_currency_code_tbl.COUNT):= l_curr_rec.txn_currency_code;
7892                     --Assigning N since for periodic layouts, amounts a  type with delete flag as N would be NULLED
7893                     --out
7894                     x_delete_flag_tbl(x_delete_flag_tbl.COUNT)            :='N';
7895 
7896                 END IF;
7897                 --Skip the processing of all the records pertaining to this ra id
7898                 l_skip_ra_flag:='Y';
7899                 l_skip_task_id:=l_curr_rec.task_id;
7900                 l_skip_rlm_id:=p_budget_lines_tbl(l_bl_index).resource_list_member_id;
7901 				l_skip_cbs_element_id:=p_budget_lines_tbl(l_bl_index).cbs_element_id;-- cbs enhancement changes bug#16445106
7902 
7903             END IF;--            IF p_planning_start_date_tbl(l_bl_index) IS NOT NULL AND
7904 
7905 
7906         END LOOP;
7907 
7908     ELSE --p_context is WEBADI_NON_PERIODIC
7909         --log1('----- STAGE X6-------');
7910         FOR kk IN 1..p_budget_lines_tbl.COUNT LOOP
7911             --log1('----- STAGE X7-------');
7912 
7913 			--DEBUG_NS('p_budget_lines_tbl(kk).cbs_element_id :: ' || p_budget_lines_tbl(kk).cbs_element_id);
7914 
7915             x_task_id_tbl.EXTEND(1);
7916             x_task_id_tbl(kk)                  := p_budget_lines_tbl(kk).pa_task_id;
7917             x_rlm_id_tbl.EXTEND(1);
7918             x_rlm_id_tbl(kk)                   := p_budget_lines_tbl(kk).resource_list_member_id;
7919 			x_cbs_element_id_tbl.EXTEND(1);
7920             x_cbs_element_id_tbl(kk)  := p_budget_lines_tbl(kk).cbs_element_id;
7921             x_ra_id_tbl.EXTEND(1);
7922             x_ra_id_tbl(kk)                    := p_ra_id_tbl(kk);
7923             x_txn_currency_code_tbl.EXTEND(1);
7924             x_txn_currency_code_tbl(kk)        := p_budget_lines_tbl(kk).txn_currency_code;
7925             --log1('----- STAGE X71-------');
7926             x_planning_start_date_tbl.EXTEND(1);
7927             x_planning_start_date_tbl(kk)      := p_planning_start_date_tbl(kk);
7928             x_planning_end_date_tbl.EXTEND(1);
7929             x_planning_end_date_tbl(kk)        := p_planning_end_date_tbl(kk);
7930             --log1('----- STAGE X72-------');
7931             x_total_qty_tbl.EXTEND(1);
7932             x_total_qty_tbl(kk)                := p_budget_lines_tbl(kk).quantity;
7933             x_total_raw_cost_tbl.EXTEND(1);
7934             x_total_raw_cost_tbl(kk)           := p_budget_lines_tbl(kk).raw_cost;
7935             x_total_burdened_cost_tbl.EXTEND(1);
7936             x_total_burdened_cost_tbl(kk)      := p_budget_lines_tbl(kk).burdened_cost;
7937             x_total_revenue_tbl.EXTEND(1);
7938             x_total_revenue_tbl(kk)            := p_budget_lines_tbl(kk).revenue;
7939             --log1('----- STAGE X73-------');
7940             x_raw_cost_rate_tbl.EXTEND(1);
7941             x_raw_cost_rate_tbl(kk)            := p_raw_cost_rate_tbl(kk);
7942             x_burdened_cost_rate_tbl.EXTEND(1);
7943             x_burdened_cost_rate_tbl(kk)       := p_burd_cost_rate_tbl(kk);
7944             x_bill_rate_tbl.EXTEND(1);
7945             x_bill_rate_tbl(kk)                := p_bill_rate_tbl(kk);
7946             --log1('----- STAGE X74-------');
7947 
7948             x_line_start_date_tbl.EXTEND(1);
7949             x_line_start_date_tbl(kk)          := NULL;
7950             x_line_end_date_tbl.EXTEND(1);
7951             x_line_end_date_tbl(kk)            := NULL;
7952             --log1('----- STAGE X75-------');
7953             x_proj_cost_rate_type_tbl.EXTEND(1);
7954             x_proj_cost_rate_type_tbl(kk)      := p_budget_lines_tbl(kk).project_cost_rate_type;
7955             x_proj_cost_rate_date_type_tbl.EXTEND(1);
7956             x_proj_cost_rate_date_type_tbl(kk) := p_budget_lines_tbl(kk).project_cost_rate_date_type;
7957             x_proj_cost_rate_tbl.EXTEND(1);
7958             x_proj_cost_rate_tbl(kk)           := p_budget_lines_tbl(kk).project_cost_exchange_rate;
7959             x_proj_cost_rate_date_tbl.EXTEND(1);
7960             x_proj_cost_rate_date_tbl(kk)      := p_budget_lines_tbl(kk).project_cost_rate_date;
7961             x_proj_rev_rate_type_tbl.EXTEND(1);
7962             x_proj_rev_rate_type_tbl(kk)       := p_budget_lines_tbl(kk).project_rev_rate_type;
7963             x_proj_rev_rate_date_type_tbl.EXTEND(1);
7964             x_proj_rev_rate_date_type_tbl(kk)  := p_budget_lines_tbl(kk).project_rev_rate_date_type;
7965             x_proj_rev_rate_tbl.EXTEND(1);
7966             x_proj_rev_rate_tbl(kk)            := p_budget_lines_tbl(kk).project_rev_exchange_rate;
7967             x_proj_rev_rate_date_tbl.EXTEND(1);
7968             x_proj_rev_rate_date_tbl(kk)       := p_budget_lines_tbl(kk).project_rev_rate_date;
7969             x_pfunc_cost_rate_type_tbl.EXTEND(1);
7970             x_pfunc_cost_rate_type_tbl(kk)     := p_budget_lines_tbl(kk).projfunc_cost_rate_type;
7971             x_pfunc_cost_rate_date_typ_tbl.EXTEND(1);
7972             x_pfunc_cost_rate_date_typ_tbl(kk) := p_budget_lines_tbl(kk).projfunc_cost_rate_date_type;
7973             x_pfunc_cost_rate_tbl.EXTEND(1);
7974             x_pfunc_cost_rate_tbl(kk)          := p_budget_lines_tbl(kk).projfunc_cost_exchange_rate;
7975             x_pfunc_cost_rate_date_tbl.EXTEND(1);
7976             x_pfunc_cost_rate_date_tbl(kk)     := p_budget_lines_tbl(kk).projfunc_cost_rate_date;
7977             x_pfunc_rev_rate_type_tbl.EXTEND(1);
7978             x_pfunc_rev_rate_type_tbl(kk)      := p_budget_lines_tbl(kk).projfunc_rev_rate_type;
7979             x_pfunc_rev_rate_date_type_tbl.EXTEND(1);
7980             x_pfunc_rev_rate_date_type_tbl(kk) := p_budget_lines_tbl(kk).projfunc_rev_rate_date_type;
7981             x_pfunc_rev_rate_tbl.EXTEND(1);
7982             x_pfunc_rev_rate_tbl(kk)           := p_budget_lines_tbl(kk).projfunc_rev_exchange_rate;
7983             x_pfunc_rev_rate_date_tbl.EXTEND(1);
7984             x_pfunc_rev_rate_date_tbl(kk)      := p_budget_lines_tbl(kk).projfunc_rev_rate_date;
7985             --log1('----- STAGE X76-------');
7986             x_delete_flag_tbl.EXTEND(1);
7987             x_delete_flag_tbl(kk)              := p_delete_flag_tbl(kk);
7988             x_spread_curve_id_tbl.EXTEND(1);
7989             x_spread_curve_id_tbl(kk)          := p_spread_curve_id_tbl(kk);
7990             x_mfc_cost_type_id_tbl.EXTEND(1);
7991             x_mfc_cost_type_id_tbl(kk)         := p_mfc_cost_type_id_tbl(kk);
7992             x_etc_method_code_tbl.EXTEND(1);
7993             x_etc_method_code_tbl(kk)          := p_etc_method_code_tbl(kk);
7994             x_sp_fixed_date_tbl.EXTEND(1);
7995             x_sp_fixed_date_tbl(kk)            := p_sp_fixed_date_tbl(kk);
7996             x_res_class_code_tbl.EXTEND(1);
7997             x_res_class_code_tbl(kk)           := p_res_class_code_tbl(kk);
7998             x_rate_based_flag_tbl.EXTEND(1);
7999             x_rate_based_flag_tbl(kk)          := p_rate_based_flag_tbl(kk);
8000             x_rbs_elem_id_tbl.EXTEND(1);
8001             x_rbs_elem_id_tbl(kk)              := p_rbs_elem_id_tbl(kk);
8002             x_change_reason_code_tbl.EXTEND(1);
8003             x_change_reason_code_tbl(kk)       := p_budget_lines_tbl(kk).change_reason_code;
8004             x_description_tbl.EXTEND(1);
8005             x_description_tbl(kk)              := p_budget_lines_tbl(kk).description;
8006             --log1('----- STAGE X8-------');
8007 
8008             --For forecast version, The above amount tbls contain the Forecast amounts, The below
8009             --API is called to modify the Forecast amounts entered based on the ETC amounts entered.
8010             IF p_plan_class_code='FORECAST' THEN
8011 
8012 				--DEBUG_NS('Before get_total_fcst_amounts :: ');
8013 				--DEBUG_NS('p_budget_lines_tbl(kk).cbs_element_id :: '||p_budget_lines_tbl(kk).cbs_element_id);
8014                     get_total_fcst_amounts
8015                    (p_project_id                    =>p_project_id,
8016                     p_budget_version_id             =>p_budget_version_id,
8017                     p_task_id                       =>p_budget_lines_tbl(kk).pa_task_id,
8018                     p_resource_list_member_id       =>p_budget_lines_tbl(kk).resource_list_member_id,
8019 					p_cbs_element_id       =>p_budget_lines_tbl(kk).cbs_element_id, -- cbs enhancement changes bug#16445106
8020                     p_txn_currency_code             =>p_budget_lines_tbl(kk).txn_currency_code,
8021                     p_line_start_date               =>NULL,
8022                     p_line_end_date                 =>NULL,
8023                     p_prd_mask_st_date_tbl          =>SYSTEM.pa_date_tbl_type(),
8024                     p_prd_mask_end_date_tbl         =>SYSTEM.pa_date_tbl_type(),
8025                     p_st_index_in_prd_mask          =>NULL,
8026                     p_end_index_in_prd_mask         =>NULL,
8027                     p_etc_start_date                =>p_etc_start_date,
8028                     p_etc_quantity                  =>p_etc_quantity_tbl(kk),
8029                     p_fcst_quantity                 =>p_budget_lines_tbl(kk).quantity,
8030                     p_etc_raw_cost                  =>p_etc_raw_cost_tbl(kk),
8031                     p_fcst_raw_cost                 =>p_budget_lines_tbl(kk).raw_cost,
8032                     p_etc_burd_cost                 =>p_etc_burdened_cost_tbl(kk),
8033                     p_fcst_burd_cost                =>p_budget_lines_tbl(kk).burdened_cost,
8034                     p_etc_revenue                   =>p_etc_revenue_tbl(kk),
8035                     p_fcst_revenue                  =>p_budget_lines_tbl(kk).revenue,
8036                     px_cached_fcst_qty_tbl          =>l_cached_fcst_qty_tbl,
8037                     px_cached_fcst_raw_cost_tbl     =>l_cached_fcst_raw_cost_tbl,
8038                     px_cached_fcst_burd_cost_tbl    =>l_cached_fcst_burd_cost_tbl,
8039                     px_cached_fcst_revenue_tbl      =>l_cached_fcst_revenue_tbl,
8040                     px_cached_etc_qty_tbl           =>l_cached_etc_qty_tbl,
8041                     px_cached_etc_raw_cost_tbl      =>l_cached_etc_raw_cost_tbl,
8042                     px_cached_etc_burd_cost_tbl     =>l_cached_etc_burd_cost_tbl,
8043                     px_cached_etc_revenue_tbl       =>l_cached_etc_revenue_tbl,
8044                     x_total_quantity                =>x_total_qty_tbl(kk),
8045                     x_total_raw_cost                =>x_total_raw_cost_tbl(kk),
8046                     x_total_burd_cost               =>x_total_burdened_cost_tbl(kk),
8047                     x_total_revenue                 =>x_total_revenue_tbl(kk),
8048                     x_return_status                 =>x_return_status,
8049                     x_msg_count                     =>x_msg_count,
8050                     x_msg_data                      =>x_msg_data    );
8051 
8052                     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8053                          IF l_debug_mode = 'Y' THEN
8054                               pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
8055                               pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
8056                          END IF;
8057                          RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8058                     END IF;
8059 
8060                 END IF;
8061 
8062         END LOOP;--FOR kk IN 1..p_budget_lines_tbl.COUNT LOOP
8063         --log1('----- STAGE X9-------');
8064     END IF; --p_context
8065 
8066 
8067     IF l_debug_mode = 'Y' THEN
8068         pa_debug.g_err_stage := 'Leaving pa_fp_webadi_pkg.prepare_pbl_input';
8069         pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8070     END IF;
8071 
8072     IF l_debug_mode = 'Y' THEN
8073         pa_debug.reset_curr_function;
8074     END IF;
8075 
8076 EXCEPTION
8077     WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
8078         l_msg_count := FND_MSG_PUB.count_msg;
8079         IF l_msg_count = 1 and x_msg_data IS NULL THEN
8080            PA_INTERFACE_UTILS_PUB.get_messages
8081                  (p_encoded        => FND_API.G_TRUE
8082                   ,p_msg_index      => 1
8083                   ,p_msg_count      => l_msg_count
8084                   ,p_msg_data       => l_msg_data
8085                   ,p_data           => l_data
8086                   ,p_msg_index_out  => l_msg_index_out);
8087            x_msg_data := l_data;
8088            x_msg_count := l_msg_count;
8089         ELSE
8090            x_msg_count := l_msg_count;
8091         END IF;
8092         x_return_status := FND_API.G_RET_STS_ERROR;
8093 
8094         IF l_debug_mode = 'Y' THEN
8095           pa_debug.reset_curr_function;
8096         END IF;
8097         RETURN;
8098 
8099     WHEN OTHERS THEN
8100         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8101         x_msg_count     := 1;
8102         x_msg_data      := SQLERRM;
8103 
8104         FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
8105                               ,p_procedure_name  => 'prepare_pbl_input');
8106         IF l_debug_mode = 'Y' THEN
8107            pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
8108            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8109         END IF;
8110 
8111         IF l_debug_mode = 'Y' THEN
8112           pa_debug.reset_curr_function;
8113         END IF;
8114         RAISE;
8115 
8116 END prepare_pbl_input;
8117 
8118 PROCEDURE process_budget_lines
8119 ( p_context                         IN              VARCHAR2,
8120   p_budget_version_id               IN              pa_budget_versions.budget_version_id%TYPE,
8121   p_version_info_rec                IN              pa_fp_gen_amount_utils.fp_cols,
8122   p_task_id_tbl                     IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8123   p_rlm_id_tbl                      IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8124   p_cbs_element_id_tbl				IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),-- cbs enhancement changes bug#16445106
8125   p_ra_id_tbl                       IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8126   p_spread_curve_id_tbl             IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8127   p_mfc_cost_type_id_tbl            IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8128   p_etc_method_code_tbl             IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8129   p_sp_fixed_date_tbl               IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
8130   p_res_class_code_tbl              IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8131   p_rate_based_flag_tbl             IN              SYSTEM.pa_varchar2_1_tbl_type    := SYSTEM.pa_varchar2_1_tbl_type(),
8132   p_rbs_elem_id_tbl                 IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8133   p_txn_currency_code_tbl           IN              SYSTEM.pa_varchar2_15_tbl_type   := SYSTEM.pa_varchar2_15_tbl_type(),
8134   p_planning_start_date_tbl         IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
8135   p_planning_end_date_tbl           IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
8136   p_total_qty_tbl                   IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8137   p_total_raw_cost_tbl              IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8138   p_total_burdened_cost_tbl         IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8139   p_total_revenue_tbl               IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8140   p_raw_cost_rate_tbl               IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8141   p_burdened_cost_rate_tbl          IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8142   p_bill_rate_tbl                   IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8143   p_line_start_date_tbl             IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
8144   p_line_end_date_tbl               IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
8145   p_proj_cost_rate_type_tbl         IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8146   p_proj_cost_rate_date_type_tbl    IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8147   p_proj_cost_rate_tbl              IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8148   p_proj_cost_rate_date_tbl         IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
8149   p_proj_rev_rate_type_tbl          IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8150   p_proj_rev_rate_date_type_tbl     IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8151   p_proj_rev_rate_tbl               IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8152   p_proj_rev_rate_date_tbl          IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
8153   p_pfunc_cost_rate_type_tbl        IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8154   p_pfunc_cost_rate_date_typ_tbl    IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8155   p_pfunc_cost_rate_tbl             IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8156   p_pfunc_cost_rate_date_tbl        IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
8157   p_pfunc_rev_rate_type_tbl         IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8158   p_pfunc_rev_rate_date_type_tbl    IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8159   p_pfunc_rev_rate_tbl              IN              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type(),
8160   p_pfunc_rev_rate_date_tbl         IN              SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type(),
8161   p_change_reason_code_tbl          IN              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type(),
8162   p_description_tbl                 IN              SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type(),
8163   p_delete_flag_tbl                 IN              SYSTEM.pa_varchar2_1_tbl_type    := SYSTEM.pa_varchar2_1_tbl_type(),
8164   x_return_status                   OUT             NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
8165   x_msg_count                       OUT             NOCOPY NUMBER, --File.Sql.39 bug 4440895
8166   x_msg_data                        OUT             NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8167  )
8168 
8169 IS
8170       -- variables used for debugging
8171       l_module_name             VARCHAR2(100) := 'pa_fp_webadi_pkg.process_budget_lines';
8172       l_debug_mode              VARCHAR2(1) := 'N';
8173       l_debug_level3            CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
8174       l_debug_level5            CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
8175 
8176       l_return_status           VARCHAR2(1);
8177       l_msg_count               NUMBER;
8178       l_msg_data                VARCHAR2(2000);
8179       l_data                    VARCHAR2(2000);
8180       l_msg_index_out           NUMBER;
8181 
8182       -- variables used to copy the inputs and to be used inside the api
8183       l_task_id_tbl                            SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8184       l_rlm_id_tbl                             SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8185 	  l_cbs_element_id_tbl                     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();-- cbs enhancement changes bug#16445106
8186       l_ra_id_tbl                              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8187       l_spread_curve_id_tbl                    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8188       l_mfc_cost_type_id_tbl                   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8189       l_etc_method_code_tbl                    SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8190       l_sp_fixed_date_tbl                      SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8191       l_res_class_code_tbl                     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8192       l_rate_based_flag_tbl                    SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8193       l_rbs_elem_id_tbl                        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8194       l_txn_currency_code_tbl                  SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8195       l_planning_start_date_tbl                SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8196       l_planning_end_date_tbl                  SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8197       l_total_qty_tbl                          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8198       l_total_raw_cost_tbl                     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8199       l_total_burdened_cost_tbl                SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8200       l_total_revenue_tbl                      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8201       l_raw_cost_rate_tbl                      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8202       l_burdened_cost_rate_tbl                 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8203       l_bill_rate_tbl                          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8204       l_line_start_date_tbl                    SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8205       l_line_end_date_tbl                      SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8206       l_proj_cost_rate_type_tbl                SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8207       l_proj_cost_rate_date_type_tbl           SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8208       l_proj_cost_rate_tbl                     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8209       l_proj_cost_rate_date_tbl                SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8210       l_proj_rev_rate_type_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8211       l_proj_rev_rate_date_type_tbl            SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8212       l_proj_rev_rate_tbl                      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8213       l_proj_rev_rate_date_tbl                 SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8214       l_pfunc_cost_rate_type_tbl               SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8215       l_pfunc_cost_rate_date_typ_tbl           SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8216       l_pfunc_cost_rate_tbl                    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8217       l_pfunc_cost_rate_date_tbl               SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8218       l_pfunc_rev_rate_type_tbl                SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8219       l_pfunc_rev_rate_date_type_tbl           SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8220       l_pfunc_rev_rate_tbl                     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8221       l_pfunc_rev_rate_date_tbl                SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8222       l_change_reason_code_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8223       l_description_tbl                        SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8224 
8225 
8226       -- variables to copy the records with delete_flag = Y
8227       l_df_task_id_tbl                         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8228       l_df_rlm_id_tbl                          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8229 	  l_df_cbs_element_id_tbl                          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();-- cbs enhancement changes bug#16445106
8230       l_df_ra_id_tbl                           SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8231       l_df_spread_curve_id_tbl                 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8232       l_df_mfc_cost_type_id_tbl                SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8233       l_df_etc_method_code                     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8234       l_df_sp_fixed_date_tbl                   SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8235       l_df_res_class_code_tbl                  SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8236       l_df_rate_based_flag_tbl                 SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8237       l_df_rbs_elem_id_tbl                     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8238       l_df_txn_currency_code_tbl               SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8239       l_df_planning_start_date_tbl             SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8240       l_df_planning_end_date_tbl               SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8241       l_df_total_qty_tbl                       SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8242       l_df_total_raw_cost_tbl                  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8243       l_df_total_burdened_cost_tbl             SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8244       l_df_total_revenue_tbl                   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8245       l_df_raw_cost_rate_tbl                   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8246       l_df_burdened_cost_rate_tbl              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8247       l_df_bill_rate_tbl                       SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8248       l_df_line_start_date_tbl                 SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8249       l_df_line_end_date_tbl                   SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8250       l_df_pj_cost_rate_typ_tbl                SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8251       l_df_pj_cost_rate_date_typ_tbl           SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8252       l_df_pj_cost_rate_tbl                    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8253       l_df_pj_cost_rate_date_tbl               SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8254       l_df_pj_rev_rate_typ_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8255       l_df_pj_rev_rate_date_typ_tbl            SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8256       l_df_pj_rev_rate_tbl                     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8257       l_df_pj_rev_rate_date_tbl                SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8258       l_df_pf_cost_rate_typ_tbl                SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8259       l_df_pf_cost_rate_date_typ_tbl           SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8260       l_df_pf_cost_rate_tbl                    SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8261       l_df_pf_cost_rate_date_tbl               SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8262       l_df_pf_rev_rate_typ_tbl                 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8263       l_df_pf_rev_rate_date_typ_tbl            SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8264       l_df_pf_rev_rate_tbl                     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8265       l_df_pf_rev_rate_date_tbl                SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8266       l_df_change_reason_code_tbl              SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8267       l_df_description_tbl                     SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8268 
8269       l_total_rec_passed        INTEGER := 0;
8270       l_curr_ra_id_seq          NUMBER;
8271 
8272       -- counter variables
8273       i                         INTEGER;
8274 
8275       -- variables used to call add_planning_transactions
8276       l_new_elem_ver_id             pa_proj_element_versions.element_version_id%TYPE;
8277       l_new_elem_ver_id_tbl         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8278       l_new_rlm_id_tbl              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8279 	  l_new_cbs_elemet_id_tbl       SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();-- cbs enhancement changes bug#16445106
8280       l_new_planning_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8281       l_new_planning_end_date_tbl   SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8282 
8283       -- variables used to insert into pa_fp_rollup_tmp
8284       -- with delete flag = Y
8285       l_bl_del_flag_ra_id_tbl            SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8286       l_bl_del_flag_st_dt_tbl            SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8287       l_bl_del_flag_en_dt_tbl            SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8288       l_bl_del_flag_txn_curr_tbl         SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8289       l_bl_del_flag_txn_rc_tbl           SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8290       l_bl_del_flag_txn_bc_tbl           SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8291       l_bl_del_flag_txn_rev_tbl          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8292       l_bl_del_flag_pf_curr_tbl          SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8293       l_bl_del_flag_pf_cr_typ_tbl        SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8294       l_bl_del_flag_pf_cr_dt_typ_tbl     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8295       l_bl_del_flag_pf_cexc_rate_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8296       l_bl_del_flag_pf_cr_date_tbl       SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8297       l_bl_del_flag_pf_rr_typ_tbl        SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8298       l_bl_del_flag_pf_rr_dt_typ_tbl     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8299       l_bl_del_flag_pf_rexc_rate_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8300       l_bl_del_flag_pf_rr_date_tbl       SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8301       l_bl_del_flag_pj_curr_tbl          SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8302       l_bl_del_flag_pj_cr_typ_tbl        SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8303       l_bl_del_flag_pj_cr_dt_typ_tbl     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8304       l_bl_del_flag_pj_cexc_rate_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8305       l_bl_del_flag_pj_cr_date_tbl       SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8306       l_bl_del_flag_pj_rr_typ_tbl        SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8307       l_bl_del_flag_pj_rr_dt_typ_tbl     SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8308       l_bl_del_flag_pj_rexc_rate_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8309       l_bl_del_flag_pj_rr_date_tbl       SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8310       l_bl_del_flag_bl_id_tbl            SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8311       l_bl_del_flag_per_name_tbl         SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8312       l_bl_del_flag_pj_raw_cost_tbl      SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8313       l_bl_del_flag_pj_burd_cost_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8314       l_bl_del_flag_pj_rev_tbl           SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8315       l_bl_del_flag_raw_cost_tbl         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8316       l_bl_del_flag_burd_cost_tbl        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8317       l_bl_del_flag_rev_tbl              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8318       l_bl_del_flag_qty_tbl              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8319       l_bl_del_flag_c_rej_code_tbl       SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8320       l_bl_del_flag_b_rej_code_tbl       SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8321       l_bl_del_flag_r_rej_code_tbl       SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8322       l_bl_del_flag_o_rej_code_tbl       SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8323       l_bl_del_fg_pc_cnv_rej_cd_tbl      SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8324       l_bl_del_fg_pf_cnv_rej_cd_tbl      SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8325 
8326 
8327           -- for budget line context to spread the amounts
8328       l_new_ra_id                           pa_resource_assignments.resource_assignment_id%TYPE;
8329       l_calc_calling_context                VARCHAR2(30);
8330 
8331       -- variables used to call update_reporting_lines
8332       l_pji_res_ass_id_tbl                 SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8333       l_pji_period_name_tbl                SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8334       l_pji_start_date_tbl                 SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8335       l_pji_end_date_tbl                   SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8336       l_pji_txn_curr_code_tbl              SYSTEM.pa_varchar2_15_tbl_type   := SYSTEM.pa_varchar2_15_tbl_type();
8337       l_pji_txn_raw_cost_tbl               SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8338       l_pji_txn_burd_cost_tbl              SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8339       l_pji_txn_revenue_tbl                SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8340       l_pji_project_raw_cost_tbl           SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8341       l_pji_project_burd_cost_tbl          SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8342       l_pji_project_revenue_tbl            SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8343       l_pji_raw_cost_tbl                   SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8344       l_pji_burd_cost_tbl                  SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8345       l_pji_revenue_tbl                    SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8346       l_pji_cost_rej_code_tbl              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8347       l_pji_revenue_rej_code_tbl           SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8348       l_pji_burden_rej_code_tbl            SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8349       l_pji_other_rej_code                 SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8350       l_pji_pc_cur_conv_rej_code_tbl       SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8351       l_pji_pf_cur_conv_rej_code_tbl       SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8352       l_pji_quantity_tbl                   SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8353 
8354       --This table will hold the distinct NEW resource assignments passed to this API for processing (excluding delete flag = Y recs)
8355       --Index will be in the following format : 'T' || <Task Id> || 'R' || <Rlm Id>
8356       l_distinct_new_ra_tbl                varchar_32_indexed_num_tbl_typ;
8357       l_distinct_new_ra_index              VARCHAR2(32);
8358 
8359 
8360       l_new_res_asg_rbs_elem_id         pa_resource_assignments.rbs_element_id%TYPE;
8361       l_new_res_asg_res_class_code      pa_resource_assignments.resource_class_code%TYPE;
8362       l_new_res_asg_rate_based_flag     pa_resource_assignments.rate_based_flag%TYPE;
8363 
8364       l_g_miss_char   CONSTANT      VARCHAR(1)  := FND_API.G_MISS_CHAR;
8365       l_g_miss_num    CONSTANT      NUMBER      := FND_API.G_MISS_NUM;
8366       l_g_miss_date   CONSTANT      DATE        := FND_API.G_MISS_DATE;
8367 
8368       l_debug_st_dt  DATE;
8369       l_debug_en_dt  DATE;
8370       l_debug_st_dt_tbl      SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8371       l_debug_en_dt_tbl      SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8372 
8373       l_debug_quantity           NUMBER;
8374       l_debug_quantity_tbl       SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8375       l_debug_raw_cost           NUMBER;
8376       l_debug_raw_cost_tbl       SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8377       l_debug_burdened_cost      NUMBER;
8378       l_debug_burdened_cost_tbl  SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8379       l_debug_revenue            NUMBER;
8380       l_debug_revenue_tbl        SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8381       l_temp                     VARCHAR2(100);
8382       l_upd_init_quantity_tbl            SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8383       l_upd_init_raw_cost_tbl            SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8384       l_upd_init_burdened_cost_tbl       SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8385       l_upd_init_revenue_tbl             SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8386       l_upd_proj_init_raw_cost_tbl       SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8387       l_upd_proj_init_burd_cost_tbl      SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8388       l_upd_proj_init_revenue_tbl        SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8389       l_upd_txn_init_raw_cost_tbl        SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8390       l_upd_txn_init_burd_cost_tbl       SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8391       l_upd_txn_init_revenue_tbl         SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8392       l_upd_budget_line_id_tbl           SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8393       l_upd_delete_flag_tbl              SYSTEM.pa_varchar2_1_tbl_type    := SYSTEM.pa_varchar2_1_tbl_type();
8394       l_upd_pj_cost_rate_typ_tbl         SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8395       l_upd_pj_cost_exc_rate_tbl         SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8396       l_upd_pj_cost_rate_dt_typ_tbl      SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8397       l_upd_pj_cost_rate_date_tbl        SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8398       l_upd_pj_rev_rate_typ_tbl          SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8399       l_upd_pj_rev_exc_rate_tbl          SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8400       l_upd_pj_rev_rate_dt_typ_tbl       SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8401       l_upd_pj_rev_rate_date_tbl         SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8402       l_upd_pf_cost_rate_typ_tbl         SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8403       l_upd_pf_cost_exc_rate_tbl         SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8404       l_upd_pf_cost_rate_dt_typ_tbl      SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8405       l_upd_pf_cost_rate_date_tbl        SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8406       l_upd_pf_rev_rate_typ_tbl          SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8407       l_upd_pf_rev_exc_rate_tbl          SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8408       l_upd_pf_rev_rate_dt_typ_tbl       SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8409       l_upd_pf_rev_rate_date_tbl         SYSTEM.pa_date_tbl_type          := SYSTEM.pa_date_tbl_type();
8410       --Bug 4424457
8411       l_bl_count_tbl                     SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8412       l_bls_proccessed_flag              VARCHAR2(1);
8413       l_error_msg_code                   VARCHAR2(2000);
8414       l_dest_ver_id_tbl                  SYSTEM.pa_num_tbl_type           := SYSTEM.pa_num_tbl_type();
8415       l_chg_reason_code_tbl              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8416       l_desc_tbl                         SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8417 
8418       --bug 5962744
8419       l_extra_bl_flag_tbl                SYSTEM.pa_varchar2_1_tbl_type    := SYSTEM.pa_varchar2_1_tbl_type();
8420       l_ex_chg_rsn_code_tbl              SYSTEM.pa_varchar2_30_tbl_type   := SYSTEM.pa_varchar2_30_tbl_type();
8421       l_ex_desc_tbl                      SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8422       l_ra_exists                        VARCHAR2(1);
8423       l_extra_bls_exists                 VARCHAR2(1);
8424       j                                  INTEGER;
8425 BEGIN
8426         --log1('PBL Begin '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8427         fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
8428 
8429         x_return_status := FND_API.G_RET_STS_SUCCESS;
8430         x_msg_count := 0;
8431         --log1('----- STAGE PBL1.0-------');
8432 
8433         IF l_debug_mode = 'Y' THEN
8434               pa_debug.Set_Curr_Function
8435                           (p_function   => l_module_name,
8436                            p_debug_mode => l_debug_mode);
8437         END IF;
8438 
8439         IF l_debug_mode = 'Y' THEN
8440               pa_debug.g_err_stage := 'Entering into process_budget_lines';
8441               pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8442               pa_debug.g_err_stage := 'Validating input parameters';
8443               pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8444         END IF;
8445 
8446         -- validate the mandatory input parameters
8447 
8448         -- valid p_context are WEBADI_PERIODIC and WEBADI_NON_PERIODIC
8449         IF p_context IS NULL THEN
8450               IF l_debug_mode = 'Y' THEN
8451                    pa_debug.g_err_stage := 'p_context is passed as null';
8452                    pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8453               END IF;
8454               pa_utils.add_message(p_app_short_name   => 'PA',
8455                                    p_msg_name         => 'PA_FP_INV_PARAM_PASSED',
8456                                    p_token1           => 'PROCEDURENAME',
8457                                    p_value1           => l_module_name);
8458 
8459               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8460         END IF;
8461 
8462         -- budget_version_id is not passed
8463         IF p_budget_version_id IS NULL THEN
8464               IF l_debug_mode = 'Y' THEN
8465                    pa_debug.g_err_stage := 'p_budget_version_id is passed as null';
8466                    pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8467               END IF;
8468               pa_utils.add_message(p_app_short_name   => 'PA',
8469                                    p_msg_name         => 'PA_FP_INV_PARAM_PASSED',
8470                                    p_token1           => 'PROCEDURENAME',
8471                                    p_value1           => l_module_name);
8472 
8473               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8474         END IF;
8475         -- version_info_rec type is null
8476         IF p_version_info_rec.x_project_id IS NULL THEN
8477               IF l_debug_mode = 'Y' THEN
8478                    pa_debug.g_err_stage := 'p_version_info_rec is passed as null';
8479                    pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8480               END IF;
8481               pa_utils.add_message(p_app_short_name   => 'PA',
8482                                    p_msg_name         => 'PA_FP_INV_PARAM_PASSED',
8483                                    p_token1           => 'PROCEDURENAME',
8484                                    p_value1           => l_module_name);
8485 
8486               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8487         END IF;
8488 
8489         -- if no data is present in the task id table
8490         IF NOT p_task_id_tbl.EXISTS(1) THEN
8491               IF l_debug_mode = 'Y' THEN
8492                    pa_debug.g_err_stage := 'task id table is passed as null';
8493                    pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8494               END IF;
8495               RETURN;
8496         END IF;
8497 
8498         --log1('----- STAGE PBL1.1-------');
8499         /*FOR zz IN 1..p_ra_id_tbl.COUNT LOOP
8500 
8501             log1('p_ra_id_tbl ('||zz||') is '||p_ra_id_tbl(zz));
8502             log1('p_planning_start_date_tbl ('||zz||') is '||p_planning_start_date_tbl(zz));
8503             log1('p_planning_end_date_tbl ('||zz||') is '||p_planning_end_date_tbl(zz));
8504 
8505         end loop;*/
8506 
8507         -- the length of all the input tables should be same
8508         IF p_task_id_tbl.COUNT <> p_rlm_id_tbl.COUNT OR
8509            p_task_id_tbl.COUNT <> p_ra_id_tbl.COUNT OR
8510            p_task_id_tbl.COUNT <> p_txn_currency_code_tbl.COUNT OR
8511            p_task_id_tbl.COUNT <> p_planning_start_date_tbl.COUNT OR
8512            p_task_id_tbl.COUNT <> p_planning_end_date_tbl.COUNT OR
8513            p_task_id_tbl.COUNT <> p_line_start_date_tbl.COUNT OR
8514            p_task_id_tbl.COUNT <> p_line_end_date_tbl.COUNT OR
8515            p_task_id_tbl.COUNT <> p_spread_curve_id_tbl.COUNT OR
8516            p_task_id_tbl.COUNT <> p_mfc_cost_type_id_tbl.COUNT OR
8517            p_task_id_tbl.COUNT <> p_etc_method_code_tbl.COUNT OR
8518            p_task_id_tbl.COUNT <> p_sp_fixed_date_tbl.COUNT OR
8519            p_task_id_tbl.COUNT <> p_res_class_code_tbl.COUNT OR
8520            p_task_id_tbl.COUNT <> p_rate_based_flag_tbl.COUNT OR
8521            p_task_id_tbl.COUNT <> p_rbs_elem_id_tbl.COUNT OR
8522            p_task_id_tbl.COUNT <> p_total_qty_tbl.COUNT OR
8523            p_task_id_tbl.COUNT <> p_total_raw_cost_tbl.COUNT OR
8524            p_task_id_tbl.COUNT <> p_total_burdened_cost_tbl.COUNT OR
8525            p_task_id_tbl.COUNT <> p_total_revenue_tbl.COUNT OR
8526            p_task_id_tbl.COUNT <> p_raw_cost_rate_tbl.COUNT OR
8527            p_task_id_tbl.COUNT <> p_burdened_cost_rate_tbl.COUNT OR
8528            p_task_id_tbl.COUNT <> p_bill_rate_tbl.COUNT OR
8529            p_task_id_tbl.COUNT <> p_line_start_date_tbl.COUNT OR
8530            p_task_id_tbl.COUNT <> p_line_end_date_tbl.COUNT OR
8531            p_task_id_tbl.COUNT <> p_proj_cost_rate_type_tbl.COUNT OR
8532            p_task_id_tbl.COUNT <> p_proj_cost_rate_date_type_tbl.COUNT OR
8533            p_task_id_tbl.COUNT <> p_proj_cost_rate_tbl.COUNT OR
8534            p_task_id_tbl.COUNT <> p_proj_cost_rate_date_tbl.COUNT OR
8535            p_task_id_tbl.COUNT <> p_proj_rev_rate_type_tbl.COUNT OR
8536            p_task_id_tbl.COUNT <> p_proj_rev_rate_date_type_tbl.COUNT OR
8537            p_task_id_tbl.COUNT <> p_proj_rev_rate_tbl.COUNT OR
8538            p_task_id_tbl.COUNT <> p_proj_rev_rate_date_tbl.COUNT OR
8539            p_task_id_tbl.COUNT <> p_pfunc_cost_rate_type_tbl.COUNT OR
8540            p_task_id_tbl.COUNT <> p_pfunc_cost_rate_date_typ_tbl.COUNT OR
8541            p_task_id_tbl.COUNT <> p_pfunc_cost_rate_tbl.COUNT OR
8542            p_task_id_tbl.COUNT <> p_pfunc_cost_rate_date_tbl.COUNT OR
8543            p_task_id_tbl.COUNT <> p_pfunc_rev_rate_type_tbl.COUNT OR
8544            p_task_id_tbl.COUNT <> p_pfunc_rev_rate_date_type_tbl.COUNT OR
8545            p_task_id_tbl.COUNT <> p_pfunc_rev_rate_tbl.COUNT OR
8546            p_task_id_tbl.COUNT <> p_pfunc_rev_rate_date_tbl.COUNT OR
8547            p_task_id_tbl.COUNT <> p_change_reason_code_tbl.COUNT OR
8548            p_task_id_tbl.COUNT <> p_description_tbl.COUNT OR
8549            p_task_id_tbl.COUNT <> p_delete_flag_tbl.COUNT OR
8550 		   p_task_id_tbl.COUNT <> p_cbs_element_id_tbl.COUNT -- cbs enhancement changes bug#16445106
8551 		   THEN
8552 
8553             --log1(' 1 '||p_rlm_id_tbl.COUNT);
8554             --log1(' 2 '||p_ra_id_tbl.COUNT);
8555             --log1(' 3 '||p_txn_currency_code_tbl.COUNT);
8556             --log1(' 4 '||p_planning_start_date_tbl.COUNT);
8557             --log1(' 5 '||p_planning_end_date_tbl.COUNT);
8558             --log1(' 6 '||p_line_start_date_tbl.COUNT);
8559             --log1(' 7 '||p_line_end_date_tbl.COUNT);
8560             --log1(' 8 '||p_spread_curve_id_tbl.COUNT);
8561             --log1(' 9 '||p_mfc_cost_type_id_tbl.COUNT);
8562             --log1(' 10 '||p_etc_method_code_tbl.COUNT);
8563             --log1(' 11 '||p_sp_fixed_date_tbl.COUNT);
8564             --log1(' 12 '||p_total_qty_tbl.COUNT);
8565             --log1(' 13 '||p_total_raw_cost_tbl.COUNT);
8566             --log1(' 14 '||p_total_burdened_cost_tbl.COUNT);
8567             --log1(' 15 '||p_total_revenue_tbl.COUNT);
8568             --log1(' 16 '||p_raw_cost_rate_tbl.COUNT);
8569             --log1(' 17 '||p_burdened_cost_rate_tbl.COUNT);
8570             --log1(' 18 '||p_bill_rate_tbl.COUNT);
8571             --log1(' 19 '||p_line_start_date_tbl.COUNT);
8572             --log1(' 20 '||p_line_end_date_tbl.COUNT);
8573             --log1(' 21 '||p_proj_cost_rate_type_tbl.COUNT);
8574             --log1(' 22 '||p_proj_cost_rate_date_type_tbl.COUNT);
8575             --log1(' 23 '||p_proj_cost_rate_tbl.COUNT);
8576             --log1(' 24 '||p_proj_cost_rate_date_tbl.COUNT);
8577             --log1(' 25 '||p_proj_rev_rate_type_tbl.COUNT);
8578             --log1(' 26 '||p_proj_rev_rate_date_type_tbl.COUNT);
8579             --log1(' 27 '||p_proj_rev_rate_tbl.COUNT);
8580             --log1(' 28 '||p_proj_rev_rate_date_tbl.COUNT);
8581             --log1(' 29 '||p_pfunc_cost_rate_type_tbl.COUNT);
8582             --log1(' 30 '||p_pfunc_cost_rate_date_typ_tbl.COUNT);
8583             --log1(' 31 '||p_pfunc_cost_rate_tbl.COUNT);
8584             --log1(' 32 '||p_pfunc_cost_rate_date_tbl.COUNT);
8585             --log1(' 33 '||p_pfunc_rev_rate_type_tbl.COUNT);
8586             --log1(' 34 '||p_pfunc_rev_rate_date_type_tbl.COUNT);
8587             --log1(' 35 '||p_pfunc_rev_rate_tbl.COUNT);
8588             --log1(' 36 '||p_pfunc_rev_rate_date_tbl.COUNT);
8589             --log1(' 37 '||p_change_reason_code_tbl.COUNT);
8590             --log1(' 38 '||p_description_tbl.COUNT);
8591             --log1(' 39 '||p_delete_flag_tbl.COUNT );
8592 
8593               IF l_debug_mode = 'Y' THEN
8594                    pa_debug.g_err_stage := 'Required input tables are not equal in length';
8595                    pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8596               END IF;
8597               pa_utils.add_message(p_app_short_name   => 'PA',
8598                                    p_msg_name         => 'PA_FP_INV_PARAM_PASSED',
8599                                    p_token1           => 'PROCEDURENAME',
8600                                    p_value1           => l_module_name);
8601 
8602               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8603         END IF;
8604         --log1('----- STAGE PBL1.2-------');
8605 
8606         -- input parameters validation done
8607 
8608         -- checking for the context and if its non periodic context, then
8609         -- filtering out the records with delete flag <> Y
8610         IF l_debug_mode = 'Y' THEN
8611              pa_debug.g_err_stage := 'p_context is: ' || p_context;
8612              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8613         END IF;
8614 
8615         --log1('PBL 1 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8616         IF p_context = 'WEBADI_NON_PERIODIC' THEN
8617             FOR i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST LOOP
8618                   IF Nvl(p_delete_flag_tbl(i), 'N') <> 'Y' THEN
8619                         l_ra_id_tbl.extend(1);
8620                         l_ra_id_tbl(l_ra_id_tbl.COUNT)                                        := p_ra_id_tbl(i);
8621                         l_task_id_tbl.EXTEND(1);
8622                         l_task_id_tbl(l_task_id_tbl.COUNT)                                    := p_task_id_tbl(i);
8623                         l_rlm_id_tbl.EXTEND(1);
8624                         l_rlm_id_tbl(l_rlm_id_tbl.COUNT)                                      := p_rlm_id_tbl(i);
8625 						l_cbs_element_id_tbl.EXTEND(1);
8626                         l_cbs_element_id_tbl(l_cbs_element_id_tbl.COUNT)                                      := p_cbs_element_id_tbl(i);-- cbs enhancement changes bug#16445106
8627                         l_spread_curve_id_tbl.EXTEND(1);
8628                         l_spread_curve_id_tbl(l_spread_curve_id_tbl.COUNT)                    := p_spread_curve_id_tbl(i);
8629                         l_mfc_cost_type_id_tbl.EXTEND(1);
8630                         l_mfc_cost_type_id_tbl(l_mfc_cost_type_id_tbl.COUNT)                  := p_mfc_cost_type_id_tbl(i);
8631                         l_etc_method_code_tbl.EXTEND(1);
8632                         l_etc_method_code_tbl(l_etc_method_code_tbl.COUNT)                    := p_etc_method_code_tbl(i);
8633                         l_sp_fixed_date_tbl.EXTEND(1);
8634                         l_sp_fixed_date_tbl(l_sp_fixed_date_tbl.COUNT)                        := p_sp_fixed_date_tbl(i);
8635                         l_res_class_code_tbl.EXTEND(1);
8636                         l_res_class_code_tbl(l_res_class_code_tbl.COUNT)                      := p_res_class_code_tbl(i);
8637                         l_rate_based_flag_tbl.EXTEND(1);
8638                         l_rate_based_flag_tbl(l_rate_based_flag_tbl.COUNT)                    := p_rate_based_flag_tbl(i);
8639                         l_rbs_elem_id_tbl.EXTEND(1);
8640                         l_rbs_elem_id_tbl(l_rbs_elem_id_tbl.COUNT)                            := p_rbs_elem_id_tbl(i);
8641                         l_txn_currency_code_tbl.EXTEND(1);
8642                         l_txn_currency_code_tbl(l_txn_currency_code_tbl.COUNT)                := p_txn_currency_code_tbl(i);
8643                         l_planning_start_date_tbl.EXTEND(1);
8644                         l_planning_start_date_tbl(l_planning_start_date_tbl.COUNT)            := p_planning_start_date_tbl(i);
8645                         l_planning_end_date_tbl.EXTEND(1);
8646                         l_planning_end_date_tbl(l_planning_end_date_tbl.COUNT)                := p_planning_end_date_tbl(i);
8647                         l_total_qty_tbl.EXTEND(1);
8648                         l_total_qty_tbl(l_total_qty_tbl.COUNT)                                := p_total_qty_tbl(i);
8649                         l_total_raw_cost_tbl.EXTEND(1);
8650                         l_total_raw_cost_tbl(l_total_raw_cost_tbl.COUNT)                      := p_total_raw_cost_tbl(i);
8651                         l_total_burdened_cost_tbl.EXTEND(1);
8652                         l_total_burdened_cost_tbl(l_total_burdened_cost_tbl.COUNT)            := p_total_burdened_cost_tbl(i);
8653                         l_total_revenue_tbl.EXTEND(1);
8654                         l_total_revenue_tbl(l_total_revenue_tbl.COUNT)                        := p_total_revenue_tbl(i);
8655                         l_raw_cost_rate_tbl.EXTEND(1);
8656                         l_raw_cost_rate_tbl(l_raw_cost_rate_tbl.COUNT)                        := p_raw_cost_rate_tbl(i);
8657                         l_burdened_cost_rate_tbl.EXTEND(1);
8658                         l_burdened_cost_rate_tbl(l_burdened_cost_rate_tbl.COUNT)              := p_burdened_cost_rate_tbl(i);
8659                         l_bill_rate_tbl.EXTEND(1);
8660                         l_bill_rate_tbl(l_bill_rate_tbl.COUNT)                                := p_bill_rate_tbl(i);
8661                         l_proj_cost_rate_type_tbl.EXTEND(1);
8662                         l_proj_cost_rate_type_tbl(l_proj_cost_rate_type_tbl.COUNT)            := p_proj_cost_rate_type_tbl(i);
8663                         l_proj_cost_rate_date_type_tbl.EXTEND(1);
8664                         l_proj_cost_rate_date_type_tbl(l_proj_cost_rate_date_type_tbl.COUNT)  := p_proj_cost_rate_date_type_tbl(i);
8665                         l_proj_cost_rate_tbl.EXTEND(1);
8666                         l_proj_cost_rate_tbl(l_proj_cost_rate_tbl.COUNT)                      := p_proj_cost_rate_tbl(i);
8667                         l_proj_cost_rate_date_tbl.EXTEND(1);
8668                         l_proj_cost_rate_date_tbl(l_proj_cost_rate_date_tbl.COUNT)            := p_proj_cost_rate_date_tbl(i);
8669                         l_proj_rev_rate_type_tbl.EXTEND(1);
8670                         l_proj_rev_rate_type_tbl(l_proj_rev_rate_type_tbl.COUNT)              := p_proj_rev_rate_type_tbl(i);
8671                         l_proj_rev_rate_date_type_tbl.EXTEND(1);
8672                         l_proj_rev_rate_date_type_tbl(l_proj_rev_rate_date_type_tbl.COUNT)    := p_proj_rev_rate_date_type_tbl(i);
8673                         l_proj_rev_rate_tbl.EXTEND(1);
8674                         l_proj_rev_rate_tbl(l_proj_rev_rate_tbl.COUNT)                        := p_proj_rev_rate_tbl(i);
8675                         l_proj_rev_rate_date_tbl.EXTEND(1);
8676                         l_proj_rev_rate_date_tbl(l_proj_rev_rate_date_tbl.COUNT)              := p_proj_rev_rate_date_tbl(i);
8677                         l_pfunc_cost_rate_type_tbl.EXTEND(1);
8678                         l_pfunc_cost_rate_type_tbl(l_pfunc_cost_rate_type_tbl.COUNT)          := p_pfunc_cost_rate_type_tbl(i);
8679                         l_pfunc_cost_rate_date_typ_tbl.EXTEND(1);
8680                         l_pfunc_cost_rate_date_typ_tbl(l_pfunc_cost_rate_date_typ_tbl.COUNT)  := p_pfunc_cost_rate_date_typ_tbl(i);
8681                         l_pfunc_cost_rate_tbl.EXTEND(1);
8682                         l_pfunc_cost_rate_tbl(l_pfunc_cost_rate_tbl.COUNT)                    := p_pfunc_cost_rate_tbl(i);
8683                         l_pfunc_cost_rate_date_tbl.EXTEND(1);
8684                         l_pfunc_cost_rate_date_tbl(l_pfunc_cost_rate_date_tbl.COUNT)          := p_pfunc_cost_rate_date_tbl(i);
8685                         l_pfunc_rev_rate_type_tbl.EXTEND(1);
8686                         l_pfunc_rev_rate_type_tbl(l_pfunc_rev_rate_type_tbl.COUNT)            := p_pfunc_rev_rate_type_tbl(i);
8687                         l_pfunc_rev_rate_date_type_tbl.EXTEND(1);
8688                         l_pfunc_rev_rate_date_type_tbl(l_pfunc_rev_rate_date_type_tbl.COUNT)  := p_pfunc_rev_rate_date_type_tbl(i);
8689                         l_pfunc_rev_rate_tbl.EXTEND(1);
8690                         l_pfunc_rev_rate_tbl(l_pfunc_rev_rate_tbl.COUNT)                      := p_pfunc_rev_rate_tbl(i);
8691                         l_pfunc_rev_rate_date_tbl.EXTEND(1);
8692                         l_pfunc_rev_rate_date_tbl(l_pfunc_rev_rate_date_tbl.COUNT)            := p_pfunc_rev_rate_date_tbl(i);
8693                         l_change_reason_code_tbl.EXTEND(1);
8694                         l_change_reason_code_tbl(l_change_reason_code_tbl.COUNT)              := p_change_reason_code_tbl(i);
8695                         l_description_tbl.EXTEND(1);
8696                         l_description_tbl(l_description_tbl.COUNT)                            := p_description_tbl(i);
8697 
8698                   ELSIF Nvl(p_delete_flag_tbl(i), 'N') = 'Y' THEN
8699                         -- if the delete flag is Y then collecting them separately
8700                         l_df_ra_id_tbl.EXTEND(1);
8701                         l_df_ra_id_tbl(l_df_ra_id_tbl.COUNT)                                  := p_ra_id_tbl(i);
8702                         l_df_task_id_tbl.EXTEND(1);
8703                         l_df_task_id_tbl(l_df_task_id_tbl.COUNT)                              := p_task_id_tbl(i);
8704                         l_df_rlm_id_tbl.EXTEND(1);
8705                         l_df_rlm_id_tbl(l_df_rlm_id_tbl.COUNT)                                := p_rlm_id_tbl(i);
8706 						l_df_cbs_element_id_tbl.EXTEND(1);
8707                         l_df_cbs_element_id_tbl(l_df_cbs_element_id_tbl.COUNT)                                := p_cbs_element_id_tbl(i);
8708                         l_df_spread_curve_id_tbl.EXTEND(1);
8709                         l_df_spread_curve_id_tbl(l_df_spread_curve_id_tbl.COUNT)              := p_spread_curve_id_tbl(i);
8710                         l_df_mfc_cost_type_id_tbl.EXTEND(1);
8711                         l_df_mfc_cost_type_id_tbl(l_df_mfc_cost_type_id_tbl.COUNT)            := p_mfc_cost_type_id_tbl(i);
8712                         l_df_etc_method_code.EXTEND(1);
8713                         l_df_etc_method_code(l_df_etc_method_code.COUNT)                      := p_etc_method_code_tbl(i);
8714                         l_df_sp_fixed_date_tbl.EXTEND(1);
8715                         l_df_sp_fixed_date_tbl(l_df_sp_fixed_date_tbl.COUNT)                  := p_sp_fixed_date_tbl(i);
8716                         l_df_res_class_code_tbl.EXTEND(1);
8717                         l_df_res_class_code_tbl(l_df_res_class_code_tbl.COUNT)                := p_res_class_code_tbl(i);
8718                         l_df_rate_based_flag_tbl.EXTEND(1);
8719                         l_df_rate_based_flag_tbl(l_df_rate_based_flag_tbl.COUNT)              := p_rate_based_flag_tbl(i);
8720                         l_df_rbs_elem_id_tbl.EXTEND(1);
8721                         l_df_rbs_elem_id_tbl(l_df_rbs_elem_id_tbl.COUNT)                      := p_rbs_elem_id_tbl(i);
8722                         l_df_txn_currency_code_tbl.EXTEND(1);
8723                         l_df_txn_currency_code_tbl(l_df_txn_currency_code_tbl.COUNT)          := p_txn_currency_code_tbl(i);
8724                         l_df_planning_start_date_tbl.EXTEND(1);
8725                         l_df_planning_start_date_tbl(l_df_planning_start_date_tbl.COUNT)      := p_planning_start_date_tbl(i);
8726                         l_df_planning_end_date_tbl.EXTEND(1);
8727                         l_df_planning_end_date_tbl(l_df_planning_end_date_tbl.COUNT)          := p_planning_end_date_tbl(i);
8728                         l_df_total_qty_tbl.EXTEND(1);
8729                         l_df_total_qty_tbl(l_df_total_qty_tbl.COUNT)                          := p_total_qty_tbl(i);
8730                         l_df_total_raw_cost_tbl.EXTEND(1);
8731                         l_df_total_raw_cost_tbl(l_df_total_raw_cost_tbl.COUNT)                := p_total_raw_cost_tbl(i);
8732                         l_df_total_burdened_cost_tbl.EXTEND(1);
8733                         l_df_total_burdened_cost_tbl(l_df_total_burdened_cost_tbl.COUNT)      := p_total_burdened_cost_tbl(i);
8734                         l_df_total_revenue_tbl.EXTEND(1);
8735                         l_df_total_revenue_tbl(l_df_total_revenue_tbl.COUNT)                  := p_total_revenue_tbl(i);
8736                         l_df_raw_cost_rate_tbl.EXTEND(1);
8737                         l_df_raw_cost_rate_tbl(l_df_raw_cost_rate_tbl.COUNT)                  := p_raw_cost_rate_tbl(i);
8738                         l_df_burdened_cost_rate_tbl.EXTEND(1);
8739                         l_df_burdened_cost_rate_tbl(l_df_burdened_cost_rate_tbl.COUNT)        := p_burdened_cost_rate_tbl(i);
8740                         l_df_bill_rate_tbl.EXTEND(1);
8741                         l_df_bill_rate_tbl(l_df_bill_rate_tbl.COUNT)                          := p_bill_rate_tbl(i);
8742                         l_df_line_start_date_tbl.EXTEND(1);
8743                         l_df_line_start_date_tbl(l_df_line_start_date_tbl.COUNT)              := p_line_start_date_tbl(i);
8744                         l_df_line_end_date_tbl.EXTEND(1);
8745                         l_df_line_end_date_tbl(l_df_line_end_date_tbl.COUNT)                  := p_line_end_date_tbl(i);
8746                         l_df_pj_cost_rate_typ_tbl.EXTEND(1);
8747                         l_df_pj_cost_rate_typ_tbl(l_df_pj_cost_rate_typ_tbl.COUNT)            := p_proj_cost_rate_type_tbl(i);
8748                         l_df_pj_cost_rate_date_typ_tbl.EXTEND(1);
8749                         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);
8750                         l_df_pj_cost_rate_tbl.EXTEND(1);
8751                         l_df_pj_cost_rate_tbl(l_df_pj_cost_rate_tbl.COUNT)                    := p_proj_cost_rate_tbl(i);
8752                         l_df_pj_cost_rate_date_tbl.EXTEND(1);
8753                         l_df_pj_cost_rate_date_tbl(l_df_pj_cost_rate_date_tbl.COUNT)          := p_proj_cost_rate_date_tbl(i);
8754                         l_df_pj_rev_rate_typ_tbl.EXTEND(1);
8755                         l_df_pj_rev_rate_typ_tbl(l_df_pj_rev_rate_typ_tbl.COUNT)              := p_proj_rev_rate_type_tbl(i);
8756                         l_df_pj_rev_rate_date_typ_tbl.EXTEND(1);
8757                         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);
8758                         l_df_pj_rev_rate_tbl.EXTEND(1);
8759                         l_df_pj_rev_rate_tbl(l_df_pj_rev_rate_tbl.COUNT)                      := p_proj_rev_rate_tbl(i);
8760                         l_df_pj_rev_rate_date_tbl.EXTEND(1);
8761                         l_df_pj_rev_rate_date_tbl(l_df_pj_rev_rate_date_tbl.COUNT)            := p_proj_rev_rate_date_tbl(i);
8762                         l_df_pf_cost_rate_typ_tbl.EXTEND(1);
8763                         l_df_pf_cost_rate_typ_tbl(l_df_pf_cost_rate_typ_tbl.COUNT)            := p_pfunc_cost_rate_type_tbl(i);
8764                         l_df_pf_cost_rate_date_typ_tbl.EXTEND(1);
8765                         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);
8766                         l_df_pf_cost_rate_tbl.EXTEND(1);
8767                         l_df_pf_cost_rate_tbl(l_df_pf_cost_rate_tbl.COUNT)                    := p_pfunc_cost_rate_tbl(i);
8768                         l_df_pf_cost_rate_date_tbl.EXTEND(1);
8769                         l_df_pf_cost_rate_date_tbl(l_df_pf_cost_rate_date_tbl.COUNT)          := p_pfunc_cost_rate_date_tbl(i);
8770                         l_df_pf_rev_rate_typ_tbl.EXTEND(1);
8771                         l_df_pf_rev_rate_typ_tbl(l_df_pf_rev_rate_typ_tbl.COUNT)              := p_pfunc_rev_rate_type_tbl(i);
8772                         l_df_pf_rev_rate_date_typ_tbl.EXTEND(1);
8773                         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);
8774                         l_df_pf_rev_rate_tbl.EXTEND(1);
8775                         l_df_pf_rev_rate_tbl(l_df_pf_rev_rate_tbl.COUNT)                      := p_pfunc_rev_rate_tbl(i);
8776                         l_df_pf_rev_rate_date_tbl.EXTEND(1);
8777                         l_df_pf_rev_rate_date_tbl(l_df_pf_rev_rate_date_tbl.COUNT)            := p_pfunc_rev_rate_date_tbl(i);
8778                         l_df_change_reason_code_tbl.EXTEND(1);
8779                         l_df_change_reason_code_tbl(l_df_change_reason_code_tbl.COUNT)        := p_change_reason_code_tbl(i);
8780                         l_df_description_tbl.EXTEND(1);
8781                         l_df_description_tbl(l_df_description_tbl.COUNT)                      := p_description_tbl(i);
8782                   END IF; -- delete_flag
8783             END LOOP;
8784         ELSE  -- periodic, considering all the records passed
8785               l_task_id_tbl                      := p_task_id_tbl;
8786               l_rlm_id_tbl                       := p_rlm_id_tbl;
8787 			  l_cbs_element_id_tbl               := p_cbs_element_id_tbl;-- cbs enhancement changes bug#16445106
8788               l_ra_id_tbl                        := p_ra_id_tbl;
8789               l_txn_currency_code_tbl            := p_txn_currency_code_tbl;
8790               l_planning_start_date_tbl          := p_planning_start_date_tbl;
8791               l_planning_end_date_tbl            := p_planning_end_date_tbl;
8792               l_spread_curve_id_tbl              := p_spread_curve_id_tbl;
8793               l_mfc_cost_type_id_tbl             := p_mfc_cost_type_id_tbl;
8794               l_etc_method_code_tbl              := p_etc_method_code_tbl;
8795               l_sp_fixed_date_tbl                := p_sp_fixed_date_tbl;
8796               l_res_class_code_tbl               := p_res_class_code_tbl;
8797               l_rate_based_flag_tbl              := p_rate_based_flag_tbl;
8798               l_rbs_elem_id_tbl                  := p_rbs_elem_id_tbl;
8799               l_total_qty_tbl                    := p_total_qty_tbl;
8800               l_total_raw_cost_tbl               := p_total_raw_cost_tbl;
8801               l_total_burdened_cost_tbl          := p_total_burdened_cost_tbl;
8802               l_total_revenue_tbl                := p_total_revenue_tbl;
8803               l_raw_cost_rate_tbl                := p_raw_cost_rate_tbl;
8804               l_burdened_cost_rate_tbl           := p_burdened_cost_rate_tbl;
8805               l_bill_rate_tbl                    := p_bill_rate_tbl;
8806               l_line_start_date_tbl              := p_line_start_date_tbl;
8807               l_line_end_date_tbl                := p_line_end_date_tbl;
8808               l_proj_cost_rate_type_tbl          := p_proj_cost_rate_type_tbl;
8809               l_proj_cost_rate_date_type_tbl     := p_proj_cost_rate_date_type_tbl;
8810               l_proj_cost_rate_tbl               := p_proj_cost_rate_tbl;
8811               l_proj_cost_rate_date_tbl          := p_proj_cost_rate_date_tbl;
8812               l_proj_rev_rate_type_tbl           := p_proj_rev_rate_type_tbl;
8813               l_proj_rev_rate_date_type_tbl      := p_proj_rev_rate_date_type_tbl;
8814               l_proj_rev_rate_tbl                := p_proj_rev_rate_tbl;
8815               l_proj_rev_rate_date_tbl           := p_proj_rev_rate_date_tbl;
8816               l_pfunc_cost_rate_type_tbl         := p_pfunc_cost_rate_type_tbl;
8817               l_pfunc_cost_rate_date_typ_tbl     := p_pfunc_cost_rate_date_typ_tbl;
8818               l_pfunc_cost_rate_tbl              := p_pfunc_cost_rate_tbl;
8819               l_pfunc_cost_rate_date_tbl         := p_pfunc_cost_rate_date_tbl;
8820               l_pfunc_rev_rate_type_tbl          := p_pfunc_rev_rate_type_tbl;
8821               l_pfunc_rev_rate_date_type_tbl     := p_pfunc_rev_rate_date_type_tbl;
8822               l_pfunc_rev_rate_tbl               := p_pfunc_rev_rate_tbl;
8823               l_pfunc_rev_rate_date_tbl          := p_pfunc_rev_rate_date_tbl;
8824               l_change_reason_code_tbl           := p_change_reason_code_tbl;
8825               l_description_tbl                  := p_description_tbl;
8826         END IF; -- p_context
8827         --log1('PBL 2 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8828 
8829         --log1('----- STAGE PBL1.3-------');
8830         IF l_debug_mode = 'Y' THEN
8831              pa_debug.g_err_stage := 'Input parameters are copied to local variables';
8832              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8833              pa_debug.g_err_stage := 'Checking for existing RAs';
8834              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8835         END IF;
8836 
8837         --log1('PBL 3 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8838         -- noting down the number of records passed
8839         l_total_rec_passed := p_task_id_tbl.COUNT;
8840         --log1('----- STAGE PBL1.4-------');
8841         FOR i IN 1..l_ra_id_tbl.COUNT LOOP
8842              -- checking for existing RAs
8843              -- firing the select only if it has not been done for the task-resource combination
8844              l_distinct_new_ra_index:= 'T'||l_task_id_tbl(i)||'R'||l_rlm_id_tbl(i);
8845              IF l_ra_id_tbl(i) IS NULL AND
8846                 (NOT l_distinct_new_ra_tbl.EXISTS(l_distinct_new_ra_index)) THEN
8847 
8848                    --log1('----- STAGE PBL2-------');
8849                    --Populate the l_distinct_new_ra_tbl for the index corresponding to the Task/Rlm
8850                    --with the value 0 to indicate the Task/Rlm has already been selected as input
8851                    --for insertion
8852                    l_distinct_new_ra_tbl(l_distinct_new_ra_index):=0;
8853                    IF l_task_id_tbl(i) <> 0 THEN
8854                            --Copy input params for add i.e derive the element version id,rlm id
8855                            -- selecting element_version_id
8856                            BEGIN
8857                                  SELECT  pev.element_version_id
8858                                  INTO    l_new_elem_ver_id
8859                                  FROM    pa_proj_element_versions pev
8860                                  WHERE   pev.proj_element_id = l_task_id_tbl(i)
8861                                  AND     pev.parent_structure_version_id = p_version_info_rec.x_project_structure_version_id;
8862                                  --log1('----- STAGE PBL5-------');
8863                            EXCEPTION
8864                                  WHEN NO_DATA_FOUND THEN
8865                                        --log1('----- STAGE PBL6-------');
8866                                        IF l_debug_mode = 'Y' THEN
8867                                             pa_debug.g_err_stage := 'No Elem Version Id found for the task id passed';
8868                                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8869                                        END IF;
8870                                        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8871                            END;
8872                    ELSE
8873                         -- for project level plannings
8874                         l_new_elem_ver_id := 0;
8875                    END IF;
8876                    --log1('----- STAGE PBL7-------');
8877                    -- populating the other required inputs for add_plan_txn
8878                    l_new_elem_ver_id_tbl.EXTEND(1);
8879                    l_new_elem_ver_id_tbl(l_new_elem_ver_id_tbl.COUNT) := l_new_elem_ver_id;
8880                    l_new_rlm_id_tbl.EXTEND(1);
8881                    l_new_rlm_id_tbl(l_new_rlm_id_tbl.COUNT) := l_rlm_id_tbl(i);
8882 				   l_new_cbs_elemet_id_tbl.EXTEND(1);
8883 				   l_new_cbs_elemet_id_tbl(l_new_cbs_elemet_id_tbl.COUNT):= l_cbs_element_id_tbl(i);-- cbs enhancement changes bug#16445106
8884 				   --DEBUG_NS ('l_cbs_element_id_tbl' ||i ||' :: '|| l_cbs_element_id_tbl(i));
8885                    l_new_planning_start_date_tbl.EXTEND(1);
8886                    l_new_planning_start_date_tbl(l_new_planning_start_date_tbl.COUNT) := l_planning_start_date_tbl(i);
8887                    l_new_planning_end_date_tbl.EXTEND(1);
8888                    l_new_planning_end_date_tbl(l_new_planning_end_date_tbl.COUNT) := l_planning_end_date_tbl(i);
8889 
8890                    --log1('----- STAGE PBL9-------');
8891              END IF; /* if RA is null at index */
8892              --log1('----- STAGE PBL11-------');
8893         END LOOP;
8894         --log1('PBL 4 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8895         --log1('PBL 4.1 '||l_new_elem_ver_id_tbl.COUNT );
8896         --log1('----- STAGE PBL11.7------- || '||l_new_elem_ver_id_tbl.COUNT);
8897 
8898         IF l_new_elem_ver_id_tbl.COUNT > 0 THEN
8899               -- there are new task-resource records to be inserted
8900               IF l_debug_mode = 'Y' THEN
8901                     pa_debug.g_err_stage := 'Inputs prepared for add_plan_txn and calling';
8902                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8903               END IF;
8904               -- Calling add_planning_transaction for those records for which RA doesnot exists
8905 
8906               --Note down the current value of pa_resource_assignments_s.nextval
8907               BEGIN
8908                     --log1('----- STAGE PBL15-------');
8909                     SELECT  pa_resource_assignments_s.nextval
8910                     INTO    l_curr_ra_id_seq
8911                     FROM    DUAL
8912                     WHERE   1 = 1;
8913                     --log1('----- STAGE PBL16-------');
8914               EXCEPTION
8915                     WHEN OTHERS THEN
8916                           IF l_debug_mode = 'Y' THEN
8917                                pa_debug.g_err_stage := 'Error while getting RA Id sequence';
8918                                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8919                           END IF;
8920                           RAISE;
8921               END;
8922               --log1('----- STAGE PBL17-------');
8923               --log1('----- STAGE PBL17.1------- '||l_new_elem_ver_id_tbl.count);
8924               --log1('----- STAGE PBL17.2------- '||l_new_rlm_id_tbl.count);
8925               --log1('----- STAGE PBL17.3------- '||p_version_info_rec.x_plan_class_code);
8926               -- calling  add_planning_transaction
8927 			  --DEBUG_NS ('Before add_planning_transactions call ');
8928 			  --DEBUG_NS ('l_new_cbs_elemet_id_tbl.count:: '|| l_new_cbs_elemet_id_tbl.count);
8929               PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions
8930                       (p_context                      => p_version_info_rec.x_plan_class_code
8931                       ,p_one_to_one_mapping_flag      => 'Y'
8932                       ,p_calling_module               => 'WEBADI'
8933                       ,p_project_id                   => p_version_info_rec.x_project_id
8934                       ,p_budget_version_id            => p_budget_version_id
8935                       ,p_task_elem_version_id_tbl     => l_new_elem_ver_id_tbl
8936                       ,p_resource_list_member_id_tbl  => l_new_rlm_id_tbl
8937 					  ,p_cbs_element_id_tbl           => l_new_cbs_elemet_id_tbl-- cbs enhancement changes bug#16445106
8938                       --,p_planning_start_date_tbl      => l_new_planning_start_date_tbl -- commented for Bug#14643744
8939                       --,p_planning_end_date_tbl        => l_new_planning_end_date_tbl
8940                       ,x_return_status                => x_return_status
8941                       ,x_msg_data                     => l_msg_data
8942                       ,x_msg_count                    => l_msg_count);
8943 
8944               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8945                        IF l_debug_mode = 'Y' THEN
8946                              pa_debug.g_err_stage:='Called API pa_fp_planning_transaction_pub.add_planning_transaction api returned error';
8947                              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8948                        END IF;
8949                        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8950               END IF;
8951               IF l_debug_mode = 'Y' THEN
8952                     pa_debug.g_err_stage := 'Add_planning_transaction called';
8953                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8954               END IF;
8955         END IF; -- new RAs
8956         --log1('PBL 5 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8957 
8958         --log1('----- STAGE PBL11.8------- || '||l_ra_id_tbl.COUNT);
8959 
8960         FOR i IN 1 .. l_ra_id_tbl.COUNT LOOP
8961             IF l_ra_id_tbl(i) IS NULL THEN
8962                   -- collect all the new RA ids for that task-resource
8963                   BEGIN
8964                         SELECT pra.resource_assignment_id,
8965                                pra.rbs_element_id,
8966                                pra.resource_class_code,
8967                                pra.rate_based_flag
8968                         INTO   l_new_ra_id,
8969                                l_new_res_asg_rbs_elem_id,
8970                                l_new_res_asg_res_class_code,
8971                                l_new_res_asg_rate_based_flag
8972                         FROM   pa_resource_assignments pra
8973                         WHERE  pra.budget_version_id = p_budget_version_id
8974                         AND    pra.project_id = p_version_info_rec.x_project_id
8975                         AND    pra.task_id = l_task_id_tbl(i)
8976                         AND    pra.resource_list_member_id = l_rlm_id_tbl(i)
8977                         AND    pra.project_assignment_id = -1;
8978 
8979                         -- stamping the value of new RA id over null in p_ra_id_tbl
8980                         l_ra_id_tbl(i) := l_new_ra_id;
8981 
8982                   EXCEPTION
8983                         WHEN NO_DATA_FOUND THEN
8984                               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8985                   END;
8986             END IF;
8987         END LOOP;
8988         --log1('PBL 6 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8989         --log1('PBL 7 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8990 
8991         -- Deleting records from pa_budget_lines, for the records with delete_flag as Y
8992         -- and if it is non periodic layout
8993         -- Bug 4424457.  Moved the delete statement before calculate. This is done for the following reason
8994         ----Consider a case where RA has currencies C1 and C2 and delete flag is marked for C1. If calculate API
8995         ----changes C2 to C1 and if delete is executed for RA and C1 after call to calculate API then amounts
8996         ----entered against C2 by customer will not be honoured and this is not intended.
8997         IF p_context = 'WEBADI_NON_PERIODIC' THEN
8998             -- checking if there is any reord with delete_flag = Y
8999             IF l_df_ra_id_tbl.COUNT > 0 THEN
9000                      IF l_debug_mode = 'Y' THEN
9001                           pa_debug.g_err_stage := 'Deleting from pa_budget_lines for the records with delete_flag = Y';
9002                           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9003                      END IF;
9004                       --log1('PBL 11 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9005 
9006                      /* Bug 5144013 : Modified the logic so that the attributes of the transaction
9007                      for which delete flag is set as 'Y' in Excel will be populated in pa_fp_rollup_tmp as
9008                      deletion of those planning transactions are taken care by delete_planning_transaction api.
9009                      This is done as part of merging the MRUP3 changes done in 11i into R12.
9010                      */
9011                      /* commenting for bug 10160317 ..
9012                      FOR i IN 1..l_df_ra_id_tbl.COUNT LOOP
9013                           l_bl_del_flag_ra_id_tbl.extend();
9014                           l_bl_del_flag_st_dt_tbl.extend();
9015                           l_bl_del_flag_en_dt_tbl.extend();
9016                           l_bl_del_flag_txn_curr_tbl.extend();
9017                           l_bl_del_flag_txn_rc_tbl.extend();
9018                           l_bl_del_flag_txn_bc_tbl.extend();
9019                           l_bl_del_flag_txn_rev_tbl.extend();
9020                           l_bl_del_flag_pf_curr_tbl.extend();
9021                           l_bl_del_flag_pf_cr_typ_tbl.extend();
9022                           l_bl_del_flag_pf_cr_dt_typ_tbl.extend();
9023                           l_bl_del_flag_pf_cexc_rate_tbl.extend();
9024                           l_bl_del_flag_pf_cr_date_tbl.extend();
9025                           l_bl_del_flag_pf_rr_typ_tbl.extend();
9026                           l_bl_del_flag_pf_rr_dt_typ_tbl.extend();
9027                           l_bl_del_flag_pf_rexc_rate_tbl.extend();
9028                           l_bl_del_flag_pf_rr_date_tbl.extend();
9029                           l_bl_del_flag_pj_curr_tbl.extend();
9030                           l_bl_del_flag_pj_cr_typ_tbl.extend();
9031                           l_bl_del_flag_pj_cr_dt_typ_tbl.extend();
9032                           l_bl_del_flag_pj_cexc_rate_tbl.extend();
9033                           l_bl_del_flag_pj_cr_date_tbl.extend();
9034                           l_bl_del_flag_pj_rr_typ_tbl.extend();
9035                           l_bl_del_flag_pj_rr_dt_typ_tbl.extend();
9036                           l_bl_del_flag_pj_rexc_rate_tbl.extend();
9037                           l_bl_del_flag_pj_rr_date_tbl.extend();
9038                           l_bl_del_flag_bl_id_tbl.extend();
9039                           l_bl_del_flag_per_name_tbl.extend();
9040                           l_bl_del_flag_pj_raw_cost_tbl.extend();
9041                           l_bl_del_flag_pj_burd_cost_tbl.extend();
9042                           l_bl_del_flag_pj_rev_tbl.extend();
9043                           l_bl_del_flag_raw_cost_tbl.extend();
9044                           l_bl_del_flag_burd_cost_tbl.extend();
9045                           l_bl_del_flag_rev_tbl.extend();
9046                           l_bl_del_flag_qty_tbl.extend();
9047                           l_bl_del_flag_c_rej_code_tbl.extend();
9048                           l_bl_del_flag_b_rej_code_tbl.extend();
9049                           l_bl_del_flag_r_rej_code_tbl.extend();
9050                           l_bl_del_flag_o_rej_code_tbl.extend();
9051                           l_bl_del_fg_pc_cnv_rej_cd_tbl.extend();
9052                           l_bl_del_fg_pf_cnv_rej_cd_tbl.extend();
9053                           SELECT
9054                                  pbl.resource_assignment_id,
9055                                  pbl.start_date,
9056                                  pbl.end_date,
9057                                  pbl.txn_currency_code,
9058                                  pbl.txn_raw_cost,
9059                                  pbl.txn_burdened_cost,
9060                                  pbl.txn_revenue,
9061                                  pbl.projfunc_currency_code,
9062                                  pbl.projfunc_cost_rate_type,
9063                                  pbl.projfunc_cost_rate_date_type,
9064                                  pbl.projfunc_cost_exchange_rate,
9065                                  pbl.projfunc_cost_rate_date,
9066                                  pbl.projfunc_rev_rate_type,
9067                                  pbl.projfunc_rev_rate_date_type,
9068                                  pbl.projfunc_rev_exchange_rate,
9069                                  pbl.projfunc_rev_rate_date,
9070                                  pbl.project_currency_code,
9071                                  pbl.project_cost_rate_type,
9072                                  pbl.project_cost_rate_date_type,
9073                                  pbl.project_cost_exchange_rate,
9074                                  pbl.project_cost_rate_date,
9075                                  pbl.project_rev_rate_type,
9076                                  pbl.project_rev_rate_date_type,
9077                                  pbl.project_rev_exchange_rate,
9078                                  pbl.project_rev_rate_date,
9079                                  pbl.budget_line_id,
9080                                  pbl.period_name,
9081                                  pbl.project_raw_cost,
9082                                  pbl.project_burdened_cost,
9083                                  pbl.project_revenue,
9084                                  pbl.raw_cost,
9085                                  pbl.burdened_cost,
9086                                  pbl.revenue,
9087                                  pbl.quantity,
9088                                  pbl.cost_rejection_code,
9089                                  pbl.burden_rejection_code,
9090                                  pbl.revenue_rejection_code,
9091                                  pbl.other_rejection_code,
9092                                  pbl.pc_cur_conv_rejection_code,
9093                                  pbl.pfc_cur_conv_rejection_code
9094                           INTO
9095                                  l_bl_del_flag_ra_id_tbl(i),
9096                                  l_bl_del_flag_st_dt_tbl(i),
9097                                  l_bl_del_flag_en_dt_tbl(i),
9098                                  l_bl_del_flag_txn_curr_tbl(i),
9099                                  l_bl_del_flag_txn_rc_tbl(i),
9100                                  l_bl_del_flag_txn_bc_tbl(i),
9101                                  l_bl_del_flag_txn_rev_tbl(i),
9102                                  l_bl_del_flag_pf_curr_tbl(i),
9103                                  l_bl_del_flag_pf_cr_typ_tbl(i),
9104                                  l_bl_del_flag_pf_cr_dt_typ_tbl(i),
9105                                  l_bl_del_flag_pf_cexc_rate_tbl(i),
9106                                  l_bl_del_flag_pf_cr_date_tbl(i),
9107                                  l_bl_del_flag_pf_rr_typ_tbl(i),
9108                                  l_bl_del_flag_pf_rr_dt_typ_tbl(i),
9109                                  l_bl_del_flag_pf_rexc_rate_tbl(i),
9110                                  l_bl_del_flag_pf_rr_date_tbl(i),
9111                                  l_bl_del_flag_pj_curr_tbl(i),
9112                                  l_bl_del_flag_pj_cr_typ_tbl(i),
9113                                  l_bl_del_flag_pj_cr_dt_typ_tbl(i),
9114                                  l_bl_del_flag_pj_cexc_rate_tbl(i),
9115                                  l_bl_del_flag_pj_cr_date_tbl(i),
9116                                  l_bl_del_flag_pj_rr_typ_tbl(i),
9117                                  l_bl_del_flag_pj_rr_dt_typ_tbl(i),
9118                                  l_bl_del_flag_pj_rexc_rate_tbl(i),
9119                                  l_bl_del_flag_pj_rr_date_tbl(i),
9120                                  l_bl_del_flag_bl_id_tbl(i),
9121                                  l_bl_del_flag_per_name_tbl(i),
9122                                  l_bl_del_flag_pj_raw_cost_tbl(i),
9123                                  l_bl_del_flag_pj_burd_cost_tbl(i),
9124                                  l_bl_del_flag_pj_rev_tbl(i),
9125                                  l_bl_del_flag_raw_cost_tbl(i),
9126                                  l_bl_del_flag_burd_cost_tbl(i),
9127                                  l_bl_del_flag_rev_tbl(i),
9128                                  l_bl_del_flag_qty_tbl(i),
9129                                  l_bl_del_flag_c_rej_code_tbl(i),
9130                                  l_bl_del_flag_b_rej_code_tbl(i),
9131                                  l_bl_del_flag_r_rej_code_tbl(i),
9132                                  l_bl_del_flag_o_rej_code_tbl(i),
9133                                  l_bl_del_fg_pc_cnv_rej_cd_tbl(i),
9134                                  l_bl_del_fg_pf_cnv_rej_cd_tbl(i)
9135                           FROM   pa_budget_lines pbl
9136                           WHERE  pbl.resource_assignment_id = l_df_ra_id_tbl(i)
9137                           AND    pbl.txn_currency_code = l_df_txn_currency_code_tbl(i);
9138                      END LOOP;
9139                      */
9140                      /*Bug 5144013: Calling delete_planning_transactions api to delete the planning transaction
9141                       from pa_budget_lines and from new entity when delete flag is set as 'Y' in Excel for a
9142                       planning transaction. This is done as part of merging the MRUP3 changes done in 11i into R12.
9143                       */
9144                      IF l_debug_mode = 'Y' THEN
9145                           pa_debug.g_err_stage := 'Before Calling pa_fp_planning_transaction_pub.delete_planning_transactions';
9146                           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9147                      END IF;
9148                          pa_fp_planning_transaction_pub.delete_planning_transactions(
9149                                                         p_context                  => 'BUDGET'
9150                                                        ,p_task_or_res              => 'ASSIGNMENT'
9151                                                        ,p_resource_assignment_tbl  => l_df_ra_id_tbl
9152                                                        ,p_currency_code_tbl        => l_df_txn_currency_code_tbl
9153                                                        ,x_return_status            => x_return_status
9154                                                        ,x_msg_count                => l_msg_count
9155                                                        ,x_msg_data                 => l_msg_data);
9156                      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9157                          IF l_debug_mode = 'Y' THEN
9158                              pa_debug.g_err_stage:='Called API pa_fp_planning_transactions_pub.delete_planning_transactions returned error';
9159                              pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
9160                          END IF;
9161                          RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9162                      END IF;
9163                      IF l_debug_mode = 'Y' THEN
9164                           pa_debug.g_err_stage := 'After Calling pa_fp_planning_transaction_pub.delete_planning_transactions';
9165                           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9166                      END IF;
9167 
9168                      IF l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
9169                         IF l_debug_mode = 'Y' THEN
9170                             pa_debug.g_err_stage := l_bl_del_flag_ra_id_tbl.COUNT || ' records deleted from pa_budget_lines';
9171                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9172                             pa_debug.g_err_stage := 'Inserting these records into pa_fp_rollup_tmp';
9173                             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9174                         END IF;
9175 
9176                         --log1('Preparing ra attr tbls for rollup tmp ins');
9177 
9178                      END IF;
9179 
9180             END IF;--IF l_df_ra_id_tbl.COUNT > 0 THEN
9181 
9182         END IF;--IF p_context = 'WEBADI_NON_PERIODIC' THEN
9183 
9184 
9185         -- calling calculate api for budget line context for all the elligible records
9186         IF l_ra_id_tbl.COUNT > 0 THEN
9187               IF l_debug_mode = 'Y' THEN
9188                   pa_debug.g_err_stage := 'Calling calculate to spread amount';
9189                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9190               END IF;
9191               IF p_context = 'WEBADI_PERIODIC' THEN
9192                     l_calc_calling_context := PA_FP_CONSTANTS_PKG.G_CALC_API_BUDGET_LINE;
9193               ELSIF p_context = 'WEBADI_NON_PERIODIC' THEN
9194                          l_line_start_date_tbl := SYSTEM.pa_date_tbl_type();
9195                          l_line_end_date_tbl   := SYSTEM.pa_date_tbl_type();
9196                          l_calc_calling_context := PA_FP_CONSTANTS_PKG.G_CALC_API_RESOURCE_CONTEXT;
9197               END IF;
9198 
9199               IF l_debug_mode = 'Y' THEN
9200                   pa_debug.g_err_stage := 'Calling context' || l_calc_calling_context;
9201                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9202               END IF;
9203 
9204               --log1('PBL 8 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9205               --log1('Before callling calc in pbl');
9206              /* log1('l_calc_calling_context '||l_calc_calling_context);
9207               FOR zz IN 1..l_ra_id_tbl.COUNT LOOP
9208 
9209                   log1('l_ra_id_tbl('||zz||') is '||l_ra_id_tbl(zz));
9210                   log1('l_txn_currency_code_tbl('||zz||') is '||l_txn_currency_code_tbl(zz));
9211                   IF l_total_qty_tbl.COUNT >0 THEN
9212                       log1('l_total_qty_tbl('||zz||') is '||l_total_qty_tbl(zz));
9213                   END IF;
9214                   IF l_total_raw_cost_tbl.COUNT >0 THEN
9215                       log1('l_total_raw_cost_tbl('||zz||') is '||l_total_raw_cost_tbl(zz));
9216                   END IF;
9217                   IF l_total_burdened_cost_tbl.COUNT > 0 THEN
9218                       log1('l_total_burdened_cost_tbl('||zz||') is '||l_total_burdened_cost_tbl(zz));
9219                   END IF;
9220                   IF l_total_revenue_tbl.COUNT>0 THEN
9221                       log1('l_total_revenue_tbl('||zz||') is '||l_total_revenue_tbl(zz));
9222                   END IF;
9223                   IF l_raw_cost_rate_tbl.COUNT>0 THEN
9224                       log1('l_raw_cost_rate_tbl('||zz||') is '||l_raw_cost_rate_tbl(zz));
9225                   END IF;
9226                   IF l_burdened_cost_rate_tbl.COUNT>0 THEN
9227                       log1('l_burdened_cost_rate_tbl('||zz||') is '||l_burdened_cost_rate_tbl(zz));
9228                   END IF;
9229                   IF l_bill_rate_tbl.COUNT>0 THEN
9230                       log1('l_bill_rate_tbl('||zz||') is '||l_bill_rate_tbl(zz));
9231                   END IF;
9232                   IF l_line_start_date_tbl.COUNT>0 THEN
9233                       log1('l_line_start_date_tbl('||zz||') is '||l_line_start_date_tbl(zz));
9234                   END IF;
9235                   IF l_line_end_date_tbl.COUNT>0 THEN
9236                       log1('l_line_end_date_tbl('||zz||') is '||l_line_end_date_tbl(zz));
9237                   END IF;
9238 
9239               END LOOP;*/
9240               --log1('PBL 9 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9241               PA_FP_CALC_PLAN_PKG.calculate(
9242                   p_project_id                 =>   p_version_info_rec.x_project_id
9243                  ,p_budget_version_id          =>   p_budget_version_id
9244                  ,p_rollup_required_flag       =>   'N'
9245                  ,p_source_context             =>   l_calc_calling_context
9246                  ,p_conv_rates_required_flag   =>   'N'
9247                  ,p_resource_assignment_tab    =>   l_ra_id_tbl
9248                  ,p_txn_currency_code_tab      =>   l_txn_currency_code_tbl
9249                  ,p_total_qty_tab              =>   l_total_qty_tbl
9250                  ,p_total_raw_cost_tab         =>   l_total_raw_cost_tbl
9251                  ,p_total_burdened_cost_tab    =>   l_total_burdened_cost_tbl
9252                  ,p_total_revenue_tab          =>   l_total_revenue_tbl
9253                  ,p_rw_cost_rate_override_tab  =>   l_raw_cost_rate_tbl
9254                  ,p_b_cost_rate_override_tab   =>   l_burdened_cost_rate_tbl
9255                  ,p_bill_rate_override_tab     =>   l_bill_rate_tbl
9256                  ,p_line_start_date_tab        =>   l_line_start_date_tbl
9257                  ,p_line_end_date_tab          =>   l_line_end_date_tbl
9258                  ,p_raTxn_rollup_api_call_flag =>   'N'
9259                  ,x_return_status              =>   x_return_status
9260                  ,x_msg_count                  =>   l_msg_count
9261                  ,x_msg_data                   =>   l_msg_data);
9262               --log1('PBL 10 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9263                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9264 
9265                      IF l_debug_mode = 'Y' THEN
9266                          pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate returned error';
9267                          pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
9268                      END IF;
9269                      RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9270                  END IF;
9271 
9272                  --Bug 4424457. Find out if there are budget lines that are processed by calculate API
9273                  BEGIN
9274                     SELECT 'Y'
9275                     INTO   l_bls_proccessed_flag
9276                     FROM    DUAL
9277                     WHERE   EXISTS (SELECT 1
9278                                     FROM   pa_fp_rollup_tmp);
9279                  EXCEPTION
9280                  WHEN NO_DATA_FOUND THEN
9281                     l_bls_proccessed_flag:='N';
9282                  END;
9283 
9284         END IF;  -- if there are data in input tables prepared
9285 
9286         -- Deleting records from pa_budget_lines, for the records with delete_flag as Y
9287         -- and if it is non periodic layout
9288         IF p_context = 'WEBADI_NON_PERIODIC' THEN
9289             -- checking if there is any reord with delete_flag = Y
9290             IF l_df_ra_id_tbl.COUNT > 0 THEN
9291                           --log1('PBL 12 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9292                           IF l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
9293                                IF l_debug_mode = 'Y' THEN
9294                                    pa_debug.g_err_stage := l_bl_del_flag_ra_id_tbl.COUNT || ' records deleted from pa_budget_lines';
9295                                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9296                                    pa_debug.g_err_stage := 'Inserting these records into pa_fp_rollup_tmp';
9297                                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9298                                END IF;
9299 
9300                                --log1('Preparing ra attr tbls for rollup tmp ins');
9301 
9302                                /* Bug 10160317
9303                                -- inserting these deleted records into pa_fp_rollup_tmp with delete flag as Y
9304                                FORALL i IN l_bl_del_flag_ra_id_tbl.FIRST .. l_bl_del_flag_ra_id_tbl.LAST
9305                                        INSERT INTO
9306                                        pa_fp_rollup_tmp
9307                                            (resource_assignment_id,
9308                                             start_date,
9309                                             end_date,
9310                                             txn_currency_code,
9311                                             txn_raw_cost,
9312                                             txn_burdened_cost,
9313                                             txn_revenue,
9314                                             projfunc_currency_code,
9315                                             projfunc_cost_rate_type,
9316                                             projfunc_cost_rate_date_type,
9317                                             projfunc_cost_exchange_rate,
9318                                             projfunc_cost_rate_date,
9319                                             projfunc_rev_rate_type,
9320                                             projfunc_rev_rate_date_type,
9321                                             projfunc_rev_exchange_rate,
9322                                             projfunc_rev_rate_date,
9323                                             project_currency_code,
9324                                             project_cost_rate_type,
9325                                             project_cost_rate_date_type,
9326                                             project_cost_exchange_rate,
9327                                             project_cost_rate_date,
9328                                             project_rev_rate_type,
9329                                             project_rev_rate_date_type,
9330                                             project_rev_exchange_rate,
9331                                             project_rev_rate_date,
9332                                             budget_line_id,
9333                                             delete_flag,
9334                                             period_name,
9335                                             project_raw_cost,
9336                                             project_burdened_cost,
9337                                             project_revenue,
9338                                             projfunc_raw_cost,
9339                                             projfunc_burdened_cost,
9340                                             projfunc_revenue,
9341                                             quantity,
9342                                             cost_rejection_code,
9343                                             burden_rejection_code,
9344                                             revenue_rejection_code,
9345                                             pc_cur_conv_rejection_code,
9346                                             pfc_cur_conv_rejection_code,
9347                                             system_reference4) -- for other_rejection_code
9348                                        VALUES
9349                                            (l_bl_del_flag_ra_id_tbl(i),
9350                                             l_bl_del_flag_st_dt_tbl(i),
9351                                             l_bl_del_flag_en_dt_tbl(i),
9352                                             l_bl_del_flag_txn_curr_tbl(i),
9353                                             l_bl_del_flag_txn_rc_tbl(i),
9354                                             l_bl_del_flag_txn_bc_tbl(i),
9355                                             l_bl_del_flag_txn_rev_tbl(i),
9356                                             l_bl_del_flag_pf_curr_tbl(i),
9357                                             l_bl_del_flag_pf_cr_typ_tbl(i),
9358                                             l_bl_del_flag_pf_cr_dt_typ_tbl(i),
9359                                             l_bl_del_flag_pf_cexc_rate_tbl(i),
9360                                             l_bl_del_flag_pf_cr_date_tbl(i),
9361                                             l_bl_del_flag_pf_rr_typ_tbl(i),
9362                                             l_bl_del_flag_pf_rr_dt_typ_tbl(i),
9363                                             l_bl_del_flag_pf_rexc_rate_tbl(i),
9364                                             l_bl_del_flag_pf_rr_date_tbl(i),
9365                                             l_bl_del_flag_pj_curr_tbl(i),
9366                                             l_bl_del_flag_pj_cr_typ_tbl(i),
9367                                             l_bl_del_flag_pj_cr_dt_typ_tbl(i),
9368                                             l_bl_del_flag_pj_cexc_rate_tbl(i),
9369                                             l_bl_del_flag_pj_cr_date_tbl(i),
9370                                             l_bl_del_flag_pj_rr_typ_tbl(i),
9371                                             l_bl_del_flag_pj_rr_dt_typ_tbl(i),
9372                                             l_bl_del_flag_pj_rexc_rate_tbl(i),
9373                                             l_bl_del_flag_pj_rr_date_tbl(i),
9374                                             l_bl_del_flag_bl_id_tbl(i),
9375                                             'Y',  -- delete_flag
9376                                             l_bl_del_flag_per_name_tbl(i),
9377                                             l_bl_del_flag_pj_raw_cost_tbl(i),
9378                                             l_bl_del_flag_pj_burd_cost_tbl(i),
9379                                             l_bl_del_flag_pj_rev_tbl(i),
9380                                             l_bl_del_flag_raw_cost_tbl(i),
9381                                             l_bl_del_flag_burd_cost_tbl(i),
9382                                             l_bl_del_flag_rev_tbl(i),
9383                                             l_bl_del_flag_qty_tbl(i),
9384                                             l_bl_del_flag_c_rej_code_tbl(i),
9385                                             l_bl_del_flag_b_rej_code_tbl(i),
9386                                             l_bl_del_flag_r_rej_code_tbl(i),
9387                                             l_bl_del_fg_pc_cnv_rej_cd_tbl(i),
9388                                             l_bl_del_fg_pf_cnv_rej_cd_tbl(i),
9389                                             l_bl_del_flag_o_rej_code_tbl(i));
9390                                --log1('PBL 14 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9391                                IF l_debug_mode = 'Y' THEN
9392                                    pa_debug.g_err_stage := 'records inserted into pa_fp_rollup_tmp';
9393                                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9394                                END IF;
9395                                */
9396                           ELSE
9397                                -- no records deleted from pa_budget_lines
9398                                IF l_debug_mode = 'Y' THEN
9399                                    pa_debug.g_err_stage := 'No records deleted from pa_budget_lines';
9400                                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9401                                END IF;
9402                           END IF;
9403             END IF;  -- records with delete_flag
9404 
9405             -- releasing the memory occupied by deleting the temporary pl/sql table types
9406             l_df_task_id_tbl.DELETE;
9407             l_df_rlm_id_tbl.DELETE;
9408 			l_df_cbs_element_id_tbl.DELETE;-- cbs enhancement changes bug#16445106
9409             l_df_spread_curve_id_tbl.DELETE;
9410             l_df_mfc_cost_type_id_tbl.DELETE;
9411             l_df_etc_method_code.DELETE;
9412             l_df_sp_fixed_date_tbl.DELETE;
9413             l_df_txn_currency_code_tbl.DELETE;
9414             l_df_planning_start_date_tbl.DELETE;
9415             l_df_planning_end_date_tbl.DELETE;
9416             l_df_total_qty_tbl.DELETE;
9417             l_df_total_raw_cost_tbl.DELETE;
9418             l_df_total_burdened_cost_tbl.DELETE;
9419             l_df_total_revenue_tbl.DELETE;
9420             l_df_raw_cost_rate_tbl.DELETE;
9421             l_df_burdened_cost_rate_tbl.DELETE;
9422             l_df_bill_rate_tbl.DELETE;
9423             l_df_line_start_date_tbl.DELETE;
9424             l_df_line_end_date_tbl.DELETE;
9425             l_df_pj_cost_rate_typ_tbl.DELETE;
9426             l_df_pj_cost_rate_date_typ_tbl.DELETE;
9427             l_df_pj_cost_rate_tbl.DELETE;
9428             l_df_pj_cost_rate_date_tbl.DELETE;
9429             l_df_pj_rev_rate_typ_tbl.DELETE;
9430             l_df_pj_rev_rate_date_typ_tbl.DELETE;
9431             l_df_pj_rev_rate_tbl.DELETE;
9432             l_df_pj_rev_rate_date_tbl.DELETE;
9433             l_df_pf_cost_rate_typ_tbl.DELETE;
9434             l_df_pf_cost_rate_date_typ_tbl.DELETE;
9435             l_df_pf_cost_rate_tbl.DELETE;
9436             l_df_pf_cost_rate_date_tbl.DELETE;
9437             l_df_pf_rev_rate_typ_tbl.DELETE;
9438             l_df_pf_rev_rate_date_typ_tbl.DELETE;
9439             l_df_pf_rev_rate_tbl.DELETE;
9440             l_df_pf_rev_rate_date_tbl.DELETE;
9441             l_df_change_reason_code_tbl.DELETE;
9442             l_df_description_tbl.DELETE;
9443 
9444             l_bl_del_flag_st_dt_tbl.DELETE;
9445             l_bl_del_flag_en_dt_tbl.DELETE;
9446             l_bl_del_flag_txn_curr_tbl.DELETE;
9447             l_bl_del_flag_txn_rc_tbl.DELETE;
9448             l_bl_del_flag_txn_bc_tbl.DELETE;
9449             l_bl_del_flag_txn_rev_tbl.DELETE;
9450             l_bl_del_flag_pf_curr_tbl.DELETE;
9451             l_bl_del_flag_pf_cr_typ_tbl.DELETE;
9452             l_bl_del_flag_pf_cr_dt_typ_tbl.DELETE;
9453             l_bl_del_flag_pf_cexc_rate_tbl.DELETE;
9454             l_bl_del_flag_pf_cr_date_tbl.DELETE;
9455             l_bl_del_flag_pf_rr_typ_tbl.DELETE;
9456             l_bl_del_flag_pf_rr_dt_typ_tbl.DELETE;
9457             l_bl_del_flag_pf_rexc_rate_tbl.DELETE;
9458             l_bl_del_flag_pf_rr_date_tbl.DELETE;
9459             l_bl_del_flag_pj_curr_tbl.DELETE;
9460             l_bl_del_flag_pj_cr_typ_tbl.DELETE;
9461             l_bl_del_flag_pj_cr_dt_typ_tbl.DELETE;
9462             l_bl_del_flag_pj_cexc_rate_tbl.DELETE;
9463             l_bl_del_flag_pj_cr_date_tbl.DELETE;
9464             l_bl_del_flag_pj_rr_typ_tbl.DELETE;
9465             l_bl_del_flag_pj_rr_dt_typ_tbl.DELETE;
9466             l_bl_del_flag_pj_rexc_rate_tbl.DELETE;
9467             l_bl_del_flag_pj_rr_date_tbl.DELETE;
9468             l_bl_del_flag_bl_id_tbl.DELETE;
9469             l_bl_del_flag_per_name_tbl.DELETE;
9470             l_bl_del_flag_pj_raw_cost_tbl.DELETE;
9471             l_bl_del_flag_pj_burd_cost_tbl.DELETE;
9472             l_bl_del_flag_pj_rev_tbl.DELETE;
9473             l_bl_del_flag_raw_cost_tbl.DELETE;
9474             l_bl_del_flag_burd_cost_tbl.DELETE;
9475             l_bl_del_flag_rev_tbl.DELETE;
9476             l_bl_del_flag_qty_tbl.DELETE;
9477             l_bl_del_flag_c_rej_code_tbl.DELETE;
9478             l_bl_del_flag_b_rej_code_tbl.DELETE;
9479             l_bl_del_flag_r_rej_code_tbl.DELETE;
9480             l_bl_del_flag_o_rej_code_tbl.DELETE;
9481             l_bl_del_fg_pc_cnv_rej_cd_tbl.DELETE;
9482             l_bl_del_fg_pf_cnv_rej_cd_tbl.DELETE;
9483 
9484         END IF;  -- p_context = WEBADI_NON_PERIODIC
9485 
9486         IF l_debug_mode = 'Y' THEN
9487             pa_debug.g_err_stage:='Updating pa_budget_lines with change reason code, desc and conv attr';
9488             pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
9489         END IF;
9490 
9491         -- updating conversion attributes if the version is enabled for multi currency
9492         -- Bug  4424457 : In all the below updates replaced pa_budget_lines with pa_fp_rollup_tmp. These
9493         -- attributes will be finally stamped back in pa_budget_lines after MC conversion
9494         IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' AND
9495            p_context = 'WEBADI_PERIODIC' THEN
9496             IF l_ra_id_tbl.COUNT > 0 AND
9497                l_bls_proccessed_flag ='Y' THEN
9498                  --log1('----- STAGE CRC1-------');
9499                  --log1('PBL 15 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9500                  FORALL i IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST
9501                        UPDATE  pa_fp_rollup_tmp   pbl
9502                        SET     pbl.projfunc_cost_rate_type = DECODE (l_pfunc_cost_rate_type_tbl(i), NULL, pbl.projfunc_cost_rate_type,
9503                                                                      DECODE(l_pfunc_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_type_tbl(i))),
9504                                pbl.projfunc_cost_rate_date_type = DECODE (l_pfunc_cost_rate_date_typ_tbl(i), NULL, pbl.projfunc_cost_rate_date_type,
9505                                                                           DECODE(l_pfunc_cost_rate_date_typ_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_date_typ_tbl(i))),
9506                                pbl.projfunc_cost_exchange_rate = DECODE (l_pfunc_cost_rate_tbl(i), NULL, pbl.projfunc_cost_exchange_rate,
9507                                                                          DECODE(l_pfunc_cost_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_cost_rate_tbl(i))),
9508                                pbl.projfunc_cost_rate_date = DECODE (l_pfunc_cost_rate_date_tbl(i), NULL, pbl.projfunc_cost_rate_date,
9509                                                                      DECODE(l_pfunc_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_cost_rate_date_tbl(i))),
9510                                pbl.projfunc_rev_rate_type = DECODE (l_pfunc_rev_rate_type_tbl(i), NULL, pbl.projfunc_rev_rate_type,
9511                                                                     DECODE(l_pfunc_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_type_tbl(i))),
9512                                pbl.projfunc_rev_rate_date_type = DECODE (l_pfunc_rev_rate_date_type_tbl(i), NULL, pbl.projfunc_rev_rate_date_type,
9513                                                                          DECODE(l_pfunc_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_date_type_tbl(i))),
9514                                pbl.projfunc_rev_exchange_rate = DECODE (l_pfunc_rev_rate_tbl(i), NULL, pbl.projfunc_rev_exchange_rate,
9515                                                                         DECODE(l_pfunc_rev_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_rev_rate_tbl(i))),
9516                                pbl.projfunc_rev_rate_date = DECODE (l_pfunc_rev_rate_date_tbl(i), NULL, pbl.projfunc_rev_rate_date,
9517                                                                     DECODE(l_pfunc_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_rev_rate_date_tbl(i))),
9518                                pbl.project_cost_rate_type = DECODE (l_proj_cost_rate_type_tbl(i), NULL, pbl.project_cost_rate_type,
9519                                                                     DECODE(l_proj_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_type_tbl(i))),
9520                                pbl.project_cost_rate_date_type = DECODE (l_proj_cost_rate_date_type_tbl(i), NULL, pbl.project_cost_rate_date_type,
9521                                                                          DECODE(l_proj_cost_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_date_type_tbl(i))),
9522                                pbl.project_cost_exchange_rate = DECODE (l_proj_cost_rate_tbl(i), NULL, pbl.project_cost_exchange_rate,
9523                                                                         DECODE(l_proj_cost_rate_tbl(i), l_g_miss_num, NULL, l_proj_cost_rate_tbl(i))),
9524                                pbl.project_cost_rate_date = DECODE (l_proj_cost_rate_date_tbl(i), NULL, pbl.project_cost_rate_date,
9525                                                                     DECODE(l_proj_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_cost_rate_date_tbl(i))),
9526                                pbl.project_rev_rate_type = DECODE (l_proj_rev_rate_type_tbl(i), NULL, pbl.project_rev_rate_type,
9527                                                                    DECODE(l_proj_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_type_tbl(i))),
9528                                pbl.project_rev_rate_date_type = DECODE (l_proj_rev_rate_date_type_tbl(i), NULL, pbl.project_rev_rate_date_type,
9529                                                                         DECODE(l_proj_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_date_type_tbl(i))),
9530                                pbl.project_rev_exchange_rate = DECODE (l_proj_rev_rate_tbl(i), NULL, pbl.project_rev_exchange_rate,
9531                                                                        DECODE(l_proj_rev_rate_tbl(i), l_g_miss_num, NULL, l_proj_rev_rate_tbl(i))),
9532                                pbl.project_rev_rate_date = DECODE (l_proj_rev_rate_date_tbl(i), NULL, pbl.project_rev_rate_date,
9533                                                                    DECODE(l_proj_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_rev_rate_date_tbl(i)))
9534                        WHERE   pbl.resource_assignment_id = l_ra_id_tbl(i)
9535                        AND     pbl.txn_currency_code = l_txn_currency_code_tbl(i)
9536                        AND     pbl.start_date >= l_line_start_date_tbl(i)
9537                        AND     pbl.end_date <= l_line_end_date_tbl(i);
9538                                --log1('PBL 16 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9539             END IF;  -- there are records in local ra tbl
9540         --END IF;  -- mc flag = Y
9541 
9542         -- updating change reason code and description if the version is non time phased
9543         ELSIF p_version_info_rec.x_plan_in_multi_curr_flag <> 'Y' AND
9544               p_context = 'WEBADI_NON_PERIODIC' THEN
9545             IF l_ra_id_tbl.COUNT > 0 AND
9546                l_bls_proccessed_flag ='Y' THEN
9547                  --log1('----- STAGE CRC2-------');
9548                  --log1('PBL 17 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9549                  FORALL i IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST
9550                        UPDATE  pa_fp_rollup_tmp pbl
9551                        SET     pbl.change_reason_code = l_change_reason_code_tbl(i),
9552                                pbl.description        = l_description_tbl(i)
9553                        WHERE   pbl.resource_assignment_id = l_ra_id_tbl(i)
9554                        AND     pbl.txn_currency_code = l_txn_currency_code_tbl(i);
9555                     --log1('PBL 18 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9556             END IF;  -- there are records in local ra tbl
9557         --END IF;  -- time phase  = N
9558         ELSIF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' AND
9559               p_context = 'WEBADI_NON_PERIODIC' THEN
9560                   --log1('----- STAGE PBL18-------');
9561                   IF l_ra_id_tbl.COUNT > 0 AND
9562                      l_bls_proccessed_flag ='Y' THEN
9563                      --log1('PBL 19 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9564                      FORALL i IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST
9565                            UPDATE  pa_fp_rollup_tmp   pbl
9566                            SET     pbl.change_reason_code = l_change_reason_code_tbl(i),
9567                                    pbl.description        = DECODE(l_description_tbl(i), NULL, pbl.description,
9568                                                                    DECODE(l_description_tbl(i), l_g_miss_char, NULL, l_description_tbl(i))),
9569                                    pbl.projfunc_cost_rate_type = DECODE (l_pfunc_cost_rate_type_tbl(i), NULL, pbl.projfunc_cost_rate_type,
9570                                                                          DECODE(l_pfunc_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_type_tbl(i))),
9571                                    pbl.projfunc_cost_rate_date_type = DECODE (l_pfunc_cost_rate_date_typ_tbl(i), NULL, pbl.projfunc_cost_rate_date_type,
9572                                                                               DECODE(l_pfunc_cost_rate_date_typ_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_date_typ_tbl(i))),
9573                                    pbl.projfunc_cost_exchange_rate = DECODE (l_pfunc_cost_rate_tbl(i), NULL, pbl.projfunc_cost_exchange_rate,
9574                                                                              DECODE(l_pfunc_cost_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_cost_rate_tbl(i))),
9575                                    pbl.projfunc_cost_rate_date = DECODE (l_pfunc_cost_rate_date_tbl(i), NULL, pbl.projfunc_cost_rate_date,
9576                                                                          DECODE(l_pfunc_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_cost_rate_date_tbl(i))),
9577                                    pbl.projfunc_rev_rate_type = DECODE (l_pfunc_rev_rate_type_tbl(i), NULL, pbl.projfunc_rev_rate_type,
9578                                                                         DECODE(l_pfunc_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_type_tbl(i))),
9579                                    pbl.projfunc_rev_rate_date_type = DECODE (l_pfunc_rev_rate_date_type_tbl(i), NULL, pbl.projfunc_rev_rate_date_type,
9580                                                                              DECODE(l_pfunc_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_date_type_tbl(i))),
9581                                    pbl.projfunc_rev_exchange_rate = DECODE (l_pfunc_rev_rate_tbl(i), NULL, pbl.projfunc_rev_exchange_rate,
9582                                                                             DECODE(l_pfunc_rev_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_rev_rate_tbl(i))),
9583                                    pbl.projfunc_rev_rate_date = DECODE (l_pfunc_rev_rate_date_tbl(i), NULL, pbl.projfunc_rev_rate_date,
9584                                                                         DECODE(l_pfunc_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_rev_rate_date_tbl(i))),
9585                                    pbl.project_cost_rate_type = DECODE (l_proj_cost_rate_type_tbl(i), NULL, pbl.project_cost_rate_type,
9586                                                                         DECODE(l_proj_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_type_tbl(i))),
9587                                    pbl.project_cost_rate_date_type = DECODE (l_proj_cost_rate_date_type_tbl(i), NULL, pbl.project_cost_rate_date_type,
9588                                                                              DECODE(l_proj_cost_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_date_type_tbl(i))),
9589                                    pbl.project_cost_exchange_rate = DECODE (l_proj_cost_rate_tbl(i), NULL, pbl.project_cost_exchange_rate,
9590                                                                             DECODE(l_proj_cost_rate_tbl(i), l_g_miss_num, NULL, l_proj_cost_rate_tbl(i))),
9591                                    pbl.project_cost_rate_date = DECODE (l_proj_cost_rate_date_tbl(i), NULL, pbl.project_cost_rate_date,
9592                                                                         DECODE(l_proj_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_cost_rate_date_tbl(i))),
9593                                    pbl.project_rev_rate_type = DECODE (l_proj_rev_rate_type_tbl(i), NULL, pbl.project_rev_rate_type,
9594                                                                        DECODE(l_proj_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_type_tbl(i))),
9595                                    pbl.project_rev_rate_date_type = DECODE (l_proj_rev_rate_date_type_tbl(i), NULL, pbl.project_rev_rate_date_type,
9596                                                                             DECODE(l_proj_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_date_type_tbl(i))),
9597                                    pbl.project_rev_exchange_rate = DECODE (l_proj_rev_rate_tbl(i), NULL, pbl.project_rev_exchange_rate,
9598                                                                            DECODE(l_proj_rev_rate_tbl(i), l_g_miss_num, NULL, l_proj_rev_rate_tbl(i))),
9599                                    pbl.project_rev_rate_date = DECODE (l_proj_rev_rate_date_tbl(i), NULL, pbl.project_rev_rate_date,
9600                                                                        DECODE(l_proj_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_rev_rate_date_tbl(i)))
9601                            WHERE   pbl.resource_assignment_id = l_ra_id_tbl(i)
9602                            AND     pbl.txn_currency_code = l_txn_currency_code_tbl(i);
9603                         --log1('PBL 20 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9604                 END IF;  -- there are records in local ra tbl
9605         END IF; -- end of update
9606 
9607         IF l_debug_mode = 'Y' THEN
9608             pa_debug.g_err_stage:='pa_budget_lines updated with change reason code, desc and conv attr';
9609             pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
9610         END IF;
9611 
9612 
9613         --log1('----- STAGE PBL18.3------- ');
9614         IF l_debug_mode = 'Y' THEN
9615             pa_debug.g_err_stage := 'Calling multi currency pkg';
9616             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9617         END IF;
9618         --log1('PBL 26 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9619         -- Bug  4424457. Call MC API only if there are some budget lines that are processed by calculate API
9620         IF  l_bls_proccessed_flag ='Y' THEN
9621 
9622             PA_FP_MULTI_CURRENCY_PKG.convert_txn_currency
9623                      (p_budget_version_id   => p_budget_version_id
9624                      ,p_entire_version     => 'N'
9625                      ,x_return_status      => x_return_status
9626                      ,x_msg_count          => l_msg_count
9627                      ,x_msg_data           => l_msg_data );
9628         --log1('PBL 27 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9629             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9630                 IF l_debug_mode = 'Y' THEN
9631                     pa_debug.g_err_stage:='convert_txn_currency returned error';
9632                     pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9633                 END IF;
9634                 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
9635             END IF;
9636 
9637         END IF;
9638 
9639        IF l_debug_mode = 'Y' THEN
9640             pa_debug.g_err_stage := 'Preparing data for the call to PJI api';
9641             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9642        END IF;
9643 
9644                IF l_debug_mode = 'Y' THEN
9645                     pa_debug.g_err_stage := 'About to select data for updating the budget lines '||l_bls_proccessed_flag;
9646                     pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9647                END IF;
9648 
9649                 --bug 5962744 moved below bulk select out of if condition
9650                 --Bug 4424457. Rollup tmp can contain multiple records for the same budget line id. This will happen when
9651                 --for a budget line passed as input, the txn currency code is converted to some other currency which
9652                 --already exiss for the same RA. This might get resolved with the MRC API changes. Till then this should
9653                 --be taken care
9654                 --Previously PJI plan_update was called and hence the required input was collected in _pji_ tbls. Now
9655                 --plan_delete  and plan_create are called. But the _pji_ tbls are still retained for update on
9656                 --pa_budget_lines
9657 
9658                     SELECT  rlp.resource_assignment_id,
9659                             max(rlp.period_name),
9660                             rlp.start_date,
9661                             max(rlp.end_date),
9662                             rlp.txn_currency_code,
9663                             max(rlp.budget_line_id),
9664                             sum(rlp.txn_raw_cost),
9665                             sum(rlp.txn_burdened_cost),
9666                             sum(rlp.txn_revenue),
9667                             sum(rlp.project_raw_cost),
9668                             sum(rlp.project_burdened_cost),
9669                             sum(rlp.project_revenue),
9670                             sum(rlp.projfunc_raw_cost),
9671                             sum(rlp.projfunc_burdened_cost),
9672                             sum(rlp.projfunc_revenue),
9673                             sum(rlp.init_quantity),
9674                             sum(rlp.init_raw_cost),
9675                             sum(rlp.init_burdened_cost),
9676                             sum(rlp.init_revenue),
9677                             sum(rlp.project_init_raw_cost),
9678                             sum(rlp.project_init_burdened_cost),
9679                             sum(rlp.project_init_revenue),
9680                             sum(rlp.txn_init_raw_cost),
9681                             sum(rlp.txn_init_burdened_cost),
9682                             sum(rlp.txn_init_revenue),
9683                             max(rlp.cost_rejection_code),
9684                             max(rlp.revenue_rejection_code),
9685                             max(rlp.burden_rejection_code),
9686                             max(rlp.system_reference4),  -- for other_rejection_code
9687                             max(rlp.pc_cur_conv_rejection_code),
9688                             max(rlp.pfc_cur_conv_rejection_code),
9689                             max(rlp.delete_flag),
9690                             sum(rlp.quantity),
9691                             max(rlp.project_cost_rate_type),
9692                             avg(rlp.project_cost_exchange_rate),
9693                             max(rlp.project_cost_rate_date_type),
9694                             max(rlp.project_cost_rate_date),
9695                             max(rlp.project_rev_rate_type),
9696                             avg(rlp.project_rev_exchange_rate),
9697                             max(rlp.project_rev_rate_date_type),
9698                             max(rlp.project_rev_rate_date),
9699                             max(rlp.projfunc_cost_rate_type),
9700                             avg(rlp.projfunc_cost_exchange_rate),
9701                             max(rlp.projfunc_cost_rate_date_type),
9702                             max(rlp.projfunc_cost_rate_date),
9703                             max(rlp.projfunc_rev_rate_type),
9704                             avg(rlp.projfunc_rev_exchange_rate),
9705                             max(rlp.projfunc_rev_rate_date_type),
9706                             max(rlp.projfunc_rev_rate_date),
9707                             count(*),
9708                             max(change_reason_code),
9709                             max(description)
9710                     BULK COLLECT INTO
9711                             l_pji_res_ass_id_tbl,
9712                             l_pji_period_name_tbl,
9713                             l_pji_start_date_tbl,
9714                             l_pji_end_date_tbl,
9715                             l_pji_txn_curr_code_tbl,
9716                             l_upd_budget_line_id_tbl,
9717                             l_pji_txn_raw_cost_tbl,
9718                             l_pji_txn_burd_cost_tbl,
9719                             l_pji_txn_revenue_tbl,
9720                             l_pji_project_raw_cost_tbl,
9721                             l_pji_project_burd_cost_tbl,
9722                             l_pji_project_revenue_tbl,
9723                             l_pji_raw_cost_tbl,
9724                             l_pji_burd_cost_tbl,
9725                             l_pji_revenue_tbl,
9726                             l_upd_init_quantity_tbl,
9727                             l_upd_init_raw_cost_tbl,
9728                             l_upd_init_burdened_cost_tbl,
9729                             l_upd_init_revenue_tbl,
9730                             l_upd_proj_init_raw_cost_tbl,
9731                             l_upd_proj_init_burd_cost_tbl,
9732                             l_upd_proj_init_revenue_tbl,
9733                             l_upd_txn_init_raw_cost_tbl,
9734                             l_upd_txn_init_burd_cost_tbl,
9735                             l_upd_txn_init_revenue_tbl,
9736                             l_pji_cost_rej_code_tbl,
9737                             l_pji_revenue_rej_code_tbl,
9738                             l_pji_burden_rej_code_tbl,
9739                             l_pji_other_rej_code,
9740                             l_pji_pc_cur_conv_rej_code_tbl,
9741                             l_pji_pf_cur_conv_rej_code_tbl,
9742                             l_upd_delete_flag_tbl,
9743                             l_pji_quantity_tbl,
9744                             l_upd_pj_cost_rate_typ_tbl,
9745                             l_upd_pj_cost_exc_rate_tbl,
9746                             l_upd_pj_cost_rate_dt_typ_tbl,
9747                             l_upd_pj_cost_rate_date_tbl,
9748                             l_upd_pj_rev_rate_typ_tbl,
9749                             l_upd_pj_rev_exc_rate_tbl,
9750                             l_upd_pj_rev_rate_dt_typ_tbl,
9751                             l_upd_pj_rev_rate_date_tbl,
9752                             l_upd_pf_cost_rate_typ_tbl,
9753                             l_upd_pf_cost_exc_rate_tbl,
9754                             l_upd_pf_cost_rate_dt_typ_tbl,
9755                             l_upd_pf_cost_rate_date_tbl,
9756                             l_upd_pf_rev_rate_typ_tbl,
9757                             l_upd_pf_rev_exc_rate_tbl,
9758                             l_upd_pf_rev_rate_dt_typ_tbl,
9759                             l_upd_pf_rev_rate_date_tbl,
9760                             l_bl_count_tbl,
9761                             l_chg_reason_code_tbl,
9762                             l_desc_tbl
9763                     FROM    pa_fp_rollup_tmp rlp
9764                     WHERE   delete_flag IS NULL OR delete_flag <> 'Y'
9765                     GROUP BY rlp.resource_assignment_id,rlp.txn_currency_code,rlp.start_date;
9766 
9767             --log1('PBL 28 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9768             --bug 5962744
9769        -- Bug 7184576 The below code should be run for non time phased budget/forecast. It is
9770        -- possible to process time phased budget/forecast using non time phased period layout.
9771        -- So if condition should be based on time phase code rathen than p_context it wont be
9772        -- updating the correclty.
9773        --IF p_context = 'WEBADI_NON_PERIODIC' THEN
9774        IF p_version_info_rec.x_time_phased_code = 'N' THEN
9775             l_extra_bl_flag_tbl.extend(l_upd_budget_line_id_tbl.COUNT);
9776             l_ex_chg_rsn_code_tbl.extend(l_upd_budget_line_id_tbl.COUNT);
9777             l_ex_desc_tbl.extend(l_upd_budget_line_id_tbl.COUNT);
9778 
9779             if l_upd_budget_line_id_tbl.count > 0 then
9780                 for i in l_upd_budget_line_id_tbl.first .. l_upd_budget_line_id_tbl.last loop
9781 
9782                     l_extra_bl_flag_tbl(i):='N';
9783                     l_ex_chg_rsn_code_tbl(i):=null;
9784                     l_ex_desc_tbl(i):=null;
9785                 end loop;
9786             end if;
9787 
9788             if l_ra_id_tbl.count > 0 then
9789                 for i in l_ra_id_tbl.first .. l_ra_id_tbl.last loop
9790 
9791                     l_ra_exists:='N';
9792                     if l_pji_res_ass_id_tbl.count > 0 then
9793                         for j in l_pji_res_ass_id_tbl.first .. l_pji_res_ass_id_tbl.last loop
9794                             if (l_pji_res_ass_id_tbl(j) = l_ra_id_tbl(i) and
9795                                    l_pji_txn_curr_code_tbl(j) =  l_txn_currency_code_tbl(i)) then
9796                                    l_ra_exists:='Y';
9797                             end if;
9798                         end loop;
9799                     end if;
9800 
9801                     if l_ra_exists ='N' then
9802                         l_extra_bl_flag_tbl.extend(1);
9803                         l_extra_bl_flag_tbl(l_extra_bl_flag_tbl.count):='Y';
9804                         l_pji_res_ass_id_tbl.extend(1);
9805                         l_pji_res_ass_id_tbl(l_pji_res_ass_id_tbl.count):=l_ra_id_tbl(i);
9806                         l_pji_txn_curr_code_tbl.extend(1);
9807                         l_pji_txn_curr_code_tbl(l_pji_txn_curr_code_tbl.count):=l_txn_currency_code_tbl(i);
9808                         l_ex_chg_rsn_code_tbl.extend(1);
9809                         l_ex_chg_rsn_code_tbl(l_ex_chg_rsn_code_tbl.count):=l_change_reason_code_tbl(i);
9810                         l_ex_desc_tbl.extend(1);
9811                         l_ex_desc_tbl(l_ex_desc_tbl.count):=l_description_tbl(i);
9812 
9813 
9814                         l_pji_project_raw_cost_tbl.extend(1);
9815                         l_pji_project_burd_cost_tbl.extend(1);
9816                         l_pji_project_revenue_tbl.extend(1);
9817                         l_pji_raw_cost_tbl.extend(1);
9818                         l_pji_burd_cost_tbl.extend(1);
9819                         l_pji_revenue_tbl.extend(1);
9820                         l_pji_quantity_tbl.extend(1);
9821                         l_pji_pc_cur_conv_rej_code_tbl.extend(1);
9822                         l_pji_pf_cur_conv_rej_code_tbl.extend(1);
9823                         l_upd_init_quantity_tbl.extend(1);
9824                         l_upd_init_raw_cost_tbl.extend(1);
9825                         l_upd_init_burdened_cost_tbl.extend(1);
9826                         l_upd_init_revenue_tbl.extend(1);
9827                         l_upd_proj_init_raw_cost_tbl.extend(1);
9828                         l_upd_proj_init_burd_cost_tbl.extend(1);
9829                         l_upd_proj_init_revenue_tbl.extend(1);
9830                         l_upd_txn_init_raw_cost_tbl.extend(1);
9831                         l_upd_txn_init_burd_cost_tbl.extend(1);
9832                         l_upd_txn_init_revenue_tbl.extend(1);
9833                         l_upd_pj_cost_rate_typ_tbl.extend(1);
9834                         l_upd_pj_cost_exc_rate_tbl.extend(1);
9835                         l_upd_pj_cost_rate_dt_typ_tbl.extend(1);
9836                         l_upd_pj_cost_rate_date_tbl.extend(1);
9837                         l_upd_pj_rev_rate_typ_tbl.extend(1);
9838                         l_upd_pj_rev_exc_rate_tbl.extend(1);
9839                         l_upd_pj_rev_rate_dt_typ_tbl.extend(1);
9840                         l_upd_pj_rev_rate_date_tbl.extend(1);
9841                         l_upd_pf_cost_rate_typ_tbl.extend(1);
9842                         l_upd_pf_cost_exc_rate_tbl.extend(1);
9843                         l_upd_pf_cost_rate_dt_typ_tbl.extend(1);
9844                         l_upd_pf_cost_rate_date_tbl.extend(1);
9845                         l_upd_pf_rev_rate_typ_tbl.extend(1);
9846                         l_upd_pf_rev_exc_rate_tbl.extend(1);
9847                         l_upd_pf_rev_rate_dt_typ_tbl.extend(1);
9848                         l_upd_pf_rev_rate_date_tbl.extend(1);
9849                         l_chg_reason_code_tbl.extend(1);
9850                         l_desc_tbl.extend(1);
9851                         l_upd_delete_flag_tbl.extend(1);
9852                         l_upd_delete_flag_tbl(l_upd_delete_flag_tbl.count) := null;
9853                         l_bl_count_tbl.extend(1);
9854                         l_bl_count_tbl(l_bl_count_tbl.count) := 1;
9855                     end if;
9856                 end loop;
9857             end if;
9858 
9859 
9860 
9861 
9862             FORALL i IN l_pji_res_ass_id_tbl.FIRST .. l_pji_res_ass_id_tbl.LAST
9863                    UPDATE  pa_budget_lines pbl
9864                    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)),
9865                            pbl.project_burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_burdened_cost,'N',l_pji_project_burd_cost_tbl(i)),
9866                            pbl.project_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_revenue,'N',l_pji_project_revenue_tbl(i)),
9867                            pbl.raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.raw_cost,'N',l_pji_raw_cost_tbl(i)),
9868                            pbl.burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.burdened_cost,'N',l_pji_burd_cost_tbl(i)),
9869                            pbl.revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.revenue,'N',l_pji_revenue_tbl(i)),
9870                            pbl.quantity = decode(l_extra_bl_flag_tbl(i),'Y',pbl.quantity,'N',l_pji_quantity_tbl(i)),
9871                            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)),
9872                            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)),
9873                            pbl.init_quantity = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_quantity,'N',l_upd_init_quantity_tbl(i)),
9874                            pbl.init_raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_raw_cost,'N',l_upd_init_raw_cost_tbl(i)),
9875                            pbl.init_burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_burdened_cost,'N',l_upd_init_burdened_cost_tbl(i)),
9876                            pbl.init_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_revenue,'N',l_upd_init_revenue_tbl(i)),
9877                            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)),
9878                            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)),
9879                            pbl.project_init_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_init_revenue,'N',l_upd_proj_init_revenue_tbl(i)),
9880                            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)),
9881                            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)),
9882                            pbl.txn_init_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.txn_init_revenue,'N',l_upd_txn_init_revenue_tbl(i)),
9883                            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)),
9884                            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)),
9885                            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)),
9886                            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)),
9887                            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)),
9888                            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)),
9889                            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)),
9890                            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)),
9891                            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)),
9892                            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)),
9893                            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)),
9894                            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)),
9895                            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)),
9896                            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)),
9897                            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)),
9898                            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)),
9899                            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,
9900                                                                                     l_fnd_miss_char, NULL,
9901                                                                                     l_chg_reason_code_tbl(i))), -- Bug 5014538.
9902                            pbl.description=decode(l_extra_bl_flag_tbl(i),'Y',l_ex_desc_tbl(i),'N',l_desc_tbl(i)),
9903                            pbl.last_updated_by = fnd_global.user_id,
9904                            pbl.last_update_date = SYSDATE,
9905                            pbl.last_update_login =  fnd_global.login_id
9906                    WHERE   pbl.budget_version_id = p_budget_version_id
9907                    AND     pbl.resource_assignment_id = l_pji_res_ass_id_tbl(i)
9908                    AND     pbl.txn_currency_code = l_pji_txn_curr_code_tbl(i)
9909                    AND     l_bl_count_tbl(i)=1
9910                    AND    (l_upd_delete_flag_tbl(i) IS  NULL OR
9911                            l_upd_delete_flag_tbl(i) <> 'Y');
9912        END IF; --if p_version_info_rec.x_time_phased_code = 'N'
9913        --bug 5962744
9914            IF l_debug_mode = 'Y' THEN
9915                pa_debug.g_err_stage := 'Stampping Amounts and rejection codes in budget lines';
9916                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9917            END IF;
9918 
9919            -- Bug 	4424457. If there are budget lines that either got deleted or updated/created then
9920        -- stamp the derived pc/pfc amounts back on budget lines and call PJI API
9921         IF l_bls_proccessed_flag ='Y' OR
9922            l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
9923            --Bug 4424457. Update only those budget lines for which duplicates do not exist in rollup tmp. Budget lines
9924            --with duplicates are already taken care of in calculate API
9925        --    IF l_pji_res_ass_id_tbl.COUNT > 0 THEN
9926          -- Changes done for bug 7184576
9927           -- IF p_context <> 'WEBADI_NON_PERIODIC' THEN
9928             IF p_version_info_rec.x_time_phased_code <> 'N' THEN
9929                 FORALL i IN l_upd_budget_line_id_tbl.FIRST .. l_upd_budget_line_id_tbl.LAST
9930                        UPDATE  pa_budget_lines pbl
9931                        SET     pbl.project_raw_cost = l_pji_project_raw_cost_tbl(i),
9932                                pbl.project_burdened_cost = l_pji_project_burd_cost_tbl(i),
9933                                pbl.project_revenue = l_pji_project_revenue_tbl(i),
9934                                pbl.raw_cost = l_pji_raw_cost_tbl(i),
9935                                pbl.burdened_cost = l_pji_burd_cost_tbl(i),
9936                                pbl.revenue = l_pji_revenue_tbl(i),
9937                                pbl.quantity = l_pji_quantity_tbl(i),
9938                                pbl.pc_cur_conv_rejection_code = l_pji_pc_cur_conv_rej_code_tbl(i),
9939                                pbl.pfc_cur_conv_rejection_code = l_pji_pf_cur_conv_rej_code_tbl(i),
9940                                pbl.init_quantity = l_upd_init_quantity_tbl(i),
9941                                pbl.init_raw_cost = l_upd_init_raw_cost_tbl(i),
9942                                pbl.init_burdened_cost = l_upd_init_burdened_cost_tbl(i),
9943                                pbl.init_revenue = l_upd_init_revenue_tbl(i),
9944                                pbl.project_init_raw_cost = l_upd_proj_init_raw_cost_tbl(i),
9945                                pbl.project_init_burdened_cost = l_upd_proj_init_burd_cost_tbl(i),
9946                                pbl.project_init_revenue = l_upd_proj_init_revenue_tbl(i),
9947                                pbl.txn_init_raw_cost = l_upd_txn_init_raw_cost_tbl(i),
9948                                pbl.txn_init_burdened_cost = l_upd_txn_init_burd_cost_tbl(i),
9949                                pbl.txn_init_revenue = l_upd_txn_init_revenue_tbl(i),
9950                                pbl.project_cost_rate_type = l_upd_pj_cost_rate_typ_tbl(i),
9951                                pbl.project_cost_exchange_rate = l_upd_pj_cost_exc_rate_tbl(i),
9952                                pbl.project_cost_rate_date_type = l_upd_pj_cost_rate_dt_typ_tbl(i),
9953                                pbl.project_cost_rate_date = l_upd_pj_cost_rate_date_tbl(i),
9954                                pbl.project_rev_rate_type = l_upd_pj_rev_rate_typ_tbl(i),
9955                                pbl.project_rev_exchange_rate = l_upd_pj_rev_exc_rate_tbl(i),
9956                                pbl.project_rev_rate_date_type = l_upd_pj_rev_rate_dt_typ_tbl(i),
9957                                pbl.project_rev_rate_date = l_upd_pj_rev_rate_date_tbl(i),
9958                                pbl.projfunc_cost_rate_type = l_upd_pf_cost_rate_typ_tbl(i),
9959                                pbl.projfunc_cost_exchange_rate = l_upd_pf_cost_exc_rate_tbl(i),
9960                                pbl.projfunc_cost_rate_date_type = l_upd_pf_cost_rate_dt_typ_tbl(i),
9961                                pbl.projfunc_cost_rate_date = l_upd_pf_cost_rate_date_tbl(i),
9962                                pbl.projfunc_rev_rate_type = l_upd_pf_rev_rate_typ_tbl(i),
9963                                pbl.projfunc_rev_exchange_rate = l_upd_pf_rev_exc_rate_tbl(i),
9964                                pbl.projfunc_rev_rate_date_type = l_upd_pf_rev_rate_dt_typ_tbl(i),
9965                                pbl.projfunc_rev_rate_date = l_upd_pf_rev_rate_date_tbl(i),
9966                                pbl.change_reason_code = DECODE(l_chg_reason_code_tbl(i), NULL, pbl.change_reason_code,
9967                                                                                         l_fnd_miss_char, NULL,
9968                                                                                         l_chg_reason_code_tbl(i)), --Bug 5144013.
9969                                pbl.description=l_desc_tbl(i),
9970                                pbl.last_updated_by = fnd_global.user_id,
9971                                pbl.last_update_date = SYSDATE,
9972                                pbl.last_update_login =  fnd_global.login_id
9973                        WHERE   pbl.budget_version_id = p_budget_version_id
9974                        AND     pbl.resource_assignment_id = l_pji_res_ass_id_tbl(i)
9975                        AND     pbl.txn_currency_code = l_pji_txn_curr_code_tbl(i)
9976                        AND     pbl.start_date =l_pji_start_date_tbl(i)
9977                        AND     l_bl_count_tbl(i)=1
9978                        AND    (l_upd_delete_flag_tbl(i) IS  NULL OR
9979                                l_upd_delete_flag_tbl(i) <> 'Y');
9980            END IF;
9981 
9982            /* Start of fix for Bug : 5144013.Call is made to the api PA_BUDGET_LINES_UTILS.populate_display_qty
9983               to populate the display_quantity in pa_budget_lines. This is done as part of merging the MRUP3
9984               changes done in 11i into R12.
9985            */
9986            IF l_debug_mode = 'Y' THEN
9987                pa_debug.g_err_stage := 'Before calling Populate Display Qty api';
9988                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9989            END IF;
9990            PA_BUDGET_LINES_UTILS.populate_display_qty
9991                  ( p_budget_version_id     => p_budget_version_id
9992                   ,p_context               => 'FINANCIAL'
9993                   ,x_return_status         => x_return_status);
9994            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9995                IF l_debug_mode = 'Y' THEN
9996                   pa_debug.g_err_stage := 'The API PA_BUDGET_LINES_UTILS.populate_display_qty returned error';
9997                   pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
9998                END IF;
9999                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10000            END IF;
10001            IF l_debug_mode = 'Y' THEN
10002                pa_debug.g_err_stage := 'After calling Populate Display Qty api';
10003                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10004            END IF;
10005            -- Call is made to maintain_data api to rollup the data in new entity.
10006            IF l_debug_mode = 'Y' THEN
10007               pa_debug.g_err_stage := 'Before calling maintanance api maintain_data';
10008               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10009            END IF;
10010            PA_RES_ASG_CURRENCY_PUB.maintain_data(
10011                                                 p_fp_cols_rec           => p_version_info_rec
10012                                                ,p_calling_module        => 'WEBADI'
10013                                                ,p_rollup_flag           => 'Y'
10014                                                ,p_version_level_flag    => 'Y'
10015                                                ,x_return_status         => x_return_status
10016                                                ,x_msg_count             => l_msg_count
10017                                                ,x_msg_data              => l_msg_data);
10018             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10019                IF l_debug_mode = 'Y' THEN
10020                   pa_debug.g_err_stage := 'The API PA_RES_ASG_CURRENCY_PUB.maintain_data returned error';
10021                   pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
10022                END IF;
10023                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10024             END IF;
10025            IF l_debug_mode = 'Y' THEN
10026               pa_debug.g_err_stage := 'After calling maintanance api maintain_data';
10027               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10028            END IF;
10029            /* End of fix for Bug : 5144013*/
10030 
10031             --log1('PBL 29 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10032            IF l_debug_mode = 'Y' THEN
10033                pa_debug.g_err_stage := 'Calling rollup budget version api';
10034                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10035            END IF;
10036            --log1('----- STAGE PBL18.3------- ');
10037            --log1('PBL 30 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10038            PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION
10039                  ( p_budget_version_id     => p_budget_version_id
10040                   ,p_entire_version        => 'Y'
10041                   ,x_return_status         => x_return_status
10042                   ,x_msg_count             => l_msg_count
10043                   ,x_msg_data              => l_msg_data);
10044 
10045                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10046                      IF l_debug_mode = 'Y' THEN
10047                          pa_debug.g_err_stage:='The API PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION returned error';
10048                          pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
10049                      END IF;
10050                      RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10051                  END IF;
10052            --log1('PBL 31 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10053            IF l_debug_mode = 'Y' THEN
10054                  pa_debug.g_err_stage := 'Checking whether MRC api needs to be called';
10055                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10056            END IF;
10057            --log1('----- STAGE PBL18.4------- ');
10058 
10059     /**************MRC ELIMINATION CHANGES: ********************************
10060      ** The following api calls are used for populating the mrc data which is not required
10061      ** as the mrc schema and entity are scrapped from R12
10062            PA_MRC_FINPLAN.check_mrc_install
10063                   (x_return_status        => x_return_status,
10064                    x_msg_count            => l_msg_count,
10065                    x_msg_data             => l_msg_data);
10066 
10067            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10068                IF l_debug_mode = 'Y' THEN
10069                    pa_debug.g_err_stage:='The API PA_MRC_FINPLAN.check_mrc_installed returned error';
10070                    pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
10071                END IF;
10072                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10073            END IF;
10074 
10075            --log1('PBL 32 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10076            -- checking for valid requiered parameter values to call the MRC api
10077            IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS AND
10078                PA_MRC_FINPLAN.G_FINPLAN_MRC_OPTION_CODE = 'A' THEN
10079                   IF l_debug_mode = 'Y' THEN
10080                        pa_debug.g_err_stage := 'Calling MRC api ';
10081                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10082                   END IF;
10083                           --log1('PBL 33 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10084                   PA_MRC_FINPLAN.maintain_all_mc_budget_lines
10085                       (p_fin_plan_version_id  => p_budget_version_id,
10086                        p_entire_version       => 'N',
10087                        x_return_status        => x_return_status,
10088                        x_msg_count            => l_msg_count,
10089                        x_msg_data             => l_msg_data);
10090                        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10091                             IF l_debug_mode = 'Y' THEN
10092                                 pa_debug.g_err_stage:='The API PA_MRC_FINPLAN.maintain_all_mc_budget_lines returned error';
10093                                 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
10094                             END IF;
10095                             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10096                        END IF;
10097                     --log1('PBL 34 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10098            ELSE
10099                   IF l_debug_mode = 'Y' THEN
10100                        pa_debug.g_err_stage := 'MRC api need not be called';
10101                        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10102                   END IF;
10103            END IF;
10104     ***************End of MRC ELIMINATION CHANGES: ***********************/
10105 
10106            --log1('----- STAGE PBL18.5------- ');
10107            IF l_debug_mode = 'Y' THEN
10108                  pa_debug.g_err_stage := 'Data prepared for the call to PJI api';
10109                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10110                  pa_debug.Reset_Curr_Function;
10111            END IF;
10112            --log1('----- STAGE PBL18.6------- ');
10113            --log1('PBL 37'||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10114            --Bug 4424457. Replaced the call to plan_update with plan_delete and plan_create
10115            l_dest_ver_id_tbl.EXTEND;
10116            l_dest_ver_id_tbl(1):=p_budget_version_id;
10117            PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
10118               p_fp_version_ids   => l_dest_ver_id_tbl,
10119               x_return_status    => x_return_status,
10120               x_msg_code         => l_error_msg_code);
10121 
10122             IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
10123                IF l_debug_mode = 'Y' THEN
10124                   pa_debug.g_err_stage := 'API PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE returned ERROR 1 '|| l_error_msg_code;
10125                   pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
10126                END IF;
10127 
10128                RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10129 
10130             END IF;
10131 
10132 
10133             PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE(p_fp_version_ids => l_dest_ver_id_tbl
10134                                               ,x_return_status  => l_return_status
10135                                               ,x_msg_code       => l_error_msg_code);
10136 
10137             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10138                        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10139             END IF;
10140 
10141             --log1('PBL 38 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10142             -- deleting contents from pl/sql tables to be used to call pji api
10143             l_pji_res_ass_id_tbl.DELETE;
10144             l_pji_period_name_tbl.DELETE;
10145             l_pji_start_date_tbl.DELETE;
10146             l_pji_end_date_tbl.DELETE;
10147             l_pji_txn_curr_code_tbl.DELETE;
10148             l_pji_txn_raw_cost_tbl.DELETE;
10149             l_pji_txn_burd_cost_tbl.DELETE;
10150             l_pji_txn_revenue_tbl.DELETE;
10151             l_pji_project_raw_cost_tbl.DELETE;
10152             l_pji_project_burd_cost_tbl.DELETE;
10153             l_pji_project_revenue_tbl.DELETE;
10154             l_pji_raw_cost_tbl.DELETE;
10155             l_pji_burd_cost_tbl.DELETE;
10156             l_pji_revenue_tbl.DELETE;
10157             l_pji_cost_rej_code_tbl.DELETE;
10158             l_pji_revenue_rej_code_tbl.DELETE;
10159             l_pji_burden_rej_code_tbl.DELETE;
10160             l_pji_other_rej_code.DELETE;
10161             l_pji_pc_cur_conv_rej_code_tbl.DELETE;
10162             l_pji_pf_cur_conv_rej_code_tbl.DELETE;
10163             l_pji_quantity_tbl.DELETE;
10164             l_upd_pj_cost_rate_typ_tbl.DELETE;
10165             l_upd_pj_cost_exc_rate_tbl.DELETE;
10166             l_upd_pj_cost_rate_dt_typ_tbl.DELETE;
10167             l_upd_pj_cost_rate_date_tbl.DELETE;
10168             l_upd_pj_rev_rate_typ_tbl.DELETE;
10169             l_upd_pj_rev_exc_rate_tbl.DELETE;
10170             l_upd_pj_rev_rate_dt_typ_tbl.DELETE;
10171             l_upd_pj_rev_rate_date_tbl.DELETE;
10172             l_upd_pf_cost_rate_typ_tbl.DELETE;
10173             l_upd_pf_cost_exc_rate_tbl.DELETE;
10174             l_upd_pf_cost_rate_dt_typ_tbl.DELETE;
10175             l_upd_pf_cost_rate_date_tbl.DELETE;
10176             l_upd_pf_rev_rate_typ_tbl.DELETE;
10177             l_upd_pf_rev_exc_rate_tbl.DELETE;
10178             l_upd_pf_rev_rate_dt_typ_tbl.DELETE;
10179             l_upd_pf_rev_rate_date_tbl.DELETE;
10180             l_upd_budget_line_id_tbl.DELETE;
10181             l_upd_init_quantity_tbl.DELETE;
10182             l_upd_init_raw_cost_tbl.DELETE;
10183             l_upd_init_burdened_cost_tbl.DELETE;
10184             l_upd_init_revenue_tbl.DELETE;
10185             l_upd_proj_init_raw_cost_tbl.DELETE;
10186             l_upd_proj_init_burd_cost_tbl.DELETE;
10187             l_upd_proj_init_revenue_tbl.DELETE;
10188             l_upd_txn_init_raw_cost_tbl.DELETE;
10189             l_upd_txn_init_burd_cost_tbl.DELETE;
10190             l_upd_txn_init_revenue_tbl.DELETE;
10191             l_upd_delete_flag_tbl.DELETE;
10192 
10193         END IF;--       IF l_bls_proccessed_flag ='Y' OR
10194                --      l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
10195 
10196         --log1('PBL 39 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10197         IF l_debug_mode = 'Y' THEN
10198              pa_debug.g_err_stage := 'Leaving process_budget_lines';
10199              pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10200              pa_debug.Reset_Curr_Function;
10201         END IF;
10202 EXCEPTION
10203       WHEN PA_FP_CONSTANTS_PKG.Just_Ret_Exc THEN
10204             IF l_debug_mode = 'Y' THEN
10205                 pa_debug.reset_curr_function;
10206             END IF;
10207             RETURN;
10208       WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
10209             l_msg_count := FND_MSG_PUB.count_msg;
10210 
10211             IF l_msg_count = 1 and x_msg_data IS NULL THEN
10212                    PA_INTERFACE_UTILS_PUB.get_messages
10213                      (p_encoded        => FND_API.G_TRUE
10214                      ,p_msg_index      => 1
10215                      ,p_msg_count      => l_msg_count
10216                      ,p_msg_data       => l_msg_data
10217                      ,p_data           => l_data
10218                      ,p_msg_index_out  => l_msg_index_out);
10219                    x_msg_data := l_data;
10220                    x_msg_count := l_msg_count;
10221             ELSE
10222                   x_msg_count := l_msg_count;
10223             END IF;
10224             x_return_status := FND_API.G_RET_STS_ERROR;
10225             IF l_debug_mode = 'Y' THEN
10226                 pa_debug.reset_curr_function;
10227             END IF;
10228             RETURN;
10229 
10230       WHEN OTHERS THEN
10231           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10232           x_msg_count     := 1;
10233           x_msg_data      := SQLERRM;
10234 
10235           FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
10236                                   ,p_procedure_name  => 'process_budget_lines');
10237           IF l_debug_mode = 'Y' THEN
10238                pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
10239                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
10240           END IF;
10241 
10242           IF l_debug_mode = 'Y' THEN
10243              pa_debug.reset_curr_function;
10244           END IF;
10245           RAISE;
10246 
10247 END process_budget_lines;
10248 
10249 --This procedure will update the budget version and its corresponding data in the interface table with
10250 --the latest request id and plan processing code(XLUP/XLUE).
10251 PROCEDURE update_xl_data_for_new_req
10252 (p_request_id              IN    pa_budget_versions.request_id%TYPE,
10253  p_run_id                  IN    pa_fp_webadi_upload_inf.run_id%TYPE,
10254  p_plan_processing_code    IN    pa_budget_versions.plan_processing_code%TYPE,
10255  p_budget_version_id       IN    pa_budget_versions.budget_version_id%TYPE,
10256  p_null_out_cols           IN    VARCHAR2)
10257 IS
10258 BEGIN
10259 
10260     --Record Version Number is not updated since the web ADI code checks the record Version Number at downloand
10261     --with the record version number at upload and throws an error if they dont match.
10262     UPDATE pa_budget_versions
10263     SET    request_id = p_request_id,
10264            plan_processing_code=p_plan_processing_code
10265     WHERE  budget_version_id = p_budget_version_id;
10266 
10267     --NULL out the IDS and values derived in the previous call to Switcher API do that all the validations
10268     --are done again
10269     UPDATE pa_fp_webadi_upload_inf
10270     SET    task_id                =DECODE(p_null_out_cols,'Y',NULL,task_id),
10271            resource_list_member_id=DECODE(p_null_out_cols,'Y',NULL,resource_list_member_id),
10272            val_error_flag         =DECODE(p_null_out_cols,'Y',NULL,val_error_flag),
10273            val_error_code         =DECODE(p_null_out_cols,'Y',NULL,val_error_code),
10274            err_task_name          =DECODE(p_null_out_cols,'Y',NULL,err_task_name),
10275            err_task_number        =DECODE(p_null_out_cols,'Y',NULL,err_task_number),
10276            err_alias              =DECODE(p_null_out_cols,'Y',NULL,err_alias),
10277            err_amount_type_code   =DECODE(p_null_out_cols,'Y',NULL,err_amount_type_code),
10278            request_id=p_request_id
10279    WHERE   run_id=p_run_id
10280    AND     request_id IS NULL;
10281 
10282 END;
10283 
10284 PROCEDURE switcher
10285 (x_return_status                OUT                NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10286  x_msg_count                    OUT                NOCOPY NUMBER, --File.Sql.39 bug 4440895
10287  x_msg_data                     OUT                NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10288  p_submit_budget_flag           IN                 VARCHAR2,
10289  p_run_id                       IN                 pa_fp_webadi_upload_inf.run_id%TYPE,
10290  x_success_msg                  OUT                NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10291  p_submit_forecast_flag         IN                 VARCHAR2,
10292  p_request_id                   IN                 pa_budget_versions.request_id%TYPE,
10293  p_calling_mode                 IN                 VARCHAR2)
10294 
10295  IS
10296   -- variables used for debugging
10297   l_module_name                   VARCHAR2(100) := 'pa_fp_webadi_pkg.switcher';
10298   l_debug_mode                    VARCHAR2(1) := 'N';
10299   l_debug_level3                  CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
10300   l_debug_level5                  CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
10301 
10302   l_msg_count                     NUMBER;
10303   l_msg_data                      VARCHAR2(2000);
10304   l_data                          VARCHAR2(2000);
10305   l_msg_index_out                 NUMBER;
10306 
10307   l_budget_version_id             pa_budget_versions.budget_version_id%TYPE;
10308   l_rec_version_number            pa_budget_versions.record_version_number%TYPE;
10309   l_pm_rec_version_number         pa_period_masks_b.record_version_number%TYPE;
10310   l_project_id                    pa_projects_all.project_id%TYPE;
10311   l_org_id                        pa_projects_all.org_id%TYPE;
10312   l_version_info_rec              pa_fp_gen_amount_utils.fp_cols;
10313 
10314   -- variable to held the start_date and end_date of individual periods
10315   l_prd_start_date_tbl            SYSTEM.pa_date_tbl_type  := SYSTEM.pa_date_tbl_type();
10316   l_prd_end_date_tbl              SYSTEM.pa_date_tbl_type  := SYSTEM.pa_date_tbl_type();
10317 
10318   l_budget_line_in_tbl            PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE;
10319   l_temp_budget_line_in_tbl            PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE;
10320   l_bl_raw_cost_rate_tbl          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10321   l_bl_burd_cost_rate_tbl         SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10322   l_bl_bill_rate_tbl              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10323   l_bl_plan_start_date_tbl        SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
10324   l_bl_plan_end_date_tbl          SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
10325   l_bl_uom_tbl                    SYSTEM.pa_varchar2_80_tbl_type  := SYSTEM.pa_varchar2_80_tbl_type();
10326   l_mfc_cost_type_tbl             SYSTEM.PA_VARCHAR2_15_TBL_TYPE  := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
10327   l_spread_curve_name_tbl         SYSTEM.PA_VARCHAR2_240_TBL_TYPE :=  SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
10328   l_sp_fixed_date_tbl             SYSTEM.PA_DATE_TBL_TYPE         := SYSTEM.PA_DATE_TBL_TYPE();
10329   l_sp_fixed_date_tbl_1             SYSTEM.PA_DATE_TBL_TYPE         := SYSTEM.PA_DATE_TBL_TYPE();
10330   l_etc_method_name_tbl           SYSTEM.PA_VARCHAR2_80_TBL_TYPE  := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
10331   l_spread_curve_id_tbl           SYSTEM.PA_NUM_TBL_TYPE          := SYSTEM.PA_NUM_TBL_TYPE();
10332   l_spread_curve_id_tbl_1           SYSTEM.PA_NUM_TBL_TYPE          := SYSTEM.PA_NUM_TBL_TYPE();
10333 
10334   l_amount_set_id                 pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
10335   l_allow_qty_flag                VARCHAR2(1);
10336 
10337   l_set_ppc_flag_on_err           VARCHAR2(1);
10338 
10339   l_budget_line_out_tbl           PA_BUDGET_PUB.G_budget_lines_out_tbl%TYPE;
10340   l_delete_flag_tbl               SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
10341   l_delete_flag_tbl_1               SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
10342 
10343   i                               INTEGER;
10344   l_error_indicator_flag          VARCHAR2(1);
10345 
10346   l_mfc_cost_type_id_tbl          SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
10347   l_mfc_cost_type_id_tbl_1          SYSTEM.pa_num_tbl_type         := SYSTEM.pa_num_tbl_type();
10348   l_etc_method_code_tbl           SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
10349   l_etc_method_code_tbl_1           SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
10350 
10351   is_periodic_setup               VARCHAR2(1) := 'N';
10352   l_prep_pbl_calling_context      VARCHAR2(30);
10353   l_plan_class_code               pa_fin_plan_types_b.plan_class_code%TYPE;
10354 
10355   l_ra_id_tbl                        SYSTEM.pa_num_tbl_type;
10356   l_task_id_tbl                      SYSTEM.pa_num_tbl_type;
10357   l_rlm_id_tbl                       SYSTEM.pa_num_tbl_type;
10358   l_txn_currency_code_tbl            SYSTEM.pa_varchar2_15_tbl_type;
10359   l_planning_start_date_tbl          SYSTEM.pa_date_tbl_type;
10360   l_planning_end_date_tbl            SYSTEM.pa_date_tbl_type;
10361   l_total_qty_tbl                    SYSTEM.pa_num_tbl_type;
10362   l_total_raw_cost_tbl               SYSTEM.pa_num_tbl_type;
10363   l_total_burdened_cost_tbl          SYSTEM.pa_num_tbl_type;
10364   l_total_revenue_tbl                SYSTEM.pa_num_tbl_type;
10365   l_raw_cost_rate_tbl                SYSTEM.pa_num_tbl_type;
10366   l_burdened_cost_rate_tbl           SYSTEM.pa_num_tbl_type;
10367   l_bill_rate_tbl                    SYSTEM.pa_num_tbl_type;
10368   l_line_start_date_tbl              SYSTEM.pa_date_tbl_type;
10369   l_line_end_date_tbl                SYSTEM.pa_date_tbl_type;
10370   l_proj_cost_rate_type_tbl          SYSTEM.pa_varchar2_30_tbl_type;
10371   l_proj_cost_rate_date_type_tbl     SYSTEM.pa_varchar2_30_tbl_type;
10372   l_proj_cost_rate_tbl               SYSTEM.pa_num_tbl_type;
10373   l_proj_cost_rate_date_tbl          SYSTEM.pa_date_tbl_type;
10374   l_proj_rev_rate_type_tbl           SYSTEM.pa_varchar2_30_tbl_type;
10375   l_proj_rev_rate_date_type_tbl      SYSTEM.pa_varchar2_30_tbl_type;
10376   l_proj_rev_rate_tbl                SYSTEM.pa_num_tbl_type;
10377   l_proj_rev_rate_date_tbl           SYSTEM.pa_date_tbl_type;
10378   l_pfunc_cost_rate_type_tbl         SYSTEM.pa_varchar2_30_tbl_type;
10379   l_pfunc_cost_rate_date_typ_tbl     SYSTEM.pa_varchar2_30_tbl_type;
10380   l_pfunc_cost_rate_tbl              SYSTEM.pa_num_tbl_type;
10381   l_pfunc_cost_rate_date_tbl         SYSTEM.pa_date_tbl_type;
10382   l_pfunc_rev_rate_type_tbl          SYSTEM.pa_varchar2_30_tbl_type;
10383   l_pfunc_rev_rate_date_type_tbl     SYSTEM.pa_varchar2_30_tbl_type;
10384   l_pfunc_rev_rate_tbl               SYSTEM.pa_num_tbl_type;
10385   l_pfunc_rev_rate_date_tbl          SYSTEM.pa_date_tbl_type;
10386   l_change_reason_code_tbl           SYSTEM.pa_varchar2_30_tbl_type;
10387   l_description_tbl                  SYSTEM.pa_varchar2_2000_tbl_type;
10388   l_etc_quantity_tbl                 SYSTEM.pa_num_tbl_type;
10389   l_etc_raw_cost_tbl                 SYSTEM.pa_num_tbl_type;
10390   l_etc_burdened_cost_tbl            SYSTEM.pa_num_tbl_type;
10391   l_etc_revenue_tbl                  SYSTEM.pa_num_tbl_type;
10392   l_res_class_code_tbl               SYSTEM.pa_varchar2_30_tbl_type;
10393   l_rate_based_flag_tbl              SYSTEM.pa_varchar2_1_tbl_type;
10394   l_rbs_elem_id_tbl                  SYSTEM.pa_num_tbl_type;
10395   l_cbs_elem_id_tbl                  SYSTEM.pa_num_tbl_type; -- cbs enhancement changes bug#16445106
10396   l_amt_type_tbl                     SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
10397   l_prc_ra_id_tbl                    SYSTEM.pa_num_tbl_type;
10398   l_prc_res_class_code_tbl           SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
10399   l_prc_rate_based_flag_tbl          SYSTEM.PA_VARCHAR2_1_TBL_TYPE;
10400   l_prc_rbs_elem_id_tbl              SYSTEM.pa_num_tbl_type;
10401   l_prc_cbs_elem_id_tbl              SYSTEM.pa_num_tbl_type;-- cbs enhancement changes bug#16445106
10402 
10403   CURSOR l_prd_start_end_date_csr (c_org_id                  pa_projects_all.org_id%TYPE,
10404                                    c_prd_mask_id             pa_proj_fp_options.cost_period_mask_id%TYPE,
10405                                    c_time_phased_code        pa_proj_fp_options.cost_time_phased_code%TYPE,
10406                                    c_current_planning_period pa_proj_fp_options.cost_current_planning_period%TYPE)
10407   IS
10408   SELECT glsd.start_date start_date,
10409          gled.end_date end_date
10410   FROM   (SELECT ROW_NUMBER() OVER(PARTITION BY gl.period_set_name,gl.period_type
10411                  ORDER BY gl.start_date) rn,
10412                  gl.start_date start_date,
10413                  gl.end_Date  end_date,
10414                  gl.period_name period_name,
10415                  gl.period_set_name period_set_name,
10416                  gl.period_type period_type
10417           FROM   gl_periods gl,
10418                  pa_implementations_all pim,
10419                  gl_sets_of_books gsb
10420           WHERE  gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
10421           AND    gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
10422           AND    gl.adjustment_period_flag='N'
10423           AND    pim.org_id = c_org_id
10424           AND    gsb.set_of_books_id = pim.set_of_books_id) glsd,
10425          (SELECT ROW_NUMBER() OVER(PARTITION BY gl.period_set_name,gl.period_type
10426                  ORDER BY gl.start_date) rn,
10427                  gl.start_date start_date,
10428                  gl.end_Date  end_date,
10429                  gl.period_name period_name,
10430                  gl.period_set_name period_set_name,
10431                  gl.period_type period_type
10432           FROM   gl_periods gl,
10433                  pa_implementations_all pim,
10434                  gl_sets_of_books gsb
10435           WHERE  gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
10436           AND    gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
10437           AND    gl.adjustment_period_flag='N'
10438           AND    pim.org_id = c_org_id
10439           AND    gsb.set_of_books_id = pim.set_of_books_id) gled,
10440          (SELECT ROW_NUMBER() OVER(PARTITION BY gl.period_set_name,gl.period_type
10441                  ORDER BY gl.start_date) rn,
10442                  gl.start_date start_date,
10443                  gl.end_Date  end_date,
10444                  gl.period_name period_name,
10445                  gl.period_set_name period_set_name,
10446                  gl.period_type period_type
10447           FROM   gl_periods gl,
10448                  pa_implementations_all pim,
10449                  gl_sets_of_books gsb
10450           WHERE  gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
10451           AND    gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
10452           AND    gl.adjustment_period_flag='N'
10453           AND    pim.org_id = c_org_id
10454           AND    gsb.set_of_books_id = pim.set_of_books_id)glcp,
10455           pa_period_mask_details pmd
10456   WHERE  pmd.period_mask_id = c_prd_mask_id
10457   AND    glcp.period_name = c_current_planning_period
10458   AND    glsd.rn = pmd.from_anchor_start + glcp.rn
10459   AND    gled.rn = pmd.from_anchor_end + glcp.rn
10460   AND    pmd.from_anchor_position NOT IN (99999,-99999)
10461   ORDER BY pmd.from_anchor_position;
10462 
10463   l_prd_date_rec            l_prd_start_end_date_csr%ROWTYPE;
10464   l_submit_flag             VARCHAR2(1);
10465   l_profile_val             VARCHAR2(30);
10466   l_profile_thsld_val       NUMBER;
10467   l_profile_thsld_num       NUMBER;
10468   l_etc_start_date          pa_budget_versions.etc_start_date%TYPE;
10469   l_request_id              NUMBER;
10470   l_rollback_flag           VARCHAR2(1);
10471   l_first_pd_bf_pm_en_dt    DATE;
10472   l_last_pd_af_pm_st_dt     DATE;
10473   l_inf_tbl_rec_tbl         inf_cur_tbl_typ;
10474   l_record_counter          NUMBER;
10475 
10476 
10477 BEGIN
10478     --log1('Begin '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10479     l_rollback_flag := 'N';
10480     COMMIT;  /*  Added this for bug 3736220
10481 
10482              Reason: To display budget client extension error messages customized by the Customers
10483              we need to stamp the val_error_code and val_error_flag of PA_FP_WEBADI_UPLOAD_INF table
10484              Only then these error messages will appear in Excel Sheet itself when any failure happens
10485              during upload.
10486 
10487              Code flow is designed as follows:
10488              1. When user clicks on Oracle Upload Toolbar Menu item in Excel
10489                 the WEB ADI related procedures will populate PA_FP_WEBADI_UPLOAD_INF table and does not commit
10490 
10491              2. Switcher API will be invoked after WEB ADI related code flow is completed.
10492 
10493              3. Swicher API internally invokes PA_FP_CALC_PLAN_PKG.CALCULATE which inturn
10494                 invokes the actual budget client extension
10495 
10496              4. In client extension, as part of bug fix 3736220 added code to Stamp client extension errors
10497                 in xface table (we stamp the val_error_code and val_error_flag of
10498                 PA_FP_WEBADI_UPLOAD_INF table)
10499 
10500              5. But the client extension is designed in such a way that when any error occurs in
10501                 client extension we roll back to the calling API PA_FP_CALC_PLAN_PKG. So the stamped data
10502                 gets rolled back. Ulimately the customers customized errors cannot be displayed in excel
10503                 due to this rollback.
10504 
10505               6. Hence in order to preserve the stamped  val_error_code and val_error_flag
10506                  of PA_FP_WEBADI_UPLOAD_INF table,introduced an autonomous procedure Stamp_Client_Extn_Errors
10507 
10508               7. As a result if we dont commit in the beginning when SWITCHER API is called, then when
10509                  Stamp_Client_Extn_Errors APi is invoked there will be no records in PA_FP_WEBADI_UPLOAD_INF.
10510             */
10511 
10512   fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
10513 
10514 
10515   x_return_status := FND_API.G_RET_STS_SUCCESS;
10516   x_msg_count := 0;
10517 
10518   -- initializing the translated out message string
10519   x_success_msg := FND_MESSAGE.GET_STRING
10520                         (APPIN   => 'PA',
10521                          NAMEIN  => 'PA_FP_UPL_ONLINE_SUCC_MSG');
10522 
10523   IF l_debug_mode = 'Y' THEN
10524         pa_debug.Set_Curr_Function
10525                     (p_function   => l_module_name,
10526                      p_debug_mode => l_debug_mode);
10527   END IF;
10528 
10529   --insert_test_dump1;
10530 
10531   --log1('----- Entering Switcher api -------');
10532 
10533   -- validating input parameter
10534   IF p_run_id IS NULL THEN
10535        IF l_debug_mode = 'Y' THEN
10536            pa_debug.g_err_stage := 'p_run_id is passed as null';
10537            pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
10538        END IF;
10539        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10540                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
10541                             p_token1         => 'PROCEDURENAME',
10542                             p_value1         => l_module_name);
10543        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10544   END IF;
10545 
10546   IF l_debug_mode = 'Y' THEN
10547         pa_debug.g_err_stage := 'Entering into switcher';
10548         pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
10549         pa_debug.g_err_stage := 'Fetching the header level info from tmp tbl';
10550         pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
10551   END IF;
10552 
10553   l_submit_flag:='N';
10554   IF p_submit_forecast_flag='Y' OR p_submit_budget_flag ='Y' THEN
10555 
10556        l_submit_flag:='Y';
10557 
10558   END IF;
10559 
10560 
10561   BEGIN
10562         SELECT  budget_version_id,
10563                 record_version_number,
10564                 prd_mask_rec_ver_number
10565         INTO    l_budget_version_id,
10566                 l_rec_version_number,
10567                 l_pm_rec_version_number
10568         FROM    pa_fp_webadi_upload_inf
10569         WHERE   run_id = p_run_id
10570         AND    Nvl(p_request_id, -99) = Nvl(request_id, -99)
10571         AND     rownum = 1;
10572   EXCEPTION
10573         WHEN NO_DATA_FOUND THEN
10574              IF l_debug_mode = 'Y' THEN
10575                  pa_debug.g_err_stage := 'No data found while reading header info';
10576                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10577              END IF;
10578              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10579   END;
10580 
10581 
10582   --Find out whether the layout is a periodic layout or not. This can be done by looking at the amount type column
10583   --in the table since it will be populated only for periodic layouts.
10584   BEGIN
10585         SELECT  'Y'
10586         INTO    is_periodic_setup
10587         FROM    DUAL
10588         WHERE EXISTS(SELECT  'X'
10589                      FROM    pa_fp_webadi_upload_inf
10590                      WHERE   amount_type_name IS NOT NULL
10591                      AND     run_id = p_run_id
10592                      AND    Nvl(p_request_id, -99) = Nvl(request_id, -99));
10593   EXCEPTION
10594         WHEN NO_DATA_FOUND THEN
10595              is_periodic_setup := 'N';
10596   END;
10597 
10598   IF l_debug_mode = 'Y' THEN
10599       pa_debug.g_err_stage := 'is_periodic_setup: =' || is_periodic_setup;
10600       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10601   END IF;
10602 
10603   -- throwing error if the header level info is missing
10604   IF l_budget_version_id IS NULL OR
10605      l_rec_version_number IS NULL  OR
10606      (is_periodic_setup='Y' AND l_pm_rec_version_number IS NULL) THEN
10607         IF l_debug_mode = 'Y' THEN
10608            pa_debug.g_err_stage := 'Header level values are null in interface table';
10609            pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
10610         END IF;
10611         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10612                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
10613                              p_token1         => 'PROCEDURENAME',
10614                              p_value1         => l_module_name);
10615         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10616   END IF;
10617 
10618 
10619   --log1('----- STAGE 1-------');
10620 
10621   IF l_debug_mode = 'Y' THEN
10622       pa_debug.g_err_stage := 'Deriving project id';
10623       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10624   END IF;
10625 
10626   BEGIN
10627        SELECT  bv.project_id,
10628                Nvl(pl.org_id, -99),
10629                etc_start_date
10630        INTO    l_project_id,
10631                l_org_id,
10632                l_etc_start_date
10633        FROM    pa_budget_versions bv,
10634                pa_projects_all pl
10635        WHERE   bv.budget_version_id = l_budget_version_id
10636        AND     bv.project_id = pl.project_id;
10637   EXCEPTION
10638        WHEN NO_DATA_FOUND THEN
10639              IF l_debug_mode = 'Y' THEN
10640                  pa_debug.g_err_stage := 'No data found while reading project id ..';
10641                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10642              END IF;
10643             UPDATE pa_fp_webadi_upload_inf
10644             SET    val_error_flag       = 'Y',
10645                    val_error_code       = 'PA_FP_WEBADI_VER_MODIFIED',
10646                    err_task_name        = nvl(task_name,'-98'),
10647                    err_task_number      = nvl(task_number,'-98'),
10648                    err_alias            = nvl(resource_alias,'-98'),
10649                    err_amount_type_code = nvl(amount_type_code,'-98')
10650             WHERE  run_id=p_run_id
10651             AND     Nvl(p_request_id, -99) = Nvl(request_id, -99);
10652 
10653             x_return_status := FND_API.G_RET_STS_ERROR;
10654             IF l_debug_mode = 'Y' THEN
10655                pa_debug.reset_curr_function;
10656             END IF;
10657 
10658              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10659   END;
10660 
10661   --log1('----- STAGE 2-------');
10662 
10663   MO_GLOBAL.SET_POLICY_CONTEXT('S',l_org_id);
10664 
10665   IF l_debug_mode = 'Y' THEN
10666       pa_debug.g_err_stage := 'Calling pa_fp_gen_amount_utils.get_plan_version_dtls';
10667       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10668   END IF;
10669   --log1('----- STAGE 2.1-------'||l_project_id);
10670     --log1('----- STAGE 2.2-------'||l_budget_version_id);
10671   pa_fp_gen_amount_utils.get_plan_version_dtls
10672         (p_project_id          => l_project_id,
10673          p_budget_version_id   => l_budget_version_id,
10674          x_fp_cols_rec         => l_version_info_rec,
10675          x_return_status       => x_return_status,
10676          x_msg_count           => l_msg_count,
10677          x_msg_data            => l_msg_data);
10678 
10679        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10680                 IF l_debug_mode = 'Y' THEN
10681                      pa_debug.g_err_stage := 'Call to get_plan_version_dtls returned with error';
10682                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10683                 END IF;
10684                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10685           END IF;
10686   --log1('----- STAGE 2.3-------'||x_return_status);
10687     --log1('----- STAGE 2.4-------'||l_budget_version_id);
10688 
10689   IF l_debug_mode = 'Y' THEN
10690       pa_debug.g_err_stage := 'Calling validate_header_info';
10691       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10692   END IF;
10693 
10694   --log1('----- STAGE 3-------');
10695     --log1('1 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10696 	--DEBUG_NS('Before validate_header_info');
10697   validate_header_info
10698      ( p_calling_mode           => p_calling_mode,
10699        p_run_id                 => p_run_id,
10700        p_budget_version_id      => l_budget_version_id,
10701        p_record_version_number  => l_rec_version_number,
10702        p_pm_rec_version_number  => l_pm_rec_version_number,
10703        p_submit_flag            => l_submit_flag,
10704        p_request_id             => p_request_id,
10705        x_return_status          => x_return_status,
10706        x_msg_data               => l_msg_count,
10707        x_msg_count              => l_msg_data);
10708     --log1('2 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10709 
10710      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10711            IF l_debug_mode = 'Y' THEN
10712                 pa_debug.g_err_stage := 'Call to validate_header_info returned with error';
10713                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10714            END IF;
10715            RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10716      END IF;
10717 
10718   -- checking, if the layout is periodic one
10719   IF l_debug_mode = 'Y' THEN
10720       pa_debug.g_err_stage := 'Checking for periodic setup';
10721       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10722   END IF;
10723 
10724   --log1('----- STAGE 4-------');
10725 
10726   --log1('----- STAGE 5-------');
10727   --dbms_output.put_line('--------l_org_id ---------' || l_org_id);
10728   --dbms_output.put_line('--------l_version_info_rec.x_period_mask_id---------' || l_version_info_rec.x_period_mask_id);
10729   --dbms_output.put_line('--------l_version_info_rec.x_time_phased_code ---------' || l_version_info_rec.x_time_phased_code);
10730   --dbms_output.put_line('--------l_version_info_rec.x_current_planning_period ---------' ||l_version_info_rec.x_current_planning_period);
10731   -- populating the tables for period start/end date to be passed to prepare_val_input
10732   -- if the version is time phased and the layout is periodic
10733   IF l_version_info_rec.x_time_phased_code <> 'N' AND
10734      is_periodic_setup = 'Y' THEN
10735         OPEN l_prd_start_end_date_csr(l_org_id,
10736                                       l_version_info_rec.x_period_mask_id,
10737                                       l_version_info_rec.x_time_phased_code,
10738                                       l_version_info_rec.x_current_planning_period);
10739         /*LOOP*/
10740               FETCH l_prd_start_end_date_csr
10741               BULK COLLECT INTO  /*l_prd_date_rec;*/
10742               l_prd_start_date_tbl,
10743               l_prd_end_date_tbl;
10744               /*EXIT WHEN l_prd_date_rec.start_date IS NULL;
10745 
10746               l_prd_start_date_tbl.EXTEND(1);
10747               l_prd_start_date_tbl(l_prd_start_date_tbl.COUNT) := l_prd_date_rec.start_date;
10748               l_prd_end_date_tbl.EXTEND(1);
10749               l_prd_end_date_tbl(l_prd_end_date_tbl.COUNT) := l_prd_date_rec.end_date;
10750         END LOOP;*/
10751         CLOSE l_prd_start_end_date_csr;
10752 
10753   END IF; -- if periodic
10754 
10755   --dbms_output.put_line('--------l_prd_start_date_tbl.COUNT ---------' || l_prd_start_date_tbl.COUNT);
10756   --dbms_output.put_line('--------l_prd_end_date_tbl.COUNT ---------' || l_prd_end_date_tbl.COUNT);
10757 
10758   IF l_debug_mode = 'Y' THEN
10759       pa_debug.g_err_stage := 'Calling prepare_val_input';
10760       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10761   END IF;
10762 
10763   --log1('----- STAGE 6-------');
10764  --log1('3 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10765 
10766 
10767   IF is_periodic_setup = 'Y' THEN
10768 		--DEBUG_NS('Before prepare_val_input 10998');
10769         prepare_val_input
10770            ( p_run_id                   => p_run_id,
10771              p_request_id               => p_request_id,
10772              p_version_info_rec         => l_version_info_rec,
10773              p_prd_start_date_tbl       => l_prd_start_date_tbl,
10774              p_prd_end_date_tbl         => l_prd_end_date_tbl,
10775              p_org_id                   => l_org_id,
10776              x_budget_lines             => l_budget_line_in_tbl,
10777              x_etc_quantity_tbl         => l_etc_quantity_tbl,
10778              x_etc_raw_cost_tbl         => l_etc_raw_cost_tbl,
10779              x_etc_burdened_cost_tbl    => l_etc_burdened_cost_tbl,
10780              x_etc_revenue_tbl          => l_etc_revenue_tbl,
10781              x_raw_cost_rate_tbl        => l_bl_raw_cost_rate_tbl,
10782              x_burd_cost_rate_tbl       => l_bl_burd_cost_rate_tbl,
10783              x_bill_rate_tbl            => l_bl_bill_rate_tbl,
10784              x_planning_start_date_tbl  => l_bl_plan_start_date_tbl,
10785              x_planning_end_date_tbl    => l_bl_plan_end_date_tbl,
10786              x_uom_tbl                  => l_bl_uom_tbl,
10787              x_mfc_cost_type_tbl        => l_mfc_cost_type_tbl,
10788              x_spread_curve_name_tbl    => l_spread_curve_name_tbl,
10789              x_sp_fixed_date_tbl        => l_sp_fixed_date_tbl,
10790              x_etc_method_name_tbl      => l_etc_method_name_tbl,
10791              x_spread_curve_id_tbl      => l_spread_curve_id_tbl,
10792              x_delete_flag_tbl          => l_delete_flag_tbl,
10793              x_ra_id_tbl                => l_ra_id_tbl,
10794              x_res_class_code_tbl       => l_res_class_code_tbl,
10795              x_rate_based_flag_tbl      => l_rate_based_flag_tbl,
10796              x_rbs_elem_id_tbl          => l_rbs_elem_id_tbl,
10797 			 x_cbs_elem_id_tbl          => l_cbs_elem_id_tbl, -- cbs enhancement changes bug#16445106
10798              x_amt_type_tbl             => l_amt_type_tbl,
10799              x_first_pd_bf_pm_en_dt     => l_first_pd_bf_pm_en_dt,
10800              x_last_pd_af_pm_st_dt      => l_last_pd_af_pm_st_dt,
10801              x_inf_tbl_rec_tbl          => l_inf_tbl_rec_tbl,
10802              x_num_of_rec_processed     => l_record_counter,
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 prepare_val_input 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   ELSE
10815 		--DEBUG_NS('Before prepare_val_input 11045');
10816         prepare_val_input
10817            ( p_run_id                   => p_run_id,
10818              p_request_id               => p_request_id,
10819              p_version_info_rec         => l_version_info_rec,
10820              p_prd_start_date_tbl       => l_prd_start_date_tbl,
10821              p_prd_end_date_tbl         => l_prd_end_date_tbl,
10822              p_org_id                   => l_org_id,
10823              x_budget_lines             => l_budget_line_in_tbl,
10824              x_etc_quantity_tbl         => l_etc_quantity_tbl,
10825              x_etc_raw_cost_tbl         => l_etc_raw_cost_tbl,
10826              x_etc_burdened_cost_tbl    => l_etc_burdened_cost_tbl,
10827              x_etc_revenue_tbl          => l_etc_revenue_tbl,
10828              x_raw_cost_rate_tbl        => l_bl_raw_cost_rate_tbl,
10829              x_burd_cost_rate_tbl       => l_bl_burd_cost_rate_tbl,
10830              x_bill_rate_tbl            => l_bl_bill_rate_tbl,
10831              x_planning_start_date_tbl  => l_bl_plan_start_date_tbl,
10832              x_planning_end_date_tbl    => l_bl_plan_end_date_tbl,
10833              x_uom_tbl                  => l_bl_uom_tbl,
10834              x_mfc_cost_type_tbl        => l_mfc_cost_type_tbl,
10835              x_spread_curve_name_tbl    => l_spread_curve_name_tbl,
10836              x_sp_fixed_date_tbl        => l_sp_fixed_date_tbl,
10837              x_etc_method_name_tbl      => l_etc_method_name_tbl,
10838              x_spread_curve_id_tbl      => l_spread_curve_id_tbl,
10839              x_delete_flag_tbl          => l_delete_flag_tbl,
10840              x_ra_id_tbl                => l_ra_id_tbl,
10841              x_res_class_code_tbl       => l_res_class_code_tbl,
10842              x_rate_based_flag_tbl      => l_rate_based_flag_tbl,
10843              x_rbs_elem_id_tbl          => l_rbs_elem_id_tbl,
10844 			 x_cbs_elem_id_tbl          => l_cbs_elem_id_tbl, -- cbs enhancement changes bug#16445106
10845              x_amt_type_tbl             => l_amt_type_tbl,
10846              x_first_pd_bf_pm_en_dt     => l_first_pd_bf_pm_en_dt,
10847              x_last_pd_af_pm_st_dt      => l_last_pd_af_pm_st_dt,
10848              x_inf_tbl_rec_tbl          => l_inf_tbl_rec_tbl,
10849              x_num_of_rec_processed     => l_record_counter,
10850              x_return_status            => x_return_status,
10851              x_msg_count                => l_msg_count,
10852              x_msg_data                 => l_msg_data);
10853 
10854            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10855                  IF l_debug_mode = 'Y' THEN
10856                       pa_debug.g_err_stage := 'Call to prepare_val_input returned with error';
10857                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10858                  END IF;
10859                  RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10860            END IF;
10861   END IF; -- periodic check
10862 
10863     --log1('3 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10864     --log1('3.1 '||l_inf_tbl_rec_tbl.count);
10865   --log1('----- STAGE 7------- l_budget_line_in_tbl.count '||l_budget_line_in_tbl.count);
10866   -- getting other required information to call validate_budget_lines
10867 
10868   IF l_version_info_rec.x_version_type = 'COST' THEN
10869           l_allow_qty_flag := l_version_info_rec.x_cost_quantity_flag;
10870   ELSIF l_version_info_rec.x_version_type = 'REVENUE' THEN
10871           l_allow_qty_flag := l_version_info_rec.x_rev_quantity_flag;
10872   ELSIF l_version_info_rec.x_version_type = 'ALL' THEN
10873           l_allow_qty_flag := l_version_info_rec.x_all_quantity_flag;
10874   END IF;
10875 
10876   IF l_debug_mode = 'Y' THEN
10877       pa_debug.g_err_stage := 'Calling validate_budget_lines';
10878       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10879   END IF;
10880     --log1('4 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10881 
10882   l_spread_curve_id_tbl_1 := l_spread_curve_id_tbl;
10883   --DEBUG_NS('Before pa_budget_pvt.validate_budget_lines');
10884 
10885 
10886   --l_temp_budget_line_in_tbl := l_budget_line_in_tbl;
10887 
10888   pa_budget_pvt.validate_budget_lines
10889      (p_run_id                          => p_run_id
10890      ,p_calling_context                 => 'WEBADI'
10891      ,p_pa_project_id                   => l_version_info_rec.x_project_id
10892      ,p_budget_type_code                => null     -- pass null
10893      ,p_fin_plan_type_id                => l_version_info_rec.x_fin_plan_type_id
10894      ,p_version_type                    => l_version_info_rec.x_version_type
10895      ,p_resource_list_id                => l_version_info_rec.x_resource_list_id
10896      ,p_time_phased_code                => l_version_info_rec.x_time_phased_code
10897      ,p_budget_entry_method_code        => null -- pass null
10898      ,p_entry_level_code                => l_version_info_rec.x_fin_plan_level_code
10899      ,p_allow_qty_flag                  => l_allow_qty_flag
10900      ,p_allow_raw_cost_flag             => l_version_info_rec.x_raw_cost_flag
10901      ,p_allow_burdened_cost_flag        => l_version_info_rec.x_burdened_flag
10902      ,p_allow_revenue_flag              => l_version_info_rec.x_revenue_flag
10903      ,p_multi_currency_flag             => l_version_info_rec.x_plan_in_multi_curr_flag
10904      ,p_project_cost_rate_type          => null
10905      ,p_project_cost_rate_date_typ      => null
10906      ,p_project_cost_rate_date          => null
10907      ,p_project_cost_exchange_rate      => null
10908      ,p_projfunc_cost_rate_type         => null
10909      ,p_projfunc_cost_rate_date_typ     => null
10910      ,p_projfunc_cost_rate_date         => null
10911      ,p_projfunc_cost_exchange_rate     => null
10912      ,p_project_rev_rate_type           => null
10913      ,p_project_rev_rate_date_typ       => null
10914      ,p_project_rev_rate_date           => null
10915      ,p_project_rev_exchange_rate       => null
10916      ,p_projfunc_rev_rate_type          => null
10917      ,p_projfunc_rev_rate_date_typ      => null
10918      ,p_projfunc_rev_rate_date          => null
10919      ,p_projfunc_rev_exchange_rate      => null
10920      ,p_version_info_rec                => l_version_info_rec
10921      ,p_allow_raw_cost_rate_flag        => l_version_info_rec.x_cost_rate_flag
10922      ,p_allow_burd_cost_rate_flag       => l_version_info_rec.x_burden_rate_flag
10923      ,p_allow_bill_rate_flag            => l_version_info_rec.x_bill_rate_flag
10924      ,p_raw_cost_rate_tbl               => l_bl_raw_cost_rate_tbl
10925      ,p_burd_cost_rate_tbl              => l_bl_burd_cost_rate_tbl
10926      ,p_bill_rate_tbl                   => l_bl_bill_rate_tbl
10927      ,p_uom_tbl                         => l_bl_uom_tbl
10928      ,p_planning_start_date_tbl         => l_bl_plan_start_date_tbl
10929      ,p_planning_end_date_tbl           => l_bl_plan_end_date_tbl
10930      ,p_delete_flag_tbl                 => l_delete_flag_tbl
10931      ,p_mfc_cost_type_tbl               => l_mfc_cost_type_tbl
10932      ,p_spread_curve_name_tbl           => l_spread_curve_name_tbl
10933      ,p_sp_fixed_date_tbl               => l_sp_fixed_date_tbl
10934      ,p_etc_method_name_tbl             => l_etc_method_name_tbl
10935      ,p_spread_curve_id_tbl             => l_spread_curve_id_tbl_1
10936      ,p_amount_type_tbl                 => l_amt_type_tbl
10937      ,px_budget_lines_in                => l_budget_line_in_tbl
10938      ,x_budget_lines_out                => l_budget_line_out_tbl
10939      ,x_mfc_cost_type_id_tbl            => l_mfc_cost_type_id_tbl
10940      ,x_etc_method_code_tbl             => l_etc_method_code_tbl
10941      ,x_spread_curve_id_tbl             => l_spread_curve_id_tbl
10942      ,x_msg_count                       => l_msg_count
10943      ,x_msg_data                        => l_msg_data
10944      ,x_return_status                   => x_return_status);
10945     --log1('5 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10946     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10947          IF l_debug_mode = 'Y' THEN
10948               pa_debug.g_err_stage := 'Call to validate_budget_lines returned with error';
10949               pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10950          END IF;
10951          RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10952     END IF;
10953   --log1('----- STAGE 9------- l_budget_line_in_tbl.count '||l_budget_line_in_tbl.count);
10954 
10955   IF l_debug_mode = 'Y' THEN
10956       pa_debug.g_err_stage := 'Call to  validate_budget_lines is complete';
10957       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10958       pa_debug.g_err_stage := 'Checking for errors';
10959       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10960   END IF;
10961 
10962   --DEBUG_NS('l_budget_line_in_tbl.count :: '|| l_budget_line_in_tbl.count);
10963   --DEBUG_NS('After pa_budget_pvt.validate_budget_lines :: '|| x_msg_data);
10964   --DEBUG_NS('After pa_budget_pvt.validate_budget_lines :: '|| x_msg_data);
10965   --DEBUG_NS('p_run_id :: '|| p_run_id);
10966   --DEBUG_NS('p_request_id :: '|| p_request_id);
10967   --DEBUG_NS('Before l_error_indicator_flag :: '|| l_error_indicator_flag);
10968 
10969   /*
10970   FOR i in l_budget_line_in_tbl.first .. l_budget_line_in_tbl.last
10971   LOOP
10972 	l_budget_line_in_tbl(i).cbs_element_id := l_temp_budget_line_in_tbl(i).cbs_element_id;
10973   END LOOP;
10974   */
10975   l_error_indicator_flag := 'N';
10976   BEGIN
10977 
10978         SELECT 'X'
10979         INTO   l_error_indicator_flag
10980         FROM   DUAL
10981         WHERE  EXISTS (SELECT  'Y'
10982                        FROM    pa_fp_webadi_upload_inf inf--pa_fp_webadi_upload_inf inf
10983                        WHERE   run_id = p_run_id
10984                        AND     Nvl(p_request_id, -99) = Nvl(request_id, -99)
10985                        AND     (inf.val_error_flag = 'Y'
10986                        OR       inf.val_error_code IS NOT NULL));
10987 
10988 
10989 
10990 		--DEBUG_NS('Sql Rowcount :: '|| sql%rowcount);
10991   EXCEPTION
10992         WHEN NO_DATA_FOUND THEN
10993              l_error_indicator_flag := 'N';
10994   END;
10995 
10996   IF l_debug_mode = 'Y' THEN
10997       pa_debug.g_err_stage := 'l_error_indicator_flag: ' || l_error_indicator_flag;
10998       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10999   END IF;
11000 
11001   --DEBUG_NS('l_error_indicator_flag :: '|| l_error_indicator_flag);
11002 
11003   --log1('----- STAGE 10-------');
11004   IF l_error_indicator_flag = 'X' THEN
11005         IF l_debug_mode = 'Y' THEN
11006             pa_debug.g_err_stage := 'Errors reported in the tmp tbl';
11007             pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11008         END IF;
11009 
11010         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11011   END IF;
11012 
11013 
11014   -- bug 4428112: add the following procedure to update the txn currency code
11015   -- if it was not passed earlier, for a non MC enabled version with the validated
11016   -- currency code as returned from the validate_budget_lines.
11017   IF l_version_info_rec.x_plan_in_multi_curr_flag = 'N' THEN
11018   --DEBUG_NS('Before  check_and_update_txn_curr_code ');
11019         check_and_update_txn_curr_code
11020             (p_budget_line_tbl  => l_budget_line_in_tbl,
11021              px_inf_cur_rec_tbl => l_inf_tbl_rec_tbl,
11022              x_return_status    => x_return_status,
11023              x_msg_count        => l_msg_count,
11024              x_msg_data         => l_msg_data);
11025 
11026         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11027              IF l_debug_mode = 'Y' THEN
11028                   pa_debug.g_err_stage := 'Call to check_and_update_txn_curr_code returned with error';
11029                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11030              END IF;
11031              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11032         END IF;
11033   END IF;
11034 
11035 
11036   -- no errors reported in validate_budget_lines. Check if the processing can happen online or
11037   --a concurrent request has to be submitted
11038   IF p_calling_mode = 'STANDARD' THEN
11039       --log1('----- STAGE 10.1-------');
11040       -- For values other than site level
11041       l_profile_val := fnd_profile.value_specific
11042                      (name              => 'PA_FP_WEBADI_DATA_PRC_MODE',
11043                       user_id           => fnd_global.user_id,
11044                       responsibility_id => fnd_global.resp_id,
11045                       application_id    => 275);
11046       --log1('----- STAGE 10.2-------');
11047       IF l_profile_val IS NULL THEN
11048           -- For values at site level
11049           --log1('----- STAGE 10.3-------');
11050           l_profile_val := fnd_profile.value
11051                            (name => 'PA_FP_WEBADI_DATA_PRC_MODE');
11052           --log1('----- STAGE 10.4-------');
11053       END IF;
11054 
11055 	--DEBUG_NS('l_profile_val :: '|| l_profile_val);
11056 
11057       IF l_profile_val = 'STANDARD' THEN
11058           --log1('----- STAGE 10.5-------');
11059           l_profile_thsld_val := fnd_profile.value_specific
11060                                  (name              => 'PA_FP_WEBADI_DATA_PRC_THSLD',
11061                                   user_id           => fnd_global.user_id,
11062                                   responsibility_id => fnd_global.resp_id,
11063                                   application_id    => 275);
11064           --log1('----- STAGE 10.6-------');
11065           IF l_profile_thsld_val IS NULL THEN
11066               --log1('----- STAGE 10.7-------');
11067               l_profile_thsld_val := fnd_profile.value
11068                                      (name => 'PA_FP_WEBADI_DATA_PRC_THSLD');
11069           --log1('----- STAGE 10.8-------');
11070           END IF;
11071 
11072           BEGIN
11073 
11074             SELECT to_number(l_profile_thsld_val)
11075             INTO   l_profile_thsld_num
11076             FROM   dual;
11077             --log1('----- STAGE 10.9-------');
11078           EXCEPTION
11079           WHEN INVALID_NUMBER THEN
11080              --log1('----- STAGE 10.10-------');
11081              l_profile_thsld_num := 0;
11082           END;
11083 
11084           IF l_profile_thsld_num < l_record_counter THEN
11085               --log1('----- STAGE 10.11-------');
11086               l_set_ppc_flag_on_err :='Y';
11087 
11088               -- bug 5657334: setting the conc program to refer only a single org as the same in the
11089               -- project context before submitting the request
11090               fnd_request.set_org_id(l_org_id);
11091               -- end bug 5657334
11092 
11093               l_request_id := FND_REQUEST.submit_request
11094                              (application   =>   'PA',
11095                               program       =>   'PAFPWACP',
11096                               argument1     =>   l_submit_flag, -- p_submit_ver_flag
11097                               argument2     =>   p_run_id );    -- p_run_id
11098               --log1('----- STAGE 10.12-------');
11099               IF l_request_id =0 THEN
11100                   --log1('----- STAGE 10.13-------');
11101                   RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11102 
11103               ELSE
11104                   --log1('----- STAGE 10.14-------');
11105 
11106                   -- updating the budget version with the request_id
11107                   UPDATE  pa_budget_versions
11108                   SET     plan_processing_code = 'XLUP',
11109                           request_id = l_request_id
11110                   WHERE   budget_version_id = l_budget_version_id;
11111 
11112                   UPDATE  pa_fp_webadi_upload_inf
11113                   SET     request_id = l_request_id
11114                   WHERE   run_id = p_run_id
11115                   AND     request_id IS NULL;
11116 
11117                   COMMIT; -- is required to query the interface table from conc prog.
11118                   --log1('----- STAGE 10.15-------');
11119 
11120                   -- If the concurrent request is submitted during upload then the request id should
11121                   -- be displayed to the user. Hence change the x_success_msg value
11122                   IF l_request_id IS NOT NULL AND
11123                      (l_request_id <> -99 OR
11124                       l_request_id <> -1) THEN
11125                           FND_MESSAGE.SET_NAME( APPLICATION =>'PA',
11126                                                 NAME        => 'PA_FP_WA_CONC_PRC_RESUB_INFO');
11127 
11128                           FND_MESSAGE.SET_TOKEN(TOKEN     => 'REQUEST_ID',
11129                                                 VALUE     => '' || l_request_id);
11130 
11131                           x_success_msg := FND_MESSAGE.GET;
11132                   END IF;
11133 
11134                   IF l_debug_mode = 'Y' THEN
11135                       pa_debug.reset_curr_function;
11136                   END IF;
11137 
11138                   RETURN;
11139 
11140               END IF;--IF l_request_id =0 THEN
11141 
11142           END IF;--IF l_profile_thsld_num < l_budget_line_in_tbl.COUNT
11143 
11144       END IF;--IF l_profile_val = 'STANDARD' THEN
11145 
11146   END IF;--IF p_calling_mode = 'STANDARD' TEHN
11147   -- preparing the inputs for preapre_pbl_input
11148 
11149   --log1('----- STAGE 11------- l_budget_line_in_tbl.count'||l_budget_line_in_tbl.count);
11150   IF is_periodic_setup = 'Y' THEN
11151         l_prep_pbl_calling_context := 'WEBADI_PERIODIC';
11152   ELSE
11153         l_prep_pbl_calling_context := 'WEBADI_NON_PERIODIC';
11154   END IF;
11155 
11156   -- calling prepare_pbl_input to prepare inputs for the process_budget_lines api from data passed
11157   -- back from validate_budget_lines
11158   IF l_debug_mode = 'Y' THEN
11159       pa_debug.g_err_stage := 'Calling prepare_pbl_input';
11160       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11161   END IF;
11162   --log1('6 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11163 
11164   l_spread_curve_id_tbl_1 := l_spread_curve_id_tbl;
11165   l_mfc_cost_type_id_tbl_1 := l_mfc_cost_type_id_tbl;
11166   l_delete_flag_tbl_1 := l_delete_flag_tbl;
11167   l_etc_method_code_tbl_1 := l_etc_method_code_tbl;
11168   l_sp_fixed_date_tbl_1 := l_sp_fixed_date_tbl;
11169 
11170   --DEBUG_NS('Before prepare_pbl_input');
11171 
11172   prepare_pbl_input
11173         (p_context                         => l_prep_pbl_calling_context,
11174          p_run_id                          => p_run_id,
11175          p_version_info_rec                => l_version_info_rec,
11176          p_inf_tbl_rec_tbl                 => l_inf_tbl_rec_tbl,
11177          p_project_id                      => l_project_id,
11178          p_budget_version_id               => l_budget_version_id,
11179          p_etc_start_date                  => l_etc_start_date,
11180          p_plan_class_code                 => l_version_info_rec.x_plan_class_code,
11181          p_first_pd_bf_pm_en_dt            => l_first_pd_bf_pm_en_dt,
11182          p_last_pd_af_pm_st_dt             => l_last_pd_af_pm_st_dt,
11183          p_budget_lines_tbl                => l_budget_line_in_tbl,
11184          p_ra_id_tbl                       => l_ra_id_tbl,
11185          p_prd_mask_st_date_tbl            => l_prd_start_date_tbl,
11186          p_prd_mask_end_date_tbl           => l_prd_end_date_tbl,
11187          p_planning_start_date_tbl         => l_bl_plan_start_date_tbl,
11188          p_planning_end_date_tbl           => l_bl_plan_end_date_tbl,
11189          p_etc_quantity_tbl                => l_etc_quantity_tbl,
11190          p_etc_raw_cost_tbl                => l_etc_raw_cost_tbl,
11191          p_etc_burdened_cost_tbl           => l_etc_burdened_cost_tbl,
11192          p_etc_revenue_tbl                 => l_etc_revenue_tbl,
11193          p_raw_cost_rate_tbl               => l_bl_raw_cost_rate_tbl,
11194          p_burd_cost_rate_tbl              => l_bl_burd_cost_rate_tbl,
11195          p_bill_rate_tbl                   => l_bl_bill_rate_tbl,
11196          p_spread_curve_id_tbl             => l_spread_curve_id_tbl_1,
11197          p_mfc_cost_type_id_tbl            => l_mfc_cost_type_id_tbl_1,
11198          p_etc_method_code_tbl             => l_etc_method_code_tbl_1,
11199          p_sp_fixed_date_tbl               => l_sp_fixed_date_tbl_1,
11200          p_res_class_code_tbl              => l_res_class_code_tbl,
11201          p_rate_based_flag_tbl             => l_rate_based_flag_tbl,
11202          p_rbs_elem_id_tbl                 => l_rbs_elem_id_tbl,
11203 		 p_cbs_elem_id_tbl                 => l_cbs_elem_id_tbl,-- cbs enhancement changes bug#16445106
11204          p_delete_flag_tbl                 => l_delete_flag_tbl_1,
11205          p_request_id                      => p_request_id,
11206          x_task_id_tbl                     => l_task_id_tbl,
11207          x_rlm_id_tbl                      => l_rlm_id_tbl,
11208          x_ra_id_tbl                       => l_prc_ra_id_tbl,
11209          x_txn_currency_code_tbl           => l_txn_currency_code_tbl,
11210          x_planning_start_date_tbl         => l_planning_start_date_tbl,
11211          x_planning_end_date_tbl           => l_planning_end_date_tbl,
11212          x_total_qty_tbl                   => l_total_qty_tbl,
11213          x_total_raw_cost_tbl              => l_total_raw_cost_tbl,
11214          x_total_burdened_cost_tbl         => l_total_burdened_cost_tbl,
11215          x_total_revenue_tbl               => l_total_revenue_tbl,
11216          x_raw_cost_rate_tbl               => l_raw_cost_rate_tbl,
11217          x_burdened_cost_rate_tbl          => l_burdened_cost_rate_tbl,
11218          x_bill_rate_tbl                   => l_bill_rate_tbl,
11219          x_line_start_date_tbl             => l_line_start_date_tbl,
11220          x_line_end_date_tbl               => l_line_end_date_tbl,
11221          x_proj_cost_rate_type_tbl         => l_proj_cost_rate_type_tbl,
11222          x_proj_cost_rate_date_type_tbl    => l_proj_cost_rate_date_type_tbl,
11223          x_proj_cost_rate_tbl              => l_proj_cost_rate_tbl,
11224          x_proj_cost_rate_date_tbl         => l_proj_cost_rate_date_tbl,
11225          x_proj_rev_rate_type_tbl          => l_proj_rev_rate_type_tbl,
11226          x_proj_rev_rate_date_type_tbl     => l_proj_rev_rate_date_type_tbl,
11227          x_proj_rev_rate_tbl               => l_proj_rev_rate_tbl,
11228          x_proj_rev_rate_date_tbl          => l_proj_rev_rate_date_tbl,
11229          x_pfunc_cost_rate_type_tbl        => l_pfunc_cost_rate_type_tbl,
11230          x_pfunc_cost_rate_date_typ_tbl    => l_pfunc_cost_rate_date_typ_tbl,
11231          x_pfunc_cost_rate_tbl             => l_pfunc_cost_rate_tbl,
11232          x_pfunc_cost_rate_date_tbl        => l_pfunc_cost_rate_date_tbl,
11233          x_pfunc_rev_rate_type_tbl         => l_pfunc_rev_rate_type_tbl,
11234          x_pfunc_rev_rate_date_type_tbl    => l_pfunc_rev_rate_date_type_tbl,
11235          x_pfunc_rev_rate_tbl              => l_pfunc_rev_rate_tbl,
11236          x_pfunc_rev_rate_date_tbl         => l_pfunc_rev_rate_date_tbl,
11237          x_delete_flag_tbl                 => l_delete_flag_tbl,
11238          x_spread_curve_id_tbl             => l_spread_curve_id_tbl,
11239          x_mfc_cost_type_id_tbl            => l_mfc_cost_type_id_tbl,
11240          x_etc_method_code_tbl             => l_etc_method_code_tbl,
11241          x_sp_fixed_date_tbl               => l_sp_fixed_date_tbl,
11242          x_res_class_code_tbl              => l_prc_res_class_code_tbl,
11243          x_rate_based_flag_tbl             => l_prc_rate_based_flag_tbl,
11244          x_rbs_elem_id_tbl                 => l_prc_rbs_elem_id_tbl,
11245 		 x_cbs_element_id_tbl              => l_prc_cbs_elem_id_tbl,-- cbs enhancement changes bug#16445106
11246          x_change_reason_code_tbl          => l_change_reason_code_tbl,
11247          x_description_tbl                 => l_description_tbl,
11248          x_return_status                   => x_return_status,
11249          x_msg_count                       => l_msg_count,
11250          x_msg_data                        => l_msg_data);
11251 
11252          IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11253               IF l_debug_mode = 'Y' THEN
11254                    pa_debug.g_err_stage := 'Call to prepare_pbl_input returned with error';
11255                    pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11256               END IF;
11257               RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11258          END IF;
11259 
11260   IF l_debug_mode = 'Y' THEN
11261       pa_debug.g_err_stage := 'Call to prepare_pbl_input done';
11262       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11263   END IF;
11264     --log1('7 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11265  --log1('----- STAGE 12-------');
11266   -- calling process_budget_lines to commit the validated data in DB
11267   IF l_debug_mode = 'Y' THEN
11268       pa_debug.g_err_stage := 'Calling process_budget_lines';
11269       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11270   END IF;
11271 
11272   --Till this point all the DMLs would have been executed on PA_FP_WEBADI_UPLOAD_INF. In case of any error
11273   --those changes need not be rolled back. process_budget_lines API will update the core B/F tables and hence
11274   --those updates should be reverted in case of any error. Hence establishing a savepoint now.
11275   SAVEPOINT SWITCHER;
11276   l_rollback_flag := 'Y';
11277       --log1('8 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11278 
11279   -- Bug 4431269: Populating the global variables to be used in calculate api
11280   -- for error reporting purpose
11281   G_FP_WA_CALC_CALLING_CONTEXT := 'WEBADI_CALCULATE';
11282 
11283   --insert_test_dump1;
11284 --DEBUG_NS('Before process_budget_lines');
11285 --DEBUG_NS('l_prc_cbs_elem_id_tbl.COUNT :: '||l_prc_cbs_elem_id_tbl.COUNT);
11286 
11287   process_budget_lines
11288       ( p_context                         => l_prep_pbl_calling_context,
11289         p_budget_version_id               => l_budget_version_id,
11290         p_version_info_rec                => l_version_info_rec,
11291         p_task_id_tbl                     => l_task_id_tbl,
11292         p_rlm_id_tbl                      => l_rlm_id_tbl,
11293 		p_cbs_element_id_tbl			  => l_prc_cbs_elem_id_tbl,-- cbs enhancement changes bug#16445106
11294         p_ra_id_tbl                       => l_prc_ra_id_tbl,
11295         p_spread_curve_id_tbl             => l_spread_curve_id_tbl,
11296         p_mfc_cost_type_id_tbl            => l_mfc_cost_type_id_tbl,
11297         p_etc_method_code_tbl             => l_etc_method_code_tbl,
11298         p_sp_fixed_date_tbl               => l_sp_fixed_date_tbl,
11299         p_res_class_code_tbl              => l_prc_res_class_code_tbl,
11300         p_rate_based_flag_tbl             => l_prc_rate_based_flag_tbl,
11301         p_rbs_elem_id_tbl                 => l_prc_rbs_elem_id_tbl,
11302         p_txn_currency_code_tbl           => l_txn_currency_code_tbl,
11303         p_planning_start_date_tbl         => l_planning_start_date_tbl,
11304         p_planning_end_date_tbl           => l_planning_end_date_tbl,
11305         p_total_qty_tbl                   => l_total_qty_tbl,
11306         p_total_raw_cost_tbl              => l_total_raw_cost_tbl,
11307         p_total_burdened_cost_tbl         => l_total_burdened_cost_tbl,
11308         p_total_revenue_tbl               => l_total_revenue_tbl,
11309         p_raw_cost_rate_tbl               => l_raw_cost_rate_tbl,
11310         p_burdened_cost_rate_tbl          => l_burdened_cost_rate_tbl,
11311         p_bill_rate_tbl                   => l_bill_rate_tbl,
11312         p_line_start_date_tbl             => l_line_start_date_tbl,
11313         p_line_end_date_tbl               => l_line_end_date_tbl,
11314         p_proj_cost_rate_type_tbl         => l_proj_cost_rate_type_tbl,
11315         p_proj_cost_rate_date_type_tbl    => l_proj_cost_rate_date_type_tbl,
11316         p_proj_cost_rate_tbl              => l_proj_cost_rate_tbl,
11317         p_proj_cost_rate_date_tbl         => l_proj_cost_rate_date_tbl,
11318         p_proj_rev_rate_type_tbl          => l_proj_rev_rate_type_tbl,
11319         p_proj_rev_rate_date_type_tbl     => l_proj_rev_rate_date_type_tbl,
11320         p_proj_rev_rate_tbl               => l_proj_rev_rate_tbl,
11321         p_proj_rev_rate_date_tbl          => l_proj_rev_rate_date_tbl,
11322         p_pfunc_cost_rate_type_tbl        => l_pfunc_cost_rate_type_tbl,
11323         p_pfunc_cost_rate_date_typ_tbl    => l_pfunc_cost_rate_date_typ_tbl,
11324         p_pfunc_cost_rate_tbl             => l_pfunc_cost_rate_tbl,
11325         p_pfunc_cost_rate_date_tbl        => l_pfunc_cost_rate_date_tbl,
11326         p_pfunc_rev_rate_type_tbl         => l_pfunc_rev_rate_type_tbl,
11327         p_pfunc_rev_rate_date_type_tbl    => l_pfunc_rev_rate_date_type_tbl,
11328         p_pfunc_rev_rate_tbl              => l_pfunc_rev_rate_tbl,
11329         p_pfunc_rev_rate_date_tbl         => l_pfunc_rev_rate_date_tbl,
11330         p_change_reason_code_tbl          => l_change_reason_code_tbl,
11331         p_description_tbl                 => l_description_tbl,
11332         p_delete_flag_tbl                 => l_delete_flag_tbl,
11333         x_return_status                   => x_return_status,
11334         x_msg_count                       => l_msg_count,
11335         x_msg_data                        => l_msg_data);
11336     --log1('9 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11337         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11338              IF l_debug_mode = 'Y' THEN
11339                   pa_debug.g_err_stage := 'Call to process_budget_lines returned with error';
11340                   pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11341              END IF;
11342              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11343         END IF;
11344   -- Bug 4431269: Clearing the global variables used in calculate api
11345   -- for error reporting purpose
11346   G_FP_WA_CALC_CALLING_CONTEXT := null;
11347 
11348   IF l_debug_mode = 'Y' THEN
11349       pa_debug.g_err_stage := 'Call to process_budget_lines done';
11350       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11351   END IF;
11352       --log1('10 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11353   -- if the submit flag is passed as Y, then calling api to submit the version
11354   IF p_submit_budget_flag   = 'Y' OR
11355      p_submit_forecast_flag = 'Y' THEN
11356            IF l_debug_mode = 'Y' THEN
11357                pa_debug.g_err_stage := 'Calling pa_fin_plan_pub.Submit_Current_Working';
11358                pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11359            END IF;
11360            pa_fin_plan_pub.Submit_Current_Working
11361                  (p_project_id              => l_version_info_rec.x_project_id,
11362                   p_budget_version_id       => l_budget_version_id,
11363                   p_record_version_number   => l_rec_version_number,
11364                   x_return_status           => x_return_status,
11365                   x_msg_count               => l_msg_count,
11366                   x_msg_data                => l_msg_data);
11367 
11368            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11369                 IF l_debug_mode = 'Y' THEN
11370                      pa_debug.g_err_stage := 'Call to pa_fin_plan_pub.Submit_Current_Working returned with error';
11371                      pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11372                 END IF;
11373                 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11374            END IF;
11375   END IF;
11376       --log1('11 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11377   --log1('----- STAGE 13-------');
11378   -- If upload is successful then delete all the records
11379   -- from interface table
11380   IF l_debug_mode = 'Y' THEN
11381       pa_debug.g_err_stage := 'deleting from upload temp table';
11382       pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
11383   END IF;
11384     --log1('12 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11385 
11386   pa_fp_webadi_pkg.DELETE_XFACE
11387           ( p_run_id          =>  p_run_id
11388            ,x_return_status   =>  x_return_status
11389            ,x_msg_count       =>  x_msg_count
11390            ,x_msg_data        =>  l_msg_data     --x_msg_data  Bug 2764950
11391           ) ;
11392     --log1('13 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11393   COMMIT; /* to commit the data in DB after successful processing */
11394     --log1('14 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11395   --log1('----- STAGE 14-------');
11396   IF l_debug_mode = 'Y' THEN
11397       pa_debug.g_err_stage := 'Leaving pa_fp_webadi_pkg.switcher';
11398       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11399       pa_debug.reset_curr_function;
11400   END IF;
11401 
11402   --log1('----- Leaving Switcher api ------- '||x_return_status);
11403     --log1('End '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11404 EXCEPTION
11405 
11406 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11407   IF l_debug_mode = 'Y' THEN
11408       pa_debug.g_err_stage := 'Invalid Arg Exception Raised in Switcher';
11409       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11410       pa_debug.g_err_stage := 'Checking for errors';
11411       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11412   END IF;
11413 
11414   -- Bug 4431269: Clearing the global variables used in calculate api
11415   -- for error reporting purpose
11416   G_FP_WA_CALC_CALLING_CONTEXT := null;
11417   IF l_rollback_flag='Y' THEN
11418       IF l_debug_mode = 'Y' THEN
11419           pa_debug.g_err_stage := 'Rolling back to switcher';
11420           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11421       END IF;
11422       ROLLBACK TO SWITCHER;
11423       IF l_debug_mode = 'Y' THEN
11424           pa_debug.g_err_stage := 'Roll back to switcher done';
11425           pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11426       END IF;
11427   END IF;
11428 
11429   -- checking if calculate has populated any errors in the global table
11430   IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
11431       -- calling an api to process the errors passed
11432       read_global_var_to_report_err
11433            (p_run_id          => p_run_id,
11434             x_return_status   => x_return_status,
11435             x_msg_count       => l_msg_count,
11436             x_msg_data        => l_msg_data);
11437   END IF;
11438 
11439   IF l_set_ppc_flag_on_err ='Y' THEN
11440       update_xl_data_for_new_req
11441        (p_request_id           => l_request_id,
11442         p_run_id               => p_run_id,
11443         p_plan_processing_code => 'XLUE',
11444         p_budget_version_id    => l_budget_version_id,
11445         p_null_out_cols        => 'N');
11446 
11447   END IF;
11448 
11449   COMMIT;
11450 
11451   l_msg_count := FND_MSG_PUB.count_msg;
11452 
11453   IF l_msg_count = 1 and x_msg_data IS NULL THEN
11454       PA_INTERFACE_UTILS_PUB.get_messages
11455           (p_encoded        => FND_API.G_TRUE
11456            ,p_msg_index      => 1
11457            ,p_msg_count      => l_msg_count
11458            ,p_msg_data       => l_msg_data
11459            ,p_data           => l_data
11460            ,p_msg_index_out  => l_msg_index_out);
11461       x_msg_data := l_data;
11462       x_msg_count := l_msg_count;
11463       x_success_msg:=l_data;
11464   ELSE
11465       x_msg_count := l_msg_count;
11466       x_success_msg :='Error In Upload';
11467   END IF;
11468 
11469   x_return_status := FND_API.G_RET_STS_ERROR;
11470 
11471   IF l_debug_mode = 'Y' THEN
11472       pa_debug.reset_curr_function;
11473   END IF;
11474   RETURN;
11475 
11476 WHEN OTHERS THEN
11477   -- Bug 4431269: Clearing the global variables used in calculate api
11478   -- for error reporting purpose
11479   G_FP_WA_CALC_CALLING_CONTEXT := null;
11480 
11481   IF l_rollback_flag='Y' THEN
11482       ROLLBACK TO SWITCHER;
11483   END IF;
11484   x_success_msg :='Error In Upload';
11485 
11486   -- checking if calculate has populated any errors in the global table
11487   IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
11488       -- calling an api to process the errors passed
11489       read_global_var_to_report_err
11490            (p_run_id          => p_run_id,
11491             x_return_status   => x_return_status,
11492             x_msg_count       => l_msg_count,
11493             x_msg_data        => l_msg_data);
11494   END IF;
11495 
11496   IF l_set_ppc_flag_on_err ='Y' THEN
11497       update_xl_data_for_new_req
11498        (p_request_id           => l_request_id,
11499         p_run_id               => p_run_id,
11500         p_plan_processing_code => 'XLUE',
11501         p_budget_version_id    => l_budget_version_id,
11502         p_null_out_cols        => 'N');
11503 
11504   END IF;
11505   COMMIT;
11506   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11507   x_msg_count     := 1;
11508   x_msg_data      := SQLERRM;
11509 
11510   FND_MSG_PUB.add_exc_msg( p_pkg_name      => 'pa_fp_webadi_pkg'
11511                           ,p_procedure_name  => 'switcher');
11512   IF l_debug_mode = 'Y' THEN
11513        pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
11514        pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
11515   END IF;
11516 
11517   IF l_debug_mode = 'Y' THEN
11518       pa_debug.reset_curr_function;
11519   END IF;
11520   RAISE;
11521 
11522 END switcher;
11523 
11524 --This API will be called when thru the concurrent request that will be used to upload MS excel data to
11525 --Oracle Applications.
11526 PROCEDURE process_MSExcel_data
11527 (errbuf                      OUT    NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
11528  retcode                     OUT    NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
11529  p_submit_ver_flag           IN     VARCHAR2,
11530  p_run_id                    IN     pa_fp_webadi_upload_inf.run_id%TYPE)
11531  IS
11532 --Start of variables used for debugging
11533 l_return_status                            VARCHAR2(1);
11534 l_msg_count                                NUMBER := 0;
11535 l_msg_data                                 VARCHAR2(2000);
11536 l_data                                     VARCHAR2(2000);
11537 l_msg_index_out                            NUMBER;
11538 l_debug_mode                               VARCHAR2(30);
11539 l_module_name                              VARCHAR2(100):='PAFPWAPB.process_MSExcel_data';
11540 
11541 --End of variables used for debugging
11542  l_budget_version_id         pa_budget_versions.budget_version_id%TYPE;
11543  l_plan_class_code           pa_fin_plan_types_b.plan_class_code%TYPE;
11544  l_request_id                pa_budget_versions.request_id%TYPE;
11545  l_submit_bdgt_flag          VARCHAR2(1);
11546  l_submit_fcst_flag          VARCHAR2(1);
11547  l_version_type              pa_budget_versions.version_type%TYPE;
11548  l_success_msg               VARCHAR2(1000);
11549 
11550 -- the following cursor would query the interface table for any validation failure
11551  -- error messages present in the interface table corresponding to a set of run_id
11552  -- for the upload session.
11553 
11554  CURSOR l_get_error_msg_to_report_csr (c_run_id        pa_fp_webadi_upload_inf.run_id%TYPE,
11555                                        c_plan_class    pa_fin_plan_types_b.plan_class_code%TYPE,
11556                                        c_version_type  pa_budget_versions.version_type%TYPE,
11557                                        c_request_id    pa_budget_versions.request_id%TYPE)
11558  IS
11559  -- 4497321.Perf Fix:Modified SELECT query inorder to improve the performance.
11560  SELECT  inf.task_number || '/' || inf.task_name task_info,
11561          inf.resource_alias resource_info,
11562          inf.txn_currency_code currency,
11563          plu1.meaning amount_type,
11564          plu2.meaning error
11565  FROM    pa_fp_webadi_upload_inf inf,
11566          pa_lookups plu1,
11567          pa_lookups plu2
11568  WHERE   inf.run_id = c_run_id
11569  AND     Nvl(inf.val_error_flag, 'N') = 'Y'
11570  AND     inf.val_error_code IS NOT NULL
11571  AND     plu1.lookup_type = DECODE (c_plan_class, 'BUDGET',
11572                                                    DECODE(c_version_type,
11573                                                          'COST', 'PA_FP_XL_COST_BDGT_AMT_TYPES',
11574                                                          'REVENUE', 'PA_FP_XL_REV_BDGT_AMT_TYPES',
11575                                                          'PA_FP_XL_ALL_BDGT_AMT_TYPES'),
11576                                                  'FORECAST', DECODE(c_version_type,
11577                                                  'COST', 'PA_FP_XL_COST_FCST_AMT_TYPES',
11578                                                  'REVENUE', 'PA_FP_XL_REV_FCST_AMT_TYPES',
11579                                                  'PA_FP_XL_ALL_FCST_AMT_TYPES'))
11580  AND     (inf.amount_type_code IS NULL OR plu1.lookup_code = Nvl(inf.amount_type_code, '-99'))
11581  AND     plu2.lookup_type = 'PA_FP_WEBADI_ERR_1'
11582  AND     inf.val_error_code = plu2.lookup_code
11583  AND     Nvl(c_request_id, -99) = Nvl(inf.request_id, -99);
11584 
11585  l_error_info_rec l_get_error_msg_to_report_csr%ROWTYPE;
11586 
11587  BEGIN
11588     -- SAVEPOINT process_MSExcel_data;
11589     retcode:='0';
11590     fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
11591     l_debug_mode := NVL(l_debug_mode, 'Y');
11592     --log1('----- STAGE CR1-------');
11593     -- Set curr function
11594     IF l_debug_mode='Y' THEN
11595         pa_debug.set_curr_function(
11596                     p_function   =>'PAFPWAPB.process_MSExcel_data'
11597                    ,p_debug_mode => l_debug_mode );
11598     END IF;
11599 
11600     l_request_id:=fnd_global.conc_request_id;
11601     --log1('----- STAGE CR2-------');
11602     --log1('----- p_run_id------' || p_run_id);
11603     --log1('----- p_submit_ver_flag------' || p_submit_ver_flag);
11604     --Get the budget version id from the interface table to find out whether the budget version belongs to a
11605     --BUDGET plan type or FORECAST plan type
11606 
11607     -- 4497323.Perf Fix:The SELECT query is splitted into two queries in order to improve performance.
11608     SELECT budget_version_id
11609     INTO   l_budget_version_id
11610     FROM   pa_fp_webadi_upload_inf inf
11611     WHERE  inf.run_id = p_run_id
11612     AND    Nvl(l_request_id,-99) = Nvl(request_id,-99)
11613     AND    rownum=1;
11614 
11615     SELECT fin.plan_class_code,
11616            pbv.version_type
11617     INTO   l_plan_class_code,
11618            l_version_type
11619     FROM   pa_budget_versions pbv,
11620            pa_fin_plan_types_b fin
11621     WHERE  pbv.budget_version_id = l_budget_version_id
11622     AND    fin.fin_plan_type_id = pbv.fin_plan_type_id;
11623 
11624         --log1('----- STAGE CR3-------');
11625     IF l_debug_mode='Y' THEN
11626         pa_debug.g_err_stage:='l_request_id '||l_request_id;
11627         pa_debug.write( l_module_name,pa_debug.g_err_stage,3);
11628 
11629         pa_debug.g_err_stage:='Callng update_xl_data_for_new_req';
11630         pa_debug.write( l_module_name,pa_debug.g_err_stage,3);
11631 
11632     END IF;
11633     --log1('----- STAGE CR4-------');
11634     update_xl_data_for_new_req
11635     (p_request_id           => l_request_id,
11636      p_run_id               => p_run_id,
11637      p_plan_processing_code => 'XLUP',
11638      p_budget_version_id    => l_budget_version_id,
11639      p_null_out_cols        => 'Y');
11640     --log1('----- STAGE CR5-------');
11641     COMMIT;--This is done so that the users can find that the concurrent request is in progress from the other
11642            --interfaces.
11643     --log1('----- STAGE CR6-------');
11644     l_submit_bdgt_flag:='N';
11645     l_submit_fcst_flag:='N';
11646     IF l_plan_class_code='BUDGET' THEN
11647 
11648         l_submit_bdgt_flag:=p_submit_ver_flag;
11649     ELSE
11650         l_submit_fcst_flag:=p_submit_ver_flag;
11651     END IF;
11652     --log1('----- STAGE CR7-------');
11653     pa_fp_webadi_pkg.switcher
11654     (p_calling_mode         => 'ONLINE',
11655      p_run_id               => p_run_id,
11656      p_submit_budget_flag   => l_submit_bdgt_flag,
11657      p_submit_forecast_flag => l_submit_fcst_flag,
11658      p_request_id           => l_request_id,
11659      x_success_msg          => l_success_msg,
11660      x_return_status        => l_return_status,
11661      x_msg_count            => l_msg_count,
11662      x_msg_data             => l_msg_data);
11663     --log1('----- STAGE CR8-------');
11664     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11665         --log1('----- STAGE CR9-------');
11666         IF l_debug_mode = 'Y' THEN
11667             pa_debug.g_err_stage:='pa_fp_webadi_pkg.switcher returned error';
11668             pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11669         END IF;
11670         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11671     END IF;
11672 
11673     -- upon successful completion of the concurrent processing,
11674     -- stamp success code in pa_budget_versions and retain the request_id
11675     UPDATE  pa_budget_versions
11676     SET     plan_processing_code = 'XLUS',
11677             record_version_number = (record_version_number + 1)
11678     WHERE   budget_version_id = l_budget_version_id;
11679 
11680     COMMIT; -- is required to query the interface table from conc prog.
11681     --log1('----- STAGE 10-------');
11682     IF l_debug_mode = 'Y' THEN
11683         pa_debug.reset_curr_function;
11684     END IF;
11685 
11686 EXCEPTION
11687 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11688     -- ROLLBACK TO process_MSExcel_data;
11689     -- bug 4477397: doing a general rollback instead to savepoint
11690     ROLLBACK;
11691     l_msg_count := FND_MSG_PUB.count_msg;
11692     IF l_msg_count = 1 THEN
11693        PA_INTERFACE_UTILS_PUB.get_messages
11694              (p_encoded        => FND_API.G_TRUE
11695               ,p_msg_index      => 1
11696               ,p_msg_count      => l_msg_count
11697               ,p_msg_data       => l_msg_data
11698               ,p_data           => l_data
11699               ,p_msg_index_out  => l_msg_index_out);
11700 
11701        errbuf  := l_data;
11702 
11703     END IF;
11704     retcode := '2';  --Changed this to '2' for bug #4504482
11705     --log1('----- STAGE CR10-------');
11706     -- preparing an output error log to display all the validation failures, if any,
11707     -- corresponding to a particular record in the interface table
11708     IF l_debug_mode = 'Y' THEN
11709            --Before calling pa_debug.write_file we shd call pa_debug.set_process if we want write_file to write to the log file.
11710            pa_debug.set_process( x_process    => 'PLSQL'
11711                                 ,x_write_file => 'LOG'
11712                                 ,x_debug_mode => l_debug_mode
11713                                );
11714            pa_debug.g_err_stage := '- Task Number/Task Name, Resource, Currency, Amount Type, Error - ';
11715            pa_debug.write_file('LOG', pa_debug.g_err_stage);
11716            pa_debug.g_err_stage := '------------------------------------------------------------------';
11717            pa_debug.write_file('LOG', pa_debug.g_err_stage);
11718 
11719            OPEN l_get_error_msg_to_report_csr(p_run_id, l_plan_class_code, l_version_type, l_request_id);
11720            LOOP
11721                  FETCH l_get_error_msg_to_report_csr
11722                  INTO  l_error_info_rec;
11723 
11724                  --EXIT WHEN l_error_info_rec.task_info IS NULL;   --Bug 8839857
11725                  EXIT when l_get_error_msg_to_report_csr%NOTFOUND; --Bug 8839857
11726 
11727                  pa_debug.g_err_stage := l_error_info_rec.task_info || ', ' || l_error_info_rec.resource_info || ', ' ||
11728                                          l_error_info_rec.currency || ', ' || l_error_info_rec.amount_type || ', ' ||
11729                                          l_error_info_rec.error;
11730                  pa_debug.write_file('LOG', pa_debug.g_err_stage);
11731            END LOOP;
11732            CLOSE l_get_error_msg_to_report_csr;
11733 
11734            --Bug 4504482: Added code to read the msg stack and populate the concurrent
11735            --program log in addition to the interface table.
11736            pa_debug.g_err_stage := '-----------------Additional Errors--------------------------------';
11737            pa_debug.write_file('LOG', pa_debug.g_err_stage);
11738            FOR msg_count IN 1 ..  l_msg_count
11739            LOOP
11740                PA_UTILS.Get_Encoded_Msg(p_index    => msg_count,
11741                                         p_msg_out  => l_data);
11742            pa_debug.g_err_stage := l_data;
11743            pa_debug.write_file('LOG', pa_debug.g_err_stage);
11744            END LOOP;
11745 
11746     END IF;
11747 
11748     IF l_debug_mode = 'Y' THEN
11749        pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
11750        pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11751         -- reset curr function
11752         pa_debug.reset_curr_function();
11753     END IF;
11754     --log1('----- STAGE CR11-------');
11755     update_xl_data_for_new_req
11756     (p_request_id           => l_request_id,
11757      p_run_id               => p_run_id,
11758      p_plan_processing_code => 'XLUE',
11759      p_budget_version_id    => l_budget_version_id,
11760      p_null_out_cols        => 'N');
11761     --log1('----- STAGE CR12-------');
11762     COMMIT;
11763     --log1('----- STAGE CR13-------');
11764     RETURN;
11765 WHEN OTHERS THEN
11766     -- ROLLBACK TO process_MSExcel_data;
11767     -- bug 4477397: doing a general rollback instead to savepoint
11768     ROLLBACK;
11769     errbuf      := SQLERRM;
11770 
11771     FND_MSG_PUB.add_exc_msg( p_pkg_name       => 'pa_fp_webadi_pkg'
11772                            ,p_procedure_name  => 'process_MSExcel_data');
11773 
11774     IF l_debug_mode = 'Y' THEN
11775        pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
11776        pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11777         -- reset curr function
11778         pa_debug.Reset_Curr_Function();
11779     END IF;
11780     retcode := '2';
11781 
11782     update_xl_data_for_new_req
11783     (p_request_id           => l_request_id,
11784      p_run_id               => p_run_id,
11785      p_plan_processing_code => 'XLUE',
11786      p_budget_version_id    => l_budget_version_id,
11787      p_null_out_cols        => 'N');
11788 
11789     COMMIT;
11790     RAISE;
11791 END process_MSExcel_data;
11792 
11793 
11794 --Bug 4584865
11795 /*This api is a private api which is called to calculate the Group Period information
11796   of the budget version based on the period mask of the budget version.The calculated
11797   Group Periods are stored in the OUT parameter x_periods_tbl.*/
11798 
11799 PROCEDURE GET_PERIOD_INFORMATION(p_period_mask_id          IN pa_proj_fp_options.cost_period_mask_id%TYPE,
11800                                  p_time_phased_code        IN pa_proj_fp_options.cost_time_phased_code%TYPE,
11801                                  p_org_id                  IN pa_projects_all.org_id%TYPE,
11802                                  p_current_planning_period IN pa_proj_fp_options.cost_current_planning_period%TYPE,
11803                                  x_periods_tbl             OUT NOCOPY periods_tbl,
11804                                  x_return_status           OUT NOCOPY VARCHAR2,
11805                                  x_msg_count               OUT NOCOPY NUMBER,
11806                                  x_msg_data                OUT NOCOPY NUMBER)
11807 IS
11808       --This Cursor is used to get Period Mask informations of the Period Mask associated with the budget version.
11809       CURSOR period_mask_cur(c_period_mask_id   pa_period_mask_details.period_mask_id%TYPE)
11810       IS
11811       SELECT pmd.period_mask_id,
11812              pmd.num_of_periods,
11813              pmd.anchor_period_flag,
11814              pmd.from_anchor_start,
11815              pmd.from_anchor_end,
11816              pmd.from_anchor_position
11817       FROM   pa_period_mask_details pmd
11818       WHERE  pmd.period_mask_id = c_period_mask_id
11819       AND    pmd.from_anchor_position not in(-99999,99999)
11820       ORDER BY pmd.from_anchor_position;
11821 --PL/SQL table created based on Cursor period_mask_cur.
11822 TYPE period_mask_tbl IS TABLE OF period_mask_cur%ROWTYPE;
11823 
11824       CURSOR pa_impl_cur(c_org_id   pa_implementations_all.org_id%TYPE)
11825       IS
11826       SELECT org_id,
11827              period_set_name,
11828              pa_period_type,
11829              set_of_books_id
11830       FROM   pa_implementations_all
11831       WHERE  org_id = c_org_id;
11832 
11833       --This Cursor is used to get period information based on the Time Phasing of the budget version.
11834       CURSOR period_grouping_cur(c_period_set_name   gl_periods.period_set_name%TYPE,
11835                                  c_set_of_books_id   gl_sets_of_books.set_of_books_id%TYPE,
11836                                  c_org_id            pa_implementations_all.org_id%TYPE,
11837                                  c_pa_period_type    pa_implementations_all.pa_period_type%TYPE,
11838                                  c_time_phased_code  pa_proj_fp_options.cost_time_phased_code%TYPE)
11839       IS
11840       SELECT ROW_NUMBER() OVER( PARTITION BY gl.period_set_name,gl.period_type ORDER BY gl.start_date ) row_num,
11841              gl.start_date start_date,
11842              gl.end_Date end_date,
11843              gl.period_name period_name,
11844              gl.period_type period_type,
11845              gl.period_set_name period_set_name,
11846              gsb.accounted_period_type accounted_period_type,
11847              c_org_id
11848       FROM   gl_periods gl,
11849              gl_sets_of_books gsb
11850       WHERE  gl.period_set_name=decode(c_time_phased_code,'P',c_period_set_name,'G',gsb.period_set_name)
11851       AND    gsb.set_of_books_id=c_set_of_books_id
11852       AND    gl.ADJUSTMENT_PERIOD_FLAG ='N'
11853       AND    gl.period_type = decode(c_time_phased_code,'P',c_pa_period_type,
11854                                                   'G',gsb.accounted_period_type);
11855 --PL/SQL table created based on Cursor period_grouping_cur.
11856 TYPE period_grouping_tbl IS TABLE OF period_grouping_cur%ROWTYPE
11857 INDEX BY PLS_INTEGER;
11858 
11859     l_debug_mode       VARCHAR2(1);
11860     l_return_status    VARCHAR2(1);
11861     l_data             VARCHAR2(2000);
11862     l_msg_count        NUMBER := 0;
11863     l_msg_data         VARCHAR2(2000);
11864     l_msg_index_out    NUMBER;
11865     l_module_name      VARCHAR2(100) := 'pa_fp_webadi_pkg.get_period_information';
11866     l_period_mask_tbl   period_mask_tbl;
11867     l_pa_impl_rec   pa_impl_cur%ROWTYPE;
11868     l_period_grouping_tbl   period_grouping_tbl;
11869     l_periods_rec   periods_rec;
11870     glcp_rownum   NUMBER;
11871     glsd_rownum   NUMBER;
11872     gled_rownum   NUMBER;
11873     period_name   VARCHAR2(50); --gl_periods.period_name%TYPE;
11874     start_date   gl_periods.start_date%TYPE;
11875     end_date   gl_periods.end_date%TYPE;
11876     x   NUMBER := 1;
11877 BEGIN
11878     x_msg_count := 0;
11879     x_return_status := FND_API.G_RET_STS_SUCCESS;
11880     l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'Y');
11881 
11882     IF l_debug_mode = 'Y' THEN
11883         pa_debug.set_curr_function(p_function   => 'GET_PERIOD_INFORMATION',
11884                                    p_debug_mode => l_debug_mode);
11885         pa_debug.g_err_stage := ':In pa_fp_webadi_pkg.GET_PERIOD_INFORMATION';
11886         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11887     END IF;
11888     --Validation is done for the input parameters.
11889     IF l_debug_mode = 'Y' THEN
11890        pa_debug.g_err_stage := 'Validating Input parameters';
11891        pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11892     END IF;
11893 
11894     IF p_period_mask_id IS NULL THEN
11895        IF l_debug_mode = 'Y' THEN
11896           pa_debug.g_err_stage := 'p_period_mask_id is passed as null';
11897           pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11898        END IF;
11899        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11900                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
11901                             p_token1         => 'PROCEDURENAME',
11902                             p_value1         => l_module_name);
11903        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11904     END IF;
11905 
11906     IF p_time_phased_code IS NULL THEN
11907        IF l_debug_mode = 'Y' THEN
11908           pa_debug.g_err_stage := 'p_time_phased_code is passed as null';
11909           pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11910        END IF;
11911        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11912                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
11913                             p_token1         => 'PROCEDURENAME',
11914                             p_value1         => l_module_name);
11915        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11916     END IF;
11917 
11918     IF p_org_id IS NULL THEN
11919        IF l_debug_mode = 'Y' THEN
11920           pa_debug.g_err_stage := 'p_org_id is passed as null';
11921           pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11922        END IF;
11923        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11924                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
11925                             p_token1         => 'PROCEDURENAME',
11926                             p_value1         => l_module_name);
11927        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11928     END IF;
11929 
11930     IF p_current_planning_period IS NULL THEN
11931        IF l_debug_mode = 'Y' THEN
11932           pa_debug.g_err_stage := 'p_current_planning_period is passed as null';
11933           pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11934        END IF;
11935        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11936                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
11937                             p_token1         => 'PROCEDURENAME',
11938                             p_value1         => l_module_name);
11939        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11940     END IF;
11941     --Initializing the out parameter which is pl/sql table.
11942     x_periods_tbl := periods_tbl();
11943 
11944     --Getting the Period Mask details of the period mask associated with the budget version.
11945     OPEN period_mask_cur(p_period_mask_id);
11946     FETCH period_mask_cur BULK COLLECT INTO l_period_mask_tbl;
11947     CLOSE period_mask_cur;
11948     IF l_period_mask_tbl.count = 0 THEN
11949        IF l_debug_mode = 'Y' THEN
11950           pa_debug.g_err_stage := 'Period Mask Details not found for the budget version';
11951           pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11952        END IF;
11953        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11954                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
11955                             p_token1         => 'PROCEDURENAME',
11956                             p_value1         => l_module_name);
11957        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11958     END IF;
11959 
11960     --Information are got from pa_implentations_all table for the project org_id and stored in a pl/sql record.
11961     OPEN pa_impl_cur(p_org_id);
11962     FETCH pa_impl_cur INTO l_pa_impl_rec;
11963     CLOSE pa_impl_cur;
11964 
11965     --Period Informations are got from gl_periods table and stored in a pl/sql table.
11966     FOR rec in period_grouping_cur(l_pa_impl_rec.period_set_name,
11967                                    l_pa_impl_rec.set_of_books_id,
11968                                    l_pa_impl_rec.org_id,
11969                                    l_pa_impl_rec.pa_period_type,
11970                                    p_time_phased_code)
11971     LOOP
11972         l_period_grouping_tbl(rec.row_num) := rec;
11973     END LOOP;
11974 
11975     --Getting the row number of the Current Planning period from the pl/sql table l_period_grouping_tbl.
11976     IF l_period_grouping_tbl.count >0 THEN
11977        FOR n IN l_period_grouping_tbl.first..l_period_grouping_tbl.last
11978        LOOP
11979           IF l_period_grouping_tbl(n).period_name = p_current_planning_period THEN
11980              glcp_rownum := l_period_grouping_tbl(n).row_num;
11981              EXIT;
11982           END IF;
11983        END LOOP;
11984     ELSE
11985        IF l_debug_mode = 'Y' THEN
11986           pa_debug.g_err_stage := 'Period information not found for the budget version';
11987           pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11988        END IF;
11989        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11990                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
11991                             p_token1         => 'PROCEDURENAME',
11992                             p_value1         => l_module_name);
11993        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11994     END IF;
11995 
11996     --The Group Period informations are got and stored in a pl/sql table based on the Period Mask.
11997     FOR i IN l_period_mask_tbl.first..l_period_mask_tbl.last
11998     LOOP
11999        glsd_rownum := l_period_mask_tbl(i).from_anchor_start+glcp_rownum;
12000        gled_rownum := l_period_mask_tbl(i).from_anchor_end+glcp_rownum;
12001        IF glsd_rownum >= l_period_grouping_tbl.first AND gled_rownum <= l_period_grouping_tbl.last THEN
12002          IF glsd_rownum = gled_rownum THEN
12003              period_name := l_period_grouping_tbl(glsd_rownum).period_name;
12004          ELSE
12005              period_name := l_period_grouping_tbl(glsd_rownum).period_name||' To '||l_period_grouping_tbl(gled_rownum).period_name;
12006          END IF;
12007           start_date := l_period_grouping_tbl(glsd_rownum).start_date;
12008           end_date := l_period_grouping_tbl(gled_rownum).end_date;
12009           l_periods_rec.sequence_number := x;
12010           l_periods_rec.period_name := period_name;
12011           l_periods_rec.start_date := start_date;
12012           l_periods_rec.end_date := end_date;
12013           x_periods_tbl.extend();
12014           x_periods_tbl(x) := l_periods_rec;
12015           x := x+1;
12016       ELSE
12017           NULL;
12018       END IF;
12019     END LOOP;
12020 
12021 EXCEPTION
12022     WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12023          l_msg_count := FND_MSG_PUB.count_msg;
12024          IF l_msg_count = 1 AND x_msg_data IS NULL THEN
12025              PA_INTERFACE_UTILS_PUB.get_messages
12026                    (p_encoded        => FND_API.G_TRUE
12027                    ,p_msg_index      => 1
12028                    ,p_msg_count      => l_msg_count
12029                    ,p_msg_data       => l_msg_data
12030                    ,p_data           => l_data
12031                    ,p_msg_index_out  => l_msg_index_out);
12032                    x_msg_data := l_data;
12033                    x_msg_count := l_msg_count;
12034          ELSE
12035             x_msg_count := l_msg_count;
12036          END IF;
12037             x_return_status := FND_API.G_RET_STS_ERROR;
12038          IF l_debug_mode = 'Y' THEN
12039              pa_debug.reset_curr_function;
12040          END IF;
12041     RETURN;
12042 
12043     WHEN OTHERS THEN
12044          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12045          x_msg_count     := 1;
12046          x_msg_data      := SQLERRM;
12047          FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'pa_fp_webadi_pkg'
12048                                  ,p_procedure_name  => 'get_period_information');
12049          IF l_debug_mode = 'Y' THEN
12050              pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
12051              pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12052              pa_debug.reset_curr_function;
12053          END IF;
12054     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12055 END GET_PERIOD_INFORMATION;
12056 
12057 --Bug 4584865.
12058 --This API is called to insert records into pa_fp_webadi_xface_tmp
12059 --during downloading budget line details into excel spreadsheet.
12060 
12061 PROCEDURE insert_periodic_tmp_table
12062           (p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE
12063           ,x_return_status     OUT NOCOPY VARCHAR2
12064           ,x_msg_count         OUT NOCOPY NUMBER
12065           ,x_msg_data          OUT NOCOPY VARCHAR2 )
12066 IS
12067       /* Bug 5144013: Changes are made in the cursor to make use of the new entity pa_resource_asgn_curr
12068          which is introduced in MRUP3 of 11i. The changes are done as part of merging the MRUP3 changes
12069          done in 11i into R12.
12070       */
12071       --This Cursor is used to get Resource Assignment information associated with the budget version.
12072       CURSOR res_ass_cur(c_budget_version_id   pa_budget_versions.budget_version_id%TYPE,
12073                          c_project_id   pa_projects_all.project_id%TYPE,
12074                          c_parent_structure_version_id   pa_proj_element_versions.parent_structure_version_id%TYPE,
12075                          c_proj_fp_options_id   pa_proj_fp_options.proj_fp_options_id%TYPE)
12076       IS
12077       SELECT pra.resource_assignment_id resource_assignment_id,
12078              nvl(pe.name,ppa.long_name) task_name,
12079              nvl(pe.element_number,ppa.segment1) task_number,
12080              nvl(pev.display_sequence,-1) task_display_sequence,
12081              prlm.alias resource_name,
12082              pra.resource_list_member_id,
12083              uom.meaning unit_of_measure,
12084              pra.spread_curve_id spread_curve_id,
12085              psc.name spread_curve,
12086              pra.planning_start_date,
12087              pra.planning_end_date,
12088              pra.mfc_cost_type_id mfc_cost_type_id,
12089              cct.cost_type mfc_cost_type,
12090              pra.etc_method_code etc_method_code,
12091              etc.meaning etc_method,
12092              pev.proj_element_id project_element_id,
12093              decode(pra.transaction_source_code,NULL,NULL,
12094                     (SELECT meaning
12095                      FROM PA_LOOKUPS
12096                      WHERE LOOKUP_TYPE='PA_FP_FCST_GEN_SRC_ALL'
12097                      AND LOOKUP_CODE= nvl(pra.transaction_source_code, (
12098                                                                         SELECT lookup_code
12099                                                                         FROM pa_lookups
12100                                                                         WHERE lookup_type='PA_FP_FCST_GEN_SRC_ALL'
12101                                                                         AND rownum=1)))) etc_source,
12102              pftc.txn_currency_code txn_currency_code,
12103              pftc.project_cost_exchange_rate project_cost_exchange_rate,
12104              pftc.project_rev_exchange_rate project_rev_exchange_rate,
12105              pftc.projfunc_cost_exchange_rate projfunc_cost_exchange_rate,
12106              pftc.projfunc_rev_exchange_rate projfunc_rev_exchange_rate,
12107 			(select COST_CODE from pa_rbs_elements where RBS_ELEMENT_ID = pra.cbs_element_id) cost_code,				-- cbs enhancement changes bug#16445106
12108 			(select COST_CODE_NAME from pa_rbs_elements where RBS_ELEMENT_ID = pra.cbs_element_id) cost_code_name  -- cbs enhancement changes bug#16445106
12109       FROM   pa_resource_assignments pra,
12110              pa_resource_asgn_curr prac,
12111              pa_fp_txn_currencies pftc,
12112              pa_proj_elements pe,
12113              pa_proj_element_versions pev,
12114              pa_resource_list_members prlm,
12115              pa_lookups uom,
12116              pa_spread_curves_tl psc,
12117              cst_cost_types cct,
12118              pa_lookups etc,
12119              pa_projects_all ppa
12120       WHERE pra.budget_version_id = c_budget_version_id
12121       AND prac.budget_version_id = pra.budget_version_id
12122       AND prac.resource_assignment_id = pra.resource_assignment_id
12123       AND pftc.fin_plan_version_id = prac.budget_version_id
12124       AND pftc.txn_currency_code = prac.txn_currency_code
12125       AND pftc.proj_fp_options_id = c_proj_fp_options_id
12126       AND pra.resource_list_member_id = prlm.resource_list_member_id
12127       AND decode(pra.task_id,0,pev.proj_element_id,pra.task_id)=pev.proj_element_id
12128       AND decode(pra.task_id,0,pev.parent_structure_version_id,pev.element_version_id)=pev.element_version_id
12129       AND pev.proj_element_id = pe.proj_element_id(+)
12130       AND pe.object_type(+)='PA_TASKS'
12131       AND pev.parent_structure_version_id = c_parent_structure_version_id
12132       AND nvl(pra.spread_curve_id,1) = psc.spread_curve_id
12133       AND etc.lookup_type = 'PA_FP_ETC_METHOD'
12134       AND etc.lookup_code(+) = pra.etc_method_code
12135       AND cct.cost_type_id(+) = pra.mfc_cost_type_id
12136       AND uom.lookup_type = 'UNIT'
12137       AND uom.LOOKUP_CODE = nvl(prlm.UNIT_OF_MEASURE,'HOURS')
12138       AND psc.language = userenv('LANG')
12139       AND ppa.project_id = c_project_id
12140       ORDER BY task_display_sequence;
12141 --PL/SQL table created based on Cursor res_ass_cur.
12142 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.
12143 -- INDEX BY PLS_INTEGER;
12144 
12145 --This Record is used to store the Plan Settings level information of the budget version.
12146 Type proj_fp_options_rec  is record(fin_plan_preference_code   pa_proj_fp_options.fin_plan_preference_code%TYPE,
12147                                     projfunc_cost_rate_type   pa_proj_fp_options.projfunc_cost_rate_type%TYPE,
12148                                     projfunc_cost_rate_date_type   pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE,
12149                                     projfunc_cost_rate_date   pa_proj_fp_options.projfunc_cost_rate_date%TYPE,
12150                                     project_cost_rate_type   pa_proj_fp_options.project_cost_rate_type%TYPE,
12151                                     project_cost_rate_date_type   pa_proj_fp_options.project_cost_rate_date_type%TYPE,
12152                                     project_cost_rate_date   pa_proj_fp_options.project_cost_rate_date%TYPE,
12153                                     projfunc_rev_rate_type   pa_proj_fp_options.projfunc_rev_rate_type%TYPE,
12154                                     projfunc_rev_rate_date_type   pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE,
12155                                     projfunc_rev_rate_date   pa_proj_fp_options.projfunc_rev_rate_date%TYPE,
12156                                     project_rev_rate_type   pa_proj_fp_options.project_rev_rate_type%TYPE,
12157                                     project_rev_rate_date_type   pa_proj_fp_options.project_rev_rate_date_type%TYPE,
12158                                     project_rev_rate_date   pa_proj_fp_options.project_rev_rate_date%TYPE);
12159 l_proj_fp_options_rec   proj_fp_options_rec;
12160 
12161        --This Cursor is used to get the Amount Type and Conversion Attribute information of the budget version.
12162        CURSOR amt_type_cur(c_project_id   pa_fp_proj_xl_amt_types.project_id%TYPE,
12163                            c_fin_plan_type_id   pa_fp_proj_xl_amt_types.fin_plan_type_id%TYPE,
12164                            c_option_type   pa_fp_proj_xl_amt_types.option_type%TYPE,
12165                            c_plan_class_code   pa_fin_plan_types_b.plan_class_code%TYPE)
12166        IS
12167        SELECT  amt.amount_type_code,
12168                amt_lu.meaning amount_type_name,
12169                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,
12170                (SELECT pctv1.USER_CONVERSION_TYPE
12171                 FROM   GL_DAILY_CONVERSION_TYPES pctv1
12172                 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,
12173 
12174                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),
12175                decode(l_proj_fp_options_rec.projfunc_cost_rate_type,'User',null,l_proj_fp_options_rec.projfunc_cost_rate_date_type)),null,null,
12176                (SELECT plk_d1.meaning
12177                 FROM   pa_lookups plk_d1
12178                 WHERE  plk_d1.lookup_type='PA_FP_RATE_DATE_TYPE'
12179                 AND    plk_d1.lookup_code=NVL(decode(amt.amount_type_code,'TOTAL_REV',
12180                decode(l_proj_fp_options_rec.projfunc_rev_rate_type,'User',null,l_proj_fp_options_rec.projfunc_rev_rate_date_type),
12181                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,
12182 
12183                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)),
12184                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,
12185 
12186                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,
12187                (SELECT pctv2.USER_CONVERSION_TYPE
12188                 FROM   GL_DAILY_CONVERSION_TYPES pctv2
12189                 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,
12190 
12191                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),
12192                decode(l_proj_fp_options_rec.project_cost_rate_type,'User',null,l_proj_fp_options_rec.project_cost_rate_date_type)),null,null,
12193                (SELECT plk_d2.meaning
12194                 FROM   pa_lookups plk_d2
12195                 WHERE  plk_d2.lookup_type='PA_FP_RATE_DATE_TYPE'
12196                 AND    plk_d2.lookup_code=NVL(decode(amt.amount_type_code,'TOTAL_REV',
12197                decode(l_proj_fp_options_rec.project_rev_rate_type,'User',null,l_proj_fp_options_rec.project_rev_rate_date_type),
12198                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,
12199 
12200                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)),
12201                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
12202       FROM     pa_fp_proj_xl_amt_types amt,
12203                pa_lookups amt_lu
12204       WHERE    amt.project_id = c_project_id
12205       AND      amt.fin_plan_type_id = c_fin_plan_type_id
12206       AND      amt.option_type = c_option_type
12207       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'),
12208                                                                             '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'))
12209       AND      amt_lu.lookup_code = amt.amount_type_code
12210       ORDER BY amount_type_name;
12211 --PL/SQL table created based on amt_type_cur.
12212 TYPE amt_type_tbl IS TABLE OF amt_type_cur%ROWTYPE;
12213 
12214 --Commented out the below for bug 5330532
12215 /*
12216 --This Record is used to store the Transaction Currencies Associated with the budget version.
12217 TYPE txn_curr_rec IS RECORD(txn_currency_code            pa_fp_txn_currencies.txn_currency_code%TYPE,
12218                             project_cost_exchange_rate   pa_fp_txn_currencies.project_cost_exchange_rate%TYPE,
12219                             project_rev_exchange_rate    pa_fp_txn_currencies.project_rev_exchange_rate%TYPE,
12220                             projfunc_cost_exchange_rate  pa_fp_txn_currencies.projfunc_cost_exchange_rate%TYPE,
12221                             projfunc_rev_exchange_rate   pa_fp_txn_currencies.projfunc_rev_exchange_rate%TYPE);
12222 --PL/SQL table created based on txn_curr_rec.
12223 TYPE txn_curr_tbl IS TABLE OF txn_curr_rec;
12224 */
12225 
12226 /* Bug 5144013: Commented out the below cursors txn_curr_cur and txn_curr_rate_cur
12227    as the transaction currencies and the exchange rates of those currencies can be got
12228    from the cursor res_ass_cur. This is done as part of merging the MRUP3 changes done
12229    in 11i into R12.
12230 */
12231 /* Start of code changes for bug 5330532*/
12232 --Cursor created for fetching transaction currencies.
12233 /* --Bug 5144013.
12234 CURSOR txn_curr_cur(c_budget_version_id pa_budget_lines.budget_version_id%TYPE,
12235                     c_ra_id             pa_budget_lines.resource_assignment_id%TYPE)
12236 IS
12237 SELECT DISTINCT(txn_currency_code)
12238 FROM   pa_budget_lines pbl
12239 WHERE  pbl.budget_version_id = c_budget_version_id
12240 AND    pbl.resource_assignment_id = c_ra_id;
12241 --PL/SQL table created based on txn_curr_cur.
12242 TYPE txn_curr_tbl IS TABLE OF txn_curr_cur%ROWTYPE;
12243 
12244 --Cursor created for fetching transaction currency rates.
12245 CURSOR txn_curr_rate_cur(c_budget_version_id   pa_fp_txn_currencies.fin_plan_version_id%TYPE,
12246                          c_proj_fp_options_id  pa_fp_txn_currencies.proj_fp_options_id%TYPE)
12247 IS
12248 SELECT  pftc.txn_currency_code,
12249         pftc.project_cost_exchange_rate,
12250         pftc.project_rev_exchange_rate,
12251         pftc.projfunc_cost_exchange_rate,
12252         pftc.projfunc_rev_exchange_rate
12253 FROM pa_fp_txn_currencies pftc
12254 WHERE pftc.fin_plan_version_id = c_budget_version_id
12255 AND   pftc.proj_fp_options_id = c_proj_fp_options_id;
12256 --PL/SQL table created based on txn_curr_rate_cur.
12257 TYPE txn_curr_rate_tbl IS TABLE OF txn_curr_rate_cur%ROWTYPE INDEX BY VARCHAR2(15);
12258 */ --Bug 5144013.
12259 /* End of code changes for bug 5330532*/
12260 
12261 l_global_tmp_rec   pa_fp_webadi_xface_tmp%ROWTYPE; --Bug 5284640.
12262 NO_RA_EXC   EXCEPTION; --Bug 5360205.
12263 
12264     l_debug_mode             VARCHAR2(1);
12265     l_return_status          VARCHAR2(1);
12266     l_msg_count              NUMBER := 0;
12267     l_data                   VARCHAR2(2000);
12268     l_msg_data               VARCHAR2(2000);
12269     l_msg_index_out          NUMBER;
12270     l_module_name            VARCHAR2(100) := 'pa_fp_webadi_pkg.insert_periodic_tmp_table';
12271     l_project_id             pa_budget_versions.project_id%TYPE;
12272     l_budget_version_id      pa_budget_versions.budget_version_id%TYPE;
12273     l_version_info_rec       PA_FP_GEN_AMOUNT_UTILS.FP_COLS;
12274     l_project_structure_version_id   pa_budget_versions.project_structure_version_id%TYPE;
12275     l_struct_status_flag   VARCHAR2(1);
12276     l_ci_id   pa_budget_versions.ci_id%TYPE;
12277     l_AR_flag   pa_budget_versions.approved_rev_plan_type_flag%TYPE;
12278     l_agr_curr_code   pa_agreements_all.agreement_currency_code%TYPE;
12279     l_agr_conv_reqd_flag   VARCHAR2(1);
12280     l_fin_plan_type_id   pa_proj_fp_options.fin_plan_type_id%TYPE;
12281     l_proj_fp_options_id   pa_proj_fp_options.proj_fp_options_id%TYPE;
12282     l_version_type   pa_budget_versions.version_type%TYPE;
12283     l_period_mask_id   pa_proj_fp_options.cost_period_mask_id%TYPE;
12284     l_time_phased_code   pa_proj_fp_options.cost_time_phased_code%TYPE;
12285     l_org_id   pa_projects_all.org_id%TYPE;
12286     l_current_planning_period   pa_proj_fp_options.cost_current_planning_period%TYPE;
12287     l_fin_plan_preference_code   pa_proj_fp_options.fin_plan_preference_code%TYPE;
12288     l_plan_class_code   pa_fin_plan_types_b.plan_class_code%TYPE;
12289     l_project_name   pa_projects_all.name%TYPE;
12290     l_project_number   pa_projects_all.segment1%TYPE;
12291     l_txn_currency_code   pa_fp_txn_currencies.txn_currency_code%TYPE;
12292     l_projfunc_currency_code   pa_projects_all.projfunc_currency_code%TYPE;
12293     l_project_currency_code   pa_projects_all.project_currency_code%TYPE;
12294     l_multi_curr_flag   pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
12295     l_start_date   DATE;
12296     l_end_date   DATE;
12297     l_preceding_date   DATE;
12298     l_succeeding_date   DATE;
12299     cnt   NUMBER := 1;
12300     l_res_ass_tbl   res_ass_tbl;
12301     l_periods_tbl   periods_tbl;
12302     l_amt_type_tbl   amt_type_tbl;
12303     -- Bug 5144013: Commenting out the declaration of l_txn_curr_tbl and l_txn_curr_rate_tbl.
12304     --l_txn_curr_tbl   txn_curr_tbl := txn_curr_tbl(); --Bug 5330532.
12305     --l_txn_curr_rate_tbl   txn_curr_rate_tbl; --Bug 5330532.
12306     projfunc_exchange_rate   pa_fp_txn_currencies.projfunc_cost_exchange_rate%TYPE;
12307     project_exchange_rate   pa_fp_txn_currencies.project_cost_exchange_rate%TYPE;
12308     l_position NUMBER := 0; -- Bug 5284640.
12309     l_return NUMBER := 0; -- Bug 5284640.
12310 
12311     l_rec_version_number  NUMBER :=0; --Bug 7863205
12312 
12313 BEGIN
12314     x_msg_count := 0;
12315     x_return_status := FND_API.G_RET_STS_SUCCESS;
12316     l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'Y');
12317 
12318 
12319     IF l_debug_mode = 'Y' THEN
12320         pa_debug.set_curr_function( p_function   => 'INSERT_PERIODIC_TMP_TABLE'
12321                                    ,p_debug_mode => l_debug_mode );
12322         pa_debug.g_err_stage := ':In pa_fp_webadi_pkg.INSERT_PERIODIC_TMP_TABLE' ;
12323         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12324     END IF;
12325 
12326      l_budget_version_id := p_budget_version_id;
12327 
12328      -- Bug 9963788
12329     delete from pa_fp_webadi_xface_tmp where budget_version_id = l_budget_version_id;
12330 
12331     --Validating Input Parameters.
12332     IF p_budget_version_id IS NULL THEN
12333         IF l_debug_mode = 'Y' THEN
12334             pa_debug.g_err_stage := 'p_budget_version_id is passed as null';
12335             pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12336         END IF;
12337         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12338                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12339                              p_token1         => 'PROCEDURENAME',
12340                              p_value1         => l_module_name);
12341         RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12342     ELSE
12343         IF l_debug_mode = 'Y'  THEN
12344             pa_debug.g_err_stage := 'Fetching Project Information of 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 
12348         --Fetching Project Information of the budget version and storing them in local variables.
12349         BEGIN
12350             SELECT ppa.project_id,
12351                    ppa.name,
12352                    ppa.segment1,
12353                    pbv.record_version_number --Bug 7863205
12354             INTO   l_project_id,
12355                    l_project_name,
12356                    l_project_number,
12357                    l_rec_version_number --Bug 7863205
12358             FROM   pa_budget_versions pbv,
12359                    pa_projects_all ppa
12360             WHERE  pbv.budget_version_id = l_budget_version_id
12361             AND    pbv.project_id = ppa.project_id;
12362         EXCEPTION
12363             WHEN NO_DATA_FOUND THEN
12364                  IF l_debug_mode = 'Y'  THEN
12365                      pa_debug.g_err_stage := 'Error getting Project Information for the budget version';
12366                      pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12367                  END IF;
12368                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12369                                       p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12370                                       p_token1         => 'PROCEDURENAME',
12371                                       p_value1         => l_module_name);
12372             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12373         END;
12374     END IF;
12375     IF l_debug_mode = 'Y'  THEN
12376         pa_debug.g_err_stage := '-----Project Id : '||l_project_id||'-----';
12377         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12378         pa_debug.g_err_stage := 'Getting Budget Version Details';
12379         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12380     END IF;
12381 
12382     /*Getting Budget Version Details by calling the GET_PLAN_VERSION_DTLS api.
12383       The returned PL/SQL record l_version_info will contain the budget version details
12384     */
12385     PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS( p_project_id         => l_project_id,
12386                                                   p_budget_version_id  => l_budget_version_id,
12387                                                   x_fp_cols_rec        => l_version_info_rec,
12388                                                   x_return_status      => l_return_status,
12389                                                   x_msg_count          => l_msg_count,
12390                                                   x_msg_data           => l_msg_data);
12391 
12392     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12393        IF l_debug_mode = 'Y' THEN
12394            pa_debug.g_err_stage := 'Budget Version Details not found';
12395            pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12396        END IF;
12397        PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA',
12398                              p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12399                              p_token1         => 'PROCEDURENAME',
12400                              p_value1         => l_module_name);
12401        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12402     END IF;
12403 
12404     --Getting Structure Version Details and storing them in local variables.
12405     IF l_debug_mode = 'Y' THEN
12406         pa_debug.g_err_stage := 'Getting the Structure version information of the budget version';
12407         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12408     END IF;
12409        l_project_structure_version_id := l_version_info_rec.x_project_structure_version_id;
12410        l_struct_status_flag := PA_PROJECT_STRUCTURE_UTILS.check_struc_ver_published(l_project_id,
12411                                                                                  l_project_structure_version_id);
12412 
12413     /* Bug 5144013: Commenting out the below code by which we are getting the agreement currency of the plan
12414        version if the plan version is a change order version and the approved_rev_plan_type_flag of the plan
12415        version is 'Y'. This is done as we can get the the currencies from the cursor res_ass_cur by making use
12416        of the new entity pa_resource_asgn_curr. This is done as part of merging the MRUP3 changes done in 11i
12417        into R12
12418     */
12419     /* --Bug 5144013.
12420     --Getting CI Id and Approved Revenue Flag of the budget version and storing them in local variables.
12421     IF l_debug_mode = 'Y' THEN
12422         pa_debug.g_err_stage := 'Getting CI id and Approved Revenue flag of the budget version';
12423         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12424     END IF;
12425      BEGIN
12426          SELECT ci_id,
12427                 approved_rev_plan_type_flag
12428          INTO   l_ci_id,
12429                 l_AR_flag
12430          FROM   pa_budget_versions
12431          WHERE  budget_version_id = l_budget_version_id;
12432      EXCEPTION
12433          WHEN NO_DATA_FOUND THEN
12434                  IF l_debug_mode = 'Y'  THEN
12435                      pa_debug.g_err_stage := 'Error getting CI Id and Approved Revenue flag for the budget version';
12436                      pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12437                  END IF;
12438                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12439                                       p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12440                                       p_token1         => 'PROCEDURENAME',
12441                                       p_value1         => l_module_name);
12442             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12443      END;
12444     IF l_debug_mode = 'Y' THEN
12445         pa_debug.g_err_stage := '-----CI Id : '||l_ci_id||' , Approved Revenue Flag : '||l_AR_flag||'-----';
12446         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12447     END IF;
12448     */ --Bug 5144013.
12449 
12450     /*Getting the Agreement Details of the budget version if the budget version is CI version and and of
12451       Approved Revenue Plan Type.
12452     */
12453     /* --Bug 5144013.
12454     IF l_debug_mode = 'Y' THEN
12455         pa_debug.g_err_stage := 'Getting Agreement details if the budget versions is CI version and of Approved Revenue plan type';
12456         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12457     END IF;
12458     IF l_ci_id is not null AND L_AR_FLAG = 'Y' THEN
12459         PA_FIN_PLAN_UTILS2.get_agreement_details(
12460                                                  p_budget_version_id  => l_budget_version_id,
12461                                                  p_calling_mode       => 'WA_DOWNLOAD',
12462                                                  x_agr_curr_code      => l_agr_curr_code,
12463                                                  x_agr_conv_reqd_flag => l_agr_conv_reqd_flag,
12464                                                  x_return_status      => l_return_status);
12465          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12466             IF l_debug_mode = 'Y' THEN
12467                 pa_debug.g_err_stage := 'Error in Getting Agreement Details of the budget version';
12468                 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12469             END IF;
12470             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA',
12471                                   p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12472                                   p_token1         => 'PROCEDURENAME',
12473                                   p_value1         => l_module_name);
12474             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12475          END IF;
12476     END IF;
12477     IF l_debug_mode = 'Y' THEN
12478        pa_debug.g_err_stage := '-----Agreement Currency Code : '||l_agr_curr_code||'-----';
12479        pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12480     END IF;
12481     */ --Bug 5144013.
12482 
12483     /*Getting Plan Settings level information of the budget version and storing them in a PL/SQL record.
12484       The record l_proj_fp_options_rec will contain Plan Settings level information
12485     */
12486     IF l_debug_mode = 'Y' THEN
12487         pa_debug.g_err_stage := 'Getting Plan Settings level information of the budget version';
12488         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12489     END IF;
12490      l_fin_plan_type_id := l_version_info_rec.x_fin_plan_type_id;
12491      l_version_type := l_version_info_rec.x_version_type;
12492      l_proj_fp_options_id := l_version_info_rec.x_proj_fp_options_id;
12493      BEGIN
12494          SELECT  fin_plan_preference_code,
12495                  projfunc_cost_rate_type,
12496                  projfunc_cost_rate_date_type,
12497                  projfunc_cost_rate_date,
12498                  project_cost_rate_type,
12499                  project_cost_rate_date_type,
12500                  project_cost_rate_date,
12501                  projfunc_rev_rate_type,
12502                  projfunc_rev_rate_date_type,
12503                  projfunc_rev_rate_date,
12504                  project_rev_rate_type,
12505                  project_rev_rate_date_type,
12506                  project_rev_rate_date
12507          INTO    l_proj_fp_options_rec
12508          FROM    pa_proj_fp_options
12509          WHERE   proj_fp_options_id = l_proj_fp_options_id;
12510      EXCEPTION
12511          WHEN NO_DATA_FOUND THEN
12512                  IF l_debug_mode = 'Y'  THEN
12513                      pa_debug.g_err_stage := 'error getting Plan Settings level information of the budget version';
12514                      pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12515                  END IF;
12516                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12517                                       p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12518                                       p_token1         => 'PROCEDURENAME',
12519                                       p_value1         => l_module_name);
12520             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12521     END;
12522 
12523     /*Getting Amount Type Codes associated with the budget version.and storing them in a PL/SQL table.
12524       The PL/SQL table l_amt_type_tbl will contain the Amount Type codes and Conversion Attributes
12525       associated with the budget version.
12526     */
12527     l_plan_class_code := l_version_info_rec.x_plan_class_code;
12528     IF l_debug_mode = 'Y' THEN
12529         pa_debug.g_err_stage := 'Getting Amount Types associated with the budget version';
12530         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12531     END IF;
12532      BEGIN
12533          OPEN   amt_type_cur(l_project_id,l_fin_plan_type_id,l_version_type,l_plan_class_code);
12534          FETCH   amt_type_cur
12535          BULK COLLECT INTO   l_amt_type_tbl;
12536          CLOSE   amt_type_cur;
12537          IF l_amt_type_tbl.count = 0 THEN
12538             IF l_debug_mode = 'Y' THEN
12539                 pa_debug.g_err_stage := 'No Amount Types found for the budget version';
12540                 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12541             END IF;
12542             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA',
12543                                  p_msg_name        => 'PA_FP_INV_PARAM_PASSED',
12544                                  p_token1          => 'PROCEDURENAME',
12545                                  p_value1          => l_module_name);
12546             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12547          END IF;
12548      END;
12549 
12550     /*Calling GET_PERIOD_INFORMATION api to get the Group Period Information and Start/End dates of the Periods.
12551       The returned PL/SQL table l_periods_tbl will contain all the periods and Start and End dates of the periods
12552       associated with the budget version based on the period mask.
12553     */
12554     l_period_mask_id := l_version_info_rec.x_period_mask_id;
12555     l_time_phased_code := l_version_info_rec.x_time_phased_code;
12556     l_org_id := l_version_info_rec.x_org_id;
12557     l_current_planning_period := l_version_info_rec.x_current_planning_period;
12558     IF l_debug_mode = 'Y' THEN
12559         pa_debug.g_err_stage := 'Getting Group Period Information and Start/End dates of the periods';
12560         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12561     END IF;
12562      GET_PERIOD_INFORMATION(p_period_mask_id => l_period_mask_id,
12563                             p_time_phased_code => l_time_phased_code,
12564                             p_org_id => l_org_id,
12565                             p_current_planning_period => l_current_planning_period,
12566                             x_periods_tbl => l_periods_tbl,
12567                             x_return_status => l_return_status,
12568                             x_msg_count => l_msg_count,
12569                             x_msg_data => l_msg_data);
12570 
12571     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12572             IF l_debug_mode = 'Y' THEN
12573                 pa_debug.g_err_stage := 'Error in getting Group Period information of the budget version';
12574                 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12575             END IF;
12576             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA',
12577                                   p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12578                                   p_token1         => 'PROCEDURENAME',
12579                                   p_value1         => l_module_name);
12580             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12581     END IF;
12582     IF l_periods_tbl.count = 0 THEN
12583        IF l_debug_mode = 'Y' THEN
12584           pa_debug.g_err_stage := 'Period Informations not found for the budget version';
12585           pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12586        END IF;
12587        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12588                             p_msg_name       => 'PA_FP_INV_PARAM_PASSED',
12589                             p_token1         => 'PROCEDURENAME',
12590                             p_value1         => l_module_name);
12591        RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12592     END IF;
12593 
12594     /* Start of code changes for Bug 5144013.
12595        Commenting out the below code by which we are getting the exchange rates of the
12596        transaction currencies of the plan version. This is done as we can get the exchange rates of
12597        the transaction currencies from the cursor res_ass_cur. This is done as part of merging the
12598        MRUP3 changes done in 11i into R12.
12599     */
12600     /*Getting Transaction Currency rates associated with the budget version.
12601       The PL/SQL table l_txn_curr_rate_tbl will contain all the Transaction Currency rates
12602       associated with the budget version.
12603     */
12604     /* --Bug 5144013.
12605     l_projfunc_currency_code := l_version_info_rec.x_projfunc_currency_code;
12606     l_project_currency_code := l_version_info_rec.x_project_currency_code;
12607     l_multi_curr_flag := l_version_info_rec.x_plan_in_multi_curr_flag;
12608     IF l_debug_mode = 'Y' THEN
12609        pa_debug.g_err_stage := 'Getting Transaction Currency rates associated with the budget version';
12610        pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12611     END IF;
12612 
12613      BEGIN
12614     */ --Bug 5144013.
12615          /* Start of code changes for bug 5330532. */
12616          /* --Bug 5144013.
12617          FOR rat IN txn_curr_rate_cur(l_budget_version_id, l_proj_fp_options_id) LOOP
12618             l_txn_curr_rate_tbl(rat.txn_currency_code).txn_currency_code := rat.txn_currency_code;
12619             l_txn_curr_rate_tbl(rat.txn_currency_code).project_cost_exchange_rate  := rat.project_cost_exchange_rate;
12620             l_txn_curr_rate_tbl(rat.txn_currency_code).project_rev_exchange_rate   := rat.project_rev_exchange_rate;
12621             l_txn_curr_rate_tbl(rat.txn_currency_code).projfunc_cost_exchange_rate := rat.projfunc_cost_exchange_rate;
12622             l_txn_curr_rate_tbl(rat.txn_currency_code).projfunc_rev_exchange_rate  := rat.projfunc_rev_exchange_rate;
12623          END LOOP;
12624          */ --Bug 5144013.
12625         /* End of code changes for bug 5330532. */
12626 
12627          -- Commented out the below for bug 5330532.
12628           /*
12629           SELECT DISTINCT(nvl(pbl.txn_currency_code,DECODE(l_ci_id,
12630                                                   null, DECODE(l_AR_flag,
12631                                                   'Y', l_projfunc_currency_code,
12632                                                        l_project_currency_code),
12633                                                         DECODE(l_version_type,
12634                                                                'ALL', l_agr_curr_code,
12635                                                                'REVENUE', l_agr_curr_code,
12636                                                                DECODE(l_AR_flag,
12637                                                                       'Y', l_projfunc_currency_code,
12638                                                                            l_project_currency_code))))) as txn_currency_code,
12639                   pftc.project_cost_exchange_rate,
12640                   pftc.project_rev_exchange_rate,
12641                   pftc.projfunc_cost_exchange_rate,
12642                   pftc.projfunc_rev_exchange_rate
12643           BULK COLLECT INTO l_txn_curr_tbl
12644           FROM pa_budget_lines pbl,
12645                pa_fp_txn_currencies pftc
12646           WHERE pbl.budget_version_id = l_budget_version_id
12647           AND   pftc.fin_plan_version_id = l_budget_version_id
12648           AND   pftc.proj_fp_options_id = l_proj_fp_options_id
12649           and   pbl.txn_currency_code = pftc.txn_currency_code;
12650 
12651          IF l_txn_curr_tbl.count = 0 THEN
12652             IF l_debug_mode = 'Y' THEN
12653                pa_debug.g_err_stage := 'No transaction currency found for the budget version';
12654                pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12655             END IF;
12656             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA',
12657                                  p_msg_name        => 'PA_FP_INV_PARAM_PASSED',
12658                                  p_token1          => 'PROCEDURENAME',
12659                                  p_value1          => l_module_name);
12660             RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12661          END IF;
12662          */
12663      --END;
12664      /* End of code changes done for Bug 5144013.*/
12665 
12666     /*Getting Resource Assignment details of the budget version
12667       The PL/SQL table l_res_ass_tbl will contain all the Resource Assignment
12668       information associated with the budget version.
12669     */
12670      IF l_debug_mode = 'Y' THEN
12671         pa_debug.g_err_stage := 'Getting the Resource Assignment details of the budget version';
12672         pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12673      END IF;
12674      BEGIN
12675           /* Start of coding done for bug 5641300: Using the bulk collect logic instead of for loop
12676              as res_ass_tbl is converted to ordinary pl/sql table from index by pl/sql table.
12677           */
12678           /*
12679           FOR rec in res_ass_cur(l_budget_version_id,l_project_id,l_project_structure_version_id)
12680           LOOP
12681              l_res_ass_tbl(rec.resource_assignment_id) := rec;
12682           END LOOP;
12683           */
12684           -- Bug 5144013: Made changes to pass proj_fp_options_id as a parameter to the cursor res_ass_cur.
12685           OPEN res_ass_cur(l_budget_version_id,l_project_id,l_project_structure_version_id,l_proj_fp_options_id);
12686           FETCH res_ass_cur BULK COLLECT INTO l_res_ass_tbl;
12687           CLOSE res_ass_cur;
12688           /* End of coding done for bug 5641300.*/
12689           IF l_res_ass_tbl.count = 0 THEN
12690              IF l_debug_mode = 'Y' THEN
12691                 pa_debug.g_err_stage := 'No Resource Assignments found for the budget version';
12692                 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12693              END IF;
12694              -- Bug 5360205: Commented out the following and raised NO_RA_EXC.
12695              /*
12696              PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA',
12697                                   p_msg_name        => 'PA_FP_INV_PARAM_PASSED',
12698                                   p_token1          => 'PROCEDURENAME',
12699                                   p_value1          => l_module_name);
12700              RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12701              */
12702              RAISE NO_RA_EXC;
12703          END IF;
12704      END;
12705 
12706      l_fin_plan_preference_code := l_proj_fp_options_rec.fin_plan_preference_code;
12707     /*Getting the values of all the Amount Types for each Resource Assignment and Transaction
12708       Currency combination for all the periods associated with the budget version
12709     */
12710      IF l_debug_mode = 'Y' THEN
12711          pa_debug.g_err_stage := 'Getting Amounts of all the Periods associated with the budget version';
12712          pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12713      END IF;
12714       BEGIN
12715           l_global_tmp_tbl := global_tmp_tbl();
12716           l_global_tmp_rec.budget_version_id := l_budget_version_id;
12717           l_global_tmp_rec.fin_plan_preference_code := l_fin_plan_preference_code;
12718           l_global_tmp_rec.plan_class_code := l_plan_class_code;
12719           l_global_tmp_rec.project_name := l_project_name;
12720           l_global_tmp_rec.record_version_number := l_rec_version_number; --Bug 7863205
12721           l_global_tmp_rec.project_number := l_project_number;
12722           l_global_tmp_rec.project_id := l_project_id;
12723           l_global_tmp_rec.delete_flag := null;
12724           FOR res IN l_res_ass_tbl.first..l_res_ass_tbl.last LOOP
12725              l_global_tmp_rec.resource_assignment_id := l_res_ass_tbl(res).resource_assignment_id;
12726              l_global_tmp_rec.task_number := l_res_ass_tbl(res).task_number;
12727              l_global_tmp_rec.task_name := l_res_ass_tbl(res).task_name;
12728              l_global_tmp_rec.task_display_sequence := l_res_ass_tbl(res).task_display_sequence;
12729              l_global_tmp_rec.resource_alias := l_res_ass_tbl(res).resource_name;
12730              l_global_tmp_rec.unit_of_measure := l_res_ass_tbl(res).unit_of_measure;
12731              l_global_tmp_rec.resource_list_member_id := l_res_ass_tbl(res).resource_list_member_id;
12732 
12733 			 l_global_tmp_rec.cost_code := l_res_ass_tbl(res).cost_code; -- cbs enhancement changes bug#16445106
12734 			 l_global_tmp_rec.cost_code_name := l_res_ass_tbl(res).cost_code_name; -- cbs enhancement changes bug#16445106
12735 
12736              l_global_tmp_rec.spread_curve_id := l_res_ass_tbl(res).spread_curve_id;
12737              l_global_tmp_rec.spread_curve := l_res_ass_tbl(res).spread_curve;
12738              l_global_tmp_rec.start_date := l_res_ass_tbl(res).planning_start_date;
12739              l_global_tmp_rec.end_date := l_res_ass_tbl(res).planning_end_date;
12740              l_global_tmp_rec.mfc_cost_type_id := l_res_ass_tbl(res).mfc_cost_type_id;
12741              l_global_tmp_rec.mfc_cost_type := l_res_ass_tbl(res).mfc_cost_type;
12742              l_global_tmp_rec.etc_method_code := l_res_ass_tbl(res).etc_method_code;
12743              l_global_tmp_rec.etc_method := l_res_ass_tbl(res).etc_method;
12744              l_global_tmp_rec.etc_source := l_res_ass_tbl(res).etc_source;
12745              l_global_tmp_rec.physical_percent_complete := PA_FIN_PLAN_UTILS.get_physical_pc_complete
12746                                                             (p_project_id => l_project_id,
12747                                                              p_proj_element_id => l_res_ass_tbl(res).project_element_id);
12748 
12749              /* Bug 5144013: Commenting out the below code by which we get the transaction currencies of the
12750                 resource assignment. This is done as we can get the resource assignment and transaction currency
12751                 combination from the cursor res_ass_cur. This is done as part of merging the MRUP3 changes done
12752                 in 11i into R12.
12753              */
12754              /* Start of code changes for bug 5330532 */
12755              /* --Bug 5144013.
12756              BEGIN
12757                  l_txn_curr_tbl.DELETE;
12758                  OPEN txn_curr_cur(l_budget_version_id, l_res_ass_tbl(res).resource_assignment_id);
12759                  FETCH txn_curr_cur BULK COLLECT INTO l_txn_curr_tbl;
12760                  CLOSE txn_curr_cur;
12761                  IF l_txn_curr_tbl.COUNT = 0 THEN
12762                     l_txn_curr_tbl.extend(1);
12763                     SELECT    (DECODE(l_ci_id,
12764                                        null, DECODE(l_AR_flag,
12765                                        'Y', l_projfunc_currency_code,
12766                                             l_project_currency_code),
12767                                              DECODE(l_version_type,
12768                                                     'ALL', l_agr_curr_code,
12769                                                     'REVENUE', l_agr_curr_code,
12770                                                                l_project_currency_code)))
12771                     INTO l_txn_curr_tbl(1).txn_currency_code
12772                     FROM dual;
12773                  END IF;
12774              END;
12775              */ --Bug 5144013.
12776             /* End of code changes for bug 5330532 */
12777              --FOR txn IN l_txn_curr_tbl.first..l_txn_curr_tbl.last LOOP   Bug 5144013.
12778              l_global_tmp_rec.txn_currency_code := l_res_ass_tbl(res).txn_currency_code; --Bug 5144013.
12779                 FOR amt IN l_amt_type_tbl.first..l_amt_type_tbl.last LOOP
12780                     l_global_tmp_rec.amount_type_code := l_amt_type_tbl(amt).amount_type_code;
12781                     l_global_tmp_rec.amount_type_name := l_amt_type_tbl(amt).amount_type_name;
12782                     l_global_tmp_rec.projfunc_rate_type := l_amt_type_tbl(amt).projfunc_rate_type;
12783                     l_global_tmp_rec.projfunc_rate_date_type := l_amt_type_tbl(amt).projfunc_rate_date_type;
12784                     l_global_tmp_rec.projfunc_rate_date := l_amt_type_tbl(amt).projfunc_rate_date;
12785                     l_global_tmp_rec.project_rate_type := l_amt_type_tbl(amt).project_rate_type;
12786                     l_global_tmp_rec.project_rate_date_type := l_amt_type_tbl(amt).project_rate_date_type;
12787                     l_global_tmp_rec.project_rate_date := l_amt_type_tbl(amt).project_rate_date;
12788                     /* Bug 5144013. Made changes in the below select to get the exchange rates of the transaction
12789                        currencies from pl/sql table l_res_ass_tbl.
12790                     */
12791                     -- Bug 5330532. Used newly introduced rate table l_txn_curr_rate_tbl in the following select statement.
12792                     SELECT
12793                           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)),
12794                           decode(l_proj_fp_options_rec.projfunc_cost_rate_type,'User',null,l_res_ass_tbl(res).projfunc_cost_exchange_rate,TO_NUMBER(null))),
12795 
12796                           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)),
12797                           decode(l_proj_fp_options_rec.project_cost_rate_type,'User',null,l_res_ass_tbl(res).project_cost_exchange_rate,TO_NUMBER(null)))
12798                     INTO projfunc_exchange_rate,
12799                          project_exchange_rate
12800                     FROM dual;
12801                     l_global_tmp_rec.projfunc_exchange_rate := projfunc_exchange_rate;
12802                     l_global_tmp_rec.project_exchange_rate := project_exchange_rate;
12803                     FOR prd in l_periods_tbl.first-1..l_periods_tbl.last+1 LOOP
12804                         IF prd <> l_periods_tbl.first-1 and prd <> l_periods_tbl.last+1 THEN
12805                            l_position := l_periods_tbl(prd).sequence_number;
12806                            l_start_date := l_periods_tbl(prd).start_date;
12807                            l_end_date := l_periods_tbl(prd).end_date;
12808                            l_preceding_date := to_date(null);
12809                            l_succeeding_date := to_date(null);
12810                         ELSIF prd = l_periods_tbl.first-1 THEN
12811                            l_start_date := to_date(null);
12812                            l_end_date := to_date(null);
12813                            l_preceding_date := l_periods_tbl(l_periods_tbl.first).start_date;
12814                            l_succeeding_date := to_date(null);
12815                         ELSIF prd = l_periods_tbl.last+1 THEN
12816                            l_start_date := to_date(null);
12817                            l_end_date := to_date(null);
12818                            l_preceding_date := to_date(null);
12819                            l_succeeding_date := l_periods_tbl(l_periods_tbl.last).end_date;
12820                         END IF;
12821                         --Calling get_period_amounts api to get the value of the Amount Type for a period.
12822                         l_return := pa_fp_webadi_utils.get_period_amounts(
12823                                             p_budget_version_id => l_budget_version_id,
12824                                             p_amount_code => l_amt_type_tbl(amt).amount_type_code,
12825                                             p_resource_assignment_id => l_res_ass_tbl(res).resource_assignment_id,
12826                                             p_txn_currency_code => l_res_ass_tbl(res).txn_currency_code, --Bug 5144013.
12827                                             p_prd_start_date => l_start_date,
12828                                             p_prd_end_date => l_end_date,
12829                                             preceding_date => l_preceding_date,
12830                                             succedeing_date => l_succeeding_date);
12831                         IF prd = l_periods_tbl.first-1 THEN
12832                            l_global_tmp_rec.preceding_period_amount := l_return;
12833                         ELSIF prd = l_periods_tbl.last+1 THEN
12834                            l_global_tmp_rec.succeeding_period_amount := l_return;
12835                         ELSE
12836                         -- Bug 5284640: Commented out the below Dynamic SQL and added PL/SQL code for improving performance.
12837                         /*
12838                            --Dynamic SQL used to insert the Amount Type value in the corresponding period column.
12839                            EXECUTE IMMEDIATE
12840                                   'BEGIN '||
12841                                   'pa_fp_webadi_pkg.l_global_tmp_rec.prd'||pa_fp_webadi_pkg.l_position||' := pa_fp_webadi_pkg.l_return; '||
12842                                   'END;';
12843                         */
12844                            IF l_position = 1 THEN
12845                               l_global_tmp_rec.prd1 := l_return;
12846                            ELSIF l_position = 2 THEN
12847                               l_global_tmp_rec.prd2 := l_return;
12848                            ELSIF l_position = 3 THEN
12849                               l_global_tmp_rec.prd3 := l_return;
12850                            ELSIF l_position = 4 THEN
12851                               l_global_tmp_rec.prd4 := l_return;
12852                            ELSIF l_position = 5 THEN
12853                               l_global_tmp_rec.prd5 := l_return;
12854                            ELSIF l_position = 6 THEN
12855                               l_global_tmp_rec.prd6 := l_return;
12856                            ELSIF l_position =7 THEN
12857                               l_global_tmp_rec.prd7 := l_return;
12858                            ELSIF l_position = 8 THEN
12859                               l_global_tmp_rec.prd8 := l_return;
12860                            ELSIF l_position = 9 THEN
12861                               l_global_tmp_rec.prd9 := l_return;
12862                            ELSIF l_position = 10 THEN
12863                               l_global_tmp_rec.prd10 := l_return;
12864                            ELSIF l_position = 11 THEN
12865                               l_global_tmp_rec.prd11 := l_return;
12866                            ELSIF l_position = 12 THEN
12867                               l_global_tmp_rec.prd12 := l_return;
12868                            ELSIF l_position = 13 THEN
12869                               l_global_tmp_rec.prd13 := l_return;
12870                            ELSIF l_position = 14 THEN
12871                               l_global_tmp_rec.prd14 := l_return;
12872                            ELSIF l_position = 15 THEN
12873                               l_global_tmp_rec.prd15 := l_return;
12874                            ELSIF l_position = 16 THEN
12875                               l_global_tmp_rec.prd16 := l_return;
12876                            ELSIF l_position = 17 THEN
12877                               l_global_tmp_rec.prd17 := l_return;
12878                            ELSIF l_position = 18 THEN
12879                               l_global_tmp_rec.prd18 := l_return;
12880                            ELSIF l_position = 19 THEN
12881                               l_global_tmp_rec.prd19 := l_return;
12882                            ELSIF l_position = 20 THEN
12883                               l_global_tmp_rec.prd20 := l_return;
12884                            ELSIF l_position = 21 THEN
12885                               l_global_tmp_rec.prd21 := l_return;
12886                            ELSIF l_position = 22 THEN
12887                               l_global_tmp_rec.prd22 := l_return;
12888                            ELSIF l_position = 23 THEN
12889                               l_global_tmp_rec.prd23 := l_return;
12890                            ELSIF l_position = 24 THEN
12891                               l_global_tmp_rec.prd24 := l_return;
12892                            ELSIF l_position = 25 THEN
12893                               l_global_tmp_rec.prd25 := l_return;
12894                            ELSIF l_position = 26 THEN
12895                               l_global_tmp_rec.prd26 := l_return;
12896                            ELSIF l_position = 27 THEN
12897                               l_global_tmp_rec.prd27 := l_return;
12898                            ELSIF l_position = 28 THEN
12899                               l_global_tmp_rec.prd28 := l_return;
12900                            ELSIF l_position = 29 THEN
12901                               l_global_tmp_rec.prd29 := l_return;
12902                            ELSIF l_position = 30 THEN
12903                               l_global_tmp_rec.prd30 := l_return;
12904                            ELSIF l_position = 31 THEN
12905                               l_global_tmp_rec.prd31 := l_return;
12906                            ELSIF l_position = 32 THEN
12907                               l_global_tmp_rec.prd32 := l_return;
12908                            ELSIF l_position = 33 THEN
12909                               l_global_tmp_rec.prd33 := l_return;
12910                            ELSIF l_position = 34 THEN
12911                               l_global_tmp_rec.prd34 := l_return;
12912                            ELSIF l_position = 35 THEN
12913                               l_global_tmp_rec.prd35 := l_return;
12914                            ELSIF l_position = 36 THEN
12915                               l_global_tmp_rec.prd36 := l_return;
12916                            ELSIF l_position = 37 THEN
12917                               l_global_tmp_rec.prd37 := l_return;
12918                            ELSIF l_position = 38 THEN
12919                               l_global_tmp_rec.prd38 := l_return;
12920                            ELSIF l_position = 39 THEN
12921                               l_global_tmp_rec.prd39 := l_return;
12922                            ELSIF l_position = 40 THEN
12923                               l_global_tmp_rec.prd40 := l_return;
12924                            ELSIF l_position = 41 THEN
12925                               l_global_tmp_rec.prd41 := l_return;
12926                            ELSIF l_position = 42 THEN
12927                               l_global_tmp_rec.prd42 := l_return;
12928                            ELSIF l_position = 43 THEN
12929                               l_global_tmp_rec.prd43 := l_return;
12930                            ELSIF l_position = 44 THEN
12931                               l_global_tmp_rec.prd44 := l_return;
12932                            ELSIF l_position = 45 THEN
12933                               l_global_tmp_rec.prd45 := l_return;
12934                            ELSIF l_position = 46 THEN
12935                               l_global_tmp_rec.prd46 := l_return;
12936                            ELSIF l_position = 47 THEN
12937                               l_global_tmp_rec.prd47 := l_return;
12938                            ELSIF l_position = 48 THEN
12939                               l_global_tmp_rec.prd48 := l_return;
12940                            ELSIF l_position = 49 THEN
12941                               l_global_tmp_rec.prd49 := l_return;
12942                            ELSIF l_position = 50 THEN
12943                               l_global_tmp_rec.prd50 := l_return;
12944                            ELSIF l_position = 51 THEN
12945                               l_global_tmp_rec.prd51 := l_return;
12946                            ELSIF l_position = 52 THEN
12947                               l_global_tmp_rec.prd52 := l_return;
12948                            END IF;
12949                         END IF;
12950                     END LOOP;
12951                     --Inserting the record containig the budget line information into the PL/SQL table.
12952                     l_global_tmp_tbl.extend();
12953                     l_global_tmp_tbl(cnt) := l_global_tmp_rec;
12954                     cnt := cnt+1;
12955                 END LOOP;
12956              --END LOOP; Bug 5144013.
12957           END LOOP;
12958           --Resetting the value of all the global variables.
12959           l_position := 0;
12960           l_global_tmp_rec := null;
12961           l_return := 0;
12962       END;
12963        /*Populating Global Temparory Table pa_fp_webadi_xface_tmp using the PL/SQL
12964          table l_global_tmp_tbl which contains all the budget line details.
12965        */
12966        IF l_debug_mode = 'Y' THEN
12967            pa_debug.g_err_stage := 'Before inerting into Global Temporary Table';
12968            pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12969        END IF;
12970          BEGIN
12971 /*               FOR tmp IN l_global_tmp_tbl.first..l_global_tmp_tbl.last
12972                LOOP
12973                  INSERT INTO pa_fp_webadi_xface_tmp
12974                  VALUES l_global_tmp_tbl(tmp);
12975                END LOOP;
12976                commit;*/
12977              FORALL tmp IN l_global_tmp_tbl.first..l_global_tmp_tbl.last
12978                INSERT INTO pa_fp_webadi_xface_tmp
12979                VALUES l_global_tmp_tbl(tmp);
12980          EXCEPTION
12981              WHEN OTHERS THEN
12982                 RAISE;
12983          END;
12984        IF l_debug_mode = 'Y' THEN
12985            pa_debug.g_err_stage := 'Finished inserting into Global temparory table';
12986            pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12987        END IF;
12988        --Resetting the value of the Global PL/SQL table to NULL.
12989        l_global_tmp_tbl := null;
12990 
12991 EXCEPTION
12992     WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12993          l_msg_count := FND_MSG_PUB.count_msg;
12994          IF l_msg_count = 1 and x_msg_data IS NULL THEN
12995              PA_INTERFACE_UTILS_PUB.get_messages
12996                    (p_encoded        => FND_API.G_TRUE
12997                    ,p_msg_index      => 1
12998                    ,p_msg_count      => l_msg_count
12999                    ,p_msg_data       => l_msg_data
13000                    ,p_data           => l_data
13001                    ,p_msg_index_out  => l_msg_index_out);
13002                    x_msg_data := l_data;
13003                    x_msg_count := l_msg_count;
13004          ELSE
13005             x_msg_count := l_msg_count;
13006          END IF;
13007             x_return_status := FND_API.G_RET_STS_ERROR;
13008          IF l_debug_mode = 'Y' THEN
13009              pa_debug.reset_curr_function;
13010          END IF;
13011     RETURN;
13012 
13013     -- Bug 5360205: Added NO_RA_EXC block.
13014     WHEN NO_RA_EXC THEN
13015          x_return_status := FND_API.G_RET_STS_SUCCESS;
13016 		 --bug#12703175
13017 		 INSERT INTO pa_fp_webadi_xface_tmp (BUDGET_VERSION_ID, PROJECT_ID, PROJECT_NAME, PROJECT_NUMBER, RECORD_VERSION_NUMBER)
13018                VALUES (l_budget_version_id, l_project_id, l_project_name, l_project_number, l_rec_version_number);
13019          IF l_debug_mode = 'Y' THEN
13020              pa_debug.reset_curr_function;
13021          END IF;
13022     RETURN;
13023 
13024     WHEN OTHERS THEN
13025          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13026          x_msg_count     := 1;
13027          x_msg_data      := SQLERRM;
13028          FND_MSG_PUB.add_exc_msg( p_pkg_name        => 'pa_fp_webadi_pkg'
13029                                  ,p_procedure_name  => 'insert_periodic_tmp_table');
13030          IF l_debug_mode = 'Y' THEN
13031              pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
13032              pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
13033              pa_debug.reset_curr_function;
13034          END IF;
13035     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13036 
13037 
13038 END insert_periodic_tmp_table;
13039 
13040 
13041 END pa_fp_webadi_pkg;