[Home] [Help]
PACKAGE BODY: APPS.PA_FP_WEBADI_PKG
Source
1 PACKAGE BODY pa_fp_webadi_pkg as
2 /* $Header: PAFPWAPB.pls 120.47.12010000.3 2008/10/21 14:02:49 vgovvala ship $ */
3
4 Validation_Failed_Exc Exception ;
5 BV_Validation_Failed_Exc Exception; -- Exception to be used if the validation fails at version level
6
7 g_module_name VARCHAR2(100) := 'pa.plsql.pa_fp_webadi_pkg';
8 --wlog varchar2(1):='Y';
9
10 -- Bug 3986129: FP.M Web ADI Dev changes. Added the following exceptions
11 Bv_Period_Mask_Changed_Exc EXCEPTION;
12 No_Bv_Maint_Previlege_Exc EXCEPTION;
13 Bv_Non_Editable_Exc EXCEPTION;
14 Co_Ver_Non_Editable_Exc EXCEPTION;
15 Bv_Not_Curr_Working_Exc EXCEPTION;
16 Ci_Ver_Sumbit_Flag_Exc EXCEPTION;
17 Fp_Webadi_Skip_Dup_Rec_Exc EXCEPTION;
18 Fp_Webadi_Skip_Rec_Proc_Exc EXCEPTION;
19 Fp_Webadi_Skip_Next_Rec_Exc EXCEPTION;
20 No_Bv_Dtls_Found_Exc EXCEPTION; --Bug 4584865.
21
22
23 TYPE varchar_70_indexed_num_tbl_typ IS TABLE OF NUMBER INDEX BY VARCHAR2(70);
24 TYPE varchar_32_indexed_num_tbl_typ IS TABLE OF NUMBER INDEX BY VARCHAR2(32);
25
26 -- local variables to simulate fnd_api.g_miss_xxx
27 l_fnd_miss_char CONSTANT VARCHAR(1) := FND_API.G_MISS_CHAR;
28 l_fnd_miss_num CONSTANT NUMBER := FND_API.G_MISS_NUM;
29 l_fnd_miss_date CONSTANT DATE := FND_API.G_MISS_DATE;
30
31 --These variables will contain the values that will be inserted into the interface table when the
32 --corresponding columns in the layout are hidden. These values are default values given in table
33 --creation script
34 g_hidden_col_num CONSTANT NUMBER := 9.99E125;
35 g_hidden_col_date CONSTANT DATE := TO_DATE('1','j');
36 g_hidden_col_char CONSTANT VARCHAR2(1):= chr(0);
37
38 /* Bug 5144013: Made changes to the cursor to refer override rates from the interface table and
39 made changes in change_reason derivation. This is done as part of merging the MRUP3 changes
40 done in 11i into R12.
41 */
42 CURSOR inf_tbl_data_csr
43 (c_run_id pa_fp_webadi_upload_inf.run_id%TYPE,
44 c_allow_qty_flag VARCHAR2,
45 c_allow_raw_cost_flag VARCHAR2,
46 c_allow_burd_cost_flag VARCHAR2,
47 c_allow_revenue_flag VARCHAR2,
48 c_allow_raw_cost_rate_flag VARCHAR2,
49 c_allow_burd_cost_rate_flag VARCHAR2,
50 c_allow_bill_rate_flag VARCHAR2,
51 c_project_id pa_projects_all.project_id%TYPE,
52 c_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE,
53 c_version_type pa_budget_versions.version_type%TYPE,
54 c_request_id pa_budget_versions.request_id%TYPE
55 )
56 IS
57 SELECT inf.budget_version_id budget_version_id,
58 inf.resource_list_member_id resource_list_member_id,
59 inf.task_id task_id,
60 inf.amount_type_code amount_type_code,
61 inf.txn_currency_code txn_currency_code,
62 DECODE (inf.delete_flag, g_hidden_col_char, 'N', DECODE(inf.delete_flag, 'Y', 'Y', 'N')) delete_flag,
63 DECODE (inf.planning_start_date, g_hidden_col_date, TO_DATE(NULL), inf.planning_start_date) planning_start_date,
64 DECODE (inf.planning_end_date, g_hidden_col_date, TO_DATE(NULL), inf.planning_end_date) planning_end_date,
65 '-99' unit_of_measure,
66 DECODE (inf.description, g_hidden_col_char, NULL, DECODE(inf.description, NULL, l_fnd_miss_char, inf.description)) description,
67 DECODE (inf.change_reason_code, g_hidden_col_char, NULL,
68 'MULTIPLE', NULL,
69 NULL,l_fnd_miss_char,
70 inf.change_reason_code) change_reason,
71 DECODE (c_allow_qty_flag,'N',NULL,
72 DECODE (inf.quantity, g_hidden_col_num, NULL, DECODE(inf.quantity, NULL, l_fnd_miss_num, inf.quantity))) quantity,
73 DECODE (c_allow_qty_flag,'N',NULL,
74 DECODE (inf.etc_quantity, g_hidden_col_num, NULL, DECODE(inf.etc_quantity, NULL, l_fnd_miss_num, inf.etc_quantity))) etc_quantity,
75 DECODE (c_allow_raw_cost_flag,'N',NULL,
76 DECODE (inf.raw_cost, g_hidden_col_num, NULL, DECODE(inf.raw_cost, NULL, l_fnd_miss_num, inf.raw_cost))) raw_cost,
77 DECODE (c_allow_raw_cost_flag,'N',NULL,
78 DECODE (inf.etc_raw_cost, g_hidden_col_num, NULL, DECODE(inf.etc_raw_cost, NULL, l_fnd_miss_num, inf.etc_raw_cost))) etc_raw_cost,
79 DECODE (c_allow_raw_cost_rate_flag,'N',NULL,
80 DECODE (inf.raw_cost_over_rate, g_hidden_col_num, NULL, DECODE(inf.raw_cost_over_rate, NULL, l_fnd_miss_num, inf.raw_cost_over_rate))) raw_cost_rate,
81 DECODE (c_allow_burd_cost_flag,'N',NULL,
82 DECODE (inf.burdened_cost, g_hidden_col_num, NULL, DECODE(inf.burdened_cost, NULL, l_fnd_miss_num, inf.burdened_cost))) burdened_cost,
83 DECODE (c_allow_burd_cost_flag,'N',NULL,
84 DECODE (inf.etc_burdened_cost, g_hidden_col_num, NULL, DECODE(inf.etc_burdened_cost, NULL, l_fnd_miss_num, inf.etc_burdened_cost))) etc_burdened_cost,
85 DECODE (c_allow_burd_cost_rate_flag,'N',NULL,
86 DECODE (inf.burdened_cost_over_rate, g_hidden_col_num, NULL, DECODE(inf.burdened_cost_over_rate, NULL, l_fnd_miss_num, inf.burdened_cost_over_rate))) burdened_cost_rate,
87 DECODE (c_allow_revenue_flag,'N',NULL,
88 DECODE (inf.revenue, g_hidden_col_num, NULL, DECODE(inf.revenue, NULL, l_fnd_miss_num, inf.revenue))) revenue,
89 DECODE (c_allow_revenue_flag,'N',NULL,
90 DECODE (inf.etc_revenue, g_hidden_col_num, NULL, DECODE(inf.etc_revenue, NULL, l_fnd_miss_num, inf.etc_revenue))) etc_revenue,
91 DECODE (c_allow_bill_rate_flag,'N',NULL,
92 DECODE (inf.bill_over_rate, g_hidden_col_num, NULL, DECODE(inf.bill_over_rate, NULL, l_fnd_miss_num, inf.bill_over_rate))) bill_rate,
93 DECODE (c_version_type, 'REVENUE', NULL,
94 DECODE(inf.projfunc_cost_rate_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_cost_rate_type, NULL, l_fnd_miss_char, inf.projfunc_cost_rate_type))) projfunc_cost_rate_type,
95 DECODE (c_version_type, 'REVENUE', NULL,
96 DECODE(inf.projfunc_cost_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_cost_rate_date_type, NULL, l_fnd_miss_char, inf.projfunc_cost_rate_date_type))) projfunc_cost_rate_date_type,
97 DECODE (c_version_type, 'REVENUE', NULL,
98 DECODE(inf.projfunc_cost_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.projfunc_cost_exchange_rate, NULL, l_fnd_miss_num, inf.projfunc_cost_exchange_rate))) projfunc_cost_exchange_rate,
99 DECODE (c_version_type, 'REVENUE', TO_DATE(NULL),
100 DECODE(inf.projfunc_cost_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.projfunc_cost_rate_date, NULL, l_fnd_miss_date, inf.projfunc_cost_rate_date))) projfunc_cost_rate_date,
101 DECODE (c_version_type, 'REVENUE', NULL,
102 DECODE(inf.project_cost_rate_type, g_hidden_col_char, NULL, DECODE(inf.project_cost_rate_type, NULL, l_fnd_miss_char, inf.project_cost_rate_type))) project_cost_rate_type,
103 DECODE (c_version_type, 'REVENUE', NULL,
104 DECODE(inf.project_cost_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.project_cost_rate_date_type, NULL, l_fnd_miss_char, inf.project_cost_rate_date_type))) project_cost_rate_date_type,
105 DECODE (c_version_type, 'REVENUE', NULL,
106 DECODE(inf.project_cost_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.project_cost_exchange_rate, NULL, l_fnd_miss_num, inf.project_cost_exchange_rate))) project_cost_exchange_rate,
107 DECODE (c_version_type, 'REVENUE', TO_DATE(NULL),
108 DECODE(inf.project_cost_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.project_cost_rate_date, NULL, l_fnd_miss_date, inf.project_cost_rate_date))) project_cost_rate_date,
109 DECODE (c_version_type, 'COST', NULL,
110 DECODE(inf.projfunc_rev_rate_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_rev_rate_type, NULL, l_fnd_miss_char, inf.projfunc_rev_rate_type))) projfunc_rev_rate_type,
111 DECODE (c_version_type, 'COST', NULL,
112 DECODE(inf.projfunc_rev_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_rev_rate_date_type, NULL, l_fnd_miss_char, inf.projfunc_rev_rate_date_type))) projfunc_rev_rate_date_type,
113 DECODE (c_version_type, 'COST', NULL,
114 DECODE(inf.projfunc_rev_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.projfunc_rev_exchange_rate, NULL, l_fnd_miss_num, inf.projfunc_rev_exchange_rate))) projfunc_rev_exchange_rate,
115 DECODE (c_version_type, 'COST', TO_DATE(NULL),
116 DECODE(inf.projfunc_rev_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.projfunc_rev_rate_date, NULL, l_fnd_miss_date, inf.projfunc_rev_rate_date))) projfunc_rev_rate_date,
117 DECODE (c_version_type, 'COST', NULL,
118 DECODE(inf.project_rev_rate_type, g_hidden_col_char, NULL, DECODE(inf.project_rev_rate_type, NULL, l_fnd_miss_char, inf.project_rev_rate_type))) project_rev_rate_type,
119 DECODE (c_version_type, 'COST', NULL,
120 DECODE(inf.project_rev_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.project_rev_rate_date_type, NULL, l_fnd_miss_char, inf.project_rev_rate_date_type))) project_rev_rate_date_type,
121 DECODE (c_version_type, 'COST', NULL,
122 DECODE(inf.project_rev_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.project_rev_exchange_rate, NULL, l_fnd_miss_num, inf.project_rev_exchange_rate))) project_rev_exchange_rate,
123 DECODE (c_version_type, 'COST', TO_DATE(NULL),
124 DECODE(inf.project_rev_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.project_rev_rate_date, NULL, l_fnd_miss_date, inf.project_rev_rate_date))) project_rev_rate_date,
125 DECODE (inf.projfunc_rate_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_rate_type, NULL, l_fnd_miss_char, inf.projfunc_rate_type)) projfunc_rate_type,
126 DECODE (inf.projfunc_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_rate_date_type, NULL, l_fnd_miss_char, inf.projfunc_rate_date_type)) projfunc_rate_date_type,
127 DECODE (inf.projfunc_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.projfunc_exchange_rate, NULL, l_fnd_miss_num, inf.projfunc_exchange_rate)) projfunc_exchange_rate,
128 DECODE (inf.projfunc_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.projfunc_rate_date, NULL, l_fnd_miss_date, inf.projfunc_rate_date)) projfunc_rate_date,
129 DECODE (inf.project_rate_type, g_hidden_col_char, NULL, DECODE(inf.project_rate_type, NULL, l_fnd_miss_char, inf.project_rate_type)) project_rate_type,
130 DECODE (inf.project_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.project_rate_date_type, NULL, l_fnd_miss_char, inf.project_rate_date_type)) project_rate_date_type,
131 DECODE (inf.project_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.project_exchange_rate, NULL, l_fnd_miss_num, inf.project_exchange_rate)) project_exchange_rate,
132 DECODE (inf.project_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.project_rate_date, NULL, l_fnd_miss_date, inf.project_rate_date)) project_rate_date,
133 --DECODE (inf.spread_curve_id, g_hidden_col_char, NULL, DECODE(inf.spread_curve_name, NULL, l_fnd_miss_char, inf.spread_curve_name))
134 '-99' spread_curve_name,
135 --DECODE (inf.etc_method_name, g_hidden_col_char, NULL, DECODE(inf.etc_method_name, NULL, l_fnd_miss_char, inf.etc_method_name))
136 '-99' etc_method_name,
137 --DECODE (inf.mfc_cost_type_name, g_hidden_col_char, NULL, DECODE(inf.mfc_cost_type_name, NULL, l_fnd_miss_char, inf.mfc_cost_type_name))
138 '-99' mfc_cost_type_name,
139 DECODE (inf.pd_prd, g_hidden_col_num, NULL, DECODE(inf.pd_prd, NULL, l_fnd_miss_num, inf.pd_prd)) pd_prd,
140 DECODE (inf.prd1, g_hidden_col_num, NULL, DECODE(inf.prd1, NULL, l_fnd_miss_num, inf.prd1)) prd1,
141 DECODE (inf.prd2, g_hidden_col_num, NULL, DECODE(inf.prd2, NULL, l_fnd_miss_num, inf.prd2)) prd2,
142 DECODE (inf.prd3, g_hidden_col_num, NULL, DECODE(inf.prd3, NULL, l_fnd_miss_num, inf.prd3)) prd3,
143 DECODE (inf.prd4, g_hidden_col_num, NULL, DECODE(inf.prd4, NULL, l_fnd_miss_num, inf.prd4)) prd4,
144 DECODE (inf.prd5, g_hidden_col_num, NULL, DECODE(inf.prd5, NULL, l_fnd_miss_num, inf.prd5)) prd5,
145 DECODE (inf.prd6, g_hidden_col_num, NULL, DECODE(inf.prd6, NULL, l_fnd_miss_num, inf.prd6)) prd6,
146 DECODE (inf.prd7, g_hidden_col_num, NULL, DECODE(inf.prd7, NULL, l_fnd_miss_num, inf.prd7)) prd7,
147 DECODE (inf.prd8, g_hidden_col_num, NULL, DECODE(inf.prd8, NULL, l_fnd_miss_num, inf.prd8)) prd8,
148 DECODE (inf.prd9, g_hidden_col_num, NULL, DECODE(inf.prd9, NULL, l_fnd_miss_num, inf.prd9)) prd9,
149 DECODE (inf.prd10, g_hidden_col_num, NULL, DECODE(inf.prd10, NULL, l_fnd_miss_num, inf.prd10)) prd10,
150 DECODE (inf.prd11, g_hidden_col_num, NULL, DECODE(inf.prd11, NULL, l_fnd_miss_num, inf.prd11)) prd11,
151 DECODE (inf.prd12, g_hidden_col_num, NULL, DECODE(inf.prd12, NULL, l_fnd_miss_num, inf.prd12)) prd12,
152 DECODE (inf.prd13, g_hidden_col_num, NULL, DECODE(inf.prd13, NULL, l_fnd_miss_num, inf.prd13)) prd13,
153 DECODE (inf.prd14, g_hidden_col_num, NULL, DECODE(inf.prd14, NULL, l_fnd_miss_num, inf.prd14)) prd14,
154 DECODE (inf.prd15, g_hidden_col_num, NULL, DECODE(inf.prd15, NULL, l_fnd_miss_num, inf.prd15)) prd15,
155 DECODE (inf.prd16, g_hidden_col_num, NULL, DECODE(inf.prd16, NULL, l_fnd_miss_num, inf.prd16)) prd16,
156 DECODE (inf.prd17, g_hidden_col_num, NULL, DECODE(inf.prd17, NULL, l_fnd_miss_num, inf.prd17)) prd17,
157 DECODE (inf.prd18, g_hidden_col_num, NULL, DECODE(inf.prd18, NULL, l_fnd_miss_num, inf.prd18)) prd18,
158 DECODE (inf.prd19, g_hidden_col_num, NULL, DECODE(inf.prd19, NULL, l_fnd_miss_num, inf.prd19)) prd19,
159 DECODE (inf.prd20, g_hidden_col_num, NULL, DECODE(inf.prd20, NULL, l_fnd_miss_num, inf.prd20)) prd20,
160 DECODE (inf.prd21, g_hidden_col_num, NULL, DECODE(inf.prd21, NULL, l_fnd_miss_num, inf.prd21)) prd21,
161 DECODE (inf.prd22, g_hidden_col_num, NULL, DECODE(inf.prd22, NULL, l_fnd_miss_num, inf.prd22)) prd22,
162 DECODE (inf.prd23, g_hidden_col_num, NULL, DECODE(inf.prd23, NULL, l_fnd_miss_num, inf.prd23)) prd23,
163 DECODE (inf.prd24, g_hidden_col_num, NULL, DECODE(inf.prd24, NULL, l_fnd_miss_num, inf.prd24)) prd24,
164 DECODE (inf.prd25, g_hidden_col_num, NULL, DECODE(inf.prd25, NULL, l_fnd_miss_num, inf.prd25)) prd25,
165 DECODE (inf.prd26, g_hidden_col_num, NULL, DECODE(inf.prd26, NULL, l_fnd_miss_num, inf.prd26)) prd26,
166 DECODE (inf.prd27, g_hidden_col_num, NULL, DECODE(inf.prd27, NULL, l_fnd_miss_num, inf.prd27)) prd27,
167 DECODE (inf.prd28, g_hidden_col_num, NULL, DECODE(inf.prd28, NULL, l_fnd_miss_num, inf.prd28)) prd28,
168 DECODE (inf.prd29, g_hidden_col_num, NULL, DECODE(inf.prd29, NULL, l_fnd_miss_num, inf.prd29)) prd29,
169 DECODE (inf.prd30, g_hidden_col_num, NULL, DECODE(inf.prd30, NULL, l_fnd_miss_num, inf.prd30)) prd30,
170 DECODE (inf.prd31, g_hidden_col_num, NULL, DECODE(inf.prd31, NULL, l_fnd_miss_num, inf.prd31)) prd31,
171 DECODE (inf.prd32, g_hidden_col_num, NULL, DECODE(inf.prd32, NULL, l_fnd_miss_num, inf.prd32)) prd32,
172 DECODE (inf.prd33, g_hidden_col_num, NULL, DECODE(inf.prd33, NULL, l_fnd_miss_num, inf.prd33)) prd33,
173 DECODE (inf.prd34, g_hidden_col_num, NULL, DECODE(inf.prd34, NULL, l_fnd_miss_num, inf.prd34)) prd34,
174 DECODE (inf.prd35, g_hidden_col_num, NULL, DECODE(inf.prd35, NULL, l_fnd_miss_num, inf.prd35)) prd35,
175 DECODE (inf.prd36, g_hidden_col_num, NULL, DECODE(inf.prd36, NULL, l_fnd_miss_num, inf.prd36)) prd36,
176 DECODE (inf.prd37, g_hidden_col_num, NULL, DECODE(inf.prd37, NULL, l_fnd_miss_num, inf.prd37)) prd37,
177 DECODE (inf.prd38, g_hidden_col_num, NULL, DECODE(inf.prd38, NULL, l_fnd_miss_num, inf.prd38)) prd38,
178 DECODE (inf.prd39, g_hidden_col_num, NULL, DECODE(inf.prd39, NULL, l_fnd_miss_num, inf.prd39)) prd39,
179 DECODE (inf.prd40, g_hidden_col_num, NULL, DECODE(inf.prd40, NULL, l_fnd_miss_num, inf.prd40)) prd40,
180 DECODE (inf.prd41, g_hidden_col_num, NULL, DECODE(inf.prd41, NULL, l_fnd_miss_num, inf.prd41)) prd41,
181 DECODE (inf.prd42, g_hidden_col_num, NULL, DECODE(inf.prd42, NULL, l_fnd_miss_num, inf.prd42)) prd42,
182 DECODE (inf.prd43, g_hidden_col_num, NULL, DECODE(inf.prd43, NULL, l_fnd_miss_num, inf.prd43)) prd43,
183 DECODE (inf.prd44, g_hidden_col_num, NULL, DECODE(inf.prd44, NULL, l_fnd_miss_num, inf.prd44)) prd44,
184 DECODE (inf.prd45, g_hidden_col_num, NULL, DECODE(inf.prd45, NULL, l_fnd_miss_num, inf.prd45)) prd45,
185 DECODE (inf.prd46, g_hidden_col_num, NULL, DECODE(inf.prd46, NULL, l_fnd_miss_num, inf.prd46)) prd46,
186 DECODE (inf.prd47, g_hidden_col_num, NULL, DECODE(inf.prd47, NULL, l_fnd_miss_num, inf.prd47)) prd47,
187 DECODE (inf.prd48, g_hidden_col_num, NULL, DECODE(inf.prd48, NULL, l_fnd_miss_num, inf.prd48)) prd48,
188 DECODE (inf.prd49, g_hidden_col_num, NULL, DECODE(inf.prd49, NULL, l_fnd_miss_num, inf.prd49)) prd49,
189 DECODE (inf.prd50, g_hidden_col_num, NULL, DECODE(inf.prd50, NULL, l_fnd_miss_num, inf.prd50)) prd50,
190 DECODE (inf.prd51, g_hidden_col_num, NULL, DECODE(inf.prd51, NULL, l_fnd_miss_num, inf.prd51)) prd51,
191 DECODE (inf.prd52, g_hidden_col_num, NULL, DECODE(inf.prd52, NULL, l_fnd_miss_num, inf.prd52)) prd52,
192 DECODE (inf.sd_prd, g_hidden_col_num, NULL, DECODE(inf.sd_prd, NULL, l_fnd_miss_num, inf.sd_prd)) sd_prd
193 FROM pa_fp_webadi_upload_inf inf
194 WHERE inf.run_id=c_run_id
195 AND Nvl(inf.val_error_flag, 'N') <> 'Y'
196 AND inf.val_error_code IS NULL
197 AND (inf.amount_type_name IS NULL OR
198 (inf.amount_type_code IN ('TOTAL_QTY','FCST_QTY','ETC_QTY') AND
199 c_allow_qty_flag='Y') OR
200 (inf.amount_type_code IN ('TOTAL_RAW_COST','FCST_RAW_COST','ETC_RAW_COST') AND
201 c_allow_raw_cost_flag='Y') OR
202 (inf.amount_type_code IN ('TOTAL_BURDENED_COST','FCST_BURDENED_COST','ETC_BURDENED_COST') AND
203 c_allow_burd_cost_flag='Y') OR
204 (inf.amount_type_code IN ('TOTAL_REV','FCST_REVENUE','ETC_REVENUE') AND
205 c_allow_revenue_flag='Y') OR
206 (inf.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') AND
207 c_allow_raw_cost_rate_flag='Y') OR
208 (inf.amount_type_code IN ('BURDENED_COST_RATE','ETC_BURDENED_COST_RATE') AND
209 c_allow_burd_cost_rate_flag='Y') OR
210 (inf.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') AND
211 c_allow_bill_rate_flag='Y') )
212 AND Nvl(c_request_id, -99) = Nvl(inf.request_id, -99)
213 ORDER BY inf.task_id, inf.resource_list_member_id, Nvl(inf.txn_currency_code, '-99'),
214 DECODE (inf.amount_type_code, 'TOTAL_BURDENED_COST', 1,
215 'TOTAL_RAW_COST', 2,
216 'TOTAL_REV', 3,
217 'TOTAL_QTY', 4,
218 'BURDENED_COST_RATE', 5,
219 'RAW_COST_RATE', 6,
220 'BILL_RATE', 7,
221 'FCST_BURDENED_COST', 10,
222 'ETC_BURDENED_COST', 11,
223 'FCST_RAW_COST', 12,
224 'ETC_RAW_COST', 13,
225 'FCST_REVENUE', 14,
226 'ETC_REVENUE', 15,
227 'FCST_QTY', 16,
228 'ETC_QTY', 17,
229 'ETC_BURDENED_COST_RATE',18,
230 'ETC_RAW_COST_RATE', 19,
231 'ETC_BILL_RATE', 20, 0);
232
233 TYPE inf_cur_tbl_typ IS TABLE OF inf_tbl_data_csr%ROWTYPE INDEX BY BINARY_INTEGER;
234
235 /* Start of changes done for Bug : 4584865 */
236
237 /*This Record is used to store the Start Date and End Date of each Period based on the Period Mask associated
238 with the budget version.
239 */
240 TYPE periods_rec IS RECORD(sequence_number NUMBER,
241 period_name VARCHAR2(50),--gl_periods.period_name%TYPE,
242 start_date gl_periods.start_date%TYPE,
243 end_date gl_periods.end_date%TYPE);
244 --PL/SQL table created based on Record periods_rec.
245 TYPE periods_tbl IS TABLE OF periods_rec;
246
247 /* End of Changes done for Bug : 4584865*/
248
249 PROCEDURE write_log(
250 p_module_name IN VARCHAR2,
251 p_err_msg IN VARCHAR2,
252 p_debug_level IN NUMBER
253 )
254 IS
255 PRAGMA AUTONOMOUS_TRANSACTION;
256 BEGIN
257
258 INSERT INTO FND_LOG_MESSAGES
259 (module
260 ,log_level
261 ,message_text
262 ,session_id
263 ,user_id
264 ,timestamp
265 ,log_sequence)
266 values
267 (p_module_name
268 ,p_debug_level
269 ,p_err_msg
270 ,-1
271 ,fnd_global.user_id
272 ,sysdate
273 ,fnd_log_messages_s.nextval
274 );
275
276 commit;
277
278 EXCEPTION
279 WHEN OTHERS THEN
280 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
281 END write_log;
282
283 /*PROCEDURE log1(p_err_msg IN VARCHAR2
284 )
285 IS
286 PRAGMA AUTONOMOUS_TRANSACTION;
287 BEGIN
288 if wlog='N' then
289 return;
290 end if;
291 INSERT INTO t1
292 (c1,
293 c2)
294 values
295 (pa_fp_elements_s.nextval,
296 p_err_msg
297 );
298
299 commit;
300
301 EXCEPTION
302 WHEN OTHERS THEN
303 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
304 END log1;
305 */
306
307 PROCEDURE delete_xface
308 ( p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE
309 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
310 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
311 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
312 ,p_calling_module IN VARCHAR2 DEFAULT NULL
313 )
314 IS
315 l_debug_mode VARCHAR2(1) ;
316 l_msg_count NUMBER := 0;
317 l_data VARCHAR2(2000);
318 l_msg_data VARCHAR2(2000);
319 l_msg_index_out NUMBER;
320 l_del_record_count NUMBER;
321 l_budget_version_id pa_budget_versions.budget_version_id%TYPE;
322 l_bv_request_id pa_budget_versions.request_id%TYPE;
323 l_inf_request_id pa_budget_versions.request_id%TYPE;
324 l_preserve_rows_flag VARCHAR2(1);
325 l_nothing_delete_flag VARCHAR2(1);
326
327 BEGIN
328 x_msg_count := 0;
329 x_return_status := FND_API.G_RET_STS_SUCCESS;
330 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'Y');
331
332 IF l_debug_mode = 'Y' THEN
333 pa_debug.set_curr_function( p_function => 'DELETE_XFACE'
334 ,p_debug_mode => l_debug_mode );
335 pa_debug.g_err_stage := ':In pa_fp_webadi_pkg.DELETE_XFACE' ;
336 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
337 END IF;
338
339 l_preserve_rows_flag := 'N';
340 l_nothing_delete_flag := 'N';
341
342 -- validating input parameter
343 IF p_run_id IS NULL THEN
344 IF l_debug_mode = 'Y' THEN
345 pa_debug.g_err_stage := 'p_run_id is passed as null';
346 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
347 END IF;
348 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
349 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
350 p_token1 => 'PROCEDURENAME',
351 p_value1 => g_module_name);
352 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
353 END IF;
354
355 -- checking, if this api is called from web adi directly and if yes, if there is a pending
356 -- concurrent request for processing, then the rows in the interface table should not be deleted
357 IF p_calling_module = 'XL_UPLOAD' THEN
358 BEGIN
359 SELECT 'Y'
360 INTO l_preserve_rows_flag
361 FROM DUAL
362 WHERE EXISTS (SELECT 'X'
363 FROM pa_fp_webadi_upload_inf inf,
364 pa_budget_versions bv
365 WHERE inf.run_id = p_run_id
366 AND inf.budget_version_id = bv.budget_version_id
367 AND Nvl(inf.request_id, -99) = Nvl(bv.request_id, -99)
368 AND bv.plan_processing_code IN ('XLUP', 'XLUE'));
369 -- there is a pending concurrent request, which is yet to be processed
370 -- inf table data should not be deleted
371 IF l_debug_mode = 'Y' THEN
372 pa_debug.g_err_stage := 'Concurrent Request pending, returning';
373 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
374 END IF;
375 EXCEPTION
376 WHEN NO_DATA_FOUND THEN
377 IF l_debug_mode = 'Y' THEN
378 pa_debug.g_err_stage := 'This has been called for online mode';
379 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
380 END IF;
381 -- do nothing
382 l_preserve_rows_flag := 'N';
383 -- l_nothing_delete_flag := 'Y';
384 END;
385 END IF;
386
387 IF l_preserve_rows_flag <> 'Y' THEN
388 DELETE FROM PA_FP_WEBADI_UPLOAD_INF
389 WHERE run_id = p_run_id;
390
391 IF l_debug_mode = 'Y' THEN
392 l_del_record_count := SQL%ROWCOUNT;
393 pa_debug.g_err_stage := ':Deleted '||l_del_record_count||' records from PA_FP_WEBADI_UPLOAD_INF';
394 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
395 pa_debug.reset_curr_function;
396 END IF;
397 END IF;
398 EXCEPTION
399 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
400 l_msg_count := FND_MSG_PUB.count_msg;
401
402 IF l_msg_count = 1 and x_msg_data IS NULL THEN
403 PA_INTERFACE_UTILS_PUB.get_messages
404 (p_encoded => FND_API.G_TRUE
405 ,p_msg_index => 1
406 ,p_msg_count => l_msg_count
407 ,p_msg_data => l_msg_data
408 ,p_data => l_data
409 ,p_msg_index_out => l_msg_index_out);
410 x_msg_data := l_data;
411 x_msg_count := l_msg_count;
412 ELSE
413 x_msg_count := l_msg_count;
414 END IF;
415 x_return_status := FND_API.G_RET_STS_ERROR;
416
417 IF l_debug_mode = 'Y' THEN
418 pa_debug.reset_curr_function;
419 END IF;
420 RETURN;
421 WHEN OTHERS THEN
422 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
423 x_msg_count := 1;
424 x_msg_data := SQLERRM;
425 FND_MSG_PUB.add_exc_msg
426 ( p_pkg_name => 'pa_fp_webadi_pkg'
427 ,p_procedure_name => 'DELETE_XFACE' );
428 IF l_debug_mode = 'Y' THEN
429 pa_debug.write('DELETE_XFACE' || g_module_name,SQLERRM,4);
430 pa_debug.write('DELETE_XFACE' || g_module_name,pa_debug.G_Err_Stack,4);
431 pa_debug.reset_curr_function;
432 END IF;
433
434 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
435
436 END DELETE_XFACE;
437
438 -- Bug 3986129: FP.M Web ADI Dev changes. Added the followings:
439
440 PROCEDURE validate_header_info
441 ( p_calling_mode IN VARCHAR2,
442 p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE,
443 p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE,
444 p_record_version_number IN pa_budget_versions.record_version_number%TYPE,
445 p_pm_rec_version_number IN pa_period_masks_b.record_version_number%TYPE,
446 p_submit_flag IN VARCHAR2,
447 p_request_id IN pa_budget_versions.request_id%TYPE,
448 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
449 x_msg_data OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
450 x_msg_count OUT NOCOPY NUMBER) --File.Sql.39 bug 4440895
451
452 IS
453
454 CURSOR l_version_info_csr (c_budget_version_id pa_budget_versions.budget_version_id%TYPE)
455 IS
456 SELECT bv.record_version_number,
457 bv.period_mask_id,
458 bv.project_id,
459 bv.fin_plan_type_id,
460 Nvl(bv.ci_id, -1),
461 bv.version_type,
462 Nvl(bv.approved_cost_plan_type_flag, 'N'),
463 Nvl(bv.approved_rev_plan_type_flag, 'N'),
464 Nvl(bv.primary_cost_forecast_flag, 'N'),
465 Nvl(bv.primary_rev_forecast_flag, 'N'),
466 Nvl(bv.current_working_flag, 'N'),
467 fpt.plan_class_code,
468 Decode(bv.version_type, 'COST', fpo.cost_time_phased_code,
469 'REVENUE', fpo.revenue_time_phased_code, 'ALL', fpo.all_time_phased_code) time_phased_code
470 FROM pa_budget_versions bv,
471 pa_fin_plan_types_b fpt,
472 pa_proj_fp_options fpo
473 WHERE bv.budget_version_id = c_budget_version_id
474 AND bv.budget_version_id = fpo.fin_plan_version_id
475 AND bv.project_id = fpo.project_id
476 AND bv.fin_plan_type_id = fpt.fin_plan_type_id;
477
478 l_record_version_number pa_budget_versions.record_version_number%TYPE;
479 l_period_mask_id pa_period_masks_b.period_mask_id%TYPE;
480 l_project_id pa_projects_all.project_id%TYPE;
481 l_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE;
482 l_ci_id pa_control_items.ci_id%TYPE;
483 l_version_type pa_budget_versions.version_type%TYPE;
484 l_app_cost_plan_type_flag pa_budget_versions.approved_cost_plan_type_flag%TYPE;
485 l_rev_plan_type_flag pa_budget_versions.approved_rev_plan_type_flag%TYPE;
486 l_prime_cost_fcst_flag pa_budget_versions.primary_cost_forecast_flag%TYPE;
487 l_prime_rev_fcst_flag pa_budget_versions.primary_rev_forecast_flag%TYPE;
488 l_current_working_flag pa_budget_versions.current_working_flag%TYPE;
489 l_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE;
490 l_time_phase_code pa_proj_fp_options.all_time_phased_code%TYPE;
491 l_pm_rec_version_number pa_period_masks_b.record_version_number%TYPE;
492
493 is_periodic_layout VARCHAR2(1) := 'N';
494
495 l_sec_ret_code VARCHAR2(30);
496 l_locked_by_persion_id pa_budget_versions.locked_by_person_id%TYPE;
497 l_val_err_code VARCHAR2(30);
498 l_ci_status_code pa_control_items.status_code%TYPE;
499
500 l_return_status VARCHAR2(1);
501 l_msg_data VARCHAR2(2000);
502 l_msg_count NUMBER;
503
504 l_debug_mode VARCHAR2(1);
505 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.validate_header_info';
506 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
507 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
508 l_data VARCHAR2(2000);
509 l_msg_index_out NUMBER;
510
511
512 BEGIN
513
514 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
515 x_msg_count := 0;
516 x_return_status := FND_API.G_RET_STS_SUCCESS;
517 IF l_debug_mode = 'Y' THEN
518 PA_DEBUG.Set_Curr_Function( p_function => l_module_name,
519 p_debug_mode => l_debug_mode );
520 END IF;
521 IF l_debug_mode = 'Y' THEN
522 pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.validate_header_info';
523 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
524 END IF;
525
526 --log1('----- Entering into validate_header_info-------');
527
528 IF l_debug_mode = 'Y' THEN
529 pa_debug.g_err_stage := 'Opening l_version_info_csr';
530 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
531 END IF;
532
533 -- since there would be check for null budget_version_id in the
534 -- calling place, no check is made here for the same
535 OPEN l_version_info_csr(p_budget_version_id);
536 FETCH l_version_info_csr INTO
537 l_record_version_number,
538 l_period_mask_id,
539 l_project_id,
540 l_fin_plan_type_id,
541 l_ci_id,
542 l_version_type,
543 l_app_cost_plan_type_flag,
544 l_rev_plan_type_flag,
545 l_prime_cost_fcst_flag,
546 l_prime_rev_fcst_flag,
547 l_current_working_flag,
548 l_plan_class_code,
549 l_time_phase_code;
550
551 IF l_version_info_csr%NOTFOUND THEN
552 IF l_debug_mode = 'Y' THEN
553 pa_debug.g_err_stage := 'Cursor l_version_info_csr failed to fetch data';
554 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
555 END IF;
556 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
557 END IF;
558 CLOSE l_version_info_csr;
559
560 IF l_debug_mode = 'Y' THEN
561 pa_debug.g_err_stage := 'Data fetched from l_version_info_csr';
562 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
563 END IF;
564
565 --log1('----- STAGE 1-------');
566 IF l_debug_mode = 'Y' THEN
567 pa_debug.g_err_stage := 'Validating record version number';
568 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
569 END IF;
570 IF l_record_version_number <> p_record_version_number THEN
571 IF l_debug_mode = 'Y' THEN
572 pa_debug.g_err_stage := 'Record version number has changed';
573 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
574 END IF;
575 RAISE BV_validation_failed_exc;
576 END IF;
577 --Update the interface table with error_code 'PA_FP_WEBADI_VER_MODIFIED'
578
579 IF l_debug_mode = 'Y' THEN
580 pa_debug.g_err_stage := 'Checking for periodic layout';
581 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
582 END IF;
583
584 BEGIN
585 SELECT 'Y'
586 INTO is_periodic_layout
587 FROM DUAL
588 WHERE EXISTS(SELECT 'X'
589 FROM pa_fp_webadi_upload_inf
590 WHERE run_id = p_run_id
591 AND amount_type_name IS NOT NULL
592 AND Nvl(p_request_id, -99) = Nvl(request_id, -99));
593 EXCEPTION
594 WHEN NO_DATA_FOUND THEN
595 is_periodic_layout := 'N';
596 END;
597
598 --log1('----- STAGE 2-------');
599 IF is_periodic_layout = 'Y' THEN
600 IF l_debug_mode = 'Y' THEN
601 pa_debug.g_err_stage := 'Validating period mask';
602 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
603 END IF;
604
605 IF l_time_phase_code <> 'N' THEN
606 BEGIN
607 SELECT record_version_number
608 INTO l_pm_rec_version_number
609 FROM pa_period_masks_b
610 WHERE period_mask_id = l_period_mask_id;
611 EXCEPTION
612 WHEN NO_DATA_FOUND THEN
613 IF l_debug_mode = 'Y' THEN
614 pa_debug.g_err_stage := 'No data found for period mask';
615 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
616 END IF;
617 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
618 END;
619 -- the following validation is only for timephased budgets downloaded in
620 -- periodic layouts
621 IF l_pm_rec_version_number <> p_pm_rec_version_number THEN
622 IF l_debug_mode = 'Y' THEN
623 pa_debug.g_err_stage := 'period mask has changed';
624 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
625 END IF;
626 RAISE Bv_period_mask_changed_Exc;
627 --Update the interface table with error_code 'PA_FP_WEBADI_TP_MODIFIED'
628 END IF;
629 END IF;
630 END IF;
631
632 --log1('----- STAGE 3-------');
633 IF l_debug_mode = 'Y' THEN
634 pa_debug.g_err_stage := 'Checking for function security';
635 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
636 END IF;
637
638 IF l_ci_id = -1 THEN
639 -- budget version
640 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY
641 (p_api_version_number => PA_BUDGET_PUB.G_API_VERSION_NUMBER,
642 p_project_id => l_project_id,
643 p_fin_plan_type_id => l_fin_plan_type_id,
644 p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN,
645 p_function_name => 'PA_PM_UPDATE_BUDGET',
646 p_version_type => l_version_type,
647 x_return_status => l_return_status,
648 x_ret_code => l_sec_ret_code);
649 ELSE
650 -- change order version
651 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY
652 (p_api_version_number => PA_BUDGET_PUB.G_API_VERSION_NUMBER,
653 p_project_id => l_project_id,
654 p_fin_plan_type_id => l_fin_plan_type_id,
655 p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN,
656 p_function_name => 'PA_PM_UPDATE_CHG_DOC',
657 p_version_type => l_version_type,
658 x_return_status => l_return_status,
659 x_ret_code => l_sec_ret_code);
660 END IF;
661
662 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
663 IF l_debug_mode = 'Y' THEN
664 pa_debug.g_err_stage := 'Function security not present';
665 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
666 END IF;
667 RAISE No_Bv_Maint_Previlege_Exc;
668 --Update the interface table with error_code 'PA_FP_WEBADI_NO_BV_MAINT_PVLG'
669 END IF;
670
671 --log1('----- STAGE 4-------');
672 -- Checking, if the budget version can be edited or not
673 IF l_debug_mode = 'Y' THEN
674 pa_debug.g_err_stage := 'Checking if the version can be edited';
675 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
676 END IF;
677
678 IF l_ci_id = -1 THEN
679 pa_fin_plan_utils.validate_editable_bv
680 (p_budget_version_id => p_budget_version_id,
681 p_user_id => fnd_global.user_id,
682 p_context => 'WEBADI',
683 p_excel_calling_mode => p_calling_mode,
684 x_locked_by_person_id => l_locked_by_persion_id,
685 x_err_code => l_val_err_code,
686 x_return_status => l_return_status,
687 x_msg_count => l_msg_count,
688 x_msg_data => l_msg_data);
689
690 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
691 IF l_val_err_code IS NOT NULL THEN
692 IF l_debug_mode = 'Y' THEN
693 pa_debug.g_err_stage := 'The version can not be edited';
694 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
695 END IF;
696 RAISE Bv_Non_Editable_Exc;
697 --update the interface table with the error_code;
698 END IF;
699 END IF;
700
701 --log1('----- STAGE 5-------');
702 ELSE
703 -- Check if the ci is not editable
704 IF l_debug_mode = 'Y' THEN
705 pa_debug.g_err_stage := 'Checking if the CO can be updated';
706 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
707 END IF;
708 BEGIN
709 SELECT pjs.project_system_status_code
710 INTO l_ci_status_code
711 FROM pa_control_items pci,
712 pa_project_statuses pjs
713 WHERE pci.ci_id = l_ci_id
714 and pci.status_code = pjs.project_status_code;
715 EXCEPTION
716 WHEN NO_DATA_FOUND THEN
717 IF l_debug_mode = 'Y' THEN
718 pa_debug.g_err_stage := 'Status code not found';
719 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
720 END IF;
721 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
722 END;
723
724 IF l_ci_status_code NOT IN ('CI_DRAFT', 'CI_WORKING') THEN
725 IF l_debug_mode = 'Y' THEN
726 pa_debug.g_err_stage := 'CO version cannot be updated';
727 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
728 END IF;
729 RAISE Co_Ver_Non_Editable_Exc;
730 --update the interface table with error_code 'PA_FP_WA_CI_VER_NON_EDITABLE'
731 END IF;
732
733 --log1('----- STAGE 6-------');
734 END IF;
735 /* check if the p_submit flag is passed as 'Y', if yes then
736 * check if the version is current working version or not,
737 * if the user has the submit privilege or not
738 * throw an error, if the version is CI
739 */
740
741 IF l_debug_mode = 'Y' THEN
742 pa_debug.g_err_stage := 'Checking for submit previlege';
743 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
744 END IF;
745 IF p_submit_flag = 'Y' THEN
746 -- call to check if the version is current working
747 IF l_ci_id = -1 THEN
748 IF l_current_working_flag = 'N' THEN
749 IF l_debug_mode = 'Y' THEN
750 pa_debug.g_err_stage := 'Submittin while not current working';
751 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
752 END IF;
753 RAISE Bv_Not_Curr_Working_Exc;
754 --Update the interface table with error_code 'PA_FP_WA_BV_NOT_CURR_WORKING';
755 END IF;
756 ELSE -- for CI version the p_submit_flag = 'Y'
757 IF l_debug_mode = 'Y' THEN
758 pa_debug.g_err_stage := 'Submitting CO version';
759 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
760 END IF;
761 RAISE Ci_Ver_Sumbit_Flag_Exc;
762 --Update the interface table with error_code 'PA_FP_WA_CI_VER_SUBMIT_FLAG';
763 END IF;
764
765 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY
766 (p_api_version_number => PA_BUDGET_PUB.G_API_VERSION_NUMBER,
767 p_project_id => l_project_id,
768 p_fin_plan_type_id => l_fin_plan_type_id,
769 p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN,
770 p_function_name => 'PA_PM_SUBMIT_BUDGET',
771 p_version_type => l_version_type,
772 x_return_status => l_return_status,
773 x_ret_code => l_sec_ret_code);
774
775 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
776 IF l_debug_mode = 'Y' THEN
777 pa_debug.g_err_stage := 'No submit previlege';
778 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
779 END IF;
780 RAISE No_Bv_Maint_Previlege_Exc;
781 --Update the interface table with error_code 'PA_FP_WEBADI_NO_BV_MAINT_PVLG'
782 END IF;
783
784 --log1('----- STAGE 7-------');
785 END IF; -- p_submit_flag = 'Y'
786
787 IF l_debug_mode = 'Y' THEN
788 pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.validate_header_info';
789 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
790 END IF;
791 IF l_debug_mode = 'Y' THEN
792 pa_debug.reset_curr_function;
793 END IF;
794
795 --log1('----- Leaving validate_header_info-------');
796
797 EXCEPTION
798 -- handling all the pre defined exceptions
799 WHEN BV_validation_failed_exc THEN
800 IF l_debug_mode = 'Y' THEN
801 pa_debug.g_err_stage := 'Updating tmp table with error code: PA_FP_WEBADI_VER_MODIFIED';
802 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
803 END IF;
804
805 UPDATE pa_fp_webadi_upload_inf
806 SET val_error_flag = 'Y',
807 val_error_code = 'PA_FP_WEBADI_VER_MODIFIED',
808 err_task_name = nvl(task_name,'-98'),
809 err_task_number = nvl(task_number,'-98'),
810 err_alias = nvl(resource_alias,'-98'),
811 err_amount_type_code = nvl(amount_type_code,'-98')
812 WHERE run_id=p_run_id
813 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
814
815 x_return_status := FND_API.G_RET_STS_ERROR;
816 IF l_debug_mode = 'Y' THEN
817 pa_debug.reset_curr_function;
818 END IF;
819
820 RETURN;
821 WHEN Bv_period_mask_changed_Exc THEN
822 IF l_debug_mode = 'Y' THEN
823 pa_debug.g_err_stage := 'Updating tmp table with error code: PA_FP_WEBADI_TP_MODIFIED';
824 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
825 END IF;
826
827 UPDATE pa_fp_webadi_upload_inf
828 SET val_error_flag = 'Y',
829 val_error_code = 'PA_FP_WEBADI_TP_MODIFIED',
830 err_task_name = nvl(task_name,'-98'),
831 err_task_number = nvl(task_number,'-98'),
832 err_alias = nvl(resource_alias,'-98'),
833 err_amount_type_code = nvl(amount_type_code,'-98')
834 WHERE run_id=p_run_id
835 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
836
837 x_return_status := FND_API.G_RET_STS_ERROR;
838 IF l_debug_mode = 'Y' THEN
839 pa_debug.reset_curr_function;
840 END IF;
841
842 RETURN;
843 WHEN No_Bv_Maint_Previlege_Exc THEN
844 IF l_debug_mode = 'Y' THEN
845 pa_debug.g_err_stage := 'Updating tmp table with error code: PA_FP_WEBADI_NO_BV_MAINT_PVLG';
846 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
847 END IF;
848
849 UPDATE pa_fp_webadi_upload_inf
850 SET val_error_flag = 'Y',
851 val_error_code = 'PA_FP_WEBADI_NO_BV_MAINT_PVLG',
852 err_task_name = nvl(task_name,'-98'),
853 err_task_number = nvl(task_number,'-98'),
854 err_alias = nvl(resource_alias,'-98'),
855 err_amount_type_code = nvl(amount_type_code,'-98')
856 WHERE run_id=p_run_id
857 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
858
859 x_return_status := FND_API.G_RET_STS_ERROR;
860 IF l_debug_mode = 'Y' THEN
861 pa_debug.reset_curr_function;
862 END IF;
863
864 RETURN;
865 WHEN Bv_Non_Editable_Exc THEN
866 IF l_debug_mode = 'Y' THEN
867 pa_debug.g_err_stage := 'Updating tmp table with error code: ' || l_val_err_code;
868 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
869 END IF;
870
871 UPDATE pa_fp_webadi_upload_inf
872 SET val_error_flag = 'Y',
873 val_error_code = l_val_err_code,
874 err_task_name = nvl(task_name,'-98'),
875 err_task_number = nvl(task_number,'-98'),
876 err_alias = nvl(resource_alias,'-98'),
877 err_amount_type_code = nvl(amount_type_code,'-98')
878 WHERE run_id=p_run_id
879 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
880
881 x_return_status := FND_API.G_RET_STS_ERROR;
882 IF l_debug_mode = 'Y' THEN
883 pa_debug.reset_curr_function;
884 END IF;
885
886 RETURN;
887 WHEN Co_Ver_Non_Editable_Exc THEN
888 IF l_debug_mode = 'Y' THEN
889 pa_debug.g_err_stage := 'Updating tmp table with error code: FP_WEBADI_CI_VER_NON_EDITABLE';
890 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
891 END IF;
892
893 UPDATE pa_fp_webadi_upload_inf
894 SET val_error_flag = 'Y',
895 val_error_code = 'PA_FP_WA_CI_VER_NON_EDITABLE',
896 err_task_name = nvl(task_name,'-98'),
897 err_task_number = nvl(task_number,'-98'),
898 err_alias = nvl(resource_alias,'-98'),
899 err_amount_type_code = nvl(amount_type_code,'-98')
900 WHERE run_id=p_run_id
901 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
902
903 x_return_status := FND_API.G_RET_STS_ERROR;
904 IF l_debug_mode = 'Y' THEN
905 pa_debug.reset_curr_function;
906 END IF;
907
908 RETURN;
909 WHEN Bv_Not_Curr_Working_Exc THEN
910 IF l_debug_mode = 'Y' THEN
911 pa_debug.g_err_stage := 'Updating tmp table with error code: FP_WEBADI_BV_NOT_CURR_WORKING';
912 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
913 END IF;
914
915 UPDATE pa_fp_webadi_upload_inf
916 SET val_error_flag = 'Y',
917 val_error_code = 'PA_FP_WA_BV_NOT_CURR_WORKING',
918 err_task_name = nvl(task_name,'-98'),
919 err_task_number = nvl(task_number,'-98'),
920 err_alias = nvl(resource_alias,'-98'),
921 err_amount_type_code = nvl(amount_type_code,'-98')
922 WHERE run_id=p_run_id
923 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
924
925 x_return_status := FND_API.G_RET_STS_ERROR;
926 IF l_debug_mode = 'Y' THEN
927 pa_debug.reset_curr_function;
928 END IF;
929
930 RETURN;
931 WHEN Ci_Ver_Sumbit_Flag_Exc THEN
932 IF l_debug_mode = 'Y' THEN
933 pa_debug.g_err_stage := 'Updating tmp table with error code: FP_WEBADI_CI_VER_SUBMIT_FLAG';
934 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
935 END IF;
936
937 UPDATE pa_fp_webadi_upload_inf
938 SET val_error_flag = 'Y',
939 val_error_code = 'PA_FP_WA_CI_VER_SUBMIT_FLAG',
940 err_task_name = nvl(task_name,'-98'),
941 err_task_number = nvl(task_number,'-98'),
942 err_alias = nvl(resource_alias,'-98'),
943 err_amount_type_code = nvl(amount_type_code,'-98')
944 WHERE run_id=p_run_id
945 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
946
947 x_return_status := FND_API.G_RET_STS_ERROR;
948 IF l_debug_mode = 'Y' THEN
949 pa_debug.reset_curr_function;
950 END IF;
951
952 RETURN;
953
954 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
955 l_msg_count := FND_MSG_PUB.count_msg;
956
957 IF l_msg_count = 1 and x_msg_data IS NULL THEN
958 PA_INTERFACE_UTILS_PUB.get_messages
959 (p_encoded => FND_API.G_TRUE
960 ,p_msg_index => 1
961 ,p_msg_count => l_msg_count
962 ,p_msg_data => l_msg_data
963 ,p_data => l_data
964 ,p_msg_index_out => l_msg_index_out);
965 x_msg_data := l_data;
966 x_msg_count := l_msg_count;
967 ELSE
968 x_msg_count := l_msg_count;
969 END IF;
970 x_return_status := FND_API.G_RET_STS_ERROR;
971
972 IF l_debug_mode = 'Y' THEN
973 pa_debug.reset_curr_function;
974 END IF;
975 RETURN;
976
977 WHEN OTHERS THEN
978 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
979 x_msg_count := 1;
980 x_msg_data := SQLERRM;
981
982 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
983 ,p_procedure_name => 'prepare_val_input');
984 IF l_debug_mode = 'Y' THEN
985 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
986 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
987 END IF;
988
989 IF l_debug_mode = 'Y' THEN
990 pa_debug.reset_curr_function;
991 END IF;
992 RAISE;
993
994 END validate_header_info; -- of validate_header_info
995
996 /* The input parameter p_context would only be passed if the task id can not be derived
997 * from the task number/ task name provided i.e task_id is returned as null from the select
998 * in prepare_val_input api. The valid value of this is 'INV_TASK.
999 * For other validation errors, the corresponding error code would be passed to the api
1000 * along with other informations like task_id, resource_alias, amount_type_code
1001 */
1002
1003 -- Making this procedure an autonomous transition block as the errors reported
1004 -- on the interface table have to be retained even after rolling back all the
1005 -- other DML performed in the course of validation processing till the point
1006 -- a validation failure occurs.
1007
1008 PROCEDURE process_errors
1009 ( p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE,
1010 p_context IN VARCHAR2,
1011 p_periodic_flag IN VARCHAR2,
1012 p_error_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE,
1013 p_task_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE,
1014 p_rlm_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE,
1015 p_txn_curr_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE,
1016 p_amount_type_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE,
1017 p_request_id IN pa_budget_versions.request_id%TYPE,
1018 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1019 x_msg_data OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1020 x_msg_count OUT NOCOPY NUMBER) --File.Sql.39 bug 4440895
1021 IS
1022 -- PRAGMA AUTONOMOUS_TRANSACTION;
1023
1024 l_return_status VARCHAR2(1);
1025 l_msg_data VARCHAR2(2000);
1026 l_msg_count NUMBER;
1027
1028 l_debug_mode VARCHAR2(1);
1029 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.process_errors';
1030 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1031 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1032 l_msg_index_out NUMBER;
1033 l_data VARCHAR2(2000);
1034 l_periodic_flag VARCHAR2(1);
1035
1036 BEGIN
1037 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1038 x_msg_count := 0;
1039 x_return_status := FND_API.G_RET_STS_SUCCESS;
1040 IF l_debug_mode = 'Y' THEN
1041 PA_DEBUG.Set_Curr_Function( p_function => l_module_name,
1042 p_debug_mode => l_debug_mode );
1043 END IF;
1044 IF l_debug_mode = 'Y' THEN
1045 pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.process_errors';
1046 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1047 END IF;
1048
1049 --log1('PE 1'||p_error_code_tbl.COUNT);
1050 --log1('PE 2'||p_periodic_flag);
1051 --log1('PE 3'||p_task_id_tbl.COUNT);
1052 --log1('PE 4'||p_rlm_id_tbl.COUNT);
1053 --log1('PE 5'||p_txn_curr_tbl.COUNT);
1054 --log1('PE 6'||p_run_id);
1055 --log1('PE 7'||p_context);
1056 /*FOR k IN 1..p_error_code_tbl.COUNT LOOP
1057
1058 log1('p_error_code_tbl('||k||') is '||p_error_code_tbl(k));
1059 log1('p_task_id_tbl('||k||') is '||p_task_id_tbl(k));
1060 log1('p_rlm_id_tbl('||k||') is '||p_rlm_id_tbl(k));
1061 log1('p_txn_curr_tbl('||k||') is '||p_txn_curr_tbl(k));
1062 IF p_amount_type_tbl.EXISTS(k) THEN
1063 log1('p_amount_type_tbl('||k||') is '||p_amount_type_tbl(k));
1064
1065 ELSE
1066
1067 log1('p_amount_type_tbl('||k||') is NULL5');
1068 END IF;
1069 end loop;*/
1070
1071 l_periodic_flag := p_periodic_flag;
1072
1073 -- 4497322.Perf Fix:A condition is added in the WHERE clause.
1074 IF l_periodic_flag IS NULL THEN
1075
1076 BEGIN
1077 SELECT 'Y'
1078 INTO l_periodic_flag
1079 FROM DUAL
1080 WHERE EXISTS (SELECT 1
1081 FROM pa_fp_webadi_upload_inf
1082 WHERE run_id=p_run_id
1083 AND amount_type_name IS NOT NULL
1084 AND Nvl(p_request_id, -99) = Nvl(request_id, -99));
1085
1086 EXCEPTION
1087 WHEN NO_DATA_FOUND THEN
1088
1089 l_periodic_flag := 'N';
1090
1091 END;
1092
1093 END IF;
1094
1095
1096
1097 IF p_context IS NOT NULL THEN
1098 IF p_context = 'INV_TASK' THEN
1099 UPDATE pa_fp_webadi_upload_inf
1100 SET val_error_flag = 'Y',
1101 val_error_code = 'INVALID_TASK_INFO',
1102 err_task_name = nvl(task_name,'-98'),
1103 err_task_number = nvl(task_number,'-98'),
1104 err_alias = nvl(resource_alias,'-98'),
1105 err_amount_type_code = nvl(amount_type_code,'-98')
1106 WHERE run_id = p_run_id
1107 AND task_id IS NULL
1108 AND val_error_flag IS NULL
1109 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
1110 ELSIF p_context = 'INV_RESOURCE' THEN
1111 UPDATE pa_fp_webadi_upload_inf
1112 SET val_error_flag = 'Y',
1113 val_error_code = 'INVALID_RESOURCE_INFO',
1114 err_task_name = nvl(task_name,'-98'),
1115 err_task_number = nvl(task_number,'-98'),
1116 err_alias = nvl(resource_alias,'-98'),
1117 err_amount_type_code = nvl(amount_type_code,'-98')
1118 WHERE run_id = p_run_id
1119 AND resource_list_member_id IS NULL
1120 AND val_error_flag IS NULL
1121 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
1122 ELSE -- no other valid not null context
1123 IF l_debug_mode = 'Y' THEN
1124 pa_debug.g_err_stage := 'Not a valid calling context passed';
1125 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1126 END IF;
1127 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1128 END IF;
1129
1130 ELSE -- when p_context is not passed
1131 IF p_error_code_tbl.count > 0 THEN
1132
1133 IF p_periodic_flag = 'Y' THEN
1134
1135 IF p_error_code_tbl.COUNT = p_task_id_tbl.COUNT AND
1136 p_error_code_tbl.COUNT = p_rlm_id_tbl.COUNT AND
1137 p_error_code_tbl.COUNT = p_amount_type_tbl.COUNT AND
1138 p_error_code_tbl.COUNT = p_txn_curr_tbl.COUNT THEN
1139 FORALL i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST
1140 UPDATE pa_fp_webadi_upload_inf
1141 SET val_error_flag = 'Y',
1142 val_error_code = p_error_code_tbl(i),
1143 err_task_name = nvl(task_name,'-98'),
1144 err_task_number = nvl(task_number,'-98'),
1145 err_alias = nvl(resource_alias,'-98'),
1146 err_amount_type_code = nvl(amount_type_code,'-98')
1147 WHERE run_id = p_run_id
1148 AND task_id = p_task_id_tbl(i)
1149 AND resource_list_member_id = p_rlm_id_tbl(i)
1150 AND Nvl(txn_currency_code, '-11') = Nvl(p_txn_curr_tbl(i), '-11')
1151 AND amount_type_code = p_amount_type_tbl(i)
1152 AND Nvl(p_request_id, -99) = Nvl(request_id, -99)
1153 AND ROWNUM=1;
1154
1155 ELSE -- input table length not same
1156 IF l_debug_mode = 'Y' THEN
1157 pa_debug.g_err_stage := 'Information mismatch to process: periodic';
1158 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1159 END IF;
1160 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1161 END IF;
1162
1163 ELSE -- non periodic
1164
1165 IF p_error_code_tbl.COUNT = p_task_id_tbl.COUNT AND
1166 p_error_code_tbl.COUNT = p_rlm_id_tbl.COUNT AND
1167 p_error_code_tbl.COUNT = p_txn_curr_tbl.COUNT THEN
1168 FORALL i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST
1169 UPDATE pa_fp_webadi_upload_inf inf
1170 SET inf.val_error_flag = 'Y',
1171 inf.val_error_code = p_error_code_tbl(i),
1172 inf.err_task_name = nvl(inf.task_name,'-98'),
1173 inf.err_task_number = nvl(inf.task_number,'-98'),
1174 inf.err_alias = nvl(inf.resource_alias,'-98'),
1175 inf.err_amount_type_code = nvl(inf.amount_type_code,'-98')
1176 WHERE inf.run_id = p_run_id
1177 AND inf.task_id = p_task_id_tbl(i)
1178 AND inf.resource_list_member_id = p_rlm_id_tbl(i)
1179 AND Nvl(inf.txn_currency_code, '-11') = Nvl(p_txn_curr_tbl(i), '-11')
1180 AND Nvl(p_request_id, -99) = Nvl(inf.request_id, -99)
1181 AND ROWNUM=1;
1182
1183 IF l_debug_mode = 'Y' THEN
1184 pa_debug.g_err_stage := 'SQL%COUNT' || SQL%ROWCOUNT;
1185 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1186 END IF;
1187 ELSE
1188 IF l_debug_mode = 'Y' THEN
1189 pa_debug.g_err_stage := 'Information mismatch to process: non periodic';
1190 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1191 END IF;
1192 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1193 END IF;
1194 END IF;
1195
1196 ELSE -- lenght of error code table is 0 when context is not passed
1197 IF l_debug_mode = 'Y' THEN
1198 pa_debug.g_err_stage := 'No error code passed, returning';
1199 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1200 END IF;
1201 IF l_debug_mode = 'Y' THEN
1202 pa_debug.reset_curr_function;
1203 END IF;
1204 RETURN;
1205 END IF;
1206 END IF; -- p_context
1207
1208 -- placing a commit here to retain all the error codes stamped.
1209 -- COMMIT;
1210
1211 IF l_debug_mode = 'Y' THEN
1212 pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.process_errors';
1213 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1214 END IF;
1215 IF l_debug_mode = 'Y' THEN
1216 pa_debug.reset_curr_function;
1217 END IF;
1218
1219 EXCEPTION
1220 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1221 l_msg_count := FND_MSG_PUB.count_msg;
1222
1223 IF l_msg_count = 1 and x_msg_data IS NULL THEN
1224 PA_INTERFACE_UTILS_PUB.get_messages
1225 (p_encoded => FND_API.G_TRUE
1226 ,p_msg_index => 1
1227 ,p_msg_count => l_msg_count
1228 ,p_msg_data => l_msg_data
1229 ,p_data => l_data
1230 ,p_msg_index_out => l_msg_index_out);
1231 x_msg_data := l_data;
1232 x_msg_count := l_msg_count;
1233 ELSE
1234 x_msg_count := l_msg_count;
1235 END IF;
1236 x_return_status := FND_API.G_RET_STS_ERROR;
1237
1238 IF l_debug_mode = 'Y' THEN
1239 pa_debug.reset_curr_function;
1240 END IF;
1241 RETURN;
1242
1243 WHEN OTHERS THEN
1244 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1245 x_msg_count := 1;
1246 x_msg_data := SQLERRM;
1247
1248 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
1249 ,p_procedure_name => 'process_errors');
1250 IF l_debug_mode = 'Y' THEN
1251 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1252 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1253 END IF;
1254
1255 IF l_debug_mode = 'Y' THEN
1256 pa_debug.reset_curr_function;
1257 END IF;
1258 RAISE;
1259 END process_errors;
1260
1261
1262 /* Bug 4431269: Added the following private api to read the global table of
1263 * rec type returned from calculate api and then to call process_errors api
1264 * to report the errors in interface table.
1265 */
1266 PROCEDURE read_global_var_to_report_err
1267 ( p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE,
1268 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1269 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1270 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1271 )
1272
1273 IS
1274 l_return_status VARCHAR2(1);
1275 l_msg_data VARCHAR2(2000);
1276 l_msg_count NUMBER;
1277
1278 l_debug_mode VARCHAR2(1);
1279 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.read_global_var_to_report_err';
1280 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1281 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1282 l_msg_index_out NUMBER;
1283 l_data VARCHAR2(2000);
1284
1285 l_err_val_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1286 l_err_task_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1287 l_err_rlm_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1288 l_err_txn_curr_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1289
1290 BEGIN
1291 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1292 x_msg_count := 0;
1293 x_return_status := FND_API.G_RET_STS_SUCCESS;
1294 IF l_debug_mode = 'Y' THEN
1295 PA_DEBUG.Set_Curr_Function( p_function => l_module_name,
1296 p_debug_mode => l_debug_mode );
1297 END IF;
1298 IF l_debug_mode = 'Y' THEN
1299 pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.read_global_var_to_report_err';
1300 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1301 END IF;
1302
1303 -- checking if there is some value in the global table
1304 IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1305 IF l_debug_mode = 'Y' THEN
1306 pa_debug.g_err_stage := 'There are some values in the global table';
1307 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1308 END IF;
1309
1310 -- processing starts
1311 FOR i IN g_fp_webadi_rec_tbl.FIRST .. g_fp_webadi_rec_tbl.LAST LOOP
1312 l_err_val_code_tbl.EXTEND(1);
1313 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := g_fp_webadi_rec_tbl(i).error_code;
1314 l_err_task_id_tbl.EXTEND(1);
1315 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := g_fp_webadi_rec_tbl(i).task_id;
1316 l_err_rlm_id_tbl.EXTEND(1);
1317 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := g_fp_webadi_rec_tbl(i).rlm_id;
1318 l_err_txn_curr_tbl.EXTEND(1);
1319 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := g_fp_webadi_rec_tbl(i).txn_currency;
1320 END LOOP;
1321
1322 pa_fp_webadi_pkg.process_errors
1323 ( p_run_id => p_run_id,
1324 p_error_code_tbl => l_err_val_code_tbl,
1325 p_task_id_tbl => l_err_task_id_tbl,
1326 p_rlm_id_tbl => l_err_rlm_id_tbl,
1327 p_txn_curr_tbl => l_err_txn_curr_tbl,
1328 x_return_status => l_return_status,
1329 x_msg_data => l_msg_data,
1330 x_msg_count => l_msg_count);
1331 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1332 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1333 END IF;
1334
1335 -- clearing the table of rec type
1336 IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1337 g_fp_webadi_rec_tbl.DELETE;
1338 END IF;
1339 ELSE
1340 IF l_debug_mode = 'Y' THEN
1341 pa_debug.g_err_stage := 'There is no value stored in the global table, returning';
1342 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1343 END IF;
1344 RAISE PA_FP_CONSTANTS_PKG.Just_Ret_Exc;
1345 END IF;
1346 IF l_debug_mode = 'Y' THEN
1347 pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.read_global_var_to_report_err';
1348 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1349 END IF;
1350 IF l_debug_mode = 'Y' THEN
1351 pa_debug.reset_curr_function;
1352 END IF;
1353 EXCEPTION
1354 WHEN PA_FP_CONSTANTS_PKG.Just_Ret_Exc THEN
1355 IF l_debug_mode = 'Y' THEN
1356 pa_debug.reset_curr_function;
1357 END IF;
1358 RETURN;
1359 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1360
1361 -- clearing the table of rec type
1362 IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1363 g_fp_webadi_rec_tbl.DELETE;
1364 END IF;
1365
1366 l_msg_count := FND_MSG_PUB.count_msg;
1367
1368 IF l_msg_count = 1 and x_msg_data IS NULL THEN
1369 PA_INTERFACE_UTILS_PUB.get_messages
1370 (p_encoded => FND_API.G_TRUE
1371 ,p_msg_index => 1
1372 ,p_msg_count => l_msg_count
1373 ,p_msg_data => l_msg_data
1374 ,p_data => l_data
1375 ,p_msg_index_out => l_msg_index_out);
1376 x_msg_data := l_data;
1377 x_msg_count := l_msg_count;
1378 ELSE
1379 x_msg_count := l_msg_count;
1380 END IF;
1381 x_return_status := FND_API.G_RET_STS_ERROR;
1382
1383 IF l_debug_mode = 'Y' THEN
1384 pa_debug.reset_curr_function;
1385 END IF;
1386 RETURN;
1387
1388 WHEN OTHERS THEN
1389 -- clearing the table of rec type
1390 IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1391 g_fp_webadi_rec_tbl.DELETE;
1392 END IF;
1393
1394 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1395 x_msg_count := 1;
1396 x_msg_data := SQLERRM;
1397
1398 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
1399 ,p_procedure_name => 'read_global_var_to_report_err');
1400 IF l_debug_mode = 'Y' THEN
1401 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1402 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1403 END IF;
1404
1405 IF l_debug_mode = 'Y' THEN
1406 pa_debug.reset_curr_function;
1407 END IF;
1408 RAISE;
1409 END read_global_var_to_report_err;
1410
1411 -- bug 4428112: introduced this private api to stamp the valid txn curr codes
1412 -- in the respective lines in the table of records of the interface table,
1413 -- for a non MC enabled version
1414 -- if the txn curr code was not populated earlier by the user, this is required
1415 -- as the cursor on the interface table would be opened again in prepare_pbl_input
1416 -- to prepare the input tables to process_budget_lines.
1417
1418 PROCEDURE check_and_update_txn_curr_code
1419 (p_budget_line_tbl IN PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE,
1420 px_inf_cur_rec_tbl IN OUT NOCOPY inf_cur_tbl_typ, --File.Sql.39 bug 4440895
1421 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1422 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1423 x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
1424
1425 IS
1426 l_return_status VARCHAR2(1);
1427 l_msg_data VARCHAR2(2000);
1428 l_msg_count NUMBER;
1429
1430 l_debug_mode VARCHAR2(1);
1431 l_module_name VARCHAR2(100) := 'PAFPWAPB.check_and_update_txn_curr_code';
1432 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1433 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1434 l_msg_index_out NUMBER;
1435 l_data VARCHAR2(2000);
1436
1437 l_task_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1438 l_rlm_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1439
1440 BEGIN
1441 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1442 x_msg_count := 0;
1443 x_return_status := FND_API.G_RET_STS_SUCCESS;
1444 IF l_debug_mode = 'Y' THEN
1445 PA_DEBUG.Set_Curr_Function( p_function => l_module_name,
1446 p_debug_mode => l_debug_mode );
1447 END IF;
1448 IF l_debug_mode = 'Y' THEN
1449 pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.check_and_update_txn_curr_code';
1450 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1451 END IF;
1452
1453 -- validating input params.
1454 IF p_budget_line_tbl.COUNT < 1 THEN
1455 IF l_debug_mode = 'Y' THEN
1456 pa_debug.g_err_stage:=' Nothing to be updated, returning';
1457 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1458 END IF;
1459 RAISE PA_FP_CONSTANTS_PKG.Just_Ret_Exc;
1460 ELSE
1461 IF l_debug_mode = 'Y' THEN
1462 pa_debug.g_err_stage:=' Values passed, checking for null txn curr recs.';
1463 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1464 END IF;
1465
1466 FOR i IN p_budget_line_tbl.FIRST .. p_budget_line_tbl.LAST LOOP
1467 -- looping through both the table types
1468 FOR j IN px_inf_cur_rec_tbl.FIRST .. px_inf_cur_rec_tbl.LAST LOOP
1469 IF p_budget_line_tbl(i).pa_task_id = px_inf_cur_rec_tbl(j).task_id AND
1470 p_budget_line_tbl(i).resource_list_member_id = px_inf_cur_rec_tbl(j).resource_list_member_id AND
1471 px_inf_cur_rec_tbl(j).txn_currency_code IS NULL THEN
1472 px_inf_cur_rec_tbl(j).txn_currency_code := p_budget_line_tbl(i).txn_currency_code;
1473 END IF;
1474 END LOOP;
1475 END LOOP;
1476 END IF;
1477
1478 IF l_debug_mode = 'Y' THEN
1479 pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.check_and_update_txn_curr_code';
1480 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1481 END IF;
1482 IF l_debug_mode = 'Y' THEN
1483 pa_debug.reset_curr_function;
1484 END IF;
1485 EXCEPTION
1486 WHEN PA_FP_CONSTANTS_PKG.Just_Ret_Exc THEN
1487 IF l_debug_mode = 'Y' THEN
1488 pa_debug.reset_curr_function;
1489 END IF;
1490 RETURN;
1491 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1492 l_msg_count := FND_MSG_PUB.count_msg;
1493
1494 IF l_msg_count = 1 and x_msg_data IS NULL THEN
1495 PA_INTERFACE_UTILS_PUB.get_messages
1496 (p_encoded => FND_API.G_TRUE
1497 ,p_msg_index => 1
1498 ,p_msg_count => l_msg_count
1499 ,p_msg_data => l_msg_data
1500 ,p_data => l_data
1501 ,p_msg_index_out => l_msg_index_out);
1502 x_msg_data := l_data;
1503 x_msg_count := l_msg_count;
1504 ELSE
1505 x_msg_count := l_msg_count;
1506 END IF;
1507 x_return_status := FND_API.G_RET_STS_ERROR;
1508
1509 IF l_debug_mode = 'Y' THEN
1510 pa_debug.reset_curr_function;
1511 END IF;
1512 RETURN;
1513
1514 WHEN OTHERS THEN
1515 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1516 x_msg_count := 1;
1517 x_msg_data := SQLERRM;
1518
1519 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
1520 ,p_procedure_name => 'check_and_update_txn_curr_code');
1521 IF l_debug_mode = 'Y' THEN
1522 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1523 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1524 END IF;
1525
1526 IF l_debug_mode = 'Y' THEN
1527 pa_debug.reset_curr_function;
1528 END IF;
1529 RAISE;
1530 END check_and_update_txn_curr_code;
1531
1532 -- bug 4479036: a private function to check if the conversion
1533 -- attribute columns are displayed in the layout used, so that
1534 -- these attribute can be defaulted to null values or version
1535 -- level attributes accordingly.
1536
1537 FUNCTION conv_attributes_displayed
1538 (p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE)
1539 RETURN VARCHAR2
1540 IS
1541
1542 l_debug_mode VARCHAR2(1);
1543 l_module_name VARCHAR2(100) := 'PAFPWAPB.check_and_update_txn_curr_code';
1544 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1545 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1546
1547 conv_attrb_displayed VARCHAR2(1);
1548
1549 l_projfunc_rate_type pa_fp_webadi_upload_inf.projfunc_rate_type%TYPE;
1550 l_projfunc_rate_date_type pa_fp_webadi_upload_inf.projfunc_rate_date_type%TYPE;
1551 l_projfunc_rate_date pa_fp_webadi_upload_inf.projfunc_rate_date%TYPE;
1552 l_project_rate_type pa_fp_webadi_upload_inf.project_rate_type%TYPE;
1553 l_project_rate_date_type pa_fp_webadi_upload_inf.project_rate_date_type%TYPE;
1554 l_project_rate_date pa_fp_webadi_upload_inf.project_rate_date%TYPE;
1555
1556
1557 BEGIN
1558 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1559
1560 IF l_debug_mode = 'Y' THEN
1561 PA_DEBUG.Set_Curr_Function( p_function => l_module_name,
1562 p_debug_mode => l_debug_mode );
1563 END IF;
1564 IF l_debug_mode = 'Y' THEN
1565 pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.conv_attributes_displayed';
1566 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1567 END IF;
1568
1569 conv_attrb_displayed := 'N';
1570
1571 IF p_run_id IS NULL THEN
1572 IF l_debug_mode = 'Y' THEN
1573 pa_debug.g_err_stage := 'p_run_id is passed as null';
1574 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1575 END IF;
1576 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1577 END IF;
1578
1579 IF l_debug_mode = 'Y' THEN
1580 pa_debug.g_err_stage := 'Checking for the values in conv attrb cols';
1581 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1582 END IF;
1583
1584 BEGIN
1585 SELECT projfunc_rate_type,
1586 projfunc_rate_date_type,
1587 projfunc_rate_date,
1588 project_rate_type,
1589 project_rate_date_type,
1590 project_rate_date
1591 INTO l_projfunc_rate_type,
1592 l_projfunc_rate_date_type,
1593 l_projfunc_rate_date,
1594 l_project_rate_type,
1595 l_project_rate_date_type,
1596 l_project_rate_date
1597 FROM pa_fp_webadi_upload_inf
1598 WHERE run_id = p_run_id
1599 AND ROWNUM = 1;
1600
1601 IF l_projfunc_rate_type <> g_hidden_col_char OR
1602 l_projfunc_rate_date_type <> g_hidden_col_char OR
1603 l_projfunc_rate_date <> g_hidden_col_date OR
1604 l_project_rate_type <> g_hidden_col_char OR
1605 l_project_rate_date_type <> g_hidden_col_char OR
1606 l_project_rate_date <> g_hidden_col_date THEN
1607 IF l_debug_mode = 'Y' THEN
1608 pa_debug.g_err_stage := 'Conv attrb cols displayed in layout';
1609 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1610 END IF;
1611 conv_attrb_displayed := 'Y';
1612 END IF;
1613 EXCEPTION
1614 WHEN NO_DATA_FOUND THEN
1615 IF l_debug_mode = 'Y' THEN
1616 pa_debug.g_err_stage := 'No rows in the interface table';
1617 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1618 END IF;
1619 conv_attrb_displayed := 'N';
1620 END;
1621
1622
1623 IF l_debug_mode = 'Y' THEN
1624 pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.conv_attributes_displayed';
1625 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1626 pa_debug.g_err_stage := 'conv_attrb_displayed: ' || conv_attrb_displayed;
1627 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1628 END IF;
1629 IF l_debug_mode = 'Y' THEN
1630 pa_debug.reset_curr_function;
1631 END IF;
1632
1633 -- returning
1634 RETURN conv_attrb_displayed;
1635
1636 EXCEPTION
1637 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1638 IF l_debug_mode = 'Y' THEN
1639 pa_debug.g_err_stage:='Invalid_Arg_Exc raised in conv_attributes_displayed';
1640 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1641 END IF;
1642 IF l_debug_mode = 'Y' THEN
1643 pa_debug.reset_curr_function;
1644 END IF;
1645 RAISE;
1646
1647 WHEN OTHERS THEN
1648 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
1649 ,p_procedure_name => 'conv_attributes_displayed');
1650 IF l_debug_mode = 'Y' THEN
1651 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1652 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1653 END IF;
1654
1655 IF l_debug_mode = 'Y' THEN
1656 pa_debug.reset_curr_function;
1657 END IF;
1658 RAISE;
1659 END conv_attributes_displayed;
1660
1661 PROCEDURE prepare_val_input
1662 ( p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE,
1663 p_request_id IN pa_budget_versions.request_id%TYPE DEFAULT NULL,
1664 p_version_info_rec IN pa_fp_gen_amount_utils.fp_cols,
1665 p_prd_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE,
1666 p_prd_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE,
1667 p_org_id IN pa_projects_all.org_id%TYPE,
1668 x_budget_lines OUT NOCOPY PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE, --File.Sql.39 bug 4440895
1669 x_etc_quantity_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1670 x_etc_raw_cost_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1671 x_etc_burdened_cost_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1672 x_etc_revenue_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1673 x_raw_cost_rate_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1674 x_burd_cost_rate_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1675 x_bill_rate_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1676 x_planning_start_date_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE, --File.Sql.39 bug 4440895
1677 x_planning_end_date_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE, --File.Sql.39 bug 4440895
1678 x_uom_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_80_TBL_TYPE, --File.Sql.39 bug 4440895
1679 x_mfc_cost_type_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_15_TBL_TYPE, --File.Sql.39 bug 4440895
1680 x_spread_curve_name_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_240_TBL_TYPE, --File.Sql.39 bug 4440895
1681 x_sp_fixed_date_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE, --File.Sql.39 bug 4440895
1682 x_etc_method_name_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_80_TBL_TYPE, --File.Sql.39 bug 4440895
1683 x_spread_curve_id_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1684 x_delete_flag_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_1_TBL_TYPE, --File.Sql.39 bug 4440895
1685 x_ra_id_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1686 x_res_class_code_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_30_TBL_TYPE, --File.Sql.39 bug 4440895
1687 x_rate_based_flag_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_1_TBL_TYPE, --File.Sql.39 bug 4440895
1688 x_rbs_elem_id_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1689 x_amt_type_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_30_TBL_TYPE, --File.Sql.39 bug 4440895
1690 x_first_pd_bf_pm_en_dt OUT NOCOPY DATE, --File.Sql.39 bug 4440895
1691 x_last_pd_af_pm_st_dt OUT NOCOPY DATE, --File.Sql.39 bug 4440895
1692 x_inf_tbl_rec_tbl OUT NOCOPY inf_cur_tbl_typ, --File.Sql.39 bug 4440895
1693 x_num_of_rec_processed OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1694 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1695 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1696 x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
1697 IS
1698
1699 l_return_status VARCHAR2(30);
1700 l_msg_data VARCHAR2(2000);
1701 l_msg_count NUMBER;
1702
1703 l_debug_mode VARCHAR2(1);
1704 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.prepare_val_input';
1705 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1706 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1707 l_msg_index_out NUMBER;
1708 l_data VARCHAR2(2000);
1709
1710 -- variable to held the start_date and end_date of individual periods
1711 l_prd_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1712 l_prd_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1713
1714 l_inf_tbl_data_prev_rec inf_tbl_data_csr%ROWTYPE;
1715 l_inf_tbl_data_curr_rec inf_tbl_data_csr%ROWTYPE;
1716 l_inf_tbl_data_next_rec inf_tbl_data_csr%ROWTYPE;
1717 -- record type used to skip the duplicate records
1718 l_inf_tbl_data_skip_rec inf_tbl_data_csr%ROWTYPE;
1719 l_loop_exit_flag VARCHAR2(1) := 'N';
1720
1721 i INTEGER := 0;
1722 l_uncategorized_flag pa_resource_lists_all_bg.uncategorized_flag%TYPE;
1723 l_prc_error_code VARCHAR2(30);
1724
1725 l_unct_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
1726 l_etc_start_date pa_budget_versions.etc_start_date%TYPE;
1727
1728 l_plan_trans_attr_copied_flag VARCHAR2(1);
1729 l_cost_conv_attr_copied_flag VARCHAR2(1);
1730 l_rev_conv_attr_copied_flag VARCHAR2(1);
1731 l_plan_start_date DATE;
1732 l_plan_end_date DATE;
1733 l_prcd_pd_start_date DATE;
1734 l_prcd_pd_end_date DATE;
1735 l_original_prd_count INTEGER;
1736 l_int_new_prd_count INTEGER;
1737 l_scd_pd_start_date DATE;
1738 l_scd_pd_end_date DATE;
1739 l_first_pd_bf_pm_st_dt DATE; /* variable to hold the start date of the first period that falls before first period in the period mask */
1740 l_first_pd_bf_pm_en_dt DATE; /* variable to hold the end date of the first period that falls before first period in the period mask */
1741 l_last_pd_af_pm_st_dt DATE; /* variable to hold the start date of the last period that falls before last period in the period mask */
1742 l_last_pd_af_pm_en_dt DATE; /* variable to hold the end date of the last period that falls before last period in the period mask */
1743 is_forecast_version VARCHAR2(1) := 'N';
1744 is_periodic_setup VARCHAR2(1) := 'N';
1745 l_bdgt_line_start_date DATE;
1746 l_bdgt_line_end_date DATE;
1747 l_min_bdgt_line_start_date DATE;
1748 l_max_bdgt_line_end_date DATE;
1749 l_sysdate CONSTANT DATE:= SYSDATE;
1750
1751 l_tmp_sum_amt NUMBER;
1752 l_raw_cost NUMBER;
1753 l_etc_raw_cost NUMBER;
1754 l_burdened_cost NUMBER;
1755 l_etc_burdened_cost NUMBER;
1756 l_revenue NUMBER;
1757 l_etc_revenue NUMBER;
1758 l_quantity NUMBER;
1759 l_etc_quantity NUMBER;
1760
1761 l_projfunc_cost_rate pa_budget_lines.projfunc_cost_exchange_rate%TYPE;
1762 l_projfunc_rev_rate pa_budget_lines.projfunc_rev_exchange_rate%TYPE;
1763 l_project_cost_rate pa_budget_lines.project_cost_exchange_rate%TYPE;
1764 l_project_rev_rate pa_budget_lines.project_rev_exchange_rate%TYPE;
1765
1766
1767 -- variable to keep track of number of records inserted to the budget line record type
1768 bl_count INTEGER := 1;
1769
1770 -- variables to be used to pass data to validate_budget_line
1771 l_budget_line_in_out_tbl PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE;
1772 l_budget_line_out_tbl PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE;
1773
1774 l_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
1775 l_allow_qty_flag VARCHAR2(1);
1776
1777 l_bdgt_ln_tbl_description VARCHAR2(255);
1778 l_pfunc_cost_rate_type_mning pa_conversion_types_v.user_conversion_type%TYPE;
1779 l_pfunc_cost_rate_dt_typ_mning pa_lookups.meaning%TYPE;
1780 l_pfunc_rev_rate_type_mning pa_conversion_types_v.user_conversion_type%TYPE;
1781 l_pfunc_rev_rate_dt_typ_mning pa_lookups.meaning%TYPE;
1782 l_prj_cost_rate_type_mning pa_conversion_types_v.user_conversion_type%TYPE;
1783 l_prj_cost_rate_dt_typ_mning pa_lookups.meaning%TYPE;
1784 l_prj_rev_rate_type_mning pa_conversion_types_v.user_conversion_type%TYPE;
1785 l_prj_rev_rate_date_type_mning pa_lookups.meaning%TYPE;
1786
1787 d_projfunc_cost_rate_type pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
1788 d_projfunc_cost_rate_date_type pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE;
1789 d_projfunc_cost_rate_date pa_proj_fp_options.projfunc_cost_rate_date%TYPE ;
1790 d_projfunc_rev_rate_type pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
1791 d_projfunc_rev_rate_date_type pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE ;
1792 d_projfunc_rev_rate_date pa_proj_fp_options.projfunc_rev_rate_date%TYPE ;
1793 d_project_cost_rate_type pa_proj_fp_options.project_cost_rate_type%TYPE ;
1794 d_project_cost_rate_date_type pa_proj_fp_options.project_cost_rate_date_type%TYPE ;
1795 d_project_cost_rate_date pa_proj_fp_options.project_cost_rate_date%TYPE ;
1796 d_project_rev_rate_type pa_proj_fp_options.project_rev_rate_type%TYPE ;
1797 d_project_rev_rate_date_type pa_proj_fp_options.project_rev_rate_date_type%TYPE ;
1798 d_project_rev_rate_date pa_proj_fp_options.project_rev_rate_date%TYPE ;
1799 d_projfunc_cost_exc_rate_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1800 d_projfunc_rev_exc_rate_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1801 d_project_cost_exc_rate_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1802 d_project_rev_exc_rate_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1803 d_txn_curr_tab SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1804
1805 l_projfunc_cost_rate_type pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
1806 l_projfunc_cost_rate_date_type pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE;
1807 l_projfunc_cost_rate_date pa_proj_fp_options.projfunc_cost_rate_date%TYPE ;
1808 l_projfunc_cost_exchange_rate pa_budget_lines.projfunc_cost_exchange_rate%TYPE ;
1809 l_projfunc_rev_rate_type pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
1810 l_projfunc_rev_rate_date_type pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE ;
1811 l_projfunc_rev_rate_date pa_proj_fp_options.projfunc_rev_rate_date%TYPE ;
1812 l_projfunc_rev_exchange_rate pa_budget_lines.projfunc_rev_exchange_rate%TYPE ;
1813 l_project_cost_rate_type pa_proj_fp_options.project_cost_rate_type%TYPE ;
1814 l_project_cost_rate_date_type pa_proj_fp_options.project_cost_rate_date_type%TYPE ;
1815 l_project_cost_rate_date pa_proj_fp_options.project_cost_rate_date%TYPE ;
1816 l_project_cost_exchange_rate pa_budget_lines.project_cost_exchange_rate%TYPE ;
1817 l_project_rev_rate_type pa_proj_fp_options.project_rev_rate_type%TYPE ;
1818 l_project_rev_rate_date_type pa_proj_fp_options.project_rev_rate_date_type%TYPE ;
1819 l_project_rev_rate_date pa_proj_fp_options.project_rev_rate_date%TYPE ;
1820 l_project_rev_exchange_rate pa_budget_lines.project_rev_exchange_rate%TYPE ;
1821 l_change_reason_code pa_budget_lines.change_reason_code%TYPE ;
1822
1823 l_rc_rate NUMBER;
1824 l_bc_rate NUMBER;
1825 l_bill_rate NUMBER;
1826
1827 l_etc_quantity_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1828 l_etc_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1829 l_etc_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1830 l_etc_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1831 l_rc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1832 l_bc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1833 l_bill_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1834 l_uom_tbl SYSTEM.pa_varchar2_80_tbl_type := SYSTEM.pa_varchar2_80_tbl_type();
1835 l_plan_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1836 l_delete_flag VARCHAR2(1);
1837 l_plan_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1838 l_delete_flag_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
1839 l_spread_curve_name_tbl SYSTEM.pa_varchar2_240_tbl_type := SYSTEM.pa_varchar2_240_tbl_type();
1840 l_etc_method_code_tbl SYSTEM.pa_varchar2_80_tbl_type := SYSTEM.pa_varchar2_80_tbl_type();
1841 l_mfc_cost_type_name_tbl SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
1842 l_sp_fixed_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1843 l_spread_curve_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1844
1845 -- variables to be used to call process_errors
1846 l_err_val_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1847 l_err_task_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1848 l_err_rlm_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1849 l_err_txn_curr_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1850 l_err_amt_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1851
1852 l_fixed_spread_curve_id pa_spread_curves_b.spread_curve_id%TYPE;
1853 l_fixed_spread_curve_name pa_spread_curves_tl.name%TYPE;
1854 l_spread_curve_id pa_spread_curves_b.spread_curve_id%TYPE;
1855 l_sp_fixed_date pa_resource_assignments.sp_fixed_date%TYPE;
1856 l_not_null_period_cnt NUMBER;
1857 l_fix_sc_amt_pd_curr_index NUMBER; /* to get the period index for which amount is present if the spread curve */
1858 l_fix_sc_amt_pd_next_index NUMBER; /* associated with the resource is fixed date type */
1859
1860 /* Bug 5144013: The following variable declarations are made to refer the new entity
1861 pa_resource_asgn_curr columns. This is done as part of merging MRUP3 changes done
1862 in 11i into R12.
1863 */
1864 l_ratxn_total_quantity pa_resource_asgn_curr.total_quantity%TYPE;
1865 l_ratxn_total_raw_cost pa_resource_asgn_curr.total_txn_raw_cost%TYPE;
1866 l_ratxn_total_burdened_cost pa_resource_asgn_curr.total_txn_burdened_cost%TYPE;
1867 l_ratxn_total_revenue pa_resource_asgn_curr.total_txn_revenue%TYPE;
1868 l_ratxn_raw_cost_over_rate pa_resource_asgn_curr.txn_raw_cost_rate_override%TYPE;
1869 l_ratxn_burden_cost_over_rate pa_resource_asgn_curr.txn_burden_cost_rate_override%TYPE;
1870 l_ratxn_bill_over_rate pa_resource_asgn_curr.txn_bill_rate_override%TYPE;
1871 l_ratxn_etc_quantity pa_resource_asgn_curr.total_quantity%TYPE;
1872 l_ratxn_etc_raw_cost pa_resource_asgn_curr.total_txn_raw_cost%TYPE;
1873 l_ratxn_etc_burdened_cost pa_resource_asgn_curr.total_txn_burdened_cost%TYPE;
1874 l_ratxn_etc_revenue pa_resource_asgn_curr.total_txn_revenue%TYPE;
1875 l_ra_rate_based_flag pa_resource_assignments.rate_based_flag%TYPE; -- Bug 5068203.
1876
1877
1878 -- cursor to get the start/end date of the first period before the first period displayed in the period mask
1879 CURSOR l_first_pd_st_en_dt_csr (c_org_id pa_projects_all.org_id%TYPE,
1880 c_first_prd_st_dt DATE,
1881 c_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE)
1882 IS
1883 SELECT gl.start_date start_date,
1884 gl.end_date end_date,
1885 gl.period_name period_name
1886 FROM gl_periods gl,
1887 pa_implementations_all pim,
1888 gl_sets_of_books gsb
1889 WHERE gl.end_date < c_first_prd_st_dt
1890 AND gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
1891 AND gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
1892 AND gl.adjustment_period_flag='N'
1893 AND pim.org_id = c_org_id
1894 AND gsb.set_of_books_id = pim.set_of_books_id
1895 ORDER BY gl.start_date DESC;
1896
1897 l_first_pd_st_en_dt_rec l_first_pd_st_en_dt_csr%ROWTYPE;
1898
1899 -- cursor to get the start/end date of the last period before the last period displayed in the period mask
1900 CURSOR l_last_pd_st_en_dt_csr (c_org_id pa_projects_all.org_id%TYPE,
1901 c_last_prd_en_dt DATE,
1902 c_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE)
1903 IS
1904 SELECT gl.start_date start_date,
1905 gl.end_date end_date,
1906 gl.period_name period_name
1907 FROM gl_periods gl,
1908 pa_implementations_all pim,
1909 gl_sets_of_books gsb
1910 WHERE gl.end_date > c_last_prd_en_dt
1911 AND gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
1912 AND gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
1913 AND gl.adjustment_period_flag='N'
1914 AND pim.org_id = c_org_id
1915 AND gsb.set_of_books_id = pim.set_of_books_id
1916 ORDER BY gl.start_date ;
1917
1918 l_last_pd_st_en_dt_rec l_last_pd_st_en_dt_csr%ROWTYPE;
1919
1920 /* Bug 5144013: Made changes in the query of the cursor non_prd_lyt_null_val_cur to refer to the
1921 new entity pa_resource_asgn_curr. This is done as part of merging MRUP3 changes done in 11i
1922 into R12.
1923 */
1924 CURSOR non_prd_lyt_null_val_cur(c_budget_version_id IN pa_budget_versions.budget_version_id%TYPE,
1925 c_task_id IN pa_resource_assignments.task_id%TYPE,
1926 c_resource_list_member_id IN pa_resource_assignments.resource_list_member_id%TYPE,
1927 c_txn_currency_code IN pa_resource_asgn_curr.txn_currency_code%TYPE)
1928 IS
1929 SELECT rac.total_display_quantity,
1930 rac.total_txn_raw_cost,
1931 rac.total_txn_burdened_cost,
1932 rac.total_txn_revenue,
1933 rac.total_display_quantity-NVL(rac.total_init_quantity,0),
1934 rac.total_txn_raw_cost-NVL(rac.total_txn_init_raw_cost,0),
1935 rac.total_txn_burdened_cost-NVL(rac.total_txn_init_burdened_cost,0),
1936 rac.total_txn_revenue-NVL(rac.total_txn_init_revenue,0),
1937 rac.txn_raw_cost_rate_override,
1938 rac.txn_burden_cost_rate_override,
1939 rac.txn_bill_rate_override,
1940 pra.rate_based_flag
1941 FROM pa_resource_asgn_curr rac,
1942 pa_resource_assignments pra
1943 WHERE rac.budget_version_id = c_budget_version_id
1944 AND rac.budget_version_id = pra.budget_version_id
1945 AND rac.resource_assignment_id = pra.resource_assignment_id
1946 AND pra.task_id = c_task_id
1947 AND pra.resource_list_member_id = c_resource_list_member_id
1948 AND rac.txn_currency_code = c_txn_currency_code;
1949
1950 TYPE l_cached_ra_id_info IS TABLE OF NUMBER INDEX BY VARCHAR2(32);
1951
1952 l_cached_ra_id_tbl l_cached_ra_id_info;
1953 l_cached_ra_index VARCHAR2(32);
1954 l_ra_id pa_resource_assignments.resource_assignment_id%TYPE;
1955 l_start_ra_index NUMBER :=1;
1956 l_end_ra_index NUMBER :=1;
1957 l_sp_fix_prd_st_dt DATE;
1958 l_sp_fix_prd_en_dt DATE;
1959
1960 l_res_class_code pa_resource_assignments.resource_class_code%TYPE;
1961 l_rate_based_flag pa_resource_assignments.rate_based_flag%TYPE;
1962 l_rbs_elem_id pa_resource_assignments.rbs_element_id%TYPE;
1963
1964 l_ra_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1965 l_res_class_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1966 l_rate_based_flag_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
1967 l_rbs_elem_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1968
1969 l_min_ra_plan_start_date DATE;
1970 l_max_ra_plan_end_date DATE;
1971
1972 l_amount_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1973 l_lookup_type pa_lookups.lookup_type%TYPE;
1974 l_amount NUMBER;
1975 --l_temp DATE;
1976
1977 -- Added for the bug 4414062
1978 l_period_time_phased_code VARCHAR(1);
1979 l_period_plan_start_date DATE;
1980 l_period_plan_end_date DATE;
1981 l_rl_control_flag pa_resource_lists_all_bg.control_flag%TYPE;
1982 l_fin_struct_id NUMBER; -- Bug 4929163.
1983
1984 -- bug 4479036
1985 l_conv_attrb_displayed VARCHAR(1);
1986
1987 --Added thses date tables for bug#4488926.
1988 TYPE date_tbl_type IS TABLE OF DATE INDEX BY VARCHAR2(20);
1989 l_period_plan_start_date_tbl date_tbl_type;
1990 l_period_plan_end_date_tbl date_tbl_type;
1991 BEGIN
1992
1993 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1994 x_msg_count := 0;
1995 x_return_status := FND_API.G_RET_STS_SUCCESS;
1996
1997 PA_DEBUG.Set_Curr_Function( p_function => l_module_name,
1998 p_debug_mode => l_debug_mode );
1999
2000 IF l_debug_mode = 'Y' THEN
2001 pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.prepare_val_input';
2002 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2003 END IF;
2004
2005 --log1('----- Entering into prepare_val_input-------');
2006 -- deriving all the required version level info
2007 IF l_debug_mode = 'Y' THEN
2008 pa_debug.g_err_stage := 'validating input';
2009 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2010 END IF;
2011 l_fin_struct_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUCTURE_ID(p_version_info_rec.x_project_id); /* Bug 4929163 */
2012 IF p_version_info_rec.x_project_id IS NULL THEN
2013 IF l_debug_mode = 'Y' THEN
2014 pa_debug.g_err_stage := 'project_id not passed';
2015 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2016 END IF;
2017 pa_utils.add_message
2018 (p_app_short_name => 'PA',
2019 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
2020 p_token1 => 'PROCEDURENAME',
2021 p_value1 => l_module_name);
2022 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2023 END IF;
2024
2025 -- checking is org_id is passed as null for periodic layouts
2026 IF (p_prd_start_date_tbl.COUNT > 0 OR
2027 p_prd_end_date_tbl.COUNT > 0 ) AND
2028 p_org_id IS NULL THEN
2029 IF l_debug_mode = 'Y' THEN
2030 pa_debug.g_err_stage := 'org_id not passed for periodic layouts';
2031 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2032 END IF;
2033 pa_utils.add_message
2034 (p_app_short_name => 'PA',
2035 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
2036 p_token1 => 'PROCEDURENAME',
2037 p_value1 => l_module_name);
2038 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2039 END IF;
2040
2041 -- initializing the out parameter for number of records processed
2042 x_num_of_rec_processed := 0;
2043
2044 l_conv_attrb_displayed := 'N';
2045
2046 -- updating the temp table with the task_id for the task name/ task number
2047 -- given in the excel after deriving the same. if not a valid task, leaving
2048 -- task_id column null
2049 IF l_debug_mode = 'Y' THEN
2050 pa_debug.g_err_stage := 'Updating task_id for the task name/number given';
2051 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2052 END IF;
2053
2054 --log1('----- STAGE 1-------');
2055 BEGIN
2056 -- Bug 4464838: Perf Fix: Selecting the control_flag for the
2057 -- resource list and depending upon the value returned, executing
2058 -- one of the update statments to improve the performance by avoiding
2059 -- the select for control flag for each record and as well, removing
2060 -- the OR cluase from the where clause.
2061 SELECT control_flag,
2062 uncategorized_flag
2063 INTO l_rl_control_flag,
2064 l_uncategorized_flag
2065 FROM pa_resource_lists_all_bg
2066 WHERE resource_list_id = p_version_info_rec.x_resource_list_id;
2067
2068 --log1('----- STAGE 3.2------- '||l_uncategorized_flag);
2069 IF l_uncategorized_flag = 'N' THEN
2070 IF l_rl_control_flag = 'N' THEN
2071 -- updating the rlm ids for categorized resource lists with control_fl as N
2072 UPDATE pa_fp_webadi_upload_inf inf
2073 SET inf.task_id = (SELECT pt.task_id
2074 FROM (SELECT pt.name task_name, /* Bug 4929163. Modified the select statement to refer to pa_proj_elements instead of pa_tasks*/
2075 pt.element_number task_number,
2076 pt.proj_element_id task_id
2077 FROM pa_proj_elements pt
2078 WHERE pt.project_id = p_version_info_rec.x_project_id
2079 AND object_type = 'PA_TASKS'
2080 AND parent_structure_id = l_fin_struct_id
2081 UNION ALL
2082 SELECT p.long_name task_name, /* Bug 5345336 */
2083 p.segment1 task_number,
2084 0 task_id
2085 FROM pa_projects_all p
2086 WHERE p.project_id = p_version_info_rec.x_project_id) pt
2087 WHERE (inf.task_name IS NOT NULL
2088 AND inf.task_number IS NULL
2089 AND inf.task_name = pt.task_name) OR
2090 (inf.task_name IS NULL
2091 AND inf.task_number IS NOT NULL
2092 AND inf.task_number = pt.task_number) OR
2093 (inf.task_name IS NOT NULL
2094 AND inf.task_number IS NOT NULL
2095 AND inf.task_name = pt.task_name
2096 AND inf.task_number = pt.task_number)),
2097
2098 inf.change_reason_code = DECODE(inf.delete_flag,'Y',NULL,inf.change_reason_code),
2099 inf.quantity = DECODE(inf.delete_flag,'Y',NULL,inf.quantity),
2100 inf.raw_cost = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost),
2101 inf.raw_cost_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost_over_rate),
2102 inf.burdened_cost = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost),
2103 inf.burdened_cost_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost_over_rate),
2104 inf.revenue = DECODE(inf.delete_flag,'Y',NULL,inf.revenue),
2105 inf.bill_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.bill_over_rate ),
2106 inf.projfunc_cost_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_type),
2107 inf.projfunc_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_date_type),
2108 inf.projfunc_cost_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_exchange_rate ),
2109 inf.projfunc_cost_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_cost_rate_date),
2110 inf.project_cost_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_type),
2111 inf.project_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_date_type),
2112 inf.project_cost_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_exchange_rate),
2113 inf.project_cost_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_cost_rate_date),
2114 inf.projfunc_rev_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_type ),
2115 inf.projfunc_rev_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_date_type ),
2116 inf.projfunc_rev_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_exchange_rate ),
2117 inf.projfunc_rev_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rev_rate_date),
2118 inf.project_rev_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_type ),
2119 inf.project_rev_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_date_type ),
2120 inf.project_rev_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_exchange_rate ),
2121 inf.project_rev_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rev_rate_date),
2122 inf.projfunc_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_type ),
2123 inf.projfunc_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_date_type ),
2124 inf.projfunc_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_exchange_rate ),
2125 inf.projfunc_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rate_date),
2126 inf.project_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_type ),
2127 inf.project_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_date_type ),
2128 inf.project_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_exchange_rate ),
2129 inf.project_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rate_date),
2130 inf.pd_prd = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.pd_prd),
2131 inf.prd1 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd1 ),
2132 inf.prd2 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd2 ),
2133 inf.prd3 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd3 ),
2134 inf.prd4 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd4 ),
2135 inf.prd5 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd5 ),
2136 inf.prd6 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd6 ),
2137 inf.prd7 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd7 ),
2138 inf.prd8 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd8 ),
2139 inf.prd9 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd9 ),
2140 inf.prd10 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd10 ),
2141 inf.prd11 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd11 ),
2142 inf.prd12 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd12 ),
2143 inf.prd13 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd13 ),
2144 inf.prd14 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd14 ),
2145 inf.prd15 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd15 ),
2146 inf.prd16 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd16 ),
2147 inf.prd17 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd17 ),
2148 inf.prd18 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd18 ),
2149 inf.prd19 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd19 ),
2150 inf.prd20 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd20 ),
2151 inf.prd21 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd21 ),
2152 inf.prd22 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd22 ),
2153 inf.prd23 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd23 ),
2154 inf.prd24 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd24 ),
2155 inf.prd25 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd25 ),
2156 inf.prd26 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd26 ),
2157 inf.prd27 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd27 ),
2158 inf.prd28 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd28 ),
2159 inf.prd29 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd29 ),
2160 inf.prd30 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd30 ),
2161 inf.prd31 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd31 ),
2162 inf.prd32 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd32 ),
2163 inf.prd33 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd33 ),
2164 inf.prd34 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd34 ),
2165 inf.prd35 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd35 ),
2166 inf.prd36 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd36 ),
2167 inf.prd37 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd37 ),
2168 inf.prd38 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd38 ),
2169 inf.prd39 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd39 ),
2170 inf.prd40 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd40 ),
2171 inf.prd41 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd41 ),
2172 inf.prd42 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd42 ),
2173 inf.prd43 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd43 ),
2174 inf.prd44 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd44 ),
2175 inf.prd45 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd45 ),
2176 inf.prd46 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd46 ),
2177 inf.prd47 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd47 ),
2178 inf.prd48 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd48 ),
2179 inf.prd49 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd49 ),
2180 inf.prd50 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd50 ),
2181 inf.prd51 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd51 ),
2182 inf.prd52 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd52 ),
2183 inf.sd_prd = DECODE(inf.delete_flag,'Y',l_fnd_miss_num , inf.sd_prd),
2184 inf.resource_list_member_id = (SELECT rlm.resource_list_member_id
2185 FROM pa_resource_list_members rlm
2186 WHERE inf.resource_alias = rlm.alias
2187 AND rlm.resource_list_id = p_version_info_rec.x_resource_list_id
2188 AND rlm.object_type = 'PROJECT'
2189 AND rlm.object_id = p_version_info_rec.x_project_id)
2190 WHERE inf.run_id= p_run_id
2191 AND Nvl(p_request_id, -99) = Nvl(inf.request_id, -99);
2192
2193 ELSE -- control_flag = Y
2194 -- updating the rlm ids for categorized resource lists with control_fl as Y
2195 UPDATE pa_fp_webadi_upload_inf inf
2196 SET inf.task_id = (SELECT pt.task_id
2197 FROM (SELECT pt.name task_name, /* Bug 4929163. Modified the select statement to refer to pa_proj_elements instead of pa_tasks*/
2198 pt.element_number task_number,
2199 pt.proj_element_id task_id
2200 FROM pa_proj_elements pt
2201 WHERE pt.project_id = p_version_info_rec.x_project_id
2202 AND object_type = 'PA_TASKS'
2203 AND parent_structure_id = l_fin_struct_id
2204 UNION ALL
2205 SELECT p.long_name task_name, /* Bug 5345336 */
2206 p.segment1 task_number,
2207 0 task_id
2208 FROM pa_projects_all p
2209 WHERE p.project_id = p_version_info_rec.x_project_id) pt
2210 WHERE (inf.task_name IS NOT NULL
2211 AND inf.task_number IS NULL
2212 AND inf.task_name = pt.task_name) OR
2213 (inf.task_name IS NULL
2214 AND inf.task_number IS NOT NULL
2215 AND inf.task_number = pt.task_number) OR
2216 (inf.task_name IS NOT NULL
2217 AND inf.task_number IS NOT NULL
2218 AND inf.task_name = pt.task_name
2219 AND inf.task_number = pt.task_number)),
2220
2221 inf.change_reason_code = DECODE(inf.delete_flag,'Y',NULL,inf.change_reason_code),
2222 inf.quantity = DECODE(inf.delete_flag,'Y',NULL,inf.quantity),
2223 inf.raw_cost = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost),
2224 inf.raw_cost_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost_over_rate),
2225 inf.burdened_cost = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost),
2226 inf.burdened_cost_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost_over_rate),
2227 inf.revenue = DECODE(inf.delete_flag,'Y',NULL,inf.revenue),
2228 inf.bill_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.bill_over_rate ),
2229 inf.projfunc_cost_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_type),
2230 inf.projfunc_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_date_type),
2231 inf.projfunc_cost_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_exchange_rate ),
2232 inf.projfunc_cost_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_cost_rate_date),
2233 inf.project_cost_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_type),
2234 inf.project_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_date_type),
2235 inf.project_cost_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_exchange_rate),
2236 inf.project_cost_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_cost_rate_date),
2237 inf.projfunc_rev_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_type ),
2238 inf.projfunc_rev_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_date_type ),
2239 inf.projfunc_rev_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_exchange_rate ),
2240 inf.projfunc_rev_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rev_rate_date),
2241 inf.project_rev_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_type ),
2242 inf.project_rev_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_date_type ),
2243 inf.project_rev_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_exchange_rate ),
2244 inf.project_rev_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rev_rate_date),
2245 inf.projfunc_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_type ),
2246 inf.projfunc_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_date_type ),
2247 inf.projfunc_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_exchange_rate ),
2248 inf.projfunc_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rate_date),
2249 inf.project_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_type ),
2250 inf.project_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_date_type ),
2251 inf.project_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_exchange_rate ),
2252 inf.project_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rate_date),
2253 inf.pd_prd = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.pd_prd),
2254 inf.prd1 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd1 ),
2255 inf.prd2 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd2 ),
2256 inf.prd3 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd3 ),
2257 inf.prd4 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd4 ),
2258 inf.prd5 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd5 ),
2259 inf.prd6 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd6 ),
2260 inf.prd7 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd7 ),
2261 inf.prd8 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd8 ),
2262 inf.prd9 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd9 ),
2263 inf.prd10 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd10 ),
2264 inf.prd11 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd11 ),
2265 inf.prd12 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd12 ),
2266 inf.prd13 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd13 ),
2267 inf.prd14 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd14 ),
2268 inf.prd15 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd15 ),
2269 inf.prd16 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd16 ),
2270 inf.prd17 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd17 ),
2271 inf.prd18 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd18 ),
2272 inf.prd19 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd19 ),
2273 inf.prd20 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd20 ),
2274 inf.prd21 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd21 ),
2275 inf.prd22 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd22 ),
2276 inf.prd23 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd23 ),
2277 inf.prd24 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd24 ),
2278 inf.prd25 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd25 ),
2279 inf.prd26 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd26 ),
2280 inf.prd27 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd27 ),
2281 inf.prd28 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd28 ),
2282 inf.prd29 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd29 ),
2283 inf.prd30 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd30 ),
2284 inf.prd31 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd31 ),
2285 inf.prd32 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd32 ),
2286 inf.prd33 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd33 ),
2287 inf.prd34 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd34 ),
2288 inf.prd35 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd35 ),
2289 inf.prd36 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd36 ),
2290 inf.prd37 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd37 ),
2291 inf.prd38 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd38 ),
2292 inf.prd39 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd39 ),
2293 inf.prd40 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd40 ),
2294 inf.prd41 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd41 ),
2295 inf.prd42 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd42 ),
2296 inf.prd43 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd43 ),
2297 inf.prd44 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd44 ),
2298 inf.prd45 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd45 ),
2299 inf.prd46 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd46 ),
2300 inf.prd47 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd47 ),
2301 inf.prd48 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd48 ),
2302 inf.prd49 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd49 ),
2303 inf.prd50 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd50 ),
2304 inf.prd51 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd51 ),
2305 inf.prd52 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd52 ),
2306 inf.sd_prd = DECODE(inf.delete_flag,'Y',l_fnd_miss_num , inf.sd_prd),
2307 inf.resource_list_member_id = (SELECT rlm.resource_list_member_id
2308 FROM pa_resource_list_members rlm
2309 WHERE inf.resource_alias = rlm.alias
2310 AND rlm.resource_list_id = p_version_info_rec.x_resource_list_id
2311 AND rlm.object_type = 'RESOURCE_LIST'
2312 AND rlm.object_id = p_version_info_rec.x_resource_list_id)
2313 WHERE inf.run_id= p_run_id
2314 AND Nvl(p_request_id, -99) = Nvl(inf.request_id, -99);
2315 END IF; -- control_flag = N
2316
2317 ELSE -- Resource list is not categorized
2318 --log1('----- STAGE 3.3------- '||l_unct_rlm_id);
2319 -- update the rlm id columns with rlm id of FINANCIAL_ELEMENTS, if the resource list
2320 -- is uncategorized one
2321
2322 -- 4497319.Perf Fix:Added two AND conditions in the WHERE clause in order to improve the performance.
2323 SELECT resource_list_member_id
2324 INTO l_unct_rlm_id
2325 FROM pa_resource_list_members
2326 WHERE resource_list_id = p_version_info_rec.x_resource_list_id
2327 AND resource_class_flag = 'Y'
2328 AND resource_class_code = 'FINANCIAL_ELEMENTS'
2329 AND object_type = 'RESOURCE_LIST'
2330 AND object_id = p_version_info_rec.x_resource_list_id;
2331
2332 --log1('----- STAGE 3.4------- '||l_unct_rlm_id);
2333 UPDATE pa_fp_webadi_upload_inf inf
2334 SET inf.task_id = (SELECT pt.task_id
2335 FROM (SELECT pt.name task_name, /* Bug 4929163. Modidfied the select statement to refer to pa_proj_elements instead of pa_tasks*/
2336 pt.element_number task_number,
2337 pt.proj_element_id task_id
2338 FROM pa_proj_elements pt
2339 WHERE pt.project_id = p_version_info_rec.x_project_id
2340 AND object_type = 'PA_TASKS'
2341 AND parent_structure_id = l_fin_struct_id
2342 UNION ALL
2343 SELECT p.long_name task_name, /* Bug 5345336 */
2344 p.segment1 task_number,
2345 0 task_id
2346 FROM pa_projects_all p
2347 WHERE p.project_id = p_version_info_rec.x_project_id) pt
2348 WHERE (inf.task_name IS NOT NULL
2349 AND inf.task_number IS NULL
2350 AND inf.task_name = pt.task_name) OR
2351 (inf.task_name IS NULL
2352 AND inf.task_number IS NOT NULL
2353 AND inf.task_number = pt.task_number) OR
2354 (inf.task_name IS NOT NULL
2355 AND inf.task_number IS NOT NULL
2356 AND inf.task_name = pt.task_name
2357 AND inf.task_number = pt.task_number)),
2358
2359 inf.change_reason_code = DECODE(inf.delete_flag,'Y',NULL,inf.change_reason_code),
2360 inf.quantity = DECODE(inf.delete_flag,'Y',NULL,inf.quantity),
2361 inf.raw_cost = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost),
2362 inf.raw_cost_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost_over_rate),
2363 inf.burdened_cost = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost),
2364 inf.burdened_cost_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost_over_rate),
2365 inf.revenue = DECODE(inf.delete_flag,'Y',NULL,inf.revenue),
2366 inf.bill_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.bill_over_rate ),
2367 inf.projfunc_cost_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_type),
2368 inf.projfunc_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_date_type),
2369 inf.projfunc_cost_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_exchange_rate ),
2370 inf.projfunc_cost_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_cost_rate_date),
2371 inf.project_cost_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_type),
2372 inf.project_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_date_type),
2373 inf.project_cost_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_exchange_rate),
2374 inf.project_cost_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_cost_rate_date),
2375 inf.projfunc_rev_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_type ),
2376 inf.projfunc_rev_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_date_type ),
2377 inf.projfunc_rev_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_exchange_rate ),
2378 inf.projfunc_rev_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rev_rate_date),
2379 inf.project_rev_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_type ),
2380 inf.project_rev_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_date_type ),
2381 inf.project_rev_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_exchange_rate ),
2382 inf.project_rev_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL), inf.project_rev_rate_date),
2383 inf.projfunc_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_type ),
2384 inf.projfunc_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_date_type ),
2385 inf.projfunc_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_exchange_rate ),
2386 inf.projfunc_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL), inf.projfunc_rate_date),
2387 inf.project_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_type ),
2388 inf.project_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_date_type ),
2389 inf.project_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_exchange_rate ),
2390 inf.project_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL), inf.project_rate_date),
2391 inf.pd_prd = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.pd_prd),
2392 inf.prd1 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd1 ),
2393 inf.prd2 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd2 ),
2394 inf.prd3 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd3 ),
2395 inf.prd4 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd4 ),
2396 inf.prd5 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd5 ),
2397 inf.prd6 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd6 ),
2398 inf.prd7 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd7 ),
2399 inf.prd8 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd8 ),
2400 inf.prd9 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd9 ),
2401 inf.prd10 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd10 ),
2402 inf.prd11 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd11 ),
2403 inf.prd12 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd12 ),
2404 inf.prd13 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd13 ),
2405 inf.prd14 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd14 ),
2406 inf.prd15 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd15 ),
2407 inf.prd16 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd16 ),
2408 inf.prd17 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd17 ),
2409 inf.prd18 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd18 ),
2410 inf.prd19 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd19 ),
2411 inf.prd20 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd20 ),
2412 inf.prd21 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd21 ),
2413 inf.prd22 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd22 ),
2414 inf.prd23 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd23 ),
2415 inf.prd24 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd24 ),
2416 inf.prd25 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd25 ),
2417 inf.prd26 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd26 ),
2418 inf.prd27 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd27 ),
2419 inf.prd28 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd28 ),
2420 inf.prd29 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd29 ),
2421 inf.prd30 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd30 ),
2422 inf.prd31 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd31 ),
2423 inf.prd32 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd32 ),
2424 inf.prd33 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd33 ),
2425 inf.prd34 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd34 ),
2426 inf.prd35 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd35 ),
2427 inf.prd36 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd36 ),
2428 inf.prd37 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd37 ),
2429 inf.prd38 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd38 ),
2430 inf.prd39 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd39 ),
2431 inf.prd40 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd40 ),
2432 inf.prd41 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd41 ),
2433 inf.prd42 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd42 ),
2434 inf.prd43 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd43 ),
2435 inf.prd44 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd44 ),
2436 inf.prd45 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd45 ),
2437 inf.prd46 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd46 ),
2438 inf.prd47 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd47 ),
2439 inf.prd48 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd48 ),
2440 inf.prd49 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd49 ),
2441 inf.prd50 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd50 ),
2442 inf.prd51 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd51 ),
2443 inf.prd52 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd52 ),
2444 inf.sd_prd = DECODE(inf.delete_flag,'Y',l_fnd_miss_num , inf.sd_prd),
2445 inf.resource_list_member_id = l_unct_rlm_id
2446 WHERE inf.run_id= p_run_id
2447 AND Nvl(p_request_id, -99) = Nvl(inf.request_id, -99);
2448 END IF; -- uncategorized flag
2449 EXCEPTION
2450 WHEN OTHERS THEN
2451 IF l_debug_mode = 'Y' THEN
2452 pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2453 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2454 END IF;
2455
2456 RAISE;
2457 END;
2458 IF l_debug_mode = 'Y' THEN
2459 pa_debug.g_err_stage := 'Task ids updated';
2460 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2461 END IF;
2462
2463 --log1('----- STAGE 2-------');
2464 -- checking, if the layout is periodic one
2465 IF l_debug_mode = 'Y' THEN
2466 pa_debug.g_err_stage := 'Checking for periodic setup';
2467 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2468 END IF;
2469
2470 BEGIN
2471 SELECT 'Y'
2472 INTO is_periodic_setup
2473 FROM DUAL
2474 WHERE EXISTS(SELECT 'X'
2475 FROM pa_fp_webadi_upload_inf
2476 WHERE amount_type_name IS NOT NULL
2477 AND run_id = p_run_id
2478 AND Nvl(p_request_id, -99) = Nvl(request_id, -99));
2479 EXCEPTION
2480 WHEN NO_DATA_FOUND THEN
2481 is_periodic_setup := 'N';
2482 END;
2483
2484 IF l_debug_mode = 'Y' THEN
2485 pa_debug.g_err_stage := 'is_periodic_setup: =' || is_periodic_setup;
2486 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2487 pa_debug.g_err_stage := 'Getting the fixed date spread curve id/name';
2488 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2489 END IF;
2490 --The following update on the interface will be used for
2491 ----Updating the error codes where task/resource info is missing
2492 ----Updating the amount type codes for the corresponding amount type names in case of periodic layout
2493 IF is_periodic_setup='Y' THEN
2494
2495 IF p_version_info_rec.x_plan_class_code='BUDGET' THEN
2496
2497 l_lookup_type := 'PA_FP_XL_ALL_BDGT_AMT_TYPES';
2498
2499 ELSE
2500
2501 l_lookup_type := 'PA_FP_XL_ALL_FCST_AMT_TYPES';
2502
2503 END IF;
2504
2505
2506 UPDATE pa_fp_webadi_upload_inf inf
2507 SET amount_type_code = (SELECT pl.lookup_code
2508 FROM pa_lookups pl,pa_fp_proj_xl_amt_types xlt
2509 WHERE lookup_type=l_lookup_type
2510 AND meaning=inf.amount_type_name
2511 AND xlt.project_id=p_version_info_rec.x_project_id
2512 AND xlt.fin_plan_type_id=p_version_info_rec.x_fin_plan_type_id
2513 AND xlt.option_type=p_version_info_rec.x_version_type
2514 AND xlt.amount_type_code=pl.lookup_code),
2515 val_error_flag = NVL(val_error_flag,
2516 DECODE(task_id,
2517 NULL,'Y',
2518 DECODE(resource_list_member_id,
2519 NULL,'Y',
2520 NULL))),
2521 val_error_code = NVL(val_error_code,
2522 DECODE(task_id,
2523 NULL,'INVALID_TASK_INFO',
2524 DECODE(resource_list_member_id,
2525 NULL,'INVALID_RESOURCE_INFO',
2526 NULL))),
2527 err_task_name = nvl(task_name,'-98'),
2528 err_task_number = nvl(task_number,'-98'),
2529 err_alias = nvl(resource_alias,'-98'),
2530 err_amount_type_code = nvl(amount_type_code,'-98')
2531 WHERE run_id=p_run_id
2532 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
2533
2534 ELSE --Non Periodic layout
2535
2536 UPDATE pa_fp_webadi_upload_inf inf
2537 SET val_error_flag = NVL(val_error_flag,
2538 DECODE(task_id,
2539 NULL,'Y',
2540 DECODE(resource_list_member_id,
2541 NULL,'Y',
2542 NULL))),
2543 val_error_code = NVL(val_error_code,
2544 DECODE(task_id,
2545 NULL,'INVALID_TASK_INFO',
2546 DECODE(resource_list_member_id,
2547 NULL,'INVALID_RESOURCE_INFO',
2548 NULL))),
2549 err_task_name = nvl(task_name,'-98'),
2550 err_task_number = nvl(task_number,'-98'),
2551 err_alias = nvl(resource_alias,'-98'),
2552 err_amount_type_code = nvl(amount_type_code,'-98')
2553 WHERE run_id=p_run_id
2554 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
2555
2556 END IF;
2557
2558 --log1('----- STAGE 5-------');
2559 IF l_debug_mode = 'Y' THEN
2560 pa_debug.g_err_stage := 'plan class code of the version: ' || p_version_info_rec.x_plan_class_code;
2561 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2562 END IF;
2563
2564
2565 IF p_version_info_rec.x_plan_class_code = PA_FP_CONSTANTS_PKG.G_PLAN_CLASS_FORECAST THEN
2566 is_forecast_version := 'Y';
2567
2568 -- calling an api to derive the etc_start_date
2569 IF l_debug_mode = 'Y' THEN
2570 pa_debug.g_err_stage := 'Calling pa_fp_gen_amount_utils.get_etc_start_date';
2571 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2572 END IF;
2573
2574 l_etc_start_date := pa_fp_gen_amount_utils.get_etc_start_date(p_version_info_rec.x_budget_version_id);
2575 END IF;
2576
2577 --log1('----- STAGE 6-------');
2578 BEGIN
2579 SELECT t.name,
2580 a.spread_curve_id
2581 INTO l_fixed_spread_curve_name,
2582 l_fixed_spread_curve_id
2583 FROM pa_spread_curves_b a,
2584 pa_spread_curves_tl t
2585 WHERE a.spread_curve_id = t.spread_curve_id
2586 AND a.spread_curve_code = 'FIXED_DATE'
2587 AND t.language = userenv('LANG');
2588 EXCEPTION
2589 WHEN OTHERS THEN
2590 IF l_debug_mode = 'Y' THEN
2591 pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2592 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2593 END IF;
2594
2595 RAISE;
2596 END;
2597 --log1('----- STAGE 7-------');
2598 IF is_periodic_setup = 'Y' THEN
2599 /* The structure of the both tables for start date and end date table would be as follows:
2600 * - If the number of flexible periods shown on the layout is n, then the first n elements
2601 * in each of the tables would contain corresponding start date/end date of a period whose
2602 * number would be specified by the index.
2603 */
2604
2605 l_prd_start_date_tbl := p_prd_start_date_tbl;
2606 l_prd_end_date_tbl := p_prd_end_date_tbl;
2607
2608 --log1('--p_prd_start_date_tbl.COUNT-- ' || p_prd_start_date_tbl.COUNT);
2609 l_original_prd_count := p_prd_start_date_tbl.COUNT;
2610 l_int_new_prd_count := 52 - (l_original_prd_count);
2611 IF l_int_new_prd_count > 0 THEN
2612 -- extending the period start/end date tables to have total 52 periods
2613 l_prd_start_date_tbl.EXTEND(l_int_new_prd_count);
2614 l_prd_end_date_tbl.EXTEND(l_int_new_prd_count);
2615 END IF;
2616 END IF;
2617
2618 -- initializing the conversion attributes for ALL version
2619 -- and for periodic layouts
2620
2621 IF is_periodic_setup = 'Y' THEN
2622 IF p_version_info_rec.x_version_type = 'ALL' AND
2623 p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
2624
2625 l_conv_attrb_displayed := conv_attributes_displayed(p_run_id => p_run_id);
2626
2627 BEGIN
2628 SELECT project_cost_rate_type,
2629 project_cost_rate_date_type,
2630 project_cost_rate_date,
2631 projfunc_cost_rate_type,
2632 projfunc_cost_rate_date_type,
2633 projfunc_cost_rate_date,
2634 project_rev_rate_type,
2635 project_rev_rate_date_type,
2636 project_rev_rate_date,
2637 projfunc_rev_rate_type,
2638 projfunc_rev_rate_date_type,
2639 projfunc_rev_rate_date
2640 INTO d_project_cost_rate_type,
2641 d_project_cost_rate_date_type,
2642 d_project_cost_rate_date,
2643 d_projfunc_cost_rate_type,
2644 d_projfunc_cost_rate_date_type,
2645 d_projfunc_cost_rate_date,
2646 d_project_rev_rate_type,
2647 d_project_rev_rate_date_type,
2648 d_project_rev_rate_date,
2649 d_projfunc_rev_rate_type,
2650 d_projfunc_rev_rate_date_type,
2651 d_projfunc_rev_rate_date
2652 FROM pa_proj_fp_options
2653 WHERE fin_plan_version_id = p_version_info_rec.x_budget_version_id
2654 AND fin_plan_preference_code = 'COST_AND_REV_SAME';
2655 EXCEPTION
2656 WHEN OTHERS THEN
2657 IF l_debug_mode = 'Y' THEN
2658 pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2659 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2660 END IF;
2661
2662 RAISE;
2663 END;
2664
2665 -- selecting the exchange rates for all the transaction currencies available
2666 -- for the version
2667 BEGIN
2668 SELECT txn_currency_code,
2669 project_cost_exchange_rate,
2670 project_rev_exchange_rate,
2671 projfunc_cost_exchange_rate,
2672 projfunc_rev_exchange_rate
2673 BULK COLLECT INTO
2674 d_txn_curr_tab,
2675 d_project_cost_exc_rate_tab,
2676 d_project_rev_exc_rate_tab,
2677 d_projfunc_cost_exc_rate_tab,
2678 d_projfunc_rev_exc_rate_tab
2679 FROM pa_fp_txn_currencies
2680 WHERE proj_fp_options_id = p_version_info_rec.x_proj_fp_options_id;
2681 EXCEPTION
2682 WHEN OTHERS THEN
2683 IF l_debug_mode = 'Y' THEN
2684 pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2685 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2686 END IF;
2687
2688 RAISE;
2689 END;
2690 END IF;
2691 END IF;
2692 -- initializing l_plan_trans_attr_copied_flag to N
2693 l_plan_trans_attr_copied_flag := 'N';
2694 l_cost_conv_attr_copied_flag := 'N';
2695 l_rev_conv_attr_copied_flag := 'N';
2696 IF l_debug_mode = 'Y' THEN
2697 pa_debug.g_err_stage := 'l_plan_trans_attr_copied_flag initialized to N';
2698 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2699 pa_debug.g_err_stage := 'Opening cursor inf_tbl_data_csr';
2700 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2701 END IF;
2702
2703 --Initialize the OUT variables
2704 x_etc_quantity_tbl := SYSTEM.pa_num_tbl_type();
2705 x_etc_raw_cost_tbl := SYSTEM.pa_num_tbl_type();
2706 x_etc_burdened_cost_tbl := SYSTEM.pa_num_tbl_type();
2707 x_etc_revenue_tbl := SYSTEM.pa_num_tbl_type();
2708
2709 --log1('----- STAGE 8-------');
2710 IF p_version_info_rec.x_version_type = 'COST' THEN
2711 l_allow_qty_flag := p_version_info_rec.x_cost_quantity_flag;
2712 ELSIF p_version_info_rec.x_version_type = 'REVENUE' THEN
2713 l_allow_qty_flag := p_version_info_rec.x_rev_quantity_flag;
2714 ELSIF p_version_info_rec.x_version_type = 'ALL' THEN
2715 l_allow_qty_flag := p_version_info_rec.x_all_quantity_flag;
2716 END IF;
2717
2718 IF is_periodic_setup = 'Y' THEN
2719
2720 -- deriving the start/end date of the first period that falls before the first period
2721 -- displayed in the period mask
2722 --log1('----- STAGE 8.0.1------- '||1);
2723 --log1('----- STAGE 8.0.2------- '||p_prd_start_date_tbl(1));
2724 OPEN l_first_pd_st_en_dt_csr(p_org_id,
2725 p_prd_start_date_tbl(1),
2726 p_version_info_rec.x_time_phased_code);
2727 FETCH l_first_pd_st_en_dt_csr
2728 INTO l_first_pd_st_en_dt_rec;
2729 l_first_pd_bf_pm_st_dt := l_first_pd_st_en_dt_rec.start_date;
2730 l_first_pd_bf_pm_en_dt := l_first_pd_st_en_dt_rec.end_date;
2731 CLOSE l_first_pd_st_en_dt_csr;
2732
2733 -- deriving the start/end date of the last period that falls after the last period
2734 -- displayed in the period mask
2735 --log1('----- STAGE 8.1.1------- '||l_original_prd_count);
2736 --log1('----- STAGE 8.1.2------- '||p_prd_end_date_tbl(l_original_prd_count));
2737 OPEN l_last_pd_st_en_dt_csr(p_org_id,
2738 p_prd_end_date_tbl(l_original_prd_count),
2739 p_version_info_rec.x_time_phased_code);
2740 FETCH l_last_pd_st_en_dt_csr
2741 INTO l_last_pd_st_en_dt_rec;
2742 l_last_pd_af_pm_st_dt := l_last_pd_st_en_dt_rec.start_date;
2743 l_last_pd_af_pm_en_dt := l_last_pd_st_en_dt_rec.end_date;
2744 CLOSE l_last_pd_st_en_dt_csr;
2745
2746 x_first_pd_bf_pm_en_dt := l_first_pd_bf_pm_en_dt;
2747 x_last_pd_af_pm_st_dt := l_last_pd_af_pm_st_dt;
2748
2749 END IF;
2750
2751 -- initializing the conversion attributes for the firsr record for a periodic layout
2752 -- for a ALL version, these values would be overwritten
2753 IF is_periodic_setup = 'Y' THEN
2754 IF p_version_info_rec.x_version_type = 'ALL' AND
2755 p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
2756
2757 -- bug 4479036: need to assign these default values only if the
2758 -- conversion attribute columns are selected in the layout.
2759 -- otherwise keep them as null.
2760 IF l_conv_attrb_displayed = 'Y' THEN
2761 l_project_cost_rate_type := d_project_cost_rate_type ;
2762 l_project_cost_rate_date_type := d_project_cost_rate_date_type ;
2763 l_project_cost_rate_date := d_project_cost_rate_date ;
2764 l_projfunc_cost_rate_type := d_projfunc_cost_rate_type ;
2765 l_projfunc_cost_rate_date_type:= d_projfunc_cost_rate_date_type;
2766 l_projfunc_cost_rate_date := d_projfunc_cost_rate_date ;
2767
2768 l_project_rev_rate_type := d_project_rev_rate_type ;
2769 l_project_rev_rate_date_type := d_project_rev_rate_date_type ;
2770 l_project_rev_rate_date := d_project_rev_rate_date ;
2771 l_projfunc_rev_rate_type := d_projfunc_rev_rate_type ;
2772 l_projfunc_rev_rate_date_type := d_projfunc_rev_rate_date_type ;
2773 l_projfunc_rev_rate_date := d_projfunc_rev_rate_date ;
2774
2775 IF l_inf_tbl_data_curr_rec.txn_currency_code IS NOT NULL THEN
2776 IF d_txn_curr_tab.COUNT > 0 THEN
2777 FOR i IN d_txn_curr_tab.FIRST .. d_txn_curr_tab.LAST LOOP
2778 IF d_txn_curr_tab(i) = l_inf_tbl_data_curr_rec.txn_currency_code THEN
2779 l_project_cost_exchange_rate := d_project_cost_exc_rate_tab(i);
2780 l_projfunc_cost_exchange_rate := d_projfunc_cost_exc_rate_tab(i);
2781 l_project_rev_exchange_rate := d_project_rev_exc_rate_tab(i);
2782 l_projfunc_rev_exchange_rate := d_projfunc_rev_exc_rate_tab(i);
2783
2784 EXIT;
2785 END IF;
2786 END LOOP;
2787 END IF;
2788 END IF;
2789 END IF;
2790 END IF;
2791 END IF;
2792 --log1('----- STAGE 8.2.0------- ');
2793
2794 l_inf_tbl_data_prev_rec := NULL;
2795 IF inf_tbl_data_csr%ISOPEN THEN
2796
2797 CLOSE inf_tbl_data_csr;
2798
2799 END IF;
2800
2801 OPEN inf_tbl_data_csr
2802 (c_run_id => p_run_id,
2803 c_allow_qty_flag => l_allow_qty_flag,
2804 c_allow_raw_cost_flag => p_version_info_rec.x_raw_cost_flag,
2805 c_allow_burd_cost_flag => p_version_info_rec.x_burdened_flag,
2806 c_allow_revenue_flag => p_version_info_rec.x_revenue_flag,
2807 c_allow_raw_cost_rate_flag => p_version_info_rec.x_cost_rate_flag,
2808 c_allow_burd_cost_rate_flag => p_version_info_rec.x_burden_rate_flag,
2809 c_allow_bill_rate_flag => p_version_info_rec.x_bill_rate_flag,
2810 c_project_id => p_version_info_rec.x_project_id,
2811 c_fin_plan_type_id => p_version_info_rec.x_fin_plan_type_id,
2812 c_version_type => p_version_info_rec.x_version_type,
2813 c_request_id => p_request_id);
2814 --log1('----- STAGE 8.2.1------- ');
2815
2816 --Added for bug#4488926
2817 IF(p_version_info_rec.x_time_phased_code is null)
2818 THEN
2819 l_period_time_phased_code := PA_FIN_PLAN_UTILS.Get_Time_Phased_code(p_version_info_rec.x_budget_version_id);
2820 ELSE
2821 l_period_time_phased_code := p_version_info_rec.x_time_phased_code;
2822 END IF;
2823
2824 FETCH inf_tbl_data_csr INTO l_inf_tbl_data_curr_rec;
2825 --log1('----- STAGE 8.2.2------- ');
2826 LOOP
2827 --log1('----- STAGE 8.2.3------- l_inf_tbl_data_curr_rec.task_id '||l_inf_tbl_data_curr_rec.task_id);
2828 --log1('----- STAGE 8.2.4-------');
2829 -- resetting budget line start date/ end date varibales
2830 l_bdgt_line_start_date := null;
2831 l_bdgt_line_end_date := null;
2832
2833 --log1('----- STAGE 8.2.4.0.1-------');
2834 --Initialize the variables used for processing
2835 IF l_inf_tbl_data_curr_rec.task_id IS NULL OR
2836 (l_inf_tbl_data_prev_rec.task_id IS NOT NULL AND
2837 (l_inf_tbl_data_prev_rec.task_id <> l_inf_tbl_data_curr_rec.task_id OR
2838 l_inf_tbl_data_prev_rec.resource_list_member_id <> l_inf_tbl_data_curr_rec.resource_list_member_id OR
2839 Nvl(l_inf_tbl_data_prev_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') OR
2840 NVL(l_inf_tbl_data_prev_rec.amount_type_code,'-99') <> NVL(l_inf_tbl_data_curr_rec.amount_type_code,'-99'))) THEN
2841
2842 --log1('----- STAGE 8.2.4.0.2-------');
2843 --Reset Planning Transaction Level Variables
2844 IF l_inf_tbl_data_curr_rec.task_id IS NULL OR
2845 l_inf_tbl_data_prev_rec.task_id <> l_inf_tbl_data_curr_rec.task_id OR
2846 l_inf_tbl_data_prev_rec.resource_list_member_id <> l_inf_tbl_data_curr_rec.resource_list_member_id OR
2847 Nvl(l_inf_tbl_data_prev_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') THEN
2848
2849 l_plan_trans_attr_copied_flag := 'N';
2850 l_min_bdgt_line_start_date := NULL;
2851 l_max_bdgt_line_end_date := NULL;
2852
2853 l_project_cost_rate_type := NULL;
2854 l_project_cost_rate_date_type := NULL;
2855 l_project_cost_rate_date := NULL;
2856 l_project_cost_exchange_rate := NULL;
2857 l_projfunc_cost_rate_type := NULL;
2858 l_projfunc_cost_rate_date_type:= NULL;
2859 l_projfunc_cost_rate_date := NULL;
2860 l_projfunc_cost_exchange_rate := NULL;
2861
2862 l_project_rev_rate_type := NULL;
2863 l_project_rev_rate_date_type := NULL;
2864 l_project_rev_rate_date := NULL;
2865 l_project_rev_exchange_rate := NULL;
2866 l_projfunc_rev_rate_type := NULL;
2867 l_projfunc_rev_rate_date_type:= NULL;
2868 l_projfunc_rev_rate_date := NULL;
2869 l_projfunc_rev_exchange_rate := NULL;
2870
2871 l_cost_conv_attr_copied_flag := 'N';
2872 l_rev_conv_attr_copied_flag := 'N';
2873 --log1('----- STAGE 8.2.4.0.3-------');
2874
2875 -- initializing the conversion attributes for subsequent reords for periodic layout
2876 -- for a ALL version, these values would be overwritten
2877 IF is_periodic_setup = 'Y' THEN
2878 IF p_version_info_rec.x_version_type = 'ALL' AND
2879 p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
2880 -- bug 4479036: need to assign these default values only if the
2881 -- conversion attribute columns are selected in the layout.
2882 -- otherwise keep them as null.
2883 IF l_conv_attrb_displayed = 'Y' THEN
2884 l_project_cost_rate_type := d_project_cost_rate_type ;
2885 l_project_cost_rate_date_type := d_project_cost_rate_date_type ;
2886 l_project_cost_rate_date := d_project_cost_rate_date ;
2887 l_projfunc_cost_rate_type := d_projfunc_cost_rate_type ;
2888 l_projfunc_cost_rate_date_type:= d_projfunc_cost_rate_date_type;
2889 l_projfunc_cost_rate_date := d_projfunc_cost_rate_date ;
2890
2891 l_project_rev_rate_type := d_project_rev_rate_type ;
2892 l_project_rev_rate_date_type := d_project_rev_rate_date_type ;
2893 l_project_rev_rate_date := d_project_rev_rate_date ;
2894 l_projfunc_rev_rate_type := d_projfunc_rev_rate_type ;
2895 l_projfunc_rev_rate_date_type := d_projfunc_rev_rate_date_type ;
2896 l_projfunc_rev_rate_date := d_projfunc_rev_rate_date ;
2897
2898 IF Nvl(l_inf_tbl_data_prev_rec.txn_currency_code, '-99') <>
2899 Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') THEN
2900 IF d_txn_curr_tab.COUNT > 0 THEN
2901 FOR i IN d_txn_curr_tab.FIRST .. d_txn_curr_tab.LAST LOOP
2902 IF d_txn_curr_tab(i) = l_inf_tbl_data_curr_rec.txn_currency_code THEN
2903 l_project_cost_exchange_rate := d_project_cost_exc_rate_tab(i);
2904 l_projfunc_cost_exchange_rate := d_projfunc_cost_exc_rate_tab(i);
2905 l_project_rev_exchange_rate := d_project_rev_exc_rate_tab(i);
2906 l_projfunc_rev_exchange_rate := d_projfunc_rev_exc_rate_tab(i);
2907
2908 EXIT;
2909 END IF;
2910 END LOOP;
2911 END IF;
2912 END IF;
2913 END IF;
2914 END IF;
2915 END IF;
2916 END IF;
2917
2918 --log1('----- STAGE 8.2.4.0.4-------');
2919 --Reset the Resource assignment level Variables
2920 IF l_inf_tbl_data_curr_rec.task_id IS NULL OR
2921 l_inf_tbl_data_curr_rec.task_id <> l_inf_tbl_data_prev_rec.task_id OR
2922 l_inf_tbl_data_curr_rec.resource_list_member_id <> l_inf_tbl_data_prev_rec.resource_list_member_id THEN
2923 -- nulling out the fixed spread curve period counter
2924 l_fix_sc_amt_pd_curr_index := null;
2925
2926 l_end_ra_index := bl_count -1;
2927 --log1('----- STAGE 8.2.4.0.5-------'||l_start_ra_index);
2928 --log1('----- STAGE 8.2.4.0.6-------'||l_end_ra_index);
2929 --log1('----- STAGE 8.2.4.0.7-------'||l_min_ra_plan_start_date);
2930 --log1('----- STAGE 8.2.4.0.8-------'||l_max_ra_plan_end_date);
2931
2932 IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
2933 l_cached_ra_id_tbl(l_cached_ra_index) = -1 THEN
2934 FOR kk IN l_start_ra_index..l_end_ra_index LOOP
2935 l_plan_start_date_tbl(kk) := l_min_ra_plan_start_date;
2936 l_plan_end_date_tbl(kk) := l_max_ra_plan_end_date;
2937 END LOOP;
2938 END IF;
2939 l_start_ra_index := bl_count;
2940 l_min_ra_plan_start_date := null;
2941 l_max_ra_plan_end_date := null;
2942 END IF;
2943
2944 END IF;--IF l_inf_tbl_data_prev_rec.task_id IS NOT NULL AND
2945
2946 EXIT WHEN l_inf_tbl_data_curr_rec.task_id IS NULL;
2947 x_inf_tbl_rec_tbl (x_inf_tbl_rec_tbl.COUNT + 1):= l_inf_tbl_data_curr_rec;
2948 BEGIN
2949 --log1('----- STAGE 9-------');
2950 -- preparing the index to be used for cached RA id table
2951 l_cached_ra_index := 'T' || l_inf_tbl_data_curr_rec.task_id || 'R' || l_inf_tbl_data_curr_rec.resource_list_member_id;
2952
2953 -- checking if the RA is an existing one or a new one
2954 IF NOT l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) THEN
2955 -- deriving planning dates and spread curve information from pa_resource_assignments for existing RAs
2956 -- or from pa_resource_list_members for new RAs.
2957 BEGIN
2958 SELECT resource_assignment_id,
2959 planning_start_date,
2960 planning_end_date,
2961 spread_curve_id,
2962 sp_fixed_date,
2963 rbs_element_id,
2964 resource_class_code,
2965 rate_based_flag
2966 INTO l_ra_id,
2967 l_plan_start_date,
2968 l_plan_end_date,
2969 l_spread_curve_id,
2970 l_sp_fixed_date,
2971 l_rbs_elem_id,
2972 l_res_class_code,
2973 l_rate_based_flag
2974 FROM pa_resource_assignments
2975 WHERE project_id = p_version_info_rec.x_project_id
2976 AND budget_version_id = p_version_info_rec.x_budget_version_id
2977 AND task_id = l_inf_tbl_data_curr_rec.task_id
2978 AND resource_list_member_id = l_inf_tbl_data_curr_rec.resource_list_member_id
2979 AND project_assignment_id = -1;
2980
2981 l_cached_ra_id_tbl(l_cached_ra_index) := l_ra_id;
2982 EXCEPTION
2983 WHEN NO_DATA_FOUND THEN
2984 --log1('----- STAGE 10-------');
2985 BEGIN
2986 SELECT spread_curve_id
2987 INTO l_spread_curve_id
2988 FROM pa_resource_list_members
2989 WHERE resource_list_member_id = l_inf_tbl_data_curr_rec.resource_list_member_id;
2990 EXCEPTION
2991 WHEN OTHERS THEN
2992 IF l_debug_mode = 'Y' THEN
2993 pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2994 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2995 END IF;
2996
2997 RAISE;
2998 END;
2999 l_ra_id := NULL;
3000 l_plan_start_date := NULL;
3001 l_plan_end_date := NULL;
3002 l_sp_fixed_date := NULL;
3003 l_rbs_elem_id := NULL;
3004 l_res_class_code := NULL;
3005 l_rate_based_flag := NULL;
3006 -- storing -1 for the index of corresoponding task/resource to indicate new RA
3007 l_cached_ra_id_tbl(l_cached_ra_index) := -1;
3008 END;
3009 --log1('----- STAGE 11-------');
3010 END IF;
3011
3012 -- initializing the local temp variables
3013 l_raw_cost := NULL;
3014 l_burdened_cost := NULL;
3015 l_revenue := NULL;
3016 l_quantity := NULL;
3017 l_etc_quantity := NULL;
3018 l_etc_raw_cost := NULL;
3019 l_etc_burdened_cost := NULL;
3020 l_etc_revenue := NULL;
3021 l_tmp_sum_amt := NULL;
3022 l_not_null_period_cnt := NULL;
3023
3024 -- budget line dates processing starts
3025 IF l_inf_tbl_data_curr_rec.delete_flag = 'Y' THEN
3026 l_bdgt_line_start_date := l_plan_start_date;
3027 l_bdgt_line_end_date := l_plan_end_date;
3028 ELSE
3029 IF is_periodic_setup = 'Y' THEN
3030 IF is_forecast_version = 'Y' THEN
3031 IF l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) AND
3032 l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3033 l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3034 l_bdgt_line_start_date := l_prd_start_date_tbl(1);
3035 ELSIF l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) AND
3036 l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3037 l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3038 l_bdgt_line_start_date := l_prd_start_date_tbl(2);
3039 ELSIF l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) AND
3040 l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3041 l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3042 l_bdgt_line_start_date := l_prd_start_date_tbl(3);
3043 ELSIF l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) AND
3044 l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3045 l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3046 l_bdgt_line_start_date := l_prd_start_date_tbl(4);
3047 ELSIF l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) AND
3048 l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3049 l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3050 l_bdgt_line_start_date := l_prd_start_date_tbl(5);
3051 ELSIF l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) AND
3052 l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3053 l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3054 l_bdgt_line_start_date := l_prd_start_date_tbl(6);
3055 ELSIF l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) AND
3056 l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3057 l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3058 l_bdgt_line_start_date := l_prd_start_date_tbl(7);
3059 ELSIF l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) AND
3060 l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3061 l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3062 l_bdgt_line_start_date := l_prd_start_date_tbl(8);
3063 ELSIF l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) AND
3064 l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3065 l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3066 l_bdgt_line_start_date := l_prd_start_date_tbl(9);
3067 ELSIF l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) AND
3068 l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3069 l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3070 l_bdgt_line_start_date := l_prd_start_date_tbl(10);
3071 ELSIF l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) AND
3072 l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3073 l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3074 l_bdgt_line_start_date := l_prd_start_date_tbl(11);
3075 ELSIF l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) AND
3076 l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3077 l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3078 l_bdgt_line_start_date := l_prd_start_date_tbl(12);
3079 ELSIF l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) AND
3080 l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3081 l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3082 l_bdgt_line_start_date := l_prd_start_date_tbl(13);
3083 ELSIF l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) AND
3084 l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3085 l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3086 l_bdgt_line_start_date := l_prd_start_date_tbl(14);
3087 ELSIF l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) AND
3088 l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3089 l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3090 l_bdgt_line_start_date := l_prd_start_date_tbl(15);
3091 ELSIF l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) AND
3092 l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3093 l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3094 l_bdgt_line_start_date := l_prd_start_date_tbl(16);
3095 ELSIF l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) AND
3096 l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3097 l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3098 l_bdgt_line_start_date := l_prd_start_date_tbl(17);
3099 ELSIF l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) AND
3100 l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3101 l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3102 l_bdgt_line_start_date := l_prd_start_date_tbl(18);
3103 ELSIF l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) AND
3104 l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3105 l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3106 l_bdgt_line_start_date := l_prd_start_date_tbl(19);
3107 ELSIF l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) AND
3108 l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3109 l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3110 l_bdgt_line_start_date := l_prd_start_date_tbl(20);
3111 ELSIF l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) AND
3112 l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3113 l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3114 l_bdgt_line_start_date := l_prd_start_date_tbl(21);
3115 ELSIF l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) AND
3116 l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3117 l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3118 l_bdgt_line_start_date := l_prd_start_date_tbl(22);
3119 ELSIF l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) AND
3120 l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3121 l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3122 l_bdgt_line_start_date := l_prd_start_date_tbl(23);
3123 ELSIF l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(24) - 1)) AND
3124 l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3125 l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3126 l_bdgt_line_start_date := l_prd_start_date_tbl(24);
3127 ELSIF l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) AND
3128 l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3129 l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3130 l_bdgt_line_start_date := l_prd_start_date_tbl(25);
3131 ELSIF l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) AND
3132 l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3133 l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3134 l_bdgt_line_start_date := l_prd_start_date_tbl(26);
3135 ELSIF l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) AND
3136 l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3137 l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3138 l_bdgt_line_start_date := l_prd_start_date_tbl(27);
3139 ELSIF l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) AND
3140 l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3141 l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3142 l_bdgt_line_start_date := l_prd_start_date_tbl(28);
3143 ELSIF l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) AND
3144 l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3145 l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3146 l_bdgt_line_start_date := l_prd_start_date_tbl(29);
3147 ELSIF l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) AND
3148 l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3149 l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3150 l_bdgt_line_start_date := l_prd_start_date_tbl(30);
3151 ELSIF l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 0)) AND
3152 l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3153 l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3154 l_bdgt_line_start_date := l_prd_start_date_tbl(31);
3155 ELSIF l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) AND
3156 l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3157 l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3158 l_bdgt_line_start_date := l_prd_start_date_tbl(32);
3159 ELSIF l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) AND
3160 l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3161 l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3162 l_bdgt_line_start_date := l_prd_start_date_tbl(33);
3163 ELSIF l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) AND
3164 l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3165 l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3166 l_bdgt_line_start_date := l_prd_start_date_tbl(34);
3167 ELSIF l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) AND
3168 l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3169 l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3170 l_bdgt_line_start_date := l_prd_start_date_tbl(35);
3171 ELSIF l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) AND
3172 l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3173 l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3174 l_bdgt_line_start_date := l_prd_start_date_tbl(36);
3175 ELSIF l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) AND
3176 l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3177 l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3178 l_bdgt_line_start_date := l_prd_start_date_tbl(37);
3179 ELSIF l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) AND
3180 l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3181 l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3182 l_bdgt_line_start_date := l_prd_start_date_tbl(38);
3183 ELSIF l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) AND
3184 l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3185 l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3186 l_bdgt_line_start_date := l_prd_start_date_tbl(39);
3187 ELSIF l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) AND
3188 l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3189 l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3190 l_bdgt_line_start_date := l_prd_start_date_tbl(40);
3191 ELSIF l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) AND
3192 l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3193 l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3194 l_bdgt_line_start_date := l_prd_start_date_tbl(41);
3195 ELSIF l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) AND
3196 l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3197 l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3198 l_bdgt_line_start_date := l_prd_start_date_tbl(42);
3199 ELSIF l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) AND
3200 l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3201 l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3202 l_bdgt_line_start_date := l_prd_start_date_tbl(43);
3203 ELSIF l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) AND
3204 l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3205 l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3206 l_bdgt_line_start_date := l_prd_start_date_tbl(44);
3207 ELSIF l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) AND
3208 l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
3209 l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
3210 l_bdgt_line_start_date := l_prd_start_date_tbl(45);
3211 ELSIF l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) AND
3212 l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3213 l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3214 l_bdgt_line_start_date := l_prd_start_date_tbl(46);
3215 ELSIF l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) AND
3216 l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3217 l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3218 l_bdgt_line_start_date := l_prd_start_date_tbl(47);
3219 ELSIF l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) AND
3220 l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3221 l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3222 l_bdgt_line_start_date := l_prd_start_date_tbl(48);
3223 ELSIF l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) AND
3224 l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3225 l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3226 l_bdgt_line_start_date := l_prd_start_date_tbl(49);
3227 ELSIF l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) AND
3228 l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3229 l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3230 l_bdgt_line_start_date := l_prd_start_date_tbl(50);
3231 ELSIF l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) AND
3232 l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3233 l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3234 l_bdgt_line_start_date := l_prd_start_date_tbl(51);
3235 ELSIF l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) AND
3236 l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3237 l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3238 l_bdgt_line_start_date := l_prd_start_date_tbl(52);
3239 END IF;
3240 ELSE -- budget version
3241 IF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3242 l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3243 l_bdgt_line_start_date := l_prd_start_date_tbl(1);
3244 ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3245 l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3246 l_bdgt_line_start_date := l_prd_start_date_tbl(2);
3247 ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3248 l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3249 l_bdgt_line_start_date := l_prd_start_date_tbl(3);
3250 ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3251 l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3252 l_bdgt_line_start_date := l_prd_start_date_tbl(4);
3253 ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3254 l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3255 l_bdgt_line_start_date := l_prd_start_date_tbl(5);
3256 ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3257 l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3258 l_bdgt_line_start_date := l_prd_start_date_tbl(6);
3259 ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3260 l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3261 l_bdgt_line_start_date := l_prd_start_date_tbl(7);
3262 ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3263 l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3264 l_bdgt_line_start_date := l_prd_start_date_tbl(8);
3265 ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3266 l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3267 l_bdgt_line_start_date := l_prd_start_date_tbl(9);
3268 ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3269 l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3270 l_bdgt_line_start_date := l_prd_start_date_tbl(10);
3271 ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3272 l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3273 l_bdgt_line_start_date := l_prd_start_date_tbl(11);
3274 ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3275 l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3276 l_bdgt_line_start_date := l_prd_start_date_tbl(12);
3277 ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3278 l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3279 l_bdgt_line_start_date := l_prd_start_date_tbl(13);
3280 ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3281 l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3282 l_bdgt_line_start_date := l_prd_start_date_tbl(14);
3283 ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3284 l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3285 l_bdgt_line_start_date := l_prd_start_date_tbl(15);
3286 ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3287 l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3288 l_bdgt_line_start_date := l_prd_start_date_tbl(16);
3289 ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3290 l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3291 l_bdgt_line_start_date := l_prd_start_date_tbl(17);
3292 ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3293 l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3294 l_bdgt_line_start_date := l_prd_start_date_tbl(18);
3295 ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3296 l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3297 l_bdgt_line_start_date := l_prd_start_date_tbl(19);
3298 ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3299 l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3300 l_bdgt_line_start_date := l_prd_start_date_tbl(20);
3301 ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3302 l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3303 l_bdgt_line_start_date := l_prd_start_date_tbl(21);
3304 ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3305 l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3306 l_bdgt_line_start_date := l_prd_start_date_tbl(22);
3307 ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3308 l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3309 l_bdgt_line_start_date := l_prd_start_date_tbl(23);
3310 ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3311 l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3312 l_bdgt_line_start_date := l_prd_start_date_tbl(24);
3313 ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3314 l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3315 l_bdgt_line_start_date := l_prd_start_date_tbl(25);
3316 ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3317 l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3318 l_bdgt_line_start_date := l_prd_start_date_tbl(26);
3319 ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3320 l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3321 l_bdgt_line_start_date := l_prd_start_date_tbl(27);
3322 ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3323 l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3324 l_bdgt_line_start_date := l_prd_start_date_tbl(28);
3325 ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3326 l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3327 l_bdgt_line_start_date := l_prd_start_date_tbl(29);
3328 ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3329 l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3330 l_bdgt_line_start_date := l_prd_start_date_tbl(30);
3331 ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3332 l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3333 l_bdgt_line_start_date := l_prd_start_date_tbl(31);
3334 ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3335 l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3336 l_bdgt_line_start_date := l_prd_start_date_tbl(32);
3337 ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3338 l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3339 l_bdgt_line_start_date := l_prd_start_date_tbl(33);
3340 ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3341 l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3342 l_bdgt_line_start_date := l_prd_start_date_tbl(34);
3343 ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3344 l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3345 l_bdgt_line_start_date := l_prd_start_date_tbl(35);
3346 ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3347 l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3348 l_bdgt_line_start_date := l_prd_start_date_tbl(36);
3349 ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3350 l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3351 l_bdgt_line_start_date := l_prd_start_date_tbl(37);
3352 ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3353 l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3354 l_bdgt_line_start_date := l_prd_start_date_tbl(38);
3355 ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3356 l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3357 l_bdgt_line_start_date := l_prd_start_date_tbl(39);
3358 ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3359 l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3360 l_bdgt_line_start_date := l_prd_start_date_tbl(40);
3361 ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3362 l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3363 l_bdgt_line_start_date := l_prd_start_date_tbl(41);
3364 ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3365 l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3366 l_bdgt_line_start_date := l_prd_start_date_tbl(42);
3367 ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3368 l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3369 l_bdgt_line_start_date := l_prd_start_date_tbl(43);
3370 ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3371 l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3372 l_bdgt_line_start_date := l_prd_start_date_tbl(44);
3373 ELSIF l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
3374 l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
3375 l_bdgt_line_start_date := l_prd_start_date_tbl(45);
3376 ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3377 l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3378 l_bdgt_line_start_date := l_prd_start_date_tbl(46);
3379 ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3380 l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3381 l_bdgt_line_start_date := l_prd_start_date_tbl(47);
3382 ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3383 l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3384 l_bdgt_line_start_date := l_prd_start_date_tbl(48);
3385 ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3386 l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3387 l_bdgt_line_start_date := l_prd_start_date_tbl(49);
3388 ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3389 l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3390 l_bdgt_line_start_date := l_prd_start_date_tbl(50);
3391 ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3392 l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3393 l_bdgt_line_start_date := l_prd_start_date_tbl(51);
3394 ELSIF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3395 l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3396 l_bdgt_line_start_date := l_prd_start_date_tbl(52);
3397 END IF;
3398 END IF;
3399
3400 -- for budget line end dates
3401 IF is_forecast_version = 'Y' THEN
3402 IF l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) AND
3403 l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3404 l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3405 l_bdgt_line_end_date := l_prd_end_date_tbl(52);
3406 ELSIF l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) AND
3407 l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3408 l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3409 l_bdgt_line_end_date := l_prd_end_date_tbl(51);
3410 ELSIF l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) AND
3411 l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3412 l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3413 l_bdgt_line_end_date := l_prd_end_date_tbl(50);
3414 ELSIF l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) AND
3415 l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3416 l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3417 l_bdgt_line_end_date := l_prd_end_date_tbl(49);
3418 ELSIF l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) AND
3419 l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3420 l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3421 l_bdgt_line_end_date := l_prd_end_date_tbl(48);
3422 ELSIF l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) AND
3423 l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3424 l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3425 l_bdgt_line_end_date := l_prd_end_date_tbl(47);
3426 ELSIF l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) AND
3427 l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3428 l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3429 l_bdgt_line_end_date := l_prd_end_date_tbl(46);
3430 ELSIF l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) AND
3431 l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
3432 l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
3433 l_bdgt_line_end_date := l_prd_end_date_tbl(45);
3434 ELSIF l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) AND
3435 l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3436 l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3437 l_bdgt_line_end_date := l_prd_end_date_tbl(44);
3438 ELSIF l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) AND
3439 l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3440 l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3441 l_bdgt_line_end_date := l_prd_end_date_tbl(43);
3442 ELSIF l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) AND
3443 l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3444 l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3445 l_bdgt_line_end_date := l_prd_end_date_tbl(42);
3446 ELSIF l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) AND
3447 l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3448 l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3449 l_bdgt_line_end_date := l_prd_end_date_tbl(41);
3450 ELSIF l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) AND
3451 l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3452 l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3453 l_bdgt_line_end_date := l_prd_end_date_tbl(40);
3454 ELSIF l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) AND
3455 l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3456 l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3457 l_bdgt_line_end_date := l_prd_end_date_tbl(39);
3458 ELSIF l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) AND
3459 l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3460 l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3461 l_bdgt_line_end_date := l_prd_end_date_tbl(38);
3462 ELSIF l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) AND
3463 l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3464 l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3465 l_bdgt_line_end_date := l_prd_end_date_tbl(37);
3466 ELSIF l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) AND
3467 l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3468 l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3469 l_bdgt_line_end_date := l_prd_end_date_tbl(36);
3470 ELSIF l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) AND
3471 l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3472 l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3473 l_bdgt_line_end_date := l_prd_end_date_tbl(35);
3474 ELSIF l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) AND
3475 l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3476 l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3477 l_bdgt_line_end_date := l_prd_end_date_tbl(34);
3478 ELSIF l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) AND
3479 l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3480 l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3481 l_bdgt_line_end_date := l_prd_end_date_tbl(33);
3482 ELSIF l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) AND
3483 l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3484 l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3485 l_bdgt_line_end_date := l_prd_end_date_tbl(32);
3486 ELSIF l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 1)) AND
3487 l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3488 l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3489 l_bdgt_line_end_date := l_prd_end_date_tbl(31);
3490 ELSIF l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) AND
3491 l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3492 l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3493 l_bdgt_line_end_date := l_prd_end_date_tbl(30);
3494 ELSIF l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) AND
3495 l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3496 l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3497 l_bdgt_line_end_date := l_prd_end_date_tbl(29);
3498 ELSIF l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) AND
3499 l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3500 l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3501 l_bdgt_line_end_date := l_prd_end_date_tbl(28);
3502 ELSIF l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) AND
3503 l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3504 l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3505 l_bdgt_line_end_date := l_prd_end_date_tbl(27);
3506 ELSIF l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) AND
3507 l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3508 l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3509 l_bdgt_line_end_date := l_prd_end_date_tbl(26);
3510 ELSIF l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) AND
3511 l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3512 l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3513 l_bdgt_line_end_date := l_prd_end_date_tbl(25);
3514 ELSIF l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(24) - 1)) AND
3515 l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3516 l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3517 l_bdgt_line_end_date := l_prd_end_date_tbl(24);
3518 ELSIF l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) AND
3519 l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3520 l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3521 l_bdgt_line_end_date := l_prd_end_date_tbl(23);
3522 ELSIF l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) AND
3523 l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3524 l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3525 l_bdgt_line_end_date := l_prd_end_date_tbl(22);
3526 ELSIF l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) AND
3527 l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3528 l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3529 l_bdgt_line_end_date := l_prd_end_date_tbl(21);
3530 ELSIF l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) AND
3531 l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3532 l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3533 l_bdgt_line_end_date := l_prd_end_date_tbl(20);
3534 ELSIF l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) AND
3535 l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3536 l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3537 l_bdgt_line_end_date := l_prd_end_date_tbl(19);
3538 ELSIF l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) AND
3539 l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3540 l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3541 l_bdgt_line_end_date := l_prd_end_date_tbl(18);
3542 ELSIF l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) AND
3543 l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3544 l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3545 l_bdgt_line_end_date := l_prd_end_date_tbl(17);
3546 ELSIF l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) AND
3547 l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3548 l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3549 l_bdgt_line_end_date := l_prd_end_date_tbl(16);
3550 ELSIF l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) AND
3551 l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3552 l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3553 l_bdgt_line_end_date := l_prd_end_date_tbl(15);
3554 ELSIF l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) AND
3555 l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3556 l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3557 l_bdgt_line_end_date := l_prd_end_date_tbl(14);
3558 ELSIF l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) AND
3559 l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3560 l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3561 l_bdgt_line_end_date := l_prd_end_date_tbl(13);
3562 ELSIF l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) AND
3563 l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3564 l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3565 l_bdgt_line_end_date := l_prd_end_date_tbl(12);
3566 ELSIF l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) AND
3567 l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3568 l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3569 l_bdgt_line_end_date := l_prd_end_date_tbl(11);
3570 ELSIF l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) AND
3571 l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3572 l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3573 l_bdgt_line_end_date := l_prd_end_date_tbl(10);
3574 ELSIF l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) AND
3575 l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3576 l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3577 l_bdgt_line_end_date := l_prd_end_date_tbl(9);
3578 ELSIF l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) AND
3579 l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3580 l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3581 l_bdgt_line_end_date := l_prd_end_date_tbl(8);
3582 ELSIF l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) AND
3583 l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3584 l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3585 l_bdgt_line_end_date := l_prd_end_date_tbl(7);
3586 ELSIF l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) AND
3587 l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3588 l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3589 l_bdgt_line_end_date := l_prd_end_date_tbl(6);
3590 ELSIF l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) AND
3591 l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3592 l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3593 l_bdgt_line_end_date := l_prd_end_date_tbl(5);
3594 ELSIF l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) AND
3595 l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3596 l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3597 l_bdgt_line_end_date := l_prd_end_date_tbl(4);
3598 ELSIF l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) AND
3599 l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3600 l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3601 l_bdgt_line_end_date := l_prd_end_date_tbl(3);
3602 ELSIF l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) AND
3603 l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3604 l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3605 l_bdgt_line_end_date := l_prd_end_date_tbl(2);
3606 ELSIF l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) AND
3607 l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3608 l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3609 l_bdgt_line_end_date := l_prd_end_date_tbl(1);
3610 END IF;
3611 ELSE -- budget version
3612 IF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3613 l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3614 l_bdgt_line_end_date := l_prd_end_date_tbl(52);
3615 ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3616 l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3617 l_bdgt_line_end_date := l_prd_end_date_tbl(51);
3618 ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3619 l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3620 l_bdgt_line_end_date := l_prd_end_date_tbl(50);
3621 ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3622 l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3623 l_bdgt_line_end_date := l_prd_end_date_tbl(49);
3624 ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3625 l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3626 l_bdgt_line_end_date := l_prd_end_date_tbl(48);
3627 ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3628 l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3629 l_bdgt_line_end_date := l_prd_end_date_tbl(47);
3630 ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3631 l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3632 l_bdgt_line_end_date := l_prd_end_date_tbl(46);
3633 ELSIF l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
3634 l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
3635 l_bdgt_line_end_date := l_prd_end_date_tbl(45);
3636 ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3637 l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3638 l_bdgt_line_end_date := l_prd_end_date_tbl(44);
3639 ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3640 l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3641 l_bdgt_line_end_date := l_prd_end_date_tbl(43);
3642 ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3643 l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3644 l_bdgt_line_end_date := l_prd_end_date_tbl(42);
3645 ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3646 l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3647 l_bdgt_line_end_date := l_prd_end_date_tbl(41);
3648 ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3649 l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3650 l_bdgt_line_end_date := l_prd_end_date_tbl(40);
3651 ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3652 l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3653 l_bdgt_line_end_date := l_prd_end_date_tbl(39);
3654 ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3655 l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3656 l_bdgt_line_end_date := l_prd_end_date_tbl(38);
3657 ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3658 l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3659 l_bdgt_line_end_date := l_prd_end_date_tbl(37);
3660 ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3661 l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3662 l_bdgt_line_end_date := l_prd_end_date_tbl(36);
3663 ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3664 l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3665 l_bdgt_line_end_date := l_prd_end_date_tbl(35);
3666 ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3667 l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3668 l_bdgt_line_end_date := l_prd_end_date_tbl(34);
3669 ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3670 l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3671 l_bdgt_line_end_date := l_prd_end_date_tbl(33);
3672 ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3673 l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3674 l_bdgt_line_end_date := l_prd_end_date_tbl(32);
3675 ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3676 l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3677 l_bdgt_line_end_date := l_prd_end_date_tbl(31);
3678 ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3679 l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3680 l_bdgt_line_end_date := l_prd_end_date_tbl(30);
3681 ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3682 l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3683 l_bdgt_line_end_date := l_prd_end_date_tbl(29);
3684 ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3685 l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3686 l_bdgt_line_end_date := l_prd_end_date_tbl(28);
3687 ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3688 l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3689 l_bdgt_line_end_date := l_prd_end_date_tbl(27);
3690 ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3691 l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3692 l_bdgt_line_end_date := l_prd_end_date_tbl(26);
3693 ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3694 l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3695 l_bdgt_line_end_date := l_prd_end_date_tbl(25);
3696 ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3697 l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3698 l_bdgt_line_end_date := l_prd_end_date_tbl(24);
3699 ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3700 l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3701 l_bdgt_line_end_date := l_prd_end_date_tbl(23);
3702 ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3703 l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3704 l_bdgt_line_end_date := l_prd_end_date_tbl(22);
3705 ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3706 l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3707 l_bdgt_line_end_date := l_prd_end_date_tbl(21);
3708 ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3709 l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3710 l_bdgt_line_end_date := l_prd_end_date_tbl(20);
3711 ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3712 l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3713 l_bdgt_line_end_date := l_prd_end_date_tbl(19);
3714 ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3715 l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3716 l_bdgt_line_end_date := l_prd_end_date_tbl(18);
3717 ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3718 l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3719 l_bdgt_line_end_date := l_prd_end_date_tbl(17);
3720 ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3721 l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3722 l_bdgt_line_end_date := l_prd_end_date_tbl(16);
3723 ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3724 l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3725 l_bdgt_line_end_date := l_prd_end_date_tbl(15);
3726 ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3727 l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3728 l_bdgt_line_end_date := l_prd_end_date_tbl(14);
3729 ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3730 l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3731 l_bdgt_line_end_date := l_prd_end_date_tbl(13);
3732 ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3733 l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3734 l_bdgt_line_end_date := l_prd_end_date_tbl(12);
3735 ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3736 l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3737 l_bdgt_line_end_date := l_prd_end_date_tbl(11);
3738 ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3739 l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3740 l_bdgt_line_end_date := l_prd_end_date_tbl(10);
3741 ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3742 l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3743 l_bdgt_line_end_date := l_prd_end_date_tbl(9);
3744 ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3745 l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3746 l_bdgt_line_end_date := l_prd_end_date_tbl(8);
3747 ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3748 l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3749 l_bdgt_line_end_date := l_prd_end_date_tbl(7);
3750 ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3751 l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3752 l_bdgt_line_end_date := l_prd_end_date_tbl(6);
3753 ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3754 l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3755 l_bdgt_line_end_date := l_prd_end_date_tbl(5);
3756 ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3757 l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3758 l_bdgt_line_end_date := l_prd_end_date_tbl(4);
3759 ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3760 l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3761 l_bdgt_line_end_date := l_prd_end_date_tbl(3);
3762 ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3763 l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3764 l_bdgt_line_end_date := l_prd_end_date_tbl(2);
3765 ELSIF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3766 l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3767 l_bdgt_line_end_date := l_prd_end_date_tbl(1);
3768 END IF;
3769 END IF;
3770
3771 ELSE -- non periodic
3772 IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
3773 l_cached_ra_id_tbl(l_cached_ra_index) = -1 THEN
3774 -- populating the planning start/end dates as the budget line start/end dates
3775 l_bdgt_line_start_date := l_inf_tbl_data_curr_rec.planning_start_date;
3776 l_bdgt_line_end_date := l_inf_tbl_data_curr_rec.planning_end_date;
3777 ELSE
3778 l_bdgt_line_start_date := l_plan_start_date;
3779 l_bdgt_line_end_date := l_plan_end_date;
3780 END IF;
3781
3782 END IF;
3783 END IF;
3784 -- budget line dates processing ends
3785
3786 -- derivation of amounts i.e. raw cost, burdened cost, revenue,
3787 -- quantity, raw cost rate, burdened cost, bill rate
3788 IF l_inf_tbl_data_curr_rec.delete_flag = 'Y' THEN
3789 IF is_periodic_setup = 'Y' THEN
3790 IF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_RAW_COST' THEN
3791 l_raw_cost := l_fnd_miss_num;
3792 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_RAW_COST' THEN
3793 l_raw_cost := l_fnd_miss_num;
3794 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_RAW_COST' THEN
3795 l_etc_raw_cost := l_fnd_miss_num;
3796 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_BURDENED_COST' THEN
3797 l_burdened_cost := l_fnd_miss_num;
3798 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_BURDENED_COST' THEN
3799 l_burdened_cost := l_fnd_miss_num;
3800 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_BURDENED_COST' THEN
3801 l_etc_burdened_cost := l_fnd_miss_num;
3802 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_REV' THEN
3803 l_revenue := l_fnd_miss_num;
3804 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_REVENUE' THEN
3805 l_revenue := l_fnd_miss_num;
3806 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_REVENUE' THEN
3807 l_etc_revenue := l_fnd_miss_num;
3808 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_QTY' THEN
3809 l_quantity := l_fnd_miss_num;
3810 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_QTY' THEN
3811 l_quantity := l_fnd_miss_num;
3812 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_QTY' THEN
3813 l_etc_quantity := l_fnd_miss_num;
3814 ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') THEN
3815 l_rc_rate := l_fnd_miss_num;
3816 ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('BURDENED_COST_RATE','ETC_BURDENED_COST_RATE') THEN
3817 l_bc_rate := l_fnd_miss_num;
3818 ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') THEN
3819 l_bill_rate := l_fnd_miss_num;
3820 END IF;
3821
3822 ELSE
3823 l_raw_cost := l_fnd_miss_num;
3824 l_burdened_cost := l_fnd_miss_num;
3825 l_revenue := l_fnd_miss_num;
3826 l_quantity := l_fnd_miss_num;
3827 l_etc_quantity := l_fnd_miss_num;
3828 l_etc_raw_cost := l_fnd_miss_num;
3829 l_etc_burdened_cost := l_fnd_miss_num;
3830 l_etc_revenue := l_fnd_miss_num;
3831
3832 l_rc_rate := l_fnd_miss_num;
3833 l_bc_rate := l_fnd_miss_num;
3834 l_bill_rate := l_fnd_miss_num;
3835 END IF;
3836
3837 ELSE
3838 IF is_periodic_setup = 'Y' THEN
3839 -- summing up periods for for particular amount type
3840 l_amount:=0;
3841 l_tmp_sum_amt:=0;
3842 l_not_null_period_cnt:=0;
3843 FOR tt IN 1..52 LOOP
3844
3845 l_amount:=0;
3846 IF tt =1 THEN
3847 l_amount := l_inf_tbl_data_curr_rec.prd1;
3848 ELSIF tt =2 THEN
3849 l_amount := l_inf_tbl_data_curr_rec.prd2;
3850 ELSIF tt =3 THEN
3851 l_amount := l_inf_tbl_data_curr_rec.prd3;
3852 ELSIF tt =4 THEN
3853 l_amount := l_inf_tbl_data_curr_rec.prd4;
3854 ELSIF tt =5 THEN
3855 l_amount := l_inf_tbl_data_curr_rec.prd5;
3856 ELSIF tt =6 THEN
3857 l_amount := l_inf_tbl_data_curr_rec.prd6;
3858 ELSIF tt =7 THEN
3859 l_amount := l_inf_tbl_data_curr_rec.prd7;
3860 ELSIF tt =8 THEN
3861 l_amount := l_inf_tbl_data_curr_rec.prd8;
3862 ELSIF tt =9 THEN
3863 l_amount := l_inf_tbl_data_curr_rec.prd9;
3864 ELSIF tt =10 THEN
3865 l_amount := l_inf_tbl_data_curr_rec.prd10;
3866 ELSIF tt =11 THEN
3867 l_amount := l_inf_tbl_data_curr_rec.prd11;
3868 ELSIF tt =12 THEN
3869 l_amount := l_inf_tbl_data_curr_rec.prd12;
3870 ELSIF tt =13 THEN
3871 l_amount := l_inf_tbl_data_curr_rec.prd13;
3872 ELSIF tt =14 THEN
3873 l_amount := l_inf_tbl_data_curr_rec.prd14;
3874 ELSIF tt =15 THEN
3875 l_amount := l_inf_tbl_data_curr_rec.prd15;
3876 ELSIF tt =16 THEN
3877 l_amount := l_inf_tbl_data_curr_rec.prd16;
3878 ELSIF tt =17 THEN
3879 l_amount := l_inf_tbl_data_curr_rec.prd17;
3880 ELSIF tt =18 THEN
3881 l_amount := l_inf_tbl_data_curr_rec.prd18;
3882 ELSIF tt =19 THEN
3883 l_amount := l_inf_tbl_data_curr_rec.prd19;
3884 ELSIF tt =20 THEN
3885 l_amount := l_inf_tbl_data_curr_rec.prd20;
3886 ELSIF tt =21 THEN
3887 l_amount := l_inf_tbl_data_curr_rec.prd21;
3888 ELSIF tt =22 THEN
3889 l_amount := l_inf_tbl_data_curr_rec.prd22;
3890 ELSIF tt =23 THEN
3891 l_amount := l_inf_tbl_data_curr_rec.prd23;
3892 ELSIF tt =24 THEN
3893 l_amount := l_inf_tbl_data_curr_rec.prd24;
3894 ELSIF tt =25 THEN
3895 l_amount := l_inf_tbl_data_curr_rec.prd25;
3896 ELSIF tt =26 THEN
3897 l_amount := l_inf_tbl_data_curr_rec.prd26;
3898 ELSIF tt =27 THEN
3899 l_amount := l_inf_tbl_data_curr_rec.prd27;
3900 ELSIF tt =28 THEN
3901 l_amount := l_inf_tbl_data_curr_rec.prd28;
3902 ELSIF tt =29 THEN
3903 l_amount := l_inf_tbl_data_curr_rec.prd29;
3904 ELSIF tt =30 THEN
3905 l_amount := l_inf_tbl_data_curr_rec.prd30;
3906 ELSIF tt =31 THEN
3907 l_amount := l_inf_tbl_data_curr_rec.prd31;
3908 ELSIF tt =32 THEN
3909 l_amount := l_inf_tbl_data_curr_rec.prd32;
3910 ELSIF tt =33 THEN
3911 l_amount := l_inf_tbl_data_curr_rec.prd33;
3912 ELSIF tt =34 THEN
3913 l_amount := l_inf_tbl_data_curr_rec.prd34;
3914 ELSIF tt =35 THEN
3915 l_amount := l_inf_tbl_data_curr_rec.prd35;
3916 ELSIF tt =36 THEN
3917 l_amount := l_inf_tbl_data_curr_rec.prd36;
3918 ELSIF tt =37 THEN
3919 l_amount := l_inf_tbl_data_curr_rec.prd37;
3920 ELSIF tt =38 THEN
3921 l_amount := l_inf_tbl_data_curr_rec.prd38;
3922 ELSIF tt =39 THEN
3923 l_amount := l_inf_tbl_data_curr_rec.prd39;
3924 ELSIF tt =40 THEN
3925 l_amount := l_inf_tbl_data_curr_rec.prd40;
3926 ELSIF tt =41 THEN
3927 l_amount := l_inf_tbl_data_curr_rec.prd41;
3928 ELSIF tt =42 THEN
3929 l_amount := l_inf_tbl_data_curr_rec.prd42;
3930 ELSIF tt =43 THEN
3931 l_amount := l_inf_tbl_data_curr_rec.prd43;
3932 ELSIF tt =44 THEN
3933 l_amount := l_inf_tbl_data_curr_rec.prd44;
3934 ELSIF tt =45 THEN
3935 l_amount := l_inf_tbl_data_curr_rec.prd45;
3936 ELSIF tt =46 THEN
3937 l_amount := l_inf_tbl_data_curr_rec.prd46;
3938 ELSIF tt =47 THEN
3939 l_amount := l_inf_tbl_data_curr_rec.prd47;
3940 ELSIF tt =48 THEN
3941 l_amount := l_inf_tbl_data_curr_rec.prd48;
3942 ELSIF tt =49 THEN
3943 l_amount := l_inf_tbl_data_curr_rec.prd49;
3944 ELSIF tt =50 THEN
3945 l_amount := l_inf_tbl_data_curr_rec.prd50;
3946 ELSIF tt =51 THEN
3947 l_amount := l_inf_tbl_data_curr_rec.prd51;
3948 ELSIF tt =52 THEN
3949 l_amount := l_inf_tbl_data_curr_rec.prd52;
3950 END IF;
3951
3952 IF l_amount = l_fnd_miss_num THEN
3953
3954 l_amount:= 0;
3955
3956 ELSIF l_amount IS NULL THEN
3957
3958 l_amount := 0;
3959
3960 END IF;
3961
3962 IF l_amount <> 0 THEN
3963
3964 l_not_null_period_cnt := l_not_null_period_cnt+1;
3965 l_tmp_sum_amt := l_tmp_sum_amt+l_amount;
3966
3967 END IF;
3968
3969 END LOOP;--FOR tt IN 1..52 LOOP
3970 END IF;
3971 END IF;
3972
3973 --log1('----- STAGE 12-------');
3974 --log1('----- STAGE 12.1------- '||l_cached_ra_index);
3975 --log1('----- STAGE 12.2------- '||l_cached_ra_id_tbl(l_cached_ra_index));
3976 IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
3977 l_cached_ra_id_tbl(l_cached_ra_index) <> -1 THEN
3978 -- for existing RAs
3979 -- for periodic layouts getting the start/end date of the preceeding and succeeding periods
3980 IF is_periodic_setup = 'Y' THEN
3981 --log1('----- STAGE 13-------');
3982 IF l_inf_tbl_data_curr_rec.pd_prd IS NOT NULL AND
3983 l_inf_tbl_data_curr_rec.pd_prd <> l_fnd_miss_num THEN
3984 IF l_plan_start_date >= p_prd_start_date_tbl(1) THEN
3985 l_bdgt_line_start_date := l_first_pd_bf_pm_st_dt;
3986 ELSE
3987 l_bdgt_line_start_date := l_plan_start_date;
3988 END IF;
3989 END IF;
3990
3991 IF l_inf_tbl_data_curr_rec.sd_prd IS NOT NULL AND
3992 l_inf_tbl_data_curr_rec.sd_prd <> l_fnd_miss_num THEN
3993 IF l_plan_end_date <= p_prd_end_date_tbl(l_original_prd_count) THEN
3994 l_bdgt_line_end_date := l_last_pd_af_pm_en_dt;
3995 ELSE
3996 l_bdgt_line_end_date := l_plan_end_date;
3997 END IF;
3998 END IF;
3999 --log1('----- STAGE 13.1------- '||l_bdgt_line_start_date);
4000 --log1('----- STAGE 13.2------- '||l_bdgt_line_end_date);
4001 --log1('----- STAGE 13.3------- '||l_plan_start_date);
4002 --log1('----- STAGE 13.4------- '||l_plan_end_date);
4003 -- checking if the budget line start/end dates are outside the planning date range
4004
4005
4006 ---Added this code for bug#4488926. Caching the values of l_period_plan_start_date and
4007 --l_period_plan_end_date
4008 IF ( NOT(l_period_plan_start_date_tbl.exists(to_char(l_plan_start_date))
4009 AND l_period_plan_end_date_tbl.exists(to_char(l_plan_end_date))))
4010 THEN
4011 --For periodic case get the start and end dates.
4012 l_period_plan_start_date := PA_FIN_PLAN_UTILS.get_period_start_date(l_plan_start_date,l_period_time_phased_code);
4013 l_period_plan_end_date := PA_FIN_PLAN_UTILS.get_period_end_date (l_plan_end_date , l_period_time_phased_code);
4014 l_period_plan_start_date_tbl(to_char(l_plan_start_date)) := l_period_plan_start_date;
4015 l_period_plan_end_date_tbl(to_char(l_plan_end_date)) := l_period_plan_end_date;
4016 ELSE
4017 l_period_plan_start_date := l_period_plan_start_date_tbl(to_char(l_plan_start_date));
4018 l_period_plan_end_date := l_period_plan_end_date_tbl(to_char(l_plan_end_date));
4019 END IF;
4020
4021 IF l_bdgt_line_start_date < l_period_plan_start_date OR
4022 l_bdgt_line_end_date > l_period_plan_end_date THEN
4023 l_err_val_code_tbl.extend(1);
4024 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_BL_OUT_OF_PLAN_RANGE';
4025 l_err_task_id_tbl.extend(1);
4026 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4027 l_err_rlm_id_tbl.extend(1);
4028 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4029 l_err_txn_curr_tbl.extend(1);
4030 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4031 l_err_amt_type_tbl.extend(1);
4032 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4033
4034 -- raising an exception to skip processing for the dulpicate record
4035 RAISE Fp_Webadi_Skip_Rec_Proc_Exc;
4036 END IF;
4037 END IF; -- if periodic setup
4038 ELSE
4039 -- for new RAs
4040 --log1('----- STAGE 12.3------- '||is_periodic_setup);
4041 IF is_periodic_setup = 'Y' THEN
4042 -- for new RAs, amounts in preceding and succeeding periods cann't be entered
4043 --log1('----- STAGE 12.4------- '|| l_inf_tbl_data_curr_rec.pd_prd);
4044 IF l_inf_tbl_data_curr_rec.pd_prd IS NOT NULL AND
4045 l_inf_tbl_data_curr_rec.pd_prd <> l_fnd_miss_num THEN
4046 l_err_val_code_tbl.extend(1);
4047 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_NW_RA_PCD_PRD_AMT_ERR';
4048 l_err_task_id_tbl.extend(1);
4049 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4050 l_err_rlm_id_tbl.extend(1);
4051 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4052 l_err_txn_curr_tbl.extend(1);
4053 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4054 l_err_amt_type_tbl.extend(1);
4055 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4056
4057 -- raising an exception to skip processing for the dulpicate record
4058 RAISE Fp_Webadi_Skip_Rec_Proc_Exc;
4059 END IF;
4060 --log1('----- STAGE 12.5------- '|| l_inf_tbl_data_curr_rec.sd_prd);
4061 IF l_inf_tbl_data_curr_rec.sd_prd IS NOT NULL AND
4062 l_inf_tbl_data_curr_rec.sd_prd <> l_fnd_miss_num THEN
4063 l_err_val_code_tbl.extend(1);
4064 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_NW_RA_PCD_PRD_AMT_ERR';
4065 l_err_task_id_tbl.extend(1);
4066 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4067 l_err_rlm_id_tbl.extend(1);
4068 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4069 l_err_txn_curr_tbl.extend(1);
4070 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4071 l_err_amt_type_tbl.extend(1);
4072 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4073
4074 -- raising an exception to skip processing for the dulpicate record
4075 RAISE Fp_Webadi_Skip_Rec_Proc_Exc;
4076 END IF;
4077 END IF;
4078 END IF; -- if existing RA check
4079 --log1('----- STAGE 15-------');
4080
4081 --log1('----- STAGE 16-------');
4082 -- copying the following attributes from the first record
4083 IF l_inf_tbl_data_curr_rec.delete_flag = 'N' THEN
4084 IF l_plan_trans_attr_copied_flag = 'N' THEN
4085
4086 l_bdgt_ln_tbl_description := l_inf_tbl_data_curr_rec.description;
4087 l_change_reason_code := l_inf_tbl_data_curr_rec.change_reason;
4088 -- flipping the value of l_plan_trans_attr_copied_flag
4089 l_plan_trans_attr_copied_flag := 'Y';
4090
4091 END IF;
4092
4093 IF l_cost_conv_attr_copied_flag ='N' OR
4094 l_rev_conv_attr_copied_flag ='N' THEN
4095
4096 IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
4097
4098 IF is_periodic_setup = 'N' THEN
4099
4100 l_project_cost_rate_type := l_inf_tbl_data_curr_rec.project_cost_rate_type;
4101 l_project_cost_rate_date_type := l_inf_tbl_data_curr_rec.project_cost_rate_date_type;
4102 l_project_cost_rate_date := l_inf_tbl_data_curr_rec.project_cost_rate_date;
4103 l_project_cost_exchange_rate := l_inf_tbl_data_curr_rec.project_cost_exchange_rate;
4104 l_projfunc_cost_rate_type := l_inf_tbl_data_curr_rec.projfunc_cost_rate_type;
4105 l_projfunc_cost_rate_date_type:= l_inf_tbl_data_curr_rec.projfunc_cost_rate_date_type;
4106 l_projfunc_cost_rate_date := l_inf_tbl_data_curr_rec.projfunc_cost_rate_date;
4107 l_projfunc_cost_exchange_rate := l_inf_tbl_data_curr_rec.projfunc_cost_exchange_rate;
4108
4109 l_project_rev_rate_type := l_inf_tbl_data_curr_rec.project_rev_rate_type;
4110 l_project_rev_rate_date_type := l_inf_tbl_data_curr_rec.project_rev_rate_date_type;
4111 l_project_rev_rate_date := l_inf_tbl_data_curr_rec.project_rev_rate_date;
4112 l_project_rev_exchange_rate := l_inf_tbl_data_curr_rec.project_rev_exchange_rate;
4113 l_projfunc_rev_rate_type := l_inf_tbl_data_curr_rec.projfunc_rev_rate_type;
4114 l_projfunc_rev_rate_date_type := l_inf_tbl_data_curr_rec.projfunc_rev_rate_date_type;
4115 l_projfunc_rev_rate_date := l_inf_tbl_data_curr_rec.projfunc_rev_rate_date;
4116 l_projfunc_rev_exchange_rate := l_inf_tbl_data_curr_rec.projfunc_rev_exchange_rate;
4117
4118 l_cost_conv_attr_copied_flag :='Y';
4119 l_rev_conv_attr_copied_flag := 'Y';
4120
4121 ELSE--Periodic Setup
4122
4123 IF l_cost_conv_attr_copied_flag ='N' AND
4124 l_inf_tbl_data_curr_rec.amount_type_code IN ('TOTAL_BURDENED_COST',
4125 'TOTAL_RAW_COST',
4126 'BURDENED_COST_RATE',
4127 'RAW_COST_RATE',
4128 'FCST_BURDENED_COST',
4129 'ETC_BURDENED_COST',
4130 'FCST_RAW_COST',
4131 'ETC_RAW_COST',
4132 'ETC_BURDENED_COST_RATE',
4133 'ETC_RAW_COST_RATE') THEN
4134
4135 l_cost_conv_attr_copied_flag := 'Y';
4136 l_project_cost_rate_type := l_inf_tbl_data_curr_rec.project_rate_type;
4137 l_project_cost_rate_date_type := l_inf_tbl_data_curr_rec.project_rate_date_type;
4138 l_project_cost_rate_date := l_inf_tbl_data_curr_rec.project_rate_date;
4139 l_project_cost_exchange_rate := l_inf_tbl_data_curr_rec.project_exchange_rate;
4140 l_projfunc_cost_rate_type := l_inf_tbl_data_curr_rec.projfunc_rate_type;
4141 l_projfunc_cost_rate_date_type := l_inf_tbl_data_curr_rec.projfunc_rate_date_type;
4142 l_projfunc_cost_rate_date := l_inf_tbl_data_curr_rec.projfunc_rate_date;
4143 l_projfunc_cost_exchange_rate := l_inf_tbl_data_curr_rec.projfunc_exchange_rate;
4144
4145 ELSIF l_rev_conv_attr_copied_flag ='N' AND
4146 l_inf_tbl_data_curr_rec.amount_type_code IN ('TOTAL_REV',
4147 'BILL_RATE',
4148 'FCST_REVENUE',
4149 'ETC_REVENUE',
4150 'ETC_BILL_RATE') THEN
4151
4152 l_rev_conv_attr_copied_flag := 'Y';
4153 l_project_rev_rate_type := l_inf_tbl_data_curr_rec.project_rate_type;
4154 l_project_rev_rate_date_type := l_inf_tbl_data_curr_rec.project_rate_date_type;
4155 l_project_rev_rate_date := l_inf_tbl_data_curr_rec.project_rate_date;
4156 l_project_rev_exchange_rate := l_inf_tbl_data_curr_rec.project_exchange_rate;
4157 l_projfunc_rev_rate_type := l_inf_tbl_data_curr_rec.projfunc_rate_type;
4158 l_projfunc_rev_rate_date_type:= l_inf_tbl_data_curr_rec.projfunc_rate_date_type;
4159 l_projfunc_rev_rate_date := l_inf_tbl_data_curr_rec.projfunc_rate_date;
4160 l_projfunc_rev_exchange_rate := l_inf_tbl_data_curr_rec.projfunc_exchange_rate;
4161
4162 END IF;
4163
4164 END IF;--IF is_periodic_setup = 'N' THEN
4165
4166 --log1('l_project_cost_rate_type = ' || l_project_cost_rate_type);
4167 --log1('l_project_cost_rate_date_type = ' || l_project_cost_rate_date_type);
4168 --log1('-- to_char(l_project_cost_rate_date)-1-- ' || to_char(l_project_cost_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4169 --log1('-- to_char(l_project_cost_rate_date)-2-- ' || to_char(l_project_cost_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4170 --log1('l_projfunc_cost_rate_type = ' || l_projfunc_cost_rate_type);
4171 --log1('l_projfunc_cost_rate_date_type = ' || l_projfunc_cost_rate_date_type);
4172 --log1('-- to_char(l_projfunc_cost_rate_date)--1- ' || to_char(l_projfunc_cost_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4173 --log1('-- to_char(l_projfunc_cost_rate_date)--2- ' || to_char(l_projfunc_cost_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4174 --log1('l_project_rev_rate_type = ' || l_project_rev_rate_type);
4175 --log1('l_project_rev_rate_date_type = ' || l_project_rev_rate_date_type);
4176 --log1('-- to_char(l_project_rev_rate_date)-1-- ' || to_char(l_project_rev_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4177 --log1('-- to_char(l_project_rev_rate_date)-2-- ' || to_char(l_project_rev_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4178 --log1('l_projfunc_rev_rate_type = ' || l_projfunc_rev_rate_type);
4179 --log1('l_projfunc_rev_rate_date_type = ' || l_projfunc_rev_rate_date_type);
4180 --log1('-- to_char(l_projfunc_rev_rate_date)-1-- ' || to_char(l_projfunc_rev_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4181 --log1('-- to_char(l_projfunc_rev_rate_date)-2-- ' || to_char(l_projfunc_rev_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4182
4183 END IF;--IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
4184
4185 END IF;--IF l_cost_conv_attr_copied_flag ='N' OR
4186 END IF;
4187 -- nulling out the next record
4188 l_inf_tbl_data_next_rec := NULL;
4189 -- fetching the next record
4190 FETCH inf_tbl_data_csr INTO l_inf_tbl_data_next_rec;
4191 --log1('----- STAGE 19-------');
4192 IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
4193 l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
4194 l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id AND
4195 Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') = Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') THEN
4196
4197 IF is_periodic_setup = 'Y' THEN
4198 IF l_inf_tbl_data_curr_rec.amount_type_code = l_inf_tbl_data_next_rec.amount_type_code THEN
4199 -- populating the error codes to call process_errors at the end
4200 IF l_debug_mode = 'Y' THEN
4201 pa_debug.g_err_stage := 'Duplicate record found';
4202 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4203 END IF;
4204
4205 l_err_val_code_tbl.extend(1);
4206 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_DUPL_REC_PASSED';
4207 l_err_task_id_tbl.extend(1);
4208 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4209 l_err_rlm_id_tbl.extend(1);
4210 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4211 l_err_txn_curr_tbl.extend(1);
4212 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4213 l_err_amt_type_tbl.extend(1);
4214 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4215
4216 -- raising an exception to skip processing for the dulpicate record
4217 RAISE Fp_Webadi_Skip_Dup_Rec_Exc;
4218 END IF;
4219 ELSE
4220 -- populating the error codes to call process_errors at the end
4221 IF l_debug_mode = 'Y' THEN
4222 pa_debug.g_err_stage := 'Duplicate record found';
4223 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4224 END IF;
4225
4226 l_err_val_code_tbl.extend(1);
4227 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_DUPL_REC_PASSED';
4228 l_err_task_id_tbl.extend(1);
4229 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4230 l_err_rlm_id_tbl.extend(1);
4231 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4232 l_err_txn_curr_tbl.extend(1);
4233 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4234
4235 -- raising an exception to skip processing for the dulpicate record
4236 RAISE Fp_Webadi_Skip_Dup_Rec_Exc;
4237 END IF;
4238 END IF;
4239
4240 --log1('----- STAGE 19.1-------');
4241 --Throw an error if planning start/end dates are not entered for a planning transaction at all.
4242 IF l_inf_tbl_data_next_rec.task_id IS NULL OR
4243 l_inf_tbl_data_curr_rec.task_id <> l_inf_tbl_data_next_rec.task_id OR
4244 l_inf_tbl_data_curr_rec.resource_list_member_id <> l_inf_tbl_data_next_rec.resource_list_member_id OR
4245 Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') OR
4246 is_periodic_setup = 'Y' THEN
4247 IF is_periodic_setup = 'Y' THEN
4248 -- Checking if the spread curve is of fixed date type
4249 IF (l_inf_tbl_data_curr_rec.spread_curve_name IS NOT NULL AND
4250 l_inf_tbl_data_curr_rec.spread_curve_name = l_fixed_spread_curve_name) OR
4251 l_fixed_spread_curve_id = l_spread_curve_id THEN
4252 -- spread curve specified is of fixed date type
4253 IF l_not_null_period_cnt > 1 THEN
4254 -- there are valid amounts entered in more than 1 period
4255 l_err_val_code_tbl.extend(1);
4256 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
4257 l_err_task_id_tbl.extend(1);
4258 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4259 l_err_rlm_id_tbl.extend(1);
4260 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4261 l_err_txn_curr_tbl.extend(1);
4262 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4263 l_err_amt_type_tbl.extend(1);
4264 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4265 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
4266 ELSIF l_not_null_period_cnt = 1 THEN
4267 IF l_fix_sc_amt_pd_curr_index IS NULL THEN
4268 -- finding out the period index for which amount is present
4269
4270 IF is_forecast_version = 'Y' THEN
4271 IF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
4272 l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num AND
4273 l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) THEN
4274 l_fix_sc_amt_pd_curr_index := 1;
4275 ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
4276 l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num AND
4277 l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) THEN
4278 l_fix_sc_amt_pd_curr_index := 2;
4279 ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
4280 l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num AND
4281 l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) THEN
4282 l_fix_sc_amt_pd_curr_index := 3;
4283 ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
4284 l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num AND
4285 l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) THEN
4286 l_fix_sc_amt_pd_curr_index := 4;
4287 ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
4288 l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num AND
4289 l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) THEN
4290 l_fix_sc_amt_pd_curr_index := 5;
4291 ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
4292 l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num AND
4293 l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) THEN
4294 l_fix_sc_amt_pd_curr_index := 6;
4295 ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
4296 l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num AND
4297 l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) THEN
4298 l_fix_sc_amt_pd_curr_index := 7;
4299 ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
4300 l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num AND
4301 l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) THEN
4302 l_fix_sc_amt_pd_curr_index := 8;
4303 ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
4304 l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num AND
4305 l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) THEN
4306 l_fix_sc_amt_pd_curr_index := 9;
4307 ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
4308 l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num AND
4309 l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) THEN
4310 l_fix_sc_amt_pd_curr_index := 10;
4311 ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
4312 l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num AND
4313 l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) THEN
4314 l_fix_sc_amt_pd_curr_index := 11;
4315 ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
4316 l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num AND
4317 l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) THEN
4318 l_fix_sc_amt_pd_curr_index := 12;
4319 ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
4320 l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num AND
4321 l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) THEN
4322 l_fix_sc_amt_pd_curr_index := 13;
4323 ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
4324 l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num AND
4325 l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) THEN
4326 l_fix_sc_amt_pd_curr_index := 14;
4327 ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
4328 l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num AND
4329 l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) THEN
4330 l_fix_sc_amt_pd_curr_index := 15;
4331 ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
4332 l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num AND
4333 l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) THEN
4334 l_fix_sc_amt_pd_curr_index := 16;
4335 ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
4336 l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num AND
4337 l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) THEN
4338 l_fix_sc_amt_pd_curr_index := 17;
4339 ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
4340 l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num AND
4341 l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) THEN
4342 l_fix_sc_amt_pd_curr_index := 18;
4343 ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
4344 l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num AND
4345 l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) THEN
4346 l_fix_sc_amt_pd_curr_index := 19;
4347 ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
4348 l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num AND
4349 l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) THEN
4350 l_fix_sc_amt_pd_curr_index := 20;
4351 ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
4352 l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num AND
4353 l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) THEN
4354 l_fix_sc_amt_pd_curr_index := 21;
4355 ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
4356 l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num AND
4357 l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) THEN
4358 l_fix_sc_amt_pd_curr_index := 22;
4359 ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
4360 l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num AND
4361 l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) THEN
4362 l_fix_sc_amt_pd_curr_index := 23;
4363 ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
4364 l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num AND
4365 l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(24) - 1)) THEN
4366 l_fix_sc_amt_pd_curr_index := 24;
4367 ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
4368 l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num AND
4369 l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) THEN
4370 l_fix_sc_amt_pd_curr_index := 25;
4371 ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
4372 l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num AND
4373 l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) THEN
4374 l_fix_sc_amt_pd_curr_index := 26;
4375 ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
4376 l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num AND
4377 l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) THEN
4378 l_fix_sc_amt_pd_curr_index := 27;
4379 ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
4380 l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num AND
4381 l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) THEN
4382 l_fix_sc_amt_pd_curr_index := 28;
4383 ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
4384 l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num AND
4385 l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) THEN
4386 l_fix_sc_amt_pd_curr_index := 29;
4387 ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
4388 l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num AND
4389 l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) THEN
4390 l_fix_sc_amt_pd_curr_index := 30;
4391 ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
4392 l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num AND
4393 l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 1)) THEN
4394 l_fix_sc_amt_pd_curr_index := 31;
4395 ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
4396 l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num AND
4397 l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) THEN
4398 l_fix_sc_amt_pd_curr_index := 32;
4399 ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
4400 l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num AND
4401 l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) THEN
4402 l_fix_sc_amt_pd_curr_index := 33;
4403 ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
4404 l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num AND
4405 l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) THEN
4406 l_fix_sc_amt_pd_curr_index := 34;
4407 ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
4408 l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num AND
4409 l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) THEN
4410 l_fix_sc_amt_pd_curr_index := 35;
4411 ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
4412 l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num AND
4413 l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) THEN
4414 l_fix_sc_amt_pd_curr_index := 36;
4415 ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
4416 l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num AND
4417 l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) THEN
4418 l_fix_sc_amt_pd_curr_index := 37;
4419 ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
4420 l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num AND
4421 l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) THEN
4422 l_fix_sc_amt_pd_curr_index := 38;
4423 ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
4424 l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num AND
4425 l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) THEN
4426 l_fix_sc_amt_pd_curr_index := 39;
4427 ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
4428 l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num AND
4429 l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) THEN
4430 l_fix_sc_amt_pd_curr_index := 40;
4431 ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
4432 l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num AND
4433 l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) THEN
4434 l_fix_sc_amt_pd_curr_index := 41;
4435 ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
4436 l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num AND
4437 l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) THEN
4438 l_fix_sc_amt_pd_curr_index := 42;
4439 ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
4440 l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num AND
4441 l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) THEN
4442 l_fix_sc_amt_pd_curr_index := 43;
4443 ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
4444 l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num AND
4445 l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) THEN
4446 l_fix_sc_amt_pd_curr_index := 44;
4447 ELSIF l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
4448 l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num AND
4449 l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) THEN
4450 l_fix_sc_amt_pd_curr_index := 45;
4451 ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
4452 l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num AND
4453 l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) THEN
4454 l_fix_sc_amt_pd_curr_index := 46;
4455 ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
4456 l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num AND
4457 l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) THEN
4458 l_fix_sc_amt_pd_curr_index := 47;
4459 ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
4460 l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num AND
4461 l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) THEN
4462 l_fix_sc_amt_pd_curr_index := 48;
4463 ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
4464 l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num AND
4465 l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) THEN
4466 l_fix_sc_amt_pd_curr_index := 49;
4467 ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
4468 l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num AND
4469 l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) THEN
4470 l_fix_sc_amt_pd_curr_index := 50;
4471 ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
4472 l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num AND
4473 l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) THEN
4474 l_fix_sc_amt_pd_curr_index := 51;
4475 ELSIF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
4476 l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num AND
4477 l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) THEN
4478 l_fix_sc_amt_pd_curr_index := 52;
4479 END IF;
4480 ELSE
4481 -- budget version
4482 IF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
4483 l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
4484 l_fix_sc_amt_pd_curr_index := 1;
4485 ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
4486 l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
4487 l_fix_sc_amt_pd_curr_index := 2;
4488 ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
4489 l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
4490 l_fix_sc_amt_pd_curr_index := 3;
4491 ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
4492 l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
4493 l_fix_sc_amt_pd_curr_index := 4;
4494 ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
4495 l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
4496 l_fix_sc_amt_pd_curr_index := 5;
4497 ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
4498 l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
4499 l_fix_sc_amt_pd_curr_index := 6;
4500 ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
4501 l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
4502 l_fix_sc_amt_pd_curr_index := 7;
4503 ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
4504 l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
4505 l_fix_sc_amt_pd_curr_index := 8;
4506 ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
4507 l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
4508 l_fix_sc_amt_pd_curr_index := 9;
4509 ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
4510 l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
4511 l_fix_sc_amt_pd_curr_index := 10;
4512 ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
4513 l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
4514 l_fix_sc_amt_pd_curr_index := 11;
4515 ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
4516 l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
4517 l_fix_sc_amt_pd_curr_index := 12;
4518 ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
4519 l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
4520 l_fix_sc_amt_pd_curr_index := 13;
4521 ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
4522 l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
4523 l_fix_sc_amt_pd_curr_index := 14;
4524 ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
4525 l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
4526 l_fix_sc_amt_pd_curr_index := 15;
4527 ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
4528 l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
4529 l_fix_sc_amt_pd_curr_index := 16;
4530 ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
4531 l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
4532 l_fix_sc_amt_pd_curr_index := 17;
4533 ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
4534 l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
4535 l_fix_sc_amt_pd_curr_index := 18;
4536 ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
4537 l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
4538 l_fix_sc_amt_pd_curr_index := 19;
4539 ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
4540 l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
4541 l_fix_sc_amt_pd_curr_index := 20;
4542 ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
4543 l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
4544 l_fix_sc_amt_pd_curr_index := 21;
4545 ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
4546 l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
4547 l_fix_sc_amt_pd_curr_index := 22;
4548 ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
4549 l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
4550 l_fix_sc_amt_pd_curr_index := 23;
4551 ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
4552 l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
4553 l_fix_sc_amt_pd_curr_index := 24;
4554 ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
4555 l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
4556 l_fix_sc_amt_pd_curr_index := 25;
4557 ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
4558 l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
4559 l_fix_sc_amt_pd_curr_index := 26;
4560 ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
4561 l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
4562 l_fix_sc_amt_pd_curr_index := 27;
4563 ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
4564 l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
4565 l_fix_sc_amt_pd_curr_index := 28;
4566 ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
4567 l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
4568 l_fix_sc_amt_pd_curr_index := 29;
4569 ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
4570 l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
4571 l_fix_sc_amt_pd_curr_index := 30;
4572 ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
4573 l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
4574 l_fix_sc_amt_pd_curr_index := 31;
4575 ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
4576 l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
4577 l_fix_sc_amt_pd_curr_index := 32;
4578 ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
4579 l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
4580 l_fix_sc_amt_pd_curr_index := 33;
4581 ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
4582 l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
4583 l_fix_sc_amt_pd_curr_index := 34;
4584 ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
4585 l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
4586 l_fix_sc_amt_pd_curr_index := 35;
4587 ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
4588 l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
4589 l_fix_sc_amt_pd_curr_index := 36;
4590 ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
4591 l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
4592 l_fix_sc_amt_pd_curr_index := 37;
4593 ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
4594 l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
4595 l_fix_sc_amt_pd_curr_index := 38;
4596 ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
4597 l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
4598 l_fix_sc_amt_pd_curr_index := 39;
4599 ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
4600 l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
4601 l_fix_sc_amt_pd_curr_index := 40;
4602 ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
4603 l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
4604 l_fix_sc_amt_pd_curr_index := 41;
4605 ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
4606 l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
4607 l_fix_sc_amt_pd_curr_index := 42;
4608 ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
4609 l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
4610 l_fix_sc_amt_pd_curr_index := 43;
4611 ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
4612 l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
4613 l_fix_sc_amt_pd_curr_index := 44;
4614 ELSIF l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
4615 l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
4616 l_fix_sc_amt_pd_curr_index := 45;
4617 ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
4618 l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
4619 l_fix_sc_amt_pd_curr_index := 46;
4620 ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
4621 l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
4622 l_fix_sc_amt_pd_curr_index := 47;
4623 ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
4624 l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
4625 l_fix_sc_amt_pd_curr_index := 48;
4626 ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
4627 l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
4628 l_fix_sc_amt_pd_curr_index := 49;
4629 ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
4630 l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
4631 l_fix_sc_amt_pd_curr_index := 50;
4632 ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
4633 l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
4634 l_fix_sc_amt_pd_curr_index := 51;
4635 ELSIF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
4636 l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
4637 l_fix_sc_amt_pd_curr_index := 52;
4638 END IF;
4639 END IF;
4640 END IF; -- cur index null
4641
4642 --log1('C l_cached_ra_index '||l_cached_ra_index);
4643 --log1('C l_fix_sc_amt_pd_curr_index '||l_fix_sc_amt_pd_curr_index);
4644 --log1('C l_sp_fix_prd_st_dt '||l_sp_fix_prd_st_dt);
4645 --log1('C l_sp_fix_prd_en_dt '||l_sp_fix_prd_en_dt);
4646 --log1('C l_sp_fixed_date '||l_sp_fixed_date);
4647 --log1('C amount type '||l_inf_tbl_data_curr_rec.amount_type_code);
4648 --log1('C txn curr '||l_inf_tbl_data_curr_rec.txn_currency_code);
4649
4650 -- checking for existing RAs, the sp_fixed_date lies in the correct
4651 -- period where amounts have been entered
4652 IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
4653 l_cached_ra_id_tbl(l_cached_ra_index) <> -1 AND
4654 l_fix_sc_amt_pd_curr_index IS NOT NULL THEN
4655 l_sp_fix_prd_st_dt := p_prd_start_date_tbl(l_fix_sc_amt_pd_curr_index);
4656 l_sp_fix_prd_en_dt := p_prd_end_date_tbl(l_fix_sc_amt_pd_curr_index);
4657
4658 IF NOT (l_sp_fixed_date >= l_sp_fix_prd_st_dt AND
4659 l_sp_fix_prd_st_dt <= l_sp_fix_prd_en_dt) THEN
4660 l_err_val_code_tbl.extend(1);
4661 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
4662 l_err_task_id_tbl.extend(1);
4663 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4664 l_err_rlm_id_tbl.extend(1);
4665 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4666 l_err_txn_curr_tbl.extend(1);
4667 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4668 l_err_amt_type_tbl.extend(1);
4669 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4670
4671 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
4672 END IF;
4673 END IF;
4674 END IF; -- period not null
4675
4676 --If the next record too belongs to the same RA as that of the current record
4677 --Find out the period for which amounts are entered in that record
4678 IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
4679 l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
4680 l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id THEN
4681 -- checkin for fixed date spread curve
4682 -- if the same resource appears in the next record too
4683 -- finding out the period index for which amount is present
4684 l_fix_sc_amt_pd_next_index := NULL;
4685 IF is_forecast_version = 'Y' THEN
4686 IF l_inf_tbl_data_next_rec.prd1 IS NOT NULL AND
4687 l_inf_tbl_data_next_rec.prd1 <> l_fnd_miss_num AND
4688 l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) THEN
4689 l_fix_sc_amt_pd_next_index := 1;
4690 ELSIF l_inf_tbl_data_next_rec.prd2 IS NOT NULL AND
4691 l_inf_tbl_data_next_rec.prd2 <> l_fnd_miss_num AND
4692 l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) THEN
4693 l_fix_sc_amt_pd_next_index := 2;
4694 ELSIF l_inf_tbl_data_next_rec.prd3 IS NOT NULL AND
4695 l_inf_tbl_data_next_rec.prd3 <> l_fnd_miss_num AND
4696 l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) THEN
4697 l_fix_sc_amt_pd_next_index := 3;
4698 ELSIF l_inf_tbl_data_next_rec.prd4 IS NOT NULL AND
4699 l_inf_tbl_data_next_rec.prd4 <> l_fnd_miss_num AND
4700 l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) THEN
4701 l_fix_sc_amt_pd_next_index := 4;
4702 ELSIF l_inf_tbl_data_next_rec.prd5 IS NOT NULL AND
4703 l_inf_tbl_data_next_rec.prd5 <> l_fnd_miss_num AND
4704 l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) THEN
4705 l_fix_sc_amt_pd_next_index := 5;
4706 ELSIF l_inf_tbl_data_next_rec.prd6 IS NOT NULL AND
4707 l_inf_tbl_data_next_rec.prd6 <> l_fnd_miss_num AND
4708 l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) THEN
4709 l_fix_sc_amt_pd_next_index := 6;
4710 ELSIF l_inf_tbl_data_next_rec.prd7 IS NOT NULL AND
4711 l_inf_tbl_data_next_rec.prd7 <> l_fnd_miss_num AND
4712 l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) THEN
4713 l_fix_sc_amt_pd_next_index := 7;
4714 ELSIF l_inf_tbl_data_next_rec.prd8 IS NOT NULL AND
4715 l_inf_tbl_data_next_rec.prd8 <> l_fnd_miss_num AND
4716 l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) THEN
4717 l_fix_sc_amt_pd_next_index := 8;
4718 ELSIF l_inf_tbl_data_next_rec.prd9 IS NOT NULL AND
4719 l_inf_tbl_data_next_rec.prd9 <> l_fnd_miss_num AND
4720 l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) THEN
4721 l_fix_sc_amt_pd_next_index := 9;
4722 ELSIF l_inf_tbl_data_next_rec.prd10 IS NOT NULL AND
4723 l_inf_tbl_data_next_rec.prd10 <> l_fnd_miss_num AND
4724 l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) THEN
4725 l_fix_sc_amt_pd_next_index := 10;
4726 ELSIF l_inf_tbl_data_next_rec.prd11 IS NOT NULL AND
4727 l_inf_tbl_data_next_rec.prd11 <> l_fnd_miss_num AND
4728 l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) THEN
4729 l_fix_sc_amt_pd_next_index := 11;
4730 ELSIF l_inf_tbl_data_next_rec.prd12 IS NOT NULL AND
4731 l_inf_tbl_data_next_rec.prd12 <> l_fnd_miss_num AND
4732 l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) THEN
4733 l_fix_sc_amt_pd_next_index := 12;
4734 ELSIF l_inf_tbl_data_next_rec.prd13 IS NOT NULL AND
4735 l_inf_tbl_data_next_rec.prd13 <> l_fnd_miss_num AND
4736 l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) THEN
4737 l_fix_sc_amt_pd_next_index := 13;
4738 ELSIF l_inf_tbl_data_next_rec.prd14 IS NOT NULL AND
4739 l_inf_tbl_data_next_rec.prd14 <> l_fnd_miss_num AND
4740 l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) THEN
4741 l_fix_sc_amt_pd_next_index := 14;
4742 ELSIF l_inf_tbl_data_next_rec.prd15 IS NOT NULL AND
4743 l_inf_tbl_data_next_rec.prd15 <> l_fnd_miss_num AND
4744 l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) THEN
4745 l_fix_sc_amt_pd_next_index := 15;
4746 ELSIF l_inf_tbl_data_next_rec.prd16 IS NOT NULL AND
4747 l_inf_tbl_data_next_rec.prd16 <> l_fnd_miss_num AND
4748 l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) THEN
4749 l_fix_sc_amt_pd_next_index := 16;
4750 ELSIF l_inf_tbl_data_next_rec.prd17 IS NOT NULL AND
4751 l_inf_tbl_data_next_rec.prd17 <> l_fnd_miss_num AND
4752 l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) THEN
4753 l_fix_sc_amt_pd_next_index := 17;
4754 ELSIF l_inf_tbl_data_next_rec.prd18 IS NOT NULL AND
4755 l_inf_tbl_data_next_rec.prd18 <> l_fnd_miss_num AND
4756 l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) THEN
4757 l_fix_sc_amt_pd_next_index := 18;
4758 ELSIF l_inf_tbl_data_next_rec.prd19 IS NOT NULL AND
4759 l_inf_tbl_data_next_rec.prd19 <> l_fnd_miss_num AND
4760 l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) THEN
4761 l_fix_sc_amt_pd_next_index := 19;
4762 ELSIF l_inf_tbl_data_next_rec.prd20 IS NOT NULL AND
4763 l_inf_tbl_data_next_rec.prd20 <> l_fnd_miss_num AND
4764 l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) THEN
4765 l_fix_sc_amt_pd_next_index := 20;
4766 ELSIF l_inf_tbl_data_next_rec.prd21 IS NOT NULL AND
4767 l_inf_tbl_data_next_rec.prd21 <> l_fnd_miss_num AND
4768 l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) THEN
4769 l_fix_sc_amt_pd_next_index := 21;
4770 ELSIF l_inf_tbl_data_next_rec.prd22 IS NOT NULL AND
4771 l_inf_tbl_data_next_rec.prd22 <> l_fnd_miss_num AND
4772 l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) THEN
4773 l_fix_sc_amt_pd_next_index := 22;
4774 ELSIF l_inf_tbl_data_next_rec.prd23 IS NOT NULL AND
4775 l_inf_tbl_data_next_rec.prd23 <> l_fnd_miss_num AND
4776 l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) THEN
4777 l_fix_sc_amt_pd_next_index := 23;
4778 ELSIF l_inf_tbl_data_next_rec.prd24 IS NOT NULL AND
4779 l_inf_tbl_data_next_rec.prd24 <> l_fnd_miss_num AND
4780 l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) THEN
4781 l_fix_sc_amt_pd_next_index := 24;
4782 ELSIF l_inf_tbl_data_next_rec.prd25 IS NOT NULL AND
4783 l_inf_tbl_data_next_rec.prd25 <> l_fnd_miss_num AND
4784 l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) THEN
4785 l_fix_sc_amt_pd_next_index := 25;
4786 ELSIF l_inf_tbl_data_next_rec.prd26 IS NOT NULL AND
4787 l_inf_tbl_data_next_rec.prd26 <> l_fnd_miss_num AND
4788 l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) THEN
4789 l_fix_sc_amt_pd_next_index := 26;
4790 ELSIF l_inf_tbl_data_next_rec.prd27 IS NOT NULL AND
4791 l_inf_tbl_data_next_rec.prd27 <> l_fnd_miss_num AND
4792 l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) THEN
4793 l_fix_sc_amt_pd_next_index := 27;
4794 ELSIF l_inf_tbl_data_next_rec.prd28 IS NOT NULL AND
4795 l_inf_tbl_data_next_rec.prd28 <> l_fnd_miss_num AND
4796 l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) THEN
4797 l_fix_sc_amt_pd_next_index := 28;
4798 ELSIF l_inf_tbl_data_next_rec.prd29 IS NOT NULL AND
4799 l_inf_tbl_data_next_rec.prd29 <> l_fnd_miss_num AND
4800 l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) THEN
4801 l_fix_sc_amt_pd_next_index := 29;
4802 ELSIF l_inf_tbl_data_next_rec.prd30 IS NOT NULL AND
4803 l_inf_tbl_data_next_rec.prd30 <> l_fnd_miss_num AND
4804 l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) THEN
4805 l_fix_sc_amt_pd_next_index := 30;
4806 ELSIF l_inf_tbl_data_next_rec.prd31 IS NOT NULL AND
4807 l_inf_tbl_data_next_rec.prd31 <> l_fnd_miss_num AND
4808 l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 1)) THEN
4809 l_fix_sc_amt_pd_next_index := 31;
4810 ELSIF l_inf_tbl_data_next_rec.prd32 IS NOT NULL AND
4811 l_inf_tbl_data_next_rec.prd32 <> l_fnd_miss_num AND
4812 l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) THEN
4813 l_fix_sc_amt_pd_next_index := 32;
4814 ELSIF l_inf_tbl_data_next_rec.prd33 IS NOT NULL AND
4815 l_inf_tbl_data_next_rec.prd33 <> l_fnd_miss_num AND
4816 l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) THEN
4817 l_fix_sc_amt_pd_next_index := 33;
4818 ELSIF l_inf_tbl_data_next_rec.prd34 IS NOT NULL AND
4819 l_inf_tbl_data_next_rec.prd34 <> l_fnd_miss_num AND
4820 l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) THEN
4821 l_fix_sc_amt_pd_next_index := 34;
4822 ELSIF l_inf_tbl_data_next_rec.prd35 IS NOT NULL AND
4823 l_inf_tbl_data_next_rec.prd35 <> l_fnd_miss_num AND
4824 l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) THEN
4825 l_fix_sc_amt_pd_next_index := 35;
4826 ELSIF l_inf_tbl_data_next_rec.prd36 IS NOT NULL AND
4827 l_inf_tbl_data_next_rec.prd36 <> l_fnd_miss_num AND
4828 l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) THEN
4829 l_fix_sc_amt_pd_next_index := 36;
4830 ELSIF l_inf_tbl_data_next_rec.prd37 IS NOT NULL AND
4831 l_inf_tbl_data_next_rec.prd37 <> l_fnd_miss_num AND
4832 l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) THEN
4833 l_fix_sc_amt_pd_next_index := 37;
4834 ELSIF l_inf_tbl_data_next_rec.prd38 IS NOT NULL AND
4835 l_inf_tbl_data_next_rec.prd38 <> l_fnd_miss_num AND
4836 l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) THEN
4837 l_fix_sc_amt_pd_next_index := 38;
4838 ELSIF l_inf_tbl_data_next_rec.prd39 IS NOT NULL AND
4839 l_inf_tbl_data_next_rec.prd39 <> l_fnd_miss_num AND
4840 l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) THEN
4841 l_fix_sc_amt_pd_next_index := 39;
4842 ELSIF l_inf_tbl_data_next_rec.prd40 IS NOT NULL AND
4843 l_inf_tbl_data_next_rec.prd40 <> l_fnd_miss_num AND
4844 l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) THEN
4845 l_fix_sc_amt_pd_next_index := 40;
4846 ELSIF l_inf_tbl_data_next_rec.prd41 IS NOT NULL AND
4847 l_inf_tbl_data_next_rec.prd41 <> l_fnd_miss_num AND
4848 l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) THEN
4849 l_fix_sc_amt_pd_next_index := 41;
4850 ELSIF l_inf_tbl_data_next_rec.prd42 IS NOT NULL AND
4851 l_inf_tbl_data_next_rec.prd42 <> l_fnd_miss_num AND
4852 l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) THEN
4853 l_fix_sc_amt_pd_next_index := 42;
4854 ELSIF l_inf_tbl_data_next_rec.prd43 IS NOT NULL AND
4855 l_inf_tbl_data_next_rec.prd43 <> l_fnd_miss_num AND
4856 l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) THEN
4857 l_fix_sc_amt_pd_next_index := 43;
4858 ELSIF l_inf_tbl_data_next_rec.prd44 IS NOT NULL AND
4859 l_inf_tbl_data_next_rec.prd44 <> l_fnd_miss_num AND
4860 l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) THEN
4861 l_fix_sc_amt_pd_next_index := 44;
4862 ELSIF l_inf_tbl_data_next_rec.prd45 IS NOT NULL AND
4863 l_inf_tbl_data_next_rec.prd45 <> l_fnd_miss_num AND
4864 l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) THEN
4865 l_fix_sc_amt_pd_next_index := 45;
4866 ELSIF l_inf_tbl_data_next_rec.prd46 IS NOT NULL AND
4867 l_inf_tbl_data_next_rec.prd46 <> l_fnd_miss_num AND
4868 l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) THEN
4869 l_fix_sc_amt_pd_next_index := 46;
4870 ELSIF l_inf_tbl_data_next_rec.prd47 IS NOT NULL AND
4871 l_inf_tbl_data_next_rec.prd47 <> l_fnd_miss_num AND
4872 l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) THEN
4873 l_fix_sc_amt_pd_next_index := 47;
4874 ELSIF l_inf_tbl_data_next_rec.prd48 IS NOT NULL AND
4875 l_inf_tbl_data_next_rec.prd48 <> l_fnd_miss_num AND
4876 l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) THEN
4877 l_fix_sc_amt_pd_next_index := 48;
4878 ELSIF l_inf_tbl_data_next_rec.prd49 IS NOT NULL AND
4879 l_inf_tbl_data_next_rec.prd49 <> l_fnd_miss_num AND
4880 l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) THEN
4881 l_fix_sc_amt_pd_next_index := 49;
4882 ELSIF l_inf_tbl_data_next_rec.prd50 IS NOT NULL AND
4883 l_inf_tbl_data_next_rec.prd50 <> l_fnd_miss_num AND
4884 l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) THEN
4885 l_fix_sc_amt_pd_next_index := 50;
4886 ELSIF l_inf_tbl_data_next_rec.prd51 IS NOT NULL AND
4887 l_inf_tbl_data_next_rec.prd51 <> l_fnd_miss_num AND
4888 l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) THEN
4889 l_fix_sc_amt_pd_next_index := 51;
4890 ELSIF l_inf_tbl_data_next_rec.prd52 IS NOT NULL AND
4891 l_inf_tbl_data_next_rec.prd52 <> l_fnd_miss_num AND
4892 l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) THEN
4893 l_fix_sc_amt_pd_next_index := 52;
4894 END IF; -- period not null
4895 ELSE
4896 -- budget versions
4897 IF l_inf_tbl_data_next_rec.prd1 IS NOT NULL AND
4898 l_inf_tbl_data_next_rec.prd1 <> l_fnd_miss_num THEN
4899 l_fix_sc_amt_pd_next_index := 1;
4900 ELSIF l_inf_tbl_data_next_rec.prd2 IS NOT NULL AND
4901 l_inf_tbl_data_next_rec.prd2 <> l_fnd_miss_num THEN
4902 l_fix_sc_amt_pd_next_index := 2;
4903 ELSIF l_inf_tbl_data_next_rec.prd3 IS NOT NULL AND
4904 l_inf_tbl_data_next_rec.prd3 <> l_fnd_miss_num THEN
4905 l_fix_sc_amt_pd_next_index := 3;
4906 ELSIF l_inf_tbl_data_next_rec.prd4 IS NOT NULL AND
4907 l_inf_tbl_data_next_rec.prd4 <> l_fnd_miss_num THEN
4908 l_fix_sc_amt_pd_next_index := 4;
4909 ELSIF l_inf_tbl_data_next_rec.prd5 IS NOT NULL AND
4910 l_inf_tbl_data_next_rec.prd5 <> l_fnd_miss_num THEN
4911 l_fix_sc_amt_pd_next_index := 5;
4912 ELSIF l_inf_tbl_data_next_rec.prd6 IS NOT NULL AND
4913 l_inf_tbl_data_next_rec.prd6 <> l_fnd_miss_num THEN
4914 l_fix_sc_amt_pd_next_index := 6;
4915 ELSIF l_inf_tbl_data_next_rec.prd7 IS NOT NULL AND
4916 l_inf_tbl_data_next_rec.prd7 <> l_fnd_miss_num THEN
4917 l_fix_sc_amt_pd_next_index := 7;
4918 ELSIF l_inf_tbl_data_next_rec.prd8 IS NOT NULL AND
4919 l_inf_tbl_data_next_rec.prd8 <> l_fnd_miss_num THEN
4920 l_fix_sc_amt_pd_next_index := 8;
4921 ELSIF l_inf_tbl_data_next_rec.prd9 IS NOT NULL AND
4922 l_inf_tbl_data_next_rec.prd9 <> l_fnd_miss_num THEN
4923 l_fix_sc_amt_pd_next_index := 9;
4924 ELSIF l_inf_tbl_data_next_rec.prd10 IS NOT NULL AND
4925 l_inf_tbl_data_next_rec.prd10 <> l_fnd_miss_num THEN
4926 l_fix_sc_amt_pd_next_index := 10;
4927 ELSIF l_inf_tbl_data_next_rec.prd11 IS NOT NULL AND
4928 l_inf_tbl_data_next_rec.prd11 <> l_fnd_miss_num THEN
4929 l_fix_sc_amt_pd_next_index := 11;
4930 ELSIF l_inf_tbl_data_next_rec.prd12 IS NOT NULL AND
4931 l_inf_tbl_data_next_rec.prd12 <> l_fnd_miss_num THEN
4932 l_fix_sc_amt_pd_next_index := 12;
4933 ELSIF l_inf_tbl_data_next_rec.prd13 IS NOT NULL AND
4934 l_inf_tbl_data_next_rec.prd13 <> l_fnd_miss_num THEN
4935 l_fix_sc_amt_pd_next_index := 13;
4936 ELSIF l_inf_tbl_data_next_rec.prd14 IS NOT NULL AND
4937 l_inf_tbl_data_next_rec.prd14 <> l_fnd_miss_num THEN
4938 l_fix_sc_amt_pd_next_index := 14;
4939 ELSIF l_inf_tbl_data_next_rec.prd15 IS NOT NULL AND
4940 l_inf_tbl_data_next_rec.prd15 <> l_fnd_miss_num THEN
4941 l_fix_sc_amt_pd_next_index := 15;
4942 ELSIF l_inf_tbl_data_next_rec.prd16 IS NOT NULL AND
4943 l_inf_tbl_data_next_rec.prd16 <> l_fnd_miss_num THEN
4944 l_fix_sc_amt_pd_next_index := 16;
4945 ELSIF l_inf_tbl_data_next_rec.prd17 IS NOT NULL AND
4946 l_inf_tbl_data_next_rec.prd17 <> l_fnd_miss_num THEN
4947 l_fix_sc_amt_pd_next_index := 17;
4948 ELSIF l_inf_tbl_data_next_rec.prd18 IS NOT NULL AND
4949 l_inf_tbl_data_next_rec.prd18 <> l_fnd_miss_num THEN
4950 l_fix_sc_amt_pd_next_index := 18;
4951 ELSIF l_inf_tbl_data_next_rec.prd19 IS NOT NULL AND
4952 l_inf_tbl_data_next_rec.prd19 <> l_fnd_miss_num THEN
4953 l_fix_sc_amt_pd_next_index := 19;
4954 ELSIF l_inf_tbl_data_next_rec.prd20 IS NOT NULL AND
4955 l_inf_tbl_data_next_rec.prd20 <> l_fnd_miss_num THEN
4956 l_fix_sc_amt_pd_next_index := 20;
4957 ELSIF l_inf_tbl_data_next_rec.prd21 IS NOT NULL AND
4958 l_inf_tbl_data_next_rec.prd21 <> l_fnd_miss_num THEN
4959 l_fix_sc_amt_pd_next_index := 21;
4960 ELSIF l_inf_tbl_data_next_rec.prd22 IS NOT NULL AND
4961 l_inf_tbl_data_next_rec.prd22 <> l_fnd_miss_num THEN
4962 l_fix_sc_amt_pd_next_index := 22;
4963 ELSIF l_inf_tbl_data_next_rec.prd23 IS NOT NULL AND
4964 l_inf_tbl_data_next_rec.prd23 <> l_fnd_miss_num THEN
4965 l_fix_sc_amt_pd_next_index := 23;
4966 ELSIF l_inf_tbl_data_next_rec.prd24 IS NOT NULL AND
4967 l_inf_tbl_data_next_rec.prd24 <> l_fnd_miss_num THEN
4968 l_fix_sc_amt_pd_next_index := 24;
4969 ELSIF l_inf_tbl_data_next_rec.prd25 IS NOT NULL AND
4970 l_inf_tbl_data_next_rec.prd25 <> l_fnd_miss_num THEN
4971 l_fix_sc_amt_pd_next_index := 25;
4972 ELSIF l_inf_tbl_data_next_rec.prd26 IS NOT NULL AND
4973 l_inf_tbl_data_next_rec.prd26 <> l_fnd_miss_num THEN
4974 l_fix_sc_amt_pd_next_index := 26;
4975 ELSIF l_inf_tbl_data_next_rec.prd27 IS NOT NULL AND
4976 l_inf_tbl_data_next_rec.prd27 <> l_fnd_miss_num THEN
4977 l_fix_sc_amt_pd_next_index := 27;
4978 ELSIF l_inf_tbl_data_next_rec.prd28 IS NOT NULL AND
4979 l_inf_tbl_data_next_rec.prd28 <> l_fnd_miss_num THEN
4980 l_fix_sc_amt_pd_next_index := 28;
4981 ELSIF l_inf_tbl_data_next_rec.prd29 IS NOT NULL AND
4982 l_inf_tbl_data_next_rec.prd29 <> l_fnd_miss_num THEN
4983 l_fix_sc_amt_pd_next_index := 29;
4984 ELSIF l_inf_tbl_data_next_rec.prd30 IS NOT NULL AND
4985 l_inf_tbl_data_next_rec.prd30 <> l_fnd_miss_num THEN
4986 l_fix_sc_amt_pd_next_index := 30;
4987 ELSIF l_inf_tbl_data_next_rec.prd31 IS NOT NULL AND
4988 l_inf_tbl_data_next_rec.prd31 <> l_fnd_miss_num THEN
4989 l_fix_sc_amt_pd_next_index := 31;
4990 ELSIF l_inf_tbl_data_next_rec.prd32 IS NOT NULL AND
4991 l_inf_tbl_data_next_rec.prd32 <> l_fnd_miss_num THEN
4992 l_fix_sc_amt_pd_next_index := 32;
4993 ELSIF l_inf_tbl_data_next_rec.prd33 IS NOT NULL AND
4994 l_inf_tbl_data_next_rec.prd33 <> l_fnd_miss_num THEN
4995 l_fix_sc_amt_pd_next_index := 33;
4996 ELSIF l_inf_tbl_data_next_rec.prd34 IS NOT NULL AND
4997 l_inf_tbl_data_next_rec.prd34 <> l_fnd_miss_num THEN
4998 l_fix_sc_amt_pd_next_index := 34;
4999 ELSIF l_inf_tbl_data_next_rec.prd35 IS NOT NULL AND
5000 l_inf_tbl_data_next_rec.prd35 <> l_fnd_miss_num THEN
5001 l_fix_sc_amt_pd_next_index := 35;
5002 ELSIF l_inf_tbl_data_next_rec.prd36 IS NOT NULL AND
5003 l_inf_tbl_data_next_rec.prd36 <> l_fnd_miss_num THEN
5004 l_fix_sc_amt_pd_next_index := 36;
5005 ELSIF l_inf_tbl_data_next_rec.prd37 IS NOT NULL AND
5006 l_inf_tbl_data_next_rec.prd37 <> l_fnd_miss_num THEN
5007 l_fix_sc_amt_pd_next_index := 37;
5008 ELSIF l_inf_tbl_data_next_rec.prd38 IS NOT NULL AND
5009 l_inf_tbl_data_next_rec.prd38 <> l_fnd_miss_num THEN
5010 l_fix_sc_amt_pd_next_index := 38;
5011 ELSIF l_inf_tbl_data_next_rec.prd39 IS NOT NULL AND
5012 l_inf_tbl_data_next_rec.prd39 <> l_fnd_miss_num THEN
5013 l_fix_sc_amt_pd_next_index := 39;
5014 ELSIF l_inf_tbl_data_next_rec.prd40 IS NOT NULL AND
5015 l_inf_tbl_data_next_rec.prd40 <> l_fnd_miss_num THEN
5016 l_fix_sc_amt_pd_next_index := 40;
5017 ELSIF l_inf_tbl_data_next_rec.prd41 IS NOT NULL AND
5018 l_inf_tbl_data_next_rec.prd41 <> l_fnd_miss_num THEN
5019 l_fix_sc_amt_pd_next_index := 41;
5020 ELSIF l_inf_tbl_data_next_rec.prd42 IS NOT NULL AND
5021 l_inf_tbl_data_next_rec.prd42 <> l_fnd_miss_num THEN
5022 l_fix_sc_amt_pd_next_index := 42;
5023 ELSIF l_inf_tbl_data_next_rec.prd43 IS NOT NULL AND
5024 l_inf_tbl_data_next_rec.prd43 <> l_fnd_miss_num THEN
5025 l_fix_sc_amt_pd_next_index := 43;
5026 ELSIF l_inf_tbl_data_next_rec.prd44 IS NOT NULL AND
5027 l_inf_tbl_data_next_rec.prd44 <> l_fnd_miss_num THEN
5028 l_fix_sc_amt_pd_next_index := 44;
5029 ELSIF l_inf_tbl_data_next_rec.prd45 IS NOT NULL AND
5030 l_inf_tbl_data_next_rec.prd45 <> l_fnd_miss_num THEN
5031 l_fix_sc_amt_pd_next_index := 45;
5032 ELSIF l_inf_tbl_data_next_rec.prd46 IS NOT NULL AND
5033 l_inf_tbl_data_next_rec.prd46 <> l_fnd_miss_num THEN
5034 l_fix_sc_amt_pd_next_index := 46;
5035 ELSIF l_inf_tbl_data_next_rec.prd47 IS NOT NULL AND
5036 l_inf_tbl_data_next_rec.prd47 <> l_fnd_miss_num THEN
5037 l_fix_sc_amt_pd_next_index := 47;
5038 ELSIF l_inf_tbl_data_next_rec.prd48 IS NOT NULL AND
5039 l_inf_tbl_data_next_rec.prd48 <> l_fnd_miss_num THEN
5040 l_fix_sc_amt_pd_next_index := 48;
5041 ELSIF l_inf_tbl_data_next_rec.prd49 IS NOT NULL AND
5042 l_inf_tbl_data_next_rec.prd49 <> l_fnd_miss_num THEN
5043 l_fix_sc_amt_pd_next_index := 49;
5044 ELSIF l_inf_tbl_data_next_rec.prd50 IS NOT NULL AND
5045 l_inf_tbl_data_next_rec.prd50 <> l_fnd_miss_num THEN
5046 l_fix_sc_amt_pd_next_index := 50;
5047 ELSIF l_inf_tbl_data_next_rec.prd51 IS NOT NULL AND
5048 l_inf_tbl_data_next_rec.prd51 <> l_fnd_miss_num THEN
5049 l_fix_sc_amt_pd_next_index := 51;
5050 ELSIF l_inf_tbl_data_next_rec.prd52 IS NOT NULL AND
5051 l_inf_tbl_data_next_rec.prd52 <> l_fnd_miss_num THEN
5052 l_fix_sc_amt_pd_next_index := 52;
5053 END IF; -- period not null
5054 END IF;
5055 --log1('l_cached_ra_index is '||l_cached_ra_index);
5056 --log1('l_cached_ra_id_tbl(l_cached_ra_index) is '||l_cached_ra_id_tbl(l_cached_ra_index));
5057
5058 --log1('l_fix_sc_amt_pd_next_index is '||l_fix_sc_amt_pd_next_index);
5059 --log1('l_fix_sc_amt_pd_curr_index is '||l_fix_sc_amt_pd_curr_index);
5060 -- checking for existing RAs, the sp_fixed_date lies in the correct
5061 -- period where amounts have been entered
5062 IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
5063 l_cached_ra_id_tbl(l_cached_ra_index) <> -1 AND
5064 l_fix_sc_amt_pd_next_index IS NOT NULL THEN
5065 l_sp_fix_prd_st_dt := p_prd_start_date_tbl(l_fix_sc_amt_pd_next_index);
5066 l_sp_fix_prd_en_dt := p_prd_end_date_tbl(l_fix_sc_amt_pd_next_index);
5067
5068 --log1('l_sp_fix_prd_st_dt is '||l_sp_fix_prd_st_dt);
5069 --log1('l_sp_fix_prd_en_dt is '||l_sp_fix_prd_en_dt);
5070
5071 IF NOT (l_sp_fixed_date >= l_sp_fix_prd_st_dt AND
5072 l_sp_fix_prd_st_dt <= l_sp_fix_prd_en_dt) THEN
5073 l_err_val_code_tbl.extend(1);
5074 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
5075 l_err_task_id_tbl.extend(1);
5076 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_next_rec.task_id;
5077 l_err_rlm_id_tbl.extend(1);
5078 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_next_rec.resource_list_member_id;
5079 l_err_txn_curr_tbl.extend(1);
5080 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_next_rec.txn_currency_code;
5081 l_err_amt_type_tbl.extend(1);
5082 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_next_rec.amount_type_code;
5083
5084 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5085 END IF;
5086 END IF;
5087
5088 IF l_fix_sc_amt_pd_curr_index <> l_fix_sc_amt_pd_next_index THEN
5089 -- amount has been entred in a different period from the previous record
5090 l_err_val_code_tbl.extend(1);
5091 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
5092 l_err_task_id_tbl.extend(1);
5093 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_next_rec.task_id;
5094 l_err_rlm_id_tbl.extend(1);
5095 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_next_rec.resource_list_member_id;
5096 l_err_txn_curr_tbl.extend(1);
5097 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_next_rec.txn_currency_code;
5098 l_err_amt_type_tbl.extend(1);
5099 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_next_rec.amount_type_code;
5100
5101 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5102 END IF;
5103 -- assigning the index of not null period of the next record to the current one
5104 l_fix_sc_amt_pd_curr_index := NVL(l_fix_sc_amt_pd_next_index,l_fix_sc_amt_pd_curr_index);
5105
5106 END IF;
5107
5108 END IF;
5109
5110 -- validation for UOM and other resource attributes, to check if they are same for all the rows,
5111 -- if the RA is same as well checking for planning start date/end date
5112 IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
5113 l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
5114 l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id THEN
5115
5116
5117 -- checking for UOM
5118 IF l_inf_tbl_data_curr_rec.unit_of_measure <> l_inf_tbl_data_next_rec.unit_of_measure THEN
5119 l_err_val_code_tbl.extend(1);
5120 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_UOM_MISS_MATCH_ERR';
5121 l_err_task_id_tbl.extend(1);
5122 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5123 l_err_rlm_id_tbl.extend(1);
5124 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5125 l_err_txn_curr_tbl.extend(1);
5126 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5127 l_err_amt_type_tbl.extend(1);
5128 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5129
5130 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5131 END IF;
5132 -- checking for spread curve
5133 IF l_inf_tbl_data_curr_rec.spread_curve_name <> l_inf_tbl_data_next_rec.spread_curve_name THEN
5134 l_err_val_code_tbl.extend(1);
5135 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_SC_MISS_MATCH_ERR';
5136 l_err_task_id_tbl.extend(1);
5137 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5138 l_err_rlm_id_tbl.extend(1);
5139 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5140 l_err_txn_curr_tbl.extend(1);
5141 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5142 l_err_amt_type_tbl.extend(1);
5143 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5144
5145 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5146 END IF;
5147 -- checking for etc method
5148 IF l_inf_tbl_data_curr_rec.etc_method_name <> l_inf_tbl_data_next_rec.etc_method_name THEN
5149 l_err_val_code_tbl.extend(1);
5150 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_ETC_MISS_MATCH_ERR';
5151 l_err_task_id_tbl.extend(1);
5152 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5153 l_err_rlm_id_tbl.extend(1);
5154 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5155 l_err_txn_curr_tbl.extend(1);
5156 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5157 l_err_amt_type_tbl.extend(1);
5158 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5159
5160 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5161 END IF;
5162 -- checking for mfc cost type
5163 IF l_inf_tbl_data_curr_rec.mfc_cost_type_name <> l_inf_tbl_data_next_rec.mfc_cost_type_name THEN
5164 l_err_val_code_tbl.extend(1);
5165 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_MFC_MISS_MATCH_ERR';
5166 l_err_task_id_tbl.extend(1);
5167 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5168 l_err_rlm_id_tbl.extend(1);
5169 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5170 l_err_txn_curr_tbl.extend(1);
5171 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5172 l_err_amt_type_tbl.extend(1);
5173 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5174
5175 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5176 END IF;
5177 /* commenting out this code block as its not required to check now
5178
5179 -- checking if the planning start date and end dates are same across same RA
5180 IF l_inf_tbl_data_curr_rec.planning_start_date <> l_inf_tbl_data_next_rec.planning_start_date THEN
5181 l_err_val_code_tbl.extend(1);
5182 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_ST_DT_MISS_MATCH';
5183 l_err_task_id_tbl.extend(1);
5184 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5185 l_err_rlm_id_tbl.extend(1);
5186 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5187 l_err_txn_curr_tbl.extend(1);
5188 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5189 l_err_amt_type_tbl.extend(1);
5190 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5191
5192 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5193 END IF;
5194 IF l_inf_tbl_data_curr_rec.planning_end_date <> l_inf_tbl_data_next_rec.planning_end_date THEN
5195 l_err_val_code_tbl.extend(1);
5196 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_EN_DT_MISS_MATCH';
5197 l_err_task_id_tbl.extend(1);
5198 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5199 l_err_rlm_id_tbl.extend(1);
5200 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5201 l_err_txn_curr_tbl.extend(1);
5202 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5203 l_err_amt_type_tbl.extend(1);
5204 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5205
5206 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5207 END IF;
5208 */
5209 END IF; -- same task and resource
5210
5211 ELSE -- non periodic
5212 --log1('----- STAGE 19.2-------');
5213 IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
5214 l_cached_ra_id_tbl(l_cached_ra_index) = -1 THEN
5215 IF l_plan_start_date IS NULL AND
5216 l_plan_end_date IS NOT NULL THEN
5217 l_err_val_code_tbl.extend(1);
5218 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_ST_DT_MISS_ERR';
5219 l_err_task_id_tbl.extend(1);
5220 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5221 l_err_rlm_id_tbl.extend(1);
5222 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5223 l_err_txn_curr_tbl.extend(1);
5224 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5225 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
5226 ELSIF l_plan_start_date IS NOT NULL AND
5227 l_plan_end_date IS NULL THEN
5228 l_err_val_code_tbl.extend(1);
5229 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_END_DT_MISS_ERR';
5230 l_err_task_id_tbl.extend(1);
5231 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5232 l_err_rlm_id_tbl.extend(1);
5233 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5234 l_err_txn_curr_tbl.extend(1);
5235 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5236 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
5237 END IF; -- planning dates null
5238 END IF;
5239
5240 --log1('----- STAGE 19.3-------');
5241 -- checking if the sp fixed date is within planning start/end date
5242 IF (l_plan_start_date > Nvl(l_sp_fixed_date, (l_plan_start_date + 1)))OR
5243 (l_plan_end_date < Nvl(l_sp_fixed_date, (l_plan_end_date - 1))) THEN
5244 l_err_val_code_tbl.extend(1);
5245 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_SP_FX_DT_OUT_RANGE';
5246 l_err_task_id_tbl.extend(1);
5247 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5248 l_err_rlm_id_tbl.extend(1);
5249 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5250 l_err_txn_curr_tbl.extend(1);
5251 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5252 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
5253 END IF;
5254
5255 --log1('----- STAGE 19.4-------');
5256 -- validation for UOM and other resource attributes, to check if they are same for all the rows,
5257 -- if the RA is same
5258 IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
5259 l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
5260 l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id THEN
5261 -- checking for UOM
5262 IF l_inf_tbl_data_curr_rec.unit_of_measure <> l_inf_tbl_data_next_rec.unit_of_measure THEN
5263 l_err_val_code_tbl.extend(1);
5264 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_UOM_MISS_MATCH_ERR';
5265 l_err_task_id_tbl.extend(1);
5266 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5267 l_err_rlm_id_tbl.extend(1);
5268 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5269 l_err_txn_curr_tbl.extend(1);
5270 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5271
5272 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5273 END IF;
5274 -- checking for spread curve name
5275 IF l_inf_tbl_data_curr_rec.spread_curve_name <> l_inf_tbl_data_next_rec.spread_curve_name THEN
5276 l_err_val_code_tbl.extend(1);
5277 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_SC_MISS_MATCH_ERR';
5278 l_err_task_id_tbl.extend(1);
5279 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5280 l_err_rlm_id_tbl.extend(1);
5281 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5282 l_err_txn_curr_tbl.extend(1);
5283 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5284
5285 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5286 END IF;
5287 -- checking for etc method name
5288 IF l_inf_tbl_data_curr_rec.etc_method_name <> l_inf_tbl_data_next_rec.etc_method_name THEN
5289 l_err_val_code_tbl.extend(1);
5290 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_ETC_MISS_MATCH_ERR';
5291 l_err_task_id_tbl.extend(1);
5292 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5293 l_err_rlm_id_tbl.extend(1);
5294 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5295 l_err_txn_curr_tbl.extend(1);
5296 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5297
5298 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5299 END IF;
5300 -- checking for mfc cost type name
5301 IF l_inf_tbl_data_curr_rec.mfc_cost_type_name <> l_inf_tbl_data_next_rec.mfc_cost_type_name THEN
5302 l_err_val_code_tbl.extend(1);
5303 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_MFC_MISS_MATCH_ERR';
5304 l_err_task_id_tbl.extend(1);
5305 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5306 l_err_rlm_id_tbl.extend(1);
5307 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5308 l_err_txn_curr_tbl.extend(1);
5309 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5310
5311 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5312 END IF;
5313
5314 /* commenting out this code block as its not required to check now
5315 -- checking if the planning start date and end dates are same across same RA
5316 IF l_inf_tbl_data_curr_rec.planning_start_date <> l_inf_tbl_data_next_rec.planning_start_date THEN
5317 l_err_val_code_tbl.extend(1);
5318 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_ST_DT_MISS_MATCH';
5319 l_err_task_id_tbl.extend(1);
5320 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5321 l_err_rlm_id_tbl.extend(1);
5322 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5323 l_err_txn_curr_tbl.extend(1);
5324 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5325
5326 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5327 END IF;
5328 IF l_inf_tbl_data_curr_rec.planning_end_date <> l_inf_tbl_data_next_rec.planning_end_date THEN
5329 l_err_val_code_tbl.extend(1);
5330 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_EN_DT_MISS_MATCH';
5331 l_err_task_id_tbl.extend(1);
5332 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5333 l_err_rlm_id_tbl.extend(1);
5334 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5335 l_err_txn_curr_tbl.extend(1);
5336 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5337
5338 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5339 END IF;
5340 */
5341 END IF; -- same task and resource
5342 --log1('----- STAGE 19.5-------');
5343
5344 END IF; -- non periodic
5345
5346 IF l_plan_trans_attr_copied_flag = 'N' THEN
5347 --log1('----- STAGE 101-------');
5348 -- populating an indicator to be passed to validate_budget_lines for the record
5349 l_delete_flag := 'Y';
5350 ELSE
5351 --log1('----- STAGE 102-------');
5352 l_delete_flag := 'N';
5353 END IF;
5354
5355 IF is_periodic_setup = 'Y' THEN
5356 --log1('----- STAGE 103-------');
5357 IF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_RAW_COST' THEN
5358 l_raw_cost := l_tmp_sum_amt;
5359 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_RAW_COST' THEN
5360 l_raw_cost := l_tmp_sum_amt;
5361 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_RAW_COST' THEN
5362 l_etc_raw_cost := l_tmp_sum_amt;
5363 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_BURDENED_COST' THEN
5364 l_burdened_cost := l_tmp_sum_amt;
5365 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_BURDENED_COST' THEN
5366 l_burdened_cost := l_tmp_sum_amt;
5367 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_BURDENED_COST' THEN
5368 l_etc_burdened_cost := l_tmp_sum_amt;
5369 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_REV' THEN
5370 l_revenue := l_tmp_sum_amt;
5371 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_REVENUE' THEN
5372 l_revenue := l_tmp_sum_amt;
5373 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_REVENUE' THEN
5374 l_etc_revenue := l_tmp_sum_amt;
5375 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_QTY' THEN
5376 l_quantity := l_tmp_sum_amt;
5377 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_QTY' THEN
5378 l_quantity := l_tmp_sum_amt;
5379 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_QTY' THEN
5380 l_etc_quantity := l_tmp_sum_amt;
5381 ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') THEN
5382 l_rc_rate := l_tmp_sum_amt;
5383 ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('ETC_BURDENED_COST_RATE','BURDENED_COST_RATE') THEN
5384 l_bc_rate := l_tmp_sum_amt;
5385 ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') THEN
5386 l_bill_rate := l_tmp_sum_amt;
5387 END IF;
5388 ELSE
5389 --log1('----- STAGE 104-------');
5390 IF l_debug_mode = 'Y' THEN
5391 pa_debug.g_err_stage := 'Opening Cursor non_prd_lyt_null_val_cur';
5392 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5393 END IF;
5394 OPEN non_prd_lyt_null_val_cur( l_inf_tbl_data_curr_rec.budget_version_id,
5395 l_inf_tbl_data_curr_rec.task_id,
5396 l_inf_tbl_data_curr_rec.resource_list_member_id,
5397 l_inf_tbl_data_curr_rec.txn_currency_code);
5398 FETCH non_prd_lyt_null_val_cur INTO
5399 l_ratxn_total_quantity,
5400 l_ratxn_total_raw_cost,
5401 l_ratxn_total_burdened_cost,
5402 l_ratxn_total_revenue,
5403 l_ratxn_etc_quantity,
5404 l_ratxn_etc_raw_cost,
5405 l_ratxn_etc_burdened_cost,
5406 l_ratxn_etc_revenue,
5407 l_ratxn_raw_cost_over_rate,
5408 l_ratxn_burden_cost_over_rate,
5409 l_ratxn_bill_over_rate,
5410 l_ra_rate_based_flag;
5411 CLOSE non_prd_lyt_null_val_cur;
5412 IF l_debug_mode = 'Y' THEN
5413 pa_debug.g_err_stage := 'l_ratxn_total_quantity' || l_ratxn_total_quantity;
5414 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5415 pa_debug.g_err_stage := 'l_ratxn_total_raw_cost' || l_ratxn_total_raw_cost;
5416 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5417 pa_debug.g_err_stage := 'l_ratxn_total_burdened_cost' || l_ratxn_total_burdened_cost;
5418 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5419 pa_debug.g_err_stage := 'l_ratxn_etc_quantity' || l_ratxn_etc_quantity;
5420 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5421 pa_debug.g_err_stage := 'l_ratxn_etc_raw_cost' || l_ratxn_etc_raw_cost;
5422 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5423 pa_debug.g_err_stage := 'l_ratxn_etc_burdened_cost' || l_ratxn_etc_burdened_cost;
5424 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5425 pa_debug.g_err_stage := 'l_ratxn_etc_revenue' || l_ratxn_etc_revenue;
5426 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5427 pa_debug.g_err_stage := 'l_ratxn_etc_revenue' || l_ratxn_etc_revenue;
5428 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5429 pa_debug.g_err_stage := 'l_ratxn_bill_over_rate' || l_ratxn_bill_over_rate;
5430 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5431 pa_debug.g_err_stage := 'l_ra_rate_based_flag' || l_ra_rate_based_flag;
5432 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5433 END IF;
5434
5435
5436 IF l_ratxn_total_quantity IS NULL AND (l_inf_tbl_data_curr_rec.quantity = l_fnd_miss_num) THEN
5437 l_quantity := NULL;
5438 ELSE
5439 l_quantity := l_inf_tbl_data_curr_rec.quantity;
5440 END IF;
5441 IF l_ratxn_total_raw_cost IS NULL AND (l_inf_tbl_data_curr_rec.raw_cost = l_fnd_miss_num) THEN
5442 l_raw_cost := NULL;
5443 ELSE
5444 l_raw_cost := l_inf_tbl_data_curr_rec.raw_cost;
5445 END IF;
5446 IF l_ratxn_total_burdened_cost IS NULL AND (l_inf_tbl_data_curr_rec.burdened_cost = l_fnd_miss_num) THEN
5447 l_burdened_cost := NULL;
5448 ELSE
5449 l_burdened_cost := l_inf_tbl_data_curr_rec.burdened_cost;
5450 END IF;
5451 IF l_ratxn_total_revenue IS NULL AND (l_inf_tbl_data_curr_rec.revenue = l_fnd_miss_num) THEN
5452 l_revenue := NULL;
5453 ELSE
5454 l_revenue := l_inf_tbl_data_curr_rec.revenue;
5455 END IF;
5456 IF l_ratxn_etc_quantity IS NULL AND (l_inf_tbl_data_curr_rec.etc_quantity = l_fnd_miss_num) THEN
5457 l_etc_quantity := NULL;
5458 ELSE
5459 l_etc_quantity := l_inf_tbl_data_curr_rec.etc_quantity;
5460 END IF;
5461 IF l_ratxn_etc_raw_cost IS NULL AND (l_inf_tbl_data_curr_rec.etc_raw_cost = l_fnd_miss_num) THEN
5462 l_etc_raw_cost := NULL;
5463 ELSE
5464 l_etc_raw_cost := l_inf_tbl_data_curr_rec.etc_raw_cost;
5465 END IF;
5466 IF l_ratxn_etc_burdened_cost IS NULL AND (l_inf_tbl_data_curr_rec.etc_burdened_cost = l_fnd_miss_num) THEN
5467 l_etc_burdened_cost := NULL;
5468 ELSE
5469 l_etc_burdened_cost := l_inf_tbl_data_curr_rec.etc_burdened_cost;
5470 END IF;
5471 IF l_ratxn_etc_revenue IS NULL AND (l_inf_tbl_data_curr_rec.etc_revenue = l_fnd_miss_num) THEN
5472 l_etc_revenue := NULL;
5473 ELSE
5474 l_etc_revenue := l_inf_tbl_data_curr_rec.etc_revenue;
5475 END IF;
5476 /* Bug 5068203 : Changes are made to the override rates so that the override rates
5477 will be calculated as NULL instead of g_miss_num for a resource assignment
5478 with rate_based_flag as 'N' and has value for override rates in new entity
5479 and has no changes in Excel while uploaded from Excel with Non-Periodic layout.
5480 */
5481 IF l_ra_rate_based_flag = 'Y' THEN
5482 IF l_ratxn_raw_cost_over_rate IS NULL AND (l_inf_tbl_data_curr_rec.raw_cost_rate = l_fnd_miss_num) THEN
5483 l_rc_rate := NULL;
5484 ELSE
5485 l_rc_rate := l_inf_tbl_data_curr_rec.raw_cost_rate;
5486 END IF;
5487 ELSE
5488 IF l_inf_tbl_data_curr_rec.quantity = l_fnd_miss_num AND (l_inf_tbl_data_curr_rec.etc_quantity IS NULL OR l_inf_tbl_data_curr_rec.etc_quantity = l_fnd_miss_num) THEN
5489 l_rc_rate := NULL;
5490 ELSIF l_inf_tbl_data_curr_rec.raw_cost_rate = l_fnd_miss_num THEN
5491 l_rc_rate := NULL;
5492 ELSE
5493 l_rc_rate := l_inf_tbl_data_curr_rec.raw_cost_rate;
5494 END IF;
5495 END IF;
5496
5497 IF l_ra_rate_based_flag = 'Y' THEN
5498 IF l_ratxn_burden_cost_over_rate IS NULL AND (l_inf_tbl_data_curr_rec.burdened_cost_rate = l_fnd_miss_num) THEN
5499 l_bc_rate := NULL;
5500 ELSE
5501 l_bc_rate := l_inf_tbl_data_curr_rec.burdened_cost_rate;
5502 END IF;
5503 ELSE
5504 IF l_inf_tbl_data_curr_rec.quantity = l_fnd_miss_num AND (l_inf_tbl_data_curr_rec.etc_quantity IS NULL OR l_inf_tbl_data_curr_rec.etc_quantity = l_fnd_miss_num) THEN
5505 l_bc_rate := NULL;
5506 ELSIF l_inf_tbl_data_curr_rec.burdened_cost_rate = l_fnd_miss_num THEN
5507 l_bc_rate := NULL;
5508 ELSE
5509 l_bc_rate := l_inf_tbl_data_curr_rec.burdened_cost_rate;
5510 END IF;
5511 END IF;
5512
5513 IF l_ra_rate_based_flag = 'Y' THEN
5514 IF l_ratxn_bill_over_rate IS NULL AND (l_inf_tbl_data_curr_rec.bill_rate = l_fnd_miss_num) THEN
5515 l_bill_rate := NULL;
5516 ELSE
5517 l_bill_rate := l_inf_tbl_data_curr_rec.bill_rate;
5518 END IF;
5519 ELSE
5520 IF l_inf_tbl_data_curr_rec.quantity = l_fnd_miss_num AND (l_inf_tbl_data_curr_rec.etc_quantity IS NULL OR l_inf_tbl_data_curr_rec.etc_quantity = l_fnd_miss_num) THEN
5521 l_bill_rate := NULL;
5522 ELSIF l_inf_tbl_data_curr_rec.bill_rate = l_fnd_miss_num THEN
5523 l_bill_rate := NULL;
5524 ELSE
5525 l_bill_rate := l_inf_tbl_data_curr_rec.bill_rate;
5526 END IF;
5527 END IF;
5528
5529 /* l_raw_cost := l_inf_tbl_data_curr_rec.raw_cost;
5530 l_burdened_cost := l_inf_tbl_data_curr_rec.burdened_cost;
5531 l_revenue := l_inf_tbl_data_curr_rec.revenue;
5532 l_quantity := l_inf_tbl_data_curr_rec.quantity;
5533 l_etc_quantity := l_inf_tbl_data_curr_rec.etc_quantity;
5534 l_etc_raw_cost := l_inf_tbl_data_curr_rec.etc_raw_cost;
5535 l_etc_burdened_cost := l_inf_tbl_data_curr_rec.etc_burdened_cost;
5536 l_etc_revenue := l_inf_tbl_data_curr_rec.etc_revenue;
5537
5538 l_rc_rate := l_inf_tbl_data_curr_rec.raw_cost_rate;
5539 l_bc_rate := l_inf_tbl_data_curr_rec.burdened_cost_rate;
5540 l_bill_rate := l_inf_tbl_data_curr_rec.bill_rate; */
5541 END IF;
5542
5543 -- initializing the min and max budget line dates
5544 IF l_min_bdgt_line_start_date IS NULL THEN
5545 l_min_bdgt_line_start_date:=l_bdgt_line_start_date;
5546 ELSIF l_bdgt_line_start_date IS NOT NULL AND l_bdgt_line_start_date < l_min_bdgt_line_start_date THEN
5547 l_min_bdgt_line_start_date:=l_bdgt_line_start_date;
5548 END IF;
5549
5550 IF l_max_bdgt_line_end_date IS NULL THEN
5551 l_max_bdgt_line_end_date:=l_bdgt_line_end_date;
5552 ELSIF l_bdgt_line_end_date IS NOT NULL AND l_bdgt_line_end_date > l_max_bdgt_line_end_date THEN
5553 l_max_bdgt_line_end_date:=l_bdgt_line_end_date;
5554 END IF;
5555
5556 --log1('----- STAGE 105-------');
5557 --Prepare the pl/sql tbls to be passed to validate_budget_lines API for each
5558 --planning transaction
5559 IF l_inf_tbl_data_next_rec.task_id IS NULL OR
5560 Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') OR
5561 l_inf_tbl_data_next_rec.task_id <> l_inf_tbl_data_curr_rec.task_id OR
5562 l_inf_tbl_data_next_rec.resource_list_member_id <> l_inf_tbl_data_curr_rec.resource_list_member_id THEN
5563
5564 l_budget_line_in_out_tbl(bl_count).pa_task_id := l_inf_tbl_data_curr_rec.task_id;
5565 l_budget_line_in_out_tbl(bl_count).resource_list_member_id := l_inf_tbl_data_curr_rec.resource_list_member_id;
5566
5567 l_budget_line_in_out_tbl(bl_count).budget_start_date := l_min_bdgt_line_start_date;
5568 l_budget_line_in_out_tbl(bl_count).budget_end_date := l_max_bdgt_line_end_date;
5569
5570 l_budget_line_in_out_tbl(bl_count).raw_cost := l_raw_cost;
5571 l_budget_line_in_out_tbl(bl_count).burdened_cost := l_burdened_cost;
5572 l_budget_line_in_out_tbl(bl_count).revenue := l_revenue;
5573 l_budget_line_in_out_tbl(bl_count).quantity := l_quantity;
5574
5575 x_etc_quantity_tbl.extend;
5576 x_etc_raw_cost_tbl.extend;
5577 x_etc_burdened_cost_tbl.extend;
5578 x_etc_revenue_tbl.extend;
5579 x_etc_quantity_tbl(x_etc_quantity_tbl.COUNT):=l_etc_quantity;
5580 x_etc_raw_cost_tbl(x_etc_raw_cost_tbl.COUNT):=l_etc_raw_cost;
5581 x_etc_burdened_cost_tbl(x_etc_burdened_cost_tbl.COUNT):=l_etc_burdened_cost;
5582 x_etc_revenue_tbl(x_etc_revenue_tbl.COUNT):=l_etc_revenue;
5583
5584 --log1('--txn_currency_code-----' || l_inf_tbl_data_curr_rec.txn_currency_code);
5585 l_budget_line_in_out_tbl(bl_count).txn_currency_code := l_inf_tbl_data_curr_rec.txn_currency_code;
5586
5587 l_budget_line_in_out_tbl(bl_count).description := l_bdgt_ln_tbl_description;
5588
5589 l_delete_flag_tbl.EXTEND(1);
5590 l_delete_flag_tbl(bl_count) := l_delete_flag;
5591
5592 --log1('----- STAGE 113-------');
5593 IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
5594 --log1('----- STAGE 114-------');
5595 l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_type := l_projfunc_cost_rate_type;
5596 l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date_type := l_projfunc_cost_rate_date_type;
5597 l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date := l_projfunc_cost_rate_date;
5598 l_budget_line_in_out_tbl(bl_count).projfunc_cost_exchange_rate := l_projfunc_cost_exchange_rate;
5599 l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_type := l_projfunc_rev_rate_type;
5600 l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date_type := l_projfunc_rev_rate_date_type;
5601 l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date := l_projfunc_rev_rate_date;
5602 l_budget_line_in_out_tbl(bl_count).projfunc_rev_exchange_rate := l_projfunc_rev_exchange_rate;
5603 l_budget_line_in_out_tbl(bl_count).project_cost_rate_type := l_project_cost_rate_type;
5604 l_budget_line_in_out_tbl(bl_count).project_cost_rate_date_type := l_project_cost_rate_date_type;
5605 l_budget_line_in_out_tbl(bl_count).project_cost_rate_date := l_project_cost_rate_date;
5606 l_budget_line_in_out_tbl(bl_count).project_cost_exchange_rate := l_project_cost_exchange_rate;
5607 l_budget_line_in_out_tbl(bl_count).project_rev_rate_type := l_project_rev_rate_type;
5608 l_budget_line_in_out_tbl(bl_count).project_rev_rate_date_type := l_project_rev_rate_date_type;
5609 l_budget_line_in_out_tbl(bl_count).project_rev_rate_date := l_project_rev_rate_date;
5610 l_budget_line_in_out_tbl(bl_count).project_rev_exchange_rate := l_project_rev_exchange_rate;
5611 ELSE
5612 l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_type := null;
5613 l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date_type := null;
5614 l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date := null;
5615 l_budget_line_in_out_tbl(bl_count).projfunc_cost_exchange_rate := null;
5616 l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_type := null;
5617 l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date_type := null;
5618 l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date := null;
5619 l_budget_line_in_out_tbl(bl_count).projfunc_rev_exchange_rate := null;
5620 l_budget_line_in_out_tbl(bl_count).project_cost_rate_type := null;
5621 l_budget_line_in_out_tbl(bl_count).project_cost_rate_date_type := null;
5622 l_budget_line_in_out_tbl(bl_count).project_cost_rate_date := null;
5623 l_budget_line_in_out_tbl(bl_count).project_cost_exchange_rate := null;
5624 l_budget_line_in_out_tbl(bl_count).project_rev_rate_type := null;
5625 l_budget_line_in_out_tbl(bl_count).project_rev_rate_date_type := null;
5626 l_budget_line_in_out_tbl(bl_count).project_rev_rate_date := null;
5627 l_budget_line_in_out_tbl(bl_count).project_rev_exchange_rate := null;
5628 END IF;
5629
5630 l_budget_line_in_out_tbl(bl_count).change_reason_code := l_change_reason_code;
5631
5632 -- populating other parameters to be passed to validate_budget_lines
5633 l_rc_rate_tbl.EXTEND(1);
5634 l_rc_rate_tbl(bl_count) := l_rc_rate;
5635 l_bc_rate_tbl.EXTEND(1);
5636 l_bc_rate_tbl(bl_count) := l_bc_rate;
5637 l_bill_rate_tbl.EXTEND(1);
5638 l_bill_rate_tbl(bl_count) := l_bill_rate;
5639
5640 l_plan_start_date_tbl.extend(1);
5641 l_plan_start_date_tbl(bl_count) := l_plan_start_date;
5642 l_plan_end_date_tbl.extend(1);
5643 l_plan_end_date_tbl(bl_count) := l_plan_end_date;
5644
5645 -- passing null for all the resource attributes as they are meant to be read-only
5646 l_uom_tbl.extend(1);
5647 l_uom_tbl(bl_count) := null;
5648 l_spread_curve_name_tbl.extend(1);
5649 l_spread_curve_name_tbl(bl_count) := null;
5650 l_etc_method_code_tbl.extend(1);
5651 l_etc_method_code_tbl(bl_count) := null;
5652 l_mfc_cost_type_name_tbl.extend(1);
5653 l_mfc_cost_type_name_tbl(bl_count) := null;
5654
5655 l_sp_fixed_date_tbl.extend(1);
5656 l_sp_fixed_date_tbl(bl_count) := l_sp_fixed_date;
5657
5658 -- populating the spread curve id obtained in the out table
5659 l_spread_curve_id_tbl.EXTEND(1);
5660 l_spread_curve_id_tbl(bl_count) := l_spread_curve_id;
5661
5662 -- deriving the min and max of the budget line start/end dates
5663 IF l_min_ra_plan_start_date IS NULL THEN
5664
5665 l_min_ra_plan_start_date := l_min_bdgt_line_start_date;
5666
5667 ELSIF l_min_bdgt_line_start_date IS NOT NULL AND
5668 l_min_bdgt_line_start_date < l_min_ra_plan_start_date THEN
5669
5670 l_min_ra_plan_start_date := l_min_bdgt_line_start_date;
5671
5672 END IF;
5673
5674 IF l_max_ra_plan_end_date IS NULL THEN
5675
5676 l_max_ra_plan_end_date := l_max_bdgt_line_end_date;
5677
5678 ELSIF l_max_bdgt_line_end_date IS NOT NULL AND
5679 l_max_bdgt_line_end_date > l_max_ra_plan_end_date THEN
5680
5681 l_max_ra_plan_end_date := l_max_bdgt_line_end_date;
5682
5683 END IF;
5684
5685 -- populating other out variables
5686 l_ra_id_tbl.EXTEND(1);
5687 l_ra_id_tbl(bl_count) := l_ra_id;
5688 l_res_class_code_tbl.EXTEND(1);
5689 l_res_class_code_tbl(bl_count) := l_res_class_code;
5690 l_rate_based_flag_tbl.EXTEND(1);
5691 l_rate_based_flag_tbl(bl_count) := l_rate_based_flag;
5692 l_rbs_elem_id_tbl.EXTEND(1);
5693 l_rbs_elem_id_tbl(bl_count) := l_rbs_elem_id;
5694
5695 l_amount_type_tbl.EXTEND(1);
5696 l_amount_type_tbl(bl_count) := l_inf_tbl_data_curr_rec.amount_type_code;
5697
5698 -- incrementing the bl_count
5699 bl_count := bl_count + 1;
5700
5701 END IF;
5702
5703 --log1('----- STAGE 107-------');
5704
5705 END IF; -- for a distinct current record
5706
5707 --log1('----- STAGE 115-------');
5708 EXCEPTION -- inside the loop to catch skip_ra_exc
5709 WHEN Fp_Webadi_Skip_Dup_Rec_Exc THEN
5710 -- exception to skip processing of the duplicate records entered
5711 IF l_debug_mode = 'Y' THEN
5712 pa_debug.g_err_stage := 'Fp_Webadi_Skip_Dup_Rec_Exc Raised';
5713 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5714 END IF;
5715 LOOP
5716 l_inf_tbl_data_skip_rec:=NULL;
5717 FETCH inf_tbl_data_csr INTO l_inf_tbl_data_skip_rec;
5718 EXIT WHEN l_loop_exit_flag = 'Y' OR l_inf_tbl_data_skip_rec.task_id IS NULL;
5719
5720 IF l_inf_tbl_data_skip_rec.task_id <> l_inf_tbl_data_next_rec.task_id OR
5721 l_inf_tbl_data_skip_rec.resource_list_member_id <> l_inf_tbl_data_next_rec.resource_list_member_id OR
5722 Nvl(l_inf_tbl_data_skip_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') OR
5723 NVL(l_inf_tbl_data_skip_rec.amount_type_code,'-99') <> NVL(l_inf_tbl_data_next_rec.amount_type_code,'-99') THEN
5724
5725 -- assigning the next distinct planning txn to the next_rec record
5726 l_inf_tbl_data_next_rec := l_inf_tbl_data_skip_rec;
5727 l_loop_exit_flag := 'Y';
5728
5729 END IF;
5730 END LOOP;
5731 WHEN Fp_Webadi_Skip_Rec_Proc_Exc THEN
5732 -- exception to skip processing of the record, if any validation
5733 -- failure occurs in the current record, so that there would be
5734 -- at max one error code populated for any particular record.
5735 IF l_debug_mode = 'Y' THEN
5736 pa_debug.g_err_stage := 'Fp_Webadi_Skip_Rec_Proc_Exc Raised';
5737 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5738 END IF;
5739 IF l_inf_tbl_data_next_rec.task_id IS NULL THEN
5740 FETCH inf_tbl_data_csr INTO l_inf_tbl_data_next_rec;
5741 END IF;
5742
5743 WHEN Fp_Webadi_Skip_Next_Rec_Exc THEN
5744 -- exception to skip processing of the next record, if any validation
5745 -- failure occurs in that record, so that there would be
5746 -- at max one error code populated for any particular record.
5747 IF l_debug_mode = 'Y' THEN
5748 pa_debug.g_err_stage := 'Fp_Webadi_Skip_Next_Rec_Exc Raised';
5749 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5750 END IF;
5751 l_inf_tbl_data_skip_rec:=NULL;
5752 FETCH inf_tbl_data_csr INTO l_inf_tbl_data_skip_rec;
5753 l_inf_tbl_data_next_rec := l_inf_tbl_data_skip_rec;
5754
5755
5756 /* Do nothing just skip the current record and proceed with the next one */
5757 END; -- end of the processing block inside the loop
5758
5759 -- making the next_rec as the current_rec
5760 l_inf_tbl_data_prev_rec := l_inf_tbl_data_curr_rec;
5761 l_inf_tbl_data_curr_rec := l_inf_tbl_data_next_rec;
5762 l_inf_tbl_data_next_rec := NULL;
5763
5764 x_num_of_rec_processed := x_num_of_rec_processed + 1;
5765 END LOOP; -- end of main loop
5766
5767 CLOSE inf_tbl_data_csr;
5768
5769 --log1('----- STAGE 115-------'||l_err_val_code_tbl.COUNT);
5770
5771 -- calling process_errors
5772 IF l_err_val_code_tbl.COUNT > 0 THEN
5773 IF l_debug_mode = 'Y' THEN
5774 pa_debug.g_err_stage := 'Error Code Exists.Calling process_errors';
5775 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5776 END IF;
5777 process_errors ( p_run_id => p_run_id,
5778 p_periodic_flag => is_periodic_setup,
5779 p_error_code_tbl => l_err_val_code_tbl,
5780 p_task_id_tbl => l_err_task_id_tbl,
5781 p_rlm_id_tbl => l_err_rlm_id_tbl,
5782 p_txn_curr_tbl => l_err_txn_curr_tbl,
5783 p_amount_type_tbl => l_err_amt_type_tbl,
5784 p_request_id => p_request_id,
5785 x_return_status => l_return_status,
5786 x_msg_data => l_msg_data,
5787 x_msg_count => l_msg_count);
5788 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5789 IF l_debug_mode = 'Y' THEN
5790 pa_debug.g_err_stage := 'Call to process_errors returned with error';
5791 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5792 END IF;
5793 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5794 END IF;
5795 END IF;
5796
5797 --log1('----- STAGE 116-------'||l_err_val_code_tbl.COUNT);
5798
5799 /* FOR zz IN 1..l_budget_line_in_out_tbl.COUNT LOOP
5800
5801 log1('-l_budget_line_in_out_tbl('||zz||').pa_task_id- ' || l_budget_line_in_out_tbl(zz).pa_task_id);
5802 log1('-l_budget_line_in_out_tbl('||zz||').resource_list_member_id- ' || l_budget_line_in_out_tbl(zz).resource_list_member_id);
5803 log1('-l_budget_line_in_out_tbl('||zz||').txn_currency_code- ' || l_budget_line_in_out_tbl(zz).txn_currency_code);
5804 log1('-l_budget_line_in_out_tbl('||zz||').quantity- ' || l_budget_line_in_out_tbl(zz).quantity);
5805 log1('-l_budget_line_in_out_tbl('||zz||').raw_cost- ' || l_budget_line_in_out_tbl(zz).raw_cost);
5806 log1('-l_budget_line_in_out_tbl('||zz||').burdened_cost- ' || l_budget_line_in_out_tbl(zz).burdened_cost);
5807 log1('-l_budget_line_in_out_tbl('||zz||').revenue- ' || l_budget_line_in_out_tbl(zz).revenue);
5808
5809 END LOOP;*/
5810
5811 -- populating the out variables
5812 x_budget_lines := l_budget_line_in_out_tbl;
5813 x_raw_cost_rate_tbl := l_rc_rate_tbl;
5814 x_burd_cost_rate_tbl := l_bc_rate_tbl;
5815 x_bill_rate_tbl := l_bill_rate_tbl;
5816 x_planning_start_date_tbl := l_plan_start_date_tbl;
5817 x_planning_end_date_tbl := l_plan_end_date_tbl;
5818 x_uom_tbl := l_uom_tbl;
5819 x_mfc_cost_type_tbl := l_mfc_cost_type_name_tbl;
5820 x_spread_curve_name_tbl := l_spread_curve_name_tbl;
5821 x_sp_fixed_date_tbl := l_sp_fixed_date_tbl;
5822 x_etc_method_name_tbl := l_etc_method_code_tbl;
5823 x_delete_flag_tbl := l_delete_flag_tbl;
5824 -- additional parameter to validate_budget_lines
5825 x_spread_curve_id_tbl := l_spread_curve_id_tbl;
5826
5827 x_ra_id_tbl := l_ra_id_tbl;
5828 x_res_class_code_tbl := l_res_class_code_tbl;
5829 x_rate_based_flag_tbl := l_rate_based_flag_tbl;
5830 x_rbs_elem_id_tbl := l_rbs_elem_id_tbl;
5831 x_amt_type_tbl := l_amount_type_tbl;
5832
5833 IF l_debug_mode = 'Y' THEN
5834 pa_debug.g_err_stage := 'Leaving pa_fp_webadi_pkg.prepare_val_input';
5835 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5836 END IF;
5837
5838 pa_debug.reset_curr_function;
5839
5840 --log1('----- Leaving prepare_val_input-------');
5841
5842 EXCEPTION
5843 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
5844 l_msg_count := FND_MSG_PUB.count_msg;
5845
5846 IF l_msg_count = 1 and x_msg_data IS NULL THEN
5847 PA_INTERFACE_UTILS_PUB.get_messages
5848 (p_encoded => FND_API.G_TRUE
5849 ,p_msg_index => 1
5850 ,p_msg_count => l_msg_count
5851 ,p_msg_data => l_msg_data
5852 ,p_data => l_data
5853 ,p_msg_index_out => l_msg_index_out);
5854 x_msg_data := l_data;
5855 x_msg_count := l_msg_count;
5856 ELSE
5857 x_msg_count := l_msg_count;
5858 END IF;
5859 x_return_status := FND_API.G_RET_STS_ERROR;
5860
5861 pa_debug.reset_curr_function;
5862
5863 RETURN;
5864
5865 WHEN OTHERS THEN
5866 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5867 x_msg_count := 1;
5868 x_msg_data := SQLERRM;
5869
5870 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
5871 ,p_procedure_name => 'prepare_val_input');
5872 IF l_debug_mode = 'Y' THEN
5873 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
5874 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5875 END IF;
5876
5877 pa_debug.reset_curr_function;
5878
5879 RAISE;
5880
5881 END prepare_val_input;
5882
5883 --This is a private function used by prepare_pbl_input. This function expects p_rec, record in pa_fp_webadi_upload_inf
5884 --and p_prd that indicates the period in p_rec from which the amount should be returned.
5885 --valid values for prd are ('SD,'PD', '1'..'52')
5886
5887 FUNCTION get_amount_in_prd_x
5888 (p_rec IN inf_tbl_data_csr%ROWTYPE,
5889 p_prd IN VARCHAR2
5890 )
5891 RETURN NUMBER
5892 IS
5893 -- variables used for debugging
5894 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.get_amount_in_prd_x';
5895 l_debug_mode VARCHAR2(1) := 'N';
5896 l_amount NUMBER;
5897 BEGIN
5898 fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
5899
5900
5901 IF l_debug_mode = 'Y' THEN
5902 pa_debug.g_err_stage := 'Entering into get_amount_in_prd_x';
5903 pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
5904 pa_debug.g_err_stage := 'Validating input parameters';
5905 pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
5906 END IF;
5907
5908 IF l_debug_mode = 'Y' THEN
5909 pa_debug.Set_Curr_Function
5910 (p_function => l_module_name,
5911 p_debug_mode => l_debug_mode);
5912 END IF;
5913
5914 IF p_prd IS NULL THEN
5915
5916 IF l_debug_mode = 'Y' THEN
5917
5918 pa_debug.g_err_stage := 'p_rec is null';
5919 pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
5920 pa_debug.g_err_stage := 'p_prd is null';
5921 pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
5922 pa_debug.reset_curr_function;
5923
5924 END IF;
5925 RETURN NULL;
5926
5927 END IF;
5928
5929 IF l_debug_mode = 'Y' THEN
5930 pa_debug.g_err_stage := 'p_prd is '||p_prd;
5931 pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
5932 END IF;
5933
5934 IF p_prd ='PD' THEN
5935 l_amount := p_rec.pd_prd;
5936 ELSIF p_prd ='SD' THEN
5937 l_amount := p_rec.sd_prd;
5938 ELSIF p_prd ='1' THEN
5939 l_amount := p_rec.prd1;
5940 ELSIF p_prd ='2' THEN
5941 l_amount := p_rec.prd2;
5942 ELSIF p_prd ='3' THEN
5943 l_amount := p_rec.prd3;
5944 ELSIF p_prd ='4' THEN
5945 l_amount := p_rec.prd4;
5946 ELSIF p_prd ='5' THEN
5947 l_amount := p_rec.prd5;
5948 ELSIF p_prd ='6' THEN
5949 l_amount := p_rec.prd6;
5950 ELSIF p_prd ='7' THEN
5951 l_amount := p_rec.prd7;
5952 ELSIF p_prd ='8' THEN
5953 l_amount := p_rec.prd8;
5954 ELSIF p_prd ='9' THEN
5955 l_amount := p_rec.prd9;
5956 ELSIF p_prd ='10' THEN
5957 l_amount := p_rec.prd10;
5958 ELSIF p_prd ='11' THEN
5959 l_amount := p_rec.prd11;
5960 ELSIF p_prd ='12' THEN
5961 l_amount := p_rec.prd12;
5962 ELSIF p_prd ='13' THEN
5963 l_amount := p_rec.prd13;
5964 ELSIF p_prd ='14' THEN
5965 l_amount := p_rec.prd14;
5966 ELSIF p_prd ='15' THEN
5967 l_amount := p_rec.prd15;
5968 ELSIF p_prd ='16' THEN
5969 l_amount := p_rec.prd16;
5970 ELSIF p_prd ='17' THEN
5971 l_amount := p_rec.prd17;
5972 ELSIF p_prd ='18' THEN
5973 l_amount := p_rec.prd18;
5974 ELSIF p_prd ='19' THEN
5975 l_amount := p_rec.prd19;
5976 ELSIF p_prd ='20' THEN
5977 l_amount := p_rec.prd20;
5978 ELSIF p_prd ='21' THEN
5979 l_amount := p_rec.prd21;
5980 ELSIF p_prd ='22' THEN
5981 l_amount := p_rec.prd22;
5982 ELSIF p_prd ='23' THEN
5983 l_amount := p_rec.prd23;
5984 ELSIF p_prd ='24' THEN
5985 l_amount := p_rec.prd24;
5986 ELSIF p_prd ='25' THEN
5987 l_amount := p_rec.prd25;
5988 ELSIF p_prd ='26' THEN
5989 l_amount := p_rec.prd26;
5990 ELSIF p_prd ='27' THEN
5991 l_amount := p_rec.prd27;
5992 ELSIF p_prd ='28' THEN
5993 l_amount := p_rec.prd28;
5994 ELSIF p_prd ='29' THEN
5995 l_amount := p_rec.prd29;
5996 ELSIF p_prd ='30' THEN
5997 l_amount := p_rec.prd30;
5998 ELSIF p_prd ='31' THEN
5999 l_amount := p_rec.prd31;
6000 ELSIF p_prd ='32' THEN
6001 l_amount := p_rec.prd32;
6002 ELSIF p_prd ='33' THEN
6003 l_amount := p_rec.prd33;
6004 ELSIF p_prd ='34' THEN
6005 l_amount := p_rec.prd34;
6006 ELSIF p_prd ='35' THEN
6007 l_amount := p_rec.prd35;
6008 ELSIF p_prd ='36' THEN
6009 l_amount := p_rec.prd36;
6010 ELSIF p_prd ='37' THEN
6011 l_amount := p_rec.prd37;
6012 ELSIF p_prd ='38' THEN
6013 l_amount := p_rec.prd38;
6014 ELSIF p_prd ='39' THEN
6015 l_amount := p_rec.prd39;
6016 ELSIF p_prd ='40' THEN
6017 l_amount := p_rec.prd40;
6018 ELSIF p_prd ='41' THEN
6019 l_amount := p_rec.prd41;
6020 ELSIF p_prd ='42' THEN
6021 l_amount := p_rec.prd42;
6022 ELSIF p_prd ='43' THEN
6023 l_amount := p_rec.prd43;
6024 ELSIF p_prd ='44' THEN
6025 l_amount := p_rec.prd44;
6026 ELSIF p_prd ='45' THEN
6027 l_amount := p_rec.prd45;
6028 ELSIF p_prd ='46' THEN
6029 l_amount := p_rec.prd46;
6030 ELSIF p_prd ='47' THEN
6031 l_amount := p_rec.prd47;
6032 ELSIF p_prd ='48' THEN
6033 l_amount := p_rec.prd48;
6034 ELSIF p_prd ='49' THEN
6035 l_amount := p_rec.prd49;
6036 ELSIF p_prd ='50' THEN
6037 l_amount := p_rec.prd50;
6038 ELSIF p_prd ='51' THEN
6039 l_amount := p_rec.prd51;
6040 ELSIF p_prd ='52' THEN
6041 l_amount := p_rec.prd52;
6042 END IF;
6043
6044 IF l_debug_mode = 'Y' THEN
6045 pa_debug.reset_curr_function;
6046 END IF;
6047
6048 RETURN l_amount;
6049
6050 EXCEPTION
6051 WHEN OTHERS THEN
6052
6053 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
6054 ,p_procedure_name => 'get_amount_in_prd_x');
6055 IF l_debug_mode = 'Y' THEN
6056 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
6057 pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
6058 END IF;
6059
6060 IF l_debug_mode = 'Y' THEN
6061 pa_debug.reset_curr_function;
6062 END IF;
6063 RAISE;
6064 END get_amount_in_prd_x;
6065
6066 --This API is internally called from prepare_pbl_input
6067 PROCEDURE get_total_fcst_amounts
6068 (p_project_id IN pa_projects_all.project_id%TYPE,
6069 p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE,
6070 p_task_id IN pa_tasks.task_id%TYPE,
6071 p_resource_list_member_id IN pa_resource_list_members.resource_list_member_id%TYPE,
6072 p_txn_currency_code IN pa_budget_lines.txn_currency_code%TYPE,
6073 p_line_start_date IN DATE,
6074 p_line_end_date IN DATE,
6075 p_prd_mask_st_date_tbl IN SYSTEM.pa_date_tbl_type,
6076 p_prd_mask_end_date_tbl IN SYSTEM.pa_date_tbl_type,
6077 p_st_index_in_prd_mask IN NUMBER,
6078 p_end_index_in_prd_mask IN NUMBER,
6079 p_etc_start_date IN DATE,
6080 p_etc_quantity IN NUMBER,
6081 p_fcst_quantity IN NUMBER,
6082 p_etc_raw_cost IN NUMBER,
6083 p_fcst_raw_cost IN NUMBER,
6084 p_etc_burd_cost IN NUMBER,
6085 p_fcst_burd_cost IN NUMBER,
6086 p_etc_revenue IN NUMBER,
6087 p_fcst_revenue IN NUMBER,
6088 px_cached_fcst_qty_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6089 px_cached_fcst_raw_cost_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6090 px_cached_fcst_burd_cost_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6091 px_cached_fcst_revenue_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6092 px_cached_etc_qty_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6093 px_cached_etc_raw_cost_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6094 px_cached_etc_burd_cost_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6095 px_cached_etc_revenue_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6096 x_total_quantity OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6097 x_total_raw_cost OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6098 x_total_burd_cost OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6099 x_total_revenue OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6100 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
6101 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6102 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6103 )
6104 IS
6105 --Start of variables used for debugging
6106 l_return_status VARCHAR2(1);
6107 l_msg_count NUMBER := 0;
6108 l_msg_data VARCHAR2(2000);
6109 l_data VARCHAR2(2000);
6110 l_msg_index_out NUMBER;
6111 l_debug_mode VARCHAR2(30);
6112 l_module_name VARCHAR2(100):='PAFPWAPB.get_total_fcst_amounts';
6113
6114 --End of variables used for debugging
6115 l_varchar_index VARCHAR2(50);
6116 l_amt_typs_to_be_populated_tbl pa_plsql_datatypes.char30TabTyp;
6117 l_amt_typ_index NUMBER;
6118 l_amt_exists_flag VARCHAR2(1);
6119 l_existing_fcst_amount NUMBER;
6120 l_existing_etc_amount NUMBER;
6121 l_entered_fcst_amount NUMBER;
6122 l_entered_etc_amount NUMBER;
6123 l_total_amount NUMBER;
6124 l_index NUMBER;
6125 l_fcst_qty_tbl pa_plsql_datatypes.numTabTyp;
6126 l_etc_qty_tbl pa_plsql_datatypes.numTabTyp;
6127 l_fcst_raw_cost_tbl pa_plsql_datatypes.numTabTyp;
6128 l_etc_raw_cost_tbl pa_plsql_datatypes.numTabTyp;
6129 l_fcst_burd_cost_tbl pa_plsql_datatypes.numTabTyp;
6130 l_etc_burd_cost_tbl pa_plsql_datatypes.numTabTyp;
6131 l_fcst_revenue_tbl pa_plsql_datatypes.numTabTyp;
6132 l_etc_revenue_tbl pa_plsql_datatypes.numTabTyp;
6133 l_txn_currency_code_tbl pa_plsql_datatypes.char15TabTyp;
6134 l_start_date_tbl pa_plsql_datatypes.dateTabTyp;
6135 l_end_date_tbl pa_plsql_datatypes.dateTabTyp;
6136 BEGIN
6137 x_msg_count := 0;
6138 x_return_status := FND_API.G_RET_STS_SUCCESS;
6139
6140 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
6141 l_debug_mode := NVL(l_debug_mode, 'Y');
6142
6143 -- Set curr function
6144 IF l_debug_mode='Y' THEN
6145
6146 pa_debug.set_curr_function(
6147 p_function =>'PAFPWAPB.get_total_fcst_amounts'
6148 ,p_debug_mode => l_debug_mode );
6149 END IF;
6150
6151 IF p_task_id IS NULL OR
6152 p_resource_list_member_id IS NULL OR
6153 p_txn_currency_code IS NULL THEN
6154
6155 IF l_debug_mode = 'Y' THEN
6156
6157 pa_debug.g_err_stage:='p_task_id is'|| p_task_id;
6158 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6159
6160 pa_debug.g_err_stage:='p_resource_list_member_id is'|| p_resource_list_member_id ;
6161 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6162
6163 pa_debug.g_err_stage:='p_txn_currency_code is'|| p_txn_currency_code;
6164 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6165
6166
6167 END IF;
6168
6169 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6170 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
6171 p_token1 => 'PROCEDURENAME',
6172 p_value1 => 'PAFPWAPB.get_total_fcst_amount',
6173 p_token2 => 'STAGE',
6174 p_value2 => '[Task, Rlm,Txn]'||'['||p_task_id||','||p_resource_list_member_id||','||p_txn_currency_code||']');
6175
6176 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6177
6178 END IF;
6179
6180 IF p_line_start_date IS NOT NULL THEN
6181
6182 IF p_line_end_date IS NULL OR
6183 p_prd_mask_st_date_tbl.COUNT <> p_prd_mask_end_date_tbl.COUNT OR
6184 p_st_index_in_prd_mask IS NULL OR
6185 p_end_index_in_prd_mask IS NULL THEN
6186
6187 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6188 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
6189 p_token1 => 'PROCEDURENAME',
6190 p_value1 => 'PAFPWAPB.get_total_fcst_amount',
6191 p_token2 => 'STAGE',
6192 p_value2 => 'Invalid Budget Level parameters');
6193
6194 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6195
6196 END IF;
6197
6198 END IF;
6199
6200 l_amt_typ_index:=0;
6201 IF p_etc_quantity IS NULL AND
6202 p_fcst_quantity IS NULL THEN
6203
6204 x_total_quantity := NULL;
6205
6206 ELSIF p_etc_quantity IS NULL AND
6207 p_fcst_quantity IS NOT NULL THEN
6208
6209 x_total_quantity := p_fcst_quantity;
6210
6211 ELSE
6212 l_amt_typ_index:=l_amt_typ_index+1;
6213 l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='QUANTITY';
6214 END IF;
6215
6216 IF p_etc_raw_cost IS NULL AND
6217 p_fcst_raw_cost IS NULL THEN
6218
6219 x_total_raw_cost := NULL;
6220
6221 ELSIF p_etc_raw_cost IS NULL AND
6222 p_fcst_raw_cost IS NOT NULL THEN
6223
6224 x_total_raw_cost := p_fcst_raw_cost;
6225
6226 ELSE
6227 l_amt_typ_index:=l_amt_typ_index+1;
6228 l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='RAW_COST';
6229 END IF;
6230
6231
6232 IF p_etc_burd_cost IS NULL AND
6233 p_fcst_burd_cost IS NULL THEN
6234
6235 x_total_burd_cost := NULL;
6236
6237 ELSIF p_etc_burd_cost IS NULL AND
6238 p_fcst_burd_cost IS NOT NULL THEN
6239
6240 x_total_burd_cost := p_fcst_burd_cost;
6241
6242 ELSE
6243
6244 l_amt_typ_index:=l_amt_typ_index+1;
6245 l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='BURDENED_COST';
6246
6247 END IF;
6248
6249
6250 IF p_etc_revenue IS NULL AND
6251 p_fcst_revenue IS NULL THEN
6252
6253 x_total_revenue := NULL;
6254
6255 ELSIF p_etc_revenue IS NULL AND
6256 p_fcst_revenue IS NOT NULL THEN
6257
6258 x_total_revenue := p_fcst_revenue;
6259
6260 ELSE
6261 l_amt_typ_index:=l_amt_typ_index+1;
6262 l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='REVENUE';
6263 END IF;
6264
6265 IF l_debug_mode = 'Y' THEN
6266 pa_debug.g_err_stage:='l_amt_typs_to_be_populated_tbl.COUNT '||l_amt_typs_to_be_populated_tbl.COUNT;
6267 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
6268 END IF;
6269
6270 IF l_amt_typs_to_be_populated_tbl.COUNT>0 THEN
6271
6272 --Check if the details of the planning transactions for this resource assignment are already fetched or not.
6273 --If the details are already fetched then the RA index of px_cached_fcst_qty_tbl will contain the no. of
6274 --planning transactions/periodic lines for the RA.
6275 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) ;
6276 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6277
6278 IF p_line_start_date IS NULL THEN
6279
6280 SELECT SUM(NVL(pbl.quantity,0)),
6281 SUM(NVL(pbl.quantity,0)-NVL(pbl.init_quantity,0)),
6282 SUM(NVL(pbl.txn_raw_cost,0)),
6283 SUM(NVL(pbl.txn_raw_cost,0)-NVL(pbl.txn_init_raw_cost,0)),
6284 SUM(NVL(pbl.txn_burdened_cost,0)),
6285 SUM(NVL(pbl.txn_burdened_cost,0)-NVL(pbl.txn_init_burdened_cost,0)),
6286 SUM(NVL(pbl.txn_revenue,0)),
6287 SUM(NVL(pbl.txn_revenue,0)-NVL(txn_init_revenue,0)),
6288 pbl.txn_currency_code
6289 BULK COLLECT INTO
6290 l_fcst_qty_tbl,
6291 l_etc_qty_tbl,
6292 l_fcst_raw_cost_tbl,
6293 l_etc_raw_cost_tbl,
6294 l_fcst_burd_cost_tbl,
6295 l_etc_burd_cost_tbl,
6296 l_fcst_revenue_tbl,
6297 l_etc_revenue_tbl,
6298 l_txn_currency_code_tbl
6299 FROM pa_budget_lines pbl,
6300 pa_resource_assignments pra
6301 WHERE pra.budget_version_id=p_budget_version_id
6302 AND pra.project_id=p_project_id
6303 AND pra.task_id=p_task_id
6304 AND pra.resource_list_member_id=p_resource_list_member_id
6305 AND pra.project_assignment_id=-1
6306 AND pbl.resource_assignment_id=pra.resource_assignment_id
6307 GROUP BY pbl.txn_currency_code;
6308
6309 FOR i IN 1..l_txn_currency_code_tbl.COUNT LOOP
6310
6311 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) || 'C' || l_txn_currency_code_tbl(i);
6312
6313 px_cached_fcst_qty_tbl(l_varchar_index) := l_fcst_qty_tbl(i);
6314 px_cached_etc_qty_tbl(l_varchar_index) := l_etc_qty_tbl(i);
6315 px_cached_fcst_raw_cost_tbl(l_varchar_index) := l_fcst_raw_cost_tbl(i);
6316 px_cached_etc_raw_cost_tbl(l_varchar_index) := l_etc_raw_cost_tbl(i);
6317 px_cached_fcst_burd_cost_tbl(l_varchar_index) := l_fcst_burd_cost_tbl(i);
6318 px_cached_etc_burd_cost_tbl(l_varchar_index) := l_etc_burd_cost_tbl(i);
6319 px_cached_fcst_revenue_tbl(l_varchar_index) := l_fcst_revenue_tbl(i);
6320 px_cached_etc_revenue_tbl(l_varchar_index) := l_etc_revenue_tbl(i);
6321
6322 END LOOP;
6323
6324 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) ;
6325 px_cached_fcst_qty_tbl(l_varchar_index):=l_txn_currency_code_tbl.COUNT;
6326
6327 ELSE--The layout is a periodic layout
6328
6329 SELECT NVL(pbl.quantity,0),
6330 NVL(pbl.quantity,0)-NVL(pbl.init_quantity,0),
6331 NVL(pbl.txn_raw_cost,0),
6332 NVL(pbl.txn_raw_cost,0)-NVL(pbl.txn_init_raw_cost,0),
6333 NVL(pbl.txn_burdened_cost,0),
6334 NVL(pbl.txn_burdened_cost,0)-NVL(pbl.txn_init_burdened_cost,0),
6335 NVL(pbl.txn_revenue,0),
6336 NVL(pbl.txn_revenue,0)-NVL(txn_init_revenue,0),
6337 pbl.txn_currency_code,
6338 pbl.start_date,
6339 pbl.end_date
6340 BULK COLLECT INTO
6341 l_fcst_qty_tbl,
6342 l_etc_qty_tbl,
6343 l_fcst_raw_cost_tbl,
6344 l_etc_raw_cost_tbl,
6345 l_fcst_burd_cost_tbl,
6346 l_etc_burd_cost_tbl,
6347 l_fcst_revenue_tbl,
6348 l_etc_revenue_tbl,
6349 l_txn_currency_code_tbl,
6350 l_start_date_tbl,
6351 l_end_date_tbl
6352 FROM pa_budget_lines pbl,
6353 pa_resource_assignments pra
6354 WHERE pra.budget_version_id=p_budget_version_id
6355 AND pra.project_id=p_project_id
6356 AND pra.task_id=p_task_id
6357 AND pra.resource_list_member_id=p_resource_list_member_id
6358 AND pra.project_assignment_id=-1
6359 AND pbl.resource_assignment_id=pra.resource_assignment_id
6360 ORDER BY pbl.start_date,pbl.end_date,pbl.txn_currency_code;
6361
6362
6363 l_index:=1;
6364 FOR i IN p_st_index_in_prd_mask..p_end_index_in_prd_mask LOOP
6365
6366 IF l_start_date_tbl.COUNT < l_index THEN
6367
6368 EXIT;
6369
6370 END IF;
6371
6372 LOOP
6373
6374 EXIT WHEN l_start_date_tbl.COUNT < l_index OR
6375 l_start_date_tbl(l_index) NOT BETWEEN p_prd_mask_st_date_tbl(i) AND p_prd_mask_end_date_tbL(i);
6376
6377 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id)
6378 ||'C' || l_txn_currency_code_tbl(l_index)
6379 ||'S' || TO_CHAR(p_prd_mask_st_date_tbl(i),'DD-MM-YYYY')
6380 ||'E' || TO_CHAR(p_prd_mask_end_date_tbl(i),'DD-MM-YYYY');
6381
6382 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6383
6384 px_cached_fcst_qty_tbl(l_varchar_index) := l_fcst_qty_tbl(l_index);
6385 px_cached_etc_qty_tbl(l_varchar_index) := l_etc_qty_tbl(l_index);
6386 px_cached_fcst_raw_cost_tbl(l_varchar_index) := l_fcst_raw_cost_tbl(l_index);
6387 px_cached_etc_raw_cost_tbl(l_varchar_index) := l_etc_raw_cost_tbl(l_index);
6388 px_cached_fcst_burd_cost_tbl(l_varchar_index) := l_fcst_burd_cost_tbl(l_index);
6389 px_cached_etc_burd_cost_tbl(l_varchar_index) := l_etc_burd_cost_tbl(l_index);
6390 px_cached_fcst_revenue_tbl(l_varchar_index) := l_fcst_revenue_tbl(l_index);
6391 px_cached_etc_revenue_tbl(l_varchar_index) := l_etc_revenue_tbl(l_index);
6392
6393 ELSE
6394
6395 px_cached_fcst_qty_tbl(l_varchar_index) := px_cached_fcst_qty_tbl(l_varchar_index) + l_fcst_qty_tbl(l_index);
6396 px_cached_etc_qty_tbl(l_varchar_index) := px_cached_etc_qty_tbl(l_varchar_index) + l_etc_qty_tbl(l_index);
6397 px_cached_fcst_raw_cost_tbl(l_varchar_index) := px_cached_fcst_raw_cost_tbl(l_varchar_index)+l_fcst_raw_cost_tbl(l_index);
6398 px_cached_etc_raw_cost_tbl(l_varchar_index) := px_cached_etc_raw_cost_tbl(l_varchar_index)+l_etc_raw_cost_tbl(l_index);
6399 px_cached_fcst_burd_cost_tbl(l_varchar_index) := px_cached_fcst_burd_cost_tbl(l_varchar_index)+l_fcst_burd_cost_tbl(l_index);
6400 px_cached_etc_burd_cost_tbl(l_varchar_index) := px_cached_etc_burd_cost_tbl(l_varchar_index)+l_etc_burd_cost_tbl(l_index);
6401 px_cached_fcst_revenue_tbl(l_varchar_index) := px_cached_fcst_revenue_tbl(l_varchar_index)+l_fcst_revenue_tbl(l_index);
6402 px_cached_etc_revenue_tbl(l_varchar_index) := px_cached_etc_revenue_tbl(l_varchar_index)+l_etc_revenue_tbl(l_index);
6403
6404 END IF;
6405
6406 l_index:=l_index+1;
6407
6408 END LOOP;--For the budget lines
6409
6410
6411 END LOOP;--FOR i IN p_st_index_in_prd_mask..p_end_index_in_prd_mask LOOP
6412
6413 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) ;
6414 px_cached_fcst_qty_tbl(l_varchar_index):=px_cached_fcst_qty_tbl.COUNT;
6415
6416
6417 END IF;----The layout is a periodic layout
6418
6419
6420 END IF;--IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6421
6422 IF p_line_start_date IS NULL THEN
6423 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) || 'C' || p_txn_currency_code;
6424 ELSE
6425 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id)
6426 ||'C' || p_txn_currency_code
6427 ||'S' || TO_CHAR(p_line_start_date,'DD-MM-YYYY')
6428 ||'E' || TO_CHAR(p_line_end_date,'DD-MM-YYYY');
6429 END IF;
6430 --log1('1 l_varchar_index '||l_varchar_index);
6431 --log1('2 p_fcst_quantity '||p_fcst_quantity);
6432 --log1('3 p_etc_quantity '||p_etc_quantity);
6433 --log1('4 p_line_start_date '||p_line_start_date);
6434 --log1('5 p_line_end_date '||p_line_end_date);
6435
6436 FOR i IN 1..l_amt_typs_to_be_populated_tbl.COUNT LOOP
6437
6438 l_entered_fcst_amount:=NULL;
6439 l_entered_etc_amount:=NULL;
6440 l_existing_fcst_amount:=NULL;
6441 l_existing_etc_amount:=NULL;
6442 l_amt_exists_flag:='N';
6443 l_total_amount:=NULL;
6444
6445 IF l_amt_typs_to_be_populated_tbl(i)='QUANTITY' THEN
6446
6447 l_entered_fcst_amount:=p_fcst_quantity;
6448 l_entered_etc_amount :=p_etc_quantity;
6449
6450 --Budget lines for the planning transaction do not exist
6451 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6452
6453 l_amt_exists_flag:='N';
6454
6455 ELSE
6456
6457 l_amt_exists_flag:='Y';
6458 l_existing_fcst_amount:=px_cached_fcst_qty_tbl(l_varchar_index);
6459 l_existing_etc_amount:=px_cached_etc_qty_tbl(l_varchar_index);
6460
6461 END IF;
6462
6463 ELSIF l_amt_typs_to_be_populated_tbl(i)='RAW_COST' THEN
6464
6465 l_entered_fcst_amount:=p_fcst_raw_cost;
6466 l_entered_etc_amount :=p_etc_raw_cost;
6467
6468 --Budget lines for the planning transaction do not exist
6469 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6470
6471 l_amt_exists_flag:='N';
6472
6473 ELSE
6474
6475 l_amt_exists_flag:='Y';
6476 l_existing_fcst_amount:=px_cached_fcst_raw_cost_tbl(l_varchar_index);
6477 l_existing_etc_amount:=px_cached_etc_raw_cost_tbl(l_varchar_index);
6478
6479 END IF;
6480
6481 ELSIF l_amt_typs_to_be_populated_tbl(i)='BURDENED_COST' THEN
6482
6483 l_entered_fcst_amount:=p_fcst_burd_cost;
6484 l_entered_etc_amount :=p_etc_burd_cost;
6485
6486 --Budget lines for the planning transaction do not exist
6487 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6488
6489 l_amt_exists_flag:='N';
6490
6491 ELSE
6492
6493 l_amt_exists_flag:='Y';
6494 l_existing_fcst_amount:=px_cached_fcst_burd_cost_tbl(l_varchar_index);
6495 l_existing_etc_amount:=px_cached_etc_burd_cost_tbl(l_varchar_index);
6496
6497 END IF;
6498
6499 ELSIF l_amt_typs_to_be_populated_tbl(i)='REVENUE' THEN
6500
6501 l_entered_fcst_amount:=p_fcst_revenue;
6502 l_entered_etc_amount :=p_etc_revenue;
6503
6504 --Budget lines for the planning transaction do not exist
6505 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6506
6507 l_amt_exists_flag:='N';
6508
6509 ELSE
6510
6511 l_amt_exists_flag:='Y';
6512 l_existing_fcst_amount:=px_cached_fcst_revenue_tbl(l_varchar_index);
6513 l_existing_etc_amount:=px_cached_etc_revenue_tbl(l_varchar_index);
6514
6515 END IF;
6516
6517 END IF;
6518 --log1('6 l_amt_exists_flag '||l_amt_exists_flag);
6519 --log1('7 l_entered_fcst_amount '||l_entered_fcst_amount);
6520 --log1('8 l_entered_etc_amount '||l_entered_etc_amount);
6521
6522 IF l_amt_exists_flag='N' THEN
6523
6524 --IF forecast is not g miss num then it should be considered. Note that g miss num
6525 --will be there if NULL is entered in the layout.
6526 IF l_entered_fcst_amount IS NOT NULL AND
6527 l_entered_fcst_amount <> l_fnd_miss_num THEN
6528
6529 l_total_amount:=l_entered_fcst_amount;
6530
6531 --IF ETC is not g miss num then it should be considered. Note that g miss num
6532 --will be there if NULL is entered in the layout.
6533 ELSIF l_entered_etc_amount IS NOT NULL AND
6534 l_entered_etc_amount <> l_fnd_miss_num THEN
6535
6536 l_total_amount:=l_entered_etc_amount;
6537
6538 ELSE
6539
6540 l_total_amount:=NULL;
6541
6542 END IF;
6543
6544 --Budget lines for the planning transaction exist
6545 ELSE
6546
6547 IF l_existing_fcst_amount IS NULL AND
6548 l_entered_fcst_amount IS NOT NULL AND
6549 l_entered_fcst_amount <> l_fnd_miss_num THEN
6550
6551 l_total_amount:=l_entered_fcst_amount;
6552
6553 ELSIF l_existing_fcst_amount IS NOT NULL AND
6554 l_entered_fcst_amount IS NOT NULL AND
6555 l_entered_fcst_amount <> l_existing_fcst_amount THEN
6556
6557 l_total_amount:=l_entered_fcst_amount;
6558
6559 ELSIF l_existing_etc_amount IS NULL AND
6560 l_entered_etc_amount IS NOT NULL AND
6561 l_entered_etc_amount <> l_fnd_miss_num THEN
6562
6563 l_total_amount:=l_entered_etc_amount + NVL(l_existing_fcst_amount,0) - NVL(l_existing_etc_amount,0);
6564
6565 ELSIF l_existing_etc_amount IS NOT NULL AND
6566 l_entered_etc_amount IS NOT NULL AND
6567 l_entered_etc_amount <> l_existing_etc_amount THEN
6568
6569 l_total_amount:=l_entered_etc_amount + NVL(l_existing_fcst_amount,0) - NVL(l_existing_etc_amount,0);
6570
6571 ELSE
6572
6573 l_total_amount:=NULL;
6574
6575 END IF;
6576
6577 END IF;--IF l_amt_exists_flag='N' THEN
6578
6579 --Assign the above derived total amount to the appropriate OUT variable
6580 IF l_amt_typs_to_be_populated_tbl(i)='QUANTITY' THEN
6581
6582 x_total_quantity:=l_total_amount;
6583
6584 ELSIF l_amt_typs_to_be_populated_tbl(i)='RAW_COST' THEN
6585
6586 x_total_raw_cost:=l_total_amount;
6587
6588 ELSIF l_amt_typs_to_be_populated_tbl(i)='BURDENED_COST' THEN
6589
6590 x_total_burd_cost:=l_total_amount;
6591
6592 ELSIF l_amt_typs_to_be_populated_tbl(i)='REVENUE' THEN
6593
6594 x_total_revenue:=l_total_amount;
6595
6596 END IF;
6597
6598 END LOOP;--FOR i IN 1..l_amt_typs_to_be_populated_tbl.COUNT LOOP
6599
6600 END IF;--IF l_amt_typs_to_be_populated_tbl.COUNT>0 THEN
6601
6602 IF l_debug_mode = 'Y' THEN
6603 pa_debug.g_err_stage:='Leaving get_total_fcst_amounts';
6604 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
6605 pa_debug.reset_curr_function;
6606 END IF;
6607
6608 EXCEPTION
6609
6610 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
6611 l_msg_count := FND_MSG_PUB.count_msg;
6612 IF l_msg_count = 1 THEN
6613 PA_INTERFACE_UTILS_PUB.get_messages
6614 (p_encoded => FND_API.G_TRUE
6615 ,p_msg_index => 1
6616 ,p_msg_count => l_msg_count
6617 ,p_msg_data => l_msg_data
6618 ,p_data => l_data
6619 ,p_msg_index_out => l_msg_index_out);
6620
6621 x_msg_data := l_data;
6622 x_msg_count := l_msg_count;
6623 ELSE
6624 x_msg_count := l_msg_count;
6625 END IF;
6626 x_return_status := FND_API.G_RET_STS_ERROR;
6627
6628 IF l_debug_mode = 'Y' THEN
6629 pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
6630 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6631 -- reset curr function
6632 pa_debug.reset_curr_function();
6633
6634 END IF;
6635
6636 RETURN;
6637 WHEN OTHERS THEN
6638 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6639 x_msg_count := 1;
6640 x_msg_data := SQLERRM;
6641
6642 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
6643 ,p_procedure_name => 'get_total_fcst_amounts');
6644
6645 IF l_debug_mode = 'Y' THEN
6646 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
6647 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6648 -- reset curr function
6649 pa_debug.Reset_Curr_Function();
6650 END IF;
6651 RAISE;
6652
6653 END get_total_fcst_amounts;
6654
6655 --This is a private API called from Switcher API. This API assumes that the data exists
6656 --in pa_fp_webadi_upload_inf table and this data has been already validated.
6657
6658 --Note: p_budget_lines_tbl contains records ordered by task id, resource alias and curr. This
6659 --API assumes that there exists only one record for an RA/TXN Currency Code in p_budget_lines_tbl
6660
6661 --p_prd_mask_st/end_date_tbl contains the start/end dates of flexible periods in the period mask. If period mask contains
6662 --10 elements then elements between 1 t0 10 will contain start/end dates of the flexible periods in the mask.
6663 --p_first_pd_bf_pm_en_dt contains the end date of the period that immediately preceeds the first period in the period mask
6664 --and it will be used as the end date if the amounts are entered in preceeding bucket
6665 --p_last_pd_af_pm_st_dt contains the start date of the period that immediately succeeds the last period in the period mask
6666 --and it will be used as the start date if the amounts are entered in preceeding bucket
6667
6668 PROCEDURE prepare_pbl_input
6669 (p_context IN VARCHAR2,
6670 p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE,
6671 p_request_id IN pa_budget_versions.request_id%TYPE DEFAULT NULL,
6672 p_inf_tbl_rec_tbl IN inf_cur_tbl_typ,
6673 p_version_info_rec IN pa_fp_gen_amount_utils.fp_cols,
6674 p_project_id IN pa_projects_all.project_id%TYPE,
6675 p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE,
6676 p_budget_lines_tbl IN PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE,
6677 p_ra_id_tbl IN SYSTEM.pa_num_tbl_type,
6678 p_etc_start_date IN pa_budget_versions.etc_start_date%TYPE,
6679 p_plan_class_code IN pa_fin_plan_types_b.plan_class_code%TYPE,
6680 p_first_pd_bf_pm_en_dt IN DATE,
6681 p_last_pd_af_pm_st_dt IN DATE,
6682 p_prd_mask_st_date_tbl IN SYSTEM.pa_date_tbl_type,
6683 p_prd_mask_end_date_tbl IN SYSTEM.pa_date_tbl_type,
6684 p_planning_start_date_tbl IN SYSTEM.pa_date_tbl_type,
6685 p_planning_end_date_tbl IN SYSTEM.pa_date_tbl_type,
6686 p_etc_quantity_tbl IN SYSTEM.pa_num_tbl_type,
6687 p_etc_raw_cost_tbl IN SYSTEM.pa_num_tbl_type,
6688 p_etc_burdened_cost_tbl IN SYSTEM.pa_num_tbl_type,
6689 p_etc_revenue_tbl IN SYSTEM.pa_num_tbl_type,
6690 p_raw_cost_rate_tbl IN SYSTEM.pa_num_tbl_type,
6691 p_burd_cost_rate_tbl IN SYSTEM.pa_num_tbl_type,
6692 p_bill_rate_tbl IN SYSTEM.pa_num_tbl_type,
6693 p_spread_curve_id_tbl IN SYSTEM.pa_num_tbl_type,
6694 p_mfc_cost_type_id_tbl IN SYSTEM.pa_num_tbl_type,
6695 p_etc_method_code_tbl IN SYSTEM.pa_varchar2_30_tbl_type ,
6696 p_sp_fixed_date_tbl IN SYSTEM.pa_date_tbl_type,
6697 p_res_class_code_tbl IN SYSTEM.pa_varchar2_30_tbl_type ,
6698 p_rate_based_flag_tbl IN SYSTEM.pa_varchar2_1_tbl_type ,
6699 p_rbs_elem_id_tbl IN SYSTEM.pa_num_tbl_type,
6700 p_delete_flag_tbl IN SYSTEM.pa_varchar2_1_tbl_type ,
6701 x_task_id_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6702 x_rlm_id_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6703 x_ra_id_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6704 x_txn_currency_code_tbl OUT NOCOPY SYSTEM.pa_varchar2_15_tbl_type , --File.Sql.39 bug 4440895
6705 x_planning_start_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6706 x_planning_end_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6707 x_total_qty_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6708 x_total_raw_cost_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6709 x_total_burdened_cost_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6710 x_total_revenue_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6711 x_raw_cost_rate_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6712 x_burdened_cost_rate_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6713 x_bill_rate_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6714 x_line_start_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6715 x_line_end_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6716 x_proj_cost_rate_type_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6717 x_proj_cost_rate_date_type_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6718 x_proj_cost_rate_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6719 x_proj_cost_rate_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6720 x_proj_rev_rate_type_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6721 x_proj_rev_rate_date_type_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6722 x_proj_rev_rate_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6723 x_proj_rev_rate_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6724 x_pfunc_cost_rate_type_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6725 x_pfunc_cost_rate_date_typ_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6726 x_pfunc_cost_rate_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6727 x_pfunc_cost_rate_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6728 x_pfunc_rev_rate_type_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6729 x_pfunc_rev_rate_date_type_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6730 x_pfunc_rev_rate_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6731 x_pfunc_rev_rate_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6732 x_delete_flag_tbl OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type, --File.Sql.39 bug 4440895
6733 x_spread_curve_id_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6734 x_mfc_cost_type_id_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6735 x_etc_method_code_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6736 x_sp_fixed_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6737 x_res_class_code_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6738 x_rate_based_flag_tbl OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type , --File.Sql.39 bug 4440895
6739 x_rbs_elem_id_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6740 x_change_reason_code_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type, --File.Sql.39 bug 4440895
6741 x_description_tbl OUT NOCOPY SYSTEM.pa_varchar2_2000_tbl_type, --File.Sql.39 bug 4440895
6742 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
6743 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6744 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6745 )
6746 IS
6747 -- variables used for debugging
6748 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.prepare_pbl_input';
6749 l_debug_mode VARCHAR2(1) := 'N';
6750 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
6751 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
6752
6753 l_msg_count NUMBER;
6754 l_msg_data VARCHAR2(2000);
6755 l_data VARCHAR2(2000);
6756 l_msg_index_out NUMBER;
6757
6758 --Variable used in processing
6759 l_prev_task_id NUMBER;
6760 l_prev_rlm_id NUMBER;
6761 l_prev_txn_curr_code pa_budget_lines.txn_currency_code%TYPE;
6762 l_bl_index NUMBER;
6763 l_st_index_in_prd_mask NUMBER;
6764 l_end_index_in_prd_mask NUMBER;
6765 l_sd_prd_exists_flag VARCHAR2(1);
6766 l_pd_prd_exists_flag VARCHAR2(1);
6767 l_num_of_prds_for_plan_txn NUMBER;
6768 l_extend_pbl_out_tbls_flag VARCHAR2(1);
6769 l_prev_pbl_tbl_count NUMBER;
6770 l_amount NUMBER;
6771 l_prd_index VARCHAR2(2);
6772 l_tmp_index NUMBER;
6773 l_plan_txn_attrs_copied_flag VARCHAR2(1);
6774
6775 kk NUMBER;
6776 l_g_miss_char CONSTANT VARCHAR(1) := FND_API.G_MISS_CHAR;
6777 l_g_miss_num CONSTANT NUMBER := FND_API.G_MISS_NUM;
6778 l_g_miss_date CONSTANT DATE := FND_API.G_MISS_DATE;
6779
6780 l_curr_rec inf_tbl_data_csr%ROWTYPE;
6781
6782 l_cached_fcst_qty_tbl varchar_70_indexed_num_tbl_typ;
6783 l_cached_fcst_raw_cost_tbl varchar_70_indexed_num_tbl_typ;
6784 l_cached_fcst_burd_cost_tbl varchar_70_indexed_num_tbl_typ;
6785 l_cached_fcst_revenue_tbl varchar_70_indexed_num_tbl_typ;
6786 l_cached_etc_qty_tbl varchar_70_indexed_num_tbl_typ;
6787 l_cached_etc_raw_cost_tbl varchar_70_indexed_num_tbl_typ;
6788 l_cached_etc_burd_cost_tbl varchar_70_indexed_num_tbl_typ;
6789 l_cached_etc_revenue_tbl varchar_70_indexed_num_tbl_typ;
6790 l_tmp_quantity NUMBER;
6791 l_tmp_raw_cost NUMBER;
6792 l_tmp_burd_cost NUMBER;
6793 l_tmp_revenue NUMBER;
6794 l_allow_qty_flag VARCHAR2(1);
6795 l_skip_ra_flag VARCHAR2(1);
6796 l_skip_task_id pa_resource_assignments.task_id%TYPE;
6797 l_skip_rlm_id pa_resource_assignments.resource_list_member_id%TYPE;
6798
6799
6800 --These tbls will be prepared in this manner
6801 ----First element is for the proceeding bucket . Next p_prd_mask_st_date_tbl.COUNT buckets will contain
6802 ----start/end dates of the periods in the period mask. Last element will be for the succeeding bucket.
6803 l_prd_mask_st_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
6804 l_prd_mask_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
6805
6806 tt NUMBER;
6807
6808 BEGIN
6809 fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
6810
6811 x_return_status := FND_API.G_RET_STS_SUCCESS;
6812 x_msg_count := 0;
6813
6814 IF l_debug_mode = 'Y' THEN
6815 pa_debug.Set_Curr_Function
6816 (p_function => l_module_name,
6817 p_debug_mode => l_debug_mode);
6818 END IF;
6819
6820 IF l_debug_mode = 'Y' THEN
6821 pa_debug.g_err_stage := 'Entering into prepare_pbl_input';
6822 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
6823 pa_debug.g_err_stage := 'Validating input parameters';
6824 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
6825 END IF;
6826
6827
6828 -- valid p_context are WEBADI_PERIODIC and WEBADI_NON_PERIODIC
6829 IF p_context IS NULL THEN
6830 IF l_debug_mode = 'Y' THEN
6831 pa_debug.g_err_stage := 'p_context is passed as null';
6832 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
6833 END IF;
6834 pa_utils.add_message(p_app_short_name => 'PA',
6835 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
6836 p_token1 => 'PROCEDURENAME',
6837 p_value1 => l_module_name);
6838
6839 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6840 END IF;
6841
6842 --If there are no records to process return
6843 IF p_budget_lines_tbl.COUNT=0 THEN
6844
6845 IF l_debug_mode = 'Y' THEN
6846 pa_debug.g_err_stage := 'p_budget_lines_tbl is empty';
6847 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6848 pa_debug.reset_curr_function;
6849 END IF;
6850 RETURN;
6851
6852 END IF;
6853
6854 --log1('-p_planning_start_date_tbl.COUNT- ' || p_planning_start_date_tbl.COUNT);
6855 --log1('-p_planning_end_date_tbl.COUNT- ' || p_planning_end_date_tbl.COUNT);
6856 --log1('-p_budget_lines_tbl.COUNT- ' || p_budget_lines_tbl.COUNT);
6857 --log1('-p_raw_cost_rate_tbl.COUNT- ' || p_raw_cost_rate_tbl.COUNT);
6858 --log1('-p_burd_cost_rate_tbl.COUNT- ' || p_burd_cost_rate_tbl.COUNT);
6859 --log1('-p_bill_rate_tbl.COUNT- ' || p_bill_rate_tbl.COUNT);
6860 --log1('-p_spread_curve_id_tbl.COUNT- ' || p_spread_curve_id_tbl.COUNT);
6861 --log1('-p_etc_method_code_tbl.COUNT- ' || p_etc_method_code_tbl.COUNT);
6862 --log1('-p_sp_fixed_date_tbl.COUNT- ' || p_sp_fixed_date_tbl.COUNT);
6863 --log1('-p_delete_flag_tbl.COUNT- ' || p_delete_flag_tbl.COUNT);
6864 --log1('-p_mfc_cost_type_id_tbl.COUNT- ' || p_mfc_cost_type_id_tbl.COUNT);
6865
6866 --log1('-p_budget_lines_tbl(1).quantity- ' || p_budget_lines_tbl(1).quantity);
6867 --log1('-p_budget_lines_tbl(1).raw_cost- ' || p_budget_lines_tbl(1).raw_cost);
6868 --log1('-p_budget_lines_tbl(1).burdened_cost- ' || p_budget_lines_tbl(1).burdened_cost);
6869 --log1('-p_budget_lines_tbl(1).revenue- ' || p_budget_lines_tbl(1).revenue);
6870
6871 IF p_planning_start_date_tbl.COUNT <> p_planning_end_date_tbl.COUNT OR
6872 p_planning_start_date_tbl.COUNT <> p_budget_lines_tbl.COUNT OR
6873 p_planning_start_date_tbl.COUNT <> p_raw_cost_rate_tbl.COUNT OR
6874 p_planning_start_date_tbl.COUNT <> p_burd_cost_rate_tbl.COUNT OR
6875 p_planning_start_date_tbl.COUNT <> p_bill_rate_tbl.COUNT OR
6876 p_planning_start_date_tbl.COUNT <> p_spread_curve_id_tbl.COUNT OR
6877 p_planning_start_date_tbl.COUNT <> p_mfc_cost_type_id_tbl.COUNT OR
6878 p_planning_start_date_tbl.COUNT <> p_etc_method_code_tbl.COUNT OR
6879 p_planning_start_date_tbl.COUNT <> p_sp_fixed_date_tbl.COUNT OR
6880 p_planning_start_date_tbl.COUNT <> p_delete_flag_tbl.COUNT OR
6881 p_planning_start_date_tbl.COUNT <> p_ra_id_tbl.COUNT OR
6882 p_planning_start_date_tbl.COUNT <> p_res_class_code_tbl.COUNT OR
6883 p_planning_start_date_tbl.COUNT <> p_rate_based_flag_tbl.COUNT OR
6884 p_planning_start_date_tbl.COUNT <> p_rbs_elem_id_tbl.COUNT THEN
6885
6886
6887 IF l_debug_mode = 'Y' THEN
6888
6889 pa_debug.g_err_stage := ' p_planning_start_date_tbl.COUNT '|| p_planning_start_date_tbl.COUNT;
6890 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6891
6892 pa_debug.g_err_stage := ' p_planning_end_date_tbl.COUNT '|| p_planning_end_date_tbl.COUNT;
6893 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6894
6895 pa_debug.g_err_stage := ' p_budget_lines_tbl.COUNT '|| p_budget_lines_tbl.COUNT;
6896 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6897
6898 pa_debug.g_err_stage := ' p_raw_cost_rate_tbl.COUNT '|| p_raw_cost_rate_tbl.COUNT;
6899 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6900
6901 pa_debug.g_err_stage := ' p_burd_cost_rate_tbl.COUNT '|| p_burd_cost_rate_tbl.COUNT;
6902 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6903
6904 pa_debug.g_err_stage := ' p_bill_rate_tbl.COUNT '|| p_bill_rate_tbl.COUNT;
6905 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6906
6907 pa_debug.g_err_stage := ' p_spread_curve_id_tbl.COUNT '|| p_spread_curve_id_tbl.COUNT;
6908 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6909
6910 pa_debug.g_err_stage := ' p_mfc_cost_type_id_tbl.COUNT '|| p_mfc_cost_type_id_tbl.COUNT;
6911 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6912
6913 pa_debug.g_err_stage := ' p_etc_method_code_tbl.COUNT '|| p_etc_method_code_tbl.COUNT;
6914 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6915
6916 pa_debug.g_err_stage := ' p_sp_fixed_date_tbl.COUNT '|| p_sp_fixed_date_tbl.COUNT;
6917 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6918
6919 pa_debug.g_err_stage := ' p_delete_flag_tbl.COUNT '|| p_delete_flag_tbl.COUNT;
6920 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6921
6922 pa_debug.g_err_stage := ' p_ra_id_tbl.COUNT '|| p_ra_id_tbl.COUNT;
6923 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6924
6925 pa_debug.g_err_stage := ' p_res_class_code_tbl.COUNT '|| p_res_class_code_tbl.COUNT;
6926 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6927
6928 pa_debug.g_err_stage := ' p_rate_based_flag_tbl.COUNT '|| p_rate_based_flag_tbl.COUNT;
6929 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6930
6931 pa_debug.g_err_stage := ' p_rbs_elem_id_tbl.COUNT '|| p_rbs_elem_id_tbl.COUNT;
6932 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6933
6934 END IF;
6935 pa_utils.add_message(p_app_short_name => 'PA',
6936 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
6937 p_token1 => 'PROCEDURENAME',
6938 p_value1 => l_module_name);
6939
6940 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6941
6942 END IF;
6943 --log1('----- STAGE 1-------');
6944 l_prev_pbl_tbl_count :=0;
6945 l_skip_ra_flag:='N';
6946
6947
6948 x_task_id_tbl := SYSTEM.pa_num_tbl_type();
6949 x_rlm_id_tbl := SYSTEM.pa_num_tbl_type();
6950 x_ra_id_tbl := SYSTEM.pa_num_tbl_type();
6951 x_txn_currency_code_tbl := SYSTEM.pa_varchar2_15_tbl_type();
6952 x_planning_start_date_tbl := SYSTEM.pa_date_tbl_type();
6953 x_planning_end_date_tbl := SYSTEM.pa_date_tbl_type();
6954 x_total_qty_tbl := SYSTEM.pa_num_tbl_type();
6955 x_total_raw_cost_tbl := SYSTEM.pa_num_tbl_type();
6956 x_total_burdened_cost_tbl := SYSTEM.pa_num_tbl_type();
6957 x_total_revenue_tbl := SYSTEM.pa_num_tbl_type();
6958 x_raw_cost_rate_tbl := SYSTEM.pa_num_tbl_type();
6959 x_burdened_cost_rate_tbl := SYSTEM.pa_num_tbl_type();
6960 x_bill_rate_tbl := SYSTEM.pa_num_tbl_type();
6961 x_line_start_date_tbl := SYSTEM.pa_date_tbl_type();
6962 x_line_end_date_tbl := SYSTEM.pa_date_tbl_type();
6963 x_proj_cost_rate_type_tbl := SYSTEM.pa_varchar2_30_tbl_type();
6964 x_proj_cost_rate_date_type_tbl := SYSTEM.pa_varchar2_30_tbl_type();
6965 x_proj_cost_rate_tbl := SYSTEM.pa_num_tbl_type();
6966 x_proj_cost_rate_date_tbl := SYSTEM.pa_date_tbl_type();
6967 x_proj_rev_rate_type_tbl := SYSTEM.pa_varchar2_30_tbl_type();
6968 x_proj_rev_rate_date_type_tbl := SYSTEM.pa_varchar2_30_tbl_type();
6969 x_proj_rev_rate_tbl := SYSTEM.pa_num_tbl_type();
6970 x_proj_rev_rate_date_tbl := SYSTEM.pa_date_tbl_type();
6971 x_pfunc_cost_rate_type_tbl := SYSTEM.pa_varchar2_30_tbl_type();
6972 x_pfunc_cost_rate_date_typ_tbl := SYSTEM.pa_varchar2_30_tbl_type();
6973 x_pfunc_cost_rate_tbl := SYSTEM.pa_num_tbl_type();
6974 x_pfunc_cost_rate_date_tbl := SYSTEM.pa_date_tbl_type();
6975 x_pfunc_rev_rate_type_tbl := SYSTEM.pa_varchar2_30_tbl_type();
6976 x_pfunc_rev_rate_date_type_tbl := SYSTEM.pa_varchar2_30_tbl_type();
6977 x_pfunc_rev_rate_tbl := SYSTEM.pa_num_tbl_type();
6978 x_pfunc_rev_rate_date_tbl := SYSTEM.pa_date_tbl_type();
6979 x_delete_flag_tbl := SYSTEM.pa_varchar2_1_tbl_type();
6980 x_spread_curve_id_tbl := SYSTEM.pa_num_tbl_type();
6981 x_mfc_cost_type_id_tbl := SYSTEM.pa_num_tbl_type();
6982 x_etc_method_code_tbl := SYSTEM.pa_varchar2_30_tbl_type();
6983 x_sp_fixed_date_tbl := SYSTEM.pa_date_tbl_type();
6984 x_res_class_code_tbl := SYSTEM.pa_varchar2_30_tbl_type();
6985 x_rate_based_flag_tbl := SYSTEM.pa_varchar2_1_tbl_type();
6986 x_rbs_elem_id_tbl := SYSTEM.pa_num_tbl_type();
6987 x_change_reason_code_tbl := SYSTEM.pa_varchar2_30_tbl_type();
6988 x_description_tbl := SYSTEM.pa_varchar2_2000_tbl_type();
6989
6990 --log1('----- STAGE 2-------');
6991 IF p_context = 'WEBADI_PERIODIC' THEN
6992 --log1('----- STAGE 2P-------');
6993 --These variables will be used to store the values corresponding to the previous
6994 --row while looping thru the rows in the interface table.
6995 l_prev_task_id := -1;
6996 l_prev_rlm_id := l_g_miss_num;
6997 l_prev_txn_curr_code := l_g_miss_char;
6998 l_bl_index := 1;
6999
7000 --Initialize the OUT variables l_prd_mask_st_date_tbl/l_prd_mask_end_date_tbl
7001 --First element is reserved for preceeding bucket which will be set for each resource assignment later
7002 l_prd_mask_st_date_tbl.extend;
7003 l_prd_mask_end_date_tbl.extend;
7004 l_prd_mask_end_date_tbl(1):=p_first_pd_bf_pm_en_dt;
7005 FOR i IN 1..p_prd_mask_st_date_tbl.COUNT LOOP
7006 l_prd_mask_st_date_tbl.extend;
7007 l_prd_mask_st_date_tbl(l_prd_mask_st_date_tbl.COUNT):=p_prd_mask_st_date_tbl(i);
7008 l_prd_mask_end_date_tbl.extend;
7009 l_prd_mask_end_date_tbl(l_prd_mask_end_date_tbl.COUNT):=p_prd_mask_end_date_tbl(i);
7010 END LOOP;
7011 --Reserve the last element for succeding bucket which will be set for each resource assignment later
7012 l_prd_mask_st_date_tbl.extend;
7013 l_prd_mask_st_date_tbl(l_prd_mask_st_date_tbl.COUNT):=p_last_pd_af_pm_st_dt;
7014 l_prd_mask_end_date_tbl.extend;
7015
7016 --log1('----- STAGE 3P-------');
7017 IF l_debug_mode = 'Y' THEN
7018 pa_debug.g_err_stage := 'About to loop thru inf_tbl_data_csr';
7019 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7020 END IF;
7021 IF p_version_info_rec.x_version_type = 'COST' THEN
7022 l_allow_qty_flag := p_version_info_rec.x_cost_quantity_flag;
7023 ELSIF p_version_info_rec.x_version_type = 'REVENUE' THEN
7024 l_allow_qty_flag := p_version_info_rec.x_rev_quantity_flag;
7025 ELSIF p_version_info_rec.x_version_type = 'ALL' THEN
7026 l_allow_qty_flag := p_version_info_rec.x_all_quantity_flag;
7027 END IF;
7028
7029 /*FOR l_curr_rec IN inf_tbl_data_csr LOOP*/
7030 -- Changing the for loop to a while loop so that the variable can be incremented inside
7031 -- This is for bug 4477397
7032 tt := 0;
7033 while tt <= p_inf_tbl_rec_tbl.COUNT
7034 LOOP
7035 tt := tt + 1;
7036
7037 IF tt > p_inf_tbl_rec_tbl.COUNT THEN
7038 EXIT;
7039 END IF;
7040
7041 l_curr_rec:=NULL;
7042 IF l_skip_ra_flag ='N' THEN
7043
7044 -- FETCH inf_tbl_data_csr INTO l_curr_rec;
7045 l_curr_rec := p_inf_tbl_rec_tbl(tt);
7046
7047 ELSE
7048
7049 LOOP
7050
7051 IF tt <= p_inf_tbl_rec_tbl.COUNT THEN
7052 l_curr_rec := p_inf_tbl_rec_tbl(tt);
7053 ELSE
7054 l_curr_rec := NULL;
7055 END IF;
7056
7057 EXIT WHEN l_curr_rec.task_id IS NULL OR
7058 l_curr_rec.task_id <> l_skip_task_id OR
7059 l_curr_rec.resource_list_member_id <> l_skip_rlm_id;
7060 l_curr_rec:=NULL;
7061 tt := tt + 1;
7062 -- FETCH inf_tbl_data_csr INTO l_curr_rec;
7063
7064 END LOOP;
7065
7066 END IF;
7067
7068 IF tt > p_inf_tbl_rec_tbl.COUNT THEN
7069 EXIT;
7070 END IF;
7071
7072 l_skip_ra_flag := 'N';
7073 l_skip_task_id := NULL;
7074 l_skip_rlm_id := NULL;
7075 --EXIT WHEN l_curr_rec.task_id IS NULL;
7076 --log1('----- STAGE X1-------');
7077 --Reset l_extend_pbl_out_tbls_flag. This flag will be set to Y for each planning
7078 --TXN so that the OUT tbls for process_budget_lines are correctly increased in length
7079 l_extend_pbl_out_tbls_flag := 'N';
7080
7081 --Loop thru the p_budget_lines_tbl to find the record with RA/Curr same as
7082 --l_curr_rec
7083 LOOP
7084 --log1('----- STAGE X2-------');
7085 EXIT WHEN p_budget_lines_tbl(l_bl_index).pa_task_id = l_curr_rec.task_id AND
7086 p_budget_lines_tbl(l_bl_index).resource_list_member_id = l_curr_rec.resource_list_member_id AND
7087 p_budget_lines_tbl(l_bl_index).txn_currency_code = l_curr_rec.txn_currency_code;
7088
7089 l_bl_index:=l_bl_index+1;
7090 --log1('----- STAGE X3-------');
7091 END LOOP;
7092
7093 IF p_planning_start_date_tbl(l_bl_index) IS NOT NULL AND
7094 p_planning_end_date_tbl(l_bl_index) IS NOT NULL
7095 AND (p_etc_start_date IS NULL OR ( p_etc_start_date < p_planning_end_date_tbl(l_bl_index) ) ) THEN
7096
7097 --For each resource assignment find out the no. of periods in the period mask
7098 --that would fall between the planning start/end dates. If n such periods exist,
7099 --then n rows in the OUT tbls for each RA/currency/amount type should be prepared
7100 IF l_curr_rec.task_id <> l_prev_task_id OR
7101 NVL(l_curr_rec.resource_list_member_id,'-99') <> l_prev_rlm_id THEN
7102
7103 IF l_debug_mode = 'Y' THEN
7104 pa_debug.g_err_stage := 'Finding out no. of periods for RA with task_id '||l_curr_rec.task_id||' Res '||l_curr_rec.resource_list_member_id;
7105 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7106 END IF;
7107
7108 /*IF l_debug_mode = 'Y' THEN
7109 pa_debug.g_err_stage := 'p_version_info_rec.x_org_id: ' || p_version_info_rec.x_org_id;
7110 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7111 pa_debug.g_err_stage := 'l_bl_index: ' || l_bl_index;
7112 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7113 pa_debug.g_err_stage := 'p_planning_start_date_tbl(l_bl_index): ' || p_planning_start_date_tbl(l_bl_index);
7114 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7115 pa_debug.g_err_stage := 'p_version_info_rec.x_time_phased_code: ' || p_version_info_rec.x_time_phased_code;
7116 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7117 pa_debug.g_err_stage := 'p_planning_end_date_tbl(l_bl_index): ' || p_planning_end_date_tbl(l_bl_index);
7118 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7119 END IF;*/
7120 --Populate the preceeding and succeeding buckets in the period mask table
7121 --log1('----- STAGE X3.1------- '||p_version_info_rec.x_org_id);
7122 --log1('----- STAGE X3.2------- '||l_bl_index);
7123 --log1('----- STAGE X3.3------- '||p_planning_start_date_tbl(l_bl_index));
7124 --log1('----- STAGE X3.4------- '|| p_version_info_rec.x_org_id);
7125 --log1('----- STAGE X3.5------- '|| p_version_info_rec.x_time_phased_code);
7126 --log1('----- STAGE X3.6------- '|| p_planning_end_date_tbl(l_bl_index));
7127 SELECT gl.start_date
7128 INTO l_prd_mask_st_date_tbl(1)
7129 FROM gl_periods gl,
7130 pa_implementations_all pim,
7131 gl_sets_of_books gsb
7132 WHERE pim.org_id = p_version_info_rec.x_org_id
7133 AND gsb.set_of_books_id = pim.set_of_books_id
7134 AND gl.period_set_name= DECODE(p_version_info_rec.x_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
7135 AND gl.period_type = DECODE(p_version_info_rec.x_time_phased_code,
7136 'P',pim.pa_period_type,
7137 'G',gsb.accounted_period_type)
7138 AND gl.adjustment_period_flag='N'
7139 AND gl.start_date <= p_planning_start_date_tbl(l_bl_index)
7140 AND gl.end_date >=p_planning_start_date_tbl(l_bl_index);
7141
7142 SELECT gl.end_date
7143 INTO l_prd_mask_end_date_tbl(l_prd_mask_end_date_tbl.COUNT)
7144 FROM gl_periods gl,
7145 pa_implementations_all pim,
7146 gl_sets_of_books gsb
7147 WHERE pim.org_id = p_version_info_rec.x_org_id
7148 AND gsb.set_of_books_id = pim.set_of_books_id
7149 AND gl.period_set_name= DECODE(p_version_info_rec.x_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
7150 AND gl.period_type = DECODE(p_version_info_rec.x_time_phased_code,
7151 'P',pim.pa_period_type,
7152 'G',gsb.accounted_period_type)
7153 AND gl.adjustment_period_flag='N'
7154 AND gl.start_date <= p_planning_end_date_tbl(l_bl_index)
7155 AND gl.end_date >=p_planning_end_date_tbl(l_bl_index);
7156
7157 l_extend_pbl_out_tbls_flag:= 'Y';
7158 l_plan_txn_attrs_copied_flag := 'N';
7159 l_prev_task_id:=l_curr_rec.task_id;
7160 l_prev_rlm_id:=l_curr_rec.resource_list_member_id;
7161 l_prev_txn_curr_code:=l_curr_rec.txn_currency_code;
7162
7163 --Find out the flexible periods in the period mask that should be considered
7164 --based on RA's planning start/end dates
7165 l_st_index_in_prd_mask := NULL;
7166 l_end_index_in_prd_mask := NULL;
7167 l_sd_prd_exists_flag := NULL;
7168 l_pd_prd_exists_flag := NULL;
7169 l_num_of_prds_for_plan_txn :=0;
7170
7171 --log1('----- STAGE X4-------');
7172 IF NVL(p_etc_start_date,p_planning_start_date_tbl(l_bl_index)) < p_prd_mask_st_date_tbl(1) THEN
7173 --log1('----- STAGE X5-------');
7174 l_st_index_in_prd_mask:=1;
7175 l_pd_prd_exists_flag :='Y';
7176
7177 END IF;
7178
7179 --log1('----- STAGE X5.1------- '||l_bl_index);
7180 --log1('----- STAGE X5.2------- '||p_planning_end_date_tbl(l_bl_index) );
7181 --log1('----- STAGE X5.3------- '||p_prd_mask_end_date_tbl(p_prd_mask_end_date_tbl.COUNT));
7182 IF p_planning_end_date_tbl(l_bl_index) > p_prd_mask_end_date_tbl(p_prd_mask_end_date_tbl.COUNT) THEN
7183
7184 l_end_index_in_prd_mask:=l_prd_mask_end_date_tbl.COUNT;
7185 l_sd_prd_exists_flag :='Y';
7186
7187 END IF;
7188
7189 --log1('----- STAGE X5.4------- '||l_st_index_in_prd_mask);
7190 --log1('----- STAGE X5.5------- '||l_end_index_in_prd_mask);
7191 IF l_st_index_in_prd_mask IS NULL OR
7192 l_end_index_in_prd_mask IS NULL THEN
7193
7194 --Find out the flexbile period in which the planning start/end dates fall
7195 FOR kk IN 2..l_prd_mask_st_date_tbl.LAST-1 LOOP
7196
7197 IF l_st_index_in_prd_mask IS NULL THEN
7198
7199 --log1('----- STAGE X5.6------- '||l_bl_index);
7200 --log1('----- STAGE X5.7------- '||p_planning_start_date_tbl(l_bl_index));
7201 --log1('----- STAGE X5.8------- '||kk);
7202 --log1('----- STAGE X5.9------- '|| l_prd_mask_st_date_tbl(kk));
7203 --log1('----- STAGE X5.10------- '|| l_prd_mask_end_date_tbl(kk));
7204 IF NVL(p_etc_start_date,p_planning_start_date_tbl(l_bl_index)) >= l_prd_mask_st_date_tbl(kk) AND
7205 NVL(p_etc_start_date,p_planning_start_date_tbl(l_bl_index)) <= l_prd_mask_end_date_tbl(kk) THEN
7206
7207 l_st_index_in_prd_mask:= kk;
7208
7209 END IF;
7210
7211 END IF;
7212
7213 IF l_end_index_in_prd_mask IS NULL THEN
7214
7215 --log1('----- STAGE X5.10------- '||l_bl_index);
7216 --log1('----- STAGE X5.11------- '||p_planning_end_date_tbl(l_bl_index));
7217 --log1('----- STAGE X5.12------- '||kk);
7218 --log1('----- STAGE X5.13------- '|| l_prd_mask_st_date_tbl(kk));
7219 --log1('----- STAGE X5.14------- '|| l_prd_mask_end_date_tbl(kk));
7220 IF p_planning_end_date_tbl(l_bl_index) >= l_prd_mask_st_date_tbl(kk) AND
7221 p_planning_end_date_tbl(l_bl_index) <= l_prd_mask_end_date_tbl(kk) THEN
7222
7223 l_end_index_in_prd_mask:= kk;
7224
7225 END IF;
7226
7227 END IF;
7228
7229 IF l_st_index_in_prd_mask IS NOT NULL AND
7230 l_end_index_in_prd_mask IS NOT NULL THEN
7231
7232 EXIT;
7233
7234 END IF;
7235
7236 END LOOP;--FOR kk IN 2..l_prd_mask_st_date_tbl LOOP
7237
7238 END IF;--IF l_st_index_in_prd_mask IS NULL OR
7239
7240 IF l_st_index_in_prd_mask IS NULL AND
7241 l_end_index_in_prd_mask IS NOT NULL THEN
7242
7243 l_st_index_in_prd_mask :=l_end_index_in_prd_mask;
7244
7245 END IF;
7246
7247 IF l_st_index_in_prd_mask IS NOT NULL AND
7248 l_end_index_in_prd_mask IS NULL THEN
7249
7250 l_end_index_in_prd_mask := l_st_index_in_prd_mask;
7251
7252 END IF;
7253
7254 l_num_of_prds_for_plan_txn := l_end_index_in_prd_mask - l_st_index_in_prd_mask +1;
7255
7256 l_extend_pbl_out_tbls_flag := 'Y';
7257
7258 END IF;--IF l_curr_rec.task_id <> l_prev_task_id OR
7259
7260 --Currency /amount type of this record is different from one that of previous record.
7261 IF l_prev_txn_curr_code <> l_curr_rec.txn_currency_code THEN
7262
7263 l_extend_pbl_out_tbls_flag:= 'Y';
7264 l_plan_txn_attrs_copied_flag := 'N';
7265 l_prev_txn_curr_code:=l_curr_rec.txn_currency_code;
7266
7267 END IF;
7268
7269 --Extend the OUT tbls and populate the Line start/end tbls. Header level tbls such as
7270 --task/rlm etc will also be populated.
7271 IF l_extend_pbl_out_tbls_flag ='Y' THEN
7272
7273 l_extend_pbl_out_tbls_flag := 'N';
7274 --This variable will be used to store the index till which the OUT tbls for prepare_pbl_input are
7275 --populated.
7276 l_prev_pbl_tbl_count := x_task_id_tbl.COUNT;
7277 x_task_id_tbl.extend(l_num_of_prds_for_plan_txn);
7278 x_rlm_id_tbl.extend(l_num_of_prds_for_plan_txn);
7279 x_ra_id_tbl.extend(l_num_of_prds_for_plan_txn);
7280 x_spread_curve_id_tbl.extend(l_num_of_prds_for_plan_txn);
7281 x_mfc_cost_type_id_tbl.extend(l_num_of_prds_for_plan_txn);
7282 x_etc_method_code_tbl.extend(l_num_of_prds_for_plan_txn);
7283 x_sp_fixed_date_tbl.extend(l_num_of_prds_for_plan_txn);
7284 x_res_class_code_tbl.extend(l_num_of_prds_for_plan_txn);
7285 x_rate_based_flag_tbl.extend(l_num_of_prds_for_plan_txn);
7286 x_rbs_elem_id_tbl.extend(l_num_of_prds_for_plan_txn);
7287 x_txn_currency_code_tbl.extend(l_num_of_prds_for_plan_txn);
7288 x_planning_start_date_tbl.extend(l_num_of_prds_for_plan_txn);
7289 x_planning_end_date_tbl.extend(l_num_of_prds_for_plan_txn);
7290 x_total_qty_tbl.extend(l_num_of_prds_for_plan_txn);
7291 x_total_raw_cost_tbl.extend(l_num_of_prds_for_plan_txn);
7292 x_total_burdened_cost_tbl.extend(l_num_of_prds_for_plan_txn);
7293 x_total_revenue_tbl.extend(l_num_of_prds_for_plan_txn);
7294 x_raw_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7295 x_burdened_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7296 x_bill_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7297 x_line_start_date_tbl.extend(l_num_of_prds_for_plan_txn);
7298 x_line_end_date_tbl.extend(l_num_of_prds_for_plan_txn);
7299 x_proj_cost_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7300 x_proj_cost_rate_date_type_tbl.extend(l_num_of_prds_for_plan_txn);
7301 x_proj_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7302 x_proj_cost_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7303 x_proj_rev_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7304 x_proj_rev_rate_date_type_tbl.extend(l_num_of_prds_for_plan_txn);
7305 x_proj_rev_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7306 x_proj_rev_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7307 x_pfunc_cost_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7308 x_pfunc_cost_rate_date_typ_tbl.extend(l_num_of_prds_for_plan_txn);
7309 x_pfunc_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7310 x_pfunc_cost_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7311 x_pfunc_rev_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7312 x_pfunc_rev_rate_date_type_tbl.extend(l_num_of_prds_for_plan_txn);
7313 x_pfunc_rev_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7314 x_pfunc_rev_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7315 x_delete_flag_tbl.extend(l_num_of_prds_for_plan_txn);
7316 x_change_reason_code_tbl.extend(l_num_of_prds_for_plan_txn);
7317 x_description_tbl.extend(l_num_of_prds_for_plan_txn);
7318
7319 --log1('----- STAGE X5.15.0------- '||l_st_index_in_prd_mask);
7320 --log1('----- STAGE X5.15.0.1------- '||l_end_index_in_prd_mask);
7321
7322 IF l_st_index_in_prd_mask IS NOT NULL THEN
7323
7324 FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7325
7326 l_tmp_index := l_prev_pbl_tbl_count + kk - l_st_index_in_prd_mask + 1;
7327 --log1('----- STAGE X5.15.1 ------- '||l_tmp_index);
7328
7329 x_line_start_date_tbl(l_tmp_index):=l_prd_mask_st_date_tbl(kk);
7330
7331 --log1('----- STAGE X5.15.2 ------- ');
7332
7333 x_line_end_date_tbl(l_tmp_index):=l_prd_mask_end_date_tbl(kk);
7334
7335 --log1('----- STAGE X5.15.3 ------- ');
7336 x_task_id_tbl(l_tmp_index) := l_curr_rec.task_id;
7337 x_rlm_id_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).resource_list_member_id;
7338 x_ra_id_tbl(l_tmp_index) := p_ra_id_tbl(l_bl_index);
7339 x_txn_currency_code_tbl(l_tmp_index) := l_curr_rec.txn_currency_code;
7340 --log1('----- STAGE X5.15.4 ------- ');
7341 x_planning_start_date_tbl(l_tmp_index):= p_planning_start_date_tbl(l_bl_index);
7342 x_planning_end_date_tbl(l_tmp_index) := p_planning_end_date_tbl(l_bl_index);
7343 x_spread_curve_id_tbl(l_tmp_index) := p_spread_curve_id_tbl(l_bl_index);
7344 --log1('----- STAGE X5.15.5 ------- ');
7345 x_mfc_cost_type_id_tbl(l_tmp_index) := p_mfc_cost_type_id_tbl(l_bl_index);
7346 x_etc_method_code_tbl(l_tmp_index) := p_etc_method_code_tbl(l_bl_index);
7347 x_sp_fixed_date_tbl(l_tmp_index) := p_sp_fixed_date_tbl(l_bl_index);
7348 --log1('----- STAGE X5.15.6 ------- ');
7349 x_res_class_code_tbl(l_tmp_index) := p_res_class_code_tbl(l_bl_index);
7350 x_rate_based_flag_tbl(l_tmp_index) := p_rate_based_flag_tbl(l_bl_index);
7351 x_rbs_elem_id_tbl(l_tmp_index) := p_rbs_elem_id_tbl(l_bl_index);
7352 --Assigning N since for periodic layouts, amounts a type with delete flag as N would be NULLED
7353 --out
7354 x_delete_flag_tbl(l_tmp_index) :='N';
7355
7356
7357
7358 END LOOP;--FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7359
7360 END IF;--IF l_st_index_in_prd_mask IS NOT NULL THEN
7361
7362 END IF;--IF l_extend_pbl_out_tbls_flag ='Y' THEN
7363
7364 --log1('----- STAGE X5.16------- ');
7365 IF l_st_index_in_prd_mask IS NOT NULL THEN
7366
7367 --For the current record, populate amounts for appropriate amount types
7368 FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7369
7370 IF l_curr_rec.delete_flag ='Y' THEN
7371
7372 l_amount := l_g_miss_num;
7373
7374 ELSE
7375
7376 IF kk = 1 THEN
7377 --Indicates that the flex period corresponds to FIRST period before the first flexible period in
7378 --the period mask. This period stands for PD period
7379 l_prd_index := 'PD';
7380
7381 ELSIF kk = l_prd_mask_st_date_tbl.COUNT THEN
7382 --Indicates that the flex period corresponds to FIRST period AFTER the LAST flexible period in
7383 --the period mask. This period stands for SD period
7384 l_prd_index := 'SD';
7385
7386 ELSE
7387
7388 --kk-1 should be used since the periods in the period mask are
7389 --stored staring from the second bucket of l_prd_mask_st_date_tbl
7390 l_prd_index := to_char(kk-1);
7391
7392 END IF;
7393
7394 l_amount := get_amount_in_prd_x(p_rec => l_curr_rec,
7395 p_prd => l_prd_index);
7396
7397 END IF;
7398
7399 l_tmp_index := l_prev_pbl_tbl_count + kk - l_st_index_in_prd_mask + 1;
7400
7401 --In the below block amounts that should be passed to the calculate API will be derived
7402 --In case of Budgets, only one column per amount type is editable
7403 --In case of Forecasts two columns (Forecast and ETC) are editable.
7404 ---->If both are hidden in the layout NULL will be passed
7405 ---->If ETC is hidden and Forecast is displayed in the layout then Forecast entered will be passed
7406 ---->If Forecast is hidden and ETC is displayed in the layout then ETC entered + Actuals will be passed
7407 ---->If both Forecast and ETC are displayed in the layout then
7408 ------>If Forecast is entered is different from the existing value then it will be passed
7409 ------>Else If ETC entered is different from existing value then ETC + actuals will be passed
7410 ------>Else NULL will be passed
7411 ---->Note that amount columns in budget lines tbl will contain the forecast values and ETC values
7412 ---->are passed as input to this API
7413 IF l_curr_rec.amount_type_code = 'TOTAL_BURDENED_COST' THEN
7414
7415 x_total_burdened_cost_tbl(l_tmp_index) := l_amount;
7416
7417 ELSIF l_curr_rec.amount_type_code = 'FCST_BURDENED_COST' THEN
7418
7419 x_total_burdened_cost_tbl(l_tmp_index) := l_amount;
7420
7421 ELSIF l_curr_rec.amount_type_code = 'ETC_BURDENED_COST' THEN
7422
7423 get_total_fcst_amounts
7424 (p_project_id =>p_project_id,
7425 p_budget_version_id =>p_budget_version_id,
7426 p_task_id =>l_curr_rec.task_id,
7427 p_resource_list_member_id =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7428 p_txn_currency_code =>l_curr_rec.txn_currency_code,
7429 p_line_start_date =>l_prd_mask_st_date_tbl(kk),
7430 p_line_end_date =>l_prd_mask_end_date_tbl(kk),
7431 p_prd_mask_st_date_tbl =>l_prd_mask_st_date_tbl,
7432 p_prd_mask_end_date_tbl =>l_prd_mask_end_date_tbl,
7433 p_st_index_in_prd_mask =>l_st_index_in_prd_mask,
7434 p_end_index_in_prd_mask =>l_end_index_in_prd_mask,
7435 p_etc_start_date =>p_etc_start_date,
7436 p_etc_quantity =>NULL,
7437 p_fcst_quantity =>NULL,
7438 p_etc_raw_cost =>NULL,
7439 p_fcst_raw_cost =>NULL,
7440 p_etc_burd_cost =>l_amount,
7441 p_fcst_burd_cost =>x_total_burdened_cost_tbl(l_tmp_index),
7442 p_etc_revenue =>NULL,
7443 p_fcst_revenue =>NULL,
7444 px_cached_fcst_qty_tbl =>l_cached_fcst_qty_tbl,
7445 px_cached_fcst_raw_cost_tbl =>l_cached_fcst_raw_cost_tbl,
7446 px_cached_fcst_burd_cost_tbl =>l_cached_fcst_burd_cost_tbl,
7447 px_cached_fcst_revenue_tbl =>l_cached_fcst_revenue_tbl,
7448 px_cached_etc_qty_tbl =>l_cached_etc_qty_tbl,
7449 px_cached_etc_raw_cost_tbl =>l_cached_etc_raw_cost_tbl,
7450 px_cached_etc_burd_cost_tbl =>l_cached_etc_burd_cost_tbl,
7451 px_cached_etc_revenue_tbl =>l_cached_etc_revenue_tbl,
7452 x_total_quantity =>l_tmp_quantity,
7453 x_total_raw_cost =>l_tmp_raw_cost,
7454 x_total_burd_cost =>x_total_burdened_cost_tbl(l_tmp_index),
7455 x_total_revenue =>l_tmp_revenue,
7456 x_return_status =>x_return_status,
7457 x_msg_count =>x_msg_count,
7458 x_msg_data =>x_msg_data );
7459
7460 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7461 IF l_debug_mode = 'Y' THEN
7462 pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7463 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7464 END IF;
7465 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7466 END IF;
7467
7468
7469 ELSIF l_curr_rec.amount_type_code = 'TOTAL_RAW_COST' THEN
7470
7471 x_total_raw_cost_tbl(l_tmp_index) := l_amount;
7472
7473 ELSIF l_curr_rec.amount_type_code = 'FCST_RAW_COST' THEN
7474
7475 x_total_raw_cost_tbl(l_tmp_index) := l_amount;
7476
7477 ELSIF l_curr_rec.amount_type_code = 'ETC_RAW_COST' THEN
7478
7479 get_total_fcst_amounts
7480 (p_project_id =>p_project_id,
7481 p_budget_version_id =>p_budget_version_id,
7482 p_task_id =>l_curr_rec.task_id,
7483 p_resource_list_member_id =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7484 p_txn_currency_code =>l_curr_rec.txn_currency_code,
7485 p_line_start_date =>l_prd_mask_st_date_tbl(kk),
7486 p_line_end_date =>l_prd_mask_end_date_tbl(kk),
7487 p_prd_mask_st_date_tbl =>l_prd_mask_st_date_tbl,
7488 p_prd_mask_end_date_tbl =>l_prd_mask_end_date_tbl,
7489 p_st_index_in_prd_mask =>l_st_index_in_prd_mask,
7490 p_end_index_in_prd_mask =>l_end_index_in_prd_mask,
7491 p_etc_start_date =>p_etc_start_date,
7492 p_etc_quantity =>NULL,
7493 p_fcst_quantity =>NULL,
7494 p_etc_raw_cost =>l_amount,
7495 p_fcst_raw_cost =>x_total_raw_cost_tbl(l_tmp_index),
7496 p_etc_burd_cost =>NULL,
7497 p_fcst_burd_cost =>NULL,
7498 p_etc_revenue =>NULL,
7499 p_fcst_revenue =>NULL,
7500 px_cached_fcst_qty_tbl =>l_cached_fcst_qty_tbl,
7501 px_cached_fcst_raw_cost_tbl =>l_cached_fcst_raw_cost_tbl,
7502 px_cached_fcst_burd_cost_tbl =>l_cached_fcst_burd_cost_tbl,
7503 px_cached_fcst_revenue_tbl =>l_cached_fcst_revenue_tbl,
7504 px_cached_etc_qty_tbl =>l_cached_etc_qty_tbl,
7505 px_cached_etc_raw_cost_tbl =>l_cached_etc_raw_cost_tbl,
7506 px_cached_etc_burd_cost_tbl =>l_cached_etc_burd_cost_tbl,
7507 px_cached_etc_revenue_tbl =>l_cached_etc_revenue_tbl,
7508 x_total_quantity =>l_tmp_quantity,
7509 x_total_raw_cost =>x_total_raw_cost_tbl(l_tmp_index),
7510 x_total_burd_cost =>l_tmp_burd_cost,
7511 x_total_revenue =>l_tmp_revenue,
7512 x_return_status =>x_return_status,
7513 x_msg_count =>x_msg_count,
7514 x_msg_data =>x_msg_data );
7515
7516 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7517 IF l_debug_mode = 'Y' THEN
7518 pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7519 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7520 END IF;
7521 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7522 END IF;
7523
7524
7525 ELSIF l_curr_rec.amount_type_code = 'TOTAL_REV' THEN
7526
7527 x_total_revenue_tbl(l_tmp_index) := l_amount;
7528
7529 ELSIF l_curr_rec.amount_type_code = 'FCST_REVENUE' THEN
7530
7531 x_total_revenue_tbl(l_tmp_index) := l_amount;
7532
7533 ELSIF l_curr_rec.amount_type_code = 'ETC_REVENUE' THEN
7534
7535 get_total_fcst_amounts
7536 (p_project_id =>p_project_id,
7537 p_budget_version_id =>p_budget_version_id,
7538 p_task_id =>l_curr_rec.task_id,
7539 p_resource_list_member_id =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7540 p_txn_currency_code =>l_curr_rec.txn_currency_code,
7541 p_line_start_date =>l_prd_mask_st_date_tbl(kk),
7542 p_line_end_date =>l_prd_mask_end_date_tbl(kk),
7543 p_prd_mask_st_date_tbl =>l_prd_mask_st_date_tbl,
7544 p_prd_mask_end_date_tbl =>l_prd_mask_end_date_tbl,
7545 p_st_index_in_prd_mask =>l_st_index_in_prd_mask,
7546 p_end_index_in_prd_mask =>l_end_index_in_prd_mask,
7547 p_etc_start_date =>p_etc_start_date,
7548 p_etc_quantity =>NULL,
7549 p_fcst_quantity =>NULL,
7550 p_etc_raw_cost =>NULL,
7551 p_fcst_raw_cost =>NULL,
7552 p_etc_burd_cost =>NULL,
7553 p_fcst_burd_cost =>NULL,
7554 p_etc_revenue =>l_amount,
7555 p_fcst_revenue =>x_total_revenue_tbl(l_tmp_index),
7556 px_cached_fcst_qty_tbl =>l_cached_fcst_qty_tbl,
7557 px_cached_fcst_raw_cost_tbl =>l_cached_fcst_raw_cost_tbl,
7558 px_cached_fcst_burd_cost_tbl =>l_cached_fcst_burd_cost_tbl,
7559 px_cached_fcst_revenue_tbl =>l_cached_fcst_revenue_tbl,
7560 px_cached_etc_qty_tbl =>l_cached_etc_qty_tbl,
7561 px_cached_etc_raw_cost_tbl =>l_cached_etc_raw_cost_tbl,
7562 px_cached_etc_burd_cost_tbl =>l_cached_etc_burd_cost_tbl,
7563 px_cached_etc_revenue_tbl =>l_cached_etc_revenue_tbl,
7564 x_total_quantity =>l_tmp_quantity,
7565 x_total_raw_cost =>l_tmp_raw_cost,
7566 x_total_burd_cost =>l_tmp_burd_cost,
7567 x_total_revenue =>x_total_revenue_tbl(l_tmp_index),
7568 x_return_status =>x_return_status,
7569 x_msg_count =>x_msg_count,
7570 x_msg_data =>x_msg_data );
7571
7572 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7573 IF l_debug_mode = 'Y' THEN
7574 pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7575 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7576 END IF;
7577 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7578 END IF;
7579
7580
7581 ELSIF l_curr_rec.amount_type_code = 'TOTAL_QTY' THEN
7582
7583 x_total_qty_tbl(l_tmp_index) := l_amount;
7584
7585 ELSIF l_curr_rec.amount_type_code = 'FCST_QTY' THEN
7586
7587 x_total_qty_tbl(l_tmp_index) := l_amount;
7588
7589 ELSIF l_curr_rec.amount_type_code = 'ETC_QTY' THEN
7590
7591 get_total_fcst_amounts
7592 (p_project_id =>p_project_id,
7593 p_budget_version_id =>p_budget_version_id,
7594 p_task_id =>l_curr_rec.task_id,
7595 p_resource_list_member_id =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7596 p_txn_currency_code =>l_curr_rec.txn_currency_code,
7597 p_line_start_date =>l_prd_mask_st_date_tbl(kk),
7598 p_line_end_date =>l_prd_mask_end_date_tbl(kk),
7599 p_prd_mask_st_date_tbl =>l_prd_mask_st_date_tbl,
7600 p_prd_mask_end_date_tbl =>l_prd_mask_end_date_tbl,
7601 p_st_index_in_prd_mask =>l_st_index_in_prd_mask,
7602 p_end_index_in_prd_mask =>l_end_index_in_prd_mask,
7603 p_etc_start_date =>p_etc_start_date,
7604 p_etc_quantity =>l_amount,
7605 p_fcst_quantity =>x_total_qty_tbl(l_tmp_index),
7606 p_etc_raw_cost =>NULL,
7607 p_fcst_raw_cost =>NULL,
7608 p_etc_burd_cost =>NULL,
7609 p_fcst_burd_cost =>NULL,
7610 p_etc_revenue =>NULL,
7611 p_fcst_revenue =>NULL,
7612 px_cached_fcst_qty_tbl =>l_cached_fcst_qty_tbl,
7613 px_cached_fcst_raw_cost_tbl =>l_cached_fcst_raw_cost_tbl,
7614 px_cached_fcst_burd_cost_tbl =>l_cached_fcst_burd_cost_tbl,
7615 px_cached_fcst_revenue_tbl =>l_cached_fcst_revenue_tbl,
7616 px_cached_etc_qty_tbl =>l_cached_etc_qty_tbl,
7617 px_cached_etc_raw_cost_tbl =>l_cached_etc_raw_cost_tbl,
7618 px_cached_etc_burd_cost_tbl =>l_cached_etc_burd_cost_tbl,
7619 px_cached_etc_revenue_tbl =>l_cached_etc_revenue_tbl,
7620 x_total_quantity =>x_total_qty_tbl(l_tmp_index),
7621 x_total_raw_cost =>l_tmp_raw_cost,
7622 x_total_burd_cost =>l_tmp_burd_cost,
7623 x_total_revenue =>l_tmp_revenue,
7624 x_return_status =>x_return_status,
7625 x_msg_count =>x_msg_count,
7626 x_msg_data =>x_msg_data );
7627
7628 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7629 IF l_debug_mode = 'Y' THEN
7630 pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7631 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7632 END IF;
7633 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7634 END IF;
7635
7636 ELSIF l_curr_rec.amount_type_code IN ('ETC_BURDENED_COST_RATE','BURDENED_COST_RATE') THEN
7637
7638 x_burdened_cost_rate_tbl(l_tmp_index) := l_amount;
7639
7640 ELSIF l_curr_rec.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') THEN
7641
7642 x_raw_cost_rate_tbl(l_tmp_index) := l_amount;
7643
7644 ELSIF l_curr_rec.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') THEN
7645
7646 x_bill_rate_tbl(l_tmp_index) := l_amount;
7647
7648 END IF;
7649
7650 END LOOP;--FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7651
7652 --log1('----- STAGE X5.17------- ');
7653
7654 IF nvl(l_curr_rec.delete_flag,'N') <> 'Y' AND
7655 l_plan_txn_attrs_copied_flag ='N' THEN
7656
7657 FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7658
7659 l_tmp_index := l_prev_pbl_tbl_count + kk - l_st_index_in_prd_mask + 1;
7660
7661 --log1('----- STAGE X5.17.1------- '||l_tmp_index);
7662
7663 x_proj_cost_rate_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_cost_rate_type;
7664 x_proj_cost_rate_date_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_cost_rate_date_type;
7665 x_proj_cost_rate_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_cost_exchange_rate;
7666 x_proj_cost_rate_date_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_cost_rate_date;
7667 --log1('----- STAGE X5.17.2------- ');
7668 x_proj_rev_rate_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_rev_rate_type;
7669 x_proj_rev_rate_date_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_rev_rate_date_type;
7670 x_proj_rev_rate_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_rev_exchange_rate;
7671 x_proj_rev_rate_date_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_rev_rate_date;
7672 --log1('----- STAGE X5.17.3------- ');
7673 x_pfunc_cost_rate_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_cost_rate_type;
7674 x_pfunc_cost_rate_date_typ_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_cost_rate_date_type;
7675 x_pfunc_cost_rate_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_cost_exchange_rate;
7676 x_pfunc_cost_rate_date_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_cost_rate_date;
7677 --log1('----- STAGE X5.17.4------- ');
7678 x_pfunc_rev_rate_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_rev_rate_type;
7679 x_pfunc_rev_rate_date_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_rev_rate_date_type;
7680 x_pfunc_rev_rate_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_rev_exchange_rate;
7681 x_pfunc_rev_rate_date_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_rev_rate_date;
7682
7683 -- stamping null for change reason and description
7684 x_change_reason_code_tbl(l_tmp_index) := NULL;
7685 x_description_tbl(l_tmp_index) := NULL;
7686
7687 END LOOP;--IF nvl(l_curr_rec.delete_flag,'N') <> 'Y' AND
7688
7689 l_plan_txn_attrs_copied_flag :='Y';
7690
7691 END IF;
7692
7693 END IF;--IF l_st_index_in_prd_mask IS NOT NULL THEN
7694
7695 --Bug 6877488 : The below code should be executed only when the planning dates are null. Added that
7696 --condition to remove the case where planning dates are not null but etc start date is >= planning end date
7697 ELSIF p_planning_start_date_tbl(l_bl_index) IS NULL AND
7698 p_planning_end_date_tbl(l_bl_index) IS NULL THEN
7699
7700 --Planning Start/End Dates both are null. This can happen only for new resource assignments when
7701
7702 ----1.Delete flag is Y or
7703 ----2.Amounts are not entered at all.
7704 --In the first case RA will be ignored and in the second case RA with no amounts would be created
7705 IF l_curr_rec.delete_flag='N' THEN
7706
7707 x_task_id_tbl.extend(1);
7708 x_rlm_id_tbl.extend(1);
7709 x_ra_id_tbl.extend(1);
7710 x_spread_curve_id_tbl.extend(1);
7711 x_mfc_cost_type_id_tbl.extend(1);
7712 x_etc_method_code_tbl.extend(1);
7713 x_sp_fixed_date_tbl.extend(1);
7714 x_res_class_code_tbl.extend(1);
7715 x_rate_based_flag_tbl.extend(1);
7716 x_rbs_elem_id_tbl.extend(1);
7717 x_txn_currency_code_tbl.extend(1);
7718 x_planning_start_date_tbl.extend(1);
7719 x_planning_end_date_tbl.extend(1);
7720 x_total_qty_tbl.extend(1);
7721 x_total_raw_cost_tbl.extend(1);
7722 x_total_burdened_cost_tbl.extend(1);
7723 x_total_revenue_tbl.extend(1);
7724 x_raw_cost_rate_tbl.extend(1);
7725 x_burdened_cost_rate_tbl.extend(1);
7726 x_bill_rate_tbl.extend(1);
7727 x_line_start_date_tbl.extend(1);
7728 x_line_end_date_tbl.extend(1);
7729 x_proj_cost_rate_type_tbl.extend(1);
7730 x_proj_cost_rate_date_type_tbl.extend(1);
7731 x_proj_cost_rate_tbl.extend(1);
7732 x_proj_cost_rate_date_tbl.extend(1);
7733 x_proj_rev_rate_type_tbl.extend(1);
7734 x_proj_rev_rate_date_type_tbl.extend(1);
7735 x_proj_rev_rate_tbl.extend(1);
7736 x_proj_rev_rate_date_tbl.extend(1);
7737 x_pfunc_cost_rate_type_tbl.extend(1);
7738 x_pfunc_cost_rate_date_typ_tbl.extend(1);
7739 x_pfunc_cost_rate_tbl.extend(1);
7740 x_pfunc_cost_rate_date_tbl.extend(1);
7741 x_pfunc_rev_rate_type_tbl.extend(1);
7742 x_pfunc_rev_rate_date_type_tbl.extend(1);
7743 x_pfunc_rev_rate_tbl.extend(1);
7744 x_pfunc_rev_rate_date_tbl.extend(1);
7745 x_delete_flag_tbl.extend(1);
7746 x_change_reason_code_tbl.extend(1);
7747 x_description_tbl.extend(1);
7748 x_task_id_tbl(x_task_id_tbl.COUNT) := l_curr_rec.task_id;
7749 x_rlm_id_tbl(x_rlm_id_tbl.COUNT) := p_budget_lines_tbl(l_bl_index).resource_list_member_id;
7750 x_ra_id_tbl(x_ra_id_tbl.COUNT) := p_ra_id_tbl(l_bl_index);
7751 x_txn_currency_code_tbl(x_txn_currency_code_tbl.COUNT):= l_curr_rec.txn_currency_code;
7752 --Assigning N since for periodic layouts, amounts a type with delete flag as N would be NULLED
7753 --out
7754 x_delete_flag_tbl(x_delete_flag_tbl.COUNT) :='N';
7755
7756 END IF;
7757 --Skip the processing of all the records pertaining to this ra id
7758 l_skip_ra_flag:='Y';
7759 l_skip_task_id:=l_curr_rec.task_id;
7760 l_skip_rlm_id:=p_budget_lines_tbl(l_bl_index).resource_list_member_id;
7761
7762 END IF;-- IF p_planning_start_date_tbl(l_bl_index) IS NOT NULL AND
7763
7764
7765 END LOOP;
7766
7767 ELSE --p_context is WEBADI_NON_PERIODIC
7768 --log1('----- STAGE X6-------');
7769 FOR kk IN 1..p_budget_lines_tbl.COUNT LOOP
7770 --log1('----- STAGE X7-------');
7771 x_task_id_tbl.EXTEND(1);
7772 x_task_id_tbl(kk) := p_budget_lines_tbl(kk).pa_task_id;
7773 x_rlm_id_tbl.EXTEND(1);
7774 x_rlm_id_tbl(kk) := p_budget_lines_tbl(kk).resource_list_member_id;
7775 x_ra_id_tbl.EXTEND(1);
7776 x_ra_id_tbl(kk) := p_ra_id_tbl(kk);
7777 x_txn_currency_code_tbl.EXTEND(1);
7778 x_txn_currency_code_tbl(kk) := p_budget_lines_tbl(kk).txn_currency_code;
7779 --log1('----- STAGE X71-------');
7780 x_planning_start_date_tbl.EXTEND(1);
7781 x_planning_start_date_tbl(kk) := p_planning_start_date_tbl(kk);
7782 x_planning_end_date_tbl.EXTEND(1);
7783 x_planning_end_date_tbl(kk) := p_planning_end_date_tbl(kk);
7784 --log1('----- STAGE X72-------');
7785 x_total_qty_tbl.EXTEND(1);
7786 x_total_qty_tbl(kk) := p_budget_lines_tbl(kk).quantity;
7787 x_total_raw_cost_tbl.EXTEND(1);
7788 x_total_raw_cost_tbl(kk) := p_budget_lines_tbl(kk).raw_cost;
7789 x_total_burdened_cost_tbl.EXTEND(1);
7790 x_total_burdened_cost_tbl(kk) := p_budget_lines_tbl(kk).burdened_cost;
7791 x_total_revenue_tbl.EXTEND(1);
7792 x_total_revenue_tbl(kk) := p_budget_lines_tbl(kk).revenue;
7793 --log1('----- STAGE X73-------');
7794 x_raw_cost_rate_tbl.EXTEND(1);
7795 x_raw_cost_rate_tbl(kk) := p_raw_cost_rate_tbl(kk);
7796 x_burdened_cost_rate_tbl.EXTEND(1);
7797 x_burdened_cost_rate_tbl(kk) := p_burd_cost_rate_tbl(kk);
7798 x_bill_rate_tbl.EXTEND(1);
7799 x_bill_rate_tbl(kk) := p_bill_rate_tbl(kk);
7800 --log1('----- STAGE X74-------');
7801
7802 x_line_start_date_tbl.EXTEND(1);
7803 x_line_start_date_tbl(kk) := NULL;
7804 x_line_end_date_tbl.EXTEND(1);
7805 x_line_end_date_tbl(kk) := NULL;
7806 --log1('----- STAGE X75-------');
7807 x_proj_cost_rate_type_tbl.EXTEND(1);
7808 x_proj_cost_rate_type_tbl(kk) := p_budget_lines_tbl(kk).project_cost_rate_type;
7809 x_proj_cost_rate_date_type_tbl.EXTEND(1);
7810 x_proj_cost_rate_date_type_tbl(kk) := p_budget_lines_tbl(kk).project_cost_rate_date_type;
7811 x_proj_cost_rate_tbl.EXTEND(1);
7812 x_proj_cost_rate_tbl(kk) := p_budget_lines_tbl(kk).project_cost_exchange_rate;
7813 x_proj_cost_rate_date_tbl.EXTEND(1);
7814 x_proj_cost_rate_date_tbl(kk) := p_budget_lines_tbl(kk).project_cost_rate_date;
7815 x_proj_rev_rate_type_tbl.EXTEND(1);
7816 x_proj_rev_rate_type_tbl(kk) := p_budget_lines_tbl(kk).project_rev_rate_type;
7817 x_proj_rev_rate_date_type_tbl.EXTEND(1);
7818 x_proj_rev_rate_date_type_tbl(kk) := p_budget_lines_tbl(kk).project_rev_rate_date_type;
7819 x_proj_rev_rate_tbl.EXTEND(1);
7820 x_proj_rev_rate_tbl(kk) := p_budget_lines_tbl(kk).project_rev_exchange_rate;
7821 x_proj_rev_rate_date_tbl.EXTEND(1);
7822 x_proj_rev_rate_date_tbl(kk) := p_budget_lines_tbl(kk).project_rev_rate_date;
7823 x_pfunc_cost_rate_type_tbl.EXTEND(1);
7824 x_pfunc_cost_rate_type_tbl(kk) := p_budget_lines_tbl(kk).projfunc_cost_rate_type;
7825 x_pfunc_cost_rate_date_typ_tbl.EXTEND(1);
7826 x_pfunc_cost_rate_date_typ_tbl(kk) := p_budget_lines_tbl(kk).projfunc_cost_rate_date_type;
7827 x_pfunc_cost_rate_tbl.EXTEND(1);
7828 x_pfunc_cost_rate_tbl(kk) := p_budget_lines_tbl(kk).projfunc_cost_exchange_rate;
7829 x_pfunc_cost_rate_date_tbl.EXTEND(1);
7830 x_pfunc_cost_rate_date_tbl(kk) := p_budget_lines_tbl(kk).projfunc_cost_rate_date;
7831 x_pfunc_rev_rate_type_tbl.EXTEND(1);
7832 x_pfunc_rev_rate_type_tbl(kk) := p_budget_lines_tbl(kk).projfunc_rev_rate_type;
7833 x_pfunc_rev_rate_date_type_tbl.EXTEND(1);
7834 x_pfunc_rev_rate_date_type_tbl(kk) := p_budget_lines_tbl(kk).projfunc_rev_rate_date_type;
7835 x_pfunc_rev_rate_tbl.EXTEND(1);
7836 x_pfunc_rev_rate_tbl(kk) := p_budget_lines_tbl(kk).projfunc_rev_exchange_rate;
7837 x_pfunc_rev_rate_date_tbl.EXTEND(1);
7838 x_pfunc_rev_rate_date_tbl(kk) := p_budget_lines_tbl(kk).projfunc_rev_rate_date;
7839 --log1('----- STAGE X76-------');
7840 x_delete_flag_tbl.EXTEND(1);
7841 x_delete_flag_tbl(kk) := p_delete_flag_tbl(kk);
7842 x_spread_curve_id_tbl.EXTEND(1);
7843 x_spread_curve_id_tbl(kk) := p_spread_curve_id_tbl(kk);
7844 x_mfc_cost_type_id_tbl.EXTEND(1);
7845 x_mfc_cost_type_id_tbl(kk) := p_mfc_cost_type_id_tbl(kk);
7846 x_etc_method_code_tbl.EXTEND(1);
7847 x_etc_method_code_tbl(kk) := p_etc_method_code_tbl(kk);
7848 x_sp_fixed_date_tbl.EXTEND(1);
7849 x_sp_fixed_date_tbl(kk) := p_sp_fixed_date_tbl(kk);
7850 x_res_class_code_tbl.EXTEND(1);
7851 x_res_class_code_tbl(kk) := p_res_class_code_tbl(kk);
7852 x_rate_based_flag_tbl.EXTEND(1);
7853 x_rate_based_flag_tbl(kk) := p_rate_based_flag_tbl(kk);
7854 x_rbs_elem_id_tbl.EXTEND(1);
7855 x_rbs_elem_id_tbl(kk) := p_rbs_elem_id_tbl(kk);
7856 x_change_reason_code_tbl.EXTEND(1);
7857 x_change_reason_code_tbl(kk) := p_budget_lines_tbl(kk).change_reason_code;
7858 x_description_tbl.EXTEND(1);
7859 x_description_tbl(kk) := p_budget_lines_tbl(kk).description;
7860 --log1('----- STAGE X8-------');
7861
7862 --For forecast version, The above amount tbls contain the Forecast amounts, The below
7863 --API is called to modify the Forecast amounts entered based on the ETC amounts entered.
7864 IF p_plan_class_code='FORECAST' THEN
7865
7866 get_total_fcst_amounts
7867 (p_project_id =>p_project_id,
7868 p_budget_version_id =>p_budget_version_id,
7869 p_task_id =>p_budget_lines_tbl(kk).pa_task_id,
7870 p_resource_list_member_id =>p_budget_lines_tbl(kk).resource_list_member_id,
7871 p_txn_currency_code =>p_budget_lines_tbl(kk).txn_currency_code,
7872 p_line_start_date =>NULL,
7873 p_line_end_date =>NULL,
7874 p_prd_mask_st_date_tbl =>SYSTEM.pa_date_tbl_type(),
7875 p_prd_mask_end_date_tbl =>SYSTEM.pa_date_tbl_type(),
7876 p_st_index_in_prd_mask =>NULL,
7877 p_end_index_in_prd_mask =>NULL,
7878 p_etc_start_date =>p_etc_start_date,
7879 p_etc_quantity =>p_etc_quantity_tbl(kk),
7880 p_fcst_quantity =>p_budget_lines_tbl(kk).quantity,
7881 p_etc_raw_cost =>p_etc_raw_cost_tbl(kk),
7882 p_fcst_raw_cost =>p_budget_lines_tbl(kk).raw_cost,
7883 p_etc_burd_cost =>p_etc_burdened_cost_tbl(kk),
7884 p_fcst_burd_cost =>p_budget_lines_tbl(kk).burdened_cost,
7885 p_etc_revenue =>p_etc_revenue_tbl(kk),
7886 p_fcst_revenue =>p_budget_lines_tbl(kk).revenue,
7887 px_cached_fcst_qty_tbl =>l_cached_fcst_qty_tbl,
7888 px_cached_fcst_raw_cost_tbl =>l_cached_fcst_raw_cost_tbl,
7889 px_cached_fcst_burd_cost_tbl =>l_cached_fcst_burd_cost_tbl,
7890 px_cached_fcst_revenue_tbl =>l_cached_fcst_revenue_tbl,
7891 px_cached_etc_qty_tbl =>l_cached_etc_qty_tbl,
7892 px_cached_etc_raw_cost_tbl =>l_cached_etc_raw_cost_tbl,
7893 px_cached_etc_burd_cost_tbl =>l_cached_etc_burd_cost_tbl,
7894 px_cached_etc_revenue_tbl =>l_cached_etc_revenue_tbl,
7895 x_total_quantity =>x_total_qty_tbl(kk),
7896 x_total_raw_cost =>x_total_raw_cost_tbl(kk),
7897 x_total_burd_cost =>x_total_burdened_cost_tbl(kk),
7898 x_total_revenue =>x_total_revenue_tbl(kk),
7899 x_return_status =>x_return_status,
7900 x_msg_count =>x_msg_count,
7901 x_msg_data =>x_msg_data );
7902
7903 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7904 IF l_debug_mode = 'Y' THEN
7905 pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7906 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7907 END IF;
7908 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7909 END IF;
7910
7911 END IF;
7912
7913 END LOOP;--FOR kk IN 1..p_budget_lines_tbl.COUNT LOOP
7914 --log1('----- STAGE X9-------');
7915 END IF; --p_context
7916
7917
7918 IF l_debug_mode = 'Y' THEN
7919 pa_debug.g_err_stage := 'Leaving pa_fp_webadi_pkg.prepare_pbl_input';
7920 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
7921 END IF;
7922
7923 IF l_debug_mode = 'Y' THEN
7924 pa_debug.reset_curr_function;
7925 END IF;
7926
7927 EXCEPTION
7928 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
7929 l_msg_count := FND_MSG_PUB.count_msg;
7930 IF l_msg_count = 1 and x_msg_data IS NULL THEN
7931 PA_INTERFACE_UTILS_PUB.get_messages
7932 (p_encoded => FND_API.G_TRUE
7933 ,p_msg_index => 1
7934 ,p_msg_count => l_msg_count
7935 ,p_msg_data => l_msg_data
7936 ,p_data => l_data
7937 ,p_msg_index_out => l_msg_index_out);
7938 x_msg_data := l_data;
7939 x_msg_count := l_msg_count;
7940 ELSE
7941 x_msg_count := l_msg_count;
7942 END IF;
7943 x_return_status := FND_API.G_RET_STS_ERROR;
7944
7945 IF l_debug_mode = 'Y' THEN
7946 pa_debug.reset_curr_function;
7947 END IF;
7948 RETURN;
7949
7950 WHEN OTHERS THEN
7951 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7952 x_msg_count := 1;
7953 x_msg_data := SQLERRM;
7954
7955 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
7956 ,p_procedure_name => 'prepare_pbl_input');
7957 IF l_debug_mode = 'Y' THEN
7958 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
7959 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7960 END IF;
7961
7962 IF l_debug_mode = 'Y' THEN
7963 pa_debug.reset_curr_function;
7964 END IF;
7965 RAISE;
7966
7967 END prepare_pbl_input;
7968
7969 PROCEDURE process_budget_lines
7970 ( p_context IN VARCHAR2,
7971 p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE,
7972 p_version_info_rec IN pa_fp_gen_amount_utils.fp_cols,
7973 p_task_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
7974 p_rlm_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
7975 p_ra_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
7976 p_spread_curve_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
7977 p_mfc_cost_type_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
7978 p_etc_method_code_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
7979 p_sp_fixed_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
7980 p_res_class_code_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
7981 p_rate_based_flag_tbl IN SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type(),
7982 p_rbs_elem_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
7983 p_txn_currency_code_tbl IN SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type(),
7984 p_planning_start_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
7985 p_planning_end_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
7986 p_total_qty_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
7987 p_total_raw_cost_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
7988 p_total_burdened_cost_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
7989 p_total_revenue_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
7990 p_raw_cost_rate_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
7991 p_burdened_cost_rate_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
7992 p_bill_rate_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
7993 p_line_start_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
7994 p_line_end_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
7995 p_proj_cost_rate_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
7996 p_proj_cost_rate_date_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
7997 p_proj_cost_rate_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
7998 p_proj_cost_rate_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
7999 p_proj_rev_rate_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8000 p_proj_rev_rate_date_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8001 p_proj_rev_rate_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8002 p_proj_rev_rate_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
8003 p_pfunc_cost_rate_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8004 p_pfunc_cost_rate_date_typ_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8005 p_pfunc_cost_rate_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8006 p_pfunc_cost_rate_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
8007 p_pfunc_rev_rate_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8008 p_pfunc_rev_rate_date_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8009 p_pfunc_rev_rate_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8010 p_pfunc_rev_rate_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
8011 p_change_reason_code_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8012 p_description_tbl IN SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type(),
8013 p_delete_flag_tbl IN SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type(),
8014 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
8015 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
8016 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8017 )
8018
8019 IS
8020 -- variables used for debugging
8021 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.process_budget_lines';
8022 l_debug_mode VARCHAR2(1) := 'N';
8023 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
8024 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
8025
8026 l_return_status VARCHAR2(1);
8027 l_msg_count NUMBER;
8028 l_msg_data VARCHAR2(2000);
8029 l_data VARCHAR2(2000);
8030 l_msg_index_out NUMBER;
8031
8032 -- variables used to copy the inputs and to be used inside the api
8033 l_task_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8034 l_rlm_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8035 l_ra_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8036 l_spread_curve_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8037 l_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8038 l_etc_method_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8039 l_sp_fixed_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8040 l_res_class_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8041 l_rate_based_flag_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8042 l_rbs_elem_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8043 l_txn_currency_code_tbl SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8044 l_planning_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8045 l_planning_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8046 l_total_qty_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8047 l_total_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8048 l_total_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8049 l_total_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8050 l_raw_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8051 l_burdened_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8052 l_bill_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8053 l_line_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8054 l_line_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8055 l_proj_cost_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8056 l_proj_cost_rate_date_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8057 l_proj_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8058 l_proj_cost_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8059 l_proj_rev_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8060 l_proj_rev_rate_date_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8061 l_proj_rev_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8062 l_proj_rev_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8063 l_pfunc_cost_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8064 l_pfunc_cost_rate_date_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8065 l_pfunc_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8066 l_pfunc_cost_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8067 l_pfunc_rev_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8068 l_pfunc_rev_rate_date_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8069 l_pfunc_rev_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8070 l_pfunc_rev_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8071 l_change_reason_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8072 l_description_tbl SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8073
8074
8075 -- variables to copy the records with delete_flag = Y
8076 l_df_task_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8077 l_df_rlm_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8078 l_df_ra_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8079 l_df_spread_curve_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8080 l_df_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8081 l_df_etc_method_code SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8082 l_df_sp_fixed_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8083 l_df_res_class_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8084 l_df_rate_based_flag_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8085 l_df_rbs_elem_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8086 l_df_txn_currency_code_tbl SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8087 l_df_planning_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8088 l_df_planning_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8089 l_df_total_qty_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8090 l_df_total_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8091 l_df_total_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8092 l_df_total_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8093 l_df_raw_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8094 l_df_burdened_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8095 l_df_bill_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8096 l_df_line_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8097 l_df_line_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8098 l_df_pj_cost_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8099 l_df_pj_cost_rate_date_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8100 l_df_pj_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8101 l_df_pj_cost_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8102 l_df_pj_rev_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8103 l_df_pj_rev_rate_date_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8104 l_df_pj_rev_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8105 l_df_pj_rev_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8106 l_df_pf_cost_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8107 l_df_pf_cost_rate_date_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8108 l_df_pf_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8109 l_df_pf_cost_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8110 l_df_pf_rev_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8111 l_df_pf_rev_rate_date_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8112 l_df_pf_rev_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8113 l_df_pf_rev_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8114 l_df_change_reason_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8115 l_df_description_tbl SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8116
8117 l_total_rec_passed INTEGER := 0;
8118 l_curr_ra_id_seq NUMBER;
8119
8120 -- counter variables
8121 i INTEGER;
8122
8123 -- variables used to call add_planning_transactions
8124 l_new_elem_ver_id pa_proj_element_versions.element_version_id%TYPE;
8125 l_new_elem_ver_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8126 l_new_rlm_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8127 l_new_planning_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8128 l_new_planning_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8129
8130 -- variables used to insert into pa_fp_rollup_tmp
8131 -- with delete flag = Y
8132 l_bl_del_flag_ra_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8133 l_bl_del_flag_st_dt_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8134 l_bl_del_flag_en_dt_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8135 l_bl_del_flag_txn_curr_tbl SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8136 l_bl_del_flag_txn_rc_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8137 l_bl_del_flag_txn_bc_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8138 l_bl_del_flag_txn_rev_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8139 l_bl_del_flag_pf_curr_tbl SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8140 l_bl_del_flag_pf_cr_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8141 l_bl_del_flag_pf_cr_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8142 l_bl_del_flag_pf_cexc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8143 l_bl_del_flag_pf_cr_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8144 l_bl_del_flag_pf_rr_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8145 l_bl_del_flag_pf_rr_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8146 l_bl_del_flag_pf_rexc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8147 l_bl_del_flag_pf_rr_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8148 l_bl_del_flag_pj_curr_tbl SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8149 l_bl_del_flag_pj_cr_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8150 l_bl_del_flag_pj_cr_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8151 l_bl_del_flag_pj_cexc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8152 l_bl_del_flag_pj_cr_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8153 l_bl_del_flag_pj_rr_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8154 l_bl_del_flag_pj_rr_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8155 l_bl_del_flag_pj_rexc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8156 l_bl_del_flag_pj_rr_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8157 l_bl_del_flag_bl_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8158 l_bl_del_flag_per_name_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8159 l_bl_del_flag_pj_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8160 l_bl_del_flag_pj_burd_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8161 l_bl_del_flag_pj_rev_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8162 l_bl_del_flag_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8163 l_bl_del_flag_burd_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8164 l_bl_del_flag_rev_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8165 l_bl_del_flag_qty_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8166 l_bl_del_flag_c_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8167 l_bl_del_flag_b_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8168 l_bl_del_flag_r_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8169 l_bl_del_flag_o_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8170 l_bl_del_fg_pc_cnv_rej_cd_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8171 l_bl_del_fg_pf_cnv_rej_cd_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8172
8173
8174 -- for budget line context to spread the amounts
8175 l_new_ra_id pa_resource_assignments.resource_assignment_id%TYPE;
8176 l_calc_calling_context VARCHAR2(30);
8177
8178 -- variables used to call update_reporting_lines
8179 l_pji_res_ass_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8180 l_pji_period_name_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8181 l_pji_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8182 l_pji_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8183 l_pji_txn_curr_code_tbl SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8184 l_pji_txn_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8185 l_pji_txn_burd_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8186 l_pji_txn_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8187 l_pji_project_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8188 l_pji_project_burd_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8189 l_pji_project_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8190 l_pji_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8191 l_pji_burd_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8192 l_pji_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8193 l_pji_cost_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8194 l_pji_revenue_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8195 l_pji_burden_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8196 l_pji_other_rej_code SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8197 l_pji_pc_cur_conv_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8198 l_pji_pf_cur_conv_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8199 l_pji_quantity_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8200
8201 --This table will hold the distinct NEW resource assignments passed to this API for processing (excluding delete flag = Y recs)
8202 --Index will be in the following format : 'T' || <Task Id> || 'R' || <Rlm Id>
8203 l_distinct_new_ra_tbl varchar_32_indexed_num_tbl_typ;
8204 l_distinct_new_ra_index VARCHAR2(32);
8205
8206
8207 l_new_res_asg_rbs_elem_id pa_resource_assignments.rbs_element_id%TYPE;
8208 l_new_res_asg_res_class_code pa_resource_assignments.resource_class_code%TYPE;
8209 l_new_res_asg_rate_based_flag pa_resource_assignments.rate_based_flag%TYPE;
8210
8211 l_g_miss_char CONSTANT VARCHAR(1) := FND_API.G_MISS_CHAR;
8212 l_g_miss_num CONSTANT NUMBER := FND_API.G_MISS_NUM;
8213 l_g_miss_date CONSTANT DATE := FND_API.G_MISS_DATE;
8214
8215 l_debug_st_dt DATE;
8216 l_debug_en_dt DATE;
8217 l_debug_st_dt_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8218 l_debug_en_dt_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8219
8220 l_debug_quantity NUMBER;
8221 l_debug_quantity_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8222 l_debug_raw_cost NUMBER;
8223 l_debug_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8224 l_debug_burdened_cost NUMBER;
8225 l_debug_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8226 l_debug_revenue NUMBER;
8227 l_debug_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8228 l_temp VARCHAR2(100);
8229 l_upd_init_quantity_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8230 l_upd_init_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8231 l_upd_init_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8232 l_upd_init_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8233 l_upd_proj_init_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8234 l_upd_proj_init_burd_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8235 l_upd_proj_init_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8236 l_upd_txn_init_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8237 l_upd_txn_init_burd_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8238 l_upd_txn_init_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8239 l_upd_budget_line_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8240 l_upd_delete_flag_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8241 l_upd_pj_cost_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8242 l_upd_pj_cost_exc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8243 l_upd_pj_cost_rate_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8244 l_upd_pj_cost_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8245 l_upd_pj_rev_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8246 l_upd_pj_rev_exc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8247 l_upd_pj_rev_rate_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8248 l_upd_pj_rev_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8249 l_upd_pf_cost_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8250 l_upd_pf_cost_exc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8251 l_upd_pf_cost_rate_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8252 l_upd_pf_cost_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8253 l_upd_pf_rev_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8254 l_upd_pf_rev_exc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8255 l_upd_pf_rev_rate_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8256 l_upd_pf_rev_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8257 --Bug 4424457
8258 l_bl_count_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8259 l_bls_proccessed_flag VARCHAR2(1);
8260 l_error_msg_code VARCHAR2(2000);
8261 l_dest_ver_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8262 l_chg_reason_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8263 l_desc_tbl SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8264
8265 --bug 5962744
8266 l_extra_bl_flag_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8267 l_ex_chg_rsn_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8268 l_ex_desc_tbl SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8269 l_ra_exists VARCHAR2(1);
8270 l_extra_bls_exists VARCHAR2(1);
8271 j INTEGER;
8272 BEGIN
8273 --log1('PBL Begin '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8274 fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
8275
8276 x_return_status := FND_API.G_RET_STS_SUCCESS;
8277 x_msg_count := 0;
8278 --log1('----- STAGE PBL1.0-------');
8279
8280 IF l_debug_mode = 'Y' THEN
8281 pa_debug.Set_Curr_Function
8282 (p_function => l_module_name,
8283 p_debug_mode => l_debug_mode);
8284 END IF;
8285
8286 IF l_debug_mode = 'Y' THEN
8287 pa_debug.g_err_stage := 'Entering into process_budget_lines';
8288 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8289 pa_debug.g_err_stage := 'Validating input parameters';
8290 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8291 END IF;
8292
8293 -- validate the mandatory input parameters
8294
8295 -- valid p_context are WEBADI_PERIODIC and WEBADI_NON_PERIODIC
8296 IF p_context IS NULL THEN
8297 IF l_debug_mode = 'Y' THEN
8298 pa_debug.g_err_stage := 'p_context is passed as null';
8299 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8300 END IF;
8301 pa_utils.add_message(p_app_short_name => 'PA',
8302 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
8303 p_token1 => 'PROCEDURENAME',
8304 p_value1 => l_module_name);
8305
8306 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8307 END IF;
8308
8309 -- budget_version_id is not passed
8310 IF p_budget_version_id IS NULL THEN
8311 IF l_debug_mode = 'Y' THEN
8312 pa_debug.g_err_stage := 'p_budget_version_id is passed as null';
8313 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8314 END IF;
8315 pa_utils.add_message(p_app_short_name => 'PA',
8316 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
8317 p_token1 => 'PROCEDURENAME',
8318 p_value1 => l_module_name);
8319
8320 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8321 END IF;
8322 -- version_info_rec type is null
8323 IF p_version_info_rec.x_project_id IS NULL THEN
8324 IF l_debug_mode = 'Y' THEN
8325 pa_debug.g_err_stage := 'p_version_info_rec is passed as null';
8326 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8327 END IF;
8328 pa_utils.add_message(p_app_short_name => 'PA',
8329 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
8330 p_token1 => 'PROCEDURENAME',
8331 p_value1 => l_module_name);
8332
8333 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8334 END IF;
8335
8336 -- if no data is present in the task id table
8337 IF NOT p_task_id_tbl.EXISTS(1) THEN
8338 IF l_debug_mode = 'Y' THEN
8339 pa_debug.g_err_stage := 'task id table is passed as null';
8340 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8341 END IF;
8342 RETURN;
8343 END IF;
8344
8345 --log1('----- STAGE PBL1.1-------');
8346 /*FOR zz IN 1..p_ra_id_tbl.COUNT LOOP
8347
8348 log1('p_ra_id_tbl ('||zz||') is '||p_ra_id_tbl(zz));
8349 log1('p_planning_start_date_tbl ('||zz||') is '||p_planning_start_date_tbl(zz));
8350 log1('p_planning_end_date_tbl ('||zz||') is '||p_planning_end_date_tbl(zz));
8351
8352 end loop;*/
8353
8354 -- the length of all the input tables should be same
8355 IF p_task_id_tbl.COUNT <> p_rlm_id_tbl.COUNT OR
8356 p_task_id_tbl.COUNT <> p_ra_id_tbl.COUNT OR
8357 p_task_id_tbl.COUNT <> p_txn_currency_code_tbl.COUNT OR
8358 p_task_id_tbl.COUNT <> p_planning_start_date_tbl.COUNT OR
8359 p_task_id_tbl.COUNT <> p_planning_end_date_tbl.COUNT OR
8360 p_task_id_tbl.COUNT <> p_line_start_date_tbl.COUNT OR
8361 p_task_id_tbl.COUNT <> p_line_end_date_tbl.COUNT OR
8362 p_task_id_tbl.COUNT <> p_spread_curve_id_tbl.COUNT OR
8363 p_task_id_tbl.COUNT <> p_mfc_cost_type_id_tbl.COUNT OR
8364 p_task_id_tbl.COUNT <> p_etc_method_code_tbl.COUNT OR
8365 p_task_id_tbl.COUNT <> p_sp_fixed_date_tbl.COUNT OR
8366 p_task_id_tbl.COUNT <> p_res_class_code_tbl.COUNT OR
8367 p_task_id_tbl.COUNT <> p_rate_based_flag_tbl.COUNT OR
8368 p_task_id_tbl.COUNT <> p_rbs_elem_id_tbl.COUNT OR
8369 p_task_id_tbl.COUNT <> p_total_qty_tbl.COUNT OR
8370 p_task_id_tbl.COUNT <> p_total_raw_cost_tbl.COUNT OR
8371 p_task_id_tbl.COUNT <> p_total_burdened_cost_tbl.COUNT OR
8372 p_task_id_tbl.COUNT <> p_total_revenue_tbl.COUNT OR
8373 p_task_id_tbl.COUNT <> p_raw_cost_rate_tbl.COUNT OR
8374 p_task_id_tbl.COUNT <> p_burdened_cost_rate_tbl.COUNT OR
8375 p_task_id_tbl.COUNT <> p_bill_rate_tbl.COUNT OR
8376 p_task_id_tbl.COUNT <> p_line_start_date_tbl.COUNT OR
8377 p_task_id_tbl.COUNT <> p_line_end_date_tbl.COUNT OR
8378 p_task_id_tbl.COUNT <> p_proj_cost_rate_type_tbl.COUNT OR
8379 p_task_id_tbl.COUNT <> p_proj_cost_rate_date_type_tbl.COUNT OR
8380 p_task_id_tbl.COUNT <> p_proj_cost_rate_tbl.COUNT OR
8381 p_task_id_tbl.COUNT <> p_proj_cost_rate_date_tbl.COUNT OR
8382 p_task_id_tbl.COUNT <> p_proj_rev_rate_type_tbl.COUNT OR
8383 p_task_id_tbl.COUNT <> p_proj_rev_rate_date_type_tbl.COUNT OR
8384 p_task_id_tbl.COUNT <> p_proj_rev_rate_tbl.COUNT OR
8385 p_task_id_tbl.COUNT <> p_proj_rev_rate_date_tbl.COUNT OR
8386 p_task_id_tbl.COUNT <> p_pfunc_cost_rate_type_tbl.COUNT OR
8387 p_task_id_tbl.COUNT <> p_pfunc_cost_rate_date_typ_tbl.COUNT OR
8388 p_task_id_tbl.COUNT <> p_pfunc_cost_rate_tbl.COUNT OR
8389 p_task_id_tbl.COUNT <> p_pfunc_cost_rate_date_tbl.COUNT OR
8390 p_task_id_tbl.COUNT <> p_pfunc_rev_rate_type_tbl.COUNT OR
8391 p_task_id_tbl.COUNT <> p_pfunc_rev_rate_date_type_tbl.COUNT OR
8392 p_task_id_tbl.COUNT <> p_pfunc_rev_rate_tbl.COUNT OR
8393 p_task_id_tbl.COUNT <> p_pfunc_rev_rate_date_tbl.COUNT OR
8394 p_task_id_tbl.COUNT <> p_change_reason_code_tbl.COUNT OR
8395 p_task_id_tbl.COUNT <> p_description_tbl.COUNT OR
8396 p_task_id_tbl.COUNT <> p_delete_flag_tbl.COUNT THEN
8397
8398 --log1(' 1 '||p_rlm_id_tbl.COUNT);
8399 --log1(' 2 '||p_ra_id_tbl.COUNT);
8400 --log1(' 3 '||p_txn_currency_code_tbl.COUNT);
8401 --log1(' 4 '||p_planning_start_date_tbl.COUNT);
8402 --log1(' 5 '||p_planning_end_date_tbl.COUNT);
8403 --log1(' 6 '||p_line_start_date_tbl.COUNT);
8404 --log1(' 7 '||p_line_end_date_tbl.COUNT);
8405 --log1(' 8 '||p_spread_curve_id_tbl.COUNT);
8406 --log1(' 9 '||p_mfc_cost_type_id_tbl.COUNT);
8407 --log1(' 10 '||p_etc_method_code_tbl.COUNT);
8408 --log1(' 11 '||p_sp_fixed_date_tbl.COUNT);
8409 --log1(' 12 '||p_total_qty_tbl.COUNT);
8410 --log1(' 13 '||p_total_raw_cost_tbl.COUNT);
8411 --log1(' 14 '||p_total_burdened_cost_tbl.COUNT);
8412 --log1(' 15 '||p_total_revenue_tbl.COUNT);
8413 --log1(' 16 '||p_raw_cost_rate_tbl.COUNT);
8414 --log1(' 17 '||p_burdened_cost_rate_tbl.COUNT);
8415 --log1(' 18 '||p_bill_rate_tbl.COUNT);
8416 --log1(' 19 '||p_line_start_date_tbl.COUNT);
8417 --log1(' 20 '||p_line_end_date_tbl.COUNT);
8418 --log1(' 21 '||p_proj_cost_rate_type_tbl.COUNT);
8419 --log1(' 22 '||p_proj_cost_rate_date_type_tbl.COUNT);
8420 --log1(' 23 '||p_proj_cost_rate_tbl.COUNT);
8421 --log1(' 24 '||p_proj_cost_rate_date_tbl.COUNT);
8422 --log1(' 25 '||p_proj_rev_rate_type_tbl.COUNT);
8423 --log1(' 26 '||p_proj_rev_rate_date_type_tbl.COUNT);
8424 --log1(' 27 '||p_proj_rev_rate_tbl.COUNT);
8425 --log1(' 28 '||p_proj_rev_rate_date_tbl.COUNT);
8426 --log1(' 29 '||p_pfunc_cost_rate_type_tbl.COUNT);
8427 --log1(' 30 '||p_pfunc_cost_rate_date_typ_tbl.COUNT);
8428 --log1(' 31 '||p_pfunc_cost_rate_tbl.COUNT);
8429 --log1(' 32 '||p_pfunc_cost_rate_date_tbl.COUNT);
8430 --log1(' 33 '||p_pfunc_rev_rate_type_tbl.COUNT);
8431 --log1(' 34 '||p_pfunc_rev_rate_date_type_tbl.COUNT);
8432 --log1(' 35 '||p_pfunc_rev_rate_tbl.COUNT);
8433 --log1(' 36 '||p_pfunc_rev_rate_date_tbl.COUNT);
8434 --log1(' 37 '||p_change_reason_code_tbl.COUNT);
8435 --log1(' 38 '||p_description_tbl.COUNT);
8436 --log1(' 39 '||p_delete_flag_tbl.COUNT );
8437
8438 IF l_debug_mode = 'Y' THEN
8439 pa_debug.g_err_stage := 'Required input tables are not equal in length';
8440 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8441 END IF;
8442 pa_utils.add_message(p_app_short_name => 'PA',
8443 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
8444 p_token1 => 'PROCEDURENAME',
8445 p_value1 => l_module_name);
8446
8447 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8448 END IF;
8449 --log1('----- STAGE PBL1.2-------');
8450
8451 -- input parameters validation done
8452
8453 -- checking for the context and if its non periodic context, then
8454 -- filtering out the records with delete flag <> Y
8455 IF l_debug_mode = 'Y' THEN
8456 pa_debug.g_err_stage := 'p_context is: ' || p_context;
8457 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8458 END IF;
8459
8460 --log1('PBL 1 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8461 IF p_context = 'WEBADI_NON_PERIODIC' THEN
8462 FOR i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST LOOP
8463 IF Nvl(p_delete_flag_tbl(i), 'N') <> 'Y' THEN
8464 l_ra_id_tbl.extend(1);
8465 l_ra_id_tbl(l_ra_id_tbl.COUNT) := p_ra_id_tbl(i);
8466 l_task_id_tbl.EXTEND(1);
8467 l_task_id_tbl(l_task_id_tbl.COUNT) := p_task_id_tbl(i);
8468 l_rlm_id_tbl.EXTEND(1);
8469 l_rlm_id_tbl(l_rlm_id_tbl.COUNT) := p_rlm_id_tbl(i);
8470 l_spread_curve_id_tbl.EXTEND(1);
8471 l_spread_curve_id_tbl(l_spread_curve_id_tbl.COUNT) := p_spread_curve_id_tbl(i);
8472 l_mfc_cost_type_id_tbl.EXTEND(1);
8473 l_mfc_cost_type_id_tbl(l_mfc_cost_type_id_tbl.COUNT) := p_mfc_cost_type_id_tbl(i);
8474 l_etc_method_code_tbl.EXTEND(1);
8475 l_etc_method_code_tbl(l_etc_method_code_tbl.COUNT) := p_etc_method_code_tbl(i);
8476 l_sp_fixed_date_tbl.EXTEND(1);
8477 l_sp_fixed_date_tbl(l_sp_fixed_date_tbl.COUNT) := p_sp_fixed_date_tbl(i);
8478 l_res_class_code_tbl.EXTEND(1);
8479 l_res_class_code_tbl(l_res_class_code_tbl.COUNT) := p_res_class_code_tbl(i);
8480 l_rate_based_flag_tbl.EXTEND(1);
8481 l_rate_based_flag_tbl(l_rate_based_flag_tbl.COUNT) := p_rate_based_flag_tbl(i);
8482 l_rbs_elem_id_tbl.EXTEND(1);
8483 l_rbs_elem_id_tbl(l_rbs_elem_id_tbl.COUNT) := p_rbs_elem_id_tbl(i);
8484 l_txn_currency_code_tbl.EXTEND(1);
8485 l_txn_currency_code_tbl(l_txn_currency_code_tbl.COUNT) := p_txn_currency_code_tbl(i);
8486 l_planning_start_date_tbl.EXTEND(1);
8487 l_planning_start_date_tbl(l_planning_start_date_tbl.COUNT) := p_planning_start_date_tbl(i);
8488 l_planning_end_date_tbl.EXTEND(1);
8489 l_planning_end_date_tbl(l_planning_end_date_tbl.COUNT) := p_planning_end_date_tbl(i);
8490 l_total_qty_tbl.EXTEND(1);
8491 l_total_qty_tbl(l_total_qty_tbl.COUNT) := p_total_qty_tbl(i);
8492 l_total_raw_cost_tbl.EXTEND(1);
8493 l_total_raw_cost_tbl(l_total_raw_cost_tbl.COUNT) := p_total_raw_cost_tbl(i);
8494 l_total_burdened_cost_tbl.EXTEND(1);
8495 l_total_burdened_cost_tbl(l_total_burdened_cost_tbl.COUNT) := p_total_burdened_cost_tbl(i);
8496 l_total_revenue_tbl.EXTEND(1);
8497 l_total_revenue_tbl(l_total_revenue_tbl.COUNT) := p_total_revenue_tbl(i);
8498 l_raw_cost_rate_tbl.EXTEND(1);
8499 l_raw_cost_rate_tbl(l_raw_cost_rate_tbl.COUNT) := p_raw_cost_rate_tbl(i);
8500 l_burdened_cost_rate_tbl.EXTEND(1);
8501 l_burdened_cost_rate_tbl(l_burdened_cost_rate_tbl.COUNT) := p_burdened_cost_rate_tbl(i);
8502 l_bill_rate_tbl.EXTEND(1);
8503 l_bill_rate_tbl(l_bill_rate_tbl.COUNT) := p_bill_rate_tbl(i);
8504 l_proj_cost_rate_type_tbl.EXTEND(1);
8505 l_proj_cost_rate_type_tbl(l_proj_cost_rate_type_tbl.COUNT) := p_proj_cost_rate_type_tbl(i);
8506 l_proj_cost_rate_date_type_tbl.EXTEND(1);
8507 l_proj_cost_rate_date_type_tbl(l_proj_cost_rate_date_type_tbl.COUNT) := p_proj_cost_rate_date_type_tbl(i);
8508 l_proj_cost_rate_tbl.EXTEND(1);
8509 l_proj_cost_rate_tbl(l_proj_cost_rate_tbl.COUNT) := p_proj_cost_rate_tbl(i);
8510 l_proj_cost_rate_date_tbl.EXTEND(1);
8511 l_proj_cost_rate_date_tbl(l_proj_cost_rate_date_tbl.COUNT) := p_proj_cost_rate_date_tbl(i);
8512 l_proj_rev_rate_type_tbl.EXTEND(1);
8513 l_proj_rev_rate_type_tbl(l_proj_rev_rate_type_tbl.COUNT) := p_proj_rev_rate_type_tbl(i);
8514 l_proj_rev_rate_date_type_tbl.EXTEND(1);
8515 l_proj_rev_rate_date_type_tbl(l_proj_rev_rate_date_type_tbl.COUNT) := p_proj_rev_rate_date_type_tbl(i);
8516 l_proj_rev_rate_tbl.EXTEND(1);
8517 l_proj_rev_rate_tbl(l_proj_rev_rate_tbl.COUNT) := p_proj_rev_rate_tbl(i);
8518 l_proj_rev_rate_date_tbl.EXTEND(1);
8519 l_proj_rev_rate_date_tbl(l_proj_rev_rate_date_tbl.COUNT) := p_proj_rev_rate_date_tbl(i);
8520 l_pfunc_cost_rate_type_tbl.EXTEND(1);
8521 l_pfunc_cost_rate_type_tbl(l_pfunc_cost_rate_type_tbl.COUNT) := p_pfunc_cost_rate_type_tbl(i);
8522 l_pfunc_cost_rate_date_typ_tbl.EXTEND(1);
8523 l_pfunc_cost_rate_date_typ_tbl(l_pfunc_cost_rate_date_typ_tbl.COUNT) := p_pfunc_cost_rate_date_typ_tbl(i);
8524 l_pfunc_cost_rate_tbl.EXTEND(1);
8525 l_pfunc_cost_rate_tbl(l_pfunc_cost_rate_tbl.COUNT) := p_pfunc_cost_rate_tbl(i);
8526 l_pfunc_cost_rate_date_tbl.EXTEND(1);
8527 l_pfunc_cost_rate_date_tbl(l_pfunc_cost_rate_date_tbl.COUNT) := p_pfunc_cost_rate_date_tbl(i);
8528 l_pfunc_rev_rate_type_tbl.EXTEND(1);
8529 l_pfunc_rev_rate_type_tbl(l_pfunc_rev_rate_type_tbl.COUNT) := p_pfunc_rev_rate_type_tbl(i);
8530 l_pfunc_rev_rate_date_type_tbl.EXTEND(1);
8531 l_pfunc_rev_rate_date_type_tbl(l_pfunc_rev_rate_date_type_tbl.COUNT) := p_pfunc_rev_rate_date_type_tbl(i);
8532 l_pfunc_rev_rate_tbl.EXTEND(1);
8533 l_pfunc_rev_rate_tbl(l_pfunc_rev_rate_tbl.COUNT) := p_pfunc_rev_rate_tbl(i);
8534 l_pfunc_rev_rate_date_tbl.EXTEND(1);
8535 l_pfunc_rev_rate_date_tbl(l_pfunc_rev_rate_date_tbl.COUNT) := p_pfunc_rev_rate_date_tbl(i);
8536 l_change_reason_code_tbl.EXTEND(1);
8537 l_change_reason_code_tbl(l_change_reason_code_tbl.COUNT) := p_change_reason_code_tbl(i);
8538 l_description_tbl.EXTEND(1);
8539 l_description_tbl(l_description_tbl.COUNT) := p_description_tbl(i);
8540
8541 ELSIF Nvl(p_delete_flag_tbl(i), 'N') = 'Y' THEN
8542 -- if the delete flag is Y then collecting them separately
8543 l_df_ra_id_tbl.EXTEND(1);
8544 l_df_ra_id_tbl(l_df_ra_id_tbl.COUNT) := p_ra_id_tbl(i);
8545 l_df_task_id_tbl.EXTEND(1);
8546 l_df_task_id_tbl(l_df_task_id_tbl.COUNT) := p_task_id_tbl(i);
8547 l_df_rlm_id_tbl.EXTEND(1);
8548 l_df_rlm_id_tbl(l_df_rlm_id_tbl.COUNT) := p_rlm_id_tbl(i);
8549 l_df_spread_curve_id_tbl.EXTEND(1);
8550 l_df_spread_curve_id_tbl(l_df_spread_curve_id_tbl.COUNT) := p_spread_curve_id_tbl(i);
8551 l_df_mfc_cost_type_id_tbl.EXTEND(1);
8552 l_df_mfc_cost_type_id_tbl(l_df_mfc_cost_type_id_tbl.COUNT) := p_mfc_cost_type_id_tbl(i);
8553 l_df_etc_method_code.EXTEND(1);
8554 l_df_etc_method_code(l_df_etc_method_code.COUNT) := p_etc_method_code_tbl(i);
8555 l_df_sp_fixed_date_tbl.EXTEND(1);
8556 l_df_sp_fixed_date_tbl(l_df_sp_fixed_date_tbl.COUNT) := p_sp_fixed_date_tbl(i);
8557 l_df_res_class_code_tbl.EXTEND(1);
8558 l_df_res_class_code_tbl(l_df_res_class_code_tbl.COUNT) := p_res_class_code_tbl(i);
8559 l_df_rate_based_flag_tbl.EXTEND(1);
8560 l_df_rate_based_flag_tbl(l_df_rate_based_flag_tbl.COUNT) := p_rate_based_flag_tbl(i);
8561 l_df_rbs_elem_id_tbl.EXTEND(1);
8562 l_df_rbs_elem_id_tbl(l_df_rbs_elem_id_tbl.COUNT) := p_rbs_elem_id_tbl(i);
8563 l_df_txn_currency_code_tbl.EXTEND(1);
8564 l_df_txn_currency_code_tbl(l_df_txn_currency_code_tbl.COUNT) := p_txn_currency_code_tbl(i);
8565 l_df_planning_start_date_tbl.EXTEND(1);
8566 l_df_planning_start_date_tbl(l_df_planning_start_date_tbl.COUNT) := p_planning_start_date_tbl(i);
8567 l_df_planning_end_date_tbl.EXTEND(1);
8568 l_df_planning_end_date_tbl(l_df_planning_end_date_tbl.COUNT) := p_planning_end_date_tbl(i);
8569 l_df_total_qty_tbl.EXTEND(1);
8570 l_df_total_qty_tbl(l_df_total_qty_tbl.COUNT) := p_total_qty_tbl(i);
8571 l_df_total_raw_cost_tbl.EXTEND(1);
8572 l_df_total_raw_cost_tbl(l_df_total_raw_cost_tbl.COUNT) := p_total_raw_cost_tbl(i);
8573 l_df_total_burdened_cost_tbl.EXTEND(1);
8574 l_df_total_burdened_cost_tbl(l_df_total_burdened_cost_tbl.COUNT) := p_total_burdened_cost_tbl(i);
8575 l_df_total_revenue_tbl.EXTEND(1);
8576 l_df_total_revenue_tbl(l_df_total_revenue_tbl.COUNT) := p_total_revenue_tbl(i);
8577 l_df_raw_cost_rate_tbl.EXTEND(1);
8578 l_df_raw_cost_rate_tbl(l_df_raw_cost_rate_tbl.COUNT) := p_raw_cost_rate_tbl(i);
8579 l_df_burdened_cost_rate_tbl.EXTEND(1);
8580 l_df_burdened_cost_rate_tbl(l_df_burdened_cost_rate_tbl.COUNT) := p_burdened_cost_rate_tbl(i);
8581 l_df_bill_rate_tbl.EXTEND(1);
8582 l_df_bill_rate_tbl(l_df_bill_rate_tbl.COUNT) := p_bill_rate_tbl(i);
8583 l_df_line_start_date_tbl.EXTEND(1);
8584 l_df_line_start_date_tbl(l_df_line_start_date_tbl.COUNT) := p_line_start_date_tbl(i);
8585 l_df_line_end_date_tbl.EXTEND(1);
8586 l_df_line_end_date_tbl(l_df_line_end_date_tbl.COUNT) := p_line_end_date_tbl(i);
8587 l_df_pj_cost_rate_typ_tbl.EXTEND(1);
8588 l_df_pj_cost_rate_typ_tbl(l_df_pj_cost_rate_typ_tbl.COUNT) := p_proj_cost_rate_type_tbl(i);
8589 l_df_pj_cost_rate_date_typ_tbl.EXTEND(1);
8590 l_df_pj_cost_rate_date_typ_tbl(l_df_pj_cost_rate_date_typ_tbl.COUNT) := p_proj_cost_rate_date_type_tbl(i);
8591 l_df_pj_cost_rate_tbl.EXTEND(1);
8592 l_df_pj_cost_rate_tbl(l_df_pj_cost_rate_tbl.COUNT) := p_proj_cost_rate_tbl(i);
8593 l_df_pj_cost_rate_date_tbl.EXTEND(1);
8594 l_df_pj_cost_rate_date_tbl(l_df_pj_cost_rate_date_tbl.COUNT) := p_proj_cost_rate_date_tbl(i);
8595 l_df_pj_rev_rate_typ_tbl.EXTEND(1);
8596 l_df_pj_rev_rate_typ_tbl(l_df_pj_rev_rate_typ_tbl.COUNT) := p_proj_rev_rate_type_tbl(i);
8597 l_df_pj_rev_rate_date_typ_tbl.EXTEND(1);
8598 l_df_pj_rev_rate_date_typ_tbl(l_df_pj_rev_rate_date_typ_tbl.COUNT) := p_proj_rev_rate_date_type_tbl(i);
8599 l_df_pj_rev_rate_tbl.EXTEND(1);
8600 l_df_pj_rev_rate_tbl(l_df_pj_rev_rate_tbl.COUNT) := p_proj_rev_rate_tbl(i);
8601 l_df_pj_rev_rate_date_tbl.EXTEND(1);
8602 l_df_pj_rev_rate_date_tbl(l_df_pj_rev_rate_date_tbl.COUNT) := p_proj_rev_rate_date_tbl(i);
8603 l_df_pf_cost_rate_typ_tbl.EXTEND(1);
8604 l_df_pf_cost_rate_typ_tbl(l_df_pf_cost_rate_typ_tbl.COUNT) := p_pfunc_cost_rate_type_tbl(i);
8605 l_df_pf_cost_rate_date_typ_tbl.EXTEND(1);
8606 l_df_pf_cost_rate_date_typ_tbl(l_df_pf_cost_rate_date_typ_tbl.COUNT) := p_pfunc_cost_rate_date_typ_tbl(i);
8607 l_df_pf_cost_rate_tbl.EXTEND(1);
8608 l_df_pf_cost_rate_tbl(l_df_pf_cost_rate_tbl.COUNT) := p_pfunc_cost_rate_tbl(i);
8609 l_df_pf_cost_rate_date_tbl.EXTEND(1);
8610 l_df_pf_cost_rate_date_tbl(l_df_pf_cost_rate_date_tbl.COUNT) := p_pfunc_cost_rate_date_tbl(i);
8611 l_df_pf_rev_rate_typ_tbl.EXTEND(1);
8612 l_df_pf_rev_rate_typ_tbl(l_df_pf_rev_rate_typ_tbl.COUNT) := p_pfunc_rev_rate_type_tbl(i);
8613 l_df_pf_rev_rate_date_typ_tbl.EXTEND(1);
8614 l_df_pf_rev_rate_date_typ_tbl(l_df_pf_rev_rate_date_typ_tbl.COUNT) := p_pfunc_rev_rate_date_type_tbl(i);
8615 l_df_pf_rev_rate_tbl.EXTEND(1);
8616 l_df_pf_rev_rate_tbl(l_df_pf_rev_rate_tbl.COUNT) := p_pfunc_rev_rate_tbl(i);
8617 l_df_pf_rev_rate_date_tbl.EXTEND(1);
8618 l_df_pf_rev_rate_date_tbl(l_df_pf_rev_rate_date_tbl.COUNT) := p_pfunc_rev_rate_date_tbl(i);
8619 l_df_change_reason_code_tbl.EXTEND(1);
8620 l_df_change_reason_code_tbl(l_df_change_reason_code_tbl.COUNT) := p_change_reason_code_tbl(i);
8621 l_df_description_tbl.EXTEND(1);
8622 l_df_description_tbl(l_df_description_tbl.COUNT) := p_description_tbl(i);
8623 END IF; -- delete_flag
8624 END LOOP;
8625 ELSE -- periodic, considering all the records passed
8626 l_task_id_tbl := p_task_id_tbl;
8627 l_rlm_id_tbl := p_rlm_id_tbl;
8628 l_ra_id_tbl := p_ra_id_tbl;
8629 l_txn_currency_code_tbl := p_txn_currency_code_tbl;
8630 l_planning_start_date_tbl := p_planning_start_date_tbl;
8631 l_planning_end_date_tbl := p_planning_end_date_tbl;
8632 l_spread_curve_id_tbl := p_spread_curve_id_tbl;
8633 l_mfc_cost_type_id_tbl := p_mfc_cost_type_id_tbl;
8634 l_etc_method_code_tbl := p_etc_method_code_tbl;
8635 l_sp_fixed_date_tbl := p_sp_fixed_date_tbl;
8636 l_res_class_code_tbl := p_res_class_code_tbl;
8637 l_rate_based_flag_tbl := p_rate_based_flag_tbl;
8638 l_rbs_elem_id_tbl := p_rbs_elem_id_tbl;
8639 l_total_qty_tbl := p_total_qty_tbl;
8640 l_total_raw_cost_tbl := p_total_raw_cost_tbl;
8641 l_total_burdened_cost_tbl := p_total_burdened_cost_tbl;
8642 l_total_revenue_tbl := p_total_revenue_tbl;
8643 l_raw_cost_rate_tbl := p_raw_cost_rate_tbl;
8644 l_burdened_cost_rate_tbl := p_burdened_cost_rate_tbl;
8645 l_bill_rate_tbl := p_bill_rate_tbl;
8646 l_line_start_date_tbl := p_line_start_date_tbl;
8647 l_line_end_date_tbl := p_line_end_date_tbl;
8648 l_proj_cost_rate_type_tbl := p_proj_cost_rate_type_tbl;
8649 l_proj_cost_rate_date_type_tbl := p_proj_cost_rate_date_type_tbl;
8650 l_proj_cost_rate_tbl := p_proj_cost_rate_tbl;
8651 l_proj_cost_rate_date_tbl := p_proj_cost_rate_date_tbl;
8652 l_proj_rev_rate_type_tbl := p_proj_rev_rate_type_tbl;
8653 l_proj_rev_rate_date_type_tbl := p_proj_rev_rate_date_type_tbl;
8654 l_proj_rev_rate_tbl := p_proj_rev_rate_tbl;
8655 l_proj_rev_rate_date_tbl := p_proj_rev_rate_date_tbl;
8656 l_pfunc_cost_rate_type_tbl := p_pfunc_cost_rate_type_tbl;
8657 l_pfunc_cost_rate_date_typ_tbl := p_pfunc_cost_rate_date_typ_tbl;
8658 l_pfunc_cost_rate_tbl := p_pfunc_cost_rate_tbl;
8659 l_pfunc_cost_rate_date_tbl := p_pfunc_cost_rate_date_tbl;
8660 l_pfunc_rev_rate_type_tbl := p_pfunc_rev_rate_type_tbl;
8661 l_pfunc_rev_rate_date_type_tbl := p_pfunc_rev_rate_date_type_tbl;
8662 l_pfunc_rev_rate_tbl := p_pfunc_rev_rate_tbl;
8663 l_pfunc_rev_rate_date_tbl := p_pfunc_rev_rate_date_tbl;
8664 l_change_reason_code_tbl := p_change_reason_code_tbl;
8665 l_description_tbl := p_description_tbl;
8666 END IF; -- p_context
8667 --log1('PBL 2 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8668
8669 --log1('----- STAGE PBL1.3-------');
8670 IF l_debug_mode = 'Y' THEN
8671 pa_debug.g_err_stage := 'Input parameters are copied to local variables';
8672 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8673 pa_debug.g_err_stage := 'Checking for existing RAs';
8674 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8675 END IF;
8676
8677 --log1('PBL 3 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8678 -- noting down the number of records passed
8679 l_total_rec_passed := p_task_id_tbl.COUNT;
8680 --log1('----- STAGE PBL1.4-------');
8681 FOR i IN 1..l_ra_id_tbl.COUNT LOOP
8682 -- checking for existing RAs
8683 -- firing the select only if it has not been done for the task-resource combination
8684 l_distinct_new_ra_index:= 'T'||l_task_id_tbl(i)||'R'||l_rlm_id_tbl(i);
8685 IF l_ra_id_tbl(i) IS NULL AND
8686 (NOT l_distinct_new_ra_tbl.EXISTS(l_distinct_new_ra_index)) THEN
8687
8688 --log1('----- STAGE PBL2-------');
8689 --Populate the l_distinct_new_ra_tbl for the index corresponding to the Task/Rlm
8690 --with the value 0 to indicate the Task/Rlm has already been selected as input
8691 --for insertion
8692 l_distinct_new_ra_tbl(l_distinct_new_ra_index):=0;
8693 IF l_task_id_tbl(i) <> 0 THEN
8694 --Copy input params for add i.e derive the element version id,rlm id
8695 -- selecting element_version_id
8696 BEGIN
8697 SELECT pev.element_version_id
8698 INTO l_new_elem_ver_id
8699 FROM pa_proj_element_versions pev
8700 WHERE pev.proj_element_id = l_task_id_tbl(i)
8701 AND pev.parent_structure_version_id = p_version_info_rec.x_project_structure_version_id;
8702 --log1('----- STAGE PBL5-------');
8703 EXCEPTION
8704 WHEN NO_DATA_FOUND THEN
8705 --log1('----- STAGE PBL6-------');
8706 IF l_debug_mode = 'Y' THEN
8707 pa_debug.g_err_stage := 'No Elem Version Id found for the task id passed';
8708 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8709 END IF;
8710 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8711 END;
8712 ELSE
8713 -- for project level plannings
8714 l_new_elem_ver_id := 0;
8715 END IF;
8716 --log1('----- STAGE PBL7-------');
8717 -- populating the other required inputs for add_plan_txn
8718 l_new_elem_ver_id_tbl.EXTEND(1);
8719 l_new_elem_ver_id_tbl(l_new_elem_ver_id_tbl.COUNT) := l_new_elem_ver_id;
8720 l_new_rlm_id_tbl.EXTEND(1);
8721 l_new_rlm_id_tbl(l_new_rlm_id_tbl.COUNT) := l_rlm_id_tbl(i);
8722 l_new_planning_start_date_tbl.EXTEND(1);
8723 l_new_planning_start_date_tbl(l_new_planning_start_date_tbl.COUNT) := l_planning_start_date_tbl(i);
8724 l_new_planning_end_date_tbl.EXTEND(1);
8725 l_new_planning_end_date_tbl(l_new_planning_end_date_tbl.COUNT) := l_planning_end_date_tbl(i);
8726
8727 --log1('----- STAGE PBL9-------');
8728 END IF; /* if RA is null at index */
8729 --log1('----- STAGE PBL11-------');
8730 END LOOP;
8731 --log1('PBL 4 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8732 --log1('PBL 4.1 '||l_new_elem_ver_id_tbl.COUNT );
8733 --log1('----- STAGE PBL11.7------- || '||l_new_elem_ver_id_tbl.COUNT);
8734 IF l_new_elem_ver_id_tbl.COUNT > 0 THEN
8735 -- there are new task-resource records to be inserted
8736 IF l_debug_mode = 'Y' THEN
8737 pa_debug.g_err_stage := 'Inputs prepared for add_plan_txn and calling';
8738 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8739 END IF;
8740 -- Calling add_planning_transaction for those records for which RA doesnot exists
8741
8742 --Note down the current value of pa_resource_assignments_s.nextval
8743 BEGIN
8744 --log1('----- STAGE PBL15-------');
8745 SELECT pa_resource_assignments_s.nextval
8746 INTO l_curr_ra_id_seq
8747 FROM DUAL
8748 WHERE 1 = 1;
8749 --log1('----- STAGE PBL16-------');
8750 EXCEPTION
8751 WHEN OTHERS THEN
8752 IF l_debug_mode = 'Y' THEN
8753 pa_debug.g_err_stage := 'Error while getting RA Id sequence';
8754 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8755 END IF;
8756 RAISE;
8757 END;
8758 --log1('----- STAGE PBL17-------');
8759 --log1('----- STAGE PBL17.1------- '||l_new_elem_ver_id_tbl.count);
8760 --log1('----- STAGE PBL17.2------- '||l_new_rlm_id_tbl.count);
8761 --log1('----- STAGE PBL17.3------- '||p_version_info_rec.x_plan_class_code);
8762 -- calling add_planning_transaction
8763 PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions
8764 (p_context => p_version_info_rec.x_plan_class_code
8765 ,p_one_to_one_mapping_flag => 'Y'
8766 ,p_calling_module => 'WEBADI'
8767 ,p_project_id => p_version_info_rec.x_project_id
8768 ,p_budget_version_id => p_budget_version_id
8769 ,p_task_elem_version_id_tbl => l_new_elem_ver_id_tbl
8770 ,p_resource_list_member_id_tbl => l_new_rlm_id_tbl
8771 ,p_planning_start_date_tbl => l_new_planning_start_date_tbl
8772 ,p_planning_end_date_tbl => l_new_planning_end_date_tbl
8773 ,x_return_status => x_return_status
8774 ,x_msg_data => l_msg_data
8775 ,x_msg_count => l_msg_count);
8776
8777 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8778 IF l_debug_mode = 'Y' THEN
8779 pa_debug.g_err_stage:='Called API pa_fp_planning_transaction_pub.add_planning_transaction api returned error';
8780 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8781 END IF;
8782 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8783 END IF;
8784 IF l_debug_mode = 'Y' THEN
8785 pa_debug.g_err_stage := 'Add_planning_transaction called';
8786 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8787 END IF;
8788 END IF; -- new RAs
8789 --log1('PBL 5 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8790
8791 --log1('----- STAGE PBL11.8------- || '||l_ra_id_tbl.COUNT);
8792
8793 FOR i IN 1 .. l_ra_id_tbl.COUNT LOOP
8794 IF l_ra_id_tbl(i) IS NULL THEN
8795 -- collect all the new RA ids for that task-resource
8796 BEGIN
8797 SELECT pra.resource_assignment_id,
8798 pra.rbs_element_id,
8799 pra.resource_class_code,
8800 pra.rate_based_flag
8801 INTO l_new_ra_id,
8802 l_new_res_asg_rbs_elem_id,
8803 l_new_res_asg_res_class_code,
8804 l_new_res_asg_rate_based_flag
8805 FROM pa_resource_assignments pra
8806 WHERE pra.budget_version_id = p_budget_version_id
8807 AND pra.project_id = p_version_info_rec.x_project_id
8808 AND pra.task_id = l_task_id_tbl(i)
8809 AND pra.resource_list_member_id = l_rlm_id_tbl(i)
8810 AND pra.project_assignment_id = -1;
8811
8812 -- stamping the value of new RA id over null in p_ra_id_tbl
8813 l_ra_id_tbl(i) := l_new_ra_id;
8814
8815 EXCEPTION
8816 WHEN NO_DATA_FOUND THEN
8817 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8818 END;
8819 END IF;
8820 END LOOP;
8821 --log1('PBL 6 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8822 --log1('PBL 7 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8823
8824 -- Deleting records from pa_budget_lines, for the records with delete_flag as Y
8825 -- and if it is non periodic layout
8826 -- Bug 4424457. Moved the delete statement before calculate. This is done for the following reason
8827 ----Consider a case where RA has currencies C1 and C2 and delete flag is marked for C1. If calculate API
8828 ----changes C2 to C1 and if delete is executed for RA and C1 after call to calculate API then amounts
8829 ----entered against C2 by customer will not be honoured and this is not intended.
8830 IF p_context = 'WEBADI_NON_PERIODIC' THEN
8831 -- checking if there is any reord with delete_flag = Y
8832 IF l_df_ra_id_tbl.COUNT > 0 THEN
8833 IF l_debug_mode = 'Y' THEN
8834 pa_debug.g_err_stage := 'Deleting from pa_budget_lines for the records with delete_flag = Y';
8835 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8836 END IF;
8837 --log1('PBL 11 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8838
8839 /* Bug 5144013 : Modified the logic so that the attributes of the transaction
8840 for which delete flag is set as 'Y' in Excel will be populated in pa_fp_rollup_tmp as
8841 deletion of those planning transactions are taken care by delete_planning_transaction api.
8842 This is done as part of merging the MRUP3 changes done in 11i into R12.
8843 */
8844 FOR i IN 1..l_df_ra_id_tbl.COUNT LOOP
8845 l_bl_del_flag_ra_id_tbl.extend();
8846 l_bl_del_flag_st_dt_tbl.extend();
8847 l_bl_del_flag_en_dt_tbl.extend();
8848 l_bl_del_flag_txn_curr_tbl.extend();
8849 l_bl_del_flag_txn_rc_tbl.extend();
8850 l_bl_del_flag_txn_bc_tbl.extend();
8851 l_bl_del_flag_txn_rev_tbl.extend();
8852 l_bl_del_flag_pf_curr_tbl.extend();
8853 l_bl_del_flag_pf_cr_typ_tbl.extend();
8854 l_bl_del_flag_pf_cr_dt_typ_tbl.extend();
8855 l_bl_del_flag_pf_cexc_rate_tbl.extend();
8856 l_bl_del_flag_pf_cr_date_tbl.extend();
8857 l_bl_del_flag_pf_rr_typ_tbl.extend();
8858 l_bl_del_flag_pf_rr_dt_typ_tbl.extend();
8859 l_bl_del_flag_pf_rexc_rate_tbl.extend();
8860 l_bl_del_flag_pf_rr_date_tbl.extend();
8861 l_bl_del_flag_pj_curr_tbl.extend();
8862 l_bl_del_flag_pj_cr_typ_tbl.extend();
8863 l_bl_del_flag_pj_cr_dt_typ_tbl.extend();
8864 l_bl_del_flag_pj_cexc_rate_tbl.extend();
8865 l_bl_del_flag_pj_cr_date_tbl.extend();
8866 l_bl_del_flag_pj_rr_typ_tbl.extend();
8867 l_bl_del_flag_pj_rr_dt_typ_tbl.extend();
8868 l_bl_del_flag_pj_rexc_rate_tbl.extend();
8869 l_bl_del_flag_pj_rr_date_tbl.extend();
8870 l_bl_del_flag_bl_id_tbl.extend();
8871 l_bl_del_flag_per_name_tbl.extend();
8872 l_bl_del_flag_pj_raw_cost_tbl.extend();
8873 l_bl_del_flag_pj_burd_cost_tbl.extend();
8874 l_bl_del_flag_pj_rev_tbl.extend();
8875 l_bl_del_flag_raw_cost_tbl.extend();
8876 l_bl_del_flag_burd_cost_tbl.extend();
8877 l_bl_del_flag_rev_tbl.extend();
8878 l_bl_del_flag_qty_tbl.extend();
8879 l_bl_del_flag_c_rej_code_tbl.extend();
8880 l_bl_del_flag_b_rej_code_tbl.extend();
8881 l_bl_del_flag_r_rej_code_tbl.extend();
8882 l_bl_del_flag_o_rej_code_tbl.extend();
8883 l_bl_del_fg_pc_cnv_rej_cd_tbl.extend();
8884 l_bl_del_fg_pf_cnv_rej_cd_tbl.extend();
8885 SELECT
8886 pbl.resource_assignment_id,
8887 pbl.start_date,
8888 pbl.end_date,
8889 pbl.txn_currency_code,
8890 pbl.txn_raw_cost,
8891 pbl.txn_burdened_cost,
8892 pbl.txn_revenue,
8893 pbl.projfunc_currency_code,
8894 pbl.projfunc_cost_rate_type,
8895 pbl.projfunc_cost_rate_date_type,
8896 pbl.projfunc_cost_exchange_rate,
8897 pbl.projfunc_cost_rate_date,
8898 pbl.projfunc_rev_rate_type,
8899 pbl.projfunc_rev_rate_date_type,
8900 pbl.projfunc_rev_exchange_rate,
8901 pbl.projfunc_rev_rate_date,
8902 pbl.project_currency_code,
8903 pbl.project_cost_rate_type,
8904 pbl.project_cost_rate_date_type,
8905 pbl.project_cost_exchange_rate,
8906 pbl.project_cost_rate_date,
8907 pbl.project_rev_rate_type,
8908 pbl.project_rev_rate_date_type,
8909 pbl.project_rev_exchange_rate,
8910 pbl.project_rev_rate_date,
8911 pbl.budget_line_id,
8912 pbl.period_name,
8913 pbl.project_raw_cost,
8914 pbl.project_burdened_cost,
8915 pbl.project_revenue,
8916 pbl.raw_cost,
8917 pbl.burdened_cost,
8918 pbl.revenue,
8919 pbl.quantity,
8920 pbl.cost_rejection_code,
8921 pbl.burden_rejection_code,
8922 pbl.revenue_rejection_code,
8923 pbl.other_rejection_code,
8924 pbl.pc_cur_conv_rejection_code,
8925 pbl.pfc_cur_conv_rejection_code
8926 INTO
8927 l_bl_del_flag_ra_id_tbl(i),
8928 l_bl_del_flag_st_dt_tbl(i),
8929 l_bl_del_flag_en_dt_tbl(i),
8930 l_bl_del_flag_txn_curr_tbl(i),
8931 l_bl_del_flag_txn_rc_tbl(i),
8932 l_bl_del_flag_txn_bc_tbl(i),
8933 l_bl_del_flag_txn_rev_tbl(i),
8934 l_bl_del_flag_pf_curr_tbl(i),
8935 l_bl_del_flag_pf_cr_typ_tbl(i),
8936 l_bl_del_flag_pf_cr_dt_typ_tbl(i),
8937 l_bl_del_flag_pf_cexc_rate_tbl(i),
8938 l_bl_del_flag_pf_cr_date_tbl(i),
8939 l_bl_del_flag_pf_rr_typ_tbl(i),
8940 l_bl_del_flag_pf_rr_dt_typ_tbl(i),
8941 l_bl_del_flag_pf_rexc_rate_tbl(i),
8942 l_bl_del_flag_pf_rr_date_tbl(i),
8943 l_bl_del_flag_pj_curr_tbl(i),
8944 l_bl_del_flag_pj_cr_typ_tbl(i),
8945 l_bl_del_flag_pj_cr_dt_typ_tbl(i),
8946 l_bl_del_flag_pj_cexc_rate_tbl(i),
8947 l_bl_del_flag_pj_cr_date_tbl(i),
8948 l_bl_del_flag_pj_rr_typ_tbl(i),
8949 l_bl_del_flag_pj_rr_dt_typ_tbl(i),
8950 l_bl_del_flag_pj_rexc_rate_tbl(i),
8951 l_bl_del_flag_pj_rr_date_tbl(i),
8952 l_bl_del_flag_bl_id_tbl(i),
8953 l_bl_del_flag_per_name_tbl(i),
8954 l_bl_del_flag_pj_raw_cost_tbl(i),
8955 l_bl_del_flag_pj_burd_cost_tbl(i),
8956 l_bl_del_flag_pj_rev_tbl(i),
8957 l_bl_del_flag_raw_cost_tbl(i),
8958 l_bl_del_flag_burd_cost_tbl(i),
8959 l_bl_del_flag_rev_tbl(i),
8960 l_bl_del_flag_qty_tbl(i),
8961 l_bl_del_flag_c_rej_code_tbl(i),
8962 l_bl_del_flag_b_rej_code_tbl(i),
8963 l_bl_del_flag_r_rej_code_tbl(i),
8964 l_bl_del_flag_o_rej_code_tbl(i),
8965 l_bl_del_fg_pc_cnv_rej_cd_tbl(i),
8966 l_bl_del_fg_pf_cnv_rej_cd_tbl(i)
8967 FROM pa_budget_lines pbl
8968 WHERE pbl.resource_assignment_id = l_df_ra_id_tbl(i)
8969 AND pbl.txn_currency_code = l_df_txn_currency_code_tbl(i);
8970 END LOOP;
8971
8972 /*Bug 5144013: Calling delete_planning_transactions api to delete the planning transaction
8973 from pa_budget_lines and from new entity when delete flag is set as 'Y' in Excel for a
8974 planning transaction. This is done as part of merging the MRUP3 changes done in 11i into R12.
8975 */
8976 IF l_debug_mode = 'Y' THEN
8977 pa_debug.g_err_stage := 'Before Calling pa_fp_planning_transaction_pub.delete_planning_transactions';
8978 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8979 END IF;
8980 pa_fp_planning_transaction_pub.delete_planning_transactions(
8981 p_context => 'BUDGET'
8982 ,p_task_or_res => 'ASSIGNMENT'
8983 ,p_resource_assignment_tbl => l_df_ra_id_tbl
8984 ,p_currency_code_tbl => l_df_txn_currency_code_tbl
8985 ,x_return_status => x_return_status
8986 ,x_msg_count => l_msg_count
8987 ,x_msg_data => l_msg_data);
8988 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8989 IF l_debug_mode = 'Y' THEN
8990 pa_debug.g_err_stage:='Called API pa_fp_planning_transactions_pub.delete_planning_transactions returned error';
8991 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8992 END IF;
8993 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8994 END IF;
8995 IF l_debug_mode = 'Y' THEN
8996 pa_debug.g_err_stage := 'After Calling pa_fp_planning_transaction_pub.delete_planning_transactions';
8997 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8998 END IF;
8999
9000 IF l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
9001 IF l_debug_mode = 'Y' THEN
9002 pa_debug.g_err_stage := l_bl_del_flag_ra_id_tbl.COUNT || ' records deleted from pa_budget_lines';
9003 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9004 pa_debug.g_err_stage := 'Inserting these records into pa_fp_rollup_tmp';
9005 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9006 END IF;
9007
9008 --log1('Preparing ra attr tbls for rollup tmp ins');
9009
9010 END IF;
9011
9012 END IF;--IF l_df_ra_id_tbl.COUNT > 0 THEN
9013
9014 END IF;--IF p_context = 'WEBADI_NON_PERIODIC' THEN
9015
9016
9017 -- calling calculate api for budget line context for all the elligible records
9018 IF l_ra_id_tbl.COUNT > 0 THEN
9019 IF l_debug_mode = 'Y' THEN
9020 pa_debug.g_err_stage := 'Calling calculate to spread amount';
9021 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9022 END IF;
9023 IF p_context = 'WEBADI_PERIODIC' THEN
9024 l_calc_calling_context := PA_FP_CONSTANTS_PKG.G_CALC_API_BUDGET_LINE;
9025 ELSIF p_context = 'WEBADI_NON_PERIODIC' THEN
9026 l_line_start_date_tbl := SYSTEM.pa_date_tbl_type();
9027 l_line_end_date_tbl := SYSTEM.pa_date_tbl_type();
9028 l_calc_calling_context := PA_FP_CONSTANTS_PKG.G_CALC_API_RESOURCE_CONTEXT;
9029 END IF;
9030
9031 IF l_debug_mode = 'Y' THEN
9032 pa_debug.g_err_stage := 'Calling context' || l_calc_calling_context;
9033 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9034 END IF;
9035
9036 --log1('PBL 8 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9037 --log1('Before callling calc in pbl');
9038 /* log1('l_calc_calling_context '||l_calc_calling_context);
9039 FOR zz IN 1..l_ra_id_tbl.COUNT LOOP
9040
9041 log1('l_ra_id_tbl('||zz||') is '||l_ra_id_tbl(zz));
9042 log1('l_txn_currency_code_tbl('||zz||') is '||l_txn_currency_code_tbl(zz));
9043 IF l_total_qty_tbl.COUNT >0 THEN
9044 log1('l_total_qty_tbl('||zz||') is '||l_total_qty_tbl(zz));
9045 END IF;
9046 IF l_total_raw_cost_tbl.COUNT >0 THEN
9047 log1('l_total_raw_cost_tbl('||zz||') is '||l_total_raw_cost_tbl(zz));
9048 END IF;
9049 IF l_total_burdened_cost_tbl.COUNT > 0 THEN
9050 log1('l_total_burdened_cost_tbl('||zz||') is '||l_total_burdened_cost_tbl(zz));
9051 END IF;
9052 IF l_total_revenue_tbl.COUNT>0 THEN
9053 log1('l_total_revenue_tbl('||zz||') is '||l_total_revenue_tbl(zz));
9054 END IF;
9055 IF l_raw_cost_rate_tbl.COUNT>0 THEN
9056 log1('l_raw_cost_rate_tbl('||zz||') is '||l_raw_cost_rate_tbl(zz));
9057 END IF;
9058 IF l_burdened_cost_rate_tbl.COUNT>0 THEN
9059 log1('l_burdened_cost_rate_tbl('||zz||') is '||l_burdened_cost_rate_tbl(zz));
9060 END IF;
9061 IF l_bill_rate_tbl.COUNT>0 THEN
9062 log1('l_bill_rate_tbl('||zz||') is '||l_bill_rate_tbl(zz));
9063 END IF;
9064 IF l_line_start_date_tbl.COUNT>0 THEN
9065 log1('l_line_start_date_tbl('||zz||') is '||l_line_start_date_tbl(zz));
9066 END IF;
9067 IF l_line_end_date_tbl.COUNT>0 THEN
9068 log1('l_line_end_date_tbl('||zz||') is '||l_line_end_date_tbl(zz));
9069 END IF;
9070
9071 END LOOP;*/
9072 --log1('PBL 9 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9073 PA_FP_CALC_PLAN_PKG.calculate(
9074 p_project_id => p_version_info_rec.x_project_id
9075 ,p_budget_version_id => p_budget_version_id
9076 ,p_rollup_required_flag => 'N'
9077 ,p_source_context => l_calc_calling_context
9078 ,p_conv_rates_required_flag => 'N'
9079 ,p_resource_assignment_tab => l_ra_id_tbl
9080 ,p_txn_currency_code_tab => l_txn_currency_code_tbl
9081 ,p_total_qty_tab => l_total_qty_tbl
9082 ,p_total_raw_cost_tab => l_total_raw_cost_tbl
9083 ,p_total_burdened_cost_tab => l_total_burdened_cost_tbl
9084 ,p_total_revenue_tab => l_total_revenue_tbl
9085 ,p_rw_cost_rate_override_tab => l_raw_cost_rate_tbl
9086 ,p_b_cost_rate_override_tab => l_burdened_cost_rate_tbl
9087 ,p_bill_rate_override_tab => l_bill_rate_tbl
9088 ,p_line_start_date_tab => l_line_start_date_tbl
9089 ,p_line_end_date_tab => l_line_end_date_tbl
9090 ,p_raTxn_rollup_api_call_flag => 'N'
9091 ,x_return_status => x_return_status
9092 ,x_msg_count => l_msg_count
9093 ,x_msg_data => l_msg_data);
9094 --log1('PBL 10 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9095 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9096
9097 IF l_debug_mode = 'Y' THEN
9098 pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate returned error';
9099 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
9100 END IF;
9101 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9102 END IF;
9103
9104 --Bug 4424457. Find out if there are budget lines that are processed by calculate API
9105 BEGIN
9106 SELECT 'Y'
9107 INTO l_bls_proccessed_flag
9108 FROM DUAL
9109 WHERE EXISTS (SELECT 1
9110 FROM pa_fp_rollup_tmp);
9111 EXCEPTION
9112 WHEN NO_DATA_FOUND THEN
9113 l_bls_proccessed_flag:='N';
9114 END;
9115
9116 END IF; -- if there are data in input tables prepared
9117
9118 -- Deleting records from pa_budget_lines, for the records with delete_flag as Y
9119 -- and if it is non periodic layout
9120 IF p_context = 'WEBADI_NON_PERIODIC' THEN
9121 -- checking if there is any reord with delete_flag = Y
9122 IF l_df_ra_id_tbl.COUNT > 0 THEN
9123 --log1('PBL 12 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9124 IF l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
9125 IF l_debug_mode = 'Y' THEN
9126 pa_debug.g_err_stage := l_bl_del_flag_ra_id_tbl.COUNT || ' records deleted from pa_budget_lines';
9127 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9128 pa_debug.g_err_stage := 'Inserting these records into pa_fp_rollup_tmp';
9129 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9130 END IF;
9131
9132 --log1('Preparing ra attr tbls for rollup tmp ins');
9133
9134 -- inserting these deleted records into pa_fp_rollup_tmp with delete flag as Y
9135 FORALL i IN l_bl_del_flag_ra_id_tbl.FIRST .. l_bl_del_flag_ra_id_tbl.LAST
9136 INSERT INTO
9137 pa_fp_rollup_tmp
9138 (resource_assignment_id,
9139 start_date,
9140 end_date,
9141 txn_currency_code,
9142 txn_raw_cost,
9143 txn_burdened_cost,
9144 txn_revenue,
9145 projfunc_currency_code,
9146 projfunc_cost_rate_type,
9147 projfunc_cost_rate_date_type,
9148 projfunc_cost_exchange_rate,
9149 projfunc_cost_rate_date,
9150 projfunc_rev_rate_type,
9151 projfunc_rev_rate_date_type,
9152 projfunc_rev_exchange_rate,
9153 projfunc_rev_rate_date,
9154 project_currency_code,
9155 project_cost_rate_type,
9156 project_cost_rate_date_type,
9157 project_cost_exchange_rate,
9158 project_cost_rate_date,
9159 project_rev_rate_type,
9160 project_rev_rate_date_type,
9161 project_rev_exchange_rate,
9162 project_rev_rate_date,
9163 budget_line_id,
9164 delete_flag,
9165 period_name,
9166 project_raw_cost,
9167 project_burdened_cost,
9168 project_revenue,
9169 projfunc_raw_cost,
9170 projfunc_burdened_cost,
9171 projfunc_revenue,
9172 quantity,
9173 cost_rejection_code,
9174 burden_rejection_code,
9175 revenue_rejection_code,
9176 pc_cur_conv_rejection_code,
9177 pfc_cur_conv_rejection_code,
9178 system_reference4) -- for other_rejection_code
9179 VALUES
9180 (l_bl_del_flag_ra_id_tbl(i),
9181 l_bl_del_flag_st_dt_tbl(i),
9182 l_bl_del_flag_en_dt_tbl(i),
9183 l_bl_del_flag_txn_curr_tbl(i),
9184 l_bl_del_flag_txn_rc_tbl(i),
9185 l_bl_del_flag_txn_bc_tbl(i),
9186 l_bl_del_flag_txn_rev_tbl(i),
9187 l_bl_del_flag_pf_curr_tbl(i),
9188 l_bl_del_flag_pf_cr_typ_tbl(i),
9189 l_bl_del_flag_pf_cr_dt_typ_tbl(i),
9190 l_bl_del_flag_pf_cexc_rate_tbl(i),
9191 l_bl_del_flag_pf_cr_date_tbl(i),
9192 l_bl_del_flag_pf_rr_typ_tbl(i),
9193 l_bl_del_flag_pf_rr_dt_typ_tbl(i),
9194 l_bl_del_flag_pf_rexc_rate_tbl(i),
9195 l_bl_del_flag_pf_rr_date_tbl(i),
9196 l_bl_del_flag_pj_curr_tbl(i),
9197 l_bl_del_flag_pj_cr_typ_tbl(i),
9198 l_bl_del_flag_pj_cr_dt_typ_tbl(i),
9199 l_bl_del_flag_pj_cexc_rate_tbl(i),
9200 l_bl_del_flag_pj_cr_date_tbl(i),
9201 l_bl_del_flag_pj_rr_typ_tbl(i),
9202 l_bl_del_flag_pj_rr_dt_typ_tbl(i),
9203 l_bl_del_flag_pj_rexc_rate_tbl(i),
9204 l_bl_del_flag_pj_rr_date_tbl(i),
9205 l_bl_del_flag_bl_id_tbl(i),
9206 'Y', -- delete_flag
9207 l_bl_del_flag_per_name_tbl(i),
9208 l_bl_del_flag_pj_raw_cost_tbl(i),
9209 l_bl_del_flag_pj_burd_cost_tbl(i),
9210 l_bl_del_flag_pj_rev_tbl(i),
9211 l_bl_del_flag_raw_cost_tbl(i),
9212 l_bl_del_flag_burd_cost_tbl(i),
9213 l_bl_del_flag_rev_tbl(i),
9214 l_bl_del_flag_qty_tbl(i),
9215 l_bl_del_flag_c_rej_code_tbl(i),
9216 l_bl_del_flag_b_rej_code_tbl(i),
9217 l_bl_del_flag_r_rej_code_tbl(i),
9218 l_bl_del_fg_pc_cnv_rej_cd_tbl(i),
9219 l_bl_del_fg_pf_cnv_rej_cd_tbl(i),
9220 l_bl_del_flag_o_rej_code_tbl(i));
9221 --log1('PBL 14 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9222 IF l_debug_mode = 'Y' THEN
9223 pa_debug.g_err_stage := 'records inserted into pa_fp_rollup_tmp';
9224 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9225 END IF;
9226 ELSE
9227 -- no records deleted from pa_budget_lines
9228 IF l_debug_mode = 'Y' THEN
9229 pa_debug.g_err_stage := 'No records deleted from pa_budget_lines';
9230 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9231 END IF;
9232 END IF;
9233 END IF; -- records with delete_flag
9234
9235 -- releasing the memory occupied by deleting the temporary pl/sql table types
9236 l_df_task_id_tbl.DELETE;
9237 l_df_rlm_id_tbl.DELETE;
9238 l_df_spread_curve_id_tbl.DELETE;
9239 l_df_mfc_cost_type_id_tbl.DELETE;
9240 l_df_etc_method_code.DELETE;
9241 l_df_sp_fixed_date_tbl.DELETE;
9242 l_df_txn_currency_code_tbl.DELETE;
9243 l_df_planning_start_date_tbl.DELETE;
9244 l_df_planning_end_date_tbl.DELETE;
9245 l_df_total_qty_tbl.DELETE;
9246 l_df_total_raw_cost_tbl.DELETE;
9247 l_df_total_burdened_cost_tbl.DELETE;
9248 l_df_total_revenue_tbl.DELETE;
9249 l_df_raw_cost_rate_tbl.DELETE;
9250 l_df_burdened_cost_rate_tbl.DELETE;
9251 l_df_bill_rate_tbl.DELETE;
9252 l_df_line_start_date_tbl.DELETE;
9253 l_df_line_end_date_tbl.DELETE;
9254 l_df_pj_cost_rate_typ_tbl.DELETE;
9255 l_df_pj_cost_rate_date_typ_tbl.DELETE;
9256 l_df_pj_cost_rate_tbl.DELETE;
9257 l_df_pj_cost_rate_date_tbl.DELETE;
9258 l_df_pj_rev_rate_typ_tbl.DELETE;
9259 l_df_pj_rev_rate_date_typ_tbl.DELETE;
9260 l_df_pj_rev_rate_tbl.DELETE;
9261 l_df_pj_rev_rate_date_tbl.DELETE;
9262 l_df_pf_cost_rate_typ_tbl.DELETE;
9263 l_df_pf_cost_rate_date_typ_tbl.DELETE;
9264 l_df_pf_cost_rate_tbl.DELETE;
9265 l_df_pf_cost_rate_date_tbl.DELETE;
9266 l_df_pf_rev_rate_typ_tbl.DELETE;
9267 l_df_pf_rev_rate_date_typ_tbl.DELETE;
9268 l_df_pf_rev_rate_tbl.DELETE;
9269 l_df_pf_rev_rate_date_tbl.DELETE;
9270 l_df_change_reason_code_tbl.DELETE;
9271 l_df_description_tbl.DELETE;
9272
9273 l_bl_del_flag_st_dt_tbl.DELETE;
9274 l_bl_del_flag_en_dt_tbl.DELETE;
9275 l_bl_del_flag_txn_curr_tbl.DELETE;
9276 l_bl_del_flag_txn_rc_tbl.DELETE;
9277 l_bl_del_flag_txn_bc_tbl.DELETE;
9278 l_bl_del_flag_txn_rev_tbl.DELETE;
9279 l_bl_del_flag_pf_curr_tbl.DELETE;
9280 l_bl_del_flag_pf_cr_typ_tbl.DELETE;
9281 l_bl_del_flag_pf_cr_dt_typ_tbl.DELETE;
9282 l_bl_del_flag_pf_cexc_rate_tbl.DELETE;
9283 l_bl_del_flag_pf_cr_date_tbl.DELETE;
9284 l_bl_del_flag_pf_rr_typ_tbl.DELETE;
9285 l_bl_del_flag_pf_rr_dt_typ_tbl.DELETE;
9286 l_bl_del_flag_pf_rexc_rate_tbl.DELETE;
9287 l_bl_del_flag_pf_rr_date_tbl.DELETE;
9288 l_bl_del_flag_pj_curr_tbl.DELETE;
9289 l_bl_del_flag_pj_cr_typ_tbl.DELETE;
9290 l_bl_del_flag_pj_cr_dt_typ_tbl.DELETE;
9291 l_bl_del_flag_pj_cexc_rate_tbl.DELETE;
9292 l_bl_del_flag_pj_cr_date_tbl.DELETE;
9293 l_bl_del_flag_pj_rr_typ_tbl.DELETE;
9294 l_bl_del_flag_pj_rr_dt_typ_tbl.DELETE;
9295 l_bl_del_flag_pj_rexc_rate_tbl.DELETE;
9296 l_bl_del_flag_pj_rr_date_tbl.DELETE;
9297 l_bl_del_flag_bl_id_tbl.DELETE;
9298 l_bl_del_flag_per_name_tbl.DELETE;
9299 l_bl_del_flag_pj_raw_cost_tbl.DELETE;
9300 l_bl_del_flag_pj_burd_cost_tbl.DELETE;
9301 l_bl_del_flag_pj_rev_tbl.DELETE;
9302 l_bl_del_flag_raw_cost_tbl.DELETE;
9303 l_bl_del_flag_burd_cost_tbl.DELETE;
9304 l_bl_del_flag_rev_tbl.DELETE;
9305 l_bl_del_flag_qty_tbl.DELETE;
9306 l_bl_del_flag_c_rej_code_tbl.DELETE;
9307 l_bl_del_flag_b_rej_code_tbl.DELETE;
9308 l_bl_del_flag_r_rej_code_tbl.DELETE;
9309 l_bl_del_flag_o_rej_code_tbl.DELETE;
9310 l_bl_del_fg_pc_cnv_rej_cd_tbl.DELETE;
9311 l_bl_del_fg_pf_cnv_rej_cd_tbl.DELETE;
9312
9313 END IF; -- p_context = WEBADI_NON_PERIODIC
9314
9315 IF l_debug_mode = 'Y' THEN
9316 pa_debug.g_err_stage:='Updating pa_budget_lines with change reason code, desc and conv attr';
9317 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
9318 END IF;
9319
9320 -- updating conversion attributes if the version is enabled for multi currency
9321 -- Bug 4424457 : In all the below updates replaced pa_budget_lines with pa_fp_rollup_tmp. These
9322 -- attributes will be finally stamped back in pa_budget_lines after MC conversion
9323 IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' AND
9324 p_context = 'WEBADI_PERIODIC' THEN
9325 IF l_ra_id_tbl.COUNT > 0 AND
9326 l_bls_proccessed_flag ='Y' THEN
9327 --log1('----- STAGE CRC1-------');
9328 --log1('PBL 15 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9329 FORALL i IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST
9330 UPDATE pa_fp_rollup_tmp pbl
9331 SET pbl.projfunc_cost_rate_type = DECODE (l_pfunc_cost_rate_type_tbl(i), NULL, pbl.projfunc_cost_rate_type,
9332 DECODE(l_pfunc_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_type_tbl(i))),
9333 pbl.projfunc_cost_rate_date_type = DECODE (l_pfunc_cost_rate_date_typ_tbl(i), NULL, pbl.projfunc_cost_rate_date_type,
9334 DECODE(l_pfunc_cost_rate_date_typ_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_date_typ_tbl(i))),
9335 pbl.projfunc_cost_exchange_rate = DECODE (l_pfunc_cost_rate_tbl(i), NULL, pbl.projfunc_cost_exchange_rate,
9336 DECODE(l_pfunc_cost_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_cost_rate_tbl(i))),
9337 pbl.projfunc_cost_rate_date = DECODE (l_pfunc_cost_rate_date_tbl(i), NULL, pbl.projfunc_cost_rate_date,
9338 DECODE(l_pfunc_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_cost_rate_date_tbl(i))),
9339 pbl.projfunc_rev_rate_type = DECODE (l_pfunc_rev_rate_type_tbl(i), NULL, pbl.projfunc_rev_rate_type,
9340 DECODE(l_pfunc_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_type_tbl(i))),
9341 pbl.projfunc_rev_rate_date_type = DECODE (l_pfunc_rev_rate_date_type_tbl(i), NULL, pbl.projfunc_rev_rate_date_type,
9342 DECODE(l_pfunc_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_date_type_tbl(i))),
9343 pbl.projfunc_rev_exchange_rate = DECODE (l_pfunc_rev_rate_tbl(i), NULL, pbl.projfunc_rev_exchange_rate,
9344 DECODE(l_pfunc_rev_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_rev_rate_tbl(i))),
9345 pbl.projfunc_rev_rate_date = DECODE (l_pfunc_rev_rate_date_tbl(i), NULL, pbl.projfunc_rev_rate_date,
9346 DECODE(l_pfunc_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_rev_rate_date_tbl(i))),
9347 pbl.project_cost_rate_type = DECODE (l_proj_cost_rate_type_tbl(i), NULL, pbl.project_cost_rate_type,
9348 DECODE(l_proj_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_type_tbl(i))),
9349 pbl.project_cost_rate_date_type = DECODE (l_proj_cost_rate_date_type_tbl(i), NULL, pbl.project_cost_rate_date_type,
9350 DECODE(l_proj_cost_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_date_type_tbl(i))),
9351 pbl.project_cost_exchange_rate = DECODE (l_proj_cost_rate_tbl(i), NULL, pbl.project_cost_exchange_rate,
9352 DECODE(l_proj_cost_rate_tbl(i), l_g_miss_num, NULL, l_proj_cost_rate_tbl(i))),
9353 pbl.project_cost_rate_date = DECODE (l_proj_cost_rate_date_tbl(i), NULL, pbl.project_cost_rate_date,
9354 DECODE(l_proj_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_cost_rate_date_tbl(i))),
9355 pbl.project_rev_rate_type = DECODE (l_proj_rev_rate_type_tbl(i), NULL, pbl.project_rev_rate_type,
9356 DECODE(l_proj_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_type_tbl(i))),
9357 pbl.project_rev_rate_date_type = DECODE (l_proj_rev_rate_date_type_tbl(i), NULL, pbl.project_rev_rate_date_type,
9358 DECODE(l_proj_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_date_type_tbl(i))),
9359 pbl.project_rev_exchange_rate = DECODE (l_proj_rev_rate_tbl(i), NULL, pbl.project_rev_exchange_rate,
9360 DECODE(l_proj_rev_rate_tbl(i), l_g_miss_num, NULL, l_proj_rev_rate_tbl(i))),
9361 pbl.project_rev_rate_date = DECODE (l_proj_rev_rate_date_tbl(i), NULL, pbl.project_rev_rate_date,
9362 DECODE(l_proj_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_rev_rate_date_tbl(i)))
9363 WHERE pbl.resource_assignment_id = l_ra_id_tbl(i)
9364 AND pbl.txn_currency_code = l_txn_currency_code_tbl(i)
9365 AND pbl.start_date >= l_line_start_date_tbl(i)
9366 AND pbl.end_date <= l_line_end_date_tbl(i);
9367 --log1('PBL 16 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9368 END IF; -- there are records in local ra tbl
9369 --END IF; -- mc flag = Y
9370
9371 -- updating change reason code and description if the version is non time phased
9372 ELSIF p_version_info_rec.x_plan_in_multi_curr_flag <> 'Y' AND
9373 p_context = 'WEBADI_NON_PERIODIC' THEN
9374 IF l_ra_id_tbl.COUNT > 0 AND
9375 l_bls_proccessed_flag ='Y' THEN
9376 --log1('----- STAGE CRC2-------');
9377 --log1('PBL 17 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9378 FORALL i IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST
9379 UPDATE pa_fp_rollup_tmp pbl
9380 SET pbl.change_reason_code = l_change_reason_code_tbl(i),
9381 pbl.description = l_description_tbl(i)
9382 WHERE pbl.resource_assignment_id = l_ra_id_tbl(i)
9383 AND pbl.txn_currency_code = l_txn_currency_code_tbl(i);
9384 --log1('PBL 18 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9385 END IF; -- there are records in local ra tbl
9386 --END IF; -- time phase = N
9387 ELSIF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' AND
9388 p_context = 'WEBADI_NON_PERIODIC' THEN
9389 --log1('----- STAGE PBL18-------');
9390 IF l_ra_id_tbl.COUNT > 0 AND
9391 l_bls_proccessed_flag ='Y' THEN
9392 --log1('PBL 19 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9393 FORALL i IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST
9394 UPDATE pa_fp_rollup_tmp pbl
9395 SET pbl.change_reason_code = l_change_reason_code_tbl(i),
9396 pbl.description = DECODE(l_description_tbl(i), NULL, pbl.description,
9397 DECODE(l_description_tbl(i), l_g_miss_char, NULL, l_description_tbl(i))),
9398 pbl.projfunc_cost_rate_type = DECODE (l_pfunc_cost_rate_type_tbl(i), NULL, pbl.projfunc_cost_rate_type,
9399 DECODE(l_pfunc_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_type_tbl(i))),
9400 pbl.projfunc_cost_rate_date_type = DECODE (l_pfunc_cost_rate_date_typ_tbl(i), NULL, pbl.projfunc_cost_rate_date_type,
9401 DECODE(l_pfunc_cost_rate_date_typ_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_date_typ_tbl(i))),
9402 pbl.projfunc_cost_exchange_rate = DECODE (l_pfunc_cost_rate_tbl(i), NULL, pbl.projfunc_cost_exchange_rate,
9403 DECODE(l_pfunc_cost_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_cost_rate_tbl(i))),
9404 pbl.projfunc_cost_rate_date = DECODE (l_pfunc_cost_rate_date_tbl(i), NULL, pbl.projfunc_cost_rate_date,
9405 DECODE(l_pfunc_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_cost_rate_date_tbl(i))),
9406 pbl.projfunc_rev_rate_type = DECODE (l_pfunc_rev_rate_type_tbl(i), NULL, pbl.projfunc_rev_rate_type,
9407 DECODE(l_pfunc_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_type_tbl(i))),
9408 pbl.projfunc_rev_rate_date_type = DECODE (l_pfunc_rev_rate_date_type_tbl(i), NULL, pbl.projfunc_rev_rate_date_type,
9409 DECODE(l_pfunc_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_date_type_tbl(i))),
9410 pbl.projfunc_rev_exchange_rate = DECODE (l_pfunc_rev_rate_tbl(i), NULL, pbl.projfunc_rev_exchange_rate,
9411 DECODE(l_pfunc_rev_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_rev_rate_tbl(i))),
9412 pbl.projfunc_rev_rate_date = DECODE (l_pfunc_rev_rate_date_tbl(i), NULL, pbl.projfunc_rev_rate_date,
9413 DECODE(l_pfunc_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_rev_rate_date_tbl(i))),
9414 pbl.project_cost_rate_type = DECODE (l_proj_cost_rate_type_tbl(i), NULL, pbl.project_cost_rate_type,
9415 DECODE(l_proj_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_type_tbl(i))),
9416 pbl.project_cost_rate_date_type = DECODE (l_proj_cost_rate_date_type_tbl(i), NULL, pbl.project_cost_rate_date_type,
9417 DECODE(l_proj_cost_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_date_type_tbl(i))),
9418 pbl.project_cost_exchange_rate = DECODE (l_proj_cost_rate_tbl(i), NULL, pbl.project_cost_exchange_rate,
9419 DECODE(l_proj_cost_rate_tbl(i), l_g_miss_num, NULL, l_proj_cost_rate_tbl(i))),
9420 pbl.project_cost_rate_date = DECODE (l_proj_cost_rate_date_tbl(i), NULL, pbl.project_cost_rate_date,
9421 DECODE(l_proj_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_cost_rate_date_tbl(i))),
9422 pbl.project_rev_rate_type = DECODE (l_proj_rev_rate_type_tbl(i), NULL, pbl.project_rev_rate_type,
9423 DECODE(l_proj_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_type_tbl(i))),
9424 pbl.project_rev_rate_date_type = DECODE (l_proj_rev_rate_date_type_tbl(i), NULL, pbl.project_rev_rate_date_type,
9425 DECODE(l_proj_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_date_type_tbl(i))),
9426 pbl.project_rev_exchange_rate = DECODE (l_proj_rev_rate_tbl(i), NULL, pbl.project_rev_exchange_rate,
9427 DECODE(l_proj_rev_rate_tbl(i), l_g_miss_num, NULL, l_proj_rev_rate_tbl(i))),
9428 pbl.project_rev_rate_date = DECODE (l_proj_rev_rate_date_tbl(i), NULL, pbl.project_rev_rate_date,
9429 DECODE(l_proj_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_rev_rate_date_tbl(i)))
9430 WHERE pbl.resource_assignment_id = l_ra_id_tbl(i)
9431 AND pbl.txn_currency_code = l_txn_currency_code_tbl(i);
9432 --log1('PBL 20 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9433 END IF; -- there are records in local ra tbl
9434 END IF; -- end of update
9435
9436 IF l_debug_mode = 'Y' THEN
9437 pa_debug.g_err_stage:='pa_budget_lines updated with change reason code, desc and conv attr';
9438 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
9439 END IF;
9440
9441
9442 --log1('----- STAGE PBL18.3------- ');
9443 IF l_debug_mode = 'Y' THEN
9444 pa_debug.g_err_stage := 'Calling multi currency pkg';
9445 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9446 END IF;
9447 --log1('PBL 26 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9448 -- Bug 4424457. Call MC API only if there are some budget lines that are processed by calculate API
9449 IF l_bls_proccessed_flag ='Y' THEN
9450
9451 PA_FP_MULTI_CURRENCY_PKG.convert_txn_currency
9452 (p_budget_version_id => p_budget_version_id
9453 ,p_entire_version => 'N'
9454 ,x_return_status => x_return_status
9455 ,x_msg_count => l_msg_count
9456 ,x_msg_data => l_msg_data );
9457 --log1('PBL 27 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9458 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9459 IF l_debug_mode = 'Y' THEN
9460 pa_debug.g_err_stage:='convert_txn_currency returned error';
9461 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9462 END IF;
9463 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
9464 END IF;
9465
9466 END IF;
9467
9468 IF l_debug_mode = 'Y' THEN
9469 pa_debug.g_err_stage := 'Preparing data for the call to PJI api';
9470 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9471 END IF;
9472
9473 IF l_debug_mode = 'Y' THEN
9474 pa_debug.g_err_stage := 'About to select data for updating the budget lines '||l_bls_proccessed_flag;
9475 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9476 END IF;
9477
9478 --bug 5962744 moved below bulk select out of if condition
9479 --Bug 4424457. Rollup tmp can contain multiple records for the same budget line id. This will happen when
9480 --for a budget line passed as input, the txn currency code is converted to some other currency which
9481 --already exiss for the same RA. This might get resolved with the MRC API changes. Till then this should
9482 --be taken care
9483 --Previously PJI plan_update was called and hence the required input was collected in _pji_ tbls. Now
9484 --plan_delete and plan_create are called. But the _pji_ tbls are still retained for update on
9485 --pa_budget_lines
9486
9487 SELECT rlp.resource_assignment_id,
9488 max(rlp.period_name),
9489 rlp.start_date,
9490 max(rlp.end_date),
9491 rlp.txn_currency_code,
9492 max(rlp.budget_line_id),
9493 sum(rlp.txn_raw_cost),
9494 sum(rlp.txn_burdened_cost),
9495 sum(rlp.txn_revenue),
9496 sum(rlp.project_raw_cost),
9497 sum(rlp.project_burdened_cost),
9498 sum(rlp.project_revenue),
9499 sum(rlp.projfunc_raw_cost),
9500 sum(rlp.projfunc_burdened_cost),
9501 sum(rlp.projfunc_revenue),
9502 sum(rlp.init_quantity),
9503 sum(rlp.init_raw_cost),
9504 sum(rlp.init_burdened_cost),
9505 sum(rlp.init_revenue),
9506 sum(rlp.project_init_raw_cost),
9507 sum(rlp.project_init_burdened_cost),
9508 sum(rlp.project_init_revenue),
9509 sum(rlp.txn_init_raw_cost),
9510 sum(rlp.txn_init_burdened_cost),
9511 sum(rlp.txn_init_revenue),
9512 max(rlp.cost_rejection_code),
9513 max(rlp.revenue_rejection_code),
9514 max(rlp.burden_rejection_code),
9515 max(rlp.system_reference4), -- for other_rejection_code
9516 max(rlp.pc_cur_conv_rejection_code),
9517 max(rlp.pfc_cur_conv_rejection_code),
9518 max(rlp.delete_flag),
9519 sum(rlp.quantity),
9520 max(rlp.project_cost_rate_type),
9521 avg(rlp.project_cost_exchange_rate),
9522 max(rlp.project_cost_rate_date_type),
9523 max(rlp.project_cost_rate_date),
9524 max(rlp.project_rev_rate_type),
9525 avg(rlp.project_rev_exchange_rate),
9526 max(rlp.project_rev_rate_date_type),
9527 max(rlp.project_rev_rate_date),
9528 max(rlp.projfunc_cost_rate_type),
9529 avg(rlp.projfunc_cost_exchange_rate),
9530 max(rlp.projfunc_cost_rate_date_type),
9531 max(rlp.projfunc_cost_rate_date),
9532 max(rlp.projfunc_rev_rate_type),
9533 avg(rlp.projfunc_rev_exchange_rate),
9534 max(rlp.projfunc_rev_rate_date_type),
9535 max(rlp.projfunc_rev_rate_date),
9536 count(*),
9537 max(change_reason_code),
9538 max(description)
9539 BULK COLLECT INTO
9540 l_pji_res_ass_id_tbl,
9541 l_pji_period_name_tbl,
9542 l_pji_start_date_tbl,
9543 l_pji_end_date_tbl,
9544 l_pji_txn_curr_code_tbl,
9545 l_upd_budget_line_id_tbl,
9546 l_pji_txn_raw_cost_tbl,
9547 l_pji_txn_burd_cost_tbl,
9548 l_pji_txn_revenue_tbl,
9549 l_pji_project_raw_cost_tbl,
9550 l_pji_project_burd_cost_tbl,
9551 l_pji_project_revenue_tbl,
9552 l_pji_raw_cost_tbl,
9553 l_pji_burd_cost_tbl,
9554 l_pji_revenue_tbl,
9555 l_upd_init_quantity_tbl,
9556 l_upd_init_raw_cost_tbl,
9557 l_upd_init_burdened_cost_tbl,
9558 l_upd_init_revenue_tbl,
9559 l_upd_proj_init_raw_cost_tbl,
9560 l_upd_proj_init_burd_cost_tbl,
9561 l_upd_proj_init_revenue_tbl,
9562 l_upd_txn_init_raw_cost_tbl,
9563 l_upd_txn_init_burd_cost_tbl,
9564 l_upd_txn_init_revenue_tbl,
9565 l_pji_cost_rej_code_tbl,
9566 l_pji_revenue_rej_code_tbl,
9567 l_pji_burden_rej_code_tbl,
9568 l_pji_other_rej_code,
9569 l_pji_pc_cur_conv_rej_code_tbl,
9570 l_pji_pf_cur_conv_rej_code_tbl,
9571 l_upd_delete_flag_tbl,
9572 l_pji_quantity_tbl,
9573 l_upd_pj_cost_rate_typ_tbl,
9574 l_upd_pj_cost_exc_rate_tbl,
9575 l_upd_pj_cost_rate_dt_typ_tbl,
9576 l_upd_pj_cost_rate_date_tbl,
9577 l_upd_pj_rev_rate_typ_tbl,
9578 l_upd_pj_rev_exc_rate_tbl,
9579 l_upd_pj_rev_rate_dt_typ_tbl,
9580 l_upd_pj_rev_rate_date_tbl,
9581 l_upd_pf_cost_rate_typ_tbl,
9582 l_upd_pf_cost_exc_rate_tbl,
9583 l_upd_pf_cost_rate_dt_typ_tbl,
9584 l_upd_pf_cost_rate_date_tbl,
9585 l_upd_pf_rev_rate_typ_tbl,
9586 l_upd_pf_rev_exc_rate_tbl,
9587 l_upd_pf_rev_rate_dt_typ_tbl,
9588 l_upd_pf_rev_rate_date_tbl,
9589 l_bl_count_tbl,
9590 l_chg_reason_code_tbl,
9591 l_desc_tbl
9592 FROM pa_fp_rollup_tmp rlp
9593 WHERE delete_flag IS NULL OR delete_flag <> 'Y'
9594 GROUP BY rlp.resource_assignment_id,rlp.txn_currency_code,rlp.start_date;
9595
9596 --log1('PBL 28 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9597 --bug 5962744
9598 IF p_context = 'WEBADI_NON_PERIODIC' THEN
9599 l_extra_bl_flag_tbl.extend(l_upd_budget_line_id_tbl.COUNT);
9600 l_ex_chg_rsn_code_tbl.extend(l_upd_budget_line_id_tbl.COUNT);
9601 l_ex_desc_tbl.extend(l_upd_budget_line_id_tbl.COUNT);
9602
9603 if l_upd_budget_line_id_tbl.count > 0 then
9604 for i in l_upd_budget_line_id_tbl.first .. l_upd_budget_line_id_tbl.last loop
9605
9606 l_extra_bl_flag_tbl(i):='N';
9607 l_ex_chg_rsn_code_tbl(i):=null;
9608 l_ex_desc_tbl(i):=null;
9609 end loop;
9610 end if;
9611
9612 if l_ra_id_tbl.count > 0 then
9613 for i in l_ra_id_tbl.first .. l_ra_id_tbl.last loop
9614
9615 l_ra_exists:='N';
9616 if l_pji_res_ass_id_tbl.count > 0 then
9617 for j in l_pji_res_ass_id_tbl.first .. l_pji_res_ass_id_tbl.last loop
9618 if (l_pji_res_ass_id_tbl(j) = l_ra_id_tbl(i) and
9619 l_pji_txn_curr_code_tbl(j) = l_txn_currency_code_tbl(i)) then
9620 l_ra_exists:='Y';
9621 end if;
9622 end loop;
9623 end if;
9624
9625 if l_ra_exists ='N' then
9626 l_extra_bl_flag_tbl.extend(1);
9627 l_extra_bl_flag_tbl(l_extra_bl_flag_tbl.count):='Y';
9628 l_pji_res_ass_id_tbl.extend(1);
9629 l_pji_res_ass_id_tbl(l_pji_res_ass_id_tbl.count):=l_ra_id_tbl(i);
9630 l_pji_txn_curr_code_tbl.extend(1);
9631 l_pji_txn_curr_code_tbl(l_pji_txn_curr_code_tbl.count):=l_txn_currency_code_tbl(i);
9632 l_ex_chg_rsn_code_tbl.extend(1);
9633 l_ex_chg_rsn_code_tbl(l_ex_chg_rsn_code_tbl.count):=l_change_reason_code_tbl(i);
9634 l_ex_desc_tbl.extend(1);
9635 l_ex_desc_tbl(l_ex_desc_tbl.count):=l_description_tbl(i);
9636
9637
9638 l_pji_project_raw_cost_tbl.extend(1);
9639 l_pji_project_burd_cost_tbl.extend(1);
9640 l_pji_project_revenue_tbl.extend(1);
9641 l_pji_raw_cost_tbl.extend(1);
9642 l_pji_burd_cost_tbl.extend(1);
9643 l_pji_revenue_tbl.extend(1);
9644 l_pji_quantity_tbl.extend(1);
9645 l_pji_pc_cur_conv_rej_code_tbl.extend(1);
9646 l_pji_pf_cur_conv_rej_code_tbl.extend(1);
9647 l_upd_init_quantity_tbl.extend(1);
9648 l_upd_init_raw_cost_tbl.extend(1);
9649 l_upd_init_burdened_cost_tbl.extend(1);
9650 l_upd_init_revenue_tbl.extend(1);
9651 l_upd_proj_init_raw_cost_tbl.extend(1);
9652 l_upd_proj_init_burd_cost_tbl.extend(1);
9653 l_upd_proj_init_revenue_tbl.extend(1);
9654 l_upd_txn_init_raw_cost_tbl.extend(1);
9655 l_upd_txn_init_burd_cost_tbl.extend(1);
9656 l_upd_txn_init_revenue_tbl.extend(1);
9657 l_upd_pj_cost_rate_typ_tbl.extend(1);
9658 l_upd_pj_cost_exc_rate_tbl.extend(1);
9659 l_upd_pj_cost_rate_dt_typ_tbl.extend(1);
9660 l_upd_pj_cost_rate_date_tbl.extend(1);
9661 l_upd_pj_rev_rate_typ_tbl.extend(1);
9662 l_upd_pj_rev_exc_rate_tbl.extend(1);
9663 l_upd_pj_rev_rate_dt_typ_tbl.extend(1);
9664 l_upd_pj_rev_rate_date_tbl.extend(1);
9665 l_upd_pf_cost_rate_typ_tbl.extend(1);
9666 l_upd_pf_cost_exc_rate_tbl.extend(1);
9667 l_upd_pf_cost_rate_dt_typ_tbl.extend(1);
9668 l_upd_pf_cost_rate_date_tbl.extend(1);
9669 l_upd_pf_rev_rate_typ_tbl.extend(1);
9670 l_upd_pf_rev_exc_rate_tbl.extend(1);
9671 l_upd_pf_rev_rate_dt_typ_tbl.extend(1);
9672 l_upd_pf_rev_rate_date_tbl.extend(1);
9673 l_chg_reason_code_tbl.extend(1);
9674 l_desc_tbl.extend(1);
9675 l_upd_delete_flag_tbl.extend(1);
9676 l_upd_delete_flag_tbl(l_upd_delete_flag_tbl.count) := null;
9677 l_bl_count_tbl.extend(1);
9678 l_bl_count_tbl(l_bl_count_tbl.count) := 1;
9679 end if;
9680 end loop;
9681 end if;
9682
9683
9684
9685
9686 FORALL i IN l_pji_res_ass_id_tbl.FIRST .. l_pji_res_ass_id_tbl.LAST
9687 UPDATE pa_budget_lines pbl
9688 SET pbl.project_raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_raw_cost,'N',l_pji_project_raw_cost_tbl(i)),
9689 pbl.project_burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_burdened_cost,'N',l_pji_project_burd_cost_tbl(i)),
9690 pbl.project_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_revenue,'N',l_pji_project_revenue_tbl(i)),
9691 pbl.raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.raw_cost,'N',l_pji_raw_cost_tbl(i)),
9692 pbl.burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.burdened_cost,'N',l_pji_burd_cost_tbl(i)),
9693 pbl.revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.revenue,'N',l_pji_revenue_tbl(i)),
9694 pbl.quantity = decode(l_extra_bl_flag_tbl(i),'Y',pbl.quantity,'N',l_pji_quantity_tbl(i)),
9695 pbl.pc_cur_conv_rejection_code = decode(l_extra_bl_flag_tbl(i),'Y',pbl.pc_cur_conv_rejection_code,'N',l_pji_pc_cur_conv_rej_code_tbl(i)),
9696 pbl.pfc_cur_conv_rejection_code = decode(l_extra_bl_flag_tbl(i),'Y',pbl.pfc_cur_conv_rejection_code,'N',l_pji_pf_cur_conv_rej_code_tbl(i)),
9697 pbl.init_quantity = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_quantity,'N',l_upd_init_quantity_tbl(i)),
9698 pbl.init_raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_raw_cost,'N',l_upd_init_raw_cost_tbl(i)),
9699 pbl.init_burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_burdened_cost,'N',l_upd_init_burdened_cost_tbl(i)),
9700 pbl.init_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_revenue,'N',l_upd_init_revenue_tbl(i)),
9701 pbl.project_init_raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_init_raw_cost,'N',l_upd_proj_init_raw_cost_tbl(i)),
9702 pbl.project_init_burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_init_burdened_cost,'N',l_upd_proj_init_burd_cost_tbl(i)),
9703 pbl.project_init_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_init_revenue,'N',l_upd_proj_init_revenue_tbl(i)),
9704 pbl.txn_init_raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.txn_init_raw_cost,'N',l_upd_txn_init_raw_cost_tbl(i)),
9705 pbl.txn_init_burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.txn_init_burdened_cost,'N',l_upd_txn_init_burd_cost_tbl(i)),
9706 pbl.txn_init_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.txn_init_revenue,'N',l_upd_txn_init_revenue_tbl(i)),
9707 pbl.project_cost_rate_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_cost_rate_type,'N',l_upd_pj_cost_rate_typ_tbl(i)),
9708 pbl.project_cost_exchange_rate = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_cost_exchange_rate,'N',l_upd_pj_cost_exc_rate_tbl(i)),
9709 pbl.project_cost_rate_date_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_cost_rate_date_type,'N',l_upd_pj_cost_rate_dt_typ_tbl(i)),
9710 pbl.project_cost_rate_date = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_cost_rate_date,'N',l_upd_pj_cost_rate_date_tbl(i)),
9711 pbl.project_rev_rate_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_rev_rate_type,'N',l_upd_pj_rev_rate_typ_tbl(i)),
9712 pbl.project_rev_exchange_rate = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_rev_exchange_rate,'N',l_upd_pj_rev_exc_rate_tbl(i)),
9713 pbl.project_rev_rate_date_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_rev_rate_date_type,'N',l_upd_pj_rev_rate_dt_typ_tbl(i)),
9714 pbl.project_rev_rate_date = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_rev_rate_date,'N',l_upd_pj_rev_rate_date_tbl(i)),
9715 pbl.projfunc_cost_rate_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_cost_rate_type,'N',l_upd_pf_cost_rate_typ_tbl(i)),
9716 pbl.projfunc_cost_exchange_rate = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_cost_exchange_rate,'N',l_upd_pf_cost_exc_rate_tbl(i)),
9717 pbl.projfunc_cost_rate_date_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_cost_rate_date_type,'N',l_upd_pf_cost_rate_dt_typ_tbl(i)),
9718 pbl.projfunc_cost_rate_date = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_cost_rate_date,'N',l_upd_pf_cost_rate_date_tbl(i)),
9719 pbl.projfunc_rev_rate_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_rev_rate_type,'N',l_upd_pf_rev_rate_typ_tbl(i)),
9720 pbl.projfunc_rev_exchange_rate = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_rev_exchange_rate,'N',l_upd_pf_rev_exc_rate_tbl(i)),
9721 pbl.projfunc_rev_rate_date_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_rev_rate_date_type,'N',l_upd_pf_rev_rate_dt_typ_tbl(i)),
9722 pbl.projfunc_rev_rate_date = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_rev_rate_date,'N',l_upd_pf_rev_rate_date_tbl(i)),
9723 pbl.change_reason_code = decode(l_extra_bl_flag_tbl(i),'Y',l_ex_chg_rsn_code_tbl(i),'N',DECODE(l_chg_reason_code_tbl(i), NULL, pbl.change_reason_code,
9724 l_fnd_miss_char, NULL,
9725 l_chg_reason_code_tbl(i))), -- Bug 5014538.
9726 pbl.description=decode(l_extra_bl_flag_tbl(i),'Y',l_ex_desc_tbl(i),'N',l_desc_tbl(i)),
9727 pbl.last_updated_by = fnd_global.user_id,
9728 pbl.last_update_date = SYSDATE,
9729 pbl.last_update_login = fnd_global.login_id
9730 WHERE pbl.budget_version_id = p_budget_version_id
9731 AND pbl.resource_assignment_id = l_pji_res_ass_id_tbl(i)
9732 AND pbl.txn_currency_code = l_pji_txn_curr_code_tbl(i)
9733 AND l_bl_count_tbl(i)=1
9734 AND (l_upd_delete_flag_tbl(i) IS NULL OR
9735 l_upd_delete_flag_tbl(i) <> 'Y');
9736 END IF; --if p_context = 'WEBADI_NON_PERIODIC'
9737 --bug 5962744
9738 IF l_debug_mode = 'Y' THEN
9739 pa_debug.g_err_stage := 'Stampping Amounts and rejection codes in budget lines';
9740 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9741 END IF;
9742
9743 -- Bug 4424457. If there are budget lines that either got deleted or updated/created then
9744 -- stamp the derived pc/pfc amounts back on budget lines and call PJI API
9745 IF l_bls_proccessed_flag ='Y' OR
9746 l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
9747 --Bug 4424457. Update only those budget lines for which duplicates do not exist in rollup tmp. Budget lines
9748 --with duplicates are already taken care of in calculate API
9749 -- IF l_pji_res_ass_id_tbl.COUNT > 0 THEN
9750 IF p_context <> 'WEBADI_NON_PERIODIC' THEN
9751 FORALL i IN l_upd_budget_line_id_tbl.FIRST .. l_upd_budget_line_id_tbl.LAST
9752 UPDATE pa_budget_lines pbl
9753 SET pbl.project_raw_cost = l_pji_project_raw_cost_tbl(i),
9754 pbl.project_burdened_cost = l_pji_project_burd_cost_tbl(i),
9755 pbl.project_revenue = l_pji_project_revenue_tbl(i),
9756 pbl.raw_cost = l_pji_raw_cost_tbl(i),
9757 pbl.burdened_cost = l_pji_burd_cost_tbl(i),
9758 pbl.revenue = l_pji_revenue_tbl(i),
9759 pbl.quantity = l_pji_quantity_tbl(i),
9760 pbl.pc_cur_conv_rejection_code = l_pji_pc_cur_conv_rej_code_tbl(i),
9761 pbl.pfc_cur_conv_rejection_code = l_pji_pf_cur_conv_rej_code_tbl(i),
9762 pbl.init_quantity = l_upd_init_quantity_tbl(i),
9763 pbl.init_raw_cost = l_upd_init_raw_cost_tbl(i),
9764 pbl.init_burdened_cost = l_upd_init_burdened_cost_tbl(i),
9765 pbl.init_revenue = l_upd_init_revenue_tbl(i),
9766 pbl.project_init_raw_cost = l_upd_proj_init_raw_cost_tbl(i),
9767 pbl.project_init_burdened_cost = l_upd_proj_init_burd_cost_tbl(i),
9768 pbl.project_init_revenue = l_upd_proj_init_revenue_tbl(i),
9769 pbl.txn_init_raw_cost = l_upd_txn_init_raw_cost_tbl(i),
9770 pbl.txn_init_burdened_cost = l_upd_txn_init_burd_cost_tbl(i),
9771 pbl.txn_init_revenue = l_upd_txn_init_revenue_tbl(i),
9772 pbl.project_cost_rate_type = l_upd_pj_cost_rate_typ_tbl(i),
9773 pbl.project_cost_exchange_rate = l_upd_pj_cost_exc_rate_tbl(i),
9774 pbl.project_cost_rate_date_type = l_upd_pj_cost_rate_dt_typ_tbl(i),
9775 pbl.project_cost_rate_date = l_upd_pj_cost_rate_date_tbl(i),
9776 pbl.project_rev_rate_type = l_upd_pj_rev_rate_typ_tbl(i),
9777 pbl.project_rev_exchange_rate = l_upd_pj_rev_exc_rate_tbl(i),
9778 pbl.project_rev_rate_date_type = l_upd_pj_rev_rate_dt_typ_tbl(i),
9779 pbl.project_rev_rate_date = l_upd_pj_rev_rate_date_tbl(i),
9780 pbl.projfunc_cost_rate_type = l_upd_pf_cost_rate_typ_tbl(i),
9781 pbl.projfunc_cost_exchange_rate = l_upd_pf_cost_exc_rate_tbl(i),
9782 pbl.projfunc_cost_rate_date_type = l_upd_pf_cost_rate_dt_typ_tbl(i),
9783 pbl.projfunc_cost_rate_date = l_upd_pf_cost_rate_date_tbl(i),
9784 pbl.projfunc_rev_rate_type = l_upd_pf_rev_rate_typ_tbl(i),
9785 pbl.projfunc_rev_exchange_rate = l_upd_pf_rev_exc_rate_tbl(i),
9786 pbl.projfunc_rev_rate_date_type = l_upd_pf_rev_rate_dt_typ_tbl(i),
9787 pbl.projfunc_rev_rate_date = l_upd_pf_rev_rate_date_tbl(i),
9788 pbl.change_reason_code = DECODE(l_chg_reason_code_tbl(i), NULL, pbl.change_reason_code,
9789 l_fnd_miss_char, NULL,
9790 l_chg_reason_code_tbl(i)), --Bug 5144013.
9791 pbl.description=l_desc_tbl(i),
9792 pbl.last_updated_by = fnd_global.user_id,
9793 pbl.last_update_date = SYSDATE,
9794 pbl.last_update_login = fnd_global.login_id
9795 WHERE pbl.budget_version_id = p_budget_version_id
9796 AND pbl.resource_assignment_id = l_pji_res_ass_id_tbl(i)
9797 AND pbl.txn_currency_code = l_pji_txn_curr_code_tbl(i)
9798 AND pbl.start_date =l_pji_start_date_tbl(i)
9799 AND l_bl_count_tbl(i)=1
9800 AND (l_upd_delete_flag_tbl(i) IS NULL OR
9801 l_upd_delete_flag_tbl(i) <> 'Y');
9802 END IF;
9803
9804 /* Start of fix for Bug : 5144013.Call is made to the api PA_BUDGET_LINES_UTILS.populate_display_qty
9805 to populate the display_quantity in pa_budget_lines. This is done as part of merging the MRUP3
9806 changes done in 11i into R12.
9807 */
9808 IF l_debug_mode = 'Y' THEN
9809 pa_debug.g_err_stage := 'Before calling Populate Display Qty api';
9810 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9811 END IF;
9812 PA_BUDGET_LINES_UTILS.populate_display_qty
9813 ( p_budget_version_id => p_budget_version_id
9814 ,p_context => 'FINANCIAL'
9815 ,x_return_status => x_return_status);
9816 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9817 IF l_debug_mode = 'Y' THEN
9818 pa_debug.g_err_stage := 'The API PA_BUDGET_LINES_UTILS.populate_display_qty returned error';
9819 pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
9820 END IF;
9821 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9822 END IF;
9823 IF l_debug_mode = 'Y' THEN
9824 pa_debug.g_err_stage := 'After calling Populate Display Qty api';
9825 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9826 END IF;
9827 -- Call is made to maintain_data api to rollup the data in new entity.
9828 IF l_debug_mode = 'Y' THEN
9829 pa_debug.g_err_stage := 'Before calling maintanance api maintain_data';
9830 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9831 END IF;
9832 PA_RES_ASG_CURRENCY_PUB.maintain_data(
9833 p_fp_cols_rec => p_version_info_rec
9834 ,p_calling_module => 'WEBADI'
9835 ,p_rollup_flag => 'Y'
9836 ,p_version_level_flag => 'Y'
9837 ,x_return_status => x_return_status
9838 ,x_msg_count => l_msg_count
9839 ,x_msg_data => l_msg_data);
9840 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9841 IF l_debug_mode = 'Y' THEN
9842 pa_debug.g_err_stage := 'The API PA_RES_ASG_CURRENCY_PUB.maintain_data returned error';
9843 pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
9844 END IF;
9845 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9846 END IF;
9847 IF l_debug_mode = 'Y' THEN
9848 pa_debug.g_err_stage := 'After calling maintanance api maintain_data';
9849 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9850 END IF;
9851 /* End of fix for Bug : 5144013*/
9852
9853 --log1('PBL 29 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9854 IF l_debug_mode = 'Y' THEN
9855 pa_debug.g_err_stage := 'Calling rollup budget version api';
9856 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9857 END IF;
9858 --log1('----- STAGE PBL18.3------- ');
9859 --log1('PBL 30 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9860 PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION
9861 ( p_budget_version_id => p_budget_version_id
9862 ,p_entire_version => 'Y'
9863 ,x_return_status => x_return_status
9864 ,x_msg_count => l_msg_count
9865 ,x_msg_data => l_msg_data);
9866
9867 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9868 IF l_debug_mode = 'Y' THEN
9869 pa_debug.g_err_stage:='The API PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION returned error';
9870 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9871 END IF;
9872 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9873 END IF;
9874 --log1('PBL 31 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9875 IF l_debug_mode = 'Y' THEN
9876 pa_debug.g_err_stage := 'Checking whether MRC api needs to be called';
9877 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9878 END IF;
9879 --log1('----- STAGE PBL18.4------- ');
9880
9881 /**************MRC ELIMINATION CHANGES: ********************************
9882 ** The following api calls are used for populating the mrc data which is not required
9883 ** as the mrc schema and entity are scrapped from R12
9884 PA_MRC_FINPLAN.check_mrc_install
9885 (x_return_status => x_return_status,
9886 x_msg_count => l_msg_count,
9887 x_msg_data => l_msg_data);
9888
9889 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9890 IF l_debug_mode = 'Y' THEN
9891 pa_debug.g_err_stage:='The API PA_MRC_FINPLAN.check_mrc_installed returned error';
9892 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9893 END IF;
9894 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9895 END IF;
9896
9897 --log1('PBL 32 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9898 -- checking for valid requiered parameter values to call the MRC api
9899 IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS AND
9900 PA_MRC_FINPLAN.G_FINPLAN_MRC_OPTION_CODE = 'A' THEN
9901 IF l_debug_mode = 'Y' THEN
9902 pa_debug.g_err_stage := 'Calling MRC api ';
9903 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9904 END IF;
9905 --log1('PBL 33 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9906 PA_MRC_FINPLAN.maintain_all_mc_budget_lines
9907 (p_fin_plan_version_id => p_budget_version_id,
9908 p_entire_version => 'N',
9909 x_return_status => x_return_status,
9910 x_msg_count => l_msg_count,
9911 x_msg_data => l_msg_data);
9912 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9913 IF l_debug_mode = 'Y' THEN
9914 pa_debug.g_err_stage:='The API PA_MRC_FINPLAN.maintain_all_mc_budget_lines returned error';
9915 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9916 END IF;
9917 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9918 END IF;
9919 --log1('PBL 34 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9920 ELSE
9921 IF l_debug_mode = 'Y' THEN
9922 pa_debug.g_err_stage := 'MRC api need not be called';
9923 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9924 END IF;
9925 END IF;
9926 ***************End of MRC ELIMINATION CHANGES: ***********************/
9927
9928 --log1('----- STAGE PBL18.5------- ');
9929 IF l_debug_mode = 'Y' THEN
9930 pa_debug.g_err_stage := 'Data prepared for the call to PJI api';
9931 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9932 pa_debug.Reset_Curr_Function;
9933 END IF;
9934 --log1('----- STAGE PBL18.6------- ');
9935 --log1('PBL 37'||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9936 --Bug 4424457. Replaced the call to plan_update with plan_delete and plan_create
9937 l_dest_ver_id_tbl.EXTEND;
9938 l_dest_ver_id_tbl(1):=p_budget_version_id;
9939 PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
9940 p_fp_version_ids => l_dest_ver_id_tbl,
9941 x_return_status => x_return_status,
9942 x_msg_code => l_error_msg_code);
9943
9944 IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
9945 IF l_debug_mode = 'Y' THEN
9946 pa_debug.g_err_stage := 'API PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE returned ERROR 1 '|| l_error_msg_code;
9947 pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
9948 END IF;
9949
9950 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9951
9952 END IF;
9953
9954
9955 PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE(p_fp_version_ids => l_dest_ver_id_tbl
9956 ,x_return_status => l_return_status
9957 ,x_msg_code => l_error_msg_code);
9958
9959 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9960 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9961 END IF;
9962
9963 --log1('PBL 38 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9964 -- deleting contents from pl/sql tables to be used to call pji api
9965 l_pji_res_ass_id_tbl.DELETE;
9966 l_pji_period_name_tbl.DELETE;
9967 l_pji_start_date_tbl.DELETE;
9968 l_pji_end_date_tbl.DELETE;
9969 l_pji_txn_curr_code_tbl.DELETE;
9970 l_pji_txn_raw_cost_tbl.DELETE;
9971 l_pji_txn_burd_cost_tbl.DELETE;
9972 l_pji_txn_revenue_tbl.DELETE;
9973 l_pji_project_raw_cost_tbl.DELETE;
9974 l_pji_project_burd_cost_tbl.DELETE;
9975 l_pji_project_revenue_tbl.DELETE;
9976 l_pji_raw_cost_tbl.DELETE;
9977 l_pji_burd_cost_tbl.DELETE;
9978 l_pji_revenue_tbl.DELETE;
9979 l_pji_cost_rej_code_tbl.DELETE;
9980 l_pji_revenue_rej_code_tbl.DELETE;
9981 l_pji_burden_rej_code_tbl.DELETE;
9982 l_pji_other_rej_code.DELETE;
9983 l_pji_pc_cur_conv_rej_code_tbl.DELETE;
9984 l_pji_pf_cur_conv_rej_code_tbl.DELETE;
9985 l_pji_quantity_tbl.DELETE;
9986 l_upd_pj_cost_rate_typ_tbl.DELETE;
9987 l_upd_pj_cost_exc_rate_tbl.DELETE;
9988 l_upd_pj_cost_rate_dt_typ_tbl.DELETE;
9989 l_upd_pj_cost_rate_date_tbl.DELETE;
9990 l_upd_pj_rev_rate_typ_tbl.DELETE;
9991 l_upd_pj_rev_exc_rate_tbl.DELETE;
9992 l_upd_pj_rev_rate_dt_typ_tbl.DELETE;
9993 l_upd_pj_rev_rate_date_tbl.DELETE;
9994 l_upd_pf_cost_rate_typ_tbl.DELETE;
9995 l_upd_pf_cost_exc_rate_tbl.DELETE;
9996 l_upd_pf_cost_rate_dt_typ_tbl.DELETE;
9997 l_upd_pf_cost_rate_date_tbl.DELETE;
9998 l_upd_pf_rev_rate_typ_tbl.DELETE;
9999 l_upd_pf_rev_exc_rate_tbl.DELETE;
10000 l_upd_pf_rev_rate_dt_typ_tbl.DELETE;
10001 l_upd_pf_rev_rate_date_tbl.DELETE;
10002 l_upd_budget_line_id_tbl.DELETE;
10003 l_upd_init_quantity_tbl.DELETE;
10004 l_upd_init_raw_cost_tbl.DELETE;
10005 l_upd_init_burdened_cost_tbl.DELETE;
10006 l_upd_init_revenue_tbl.DELETE;
10007 l_upd_proj_init_raw_cost_tbl.DELETE;
10008 l_upd_proj_init_burd_cost_tbl.DELETE;
10009 l_upd_proj_init_revenue_tbl.DELETE;
10010 l_upd_txn_init_raw_cost_tbl.DELETE;
10011 l_upd_txn_init_burd_cost_tbl.DELETE;
10012 l_upd_txn_init_revenue_tbl.DELETE;
10013 l_upd_delete_flag_tbl.DELETE;
10014
10015 END IF;-- IF l_bls_proccessed_flag ='Y' OR
10016 -- l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
10017
10018 --log1('PBL 39 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10019 IF l_debug_mode = 'Y' THEN
10020 pa_debug.g_err_stage := 'Leaving process_budget_lines';
10021 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10022 pa_debug.Reset_Curr_Function;
10023 END IF;
10024 EXCEPTION
10025 WHEN PA_FP_CONSTANTS_PKG.Just_Ret_Exc THEN
10026 IF l_debug_mode = 'Y' THEN
10027 pa_debug.reset_curr_function;
10028 END IF;
10029 RETURN;
10030 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
10031 l_msg_count := FND_MSG_PUB.count_msg;
10032
10033 IF l_msg_count = 1 and x_msg_data IS NULL THEN
10034 PA_INTERFACE_UTILS_PUB.get_messages
10035 (p_encoded => FND_API.G_TRUE
10036 ,p_msg_index => 1
10037 ,p_msg_count => l_msg_count
10038 ,p_msg_data => l_msg_data
10039 ,p_data => l_data
10040 ,p_msg_index_out => l_msg_index_out);
10041 x_msg_data := l_data;
10042 x_msg_count := l_msg_count;
10043 ELSE
10044 x_msg_count := l_msg_count;
10045 END IF;
10046 x_return_status := FND_API.G_RET_STS_ERROR;
10047 IF l_debug_mode = 'Y' THEN
10048 pa_debug.reset_curr_function;
10049 END IF;
10050 RETURN;
10051
10052 WHEN OTHERS THEN
10053 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10054 x_msg_count := 1;
10055 x_msg_data := SQLERRM;
10056
10057 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
10058 ,p_procedure_name => 'process_budget_lines');
10059 IF l_debug_mode = 'Y' THEN
10060 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
10061 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
10062 END IF;
10063
10064 IF l_debug_mode = 'Y' THEN
10065 pa_debug.reset_curr_function;
10066 END IF;
10067 RAISE;
10068
10069 END process_budget_lines;
10070
10071 --This procedure will update the budget version and its corresponding data in the interface table with
10072 --the latest request id and plan processing code(XLUP/XLUE).
10073 PROCEDURE update_xl_data_for_new_req
10074 (p_request_id IN pa_budget_versions.request_id%TYPE,
10075 p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE,
10076 p_plan_processing_code IN pa_budget_versions.plan_processing_code%TYPE,
10077 p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE,
10078 p_null_out_cols IN VARCHAR2)
10079 IS
10080 BEGIN
10081
10082 --Record Version Number is not updated since the web ADI code checks the record Version Number at downloand
10083 --with the record version number at upload and throws an error if they dont match.
10084 UPDATE pa_budget_versions
10085 SET request_id = p_request_id,
10086 plan_processing_code=p_plan_processing_code
10087 WHERE budget_version_id = p_budget_version_id;
10088
10089 --NULL out the IDS and values derived in the previous call to Switcher API do that all the validations
10090 --are done again
10091 UPDATE pa_fp_webadi_upload_inf
10092 SET task_id =DECODE(p_null_out_cols,'Y',NULL,task_id),
10093 resource_list_member_id=DECODE(p_null_out_cols,'Y',NULL,resource_list_member_id),
10094 val_error_flag =DECODE(p_null_out_cols,'Y',NULL,val_error_flag),
10095 val_error_code =DECODE(p_null_out_cols,'Y',NULL,val_error_code),
10096 err_task_name =DECODE(p_null_out_cols,'Y',NULL,err_task_name),
10097 err_task_number =DECODE(p_null_out_cols,'Y',NULL,err_task_number),
10098 err_alias =DECODE(p_null_out_cols,'Y',NULL,err_alias),
10099 err_amount_type_code =DECODE(p_null_out_cols,'Y',NULL,err_amount_type_code),
10100 request_id=p_request_id
10101 WHERE run_id=p_run_id
10102 AND request_id IS NULL;
10103
10104 END;
10105
10106 PROCEDURE switcher
10107 (x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10108 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
10109 x_msg_data OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10110 p_submit_budget_flag IN VARCHAR2,
10111 p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE,
10112 x_success_msg OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10113 p_submit_forecast_flag IN VARCHAR2,
10114 p_request_id IN pa_budget_versions.request_id%TYPE,
10115 p_calling_mode IN VARCHAR2)
10116
10117 IS
10118 -- variables used for debugging
10119 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.switcher';
10120 l_debug_mode VARCHAR2(1) := 'N';
10121 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
10122 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
10123
10124 l_msg_count NUMBER;
10125 l_msg_data VARCHAR2(2000);
10126 l_data VARCHAR2(2000);
10127 l_msg_index_out NUMBER;
10128
10129 l_budget_version_id pa_budget_versions.budget_version_id%TYPE;
10130 l_rec_version_number pa_budget_versions.record_version_number%TYPE;
10131 l_pm_rec_version_number pa_period_masks_b.record_version_number%TYPE;
10132 l_project_id pa_projects_all.project_id%TYPE;
10133 l_org_id pa_projects_all.org_id%TYPE;
10134 l_version_info_rec pa_fp_gen_amount_utils.fp_cols;
10135
10136 -- variable to held the start_date and end_date of individual periods
10137 l_prd_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
10138 l_prd_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
10139
10140 l_budget_line_in_tbl PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE;
10141 l_bl_raw_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10142 l_bl_burd_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10143 l_bl_bill_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10144 l_bl_plan_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
10145 l_bl_plan_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
10146 l_bl_uom_tbl SYSTEM.pa_varchar2_80_tbl_type := SYSTEM.pa_varchar2_80_tbl_type();
10147 l_mfc_cost_type_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
10148 l_spread_curve_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
10149 l_sp_fixed_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
10150 l_sp_fixed_date_tbl_1 SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
10151 l_etc_method_name_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
10152 l_spread_curve_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10153 l_spread_curve_id_tbl_1 SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10154
10155 l_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
10156 l_allow_qty_flag VARCHAR2(1);
10157
10158 l_set_ppc_flag_on_err VARCHAR2(1);
10159
10160 l_budget_line_out_tbl PA_BUDGET_PUB.G_budget_lines_out_tbl%TYPE;
10161 l_delete_flag_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
10162 l_delete_flag_tbl_1 SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
10163
10164 i INTEGER;
10165 l_error_indicator_flag VARCHAR2(1);
10166
10167 l_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10168 l_mfc_cost_type_id_tbl_1 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10169 l_etc_method_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
10170 l_etc_method_code_tbl_1 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
10171
10172 is_periodic_setup VARCHAR2(1) := 'N';
10173 l_prep_pbl_calling_context VARCHAR2(30);
10174 l_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE;
10175
10176 l_ra_id_tbl SYSTEM.pa_num_tbl_type;
10177 l_task_id_tbl SYSTEM.pa_num_tbl_type;
10178 l_rlm_id_tbl SYSTEM.pa_num_tbl_type;
10179 l_txn_currency_code_tbl SYSTEM.pa_varchar2_15_tbl_type;
10180 l_planning_start_date_tbl SYSTEM.pa_date_tbl_type;
10181 l_planning_end_date_tbl SYSTEM.pa_date_tbl_type;
10182 l_total_qty_tbl SYSTEM.pa_num_tbl_type;
10183 l_total_raw_cost_tbl SYSTEM.pa_num_tbl_type;
10184 l_total_burdened_cost_tbl SYSTEM.pa_num_tbl_type;
10185 l_total_revenue_tbl SYSTEM.pa_num_tbl_type;
10186 l_raw_cost_rate_tbl SYSTEM.pa_num_tbl_type;
10187 l_burdened_cost_rate_tbl SYSTEM.pa_num_tbl_type;
10188 l_bill_rate_tbl SYSTEM.pa_num_tbl_type;
10189 l_line_start_date_tbl SYSTEM.pa_date_tbl_type;
10190 l_line_end_date_tbl SYSTEM.pa_date_tbl_type;
10191 l_proj_cost_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type;
10192 l_proj_cost_rate_date_type_tbl SYSTEM.pa_varchar2_30_tbl_type;
10193 l_proj_cost_rate_tbl SYSTEM.pa_num_tbl_type;
10194 l_proj_cost_rate_date_tbl SYSTEM.pa_date_tbl_type;
10195 l_proj_rev_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type;
10196 l_proj_rev_rate_date_type_tbl SYSTEM.pa_varchar2_30_tbl_type;
10197 l_proj_rev_rate_tbl SYSTEM.pa_num_tbl_type;
10198 l_proj_rev_rate_date_tbl SYSTEM.pa_date_tbl_type;
10199 l_pfunc_cost_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type;
10200 l_pfunc_cost_rate_date_typ_tbl SYSTEM.pa_varchar2_30_tbl_type;
10201 l_pfunc_cost_rate_tbl SYSTEM.pa_num_tbl_type;
10202 l_pfunc_cost_rate_date_tbl SYSTEM.pa_date_tbl_type;
10203 l_pfunc_rev_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type;
10204 l_pfunc_rev_rate_date_type_tbl SYSTEM.pa_varchar2_30_tbl_type;
10205 l_pfunc_rev_rate_tbl SYSTEM.pa_num_tbl_type;
10206 l_pfunc_rev_rate_date_tbl SYSTEM.pa_date_tbl_type;
10207 l_change_reason_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
10208 l_description_tbl SYSTEM.pa_varchar2_2000_tbl_type;
10209 l_etc_quantity_tbl SYSTEM.pa_num_tbl_type;
10210 l_etc_raw_cost_tbl SYSTEM.pa_num_tbl_type;
10211 l_etc_burdened_cost_tbl SYSTEM.pa_num_tbl_type;
10212 l_etc_revenue_tbl SYSTEM.pa_num_tbl_type;
10213 l_res_class_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
10214 l_rate_based_flag_tbl SYSTEM.pa_varchar2_1_tbl_type;
10215 l_rbs_elem_id_tbl SYSTEM.pa_num_tbl_type;
10216 l_amt_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
10217 l_prc_ra_id_tbl SYSTEM.pa_num_tbl_type;
10218 l_prc_res_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
10219 l_prc_rate_based_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE;
10220 l_prc_rbs_elem_id_tbl SYSTEM.pa_num_tbl_type;
10221
10222 CURSOR l_prd_start_end_date_csr (c_org_id pa_projects_all.org_id%TYPE,
10223 c_prd_mask_id pa_proj_fp_options.cost_period_mask_id%TYPE,
10224 c_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE,
10225 c_current_planning_period pa_proj_fp_options.cost_current_planning_period%TYPE)
10226 IS
10227 SELECT glsd.start_date start_date,
10228 gled.end_date end_date
10229 FROM (SELECT ROW_NUMBER() OVER(PARTITION BY gl.period_set_name,gl.period_type
10230 ORDER BY gl.start_date) rn,
10231 gl.start_date start_date,
10232 gl.end_Date end_date,
10233 gl.period_name period_name,
10234 gl.period_set_name period_set_name,
10235 gl.period_type period_type
10236 FROM gl_periods gl,
10237 pa_implementations_all pim,
10238 gl_sets_of_books gsb
10239 WHERE gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
10240 AND gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
10241 AND gl.adjustment_period_flag='N'
10242 AND pim.org_id = c_org_id
10243 AND gsb.set_of_books_id = pim.set_of_books_id) glsd,
10244 (SELECT ROW_NUMBER() OVER(PARTITION BY gl.period_set_name,gl.period_type
10245 ORDER BY gl.start_date) rn,
10246 gl.start_date start_date,
10247 gl.end_Date end_date,
10248 gl.period_name period_name,
10249 gl.period_set_name period_set_name,
10250 gl.period_type period_type
10251 FROM gl_periods gl,
10252 pa_implementations_all pim,
10253 gl_sets_of_books gsb
10254 WHERE gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
10255 AND gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
10256 AND gl.adjustment_period_flag='N'
10257 AND pim.org_id = c_org_id
10258 AND gsb.set_of_books_id = pim.set_of_books_id) gled,
10259 (SELECT ROW_NUMBER() OVER(PARTITION BY gl.period_set_name,gl.period_type
10260 ORDER BY gl.start_date) rn,
10261 gl.start_date start_date,
10262 gl.end_Date end_date,
10263 gl.period_name period_name,
10264 gl.period_set_name period_set_name,
10265 gl.period_type period_type
10266 FROM gl_periods gl,
10267 pa_implementations_all pim,
10268 gl_sets_of_books gsb
10269 WHERE gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
10270 AND gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
10271 AND gl.adjustment_period_flag='N'
10272 AND pim.org_id = c_org_id
10273 AND gsb.set_of_books_id = pim.set_of_books_id)glcp,
10274 pa_period_mask_details pmd
10275 WHERE pmd.period_mask_id = c_prd_mask_id
10276 AND glcp.period_name = c_current_planning_period
10277 AND glsd.rn = pmd.from_anchor_start + glcp.rn
10278 AND gled.rn = pmd.from_anchor_end + glcp.rn
10279 AND pmd.from_anchor_position NOT IN (99999,-99999)
10280 ORDER BY pmd.from_anchor_position;
10281
10282 l_prd_date_rec l_prd_start_end_date_csr%ROWTYPE;
10283 l_submit_flag VARCHAR2(1);
10284 l_profile_val VARCHAR2(30);
10285 l_profile_thsld_val NUMBER;
10286 l_profile_thsld_num NUMBER;
10287 l_etc_start_date pa_budget_versions.etc_start_date%TYPE;
10288 l_request_id NUMBER;
10289 l_rollback_flag VARCHAR2(1);
10290 l_first_pd_bf_pm_en_dt DATE;
10291 l_last_pd_af_pm_st_dt DATE;
10292 l_inf_tbl_rec_tbl inf_cur_tbl_typ;
10293 l_record_counter NUMBER;
10294
10295
10296 BEGIN
10297 --log1('Begin '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10298 l_rollback_flag := 'N';
10299 COMMIT; /* Added this for bug 3736220
10300
10301 Reason: To display budget client extension error messages customized by the Customers
10302 we need to stamp the val_error_code and val_error_flag of PA_FP_WEBADI_UPLOAD_INF table
10303 Only then these error messages will appear in Excel Sheet itself when any failure happens
10304 during upload.
10305
10306 Code flow is designed as follows:
10307 1. When user clicks on Oracle Upload Toolbar Menu item in Excel
10308 the WEB ADI related procedures will populate PA_FP_WEBADI_UPLOAD_INF table and does not commit
10309
10310 2. Switcher API will be invoked after WEB ADI related code flow is completed.
10311
10312 3. Swicher API internally invokes PA_FP_CALC_PLAN_PKG.CALCULATE which inturn
10313 invokes the actual budget client extension
10314
10315 4. In client extension, as part of bug fix 3736220 added code to Stamp client extension errors
10316 in xface table (we stamp the val_error_code and val_error_flag of
10317 PA_FP_WEBADI_UPLOAD_INF table)
10318
10319 5. But the client extension is designed in such a way that when any error occurs in
10320 client extension we roll back to the calling API PA_FP_CALC_PLAN_PKG. So the stamped data
10321 gets rolled back. Ulimately the customers customized errors cannot be displayed in excel
10322 due to this rollback.
10323
10324 6. Hence in order to preserve the stamped val_error_code and val_error_flag
10325 of PA_FP_WEBADI_UPLOAD_INF table,introduced an autonomous procedure Stamp_Client_Extn_Errors
10326
10327 7. As a result if we dont commit in the beginning when SWITCHER API is called, then when
10328 Stamp_Client_Extn_Errors APi is invoked there will be no records in PA_FP_WEBADI_UPLOAD_INF.
10329 */
10330
10331 fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
10332
10333 x_return_status := FND_API.G_RET_STS_SUCCESS;
10334 x_msg_count := 0;
10335
10336 -- initializing the translated out message string
10337 x_success_msg := FND_MESSAGE.GET_STRING
10338 (APPIN => 'PA',
10339 NAMEIN => 'PA_FP_UPL_ONLINE_SUCC_MSG');
10340
10341 IF l_debug_mode = 'Y' THEN
10342 pa_debug.Set_Curr_Function
10343 (p_function => l_module_name,
10344 p_debug_mode => l_debug_mode);
10345 END IF;
10346
10347 --log1('----- Entering Switcher api -------');
10348
10349 -- validating input parameter
10350 IF p_run_id IS NULL THEN
10351 IF l_debug_mode = 'Y' THEN
10352 pa_debug.g_err_stage := 'p_run_id is passed as null';
10353 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
10354 END IF;
10355 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10356 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
10357 p_token1 => 'PROCEDURENAME',
10358 p_value1 => l_module_name);
10359 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10360 END IF;
10361
10362 IF l_debug_mode = 'Y' THEN
10363 pa_debug.g_err_stage := 'Entering into switcher';
10364 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
10365 pa_debug.g_err_stage := 'Fetching the header level info from tmp tbl';
10366 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
10367 END IF;
10368
10369 l_submit_flag:='N';
10370 IF p_submit_forecast_flag='Y' OR p_submit_budget_flag ='Y' THEN
10371
10372 l_submit_flag:='Y';
10373
10374 END IF;
10375
10376
10377 BEGIN
10378 SELECT budget_version_id,
10379 record_version_number,
10380 prd_mask_rec_ver_number
10381 INTO l_budget_version_id,
10382 l_rec_version_number,
10383 l_pm_rec_version_number
10384 FROM pa_fp_webadi_upload_inf
10385 WHERE run_id = p_run_id
10386 AND Nvl(p_request_id, -99) = Nvl(request_id, -99)
10387 AND rownum = 1;
10388 EXCEPTION
10389 WHEN NO_DATA_FOUND THEN
10390 IF l_debug_mode = 'Y' THEN
10391 pa_debug.g_err_stage := 'No data found while reading header info';
10392 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10393 END IF;
10394 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10395 END;
10396
10397
10398 --Find out whether the layout is a periodic layout or not. This can be done by looking at the amount type column
10399 --in the table since it will be populated only for periodic layouts.
10400 BEGIN
10401 SELECT 'Y'
10402 INTO is_periodic_setup
10403 FROM DUAL
10404 WHERE EXISTS(SELECT 'X'
10405 FROM pa_fp_webadi_upload_inf
10406 WHERE amount_type_name IS NOT NULL
10407 AND run_id = p_run_id
10408 AND Nvl(p_request_id, -99) = Nvl(request_id, -99));
10409 EXCEPTION
10410 WHEN NO_DATA_FOUND THEN
10411 is_periodic_setup := 'N';
10412 END;
10413
10414 IF l_debug_mode = 'Y' THEN
10415 pa_debug.g_err_stage := 'is_periodic_setup: =' || is_periodic_setup;
10416 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10417 END IF;
10418
10419 -- throwing error if the header level info is missing
10420 IF l_budget_version_id IS NULL OR
10421 l_rec_version_number IS NULL OR
10422 (is_periodic_setup='Y' AND l_pm_rec_version_number IS NULL) THEN
10423 IF l_debug_mode = 'Y' THEN
10424 pa_debug.g_err_stage := 'Header level values are null in interface table';
10425 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
10426 END IF;
10427 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10428 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
10429 p_token1 => 'PROCEDURENAME',
10430 p_value1 => l_module_name);
10431 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10432 END IF;
10433
10434
10435 --log1('----- STAGE 1-------');
10436
10437 IF l_debug_mode = 'Y' THEN
10438 pa_debug.g_err_stage := 'Deriving project id';
10439 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10440 END IF;
10441
10442 BEGIN
10443 SELECT bv.project_id,
10444 Nvl(pl.org_id, -99),
10445 etc_start_date
10446 INTO l_project_id,
10447 l_org_id,
10448 l_etc_start_date
10449 FROM pa_budget_versions bv,
10450 pa_projects_all pl
10451 WHERE bv.budget_version_id = l_budget_version_id
10452 AND bv.project_id = pl.project_id;
10453 EXCEPTION
10454 WHEN NO_DATA_FOUND THEN
10455 IF l_debug_mode = 'Y' THEN
10456 pa_debug.g_err_stage := 'No data found while reading project id ..';
10457 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10458 END IF;
10459 UPDATE pa_fp_webadi_upload_inf
10460 SET val_error_flag = 'Y',
10461 val_error_code = 'PA_FP_WEBADI_VER_MODIFIED',
10462 err_task_name = nvl(task_name,'-98'),
10463 err_task_number = nvl(task_number,'-98'),
10464 err_alias = nvl(resource_alias,'-98'),
10465 err_amount_type_code = nvl(amount_type_code,'-98')
10466 WHERE run_id=p_run_id
10467 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
10468
10469 x_return_status := FND_API.G_RET_STS_ERROR;
10470 IF l_debug_mode = 'Y' THEN
10471 pa_debug.reset_curr_function;
10472 END IF;
10473
10474 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10475 END;
10476
10477 --log1('----- STAGE 2-------');
10478
10479 MO_GLOBAL.SET_POLICY_CONTEXT('S',l_org_id);
10480
10481 IF l_debug_mode = 'Y' THEN
10482 pa_debug.g_err_stage := 'Calling pa_fp_gen_amount_utils.get_plan_version_dtls';
10483 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10484 END IF;
10485 --log1('----- STAGE 2.1-------'||l_project_id);
10486 --log1('----- STAGE 2.2-------'||l_budget_version_id);
10487 pa_fp_gen_amount_utils.get_plan_version_dtls
10488 (p_project_id => l_project_id,
10489 p_budget_version_id => l_budget_version_id,
10490 x_fp_cols_rec => l_version_info_rec,
10491 x_return_status => x_return_status,
10492 x_msg_count => l_msg_count,
10493 x_msg_data => l_msg_data);
10494
10495 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10496 IF l_debug_mode = 'Y' THEN
10497 pa_debug.g_err_stage := 'Call to get_plan_version_dtls returned with error';
10498 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10499 END IF;
10500 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10501 END IF;
10502 --log1('----- STAGE 2.3-------'||x_return_status);
10503 --log1('----- STAGE 2.4-------'||l_budget_version_id);
10504
10505 IF l_debug_mode = 'Y' THEN
10506 pa_debug.g_err_stage := 'Calling validate_header_info';
10507 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10508 END IF;
10509
10510 --log1('----- STAGE 3-------');
10511 --log1('1 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10512 validate_header_info
10513 ( p_calling_mode => p_calling_mode,
10514 p_run_id => p_run_id,
10515 p_budget_version_id => l_budget_version_id,
10516 p_record_version_number => l_rec_version_number,
10517 p_pm_rec_version_number => l_pm_rec_version_number,
10518 p_submit_flag => l_submit_flag,
10519 p_request_id => p_request_id,
10520 x_return_status => x_return_status,
10521 x_msg_data => l_msg_count,
10522 x_msg_count => l_msg_data);
10523 --log1('2 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10524
10525 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10526 IF l_debug_mode = 'Y' THEN
10527 pa_debug.g_err_stage := 'Call to validate_header_info returned with error';
10528 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10529 END IF;
10530 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10531 END IF;
10532
10533 -- checking, if the layout is periodic one
10534 IF l_debug_mode = 'Y' THEN
10535 pa_debug.g_err_stage := 'Checking for periodic setup';
10536 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10537 END IF;
10538
10539 --log1('----- STAGE 4-------');
10540
10541 --log1('----- STAGE 5-------');
10542 --dbms_output.put_line('--------l_org_id ---------' || l_org_id);
10543 --dbms_output.put_line('--------l_version_info_rec.x_period_mask_id---------' || l_version_info_rec.x_period_mask_id);
10544 --dbms_output.put_line('--------l_version_info_rec.x_time_phased_code ---------' || l_version_info_rec.x_time_phased_code);
10545 --dbms_output.put_line('--------l_version_info_rec.x_current_planning_period ---------' ||l_version_info_rec.x_current_planning_period);
10546 -- populating the tables for period start/end date to be passed to prepare_val_input
10547 -- if the version is time phased and the layout is periodic
10548 IF l_version_info_rec.x_time_phased_code <> 'N' AND
10549 is_periodic_setup = 'Y' THEN
10550 OPEN l_prd_start_end_date_csr(l_org_id,
10551 l_version_info_rec.x_period_mask_id,
10552 l_version_info_rec.x_time_phased_code,
10553 l_version_info_rec.x_current_planning_period);
10554 /*LOOP*/
10555 FETCH l_prd_start_end_date_csr
10556 BULK COLLECT INTO /*l_prd_date_rec;*/
10557 l_prd_start_date_tbl,
10558 l_prd_end_date_tbl;
10559 /*EXIT WHEN l_prd_date_rec.start_date IS NULL;
10560
10561 l_prd_start_date_tbl.EXTEND(1);
10562 l_prd_start_date_tbl(l_prd_start_date_tbl.COUNT) := l_prd_date_rec.start_date;
10563 l_prd_end_date_tbl.EXTEND(1);
10564 l_prd_end_date_tbl(l_prd_end_date_tbl.COUNT) := l_prd_date_rec.end_date;
10565 END LOOP;*/
10566 CLOSE l_prd_start_end_date_csr;
10567
10568 END IF; -- if periodic
10569
10570 --dbms_output.put_line('--------l_prd_start_date_tbl.COUNT ---------' || l_prd_start_date_tbl.COUNT);
10571 --dbms_output.put_line('--------l_prd_end_date_tbl.COUNT ---------' || l_prd_end_date_tbl.COUNT);
10572
10573 IF l_debug_mode = 'Y' THEN
10574 pa_debug.g_err_stage := 'Calling prepare_val_input';
10575 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10576 END IF;
10577
10578 --log1('----- STAGE 6-------');
10579 --log1('3 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10580
10581 IF is_periodic_setup = 'Y' THEN
10582 prepare_val_input
10583 ( p_run_id => p_run_id,
10584 p_request_id => p_request_id,
10585 p_version_info_rec => l_version_info_rec,
10586 p_prd_start_date_tbl => l_prd_start_date_tbl,
10587 p_prd_end_date_tbl => l_prd_end_date_tbl,
10588 p_org_id => l_org_id,
10589 x_budget_lines => l_budget_line_in_tbl,
10590 x_etc_quantity_tbl => l_etc_quantity_tbl,
10591 x_etc_raw_cost_tbl => l_etc_raw_cost_tbl,
10592 x_etc_burdened_cost_tbl => l_etc_burdened_cost_tbl,
10593 x_etc_revenue_tbl => l_etc_revenue_tbl,
10594 x_raw_cost_rate_tbl => l_bl_raw_cost_rate_tbl,
10595 x_burd_cost_rate_tbl => l_bl_burd_cost_rate_tbl,
10596 x_bill_rate_tbl => l_bl_bill_rate_tbl,
10597 x_planning_start_date_tbl => l_bl_plan_start_date_tbl,
10598 x_planning_end_date_tbl => l_bl_plan_end_date_tbl,
10599 x_uom_tbl => l_bl_uom_tbl,
10600 x_mfc_cost_type_tbl => l_mfc_cost_type_tbl,
10601 x_spread_curve_name_tbl => l_spread_curve_name_tbl,
10602 x_sp_fixed_date_tbl => l_sp_fixed_date_tbl,
10603 x_etc_method_name_tbl => l_etc_method_name_tbl,
10604 x_spread_curve_id_tbl => l_spread_curve_id_tbl,
10605 x_delete_flag_tbl => l_delete_flag_tbl,
10606 x_ra_id_tbl => l_ra_id_tbl,
10607 x_res_class_code_tbl => l_res_class_code_tbl,
10608 x_rate_based_flag_tbl => l_rate_based_flag_tbl,
10609 x_rbs_elem_id_tbl => l_rbs_elem_id_tbl,
10610 x_amt_type_tbl => l_amt_type_tbl,
10611 x_first_pd_bf_pm_en_dt => l_first_pd_bf_pm_en_dt,
10612 x_last_pd_af_pm_st_dt => l_last_pd_af_pm_st_dt,
10613 x_inf_tbl_rec_tbl => l_inf_tbl_rec_tbl,
10614 x_num_of_rec_processed => l_record_counter,
10615 x_return_status => x_return_status,
10616 x_msg_count => l_msg_count,
10617 x_msg_data => l_msg_data);
10618
10619 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10620 IF l_debug_mode = 'Y' THEN
10621 pa_debug.g_err_stage := 'Call to prepare_val_input returned with error';
10622 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10623 END IF;
10624 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10625 END IF;
10626 ELSE
10627 prepare_val_input
10628 ( p_run_id => p_run_id,
10629 p_request_id => p_request_id,
10630 p_version_info_rec => l_version_info_rec,
10631 p_prd_start_date_tbl => l_prd_start_date_tbl,
10632 p_prd_end_date_tbl => l_prd_end_date_tbl,
10633 p_org_id => l_org_id,
10634 x_budget_lines => l_budget_line_in_tbl,
10635 x_etc_quantity_tbl => l_etc_quantity_tbl,
10636 x_etc_raw_cost_tbl => l_etc_raw_cost_tbl,
10637 x_etc_burdened_cost_tbl => l_etc_burdened_cost_tbl,
10638 x_etc_revenue_tbl => l_etc_revenue_tbl,
10639 x_raw_cost_rate_tbl => l_bl_raw_cost_rate_tbl,
10640 x_burd_cost_rate_tbl => l_bl_burd_cost_rate_tbl,
10641 x_bill_rate_tbl => l_bl_bill_rate_tbl,
10642 x_planning_start_date_tbl => l_bl_plan_start_date_tbl,
10643 x_planning_end_date_tbl => l_bl_plan_end_date_tbl,
10644 x_uom_tbl => l_bl_uom_tbl,
10645 x_mfc_cost_type_tbl => l_mfc_cost_type_tbl,
10646 x_spread_curve_name_tbl => l_spread_curve_name_tbl,
10647 x_sp_fixed_date_tbl => l_sp_fixed_date_tbl,
10648 x_etc_method_name_tbl => l_etc_method_name_tbl,
10649 x_spread_curve_id_tbl => l_spread_curve_id_tbl,
10650 x_delete_flag_tbl => l_delete_flag_tbl,
10651 x_ra_id_tbl => l_ra_id_tbl,
10652 x_res_class_code_tbl => l_res_class_code_tbl,
10653 x_rate_based_flag_tbl => l_rate_based_flag_tbl,
10654 x_rbs_elem_id_tbl => l_rbs_elem_id_tbl,
10655 x_amt_type_tbl => l_amt_type_tbl,
10656 x_first_pd_bf_pm_en_dt => l_first_pd_bf_pm_en_dt,
10657 x_last_pd_af_pm_st_dt => l_last_pd_af_pm_st_dt,
10658 x_inf_tbl_rec_tbl => l_inf_tbl_rec_tbl,
10659 x_num_of_rec_processed => l_record_counter,
10660 x_return_status => x_return_status,
10661 x_msg_count => l_msg_count,
10662 x_msg_data => l_msg_data);
10663
10664 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10665 IF l_debug_mode = 'Y' THEN
10666 pa_debug.g_err_stage := 'Call to prepare_val_input returned with error';
10667 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10668 END IF;
10669 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10670 END IF;
10671 END IF; -- periodic check
10672 --log1('3 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10673 --log1('3.1 '||l_inf_tbl_rec_tbl.count);
10674 --log1('----- STAGE 7------- l_budget_line_in_tbl.count '||l_budget_line_in_tbl.count);
10675 -- getting other required information to call validate_budget_lines
10676
10677 IF l_version_info_rec.x_version_type = 'COST' THEN
10678 l_allow_qty_flag := l_version_info_rec.x_cost_quantity_flag;
10679 ELSIF l_version_info_rec.x_version_type = 'REVENUE' THEN
10680 l_allow_qty_flag := l_version_info_rec.x_rev_quantity_flag;
10681 ELSIF l_version_info_rec.x_version_type = 'ALL' THEN
10682 l_allow_qty_flag := l_version_info_rec.x_all_quantity_flag;
10683 END IF;
10684
10685 IF l_debug_mode = 'Y' THEN
10686 pa_debug.g_err_stage := 'Calling validate_budget_lines';
10687 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10688 END IF;
10689 --log1('4 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10690
10691 l_spread_curve_id_tbl_1 := l_spread_curve_id_tbl;
10692 pa_budget_pvt.validate_budget_lines
10693 (p_run_id => p_run_id
10694 ,p_calling_context => 'WEBADI'
10695 ,p_pa_project_id => l_version_info_rec.x_project_id
10696 ,p_budget_type_code => null -- pass null
10697 ,p_fin_plan_type_id => l_version_info_rec.x_fin_plan_type_id
10698 ,p_version_type => l_version_info_rec.x_version_type
10699 ,p_resource_list_id => l_version_info_rec.x_resource_list_id
10700 ,p_time_phased_code => l_version_info_rec.x_time_phased_code
10701 ,p_budget_entry_method_code => null -- pass null
10702 ,p_entry_level_code => l_version_info_rec.x_fin_plan_level_code
10703 ,p_allow_qty_flag => l_allow_qty_flag
10704 ,p_allow_raw_cost_flag => l_version_info_rec.x_raw_cost_flag
10705 ,p_allow_burdened_cost_flag => l_version_info_rec.x_burdened_flag
10706 ,p_allow_revenue_flag => l_version_info_rec.x_revenue_flag
10707 ,p_multi_currency_flag => l_version_info_rec.x_plan_in_multi_curr_flag
10708 ,p_project_cost_rate_type => null
10709 ,p_project_cost_rate_date_typ => null
10710 ,p_project_cost_rate_date => null
10711 ,p_project_cost_exchange_rate => null
10712 ,p_projfunc_cost_rate_type => null
10713 ,p_projfunc_cost_rate_date_typ => null
10714 ,p_projfunc_cost_rate_date => null
10715 ,p_projfunc_cost_exchange_rate => null
10716 ,p_project_rev_rate_type => null
10717 ,p_project_rev_rate_date_typ => null
10718 ,p_project_rev_rate_date => null
10719 ,p_project_rev_exchange_rate => null
10720 ,p_projfunc_rev_rate_type => null
10721 ,p_projfunc_rev_rate_date_typ => null
10722 ,p_projfunc_rev_rate_date => null
10723 ,p_projfunc_rev_exchange_rate => null
10724 ,p_version_info_rec => l_version_info_rec
10725 ,p_allow_raw_cost_rate_flag => l_version_info_rec.x_cost_rate_flag
10726 ,p_allow_burd_cost_rate_flag => l_version_info_rec.x_burden_rate_flag
10727 ,p_allow_bill_rate_flag => l_version_info_rec.x_bill_rate_flag
10728 ,p_raw_cost_rate_tbl => l_bl_raw_cost_rate_tbl
10729 ,p_burd_cost_rate_tbl => l_bl_burd_cost_rate_tbl
10730 ,p_bill_rate_tbl => l_bl_bill_rate_tbl
10731 ,p_uom_tbl => l_bl_uom_tbl
10732 ,p_planning_start_date_tbl => l_bl_plan_start_date_tbl
10733 ,p_planning_end_date_tbl => l_bl_plan_end_date_tbl
10734 ,p_delete_flag_tbl => l_delete_flag_tbl
10735 ,p_mfc_cost_type_tbl => l_mfc_cost_type_tbl
10736 ,p_spread_curve_name_tbl => l_spread_curve_name_tbl
10737 ,p_sp_fixed_date_tbl => l_sp_fixed_date_tbl
10738 ,p_etc_method_name_tbl => l_etc_method_name_tbl
10739 ,p_spread_curve_id_tbl => l_spread_curve_id_tbl_1
10740 ,p_amount_type_tbl => l_amt_type_tbl
10741 ,px_budget_lines_in => l_budget_line_in_tbl
10742 ,x_budget_lines_out => l_budget_line_out_tbl
10743 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
10744 ,x_etc_method_code_tbl => l_etc_method_code_tbl
10745 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
10746 ,x_msg_count => l_msg_count
10747 ,x_msg_data => l_msg_data
10748 ,x_return_status => x_return_status);
10749 --log1('5 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10750 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10751 IF l_debug_mode = 'Y' THEN
10752 pa_debug.g_err_stage := 'Call to validate_budget_lines returned with error';
10753 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10754 END IF;
10755 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10756 END IF;
10757 --log1('----- STAGE 9------- l_budget_line_in_tbl.count '||l_budget_line_in_tbl.count);
10758
10759 IF l_debug_mode = 'Y' THEN
10760 pa_debug.g_err_stage := 'Call to validate_budget_lines is complete';
10761 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10762 pa_debug.g_err_stage := 'Checking for errors';
10763 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10764 END IF;
10765
10766 BEGIN
10767 SELECT 'X'
10768 INTO l_error_indicator_flag
10769 FROM DUAL
10770 WHERE EXISTS (SELECT 'Y'
10771 FROM pa_fp_webadi_upload_inf inf
10772 WHERE run_id = p_run_id
10773 AND Nvl(p_request_id, -99) = Nvl(request_id, -99)
10774 AND (inf.val_error_flag = 'Y'
10775 OR inf.val_error_code IS NOT NULL));
10776 EXCEPTION
10777 WHEN NO_DATA_FOUND THEN
10778 l_error_indicator_flag := 'N';
10779 END;
10780
10781 IF l_debug_mode = 'Y' THEN
10782 pa_debug.g_err_stage := 'l_error_indicator_flag: ' || l_error_indicator_flag;
10783 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10784 END IF;
10785
10786 --log1('----- STAGE 10-------');
10787 IF l_error_indicator_flag = 'X' THEN
10788 IF l_debug_mode = 'Y' THEN
10789 pa_debug.g_err_stage := 'Errors reported in the tmp tbl';
10790 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10791 END IF;
10792
10793 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10794 END IF;
10795
10796 -- bug 4428112: add the following procedure to update the txn currency code
10797 -- if it was not passed earlier, for a non MC enabled version with the validated
10798 -- currency code as returned from the validate_budget_lines.
10799 IF l_version_info_rec.x_plan_in_multi_curr_flag = 'N' THEN
10800 check_and_update_txn_curr_code
10801 (p_budget_line_tbl => l_budget_line_in_tbl,
10802 px_inf_cur_rec_tbl => l_inf_tbl_rec_tbl,
10803 x_return_status => x_return_status,
10804 x_msg_count => l_msg_count,
10805 x_msg_data => l_msg_data);
10806
10807 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10808 IF l_debug_mode = 'Y' THEN
10809 pa_debug.g_err_stage := 'Call to check_and_update_txn_curr_code returned with error';
10810 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10811 END IF;
10812 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10813 END IF;
10814 END IF;
10815
10816
10817 -- no errors reported in validate_budget_lines. Check if the processing can happen online or
10818 --a concurrent request has to be submitted
10819 IF p_calling_mode = 'STANDARD' THEN
10820 --log1('----- STAGE 10.1-------');
10821 -- For values other than site level
10822 l_profile_val := fnd_profile.value_specific
10823 (name => 'PA_FP_WEBADI_DATA_PRC_MODE',
10824 user_id => fnd_global.user_id,
10825 responsibility_id => fnd_global.resp_id,
10826 application_id => 275);
10827 --log1('----- STAGE 10.2-------');
10828 IF l_profile_val IS NULL THEN
10829 -- For values at site level
10830 --log1('----- STAGE 10.3-------');
10831 l_profile_val := fnd_profile.value
10832 (name => 'PA_FP_WEBADI_DATA_PRC_MODE');
10833 --log1('----- STAGE 10.4-------');
10834 END IF;
10835
10836 IF l_profile_val = 'STANDARD' THEN
10837 --log1('----- STAGE 10.5-------');
10838 l_profile_thsld_val := fnd_profile.value_specific
10839 (name => 'PA_FP_WEBADI_DATA_PRC_THSLD',
10840 user_id => fnd_global.user_id,
10841 responsibility_id => fnd_global.resp_id,
10842 application_id => 275);
10843 --log1('----- STAGE 10.6-------');
10844 IF l_profile_thsld_val IS NULL THEN
10845 --log1('----- STAGE 10.7-------');
10846 l_profile_thsld_val := fnd_profile.value
10847 (name => 'PA_FP_WEBADI_DATA_PRC_THSLD');
10848 --log1('----- STAGE 10.8-------');
10849 END IF;
10850
10851 BEGIN
10852
10853 SELECT to_number(l_profile_thsld_val)
10854 INTO l_profile_thsld_num
10855 FROM dual;
10856 --log1('----- STAGE 10.9-------');
10857 EXCEPTION
10858 WHEN INVALID_NUMBER THEN
10859 --log1('----- STAGE 10.10-------');
10860 l_profile_thsld_num := 0;
10861 END;
10862
10863 IF l_profile_thsld_num < l_record_counter THEN
10864 --log1('----- STAGE 10.11-------');
10865 l_set_ppc_flag_on_err :='Y';
10866
10867 -- bug 5657334: setting the conc program to refer only a single org as the same in the
10868 -- project context before submitting the request
10869 fnd_request.set_org_id(l_org_id);
10870 -- end bug 5657334
10871
10872 l_request_id := FND_REQUEST.submit_request
10873 (application => 'PA',
10874 program => 'PAFPWACP',
10875 argument1 => l_submit_flag, -- p_submit_ver_flag
10876 argument2 => p_run_id ); -- p_run_id
10877 --log1('----- STAGE 10.12-------');
10878 IF l_request_id =0 THEN
10879 --log1('----- STAGE 10.13-------');
10880 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10881
10882 ELSE
10883 --log1('----- STAGE 10.14-------');
10884
10885 -- updating the budget version with the request_id
10886 UPDATE pa_budget_versions
10887 SET plan_processing_code = 'XLUP',
10888 request_id = l_request_id
10889 WHERE budget_version_id = l_budget_version_id;
10890
10891 UPDATE pa_fp_webadi_upload_inf
10892 SET request_id = l_request_id
10893 WHERE run_id = p_run_id
10894 AND request_id IS NULL;
10895
10896 COMMIT; -- is required to query the interface table from conc prog.
10897 --log1('----- STAGE 10.15-------');
10898
10899 -- If the concurrent request is submitted during upload then the request id should
10900 -- be displayed to the user. Hence change the x_success_msg value
10901 IF l_request_id IS NOT NULL AND
10902 (l_request_id <> -99 OR
10903 l_request_id <> -1) THEN
10904 FND_MESSAGE.SET_NAME( APPLICATION =>'PA',
10905 NAME => 'PA_FP_WA_CONC_PRC_RESUB_INFO');
10906
10907 FND_MESSAGE.SET_TOKEN(TOKEN => 'REQUEST_ID',
10908 VALUE => '' || l_request_id);
10909
10910 x_success_msg := FND_MESSAGE.GET;
10911 END IF;
10912
10913 IF l_debug_mode = 'Y' THEN
10914 pa_debug.reset_curr_function;
10915 END IF;
10916
10917 RETURN;
10918
10919 END IF;--IF l_request_id =0 THEN
10920
10921 END IF;--IF l_profile_thsld_num < l_budget_line_in_tbl.COUNT
10922
10923 END IF;--IF l_profile_val = 'STANDARD' THEN
10924
10925 END IF;--IF p_calling_mode = 'STANDARD' TEHN
10926 -- preparing the inputs for preapre_pbl_input
10927
10928 --log1('----- STAGE 11------- l_budget_line_in_tbl.count'||l_budget_line_in_tbl.count);
10929 IF is_periodic_setup = 'Y' THEN
10930 l_prep_pbl_calling_context := 'WEBADI_PERIODIC';
10931 ELSE
10932 l_prep_pbl_calling_context := 'WEBADI_NON_PERIODIC';
10933 END IF;
10934
10935 -- calling prepare_pbl_input to prepare inputs for the process_budget_lines api from data passed
10936 -- back from validate_budget_lines
10937 IF l_debug_mode = 'Y' THEN
10938 pa_debug.g_err_stage := 'Calling prepare_pbl_input';
10939 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10940 END IF;
10941 --log1('6 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10942
10943 l_spread_curve_id_tbl_1 := l_spread_curve_id_tbl;
10944 l_mfc_cost_type_id_tbl_1 := l_mfc_cost_type_id_tbl;
10945 l_delete_flag_tbl_1 := l_delete_flag_tbl;
10946 l_etc_method_code_tbl_1 := l_etc_method_code_tbl;
10947 l_sp_fixed_date_tbl_1 := l_sp_fixed_date_tbl;
10948
10949 prepare_pbl_input
10950 (p_context => l_prep_pbl_calling_context,
10951 p_run_id => p_run_id,
10952 p_version_info_rec => l_version_info_rec,
10953 p_inf_tbl_rec_tbl => l_inf_tbl_rec_tbl,
10954 p_project_id => l_project_id,
10955 p_budget_version_id => l_budget_version_id,
10956 p_etc_start_date => l_etc_start_date,
10957 p_plan_class_code => l_version_info_rec.x_plan_class_code,
10958 p_first_pd_bf_pm_en_dt => l_first_pd_bf_pm_en_dt,
10959 p_last_pd_af_pm_st_dt => l_last_pd_af_pm_st_dt,
10960 p_budget_lines_tbl => l_budget_line_in_tbl,
10961 p_ra_id_tbl => l_ra_id_tbl,
10962 p_prd_mask_st_date_tbl => l_prd_start_date_tbl,
10963 p_prd_mask_end_date_tbl => l_prd_end_date_tbl,
10964 p_planning_start_date_tbl => l_bl_plan_start_date_tbl,
10965 p_planning_end_date_tbl => l_bl_plan_end_date_tbl,
10966 p_etc_quantity_tbl => l_etc_quantity_tbl,
10967 p_etc_raw_cost_tbl => l_etc_raw_cost_tbl,
10968 p_etc_burdened_cost_tbl => l_etc_burdened_cost_tbl,
10969 p_etc_revenue_tbl => l_etc_revenue_tbl,
10970 p_raw_cost_rate_tbl => l_bl_raw_cost_rate_tbl,
10971 p_burd_cost_rate_tbl => l_bl_burd_cost_rate_tbl,
10972 p_bill_rate_tbl => l_bl_bill_rate_tbl,
10973 p_spread_curve_id_tbl => l_spread_curve_id_tbl_1,
10974 p_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl_1,
10975 p_etc_method_code_tbl => l_etc_method_code_tbl_1,
10976 p_sp_fixed_date_tbl => l_sp_fixed_date_tbl_1,
10977 p_res_class_code_tbl => l_res_class_code_tbl,
10978 p_rate_based_flag_tbl => l_rate_based_flag_tbl,
10979 p_rbs_elem_id_tbl => l_rbs_elem_id_tbl,
10980 p_delete_flag_tbl => l_delete_flag_tbl_1,
10981 p_request_id => p_request_id,
10982 x_task_id_tbl => l_task_id_tbl,
10983 x_rlm_id_tbl => l_rlm_id_tbl,
10984 x_ra_id_tbl => l_prc_ra_id_tbl,
10985 x_txn_currency_code_tbl => l_txn_currency_code_tbl,
10986 x_planning_start_date_tbl => l_planning_start_date_tbl,
10987 x_planning_end_date_tbl => l_planning_end_date_tbl,
10988 x_total_qty_tbl => l_total_qty_tbl,
10989 x_total_raw_cost_tbl => l_total_raw_cost_tbl,
10990 x_total_burdened_cost_tbl => l_total_burdened_cost_tbl,
10991 x_total_revenue_tbl => l_total_revenue_tbl,
10992 x_raw_cost_rate_tbl => l_raw_cost_rate_tbl,
10993 x_burdened_cost_rate_tbl => l_burdened_cost_rate_tbl,
10994 x_bill_rate_tbl => l_bill_rate_tbl,
10995 x_line_start_date_tbl => l_line_start_date_tbl,
10996 x_line_end_date_tbl => l_line_end_date_tbl,
10997 x_proj_cost_rate_type_tbl => l_proj_cost_rate_type_tbl,
10998 x_proj_cost_rate_date_type_tbl => l_proj_cost_rate_date_type_tbl,
10999 x_proj_cost_rate_tbl => l_proj_cost_rate_tbl,
11000 x_proj_cost_rate_date_tbl => l_proj_cost_rate_date_tbl,
11001 x_proj_rev_rate_type_tbl => l_proj_rev_rate_type_tbl,
11002 x_proj_rev_rate_date_type_tbl => l_proj_rev_rate_date_type_tbl,
11003 x_proj_rev_rate_tbl => l_proj_rev_rate_tbl,
11004 x_proj_rev_rate_date_tbl => l_proj_rev_rate_date_tbl,
11005 x_pfunc_cost_rate_type_tbl => l_pfunc_cost_rate_type_tbl,
11006 x_pfunc_cost_rate_date_typ_tbl => l_pfunc_cost_rate_date_typ_tbl,
11007 x_pfunc_cost_rate_tbl => l_pfunc_cost_rate_tbl,
11008 x_pfunc_cost_rate_date_tbl => l_pfunc_cost_rate_date_tbl,
11009 x_pfunc_rev_rate_type_tbl => l_pfunc_rev_rate_type_tbl,
11010 x_pfunc_rev_rate_date_type_tbl => l_pfunc_rev_rate_date_type_tbl,
11011 x_pfunc_rev_rate_tbl => l_pfunc_rev_rate_tbl,
11012 x_pfunc_rev_rate_date_tbl => l_pfunc_rev_rate_date_tbl,
11013 x_delete_flag_tbl => l_delete_flag_tbl,
11014 x_spread_curve_id_tbl => l_spread_curve_id_tbl,
11015 x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl,
11016 x_etc_method_code_tbl => l_etc_method_code_tbl,
11017 x_sp_fixed_date_tbl => l_sp_fixed_date_tbl,
11018 x_res_class_code_tbl => l_prc_res_class_code_tbl,
11019 x_rate_based_flag_tbl => l_prc_rate_based_flag_tbl,
11020 x_rbs_elem_id_tbl => l_prc_rbs_elem_id_tbl,
11021 x_change_reason_code_tbl => l_change_reason_code_tbl,
11022 x_description_tbl => l_description_tbl,
11023 x_return_status => x_return_status,
11024 x_msg_count => l_msg_count,
11025 x_msg_data => l_msg_data);
11026
11027 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11028 IF l_debug_mode = 'Y' THEN
11029 pa_debug.g_err_stage := 'Call to prepare_pbl_input returned with error';
11030 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11031 END IF;
11032 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11033 END IF;
11034
11035 IF l_debug_mode = 'Y' THEN
11036 pa_debug.g_err_stage := 'Call to prepare_pbl_input done';
11037 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11038 END IF;
11039 --log1('7 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11040 --log1('----- STAGE 12-------');
11041 -- calling process_budget_lines to commit the validated data in DB
11042 IF l_debug_mode = 'Y' THEN
11043 pa_debug.g_err_stage := 'Calling process_budget_lines';
11044 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11045 END IF;
11046
11047 --Till this point all the DMLs would have been executed on PA_FP_WEBADI_UPLOAD_INF. In case of any error
11048 --those changes need not be rolled back. process_budget_lines API will update the core B/F tables and hence
11049 --those updates should be reverted in case of any error. Hence establishing a savepoint now.
11050 SAVEPOINT SWITCHER;
11051 l_rollback_flag := 'Y';
11052 --log1('8 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11053
11054 -- Bug 4431269: Populating the global variables to be used in calculate api
11055 -- for error reporting purpose
11056 G_FP_WA_CALC_CALLING_CONTEXT := 'WEBADI_CALCULATE';
11057
11058 process_budget_lines
11059 ( p_context => l_prep_pbl_calling_context,
11060 p_budget_version_id => l_budget_version_id,
11061 p_version_info_rec => l_version_info_rec,
11062 p_task_id_tbl => l_task_id_tbl,
11063 p_rlm_id_tbl => l_rlm_id_tbl,
11064 p_ra_id_tbl => l_prc_ra_id_tbl,
11065 p_spread_curve_id_tbl => l_spread_curve_id_tbl,
11066 p_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl,
11067 p_etc_method_code_tbl => l_etc_method_code_tbl,
11068 p_sp_fixed_date_tbl => l_sp_fixed_date_tbl,
11069 p_res_class_code_tbl => l_prc_res_class_code_tbl,
11070 p_rate_based_flag_tbl => l_prc_rate_based_flag_tbl,
11071 p_rbs_elem_id_tbl => l_prc_rbs_elem_id_tbl,
11072 p_txn_currency_code_tbl => l_txn_currency_code_tbl,
11073 p_planning_start_date_tbl => l_planning_start_date_tbl,
11074 p_planning_end_date_tbl => l_planning_end_date_tbl,
11075 p_total_qty_tbl => l_total_qty_tbl,
11076 p_total_raw_cost_tbl => l_total_raw_cost_tbl,
11077 p_total_burdened_cost_tbl => l_total_burdened_cost_tbl,
11078 p_total_revenue_tbl => l_total_revenue_tbl,
11079 p_raw_cost_rate_tbl => l_raw_cost_rate_tbl,
11080 p_burdened_cost_rate_tbl => l_burdened_cost_rate_tbl,
11081 p_bill_rate_tbl => l_bill_rate_tbl,
11082 p_line_start_date_tbl => l_line_start_date_tbl,
11083 p_line_end_date_tbl => l_line_end_date_tbl,
11084 p_proj_cost_rate_type_tbl => l_proj_cost_rate_type_tbl,
11085 p_proj_cost_rate_date_type_tbl => l_proj_cost_rate_date_type_tbl,
11086 p_proj_cost_rate_tbl => l_proj_cost_rate_tbl,
11087 p_proj_cost_rate_date_tbl => l_proj_cost_rate_date_tbl,
11088 p_proj_rev_rate_type_tbl => l_proj_rev_rate_type_tbl,
11089 p_proj_rev_rate_date_type_tbl => l_proj_rev_rate_date_type_tbl,
11090 p_proj_rev_rate_tbl => l_proj_rev_rate_tbl,
11091 p_proj_rev_rate_date_tbl => l_proj_rev_rate_date_tbl,
11092 p_pfunc_cost_rate_type_tbl => l_pfunc_cost_rate_type_tbl,
11093 p_pfunc_cost_rate_date_typ_tbl => l_pfunc_cost_rate_date_typ_tbl,
11094 p_pfunc_cost_rate_tbl => l_pfunc_cost_rate_tbl,
11095 p_pfunc_cost_rate_date_tbl => l_pfunc_cost_rate_date_tbl,
11096 p_pfunc_rev_rate_type_tbl => l_pfunc_rev_rate_type_tbl,
11097 p_pfunc_rev_rate_date_type_tbl => l_pfunc_rev_rate_date_type_tbl,
11098 p_pfunc_rev_rate_tbl => l_pfunc_rev_rate_tbl,
11099 p_pfunc_rev_rate_date_tbl => l_pfunc_rev_rate_date_tbl,
11100 p_change_reason_code_tbl => l_change_reason_code_tbl,
11101 p_description_tbl => l_description_tbl,
11102 p_delete_flag_tbl => l_delete_flag_tbl,
11103 x_return_status => x_return_status,
11104 x_msg_count => l_msg_count,
11105 x_msg_data => l_msg_data);
11106 --log1('9 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11107 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11108 IF l_debug_mode = 'Y' THEN
11109 pa_debug.g_err_stage := 'Call to process_budget_lines returned with error';
11110 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11111 END IF;
11112 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11113 END IF;
11114 -- Bug 4431269: Clearing the global variables used in calculate api
11115 -- for error reporting purpose
11116 G_FP_WA_CALC_CALLING_CONTEXT := null;
11117
11118 IF l_debug_mode = 'Y' THEN
11119 pa_debug.g_err_stage := 'Call to process_budget_lines done';
11120 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11121 END IF;
11122 --log1('10 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11123 -- if the submit flag is passed as Y, then calling api to submit the version
11124 IF p_submit_budget_flag = 'Y' OR
11125 p_submit_forecast_flag = 'Y' THEN
11126 IF l_debug_mode = 'Y' THEN
11127 pa_debug.g_err_stage := 'Calling pa_fin_plan_pub.Submit_Current_Working';
11128 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11129 END IF;
11130 pa_fin_plan_pub.Submit_Current_Working
11131 (p_project_id => l_version_info_rec.x_project_id,
11132 p_budget_version_id => l_budget_version_id,
11133 p_record_version_number => l_rec_version_number,
11134 x_return_status => x_return_status,
11135 x_msg_count => l_msg_count,
11136 x_msg_data => l_msg_data);
11137
11138 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11139 IF l_debug_mode = 'Y' THEN
11140 pa_debug.g_err_stage := 'Call to pa_fin_plan_pub.Submit_Current_Working returned with error';
11141 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11142 END IF;
11143 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11144 END IF;
11145 END IF;
11146 --log1('11 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11147 --log1('----- STAGE 13-------');
11148 -- If upload is successful then delete all the records
11149 -- from interface table
11150 IF l_debug_mode = 'Y' THEN
11151 pa_debug.g_err_stage := 'deleting from upload temp table';
11152 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
11153 END IF;
11154 --log1('12 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11155
11156 pa_fp_webadi_pkg.DELETE_XFACE
11157 ( p_run_id => p_run_id
11158 ,x_return_status => x_return_status
11159 ,x_msg_count => x_msg_count
11160 ,x_msg_data => l_msg_data --x_msg_data Bug 2764950
11161 ) ;
11162 --log1('13 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11163 COMMIT; /* to commit the data in DB after successful processing */
11164 --log1('14 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11165 --log1('----- STAGE 14-------');
11166 IF l_debug_mode = 'Y' THEN
11167 pa_debug.g_err_stage := 'Leaving pa_fp_webadi_pkg.switcher';
11168 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11169 pa_debug.reset_curr_function;
11170 END IF;
11171
11172 --log1('----- Leaving Switcher api ------- '||x_return_status);
11173 --log1('End '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11174 EXCEPTION
11175
11176 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11177 IF l_debug_mode = 'Y' THEN
11178 pa_debug.g_err_stage := 'Invalid Arg Exception Raised in Switcher';
11179 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11180 pa_debug.g_err_stage := 'Checking for errors';
11181 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11182 END IF;
11183
11184 -- Bug 4431269: Clearing the global variables used in calculate api
11185 -- for error reporting purpose
11186 G_FP_WA_CALC_CALLING_CONTEXT := null;
11187 IF l_rollback_flag='Y' THEN
11188 IF l_debug_mode = 'Y' THEN
11189 pa_debug.g_err_stage := 'Rolling back to switcher';
11190 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11191 END IF;
11192 ROLLBACK TO SWITCHER;
11193 IF l_debug_mode = 'Y' THEN
11194 pa_debug.g_err_stage := 'Roll back to switcher done';
11195 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11196 END IF;
11197 END IF;
11198
11199 -- checking if calculate has populated any errors in the global table
11200 IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
11201 -- calling an api to process the errors passed
11202 read_global_var_to_report_err
11203 (p_run_id => p_run_id,
11204 x_return_status => x_return_status,
11205 x_msg_count => l_msg_count,
11206 x_msg_data => l_msg_data);
11207 END IF;
11208
11209 IF l_set_ppc_flag_on_err ='Y' THEN
11210 update_xl_data_for_new_req
11211 (p_request_id => l_request_id,
11212 p_run_id => p_run_id,
11213 p_plan_processing_code => 'XLUE',
11214 p_budget_version_id => l_budget_version_id,
11215 p_null_out_cols => 'N');
11216
11217 END IF;
11218
11219 COMMIT;
11220
11221 l_msg_count := FND_MSG_PUB.count_msg;
11222
11223 IF l_msg_count = 1 and x_msg_data IS NULL THEN
11224 PA_INTERFACE_UTILS_PUB.get_messages
11225 (p_encoded => FND_API.G_TRUE
11226 ,p_msg_index => 1
11227 ,p_msg_count => l_msg_count
11228 ,p_msg_data => l_msg_data
11229 ,p_data => l_data
11230 ,p_msg_index_out => l_msg_index_out);
11231 x_msg_data := l_data;
11232 x_msg_count := l_msg_count;
11233 x_success_msg:=l_data;
11234 ELSE
11235 x_msg_count := l_msg_count;
11236 x_success_msg :='Error In Upload';
11237 END IF;
11238
11239 x_return_status := FND_API.G_RET_STS_ERROR;
11240
11241 IF l_debug_mode = 'Y' THEN
11242 pa_debug.reset_curr_function;
11243 END IF;
11244 RETURN;
11245
11246 WHEN OTHERS THEN
11247 -- Bug 4431269: Clearing the global variables used in calculate api
11248 -- for error reporting purpose
11249 G_FP_WA_CALC_CALLING_CONTEXT := null;
11250
11251 IF l_rollback_flag='Y' THEN
11252 ROLLBACK TO SWITCHER;
11253 END IF;
11254 x_success_msg :='Error In Upload';
11255
11256 -- checking if calculate has populated any errors in the global table
11257 IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
11258 -- calling an api to process the errors passed
11259 read_global_var_to_report_err
11260 (p_run_id => p_run_id,
11261 x_return_status => x_return_status,
11262 x_msg_count => l_msg_count,
11263 x_msg_data => l_msg_data);
11264 END IF;
11265
11266 IF l_set_ppc_flag_on_err ='Y' THEN
11267 update_xl_data_for_new_req
11268 (p_request_id => l_request_id,
11269 p_run_id => p_run_id,
11270 p_plan_processing_code => 'XLUE',
11271 p_budget_version_id => l_budget_version_id,
11272 p_null_out_cols => 'N');
11273
11274 END IF;
11275 COMMIT;
11276 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11277 x_msg_count := 1;
11278 x_msg_data := SQLERRM;
11279
11280 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
11281 ,p_procedure_name => 'switcher');
11282 IF l_debug_mode = 'Y' THEN
11283 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
11284 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
11285 END IF;
11286
11287 IF l_debug_mode = 'Y' THEN
11288 pa_debug.reset_curr_function;
11289 END IF;
11290 RAISE;
11291
11292 END switcher;
11293
11294 --This API will be called when thru the concurrent request that will be used to upload MS excel data to
11295 --Oracle Applications.
11296 PROCEDURE process_MSExcel_data
11297 (errbuf OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
11298 retcode OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
11299 p_submit_ver_flag IN VARCHAR2,
11300 p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE)
11301 IS
11302 --Start of variables used for debugging
11303 l_return_status VARCHAR2(1);
11304 l_msg_count NUMBER := 0;
11305 l_msg_data VARCHAR2(2000);
11306 l_data VARCHAR2(2000);
11307 l_msg_index_out NUMBER;
11308 l_debug_mode VARCHAR2(30);
11309 l_module_name VARCHAR2(100):='PAFPWAPB.process_MSExcel_data';
11310
11311 --End of variables used for debugging
11312 l_budget_version_id pa_budget_versions.budget_version_id%TYPE;
11313 l_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE;
11314 l_request_id pa_budget_versions.request_id%TYPE;
11315 l_submit_bdgt_flag VARCHAR2(1);
11316 l_submit_fcst_flag VARCHAR2(1);
11317 l_version_type pa_budget_versions.version_type%TYPE;
11318 l_success_msg VARCHAR2(1000);
11319
11320 -- the following cursor would query the interface table for any validation failure
11321 -- error messages present in the interface table corresponding to a set of run_id
11322 -- for the upload session.
11323
11324 CURSOR l_get_error_msg_to_report_csr (c_run_id pa_fp_webadi_upload_inf.run_id%TYPE,
11325 c_plan_class pa_fin_plan_types_b.plan_class_code%TYPE,
11326 c_version_type pa_budget_versions.version_type%TYPE,
11327 c_request_id pa_budget_versions.request_id%TYPE)
11328 IS
11329 -- 4497321.Perf Fix:Modified SELECT query inorder to improve the performance.
11330 SELECT inf.task_number || '/' || inf.task_name task_info,
11331 inf.resource_alias resource_info,
11332 inf.txn_currency_code currency,
11333 plu1.meaning amount_type,
11334 plu2.meaning error
11335 FROM pa_fp_webadi_upload_inf inf,
11336 pa_lookups plu1,
11337 pa_lookups plu2
11338 WHERE inf.run_id = c_run_id
11339 AND Nvl(inf.val_error_flag, 'N') = 'Y'
11340 AND inf.val_error_code IS NOT NULL
11341 AND plu1.lookup_type = DECODE (c_plan_class, 'BUDGET',
11342 DECODE(c_version_type,
11343 'COST', 'PA_FP_XL_COST_BDGT_AMT_TYPES',
11344 'REVENUE', 'PA_FP_XL_REV_BDGT_AMT_TYPES',
11345 'PA_FP_XL_ALL_BDGT_AMT_TYPES'),
11346 'FORECAST', DECODE(c_version_type,
11347 'COST', 'PA_FP_XL_COST_FCST_AMT_TYPES',
11348 'REVENUE', 'PA_FP_XL_REV_FCST_AMT_TYPES',
11349 'PA_FP_XL_ALL_FCST_AMT_TYPES'))
11350 AND (inf.amount_type_code IS NULL OR plu1.lookup_code = Nvl(inf.amount_type_code, '-99'))
11351 AND plu2.lookup_type = 'PA_FP_WEBADI_ERR_1'
11352 AND inf.val_error_code = plu2.lookup_code
11353 AND Nvl(c_request_id, -99) = Nvl(inf.request_id, -99);
11354
11355 l_error_info_rec l_get_error_msg_to_report_csr%ROWTYPE;
11356
11357 BEGIN
11358 -- SAVEPOINT process_MSExcel_data;
11359 retcode:='0';
11360 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
11361 l_debug_mode := NVL(l_debug_mode, 'Y');
11362 --log1('----- STAGE CR1-------');
11363 -- Set curr function
11364 IF l_debug_mode='Y' THEN
11365 pa_debug.set_curr_function(
11366 p_function =>'PAFPWAPB.process_MSExcel_data'
11367 ,p_debug_mode => l_debug_mode );
11368 END IF;
11369
11370 l_request_id:=fnd_global.conc_request_id;
11371 --log1('----- STAGE CR2-------');
11372 --log1('----- p_run_id------' || p_run_id);
11373 --log1('----- p_submit_ver_flag------' || p_submit_ver_flag);
11374 --Get the budget version id from the interface table to find out whether the budget version belongs to a
11375 --BUDGET plan type or FORECAST plan type
11376
11377 -- 4497323.Perf Fix:The SELECT query is splitted into two queries in order to improve performance.
11378 SELECT budget_version_id
11379 INTO l_budget_version_id
11380 FROM pa_fp_webadi_upload_inf inf
11381 WHERE inf.run_id = p_run_id
11382 AND Nvl(l_request_id,-99) = Nvl(request_id,-99)
11383 AND rownum=1;
11384
11385 SELECT fin.plan_class_code,
11386 pbv.version_type
11387 INTO l_plan_class_code,
11388 l_version_type
11389 FROM pa_budget_versions pbv,
11390 pa_fin_plan_types_b fin
11391 WHERE pbv.budget_version_id = l_budget_version_id
11392 AND fin.fin_plan_type_id = pbv.fin_plan_type_id;
11393
11394 --log1('----- STAGE CR3-------');
11395 IF l_debug_mode='Y' THEN
11396 pa_debug.g_err_stage:='l_request_id '||l_request_id;
11397 pa_debug.write( l_module_name,pa_debug.g_err_stage,3);
11398
11399 pa_debug.g_err_stage:='Callng update_xl_data_for_new_req';
11400 pa_debug.write( l_module_name,pa_debug.g_err_stage,3);
11401
11402 END IF;
11403 --log1('----- STAGE CR4-------');
11404 update_xl_data_for_new_req
11405 (p_request_id => l_request_id,
11406 p_run_id => p_run_id,
11407 p_plan_processing_code => 'XLUP',
11408 p_budget_version_id => l_budget_version_id,
11409 p_null_out_cols => 'Y');
11410 --log1('----- STAGE CR5-------');
11411 COMMIT;--This is done so that the users can find that the concurrent request is in progress from the other
11412 --interfaces.
11413 --log1('----- STAGE CR6-------');
11414 l_submit_bdgt_flag:='N';
11415 l_submit_fcst_flag:='N';
11416 IF l_plan_class_code='BUDGET' THEN
11417
11418 l_submit_bdgt_flag:=p_submit_ver_flag;
11419 ELSE
11420 l_submit_fcst_flag:=p_submit_ver_flag;
11421 END IF;
11422 --log1('----- STAGE CR7-------');
11423 pa_fp_webadi_pkg.switcher
11424 (p_calling_mode => 'ONLINE',
11425 p_run_id => p_run_id,
11426 p_submit_budget_flag => l_submit_bdgt_flag,
11427 p_submit_forecast_flag => l_submit_fcst_flag,
11428 p_request_id => l_request_id,
11429 x_success_msg => l_success_msg,
11430 x_return_status => l_return_status,
11431 x_msg_count => l_msg_count,
11432 x_msg_data => l_msg_data);
11433 --log1('----- STAGE CR8-------');
11434 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11435 --log1('----- STAGE CR9-------');
11436 IF l_debug_mode = 'Y' THEN
11437 pa_debug.g_err_stage:='pa_fp_webadi_pkg.switcher returned error';
11438 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11439 END IF;
11440 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11441 END IF;
11442
11443 -- upon successful completion of the concurrent processing,
11444 -- stamp success code in pa_budget_versions and retain the request_id
11445 UPDATE pa_budget_versions
11446 SET plan_processing_code = 'XLUS',
11447 record_version_number = (record_version_number + 1)
11448 WHERE budget_version_id = l_budget_version_id;
11449
11450 COMMIT; -- is required to query the interface table from conc prog.
11451 --log1('----- STAGE 10-------');
11452 IF l_debug_mode = 'Y' THEN
11453 pa_debug.reset_curr_function;
11454 END IF;
11455
11456 EXCEPTION
11457 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11458 -- ROLLBACK TO process_MSExcel_data;
11459 -- bug 4477397: doing a general rollback instead to savepoint
11460 ROLLBACK;
11461 l_msg_count := FND_MSG_PUB.count_msg;
11462 IF l_msg_count = 1 THEN
11463 PA_INTERFACE_UTILS_PUB.get_messages
11464 (p_encoded => FND_API.G_TRUE
11465 ,p_msg_index => 1
11466 ,p_msg_count => l_msg_count
11467 ,p_msg_data => l_msg_data
11468 ,p_data => l_data
11469 ,p_msg_index_out => l_msg_index_out);
11470
11471 errbuf := l_data;
11472
11473 END IF;
11474 retcode := '2'; --Changed this to '2' for bug #4504482
11475 --log1('----- STAGE CR10-------');
11476 -- preparing an output error log to display all the validation failures, if any,
11477 -- corresponding to a particular record in the interface table
11478 IF l_debug_mode = 'Y' THEN
11479 --Before calling pa_debug.write_file we shd call pa_debug.set_process if we want write_file to write to the log file.
11480 pa_debug.set_process( x_process => 'PLSQL'
11481 ,x_write_file => 'LOG'
11482 ,x_debug_mode => l_debug_mode
11483 );
11484 pa_debug.g_err_stage := '- Task Number/Task Name, Resource, Currency, Amount Type, Error - ';
11485 pa_debug.write_file('LOG', pa_debug.g_err_stage);
11486 pa_debug.g_err_stage := '------------------------------------------------------------------';
11487 pa_debug.write_file('LOG', pa_debug.g_err_stage);
11488
11489 OPEN l_get_error_msg_to_report_csr(p_run_id, l_plan_class_code, l_version_type, l_request_id);
11490 LOOP
11491 FETCH l_get_error_msg_to_report_csr
11492 INTO l_error_info_rec;
11493
11494 EXIT WHEN l_error_info_rec.task_info IS NULL;
11495
11496 pa_debug.g_err_stage := l_error_info_rec.task_info || ', ' || l_error_info_rec.resource_info || ', ' ||
11497 l_error_info_rec.currency || ', ' || l_error_info_rec.amount_type || ', ' ||
11498 l_error_info_rec.error;
11499 pa_debug.write_file('LOG', pa_debug.g_err_stage);
11500 END LOOP;
11501 CLOSE l_get_error_msg_to_report_csr;
11502
11503 --Bug 4504482: Added code to read the msg stack and populate the concurrent
11504 --program log in addition to the interface table.
11505 pa_debug.g_err_stage := '-----------------Additional Errors--------------------------------';
11506 pa_debug.write_file('LOG', pa_debug.g_err_stage);
11507 FOR msg_count IN 1 .. l_msg_count
11508 LOOP
11509 PA_UTILS.Get_Encoded_Msg(p_index => msg_count,
11510 p_msg_out => l_data);
11511 pa_debug.g_err_stage := l_data;
11512 pa_debug.write_file('LOG', pa_debug.g_err_stage);
11513 END LOOP;
11514
11515 END IF;
11516
11517 IF l_debug_mode = 'Y' THEN
11518 pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
11519 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11520 -- reset curr function
11521 pa_debug.reset_curr_function();
11522 END IF;
11523 --log1('----- STAGE CR11-------');
11524 update_xl_data_for_new_req
11525 (p_request_id => l_request_id,
11526 p_run_id => p_run_id,
11527 p_plan_processing_code => 'XLUE',
11528 p_budget_version_id => l_budget_version_id,
11529 p_null_out_cols => 'N');
11530 --log1('----- STAGE CR12-------');
11531 COMMIT;
11532 --log1('----- STAGE CR13-------');
11533 RETURN;
11534 WHEN OTHERS THEN
11535 -- ROLLBACK TO process_MSExcel_data;
11536 -- bug 4477397: doing a general rollback instead to savepoint
11537 ROLLBACK;
11538 errbuf := SQLERRM;
11539
11540 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
11541 ,p_procedure_name => 'process_MSExcel_data');
11542
11543 IF l_debug_mode = 'Y' THEN
11544 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
11545 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11546 -- reset curr function
11547 pa_debug.Reset_Curr_Function();
11548 END IF;
11549 retcode := '2';
11550
11551 update_xl_data_for_new_req
11552 (p_request_id => l_request_id,
11553 p_run_id => p_run_id,
11554 p_plan_processing_code => 'XLUE',
11555 p_budget_version_id => l_budget_version_id,
11556 p_null_out_cols => 'N');
11557
11558 COMMIT;
11559 RAISE;
11560 END process_MSExcel_data;
11561
11562
11563 --Bug 4584865
11564 /*This api is a private api which is called to calculate the Group Period information
11565 of the budget version based on the period mask of the budget version.The calculated
11566 Group Periods are stored in the OUT parameter x_periods_tbl.*/
11567
11568 PROCEDURE GET_PERIOD_INFORMATION(p_period_mask_id IN pa_proj_fp_options.cost_period_mask_id%TYPE,
11569 p_time_phased_code IN pa_proj_fp_options.cost_time_phased_code%TYPE,
11570 p_org_id IN pa_projects_all.org_id%TYPE,
11571 p_current_planning_period IN pa_proj_fp_options.cost_current_planning_period%TYPE,
11572 x_periods_tbl OUT NOCOPY periods_tbl,
11573 x_return_status OUT NOCOPY VARCHAR2,
11574 x_msg_count OUT NOCOPY NUMBER,
11575 x_msg_data OUT NOCOPY NUMBER)
11576 IS
11577 --This Cursor is used to get Period Mask informations of the Period Mask associated with the budget version.
11578 CURSOR period_mask_cur(c_period_mask_id pa_period_mask_details.period_mask_id%TYPE)
11579 IS
11580 SELECT pmd.period_mask_id,
11581 pmd.num_of_periods,
11582 pmd.anchor_period_flag,
11583 pmd.from_anchor_start,
11584 pmd.from_anchor_end,
11585 pmd.from_anchor_position
11586 FROM pa_period_mask_details pmd
11587 WHERE pmd.period_mask_id = c_period_mask_id
11588 AND pmd.from_anchor_position not in(-99999,99999)
11589 ORDER BY pmd.from_anchor_position;
11590 --PL/SQL table created based on Cursor period_mask_cur.
11591 TYPE period_mask_tbl IS TABLE OF period_mask_cur%ROWTYPE;
11592
11593 CURSOR pa_impl_cur(c_org_id pa_implementations_all.org_id%TYPE)
11594 IS
11595 SELECT org_id,
11596 period_set_name,
11597 pa_period_type,
11598 set_of_books_id
11599 FROM pa_implementations_all
11600 WHERE org_id = c_org_id;
11601
11602 --This Cursor is used to get period information based on the Time Phasing of the budget version.
11603 CURSOR period_grouping_cur(c_period_set_name gl_periods.period_set_name%TYPE,
11604 c_set_of_books_id gl_sets_of_books.set_of_books_id%TYPE,
11605 c_org_id pa_implementations_all.org_id%TYPE,
11606 c_pa_period_type pa_implementations_all.pa_period_type%TYPE,
11607 c_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE)
11608 IS
11609 SELECT ROW_NUMBER() OVER( PARTITION BY gl.period_set_name,gl.period_type ORDER BY gl.start_date ) row_num,
11610 gl.start_date start_date,
11611 gl.end_Date end_date,
11612 gl.period_name period_name,
11613 gl.period_type period_type,
11614 gl.period_set_name period_set_name,
11615 gsb.accounted_period_type accounted_period_type,
11616 c_org_id
11617 FROM gl_periods gl,
11618 gl_sets_of_books gsb
11619 WHERE gl.period_set_name=decode(c_time_phased_code,'P',c_period_set_name,'G',gsb.period_set_name)
11620 AND gsb.set_of_books_id=c_set_of_books_id
11621 AND gl.ADJUSTMENT_PERIOD_FLAG ='N'
11622 AND gl.period_type = decode(c_time_phased_code,'P',c_pa_period_type,
11623 'G',gsb.accounted_period_type);
11624 --PL/SQL table created based on Cursor period_grouping_cur.
11625 TYPE period_grouping_tbl IS TABLE OF period_grouping_cur%ROWTYPE
11626 INDEX BY PLS_INTEGER;
11627
11628 l_debug_mode VARCHAR2(1);
11629 l_return_status VARCHAR2(1);
11630 l_data VARCHAR2(2000);
11631 l_msg_count NUMBER := 0;
11632 l_msg_data VARCHAR2(2000);
11633 l_msg_index_out NUMBER;
11634 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.get_period_information';
11635 l_period_mask_tbl period_mask_tbl;
11636 l_pa_impl_rec pa_impl_cur%ROWTYPE;
11637 l_period_grouping_tbl period_grouping_tbl;
11638 l_periods_rec periods_rec;
11639 glcp_rownum NUMBER;
11640 glsd_rownum NUMBER;
11641 gled_rownum NUMBER;
11642 period_name VARCHAR2(50); --gl_periods.period_name%TYPE;
11643 start_date gl_periods.start_date%TYPE;
11644 end_date gl_periods.end_date%TYPE;
11645 x NUMBER := 1;
11646 BEGIN
11647 x_msg_count := 0;
11648 x_return_status := FND_API.G_RET_STS_SUCCESS;
11649 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'Y');
11650
11651 IF l_debug_mode = 'Y' THEN
11652 pa_debug.set_curr_function(p_function => 'GET_PERIOD_INFORMATION',
11653 p_debug_mode => l_debug_mode);
11654 pa_debug.g_err_stage := ':In pa_fp_webadi_pkg.GET_PERIOD_INFORMATION';
11655 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11656 END IF;
11657 --Validation is done for the input parameters.
11658 IF l_debug_mode = 'Y' THEN
11659 pa_debug.g_err_stage := 'Validating Input parameters';
11660 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11661 END IF;
11662
11663 IF p_period_mask_id IS NULL THEN
11664 IF l_debug_mode = 'Y' THEN
11665 pa_debug.g_err_stage := 'p_period_mask_id is passed as null';
11666 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11667 END IF;
11668 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11669 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
11670 p_token1 => 'PROCEDURENAME',
11671 p_value1 => l_module_name);
11672 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11673 END IF;
11674
11675 IF p_time_phased_code IS NULL THEN
11676 IF l_debug_mode = 'Y' THEN
11677 pa_debug.g_err_stage := 'p_time_phased_code is passed as null';
11678 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11679 END IF;
11680 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11681 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
11682 p_token1 => 'PROCEDURENAME',
11683 p_value1 => l_module_name);
11684 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11685 END IF;
11686
11687 IF p_org_id IS NULL THEN
11688 IF l_debug_mode = 'Y' THEN
11689 pa_debug.g_err_stage := 'p_org_id is passed as null';
11690 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11691 END IF;
11692 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11693 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
11694 p_token1 => 'PROCEDURENAME',
11695 p_value1 => l_module_name);
11696 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11697 END IF;
11698
11699 IF p_current_planning_period IS NULL THEN
11700 IF l_debug_mode = 'Y' THEN
11701 pa_debug.g_err_stage := 'p_current_planning_period is passed as null';
11702 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11703 END IF;
11704 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11705 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
11706 p_token1 => 'PROCEDURENAME',
11707 p_value1 => l_module_name);
11708 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11709 END IF;
11710 --Initializing the out parameter which is pl/sql table.
11711 x_periods_tbl := periods_tbl();
11712
11713 --Getting the Period Mask details of the period mask associated with the budget version.
11714 OPEN period_mask_cur(p_period_mask_id);
11715 FETCH period_mask_cur BULK COLLECT INTO l_period_mask_tbl;
11716 CLOSE period_mask_cur;
11717 IF l_period_mask_tbl.count = 0 THEN
11718 IF l_debug_mode = 'Y' THEN
11719 pa_debug.g_err_stage := 'Period Mask Details not found for the budget version';
11720 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11721 END IF;
11722 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11723 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
11724 p_token1 => 'PROCEDURENAME',
11725 p_value1 => l_module_name);
11726 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11727 END IF;
11728
11729 --Information are got from pa_implentations_all table for the project org_id and stored in a pl/sql record.
11730 OPEN pa_impl_cur(p_org_id);
11731 FETCH pa_impl_cur INTO l_pa_impl_rec;
11732 CLOSE pa_impl_cur;
11733
11734 --Period Informations are got from gl_periods table and stored in a pl/sql table.
11735 FOR rec in period_grouping_cur(l_pa_impl_rec.period_set_name,
11736 l_pa_impl_rec.set_of_books_id,
11737 l_pa_impl_rec.org_id,
11738 l_pa_impl_rec.pa_period_type,
11739 p_time_phased_code)
11740 LOOP
11741 l_period_grouping_tbl(rec.row_num) := rec;
11742 END LOOP;
11743
11744 --Getting the row number of the Current Planning period from the pl/sql table l_period_grouping_tbl.
11745 IF l_period_grouping_tbl.count >0 THEN
11746 FOR n IN l_period_grouping_tbl.first..l_period_grouping_tbl.last
11747 LOOP
11748 IF l_period_grouping_tbl(n).period_name = p_current_planning_period THEN
11749 glcp_rownum := l_period_grouping_tbl(n).row_num;
11750 EXIT;
11751 END IF;
11752 END LOOP;
11753 ELSE
11754 IF l_debug_mode = 'Y' THEN
11755 pa_debug.g_err_stage := 'Period information not found for the budget version';
11756 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11757 END IF;
11758 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11759 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
11760 p_token1 => 'PROCEDURENAME',
11761 p_value1 => l_module_name);
11762 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11763 END IF;
11764
11765 --The Group Period informations are got and stored in a pl/sql table based on the Period Mask.
11766 FOR i IN l_period_mask_tbl.first..l_period_mask_tbl.last
11767 LOOP
11768 glsd_rownum := l_period_mask_tbl(i).from_anchor_start+glcp_rownum;
11769 gled_rownum := l_period_mask_tbl(i).from_anchor_end+glcp_rownum;
11770 IF glsd_rownum >= l_period_grouping_tbl.first AND gled_rownum <= l_period_grouping_tbl.last THEN
11771 IF glsd_rownum = gled_rownum THEN
11772 period_name := l_period_grouping_tbl(glsd_rownum).period_name;
11773 ELSE
11774 period_name := l_period_grouping_tbl(glsd_rownum).period_name||' To '||l_period_grouping_tbl(gled_rownum).period_name;
11775 END IF;
11776 start_date := l_period_grouping_tbl(glsd_rownum).start_date;
11777 end_date := l_period_grouping_tbl(gled_rownum).end_date;
11778 l_periods_rec.sequence_number := x;
11779 l_periods_rec.period_name := period_name;
11780 l_periods_rec.start_date := start_date;
11781 l_periods_rec.end_date := end_date;
11782 x_periods_tbl.extend();
11783 x_periods_tbl(x) := l_periods_rec;
11784 x := x+1;
11785 ELSE
11786 NULL;
11787 END IF;
11788 END LOOP;
11789
11790 EXCEPTION
11791 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11792 l_msg_count := FND_MSG_PUB.count_msg;
11793 IF l_msg_count = 1 AND x_msg_data IS NULL THEN
11794 PA_INTERFACE_UTILS_PUB.get_messages
11795 (p_encoded => FND_API.G_TRUE
11796 ,p_msg_index => 1
11797 ,p_msg_count => l_msg_count
11798 ,p_msg_data => l_msg_data
11799 ,p_data => l_data
11800 ,p_msg_index_out => l_msg_index_out);
11801 x_msg_data := l_data;
11802 x_msg_count := l_msg_count;
11803 ELSE
11804 x_msg_count := l_msg_count;
11805 END IF;
11806 x_return_status := FND_API.G_RET_STS_ERROR;
11807 IF l_debug_mode = 'Y' THEN
11808 pa_debug.reset_curr_function;
11809 END IF;
11810 RETURN;
11811
11812 WHEN OTHERS THEN
11813 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11814 x_msg_count := 1;
11815 x_msg_data := SQLERRM;
11816 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
11817 ,p_procedure_name => 'get_period_information');
11818 IF l_debug_mode = 'Y' THEN
11819 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
11820 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11821 pa_debug.reset_curr_function;
11822 END IF;
11823 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11824 END GET_PERIOD_INFORMATION;
11825
11826 --Bug 4584865.
11827 --This API is called to insert records into pa_fp_webadi_xface_tmp
11828 --during downloading budget line details into excel spreadsheet.
11829
11830 PROCEDURE insert_periodic_tmp_table
11831 (p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE
11832 ,x_return_status OUT NOCOPY VARCHAR2
11833 ,x_msg_count OUT NOCOPY NUMBER
11834 ,x_msg_data OUT NOCOPY VARCHAR2 )
11835 IS
11836 /* Bug 5144013: Changes are made in the cursor to make use of the new entity pa_resource_asgn_curr
11837 which is introduced in MRUP3 of 11i. The changes are done as part of merging the MRUP3 changes
11838 done in 11i into R12.
11839 */
11840 --This Cursor is used to get Resource Assignment information associated with the budget version.
11841 CURSOR res_ass_cur(c_budget_version_id pa_budget_versions.budget_version_id%TYPE,
11842 c_project_id pa_projects_all.project_id%TYPE,
11843 c_parent_structure_version_id pa_proj_element_versions.parent_structure_version_id%TYPE,
11844 c_proj_fp_options_id pa_proj_fp_options.proj_fp_options_id%TYPE)
11845 IS
11846 SELECT pra.resource_assignment_id resource_assignment_id,
11847 nvl(pe.name,ppa.long_name) task_name,
11848 nvl(pe.element_number,ppa.segment1) task_number,
11849 nvl(pev.display_sequence,-1) task_display_sequence,
11850 prlm.alias resource_name,
11851 pra.resource_list_member_id,
11852 uom.meaning unit_of_measure,
11853 pra.spread_curve_id spread_curve_id,
11854 psc.name spread_curve,
11855 pra.planning_start_date,
11856 pra.planning_end_date,
11857 pra.mfc_cost_type_id mfc_cost_type_id,
11858 cct.cost_type mfc_cost_type,
11859 pra.etc_method_code etc_method_code,
11860 etc.meaning etc_method,
11861 pev.proj_element_id project_element_id,
11862 decode(pra.transaction_source_code,NULL,NULL,
11863 (SELECT meaning
11864 FROM PA_LOOKUPS
11865 WHERE LOOKUP_TYPE='PA_FP_FCST_GEN_SRC_ALL'
11866 AND LOOKUP_CODE= nvl(pra.transaction_source_code, (
11867 SELECT lookup_code
11868 FROM pa_lookups
11869 WHERE lookup_type='PA_FP_FCST_GEN_SRC_ALL'
11870 AND rownum=1)))) etc_source,
11871 pftc.txn_currency_code txn_currency_code,
11872 pftc.project_cost_exchange_rate project_cost_exchange_rate,
11873 pftc.project_rev_exchange_rate project_rev_exchange_rate,
11874 pftc.projfunc_cost_exchange_rate projfunc_cost_exchange_rate,
11875 pftc.projfunc_rev_exchange_rate projfunc_rev_exchange_rate
11876 FROM pa_resource_assignments pra,
11877 pa_resource_asgn_curr prac,
11878 pa_fp_txn_currencies pftc,
11879 pa_proj_elements pe,
11880 pa_proj_element_versions pev,
11881 pa_resource_list_members prlm,
11882 pa_lookups uom,
11883 pa_spread_curves_tl psc,
11884 cst_cost_types cct,
11885 pa_lookups etc,
11886 pa_projects_all ppa
11887 WHERE pra.budget_version_id = c_budget_version_id
11888 AND prac.budget_version_id = pra.budget_version_id
11889 AND prac.resource_assignment_id = pra.resource_assignment_id
11890 AND pftc.fin_plan_version_id = prac.budget_version_id
11891 AND pftc.txn_currency_code = prac.txn_currency_code
11892 AND pftc.proj_fp_options_id = c_proj_fp_options_id
11893 AND pra.resource_list_member_id = prlm.resource_list_member_id
11894 AND decode(pra.task_id,0,pev.proj_element_id,pra.task_id)=pev.proj_element_id
11895 AND decode(pra.task_id,0,pev.parent_structure_version_id,pev.element_version_id)=pev.element_version_id
11896 AND pev.proj_element_id = pe.proj_element_id(+)
11897 AND pe.object_type(+)='PA_TASKS'
11898 AND pev.parent_structure_version_id = c_parent_structure_version_id
11899 AND nvl(pra.spread_curve_id,1) = psc.spread_curve_id
11900 AND etc.lookup_type = 'PA_FP_ETC_METHOD'
11901 AND etc.lookup_code(+) = pra.etc_method_code
11902 AND cct.cost_type_id(+) = pra.mfc_cost_type_id
11903 AND uom.lookup_type = 'UNIT'
11904 AND uom.LOOKUP_CODE = nvl(prlm.UNIT_OF_MEASURE,'HOURS')
11905 AND psc.language = userenv('LANG')
11906 AND ppa.project_id = c_project_id
11907 ORDER BY task_display_sequence;
11908 --PL/SQL table created based on Cursor res_ass_cur.
11909 TYPE res_ass_tbl IS TABLE OF res_ass_cur%ROWTYPE; --Bug 5641300: Converted the index by pl/sql table to ordinary pl/sql table.
11910 -- INDEX BY PLS_INTEGER;
11911
11912 --This Record is used to store the Plan Settings level information of the budget version.
11913 Type proj_fp_options_rec is record(fin_plan_preference_code pa_proj_fp_options.fin_plan_preference_code%TYPE,
11914 projfunc_cost_rate_type pa_proj_fp_options.projfunc_cost_rate_type%TYPE,
11915 projfunc_cost_rate_date_type pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE,
11916 projfunc_cost_rate_date pa_proj_fp_options.projfunc_cost_rate_date%TYPE,
11917 project_cost_rate_type pa_proj_fp_options.project_cost_rate_type%TYPE,
11918 project_cost_rate_date_type pa_proj_fp_options.project_cost_rate_date_type%TYPE,
11919 project_cost_rate_date pa_proj_fp_options.project_cost_rate_date%TYPE,
11920 projfunc_rev_rate_type pa_proj_fp_options.projfunc_rev_rate_type%TYPE,
11921 projfunc_rev_rate_date_type pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE,
11922 projfunc_rev_rate_date pa_proj_fp_options.projfunc_rev_rate_date%TYPE,
11923 project_rev_rate_type pa_proj_fp_options.project_rev_rate_type%TYPE,
11924 project_rev_rate_date_type pa_proj_fp_options.project_rev_rate_date_type%TYPE,
11925 project_rev_rate_date pa_proj_fp_options.project_rev_rate_date%TYPE);
11926 l_proj_fp_options_rec proj_fp_options_rec;
11927
11928 --This Cursor is used to get the Amount Type and Conversion Attribute information of the budget version.
11929 CURSOR amt_type_cur(c_project_id pa_fp_proj_xl_amt_types.project_id%TYPE,
11930 c_fin_plan_type_id pa_fp_proj_xl_amt_types.fin_plan_type_id%TYPE,
11931 c_option_type pa_fp_proj_xl_amt_types.option_type%TYPE,
11932 c_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE)
11933 IS
11934 SELECT amt.amount_type_code,
11935 amt_lu.meaning amount_type_name,
11936 decode(decode(amt.amount_type_code,'TOTAL_REV',l_proj_fp_options_rec.projfunc_rev_rate_type,l_proj_fp_options_rec.projfunc_cost_rate_type),null,null,
11937 (SELECT pctv1.USER_CONVERSION_TYPE
11938 FROM GL_DAILY_CONVERSION_TYPES pctv1
11939 WHERE pctv1.CONVERSION_TYPE= nvl(decode(amt.amount_type_code,'TOTAL_REV',l_proj_fp_options_rec.projfunc_rev_rate_type,l_proj_fp_options_rec.projfunc_cost_rate_type),'Corporate'))) projfunc_rate_type,
11940
11941 decode(decode(amt.amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.projfunc_rev_rate_type,'User',null,l_proj_fp_options_rec.projfunc_rev_rate_date_type),
11942 decode(l_proj_fp_options_rec.projfunc_cost_rate_type,'User',null,l_proj_fp_options_rec.projfunc_cost_rate_date_type)),null,null,
11943 (SELECT plk_d1.meaning
11944 FROM pa_lookups plk_d1
11945 WHERE plk_d1.lookup_type='PA_FP_RATE_DATE_TYPE'
11946 AND plk_d1.lookup_code=NVL(decode(amt.amount_type_code,'TOTAL_REV',
11947 decode(l_proj_fp_options_rec.projfunc_rev_rate_type,'User',null,l_proj_fp_options_rec.projfunc_rev_rate_date_type),
11948 decode(l_proj_fp_options_rec.projfunc_cost_rate_type,'User',null,l_proj_fp_options_rec.projfunc_cost_rate_date_type)),'FIXED_DATE'))) projfunc_rate_date_type,
11949
11950 decode(amt.amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.projfunc_rev_rate_date_type,'FIXED_DATE',l_proj_fp_options_rec.projfunc_rev_rate_date,TO_DATE(null)),
11951 decode(l_proj_fp_options_rec.projfunc_cost_rate_date_type,'FIXED_DATE',l_proj_fp_options_rec.projfunc_cost_rate_date,TO_DATE(null))) projfunc_rate_date,
11952
11953 decode(decode(amt.amount_type_code,'TOTAL_REV',l_proj_fp_options_rec.project_rev_rate_type,l_proj_fp_options_rec.project_cost_rate_type),null,null,
11954 (SELECT pctv2.USER_CONVERSION_TYPE
11955 FROM GL_DAILY_CONVERSION_TYPES pctv2
11956 WHERE pctv2.CONVERSION_TYPE= nvl(decode(amt.amount_type_code,'TOTAL_REV',l_proj_fp_options_rec.project_rev_rate_type,l_proj_fp_options_rec.project_cost_rate_type),'Corporate'))) project_rate_type,
11957
11958 decode(decode(amt.amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.project_rev_rate_type,'User',null,l_proj_fp_options_rec.PROJECT_REV_RATE_DATE_TYPE),
11959 decode(l_proj_fp_options_rec.project_cost_rate_type,'User',null,l_proj_fp_options_rec.project_cost_rate_date_type)),null,null,
11960 (SELECT plk_d2.meaning
11961 FROM pa_lookups plk_d2
11962 WHERE plk_d2.lookup_type='PA_FP_RATE_DATE_TYPE'
11963 AND plk_d2.lookup_code=NVL(decode(amt.amount_type_code,'TOTAL_REV',
11964 decode(l_proj_fp_options_rec.project_rev_rate_type,'User',null,l_proj_fp_options_rec.project_rev_rate_date_type),
11965 decode(l_proj_fp_options_rec.project_cost_rate_type,'User',null,l_proj_fp_options_rec.project_cost_rate_date_type)),'FIXED_DATE'))) project_rate_date_type,
11966
11967 decode(amt.amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.project_rev_rate_date_type,'FIXED_DATE',l_proj_fp_options_rec.project_rev_rate_date,TO_DATE(null)),
11968 decode(l_proj_fp_options_rec.project_cost_rate_date_type,'FIXED_DATE',l_proj_fp_options_rec.project_cost_rate_date,TO_DATE(null))) project_rate_date
11969 FROM pa_fp_proj_xl_amt_types amt,
11970 pa_lookups amt_lu
11971 WHERE amt.project_id = c_project_id
11972 AND amt.fin_plan_type_id = c_fin_plan_type_id
11973 AND amt.option_type = c_option_type
11974 AND amt_lu.lookup_type = decode(c_plan_class_code,'BUDGET', decode(c_option_type,'COST','PA_FP_XL_COST_BDGT_AMT_TYPES','REVENUE','PA_FP_XL_REV_BDGT_AMT_TYPES','ALL','PA_FP_XL_ALL_BDGT_AMT_TYPES'),
11975 'FORECAST',decode(c_option_type,'COST','PA_FP_XL_COST_FCST_AMT_TYPES','REVENUE','PA_FP_XL_REV_FCST_AMT_TYPES','ALL','PA_FP_XL_ALL_FCST_AMT_TYPES'))
11976 AND amt_lu.lookup_code = amt.amount_type_code
11977 ORDER BY amount_type_name;
11978 --PL/SQL table created based on amt_type_cur.
11979 TYPE amt_type_tbl IS TABLE OF amt_type_cur%ROWTYPE;
11980
11981 --Commented out the below for bug 5330532
11982 /*
11983 --This Record is used to store the Transaction Currencies Associated with the budget version.
11984 TYPE txn_curr_rec IS RECORD(txn_currency_code pa_fp_txn_currencies.txn_currency_code%TYPE,
11985 project_cost_exchange_rate pa_fp_txn_currencies.project_cost_exchange_rate%TYPE,
11986 project_rev_exchange_rate pa_fp_txn_currencies.project_rev_exchange_rate%TYPE,
11987 projfunc_cost_exchange_rate pa_fp_txn_currencies.projfunc_cost_exchange_rate%TYPE,
11988 projfunc_rev_exchange_rate pa_fp_txn_currencies.projfunc_rev_exchange_rate%TYPE);
11989 --PL/SQL table created based on txn_curr_rec.
11990 TYPE txn_curr_tbl IS TABLE OF txn_curr_rec;
11991 */
11992
11993 /* Bug 5144013: Commented out the below cursors txn_curr_cur and txn_curr_rate_cur
11994 as the transaction currencies and the exchange rates of those currencies can be got
11995 from the cursor res_ass_cur. This is done as part of merging the MRUP3 changes done
11996 in 11i into R12.
11997 */
11998 /* Start of code changes for bug 5330532*/
11999 --Cursor created for fetching transaction currencies.
12000 /* --Bug 5144013.
12001 CURSOR txn_curr_cur(c_budget_version_id pa_budget_lines.budget_version_id%TYPE,
12002 c_ra_id pa_budget_lines.resource_assignment_id%TYPE)
12003 IS
12004 SELECT DISTINCT(txn_currency_code)
12005 FROM pa_budget_lines pbl
12006 WHERE pbl.budget_version_id = c_budget_version_id
12007 AND pbl.resource_assignment_id = c_ra_id;
12008 --PL/SQL table created based on txn_curr_cur.
12009 TYPE txn_curr_tbl IS TABLE OF txn_curr_cur%ROWTYPE;
12010
12011 --Cursor created for fetching transaction currency rates.
12012 CURSOR txn_curr_rate_cur(c_budget_version_id pa_fp_txn_currencies.fin_plan_version_id%TYPE,
12013 c_proj_fp_options_id pa_fp_txn_currencies.proj_fp_options_id%TYPE)
12014 IS
12015 SELECT pftc.txn_currency_code,
12016 pftc.project_cost_exchange_rate,
12017 pftc.project_rev_exchange_rate,
12018 pftc.projfunc_cost_exchange_rate,
12019 pftc.projfunc_rev_exchange_rate
12020 FROM pa_fp_txn_currencies pftc
12021 WHERE pftc.fin_plan_version_id = c_budget_version_id
12022 AND pftc.proj_fp_options_id = c_proj_fp_options_id;
12023 --PL/SQL table created based on txn_curr_rate_cur.
12024 TYPE txn_curr_rate_tbl IS TABLE OF txn_curr_rate_cur%ROWTYPE INDEX BY VARCHAR2(15);
12025 */ --Bug 5144013.
12026 /* End of code changes for bug 5330532*/
12027
12028 l_global_tmp_rec pa_fp_webadi_xface_tmp%ROWTYPE; --Bug 5284640.
12029 NO_RA_EXC EXCEPTION; --Bug 5360205.
12030
12031 l_debug_mode VARCHAR2(1);
12032 l_return_status VARCHAR2(1);
12033 l_msg_count NUMBER := 0;
12034 l_data VARCHAR2(2000);
12035 l_msg_data VARCHAR2(2000);
12036 l_msg_index_out NUMBER;
12037 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.insert_periodic_tmp_table';
12038 l_project_id pa_budget_versions.project_id%TYPE;
12039 l_budget_version_id pa_budget_versions.budget_version_id%TYPE;
12040 l_version_info_rec PA_FP_GEN_AMOUNT_UTILS.FP_COLS;
12041 l_project_structure_version_id pa_budget_versions.project_structure_version_id%TYPE;
12042 l_struct_status_flag VARCHAR2(1);
12043 l_ci_id pa_budget_versions.ci_id%TYPE;
12044 l_AR_flag pa_budget_versions.approved_rev_plan_type_flag%TYPE;
12045 l_agr_curr_code pa_agreements_all.agreement_currency_code%TYPE;
12046 l_agr_conv_reqd_flag VARCHAR2(1);
12047 l_fin_plan_type_id pa_proj_fp_options.fin_plan_type_id%TYPE;
12048 l_proj_fp_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
12049 l_version_type pa_budget_versions.version_type%TYPE;
12050 l_period_mask_id pa_proj_fp_options.cost_period_mask_id%TYPE;
12051 l_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE;
12052 l_org_id pa_projects_all.org_id%TYPE;
12053 l_current_planning_period pa_proj_fp_options.cost_current_planning_period%TYPE;
12054 l_fin_plan_preference_code pa_proj_fp_options.fin_plan_preference_code%TYPE;
12055 l_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE;
12056 l_project_name pa_projects_all.name%TYPE;
12057 l_project_number pa_projects_all.segment1%TYPE;
12058 l_txn_currency_code pa_fp_txn_currencies.txn_currency_code%TYPE;
12059 l_projfunc_currency_code pa_projects_all.projfunc_currency_code%TYPE;
12060 l_project_currency_code pa_projects_all.project_currency_code%TYPE;
12061 l_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
12062 l_start_date DATE;
12063 l_end_date DATE;
12064 l_preceding_date DATE;
12065 l_succeeding_date DATE;
12066 cnt NUMBER := 1;
12067 l_res_ass_tbl res_ass_tbl;
12068 l_periods_tbl periods_tbl;
12069 l_amt_type_tbl amt_type_tbl;
12070 -- Bug 5144013: Commenting out the declaration of l_txn_curr_tbl and l_txn_curr_rate_tbl.
12071 --l_txn_curr_tbl txn_curr_tbl := txn_curr_tbl(); --Bug 5330532.
12072 --l_txn_curr_rate_tbl txn_curr_rate_tbl; --Bug 5330532.
12073 projfunc_exchange_rate pa_fp_txn_currencies.projfunc_cost_exchange_rate%TYPE;
12074 project_exchange_rate pa_fp_txn_currencies.project_cost_exchange_rate%TYPE;
12075 l_position NUMBER := 0; -- Bug 5284640.
12076 l_return NUMBER := 0; -- Bug 5284640.
12077
12078 BEGIN
12079 x_msg_count := 0;
12080 x_return_status := FND_API.G_RET_STS_SUCCESS;
12081 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'Y');
12082
12083
12084 IF l_debug_mode = 'Y' THEN
12085 pa_debug.set_curr_function( p_function => 'INSERT_PERIODIC_TMP_TABLE'
12086 ,p_debug_mode => l_debug_mode );
12087 pa_debug.g_err_stage := ':In pa_fp_webadi_pkg.INSERT_PERIODIC_TMP_TABLE' ;
12088 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12089 END IF;
12090
12091 l_budget_version_id := p_budget_version_id;
12092
12093 --Validating Input Parameters.
12094 IF p_budget_version_id IS NULL THEN
12095 IF l_debug_mode = 'Y' THEN
12096 pa_debug.g_err_stage := 'p_budget_version_id is passed as null';
12097 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12098 END IF;
12099 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12100 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12101 p_token1 => 'PROCEDURENAME',
12102 p_value1 => l_module_name);
12103 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12104 ELSE
12105 IF l_debug_mode = 'Y' THEN
12106 pa_debug.g_err_stage := 'Fetching Project Information of the Budget Version';
12107 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12108 END IF;
12109
12110 --Fetching Project Information of the budget version and storing them in local variables.
12111 BEGIN
12112 SELECT ppa.project_id,
12113 ppa.name,
12114 ppa.segment1
12115 INTO l_project_id,
12116 l_project_name,
12117 l_project_number
12118 FROM pa_budget_versions pbv,
12119 pa_projects_all ppa
12120 WHERE pbv.budget_version_id = l_budget_version_id
12121 AND pbv.project_id = ppa.project_id;
12122 EXCEPTION
12123 WHEN NO_DATA_FOUND THEN
12124 IF l_debug_mode = 'Y' THEN
12125 pa_debug.g_err_stage := 'Error getting Project Information for the budget version';
12126 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12127 END IF;
12128 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12129 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12130 p_token1 => 'PROCEDURENAME',
12131 p_value1 => l_module_name);
12132 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12133 END;
12134 END IF;
12135 IF l_debug_mode = 'Y' THEN
12136 pa_debug.g_err_stage := '-----Project Id : '||l_project_id||'-----';
12137 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12138 pa_debug.g_err_stage := 'Getting Budget Version Details';
12139 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12140 END IF;
12141
12142 /*Getting Budget Version Details by calling the GET_PLAN_VERSION_DTLS api.
12143 The returned PL/SQL record l_version_info will contain the budget version details
12144 */
12145 PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS( p_project_id => l_project_id,
12146 p_budget_version_id => l_budget_version_id,
12147 x_fp_cols_rec => l_version_info_rec,
12148 x_return_status => l_return_status,
12149 x_msg_count => l_msg_count,
12150 x_msg_data => l_msg_data);
12151
12152 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12153 IF l_debug_mode = 'Y' THEN
12154 pa_debug.g_err_stage := 'Budget Version Details not found';
12155 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12156 END IF;
12157 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12158 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12159 p_token1 => 'PROCEDURENAME',
12160 p_value1 => l_module_name);
12161 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12162 END IF;
12163
12164 --Getting Structure Version Details and storing them in local variables.
12165 IF l_debug_mode = 'Y' THEN
12166 pa_debug.g_err_stage := 'Getting the Structure version information of the budget version';
12167 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12168 END IF;
12169 l_project_structure_version_id := l_version_info_rec.x_project_structure_version_id;
12170 l_struct_status_flag := PA_PROJECT_STRUCTURE_UTILS.check_struc_ver_published(l_project_id,
12171 l_project_structure_version_id);
12172
12173 /* Bug 5144013: Commenting out the below code by which we are getting the agreement currency of the plan
12174 version if the plan version is a change order version and the approved_rev_plan_type_flag of the plan
12175 version is 'Y'. This is done as we can get the the currencies from the cursor res_ass_cur by making use
12176 of the new entity pa_resource_asgn_curr. This is done as part of merging the MRUP3 changes done in 11i
12177 into R12
12178 */
12179 /* --Bug 5144013.
12180 --Getting CI Id and Approved Revenue Flag of the budget version and storing them in local variables.
12181 IF l_debug_mode = 'Y' THEN
12182 pa_debug.g_err_stage := 'Getting CI id and Approved Revenue flag of the budget version';
12183 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12184 END IF;
12185 BEGIN
12186 SELECT ci_id,
12187 approved_rev_plan_type_flag
12188 INTO l_ci_id,
12189 l_AR_flag
12190 FROM pa_budget_versions
12191 WHERE budget_version_id = l_budget_version_id;
12192 EXCEPTION
12193 WHEN NO_DATA_FOUND THEN
12194 IF l_debug_mode = 'Y' THEN
12195 pa_debug.g_err_stage := 'Error getting CI Id and Approved Revenue flag for the budget version';
12196 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12197 END IF;
12198 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12199 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12200 p_token1 => 'PROCEDURENAME',
12201 p_value1 => l_module_name);
12202 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12203 END;
12204 IF l_debug_mode = 'Y' THEN
12205 pa_debug.g_err_stage := '-----CI Id : '||l_ci_id||' , Approved Revenue Flag : '||l_AR_flag||'-----';
12206 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12207 END IF;
12208 */ --Bug 5144013.
12209
12210 /*Getting the Agreement Details of the budget version if the budget version is CI version and and of
12211 Approved Revenue Plan Type.
12212 */
12213 /* --Bug 5144013.
12214 IF l_debug_mode = 'Y' THEN
12215 pa_debug.g_err_stage := 'Getting Agreement details if the budget versions is CI version and of Approved Revenue plan type';
12216 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12217 END IF;
12218 IF l_ci_id is not null AND L_AR_FLAG = 'Y' THEN
12219 PA_FIN_PLAN_UTILS2.get_agreement_details(
12220 p_budget_version_id => l_budget_version_id,
12221 p_calling_mode => 'WA_DOWNLOAD',
12222 x_agr_curr_code => l_agr_curr_code,
12223 x_agr_conv_reqd_flag => l_agr_conv_reqd_flag,
12224 x_return_status => l_return_status);
12225 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12226 IF l_debug_mode = 'Y' THEN
12227 pa_debug.g_err_stage := 'Error in Getting Agreement Details of the budget version';
12228 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12229 END IF;
12230 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12231 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12232 p_token1 => 'PROCEDURENAME',
12233 p_value1 => l_module_name);
12234 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12235 END IF;
12236 END IF;
12237 IF l_debug_mode = 'Y' THEN
12238 pa_debug.g_err_stage := '-----Agreement Currency Code : '||l_agr_curr_code||'-----';
12239 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12240 END IF;
12241 */ --Bug 5144013.
12242
12243 /*Getting Plan Settings level information of the budget version and storing them in a PL/SQL record.
12244 The record l_proj_fp_options_rec will contain Plan Settings level information
12245 */
12246 IF l_debug_mode = 'Y' THEN
12247 pa_debug.g_err_stage := 'Getting Plan Settings level information of the budget version';
12248 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12249 END IF;
12250 l_fin_plan_type_id := l_version_info_rec.x_fin_plan_type_id;
12251 l_version_type := l_version_info_rec.x_version_type;
12252 l_proj_fp_options_id := l_version_info_rec.x_proj_fp_options_id;
12253 BEGIN
12254 SELECT fin_plan_preference_code,
12255 projfunc_cost_rate_type,
12256 projfunc_cost_rate_date_type,
12257 projfunc_cost_rate_date,
12258 project_cost_rate_type,
12259 project_cost_rate_date_type,
12260 project_cost_rate_date,
12261 projfunc_rev_rate_type,
12262 projfunc_rev_rate_date_type,
12263 projfunc_rev_rate_date,
12264 project_rev_rate_type,
12265 project_rev_rate_date_type,
12266 project_rev_rate_date
12267 INTO l_proj_fp_options_rec
12268 FROM pa_proj_fp_options
12269 WHERE proj_fp_options_id = l_proj_fp_options_id;
12270 EXCEPTION
12271 WHEN NO_DATA_FOUND THEN
12272 IF l_debug_mode = 'Y' THEN
12273 pa_debug.g_err_stage := 'error getting Plan Settings level information of the budget version';
12274 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12275 END IF;
12276 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12277 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12278 p_token1 => 'PROCEDURENAME',
12279 p_value1 => l_module_name);
12280 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12281 END;
12282
12283 /*Getting Amount Type Codes associated with the budget version.and storing them in a PL/SQL table.
12284 The PL/SQL table l_amt_type_tbl will contain the Amount Type codes and Conversion Attributes
12285 associated with the budget version.
12286 */
12287 l_plan_class_code := l_version_info_rec.x_plan_class_code;
12288 IF l_debug_mode = 'Y' THEN
12289 pa_debug.g_err_stage := 'Getting Amount Types associated with the budget version';
12290 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12291 END IF;
12292 BEGIN
12293 OPEN amt_type_cur(l_project_id,l_fin_plan_type_id,l_version_type,l_plan_class_code);
12294 FETCH amt_type_cur
12295 BULK COLLECT INTO l_amt_type_tbl;
12296 CLOSE amt_type_cur;
12297 IF l_amt_type_tbl.count = 0 THEN
12298 IF l_debug_mode = 'Y' THEN
12299 pa_debug.g_err_stage := 'No Amount Types found for the budget version';
12300 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12301 END IF;
12302 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12303 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12304 p_token1 => 'PROCEDURENAME',
12305 p_value1 => l_module_name);
12306 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12307 END IF;
12308 END;
12309
12310 /*Calling GET_PERIOD_INFORMATION api to get the Group Period Information and Start/End dates of the Periods.
12311 The returned PL/SQL table l_periods_tbl will contain all the periods and Start and End dates of the periods
12312 associated with the budget version based on the period mask.
12313 */
12314 l_period_mask_id := l_version_info_rec.x_period_mask_id;
12315 l_time_phased_code := l_version_info_rec.x_time_phased_code;
12316 l_org_id := l_version_info_rec.x_org_id;
12317 l_current_planning_period := l_version_info_rec.x_current_planning_period;
12318 IF l_debug_mode = 'Y' THEN
12319 pa_debug.g_err_stage := 'Getting Group Period Information and Start/End dates of the periods';
12320 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12321 END IF;
12322 GET_PERIOD_INFORMATION(p_period_mask_id => l_period_mask_id,
12323 p_time_phased_code => l_time_phased_code,
12324 p_org_id => l_org_id,
12325 p_current_planning_period => l_current_planning_period,
12326 x_periods_tbl => l_periods_tbl,
12327 x_return_status => l_return_status,
12328 x_msg_count => l_msg_count,
12329 x_msg_data => l_msg_data);
12330
12331 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12332 IF l_debug_mode = 'Y' THEN
12333 pa_debug.g_err_stage := 'Error in getting Group Period information of the budget version';
12334 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12335 END IF;
12336 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12337 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12338 p_token1 => 'PROCEDURENAME',
12339 p_value1 => l_module_name);
12340 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12341 END IF;
12342 IF l_periods_tbl.count = 0 THEN
12343 IF l_debug_mode = 'Y' THEN
12344 pa_debug.g_err_stage := 'Period Informations not found for the budget version';
12345 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12346 END IF;
12347 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12348 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12349 p_token1 => 'PROCEDURENAME',
12350 p_value1 => l_module_name);
12351 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12352 END IF;
12353
12354 /* Start of code changes for Bug 5144013.
12355 Commenting out the below code by which we are getting the exchange rates of the
12356 transaction currencies of the plan version. This is done as we can get the exchange rates of
12357 the transaction currencies from the cursor res_ass_cur. This is done as part of merging the
12358 MRUP3 changes done in 11i into R12.
12359 */
12360 /*Getting Transaction Currency rates associated with the budget version.
12361 The PL/SQL table l_txn_curr_rate_tbl will contain all the Transaction Currency rates
12362 associated with the budget version.
12363 */
12364 /* --Bug 5144013.
12365 l_projfunc_currency_code := l_version_info_rec.x_projfunc_currency_code;
12366 l_project_currency_code := l_version_info_rec.x_project_currency_code;
12367 l_multi_curr_flag := l_version_info_rec.x_plan_in_multi_curr_flag;
12368 IF l_debug_mode = 'Y' THEN
12369 pa_debug.g_err_stage := 'Getting Transaction Currency rates associated with the budget version';
12370 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12371 END IF;
12372
12373 BEGIN
12374 */ --Bug 5144013.
12375 /* Start of code changes for bug 5330532. */
12376 /* --Bug 5144013.
12377 FOR rat IN txn_curr_rate_cur(l_budget_version_id, l_proj_fp_options_id) LOOP
12378 l_txn_curr_rate_tbl(rat.txn_currency_code).txn_currency_code := rat.txn_currency_code;
12379 l_txn_curr_rate_tbl(rat.txn_currency_code).project_cost_exchange_rate := rat.project_cost_exchange_rate;
12380 l_txn_curr_rate_tbl(rat.txn_currency_code).project_rev_exchange_rate := rat.project_rev_exchange_rate;
12381 l_txn_curr_rate_tbl(rat.txn_currency_code).projfunc_cost_exchange_rate := rat.projfunc_cost_exchange_rate;
12382 l_txn_curr_rate_tbl(rat.txn_currency_code).projfunc_rev_exchange_rate := rat.projfunc_rev_exchange_rate;
12383 END LOOP;
12384 */ --Bug 5144013.
12385 /* End of code changes for bug 5330532. */
12386
12387 -- Commented out the below for bug 5330532.
12388 /*
12389 SELECT DISTINCT(nvl(pbl.txn_currency_code,DECODE(l_ci_id,
12390 null, DECODE(l_AR_flag,
12391 'Y', l_projfunc_currency_code,
12392 l_project_currency_code),
12393 DECODE(l_version_type,
12394 'ALL', l_agr_curr_code,
12395 'REVENUE', l_agr_curr_code,
12396 DECODE(l_AR_flag,
12397 'Y', l_projfunc_currency_code,
12398 l_project_currency_code))))) as txn_currency_code,
12399 pftc.project_cost_exchange_rate,
12400 pftc.project_rev_exchange_rate,
12401 pftc.projfunc_cost_exchange_rate,
12402 pftc.projfunc_rev_exchange_rate
12403 BULK COLLECT INTO l_txn_curr_tbl
12404 FROM pa_budget_lines pbl,
12405 pa_fp_txn_currencies pftc
12406 WHERE pbl.budget_version_id = l_budget_version_id
12407 AND pftc.fin_plan_version_id = l_budget_version_id
12408 AND pftc.proj_fp_options_id = l_proj_fp_options_id
12409 and pbl.txn_currency_code = pftc.txn_currency_code;
12410
12411 IF l_txn_curr_tbl.count = 0 THEN
12412 IF l_debug_mode = 'Y' THEN
12413 pa_debug.g_err_stage := 'No transaction currency found for the budget version';
12414 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12415 END IF;
12416 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12417 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12418 p_token1 => 'PROCEDURENAME',
12419 p_value1 => l_module_name);
12420 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12421 END IF;
12422 */
12423 --END;
12424 /* End of code changes done for Bug 5144013.*/
12425
12426 /*Getting Resource Assignment details of the budget version
12427 The PL/SQL table l_res_ass_tbl will contain all the Resource Assignment
12428 information associated with the budget version.
12429 */
12430 IF l_debug_mode = 'Y' THEN
12431 pa_debug.g_err_stage := 'Getting the Resource Assignment details of the budget version';
12432 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12433 END IF;
12434 BEGIN
12435 /* Start of coding done for bug 5641300: Using the bulk collect logic instead of for loop
12436 as res_ass_tbl is converted to ordinary pl/sql table from index by pl/sql table.
12437 */
12438 /*
12439 FOR rec in res_ass_cur(l_budget_version_id,l_project_id,l_project_structure_version_id)
12440 LOOP
12441 l_res_ass_tbl(rec.resource_assignment_id) := rec;
12442 END LOOP;
12443 */
12444 -- Bug 5144013: Made changes to pass proj_fp_options_id as a parameter to the cursor res_ass_cur.
12445 OPEN res_ass_cur(l_budget_version_id,l_project_id,l_project_structure_version_id,l_proj_fp_options_id);
12446 FETCH res_ass_cur BULK COLLECT INTO l_res_ass_tbl;
12447 CLOSE res_ass_cur;
12448 /* End of coding done for bug 5641300.*/
12449 IF l_res_ass_tbl.count = 0 THEN
12450 IF l_debug_mode = 'Y' THEN
12451 pa_debug.g_err_stage := 'No Resource Assignments found for the budget version';
12452 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12453 END IF;
12454 -- Bug 5360205: Commented out the following and raised NO_RA_EXC.
12455 /*
12456 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12457 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12458 p_token1 => 'PROCEDURENAME',
12459 p_value1 => l_module_name);
12460 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12461 */
12462 RAISE NO_RA_EXC;
12463 END IF;
12464 END;
12465
12466 l_fin_plan_preference_code := l_proj_fp_options_rec.fin_plan_preference_code;
12467 /*Getting the values of all the Amount Types for each Resource Assignment and Transaction
12468 Currency combination for all the periods associated with the budget version
12469 */
12470 IF l_debug_mode = 'Y' THEN
12471 pa_debug.g_err_stage := 'Getting Amounts of all the Periods associated with the budget version';
12472 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12473 END IF;
12474 BEGIN
12475 l_global_tmp_tbl := global_tmp_tbl();
12476 l_global_tmp_rec.budget_version_id := l_budget_version_id;
12477 l_global_tmp_rec.fin_plan_preference_code := l_fin_plan_preference_code;
12478 l_global_tmp_rec.plan_class_code := l_plan_class_code;
12479 l_global_tmp_rec.project_name := l_project_name;
12480 l_global_tmp_rec.project_number := l_project_number;
12481 l_global_tmp_rec.project_id := l_project_id;
12482 l_global_tmp_rec.delete_flag := null;
12483 FOR res IN l_res_ass_tbl.first..l_res_ass_tbl.last LOOP
12484 l_global_tmp_rec.resource_assignment_id := l_res_ass_tbl(res).resource_assignment_id;
12485 l_global_tmp_rec.task_number := l_res_ass_tbl(res).task_number;
12486 l_global_tmp_rec.task_name := l_res_ass_tbl(res).task_name;
12487 l_global_tmp_rec.task_display_sequence := l_res_ass_tbl(res).task_display_sequence;
12488 l_global_tmp_rec.resource_alias := l_res_ass_tbl(res).resource_name;
12489 l_global_tmp_rec.unit_of_measure := l_res_ass_tbl(res).unit_of_measure;
12490 l_global_tmp_rec.resource_list_member_id := l_res_ass_tbl(res).resource_list_member_id;
12491 l_global_tmp_rec.spread_curve_id := l_res_ass_tbl(res).spread_curve_id;
12492 l_global_tmp_rec.spread_curve := l_res_ass_tbl(res).spread_curve;
12493 l_global_tmp_rec.start_date := l_res_ass_tbl(res).planning_start_date;
12494 l_global_tmp_rec.end_date := l_res_ass_tbl(res).planning_end_date;
12495 l_global_tmp_rec.mfc_cost_type_id := l_res_ass_tbl(res).mfc_cost_type_id;
12496 l_global_tmp_rec.mfc_cost_type := l_res_ass_tbl(res).mfc_cost_type;
12497 l_global_tmp_rec.etc_method_code := l_res_ass_tbl(res).etc_method_code;
12498 l_global_tmp_rec.etc_method := l_res_ass_tbl(res).etc_method;
12499 l_global_tmp_rec.etc_source := l_res_ass_tbl(res).etc_source;
12500 l_global_tmp_rec.physical_percent_complete := PA_FIN_PLAN_UTILS.get_physical_pc_complete
12501 (p_project_id => l_project_id,
12502 p_proj_element_id => l_res_ass_tbl(res).project_element_id);
12503
12504 /* Bug 5144013: Commenting out the below code by which we get the transaction currencies of the
12505 resource assignment. This is done as we can get the resource assignment and transaction currency
12506 combination from the cursor res_ass_cur. This is done as part of merging the MRUP3 changes done
12507 in 11i into R12.
12508 */
12509 /* Start of code changes for bug 5330532 */
12510 /* --Bug 5144013.
12511 BEGIN
12512 l_txn_curr_tbl.DELETE;
12513 OPEN txn_curr_cur(l_budget_version_id, l_res_ass_tbl(res).resource_assignment_id);
12514 FETCH txn_curr_cur BULK COLLECT INTO l_txn_curr_tbl;
12515 CLOSE txn_curr_cur;
12516 IF l_txn_curr_tbl.COUNT = 0 THEN
12517 l_txn_curr_tbl.extend(1);
12518 SELECT (DECODE(l_ci_id,
12519 null, DECODE(l_AR_flag,
12520 'Y', l_projfunc_currency_code,
12521 l_project_currency_code),
12522 DECODE(l_version_type,
12523 'ALL', l_agr_curr_code,
12524 'REVENUE', l_agr_curr_code,
12525 l_project_currency_code)))
12526 INTO l_txn_curr_tbl(1).txn_currency_code
12527 FROM dual;
12528 END IF;
12529 END;
12530 */ --Bug 5144013.
12531 /* End of code changes for bug 5330532 */
12532 --FOR txn IN l_txn_curr_tbl.first..l_txn_curr_tbl.last LOOP Bug 5144013.
12533 l_global_tmp_rec.txn_currency_code := l_res_ass_tbl(res).txn_currency_code; --Bug 5144013.
12534 FOR amt IN l_amt_type_tbl.first..l_amt_type_tbl.last LOOP
12535 l_global_tmp_rec.amount_type_code := l_amt_type_tbl(amt).amount_type_code;
12536 l_global_tmp_rec.amount_type_name := l_amt_type_tbl(amt).amount_type_name;
12537 l_global_tmp_rec.projfunc_rate_type := l_amt_type_tbl(amt).projfunc_rate_type;
12538 l_global_tmp_rec.projfunc_rate_date_type := l_amt_type_tbl(amt).projfunc_rate_date_type;
12539 l_global_tmp_rec.projfunc_rate_date := l_amt_type_tbl(amt).projfunc_rate_date;
12540 l_global_tmp_rec.project_rate_type := l_amt_type_tbl(amt).project_rate_type;
12541 l_global_tmp_rec.project_rate_date_type := l_amt_type_tbl(amt).project_rate_date_type;
12542 l_global_tmp_rec.project_rate_date := l_amt_type_tbl(amt).project_rate_date;
12543 /* Bug 5144013. Made changes in the below select to get the exchange rates of the transaction
12544 currencies from pl/sql table l_res_ass_tbl.
12545 */
12546 -- Bug 5330532. Used newly introduced rate table l_txn_curr_rate_tbl in the following select statement.
12547 SELECT
12548 decode(l_amt_type_tbl(amt).amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.projfunc_rev_rate_type,'User',l_res_ass_tbl(res).projfunc_rev_exchange_rate,TO_NUMBER(null)),
12549 decode(l_proj_fp_options_rec.projfunc_cost_rate_type,'User',null,l_res_ass_tbl(res).projfunc_cost_exchange_rate,TO_NUMBER(null))),
12550
12551 decode(l_amt_type_tbl(amt).amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.project_rev_rate_type,'User',l_res_ass_tbl(res).project_rev_exchange_rate,TO_NUMBER(null)),
12552 decode(l_proj_fp_options_rec.project_cost_rate_type,'User',null,l_res_ass_tbl(res).project_cost_exchange_rate,TO_NUMBER(null)))
12553 INTO projfunc_exchange_rate,
12554 project_exchange_rate
12555 FROM dual;
12556 l_global_tmp_rec.projfunc_exchange_rate := projfunc_exchange_rate;
12557 l_global_tmp_rec.project_exchange_rate := project_exchange_rate;
12558 FOR prd in l_periods_tbl.first-1..l_periods_tbl.last+1 LOOP
12559 IF prd <> l_periods_tbl.first-1 and prd <> l_periods_tbl.last+1 THEN
12560 l_position := l_periods_tbl(prd).sequence_number;
12561 l_start_date := l_periods_tbl(prd).start_date;
12562 l_end_date := l_periods_tbl(prd).end_date;
12563 l_preceding_date := to_date(null);
12564 l_succeeding_date := to_date(null);
12565 ELSIF prd = l_periods_tbl.first-1 THEN
12566 l_start_date := to_date(null);
12567 l_end_date := to_date(null);
12568 l_preceding_date := l_periods_tbl(l_periods_tbl.first).start_date;
12569 l_succeeding_date := to_date(null);
12570 ELSIF prd = l_periods_tbl.last+1 THEN
12571 l_start_date := to_date(null);
12572 l_end_date := to_date(null);
12573 l_preceding_date := to_date(null);
12574 l_succeeding_date := l_periods_tbl(l_periods_tbl.last).end_date;
12575 END IF;
12576 --Calling get_period_amounts api to get the value of the Amount Type for a period.
12577 l_return := pa_fp_webadi_utils.get_period_amounts(
12578 p_budget_version_id => l_budget_version_id,
12579 p_amount_code => l_amt_type_tbl(amt).amount_type_code,
12580 p_resource_assignment_id => l_res_ass_tbl(res).resource_assignment_id,
12581 p_txn_currency_code => l_res_ass_tbl(res).txn_currency_code, --Bug 5144013.
12582 p_prd_start_date => l_start_date,
12583 p_prd_end_date => l_end_date,
12584 preceding_date => l_preceding_date,
12585 succedeing_date => l_succeeding_date);
12586 IF prd = l_periods_tbl.first-1 THEN
12587 l_global_tmp_rec.preceding_period_amount := l_return;
12588 ELSIF prd = l_periods_tbl.last+1 THEN
12589 l_global_tmp_rec.succeeding_period_amount := l_return;
12590 ELSE
12591 -- Bug 5284640: Commented out the below Dynamic SQL and added PL/SQL code for improving performance.
12592 /*
12593 --Dynamic SQL used to insert the Amount Type value in the corresponding period column.
12594 EXECUTE IMMEDIATE
12595 'BEGIN '||
12596 'pa_fp_webadi_pkg.l_global_tmp_rec.prd'||pa_fp_webadi_pkg.l_position||' := pa_fp_webadi_pkg.l_return; '||
12597 'END;';
12598 */
12599 IF l_position = 1 THEN
12600 l_global_tmp_rec.prd1 := l_return;
12601 ELSIF l_position = 2 THEN
12602 l_global_tmp_rec.prd2 := l_return;
12603 ELSIF l_position = 3 THEN
12604 l_global_tmp_rec.prd3 := l_return;
12605 ELSIF l_position = 4 THEN
12606 l_global_tmp_rec.prd4 := l_return;
12607 ELSIF l_position = 5 THEN
12608 l_global_tmp_rec.prd5 := l_return;
12609 ELSIF l_position = 6 THEN
12610 l_global_tmp_rec.prd6 := l_return;
12611 ELSIF l_position =7 THEN
12612 l_global_tmp_rec.prd7 := l_return;
12613 ELSIF l_position = 8 THEN
12614 l_global_tmp_rec.prd8 := l_return;
12615 ELSIF l_position = 9 THEN
12616 l_global_tmp_rec.prd9 := l_return;
12617 ELSIF l_position = 10 THEN
12618 l_global_tmp_rec.prd10 := l_return;
12619 ELSIF l_position = 11 THEN
12620 l_global_tmp_rec.prd11 := l_return;
12621 ELSIF l_position = 12 THEN
12622 l_global_tmp_rec.prd12 := l_return;
12623 ELSIF l_position = 13 THEN
12624 l_global_tmp_rec.prd13 := l_return;
12625 ELSIF l_position = 14 THEN
12626 l_global_tmp_rec.prd14 := l_return;
12627 ELSIF l_position = 15 THEN
12628 l_global_tmp_rec.prd15 := l_return;
12629 ELSIF l_position = 16 THEN
12630 l_global_tmp_rec.prd16 := l_return;
12631 ELSIF l_position = 17 THEN
12632 l_global_tmp_rec.prd17 := l_return;
12633 ELSIF l_position = 18 THEN
12634 l_global_tmp_rec.prd18 := l_return;
12635 ELSIF l_position = 19 THEN
12636 l_global_tmp_rec.prd19 := l_return;
12637 ELSIF l_position = 20 THEN
12638 l_global_tmp_rec.prd20 := l_return;
12639 ELSIF l_position = 21 THEN
12640 l_global_tmp_rec.prd21 := l_return;
12641 ELSIF l_position = 22 THEN
12642 l_global_tmp_rec.prd22 := l_return;
12643 ELSIF l_position = 23 THEN
12644 l_global_tmp_rec.prd23 := l_return;
12645 ELSIF l_position = 24 THEN
12646 l_global_tmp_rec.prd24 := l_return;
12647 ELSIF l_position = 25 THEN
12648 l_global_tmp_rec.prd25 := l_return;
12649 ELSIF l_position = 26 THEN
12650 l_global_tmp_rec.prd26 := l_return;
12651 ELSIF l_position = 27 THEN
12652 l_global_tmp_rec.prd27 := l_return;
12653 ELSIF l_position = 28 THEN
12654 l_global_tmp_rec.prd28 := l_return;
12655 ELSIF l_position = 29 THEN
12656 l_global_tmp_rec.prd29 := l_return;
12657 ELSIF l_position = 30 THEN
12658 l_global_tmp_rec.prd30 := l_return;
12659 ELSIF l_position = 31 THEN
12660 l_global_tmp_rec.prd31 := l_return;
12661 ELSIF l_position = 32 THEN
12662 l_global_tmp_rec.prd32 := l_return;
12663 ELSIF l_position = 33 THEN
12664 l_global_tmp_rec.prd33 := l_return;
12665 ELSIF l_position = 34 THEN
12666 l_global_tmp_rec.prd34 := l_return;
12667 ELSIF l_position = 35 THEN
12668 l_global_tmp_rec.prd35 := l_return;
12669 ELSIF l_position = 36 THEN
12670 l_global_tmp_rec.prd36 := l_return;
12671 ELSIF l_position = 37 THEN
12672 l_global_tmp_rec.prd37 := l_return;
12673 ELSIF l_position = 38 THEN
12674 l_global_tmp_rec.prd38 := l_return;
12675 ELSIF l_position = 39 THEN
12676 l_global_tmp_rec.prd39 := l_return;
12677 ELSIF l_position = 40 THEN
12678 l_global_tmp_rec.prd40 := l_return;
12679 ELSIF l_position = 41 THEN
12680 l_global_tmp_rec.prd41 := l_return;
12681 ELSIF l_position = 42 THEN
12682 l_global_tmp_rec.prd42 := l_return;
12683 ELSIF l_position = 43 THEN
12684 l_global_tmp_rec.prd43 := l_return;
12685 ELSIF l_position = 44 THEN
12686 l_global_tmp_rec.prd44 := l_return;
12687 ELSIF l_position = 45 THEN
12688 l_global_tmp_rec.prd45 := l_return;
12689 ELSIF l_position = 46 THEN
12690 l_global_tmp_rec.prd46 := l_return;
12691 ELSIF l_position = 47 THEN
12692 l_global_tmp_rec.prd47 := l_return;
12693 ELSIF l_position = 48 THEN
12694 l_global_tmp_rec.prd48 := l_return;
12695 ELSIF l_position = 49 THEN
12696 l_global_tmp_rec.prd49 := l_return;
12697 ELSIF l_position = 50 THEN
12698 l_global_tmp_rec.prd50 := l_return;
12699 ELSIF l_position = 51 THEN
12700 l_global_tmp_rec.prd51 := l_return;
12701 ELSIF l_position = 52 THEN
12702 l_global_tmp_rec.prd52 := l_return;
12703 END IF;
12704 END IF;
12705 END LOOP;
12706 --Inserting the record containig the budget line information into the PL/SQL table.
12707 l_global_tmp_tbl.extend();
12708 l_global_tmp_tbl(cnt) := l_global_tmp_rec;
12709 cnt := cnt+1;
12710 END LOOP;
12711 --END LOOP; Bug 5144013.
12712 END LOOP;
12713 --Resetting the value of all the global variables.
12714 l_position := 0;
12715 l_global_tmp_rec := null;
12716 l_return := 0;
12717 END;
12718 /*Populating Global Temparory Table pa_fp_webadi_xface_tmp using the PL/SQL
12719 table l_global_tmp_tbl which contains all the budget line details.
12720 */
12721 IF l_debug_mode = 'Y' THEN
12722 pa_debug.g_err_stage := 'Before inerting into Global Temporary Table';
12723 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12724 END IF;
12725 BEGIN
12726 /* FOR tmp IN l_global_tmp_tbl.first..l_global_tmp_tbl.last
12727 LOOP
12728 INSERT INTO pa_fp_webadi_xface_tmp
12729 VALUES l_global_tmp_tbl(tmp);
12730 END LOOP;
12731 commit;*/
12732 FORALL tmp IN l_global_tmp_tbl.first..l_global_tmp_tbl.last
12733 INSERT INTO pa_fp_webadi_xface_tmp
12734 VALUES l_global_tmp_tbl(tmp);
12735 EXCEPTION
12736 WHEN OTHERS THEN
12737 RAISE;
12738 END;
12739 IF l_debug_mode = 'Y' THEN
12740 pa_debug.g_err_stage := 'Finished inserting into Global temparory table';
12741 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12742 END IF;
12743 --Resetting the value of the Global PL/SQL table to NULL.
12744 l_global_tmp_tbl := null;
12745
12746 EXCEPTION
12747 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12748 l_msg_count := FND_MSG_PUB.count_msg;
12749 IF l_msg_count = 1 and x_msg_data IS NULL THEN
12750 PA_INTERFACE_UTILS_PUB.get_messages
12751 (p_encoded => FND_API.G_TRUE
12752 ,p_msg_index => 1
12753 ,p_msg_count => l_msg_count
12754 ,p_msg_data => l_msg_data
12755 ,p_data => l_data
12756 ,p_msg_index_out => l_msg_index_out);
12757 x_msg_data := l_data;
12758 x_msg_count := l_msg_count;
12759 ELSE
12760 x_msg_count := l_msg_count;
12761 END IF;
12762 x_return_status := FND_API.G_RET_STS_ERROR;
12763 IF l_debug_mode = 'Y' THEN
12764 pa_debug.reset_curr_function;
12765 END IF;
12766 RETURN;
12767
12768 -- Bug 5360205: Added NO_RA_EXC block.
12769 WHEN NO_RA_EXC THEN
12770 x_return_status := FND_API.G_RET_STS_SUCCESS;
12771 IF l_debug_mode = 'Y' THEN
12772 pa_debug.reset_curr_function;
12773 END IF;
12774 RETURN;
12775
12776 WHEN OTHERS THEN
12777 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12778 x_msg_count := 1;
12779 x_msg_data := SQLERRM;
12780 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
12781 ,p_procedure_name => 'insert_periodic_tmp_table');
12782 IF l_debug_mode = 'Y' THEN
12783 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
12784 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12785 pa_debug.reset_curr_function;
12786 END IF;
12787 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12788
12789
12790 END insert_periodic_tmp_table;
12791
12792
12793 END pa_fp_webadi_pkg;