[Home] [Help]
PACKAGE BODY: APPS.PA_FP_WEBADI_PKG
Source
1 PACKAGE BODY pa_fp_webadi_pkg as
2 /* $Header: PAFPWAPB.pls 120.55.12020000.5 2013/06/21 06:34:32 bpottipa ship $ */
3
4 Validation_Failed_Exc Exception ;
5 BV_Validation_Failed_Exc Exception; -- Exception to be used if the validation fails at version level
6
7 g_module_name VARCHAR2(100) := 'pa.plsql.pa_fp_webadi_pkg';
8 --wlog varchar2(1):='Y';
9
10 -- Bug 3986129: FP.M Web ADI Dev changes. Added the following exceptions
11 Bv_Period_Mask_Changed_Exc EXCEPTION;
12 No_Bv_Maint_Previlege_Exc EXCEPTION;
13 Bv_Non_Editable_Exc EXCEPTION;
14 Co_Ver_Non_Editable_Exc EXCEPTION;
15 Bv_Not_Curr_Working_Exc EXCEPTION;
16 Ci_Ver_Sumbit_Flag_Exc EXCEPTION;
17 Fp_Webadi_Skip_Dup_Rec_Exc EXCEPTION;
18 Fp_Webadi_Skip_Rec_Proc_Exc EXCEPTION;
19 Fp_Webadi_Skip_Next_Rec_Exc EXCEPTION;
20 No_Bv_Dtls_Found_Exc EXCEPTION; --Bug 4584865.
21
22
23 TYPE varchar_70_indexed_num_tbl_typ IS TABLE OF NUMBER INDEX BY VARCHAR2(70);
24 TYPE varchar_32_indexed_num_tbl_typ IS TABLE OF NUMBER INDEX BY VARCHAR2(32);
25
26 -- local variables to simulate fnd_api.g_miss_xxx
27 l_fnd_miss_char CONSTANT VARCHAR(1) := FND_API.G_MISS_CHAR;
28 l_fnd_miss_num CONSTANT NUMBER := FND_API.G_MISS_NUM;
29 l_fnd_miss_date CONSTANT DATE := FND_API.G_MISS_DATE;
30
31 --These variables will contain the values that will be inserted into the interface table when the
32 --corresponding columns in the layout are hidden. These values are default values given in table
33 --creation script
34 g_hidden_col_num CONSTANT NUMBER := 9.99E125;
35 g_hidden_col_date CONSTANT DATE := TO_DATE('1','j');
36 g_hidden_col_char CONSTANT VARCHAR2(1):= chr(0);
37
38 /* Bug 5144013: Made changes to the cursor to refer override rates from the interface table and
39 made changes in change_reason derivation. This is done as part of merging the MRUP3 changes
40 done in 11i into R12.
41 */
42 CURSOR inf_tbl_data_csr
43 (c_run_id pa_fp_webadi_upload_inf.run_id%TYPE,
44 c_allow_qty_flag VARCHAR2,
45 c_allow_raw_cost_flag VARCHAR2,
46 c_allow_burd_cost_flag VARCHAR2,
47 c_allow_revenue_flag VARCHAR2,
48 c_allow_raw_cost_rate_flag VARCHAR2,
49 c_allow_burd_cost_rate_flag VARCHAR2,
50 c_allow_bill_rate_flag VARCHAR2,
51 c_project_id pa_projects_all.project_id%TYPE,
52 c_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE,
53 c_version_type pa_budget_versions.version_type%TYPE,
54 c_request_id pa_budget_versions.request_id%TYPE
55 )
56 IS
57 SELECT inf.budget_version_id budget_version_id,
58 inf.resource_list_member_id resource_list_member_id,
59 inf.cbs_element_id cbs_element_id, -- cbs enhancement changes bug#16445106
60 inf.task_id task_id,
61 inf.amount_type_code amount_type_code,
62 inf.txn_currency_code txn_currency_code,
63 DECODE (inf.delete_flag, g_hidden_col_char, 'N', DECODE(inf.delete_flag, 'Y', 'Y', 'N')) delete_flag,
64 DECODE (inf.planning_start_date, g_hidden_col_date, TO_DATE(NULL), inf.planning_start_date) planning_start_date,
65 DECODE (inf.planning_end_date, g_hidden_col_date, TO_DATE(NULL), inf.planning_end_date) planning_end_date,
66 '-99' unit_of_measure,
67 DECODE (inf.description, g_hidden_col_char, NULL, DECODE(inf.description, NULL, l_fnd_miss_char, inf.description)) description,
68 DECODE (inf.change_reason_code, g_hidden_col_char, NULL,
69 'MULTIPLE', NULL,
70 NULL,l_fnd_miss_char,
71 inf.change_reason_code) change_reason,
72 DECODE (c_allow_qty_flag,'N',NULL,
73 DECODE (inf.quantity, g_hidden_col_num, NULL, DECODE(inf.quantity, NULL, l_fnd_miss_num, inf.quantity))) quantity,
74 DECODE (c_allow_qty_flag,'N',NULL,
75 DECODE (inf.etc_quantity, g_hidden_col_num, NULL, DECODE(inf.etc_quantity, NULL, l_fnd_miss_num, inf.etc_quantity))) etc_quantity,
76 DECODE (c_allow_raw_cost_flag,'N',NULL,
77 DECODE (inf.raw_cost, g_hidden_col_num, NULL, DECODE(inf.raw_cost, NULL, l_fnd_miss_num, inf.raw_cost))) raw_cost,
78 DECODE (c_allow_raw_cost_flag,'N',NULL,
79 DECODE (inf.etc_raw_cost, g_hidden_col_num, NULL, DECODE(inf.etc_raw_cost, NULL, l_fnd_miss_num, inf.etc_raw_cost))) etc_raw_cost,
80 DECODE (c_allow_raw_cost_rate_flag,'N',NULL,
81 DECODE (inf.raw_cost_over_rate, g_hidden_col_num, NULL, DECODE(inf.raw_cost_over_rate, NULL, l_fnd_miss_num, inf.raw_cost_over_rate))) raw_cost_rate,
82 DECODE (c_allow_burd_cost_flag,'N',NULL,
83 DECODE (inf.burdened_cost, g_hidden_col_num, NULL, DECODE(inf.burdened_cost, NULL, l_fnd_miss_num, inf.burdened_cost))) burdened_cost,
84 DECODE (c_allow_burd_cost_flag,'N',NULL,
85 DECODE (inf.etc_burdened_cost, g_hidden_col_num, NULL, DECODE(inf.etc_burdened_cost, NULL, l_fnd_miss_num, inf.etc_burdened_cost))) etc_burdened_cost,
86 DECODE (c_allow_burd_cost_rate_flag,'N',NULL,
87 DECODE (inf.burdened_cost_over_rate, g_hidden_col_num, NULL, DECODE(inf.burdened_cost_over_rate, NULL, l_fnd_miss_num, inf.burdened_cost_over_rate))) burdened_cost_rate,
88 DECODE (c_allow_revenue_flag,'N',NULL,
89 DECODE (inf.revenue, g_hidden_col_num, NULL, DECODE(inf.revenue, NULL, l_fnd_miss_num, inf.revenue))) revenue,
90 DECODE (c_allow_revenue_flag,'N',NULL,
91 DECODE (inf.etc_revenue, g_hidden_col_num, NULL, DECODE(inf.etc_revenue, NULL, l_fnd_miss_num, inf.etc_revenue))) etc_revenue,
92 DECODE (c_allow_bill_rate_flag,'N',NULL,
93 DECODE (inf.bill_over_rate, g_hidden_col_num, NULL, DECODE(inf.bill_over_rate, NULL, l_fnd_miss_num, inf.bill_over_rate))) bill_rate,
94 DECODE (c_version_type, 'REVENUE', NULL,
95 DECODE(inf.projfunc_cost_rate_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_cost_rate_type, NULL, l_fnd_miss_char, inf.projfunc_cost_rate_type))) projfunc_cost_rate_type,
96 DECODE (c_version_type, 'REVENUE', NULL,
97 DECODE(inf.projfunc_cost_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_cost_rate_date_type, NULL, l_fnd_miss_char, inf.projfunc_cost_rate_date_type))) projfunc_cost_rate_date_type,
98 DECODE (c_version_type, 'REVENUE', NULL,
99 DECODE(inf.projfunc_cost_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.projfunc_cost_exchange_rate, NULL, l_fnd_miss_num, inf.projfunc_cost_exchange_rate))) projfunc_cost_exchange_rate,
100 DECODE (c_version_type, 'REVENUE', TO_DATE(NULL),
101 DECODE(inf.projfunc_cost_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.projfunc_cost_rate_date, NULL, l_fnd_miss_date, inf.projfunc_cost_rate_date))) projfunc_cost_rate_date,
102 DECODE (c_version_type, 'REVENUE', NULL,
103 DECODE(inf.project_cost_rate_type, g_hidden_col_char, NULL, DECODE(inf.project_cost_rate_type, NULL, l_fnd_miss_char, inf.project_cost_rate_type))) project_cost_rate_type,
104 DECODE (c_version_type, 'REVENUE', NULL,
105 DECODE(inf.project_cost_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.project_cost_rate_date_type, NULL, l_fnd_miss_char, inf.project_cost_rate_date_type))) project_cost_rate_date_type,
106 DECODE (c_version_type, 'REVENUE', NULL,
107 DECODE(inf.project_cost_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.project_cost_exchange_rate, NULL, l_fnd_miss_num, inf.project_cost_exchange_rate))) project_cost_exchange_rate,
108 DECODE (c_version_type, 'REVENUE', TO_DATE(NULL),
109 DECODE(inf.project_cost_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.project_cost_rate_date, NULL, l_fnd_miss_date, inf.project_cost_rate_date))) project_cost_rate_date,
110 DECODE (c_version_type, 'COST', NULL,
111 DECODE(inf.projfunc_rev_rate_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_rev_rate_type, NULL, l_fnd_miss_char, inf.projfunc_rev_rate_type))) projfunc_rev_rate_type,
112 DECODE (c_version_type, 'COST', NULL,
113 DECODE(inf.projfunc_rev_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_rev_rate_date_type, NULL, l_fnd_miss_char, inf.projfunc_rev_rate_date_type))) projfunc_rev_rate_date_type,
114 DECODE (c_version_type, 'COST', NULL,
115 DECODE(inf.projfunc_rev_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.projfunc_rev_exchange_rate, NULL, l_fnd_miss_num, inf.projfunc_rev_exchange_rate))) projfunc_rev_exchange_rate,
116 DECODE (c_version_type, 'COST', TO_DATE(NULL),
117 DECODE(inf.projfunc_rev_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.projfunc_rev_rate_date, NULL, l_fnd_miss_date, inf.projfunc_rev_rate_date))) projfunc_rev_rate_date,
118 DECODE (c_version_type, 'COST', NULL,
119 DECODE(inf.project_rev_rate_type, g_hidden_col_char, NULL, DECODE(inf.project_rev_rate_type, NULL, l_fnd_miss_char, inf.project_rev_rate_type))) project_rev_rate_type,
120 DECODE (c_version_type, 'COST', NULL,
121 DECODE(inf.project_rev_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.project_rev_rate_date_type, NULL, l_fnd_miss_char, inf.project_rev_rate_date_type))) project_rev_rate_date_type,
122 DECODE (c_version_type, 'COST', NULL,
123 DECODE(inf.project_rev_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.project_rev_exchange_rate, NULL, l_fnd_miss_num, inf.project_rev_exchange_rate))) project_rev_exchange_rate,
124 DECODE (c_version_type, 'COST', TO_DATE(NULL),
125 DECODE(inf.project_rev_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.project_rev_rate_date, NULL, l_fnd_miss_date, inf.project_rev_rate_date))) project_rev_rate_date,
126 DECODE (inf.projfunc_rate_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_rate_type, NULL, l_fnd_miss_char, inf.projfunc_rate_type)) projfunc_rate_type,
127 DECODE (inf.projfunc_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.projfunc_rate_date_type, NULL, l_fnd_miss_char, inf.projfunc_rate_date_type)) projfunc_rate_date_type,
128 DECODE (inf.projfunc_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.projfunc_exchange_rate, NULL, l_fnd_miss_num, inf.projfunc_exchange_rate)) projfunc_exchange_rate,
129 DECODE (inf.projfunc_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.projfunc_rate_date, NULL, l_fnd_miss_date, inf.projfunc_rate_date)) projfunc_rate_date,
130 DECODE (inf.project_rate_type, g_hidden_col_char, NULL, DECODE(inf.project_rate_type, NULL, l_fnd_miss_char, inf.project_rate_type)) project_rate_type,
131 DECODE (inf.project_rate_date_type, g_hidden_col_char, NULL, DECODE(inf.project_rate_date_type, NULL, l_fnd_miss_char, inf.project_rate_date_type)) project_rate_date_type,
132 DECODE (inf.project_exchange_rate, g_hidden_col_num, NULL, DECODE(inf.project_exchange_rate, NULL, l_fnd_miss_num, inf.project_exchange_rate)) project_exchange_rate,
133 DECODE (inf.project_rate_date, g_hidden_col_date, TO_DATE(NULL), DECODE(inf.project_rate_date, NULL, l_fnd_miss_date, inf.project_rate_date)) project_rate_date,
134 --DECODE (inf.spread_curve_id, g_hidden_col_char, NULL, DECODE(inf.spread_curve_name, NULL, l_fnd_miss_char, inf.spread_curve_name))
135 '-99' spread_curve_name,
136 --DECODE (inf.etc_method_name, g_hidden_col_char, NULL, DECODE(inf.etc_method_name, NULL, l_fnd_miss_char, inf.etc_method_name))
137 '-99' etc_method_name,
138 --DECODE (inf.mfc_cost_type_name, g_hidden_col_char, NULL, DECODE(inf.mfc_cost_type_name, NULL, l_fnd_miss_char, inf.mfc_cost_type_name))
139 '-99' mfc_cost_type_name,
140 DECODE (inf.pd_prd, g_hidden_col_num, NULL, DECODE(inf.pd_prd, NULL, l_fnd_miss_num, inf.pd_prd)) pd_prd,
141 DECODE (inf.prd1, g_hidden_col_num, NULL, DECODE(inf.prd1, NULL, l_fnd_miss_num, inf.prd1)) prd1,
142 DECODE (inf.prd2, g_hidden_col_num, NULL, DECODE(inf.prd2, NULL, l_fnd_miss_num, inf.prd2)) prd2,
143 DECODE (inf.prd3, g_hidden_col_num, NULL, DECODE(inf.prd3, NULL, l_fnd_miss_num, inf.prd3)) prd3,
144 DECODE (inf.prd4, g_hidden_col_num, NULL, DECODE(inf.prd4, NULL, l_fnd_miss_num, inf.prd4)) prd4,
145 DECODE (inf.prd5, g_hidden_col_num, NULL, DECODE(inf.prd5, NULL, l_fnd_miss_num, inf.prd5)) prd5,
146 DECODE (inf.prd6, g_hidden_col_num, NULL, DECODE(inf.prd6, NULL, l_fnd_miss_num, inf.prd6)) prd6,
147 DECODE (inf.prd7, g_hidden_col_num, NULL, DECODE(inf.prd7, NULL, l_fnd_miss_num, inf.prd7)) prd7,
148 DECODE (inf.prd8, g_hidden_col_num, NULL, DECODE(inf.prd8, NULL, l_fnd_miss_num, inf.prd8)) prd8,
149 DECODE (inf.prd9, g_hidden_col_num, NULL, DECODE(inf.prd9, NULL, l_fnd_miss_num, inf.prd9)) prd9,
150 DECODE (inf.prd10, g_hidden_col_num, NULL, DECODE(inf.prd10, NULL, l_fnd_miss_num, inf.prd10)) prd10,
151 DECODE (inf.prd11, g_hidden_col_num, NULL, DECODE(inf.prd11, NULL, l_fnd_miss_num, inf.prd11)) prd11,
152 DECODE (inf.prd12, g_hidden_col_num, NULL, DECODE(inf.prd12, NULL, l_fnd_miss_num, inf.prd12)) prd12,
153 DECODE (inf.prd13, g_hidden_col_num, NULL, DECODE(inf.prd13, NULL, l_fnd_miss_num, inf.prd13)) prd13,
154 DECODE (inf.prd14, g_hidden_col_num, NULL, DECODE(inf.prd14, NULL, l_fnd_miss_num, inf.prd14)) prd14,
155 DECODE (inf.prd15, g_hidden_col_num, NULL, DECODE(inf.prd15, NULL, l_fnd_miss_num, inf.prd15)) prd15,
156 DECODE (inf.prd16, g_hidden_col_num, NULL, DECODE(inf.prd16, NULL, l_fnd_miss_num, inf.prd16)) prd16,
157 DECODE (inf.prd17, g_hidden_col_num, NULL, DECODE(inf.prd17, NULL, l_fnd_miss_num, inf.prd17)) prd17,
158 DECODE (inf.prd18, g_hidden_col_num, NULL, DECODE(inf.prd18, NULL, l_fnd_miss_num, inf.prd18)) prd18,
159 DECODE (inf.prd19, g_hidden_col_num, NULL, DECODE(inf.prd19, NULL, l_fnd_miss_num, inf.prd19)) prd19,
160 DECODE (inf.prd20, g_hidden_col_num, NULL, DECODE(inf.prd20, NULL, l_fnd_miss_num, inf.prd20)) prd20,
161 DECODE (inf.prd21, g_hidden_col_num, NULL, DECODE(inf.prd21, NULL, l_fnd_miss_num, inf.prd21)) prd21,
162 DECODE (inf.prd22, g_hidden_col_num, NULL, DECODE(inf.prd22, NULL, l_fnd_miss_num, inf.prd22)) prd22,
163 DECODE (inf.prd23, g_hidden_col_num, NULL, DECODE(inf.prd23, NULL, l_fnd_miss_num, inf.prd23)) prd23,
164 DECODE (inf.prd24, g_hidden_col_num, NULL, DECODE(inf.prd24, NULL, l_fnd_miss_num, inf.prd24)) prd24,
165 DECODE (inf.prd25, g_hidden_col_num, NULL, DECODE(inf.prd25, NULL, l_fnd_miss_num, inf.prd25)) prd25,
166 DECODE (inf.prd26, g_hidden_col_num, NULL, DECODE(inf.prd26, NULL, l_fnd_miss_num, inf.prd26)) prd26,
167 DECODE (inf.prd27, g_hidden_col_num, NULL, DECODE(inf.prd27, NULL, l_fnd_miss_num, inf.prd27)) prd27,
168 DECODE (inf.prd28, g_hidden_col_num, NULL, DECODE(inf.prd28, NULL, l_fnd_miss_num, inf.prd28)) prd28,
169 DECODE (inf.prd29, g_hidden_col_num, NULL, DECODE(inf.prd29, NULL, l_fnd_miss_num, inf.prd29)) prd29,
170 DECODE (inf.prd30, g_hidden_col_num, NULL, DECODE(inf.prd30, NULL, l_fnd_miss_num, inf.prd30)) prd30,
171 DECODE (inf.prd31, g_hidden_col_num, NULL, DECODE(inf.prd31, NULL, l_fnd_miss_num, inf.prd31)) prd31,
172 DECODE (inf.prd32, g_hidden_col_num, NULL, DECODE(inf.prd32, NULL, l_fnd_miss_num, inf.prd32)) prd32,
173 DECODE (inf.prd33, g_hidden_col_num, NULL, DECODE(inf.prd33, NULL, l_fnd_miss_num, inf.prd33)) prd33,
174 DECODE (inf.prd34, g_hidden_col_num, NULL, DECODE(inf.prd34, NULL, l_fnd_miss_num, inf.prd34)) prd34,
175 DECODE (inf.prd35, g_hidden_col_num, NULL, DECODE(inf.prd35, NULL, l_fnd_miss_num, inf.prd35)) prd35,
176 DECODE (inf.prd36, g_hidden_col_num, NULL, DECODE(inf.prd36, NULL, l_fnd_miss_num, inf.prd36)) prd36,
177 DECODE (inf.prd37, g_hidden_col_num, NULL, DECODE(inf.prd37, NULL, l_fnd_miss_num, inf.prd37)) prd37,
178 DECODE (inf.prd38, g_hidden_col_num, NULL, DECODE(inf.prd38, NULL, l_fnd_miss_num, inf.prd38)) prd38,
179 DECODE (inf.prd39, g_hidden_col_num, NULL, DECODE(inf.prd39, NULL, l_fnd_miss_num, inf.prd39)) prd39,
180 DECODE (inf.prd40, g_hidden_col_num, NULL, DECODE(inf.prd40, NULL, l_fnd_miss_num, inf.prd40)) prd40,
181 DECODE (inf.prd41, g_hidden_col_num, NULL, DECODE(inf.prd41, NULL, l_fnd_miss_num, inf.prd41)) prd41,
182 DECODE (inf.prd42, g_hidden_col_num, NULL, DECODE(inf.prd42, NULL, l_fnd_miss_num, inf.prd42)) prd42,
183 DECODE (inf.prd43, g_hidden_col_num, NULL, DECODE(inf.prd43, NULL, l_fnd_miss_num, inf.prd43)) prd43,
184 DECODE (inf.prd44, g_hidden_col_num, NULL, DECODE(inf.prd44, NULL, l_fnd_miss_num, inf.prd44)) prd44,
185 DECODE (inf.prd45, g_hidden_col_num, NULL, DECODE(inf.prd45, NULL, l_fnd_miss_num, inf.prd45)) prd45,
186 DECODE (inf.prd46, g_hidden_col_num, NULL, DECODE(inf.prd46, NULL, l_fnd_miss_num, inf.prd46)) prd46,
187 DECODE (inf.prd47, g_hidden_col_num, NULL, DECODE(inf.prd47, NULL, l_fnd_miss_num, inf.prd47)) prd47,
188 DECODE (inf.prd48, g_hidden_col_num, NULL, DECODE(inf.prd48, NULL, l_fnd_miss_num, inf.prd48)) prd48,
189 DECODE (inf.prd49, g_hidden_col_num, NULL, DECODE(inf.prd49, NULL, l_fnd_miss_num, inf.prd49)) prd49,
190 DECODE (inf.prd50, g_hidden_col_num, NULL, DECODE(inf.prd50, NULL, l_fnd_miss_num, inf.prd50)) prd50,
191 DECODE (inf.prd51, g_hidden_col_num, NULL, DECODE(inf.prd51, NULL, l_fnd_miss_num, inf.prd51)) prd51,
192 DECODE (inf.prd52, g_hidden_col_num, NULL, DECODE(inf.prd52, NULL, l_fnd_miss_num, inf.prd52)) prd52,
193 DECODE (inf.sd_prd, g_hidden_col_num, NULL, DECODE(inf.sd_prd, NULL, l_fnd_miss_num, inf.sd_prd)) sd_prd
194 FROM pa_fp_webadi_upload_inf inf
195 WHERE inf.run_id=c_run_id
196 AND Nvl(inf.val_error_flag, 'N') <> 'Y'
197 AND inf.val_error_code IS NULL
198 AND (inf.amount_type_name IS NULL OR
199 (inf.amount_type_code IN ('TOTAL_QTY','FCST_QTY','ETC_QTY') AND
200 c_allow_qty_flag='Y') OR
201 (inf.amount_type_code IN ('TOTAL_RAW_COST','FCST_RAW_COST','ETC_RAW_COST') AND
202 c_allow_raw_cost_flag='Y') OR
203 (inf.amount_type_code IN ('TOTAL_BURDENED_COST','FCST_BURDENED_COST','ETC_BURDENED_COST') AND
204 c_allow_burd_cost_flag='Y') OR
205 (inf.amount_type_code IN ('TOTAL_REV','FCST_REVENUE','ETC_REVENUE') AND
206 c_allow_revenue_flag='Y') OR
207 (inf.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') AND
208 c_allow_raw_cost_rate_flag='Y') OR
209 (inf.amount_type_code IN ('BURDENED_COST_RATE','ETC_BURDENED_COST_RATE') AND
210 c_allow_burd_cost_rate_flag='Y') OR
211 (inf.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') AND
212 c_allow_bill_rate_flag='Y') )
213 AND Nvl(c_request_id, -99) = Nvl(inf.request_id, -99)
214 ORDER BY inf.task_id, inf.resource_list_member_id, Nvl(inf.txn_currency_code, '-99'),
215 DECODE (inf.amount_type_code, 'TOTAL_BURDENED_COST', 1,
216 'TOTAL_RAW_COST', 2,
217 'TOTAL_REV', 3,
218 'TOTAL_QTY', 4,
219 'BURDENED_COST_RATE', 5,
220 'RAW_COST_RATE', 6,
221 'BILL_RATE', 7,
222 'FCST_BURDENED_COST', 10,
223 'ETC_BURDENED_COST', 11,
224 'FCST_RAW_COST', 12,
225 'ETC_RAW_COST', 13,
226 'FCST_REVENUE', 14,
227 'ETC_REVENUE', 15,
228 'FCST_QTY', 16,
229 'ETC_QTY', 17,
230 'ETC_BURDENED_COST_RATE',18,
231 'ETC_RAW_COST_RATE', 19,
232 'ETC_BILL_RATE', 20, 0);
233
234 TYPE inf_cur_tbl_typ IS TABLE OF inf_tbl_data_csr%ROWTYPE INDEX BY BINARY_INTEGER;
235
236 /* Start of changes done for Bug : 4584865 */
237
238 /*This Record is used to store the Start Date and End Date of each Period based on the Period Mask associated
239 with the budget version.
240 */
241 TYPE periods_rec IS RECORD(sequence_number NUMBER,
242 period_name VARCHAR2(50),--gl_periods.period_name%TYPE,
243 start_date gl_periods.start_date%TYPE,
244 end_date gl_periods.end_date%TYPE);
245 --PL/SQL table created based on Record periods_rec.
246 TYPE periods_tbl IS TABLE OF periods_rec;
247
248 /* End of Changes done for Bug : 4584865*/
249
250 PROCEDURE write_log(
251 p_module_name IN VARCHAR2,
252 p_err_msg IN VARCHAR2,
253 p_debug_level IN NUMBER
254 )
255 IS
256 PRAGMA AUTONOMOUS_TRANSACTION;
257 BEGIN
258
259 INSERT INTO FND_LOG_MESSAGES
260 (module
261 ,log_level
262 ,message_text
263 ,session_id
264 ,user_id
265 ,timestamp
266 ,log_sequence)
267 values
268 (p_module_name
269 ,p_debug_level
270 ,p_err_msg
271 ,-1
272 ,fnd_global.user_id
273 ,sysdate
274 ,fnd_log_messages_s.nextval
275 );
276
277 commit;
278
279 EXCEPTION
280 WHEN OTHERS THEN
281 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
282 END write_log;
283
284 /*PROCEDURE log1(p_err_msg IN VARCHAR2
285 )
286 IS
287 PRAGMA AUTONOMOUS_TRANSACTION;
288 BEGIN
289 if wlog='N' then
290 return;
291 end if;
292 INSERT INTO t1
293 (c1,
294 c2)
295 values
296 (pa_fp_elements_s.nextval,
297 p_err_msg
298 );
299
300 commit;
301
302 EXCEPTION
303 WHEN OTHERS THEN
304 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
305 END log1;
306 */
307
308 PROCEDURE delete_xface
309 ( p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE
310 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
311 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
312 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
313 ,p_calling_module IN VARCHAR2 DEFAULT NULL
314 )
315 IS
316 l_debug_mode VARCHAR2(1) ;
317 l_msg_count NUMBER := 0;
318 l_data VARCHAR2(2000);
319 l_msg_data VARCHAR2(2000);
320 l_msg_index_out NUMBER;
321 l_del_record_count NUMBER;
322 l_budget_version_id pa_budget_versions.budget_version_id%TYPE;
323 l_bv_request_id pa_budget_versions.request_id%TYPE;
324 l_inf_request_id pa_budget_versions.request_id%TYPE;
325 l_preserve_rows_flag VARCHAR2(1);
326 l_nothing_delete_flag VARCHAR2(1);
327
328 BEGIN
329 x_msg_count := 0;
330 x_return_status := FND_API.G_RET_STS_SUCCESS;
331 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'Y');
332
333 IF l_debug_mode = 'Y' THEN
334 pa_debug.set_curr_function( p_function => 'DELETE_XFACE'
335 ,p_debug_mode => l_debug_mode );
336 pa_debug.g_err_stage := ':In pa_fp_webadi_pkg.DELETE_XFACE' ;
337 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
338 END IF;
339
340 l_preserve_rows_flag := 'N';
341 l_nothing_delete_flag := 'N';
342
343 -- validating input parameter
344 IF p_run_id IS NULL THEN
345 IF l_debug_mode = 'Y' THEN
346 pa_debug.g_err_stage := 'p_run_id is passed as null';
347 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
348 END IF;
349 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
350 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
351 p_token1 => 'PROCEDURENAME',
352 p_value1 => g_module_name);
353 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
354 END IF;
355
356 -- checking, if this api is called from web adi directly and if yes, if there is a pending
357 -- concurrent request for processing, then the rows in the interface table should not be deleted
358 IF p_calling_module = 'XL_UPLOAD' THEN
359 BEGIN
360 SELECT 'Y'
361 INTO l_preserve_rows_flag
362 FROM DUAL
363 WHERE EXISTS (SELECT 'X'
364 FROM pa_fp_webadi_upload_inf inf,
365 pa_budget_versions bv
366 WHERE inf.run_id = p_run_id
367 AND inf.budget_version_id = bv.budget_version_id
368 AND Nvl(inf.request_id, -99) = Nvl(bv.request_id, -99)
369 AND bv.plan_processing_code IN ('XLUP', 'XLUE'));
370 -- there is a pending concurrent request, which is yet to be processed
371 -- inf table data should not be deleted
372 IF l_debug_mode = 'Y' THEN
373 pa_debug.g_err_stage := 'Concurrent Request pending, returning';
374 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
375 END IF;
376 EXCEPTION
377 WHEN NO_DATA_FOUND THEN
378 IF l_debug_mode = 'Y' THEN
379 pa_debug.g_err_stage := 'This has been called for online mode';
380 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
381 END IF;
382 -- do nothing
383 l_preserve_rows_flag := 'N';
384 -- l_nothing_delete_flag := 'Y';
385 END;
386 END IF;
387
388 IF l_preserve_rows_flag <> 'Y' THEN
389 DELETE FROM PA_FP_WEBADI_UPLOAD_INF
390 WHERE run_id = p_run_id;
391
392 IF l_debug_mode = 'Y' THEN
393 l_del_record_count := SQL%ROWCOUNT;
394 pa_debug.g_err_stage := ':Deleted '||l_del_record_count||' records from PA_FP_WEBADI_UPLOAD_INF';
395 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
396 pa_debug.reset_curr_function;
397 END IF;
398 END IF;
399 EXCEPTION
400 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
401 l_msg_count := FND_MSG_PUB.count_msg;
402
403 IF l_msg_count = 1 and x_msg_data IS NULL THEN
404 PA_INTERFACE_UTILS_PUB.get_messages
405 (p_encoded => FND_API.G_TRUE
406 ,p_msg_index => 1
407 ,p_msg_count => l_msg_count
408 ,p_msg_data => l_msg_data
409 ,p_data => l_data
410 ,p_msg_index_out => l_msg_index_out);
411 x_msg_data := l_data;
412 x_msg_count := l_msg_count;
413 ELSE
414 x_msg_count := l_msg_count;
415 END IF;
416 x_return_status := FND_API.G_RET_STS_ERROR;
417
418 IF l_debug_mode = 'Y' THEN
419 pa_debug.reset_curr_function;
420 END IF;
421 RETURN;
422 WHEN OTHERS THEN
423 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
424 x_msg_count := 1;
425 x_msg_data := SQLERRM;
426 FND_MSG_PUB.add_exc_msg
427 ( p_pkg_name => 'pa_fp_webadi_pkg'
428 ,p_procedure_name => 'DELETE_XFACE' );
429 IF l_debug_mode = 'Y' THEN
430 pa_debug.write('DELETE_XFACE' || g_module_name,SQLERRM,4);
431 pa_debug.write('DELETE_XFACE' || g_module_name,pa_debug.G_Err_Stack,4);
432 pa_debug.reset_curr_function;
433 END IF;
434
435 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
436
437 END DELETE_XFACE;
438
439 -- Bug 3986129: FP.M Web ADI Dev changes. Added the followings:
440
441 PROCEDURE validate_header_info
442 ( p_calling_mode IN VARCHAR2,
443 p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE,
444 p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE,
445 p_record_version_number IN pa_budget_versions.record_version_number%TYPE,
446 p_pm_rec_version_number IN pa_period_masks_b.record_version_number%TYPE,
447 p_submit_flag IN VARCHAR2,
448 p_request_id IN pa_budget_versions.request_id%TYPE,
449 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
450 x_msg_data OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
451 x_msg_count OUT NOCOPY NUMBER) --File.Sql.39 bug 4440895
452
453 IS
454
455 CURSOR l_version_info_csr (c_budget_version_id pa_budget_versions.budget_version_id%TYPE)
456 IS
457 SELECT bv.record_version_number,
458 bv.period_mask_id,
459 bv.project_id,
460 bv.fin_plan_type_id,
461 Nvl(bv.ci_id, -1),
462 bv.version_type,
463 Nvl(bv.approved_cost_plan_type_flag, 'N'),
464 Nvl(bv.approved_rev_plan_type_flag, 'N'),
465 Nvl(bv.primary_cost_forecast_flag, 'N'),
466 Nvl(bv.primary_rev_forecast_flag, 'N'),
467 Nvl(bv.current_working_flag, 'N'),
468 fpt.plan_class_code,
469 Decode(bv.version_type, 'COST', fpo.cost_time_phased_code,
470 'REVENUE', fpo.revenue_time_phased_code, 'ALL', fpo.all_time_phased_code) time_phased_code
471 FROM pa_budget_versions bv,
472 pa_fin_plan_types_b fpt,
473 pa_proj_fp_options fpo
474 WHERE bv.budget_version_id = c_budget_version_id
475 AND bv.budget_version_id = fpo.fin_plan_version_id
476 AND bv.project_id = fpo.project_id
477 AND bv.fin_plan_type_id = fpt.fin_plan_type_id;
478
479 l_record_version_number pa_budget_versions.record_version_number%TYPE;
480 l_period_mask_id pa_period_masks_b.period_mask_id%TYPE;
481 l_project_id pa_projects_all.project_id%TYPE;
482 l_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE;
483 l_ci_id pa_control_items.ci_id%TYPE;
484 l_version_type pa_budget_versions.version_type%TYPE;
485 l_app_cost_plan_type_flag pa_budget_versions.approved_cost_plan_type_flag%TYPE;
486 l_rev_plan_type_flag pa_budget_versions.approved_rev_plan_type_flag%TYPE;
487 l_prime_cost_fcst_flag pa_budget_versions.primary_cost_forecast_flag%TYPE;
488 l_prime_rev_fcst_flag pa_budget_versions.primary_rev_forecast_flag%TYPE;
489 l_current_working_flag pa_budget_versions.current_working_flag%TYPE;
490 l_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE;
491 l_time_phase_code pa_proj_fp_options.all_time_phased_code%TYPE;
492 l_pm_rec_version_number pa_period_masks_b.record_version_number%TYPE;
493
494 is_periodic_layout VARCHAR2(1) := 'N';
495
496 l_sec_ret_code VARCHAR2(30);
497 l_locked_by_persion_id pa_budget_versions.locked_by_person_id%TYPE;
498 l_val_err_code VARCHAR2(30);
499 l_ci_status_code pa_control_items.status_code%TYPE;
500
501 l_return_status VARCHAR2(1);
502 l_msg_data VARCHAR2(2000);
503 l_msg_count NUMBER;
504
505 l_debug_mode VARCHAR2(1);
506 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.validate_header_info';
507 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
508 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
509 l_data VARCHAR2(2000);
510 l_msg_index_out NUMBER;
511
512
513 BEGIN
514
515 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
516 x_msg_count := 0;
517 x_return_status := FND_API.G_RET_STS_SUCCESS;
518 IF l_debug_mode = 'Y' THEN
519 PA_DEBUG.Set_Curr_Function( p_function => l_module_name,
520 p_debug_mode => l_debug_mode );
521 END IF;
522 IF l_debug_mode = 'Y' THEN
523 pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.validate_header_info';
524 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
525 END IF;
526
527 --log1('----- Entering into validate_header_info-------');
528
529 IF l_debug_mode = 'Y' THEN
530 pa_debug.g_err_stage := 'Opening l_version_info_csr';
531 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
532 END IF;
533
534 -- since there would be check for null budget_version_id in the
535 -- calling place, no check is made here for the same
536 OPEN l_version_info_csr(p_budget_version_id);
537 FETCH l_version_info_csr INTO
538 l_record_version_number,
539 l_period_mask_id,
540 l_project_id,
541 l_fin_plan_type_id,
542 l_ci_id,
543 l_version_type,
544 l_app_cost_plan_type_flag,
545 l_rev_plan_type_flag,
546 l_prime_cost_fcst_flag,
547 l_prime_rev_fcst_flag,
548 l_current_working_flag,
549 l_plan_class_code,
550 l_time_phase_code;
551
552 IF l_version_info_csr%NOTFOUND THEN
553 IF l_debug_mode = 'Y' THEN
554 pa_debug.g_err_stage := 'Cursor l_version_info_csr failed to fetch data';
555 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
556 END IF;
557 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
558 END IF;
559 CLOSE l_version_info_csr;
560
561 IF l_debug_mode = 'Y' THEN
562 pa_debug.g_err_stage := 'Data fetched from l_version_info_csr';
563 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
564 END IF;
565
566 --log1('----- STAGE 1-------');
567 IF l_debug_mode = 'Y' THEN
568 pa_debug.g_err_stage := 'Validating record version number';
569 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
570 END IF;
571 IF l_record_version_number <> p_record_version_number THEN
572 IF l_debug_mode = 'Y' THEN
573 pa_debug.g_err_stage := 'Record version number has changed';
574 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
575 END IF;
576 RAISE BV_validation_failed_exc;
577 END IF;
578 --Update the interface table with error_code 'PA_FP_WEBADI_VER_MODIFIED'
579
580 IF l_debug_mode = 'Y' THEN
581 pa_debug.g_err_stage := 'Checking for periodic layout';
582 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
583 END IF;
584
585 BEGIN
586 SELECT 'Y'
587 INTO is_periodic_layout
588 FROM DUAL
589 WHERE EXISTS(SELECT 'X'
590 FROM pa_fp_webadi_upload_inf
591 WHERE run_id = p_run_id
592 AND amount_type_name IS NOT NULL
593 AND Nvl(p_request_id, -99) = Nvl(request_id, -99));
594 EXCEPTION
595 WHEN NO_DATA_FOUND THEN
596 is_periodic_layout := 'N';
597 END;
598
599 --log1('----- STAGE 2-------');
600 IF is_periodic_layout = 'Y' THEN
601 IF l_debug_mode = 'Y' THEN
602 pa_debug.g_err_stage := 'Validating period mask';
603 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
604 END IF;
605
606 IF l_time_phase_code <> 'N' THEN
607 BEGIN
608 SELECT record_version_number
609 INTO l_pm_rec_version_number
610 FROM pa_period_masks_b
611 WHERE period_mask_id = l_period_mask_id;
612 EXCEPTION
613 WHEN NO_DATA_FOUND THEN
614 IF l_debug_mode = 'Y' THEN
615 pa_debug.g_err_stage := 'No data found for period mask';
616 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
617 END IF;
618 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
619 END;
620 -- the following validation is only for timephased budgets downloaded in
621 -- periodic layouts
622 IF l_pm_rec_version_number <> p_pm_rec_version_number THEN
623 IF l_debug_mode = 'Y' THEN
624 pa_debug.g_err_stage := 'period mask has changed';
625 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
626 END IF;
627 RAISE Bv_period_mask_changed_Exc;
628 --Update the interface table with error_code 'PA_FP_WEBADI_TP_MODIFIED'
629 END IF;
630 END IF;
631 END IF;
632
633 --log1('----- STAGE 3-------');
634 IF l_debug_mode = 'Y' THEN
635 pa_debug.g_err_stage := 'Checking for function security';
636 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
637 END IF;
638
639 IF l_ci_id = -1 THEN
640 -- budget version
641 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY
642 (p_api_version_number => PA_BUDGET_PUB.G_API_VERSION_NUMBER,
643 p_project_id => l_project_id,
644 p_fin_plan_type_id => l_fin_plan_type_id,
645 p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN,
646 p_function_name => 'PA_PM_UPDATE_BUDGET',
647 p_version_type => l_version_type,
648 x_return_status => l_return_status,
649 x_ret_code => l_sec_ret_code);
650 ELSE
651 -- change order version
652 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY
653 (p_api_version_number => PA_BUDGET_PUB.G_API_VERSION_NUMBER,
654 p_project_id => l_project_id,
655 p_fin_plan_type_id => l_fin_plan_type_id,
656 p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN,
657 p_function_name => 'PA_PM_UPDATE_CHG_DOC',
658 p_version_type => l_version_type,
659 x_return_status => l_return_status,
660 x_ret_code => l_sec_ret_code);
661 END IF;
662
663 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
664 IF l_debug_mode = 'Y' THEN
665 pa_debug.g_err_stage := 'Function security not present';
666 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
667 END IF;
668 RAISE No_Bv_Maint_Previlege_Exc;
669 --Update the interface table with error_code 'PA_FP_WEBADI_NO_BV_MAINT_PVLG'
670 END IF;
671
672 --log1('----- STAGE 4-------');
673 -- Checking, if the budget version can be edited or not
674 IF l_debug_mode = 'Y' THEN
675 pa_debug.g_err_stage := 'Checking if the version can be edited';
676 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
677 END IF;
678
679 IF l_ci_id = -1 THEN
680 pa_fin_plan_utils.validate_editable_bv
681 (p_budget_version_id => p_budget_version_id,
682 p_user_id => fnd_global.user_id,
683 p_context => 'WEBADI',
684 p_excel_calling_mode => p_calling_mode,
685 x_locked_by_person_id => l_locked_by_persion_id,
686 x_err_code => l_val_err_code,
687 x_return_status => l_return_status,
688 x_msg_count => l_msg_count,
689 x_msg_data => l_msg_data);
690
691 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
692 IF l_val_err_code IS NOT NULL THEN
693 IF l_debug_mode = 'Y' THEN
694 pa_debug.g_err_stage := 'The version can not be edited';
695 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
696 END IF;
697 RAISE Bv_Non_Editable_Exc;
698 --update the interface table with the error_code;
699 END IF;
700 END IF;
701
702 --log1('----- STAGE 5-------');
703 ELSE
704 -- Check if the ci is not editable
705 IF l_debug_mode = 'Y' THEN
706 pa_debug.g_err_stage := 'Checking if the CO can be updated';
707 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
708 END IF;
709 BEGIN
710 SELECT pjs.project_system_status_code
711 INTO l_ci_status_code
712 FROM pa_control_items pci,
713 pa_project_statuses pjs
714 WHERE pci.ci_id = l_ci_id
715 and pci.status_code = pjs.project_status_code;
716 EXCEPTION
717 WHEN NO_DATA_FOUND THEN
718 IF l_debug_mode = 'Y' THEN
719 pa_debug.g_err_stage := 'Status code not found';
720 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
721 END IF;
722 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
723 END;
724
725 IF l_ci_status_code NOT IN ('CI_DRAFT', 'CI_WORKING') THEN
726 IF l_debug_mode = 'Y' THEN
727 pa_debug.g_err_stage := 'CO version cannot be updated';
728 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
729 END IF;
730 RAISE Co_Ver_Non_Editable_Exc;
731 --update the interface table with error_code 'PA_FP_WA_CI_VER_NON_EDITABLE'
732 END IF;
733
734 --log1('----- STAGE 6-------');
735 END IF;
736 /* check if the p_submit flag is passed as 'Y', if yes then
737 * check if the version is current working version or not,
738 * if the user has the submit privilege or not
739 * throw an error, if the version is CI
740 */
741
742 IF l_debug_mode = 'Y' THEN
743 pa_debug.g_err_stage := 'Checking for submit previlege';
744 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
745 END IF;
746 IF p_submit_flag = 'Y' THEN
747 -- call to check if the version is current working
748 IF l_ci_id = -1 THEN
749 IF l_current_working_flag = 'N' THEN
750 IF l_debug_mode = 'Y' THEN
751 pa_debug.g_err_stage := 'Submittin while not current working';
752 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
753 END IF;
754 RAISE Bv_Not_Curr_Working_Exc;
755 --Update the interface table with error_code 'PA_FP_WA_BV_NOT_CURR_WORKING';
756 END IF;
757 ELSE -- for CI version the p_submit_flag = 'Y'
758 IF l_debug_mode = 'Y' THEN
759 pa_debug.g_err_stage := 'Submitting CO version';
760 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
761 END IF;
762 RAISE Ci_Ver_Sumbit_Flag_Exc;
763 --Update the interface table with error_code 'PA_FP_WA_CI_VER_SUBMIT_FLAG';
764 END IF;
765
766 PA_PM_FUNCTION_SECURITY_PUB.CHECK_BUDGET_SECURITY
767 (p_api_version_number => PA_BUDGET_PUB.G_API_VERSION_NUMBER,
768 p_project_id => l_project_id,
769 p_fin_plan_type_id => l_fin_plan_type_id,
770 p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FIN_PLAN,
771 p_function_name => 'PA_PM_SUBMIT_BUDGET',
772 p_version_type => l_version_type,
773 x_return_status => l_return_status,
774 x_ret_code => l_sec_ret_code);
775
776 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
777 IF l_debug_mode = 'Y' THEN
778 pa_debug.g_err_stage := 'No submit previlege';
779 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
780 END IF;
781 RAISE No_Bv_Maint_Previlege_Exc;
782 --Update the interface table with error_code 'PA_FP_WEBADI_NO_BV_MAINT_PVLG'
783 END IF;
784
785 --log1('----- STAGE 7-------');
786 END IF; -- p_submit_flag = 'Y'
787
788 IF l_debug_mode = 'Y' THEN
789 pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.validate_header_info';
790 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
791 END IF;
792 IF l_debug_mode = 'Y' THEN
793 pa_debug.reset_curr_function;
794 END IF;
795
796 --log1('----- Leaving validate_header_info-------');
797
798 EXCEPTION
799 -- handling all the pre defined exceptions
800 WHEN BV_validation_failed_exc THEN
801 IF l_debug_mode = 'Y' THEN
802 pa_debug.g_err_stage := 'Updating tmp table with error code: PA_FP_WEBADI_VER_MODIFIED';
803 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
804 END IF;
805
806 UPDATE pa_fp_webadi_upload_inf
807 SET val_error_flag = 'Y',
808 val_error_code = 'PA_FP_WEBADI_VER_MODIFIED',
809 err_task_name = nvl(task_name,'-98'),
810 err_task_number = nvl(task_number,'-98'),
811 err_alias = nvl(resource_alias,'-98'),
812 err_amount_type_code = nvl(amount_type_code,'-98')
813 WHERE run_id=p_run_id
814 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
815
816 x_return_status := FND_API.G_RET_STS_ERROR;
817 IF l_debug_mode = 'Y' THEN
818 pa_debug.reset_curr_function;
819 END IF;
820
821 RETURN;
822 WHEN Bv_period_mask_changed_Exc THEN
823 IF l_debug_mode = 'Y' THEN
824 pa_debug.g_err_stage := 'Updating tmp table with error code: PA_FP_WEBADI_TP_MODIFIED';
825 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
826 END IF;
827
828 UPDATE pa_fp_webadi_upload_inf
829 SET val_error_flag = 'Y',
830 val_error_code = 'PA_FP_WEBADI_TP_MODIFIED',
831 err_task_name = nvl(task_name,'-98'),
832 err_task_number = nvl(task_number,'-98'),
833 err_alias = nvl(resource_alias,'-98'),
834 err_amount_type_code = nvl(amount_type_code,'-98')
835 WHERE run_id=p_run_id
836 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
837
838 x_return_status := FND_API.G_RET_STS_ERROR;
839 IF l_debug_mode = 'Y' THEN
840 pa_debug.reset_curr_function;
841 END IF;
842
843 RETURN;
844 WHEN No_Bv_Maint_Previlege_Exc THEN
845 IF l_debug_mode = 'Y' THEN
846 pa_debug.g_err_stage := 'Updating tmp table with error code: PA_FP_WEBADI_NO_BV_MAINT_PVLG';
847 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
848 END IF;
849
850 UPDATE pa_fp_webadi_upload_inf
851 SET val_error_flag = 'Y',
852 val_error_code = 'PA_FP_WEBADI_NO_BV_MAINT_PVLG',
853 err_task_name = nvl(task_name,'-98'),
854 err_task_number = nvl(task_number,'-98'),
855 err_alias = nvl(resource_alias,'-98'),
856 err_amount_type_code = nvl(amount_type_code,'-98')
857 WHERE run_id=p_run_id
858 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
859
860 x_return_status := FND_API.G_RET_STS_ERROR;
861 IF l_debug_mode = 'Y' THEN
862 pa_debug.reset_curr_function;
863 END IF;
864
865 RETURN;
866 WHEN Bv_Non_Editable_Exc THEN
867 IF l_debug_mode = 'Y' THEN
868 pa_debug.g_err_stage := 'Updating tmp table with error code: ' || l_val_err_code;
869 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
870 END IF;
871
872 UPDATE pa_fp_webadi_upload_inf
873 SET val_error_flag = 'Y',
874 val_error_code = l_val_err_code,
875 err_task_name = nvl(task_name,'-98'),
876 err_task_number = nvl(task_number,'-98'),
877 err_alias = nvl(resource_alias,'-98'),
878 err_amount_type_code = nvl(amount_type_code,'-98')
879 WHERE run_id=p_run_id
880 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
881
882 x_return_status := FND_API.G_RET_STS_ERROR;
883 IF l_debug_mode = 'Y' THEN
884 pa_debug.reset_curr_function;
885 END IF;
886
887 RETURN;
888 WHEN Co_Ver_Non_Editable_Exc THEN
889 IF l_debug_mode = 'Y' THEN
890 pa_debug.g_err_stage := 'Updating tmp table with error code: FP_WEBADI_CI_VER_NON_EDITABLE';
891 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
892 END IF;
893
894 UPDATE pa_fp_webadi_upload_inf
895 SET val_error_flag = 'Y',
896 val_error_code = 'PA_FP_WA_CI_VER_NON_EDITABLE',
897 err_task_name = nvl(task_name,'-98'),
898 err_task_number = nvl(task_number,'-98'),
899 err_alias = nvl(resource_alias,'-98'),
900 err_amount_type_code = nvl(amount_type_code,'-98')
901 WHERE run_id=p_run_id
902 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
903
904 x_return_status := FND_API.G_RET_STS_ERROR;
905 IF l_debug_mode = 'Y' THEN
906 pa_debug.reset_curr_function;
907 END IF;
908
909 RETURN;
910 WHEN Bv_Not_Curr_Working_Exc THEN
911 IF l_debug_mode = 'Y' THEN
912 pa_debug.g_err_stage := 'Updating tmp table with error code: FP_WEBADI_BV_NOT_CURR_WORKING';
913 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
914 END IF;
915
916 UPDATE pa_fp_webadi_upload_inf
917 SET val_error_flag = 'Y',
918 val_error_code = 'PA_FP_WA_BV_NOT_CURR_WORKING',
919 err_task_name = nvl(task_name,'-98'),
920 err_task_number = nvl(task_number,'-98'),
921 err_alias = nvl(resource_alias,'-98'),
922 err_amount_type_code = nvl(amount_type_code,'-98')
923 WHERE run_id=p_run_id
924 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
925
926 x_return_status := FND_API.G_RET_STS_ERROR;
927 IF l_debug_mode = 'Y' THEN
928 pa_debug.reset_curr_function;
929 END IF;
930
931 RETURN;
932 WHEN Ci_Ver_Sumbit_Flag_Exc THEN
933 IF l_debug_mode = 'Y' THEN
934 pa_debug.g_err_stage := 'Updating tmp table with error code: FP_WEBADI_CI_VER_SUBMIT_FLAG';
935 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
936 END IF;
937
938 UPDATE pa_fp_webadi_upload_inf
939 SET val_error_flag = 'Y',
940 val_error_code = 'PA_FP_WA_CI_VER_SUBMIT_FLAG',
941 err_task_name = nvl(task_name,'-98'),
942 err_task_number = nvl(task_number,'-98'),
943 err_alias = nvl(resource_alias,'-98'),
944 err_amount_type_code = nvl(amount_type_code,'-98')
945 WHERE run_id=p_run_id
946 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
947
948 x_return_status := FND_API.G_RET_STS_ERROR;
949 IF l_debug_mode = 'Y' THEN
950 pa_debug.reset_curr_function;
951 END IF;
952
953 RETURN;
954
955 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
956 l_msg_count := FND_MSG_PUB.count_msg;
957
958 IF l_msg_count = 1 and x_msg_data IS NULL THEN
959 PA_INTERFACE_UTILS_PUB.get_messages
960 (p_encoded => FND_API.G_TRUE
961 ,p_msg_index => 1
962 ,p_msg_count => l_msg_count
963 ,p_msg_data => l_msg_data
964 ,p_data => l_data
965 ,p_msg_index_out => l_msg_index_out);
966 x_msg_data := l_data;
967 x_msg_count := l_msg_count;
968 ELSE
969 x_msg_count := l_msg_count;
970 END IF;
971 x_return_status := FND_API.G_RET_STS_ERROR;
972
973 IF l_debug_mode = 'Y' THEN
974 pa_debug.reset_curr_function;
975 END IF;
976 RETURN;
977
978 WHEN OTHERS THEN
979 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
980 x_msg_count := 1;
981 x_msg_data := SQLERRM;
982
983 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
984 ,p_procedure_name => 'prepare_val_input');
985 IF l_debug_mode = 'Y' THEN
986 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
987 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
988 END IF;
989
990 IF l_debug_mode = 'Y' THEN
991 pa_debug.reset_curr_function;
992 END IF;
993 RAISE;
994
995 END validate_header_info; -- of validate_header_info
996
997 /* The input parameter p_context would only be passed if the task id can not be derived
998 * from the task number/ task name provided i.e task_id is returned as null from the select
999 * in prepare_val_input api. The valid value of this is 'INV_TASK.
1000 * For other validation errors, the corresponding error code would be passed to the api
1001 * along with other informations like task_id, resource_alias, amount_type_code
1002 */
1003
1004 -- Making this procedure an autonomous transition block as the errors reported
1005 -- on the interface table have to be retained even after rolling back all the
1006 -- other DML performed in the course of validation processing till the point
1007 -- a validation failure occurs.
1008
1009 PROCEDURE process_errors
1010 ( p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE,
1011 p_context IN VARCHAR2,
1012 p_periodic_flag IN VARCHAR2,
1013 p_error_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE,
1014 p_task_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE,
1015 p_rlm_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE,
1016 p_txn_curr_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE,
1017 p_amount_type_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE,
1018 p_request_id IN pa_budget_versions.request_id%TYPE,
1019 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1020 x_msg_data OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1021 x_msg_count OUT NOCOPY NUMBER) --File.Sql.39 bug 4440895
1022 IS
1023 -- PRAGMA AUTONOMOUS_TRANSACTION;
1024
1025 l_return_status VARCHAR2(1);
1026 l_msg_data VARCHAR2(2000);
1027 l_msg_count NUMBER;
1028
1029 l_debug_mode VARCHAR2(1);
1030 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.process_errors';
1031 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1032 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1033 l_msg_index_out NUMBER;
1034 l_data VARCHAR2(2000);
1035 l_periodic_flag VARCHAR2(1);
1036
1037 BEGIN
1038 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1039 x_msg_count := 0;
1040 x_return_status := FND_API.G_RET_STS_SUCCESS;
1041 IF l_debug_mode = 'Y' THEN
1042 PA_DEBUG.Set_Curr_Function( p_function => l_module_name,
1043 p_debug_mode => l_debug_mode );
1044 END IF;
1045 IF l_debug_mode = 'Y' THEN
1046 pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.process_errors';
1047 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1048 END IF;
1049
1050 --log1('PE 1'||p_error_code_tbl.COUNT);
1051 --log1('PE 2'||p_periodic_flag);
1052 --log1('PE 3'||p_task_id_tbl.COUNT);
1053 --log1('PE 4'||p_rlm_id_tbl.COUNT);
1054 --log1('PE 5'||p_txn_curr_tbl.COUNT);
1055 --log1('PE 6'||p_run_id);
1056 --log1('PE 7'||p_context);
1057 /*FOR k IN 1..p_error_code_tbl.COUNT LOOP
1058
1059 log1('p_error_code_tbl('||k||') is '||p_error_code_tbl(k));
1060 log1('p_task_id_tbl('||k||') is '||p_task_id_tbl(k));
1061 log1('p_rlm_id_tbl('||k||') is '||p_rlm_id_tbl(k));
1062 log1('p_txn_curr_tbl('||k||') is '||p_txn_curr_tbl(k));
1063 IF p_amount_type_tbl.EXISTS(k) THEN
1064 log1('p_amount_type_tbl('||k||') is '||p_amount_type_tbl(k));
1065
1066 ELSE
1067
1068 log1('p_amount_type_tbl('||k||') is NULL5');
1069 END IF;
1070 end loop;*/
1071
1072 l_periodic_flag := p_periodic_flag;
1073
1074 -- 4497322.Perf Fix:A condition is added in the WHERE clause.
1075 IF l_periodic_flag IS NULL THEN
1076
1077 BEGIN
1078 SELECT 'Y'
1079 INTO l_periodic_flag
1080 FROM DUAL
1081 WHERE EXISTS (SELECT 1
1082 FROM pa_fp_webadi_upload_inf
1083 WHERE run_id=p_run_id
1084 AND amount_type_name IS NOT NULL
1085 AND Nvl(p_request_id, -99) = Nvl(request_id, -99));
1086
1087 EXCEPTION
1088 WHEN NO_DATA_FOUND THEN
1089
1090 l_periodic_flag := 'N';
1091
1092 END;
1093
1094 END IF;
1095
1096
1097
1098 IF p_context IS NOT NULL THEN
1099 IF p_context = 'INV_TASK' THEN
1100 UPDATE pa_fp_webadi_upload_inf
1101 SET val_error_flag = 'Y',
1102 val_error_code = 'INVALID_TASK_INFO',
1103 err_task_name = nvl(task_name,'-98'),
1104 err_task_number = nvl(task_number,'-98'),
1105 err_alias = nvl(resource_alias,'-98'),
1106 err_amount_type_code = nvl(amount_type_code,'-98')
1107 WHERE run_id = p_run_id
1108 AND task_id IS NULL
1109 AND val_error_flag IS NULL
1110 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
1111 ELSIF p_context = 'INV_RESOURCE' THEN
1112 UPDATE pa_fp_webadi_upload_inf
1113 SET val_error_flag = 'Y',
1114 val_error_code = 'INVALID_RESOURCE_INFO',
1115 err_task_name = nvl(task_name,'-98'),
1116 err_task_number = nvl(task_number,'-98'),
1117 err_alias = nvl(resource_alias,'-98'),
1118 err_amount_type_code = nvl(amount_type_code,'-98')
1119 WHERE run_id = p_run_id
1120 AND resource_list_member_id IS NULL
1121 AND val_error_flag IS NULL
1122 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
1123 ELSE -- no other valid not null context
1124 IF l_debug_mode = 'Y' THEN
1125 pa_debug.g_err_stage := 'Not a valid calling context passed';
1126 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1127 END IF;
1128 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1129 END IF;
1130
1131 ELSE -- when p_context is not passed
1132 IF p_error_code_tbl.count > 0 THEN
1133
1134 IF p_periodic_flag = 'Y' THEN
1135
1136 IF p_error_code_tbl.COUNT = p_task_id_tbl.COUNT AND
1137 p_error_code_tbl.COUNT = p_rlm_id_tbl.COUNT AND
1138 p_error_code_tbl.COUNT = p_amount_type_tbl.COUNT AND
1139 p_error_code_tbl.COUNT = p_txn_curr_tbl.COUNT THEN
1140 FORALL i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST
1141 UPDATE pa_fp_webadi_upload_inf
1142 SET val_error_flag = 'Y',
1143 val_error_code = p_error_code_tbl(i),
1144 err_task_name = nvl(task_name,'-98'),
1145 err_task_number = nvl(task_number,'-98'),
1146 err_alias = nvl(resource_alias,'-98'),
1147 err_amount_type_code = nvl(amount_type_code,'-98')
1148 WHERE run_id = p_run_id
1149 AND task_id = p_task_id_tbl(i)
1150 AND resource_list_member_id = p_rlm_id_tbl(i)
1151 AND Nvl(txn_currency_code, '-11') = Nvl(p_txn_curr_tbl(i), '-11')
1152 AND amount_type_code = p_amount_type_tbl(i)
1153 AND Nvl(p_request_id, -99) = Nvl(request_id, -99)
1154 AND ROWNUM=1;
1155
1156 ELSE -- input table length not same
1157 IF l_debug_mode = 'Y' THEN
1158 pa_debug.g_err_stage := 'Information mismatch to process: periodic';
1159 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1160 END IF;
1161 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1162 END IF;
1163
1164 ELSE -- non periodic
1165
1166 IF p_error_code_tbl.COUNT = p_task_id_tbl.COUNT AND
1167 p_error_code_tbl.COUNT = p_rlm_id_tbl.COUNT AND
1168 p_error_code_tbl.COUNT = p_txn_curr_tbl.COUNT THEN
1169 FORALL i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST
1170 UPDATE pa_fp_webadi_upload_inf inf
1171 SET inf.val_error_flag = 'Y',
1172 inf.val_error_code = p_error_code_tbl(i),
1173 inf.err_task_name = nvl(inf.task_name,'-98'),
1174 inf.err_task_number = nvl(inf.task_number,'-98'),
1175 inf.err_alias = nvl(inf.resource_alias,'-98'),
1176 inf.err_amount_type_code = nvl(inf.amount_type_code,'-98')
1177 WHERE inf.run_id = p_run_id
1178 AND inf.task_id = p_task_id_tbl(i)
1179 AND inf.resource_list_member_id = p_rlm_id_tbl(i)
1180 AND Nvl(inf.txn_currency_code, '-11') = Nvl(p_txn_curr_tbl(i), '-11')
1181 AND Nvl(p_request_id, -99) = Nvl(inf.request_id, -99)
1182 AND ROWNUM=1;
1183
1184 IF l_debug_mode = 'Y' THEN
1185 pa_debug.g_err_stage := 'SQL%COUNT' || SQL%ROWCOUNT;
1186 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1187 END IF;
1188 ELSE
1189 IF l_debug_mode = 'Y' THEN
1190 pa_debug.g_err_stage := 'Information mismatch to process: non periodic';
1191 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1192 END IF;
1193 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1194 END IF;
1195 END IF;
1196
1197 ELSE -- lenght of error code table is 0 when context is not passed
1198 IF l_debug_mode = 'Y' THEN
1199 pa_debug.g_err_stage := 'No error code passed, returning';
1200 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1201 END IF;
1202 IF l_debug_mode = 'Y' THEN
1203 pa_debug.reset_curr_function;
1204 END IF;
1205 RETURN;
1206 END IF;
1207 END IF; -- p_context
1208
1209 -- placing a commit here to retain all the error codes stamped.
1210 -- COMMIT;
1211
1212 IF l_debug_mode = 'Y' THEN
1213 pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.process_errors';
1214 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1215 END IF;
1216 IF l_debug_mode = 'Y' THEN
1217 pa_debug.reset_curr_function;
1218 END IF;
1219
1220 EXCEPTION
1221 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1222 l_msg_count := FND_MSG_PUB.count_msg;
1223
1224 IF l_msg_count = 1 and x_msg_data IS NULL THEN
1225 PA_INTERFACE_UTILS_PUB.get_messages
1226 (p_encoded => FND_API.G_TRUE
1227 ,p_msg_index => 1
1228 ,p_msg_count => l_msg_count
1229 ,p_msg_data => l_msg_data
1230 ,p_data => l_data
1231 ,p_msg_index_out => l_msg_index_out);
1232 x_msg_data := l_data;
1233 x_msg_count := l_msg_count;
1234 ELSE
1235 x_msg_count := l_msg_count;
1236 END IF;
1237 x_return_status := FND_API.G_RET_STS_ERROR;
1238
1239 IF l_debug_mode = 'Y' THEN
1240 pa_debug.reset_curr_function;
1241 END IF;
1242 RETURN;
1243
1244 WHEN OTHERS THEN
1245 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1246 x_msg_count := 1;
1247 x_msg_data := SQLERRM;
1248
1249 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
1250 ,p_procedure_name => 'process_errors');
1251 IF l_debug_mode = 'Y' THEN
1252 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1253 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1254 END IF;
1255
1256 IF l_debug_mode = 'Y' THEN
1257 pa_debug.reset_curr_function;
1258 END IF;
1259 RAISE;
1260 END process_errors;
1261
1262
1263 /* Bug 4431269: Added the following private api to read the global table of
1264 * rec type returned from calculate api and then to call process_errors api
1265 * to report the errors in interface table.
1266 */
1267 PROCEDURE read_global_var_to_report_err
1268 ( p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE,
1269 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1270 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1271 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1272 )
1273
1274 IS
1275 l_return_status VARCHAR2(1);
1276 l_msg_data VARCHAR2(2000);
1277 l_msg_count NUMBER;
1278
1279 l_debug_mode VARCHAR2(1);
1280 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.read_global_var_to_report_err';
1281 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1282 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1283 l_msg_index_out NUMBER;
1284 l_data VARCHAR2(2000);
1285
1286 l_err_val_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1287 l_err_task_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1288 l_err_rlm_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1289 l_err_txn_curr_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1290
1291 BEGIN
1292 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1293 x_msg_count := 0;
1294 x_return_status := FND_API.G_RET_STS_SUCCESS;
1295 IF l_debug_mode = 'Y' THEN
1296 PA_DEBUG.Set_Curr_Function( p_function => l_module_name,
1297 p_debug_mode => l_debug_mode );
1298 END IF;
1299 IF l_debug_mode = 'Y' THEN
1300 pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.read_global_var_to_report_err';
1301 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1302 END IF;
1303
1304 -- checking if there is some value in the global table
1305 IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1306 IF l_debug_mode = 'Y' THEN
1307 pa_debug.g_err_stage := 'There are some values in the global table';
1308 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1309 END IF;
1310
1311 -- processing starts
1312 FOR i IN g_fp_webadi_rec_tbl.FIRST .. g_fp_webadi_rec_tbl.LAST LOOP
1313 l_err_val_code_tbl.EXTEND(1);
1314 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := g_fp_webadi_rec_tbl(i).error_code;
1315 l_err_task_id_tbl.EXTEND(1);
1316 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := g_fp_webadi_rec_tbl(i).task_id;
1317 l_err_rlm_id_tbl.EXTEND(1);
1318 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := g_fp_webadi_rec_tbl(i).rlm_id;
1319 l_err_txn_curr_tbl.EXTEND(1);
1320 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := g_fp_webadi_rec_tbl(i).txn_currency;
1321 END LOOP;
1322
1323 pa_fp_webadi_pkg.process_errors
1324 ( p_run_id => p_run_id,
1325 p_error_code_tbl => l_err_val_code_tbl,
1326 p_task_id_tbl => l_err_task_id_tbl,
1327 p_rlm_id_tbl => l_err_rlm_id_tbl,
1328 p_txn_curr_tbl => l_err_txn_curr_tbl,
1329 x_return_status => l_return_status,
1330 x_msg_data => l_msg_data,
1331 x_msg_count => l_msg_count);
1332 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1333 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1334 END IF;
1335
1336 -- clearing the table of rec type
1337 IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1338 g_fp_webadi_rec_tbl.DELETE;
1339 END IF;
1340 ELSE
1341 IF l_debug_mode = 'Y' THEN
1342 pa_debug.g_err_stage := 'There is no value stored in the global table, returning';
1343 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1344 END IF;
1345 RAISE PA_FP_CONSTANTS_PKG.Just_Ret_Exc;
1346 END IF;
1347 IF l_debug_mode = 'Y' THEN
1348 pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.read_global_var_to_report_err';
1349 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1350 END IF;
1351 IF l_debug_mode = 'Y' THEN
1352 pa_debug.reset_curr_function;
1353 END IF;
1354 EXCEPTION
1355 WHEN PA_FP_CONSTANTS_PKG.Just_Ret_Exc THEN
1356 IF l_debug_mode = 'Y' THEN
1357 pa_debug.reset_curr_function;
1358 END IF;
1359 RETURN;
1360 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1361
1362 -- clearing the table of rec type
1363 IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1364 g_fp_webadi_rec_tbl.DELETE;
1365 END IF;
1366
1367 l_msg_count := FND_MSG_PUB.count_msg;
1368
1369 IF l_msg_count = 1 and x_msg_data IS NULL THEN
1370 PA_INTERFACE_UTILS_PUB.get_messages
1371 (p_encoded => FND_API.G_TRUE
1372 ,p_msg_index => 1
1373 ,p_msg_count => l_msg_count
1374 ,p_msg_data => l_msg_data
1375 ,p_data => l_data
1376 ,p_msg_index_out => l_msg_index_out);
1377 x_msg_data := l_data;
1378 x_msg_count := l_msg_count;
1379 ELSE
1380 x_msg_count := l_msg_count;
1381 END IF;
1382 x_return_status := FND_API.G_RET_STS_ERROR;
1383
1384 IF l_debug_mode = 'Y' THEN
1385 pa_debug.reset_curr_function;
1386 END IF;
1387 RETURN;
1388
1389 WHEN OTHERS THEN
1390 -- clearing the table of rec type
1391 IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
1392 g_fp_webadi_rec_tbl.DELETE;
1393 END IF;
1394
1395 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1396 x_msg_count := 1;
1397 x_msg_data := SQLERRM;
1398
1399 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
1400 ,p_procedure_name => 'read_global_var_to_report_err');
1401 IF l_debug_mode = 'Y' THEN
1402 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1403 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1404 END IF;
1405
1406 IF l_debug_mode = 'Y' THEN
1407 pa_debug.reset_curr_function;
1408 END IF;
1409 RAISE;
1410 END read_global_var_to_report_err;
1411
1412 -- bug 4428112: introduced this private api to stamp the valid txn curr codes
1413 -- in the respective lines in the table of records of the interface table,
1414 -- for a non MC enabled version
1415 -- if the txn curr code was not populated earlier by the user, this is required
1416 -- as the cursor on the interface table would be opened again in prepare_pbl_input
1417 -- to prepare the input tables to process_budget_lines.
1418
1419 PROCEDURE check_and_update_txn_curr_code
1420 (p_budget_line_tbl IN PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE,
1421 px_inf_cur_rec_tbl IN OUT NOCOPY inf_cur_tbl_typ, --File.Sql.39 bug 4440895
1422 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1423 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1424 x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
1425
1426 IS
1427 l_return_status VARCHAR2(1);
1428 l_msg_data VARCHAR2(2000);
1429 l_msg_count NUMBER;
1430
1431 l_debug_mode VARCHAR2(1);
1432 l_module_name VARCHAR2(100) := 'PAFPWAPB.check_and_update_txn_curr_code';
1433 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1434 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1435 l_msg_index_out NUMBER;
1436 l_data VARCHAR2(2000);
1437
1438 l_task_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1439 l_rlm_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1440
1441 BEGIN
1442 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1443 x_msg_count := 0;
1444 x_return_status := FND_API.G_RET_STS_SUCCESS;
1445 IF l_debug_mode = 'Y' THEN
1446 PA_DEBUG.Set_Curr_Function( p_function => l_module_name,
1447 p_debug_mode => l_debug_mode );
1448 END IF;
1449 IF l_debug_mode = 'Y' THEN
1450 pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.check_and_update_txn_curr_code';
1451 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1452 END IF;
1453
1454 -- validating input params.
1455 IF p_budget_line_tbl.COUNT < 1 THEN
1456 IF l_debug_mode = 'Y' THEN
1457 pa_debug.g_err_stage:=' Nothing to be updated, returning';
1458 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1459 END IF;
1460 RAISE PA_FP_CONSTANTS_PKG.Just_Ret_Exc;
1461 ELSE
1462 IF l_debug_mode = 'Y' THEN
1463 pa_debug.g_err_stage:=' Values passed, checking for null txn curr recs.';
1464 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1465 END IF;
1466
1467 FOR i IN p_budget_line_tbl.FIRST .. p_budget_line_tbl.LAST LOOP
1468 -- looping through both the table types
1469 FOR j IN px_inf_cur_rec_tbl.FIRST .. px_inf_cur_rec_tbl.LAST LOOP
1470 IF p_budget_line_tbl(i).pa_task_id = px_inf_cur_rec_tbl(j).task_id AND
1471 p_budget_line_tbl(i).resource_list_member_id = px_inf_cur_rec_tbl(j).resource_list_member_id AND
1472 px_inf_cur_rec_tbl(j).txn_currency_code IS NULL THEN
1473 px_inf_cur_rec_tbl(j).txn_currency_code := p_budget_line_tbl(i).txn_currency_code;
1474 END IF;
1475 END LOOP;
1476 END LOOP;
1477 END IF;
1478
1479 IF l_debug_mode = 'Y' THEN
1480 pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.check_and_update_txn_curr_code';
1481 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1482 END IF;
1483 IF l_debug_mode = 'Y' THEN
1484 pa_debug.reset_curr_function;
1485 END IF;
1486 EXCEPTION
1487 WHEN PA_FP_CONSTANTS_PKG.Just_Ret_Exc THEN
1488 IF l_debug_mode = 'Y' THEN
1489 pa_debug.reset_curr_function;
1490 END IF;
1491 RETURN;
1492 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1493 l_msg_count := FND_MSG_PUB.count_msg;
1494
1495 IF l_msg_count = 1 and x_msg_data IS NULL THEN
1496 PA_INTERFACE_UTILS_PUB.get_messages
1497 (p_encoded => FND_API.G_TRUE
1498 ,p_msg_index => 1
1499 ,p_msg_count => l_msg_count
1500 ,p_msg_data => l_msg_data
1501 ,p_data => l_data
1502 ,p_msg_index_out => l_msg_index_out);
1503 x_msg_data := l_data;
1504 x_msg_count := l_msg_count;
1505 ELSE
1506 x_msg_count := l_msg_count;
1507 END IF;
1508 x_return_status := FND_API.G_RET_STS_ERROR;
1509
1510 IF l_debug_mode = 'Y' THEN
1511 pa_debug.reset_curr_function;
1512 END IF;
1513 RETURN;
1514
1515 WHEN OTHERS THEN
1516 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1517 x_msg_count := 1;
1518 x_msg_data := SQLERRM;
1519
1520 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
1521 ,p_procedure_name => 'check_and_update_txn_curr_code');
1522 IF l_debug_mode = 'Y' THEN
1523 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1524 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1525 END IF;
1526
1527 IF l_debug_mode = 'Y' THEN
1528 pa_debug.reset_curr_function;
1529 END IF;
1530 RAISE;
1531 END check_and_update_txn_curr_code;
1532
1533 -- bug 4479036: a private function to check if the conversion
1534 -- attribute columns are displayed in the layout used, so that
1535 -- these attribute can be defaulted to null values or version
1536 -- level attributes accordingly.
1537
1538 FUNCTION conv_attributes_displayed
1539 (p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE)
1540 RETURN VARCHAR2
1541 IS
1542
1543 l_debug_mode VARCHAR2(1);
1544 l_module_name VARCHAR2(100) := 'PAFPWAPB.check_and_update_txn_curr_code';
1545 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1546 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1547
1548 conv_attrb_displayed VARCHAR2(1);
1549
1550 l_projfunc_rate_type pa_fp_webadi_upload_inf.projfunc_rate_type%TYPE;
1551 l_projfunc_rate_date_type pa_fp_webadi_upload_inf.projfunc_rate_date_type%TYPE;
1552 l_projfunc_rate_date pa_fp_webadi_upload_inf.projfunc_rate_date%TYPE;
1553 l_project_rate_type pa_fp_webadi_upload_inf.project_rate_type%TYPE;
1554 l_project_rate_date_type pa_fp_webadi_upload_inf.project_rate_date_type%TYPE;
1555 l_project_rate_date pa_fp_webadi_upload_inf.project_rate_date%TYPE;
1556
1557
1558 BEGIN
1559 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1560
1561 IF l_debug_mode = 'Y' THEN
1562 PA_DEBUG.Set_Curr_Function( p_function => l_module_name,
1563 p_debug_mode => l_debug_mode );
1564 END IF;
1565 IF l_debug_mode = 'Y' THEN
1566 pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.conv_attributes_displayed';
1567 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1568 END IF;
1569
1570 conv_attrb_displayed := 'N';
1571
1572 IF p_run_id IS NULL THEN
1573 IF l_debug_mode = 'Y' THEN
1574 pa_debug.g_err_stage := 'p_run_id is passed as null';
1575 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1576 END IF;
1577 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1578 END IF;
1579
1580 IF l_debug_mode = 'Y' THEN
1581 pa_debug.g_err_stage := 'Checking for the values in conv attrb cols';
1582 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1583 END IF;
1584
1585 BEGIN
1586 SELECT projfunc_rate_type,
1587 projfunc_rate_date_type,
1588 projfunc_rate_date,
1589 project_rate_type,
1590 project_rate_date_type,
1591 project_rate_date
1592 INTO l_projfunc_rate_type,
1593 l_projfunc_rate_date_type,
1594 l_projfunc_rate_date,
1595 l_project_rate_type,
1596 l_project_rate_date_type,
1597 l_project_rate_date
1598 FROM pa_fp_webadi_upload_inf
1599 WHERE run_id = p_run_id
1600 AND ROWNUM = 1;
1601
1602 IF l_projfunc_rate_type <> g_hidden_col_char OR
1603 l_projfunc_rate_date_type <> g_hidden_col_char OR
1604 l_projfunc_rate_date <> g_hidden_col_date OR
1605 l_project_rate_type <> g_hidden_col_char OR
1606 l_project_rate_date_type <> g_hidden_col_char OR
1607 l_project_rate_date <> g_hidden_col_date THEN
1608 IF l_debug_mode = 'Y' THEN
1609 pa_debug.g_err_stage := 'Conv attrb cols displayed in layout';
1610 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1611 END IF;
1612 conv_attrb_displayed := 'Y';
1613 END IF;
1614 EXCEPTION
1615 WHEN NO_DATA_FOUND THEN
1616 IF l_debug_mode = 'Y' THEN
1617 pa_debug.g_err_stage := 'No rows in the interface table';
1618 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1619 END IF;
1620 conv_attrb_displayed := 'N';
1621 END;
1622
1623
1624 IF l_debug_mode = 'Y' THEN
1625 pa_debug.g_err_stage := 'Leaving into pa_fp_webadi_pkg.conv_attributes_displayed';
1626 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1627 pa_debug.g_err_stage := 'conv_attrb_displayed: ' || conv_attrb_displayed;
1628 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
1629 END IF;
1630 IF l_debug_mode = 'Y' THEN
1631 pa_debug.reset_curr_function;
1632 END IF;
1633
1634 -- returning
1635 RETURN conv_attrb_displayed;
1636
1637 EXCEPTION
1638 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1639 IF l_debug_mode = 'Y' THEN
1640 pa_debug.g_err_stage:='Invalid_Arg_Exc raised in conv_attributes_displayed';
1641 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1642 END IF;
1643 IF l_debug_mode = 'Y' THEN
1644 pa_debug.reset_curr_function;
1645 END IF;
1646 RAISE;
1647
1648 WHEN OTHERS THEN
1649 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
1650 ,p_procedure_name => 'conv_attributes_displayed');
1651 IF l_debug_mode = 'Y' THEN
1652 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
1653 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
1654 END IF;
1655
1656 IF l_debug_mode = 'Y' THEN
1657 pa_debug.reset_curr_function;
1658 END IF;
1659 RAISE;
1660 END conv_attributes_displayed;
1661
1662 PROCEDURE prepare_val_input
1663 ( p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE,
1664 p_request_id IN pa_budget_versions.request_id%TYPE DEFAULT NULL,
1665 p_version_info_rec IN pa_fp_gen_amount_utils.fp_cols,
1666 p_prd_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE,
1667 p_prd_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE,
1668 p_org_id IN pa_projects_all.org_id%TYPE,
1669 x_budget_lines OUT NOCOPY PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE, --File.Sql.39 bug 4440895
1670 x_etc_quantity_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1671 x_etc_raw_cost_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1672 x_etc_burdened_cost_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1673 x_etc_revenue_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1674 x_raw_cost_rate_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1675 x_burd_cost_rate_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1676 x_bill_rate_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1677 x_planning_start_date_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE, --File.Sql.39 bug 4440895
1678 x_planning_end_date_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE, --File.Sql.39 bug 4440895
1679 x_uom_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_80_TBL_TYPE, --File.Sql.39 bug 4440895
1680 x_mfc_cost_type_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_15_TBL_TYPE, --File.Sql.39 bug 4440895
1681 x_spread_curve_name_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_240_TBL_TYPE, --File.Sql.39 bug 4440895
1682 x_sp_fixed_date_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE, --File.Sql.39 bug 4440895
1683 x_etc_method_name_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_80_TBL_TYPE, --File.Sql.39 bug 4440895
1684 x_spread_curve_id_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1685 x_delete_flag_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_1_TBL_TYPE, --File.Sql.39 bug 4440895
1686 x_ra_id_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1687 x_res_class_code_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_30_TBL_TYPE, --File.Sql.39 bug 4440895
1688 x_rate_based_flag_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_1_TBL_TYPE, --File.Sql.39 bug 4440895
1689 x_rbs_elem_id_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, --File.Sql.39 bug 4440895
1690 x_cbs_elem_id_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE, -- cbs enhancement changes bug#16445106
1691 x_amt_type_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_30_TBL_TYPE, --File.Sql.39 bug 4440895
1692 x_first_pd_bf_pm_en_dt OUT NOCOPY DATE, --File.Sql.39 bug 4440895
1693 x_last_pd_af_pm_st_dt OUT NOCOPY DATE, --File.Sql.39 bug 4440895
1694 x_inf_tbl_rec_tbl OUT NOCOPY inf_cur_tbl_typ, --File.Sql.39 bug 4440895
1695 x_num_of_rec_processed OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1696 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1697 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1698 x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
1699 IS
1700
1701 l_return_status VARCHAR2(30);
1702 l_msg_data VARCHAR2(2000);
1703 l_msg_count NUMBER;
1704
1705 l_debug_mode VARCHAR2(1);
1706 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.prepare_val_input';
1707 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
1708 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
1709 l_msg_index_out NUMBER;
1710 l_data VARCHAR2(2000);
1711
1712 -- variable to held the start_date and end_date of individual periods
1713 l_prd_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1714 l_prd_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1715
1716 l_inf_tbl_data_prev_rec inf_tbl_data_csr%ROWTYPE;
1717 l_inf_tbl_data_curr_rec inf_tbl_data_csr%ROWTYPE;
1718 l_inf_tbl_data_next_rec inf_tbl_data_csr%ROWTYPE;
1719 -- record type used to skip the duplicate records
1720 l_inf_tbl_data_skip_rec inf_tbl_data_csr%ROWTYPE;
1721 l_loop_exit_flag VARCHAR2(1) := 'N';
1722
1723 i INTEGER := 0;
1724 l_uncategorized_flag pa_resource_lists_all_bg.uncategorized_flag%TYPE;
1725 l_prc_error_code VARCHAR2(30);
1726
1727 l_unct_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
1728 l_etc_start_date pa_budget_versions.etc_start_date%TYPE;
1729
1730 l_plan_trans_attr_copied_flag VARCHAR2(1);
1731 l_cost_conv_attr_copied_flag VARCHAR2(1);
1732 l_rev_conv_attr_copied_flag VARCHAR2(1);
1733 l_plan_start_date DATE;
1734 l_plan_end_date DATE;
1735 l_prcd_pd_start_date DATE;
1736 l_prcd_pd_end_date DATE;
1737 l_original_prd_count INTEGER;
1738 l_int_new_prd_count INTEGER;
1739 l_scd_pd_start_date DATE;
1740 l_scd_pd_end_date DATE;
1741 l_first_pd_bf_pm_st_dt DATE; /* variable to hold the start date of the first period that falls before first period in the period mask */
1742 l_first_pd_bf_pm_en_dt DATE; /* variable to hold the end date of the first period that falls before first period in the period mask */
1743 l_last_pd_af_pm_st_dt DATE; /* variable to hold the start date of the last period that falls before last period in the period mask */
1744 l_last_pd_af_pm_en_dt DATE; /* variable to hold the end date of the last period that falls before last period in the period mask */
1745 is_forecast_version VARCHAR2(1) := 'N';
1746 is_periodic_setup VARCHAR2(1) := 'N';
1747 l_bdgt_line_start_date DATE;
1748 l_bdgt_line_end_date DATE;
1749 l_min_bdgt_line_start_date DATE;
1750 l_max_bdgt_line_end_date DATE;
1751 l_sysdate CONSTANT DATE:= SYSDATE;
1752
1753 l_tmp_sum_amt NUMBER;
1754 l_raw_cost NUMBER;
1755 l_etc_raw_cost NUMBER;
1756 l_burdened_cost NUMBER;
1757 l_etc_burdened_cost NUMBER;
1758 l_revenue NUMBER;
1759 l_etc_revenue NUMBER;
1760 l_quantity NUMBER;
1761 l_etc_quantity NUMBER;
1762
1763 l_projfunc_cost_rate pa_budget_lines.projfunc_cost_exchange_rate%TYPE;
1764 l_projfunc_rev_rate pa_budget_lines.projfunc_rev_exchange_rate%TYPE;
1765 l_project_cost_rate pa_budget_lines.project_cost_exchange_rate%TYPE;
1766 l_project_rev_rate pa_budget_lines.project_rev_exchange_rate%TYPE;
1767
1768
1769 -- variable to keep track of number of records inserted to the budget line record type
1770 bl_count INTEGER := 1;
1771
1772 -- variables to be used to pass data to validate_budget_line
1773 l_budget_line_in_out_tbl PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE;
1774 l_budget_line_out_tbl PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE;
1775
1776 l_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
1777 l_allow_qty_flag VARCHAR2(1);
1778
1779 l_bdgt_ln_tbl_description VARCHAR2(255);
1780 l_pfunc_cost_rate_type_mning pa_conversion_types_v.user_conversion_type%TYPE;
1781 l_pfunc_cost_rate_dt_typ_mning pa_lookups.meaning%TYPE;
1782 l_pfunc_rev_rate_type_mning pa_conversion_types_v.user_conversion_type%TYPE;
1783 l_pfunc_rev_rate_dt_typ_mning pa_lookups.meaning%TYPE;
1784 l_prj_cost_rate_type_mning pa_conversion_types_v.user_conversion_type%TYPE;
1785 l_prj_cost_rate_dt_typ_mning pa_lookups.meaning%TYPE;
1786 l_prj_rev_rate_type_mning pa_conversion_types_v.user_conversion_type%TYPE;
1787 l_prj_rev_rate_date_type_mning pa_lookups.meaning%TYPE;
1788
1789 d_projfunc_cost_rate_type pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
1790 d_projfunc_cost_rate_date_type pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE;
1791 d_projfunc_cost_rate_date pa_proj_fp_options.projfunc_cost_rate_date%TYPE ;
1792 d_projfunc_rev_rate_type pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
1793 d_projfunc_rev_rate_date_type pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE ;
1794 d_projfunc_rev_rate_date pa_proj_fp_options.projfunc_rev_rate_date%TYPE ;
1795 d_project_cost_rate_type pa_proj_fp_options.project_cost_rate_type%TYPE ;
1796 d_project_cost_rate_date_type pa_proj_fp_options.project_cost_rate_date_type%TYPE ;
1797 d_project_cost_rate_date pa_proj_fp_options.project_cost_rate_date%TYPE ;
1798 d_project_rev_rate_type pa_proj_fp_options.project_rev_rate_type%TYPE ;
1799 d_project_rev_rate_date_type pa_proj_fp_options.project_rev_rate_date_type%TYPE ;
1800 d_project_rev_rate_date pa_proj_fp_options.project_rev_rate_date%TYPE ;
1801 d_projfunc_cost_exc_rate_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1802 d_projfunc_rev_exc_rate_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1803 d_project_cost_exc_rate_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1804 d_project_rev_exc_rate_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1805 d_txn_curr_tab SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1806
1807 l_projfunc_cost_rate_type pa_proj_fp_options.projfunc_cost_rate_type%TYPE ;
1808 l_projfunc_cost_rate_date_type pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE;
1809 l_projfunc_cost_rate_date pa_proj_fp_options.projfunc_cost_rate_date%TYPE ;
1810 l_projfunc_cost_exchange_rate pa_budget_lines.projfunc_cost_exchange_rate%TYPE ;
1811 l_projfunc_rev_rate_type pa_proj_fp_options.projfunc_rev_rate_type%TYPE ;
1812 l_projfunc_rev_rate_date_type pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE ;
1813 l_projfunc_rev_rate_date pa_proj_fp_options.projfunc_rev_rate_date%TYPE ;
1814 l_projfunc_rev_exchange_rate pa_budget_lines.projfunc_rev_exchange_rate%TYPE ;
1815 l_project_cost_rate_type pa_proj_fp_options.project_cost_rate_type%TYPE ;
1816 l_project_cost_rate_date_type pa_proj_fp_options.project_cost_rate_date_type%TYPE ;
1817 l_project_cost_rate_date pa_proj_fp_options.project_cost_rate_date%TYPE ;
1818 l_project_cost_exchange_rate pa_budget_lines.project_cost_exchange_rate%TYPE ;
1819 l_project_rev_rate_type pa_proj_fp_options.project_rev_rate_type%TYPE ;
1820 l_project_rev_rate_date_type pa_proj_fp_options.project_rev_rate_date_type%TYPE ;
1821 l_project_rev_rate_date pa_proj_fp_options.project_rev_rate_date%TYPE ;
1822 l_project_rev_exchange_rate pa_budget_lines.project_rev_exchange_rate%TYPE ;
1823 l_change_reason_code pa_budget_lines.change_reason_code%TYPE ;
1824
1825 l_rc_rate NUMBER;
1826 l_bc_rate NUMBER;
1827 l_bill_rate NUMBER;
1828
1829 l_etc_quantity_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1830 l_etc_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1831 l_etc_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1832 l_etc_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1833 l_rc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1834 l_bc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1835 l_bill_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1836 l_uom_tbl SYSTEM.pa_varchar2_80_tbl_type := SYSTEM.pa_varchar2_80_tbl_type();
1837 l_plan_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1838 l_delete_flag VARCHAR2(1);
1839 l_plan_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1840 l_delete_flag_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
1841 l_spread_curve_name_tbl SYSTEM.pa_varchar2_240_tbl_type := SYSTEM.pa_varchar2_240_tbl_type();
1842 l_etc_method_code_tbl SYSTEM.pa_varchar2_80_tbl_type := SYSTEM.pa_varchar2_80_tbl_type();
1843 l_mfc_cost_type_name_tbl SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
1844 l_sp_fixed_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
1845 l_spread_curve_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1846
1847 -- variables to be used to call process_errors
1848 l_err_val_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1849 l_err_task_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1850 l_err_rlm_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1851 l_err_txn_curr_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1852 l_err_amt_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1853
1854 l_fixed_spread_curve_id pa_spread_curves_b.spread_curve_id%TYPE;
1855 l_fixed_spread_curve_name pa_spread_curves_tl.name%TYPE;
1856 l_spread_curve_id pa_spread_curves_b.spread_curve_id%TYPE;
1857 l_sp_fixed_date pa_resource_assignments.sp_fixed_date%TYPE;
1858 l_not_null_period_cnt NUMBER;
1859 l_fix_sc_amt_pd_curr_index NUMBER; /* to get the period index for which amount is present if the spread curve */
1860 l_fix_sc_amt_pd_next_index NUMBER; /* associated with the resource is fixed date type */
1861
1862 /* Bug 5144013: The following variable declarations are made to refer the new entity
1863 pa_resource_asgn_curr columns. This is done as part of merging MRUP3 changes done
1864 in 11i into R12.
1865 */
1866 l_ratxn_total_quantity pa_resource_asgn_curr.total_quantity%TYPE;
1867 l_ratxn_total_raw_cost pa_resource_asgn_curr.total_txn_raw_cost%TYPE;
1868 l_ratxn_total_burdened_cost pa_resource_asgn_curr.total_txn_burdened_cost%TYPE;
1869 l_ratxn_total_revenue pa_resource_asgn_curr.total_txn_revenue%TYPE;
1870 l_ratxn_raw_cost_over_rate pa_resource_asgn_curr.txn_raw_cost_rate_override%TYPE;
1871 l_ratxn_burden_cost_over_rate pa_resource_asgn_curr.txn_burden_cost_rate_override%TYPE;
1872 l_ratxn_bill_over_rate pa_resource_asgn_curr.txn_bill_rate_override%TYPE;
1873 l_ratxn_etc_quantity pa_resource_asgn_curr.total_quantity%TYPE;
1874 l_ratxn_etc_raw_cost pa_resource_asgn_curr.total_txn_raw_cost%TYPE;
1875 l_ratxn_etc_burdened_cost pa_resource_asgn_curr.total_txn_burdened_cost%TYPE;
1876 l_ratxn_etc_revenue pa_resource_asgn_curr.total_txn_revenue%TYPE;
1877 l_ra_rate_based_flag pa_resource_assignments.rate_based_flag%TYPE; -- Bug 5068203.
1878
1879 l_Cbs_Enabled VARCHAR2(1) := 'N'; -- cbs enhancement changes bug#16445106
1880
1881
1882 -- cursor to get the start/end date of the first period before the first period displayed in the period mask
1883 CURSOR l_first_pd_st_en_dt_csr (c_org_id pa_projects_all.org_id%TYPE,
1884 c_first_prd_st_dt DATE,
1885 c_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE)
1886 IS
1887 SELECT gl.start_date start_date,
1888 gl.end_date end_date,
1889 gl.period_name period_name
1890 FROM gl_periods gl,
1891 pa_implementations_all pim,
1892 gl_sets_of_books gsb
1893 WHERE gl.end_date < c_first_prd_st_dt
1894 AND gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
1895 AND gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
1896 AND gl.adjustment_period_flag='N'
1897 AND pim.org_id = c_org_id
1898 AND gsb.set_of_books_id = pim.set_of_books_id
1899 ORDER BY gl.start_date DESC;
1900
1901 l_first_pd_st_en_dt_rec l_first_pd_st_en_dt_csr%ROWTYPE;
1902
1903 -- cursor to get the start/end date of the last period before the last period displayed in the period mask
1904 CURSOR l_last_pd_st_en_dt_csr (c_org_id pa_projects_all.org_id%TYPE,
1905 c_last_prd_en_dt DATE,
1906 c_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE)
1907 IS
1908 SELECT gl.start_date start_date,
1909 gl.end_date end_date,
1910 gl.period_name period_name
1911 FROM gl_periods gl,
1912 pa_implementations_all pim,
1913 gl_sets_of_books gsb
1914 WHERE gl.end_date > c_last_prd_en_dt
1915 AND gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
1916 AND gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
1917 AND gl.adjustment_period_flag='N'
1918 AND pim.org_id = c_org_id
1919 AND gsb.set_of_books_id = pim.set_of_books_id
1920 ORDER BY gl.start_date ;
1921
1922 l_last_pd_st_en_dt_rec l_last_pd_st_en_dt_csr%ROWTYPE;
1923
1924 /* Bug 5144013: Made changes in the query of the cursor non_prd_lyt_null_val_cur to refer to the
1925 new entity pa_resource_asgn_curr. This is done as part of merging MRUP3 changes done in 11i
1926 into R12.
1927 */
1928 CURSOR non_prd_lyt_null_val_cur(c_budget_version_id IN pa_budget_versions.budget_version_id%TYPE,
1929 c_task_id IN pa_resource_assignments.task_id%TYPE,
1930 c_resource_list_member_id IN pa_resource_assignments.resource_list_member_id%TYPE,
1931 c_cbs_element_id IN pa_resource_assignments.cbs_element_id%TYPE,
1932 c_txn_currency_code IN pa_resource_asgn_curr.txn_currency_code%TYPE)
1933 IS
1934 SELECT rac.total_display_quantity,
1935 rac.total_txn_raw_cost,
1936 rac.total_txn_burdened_cost,
1937 rac.total_txn_revenue,
1938 rac.total_display_quantity-NVL(rac.total_init_quantity,0),
1939 rac.total_txn_raw_cost-NVL(rac.total_txn_init_raw_cost,0),
1940 rac.total_txn_burdened_cost-NVL(rac.total_txn_init_burdened_cost,0),
1941 rac.total_txn_revenue-NVL(rac.total_txn_init_revenue,0),
1942 rac.txn_raw_cost_rate_override,
1943 rac.txn_burden_cost_rate_override,
1944 rac.txn_bill_rate_override,
1945 pra.rate_based_flag
1946 FROM pa_resource_asgn_curr rac,
1947 pa_resource_assignments pra
1948 WHERE rac.budget_version_id = c_budget_version_id
1949 AND rac.budget_version_id = pra.budget_version_id
1950 AND rac.resource_assignment_id = pra.resource_assignment_id
1951 AND pra.task_id = c_task_id
1952 AND pra.resource_list_member_id = c_resource_list_member_id
1953 AND nvl(pra.cbs_element_id,-1) = nvl(c_cbs_element_id,-1) -- cbs enhancement changes bug#16445106
1954 AND rac.txn_currency_code = c_txn_currency_code;
1955
1956 TYPE l_cached_ra_id_info IS TABLE OF NUMBER INDEX BY VARCHAR2(32);
1957
1958 l_cached_ra_id_tbl l_cached_ra_id_info;
1959 l_cached_ra_index VARCHAR2(32);
1960 l_ra_id pa_resource_assignments.resource_assignment_id%TYPE;
1961 l_start_ra_index NUMBER :=1;
1962 l_end_ra_index NUMBER :=1;
1963 l_sp_fix_prd_st_dt DATE;
1964 l_sp_fix_prd_en_dt DATE;
1965
1966 l_res_class_code pa_resource_assignments.resource_class_code%TYPE;
1967 l_rate_based_flag pa_resource_assignments.rate_based_flag%TYPE;
1968 l_rbs_elem_id pa_resource_assignments.rbs_element_id%TYPE;
1969
1970 l_ra_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1971 l_res_class_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1972 l_rate_based_flag_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
1973 l_rbs_elem_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1974
1975 l_cbs_elem_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();-- cbs enhancement changes bug#16445106
1976 l_cbs_elem_id pa_resource_assignments.cbs_element_id%TYPE;-- cbs enhancement changes bug#16445106
1977
1978 l_min_ra_plan_start_date DATE;
1979 l_max_ra_plan_end_date DATE;
1980
1981 l_amount_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
1982 l_lookup_type pa_lookups.lookup_type%TYPE;
1983 l_amount NUMBER;
1984 --l_temp DATE;
1985
1986 -- Added for the bug 4414062
1987 l_period_time_phased_code VARCHAR(1);
1988 l_period_plan_start_date DATE;
1989 l_period_plan_end_date DATE;
1990 l_rl_control_flag pa_resource_lists_all_bg.control_flag%TYPE;
1991 l_fin_struct_id NUMBER; -- Bug 4929163.
1992
1993 -- bug 4479036
1994 l_conv_attrb_displayed VARCHAR(1);
1995
1996 --Added thses date tables for bug#4488926.
1997 TYPE date_tbl_type IS TABLE OF DATE INDEX BY VARCHAR2(20);
1998 l_period_plan_start_date_tbl date_tbl_type;
1999 l_period_plan_end_date_tbl date_tbl_type;
2000 BEGIN
2001
2002 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
2003 x_msg_count := 0;
2004 x_return_status := FND_API.G_RET_STS_SUCCESS;
2005
2006 PA_DEBUG.Set_Curr_Function( p_function => l_module_name,
2007 p_debug_mode => l_debug_mode );
2008
2009 IF l_debug_mode = 'Y' THEN
2010 pa_debug.g_err_stage := 'Entering into pa_fp_webadi_pkg.prepare_val_input';
2011 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2012 END IF;
2013
2014 --log1('----- Entering into prepare_val_input-------');
2015 -- deriving all the required version level info
2016 IF l_debug_mode = 'Y' THEN
2017 pa_debug.g_err_stage := 'validating input';
2018 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2019 END IF;
2020 l_fin_struct_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUCTURE_ID(p_version_info_rec.x_project_id); /* Bug 4929163 */
2021 IF p_version_info_rec.x_project_id IS NULL THEN
2022 IF l_debug_mode = 'Y' THEN
2023 pa_debug.g_err_stage := 'project_id not passed';
2024 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2025 END IF;
2026 pa_utils.add_message
2027 (p_app_short_name => 'PA',
2028 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
2029 p_token1 => 'PROCEDURENAME',
2030 p_value1 => l_module_name);
2031 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2032 END IF;
2033
2034 -- checking is org_id is passed as null for periodic layouts
2035 IF (p_prd_start_date_tbl.COUNT > 0 OR
2036 p_prd_end_date_tbl.COUNT > 0 ) AND
2037 p_org_id IS NULL THEN
2038 IF l_debug_mode = 'Y' THEN
2039 pa_debug.g_err_stage := 'org_id not passed for periodic layouts';
2040 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2041 END IF;
2042 pa_utils.add_message
2043 (p_app_short_name => 'PA',
2044 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
2045 p_token1 => 'PROCEDURENAME',
2046 p_value1 => l_module_name);
2047 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2048 END IF;
2049
2050 l_Cbs_Enabled := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => p_version_info_rec.x_project_id);-- cbs enhancement changes bug#16445106
2051
2052 --DEBUG_NS('l_Cbs_Enabled :: ' ||l_Cbs_Enabled);
2053
2054 -- initializing the out parameter for number of records processed
2055 x_num_of_rec_processed := 0;
2056
2057 l_conv_attrb_displayed := 'N';
2058
2059 -- updating the temp table with the task_id for the task name/ task number
2060 -- given in the excel after deriving the same. if not a valid task, leaving
2061 -- task_id column null
2062 IF l_debug_mode = 'Y' THEN
2063 pa_debug.g_err_stage := 'Updating task_id for the task name/number given';
2064 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2065 END IF;
2066
2067 --log1('----- STAGE 1-------');
2068 BEGIN
2069 -- Bug 4464838: Perf Fix: Selecting the control_flag for the
2070 -- resource list and depending upon the value returned, executing
2071 -- one of the update statments to improve the performance by avoiding
2072 -- the select for control flag for each record and as well, removing
2073 -- the OR cluase from the where clause.
2074 SELECT control_flag,
2075 uncategorized_flag
2076 INTO l_rl_control_flag,
2077 l_uncategorized_flag
2078 FROM pa_resource_lists_all_bg
2079 WHERE resource_list_id = p_version_info_rec.x_resource_list_id;
2080
2081 --log1('----- STAGE 3.2------- '||l_uncategorized_flag);
2082 --DEBUG_NS('l_uncategorized_flag :: ' ||l_uncategorized_flag);
2083 --DEBUG_NS('l_rl_control_flag :: ' ||l_rl_control_flag);
2084
2085 IF l_uncategorized_flag = 'N' THEN
2086 IF l_rl_control_flag = 'N' THEN
2087 -- updating the rlm ids for categorized resource lists with control_fl as N
2088 UPDATE pa_fp_webadi_upload_inf inf
2089 SET inf.task_id = (SELECT pt.task_id
2090 FROM (SELECT pt.name task_name, /* Bug 4929163. Modified the select statement to refer to pa_proj_elements instead of pa_tasks*/
2091 pt.element_number task_number,
2092 pt.proj_element_id task_id
2093 FROM pa_proj_elements pt
2094 WHERE pt.project_id = p_version_info_rec.x_project_id
2095 AND object_type = 'PA_TASKS'
2096 AND parent_structure_id = l_fin_struct_id
2097 UNION ALL
2098 SELECT p.long_name task_name, /* Bug 5345336 */
2099 p.segment1 task_number,
2100 0 task_id
2101 FROM pa_projects_all p
2102 WHERE p.project_id = p_version_info_rec.x_project_id) pt
2103 WHERE (inf.task_name IS NOT NULL
2104 AND inf.task_number IS NULL
2105 AND inf.task_name = pt.task_name) OR
2106 (inf.task_name IS NULL
2107 AND inf.task_number IS NOT NULL
2108 AND inf.task_number = pt.task_number) OR
2109 (inf.task_name IS NOT NULL
2110 AND inf.task_number IS NOT NULL
2111 AND inf.task_name = pt.task_name
2112 AND inf.task_number = pt.task_number)),
2113
2114 inf.change_reason_code = DECODE(inf.delete_flag,'Y',NULL,inf.change_reason_code),
2115 inf.quantity = DECODE(inf.delete_flag,'Y',NULL,inf.quantity),
2116 inf.raw_cost = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost),
2117 inf.raw_cost_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost_over_rate),
2118 inf.burdened_cost = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost),
2119 inf.burdened_cost_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost_over_rate),
2120 inf.revenue = DECODE(inf.delete_flag,'Y',NULL,inf.revenue),
2121 inf.bill_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.bill_over_rate ),
2122 inf.projfunc_cost_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_type),
2123 inf.projfunc_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_date_type),
2124 inf.projfunc_cost_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_exchange_rate ),
2125 inf.projfunc_cost_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_cost_rate_date),
2126 inf.project_cost_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_type),
2127 inf.project_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_date_type),
2128 inf.project_cost_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_exchange_rate),
2129 inf.project_cost_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_cost_rate_date),
2130 inf.projfunc_rev_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_type ),
2131 inf.projfunc_rev_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_date_type ),
2132 inf.projfunc_rev_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_exchange_rate ),
2133 inf.projfunc_rev_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rev_rate_date),
2134 inf.project_rev_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_type ),
2135 inf.project_rev_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_date_type ),
2136 inf.project_rev_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_exchange_rate ),
2137 inf.project_rev_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rev_rate_date),
2138 inf.projfunc_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_type ),
2139 inf.projfunc_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_date_type ),
2140 inf.projfunc_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_exchange_rate ),
2141 inf.projfunc_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rate_date),
2142 inf.project_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_type ),
2143 inf.project_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_date_type ),
2144 inf.project_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_exchange_rate ),
2145 inf.project_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rate_date),
2146 inf.pd_prd = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.pd_prd),
2147 inf.prd1 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd1 ),
2148 inf.prd2 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd2 ),
2149 inf.prd3 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd3 ),
2150 inf.prd4 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd4 ),
2151 inf.prd5 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd5 ),
2152 inf.prd6 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd6 ),
2153 inf.prd7 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd7 ),
2154 inf.prd8 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd8 ),
2155 inf.prd9 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd9 ),
2156 inf.prd10 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd10 ),
2157 inf.prd11 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd11 ),
2158 inf.prd12 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd12 ),
2159 inf.prd13 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd13 ),
2160 inf.prd14 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd14 ),
2161 inf.prd15 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd15 ),
2162 inf.prd16 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd16 ),
2163 inf.prd17 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd17 ),
2164 inf.prd18 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd18 ),
2165 inf.prd19 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd19 ),
2166 inf.prd20 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd20 ),
2167 inf.prd21 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd21 ),
2168 inf.prd22 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd22 ),
2169 inf.prd23 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd23 ),
2170 inf.prd24 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd24 ),
2171 inf.prd25 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd25 ),
2172 inf.prd26 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd26 ),
2173 inf.prd27 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd27 ),
2174 inf.prd28 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd28 ),
2175 inf.prd29 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd29 ),
2176 inf.prd30 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd30 ),
2177 inf.prd31 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd31 ),
2178 inf.prd32 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd32 ),
2179 inf.prd33 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd33 ),
2180 inf.prd34 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd34 ),
2181 inf.prd35 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd35 ),
2182 inf.prd36 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd36 ),
2183 inf.prd37 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd37 ),
2184 inf.prd38 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd38 ),
2185 inf.prd39 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd39 ),
2186 inf.prd40 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd40 ),
2187 inf.prd41 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd41 ),
2188 inf.prd42 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd42 ),
2189 inf.prd43 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd43 ),
2190 inf.prd44 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd44 ),
2191 inf.prd45 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd45 ),
2192 inf.prd46 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd46 ),
2193 inf.prd47 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd47 ),
2194 inf.prd48 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd48 ),
2195 inf.prd49 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd49 ),
2196 inf.prd50 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd50 ),
2197 inf.prd51 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd51 ),
2198 inf.prd52 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd52 ),
2199 inf.sd_prd = DECODE(inf.delete_flag,'Y',l_fnd_miss_num , inf.sd_prd),
2200 inf.resource_list_member_id = (SELECT rlm.resource_list_member_id
2201 FROM pa_resource_list_members rlm
2202 WHERE inf.resource_alias = rlm.alias
2203 AND rlm.resource_list_id = p_version_info_rec.x_resource_list_id
2204 AND rlm.object_type = 'PROJECT'
2205 AND rlm.object_id = p_version_info_rec.x_project_id),
2206 inf.cbs_element_id = DECODE(l_Cbs_Enabled,'N',NULL,
2207 (select pre.rbs_element_id from pa_rbs_elements pre where
2208 pre.rbs_version_id = (select cbs_version_id from pa_projects_all where project_id = p_version_info_rec.x_project_id) and
2209 inf.cost_code = pre.cost_code))-- cbs enhancement changes bug#16445106
2210
2211 WHERE inf.run_id= p_run_id
2212 AND Nvl(p_request_id, -99) = Nvl(inf.request_id, -99);
2213
2214 --DEBUG_NS('updated pa_fp_webadi_upload_inf :: ');
2215
2216 ELSE -- control_flag = Y
2217 -- updating the rlm ids for categorized resource lists with control_fl as Y
2218 UPDATE pa_fp_webadi_upload_inf inf
2219 SET inf.task_id = (SELECT pt.task_id
2220 FROM (SELECT pt.name task_name, /* Bug 4929163. Modified the select statement to refer to pa_proj_elements instead of pa_tasks*/
2221 pt.element_number task_number,
2222 pt.proj_element_id task_id
2223 FROM pa_proj_elements pt
2224 WHERE pt.project_id = p_version_info_rec.x_project_id
2225 AND object_type = 'PA_TASKS'
2226 AND parent_structure_id = l_fin_struct_id
2227 UNION ALL
2228 SELECT p.long_name task_name, /* Bug 5345336 */
2229 p.segment1 task_number,
2230 0 task_id
2231 FROM pa_projects_all p
2232 WHERE p.project_id = p_version_info_rec.x_project_id) pt
2233 WHERE (inf.task_name IS NOT NULL
2234 AND inf.task_number IS NULL
2235 AND inf.task_name = pt.task_name) OR
2236 (inf.task_name IS NULL
2237 AND inf.task_number IS NOT NULL
2238 AND inf.task_number = pt.task_number) OR
2239 (inf.task_name IS NOT NULL
2240 AND inf.task_number IS NOT NULL
2241 AND inf.task_name = pt.task_name
2242 AND inf.task_number = pt.task_number)),
2243
2244 inf.change_reason_code = DECODE(inf.delete_flag,'Y',NULL,inf.change_reason_code),
2245 inf.quantity = DECODE(inf.delete_flag,'Y',NULL,inf.quantity),
2246 inf.raw_cost = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost),
2247 inf.raw_cost_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost_over_rate),
2248 inf.burdened_cost = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost),
2249 inf.burdened_cost_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost_over_rate),
2250 inf.revenue = DECODE(inf.delete_flag,'Y',NULL,inf.revenue),
2251 inf.bill_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.bill_over_rate ),
2252 inf.projfunc_cost_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_type),
2253 inf.projfunc_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_date_type),
2254 inf.projfunc_cost_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_exchange_rate ),
2255 inf.projfunc_cost_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_cost_rate_date),
2256 inf.project_cost_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_type),
2257 inf.project_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_date_type),
2258 inf.project_cost_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_exchange_rate),
2259 inf.project_cost_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_cost_rate_date),
2260 inf.projfunc_rev_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_type ),
2261 inf.projfunc_rev_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_date_type ),
2262 inf.projfunc_rev_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_exchange_rate ),
2263 inf.projfunc_rev_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rev_rate_date),
2264 inf.project_rev_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_type ),
2265 inf.project_rev_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_date_type ),
2266 inf.project_rev_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_exchange_rate ),
2267 inf.project_rev_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rev_rate_date),
2268 inf.projfunc_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_type ),
2269 inf.projfunc_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_date_type ),
2270 inf.projfunc_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_exchange_rate ),
2271 inf.projfunc_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rate_date),
2272 inf.project_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_type ),
2273 inf.project_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_date_type ),
2274 inf.project_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_exchange_rate ),
2275 inf.project_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_rate_date),
2276 inf.pd_prd = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.pd_prd),
2277 inf.prd1 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd1 ),
2278 inf.prd2 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd2 ),
2279 inf.prd3 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd3 ),
2280 inf.prd4 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd4 ),
2281 inf.prd5 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd5 ),
2282 inf.prd6 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd6 ),
2283 inf.prd7 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd7 ),
2284 inf.prd8 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd8 ),
2285 inf.prd9 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd9 ),
2286 inf.prd10 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd10 ),
2287 inf.prd11 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd11 ),
2288 inf.prd12 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd12 ),
2289 inf.prd13 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd13 ),
2290 inf.prd14 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd14 ),
2291 inf.prd15 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd15 ),
2292 inf.prd16 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd16 ),
2293 inf.prd17 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd17 ),
2294 inf.prd18 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd18 ),
2295 inf.prd19 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd19 ),
2296 inf.prd20 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd20 ),
2297 inf.prd21 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd21 ),
2298 inf.prd22 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd22 ),
2299 inf.prd23 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd23 ),
2300 inf.prd24 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd24 ),
2301 inf.prd25 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd25 ),
2302 inf.prd26 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd26 ),
2303 inf.prd27 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd27 ),
2304 inf.prd28 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd28 ),
2305 inf.prd29 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd29 ),
2306 inf.prd30 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd30 ),
2307 inf.prd31 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd31 ),
2308 inf.prd32 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd32 ),
2309 inf.prd33 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd33 ),
2310 inf.prd34 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd34 ),
2311 inf.prd35 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd35 ),
2312 inf.prd36 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd36 ),
2313 inf.prd37 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd37 ),
2314 inf.prd38 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd38 ),
2315 inf.prd39 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd39 ),
2316 inf.prd40 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd40 ),
2317 inf.prd41 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd41 ),
2318 inf.prd42 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd42 ),
2319 inf.prd43 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd43 ),
2320 inf.prd44 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd44 ),
2321 inf.prd45 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd45 ),
2322 inf.prd46 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd46 ),
2323 inf.prd47 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd47 ),
2324 inf.prd48 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd48 ),
2325 inf.prd49 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd49 ),
2326 inf.prd50 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd50 ),
2327 inf.prd51 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd51 ),
2328 inf.prd52 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd52 ),
2329 inf.sd_prd = DECODE(inf.delete_flag,'Y',l_fnd_miss_num , inf.sd_prd),
2330 inf.resource_list_member_id = (SELECT rlm.resource_list_member_id
2331 FROM pa_resource_list_members rlm
2332 WHERE inf.resource_alias = rlm.alias
2333 AND rlm.resource_list_id = p_version_info_rec.x_resource_list_id
2334 AND rlm.object_type = 'RESOURCE_LIST'
2335 AND rlm.object_id = p_version_info_rec.x_resource_list_id),
2336 inf.cbs_element_id = DECODE(l_Cbs_Enabled,'N',NULL,
2337 (select pre.rbs_element_id from pa_rbs_elements pre where
2338 pre.rbs_version_id = (select cbs_version_id from pa_projects_all where project_id = p_version_info_rec.x_project_id) and
2339 inf.cost_code = pre.cost_code))-- cbs enhancement changes bug#16445106
2340 WHERE inf.run_id= p_run_id
2341 AND Nvl(p_request_id, -99) = Nvl(inf.request_id, -99);
2342 END IF; -- control_flag = N
2343
2344 ELSE -- Resource list is not categorized
2345 --log1('----- STAGE 3.3------- '||l_unct_rlm_id);
2346 -- update the rlm id columns with rlm id of FINANCIAL_ELEMENTS, if the resource list
2347 -- is uncategorized one
2348
2349 -- 4497319.Perf Fix:Added two AND conditions in the WHERE clause in order to improve the performance.
2350 SELECT resource_list_member_id
2351 INTO l_unct_rlm_id
2352 FROM pa_resource_list_members
2353 WHERE resource_list_id = p_version_info_rec.x_resource_list_id
2354 AND resource_class_flag = 'Y'
2355 AND resource_class_code = 'FINANCIAL_ELEMENTS'
2356 AND object_type = 'RESOURCE_LIST'
2357 AND object_id = p_version_info_rec.x_resource_list_id;
2358
2359 --log1('----- STAGE 3.4------- '||l_unct_rlm_id);
2360 --DEBUG_NS('l_unct_rlm_id :: ' ||l_unct_rlm_id);
2361
2362 UPDATE pa_fp_webadi_upload_inf inf
2363 SET inf.task_id = (SELECT pt.task_id
2364 FROM (SELECT pt.name task_name, /* Bug 4929163. Modidfied the select statement to refer to pa_proj_elements instead of pa_tasks*/
2365 pt.element_number task_number,
2366 pt.proj_element_id task_id
2367 FROM pa_proj_elements pt
2368 WHERE pt.project_id = p_version_info_rec.x_project_id
2369 AND object_type = 'PA_TASKS'
2370 AND parent_structure_id = l_fin_struct_id
2371 UNION ALL
2372 SELECT p.long_name task_name, /* Bug 5345336 */
2373 p.segment1 task_number,
2374 0 task_id
2375 FROM pa_projects_all p
2376 WHERE p.project_id = p_version_info_rec.x_project_id) pt
2377 WHERE (inf.task_name IS NOT NULL
2378 AND inf.task_number IS NULL
2379 AND inf.task_name = pt.task_name) OR
2380 (inf.task_name IS NULL
2381 AND inf.task_number IS NOT NULL
2382 AND inf.task_number = pt.task_number) OR
2383 (inf.task_name IS NOT NULL
2384 AND inf.task_number IS NOT NULL
2385 AND inf.task_name = pt.task_name
2386 AND inf.task_number = pt.task_number)),
2387
2388 inf.change_reason_code = DECODE(inf.delete_flag,'Y',NULL,inf.change_reason_code),
2389 inf.quantity = DECODE(inf.delete_flag,'Y',NULL,inf.quantity),
2390 inf.raw_cost = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost),
2391 inf.raw_cost_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.raw_cost_over_rate),
2392 inf.burdened_cost = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost),
2393 inf.burdened_cost_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.burdened_cost_over_rate),
2394 inf.revenue = DECODE(inf.delete_flag,'Y',NULL,inf.revenue),
2395 inf.bill_over_rate = DECODE(inf.delete_flag,'Y',NULL,inf.bill_over_rate ),
2396 inf.projfunc_cost_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_type),
2397 inf.projfunc_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_rate_date_type),
2398 inf.projfunc_cost_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_cost_exchange_rate ),
2399 inf.projfunc_cost_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_cost_rate_date),
2400 inf.project_cost_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_type),
2401 inf.project_cost_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_rate_date_type),
2402 inf.project_cost_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_cost_exchange_rate),
2403 inf.project_cost_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.project_cost_rate_date),
2404 inf.projfunc_rev_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_type ),
2405 inf.projfunc_rev_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_rate_date_type ),
2406 inf.projfunc_rev_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rev_exchange_rate ),
2407 inf.projfunc_rev_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL),inf.projfunc_rev_rate_date),
2408 inf.project_rev_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_type ),
2409 inf.project_rev_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_rate_date_type ),
2410 inf.project_rev_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_rev_exchange_rate ),
2411 inf.project_rev_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL), inf.project_rev_rate_date),
2412 inf.projfunc_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_type ),
2413 inf.projfunc_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_rate_date_type ),
2414 inf.projfunc_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.projfunc_exchange_rate ),
2415 inf.projfunc_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL), inf.projfunc_rate_date),
2416 inf.project_rate_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_type ),
2417 inf.project_rate_date_type = DECODE(inf.delete_flag,'Y',NULL,inf.project_rate_date_type ),
2418 inf.project_exchange_rate = DECODE(inf.delete_flag,'Y',NULL,inf.project_exchange_rate ),
2419 inf.project_rate_date = DECODE(inf.delete_flag,'Y',TO_DATE(NULL), inf.project_rate_date),
2420 inf.pd_prd = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.pd_prd),
2421 inf.prd1 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd1 ),
2422 inf.prd2 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd2 ),
2423 inf.prd3 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd3 ),
2424 inf.prd4 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd4 ),
2425 inf.prd5 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd5 ),
2426 inf.prd6 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd6 ),
2427 inf.prd7 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd7 ),
2428 inf.prd8 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd8 ),
2429 inf.prd9 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd9 ),
2430 inf.prd10 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd10 ),
2431 inf.prd11 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd11 ),
2432 inf.prd12 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd12 ),
2433 inf.prd13 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd13 ),
2434 inf.prd14 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd14 ),
2435 inf.prd15 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd15 ),
2436 inf.prd16 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd16 ),
2437 inf.prd17 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd17 ),
2438 inf.prd18 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd18 ),
2439 inf.prd19 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd19 ),
2440 inf.prd20 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd20 ),
2441 inf.prd21 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd21 ),
2442 inf.prd22 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd22 ),
2443 inf.prd23 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd23 ),
2444 inf.prd24 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd24 ),
2445 inf.prd25 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd25 ),
2446 inf.prd26 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd26 ),
2447 inf.prd27 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd27 ),
2448 inf.prd28 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd28 ),
2449 inf.prd29 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd29 ),
2450 inf.prd30 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd30 ),
2451 inf.prd31 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd31 ),
2452 inf.prd32 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd32 ),
2453 inf.prd33 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd33 ),
2454 inf.prd34 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd34 ),
2455 inf.prd35 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd35 ),
2456 inf.prd36 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd36 ),
2457 inf.prd37 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd37 ),
2458 inf.prd38 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd38 ),
2459 inf.prd39 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd39 ),
2460 inf.prd40 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd40 ),
2461 inf.prd41 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd41 ),
2462 inf.prd42 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd42 ),
2463 inf.prd43 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd43 ),
2464 inf.prd44 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd44 ),
2465 inf.prd45 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd45 ),
2466 inf.prd46 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd46 ),
2467 inf.prd47 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd47 ),
2468 inf.prd48 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd48 ),
2469 inf.prd49 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd49 ),
2470 inf.prd50 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd50 ),
2471 inf.prd51 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd51 ),
2472 inf.prd52 = DECODE(inf.delete_flag,'Y',l_fnd_miss_num,inf.prd52 ),
2473 inf.sd_prd = DECODE(inf.delete_flag,'Y',l_fnd_miss_num , inf.sd_prd),
2474 inf.resource_list_member_id = l_unct_rlm_id,
2475 inf.cbs_element_id = DECODE(l_Cbs_Enabled,'N',NULL,
2476 (select pre.rbs_element_id from pa_rbs_elements pre where
2477 pre.rbs_version_id = (select cbs_version_id from pa_projects_all where project_id = p_version_info_rec.x_project_id) and
2478 inf.cost_code = pre.cost_code))-- cbs enhancement changes bug#16445106
2479 WHERE inf.run_id= p_run_id
2480 AND Nvl(p_request_id, -99) = Nvl(inf.request_id, -99);
2481 END IF; -- uncategorized flag
2482 EXCEPTION
2483 WHEN OTHERS THEN
2484 IF l_debug_mode = 'Y' THEN
2485 pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2486 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2487 --DEBUG_NS('Exception :: ' || SQLERRM);
2488 END IF;
2489
2490 RAISE;
2491 END;
2492 IF l_debug_mode = 'Y' THEN
2493 pa_debug.g_err_stage := 'Task ids updated';
2494 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2495 END IF;
2496
2497 --log1('----- STAGE 2-------');
2498 -- checking, if the layout is periodic one
2499 IF l_debug_mode = 'Y' THEN
2500 pa_debug.g_err_stage := 'Checking for periodic setup';
2501 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2502 END IF;
2503
2504 BEGIN
2505 SELECT 'Y'
2506 INTO is_periodic_setup
2507 FROM DUAL
2508 WHERE EXISTS(SELECT 'X'
2509 FROM pa_fp_webadi_upload_inf
2510 WHERE amount_type_name IS NOT NULL
2511 AND run_id = p_run_id
2512 AND Nvl(p_request_id, -99) = Nvl(request_id, -99));
2513 EXCEPTION
2514 WHEN NO_DATA_FOUND THEN
2515 is_periodic_setup := 'N';
2516 END;
2517
2518 --DEBUG_NS('is_periodic_setup :: ' || is_periodic_setup);
2519
2520 IF l_debug_mode = 'Y' THEN
2521 pa_debug.g_err_stage := 'is_periodic_setup: =' || is_periodic_setup;
2522 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2523 pa_debug.g_err_stage := 'Getting the fixed date spread curve id/name';
2524 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2525 END IF;
2526 --The following update on the interface will be used for
2527 ----Updating the error codes where task/resource info is missing
2528 ----Updating the amount type codes for the corresponding amount type names in case of periodic layout
2529
2530 IF is_periodic_setup='Y' THEN
2531
2532 IF p_version_info_rec.x_plan_class_code='BUDGET' THEN
2533
2534 l_lookup_type := 'PA_FP_XL_ALL_BDGT_AMT_TYPES';
2535
2536 ELSE
2537
2538 l_lookup_type := 'PA_FP_XL_ALL_FCST_AMT_TYPES';
2539
2540 END IF;
2541
2542
2543 UPDATE pa_fp_webadi_upload_inf inf
2544 SET amount_type_code = (SELECT pl.lookup_code
2545 FROM pa_lookups pl,pa_fp_proj_xl_amt_types xlt
2546 WHERE lookup_type=l_lookup_type
2547 AND meaning=inf.amount_type_name
2548 AND xlt.project_id=p_version_info_rec.x_project_id
2549 AND xlt.fin_plan_type_id=p_version_info_rec.x_fin_plan_type_id
2550 AND xlt.option_type=p_version_info_rec.x_version_type
2551 AND xlt.amount_type_code=pl.lookup_code),
2552 val_error_flag = NVL(val_error_flag,
2553 DECODE(task_id,
2554 NULL,'Y',
2555 DECODE(resource_list_member_id,
2556 NULL,'Y',
2557 DECODE(l_Cbs_Enabled,'N',NULL,
2558 DECODE(cbs_element_id,
2559 NULL,'Y',NULL))))),-- cbs enhancement changes bug#16445106
2560 val_error_code = NVL(val_error_code,
2561 DECODE(task_id,
2562 NULL,'INVALID_TASK_INFO',
2563 DECODE(resource_list_member_id,
2564 NULL,'INVALID_RESOURCE_INFO',
2565 DECODE(l_Cbs_Enabled,'N',NULL,
2566 DECODE(cbs_element_id,
2567 NULL,'INVALID_CBS_INFO',NULL))))),-- cbs enhancement changes bug#16445106
2568 err_task_name = nvl(task_name,'-98'),
2569 err_task_number = nvl(task_number,'-98'),
2570 err_alias = nvl(resource_alias,'-98'),
2571 err_amount_type_code = nvl(amount_type_code,'-98')
2572 WHERE run_id=p_run_id
2573 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
2574
2575 ELSE --Non Periodic layout
2576
2577 UPDATE pa_fp_webadi_upload_inf inf
2578 SET val_error_flag = NVL(val_error_flag,
2579 DECODE(task_id,
2580 NULL,'Y',
2581 DECODE(resource_list_member_id,
2582 NULL,'Y',
2583 DECODE(l_Cbs_Enabled,'N',NULL,
2584 DECODE(cbs_element_id,
2585 NULL,'Y',NULL))))),-- cbs enhancement changes bug#16445106
2586 val_error_code = NVL(val_error_code,
2587 DECODE(task_id,
2588 NULL,'INVALID_TASK_INFO',
2589 DECODE(resource_list_member_id,
2590 NULL,'INVALID_RESOURCE_INFO',
2591 DECODE(l_Cbs_Enabled,'N',NULL,
2592 DECODE(cbs_element_id,
2593 NULL,'INVALID_CBS_INFO', NULL))))),-- cbs enhancement changes bug#16445106
2594 err_task_name = nvl(task_name,'-98'),
2595 err_task_number = nvl(task_number,'-98'),
2596 err_alias = nvl(resource_alias,'-98'),
2597 err_amount_type_code = nvl(amount_type_code,'-98')
2598 WHERE run_id=p_run_id
2599 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
2600
2601 END IF;
2602 --DEBUG_NS('before insert_test_dump1:: ' );
2603 --commit;
2604 --insert_test_dump1;
2605
2606 --log1('----- STAGE 5-------');
2607 IF l_debug_mode = 'Y' THEN
2608 pa_debug.g_err_stage := 'plan class code of the version: ' || p_version_info_rec.x_plan_class_code;
2609 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2610 END IF;
2611
2612
2613 IF p_version_info_rec.x_plan_class_code = PA_FP_CONSTANTS_PKG.G_PLAN_CLASS_FORECAST THEN
2614 is_forecast_version := 'Y';
2615
2616 -- calling an api to derive the etc_start_date
2617 IF l_debug_mode = 'Y' THEN
2618 pa_debug.g_err_stage := 'Calling pa_fp_gen_amount_utils.get_etc_start_date';
2619 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2620 END IF;
2621
2622 l_etc_start_date := pa_fp_gen_amount_utils.get_etc_start_date(p_version_info_rec.x_budget_version_id);
2623 END IF;
2624
2625 --log1('----- STAGE 6-------');
2626 BEGIN
2627 SELECT t.name,
2628 a.spread_curve_id
2629 INTO l_fixed_spread_curve_name,
2630 l_fixed_spread_curve_id
2631 FROM pa_spread_curves_b a,
2632 pa_spread_curves_tl t
2633 WHERE a.spread_curve_id = t.spread_curve_id
2634 AND a.spread_curve_code = 'FIXED_DATE'
2635 AND t.language = userenv('LANG');
2636 EXCEPTION
2637 WHEN OTHERS THEN
2638 IF l_debug_mode = 'Y' THEN
2639 pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2640 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2641 END IF;
2642
2643 RAISE;
2644 END;
2645 --log1('----- STAGE 7-------');
2646 IF is_periodic_setup = 'Y' THEN
2647 /* The structure of the both tables for start date and end date table would be as follows:
2648 * - If the number of flexible periods shown on the layout is n, then the first n elements
2649 * in each of the tables would contain corresponding start date/end date of a period whose
2650 * number would be specified by the index.
2651 */
2652
2653 l_prd_start_date_tbl := p_prd_start_date_tbl;
2654 l_prd_end_date_tbl := p_prd_end_date_tbl;
2655
2656 --log1('--p_prd_start_date_tbl.COUNT-- ' || p_prd_start_date_tbl.COUNT);
2657 l_original_prd_count := p_prd_start_date_tbl.COUNT;
2658 l_int_new_prd_count := 52 - (l_original_prd_count);
2659 IF l_int_new_prd_count > 0 THEN
2660 -- extending the period start/end date tables to have total 52 periods
2661 l_prd_start_date_tbl.EXTEND(l_int_new_prd_count);
2662 l_prd_end_date_tbl.EXTEND(l_int_new_prd_count);
2663 END IF;
2664 END IF;
2665
2666 -- initializing the conversion attributes for ALL version
2667 -- and for periodic layouts
2668
2669 IF is_periodic_setup = 'Y' THEN
2670 IF p_version_info_rec.x_version_type = 'ALL' AND
2671 p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
2672
2673 l_conv_attrb_displayed := conv_attributes_displayed(p_run_id => p_run_id);
2674
2675 BEGIN
2676 SELECT project_cost_rate_type,
2677 project_cost_rate_date_type,
2678 project_cost_rate_date,
2679 projfunc_cost_rate_type,
2680 projfunc_cost_rate_date_type,
2681 projfunc_cost_rate_date,
2682 project_rev_rate_type,
2683 project_rev_rate_date_type,
2684 project_rev_rate_date,
2685 projfunc_rev_rate_type,
2686 projfunc_rev_rate_date_type,
2687 projfunc_rev_rate_date
2688 INTO d_project_cost_rate_type,
2689 d_project_cost_rate_date_type,
2690 d_project_cost_rate_date,
2691 d_projfunc_cost_rate_type,
2692 d_projfunc_cost_rate_date_type,
2693 d_projfunc_cost_rate_date,
2694 d_project_rev_rate_type,
2695 d_project_rev_rate_date_type,
2696 d_project_rev_rate_date,
2697 d_projfunc_rev_rate_type,
2698 d_projfunc_rev_rate_date_type,
2699 d_projfunc_rev_rate_date
2700 FROM pa_proj_fp_options
2701 WHERE fin_plan_version_id = p_version_info_rec.x_budget_version_id
2702 AND fin_plan_preference_code = 'COST_AND_REV_SAME';
2703 EXCEPTION
2704 WHEN OTHERS THEN
2705 IF l_debug_mode = 'Y' THEN
2706 pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2707 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2708 END IF;
2709
2710 RAISE;
2711 END;
2712
2713 -- selecting the exchange rates for all the transaction currencies available
2714 -- for the version
2715 BEGIN
2716 SELECT txn_currency_code,
2717 project_cost_exchange_rate,
2718 project_rev_exchange_rate,
2719 projfunc_cost_exchange_rate,
2720 projfunc_rev_exchange_rate
2721 BULK COLLECT INTO
2722 d_txn_curr_tab,
2723 d_project_cost_exc_rate_tab,
2724 d_project_rev_exc_rate_tab,
2725 d_projfunc_cost_exc_rate_tab,
2726 d_projfunc_rev_exc_rate_tab
2727 FROM pa_fp_txn_currencies
2728 WHERE proj_fp_options_id = p_version_info_rec.x_proj_fp_options_id;
2729 EXCEPTION
2730 WHEN OTHERS THEN
2731 IF l_debug_mode = 'Y' THEN
2732 pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
2733 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
2734 END IF;
2735
2736 RAISE;
2737 END;
2738 END IF;
2739 END IF;
2740 -- initializing l_plan_trans_attr_copied_flag to N
2741 l_plan_trans_attr_copied_flag := 'N';
2742 l_cost_conv_attr_copied_flag := 'N';
2743 l_rev_conv_attr_copied_flag := 'N';
2744 IF l_debug_mode = 'Y' THEN
2745 pa_debug.g_err_stage := 'l_plan_trans_attr_copied_flag initialized to N';
2746 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2747 pa_debug.g_err_stage := 'Opening cursor inf_tbl_data_csr';
2748 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
2749 END IF;
2750
2751 --Initialize the OUT variables
2752 x_etc_quantity_tbl := SYSTEM.pa_num_tbl_type();
2753 x_etc_raw_cost_tbl := SYSTEM.pa_num_tbl_type();
2754 x_etc_burdened_cost_tbl := SYSTEM.pa_num_tbl_type();
2755 x_etc_revenue_tbl := SYSTEM.pa_num_tbl_type();
2756
2757 --log1('----- STAGE 8-------');
2758 IF p_version_info_rec.x_version_type = 'COST' THEN
2759 l_allow_qty_flag := p_version_info_rec.x_cost_quantity_flag;
2760 ELSIF p_version_info_rec.x_version_type = 'REVENUE' THEN
2761 l_allow_qty_flag := p_version_info_rec.x_rev_quantity_flag;
2762 ELSIF p_version_info_rec.x_version_type = 'ALL' THEN
2763 l_allow_qty_flag := p_version_info_rec.x_all_quantity_flag;
2764 END IF;
2765
2766 IF is_periodic_setup = 'Y' THEN
2767
2768 -- deriving the start/end date of the first period that falls before the first period
2769 -- displayed in the period mask
2770 --log1('----- STAGE 8.0.1------- '||1);
2771 --log1('----- STAGE 8.0.2------- '||p_prd_start_date_tbl(1));
2772 OPEN l_first_pd_st_en_dt_csr(p_org_id,
2773 p_prd_start_date_tbl(1),
2774 p_version_info_rec.x_time_phased_code);
2775 FETCH l_first_pd_st_en_dt_csr
2776 INTO l_first_pd_st_en_dt_rec;
2777 l_first_pd_bf_pm_st_dt := l_first_pd_st_en_dt_rec.start_date;
2778 l_first_pd_bf_pm_en_dt := l_first_pd_st_en_dt_rec.end_date;
2779 CLOSE l_first_pd_st_en_dt_csr;
2780
2781 -- deriving the start/end date of the last period that falls after the last period
2782 -- displayed in the period mask
2783 --log1('----- STAGE 8.1.1------- '||l_original_prd_count);
2784 --log1('----- STAGE 8.1.2------- '||p_prd_end_date_tbl(l_original_prd_count));
2785 OPEN l_last_pd_st_en_dt_csr(p_org_id,
2786 p_prd_end_date_tbl(l_original_prd_count),
2787 p_version_info_rec.x_time_phased_code);
2788 FETCH l_last_pd_st_en_dt_csr
2789 INTO l_last_pd_st_en_dt_rec;
2790 l_last_pd_af_pm_st_dt := l_last_pd_st_en_dt_rec.start_date;
2791 l_last_pd_af_pm_en_dt := l_last_pd_st_en_dt_rec.end_date;
2792 CLOSE l_last_pd_st_en_dt_csr;
2793
2794 x_first_pd_bf_pm_en_dt := l_first_pd_bf_pm_en_dt;
2795 x_last_pd_af_pm_st_dt := l_last_pd_af_pm_st_dt;
2796
2797 END IF;
2798
2799 -- initializing the conversion attributes for the firsr record for a periodic layout
2800 -- for a ALL version, these values would be overwritten
2801 IF is_periodic_setup = 'Y' THEN
2802 IF p_version_info_rec.x_version_type = 'ALL' AND
2803 p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
2804
2805 -- bug 4479036: need to assign these default values only if the
2806 -- conversion attribute columns are selected in the layout.
2807 -- otherwise keep them as null.
2808 IF l_conv_attrb_displayed = 'Y' THEN
2809 l_project_cost_rate_type := d_project_cost_rate_type ;
2810 l_project_cost_rate_date_type := d_project_cost_rate_date_type ;
2811 l_project_cost_rate_date := d_project_cost_rate_date ;
2812 l_projfunc_cost_rate_type := d_projfunc_cost_rate_type ;
2813 l_projfunc_cost_rate_date_type:= d_projfunc_cost_rate_date_type;
2814 l_projfunc_cost_rate_date := d_projfunc_cost_rate_date ;
2815
2816 l_project_rev_rate_type := d_project_rev_rate_type ;
2817 l_project_rev_rate_date_type := d_project_rev_rate_date_type ;
2818 l_project_rev_rate_date := d_project_rev_rate_date ;
2819 l_projfunc_rev_rate_type := d_projfunc_rev_rate_type ;
2820 l_projfunc_rev_rate_date_type := d_projfunc_rev_rate_date_type ;
2821 l_projfunc_rev_rate_date := d_projfunc_rev_rate_date ;
2822
2823 IF l_inf_tbl_data_curr_rec.txn_currency_code IS NOT NULL THEN
2824 IF d_txn_curr_tab.COUNT > 0 THEN
2825 FOR i IN d_txn_curr_tab.FIRST .. d_txn_curr_tab.LAST LOOP
2826 IF d_txn_curr_tab(i) = l_inf_tbl_data_curr_rec.txn_currency_code THEN
2827 l_project_cost_exchange_rate := d_project_cost_exc_rate_tab(i);
2828 l_projfunc_cost_exchange_rate := d_projfunc_cost_exc_rate_tab(i);
2829 l_project_rev_exchange_rate := d_project_rev_exc_rate_tab(i);
2830 l_projfunc_rev_exchange_rate := d_projfunc_rev_exc_rate_tab(i);
2831
2832 EXIT;
2833 END IF;
2834 END LOOP;
2835 END IF;
2836 END IF;
2837 END IF;
2838 END IF;
2839 END IF;
2840 --log1('----- STAGE 8.2.0------- ');
2841
2842 l_inf_tbl_data_prev_rec := NULL;
2843 IF inf_tbl_data_csr%ISOPEN THEN
2844
2845 CLOSE inf_tbl_data_csr;
2846
2847 END IF;
2848
2849 OPEN inf_tbl_data_csr
2850 (c_run_id => p_run_id,
2851 c_allow_qty_flag => l_allow_qty_flag,
2852 c_allow_raw_cost_flag => p_version_info_rec.x_raw_cost_flag,
2853 c_allow_burd_cost_flag => p_version_info_rec.x_burdened_flag,
2854 c_allow_revenue_flag => p_version_info_rec.x_revenue_flag,
2855 c_allow_raw_cost_rate_flag => p_version_info_rec.x_cost_rate_flag,
2856 c_allow_burd_cost_rate_flag => p_version_info_rec.x_burden_rate_flag,
2857 c_allow_bill_rate_flag => p_version_info_rec.x_bill_rate_flag,
2858 c_project_id => p_version_info_rec.x_project_id,
2859 c_fin_plan_type_id => p_version_info_rec.x_fin_plan_type_id,
2860 c_version_type => p_version_info_rec.x_version_type,
2861 c_request_id => p_request_id);
2862 --log1('----- STAGE 8.2.1------- ');
2863
2864 --Added for bug#4488926
2865 IF(p_version_info_rec.x_time_phased_code is null)
2866 THEN
2867 l_period_time_phased_code := PA_FIN_PLAN_UTILS.Get_Time_Phased_code(p_version_info_rec.x_budget_version_id);
2868 ELSE
2869 l_period_time_phased_code := p_version_info_rec.x_time_phased_code;
2870 END IF;
2871
2872 FETCH inf_tbl_data_csr INTO l_inf_tbl_data_curr_rec;
2873 --log1('----- STAGE 8.2.2------- ');
2874 LOOP
2875 --log1('----- STAGE 8.2.3------- l_inf_tbl_data_curr_rec.task_id '||l_inf_tbl_data_curr_rec.task_id);
2876 --log1('----- STAGE 8.2.4-------');
2877 -- resetting budget line start date/ end date varibales
2878 l_bdgt_line_start_date := null;
2879 l_bdgt_line_end_date := null;
2880
2881 --log1('----- STAGE 8.2.4.0.1-------');
2882 --Initialize the variables used for processing
2883 IF l_inf_tbl_data_curr_rec.task_id IS NULL OR
2884 (l_inf_tbl_data_prev_rec.task_id IS NOT NULL AND
2885 (l_inf_tbl_data_prev_rec.task_id <> l_inf_tbl_data_curr_rec.task_id OR
2886 l_inf_tbl_data_prev_rec.resource_list_member_id <> l_inf_tbl_data_curr_rec.resource_list_member_id OR
2887 ((l_Cbs_Enabled = 'Y' and
2888 l_inf_tbl_data_curr_rec.cbs_element_id <> l_inf_tbl_data_next_rec.cbs_element_id) OR l_Cbs_Enabled = 'N') -- cbs enhancement changes bug#16445106
2889 OR
2890 Nvl(l_inf_tbl_data_prev_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') OR
2891 NVL(l_inf_tbl_data_prev_rec.amount_type_code,'-99') <> NVL(l_inf_tbl_data_curr_rec.amount_type_code,'-99'))) THEN
2892
2893 --log1('----- STAGE 8.2.4.0.2-------');
2894 --Reset Planning Transaction Level Variables
2895 IF l_inf_tbl_data_curr_rec.task_id IS NULL OR
2896 l_inf_tbl_data_prev_rec.task_id <> l_inf_tbl_data_curr_rec.task_id OR
2897 l_inf_tbl_data_prev_rec.resource_list_member_id <> l_inf_tbl_data_curr_rec.resource_list_member_id OR
2898 Nvl(l_inf_tbl_data_prev_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') THEN
2899
2900 l_plan_trans_attr_copied_flag := 'N';
2901 l_min_bdgt_line_start_date := NULL;
2902 l_max_bdgt_line_end_date := NULL;
2903
2904 l_project_cost_rate_type := NULL;
2905 l_project_cost_rate_date_type := NULL;
2906 l_project_cost_rate_date := NULL;
2907 l_project_cost_exchange_rate := NULL;
2908 l_projfunc_cost_rate_type := NULL;
2909 l_projfunc_cost_rate_date_type:= NULL;
2910 l_projfunc_cost_rate_date := NULL;
2911 l_projfunc_cost_exchange_rate := NULL;
2912
2913 l_project_rev_rate_type := NULL;
2914 l_project_rev_rate_date_type := NULL;
2915 l_project_rev_rate_date := NULL;
2916 l_project_rev_exchange_rate := NULL;
2917 l_projfunc_rev_rate_type := NULL;
2918 l_projfunc_rev_rate_date_type:= NULL;
2919 l_projfunc_rev_rate_date := NULL;
2920 l_projfunc_rev_exchange_rate := NULL;
2921
2922 l_cost_conv_attr_copied_flag := 'N';
2923 l_rev_conv_attr_copied_flag := 'N';
2924 --log1('----- STAGE 8.2.4.0.3-------');
2925
2926 -- initializing the conversion attributes for subsequent reords for periodic layout
2927 -- for a ALL version, these values would be overwritten
2928 IF is_periodic_setup = 'Y' THEN
2929 IF p_version_info_rec.x_version_type = 'ALL' AND
2930 p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
2931 -- bug 4479036: need to assign these default values only if the
2932 -- conversion attribute columns are selected in the layout.
2933 -- otherwise keep them as null.
2934 IF l_conv_attrb_displayed = 'Y' THEN
2935 l_project_cost_rate_type := d_project_cost_rate_type ;
2936 l_project_cost_rate_date_type := d_project_cost_rate_date_type ;
2937 l_project_cost_rate_date := d_project_cost_rate_date ;
2938 l_projfunc_cost_rate_type := d_projfunc_cost_rate_type ;
2939 l_projfunc_cost_rate_date_type:= d_projfunc_cost_rate_date_type;
2940 l_projfunc_cost_rate_date := d_projfunc_cost_rate_date ;
2941
2942 l_project_rev_rate_type := d_project_rev_rate_type ;
2943 l_project_rev_rate_date_type := d_project_rev_rate_date_type ;
2944 l_project_rev_rate_date := d_project_rev_rate_date ;
2945 l_projfunc_rev_rate_type := d_projfunc_rev_rate_type ;
2946 l_projfunc_rev_rate_date_type := d_projfunc_rev_rate_date_type ;
2947 l_projfunc_rev_rate_date := d_projfunc_rev_rate_date ;
2948
2949 IF Nvl(l_inf_tbl_data_prev_rec.txn_currency_code, '-99') <>
2950 Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') THEN
2951 IF d_txn_curr_tab.COUNT > 0 THEN
2952 FOR i IN d_txn_curr_tab.FIRST .. d_txn_curr_tab.LAST LOOP
2953 IF d_txn_curr_tab(i) = l_inf_tbl_data_curr_rec.txn_currency_code THEN
2954 l_project_cost_exchange_rate := d_project_cost_exc_rate_tab(i);
2955 l_projfunc_cost_exchange_rate := d_projfunc_cost_exc_rate_tab(i);
2956 l_project_rev_exchange_rate := d_project_rev_exc_rate_tab(i);
2957 l_projfunc_rev_exchange_rate := d_projfunc_rev_exc_rate_tab(i);
2958
2959 EXIT;
2960 END IF;
2961 END LOOP;
2962 END IF;
2963 END IF;
2964 END IF;
2965 END IF;
2966 END IF;
2967 END IF;
2968
2969 --log1('----- STAGE 8.2.4.0.4-------');
2970 --Reset the Resource assignment level Variables
2971 IF l_inf_tbl_data_curr_rec.task_id IS NULL OR
2972 l_inf_tbl_data_curr_rec.task_id <> l_inf_tbl_data_prev_rec.task_id OR
2973 l_inf_tbl_data_curr_rec.resource_list_member_id <> l_inf_tbl_data_prev_rec.resource_list_member_id OR
2974 ((l_Cbs_Enabled = 'Y' and
2975 l_inf_tbl_data_curr_rec.cbs_element_id <> l_inf_tbl_data_next_rec.cbs_element_id) OR l_Cbs_Enabled = 'N') -- cbs enhancement changes bug#16445106
2976 THEN
2977 -- nulling out the fixed spread curve period counter
2978 l_fix_sc_amt_pd_curr_index := null;
2979
2980 l_end_ra_index := bl_count -1;
2981 --log1('----- STAGE 8.2.4.0.5-------'||l_start_ra_index);
2982 --log1('----- STAGE 8.2.4.0.6-------'||l_end_ra_index);
2983 --log1('----- STAGE 8.2.4.0.7-------'||l_min_ra_plan_start_date);
2984 --log1('----- STAGE 8.2.4.0.8-------'||l_max_ra_plan_end_date);
2985
2986 IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
2987 l_cached_ra_id_tbl(l_cached_ra_index) = -1 THEN
2988 FOR kk IN l_start_ra_index..l_end_ra_index LOOP
2989 l_plan_start_date_tbl(kk) := l_min_ra_plan_start_date;
2990 l_plan_end_date_tbl(kk) := l_max_ra_plan_end_date;
2991 END LOOP;
2992 END IF;
2993 l_start_ra_index := bl_count;
2994 l_min_ra_plan_start_date := null;
2995 l_max_ra_plan_end_date := null;
2996 END IF;
2997
2998 END IF;--IF l_inf_tbl_data_prev_rec.task_id IS NOT NULL AND
2999
3000 EXIT WHEN l_inf_tbl_data_curr_rec.task_id IS NULL;
3001 x_inf_tbl_rec_tbl (x_inf_tbl_rec_tbl.COUNT + 1):= l_inf_tbl_data_curr_rec;
3002 BEGIN
3003 --log1('----- STAGE 9-------');
3004 -- preparing the index to be used for cached RA id table
3005 l_cached_ra_index := 'T' || l_inf_tbl_data_curr_rec.task_id || 'R' || l_inf_tbl_data_curr_rec.resource_list_member_id;
3006
3007 -- checking if the RA is an existing one or a new one
3008 IF NOT l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) THEN
3009 -- deriving planning dates and spread curve information from pa_resource_assignments for existing RAs
3010 -- or from pa_resource_list_members for new RAs.
3011 BEGIN
3012 SELECT resource_assignment_id,
3013 planning_start_date,
3014 planning_end_date,
3015 spread_curve_id,
3016 sp_fixed_date,
3017 rbs_element_id,
3018 cbs_element_id, -- cbs enhancement changes bug#16445106
3019 resource_class_code,
3020 rate_based_flag
3021 INTO l_ra_id,
3022 l_plan_start_date,
3023 l_plan_end_date,
3024 l_spread_curve_id,
3025 l_sp_fixed_date,
3026 l_rbs_elem_id,
3027 l_cbs_elem_id, -- cbs enhancement changes bug#16445106
3028 l_res_class_code,
3029 l_rate_based_flag
3030 FROM pa_resource_assignments
3031 WHERE project_id = p_version_info_rec.x_project_id
3032 AND budget_version_id = p_version_info_rec.x_budget_version_id
3033 AND task_id = l_inf_tbl_data_curr_rec.task_id
3034 AND resource_list_member_id = l_inf_tbl_data_curr_rec.resource_list_member_id
3035 AND nvl(cbs_element_id,-1) = nvl(l_inf_tbl_data_curr_rec.cbs_element_id,-1)
3036 AND project_assignment_id = -1;
3037
3038 l_cached_ra_id_tbl(l_cached_ra_index) := l_ra_id;
3039 EXCEPTION
3040 WHEN NO_DATA_FOUND THEN
3041 --log1('----- STAGE 10-------');
3042 BEGIN
3043 SELECT spread_curve_id
3044 INTO l_spread_curve_id
3045 FROM pa_resource_list_members
3046 WHERE resource_list_member_id = l_inf_tbl_data_curr_rec.resource_list_member_id;
3047 EXCEPTION
3048 WHEN OTHERS THEN
3049 IF l_debug_mode = 'Y' THEN
3050 pa_debug.g_err_stage:= 'Unexpected Error - ' || SQLERRM;
3051 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5);
3052 END IF;
3053
3054 RAISE;
3055 END;
3056 l_ra_id := NULL;
3057 l_plan_start_date := NULL;
3058 l_plan_end_date := NULL;
3059 l_sp_fixed_date := NULL;
3060 l_rbs_elem_id := NULL;
3061 l_cbs_elem_id := NULL;
3062 l_res_class_code := NULL;
3063 l_rate_based_flag := NULL;
3064 -- storing -1 for the index of corresoponding task/resource to indicate new RA
3065 l_cached_ra_id_tbl(l_cached_ra_index) := -1;
3066 END;
3067 --log1('----- STAGE 11-------');
3068 END IF;
3069
3070 -- initializing the local temp variables
3071 l_raw_cost := NULL;
3072 l_burdened_cost := NULL;
3073 l_revenue := NULL;
3074 l_quantity := NULL;
3075 l_etc_quantity := NULL;
3076 l_etc_raw_cost := NULL;
3077 l_etc_burdened_cost := NULL;
3078 l_etc_revenue := NULL;
3079 l_tmp_sum_amt := NULL;
3080 l_not_null_period_cnt := NULL;
3081
3082 -- budget line dates processing starts
3083 IF l_inf_tbl_data_curr_rec.delete_flag = 'Y' THEN
3084 l_bdgt_line_start_date := l_plan_start_date;
3085 l_bdgt_line_end_date := l_plan_end_date;
3086 ELSE
3087 IF is_periodic_setup = 'Y' THEN
3088 IF is_forecast_version = 'Y' THEN
3089 IF l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) AND
3090 l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3091 l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3092 l_bdgt_line_start_date := l_prd_start_date_tbl(1);
3093 ELSIF l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) AND
3094 l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3095 l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3096 l_bdgt_line_start_date := l_prd_start_date_tbl(2);
3097 ELSIF l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) AND
3098 l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3099 l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3100 l_bdgt_line_start_date := l_prd_start_date_tbl(3);
3101 ELSIF l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) AND
3102 l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3103 l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3104 l_bdgt_line_start_date := l_prd_start_date_tbl(4);
3105 ELSIF l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) AND
3106 l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3107 l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3108 l_bdgt_line_start_date := l_prd_start_date_tbl(5);
3109 ELSIF l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) AND
3110 l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3111 l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3112 l_bdgt_line_start_date := l_prd_start_date_tbl(6);
3113 ELSIF l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) AND
3114 l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3115 l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3116 l_bdgt_line_start_date := l_prd_start_date_tbl(7);
3117 ELSIF l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) AND
3118 l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3119 l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3120 l_bdgt_line_start_date := l_prd_start_date_tbl(8);
3121 ELSIF l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) AND
3122 l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3123 l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3124 l_bdgt_line_start_date := l_prd_start_date_tbl(9);
3125 ELSIF l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) AND
3126 l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3127 l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3128 l_bdgt_line_start_date := l_prd_start_date_tbl(10);
3129 ELSIF l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) AND
3130 l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3131 l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3132 l_bdgt_line_start_date := l_prd_start_date_tbl(11);
3133 ELSIF l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) AND
3134 l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3135 l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3136 l_bdgt_line_start_date := l_prd_start_date_tbl(12);
3137 ELSIF l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) AND
3138 l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3139 l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3140 l_bdgt_line_start_date := l_prd_start_date_tbl(13);
3141 ELSIF l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) AND
3142 l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3143 l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3144 l_bdgt_line_start_date := l_prd_start_date_tbl(14);
3145 ELSIF l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) AND
3146 l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3147 l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3148 l_bdgt_line_start_date := l_prd_start_date_tbl(15);
3149 ELSIF l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) AND
3150 l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3151 l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3152 l_bdgt_line_start_date := l_prd_start_date_tbl(16);
3153 ELSIF l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) AND
3154 l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3155 l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3156 l_bdgt_line_start_date := l_prd_start_date_tbl(17);
3157 ELSIF l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) AND
3158 l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3159 l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3160 l_bdgt_line_start_date := l_prd_start_date_tbl(18);
3161 ELSIF l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) AND
3162 l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3163 l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3164 l_bdgt_line_start_date := l_prd_start_date_tbl(19);
3165 ELSIF l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) AND
3166 l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3167 l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3168 l_bdgt_line_start_date := l_prd_start_date_tbl(20);
3169 ELSIF l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) AND
3170 l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3171 l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3172 l_bdgt_line_start_date := l_prd_start_date_tbl(21);
3173 ELSIF l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) AND
3174 l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3175 l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3176 l_bdgt_line_start_date := l_prd_start_date_tbl(22);
3177 ELSIF l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) AND
3178 l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3179 l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3180 l_bdgt_line_start_date := l_prd_start_date_tbl(23);
3181 ELSIF l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(24) - 1)) AND
3182 l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3183 l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3184 l_bdgt_line_start_date := l_prd_start_date_tbl(24);
3185 ELSIF l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) AND
3186 l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3187 l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3188 l_bdgt_line_start_date := l_prd_start_date_tbl(25);
3189 ELSIF l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) AND
3190 l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3191 l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3192 l_bdgt_line_start_date := l_prd_start_date_tbl(26);
3193 ELSIF l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) AND
3194 l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3195 l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3196 l_bdgt_line_start_date := l_prd_start_date_tbl(27);
3197 ELSIF l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) AND
3198 l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3199 l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3200 l_bdgt_line_start_date := l_prd_start_date_tbl(28);
3201 ELSIF l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) AND
3202 l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3203 l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3204 l_bdgt_line_start_date := l_prd_start_date_tbl(29);
3205 ELSIF l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) AND
3206 l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3207 l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3208 l_bdgt_line_start_date := l_prd_start_date_tbl(30);
3209 ELSIF l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 0)) AND
3210 l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3211 l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3212 l_bdgt_line_start_date := l_prd_start_date_tbl(31);
3213 ELSIF l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) AND
3214 l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3215 l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3216 l_bdgt_line_start_date := l_prd_start_date_tbl(32);
3217 ELSIF l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) AND
3218 l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3219 l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3220 l_bdgt_line_start_date := l_prd_start_date_tbl(33);
3221 ELSIF l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) AND
3222 l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3223 l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3224 l_bdgt_line_start_date := l_prd_start_date_tbl(34);
3225 ELSIF l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) AND
3226 l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3227 l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3228 l_bdgt_line_start_date := l_prd_start_date_tbl(35);
3229 ELSIF l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) AND
3230 l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3231 l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3232 l_bdgt_line_start_date := l_prd_start_date_tbl(36);
3233 ELSIF l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) AND
3234 l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3235 l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3236 l_bdgt_line_start_date := l_prd_start_date_tbl(37);
3237 ELSIF l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) AND
3238 l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3239 l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3240 l_bdgt_line_start_date := l_prd_start_date_tbl(38);
3241 ELSIF l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) AND
3242 l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3243 l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3244 l_bdgt_line_start_date := l_prd_start_date_tbl(39);
3245 ELSIF l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) AND
3246 l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3247 l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3248 l_bdgt_line_start_date := l_prd_start_date_tbl(40);
3249 ELSIF l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) AND
3250 l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3251 l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3252 l_bdgt_line_start_date := l_prd_start_date_tbl(41);
3253 ELSIF l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) AND
3254 l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3255 l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3256 l_bdgt_line_start_date := l_prd_start_date_tbl(42);
3257 ELSIF l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) AND
3258 l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3259 l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3260 l_bdgt_line_start_date := l_prd_start_date_tbl(43);
3261 ELSIF l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) AND
3262 l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3263 l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3264 l_bdgt_line_start_date := l_prd_start_date_tbl(44);
3265 ELSIF l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) AND
3266 l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
3267 l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
3268 l_bdgt_line_start_date := l_prd_start_date_tbl(45);
3269 ELSIF l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) AND
3270 l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3271 l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3272 l_bdgt_line_start_date := l_prd_start_date_tbl(46);
3273 ELSIF l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) AND
3274 l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3275 l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3276 l_bdgt_line_start_date := l_prd_start_date_tbl(47);
3277 ELSIF l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) AND
3278 l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3279 l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3280 l_bdgt_line_start_date := l_prd_start_date_tbl(48);
3281 ELSIF l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) AND
3282 l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3283 l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3284 l_bdgt_line_start_date := l_prd_start_date_tbl(49);
3285 ELSIF l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) AND
3286 l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3287 l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3288 l_bdgt_line_start_date := l_prd_start_date_tbl(50);
3289 ELSIF l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) AND
3290 l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3291 l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3292 l_bdgt_line_start_date := l_prd_start_date_tbl(51);
3293 ELSIF l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) AND
3294 l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3295 l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3296 l_bdgt_line_start_date := l_prd_start_date_tbl(52);
3297 END IF;
3298 ELSE -- budget version
3299 IF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3300 l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3301 l_bdgt_line_start_date := l_prd_start_date_tbl(1);
3302 ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3303 l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3304 l_bdgt_line_start_date := l_prd_start_date_tbl(2);
3305 ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3306 l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3307 l_bdgt_line_start_date := l_prd_start_date_tbl(3);
3308 ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3309 l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3310 l_bdgt_line_start_date := l_prd_start_date_tbl(4);
3311 ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3312 l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3313 l_bdgt_line_start_date := l_prd_start_date_tbl(5);
3314 ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3315 l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3316 l_bdgt_line_start_date := l_prd_start_date_tbl(6);
3317 ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3318 l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3319 l_bdgt_line_start_date := l_prd_start_date_tbl(7);
3320 ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3321 l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3322 l_bdgt_line_start_date := l_prd_start_date_tbl(8);
3323 ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3324 l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3325 l_bdgt_line_start_date := l_prd_start_date_tbl(9);
3326 ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3327 l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3328 l_bdgt_line_start_date := l_prd_start_date_tbl(10);
3329 ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3330 l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3331 l_bdgt_line_start_date := l_prd_start_date_tbl(11);
3332 ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3333 l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3334 l_bdgt_line_start_date := l_prd_start_date_tbl(12);
3335 ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3336 l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3337 l_bdgt_line_start_date := l_prd_start_date_tbl(13);
3338 ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3339 l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3340 l_bdgt_line_start_date := l_prd_start_date_tbl(14);
3341 ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3342 l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3343 l_bdgt_line_start_date := l_prd_start_date_tbl(15);
3344 ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3345 l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3346 l_bdgt_line_start_date := l_prd_start_date_tbl(16);
3347 ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3348 l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3349 l_bdgt_line_start_date := l_prd_start_date_tbl(17);
3350 ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3351 l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3352 l_bdgt_line_start_date := l_prd_start_date_tbl(18);
3353 ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3354 l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3355 l_bdgt_line_start_date := l_prd_start_date_tbl(19);
3356 ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3357 l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3358 l_bdgt_line_start_date := l_prd_start_date_tbl(20);
3359 ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3360 l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3361 l_bdgt_line_start_date := l_prd_start_date_tbl(21);
3362 ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3363 l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3364 l_bdgt_line_start_date := l_prd_start_date_tbl(22);
3365 ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3366 l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3367 l_bdgt_line_start_date := l_prd_start_date_tbl(23);
3368 ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3369 l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3370 l_bdgt_line_start_date := l_prd_start_date_tbl(24);
3371 ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3372 l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3373 l_bdgt_line_start_date := l_prd_start_date_tbl(25);
3374 ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3375 l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3376 l_bdgt_line_start_date := l_prd_start_date_tbl(26);
3377 ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3378 l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3379 l_bdgt_line_start_date := l_prd_start_date_tbl(27);
3380 ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3381 l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3382 l_bdgt_line_start_date := l_prd_start_date_tbl(28);
3383 ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3384 l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3385 l_bdgt_line_start_date := l_prd_start_date_tbl(29);
3386 ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3387 l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3388 l_bdgt_line_start_date := l_prd_start_date_tbl(30);
3389 ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3390 l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3391 l_bdgt_line_start_date := l_prd_start_date_tbl(31);
3392 ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3393 l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3394 l_bdgt_line_start_date := l_prd_start_date_tbl(32);
3395 ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3396 l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3397 l_bdgt_line_start_date := l_prd_start_date_tbl(33);
3398 ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3399 l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3400 l_bdgt_line_start_date := l_prd_start_date_tbl(34);
3401 ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3402 l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3403 l_bdgt_line_start_date := l_prd_start_date_tbl(35);
3404 ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3405 l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3406 l_bdgt_line_start_date := l_prd_start_date_tbl(36);
3407 ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3408 l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3409 l_bdgt_line_start_date := l_prd_start_date_tbl(37);
3410 ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3411 l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3412 l_bdgt_line_start_date := l_prd_start_date_tbl(38);
3413 ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3414 l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3415 l_bdgt_line_start_date := l_prd_start_date_tbl(39);
3416 ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3417 l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3418 l_bdgt_line_start_date := l_prd_start_date_tbl(40);
3419 ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3420 l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3421 l_bdgt_line_start_date := l_prd_start_date_tbl(41);
3422 ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3423 l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3424 l_bdgt_line_start_date := l_prd_start_date_tbl(42);
3425 ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3426 l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3427 l_bdgt_line_start_date := l_prd_start_date_tbl(43);
3428 ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3429 l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3430 l_bdgt_line_start_date := l_prd_start_date_tbl(44);
3431 ELSIF l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
3432 l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
3433 l_bdgt_line_start_date := l_prd_start_date_tbl(45);
3434 ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3435 l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3436 l_bdgt_line_start_date := l_prd_start_date_tbl(46);
3437 ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3438 l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3439 l_bdgt_line_start_date := l_prd_start_date_tbl(47);
3440 ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3441 l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3442 l_bdgt_line_start_date := l_prd_start_date_tbl(48);
3443 ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3444 l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3445 l_bdgt_line_start_date := l_prd_start_date_tbl(49);
3446 ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3447 l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3448 l_bdgt_line_start_date := l_prd_start_date_tbl(50);
3449 ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3450 l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3451 l_bdgt_line_start_date := l_prd_start_date_tbl(51);
3452 ELSIF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3453 l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3454 l_bdgt_line_start_date := l_prd_start_date_tbl(52);
3455 END IF;
3456 END IF;
3457
3458 -- for budget line end dates
3459 IF is_forecast_version = 'Y' THEN
3460 IF l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) AND
3461 l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3462 l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3463 l_bdgt_line_end_date := l_prd_end_date_tbl(52);
3464 ELSIF l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) AND
3465 l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3466 l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3467 l_bdgt_line_end_date := l_prd_end_date_tbl(51);
3468 ELSIF l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) AND
3469 l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3470 l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3471 l_bdgt_line_end_date := l_prd_end_date_tbl(50);
3472 ELSIF l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) AND
3473 l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3474 l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3475 l_bdgt_line_end_date := l_prd_end_date_tbl(49);
3476 ELSIF l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) AND
3477 l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3478 l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3479 l_bdgt_line_end_date := l_prd_end_date_tbl(48);
3480 ELSIF l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) AND
3481 l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3482 l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3483 l_bdgt_line_end_date := l_prd_end_date_tbl(47);
3484 ELSIF l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) AND
3485 l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3486 l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3487 l_bdgt_line_end_date := l_prd_end_date_tbl(46);
3488 ELSIF l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) AND
3489 l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
3490 l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
3491 l_bdgt_line_end_date := l_prd_end_date_tbl(45);
3492 ELSIF l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) AND
3493 l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3494 l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3495 l_bdgt_line_end_date := l_prd_end_date_tbl(44);
3496 ELSIF l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) AND
3497 l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3498 l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3499 l_bdgt_line_end_date := l_prd_end_date_tbl(43);
3500 ELSIF l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) AND
3501 l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3502 l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3503 l_bdgt_line_end_date := l_prd_end_date_tbl(42);
3504 ELSIF l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) AND
3505 l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3506 l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3507 l_bdgt_line_end_date := l_prd_end_date_tbl(41);
3508 ELSIF l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) AND
3509 l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3510 l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3511 l_bdgt_line_end_date := l_prd_end_date_tbl(40);
3512 ELSIF l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) AND
3513 l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3514 l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3515 l_bdgt_line_end_date := l_prd_end_date_tbl(39);
3516 ELSIF l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) AND
3517 l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3518 l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3519 l_bdgt_line_end_date := l_prd_end_date_tbl(38);
3520 ELSIF l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) AND
3521 l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3522 l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3523 l_bdgt_line_end_date := l_prd_end_date_tbl(37);
3524 ELSIF l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) AND
3525 l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3526 l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3527 l_bdgt_line_end_date := l_prd_end_date_tbl(36);
3528 ELSIF l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) AND
3529 l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3530 l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3531 l_bdgt_line_end_date := l_prd_end_date_tbl(35);
3532 ELSIF l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) AND
3533 l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3534 l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3535 l_bdgt_line_end_date := l_prd_end_date_tbl(34);
3536 ELSIF l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) AND
3537 l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3538 l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3539 l_bdgt_line_end_date := l_prd_end_date_tbl(33);
3540 ELSIF l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) AND
3541 l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3542 l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3543 l_bdgt_line_end_date := l_prd_end_date_tbl(32);
3544 ELSIF l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 1)) AND
3545 l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3546 l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3547 l_bdgt_line_end_date := l_prd_end_date_tbl(31);
3548 ELSIF l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) AND
3549 l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3550 l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3551 l_bdgt_line_end_date := l_prd_end_date_tbl(30);
3552 ELSIF l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) AND
3553 l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3554 l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3555 l_bdgt_line_end_date := l_prd_end_date_tbl(29);
3556 ELSIF l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) AND
3557 l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3558 l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3559 l_bdgt_line_end_date := l_prd_end_date_tbl(28);
3560 ELSIF l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) AND
3561 l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3562 l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3563 l_bdgt_line_end_date := l_prd_end_date_tbl(27);
3564 ELSIF l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) AND
3565 l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3566 l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3567 l_bdgt_line_end_date := l_prd_end_date_tbl(26);
3568 ELSIF l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) AND
3569 l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3570 l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3571 l_bdgt_line_end_date := l_prd_end_date_tbl(25);
3572 ELSIF l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(24) - 1)) AND
3573 l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3574 l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3575 l_bdgt_line_end_date := l_prd_end_date_tbl(24);
3576 ELSIF l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) AND
3577 l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3578 l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3579 l_bdgt_line_end_date := l_prd_end_date_tbl(23);
3580 ELSIF l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) AND
3581 l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3582 l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3583 l_bdgt_line_end_date := l_prd_end_date_tbl(22);
3584 ELSIF l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) AND
3585 l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3586 l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3587 l_bdgt_line_end_date := l_prd_end_date_tbl(21);
3588 ELSIF l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) AND
3589 l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3590 l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3591 l_bdgt_line_end_date := l_prd_end_date_tbl(20);
3592 ELSIF l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) AND
3593 l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3594 l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3595 l_bdgt_line_end_date := l_prd_end_date_tbl(19);
3596 ELSIF l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) AND
3597 l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3598 l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3599 l_bdgt_line_end_date := l_prd_end_date_tbl(18);
3600 ELSIF l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) AND
3601 l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3602 l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3603 l_bdgt_line_end_date := l_prd_end_date_tbl(17);
3604 ELSIF l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) AND
3605 l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3606 l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3607 l_bdgt_line_end_date := l_prd_end_date_tbl(16);
3608 ELSIF l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) AND
3609 l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3610 l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3611 l_bdgt_line_end_date := l_prd_end_date_tbl(15);
3612 ELSIF l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) AND
3613 l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3614 l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3615 l_bdgt_line_end_date := l_prd_end_date_tbl(14);
3616 ELSIF l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) AND
3617 l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3618 l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3619 l_bdgt_line_end_date := l_prd_end_date_tbl(13);
3620 ELSIF l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) AND
3621 l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3622 l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3623 l_bdgt_line_end_date := l_prd_end_date_tbl(12);
3624 ELSIF l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) AND
3625 l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3626 l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3627 l_bdgt_line_end_date := l_prd_end_date_tbl(11);
3628 ELSIF l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) AND
3629 l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3630 l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3631 l_bdgt_line_end_date := l_prd_end_date_tbl(10);
3632 ELSIF l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) AND
3633 l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3634 l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3635 l_bdgt_line_end_date := l_prd_end_date_tbl(9);
3636 ELSIF l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) AND
3637 l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3638 l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3639 l_bdgt_line_end_date := l_prd_end_date_tbl(8);
3640 ELSIF l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) AND
3641 l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3642 l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3643 l_bdgt_line_end_date := l_prd_end_date_tbl(7);
3644 ELSIF l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) AND
3645 l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3646 l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3647 l_bdgt_line_end_date := l_prd_end_date_tbl(6);
3648 ELSIF l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) AND
3649 l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3650 l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3651 l_bdgt_line_end_date := l_prd_end_date_tbl(5);
3652 ELSIF l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) AND
3653 l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3654 l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3655 l_bdgt_line_end_date := l_prd_end_date_tbl(4);
3656 ELSIF l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) AND
3657 l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3658 l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3659 l_bdgt_line_end_date := l_prd_end_date_tbl(3);
3660 ELSIF l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) AND
3661 l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3662 l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3663 l_bdgt_line_end_date := l_prd_end_date_tbl(2);
3664 ELSIF l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) AND
3665 l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3666 l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3667 l_bdgt_line_end_date := l_prd_end_date_tbl(1);
3668 END IF;
3669 ELSE -- budget version
3670 IF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
3671 l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
3672 l_bdgt_line_end_date := l_prd_end_date_tbl(52);
3673 ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
3674 l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
3675 l_bdgt_line_end_date := l_prd_end_date_tbl(51);
3676 ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
3677 l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
3678 l_bdgt_line_end_date := l_prd_end_date_tbl(50);
3679 ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
3680 l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
3681 l_bdgt_line_end_date := l_prd_end_date_tbl(49);
3682 ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
3683 l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
3684 l_bdgt_line_end_date := l_prd_end_date_tbl(48);
3685 ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
3686 l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
3687 l_bdgt_line_end_date := l_prd_end_date_tbl(47);
3688 ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
3689 l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
3690 l_bdgt_line_end_date := l_prd_end_date_tbl(46);
3691 ELSIF l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
3692 l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
3693 l_bdgt_line_end_date := l_prd_end_date_tbl(45);
3694 ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
3695 l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
3696 l_bdgt_line_end_date := l_prd_end_date_tbl(44);
3697 ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
3698 l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
3699 l_bdgt_line_end_date := l_prd_end_date_tbl(43);
3700 ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
3701 l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
3702 l_bdgt_line_end_date := l_prd_end_date_tbl(42);
3703 ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
3704 l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
3705 l_bdgt_line_end_date := l_prd_end_date_tbl(41);
3706 ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
3707 l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
3708 l_bdgt_line_end_date := l_prd_end_date_tbl(40);
3709 ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
3710 l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
3711 l_bdgt_line_end_date := l_prd_end_date_tbl(39);
3712 ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
3713 l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
3714 l_bdgt_line_end_date := l_prd_end_date_tbl(38);
3715 ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
3716 l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
3717 l_bdgt_line_end_date := l_prd_end_date_tbl(37);
3718 ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
3719 l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
3720 l_bdgt_line_end_date := l_prd_end_date_tbl(36);
3721 ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
3722 l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
3723 l_bdgt_line_end_date := l_prd_end_date_tbl(35);
3724 ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
3725 l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
3726 l_bdgt_line_end_date := l_prd_end_date_tbl(34);
3727 ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
3728 l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
3729 l_bdgt_line_end_date := l_prd_end_date_tbl(33);
3730 ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
3731 l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
3732 l_bdgt_line_end_date := l_prd_end_date_tbl(32);
3733 ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
3734 l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
3735 l_bdgt_line_end_date := l_prd_end_date_tbl(31);
3736 ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
3737 l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
3738 l_bdgt_line_end_date := l_prd_end_date_tbl(30);
3739 ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
3740 l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
3741 l_bdgt_line_end_date := l_prd_end_date_tbl(29);
3742 ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
3743 l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
3744 l_bdgt_line_end_date := l_prd_end_date_tbl(28);
3745 ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
3746 l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
3747 l_bdgt_line_end_date := l_prd_end_date_tbl(27);
3748 ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
3749 l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
3750 l_bdgt_line_end_date := l_prd_end_date_tbl(26);
3751 ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
3752 l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
3753 l_bdgt_line_end_date := l_prd_end_date_tbl(25);
3754 ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
3755 l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
3756 l_bdgt_line_end_date := l_prd_end_date_tbl(24);
3757 ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
3758 l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
3759 l_bdgt_line_end_date := l_prd_end_date_tbl(23);
3760 ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
3761 l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
3762 l_bdgt_line_end_date := l_prd_end_date_tbl(22);
3763 ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
3764 l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
3765 l_bdgt_line_end_date := l_prd_end_date_tbl(21);
3766 ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
3767 l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
3768 l_bdgt_line_end_date := l_prd_end_date_tbl(20);
3769 ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
3770 l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
3771 l_bdgt_line_end_date := l_prd_end_date_tbl(19);
3772 ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
3773 l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
3774 l_bdgt_line_end_date := l_prd_end_date_tbl(18);
3775 ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
3776 l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
3777 l_bdgt_line_end_date := l_prd_end_date_tbl(17);
3778 ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
3779 l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
3780 l_bdgt_line_end_date := l_prd_end_date_tbl(16);
3781 ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
3782 l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
3783 l_bdgt_line_end_date := l_prd_end_date_tbl(15);
3784 ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
3785 l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
3786 l_bdgt_line_end_date := l_prd_end_date_tbl(14);
3787 ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
3788 l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
3789 l_bdgt_line_end_date := l_prd_end_date_tbl(13);
3790 ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
3791 l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
3792 l_bdgt_line_end_date := l_prd_end_date_tbl(12);
3793 ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
3794 l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
3795 l_bdgt_line_end_date := l_prd_end_date_tbl(11);
3796 ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
3797 l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
3798 l_bdgt_line_end_date := l_prd_end_date_tbl(10);
3799 ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
3800 l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
3801 l_bdgt_line_end_date := l_prd_end_date_tbl(9);
3802 ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
3803 l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
3804 l_bdgt_line_end_date := l_prd_end_date_tbl(8);
3805 ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
3806 l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
3807 l_bdgt_line_end_date := l_prd_end_date_tbl(7);
3808 ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
3809 l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
3810 l_bdgt_line_end_date := l_prd_end_date_tbl(6);
3811 ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
3812 l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
3813 l_bdgt_line_end_date := l_prd_end_date_tbl(5);
3814 ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
3815 l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
3816 l_bdgt_line_end_date := l_prd_end_date_tbl(4);
3817 ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
3818 l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
3819 l_bdgt_line_end_date := l_prd_end_date_tbl(3);
3820 ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
3821 l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
3822 l_bdgt_line_end_date := l_prd_end_date_tbl(2);
3823 ELSIF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
3824 l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
3825 l_bdgt_line_end_date := l_prd_end_date_tbl(1);
3826 END IF;
3827 END IF;
3828
3829 ELSE -- non periodic
3830 IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
3831 l_cached_ra_id_tbl(l_cached_ra_index) = -1 THEN
3832 -- populating the planning start/end dates as the budget line start/end dates
3833 l_bdgt_line_start_date := l_inf_tbl_data_curr_rec.planning_start_date;
3834 l_bdgt_line_end_date := l_inf_tbl_data_curr_rec.planning_end_date;
3835 ELSE
3836 l_bdgt_line_start_date := l_plan_start_date;
3837 l_bdgt_line_end_date := l_plan_end_date;
3838 END IF;
3839
3840 END IF;
3841 END IF;
3842 -- budget line dates processing ends
3843
3844 -- derivation of amounts i.e. raw cost, burdened cost, revenue,
3845 -- quantity, raw cost rate, burdened cost, bill rate
3846 IF l_inf_tbl_data_curr_rec.delete_flag = 'Y' THEN
3847 IF is_periodic_setup = 'Y' THEN
3848 IF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_RAW_COST' THEN
3849 l_raw_cost := l_fnd_miss_num;
3850 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_RAW_COST' THEN
3851 l_raw_cost := l_fnd_miss_num;
3852 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_RAW_COST' THEN
3853 l_etc_raw_cost := l_fnd_miss_num;
3854 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_BURDENED_COST' THEN
3855 l_burdened_cost := l_fnd_miss_num;
3856 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_BURDENED_COST' THEN
3857 l_burdened_cost := l_fnd_miss_num;
3858 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_BURDENED_COST' THEN
3859 l_etc_burdened_cost := l_fnd_miss_num;
3860 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_REV' THEN
3861 l_revenue := l_fnd_miss_num;
3862 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_REVENUE' THEN
3863 l_revenue := l_fnd_miss_num;
3864 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_REVENUE' THEN
3865 l_etc_revenue := l_fnd_miss_num;
3866 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_QTY' THEN
3867 l_quantity := l_fnd_miss_num;
3868 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_QTY' THEN
3869 l_quantity := l_fnd_miss_num;
3870 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_QTY' THEN
3871 l_etc_quantity := l_fnd_miss_num;
3872 ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') THEN
3873 l_rc_rate := l_fnd_miss_num;
3874 ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('BURDENED_COST_RATE','ETC_BURDENED_COST_RATE') THEN
3875 l_bc_rate := l_fnd_miss_num;
3876 ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') THEN
3877 l_bill_rate := l_fnd_miss_num;
3878 END IF;
3879
3880 ELSE
3881 l_raw_cost := l_fnd_miss_num;
3882 l_burdened_cost := l_fnd_miss_num;
3883 l_revenue := l_fnd_miss_num;
3884 l_quantity := l_fnd_miss_num;
3885 l_etc_quantity := l_fnd_miss_num;
3886 l_etc_raw_cost := l_fnd_miss_num;
3887 l_etc_burdened_cost := l_fnd_miss_num;
3888 l_etc_revenue := l_fnd_miss_num;
3889
3890 l_rc_rate := l_fnd_miss_num;
3891 l_bc_rate := l_fnd_miss_num;
3892 l_bill_rate := l_fnd_miss_num;
3893 END IF;
3894
3895 ELSE
3896 IF is_periodic_setup = 'Y' THEN
3897 -- summing up periods for for particular amount type
3898 l_amount:=0;
3899 l_tmp_sum_amt:=0;
3900 l_not_null_period_cnt:=0;
3901 FOR tt IN 1..52 LOOP
3902
3903 l_amount:=0;
3904 IF tt =1 THEN
3905 l_amount := l_inf_tbl_data_curr_rec.prd1;
3906 ELSIF tt =2 THEN
3907 l_amount := l_inf_tbl_data_curr_rec.prd2;
3908 ELSIF tt =3 THEN
3909 l_amount := l_inf_tbl_data_curr_rec.prd3;
3910 ELSIF tt =4 THEN
3911 l_amount := l_inf_tbl_data_curr_rec.prd4;
3912 ELSIF tt =5 THEN
3913 l_amount := l_inf_tbl_data_curr_rec.prd5;
3914 ELSIF tt =6 THEN
3915 l_amount := l_inf_tbl_data_curr_rec.prd6;
3916 ELSIF tt =7 THEN
3917 l_amount := l_inf_tbl_data_curr_rec.prd7;
3918 ELSIF tt =8 THEN
3919 l_amount := l_inf_tbl_data_curr_rec.prd8;
3920 ELSIF tt =9 THEN
3921 l_amount := l_inf_tbl_data_curr_rec.prd9;
3922 ELSIF tt =10 THEN
3923 l_amount := l_inf_tbl_data_curr_rec.prd10;
3924 ELSIF tt =11 THEN
3925 l_amount := l_inf_tbl_data_curr_rec.prd11;
3926 ELSIF tt =12 THEN
3927 l_amount := l_inf_tbl_data_curr_rec.prd12;
3928 ELSIF tt =13 THEN
3929 l_amount := l_inf_tbl_data_curr_rec.prd13;
3930 ELSIF tt =14 THEN
3931 l_amount := l_inf_tbl_data_curr_rec.prd14;
3932 ELSIF tt =15 THEN
3933 l_amount := l_inf_tbl_data_curr_rec.prd15;
3934 ELSIF tt =16 THEN
3935 l_amount := l_inf_tbl_data_curr_rec.prd16;
3936 ELSIF tt =17 THEN
3937 l_amount := l_inf_tbl_data_curr_rec.prd17;
3938 ELSIF tt =18 THEN
3939 l_amount := l_inf_tbl_data_curr_rec.prd18;
3940 ELSIF tt =19 THEN
3941 l_amount := l_inf_tbl_data_curr_rec.prd19;
3942 ELSIF tt =20 THEN
3943 l_amount := l_inf_tbl_data_curr_rec.prd20;
3944 ELSIF tt =21 THEN
3945 l_amount := l_inf_tbl_data_curr_rec.prd21;
3946 ELSIF tt =22 THEN
3947 l_amount := l_inf_tbl_data_curr_rec.prd22;
3948 ELSIF tt =23 THEN
3949 l_amount := l_inf_tbl_data_curr_rec.prd23;
3950 ELSIF tt =24 THEN
3951 l_amount := l_inf_tbl_data_curr_rec.prd24;
3952 ELSIF tt =25 THEN
3953 l_amount := l_inf_tbl_data_curr_rec.prd25;
3954 ELSIF tt =26 THEN
3955 l_amount := l_inf_tbl_data_curr_rec.prd26;
3956 ELSIF tt =27 THEN
3957 l_amount := l_inf_tbl_data_curr_rec.prd27;
3958 ELSIF tt =28 THEN
3959 l_amount := l_inf_tbl_data_curr_rec.prd28;
3960 ELSIF tt =29 THEN
3961 l_amount := l_inf_tbl_data_curr_rec.prd29;
3962 ELSIF tt =30 THEN
3963 l_amount := l_inf_tbl_data_curr_rec.prd30;
3964 ELSIF tt =31 THEN
3965 l_amount := l_inf_tbl_data_curr_rec.prd31;
3966 ELSIF tt =32 THEN
3967 l_amount := l_inf_tbl_data_curr_rec.prd32;
3968 ELSIF tt =33 THEN
3969 l_amount := l_inf_tbl_data_curr_rec.prd33;
3970 ELSIF tt =34 THEN
3971 l_amount := l_inf_tbl_data_curr_rec.prd34;
3972 ELSIF tt =35 THEN
3973 l_amount := l_inf_tbl_data_curr_rec.prd35;
3974 ELSIF tt =36 THEN
3975 l_amount := l_inf_tbl_data_curr_rec.prd36;
3976 ELSIF tt =37 THEN
3977 l_amount := l_inf_tbl_data_curr_rec.prd37;
3978 ELSIF tt =38 THEN
3979 l_amount := l_inf_tbl_data_curr_rec.prd38;
3980 ELSIF tt =39 THEN
3981 l_amount := l_inf_tbl_data_curr_rec.prd39;
3982 ELSIF tt =40 THEN
3983 l_amount := l_inf_tbl_data_curr_rec.prd40;
3984 ELSIF tt =41 THEN
3985 l_amount := l_inf_tbl_data_curr_rec.prd41;
3986 ELSIF tt =42 THEN
3987 l_amount := l_inf_tbl_data_curr_rec.prd42;
3988 ELSIF tt =43 THEN
3989 l_amount := l_inf_tbl_data_curr_rec.prd43;
3990 ELSIF tt =44 THEN
3991 l_amount := l_inf_tbl_data_curr_rec.prd44;
3992 ELSIF tt =45 THEN
3993 l_amount := l_inf_tbl_data_curr_rec.prd45;
3994 ELSIF tt =46 THEN
3995 l_amount := l_inf_tbl_data_curr_rec.prd46;
3996 ELSIF tt =47 THEN
3997 l_amount := l_inf_tbl_data_curr_rec.prd47;
3998 ELSIF tt =48 THEN
3999 l_amount := l_inf_tbl_data_curr_rec.prd48;
4000 ELSIF tt =49 THEN
4001 l_amount := l_inf_tbl_data_curr_rec.prd49;
4002 ELSIF tt =50 THEN
4003 l_amount := l_inf_tbl_data_curr_rec.prd50;
4004 ELSIF tt =51 THEN
4005 l_amount := l_inf_tbl_data_curr_rec.prd51;
4006 ELSIF tt =52 THEN
4007 l_amount := l_inf_tbl_data_curr_rec.prd52;
4008 END IF;
4009
4010 IF l_amount = l_fnd_miss_num THEN
4011
4012 l_amount:= 0;
4013
4014 ELSIF l_amount IS NULL THEN
4015
4016 l_amount := 0;
4017
4018 END IF;
4019
4020 IF l_amount <> 0 THEN
4021
4022 l_not_null_period_cnt := l_not_null_period_cnt+1;
4023 l_tmp_sum_amt := l_tmp_sum_amt+l_amount;
4024
4025 END IF;
4026
4027 END LOOP;--FOR tt IN 1..52 LOOP
4028 END IF;
4029 END IF;
4030
4031 --log1('----- STAGE 12-------');
4032 --log1('----- STAGE 12.1------- '||l_cached_ra_index);
4033 --log1('----- STAGE 12.2------- '||l_cached_ra_id_tbl(l_cached_ra_index));
4034 IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
4035 l_cached_ra_id_tbl(l_cached_ra_index) <> -1 THEN
4036 -- for existing RAs
4037 -- for periodic layouts getting the start/end date of the preceeding and succeeding periods
4038 IF is_periodic_setup = 'Y' THEN
4039 --log1('----- STAGE 13-------');
4040 IF l_inf_tbl_data_curr_rec.pd_prd IS NOT NULL AND
4041 l_inf_tbl_data_curr_rec.pd_prd <> l_fnd_miss_num THEN
4042 IF l_plan_start_date >= p_prd_start_date_tbl(1) THEN
4043 l_bdgt_line_start_date := l_first_pd_bf_pm_st_dt;
4044 ELSE
4045 l_bdgt_line_start_date := l_plan_start_date;
4046 END IF;
4047 END IF;
4048
4049 IF l_inf_tbl_data_curr_rec.sd_prd IS NOT NULL AND
4050 l_inf_tbl_data_curr_rec.sd_prd <> l_fnd_miss_num THEN
4051 IF l_plan_end_date <= p_prd_end_date_tbl(l_original_prd_count) THEN
4052 l_bdgt_line_end_date := l_last_pd_af_pm_en_dt;
4053 ELSE
4054 l_bdgt_line_end_date := l_plan_end_date;
4055 END IF;
4056 END IF;
4057 --log1('----- STAGE 13.1------- '||l_bdgt_line_start_date);
4058 --log1('----- STAGE 13.2------- '||l_bdgt_line_end_date);
4059 --log1('----- STAGE 13.3------- '||l_plan_start_date);
4060 --log1('----- STAGE 13.4------- '||l_plan_end_date);
4061 -- checking if the budget line start/end dates are outside the planning date range
4062
4063
4064 ---Added this code for bug#4488926. Caching the values of l_period_plan_start_date and
4065 --l_period_plan_end_date
4066 IF ( NOT(l_period_plan_start_date_tbl.exists(to_char(l_plan_start_date))
4067 AND l_period_plan_end_date_tbl.exists(to_char(l_plan_end_date))))
4068 THEN
4069 --For periodic case get the start and end dates.
4070 l_period_plan_start_date := PA_FIN_PLAN_UTILS.get_period_start_date(l_plan_start_date,l_period_time_phased_code);
4071 l_period_plan_end_date := PA_FIN_PLAN_UTILS.get_period_end_date (l_plan_end_date , l_period_time_phased_code);
4072 l_period_plan_start_date_tbl(to_char(l_plan_start_date)) := l_period_plan_start_date;
4073 l_period_plan_end_date_tbl(to_char(l_plan_end_date)) := l_period_plan_end_date;
4074 ELSE
4075 l_period_plan_start_date := l_period_plan_start_date_tbl(to_char(l_plan_start_date));
4076 l_period_plan_end_date := l_period_plan_end_date_tbl(to_char(l_plan_end_date));
4077 END IF;
4078
4079 IF l_bdgt_line_start_date < l_period_plan_start_date OR
4080 l_bdgt_line_end_date > l_period_plan_end_date THEN
4081 l_err_val_code_tbl.extend(1);
4082 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_BL_OUT_OF_PLAN_RANGE';
4083 l_err_task_id_tbl.extend(1);
4084 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4085 l_err_rlm_id_tbl.extend(1);
4086 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4087 l_err_txn_curr_tbl.extend(1);
4088 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4089 l_err_amt_type_tbl.extend(1);
4090 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4091
4092 -- raising an exception to skip processing for the dulpicate record
4093 RAISE Fp_Webadi_Skip_Rec_Proc_Exc;
4094 END IF;
4095 END IF; -- if periodic setup
4096 ELSE
4097 -- for new RAs
4098 --log1('----- STAGE 12.3------- '||is_periodic_setup);
4099 IF is_periodic_setup = 'Y' THEN
4100 -- for new RAs, amounts in preceding and succeeding periods cann't be entered
4101 --log1('----- STAGE 12.4------- '|| l_inf_tbl_data_curr_rec.pd_prd);
4102 IF l_inf_tbl_data_curr_rec.pd_prd IS NOT NULL AND
4103 l_inf_tbl_data_curr_rec.pd_prd <> l_fnd_miss_num THEN
4104 l_err_val_code_tbl.extend(1);
4105 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_NW_RA_PCD_PRD_AMT_ERR';
4106 l_err_task_id_tbl.extend(1);
4107 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4108 l_err_rlm_id_tbl.extend(1);
4109 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4110 l_err_txn_curr_tbl.extend(1);
4111 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4112 l_err_amt_type_tbl.extend(1);
4113 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4114
4115 -- raising an exception to skip processing for the dulpicate record
4116 RAISE Fp_Webadi_Skip_Rec_Proc_Exc;
4117 END IF;
4118 --log1('----- STAGE 12.5------- '|| l_inf_tbl_data_curr_rec.sd_prd);
4119 IF l_inf_tbl_data_curr_rec.sd_prd IS NOT NULL AND
4120 l_inf_tbl_data_curr_rec.sd_prd <> l_fnd_miss_num THEN
4121 l_err_val_code_tbl.extend(1);
4122 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_NW_RA_PCD_PRD_AMT_ERR';
4123 l_err_task_id_tbl.extend(1);
4124 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4125 l_err_rlm_id_tbl.extend(1);
4126 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4127 l_err_txn_curr_tbl.extend(1);
4128 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4129 l_err_amt_type_tbl.extend(1);
4130 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4131
4132 -- raising an exception to skip processing for the dulpicate record
4133 RAISE Fp_Webadi_Skip_Rec_Proc_Exc;
4134 END IF;
4135 END IF;
4136 END IF; -- if existing RA check
4137 --log1('----- STAGE 15-------');
4138
4139 --log1('----- STAGE 16-------');
4140 -- copying the following attributes from the first record
4141 IF l_inf_tbl_data_curr_rec.delete_flag = 'N' THEN
4142 IF l_plan_trans_attr_copied_flag = 'N' THEN
4143
4144 l_bdgt_ln_tbl_description := l_inf_tbl_data_curr_rec.description;
4145 l_change_reason_code := l_inf_tbl_data_curr_rec.change_reason;
4146 -- flipping the value of l_plan_trans_attr_copied_flag
4147 l_plan_trans_attr_copied_flag := 'Y';
4148
4149 END IF;
4150
4151 IF l_cost_conv_attr_copied_flag ='N' OR
4152 l_rev_conv_attr_copied_flag ='N' THEN
4153
4154 IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
4155
4156 IF is_periodic_setup = 'N' THEN
4157
4158 l_project_cost_rate_type := l_inf_tbl_data_curr_rec.project_cost_rate_type;
4159 l_project_cost_rate_date_type := l_inf_tbl_data_curr_rec.project_cost_rate_date_type;
4160 l_project_cost_rate_date := l_inf_tbl_data_curr_rec.project_cost_rate_date;
4161 l_project_cost_exchange_rate := l_inf_tbl_data_curr_rec.project_cost_exchange_rate;
4162 l_projfunc_cost_rate_type := l_inf_tbl_data_curr_rec.projfunc_cost_rate_type;
4163 l_projfunc_cost_rate_date_type:= l_inf_tbl_data_curr_rec.projfunc_cost_rate_date_type;
4164 l_projfunc_cost_rate_date := l_inf_tbl_data_curr_rec.projfunc_cost_rate_date;
4165 l_projfunc_cost_exchange_rate := l_inf_tbl_data_curr_rec.projfunc_cost_exchange_rate;
4166
4167 l_project_rev_rate_type := l_inf_tbl_data_curr_rec.project_rev_rate_type;
4168 l_project_rev_rate_date_type := l_inf_tbl_data_curr_rec.project_rev_rate_date_type;
4169 l_project_rev_rate_date := l_inf_tbl_data_curr_rec.project_rev_rate_date;
4170 l_project_rev_exchange_rate := l_inf_tbl_data_curr_rec.project_rev_exchange_rate;
4171 l_projfunc_rev_rate_type := l_inf_tbl_data_curr_rec.projfunc_rev_rate_type;
4172 l_projfunc_rev_rate_date_type := l_inf_tbl_data_curr_rec.projfunc_rev_rate_date_type;
4173 l_projfunc_rev_rate_date := l_inf_tbl_data_curr_rec.projfunc_rev_rate_date;
4174 l_projfunc_rev_exchange_rate := l_inf_tbl_data_curr_rec.projfunc_rev_exchange_rate;
4175
4176 l_cost_conv_attr_copied_flag :='Y';
4177 l_rev_conv_attr_copied_flag := 'Y';
4178
4179 ELSE--Periodic Setup
4180
4181 IF l_cost_conv_attr_copied_flag ='N' AND
4182 l_inf_tbl_data_curr_rec.amount_type_code IN ('TOTAL_BURDENED_COST',
4183 'TOTAL_RAW_COST',
4184 'BURDENED_COST_RATE',
4185 'RAW_COST_RATE',
4186 'FCST_BURDENED_COST',
4187 'ETC_BURDENED_COST',
4188 'FCST_RAW_COST',
4189 'ETC_RAW_COST',
4190 'ETC_BURDENED_COST_RATE',
4191 'ETC_RAW_COST_RATE') THEN
4192
4193 l_cost_conv_attr_copied_flag := 'Y';
4194 l_project_cost_rate_type := l_inf_tbl_data_curr_rec.project_rate_type;
4195 l_project_cost_rate_date_type := l_inf_tbl_data_curr_rec.project_rate_date_type;
4196 l_project_cost_rate_date := l_inf_tbl_data_curr_rec.project_rate_date;
4197 l_project_cost_exchange_rate := l_inf_tbl_data_curr_rec.project_exchange_rate;
4198 l_projfunc_cost_rate_type := l_inf_tbl_data_curr_rec.projfunc_rate_type;
4199 l_projfunc_cost_rate_date_type := l_inf_tbl_data_curr_rec.projfunc_rate_date_type;
4200 l_projfunc_cost_rate_date := l_inf_tbl_data_curr_rec.projfunc_rate_date;
4201 l_projfunc_cost_exchange_rate := l_inf_tbl_data_curr_rec.projfunc_exchange_rate;
4202
4203 ELSIF l_rev_conv_attr_copied_flag ='N' AND
4204 l_inf_tbl_data_curr_rec.amount_type_code IN ('TOTAL_REV',
4205 'BILL_RATE',
4206 'FCST_REVENUE',
4207 'ETC_REVENUE',
4208 'ETC_BILL_RATE') THEN
4209
4210 l_rev_conv_attr_copied_flag := 'Y';
4211 l_project_rev_rate_type := l_inf_tbl_data_curr_rec.project_rate_type;
4212 l_project_rev_rate_date_type := l_inf_tbl_data_curr_rec.project_rate_date_type;
4213 l_project_rev_rate_date := l_inf_tbl_data_curr_rec.project_rate_date;
4214 l_project_rev_exchange_rate := l_inf_tbl_data_curr_rec.project_exchange_rate;
4215 l_projfunc_rev_rate_type := l_inf_tbl_data_curr_rec.projfunc_rate_type;
4216 l_projfunc_rev_rate_date_type:= l_inf_tbl_data_curr_rec.projfunc_rate_date_type;
4217 l_projfunc_rev_rate_date := l_inf_tbl_data_curr_rec.projfunc_rate_date;
4218 l_projfunc_rev_exchange_rate := l_inf_tbl_data_curr_rec.projfunc_exchange_rate;
4219
4220 END IF;
4221
4222 END IF;--IF is_periodic_setup = 'N' THEN
4223
4224 --log1('l_project_cost_rate_type = ' || l_project_cost_rate_type);
4225 --log1('l_project_cost_rate_date_type = ' || l_project_cost_rate_date_type);
4226 --log1('-- to_char(l_project_cost_rate_date)-1-- ' || to_char(l_project_cost_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4227 --log1('-- to_char(l_project_cost_rate_date)-2-- ' || to_char(l_project_cost_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4228 --log1('l_projfunc_cost_rate_type = ' || l_projfunc_cost_rate_type);
4229 --log1('l_projfunc_cost_rate_date_type = ' || l_projfunc_cost_rate_date_type);
4230 --log1('-- to_char(l_projfunc_cost_rate_date)--1- ' || to_char(l_projfunc_cost_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4231 --log1('-- to_char(l_projfunc_cost_rate_date)--2- ' || to_char(l_projfunc_cost_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4232 --log1('l_project_rev_rate_type = ' || l_project_rev_rate_type);
4233 --log1('l_project_rev_rate_date_type = ' || l_project_rev_rate_date_type);
4234 --log1('-- to_char(l_project_rev_rate_date)-1-- ' || to_char(l_project_rev_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4235 --log1('-- to_char(l_project_rev_rate_date)-2-- ' || to_char(l_project_rev_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4236 --log1('l_projfunc_rev_rate_type = ' || l_projfunc_rev_rate_type);
4237 --log1('l_projfunc_rev_rate_date_type = ' || l_projfunc_rev_rate_date_type);
4238 --log1('-- to_char(l_projfunc_rev_rate_date)-1-- ' || to_char(l_projfunc_rev_rate_date, 'dd-mm-yyyy hh24:mi:ss'));
4239 --log1('-- to_char(l_projfunc_rev_rate_date)-2-- ' || to_char(l_projfunc_rev_rate_date, 'dd-mm-rrrr hh24:mi:ss'));
4240
4241 END IF;--IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
4242
4243 END IF;--IF l_cost_conv_attr_copied_flag ='N' OR
4244 END IF;
4245 -- nulling out the next record
4246 l_inf_tbl_data_next_rec := NULL;
4247 -- fetching the next record
4248 FETCH inf_tbl_data_csr INTO l_inf_tbl_data_next_rec;
4249 --log1('----- STAGE 19-------');
4250 IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
4251 l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
4252 l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id AND
4253 (l_Cbs_Enabled = 'N' OR
4254 (l_Cbs_Enabled = 'Y' AND l_inf_tbl_data_curr_rec.cbs_element_id = l_inf_tbl_data_next_rec.cbs_element_id))-- cbs enhancement changes bug#16445106
4255 AND
4256 Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') = Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') THEN
4257
4258 IF is_periodic_setup = 'Y' THEN
4259 IF l_inf_tbl_data_curr_rec.amount_type_code = l_inf_tbl_data_next_rec.amount_type_code THEN
4260 -- populating the error codes to call process_errors at the end
4261 IF l_debug_mode = 'Y' THEN
4262 pa_debug.g_err_stage := 'Duplicate record found';
4263 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4264 END IF;
4265
4266 l_err_val_code_tbl.extend(1);
4267 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_DUPL_REC_PASSED';
4268 l_err_task_id_tbl.extend(1);
4269 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4270 l_err_rlm_id_tbl.extend(1);
4271 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4272 l_err_txn_curr_tbl.extend(1);
4273 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4274 l_err_amt_type_tbl.extend(1);
4275 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4276
4277 -- raising an exception to skip processing for the dulpicate record
4278 RAISE Fp_Webadi_Skip_Dup_Rec_Exc;
4279 END IF;
4280 ELSE
4281 -- populating the error codes to call process_errors at the end
4282 IF l_debug_mode = 'Y' THEN
4283 pa_debug.g_err_stage := 'Duplicate record found';
4284 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
4285 END IF;
4286
4287 l_err_val_code_tbl.extend(1);
4288 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_DUPL_REC_PASSED';
4289 l_err_task_id_tbl.extend(1);
4290 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4291 l_err_rlm_id_tbl.extend(1);
4292 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4293 l_err_txn_curr_tbl.extend(1);
4294 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4295
4296 -- raising an exception to skip processing for the dulpicate record
4297 RAISE Fp_Webadi_Skip_Dup_Rec_Exc;
4298 END IF;
4299 END IF;
4300
4301 --log1('----- STAGE 19.1-------');
4302 --Throw an error if planning start/end dates are not entered for a planning transaction at all.
4303 IF l_inf_tbl_data_next_rec.task_id IS NULL OR
4304 l_inf_tbl_data_curr_rec.task_id <> l_inf_tbl_data_next_rec.task_id OR
4305 l_inf_tbl_data_curr_rec.resource_list_member_id <> l_inf_tbl_data_next_rec.resource_list_member_id OR
4306 Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') OR
4307 ((l_Cbs_Enabled = 'Y' and
4308 l_inf_tbl_data_curr_rec.cbs_element_id <> l_inf_tbl_data_next_rec.cbs_element_id) OR l_Cbs_Enabled = 'N') -- cbs enhancement changes bug#16445106
4309 OR
4310 is_periodic_setup = 'Y' THEN
4311 IF is_periodic_setup = 'Y' THEN
4312 -- Checking if the spread curve is of fixed date type
4313 IF (l_inf_tbl_data_curr_rec.spread_curve_name IS NOT NULL AND
4314 l_inf_tbl_data_curr_rec.spread_curve_name = l_fixed_spread_curve_name) OR
4315 l_fixed_spread_curve_id = l_spread_curve_id THEN
4316 -- spread curve specified is of fixed date type
4317 IF l_not_null_period_cnt > 1 THEN
4318 -- there are valid amounts entered in more than 1 period
4319 l_err_val_code_tbl.extend(1);
4320 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
4321 l_err_task_id_tbl.extend(1);
4322 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4323 l_err_rlm_id_tbl.extend(1);
4324 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4325 l_err_txn_curr_tbl.extend(1);
4326 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4327 l_err_amt_type_tbl.extend(1);
4328 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4329 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
4330 ELSIF l_not_null_period_cnt = 1 THEN
4331 IF l_fix_sc_amt_pd_curr_index IS NULL THEN
4332 -- finding out the period index for which amount is present
4333
4334 IF is_forecast_version = 'Y' THEN
4335 IF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
4336 l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num AND
4337 l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) THEN
4338 l_fix_sc_amt_pd_curr_index := 1;
4339 ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
4340 l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num AND
4341 l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) THEN
4342 l_fix_sc_amt_pd_curr_index := 2;
4343 ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
4344 l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num AND
4345 l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) THEN
4346 l_fix_sc_amt_pd_curr_index := 3;
4347 ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
4348 l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num AND
4349 l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) THEN
4350 l_fix_sc_amt_pd_curr_index := 4;
4351 ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
4352 l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num AND
4353 l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) THEN
4354 l_fix_sc_amt_pd_curr_index := 5;
4355 ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
4356 l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num AND
4357 l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) THEN
4358 l_fix_sc_amt_pd_curr_index := 6;
4359 ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
4360 l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num AND
4361 l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) THEN
4362 l_fix_sc_amt_pd_curr_index := 7;
4363 ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
4364 l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num AND
4365 l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) THEN
4366 l_fix_sc_amt_pd_curr_index := 8;
4367 ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
4368 l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num AND
4369 l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) THEN
4370 l_fix_sc_amt_pd_curr_index := 9;
4371 ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
4372 l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num AND
4373 l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) THEN
4374 l_fix_sc_amt_pd_curr_index := 10;
4375 ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
4376 l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num AND
4377 l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) THEN
4378 l_fix_sc_amt_pd_curr_index := 11;
4379 ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
4380 l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num AND
4381 l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) THEN
4382 l_fix_sc_amt_pd_curr_index := 12;
4383 ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
4384 l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num AND
4385 l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) THEN
4386 l_fix_sc_amt_pd_curr_index := 13;
4387 ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
4388 l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num AND
4389 l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) THEN
4390 l_fix_sc_amt_pd_curr_index := 14;
4391 ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
4392 l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num AND
4393 l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) THEN
4394 l_fix_sc_amt_pd_curr_index := 15;
4395 ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
4396 l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num AND
4397 l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) THEN
4398 l_fix_sc_amt_pd_curr_index := 16;
4399 ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
4400 l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num AND
4401 l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) THEN
4402 l_fix_sc_amt_pd_curr_index := 17;
4403 ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
4404 l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num AND
4405 l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) THEN
4406 l_fix_sc_amt_pd_curr_index := 18;
4407 ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
4408 l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num AND
4409 l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) THEN
4410 l_fix_sc_amt_pd_curr_index := 19;
4411 ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
4412 l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num AND
4413 l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) THEN
4414 l_fix_sc_amt_pd_curr_index := 20;
4415 ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
4416 l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num AND
4417 l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) THEN
4418 l_fix_sc_amt_pd_curr_index := 21;
4419 ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
4420 l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num AND
4421 l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) THEN
4422 l_fix_sc_amt_pd_curr_index := 22;
4423 ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
4424 l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num AND
4425 l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) THEN
4426 l_fix_sc_amt_pd_curr_index := 23;
4427 ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
4428 l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num AND
4429 l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(24) - 1)) THEN
4430 l_fix_sc_amt_pd_curr_index := 24;
4431 ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
4432 l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num AND
4433 l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) THEN
4434 l_fix_sc_amt_pd_curr_index := 25;
4435 ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
4436 l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num AND
4437 l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) THEN
4438 l_fix_sc_amt_pd_curr_index := 26;
4439 ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
4440 l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num AND
4441 l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) THEN
4442 l_fix_sc_amt_pd_curr_index := 27;
4443 ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
4444 l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num AND
4445 l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) THEN
4446 l_fix_sc_amt_pd_curr_index := 28;
4447 ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
4448 l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num AND
4449 l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) THEN
4450 l_fix_sc_amt_pd_curr_index := 29;
4451 ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
4452 l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num AND
4453 l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) THEN
4454 l_fix_sc_amt_pd_curr_index := 30;
4455 ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
4456 l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num AND
4457 l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 1)) THEN
4458 l_fix_sc_amt_pd_curr_index := 31;
4459 ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
4460 l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num AND
4461 l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) THEN
4462 l_fix_sc_amt_pd_curr_index := 32;
4463 ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
4464 l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num AND
4465 l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) THEN
4466 l_fix_sc_amt_pd_curr_index := 33;
4467 ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
4468 l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num AND
4469 l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) THEN
4470 l_fix_sc_amt_pd_curr_index := 34;
4471 ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
4472 l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num AND
4473 l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) THEN
4474 l_fix_sc_amt_pd_curr_index := 35;
4475 ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
4476 l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num AND
4477 l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) THEN
4478 l_fix_sc_amt_pd_curr_index := 36;
4479 ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
4480 l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num AND
4481 l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) THEN
4482 l_fix_sc_amt_pd_curr_index := 37;
4483 ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
4484 l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num AND
4485 l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) THEN
4486 l_fix_sc_amt_pd_curr_index := 38;
4487 ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
4488 l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num AND
4489 l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) THEN
4490 l_fix_sc_amt_pd_curr_index := 39;
4491 ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
4492 l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num AND
4493 l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) THEN
4494 l_fix_sc_amt_pd_curr_index := 40;
4495 ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
4496 l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num AND
4497 l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) THEN
4498 l_fix_sc_amt_pd_curr_index := 41;
4499 ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
4500 l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num AND
4501 l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) THEN
4502 l_fix_sc_amt_pd_curr_index := 42;
4503 ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
4504 l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num AND
4505 l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) THEN
4506 l_fix_sc_amt_pd_curr_index := 43;
4507 ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
4508 l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num AND
4509 l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) THEN
4510 l_fix_sc_amt_pd_curr_index := 44;
4511 ELSIF l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
4512 l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num AND
4513 l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) THEN
4514 l_fix_sc_amt_pd_curr_index := 45;
4515 ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
4516 l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num AND
4517 l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) THEN
4518 l_fix_sc_amt_pd_curr_index := 46;
4519 ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
4520 l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num AND
4521 l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) THEN
4522 l_fix_sc_amt_pd_curr_index := 47;
4523 ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
4524 l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num AND
4525 l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) THEN
4526 l_fix_sc_amt_pd_curr_index := 48;
4527 ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
4528 l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num AND
4529 l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) THEN
4530 l_fix_sc_amt_pd_curr_index := 49;
4531 ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
4532 l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num AND
4533 l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) THEN
4534 l_fix_sc_amt_pd_curr_index := 50;
4535 ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
4536 l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num AND
4537 l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) THEN
4538 l_fix_sc_amt_pd_curr_index := 51;
4539 ELSIF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
4540 l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num AND
4541 l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) THEN
4542 l_fix_sc_amt_pd_curr_index := 52;
4543 END IF;
4544 ELSE
4545 -- budget version
4546 IF l_inf_tbl_data_curr_rec.prd1 IS NOT NULL AND
4547 l_inf_tbl_data_curr_rec.prd1 <> l_fnd_miss_num THEN
4548 l_fix_sc_amt_pd_curr_index := 1;
4549 ELSIF l_inf_tbl_data_curr_rec.prd2 IS NOT NULL AND
4550 l_inf_tbl_data_curr_rec.prd2 <> l_fnd_miss_num THEN
4551 l_fix_sc_amt_pd_curr_index := 2;
4552 ELSIF l_inf_tbl_data_curr_rec.prd3 IS NOT NULL AND
4553 l_inf_tbl_data_curr_rec.prd3 <> l_fnd_miss_num THEN
4554 l_fix_sc_amt_pd_curr_index := 3;
4555 ELSIF l_inf_tbl_data_curr_rec.prd4 IS NOT NULL AND
4556 l_inf_tbl_data_curr_rec.prd4 <> l_fnd_miss_num THEN
4557 l_fix_sc_amt_pd_curr_index := 4;
4558 ELSIF l_inf_tbl_data_curr_rec.prd5 IS NOT NULL AND
4559 l_inf_tbl_data_curr_rec.prd5 <> l_fnd_miss_num THEN
4560 l_fix_sc_amt_pd_curr_index := 5;
4561 ELSIF l_inf_tbl_data_curr_rec.prd6 IS NOT NULL AND
4562 l_inf_tbl_data_curr_rec.prd6 <> l_fnd_miss_num THEN
4563 l_fix_sc_amt_pd_curr_index := 6;
4564 ELSIF l_inf_tbl_data_curr_rec.prd7 IS NOT NULL AND
4565 l_inf_tbl_data_curr_rec.prd7 <> l_fnd_miss_num THEN
4566 l_fix_sc_amt_pd_curr_index := 7;
4567 ELSIF l_inf_tbl_data_curr_rec.prd8 IS NOT NULL AND
4568 l_inf_tbl_data_curr_rec.prd8 <> l_fnd_miss_num THEN
4569 l_fix_sc_amt_pd_curr_index := 8;
4570 ELSIF l_inf_tbl_data_curr_rec.prd9 IS NOT NULL AND
4571 l_inf_tbl_data_curr_rec.prd9 <> l_fnd_miss_num THEN
4572 l_fix_sc_amt_pd_curr_index := 9;
4573 ELSIF l_inf_tbl_data_curr_rec.prd10 IS NOT NULL AND
4574 l_inf_tbl_data_curr_rec.prd10 <> l_fnd_miss_num THEN
4575 l_fix_sc_amt_pd_curr_index := 10;
4576 ELSIF l_inf_tbl_data_curr_rec.prd11 IS NOT NULL AND
4577 l_inf_tbl_data_curr_rec.prd11 <> l_fnd_miss_num THEN
4578 l_fix_sc_amt_pd_curr_index := 11;
4579 ELSIF l_inf_tbl_data_curr_rec.prd12 IS NOT NULL AND
4580 l_inf_tbl_data_curr_rec.prd12 <> l_fnd_miss_num THEN
4581 l_fix_sc_amt_pd_curr_index := 12;
4582 ELSIF l_inf_tbl_data_curr_rec.prd13 IS NOT NULL AND
4583 l_inf_tbl_data_curr_rec.prd13 <> l_fnd_miss_num THEN
4584 l_fix_sc_amt_pd_curr_index := 13;
4585 ELSIF l_inf_tbl_data_curr_rec.prd14 IS NOT NULL AND
4586 l_inf_tbl_data_curr_rec.prd14 <> l_fnd_miss_num THEN
4587 l_fix_sc_amt_pd_curr_index := 14;
4588 ELSIF l_inf_tbl_data_curr_rec.prd15 IS NOT NULL AND
4589 l_inf_tbl_data_curr_rec.prd15 <> l_fnd_miss_num THEN
4590 l_fix_sc_amt_pd_curr_index := 15;
4591 ELSIF l_inf_tbl_data_curr_rec.prd16 IS NOT NULL AND
4592 l_inf_tbl_data_curr_rec.prd16 <> l_fnd_miss_num THEN
4593 l_fix_sc_amt_pd_curr_index := 16;
4594 ELSIF l_inf_tbl_data_curr_rec.prd17 IS NOT NULL AND
4595 l_inf_tbl_data_curr_rec.prd17 <> l_fnd_miss_num THEN
4596 l_fix_sc_amt_pd_curr_index := 17;
4597 ELSIF l_inf_tbl_data_curr_rec.prd18 IS NOT NULL AND
4598 l_inf_tbl_data_curr_rec.prd18 <> l_fnd_miss_num THEN
4599 l_fix_sc_amt_pd_curr_index := 18;
4600 ELSIF l_inf_tbl_data_curr_rec.prd19 IS NOT NULL AND
4601 l_inf_tbl_data_curr_rec.prd19 <> l_fnd_miss_num THEN
4602 l_fix_sc_amt_pd_curr_index := 19;
4603 ELSIF l_inf_tbl_data_curr_rec.prd20 IS NOT NULL AND
4604 l_inf_tbl_data_curr_rec.prd20 <> l_fnd_miss_num THEN
4605 l_fix_sc_amt_pd_curr_index := 20;
4606 ELSIF l_inf_tbl_data_curr_rec.prd21 IS NOT NULL AND
4607 l_inf_tbl_data_curr_rec.prd21 <> l_fnd_miss_num THEN
4608 l_fix_sc_amt_pd_curr_index := 21;
4609 ELSIF l_inf_tbl_data_curr_rec.prd22 IS NOT NULL AND
4610 l_inf_tbl_data_curr_rec.prd22 <> l_fnd_miss_num THEN
4611 l_fix_sc_amt_pd_curr_index := 22;
4612 ELSIF l_inf_tbl_data_curr_rec.prd23 IS NOT NULL AND
4613 l_inf_tbl_data_curr_rec.prd23 <> l_fnd_miss_num THEN
4614 l_fix_sc_amt_pd_curr_index := 23;
4615 ELSIF l_inf_tbl_data_curr_rec.prd24 IS NOT NULL AND
4616 l_inf_tbl_data_curr_rec.prd24 <> l_fnd_miss_num THEN
4617 l_fix_sc_amt_pd_curr_index := 24;
4618 ELSIF l_inf_tbl_data_curr_rec.prd25 IS NOT NULL AND
4619 l_inf_tbl_data_curr_rec.prd25 <> l_fnd_miss_num THEN
4620 l_fix_sc_amt_pd_curr_index := 25;
4621 ELSIF l_inf_tbl_data_curr_rec.prd26 IS NOT NULL AND
4622 l_inf_tbl_data_curr_rec.prd26 <> l_fnd_miss_num THEN
4623 l_fix_sc_amt_pd_curr_index := 26;
4624 ELSIF l_inf_tbl_data_curr_rec.prd27 IS NOT NULL AND
4625 l_inf_tbl_data_curr_rec.prd27 <> l_fnd_miss_num THEN
4626 l_fix_sc_amt_pd_curr_index := 27;
4627 ELSIF l_inf_tbl_data_curr_rec.prd28 IS NOT NULL AND
4628 l_inf_tbl_data_curr_rec.prd28 <> l_fnd_miss_num THEN
4629 l_fix_sc_amt_pd_curr_index := 28;
4630 ELSIF l_inf_tbl_data_curr_rec.prd29 IS NOT NULL AND
4631 l_inf_tbl_data_curr_rec.prd29 <> l_fnd_miss_num THEN
4632 l_fix_sc_amt_pd_curr_index := 29;
4633 ELSIF l_inf_tbl_data_curr_rec.prd30 IS NOT NULL AND
4634 l_inf_tbl_data_curr_rec.prd30 <> l_fnd_miss_num THEN
4635 l_fix_sc_amt_pd_curr_index := 30;
4636 ELSIF l_inf_tbl_data_curr_rec.prd31 IS NOT NULL AND
4637 l_inf_tbl_data_curr_rec.prd31 <> l_fnd_miss_num THEN
4638 l_fix_sc_amt_pd_curr_index := 31;
4639 ELSIF l_inf_tbl_data_curr_rec.prd32 IS NOT NULL AND
4640 l_inf_tbl_data_curr_rec.prd32 <> l_fnd_miss_num THEN
4641 l_fix_sc_amt_pd_curr_index := 32;
4642 ELSIF l_inf_tbl_data_curr_rec.prd33 IS NOT NULL AND
4643 l_inf_tbl_data_curr_rec.prd33 <> l_fnd_miss_num THEN
4644 l_fix_sc_amt_pd_curr_index := 33;
4645 ELSIF l_inf_tbl_data_curr_rec.prd34 IS NOT NULL AND
4646 l_inf_tbl_data_curr_rec.prd34 <> l_fnd_miss_num THEN
4647 l_fix_sc_amt_pd_curr_index := 34;
4648 ELSIF l_inf_tbl_data_curr_rec.prd35 IS NOT NULL AND
4649 l_inf_tbl_data_curr_rec.prd35 <> l_fnd_miss_num THEN
4650 l_fix_sc_amt_pd_curr_index := 35;
4651 ELSIF l_inf_tbl_data_curr_rec.prd36 IS NOT NULL AND
4652 l_inf_tbl_data_curr_rec.prd36 <> l_fnd_miss_num THEN
4653 l_fix_sc_amt_pd_curr_index := 36;
4654 ELSIF l_inf_tbl_data_curr_rec.prd37 IS NOT NULL AND
4655 l_inf_tbl_data_curr_rec.prd37 <> l_fnd_miss_num THEN
4656 l_fix_sc_amt_pd_curr_index := 37;
4657 ELSIF l_inf_tbl_data_curr_rec.prd38 IS NOT NULL AND
4658 l_inf_tbl_data_curr_rec.prd38 <> l_fnd_miss_num THEN
4659 l_fix_sc_amt_pd_curr_index := 38;
4660 ELSIF l_inf_tbl_data_curr_rec.prd39 IS NOT NULL AND
4661 l_inf_tbl_data_curr_rec.prd39 <> l_fnd_miss_num THEN
4662 l_fix_sc_amt_pd_curr_index := 39;
4663 ELSIF l_inf_tbl_data_curr_rec.prd40 IS NOT NULL AND
4664 l_inf_tbl_data_curr_rec.prd40 <> l_fnd_miss_num THEN
4665 l_fix_sc_amt_pd_curr_index := 40;
4666 ELSIF l_inf_tbl_data_curr_rec.prd41 IS NOT NULL AND
4667 l_inf_tbl_data_curr_rec.prd41 <> l_fnd_miss_num THEN
4668 l_fix_sc_amt_pd_curr_index := 41;
4669 ELSIF l_inf_tbl_data_curr_rec.prd42 IS NOT NULL AND
4670 l_inf_tbl_data_curr_rec.prd42 <> l_fnd_miss_num THEN
4671 l_fix_sc_amt_pd_curr_index := 42;
4672 ELSIF l_inf_tbl_data_curr_rec.prd43 IS NOT NULL AND
4673 l_inf_tbl_data_curr_rec.prd43 <> l_fnd_miss_num THEN
4674 l_fix_sc_amt_pd_curr_index := 43;
4675 ELSIF l_inf_tbl_data_curr_rec.prd44 IS NOT NULL AND
4676 l_inf_tbl_data_curr_rec.prd44 <> l_fnd_miss_num THEN
4677 l_fix_sc_amt_pd_curr_index := 44;
4678 ELSIF l_inf_tbl_data_curr_rec.prd45 IS NOT NULL AND
4679 l_inf_tbl_data_curr_rec.prd45 <> l_fnd_miss_num THEN
4680 l_fix_sc_amt_pd_curr_index := 45;
4681 ELSIF l_inf_tbl_data_curr_rec.prd46 IS NOT NULL AND
4682 l_inf_tbl_data_curr_rec.prd46 <> l_fnd_miss_num THEN
4683 l_fix_sc_amt_pd_curr_index := 46;
4684 ELSIF l_inf_tbl_data_curr_rec.prd47 IS NOT NULL AND
4685 l_inf_tbl_data_curr_rec.prd47 <> l_fnd_miss_num THEN
4686 l_fix_sc_amt_pd_curr_index := 47;
4687 ELSIF l_inf_tbl_data_curr_rec.prd48 IS NOT NULL AND
4688 l_inf_tbl_data_curr_rec.prd48 <> l_fnd_miss_num THEN
4689 l_fix_sc_amt_pd_curr_index := 48;
4690 ELSIF l_inf_tbl_data_curr_rec.prd49 IS NOT NULL AND
4691 l_inf_tbl_data_curr_rec.prd49 <> l_fnd_miss_num THEN
4692 l_fix_sc_amt_pd_curr_index := 49;
4693 ELSIF l_inf_tbl_data_curr_rec.prd50 IS NOT NULL AND
4694 l_inf_tbl_data_curr_rec.prd50 <> l_fnd_miss_num THEN
4695 l_fix_sc_amt_pd_curr_index := 50;
4696 ELSIF l_inf_tbl_data_curr_rec.prd51 IS NOT NULL AND
4697 l_inf_tbl_data_curr_rec.prd51 <> l_fnd_miss_num THEN
4698 l_fix_sc_amt_pd_curr_index := 51;
4699 ELSIF l_inf_tbl_data_curr_rec.prd52 IS NOT NULL AND
4700 l_inf_tbl_data_curr_rec.prd52 <> l_fnd_miss_num THEN
4701 l_fix_sc_amt_pd_curr_index := 52;
4702 END IF;
4703 END IF;
4704 END IF; -- cur index null
4705
4706 --log1('C l_cached_ra_index '||l_cached_ra_index);
4707 --log1('C l_fix_sc_amt_pd_curr_index '||l_fix_sc_amt_pd_curr_index);
4708 --log1('C l_sp_fix_prd_st_dt '||l_sp_fix_prd_st_dt);
4709 --log1('C l_sp_fix_prd_en_dt '||l_sp_fix_prd_en_dt);
4710 --log1('C l_sp_fixed_date '||l_sp_fixed_date);
4711 --log1('C amount type '||l_inf_tbl_data_curr_rec.amount_type_code);
4712 --log1('C txn curr '||l_inf_tbl_data_curr_rec.txn_currency_code);
4713
4714 -- checking for existing RAs, the sp_fixed_date lies in the correct
4715 -- period where amounts have been entered
4716 IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
4717 l_cached_ra_id_tbl(l_cached_ra_index) <> -1 AND
4718 l_fix_sc_amt_pd_curr_index IS NOT NULL THEN
4719 l_sp_fix_prd_st_dt := p_prd_start_date_tbl(l_fix_sc_amt_pd_curr_index);
4720 l_sp_fix_prd_en_dt := p_prd_end_date_tbl(l_fix_sc_amt_pd_curr_index);
4721
4722 IF NOT (l_sp_fixed_date >= l_sp_fix_prd_st_dt AND
4723 l_sp_fix_prd_st_dt <= l_sp_fix_prd_en_dt) THEN
4724 l_err_val_code_tbl.extend(1);
4725 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
4726 l_err_task_id_tbl.extend(1);
4727 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
4728 l_err_rlm_id_tbl.extend(1);
4729 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
4730 l_err_txn_curr_tbl.extend(1);
4731 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
4732 l_err_amt_type_tbl.extend(1);
4733 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
4734
4735 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
4736 END IF;
4737 END IF;
4738 END IF; -- period not null
4739
4740 --If the next record too belongs to the same RA as that of the current record
4741 --Find out the period for which amounts are entered in that record
4742 IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
4743 l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
4744 l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id AND
4745 (l_Cbs_Enabled = 'N' OR
4746 (l_Cbs_Enabled = 'Y' AND l_inf_tbl_data_curr_rec.cbs_element_id = l_inf_tbl_data_next_rec.cbs_element_id))-- cbs enhancement changes bug#16445106
4747 THEN
4748 -- checkin for fixed date spread curve
4749 -- if the same resource appears in the next record too
4750 -- finding out the period index for which amount is present
4751 l_fix_sc_amt_pd_next_index := NULL;
4752 IF is_forecast_version = 'Y' THEN
4753 IF l_inf_tbl_data_next_rec.prd1 IS NOT NULL AND
4754 l_inf_tbl_data_next_rec.prd1 <> l_fnd_miss_num AND
4755 l_prd_start_date_tbl(1) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(1) - 1)) THEN
4756 l_fix_sc_amt_pd_next_index := 1;
4757 ELSIF l_inf_tbl_data_next_rec.prd2 IS NOT NULL AND
4758 l_inf_tbl_data_next_rec.prd2 <> l_fnd_miss_num AND
4759 l_prd_start_date_tbl(2) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(2) - 1)) THEN
4760 l_fix_sc_amt_pd_next_index := 2;
4761 ELSIF l_inf_tbl_data_next_rec.prd3 IS NOT NULL AND
4762 l_inf_tbl_data_next_rec.prd3 <> l_fnd_miss_num AND
4763 l_prd_start_date_tbl(3) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(3) - 1)) THEN
4764 l_fix_sc_amt_pd_next_index := 3;
4765 ELSIF l_inf_tbl_data_next_rec.prd4 IS NOT NULL AND
4766 l_inf_tbl_data_next_rec.prd4 <> l_fnd_miss_num AND
4767 l_prd_start_date_tbl(4) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(4) - 1)) THEN
4768 l_fix_sc_amt_pd_next_index := 4;
4769 ELSIF l_inf_tbl_data_next_rec.prd5 IS NOT NULL AND
4770 l_inf_tbl_data_next_rec.prd5 <> l_fnd_miss_num AND
4771 l_prd_start_date_tbl(5) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(5) - 1)) THEN
4772 l_fix_sc_amt_pd_next_index := 5;
4773 ELSIF l_inf_tbl_data_next_rec.prd6 IS NOT NULL AND
4774 l_inf_tbl_data_next_rec.prd6 <> l_fnd_miss_num AND
4775 l_prd_start_date_tbl(6) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(6) - 1)) THEN
4776 l_fix_sc_amt_pd_next_index := 6;
4777 ELSIF l_inf_tbl_data_next_rec.prd7 IS NOT NULL AND
4778 l_inf_tbl_data_next_rec.prd7 <> l_fnd_miss_num AND
4779 l_prd_start_date_tbl(7) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(7) - 1)) THEN
4780 l_fix_sc_amt_pd_next_index := 7;
4781 ELSIF l_inf_tbl_data_next_rec.prd8 IS NOT NULL AND
4782 l_inf_tbl_data_next_rec.prd8 <> l_fnd_miss_num AND
4783 l_prd_start_date_tbl(8) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(8) - 1)) THEN
4784 l_fix_sc_amt_pd_next_index := 8;
4785 ELSIF l_inf_tbl_data_next_rec.prd9 IS NOT NULL AND
4786 l_inf_tbl_data_next_rec.prd9 <> l_fnd_miss_num AND
4787 l_prd_start_date_tbl(9) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(9) - 1)) THEN
4788 l_fix_sc_amt_pd_next_index := 9;
4789 ELSIF l_inf_tbl_data_next_rec.prd10 IS NOT NULL AND
4790 l_inf_tbl_data_next_rec.prd10 <> l_fnd_miss_num AND
4791 l_prd_start_date_tbl(10) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(10) - 1)) THEN
4792 l_fix_sc_amt_pd_next_index := 10;
4793 ELSIF l_inf_tbl_data_next_rec.prd11 IS NOT NULL AND
4794 l_inf_tbl_data_next_rec.prd11 <> l_fnd_miss_num AND
4795 l_prd_start_date_tbl(11) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(11) - 1)) THEN
4796 l_fix_sc_amt_pd_next_index := 11;
4797 ELSIF l_inf_tbl_data_next_rec.prd12 IS NOT NULL AND
4798 l_inf_tbl_data_next_rec.prd12 <> l_fnd_miss_num AND
4799 l_prd_start_date_tbl(12) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(12) - 1)) THEN
4800 l_fix_sc_amt_pd_next_index := 12;
4801 ELSIF l_inf_tbl_data_next_rec.prd13 IS NOT NULL AND
4802 l_inf_tbl_data_next_rec.prd13 <> l_fnd_miss_num AND
4803 l_prd_start_date_tbl(13) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(13) - 1)) THEN
4804 l_fix_sc_amt_pd_next_index := 13;
4805 ELSIF l_inf_tbl_data_next_rec.prd14 IS NOT NULL AND
4806 l_inf_tbl_data_next_rec.prd14 <> l_fnd_miss_num AND
4807 l_prd_start_date_tbl(14) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(14) - 1)) THEN
4808 l_fix_sc_amt_pd_next_index := 14;
4809 ELSIF l_inf_tbl_data_next_rec.prd15 IS NOT NULL AND
4810 l_inf_tbl_data_next_rec.prd15 <> l_fnd_miss_num AND
4811 l_prd_start_date_tbl(15) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(15) - 1)) THEN
4812 l_fix_sc_amt_pd_next_index := 15;
4813 ELSIF l_inf_tbl_data_next_rec.prd16 IS NOT NULL AND
4814 l_inf_tbl_data_next_rec.prd16 <> l_fnd_miss_num AND
4815 l_prd_start_date_tbl(16) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(16) - 1)) THEN
4816 l_fix_sc_amt_pd_next_index := 16;
4817 ELSIF l_inf_tbl_data_next_rec.prd17 IS NOT NULL AND
4818 l_inf_tbl_data_next_rec.prd17 <> l_fnd_miss_num AND
4819 l_prd_start_date_tbl(17) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(17) - 1)) THEN
4820 l_fix_sc_amt_pd_next_index := 17;
4821 ELSIF l_inf_tbl_data_next_rec.prd18 IS NOT NULL AND
4822 l_inf_tbl_data_next_rec.prd18 <> l_fnd_miss_num AND
4823 l_prd_start_date_tbl(18) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(18) - 1)) THEN
4824 l_fix_sc_amt_pd_next_index := 18;
4825 ELSIF l_inf_tbl_data_next_rec.prd19 IS NOT NULL AND
4826 l_inf_tbl_data_next_rec.prd19 <> l_fnd_miss_num AND
4827 l_prd_start_date_tbl(19) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(19) - 1)) THEN
4828 l_fix_sc_amt_pd_next_index := 19;
4829 ELSIF l_inf_tbl_data_next_rec.prd20 IS NOT NULL AND
4830 l_inf_tbl_data_next_rec.prd20 <> l_fnd_miss_num AND
4831 l_prd_start_date_tbl(20) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(20) - 1)) THEN
4832 l_fix_sc_amt_pd_next_index := 20;
4833 ELSIF l_inf_tbl_data_next_rec.prd21 IS NOT NULL AND
4834 l_inf_tbl_data_next_rec.prd21 <> l_fnd_miss_num AND
4835 l_prd_start_date_tbl(21) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(21) - 1)) THEN
4836 l_fix_sc_amt_pd_next_index := 21;
4837 ELSIF l_inf_tbl_data_next_rec.prd22 IS NOT NULL AND
4838 l_inf_tbl_data_next_rec.prd22 <> l_fnd_miss_num AND
4839 l_prd_start_date_tbl(22) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(22) - 1)) THEN
4840 l_fix_sc_amt_pd_next_index := 22;
4841 ELSIF l_inf_tbl_data_next_rec.prd23 IS NOT NULL AND
4842 l_inf_tbl_data_next_rec.prd23 <> l_fnd_miss_num AND
4843 l_prd_start_date_tbl(23) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(23) - 1)) THEN
4844 l_fix_sc_amt_pd_next_index := 23;
4845 ELSIF l_inf_tbl_data_next_rec.prd24 IS NOT NULL AND
4846 l_inf_tbl_data_next_rec.prd24 <> l_fnd_miss_num AND
4847 l_prd_start_date_tbl(24) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) THEN
4848 l_fix_sc_amt_pd_next_index := 24;
4849 ELSIF l_inf_tbl_data_next_rec.prd25 IS NOT NULL AND
4850 l_inf_tbl_data_next_rec.prd25 <> l_fnd_miss_num AND
4851 l_prd_start_date_tbl(25) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(25) - 1)) THEN
4852 l_fix_sc_amt_pd_next_index := 25;
4853 ELSIF l_inf_tbl_data_next_rec.prd26 IS NOT NULL AND
4854 l_inf_tbl_data_next_rec.prd26 <> l_fnd_miss_num AND
4855 l_prd_start_date_tbl(26) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(26) - 1)) THEN
4856 l_fix_sc_amt_pd_next_index := 26;
4857 ELSIF l_inf_tbl_data_next_rec.prd27 IS NOT NULL AND
4858 l_inf_tbl_data_next_rec.prd27 <> l_fnd_miss_num AND
4859 l_prd_start_date_tbl(27) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(27) - 1)) THEN
4860 l_fix_sc_amt_pd_next_index := 27;
4861 ELSIF l_inf_tbl_data_next_rec.prd28 IS NOT NULL AND
4862 l_inf_tbl_data_next_rec.prd28 <> l_fnd_miss_num AND
4863 l_prd_start_date_tbl(28) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(28) - 1)) THEN
4864 l_fix_sc_amt_pd_next_index := 28;
4865 ELSIF l_inf_tbl_data_next_rec.prd29 IS NOT NULL AND
4866 l_inf_tbl_data_next_rec.prd29 <> l_fnd_miss_num AND
4867 l_prd_start_date_tbl(29) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(29) - 1)) THEN
4868 l_fix_sc_amt_pd_next_index := 29;
4869 ELSIF l_inf_tbl_data_next_rec.prd30 IS NOT NULL AND
4870 l_inf_tbl_data_next_rec.prd30 <> l_fnd_miss_num AND
4871 l_prd_start_date_tbl(30) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(30) - 1)) THEN
4872 l_fix_sc_amt_pd_next_index := 30;
4873 ELSIF l_inf_tbl_data_next_rec.prd31 IS NOT NULL AND
4874 l_inf_tbl_data_next_rec.prd31 <> l_fnd_miss_num AND
4875 l_prd_start_date_tbl(31) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(31) - 1)) THEN
4876 l_fix_sc_amt_pd_next_index := 31;
4877 ELSIF l_inf_tbl_data_next_rec.prd32 IS NOT NULL AND
4878 l_inf_tbl_data_next_rec.prd32 <> l_fnd_miss_num AND
4879 l_prd_start_date_tbl(32) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(32) - 1)) THEN
4880 l_fix_sc_amt_pd_next_index := 32;
4881 ELSIF l_inf_tbl_data_next_rec.prd33 IS NOT NULL AND
4882 l_inf_tbl_data_next_rec.prd33 <> l_fnd_miss_num AND
4883 l_prd_start_date_tbl(33) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(33) - 1)) THEN
4884 l_fix_sc_amt_pd_next_index := 33;
4885 ELSIF l_inf_tbl_data_next_rec.prd34 IS NOT NULL AND
4886 l_inf_tbl_data_next_rec.prd34 <> l_fnd_miss_num AND
4887 l_prd_start_date_tbl(34) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(34) - 1)) THEN
4888 l_fix_sc_amt_pd_next_index := 34;
4889 ELSIF l_inf_tbl_data_next_rec.prd35 IS NOT NULL AND
4890 l_inf_tbl_data_next_rec.prd35 <> l_fnd_miss_num AND
4891 l_prd_start_date_tbl(35) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(35) - 1)) THEN
4892 l_fix_sc_amt_pd_next_index := 35;
4893 ELSIF l_inf_tbl_data_next_rec.prd36 IS NOT NULL AND
4894 l_inf_tbl_data_next_rec.prd36 <> l_fnd_miss_num AND
4895 l_prd_start_date_tbl(36) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(36) - 1)) THEN
4896 l_fix_sc_amt_pd_next_index := 36;
4897 ELSIF l_inf_tbl_data_next_rec.prd37 IS NOT NULL AND
4898 l_inf_tbl_data_next_rec.prd37 <> l_fnd_miss_num AND
4899 l_prd_start_date_tbl(37) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(37) - 1)) THEN
4900 l_fix_sc_amt_pd_next_index := 37;
4901 ELSIF l_inf_tbl_data_next_rec.prd38 IS NOT NULL AND
4902 l_inf_tbl_data_next_rec.prd38 <> l_fnd_miss_num AND
4903 l_prd_start_date_tbl(38) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(38) - 1)) THEN
4904 l_fix_sc_amt_pd_next_index := 38;
4905 ELSIF l_inf_tbl_data_next_rec.prd39 IS NOT NULL AND
4906 l_inf_tbl_data_next_rec.prd39 <> l_fnd_miss_num AND
4907 l_prd_start_date_tbl(39) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(39) - 1)) THEN
4908 l_fix_sc_amt_pd_next_index := 39;
4909 ELSIF l_inf_tbl_data_next_rec.prd40 IS NOT NULL AND
4910 l_inf_tbl_data_next_rec.prd40 <> l_fnd_miss_num AND
4911 l_prd_start_date_tbl(40) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(40) - 1)) THEN
4912 l_fix_sc_amt_pd_next_index := 40;
4913 ELSIF l_inf_tbl_data_next_rec.prd41 IS NOT NULL AND
4914 l_inf_tbl_data_next_rec.prd41 <> l_fnd_miss_num AND
4915 l_prd_start_date_tbl(41) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(41) - 1)) THEN
4916 l_fix_sc_amt_pd_next_index := 41;
4917 ELSIF l_inf_tbl_data_next_rec.prd42 IS NOT NULL AND
4918 l_inf_tbl_data_next_rec.prd42 <> l_fnd_miss_num AND
4919 l_prd_start_date_tbl(42) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(42) - 1)) THEN
4920 l_fix_sc_amt_pd_next_index := 42;
4921 ELSIF l_inf_tbl_data_next_rec.prd43 IS NOT NULL AND
4922 l_inf_tbl_data_next_rec.prd43 <> l_fnd_miss_num AND
4923 l_prd_start_date_tbl(43) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(43) - 1)) THEN
4924 l_fix_sc_amt_pd_next_index := 43;
4925 ELSIF l_inf_tbl_data_next_rec.prd44 IS NOT NULL AND
4926 l_inf_tbl_data_next_rec.prd44 <> l_fnd_miss_num AND
4927 l_prd_start_date_tbl(44) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(44) - 1)) THEN
4928 l_fix_sc_amt_pd_next_index := 44;
4929 ELSIF l_inf_tbl_data_next_rec.prd45 IS NOT NULL AND
4930 l_inf_tbl_data_next_rec.prd45 <> l_fnd_miss_num AND
4931 l_prd_start_date_tbl(45) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(45) - 1)) THEN
4932 l_fix_sc_amt_pd_next_index := 45;
4933 ELSIF l_inf_tbl_data_next_rec.prd46 IS NOT NULL AND
4934 l_inf_tbl_data_next_rec.prd46 <> l_fnd_miss_num AND
4935 l_prd_start_date_tbl(46) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(46) - 1)) THEN
4936 l_fix_sc_amt_pd_next_index := 46;
4937 ELSIF l_inf_tbl_data_next_rec.prd47 IS NOT NULL AND
4938 l_inf_tbl_data_next_rec.prd47 <> l_fnd_miss_num AND
4939 l_prd_start_date_tbl(47) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(47) - 1)) THEN
4940 l_fix_sc_amt_pd_next_index := 47;
4941 ELSIF l_inf_tbl_data_next_rec.prd48 IS NOT NULL AND
4942 l_inf_tbl_data_next_rec.prd48 <> l_fnd_miss_num AND
4943 l_prd_start_date_tbl(48) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(48) - 1)) THEN
4944 l_fix_sc_amt_pd_next_index := 48;
4945 ELSIF l_inf_tbl_data_next_rec.prd49 IS NOT NULL AND
4946 l_inf_tbl_data_next_rec.prd49 <> l_fnd_miss_num AND
4947 l_prd_start_date_tbl(49) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(49) - 1)) THEN
4948 l_fix_sc_amt_pd_next_index := 49;
4949 ELSIF l_inf_tbl_data_next_rec.prd50 IS NOT NULL AND
4950 l_inf_tbl_data_next_rec.prd50 <> l_fnd_miss_num AND
4951 l_prd_start_date_tbl(50) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(50) - 1)) THEN
4952 l_fix_sc_amt_pd_next_index := 50;
4953 ELSIF l_inf_tbl_data_next_rec.prd51 IS NOT NULL AND
4954 l_inf_tbl_data_next_rec.prd51 <> l_fnd_miss_num AND
4955 l_prd_start_date_tbl(51) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(51) - 1)) THEN
4956 l_fix_sc_amt_pd_next_index := 51;
4957 ELSIF l_inf_tbl_data_next_rec.prd52 IS NOT NULL AND
4958 l_inf_tbl_data_next_rec.prd52 <> l_fnd_miss_num AND
4959 l_prd_start_date_tbl(52) >= Nvl(l_etc_start_date, (l_prd_start_date_tbl(52) - 1)) THEN
4960 l_fix_sc_amt_pd_next_index := 52;
4961 END IF; -- period not null
4962 ELSE
4963 -- budget versions
4964 IF l_inf_tbl_data_next_rec.prd1 IS NOT NULL AND
4965 l_inf_tbl_data_next_rec.prd1 <> l_fnd_miss_num THEN
4966 l_fix_sc_amt_pd_next_index := 1;
4967 ELSIF l_inf_tbl_data_next_rec.prd2 IS NOT NULL AND
4968 l_inf_tbl_data_next_rec.prd2 <> l_fnd_miss_num THEN
4969 l_fix_sc_amt_pd_next_index := 2;
4970 ELSIF l_inf_tbl_data_next_rec.prd3 IS NOT NULL AND
4971 l_inf_tbl_data_next_rec.prd3 <> l_fnd_miss_num THEN
4972 l_fix_sc_amt_pd_next_index := 3;
4973 ELSIF l_inf_tbl_data_next_rec.prd4 IS NOT NULL AND
4974 l_inf_tbl_data_next_rec.prd4 <> l_fnd_miss_num THEN
4975 l_fix_sc_amt_pd_next_index := 4;
4976 ELSIF l_inf_tbl_data_next_rec.prd5 IS NOT NULL AND
4977 l_inf_tbl_data_next_rec.prd5 <> l_fnd_miss_num THEN
4978 l_fix_sc_amt_pd_next_index := 5;
4979 ELSIF l_inf_tbl_data_next_rec.prd6 IS NOT NULL AND
4980 l_inf_tbl_data_next_rec.prd6 <> l_fnd_miss_num THEN
4981 l_fix_sc_amt_pd_next_index := 6;
4982 ELSIF l_inf_tbl_data_next_rec.prd7 IS NOT NULL AND
4983 l_inf_tbl_data_next_rec.prd7 <> l_fnd_miss_num THEN
4984 l_fix_sc_amt_pd_next_index := 7;
4985 ELSIF l_inf_tbl_data_next_rec.prd8 IS NOT NULL AND
4986 l_inf_tbl_data_next_rec.prd8 <> l_fnd_miss_num THEN
4987 l_fix_sc_amt_pd_next_index := 8;
4988 ELSIF l_inf_tbl_data_next_rec.prd9 IS NOT NULL AND
4989 l_inf_tbl_data_next_rec.prd9 <> l_fnd_miss_num THEN
4990 l_fix_sc_amt_pd_next_index := 9;
4991 ELSIF l_inf_tbl_data_next_rec.prd10 IS NOT NULL AND
4992 l_inf_tbl_data_next_rec.prd10 <> l_fnd_miss_num THEN
4993 l_fix_sc_amt_pd_next_index := 10;
4994 ELSIF l_inf_tbl_data_next_rec.prd11 IS NOT NULL AND
4995 l_inf_tbl_data_next_rec.prd11 <> l_fnd_miss_num THEN
4996 l_fix_sc_amt_pd_next_index := 11;
4997 ELSIF l_inf_tbl_data_next_rec.prd12 IS NOT NULL AND
4998 l_inf_tbl_data_next_rec.prd12 <> l_fnd_miss_num THEN
4999 l_fix_sc_amt_pd_next_index := 12;
5000 ELSIF l_inf_tbl_data_next_rec.prd13 IS NOT NULL AND
5001 l_inf_tbl_data_next_rec.prd13 <> l_fnd_miss_num THEN
5002 l_fix_sc_amt_pd_next_index := 13;
5003 ELSIF l_inf_tbl_data_next_rec.prd14 IS NOT NULL AND
5004 l_inf_tbl_data_next_rec.prd14 <> l_fnd_miss_num THEN
5005 l_fix_sc_amt_pd_next_index := 14;
5006 ELSIF l_inf_tbl_data_next_rec.prd15 IS NOT NULL AND
5007 l_inf_tbl_data_next_rec.prd15 <> l_fnd_miss_num THEN
5008 l_fix_sc_amt_pd_next_index := 15;
5009 ELSIF l_inf_tbl_data_next_rec.prd16 IS NOT NULL AND
5010 l_inf_tbl_data_next_rec.prd16 <> l_fnd_miss_num THEN
5011 l_fix_sc_amt_pd_next_index := 16;
5012 ELSIF l_inf_tbl_data_next_rec.prd17 IS NOT NULL AND
5013 l_inf_tbl_data_next_rec.prd17 <> l_fnd_miss_num THEN
5014 l_fix_sc_amt_pd_next_index := 17;
5015 ELSIF l_inf_tbl_data_next_rec.prd18 IS NOT NULL AND
5016 l_inf_tbl_data_next_rec.prd18 <> l_fnd_miss_num THEN
5017 l_fix_sc_amt_pd_next_index := 18;
5018 ELSIF l_inf_tbl_data_next_rec.prd19 IS NOT NULL AND
5019 l_inf_tbl_data_next_rec.prd19 <> l_fnd_miss_num THEN
5020 l_fix_sc_amt_pd_next_index := 19;
5021 ELSIF l_inf_tbl_data_next_rec.prd20 IS NOT NULL AND
5022 l_inf_tbl_data_next_rec.prd20 <> l_fnd_miss_num THEN
5023 l_fix_sc_amt_pd_next_index := 20;
5024 ELSIF l_inf_tbl_data_next_rec.prd21 IS NOT NULL AND
5025 l_inf_tbl_data_next_rec.prd21 <> l_fnd_miss_num THEN
5026 l_fix_sc_amt_pd_next_index := 21;
5027 ELSIF l_inf_tbl_data_next_rec.prd22 IS NOT NULL AND
5028 l_inf_tbl_data_next_rec.prd22 <> l_fnd_miss_num THEN
5029 l_fix_sc_amt_pd_next_index := 22;
5030 ELSIF l_inf_tbl_data_next_rec.prd23 IS NOT NULL AND
5031 l_inf_tbl_data_next_rec.prd23 <> l_fnd_miss_num THEN
5032 l_fix_sc_amt_pd_next_index := 23;
5033 ELSIF l_inf_tbl_data_next_rec.prd24 IS NOT NULL AND
5034 l_inf_tbl_data_next_rec.prd24 <> l_fnd_miss_num THEN
5035 l_fix_sc_amt_pd_next_index := 24;
5036 ELSIF l_inf_tbl_data_next_rec.prd25 IS NOT NULL AND
5037 l_inf_tbl_data_next_rec.prd25 <> l_fnd_miss_num THEN
5038 l_fix_sc_amt_pd_next_index := 25;
5039 ELSIF l_inf_tbl_data_next_rec.prd26 IS NOT NULL AND
5040 l_inf_tbl_data_next_rec.prd26 <> l_fnd_miss_num THEN
5041 l_fix_sc_amt_pd_next_index := 26;
5042 ELSIF l_inf_tbl_data_next_rec.prd27 IS NOT NULL AND
5043 l_inf_tbl_data_next_rec.prd27 <> l_fnd_miss_num THEN
5044 l_fix_sc_amt_pd_next_index := 27;
5045 ELSIF l_inf_tbl_data_next_rec.prd28 IS NOT NULL AND
5046 l_inf_tbl_data_next_rec.prd28 <> l_fnd_miss_num THEN
5047 l_fix_sc_amt_pd_next_index := 28;
5048 ELSIF l_inf_tbl_data_next_rec.prd29 IS NOT NULL AND
5049 l_inf_tbl_data_next_rec.prd29 <> l_fnd_miss_num THEN
5050 l_fix_sc_amt_pd_next_index := 29;
5051 ELSIF l_inf_tbl_data_next_rec.prd30 IS NOT NULL AND
5052 l_inf_tbl_data_next_rec.prd30 <> l_fnd_miss_num THEN
5053 l_fix_sc_amt_pd_next_index := 30;
5054 ELSIF l_inf_tbl_data_next_rec.prd31 IS NOT NULL AND
5055 l_inf_tbl_data_next_rec.prd31 <> l_fnd_miss_num THEN
5056 l_fix_sc_amt_pd_next_index := 31;
5057 ELSIF l_inf_tbl_data_next_rec.prd32 IS NOT NULL AND
5058 l_inf_tbl_data_next_rec.prd32 <> l_fnd_miss_num THEN
5059 l_fix_sc_amt_pd_next_index := 32;
5060 ELSIF l_inf_tbl_data_next_rec.prd33 IS NOT NULL AND
5061 l_inf_tbl_data_next_rec.prd33 <> l_fnd_miss_num THEN
5062 l_fix_sc_amt_pd_next_index := 33;
5063 ELSIF l_inf_tbl_data_next_rec.prd34 IS NOT NULL AND
5064 l_inf_tbl_data_next_rec.prd34 <> l_fnd_miss_num THEN
5065 l_fix_sc_amt_pd_next_index := 34;
5066 ELSIF l_inf_tbl_data_next_rec.prd35 IS NOT NULL AND
5067 l_inf_tbl_data_next_rec.prd35 <> l_fnd_miss_num THEN
5068 l_fix_sc_amt_pd_next_index := 35;
5069 ELSIF l_inf_tbl_data_next_rec.prd36 IS NOT NULL AND
5070 l_inf_tbl_data_next_rec.prd36 <> l_fnd_miss_num THEN
5071 l_fix_sc_amt_pd_next_index := 36;
5072 ELSIF l_inf_tbl_data_next_rec.prd37 IS NOT NULL AND
5073 l_inf_tbl_data_next_rec.prd37 <> l_fnd_miss_num THEN
5074 l_fix_sc_amt_pd_next_index := 37;
5075 ELSIF l_inf_tbl_data_next_rec.prd38 IS NOT NULL AND
5076 l_inf_tbl_data_next_rec.prd38 <> l_fnd_miss_num THEN
5077 l_fix_sc_amt_pd_next_index := 38;
5078 ELSIF l_inf_tbl_data_next_rec.prd39 IS NOT NULL AND
5079 l_inf_tbl_data_next_rec.prd39 <> l_fnd_miss_num THEN
5080 l_fix_sc_amt_pd_next_index := 39;
5081 ELSIF l_inf_tbl_data_next_rec.prd40 IS NOT NULL AND
5082 l_inf_tbl_data_next_rec.prd40 <> l_fnd_miss_num THEN
5083 l_fix_sc_amt_pd_next_index := 40;
5084 ELSIF l_inf_tbl_data_next_rec.prd41 IS NOT NULL AND
5085 l_inf_tbl_data_next_rec.prd41 <> l_fnd_miss_num THEN
5086 l_fix_sc_amt_pd_next_index := 41;
5087 ELSIF l_inf_tbl_data_next_rec.prd42 IS NOT NULL AND
5088 l_inf_tbl_data_next_rec.prd42 <> l_fnd_miss_num THEN
5089 l_fix_sc_amt_pd_next_index := 42;
5090 ELSIF l_inf_tbl_data_next_rec.prd43 IS NOT NULL AND
5091 l_inf_tbl_data_next_rec.prd43 <> l_fnd_miss_num THEN
5092 l_fix_sc_amt_pd_next_index := 43;
5093 ELSIF l_inf_tbl_data_next_rec.prd44 IS NOT NULL AND
5094 l_inf_tbl_data_next_rec.prd44 <> l_fnd_miss_num THEN
5095 l_fix_sc_amt_pd_next_index := 44;
5096 ELSIF l_inf_tbl_data_next_rec.prd45 IS NOT NULL AND
5097 l_inf_tbl_data_next_rec.prd45 <> l_fnd_miss_num THEN
5098 l_fix_sc_amt_pd_next_index := 45;
5099 ELSIF l_inf_tbl_data_next_rec.prd46 IS NOT NULL AND
5100 l_inf_tbl_data_next_rec.prd46 <> l_fnd_miss_num THEN
5101 l_fix_sc_amt_pd_next_index := 46;
5102 ELSIF l_inf_tbl_data_next_rec.prd47 IS NOT NULL AND
5103 l_inf_tbl_data_next_rec.prd47 <> l_fnd_miss_num THEN
5104 l_fix_sc_amt_pd_next_index := 47;
5105 ELSIF l_inf_tbl_data_next_rec.prd48 IS NOT NULL AND
5106 l_inf_tbl_data_next_rec.prd48 <> l_fnd_miss_num THEN
5107 l_fix_sc_amt_pd_next_index := 48;
5108 ELSIF l_inf_tbl_data_next_rec.prd49 IS NOT NULL AND
5109 l_inf_tbl_data_next_rec.prd49 <> l_fnd_miss_num THEN
5110 l_fix_sc_amt_pd_next_index := 49;
5111 ELSIF l_inf_tbl_data_next_rec.prd50 IS NOT NULL AND
5112 l_inf_tbl_data_next_rec.prd50 <> l_fnd_miss_num THEN
5113 l_fix_sc_amt_pd_next_index := 50;
5114 ELSIF l_inf_tbl_data_next_rec.prd51 IS NOT NULL AND
5115 l_inf_tbl_data_next_rec.prd51 <> l_fnd_miss_num THEN
5116 l_fix_sc_amt_pd_next_index := 51;
5117 ELSIF l_inf_tbl_data_next_rec.prd52 IS NOT NULL AND
5118 l_inf_tbl_data_next_rec.prd52 <> l_fnd_miss_num THEN
5119 l_fix_sc_amt_pd_next_index := 52;
5120 END IF; -- period not null
5121 END IF;
5122 --log1('l_cached_ra_index is '||l_cached_ra_index);
5123 --log1('l_cached_ra_id_tbl(l_cached_ra_index) is '||l_cached_ra_id_tbl(l_cached_ra_index));
5124
5125 --log1('l_fix_sc_amt_pd_next_index is '||l_fix_sc_amt_pd_next_index);
5126 --log1('l_fix_sc_amt_pd_curr_index is '||l_fix_sc_amt_pd_curr_index);
5127 -- checking for existing RAs, the sp_fixed_date lies in the correct
5128 -- period where amounts have been entered
5129 IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
5130 l_cached_ra_id_tbl(l_cached_ra_index) <> -1 AND
5131 l_fix_sc_amt_pd_next_index IS NOT NULL THEN
5132 l_sp_fix_prd_st_dt := p_prd_start_date_tbl(l_fix_sc_amt_pd_next_index);
5133 l_sp_fix_prd_en_dt := p_prd_end_date_tbl(l_fix_sc_amt_pd_next_index);
5134
5135 --log1('l_sp_fix_prd_st_dt is '||l_sp_fix_prd_st_dt);
5136 --log1('l_sp_fix_prd_en_dt is '||l_sp_fix_prd_en_dt);
5137
5138 IF NOT (l_sp_fixed_date >= l_sp_fix_prd_st_dt AND
5139 l_sp_fix_prd_st_dt <= l_sp_fix_prd_en_dt) THEN
5140 l_err_val_code_tbl.extend(1);
5141 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
5142 l_err_task_id_tbl.extend(1);
5143 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_next_rec.task_id;
5144 l_err_rlm_id_tbl.extend(1);
5145 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_next_rec.resource_list_member_id;
5146 l_err_txn_curr_tbl.extend(1);
5147 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_next_rec.txn_currency_code;
5148 l_err_amt_type_tbl.extend(1);
5149 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_next_rec.amount_type_code;
5150
5151 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5152 END IF;
5153 END IF;
5154
5155 IF l_fix_sc_amt_pd_curr_index <> l_fix_sc_amt_pd_next_index THEN
5156 -- amount has been entred in a different period from the previous record
5157 l_err_val_code_tbl.extend(1);
5158 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_FX_SC_MUL_AMT_ERR';
5159 l_err_task_id_tbl.extend(1);
5160 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_next_rec.task_id;
5161 l_err_rlm_id_tbl.extend(1);
5162 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_next_rec.resource_list_member_id;
5163 l_err_txn_curr_tbl.extend(1);
5164 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_next_rec.txn_currency_code;
5165 l_err_amt_type_tbl.extend(1);
5166 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_next_rec.amount_type_code;
5167
5168 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5169 END IF;
5170 -- assigning the index of not null period of the next record to the current one
5171 l_fix_sc_amt_pd_curr_index := NVL(l_fix_sc_amt_pd_next_index,l_fix_sc_amt_pd_curr_index);
5172
5173 END IF;
5174
5175 END IF;
5176
5177 -- validation for UOM and other resource attributes, to check if they are same for all the rows,
5178 -- if the RA is same as well checking for planning start date/end date
5179 IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
5180 l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
5181 l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id AND
5182 (l_Cbs_Enabled = 'N' OR
5183 (l_Cbs_Enabled = 'Y' AND l_inf_tbl_data_curr_rec.cbs_element_id = l_inf_tbl_data_next_rec.cbs_element_id))-- cbs enhancement changes bug#16445106
5184 THEN
5185
5186
5187 -- checking for UOM
5188 IF l_inf_tbl_data_curr_rec.unit_of_measure <> l_inf_tbl_data_next_rec.unit_of_measure THEN
5189 l_err_val_code_tbl.extend(1);
5190 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_UOM_MISS_MATCH_ERR';
5191 l_err_task_id_tbl.extend(1);
5192 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5193 l_err_rlm_id_tbl.extend(1);
5194 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5195 l_err_txn_curr_tbl.extend(1);
5196 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5197 l_err_amt_type_tbl.extend(1);
5198 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5199
5200 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5201 END IF;
5202 -- checking for spread curve
5203 IF l_inf_tbl_data_curr_rec.spread_curve_name <> l_inf_tbl_data_next_rec.spread_curve_name THEN
5204 l_err_val_code_tbl.extend(1);
5205 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_SC_MISS_MATCH_ERR';
5206 l_err_task_id_tbl.extend(1);
5207 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5208 l_err_rlm_id_tbl.extend(1);
5209 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5210 l_err_txn_curr_tbl.extend(1);
5211 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5212 l_err_amt_type_tbl.extend(1);
5213 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5214
5215 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5216 END IF;
5217 -- checking for etc method
5218 IF l_inf_tbl_data_curr_rec.etc_method_name <> l_inf_tbl_data_next_rec.etc_method_name THEN
5219 l_err_val_code_tbl.extend(1);
5220 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_ETC_MISS_MATCH_ERR';
5221 l_err_task_id_tbl.extend(1);
5222 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5223 l_err_rlm_id_tbl.extend(1);
5224 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5225 l_err_txn_curr_tbl.extend(1);
5226 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5227 l_err_amt_type_tbl.extend(1);
5228 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5229
5230 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5231 END IF;
5232 -- checking for mfc cost type
5233 IF l_inf_tbl_data_curr_rec.mfc_cost_type_name <> l_inf_tbl_data_next_rec.mfc_cost_type_name THEN
5234 l_err_val_code_tbl.extend(1);
5235 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_MFC_MISS_MATCH_ERR';
5236 l_err_task_id_tbl.extend(1);
5237 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5238 l_err_rlm_id_tbl.extend(1);
5239 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5240 l_err_txn_curr_tbl.extend(1);
5241 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5242 l_err_amt_type_tbl.extend(1);
5243 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5244
5245 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5246 END IF;
5247 /* commenting out this code block as its not required to check now
5248
5249 -- checking if the planning start date and end dates are same across same RA
5250 IF l_inf_tbl_data_curr_rec.planning_start_date <> l_inf_tbl_data_next_rec.planning_start_date THEN
5251 l_err_val_code_tbl.extend(1);
5252 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_ST_DT_MISS_MATCH';
5253 l_err_task_id_tbl.extend(1);
5254 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5255 l_err_rlm_id_tbl.extend(1);
5256 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5257 l_err_txn_curr_tbl.extend(1);
5258 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5259 l_err_amt_type_tbl.extend(1);
5260 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5261
5262 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5263 END IF;
5264 IF l_inf_tbl_data_curr_rec.planning_end_date <> l_inf_tbl_data_next_rec.planning_end_date THEN
5265 l_err_val_code_tbl.extend(1);
5266 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_EN_DT_MISS_MATCH';
5267 l_err_task_id_tbl.extend(1);
5268 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5269 l_err_rlm_id_tbl.extend(1);
5270 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5271 l_err_txn_curr_tbl.extend(1);
5272 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5273 l_err_amt_type_tbl.extend(1);
5274 l_err_amt_type_tbl(l_err_amt_type_tbl.COUNT) := l_inf_tbl_data_curr_rec.amount_type_code;
5275
5276 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5277 END IF;
5278 */
5279 END IF; -- same task and resource
5280
5281 ELSE -- non periodic
5282 --log1('----- STAGE 19.2-------');
5283 IF l_cached_ra_id_tbl.EXISTS(l_cached_ra_index) AND
5284 l_cached_ra_id_tbl(l_cached_ra_index) = -1 THEN
5285 IF l_plan_start_date IS NULL AND
5286 l_plan_end_date IS NOT NULL THEN
5287 l_err_val_code_tbl.extend(1);
5288 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_ST_DT_MISS_ERR';
5289 l_err_task_id_tbl.extend(1);
5290 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5291 l_err_rlm_id_tbl.extend(1);
5292 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5293 l_err_txn_curr_tbl.extend(1);
5294 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5295 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
5296 ELSIF l_plan_start_date IS NOT NULL AND
5297 l_plan_end_date IS NULL THEN
5298 l_err_val_code_tbl.extend(1);
5299 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_END_DT_MISS_ERR';
5300 l_err_task_id_tbl.extend(1);
5301 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5302 l_err_rlm_id_tbl.extend(1);
5303 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5304 l_err_txn_curr_tbl.extend(1);
5305 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5306 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
5307 END IF; -- planning dates null
5308 END IF;
5309
5310 --log1('----- STAGE 19.3-------');
5311 -- checking if the sp fixed date is within planning start/end date
5312 IF (l_plan_start_date > Nvl(l_sp_fixed_date, (l_plan_start_date + 1)))OR
5313 (l_plan_end_date < Nvl(l_sp_fixed_date, (l_plan_end_date - 1))) THEN
5314 l_err_val_code_tbl.extend(1);
5315 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_SP_FX_DT_OUT_RANGE';
5316 l_err_task_id_tbl.extend(1);
5317 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5318 l_err_rlm_id_tbl.extend(1);
5319 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5320 l_err_txn_curr_tbl.extend(1);
5321 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5322 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; /* to skip processing for the current record */
5323 END IF;
5324
5325 --log1('----- STAGE 19.4-------');
5326 -- validation for UOM and other resource attributes, to check if they are same for all the rows,
5327 -- if the RA is same
5328 IF l_inf_tbl_data_next_rec.task_id IS NOT NULL AND
5329 l_inf_tbl_data_curr_rec.task_id = l_inf_tbl_data_next_rec.task_id AND
5330 l_inf_tbl_data_curr_rec.resource_list_member_id = l_inf_tbl_data_next_rec.resource_list_member_id AND
5331 (l_Cbs_Enabled = 'N' OR
5332 (l_Cbs_Enabled = 'Y' AND l_inf_tbl_data_curr_rec.cbs_element_id = l_inf_tbl_data_next_rec.cbs_element_id))-- cbs enhancement changes bug#16445106
5333 THEN
5334 -- checking for UOM
5335 IF l_inf_tbl_data_curr_rec.unit_of_measure <> l_inf_tbl_data_next_rec.unit_of_measure THEN
5336 l_err_val_code_tbl.extend(1);
5337 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_UOM_MISS_MATCH_ERR';
5338 l_err_task_id_tbl.extend(1);
5339 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5340 l_err_rlm_id_tbl.extend(1);
5341 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5342 l_err_txn_curr_tbl.extend(1);
5343 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5344
5345 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5346 END IF;
5347 -- checking for spread curve name
5348 IF l_inf_tbl_data_curr_rec.spread_curve_name <> l_inf_tbl_data_next_rec.spread_curve_name THEN
5349 l_err_val_code_tbl.extend(1);
5350 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_SC_MISS_MATCH_ERR';
5351 l_err_task_id_tbl.extend(1);
5352 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5353 l_err_rlm_id_tbl.extend(1);
5354 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5355 l_err_txn_curr_tbl.extend(1);
5356 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5357
5358 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5359 END IF;
5360 -- checking for etc method name
5361 IF l_inf_tbl_data_curr_rec.etc_method_name <> l_inf_tbl_data_next_rec.etc_method_name THEN
5362 l_err_val_code_tbl.extend(1);
5363 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_ETC_MISS_MATCH_ERR';
5364 l_err_task_id_tbl.extend(1);
5365 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5366 l_err_rlm_id_tbl.extend(1);
5367 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5368 l_err_txn_curr_tbl.extend(1);
5369 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5370
5371 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5372 END IF;
5373 -- checking for mfc cost type name
5374 IF l_inf_tbl_data_curr_rec.mfc_cost_type_name <> l_inf_tbl_data_next_rec.mfc_cost_type_name THEN
5375 l_err_val_code_tbl.extend(1);
5376 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_MFC_MISS_MATCH_ERR';
5377 l_err_task_id_tbl.extend(1);
5378 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5379 l_err_rlm_id_tbl.extend(1);
5380 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5381 l_err_txn_curr_tbl.extend(1);
5382 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5383
5384 RAISE Fp_Webadi_Skip_Next_Rec_Exc; /* to skip processing for the current record */
5385 END IF;
5386
5387 /* commenting out this code block as its not required to check now
5388 -- checking if the planning start date and end dates are same across same RA
5389 IF l_inf_tbl_data_curr_rec.planning_start_date <> l_inf_tbl_data_next_rec.planning_start_date THEN
5390 l_err_val_code_tbl.extend(1);
5391 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_ST_DT_MISS_MATCH';
5392 l_err_task_id_tbl.extend(1);
5393 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5394 l_err_rlm_id_tbl.extend(1);
5395 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5396 l_err_txn_curr_tbl.extend(1);
5397 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5398
5399 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5400 END IF;
5401 IF l_inf_tbl_data_curr_rec.planning_end_date <> l_inf_tbl_data_next_rec.planning_end_date THEN
5402 l_err_val_code_tbl.extend(1);
5403 l_err_val_code_tbl(l_err_val_code_tbl.COUNT) := 'PA_FP_WA_PLAN_EN_DT_MISS_MATCH';
5404 l_err_task_id_tbl.extend(1);
5405 l_err_task_id_tbl(l_err_task_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.task_id;
5406 l_err_rlm_id_tbl.extend(1);
5407 l_err_rlm_id_tbl(l_err_rlm_id_tbl.COUNT) := l_inf_tbl_data_curr_rec.resource_list_member_id;
5408 l_err_txn_curr_tbl.extend(1);
5409 l_err_txn_curr_tbl(l_err_txn_curr_tbl.COUNT) := l_inf_tbl_data_curr_rec.txn_currency_code;
5410
5411 RAISE Fp_Webadi_Skip_Rec_Proc_Exc; -- to skip processing for the current record
5412 END IF;
5413 */
5414 END IF; -- same task and resource
5415 --log1('----- STAGE 19.5-------');
5416
5417 END IF; -- non periodic
5418
5419 IF l_plan_trans_attr_copied_flag = 'N' THEN
5420 --log1('----- STAGE 101-------');
5421 -- populating an indicator to be passed to validate_budget_lines for the record
5422 l_delete_flag := 'Y';
5423 ELSE
5424 --log1('----- STAGE 102-------');
5425 l_delete_flag := 'N';
5426 END IF;
5427
5428 IF is_periodic_setup = 'Y' THEN
5429 --log1('----- STAGE 103-------');
5430 IF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_RAW_COST' THEN
5431 l_raw_cost := l_tmp_sum_amt;
5432 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_RAW_COST' THEN
5433 l_raw_cost := l_tmp_sum_amt;
5434 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_RAW_COST' THEN
5435 l_etc_raw_cost := l_tmp_sum_amt;
5436 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_BURDENED_COST' THEN
5437 l_burdened_cost := l_tmp_sum_amt;
5438 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_BURDENED_COST' THEN
5439 l_burdened_cost := l_tmp_sum_amt;
5440 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_BURDENED_COST' THEN
5441 l_etc_burdened_cost := l_tmp_sum_amt;
5442 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_REV' THEN
5443 l_revenue := l_tmp_sum_amt;
5444 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_REVENUE' THEN
5445 l_revenue := l_tmp_sum_amt;
5446 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_REVENUE' THEN
5447 l_etc_revenue := l_tmp_sum_amt;
5448 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'TOTAL_QTY' THEN
5449 l_quantity := l_tmp_sum_amt;
5450 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'FCST_QTY' THEN
5451 l_quantity := l_tmp_sum_amt;
5452 ELSIF l_inf_tbl_data_curr_rec.amount_type_code = 'ETC_QTY' THEN
5453 l_etc_quantity := l_tmp_sum_amt;
5454 ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') THEN
5455 l_rc_rate := l_tmp_sum_amt;
5456 ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('ETC_BURDENED_COST_RATE','BURDENED_COST_RATE') THEN
5457 l_bc_rate := l_tmp_sum_amt;
5458 ELSIF l_inf_tbl_data_curr_rec.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') THEN
5459 l_bill_rate := l_tmp_sum_amt;
5460 END IF;
5461 ELSE
5462 --log1('----- STAGE 104-------');
5463 IF l_debug_mode = 'Y' THEN
5464 pa_debug.g_err_stage := 'Opening Cursor non_prd_lyt_null_val_cur';
5465 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5466 END IF;
5467 OPEN non_prd_lyt_null_val_cur( l_inf_tbl_data_curr_rec.budget_version_id,
5468 l_inf_tbl_data_curr_rec.task_id,
5469 l_inf_tbl_data_curr_rec.resource_list_member_id,
5470 l_inf_tbl_data_curr_rec.cbs_element_id,
5471 l_inf_tbl_data_curr_rec.txn_currency_code);
5472 FETCH non_prd_lyt_null_val_cur INTO
5473 l_ratxn_total_quantity,
5474 l_ratxn_total_raw_cost,
5475 l_ratxn_total_burdened_cost,
5476 l_ratxn_total_revenue,
5477 l_ratxn_etc_quantity,
5478 l_ratxn_etc_raw_cost,
5479 l_ratxn_etc_burdened_cost,
5480 l_ratxn_etc_revenue,
5481 l_ratxn_raw_cost_over_rate,
5482 l_ratxn_burden_cost_over_rate,
5483 l_ratxn_bill_over_rate,
5484 l_ra_rate_based_flag;
5485 CLOSE non_prd_lyt_null_val_cur;
5486 IF l_debug_mode = 'Y' THEN
5487 pa_debug.g_err_stage := 'l_ratxn_total_quantity' || l_ratxn_total_quantity;
5488 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5489 pa_debug.g_err_stage := 'l_ratxn_total_raw_cost' || l_ratxn_total_raw_cost;
5490 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5491 pa_debug.g_err_stage := 'l_ratxn_total_burdened_cost' || l_ratxn_total_burdened_cost;
5492 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5493 pa_debug.g_err_stage := 'l_ratxn_etc_quantity' || l_ratxn_etc_quantity;
5494 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5495 pa_debug.g_err_stage := 'l_ratxn_etc_raw_cost' || l_ratxn_etc_raw_cost;
5496 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5497 pa_debug.g_err_stage := 'l_ratxn_etc_burdened_cost' || l_ratxn_etc_burdened_cost;
5498 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5499 pa_debug.g_err_stage := 'l_ratxn_etc_revenue' || l_ratxn_etc_revenue;
5500 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5501 pa_debug.g_err_stage := 'l_ratxn_etc_revenue' || l_ratxn_etc_revenue;
5502 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5503 pa_debug.g_err_stage := 'l_ratxn_bill_over_rate' || l_ratxn_bill_over_rate;
5504 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5505 pa_debug.g_err_stage := 'l_ra_rate_based_flag' || l_ra_rate_based_flag;
5506 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5507 END IF;
5508
5509
5510 IF l_ratxn_total_quantity IS NULL AND (l_inf_tbl_data_curr_rec.quantity = l_fnd_miss_num) THEN
5511 l_quantity := NULL;
5512 ELSE
5513 l_quantity := l_inf_tbl_data_curr_rec.quantity;
5514 END IF;
5515 IF l_ratxn_total_raw_cost IS NULL AND (l_inf_tbl_data_curr_rec.raw_cost = l_fnd_miss_num) THEN
5516 l_raw_cost := NULL;
5517 ELSE
5518 l_raw_cost := l_inf_tbl_data_curr_rec.raw_cost;
5519 END IF;
5520 IF l_ratxn_total_burdened_cost IS NULL AND (l_inf_tbl_data_curr_rec.burdened_cost = l_fnd_miss_num) THEN
5521 l_burdened_cost := NULL;
5522 ELSE
5523 l_burdened_cost := l_inf_tbl_data_curr_rec.burdened_cost;
5524 END IF;
5525 IF l_ratxn_total_revenue IS NULL AND (l_inf_tbl_data_curr_rec.revenue = l_fnd_miss_num) THEN
5526 l_revenue := NULL;
5527 ELSE
5528 l_revenue := l_inf_tbl_data_curr_rec.revenue;
5529 END IF;
5530 IF l_ratxn_etc_quantity IS NULL AND (l_inf_tbl_data_curr_rec.etc_quantity = l_fnd_miss_num) THEN
5531 l_etc_quantity := NULL;
5532 ELSE
5533 l_etc_quantity := l_inf_tbl_data_curr_rec.etc_quantity;
5534 END IF;
5535 IF l_ratxn_etc_raw_cost IS NULL AND (l_inf_tbl_data_curr_rec.etc_raw_cost = l_fnd_miss_num) THEN
5536 l_etc_raw_cost := NULL;
5537 ELSE
5538 l_etc_raw_cost := l_inf_tbl_data_curr_rec.etc_raw_cost;
5539 END IF;
5540 IF l_ratxn_etc_burdened_cost IS NULL AND (l_inf_tbl_data_curr_rec.etc_burdened_cost = l_fnd_miss_num) THEN
5541 l_etc_burdened_cost := NULL;
5542 ELSE
5543 l_etc_burdened_cost := l_inf_tbl_data_curr_rec.etc_burdened_cost;
5544 END IF;
5545 IF l_ratxn_etc_revenue IS NULL AND (l_inf_tbl_data_curr_rec.etc_revenue = l_fnd_miss_num) THEN
5546 l_etc_revenue := NULL;
5547 ELSE
5548 l_etc_revenue := l_inf_tbl_data_curr_rec.etc_revenue;
5549 END IF;
5550 /* Bug 5068203 : Changes are made to the override rates so that the override rates
5551 will be calculated as NULL instead of g_miss_num for a resource assignment
5552 with rate_based_flag as 'N' and has value for override rates in new entity
5553 and has no changes in Excel while uploaded from Excel with Non-Periodic layout.
5554 */
5555 IF l_ra_rate_based_flag = 'Y' THEN
5556 IF l_ratxn_raw_cost_over_rate IS NULL AND (l_inf_tbl_data_curr_rec.raw_cost_rate = l_fnd_miss_num) THEN
5557 l_rc_rate := NULL;
5558 ELSE
5559 l_rc_rate := l_inf_tbl_data_curr_rec.raw_cost_rate;
5560 END IF;
5561 ELSE
5562 IF l_inf_tbl_data_curr_rec.quantity = l_fnd_miss_num AND (l_inf_tbl_data_curr_rec.etc_quantity IS NULL OR l_inf_tbl_data_curr_rec.etc_quantity = l_fnd_miss_num) THEN
5563 l_rc_rate := NULL;
5564 ELSIF l_inf_tbl_data_curr_rec.raw_cost_rate = l_fnd_miss_num THEN
5565 l_rc_rate := NULL;
5566 ELSE
5567 l_rc_rate := l_inf_tbl_data_curr_rec.raw_cost_rate;
5568 END IF;
5569 END IF;
5570
5571 IF l_ra_rate_based_flag = 'Y' THEN
5572 IF l_ratxn_burden_cost_over_rate IS NULL AND (l_inf_tbl_data_curr_rec.burdened_cost_rate = l_fnd_miss_num) THEN
5573 l_bc_rate := NULL;
5574 ELSE
5575 l_bc_rate := l_inf_tbl_data_curr_rec.burdened_cost_rate;
5576 END IF;
5577 ELSE
5578 IF l_inf_tbl_data_curr_rec.quantity = l_fnd_miss_num AND (l_inf_tbl_data_curr_rec.etc_quantity IS NULL OR l_inf_tbl_data_curr_rec.etc_quantity = l_fnd_miss_num) THEN
5579 l_bc_rate := NULL;
5580 ELSIF l_inf_tbl_data_curr_rec.burdened_cost_rate = l_fnd_miss_num THEN
5581 l_bc_rate := NULL;
5582 ELSE
5583 l_bc_rate := l_inf_tbl_data_curr_rec.burdened_cost_rate;
5584 END IF;
5585 END IF;
5586
5587 IF l_ra_rate_based_flag = 'Y' THEN
5588 IF l_ratxn_bill_over_rate IS NULL AND (l_inf_tbl_data_curr_rec.bill_rate = l_fnd_miss_num) THEN
5589 l_bill_rate := NULL;
5590 ELSE
5591 l_bill_rate := l_inf_tbl_data_curr_rec.bill_rate;
5592 END IF;
5593 ELSE
5594 IF l_inf_tbl_data_curr_rec.quantity = l_fnd_miss_num AND (l_inf_tbl_data_curr_rec.etc_quantity IS NULL OR l_inf_tbl_data_curr_rec.etc_quantity = l_fnd_miss_num) THEN
5595 l_bill_rate := NULL;
5596 ELSIF l_inf_tbl_data_curr_rec.bill_rate = l_fnd_miss_num THEN
5597 l_bill_rate := NULL;
5598 ELSE
5599 l_bill_rate := l_inf_tbl_data_curr_rec.bill_rate;
5600 END IF;
5601 END IF;
5602
5603 /* l_raw_cost := l_inf_tbl_data_curr_rec.raw_cost;
5604 l_burdened_cost := l_inf_tbl_data_curr_rec.burdened_cost;
5605 l_revenue := l_inf_tbl_data_curr_rec.revenue;
5606 l_quantity := l_inf_tbl_data_curr_rec.quantity;
5607 l_etc_quantity := l_inf_tbl_data_curr_rec.etc_quantity;
5608 l_etc_raw_cost := l_inf_tbl_data_curr_rec.etc_raw_cost;
5609 l_etc_burdened_cost := l_inf_tbl_data_curr_rec.etc_burdened_cost;
5610 l_etc_revenue := l_inf_tbl_data_curr_rec.etc_revenue;
5611
5612 l_rc_rate := l_inf_tbl_data_curr_rec.raw_cost_rate;
5613 l_bc_rate := l_inf_tbl_data_curr_rec.burdened_cost_rate;
5614 l_bill_rate := l_inf_tbl_data_curr_rec.bill_rate; */
5615 END IF;
5616
5617 -- initializing the min and max budget line dates
5618 IF l_min_bdgt_line_start_date IS NULL THEN
5619 l_min_bdgt_line_start_date:=l_bdgt_line_start_date;
5620 ELSIF l_bdgt_line_start_date IS NOT NULL AND l_bdgt_line_start_date < l_min_bdgt_line_start_date THEN
5621 l_min_bdgt_line_start_date:=l_bdgt_line_start_date;
5622 END IF;
5623
5624 IF l_max_bdgt_line_end_date IS NULL THEN
5625 l_max_bdgt_line_end_date:=l_bdgt_line_end_date;
5626 ELSIF l_bdgt_line_end_date IS NOT NULL AND l_bdgt_line_end_date > l_max_bdgt_line_end_date THEN
5627 l_max_bdgt_line_end_date:=l_bdgt_line_end_date;
5628 END IF;
5629
5630 --log1('----- STAGE 105-------');
5631 --Prepare the pl/sql tbls to be passed to validate_budget_lines API for each
5632 --planning transaction
5633 --DEBUG_NS('l_inf_tbl_data_curr_rec.task_id :: ' ||l_inf_tbl_data_curr_rec.task_id);
5634 --DEBUG_NS('l_inf_tbl_data_curr_rec.txn_currency_code :: ' ||l_inf_tbl_data_curr_rec.txn_currency_code);
5635 --DEBUG_NS('l_inf_tbl_data_curr_rec.resource_list_member_id :: ' ||l_inf_tbl_data_curr_rec.resource_list_member_id);
5636 --DEBUG_NS('l_inf_tbl_data_curr_rec.cbs_element_id :: ' ||l_inf_tbl_data_curr_rec.cbs_element_id);
5637
5638 --DEBUG_NS('l_inf_tbl_data_next_rec.task_id :: ' ||l_inf_tbl_data_next_rec.task_id);
5639 --DEBUG_NS('l_inf_tbl_data_next_rec.txn_currency_code :: ' ||l_inf_tbl_data_next_rec.txn_currency_code);
5640 --DEBUG_NS('l_inf_tbl_data_next_rec.resource_list_member_id :: ' ||l_inf_tbl_data_next_rec.resource_list_member_id);
5641 --DEBUG_NS('l_inf_tbl_data_next_rec.cbs_element_id :: ' ||l_inf_tbl_data_next_rec.cbs_element_id);
5642
5643 IF l_inf_tbl_data_next_rec.task_id IS NULL OR
5644 Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_curr_rec.txn_currency_code, '-99') OR
5645 l_inf_tbl_data_next_rec.task_id <> l_inf_tbl_data_curr_rec.task_id OR
5646 l_inf_tbl_data_next_rec.resource_list_member_id <> l_inf_tbl_data_curr_rec.resource_list_member_id OR
5647 ((l_Cbs_Enabled = 'Y' and
5648 l_inf_tbl_data_curr_rec.cbs_element_id <> l_inf_tbl_data_next_rec.cbs_element_id) OR l_Cbs_Enabled = 'N')-- cbs enhancement changes bug#16445106
5649 THEN
5650
5651 l_budget_line_in_out_tbl(bl_count).pa_task_id := l_inf_tbl_data_curr_rec.task_id;
5652 l_budget_line_in_out_tbl(bl_count).resource_list_member_id := l_inf_tbl_data_curr_rec.resource_list_member_id;
5653
5654 l_budget_line_in_out_tbl(bl_count).cbs_element_id := l_inf_tbl_data_curr_rec.cbs_element_id;-- cbs enhancement changes bug#16445106
5655
5656 l_budget_line_in_out_tbl(bl_count).budget_start_date := l_min_bdgt_line_start_date;
5657 l_budget_line_in_out_tbl(bl_count).budget_end_date := l_max_bdgt_line_end_date;
5658
5659 l_budget_line_in_out_tbl(bl_count).raw_cost := l_raw_cost;
5660 l_budget_line_in_out_tbl(bl_count).burdened_cost := l_burdened_cost;
5661 l_budget_line_in_out_tbl(bl_count).revenue := l_revenue;
5662 l_budget_line_in_out_tbl(bl_count).quantity := l_quantity;
5663
5664 x_etc_quantity_tbl.extend;
5665 x_etc_raw_cost_tbl.extend;
5666 x_etc_burdened_cost_tbl.extend;
5667 x_etc_revenue_tbl.extend;
5668 x_etc_quantity_tbl(x_etc_quantity_tbl.COUNT):=l_etc_quantity;
5669 x_etc_raw_cost_tbl(x_etc_raw_cost_tbl.COUNT):=l_etc_raw_cost;
5670 x_etc_burdened_cost_tbl(x_etc_burdened_cost_tbl.COUNT):=l_etc_burdened_cost;
5671 x_etc_revenue_tbl(x_etc_revenue_tbl.COUNT):=l_etc_revenue;
5672
5673 --log1('--txn_currency_code-----' || l_inf_tbl_data_curr_rec.txn_currency_code);
5674 l_budget_line_in_out_tbl(bl_count).txn_currency_code := l_inf_tbl_data_curr_rec.txn_currency_code;
5675
5676 l_budget_line_in_out_tbl(bl_count).description := l_bdgt_ln_tbl_description;
5677
5678 l_delete_flag_tbl.EXTEND(1);
5679 l_delete_flag_tbl(bl_count) := l_delete_flag;
5680
5681 --log1('----- STAGE 113-------');
5682 IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' THEN
5683 --log1('----- STAGE 114-------');
5684 l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_type := l_projfunc_cost_rate_type;
5685 l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date_type := l_projfunc_cost_rate_date_type;
5686 l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date := l_projfunc_cost_rate_date;
5687 l_budget_line_in_out_tbl(bl_count).projfunc_cost_exchange_rate := l_projfunc_cost_exchange_rate;
5688 l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_type := l_projfunc_rev_rate_type;
5689 l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date_type := l_projfunc_rev_rate_date_type;
5690 l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date := l_projfunc_rev_rate_date;
5691 l_budget_line_in_out_tbl(bl_count).projfunc_rev_exchange_rate := l_projfunc_rev_exchange_rate;
5692 l_budget_line_in_out_tbl(bl_count).project_cost_rate_type := l_project_cost_rate_type;
5693 l_budget_line_in_out_tbl(bl_count).project_cost_rate_date_type := l_project_cost_rate_date_type;
5694 l_budget_line_in_out_tbl(bl_count).project_cost_rate_date := l_project_cost_rate_date;
5695 l_budget_line_in_out_tbl(bl_count).project_cost_exchange_rate := l_project_cost_exchange_rate;
5696 l_budget_line_in_out_tbl(bl_count).project_rev_rate_type := l_project_rev_rate_type;
5697 l_budget_line_in_out_tbl(bl_count).project_rev_rate_date_type := l_project_rev_rate_date_type;
5698 l_budget_line_in_out_tbl(bl_count).project_rev_rate_date := l_project_rev_rate_date;
5699 l_budget_line_in_out_tbl(bl_count).project_rev_exchange_rate := l_project_rev_exchange_rate;
5700 ELSE
5701 l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_type := null;
5702 l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date_type := null;
5703 l_budget_line_in_out_tbl(bl_count).projfunc_cost_rate_date := null;
5704 l_budget_line_in_out_tbl(bl_count).projfunc_cost_exchange_rate := null;
5705 l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_type := null;
5706 l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date_type := null;
5707 l_budget_line_in_out_tbl(bl_count).projfunc_rev_rate_date := null;
5708 l_budget_line_in_out_tbl(bl_count).projfunc_rev_exchange_rate := null;
5709 l_budget_line_in_out_tbl(bl_count).project_cost_rate_type := null;
5710 l_budget_line_in_out_tbl(bl_count).project_cost_rate_date_type := null;
5711 l_budget_line_in_out_tbl(bl_count).project_cost_rate_date := null;
5712 l_budget_line_in_out_tbl(bl_count).project_cost_exchange_rate := null;
5713 l_budget_line_in_out_tbl(bl_count).project_rev_rate_type := null;
5714 l_budget_line_in_out_tbl(bl_count).project_rev_rate_date_type := null;
5715 l_budget_line_in_out_tbl(bl_count).project_rev_rate_date := null;
5716 l_budget_line_in_out_tbl(bl_count).project_rev_exchange_rate := null;
5717 END IF;
5718
5719 l_budget_line_in_out_tbl(bl_count).change_reason_code := l_change_reason_code;
5720
5721 -- populating other parameters to be passed to validate_budget_lines
5722 l_rc_rate_tbl.EXTEND(1);
5723 l_rc_rate_tbl(bl_count) := l_rc_rate;
5724 l_bc_rate_tbl.EXTEND(1);
5725 l_bc_rate_tbl(bl_count) := l_bc_rate;
5726 l_bill_rate_tbl.EXTEND(1);
5727 l_bill_rate_tbl(bl_count) := l_bill_rate;
5728
5729 l_plan_start_date_tbl.extend(1);
5730 l_plan_start_date_tbl(bl_count) := l_plan_start_date;
5731 l_plan_end_date_tbl.extend(1);
5732 l_plan_end_date_tbl(bl_count) := l_plan_end_date;
5733
5734 -- passing null for all the resource attributes as they are meant to be read-only
5735 l_uom_tbl.extend(1);
5736 l_uom_tbl(bl_count) := null;
5737 l_spread_curve_name_tbl.extend(1);
5738 l_spread_curve_name_tbl(bl_count) := null;
5739 l_etc_method_code_tbl.extend(1);
5740 l_etc_method_code_tbl(bl_count) := null;
5741 l_mfc_cost_type_name_tbl.extend(1);
5742 l_mfc_cost_type_name_tbl(bl_count) := null;
5743
5744 l_sp_fixed_date_tbl.extend(1);
5745 l_sp_fixed_date_tbl(bl_count) := l_sp_fixed_date;
5746
5747 -- populating the spread curve id obtained in the out table
5748 l_spread_curve_id_tbl.EXTEND(1);
5749 l_spread_curve_id_tbl(bl_count) := l_spread_curve_id;
5750
5751 -- deriving the min and max of the budget line start/end dates
5752 IF l_min_ra_plan_start_date IS NULL THEN
5753
5754 l_min_ra_plan_start_date := l_min_bdgt_line_start_date;
5755
5756 ELSIF l_min_bdgt_line_start_date IS NOT NULL AND
5757 l_min_bdgt_line_start_date < l_min_ra_plan_start_date THEN
5758
5759 l_min_ra_plan_start_date := l_min_bdgt_line_start_date;
5760
5761 END IF;
5762
5763 IF l_max_ra_plan_end_date IS NULL THEN
5764
5765 l_max_ra_plan_end_date := l_max_bdgt_line_end_date;
5766
5767 ELSIF l_max_bdgt_line_end_date IS NOT NULL AND
5768 l_max_bdgt_line_end_date > l_max_ra_plan_end_date THEN
5769
5770 l_max_ra_plan_end_date := l_max_bdgt_line_end_date;
5771
5772 END IF;
5773
5774 -- populating other out variables
5775 l_ra_id_tbl.EXTEND(1);
5776 l_ra_id_tbl(bl_count) := l_ra_id;
5777 l_res_class_code_tbl.EXTEND(1);
5778 l_res_class_code_tbl(bl_count) := l_res_class_code;
5779 l_rate_based_flag_tbl.EXTEND(1);
5780 l_rate_based_flag_tbl(bl_count) := l_rate_based_flag;
5781 l_rbs_elem_id_tbl.EXTEND(1);
5782 l_rbs_elem_id_tbl(bl_count) := l_rbs_elem_id;
5783
5784 l_cbs_elem_id_tbl.EXTEND(1);
5785 l_cbs_elem_id_tbl(bl_count) := l_cbs_elem_id;
5786
5787 l_amount_type_tbl.EXTEND(1);
5788 l_amount_type_tbl(bl_count) := l_inf_tbl_data_curr_rec.amount_type_code;
5789
5790 -- incrementing the bl_count
5791 bl_count := bl_count + 1;
5792
5793 END IF;
5794
5795 --log1('----- STAGE 107-------');
5796
5797 END IF; -- for a distinct current record
5798
5799 --log1('----- STAGE 115-------');
5800 EXCEPTION -- inside the loop to catch skip_ra_exc
5801 WHEN Fp_Webadi_Skip_Dup_Rec_Exc THEN
5802 -- exception to skip processing of the duplicate records entered
5803 IF l_debug_mode = 'Y' THEN
5804 pa_debug.g_err_stage := 'Fp_Webadi_Skip_Dup_Rec_Exc Raised';
5805 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5806 END IF;
5807 LOOP
5808 l_inf_tbl_data_skip_rec:=NULL;
5809 FETCH inf_tbl_data_csr INTO l_inf_tbl_data_skip_rec;
5810 EXIT WHEN l_loop_exit_flag = 'Y' OR l_inf_tbl_data_skip_rec.task_id IS NULL;
5811
5812 IF l_inf_tbl_data_skip_rec.task_id <> l_inf_tbl_data_next_rec.task_id OR
5813 l_inf_tbl_data_skip_rec.resource_list_member_id <> l_inf_tbl_data_next_rec.resource_list_member_id OR
5814 Nvl(l_inf_tbl_data_skip_rec.txn_currency_code, '-99') <> Nvl(l_inf_tbl_data_next_rec.txn_currency_code, '-99') OR
5815 NVL(l_inf_tbl_data_skip_rec.amount_type_code,'-99') <> NVL(l_inf_tbl_data_next_rec.amount_type_code,'-99') THEN
5816
5817 -- assigning the next distinct planning txn to the next_rec record
5818 l_inf_tbl_data_next_rec := l_inf_tbl_data_skip_rec;
5819 l_loop_exit_flag := 'Y';
5820
5821 END IF;
5822 END LOOP;
5823 WHEN Fp_Webadi_Skip_Rec_Proc_Exc THEN
5824 -- exception to skip processing of the record, if any validation
5825 -- failure occurs in the current record, so that there would be
5826 -- at max one error code populated for any particular record.
5827 IF l_debug_mode = 'Y' THEN
5828 pa_debug.g_err_stage := 'Fp_Webadi_Skip_Rec_Proc_Exc Raised';
5829 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5830 END IF;
5831 IF l_inf_tbl_data_next_rec.task_id IS NULL THEN
5832 FETCH inf_tbl_data_csr INTO l_inf_tbl_data_next_rec;
5833 END IF;
5834
5835 WHEN Fp_Webadi_Skip_Next_Rec_Exc THEN
5836 -- exception to skip processing of the next record, if any validation
5837 -- failure occurs in that record, so that there would be
5838 -- at max one error code populated for any particular record.
5839 IF l_debug_mode = 'Y' THEN
5840 pa_debug.g_err_stage := 'Fp_Webadi_Skip_Next_Rec_Exc Raised';
5841 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5842 END IF;
5843 l_inf_tbl_data_skip_rec:=NULL;
5844 FETCH inf_tbl_data_csr INTO l_inf_tbl_data_skip_rec;
5845 l_inf_tbl_data_next_rec := l_inf_tbl_data_skip_rec;
5846
5847
5848 /* Do nothing just skip the current record and proceed with the next one */
5849 END; -- end of the processing block inside the loop
5850
5851 -- making the next_rec as the current_rec
5852 l_inf_tbl_data_prev_rec := l_inf_tbl_data_curr_rec;
5853 l_inf_tbl_data_curr_rec := l_inf_tbl_data_next_rec;
5854 l_inf_tbl_data_next_rec := NULL;
5855
5856 x_num_of_rec_processed := x_num_of_rec_processed + 1;
5857 END LOOP; -- end of main loop
5858
5859 CLOSE inf_tbl_data_csr;
5860
5861 --log1('----- STAGE 115-------'||l_err_val_code_tbl.COUNT);
5862
5863 -- calling process_errors
5864 IF l_err_val_code_tbl.COUNT > 0 THEN
5865 IF l_debug_mode = 'Y' THEN
5866 pa_debug.g_err_stage := 'Error Code Exists.Calling process_errors';
5867 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5868 END IF;
5869 process_errors ( p_run_id => p_run_id,
5870 p_periodic_flag => is_periodic_setup,
5871 p_error_code_tbl => l_err_val_code_tbl,
5872 p_task_id_tbl => l_err_task_id_tbl,
5873 p_rlm_id_tbl => l_err_rlm_id_tbl,
5874 p_txn_curr_tbl => l_err_txn_curr_tbl,
5875 p_amount_type_tbl => l_err_amt_type_tbl,
5876 p_request_id => p_request_id,
5877 x_return_status => l_return_status,
5878 x_msg_data => l_msg_data,
5879 x_msg_count => l_msg_count);
5880 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5881 IF l_debug_mode = 'Y' THEN
5882 pa_debug.g_err_stage := 'Call to process_errors returned with error';
5883 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5884 END IF;
5885 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5886 END IF;
5887 END IF;
5888
5889 --log1('----- STAGE 116-------'||l_err_val_code_tbl.COUNT);
5890
5891 /* FOR zz IN 1..l_budget_line_in_out_tbl.COUNT LOOP
5892
5893 log1('-l_budget_line_in_out_tbl('||zz||').pa_task_id- ' || l_budget_line_in_out_tbl(zz).pa_task_id);
5894 log1('-l_budget_line_in_out_tbl('||zz||').resource_list_member_id- ' || l_budget_line_in_out_tbl(zz).resource_list_member_id);
5895 log1('-l_budget_line_in_out_tbl('||zz||').txn_currency_code- ' || l_budget_line_in_out_tbl(zz).txn_currency_code);
5896 log1('-l_budget_line_in_out_tbl('||zz||').quantity- ' || l_budget_line_in_out_tbl(zz).quantity);
5897 log1('-l_budget_line_in_out_tbl('||zz||').raw_cost- ' || l_budget_line_in_out_tbl(zz).raw_cost);
5898 log1('-l_budget_line_in_out_tbl('||zz||').burdened_cost- ' || l_budget_line_in_out_tbl(zz).burdened_cost);
5899 log1('-l_budget_line_in_out_tbl('||zz||').revenue- ' || l_budget_line_in_out_tbl(zz).revenue);
5900
5901 END LOOP;*/
5902
5903 -- populating the out variables
5904 x_budget_lines := l_budget_line_in_out_tbl;
5905 x_raw_cost_rate_tbl := l_rc_rate_tbl;
5906 x_burd_cost_rate_tbl := l_bc_rate_tbl;
5907 x_bill_rate_tbl := l_bill_rate_tbl;
5908 x_planning_start_date_tbl := l_plan_start_date_tbl;
5909 x_planning_end_date_tbl := l_plan_end_date_tbl;
5910 x_uom_tbl := l_uom_tbl;
5911 x_mfc_cost_type_tbl := l_mfc_cost_type_name_tbl;
5912 x_spread_curve_name_tbl := l_spread_curve_name_tbl;
5913 x_sp_fixed_date_tbl := l_sp_fixed_date_tbl;
5914 x_etc_method_name_tbl := l_etc_method_code_tbl;
5915 x_delete_flag_tbl := l_delete_flag_tbl;
5916 -- additional parameter to validate_budget_lines
5917 x_spread_curve_id_tbl := l_spread_curve_id_tbl;
5918
5919 x_ra_id_tbl := l_ra_id_tbl;
5920 x_res_class_code_tbl := l_res_class_code_tbl;
5921 x_rate_based_flag_tbl := l_rate_based_flag_tbl;
5922 x_rbs_elem_id_tbl := l_rbs_elem_id_tbl;
5923 x_cbs_elem_id_tbl := l_cbs_elem_id_tbl;
5924 x_amt_type_tbl := l_amount_type_tbl;
5925
5926 IF l_debug_mode = 'Y' THEN
5927 pa_debug.g_err_stage := 'Leaving pa_fp_webadi_pkg.prepare_val_input';
5928 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
5929 END IF;
5930
5931 pa_debug.reset_curr_function;
5932
5933 --log1('----- Leaving prepare_val_input-------');
5934
5935 EXCEPTION
5936 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
5937 l_msg_count := FND_MSG_PUB.count_msg;
5938
5939 IF l_msg_count = 1 and x_msg_data IS NULL THEN
5940 PA_INTERFACE_UTILS_PUB.get_messages
5941 (p_encoded => FND_API.G_TRUE
5942 ,p_msg_index => 1
5943 ,p_msg_count => l_msg_count
5944 ,p_msg_data => l_msg_data
5945 ,p_data => l_data
5946 ,p_msg_index_out => l_msg_index_out);
5947 x_msg_data := l_data;
5948 x_msg_count := l_msg_count;
5949 ELSE
5950 x_msg_count := l_msg_count;
5951 END IF;
5952 x_return_status := FND_API.G_RET_STS_ERROR;
5953
5954 pa_debug.reset_curr_function;
5955
5956 RETURN;
5957
5958 WHEN OTHERS THEN
5959 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5960 x_msg_count := 1;
5961 x_msg_data := SQLERRM;
5962
5963 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
5964 ,p_procedure_name => 'prepare_val_input');
5965 IF l_debug_mode = 'Y' THEN
5966 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
5967 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5968 END IF;
5969
5970 pa_debug.reset_curr_function;
5971
5972 RAISE;
5973
5974 END prepare_val_input;
5975
5976 --This is a private function used by prepare_pbl_input. This function expects p_rec, record in pa_fp_webadi_upload_inf
5977 --and p_prd that indicates the period in p_rec from which the amount should be returned.
5978 --valid values for prd are ('SD,'PD', '1'..'52')
5979
5980 FUNCTION get_amount_in_prd_x
5981 (p_rec IN inf_tbl_data_csr%ROWTYPE,
5982 p_prd IN VARCHAR2
5983 )
5984 RETURN NUMBER
5985 IS
5986 -- variables used for debugging
5987 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.get_amount_in_prd_x';
5988 l_debug_mode VARCHAR2(1) := 'N';
5989 l_amount NUMBER;
5990 BEGIN
5991 fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
5992
5993
5994 IF l_debug_mode = 'Y' THEN
5995 pa_debug.g_err_stage := 'Entering into get_amount_in_prd_x';
5996 pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
5997 pa_debug.g_err_stage := 'Validating input parameters';
5998 pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
5999 END IF;
6000
6001 IF l_debug_mode = 'Y' THEN
6002 pa_debug.Set_Curr_Function
6003 (p_function => l_module_name,
6004 p_debug_mode => l_debug_mode);
6005 END IF;
6006
6007 IF p_prd IS NULL THEN
6008
6009 IF l_debug_mode = 'Y' THEN
6010
6011 pa_debug.g_err_stage := 'p_rec is null';
6012 pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
6013 pa_debug.g_err_stage := 'p_prd is null';
6014 pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
6015 pa_debug.reset_curr_function;
6016
6017 END IF;
6018 RETURN NULL;
6019
6020 END IF;
6021
6022 IF l_debug_mode = 'Y' THEN
6023 pa_debug.g_err_stage := 'p_prd is '||p_prd;
6024 pa_debug.write(l_module_name, pa_debug.g_err_stage, 3);
6025 END IF;
6026
6027 IF p_prd ='PD' THEN
6028 l_amount := p_rec.pd_prd;
6029 ELSIF p_prd ='SD' THEN
6030 l_amount := p_rec.sd_prd;
6031 ELSIF p_prd ='1' THEN
6032 l_amount := p_rec.prd1;
6033 ELSIF p_prd ='2' THEN
6034 l_amount := p_rec.prd2;
6035 ELSIF p_prd ='3' THEN
6036 l_amount := p_rec.prd3;
6037 ELSIF p_prd ='4' THEN
6038 l_amount := p_rec.prd4;
6039 ELSIF p_prd ='5' THEN
6040 l_amount := p_rec.prd5;
6041 ELSIF p_prd ='6' THEN
6042 l_amount := p_rec.prd6;
6043 ELSIF p_prd ='7' THEN
6044 l_amount := p_rec.prd7;
6045 ELSIF p_prd ='8' THEN
6046 l_amount := p_rec.prd8;
6047 ELSIF p_prd ='9' THEN
6048 l_amount := p_rec.prd9;
6049 ELSIF p_prd ='10' THEN
6050 l_amount := p_rec.prd10;
6051 ELSIF p_prd ='11' THEN
6052 l_amount := p_rec.prd11;
6053 ELSIF p_prd ='12' THEN
6054 l_amount := p_rec.prd12;
6055 ELSIF p_prd ='13' THEN
6056 l_amount := p_rec.prd13;
6057 ELSIF p_prd ='14' THEN
6058 l_amount := p_rec.prd14;
6059 ELSIF p_prd ='15' THEN
6060 l_amount := p_rec.prd15;
6061 ELSIF p_prd ='16' THEN
6062 l_amount := p_rec.prd16;
6063 ELSIF p_prd ='17' THEN
6064 l_amount := p_rec.prd17;
6065 ELSIF p_prd ='18' THEN
6066 l_amount := p_rec.prd18;
6067 ELSIF p_prd ='19' THEN
6068 l_amount := p_rec.prd19;
6069 ELSIF p_prd ='20' THEN
6070 l_amount := p_rec.prd20;
6071 ELSIF p_prd ='21' THEN
6072 l_amount := p_rec.prd21;
6073 ELSIF p_prd ='22' THEN
6074 l_amount := p_rec.prd22;
6075 ELSIF p_prd ='23' THEN
6076 l_amount := p_rec.prd23;
6077 ELSIF p_prd ='24' THEN
6078 l_amount := p_rec.prd24;
6079 ELSIF p_prd ='25' THEN
6080 l_amount := p_rec.prd25;
6081 ELSIF p_prd ='26' THEN
6082 l_amount := p_rec.prd26;
6083 ELSIF p_prd ='27' THEN
6084 l_amount := p_rec.prd27;
6085 ELSIF p_prd ='28' THEN
6086 l_amount := p_rec.prd28;
6087 ELSIF p_prd ='29' THEN
6088 l_amount := p_rec.prd29;
6089 ELSIF p_prd ='30' THEN
6090 l_amount := p_rec.prd30;
6091 ELSIF p_prd ='31' THEN
6092 l_amount := p_rec.prd31;
6093 ELSIF p_prd ='32' THEN
6094 l_amount := p_rec.prd32;
6095 ELSIF p_prd ='33' THEN
6096 l_amount := p_rec.prd33;
6097 ELSIF p_prd ='34' THEN
6098 l_amount := p_rec.prd34;
6099 ELSIF p_prd ='35' THEN
6100 l_amount := p_rec.prd35;
6101 ELSIF p_prd ='36' THEN
6102 l_amount := p_rec.prd36;
6103 ELSIF p_prd ='37' THEN
6104 l_amount := p_rec.prd37;
6105 ELSIF p_prd ='38' THEN
6106 l_amount := p_rec.prd38;
6107 ELSIF p_prd ='39' THEN
6108 l_amount := p_rec.prd39;
6109 ELSIF p_prd ='40' THEN
6110 l_amount := p_rec.prd40;
6111 ELSIF p_prd ='41' THEN
6112 l_amount := p_rec.prd41;
6113 ELSIF p_prd ='42' THEN
6114 l_amount := p_rec.prd42;
6115 ELSIF p_prd ='43' THEN
6116 l_amount := p_rec.prd43;
6117 ELSIF p_prd ='44' THEN
6118 l_amount := p_rec.prd44;
6119 ELSIF p_prd ='45' THEN
6120 l_amount := p_rec.prd45;
6121 ELSIF p_prd ='46' THEN
6122 l_amount := p_rec.prd46;
6123 ELSIF p_prd ='47' THEN
6124 l_amount := p_rec.prd47;
6125 ELSIF p_prd ='48' THEN
6126 l_amount := p_rec.prd48;
6127 ELSIF p_prd ='49' THEN
6128 l_amount := p_rec.prd49;
6129 ELSIF p_prd ='50' THEN
6130 l_amount := p_rec.prd50;
6131 ELSIF p_prd ='51' THEN
6132 l_amount := p_rec.prd51;
6133 ELSIF p_prd ='52' THEN
6134 l_amount := p_rec.prd52;
6135 END IF;
6136
6137 IF l_debug_mode = 'Y' THEN
6138 pa_debug.reset_curr_function;
6139 END IF;
6140
6141 RETURN l_amount;
6142
6143 EXCEPTION
6144 WHEN OTHERS THEN
6145
6146 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
6147 ,p_procedure_name => 'get_amount_in_prd_x');
6148 IF l_debug_mode = 'Y' THEN
6149 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
6150 pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
6151 END IF;
6152
6153 IF l_debug_mode = 'Y' THEN
6154 pa_debug.reset_curr_function;
6155 END IF;
6156 RAISE;
6157 END get_amount_in_prd_x;
6158
6159 --This API is internally called from prepare_pbl_input
6160 PROCEDURE get_total_fcst_amounts
6161 (p_project_id IN pa_projects_all.project_id%TYPE,
6162 p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE,
6163 p_task_id IN pa_tasks.task_id%TYPE,
6164 p_resource_list_member_id IN pa_resource_list_members.resource_list_member_id%TYPE,
6165 p_cbs_element_id IN pa_resource_assignments.cbs_element_id%TYPE, -- cbs enhancement changes bug#16445106
6166 p_txn_currency_code IN pa_budget_lines.txn_currency_code%TYPE,
6167 p_line_start_date IN DATE,
6168 p_line_end_date IN DATE,
6169 p_prd_mask_st_date_tbl IN SYSTEM.pa_date_tbl_type,
6170 p_prd_mask_end_date_tbl IN SYSTEM.pa_date_tbl_type,
6171 p_st_index_in_prd_mask IN NUMBER,
6172 p_end_index_in_prd_mask IN NUMBER,
6173 p_etc_start_date IN DATE,
6174 p_etc_quantity IN NUMBER,
6175 p_fcst_quantity IN NUMBER,
6176 p_etc_raw_cost IN NUMBER,
6177 p_fcst_raw_cost IN NUMBER,
6178 p_etc_burd_cost IN NUMBER,
6179 p_fcst_burd_cost IN NUMBER,
6180 p_etc_revenue IN NUMBER,
6181 p_fcst_revenue IN NUMBER,
6182 px_cached_fcst_qty_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6183 px_cached_fcst_raw_cost_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6184 px_cached_fcst_burd_cost_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6185 px_cached_fcst_revenue_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6186 px_cached_etc_qty_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6187 px_cached_etc_raw_cost_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6188 px_cached_etc_burd_cost_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6189 px_cached_etc_revenue_tbl IN OUT NOCOPY varchar_70_indexed_num_tbl_typ, --File.Sql.39 bug 4440895
6190 x_total_quantity OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6191 x_total_raw_cost OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6192 x_total_burd_cost OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6193 x_total_revenue OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6194 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
6195 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6196 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6197 )
6198 IS
6199 --Start of variables used for debugging
6200 l_return_status VARCHAR2(1);
6201 l_msg_count NUMBER := 0;
6202 l_msg_data VARCHAR2(2000);
6203 l_data VARCHAR2(2000);
6204 l_msg_index_out NUMBER;
6205 l_debug_mode VARCHAR2(30);
6206 l_module_name VARCHAR2(100):='PAFPWAPB.get_total_fcst_amounts';
6207
6208 --End of variables used for debugging
6209 l_varchar_index VARCHAR2(50);
6210 l_amt_typs_to_be_populated_tbl pa_plsql_datatypes.char30TabTyp;
6211 l_amt_typ_index NUMBER;
6212 l_amt_exists_flag VARCHAR2(1);
6213 l_existing_fcst_amount NUMBER;
6214 l_existing_etc_amount NUMBER;
6215 l_entered_fcst_amount NUMBER;
6216 l_entered_etc_amount NUMBER;
6217 l_total_amount NUMBER;
6218 l_index NUMBER;
6219 l_fcst_qty_tbl pa_plsql_datatypes.numTabTyp;
6220 l_etc_qty_tbl pa_plsql_datatypes.numTabTyp;
6221 l_fcst_raw_cost_tbl pa_plsql_datatypes.numTabTyp;
6222 l_etc_raw_cost_tbl pa_plsql_datatypes.numTabTyp;
6223 l_fcst_burd_cost_tbl pa_plsql_datatypes.numTabTyp;
6224 l_etc_burd_cost_tbl pa_plsql_datatypes.numTabTyp;
6225 l_fcst_revenue_tbl pa_plsql_datatypes.numTabTyp;
6226 l_etc_revenue_tbl pa_plsql_datatypes.numTabTyp;
6227 l_txn_currency_code_tbl pa_plsql_datatypes.char15TabTyp;
6228 l_start_date_tbl pa_plsql_datatypes.dateTabTyp;
6229 l_end_date_tbl pa_plsql_datatypes.dateTabTyp;
6230 l_Cbs_Enabled VARCHAR2(1) := 'N'; -- cbs enhancement changes bug#16445106
6231 BEGIN
6232 x_msg_count := 0;
6233 x_return_status := FND_API.G_RET_STS_SUCCESS;
6234
6235 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
6236 l_debug_mode := NVL(l_debug_mode, 'Y');
6237
6238 --DEBUG_NS('p_project_id :: '|| p_project_id);
6239
6240 -- Set curr function
6241 IF l_debug_mode='Y' THEN
6242
6243 pa_debug.set_curr_function(
6244 p_function =>'PAFPWAPB.get_total_fcst_amounts'
6245 ,p_debug_mode => l_debug_mode );
6246 END IF;
6247
6248 l_Cbs_Enabled := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => p_project_id);-- cbs enhancement changes bug#16445106
6249
6250 --DEBUG_NS('Inside get_total_fcst_amounts l_Cbs_Enabled :: '|| l_Cbs_Enabled);
6251
6252 IF p_task_id IS NULL OR
6253 p_resource_list_member_id IS NULL OR
6254 p_txn_currency_code IS NULL OR
6255 ((l_Cbs_Enabled = 'Y' and p_cbs_element_id IS NULL) OR l_Cbs_Enabled = 'N') -- cbs enhancement changes bug#16445106
6256 THEN
6257
6258 IF l_debug_mode = 'Y' THEN
6259
6260 pa_debug.g_err_stage:='p_task_id is'|| p_task_id;
6261 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6262
6263 pa_debug.g_err_stage:='p_resource_list_member_id is'|| p_resource_list_member_id ;
6264 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6265
6266 pa_debug.g_err_stage:='p_txn_currency_code is'|| p_txn_currency_code;
6267 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6268
6269
6270 END IF;
6271
6272 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6273 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
6274 p_token1 => 'PROCEDURENAME',
6275 p_value1 => 'PAFPWAPB.get_total_fcst_amount',
6276 p_token2 => 'STAGE',
6277 p_value2 => '[Task, Rlm,Txn]'||'['||p_task_id||','||p_resource_list_member_id||','||p_txn_currency_code||']');
6278
6279 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6280
6281 END IF;
6282
6283 IF p_line_start_date IS NOT NULL THEN
6284
6285 IF p_line_end_date IS NULL OR
6286 p_prd_mask_st_date_tbl.COUNT <> p_prd_mask_end_date_tbl.COUNT OR
6287 p_st_index_in_prd_mask IS NULL OR
6288 p_end_index_in_prd_mask IS NULL THEN
6289
6290 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6291 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
6292 p_token1 => 'PROCEDURENAME',
6293 p_value1 => 'PAFPWAPB.get_total_fcst_amount',
6294 p_token2 => 'STAGE',
6295 p_value2 => 'Invalid Budget Level parameters');
6296
6297 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6298
6299 END IF;
6300
6301 END IF;
6302
6303 l_amt_typ_index:=0;
6304 IF p_etc_quantity IS NULL AND
6305 p_fcst_quantity IS NULL THEN
6306
6307 x_total_quantity := NULL;
6308
6309 ELSIF p_etc_quantity IS NULL AND
6310 p_fcst_quantity IS NOT NULL THEN
6311
6312 x_total_quantity := p_fcst_quantity;
6313
6314 ELSE
6315 l_amt_typ_index:=l_amt_typ_index+1;
6316 l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='QUANTITY';
6317 END IF;
6318
6319 IF p_etc_raw_cost IS NULL AND
6320 p_fcst_raw_cost IS NULL THEN
6321
6322 x_total_raw_cost := NULL;
6323
6324 ELSIF p_etc_raw_cost IS NULL AND
6325 p_fcst_raw_cost IS NOT NULL THEN
6326
6327 x_total_raw_cost := p_fcst_raw_cost;
6328
6329 ELSE
6330 l_amt_typ_index:=l_amt_typ_index+1;
6331 l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='RAW_COST';
6332 END IF;
6333
6334
6335 IF p_etc_burd_cost IS NULL AND
6336 p_fcst_burd_cost IS NULL THEN
6337
6338 x_total_burd_cost := NULL;
6339
6340 ELSIF p_etc_burd_cost IS NULL AND
6341 p_fcst_burd_cost IS NOT NULL THEN
6342
6343 x_total_burd_cost := p_fcst_burd_cost;
6344
6345 ELSE
6346
6347 l_amt_typ_index:=l_amt_typ_index+1;
6348 l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='BURDENED_COST';
6349
6350 END IF;
6351
6352
6353 IF p_etc_revenue IS NULL AND
6354 p_fcst_revenue IS NULL THEN
6355
6356 x_total_revenue := NULL;
6357
6358 ELSIF p_etc_revenue IS NULL AND
6359 p_fcst_revenue IS NOT NULL THEN
6360
6361 x_total_revenue := p_fcst_revenue;
6362
6363 ELSE
6364 l_amt_typ_index:=l_amt_typ_index+1;
6365 l_amt_typs_to_be_populated_tbl(l_amt_typ_index):='REVENUE';
6366 END IF;
6367
6368 IF l_debug_mode = 'Y' THEN
6369 pa_debug.g_err_stage:='l_amt_typs_to_be_populated_tbl.COUNT '||l_amt_typs_to_be_populated_tbl.COUNT;
6370 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
6371 END IF;
6372
6373 --DEBUG_NS('l_amt_typs_to_be_populated_tbl.COUNT :: '|| l_amt_typs_to_be_populated_tbl.COUNT);
6374
6375 IF l_amt_typs_to_be_populated_tbl.COUNT>0 THEN
6376
6377 --Check if the details of the planning transactions for this resource assignment are already fetched or not.
6378 --If the details are already fetched then the RA index of px_cached_fcst_qty_tbl will contain the no. of
6379 --planning transactions/periodic lines for the RA.
6380 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) ;
6381 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6382
6383 IF p_line_start_date IS NULL THEN
6384
6385 SELECT SUM(NVL(pbl.quantity,0)),
6386 SUM(NVL(pbl.quantity,0)-NVL(pbl.init_quantity,0)),
6387 SUM(NVL(pbl.txn_raw_cost,0)),
6388 SUM(NVL(pbl.txn_raw_cost,0)-NVL(pbl.txn_init_raw_cost,0)),
6389 SUM(NVL(pbl.txn_burdened_cost,0)),
6390 SUM(NVL(pbl.txn_burdened_cost,0)-NVL(pbl.txn_init_burdened_cost,0)),
6391 SUM(NVL(pbl.txn_revenue,0)),
6392 SUM(NVL(pbl.txn_revenue,0)-NVL(txn_init_revenue,0)),
6393 pbl.txn_currency_code
6394 BULK COLLECT INTO
6395 l_fcst_qty_tbl,
6396 l_etc_qty_tbl,
6397 l_fcst_raw_cost_tbl,
6398 l_etc_raw_cost_tbl,
6399 l_fcst_burd_cost_tbl,
6400 l_etc_burd_cost_tbl,
6401 l_fcst_revenue_tbl,
6402 l_etc_revenue_tbl,
6403 l_txn_currency_code_tbl
6404 FROM pa_budget_lines pbl,
6405 pa_resource_assignments pra
6406 WHERE pra.budget_version_id=p_budget_version_id
6407 AND pra.project_id=p_project_id
6408 AND pra.task_id=p_task_id
6409 AND pra.resource_list_member_id=p_resource_list_member_id
6410 AND nvl(pra.cbs_element_id,-1)=nvl(p_cbs_element_id,-1) -- cbs enhancement changes bug#16445106
6411 AND pra.project_assignment_id=-1
6412 AND pbl.resource_assignment_id=pra.resource_assignment_id
6413 GROUP BY pbl.txn_currency_code;
6414
6415 FOR i IN 1..l_txn_currency_code_tbl.COUNT LOOP
6416
6417 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) || 'C' || l_txn_currency_code_tbl(i);
6418
6419 px_cached_fcst_qty_tbl(l_varchar_index) := l_fcst_qty_tbl(i);
6420 px_cached_etc_qty_tbl(l_varchar_index) := l_etc_qty_tbl(i);
6421 px_cached_fcst_raw_cost_tbl(l_varchar_index) := l_fcst_raw_cost_tbl(i);
6422 px_cached_etc_raw_cost_tbl(l_varchar_index) := l_etc_raw_cost_tbl(i);
6423 px_cached_fcst_burd_cost_tbl(l_varchar_index) := l_fcst_burd_cost_tbl(i);
6424 px_cached_etc_burd_cost_tbl(l_varchar_index) := l_etc_burd_cost_tbl(i);
6425 px_cached_fcst_revenue_tbl(l_varchar_index) := l_fcst_revenue_tbl(i);
6426 px_cached_etc_revenue_tbl(l_varchar_index) := l_etc_revenue_tbl(i);
6427
6428 END LOOP;
6429
6430 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) ;
6431 px_cached_fcst_qty_tbl(l_varchar_index):=l_txn_currency_code_tbl.COUNT;
6432
6433 ELSE--The layout is a periodic layout
6434
6435 SELECT NVL(pbl.quantity,0),
6436 NVL(pbl.quantity,0)-NVL(pbl.init_quantity,0),
6437 NVL(pbl.txn_raw_cost,0),
6438 NVL(pbl.txn_raw_cost,0)-NVL(pbl.txn_init_raw_cost,0),
6439 NVL(pbl.txn_burdened_cost,0),
6440 NVL(pbl.txn_burdened_cost,0)-NVL(pbl.txn_init_burdened_cost,0),
6441 NVL(pbl.txn_revenue,0),
6442 NVL(pbl.txn_revenue,0)-NVL(txn_init_revenue,0),
6443 pbl.txn_currency_code,
6444 pbl.start_date,
6445 pbl.end_date
6446 BULK COLLECT INTO
6447 l_fcst_qty_tbl,
6448 l_etc_qty_tbl,
6449 l_fcst_raw_cost_tbl,
6450 l_etc_raw_cost_tbl,
6451 l_fcst_burd_cost_tbl,
6452 l_etc_burd_cost_tbl,
6453 l_fcst_revenue_tbl,
6454 l_etc_revenue_tbl,
6455 l_txn_currency_code_tbl,
6456 l_start_date_tbl,
6457 l_end_date_tbl
6458 FROM pa_budget_lines pbl,
6459 pa_resource_assignments pra
6460 WHERE pra.budget_version_id=p_budget_version_id
6461 AND pra.project_id=p_project_id
6462 AND pra.task_id=p_task_id
6463 AND pra.resource_list_member_id=p_resource_list_member_id
6464 AND nvl(pra.cbs_element_id,-1)=nvl(p_cbs_element_id,-1) -- cbs enhancement changes bug#16445106
6465 AND pra.project_assignment_id=-1
6466 AND pbl.resource_assignment_id=pra.resource_assignment_id
6467 ORDER BY pbl.start_date,pbl.end_date,pbl.txn_currency_code;
6468
6469
6470 l_index:=1;
6471 FOR i IN p_st_index_in_prd_mask..p_end_index_in_prd_mask LOOP
6472
6473 IF l_start_date_tbl.COUNT < l_index THEN
6474
6475 EXIT;
6476
6477 END IF;
6478
6479 LOOP
6480
6481 EXIT WHEN l_start_date_tbl.COUNT < l_index OR
6482 l_start_date_tbl(l_index) NOT BETWEEN p_prd_mask_st_date_tbl(i) AND p_prd_mask_end_date_tbL(i);
6483
6484 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id)
6485 ||'C' || l_txn_currency_code_tbl(l_index)
6486 ||'S' || TO_CHAR(p_prd_mask_st_date_tbl(i),'DD-MM-YYYY')
6487 ||'E' || TO_CHAR(p_prd_mask_end_date_tbl(i),'DD-MM-YYYY');
6488
6489 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6490
6491 px_cached_fcst_qty_tbl(l_varchar_index) := l_fcst_qty_tbl(l_index);
6492 px_cached_etc_qty_tbl(l_varchar_index) := l_etc_qty_tbl(l_index);
6493 px_cached_fcst_raw_cost_tbl(l_varchar_index) := l_fcst_raw_cost_tbl(l_index);
6494 px_cached_etc_raw_cost_tbl(l_varchar_index) := l_etc_raw_cost_tbl(l_index);
6495 px_cached_fcst_burd_cost_tbl(l_varchar_index) := l_fcst_burd_cost_tbl(l_index);
6496 px_cached_etc_burd_cost_tbl(l_varchar_index) := l_etc_burd_cost_tbl(l_index);
6497 px_cached_fcst_revenue_tbl(l_varchar_index) := l_fcst_revenue_tbl(l_index);
6498 px_cached_etc_revenue_tbl(l_varchar_index) := l_etc_revenue_tbl(l_index);
6499
6500 ELSE
6501
6502 px_cached_fcst_qty_tbl(l_varchar_index) := px_cached_fcst_qty_tbl(l_varchar_index) + l_fcst_qty_tbl(l_index);
6503 px_cached_etc_qty_tbl(l_varchar_index) := px_cached_etc_qty_tbl(l_varchar_index) + l_etc_qty_tbl(l_index);
6504 px_cached_fcst_raw_cost_tbl(l_varchar_index) := px_cached_fcst_raw_cost_tbl(l_varchar_index)+l_fcst_raw_cost_tbl(l_index);
6505 px_cached_etc_raw_cost_tbl(l_varchar_index) := px_cached_etc_raw_cost_tbl(l_varchar_index)+l_etc_raw_cost_tbl(l_index);
6506 px_cached_fcst_burd_cost_tbl(l_varchar_index) := px_cached_fcst_burd_cost_tbl(l_varchar_index)+l_fcst_burd_cost_tbl(l_index);
6507 px_cached_etc_burd_cost_tbl(l_varchar_index) := px_cached_etc_burd_cost_tbl(l_varchar_index)+l_etc_burd_cost_tbl(l_index);
6508 px_cached_fcst_revenue_tbl(l_varchar_index) := px_cached_fcst_revenue_tbl(l_varchar_index)+l_fcst_revenue_tbl(l_index);
6509 px_cached_etc_revenue_tbl(l_varchar_index) := px_cached_etc_revenue_tbl(l_varchar_index)+l_etc_revenue_tbl(l_index);
6510
6511 END IF;
6512
6513 l_index:=l_index+1;
6514
6515 END LOOP;--For the budget lines
6516
6517
6518 END LOOP;--FOR i IN p_st_index_in_prd_mask..p_end_index_in_prd_mask LOOP
6519
6520 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) ;
6521 px_cached_fcst_qty_tbl(l_varchar_index):=px_cached_fcst_qty_tbl.COUNT;
6522
6523
6524 END IF;----The layout is a periodic layout
6525
6526
6527 END IF;--IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6528
6529 IF p_line_start_date IS NULL THEN
6530 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id) || 'C' || p_txn_currency_code;
6531 ELSE
6532 l_varchar_index:= 'T' || TO_CHAR(p_task_id) || 'R' || TO_CHAR(p_resource_list_member_id)
6533 ||'C' || p_txn_currency_code
6534 ||'S' || TO_CHAR(p_line_start_date,'DD-MM-YYYY')
6535 ||'E' || TO_CHAR(p_line_end_date,'DD-MM-YYYY');
6536 END IF;
6537 --log1('1 l_varchar_index '||l_varchar_index);
6538 --log1('2 p_fcst_quantity '||p_fcst_quantity);
6539 --log1('3 p_etc_quantity '||p_etc_quantity);
6540 --log1('4 p_line_start_date '||p_line_start_date);
6541 --log1('5 p_line_end_date '||p_line_end_date);
6542
6543 FOR i IN 1..l_amt_typs_to_be_populated_tbl.COUNT LOOP
6544
6545 l_entered_fcst_amount:=NULL;
6546 l_entered_etc_amount:=NULL;
6547 l_existing_fcst_amount:=NULL;
6548 l_existing_etc_amount:=NULL;
6549 l_amt_exists_flag:='N';
6550 l_total_amount:=NULL;
6551
6552 IF l_amt_typs_to_be_populated_tbl(i)='QUANTITY' THEN
6553
6554 l_entered_fcst_amount:=p_fcst_quantity;
6555 l_entered_etc_amount :=p_etc_quantity;
6556
6557 --Budget lines for the planning transaction do not exist
6558 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6559
6560 l_amt_exists_flag:='N';
6561
6562 ELSE
6563
6564 l_amt_exists_flag:='Y';
6565 l_existing_fcst_amount:=px_cached_fcst_qty_tbl(l_varchar_index);
6566 l_existing_etc_amount:=px_cached_etc_qty_tbl(l_varchar_index);
6567
6568 END IF;
6569
6570 ELSIF l_amt_typs_to_be_populated_tbl(i)='RAW_COST' THEN
6571
6572 l_entered_fcst_amount:=p_fcst_raw_cost;
6573 l_entered_etc_amount :=p_etc_raw_cost;
6574
6575 --Budget lines for the planning transaction do not exist
6576 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6577
6578 l_amt_exists_flag:='N';
6579
6580 ELSE
6581
6582 l_amt_exists_flag:='Y';
6583 l_existing_fcst_amount:=px_cached_fcst_raw_cost_tbl(l_varchar_index);
6584 l_existing_etc_amount:=px_cached_etc_raw_cost_tbl(l_varchar_index);
6585
6586 END IF;
6587
6588 ELSIF l_amt_typs_to_be_populated_tbl(i)='BURDENED_COST' THEN
6589
6590 l_entered_fcst_amount:=p_fcst_burd_cost;
6591 l_entered_etc_amount :=p_etc_burd_cost;
6592
6593 --Budget lines for the planning transaction do not exist
6594 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6595
6596 l_amt_exists_flag:='N';
6597
6598 ELSE
6599
6600 l_amt_exists_flag:='Y';
6601 l_existing_fcst_amount:=px_cached_fcst_burd_cost_tbl(l_varchar_index);
6602 l_existing_etc_amount:=px_cached_etc_burd_cost_tbl(l_varchar_index);
6603
6604 END IF;
6605
6606 ELSIF l_amt_typs_to_be_populated_tbl(i)='REVENUE' THEN
6607
6608 l_entered_fcst_amount:=p_fcst_revenue;
6609 l_entered_etc_amount :=p_etc_revenue;
6610
6611 --Budget lines for the planning transaction do not exist
6612 IF NOT px_cached_fcst_qty_tbl.EXISTS(l_varchar_index) THEN
6613
6614 l_amt_exists_flag:='N';
6615
6616 ELSE
6617
6618 l_amt_exists_flag:='Y';
6619 l_existing_fcst_amount:=px_cached_fcst_revenue_tbl(l_varchar_index);
6620 l_existing_etc_amount:=px_cached_etc_revenue_tbl(l_varchar_index);
6621
6622 END IF;
6623
6624 END IF;
6625 --log1('6 l_amt_exists_flag '||l_amt_exists_flag);
6626 --log1('7 l_entered_fcst_amount '||l_entered_fcst_amount);
6627 --log1('8 l_entered_etc_amount '||l_entered_etc_amount);
6628
6629 IF l_amt_exists_flag='N' THEN
6630
6631 --IF forecast is not g miss num then it should be considered. Note that g miss num
6632 --will be there if NULL is entered in the layout.
6633 IF l_entered_fcst_amount IS NOT NULL AND
6634 l_entered_fcst_amount <> l_fnd_miss_num THEN
6635
6636 l_total_amount:=l_entered_fcst_amount;
6637
6638 --IF ETC is not g miss num then it should be considered. Note that g miss num
6639 --will be there if NULL is entered in the layout.
6640 ELSIF l_entered_etc_amount IS NOT NULL AND
6641 l_entered_etc_amount <> l_fnd_miss_num THEN
6642
6643 l_total_amount:=l_entered_etc_amount;
6644
6645 ELSE
6646
6647 l_total_amount:=NULL;
6648
6649 END IF;
6650
6651 --Budget lines for the planning transaction exist
6652 ELSE
6653
6654 IF l_existing_fcst_amount IS NULL AND
6655 l_entered_fcst_amount IS NOT NULL AND
6656 l_entered_fcst_amount <> l_fnd_miss_num THEN
6657
6658 l_total_amount:=l_entered_fcst_amount;
6659
6660 ELSIF l_existing_fcst_amount IS NOT NULL AND
6661 l_entered_fcst_amount IS NOT NULL AND
6662 l_entered_fcst_amount <> l_existing_fcst_amount THEN
6663
6664 l_total_amount:=l_entered_fcst_amount;
6665
6666 ELSIF l_existing_etc_amount IS NULL AND
6667 l_entered_etc_amount IS NOT NULL AND
6668 l_entered_etc_amount <> l_fnd_miss_num THEN
6669
6670 l_total_amount:=l_entered_etc_amount + NVL(l_existing_fcst_amount,0) - NVL(l_existing_etc_amount,0);
6671
6672 ELSIF l_existing_etc_amount IS NOT NULL AND
6673 l_entered_etc_amount IS NOT NULL AND
6674 l_entered_etc_amount <> l_existing_etc_amount THEN
6675
6676 l_total_amount:=l_entered_etc_amount + NVL(l_existing_fcst_amount,0) - NVL(l_existing_etc_amount,0);
6677
6678 ELSE
6679
6680 l_total_amount:=NULL;
6681
6682 END IF;
6683
6684 END IF;--IF l_amt_exists_flag='N' THEN
6685
6686 --Assign the above derived total amount to the appropriate OUT variable
6687 IF l_amt_typs_to_be_populated_tbl(i)='QUANTITY' THEN
6688
6689 x_total_quantity:=l_total_amount;
6690
6691 ELSIF l_amt_typs_to_be_populated_tbl(i)='RAW_COST' THEN
6692
6693 x_total_raw_cost:=l_total_amount;
6694
6695 ELSIF l_amt_typs_to_be_populated_tbl(i)='BURDENED_COST' THEN
6696
6697 x_total_burd_cost:=l_total_amount;
6698
6699 ELSIF l_amt_typs_to_be_populated_tbl(i)='REVENUE' THEN
6700
6701 x_total_revenue:=l_total_amount;
6702
6703 END IF;
6704
6705 END LOOP;--FOR i IN 1..l_amt_typs_to_be_populated_tbl.COUNT LOOP
6706
6707 END IF;--IF l_amt_typs_to_be_populated_tbl.COUNT>0 THEN
6708
6709 IF l_debug_mode = 'Y' THEN
6710 pa_debug.g_err_stage:='Leaving get_total_fcst_amounts';
6711 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
6712 pa_debug.reset_curr_function;
6713 END IF;
6714
6715 EXCEPTION
6716
6717 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
6718 l_msg_count := FND_MSG_PUB.count_msg;
6719 IF l_msg_count = 1 THEN
6720 PA_INTERFACE_UTILS_PUB.get_messages
6721 (p_encoded => FND_API.G_TRUE
6722 ,p_msg_index => 1
6723 ,p_msg_count => l_msg_count
6724 ,p_msg_data => l_msg_data
6725 ,p_data => l_data
6726 ,p_msg_index_out => l_msg_index_out);
6727
6728 x_msg_data := l_data;
6729 x_msg_count := l_msg_count;
6730 ELSE
6731 x_msg_count := l_msg_count;
6732 END IF;
6733 x_return_status := FND_API.G_RET_STS_ERROR;
6734
6735 IF l_debug_mode = 'Y' THEN
6736 pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
6737 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6738 -- reset curr function
6739 pa_debug.reset_curr_function();
6740
6741 END IF;
6742
6743 RETURN;
6744 WHEN OTHERS THEN
6745 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6746 x_msg_count := 1;
6747 x_msg_data := SQLERRM;
6748
6749 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
6750 ,p_procedure_name => 'get_total_fcst_amounts');
6751
6752 IF l_debug_mode = 'Y' THEN
6753 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
6754 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
6755 -- reset curr function
6756 pa_debug.Reset_Curr_Function();
6757 END IF;
6758 RAISE;
6759
6760 END get_total_fcst_amounts;
6761
6762 --This is a private API called from Switcher API. This API assumes that the data exists
6763 --in pa_fp_webadi_upload_inf table and this data has been already validated.
6764
6765 --Note: p_budget_lines_tbl contains records ordered by task id, resource alias and curr. This
6766 --API assumes that there exists only one record for an RA/TXN Currency Code in p_budget_lines_tbl
6767
6768 --p_prd_mask_st/end_date_tbl contains the start/end dates of flexible periods in the period mask. If period mask contains
6769 --10 elements then elements between 1 t0 10 will contain start/end dates of the flexible periods in the mask.
6770 --p_first_pd_bf_pm_en_dt contains the end date of the period that immediately preceeds the first period in the period mask
6771 --and it will be used as the end date if the amounts are entered in preceeding bucket
6772 --p_last_pd_af_pm_st_dt contains the start date of the period that immediately succeeds the last period in the period mask
6773 --and it will be used as the start date if the amounts are entered in preceeding bucket
6774
6775 PROCEDURE prepare_pbl_input
6776 (p_context IN VARCHAR2,
6777 p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE,
6778 p_request_id IN pa_budget_versions.request_id%TYPE DEFAULT NULL,
6779 p_inf_tbl_rec_tbl IN inf_cur_tbl_typ,
6780 p_version_info_rec IN pa_fp_gen_amount_utils.fp_cols,
6781 p_project_id IN pa_projects_all.project_id%TYPE,
6782 p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE,
6783 p_budget_lines_tbl IN PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE,
6784 p_ra_id_tbl IN SYSTEM.pa_num_tbl_type,
6785 p_etc_start_date IN pa_budget_versions.etc_start_date%TYPE,
6786 p_plan_class_code IN pa_fin_plan_types_b.plan_class_code%TYPE,
6787 p_first_pd_bf_pm_en_dt IN DATE,
6788 p_last_pd_af_pm_st_dt IN DATE,
6789 p_prd_mask_st_date_tbl IN SYSTEM.pa_date_tbl_type,
6790 p_prd_mask_end_date_tbl IN SYSTEM.pa_date_tbl_type,
6791 p_planning_start_date_tbl IN SYSTEM.pa_date_tbl_type,
6792 p_planning_end_date_tbl IN SYSTEM.pa_date_tbl_type,
6793 p_etc_quantity_tbl IN SYSTEM.pa_num_tbl_type,
6794 p_etc_raw_cost_tbl IN SYSTEM.pa_num_tbl_type,
6795 p_etc_burdened_cost_tbl IN SYSTEM.pa_num_tbl_type,
6796 p_etc_revenue_tbl IN SYSTEM.pa_num_tbl_type,
6797 p_raw_cost_rate_tbl IN SYSTEM.pa_num_tbl_type,
6798 p_burd_cost_rate_tbl IN SYSTEM.pa_num_tbl_type,
6799 p_bill_rate_tbl IN SYSTEM.pa_num_tbl_type,
6800 p_spread_curve_id_tbl IN SYSTEM.pa_num_tbl_type,
6801 p_mfc_cost_type_id_tbl IN SYSTEM.pa_num_tbl_type,
6802 p_etc_method_code_tbl IN SYSTEM.pa_varchar2_30_tbl_type ,
6803 p_sp_fixed_date_tbl IN SYSTEM.pa_date_tbl_type,
6804 p_res_class_code_tbl IN SYSTEM.pa_varchar2_30_tbl_type ,
6805 p_rate_based_flag_tbl IN SYSTEM.pa_varchar2_1_tbl_type ,
6806 p_rbs_elem_id_tbl IN SYSTEM.pa_num_tbl_type,
6807 p_cbs_elem_id_tbl IN SYSTEM.pa_num_tbl_type, -- cbs enhancement changes bug#16445106
6808 p_delete_flag_tbl IN SYSTEM.pa_varchar2_1_tbl_type ,
6809 x_task_id_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6810 x_rlm_id_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6811 x_cbs_element_id_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, -- cbs enhancement changes bug#16445106
6812 x_ra_id_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6813 x_txn_currency_code_tbl OUT NOCOPY SYSTEM.pa_varchar2_15_tbl_type , --File.Sql.39 bug 4440895
6814 x_planning_start_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6815 x_planning_end_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6816 x_total_qty_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6817 x_total_raw_cost_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6818 x_total_burdened_cost_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6819 x_total_revenue_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6820 x_raw_cost_rate_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6821 x_burdened_cost_rate_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6822 x_bill_rate_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6823 x_line_start_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6824 x_line_end_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6825 x_proj_cost_rate_type_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6826 x_proj_cost_rate_date_type_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6827 x_proj_cost_rate_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6828 x_proj_cost_rate_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6829 x_proj_rev_rate_type_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6830 x_proj_rev_rate_date_type_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6831 x_proj_rev_rate_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6832 x_proj_rev_rate_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6833 x_pfunc_cost_rate_type_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6834 x_pfunc_cost_rate_date_typ_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6835 x_pfunc_cost_rate_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6836 x_pfunc_cost_rate_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6837 x_pfunc_rev_rate_type_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6838 x_pfunc_rev_rate_date_type_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6839 x_pfunc_rev_rate_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6840 x_pfunc_rev_rate_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6841 x_delete_flag_tbl OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type, --File.Sql.39 bug 4440895
6842 x_spread_curve_id_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6843 x_mfc_cost_type_id_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6844 x_etc_method_code_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6845 x_sp_fixed_date_tbl OUT NOCOPY SYSTEM.pa_date_tbl_type, --File.Sql.39 bug 4440895
6846 x_res_class_code_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type , --File.Sql.39 bug 4440895
6847 x_rate_based_flag_tbl OUT NOCOPY SYSTEM.pa_varchar2_1_tbl_type , --File.Sql.39 bug 4440895
6848 x_rbs_elem_id_tbl OUT NOCOPY SYSTEM.pa_num_tbl_type, --File.Sql.39 bug 4440895
6849 x_change_reason_code_tbl OUT NOCOPY SYSTEM.pa_varchar2_30_tbl_type, --File.Sql.39 bug 4440895
6850 x_description_tbl OUT NOCOPY SYSTEM.pa_varchar2_2000_tbl_type, --File.Sql.39 bug 4440895
6851 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
6852 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6853 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6854 )
6855 IS
6856 -- variables used for debugging
6857 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.prepare_pbl_input';
6858 l_debug_mode VARCHAR2(1) := 'N';
6859 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
6860 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
6861
6862 l_msg_count NUMBER;
6863 l_msg_data VARCHAR2(2000);
6864 l_data VARCHAR2(2000);
6865 l_msg_index_out NUMBER;
6866
6867 --Variable used in processing
6868 l_prev_task_id NUMBER;
6869 l_prev_rlm_id NUMBER;
6870 l_prev_cbs_element_id NUMBER;-- cbs enhancement changes bug#16445106
6871 l_prev_txn_curr_code pa_budget_lines.txn_currency_code%TYPE;
6872 l_bl_index NUMBER;
6873 l_st_index_in_prd_mask NUMBER;
6874 l_end_index_in_prd_mask NUMBER;
6875 l_sd_prd_exists_flag VARCHAR2(1);
6876 l_pd_prd_exists_flag VARCHAR2(1);
6877 l_num_of_prds_for_plan_txn NUMBER;
6878 l_extend_pbl_out_tbls_flag VARCHAR2(1);
6879 l_prev_pbl_tbl_count NUMBER;
6880 l_amount NUMBER;
6881 l_prd_index VARCHAR2(2);
6882 l_tmp_index NUMBER;
6883 l_plan_txn_attrs_copied_flag VARCHAR2(1);
6884
6885 kk NUMBER;
6886 l_g_miss_char CONSTANT VARCHAR(1) := FND_API.G_MISS_CHAR;
6887 l_g_miss_num CONSTANT NUMBER := FND_API.G_MISS_NUM;
6888 l_g_miss_date CONSTANT DATE := FND_API.G_MISS_DATE;
6889
6890 l_curr_rec inf_tbl_data_csr%ROWTYPE;
6891
6892 l_cached_fcst_qty_tbl varchar_70_indexed_num_tbl_typ;
6893 l_cached_fcst_raw_cost_tbl varchar_70_indexed_num_tbl_typ;
6894 l_cached_fcst_burd_cost_tbl varchar_70_indexed_num_tbl_typ;
6895 l_cached_fcst_revenue_tbl varchar_70_indexed_num_tbl_typ;
6896 l_cached_etc_qty_tbl varchar_70_indexed_num_tbl_typ;
6897 l_cached_etc_raw_cost_tbl varchar_70_indexed_num_tbl_typ;
6898 l_cached_etc_burd_cost_tbl varchar_70_indexed_num_tbl_typ;
6899 l_cached_etc_revenue_tbl varchar_70_indexed_num_tbl_typ;
6900 l_tmp_quantity NUMBER;
6901 l_tmp_raw_cost NUMBER;
6902 l_tmp_burd_cost NUMBER;
6903 l_tmp_revenue NUMBER;
6904 l_allow_qty_flag VARCHAR2(1);
6905 l_skip_ra_flag VARCHAR2(1);
6906 l_skip_task_id pa_resource_assignments.task_id%TYPE;
6907 l_skip_rlm_id pa_resource_assignments.resource_list_member_id%TYPE;
6908 l_skip_cbs_element_id pa_resource_assignments.cbs_element_id%TYPE;-- cbs enhancement changes bug#16445106
6909
6910 l_Cbs_Enabled VARCHAR2(1) := 'N'; -- cbs enhancement changes bug#16445106
6911
6912
6913 --These tbls will be prepared in this manner
6914 ----First element is for the proceeding bucket . Next p_prd_mask_st_date_tbl.COUNT buckets will contain
6915 ----start/end dates of the periods in the period mask. Last element will be for the succeeding bucket.
6916 l_prd_mask_st_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
6917 l_prd_mask_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
6918
6919 tt NUMBER;
6920
6921 BEGIN
6922 fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
6923
6924 x_return_status := FND_API.G_RET_STS_SUCCESS;
6925 x_msg_count := 0;
6926
6927 IF l_debug_mode = 'Y' THEN
6928 pa_debug.Set_Curr_Function
6929 (p_function => l_module_name,
6930 p_debug_mode => l_debug_mode);
6931 END IF;
6932
6933 IF l_debug_mode = 'Y' THEN
6934 pa_debug.g_err_stage := 'Entering into prepare_pbl_input';
6935 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
6936 pa_debug.g_err_stage := 'Validating input parameters';
6937 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
6938 END IF;
6939
6940
6941 -- valid p_context are WEBADI_PERIODIC and WEBADI_NON_PERIODIC
6942 IF p_context IS NULL THEN
6943 IF l_debug_mode = 'Y' THEN
6944 pa_debug.g_err_stage := 'p_context is passed as null';
6945 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
6946 END IF;
6947 pa_utils.add_message(p_app_short_name => 'PA',
6948 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
6949 p_token1 => 'PROCEDURENAME',
6950 p_value1 => l_module_name);
6951
6952 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6953 END IF;
6954
6955 --If there are no records to process return
6956 IF p_budget_lines_tbl.COUNT=0 THEN
6957
6958 IF l_debug_mode = 'Y' THEN
6959 pa_debug.g_err_stage := 'p_budget_lines_tbl is empty';
6960 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
6961 pa_debug.reset_curr_function;
6962 END IF;
6963 RETURN;
6964
6965 END IF;
6966
6967 l_Cbs_Enabled := PA_ALTERNATE_TASK_PVT.Is_Cbs_Enabled(p_Project_Id => p_project_id);-- cbs enhancement changes bug#16445106
6968
6969 --DEBUG_NS('Inside prepare_pbl_input l_Cbs_Enabled :: ' || l_Cbs_Enabled);
6970 --DEBUG_NS('p_cbs_elem_id_tbl.COUNT :: ' || p_cbs_elem_id_tbl.COUNT);
6971
6972 --log1('-p_planning_start_date_tbl.COUNT- ' || p_planning_start_date_tbl.COUNT);
6973 --log1('-p_planning_end_date_tbl.COUNT- ' || p_planning_end_date_tbl.COUNT);
6974 --log1('-p_budget_lines_tbl.COUNT- ' || p_budget_lines_tbl.COUNT);
6975 --log1('-p_raw_cost_rate_tbl.COUNT- ' || p_raw_cost_rate_tbl.COUNT);
6976 --log1('-p_burd_cost_rate_tbl.COUNT- ' || p_burd_cost_rate_tbl.COUNT);
6977 --log1('-p_bill_rate_tbl.COUNT- ' || p_bill_rate_tbl.COUNT);
6978 --log1('-p_spread_curve_id_tbl.COUNT- ' || p_spread_curve_id_tbl.COUNT);
6979 --log1('-p_etc_method_code_tbl.COUNT- ' || p_etc_method_code_tbl.COUNT);
6980 --log1('-p_sp_fixed_date_tbl.COUNT- ' || p_sp_fixed_date_tbl.COUNT);
6981 --log1('-p_delete_flag_tbl.COUNT- ' || p_delete_flag_tbl.COUNT);
6982 --log1('-p_mfc_cost_type_id_tbl.COUNT- ' || p_mfc_cost_type_id_tbl.COUNT);
6983
6984 --log1('-p_budget_lines_tbl(1).quantity- ' || p_budget_lines_tbl(1).quantity);
6985 --log1('-p_budget_lines_tbl(1).raw_cost- ' || p_budget_lines_tbl(1).raw_cost);
6986 --log1('-p_budget_lines_tbl(1).burdened_cost- ' || p_budget_lines_tbl(1).burdened_cost);
6987 --log1('-p_budget_lines_tbl(1).revenue- ' || p_budget_lines_tbl(1).revenue);
6988
6989 IF p_planning_start_date_tbl.COUNT <> p_planning_end_date_tbl.COUNT OR
6990 p_planning_start_date_tbl.COUNT <> p_budget_lines_tbl.COUNT OR
6991 p_planning_start_date_tbl.COUNT <> p_raw_cost_rate_tbl.COUNT OR
6992 p_planning_start_date_tbl.COUNT <> p_burd_cost_rate_tbl.COUNT OR
6993 p_planning_start_date_tbl.COUNT <> p_bill_rate_tbl.COUNT OR
6994 p_planning_start_date_tbl.COUNT <> p_spread_curve_id_tbl.COUNT OR
6995 p_planning_start_date_tbl.COUNT <> p_mfc_cost_type_id_tbl.COUNT OR
6996 p_planning_start_date_tbl.COUNT <> p_etc_method_code_tbl.COUNT OR
6997 p_planning_start_date_tbl.COUNT <> p_sp_fixed_date_tbl.COUNT OR
6998 p_planning_start_date_tbl.COUNT <> p_delete_flag_tbl.COUNT OR
6999 p_planning_start_date_tbl.COUNT <> p_ra_id_tbl.COUNT OR
7000 p_planning_start_date_tbl.COUNT <> p_res_class_code_tbl.COUNT OR
7001 p_planning_start_date_tbl.COUNT <> p_rate_based_flag_tbl.COUNT OR
7002 p_planning_start_date_tbl.COUNT <> p_rbs_elem_id_tbl.COUNT OR
7003 p_planning_start_date_tbl.COUNT <> p_cbs_elem_id_tbl.COUNT THEN
7004
7005
7006 IF l_debug_mode = 'Y' THEN
7007
7008 pa_debug.g_err_stage := ' p_planning_start_date_tbl.COUNT '|| p_planning_start_date_tbl.COUNT;
7009 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7010
7011 pa_debug.g_err_stage := ' p_planning_end_date_tbl.COUNT '|| p_planning_end_date_tbl.COUNT;
7012 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7013
7014 pa_debug.g_err_stage := ' p_budget_lines_tbl.COUNT '|| p_budget_lines_tbl.COUNT;
7015 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7016
7017 pa_debug.g_err_stage := ' p_raw_cost_rate_tbl.COUNT '|| p_raw_cost_rate_tbl.COUNT;
7018 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7019
7020 pa_debug.g_err_stage := ' p_burd_cost_rate_tbl.COUNT '|| p_burd_cost_rate_tbl.COUNT;
7021 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7022
7023 pa_debug.g_err_stage := ' p_bill_rate_tbl.COUNT '|| p_bill_rate_tbl.COUNT;
7024 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7025
7026 pa_debug.g_err_stage := ' p_spread_curve_id_tbl.COUNT '|| p_spread_curve_id_tbl.COUNT;
7027 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7028
7029 pa_debug.g_err_stage := ' p_mfc_cost_type_id_tbl.COUNT '|| p_mfc_cost_type_id_tbl.COUNT;
7030 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7031
7032 pa_debug.g_err_stage := ' p_etc_method_code_tbl.COUNT '|| p_etc_method_code_tbl.COUNT;
7033 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7034
7035 pa_debug.g_err_stage := ' p_sp_fixed_date_tbl.COUNT '|| p_sp_fixed_date_tbl.COUNT;
7036 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7037
7038 pa_debug.g_err_stage := ' p_delete_flag_tbl.COUNT '|| p_delete_flag_tbl.COUNT;
7039 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7040
7041 pa_debug.g_err_stage := ' p_ra_id_tbl.COUNT '|| p_ra_id_tbl.COUNT;
7042 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7043
7044 pa_debug.g_err_stage := ' p_res_class_code_tbl.COUNT '|| p_res_class_code_tbl.COUNT;
7045 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7046
7047 pa_debug.g_err_stage := ' p_rate_based_flag_tbl.COUNT '|| p_rate_based_flag_tbl.COUNT;
7048 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7049
7050 pa_debug.g_err_stage := ' p_rbs_elem_id_tbl.COUNT '|| p_rbs_elem_id_tbl.COUNT;
7051 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7052
7053 pa_debug.g_err_stage := ' p_cbs_elem_id_tbl.COUNT '|| p_cbs_elem_id_tbl.COUNT;
7054 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level5);
7055
7056 END IF;
7057 pa_utils.add_message(p_app_short_name => 'PA',
7058 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
7059 p_token1 => 'PROCEDURENAME',
7060 p_value1 => l_module_name);
7061
7062 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7063
7064 END IF;
7065 --log1('----- STAGE 1-------');
7066 l_prev_pbl_tbl_count :=0;
7067 l_skip_ra_flag:='N';
7068
7069
7070 x_task_id_tbl := SYSTEM.pa_num_tbl_type();
7071 x_rlm_id_tbl := SYSTEM.pa_num_tbl_type();
7072 x_cbs_element_id_tbl := SYSTEM.pa_num_tbl_type(); -- cbs enhancement changes bug#16445106
7073 x_ra_id_tbl := SYSTEM.pa_num_tbl_type();
7074 x_txn_currency_code_tbl := SYSTEM.pa_varchar2_15_tbl_type();
7075 x_planning_start_date_tbl := SYSTEM.pa_date_tbl_type();
7076 x_planning_end_date_tbl := SYSTEM.pa_date_tbl_type();
7077 x_total_qty_tbl := SYSTEM.pa_num_tbl_type();
7078 x_total_raw_cost_tbl := SYSTEM.pa_num_tbl_type();
7079 x_total_burdened_cost_tbl := SYSTEM.pa_num_tbl_type();
7080 x_total_revenue_tbl := SYSTEM.pa_num_tbl_type();
7081 x_raw_cost_rate_tbl := SYSTEM.pa_num_tbl_type();
7082 x_burdened_cost_rate_tbl := SYSTEM.pa_num_tbl_type();
7083 x_bill_rate_tbl := SYSTEM.pa_num_tbl_type();
7084 x_line_start_date_tbl := SYSTEM.pa_date_tbl_type();
7085 x_line_end_date_tbl := SYSTEM.pa_date_tbl_type();
7086 x_proj_cost_rate_type_tbl := SYSTEM.pa_varchar2_30_tbl_type();
7087 x_proj_cost_rate_date_type_tbl := SYSTEM.pa_varchar2_30_tbl_type();
7088 x_proj_cost_rate_tbl := SYSTEM.pa_num_tbl_type();
7089 x_proj_cost_rate_date_tbl := SYSTEM.pa_date_tbl_type();
7090 x_proj_rev_rate_type_tbl := SYSTEM.pa_varchar2_30_tbl_type();
7091 x_proj_rev_rate_date_type_tbl := SYSTEM.pa_varchar2_30_tbl_type();
7092 x_proj_rev_rate_tbl := SYSTEM.pa_num_tbl_type();
7093 x_proj_rev_rate_date_tbl := SYSTEM.pa_date_tbl_type();
7094 x_pfunc_cost_rate_type_tbl := SYSTEM.pa_varchar2_30_tbl_type();
7095 x_pfunc_cost_rate_date_typ_tbl := SYSTEM.pa_varchar2_30_tbl_type();
7096 x_pfunc_cost_rate_tbl := SYSTEM.pa_num_tbl_type();
7097 x_pfunc_cost_rate_date_tbl := SYSTEM.pa_date_tbl_type();
7098 x_pfunc_rev_rate_type_tbl := SYSTEM.pa_varchar2_30_tbl_type();
7099 x_pfunc_rev_rate_date_type_tbl := SYSTEM.pa_varchar2_30_tbl_type();
7100 x_pfunc_rev_rate_tbl := SYSTEM.pa_num_tbl_type();
7101 x_pfunc_rev_rate_date_tbl := SYSTEM.pa_date_tbl_type();
7102 x_delete_flag_tbl := SYSTEM.pa_varchar2_1_tbl_type();
7103 x_spread_curve_id_tbl := SYSTEM.pa_num_tbl_type();
7104 x_mfc_cost_type_id_tbl := SYSTEM.pa_num_tbl_type();
7105 x_etc_method_code_tbl := SYSTEM.pa_varchar2_30_tbl_type();
7106 x_sp_fixed_date_tbl := SYSTEM.pa_date_tbl_type();
7107 x_res_class_code_tbl := SYSTEM.pa_varchar2_30_tbl_type();
7108 x_rate_based_flag_tbl := SYSTEM.pa_varchar2_1_tbl_type();
7109 x_rbs_elem_id_tbl := SYSTEM.pa_num_tbl_type();
7110 x_change_reason_code_tbl := SYSTEM.pa_varchar2_30_tbl_type();
7111 x_description_tbl := SYSTEM.pa_varchar2_2000_tbl_type();
7112
7113 --DEBUG_NS('p_context :: ' || p_context);
7114
7115 --log1('----- STAGE 2-------');
7116 IF p_context = 'WEBADI_PERIODIC' THEN
7117 --log1('----- STAGE 2P-------');
7118 --These variables will be used to store the values corresponding to the previous
7119 --row while looping thru the rows in the interface table.
7120 l_prev_task_id := -1;
7121 l_prev_rlm_id := l_g_miss_num;
7122 l_prev_cbs_element_id := l_g_miss_num;
7123 l_prev_txn_curr_code := l_g_miss_char;
7124 l_bl_index := 1;
7125
7126 --Initialize the OUT variables l_prd_mask_st_date_tbl/l_prd_mask_end_date_tbl
7127 --First element is reserved for preceeding bucket which will be set for each resource assignment later
7128 l_prd_mask_st_date_tbl.extend;
7129 l_prd_mask_end_date_tbl.extend;
7130 l_prd_mask_end_date_tbl(1):=p_first_pd_bf_pm_en_dt;
7131 FOR i IN 1..p_prd_mask_st_date_tbl.COUNT LOOP
7132 l_prd_mask_st_date_tbl.extend;
7133 l_prd_mask_st_date_tbl(l_prd_mask_st_date_tbl.COUNT):=p_prd_mask_st_date_tbl(i);
7134 l_prd_mask_end_date_tbl.extend;
7135 l_prd_mask_end_date_tbl(l_prd_mask_end_date_tbl.COUNT):=p_prd_mask_end_date_tbl(i);
7136 END LOOP;
7137 --Reserve the last element for succeding bucket which will be set for each resource assignment later
7138 l_prd_mask_st_date_tbl.extend;
7139 l_prd_mask_st_date_tbl(l_prd_mask_st_date_tbl.COUNT):=p_last_pd_af_pm_st_dt;
7140 l_prd_mask_end_date_tbl.extend;
7141
7142 --log1('----- STAGE 3P-------');
7143 IF l_debug_mode = 'Y' THEN
7144 pa_debug.g_err_stage := 'About to loop thru inf_tbl_data_csr';
7145 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7146 END IF;
7147 IF p_version_info_rec.x_version_type = 'COST' THEN
7148 l_allow_qty_flag := p_version_info_rec.x_cost_quantity_flag;
7149 ELSIF p_version_info_rec.x_version_type = 'REVENUE' THEN
7150 l_allow_qty_flag := p_version_info_rec.x_rev_quantity_flag;
7151 ELSIF p_version_info_rec.x_version_type = 'ALL' THEN
7152 l_allow_qty_flag := p_version_info_rec.x_all_quantity_flag;
7153 END IF;
7154
7155 /*FOR l_curr_rec IN inf_tbl_data_csr LOOP*/
7156 -- Changing the for loop to a while loop so that the variable can be incremented inside
7157 -- This is for bug 4477397
7158 tt := 0;
7159 while tt <= p_inf_tbl_rec_tbl.COUNT
7160 LOOP
7161 tt := tt + 1;
7162
7163 IF tt > p_inf_tbl_rec_tbl.COUNT THEN
7164 EXIT;
7165 END IF;
7166
7167 l_curr_rec:=NULL;
7168 IF l_skip_ra_flag ='N' THEN
7169
7170 -- FETCH inf_tbl_data_csr INTO l_curr_rec;
7171 l_curr_rec := p_inf_tbl_rec_tbl(tt);
7172
7173 ELSE
7174
7175 LOOP
7176
7177 IF tt <= p_inf_tbl_rec_tbl.COUNT THEN
7178 l_curr_rec := p_inf_tbl_rec_tbl(tt);
7179 ELSE
7180 l_curr_rec := NULL;
7181 END IF;
7182
7183 EXIT WHEN l_curr_rec.task_id IS NULL OR
7184 l_curr_rec.task_id <> l_skip_task_id OR
7185 l_curr_rec.resource_list_member_id <> l_skip_rlm_id OR
7186 ((l_Cbs_Enabled = 'Y' and l_curr_rec.cbs_element_id <> l_skip_cbs_element_id) OR l_Cbs_Enabled = 'N');-- cbs enhancement changes bug#16445106
7187 l_curr_rec:=NULL;
7188 tt := tt + 1;
7189 -- FETCH inf_tbl_data_csr INTO l_curr_rec;
7190
7191 END LOOP;
7192
7193 END IF;
7194
7195 IF tt > p_inf_tbl_rec_tbl.COUNT THEN
7196 EXIT;
7197 END IF;
7198
7199 l_skip_ra_flag := 'N';
7200 l_skip_task_id := NULL;
7201 l_skip_rlm_id := NULL;
7202 l_skip_cbs_element_id := NULL; -- cbs enhancement changes bug#16445106
7203 --EXIT WHEN l_curr_rec.task_id IS NULL;
7204 --log1('----- STAGE X1-------');
7205 --Reset l_extend_pbl_out_tbls_flag. This flag will be set to Y for each planning
7206 --TXN so that the OUT tbls for process_budget_lines are correctly increased in length
7207 l_extend_pbl_out_tbls_flag := 'N';
7208
7209 --Loop thru the p_budget_lines_tbl to find the record with RA/Curr same as
7210 --l_curr_rec
7211 LOOP
7212 --log1('----- STAGE X2-------');
7213 EXIT WHEN p_budget_lines_tbl(l_bl_index).pa_task_id = l_curr_rec.task_id AND
7214 p_budget_lines_tbl(l_bl_index).resource_list_member_id = l_curr_rec.resource_list_member_id AND
7215 p_budget_lines_tbl(l_bl_index).txn_currency_code = l_curr_rec.txn_currency_code AND
7216 ((l_Cbs_Enabled = 'Y' and p_budget_lines_tbl(l_bl_index).cbs_element_id = l_curr_rec.cbs_element_id) OR l_Cbs_Enabled = 'N'); -- cbs enhancement changes bug#16445106
7217
7218 l_bl_index:=l_bl_index+1;
7219 --log1('----- STAGE X3-------');
7220 END LOOP;
7221
7222 IF p_planning_start_date_tbl(l_bl_index) IS NOT NULL AND
7223 p_planning_end_date_tbl(l_bl_index) IS NOT NULL
7224 AND (p_etc_start_date IS NULL OR ( p_etc_start_date <= p_planning_end_date_tbl(l_bl_index) ) ) THEN --Bug 10394190
7225
7226 --For each resource assignment find out the no. of periods in the period mask
7227 --that would fall between the planning start/end dates. If n such periods exist,
7228 --then n rows in the OUT tbls for each RA/currency/amount type should be prepared
7229 IF l_curr_rec.task_id <> l_prev_task_id OR
7230 NVL(l_curr_rec.resource_list_member_id,'-99') <> l_prev_rlm_id OR
7231 ((l_Cbs_Enabled = 'Y' and l_curr_rec.cbs_element_id<>l_prev_cbs_element_id) OR l_Cbs_Enabled = 'N') -- cbs enhancement changes bug#16445106
7232 THEN
7233
7234 IF l_debug_mode = 'Y' THEN
7235 pa_debug.g_err_stage := 'Finding out no. of periods for RA with task_id '||l_curr_rec.task_id||' Res '||l_curr_rec.resource_list_member_id;
7236 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7237 END IF;
7238
7239 /*IF l_debug_mode = 'Y' THEN
7240 pa_debug.g_err_stage := 'p_version_info_rec.x_org_id: ' || p_version_info_rec.x_org_id;
7241 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7242 pa_debug.g_err_stage := 'l_bl_index: ' || l_bl_index;
7243 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7244 pa_debug.g_err_stage := 'p_planning_start_date_tbl(l_bl_index): ' || p_planning_start_date_tbl(l_bl_index);
7245 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7246 pa_debug.g_err_stage := 'p_version_info_rec.x_time_phased_code: ' || p_version_info_rec.x_time_phased_code;
7247 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7248 pa_debug.g_err_stage := 'p_planning_end_date_tbl(l_bl_index): ' || p_planning_end_date_tbl(l_bl_index);
7249 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
7250 END IF;*/
7251 --Populate the preceeding and succeeding buckets in the period mask table
7252 --log1('----- STAGE X3.1------- '||p_version_info_rec.x_org_id);
7253 --log1('----- STAGE X3.2------- '||l_bl_index);
7254 --log1('----- STAGE X3.3------- '||p_planning_start_date_tbl(l_bl_index));
7255 --log1('----- STAGE X3.4------- '|| p_version_info_rec.x_org_id);
7256 --log1('----- STAGE X3.5------- '|| p_version_info_rec.x_time_phased_code);
7257 --log1('----- STAGE X3.6------- '|| p_planning_end_date_tbl(l_bl_index));
7258 SELECT gl.start_date
7259 INTO l_prd_mask_st_date_tbl(1)
7260 FROM gl_periods gl,
7261 pa_implementations_all pim,
7262 gl_sets_of_books gsb
7263 WHERE pim.org_id = p_version_info_rec.x_org_id
7264 AND gsb.set_of_books_id = pim.set_of_books_id
7265 AND gl.period_set_name= DECODE(p_version_info_rec.x_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
7266 AND gl.period_type = DECODE(p_version_info_rec.x_time_phased_code,
7267 'P',pim.pa_period_type,
7268 'G',gsb.accounted_period_type)
7269 AND gl.adjustment_period_flag='N'
7270 AND gl.start_date <= p_planning_start_date_tbl(l_bl_index)
7271 AND gl.end_date >=p_planning_start_date_tbl(l_bl_index);
7272
7273 SELECT gl.end_date
7274 INTO l_prd_mask_end_date_tbl(l_prd_mask_end_date_tbl.COUNT)
7275 FROM gl_periods gl,
7276 pa_implementations_all pim,
7277 gl_sets_of_books gsb
7278 WHERE pim.org_id = p_version_info_rec.x_org_id
7279 AND gsb.set_of_books_id = pim.set_of_books_id
7280 AND gl.period_set_name= DECODE(p_version_info_rec.x_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
7281 AND gl.period_type = DECODE(p_version_info_rec.x_time_phased_code,
7282 'P',pim.pa_period_type,
7283 'G',gsb.accounted_period_type)
7284 AND gl.adjustment_period_flag='N'
7285 AND gl.start_date <= p_planning_end_date_tbl(l_bl_index)
7286 AND gl.end_date >=p_planning_end_date_tbl(l_bl_index);
7287
7288 l_extend_pbl_out_tbls_flag:= 'Y';
7289 l_plan_txn_attrs_copied_flag := 'N';
7290 l_prev_task_id:=l_curr_rec.task_id;
7291 l_prev_rlm_id:=l_curr_rec.resource_list_member_id;
7292 l_prev_cbs_element_id:=l_curr_rec.cbs_element_id;-- cbs enhancement changes bug#16445106
7293 l_prev_txn_curr_code:=l_curr_rec.txn_currency_code;
7294
7295 --Find out the flexible periods in the period mask that should be considered
7296 --based on RA's planning start/end dates
7297 l_st_index_in_prd_mask := NULL;
7298 l_end_index_in_prd_mask := NULL;
7299 l_sd_prd_exists_flag := NULL;
7300 l_pd_prd_exists_flag := NULL;
7301 l_num_of_prds_for_plan_txn :=0;
7302
7303 --log1('----- STAGE X4-------');
7304 IF NVL(p_etc_start_date,p_planning_start_date_tbl(l_bl_index)) < p_prd_mask_st_date_tbl(1) THEN
7305 --log1('----- STAGE X5-------');
7306 l_st_index_in_prd_mask:=1;
7307 l_pd_prd_exists_flag :='Y';
7308
7309 END IF;
7310
7311 --log1('----- STAGE X5.1------- '||l_bl_index);
7312 --log1('----- STAGE X5.2------- '||p_planning_end_date_tbl(l_bl_index) );
7313 --log1('----- STAGE X5.3------- '||p_prd_mask_end_date_tbl(p_prd_mask_end_date_tbl.COUNT));
7314 IF p_planning_end_date_tbl(l_bl_index) > p_prd_mask_end_date_tbl(p_prd_mask_end_date_tbl.COUNT) THEN
7315
7316 l_end_index_in_prd_mask:=l_prd_mask_end_date_tbl.COUNT;
7317 l_sd_prd_exists_flag :='Y';
7318
7319 END IF;
7320
7321 --log1('----- STAGE X5.4------- '||l_st_index_in_prd_mask);
7322 --log1('----- STAGE X5.5------- '||l_end_index_in_prd_mask);
7323 IF l_st_index_in_prd_mask IS NULL OR
7324 l_end_index_in_prd_mask IS NULL THEN
7325
7326 --Find out the flexbile period in which the planning start/end dates fall
7327 FOR kk IN 2..l_prd_mask_st_date_tbl.LAST-1 LOOP
7328
7329 IF l_st_index_in_prd_mask IS NULL THEN
7330
7331 --log1('----- STAGE X5.6------- '||l_bl_index);
7332 --log1('----- STAGE X5.7------- '||p_planning_start_date_tbl(l_bl_index));
7333 --log1('----- STAGE X5.8------- '||kk);
7334 --log1('----- STAGE X5.9------- '|| l_prd_mask_st_date_tbl(kk));
7335 --log1('----- STAGE X5.10------- '|| l_prd_mask_end_date_tbl(kk));
7336 IF NVL(p_etc_start_date,p_planning_start_date_tbl(l_bl_index)) >= l_prd_mask_st_date_tbl(kk) AND
7337 NVL(p_etc_start_date,p_planning_start_date_tbl(l_bl_index)) <= l_prd_mask_end_date_tbl(kk) THEN
7338
7339 l_st_index_in_prd_mask:= kk;
7340
7341 END IF;
7342
7343 END IF;
7344
7345 IF l_end_index_in_prd_mask IS NULL THEN
7346
7347 --log1('----- STAGE X5.10------- '||l_bl_index);
7348 --log1('----- STAGE X5.11------- '||p_planning_end_date_tbl(l_bl_index));
7349 --log1('----- STAGE X5.12------- '||kk);
7350 --log1('----- STAGE X5.13------- '|| l_prd_mask_st_date_tbl(kk));
7351 --log1('----- STAGE X5.14------- '|| l_prd_mask_end_date_tbl(kk));
7352 IF p_planning_end_date_tbl(l_bl_index) >= l_prd_mask_st_date_tbl(kk) AND
7353 p_planning_end_date_tbl(l_bl_index) <= l_prd_mask_end_date_tbl(kk) THEN
7354
7355 l_end_index_in_prd_mask:= kk;
7356
7357 END IF;
7358
7359 END IF;
7360
7361 IF l_st_index_in_prd_mask IS NOT NULL AND
7362 l_end_index_in_prd_mask IS NOT NULL THEN
7363
7364 EXIT;
7365
7366 END IF;
7367
7368 END LOOP;--FOR kk IN 2..l_prd_mask_st_date_tbl LOOP
7369
7370 END IF;--IF l_st_index_in_prd_mask IS NULL OR
7371
7372 IF l_st_index_in_prd_mask IS NULL AND
7373 l_end_index_in_prd_mask IS NOT NULL THEN
7374
7375 l_st_index_in_prd_mask :=l_end_index_in_prd_mask;
7376
7377 END IF;
7378
7379 IF l_st_index_in_prd_mask IS NOT NULL AND
7380 l_end_index_in_prd_mask IS NULL THEN
7381
7382 l_end_index_in_prd_mask := l_st_index_in_prd_mask;
7383
7384 END IF;
7385
7386 l_num_of_prds_for_plan_txn := l_end_index_in_prd_mask - l_st_index_in_prd_mask +1;
7387
7388 l_extend_pbl_out_tbls_flag := 'Y';
7389
7390 END IF;--IF l_curr_rec.task_id <> l_prev_task_id OR
7391
7392 --Currency /amount type of this record is different from one that of previous record.
7393 IF l_prev_txn_curr_code <> l_curr_rec.txn_currency_code THEN
7394
7395 l_extend_pbl_out_tbls_flag:= 'Y';
7396 l_plan_txn_attrs_copied_flag := 'N';
7397 l_prev_txn_curr_code:=l_curr_rec.txn_currency_code;
7398
7399 END IF;
7400
7401 --Extend the OUT tbls and populate the Line start/end tbls. Header level tbls such as
7402 --task/rlm etc will also be populated.
7403 IF l_extend_pbl_out_tbls_flag ='Y' THEN
7404
7405 l_extend_pbl_out_tbls_flag := 'N';
7406 --This variable will be used to store the index till which the OUT tbls for prepare_pbl_input are
7407 --populated.
7408 l_prev_pbl_tbl_count := x_task_id_tbl.COUNT;
7409 x_task_id_tbl.extend(l_num_of_prds_for_plan_txn);
7410 x_rlm_id_tbl.extend(l_num_of_prds_for_plan_txn);
7411 x_cbs_element_id_tbl.extend(l_num_of_prds_for_plan_txn);-- cbs enhancement changes bug#16445106
7412 x_ra_id_tbl.extend(l_num_of_prds_for_plan_txn);
7413 x_spread_curve_id_tbl.extend(l_num_of_prds_for_plan_txn);
7414 x_mfc_cost_type_id_tbl.extend(l_num_of_prds_for_plan_txn);
7415 x_etc_method_code_tbl.extend(l_num_of_prds_for_plan_txn);
7416 x_sp_fixed_date_tbl.extend(l_num_of_prds_for_plan_txn);
7417 x_res_class_code_tbl.extend(l_num_of_prds_for_plan_txn);
7418 x_rate_based_flag_tbl.extend(l_num_of_prds_for_plan_txn);
7419 x_rbs_elem_id_tbl.extend(l_num_of_prds_for_plan_txn);
7420 x_txn_currency_code_tbl.extend(l_num_of_prds_for_plan_txn);
7421 x_planning_start_date_tbl.extend(l_num_of_prds_for_plan_txn);
7422 x_planning_end_date_tbl.extend(l_num_of_prds_for_plan_txn);
7423 x_total_qty_tbl.extend(l_num_of_prds_for_plan_txn);
7424 x_total_raw_cost_tbl.extend(l_num_of_prds_for_plan_txn);
7425 x_total_burdened_cost_tbl.extend(l_num_of_prds_for_plan_txn);
7426 x_total_revenue_tbl.extend(l_num_of_prds_for_plan_txn);
7427 x_raw_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7428 x_burdened_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7429 x_bill_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7430 x_line_start_date_tbl.extend(l_num_of_prds_for_plan_txn);
7431 x_line_end_date_tbl.extend(l_num_of_prds_for_plan_txn);
7432 x_proj_cost_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7433 x_proj_cost_rate_date_type_tbl.extend(l_num_of_prds_for_plan_txn);
7434 x_proj_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7435 x_proj_cost_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7436 x_proj_rev_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7437 x_proj_rev_rate_date_type_tbl.extend(l_num_of_prds_for_plan_txn);
7438 x_proj_rev_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7439 x_proj_rev_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7440 x_pfunc_cost_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7441 x_pfunc_cost_rate_date_typ_tbl.extend(l_num_of_prds_for_plan_txn);
7442 x_pfunc_cost_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7443 x_pfunc_cost_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7444 x_pfunc_rev_rate_type_tbl.extend(l_num_of_prds_for_plan_txn);
7445 x_pfunc_rev_rate_date_type_tbl.extend(l_num_of_prds_for_plan_txn);
7446 x_pfunc_rev_rate_tbl.extend(l_num_of_prds_for_plan_txn);
7447 x_pfunc_rev_rate_date_tbl.extend(l_num_of_prds_for_plan_txn);
7448 x_delete_flag_tbl.extend(l_num_of_prds_for_plan_txn);
7449 x_change_reason_code_tbl.extend(l_num_of_prds_for_plan_txn);
7450 x_description_tbl.extend(l_num_of_prds_for_plan_txn);
7451
7452 --log1('----- STAGE X5.15.0------- '||l_st_index_in_prd_mask);
7453 --log1('----- STAGE X5.15.0.1------- '||l_end_index_in_prd_mask);
7454
7455 IF l_st_index_in_prd_mask IS NOT NULL THEN
7456
7457 FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7458
7459 l_tmp_index := l_prev_pbl_tbl_count + kk - l_st_index_in_prd_mask + 1;
7460 --log1('----- STAGE X5.15.1 ------- '||l_tmp_index);
7461
7462 x_line_start_date_tbl(l_tmp_index):=l_prd_mask_st_date_tbl(kk);
7463
7464 --log1('----- STAGE X5.15.2 ------- ');
7465
7466 x_line_end_date_tbl(l_tmp_index):=l_prd_mask_end_date_tbl(kk);
7467
7468 --log1('----- STAGE X5.15.3 ------- ');
7469 x_task_id_tbl(l_tmp_index) := l_curr_rec.task_id;
7470 x_rlm_id_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).resource_list_member_id;
7471 x_cbs_element_id_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).cbs_element_id;-- cbs enhancement changes bug#16445106
7472 x_ra_id_tbl(l_tmp_index) := p_ra_id_tbl(l_bl_index);
7473 x_txn_currency_code_tbl(l_tmp_index) := l_curr_rec.txn_currency_code;
7474 --log1('----- STAGE X5.15.4 ------- ');
7475 x_planning_start_date_tbl(l_tmp_index):= p_planning_start_date_tbl(l_bl_index);
7476 x_planning_end_date_tbl(l_tmp_index) := p_planning_end_date_tbl(l_bl_index);
7477 x_spread_curve_id_tbl(l_tmp_index) := p_spread_curve_id_tbl(l_bl_index);
7478 --log1('----- STAGE X5.15.5 ------- ');
7479 x_mfc_cost_type_id_tbl(l_tmp_index) := p_mfc_cost_type_id_tbl(l_bl_index);
7480 x_etc_method_code_tbl(l_tmp_index) := p_etc_method_code_tbl(l_bl_index);
7481 x_sp_fixed_date_tbl(l_tmp_index) := p_sp_fixed_date_tbl(l_bl_index);
7482 --log1('----- STAGE X5.15.6 ------- ');
7483 x_res_class_code_tbl(l_tmp_index) := p_res_class_code_tbl(l_bl_index);
7484 x_rate_based_flag_tbl(l_tmp_index) := p_rate_based_flag_tbl(l_bl_index);
7485 x_rbs_elem_id_tbl(l_tmp_index) := p_rbs_elem_id_tbl(l_bl_index);
7486 --Assigning N since for periodic layouts, amounts a type with delete flag as N would be NULLED
7487 --out
7488 x_delete_flag_tbl(l_tmp_index) :='N';
7489
7490
7491
7492 END LOOP;--FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7493
7494 END IF;--IF l_st_index_in_prd_mask IS NOT NULL THEN
7495
7496 END IF;--IF l_extend_pbl_out_tbls_flag ='Y' THEN
7497
7498 --log1('----- STAGE X5.16------- ');
7499 IF l_st_index_in_prd_mask IS NOT NULL THEN
7500
7501 --For the current record, populate amounts for appropriate amount types
7502 FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7503
7504 IF l_curr_rec.delete_flag ='Y' THEN
7505
7506 l_amount := l_g_miss_num;
7507
7508 ELSE
7509
7510 IF kk = 1 THEN
7511 --Indicates that the flex period corresponds to FIRST period before the first flexible period in
7512 --the period mask. This period stands for PD period
7513 l_prd_index := 'PD';
7514
7515 ELSIF kk = l_prd_mask_st_date_tbl.COUNT THEN
7516 --Indicates that the flex period corresponds to FIRST period AFTER the LAST flexible period in
7517 --the period mask. This period stands for SD period
7518 l_prd_index := 'SD';
7519
7520 ELSE
7521
7522 --kk-1 should be used since the periods in the period mask are
7523 --stored staring from the second bucket of l_prd_mask_st_date_tbl
7524 l_prd_index := to_char(kk-1);
7525
7526 END IF;
7527
7528 l_amount := get_amount_in_prd_x(p_rec => l_curr_rec,
7529 p_prd => l_prd_index);
7530
7531 END IF;
7532
7533 l_tmp_index := l_prev_pbl_tbl_count + kk - l_st_index_in_prd_mask + 1;
7534
7535 --In the below block amounts that should be passed to the calculate API will be derived
7536 --In case of Budgets, only one column per amount type is editable
7537 --In case of Forecasts two columns (Forecast and ETC) are editable.
7538 ---->If both are hidden in the layout NULL will be passed
7539 ---->If ETC is hidden and Forecast is displayed in the layout then Forecast entered will be passed
7540 ---->If Forecast is hidden and ETC is displayed in the layout then ETC entered + Actuals will be passed
7541 ---->If both Forecast and ETC are displayed in the layout then
7542 ------>If Forecast is entered is different from the existing value then it will be passed
7543 ------>Else If ETC entered is different from existing value then ETC + actuals will be passed
7544 ------>Else NULL will be passed
7545 ---->Note that amount columns in budget lines tbl will contain the forecast values and ETC values
7546 ---->are passed as input to this API
7547 IF l_curr_rec.amount_type_code = 'TOTAL_BURDENED_COST' THEN
7548
7549 x_total_burdened_cost_tbl(l_tmp_index) := l_amount;
7550
7551 ELSIF l_curr_rec.amount_type_code = 'FCST_BURDENED_COST' THEN
7552
7553 x_total_burdened_cost_tbl(l_tmp_index) := l_amount;
7554
7555 ELSIF l_curr_rec.amount_type_code = 'ETC_BURDENED_COST' THEN
7556
7557 get_total_fcst_amounts
7558 (p_project_id =>p_project_id,
7559 p_budget_version_id =>p_budget_version_id,
7560 p_task_id =>l_curr_rec.task_id,
7561 p_resource_list_member_id =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7562 p_cbs_element_id =>p_budget_lines_tbl(l_bl_index).cbs_element_id, -- cbs enhancement changes bug#16445106
7563 p_txn_currency_code =>l_curr_rec.txn_currency_code,
7564 p_line_start_date =>l_prd_mask_st_date_tbl(kk),
7565 p_line_end_date =>l_prd_mask_end_date_tbl(kk),
7566 p_prd_mask_st_date_tbl =>l_prd_mask_st_date_tbl,
7567 p_prd_mask_end_date_tbl =>l_prd_mask_end_date_tbl,
7568 p_st_index_in_prd_mask =>l_st_index_in_prd_mask,
7569 p_end_index_in_prd_mask =>l_end_index_in_prd_mask,
7570 p_etc_start_date =>p_etc_start_date,
7571 p_etc_quantity =>NULL,
7572 p_fcst_quantity =>NULL,
7573 p_etc_raw_cost =>NULL,
7574 p_fcst_raw_cost =>NULL,
7575 p_etc_burd_cost =>l_amount,
7576 p_fcst_burd_cost =>x_total_burdened_cost_tbl(l_tmp_index),
7577 p_etc_revenue =>NULL,
7578 p_fcst_revenue =>NULL,
7579 px_cached_fcst_qty_tbl =>l_cached_fcst_qty_tbl,
7580 px_cached_fcst_raw_cost_tbl =>l_cached_fcst_raw_cost_tbl,
7581 px_cached_fcst_burd_cost_tbl =>l_cached_fcst_burd_cost_tbl,
7582 px_cached_fcst_revenue_tbl =>l_cached_fcst_revenue_tbl,
7583 px_cached_etc_qty_tbl =>l_cached_etc_qty_tbl,
7584 px_cached_etc_raw_cost_tbl =>l_cached_etc_raw_cost_tbl,
7585 px_cached_etc_burd_cost_tbl =>l_cached_etc_burd_cost_tbl,
7586 px_cached_etc_revenue_tbl =>l_cached_etc_revenue_tbl,
7587 x_total_quantity =>l_tmp_quantity,
7588 x_total_raw_cost =>l_tmp_raw_cost,
7589 x_total_burd_cost =>x_total_burdened_cost_tbl(l_tmp_index),
7590 x_total_revenue =>l_tmp_revenue,
7591 x_return_status =>x_return_status,
7592 x_msg_count =>x_msg_count,
7593 x_msg_data =>x_msg_data );
7594
7595 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7596 IF l_debug_mode = 'Y' THEN
7597 pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7598 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7599 END IF;
7600 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7601 END IF;
7602
7603
7604 ELSIF l_curr_rec.amount_type_code = 'TOTAL_RAW_COST' THEN
7605
7606 x_total_raw_cost_tbl(l_tmp_index) := l_amount;
7607
7608 ELSIF l_curr_rec.amount_type_code = 'FCST_RAW_COST' THEN
7609
7610 x_total_raw_cost_tbl(l_tmp_index) := l_amount;
7611
7612 ELSIF l_curr_rec.amount_type_code = 'ETC_RAW_COST' THEN
7613
7614 get_total_fcst_amounts
7615 (p_project_id =>p_project_id,
7616 p_budget_version_id =>p_budget_version_id,
7617 p_task_id =>l_curr_rec.task_id,
7618 p_resource_list_member_id =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7619 p_cbs_element_id =>p_budget_lines_tbl(l_bl_index).cbs_element_id, -- cbs enhancement changes bug#16445106
7620 p_txn_currency_code =>l_curr_rec.txn_currency_code,
7621 p_line_start_date =>l_prd_mask_st_date_tbl(kk),
7622 p_line_end_date =>l_prd_mask_end_date_tbl(kk),
7623 p_prd_mask_st_date_tbl =>l_prd_mask_st_date_tbl,
7624 p_prd_mask_end_date_tbl =>l_prd_mask_end_date_tbl,
7625 p_st_index_in_prd_mask =>l_st_index_in_prd_mask,
7626 p_end_index_in_prd_mask =>l_end_index_in_prd_mask,
7627 p_etc_start_date =>p_etc_start_date,
7628 p_etc_quantity =>NULL,
7629 p_fcst_quantity =>NULL,
7630 p_etc_raw_cost =>l_amount,
7631 p_fcst_raw_cost =>x_total_raw_cost_tbl(l_tmp_index),
7632 p_etc_burd_cost =>NULL,
7633 p_fcst_burd_cost =>NULL,
7634 p_etc_revenue =>NULL,
7635 p_fcst_revenue =>NULL,
7636 px_cached_fcst_qty_tbl =>l_cached_fcst_qty_tbl,
7637 px_cached_fcst_raw_cost_tbl =>l_cached_fcst_raw_cost_tbl,
7638 px_cached_fcst_burd_cost_tbl =>l_cached_fcst_burd_cost_tbl,
7639 px_cached_fcst_revenue_tbl =>l_cached_fcst_revenue_tbl,
7640 px_cached_etc_qty_tbl =>l_cached_etc_qty_tbl,
7641 px_cached_etc_raw_cost_tbl =>l_cached_etc_raw_cost_tbl,
7642 px_cached_etc_burd_cost_tbl =>l_cached_etc_burd_cost_tbl,
7643 px_cached_etc_revenue_tbl =>l_cached_etc_revenue_tbl,
7644 x_total_quantity =>l_tmp_quantity,
7645 x_total_raw_cost =>x_total_raw_cost_tbl(l_tmp_index),
7646 x_total_burd_cost =>l_tmp_burd_cost,
7647 x_total_revenue =>l_tmp_revenue,
7648 x_return_status =>x_return_status,
7649 x_msg_count =>x_msg_count,
7650 x_msg_data =>x_msg_data );
7651
7652 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7653 IF l_debug_mode = 'Y' THEN
7654 pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7655 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7656 END IF;
7657 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7658 END IF;
7659
7660
7661 ELSIF l_curr_rec.amount_type_code = 'TOTAL_REV' THEN
7662
7663 x_total_revenue_tbl(l_tmp_index) := l_amount;
7664
7665 ELSIF l_curr_rec.amount_type_code = 'FCST_REVENUE' THEN
7666
7667 x_total_revenue_tbl(l_tmp_index) := l_amount;
7668
7669 ELSIF l_curr_rec.amount_type_code = 'ETC_REVENUE' THEN
7670
7671 get_total_fcst_amounts
7672 (p_project_id =>p_project_id,
7673 p_budget_version_id =>p_budget_version_id,
7674 p_task_id =>l_curr_rec.task_id,
7675 p_resource_list_member_id =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7676 p_cbs_element_id =>p_budget_lines_tbl(l_bl_index).cbs_element_id, -- cbs enhancement changes bug#16445106
7677 p_txn_currency_code =>l_curr_rec.txn_currency_code,
7678 p_line_start_date =>l_prd_mask_st_date_tbl(kk),
7679 p_line_end_date =>l_prd_mask_end_date_tbl(kk),
7680 p_prd_mask_st_date_tbl =>l_prd_mask_st_date_tbl,
7681 p_prd_mask_end_date_tbl =>l_prd_mask_end_date_tbl,
7682 p_st_index_in_prd_mask =>l_st_index_in_prd_mask,
7683 p_end_index_in_prd_mask =>l_end_index_in_prd_mask,
7684 p_etc_start_date =>p_etc_start_date,
7685 p_etc_quantity =>NULL,
7686 p_fcst_quantity =>NULL,
7687 p_etc_raw_cost =>NULL,
7688 p_fcst_raw_cost =>NULL,
7689 p_etc_burd_cost =>NULL,
7690 p_fcst_burd_cost =>NULL,
7691 p_etc_revenue =>l_amount,
7692 p_fcst_revenue =>x_total_revenue_tbl(l_tmp_index),
7693 px_cached_fcst_qty_tbl =>l_cached_fcst_qty_tbl,
7694 px_cached_fcst_raw_cost_tbl =>l_cached_fcst_raw_cost_tbl,
7695 px_cached_fcst_burd_cost_tbl =>l_cached_fcst_burd_cost_tbl,
7696 px_cached_fcst_revenue_tbl =>l_cached_fcst_revenue_tbl,
7697 px_cached_etc_qty_tbl =>l_cached_etc_qty_tbl,
7698 px_cached_etc_raw_cost_tbl =>l_cached_etc_raw_cost_tbl,
7699 px_cached_etc_burd_cost_tbl =>l_cached_etc_burd_cost_tbl,
7700 px_cached_etc_revenue_tbl =>l_cached_etc_revenue_tbl,
7701 x_total_quantity =>l_tmp_quantity,
7702 x_total_raw_cost =>l_tmp_raw_cost,
7703 x_total_burd_cost =>l_tmp_burd_cost,
7704 x_total_revenue =>x_total_revenue_tbl(l_tmp_index),
7705 x_return_status =>x_return_status,
7706 x_msg_count =>x_msg_count,
7707 x_msg_data =>x_msg_data );
7708
7709 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7710 IF l_debug_mode = 'Y' THEN
7711 pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7712 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7713 END IF;
7714 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7715 END IF;
7716
7717
7718 ELSIF l_curr_rec.amount_type_code = 'TOTAL_QTY' THEN
7719
7720 x_total_qty_tbl(l_tmp_index) := l_amount;
7721
7722 ELSIF l_curr_rec.amount_type_code = 'FCST_QTY' THEN
7723
7724 x_total_qty_tbl(l_tmp_index) := l_amount;
7725
7726 ELSIF l_curr_rec.amount_type_code = 'ETC_QTY' THEN
7727
7728 get_total_fcst_amounts
7729 (p_project_id =>p_project_id,
7730 p_budget_version_id =>p_budget_version_id,
7731 p_task_id =>l_curr_rec.task_id,
7732 p_resource_list_member_id =>p_budget_lines_tbl(l_bl_index).resource_list_member_id,
7733 p_cbs_element_id =>p_budget_lines_tbl(l_bl_index).cbs_element_id, -- cbs enhancement changes bug#16445106
7734 p_txn_currency_code =>l_curr_rec.txn_currency_code,
7735 p_line_start_date =>l_prd_mask_st_date_tbl(kk),
7736 p_line_end_date =>l_prd_mask_end_date_tbl(kk),
7737 p_prd_mask_st_date_tbl =>l_prd_mask_st_date_tbl,
7738 p_prd_mask_end_date_tbl =>l_prd_mask_end_date_tbl,
7739 p_st_index_in_prd_mask =>l_st_index_in_prd_mask,
7740 p_end_index_in_prd_mask =>l_end_index_in_prd_mask,
7741 p_etc_start_date =>p_etc_start_date,
7742 p_etc_quantity =>l_amount,
7743 p_fcst_quantity =>x_total_qty_tbl(l_tmp_index),
7744 p_etc_raw_cost =>NULL,
7745 p_fcst_raw_cost =>NULL,
7746 p_etc_burd_cost =>NULL,
7747 p_fcst_burd_cost =>NULL,
7748 p_etc_revenue =>NULL,
7749 p_fcst_revenue =>NULL,
7750 px_cached_fcst_qty_tbl =>l_cached_fcst_qty_tbl,
7751 px_cached_fcst_raw_cost_tbl =>l_cached_fcst_raw_cost_tbl,
7752 px_cached_fcst_burd_cost_tbl =>l_cached_fcst_burd_cost_tbl,
7753 px_cached_fcst_revenue_tbl =>l_cached_fcst_revenue_tbl,
7754 px_cached_etc_qty_tbl =>l_cached_etc_qty_tbl,
7755 px_cached_etc_raw_cost_tbl =>l_cached_etc_raw_cost_tbl,
7756 px_cached_etc_burd_cost_tbl =>l_cached_etc_burd_cost_tbl,
7757 px_cached_etc_revenue_tbl =>l_cached_etc_revenue_tbl,
7758 x_total_quantity =>x_total_qty_tbl(l_tmp_index),
7759 x_total_raw_cost =>l_tmp_raw_cost,
7760 x_total_burd_cost =>l_tmp_burd_cost,
7761 x_total_revenue =>l_tmp_revenue,
7762 x_return_status =>x_return_status,
7763 x_msg_count =>x_msg_count,
7764 x_msg_data =>x_msg_data );
7765
7766 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7767 IF l_debug_mode = 'Y' THEN
7768 pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
7769 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7770 END IF;
7771 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7772 END IF;
7773
7774 ELSIF l_curr_rec.amount_type_code IN ('ETC_BURDENED_COST_RATE','BURDENED_COST_RATE') THEN
7775
7776 x_burdened_cost_rate_tbl(l_tmp_index) := l_amount;
7777
7778 ELSIF l_curr_rec.amount_type_code IN ('RAW_COST_RATE','ETC_RAW_COST_RATE') THEN
7779
7780 x_raw_cost_rate_tbl(l_tmp_index) := l_amount;
7781
7782 ELSIF l_curr_rec.amount_type_code IN ('BILL_RATE','ETC_BILL_RATE') THEN
7783
7784 x_bill_rate_tbl(l_tmp_index) := l_amount;
7785
7786 END IF;
7787
7788 END LOOP;--FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7789
7790 --log1('----- STAGE X5.17------- ');
7791
7792 IF nvl(l_curr_rec.delete_flag,'N') <> 'Y' AND
7793 l_plan_txn_attrs_copied_flag ='N' THEN
7794
7795 FOR kk IN l_st_index_in_prd_mask..l_end_index_in_prd_mask LOOP
7796
7797 l_tmp_index := l_prev_pbl_tbl_count + kk - l_st_index_in_prd_mask + 1;
7798
7799 --log1('----- STAGE X5.17.1------- '||l_tmp_index);
7800
7801 x_proj_cost_rate_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_cost_rate_type;
7802 x_proj_cost_rate_date_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_cost_rate_date_type;
7803 x_proj_cost_rate_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_cost_exchange_rate;
7804 x_proj_cost_rate_date_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_cost_rate_date;
7805 --log1('----- STAGE X5.17.2------- ');
7806 x_proj_rev_rate_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_rev_rate_type;
7807 x_proj_rev_rate_date_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_rev_rate_date_type;
7808 x_proj_rev_rate_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_rev_exchange_rate;
7809 x_proj_rev_rate_date_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).project_rev_rate_date;
7810 --log1('----- STAGE X5.17.3------- ');
7811 x_pfunc_cost_rate_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_cost_rate_type;
7812 x_pfunc_cost_rate_date_typ_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_cost_rate_date_type;
7813 x_pfunc_cost_rate_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_cost_exchange_rate;
7814 x_pfunc_cost_rate_date_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_cost_rate_date;
7815 --log1('----- STAGE X5.17.4------- ');
7816 x_pfunc_rev_rate_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_rev_rate_type;
7817 x_pfunc_rev_rate_date_type_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_rev_rate_date_type;
7818 x_pfunc_rev_rate_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_rev_exchange_rate;
7819 x_pfunc_rev_rate_date_tbl(l_tmp_index) := p_budget_lines_tbl(l_bl_index).projfunc_rev_rate_date;
7820
7821 -- stamping null for change reason and description
7822 x_change_reason_code_tbl(l_tmp_index) := NULL;
7823 x_description_tbl(l_tmp_index) := NULL;
7824
7825 END LOOP;--IF nvl(l_curr_rec.delete_flag,'N') <> 'Y' AND
7826
7827 l_plan_txn_attrs_copied_flag :='Y';
7828
7829 END IF;
7830
7831 END IF;--IF l_st_index_in_prd_mask IS NOT NULL THEN
7832
7833 --Bug 6877488 : The below code should be executed only when the planning dates are null. Added that
7834 --condition to remove the case where planning dates are not null but etc start date is >= planning end date
7835 ELSIF p_planning_start_date_tbl(l_bl_index) IS NULL AND
7836 p_planning_end_date_tbl(l_bl_index) IS NULL THEN
7837
7838 --Planning Start/End Dates both are null. This can happen only for new resource assignments when
7839
7840 ----1.Delete flag is Y or
7841 ----2.Amounts are not entered at all.
7842 --In the first case RA will be ignored and in the second case RA with no amounts would be created
7843 IF l_curr_rec.delete_flag='N' THEN
7844
7845 x_task_id_tbl.extend(1);
7846 x_rlm_id_tbl.extend(1);
7847 x_cbs_element_id_tbl.extend(1);-- cbs enhancement changes bug#16445106
7848 x_ra_id_tbl.extend(1);
7849 x_spread_curve_id_tbl.extend(1);
7850 x_mfc_cost_type_id_tbl.extend(1);
7851 x_etc_method_code_tbl.extend(1);
7852 x_sp_fixed_date_tbl.extend(1);
7853 x_res_class_code_tbl.extend(1);
7854 x_rate_based_flag_tbl.extend(1);
7855 x_rbs_elem_id_tbl.extend(1);
7856 x_txn_currency_code_tbl.extend(1);
7857 x_planning_start_date_tbl.extend(1);
7858 x_planning_end_date_tbl.extend(1);
7859 x_total_qty_tbl.extend(1);
7860 x_total_raw_cost_tbl.extend(1);
7861 x_total_burdened_cost_tbl.extend(1);
7862 x_total_revenue_tbl.extend(1);
7863 x_raw_cost_rate_tbl.extend(1);
7864 x_burdened_cost_rate_tbl.extend(1);
7865 x_bill_rate_tbl.extend(1);
7866 x_line_start_date_tbl.extend(1);
7867 x_line_end_date_tbl.extend(1);
7868 x_proj_cost_rate_type_tbl.extend(1);
7869 x_proj_cost_rate_date_type_tbl.extend(1);
7870 x_proj_cost_rate_tbl.extend(1);
7871 x_proj_cost_rate_date_tbl.extend(1);
7872 x_proj_rev_rate_type_tbl.extend(1);
7873 x_proj_rev_rate_date_type_tbl.extend(1);
7874 x_proj_rev_rate_tbl.extend(1);
7875 x_proj_rev_rate_date_tbl.extend(1);
7876 x_pfunc_cost_rate_type_tbl.extend(1);
7877 x_pfunc_cost_rate_date_typ_tbl.extend(1);
7878 x_pfunc_cost_rate_tbl.extend(1);
7879 x_pfunc_cost_rate_date_tbl.extend(1);
7880 x_pfunc_rev_rate_type_tbl.extend(1);
7881 x_pfunc_rev_rate_date_type_tbl.extend(1);
7882 x_pfunc_rev_rate_tbl.extend(1);
7883 x_pfunc_rev_rate_date_tbl.extend(1);
7884 x_delete_flag_tbl.extend(1);
7885 x_change_reason_code_tbl.extend(1);
7886 x_description_tbl.extend(1);
7887 x_task_id_tbl(x_task_id_tbl.COUNT) := l_curr_rec.task_id;
7888 x_rlm_id_tbl(x_rlm_id_tbl.COUNT) := p_budget_lines_tbl(l_bl_index).resource_list_member_id;
7889 x_cbs_element_id_tbl(x_rlm_id_tbl.COUNT) := p_budget_lines_tbl(l_bl_index).cbs_element_id;
7890 x_ra_id_tbl(x_ra_id_tbl.COUNT) := p_ra_id_tbl(l_bl_index);
7891 x_txn_currency_code_tbl(x_txn_currency_code_tbl.COUNT):= l_curr_rec.txn_currency_code;
7892 --Assigning N since for periodic layouts, amounts a type with delete flag as N would be NULLED
7893 --out
7894 x_delete_flag_tbl(x_delete_flag_tbl.COUNT) :='N';
7895
7896 END IF;
7897 --Skip the processing of all the records pertaining to this ra id
7898 l_skip_ra_flag:='Y';
7899 l_skip_task_id:=l_curr_rec.task_id;
7900 l_skip_rlm_id:=p_budget_lines_tbl(l_bl_index).resource_list_member_id;
7901 l_skip_cbs_element_id:=p_budget_lines_tbl(l_bl_index).cbs_element_id;-- cbs enhancement changes bug#16445106
7902
7903 END IF;-- IF p_planning_start_date_tbl(l_bl_index) IS NOT NULL AND
7904
7905
7906 END LOOP;
7907
7908 ELSE --p_context is WEBADI_NON_PERIODIC
7909 --log1('----- STAGE X6-------');
7910 FOR kk IN 1..p_budget_lines_tbl.COUNT LOOP
7911 --log1('----- STAGE X7-------');
7912
7913 --DEBUG_NS('p_budget_lines_tbl(kk).cbs_element_id :: ' || p_budget_lines_tbl(kk).cbs_element_id);
7914
7915 x_task_id_tbl.EXTEND(1);
7916 x_task_id_tbl(kk) := p_budget_lines_tbl(kk).pa_task_id;
7917 x_rlm_id_tbl.EXTEND(1);
7918 x_rlm_id_tbl(kk) := p_budget_lines_tbl(kk).resource_list_member_id;
7919 x_cbs_element_id_tbl.EXTEND(1);
7920 x_cbs_element_id_tbl(kk) := p_budget_lines_tbl(kk).cbs_element_id;
7921 x_ra_id_tbl.EXTEND(1);
7922 x_ra_id_tbl(kk) := p_ra_id_tbl(kk);
7923 x_txn_currency_code_tbl.EXTEND(1);
7924 x_txn_currency_code_tbl(kk) := p_budget_lines_tbl(kk).txn_currency_code;
7925 --log1('----- STAGE X71-------');
7926 x_planning_start_date_tbl.EXTEND(1);
7927 x_planning_start_date_tbl(kk) := p_planning_start_date_tbl(kk);
7928 x_planning_end_date_tbl.EXTEND(1);
7929 x_planning_end_date_tbl(kk) := p_planning_end_date_tbl(kk);
7930 --log1('----- STAGE X72-------');
7931 x_total_qty_tbl.EXTEND(1);
7932 x_total_qty_tbl(kk) := p_budget_lines_tbl(kk).quantity;
7933 x_total_raw_cost_tbl.EXTEND(1);
7934 x_total_raw_cost_tbl(kk) := p_budget_lines_tbl(kk).raw_cost;
7935 x_total_burdened_cost_tbl.EXTEND(1);
7936 x_total_burdened_cost_tbl(kk) := p_budget_lines_tbl(kk).burdened_cost;
7937 x_total_revenue_tbl.EXTEND(1);
7938 x_total_revenue_tbl(kk) := p_budget_lines_tbl(kk).revenue;
7939 --log1('----- STAGE X73-------');
7940 x_raw_cost_rate_tbl.EXTEND(1);
7941 x_raw_cost_rate_tbl(kk) := p_raw_cost_rate_tbl(kk);
7942 x_burdened_cost_rate_tbl.EXTEND(1);
7943 x_burdened_cost_rate_tbl(kk) := p_burd_cost_rate_tbl(kk);
7944 x_bill_rate_tbl.EXTEND(1);
7945 x_bill_rate_tbl(kk) := p_bill_rate_tbl(kk);
7946 --log1('----- STAGE X74-------');
7947
7948 x_line_start_date_tbl.EXTEND(1);
7949 x_line_start_date_tbl(kk) := NULL;
7950 x_line_end_date_tbl.EXTEND(1);
7951 x_line_end_date_tbl(kk) := NULL;
7952 --log1('----- STAGE X75-------');
7953 x_proj_cost_rate_type_tbl.EXTEND(1);
7954 x_proj_cost_rate_type_tbl(kk) := p_budget_lines_tbl(kk).project_cost_rate_type;
7955 x_proj_cost_rate_date_type_tbl.EXTEND(1);
7956 x_proj_cost_rate_date_type_tbl(kk) := p_budget_lines_tbl(kk).project_cost_rate_date_type;
7957 x_proj_cost_rate_tbl.EXTEND(1);
7958 x_proj_cost_rate_tbl(kk) := p_budget_lines_tbl(kk).project_cost_exchange_rate;
7959 x_proj_cost_rate_date_tbl.EXTEND(1);
7960 x_proj_cost_rate_date_tbl(kk) := p_budget_lines_tbl(kk).project_cost_rate_date;
7961 x_proj_rev_rate_type_tbl.EXTEND(1);
7962 x_proj_rev_rate_type_tbl(kk) := p_budget_lines_tbl(kk).project_rev_rate_type;
7963 x_proj_rev_rate_date_type_tbl.EXTEND(1);
7964 x_proj_rev_rate_date_type_tbl(kk) := p_budget_lines_tbl(kk).project_rev_rate_date_type;
7965 x_proj_rev_rate_tbl.EXTEND(1);
7966 x_proj_rev_rate_tbl(kk) := p_budget_lines_tbl(kk).project_rev_exchange_rate;
7967 x_proj_rev_rate_date_tbl.EXTEND(1);
7968 x_proj_rev_rate_date_tbl(kk) := p_budget_lines_tbl(kk).project_rev_rate_date;
7969 x_pfunc_cost_rate_type_tbl.EXTEND(1);
7970 x_pfunc_cost_rate_type_tbl(kk) := p_budget_lines_tbl(kk).projfunc_cost_rate_type;
7971 x_pfunc_cost_rate_date_typ_tbl.EXTEND(1);
7972 x_pfunc_cost_rate_date_typ_tbl(kk) := p_budget_lines_tbl(kk).projfunc_cost_rate_date_type;
7973 x_pfunc_cost_rate_tbl.EXTEND(1);
7974 x_pfunc_cost_rate_tbl(kk) := p_budget_lines_tbl(kk).projfunc_cost_exchange_rate;
7975 x_pfunc_cost_rate_date_tbl.EXTEND(1);
7976 x_pfunc_cost_rate_date_tbl(kk) := p_budget_lines_tbl(kk).projfunc_cost_rate_date;
7977 x_pfunc_rev_rate_type_tbl.EXTEND(1);
7978 x_pfunc_rev_rate_type_tbl(kk) := p_budget_lines_tbl(kk).projfunc_rev_rate_type;
7979 x_pfunc_rev_rate_date_type_tbl.EXTEND(1);
7980 x_pfunc_rev_rate_date_type_tbl(kk) := p_budget_lines_tbl(kk).projfunc_rev_rate_date_type;
7981 x_pfunc_rev_rate_tbl.EXTEND(1);
7982 x_pfunc_rev_rate_tbl(kk) := p_budget_lines_tbl(kk).projfunc_rev_exchange_rate;
7983 x_pfunc_rev_rate_date_tbl.EXTEND(1);
7984 x_pfunc_rev_rate_date_tbl(kk) := p_budget_lines_tbl(kk).projfunc_rev_rate_date;
7985 --log1('----- STAGE X76-------');
7986 x_delete_flag_tbl.EXTEND(1);
7987 x_delete_flag_tbl(kk) := p_delete_flag_tbl(kk);
7988 x_spread_curve_id_tbl.EXTEND(1);
7989 x_spread_curve_id_tbl(kk) := p_spread_curve_id_tbl(kk);
7990 x_mfc_cost_type_id_tbl.EXTEND(1);
7991 x_mfc_cost_type_id_tbl(kk) := p_mfc_cost_type_id_tbl(kk);
7992 x_etc_method_code_tbl.EXTEND(1);
7993 x_etc_method_code_tbl(kk) := p_etc_method_code_tbl(kk);
7994 x_sp_fixed_date_tbl.EXTEND(1);
7995 x_sp_fixed_date_tbl(kk) := p_sp_fixed_date_tbl(kk);
7996 x_res_class_code_tbl.EXTEND(1);
7997 x_res_class_code_tbl(kk) := p_res_class_code_tbl(kk);
7998 x_rate_based_flag_tbl.EXTEND(1);
7999 x_rate_based_flag_tbl(kk) := p_rate_based_flag_tbl(kk);
8000 x_rbs_elem_id_tbl.EXTEND(1);
8001 x_rbs_elem_id_tbl(kk) := p_rbs_elem_id_tbl(kk);
8002 x_change_reason_code_tbl.EXTEND(1);
8003 x_change_reason_code_tbl(kk) := p_budget_lines_tbl(kk).change_reason_code;
8004 x_description_tbl.EXTEND(1);
8005 x_description_tbl(kk) := p_budget_lines_tbl(kk).description;
8006 --log1('----- STAGE X8-------');
8007
8008 --For forecast version, The above amount tbls contain the Forecast amounts, The below
8009 --API is called to modify the Forecast amounts entered based on the ETC amounts entered.
8010 IF p_plan_class_code='FORECAST' THEN
8011
8012 --DEBUG_NS('Before get_total_fcst_amounts :: ');
8013 --DEBUG_NS('p_budget_lines_tbl(kk).cbs_element_id :: '||p_budget_lines_tbl(kk).cbs_element_id);
8014 get_total_fcst_amounts
8015 (p_project_id =>p_project_id,
8016 p_budget_version_id =>p_budget_version_id,
8017 p_task_id =>p_budget_lines_tbl(kk).pa_task_id,
8018 p_resource_list_member_id =>p_budget_lines_tbl(kk).resource_list_member_id,
8019 p_cbs_element_id =>p_budget_lines_tbl(kk).cbs_element_id, -- cbs enhancement changes bug#16445106
8020 p_txn_currency_code =>p_budget_lines_tbl(kk).txn_currency_code,
8021 p_line_start_date =>NULL,
8022 p_line_end_date =>NULL,
8023 p_prd_mask_st_date_tbl =>SYSTEM.pa_date_tbl_type(),
8024 p_prd_mask_end_date_tbl =>SYSTEM.pa_date_tbl_type(),
8025 p_st_index_in_prd_mask =>NULL,
8026 p_end_index_in_prd_mask =>NULL,
8027 p_etc_start_date =>p_etc_start_date,
8028 p_etc_quantity =>p_etc_quantity_tbl(kk),
8029 p_fcst_quantity =>p_budget_lines_tbl(kk).quantity,
8030 p_etc_raw_cost =>p_etc_raw_cost_tbl(kk),
8031 p_fcst_raw_cost =>p_budget_lines_tbl(kk).raw_cost,
8032 p_etc_burd_cost =>p_etc_burdened_cost_tbl(kk),
8033 p_fcst_burd_cost =>p_budget_lines_tbl(kk).burdened_cost,
8034 p_etc_revenue =>p_etc_revenue_tbl(kk),
8035 p_fcst_revenue =>p_budget_lines_tbl(kk).revenue,
8036 px_cached_fcst_qty_tbl =>l_cached_fcst_qty_tbl,
8037 px_cached_fcst_raw_cost_tbl =>l_cached_fcst_raw_cost_tbl,
8038 px_cached_fcst_burd_cost_tbl =>l_cached_fcst_burd_cost_tbl,
8039 px_cached_fcst_revenue_tbl =>l_cached_fcst_revenue_tbl,
8040 px_cached_etc_qty_tbl =>l_cached_etc_qty_tbl,
8041 px_cached_etc_raw_cost_tbl =>l_cached_etc_raw_cost_tbl,
8042 px_cached_etc_burd_cost_tbl =>l_cached_etc_burd_cost_tbl,
8043 px_cached_etc_revenue_tbl =>l_cached_etc_revenue_tbl,
8044 x_total_quantity =>x_total_qty_tbl(kk),
8045 x_total_raw_cost =>x_total_raw_cost_tbl(kk),
8046 x_total_burd_cost =>x_total_burdened_cost_tbl(kk),
8047 x_total_revenue =>x_total_revenue_tbl(kk),
8048 x_return_status =>x_return_status,
8049 x_msg_count =>x_msg_count,
8050 x_msg_data =>x_msg_data );
8051
8052 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8053 IF l_debug_mode = 'Y' THEN
8054 pa_debug.g_err_stage := 'Call to get_total_fcst_amounts returned with error';
8055 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
8056 END IF;
8057 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8058 END IF;
8059
8060 END IF;
8061
8062 END LOOP;--FOR kk IN 1..p_budget_lines_tbl.COUNT LOOP
8063 --log1('----- STAGE X9-------');
8064 END IF; --p_context
8065
8066
8067 IF l_debug_mode = 'Y' THEN
8068 pa_debug.g_err_stage := 'Leaving pa_fp_webadi_pkg.prepare_pbl_input';
8069 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8070 END IF;
8071
8072 IF l_debug_mode = 'Y' THEN
8073 pa_debug.reset_curr_function;
8074 END IF;
8075
8076 EXCEPTION
8077 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
8078 l_msg_count := FND_MSG_PUB.count_msg;
8079 IF l_msg_count = 1 and x_msg_data IS NULL THEN
8080 PA_INTERFACE_UTILS_PUB.get_messages
8081 (p_encoded => FND_API.G_TRUE
8082 ,p_msg_index => 1
8083 ,p_msg_count => l_msg_count
8084 ,p_msg_data => l_msg_data
8085 ,p_data => l_data
8086 ,p_msg_index_out => l_msg_index_out);
8087 x_msg_data := l_data;
8088 x_msg_count := l_msg_count;
8089 ELSE
8090 x_msg_count := l_msg_count;
8091 END IF;
8092 x_return_status := FND_API.G_RET_STS_ERROR;
8093
8094 IF l_debug_mode = 'Y' THEN
8095 pa_debug.reset_curr_function;
8096 END IF;
8097 RETURN;
8098
8099 WHEN OTHERS THEN
8100 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8101 x_msg_count := 1;
8102 x_msg_data := SQLERRM;
8103
8104 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
8105 ,p_procedure_name => 'prepare_pbl_input');
8106 IF l_debug_mode = 'Y' THEN
8107 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
8108 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8109 END IF;
8110
8111 IF l_debug_mode = 'Y' THEN
8112 pa_debug.reset_curr_function;
8113 END IF;
8114 RAISE;
8115
8116 END prepare_pbl_input;
8117
8118 PROCEDURE process_budget_lines
8119 ( p_context IN VARCHAR2,
8120 p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE,
8121 p_version_info_rec IN pa_fp_gen_amount_utils.fp_cols,
8122 p_task_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8123 p_rlm_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8124 p_cbs_element_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),-- cbs enhancement changes bug#16445106
8125 p_ra_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8126 p_spread_curve_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8127 p_mfc_cost_type_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8128 p_etc_method_code_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8129 p_sp_fixed_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
8130 p_res_class_code_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8131 p_rate_based_flag_tbl IN SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type(),
8132 p_rbs_elem_id_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8133 p_txn_currency_code_tbl IN SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type(),
8134 p_planning_start_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
8135 p_planning_end_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
8136 p_total_qty_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8137 p_total_raw_cost_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8138 p_total_burdened_cost_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8139 p_total_revenue_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8140 p_raw_cost_rate_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8141 p_burdened_cost_rate_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8142 p_bill_rate_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8143 p_line_start_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
8144 p_line_end_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
8145 p_proj_cost_rate_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8146 p_proj_cost_rate_date_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8147 p_proj_cost_rate_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8148 p_proj_cost_rate_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
8149 p_proj_rev_rate_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8150 p_proj_rev_rate_date_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8151 p_proj_rev_rate_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8152 p_proj_rev_rate_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
8153 p_pfunc_cost_rate_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8154 p_pfunc_cost_rate_date_typ_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8155 p_pfunc_cost_rate_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8156 p_pfunc_cost_rate_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
8157 p_pfunc_rev_rate_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8158 p_pfunc_rev_rate_date_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8159 p_pfunc_rev_rate_tbl IN SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(),
8160 p_pfunc_rev_rate_date_tbl IN SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(),
8161 p_change_reason_code_tbl IN SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type(),
8162 p_description_tbl IN SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type(),
8163 p_delete_flag_tbl IN SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type(),
8164 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
8165 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
8166 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8167 )
8168
8169 IS
8170 -- variables used for debugging
8171 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.process_budget_lines';
8172 l_debug_mode VARCHAR2(1) := 'N';
8173 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
8174 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
8175
8176 l_return_status VARCHAR2(1);
8177 l_msg_count NUMBER;
8178 l_msg_data VARCHAR2(2000);
8179 l_data VARCHAR2(2000);
8180 l_msg_index_out NUMBER;
8181
8182 -- variables used to copy the inputs and to be used inside the api
8183 l_task_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8184 l_rlm_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8185 l_cbs_element_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();-- cbs enhancement changes bug#16445106
8186 l_ra_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8187 l_spread_curve_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8188 l_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8189 l_etc_method_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8190 l_sp_fixed_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8191 l_res_class_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8192 l_rate_based_flag_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8193 l_rbs_elem_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8194 l_txn_currency_code_tbl SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8195 l_planning_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8196 l_planning_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8197 l_total_qty_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8198 l_total_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8199 l_total_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8200 l_total_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8201 l_raw_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8202 l_burdened_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8203 l_bill_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8204 l_line_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8205 l_line_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8206 l_proj_cost_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8207 l_proj_cost_rate_date_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8208 l_proj_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8209 l_proj_cost_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8210 l_proj_rev_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8211 l_proj_rev_rate_date_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8212 l_proj_rev_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8213 l_proj_rev_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8214 l_pfunc_cost_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8215 l_pfunc_cost_rate_date_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8216 l_pfunc_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8217 l_pfunc_cost_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8218 l_pfunc_rev_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8219 l_pfunc_rev_rate_date_type_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8220 l_pfunc_rev_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8221 l_pfunc_rev_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8222 l_change_reason_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8223 l_description_tbl SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8224
8225
8226 -- variables to copy the records with delete_flag = Y
8227 l_df_task_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8228 l_df_rlm_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8229 l_df_cbs_element_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();-- cbs enhancement changes bug#16445106
8230 l_df_ra_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8231 l_df_spread_curve_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8232 l_df_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8233 l_df_etc_method_code SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8234 l_df_sp_fixed_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8235 l_df_res_class_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8236 l_df_rate_based_flag_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8237 l_df_rbs_elem_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8238 l_df_txn_currency_code_tbl SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8239 l_df_planning_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8240 l_df_planning_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8241 l_df_total_qty_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8242 l_df_total_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8243 l_df_total_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8244 l_df_total_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8245 l_df_raw_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8246 l_df_burdened_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8247 l_df_bill_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8248 l_df_line_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8249 l_df_line_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8250 l_df_pj_cost_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8251 l_df_pj_cost_rate_date_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8252 l_df_pj_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8253 l_df_pj_cost_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8254 l_df_pj_rev_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8255 l_df_pj_rev_rate_date_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8256 l_df_pj_rev_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8257 l_df_pj_rev_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8258 l_df_pf_cost_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8259 l_df_pf_cost_rate_date_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8260 l_df_pf_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8261 l_df_pf_cost_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8262 l_df_pf_rev_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8263 l_df_pf_rev_rate_date_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8264 l_df_pf_rev_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8265 l_df_pf_rev_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8266 l_df_change_reason_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8267 l_df_description_tbl SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8268
8269 l_total_rec_passed INTEGER := 0;
8270 l_curr_ra_id_seq NUMBER;
8271
8272 -- counter variables
8273 i INTEGER;
8274
8275 -- variables used to call add_planning_transactions
8276 l_new_elem_ver_id pa_proj_element_versions.element_version_id%TYPE;
8277 l_new_elem_ver_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8278 l_new_rlm_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8279 l_new_cbs_elemet_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();-- cbs enhancement changes bug#16445106
8280 l_new_planning_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8281 l_new_planning_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8282
8283 -- variables used to insert into pa_fp_rollup_tmp
8284 -- with delete flag = Y
8285 l_bl_del_flag_ra_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8286 l_bl_del_flag_st_dt_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8287 l_bl_del_flag_en_dt_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8288 l_bl_del_flag_txn_curr_tbl SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8289 l_bl_del_flag_txn_rc_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8290 l_bl_del_flag_txn_bc_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8291 l_bl_del_flag_txn_rev_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8292 l_bl_del_flag_pf_curr_tbl SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8293 l_bl_del_flag_pf_cr_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8294 l_bl_del_flag_pf_cr_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8295 l_bl_del_flag_pf_cexc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8296 l_bl_del_flag_pf_cr_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8297 l_bl_del_flag_pf_rr_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8298 l_bl_del_flag_pf_rr_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8299 l_bl_del_flag_pf_rexc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8300 l_bl_del_flag_pf_rr_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8301 l_bl_del_flag_pj_curr_tbl SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8302 l_bl_del_flag_pj_cr_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8303 l_bl_del_flag_pj_cr_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8304 l_bl_del_flag_pj_cexc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8305 l_bl_del_flag_pj_cr_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8306 l_bl_del_flag_pj_rr_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8307 l_bl_del_flag_pj_rr_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8308 l_bl_del_flag_pj_rexc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8309 l_bl_del_flag_pj_rr_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8310 l_bl_del_flag_bl_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8311 l_bl_del_flag_per_name_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8312 l_bl_del_flag_pj_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8313 l_bl_del_flag_pj_burd_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8314 l_bl_del_flag_pj_rev_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8315 l_bl_del_flag_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8316 l_bl_del_flag_burd_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8317 l_bl_del_flag_rev_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8318 l_bl_del_flag_qty_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8319 l_bl_del_flag_c_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8320 l_bl_del_flag_b_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8321 l_bl_del_flag_r_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8322 l_bl_del_flag_o_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8323 l_bl_del_fg_pc_cnv_rej_cd_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8324 l_bl_del_fg_pf_cnv_rej_cd_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8325
8326
8327 -- for budget line context to spread the amounts
8328 l_new_ra_id pa_resource_assignments.resource_assignment_id%TYPE;
8329 l_calc_calling_context VARCHAR2(30);
8330
8331 -- variables used to call update_reporting_lines
8332 l_pji_res_ass_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8333 l_pji_period_name_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8334 l_pji_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8335 l_pji_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8336 l_pji_txn_curr_code_tbl SYSTEM.pa_varchar2_15_tbl_type := SYSTEM.pa_varchar2_15_tbl_type();
8337 l_pji_txn_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8338 l_pji_txn_burd_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8339 l_pji_txn_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8340 l_pji_project_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8341 l_pji_project_burd_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8342 l_pji_project_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8343 l_pji_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8344 l_pji_burd_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8345 l_pji_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8346 l_pji_cost_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8347 l_pji_revenue_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8348 l_pji_burden_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8349 l_pji_other_rej_code SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8350 l_pji_pc_cur_conv_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8351 l_pji_pf_cur_conv_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8352 l_pji_quantity_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8353
8354 --This table will hold the distinct NEW resource assignments passed to this API for processing (excluding delete flag = Y recs)
8355 --Index will be in the following format : 'T' || <Task Id> || 'R' || <Rlm Id>
8356 l_distinct_new_ra_tbl varchar_32_indexed_num_tbl_typ;
8357 l_distinct_new_ra_index VARCHAR2(32);
8358
8359
8360 l_new_res_asg_rbs_elem_id pa_resource_assignments.rbs_element_id%TYPE;
8361 l_new_res_asg_res_class_code pa_resource_assignments.resource_class_code%TYPE;
8362 l_new_res_asg_rate_based_flag pa_resource_assignments.rate_based_flag%TYPE;
8363
8364 l_g_miss_char CONSTANT VARCHAR(1) := FND_API.G_MISS_CHAR;
8365 l_g_miss_num CONSTANT NUMBER := FND_API.G_MISS_NUM;
8366 l_g_miss_date CONSTANT DATE := FND_API.G_MISS_DATE;
8367
8368 l_debug_st_dt DATE;
8369 l_debug_en_dt DATE;
8370 l_debug_st_dt_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8371 l_debug_en_dt_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8372
8373 l_debug_quantity NUMBER;
8374 l_debug_quantity_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8375 l_debug_raw_cost NUMBER;
8376 l_debug_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8377 l_debug_burdened_cost NUMBER;
8378 l_debug_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8379 l_debug_revenue NUMBER;
8380 l_debug_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8381 l_temp VARCHAR2(100);
8382 l_upd_init_quantity_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8383 l_upd_init_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8384 l_upd_init_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8385 l_upd_init_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8386 l_upd_proj_init_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8387 l_upd_proj_init_burd_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8388 l_upd_proj_init_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8389 l_upd_txn_init_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8390 l_upd_txn_init_burd_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8391 l_upd_txn_init_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8392 l_upd_budget_line_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8393 l_upd_delete_flag_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8394 l_upd_pj_cost_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8395 l_upd_pj_cost_exc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8396 l_upd_pj_cost_rate_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8397 l_upd_pj_cost_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8398 l_upd_pj_rev_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8399 l_upd_pj_rev_exc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8400 l_upd_pj_rev_rate_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8401 l_upd_pj_rev_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8402 l_upd_pf_cost_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8403 l_upd_pf_cost_exc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8404 l_upd_pf_cost_rate_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8405 l_upd_pf_cost_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8406 l_upd_pf_rev_rate_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8407 l_upd_pf_rev_exc_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8408 l_upd_pf_rev_rate_dt_typ_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8409 l_upd_pf_rev_rate_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
8410 --Bug 4424457
8411 l_bl_count_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8412 l_bls_proccessed_flag VARCHAR2(1);
8413 l_error_msg_code VARCHAR2(2000);
8414 l_dest_ver_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8415 l_chg_reason_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8416 l_desc_tbl SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8417
8418 --bug 5962744
8419 l_extra_bl_flag_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
8420 l_ex_chg_rsn_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
8421 l_ex_desc_tbl SYSTEM.pa_varchar2_2000_tbl_type := SYSTEM.pa_varchar2_2000_tbl_type();
8422 l_ra_exists VARCHAR2(1);
8423 l_extra_bls_exists VARCHAR2(1);
8424 j INTEGER;
8425 BEGIN
8426 --log1('PBL Begin '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8427 fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
8428
8429 x_return_status := FND_API.G_RET_STS_SUCCESS;
8430 x_msg_count := 0;
8431 --log1('----- STAGE PBL1.0-------');
8432
8433 IF l_debug_mode = 'Y' THEN
8434 pa_debug.Set_Curr_Function
8435 (p_function => l_module_name,
8436 p_debug_mode => l_debug_mode);
8437 END IF;
8438
8439 IF l_debug_mode = 'Y' THEN
8440 pa_debug.g_err_stage := 'Entering into process_budget_lines';
8441 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8442 pa_debug.g_err_stage := 'Validating input parameters';
8443 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8444 END IF;
8445
8446 -- validate the mandatory input parameters
8447
8448 -- valid p_context are WEBADI_PERIODIC and WEBADI_NON_PERIODIC
8449 IF p_context IS NULL THEN
8450 IF l_debug_mode = 'Y' THEN
8451 pa_debug.g_err_stage := 'p_context is passed as null';
8452 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8453 END IF;
8454 pa_utils.add_message(p_app_short_name => 'PA',
8455 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
8456 p_token1 => 'PROCEDURENAME',
8457 p_value1 => l_module_name);
8458
8459 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8460 END IF;
8461
8462 -- budget_version_id is not passed
8463 IF p_budget_version_id IS NULL THEN
8464 IF l_debug_mode = 'Y' THEN
8465 pa_debug.g_err_stage := 'p_budget_version_id is passed as null';
8466 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8467 END IF;
8468 pa_utils.add_message(p_app_short_name => 'PA',
8469 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
8470 p_token1 => 'PROCEDURENAME',
8471 p_value1 => l_module_name);
8472
8473 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8474 END IF;
8475 -- version_info_rec type is null
8476 IF p_version_info_rec.x_project_id IS NULL THEN
8477 IF l_debug_mode = 'Y' THEN
8478 pa_debug.g_err_stage := 'p_version_info_rec is passed as null';
8479 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8480 END IF;
8481 pa_utils.add_message(p_app_short_name => 'PA',
8482 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
8483 p_token1 => 'PROCEDURENAME',
8484 p_value1 => l_module_name);
8485
8486 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8487 END IF;
8488
8489 -- if no data is present in the task id table
8490 IF NOT p_task_id_tbl.EXISTS(1) THEN
8491 IF l_debug_mode = 'Y' THEN
8492 pa_debug.g_err_stage := 'task id table is passed as null';
8493 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8494 END IF;
8495 RETURN;
8496 END IF;
8497
8498 --log1('----- STAGE PBL1.1-------');
8499 /*FOR zz IN 1..p_ra_id_tbl.COUNT LOOP
8500
8501 log1('p_ra_id_tbl ('||zz||') is '||p_ra_id_tbl(zz));
8502 log1('p_planning_start_date_tbl ('||zz||') is '||p_planning_start_date_tbl(zz));
8503 log1('p_planning_end_date_tbl ('||zz||') is '||p_planning_end_date_tbl(zz));
8504
8505 end loop;*/
8506
8507 -- the length of all the input tables should be same
8508 IF p_task_id_tbl.COUNT <> p_rlm_id_tbl.COUNT OR
8509 p_task_id_tbl.COUNT <> p_ra_id_tbl.COUNT OR
8510 p_task_id_tbl.COUNT <> p_txn_currency_code_tbl.COUNT OR
8511 p_task_id_tbl.COUNT <> p_planning_start_date_tbl.COUNT OR
8512 p_task_id_tbl.COUNT <> p_planning_end_date_tbl.COUNT OR
8513 p_task_id_tbl.COUNT <> p_line_start_date_tbl.COUNT OR
8514 p_task_id_tbl.COUNT <> p_line_end_date_tbl.COUNT OR
8515 p_task_id_tbl.COUNT <> p_spread_curve_id_tbl.COUNT OR
8516 p_task_id_tbl.COUNT <> p_mfc_cost_type_id_tbl.COUNT OR
8517 p_task_id_tbl.COUNT <> p_etc_method_code_tbl.COUNT OR
8518 p_task_id_tbl.COUNT <> p_sp_fixed_date_tbl.COUNT OR
8519 p_task_id_tbl.COUNT <> p_res_class_code_tbl.COUNT OR
8520 p_task_id_tbl.COUNT <> p_rate_based_flag_tbl.COUNT OR
8521 p_task_id_tbl.COUNT <> p_rbs_elem_id_tbl.COUNT OR
8522 p_task_id_tbl.COUNT <> p_total_qty_tbl.COUNT OR
8523 p_task_id_tbl.COUNT <> p_total_raw_cost_tbl.COUNT OR
8524 p_task_id_tbl.COUNT <> p_total_burdened_cost_tbl.COUNT OR
8525 p_task_id_tbl.COUNT <> p_total_revenue_tbl.COUNT OR
8526 p_task_id_tbl.COUNT <> p_raw_cost_rate_tbl.COUNT OR
8527 p_task_id_tbl.COUNT <> p_burdened_cost_rate_tbl.COUNT OR
8528 p_task_id_tbl.COUNT <> p_bill_rate_tbl.COUNT OR
8529 p_task_id_tbl.COUNT <> p_line_start_date_tbl.COUNT OR
8530 p_task_id_tbl.COUNT <> p_line_end_date_tbl.COUNT OR
8531 p_task_id_tbl.COUNT <> p_proj_cost_rate_type_tbl.COUNT OR
8532 p_task_id_tbl.COUNT <> p_proj_cost_rate_date_type_tbl.COUNT OR
8533 p_task_id_tbl.COUNT <> p_proj_cost_rate_tbl.COUNT OR
8534 p_task_id_tbl.COUNT <> p_proj_cost_rate_date_tbl.COUNT OR
8535 p_task_id_tbl.COUNT <> p_proj_rev_rate_type_tbl.COUNT OR
8536 p_task_id_tbl.COUNT <> p_proj_rev_rate_date_type_tbl.COUNT OR
8537 p_task_id_tbl.COUNT <> p_proj_rev_rate_tbl.COUNT OR
8538 p_task_id_tbl.COUNT <> p_proj_rev_rate_date_tbl.COUNT OR
8539 p_task_id_tbl.COUNT <> p_pfunc_cost_rate_type_tbl.COUNT OR
8540 p_task_id_tbl.COUNT <> p_pfunc_cost_rate_date_typ_tbl.COUNT OR
8541 p_task_id_tbl.COUNT <> p_pfunc_cost_rate_tbl.COUNT OR
8542 p_task_id_tbl.COUNT <> p_pfunc_cost_rate_date_tbl.COUNT OR
8543 p_task_id_tbl.COUNT <> p_pfunc_rev_rate_type_tbl.COUNT OR
8544 p_task_id_tbl.COUNT <> p_pfunc_rev_rate_date_type_tbl.COUNT OR
8545 p_task_id_tbl.COUNT <> p_pfunc_rev_rate_tbl.COUNT OR
8546 p_task_id_tbl.COUNT <> p_pfunc_rev_rate_date_tbl.COUNT OR
8547 p_task_id_tbl.COUNT <> p_change_reason_code_tbl.COUNT OR
8548 p_task_id_tbl.COUNT <> p_description_tbl.COUNT OR
8549 p_task_id_tbl.COUNT <> p_delete_flag_tbl.COUNT OR
8550 p_task_id_tbl.COUNT <> p_cbs_element_id_tbl.COUNT -- cbs enhancement changes bug#16445106
8551 THEN
8552
8553 --log1(' 1 '||p_rlm_id_tbl.COUNT);
8554 --log1(' 2 '||p_ra_id_tbl.COUNT);
8555 --log1(' 3 '||p_txn_currency_code_tbl.COUNT);
8556 --log1(' 4 '||p_planning_start_date_tbl.COUNT);
8557 --log1(' 5 '||p_planning_end_date_tbl.COUNT);
8558 --log1(' 6 '||p_line_start_date_tbl.COUNT);
8559 --log1(' 7 '||p_line_end_date_tbl.COUNT);
8560 --log1(' 8 '||p_spread_curve_id_tbl.COUNT);
8561 --log1(' 9 '||p_mfc_cost_type_id_tbl.COUNT);
8562 --log1(' 10 '||p_etc_method_code_tbl.COUNT);
8563 --log1(' 11 '||p_sp_fixed_date_tbl.COUNT);
8564 --log1(' 12 '||p_total_qty_tbl.COUNT);
8565 --log1(' 13 '||p_total_raw_cost_tbl.COUNT);
8566 --log1(' 14 '||p_total_burdened_cost_tbl.COUNT);
8567 --log1(' 15 '||p_total_revenue_tbl.COUNT);
8568 --log1(' 16 '||p_raw_cost_rate_tbl.COUNT);
8569 --log1(' 17 '||p_burdened_cost_rate_tbl.COUNT);
8570 --log1(' 18 '||p_bill_rate_tbl.COUNT);
8571 --log1(' 19 '||p_line_start_date_tbl.COUNT);
8572 --log1(' 20 '||p_line_end_date_tbl.COUNT);
8573 --log1(' 21 '||p_proj_cost_rate_type_tbl.COUNT);
8574 --log1(' 22 '||p_proj_cost_rate_date_type_tbl.COUNT);
8575 --log1(' 23 '||p_proj_cost_rate_tbl.COUNT);
8576 --log1(' 24 '||p_proj_cost_rate_date_tbl.COUNT);
8577 --log1(' 25 '||p_proj_rev_rate_type_tbl.COUNT);
8578 --log1(' 26 '||p_proj_rev_rate_date_type_tbl.COUNT);
8579 --log1(' 27 '||p_proj_rev_rate_tbl.COUNT);
8580 --log1(' 28 '||p_proj_rev_rate_date_tbl.COUNT);
8581 --log1(' 29 '||p_pfunc_cost_rate_type_tbl.COUNT);
8582 --log1(' 30 '||p_pfunc_cost_rate_date_typ_tbl.COUNT);
8583 --log1(' 31 '||p_pfunc_cost_rate_tbl.COUNT);
8584 --log1(' 32 '||p_pfunc_cost_rate_date_tbl.COUNT);
8585 --log1(' 33 '||p_pfunc_rev_rate_type_tbl.COUNT);
8586 --log1(' 34 '||p_pfunc_rev_rate_date_type_tbl.COUNT);
8587 --log1(' 35 '||p_pfunc_rev_rate_tbl.COUNT);
8588 --log1(' 36 '||p_pfunc_rev_rate_date_tbl.COUNT);
8589 --log1(' 37 '||p_change_reason_code_tbl.COUNT);
8590 --log1(' 38 '||p_description_tbl.COUNT);
8591 --log1(' 39 '||p_delete_flag_tbl.COUNT );
8592
8593 IF l_debug_mode = 'Y' THEN
8594 pa_debug.g_err_stage := 'Required input tables are not equal in length';
8595 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
8596 END IF;
8597 pa_utils.add_message(p_app_short_name => 'PA',
8598 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
8599 p_token1 => 'PROCEDURENAME',
8600 p_value1 => l_module_name);
8601
8602 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8603 END IF;
8604 --log1('----- STAGE PBL1.2-------');
8605
8606 -- input parameters validation done
8607
8608 -- checking for the context and if its non periodic context, then
8609 -- filtering out the records with delete flag <> Y
8610 IF l_debug_mode = 'Y' THEN
8611 pa_debug.g_err_stage := 'p_context is: ' || p_context;
8612 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8613 END IF;
8614
8615 --log1('PBL 1 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8616 IF p_context = 'WEBADI_NON_PERIODIC' THEN
8617 FOR i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST LOOP
8618 IF Nvl(p_delete_flag_tbl(i), 'N') <> 'Y' THEN
8619 l_ra_id_tbl.extend(1);
8620 l_ra_id_tbl(l_ra_id_tbl.COUNT) := p_ra_id_tbl(i);
8621 l_task_id_tbl.EXTEND(1);
8622 l_task_id_tbl(l_task_id_tbl.COUNT) := p_task_id_tbl(i);
8623 l_rlm_id_tbl.EXTEND(1);
8624 l_rlm_id_tbl(l_rlm_id_tbl.COUNT) := p_rlm_id_tbl(i);
8625 l_cbs_element_id_tbl.EXTEND(1);
8626 l_cbs_element_id_tbl(l_cbs_element_id_tbl.COUNT) := p_cbs_element_id_tbl(i);-- cbs enhancement changes bug#16445106
8627 l_spread_curve_id_tbl.EXTEND(1);
8628 l_spread_curve_id_tbl(l_spread_curve_id_tbl.COUNT) := p_spread_curve_id_tbl(i);
8629 l_mfc_cost_type_id_tbl.EXTEND(1);
8630 l_mfc_cost_type_id_tbl(l_mfc_cost_type_id_tbl.COUNT) := p_mfc_cost_type_id_tbl(i);
8631 l_etc_method_code_tbl.EXTEND(1);
8632 l_etc_method_code_tbl(l_etc_method_code_tbl.COUNT) := p_etc_method_code_tbl(i);
8633 l_sp_fixed_date_tbl.EXTEND(1);
8634 l_sp_fixed_date_tbl(l_sp_fixed_date_tbl.COUNT) := p_sp_fixed_date_tbl(i);
8635 l_res_class_code_tbl.EXTEND(1);
8636 l_res_class_code_tbl(l_res_class_code_tbl.COUNT) := p_res_class_code_tbl(i);
8637 l_rate_based_flag_tbl.EXTEND(1);
8638 l_rate_based_flag_tbl(l_rate_based_flag_tbl.COUNT) := p_rate_based_flag_tbl(i);
8639 l_rbs_elem_id_tbl.EXTEND(1);
8640 l_rbs_elem_id_tbl(l_rbs_elem_id_tbl.COUNT) := p_rbs_elem_id_tbl(i);
8641 l_txn_currency_code_tbl.EXTEND(1);
8642 l_txn_currency_code_tbl(l_txn_currency_code_tbl.COUNT) := p_txn_currency_code_tbl(i);
8643 l_planning_start_date_tbl.EXTEND(1);
8644 l_planning_start_date_tbl(l_planning_start_date_tbl.COUNT) := p_planning_start_date_tbl(i);
8645 l_planning_end_date_tbl.EXTEND(1);
8646 l_planning_end_date_tbl(l_planning_end_date_tbl.COUNT) := p_planning_end_date_tbl(i);
8647 l_total_qty_tbl.EXTEND(1);
8648 l_total_qty_tbl(l_total_qty_tbl.COUNT) := p_total_qty_tbl(i);
8649 l_total_raw_cost_tbl.EXTEND(1);
8650 l_total_raw_cost_tbl(l_total_raw_cost_tbl.COUNT) := p_total_raw_cost_tbl(i);
8651 l_total_burdened_cost_tbl.EXTEND(1);
8652 l_total_burdened_cost_tbl(l_total_burdened_cost_tbl.COUNT) := p_total_burdened_cost_tbl(i);
8653 l_total_revenue_tbl.EXTEND(1);
8654 l_total_revenue_tbl(l_total_revenue_tbl.COUNT) := p_total_revenue_tbl(i);
8655 l_raw_cost_rate_tbl.EXTEND(1);
8656 l_raw_cost_rate_tbl(l_raw_cost_rate_tbl.COUNT) := p_raw_cost_rate_tbl(i);
8657 l_burdened_cost_rate_tbl.EXTEND(1);
8658 l_burdened_cost_rate_tbl(l_burdened_cost_rate_tbl.COUNT) := p_burdened_cost_rate_tbl(i);
8659 l_bill_rate_tbl.EXTEND(1);
8660 l_bill_rate_tbl(l_bill_rate_tbl.COUNT) := p_bill_rate_tbl(i);
8661 l_proj_cost_rate_type_tbl.EXTEND(1);
8662 l_proj_cost_rate_type_tbl(l_proj_cost_rate_type_tbl.COUNT) := p_proj_cost_rate_type_tbl(i);
8663 l_proj_cost_rate_date_type_tbl.EXTEND(1);
8664 l_proj_cost_rate_date_type_tbl(l_proj_cost_rate_date_type_tbl.COUNT) := p_proj_cost_rate_date_type_tbl(i);
8665 l_proj_cost_rate_tbl.EXTEND(1);
8666 l_proj_cost_rate_tbl(l_proj_cost_rate_tbl.COUNT) := p_proj_cost_rate_tbl(i);
8667 l_proj_cost_rate_date_tbl.EXTEND(1);
8668 l_proj_cost_rate_date_tbl(l_proj_cost_rate_date_tbl.COUNT) := p_proj_cost_rate_date_tbl(i);
8669 l_proj_rev_rate_type_tbl.EXTEND(1);
8670 l_proj_rev_rate_type_tbl(l_proj_rev_rate_type_tbl.COUNT) := p_proj_rev_rate_type_tbl(i);
8671 l_proj_rev_rate_date_type_tbl.EXTEND(1);
8672 l_proj_rev_rate_date_type_tbl(l_proj_rev_rate_date_type_tbl.COUNT) := p_proj_rev_rate_date_type_tbl(i);
8673 l_proj_rev_rate_tbl.EXTEND(1);
8674 l_proj_rev_rate_tbl(l_proj_rev_rate_tbl.COUNT) := p_proj_rev_rate_tbl(i);
8675 l_proj_rev_rate_date_tbl.EXTEND(1);
8676 l_proj_rev_rate_date_tbl(l_proj_rev_rate_date_tbl.COUNT) := p_proj_rev_rate_date_tbl(i);
8677 l_pfunc_cost_rate_type_tbl.EXTEND(1);
8678 l_pfunc_cost_rate_type_tbl(l_pfunc_cost_rate_type_tbl.COUNT) := p_pfunc_cost_rate_type_tbl(i);
8679 l_pfunc_cost_rate_date_typ_tbl.EXTEND(1);
8680 l_pfunc_cost_rate_date_typ_tbl(l_pfunc_cost_rate_date_typ_tbl.COUNT) := p_pfunc_cost_rate_date_typ_tbl(i);
8681 l_pfunc_cost_rate_tbl.EXTEND(1);
8682 l_pfunc_cost_rate_tbl(l_pfunc_cost_rate_tbl.COUNT) := p_pfunc_cost_rate_tbl(i);
8683 l_pfunc_cost_rate_date_tbl.EXTEND(1);
8684 l_pfunc_cost_rate_date_tbl(l_pfunc_cost_rate_date_tbl.COUNT) := p_pfunc_cost_rate_date_tbl(i);
8685 l_pfunc_rev_rate_type_tbl.EXTEND(1);
8686 l_pfunc_rev_rate_type_tbl(l_pfunc_rev_rate_type_tbl.COUNT) := p_pfunc_rev_rate_type_tbl(i);
8687 l_pfunc_rev_rate_date_type_tbl.EXTEND(1);
8688 l_pfunc_rev_rate_date_type_tbl(l_pfunc_rev_rate_date_type_tbl.COUNT) := p_pfunc_rev_rate_date_type_tbl(i);
8689 l_pfunc_rev_rate_tbl.EXTEND(1);
8690 l_pfunc_rev_rate_tbl(l_pfunc_rev_rate_tbl.COUNT) := p_pfunc_rev_rate_tbl(i);
8691 l_pfunc_rev_rate_date_tbl.EXTEND(1);
8692 l_pfunc_rev_rate_date_tbl(l_pfunc_rev_rate_date_tbl.COUNT) := p_pfunc_rev_rate_date_tbl(i);
8693 l_change_reason_code_tbl.EXTEND(1);
8694 l_change_reason_code_tbl(l_change_reason_code_tbl.COUNT) := p_change_reason_code_tbl(i);
8695 l_description_tbl.EXTEND(1);
8696 l_description_tbl(l_description_tbl.COUNT) := p_description_tbl(i);
8697
8698 ELSIF Nvl(p_delete_flag_tbl(i), 'N') = 'Y' THEN
8699 -- if the delete flag is Y then collecting them separately
8700 l_df_ra_id_tbl.EXTEND(1);
8701 l_df_ra_id_tbl(l_df_ra_id_tbl.COUNT) := p_ra_id_tbl(i);
8702 l_df_task_id_tbl.EXTEND(1);
8703 l_df_task_id_tbl(l_df_task_id_tbl.COUNT) := p_task_id_tbl(i);
8704 l_df_rlm_id_tbl.EXTEND(1);
8705 l_df_rlm_id_tbl(l_df_rlm_id_tbl.COUNT) := p_rlm_id_tbl(i);
8706 l_df_cbs_element_id_tbl.EXTEND(1);
8707 l_df_cbs_element_id_tbl(l_df_cbs_element_id_tbl.COUNT) := p_cbs_element_id_tbl(i);
8708 l_df_spread_curve_id_tbl.EXTEND(1);
8709 l_df_spread_curve_id_tbl(l_df_spread_curve_id_tbl.COUNT) := p_spread_curve_id_tbl(i);
8710 l_df_mfc_cost_type_id_tbl.EXTEND(1);
8711 l_df_mfc_cost_type_id_tbl(l_df_mfc_cost_type_id_tbl.COUNT) := p_mfc_cost_type_id_tbl(i);
8712 l_df_etc_method_code.EXTEND(1);
8713 l_df_etc_method_code(l_df_etc_method_code.COUNT) := p_etc_method_code_tbl(i);
8714 l_df_sp_fixed_date_tbl.EXTEND(1);
8715 l_df_sp_fixed_date_tbl(l_df_sp_fixed_date_tbl.COUNT) := p_sp_fixed_date_tbl(i);
8716 l_df_res_class_code_tbl.EXTEND(1);
8717 l_df_res_class_code_tbl(l_df_res_class_code_tbl.COUNT) := p_res_class_code_tbl(i);
8718 l_df_rate_based_flag_tbl.EXTEND(1);
8719 l_df_rate_based_flag_tbl(l_df_rate_based_flag_tbl.COUNT) := p_rate_based_flag_tbl(i);
8720 l_df_rbs_elem_id_tbl.EXTEND(1);
8721 l_df_rbs_elem_id_tbl(l_df_rbs_elem_id_tbl.COUNT) := p_rbs_elem_id_tbl(i);
8722 l_df_txn_currency_code_tbl.EXTEND(1);
8723 l_df_txn_currency_code_tbl(l_df_txn_currency_code_tbl.COUNT) := p_txn_currency_code_tbl(i);
8724 l_df_planning_start_date_tbl.EXTEND(1);
8725 l_df_planning_start_date_tbl(l_df_planning_start_date_tbl.COUNT) := p_planning_start_date_tbl(i);
8726 l_df_planning_end_date_tbl.EXTEND(1);
8727 l_df_planning_end_date_tbl(l_df_planning_end_date_tbl.COUNT) := p_planning_end_date_tbl(i);
8728 l_df_total_qty_tbl.EXTEND(1);
8729 l_df_total_qty_tbl(l_df_total_qty_tbl.COUNT) := p_total_qty_tbl(i);
8730 l_df_total_raw_cost_tbl.EXTEND(1);
8731 l_df_total_raw_cost_tbl(l_df_total_raw_cost_tbl.COUNT) := p_total_raw_cost_tbl(i);
8732 l_df_total_burdened_cost_tbl.EXTEND(1);
8733 l_df_total_burdened_cost_tbl(l_df_total_burdened_cost_tbl.COUNT) := p_total_burdened_cost_tbl(i);
8734 l_df_total_revenue_tbl.EXTEND(1);
8735 l_df_total_revenue_tbl(l_df_total_revenue_tbl.COUNT) := p_total_revenue_tbl(i);
8736 l_df_raw_cost_rate_tbl.EXTEND(1);
8737 l_df_raw_cost_rate_tbl(l_df_raw_cost_rate_tbl.COUNT) := p_raw_cost_rate_tbl(i);
8738 l_df_burdened_cost_rate_tbl.EXTEND(1);
8739 l_df_burdened_cost_rate_tbl(l_df_burdened_cost_rate_tbl.COUNT) := p_burdened_cost_rate_tbl(i);
8740 l_df_bill_rate_tbl.EXTEND(1);
8741 l_df_bill_rate_tbl(l_df_bill_rate_tbl.COUNT) := p_bill_rate_tbl(i);
8742 l_df_line_start_date_tbl.EXTEND(1);
8743 l_df_line_start_date_tbl(l_df_line_start_date_tbl.COUNT) := p_line_start_date_tbl(i);
8744 l_df_line_end_date_tbl.EXTEND(1);
8745 l_df_line_end_date_tbl(l_df_line_end_date_tbl.COUNT) := p_line_end_date_tbl(i);
8746 l_df_pj_cost_rate_typ_tbl.EXTEND(1);
8747 l_df_pj_cost_rate_typ_tbl(l_df_pj_cost_rate_typ_tbl.COUNT) := p_proj_cost_rate_type_tbl(i);
8748 l_df_pj_cost_rate_date_typ_tbl.EXTEND(1);
8749 l_df_pj_cost_rate_date_typ_tbl(l_df_pj_cost_rate_date_typ_tbl.COUNT) := p_proj_cost_rate_date_type_tbl(i);
8750 l_df_pj_cost_rate_tbl.EXTEND(1);
8751 l_df_pj_cost_rate_tbl(l_df_pj_cost_rate_tbl.COUNT) := p_proj_cost_rate_tbl(i);
8752 l_df_pj_cost_rate_date_tbl.EXTEND(1);
8753 l_df_pj_cost_rate_date_tbl(l_df_pj_cost_rate_date_tbl.COUNT) := p_proj_cost_rate_date_tbl(i);
8754 l_df_pj_rev_rate_typ_tbl.EXTEND(1);
8755 l_df_pj_rev_rate_typ_tbl(l_df_pj_rev_rate_typ_tbl.COUNT) := p_proj_rev_rate_type_tbl(i);
8756 l_df_pj_rev_rate_date_typ_tbl.EXTEND(1);
8757 l_df_pj_rev_rate_date_typ_tbl(l_df_pj_rev_rate_date_typ_tbl.COUNT) := p_proj_rev_rate_date_type_tbl(i);
8758 l_df_pj_rev_rate_tbl.EXTEND(1);
8759 l_df_pj_rev_rate_tbl(l_df_pj_rev_rate_tbl.COUNT) := p_proj_rev_rate_tbl(i);
8760 l_df_pj_rev_rate_date_tbl.EXTEND(1);
8761 l_df_pj_rev_rate_date_tbl(l_df_pj_rev_rate_date_tbl.COUNT) := p_proj_rev_rate_date_tbl(i);
8762 l_df_pf_cost_rate_typ_tbl.EXTEND(1);
8763 l_df_pf_cost_rate_typ_tbl(l_df_pf_cost_rate_typ_tbl.COUNT) := p_pfunc_cost_rate_type_tbl(i);
8764 l_df_pf_cost_rate_date_typ_tbl.EXTEND(1);
8765 l_df_pf_cost_rate_date_typ_tbl(l_df_pf_cost_rate_date_typ_tbl.COUNT) := p_pfunc_cost_rate_date_typ_tbl(i);
8766 l_df_pf_cost_rate_tbl.EXTEND(1);
8767 l_df_pf_cost_rate_tbl(l_df_pf_cost_rate_tbl.COUNT) := p_pfunc_cost_rate_tbl(i);
8768 l_df_pf_cost_rate_date_tbl.EXTEND(1);
8769 l_df_pf_cost_rate_date_tbl(l_df_pf_cost_rate_date_tbl.COUNT) := p_pfunc_cost_rate_date_tbl(i);
8770 l_df_pf_rev_rate_typ_tbl.EXTEND(1);
8771 l_df_pf_rev_rate_typ_tbl(l_df_pf_rev_rate_typ_tbl.COUNT) := p_pfunc_rev_rate_type_tbl(i);
8772 l_df_pf_rev_rate_date_typ_tbl.EXTEND(1);
8773 l_df_pf_rev_rate_date_typ_tbl(l_df_pf_rev_rate_date_typ_tbl.COUNT) := p_pfunc_rev_rate_date_type_tbl(i);
8774 l_df_pf_rev_rate_tbl.EXTEND(1);
8775 l_df_pf_rev_rate_tbl(l_df_pf_rev_rate_tbl.COUNT) := p_pfunc_rev_rate_tbl(i);
8776 l_df_pf_rev_rate_date_tbl.EXTEND(1);
8777 l_df_pf_rev_rate_date_tbl(l_df_pf_rev_rate_date_tbl.COUNT) := p_pfunc_rev_rate_date_tbl(i);
8778 l_df_change_reason_code_tbl.EXTEND(1);
8779 l_df_change_reason_code_tbl(l_df_change_reason_code_tbl.COUNT) := p_change_reason_code_tbl(i);
8780 l_df_description_tbl.EXTEND(1);
8781 l_df_description_tbl(l_df_description_tbl.COUNT) := p_description_tbl(i);
8782 END IF; -- delete_flag
8783 END LOOP;
8784 ELSE -- periodic, considering all the records passed
8785 l_task_id_tbl := p_task_id_tbl;
8786 l_rlm_id_tbl := p_rlm_id_tbl;
8787 l_cbs_element_id_tbl := p_cbs_element_id_tbl;-- cbs enhancement changes bug#16445106
8788 l_ra_id_tbl := p_ra_id_tbl;
8789 l_txn_currency_code_tbl := p_txn_currency_code_tbl;
8790 l_planning_start_date_tbl := p_planning_start_date_tbl;
8791 l_planning_end_date_tbl := p_planning_end_date_tbl;
8792 l_spread_curve_id_tbl := p_spread_curve_id_tbl;
8793 l_mfc_cost_type_id_tbl := p_mfc_cost_type_id_tbl;
8794 l_etc_method_code_tbl := p_etc_method_code_tbl;
8795 l_sp_fixed_date_tbl := p_sp_fixed_date_tbl;
8796 l_res_class_code_tbl := p_res_class_code_tbl;
8797 l_rate_based_flag_tbl := p_rate_based_flag_tbl;
8798 l_rbs_elem_id_tbl := p_rbs_elem_id_tbl;
8799 l_total_qty_tbl := p_total_qty_tbl;
8800 l_total_raw_cost_tbl := p_total_raw_cost_tbl;
8801 l_total_burdened_cost_tbl := p_total_burdened_cost_tbl;
8802 l_total_revenue_tbl := p_total_revenue_tbl;
8803 l_raw_cost_rate_tbl := p_raw_cost_rate_tbl;
8804 l_burdened_cost_rate_tbl := p_burdened_cost_rate_tbl;
8805 l_bill_rate_tbl := p_bill_rate_tbl;
8806 l_line_start_date_tbl := p_line_start_date_tbl;
8807 l_line_end_date_tbl := p_line_end_date_tbl;
8808 l_proj_cost_rate_type_tbl := p_proj_cost_rate_type_tbl;
8809 l_proj_cost_rate_date_type_tbl := p_proj_cost_rate_date_type_tbl;
8810 l_proj_cost_rate_tbl := p_proj_cost_rate_tbl;
8811 l_proj_cost_rate_date_tbl := p_proj_cost_rate_date_tbl;
8812 l_proj_rev_rate_type_tbl := p_proj_rev_rate_type_tbl;
8813 l_proj_rev_rate_date_type_tbl := p_proj_rev_rate_date_type_tbl;
8814 l_proj_rev_rate_tbl := p_proj_rev_rate_tbl;
8815 l_proj_rev_rate_date_tbl := p_proj_rev_rate_date_tbl;
8816 l_pfunc_cost_rate_type_tbl := p_pfunc_cost_rate_type_tbl;
8817 l_pfunc_cost_rate_date_typ_tbl := p_pfunc_cost_rate_date_typ_tbl;
8818 l_pfunc_cost_rate_tbl := p_pfunc_cost_rate_tbl;
8819 l_pfunc_cost_rate_date_tbl := p_pfunc_cost_rate_date_tbl;
8820 l_pfunc_rev_rate_type_tbl := p_pfunc_rev_rate_type_tbl;
8821 l_pfunc_rev_rate_date_type_tbl := p_pfunc_rev_rate_date_type_tbl;
8822 l_pfunc_rev_rate_tbl := p_pfunc_rev_rate_tbl;
8823 l_pfunc_rev_rate_date_tbl := p_pfunc_rev_rate_date_tbl;
8824 l_change_reason_code_tbl := p_change_reason_code_tbl;
8825 l_description_tbl := p_description_tbl;
8826 END IF; -- p_context
8827 --log1('PBL 2 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8828
8829 --log1('----- STAGE PBL1.3-------');
8830 IF l_debug_mode = 'Y' THEN
8831 pa_debug.g_err_stage := 'Input parameters are copied to local variables';
8832 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8833 pa_debug.g_err_stage := 'Checking for existing RAs';
8834 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8835 END IF;
8836
8837 --log1('PBL 3 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8838 -- noting down the number of records passed
8839 l_total_rec_passed := p_task_id_tbl.COUNT;
8840 --log1('----- STAGE PBL1.4-------');
8841 FOR i IN 1..l_ra_id_tbl.COUNT LOOP
8842 -- checking for existing RAs
8843 -- firing the select only if it has not been done for the task-resource combination
8844 l_distinct_new_ra_index:= 'T'||l_task_id_tbl(i)||'R'||l_rlm_id_tbl(i);
8845 IF l_ra_id_tbl(i) IS NULL AND
8846 (NOT l_distinct_new_ra_tbl.EXISTS(l_distinct_new_ra_index)) THEN
8847
8848 --log1('----- STAGE PBL2-------');
8849 --Populate the l_distinct_new_ra_tbl for the index corresponding to the Task/Rlm
8850 --with the value 0 to indicate the Task/Rlm has already been selected as input
8851 --for insertion
8852 l_distinct_new_ra_tbl(l_distinct_new_ra_index):=0;
8853 IF l_task_id_tbl(i) <> 0 THEN
8854 --Copy input params for add i.e derive the element version id,rlm id
8855 -- selecting element_version_id
8856 BEGIN
8857 SELECT pev.element_version_id
8858 INTO l_new_elem_ver_id
8859 FROM pa_proj_element_versions pev
8860 WHERE pev.proj_element_id = l_task_id_tbl(i)
8861 AND pev.parent_structure_version_id = p_version_info_rec.x_project_structure_version_id;
8862 --log1('----- STAGE PBL5-------');
8863 EXCEPTION
8864 WHEN NO_DATA_FOUND THEN
8865 --log1('----- STAGE PBL6-------');
8866 IF l_debug_mode = 'Y' THEN
8867 pa_debug.g_err_stage := 'No Elem Version Id found for the task id passed';
8868 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8869 END IF;
8870 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8871 END;
8872 ELSE
8873 -- for project level plannings
8874 l_new_elem_ver_id := 0;
8875 END IF;
8876 --log1('----- STAGE PBL7-------');
8877 -- populating the other required inputs for add_plan_txn
8878 l_new_elem_ver_id_tbl.EXTEND(1);
8879 l_new_elem_ver_id_tbl(l_new_elem_ver_id_tbl.COUNT) := l_new_elem_ver_id;
8880 l_new_rlm_id_tbl.EXTEND(1);
8881 l_new_rlm_id_tbl(l_new_rlm_id_tbl.COUNT) := l_rlm_id_tbl(i);
8882 l_new_cbs_elemet_id_tbl.EXTEND(1);
8883 l_new_cbs_elemet_id_tbl(l_new_cbs_elemet_id_tbl.COUNT):= l_cbs_element_id_tbl(i);-- cbs enhancement changes bug#16445106
8884 --DEBUG_NS ('l_cbs_element_id_tbl' ||i ||' :: '|| l_cbs_element_id_tbl(i));
8885 l_new_planning_start_date_tbl.EXTEND(1);
8886 l_new_planning_start_date_tbl(l_new_planning_start_date_tbl.COUNT) := l_planning_start_date_tbl(i);
8887 l_new_planning_end_date_tbl.EXTEND(1);
8888 l_new_planning_end_date_tbl(l_new_planning_end_date_tbl.COUNT) := l_planning_end_date_tbl(i);
8889
8890 --log1('----- STAGE PBL9-------');
8891 END IF; /* if RA is null at index */
8892 --log1('----- STAGE PBL11-------');
8893 END LOOP;
8894 --log1('PBL 4 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8895 --log1('PBL 4.1 '||l_new_elem_ver_id_tbl.COUNT );
8896 --log1('----- STAGE PBL11.7------- || '||l_new_elem_ver_id_tbl.COUNT);
8897
8898 IF l_new_elem_ver_id_tbl.COUNT > 0 THEN
8899 -- there are new task-resource records to be inserted
8900 IF l_debug_mode = 'Y' THEN
8901 pa_debug.g_err_stage := 'Inputs prepared for add_plan_txn and calling';
8902 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8903 END IF;
8904 -- Calling add_planning_transaction for those records for which RA doesnot exists
8905
8906 --Note down the current value of pa_resource_assignments_s.nextval
8907 BEGIN
8908 --log1('----- STAGE PBL15-------');
8909 SELECT pa_resource_assignments_s.nextval
8910 INTO l_curr_ra_id_seq
8911 FROM DUAL
8912 WHERE 1 = 1;
8913 --log1('----- STAGE PBL16-------');
8914 EXCEPTION
8915 WHEN OTHERS THEN
8916 IF l_debug_mode = 'Y' THEN
8917 pa_debug.g_err_stage := 'Error while getting RA Id sequence';
8918 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8919 END IF;
8920 RAISE;
8921 END;
8922 --log1('----- STAGE PBL17-------');
8923 --log1('----- STAGE PBL17.1------- '||l_new_elem_ver_id_tbl.count);
8924 --log1('----- STAGE PBL17.2------- '||l_new_rlm_id_tbl.count);
8925 --log1('----- STAGE PBL17.3------- '||p_version_info_rec.x_plan_class_code);
8926 -- calling add_planning_transaction
8927 --DEBUG_NS ('Before add_planning_transactions call ');
8928 --DEBUG_NS ('l_new_cbs_elemet_id_tbl.count:: '|| l_new_cbs_elemet_id_tbl.count);
8929 PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions
8930 (p_context => p_version_info_rec.x_plan_class_code
8931 ,p_one_to_one_mapping_flag => 'Y'
8932 ,p_calling_module => 'WEBADI'
8933 ,p_project_id => p_version_info_rec.x_project_id
8934 ,p_budget_version_id => p_budget_version_id
8935 ,p_task_elem_version_id_tbl => l_new_elem_ver_id_tbl
8936 ,p_resource_list_member_id_tbl => l_new_rlm_id_tbl
8937 ,p_cbs_element_id_tbl => l_new_cbs_elemet_id_tbl-- cbs enhancement changes bug#16445106
8938 --,p_planning_start_date_tbl => l_new_planning_start_date_tbl -- commented for Bug#14643744
8939 --,p_planning_end_date_tbl => l_new_planning_end_date_tbl
8940 ,x_return_status => x_return_status
8941 ,x_msg_data => l_msg_data
8942 ,x_msg_count => l_msg_count);
8943
8944 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8945 IF l_debug_mode = 'Y' THEN
8946 pa_debug.g_err_stage:='Called API pa_fp_planning_transaction_pub.add_planning_transaction api returned error';
8947 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8948 END IF;
8949 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8950 END IF;
8951 IF l_debug_mode = 'Y' THEN
8952 pa_debug.g_err_stage := 'Add_planning_transaction called';
8953 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8954 END IF;
8955 END IF; -- new RAs
8956 --log1('PBL 5 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8957
8958 --log1('----- STAGE PBL11.8------- || '||l_ra_id_tbl.COUNT);
8959
8960 FOR i IN 1 .. l_ra_id_tbl.COUNT LOOP
8961 IF l_ra_id_tbl(i) IS NULL THEN
8962 -- collect all the new RA ids for that task-resource
8963 BEGIN
8964 SELECT pra.resource_assignment_id,
8965 pra.rbs_element_id,
8966 pra.resource_class_code,
8967 pra.rate_based_flag
8968 INTO l_new_ra_id,
8969 l_new_res_asg_rbs_elem_id,
8970 l_new_res_asg_res_class_code,
8971 l_new_res_asg_rate_based_flag
8972 FROM pa_resource_assignments pra
8973 WHERE pra.budget_version_id = p_budget_version_id
8974 AND pra.project_id = p_version_info_rec.x_project_id
8975 AND pra.task_id = l_task_id_tbl(i)
8976 AND pra.resource_list_member_id = l_rlm_id_tbl(i)
8977 AND pra.project_assignment_id = -1;
8978
8979 -- stamping the value of new RA id over null in p_ra_id_tbl
8980 l_ra_id_tbl(i) := l_new_ra_id;
8981
8982 EXCEPTION
8983 WHEN NO_DATA_FOUND THEN
8984 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8985 END;
8986 END IF;
8987 END LOOP;
8988 --log1('PBL 6 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8989 --log1('PBL 7 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
8990
8991 -- Deleting records from pa_budget_lines, for the records with delete_flag as Y
8992 -- and if it is non periodic layout
8993 -- Bug 4424457. Moved the delete statement before calculate. This is done for the following reason
8994 ----Consider a case where RA has currencies C1 and C2 and delete flag is marked for C1. If calculate API
8995 ----changes C2 to C1 and if delete is executed for RA and C1 after call to calculate API then amounts
8996 ----entered against C2 by customer will not be honoured and this is not intended.
8997 IF p_context = 'WEBADI_NON_PERIODIC' THEN
8998 -- checking if there is any reord with delete_flag = Y
8999 IF l_df_ra_id_tbl.COUNT > 0 THEN
9000 IF l_debug_mode = 'Y' THEN
9001 pa_debug.g_err_stage := 'Deleting from pa_budget_lines for the records with delete_flag = Y';
9002 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9003 END IF;
9004 --log1('PBL 11 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9005
9006 /* Bug 5144013 : Modified the logic so that the attributes of the transaction
9007 for which delete flag is set as 'Y' in Excel will be populated in pa_fp_rollup_tmp as
9008 deletion of those planning transactions are taken care by delete_planning_transaction api.
9009 This is done as part of merging the MRUP3 changes done in 11i into R12.
9010 */
9011 /* commenting for bug 10160317 ..
9012 FOR i IN 1..l_df_ra_id_tbl.COUNT LOOP
9013 l_bl_del_flag_ra_id_tbl.extend();
9014 l_bl_del_flag_st_dt_tbl.extend();
9015 l_bl_del_flag_en_dt_tbl.extend();
9016 l_bl_del_flag_txn_curr_tbl.extend();
9017 l_bl_del_flag_txn_rc_tbl.extend();
9018 l_bl_del_flag_txn_bc_tbl.extend();
9019 l_bl_del_flag_txn_rev_tbl.extend();
9020 l_bl_del_flag_pf_curr_tbl.extend();
9021 l_bl_del_flag_pf_cr_typ_tbl.extend();
9022 l_bl_del_flag_pf_cr_dt_typ_tbl.extend();
9023 l_bl_del_flag_pf_cexc_rate_tbl.extend();
9024 l_bl_del_flag_pf_cr_date_tbl.extend();
9025 l_bl_del_flag_pf_rr_typ_tbl.extend();
9026 l_bl_del_flag_pf_rr_dt_typ_tbl.extend();
9027 l_bl_del_flag_pf_rexc_rate_tbl.extend();
9028 l_bl_del_flag_pf_rr_date_tbl.extend();
9029 l_bl_del_flag_pj_curr_tbl.extend();
9030 l_bl_del_flag_pj_cr_typ_tbl.extend();
9031 l_bl_del_flag_pj_cr_dt_typ_tbl.extend();
9032 l_bl_del_flag_pj_cexc_rate_tbl.extend();
9033 l_bl_del_flag_pj_cr_date_tbl.extend();
9034 l_bl_del_flag_pj_rr_typ_tbl.extend();
9035 l_bl_del_flag_pj_rr_dt_typ_tbl.extend();
9036 l_bl_del_flag_pj_rexc_rate_tbl.extend();
9037 l_bl_del_flag_pj_rr_date_tbl.extend();
9038 l_bl_del_flag_bl_id_tbl.extend();
9039 l_bl_del_flag_per_name_tbl.extend();
9040 l_bl_del_flag_pj_raw_cost_tbl.extend();
9041 l_bl_del_flag_pj_burd_cost_tbl.extend();
9042 l_bl_del_flag_pj_rev_tbl.extend();
9043 l_bl_del_flag_raw_cost_tbl.extend();
9044 l_bl_del_flag_burd_cost_tbl.extend();
9045 l_bl_del_flag_rev_tbl.extend();
9046 l_bl_del_flag_qty_tbl.extend();
9047 l_bl_del_flag_c_rej_code_tbl.extend();
9048 l_bl_del_flag_b_rej_code_tbl.extend();
9049 l_bl_del_flag_r_rej_code_tbl.extend();
9050 l_bl_del_flag_o_rej_code_tbl.extend();
9051 l_bl_del_fg_pc_cnv_rej_cd_tbl.extend();
9052 l_bl_del_fg_pf_cnv_rej_cd_tbl.extend();
9053 SELECT
9054 pbl.resource_assignment_id,
9055 pbl.start_date,
9056 pbl.end_date,
9057 pbl.txn_currency_code,
9058 pbl.txn_raw_cost,
9059 pbl.txn_burdened_cost,
9060 pbl.txn_revenue,
9061 pbl.projfunc_currency_code,
9062 pbl.projfunc_cost_rate_type,
9063 pbl.projfunc_cost_rate_date_type,
9064 pbl.projfunc_cost_exchange_rate,
9065 pbl.projfunc_cost_rate_date,
9066 pbl.projfunc_rev_rate_type,
9067 pbl.projfunc_rev_rate_date_type,
9068 pbl.projfunc_rev_exchange_rate,
9069 pbl.projfunc_rev_rate_date,
9070 pbl.project_currency_code,
9071 pbl.project_cost_rate_type,
9072 pbl.project_cost_rate_date_type,
9073 pbl.project_cost_exchange_rate,
9074 pbl.project_cost_rate_date,
9075 pbl.project_rev_rate_type,
9076 pbl.project_rev_rate_date_type,
9077 pbl.project_rev_exchange_rate,
9078 pbl.project_rev_rate_date,
9079 pbl.budget_line_id,
9080 pbl.period_name,
9081 pbl.project_raw_cost,
9082 pbl.project_burdened_cost,
9083 pbl.project_revenue,
9084 pbl.raw_cost,
9085 pbl.burdened_cost,
9086 pbl.revenue,
9087 pbl.quantity,
9088 pbl.cost_rejection_code,
9089 pbl.burden_rejection_code,
9090 pbl.revenue_rejection_code,
9091 pbl.other_rejection_code,
9092 pbl.pc_cur_conv_rejection_code,
9093 pbl.pfc_cur_conv_rejection_code
9094 INTO
9095 l_bl_del_flag_ra_id_tbl(i),
9096 l_bl_del_flag_st_dt_tbl(i),
9097 l_bl_del_flag_en_dt_tbl(i),
9098 l_bl_del_flag_txn_curr_tbl(i),
9099 l_bl_del_flag_txn_rc_tbl(i),
9100 l_bl_del_flag_txn_bc_tbl(i),
9101 l_bl_del_flag_txn_rev_tbl(i),
9102 l_bl_del_flag_pf_curr_tbl(i),
9103 l_bl_del_flag_pf_cr_typ_tbl(i),
9104 l_bl_del_flag_pf_cr_dt_typ_tbl(i),
9105 l_bl_del_flag_pf_cexc_rate_tbl(i),
9106 l_bl_del_flag_pf_cr_date_tbl(i),
9107 l_bl_del_flag_pf_rr_typ_tbl(i),
9108 l_bl_del_flag_pf_rr_dt_typ_tbl(i),
9109 l_bl_del_flag_pf_rexc_rate_tbl(i),
9110 l_bl_del_flag_pf_rr_date_tbl(i),
9111 l_bl_del_flag_pj_curr_tbl(i),
9112 l_bl_del_flag_pj_cr_typ_tbl(i),
9113 l_bl_del_flag_pj_cr_dt_typ_tbl(i),
9114 l_bl_del_flag_pj_cexc_rate_tbl(i),
9115 l_bl_del_flag_pj_cr_date_tbl(i),
9116 l_bl_del_flag_pj_rr_typ_tbl(i),
9117 l_bl_del_flag_pj_rr_dt_typ_tbl(i),
9118 l_bl_del_flag_pj_rexc_rate_tbl(i),
9119 l_bl_del_flag_pj_rr_date_tbl(i),
9120 l_bl_del_flag_bl_id_tbl(i),
9121 l_bl_del_flag_per_name_tbl(i),
9122 l_bl_del_flag_pj_raw_cost_tbl(i),
9123 l_bl_del_flag_pj_burd_cost_tbl(i),
9124 l_bl_del_flag_pj_rev_tbl(i),
9125 l_bl_del_flag_raw_cost_tbl(i),
9126 l_bl_del_flag_burd_cost_tbl(i),
9127 l_bl_del_flag_rev_tbl(i),
9128 l_bl_del_flag_qty_tbl(i),
9129 l_bl_del_flag_c_rej_code_tbl(i),
9130 l_bl_del_flag_b_rej_code_tbl(i),
9131 l_bl_del_flag_r_rej_code_tbl(i),
9132 l_bl_del_flag_o_rej_code_tbl(i),
9133 l_bl_del_fg_pc_cnv_rej_cd_tbl(i),
9134 l_bl_del_fg_pf_cnv_rej_cd_tbl(i)
9135 FROM pa_budget_lines pbl
9136 WHERE pbl.resource_assignment_id = l_df_ra_id_tbl(i)
9137 AND pbl.txn_currency_code = l_df_txn_currency_code_tbl(i);
9138 END LOOP;
9139 */
9140 /*Bug 5144013: Calling delete_planning_transactions api to delete the planning transaction
9141 from pa_budget_lines and from new entity when delete flag is set as 'Y' in Excel for a
9142 planning transaction. This is done as part of merging the MRUP3 changes done in 11i into R12.
9143 */
9144 IF l_debug_mode = 'Y' THEN
9145 pa_debug.g_err_stage := 'Before Calling pa_fp_planning_transaction_pub.delete_planning_transactions';
9146 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9147 END IF;
9148 pa_fp_planning_transaction_pub.delete_planning_transactions(
9149 p_context => 'BUDGET'
9150 ,p_task_or_res => 'ASSIGNMENT'
9151 ,p_resource_assignment_tbl => l_df_ra_id_tbl
9152 ,p_currency_code_tbl => l_df_txn_currency_code_tbl
9153 ,x_return_status => x_return_status
9154 ,x_msg_count => l_msg_count
9155 ,x_msg_data => l_msg_data);
9156 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9157 IF l_debug_mode = 'Y' THEN
9158 pa_debug.g_err_stage:='Called API pa_fp_planning_transactions_pub.delete_planning_transactions returned error';
9159 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
9160 END IF;
9161 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9162 END IF;
9163 IF l_debug_mode = 'Y' THEN
9164 pa_debug.g_err_stage := 'After Calling pa_fp_planning_transaction_pub.delete_planning_transactions';
9165 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9166 END IF;
9167
9168 IF l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
9169 IF l_debug_mode = 'Y' THEN
9170 pa_debug.g_err_stage := l_bl_del_flag_ra_id_tbl.COUNT || ' records deleted from pa_budget_lines';
9171 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9172 pa_debug.g_err_stage := 'Inserting these records into pa_fp_rollup_tmp';
9173 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9174 END IF;
9175
9176 --log1('Preparing ra attr tbls for rollup tmp ins');
9177
9178 END IF;
9179
9180 END IF;--IF l_df_ra_id_tbl.COUNT > 0 THEN
9181
9182 END IF;--IF p_context = 'WEBADI_NON_PERIODIC' THEN
9183
9184
9185 -- calling calculate api for budget line context for all the elligible records
9186 IF l_ra_id_tbl.COUNT > 0 THEN
9187 IF l_debug_mode = 'Y' THEN
9188 pa_debug.g_err_stage := 'Calling calculate to spread amount';
9189 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9190 END IF;
9191 IF p_context = 'WEBADI_PERIODIC' THEN
9192 l_calc_calling_context := PA_FP_CONSTANTS_PKG.G_CALC_API_BUDGET_LINE;
9193 ELSIF p_context = 'WEBADI_NON_PERIODIC' THEN
9194 l_line_start_date_tbl := SYSTEM.pa_date_tbl_type();
9195 l_line_end_date_tbl := SYSTEM.pa_date_tbl_type();
9196 l_calc_calling_context := PA_FP_CONSTANTS_PKG.G_CALC_API_RESOURCE_CONTEXT;
9197 END IF;
9198
9199 IF l_debug_mode = 'Y' THEN
9200 pa_debug.g_err_stage := 'Calling context' || l_calc_calling_context;
9201 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9202 END IF;
9203
9204 --log1('PBL 8 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9205 --log1('Before callling calc in pbl');
9206 /* log1('l_calc_calling_context '||l_calc_calling_context);
9207 FOR zz IN 1..l_ra_id_tbl.COUNT LOOP
9208
9209 log1('l_ra_id_tbl('||zz||') is '||l_ra_id_tbl(zz));
9210 log1('l_txn_currency_code_tbl('||zz||') is '||l_txn_currency_code_tbl(zz));
9211 IF l_total_qty_tbl.COUNT >0 THEN
9212 log1('l_total_qty_tbl('||zz||') is '||l_total_qty_tbl(zz));
9213 END IF;
9214 IF l_total_raw_cost_tbl.COUNT >0 THEN
9215 log1('l_total_raw_cost_tbl('||zz||') is '||l_total_raw_cost_tbl(zz));
9216 END IF;
9217 IF l_total_burdened_cost_tbl.COUNT > 0 THEN
9218 log1('l_total_burdened_cost_tbl('||zz||') is '||l_total_burdened_cost_tbl(zz));
9219 END IF;
9220 IF l_total_revenue_tbl.COUNT>0 THEN
9221 log1('l_total_revenue_tbl('||zz||') is '||l_total_revenue_tbl(zz));
9222 END IF;
9223 IF l_raw_cost_rate_tbl.COUNT>0 THEN
9224 log1('l_raw_cost_rate_tbl('||zz||') is '||l_raw_cost_rate_tbl(zz));
9225 END IF;
9226 IF l_burdened_cost_rate_tbl.COUNT>0 THEN
9227 log1('l_burdened_cost_rate_tbl('||zz||') is '||l_burdened_cost_rate_tbl(zz));
9228 END IF;
9229 IF l_bill_rate_tbl.COUNT>0 THEN
9230 log1('l_bill_rate_tbl('||zz||') is '||l_bill_rate_tbl(zz));
9231 END IF;
9232 IF l_line_start_date_tbl.COUNT>0 THEN
9233 log1('l_line_start_date_tbl('||zz||') is '||l_line_start_date_tbl(zz));
9234 END IF;
9235 IF l_line_end_date_tbl.COUNT>0 THEN
9236 log1('l_line_end_date_tbl('||zz||') is '||l_line_end_date_tbl(zz));
9237 END IF;
9238
9239 END LOOP;*/
9240 --log1('PBL 9 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9241 PA_FP_CALC_PLAN_PKG.calculate(
9242 p_project_id => p_version_info_rec.x_project_id
9243 ,p_budget_version_id => p_budget_version_id
9244 ,p_rollup_required_flag => 'N'
9245 ,p_source_context => l_calc_calling_context
9246 ,p_conv_rates_required_flag => 'N'
9247 ,p_resource_assignment_tab => l_ra_id_tbl
9248 ,p_txn_currency_code_tab => l_txn_currency_code_tbl
9249 ,p_total_qty_tab => l_total_qty_tbl
9250 ,p_total_raw_cost_tab => l_total_raw_cost_tbl
9251 ,p_total_burdened_cost_tab => l_total_burdened_cost_tbl
9252 ,p_total_revenue_tab => l_total_revenue_tbl
9253 ,p_rw_cost_rate_override_tab => l_raw_cost_rate_tbl
9254 ,p_b_cost_rate_override_tab => l_burdened_cost_rate_tbl
9255 ,p_bill_rate_override_tab => l_bill_rate_tbl
9256 ,p_line_start_date_tab => l_line_start_date_tbl
9257 ,p_line_end_date_tab => l_line_end_date_tbl
9258 ,p_raTxn_rollup_api_call_flag => 'N'
9259 ,x_return_status => x_return_status
9260 ,x_msg_count => l_msg_count
9261 ,x_msg_data => l_msg_data);
9262 --log1('PBL 10 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9263 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9264
9265 IF l_debug_mode = 'Y' THEN
9266 pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate returned error';
9267 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
9268 END IF;
9269 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9270 END IF;
9271
9272 --Bug 4424457. Find out if there are budget lines that are processed by calculate API
9273 BEGIN
9274 SELECT 'Y'
9275 INTO l_bls_proccessed_flag
9276 FROM DUAL
9277 WHERE EXISTS (SELECT 1
9278 FROM pa_fp_rollup_tmp);
9279 EXCEPTION
9280 WHEN NO_DATA_FOUND THEN
9281 l_bls_proccessed_flag:='N';
9282 END;
9283
9284 END IF; -- if there are data in input tables prepared
9285
9286 -- Deleting records from pa_budget_lines, for the records with delete_flag as Y
9287 -- and if it is non periodic layout
9288 IF p_context = 'WEBADI_NON_PERIODIC' THEN
9289 -- checking if there is any reord with delete_flag = Y
9290 IF l_df_ra_id_tbl.COUNT > 0 THEN
9291 --log1('PBL 12 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9292 IF l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
9293 IF l_debug_mode = 'Y' THEN
9294 pa_debug.g_err_stage := l_bl_del_flag_ra_id_tbl.COUNT || ' records deleted from pa_budget_lines';
9295 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9296 pa_debug.g_err_stage := 'Inserting these records into pa_fp_rollup_tmp';
9297 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9298 END IF;
9299
9300 --log1('Preparing ra attr tbls for rollup tmp ins');
9301
9302 /* Bug 10160317
9303 -- inserting these deleted records into pa_fp_rollup_tmp with delete flag as Y
9304 FORALL i IN l_bl_del_flag_ra_id_tbl.FIRST .. l_bl_del_flag_ra_id_tbl.LAST
9305 INSERT INTO
9306 pa_fp_rollup_tmp
9307 (resource_assignment_id,
9308 start_date,
9309 end_date,
9310 txn_currency_code,
9311 txn_raw_cost,
9312 txn_burdened_cost,
9313 txn_revenue,
9314 projfunc_currency_code,
9315 projfunc_cost_rate_type,
9316 projfunc_cost_rate_date_type,
9317 projfunc_cost_exchange_rate,
9318 projfunc_cost_rate_date,
9319 projfunc_rev_rate_type,
9320 projfunc_rev_rate_date_type,
9321 projfunc_rev_exchange_rate,
9322 projfunc_rev_rate_date,
9323 project_currency_code,
9324 project_cost_rate_type,
9325 project_cost_rate_date_type,
9326 project_cost_exchange_rate,
9327 project_cost_rate_date,
9328 project_rev_rate_type,
9329 project_rev_rate_date_type,
9330 project_rev_exchange_rate,
9331 project_rev_rate_date,
9332 budget_line_id,
9333 delete_flag,
9334 period_name,
9335 project_raw_cost,
9336 project_burdened_cost,
9337 project_revenue,
9338 projfunc_raw_cost,
9339 projfunc_burdened_cost,
9340 projfunc_revenue,
9341 quantity,
9342 cost_rejection_code,
9343 burden_rejection_code,
9344 revenue_rejection_code,
9345 pc_cur_conv_rejection_code,
9346 pfc_cur_conv_rejection_code,
9347 system_reference4) -- for other_rejection_code
9348 VALUES
9349 (l_bl_del_flag_ra_id_tbl(i),
9350 l_bl_del_flag_st_dt_tbl(i),
9351 l_bl_del_flag_en_dt_tbl(i),
9352 l_bl_del_flag_txn_curr_tbl(i),
9353 l_bl_del_flag_txn_rc_tbl(i),
9354 l_bl_del_flag_txn_bc_tbl(i),
9355 l_bl_del_flag_txn_rev_tbl(i),
9356 l_bl_del_flag_pf_curr_tbl(i),
9357 l_bl_del_flag_pf_cr_typ_tbl(i),
9358 l_bl_del_flag_pf_cr_dt_typ_tbl(i),
9359 l_bl_del_flag_pf_cexc_rate_tbl(i),
9360 l_bl_del_flag_pf_cr_date_tbl(i),
9361 l_bl_del_flag_pf_rr_typ_tbl(i),
9362 l_bl_del_flag_pf_rr_dt_typ_tbl(i),
9363 l_bl_del_flag_pf_rexc_rate_tbl(i),
9364 l_bl_del_flag_pf_rr_date_tbl(i),
9365 l_bl_del_flag_pj_curr_tbl(i),
9366 l_bl_del_flag_pj_cr_typ_tbl(i),
9367 l_bl_del_flag_pj_cr_dt_typ_tbl(i),
9368 l_bl_del_flag_pj_cexc_rate_tbl(i),
9369 l_bl_del_flag_pj_cr_date_tbl(i),
9370 l_bl_del_flag_pj_rr_typ_tbl(i),
9371 l_bl_del_flag_pj_rr_dt_typ_tbl(i),
9372 l_bl_del_flag_pj_rexc_rate_tbl(i),
9373 l_bl_del_flag_pj_rr_date_tbl(i),
9374 l_bl_del_flag_bl_id_tbl(i),
9375 'Y', -- delete_flag
9376 l_bl_del_flag_per_name_tbl(i),
9377 l_bl_del_flag_pj_raw_cost_tbl(i),
9378 l_bl_del_flag_pj_burd_cost_tbl(i),
9379 l_bl_del_flag_pj_rev_tbl(i),
9380 l_bl_del_flag_raw_cost_tbl(i),
9381 l_bl_del_flag_burd_cost_tbl(i),
9382 l_bl_del_flag_rev_tbl(i),
9383 l_bl_del_flag_qty_tbl(i),
9384 l_bl_del_flag_c_rej_code_tbl(i),
9385 l_bl_del_flag_b_rej_code_tbl(i),
9386 l_bl_del_flag_r_rej_code_tbl(i),
9387 l_bl_del_fg_pc_cnv_rej_cd_tbl(i),
9388 l_bl_del_fg_pf_cnv_rej_cd_tbl(i),
9389 l_bl_del_flag_o_rej_code_tbl(i));
9390 --log1('PBL 14 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9391 IF l_debug_mode = 'Y' THEN
9392 pa_debug.g_err_stage := 'records inserted into pa_fp_rollup_tmp';
9393 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9394 END IF;
9395 */
9396 ELSE
9397 -- no records deleted from pa_budget_lines
9398 IF l_debug_mode = 'Y' THEN
9399 pa_debug.g_err_stage := 'No records deleted from pa_budget_lines';
9400 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9401 END IF;
9402 END IF;
9403 END IF; -- records with delete_flag
9404
9405 -- releasing the memory occupied by deleting the temporary pl/sql table types
9406 l_df_task_id_tbl.DELETE;
9407 l_df_rlm_id_tbl.DELETE;
9408 l_df_cbs_element_id_tbl.DELETE;-- cbs enhancement changes bug#16445106
9409 l_df_spread_curve_id_tbl.DELETE;
9410 l_df_mfc_cost_type_id_tbl.DELETE;
9411 l_df_etc_method_code.DELETE;
9412 l_df_sp_fixed_date_tbl.DELETE;
9413 l_df_txn_currency_code_tbl.DELETE;
9414 l_df_planning_start_date_tbl.DELETE;
9415 l_df_planning_end_date_tbl.DELETE;
9416 l_df_total_qty_tbl.DELETE;
9417 l_df_total_raw_cost_tbl.DELETE;
9418 l_df_total_burdened_cost_tbl.DELETE;
9419 l_df_total_revenue_tbl.DELETE;
9420 l_df_raw_cost_rate_tbl.DELETE;
9421 l_df_burdened_cost_rate_tbl.DELETE;
9422 l_df_bill_rate_tbl.DELETE;
9423 l_df_line_start_date_tbl.DELETE;
9424 l_df_line_end_date_tbl.DELETE;
9425 l_df_pj_cost_rate_typ_tbl.DELETE;
9426 l_df_pj_cost_rate_date_typ_tbl.DELETE;
9427 l_df_pj_cost_rate_tbl.DELETE;
9428 l_df_pj_cost_rate_date_tbl.DELETE;
9429 l_df_pj_rev_rate_typ_tbl.DELETE;
9430 l_df_pj_rev_rate_date_typ_tbl.DELETE;
9431 l_df_pj_rev_rate_tbl.DELETE;
9432 l_df_pj_rev_rate_date_tbl.DELETE;
9433 l_df_pf_cost_rate_typ_tbl.DELETE;
9434 l_df_pf_cost_rate_date_typ_tbl.DELETE;
9435 l_df_pf_cost_rate_tbl.DELETE;
9436 l_df_pf_cost_rate_date_tbl.DELETE;
9437 l_df_pf_rev_rate_typ_tbl.DELETE;
9438 l_df_pf_rev_rate_date_typ_tbl.DELETE;
9439 l_df_pf_rev_rate_tbl.DELETE;
9440 l_df_pf_rev_rate_date_tbl.DELETE;
9441 l_df_change_reason_code_tbl.DELETE;
9442 l_df_description_tbl.DELETE;
9443
9444 l_bl_del_flag_st_dt_tbl.DELETE;
9445 l_bl_del_flag_en_dt_tbl.DELETE;
9446 l_bl_del_flag_txn_curr_tbl.DELETE;
9447 l_bl_del_flag_txn_rc_tbl.DELETE;
9448 l_bl_del_flag_txn_bc_tbl.DELETE;
9449 l_bl_del_flag_txn_rev_tbl.DELETE;
9450 l_bl_del_flag_pf_curr_tbl.DELETE;
9451 l_bl_del_flag_pf_cr_typ_tbl.DELETE;
9452 l_bl_del_flag_pf_cr_dt_typ_tbl.DELETE;
9453 l_bl_del_flag_pf_cexc_rate_tbl.DELETE;
9454 l_bl_del_flag_pf_cr_date_tbl.DELETE;
9455 l_bl_del_flag_pf_rr_typ_tbl.DELETE;
9456 l_bl_del_flag_pf_rr_dt_typ_tbl.DELETE;
9457 l_bl_del_flag_pf_rexc_rate_tbl.DELETE;
9458 l_bl_del_flag_pf_rr_date_tbl.DELETE;
9459 l_bl_del_flag_pj_curr_tbl.DELETE;
9460 l_bl_del_flag_pj_cr_typ_tbl.DELETE;
9461 l_bl_del_flag_pj_cr_dt_typ_tbl.DELETE;
9462 l_bl_del_flag_pj_cexc_rate_tbl.DELETE;
9463 l_bl_del_flag_pj_cr_date_tbl.DELETE;
9464 l_bl_del_flag_pj_rr_typ_tbl.DELETE;
9465 l_bl_del_flag_pj_rr_dt_typ_tbl.DELETE;
9466 l_bl_del_flag_pj_rexc_rate_tbl.DELETE;
9467 l_bl_del_flag_pj_rr_date_tbl.DELETE;
9468 l_bl_del_flag_bl_id_tbl.DELETE;
9469 l_bl_del_flag_per_name_tbl.DELETE;
9470 l_bl_del_flag_pj_raw_cost_tbl.DELETE;
9471 l_bl_del_flag_pj_burd_cost_tbl.DELETE;
9472 l_bl_del_flag_pj_rev_tbl.DELETE;
9473 l_bl_del_flag_raw_cost_tbl.DELETE;
9474 l_bl_del_flag_burd_cost_tbl.DELETE;
9475 l_bl_del_flag_rev_tbl.DELETE;
9476 l_bl_del_flag_qty_tbl.DELETE;
9477 l_bl_del_flag_c_rej_code_tbl.DELETE;
9478 l_bl_del_flag_b_rej_code_tbl.DELETE;
9479 l_bl_del_flag_r_rej_code_tbl.DELETE;
9480 l_bl_del_flag_o_rej_code_tbl.DELETE;
9481 l_bl_del_fg_pc_cnv_rej_cd_tbl.DELETE;
9482 l_bl_del_fg_pf_cnv_rej_cd_tbl.DELETE;
9483
9484 END IF; -- p_context = WEBADI_NON_PERIODIC
9485
9486 IF l_debug_mode = 'Y' THEN
9487 pa_debug.g_err_stage:='Updating pa_budget_lines with change reason code, desc and conv attr';
9488 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
9489 END IF;
9490
9491 -- updating conversion attributes if the version is enabled for multi currency
9492 -- Bug 4424457 : In all the below updates replaced pa_budget_lines with pa_fp_rollup_tmp. These
9493 -- attributes will be finally stamped back in pa_budget_lines after MC conversion
9494 IF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' AND
9495 p_context = 'WEBADI_PERIODIC' THEN
9496 IF l_ra_id_tbl.COUNT > 0 AND
9497 l_bls_proccessed_flag ='Y' THEN
9498 --log1('----- STAGE CRC1-------');
9499 --log1('PBL 15 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9500 FORALL i IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST
9501 UPDATE pa_fp_rollup_tmp pbl
9502 SET pbl.projfunc_cost_rate_type = DECODE (l_pfunc_cost_rate_type_tbl(i), NULL, pbl.projfunc_cost_rate_type,
9503 DECODE(l_pfunc_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_type_tbl(i))),
9504 pbl.projfunc_cost_rate_date_type = DECODE (l_pfunc_cost_rate_date_typ_tbl(i), NULL, pbl.projfunc_cost_rate_date_type,
9505 DECODE(l_pfunc_cost_rate_date_typ_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_date_typ_tbl(i))),
9506 pbl.projfunc_cost_exchange_rate = DECODE (l_pfunc_cost_rate_tbl(i), NULL, pbl.projfunc_cost_exchange_rate,
9507 DECODE(l_pfunc_cost_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_cost_rate_tbl(i))),
9508 pbl.projfunc_cost_rate_date = DECODE (l_pfunc_cost_rate_date_tbl(i), NULL, pbl.projfunc_cost_rate_date,
9509 DECODE(l_pfunc_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_cost_rate_date_tbl(i))),
9510 pbl.projfunc_rev_rate_type = DECODE (l_pfunc_rev_rate_type_tbl(i), NULL, pbl.projfunc_rev_rate_type,
9511 DECODE(l_pfunc_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_type_tbl(i))),
9512 pbl.projfunc_rev_rate_date_type = DECODE (l_pfunc_rev_rate_date_type_tbl(i), NULL, pbl.projfunc_rev_rate_date_type,
9513 DECODE(l_pfunc_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_date_type_tbl(i))),
9514 pbl.projfunc_rev_exchange_rate = DECODE (l_pfunc_rev_rate_tbl(i), NULL, pbl.projfunc_rev_exchange_rate,
9515 DECODE(l_pfunc_rev_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_rev_rate_tbl(i))),
9516 pbl.projfunc_rev_rate_date = DECODE (l_pfunc_rev_rate_date_tbl(i), NULL, pbl.projfunc_rev_rate_date,
9517 DECODE(l_pfunc_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_rev_rate_date_tbl(i))),
9518 pbl.project_cost_rate_type = DECODE (l_proj_cost_rate_type_tbl(i), NULL, pbl.project_cost_rate_type,
9519 DECODE(l_proj_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_type_tbl(i))),
9520 pbl.project_cost_rate_date_type = DECODE (l_proj_cost_rate_date_type_tbl(i), NULL, pbl.project_cost_rate_date_type,
9521 DECODE(l_proj_cost_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_date_type_tbl(i))),
9522 pbl.project_cost_exchange_rate = DECODE (l_proj_cost_rate_tbl(i), NULL, pbl.project_cost_exchange_rate,
9523 DECODE(l_proj_cost_rate_tbl(i), l_g_miss_num, NULL, l_proj_cost_rate_tbl(i))),
9524 pbl.project_cost_rate_date = DECODE (l_proj_cost_rate_date_tbl(i), NULL, pbl.project_cost_rate_date,
9525 DECODE(l_proj_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_cost_rate_date_tbl(i))),
9526 pbl.project_rev_rate_type = DECODE (l_proj_rev_rate_type_tbl(i), NULL, pbl.project_rev_rate_type,
9527 DECODE(l_proj_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_type_tbl(i))),
9528 pbl.project_rev_rate_date_type = DECODE (l_proj_rev_rate_date_type_tbl(i), NULL, pbl.project_rev_rate_date_type,
9529 DECODE(l_proj_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_date_type_tbl(i))),
9530 pbl.project_rev_exchange_rate = DECODE (l_proj_rev_rate_tbl(i), NULL, pbl.project_rev_exchange_rate,
9531 DECODE(l_proj_rev_rate_tbl(i), l_g_miss_num, NULL, l_proj_rev_rate_tbl(i))),
9532 pbl.project_rev_rate_date = DECODE (l_proj_rev_rate_date_tbl(i), NULL, pbl.project_rev_rate_date,
9533 DECODE(l_proj_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_rev_rate_date_tbl(i)))
9534 WHERE pbl.resource_assignment_id = l_ra_id_tbl(i)
9535 AND pbl.txn_currency_code = l_txn_currency_code_tbl(i)
9536 AND pbl.start_date >= l_line_start_date_tbl(i)
9537 AND pbl.end_date <= l_line_end_date_tbl(i);
9538 --log1('PBL 16 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9539 END IF; -- there are records in local ra tbl
9540 --END IF; -- mc flag = Y
9541
9542 -- updating change reason code and description if the version is non time phased
9543 ELSIF p_version_info_rec.x_plan_in_multi_curr_flag <> 'Y' AND
9544 p_context = 'WEBADI_NON_PERIODIC' THEN
9545 IF l_ra_id_tbl.COUNT > 0 AND
9546 l_bls_proccessed_flag ='Y' THEN
9547 --log1('----- STAGE CRC2-------');
9548 --log1('PBL 17 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9549 FORALL i IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST
9550 UPDATE pa_fp_rollup_tmp pbl
9551 SET pbl.change_reason_code = l_change_reason_code_tbl(i),
9552 pbl.description = l_description_tbl(i)
9553 WHERE pbl.resource_assignment_id = l_ra_id_tbl(i)
9554 AND pbl.txn_currency_code = l_txn_currency_code_tbl(i);
9555 --log1('PBL 18 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9556 END IF; -- there are records in local ra tbl
9557 --END IF; -- time phase = N
9558 ELSIF p_version_info_rec.x_plan_in_multi_curr_flag = 'Y' AND
9559 p_context = 'WEBADI_NON_PERIODIC' THEN
9560 --log1('----- STAGE PBL18-------');
9561 IF l_ra_id_tbl.COUNT > 0 AND
9562 l_bls_proccessed_flag ='Y' THEN
9563 --log1('PBL 19 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9564 FORALL i IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST
9565 UPDATE pa_fp_rollup_tmp pbl
9566 SET pbl.change_reason_code = l_change_reason_code_tbl(i),
9567 pbl.description = DECODE(l_description_tbl(i), NULL, pbl.description,
9568 DECODE(l_description_tbl(i), l_g_miss_char, NULL, l_description_tbl(i))),
9569 pbl.projfunc_cost_rate_type = DECODE (l_pfunc_cost_rate_type_tbl(i), NULL, pbl.projfunc_cost_rate_type,
9570 DECODE(l_pfunc_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_type_tbl(i))),
9571 pbl.projfunc_cost_rate_date_type = DECODE (l_pfunc_cost_rate_date_typ_tbl(i), NULL, pbl.projfunc_cost_rate_date_type,
9572 DECODE(l_pfunc_cost_rate_date_typ_tbl(i), l_g_miss_char, NULL, l_pfunc_cost_rate_date_typ_tbl(i))),
9573 pbl.projfunc_cost_exchange_rate = DECODE (l_pfunc_cost_rate_tbl(i), NULL, pbl.projfunc_cost_exchange_rate,
9574 DECODE(l_pfunc_cost_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_cost_rate_tbl(i))),
9575 pbl.projfunc_cost_rate_date = DECODE (l_pfunc_cost_rate_date_tbl(i), NULL, pbl.projfunc_cost_rate_date,
9576 DECODE(l_pfunc_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_cost_rate_date_tbl(i))),
9577 pbl.projfunc_rev_rate_type = DECODE (l_pfunc_rev_rate_type_tbl(i), NULL, pbl.projfunc_rev_rate_type,
9578 DECODE(l_pfunc_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_type_tbl(i))),
9579 pbl.projfunc_rev_rate_date_type = DECODE (l_pfunc_rev_rate_date_type_tbl(i), NULL, pbl.projfunc_rev_rate_date_type,
9580 DECODE(l_pfunc_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_pfunc_rev_rate_date_type_tbl(i))),
9581 pbl.projfunc_rev_exchange_rate = DECODE (l_pfunc_rev_rate_tbl(i), NULL, pbl.projfunc_rev_exchange_rate,
9582 DECODE(l_pfunc_rev_rate_tbl(i), l_g_miss_num, NULL, l_pfunc_rev_rate_tbl(i))),
9583 pbl.projfunc_rev_rate_date = DECODE (l_pfunc_rev_rate_date_tbl(i), NULL, pbl.projfunc_rev_rate_date,
9584 DECODE(l_pfunc_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_pfunc_rev_rate_date_tbl(i))),
9585 pbl.project_cost_rate_type = DECODE (l_proj_cost_rate_type_tbl(i), NULL, pbl.project_cost_rate_type,
9586 DECODE(l_proj_cost_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_type_tbl(i))),
9587 pbl.project_cost_rate_date_type = DECODE (l_proj_cost_rate_date_type_tbl(i), NULL, pbl.project_cost_rate_date_type,
9588 DECODE(l_proj_cost_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_cost_rate_date_type_tbl(i))),
9589 pbl.project_cost_exchange_rate = DECODE (l_proj_cost_rate_tbl(i), NULL, pbl.project_cost_exchange_rate,
9590 DECODE(l_proj_cost_rate_tbl(i), l_g_miss_num, NULL, l_proj_cost_rate_tbl(i))),
9591 pbl.project_cost_rate_date = DECODE (l_proj_cost_rate_date_tbl(i), NULL, pbl.project_cost_rate_date,
9592 DECODE(l_proj_cost_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_cost_rate_date_tbl(i))),
9593 pbl.project_rev_rate_type = DECODE (l_proj_rev_rate_type_tbl(i), NULL, pbl.project_rev_rate_type,
9594 DECODE(l_proj_rev_rate_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_type_tbl(i))),
9595 pbl.project_rev_rate_date_type = DECODE (l_proj_rev_rate_date_type_tbl(i), NULL, pbl.project_rev_rate_date_type,
9596 DECODE(l_proj_rev_rate_date_type_tbl(i), l_g_miss_char, NULL, l_proj_rev_rate_date_type_tbl(i))),
9597 pbl.project_rev_exchange_rate = DECODE (l_proj_rev_rate_tbl(i), NULL, pbl.project_rev_exchange_rate,
9598 DECODE(l_proj_rev_rate_tbl(i), l_g_miss_num, NULL, l_proj_rev_rate_tbl(i))),
9599 pbl.project_rev_rate_date = DECODE (l_proj_rev_rate_date_tbl(i), NULL, pbl.project_rev_rate_date,
9600 DECODE(l_proj_rev_rate_date_tbl(i), l_g_miss_date, NULL, l_proj_rev_rate_date_tbl(i)))
9601 WHERE pbl.resource_assignment_id = l_ra_id_tbl(i)
9602 AND pbl.txn_currency_code = l_txn_currency_code_tbl(i);
9603 --log1('PBL 20 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9604 END IF; -- there are records in local ra tbl
9605 END IF; -- end of update
9606
9607 IF l_debug_mode = 'Y' THEN
9608 pa_debug.g_err_stage:='pa_budget_lines updated with change reason code, desc and conv attr';
9609 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
9610 END IF;
9611
9612
9613 --log1('----- STAGE PBL18.3------- ');
9614 IF l_debug_mode = 'Y' THEN
9615 pa_debug.g_err_stage := 'Calling multi currency pkg';
9616 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9617 END IF;
9618 --log1('PBL 26 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9619 -- Bug 4424457. Call MC API only if there are some budget lines that are processed by calculate API
9620 IF l_bls_proccessed_flag ='Y' THEN
9621
9622 PA_FP_MULTI_CURRENCY_PKG.convert_txn_currency
9623 (p_budget_version_id => p_budget_version_id
9624 ,p_entire_version => 'N'
9625 ,x_return_status => x_return_status
9626 ,x_msg_count => l_msg_count
9627 ,x_msg_data => l_msg_data );
9628 --log1('PBL 27 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9629 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9630 IF l_debug_mode = 'Y' THEN
9631 pa_debug.g_err_stage:='convert_txn_currency returned error';
9632 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9633 END IF;
9634 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
9635 END IF;
9636
9637 END IF;
9638
9639 IF l_debug_mode = 'Y' THEN
9640 pa_debug.g_err_stage := 'Preparing data for the call to PJI api';
9641 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9642 END IF;
9643
9644 IF l_debug_mode = 'Y' THEN
9645 pa_debug.g_err_stage := 'About to select data for updating the budget lines '||l_bls_proccessed_flag;
9646 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9647 END IF;
9648
9649 --bug 5962744 moved below bulk select out of if condition
9650 --Bug 4424457. Rollup tmp can contain multiple records for the same budget line id. This will happen when
9651 --for a budget line passed as input, the txn currency code is converted to some other currency which
9652 --already exiss for the same RA. This might get resolved with the MRC API changes. Till then this should
9653 --be taken care
9654 --Previously PJI plan_update was called and hence the required input was collected in _pji_ tbls. Now
9655 --plan_delete and plan_create are called. But the _pji_ tbls are still retained for update on
9656 --pa_budget_lines
9657
9658 SELECT rlp.resource_assignment_id,
9659 max(rlp.period_name),
9660 rlp.start_date,
9661 max(rlp.end_date),
9662 rlp.txn_currency_code,
9663 max(rlp.budget_line_id),
9664 sum(rlp.txn_raw_cost),
9665 sum(rlp.txn_burdened_cost),
9666 sum(rlp.txn_revenue),
9667 sum(rlp.project_raw_cost),
9668 sum(rlp.project_burdened_cost),
9669 sum(rlp.project_revenue),
9670 sum(rlp.projfunc_raw_cost),
9671 sum(rlp.projfunc_burdened_cost),
9672 sum(rlp.projfunc_revenue),
9673 sum(rlp.init_quantity),
9674 sum(rlp.init_raw_cost),
9675 sum(rlp.init_burdened_cost),
9676 sum(rlp.init_revenue),
9677 sum(rlp.project_init_raw_cost),
9678 sum(rlp.project_init_burdened_cost),
9679 sum(rlp.project_init_revenue),
9680 sum(rlp.txn_init_raw_cost),
9681 sum(rlp.txn_init_burdened_cost),
9682 sum(rlp.txn_init_revenue),
9683 max(rlp.cost_rejection_code),
9684 max(rlp.revenue_rejection_code),
9685 max(rlp.burden_rejection_code),
9686 max(rlp.system_reference4), -- for other_rejection_code
9687 max(rlp.pc_cur_conv_rejection_code),
9688 max(rlp.pfc_cur_conv_rejection_code),
9689 max(rlp.delete_flag),
9690 sum(rlp.quantity),
9691 max(rlp.project_cost_rate_type),
9692 avg(rlp.project_cost_exchange_rate),
9693 max(rlp.project_cost_rate_date_type),
9694 max(rlp.project_cost_rate_date),
9695 max(rlp.project_rev_rate_type),
9696 avg(rlp.project_rev_exchange_rate),
9697 max(rlp.project_rev_rate_date_type),
9698 max(rlp.project_rev_rate_date),
9699 max(rlp.projfunc_cost_rate_type),
9700 avg(rlp.projfunc_cost_exchange_rate),
9701 max(rlp.projfunc_cost_rate_date_type),
9702 max(rlp.projfunc_cost_rate_date),
9703 max(rlp.projfunc_rev_rate_type),
9704 avg(rlp.projfunc_rev_exchange_rate),
9705 max(rlp.projfunc_rev_rate_date_type),
9706 max(rlp.projfunc_rev_rate_date),
9707 count(*),
9708 max(change_reason_code),
9709 max(description)
9710 BULK COLLECT INTO
9711 l_pji_res_ass_id_tbl,
9712 l_pji_period_name_tbl,
9713 l_pji_start_date_tbl,
9714 l_pji_end_date_tbl,
9715 l_pji_txn_curr_code_tbl,
9716 l_upd_budget_line_id_tbl,
9717 l_pji_txn_raw_cost_tbl,
9718 l_pji_txn_burd_cost_tbl,
9719 l_pji_txn_revenue_tbl,
9720 l_pji_project_raw_cost_tbl,
9721 l_pji_project_burd_cost_tbl,
9722 l_pji_project_revenue_tbl,
9723 l_pji_raw_cost_tbl,
9724 l_pji_burd_cost_tbl,
9725 l_pji_revenue_tbl,
9726 l_upd_init_quantity_tbl,
9727 l_upd_init_raw_cost_tbl,
9728 l_upd_init_burdened_cost_tbl,
9729 l_upd_init_revenue_tbl,
9730 l_upd_proj_init_raw_cost_tbl,
9731 l_upd_proj_init_burd_cost_tbl,
9732 l_upd_proj_init_revenue_tbl,
9733 l_upd_txn_init_raw_cost_tbl,
9734 l_upd_txn_init_burd_cost_tbl,
9735 l_upd_txn_init_revenue_tbl,
9736 l_pji_cost_rej_code_tbl,
9737 l_pji_revenue_rej_code_tbl,
9738 l_pji_burden_rej_code_tbl,
9739 l_pji_other_rej_code,
9740 l_pji_pc_cur_conv_rej_code_tbl,
9741 l_pji_pf_cur_conv_rej_code_tbl,
9742 l_upd_delete_flag_tbl,
9743 l_pji_quantity_tbl,
9744 l_upd_pj_cost_rate_typ_tbl,
9745 l_upd_pj_cost_exc_rate_tbl,
9746 l_upd_pj_cost_rate_dt_typ_tbl,
9747 l_upd_pj_cost_rate_date_tbl,
9748 l_upd_pj_rev_rate_typ_tbl,
9749 l_upd_pj_rev_exc_rate_tbl,
9750 l_upd_pj_rev_rate_dt_typ_tbl,
9751 l_upd_pj_rev_rate_date_tbl,
9752 l_upd_pf_cost_rate_typ_tbl,
9753 l_upd_pf_cost_exc_rate_tbl,
9754 l_upd_pf_cost_rate_dt_typ_tbl,
9755 l_upd_pf_cost_rate_date_tbl,
9756 l_upd_pf_rev_rate_typ_tbl,
9757 l_upd_pf_rev_exc_rate_tbl,
9758 l_upd_pf_rev_rate_dt_typ_tbl,
9759 l_upd_pf_rev_rate_date_tbl,
9760 l_bl_count_tbl,
9761 l_chg_reason_code_tbl,
9762 l_desc_tbl
9763 FROM pa_fp_rollup_tmp rlp
9764 WHERE delete_flag IS NULL OR delete_flag <> 'Y'
9765 GROUP BY rlp.resource_assignment_id,rlp.txn_currency_code,rlp.start_date;
9766
9767 --log1('PBL 28 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
9768 --bug 5962744
9769 -- Bug 7184576 The below code should be run for non time phased budget/forecast. It is
9770 -- possible to process time phased budget/forecast using non time phased period layout.
9771 -- So if condition should be based on time phase code rathen than p_context it wont be
9772 -- updating the correclty.
9773 --IF p_context = 'WEBADI_NON_PERIODIC' THEN
9774 IF p_version_info_rec.x_time_phased_code = 'N' THEN
9775 l_extra_bl_flag_tbl.extend(l_upd_budget_line_id_tbl.COUNT);
9776 l_ex_chg_rsn_code_tbl.extend(l_upd_budget_line_id_tbl.COUNT);
9777 l_ex_desc_tbl.extend(l_upd_budget_line_id_tbl.COUNT);
9778
9779 if l_upd_budget_line_id_tbl.count > 0 then
9780 for i in l_upd_budget_line_id_tbl.first .. l_upd_budget_line_id_tbl.last loop
9781
9782 l_extra_bl_flag_tbl(i):='N';
9783 l_ex_chg_rsn_code_tbl(i):=null;
9784 l_ex_desc_tbl(i):=null;
9785 end loop;
9786 end if;
9787
9788 if l_ra_id_tbl.count > 0 then
9789 for i in l_ra_id_tbl.first .. l_ra_id_tbl.last loop
9790
9791 l_ra_exists:='N';
9792 if l_pji_res_ass_id_tbl.count > 0 then
9793 for j in l_pji_res_ass_id_tbl.first .. l_pji_res_ass_id_tbl.last loop
9794 if (l_pji_res_ass_id_tbl(j) = l_ra_id_tbl(i) and
9795 l_pji_txn_curr_code_tbl(j) = l_txn_currency_code_tbl(i)) then
9796 l_ra_exists:='Y';
9797 end if;
9798 end loop;
9799 end if;
9800
9801 if l_ra_exists ='N' then
9802 l_extra_bl_flag_tbl.extend(1);
9803 l_extra_bl_flag_tbl(l_extra_bl_flag_tbl.count):='Y';
9804 l_pji_res_ass_id_tbl.extend(1);
9805 l_pji_res_ass_id_tbl(l_pji_res_ass_id_tbl.count):=l_ra_id_tbl(i);
9806 l_pji_txn_curr_code_tbl.extend(1);
9807 l_pji_txn_curr_code_tbl(l_pji_txn_curr_code_tbl.count):=l_txn_currency_code_tbl(i);
9808 l_ex_chg_rsn_code_tbl.extend(1);
9809 l_ex_chg_rsn_code_tbl(l_ex_chg_rsn_code_tbl.count):=l_change_reason_code_tbl(i);
9810 l_ex_desc_tbl.extend(1);
9811 l_ex_desc_tbl(l_ex_desc_tbl.count):=l_description_tbl(i);
9812
9813
9814 l_pji_project_raw_cost_tbl.extend(1);
9815 l_pji_project_burd_cost_tbl.extend(1);
9816 l_pji_project_revenue_tbl.extend(1);
9817 l_pji_raw_cost_tbl.extend(1);
9818 l_pji_burd_cost_tbl.extend(1);
9819 l_pji_revenue_tbl.extend(1);
9820 l_pji_quantity_tbl.extend(1);
9821 l_pji_pc_cur_conv_rej_code_tbl.extend(1);
9822 l_pji_pf_cur_conv_rej_code_tbl.extend(1);
9823 l_upd_init_quantity_tbl.extend(1);
9824 l_upd_init_raw_cost_tbl.extend(1);
9825 l_upd_init_burdened_cost_tbl.extend(1);
9826 l_upd_init_revenue_tbl.extend(1);
9827 l_upd_proj_init_raw_cost_tbl.extend(1);
9828 l_upd_proj_init_burd_cost_tbl.extend(1);
9829 l_upd_proj_init_revenue_tbl.extend(1);
9830 l_upd_txn_init_raw_cost_tbl.extend(1);
9831 l_upd_txn_init_burd_cost_tbl.extend(1);
9832 l_upd_txn_init_revenue_tbl.extend(1);
9833 l_upd_pj_cost_rate_typ_tbl.extend(1);
9834 l_upd_pj_cost_exc_rate_tbl.extend(1);
9835 l_upd_pj_cost_rate_dt_typ_tbl.extend(1);
9836 l_upd_pj_cost_rate_date_tbl.extend(1);
9837 l_upd_pj_rev_rate_typ_tbl.extend(1);
9838 l_upd_pj_rev_exc_rate_tbl.extend(1);
9839 l_upd_pj_rev_rate_dt_typ_tbl.extend(1);
9840 l_upd_pj_rev_rate_date_tbl.extend(1);
9841 l_upd_pf_cost_rate_typ_tbl.extend(1);
9842 l_upd_pf_cost_exc_rate_tbl.extend(1);
9843 l_upd_pf_cost_rate_dt_typ_tbl.extend(1);
9844 l_upd_pf_cost_rate_date_tbl.extend(1);
9845 l_upd_pf_rev_rate_typ_tbl.extend(1);
9846 l_upd_pf_rev_exc_rate_tbl.extend(1);
9847 l_upd_pf_rev_rate_dt_typ_tbl.extend(1);
9848 l_upd_pf_rev_rate_date_tbl.extend(1);
9849 l_chg_reason_code_tbl.extend(1);
9850 l_desc_tbl.extend(1);
9851 l_upd_delete_flag_tbl.extend(1);
9852 l_upd_delete_flag_tbl(l_upd_delete_flag_tbl.count) := null;
9853 l_bl_count_tbl.extend(1);
9854 l_bl_count_tbl(l_bl_count_tbl.count) := 1;
9855 end if;
9856 end loop;
9857 end if;
9858
9859
9860
9861
9862 FORALL i IN l_pji_res_ass_id_tbl.FIRST .. l_pji_res_ass_id_tbl.LAST
9863 UPDATE pa_budget_lines pbl
9864 SET pbl.project_raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_raw_cost,'N',l_pji_project_raw_cost_tbl(i)),
9865 pbl.project_burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_burdened_cost,'N',l_pji_project_burd_cost_tbl(i)),
9866 pbl.project_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_revenue,'N',l_pji_project_revenue_tbl(i)),
9867 pbl.raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.raw_cost,'N',l_pji_raw_cost_tbl(i)),
9868 pbl.burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.burdened_cost,'N',l_pji_burd_cost_tbl(i)),
9869 pbl.revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.revenue,'N',l_pji_revenue_tbl(i)),
9870 pbl.quantity = decode(l_extra_bl_flag_tbl(i),'Y',pbl.quantity,'N',l_pji_quantity_tbl(i)),
9871 pbl.pc_cur_conv_rejection_code = decode(l_extra_bl_flag_tbl(i),'Y',pbl.pc_cur_conv_rejection_code,'N',l_pji_pc_cur_conv_rej_code_tbl(i)),
9872 pbl.pfc_cur_conv_rejection_code = decode(l_extra_bl_flag_tbl(i),'Y',pbl.pfc_cur_conv_rejection_code,'N',l_pji_pf_cur_conv_rej_code_tbl(i)),
9873 pbl.init_quantity = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_quantity,'N',l_upd_init_quantity_tbl(i)),
9874 pbl.init_raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_raw_cost,'N',l_upd_init_raw_cost_tbl(i)),
9875 pbl.init_burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_burdened_cost,'N',l_upd_init_burdened_cost_tbl(i)),
9876 pbl.init_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.init_revenue,'N',l_upd_init_revenue_tbl(i)),
9877 pbl.project_init_raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_init_raw_cost,'N',l_upd_proj_init_raw_cost_tbl(i)),
9878 pbl.project_init_burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_init_burdened_cost,'N',l_upd_proj_init_burd_cost_tbl(i)),
9879 pbl.project_init_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_init_revenue,'N',l_upd_proj_init_revenue_tbl(i)),
9880 pbl.txn_init_raw_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.txn_init_raw_cost,'N',l_upd_txn_init_raw_cost_tbl(i)),
9881 pbl.txn_init_burdened_cost = decode(l_extra_bl_flag_tbl(i),'Y',pbl.txn_init_burdened_cost,'N',l_upd_txn_init_burd_cost_tbl(i)),
9882 pbl.txn_init_revenue = decode(l_extra_bl_flag_tbl(i),'Y',pbl.txn_init_revenue,'N',l_upd_txn_init_revenue_tbl(i)),
9883 pbl.project_cost_rate_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_cost_rate_type,'N',l_upd_pj_cost_rate_typ_tbl(i)),
9884 pbl.project_cost_exchange_rate = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_cost_exchange_rate,'N',l_upd_pj_cost_exc_rate_tbl(i)),
9885 pbl.project_cost_rate_date_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_cost_rate_date_type,'N',l_upd_pj_cost_rate_dt_typ_tbl(i)),
9886 pbl.project_cost_rate_date = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_cost_rate_date,'N',l_upd_pj_cost_rate_date_tbl(i)),
9887 pbl.project_rev_rate_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_rev_rate_type,'N',l_upd_pj_rev_rate_typ_tbl(i)),
9888 pbl.project_rev_exchange_rate = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_rev_exchange_rate,'N',l_upd_pj_rev_exc_rate_tbl(i)),
9889 pbl.project_rev_rate_date_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_rev_rate_date_type,'N',l_upd_pj_rev_rate_dt_typ_tbl(i)),
9890 pbl.project_rev_rate_date = decode(l_extra_bl_flag_tbl(i),'Y',pbl.project_rev_rate_date,'N',l_upd_pj_rev_rate_date_tbl(i)),
9891 pbl.projfunc_cost_rate_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_cost_rate_type,'N',l_upd_pf_cost_rate_typ_tbl(i)),
9892 pbl.projfunc_cost_exchange_rate = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_cost_exchange_rate,'N',l_upd_pf_cost_exc_rate_tbl(i)),
9893 pbl.projfunc_cost_rate_date_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_cost_rate_date_type,'N',l_upd_pf_cost_rate_dt_typ_tbl(i)),
9894 pbl.projfunc_cost_rate_date = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_cost_rate_date,'N',l_upd_pf_cost_rate_date_tbl(i)),
9895 pbl.projfunc_rev_rate_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_rev_rate_type,'N',l_upd_pf_rev_rate_typ_tbl(i)),
9896 pbl.projfunc_rev_exchange_rate = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_rev_exchange_rate,'N',l_upd_pf_rev_exc_rate_tbl(i)),
9897 pbl.projfunc_rev_rate_date_type = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_rev_rate_date_type,'N',l_upd_pf_rev_rate_dt_typ_tbl(i)),
9898 pbl.projfunc_rev_rate_date = decode(l_extra_bl_flag_tbl(i),'Y',pbl.projfunc_rev_rate_date,'N',l_upd_pf_rev_rate_date_tbl(i)),
9899 pbl.change_reason_code = decode(l_extra_bl_flag_tbl(i),'Y',l_ex_chg_rsn_code_tbl(i),'N',DECODE(l_chg_reason_code_tbl(i), NULL, pbl.change_reason_code,
9900 l_fnd_miss_char, NULL,
9901 l_chg_reason_code_tbl(i))), -- Bug 5014538.
9902 pbl.description=decode(l_extra_bl_flag_tbl(i),'Y',l_ex_desc_tbl(i),'N',l_desc_tbl(i)),
9903 pbl.last_updated_by = fnd_global.user_id,
9904 pbl.last_update_date = SYSDATE,
9905 pbl.last_update_login = fnd_global.login_id
9906 WHERE pbl.budget_version_id = p_budget_version_id
9907 AND pbl.resource_assignment_id = l_pji_res_ass_id_tbl(i)
9908 AND pbl.txn_currency_code = l_pji_txn_curr_code_tbl(i)
9909 AND l_bl_count_tbl(i)=1
9910 AND (l_upd_delete_flag_tbl(i) IS NULL OR
9911 l_upd_delete_flag_tbl(i) <> 'Y');
9912 END IF; --if p_version_info_rec.x_time_phased_code = 'N'
9913 --bug 5962744
9914 IF l_debug_mode = 'Y' THEN
9915 pa_debug.g_err_stage := 'Stampping Amounts and rejection codes in budget lines';
9916 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9917 END IF;
9918
9919 -- Bug 4424457. If there are budget lines that either got deleted or updated/created then
9920 -- stamp the derived pc/pfc amounts back on budget lines and call PJI API
9921 IF l_bls_proccessed_flag ='Y' OR
9922 l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
9923 --Bug 4424457. Update only those budget lines for which duplicates do not exist in rollup tmp. Budget lines
9924 --with duplicates are already taken care of in calculate API
9925 -- IF l_pji_res_ass_id_tbl.COUNT > 0 THEN
9926 -- Changes done for bug 7184576
9927 -- IF p_context <> 'WEBADI_NON_PERIODIC' THEN
9928 IF p_version_info_rec.x_time_phased_code <> 'N' THEN
9929 FORALL i IN l_upd_budget_line_id_tbl.FIRST .. l_upd_budget_line_id_tbl.LAST
9930 UPDATE pa_budget_lines pbl
9931 SET pbl.project_raw_cost = l_pji_project_raw_cost_tbl(i),
9932 pbl.project_burdened_cost = l_pji_project_burd_cost_tbl(i),
9933 pbl.project_revenue = l_pji_project_revenue_tbl(i),
9934 pbl.raw_cost = l_pji_raw_cost_tbl(i),
9935 pbl.burdened_cost = l_pji_burd_cost_tbl(i),
9936 pbl.revenue = l_pji_revenue_tbl(i),
9937 pbl.quantity = l_pji_quantity_tbl(i),
9938 pbl.pc_cur_conv_rejection_code = l_pji_pc_cur_conv_rej_code_tbl(i),
9939 pbl.pfc_cur_conv_rejection_code = l_pji_pf_cur_conv_rej_code_tbl(i),
9940 pbl.init_quantity = l_upd_init_quantity_tbl(i),
9941 pbl.init_raw_cost = l_upd_init_raw_cost_tbl(i),
9942 pbl.init_burdened_cost = l_upd_init_burdened_cost_tbl(i),
9943 pbl.init_revenue = l_upd_init_revenue_tbl(i),
9944 pbl.project_init_raw_cost = l_upd_proj_init_raw_cost_tbl(i),
9945 pbl.project_init_burdened_cost = l_upd_proj_init_burd_cost_tbl(i),
9946 pbl.project_init_revenue = l_upd_proj_init_revenue_tbl(i),
9947 pbl.txn_init_raw_cost = l_upd_txn_init_raw_cost_tbl(i),
9948 pbl.txn_init_burdened_cost = l_upd_txn_init_burd_cost_tbl(i),
9949 pbl.txn_init_revenue = l_upd_txn_init_revenue_tbl(i),
9950 pbl.project_cost_rate_type = l_upd_pj_cost_rate_typ_tbl(i),
9951 pbl.project_cost_exchange_rate = l_upd_pj_cost_exc_rate_tbl(i),
9952 pbl.project_cost_rate_date_type = l_upd_pj_cost_rate_dt_typ_tbl(i),
9953 pbl.project_cost_rate_date = l_upd_pj_cost_rate_date_tbl(i),
9954 pbl.project_rev_rate_type = l_upd_pj_rev_rate_typ_tbl(i),
9955 pbl.project_rev_exchange_rate = l_upd_pj_rev_exc_rate_tbl(i),
9956 pbl.project_rev_rate_date_type = l_upd_pj_rev_rate_dt_typ_tbl(i),
9957 pbl.project_rev_rate_date = l_upd_pj_rev_rate_date_tbl(i),
9958 pbl.projfunc_cost_rate_type = l_upd_pf_cost_rate_typ_tbl(i),
9959 pbl.projfunc_cost_exchange_rate = l_upd_pf_cost_exc_rate_tbl(i),
9960 pbl.projfunc_cost_rate_date_type = l_upd_pf_cost_rate_dt_typ_tbl(i),
9961 pbl.projfunc_cost_rate_date = l_upd_pf_cost_rate_date_tbl(i),
9962 pbl.projfunc_rev_rate_type = l_upd_pf_rev_rate_typ_tbl(i),
9963 pbl.projfunc_rev_exchange_rate = l_upd_pf_rev_exc_rate_tbl(i),
9964 pbl.projfunc_rev_rate_date_type = l_upd_pf_rev_rate_dt_typ_tbl(i),
9965 pbl.projfunc_rev_rate_date = l_upd_pf_rev_rate_date_tbl(i),
9966 pbl.change_reason_code = DECODE(l_chg_reason_code_tbl(i), NULL, pbl.change_reason_code,
9967 l_fnd_miss_char, NULL,
9968 l_chg_reason_code_tbl(i)), --Bug 5144013.
9969 pbl.description=l_desc_tbl(i),
9970 pbl.last_updated_by = fnd_global.user_id,
9971 pbl.last_update_date = SYSDATE,
9972 pbl.last_update_login = fnd_global.login_id
9973 WHERE pbl.budget_version_id = p_budget_version_id
9974 AND pbl.resource_assignment_id = l_pji_res_ass_id_tbl(i)
9975 AND pbl.txn_currency_code = l_pji_txn_curr_code_tbl(i)
9976 AND pbl.start_date =l_pji_start_date_tbl(i)
9977 AND l_bl_count_tbl(i)=1
9978 AND (l_upd_delete_flag_tbl(i) IS NULL OR
9979 l_upd_delete_flag_tbl(i) <> 'Y');
9980 END IF;
9981
9982 /* Start of fix for Bug : 5144013.Call is made to the api PA_BUDGET_LINES_UTILS.populate_display_qty
9983 to populate the display_quantity in pa_budget_lines. This is done as part of merging the MRUP3
9984 changes done in 11i into R12.
9985 */
9986 IF l_debug_mode = 'Y' THEN
9987 pa_debug.g_err_stage := 'Before calling Populate Display Qty api';
9988 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9989 END IF;
9990 PA_BUDGET_LINES_UTILS.populate_display_qty
9991 ( p_budget_version_id => p_budget_version_id
9992 ,p_context => 'FINANCIAL'
9993 ,x_return_status => x_return_status);
9994 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9995 IF l_debug_mode = 'Y' THEN
9996 pa_debug.g_err_stage := 'The API PA_BUDGET_LINES_UTILS.populate_display_qty returned error';
9997 pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
9998 END IF;
9999 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10000 END IF;
10001 IF l_debug_mode = 'Y' THEN
10002 pa_debug.g_err_stage := 'After calling Populate Display Qty api';
10003 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10004 END IF;
10005 -- Call is made to maintain_data api to rollup the data in new entity.
10006 IF l_debug_mode = 'Y' THEN
10007 pa_debug.g_err_stage := 'Before calling maintanance api maintain_data';
10008 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10009 END IF;
10010 PA_RES_ASG_CURRENCY_PUB.maintain_data(
10011 p_fp_cols_rec => p_version_info_rec
10012 ,p_calling_module => 'WEBADI'
10013 ,p_rollup_flag => 'Y'
10014 ,p_version_level_flag => 'Y'
10015 ,x_return_status => x_return_status
10016 ,x_msg_count => l_msg_count
10017 ,x_msg_data => l_msg_data);
10018 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10019 IF l_debug_mode = 'Y' THEN
10020 pa_debug.g_err_stage := 'The API PA_RES_ASG_CURRENCY_PUB.maintain_data returned error';
10021 pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
10022 END IF;
10023 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10024 END IF;
10025 IF l_debug_mode = 'Y' THEN
10026 pa_debug.g_err_stage := 'After calling maintanance api maintain_data';
10027 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10028 END IF;
10029 /* End of fix for Bug : 5144013*/
10030
10031 --log1('PBL 29 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10032 IF l_debug_mode = 'Y' THEN
10033 pa_debug.g_err_stage := 'Calling rollup budget version api';
10034 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10035 END IF;
10036 --log1('----- STAGE PBL18.3------- ');
10037 --log1('PBL 30 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10038 PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION
10039 ( p_budget_version_id => p_budget_version_id
10040 ,p_entire_version => 'Y'
10041 ,x_return_status => x_return_status
10042 ,x_msg_count => l_msg_count
10043 ,x_msg_data => l_msg_data);
10044
10045 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10046 IF l_debug_mode = 'Y' THEN
10047 pa_debug.g_err_stage:='The API PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION returned error';
10048 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
10049 END IF;
10050 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10051 END IF;
10052 --log1('PBL 31 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10053 IF l_debug_mode = 'Y' THEN
10054 pa_debug.g_err_stage := 'Checking whether MRC api needs to be called';
10055 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10056 END IF;
10057 --log1('----- STAGE PBL18.4------- ');
10058
10059 /**************MRC ELIMINATION CHANGES: ********************************
10060 ** The following api calls are used for populating the mrc data which is not required
10061 ** as the mrc schema and entity are scrapped from R12
10062 PA_MRC_FINPLAN.check_mrc_install
10063 (x_return_status => x_return_status,
10064 x_msg_count => l_msg_count,
10065 x_msg_data => l_msg_data);
10066
10067 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10068 IF l_debug_mode = 'Y' THEN
10069 pa_debug.g_err_stage:='The API PA_MRC_FINPLAN.check_mrc_installed returned error';
10070 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
10071 END IF;
10072 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10073 END IF;
10074
10075 --log1('PBL 32 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10076 -- checking for valid requiered parameter values to call the MRC api
10077 IF PA_MRC_FINPLAN.G_MRC_ENABLED_FOR_BUDGETS AND
10078 PA_MRC_FINPLAN.G_FINPLAN_MRC_OPTION_CODE = 'A' THEN
10079 IF l_debug_mode = 'Y' THEN
10080 pa_debug.g_err_stage := 'Calling MRC api ';
10081 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10082 END IF;
10083 --log1('PBL 33 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10084 PA_MRC_FINPLAN.maintain_all_mc_budget_lines
10085 (p_fin_plan_version_id => p_budget_version_id,
10086 p_entire_version => 'N',
10087 x_return_status => x_return_status,
10088 x_msg_count => l_msg_count,
10089 x_msg_data => l_msg_data);
10090 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10091 IF l_debug_mode = 'Y' THEN
10092 pa_debug.g_err_stage:='The API PA_MRC_FINPLAN.maintain_all_mc_budget_lines returned error';
10093 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
10094 END IF;
10095 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10096 END IF;
10097 --log1('PBL 34 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10098 ELSE
10099 IF l_debug_mode = 'Y' THEN
10100 pa_debug.g_err_stage := 'MRC api need not be called';
10101 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10102 END IF;
10103 END IF;
10104 ***************End of MRC ELIMINATION CHANGES: ***********************/
10105
10106 --log1('----- STAGE PBL18.5------- ');
10107 IF l_debug_mode = 'Y' THEN
10108 pa_debug.g_err_stage := 'Data prepared for the call to PJI api';
10109 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10110 pa_debug.Reset_Curr_Function;
10111 END IF;
10112 --log1('----- STAGE PBL18.6------- ');
10113 --log1('PBL 37'||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10114 --Bug 4424457. Replaced the call to plan_update with plan_delete and plan_create
10115 l_dest_ver_id_tbl.EXTEND;
10116 l_dest_ver_id_tbl(1):=p_budget_version_id;
10117 PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
10118 p_fp_version_ids => l_dest_ver_id_tbl,
10119 x_return_status => x_return_status,
10120 x_msg_code => l_error_msg_code);
10121
10122 IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
10123 IF l_debug_mode = 'Y' THEN
10124 pa_debug.g_err_stage := 'API PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE returned ERROR 1 '|| l_error_msg_code;
10125 pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
10126 END IF;
10127
10128 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10129
10130 END IF;
10131
10132
10133 PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE(p_fp_version_ids => l_dest_ver_id_tbl
10134 ,x_return_status => l_return_status
10135 ,x_msg_code => l_error_msg_code);
10136
10137 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10138 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10139 END IF;
10140
10141 --log1('PBL 38 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10142 -- deleting contents from pl/sql tables to be used to call pji api
10143 l_pji_res_ass_id_tbl.DELETE;
10144 l_pji_period_name_tbl.DELETE;
10145 l_pji_start_date_tbl.DELETE;
10146 l_pji_end_date_tbl.DELETE;
10147 l_pji_txn_curr_code_tbl.DELETE;
10148 l_pji_txn_raw_cost_tbl.DELETE;
10149 l_pji_txn_burd_cost_tbl.DELETE;
10150 l_pji_txn_revenue_tbl.DELETE;
10151 l_pji_project_raw_cost_tbl.DELETE;
10152 l_pji_project_burd_cost_tbl.DELETE;
10153 l_pji_project_revenue_tbl.DELETE;
10154 l_pji_raw_cost_tbl.DELETE;
10155 l_pji_burd_cost_tbl.DELETE;
10156 l_pji_revenue_tbl.DELETE;
10157 l_pji_cost_rej_code_tbl.DELETE;
10158 l_pji_revenue_rej_code_tbl.DELETE;
10159 l_pji_burden_rej_code_tbl.DELETE;
10160 l_pji_other_rej_code.DELETE;
10161 l_pji_pc_cur_conv_rej_code_tbl.DELETE;
10162 l_pji_pf_cur_conv_rej_code_tbl.DELETE;
10163 l_pji_quantity_tbl.DELETE;
10164 l_upd_pj_cost_rate_typ_tbl.DELETE;
10165 l_upd_pj_cost_exc_rate_tbl.DELETE;
10166 l_upd_pj_cost_rate_dt_typ_tbl.DELETE;
10167 l_upd_pj_cost_rate_date_tbl.DELETE;
10168 l_upd_pj_rev_rate_typ_tbl.DELETE;
10169 l_upd_pj_rev_exc_rate_tbl.DELETE;
10170 l_upd_pj_rev_rate_dt_typ_tbl.DELETE;
10171 l_upd_pj_rev_rate_date_tbl.DELETE;
10172 l_upd_pf_cost_rate_typ_tbl.DELETE;
10173 l_upd_pf_cost_exc_rate_tbl.DELETE;
10174 l_upd_pf_cost_rate_dt_typ_tbl.DELETE;
10175 l_upd_pf_cost_rate_date_tbl.DELETE;
10176 l_upd_pf_rev_rate_typ_tbl.DELETE;
10177 l_upd_pf_rev_exc_rate_tbl.DELETE;
10178 l_upd_pf_rev_rate_dt_typ_tbl.DELETE;
10179 l_upd_pf_rev_rate_date_tbl.DELETE;
10180 l_upd_budget_line_id_tbl.DELETE;
10181 l_upd_init_quantity_tbl.DELETE;
10182 l_upd_init_raw_cost_tbl.DELETE;
10183 l_upd_init_burdened_cost_tbl.DELETE;
10184 l_upd_init_revenue_tbl.DELETE;
10185 l_upd_proj_init_raw_cost_tbl.DELETE;
10186 l_upd_proj_init_burd_cost_tbl.DELETE;
10187 l_upd_proj_init_revenue_tbl.DELETE;
10188 l_upd_txn_init_raw_cost_tbl.DELETE;
10189 l_upd_txn_init_burd_cost_tbl.DELETE;
10190 l_upd_txn_init_revenue_tbl.DELETE;
10191 l_upd_delete_flag_tbl.DELETE;
10192
10193 END IF;-- IF l_bls_proccessed_flag ='Y' OR
10194 -- l_bl_del_flag_ra_id_tbl.COUNT > 0 THEN
10195
10196 --log1('PBL 39 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10197 IF l_debug_mode = 'Y' THEN
10198 pa_debug.g_err_stage := 'Leaving process_budget_lines';
10199 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10200 pa_debug.Reset_Curr_Function;
10201 END IF;
10202 EXCEPTION
10203 WHEN PA_FP_CONSTANTS_PKG.Just_Ret_Exc THEN
10204 IF l_debug_mode = 'Y' THEN
10205 pa_debug.reset_curr_function;
10206 END IF;
10207 RETURN;
10208 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
10209 l_msg_count := FND_MSG_PUB.count_msg;
10210
10211 IF l_msg_count = 1 and x_msg_data IS NULL THEN
10212 PA_INTERFACE_UTILS_PUB.get_messages
10213 (p_encoded => FND_API.G_TRUE
10214 ,p_msg_index => 1
10215 ,p_msg_count => l_msg_count
10216 ,p_msg_data => l_msg_data
10217 ,p_data => l_data
10218 ,p_msg_index_out => l_msg_index_out);
10219 x_msg_data := l_data;
10220 x_msg_count := l_msg_count;
10221 ELSE
10222 x_msg_count := l_msg_count;
10223 END IF;
10224 x_return_status := FND_API.G_RET_STS_ERROR;
10225 IF l_debug_mode = 'Y' THEN
10226 pa_debug.reset_curr_function;
10227 END IF;
10228 RETURN;
10229
10230 WHEN OTHERS THEN
10231 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10232 x_msg_count := 1;
10233 x_msg_data := SQLERRM;
10234
10235 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
10236 ,p_procedure_name => 'process_budget_lines');
10237 IF l_debug_mode = 'Y' THEN
10238 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
10239 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
10240 END IF;
10241
10242 IF l_debug_mode = 'Y' THEN
10243 pa_debug.reset_curr_function;
10244 END IF;
10245 RAISE;
10246
10247 END process_budget_lines;
10248
10249 --This procedure will update the budget version and its corresponding data in the interface table with
10250 --the latest request id and plan processing code(XLUP/XLUE).
10251 PROCEDURE update_xl_data_for_new_req
10252 (p_request_id IN pa_budget_versions.request_id%TYPE,
10253 p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE,
10254 p_plan_processing_code IN pa_budget_versions.plan_processing_code%TYPE,
10255 p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE,
10256 p_null_out_cols IN VARCHAR2)
10257 IS
10258 BEGIN
10259
10260 --Record Version Number is not updated since the web ADI code checks the record Version Number at downloand
10261 --with the record version number at upload and throws an error if they dont match.
10262 UPDATE pa_budget_versions
10263 SET request_id = p_request_id,
10264 plan_processing_code=p_plan_processing_code
10265 WHERE budget_version_id = p_budget_version_id;
10266
10267 --NULL out the IDS and values derived in the previous call to Switcher API do that all the validations
10268 --are done again
10269 UPDATE pa_fp_webadi_upload_inf
10270 SET task_id =DECODE(p_null_out_cols,'Y',NULL,task_id),
10271 resource_list_member_id=DECODE(p_null_out_cols,'Y',NULL,resource_list_member_id),
10272 val_error_flag =DECODE(p_null_out_cols,'Y',NULL,val_error_flag),
10273 val_error_code =DECODE(p_null_out_cols,'Y',NULL,val_error_code),
10274 err_task_name =DECODE(p_null_out_cols,'Y',NULL,err_task_name),
10275 err_task_number =DECODE(p_null_out_cols,'Y',NULL,err_task_number),
10276 err_alias =DECODE(p_null_out_cols,'Y',NULL,err_alias),
10277 err_amount_type_code =DECODE(p_null_out_cols,'Y',NULL,err_amount_type_code),
10278 request_id=p_request_id
10279 WHERE run_id=p_run_id
10280 AND request_id IS NULL;
10281
10282 END;
10283
10284 PROCEDURE switcher
10285 (x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10286 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
10287 x_msg_data OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10288 p_submit_budget_flag IN VARCHAR2,
10289 p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE,
10290 x_success_msg OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10291 p_submit_forecast_flag IN VARCHAR2,
10292 p_request_id IN pa_budget_versions.request_id%TYPE,
10293 p_calling_mode IN VARCHAR2)
10294
10295 IS
10296 -- variables used for debugging
10297 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.switcher';
10298 l_debug_mode VARCHAR2(1) := 'N';
10299 l_debug_level3 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3;
10300 l_debug_level5 CONSTANT NUMBER := PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL5;
10301
10302 l_msg_count NUMBER;
10303 l_msg_data VARCHAR2(2000);
10304 l_data VARCHAR2(2000);
10305 l_msg_index_out NUMBER;
10306
10307 l_budget_version_id pa_budget_versions.budget_version_id%TYPE;
10308 l_rec_version_number pa_budget_versions.record_version_number%TYPE;
10309 l_pm_rec_version_number pa_period_masks_b.record_version_number%TYPE;
10310 l_project_id pa_projects_all.project_id%TYPE;
10311 l_org_id pa_projects_all.org_id%TYPE;
10312 l_version_info_rec pa_fp_gen_amount_utils.fp_cols;
10313
10314 -- variable to held the start_date and end_date of individual periods
10315 l_prd_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
10316 l_prd_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
10317
10318 l_budget_line_in_tbl PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE;
10319 l_temp_budget_line_in_tbl PA_BUDGET_PUB.G_budget_lines_in_tbl%TYPE;
10320 l_bl_raw_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10321 l_bl_burd_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10322 l_bl_bill_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10323 l_bl_plan_start_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
10324 l_bl_plan_end_date_tbl SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
10325 l_bl_uom_tbl SYSTEM.pa_varchar2_80_tbl_type := SYSTEM.pa_varchar2_80_tbl_type();
10326 l_mfc_cost_type_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
10327 l_spread_curve_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
10328 l_sp_fixed_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
10329 l_sp_fixed_date_tbl_1 SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
10330 l_etc_method_name_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
10331 l_spread_curve_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10332 l_spread_curve_id_tbl_1 SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10333
10334 l_amount_set_id pa_fin_plan_amount_sets.fin_plan_amount_set_id%TYPE;
10335 l_allow_qty_flag VARCHAR2(1);
10336
10337 l_set_ppc_flag_on_err VARCHAR2(1);
10338
10339 l_budget_line_out_tbl PA_BUDGET_PUB.G_budget_lines_out_tbl%TYPE;
10340 l_delete_flag_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
10341 l_delete_flag_tbl_1 SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
10342
10343 i INTEGER;
10344 l_error_indicator_flag VARCHAR2(1);
10345
10346 l_mfc_cost_type_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10347 l_mfc_cost_type_id_tbl_1 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10348 l_etc_method_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
10349 l_etc_method_code_tbl_1 SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
10350
10351 is_periodic_setup VARCHAR2(1) := 'N';
10352 l_prep_pbl_calling_context VARCHAR2(30);
10353 l_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE;
10354
10355 l_ra_id_tbl SYSTEM.pa_num_tbl_type;
10356 l_task_id_tbl SYSTEM.pa_num_tbl_type;
10357 l_rlm_id_tbl SYSTEM.pa_num_tbl_type;
10358 l_txn_currency_code_tbl SYSTEM.pa_varchar2_15_tbl_type;
10359 l_planning_start_date_tbl SYSTEM.pa_date_tbl_type;
10360 l_planning_end_date_tbl SYSTEM.pa_date_tbl_type;
10361 l_total_qty_tbl SYSTEM.pa_num_tbl_type;
10362 l_total_raw_cost_tbl SYSTEM.pa_num_tbl_type;
10363 l_total_burdened_cost_tbl SYSTEM.pa_num_tbl_type;
10364 l_total_revenue_tbl SYSTEM.pa_num_tbl_type;
10365 l_raw_cost_rate_tbl SYSTEM.pa_num_tbl_type;
10366 l_burdened_cost_rate_tbl SYSTEM.pa_num_tbl_type;
10367 l_bill_rate_tbl SYSTEM.pa_num_tbl_type;
10368 l_line_start_date_tbl SYSTEM.pa_date_tbl_type;
10369 l_line_end_date_tbl SYSTEM.pa_date_tbl_type;
10370 l_proj_cost_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type;
10371 l_proj_cost_rate_date_type_tbl SYSTEM.pa_varchar2_30_tbl_type;
10372 l_proj_cost_rate_tbl SYSTEM.pa_num_tbl_type;
10373 l_proj_cost_rate_date_tbl SYSTEM.pa_date_tbl_type;
10374 l_proj_rev_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type;
10375 l_proj_rev_rate_date_type_tbl SYSTEM.pa_varchar2_30_tbl_type;
10376 l_proj_rev_rate_tbl SYSTEM.pa_num_tbl_type;
10377 l_proj_rev_rate_date_tbl SYSTEM.pa_date_tbl_type;
10378 l_pfunc_cost_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type;
10379 l_pfunc_cost_rate_date_typ_tbl SYSTEM.pa_varchar2_30_tbl_type;
10380 l_pfunc_cost_rate_tbl SYSTEM.pa_num_tbl_type;
10381 l_pfunc_cost_rate_date_tbl SYSTEM.pa_date_tbl_type;
10382 l_pfunc_rev_rate_type_tbl SYSTEM.pa_varchar2_30_tbl_type;
10383 l_pfunc_rev_rate_date_type_tbl SYSTEM.pa_varchar2_30_tbl_type;
10384 l_pfunc_rev_rate_tbl SYSTEM.pa_num_tbl_type;
10385 l_pfunc_rev_rate_date_tbl SYSTEM.pa_date_tbl_type;
10386 l_change_reason_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
10387 l_description_tbl SYSTEM.pa_varchar2_2000_tbl_type;
10388 l_etc_quantity_tbl SYSTEM.pa_num_tbl_type;
10389 l_etc_raw_cost_tbl SYSTEM.pa_num_tbl_type;
10390 l_etc_burdened_cost_tbl SYSTEM.pa_num_tbl_type;
10391 l_etc_revenue_tbl SYSTEM.pa_num_tbl_type;
10392 l_res_class_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
10393 l_rate_based_flag_tbl SYSTEM.pa_varchar2_1_tbl_type;
10394 l_rbs_elem_id_tbl SYSTEM.pa_num_tbl_type;
10395 l_cbs_elem_id_tbl SYSTEM.pa_num_tbl_type; -- cbs enhancement changes bug#16445106
10396 l_amt_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
10397 l_prc_ra_id_tbl SYSTEM.pa_num_tbl_type;
10398 l_prc_res_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE;
10399 l_prc_rate_based_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE;
10400 l_prc_rbs_elem_id_tbl SYSTEM.pa_num_tbl_type;
10401 l_prc_cbs_elem_id_tbl SYSTEM.pa_num_tbl_type;-- cbs enhancement changes bug#16445106
10402
10403 CURSOR l_prd_start_end_date_csr (c_org_id pa_projects_all.org_id%TYPE,
10404 c_prd_mask_id pa_proj_fp_options.cost_period_mask_id%TYPE,
10405 c_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE,
10406 c_current_planning_period pa_proj_fp_options.cost_current_planning_period%TYPE)
10407 IS
10408 SELECT glsd.start_date start_date,
10409 gled.end_date end_date
10410 FROM (SELECT ROW_NUMBER() OVER(PARTITION BY gl.period_set_name,gl.period_type
10411 ORDER BY gl.start_date) rn,
10412 gl.start_date start_date,
10413 gl.end_Date end_date,
10414 gl.period_name period_name,
10415 gl.period_set_name period_set_name,
10416 gl.period_type period_type
10417 FROM gl_periods gl,
10418 pa_implementations_all pim,
10419 gl_sets_of_books gsb
10420 WHERE gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
10421 AND gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
10422 AND gl.adjustment_period_flag='N'
10423 AND pim.org_id = c_org_id
10424 AND gsb.set_of_books_id = pim.set_of_books_id) glsd,
10425 (SELECT ROW_NUMBER() OVER(PARTITION BY gl.period_set_name,gl.period_type
10426 ORDER BY gl.start_date) rn,
10427 gl.start_date start_date,
10428 gl.end_Date end_date,
10429 gl.period_name period_name,
10430 gl.period_set_name period_set_name,
10431 gl.period_type period_type
10432 FROM gl_periods gl,
10433 pa_implementations_all pim,
10434 gl_sets_of_books gsb
10435 WHERE gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
10436 AND gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
10437 AND gl.adjustment_period_flag='N'
10438 AND pim.org_id = c_org_id
10439 AND gsb.set_of_books_id = pim.set_of_books_id) gled,
10440 (SELECT ROW_NUMBER() OVER(PARTITION BY gl.period_set_name,gl.period_type
10441 ORDER BY gl.start_date) rn,
10442 gl.start_date start_date,
10443 gl.end_Date end_date,
10444 gl.period_name period_name,
10445 gl.period_set_name period_set_name,
10446 gl.period_type period_type
10447 FROM gl_periods gl,
10448 pa_implementations_all pim,
10449 gl_sets_of_books gsb
10450 WHERE gl.period_set_name = DECODE(c_time_phased_code,'P',pim.period_set_name,'G',gsb.period_set_name)
10451 AND gl.period_type = DECODE(c_time_phased_code,'P',pim.pa_period_type,'G',gsb.accounted_period_type)
10452 AND gl.adjustment_period_flag='N'
10453 AND pim.org_id = c_org_id
10454 AND gsb.set_of_books_id = pim.set_of_books_id)glcp,
10455 pa_period_mask_details pmd
10456 WHERE pmd.period_mask_id = c_prd_mask_id
10457 AND glcp.period_name = c_current_planning_period
10458 AND glsd.rn = pmd.from_anchor_start + glcp.rn
10459 AND gled.rn = pmd.from_anchor_end + glcp.rn
10460 AND pmd.from_anchor_position NOT IN (99999,-99999)
10461 ORDER BY pmd.from_anchor_position;
10462
10463 l_prd_date_rec l_prd_start_end_date_csr%ROWTYPE;
10464 l_submit_flag VARCHAR2(1);
10465 l_profile_val VARCHAR2(30);
10466 l_profile_thsld_val NUMBER;
10467 l_profile_thsld_num NUMBER;
10468 l_etc_start_date pa_budget_versions.etc_start_date%TYPE;
10469 l_request_id NUMBER;
10470 l_rollback_flag VARCHAR2(1);
10471 l_first_pd_bf_pm_en_dt DATE;
10472 l_last_pd_af_pm_st_dt DATE;
10473 l_inf_tbl_rec_tbl inf_cur_tbl_typ;
10474 l_record_counter NUMBER;
10475
10476
10477 BEGIN
10478 --log1('Begin '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10479 l_rollback_flag := 'N';
10480 COMMIT; /* Added this for bug 3736220
10481
10482 Reason: To display budget client extension error messages customized by the Customers
10483 we need to stamp the val_error_code and val_error_flag of PA_FP_WEBADI_UPLOAD_INF table
10484 Only then these error messages will appear in Excel Sheet itself when any failure happens
10485 during upload.
10486
10487 Code flow is designed as follows:
10488 1. When user clicks on Oracle Upload Toolbar Menu item in Excel
10489 the WEB ADI related procedures will populate PA_FP_WEBADI_UPLOAD_INF table and does not commit
10490
10491 2. Switcher API will be invoked after WEB ADI related code flow is completed.
10492
10493 3. Swicher API internally invokes PA_FP_CALC_PLAN_PKG.CALCULATE which inturn
10494 invokes the actual budget client extension
10495
10496 4. In client extension, as part of bug fix 3736220 added code to Stamp client extension errors
10497 in xface table (we stamp the val_error_code and val_error_flag of
10498 PA_FP_WEBADI_UPLOAD_INF table)
10499
10500 5. But the client extension is designed in such a way that when any error occurs in
10501 client extension we roll back to the calling API PA_FP_CALC_PLAN_PKG. So the stamped data
10502 gets rolled back. Ulimately the customers customized errors cannot be displayed in excel
10503 due to this rollback.
10504
10505 6. Hence in order to preserve the stamped val_error_code and val_error_flag
10506 of PA_FP_WEBADI_UPLOAD_INF table,introduced an autonomous procedure Stamp_Client_Extn_Errors
10507
10508 7. As a result if we dont commit in the beginning when SWITCHER API is called, then when
10509 Stamp_Client_Extn_Errors APi is invoked there will be no records in PA_FP_WEBADI_UPLOAD_INF.
10510 */
10511
10512 fnd_profile.get('PA_DEBUG_MODE', l_debug_mode);
10513
10514
10515 x_return_status := FND_API.G_RET_STS_SUCCESS;
10516 x_msg_count := 0;
10517
10518 -- initializing the translated out message string
10519 x_success_msg := FND_MESSAGE.GET_STRING
10520 (APPIN => 'PA',
10521 NAMEIN => 'PA_FP_UPL_ONLINE_SUCC_MSG');
10522
10523 IF l_debug_mode = 'Y' THEN
10524 pa_debug.Set_Curr_Function
10525 (p_function => l_module_name,
10526 p_debug_mode => l_debug_mode);
10527 END IF;
10528
10529 --insert_test_dump1;
10530
10531 --log1('----- Entering Switcher api -------');
10532
10533 -- validating input parameter
10534 IF p_run_id IS NULL THEN
10535 IF l_debug_mode = 'Y' THEN
10536 pa_debug.g_err_stage := 'p_run_id is passed as null';
10537 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
10538 END IF;
10539 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10540 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
10541 p_token1 => 'PROCEDURENAME',
10542 p_value1 => l_module_name);
10543 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10544 END IF;
10545
10546 IF l_debug_mode = 'Y' THEN
10547 pa_debug.g_err_stage := 'Entering into switcher';
10548 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
10549 pa_debug.g_err_stage := 'Fetching the header level info from tmp tbl';
10550 pa_debug.write(l_module_name, pa_debug.g_err_stage, l_debug_level3);
10551 END IF;
10552
10553 l_submit_flag:='N';
10554 IF p_submit_forecast_flag='Y' OR p_submit_budget_flag ='Y' THEN
10555
10556 l_submit_flag:='Y';
10557
10558 END IF;
10559
10560
10561 BEGIN
10562 SELECT budget_version_id,
10563 record_version_number,
10564 prd_mask_rec_ver_number
10565 INTO l_budget_version_id,
10566 l_rec_version_number,
10567 l_pm_rec_version_number
10568 FROM pa_fp_webadi_upload_inf
10569 WHERE run_id = p_run_id
10570 AND Nvl(p_request_id, -99) = Nvl(request_id, -99)
10571 AND rownum = 1;
10572 EXCEPTION
10573 WHEN NO_DATA_FOUND THEN
10574 IF l_debug_mode = 'Y' THEN
10575 pa_debug.g_err_stage := 'No data found while reading header info';
10576 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10577 END IF;
10578 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10579 END;
10580
10581
10582 --Find out whether the layout is a periodic layout or not. This can be done by looking at the amount type column
10583 --in the table since it will be populated only for periodic layouts.
10584 BEGIN
10585 SELECT 'Y'
10586 INTO is_periodic_setup
10587 FROM DUAL
10588 WHERE EXISTS(SELECT 'X'
10589 FROM pa_fp_webadi_upload_inf
10590 WHERE amount_type_name IS NOT NULL
10591 AND run_id = p_run_id
10592 AND Nvl(p_request_id, -99) = Nvl(request_id, -99));
10593 EXCEPTION
10594 WHEN NO_DATA_FOUND THEN
10595 is_periodic_setup := 'N';
10596 END;
10597
10598 IF l_debug_mode = 'Y' THEN
10599 pa_debug.g_err_stage := 'is_periodic_setup: =' || is_periodic_setup;
10600 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10601 END IF;
10602
10603 -- throwing error if the header level info is missing
10604 IF l_budget_version_id IS NULL OR
10605 l_rec_version_number IS NULL OR
10606 (is_periodic_setup='Y' AND l_pm_rec_version_number IS NULL) THEN
10607 IF l_debug_mode = 'Y' THEN
10608 pa_debug.g_err_stage := 'Header level values are null in interface table';
10609 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
10610 END IF;
10611 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10612 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
10613 p_token1 => 'PROCEDURENAME',
10614 p_value1 => l_module_name);
10615 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10616 END IF;
10617
10618
10619 --log1('----- STAGE 1-------');
10620
10621 IF l_debug_mode = 'Y' THEN
10622 pa_debug.g_err_stage := 'Deriving project id';
10623 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10624 END IF;
10625
10626 BEGIN
10627 SELECT bv.project_id,
10628 Nvl(pl.org_id, -99),
10629 etc_start_date
10630 INTO l_project_id,
10631 l_org_id,
10632 l_etc_start_date
10633 FROM pa_budget_versions bv,
10634 pa_projects_all pl
10635 WHERE bv.budget_version_id = l_budget_version_id
10636 AND bv.project_id = pl.project_id;
10637 EXCEPTION
10638 WHEN NO_DATA_FOUND THEN
10639 IF l_debug_mode = 'Y' THEN
10640 pa_debug.g_err_stage := 'No data found while reading project id ..';
10641 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10642 END IF;
10643 UPDATE pa_fp_webadi_upload_inf
10644 SET val_error_flag = 'Y',
10645 val_error_code = 'PA_FP_WEBADI_VER_MODIFIED',
10646 err_task_name = nvl(task_name,'-98'),
10647 err_task_number = nvl(task_number,'-98'),
10648 err_alias = nvl(resource_alias,'-98'),
10649 err_amount_type_code = nvl(amount_type_code,'-98')
10650 WHERE run_id=p_run_id
10651 AND Nvl(p_request_id, -99) = Nvl(request_id, -99);
10652
10653 x_return_status := FND_API.G_RET_STS_ERROR;
10654 IF l_debug_mode = 'Y' THEN
10655 pa_debug.reset_curr_function;
10656 END IF;
10657
10658 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10659 END;
10660
10661 --log1('----- STAGE 2-------');
10662
10663 MO_GLOBAL.SET_POLICY_CONTEXT('S',l_org_id);
10664
10665 IF l_debug_mode = 'Y' THEN
10666 pa_debug.g_err_stage := 'Calling pa_fp_gen_amount_utils.get_plan_version_dtls';
10667 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10668 END IF;
10669 --log1('----- STAGE 2.1-------'||l_project_id);
10670 --log1('----- STAGE 2.2-------'||l_budget_version_id);
10671 pa_fp_gen_amount_utils.get_plan_version_dtls
10672 (p_project_id => l_project_id,
10673 p_budget_version_id => l_budget_version_id,
10674 x_fp_cols_rec => l_version_info_rec,
10675 x_return_status => x_return_status,
10676 x_msg_count => l_msg_count,
10677 x_msg_data => l_msg_data);
10678
10679 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10680 IF l_debug_mode = 'Y' THEN
10681 pa_debug.g_err_stage := 'Call to get_plan_version_dtls returned with error';
10682 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10683 END IF;
10684 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10685 END IF;
10686 --log1('----- STAGE 2.3-------'||x_return_status);
10687 --log1('----- STAGE 2.4-------'||l_budget_version_id);
10688
10689 IF l_debug_mode = 'Y' THEN
10690 pa_debug.g_err_stage := 'Calling validate_header_info';
10691 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10692 END IF;
10693
10694 --log1('----- STAGE 3-------');
10695 --log1('1 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10696 --DEBUG_NS('Before validate_header_info');
10697 validate_header_info
10698 ( p_calling_mode => p_calling_mode,
10699 p_run_id => p_run_id,
10700 p_budget_version_id => l_budget_version_id,
10701 p_record_version_number => l_rec_version_number,
10702 p_pm_rec_version_number => l_pm_rec_version_number,
10703 p_submit_flag => l_submit_flag,
10704 p_request_id => p_request_id,
10705 x_return_status => x_return_status,
10706 x_msg_data => l_msg_count,
10707 x_msg_count => l_msg_data);
10708 --log1('2 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10709
10710 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10711 IF l_debug_mode = 'Y' THEN
10712 pa_debug.g_err_stage := 'Call to validate_header_info returned with error';
10713 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10714 END IF;
10715 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10716 END IF;
10717
10718 -- checking, if the layout is periodic one
10719 IF l_debug_mode = 'Y' THEN
10720 pa_debug.g_err_stage := 'Checking for periodic setup';
10721 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10722 END IF;
10723
10724 --log1('----- STAGE 4-------');
10725
10726 --log1('----- STAGE 5-------');
10727 --dbms_output.put_line('--------l_org_id ---------' || l_org_id);
10728 --dbms_output.put_line('--------l_version_info_rec.x_period_mask_id---------' || l_version_info_rec.x_period_mask_id);
10729 --dbms_output.put_line('--------l_version_info_rec.x_time_phased_code ---------' || l_version_info_rec.x_time_phased_code);
10730 --dbms_output.put_line('--------l_version_info_rec.x_current_planning_period ---------' ||l_version_info_rec.x_current_planning_period);
10731 -- populating the tables for period start/end date to be passed to prepare_val_input
10732 -- if the version is time phased and the layout is periodic
10733 IF l_version_info_rec.x_time_phased_code <> 'N' AND
10734 is_periodic_setup = 'Y' THEN
10735 OPEN l_prd_start_end_date_csr(l_org_id,
10736 l_version_info_rec.x_period_mask_id,
10737 l_version_info_rec.x_time_phased_code,
10738 l_version_info_rec.x_current_planning_period);
10739 /*LOOP*/
10740 FETCH l_prd_start_end_date_csr
10741 BULK COLLECT INTO /*l_prd_date_rec;*/
10742 l_prd_start_date_tbl,
10743 l_prd_end_date_tbl;
10744 /*EXIT WHEN l_prd_date_rec.start_date IS NULL;
10745
10746 l_prd_start_date_tbl.EXTEND(1);
10747 l_prd_start_date_tbl(l_prd_start_date_tbl.COUNT) := l_prd_date_rec.start_date;
10748 l_prd_end_date_tbl.EXTEND(1);
10749 l_prd_end_date_tbl(l_prd_end_date_tbl.COUNT) := l_prd_date_rec.end_date;
10750 END LOOP;*/
10751 CLOSE l_prd_start_end_date_csr;
10752
10753 END IF; -- if periodic
10754
10755 --dbms_output.put_line('--------l_prd_start_date_tbl.COUNT ---------' || l_prd_start_date_tbl.COUNT);
10756 --dbms_output.put_line('--------l_prd_end_date_tbl.COUNT ---------' || l_prd_end_date_tbl.COUNT);
10757
10758 IF l_debug_mode = 'Y' THEN
10759 pa_debug.g_err_stage := 'Calling prepare_val_input';
10760 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10761 END IF;
10762
10763 --log1('----- STAGE 6-------');
10764 --log1('3 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10765
10766
10767 IF is_periodic_setup = 'Y' THEN
10768 --DEBUG_NS('Before prepare_val_input 10998');
10769 prepare_val_input
10770 ( p_run_id => p_run_id,
10771 p_request_id => p_request_id,
10772 p_version_info_rec => l_version_info_rec,
10773 p_prd_start_date_tbl => l_prd_start_date_tbl,
10774 p_prd_end_date_tbl => l_prd_end_date_tbl,
10775 p_org_id => l_org_id,
10776 x_budget_lines => l_budget_line_in_tbl,
10777 x_etc_quantity_tbl => l_etc_quantity_tbl,
10778 x_etc_raw_cost_tbl => l_etc_raw_cost_tbl,
10779 x_etc_burdened_cost_tbl => l_etc_burdened_cost_tbl,
10780 x_etc_revenue_tbl => l_etc_revenue_tbl,
10781 x_raw_cost_rate_tbl => l_bl_raw_cost_rate_tbl,
10782 x_burd_cost_rate_tbl => l_bl_burd_cost_rate_tbl,
10783 x_bill_rate_tbl => l_bl_bill_rate_tbl,
10784 x_planning_start_date_tbl => l_bl_plan_start_date_tbl,
10785 x_planning_end_date_tbl => l_bl_plan_end_date_tbl,
10786 x_uom_tbl => l_bl_uom_tbl,
10787 x_mfc_cost_type_tbl => l_mfc_cost_type_tbl,
10788 x_spread_curve_name_tbl => l_spread_curve_name_tbl,
10789 x_sp_fixed_date_tbl => l_sp_fixed_date_tbl,
10790 x_etc_method_name_tbl => l_etc_method_name_tbl,
10791 x_spread_curve_id_tbl => l_spread_curve_id_tbl,
10792 x_delete_flag_tbl => l_delete_flag_tbl,
10793 x_ra_id_tbl => l_ra_id_tbl,
10794 x_res_class_code_tbl => l_res_class_code_tbl,
10795 x_rate_based_flag_tbl => l_rate_based_flag_tbl,
10796 x_rbs_elem_id_tbl => l_rbs_elem_id_tbl,
10797 x_cbs_elem_id_tbl => l_cbs_elem_id_tbl, -- cbs enhancement changes bug#16445106
10798 x_amt_type_tbl => l_amt_type_tbl,
10799 x_first_pd_bf_pm_en_dt => l_first_pd_bf_pm_en_dt,
10800 x_last_pd_af_pm_st_dt => l_last_pd_af_pm_st_dt,
10801 x_inf_tbl_rec_tbl => l_inf_tbl_rec_tbl,
10802 x_num_of_rec_processed => l_record_counter,
10803 x_return_status => x_return_status,
10804 x_msg_count => l_msg_count,
10805 x_msg_data => l_msg_data);
10806
10807 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10808 IF l_debug_mode = 'Y' THEN
10809 pa_debug.g_err_stage := 'Call to prepare_val_input returned with error';
10810 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10811 END IF;
10812 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10813 END IF;
10814 ELSE
10815 --DEBUG_NS('Before prepare_val_input 11045');
10816 prepare_val_input
10817 ( p_run_id => p_run_id,
10818 p_request_id => p_request_id,
10819 p_version_info_rec => l_version_info_rec,
10820 p_prd_start_date_tbl => l_prd_start_date_tbl,
10821 p_prd_end_date_tbl => l_prd_end_date_tbl,
10822 p_org_id => l_org_id,
10823 x_budget_lines => l_budget_line_in_tbl,
10824 x_etc_quantity_tbl => l_etc_quantity_tbl,
10825 x_etc_raw_cost_tbl => l_etc_raw_cost_tbl,
10826 x_etc_burdened_cost_tbl => l_etc_burdened_cost_tbl,
10827 x_etc_revenue_tbl => l_etc_revenue_tbl,
10828 x_raw_cost_rate_tbl => l_bl_raw_cost_rate_tbl,
10829 x_burd_cost_rate_tbl => l_bl_burd_cost_rate_tbl,
10830 x_bill_rate_tbl => l_bl_bill_rate_tbl,
10831 x_planning_start_date_tbl => l_bl_plan_start_date_tbl,
10832 x_planning_end_date_tbl => l_bl_plan_end_date_tbl,
10833 x_uom_tbl => l_bl_uom_tbl,
10834 x_mfc_cost_type_tbl => l_mfc_cost_type_tbl,
10835 x_spread_curve_name_tbl => l_spread_curve_name_tbl,
10836 x_sp_fixed_date_tbl => l_sp_fixed_date_tbl,
10837 x_etc_method_name_tbl => l_etc_method_name_tbl,
10838 x_spread_curve_id_tbl => l_spread_curve_id_tbl,
10839 x_delete_flag_tbl => l_delete_flag_tbl,
10840 x_ra_id_tbl => l_ra_id_tbl,
10841 x_res_class_code_tbl => l_res_class_code_tbl,
10842 x_rate_based_flag_tbl => l_rate_based_flag_tbl,
10843 x_rbs_elem_id_tbl => l_rbs_elem_id_tbl,
10844 x_cbs_elem_id_tbl => l_cbs_elem_id_tbl, -- cbs enhancement changes bug#16445106
10845 x_amt_type_tbl => l_amt_type_tbl,
10846 x_first_pd_bf_pm_en_dt => l_first_pd_bf_pm_en_dt,
10847 x_last_pd_af_pm_st_dt => l_last_pd_af_pm_st_dt,
10848 x_inf_tbl_rec_tbl => l_inf_tbl_rec_tbl,
10849 x_num_of_rec_processed => l_record_counter,
10850 x_return_status => x_return_status,
10851 x_msg_count => l_msg_count,
10852 x_msg_data => l_msg_data);
10853
10854 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10855 IF l_debug_mode = 'Y' THEN
10856 pa_debug.g_err_stage := 'Call to prepare_val_input returned with error';
10857 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10858 END IF;
10859 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10860 END IF;
10861 END IF; -- periodic check
10862
10863 --log1('3 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10864 --log1('3.1 '||l_inf_tbl_rec_tbl.count);
10865 --log1('----- STAGE 7------- l_budget_line_in_tbl.count '||l_budget_line_in_tbl.count);
10866 -- getting other required information to call validate_budget_lines
10867
10868 IF l_version_info_rec.x_version_type = 'COST' THEN
10869 l_allow_qty_flag := l_version_info_rec.x_cost_quantity_flag;
10870 ELSIF l_version_info_rec.x_version_type = 'REVENUE' THEN
10871 l_allow_qty_flag := l_version_info_rec.x_rev_quantity_flag;
10872 ELSIF l_version_info_rec.x_version_type = 'ALL' THEN
10873 l_allow_qty_flag := l_version_info_rec.x_all_quantity_flag;
10874 END IF;
10875
10876 IF l_debug_mode = 'Y' THEN
10877 pa_debug.g_err_stage := 'Calling validate_budget_lines';
10878 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10879 END IF;
10880 --log1('4 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10881
10882 l_spread_curve_id_tbl_1 := l_spread_curve_id_tbl;
10883 --DEBUG_NS('Before pa_budget_pvt.validate_budget_lines');
10884
10885
10886 --l_temp_budget_line_in_tbl := l_budget_line_in_tbl;
10887
10888 pa_budget_pvt.validate_budget_lines
10889 (p_run_id => p_run_id
10890 ,p_calling_context => 'WEBADI'
10891 ,p_pa_project_id => l_version_info_rec.x_project_id
10892 ,p_budget_type_code => null -- pass null
10893 ,p_fin_plan_type_id => l_version_info_rec.x_fin_plan_type_id
10894 ,p_version_type => l_version_info_rec.x_version_type
10895 ,p_resource_list_id => l_version_info_rec.x_resource_list_id
10896 ,p_time_phased_code => l_version_info_rec.x_time_phased_code
10897 ,p_budget_entry_method_code => null -- pass null
10898 ,p_entry_level_code => l_version_info_rec.x_fin_plan_level_code
10899 ,p_allow_qty_flag => l_allow_qty_flag
10900 ,p_allow_raw_cost_flag => l_version_info_rec.x_raw_cost_flag
10901 ,p_allow_burdened_cost_flag => l_version_info_rec.x_burdened_flag
10902 ,p_allow_revenue_flag => l_version_info_rec.x_revenue_flag
10903 ,p_multi_currency_flag => l_version_info_rec.x_plan_in_multi_curr_flag
10904 ,p_project_cost_rate_type => null
10905 ,p_project_cost_rate_date_typ => null
10906 ,p_project_cost_rate_date => null
10907 ,p_project_cost_exchange_rate => null
10908 ,p_projfunc_cost_rate_type => null
10909 ,p_projfunc_cost_rate_date_typ => null
10910 ,p_projfunc_cost_rate_date => null
10911 ,p_projfunc_cost_exchange_rate => null
10912 ,p_project_rev_rate_type => null
10913 ,p_project_rev_rate_date_typ => null
10914 ,p_project_rev_rate_date => null
10915 ,p_project_rev_exchange_rate => null
10916 ,p_projfunc_rev_rate_type => null
10917 ,p_projfunc_rev_rate_date_typ => null
10918 ,p_projfunc_rev_rate_date => null
10919 ,p_projfunc_rev_exchange_rate => null
10920 ,p_version_info_rec => l_version_info_rec
10921 ,p_allow_raw_cost_rate_flag => l_version_info_rec.x_cost_rate_flag
10922 ,p_allow_burd_cost_rate_flag => l_version_info_rec.x_burden_rate_flag
10923 ,p_allow_bill_rate_flag => l_version_info_rec.x_bill_rate_flag
10924 ,p_raw_cost_rate_tbl => l_bl_raw_cost_rate_tbl
10925 ,p_burd_cost_rate_tbl => l_bl_burd_cost_rate_tbl
10926 ,p_bill_rate_tbl => l_bl_bill_rate_tbl
10927 ,p_uom_tbl => l_bl_uom_tbl
10928 ,p_planning_start_date_tbl => l_bl_plan_start_date_tbl
10929 ,p_planning_end_date_tbl => l_bl_plan_end_date_tbl
10930 ,p_delete_flag_tbl => l_delete_flag_tbl
10931 ,p_mfc_cost_type_tbl => l_mfc_cost_type_tbl
10932 ,p_spread_curve_name_tbl => l_spread_curve_name_tbl
10933 ,p_sp_fixed_date_tbl => l_sp_fixed_date_tbl
10934 ,p_etc_method_name_tbl => l_etc_method_name_tbl
10935 ,p_spread_curve_id_tbl => l_spread_curve_id_tbl_1
10936 ,p_amount_type_tbl => l_amt_type_tbl
10937 ,px_budget_lines_in => l_budget_line_in_tbl
10938 ,x_budget_lines_out => l_budget_line_out_tbl
10939 ,x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
10940 ,x_etc_method_code_tbl => l_etc_method_code_tbl
10941 ,x_spread_curve_id_tbl => l_spread_curve_id_tbl
10942 ,x_msg_count => l_msg_count
10943 ,x_msg_data => l_msg_data
10944 ,x_return_status => x_return_status);
10945 --log1('5 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
10946 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10947 IF l_debug_mode = 'Y' THEN
10948 pa_debug.g_err_stage := 'Call to validate_budget_lines returned with error';
10949 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10950 END IF;
10951 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10952 END IF;
10953 --log1('----- STAGE 9------- l_budget_line_in_tbl.count '||l_budget_line_in_tbl.count);
10954
10955 IF l_debug_mode = 'Y' THEN
10956 pa_debug.g_err_stage := 'Call to validate_budget_lines is complete';
10957 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10958 pa_debug.g_err_stage := 'Checking for errors';
10959 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10960 END IF;
10961
10962 --DEBUG_NS('l_budget_line_in_tbl.count :: '|| l_budget_line_in_tbl.count);
10963 --DEBUG_NS('After pa_budget_pvt.validate_budget_lines :: '|| x_msg_data);
10964 --DEBUG_NS('After pa_budget_pvt.validate_budget_lines :: '|| x_msg_data);
10965 --DEBUG_NS('p_run_id :: '|| p_run_id);
10966 --DEBUG_NS('p_request_id :: '|| p_request_id);
10967 --DEBUG_NS('Before l_error_indicator_flag :: '|| l_error_indicator_flag);
10968
10969 /*
10970 FOR i in l_budget_line_in_tbl.first .. l_budget_line_in_tbl.last
10971 LOOP
10972 l_budget_line_in_tbl(i).cbs_element_id := l_temp_budget_line_in_tbl(i).cbs_element_id;
10973 END LOOP;
10974 */
10975 l_error_indicator_flag := 'N';
10976 BEGIN
10977
10978 SELECT 'X'
10979 INTO l_error_indicator_flag
10980 FROM DUAL
10981 WHERE EXISTS (SELECT 'Y'
10982 FROM pa_fp_webadi_upload_inf inf--pa_fp_webadi_upload_inf inf
10983 WHERE run_id = p_run_id
10984 AND Nvl(p_request_id, -99) = Nvl(request_id, -99)
10985 AND (inf.val_error_flag = 'Y'
10986 OR inf.val_error_code IS NOT NULL));
10987
10988
10989
10990 --DEBUG_NS('Sql Rowcount :: '|| sql%rowcount);
10991 EXCEPTION
10992 WHEN NO_DATA_FOUND THEN
10993 l_error_indicator_flag := 'N';
10994 END;
10995
10996 IF l_debug_mode = 'Y' THEN
10997 pa_debug.g_err_stage := 'l_error_indicator_flag: ' || l_error_indicator_flag;
10998 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
10999 END IF;
11000
11001 --DEBUG_NS('l_error_indicator_flag :: '|| l_error_indicator_flag);
11002
11003 --log1('----- STAGE 10-------');
11004 IF l_error_indicator_flag = 'X' THEN
11005 IF l_debug_mode = 'Y' THEN
11006 pa_debug.g_err_stage := 'Errors reported in the tmp tbl';
11007 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11008 END IF;
11009
11010 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11011 END IF;
11012
11013
11014 -- bug 4428112: add the following procedure to update the txn currency code
11015 -- if it was not passed earlier, for a non MC enabled version with the validated
11016 -- currency code as returned from the validate_budget_lines.
11017 IF l_version_info_rec.x_plan_in_multi_curr_flag = 'N' THEN
11018 --DEBUG_NS('Before check_and_update_txn_curr_code ');
11019 check_and_update_txn_curr_code
11020 (p_budget_line_tbl => l_budget_line_in_tbl,
11021 px_inf_cur_rec_tbl => l_inf_tbl_rec_tbl,
11022 x_return_status => x_return_status,
11023 x_msg_count => l_msg_count,
11024 x_msg_data => l_msg_data);
11025
11026 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11027 IF l_debug_mode = 'Y' THEN
11028 pa_debug.g_err_stage := 'Call to check_and_update_txn_curr_code returned with error';
11029 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11030 END IF;
11031 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11032 END IF;
11033 END IF;
11034
11035
11036 -- no errors reported in validate_budget_lines. Check if the processing can happen online or
11037 --a concurrent request has to be submitted
11038 IF p_calling_mode = 'STANDARD' THEN
11039 --log1('----- STAGE 10.1-------');
11040 -- For values other than site level
11041 l_profile_val := fnd_profile.value_specific
11042 (name => 'PA_FP_WEBADI_DATA_PRC_MODE',
11043 user_id => fnd_global.user_id,
11044 responsibility_id => fnd_global.resp_id,
11045 application_id => 275);
11046 --log1('----- STAGE 10.2-------');
11047 IF l_profile_val IS NULL THEN
11048 -- For values at site level
11049 --log1('----- STAGE 10.3-------');
11050 l_profile_val := fnd_profile.value
11051 (name => 'PA_FP_WEBADI_DATA_PRC_MODE');
11052 --log1('----- STAGE 10.4-------');
11053 END IF;
11054
11055 --DEBUG_NS('l_profile_val :: '|| l_profile_val);
11056
11057 IF l_profile_val = 'STANDARD' THEN
11058 --log1('----- STAGE 10.5-------');
11059 l_profile_thsld_val := fnd_profile.value_specific
11060 (name => 'PA_FP_WEBADI_DATA_PRC_THSLD',
11061 user_id => fnd_global.user_id,
11062 responsibility_id => fnd_global.resp_id,
11063 application_id => 275);
11064 --log1('----- STAGE 10.6-------');
11065 IF l_profile_thsld_val IS NULL THEN
11066 --log1('----- STAGE 10.7-------');
11067 l_profile_thsld_val := fnd_profile.value
11068 (name => 'PA_FP_WEBADI_DATA_PRC_THSLD');
11069 --log1('----- STAGE 10.8-------');
11070 END IF;
11071
11072 BEGIN
11073
11074 SELECT to_number(l_profile_thsld_val)
11075 INTO l_profile_thsld_num
11076 FROM dual;
11077 --log1('----- STAGE 10.9-------');
11078 EXCEPTION
11079 WHEN INVALID_NUMBER THEN
11080 --log1('----- STAGE 10.10-------');
11081 l_profile_thsld_num := 0;
11082 END;
11083
11084 IF l_profile_thsld_num < l_record_counter THEN
11085 --log1('----- STAGE 10.11-------');
11086 l_set_ppc_flag_on_err :='Y';
11087
11088 -- bug 5657334: setting the conc program to refer only a single org as the same in the
11089 -- project context before submitting the request
11090 fnd_request.set_org_id(l_org_id);
11091 -- end bug 5657334
11092
11093 l_request_id := FND_REQUEST.submit_request
11094 (application => 'PA',
11095 program => 'PAFPWACP',
11096 argument1 => l_submit_flag, -- p_submit_ver_flag
11097 argument2 => p_run_id ); -- p_run_id
11098 --log1('----- STAGE 10.12-------');
11099 IF l_request_id =0 THEN
11100 --log1('----- STAGE 10.13-------');
11101 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11102
11103 ELSE
11104 --log1('----- STAGE 10.14-------');
11105
11106 -- updating the budget version with the request_id
11107 UPDATE pa_budget_versions
11108 SET plan_processing_code = 'XLUP',
11109 request_id = l_request_id
11110 WHERE budget_version_id = l_budget_version_id;
11111
11112 UPDATE pa_fp_webadi_upload_inf
11113 SET request_id = l_request_id
11114 WHERE run_id = p_run_id
11115 AND request_id IS NULL;
11116
11117 COMMIT; -- is required to query the interface table from conc prog.
11118 --log1('----- STAGE 10.15-------');
11119
11120 -- If the concurrent request is submitted during upload then the request id should
11121 -- be displayed to the user. Hence change the x_success_msg value
11122 IF l_request_id IS NOT NULL AND
11123 (l_request_id <> -99 OR
11124 l_request_id <> -1) THEN
11125 FND_MESSAGE.SET_NAME( APPLICATION =>'PA',
11126 NAME => 'PA_FP_WA_CONC_PRC_RESUB_INFO');
11127
11128 FND_MESSAGE.SET_TOKEN(TOKEN => 'REQUEST_ID',
11129 VALUE => '' || l_request_id);
11130
11131 x_success_msg := FND_MESSAGE.GET;
11132 END IF;
11133
11134 IF l_debug_mode = 'Y' THEN
11135 pa_debug.reset_curr_function;
11136 END IF;
11137
11138 RETURN;
11139
11140 END IF;--IF l_request_id =0 THEN
11141
11142 END IF;--IF l_profile_thsld_num < l_budget_line_in_tbl.COUNT
11143
11144 END IF;--IF l_profile_val = 'STANDARD' THEN
11145
11146 END IF;--IF p_calling_mode = 'STANDARD' TEHN
11147 -- preparing the inputs for preapre_pbl_input
11148
11149 --log1('----- STAGE 11------- l_budget_line_in_tbl.count'||l_budget_line_in_tbl.count);
11150 IF is_periodic_setup = 'Y' THEN
11151 l_prep_pbl_calling_context := 'WEBADI_PERIODIC';
11152 ELSE
11153 l_prep_pbl_calling_context := 'WEBADI_NON_PERIODIC';
11154 END IF;
11155
11156 -- calling prepare_pbl_input to prepare inputs for the process_budget_lines api from data passed
11157 -- back from validate_budget_lines
11158 IF l_debug_mode = 'Y' THEN
11159 pa_debug.g_err_stage := 'Calling prepare_pbl_input';
11160 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11161 END IF;
11162 --log1('6 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11163
11164 l_spread_curve_id_tbl_1 := l_spread_curve_id_tbl;
11165 l_mfc_cost_type_id_tbl_1 := l_mfc_cost_type_id_tbl;
11166 l_delete_flag_tbl_1 := l_delete_flag_tbl;
11167 l_etc_method_code_tbl_1 := l_etc_method_code_tbl;
11168 l_sp_fixed_date_tbl_1 := l_sp_fixed_date_tbl;
11169
11170 --DEBUG_NS('Before prepare_pbl_input');
11171
11172 prepare_pbl_input
11173 (p_context => l_prep_pbl_calling_context,
11174 p_run_id => p_run_id,
11175 p_version_info_rec => l_version_info_rec,
11176 p_inf_tbl_rec_tbl => l_inf_tbl_rec_tbl,
11177 p_project_id => l_project_id,
11178 p_budget_version_id => l_budget_version_id,
11179 p_etc_start_date => l_etc_start_date,
11180 p_plan_class_code => l_version_info_rec.x_plan_class_code,
11181 p_first_pd_bf_pm_en_dt => l_first_pd_bf_pm_en_dt,
11182 p_last_pd_af_pm_st_dt => l_last_pd_af_pm_st_dt,
11183 p_budget_lines_tbl => l_budget_line_in_tbl,
11184 p_ra_id_tbl => l_ra_id_tbl,
11185 p_prd_mask_st_date_tbl => l_prd_start_date_tbl,
11186 p_prd_mask_end_date_tbl => l_prd_end_date_tbl,
11187 p_planning_start_date_tbl => l_bl_plan_start_date_tbl,
11188 p_planning_end_date_tbl => l_bl_plan_end_date_tbl,
11189 p_etc_quantity_tbl => l_etc_quantity_tbl,
11190 p_etc_raw_cost_tbl => l_etc_raw_cost_tbl,
11191 p_etc_burdened_cost_tbl => l_etc_burdened_cost_tbl,
11192 p_etc_revenue_tbl => l_etc_revenue_tbl,
11193 p_raw_cost_rate_tbl => l_bl_raw_cost_rate_tbl,
11194 p_burd_cost_rate_tbl => l_bl_burd_cost_rate_tbl,
11195 p_bill_rate_tbl => l_bl_bill_rate_tbl,
11196 p_spread_curve_id_tbl => l_spread_curve_id_tbl_1,
11197 p_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl_1,
11198 p_etc_method_code_tbl => l_etc_method_code_tbl_1,
11199 p_sp_fixed_date_tbl => l_sp_fixed_date_tbl_1,
11200 p_res_class_code_tbl => l_res_class_code_tbl,
11201 p_rate_based_flag_tbl => l_rate_based_flag_tbl,
11202 p_rbs_elem_id_tbl => l_rbs_elem_id_tbl,
11203 p_cbs_elem_id_tbl => l_cbs_elem_id_tbl,-- cbs enhancement changes bug#16445106
11204 p_delete_flag_tbl => l_delete_flag_tbl_1,
11205 p_request_id => p_request_id,
11206 x_task_id_tbl => l_task_id_tbl,
11207 x_rlm_id_tbl => l_rlm_id_tbl,
11208 x_ra_id_tbl => l_prc_ra_id_tbl,
11209 x_txn_currency_code_tbl => l_txn_currency_code_tbl,
11210 x_planning_start_date_tbl => l_planning_start_date_tbl,
11211 x_planning_end_date_tbl => l_planning_end_date_tbl,
11212 x_total_qty_tbl => l_total_qty_tbl,
11213 x_total_raw_cost_tbl => l_total_raw_cost_tbl,
11214 x_total_burdened_cost_tbl => l_total_burdened_cost_tbl,
11215 x_total_revenue_tbl => l_total_revenue_tbl,
11216 x_raw_cost_rate_tbl => l_raw_cost_rate_tbl,
11217 x_burdened_cost_rate_tbl => l_burdened_cost_rate_tbl,
11218 x_bill_rate_tbl => l_bill_rate_tbl,
11219 x_line_start_date_tbl => l_line_start_date_tbl,
11220 x_line_end_date_tbl => l_line_end_date_tbl,
11221 x_proj_cost_rate_type_tbl => l_proj_cost_rate_type_tbl,
11222 x_proj_cost_rate_date_type_tbl => l_proj_cost_rate_date_type_tbl,
11223 x_proj_cost_rate_tbl => l_proj_cost_rate_tbl,
11224 x_proj_cost_rate_date_tbl => l_proj_cost_rate_date_tbl,
11225 x_proj_rev_rate_type_tbl => l_proj_rev_rate_type_tbl,
11226 x_proj_rev_rate_date_type_tbl => l_proj_rev_rate_date_type_tbl,
11227 x_proj_rev_rate_tbl => l_proj_rev_rate_tbl,
11228 x_proj_rev_rate_date_tbl => l_proj_rev_rate_date_tbl,
11229 x_pfunc_cost_rate_type_tbl => l_pfunc_cost_rate_type_tbl,
11230 x_pfunc_cost_rate_date_typ_tbl => l_pfunc_cost_rate_date_typ_tbl,
11231 x_pfunc_cost_rate_tbl => l_pfunc_cost_rate_tbl,
11232 x_pfunc_cost_rate_date_tbl => l_pfunc_cost_rate_date_tbl,
11233 x_pfunc_rev_rate_type_tbl => l_pfunc_rev_rate_type_tbl,
11234 x_pfunc_rev_rate_date_type_tbl => l_pfunc_rev_rate_date_type_tbl,
11235 x_pfunc_rev_rate_tbl => l_pfunc_rev_rate_tbl,
11236 x_pfunc_rev_rate_date_tbl => l_pfunc_rev_rate_date_tbl,
11237 x_delete_flag_tbl => l_delete_flag_tbl,
11238 x_spread_curve_id_tbl => l_spread_curve_id_tbl,
11239 x_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl,
11240 x_etc_method_code_tbl => l_etc_method_code_tbl,
11241 x_sp_fixed_date_tbl => l_sp_fixed_date_tbl,
11242 x_res_class_code_tbl => l_prc_res_class_code_tbl,
11243 x_rate_based_flag_tbl => l_prc_rate_based_flag_tbl,
11244 x_rbs_elem_id_tbl => l_prc_rbs_elem_id_tbl,
11245 x_cbs_element_id_tbl => l_prc_cbs_elem_id_tbl,-- cbs enhancement changes bug#16445106
11246 x_change_reason_code_tbl => l_change_reason_code_tbl,
11247 x_description_tbl => l_description_tbl,
11248 x_return_status => x_return_status,
11249 x_msg_count => l_msg_count,
11250 x_msg_data => l_msg_data);
11251
11252 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11253 IF l_debug_mode = 'Y' THEN
11254 pa_debug.g_err_stage := 'Call to prepare_pbl_input returned with error';
11255 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11256 END IF;
11257 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11258 END IF;
11259
11260 IF l_debug_mode = 'Y' THEN
11261 pa_debug.g_err_stage := 'Call to prepare_pbl_input done';
11262 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11263 END IF;
11264 --log1('7 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11265 --log1('----- STAGE 12-------');
11266 -- calling process_budget_lines to commit the validated data in DB
11267 IF l_debug_mode = 'Y' THEN
11268 pa_debug.g_err_stage := 'Calling process_budget_lines';
11269 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11270 END IF;
11271
11272 --Till this point all the DMLs would have been executed on PA_FP_WEBADI_UPLOAD_INF. In case of any error
11273 --those changes need not be rolled back. process_budget_lines API will update the core B/F tables and hence
11274 --those updates should be reverted in case of any error. Hence establishing a savepoint now.
11275 SAVEPOINT SWITCHER;
11276 l_rollback_flag := 'Y';
11277 --log1('8 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11278
11279 -- Bug 4431269: Populating the global variables to be used in calculate api
11280 -- for error reporting purpose
11281 G_FP_WA_CALC_CALLING_CONTEXT := 'WEBADI_CALCULATE';
11282
11283 --insert_test_dump1;
11284 --DEBUG_NS('Before process_budget_lines');
11285 --DEBUG_NS('l_prc_cbs_elem_id_tbl.COUNT :: '||l_prc_cbs_elem_id_tbl.COUNT);
11286
11287 process_budget_lines
11288 ( p_context => l_prep_pbl_calling_context,
11289 p_budget_version_id => l_budget_version_id,
11290 p_version_info_rec => l_version_info_rec,
11291 p_task_id_tbl => l_task_id_tbl,
11292 p_rlm_id_tbl => l_rlm_id_tbl,
11293 p_cbs_element_id_tbl => l_prc_cbs_elem_id_tbl,-- cbs enhancement changes bug#16445106
11294 p_ra_id_tbl => l_prc_ra_id_tbl,
11295 p_spread_curve_id_tbl => l_spread_curve_id_tbl,
11296 p_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl,
11297 p_etc_method_code_tbl => l_etc_method_code_tbl,
11298 p_sp_fixed_date_tbl => l_sp_fixed_date_tbl,
11299 p_res_class_code_tbl => l_prc_res_class_code_tbl,
11300 p_rate_based_flag_tbl => l_prc_rate_based_flag_tbl,
11301 p_rbs_elem_id_tbl => l_prc_rbs_elem_id_tbl,
11302 p_txn_currency_code_tbl => l_txn_currency_code_tbl,
11303 p_planning_start_date_tbl => l_planning_start_date_tbl,
11304 p_planning_end_date_tbl => l_planning_end_date_tbl,
11305 p_total_qty_tbl => l_total_qty_tbl,
11306 p_total_raw_cost_tbl => l_total_raw_cost_tbl,
11307 p_total_burdened_cost_tbl => l_total_burdened_cost_tbl,
11308 p_total_revenue_tbl => l_total_revenue_tbl,
11309 p_raw_cost_rate_tbl => l_raw_cost_rate_tbl,
11310 p_burdened_cost_rate_tbl => l_burdened_cost_rate_tbl,
11311 p_bill_rate_tbl => l_bill_rate_tbl,
11312 p_line_start_date_tbl => l_line_start_date_tbl,
11313 p_line_end_date_tbl => l_line_end_date_tbl,
11314 p_proj_cost_rate_type_tbl => l_proj_cost_rate_type_tbl,
11315 p_proj_cost_rate_date_type_tbl => l_proj_cost_rate_date_type_tbl,
11316 p_proj_cost_rate_tbl => l_proj_cost_rate_tbl,
11317 p_proj_cost_rate_date_tbl => l_proj_cost_rate_date_tbl,
11318 p_proj_rev_rate_type_tbl => l_proj_rev_rate_type_tbl,
11319 p_proj_rev_rate_date_type_tbl => l_proj_rev_rate_date_type_tbl,
11320 p_proj_rev_rate_tbl => l_proj_rev_rate_tbl,
11321 p_proj_rev_rate_date_tbl => l_proj_rev_rate_date_tbl,
11322 p_pfunc_cost_rate_type_tbl => l_pfunc_cost_rate_type_tbl,
11323 p_pfunc_cost_rate_date_typ_tbl => l_pfunc_cost_rate_date_typ_tbl,
11324 p_pfunc_cost_rate_tbl => l_pfunc_cost_rate_tbl,
11325 p_pfunc_cost_rate_date_tbl => l_pfunc_cost_rate_date_tbl,
11326 p_pfunc_rev_rate_type_tbl => l_pfunc_rev_rate_type_tbl,
11327 p_pfunc_rev_rate_date_type_tbl => l_pfunc_rev_rate_date_type_tbl,
11328 p_pfunc_rev_rate_tbl => l_pfunc_rev_rate_tbl,
11329 p_pfunc_rev_rate_date_tbl => l_pfunc_rev_rate_date_tbl,
11330 p_change_reason_code_tbl => l_change_reason_code_tbl,
11331 p_description_tbl => l_description_tbl,
11332 p_delete_flag_tbl => l_delete_flag_tbl,
11333 x_return_status => x_return_status,
11334 x_msg_count => l_msg_count,
11335 x_msg_data => l_msg_data);
11336 --log1('9 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11337 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11338 IF l_debug_mode = 'Y' THEN
11339 pa_debug.g_err_stage := 'Call to process_budget_lines returned with error';
11340 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11341 END IF;
11342 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11343 END IF;
11344 -- Bug 4431269: Clearing the global variables used in calculate api
11345 -- for error reporting purpose
11346 G_FP_WA_CALC_CALLING_CONTEXT := null;
11347
11348 IF l_debug_mode = 'Y' THEN
11349 pa_debug.g_err_stage := 'Call to process_budget_lines done';
11350 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11351 END IF;
11352 --log1('10 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11353 -- if the submit flag is passed as Y, then calling api to submit the version
11354 IF p_submit_budget_flag = 'Y' OR
11355 p_submit_forecast_flag = 'Y' THEN
11356 IF l_debug_mode = 'Y' THEN
11357 pa_debug.g_err_stage := 'Calling pa_fin_plan_pub.Submit_Current_Working';
11358 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11359 END IF;
11360 pa_fin_plan_pub.Submit_Current_Working
11361 (p_project_id => l_version_info_rec.x_project_id,
11362 p_budget_version_id => l_budget_version_id,
11363 p_record_version_number => l_rec_version_number,
11364 x_return_status => x_return_status,
11365 x_msg_count => l_msg_count,
11366 x_msg_data => l_msg_data);
11367
11368 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11369 IF l_debug_mode = 'Y' THEN
11370 pa_debug.g_err_stage := 'Call to pa_fin_plan_pub.Submit_Current_Working returned with error';
11371 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11372 END IF;
11373 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11374 END IF;
11375 END IF;
11376 --log1('11 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11377 --log1('----- STAGE 13-------');
11378 -- If upload is successful then delete all the records
11379 -- from interface table
11380 IF l_debug_mode = 'Y' THEN
11381 pa_debug.g_err_stage := 'deleting from upload temp table';
11382 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
11383 END IF;
11384 --log1('12 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11385
11386 pa_fp_webadi_pkg.DELETE_XFACE
11387 ( p_run_id => p_run_id
11388 ,x_return_status => x_return_status
11389 ,x_msg_count => x_msg_count
11390 ,x_msg_data => l_msg_data --x_msg_data Bug 2764950
11391 ) ;
11392 --log1('13 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11393 COMMIT; /* to commit the data in DB after successful processing */
11394 --log1('14 '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11395 --log1('----- STAGE 14-------');
11396 IF l_debug_mode = 'Y' THEN
11397 pa_debug.g_err_stage := 'Leaving pa_fp_webadi_pkg.switcher';
11398 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11399 pa_debug.reset_curr_function;
11400 END IF;
11401
11402 --log1('----- Leaving Switcher api ------- '||x_return_status);
11403 --log1('End '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS'));
11404 EXCEPTION
11405
11406 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11407 IF l_debug_mode = 'Y' THEN
11408 pa_debug.g_err_stage := 'Invalid Arg Exception Raised in Switcher';
11409 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11410 pa_debug.g_err_stage := 'Checking for errors';
11411 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11412 END IF;
11413
11414 -- Bug 4431269: Clearing the global variables used in calculate api
11415 -- for error reporting purpose
11416 G_FP_WA_CALC_CALLING_CONTEXT := null;
11417 IF l_rollback_flag='Y' THEN
11418 IF l_debug_mode = 'Y' THEN
11419 pa_debug.g_err_stage := 'Rolling back to switcher';
11420 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11421 END IF;
11422 ROLLBACK TO SWITCHER;
11423 IF l_debug_mode = 'Y' THEN
11424 pa_debug.g_err_stage := 'Roll back to switcher done';
11425 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
11426 END IF;
11427 END IF;
11428
11429 -- checking if calculate has populated any errors in the global table
11430 IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
11431 -- calling an api to process the errors passed
11432 read_global_var_to_report_err
11433 (p_run_id => p_run_id,
11434 x_return_status => x_return_status,
11435 x_msg_count => l_msg_count,
11436 x_msg_data => l_msg_data);
11437 END IF;
11438
11439 IF l_set_ppc_flag_on_err ='Y' THEN
11440 update_xl_data_for_new_req
11441 (p_request_id => l_request_id,
11442 p_run_id => p_run_id,
11443 p_plan_processing_code => 'XLUE',
11444 p_budget_version_id => l_budget_version_id,
11445 p_null_out_cols => 'N');
11446
11447 END IF;
11448
11449 COMMIT;
11450
11451 l_msg_count := FND_MSG_PUB.count_msg;
11452
11453 IF l_msg_count = 1 and x_msg_data IS NULL THEN
11454 PA_INTERFACE_UTILS_PUB.get_messages
11455 (p_encoded => FND_API.G_TRUE
11456 ,p_msg_index => 1
11457 ,p_msg_count => l_msg_count
11458 ,p_msg_data => l_msg_data
11459 ,p_data => l_data
11460 ,p_msg_index_out => l_msg_index_out);
11461 x_msg_data := l_data;
11462 x_msg_count := l_msg_count;
11463 x_success_msg:=l_data;
11464 ELSE
11465 x_msg_count := l_msg_count;
11466 x_success_msg :='Error In Upload';
11467 END IF;
11468
11469 x_return_status := FND_API.G_RET_STS_ERROR;
11470
11471 IF l_debug_mode = 'Y' THEN
11472 pa_debug.reset_curr_function;
11473 END IF;
11474 RETURN;
11475
11476 WHEN OTHERS THEN
11477 -- Bug 4431269: Clearing the global variables used in calculate api
11478 -- for error reporting purpose
11479 G_FP_WA_CALC_CALLING_CONTEXT := null;
11480
11481 IF l_rollback_flag='Y' THEN
11482 ROLLBACK TO SWITCHER;
11483 END IF;
11484 x_success_msg :='Error In Upload';
11485
11486 -- checking if calculate has populated any errors in the global table
11487 IF g_fp_webadi_rec_tbl.COUNT > 0 THEN
11488 -- calling an api to process the errors passed
11489 read_global_var_to_report_err
11490 (p_run_id => p_run_id,
11491 x_return_status => x_return_status,
11492 x_msg_count => l_msg_count,
11493 x_msg_data => l_msg_data);
11494 END IF;
11495
11496 IF l_set_ppc_flag_on_err ='Y' THEN
11497 update_xl_data_for_new_req
11498 (p_request_id => l_request_id,
11499 p_run_id => p_run_id,
11500 p_plan_processing_code => 'XLUE',
11501 p_budget_version_id => l_budget_version_id,
11502 p_null_out_cols => 'N');
11503
11504 END IF;
11505 COMMIT;
11506 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11507 x_msg_count := 1;
11508 x_msg_data := SQLERRM;
11509
11510 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
11511 ,p_procedure_name => 'switcher');
11512 IF l_debug_mode = 'Y' THEN
11513 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
11514 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
11515 END IF;
11516
11517 IF l_debug_mode = 'Y' THEN
11518 pa_debug.reset_curr_function;
11519 END IF;
11520 RAISE;
11521
11522 END switcher;
11523
11524 --This API will be called when thru the concurrent request that will be used to upload MS excel data to
11525 --Oracle Applications.
11526 PROCEDURE process_MSExcel_data
11527 (errbuf OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
11528 retcode OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
11529 p_submit_ver_flag IN VARCHAR2,
11530 p_run_id IN pa_fp_webadi_upload_inf.run_id%TYPE)
11531 IS
11532 --Start of variables used for debugging
11533 l_return_status VARCHAR2(1);
11534 l_msg_count NUMBER := 0;
11535 l_msg_data VARCHAR2(2000);
11536 l_data VARCHAR2(2000);
11537 l_msg_index_out NUMBER;
11538 l_debug_mode VARCHAR2(30);
11539 l_module_name VARCHAR2(100):='PAFPWAPB.process_MSExcel_data';
11540
11541 --End of variables used for debugging
11542 l_budget_version_id pa_budget_versions.budget_version_id%TYPE;
11543 l_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE;
11544 l_request_id pa_budget_versions.request_id%TYPE;
11545 l_submit_bdgt_flag VARCHAR2(1);
11546 l_submit_fcst_flag VARCHAR2(1);
11547 l_version_type pa_budget_versions.version_type%TYPE;
11548 l_success_msg VARCHAR2(1000);
11549
11550 -- the following cursor would query the interface table for any validation failure
11551 -- error messages present in the interface table corresponding to a set of run_id
11552 -- for the upload session.
11553
11554 CURSOR l_get_error_msg_to_report_csr (c_run_id pa_fp_webadi_upload_inf.run_id%TYPE,
11555 c_plan_class pa_fin_plan_types_b.plan_class_code%TYPE,
11556 c_version_type pa_budget_versions.version_type%TYPE,
11557 c_request_id pa_budget_versions.request_id%TYPE)
11558 IS
11559 -- 4497321.Perf Fix:Modified SELECT query inorder to improve the performance.
11560 SELECT inf.task_number || '/' || inf.task_name task_info,
11561 inf.resource_alias resource_info,
11562 inf.txn_currency_code currency,
11563 plu1.meaning amount_type,
11564 plu2.meaning error
11565 FROM pa_fp_webadi_upload_inf inf,
11566 pa_lookups plu1,
11567 pa_lookups plu2
11568 WHERE inf.run_id = c_run_id
11569 AND Nvl(inf.val_error_flag, 'N') = 'Y'
11570 AND inf.val_error_code IS NOT NULL
11571 AND plu1.lookup_type = DECODE (c_plan_class, 'BUDGET',
11572 DECODE(c_version_type,
11573 'COST', 'PA_FP_XL_COST_BDGT_AMT_TYPES',
11574 'REVENUE', 'PA_FP_XL_REV_BDGT_AMT_TYPES',
11575 'PA_FP_XL_ALL_BDGT_AMT_TYPES'),
11576 'FORECAST', DECODE(c_version_type,
11577 'COST', 'PA_FP_XL_COST_FCST_AMT_TYPES',
11578 'REVENUE', 'PA_FP_XL_REV_FCST_AMT_TYPES',
11579 'PA_FP_XL_ALL_FCST_AMT_TYPES'))
11580 AND (inf.amount_type_code IS NULL OR plu1.lookup_code = Nvl(inf.amount_type_code, '-99'))
11581 AND plu2.lookup_type = 'PA_FP_WEBADI_ERR_1'
11582 AND inf.val_error_code = plu2.lookup_code
11583 AND Nvl(c_request_id, -99) = Nvl(inf.request_id, -99);
11584
11585 l_error_info_rec l_get_error_msg_to_report_csr%ROWTYPE;
11586
11587 BEGIN
11588 -- SAVEPOINT process_MSExcel_data;
11589 retcode:='0';
11590 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
11591 l_debug_mode := NVL(l_debug_mode, 'Y');
11592 --log1('----- STAGE CR1-------');
11593 -- Set curr function
11594 IF l_debug_mode='Y' THEN
11595 pa_debug.set_curr_function(
11596 p_function =>'PAFPWAPB.process_MSExcel_data'
11597 ,p_debug_mode => l_debug_mode );
11598 END IF;
11599
11600 l_request_id:=fnd_global.conc_request_id;
11601 --log1('----- STAGE CR2-------');
11602 --log1('----- p_run_id------' || p_run_id);
11603 --log1('----- p_submit_ver_flag------' || p_submit_ver_flag);
11604 --Get the budget version id from the interface table to find out whether the budget version belongs to a
11605 --BUDGET plan type or FORECAST plan type
11606
11607 -- 4497323.Perf Fix:The SELECT query is splitted into two queries in order to improve performance.
11608 SELECT budget_version_id
11609 INTO l_budget_version_id
11610 FROM pa_fp_webadi_upload_inf inf
11611 WHERE inf.run_id = p_run_id
11612 AND Nvl(l_request_id,-99) = Nvl(request_id,-99)
11613 AND rownum=1;
11614
11615 SELECT fin.plan_class_code,
11616 pbv.version_type
11617 INTO l_plan_class_code,
11618 l_version_type
11619 FROM pa_budget_versions pbv,
11620 pa_fin_plan_types_b fin
11621 WHERE pbv.budget_version_id = l_budget_version_id
11622 AND fin.fin_plan_type_id = pbv.fin_plan_type_id;
11623
11624 --log1('----- STAGE CR3-------');
11625 IF l_debug_mode='Y' THEN
11626 pa_debug.g_err_stage:='l_request_id '||l_request_id;
11627 pa_debug.write( l_module_name,pa_debug.g_err_stage,3);
11628
11629 pa_debug.g_err_stage:='Callng update_xl_data_for_new_req';
11630 pa_debug.write( l_module_name,pa_debug.g_err_stage,3);
11631
11632 END IF;
11633 --log1('----- STAGE CR4-------');
11634 update_xl_data_for_new_req
11635 (p_request_id => l_request_id,
11636 p_run_id => p_run_id,
11637 p_plan_processing_code => 'XLUP',
11638 p_budget_version_id => l_budget_version_id,
11639 p_null_out_cols => 'Y');
11640 --log1('----- STAGE CR5-------');
11641 COMMIT;--This is done so that the users can find that the concurrent request is in progress from the other
11642 --interfaces.
11643 --log1('----- STAGE CR6-------');
11644 l_submit_bdgt_flag:='N';
11645 l_submit_fcst_flag:='N';
11646 IF l_plan_class_code='BUDGET' THEN
11647
11648 l_submit_bdgt_flag:=p_submit_ver_flag;
11649 ELSE
11650 l_submit_fcst_flag:=p_submit_ver_flag;
11651 END IF;
11652 --log1('----- STAGE CR7-------');
11653 pa_fp_webadi_pkg.switcher
11654 (p_calling_mode => 'ONLINE',
11655 p_run_id => p_run_id,
11656 p_submit_budget_flag => l_submit_bdgt_flag,
11657 p_submit_forecast_flag => l_submit_fcst_flag,
11658 p_request_id => l_request_id,
11659 x_success_msg => l_success_msg,
11660 x_return_status => l_return_status,
11661 x_msg_count => l_msg_count,
11662 x_msg_data => l_msg_data);
11663 --log1('----- STAGE CR8-------');
11664 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11665 --log1('----- STAGE CR9-------');
11666 IF l_debug_mode = 'Y' THEN
11667 pa_debug.g_err_stage:='pa_fp_webadi_pkg.switcher returned error';
11668 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11669 END IF;
11670 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11671 END IF;
11672
11673 -- upon successful completion of the concurrent processing,
11674 -- stamp success code in pa_budget_versions and retain the request_id
11675 UPDATE pa_budget_versions
11676 SET plan_processing_code = 'XLUS',
11677 record_version_number = (record_version_number + 1)
11678 WHERE budget_version_id = l_budget_version_id;
11679
11680 COMMIT; -- is required to query the interface table from conc prog.
11681 --log1('----- STAGE 10-------');
11682 IF l_debug_mode = 'Y' THEN
11683 pa_debug.reset_curr_function;
11684 END IF;
11685
11686 EXCEPTION
11687 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11688 -- ROLLBACK TO process_MSExcel_data;
11689 -- bug 4477397: doing a general rollback instead to savepoint
11690 ROLLBACK;
11691 l_msg_count := FND_MSG_PUB.count_msg;
11692 IF l_msg_count = 1 THEN
11693 PA_INTERFACE_UTILS_PUB.get_messages
11694 (p_encoded => FND_API.G_TRUE
11695 ,p_msg_index => 1
11696 ,p_msg_count => l_msg_count
11697 ,p_msg_data => l_msg_data
11698 ,p_data => l_data
11699 ,p_msg_index_out => l_msg_index_out);
11700
11701 errbuf := l_data;
11702
11703 END IF;
11704 retcode := '2'; --Changed this to '2' for bug #4504482
11705 --log1('----- STAGE CR10-------');
11706 -- preparing an output error log to display all the validation failures, if any,
11707 -- corresponding to a particular record in the interface table
11708 IF l_debug_mode = 'Y' THEN
11709 --Before calling pa_debug.write_file we shd call pa_debug.set_process if we want write_file to write to the log file.
11710 pa_debug.set_process( x_process => 'PLSQL'
11711 ,x_write_file => 'LOG'
11712 ,x_debug_mode => l_debug_mode
11713 );
11714 pa_debug.g_err_stage := '- Task Number/Task Name, Resource, Currency, Amount Type, Error - ';
11715 pa_debug.write_file('LOG', pa_debug.g_err_stage);
11716 pa_debug.g_err_stage := '------------------------------------------------------------------';
11717 pa_debug.write_file('LOG', pa_debug.g_err_stage);
11718
11719 OPEN l_get_error_msg_to_report_csr(p_run_id, l_plan_class_code, l_version_type, l_request_id);
11720 LOOP
11721 FETCH l_get_error_msg_to_report_csr
11722 INTO l_error_info_rec;
11723
11724 --EXIT WHEN l_error_info_rec.task_info IS NULL; --Bug 8839857
11725 EXIT when l_get_error_msg_to_report_csr%NOTFOUND; --Bug 8839857
11726
11727 pa_debug.g_err_stage := l_error_info_rec.task_info || ', ' || l_error_info_rec.resource_info || ', ' ||
11728 l_error_info_rec.currency || ', ' || l_error_info_rec.amount_type || ', ' ||
11729 l_error_info_rec.error;
11730 pa_debug.write_file('LOG', pa_debug.g_err_stage);
11731 END LOOP;
11732 CLOSE l_get_error_msg_to_report_csr;
11733
11734 --Bug 4504482: Added code to read the msg stack and populate the concurrent
11735 --program log in addition to the interface table.
11736 pa_debug.g_err_stage := '-----------------Additional Errors--------------------------------';
11737 pa_debug.write_file('LOG', pa_debug.g_err_stage);
11738 FOR msg_count IN 1 .. l_msg_count
11739 LOOP
11740 PA_UTILS.Get_Encoded_Msg(p_index => msg_count,
11741 p_msg_out => l_data);
11742 pa_debug.g_err_stage := l_data;
11743 pa_debug.write_file('LOG', pa_debug.g_err_stage);
11744 END LOOP;
11745
11746 END IF;
11747
11748 IF l_debug_mode = 'Y' THEN
11749 pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
11750 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11751 -- reset curr function
11752 pa_debug.reset_curr_function();
11753 END IF;
11754 --log1('----- STAGE CR11-------');
11755 update_xl_data_for_new_req
11756 (p_request_id => l_request_id,
11757 p_run_id => p_run_id,
11758 p_plan_processing_code => 'XLUE',
11759 p_budget_version_id => l_budget_version_id,
11760 p_null_out_cols => 'N');
11761 --log1('----- STAGE CR12-------');
11762 COMMIT;
11763 --log1('----- STAGE CR13-------');
11764 RETURN;
11765 WHEN OTHERS THEN
11766 -- ROLLBACK TO process_MSExcel_data;
11767 -- bug 4477397: doing a general rollback instead to savepoint
11768 ROLLBACK;
11769 errbuf := SQLERRM;
11770
11771 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
11772 ,p_procedure_name => 'process_MSExcel_data');
11773
11774 IF l_debug_mode = 'Y' THEN
11775 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
11776 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11777 -- reset curr function
11778 pa_debug.Reset_Curr_Function();
11779 END IF;
11780 retcode := '2';
11781
11782 update_xl_data_for_new_req
11783 (p_request_id => l_request_id,
11784 p_run_id => p_run_id,
11785 p_plan_processing_code => 'XLUE',
11786 p_budget_version_id => l_budget_version_id,
11787 p_null_out_cols => 'N');
11788
11789 COMMIT;
11790 RAISE;
11791 END process_MSExcel_data;
11792
11793
11794 --Bug 4584865
11795 /*This api is a private api which is called to calculate the Group Period information
11796 of the budget version based on the period mask of the budget version.The calculated
11797 Group Periods are stored in the OUT parameter x_periods_tbl.*/
11798
11799 PROCEDURE GET_PERIOD_INFORMATION(p_period_mask_id IN pa_proj_fp_options.cost_period_mask_id%TYPE,
11800 p_time_phased_code IN pa_proj_fp_options.cost_time_phased_code%TYPE,
11801 p_org_id IN pa_projects_all.org_id%TYPE,
11802 p_current_planning_period IN pa_proj_fp_options.cost_current_planning_period%TYPE,
11803 x_periods_tbl OUT NOCOPY periods_tbl,
11804 x_return_status OUT NOCOPY VARCHAR2,
11805 x_msg_count OUT NOCOPY NUMBER,
11806 x_msg_data OUT NOCOPY NUMBER)
11807 IS
11808 --This Cursor is used to get Period Mask informations of the Period Mask associated with the budget version.
11809 CURSOR period_mask_cur(c_period_mask_id pa_period_mask_details.period_mask_id%TYPE)
11810 IS
11811 SELECT pmd.period_mask_id,
11812 pmd.num_of_periods,
11813 pmd.anchor_period_flag,
11814 pmd.from_anchor_start,
11815 pmd.from_anchor_end,
11816 pmd.from_anchor_position
11817 FROM pa_period_mask_details pmd
11818 WHERE pmd.period_mask_id = c_period_mask_id
11819 AND pmd.from_anchor_position not in(-99999,99999)
11820 ORDER BY pmd.from_anchor_position;
11821 --PL/SQL table created based on Cursor period_mask_cur.
11822 TYPE period_mask_tbl IS TABLE OF period_mask_cur%ROWTYPE;
11823
11824 CURSOR pa_impl_cur(c_org_id pa_implementations_all.org_id%TYPE)
11825 IS
11826 SELECT org_id,
11827 period_set_name,
11828 pa_period_type,
11829 set_of_books_id
11830 FROM pa_implementations_all
11831 WHERE org_id = c_org_id;
11832
11833 --This Cursor is used to get period information based on the Time Phasing of the budget version.
11834 CURSOR period_grouping_cur(c_period_set_name gl_periods.period_set_name%TYPE,
11835 c_set_of_books_id gl_sets_of_books.set_of_books_id%TYPE,
11836 c_org_id pa_implementations_all.org_id%TYPE,
11837 c_pa_period_type pa_implementations_all.pa_period_type%TYPE,
11838 c_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE)
11839 IS
11840 SELECT ROW_NUMBER() OVER( PARTITION BY gl.period_set_name,gl.period_type ORDER BY gl.start_date ) row_num,
11841 gl.start_date start_date,
11842 gl.end_Date end_date,
11843 gl.period_name period_name,
11844 gl.period_type period_type,
11845 gl.period_set_name period_set_name,
11846 gsb.accounted_period_type accounted_period_type,
11847 c_org_id
11848 FROM gl_periods gl,
11849 gl_sets_of_books gsb
11850 WHERE gl.period_set_name=decode(c_time_phased_code,'P',c_period_set_name,'G',gsb.period_set_name)
11851 AND gsb.set_of_books_id=c_set_of_books_id
11852 AND gl.ADJUSTMENT_PERIOD_FLAG ='N'
11853 AND gl.period_type = decode(c_time_phased_code,'P',c_pa_period_type,
11854 'G',gsb.accounted_period_type);
11855 --PL/SQL table created based on Cursor period_grouping_cur.
11856 TYPE period_grouping_tbl IS TABLE OF period_grouping_cur%ROWTYPE
11857 INDEX BY PLS_INTEGER;
11858
11859 l_debug_mode VARCHAR2(1);
11860 l_return_status VARCHAR2(1);
11861 l_data VARCHAR2(2000);
11862 l_msg_count NUMBER := 0;
11863 l_msg_data VARCHAR2(2000);
11864 l_msg_index_out NUMBER;
11865 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.get_period_information';
11866 l_period_mask_tbl period_mask_tbl;
11867 l_pa_impl_rec pa_impl_cur%ROWTYPE;
11868 l_period_grouping_tbl period_grouping_tbl;
11869 l_periods_rec periods_rec;
11870 glcp_rownum NUMBER;
11871 glsd_rownum NUMBER;
11872 gled_rownum NUMBER;
11873 period_name VARCHAR2(50); --gl_periods.period_name%TYPE;
11874 start_date gl_periods.start_date%TYPE;
11875 end_date gl_periods.end_date%TYPE;
11876 x NUMBER := 1;
11877 BEGIN
11878 x_msg_count := 0;
11879 x_return_status := FND_API.G_RET_STS_SUCCESS;
11880 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'Y');
11881
11882 IF l_debug_mode = 'Y' THEN
11883 pa_debug.set_curr_function(p_function => 'GET_PERIOD_INFORMATION',
11884 p_debug_mode => l_debug_mode);
11885 pa_debug.g_err_stage := ':In pa_fp_webadi_pkg.GET_PERIOD_INFORMATION';
11886 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11887 END IF;
11888 --Validation is done for the input parameters.
11889 IF l_debug_mode = 'Y' THEN
11890 pa_debug.g_err_stage := 'Validating Input parameters';
11891 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11892 END IF;
11893
11894 IF p_period_mask_id IS NULL THEN
11895 IF l_debug_mode = 'Y' THEN
11896 pa_debug.g_err_stage := 'p_period_mask_id is passed as null';
11897 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11898 END IF;
11899 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11900 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
11901 p_token1 => 'PROCEDURENAME',
11902 p_value1 => l_module_name);
11903 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11904 END IF;
11905
11906 IF p_time_phased_code IS NULL THEN
11907 IF l_debug_mode = 'Y' THEN
11908 pa_debug.g_err_stage := 'p_time_phased_code is passed as null';
11909 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11910 END IF;
11911 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11912 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
11913 p_token1 => 'PROCEDURENAME',
11914 p_value1 => l_module_name);
11915 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11916 END IF;
11917
11918 IF p_org_id IS NULL THEN
11919 IF l_debug_mode = 'Y' THEN
11920 pa_debug.g_err_stage := 'p_org_id is passed as null';
11921 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11922 END IF;
11923 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11924 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
11925 p_token1 => 'PROCEDURENAME',
11926 p_value1 => l_module_name);
11927 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11928 END IF;
11929
11930 IF p_current_planning_period IS NULL THEN
11931 IF l_debug_mode = 'Y' THEN
11932 pa_debug.g_err_stage := 'p_current_planning_period is passed as null';
11933 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11934 END IF;
11935 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11936 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
11937 p_token1 => 'PROCEDURENAME',
11938 p_value1 => l_module_name);
11939 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11940 END IF;
11941 --Initializing the out parameter which is pl/sql table.
11942 x_periods_tbl := periods_tbl();
11943
11944 --Getting the Period Mask details of the period mask associated with the budget version.
11945 OPEN period_mask_cur(p_period_mask_id);
11946 FETCH period_mask_cur BULK COLLECT INTO l_period_mask_tbl;
11947 CLOSE period_mask_cur;
11948 IF l_period_mask_tbl.count = 0 THEN
11949 IF l_debug_mode = 'Y' THEN
11950 pa_debug.g_err_stage := 'Period Mask Details not found for the budget version';
11951 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11952 END IF;
11953 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11954 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
11955 p_token1 => 'PROCEDURENAME',
11956 p_value1 => l_module_name);
11957 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11958 END IF;
11959
11960 --Information are got from pa_implentations_all table for the project org_id and stored in a pl/sql record.
11961 OPEN pa_impl_cur(p_org_id);
11962 FETCH pa_impl_cur INTO l_pa_impl_rec;
11963 CLOSE pa_impl_cur;
11964
11965 --Period Informations are got from gl_periods table and stored in a pl/sql table.
11966 FOR rec in period_grouping_cur(l_pa_impl_rec.period_set_name,
11967 l_pa_impl_rec.set_of_books_id,
11968 l_pa_impl_rec.org_id,
11969 l_pa_impl_rec.pa_period_type,
11970 p_time_phased_code)
11971 LOOP
11972 l_period_grouping_tbl(rec.row_num) := rec;
11973 END LOOP;
11974
11975 --Getting the row number of the Current Planning period from the pl/sql table l_period_grouping_tbl.
11976 IF l_period_grouping_tbl.count >0 THEN
11977 FOR n IN l_period_grouping_tbl.first..l_period_grouping_tbl.last
11978 LOOP
11979 IF l_period_grouping_tbl(n).period_name = p_current_planning_period THEN
11980 glcp_rownum := l_period_grouping_tbl(n).row_num;
11981 EXIT;
11982 END IF;
11983 END LOOP;
11984 ELSE
11985 IF l_debug_mode = 'Y' THEN
11986 pa_debug.g_err_stage := 'Period information not found for the budget version';
11987 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
11988 END IF;
11989 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11990 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
11991 p_token1 => 'PROCEDURENAME',
11992 p_value1 => l_module_name);
11993 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11994 END IF;
11995
11996 --The Group Period informations are got and stored in a pl/sql table based on the Period Mask.
11997 FOR i IN l_period_mask_tbl.first..l_period_mask_tbl.last
11998 LOOP
11999 glsd_rownum := l_period_mask_tbl(i).from_anchor_start+glcp_rownum;
12000 gled_rownum := l_period_mask_tbl(i).from_anchor_end+glcp_rownum;
12001 IF glsd_rownum >= l_period_grouping_tbl.first AND gled_rownum <= l_period_grouping_tbl.last THEN
12002 IF glsd_rownum = gled_rownum THEN
12003 period_name := l_period_grouping_tbl(glsd_rownum).period_name;
12004 ELSE
12005 period_name := l_period_grouping_tbl(glsd_rownum).period_name||' To '||l_period_grouping_tbl(gled_rownum).period_name;
12006 END IF;
12007 start_date := l_period_grouping_tbl(glsd_rownum).start_date;
12008 end_date := l_period_grouping_tbl(gled_rownum).end_date;
12009 l_periods_rec.sequence_number := x;
12010 l_periods_rec.period_name := period_name;
12011 l_periods_rec.start_date := start_date;
12012 l_periods_rec.end_date := end_date;
12013 x_periods_tbl.extend();
12014 x_periods_tbl(x) := l_periods_rec;
12015 x := x+1;
12016 ELSE
12017 NULL;
12018 END IF;
12019 END LOOP;
12020
12021 EXCEPTION
12022 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12023 l_msg_count := FND_MSG_PUB.count_msg;
12024 IF l_msg_count = 1 AND x_msg_data IS NULL THEN
12025 PA_INTERFACE_UTILS_PUB.get_messages
12026 (p_encoded => FND_API.G_TRUE
12027 ,p_msg_index => 1
12028 ,p_msg_count => l_msg_count
12029 ,p_msg_data => l_msg_data
12030 ,p_data => l_data
12031 ,p_msg_index_out => l_msg_index_out);
12032 x_msg_data := l_data;
12033 x_msg_count := l_msg_count;
12034 ELSE
12035 x_msg_count := l_msg_count;
12036 END IF;
12037 x_return_status := FND_API.G_RET_STS_ERROR;
12038 IF l_debug_mode = 'Y' THEN
12039 pa_debug.reset_curr_function;
12040 END IF;
12041 RETURN;
12042
12043 WHEN OTHERS THEN
12044 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12045 x_msg_count := 1;
12046 x_msg_data := SQLERRM;
12047 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
12048 ,p_procedure_name => 'get_period_information');
12049 IF l_debug_mode = 'Y' THEN
12050 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
12051 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12052 pa_debug.reset_curr_function;
12053 END IF;
12054 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12055 END GET_PERIOD_INFORMATION;
12056
12057 --Bug 4584865.
12058 --This API is called to insert records into pa_fp_webadi_xface_tmp
12059 --during downloading budget line details into excel spreadsheet.
12060
12061 PROCEDURE insert_periodic_tmp_table
12062 (p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE
12063 ,x_return_status OUT NOCOPY VARCHAR2
12064 ,x_msg_count OUT NOCOPY NUMBER
12065 ,x_msg_data OUT NOCOPY VARCHAR2 )
12066 IS
12067 /* Bug 5144013: Changes are made in the cursor to make use of the new entity pa_resource_asgn_curr
12068 which is introduced in MRUP3 of 11i. The changes are done as part of merging the MRUP3 changes
12069 done in 11i into R12.
12070 */
12071 --This Cursor is used to get Resource Assignment information associated with the budget version.
12072 CURSOR res_ass_cur(c_budget_version_id pa_budget_versions.budget_version_id%TYPE,
12073 c_project_id pa_projects_all.project_id%TYPE,
12074 c_parent_structure_version_id pa_proj_element_versions.parent_structure_version_id%TYPE,
12075 c_proj_fp_options_id pa_proj_fp_options.proj_fp_options_id%TYPE)
12076 IS
12077 SELECT pra.resource_assignment_id resource_assignment_id,
12078 nvl(pe.name,ppa.long_name) task_name,
12079 nvl(pe.element_number,ppa.segment1) task_number,
12080 nvl(pev.display_sequence,-1) task_display_sequence,
12081 prlm.alias resource_name,
12082 pra.resource_list_member_id,
12083 uom.meaning unit_of_measure,
12084 pra.spread_curve_id spread_curve_id,
12085 psc.name spread_curve,
12086 pra.planning_start_date,
12087 pra.planning_end_date,
12088 pra.mfc_cost_type_id mfc_cost_type_id,
12089 cct.cost_type mfc_cost_type,
12090 pra.etc_method_code etc_method_code,
12091 etc.meaning etc_method,
12092 pev.proj_element_id project_element_id,
12093 decode(pra.transaction_source_code,NULL,NULL,
12094 (SELECT meaning
12095 FROM PA_LOOKUPS
12096 WHERE LOOKUP_TYPE='PA_FP_FCST_GEN_SRC_ALL'
12097 AND LOOKUP_CODE= nvl(pra.transaction_source_code, (
12098 SELECT lookup_code
12099 FROM pa_lookups
12100 WHERE lookup_type='PA_FP_FCST_GEN_SRC_ALL'
12101 AND rownum=1)))) etc_source,
12102 pftc.txn_currency_code txn_currency_code,
12103 pftc.project_cost_exchange_rate project_cost_exchange_rate,
12104 pftc.project_rev_exchange_rate project_rev_exchange_rate,
12105 pftc.projfunc_cost_exchange_rate projfunc_cost_exchange_rate,
12106 pftc.projfunc_rev_exchange_rate projfunc_rev_exchange_rate,
12107 (select COST_CODE from pa_rbs_elements where RBS_ELEMENT_ID = pra.cbs_element_id) cost_code, -- cbs enhancement changes bug#16445106
12108 (select COST_CODE_NAME from pa_rbs_elements where RBS_ELEMENT_ID = pra.cbs_element_id) cost_code_name -- cbs enhancement changes bug#16445106
12109 FROM pa_resource_assignments pra,
12110 pa_resource_asgn_curr prac,
12111 pa_fp_txn_currencies pftc,
12112 pa_proj_elements pe,
12113 pa_proj_element_versions pev,
12114 pa_resource_list_members prlm,
12115 pa_lookups uom,
12116 pa_spread_curves_tl psc,
12117 cst_cost_types cct,
12118 pa_lookups etc,
12119 pa_projects_all ppa
12120 WHERE pra.budget_version_id = c_budget_version_id
12121 AND prac.budget_version_id = pra.budget_version_id
12122 AND prac.resource_assignment_id = pra.resource_assignment_id
12123 AND pftc.fin_plan_version_id = prac.budget_version_id
12124 AND pftc.txn_currency_code = prac.txn_currency_code
12125 AND pftc.proj_fp_options_id = c_proj_fp_options_id
12126 AND pra.resource_list_member_id = prlm.resource_list_member_id
12127 AND decode(pra.task_id,0,pev.proj_element_id,pra.task_id)=pev.proj_element_id
12128 AND decode(pra.task_id,0,pev.parent_structure_version_id,pev.element_version_id)=pev.element_version_id
12129 AND pev.proj_element_id = pe.proj_element_id(+)
12130 AND pe.object_type(+)='PA_TASKS'
12131 AND pev.parent_structure_version_id = c_parent_structure_version_id
12132 AND nvl(pra.spread_curve_id,1) = psc.spread_curve_id
12133 AND etc.lookup_type = 'PA_FP_ETC_METHOD'
12134 AND etc.lookup_code(+) = pra.etc_method_code
12135 AND cct.cost_type_id(+) = pra.mfc_cost_type_id
12136 AND uom.lookup_type = 'UNIT'
12137 AND uom.LOOKUP_CODE = nvl(prlm.UNIT_OF_MEASURE,'HOURS')
12138 AND psc.language = userenv('LANG')
12139 AND ppa.project_id = c_project_id
12140 ORDER BY task_display_sequence;
12141 --PL/SQL table created based on Cursor res_ass_cur.
12142 TYPE res_ass_tbl IS TABLE OF res_ass_cur%ROWTYPE; --Bug 5641300: Converted the index by pl/sql table to ordinary pl/sql table.
12143 -- INDEX BY PLS_INTEGER;
12144
12145 --This Record is used to store the Plan Settings level information of the budget version.
12146 Type proj_fp_options_rec is record(fin_plan_preference_code pa_proj_fp_options.fin_plan_preference_code%TYPE,
12147 projfunc_cost_rate_type pa_proj_fp_options.projfunc_cost_rate_type%TYPE,
12148 projfunc_cost_rate_date_type pa_proj_fp_options.projfunc_cost_rate_date_type%TYPE,
12149 projfunc_cost_rate_date pa_proj_fp_options.projfunc_cost_rate_date%TYPE,
12150 project_cost_rate_type pa_proj_fp_options.project_cost_rate_type%TYPE,
12151 project_cost_rate_date_type pa_proj_fp_options.project_cost_rate_date_type%TYPE,
12152 project_cost_rate_date pa_proj_fp_options.project_cost_rate_date%TYPE,
12153 projfunc_rev_rate_type pa_proj_fp_options.projfunc_rev_rate_type%TYPE,
12154 projfunc_rev_rate_date_type pa_proj_fp_options.projfunc_rev_rate_date_type%TYPE,
12155 projfunc_rev_rate_date pa_proj_fp_options.projfunc_rev_rate_date%TYPE,
12156 project_rev_rate_type pa_proj_fp_options.project_rev_rate_type%TYPE,
12157 project_rev_rate_date_type pa_proj_fp_options.project_rev_rate_date_type%TYPE,
12158 project_rev_rate_date pa_proj_fp_options.project_rev_rate_date%TYPE);
12159 l_proj_fp_options_rec proj_fp_options_rec;
12160
12161 --This Cursor is used to get the Amount Type and Conversion Attribute information of the budget version.
12162 CURSOR amt_type_cur(c_project_id pa_fp_proj_xl_amt_types.project_id%TYPE,
12163 c_fin_plan_type_id pa_fp_proj_xl_amt_types.fin_plan_type_id%TYPE,
12164 c_option_type pa_fp_proj_xl_amt_types.option_type%TYPE,
12165 c_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE)
12166 IS
12167 SELECT amt.amount_type_code,
12168 amt_lu.meaning amount_type_name,
12169 decode(decode(amt.amount_type_code,'TOTAL_REV',l_proj_fp_options_rec.projfunc_rev_rate_type,l_proj_fp_options_rec.projfunc_cost_rate_type),null,null,
12170 (SELECT pctv1.USER_CONVERSION_TYPE
12171 FROM GL_DAILY_CONVERSION_TYPES pctv1
12172 WHERE pctv1.CONVERSION_TYPE= nvl(decode(amt.amount_type_code,'TOTAL_REV',l_proj_fp_options_rec.projfunc_rev_rate_type,l_proj_fp_options_rec.projfunc_cost_rate_type),'Corporate'))) projfunc_rate_type,
12173
12174 decode(decode(amt.amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.projfunc_rev_rate_type,'User',null,l_proj_fp_options_rec.projfunc_rev_rate_date_type),
12175 decode(l_proj_fp_options_rec.projfunc_cost_rate_type,'User',null,l_proj_fp_options_rec.projfunc_cost_rate_date_type)),null,null,
12176 (SELECT plk_d1.meaning
12177 FROM pa_lookups plk_d1
12178 WHERE plk_d1.lookup_type='PA_FP_RATE_DATE_TYPE'
12179 AND plk_d1.lookup_code=NVL(decode(amt.amount_type_code,'TOTAL_REV',
12180 decode(l_proj_fp_options_rec.projfunc_rev_rate_type,'User',null,l_proj_fp_options_rec.projfunc_rev_rate_date_type),
12181 decode(l_proj_fp_options_rec.projfunc_cost_rate_type,'User',null,l_proj_fp_options_rec.projfunc_cost_rate_date_type)),'FIXED_DATE'))) projfunc_rate_date_type,
12182
12183 decode(amt.amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.projfunc_rev_rate_date_type,'FIXED_DATE',l_proj_fp_options_rec.projfunc_rev_rate_date,TO_DATE(null)),
12184 decode(l_proj_fp_options_rec.projfunc_cost_rate_date_type,'FIXED_DATE',l_proj_fp_options_rec.projfunc_cost_rate_date,TO_DATE(null))) projfunc_rate_date,
12185
12186 decode(decode(amt.amount_type_code,'TOTAL_REV',l_proj_fp_options_rec.project_rev_rate_type,l_proj_fp_options_rec.project_cost_rate_type),null,null,
12187 (SELECT pctv2.USER_CONVERSION_TYPE
12188 FROM GL_DAILY_CONVERSION_TYPES pctv2
12189 WHERE pctv2.CONVERSION_TYPE= nvl(decode(amt.amount_type_code,'TOTAL_REV',l_proj_fp_options_rec.project_rev_rate_type,l_proj_fp_options_rec.project_cost_rate_type),'Corporate'))) project_rate_type,
12190
12191 decode(decode(amt.amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.project_rev_rate_type,'User',null,l_proj_fp_options_rec.PROJECT_REV_RATE_DATE_TYPE),
12192 decode(l_proj_fp_options_rec.project_cost_rate_type,'User',null,l_proj_fp_options_rec.project_cost_rate_date_type)),null,null,
12193 (SELECT plk_d2.meaning
12194 FROM pa_lookups plk_d2
12195 WHERE plk_d2.lookup_type='PA_FP_RATE_DATE_TYPE'
12196 AND plk_d2.lookup_code=NVL(decode(amt.amount_type_code,'TOTAL_REV',
12197 decode(l_proj_fp_options_rec.project_rev_rate_type,'User',null,l_proj_fp_options_rec.project_rev_rate_date_type),
12198 decode(l_proj_fp_options_rec.project_cost_rate_type,'User',null,l_proj_fp_options_rec.project_cost_rate_date_type)),'FIXED_DATE'))) project_rate_date_type,
12199
12200 decode(amt.amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.project_rev_rate_date_type,'FIXED_DATE',l_proj_fp_options_rec.project_rev_rate_date,TO_DATE(null)),
12201 decode(l_proj_fp_options_rec.project_cost_rate_date_type,'FIXED_DATE',l_proj_fp_options_rec.project_cost_rate_date,TO_DATE(null))) project_rate_date
12202 FROM pa_fp_proj_xl_amt_types amt,
12203 pa_lookups amt_lu
12204 WHERE amt.project_id = c_project_id
12205 AND amt.fin_plan_type_id = c_fin_plan_type_id
12206 AND amt.option_type = c_option_type
12207 AND amt_lu.lookup_type = decode(c_plan_class_code,'BUDGET', decode(c_option_type,'COST','PA_FP_XL_COST_BDGT_AMT_TYPES','REVENUE','PA_FP_XL_REV_BDGT_AMT_TYPES','ALL','PA_FP_XL_ALL_BDGT_AMT_TYPES'),
12208 'FORECAST',decode(c_option_type,'COST','PA_FP_XL_COST_FCST_AMT_TYPES','REVENUE','PA_FP_XL_REV_FCST_AMT_TYPES','ALL','PA_FP_XL_ALL_FCST_AMT_TYPES'))
12209 AND amt_lu.lookup_code = amt.amount_type_code
12210 ORDER BY amount_type_name;
12211 --PL/SQL table created based on amt_type_cur.
12212 TYPE amt_type_tbl IS TABLE OF amt_type_cur%ROWTYPE;
12213
12214 --Commented out the below for bug 5330532
12215 /*
12216 --This Record is used to store the Transaction Currencies Associated with the budget version.
12217 TYPE txn_curr_rec IS RECORD(txn_currency_code pa_fp_txn_currencies.txn_currency_code%TYPE,
12218 project_cost_exchange_rate pa_fp_txn_currencies.project_cost_exchange_rate%TYPE,
12219 project_rev_exchange_rate pa_fp_txn_currencies.project_rev_exchange_rate%TYPE,
12220 projfunc_cost_exchange_rate pa_fp_txn_currencies.projfunc_cost_exchange_rate%TYPE,
12221 projfunc_rev_exchange_rate pa_fp_txn_currencies.projfunc_rev_exchange_rate%TYPE);
12222 --PL/SQL table created based on txn_curr_rec.
12223 TYPE txn_curr_tbl IS TABLE OF txn_curr_rec;
12224 */
12225
12226 /* Bug 5144013: Commented out the below cursors txn_curr_cur and txn_curr_rate_cur
12227 as the transaction currencies and the exchange rates of those currencies can be got
12228 from the cursor res_ass_cur. This is done as part of merging the MRUP3 changes done
12229 in 11i into R12.
12230 */
12231 /* Start of code changes for bug 5330532*/
12232 --Cursor created for fetching transaction currencies.
12233 /* --Bug 5144013.
12234 CURSOR txn_curr_cur(c_budget_version_id pa_budget_lines.budget_version_id%TYPE,
12235 c_ra_id pa_budget_lines.resource_assignment_id%TYPE)
12236 IS
12237 SELECT DISTINCT(txn_currency_code)
12238 FROM pa_budget_lines pbl
12239 WHERE pbl.budget_version_id = c_budget_version_id
12240 AND pbl.resource_assignment_id = c_ra_id;
12241 --PL/SQL table created based on txn_curr_cur.
12242 TYPE txn_curr_tbl IS TABLE OF txn_curr_cur%ROWTYPE;
12243
12244 --Cursor created for fetching transaction currency rates.
12245 CURSOR txn_curr_rate_cur(c_budget_version_id pa_fp_txn_currencies.fin_plan_version_id%TYPE,
12246 c_proj_fp_options_id pa_fp_txn_currencies.proj_fp_options_id%TYPE)
12247 IS
12248 SELECT pftc.txn_currency_code,
12249 pftc.project_cost_exchange_rate,
12250 pftc.project_rev_exchange_rate,
12251 pftc.projfunc_cost_exchange_rate,
12252 pftc.projfunc_rev_exchange_rate
12253 FROM pa_fp_txn_currencies pftc
12254 WHERE pftc.fin_plan_version_id = c_budget_version_id
12255 AND pftc.proj_fp_options_id = c_proj_fp_options_id;
12256 --PL/SQL table created based on txn_curr_rate_cur.
12257 TYPE txn_curr_rate_tbl IS TABLE OF txn_curr_rate_cur%ROWTYPE INDEX BY VARCHAR2(15);
12258 */ --Bug 5144013.
12259 /* End of code changes for bug 5330532*/
12260
12261 l_global_tmp_rec pa_fp_webadi_xface_tmp%ROWTYPE; --Bug 5284640.
12262 NO_RA_EXC EXCEPTION; --Bug 5360205.
12263
12264 l_debug_mode VARCHAR2(1);
12265 l_return_status VARCHAR2(1);
12266 l_msg_count NUMBER := 0;
12267 l_data VARCHAR2(2000);
12268 l_msg_data VARCHAR2(2000);
12269 l_msg_index_out NUMBER;
12270 l_module_name VARCHAR2(100) := 'pa_fp_webadi_pkg.insert_periodic_tmp_table';
12271 l_project_id pa_budget_versions.project_id%TYPE;
12272 l_budget_version_id pa_budget_versions.budget_version_id%TYPE;
12273 l_version_info_rec PA_FP_GEN_AMOUNT_UTILS.FP_COLS;
12274 l_project_structure_version_id pa_budget_versions.project_structure_version_id%TYPE;
12275 l_struct_status_flag VARCHAR2(1);
12276 l_ci_id pa_budget_versions.ci_id%TYPE;
12277 l_AR_flag pa_budget_versions.approved_rev_plan_type_flag%TYPE;
12278 l_agr_curr_code pa_agreements_all.agreement_currency_code%TYPE;
12279 l_agr_conv_reqd_flag VARCHAR2(1);
12280 l_fin_plan_type_id pa_proj_fp_options.fin_plan_type_id%TYPE;
12281 l_proj_fp_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
12282 l_version_type pa_budget_versions.version_type%TYPE;
12283 l_period_mask_id pa_proj_fp_options.cost_period_mask_id%TYPE;
12284 l_time_phased_code pa_proj_fp_options.cost_time_phased_code%TYPE;
12285 l_org_id pa_projects_all.org_id%TYPE;
12286 l_current_planning_period pa_proj_fp_options.cost_current_planning_period%TYPE;
12287 l_fin_plan_preference_code pa_proj_fp_options.fin_plan_preference_code%TYPE;
12288 l_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE;
12289 l_project_name pa_projects_all.name%TYPE;
12290 l_project_number pa_projects_all.segment1%TYPE;
12291 l_txn_currency_code pa_fp_txn_currencies.txn_currency_code%TYPE;
12292 l_projfunc_currency_code pa_projects_all.projfunc_currency_code%TYPE;
12293 l_project_currency_code pa_projects_all.project_currency_code%TYPE;
12294 l_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
12295 l_start_date DATE;
12296 l_end_date DATE;
12297 l_preceding_date DATE;
12298 l_succeeding_date DATE;
12299 cnt NUMBER := 1;
12300 l_res_ass_tbl res_ass_tbl;
12301 l_periods_tbl periods_tbl;
12302 l_amt_type_tbl amt_type_tbl;
12303 -- Bug 5144013: Commenting out the declaration of l_txn_curr_tbl and l_txn_curr_rate_tbl.
12304 --l_txn_curr_tbl txn_curr_tbl := txn_curr_tbl(); --Bug 5330532.
12305 --l_txn_curr_rate_tbl txn_curr_rate_tbl; --Bug 5330532.
12306 projfunc_exchange_rate pa_fp_txn_currencies.projfunc_cost_exchange_rate%TYPE;
12307 project_exchange_rate pa_fp_txn_currencies.project_cost_exchange_rate%TYPE;
12308 l_position NUMBER := 0; -- Bug 5284640.
12309 l_return NUMBER := 0; -- Bug 5284640.
12310
12311 l_rec_version_number NUMBER :=0; --Bug 7863205
12312
12313 BEGIN
12314 x_msg_count := 0;
12315 x_return_status := FND_API.G_RET_STS_SUCCESS;
12316 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'Y');
12317
12318
12319 IF l_debug_mode = 'Y' THEN
12320 pa_debug.set_curr_function( p_function => 'INSERT_PERIODIC_TMP_TABLE'
12321 ,p_debug_mode => l_debug_mode );
12322 pa_debug.g_err_stage := ':In pa_fp_webadi_pkg.INSERT_PERIODIC_TMP_TABLE' ;
12323 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12324 END IF;
12325
12326 l_budget_version_id := p_budget_version_id;
12327
12328 -- Bug 9963788
12329 delete from pa_fp_webadi_xface_tmp where budget_version_id = l_budget_version_id;
12330
12331 --Validating Input Parameters.
12332 IF p_budget_version_id IS NULL THEN
12333 IF l_debug_mode = 'Y' THEN
12334 pa_debug.g_err_stage := 'p_budget_version_id is passed as null';
12335 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12336 END IF;
12337 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12338 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12339 p_token1 => 'PROCEDURENAME',
12340 p_value1 => l_module_name);
12341 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12342 ELSE
12343 IF l_debug_mode = 'Y' THEN
12344 pa_debug.g_err_stage := 'Fetching Project Information of the Budget Version';
12345 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12346 END IF;
12347
12348 --Fetching Project Information of the budget version and storing them in local variables.
12349 BEGIN
12350 SELECT ppa.project_id,
12351 ppa.name,
12352 ppa.segment1,
12353 pbv.record_version_number --Bug 7863205
12354 INTO l_project_id,
12355 l_project_name,
12356 l_project_number,
12357 l_rec_version_number --Bug 7863205
12358 FROM pa_budget_versions pbv,
12359 pa_projects_all ppa
12360 WHERE pbv.budget_version_id = l_budget_version_id
12361 AND pbv.project_id = ppa.project_id;
12362 EXCEPTION
12363 WHEN NO_DATA_FOUND THEN
12364 IF l_debug_mode = 'Y' THEN
12365 pa_debug.g_err_stage := 'Error getting Project Information for the budget version';
12366 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12367 END IF;
12368 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12369 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12370 p_token1 => 'PROCEDURENAME',
12371 p_value1 => l_module_name);
12372 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12373 END;
12374 END IF;
12375 IF l_debug_mode = 'Y' THEN
12376 pa_debug.g_err_stage := '-----Project Id : '||l_project_id||'-----';
12377 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12378 pa_debug.g_err_stage := 'Getting Budget Version Details';
12379 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12380 END IF;
12381
12382 /*Getting Budget Version Details by calling the GET_PLAN_VERSION_DTLS api.
12383 The returned PL/SQL record l_version_info will contain the budget version details
12384 */
12385 PA_FP_GEN_AMOUNT_UTILS.GET_PLAN_VERSION_DTLS( p_project_id => l_project_id,
12386 p_budget_version_id => l_budget_version_id,
12387 x_fp_cols_rec => l_version_info_rec,
12388 x_return_status => l_return_status,
12389 x_msg_count => l_msg_count,
12390 x_msg_data => l_msg_data);
12391
12392 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12393 IF l_debug_mode = 'Y' THEN
12394 pa_debug.g_err_stage := 'Budget Version Details not found';
12395 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12396 END IF;
12397 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12398 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12399 p_token1 => 'PROCEDURENAME',
12400 p_value1 => l_module_name);
12401 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12402 END IF;
12403
12404 --Getting Structure Version Details and storing them in local variables.
12405 IF l_debug_mode = 'Y' THEN
12406 pa_debug.g_err_stage := 'Getting the Structure version information of the budget version';
12407 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12408 END IF;
12409 l_project_structure_version_id := l_version_info_rec.x_project_structure_version_id;
12410 l_struct_status_flag := PA_PROJECT_STRUCTURE_UTILS.check_struc_ver_published(l_project_id,
12411 l_project_structure_version_id);
12412
12413 /* Bug 5144013: Commenting out the below code by which we are getting the agreement currency of the plan
12414 version if the plan version is a change order version and the approved_rev_plan_type_flag of the plan
12415 version is 'Y'. This is done as we can get the the currencies from the cursor res_ass_cur by making use
12416 of the new entity pa_resource_asgn_curr. This is done as part of merging the MRUP3 changes done in 11i
12417 into R12
12418 */
12419 /* --Bug 5144013.
12420 --Getting CI Id and Approved Revenue Flag of the budget version and storing them in local variables.
12421 IF l_debug_mode = 'Y' THEN
12422 pa_debug.g_err_stage := 'Getting CI id and Approved Revenue flag of the budget version';
12423 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12424 END IF;
12425 BEGIN
12426 SELECT ci_id,
12427 approved_rev_plan_type_flag
12428 INTO l_ci_id,
12429 l_AR_flag
12430 FROM pa_budget_versions
12431 WHERE budget_version_id = l_budget_version_id;
12432 EXCEPTION
12433 WHEN NO_DATA_FOUND THEN
12434 IF l_debug_mode = 'Y' THEN
12435 pa_debug.g_err_stage := 'Error getting CI Id and Approved Revenue flag for the budget version';
12436 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12437 END IF;
12438 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12439 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12440 p_token1 => 'PROCEDURENAME',
12441 p_value1 => l_module_name);
12442 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12443 END;
12444 IF l_debug_mode = 'Y' THEN
12445 pa_debug.g_err_stage := '-----CI Id : '||l_ci_id||' , Approved Revenue Flag : '||l_AR_flag||'-----';
12446 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12447 END IF;
12448 */ --Bug 5144013.
12449
12450 /*Getting the Agreement Details of the budget version if the budget version is CI version and and of
12451 Approved Revenue Plan Type.
12452 */
12453 /* --Bug 5144013.
12454 IF l_debug_mode = 'Y' THEN
12455 pa_debug.g_err_stage := 'Getting Agreement details if the budget versions is CI version and of Approved Revenue plan type';
12456 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12457 END IF;
12458 IF l_ci_id is not null AND L_AR_FLAG = 'Y' THEN
12459 PA_FIN_PLAN_UTILS2.get_agreement_details(
12460 p_budget_version_id => l_budget_version_id,
12461 p_calling_mode => 'WA_DOWNLOAD',
12462 x_agr_curr_code => l_agr_curr_code,
12463 x_agr_conv_reqd_flag => l_agr_conv_reqd_flag,
12464 x_return_status => l_return_status);
12465 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12466 IF l_debug_mode = 'Y' THEN
12467 pa_debug.g_err_stage := 'Error in Getting Agreement Details of the budget version';
12468 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12469 END IF;
12470 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12471 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12472 p_token1 => 'PROCEDURENAME',
12473 p_value1 => l_module_name);
12474 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12475 END IF;
12476 END IF;
12477 IF l_debug_mode = 'Y' THEN
12478 pa_debug.g_err_stage := '-----Agreement Currency Code : '||l_agr_curr_code||'-----';
12479 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12480 END IF;
12481 */ --Bug 5144013.
12482
12483 /*Getting Plan Settings level information of the budget version and storing them in a PL/SQL record.
12484 The record l_proj_fp_options_rec will contain Plan Settings level information
12485 */
12486 IF l_debug_mode = 'Y' THEN
12487 pa_debug.g_err_stage := 'Getting Plan Settings level information of the budget version';
12488 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12489 END IF;
12490 l_fin_plan_type_id := l_version_info_rec.x_fin_plan_type_id;
12491 l_version_type := l_version_info_rec.x_version_type;
12492 l_proj_fp_options_id := l_version_info_rec.x_proj_fp_options_id;
12493 BEGIN
12494 SELECT fin_plan_preference_code,
12495 projfunc_cost_rate_type,
12496 projfunc_cost_rate_date_type,
12497 projfunc_cost_rate_date,
12498 project_cost_rate_type,
12499 project_cost_rate_date_type,
12500 project_cost_rate_date,
12501 projfunc_rev_rate_type,
12502 projfunc_rev_rate_date_type,
12503 projfunc_rev_rate_date,
12504 project_rev_rate_type,
12505 project_rev_rate_date_type,
12506 project_rev_rate_date
12507 INTO l_proj_fp_options_rec
12508 FROM pa_proj_fp_options
12509 WHERE proj_fp_options_id = l_proj_fp_options_id;
12510 EXCEPTION
12511 WHEN NO_DATA_FOUND THEN
12512 IF l_debug_mode = 'Y' THEN
12513 pa_debug.g_err_stage := 'error getting Plan Settings level information of the budget version';
12514 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12515 END IF;
12516 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12517 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12518 p_token1 => 'PROCEDURENAME',
12519 p_value1 => l_module_name);
12520 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12521 END;
12522
12523 /*Getting Amount Type Codes associated with the budget version.and storing them in a PL/SQL table.
12524 The PL/SQL table l_amt_type_tbl will contain the Amount Type codes and Conversion Attributes
12525 associated with the budget version.
12526 */
12527 l_plan_class_code := l_version_info_rec.x_plan_class_code;
12528 IF l_debug_mode = 'Y' THEN
12529 pa_debug.g_err_stage := 'Getting Amount Types associated with the budget version';
12530 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12531 END IF;
12532 BEGIN
12533 OPEN amt_type_cur(l_project_id,l_fin_plan_type_id,l_version_type,l_plan_class_code);
12534 FETCH amt_type_cur
12535 BULK COLLECT INTO l_amt_type_tbl;
12536 CLOSE amt_type_cur;
12537 IF l_amt_type_tbl.count = 0 THEN
12538 IF l_debug_mode = 'Y' THEN
12539 pa_debug.g_err_stage := 'No Amount Types found for the budget version';
12540 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12541 END IF;
12542 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12543 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12544 p_token1 => 'PROCEDURENAME',
12545 p_value1 => l_module_name);
12546 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12547 END IF;
12548 END;
12549
12550 /*Calling GET_PERIOD_INFORMATION api to get the Group Period Information and Start/End dates of the Periods.
12551 The returned PL/SQL table l_periods_tbl will contain all the periods and Start and End dates of the periods
12552 associated with the budget version based on the period mask.
12553 */
12554 l_period_mask_id := l_version_info_rec.x_period_mask_id;
12555 l_time_phased_code := l_version_info_rec.x_time_phased_code;
12556 l_org_id := l_version_info_rec.x_org_id;
12557 l_current_planning_period := l_version_info_rec.x_current_planning_period;
12558 IF l_debug_mode = 'Y' THEN
12559 pa_debug.g_err_stage := 'Getting Group Period Information and Start/End dates of the periods';
12560 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12561 END IF;
12562 GET_PERIOD_INFORMATION(p_period_mask_id => l_period_mask_id,
12563 p_time_phased_code => l_time_phased_code,
12564 p_org_id => l_org_id,
12565 p_current_planning_period => l_current_planning_period,
12566 x_periods_tbl => l_periods_tbl,
12567 x_return_status => l_return_status,
12568 x_msg_count => l_msg_count,
12569 x_msg_data => l_msg_data);
12570
12571 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12572 IF l_debug_mode = 'Y' THEN
12573 pa_debug.g_err_stage := 'Error in getting Group Period information of the budget version';
12574 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12575 END IF;
12576 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12577 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12578 p_token1 => 'PROCEDURENAME',
12579 p_value1 => l_module_name);
12580 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12581 END IF;
12582 IF l_periods_tbl.count = 0 THEN
12583 IF l_debug_mode = 'Y' THEN
12584 pa_debug.g_err_stage := 'Period Informations not found for the budget version';
12585 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12586 END IF;
12587 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12588 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12589 p_token1 => 'PROCEDURENAME',
12590 p_value1 => l_module_name);
12591 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12592 END IF;
12593
12594 /* Start of code changes for Bug 5144013.
12595 Commenting out the below code by which we are getting the exchange rates of the
12596 transaction currencies of the plan version. This is done as we can get the exchange rates of
12597 the transaction currencies from the cursor res_ass_cur. This is done as part of merging the
12598 MRUP3 changes done in 11i into R12.
12599 */
12600 /*Getting Transaction Currency rates associated with the budget version.
12601 The PL/SQL table l_txn_curr_rate_tbl will contain all the Transaction Currency rates
12602 associated with the budget version.
12603 */
12604 /* --Bug 5144013.
12605 l_projfunc_currency_code := l_version_info_rec.x_projfunc_currency_code;
12606 l_project_currency_code := l_version_info_rec.x_project_currency_code;
12607 l_multi_curr_flag := l_version_info_rec.x_plan_in_multi_curr_flag;
12608 IF l_debug_mode = 'Y' THEN
12609 pa_debug.g_err_stage := 'Getting Transaction Currency rates associated with the budget version';
12610 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12611 END IF;
12612
12613 BEGIN
12614 */ --Bug 5144013.
12615 /* Start of code changes for bug 5330532. */
12616 /* --Bug 5144013.
12617 FOR rat IN txn_curr_rate_cur(l_budget_version_id, l_proj_fp_options_id) LOOP
12618 l_txn_curr_rate_tbl(rat.txn_currency_code).txn_currency_code := rat.txn_currency_code;
12619 l_txn_curr_rate_tbl(rat.txn_currency_code).project_cost_exchange_rate := rat.project_cost_exchange_rate;
12620 l_txn_curr_rate_tbl(rat.txn_currency_code).project_rev_exchange_rate := rat.project_rev_exchange_rate;
12621 l_txn_curr_rate_tbl(rat.txn_currency_code).projfunc_cost_exchange_rate := rat.projfunc_cost_exchange_rate;
12622 l_txn_curr_rate_tbl(rat.txn_currency_code).projfunc_rev_exchange_rate := rat.projfunc_rev_exchange_rate;
12623 END LOOP;
12624 */ --Bug 5144013.
12625 /* End of code changes for bug 5330532. */
12626
12627 -- Commented out the below for bug 5330532.
12628 /*
12629 SELECT DISTINCT(nvl(pbl.txn_currency_code,DECODE(l_ci_id,
12630 null, DECODE(l_AR_flag,
12631 'Y', l_projfunc_currency_code,
12632 l_project_currency_code),
12633 DECODE(l_version_type,
12634 'ALL', l_agr_curr_code,
12635 'REVENUE', l_agr_curr_code,
12636 DECODE(l_AR_flag,
12637 'Y', l_projfunc_currency_code,
12638 l_project_currency_code))))) as txn_currency_code,
12639 pftc.project_cost_exchange_rate,
12640 pftc.project_rev_exchange_rate,
12641 pftc.projfunc_cost_exchange_rate,
12642 pftc.projfunc_rev_exchange_rate
12643 BULK COLLECT INTO l_txn_curr_tbl
12644 FROM pa_budget_lines pbl,
12645 pa_fp_txn_currencies pftc
12646 WHERE pbl.budget_version_id = l_budget_version_id
12647 AND pftc.fin_plan_version_id = l_budget_version_id
12648 AND pftc.proj_fp_options_id = l_proj_fp_options_id
12649 and pbl.txn_currency_code = pftc.txn_currency_code;
12650
12651 IF l_txn_curr_tbl.count = 0 THEN
12652 IF l_debug_mode = 'Y' THEN
12653 pa_debug.g_err_stage := 'No transaction currency found for the budget version';
12654 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12655 END IF;
12656 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12657 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12658 p_token1 => 'PROCEDURENAME',
12659 p_value1 => l_module_name);
12660 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12661 END IF;
12662 */
12663 --END;
12664 /* End of code changes done for Bug 5144013.*/
12665
12666 /*Getting Resource Assignment details of the budget version
12667 The PL/SQL table l_res_ass_tbl will contain all the Resource Assignment
12668 information associated with the budget version.
12669 */
12670 IF l_debug_mode = 'Y' THEN
12671 pa_debug.g_err_stage := 'Getting the Resource Assignment details of the budget version';
12672 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12673 END IF;
12674 BEGIN
12675 /* Start of coding done for bug 5641300: Using the bulk collect logic instead of for loop
12676 as res_ass_tbl is converted to ordinary pl/sql table from index by pl/sql table.
12677 */
12678 /*
12679 FOR rec in res_ass_cur(l_budget_version_id,l_project_id,l_project_structure_version_id)
12680 LOOP
12681 l_res_ass_tbl(rec.resource_assignment_id) := rec;
12682 END LOOP;
12683 */
12684 -- Bug 5144013: Made changes to pass proj_fp_options_id as a parameter to the cursor res_ass_cur.
12685 OPEN res_ass_cur(l_budget_version_id,l_project_id,l_project_structure_version_id,l_proj_fp_options_id);
12686 FETCH res_ass_cur BULK COLLECT INTO l_res_ass_tbl;
12687 CLOSE res_ass_cur;
12688 /* End of coding done for bug 5641300.*/
12689 IF l_res_ass_tbl.count = 0 THEN
12690 IF l_debug_mode = 'Y' THEN
12691 pa_debug.g_err_stage := 'No Resource Assignments found for the budget version';
12692 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12693 END IF;
12694 -- Bug 5360205: Commented out the following and raised NO_RA_EXC.
12695 /*
12696 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12697 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12698 p_token1 => 'PROCEDURENAME',
12699 p_value1 => l_module_name);
12700 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12701 */
12702 RAISE NO_RA_EXC;
12703 END IF;
12704 END;
12705
12706 l_fin_plan_preference_code := l_proj_fp_options_rec.fin_plan_preference_code;
12707 /*Getting the values of all the Amount Types for each Resource Assignment and Transaction
12708 Currency combination for all the periods associated with the budget version
12709 */
12710 IF l_debug_mode = 'Y' THEN
12711 pa_debug.g_err_stage := 'Getting Amounts of all the Periods associated with the budget version';
12712 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12713 END IF;
12714 BEGIN
12715 l_global_tmp_tbl := global_tmp_tbl();
12716 l_global_tmp_rec.budget_version_id := l_budget_version_id;
12717 l_global_tmp_rec.fin_plan_preference_code := l_fin_plan_preference_code;
12718 l_global_tmp_rec.plan_class_code := l_plan_class_code;
12719 l_global_tmp_rec.project_name := l_project_name;
12720 l_global_tmp_rec.record_version_number := l_rec_version_number; --Bug 7863205
12721 l_global_tmp_rec.project_number := l_project_number;
12722 l_global_tmp_rec.project_id := l_project_id;
12723 l_global_tmp_rec.delete_flag := null;
12724 FOR res IN l_res_ass_tbl.first..l_res_ass_tbl.last LOOP
12725 l_global_tmp_rec.resource_assignment_id := l_res_ass_tbl(res).resource_assignment_id;
12726 l_global_tmp_rec.task_number := l_res_ass_tbl(res).task_number;
12727 l_global_tmp_rec.task_name := l_res_ass_tbl(res).task_name;
12728 l_global_tmp_rec.task_display_sequence := l_res_ass_tbl(res).task_display_sequence;
12729 l_global_tmp_rec.resource_alias := l_res_ass_tbl(res).resource_name;
12730 l_global_tmp_rec.unit_of_measure := l_res_ass_tbl(res).unit_of_measure;
12731 l_global_tmp_rec.resource_list_member_id := l_res_ass_tbl(res).resource_list_member_id;
12732
12733 l_global_tmp_rec.cost_code := l_res_ass_tbl(res).cost_code; -- cbs enhancement changes bug#16445106
12734 l_global_tmp_rec.cost_code_name := l_res_ass_tbl(res).cost_code_name; -- cbs enhancement changes bug#16445106
12735
12736 l_global_tmp_rec.spread_curve_id := l_res_ass_tbl(res).spread_curve_id;
12737 l_global_tmp_rec.spread_curve := l_res_ass_tbl(res).spread_curve;
12738 l_global_tmp_rec.start_date := l_res_ass_tbl(res).planning_start_date;
12739 l_global_tmp_rec.end_date := l_res_ass_tbl(res).planning_end_date;
12740 l_global_tmp_rec.mfc_cost_type_id := l_res_ass_tbl(res).mfc_cost_type_id;
12741 l_global_tmp_rec.mfc_cost_type := l_res_ass_tbl(res).mfc_cost_type;
12742 l_global_tmp_rec.etc_method_code := l_res_ass_tbl(res).etc_method_code;
12743 l_global_tmp_rec.etc_method := l_res_ass_tbl(res).etc_method;
12744 l_global_tmp_rec.etc_source := l_res_ass_tbl(res).etc_source;
12745 l_global_tmp_rec.physical_percent_complete := PA_FIN_PLAN_UTILS.get_physical_pc_complete
12746 (p_project_id => l_project_id,
12747 p_proj_element_id => l_res_ass_tbl(res).project_element_id);
12748
12749 /* Bug 5144013: Commenting out the below code by which we get the transaction currencies of the
12750 resource assignment. This is done as we can get the resource assignment and transaction currency
12751 combination from the cursor res_ass_cur. This is done as part of merging the MRUP3 changes done
12752 in 11i into R12.
12753 */
12754 /* Start of code changes for bug 5330532 */
12755 /* --Bug 5144013.
12756 BEGIN
12757 l_txn_curr_tbl.DELETE;
12758 OPEN txn_curr_cur(l_budget_version_id, l_res_ass_tbl(res).resource_assignment_id);
12759 FETCH txn_curr_cur BULK COLLECT INTO l_txn_curr_tbl;
12760 CLOSE txn_curr_cur;
12761 IF l_txn_curr_tbl.COUNT = 0 THEN
12762 l_txn_curr_tbl.extend(1);
12763 SELECT (DECODE(l_ci_id,
12764 null, DECODE(l_AR_flag,
12765 'Y', l_projfunc_currency_code,
12766 l_project_currency_code),
12767 DECODE(l_version_type,
12768 'ALL', l_agr_curr_code,
12769 'REVENUE', l_agr_curr_code,
12770 l_project_currency_code)))
12771 INTO l_txn_curr_tbl(1).txn_currency_code
12772 FROM dual;
12773 END IF;
12774 END;
12775 */ --Bug 5144013.
12776 /* End of code changes for bug 5330532 */
12777 --FOR txn IN l_txn_curr_tbl.first..l_txn_curr_tbl.last LOOP Bug 5144013.
12778 l_global_tmp_rec.txn_currency_code := l_res_ass_tbl(res).txn_currency_code; --Bug 5144013.
12779 FOR amt IN l_amt_type_tbl.first..l_amt_type_tbl.last LOOP
12780 l_global_tmp_rec.amount_type_code := l_amt_type_tbl(amt).amount_type_code;
12781 l_global_tmp_rec.amount_type_name := l_amt_type_tbl(amt).amount_type_name;
12782 l_global_tmp_rec.projfunc_rate_type := l_amt_type_tbl(amt).projfunc_rate_type;
12783 l_global_tmp_rec.projfunc_rate_date_type := l_amt_type_tbl(amt).projfunc_rate_date_type;
12784 l_global_tmp_rec.projfunc_rate_date := l_amt_type_tbl(amt).projfunc_rate_date;
12785 l_global_tmp_rec.project_rate_type := l_amt_type_tbl(amt).project_rate_type;
12786 l_global_tmp_rec.project_rate_date_type := l_amt_type_tbl(amt).project_rate_date_type;
12787 l_global_tmp_rec.project_rate_date := l_amt_type_tbl(amt).project_rate_date;
12788 /* Bug 5144013. Made changes in the below select to get the exchange rates of the transaction
12789 currencies from pl/sql table l_res_ass_tbl.
12790 */
12791 -- Bug 5330532. Used newly introduced rate table l_txn_curr_rate_tbl in the following select statement.
12792 SELECT
12793 decode(l_amt_type_tbl(amt).amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.projfunc_rev_rate_type,'User',l_res_ass_tbl(res).projfunc_rev_exchange_rate,TO_NUMBER(null)),
12794 decode(l_proj_fp_options_rec.projfunc_cost_rate_type,'User',null,l_res_ass_tbl(res).projfunc_cost_exchange_rate,TO_NUMBER(null))),
12795
12796 decode(l_amt_type_tbl(amt).amount_type_code,'TOTAL_REV',decode(l_proj_fp_options_rec.project_rev_rate_type,'User',l_res_ass_tbl(res).project_rev_exchange_rate,TO_NUMBER(null)),
12797 decode(l_proj_fp_options_rec.project_cost_rate_type,'User',null,l_res_ass_tbl(res).project_cost_exchange_rate,TO_NUMBER(null)))
12798 INTO projfunc_exchange_rate,
12799 project_exchange_rate
12800 FROM dual;
12801 l_global_tmp_rec.projfunc_exchange_rate := projfunc_exchange_rate;
12802 l_global_tmp_rec.project_exchange_rate := project_exchange_rate;
12803 FOR prd in l_periods_tbl.first-1..l_periods_tbl.last+1 LOOP
12804 IF prd <> l_periods_tbl.first-1 and prd <> l_periods_tbl.last+1 THEN
12805 l_position := l_periods_tbl(prd).sequence_number;
12806 l_start_date := l_periods_tbl(prd).start_date;
12807 l_end_date := l_periods_tbl(prd).end_date;
12808 l_preceding_date := to_date(null);
12809 l_succeeding_date := to_date(null);
12810 ELSIF prd = l_periods_tbl.first-1 THEN
12811 l_start_date := to_date(null);
12812 l_end_date := to_date(null);
12813 l_preceding_date := l_periods_tbl(l_periods_tbl.first).start_date;
12814 l_succeeding_date := to_date(null);
12815 ELSIF prd = l_periods_tbl.last+1 THEN
12816 l_start_date := to_date(null);
12817 l_end_date := to_date(null);
12818 l_preceding_date := to_date(null);
12819 l_succeeding_date := l_periods_tbl(l_periods_tbl.last).end_date;
12820 END IF;
12821 --Calling get_period_amounts api to get the value of the Amount Type for a period.
12822 l_return := pa_fp_webadi_utils.get_period_amounts(
12823 p_budget_version_id => l_budget_version_id,
12824 p_amount_code => l_amt_type_tbl(amt).amount_type_code,
12825 p_resource_assignment_id => l_res_ass_tbl(res).resource_assignment_id,
12826 p_txn_currency_code => l_res_ass_tbl(res).txn_currency_code, --Bug 5144013.
12827 p_prd_start_date => l_start_date,
12828 p_prd_end_date => l_end_date,
12829 preceding_date => l_preceding_date,
12830 succedeing_date => l_succeeding_date);
12831 IF prd = l_periods_tbl.first-1 THEN
12832 l_global_tmp_rec.preceding_period_amount := l_return;
12833 ELSIF prd = l_periods_tbl.last+1 THEN
12834 l_global_tmp_rec.succeeding_period_amount := l_return;
12835 ELSE
12836 -- Bug 5284640: Commented out the below Dynamic SQL and added PL/SQL code for improving performance.
12837 /*
12838 --Dynamic SQL used to insert the Amount Type value in the corresponding period column.
12839 EXECUTE IMMEDIATE
12840 'BEGIN '||
12841 'pa_fp_webadi_pkg.l_global_tmp_rec.prd'||pa_fp_webadi_pkg.l_position||' := pa_fp_webadi_pkg.l_return; '||
12842 'END;';
12843 */
12844 IF l_position = 1 THEN
12845 l_global_tmp_rec.prd1 := l_return;
12846 ELSIF l_position = 2 THEN
12847 l_global_tmp_rec.prd2 := l_return;
12848 ELSIF l_position = 3 THEN
12849 l_global_tmp_rec.prd3 := l_return;
12850 ELSIF l_position = 4 THEN
12851 l_global_tmp_rec.prd4 := l_return;
12852 ELSIF l_position = 5 THEN
12853 l_global_tmp_rec.prd5 := l_return;
12854 ELSIF l_position = 6 THEN
12855 l_global_tmp_rec.prd6 := l_return;
12856 ELSIF l_position =7 THEN
12857 l_global_tmp_rec.prd7 := l_return;
12858 ELSIF l_position = 8 THEN
12859 l_global_tmp_rec.prd8 := l_return;
12860 ELSIF l_position = 9 THEN
12861 l_global_tmp_rec.prd9 := l_return;
12862 ELSIF l_position = 10 THEN
12863 l_global_tmp_rec.prd10 := l_return;
12864 ELSIF l_position = 11 THEN
12865 l_global_tmp_rec.prd11 := l_return;
12866 ELSIF l_position = 12 THEN
12867 l_global_tmp_rec.prd12 := l_return;
12868 ELSIF l_position = 13 THEN
12869 l_global_tmp_rec.prd13 := l_return;
12870 ELSIF l_position = 14 THEN
12871 l_global_tmp_rec.prd14 := l_return;
12872 ELSIF l_position = 15 THEN
12873 l_global_tmp_rec.prd15 := l_return;
12874 ELSIF l_position = 16 THEN
12875 l_global_tmp_rec.prd16 := l_return;
12876 ELSIF l_position = 17 THEN
12877 l_global_tmp_rec.prd17 := l_return;
12878 ELSIF l_position = 18 THEN
12879 l_global_tmp_rec.prd18 := l_return;
12880 ELSIF l_position = 19 THEN
12881 l_global_tmp_rec.prd19 := l_return;
12882 ELSIF l_position = 20 THEN
12883 l_global_tmp_rec.prd20 := l_return;
12884 ELSIF l_position = 21 THEN
12885 l_global_tmp_rec.prd21 := l_return;
12886 ELSIF l_position = 22 THEN
12887 l_global_tmp_rec.prd22 := l_return;
12888 ELSIF l_position = 23 THEN
12889 l_global_tmp_rec.prd23 := l_return;
12890 ELSIF l_position = 24 THEN
12891 l_global_tmp_rec.prd24 := l_return;
12892 ELSIF l_position = 25 THEN
12893 l_global_tmp_rec.prd25 := l_return;
12894 ELSIF l_position = 26 THEN
12895 l_global_tmp_rec.prd26 := l_return;
12896 ELSIF l_position = 27 THEN
12897 l_global_tmp_rec.prd27 := l_return;
12898 ELSIF l_position = 28 THEN
12899 l_global_tmp_rec.prd28 := l_return;
12900 ELSIF l_position = 29 THEN
12901 l_global_tmp_rec.prd29 := l_return;
12902 ELSIF l_position = 30 THEN
12903 l_global_tmp_rec.prd30 := l_return;
12904 ELSIF l_position = 31 THEN
12905 l_global_tmp_rec.prd31 := l_return;
12906 ELSIF l_position = 32 THEN
12907 l_global_tmp_rec.prd32 := l_return;
12908 ELSIF l_position = 33 THEN
12909 l_global_tmp_rec.prd33 := l_return;
12910 ELSIF l_position = 34 THEN
12911 l_global_tmp_rec.prd34 := l_return;
12912 ELSIF l_position = 35 THEN
12913 l_global_tmp_rec.prd35 := l_return;
12914 ELSIF l_position = 36 THEN
12915 l_global_tmp_rec.prd36 := l_return;
12916 ELSIF l_position = 37 THEN
12917 l_global_tmp_rec.prd37 := l_return;
12918 ELSIF l_position = 38 THEN
12919 l_global_tmp_rec.prd38 := l_return;
12920 ELSIF l_position = 39 THEN
12921 l_global_tmp_rec.prd39 := l_return;
12922 ELSIF l_position = 40 THEN
12923 l_global_tmp_rec.prd40 := l_return;
12924 ELSIF l_position = 41 THEN
12925 l_global_tmp_rec.prd41 := l_return;
12926 ELSIF l_position = 42 THEN
12927 l_global_tmp_rec.prd42 := l_return;
12928 ELSIF l_position = 43 THEN
12929 l_global_tmp_rec.prd43 := l_return;
12930 ELSIF l_position = 44 THEN
12931 l_global_tmp_rec.prd44 := l_return;
12932 ELSIF l_position = 45 THEN
12933 l_global_tmp_rec.prd45 := l_return;
12934 ELSIF l_position = 46 THEN
12935 l_global_tmp_rec.prd46 := l_return;
12936 ELSIF l_position = 47 THEN
12937 l_global_tmp_rec.prd47 := l_return;
12938 ELSIF l_position = 48 THEN
12939 l_global_tmp_rec.prd48 := l_return;
12940 ELSIF l_position = 49 THEN
12941 l_global_tmp_rec.prd49 := l_return;
12942 ELSIF l_position = 50 THEN
12943 l_global_tmp_rec.prd50 := l_return;
12944 ELSIF l_position = 51 THEN
12945 l_global_tmp_rec.prd51 := l_return;
12946 ELSIF l_position = 52 THEN
12947 l_global_tmp_rec.prd52 := l_return;
12948 END IF;
12949 END IF;
12950 END LOOP;
12951 --Inserting the record containig the budget line information into the PL/SQL table.
12952 l_global_tmp_tbl.extend();
12953 l_global_tmp_tbl(cnt) := l_global_tmp_rec;
12954 cnt := cnt+1;
12955 END LOOP;
12956 --END LOOP; Bug 5144013.
12957 END LOOP;
12958 --Resetting the value of all the global variables.
12959 l_position := 0;
12960 l_global_tmp_rec := null;
12961 l_return := 0;
12962 END;
12963 /*Populating Global Temparory Table pa_fp_webadi_xface_tmp using the PL/SQL
12964 table l_global_tmp_tbl which contains all the budget line details.
12965 */
12966 IF l_debug_mode = 'Y' THEN
12967 pa_debug.g_err_stage := 'Before inerting into Global Temporary Table';
12968 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12969 END IF;
12970 BEGIN
12971 /* FOR tmp IN l_global_tmp_tbl.first..l_global_tmp_tbl.last
12972 LOOP
12973 INSERT INTO pa_fp_webadi_xface_tmp
12974 VALUES l_global_tmp_tbl(tmp);
12975 END LOOP;
12976 commit;*/
12977 FORALL tmp IN l_global_tmp_tbl.first..l_global_tmp_tbl.last
12978 INSERT INTO pa_fp_webadi_xface_tmp
12979 VALUES l_global_tmp_tbl(tmp);
12980 EXCEPTION
12981 WHEN OTHERS THEN
12982 RAISE;
12983 END;
12984 IF l_debug_mode = 'Y' THEN
12985 pa_debug.g_err_stage := 'Finished inserting into Global temparory table';
12986 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
12987 END IF;
12988 --Resetting the value of the Global PL/SQL table to NULL.
12989 l_global_tmp_tbl := null;
12990
12991 EXCEPTION
12992 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12993 l_msg_count := FND_MSG_PUB.count_msg;
12994 IF l_msg_count = 1 and x_msg_data IS NULL THEN
12995 PA_INTERFACE_UTILS_PUB.get_messages
12996 (p_encoded => FND_API.G_TRUE
12997 ,p_msg_index => 1
12998 ,p_msg_count => l_msg_count
12999 ,p_msg_data => l_msg_data
13000 ,p_data => l_data
13001 ,p_msg_index_out => l_msg_index_out);
13002 x_msg_data := l_data;
13003 x_msg_count := l_msg_count;
13004 ELSE
13005 x_msg_count := l_msg_count;
13006 END IF;
13007 x_return_status := FND_API.G_RET_STS_ERROR;
13008 IF l_debug_mode = 'Y' THEN
13009 pa_debug.reset_curr_function;
13010 END IF;
13011 RETURN;
13012
13013 -- Bug 5360205: Added NO_RA_EXC block.
13014 WHEN NO_RA_EXC THEN
13015 x_return_status := FND_API.G_RET_STS_SUCCESS;
13016 --bug#12703175
13017 INSERT INTO pa_fp_webadi_xface_tmp (BUDGET_VERSION_ID, PROJECT_ID, PROJECT_NAME, PROJECT_NUMBER, RECORD_VERSION_NUMBER)
13018 VALUES (l_budget_version_id, l_project_id, l_project_name, l_project_number, l_rec_version_number);
13019 IF l_debug_mode = 'Y' THEN
13020 pa_debug.reset_curr_function;
13021 END IF;
13022 RETURN;
13023
13024 WHEN OTHERS THEN
13025 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13026 x_msg_count := 1;
13027 x_msg_data := SQLERRM;
13028 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_webadi_pkg'
13029 ,p_procedure_name => 'insert_periodic_tmp_table');
13030 IF l_debug_mode = 'Y' THEN
13031 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
13032 pa_debug.write(l_module_name,pa_debug.g_err_stage,PA_FP_CONSTANTS_PKG.G_DEBUG_LEVEL3);
13033 pa_debug.reset_curr_function;
13034 END IF;
13035 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13036
13037
13038 END insert_periodic_tmp_table;
13039
13040
13041 END pa_fp_webadi_pkg;