[Home] [Help]
PACKAGE BODY: APPS.PA_FP_PLANNING_TRANSACTION_PUB
Source
1 PACKAGE body pa_fp_planning_transaction_pub AS
2 /* $Header: PAFPPTPB.pls 120.33.12010000.5 2008/09/22 02:38:26 kmaddi ship $ */
3 g_module_name VARCHAR2(100) := 'pa.plsql.PA_FP_PLANNING_TRANSACTION_PUB';
4
5 --This pl/sql table will be used by the method get_rbs_element_id. This should not be used in other procedures
6 -- l_ra_id_rbs_element_id_map_tbl PA_PLSQL_DATATYPES.IdTabTyp;
7
8 --This pl/sql table will be used by DUP_EXISTS. This should not be used in other APIs
9 l_task_id_rlm_id_dup_tbl PA_PLSQL_DATATYPES.IdTabTyp;
10
11 PROCEDURE print_msg(p_msg varchar2
12 ,p_module_name Varchar2 Default NULL) IS
13
14 --pragma autonomous_transaction ;
15 l_module_name Varchar2(100) := p_module_name;
16 BEGIN
17 If l_module_name is NULL Then
18 l_module_name := g_module_name;
19 End If;
20 pa_debug.write( l_module_name,p_msg,3);
21 /*
22 --dbms_output.put_line(p_msg);
23 INSERT INTO PA_FP_CALCULATE_LOG
24 (SESSIONID
25 ,SEQ_NUMBER
26 ,LOG_MESSAGE)
27 VALUES
28 (userenv('sessionid')
29 ,HR.PAY_US_GARN_FEE_RULES_S.nextval
30 ,substr(P_MSG,1,240)
31 );
32 COMMIT;
33 */
34 END print_msg;
35 --------------------------------
36 --User Defined Exceptions if any
37 --------------------------------
38 --Bug 4152749. The API is changed for the calculate API enhancements. Replaced the existing logic with the new logic to
39 --pass the old/new values for required resource attribs to calcualte API so that it takes care of manipulating the
40 --budget lines based on the changes.
41 --This is private procedure. This replaces the derive_parameters_for_calc_api in the previous API
42 --This API
43 ------1.Will detect the changes in the rbs_element_id and call the reporting lines API to negate the amounts
44 --------for the old rbs_element_id
45 ------2.Prepare pl/sql tbls containing Old/New Values for MFC Cost Type Id, Spread Curve Id, SP Fixed Date,
46 ------- Planning Start/End Dates and another pl/sql tbl which indicates whether a change in RLM has occurred or not.
47 ------3.Gives the new rbs_element_id for each input RA ID as output.
48 --The values for p_context are 'BUDGET', 'FORECAST', 'WORKPLAN' and 'TASK_ASSIGNMENT'
49 PROCEDURE Process_res_chg_Derv_calc_prms
50 (
51 p_context IN VARCHAR2
52 ,p_calling_context IN VARCHAR2 DEFAULT NULL -- Added for Bug 6856934
53 ,p_budget_version_id IN Pa_budget_versions.budget_version_id%TYPE
54 ,p_resource_assignment_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
55 ,p_resource_list_member_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
56 ,p_planning_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
57 ,p_planning_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
58 ,p_spread_curve_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
59 ,p_sp_fixed_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
60 ,p_txn_currency_code_tbl IN SYSTEM.PA_VARCHAR2_15_TBL_TYPE
61 ,p_inventory_item_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
62 ,p_expenditure_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type
63 ,p_person_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
64 ,p_job_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
65 ,p_organization_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
66 ,p_event_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type
67 ,p_expenditure_category_tbl IN SYSTEM.pa_varchar2_30_tbl_type
68 ,p_revenue_category_code_tbl IN SYSTEM.pa_varchar2_30_tbl_type
69 ,p_item_category_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
70 ,p_bom_resource_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
71 ,p_project_role_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
72 ,p_person_type_code_tbl IN SYSTEM.pa_varchar2_30_tbl_type
73 ,p_supplier_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
74 ,p_named_role_tbl IN SYSTEM.pa_varchar2_80_tbl_type
75 ,p_mfc_cost_type_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
76 ,p_fixed_date_sp_id IN pa_spread_curves_b.spread_curve_id%TYPE -- Added for Bug 3607061
77 ,px_total_qty_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
78 ,px_total_raw_cost_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
79 ,px_total_burdened_cost_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
80 ,px_total_revenue_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
81 ,px_raw_cost_rate_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
82 ,px_b_cost_rate_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
83 ,px_bill_rate_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
84 ,px_raw_cost_override_rate_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
85 ,px_b_cost_rate_override_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
86 ,px_bill_rate_override_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
87 ,x_rbs_element_id_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
88 ,x_txn_accum_header_id_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
89 ,x_mfc_cost_type_id_old_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
90 ,x_mfc_cost_type_id_new_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
91 ,x_spread_curve_id_old_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
92 ,x_spread_curve_id_new_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
93 ,x_sp_fixed_date_old_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
94 ,x_sp_fixed_date_new_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
95 ,x_plan_start_date_old_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
96 ,x_plan_start_date_new_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
97 ,x_plan_end_date_old_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
98 ,x_plan_end_date_new_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
99 ,x_rlm_id_change_flag_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_1_TBL_TYPE --File.Sql.39 bug 4440895
100 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
101 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
102 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
103 ) IS
104
105 CURSOR c_plan_ver_settings_csr
106 IS
107 SELECT nvl(pfo.cost_resource_list_id, nvl(pfo.revenue_resource_list_id, pfo.all_resource_list_id)) resource_list_id
108 ,pfo.rbs_version_id rbs_version_id
109 ,pbv.ci_id ci_id
110 ,pbv.etc_start_date etc_start_date
111 ,pbv.wp_version_flag wp_version_flag
112 FROM pa_proj_fp_options pfo
113 ,pa_budget_versions pbv
114 WHERE pfo.fin_plan_version_id=p_budget_version_id
115 AND pbv.budget_version_id=p_budget_version_id;
116
117
118 CURSOR c_data_in_db_csr(c_resource_asg_id pa_resource_assignments.resource_assignment_id%TYPE)
119 IS
120 SELECT sum(quantity) quantity
121 FROM pa_budget_lines
122 WHERE resource_assignment_id = c_resource_asg_id;
123 -- ORDER BY resource_assignment_id,txn_currency_code;
124
125 l_data_in_db_rec c_data_in_db_csr%ROWTYPE;
126
127 l_plan_ver_settings_rec c_plan_ver_settings_csr%ROWTYPE;
128
129 --Start of variables used for debugging
130 l_msg_count NUMBER :=0;
131 l_data VARCHAR2(2000);
132 l_msg_data VARCHAR2(2000);
133 l_error_msg_code VARCHAR2(30);
134 l_msg_index_out NUMBER;
135 l_return_status VARCHAR2(2000);
136 l_debug_mode VARCHAR2(30);
137 l_module_name VARCHAR2(100):='PAFPPTPB.Process_res_chg_Derv_calc_prms';
138 --End of variables used for debugging
139
140 l_ra_id_count NUMBER := 0;
141 l_rbs_map_index NUMBER:=0;
142
143 l_resource_class_code_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
144 l_rate_based_flag_tbl SYSTEM.pa_varchar2_1_tbl_type :=SYSTEM.pa_varchar2_1_tbl_type();
145 l_ra_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
146 l_person_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
147 l_job_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
148 l_organization_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
149 l_event_type_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
150 l_exp_category_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
151 l_rev_cat_code_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
152 l_inv_item_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
153 l_item_cat_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
154 l_bom_res_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
155 l_per_type_code_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
156 l_supplier_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
157 l_rbs_element_id_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
158 l_inventory_item_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
159 l_expenditure_type_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
160 l_person_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
161 l_job_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
162 l_organization_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
163 l_event_type_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
164 l_expenditure_category_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
165 l_revenue_category_code_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
166 l_item_category_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
167 l_bom_resource_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
168 l_project_role_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
169 l_person_type_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
170 l_supplier_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
171 l_txn_src_typ_code_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
172 l_exp_type_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
173 l_non_labor_resource_tbl SYSTEM.pa_varchar2_20_tbl_type :=SYSTEM.pa_varchar2_20_tbl_type();
174 l_non_labor_res_rbs_prm_tbl SYSTEM.pa_varchar2_20_tbl_type :=SYSTEM.pa_varchar2_20_tbl_type();
175 l_named_role_tbl SYSTEM.pa_varchar2_80_tbl_type :=SYSTEM.pa_varchar2_80_tbl_type();
176 l_project_role_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
177 l_named_role_rbs_prm_tbl SYSTEM.pa_varchar2_80_tbl_type := SYSTEM.pa_varchar2_80_tbl_type();
178 l_txn_source_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
179 l_res_list_member_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
180 l_txn_accum_header_id_prm_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
181 l_task_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
182 -- Added for Bug 3762278
183 l_project_name pa_projects_all.name%TYPE;
184 l_task_name pa_proj_elements.name%TYPE;
185 l_resource_name pa_resource_list_members.alias%TYPE;
186
187 l_task_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
188 l_rbs_elem_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
189 l_rbf_rbs_prm_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
190 l_res_class_code_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
191
192 l_txn_currency_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
193
194 --Bug 4083605
195 l_actuals_start_date pa_budget_lines.start_date%TYPE;
196 l_actuals_end_date pa_budget_lines.start_date%TYPE;
197
198 /*Bug fix: 5752337 */
199 CURSOR get_line_info (p_resource_assignment_id IN NUMBER) IS
200 SELECT ppa.name project_name
201 ,pt.name task_name
202 ,prl.alias resource_name
203 FROM pa_projects_all ppa
204 ,pa_proj_elements pt
205 ,pa_resource_list_members prl
206 ,pa_resource_assignments pra
207 WHERE pra.resource_assignment_id = p_resource_assignment_id
208 AND ppa.project_id = pra.project_id
209 AND pt.proj_element_id(+) = pra.task_id
210 AND prl.resource_list_member_id = pra.resource_list_member_id;
211
212 /* Bug fix:5759413 */
213 CURSOR get_rateOvrds ( p_resource_assignment_id IN NUMBER) IS
214 SELECT rtx.txn_raw_cost_rate_override
215 ,rtx.txn_burden_cost_rate_override
216 ,rtx.txn_bill_rate_override
217 FROM pa_resource_asgn_curr rtx
218 WHERE rtx.resource_assignment_id = p_resource_assignment_id;
219
220 l_rtx_rateOvrds_rec get_rateOvrds%ROWTYPE;
221
222 BEGIN
223
224 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
225 l_debug_mode := NVL(l_debug_mode, 'N');
226 x_msg_count := 0;
227 x_return_status := FND_API.G_RET_STS_SUCCESS;
228 IF l_debug_mode = 'Y' THEN
229 PA_DEBUG.Set_Curr_Function( p_function => 'plan_txn_pub.drv_prms_for_calc',
230 p_debug_mode => l_debug_mode );
231 END IF;
232 -----------------------------------------------------------------------------
233 -- Validating input paramters p_context and p_budget_version_id vannot be null
234 -----------------------------------------------------------------------------
235 IF l_debug_mode = 'Y' THEN
236 pa_debug.g_err_stage:='Validating input parameters';
237 print_msg(pa_debug.g_err_stage,l_module_name);
238 END IF;
239
240 IF ((p_context IS NULL) OR (p_budget_version_id IS NULL)) THEN
241 IF l_debug_mode = 'Y' THEN
242 pa_debug.g_err_stage:='Required parameter is null - p_context : ' || p_context;
243 pa_debug.write(l_module_name ,pa_debug.g_err_stage,5);
244
245 pa_debug.g_err_stage:='Required parameter is null - p_budget_version_id : ' || p_budget_version_id;
246 pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
247 END IF;
248 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
249 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
250 p_token1 => 'PROCEDURENAME',
251 p_value1 => l_module_name);
252 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
253 END IF;
254
255 l_ra_id_count := p_resource_assignment_id_tbl.COUNT;
256
257 IF l_ra_id_count = 0 THEN
258 IF l_debug_mode = 'Y' THEN
259 pa_debug.g_err_stage:='Validating input parameters - No resource assignment id is passed -raising excp.';
260 print_msg(pa_debug.g_err_stage,l_module_name);
261 END IF;
262 IF l_debug_mode = 'Y' THEN
263 pa_debug.reset_curr_function;
264 END IF;
265 RETURN;
266 END IF;
267 --dbms_output.put_line('d2');
268 --Extending the output pl/sql tables
269 IF l_debug_mode = 'Y' THEN
270 pa_debug.g_err_stage:='Extending input params';
271 print_msg(pa_debug.g_err_stage,l_module_name);
272 END IF;
273 x_rbs_element_id_tbl := SYSTEM.PA_NUM_TBL_TYPE();
274 x_txn_accum_header_id_tbl := SYSTEM.PA_NUM_TBL_TYPE();
275 x_mfc_cost_type_id_old_tbl := SYSTEM.PA_NUM_TBL_TYPE();
276 x_mfc_cost_type_id_new_tbl := SYSTEM.PA_NUM_TBL_TYPE();
277 x_spread_curve_id_old_tbl := SYSTEM.PA_NUM_TBL_TYPE();
278 x_spread_curve_id_new_tbl := SYSTEM.PA_NUM_TBL_TYPE();
279 x_sp_fixed_date_old_tbl := SYSTEM.PA_DATE_TBL_TYPE();
280 x_sp_fixed_date_new_tbl := SYSTEM.PA_DATE_TBL_TYPE();
281 x_plan_start_date_old_tbl := SYSTEM.PA_DATE_TBL_TYPE();
282 x_plan_start_date_new_tbl := SYSTEM.PA_DATE_TBL_TYPE();
283 x_plan_end_date_old_tbl := SYSTEM.PA_DATE_TBL_TYPE();
284 x_plan_end_date_new_tbl := SYSTEM.PA_DATE_TBL_TYPE();
285 x_rlm_id_change_flag_tbl := SYSTEM.pa_varchar2_1_tbl_type();
286
287 x_rbs_element_id_tbl.extend(p_resource_assignment_id_tbl.last);
288 x_txn_accum_header_id_tbl.extend(p_resource_assignment_id_tbl.last);
289 x_mfc_cost_type_id_old_tbl.extend(p_resource_assignment_id_tbl.last);
290 x_mfc_cost_type_id_new_tbl.extend(p_resource_assignment_id_tbl.last);
291 x_spread_curve_id_old_tbl.extend(p_resource_assignment_id_tbl.last);
292 x_spread_curve_id_new_tbl.extend(p_resource_assignment_id_tbl.last);
293 x_sp_fixed_date_old_tbl.extend(p_resource_assignment_id_tbl.last);
294 x_sp_fixed_date_new_tbl.extend(p_resource_assignment_id_tbl.last);
295 x_plan_start_date_old_tbl.extend(p_resource_assignment_id_tbl.last);
296 x_plan_start_date_new_tbl.extend(p_resource_assignment_id_tbl.last);
297 x_plan_end_date_old_tbl.extend(p_resource_assignment_id_tbl.last);
298 x_plan_end_date_new_tbl.extend(p_resource_assignment_id_tbl.last);
299 x_rlm_id_change_flag_tbl.extend(p_resource_assignment_id_tbl.last);
300
301 --Open the plan version cursor to get the plan version settings. This will be used in the later part
302 --of the code
303 OPEN c_plan_ver_settings_csr;
304 FETCH c_plan_ver_settings_csr INTO l_plan_ver_settings_rec;
305 IF c_plan_ver_settings_csr%NOTFOUND THEN
306
307 IF l_debug_mode = 'Y' THEN
308 pa_debug.g_err_stage:='0 rows returned by c_plan_ver_settings_csr';
309 pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
310 END IF;
311 CLOSE c_plan_ver_settings_csr;
312 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
313
314 END IF;
315 CLOSE c_plan_ver_settings_csr;
316 --dbms_output.put_line('6.1');
317
318 ----------------------------------------------------------------------------------------------------------
319 --The logic below is placed to pass the data required by the calculate API. The tbls containing Old/New
320 --values for mfc cost type id, plan start/end dates, spread curve and sp fixed dates are prepared. A tbl
321 --to indicate a changed in rbs mapping is also prepared
322 ---------------------------------------------------------------------------------------------------------
323 l_txn_currency_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
324
325 l_inventory_item_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
326 l_expenditure_type_tbl.extend(p_resource_assignment_id_tbl.COUNT);
327 l_person_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
328 l_job_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
329 l_organization_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
330 l_event_type_tbl.extend(p_resource_assignment_id_tbl.COUNT);
331 l_expenditure_category_tbl.extend(p_resource_assignment_id_tbl.COUNT);
332 l_revenue_category_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
333 l_item_category_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
334 l_bom_resource_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
335 l_project_role_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
336 l_person_type_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
337 l_supplier_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
338 l_named_role_tbl.extend(p_resource_assignment_id_tbl.COUNT);
339 -- l_rate_func_curr_code_tbl
340 l_resource_class_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
341 l_rate_based_flag_tbl.extend(p_resource_assignment_id_tbl.COUNT);
342 l_non_labor_resource_tbl.extend(p_resource_assignment_id_tbl.COUNT);
343 l_task_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
344
345 --Added the check for FND_API.G_MISS_XXX in the below decodes as the UI can pass input parameters
346 --as FND_API.G_MISS_XXX even if the existing value of the attribute is NULL. NOTE: The input parameter
347 --to update_planning_transactions should be NULL if the corresponding column in pa_resource_assignments
348 --should not be changed and the input parameter should be FND_API.G_MISS_XXX if thhe corresponding column
349 --in pa_resource_assignments should be nulled out.
350 FOR i IN p_resource_assignment_id_tbl.FIRST .. p_resource_assignment_id_tbl.LAST LOOP
351
352 --dbms_output.put_line('6.2 '||p_resource_assignment_id_tbl(i) );
353
354 IF l_debug_mode = 'Y' THEN
355
356 pa_debug.g_err_stage:='p_project_role_id_tbl('||i||') is '||p_project_role_id_tbl(i);
357 print_msg(pa_debug.g_err_stage,l_module_name);
358 pa_debug.g_err_stage:='p_resource_list_member_id_tbl('||i||') is '||p_resource_list_member_id_tbl(i);
359 print_msg(pa_debug.g_err_stage,l_module_name);
360 pa_debug.g_err_stage:='p_planning_start_date_tbl('||i||') is '||p_planning_start_date_tbl(i);
361 print_msg(pa_debug.g_err_stage,l_module_name);
362 pa_debug.g_err_stage:='p_planning_end_date_tbl('||i||') is '||p_planning_end_date_tbl(i);
363 print_msg(pa_debug.g_err_stage,l_module_name);
364 pa_debug.g_err_stage:='p_spread_curve_id_tbl('||i||') is '||p_spread_curve_id_tbl(i);
365 print_msg(pa_debug.g_err_stage,l_module_name);
366 pa_debug.g_err_stage:='p_sp_fixed_date_tbl('||i||') is '||p_sp_fixed_date_tbl(i);
367 print_msg(pa_debug.g_err_stage,l_module_name);
368 pa_debug.g_err_stage:='p_mfc_cost_type_id_tbl('||i||') is '||p_mfc_cost_type_id_tbl(i);
369 print_msg(pa_debug.g_err_stage,l_module_name);
370
371
372 END IF;
373
374 --IF NULLs are passed for all the resource attributes, based on which the re-spread/re-derivation of amts will happen, then
375 --NULLs can be passed for both OLD/NEW resource attr parameters of calculate API to indicate that none of the resource
376 --attrs have changed.
377 IF p_project_role_id_tbl(i) IS NULL AND
378 p_resource_list_member_id_tbl(i) IS NULL AND
379 p_planning_start_date_tbl(i) IS NULL AND
380 p_planning_end_date_tbl(i) IS NULL AND
381 p_spread_curve_id_tbl(i) IS NULL AND
382 p_sp_fixed_date_tbl(i) IS NULL AND
383 p_mfc_cost_type_id_tbl(i) IS NULL THEN
384
385 IF l_debug_mode = 'Y' THEN
386 pa_debug.g_err_stage:='All the resource attrs passed are NULL and hence No change. Not firing the Select';
387 print_msg(pa_debug.g_err_stage,l_module_name);
388 END IF;
389
390 x_mfc_cost_type_id_old_tbl(i) := NULL;
391 x_mfc_cost_type_id_new_tbl(i) := NULL;
392 x_spread_curve_id_old_tbl(i) := NULL;
393 x_spread_curve_id_new_tbl(i) := NULL;
394 x_sp_fixed_date_old_tbl(i) := NULL;
395 x_sp_fixed_date_new_tbl(i) := NULL;
396 x_plan_start_date_old_tbl(i) := NULL;
397 x_plan_start_date_new_tbl(i) := NULL;
398 x_plan_end_date_old_tbl(i) := NULL;
399 x_plan_end_date_new_tbl(i) := NULL;
400 x_rlm_id_change_flag_tbl(i) := 'N';
401 --select the rbs_element_id and txn accum header id so as to pass them to update_planning_transactions API
402 SELECT rbs_element_id,
403 txn_accum_header_id
404 INTO x_rbs_element_id_tbl(i),
405 x_txn_accum_header_id_tbl(i)
406 FROM pa_resource_assignments
407 WHERE resource_assignment_id = p_resource_assignment_id_tbl(i);
408
409 --If Non Null values are passed then the existing values should be compared with the passed values to find out
410 --the changes. The Old Values should be passed in _old_.._tab parameters of calculate API and new values should
411 --be passed in _new_.._tabl parameters of calculate API.
412 ELSE
413
414 SELECT
415 DECODE(DECODE(NVL(p_project_role_id_tbl(i),project_role_id),
416 FND_API.G_MISS_NUM, decode(project_role_id,null,0,1),
417 project_role_id,0,
418 1)+
419 DECODE(NVL(p_resource_list_member_id_tbl(i),resource_list_member_id),
420 FND_API.G_MISS_NUM, decode(resource_list_member_id,null,0,1),
421 resource_list_member_id, 0,
422 1),
423 0, 'N',
424 'Y'),--Indicates whether the rbs mapping api should be called or not
425 mfc_cost_type_id,
426 NVL(p_mfc_cost_type_id_tbl(i),mfc_cost_type_id),
427 spread_curve_id,
428 NVL(p_spread_curve_id_tbl(i),spread_curve_id),
429 sp_fixed_date,
430 DECODE(nvl(p_spread_curve_id_tbl(i),spread_curve_id),
431 p_fixed_date_sp_id,DECODE(DECODE(p_sp_fixed_date_tbl(i),
432 FND_API.G_MISS_DATE,to_date(null),
433 nvl(p_sp_fixed_date_tbl(i),sp_fixed_date))
434 ,to_date(null),DECODE (p_planning_start_date_tbl(i),
435 FND_API.G_MISS_DATE,to_date(null),
436 nvl(p_planning_start_date_tbl(i),planning_start_date))
437 ,nvl(p_sp_fixed_date_tbl(i),sp_fixed_date))
438 ,to_date(null)),
439 planning_start_date,
440 NVL(p_planning_start_date_tbl(i),planning_start_date),
441 planning_end_date,
442 NVL(p_planning_end_date_tbl(i),planning_end_date),
443 DECODE (p_txn_currency_code_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_txn_currency_code_tbl(i),pbl.txn_currency_code)),
444 DECODE (p_inventory_item_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_inventory_item_id_tbl(i),inventory_item_id)) ,
445 DECODE (p_expenditure_type_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_expenditure_type_tbl(i),expenditure_type)),
446 DECODE (p_person_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_person_id_tbl(i),person_id)) ,
447 DECODE (p_job_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_job_id_tbl(i),job_id)) ,
448 DECODE (p_organization_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_organization_id_tbl(i),organization_id)) ,
449 DECODE (p_event_type_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_event_type_tbl(i),event_type)) ,
450 DECODE (p_expenditure_category_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_expenditure_category_tbl(i),expenditure_category)) ,
451 DECODE (p_revenue_category_code_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_revenue_category_code_tbl(i),revenue_category_code)) ,
452 DECODE (p_item_category_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_item_category_id_tbl(i),item_category_id)) ,
453 DECODE (p_bom_resource_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_bom_resource_id_tbl(i),bom_resource_id)) ,
454 DECODE (p_project_role_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_project_role_id_tbl(i),project_role_id)) ,
455 DECODE (p_person_type_code_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_person_type_code_tbl(i),person_type_code)) ,
456 DECODE (p_supplier_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_supplier_id_tbl(i),supplier_id)),
457 DECODE (p_named_role_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_named_role_tbl(i),named_role )),
458 resource_class_code,
459 rate_based_flag,
460 rbs_element_id,
461 non_labor_resource,
462 txn_accum_header_id,
463 task_id
464 INTO
465 x_rlm_id_change_flag_tbl(i),
466 x_mfc_cost_type_id_old_tbl(i),
467 x_mfc_cost_type_id_new_tbl(i),
468 x_spread_curve_id_old_tbl(i),
469 x_spread_curve_id_new_tbl(i),
470 x_sp_fixed_date_old_tbl(i),
471 x_sp_fixed_date_new_tbl(i),
472 x_plan_start_date_old_tbl(i),
473 x_plan_start_date_new_tbl(i),
474 x_plan_end_date_old_tbl(i),
475 x_plan_end_date_new_tbl(i),
476 l_txn_currency_code_tbl(i),
477 l_inventory_item_id_tbl(i),
478 l_expenditure_type_tbl(i),
479 l_person_id_tbl(i),
480 l_job_id_tbl(i),
481 l_organization_id_tbl(i),
482 l_event_type_tbl(i),
483 l_expenditure_category_tbl(i),
484 l_revenue_category_code_tbl(i),
485 l_item_category_id_tbl(i),
486 l_bom_resource_id_tbl(i),
487 l_project_role_id_tbl(i),
488 l_person_type_code_tbl(i),
489 l_supplier_id_tbl(i),
490 l_named_role_tbl(i),
491 l_resource_class_code_tbl(i),
492 l_rate_based_flag_tbl(i),
493 x_rbs_element_id_tbl(i),
494 l_non_labor_resource_tbl(i),
495 x_txn_accum_header_id_tbl(i),
496 l_task_id_tbl(i)
497 FROM pa_resource_assignments pra,
498 (SELECT pra.resource_assignment_id
499 ,pbl.txn_currency_code
500 FROM pa_budget_lines pbl,
501 pa_resource_assignments pra
502 WHERE pbl.resource_assignment_id(+)=pra.resource_assignment_id
503 AND pra.resource_assignment_id=p_resource_assignment_id_tbl(i)
504 AND ROWNUM=1) pbl
505 WHERE pra.resource_assignment_id=p_resource_assignment_id_tbl(i);
506
507 IF l_debug_mode = 'Y' THEN
508
509 pa_debug.g_err_stage:='x_rlm_id_change_flag_tbl('||i||') is '||x_rlm_id_change_flag_tbl(i);
510 print_msg(pa_debug.g_err_stage,l_module_name);
511 pa_debug.g_err_stage:='x_mfc_cost_type_id_old_tbl('||i||') is '||x_mfc_cost_type_id_old_tbl(i);
512 print_msg(pa_debug.g_err_stage,l_module_name);
513 pa_debug.g_err_stage:='x_mfc_cost_type_id_new_tbl('||i||') is '||x_mfc_cost_type_id_new_tbl(i);
514 print_msg(pa_debug.g_err_stage,l_module_name);
515 pa_debug.g_err_stage:='x_spread_curve_id_old_tbl('||i||') is '||x_spread_curve_id_old_tbl(i);
516 print_msg(pa_debug.g_err_stage,l_module_name);
517 pa_debug.g_err_stage:='x_spread_curve_id_new_tbl('||i||') is '||x_spread_curve_id_new_tbl(i);
518 print_msg(pa_debug.g_err_stage,l_module_name);
519 pa_debug.g_err_stage:='x_sp_fixed_date_old_tbl('||i||') is '||x_sp_fixed_date_old_tbl(i);
520 print_msg(pa_debug.g_err_stage,l_module_name);
521 pa_debug.g_err_stage:='x_sp_fixed_date_new_tbl('||i||') is '||x_sp_fixed_date_new_tbl(i);
522 print_msg(pa_debug.g_err_stage,l_module_name);
523 pa_debug.g_err_stage:='x_plan_start_date_old_tbl('||i||') is '||x_plan_start_date_old_tbl(i);
524 print_msg(pa_debug.g_err_stage,l_module_name);
525 pa_debug.g_err_stage:='x_plan_start_date_new_tbl('||i||') is '||x_plan_start_date_new_tbl(i);
526 print_msg(pa_debug.g_err_stage,l_module_name);
527 pa_debug.g_err_stage:='x_plan_end_date_old_tbl('||i||') is '||x_plan_end_date_old_tbl(i);
528 print_msg(pa_debug.g_err_stage,l_module_name);
529 pa_debug.g_err_stage:='x_plan_end_date_new_tbl('||i||') is '||x_plan_end_date_new_tbl(i);
530 print_msg(pa_debug.g_err_stage,l_module_name);
531
532
533 END IF;--IF l_debug_mode = 'Y' THEN
534
535 --Added Validation for planning_start_date and planning end date
536 IF ((x_plan_start_date_new_tbl(i)=FND_API.G_MISS_DATE) OR
537 (x_plan_end_date_new_tbl(i) =FND_API.G_MISS_DATE) OR
538 (NVL(x_plan_start_date_new_tbl(i),trunc(sysdate))>NVL(x_plan_end_date_new_tbl(i),trunc(sysdate)))) THEN
539
540 IF l_debug_mode = 'Y' THEN
541
542 pa_debug.g_err_stage:='Invalid Planning Start/End Dates';
543 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
544
545 pa_debug.g_err_stage:='x_plan_start_date_new_tbl('||i||') is '|| x_plan_start_date_new_tbl(i);
546 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
547
548 pa_debug.g_err_stage:='x_plan_end_date_new_tbl('||i||') is '|| x_plan_end_date_new_tbl(i);
549 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
550
551 END IF;
552 /*Bug Fix:5752337: The meaningful message should be shown when dates are not entered properly
553 * made use of exisisting message PA_FP_PLAN_START_END_DATE_ERR which is used in the spread api
554 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
555 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
556 */
557 OPEN get_line_info(p_resource_assignment_id_tbl(i));
558 FETCH get_line_info
559 INTO l_project_name
560 , l_task_name
561 , l_resource_name;
562 CLOSE get_line_info;
563 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
564 ,p_msg_name => 'PA_FP_PLAN_START_END_DATE_ERR'
565 ,p_token1 => 'L_PROJECT_NAME'
566 ,p_value1 => l_project_name
567 ,p_token2 => 'L_TASK_NAME'
568 ,p_value2 => l_task_name
569 ,p_token3 => 'L_RESOURCE_NAME'
570 ,p_value3 => l_resource_name
571 ,p_token4 => 'L_LINE_START_DATE'
572 ,p_value4 => x_plan_start_date_new_tbl(i)
573 ,p_token5 => 'L_LINE_END_DATE'
574 ,p_value5 => x_plan_end_date_new_tbl(i)
575 );
576 /* end of bug fix: 5752337 */
577
578
579 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
580 END IF;--IF ((x_plan_start_date_new_tbl(i)=FND_API.G_MISS_DATE) OR
581
582 --Bug 4083605. This block of code makes sure that the planning start date is not changed to a date
583 --which falls after the date where actuals exist. Similar validations are done for planning end date too
584
585 --Bug 4448581
586 IF NVL(l_plan_ver_settings_rec.wp_version_flag,'N') <> 'Y' THEN
587
588 IF l_plan_ver_settings_rec.etc_start_date IS NOT NULL AND
589 (x_plan_start_date_new_tbl(i) <> x_plan_start_date_old_tbl(i) OR
590 x_plan_end_date_new_tbl(i) <> x_plan_end_date_old_tbl(i)) THEN
591
592 IF l_debug_mode = 'Y' THEN
593
594 pa_debug.g_err_stage:='Planning Start/End dates have changed. Validating with Etc Start date';
595 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
596
597 END IF;
598
599 SELECT min(start_date), max(end_date)
600 INTO l_actuals_start_date, l_actuals_end_date
601 FROM pa_budget_lines
602 WHERE budget_version_id = p_budget_version_id
603 AND resource_assignment_id = p_resource_assignment_id_tbl(i)
604 AND end_date < l_plan_ver_settings_rec.etc_start_date;
605
606 IF l_debug_mode = 'Y' THEN
607
608 pa_debug.g_err_stage:='x_plan_start_date_new_tbl('||i||') is '||x_plan_start_date_new_tbl(i);
609 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
610 pa_debug.g_err_stage:='x_plan_start_date_old_tbl('||i||') is '||x_plan_start_date_old_tbl(i);
611 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
612 pa_debug.g_err_stage:='l_actuals_start_date is '||l_actuals_start_date;
613 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
614 pa_debug.g_err_stage:='x_plan_end_date_new_tbl('||i||') is '||x_plan_end_date_new_tbl(i);
615 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
616 pa_debug.g_err_stage:='x_plan_end_date_old_tbl('||i||') is '||x_plan_end_date_old_tbl(i);
617 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
618 pa_debug.g_err_stage:='l_actuals_end_date is '||l_actuals_end_date;
619 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
620
621 END IF;
622
623 --If either x_plan_start_date_new_tbl or x_plan_end_date_start_tbl is not null then all
624 --x_plan_start.end_date_new/old_tbls will be not null
625 IF ( x_plan_start_date_new_tbl(i) <> x_plan_start_date_old_tbl(i) AND
626 x_plan_start_date_new_tbl(i) > LEAST(NVL(l_actuals_start_date,x_plan_start_date_new_tbl(i) + 1),l_plan_ver_settings_rec.etc_start_date) ) OR
627 ( x_plan_end_date_new_tbl(i) <> x_plan_end_date_old_tbl(i) AND
628 x_plan_end_date_new_tbl(i) < GREATEST(NVL(l_actuals_end_date,x_plan_end_date_new_tbl(i) - 1),l_plan_ver_settings_rec.etc_start_date) ) THEN
629
630 IF ( x_plan_start_date_new_tbl(i) <> x_plan_start_date_old_tbl(i) AND
631 x_plan_start_date_new_tbl(i) > LEAST(NVL(l_actuals_start_date,x_plan_start_date_new_tbl(i) + 1),l_plan_ver_settings_rec.etc_start_date) ) THEN
632
633 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
634 p_msg_name => 'PA_FP_PLAN_ST_DT_CHG_ACTL_EXST');
635 END IF;
636
637 IF ( x_plan_end_date_new_tbl(i) <> x_plan_end_date_old_tbl(i) AND
638 x_plan_end_date_new_tbl(i) < GREATEST(NVL(l_actuals_end_date,x_plan_end_date_new_tbl(i) - 1),l_plan_ver_settings_rec.etc_start_date) ) THEN
639
640 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
641 p_msg_name => 'PA_FP_PLAN_DT_CHG_ACTL_EXST');
642 END IF;
643
644 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
645
646 END IF;
647
648
649 END IF;--IF l_plan_ver_settings_rec.etc_start_date IS NOT NULL AND
650
651 END IF; -- If not a workplan version
652
653 --Added Validation for sp_fixed_date cannot be null and to be between planning_start_date and
654 --planning end date for fixed date spread curve. -- Added for Bug 3607061
655 --Modified Logic below for Bug 3762278 -- l_spread_curve_id_tbl is the final value of
656 --spread curve id that will be existing in db
657 IF (x_spread_curve_id_new_tbl(i) = p_fixed_date_sp_id) THEN
658
659 IF p_sp_fixed_date_tbl(i) = FND_API.G_MISS_DATE THEN
660
661 IF l_debug_mode = 'Y' THEN
662 pa_debug.g_err_stage:='Error - cannot nullify sp_fixed_date for Fixed Date Spread curve';
663 print_msg(pa_debug.g_err_stage,l_module_name);
664 END IF;
665
666 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
667 p_msg_name => 'PA_FP_SP_FIXED_DATE_NULL');
668 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
669
670 -- Added for bug 4247427. Fixed Date cannot be less than the etc_start_date
671 ELSIF (l_plan_ver_settings_rec.etc_start_date IS NOT NULL AND (x_sp_fixed_date_new_tbl(i) BETWEEN x_plan_start_date_new_tbl(i) AND x_plan_end_date_new_tbl(i))) THEN
672 IF (x_sp_fixed_date_new_tbl(i) < l_plan_ver_settings_rec.etc_start_date) THEN
673 IF l_debug_mode = 'Y' THEN
674 pa_debug.g_err_stage :='Sp Fixed Date less than ETC Start date';
675 print_msg(pa_debug.g_err_stage,l_module_name);
676 END IF;
677 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
678 p_msg_name => 'PA_FP_SP_FIXED_DATE_LESS');
679 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
680 END IF; -- x_sp_fixed_date_new_tbl(i) < l_plan_ver_settings_rec.etc_start_date
681
682 ELSIF (x_sp_fixed_date_new_tbl(i) NOT BETWEEN x_plan_start_date_new_tbl(i) AND x_plan_end_date_new_tbl(i)) THEN
683
684 IF l_debug_mode = 'Y' THEN
685 pa_debug.g_err_stage :='Sp Fixed Date not between planning start date and End Date';
686 print_msg(pa_debug.g_err_stage,l_module_name);
687 END IF;
688
689 -- Added for Bug 3762278
690 -- fetching details for message tokens
691 BEGIN
692 SELECT ppa.name project_name
693 ,pt.name task_name
694 ,prl.alias resource_name
695 INTO l_project_name
696 ,l_task_name
697 ,l_resource_name
698 FROM pa_projects_all ppa
699 ,pa_proj_elements pt
700 ,pa_resource_list_members prl
701 ,pa_resource_assignments pra
702 WHERE pra.resource_assignment_id = p_resource_assignment_id_tbl(i)
703 AND ppa.project_id = pra.project_id
704 AND pt.proj_element_id(+) = pra.task_id
705 /* Bug fix:4200168 AND prl.resource_list_member_id(+) = pra.resource_list_member_id;*/
706 AND prl.resource_list_member_id = pra.resource_list_member_id;
707 EXCEPTION
708 WHEN NO_DATA_FOUND THEN
709 IF l_debug_mode = 'Y' THEN
710 pa_debug.g_err_stage :='Invalid Data PA_FP_FIXED_DATE_NOT_MATCH will have no tokens';
711 print_msg(pa_debug.g_err_stage,l_module_name);
712 END IF;
713 NULL;
714 END;
715
716 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
717 p_msg_name => 'PA_FP_FIXED_DATE_NOT_MATCH',
718 p_token1 => 'L_PROJECT_NAME' ,
719 p_value1 => l_project_name,
720 p_token2 => 'L_TASK_NAME',
721 p_value2 => l_task_name,
722 p_token3 => 'L_RESOURCE_NAME',
723 p_value3 => l_resource_name,
724 p_token4 => 'L_LINE_START_DATE',
725 p_value4 => x_plan_start_date_new_tbl(i),
726 p_token5 => 'L_LINE_END_DATE',
727 p_value5 => x_plan_start_date_old_tbl(i));
728 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
729
730 END IF;--IF x_sp_fixed_date_new_tbl(i) = FND_API.G_MISS_DATE THEN
731
732 ELSE
733 -- if the Final Value of spread curve id is either null or not equal to fixed date
734 -- spread curve then the sp fixed date should be nulled out if it is not already null.
735 IF l_debug_mode = 'Y' THEN
736 pa_debug.g_err_stage:='Spread curve id not chosen to be updated and value in db for..';
737 print_msg(pa_debug.g_err_stage,l_module_name);
738 pa_debug.g_err_stage:='..spread curve id is either null or <> to fixed date spread curve id';
739 print_msg(pa_debug.g_err_stage,l_module_name);
740 END IF;
741
742 IF x_sp_fixed_date_old_tbl(i) IS NOT NULL THEN
743
744 x_sp_fixed_date_new_tbl(i) := FND_API.G_MISS_DATE;
745
746 ELSE
747
748 x_sp_fixed_date_new_tbl(i) := NULL;
749
750 END IF;
751
752 END IF;--IF (x_spread_curve_id_new_tbl(i) = p_fixed_date_sp_id) THEN
753
754
755 --RBS element Id should be re-derived if the rlm id/Project Role Id have changed.
756 --dbms_output.put_line('7');
757 IF l_debug_mode = 'Y' THEN
758 pa_debug.g_err_stage:='Finding out whether the RBS re-derivation is required or NOT';
759 print_msg(pa_debug.g_err_stage,l_module_name);
760 END IF;
761
762 IF x_rlm_id_change_flag_tbl(i)='Y' THEN
763
764 -- An rbs element id can change for a planning transaction only in Task Assignments Flow.
765 IF p_context <> PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
766
767 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
768 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
769 p_token1 => 'PROCEDURENAME',
770 p_value1 => 'PROCESS_RES_CHG_DERV_CALC_PRMS',
771 p_token2 => 'STAGE',
772 p_value2 => 'RBS Elem Id change in NON TA context');
773 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
774
775 END IF;
776 --dbms_output.put_line('7.1');
777
778 l_rbs_map_index:=l_rbs_map_index+1;
779
780 l_ra_id_rbs_prm_tbl.extend(1);
781 l_person_id_rbs_prm_tbl.extend(1);
782 l_job_id_rbs_prm_tbl.extend(1);
783 l_organization_id_rbs_prm_tbl.extend(1);
784 l_event_type_rbs_prm_tbl.extend(1);
785 l_exp_category_rbs_prm_tbl.extend(1);
786 l_rev_cat_code_rbs_prm_tbl.extend(1);
787 l_inv_item_id_rbs_prm_tbl.extend(1);
788 l_item_cat_id_rbs_prm_tbl.extend(1);
789 l_bom_res_id_rbs_prm_tbl.extend(1);
790 l_per_type_code_rbs_prm_tbl.extend(1);
791 l_supplier_id_rbs_prm_tbl.extend(1);
792 l_txn_src_typ_code_rbs_prm_tbl.extend(1);
793 l_exp_type_rbs_prm_tbl.extend(1);
794 l_project_role_id_rbs_prm_tbl.extend(1);
795 l_named_role_rbs_prm_tbl.extend(1);
796 l_non_labor_res_rbs_prm_tbl.extend(1);
797
798 --These pl/sql tbls are required as they have to be passed to the delete_planning_transactions API for
799 --deleting the PJI data for the planning transactions for which the rbs element id has changed
800 l_task_id_rbs_prm_tbl.extend(1);
801 l_rbs_elem_id_rbs_prm_tbl.extend(1);
802 l_rbf_rbs_prm_tbl.extend(1);
803 l_res_class_code_rbs_prm_tbl.extend(1);
804 --dbms_output.put_line('7.2');
805
806 l_ra_id_rbs_prm_tbl(l_rbs_map_index) := p_resource_assignment_id_tbl(i);
807 l_person_id_rbs_prm_tbl(l_rbs_map_index) := l_person_id_tbl(i);
808 l_job_id_rbs_prm_tbl(l_rbs_map_index) := l_job_id_tbl(i);
809 l_organization_id_rbs_prm_tbl(l_rbs_map_index) := l_organization_id_tbl(i);
810 l_event_type_rbs_prm_tbl(l_rbs_map_index) := l_event_type_tbl(i);
811 l_exp_category_rbs_prm_tbl(l_rbs_map_index) := l_expenditure_category_tbl(i);
812 l_rev_cat_code_rbs_prm_tbl(l_rbs_map_index) := l_revenue_category_code_tbl(i);
813 l_inv_item_id_rbs_prm_tbl(l_rbs_map_index) := l_inventory_item_id_tbl(i);
814 l_item_cat_id_rbs_prm_tbl(l_rbs_map_index) := l_item_category_id_tbl(i);
815 l_bom_res_id_rbs_prm_tbl(l_rbs_map_index) := l_bom_resource_id_tbl(i);
816 l_per_type_code_rbs_prm_tbl(l_rbs_map_index) := l_person_type_code_tbl(i);
817 l_supplier_id_rbs_prm_tbl(l_rbs_map_index) := l_supplier_id_tbl(i);
818 l_txn_src_typ_code_rbs_prm_tbl(l_rbs_map_index) := 'RES_ASSIGNMENT';
819 l_exp_type_rbs_prm_tbl(l_rbs_map_index) := l_expenditure_type_tbl(i);
820 l_project_role_id_rbs_prm_tbl(l_rbs_map_index) := l_project_role_id_tbl(i);
821 l_named_role_rbs_prm_tbl(l_rbs_map_index) := l_named_role_tbl(i);
822 l_non_labor_res_rbs_prm_tbl(l_rbs_map_index) := l_non_labor_resource_tbl(i);
823
824 l_task_id_rbs_prm_tbl(l_rbs_map_index) := l_task_id_tbl(i);
825 l_res_class_code_rbs_prm_tbl(l_rbs_map_index) := l_resource_class_code_tbl(i);
826 --Please note that here rbs element id for which the pji data has to deleted should be passed.
827 --x_rbs_element_id_tbl contains the old rbs element id and the new rbs element id will be derived only in the
828 --later part of the code
829 l_rbs_elem_id_rbs_prm_tbl(l_rbs_map_index) := x_rbs_element_id_tbl(i);
830 l_rbf_rbs_prm_tbl(l_rbs_map_index) := l_rate_based_flag_tbl(i);
831 --dbms_output.put_line('7.3');
832
833 /* Bug fix: 5759413 */
834 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
835 l_rtx_rateOvrds_rec := NULL;
836 OPEN get_rateOvrds (p_resource_assignment_id_tbl(i));
837 FETCH get_rateOvrds INTO l_rtx_rateOvrds_rec;
838 CLOSE get_rateOvrds;
839 END IF;
840
841 -- An rbs element id can change for a planning transaction only in Task Assignments Flow.
842 -- Resource list member id and project role id are the only two attributes of a planning
843 -- transaction, which on undergoing a change from the UI, can change the rbs element id
844 -- of the planning transaction. Quantities and amounts to be passed to calculate api
845 -- is derved as per the logic below
846 -- Details - /padev/pa/11.5/docs/CalcAPI_Behavior_Document2.doc
847 IF l_debug_mode = 'Y' THEN
848 pa_debug.g_err_stage:='Deriving Amts/Qty for rbs element id change';
849 print_msg(pa_debug.g_err_stage,l_module_name);
850 END IF;
851
852 IF px_total_qty_tbl(i) IS NOT NULL AND px_total_qty_tbl(i) <> FND_API.G_MISS_NUM THEN
853
854 IF l_debug_mode = 'Y' THEN
855 pa_debug.g_err_stage:='RBS Input Quantity Exists Set Amts to NULL';
856 print_msg(pa_debug.g_err_stage,l_module_name);
857 END IF;
858
859 px_total_raw_cost_tbl(i) := NULL;
860 px_total_burdened_cost_tbl(i) := NULL;
861 px_total_revenue_tbl(i) := NULL;
862 px_raw_cost_rate_tbl(i) := NULL;
863 px_b_cost_rate_tbl(i) := NULL;
864 px_bill_rate_tbl(i) := NULL;
865
866 /* Bug fix: 5759413: Check if the rate override is changed or not: if changed retain
867 * the new rate overrides entered by user, if not changed then set it to null
868 * so that, rate api derives the new rates for new planning resource
869 */
870 IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
871 px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM Then
872 IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
873 px_raw_cost_override_rate_tbl(i) := NULL;
874 END IF;
875 End IF;
876
877 IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
878 px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM Then
879 IF px_b_cost_rate_override_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_burden_cost_rate_override,0) Then
880 px_b_cost_rate_override_tbl(i) := NULL;
881 END IF;
882 END IF;
883
884 ELSIF px_total_qty_tbl(i) = FND_API.G_MISS_NUM THEN
885
886 IF l_debug_mode = 'Y' THEN
887 pa_debug.g_err_stage:='RBS Input Quantity IS G_MISS_NUM Set Amts to G_MISS_NUM';
888 print_msg(pa_debug.g_err_stage,l_module_name);
889 END IF;
890
891 px_total_raw_cost_tbl(i) := FND_API.G_MISS_NUM;
892 px_total_burdened_cost_tbl(i) := FND_API.G_MISS_NUM;
893 px_total_revenue_tbl(i) := FND_API.G_MISS_NUM;
894 px_raw_cost_rate_tbl(i) := FND_API.G_MISS_NUM;
895 px_b_cost_rate_tbl(i) := FND_API.G_MISS_NUM;
896 px_bill_rate_tbl(i) := FND_API.G_MISS_NUM;
897
898 /* Bug fix: 5759413 */
899 IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
900 px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM Then
901 IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
902 px_raw_cost_override_rate_tbl(i) := NULL;
903 END IF;
904 End IF;
905
906 IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
907 px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM Then
908 IF px_b_cost_rate_override_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_burden_cost_rate_override,0) Then px_b_cost_rate_override_tbl(i) := NULL;
909 END IF;
910 END IF;
911
912
913 ELSE -- px_total_qty_tbl IS NULL
914
915 IF l_debug_mode = 'Y' THEN
916 pa_debug.g_err_stage:='RBS Input Quantity IS NULL See in DB';
917 print_msg(pa_debug.g_err_stage,l_module_name);
918 END IF;
919 --dbms_output.put_line('7.3.1');
920
921 OPEN c_data_in_db_csr(p_resource_assignment_id_tbl(i));
922
923 FETCH c_data_in_db_csr INTO l_data_in_db_rec;
924
925 IF c_data_in_db_csr%FOUND THEN
926
927 IF l_debug_mode = 'Y' THEN
928 pa_debug.g_err_stage:='RBS Quantity found in DB, Set Amounts to NULL';
929 print_msg(pa_debug.g_err_stage,l_module_name);
930 END IF;
931 px_total_qty_tbl(i) := l_data_in_db_rec.quantity;
932 px_total_raw_cost_tbl(i) := NULL;
933 px_total_burdened_cost_tbl(i) := NULL;
934 px_total_revenue_tbl(i) := NULL;
935 px_raw_cost_rate_tbl(i) := NULL;
936 px_b_cost_rate_tbl(i) := NULL;
937 px_bill_rate_tbl(i) := NULL;
938 /* Bug fix: 5759413 */
939 IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
940 px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM Then
941 IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
942 px_raw_cost_override_rate_tbl(i) := NULL;
943 END IF;
944 End IF;
945
946 IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
947 px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM Then
948 IF px_b_cost_rate_override_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_burden_cost_rate_override,0) Then px_b_cost_rate_override_tbl(i) := NULL;
949 END IF;
950 END IF;
951
952 ELSE -- If c_data_in_db_csr is not FOUND
953
954 IF l_debug_mode = 'Y' THEN
955 pa_debug.g_err_stage:='RBS NO Record in DB';
956 print_msg(pa_debug.g_err_stage,l_module_name);
957 END IF;
958
959 px_total_qty_tbl(i) := NULL;
960 px_total_raw_cost_tbl(i) := NULL;
961 px_total_burdened_cost_tbl(i) := NULL;
962 px_total_revenue_tbl(i) := NULL;
963 px_raw_cost_rate_tbl(i) := NULL;
964 px_b_cost_rate_tbl(i) := NULL;
965 px_bill_rate_tbl(i) := NULL;
966
967 /* Bug fix: 5759413 */
968 IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
969 px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM Then
970 IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
971 px_raw_cost_override_rate_tbl(i) := NULL;
972 END IF;
973 End IF;
974
975 IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
976 px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM Then
977 IF px_b_cost_rate_override_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_burden_cost_rate_override,0) Then px_b_cost_rate_override_tbl(i) := NULL;
978 END IF;
979 END IF;
980
981 END IF;
982
983 CLOSE c_data_in_db_csr;
984 --dbms_output.put_line('7.4');
985
986 END IF;--IF px_total_qty_tbl(i) IS NOT NULL AND px_total_qty_tbl(i) <> FND_API.G_MISS_NUM THEN
987
988 END IF;--IF x_rlm_id_change_flag_tbl(i)='Y' THEN
989
990 END IF;--IF p_project_role_id_tbl(i) IS NULL AND
991
992 END LOOP;--FOR i IN p_resource_assignment_id_tbl.FIRST
993
994 IF l_ra_id_rbs_prm_tbl.count > 0 THEN
995
996 /* Bug 3767322 - If resource list member changes, handling calculate
997 * api call as per Sanjay:
998 If planning resource is changed (resource_list_member_id is changed) then
999 calculate API assumes that the calling API has cleaned up the data by deleting
1000 the entries in reporting data and then also deleted all the budget lines. This
1001 is important as this is one reason of data corruption happening in the reporting
1002 integration. Calculate cannot handle this case as the data seen by calculate is
1003 the changed data and not the old one.
1004 Pass the following to calculate API: Total QTY, ETC AMT (Plan-Actual)/ ETC
1005 QTY (Plan-actual) as ETC Rate (if qty and amounts are both present), Total
1006 Amount (Raw Cost, Burdened Cost and or Revenue) (These may ( if qty is null) or
1007 may not be passed) . No delete flag is required as all the lines have already
1008 been removed. */
1009
1010 IF l_debug_mode = 'Y' THEN
1011 pa_debug.g_err_stage:='Calling API delete_planning_transactions ';
1012 pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
1013 END IF;
1014 --dbms_output.put_line('7.5');
1015
1016 pa_fp_planning_transaction_pub.delete_planning_transactions
1017 (
1018 p_context => p_context
1019 ,p_calling_context => p_calling_context -- Added for Bug 6856934
1020 ,p_task_or_res => 'ASSIGNMENT'
1021 ,p_resource_assignment_tbl => l_ra_id_rbs_prm_tbl
1022 ,p_validate_delete_flag => 'N'
1023 ,p_calling_module => 'PROCESS_RES_CHG_DERV_CALC_PRMS'
1024 ,p_task_id_tbl => l_task_id_rbs_prm_tbl
1025 ,p_rbs_element_id_tbl => l_rbs_elem_id_rbs_prm_tbl
1026 ,p_rate_based_flag_tbl => l_rbf_rbs_prm_tbl
1027 ,p_resource_class_code_tbl => l_res_class_code_rbs_prm_tbl
1028 ,x_return_status => x_return_status
1029 ,x_msg_count => x_msg_count
1030 ,x_msg_data => x_msg_data
1031 );
1032
1033 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1034
1035 IF l_debug_mode = 'Y' THEN
1036 pa_debug.g_err_stage:='Called API delete_planning_transactions returned error';
1037 pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
1038 END IF;
1039 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1040
1041 END IF;
1042 --dbms_output.put_line('7.6');
1043
1044 END IF;
1045
1046 --dbms_output.put_line('8');
1047 --Call the rbs mapping api only if there are some resource assignments for which the rbs_element_id can change
1048 IF l_rbs_map_index>0 THEN
1049
1050 IF l_debug_mode = 'Y' THEN
1051 pa_debug.g_err_stage:='Calling PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs';
1052 print_msg(pa_debug.g_err_stage,l_module_name);
1053 END IF;
1054
1055 --Extend the output pl/sql tbls l_rbs_element_id_tbl and l_txn_accum_header_id_tbl so that they contatin
1056 --the same no of records as l_eligible_rlm_ids_tbl
1057 l_rbs_element_id_prm_tbl.EXTEND(l_ra_id_rbs_prm_tbl.COUNT);
1058 l_txn_accum_header_id_prm_tbl.EXTEND(l_ra_id_rbs_prm_tbl.COUNT);
1059
1060 --Call the RBS Mapping API only if the rbs version id is not null
1061 IF l_plan_ver_settings_rec.rbs_version_id IS NOT NULL THEN
1062
1063 --dbms_output.put_line('7.7');
1064 PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
1065 p_budget_version_id => p_budget_version_id
1066 ,p_resource_list_id => l_plan_ver_settings_rec.resource_list_id
1067 ,p_rbs_version_id => l_plan_ver_settings_rec.rbs_version_id
1068 ,p_calling_process => 'RBS_REFRESH'
1069 ,p_calling_context => 'PLSQL'
1070 ,p_process_code => 'RBS_MAP'
1071 ,p_calling_mode => 'PLSQL_TABLE'
1072 ,p_init_msg_list_flag => 'N'
1073 ,p_commit_flag => 'N'
1074 ,p_TXN_SOURCE_ID_tab => l_ra_id_rbs_prm_tbl
1075 ,p_TXN_SOURCE_TYPE_CODE_tab => l_txn_src_typ_code_rbs_prm_tbl
1076 ,p_PERSON_ID_tab => l_person_id_rbs_prm_tbl
1077 ,p_JOB_ID_tab => l_job_id_rbs_prm_tbl
1078 ,p_ORGANIZATION_ID_tab => l_organization_id_rbs_prm_tbl
1079 ,p_VENDOR_ID_tab => l_supplier_id_rbs_prm_tbl
1080 ,p_EXPENDITURE_TYPE_tab => l_exp_type_rbs_prm_tbl
1081 ,p_EVENT_TYPE_tab => l_event_type_rbs_prm_tbl
1082 ,p_NON_LABOR_RESOURCE_tab => l_non_labor_res_rbs_prm_tbl
1083 ,p_EXPENDITURE_CATEGORY_tab => l_exp_category_rbs_prm_tbl
1084 ,p_REVENUE_CATEGORY_CODE_tab => l_rev_cat_code_rbs_prm_tbl
1085 ,p_PROJECT_ROLE_ID_tab => l_project_role_id_rbs_prm_tbl
1086 ,p_RESOURCE_CLASS_CODE_tab => l_res_class_code_rbs_prm_tbl
1087 ,p_ITEM_CATEGORY_ID_tab => l_item_cat_id_rbs_prm_tbl
1088 ,p_PERSON_TYPE_CODE_tab => l_per_type_code_rbs_prm_tbl
1089 ,p_BOM_RESOURCE_ID_tab => l_bom_res_id_rbs_prm_tbl
1090 ,p_INVENTORY_ITEM_ID_tab => l_inv_item_id_rbs_prm_tbl -- Bug 3698596
1091 ,x_txn_source_id_tab => l_txn_source_id_tbl
1092 ,x_res_list_member_id_tab => l_res_list_member_id_tbl
1093 ,x_rbs_element_id_tab => l_rbs_element_id_prm_tbl
1094 ,x_txn_accum_header_id_tab => l_txn_accum_header_id_prm_tbl
1095 ,x_return_status => x_return_status
1096 ,x_msg_count => x_msg_count
1097 ,x_msg_data => x_msg_data);
1098
1099 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1100
1101 IF l_debug_mode = 'Y' THEN
1102 pa_debug.g_err_stage:='Called API PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs returned error';
1103 pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
1104 END IF;
1105 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1106
1107 END IF;
1108 --dbms_output.put_line('7.8');
1109
1110 END IF;--IF l_plan_ver_settings_rec.rbs_version_id IS NOT NULL THEN
1111
1112
1113 END IF;--IF l_rbs_map_index>0 THEN
1114
1115 IF l_rbs_map_index>0 THEN
1116
1117 --dbms_output.put_line('7.9');
1118 --Initialise the indexes so that they can be re-used in the loop below
1119 l_rbs_map_index:=1;
1120 IF l_debug_mode = 'Y' THEN
1121 pa_debug.g_err_stage:='About to loop thru to create the pl/sql tables for rbs element id ';
1122 print_msg(pa_debug.g_err_stage,l_module_name);
1123 END IF;
1124 -- Loop thru the input ra id tbl and change the value of rbs_element_id
1125 -- depending on the value returned by the above apis. Here it is assumed that the called APIs
1126 -- returns the output in the order in which the inputs are passed.
1127
1128 --Null out quantity if the UOM or Rate Based Flag have changed.
1129 FOR i IN p_resource_assignment_id_tbl.FIRST .. p_resource_assignment_id_tbl.LAST LOOP
1130
1131 IF p_resource_assignment_id_tbl(i) = l_ra_id_rbs_prm_tbl(l_rbs_map_index) THEN
1132
1133 x_rbs_element_id_tbl(i):=l_rbs_element_id_prm_tbl(l_rbs_map_index);
1134 x_txn_accum_header_id_tbl(i):=l_txn_accum_header_id_prm_tbl(l_rbs_map_index);
1135
1136 IF l_ra_id_rbs_prm_tbl.EXISTS(l_rbs_map_index+1) THEN
1137 l_rbs_map_index:=l_rbs_map_index+1;
1138 END IF;
1139
1140 END IF;
1141
1142 END LOOP;
1143 --dbms_output.put_line('8.0');
1144 END IF;--IF l_rbs_map_index>0 OR
1145 --dbms_output.put_line('10');
1146
1147 IF l_debug_mode = 'Y' THEN
1148 pa_debug.g_err_stage:='Leaving Process_res_chg_Derv_calc_prms API';
1149 print_msg(pa_debug.g_err_stage,l_module_name);
1150 pa_debug.reset_curr_function;
1151 END IF;
1152 EXCEPTION
1153 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1154 l_msg_count := FND_MSG_PUB.count_msg;
1155 IF l_msg_count = 1 THEN
1156 PA_INTERFACE_UTILS_PUB.get_messages
1157 (p_encoded => FND_API.G_TRUE
1158 ,p_msg_index => 1
1159 ,p_msg_count => l_msg_count
1160 ,p_msg_data => l_msg_data
1161 ,p_data => l_data
1162 ,p_msg_index_out => l_msg_index_out);
1163 x_msg_data := l_data;
1164 x_msg_count := l_msg_count;
1165 ELSE
1166 x_msg_count := l_msg_count;
1167 END IF;
1168 x_return_status := FND_API.G_RET_STS_ERROR;
1169 IF l_debug_mode = 'Y' THEN
1170 pa_debug.reset_curr_function;
1171 END IF;
1172 WHEN OTHERS THEN
1173 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1174 x_msg_count := 1;
1175 x_msg_data := SQLERRM;
1176 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
1177 ,p_procedure_name => 'Process_res_chg_Derv_calc_prms');
1178
1179 IF l_debug_mode = 'Y' THEN
1180 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
1181 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
1182 pa_debug.reset_curr_function;
1183 END IF;
1184 RAISE;
1185
1186 END Process_res_chg_Derv_calc_prms;
1187
1188
1189 /*=====================================================================
1190 Procedure Name: add_planning_transactions
1191 Purpose: This procedure should be called to create planning
1192 transactions valid values for p_context are 'BUDGET'
1193 ,'FORECAST', 'WORKPLAN' and 'TASK_ASSIGNMENT'.The
1194 api will honor only resource list member
1195 id, resource name and resource class flag in the
1196 resource rec type and default all the other values
1197 by calling the get resurce defaults api of resource
1198 foundation.
1199
1200 Creates resource assignments and budget lines for
1201 workplan/budget/forecast. It is assumed that the
1202 duplicate rlm ids are not passed . If this API finds
1203 that there is no corresponding budget version then
1204 this API goes and creates a budget version for the
1205 work plan version.
1206 =======================================================================*/
1207 /*******************************************************************************************************
1208 As part of Bug 3749516 All References to Equipment Effort or Equip Resource Class has been removed in
1209 PROCEDURE add_planning_transactions.
1210 p_planned_equip_effort_tbl IN parameter has also been removed as they were not being used/referred.
1211 ********************************************************************************************************/
1212
1213 PROCEDURE add_planning_transactions
1214 (
1215 p_context IN VARCHAR2
1216 ,p_calling_context IN VARCHAR2 DEFAULT NULL -- Added for Bug 6856934
1217 ,p_one_to_one_mapping_flag IN VARCHAR2 DEFAULT 'N'
1218 ,p_calling_module IN VARCHAR2 DEFAULT NULL
1219 ,p_project_id IN Pa_projects_all.project_id%TYPE
1220 ,p_struct_elem_version_id IN Pa_proj_element_versions.element_version_id%TYPE DEFAULT NULL
1221 ,p_budget_version_id IN Pa_budget_versions.budget_version_id%TYPE DEFAULT NULL
1222 ,p_task_elem_version_id_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1223 ,p_task_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
1224 ,p_task_number_tbl IN SYSTEM.PA_VARCHAR2_100_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_100_TBL_TYPE()
1225 ,p_start_date_tbl IN SYSTEM.pa_date_tbl_type DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1226 ,p_end_date_tbl IN SYSTEM.pa_date_tbl_type DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1227 -- Bug 3793623 New params p_planning_start_date_tbl and p_planning_end_date_tbl added
1228 ,p_planning_start_date_tbl IN SYSTEM.pa_date_tbl_type DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1229 ,p_planning_end_date_tbl IN SYSTEM.pa_date_tbl_type DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1230 ,p_planned_people_effort_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1231 ,p_latest_eff_pub_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
1232 --One record in the above pl/sql tables correspond to all the records in the below pl/sql tables
1233 ,p_resource_list_member_id_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1234 ,p_project_assignment_id_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1235 /* The following columns are not (to be) passed by TA/WP. They are based by Edit Plan page BF case */
1236 ,p_quantity_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1237 ,p_currency_code_tbl IN SYSTEM.PA_VARCHAR2_15_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
1238 ,p_raw_cost_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1239 ,p_burdened_cost_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1240 ,p_revenue_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1241 ,p_cost_rate_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1242 ,p_bill_rate_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1243 ,p_burdened_rate_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1244 ,p_skip_duplicates_flag IN VARCHAR2 DEFAULT 'N'
1245 ,p_unplanned_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
1246 ,p_pm_product_code IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
1247 ,p_pm_res_asgmt_ref IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
1248 ,p_attribute_category_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
1249 ,p_attribute1 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1250 ,p_attribute2 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1251 ,p_attribute3 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1252 ,p_attribute4 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1253 ,p_attribute5 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1254 ,p_attribute6 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1255 ,p_attribute7 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1256 ,p_attribute8 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1257 ,p_attribute9 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1258 ,p_attribute10 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1259 ,p_attribute11 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1260 ,p_attribute12 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1261 ,p_attribute13 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1262 ,p_attribute14 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1263 ,p_attribute15 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1264 ,p_attribute16 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1265 ,p_attribute17 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1266 ,p_attribute18 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1267 ,p_attribute19 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1268 ,p_attribute20 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1269 ,p_attribute21 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1270 ,p_attribute22 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1271 ,p_attribute23 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1272 ,p_attribute24 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1273 ,p_attribute25 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1274 ,p_attribute26 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1275 ,p_attribute27 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1276 ,p_attribute28 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1277 ,p_attribute29 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1278 ,p_attribute30 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1279 ,p_apply_progress_flag IN VARCHAR2 DEFAULT 'N' /* Bug# 3720357 */
1280 ,p_scheduled_delay IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE() --For bug 3948128
1281 ,p_pji_rollup_required IN VARCHAR2 DEFAULT 'Y' /* Bug# 4200168 */
1282 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1283 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
1284 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1285 ) IS
1286
1287 l_trace_stage number;
1288
1289 --Start of variables used for debugging
1290 l_msg_count NUMBER :=0;
1291 l_data VARCHAR2(2000);
1292 l_msg_data VARCHAR2(2000);
1293 l_error_msg_code VARCHAR2(30);
1294 l_msg_index_out NUMBER;
1295 l_return_status VARCHAR2(2000);
1296 l_debug_mode VARCHAR2(30);
1297 --End of variables used for debugging
1298
1299 l_budget_version_id pa_budget_versions.budget_version_id%TYPE;
1300 l_proj_fp_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
1301 l_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE;
1302 l_rlm_id_tbl_count NUMBER := 0;
1303 l_elem_version_id_count NUMBER := 0;
1304 l_resource_list_id pa_proj_fp_options.all_resource_list_id%TYPE;
1305 l_people_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
1306 l_equip_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE; -- Bug 3749516 dummy Variable
1307 l_fin_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
1308 l_mat_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
1309 l_eligible_rlm_ids_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1310 l_proj_element_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1311 l_proj_element_id pa_proj_element_versions.proj_element_id%TYPE;
1312 l_fixed_date_sp_id pa_spread_curves_b.spread_curve_id%TYPE; -- bug 3607061
1313
1314 -- Added for Bug 3719918 -- USED FOR INSERT WHEN p-one-t-one-mapping-flag is Y
1315 l_task_elem_rlm_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1316 l_proj_elem_rlm_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1317
1318 -- Bug 3719918, these tables will only be used for insert in B/F context
1319 l_bf_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1320 l_bf_compl_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1321 l_bf_proj_elem_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1322 l_bf_quantity_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1323 l_bf_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1324 l_bf_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1325 l_bf_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1326 l_bf_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1327 l_bf_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1328 l_bf_bill_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1329 l_bf_burdened_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1330 l_dup_flag varchar2(1) :='N';
1331 --Bug 4207150. These pl/sql tbls will be used to store the task/rlms that are inserted in B/F Flow
1332 l_bf_ra_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1333 l_bf_task_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1334 l_bf_rlm_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1335 l_bf_ins_quantity_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1336 l_bf_ins_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1337 l_bf_ins_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1338 l_bf_ins_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1339 l_bf_ins_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1340 l_bf_ins_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1341 l_bf_ins_bill_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1342 l_bf_ins_burdened_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1343 l_temp NUMBER;
1344 dml_errors EXCEPTION;
1345 PRAGMA exception_init(dml_errors, -24381);
1346
1347 --Start of variables for Variable for Resource Attributes
1348 l_resource_class_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1349 l_resource_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1350 l_resource_class_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1351 l_res_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1352 l_person_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1353 l_job_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1354 l_person_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1355 l_named_role_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
1356 l_bom_resource_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1357 l_non_labor_resource_tbl SYSTEM.PA_VARCHAR2_20_TBL_TYPE := SYSTEM.PA_VARCHAR2_20_TBL_TYPE();
1358 l_inventory_item_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1359 l_item_category_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1360 l_project_role_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1361 l_organization_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1362 l_fc_res_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1363 l_expenditure_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1364 l_expenditure_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1365 l_event_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1366 l_revenue_category_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1367 l_supplier_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1368 l_unit_of_measure_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1369 l_spread_curve_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1370 l_etc_method_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1371 l_mfc_cost_type_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1372 l_procure_resource_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1373 l_incurred_by_res_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1374 l_Incur_by_res_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1375 l_Incur_by_role_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1376 l_org_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1377 l_rate_based_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1378 l_rate_expenditure_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1379 l_rate_func_curr_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1380 l_incur_by_res_type SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1381 l_resource_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1382 l_assignment_description_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1383 l_planning_resource_alias_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
1384 l_resource_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1385 l_project_role_name_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1386 l_organization_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1387 l_financial_category_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1388 l_project_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1389 l_use_task_schedule_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1390 l_planning_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1391 l_planning_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1392 l_schedule_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1393 l_schedule_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1394 l_total_quantity_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1395 l_override_currency_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1396 l_billable_percent_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1397 l_cost_rate_override_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1398 l_burdened_rate_override_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1399 l_unplanned_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1400 l_sp_fixed_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1401 l_financial_category_name_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
1402 l_supplier_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1403 l_pm_product_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1404 l_pm_res_asgmt_ref_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1405 l_ATTRIBUTE_CATEGORY_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1406 l_ATTRIBUTE1_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1407 l_ATTRIBUTE2_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1408 l_ATTRIBUTE3_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1409 l_ATTRIBUTE4_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1410 l_ATTRIBUTE5_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1411 l_ATTRIBUTE6_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1412 l_ATTRIBUTE7_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1413 l_ATTRIBUTE8_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1414 l_ATTRIBUTE9_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1415 l_ATTRIBUTE10_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1416 l_ATTRIBUTE11_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1417 l_ATTRIBUTE12_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1418 l_ATTRIBUTE13_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1419 l_ATTRIBUTE14_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1420 l_ATTRIBUTE15_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1421 l_ATTRIBUTE16_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1422 l_ATTRIBUTE17_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1423 l_ATTRIBUTE18_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1424 l_ATTRIBUTE19_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1425 l_ATTRIBUTE20_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1426 l_ATTRIBUTE21_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1427 l_ATTRIBUTE22_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1428 l_ATTRIBUTE23_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1429 l_ATTRIBUTE24_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1430 l_ATTRIBUTE25_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1431 l_ATTRIBUTE26_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1432 l_ATTRIBUTE27_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1433 l_ATTRIBUTE28_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1434 l_ATTRIBUTE29_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1435 l_ATTRIBUTE30_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1436 --For bug 3948128
1437 l_scheduled_delay SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1438 --End of variables for Variable for Resource Attributes
1439
1440 --Start of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
1441 l_task_rec_tbl pa_task_assignment_utils.l_task_rec_tbl_type;
1442 l_resource_rec_tbl pa_task_assignment_utils.l_resource_rec_tbl_type;
1443 l_del_task_level_rec_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1444 l_ra_id_del_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1445 l_ra_id_del_count NUMBER;
1446 --End of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
1447
1448 l_time_phased_code pa_proj_fp_options.all_time_phased_code%TYPE;
1449 l_spread_amounts_for_ver VARCHAR2(1);
1450 l_index NUMBER := 1;
1451 l_spread_amount_flags_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1452 l_delete_budget_lines_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1453 l_res_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1454 -- IPM Tables
1455 l_orig_count NUMBER; -- bug 5003827 issue 22
1456 -- l_count_index NUMBER;
1457 l_ra_id_temp_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1458 l_curr_code_temp_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE:= SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1459 --
1460 l_res_assignment_id_temp_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1461 l_res_assignment_id pa_resource_assignments.resource_assignment_id%TYPE;
1462 l_call_calc_api VARCHAR2(1);
1463
1464 -- Start of variable to be used in Calculate API Call
1465 l_line_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1466 l_line_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1467
1468 l_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE:= SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1469 l_quantity_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1470 l_raw_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1471 l_burdened_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1472 l_revenue_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1473 l_cost_rate_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1474 l_burden_multiplier_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1475 l_bill_rate_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1476 l_txn_src_typ_code_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1477 l_txn_source_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1478 l_res_list_member_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1479 l_rbs_element_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1480 l_txn_accum_header_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1481
1482 -- End of variable to be used in Calculate API Call
1483
1484 -- Bug 3749516 Added for insert in Workplan Context
1485 l_ins_proj_element_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1486 l_ins_task_elem_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1487 l_ins_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1488 l_ins_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1489 l_ins_cal_people_effort_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1490 l_ins_cal_burdened_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1491 l_ins_cal_raw_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1492 l_ins_index NUMBER := 1;
1493
1494 l_start_date pa_resource_assignments.planning_start_date%TYPE := NULL;
1495 l_compl_date pa_resource_assignments.planning_start_date%TYPE := NULL;
1496 l_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1497 l_compl_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1498
1499 l_rlm_id_no_of_rows NUMBER;
1500 l_elem_ver_id_no_of_rows NUMBER;
1501 l_ppl_index NUMBER;
1502 l_amount_exists VARCHAR2(1);
1503 l_rbs_version_id pa_proj_fp_options.rbs_version_id%TYPE;
1504
1505 l_proj_curr_code pa_projects_all.project_currency_code%TYPE;
1506 l_proj_func_curr_code pa_projects_all.projfunc_currency_code%TYPE;
1507
1508 -- Bug 3836358 -- ADDED for usage when p_skip_duplicates_flag is passed as Y
1509 l_task_id_temp PA_RESOURCE_ASSIGNMENTS.TASK_ID%TYPE;
1510 l_pji_rollup_required VARCHAR2(1);
1511
1512 l_fp_cols_rec pa_fp_gen_amount_utils.fp_cols; -- IPM
1513 l_rm_temp_count number;
1514
1515
1516 CURSOR get_pc_code IS
1517 SELECT project_currency_code, projfunc_currency_code
1518 FROM pa_projects_all
1519 WHERE project_id = p_project_id;
1520
1521 --------------------------------------------------------------------------
1522 -- This cursor is to be used to retrieve the proj_element_id based on the
1523 -- element_version_id.
1524 -- This might be removed.
1525 --------------------------------------------------------------------------
1526 CURSOR c_proj_element_id(c_elem_version_id pa_proj_element_versions.element_version_id%TYPE) IS
1527 SELECT proj_element_id
1528 FROM pa_proj_element_versions
1529 WHERE element_version_id = c_elem_version_id;
1530
1531 BEGIN
1532 l_trace_stage := 10;
1533 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
1534
1535 SAVEPOINT ADD_PLANNING_TRANS_SP;
1536 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1537 l_debug_mode := NVL(l_debug_mode, 'Y');
1538
1539 IF p_pji_rollup_required = 'Y' THEN
1540 l_pji_rollup_required := 'Y';
1541 ELSE
1542 l_pji_rollup_required := 'N';
1543 END IF;
1544
1545 pa_task_assignment_utils.g_require_progress_rollup := 'N';
1546
1547
1548
1549 x_msg_count := 0;
1550 x_return_status := FND_API.G_RET_STS_SUCCESS;
1551 IF l_debug_mode = 'Y' THEN
1552 PA_DEBUG.Set_Curr_Function( p_function => 'PA_FP_PLAN_TXN_PUB.add_planning_transactions',
1553 p_debug_mode => l_debug_mode );
1554 END IF;
1555
1556 --p_context should never be null
1557 IF p_context IS NULL OR
1558 p_context NOT IN ( PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST
1559 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
1560 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
1561 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET ) THEN
1562
1563 IF l_debug_mode = 'Y' THEN
1564 pa_debug.g_err_stage:='p_context passed is '||p_context;
1565 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1566 END IF;
1567 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1568 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1569 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1570
1571 END IF;
1572
1573 -- Added for Bug 3719918 -- ONE-TO-ONE MAPPING BETWEEN ELEM_VER-RLM IDS PASSED
1574 -- Validation for p_one_to_one_mapping_flag passed as Y only for Budget/Forecast context
1575 -- Modified Validation Below for Only WORKPLAN Context - Changes for Bug 3665097
1576 IF (p_one_to_one_mapping_flag = 'Y'
1577 AND p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN
1578 IF l_debug_mode = 'Y' THEN
1579 pa_debug.g_err_stage:='p_one_to_one_mapping_flag passed as Y for WORKPLAN context :'||p_context;
1580 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1581 END IF;
1582 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1583 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1584 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1585 END IF;
1586
1587
1588 -- Added for Bug 3719918 and Bug 3665097
1589 -- Validation that when p_one_to_one_mapping_flag is passed as Y p_task_elem_version_id_tbl
1590 -- and p_resource_list_member_id_tbl should have same table count.
1591 IF (p_one_to_one_mapping_flag = 'Y' AND
1592 p_task_elem_version_id_tbl.COUNT <> p_resource_list_member_id_tbl.COUNT) THEN
1593
1594 IF l_debug_mode = 'Y' THEN
1595 pa_debug.g_err_stage:='Table Count Mismatch for p_one_to_one_mapping_flag Y in : '||p_context;
1596 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1597 END IF;
1598 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1599 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1600 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1601
1602 END IF;
1603
1604
1605 -- Bug 3793623 Planning Start Date and Planning End Date can only be passed when
1606 -- p_one_to_one_mapping_flag IS Y
1607 IF (p_one_to_one_mapping_flag = 'N' AND
1608 (p_planning_start_date_tbl.COUNT <> 0 OR p_planning_end_date_tbl.COUNT <> 0)) THEN
1609
1610 IF l_debug_mode = 'Y' THEN
1611 pa_debug.g_err_stage:='Planning Date Passed when one to one mapping is N';
1612 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1613 END IF;
1614 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1615 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1616 p_token1 => 'PROCEDURENAME',
1617 p_value1 => 'PAFPPTPB.add_planning_transactions',
1618 p_token2 => 'STAGE',
1619 p_value2 => 'Planning Date Passed when one to one mapping is N');
1620 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1621
1622 END IF;
1623
1624 -- Bug 3793623 Planning Start Date and Planning End Date Should have the same
1625 -- number of records
1626 IF (p_planning_start_date_tbl.COUNT <> p_planning_end_date_tbl.COUNT) THEN
1627 IF l_debug_mode = 'Y' THEN
1628 pa_debug.g_err_stage:='Planning Start Date - End Date MISMATCH p_context :'||p_context;
1629 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1630 END IF;
1631 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1632 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1633 p_token1 => 'PROCEDURENAME',
1634 p_value1 => 'PAFPPTPB.add_planning_transactions',
1635 p_token2 => 'STAGE',
1636 p_value2 => 'Planning Start Date - End Date MISMATCH');
1637 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1638 END IF;
1639
1640 -- Bug 3793623 If Planning Start/End Date is passed its should be same as
1641 -- task_elem_version_id COUNT
1642 IF (p_planning_start_date_tbl.COUNT >0) THEN
1643 IF (p_planning_start_date_tbl.COUNT <> p_task_elem_version_id_tbl.COUNT) THEN
1644 IF l_debug_mode = 'Y' THEN
1645 pa_debug.g_err_stage:='Planning Start Date - Task Elem Mismatch :'||p_context;
1646 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1647 END IF;
1648 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1649 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1650 p_token1 => 'PROCEDURENAME',
1651 p_value1 => 'PAFPPTPB.add_planning_transactions',
1652 p_token2 => 'STAGE',
1653 p_value2 => 'Planning Start Date - Task Elem Mismatch');
1654 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1655 END IF;
1656 END IF;
1657
1658
1659 -- Added for Bug 3719918 -- when p one to one mapping flag is N
1660 -- duplicate rlm/elem_ver ids cannot be passed
1661 IF p_one_to_one_mapping_flag = 'N' THEN
1662 IF p_skip_duplicates_flag = 'N' THEN
1663 IF l_debug_mode = 'Y' THEN
1664 pa_debug.g_err_stage:='Checking for duplicate rlm ids passed';
1665 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1666 END IF;
1667 IF p_resource_list_member_id_tbl.COUNT > 0 THEN
1668 FOR i IN p_resource_list_member_id_tbl.FIRST .. (p_resource_list_member_id_tbl.LAST-1) LOOP
1669 FOR j in (i+1) .. p_resource_list_member_id_tbl.LAST LOOP
1670 IF p_resource_list_member_id_tbl(j) = p_resource_list_member_id_tbl(i) THEN
1671 IF l_debug_mode = 'Y' THEN
1672 pa_debug.g_err_stage:='Dup RLM ID Passed';
1673 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1674 END IF;
1675 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1676 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1677 p_token1 => 'PROCEDURENAME',
1678 p_value1 => 'PAFPPTPB.add_planning_transactions',
1679 p_token2 => 'STAGE',
1680 p_value2 => 'Duplicate RLM Id Passed');
1681 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1682 END IF;
1683 END LOOP;
1684 END LOOP;
1685 END IF;
1686 IF l_debug_mode = 'Y' THEN
1687 pa_debug.g_err_stage:='Checking for duplicate elem ver ids passed';
1688 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1689 END IF;
1690 IF p_task_elem_version_id_tbl.COUNT > 0 THEN
1691 FOR i IN p_task_elem_version_id_tbl.FIRST .. (p_task_elem_version_id_tbl.LAST-1) LOOP
1692 FOR j in (i+1) .. p_task_elem_version_id_tbl.LAST LOOP
1693 IF p_task_elem_version_id_tbl(j) = p_task_elem_version_id_tbl(i) THEN
1694 IF l_debug_mode = 'Y' THEN
1695 pa_debug.g_err_stage:='Dup ELEM VER ID Passed';
1696 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1697 END IF;
1698 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1699 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1700 p_token1 => 'PROCEDURENAME',
1701 p_value1 => 'PAFPPTPB.add_planning_transactions',
1702 p_token2 => 'STAGE',
1703 p_value2 => 'Duplicate Task Elem Version Id Passed');
1704 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1705 END IF;
1706 END LOOP;
1707 END LOOP;
1708 END IF;
1709 END IF; -- p_skip_duplicate_flag = N
1710 ELSE
1711 -- when p one to one mapping flag is Y
1712 -- FOR B/F Context dup rlm/task elem combination cannot be passed until
1713 -- and unless the currecy code is diff
1714 -- for TA WOKRPLAN dup rlm/task elem combination cannot be passed
1715 IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR
1716 (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
1717 IF p_task_elem_version_id_tbl.COUNT > 1 THEN
1718 FOR i IN p_task_elem_version_id_tbl.FIRST .. (p_task_elem_version_id_tbl.LAST-1) LOOP
1719 FOR j in (i+1) .. p_task_elem_version_id_tbl.LAST LOOP
1720 IF ( (p_task_elem_version_id_tbl(i) = p_task_elem_version_id_tbl(j)) AND
1721 (p_resource_list_member_id_tbl(i) = p_resource_list_member_id_tbl(j)) AND
1722 (p_currency_code_tbl(i) = p_currency_code_tbl(j))) THEN
1723
1724 IF l_debug_mode = 'Y' THEN
1725 pa_debug.g_err_stage:='Dup Rec passed - Curr Code (B/F) - will error out in Ins Stat';
1726 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1727 END IF;
1728 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1729 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1730 p_token1 => 'PROCEDURENAME',
1731 p_value1 => 'PAFPPTPB.add_planning_transactions',
1732 p_token2 => 'STAGE',
1733 p_value2 => 'Duplicate CurrCode/RlmId/TaskId Passed');
1734 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1735 END IF;
1736 END LOOP;
1737 END LOOP;
1738 END IF;
1739 ELSE -- for TA/WOKRPLAN check for currency code is not there planning elements cannot be added using
1740 -- different currencies for Ta/Workplan FLow
1741 IF p_task_elem_version_id_tbl.COUNT > 1 THEN
1742 FOR i IN p_task_elem_version_id_tbl.FIRST .. (p_task_elem_version_id_tbl.LAST-1) LOOP
1743 FOR j in (i+1) .. p_task_elem_version_id_tbl.LAST LOOP
1744 IF ( (p_task_elem_version_id_tbl(i) = p_task_elem_version_id_tbl(j)) AND
1745 (p_resource_list_member_id_tbl(i) = p_resource_list_member_id_tbl(j))) THEN
1746
1747 IF l_debug_mode = 'Y' THEN
1748 pa_debug.g_err_stage:='Dup Rec passed - will error out in Ins Stat p_context :'||p_context;
1749 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1750 END IF;
1751 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1752 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1753 p_token1 => 'PROCEDURENAME',
1754 p_value1 => 'PAFPPTPB.add_planning_transactions',
1755 p_token2 => 'STAGE',
1756 p_value2 => 'Duplicate RlmId/TaskId Passed');
1757 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1758 END IF;
1759 END LOOP;
1760 END LOOP;
1761 END IF;
1762 END IF;
1763 END IF;
1764
1765
1766 IF l_debug_mode = 'Y' THEN
1767 IF p_task_elem_version_id_tbl.COUNT > 0 THEN
1768 FOR i in p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
1769 pa_debug.g_err_stage:='p_task_elem_version_id_tbl :'||p_task_elem_version_id_tbl(i);
1770 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1771 END LOOP;
1772 END IF;
1773
1774 IF p_resource_list_member_id_tbl.COUNT > 0 THEN
1775 FOR i in p_resource_list_member_id_tbl.FIRST .. p_resource_list_member_id_tbl.LAST LOOP
1776 pa_debug.g_err_stage:='p_resource_list_member_id_tbl :'||p_resource_list_member_id_tbl(i);
1777 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1778 END LOOP;
1779 END IF;
1780
1781 IF p_currency_code_tbl.COUNT > 0 THEN
1782 FOR i in p_currency_code_tbl.FIRST .. p_currency_code_tbl.LAST LOOP
1783 pa_debug.g_err_stage:='p_currency_code_tbl :'||p_currency_code_tbl(i);
1784 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1785 END LOOP;
1786 END IF;
1787 END IF;
1788
1789 -------------------------------------------------------------------------------------------
1790 -- Extending all table lengths to the permissible values they would take.
1791 -------------------------------------------------------------------------------------------
1792
1793 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
1794 -- Bug 3749516 only for PEOPLE
1795 l_rlm_id_no_of_rows := 1;
1796 ELSE
1797 l_rlm_id_no_of_rows := p_resource_list_member_id_tbl.LAST;
1798 END IF;
1799 l_elem_ver_id_no_of_rows := p_task_elem_version_id_tbl.LAST;
1800
1801 l_trace_stage := 20;
1802 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
1803
1804 IF l_debug_mode = 'Y' THEN
1805 pa_debug.g_err_stage:='Extending all table lengths to the permissible values they would take - p_context = '||p_context;
1806 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1807 END IF;
1808
1809 l_task_elem_rlm_tbl.extend(l_rlm_id_no_of_rows);
1810 l_proj_elem_rlm_tbl.extend(l_rlm_id_no_of_rows);
1811
1812 -- Bug 3719918 -- For Insert in BF Context.
1813 l_bf_start_date_tbl.extend(l_rlm_id_no_of_rows);
1814 l_bf_compl_date_tbl.extend(l_rlm_id_no_of_rows);
1815 l_bf_proj_elem_tbl.extend(l_rlm_id_no_of_rows);
1816 l_bf_quantity_tbl.extend((l_rlm_id_no_of_rows));
1817 l_bf_raw_cost_tbl.extend((l_rlm_id_no_of_rows));
1818 l_bf_burdened_cost_tbl.extend((l_rlm_id_no_of_rows));
1819 l_bf_revenue_tbl.extend((l_rlm_id_no_of_rows));
1820 l_bf_currency_code_tbl.extend((l_rlm_id_no_of_rows));
1821 l_bf_cost_rate_tbl.extend((l_rlm_id_no_of_rows));
1822 l_bf_bill_rate_tbl.extend((l_rlm_id_no_of_rows));
1823 l_bf_burdened_rate_tbl.extend((l_rlm_id_no_of_rows));
1824
1825 -- End for Bug 3719918
1826
1827 l_resource_class_flag_tbl.extend(l_rlm_id_no_of_rows);
1828 l_resource_class_code_tbl.extend(l_rlm_id_no_of_rows);
1829 l_resource_class_id_tbl.extend(l_rlm_id_no_of_rows);
1830 l_res_type_code_tbl.extend(l_rlm_id_no_of_rows);
1831 l_person_id_tbl.extend(l_rlm_id_no_of_rows);
1832 l_job_id_tbl.extend(l_rlm_id_no_of_rows);
1833 l_person_type_code_tbl.extend(l_rlm_id_no_of_rows);
1834 l_named_role_tbl.extend(l_rlm_id_no_of_rows);
1835 l_bom_resource_id_tbl.extend(l_rlm_id_no_of_rows);
1836 l_non_labor_resource_tbl.extend(l_rlm_id_no_of_rows);
1837 l_inventory_item_id_tbl.extend(l_rlm_id_no_of_rows);
1838 l_item_category_id_tbl.extend(l_rlm_id_no_of_rows);
1839 l_project_role_id_tbl.extend(l_rlm_id_no_of_rows);
1840 l_organization_id_tbl.extend(l_rlm_id_no_of_rows);
1841 l_fc_res_type_code_tbl.extend(l_rlm_id_no_of_rows);
1842 l_expenditure_type_tbl.extend(l_rlm_id_no_of_rows);
1843 l_expenditure_category_tbl.extend(l_rlm_id_no_of_rows);
1844 l_event_type_tbl.extend(l_rlm_id_no_of_rows);
1845 l_revenue_category_code_tbl.extend(l_rlm_id_no_of_rows);
1846 l_supplier_id_tbl.extend(l_rlm_id_no_of_rows);
1847 l_unit_of_measure_tbl.extend(l_rlm_id_no_of_rows);
1848 l_spread_curve_id_tbl.extend(l_rlm_id_no_of_rows);
1849 l_etc_method_code_tbl.extend(l_rlm_id_no_of_rows);
1850 l_mfc_cost_type_id_tbl.extend(l_rlm_id_no_of_rows);
1851 l_procure_resource_flag_tbl.extend(l_rlm_id_no_of_rows);
1852 l_incurred_by_res_flag_tbl.extend(l_rlm_id_no_of_rows);
1853 l_Incur_by_res_class_code_tbl.extend(l_rlm_id_no_of_rows);
1854 l_Incur_by_role_id_tbl.extend(l_rlm_id_no_of_rows);
1855 l_eligible_rlm_ids_tbl.extend(l_rlm_id_no_of_rows);
1856 l_txn_src_typ_code_rbs_prm_tbl.extend(l_rlm_id_no_of_rows);
1857 l_org_id_tbl.extend(l_rlm_id_no_of_rows);
1858 l_rate_based_flag_tbl.extend(l_rlm_id_no_of_rows);
1859 l_rate_expenditure_type_tbl.extend(l_rlm_id_no_of_rows);
1860 l_rate_func_curr_code_tbl.extend(l_rlm_id_no_of_rows);
1861 l_resource_assignment_id_tbl.extend(l_rlm_id_no_of_rows);
1862 l_assignment_description_tbl.extend(l_rlm_id_no_of_rows);
1863 l_planning_resource_alias_tbl.extend(l_rlm_id_no_of_rows);
1864 l_resource_name_tbl.extend(l_rlm_id_no_of_rows);
1865 l_project_role_name_tbl.extend(l_rlm_id_no_of_rows);
1866 l_organization_name_tbl.extend(l_rlm_id_no_of_rows);
1867 l_financial_category_code_tbl.extend(l_rlm_id_no_of_rows);
1868 l_project_assignment_id_tbl.extend(l_rlm_id_no_of_rows);
1869 l_use_task_schedule_flag_tbl.extend(l_rlm_id_no_of_rows);
1870 l_planning_start_date_tbl.extend(l_rlm_id_no_of_rows);
1871 l_planning_end_date_tbl.extend(l_rlm_id_no_of_rows);
1872 l_schedule_start_date_tbl.extend(l_rlm_id_no_of_rows);
1873 l_schedule_end_date_tbl.extend(l_rlm_id_no_of_rows);
1874 l_total_quantity_tbl.extend(l_rlm_id_no_of_rows);
1875 l_override_currency_code_tbl.extend(l_rlm_id_no_of_rows);
1876 l_billable_percent_tbl.extend(l_rlm_id_no_of_rows);
1877 l_cost_rate_override_tbl.extend(l_rlm_id_no_of_rows);
1878 l_burdened_rate_override_tbl.extend(l_rlm_id_no_of_rows);
1879 IF p_unplanned_flag_tbl.count = 0 THEN
1880 l_unplanned_flag_tbl.extend(l_rlm_id_no_of_rows);
1881 ELSE
1882 l_unplanned_flag_tbl := p_unplanned_flag_tbl;
1883 END IF;
1884 l_sp_fixed_date_tbl.extend(l_rlm_id_no_of_rows);
1885 l_financial_category_name_tbl.extend(l_rlm_id_no_of_rows);
1886 l_supplier_name_tbl.extend(l_rlm_id_no_of_rows);
1887 l_pm_product_code_tbl.extend(l_rlm_id_no_of_rows);
1888 l_pm_res_asgmt_ref_tbl.extend(l_rlm_id_no_of_rows);
1889 l_ATTRIBUTE_CATEGORY_tbl.extend(l_rlm_id_no_of_rows);
1890 l_ATTRIBUTE1_tbl.extend(l_rlm_id_no_of_rows);
1891 l_ATTRIBUTE2_tbl.extend(l_rlm_id_no_of_rows);
1892 l_ATTRIBUTE3_tbl.extend(l_rlm_id_no_of_rows);
1893 l_ATTRIBUTE4_tbl.extend(l_rlm_id_no_of_rows);
1894 l_ATTRIBUTE5_tbl.extend(l_rlm_id_no_of_rows);
1895 l_ATTRIBUTE6_tbl.extend(l_rlm_id_no_of_rows);
1896 l_ATTRIBUTE7_tbl.extend(l_rlm_id_no_of_rows);
1897 l_ATTRIBUTE8_tbl.extend(l_rlm_id_no_of_rows);
1898 l_ATTRIBUTE9_tbl.extend(l_rlm_id_no_of_rows);
1899 l_ATTRIBUTE10_tbl.extend(l_rlm_id_no_of_rows);
1900 l_ATTRIBUTE11_tbl.extend(l_rlm_id_no_of_rows);
1901 l_ATTRIBUTE12_tbl.extend(l_rlm_id_no_of_rows);
1902 l_ATTRIBUTE13_tbl.extend(l_rlm_id_no_of_rows);
1903 l_ATTRIBUTE14_tbl.extend(l_rlm_id_no_of_rows);
1904 l_ATTRIBUTE15_tbl.extend(l_rlm_id_no_of_rows);
1905 l_ATTRIBUTE16_tbl.extend(l_rlm_id_no_of_rows);
1906 l_ATTRIBUTE17_tbl.extend(l_rlm_id_no_of_rows);
1907 l_ATTRIBUTE18_tbl.extend(l_rlm_id_no_of_rows);
1908 l_ATTRIBUTE19_tbl.extend(l_rlm_id_no_of_rows);
1909 l_ATTRIBUTE20_tbl.extend(l_rlm_id_no_of_rows);
1910 l_ATTRIBUTE21_tbl.extend(l_rlm_id_no_of_rows);
1911 l_ATTRIBUTE22_tbl.extend(l_rlm_id_no_of_rows);
1912 l_ATTRIBUTE23_tbl.extend(l_rlm_id_no_of_rows);
1913 l_ATTRIBUTE24_tbl.extend(l_rlm_id_no_of_rows);
1914 l_ATTRIBUTE25_tbl.extend(l_rlm_id_no_of_rows);
1915 l_ATTRIBUTE26_tbl.extend(l_rlm_id_no_of_rows);
1916 l_ATTRIBUTE27_tbl.extend(l_rlm_id_no_of_rows);
1917 l_ATTRIBUTE28_tbl.extend(l_rlm_id_no_of_rows);
1918 l_ATTRIBUTE29_tbl.extend(l_rlm_id_no_of_rows);
1919 l_ATTRIBUTE30_tbl.extend(l_rlm_id_no_of_rows);
1920 --For bug 3948128
1921 l_scheduled_delay.extend(l_rlm_id_no_of_rows);
1922
1923 l_del_task_level_rec_code_tbl.extend(l_elem_ver_id_no_of_rows);
1924 l_proj_element_id_tbl.extend(l_elem_ver_id_no_of_rows);
1925 l_start_date_tbl.extend(l_elem_ver_id_no_of_rows);
1926 l_compl_date_tbl.extend(l_elem_ver_id_no_of_rows);
1927
1928 l_ins_proj_element_id_tbl.extend(l_elem_ver_id_no_of_rows);
1929 l_ins_task_elem_version_id_tbl.extend(l_elem_ver_id_no_of_rows);
1930 l_ins_start_date_tbl.extend(l_elem_ver_id_no_of_rows);
1931 l_ins_end_date_tbl.extend(l_elem_ver_id_no_of_rows);
1932 l_ins_cal_people_effort_tbl.extend(l_elem_ver_id_no_of_rows);
1933 l_ins_cal_burdened_cost_tbl.extend(l_elem_ver_id_no_of_rows);
1934 l_ins_cal_raw_cost_tbl.extend(l_elem_ver_id_no_of_rows);
1935
1936 l_ra_id_del_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1937 l_spread_amount_flags_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1938 l_delete_budget_lines_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1939 l_res_assignment_id_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1940 l_res_assignment_id_temp_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1941 l_currency_code_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1942 l_quantity_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1943 l_raw_cost_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1944 l_burdened_cost_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1945 l_revenue_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1946 l_cost_rate_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1947 l_burden_multiplier_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1948 l_bill_rate_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
1949
1950 l_trace_stage := 30;
1951 --dbms_output.put_line('done with extending');
1952 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
1953
1954 -------------------------------------------------------------------------------------------
1955 -- validating input parameters
1956 -- 1. , p_task_elem_version_id_tbl table cannot be empty
1957 -------------------------------------------------------------------------------------------
1958
1959 --If the input tasks table is empty in the context of budget or forecast then return
1960 IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
1961 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
1962 l_elem_version_id_count := p_task_elem_version_id_tbl.COUNT;
1963 l_trace_stage := 140;
1964 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
1965
1966 IF l_debug_mode = 'Y' THEN
1967 pa_debug.g_err_stage:='Validating input parameters - count of p_task_elem_version_id_tbl = '||l_elem_version_id_count;
1968 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1969 END IF;
1970
1971 IF l_elem_version_id_count = 0 THEN
1972 l_trace_stage := 150;
1973 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
1974 IF l_debug_mode = 'Y' THEN
1975 pa_debug.g_err_stage:='Validating input parameters - elem_version_id table is empty - p_context = '||p_context;
1976 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1977 --dbms_output.put_line('Tasks tbl is empty for BF -- returning');
1978 pa_debug.reset_curr_function;
1979 END IF;
1980 RETURN;
1981 END IF;
1982 END IF;
1983
1984
1985 --In the context of workplan the start date and end date tbl count should always be equal to the input
1986 --task tbl count
1987 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
1988 IF (p_end_date_tbl.COUNT <> p_start_date_tbl.COUNT) OR
1989 (p_start_date_tbl.COUNT <> p_task_elem_version_id_tbl.COUNT) THEN
1990
1991 IF l_debug_mode = 'Y' THEN
1992 pa_debug.g_err_stage:='Invalid pl/sql tables for start and end dates';
1993 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1994 END IF;
1995 --dbms_output.put_line('$$$$%%%');
1996 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1997 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1998 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1999 END IF;
2000 END IF;
2001
2002
2003 -------------------------------------------------------------------------------------------
2004 -- Validation - p_resource_list_member_id_tbl can be empty only for p_context = 'WORKPLAN'
2005 -- Otherwise return NULL
2006 -------------------------------------------------------------------------------------------
2007 IF NOT(p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN
2008 l_rlm_id_tbl_count := p_resource_list_member_id_tbl.COUNT;
2009
2010 IF l_debug_mode = 'Y' THEN
2011 pa_debug.g_err_stage:='Validating input parameters - count of p_resource_list_member_id_tbl = '||l_rlm_id_tbl_count;
2012 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2013 END IF;
2014
2015 IF l_rlm_id_tbl_count = 0 THEN
2016
2017 IF l_debug_mode = 'Y' THEN
2018 pa_debug.g_err_stage:='Validating input parameters - Resource List Member Id table is empty - p_context = '||p_context;
2019 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2020 --dbms_output.put_line('Rlm tbl is empty for BF -- returning');
2021 pa_debug.reset_curr_function;
2022 END IF;
2023 RETURN;
2024 END IF;
2025
2026 END IF;
2027
2028
2029
2030 l_trace_stage := 40;
2031 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2032
2033 IF l_debug_mode = 'Y' THEN
2034 pa_debug.g_err_stage:='Validating input parameters - checking for project id : ' || p_project_id;
2035 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2036 END IF;
2037
2038 l_trace_stage := 50;
2039 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2040 -------------------------------------------------------------------------------------------
2041 -- validating input parameters
2042 -- 1. p_project_id cannot be null
2043 -------------------------------------------------------------------------------------------
2044 IF (p_project_id IS NULL) THEN
2045 IF l_debug_mode = 'Y' THEN
2046 pa_debug.g_err_stage:='p_project_id is null';
2047 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2048 END IF;
2049 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2050 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
2051 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2052 END IF;
2053
2054 --dbms_output.put_line('2');
2055
2056 l_trace_stage := 60;
2057 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2058 -------------------------------------------------------------------------------------------
2059 -- validating input parameters
2060 -- 1. for p_context ('WORKPLAN','TASK_ASSIGNMENT')- p_struct_elem_version_id cannot be null
2061 -- 2. , p_task_elem_version_id_tbl table cannot be empty
2062 -------------------------------------------------------------------------------------------
2063
2064 IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK)) THEN
2065
2066 l_trace_stage := 70;
2067 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2068 IF p_struct_elem_version_id IS NULL THEN
2069
2070 IF l_debug_mode = 'Y' THEN
2071 pa_debug.g_err_stage:='p_struct_elem_version_id is NULL and p_context = ' || p_context;
2072 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2073 END IF;
2074 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2075 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
2076 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2077
2078 ELSE
2079
2080 l_trace_stage := 80;
2081 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2082
2083 IF l_debug_mode = 'Y' THEN
2084 pa_debug.g_err_stage:='calling pa_planning_transaction_utils.get_wp_budget_version_id p_struct_elem_version_id = ' || p_struct_elem_version_id;
2085 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2086 pa_debug.g_err_stage:='calling pa_planning_transaction_utils.get_wp_budget_version_id for deriving budget_version_id = ' || p_context;
2087 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2088 END IF;
2089
2090 l_budget_version_id := pa_planning_transaction_utils.get_wp_budget_version_id(p_struct_elem_version_id);
2091
2092 l_trace_stage := 90;
2093 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2094 pa_fp_planning_transaction_pub.add_wp_plan_type
2095 (p_src_project_id => p_project_id
2096 ,p_targ_project_id => p_project_id
2097 ,x_return_status => x_return_status
2098 ,x_msg_count => x_msg_count
2099 ,x_msg_data => x_msg_data);
2100 l_trace_stage := 100;
2101 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2102
2103 -- 4504452.Added this if codition to get the return status.
2104 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2105 IF l_debug_mode = 'Y' THEN
2106 pa_debug.g_err_stage:='Called API pa_fp_planning_transaction_pub.add_wp_plan_type api returned error';
2107 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2108 END IF;
2109 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2110 END IF;
2111 -----------------------------------------------------
2112 -- If l_budget_version_id IS NULL then create version
2113 -----------------------------------------------------
2114 IF l_budget_version_id IS NULL THEN
2115 l_trace_stage := 110;
2116 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2117
2118 IF l_debug_mode = 'Y' THEN
2119 pa_debug.g_err_stage:='calling pa_fin_plan_pub.create_version api = ' || p_context;
2120 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2121 END IF;
2122
2123 SELECT fin_plan_type_id
2124 INTO l_fin_plan_type_id
2125 FROM pa_fin_plan_types_b
2126 WHERE use_for_workplan_flag ='Y';
2127
2128 pa_fin_plan_pub.Create_Version (
2129 p_project_id => p_project_id
2130 ,p_fin_plan_type_id => l_fin_plan_type_id
2131 ,p_element_type => PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST
2132 ,p_version_name => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
2133 ,p_description => null
2134 ,p_ci_id => null
2135 ,p_est_proj_raw_cost => null
2136 ,p_est_proj_bd_cost => null
2137 ,p_est_proj_revenue => null
2138 ,p_est_qty => null
2139 ,p_impacted_task_id => null
2140 ,p_agreement_id => null
2141 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
2142 ,p_resource_list_id => null
2143 ,p_time_phased_code => null
2144 ,p_fin_plan_level_code => null
2145 ,p_plan_in_multi_curr_flag => null
2146 ,p_amount_set_id => null
2147 ,p_attribute_category => null
2148 ,p_attribute1 => null
2149 ,p_attribute2 => null
2150 ,p_attribute3 => null
2151 ,p_attribute4 => null
2152 ,p_attribute5 => null
2153 ,p_attribute6 => null
2154 ,p_attribute7 => null
2155 ,p_attribute8 => null
2156 ,p_attribute9 => null
2157 ,p_attribute10 => null
2158 ,p_attribute11 => null
2159 ,p_attribute12 => null
2160 ,p_attribute13 => null
2161 ,p_attribute14 => null
2162 ,p_attribute15 => null
2163 ,p_pji_rollup_required => l_pji_rollup_required
2164 ,px_budget_version_id => l_budget_version_id
2165 ,p_struct_elem_version_id => p_struct_elem_version_id
2166 ,x_proj_fp_option_id => l_proj_fp_options_id
2167 ,x_return_status => l_return_status
2168 ,x_msg_count => l_msg_count
2169 ,x_msg_data => l_msg_data );
2170
2171 l_trace_stage := 120;
2172 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2173 IF l_debug_mode = 'Y' THEN
2174 pa_debug.g_err_stage:=' API pa_fin_plan_pub.create_version api return Status : '||l_return_status;
2175 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2176 pa_debug.g_err_stage:=' API pa_fin_plan_pub.create_version api l_budget_version_id : '||l_budget_version_id;
2177 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2178 pa_debug.g_err_stage:=' API pa_fin_plan_pub.create_version api l_proj_fp_options_id : '||l_proj_fp_options_id;
2179 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2180 END IF;
2181
2182 l_trace_stage := 130;
2183 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2184
2185 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2186 IF l_debug_mode = 'Y' THEN
2187 pa_debug.g_err_stage:='Called API pa_fin_plan_pub.create_version api returned error';
2188 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2189 END IF;
2190 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2191 END IF;
2192
2193 END IF;
2194
2195 IF l_debug_mode = 'Y' THEN
2196 pa_debug.g_err_stage:='l_budget_version_id, l_fin_plan_type_id = '||l_budget_version_id||','|| l_fin_plan_type_id;
2197 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2198 END IF;
2199
2200 END IF;
2201
2202 --Get the no of tasks passed . If none are passed then return
2203 l_elem_version_id_count := p_task_elem_version_id_tbl.COUNT;
2204 l_trace_stage := 140;
2205 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2206
2207 IF l_debug_mode = 'Y' THEN
2208 pa_debug.g_err_stage:='Validating input parameters - count of p_task_elem_version_id_tbl = '||l_elem_version_id_count;
2209 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2210 END IF;
2211
2212 IF l_elem_version_id_count = 0 THEN
2213 l_trace_stage := 150;
2214 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2215 IF l_debug_mode = 'Y' THEN
2216 pa_debug.g_err_stage:='Validating input parameters - elem_version_id table is empty - p_context = '||p_context;
2217 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2218 pa_debug.reset_curr_function;
2219 END IF;
2220 RETURN;
2221 END IF;
2222
2223 l_trace_stage := 160;
2224 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2225 ELSIF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
2226
2227 l_trace_stage := 170;
2228 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2229 IF p_budget_version_id IS NULL THEN
2230
2231 IF l_debug_mode = 'Y' THEN
2232 pa_debug.g_err_stage:='p_budget_version_id is null for p_context :' || p_context;
2233 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2234 END IF;
2235 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2236 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
2237 --dbms_output.put_line('bv id is null for BF');
2238 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2239 ELSE
2240 l_trace_stage := 180;
2241 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2242 l_budget_version_id := p_budget_version_id;
2243 END IF;
2244
2245 l_trace_stage := 190;
2246 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2247 END IF;
2248
2249 IF l_debug_mode = 'Y' THEN
2250 pa_debug.g_err_stage:='Fetching resource List id - l_resource_list_id : ';
2251 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2252 END IF;
2253 l_trace_stage := 200;
2254 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2255 --dbms_output.put_line('2.3 '||l_budget_version_id);
2256
2257 --Get the required details for the budget version id
2258 SELECT nvl(cost_resource_list_id, nvl(revenue_resource_list_id, all_resource_list_id))
2259 ,rbs_version_id
2260 INTO l_resource_list_id
2261 ,l_rbs_version_id
2262 FROM pa_proj_fp_options
2263 WHERE fin_plan_version_id=l_budget_version_id;
2264
2265 IF l_debug_mode = 'Y' THEN
2266 pa_debug.g_err_stage:='Fetching resource List id - l_resource_list_id : '|| l_resource_list_id;
2267 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2268 END IF;
2269
2270 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Starts
2271 BEGIN
2272 IF l_debug_mode = 'Y' THEN
2273 pa_debug.g_err_stage:='Fetching spread curve id for fixed date spread curve';
2274 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2275 END IF;
2276 Select spread_curve_id
2277 into l_fixed_date_sp_id
2278 from pa_spread_curves_b
2279 where spread_curve_code = 'FIXED_DATE';
2280
2281 IF l_debug_mode = 'Y' THEN
2282 pa_debug.g_err_stage:='Fetching spread curve id l_fixed_date_sp_id:'||l_fixed_date_sp_id;
2283 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2284 END IF;
2285
2286 EXCEPTION
2287 WHEN NO_DATA_FOUND THEN
2288 IF l_debug_mode = 'Y' THEN
2289 pa_debug.g_err_stage:='Fixed date spread curve not found in system';
2290 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,5);
2291 END IF;
2292 RAISE;
2293 END;
2294 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Ends
2295
2296
2297 l_trace_stage := 210;
2298 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2299
2300 --dbms_output.put_line('2.2');
2301 -----------------------------------------------------------------------------------------------------------------------
2302 -- Fetching the resource class member ids for Class Codes in ('FINANCIAL_ELEMENTS','PEOPLE','EQUIPMENT','MATERIAL')
2303 -- and setting all Cost PLsql tables that will be needed for calling Calculate API as Empty tabs
2304 -- Bug 3749516 Removing rlm id for EQUIPMENT below
2305 -----------------------------------------------------------------------------------------------------------------------
2306
2307 IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN
2308 l_trace_stage := 220;
2309 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2310
2311 IF l_debug_mode = 'Y' THEN
2312 pa_debug.g_err_stage:='Calling API pa_planning_transaction_utils.Get_Res_Class_Rlm_Ids';
2313 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2314 END IF;
2315
2316 pa_planning_transaction_utils.Get_Res_Class_Rlm_Ids
2317 (p_project_id => p_project_id,
2318 p_resource_list_id => l_resource_list_id,
2319 x_people_res_class_rlm_id => l_people_res_class_rlm_id,
2320 x_equip_res_class_rlm_id => l_equip_res_class_rlm_id,
2321 x_fin_res_class_rlm_id => l_fin_res_class_rlm_id,
2322 x_mat_res_class_rlm_id => l_mat_res_class_rlm_id,
2323 x_return_status => l_return_status,
2324 x_msg_count => l_msg_count,
2325 x_msg_data => l_msg_data);
2326 l_trace_stage := 230;
2327 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2328 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2329 IF l_debug_mode = 'Y' THEN
2330 pa_debug.g_err_stage:='Called API pa_planning_transaction_utils.Get_Res_Class_Rlm_Ids api returned error';
2331 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2332 END IF;
2333 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2334 END IF;
2335
2336 l_trace_stage := 240;
2337 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2338
2339 IF l_debug_mode = 'Y' THEN
2340 pa_debug.g_err_stage:='l_people_res_class_rlm_id : '||l_people_res_class_rlm_id;
2341 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2342 END IF;
2343
2344 l_eligible_rlm_ids_tbl(1) := l_people_res_class_rlm_id;
2345
2346 l_trace_stage := 250;
2347 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2348 ELSE
2349 --dbms_output.put_line('2.1');
2350 l_trace_stage := 260;
2351 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2352 l_eligible_rlm_ids_tbl := p_resource_list_member_id_tbl;
2353
2354 END IF;
2355
2356 /**************** initializing pm product code ************/
2357 IF l_eligible_rlm_ids_tbl.count > 0 Then
2358 FOR i IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST LOOP
2359 If (NOT p_pm_product_code.EXISTS(i))
2360 then
2361 l_pm_product_code_tbl(i) := null;
2362 elsif ( p_pm_product_code(i) = fnd_api.g_miss_char)
2363 Then
2364 l_pm_product_code_tbl(i) := null;
2365 Else
2366 l_pm_product_code_tbl(i) := p_pm_product_code(i);
2367 End If;
2368
2369 If (NOT p_pm_res_asgmt_ref.EXISTS(i))
2370 then
2371 l_pm_res_asgmt_ref_tbl(i) := null;
2372 elsif (p_pm_res_asgmt_ref(i) = fnd_api.g_miss_char)
2373 Then
2374 l_pm_res_asgmt_ref_tbl(i) := null;
2375 Else
2376 l_pm_res_asgmt_ref_tbl(i) := p_pm_res_asgmt_ref(i);
2377 End If;
2378 END loop;
2379 End IF;
2380
2381 /**************** end ------------------- initializing pm product code ************/
2382
2383
2384 l_trace_stage := 290;
2385 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2386
2387 --------------------------------------------------------------------
2388 -- Calling procedure PA_PLANNING_RESOURCE_UTILS.get_resource_defaults
2389 -- to get the resource defaults for the rlm ids passed
2390 -- Please note that this API call will be modified, once the API is
2391 -- finalised.
2392 -- - STARTS
2393 --------------------------------------------------------------------
2394
2395 IF l_debug_mode = 'Y' THEN
2396 pa_debug.g_err_stage:='Calling API PA_PLANNING_RESOURCE_UTILS.get_resource_defaults';
2397 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2398 END IF;
2399
2400 l_trace_stage := 300;
2401 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2402 PA_PLANNING_RESOURCE_UTILS.get_resource_defaults(
2403 p_resource_list_members => l_eligible_rlm_ids_tbl,
2404 p_project_id => p_project_id,
2405 x_resource_class_flag => l_resource_class_flag_tbl,
2406 x_resource_class_code => l_resource_class_code_tbl,
2407 x_resource_class_id => l_resource_class_id_tbl,
2408 x_res_type_code => l_res_type_code_tbl,
2409 x_person_id => l_person_id_tbl,
2410 x_job_id => l_job_id_tbl,
2411 x_person_type_code => l_person_type_code_tbl,
2412 x_named_role => l_named_role_tbl,
2413 x_bom_resource_id => l_bom_resource_id_tbl,
2414 x_non_labor_resource => l_non_labor_resource_tbl,
2415 x_inventory_item_id => l_inventory_item_id_tbl,
2416 x_item_category_id => l_item_category_id_tbl,
2417 x_project_role_id => l_project_role_id_tbl,
2418 x_organization_id => l_organization_id_tbl,
2419 x_fc_res_type_code => l_fc_res_type_code_tbl,
2420 x_expenditure_type => l_expenditure_type_tbl,
2421 x_expenditure_category => l_expenditure_category_tbl,
2422 x_event_type => l_event_type_tbl,
2423 x_revenue_category_code => l_revenue_category_code_tbl,
2424 x_supplier_id => l_supplier_id_tbl,
2425 x_unit_of_measure => l_unit_of_measure_tbl,
2426 x_spread_curve_id => l_spread_curve_id_tbl,
2427 x_etc_method_code => l_etc_method_code_tbl,
2428 x_mfc_cost_type_id => l_mfc_cost_type_id_tbl,
2429 x_incurred_by_res_flag => l_incurred_by_res_flag_tbl,
2430 x_incur_by_res_class_code => l_incur_by_res_class_code_tbl,
2431 x_Incur_by_role_id => l_Incur_by_role_id_tbl,
2432 x_org_id => l_org_id_tbl,
2433 X_rate_based_flag => l_rate_based_flag_tbl,
2434 x_rate_expenditure_type => l_rate_expenditure_type_tbl,
2435 x_rate_func_curr_code => l_rate_func_curr_code_tbl,
2436 x_incur_by_res_type => l_incur_by_res_type ,
2437 x_msg_data => l_msg_data,
2438 x_msg_count => l_msg_count,
2439 x_return_status => l_return_status);
2440 l_trace_stage := 310;
2441 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2442
2443 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2444
2445 IF l_debug_mode = 'Y' THEN
2446 pa_debug.g_err_stage:='Called APIPA_PLANNING_RESOURCE_UTILS.get_resource_defaults api returned error';
2447 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2448 END IF;
2449 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2450
2451 END IF;
2452
2453 IF l_debug_mode = 'Y' THEN
2454
2455 IF l_eligible_rlm_ids_tbl.COUNT >0 THEN
2456 pa_debug.g_err_stage:='Parameters to PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs';
2457 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2458
2459
2460 pa_debug.g_err_stage:='p_budget_version_id '||l_budget_version_id;
2461 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2462
2463 pa_debug.g_err_stage:='l_resource_list_id '||l_resource_list_id;
2464 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2465
2466 pa_debug.g_err_stage:='l_rbs_version_id '||l_rbs_version_id;
2467 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2468
2469 pa_debug.g_err_stage:='l_eligible_rlm_ids_tbl(1) '||l_eligible_rlm_ids_tbl(1);
2470 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2471
2472 pa_debug.g_err_stage:='l_txn_src_typ_code_rbs_prm_tbl(1) '||l_txn_src_typ_code_rbs_prm_tbl(1);
2473 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2474
2475 pa_debug.g_err_stage:='l_person_id_tbl(1) '||l_person_id_tbl(1);
2476 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2477
2478 pa_debug.g_err_stage:='l_job_id_tbl(1) '||l_job_id_tbl(1);
2479 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2480
2481 pa_debug.g_err_stage:='l_organization_id_tbl(1) '||l_organization_id_tbl(1);
2482 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2483
2484 pa_debug.g_err_stage:='l_supplier_id_tbl(1) '||l_supplier_id_tbl(1);
2485 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2486
2487 pa_debug.g_err_stage:='l_expenditure_type_tbl(1) '||l_expenditure_type_tbl(1);
2488 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2489
2490 pa_debug.g_err_stage:='l_event_type_tbl(1) '||l_event_type_tbl(1);
2491 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2492
2493 pa_debug.g_err_stage:='l_expenditure_category_tbl(1) '||l_expenditure_category_tbl(1);
2494 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2495
2496 pa_debug.g_err_stage:='l_revenue_category_code_tbl(1) '||l_revenue_category_code_tbl(1);
2497 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2498
2499 pa_debug.g_err_stage:='l_project_role_id_tbl(1) '||l_project_role_id_tbl(1);
2500 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2501
2502 pa_debug.g_err_stage:='l_resource_class_code_tbl(1) '||l_resource_class_code_tbl(1);
2503 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2504
2505 pa_debug.g_err_stage:='l_item_category_id_tbl(1) '||l_item_category_id_tbl(1);
2506 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2507
2508 pa_debug.g_err_stage:='l_person_type_code_tbl(1) '||l_person_type_code_tbl(1);
2509 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2510
2511 pa_debug.g_err_stage:='l_bom_resource_id_tbl(1) '||l_bom_resource_id_tbl(1);
2512 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2513
2514 END IF;
2515
2516
2517 END IF;
2518
2519
2520 --Loop thru the passed rlm id table to prepare the l_txn_src_typ_code_rbs_prm_tbl pl/sql table.
2521 --All the elements in this table should be set to 'RES_ASSIGNMENT'
2522
2523 --NOTE : This loop is also used to transfer the l_incur_by_res_type(i) to l_res_type_code_tbl(i) if
2524 --l_incurred_by_res_flag_tbl(i) is Y. Ultimately l_res_type_code_tbl will be used in populationg
2525 --res type code in pa_resource_assignments
2526 l_res_type_code_tbl.EXTEND(l_eligible_rlm_ids_tbl.COUNT-l_res_type_code_tbl.COUNT);
2527 FOR i IN l_eligible_rlm_ids_tbl.FIRST..l_eligible_rlm_ids_tbl.LAST LOOP
2528
2529 l_txn_src_typ_code_rbs_prm_tbl(i):='RES_ASSIGNMENT';
2530
2531 IF l_incurred_by_res_flag_tbl.EXISTS(i) AND nvl(l_incurred_by_res_flag_tbl(i),'N') = 'Y' THEN
2532 IF l_incur_by_res_type.EXISTS(i) THEN
2533 l_res_type_code_tbl(i) := l_incur_by_res_type(i);
2534 ELSE
2535 l_res_type_code_tbl(i) := NULL;
2536 END IF;
2537 END IF;
2538
2539 END LOOP;
2540
2541 --Extend the output pl/sql tbls l_rbs_element_id_tbl and l_txn_accum_header_id_tbl so that they contatin
2542 --the same no of records as l_eligible_rlm_ids_tbl
2543 l_rbs_element_id_tbl.EXTEND(l_eligible_rlm_ids_tbl.COUNT);
2544 l_txn_accum_header_id_tbl.EXTEND(l_eligible_rlm_ids_tbl.COUNT);
2545
2546 --Call the RBS Mapping API only if the rbs version id is not null
2547 IF l_rbs_version_id IS NOT NULL THEN
2548
2549 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,'before PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs',3);
2550
2551 PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
2552 p_budget_version_id => l_budget_version_id
2553 ,p_resource_list_id => l_resource_list_id
2554 ,p_rbs_version_id => l_rbs_version_id
2555 ,p_calling_process => 'RBS_REFRESH'
2556 ,p_calling_context => 'PLSQL'
2557 ,p_process_code => 'RBS_MAP'
2558 ,p_calling_mode => 'PLSQL_TABLE'
2559 ,p_init_msg_list_flag => 'N'
2560 ,p_commit_flag => 'N'
2561 ,p_TXN_SOURCE_ID_tab => l_eligible_rlm_ids_tbl
2562 ,p_TXN_SOURCE_TYPE_CODE_tab => l_txn_src_typ_code_rbs_prm_tbl
2563 ,p_PERSON_ID_tab => l_person_id_tbl
2564 ,p_JOB_ID_tab => l_job_id_tbl
2565 ,p_ORGANIZATION_ID_tab => l_organization_id_tbl
2566 ,p_VENDOR_ID_tab => l_supplier_id_tbl
2567 ,p_EXPENDITURE_TYPE_tab => l_expenditure_type_tbl
2568 ,p_EVENT_TYPE_tab => l_event_type_tbl
2569 ,p_EXPENDITURE_CATEGORY_tab => l_expenditure_category_tbl
2570 ,p_REVENUE_CATEGORY_CODE_tab => l_revenue_category_code_tbl
2571 ,p_PROJECT_ROLE_ID_tab => l_project_role_id_tbl
2572 ,p_RESOURCE_CLASS_CODE_tab => l_resource_class_code_tbl
2573 ,p_ITEM_CATEGORY_ID_tab => l_item_category_id_tbl
2574 ,p_PERSON_TYPE_CODE_tab => l_person_type_code_tbl
2575 ,p_BOM_RESOURCE_ID_tab => l_bom_resource_id_tbl
2576 ,p_NON_LABOR_RESOURCE_tab => l_non_labor_resource_tbl -- Bug 3711741
2577 ,p_INVENTORY_ITEM_ID_tab => l_inventory_item_id_tbl -- Bug 3698596
2578 ,x_txn_source_id_tab => l_txn_source_id_tbl
2579 ,x_res_list_member_id_tab => l_res_list_member_id_tbl
2580 ,x_rbs_element_id_tab => l_rbs_element_id_tbl
2581 ,x_txn_accum_header_id_tab => l_txn_accum_header_id_tbl
2582 ,x_return_status => x_return_status
2583 ,x_msg_count => x_msg_count
2584 ,x_msg_data => x_msg_data);
2585
2586 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2587
2588 IF l_debug_mode = 'Y' THEN
2589 pa_debug.g_err_stage:='Called API PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs returned error';
2590 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2591 END IF;
2592 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2593
2594 END IF;
2595
2596 END IF; --IF l_rbs_version_id IS NOT NULL THEN
2597
2598
2599 --Call the rbs mapping API for the rlm ids obtained above
2600
2601 l_trace_stage := 320;
2602 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2603 --------------------------------------------------------------------
2604 -- Calling procedure abcd.get_multiple_resource_defaults to get the
2605 -- resource defaults for the rlm ids passed
2606 -- Please note that this API call will be modified, once the API is
2607 -- finalised.
2608 -- - ENDS
2609 --------------------------------------------------------------------
2610
2611
2612 -------------------------------------------------------------------------
2613 -- For p_context = TASK_ASSIGNMENTS - Processing Starts Here
2614 -------------------------------------------------------------------------
2615 l_trace_stage := 330;
2616 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2617 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
2618 l_trace_stage := 340;
2619 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2620 IF l_debug_mode = 'Y' THEN
2621 pa_debug.g_err_stage:='Doing processing for TASK ASSIGNMENTS : p_context is'|| p_context;
2622 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2623 END IF;
2624 -------------------------------------------------------------------------
2625 -- To call Task Validation API we populate the PLSql tables with task
2626 -- and resource data.
2627 -------------------------------------------------------------------------
2628
2629 IF l_debug_mode = 'Y' THEN
2630 pa_debug.g_err_stage:='Populating PlSql table with Task Data';
2631 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2632 END IF;
2633
2634 -----------------------------------------------------------------
2635 -- Populating Table of task_rec_type
2636 -----------------------------------------------------------------
2637 FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
2638 l_trace_stage := 350;
2639 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2640
2641 l_task_rec_tbl(i).project_id := p_project_id;
2642 l_task_rec_tbl(i).struct_elem_version_id := p_struct_elem_version_id;
2643 l_task_rec_tbl(i).task_elem_version_id := p_task_elem_version_id_tbl(i);
2644 IF p_task_name_tbl.EXISTS(i) THEN
2645 l_task_rec_tbl(i).task_name := p_task_name_tbl(i);
2646 END IF;
2647
2648 IF p_task_number_tbl.EXISTS(i) THEN
2649 l_task_rec_tbl(i).task_number := p_task_number_tbl(i);
2650 END IF;
2651
2652 IF p_start_date_tbl.EXISTS(i) THEN
2653 l_task_rec_tbl(i).start_date := p_start_date_tbl(i);
2654 END IF;
2655
2656 IF p_end_date_tbl.EXISTS(i) THEN
2657 l_task_rec_tbl(i).end_date := p_end_date_tbl(i);
2658 END IF;
2659
2660 IF p_planned_people_effort_tbl.EXISTS(i) THEN
2661 l_task_rec_tbl(i).planned_people_effort := p_planned_people_effort_tbl(i);
2662 END IF;
2663
2664 IF p_latest_eff_pub_flag_tbl.EXISTS(i) THEN
2665 l_task_rec_tbl(i).latest_eff_pub_flag := p_latest_eff_pub_flag_tbl(i);
2666 END IF;
2667 l_trace_stage := 360;
2668 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2669 END LOOP;
2670 l_trace_stage := 370;
2671 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2672
2673
2674 -----------------------------------------------------------------
2675 -- Populating Table of resource_rec_type
2676 -----------------------------------------------------------------
2677
2678 IF l_debug_mode = 'Y' THEN
2679 pa_debug.g_err_stage:='Populating PlSql table with Resource Data';
2680 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2681 END IF;
2682
2683 l_trace_stage := 380;
2684 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2685 FOR i IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST LOOP
2686 l_trace_stage := 390;
2687 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2688
2689 l_resource_rec_tbl(i).resource_list_member_id := l_eligible_rlm_ids_tbl(i);
2690
2691 IF p_project_assignment_id_tbl.EXISTS(i) THEN
2692 l_resource_rec_tbl(i).project_assignment_id := p_project_assignment_id_tbl(i);
2693 END IF;
2694
2695 IF l_resource_class_flag_tbl.EXISTS(i) THEN
2696 l_resource_rec_tbl(i).resource_class_flag := l_resource_class_flag_tbl(i);
2697 END IF;
2698
2699 IF l_resource_class_code_tbl.EXISTS(i) THEN
2700 l_resource_rec_tbl(i).resource_class_code := l_resource_class_code_tbl(i);
2701 END IF;
2702
2703 IF l_resource_class_id_tbl.EXISTS(i) THEN
2704 l_resource_rec_tbl(i).resource_class_id := l_resource_class_id_tbl(i);
2705 END IF;
2706
2707 IF l_res_type_code_tbl.EXISTS(i) THEN
2708 l_resource_rec_tbl(i).res_type_code := l_res_type_code_tbl(i);
2709 END IF;
2710
2711 IF l_person_id_tbl.EXISTS(i) THEN
2712 l_resource_rec_tbl(i).person_id := l_person_id_tbl(i);
2713 END IF;
2714
2715 IF l_job_id_tbl.EXISTS(i) THEN
2716 l_resource_rec_tbl(i).job_id := l_job_id_tbl(i);
2717 END IF;
2718
2719 IF l_person_type_code_tbl.EXISTS(i) THEN
2720 l_resource_rec_tbl(i).person_type_code := l_person_type_code_tbl(i);
2721 END IF;
2722
2723 IF l_bom_resource_id_tbl.EXISTS(i) THEN
2724 l_resource_rec_tbl(i).bom_resource_id := l_bom_resource_id_tbl(i);
2725 END IF;
2726
2727 IF l_inventory_item_id_tbl.EXISTS(i) THEN
2728 l_resource_rec_tbl(i).inventory_item_id := l_inventory_item_id_tbl(i);
2729 END IF;
2730
2731 IF l_item_category_id_tbl.EXISTS(i) THEN
2732 l_resource_rec_tbl(i).item_category_id := l_item_category_id_tbl(i);
2733 END IF;
2734
2735 IF l_project_role_id_tbl.EXISTS(i) THEN
2736 l_resource_rec_tbl(i).project_role_id := l_project_role_id_tbl(i);
2737 END IF;
2738
2739 IF l_organization_id_tbl.EXISTS(i) THEN
2740 l_resource_rec_tbl(i).organization_id := l_organization_id_tbl(i);
2741 END IF;
2742
2743 IF l_fc_res_type_code_tbl.EXISTS(i) THEN
2744 l_resource_rec_tbl(i).fc_res_type_code := l_fc_res_type_code_tbl(i);
2745 END IF;
2746
2747 IF l_expenditure_type_tbl.EXISTS(i) THEN
2748 l_resource_rec_tbl(i).expenditure_type := l_expenditure_type_tbl(i);
2749 END IF;
2750
2751 IF l_expenditure_category_tbl.EXISTS(i) THEN
2752 l_resource_rec_tbl(i).expenditure_category := l_expenditure_category_tbl(i);
2753 END IF;
2754
2755 IF l_event_type_tbl.EXISTS(i) THEN
2756 l_resource_rec_tbl(i).event_type := l_event_type_tbl(i);
2757 END IF;
2758
2759 IF l_revenue_category_code_tbl.EXISTS(i) THEN
2760 l_resource_rec_tbl(i).revenue_category_code := l_revenue_category_code_tbl(i);
2761 END IF;
2762
2763 IF l_supplier_id_tbl.EXISTS(i) THEN
2764 l_resource_rec_tbl(i).supplier_id := l_supplier_id_tbl(i);
2765 END IF;
2766
2767 IF l_unit_of_measure_tbl.EXISTS(i) THEN
2768 l_resource_rec_tbl(i).unit_of_measure := l_unit_of_measure_tbl(i);
2769 END IF;
2770
2771 IF l_spread_curve_id_tbl.EXISTS(i) THEN
2772 l_resource_rec_tbl(i).spread_curve_id := l_spread_curve_id_tbl(i);
2773 END IF;
2774
2775 IF l_etc_method_code_tbl.EXISTS(i) THEN
2776 l_resource_rec_tbl(i).etc_method_code := l_etc_method_code_tbl(i);
2777 END IF;
2778
2779 IF l_mfc_cost_type_id_tbl.EXISTS(i) THEN
2780 l_resource_rec_tbl(i).mfc_cost_type_id := l_mfc_cost_type_id_tbl(i);
2781 END IF;
2782
2783 IF l_incurred_by_res_flag_tbl.EXISTS(i) THEN
2784 l_resource_rec_tbl(i).incurred_by_res_flag := l_incurred_by_res_flag_tbl(i);
2785 END IF;
2786
2787 IF l_Incur_by_res_class_code_tbl.EXISTS(i) THEN
2788 l_resource_rec_tbl(i).Incur_by_res_class_code := l_Incur_by_res_class_code_tbl(i);
2789 END IF;
2790
2791 IF l_Incur_by_role_id_tbl.EXISTS(i) THEN
2792 l_resource_rec_tbl(i).Incur_by_role_id := l_Incur_by_role_id_tbl(i);
2793 END IF;
2794
2795 IF l_named_role_tbl.EXISTS(i) THEN
2796 l_resource_rec_tbl(i).named_role := l_named_role_tbl(i);
2797 END IF;
2798
2799 IF l_non_labor_resource_tbl.EXISTS(i) THEN
2800 l_resource_rec_tbl(i).non_labor_resource := l_non_labor_resource_tbl(i);
2801 END IF;
2802
2803 IF p_quantity_tbl.EXISTS(i) THEN
2804 l_resource_rec_tbl(i).total_quantity := p_quantity_tbl(i);
2805 END IF;
2806
2807 IF l_unplanned_flag_tbl.EXISTS(i) THEN
2808 l_resource_rec_tbl(i).unplanned_flag := l_unplanned_flag_tbl(i);
2809 END IF;
2810
2811 -- Bug 3793623
2812 IF p_planning_start_date_tbl.EXISTS(i) THEN
2813 l_resource_rec_tbl(i).planning_start_date := p_planning_start_date_tbl(i);
2814 END IF;
2815
2816 IF p_planning_end_date_tbl.EXISTS(i) THEN
2817 l_resource_rec_tbl(i).planning_end_date := p_planning_end_date_tbl(i);
2818 END IF;
2819
2820 --For Bug 3877875
2821 IF p_ATTRIBUTE_CATEGORY_tbl.EXISTS(i) THEN
2822 l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY := p_ATTRIBUTE_CATEGORY_tbl(i);
2823 END IF;
2824
2825 IF p_ATTRIBUTE1.EXISTS(i) THEN
2826 l_resource_rec_tbl(i).ATTRIBUTE1 := p_ATTRIBUTE1(i);
2827 END IF;
2828
2829 IF p_ATTRIBUTE2.EXISTS(i) THEN
2830 l_resource_rec_tbl(i).ATTRIBUTE2 := p_ATTRIBUTE2(i);
2831 END IF;
2832
2833 IF p_ATTRIBUTE3.EXISTS(i) THEN
2834 l_resource_rec_tbl(i).ATTRIBUTE3 := p_ATTRIBUTE3(i);
2835 END IF;
2836
2837 IF p_ATTRIBUTE4.EXISTS(i) THEN
2838 l_resource_rec_tbl(i).ATTRIBUTE4 := p_ATTRIBUTE4(i);
2839 END IF;
2840
2841 IF p_ATTRIBUTE5.EXISTS(i) THEN
2842 l_resource_rec_tbl(i).ATTRIBUTE5 := p_ATTRIBUTE5(i);
2843 END IF;
2844
2845 IF p_ATTRIBUTE6.EXISTS(i) THEN
2846 l_resource_rec_tbl(i).ATTRIBUTE6 := p_ATTRIBUTE6(i);
2847 END IF;
2848
2849 IF p_ATTRIBUTE7.EXISTS(i) THEN
2850 l_resource_rec_tbl(i).ATTRIBUTE7 := p_ATTRIBUTE7(i);
2851 END IF;
2852
2853 IF p_ATTRIBUTE8.EXISTS(i) THEN
2854 l_resource_rec_tbl(i).ATTRIBUTE8 := p_ATTRIBUTE8(i);
2855 END IF;
2856
2857 IF p_ATTRIBUTE9.EXISTS(i) THEN
2858 l_resource_rec_tbl(i).ATTRIBUTE9 := p_ATTRIBUTE9(i);
2859 END IF;
2860
2861 IF p_ATTRIBUTE10.EXISTS(i) THEN
2862 l_resource_rec_tbl(i).ATTRIBUTE10 := p_ATTRIBUTE10(i);
2863 END IF;
2864
2865 IF p_ATTRIBUTE11.EXISTS(i) THEN
2866 l_resource_rec_tbl(i).ATTRIBUTE11 := p_ATTRIBUTE11(i);
2867 END IF;
2868
2869 IF p_ATTRIBUTE12.EXISTS(i) THEN
2870 l_resource_rec_tbl(i).ATTRIBUTE12 := p_ATTRIBUTE12(i);
2871 END IF;
2872
2873 IF p_ATTRIBUTE13.EXISTS(i) THEN
2874 l_resource_rec_tbl(i).ATTRIBUTE13 := p_ATTRIBUTE13(i);
2875 END IF;
2876
2877 IF p_ATTRIBUTE14.EXISTS(i) THEN
2878 l_resource_rec_tbl(i).ATTRIBUTE14 := p_ATTRIBUTE14(i);
2879 END IF;
2880
2881 IF p_ATTRIBUTE15.EXISTS(i) THEN
2882 l_resource_rec_tbl(i).ATTRIBUTE15 := p_ATTRIBUTE15(i);
2883 END IF;
2884
2885 IF p_ATTRIBUTE16.EXISTS(i) THEN
2886 l_resource_rec_tbl(i).ATTRIBUTE16 := p_ATTRIBUTE16(i);
2887 END IF;
2888
2889 IF p_ATTRIBUTE17.EXISTS(i) THEN
2890 l_resource_rec_tbl(i).ATTRIBUTE17 := p_ATTRIBUTE17(i);
2891 END IF;
2892
2893 IF p_ATTRIBUTE18.EXISTS(i) THEN
2894 l_resource_rec_tbl(i).ATTRIBUTE18 := p_ATTRIBUTE18(i);
2895 END IF;
2896
2897 IF p_ATTRIBUTE19.EXISTS(i) THEN
2898 l_resource_rec_tbl(i).ATTRIBUTE19 := p_ATTRIBUTE19(i);
2899 END IF;
2900
2901 IF p_ATTRIBUTE20.EXISTS(i) THEN
2902 l_resource_rec_tbl(i).ATTRIBUTE20 := p_ATTRIBUTE20(i);
2903 END IF;
2904
2905 IF p_ATTRIBUTE21.EXISTS(i) THEN
2906 l_resource_rec_tbl(i).ATTRIBUTE21 := p_ATTRIBUTE21(i);
2907 END IF;
2908
2909 IF p_ATTRIBUTE22.EXISTS(i) THEN
2910 l_resource_rec_tbl(i).ATTRIBUTE22 := p_ATTRIBUTE22(i);
2911 END IF;
2912
2913 IF p_ATTRIBUTE23.EXISTS(i) THEN
2914 l_resource_rec_tbl(i).ATTRIBUTE23 := p_ATTRIBUTE23(i);
2915 END IF;
2916
2917 IF p_ATTRIBUTE24.EXISTS(i) THEN
2918 l_resource_rec_tbl(i).ATTRIBUTE24 := p_ATTRIBUTE24(i);
2919 END IF;
2920
2921 IF p_ATTRIBUTE25.EXISTS(i) THEN
2922 l_resource_rec_tbl(i).ATTRIBUTE25 := p_ATTRIBUTE25(i);
2923 END IF;
2924
2925 IF p_ATTRIBUTE26.EXISTS(i) THEN
2926 l_resource_rec_tbl(i).ATTRIBUTE26 := p_ATTRIBUTE26(i);
2927 END IF;
2928
2929 IF p_ATTRIBUTE27.EXISTS(i) THEN
2930 l_resource_rec_tbl(i).ATTRIBUTE27 := p_ATTRIBUTE27(i);
2931 END IF;
2932
2933 IF p_ATTRIBUTE28.EXISTS(i) THEN
2934 l_resource_rec_tbl(i).ATTRIBUTE28 := p_ATTRIBUTE28(i);
2935 END IF;
2936
2937 IF p_ATTRIBUTE29.EXISTS(i) THEN
2938 l_resource_rec_tbl(i).ATTRIBUTE29 := p_ATTRIBUTE29(i);
2939 END IF;
2940
2941 IF p_ATTRIBUTE30.EXISTS(i) THEN
2942 l_resource_rec_tbl(i).ATTRIBUTE30 := p_ATTRIBUTE30(i);
2943 END IF;
2944 --For bug 3877875
2945
2946 --For bug 3948128
2947 IF p_scheduled_delay.EXISTS(i) THEN
2948 l_resource_rec_tbl(i).scheduled_delay := p_scheduled_delay(i);
2949 END IF;
2950
2951
2952 l_trace_stage := 400;
2953 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2954
2955 END LOOP;
2956 l_trace_stage := 410;
2957 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2958
2959
2960 -------------------------------------------------
2961 -- Calling Task validation API
2962 -------------------------------------------------
2963 IF l_debug_mode = 'Y' THEN
2964 pa_debug.g_err_stage:='Calling API pa_task_assignment_utils.Validate_Create_Assignment';
2965 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2966 END IF;
2967
2968 l_trace_stage := 420;
2969 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2970 --dbms_output.put_line('qty bef is '||l_resource_rec_tbl(1).planning_start_Date);
2971 --dbms_output.put_line('qty aft is '||l_resource_rec_tbl(1).planning_end_date);
2972 -- For Bug 3665097 : New param p_one_to_one_mapping_flag added below.
2973 -- This will be synced up with Validate_Create_Assignment changes.
2974 pa_task_assignment_utils.Validate_Create_Assignment(
2975 p_calling_context => p_calling_context, -- Added for Bug 6856934
2976 p_one_to_one_mapping_flag => p_one_to_one_mapping_flag,
2977 p_task_rec_tbl => l_task_rec_tbl,
2978 p_task_assignment_tbl => l_resource_rec_tbl,
2979 x_del_task_level_rec_code_tbl => l_del_task_level_rec_code_tbl, --Paramater obsoletted , not in use any more
2980 x_return_status => l_return_status);
2981 --dbms_output.put_line('qty aft is '||l_resource_rec_tbl(1).planning_start_date);
2982 --dbms_output.put_line('qty aft is '||l_resource_rec_tbl(1).planning_end_date);
2983
2984 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2985 IF l_debug_mode = 'Y' THEN
2986 pa_debug.g_err_stage:='Called API pa_task_assignment_utils.Validate_Create_Assignment returned error';
2987 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2988 END IF;
2989 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2990 END IF;
2991 IF l_debug_mode = 'Y' THEN
2992 pa_debug.g_err_stage:='Returned from pa_task_assignment_utils.Validate_Create_Assignment';
2993 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2994 END IF;
2995
2996 l_trace_stage := 430;
2997 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2998
2999 -----------------------------------------------------------------------
3000 -- Check if the name of records in l_del_task_level_rec_code_tbl is same
3001 -- as the number of records in p_task_elem_version_id_tbl - Starts
3002 -----------------------------------------------------------------------
3003
3004 l_trace_stage := 460;
3005 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3006 -----------------------------------------------------------------------
3007 -- The resource data tables shall be re-populated by the in out parameter
3008 -- parameter l_resource_rec_tbl, in the API call pa_task_assignment_utils.
3009 -- Validate_Create_Assignment above. So deleting alll existing data from
3010 -- the resource data tables.
3011 -----------------------------------------------------------------------
3012
3013 IF l_debug_mode = 'Y' THEN
3014 pa_debug.g_err_stage:='Deleting Data from all resource PLSql tables';
3015 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3016 END IF;
3017
3018 l_trace_stage := 450;
3019 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3020
3021 -----------------------------------------------------------------------
3022 -- Repopulating all the resource data tables from the output parameter
3023 -- table l_resource_rec_tbl of the above API call pa_task_assignment_utils.
3024 -- Validate_Create_Assignment
3025 -----------------------------------------------------------------------
3026
3027 IF l_debug_mode = 'Y' THEN
3028 pa_debug.g_err_stage:='Populating resource data tables from the output parameter table l_resource_rec_tbl';
3029 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3030 END IF;
3031
3032 FOR i IN l_resource_rec_tbl.FIRST .. l_resource_rec_tbl.LAST LOOP
3033 l_trace_stage := 460;
3034 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3035
3036 IF l_resource_rec_tbl.EXISTS(i) THEN
3037
3038 IF l_resource_rec_tbl(i).resource_list_member_id = FND_API.G_MISS_NUM THEN
3039 l_eligible_rlm_ids_tbl(i) := NULL;
3040 ELSE
3041 l_eligible_rlm_ids_tbl(i) := l_resource_rec_tbl(i).resource_list_member_id;
3042 END IF;
3043
3044 IF l_resource_rec_tbl(i).resource_class_flag = FND_API.G_MISS_CHAR THEN
3045 l_resource_class_flag_tbl(i) := NULL;
3046 ELSE
3047 l_resource_class_flag_tbl(i) := l_resource_rec_tbl(i).resource_class_flag;
3048 END IF;
3049
3050 IF l_resource_rec_tbl(i).resource_class_code = FND_API.G_MISS_CHAR THEN
3051 l_resource_class_code_tbl(i) := NULL;
3052 ELSE
3053 l_resource_class_code_tbl(i) := l_resource_rec_tbl(i).resource_class_code;
3054 END IF;
3055
3056 IF l_resource_rec_tbl(i).resource_class_id = FND_API.G_MISS_NUM THEN
3057 l_resource_class_id_tbl(i) := NULL;
3058 ELSE
3059 l_resource_class_id_tbl(i) := l_resource_rec_tbl(i).resource_class_id;
3060 END IF;
3061
3062 IF l_resource_rec_tbl(i).res_type_code = FND_API.G_MISS_CHAR THEN
3063 l_res_type_code_tbl(i) := NULL;
3064 ELSE
3065 l_res_type_code_tbl(i) := l_resource_rec_tbl(i).res_type_code;
3066 END IF;
3067
3068 IF l_resource_rec_tbl(i).person_id = FND_API.G_MISS_NUM THEN
3069 l_person_id_tbl(i) := NULL;
3070 ELSE
3071 l_person_id_tbl(i) := l_resource_rec_tbl(i).person_id;
3072 END IF;
3073
3074 IF l_resource_rec_tbl(i).job_id = FND_API.G_MISS_NUM THEN
3075 l_job_id_tbl(i) := NULL;
3076 ELSE
3077 l_job_id_tbl(i) := l_resource_rec_tbl(i).job_id;
3078 END IF;
3079
3080 IF l_resource_rec_tbl(i).person_type_code = FND_API.G_MISS_CHAR THEN
3081 l_person_type_code_tbl(i) := NULL;
3082 ELSE
3083 l_person_type_code_tbl(i) := l_resource_rec_tbl(i).person_type_code;
3084 END IF;
3085
3086 IF l_resource_rec_tbl(i).bom_resource_id = FND_API.G_MISS_NUM THEN
3087 l_bom_resource_id_tbl(i) := NULL;
3088 ELSE
3089 l_bom_resource_id_tbl(i) := l_resource_rec_tbl(i).bom_resource_id;
3090 END IF;
3091
3092 IF l_resource_rec_tbl(i).inventory_item_id = FND_API.G_MISS_NUM THEN
3093 l_inventory_item_id_tbl(i) := NULL;
3094 ELSE
3095 l_inventory_item_id_tbl(i) := l_resource_rec_tbl(i).inventory_item_id;
3096 END IF;
3097
3098 IF l_resource_rec_tbl(i).item_category_id = FND_API.G_MISS_NUM THEN
3099 l_item_category_id_tbl(i) := NULL;
3100 ELSE
3101 l_item_category_id_tbl(i) := l_resource_rec_tbl(i).item_category_id;
3102 END IF;
3103
3104 IF l_resource_rec_tbl(i).project_role_id = FND_API.G_MISS_NUM THEN
3105 l_project_role_id_tbl(i) := NULL;
3106 ELSE
3107 l_project_role_id_tbl(i) := l_resource_rec_tbl(i).project_role_id;
3108 END IF;
3109
3110 IF l_resource_rec_tbl(i).organization_id = FND_API.G_MISS_NUM THEN
3111 l_organization_id_tbl(i) := NULL;
3112 ELSE
3113 l_organization_id_tbl(i) := l_resource_rec_tbl(i).organization_id;
3114 END IF;
3115
3116 IF l_resource_rec_tbl(i).fc_res_type_code = FND_API.G_MISS_CHAR THEN
3117 l_fc_res_type_code_tbl(i) := NULL;
3118 ELSE
3119 l_fc_res_type_code_tbl(i) := l_resource_rec_tbl(i).fc_res_type_code;
3120 END IF;
3121
3122 IF l_resource_rec_tbl(i).expenditure_type = FND_API.G_MISS_CHAR THEN
3123 l_expenditure_type_tbl(i) := NULL;
3124 ELSE
3125 l_expenditure_type_tbl(i) := l_resource_rec_tbl(i).expenditure_type;
3126 END IF;
3127
3128 IF l_resource_rec_tbl(i).expenditure_category = FND_API.G_MISS_CHAR THEN
3129 l_expenditure_category_tbl(i) := NULL;
3130 ELSE
3131 l_expenditure_category_tbl(i) := l_resource_rec_tbl(i).expenditure_category;
3132 END IF;
3133
3134 IF l_resource_rec_tbl(i).event_type = FND_API.G_MISS_CHAR THEN
3135 l_event_type_tbl(i) := NULL;
3136 ELSE
3137 l_event_type_tbl(i) := l_resource_rec_tbl(i).event_type;
3138 END IF;
3139
3140 IF l_resource_rec_tbl(i).revenue_category_code = FND_API.G_MISS_CHAR THEN
3141 l_revenue_category_code_tbl(i) := NULL;
3142 ELSE
3143 l_revenue_category_code_tbl(i) := l_resource_rec_tbl(i).revenue_category_code;
3144 END IF;
3145
3146 IF l_resource_rec_tbl(i).supplier_id = FND_API.G_MISS_NUM THEN
3147 l_supplier_id_tbl(i) := NULL;
3148 ELSE
3149 l_supplier_id_tbl(i) := l_resource_rec_tbl(i).supplier_id;
3150 END IF;
3151
3152 IF l_resource_rec_tbl(i).unit_of_measure = FND_API.G_MISS_CHAR THEN
3153 l_unit_of_measure_tbl(i) := NULL;
3154 ELSE
3155 l_unit_of_measure_tbl(i) := l_resource_rec_tbl(i).unit_of_measure;
3156 END IF;
3157
3158 IF l_resource_rec_tbl(i).spread_curve_id = FND_API.G_MISS_NUM THEN
3159 l_spread_curve_id_tbl(i) := NULL;
3160 ELSE
3161 l_spread_curve_id_tbl(i) := l_resource_rec_tbl(i).spread_curve_id;
3162 END IF;
3163
3164 IF l_resource_rec_tbl(i).etc_method_code = FND_API.G_MISS_CHAR THEN
3165 l_etc_method_code_tbl(i) := NULL;
3166 ELSE
3167 l_etc_method_code_tbl(i) := l_resource_rec_tbl(i).etc_method_code;
3168 END IF;
3169
3170 IF l_resource_rec_tbl(i).mfc_cost_type_id = FND_API.G_MISS_NUM THEN
3171 l_mfc_cost_type_id_tbl(i) := NULL;
3172 ELSE
3173 l_mfc_cost_type_id_tbl(i) := l_resource_rec_tbl(i).mfc_cost_type_id;
3174 END IF;
3175
3176 IF l_resource_rec_tbl(i).procure_resource_flag = FND_API.G_MISS_CHAR THEN
3177 l_procure_resource_flag_tbl(i) := NULL;
3178 ELSE
3179 l_procure_resource_flag_tbl(i) := l_resource_rec_tbl(i).procure_resource_flag;
3180 END IF;
3181
3182 IF l_resource_rec_tbl(i).incurred_by_res_flag = FND_API.G_MISS_CHAR THEN
3183 l_incurred_by_res_flag_tbl(i) := NULL;
3184 ELSE
3185 l_incurred_by_res_flag_tbl(i) := l_resource_rec_tbl(i).incurred_by_res_flag;
3186 END IF;
3187
3188 IF l_resource_rec_tbl(i).Incur_by_res_class_code = FND_API.G_MISS_CHAR THEN
3189 l_Incur_by_res_class_code_tbl(i) := NULL;
3190 ELSE
3191 l_Incur_by_res_class_code_tbl(i) := l_resource_rec_tbl(i).Incur_by_res_class_code;
3192 END IF;
3193
3194 IF l_resource_rec_tbl(i).Incur_by_role_id = FND_API.G_MISS_NUM THEN
3195 l_Incur_by_role_id_tbl(i) := NULL;
3196 ELSE
3197 l_Incur_by_role_id_tbl(i) := l_resource_rec_tbl(i).Incur_by_role_id;
3198 END IF;
3199
3200 IF l_resource_rec_tbl(i).named_role = FND_API.G_MISS_CHAR THEN
3201 l_named_role_tbl(i) := NULL;
3202 ELSE
3203 l_named_role_tbl(i) := l_resource_rec_tbl(i).named_role;
3204 END IF;
3205
3206 IF l_resource_rec_tbl(i).non_labor_resource = FND_API.G_MISS_CHAR THEN
3207 l_non_labor_resource_tbl(i) := NULL;
3208 ELSE
3209 l_non_labor_resource_tbl(i) := l_resource_rec_tbl(i).non_labor_resource;
3210 END IF;
3211
3212 IF l_resource_rec_tbl(i).resource_assignment_id = FND_API.G_MISS_NUM THEN
3213 l_resource_assignment_id_tbl(i) := NULL;
3214 ELSE
3215 l_resource_assignment_id_tbl(i) := l_resource_rec_tbl(i).resource_assignment_id;
3216 END IF;
3217
3218 IF l_resource_rec_tbl(i).assignment_description = FND_API.G_MISS_CHAR THEN
3219 l_assignment_description_tbl(i) := NULL;
3220 ELSE
3221 l_assignment_description_tbl(i) := l_resource_rec_tbl(i).assignment_description;
3222 END IF;
3223
3224 IF l_resource_rec_tbl(i).planning_resource_alias = FND_API.G_MISS_CHAR THEN
3225 l_planning_resource_alias_tbl(i) := NULL;
3226 ELSE
3227 l_planning_resource_alias_tbl(i) := l_resource_rec_tbl(i).planning_resource_alias;
3228 END IF;
3229
3230 IF l_resource_rec_tbl(i).resource_name = FND_API.G_MISS_CHAR THEN
3231 l_resource_name_tbl(i) := NULL;
3232 ELSE
3233 l_resource_name_tbl(i) := l_resource_rec_tbl(i).resource_name;
3234 END IF;
3235
3236 IF l_resource_rec_tbl(i).project_role_name = FND_API.G_MISS_CHAR THEN
3237 l_project_role_name_tbl(i) := NULL;
3238 ELSE
3239 l_project_role_name_tbl(i) := l_resource_rec_tbl(i).project_role_name;
3240 END IF;
3241
3242 IF l_resource_rec_tbl(i).organization_name = FND_API.G_MISS_CHAR THEN
3243 l_organization_name_tbl(i) := NULL;
3244 ELSE
3245 l_organization_name_tbl(i) := l_resource_rec_tbl(i).organization_name;
3246 END IF;
3247
3248 IF l_resource_rec_tbl(i).financial_category_code = FND_API.G_MISS_CHAR THEN
3249 l_financial_category_code_tbl(i) := NULL;
3250 ELSE
3251 l_financial_category_code_tbl(i) := l_resource_rec_tbl(i).financial_category_code;
3252 END IF;
3253
3254 IF l_resource_rec_tbl(i).project_assignment_id = FND_API.G_MISS_NUM THEN
3255 l_project_assignment_id_tbl(i) := NULL;
3256 ELSE
3257 l_project_assignment_id_tbl(i) := l_resource_rec_tbl(i).project_assignment_id;
3258 END IF;
3259
3260 IF l_resource_rec_tbl(i).use_task_schedule_flag = FND_API.G_MISS_CHAR THEN
3261 l_use_task_schedule_flag_tbl(i) := NULL;
3262 ELSE
3263 l_use_task_schedule_flag_tbl(i) := l_resource_rec_tbl(i).use_task_schedule_flag;
3264 END IF;
3265
3266 IF l_resource_rec_tbl(i).planning_start_date = FND_API.G_MISS_DATE THEN
3267 l_planning_start_date_tbl(i) := NULL;
3268 ELSE
3269 l_planning_start_date_tbl(i) := l_resource_rec_tbl(i).planning_start_date;
3270 END IF;
3271
3272 IF l_resource_rec_tbl(i).planning_end_date = FND_API.G_MISS_DATE THEN
3273 l_planning_end_date_tbl(i) := NULL;
3274 ELSE
3275 l_planning_end_date_tbl(i) := l_resource_rec_tbl(i).planning_end_date;
3276 END IF;
3277
3278 IF l_resource_rec_tbl(i).schedule_start_date = FND_API.G_MISS_DATE THEN
3279 l_schedule_start_date_tbl(i) := NULL;
3280 ELSE
3281 l_schedule_start_date_tbl(i) := l_resource_rec_tbl(i).schedule_start_date;
3282 END IF;
3283
3284 IF l_resource_rec_tbl(i).schedule_end_date = FND_API.G_MISS_DATE THEN
3285 l_schedule_end_date_tbl(i) := NULL;
3286 ELSE
3287 l_schedule_end_date_tbl(i) := l_resource_rec_tbl(i).schedule_end_date;
3288 END IF;
3289
3290 IF l_resource_rec_tbl(i).supplier_name = FND_API.G_MISS_CHAR THEN
3291 l_supplier_name_tbl(i) := NULL;
3292 ELSE
3293 l_supplier_name_tbl(i) := l_resource_rec_tbl(i).supplier_name;
3294 END IF;
3295
3296 IF l_resource_rec_tbl(i).financial_category_name = FND_API.G_MISS_CHAR THEN
3297 l_financial_category_name_tbl(i) := NULL;
3298 ELSE
3299 l_financial_category_name_tbl(i) := l_resource_rec_tbl(i).financial_category_name;
3300 END IF;
3301
3302 IF l_resource_rec_tbl(i).sp_fixed_date = FND_API.G_MISS_DATE THEN
3303 l_sp_fixed_date_tbl(i) := NULL;
3304 ELSE
3305 l_sp_fixed_date_tbl(i) := l_resource_rec_tbl(i).sp_fixed_date;
3306 -- Added validation rule for sp_fixed_date to lie between planning start date and planning end date for
3307 -- fixed curve spread curve id. - Bug 3607061 Starts. Please NOTE that fixed date spread curve id is
3308 -- SEEDED as 6, so we are able to hard code it below
3309
3310 IF l_debug_mode = 'Y' THEN
3311 pa_debug.g_err_stage :='l_spread_curve_id_tbl - '||l_spread_curve_id_tbl(i);
3312 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3313
3314 pa_debug.g_err_stage :='l_sp_fixed_date_tbl'||l_sp_fixed_date_tbl(i);
3315 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3316
3317 pa_debug.g_err_stage :='l_planning_start_date_tbl'||l_planning_start_date_tbl(i);
3318 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3319
3320 pa_debug.g_err_stage :='l_planning_end_date_tbl'||l_planning_end_date_tbl(i);
3321 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3322 END IF;
3323
3324 IF ((l_spread_curve_id_tbl(i) = l_fixed_date_sp_id) AND
3325 (l_sp_fixed_date_tbl(i) IS NOT NULL) AND
3326 (l_sp_fixed_date_tbl(i) NOT BETWEEN l_planning_start_date_tbl(i) AND l_planning_end_date_tbl(i)))THEN
3327 IF l_debug_mode = 'Y' THEN
3328 pa_debug.g_err_stage :='Sp Fixed Date not between planning start date and End Date';
3329 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3330 END IF;
3331 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3332 p_msg_name => 'PA_FP_SP_FIXED_DATE_OUT');
3333 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3334 END IF;
3335 -- Bug 3607061 Ends
3336 END IF;
3337
3338 IF l_resource_rec_tbl(i).burdened_rate_override = FND_API.G_MISS_NUM THEN
3339 l_burdened_rate_override_tbl(i) := NULL;
3340 ELSE
3341 l_burdened_rate_override_tbl(i) := l_resource_rec_tbl(i).burdened_rate_override;
3342 END IF;
3343
3344 IF l_resource_rec_tbl(i).cost_rate_override = FND_API.G_MISS_NUM THEN
3345 l_cost_rate_override_tbl(i) := NULL;
3346 ELSE
3347 l_cost_rate_override_tbl(i) := l_resource_rec_tbl(i).cost_rate_override;
3348 END IF;
3349
3350 IF l_resource_rec_tbl(i).billable_percent = FND_API.G_MISS_NUM THEN
3351 l_billable_percent_tbl(i) := NULL;
3352 ELSE
3353 l_billable_percent_tbl(i) := l_resource_rec_tbl(i).billable_percent;
3354 END IF;
3355
3356 IF l_resource_rec_tbl(i).override_currency_code = FND_API.G_MISS_CHAR THEN
3357 l_override_currency_code_tbl(i) := NULL;
3358 ELSE
3359 l_override_currency_code_tbl(i) := l_resource_rec_tbl(i).override_currency_code;
3360 END IF;
3361
3362 IF l_resource_rec_tbl(i).total_quantity = FND_API.G_MISS_NUM THEN
3363 l_total_quantity_tbl(i) := NULL;
3364 ELSE
3365 l_total_quantity_tbl(i) := l_resource_rec_tbl(i).total_quantity;
3366 END IF;
3367
3368 IF l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY = FND_API.G_MISS_CHAR THEN
3369 l_ATTRIBUTE_CATEGORY_tbl(i) := NULL;
3370 ELSE
3371 l_ATTRIBUTE_CATEGORY_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY;
3372 END IF;
3373
3374 IF l_resource_rec_tbl(i).ATTRIBUTE1 = FND_API.G_MISS_CHAR THEN
3375 l_ATTRIBUTE1_tbl(i) := NULL;
3376 ELSE
3377 l_ATTRIBUTE1_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE1;
3378 END IF;
3379
3380 IF l_resource_rec_tbl(i).ATTRIBUTE2 = FND_API.G_MISS_CHAR THEN
3381 l_ATTRIBUTE2_tbl(i) := NULL;
3382 ELSE
3383 l_ATTRIBUTE2_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE2;
3384 END IF;
3385
3386 IF l_resource_rec_tbl(i).ATTRIBUTE3 = FND_API.G_MISS_CHAR THEN
3387 l_ATTRIBUTE3_tbl(i) := NULL;
3388 ELSE
3389 l_ATTRIBUTE3_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE3;
3390 END IF;
3391
3392 IF l_resource_rec_tbl(i).ATTRIBUTE4 = FND_API.G_MISS_CHAR THEN
3393 l_ATTRIBUTE4_tbl(i) := NULL;
3394 ELSE
3395 l_ATTRIBUTE4_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE4;
3396 END IF;
3397
3398 IF l_resource_rec_tbl(i).ATTRIBUTE5 = FND_API.G_MISS_CHAR THEN
3399 l_ATTRIBUTE5_tbl(i) := NULL;
3400 ELSE
3401 l_ATTRIBUTE5_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE5;
3402 END IF;
3403
3404 IF l_resource_rec_tbl(i).ATTRIBUTE6 = FND_API.G_MISS_CHAR THEN
3405 l_ATTRIBUTE6_tbl(i) := NULL;
3406 ELSE
3407 l_ATTRIBUTE6_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE6;
3408 END IF;
3409
3410 IF l_resource_rec_tbl(i).ATTRIBUTE7 = FND_API.G_MISS_CHAR THEN
3411 l_ATTRIBUTE7_tbl(i) := NULL;
3412 ELSE
3413 l_ATTRIBUTE7_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE7;
3414 END IF;
3415
3416 IF l_resource_rec_tbl(i).ATTRIBUTE8 = FND_API.G_MISS_CHAR THEN
3417 l_ATTRIBUTE8_tbl(i) := NULL;
3418 ELSE
3419 l_ATTRIBUTE8_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE8;
3420 END IF;
3421
3422 IF l_resource_rec_tbl(i).ATTRIBUTE9 = FND_API.G_MISS_CHAR THEN
3423 l_ATTRIBUTE9_tbl(i) := NULL;
3424 ELSE
3425 l_ATTRIBUTE9_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE9;
3426 END IF;
3427
3428 IF l_resource_rec_tbl(i).ATTRIBUTE10 = FND_API.G_MISS_CHAR THEN
3429 l_ATTRIBUTE10_tbl(i) := NULL;
3430 ELSE
3431 l_ATTRIBUTE10_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE10;
3432 END IF;
3433
3434 IF l_resource_rec_tbl(i).ATTRIBUTE11 = FND_API.G_MISS_CHAR THEN
3435 l_ATTRIBUTE11_tbl(i) := NULL;
3436 ELSE
3437 l_ATTRIBUTE11_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE11;
3438 END IF;
3439
3440 IF l_resource_rec_tbl(i).ATTRIBUTE12 = FND_API.G_MISS_CHAR THEN
3441 l_ATTRIBUTE12_tbl(i) := NULL;
3442 ELSE
3443 l_ATTRIBUTE12_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE12;
3444 END IF;
3445
3446 IF l_resource_rec_tbl(i).ATTRIBUTE13 = FND_API.G_MISS_CHAR THEN
3447 l_ATTRIBUTE13_tbl(i) := NULL;
3448 ELSE
3449 l_ATTRIBUTE13_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE13;
3450 END IF;
3451
3452 IF l_resource_rec_tbl(i).ATTRIBUTE14 = FND_API.G_MISS_CHAR THEN
3453 l_ATTRIBUTE14_tbl(i) := NULL;
3454 ELSE
3455 l_ATTRIBUTE14_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE14;
3456 END IF;
3457
3458 IF l_resource_rec_tbl(i).ATTRIBUTE15 = FND_API.G_MISS_CHAR THEN
3459 l_ATTRIBUTE15_tbl(i) := NULL;
3460 ELSE
3461 l_ATTRIBUTE15_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE15;
3462 END IF;
3463
3464 IF l_resource_rec_tbl(i).ATTRIBUTE16 = FND_API.G_MISS_CHAR THEN
3465 l_ATTRIBUTE16_tbl(i) := NULL;
3466 ELSE
3467 l_ATTRIBUTE16_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE16;
3468 END IF;
3469
3470 IF l_resource_rec_tbl(i).ATTRIBUTE17 = FND_API.G_MISS_CHAR THEN
3471 l_ATTRIBUTE17_tbl(i) := NULL;
3472 ELSE
3473 l_ATTRIBUTE17_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE17;
3474 END IF;
3475
3476 IF l_resource_rec_tbl(i).ATTRIBUTE18 = FND_API.G_MISS_CHAR THEN
3477 l_ATTRIBUTE18_tbl(i) := NULL;
3478 ELSE
3479 l_ATTRIBUTE18_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE18;
3480 END IF;
3481
3482 IF l_resource_rec_tbl(i).ATTRIBUTE19 = FND_API.G_MISS_CHAR THEN
3483 l_ATTRIBUTE19_tbl(i) := NULL;
3484 ELSE
3485 l_ATTRIBUTE19_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE19;
3486 END IF;
3487
3488 IF l_resource_rec_tbl(i).ATTRIBUTE20 = FND_API.G_MISS_CHAR THEN
3489 l_ATTRIBUTE20_tbl(i) := NULL;
3490 ELSE
3491 l_ATTRIBUTE20_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE20;
3492 END IF;
3493 IF l_resource_rec_tbl(i).ATTRIBUTE21 = FND_API.G_MISS_CHAR THEN
3494 l_ATTRIBUTE21_tbl(i) := NULL;
3495 ELSE
3496 l_ATTRIBUTE21_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE21;
3497 END IF;
3498
3499 IF l_resource_rec_tbl(i).ATTRIBUTE22 = FND_API.G_MISS_CHAR THEN
3500 l_ATTRIBUTE22_tbl(i) := NULL;
3501 ELSE
3502 l_ATTRIBUTE22_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE22;
3503 END IF;
3504
3505 IF l_resource_rec_tbl(i).ATTRIBUTE23 = FND_API.G_MISS_CHAR THEN
3506 l_ATTRIBUTE23_tbl(i) := NULL;
3507 ELSE
3508 l_ATTRIBUTE23_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE23;
3509 END IF;
3510
3511 IF l_resource_rec_tbl(i).ATTRIBUTE24 = FND_API.G_MISS_CHAR THEN
3512 l_ATTRIBUTE24_tbl(i) := NULL;
3513 ELSE
3514 l_ATTRIBUTE24_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE24;
3515 END IF;
3516
3517 IF l_resource_rec_tbl(i).ATTRIBUTE25 = FND_API.G_MISS_CHAR THEN
3518 l_ATTRIBUTE25_tbl(i) := NULL;
3519 ELSE
3520 l_ATTRIBUTE25_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE25;
3521 END IF;
3522
3523 IF l_resource_rec_tbl(i).ATTRIBUTE26 = FND_API.G_MISS_CHAR THEN
3524 l_ATTRIBUTE26_tbl(i) := NULL;
3525 ELSE
3526 l_ATTRIBUTE26_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE26;
3527 END IF;
3528
3529 IF l_resource_rec_tbl(i).ATTRIBUTE27 = FND_API.G_MISS_CHAR THEN
3530 l_ATTRIBUTE27_tbl(i) := NULL;
3531 ELSE
3532 l_ATTRIBUTE27_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE27;
3533 END IF;
3534
3535 IF l_resource_rec_tbl(i).ATTRIBUTE28 = FND_API.G_MISS_CHAR THEN
3536 l_ATTRIBUTE28_tbl(i) := NULL;
3537 ELSE
3538 l_ATTRIBUTE28_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE28;
3539 END IF;
3540
3541 IF l_resource_rec_tbl(i).ATTRIBUTE29 = FND_API.G_MISS_CHAR THEN
3542 l_ATTRIBUTE29_tbl(i) := NULL;
3543 ELSE
3544 l_ATTRIBUTE29_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE29;
3545 END IF;
3546
3547 IF l_resource_rec_tbl(i).ATTRIBUTE30 = FND_API.G_MISS_CHAR THEN
3548 l_ATTRIBUTE30_tbl(i) := NULL;
3549 ELSE
3550 l_ATTRIBUTE30_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE30;
3551 END IF;
3552
3553 IF l_resource_rec_tbl(i).UNPLANNED_FLAG = FND_API.G_MISS_CHAR THEN
3554 l_UNPLANNED_FLAG_TBL(i) := NULL;
3555 ELSE
3556 l_UNPLANNED_FLAG_TBL(i) := l_resource_rec_tbl(i).UNPLANNED_FLAG;
3557 END IF;
3558
3559 IF l_resource_rec_tbl(i).scheduled_delay = FND_API.G_MISS_NUM THEN
3560 l_scheduled_delay(i) := NULL;
3561 ELSE
3562 l_scheduled_delay(i) := l_resource_rec_tbl(i).scheduled_delay;
3563 END IF;
3564
3565
3566 END IF;
3567 l_trace_stage := 470;
3568 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3569 END LOOP;
3570 l_trace_stage := 480;
3571 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3572
3573 ----------------------------------------------------------------------------
3574 -- Now derive the resource_assignment id for all the task_element_version_id
3575 -- based on the resource_class_code(l_del_task_level_rec_code_tbl) to be
3576 -- 'PEOPLE'.
3577 -- The resource_assignment_id is bulk collected into a PLSql table and then
3578 -- All data is deleted in bulk from pa_budget_lines and pa_resource_assignment
3579 -- based on the resource_assignment_id
3580
3581 --***************************************************************************************
3582 -- Bug 3749516 resource_class_code(l_del_task_level_rec_code_tbl) will not be 'EQUIPMENT'
3583 -- REMOVING CODE BELOW FOR SAME
3584 --***************************************************************************************
3585 ------------------------------------------------------------------------------
3586
3587 IF l_debug_mode = 'Y' THEN
3588 pa_debug.g_err_stage:='data is deleted in bulk from pa_budget_lines and pa_resource_assignment based on the resource_assignment_id ';
3589 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3590 END IF;
3591
3592 END IF;
3593 --------------------------------------------------------------------------
3594 -- Processing for p_context = TASK_ASSIGNMENTS End Here
3595 --------------------------------------------------------------------------
3596
3597 ------------------------------------------------------------------------------------------------
3598 -- Deriving Time Phased Code based on the budget version id and setting the spread amount flad
3599 -------------------------------------------------------------------------------------------------
3600 IF l_debug_mode = 'Y' THEN
3601 pa_debug.g_err_stage:='Deriving time phased code ';
3602 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3603 END IF;
3604
3605 l_time_phased_code := pa_fin_plan_utils.get_time_phased_code(p_budget_version_id);
3606
3607 IF l_debug_mode = 'Y' THEN
3608 pa_debug.g_err_stage:='Deriving time phased code l_time_phased_code: '||l_time_phased_code;
3609 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3610 END IF;
3611 l_trace_stage := 550;
3612 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3613
3614 IF ((l_time_phased_code = PA_FP_CONSTANTS_PKG.G_PERIOD_TYPE_PA) OR (l_time_phased_code = PA_FP_CONSTANTS_PKG.G_PERIOD_TYPE_GL)) THEN
3615 l_spread_amounts_for_ver := 'Y';
3616 ELSE
3617 l_spread_amounts_for_ver := 'N';
3618 END IF;
3619
3620 l_trace_stage := 560;
3621 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3622
3623 ------------------------------------------------------------------------------------------------
3624 -- Deriving Proj Element Id based on element version id
3625 -------------------------------------------------------------------------------------------------
3626 IF l_debug_mode = 'Y' THEN
3627 pa_debug.g_err_stage:='Deriving Proj Element Id based on element version id';
3628 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3629 END IF;
3630
3631 FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
3632 l_trace_stage := 570;
3633 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3634 IF p_task_elem_version_id_tbl(i) <> 0 THEN
3635 OPEN c_proj_element_id(p_task_elem_version_id_tbl(i));
3636 l_trace_stage := 580;
3637 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3638 FETCH c_proj_element_id INTO l_proj_element_id;
3639 IF l_debug_mode = 'Y' THEN
3640 pa_debug.g_err_stage:='Deriving Proj Element Id based on element version id l_proj_element_id : '|| l_proj_element_id;
3641 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3642 END IF;
3643 l_proj_element_id_tbl(i) := l_proj_element_id;
3644 CLOSE c_proj_element_id;
3645 ELSE
3646 l_proj_element_id_tbl(i):=0;
3647 END IF;
3648 l_trace_stage := 590;
3649 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3650 END LOOP;
3651
3652 IF l_debug_mode = 'Y' THEN
3653 pa_debug.g_err_stage:='Deriving Proj Element Id based on element version id l_proj_element_id_tbl cnt : '|| l_proj_element_id_tbl.COUNT;
3654 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3655 END IF;
3656 l_trace_stage := 600;
3657 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3658
3659 ---------------------------------------------------------------
3660 -- For p_context = BUDGET or FORECAST
3661 -- Deriving start date and end date for task_element_version_id
3662 ---------------------------------------------------------------
3663 IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
3664 l_trace_stage := 610;
3665 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3666
3667 IF l_debug_mode = 'Y' THEN
3668 pa_debug.g_err_stage:='Deriving start date for task_element_version_ids';
3669 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3670 END IF;
3671
3672 -- Bug 3793623 - Added new params p_planning_start_date_tbl and p_planning_end_date_tbl
3673 PA_PLANNING_TRANSACTION_UTILS.get_default_planning_dates
3674 ( p_project_id => p_project_id
3675 ,p_element_version_id_tbl => p_task_elem_version_id_tbl
3676 ,p_project_structure_version_id => PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id => p_project_id )
3677 ,p_planning_start_date_tbl => p_planning_start_date_tbl
3678 ,p_planning_end_date_tbl => p_planning_end_date_tbl
3679 ,x_planning_start_date_tbl => l_start_date_tbl
3680 ,x_planning_end_date_tbl => l_compl_date_tbl
3681 ,x_msg_data => x_msg_data
3682 ,x_msg_count => x_msg_count
3683 ,x_return_status => x_return_status );
3684
3685 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3686
3687 IF l_debug_mode = 'Y' THEN
3688 pa_debug.g_err_stage:='Called API pafpptub.get_default_planning_dates returned error';
3689 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ',pa_debug.g_err_stage, 3);
3690 END IF;
3691 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3692 END IF;
3693
3694 l_trace_stage := 710;
3695 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3696 END IF;
3697 l_trace_stage := 720;
3698 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3699
3700 -----------------------------------------------------------------------------------------------------
3701 -- BULK INSERTING DATA INTO PA_RESOURCE_ASSIGNMENTS--------------------------------------------------
3702 -----------------------------------------------------------------------------------------------------
3703 -- Loop throught the task element version id table and do a bulk insert in to pa_resource_assignments
3704 -- 1. In the context of WORKPLAN, Loop for p_task_element_version_id_tbl, and insert into pa_resource
3705 -- assignment. l_elligble_rlm_ids will only have rlm id for 'PEOPLE' resource class. so a local
3706 -- index l_ppl_index(=1) is used for resource data. Data is inserted in pa_resource_assignments
3707 -- only if quanity dat ais present. this check is done and eligible data to be inserted is fetched
3708 -- in local plsql tables.
3709 -- -- Bug 3749516 removing equipment_quantity reference - refer prev. code in source control for
3710 -- -- reference
3711 -- 2. Else if the context is not workplan then,records is inserted
3712 -- irrespective of the value of quantity.The bulk insert procedure in pa_fp_elements_pub is used
3713 -- for this. If l_spread_amts_for_ver = 'Y'For each record inserted prepare a pl/sql table containing
3714 -- 'Y' if the record is inserted and the amount exists(note that this amount can be raw cost, burdened
3715 -- cost, quantity in the case of Budget/Forecast and quantity in the case of Task Assignment).If the
3716 -- amount does not exist then the pl/sql table should contain 'N'. This will be used as the paramter
3717 -- for p_spread_amt_flags parameter in the calculate API (A separate loop may be required for this)
3718 -- Please note that in the context of TASK ASSIGNMENT, if some value is being returned by the TA
3719 -- validation API then that value should be used.
3720 -----------------------------------------------------------------------------------------------------
3721
3722 IF l_debug_mode = 'Y' THEN
3723 pa_debug.g_err_stage:='BULK INSERTING DATA INTO PA_RESOURCE_ASSIGNMENTS ';
3724 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3725 END IF;
3726
3727 l_call_calc_api := 'N';
3728
3729 OPEN get_pc_code;
3730 FETCH get_pc_code
3731 INTO l_proj_curr_code, l_proj_func_curr_code;
3732 CLOSE get_pc_code;
3733
3734 ---------------------------------------------------------------------
3735 -- These _rlm tables have been extented to the length of rlm_id table
3736 -- and they will be used for insert in Budget/Forecast context when
3737 -- One to One Mapping Flag is passed as Y
3738 -- Bug 3719918 and Bug 3665097
3739 ----------------------------------------------------------------------
3740 IF (p_one_to_one_mapping_flag = 'Y' AND
3741 (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
3742 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
3743 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST))THEN
3744 l_task_elem_rlm_tbl := p_task_elem_version_id_tbl;
3745 l_proj_elem_rlm_tbl := l_proj_element_id_tbl;
3746 END IF;
3747
3748 -- Bug 3719918
3749 -- If One ONe to One Mapping Flag is Y in Bugdet and Forecast Context then ..
3750 -- there might be duplicate decords for resource assignments present in the
3751 -- IN tables correspoinging to different currency code.
3752 -- Eg. p_one_to_one_mapping_flag - 'Y'
3753 -- Task elem ver id - t1,t1,t2
3754 -- RLM - r1,r1,r2
3755 -- Currency Code - c1,c2,c2
3756 -- in this case ..2 resource assignments are created - t1r1 and t2r2
3757 -- calculate is called for three lines .. t1r1c1,t1r1c2,t2r2c2
3758 -- the below logic is used in BF context and will reduce the input data to the
3759 -- following form -- Task elem ver id : t1,t2 and RLM : r1,r2
3760 -- This will be used in the insert statment for B/F
3761
3762 IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
3763 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST ) THEN
3764
3765 IF (p_one_to_one_mapping_flag = 'Y') THEN
3766
3767 l_bf_start_date_tbl := l_start_date_tbl;
3768 l_bf_compl_date_tbl := l_compl_date_tbl;
3769 l_bf_proj_elem_tbl := l_proj_element_id_tbl;
3770 l_bf_quantity_tbl := p_quantity_tbl;
3771 l_bf_currency_code_tbl := p_currency_code_tbl;
3772 l_bf_raw_cost_tbl := p_raw_cost_tbl;
3773 l_bf_burdened_cost_tbl := p_burdened_cost_tbl;
3774 l_bf_revenue_tbl := p_revenue_tbl;
3775 l_bf_cost_rate_tbl := p_cost_rate_tbl;
3776 l_bf_bill_rate_tbl := p_bill_rate_tbl ;
3777 l_bf_burdened_rate_tbl := p_burdened_rate_tbl;
3778
3779
3780 END IF;--IF (p_one_to_one_mapping_flag = 'Y') THEN
3781
3782 --The l_bf<amounts> tbls should have elements equal in no to l_rlm_id_no_of_rows as these tbls will be used
3783 --in the FORALL insert which will loop thru the rlm id pl/sql tbl. Note that they are used only when
3784 --p_one_to_one_mapping_flag is Y
3785
3786 l_bf_quantity_tbl.extend(l_rlm_id_no_of_rows-l_bf_quantity_tbl.count);
3787 l_bf_currency_code_tbl.extend(l_rlm_id_no_of_rows-l_bf_currency_code_tbl.count);
3788 l_bf_raw_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_raw_cost_tbl.count);
3789 l_bf_burdened_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_burdened_cost_tbl.count);
3790 l_bf_revenue_tbl.extend(l_rlm_id_no_of_rows-l_bf_revenue_tbl.count);
3791 l_bf_cost_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_cost_rate_tbl.count);
3792 l_bf_bill_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_bill_rate_tbl.count);
3793 l_bf_burdened_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_burdened_rate_tbl.count);
3794
3795 END IF; -- IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
3796
3797 ----------------------------------------------------
3798 -- THESE DEBUG MESSAGES ARE BEING PLACED HERE ONLY FOR
3799 -- REFERENCE SO THAT THEY CAN BE USED WHEN AND WHERE
3800 -- NEEDED FOR DEBUGGIND ISSUE WITH BULK DTA INSERTION.
3801 -----------------------------------------------------
3802 /*
3803 pa_debug.g_err_stage:='l_proj_element_id_tbl :'||l_proj_element_id_tbl.COUNT;
3804 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3805 pa_debug.g_err_stage:='l_unit_of_measure_tbl :'||l_unit_of_measure_tbl.COUNT;
3806 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3807 pa_debug.g_err_stage:='p_task_elem_version_id_tbl :'||p_task_elem_version_id_tbl.COUNT;
3808 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3809 pa_debug.g_err_stage:='l_start_date_tbl :'||p_start_date_tbl.COUNT;
3810 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3811 pa_debug.g_err_stage:='l_end_date_tbl :'||p_end_date_tbl.COUNT;
3812 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3813 pa_debug.g_err_stage:='l_etc_method_code_tbl :'||l_etc_method_code_tbl.COUNT;
3814 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3815 pa_debug.g_err_stage:='l_res_type_code_tbl :'||l_res_type_code_tbl.COUNT;
3816 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3817 pa_debug.g_err_stage:='l_fc_res_type_code_tbl :'||l_fc_res_type_code_tbl.COUNT;
3818 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3819 pa_debug.g_err_stage:='l_resource_class_code_tbl :'||l_resource_class_code_tbl.COUNT;
3820 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3821 pa_debug.g_err_stage:='l_organization_id_tbl :'||l_organization_id_tbl.COUNT;
3822 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3823 pa_debug.g_err_stage:='l_job_id_tbl :'||l_job_id_tbl.COUNT;
3824 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3825 pa_debug.g_err_stage:='l_person_id_tbl :'||l_person_id_tbl.COUNT;
3826 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3827 pa_debug.g_err_stage:='l_revenue_category_code_tbl :'||l_revenue_category_code_tbl.COUNT;
3828 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3829 pa_debug.g_err_stage:='l_expenditure_type_tbl :'||l_expenditure_type_tbl.COUNT;
3830 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3831 pa_debug.g_err_stage:='l_expenditure_category_tbl :'||l_expenditure_category_tbl.COUNT;
3832 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3833 pa_debug.g_err_stage:='l_non_labor_resource_tbl :'||l_non_labor_resource_tbl.COUNT;
3834 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3835 pa_debug.g_err_stage:='l_event_type_tbl :'||l_event_type_tbl.COUNT;
3836 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3837 pa_debug.g_err_stage:='l_supplier_id_tbl :'||l_supplier_id_tbl.COUNT;
3838 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3839 pa_debug.g_err_stage:='l_inventory_item_id_tbl :'||l_inventory_item_id_tbl.COUNT;
3840 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3841 pa_debug.g_err_stage:='l_bom_resource_id_tbl :'||l_bom_resource_id_tbl.COUNT;
3842 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3843 pa_debug.g_err_stage:='l_inventory_item_id_tbl :'||l_inventory_item_id_tbl.COUNT;
3844 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3845 pa_debug.g_err_stage:='l_item_category_id_tbl :'||l_item_category_id_tbl.COUNT;
3846 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3847 pa_debug.g_err_stage:='l_mfc_cost_type_id_tbl :'||l_mfc_cost_type_id_tbl.COUNT;
3848 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3849 pa_debug.g_err_stage:='l_rate_expenditure_type_tbl :'||l_rate_expenditure_type_tbl.COUNT;
3850 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3851 pa_debug.g_err_stage:='l_rate_func_curr_code_tbl :'||l_rate_func_curr_code_tbl.COUNT;
3852 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3853 pa_debug.g_err_stage:='l_rate_based_flag_tbl :'||l_rate_based_flag_tbl.COUNT;
3854 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3855 pa_debug.g_err_stage:='l_resource_class_flag_tbl :'||l_resource_class_flag_tbl.COUNT;
3856 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3857 pa_debug.g_err_stage:='l_named_role_tbl :'||l_named_role_tbl.COUNT;
3858 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3859 pa_debug.g_err_stage:='l_incur_by_res_class_code_tbl :'||l_incur_by_res_class_code_tbl.COUNT;
3860 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3861 pa_debug.g_err_stage:='l_budget_version_id :'||l_budget_version_id;
3862 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3863 pa_debug.g_err_stage:='p_project_id :'||p_project_id;
3864 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3865 pa_debug.g_err_stage:='task_id :'||l_proj_element_id_tbl(i);
3866 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3867 pa_debug.g_err_stage:='project_assignment_id : -1';
3868 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3869 pa_debug.g_err_stage:='RESOURCE_LIST_MEMBER_ID :'||l_people_res_class_rlm_id;
3870 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);*/
3871
3872 /* l_trace_stage := 761;
3873 hr_utility.trace('l_proj_element_id_tbl(i) => '||to_char(l_proj_element_id_tbl(i)));
3874 hr_utility.trace('l_unit_of_measure_tbl(l_ppl_index) => '||to_char(l_unit_of_measure_tbl(l_ppl_index)));
3875 hr_utility.trace('p_task_elem_version_id_tbl(i) => '||to_char(p_task_elem_version_id_tbl(i)));
3876 hr_utility.trace('p_start_date_tbl(i) => '||to_char(p_start_date_tbl(i)));
3877 hr_utility.trace('p_end_date_tbl(i) => '||to_char(p_end_date_tbl(i)));
3878 hr_utility.trace(' l_spread_curve_id_tbl(l_ppl_index) => '||to_char(l_spread_curve_id_tbl(l_ppl_index)));
3879 hr_utility.trace('l_etc_method_code_tbl(l_ppl_index) => '||to_char(l_etc_method_code_tbl(l_ppl_index)));
3880 hr_utility.trace('l_res_type_code_tbl(l_ppl_index) => '||to_char(l_res_type_code_tbl(l_ppl_index)));
3881 hr_utility.trace('l_fc_res_type_code_tbl(l_ppl_index) => '||to_char(l_fc_res_type_code_tbl(l_ppl_index)));
3882 hr_utility.trace('l_resource_class_code_tbl(l_ppl_index) => '||to_char(l_resource_class_code_tbl(l_ppl_index)));
3883 hr_utility.trace('l_organization_id_tbl(l_ppl_index) => '||to_char(l_organization_id_tbl(l_ppl_index)));
3884 hr_utility.trace('l_job_id_tbl(l_ppl_index) => '||to_char(l_job_id_tbl(l_ppl_index)));
3885 hr_utility.trace('l_person_id_tbl(l_ppl_index) => '||to_char(l_person_id_tbl(l_ppl_index)));
3886 hr_utility.trace('l_expenditure_type_tbl(l_ppl_index) => '||to_char(l_expenditure_type_tbl(l_ppl_index)));
3887 hr_utility.trace('l_expenditure_category_tbl(l_ppl_index) => '||to_char(l_expenditure_category_tbl(l_ppl_index)));
3888 hr_utility.trace('l_revenue_category_code_tbl(l_ppl_index) => '||to_char(l_revenue_category_code_tbl(l_ppl_index)));
3889 hr_utility.trace('l_event_type_tbl(l_ppl_index) => '||to_char(l_event_type_tbl(l_ppl_index)));
3890 hr_utility.trace('l_supplier_id_tbl(l_ppl_index) => '||to_char(l_supplier_id_tbl(l_ppl_index)));
3891 hr_utility.trace('l_non_labor_resource_tbl(l_ppl_index) => '||to_char(l_non_labor_resource_tbl(l_ppl_index)));
3892 hr_utility.trace('l_bom_resource_id_tbl(l_ppl_index) => '||to_char(l_bom_resource_id_tbl(l_ppl_index)));
3893 hr_utility.trace('l_inventory_item_id_tbl(l_ppl_index) => '||to_char(l_inventory_item_id_tbl(l_ppl_index)));
3894 hr_utility.trace('l_mfc_cost_type_id_tbl(l_ppl_indexj) => '||to_char(l_mfc_cost_type_id_tbl(l_ppl_indexj)));
3895 hr_utility.trace('l_rate_expenditure_type_tbl(l_ppl_indexj) => '||to_char(l_rate_expenditure_type_tbl(l_ppl_index)));
3896 hr_utility.trace('l_rate_based_flag_tbl(l_ppl_index) => '||to_char(l_rate_based_flag_tbl(l_ppl_index)));
3897 hr_utility.trace('l_rate_func_curr_code_tbl(l_ppl_index) => '||to_char(l_rate_func_curr_code_tbl(l_ppl_index)));
3898 hr_utility.trace('l_incur_by_res_class_code_tbl(l_ppl_index) => '||to_char(l_incur_by_res_class_code_tbl(l_ppl_index)));
3899 hr_utility.trace('l_resource_class_flag_tbl(l_ppl_index) => '||to_char(l_resource_class_flag_tbl(l_ppl_index)));
3900 hr_utility.trace('l_named_role_tbl(l_ppl_index) => '||to_char(l_named_role_tbl(l_ppl_index)));*/
3901
3902 --------------------------------------------
3903 -- for p_context - WORKPLAN
3904 --------------------------------------------
3905 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
3906
3907 -- Bug 3749516 Changing All reference of l_ppl_equip_index to l_ppl_index below
3908 l_ppl_index:=1; --This will be used in the bulk insert for people -- -- Bug 3749516
3909
3910 IF l_debug_mode = 'Y' THEN
3911 pa_debug.g_err_stage:='BULK INSERTING DATA - p_context - Workplan :'||p_context ;
3912 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3913
3914 pa_debug.g_err_stage:='BULK INSERTING Workplan DATA - rlm id :'||l_eligible_rlm_ids_tbl(l_ppl_index) ;
3915 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,6);
3916 END IF;
3917
3918 FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
3919 IF ((p_planned_people_effort_tbl.EXISTS(i)) AND
3920 (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
3921 /* bug fix:5726773 (p_planned_people_effort_tbl(i) > 0)) THEN*/
3922 (p_planned_people_effort_tbl(i) is NOT NULL)) THEN
3923 l_ins_proj_element_id_tbl(l_ins_index) := l_proj_element_id_tbl(i);
3924 l_ins_task_elem_version_id_tbl(l_ins_index) := p_task_elem_version_id_tbl(i);
3925 l_ins_start_date_tbl(l_ins_index) := p_start_date_tbl(i);
3926 l_ins_end_date_tbl(l_ins_index) := p_end_date_tbl(i);
3927 l_ins_cal_people_effort_tbl(l_ins_index) := p_planned_people_effort_tbl(i);
3928 IF p_burdened_cost_tbl.EXISTS(i) THEN
3929 l_ins_cal_burdened_cost_tbl(l_ins_index) := p_burdened_cost_tbl(i);
3930 END IF;
3931 IF p_raw_cost_tbl.EXISTS(i) THEN
3932 l_ins_cal_raw_cost_tbl(l_ins_index) := p_raw_cost_tbl(i);
3933 END IF;
3934 l_ins_index := l_ins_index + 1;
3935 END IF;
3936 END LOOP;
3937
3938
3939 l_ins_proj_element_id_tbl.delete(l_ins_index,l_ins_proj_element_id_tbl.count);
3940 l_ins_task_elem_version_id_tbl.delete(l_ins_index,l_ins_task_elem_version_id_tbl.count);
3941 l_ins_start_date_tbl.delete(l_ins_index,l_ins_start_date_tbl.count);
3942 l_ins_end_date_tbl.delete(l_ins_index,l_ins_end_date_tbl.count);
3943 l_ins_cal_people_effort_tbl.delete(l_ins_index,l_ins_cal_people_effort_tbl.count);
3944 l_ins_cal_burdened_cost_tbl.delete(l_ins_index,l_ins_cal_burdened_cost_tbl.count);
3945 l_ins_cal_raw_cost_tbl.delete(l_ins_index,l_ins_cal_raw_cost_tbl.count);
3946
3947
3948 IF l_debug_mode = 'Y' THEN
3949 pa_debug.g_err_stage:='AFTER PREPARING INS DATA :'||p_context ;
3950 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3951
3952 IF l_ins_task_elem_version_id_tbl.COUNT >0 THEN
3953 FOR i in l_ins_task_elem_version_id_tbl.FIRST .. l_ins_task_elem_version_id_tbl.LAST LOOP
3954 pa_debug.g_err_stage:='l_ins_proj_element_id_tbl :'||l_ins_proj_element_id_tbl(i) ;
3955 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3956
3957 pa_debug.g_err_stage:='l_ins_task_elem_version_id_tbl :'||l_ins_task_elem_version_id_tbl(i) ;
3958 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3959
3960 pa_debug.g_err_stage:='l_ins_start_date_tbl :'||l_ins_start_date_tbl(i) ;
3961 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3962
3963 pa_debug.g_err_stage:='l_ins_end_date_tbl :'||l_ins_end_date_tbl(i) ;
3964 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3965 END LOOP;
3966 END IF;
3967 END IF;
3968
3969 IF l_ins_task_elem_version_id_tbl.COUNT > 0 THEN
3970 FORALL i IN l_ins_task_elem_version_id_tbl.FIRST .. l_ins_task_elem_version_id_tbl.LAST
3971 INSERT INTO PA_RESOURCE_ASSIGNMENTS (
3972 RESOURCE_ASSIGNMENT_ID,BUDGET_VERSION_ID,PROJECT_ID,TASK_ID,RESOURCE_LIST_MEMBER_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CREATION_DATE,CREATED_BY
3973 ,LAST_UPDATE_LOGIN,UNIT_OF_MEASURE,TRACK_AS_LABOR_FLAG,STANDARD_BILL_RATE,AVERAGE_BILL_RATE,AVERAGE_COST_RATE
3974 ,PROJECT_ASSIGNMENT_ID,PLAN_ERROR_CODE,TOTAL_PLAN_REVENUE,TOTAL_PLAN_RAW_COST,TOTAL_PLAN_BURDENED_COST,TOTAL_PLAN_QUANTITY
3975 ,AVERAGE_DISCOUNT_PERCENTAGE,TOTAL_BORROWED_REVENUE,TOTAL_TP_REVENUE_IN,TOTAL_TP_REVENUE_OUT,TOTAL_REVENUE_ADJ
3976 ,TOTAL_LENT_RESOURCE_COST,TOTAL_TP_COST_IN,TOTAL_TP_COST_OUT,TOTAL_COST_ADJ,TOTAL_UNASSIGNED_TIME_COST
3977 ,TOTAL_UTILIZATION_PERCENT,TOTAL_UTILIZATION_HOURS,TOTAL_UTILIZATION_ADJ,TOTAL_CAPACITY,TOTAL_HEAD_COUNT
3978 ,TOTAL_HEAD_COUNT_ADJ,RESOURCE_ASSIGNMENT_TYPE,TOTAL_PROJECT_RAW_COST,TOTAL_PROJECT_BURDENED_COST,TOTAL_PROJECT_REVENUE
3979 ,PARENT_ASSIGNMENT_ID,WBS_ELEMENT_VERSION_ID,RBS_ELEMENT_ID,PLANNING_START_DATE,PLANNING_END_DATE,SCHEDULE_START_DATE,SCHEDULE_END_DATE
3980 ,SPREAD_CURVE_ID,ETC_METHOD_CODE,RES_TYPE_CODE,ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5
3981 ,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE9,ATTRIBUTE10,ATTRIBUTE11,ATTRIBUTE12,ATTRIBUTE13,ATTRIBUTE14,ATTRIBUTE15
3982 ,ATTRIBUTE16,ATTRIBUTE17,ATTRIBUTE18,ATTRIBUTE19,ATTRIBUTE20,ATTRIBUTE21,ATTRIBUTE22,ATTRIBUTE23,ATTRIBUTE24,ATTRIBUTE25
3983 ,ATTRIBUTE26,ATTRIBUTE27,ATTRIBUTE28,ATTRIBUTE29,ATTRIBUTE30,FC_RES_TYPE_CODE,RESOURCE_CLASS_CODE,ORGANIZATION_ID,JOB_ID
3984 ,PERSON_ID,EXPENDITURE_TYPE,EXPENDITURE_CATEGORY,REVENUE_CATEGORY_CODE,EVENT_TYPE,SUPPLIER_ID,NON_LABOR_RESOURCE
3985 ,BOM_RESOURCE_ID,INVENTORY_ITEM_ID,ITEM_CATEGORY_ID,RECORD_VERSION_NUMBER,BILLABLE_PERCENT
3986 ,TRANSACTION_SOURCE_CODE,MFC_COST_TYPE_ID,PROCURE_RESOURCE_FLAG,ASSIGNMENT_DESCRIPTION
3987 ,INCURRED_BY_RES_FLAG,RATE_JOB_ID,RATE_EXPENDITURE_TYPE,TA_DISPLAY_FLAG
3988 ,SP_FIXED_DATE,PERSON_TYPE_CODE,RATE_BASED_FLAG,USE_TASK_SCHEDULE_FLAG,RATE_EXP_FUNC_CURR_CODE
3989 ,RATE_EXPENDITURE_ORG_ID,INCUR_BY_RES_CLASS_CODE,INCUR_BY_ROLE_ID
3990 ,PROJECT_ROLE_ID,RESOURCE_CLASS_FLAG,NAMED_ROLE,TXN_ACCUM_HEADER_ID
3991 ,PM_PRODUCT_CODE, PM_RES_ASSIGNMENT_REFERENCE, resource_rate_based_flag)
3992 VALUES (
3993 PA_RESOURCE_ASSIGNMENTS_S.NEXTVAL -- RESOURCE_ASSIGNMENT_ID
3994 ,l_budget_version_id -- BUDGET_VERSION_ID
3995 ,p_project_id -- PROJECT_ID
3996 ,l_ins_proj_element_id_tbl(i) -- TASK_ID
3997 ,l_people_res_class_rlm_id -- RESOURCE_LIST_MEMBER_ID
3998 ,sysdate -- LAST_UPDATE_DATE
3999 ,fnd_global.user_id -- LAST_UPDATED_BY
4000 ,sysdate -- CREATION_DATE
4001 ,fnd_global.user_id -- CREATED_BY
4002 ,fnd_global.login_id -- LAST_UPDATE_LOGIN
4003 ,l_unit_of_measure_tbl(l_ppl_index) -- UNIT_OF_MEASURE
4004 ,NULL -- TRACK_AS_LABOR_FLAG
4005 ,NULL -- STANDARD_BILL_RATE
4006 ,NULL -- AVERAGE_BILL_RATE
4007 ,NULL -- AVERAGE_COST_RATE
4008 ,-1 -- PROJECT_ASSIGNMENT_ID
4009 ,NULL -- PLAN_ERROR_CODE
4010 ,NULL -- TOTAL_PLAN_REVENUE
4011 ,NULL -- TOTAL_PLAN_RAW_COST
4012 ,NULL -- TOTAL_PLAN_BURDENED_COST
4013 ,NULL -- TOTAL_PLAN_QUANTITY
4014 ,NULL -- AVERAGE_DISCOUNT_PERCENTAGE
4015 ,NULL -- TOTAL_BORROWED_REVENUE
4016 ,NULL -- TOTAL_TP_REVENUE_IN
4017 ,NULL -- TOTAL_TP_REVENUE_OUT
4018 ,NULL -- TOTAL_REVENUE_ADJ
4019 ,NULL -- TOTAL_LENT_RESOURCE_COST
4020 ,NULL -- TOTAL_TP_COST_IN
4021 ,NULL -- TOTAL_TP_COST_OUT
4022 ,NULL -- TOTAL_COST_ADJ
4023 ,NULL -- TOTAL_UNASSIGNED_TIME_COST
4024 ,NULL -- TOTAL_UTILIZATION_PERCENT
4025 ,NULL -- TOTAL_UTILIZATION_HOURS
4026 ,NULL -- TOTAL_UTILIZATION_ADJ
4027 ,NULL -- TOTAL_CAPACITY
4028 ,NULL -- TOTAL_HEAD_COUNT
4029 ,NULL -- TOTAL_HEAD_COUNT_ADJ
4030 ,'USER_ENTERED' -- RESOURCE_ASSIGNMENT_TYPE
4031 ,NULL -- TOTAL_PROJECT_RAW_COST
4032 ,NULL -- TOTAL_PROJECT_BURDENED_COST
4033 ,NULL -- TOTAL_PROJECT_REVENUE
4034 ,NULL -- PARENT_ASSIGNMENT_ID
4035 ,l_ins_task_elem_version_id_tbl(i) -- WBS_ELEMENT_VERSION_ID
4036 ,l_rbs_element_id_tbl(l_ppl_index) -- RBS_ELEMENT_ID
4037 ,l_ins_start_date_tbl(i) -- PLANNING_START_DATE
4038 ,l_ins_end_date_tbl(i) -- PLANNING_END_DATE
4039 ,l_ins_start_date_tbl(i) -- SCHEDULE_START_DATE
4040 ,l_ins_end_date_tbl(i) -- SCHEDULE_END_DATE
4041 ,l_spread_curve_id_tbl(l_ppl_index) -- SPREAD_CURVE_ID
4042 ,l_etc_method_code_tbl(l_ppl_index) -- ETC_METHOD_CODE
4043 ,l_res_type_code_tbl(l_ppl_index) -- RES_TYPE_CODE
4044 ,NULL -- ATTRIBUTE_CATEGORY
4045 ,NULL -- ATTRIBUTE1
4046 ,NULL -- ATTRIBUTE2
4047 ,NULL -- ATTRIBUTE3
4048 ,NULL -- ATTRIBUTE4
4049 ,NULL -- ATTRIBUTE5
4050 ,NULL -- ATTRIBUTE6
4051 ,NULL -- ATTRIBUTE7
4052 ,NULL -- ATTRIBUTE8
4053 ,NULL -- ATTRIBUTE9
4054 ,NULL -- ATTRIBUTE10
4055 ,NULL -- ATTRIBUTE11
4056 ,NULL -- ATTRIBUTE12
4057 ,NULL -- ATTRIBUTE13
4058 ,NULL -- ATTRIBUTE14
4059 ,NULL -- ATTRIBUTE15
4060 ,NULL -- ATTRIBUTE16
4061 ,NULL -- ATTRIBUTE17
4062 ,NULL -- ATTRIBUTE18
4063 ,NULL -- ATTRIBUTE19
4064 ,NULL -- ATTRIBUTE20
4065 ,NULL -- ATTRIBUTE21
4066 ,NULL -- ATTRIBUTE22
4067 ,NULL -- ATTRIBUTE23
4068 ,NULL -- ATTRIBUTE24
4069 ,NULL -- ATTRIBUTE25
4070 ,NULL -- ATTRIBUTE26
4071 ,NULL -- ATTRIBUTE27
4072 ,NULL -- ATTRIBUTE28
4073 ,NULL -- ATTRIBUTE29
4074 ,NULL -- ATTRIBUTE30
4075 ,l_fc_res_type_code_tbl(l_ppl_index) -- FC_RES_TYPE_CODE
4076 ,l_resource_class_code_tbl(l_ppl_index) -- RESOURCE_CLASS_CODE
4077 ,l_organization_id_tbl(l_ppl_index) -- ORGANIZATION_ID
4078 ,l_job_id_tbl(l_ppl_index) -- JOB_ID
4079 ,l_person_id_tbl(l_ppl_index) -- PERSON_ID
4080 ,l_expenditure_type_tbl(l_ppl_index) -- EXPENDITURE_TYPE
4081 ,l_expenditure_category_tbl(l_ppl_index) -- EXPENDITURE_CATEGORY
4082 ,l_revenue_category_code_tbl(l_ppl_index) -- REVENUE_CATEGORY_CODE
4083 ,l_event_type_tbl(l_ppl_index) -- EVENT_TYPE
4084 ,l_supplier_id_tbl(l_ppl_index) -- SUPPLIER_ID
4085 ,l_non_labor_resource_tbl(l_ppl_index) -- NON_LABOR_RESOURCE
4086 ,l_bom_resource_id_tbl(l_ppl_index) -- BOM_RESOURCE_ID
4087 ,l_inventory_item_id_tbl(l_ppl_index) -- INVENTORY_ITEM_ID
4088 ,l_item_category_id_tbl(l_ppl_index) -- ITEM_CATEGORY_ID
4089 ,1 -- RECORD_VERSION_NUMBER
4090 ,NULL -- BILLABLE_PERCENT
4091 ,NULL -- TRANSACTION_SOURCE_CODE
4092 ,l_mfc_cost_type_id_tbl(l_ppl_index) -- MFC_COST_TYPE_ID
4093 ,NULL -- PROCURE_RESOURCE_FLAG
4094 ,NULL -- ASSIGNMENT_DESCRIPTION
4095 ,l_incurred_by_res_flag_tbl(l_ppl_index) -- INCURRED_BY_RES_FLAG
4096 ,NULL -- RATE_JOB_ID
4097 ,l_rate_expenditure_type_tbl(l_ppl_index) -- RATE_EXPENDITURE_TYPE
4098 ,'N' -- TA_DISPLAY_FLAG
4099 ,decode(l_spread_curve_id_tbl(l_ppl_index),l_fixed_date_sp_id,l_ins_start_date_tbl(i),null)-- SP_FIXED_DATE -- Bug 3607061
4100 ,l_person_type_code_tbl(l_ppl_index) -- PERSON_TYPE_CODE
4101 ,l_rate_based_flag_tbl(l_ppl_index) -- RATE_BASED_FLAG
4102 ,NULL -- USE_TASK_SCHEDULE_FLAG
4103 ,l_rate_func_curr_code_tbl(l_ppl_index) -- RATE_EXP_FUNC_CURR_CODE
4104 ,l_org_id_tbl(l_ppl_index) -- RATE_EXPENDITURE_ORG_ID
4105 ,l_incur_by_res_class_code_tbl(l_ppl_index) -- INCUR_BY_RES_CLASS_CODE
4106 ,l_incur_by_role_id_tbl(l_ppl_index) -- INCUR_BY_ROLE_ID
4107 ,l_project_role_id_tbl(l_ppl_index) -- PROJECT_ROLE_ID
4108 ,l_resource_class_flag_tbl(l_ppl_index) -- RESOURCE_CLASS_FLAG
4109 ,l_named_role_tbl(l_ppl_index) -- NAMED_ROLE
4110 ,l_txn_accum_header_id_tbl(l_ppl_index) -- TXN ACCUM HEADER ID
4111 ,l_pm_product_code_tbl(l_ppl_index) -- PM_PRODUCT_CODE
4112 ,l_pm_res_asgmt_ref_tbl(l_ppl_index) -- PM_RES_ASSIGNMENT_REFERENCE
4113 ,l_rate_based_flag_tbl(l_ppl_index) -- RESOURCE_RATE_BASED_FLAG IPM
4114 )
4115 RETURNING resource_assignment_id BULK COLLECT INTO l_res_assignment_id_temp_tbl ;
4116 -- IPM changes - copy the RA ID's created so that the new entity
4117 -- can be populated.
4118 l_orig_count := l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
4119 l_ra_id_temp_tbl.extend(l_res_assignment_id_temp_tbl.COUNT);
4120 FOR i IN l_orig_count+1 .. l_orig_count+l_res_assignment_id_temp_tbl.COUNT LOOP -- bug 5003827 issue 22
4121 l_ra_id_temp_tbl(i) := l_res_assignment_id_temp_tbl(i-l_orig_count); -- bug 5003827 issue 22
4122 END LOOP; -- bug 5003827 issue 22
4123 -- hr_utility.trace('RMcopy1');
4124 -- hr_utility.trace('l_ra_id_temp_tbl.COUNT IS : ' || l_ra_id_temp_tbl.COUNT);
4125 -- hr_utility.trace('l_res_assignment_id_temp_tbl.COUNT IS : ' || l_res_assignment_id_temp_tbl.COUNT);
4126 -- hr_utility.trace('*****');
4127
4128 -----------------------------------------------------------------------
4129 -- Populating resource assignments and corresponding spread amount flags
4130 -- in PLSql tables. for IN parameters of Calculate API
4131 -- If Quantity exists in the IN parameter then set it to 'Y'
4132 -- or else set it to 'N'
4133 -----------------------------------------------------------------------
4134 l_index := 1; -- Initialise to avoid incorrect values that might come in
4135 -- due to any usage of this.
4136
4137 IF (l_res_assignment_id_temp_tbl.COUNT >0) THEN
4138 FOR k IN l_res_assignment_id_temp_tbl.FIRST .. l_res_assignment_id_temp_tbl.LAST LOOP
4139 -----------------------------------------------------------------------
4140 -- Populating resource assignments and corresponding spread amount flags
4141 -- in PLSql tables.for IN parameters of Calculate API
4142 -- If Record is inserted then spread amount flag is set to Y or else it
4143 -- is set to N
4144 -----------------------------------------------------------------------
4145 IF l_res_assignment_id_temp_tbl(k) IS NOT NULL THEN
4146 l_trace_stage := 780;
4147 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
4148 IF l_debug_mode = 'Y' THEN
4149 pa_debug.g_err_stage:='BULK INSERTING DATA - WORPLAN - PEOPLE '||l_res_assignment_id_temp_tbl(k);
4150 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4151 END IF;
4152 l_quantity_tbl(l_index) := l_ins_cal_people_effort_tbl(k);
4153 l_res_assignment_id_tbl(l_index) := l_res_assignment_id_temp_tbl(k);
4154 -- IF l_spread_amounts_for_ver = 'Y' THEN
4155 l_spread_amount_flags_tbl(l_index) := 'Y';
4156 l_currency_code_tbl(l_index) := l_proj_curr_code;
4157 -- END IF;
4158 IF l_ins_cal_raw_cost_tbl.EXISTS(k) AND
4159 NVL(l_ins_cal_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4160 /* bug fix:Bug fix:5726773 l_ins_cal_raw_cost_tbl(k) <> 0 THEN */
4161 l_ins_cal_raw_cost_tbl(k) is NOT NULL THEN
4162 l_raw_cost_tbl(l_index) := l_ins_cal_raw_cost_tbl(k);
4163 END IF;
4164 IF l_ins_cal_burdened_cost_tbl.EXISTS(k) AND
4165 NVL(l_ins_cal_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4166 /* bug fix:Bug fix:5726773 l_ins_cal_burdened_cost_tbl(k) <> 0 THEN */
4167 l_ins_cal_burdened_cost_tbl(k) is NOT NULL THEN
4168 l_burdened_cost_tbl(l_index) := l_ins_cal_burdened_cost_tbl(k);
4169 END IF;
4170 l_call_calc_api := 'Y';
4171 l_index := l_index + 1;
4172 END IF;
4173 l_trace_stage := 790;
4174 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
4175 END LOOP;
4176 END IF;
4177 END IF;
4178 /* -- Bug 3749516 Removed code below for Equipment resource class Starts refer source control for reference */
4179 -- Bug 3749516 BULK INSERT FOR WORKPLAN ENDS HERE
4180
4181 ----------------------------------------------------------------------------------
4182 -- Bug 3749516 BULK INSERT FOR B/F and TA starts here
4183 -----------------------------------------------------------------------------------
4184 -- Please note that the below FOR Loop has a EXIT condition with respect to the
4185 -- BUDGET / FORECAST context. When p_one_to_one_mapping_flag is Passed as Y
4186 -- for BUDGET / FORECAST context we do not have to insert the cartesan product
4187 -- of element_ver_ids and rlm_ids passed to the ADD_PLANNING_TXNS api.
4188 -- In this case there is one-to-one correspondance in the records passed for rlm_ids
4189 -- and elem_ver_ids passed, and we use this data directly for insertion.
4190 -----------------------------------------------------------------------------------
4191 ----------------------------------------------------
4192 -- Loop for all the task_elem_version_id --- Starts
4193 ----------------------------------------------------
4194 ELSIF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK)
4195 OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET)
4196 OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
4197
4198 -- Resetting value of l_index
4199 l_index := 1;
4200 FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
4201 l_trace_stage := 730;
4202 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
4203 --------------------------------------------
4204 -- for p_context - TASK_ASSIGNMENTS
4205 --------------------------------------------
4206 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
4207 IF l_debug_mode = 'Y' THEN
4208 pa_debug.g_err_stage:='BULK INSERTING DATA - Context TASK p_context : '||p_context;
4209 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4210 END IF;
4211 --dbms_output.put_line('Inserting for TA');
4212 ---------------------------------------------------------
4213 -- BULK Inserting records into pa_resource_assignments
4214 -- by iterating throught elligle resource list member ids
4215 ---------------------------------------------------------
4216 -----------------------------------------------------------------
4217 -- The Insert Statement below has been modified for changes due to
4218 -- Bug 3665097. When p_one_to_one_mapping_flag is passed as Y for
4219 -- TA context. The Bulk insert is run once once for the same index as of rlm_ids.
4220 -- The Exit Condition below takes care of the insert running only once.
4221 -------------------------------------------------------------------
4222 FORALL j IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST
4223 INSERT INTO PA_RESOURCE_ASSIGNMENTS (
4224 RESOURCE_ASSIGNMENT_ID,BUDGET_VERSION_ID,PROJECT_ID,TASK_ID,RESOURCE_LIST_MEMBER_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CREATION_DATE,CREATED_BY
4225 ,LAST_UPDATE_LOGIN,UNIT_OF_MEASURE,TRACK_AS_LABOR_FLAG,STANDARD_BILL_RATE,AVERAGE_BILL_RATE,AVERAGE_COST_RATE
4226 ,PROJECT_ASSIGNMENT_ID,PLAN_ERROR_CODE,TOTAL_PLAN_REVENUE,TOTAL_PLAN_RAW_COST,TOTAL_PLAN_BURDENED_COST,TOTAL_PLAN_QUANTITY
4227 ,AVERAGE_DISCOUNT_PERCENTAGE,TOTAL_BORROWED_REVENUE,TOTAL_TP_REVENUE_IN,TOTAL_TP_REVENUE_OUT,TOTAL_REVENUE_ADJ
4228 ,TOTAL_LENT_RESOURCE_COST,TOTAL_TP_COST_IN,TOTAL_TP_COST_OUT,TOTAL_COST_ADJ,TOTAL_UNASSIGNED_TIME_COST
4229 ,TOTAL_UTILIZATION_PERCENT,TOTAL_UTILIZATION_HOURS,TOTAL_UTILIZATION_ADJ,TOTAL_CAPACITY,TOTAL_HEAD_COUNT
4230 ,TOTAL_HEAD_COUNT_ADJ,RESOURCE_ASSIGNMENT_TYPE,TOTAL_PROJECT_RAW_COST,TOTAL_PROJECT_BURDENED_COST,TOTAL_PROJECT_REVENUE
4231 ,PARENT_ASSIGNMENT_ID,WBS_ELEMENT_VERSION_ID,RBS_ELEMENT_ID,PLANNING_START_DATE,PLANNING_END_DATE,SCHEDULE_START_DATE,SCHEDULE_END_DATE
4232 ,SPREAD_CURVE_ID,ETC_METHOD_CODE,RES_TYPE_CODE,ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5
4233 ,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE9,ATTRIBUTE10,ATTRIBUTE11,ATTRIBUTE12,ATTRIBUTE13,ATTRIBUTE14,ATTRIBUTE15
4234 ,ATTRIBUTE16,ATTRIBUTE17,ATTRIBUTE18,ATTRIBUTE19,ATTRIBUTE20,ATTRIBUTE21,ATTRIBUTE22,ATTRIBUTE23,ATTRIBUTE24,ATTRIBUTE25
4235 ,ATTRIBUTE26,ATTRIBUTE27,ATTRIBUTE28,ATTRIBUTE29,ATTRIBUTE30,FC_RES_TYPE_CODE,RESOURCE_CLASS_CODE,ORGANIZATION_ID,JOB_ID
4236 ,PERSON_ID,EXPENDITURE_TYPE,EXPENDITURE_CATEGORY,REVENUE_CATEGORY_CODE,EVENT_TYPE,SUPPLIER_ID,NON_LABOR_RESOURCE
4237 ,BOM_RESOURCE_ID,INVENTORY_ITEM_ID,ITEM_CATEGORY_ID,RECORD_VERSION_NUMBER,BILLABLE_PERCENT
4238 ,TRANSACTION_SOURCE_CODE,MFC_COST_TYPE_ID,PROCURE_RESOURCE_FLAG,ASSIGNMENT_DESCRIPTION
4239 ,INCURRED_BY_RES_FLAG,RATE_JOB_ID,RATE_EXPENDITURE_TYPE,TA_DISPLAY_FLAG
4240 ,SP_FIXED_DATE,PERSON_TYPE_CODE,RATE_BASED_FLAG,USE_TASK_SCHEDULE_FLAG,RATE_EXP_FUNC_CURR_CODE
4241 ,RATE_EXPENDITURE_ORG_ID,INCUR_BY_RES_CLASS_CODE,INCUR_BY_ROLE_ID
4242 ,PROJECT_ROLE_ID,RESOURCE_CLASS_FLAG,NAMED_ROLE,TXN_ACCUM_HEADER_ID,UNPLANNED_FLAG
4243 ,PM_PRODUCT_CODE, PM_RES_ASSIGNMENT_REFERENCE,SCHEDULED_DELAY, resource_rate_based_flag)
4244 VALUES(PA_RESOURCE_ASSIGNMENTS_S.NEXTVAL -- RESOURCE_ASSIGNMENT_ID
4245 ,l_budget_version_id -- BUDGET_VERSION_ID
4246 ,p_project_id -- PROJECT_ID
4247 ,decode(p_one_to_one_mapping_flag,'Y',l_proj_elem_rlm_tbl(j)
4248 ,l_proj_element_id_tbl(i)) -- TASK_ID
4249 ,l_eligible_rlm_ids_tbl(j) -- RESOURCE_LIST_MEMBER_ID
4250 ,sysdate -- LAST_UPDATE_DATE
4251 ,fnd_global.user_id -- LAST_UPDATED_BY
4252 ,sysdate -- CREATION_DATE
4253 ,fnd_global.user_id -- CREATED_BY
4254 ,fnd_global.login_id -- LAST_UPDATE_LOGIN
4255 ,l_unit_of_measure_tbl(j) -- UNIT_OF_MEASURE
4256 ,NULL -- TRACK_AS_LABOR_FLAG
4257 ,NULL -- STANDARD_BILL_RATE
4258 ,NULL -- AVERAGE_BILL_RATE
4259 ,NULL -- AVERAGE_COST_RATE
4260 ,nvl(l_project_assignment_id_tbl(j),-1) -- PROJECT_ASSIGNMENT_ID
4261 ,NULL -- PLAN_ERROR_CODE
4262 ,NULL -- TOTAL_PLAN_REVENUE
4263 ,NULL -- TOTAL_PLAN_RAW_COST
4264 ,NULL -- TOTAL_PLAN_BURDENED_COST
4265 ,NULL -- TOTAL_PLAN_QUANTITY
4266 ,NULL -- AVERAGE_DISCOUNT_PERCENTAGE
4267 ,NULL -- TOTAL_BORROWED_REVENUE
4268 ,NULL -- TOTAL_TP_REVENUE_IN
4269 ,NULL -- TOTAL_TP_REVENUE_OUT
4270 ,NULL -- TOTAL_REVENUE_ADJ
4271 ,NULL -- TOTAL_LENT_RESOURCE_COST
4272 ,NULL -- TOTAL_TP_COST_IN
4273 ,NULL -- TOTAL_TP_COST_OUT
4274 ,NULL -- TOTAL_COST_ADJ
4275 ,NULL -- TOTAL_UNASSIGNED_TIME_COST
4276 ,NULL -- TOTAL_UTILIZATION_PERCENT
4277 ,NULL -- TOTAL_UTILIZATION_HOURS
4278 ,NULL -- TOTAL_UTILIZATION_ADJ
4279 ,NULL -- TOTAL_CAPACITY
4280 ,NULL -- TOTAL_HEAD_COUNT
4281 ,NULL -- TOTAL_HEAD_COUNT_ADJ
4282 ,'USER_ENTERED' -- RESOURCE_ASSIGNMENT_TYPE
4283 ,NULL -- TOTAL_PROJECT_RAW_COST
4284 ,NULL -- TOTAL_PROJECT_BURDENED_COST
4285 ,NULL -- TOTAL_PROJECT_REVENUE
4286 ,NULL -- PARENT_ASSIGNMENT_ID
4287 ,decode(p_one_to_one_mapping_flag,'Y',l_task_elem_rlm_tbl(j)
4288 ,p_task_elem_version_id_tbl(i)) -- WBS_ELEMENT_VERSION_ID
4289 ,l_rbs_element_id_tbl(j) -- RBS_ELEMENT_ID
4290 ,l_planning_start_date_tbl(j) -- PLANNING_START_DATE
4291 ,l_planning_end_date_tbl(j) -- PLANNING_END_DATE
4292 ,l_schedule_start_date_tbl(j) -- SCHEDULE_START_DATE
4293 ,l_schedule_end_date_tbl(j) -- SCHEDULE_END_DATE
4294 ,l_spread_curve_id_tbl(j) -- SPREAD_CURVE_ID
4295 ,l_etc_method_code_tbl(j) -- ETC_METHOD_CODE
4296 ,l_res_type_code_tbl(j) -- RES_TYPE_CODE
4297 ,l_attribute_category_tbl(j) -- ATTRIBUTE_CATEGORY
4298 ,l_ATTRIBUTE1_tbl(j) -- ATTRIBUTE1
4299 ,l_ATTRIBUTE2_tbl(j) -- ATTRIBUTE2
4300 ,l_ATTRIBUTE3_tbl(j) -- ATTRIBUTE3
4301 ,l_ATTRIBUTE4_tbl(j) -- ATTRIBUTE4
4302 ,l_ATTRIBUTE5_tbl(j) -- ATTRIBUTE5
4303 ,l_ATTRIBUTE6_tbl(j) -- ATTRIBUTE6
4304 ,l_ATTRIBUTE7_tbl(j) -- ATTRIBUTE7
4305 ,l_ATTRIBUTE8_tbl(j) -- ATTRIBUTE8
4306 ,l_ATTRIBUTE9_tbl(j) -- ATTRIBUTE9
4307 ,l_ATTRIBUTE10_tbl(j) -- ATTRIBUTE10
4308 ,l_ATTRIBUTE11_tbl(j) -- ATTRIBUTE11
4309 ,l_ATTRIBUTE12_tbl(j) -- ATTRIBUTE12
4310 ,l_ATTRIBUTE13_tbl(j) -- ATTRIBUTE13
4311 ,l_ATTRIBUTE14_tbl(j) -- ATTRIBUTE14
4312 ,l_ATTRIBUTE15_tbl(j) -- ATTRIBUTE15
4313 ,l_ATTRIBUTE16_tbl(j) -- ATTRIBUTE16
4314 ,l_ATTRIBUTE17_tbl(j) -- ATTRIBUTE17
4315 ,l_ATTRIBUTE18_tbl(j) -- ATTRIBUTE18
4316 ,l_ATTRIBUTE19_tbl(j) -- ATTRIBUTE19
4317 ,l_ATTRIBUTE20_tbl(j) -- ATTRIBUTE20
4318 ,l_ATTRIBUTE21_tbl(j) -- ATTRIBUTE21
4319 ,l_ATTRIBUTE22_tbl(j) -- ATTRIBUTE22
4320 ,l_ATTRIBUTE23_tbl(j) -- ATTRIBUTE23
4321 ,l_ATTRIBUTE24_tbl(j) -- ATTRIBUTE24
4322 ,l_ATTRIBUTE25_tbl(j) -- ATTRIBUTE25
4323 ,l_ATTRIBUTE26_tbl(j) -- ATTRIBUTE26
4324 ,l_ATTRIBUTE27_tbl(j) -- ATTRIBUTE27
4325 ,l_ATTRIBUTE28_tbl(j) -- ATTRIBUTE28
4326 ,l_ATTRIBUTE29_tbl(j) -- ATTRIBUTE29
4327 ,l_ATTRIBUTE30_tbl(j) -- ATTRIBUTE30
4328 ,l_fc_res_type_code_tbl(j) -- FC_RES_TYPE_CODE
4329 ,l_resource_class_code_tbl(j) -- RESOURCE_CLASS_CODE
4330 ,l_organization_id_tbl(j) -- ORGANIZATION_ID
4331 ,l_job_id_tbl(j) -- JOB_ID
4332 ,l_person_id_tbl(j) -- PERSON_ID
4333 ,l_expenditure_type_tbl(j) -- EXPENDITURE_TYPE
4334 ,l_expenditure_category_tbl(j) -- EXPENDITURE_CATEGORY
4335 ,l_revenue_category_code_tbl(j) -- REVENUE_CATEGORY_CODE
4336 ,l_event_type_tbl(j) -- EVENT_TYPE
4337 ,l_supplier_id_tbl(j) -- SUPPLIER_ID
4338 ,l_non_labor_resource_tbl(j) -- NON_LABOR_RESOURCE
4339 ,l_bom_resource_id_tbl(j) -- BOM_RESOURCE_ID
4340 ,l_inventory_item_id_tbl(j) -- INVENTORY_ITEM_ID
4341 ,l_item_category_id_tbl(j) -- ITEM_CATEGORY_ID
4342 ,1 -- RECORD_VERSION_NUMBER
4343 ,l_billable_percent_tbl(j) -- BILLABLE_PERCENT
4344 ,NULL -- TRANSACTION_SOURCE_CODE
4345 ,l_mfc_cost_type_id_tbl(j) -- MFC_COST_TYPE_ID
4346 ,l_procure_resource_flag_tbl(j) -- PROCURE_RESOURCE_FLAG
4347 ,l_assignment_description_tbl(j) -- ASSIGNMENT_DESCRIPTION
4348 ,l_incurred_by_res_flag_tbl(j) -- INCURRED_BY_RES_FLAG
4349 ,NULL -- RATE_JOB_ID
4350 ,l_rate_expenditure_type_tbl(j) -- RATE_EXPENDITURE_TYPE
4351 ,'Y' -- TA_DISPLAY_FLAG
4352 ,decode(l_spread_curve_id_tbl(j),l_fixed_date_sp_id,nvl(l_sp_fixed_date_tbl(j),l_planning_start_date_tbl(j)),null) -- SP_FIXED_DATE -- Bug 3607061
4353 ,l_person_type_code_tbl(j) -- PERSON_TYPE_CODE
4354 ,l_rate_based_flag_tbl(j) -- RATE_BASED_FLAG
4355 ,l_use_task_schedule_flag_tbl(j) -- USE_TASK_SCHEDULE_FLAG
4356 ,l_rate_func_curr_code_tbl(j) -- RATE_EXP_FUNC_CURR_CODE
4357 ,l_org_id_tbl(j) -- RATE_EXPENDITURE_ORG_ID
4358 ,l_incur_by_res_class_code_tbl(j) -- INCUR_BY_RES_CLASS_CODE
4359 ,l_incur_by_role_id_tbl(j) -- INCUR_BY_ROLE_ID
4360 ,l_project_role_id_tbl(j) -- PROJECT_ROLE_ID
4361 ,l_resource_class_flag_tbl(j) -- RESOURCE_CLASS_FLAG
4362 ,l_named_role_tbl(j) -- NAMED_ROLE
4363 ,l_txn_accum_header_id_tbl(j) -- TXN ACCUM HEADER ID
4364 ,l_unplanned_flag_tbl(j) -- UNPLANNED_FLAG
4365 ,l_pm_product_code_tbl(j) -- PM_PRODUCT_CODE
4366 ,l_pm_res_asgmt_ref_tbl(j) -- PM_RES_ASSIGNMENT_REFERENCE
4367 ,l_scheduled_delay(j) -- SCHEDULED_DELAY. For bug 3948128
4368 ,l_rate_based_flag_tbl(j) -- resource_RATE_BASED_FLAG
4369 )
4370 RETURNING resource_assignment_id
4371 BULK COLLECT INTO l_res_assignment_id_temp_tbl ;
4372
4373 -- IPM changes - copy the RA ID's created so that the new entity
4374 -- can be populated.
4375 l_orig_count := l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
4376 l_ra_id_temp_tbl.extend(l_res_assignment_id_temp_tbl.COUNT);
4377 l_curr_code_temp_tbl.extend(l_res_assignment_id_temp_tbl.COUNT);
4378 FOR i IN l_orig_count+1 .. l_orig_count+l_res_assignment_id_temp_tbl.COUNT LOOP -- bug 5003827 issue 22
4379 l_ra_id_temp_tbl(i) := l_res_assignment_id_temp_tbl(i-l_orig_count); -- bug 5003827 issue 22
4380 -- Bug 5003827 issue 1
4381 IF p_currency_code_tbl.EXISTS(i-l_orig_count) AND
4382 NVL(p_currency_code_tbl(i-l_orig_count),FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
4383 l_curr_code_temp_tbl(i) := p_currency_code_tbl(i-l_orig_count);
4384 ELSE
4385 l_curr_code_temp_tbl(i) := l_proj_curr_code;
4386 END IF;
4387 END LOOP; -- bug 5003827 issue 22
4388
4389 -------------------------------------------------------------------------------
4390 --No of records in rlm id tbl should be equal to the no of records in ra id tb;
4391 -------------------------------------------------------------------------------
4392
4393 IF l_res_assignment_id_temp_tbl.COUNT <> l_eligible_rlm_ids_tbl.COUNT THEN
4394 IF l_debug_mode = 'Y' THEN
4395 pa_debug.g_err_stage:='For Budget and Forcast p_context - data mismatch';
4396 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4397 END IF;
4398 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4399 END IF;
4400 -----------------------------------------------------------------------
4401 -- Populating resource assignments and corresponding spread amount flags
4402 -- in PLSql tables. for IN parameters of Calculate API
4403 -- If Quantity exists in the IN parameter then set it to 'Y'
4404 -- or else set it to 'N'
4405 -----------------------------------------------------------------------
4406
4407 IF ( l_res_assignment_id_temp_tbl.COUNT >0) THEN
4408 FOR k IN l_res_assignment_id_temp_tbl.FIRST .. l_res_assignment_id_temp_tbl.LAST LOOP
4409
4410 IF l_debug_mode = 'Y' THEN
4411 pa_debug.g_err_stage:='BULK INSERTING DATA - TASK Setting DATA - raid count : '||l_res_assignment_id_temp_tbl.COUNT;
4412 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4413 END IF;
4414
4415 l_res_assignment_id_tbl(l_index) := l_res_assignment_id_temp_tbl(k);
4416
4417 IF (((l_total_quantity_tbl.EXISTS(k)) AND (l_total_quantity_tbl.COUNT > 0))
4418 AND ((nvl(l_total_quantity_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM)
4419 /* bug fix:Bug fix:5726773 AND (l_total_quantity_tbl(k) <> 0))) OR */
4420 AND (l_total_quantity_tbl(k) is NOT NULL ))) OR
4421 (((p_raw_cost_tbl.EXISTS(k)) AND (p_raw_cost_tbl.COUNT > 0))
4422 AND ((nvl(p_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM)
4423 /* bug fix:Bug fix:5726773 AND (p_raw_cost_tbl(k) <> 0))) OR */
4424 AND (p_raw_cost_tbl(k) is NOT NULL))) OR
4425 (((p_burdened_cost_tbl.EXISTS(k)) AND (p_burdened_cost_tbl.COUNT > 0))
4426 AND ((nvl(p_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM)
4427 /* bug fix:Bug fix:5726773 AND (p_burdened_cost_tbl(k) <> 0))) THEN */
4428 AND (p_burdened_cost_tbl(k) is NOT NULL))) THEN
4429
4430 IF l_debug_mode = 'Y' THEN
4431 pa_debug.g_err_stage:='BULK INSERTING DATA - TASK spread amount flag';
4432 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4433 END IF;
4434 l_spread_amount_flags_tbl(l_index) := 'Y';
4435 l_call_calc_api := 'Y';
4436
4437 -- Bug 3861653
4438 IF p_currency_code_tbl.EXISTS(k) AND
4439 NVL(p_currency_code_tbl(k),FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
4440
4441 l_currency_code_tbl(l_index) := p_currency_code_tbl(k);
4442 ELSE
4443 l_currency_code_tbl(l_index) := l_proj_curr_code;
4444 END IF;
4445
4446 IF l_total_quantity_tbl.EXISTS(k) AND
4447 NVL(l_total_quantity_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4448 /* bug fix:Bug fix:5726773 l_total_quantity_tbl(k) <> 0 THEN */
4449 l_total_quantity_tbl(k) is NOT NULL THEN
4450
4451 l_quantity_tbl(l_index) := l_total_quantity_tbl(k);
4452 END IF;
4453
4454 l_cost_rate_tbl(l_index) := l_cost_rate_override_tbl(k);
4455 l_burden_multiplier_tbl(l_index) := l_burdened_rate_override_tbl(k);
4456
4457 IF p_raw_cost_tbl.EXISTS(k) AND
4458 NVL(p_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4459 /* bug fix:Bug fix:5726773 p_raw_cost_tbl(k) <> 0 THEN */
4460 p_raw_cost_tbl(k) is NOT NULL THEN
4461
4462 l_raw_cost_tbl(l_index) := p_raw_cost_tbl(k);
4463 END IF;
4464
4465 IF p_burdened_cost_tbl.EXISTS(k) AND
4466 NVL(p_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4467 /* bug fix:Bug fix:5726773 P_burdened_cost_tbl(k) <> 0 THEN */
4468 P_burdened_cost_tbl(k) is NOT NULL THEN
4469
4470 l_burdened_cost_tbl(l_index) := p_burdened_cost_tbl(k);
4471 END IF;
4472
4473 l_index := l_index + 1;
4474 END IF;
4475 END LOOP;
4476 END IF;
4477 -- Bug 3665097
4478 EXIT WHEN p_one_to_one_mapping_flag = 'Y';
4479
4480 -----------------------------------------------------------
4481 -- For p_context = BUDGET or FORECAST
4482 -----------------------------------------------------------
4483 ELSIF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR
4484 (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
4485
4486 ---------------------------------------------------------
4487 -- BULK Inserting records into pa_resource_assignments
4488 -- by iterating throught elligle resource list member ids
4489 ---------------------------------------------------------
4490
4491 ----------------------------------------------------------------
4492 /* Notes to Dev - These changes are only done for B/F Context.
4493 If Skip Duplicate Flag is Passed as Y to Add Planning Transaction API then
4494 if a record already exists in PA_RESOURCE_ASSIGNMENTS for a given Planning
4495 Element passed then the particular record is to be skipped whcile doing a
4496 bulk insert into PA_RESOURCE_ASSIGNMENT.
4497 However If quantity/amounts are passed for the planning elment which has
4498 been skipped for Insert. Calculate API would still be called for it.
4499
4500 As of Now Version - 115.122, the usage of p_skip_duplicate_flags is from
4501 1) Add task and resource page. When Resources are selected to be added as
4502 planning elements for multiple tasks. One or Resource Assignments would
4503 already exists and Insert in RA table would have to be skipped.
4504 But in this case Quantities/Amounts are not passed so Calculate API is
4505 not getting called.
4506 2) Edit Plan Page "Add Another Row" feature.
4507 Consider the following input data.
4508 1) t1 r1 c1
4509 2) t1 r1 c2
4510 3) t2 r2 c2
4511 4) t3 r3 c2
4512 5) t4 r4 c4
4513
4514 System State is such that RA Already Exists for
4515 1) t1 r1
4516 2) t3 r3
4517
4518 In this case Only the following RAs will be inserted.
4519 1)t2 r2 and
4520 3)t4 r4
4521
4522 Basically records 1)2) and 4) have to be skipped.
4523 However calculate API still Will be called for All the 5 records.
4524 This will be taken care by using save exceptions clause in the FORALL Insert below
4525 */
4526 ----------------------------------------------------------------
4527
4528 -----------------------------------------------------------------
4529 -- The Insert Statement below has been modified for changes due to
4530 -- Bug 3719918. When p_one_to_one_mapping_flag is passed as Y for
4531 -- Bugdet/Forecast context. The Bulk insert is run once once for
4532 -- the same index as of rlm_ids.
4533 -- The Exit Condition below takes care of the insert running only once.
4534 -------------------------------------------------------------------
4535
4536 BEGIN
4537 IF l_debug_mode = 'Y' THEN
4538 pa_debug.g_err_stage:='BULK INSERTING DATA - Context TASK p_context : '||p_context;
4539 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4540
4541 pa_debug.g_err_stage:='l_eligible_rlm_ids_tbl.count '||l_eligible_rlm_ids_tbl.count;
4542 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4543
4544 pa_debug.g_err_stage:='l_bf_quantity_tbl.count '||l_bf_quantity_tbl.count;
4545 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4546
4547 pa_debug.g_err_stage:='l_bf_raw_cost_tbl.count '||l_bf_raw_cost_tbl.count;
4548 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4549
4550 pa_debug.g_err_stage:='l_bf_burdened_cost_tbl.count '||l_bf_burdened_cost_tbl.count;
4551 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4552
4553 pa_debug.g_err_stage:='l_bf_revenue_tbl.count '||l_bf_revenue_tbl.count;
4554 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4555
4556 pa_debug.g_err_stage:='l_bf_currency_code_tbl.count '||l_bf_currency_code_tbl.count;
4557 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4558
4559 pa_debug.g_err_stage:='l_bf_cost_rate_tbl.count '||l_bf_cost_rate_tbl.count;
4560 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4561
4562 pa_debug.g_err_stage:='l_bf_bill_rate_tbl.count '||l_bf_bill_rate_tbl.count;
4563 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4564
4565 pa_debug.g_err_stage:='l_bf_burdened_rate_tbl.count '||l_bf_burdened_rate_tbl.count;
4566 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4567
4568
4569 END IF;
4570
4571
4572 FORALL j IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST SAVE EXCEPTIONS
4573 INSERT INTO PA_RESOURCE_ASSIGNMENTS (
4574 RESOURCE_ASSIGNMENT_ID,BUDGET_VERSION_ID,PROJECT_ID,TASK_ID,RESOURCE_LIST_MEMBER_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CREATION_DATE,CREATED_BY
4575 ,LAST_UPDATE_LOGIN,UNIT_OF_MEASURE,TRACK_AS_LABOR_FLAG,STANDARD_BILL_RATE,AVERAGE_BILL_RATE,AVERAGE_COST_RATE
4576 ,PROJECT_ASSIGNMENT_ID,PLAN_ERROR_CODE,TOTAL_PLAN_REVENUE,TOTAL_PLAN_RAW_COST,TOTAL_PLAN_BURDENED_COST,TOTAL_PLAN_QUANTITY
4577 ,AVERAGE_DISCOUNT_PERCENTAGE,TOTAL_BORROWED_REVENUE,TOTAL_TP_REVENUE_IN,TOTAL_TP_REVENUE_OUT,TOTAL_REVENUE_ADJ
4578 ,TOTAL_LENT_RESOURCE_COST,TOTAL_TP_COST_IN,TOTAL_TP_COST_OUT,TOTAL_COST_ADJ,TOTAL_UNASSIGNED_TIME_COST
4579 ,TOTAL_UTILIZATION_PERCENT,TOTAL_UTILIZATION_HOURS,TOTAL_UTILIZATION_ADJ,TOTAL_CAPACITY,TOTAL_HEAD_COUNT
4580 ,TOTAL_HEAD_COUNT_ADJ,RESOURCE_ASSIGNMENT_TYPE,TOTAL_PROJECT_RAW_COST,TOTAL_PROJECT_BURDENED_COST,TOTAL_PROJECT_REVENUE
4581 ,PARENT_ASSIGNMENT_ID,WBS_ELEMENT_VERSION_ID,RBS_ELEMENT_ID,PLANNING_START_DATE,PLANNING_END_DATE,SCHEDULE_START_DATE,SCHEDULE_END_DATE
4582 ,SPREAD_CURVE_ID,ETC_METHOD_CODE,RES_TYPE_CODE,ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5
4583 ,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE9,ATTRIBUTE10,ATTRIBUTE11,ATTRIBUTE12,ATTRIBUTE13,ATTRIBUTE14,ATTRIBUTE15
4584 ,ATTRIBUTE16,ATTRIBUTE17,ATTRIBUTE18,ATTRIBUTE19,ATTRIBUTE20,ATTRIBUTE21,ATTRIBUTE22,ATTRIBUTE23,ATTRIBUTE24,ATTRIBUTE25
4585 ,ATTRIBUTE26,ATTRIBUTE27,ATTRIBUTE28,ATTRIBUTE29,ATTRIBUTE30,FC_RES_TYPE_CODE,RESOURCE_CLASS_CODE,ORGANIZATION_ID,JOB_ID
4586 ,PERSON_ID,EXPENDITURE_TYPE,EXPENDITURE_CATEGORY,REVENUE_CATEGORY_CODE,EVENT_TYPE,SUPPLIER_ID,NON_LABOR_RESOURCE
4587 ,BOM_RESOURCE_ID,INVENTORY_ITEM_ID,ITEM_CATEGORY_ID,RECORD_VERSION_NUMBER,BILLABLE_PERCENT
4588 ,TRANSACTION_SOURCE_CODE,MFC_COST_TYPE_ID,PROCURE_RESOURCE_FLAG,ASSIGNMENT_DESCRIPTION
4589 ,INCURRED_BY_RES_FLAG,RATE_JOB_ID,RATE_EXPENDITURE_TYPE,TA_DISPLAY_FLAG
4590 ,SP_FIXED_DATE,PERSON_TYPE_CODE,RATE_BASED_FLAG,USE_TASK_SCHEDULE_FLAG,RATE_EXP_FUNC_CURR_CODE
4591 ,RATE_EXPENDITURE_ORG_ID,INCUR_BY_RES_CLASS_CODE,INCUR_BY_ROLE_ID
4592 ,PROJECT_ROLE_ID,RESOURCE_CLASS_FLAG,NAMED_ROLE,TXN_ACCUM_HEADER_ID
4593 ,PM_PRODUCT_CODE, PM_RES_ASSIGNMENT_REFERENCE, resource_rate_based_flag)
4594 VALUES
4595 ( pa_resource_assignments_s.nextval -- RESOURCE_ASSIGNMENT_ID
4596 ,l_budget_version_id -- BUDGET_VERSION_ID
4597 ,p_project_id -- PROJECT_ID
4598 ,decode(p_one_to_one_mapping_flag,'Y',l_bf_proj_elem_tbl(j)
4599 ,l_proj_element_id_tbl(i)) -- TASK_ID
4600 ,l_eligible_rlm_ids_tbl(j) -- RESOURCE_LIST_MEMBER_ID
4601 ,sysdate -- LAST_UPDATE_DATE
4602 ,fnd_global.user_id -- LAST_UPDATED_BY
4603 ,sysdate -- CREATION_DATE
4604 ,fnd_global.user_id -- CREATED_BY
4605 ,fnd_global.login_id -- LAST_UPDATE_LOGIN
4606 ,l_unit_of_measure_tbl(j) -- UNIT_OF_MEASURE
4607 ,NULL -- TRACK_AS_LABOR_FLAG
4608 ,NULL -- STANDARD_BILL_RATE
4609 ,NULL -- AVERAGE_BILL_RATE
4610 ,NULL -- AVERAGE_COST_RATE
4611 ,-1 -- PROJECT_ASSIGNMENT_ID
4612 ,NULL -- PLAN_ERROR_CODE
4613 ,NULL -- TOTAL_PLAN_REVENUE
4614 ,NULL -- TOTAL_PLAN_RAW_COST
4615 ,NULL -- TOTAL_PLAN_BURDENED_COST
4616 ,NULL -- TOTAL_PLAN_QUANTITY
4617 ,NULL -- AVERAGE_DISCOUNT_PERCENTAGE
4618 ,NULL -- TOTAL_BORROWED_REVENUE
4619 ,NULL -- TOTAL_TP_REVENUE_IN
4620 ,NULL -- TOTAL_TP_REVENUE_OUT
4621 ,NULL -- TOTAL_REVENUE_ADJ
4622 ,NULL -- TOTAL_LENT_RESOURCE_COST
4623 ,NULL -- TOTAL_TP_COST_IN
4624 ,NULL -- TOTAL_TP_COST_OUT
4625 ,NULL -- TOTAL_COST_ADJ
4626 ,NULL -- TOTAL_UNASSIGNED_TIME_COST
4627 ,NULL -- TOTAL_UTILIZATION_PERCENT
4628 ,NULL -- TOTAL_UTILIZATION_HOURS
4629 ,NULL -- TOTAL_UTILIZATION_ADJ
4630 ,NULL -- TOTAL_CAPACITY
4631 ,NULL -- TOTAL_HEAD_COUNT
4632 ,NULL -- TOTAL_HEAD_COUNT_ADJ
4633 ,'USER_ENTERED' -- RESOURCE_ASSIGNMENT_TYPE
4634 ,NULL -- TOTAL_PROJECT_RAW_COST
4635 ,NULL -- TOTAL_PROJECT_BURDENED_COST
4636 ,NULL -- TOTAL_PROJECT_REVENUE
4637 ,NULL -- PARENT_ASSIGNMENT_ID
4638 ,NULL -- WBS_ELEMENT_VERSION_ID --Bug 3546208
4639 ,l_rbs_element_id_tbl(j) -- RBS_ELEMENT_ID
4640 ,decode(p_one_to_one_mapping_flag,'Y',l_bf_start_date_tbl(j)
4641 ,l_start_date_tbl(i)) -- PLANNING_START_DATE
4642 ,decode(p_one_to_one_mapping_flag,'Y',l_bf_compl_date_tbl(j)
4643 ,l_compl_date_tbl(i)) -- PLANNING_END_DATE
4644 ,decode(p_one_to_one_mapping_flag,'Y',l_bf_start_date_tbl(j)
4645 ,l_start_date_tbl(i)) -- SCHEDULE_START_DATE
4646 ,decode(p_one_to_one_mapping_flag,'Y',l_bf_compl_date_tbl(j)
4647 ,l_compl_date_tbl(i)) -- SCHEDULE_END_DATE
4648 ,l_spread_curve_id_tbl(j) -- SPREAD_CURVE_ID
4649 ,l_etc_method_code_tbl(j) -- ETC_METHOD_CODE
4650 ,l_res_type_code_tbl(j) -- RES_TYPE_CODE
4651 ,NULL -- ATTRIBUTE_CATEGORY
4652 ,NULL -- ATTRIBUTE1
4653 ,NULL -- ATTRIBUTE2
4654 ,NULL -- ATTRIBUTE3
4655 ,NULL -- ATTRIBUTE4
4656 ,NULL -- ATTRIBUTE5
4657 ,NULL -- ATTRIBUTE6
4658 ,NULL -- ATTRIBUTE7
4659 ,NULL -- ATTRIBUTE8
4660 ,NULL -- ATTRIBUTE9
4661 ,NULL -- ATTRIBUTE10
4662 ,NULL -- ATTRIBUTE11
4663 ,NULL -- ATTRIBUTE12
4664 ,NULL -- ATTRIBUTE13
4665 ,NULL -- ATTRIBUTE14
4666 ,NULL -- ATTRIBUTE15
4667 ,NULL -- ATTRIBUTE16
4668 ,NULL -- ATTRIBUTE17
4669 ,NULL -- ATTRIBUTE18
4670 ,NULL -- ATTRIBUTE19
4671 ,NULL -- ATTRIBUTE20
4672 ,NULL -- ATTRIBUTE21
4673 ,NULL -- ATTRIBUTE22
4674 ,NULL -- ATTRIBUTE23
4675 ,NULL -- ATTRIBUTE24
4676 ,NULL -- ATTRIBUTE25
4677 ,NULL -- ATTRIBUTE26
4678 ,NULL -- ATTRIBUTE27
4679 ,NULL -- ATTRIBUTE28
4680 ,NULL -- ATTRIBUTE29
4681 ,NULL -- ATTRIBUTE30
4682 ,l_fc_res_type_code_tbl(j) -- FC_RES_TYPE_CODE
4683 ,l_resource_class_code_tbl(j) -- RESOURCE_CLASS_CODE
4684 ,l_organization_id_tbl(j) -- ORGANIZATION_ID
4685 ,l_job_id_tbl(j) -- JOB_ID
4686 ,l_person_id_tbl(j) -- PERSON_ID
4687 ,l_expenditure_type_tbl(j) -- EXPENDITURE_TYPE
4688 ,l_expenditure_category_tbl(j) -- EXPENDITURE_CATEGORY
4689 ,l_revenue_category_code_tbl(j) -- REVENUE_CATEGORY_CODE
4690 ,l_event_type_tbl(j) -- EVENT_TYPE
4691 ,l_supplier_id_tbl(j) -- SUPPLIER_ID
4692 ,l_non_labor_resource_tbl(j) -- NON_LABOR_RESOURCE
4693 ,l_bom_resource_id_tbl(j) -- BOM_RESOURCE_ID
4694 ,l_inventory_item_id_tbl(j) -- INVENTORY_ITEM_ID
4695 ,l_item_category_id_tbl(j) -- ITEM_CATEGORY_ID
4696 ,1 -- RECORD_VERSION_NUMBER
4697 ,NULL -- BILLABLE_PERCENT
4698 ,NULL -- TRANSACTION_SOURCE_CODE
4699 ,l_mfc_cost_type_id_tbl(j) -- MFC_COST_TYPE_ID
4700 ,NULL -- PROCURE_RESOURCE_FLAG
4701 ,NULL -- ASSIGNMENT_DESCRIPTION
4702 ,l_incurred_by_res_flag_tbl(j) -- INCURRED_BY_RES_FLAG
4703 ,NULL -- RATE_JOB_ID
4704 ,l_rate_expenditure_type_tbl(j) -- RATE_EXPENDITURE_TYPE
4705 ,NULL -- TA_DISPLAY_FLAG
4706 ,decode(p_one_to_one_mapping_flag,'Y',decode(l_spread_curve_id_tbl(j),l_fixed_date_sp_id,l_bf_start_date_tbl(j),null)
4707 ,decode(l_spread_curve_id_tbl(j),l_fixed_date_sp_id,l_start_date_tbl(i),null)) -- SP_FIXED_DATE -- Bug 3607061
4708 ,l_person_type_code_tbl(j) -- PERSON_TYPE_CODE
4709 ,l_rate_based_flag_tbl(j) -- RATE_BASED_FLAG
4710 ,l_use_task_schedule_flag_tbl(j) -- USE_TASK_SCHEDULE_FLAG
4711 ,l_rate_func_curr_code_tbl(j) -- RATE_EXP_FUNC_CURR_CODE
4712 ,l_org_id_tbl(j) -- RATE_EXPENDITURE_ORG_ID
4713 ,l_incur_by_res_class_code_tbl(j) -- INCUR_BY_RES_CLASS_CODE
4714 ,l_incur_by_role_id_tbl(j) -- INCUR_BY_ROLE_ID
4715 ,l_project_role_id_tbl(j) -- PROJECT_ROLE_ID
4716 ,l_resource_class_flag_tbl(j) -- RESOURCE_CLASS_FLAG
4717 ,l_named_role_tbl(j) -- NAMED_ROLE
4718 ,l_txn_accum_header_id_tbl(j) -- TXN ACCUM HEADER ID
4719 ,l_pm_product_code_tbl(j) -- PM_PRODUCT_CODE
4720 ,l_pm_res_asgmt_ref_tbl(j) -- PM_RES_ASSIGNMENT_REFERENCE
4721 ,l_rate_based_flag_tbl(j) -- resource_RATE_BASED_FLAG
4722 )
4723 RETURNING
4724 task_id,
4725 resource_list_member_id,
4726 resource_assignment_id,
4727 l_bf_quantity_tbl(j),
4728 l_bf_raw_cost_tbl(j),
4729 l_bf_burdened_cost_tbl(j),
4730 l_bf_revenue_tbl(j),
4731 l_bf_currency_code_tbl(j),
4732 l_bf_cost_rate_tbl(j),
4733 l_bf_bill_rate_tbl(j),
4734 l_bf_burdened_rate_tbl(j)
4735 BULK COLLECT INTO
4736 l_bf_task_id_tbl,
4737 l_bf_rlm_id_tbl,
4738 l_bf_ra_id_tbl,
4739 l_bf_ins_quantity_tbl,
4740 l_bf_ins_raw_cost_tbl,
4741 l_bf_ins_burdened_cost_tbl,
4742 l_bf_ins_revenue_tbl,
4743 l_bf_ins_currency_code_tbl,
4744 l_bf_ins_cost_rate_tbl,
4745 l_bf_ins_bill_rate_tbl,
4746 l_bf_ins_burdened_rate_tbl;
4747
4748 -- IPM changes - copy the RA ID's created so that the new entity
4749 -- can be populated.
4750 l_orig_count := l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
4751 l_ra_id_temp_tbl.extend(l_bf_ra_id_tbl.COUNT);
4752 l_curr_code_temp_tbl.extend(l_bf_ins_currency_code_tbl.COUNT);
4753 FOR i IN l_orig_count+1 .. l_orig_count+l_bf_ra_id_tbl.COUNT LOOP -- bug 5003827 issue 22
4754 l_ra_id_temp_tbl(i) := l_bf_ra_id_tbl(i-l_orig_count); -- bug 5003827 issue 22
4755 l_curr_code_temp_tbl(i) := l_bf_ins_currency_code_tbl(i-l_orig_count); -- bug 5003827 issue 22
4756 END LOOP; -- bug 5003827 issue 22
4757
4758 -- hr_utility.trace('after copy 1');
4759 -- hr_utility.trace('l_ra_id_temp_tbl.COUNT IS : ' || l_ra_id_temp_tbl.COUNT);
4760 -- hr_utility.trace('l_bf_ra_id_tbl.COUNT IS : ' || l_bf_ra_id_tbl.COUNT);
4761 -- hr_utility.trace('l_bf_ins_currency_code_tbl(1) IS : ' || l_bf_ins_currency_code_tbl(1));
4762 -- hr_utility.trace('*****');
4763 EXCEPTION
4764 WHEN dml_errors THEN
4765
4766 IF p_skip_duplicates_flag='Y' THEN
4767
4768 --If p_one_to_one_mapping_flag is not Y then the amounts will never be passed to this API
4769 --Hence we can ignore the pl/sql tbls bulk collected above
4770 IF p_one_to_one_mapping_flag='Y' THEN
4771
4772 l_index := l_bf_task_id_tbl.count;
4773
4774
4775
4776 IF (l_index + SQL%BULK_EXCEPTIONS.COUNT ) <> l_eligible_rlm_ids_tbl.COUNT THEN
4777
4778 pa_debug.g_err_stage:='No of inserted records + No. of errored records is not equal to total no. of input records';
4779 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4780
4781 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4782 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
4783 p_token1 => 'PROCEDURENAME',
4784 p_value1 => 'ADD_PLANNING_TRANSACTIONS',
4785 p_token2 => 'STAGE',
4786 p_value2 => 'Ins Recs + Err Recs <> Total Recs ['||l_index||' , '||SQL%BULK_EXCEPTIONS.COUNT ||' , '||l_eligible_rlm_ids_tbl.COUNT );
4787
4788 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4789
4790 END IF;
4791
4792 l_bf_task_id_tbl.extend(l_rlm_id_no_of_rows-l_bf_task_id_tbl.count);
4793 l_bf_rlm_id_tbl.extend(l_rlm_id_no_of_rows-l_bf_rlm_id_tbl.count);
4794 l_bf_ra_id_tbl.extend(l_rlm_id_no_of_rows-l_bf_ra_id_tbl.count);
4795 l_bf_ins_quantity_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_quantity_tbl.count);
4796 l_bf_ins_currency_code_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_currency_code_tbl.count);
4797 l_bf_ins_raw_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_raw_cost_tbl.count);
4798 l_bf_ins_burdened_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_burdened_cost_tbl.count);
4799 l_bf_ins_revenue_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_revenue_tbl.count);
4800 l_bf_ins_cost_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_cost_rate_tbl.count);
4801 l_bf_ins_bill_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_bill_rate_tbl.count);
4802 l_bf_ins_burdened_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_burdened_rate_tbl.count);
4803
4804
4805 --Even though the above INSERT statement fails for duplicated records, those records should also be
4806 --prepared since the calculate API has to be called for those records. This can be done by using
4807 --SQL%BULK_EXCEPTIONS through which it is possible to identify the iteration in which the dml has
4808 --failed
4809 FOR kk IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
4810
4811
4812 l_temp:=SQL%BULK_EXCEPTIONS(kk).ERROR_INDEX;
4813 SELECT task_id,
4814 resource_list_member_id,
4815 resource_assignment_id,
4816 l_bf_quantity_tbl(l_temp),
4817 l_bf_raw_cost_tbl(l_temp),
4818 l_bf_burdened_cost_tbl(l_temp),
4819 l_bf_revenue_tbl(l_temp),
4820 l_bf_currency_code_tbl(l_temp),
4821 l_bf_cost_rate_tbl(l_temp),
4822 l_bf_bill_rate_tbl(l_temp),
4823 l_bf_burdened_rate_tbl(l_temp)
4824 INTO l_bf_task_id_tbl(l_index+kk),
4825 l_bf_rlm_id_tbl(l_index+kk),
4826 l_bf_ra_id_tbl(l_index+kk),
4827 l_bf_ins_quantity_tbl(l_index+kk),
4828 l_bf_ins_raw_cost_tbl(l_index+kk),
4829 l_bf_ins_burdened_cost_tbl(l_index+kk),
4830 l_bf_ins_revenue_tbl(l_index+kk),
4831 l_bf_ins_currency_code_tbl(l_index+kk),
4832 l_bf_ins_cost_rate_tbl(l_index+kk),
4833 l_bf_ins_bill_rate_tbl(l_index+kk),
4834 l_bf_ins_burdened_rate_tbl(l_index+kk)
4835 FROM pa_resource_assignments
4836 WHERE project_id=p_project_id
4837 AND budget_version_id=l_budget_version_id
4838 AND task_id =l_bf_proj_elem_tbl(l_temp)
4839 AND resource_list_member_id=l_eligible_rlm_ids_tbl(l_temp)
4840 AND project_assignment_id=-1;
4841
4842
4843 END LOOP;
4844
4845 --_ins_ tbls are used only for the FORALL Insert above. Copy them back to _bf_ tbls
4846 --which are used in processing below
4847 l_bf_quantity_tbl := l_bf_ins_quantity_tbl;
4848 l_bf_raw_cost_tbl := l_bf_ins_raw_cost_tbl ;
4849 l_bf_burdened_cost_tbl := l_bf_ins_burdened_cost_tbl;
4850 l_bf_revenue_tbl := l_bf_ins_revenue_tbl ;
4851 l_bf_currency_code_tbl := l_bf_ins_currency_code_tbl;
4852 l_bf_cost_rate_tbl := l_bf_ins_cost_rate_tbl;
4853 l_bf_bill_rate_tbl := l_bf_ins_bill_rate_tbl;
4854 l_bf_burdened_rate_tbl := l_bf_ins_burdened_rate_tbl;
4855
4856 -- IPM changes - copy the RA ID's created so that the new entity
4857 -- can be populated.
4858 l_orig_count := l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
4859 l_ra_id_temp_tbl.extend(l_bf_ra_id_tbl.COUNT);
4860 l_curr_code_temp_tbl.extend(l_bf_ins_currency_code_tbl.COUNT);
4861 FOR i IN l_orig_count+1 .. l_orig_count+l_bf_ra_id_tbl.COUNT LOOP -- bug 5003827 issue 22
4862 l_ra_id_temp_tbl(i) := l_bf_ra_id_tbl(i-l_orig_count); -- bug 5003827 issue 22
4863 l_curr_code_temp_tbl(i) := l_bf_ins_currency_code_tbl(i-l_orig_count); -- bug 5003827 issue 22
4864 END LOOP; -- bug 5003827 issue 22
4865
4866 -- hr_utility.trace('after copy 2');
4867 -- hr_utility.trace('l_ra_id_temp_tbl.COUNT IS : ' || l_ra_id_temp_tbl.COUNT);
4868 -- hr_utility.trace('l_bf_ra_id_tbl.COUNT IS : ' || l_bf_ra_id_tbl.COUNT);
4869 -- hr_utility.trace('*****');
4870 END IF;--IF p_one_to_one_mapping_flag='Y' THEN
4871
4872 ELSE
4873
4874 pa_debug.g_err_stage:='No of duplicates found '||SQL%BULK_EXCEPTIONS.COUNT;
4875 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4876
4877 RAISE;
4878
4879 END IF;
4880
4881 END;
4882
4883 IF l_debug_mode = 'Y' THEN
4884 pa_debug.g_err_stage:='FLAG 2 '||l_bf_ra_id_tbl.COUNT;
4885 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4886 END IF;
4887
4888 -------------------------------------------------------------------------------
4889 --No of records in rlm id tbl should be equal to the no of records in ra id tb;
4890 -------------------------------------------------------------------------------
4891 IF l_bf_ra_id_tbl.COUNT <> l_eligible_rlm_ids_tbl.COUNT AND
4892 (p_skip_duplicates_flag = 'N') THEN
4893
4894 IF l_debug_mode = 'Y' THEN
4895 pa_debug.g_err_stage:='INSIDE Bulk Data insert for budget/forecast';
4896 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4897
4898 pa_debug.g_err_stage:='For Budget and Forcast p_context - data mismatch';
4899 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4900 END IF;
4901 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4902
4903 END IF;
4904
4905 l_index := 1;
4906
4907 -----------------------------------------------------------------------
4908 -- Populating resource assignments and corresponding spread amount flags
4909 -- in PLSql tables. for IN parameters of Calculate API
4910 -- If Quantity/Raw_Cost/Burdened_Cost exists in the IN parameter then
4911 -- set it to 'Y'or else set it to 'N'.
4912 --Calculate API will be called only when p_one_to_one_mapping_flag is Y
4913 -----------------------------------------------------------------------
4914 --IF nvl(p_skip_duplicates_flag,'N') = 'N' THEN -- Bug 3836358
4915 IF p_one_to_one_mapping_flag='Y' THEN
4916
4917 IF l_bf_ra_id_tbl.COUNT >0 THEN
4918
4919 FOR k IN l_bf_ra_id_tbl.FIRST .. l_bf_ra_id_tbl.LAST LOOP
4920
4921 l_res_assignment_id_tbl(l_index) := l_bf_ra_id_tbl(k);
4922 l_amount_exists :='N';
4923
4924 IF l_bf_quantity_tbl.EXISTS(k) AND
4925 NVL(l_bf_quantity_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4926 /* bug fix:Bug fix:5726773 l_bf_quantity_tbl(k) <> 0 THEN */
4927 l_bf_quantity_tbl(k) is NOT NULL THEN
4928 l_quantity_tbl(l_index) := l_bf_quantity_tbl(k);
4929 l_amount_exists := 'Y';
4930 END IF;
4931
4932 IF l_bf_raw_cost_tbl.EXISTS(k) AND
4933 NVL(l_bf_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4934 /* bug fix:Bug fix:5726773 l_bf_raw_cost_tbl(k) <> 0 THEN */
4935 l_bf_raw_cost_tbl(k) is NOT NULL THEN
4936 l_raw_cost_tbl(l_index) := l_bf_raw_cost_tbl(k);
4937 l_amount_exists := 'Y';
4938 END IF;
4939
4940 IF l_bf_burdened_cost_tbl.EXISTS(k) AND
4941 NVL(l_bf_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4942 /* bug fix:Bug fix:5726773 l_bf_burdened_cost_tbl(k) <> 0 THEN */
4943 l_bf_burdened_cost_tbl(k) is NOT NULL THEN
4944 l_burdened_cost_tbl(l_index) := l_bf_burdened_cost_tbl(k);
4945 l_amount_exists := 'Y';
4946 END IF;
4947
4948 IF l_bf_revenue_tbl.EXISTS(k) AND
4949 NVL(l_bf_revenue_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4950 /* bug fix:Bug fix:5726773 l_bf_revenue_tbl(k) <> 0 THEN */
4951 l_bf_revenue_tbl(k) is NOT NULL THEN
4952 l_revenue_tbl(l_index) := l_bf_revenue_tbl(k);
4953 l_amount_exists := 'Y';
4954 END IF;
4955
4956 IF l_amount_exists ='Y' THEN
4957 IF l_debug_mode = 'Y' THEN
4958 pa_debug.g_err_stage:='Amount exists and preparing the tbls for calc API';
4959 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4960 END IF;
4961
4962 IF l_bf_currency_code_tbl.EXISTS(k) AND
4963 NVL(l_bf_currency_code_tbl(k),FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
4964 l_currency_code_tbl(l_index) := l_bf_currency_code_tbl(k);
4965 ELSE
4966
4967 IF l_debug_mode = 'Y' THEN
4968 pa_debug.g_err_stage:='Currency code not passed when amounts are passed';
4969 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4970 END IF;
4971 --dbms_output.put_line('curr code not passed');
4972 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4973 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
4974
4975 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4976
4977 END IF;
4978
4979
4980 IF l_bf_cost_rate_tbl.EXISTS(k) THEN
4981 l_cost_rate_tbl(l_index) := l_bf_cost_rate_tbl(k);
4982 END IF;
4983
4984 IF l_bf_bill_rate_tbl.EXISTS(k) THEN
4985 l_bill_rate_tbl(l_index) := l_bf_bill_rate_tbl(k);
4986 END IF;
4987
4988 IF l_bf_burdened_rate_tbl.EXISTS(k) THEN
4989 l_burden_multiplier_tbl(l_index) := l_bf_burdened_rate_tbl(k);
4990 END IF;
4991
4992 l_call_calc_api := 'Y';
4993 l_spread_amount_flags_tbl(l_index) := 'Y';
4994 l_index := l_index + 1;
4995
4996 END IF;
4997
4998 END LOOP;
4999
5000 END IF;--IF l_bf_ra_id_tbl.COUNT >0 THEN
5001
5002 END IF;--IF p_one_to_one_mapping_flag='Y' THEN
5003 -- END IF; -- Bug 3836358
5004
5005 EXIT WHEN p_one_to_one_mapping_flag = 'Y';
5006 END IF; -- if condition for p_context
5007 END LOOP; -- loop for task_element_version_id
5008 END IF; -- p_context in TA/BF
5009 ----------------------------------------------------
5010 -- Loop for all the task_elem_version_id --- Ends
5011 ----------------------------------------------------
5012
5013 /* In create version calculate need not and should not be called... */
5014 IF NVL(p_calling_module,'-99') <> 'CREATE_VERSION' AND l_index > 1 THEN
5015 -- Remove the extra records from the input pl/sql tables
5016 l_res_assignment_id_tbl.delete(l_index,l_res_assignment_id_tbl.count);
5017 l_delete_budget_lines_tbl.delete(l_index,l_delete_budget_lines_tbl.count);
5018 l_spread_amount_flags_tbl.delete(l_index,l_spread_amount_flags_tbl.count);
5019 l_currency_code_tbl.delete(l_index,l_currency_code_tbl.count);
5020 l_quantity_tbl.delete(l_index,l_quantity_tbl.count);
5021 l_raw_cost_tbl.delete(l_index,l_raw_cost_tbl.count);
5022 l_burdened_cost_tbl.delete(l_index,l_burdened_cost_tbl.count);
5023 l_revenue_tbl.delete(l_index,l_revenue_tbl.count);
5024 l_cost_rate_tbl.delete(l_index,l_cost_rate_tbl.count);
5025 l_burden_multiplier_tbl.delete(l_index,l_burden_multiplier_tbl.count);
5026 l_bill_rate_tbl.delete(l_index,l_bill_rate_tbl.count);
5027 l_line_start_date_tbl.delete(l_index,l_line_start_date_tbl.count);
5028 l_line_end_date_tbl.delete(l_index,l_line_end_date_tbl.count);
5029
5030 IF l_debug_mode = 'Y' THEN
5031 IF l_res_assignment_id_tbl.COUNT > 0 THEN
5032 FOR i in l_res_assignment_id_tbl.FIRST .. l_res_assignment_id_tbl.LAST LOOP
5033 pa_debug.g_err_stage:='CALCULATE PARAM l_res_assignment_id_tbl :'||l_res_assignment_id_tbl(i);
5034 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5035
5036 pa_debug.g_err_stage:='CALCULATE PARAM l_quantity_tbl :'||l_quantity_tbl(i);
5037 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5038
5039 pa_debug.g_err_stage:='CALCULATE PARAM l_raw_cost_tbl :'||l_raw_cost_tbl(i);
5040 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5041
5042 pa_debug.g_err_stage:='CALCULATE PARAM l_burdened_cost_tbl :'||l_burdened_cost_tbl(i);
5043 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5044
5045 pa_debug.g_err_stage:='CALCULATE PARAM l_revenue_tbl :'||l_revenue_tbl(i);
5046 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5047
5048 pa_debug.g_err_stage:='CALCULATE PARAM l_currency_code_tbl :'||l_currency_code_tbl(i);
5049 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5050
5051 pa_debug.g_err_stage:='CALCULATE PARAM l_cost_rate_tbl :'||l_cost_rate_tbl(i);
5052 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5053
5054 pa_debug.g_err_stage:='CALCULATE PARAM l_burden_multiplier_tbl :'||l_burden_multiplier_tbl(i);
5055 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5056
5057 pa_debug.g_err_stage:='CALCULATE PARAM l_bill_rate_tbl :'||l_bill_rate_tbl(i);
5058 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5059 END LOOP;
5060 END IF;
5061 END IF;
5062
5063 PA_FP_CALC_PLAN_PKG.calculate(
5064 p_project_id => p_project_id
5065 ,p_budget_version_id => l_budget_version_id
5066 ,p_source_context => PA_FP_CONSTANTS_PKG.G_CALC_API_RESOURCE_CONTEXT
5067 ,p_resource_assignment_tab => l_res_assignment_id_tbl
5068 ,p_delete_budget_lines_tab => l_delete_budget_lines_tbl
5069 -- bug fix:5726773,p_spread_amts_flag_tab => l_spread_amount_flags_tbl
5070 ,p_txn_currency_code_tab => l_currency_code_tbl -- derive
5071 -- as told by sanjay ,p_txn_currency_override_tab => l_currency_code_tbl
5072 ,p_total_qty_tab => l_quantity_tbl -- derive
5073 ,p_total_raw_cost_tab => l_raw_cost_tbl -- dervie
5074 ,p_total_burdened_cost_tab => l_burdened_cost_tbl -- dervie
5075 ,p_total_revenue_tab => l_revenue_tbl -- derive
5076 ,p_raw_cost_rate_tab => l_cost_rate_tbl -- derive
5077 ,p_rw_cost_rate_override_tab => l_cost_rate_tbl
5078 ,p_b_cost_rate_tab => l_burden_multiplier_tbl -- derive
5079 ,p_b_cost_rate_override_tab => l_burden_multiplier_tbl
5080 ,p_bill_rate_tab => l_bill_rate_tbl -- derive
5081 ,p_bill_rate_override_tab => l_bill_rate_tbl
5082 ,p_line_start_date_tab => l_line_start_date_tbl --PA_PLSQL_DATATYPES.EmptyDateTab
5083 ,p_line_end_date_tab => l_line_end_date_tbl --PA_PLSQL_DATATYPES.EmptyDateTab
5084 ,p_apply_progress_flag => p_apply_progress_flag
5085 ,p_rollup_required_flag => l_pji_rollup_required --Bug 4200168
5086 ,x_return_status => l_return_status
5087 ,x_msg_count => l_msg_count
5088 ,x_msg_data => l_msg_data);
5089
5090 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5091 IF l_debug_mode = 'Y' THEN
5092 pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate api returned error';
5093 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5094 END IF;
5095
5096 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5097 END IF;
5098
5099 -- Added for bug 4492493, 4548240
5100 IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
5101 AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(p_project_id) = 'Y') OR
5102 (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
5103 AND pa_task_assignment_utils.g_require_progress_rollup = 'Y') THEN
5104
5105 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
5106 ( p_calling_context => 'ASGMT_PLAN_CHANGE'
5107 ,p_project_id => p_project_id
5108 ,p_structure_version_id => pa_project_structure_utils.get_latest_wp_version(p_project_id)
5109 ,p_pub_struc_ver_id => pa_project_structure_utils.get_latest_wp_version(p_project_id)
5110 ,x_return_status => l_return_status
5111 ,x_msg_count => l_msg_count
5112 ,x_msg_data => l_msg_data);
5113
5114 pa_task_assignment_utils.g_require_progress_rollup := 'N';
5115
5116
5117 END IF;
5118
5119 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5120 IF l_debug_mode = 'Y' THEN
5121 pa_debug.g_err_stage:='Called API PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp';
5122 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5123 END IF;
5124
5125 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5126 END IF;
5127 --End bug 4492493
5128
5129 END IF;
5130
5131 -- IPM changes - rollup amounts in new entity /* 7161809 */
5132
5133 PA_FIN_PLAN_PUB.create_default_plan_txn_rec
5134 (p_budget_version_id => l_budget_version_id,
5135 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
5136 p_ra_id_tbl => l_ra_id_temp_tbl,
5137 p_curr_code_tbl => l_curr_code_temp_tbl,
5138 x_return_status => x_return_status,
5139 x_msg_count => x_msg_count,
5140 x_msg_data => x_msg_data
5141 );
5142
5143 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5144 IF l_debug_mode = 'Y' THEN
5145 pa_debug.g_err_stage:='Called API PA_FIN_PLAN_PUB.create_default_plan_txn_rec returned error';
5146 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage, 3);
5147 END IF;
5148 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5149 END IF; /* 7161809 */
5150
5151 -- Call the UTIL API to get the financial plan info l_fp_cols_rec
5152
5153 /* Commented for bug 7161809
5154 -- hr_utility.trace('p_project_id IS : ' || p_project_id);
5155 -- hr_utility.trace('l_budget_version_id IS : ' || l_budget_version_id);
5156 pa_fp_gen_amount_utils.get_plan_version_dtls
5157 (p_project_id => p_project_id,
5158 p_budget_version_id => l_budget_version_id,
5159 x_fp_cols_rec => l_fp_cols_rec,
5160 x_return_status => x_return_status,
5161 x_msg_count => x_msg_count,
5162 x_msg_data => x_msg_data);
5163
5164 -- hr_utility.trace('x_return_status IS : ' || x_return_status);
5165 -- hr_utility.trace('x_msg_count IS : ' || x_msg_count);
5166 -- hr_utility.trace('x_msg_data IS : ' || x_msg_data);
5167
5168 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5169
5170 IF l_debug_mode = 'Y' THEN
5171 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
5172 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage, 3);
5173 END IF;
5174 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5175 END IF;
5176
5177 -- IPM changes - populate tmp table to use for rollup
5178 delete pa_resource_asgn_curr_tmp;
5179
5180 IF l_ra_id_temp_tbl.COUNT > 0 THEN
5181 -- IPM - populate the currency code
5182 l_curr_code_temp_tbl.extend(l_ra_id_temp_tbl.COUNT);
5183 FOR j IN l_ra_id_temp_tbl.first .. l_ra_id_temp_tbl.last LOOP
5184 IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN,
5185 PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK) THEN
5186 -- Use project currency for workplan
5187 -- Bug 5003827 Issue 1
5188 l_curr_code_temp_tbl(j) := nvl(l_curr_code_temp_tbl(j),
5189 l_proj_curr_code);
5190 ELSE
5191 l_curr_code_temp_tbl(j) := nvl(l_curr_code_temp_tbl(j),
5192 l_proj_func_curr_code);
5193
5194 END IF;
5195 END LOOP;
5196
5197 FORALL i IN l_ra_id_temp_tbl.first .. l_ra_id_temp_tbl.last
5198 INSERT INTO pa_resource_asgn_curr_tmp
5199 (RA_TXN_ID
5200 ,RESOURCE_ASSIGNMENT_ID
5201 ,TXN_CURRENCY_CODE
5202 ,DELETE_FLAG
5203 ,TXN_RAW_COST_RATE_OVERRIDE -- 6839167
5204 ,TXN_BURDEN_COST_RATE_OVERRIDE
5205 ,TXN_BILL_RATE_OVERRIDE
5206 )
5207 SELECT pa_resource_asgn_curr_s.nextval
5208 ,l_ra_id_temp_tbl(i)
5209 ,l_curr_code_temp_tbl(i)
5210 ,NULL
5211 ,prac.TXN_RAW_COST_RATE_OVERRIDE --6839167
5212 ,prac.TXN_BURDEN_COST_RATE_OVERRIDE
5213 ,prac.TXN_BILL_RATE_OVERRIDE
5214 from pa_resource_asgn_curr prac
5215 where prac.RESOURCE_ASSIGNMENT_ID=l_ra_id_temp_tbl(i);
5216 END IF;
5217
5218 pa_res_asg_currency_pub.maintain_data(
5219 p_fp_cols_rec => l_fp_cols_rec,
5220 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
5221 p_delete_flag => 'N',
5222 p_copy_flag => 'N',
5223 p_src_version_id => NULL,
5224 p_copy_mode => NULL,
5225 p_rollup_flag => 'Y',
5226 p_version_level_flag => 'N',
5227 p_called_mode => 'SELF_SERVICE',
5228 x_return_status => x_return_status,
5229 x_msg_count => x_msg_count,
5230 x_msg_data => x_msg_data
5231 );
5232
5233 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5234
5235 IF l_debug_mode = 'Y' THEN
5236 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
5237 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage, 3);
5238 END IF;
5239 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5240 END IF; */
5241
5242 IF l_debug_mode = 'Y' THEN
5243 pa_debug.g_err_stage:='CALLED THE PA_FP_CALC_PLAN_PKG.CALCULATE API';
5244 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5245 pa_debug.reset_curr_function;
5246 END IF;
5247 EXCEPTION
5248
5249 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
5250 ROLLBACK TO SAVEPOINT ADD_PLANNING_TRANS_SP;
5251 l_msg_count := FND_MSG_PUB.count_msg;
5252 IF l_msg_count = 1 THEN
5253 PA_INTERFACE_UTILS_PUB.get_messages
5254 (p_encoded => FND_API.G_TRUE
5255 ,p_msg_index => 1
5256 ,p_msg_count => l_msg_count
5257 ,p_msg_data => l_msg_data
5258 ,p_data => l_data
5259 ,p_msg_index_out => l_msg_index_out);
5260 x_msg_data := l_data;
5261 x_msg_count := l_msg_count;
5262
5263 ELSE
5264
5265 x_msg_count := l_msg_count;
5266 END IF;
5267 x_return_status := FND_API.G_RET_STS_ERROR;
5268 IF l_debug_mode = 'Y' THEN
5269 pa_debug.reset_curr_function;
5270 END IF;
5271 WHEN OTHERS THEN
5272
5273 ROLLBACK TO SAVEPOINT ADD_PLANNING_TRANS_SP;
5274 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5275 x_msg_count := 1;
5276 x_msg_data := SQLERRM;
5277 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
5278 ,p_procedure_name => 'add_planning_transactions');
5279
5280 IF l_debug_mode = 'Y' THEN
5281 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
5282 pa_debug.write('add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,5);
5283 pa_debug.reset_curr_function;
5284 END IF;
5285 RAISE;
5286
5287 END add_planning_transactions;
5288
5289
5290 /*This procedure should be called to update planning transactions
5291 valid values for p_context are 'BUDGET' , 'FORECAST', 'WORKPLAN' and 'TASK_ASSIGNMENT'
5292 */
5293 /*******************************************************************************************************
5294 As part of Bug 3749516 All References to Equipment Effort or Equip Resource Class has been removed in
5295 PROCEDURE update_planning_transactions.
5296 All _addl_ and p_equip_people_effort_tbl IN parameters have also been removed as they were not being
5297 used/referred.
5298 ********************************************************************************************************/
5299 PROCEDURE update_planning_transactions
5300 (
5301 p_context IN VARCHAR2
5302 ,p_calling_context IN VARCHAR2 DEFAULT NULL -- Added for Bug 6856934
5303 ,p_struct_elem_version_id IN Pa_proj_element_versions.element_version_id%TYPE
5304 ,p_budget_version_id IN Pa_budget_versions.budget_version_id%TYPE
5305 ,p_task_elem_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5306 ,p_task_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5307 ,p_task_number_tbl IN SYSTEM.PA_VARCHAR2_100_TBL_TYPE
5308 ,p_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
5309 ,p_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
5310 ,p_planned_people_effort_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5311 -- One pl/sql record in The Above tables
5312 ,p_resource_assignment_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5313 ,p_resource_list_member_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5314 ,p_assignment_description_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5315 ,p_project_assignment_id_tbl IN SYSTEM.pa_num_tbl_type
5316 ,p_resource_alias_tbl IN SYSTEM.PA_VARCHAR2_80_TBL_TYPE
5317 ,p_resource_class_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE
5318 ,p_resource_class_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5319 ,p_resource_class_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5320 ,p_res_type_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5321 ,p_resource_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5322 ,p_resource_name IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE -- bug fix 3461537
5323 ,p_person_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5324 ,p_job_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5325 ,p_person_type_code IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5326 ,p_bom_resource_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5327 ,p_non_labor_resource_tbl IN SYSTEM.PA_VARCHAR2_20_TBL_TYPE
5328 ,p_inventory_item_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5329 ,p_item_category_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5330 ,p_project_role_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5331 ,p_project_role_name_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5332 ,p_organization_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5333 ,p_organization_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5334 ,p_fc_res_type_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5335 ,p_financial_category_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5336 ,p_expenditure_type_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5337 ,p_expenditure_category_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5338 ,p_event_type_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5339 ,p_revenue_category_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5340 ,p_supplier_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5341 ,p_unit_of_measure_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5342 ,p_spread_curve_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5343 ,p_etc_method_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5344 ,p_mfc_cost_type_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5345 ,p_procure_resource_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE
5346 ,p_incurred_by_res_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE
5347 ,p_incur_by_resource_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5348 ,p_incur_by_resource_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5349 ,p_incur_by_res_class_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5350 ,p_incur_by_role_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5351 ,p_use_task_schedule_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE
5352 ,p_planning_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
5353 ,p_planning_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
5354 ,p_schedule_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
5355 ,p_schedule_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
5356 ,p_quantity_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5357 ,p_currency_code_tbl IN SYSTEM.PA_VARCHAR2_15_TBL_TYPE
5358 ,p_txn_currency_override_tbl IN SYSTEM.PA_VARCHAR2_15_TBL_TYPE
5359 ,p_raw_cost_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5360 ,p_burdened_cost_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5361 ,p_revenue_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5362 ,p_cost_rate_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5363 ,p_cost_rate_override_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5364 ,p_burdened_rate_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5365 ,p_burdened_rate_override_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5366 ,p_bill_rate_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5367 ,p_bill_rate_override_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5368 ,p_billable_percent_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5369 ,p_sp_fixed_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
5370 ,p_named_role_tbl IN SYSTEM.PA_VARCHAR2_80_TBL_TYPE
5371 ,p_financial_category_name_tbl IN SYSTEM.PA_VARCHAR2_80_TBL_TYPE
5372 ,p_supplier_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5373 ,p_attribute_category_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5374 ,p_attribute1_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5375 ,p_attribute2_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5376 ,p_attribute3_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5377 ,p_attribute4_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5378 ,p_attribute5_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5379 ,p_attribute6_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5380 ,p_attribute7_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5381 ,p_attribute8_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5382 ,p_attribute9_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5383 ,p_attribute10_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5384 ,p_attribute11_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5385 ,p_attribute12_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5386 ,p_attribute13_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5387 ,p_attribute14_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5388 ,p_attribute15_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5389 ,p_attribute16_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5390 ,p_attribute17_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5391 ,p_attribute18_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5392 ,p_attribute19_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5393 ,p_attribute20_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5394 ,p_attribute21_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5395 ,p_attribute22_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5396 ,p_attribute23_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5397 ,p_attribute24_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5398 ,p_attribute25_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5399 ,p_attribute26_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5400 ,p_attribute27_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5401 ,p_attribute28_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5402 ,p_attribute29_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5403 ,p_attribute30_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5404 ,p_apply_progress_flag IN VARCHAR2 /* Passed from apply_progress api (sakthi's team) */
5405 ,p_scheduled_delay IN SYSTEM.pa_num_tbl_type --For bug 3948128
5406 ,p_pji_rollup_required IN VARCHAR2 DEFAULT 'Y' /* Bug# 4200168 */
5407 ,p_upd_cost_amts_too_for_ta_flg IN VARCHAR2 DEFAULT 'N' --Added for bug #4538286
5408 ,p_distrib_amts IN VARCHAR2 DEFAULT 'Y' -- Bug 5684639.
5409 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5410 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5411 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5412 ) IS
5413 l_return_status VARCHAR2(2000);
5414 l_msg_count NUMBER := 0;
5415 l_data VARCHAR2(2000);
5416 l_msg_data VARCHAR2(2000);
5417
5418 l_msg_index_out NUMBER;
5419 l_debug_mode VARCHAR2(1);
5420 l_debug_level3 CONSTANT NUMBER := 3;
5421 l_debug_level5 CONSTANT NUMBER := 5;
5422 l_module_name VARCHAR2(100) := 'Update_Planning_Transactions' || 'pa.plsql.pa_fp_planning_transaction_pub';
5423 l_loop_start NUMBER;
5424 l_loop_end NUMBER;
5425
5426 l_budget_version_id pa_budget_versions.budget_version_id%TYPE;
5427 l_project_id pa_projects_all.project_id%TYPE;
5428 l_fixed_date_sp_id pa_spread_curves_b.spread_curve_id%TYPE; -- bug 3607061
5429 l_pji_rollup_required VARCHAR2(1); --Bug 4200168
5430
5431
5432 /* Start of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
5433 */
5434 l_task_rec_tbl PA_TASK_ASSIGNMENT_UTILS.l_task_rec_tbl_type;
5435 l_resource_rec_tbl PA_TASK_ASSIGNMENT_UTILS.l_resource_rec_tbl_type;
5436 /* End of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
5437 */
5438
5439 /* Start of variables for Variable for Resource Attributes
5440 */
5441 l_resource_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5442 l_resource_list_member_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5443 l_assignment_description_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
5444 l_planning_resource_alias_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
5445 l_resource_class_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5446 l_resource_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5447 l_resource_class_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5448 l_res_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5449 l_resource_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5450 l_person_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5451 l_job_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5452 l_person_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5453 l_bom_resource_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5454 l_non_labor_resource_tbl SYSTEM.PA_VARCHAR2_20_TBL_TYPE := SYSTEM.PA_VARCHAR2_20_TBL_TYPE();
5455 l_inventory_item_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5456 l_item_category_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5457 l_project_role_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5458 l_project_role_name_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5459 l_organization_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5460 -- bug 3455288, 19-FEB-04, jwhite: Changed varchar2 length to 240 from 30 --------------------------------
5461 -- l_organization_name_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5462
5463 l_organization_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
5464
5465 -- End, bug 3455288, 19-FEB-04, jwhite: ------------------------------------------------------------------
5466
5467 l_fc_res_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5468 l_financial_category_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5469 l_expenditure_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5470 l_expenditure_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5471 l_event_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5472 l_revenue_category_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5473 l_supplier_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5474 l_unit_of_measure_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5475 l_spread_curve_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5476 l_etc_method_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5477 l_mfc_cost_type_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5478 l_procure_resource_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5479 l_incurred_by_res_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5480 l_incur_by_resource_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
5481 l_Incur_by_resource_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5482 l_Incur_by_res_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5483 l_Incur_by_role_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5484 l_use_task_schedule_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5485 l_planning_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5486 l_planning_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5487 l_schedule_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5488 l_schedule_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5489 l_total_quantity_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5490 l_override_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
5491 l_billable_percent_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5492 l_cost_rate_override_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5493 l_burdened_rate_override_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5494 l_sp_fixed_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5495 l_named_role_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
5496 l_financial_category_name_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
5497 l_supplier_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
5498 l_wbs_element_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5499 l_project_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5500 l_attribute_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5501 l_attribute1_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5502 l_attribute2_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5503 l_attribute3_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5504 l_attribute4_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5505 l_attribute5_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5506 l_attribute6_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5507 l_attribute7_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5508 l_attribute8_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5509 l_attribute9_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5510 l_attribute10_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5511 l_attribute11_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5512 l_attribute12_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5513 l_attribute13_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5514 l_attribute14_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5515 l_attribute15_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5516 l_attribute16_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5517 l_attribute17_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5518 l_attribute18_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5519 l_attribute19_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5520 l_attribute20_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5521 l_attribute21_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5522 l_attribute22_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5523 l_attribute23_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5524 l_attribute24_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5525 l_attribute25_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5526 l_attribute26_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5527 l_attribute27_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5528 l_attribute28_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5529 l_attribute29_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5530 l_attribute30_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
5531 l_bill_rate_override_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5532 l_bill_rate_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5533 l_b_multiplier_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5534 l_raw_cost_rate_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5535 l_revenue_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5536 l_burdened_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5537 l_total_raw_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5538 l_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
5539 --For bug 3948128
5540 l_scheduled_delay SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5541
5542 -- Added for bug 3698458
5543 l_rate_exp_org_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5544 l_rate_exp_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5545 l_rate_func_curr_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5546 l_incur_by_res_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
5547
5548 /* End of variables for Variable for Resource Attributes
5549 */
5550 l_spread_amt_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5551 l_delete_budget_lines_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5552 l_currency_code_tmp_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
5553 l_existing_curr_code pa_budget_lines.txn_currency_code%TYPE;
5554 l_projfunc_currency_code pa_budget_lines.txn_currency_code%TYPE;
5555 l_projfunc_currency_code_out pa_budget_lines.txn_currency_code%TYPE;
5556 l_rbs_element_id_tbl SYSTEM.pa_num_tbl_type;
5557 l_txn_accum_header_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
5558
5559 /* added for bug 3678814 */
5560 l_rate_based_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5561
5562 l_trace_stage NUMBER;
5563
5564 -- Added for bug 3817356
5565 l_in_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5566 l_in_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5567 l_in_planning_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5568 l_in_planning_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5569 l_in_schedule_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5570 l_in_schedule_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5571 l_in_sp_fixed_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5572 l_temp_gmiss_date date := to_date('01-01-4712','DD-MM-YYYY');
5573
5574 --These parameters are introduced for calculate API enhancements tracked thru bug 4152749
5575 l_mfc_cost_type_id_old_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5576 l_mfc_cost_type_id_new_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5577 l_spread_curve_id_old_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5578 l_spread_curve_id_new_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
5579 l_sp_fixed_date_old_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5580 l_sp_fixed_date_new_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5581 l_plan_start_date_old_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5582 l_plan_start_date_new_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5583 l_plan_end_date_old_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5584 l_plan_end_date_new_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
5585 l_rlm_id_change_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
5586
5587 --Added for Bug 4200168
5588 l_g_miss_char CONSTANT VARCHAR(1) := FND_API.G_MISS_CHAR;
5589 l_g_miss_num CONSTANT NUMBER := FND_API.G_MISS_NUM;
5590 l_g_miss_date CONSTANT DATE := FND_API.G_MISS_DATE;
5591
5592 l_fp_cols_rec pa_fp_gen_amount_utils.fp_cols; -- IPM
5593
5594 BEGIN
5595
5596 l_trace_stage := 10;
5597 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
5598
5599
5600 x_msg_count := 0;
5601 x_return_status := FND_API.G_RET_STS_SUCCESS;
5602 l_debug_mode := 'Y'; --NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
5603
5604 --Added for Bug 4200168
5605 IF p_pji_rollup_required = 'Y' THEN
5606 l_pji_rollup_required := 'Y';
5607 ELSE
5608 l_pji_rollup_required := 'N';
5609 END IF;
5610
5611 pa_task_assignment_utils.g_require_progress_rollup := 'N';
5612
5613 IF l_debug_mode = 'Y' THEN
5614 pa_debug.set_curr_function( p_function => 'Update_Planning_Transactions',
5615 p_debug_mode => l_debug_mode );
5616 END IF;
5617 --dbms_output.put_line('In upd planning txn');
5618
5619
5620 /* A savepoint is set
5621 */
5622 SAVEPOINT Update_Planning_Transactions;
5623
5624 IF l_debug_mode = 'Y' THEN
5625 pa_debug.g_err_stage := 'Checking for required parameters';
5626 print_msg(pa_debug.g_err_stage,l_module_name);
5627 END IF;
5628
5629 /* Check for required parameters
5630 */
5631
5632 IF l_debug_mode = 'Y' THEN
5633 pa_debug.g_err_stage := 'Extending the local pl/sql tables: p_context =>' ||p_context;
5634 print_msg(pa_debug.g_err_stage,l_module_name);
5635 END IF;
5636
5637
5638
5639 IF p_context IS NULL OR
5640 p_context NOT IN ( PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST
5641 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
5642 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
5643 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET ) THEN
5644
5645 pa_debug.g_err_stage := 'The Context IN parameter is NULL';
5646 pa_debug.write(l_module_name, pa_debug.g_err_stage,l_debug_level5);
5647 --dbms_output.put_line('p_context is null');
5648
5649 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5650 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
5651 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5652 END IF;
5653 --dbms_output.put_line('U01');
5654
5655 IF l_debug_mode = 'Y' THEN
5656 pa_debug.g_err_stage:= 'Checking for required parameters';
5657 print_msg(pa_debug.g_err_stage,l_module_name);
5658 END IF;
5659
5660
5661 /* Check for business rules violations
5662 */
5663 IF l_debug_mode = 'Y' THEN
5664 pa_debug.g_err_stage:= 'Validating input parameters';
5665 print_msg(pa_debug.g_err_stage,l_module_name);
5666 END IF;
5667
5668 l_trace_stage := 50;
5669 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
5670
5671
5672 /* If the calling Context is Workplan or Task Assignment, the element version Id can't be null
5673 */
5674 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
5675 IF p_struct_elem_version_id IS NULL THEN
5676 IF l_debug_mode = 'Y' THEN
5677 pa_debug.g_err_stage:= 'p_struct_elem_version_id is null';
5678 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5679 END IF;
5680 --dbms_output.put_line('p_struct_elem_version_id is null');
5681
5682 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5683 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
5684 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5685 ELSE
5686 l_budget_version_id := PA_PLANNING_TRANSACTION_UTILS.Get_wp_budget_version_id(p_struct_elem_version_id);
5687 IF l_budget_version_id IS NULL THEN
5688 IF l_debug_mode = 'Y' THEN
5689 pa_debug.g_err_stage:='Calling add plan txn to create the version';
5690 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5691 END IF;
5692
5693 BEGIN
5694 SELECT project_id
5695 INTO l_project_id
5696 FROM pa_struct_task_wbs_v
5697 WHERE parent_Structure_version_id=p_struct_elem_version_id
5698 AND ROWNUM=1;
5699 EXCEPTION
5700 WHEN NO_DATA_FOUND THEN
5701 IF l_debug_mode = 'Y' THEN
5702 pa_debug.g_err_stage:='Invalid value for p_struct_elem_version_id';
5703 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5704 END IF;
5705 --dbms_output.put_line('Invalid value for p_struct_elem_version_id');
5706 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5707 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
5708 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5709 END;
5710
5711
5712
5713 pa_fp_planning_transaction_pub.add_planning_transactions
5714 (p_context =>'WORKPLAN'
5715 ,p_calling_context => p_calling_context -- Added for Bug 6856934
5716 ,p_project_id => l_project_id
5717 ,p_struct_elem_version_id => p_struct_elem_version_id
5718 ,x_return_status => l_return_status
5719 ,x_msg_data => l_msg_data
5720 ,x_msg_count => l_msg_count);
5721 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5722 IF l_debug_mode = 'Y' THEN
5723 pa_debug.g_err_stage:='Called API pa_fp_planning_transaction_pub.add_planning_transaction api returned error';
5724 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5725 END IF;
5726 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5727 END IF;
5728 l_budget_version_id := PA_PLANNING_TRANSACTION_UTILS.Get_wp_budget_version_id(p_struct_elem_version_id);
5729 END IF;
5730
5731 END IF;
5732 /* If the calling Context is BUDGET or FORECAST, the budget version Id can't be null
5733 */
5734 ELSIF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST THEN
5735 IF p_budget_version_id IS NULL THEN
5736 IF l_debug_mode = 'Y' THEN
5737 pa_debug.g_err_stage:= 'p_budget_version_id is null';
5738 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5739 END IF;
5740 --dbms_output.put_line('p_budget_version_id is null');
5741 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5742 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
5743 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5744 ELSE
5745 l_budget_version_id := p_budget_version_id;
5746 END IF;
5747 END IF;
5748 --dbms_output.put_line('U1');
5749 l_trace_stage := 100;
5750 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
5751
5752
5753 /* Validation Done
5754 */
5755 /* Getting the project id for the corresponding budget version
5756 */
5757 BEGIN
5758 SELECT project_id
5759 INTO l_project_id
5760 FROM pa_budget_versions
5761 WHERE budget_version_id = l_budget_version_id;
5762 EXCEPTION
5763 WHEN OTHERS THEN
5764 IF l_debug_mode = 'Y' THEN
5765 pa_debug.g_err_stage:='Select failed on pa_budget_versions.';
5766 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5767 END IF;
5768 RAISE;
5769 END;
5770
5771 /* Bug 3817356 - We to cannot pass negative date from Java to PLSql hence we are not
5772 able to pass FND_API.G_MISS_DATE ('01-Jan--4712') to this API when called from Java.
5773 Instead when this API is called from Java instead of G_MISS_DATE '01-Jan-4712' is passed.
5774 Added code below to Replace '01-Jan-4712' by FND_API.G_MISS_DATE
5775 */
5776 IF l_debug_mode = 'Y' THEN
5777 pa_debug.g_err_stage:='Processing IN Date Tables for G_MISS_DATE';
5778 pa_debug.write('PA_FP_PLANNING_TXN_PUB.update_planning_transactions:'||l_module_name,pa_debug.g_err_stage,3);
5779 END IF;
5780
5781 l_in_start_date_tbl := p_start_date_tbl;
5782 l_in_end_date_tbl := p_end_date_tbl;
5783 l_in_planning_start_date_tbl := p_planning_start_date_tbl;
5784 l_in_planning_end_date_tbl := p_planning_end_date_tbl;
5785 l_in_schedule_start_date_tbl := p_schedule_start_date_tbl;
5786 l_in_schedule_end_date_tbl := p_schedule_end_date_tbl;
5787 l_in_sp_fixed_date_tbl := p_sp_fixed_date_tbl;
5788 -- Please note that the l_in_ tables will be reference instead of p_ tables in Code Flow
5789 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
5790 IF p_task_elem_version_id_tbl.COUNT > 0 THEN
5791 FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
5792 IF p_start_date_tbl.EXISTS(i)
5793 AND p_start_date_tbl(i) = l_temp_gmiss_date THEN
5794 l_in_start_date_tbl(i) := FND_API.G_MISS_DATE;
5795 END IF;
5796 IF p_end_date_tbl.EXISTS(i)
5797 AND p_end_date_tbl(i) = l_temp_gmiss_date THEN
5798 l_in_end_date_tbl(i) := FND_API.G_MISS_DATE;
5799 END IF;
5800 IF p_planning_start_date_tbl.EXISTS(i)
5801 AND p_planning_start_date_tbl(i) = l_temp_gmiss_date THEN
5802 l_in_planning_start_date_tbl(i) := FND_API.G_MISS_DATE;
5803 END IF;
5804 IF p_planning_end_date_tbl.EXISTS(i)
5805 AND p_planning_end_date_tbl(i) = l_temp_gmiss_date THEN
5806 l_in_planning_end_date_tbl(i) := FND_API.G_MISS_DATE;
5807 END IF;
5808 IF p_schedule_start_date_tbl.EXISTS(i)
5809 AND p_schedule_start_date_tbl(i) = l_temp_gmiss_date THEN
5810 l_in_schedule_start_date_tbl(i) := FND_API.G_MISS_DATE;
5811 END IF;
5812 IF p_schedule_end_date_tbl.EXISTS(i)
5813 AND p_schedule_end_date_tbl(i) = l_temp_gmiss_date THEN
5814 l_in_schedule_end_date_tbl(i) := FND_API.G_MISS_DATE;
5815 END IF;
5816 IF p_sp_fixed_date_tbl.EXISTS(i)
5817 AND p_sp_fixed_date_tbl(i) = l_temp_gmiss_date THEN
5818 l_in_sp_fixed_date_tbl(i) := FND_API.G_MISS_DATE;
5819 END IF;
5820 END LOOP;
5821 END IF;
5822 ELSE
5823 IF p_resource_assignment_id_tbl.COUNT > 0 THEN
5824 FOR i IN p_resource_assignment_id_tbl.FIRST .. p_resource_assignment_id_tbl.LAST LOOP
5825 IF p_start_date_tbl.EXISTS(i)
5826 AND p_start_date_tbl(i) = l_temp_gmiss_date THEN
5827 l_in_start_date_tbl(i) := FND_API.G_MISS_DATE;
5828 END IF;
5829 IF p_end_date_tbl.EXISTS(i)
5830 AND p_end_date_tbl(i) = l_temp_gmiss_date THEN
5831 l_in_end_date_tbl(i) := FND_API.G_MISS_DATE;
5832 END IF;
5833 IF p_planning_start_date_tbl.EXISTS(i)
5834 AND p_planning_start_date_tbl(i) = l_temp_gmiss_date THEN
5835 l_in_planning_start_date_tbl(i) := FND_API.G_MISS_DATE;
5836 END IF;
5837 IF p_planning_end_date_tbl.EXISTS(i)
5838 AND p_planning_end_date_tbl(i) = l_temp_gmiss_date THEN
5839 l_in_planning_end_date_tbl(i) := FND_API.G_MISS_DATE;
5840 END IF;
5841 IF p_schedule_start_date_tbl.EXISTS(i)
5842 AND p_schedule_start_date_tbl(i) = l_temp_gmiss_date THEN
5843 l_in_schedule_start_date_tbl(i) := FND_API.G_MISS_DATE;
5844 END IF;
5845 IF p_schedule_end_date_tbl.EXISTS(i)
5846 AND p_schedule_end_date_tbl(i) = l_temp_gmiss_date THEN
5847 l_in_schedule_end_date_tbl(i) := FND_API.G_MISS_DATE;
5848 END IF;
5849 IF p_sp_fixed_date_tbl.EXISTS(i)
5850 AND p_sp_fixed_date_tbl(i) = l_temp_gmiss_date THEN
5851 l_in_sp_fixed_date_tbl(i) := FND_API.G_MISS_DATE;
5852 END IF;
5853 END LOOP;
5854 END IF;
5855 END IF;
5856
5857
5858 /* If the calling context is workplan, then checking, if the passed task info is present or not
5859 * If not present, the called procedure would insert it.
5860 */
5861 --dbms_output.put_line ('pq1 is '||p_planned_people_effort_tbl(1));
5862 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
5863 check_and_create_task_rec_info
5864 ( p_project_id => l_project_id
5865 ,p_struct_elem_version_id => p_struct_elem_version_id
5866 ,p_element_version_id_tbl => p_task_elem_version_id_tbl
5867 ,p_planning_start_date_tbl => l_in_start_date_tbl -- 3817356
5868 ,p_planning_end_date_tbl => l_in_end_date_tbl -- 3817356
5869 ,p_planned_people_effort_tbl => p_planned_people_effort_tbl
5870 ,p_raw_cost_tbl => p_raw_cost_tbl
5871 ,p_burdened_cost_tbl => p_burdened_cost_tbl
5872 ,p_apply_progress_flag => p_apply_progress_flag
5873 ,x_element_version_id_tbl => l_wbs_element_version_id_tbl
5874 ,x_planning_start_date_tbl => l_planning_start_date_tbl
5875 ,x_planning_end_date_tbl => l_planning_end_date_tbl
5876 ,x_planned_effort_tbl => l_total_quantity_tbl
5877 ,x_resource_assignment_id_tbl => l_resource_assignment_id_tbl
5878 ,x_raw_cost_tbl => l_total_raw_cost_tbl
5879 ,x_burdened_cost_tbl => l_burdened_cost_tbl
5880 ,x_return_status => l_return_status
5881 ,x_msg_data => l_msg_data
5882 ,x_msg_count => l_msg_count);
5883
5884 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5885 IF l_debug_mode = 'Y' THEN
5886 pa_debug.g_err_stage:='Called API pa_planning_transaction_pub.check_and_create_task_rec_info api returned error';
5887 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5888 END IF;
5889 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5890 END IF;
5891 --dbms_output.put_line ('pq1 is '||l_total_quantity_tbl(1));
5892 l_trace_stage := 150;
5893 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
5894
5895
5896 /* If l ra id tbl count is zero, it means, the check_and_create_task_rec_info
5897 has called add plan tran api with effort and hence no more prorcessing is required.
5898 */
5899 IF l_resource_assignment_id_tbl.COUNT = 0 THEN
5900 IF l_debug_mode = 'Y' THEN
5901 pa_debug.g_err_stage:='No Data Returned from the api-----Returning';
5902 print_msg(pa_debug.g_err_stage,l_module_name);
5903 END IF;
5904 --dbms_output.put_line('No Data Returned from the api-----Returning');
5905 IF l_debug_mode = 'Y' THEN
5906 pa_debug.reset_curr_function;
5907 END IF;
5908 RETURN;
5909 END IF;
5910
5911 /* For WP, the sch dates and planning dates are always in synch */
5912
5913 l_schedule_start_date_tbl := l_planning_start_Date_tbl;
5914 l_schedule_end_date_tbl := l_planning_end_Date_tbl;
5915
5916 ELSE
5917 /* The context is of not work plan type
5918 */
5919 --dbms_output.put_line('U3');
5920 IF l_debug_mode = 'Y' THEN
5921 pa_debug.g_err_stage:='Non Workplan type context';
5922 print_msg(pa_debug.g_err_stage,l_module_name);
5923 END IF;
5924 IF p_resource_assignment_id_tbl.COUNT =0 THEN
5925 IF l_debug_mode = 'Y' THEN
5926 pa_debug.g_err_stage:='Resource Assignment Id table is empty---- Returning';
5927 print_msg(pa_debug.g_err_stage,l_module_name);
5928 END IF;
5929 IF l_debug_mode = 'Y' THEN
5930 pa_debug.reset_curr_function;
5931 END IF;
5932 --dbms_output.put_line('Empty ra id tbl returning');
5933 RETURN;
5934 ELSE
5935 -- 3817356 Replacing p_xxxx_date_tbls by l_in_xxxx_date_tbls
5936 l_resource_assignment_id_tbl := p_resource_assignment_id_tbl;
5937 IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
5938 /* Budgets and forecasts case schedule start/end dates,
5939 * though not relevant are always kept in synch with planning start and end
5940 * dates */
5941 l_schedule_start_date_tbl := l_in_planning_start_date_tbl;
5942 l_schedule_end_date_tbl := l_in_planning_end_date_tbl;
5943 l_planning_start_date_tbl := l_in_planning_start_date_tbl;
5944 l_planning_end_date_tbl := l_in_planning_end_date_tbl;
5945 ELSE /* Context is TA */
5946 l_planning_start_date_tbl := l_in_planning_start_date_tbl;
5947 l_planning_end_date_tbl := l_in_planning_end_date_tbl;
5948 l_schedule_start_date_tbl := l_in_schedule_start_date_tbl;
5949 l_schedule_end_date_tbl := l_in_schedule_end_date_tbl;
5950 END IF;
5951 l_total_quantity_tbl := p_quantity_tbl;
5952 --In the context of BUDGET or FORECAST throw an error if the p_currency_code_tbl does not
5953 --have same no of elements as that p_resource_assignment_id_tbl
5954 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST THEN
5955 IF p_resource_assignment_id_tbl.COUNT <> p_currency_code_tbl.COUNT THEN
5956 IF l_debug_mode = 'Y' THEN
5957 pa_debug.g_err_stage:='the contents of p_currency_code_tbl not equal in number to contents in res assmt tbl';
5958 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5959 END IF;
5960 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5961 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
5962 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5963 END IF;
5964 END IF;
5965 END IF;
5966 END IF;
5967 -- End for calling Context of workplan
5968
5969 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Starts
5970 BEGIN
5971 IF l_debug_mode = 'Y' THEN
5972 pa_debug.g_err_stage:='Fetching spread curve id for fixed date spread curve';
5973 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5974 END IF;
5975 Select spread_curve_id
5976 into l_fixed_date_sp_id
5977 from pa_spread_curves_b
5978 where spread_curve_code = 'FIXED_DATE';
5979
5980 IF l_debug_mode = 'Y' THEN
5981 pa_debug.g_err_stage:='Fetching spread curve id l_fixed_date_sp_id:'||l_fixed_date_sp_id;
5982 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5983 END IF;
5984
5985 EXCEPTION
5986 WHEN NO_DATA_FOUND THEN
5987 IF l_debug_mode = 'Y' THEN
5988 pa_debug.g_err_stage:='Fixed date spread curve not found in system';
5989 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
5990 END IF;
5991 RAISE;
5992 END;
5993 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Ends
5994
5995 --Extend all the local pl/sql tables.
5996 IF l_debug_mode = 'Y' THEN
5997 pa_debug.g_err_stage := 'Extending the local pl/sql tables';
5998 print_msg(pa_debug.g_err_stage,l_module_name);
5999 END IF;
6000
6001 l_trace_stage := 200;
6002 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6003
6004 l_resource_list_member_id_tbl.extend(l_resource_assignment_id_tbl.last);
6005
6006 l_trace_stage := 201;
6007 --hr_uility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6008
6009 --dbms_output.put_line('2');
6010 l_assignment_description_tbl.extend(l_resource_assignment_id_tbl.last);
6011 l_planning_resource_alias_tbl.extend(l_resource_assignment_id_tbl.last);
6012 l_resource_class_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6013 l_resource_class_code_tbl.extend(l_resource_assignment_id_tbl.last);
6014 l_resource_class_id_tbl.extend(l_resource_assignment_id_tbl.last);
6015 l_res_type_code_tbl.extend(l_resource_assignment_id_tbl.last);
6016 l_resource_code_tbl.extend(l_resource_assignment_id_tbl.last);
6017 l_person_id_tbl.extend(l_resource_assignment_id_tbl.last);
6018 l_job_id_tbl.extend(l_resource_assignment_id_tbl.last);
6019
6020 l_person_type_code_tbl.extend(l_resource_assignment_id_tbl.last);
6021 l_bom_resource_id_tbl.extend(l_resource_assignment_id_tbl.last);
6022 l_non_labor_resource_tbl.extend(l_resource_assignment_id_tbl.last);
6023 l_inventory_item_id_tbl.extend(l_resource_assignment_id_tbl.last);
6024 l_item_category_id_tbl.extend(l_resource_assignment_id_tbl.last);
6025 l_project_role_id_tbl.extend(l_resource_assignment_id_tbl.last);
6026 l_project_role_name_tbl.extend(l_resource_assignment_id_tbl.last);
6027 l_organization_id_tbl.extend(l_resource_assignment_id_tbl.last);
6028 l_organization_name_tbl.extend(l_resource_assignment_id_tbl.last);
6029 l_fc_res_type_code_tbl.extend(l_resource_assignment_id_tbl.last);
6030 l_financial_category_code_tbl.extend(l_resource_assignment_id_tbl.last);
6031 l_expenditure_type_tbl.extend(l_resource_assignment_id_tbl.last);
6032 l_expenditure_category_tbl.extend(l_resource_assignment_id_tbl.last);
6033
6034 -- Added for bug 3698458
6035 l_rate_exp_org_id_tbl.extend(l_resource_assignment_id_tbl.last);
6036 l_rate_exp_type_tbl.extend(l_resource_assignment_id_tbl.last);
6037 l_rate_func_curr_code_tbl.extend(l_resource_assignment_id_tbl.last);
6038 l_incur_by_res_type_tbl.extend(l_resource_assignment_id_tbl.last);
6039
6040 -- Added for bug 3678814
6041 l_rate_based_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6042
6043 l_trace_stage := 210;
6044 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6045
6046 l_event_type_tbl.extend(l_resource_assignment_id_tbl.last);
6047 l_revenue_category_code_tbl.extend(l_resource_assignment_id_tbl.last);
6048 l_supplier_id_tbl.extend(l_resource_assignment_id_tbl.last);
6049 l_unit_of_measure_tbl.extend(l_resource_assignment_id_tbl.last);
6050 l_spread_curve_id_tbl.extend(l_resource_assignment_id_tbl.last);
6051 l_etc_method_code_tbl.extend(l_resource_assignment_id_tbl.last);
6052 l_mfc_cost_type_id_tbl.extend(l_resource_assignment_id_tbl.last);
6053 l_procure_resource_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6054 l_incurred_by_res_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6055 l_incur_by_resource_name_tbl.extend(l_resource_assignment_id_tbl.last);
6056 l_Incur_by_resource_code_tbl.extend(l_resource_assignment_id_tbl.last);
6057 l_Incur_by_res_class_code_tbl.extend(l_resource_assignment_id_tbl.last);
6058 l_Incur_by_role_id_tbl.extend(l_resource_assignment_id_tbl.last);
6059 l_use_task_schedule_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6060 IF l_planning_start_date_tbl.COUNT <> l_resource_assignment_id_tbl.COUNT THEN
6061 l_planning_start_date_tbl.extend(l_resource_assignment_id_tbl.last-l_planning_start_date_tbl.COUNT);
6062 END IF;
6063 IF l_planning_end_date_tbl.COUNT<> l_resource_assignment_id_tbl.COUNT THEN
6064 l_planning_end_date_tbl.extend(l_resource_assignment_id_tbl.last-l_planning_end_date_tbl.COUNT);
6065 END IF;
6066 IF l_schedule_start_date_tbl.COUNT <> l_resource_assignment_id_tbl.COUNT THEN
6067 l_schedule_start_date_tbl.extend(l_resource_assignment_id_tbl.last-l_schedule_start_date_tbl.COUNT);
6068 END IF;
6069 IF l_schedule_end_date_tbl.COUNT<> l_resource_assignment_id_tbl.COUNT THEN
6070 l_schedule_end_date_tbl.extend(l_resource_assignment_id_tbl.last-l_schedule_end_date_tbl.COUNT);
6071 END IF;
6072 IF l_total_quantity_tbl.COUNT<>l_resource_assignment_id_tbl.COUNT THEN
6073 l_total_quantity_tbl.extend(l_resource_assignment_id_tbl.last-l_total_quantity_tbl.COUNT);
6074 END IF;
6075 IF l_burdened_cost_tbl.COUNT<>l_resource_assignment_id_tbl.COUNT THEN
6076 l_burdened_cost_tbl.extend(l_resource_assignment_id_tbl.last);
6077 END IF;
6078 IF l_total_raw_cost_tbl.COUNT<>l_resource_assignment_id_tbl.COUNT THEN
6079 l_total_raw_cost_tbl.extend(l_resource_assignment_id_tbl.last);
6080 END IF;
6081 --dbms_output.put_line('l_total_quantity_tbl.last '||l_total_quantity_tbl.last||' l_total_quantity_tbl(1) '||l_total_quantity_tbl(1));
6082 l_override_currency_code_tbl.extend(l_resource_assignment_id_tbl.last);
6083
6084 l_trace_stage := 220;
6085 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6086
6087 l_billable_percent_tbl.extend(l_resource_assignment_id_tbl.last);
6088 l_cost_rate_override_tbl.extend(l_resource_assignment_id_tbl.last);
6089 l_burdened_rate_override_tbl.extend(l_resource_assignment_id_tbl.last);
6090 l_sp_fixed_date_tbl.extend(l_resource_assignment_id_tbl.last);
6091 l_named_role_tbl.extend(l_resource_assignment_id_tbl.last);
6092 l_financial_category_name_tbl.extend(l_resource_assignment_id_tbl.last);
6093 l_supplier_name_tbl.extend(l_resource_assignment_id_tbl.last);
6094 l_wbs_element_version_id_tbl.extend(l_resource_assignment_id_tbl.last);
6095 l_project_assignment_id_tbl.extend(l_resource_assignment_id_tbl.last);
6096 l_attribute_category_tbl.extend(l_resource_assignment_id_tbl.last);
6097 l_attribute1_tbl.extend(l_resource_assignment_id_tbl.last);
6098 l_attribute2_tbl.extend(l_resource_assignment_id_tbl.last);
6099 l_attribute3_tbl.extend(l_resource_assignment_id_tbl.last);
6100 l_attribute4_tbl.extend(l_resource_assignment_id_tbl.last);
6101 l_attribute5_tbl.extend(l_resource_assignment_id_tbl.last);
6102 l_attribute6_tbl.extend(l_resource_assignment_id_tbl.last);
6103 l_attribute7_tbl.extend(l_resource_assignment_id_tbl.last);
6104 l_attribute8_tbl.extend(l_resource_assignment_id_tbl.last);
6105 l_attribute9_tbl.extend(l_resource_assignment_id_tbl.last);
6106 l_attribute10_tbl.extend(l_resource_assignment_id_tbl.last);
6107 l_attribute11_tbl.extend(l_resource_assignment_id_tbl.last);
6108 l_attribute12_tbl.extend(l_resource_assignment_id_tbl.last);
6109 l_attribute13_tbl.extend(l_resource_assignment_id_tbl.last);
6110 l_attribute14_tbl.extend(l_resource_assignment_id_tbl.last);
6111 l_attribute15_tbl.extend(l_resource_assignment_id_tbl.last);
6112 l_attribute16_tbl.extend(l_resource_assignment_id_tbl.last);
6113 l_trace_stage := 230;
6114 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6115
6116
6117 l_attribute17_tbl.extend(l_resource_assignment_id_tbl.last);
6118 l_attribute18_tbl.extend(l_resource_assignment_id_tbl.last);
6119 l_attribute19_tbl.extend(l_resource_assignment_id_tbl.last);
6120 l_attribute20_tbl.extend(l_resource_assignment_id_tbl.last);
6121 l_attribute21_tbl.extend(l_resource_assignment_id_tbl.last);
6122 l_attribute22_tbl.extend(l_resource_assignment_id_tbl.last);
6123 l_attribute23_tbl.extend(l_resource_assignment_id_tbl.last);
6124 l_attribute24_tbl.extend(l_resource_assignment_id_tbl.last);
6125 l_attribute25_tbl.extend(l_resource_assignment_id_tbl.last);
6126 l_attribute26_tbl.extend(l_resource_assignment_id_tbl.last);
6127 l_attribute27_tbl.extend(l_resource_assignment_id_tbl.last);
6128 l_attribute28_tbl.extend(l_resource_assignment_id_tbl.last);
6129 l_attribute29_tbl.extend(l_resource_assignment_id_tbl.last);
6130 l_attribute30_tbl.extend(l_resource_assignment_id_tbl.last);
6131 l_bill_rate_override_tbl.extend(l_resource_assignment_id_tbl.last);
6132 l_bill_rate_tbl.extend(l_resource_assignment_id_tbl.last);
6133 l_b_multiplier_tbl.extend(l_resource_assignment_id_tbl.last);
6134 l_raw_cost_rate_tbl.extend(l_resource_assignment_id_tbl.last);
6135 l_revenue_tbl.extend(l_resource_assignment_id_tbl.last);
6136
6137 l_currency_code_tbl.extend(l_resource_assignment_id_tbl.last);
6138
6139 --For Bug 3948128.
6140 l_scheduled_delay.extend(l_resource_assignment_id_tbl.last);
6141 l_trace_stage := 240;
6142 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6143
6144
6145 -- Assiging all the passed tbls to record type . This is done because
6146 -- 1. TA validation API expects a pl/sql table of records
6147 -- 2. BULK update will possible since the values that are not passed will be defaulted to FND_API.G_MISS_XXX
6148
6149
6150 IF l_debug_mode = 'Y' THEN
6151 pa_debug.g_err_stage:='About to loop thru for assigning to rec types';
6152 print_msg(pa_debug.g_err_stage,l_module_name);
6153 END IF;
6154
6155
6156 FOR i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST LOOP
6157
6158
6159 IF l_resource_assignment_id_tbl.EXISTS(i) THEN
6160 l_resource_rec_tbl(i).resource_assignment_id := l_resource_assignment_id_tbl(i);
6161 END IF;
6162
6163 IF p_assignment_description_tbl.EXISTS(i) THEN
6164 l_resource_rec_tbl(i).assignment_description := p_assignment_description_tbl(i);
6165 END IF;
6166 IF p_resource_list_member_id_tbl.EXISTS(i) THEN
6167 l_resource_rec_tbl(i).resource_list_member_id := p_resource_list_member_id_tbl(i);
6168 END IF;
6169 IF p_project_assignment_id_tbl.EXISTS(i) THEN
6170 l_resource_rec_tbl(i).project_assignment_id := p_project_assignment_id_tbl(i);
6171 END IF;
6172 IF p_resource_alias_tbl.EXISTS(i) THEN
6173 l_resource_rec_tbl(i).planning_resource_alias := p_resource_alias_tbl(i);
6174 END IF;
6175 IF p_resource_class_flag_tbl.EXISTS(i) THEN
6176 l_resource_rec_tbl(i).resource_class_flag := p_resource_class_flag_tbl(i);
6177 END IF;
6178 IF p_resource_class_code_tbl.EXISTS(i) THEN
6179 l_resource_rec_tbl(i).resource_class_code := p_resource_class_code_tbl(i);
6180 END IF;
6181 IF p_resource_class_id_tbl.EXISTS(i) THEN
6182 l_resource_rec_tbl(i).resource_class_id := p_resource_class_id_tbl(i);
6183 END IF;
6184 IF p_res_type_code_tbl.EXISTS(i) THEN
6185 l_resource_rec_tbl(i).res_type_code := p_res_type_code_tbl(i);
6186 END IF;
6187 IF p_resource_code_tbl.EXISTS(i) THEN
6188 l_resource_rec_tbl(i).resource_code := p_resource_code_tbl(i);
6189 END IF;
6190 IF p_resource_name.EXISTS(i) THEN
6191 l_resource_rec_tbl(i).resource_name := p_resource_name(i);
6192 END IF;
6193
6194 l_trace_stage := 250;
6195 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6196
6197 IF p_person_id_tbl.EXISTS(i) THEN
6198 l_resource_rec_tbl(i).person_id := p_person_id_tbl(i);
6199 END IF;
6200 IF p_job_id_tbl.EXISTS(i) THEN
6201 l_resource_rec_tbl(i).job_id := p_job_id_tbl(i);
6202 END IF;
6203 IF p_person_type_code.EXISTS(i) THEN
6204 l_resource_rec_tbl(i).person_type_code := p_person_type_code(i);
6205 END IF;
6206 IF p_bom_resource_id_tbl.EXISTS(i) THEN
6207 l_resource_rec_tbl(i).bom_resource_id := p_bom_resource_id_tbl(i);
6208 END IF;
6209 IF p_non_labor_resource_tbl.EXISTS(i) THEN
6210 l_resource_rec_tbl(i).non_labor_resource := p_non_labor_resource_tbl(i);
6211 END IF;
6212 IF p_inventory_item_id_tbl.EXISTS(i) THEN
6213 l_resource_rec_tbl(i).inventory_item_id := p_inventory_item_id_tbl(i);
6214 END IF;
6215 IF p_item_category_id_tbl.EXISTS(i) THEN
6216 l_resource_rec_tbl(i).item_category_id := p_item_category_id_tbl(i);
6217 END IF;
6218 IF p_project_role_id_tbl.EXISTS(i) THEN
6219 l_resource_rec_tbl(i).project_role_id := p_project_role_id_tbl(i);
6220 END IF;
6221 IF p_project_role_name_tbl.EXISTS(i) THEN
6222 l_resource_rec_tbl(i).project_role_name := p_project_role_name_tbl(i);
6223 END IF;
6224 IF p_organization_id_tbl.EXISTS(i) THEN
6225 l_resource_rec_tbl(i).organization_id := p_organization_id_tbl(i);
6226 END IF;
6227 l_trace_stage := 251;
6228 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6229
6230
6231 IF p_organization_name_tbl.EXISTS(i) THEN
6232 l_resource_rec_tbl(i).organization_name := p_organization_name_tbl(i);
6233 END IF;
6234 IF p_fc_res_type_code_tbl.EXISTS(i) THEN
6235 l_resource_rec_tbl(i).fc_res_type_code := p_fc_res_type_code_tbl(i);
6236 END IF;
6237
6238 l_trace_stage := 2511;
6239 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6240
6241 IF p_financial_category_code_tbl.EXISTS(i) THEN
6242 l_resource_rec_tbl(i).financial_category_code := p_financial_category_code_tbl(i);
6243 END IF;
6244
6245 l_trace_stage := 2512;
6246 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6247
6248 IF p_expenditure_type_tbl.EXISTS(i) THEN
6249 l_resource_rec_tbl(i).expenditure_type := p_expenditure_type_tbl(i);
6250 END IF;
6251 l_trace_stage := 2513;
6252 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6253
6254 IF p_expenditure_category_tbl.EXISTS(i) THEN
6255 l_resource_rec_tbl(i).expenditure_category := p_expenditure_category_tbl(i);
6256 END IF;
6257 l_trace_stage := 2514;
6258 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6259
6260 IF p_event_type_tbl.EXISTS(i) THEN
6261 l_resource_rec_tbl(i).event_type := p_event_type_tbl(i);
6262 END IF;
6263 l_trace_stage := 2515;
6264 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6265
6266 IF p_revenue_category_code_tbl.EXISTS(i) THEN
6267 l_resource_rec_tbl(i).revenue_category_code := p_revenue_category_code_tbl(i);
6268 END IF;
6269 l_trace_stage := 252;
6270 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6271
6272 IF p_supplier_id_tbl.EXISTS(i) THEN
6273 l_resource_rec_tbl(i).supplier_id := p_supplier_id_tbl(i);
6274 END IF;
6275 IF p_unit_of_measure_tbl.EXISTS(i) THEN
6276 l_resource_rec_tbl(i).unit_of_measure := p_unit_of_measure_tbl(i);
6277 END IF;
6278 IF p_spread_curve_id_tbl.EXISTS(i) THEN
6279 l_resource_rec_tbl(i).spread_curve_id := p_spread_curve_id_tbl(i);
6280 END IF;
6281 IF p_etc_method_code_tbl.EXISTS(i) THEN
6282 l_resource_rec_tbl(i).etc_method_code := p_etc_method_code_tbl(i);
6283 END IF;
6284 IF p_mfc_cost_type_id_tbl.EXISTS(i) THEN
6285 l_resource_rec_tbl(i).mfc_cost_type_id := p_mfc_cost_type_id_tbl(i);
6286 END IF;
6287 l_trace_stage := 253;
6288 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6289
6290
6291 IF p_procure_resource_flag_tbl.EXISTS(i) THEN
6292 l_resource_rec_tbl(i).procure_resource_flag := p_procure_resource_flag_tbl(i);
6293 END IF;
6294 IF p_incurred_by_res_flag_tbl.EXISTS(i) THEN
6295 l_resource_rec_tbl(i).incurred_by_res_flag := p_incurred_by_res_flag_tbl(i);
6296 END IF;
6297 IF p_incur_by_resource_code_tbl.EXISTS(i) THEN
6298 l_resource_rec_tbl(i).incur_by_resource_code := p_incur_by_resource_code_tbl(i);
6299 END IF;
6300 IF p_incur_by_resource_name_tbl.EXISTS(i) THEN
6301 l_resource_rec_tbl(i).incur_by_resource_name := p_incur_by_resource_name_tbl(i);
6302 END IF;
6303 IF p_Incur_by_res_class_code_tbl.EXISTS(i) THEN
6304 l_resource_rec_tbl(i).Incur_by_res_class_code := p_Incur_by_res_class_code_tbl(i);
6305 END IF;
6306 IF p_Incur_by_role_id_tbl.EXISTS(i) THEN
6307 l_resource_rec_tbl(i).Incur_by_role_id := p_Incur_by_role_id_tbl(i);
6308 END IF;
6309 IF p_use_task_schedule_flag_tbl.EXISTS(i) THEN
6310 l_resource_rec_tbl(i).use_task_schedule_flag := p_use_task_schedule_flag_tbl(i);
6311 END IF;
6312 IF l_planning_start_date_tbl.EXISTS(i) THEN
6313 l_resource_rec_tbl(i).planning_start_date := l_planning_start_date_tbl(i);
6314 END IF;
6315 IF l_planning_end_date_tbl.EXISTS(i) THEN
6316 l_resource_rec_tbl(i).planning_end_date := l_planning_end_date_tbl(i);
6317 END IF;
6318 IF l_schedule_start_date_tbl.EXISTS(i) THEN
6319 l_resource_rec_tbl(i).schedule_start_date := l_schedule_start_date_tbl(i);
6320 END IF;
6321 IF l_schedule_end_date_tbl.EXISTS(i) THEN
6322 l_resource_rec_tbl(i).schedule_end_date := l_schedule_end_date_tbl(i);
6323 END IF;
6324
6325 l_trace_stage := 254;
6326 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6327
6328 IF l_total_quantity_tbl.EXISTS(i) THEN
6329 l_resource_rec_tbl(i).total_quantity := l_total_quantity_tbl(i);
6330 END IF;
6331 IF p_txn_currency_override_tbl.EXISTS(i) THEN
6332 l_resource_rec_tbl(i).override_currency_code := p_txn_currency_override_tbl(i);
6333 END IF;
6334 IF p_billable_percent_tbl.EXISTS(i) THEN
6335 l_resource_rec_tbl(i).billable_percent := p_billable_percent_tbl(i);
6336 END IF;
6337 IF p_cost_rate_override_tbl.EXISTS(i) THEN
6338 l_resource_rec_tbl(i).cost_rate_override := p_cost_rate_override_tbl(i);
6339 END IF;
6340 IF p_burdened_rate_override_tbl.EXISTS(i) THEN
6341 l_resource_rec_tbl(i).burdened_rate_override := p_burdened_rate_override_tbl(i);
6342 END IF;
6343 -- 3817356 Replacing p_xxxx_date_tbls by l_in_xxxx_date_tbls
6344 IF l_in_sp_fixed_date_tbl.EXISTS(i) THEN
6345 l_resource_rec_tbl(i).sp_fixed_date := l_in_sp_fixed_date_tbl(i);
6346 END IF;
6347 IF p_financial_category_name_tbl.EXISTS(i) THEN
6348 l_resource_rec_tbl(i).financial_category_name := p_financial_category_name_tbl(i);
6349 END IF;
6350 IF p_named_role_tbl.EXISTS(i) THEN
6351 l_resource_rec_tbl(i).named_role := p_named_role_tbl(i);
6352 END IF;
6353 IF p_supplier_name_tbl.EXISTS(i) THEN
6354 l_resource_rec_tbl(i).supplier_name := p_supplier_name_tbl(i);
6355 END IF;
6356 l_trace_stage := 260;
6357 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6358
6359
6360 --Select the element version id for each ra id
6361 SELECT wbs_element_version_id
6362 INTO l_resource_rec_tbl(i).wbs_element_version_id
6363 FROM pa_resource_assignments
6364 WHERE resource_assignment_id = l_resource_assignment_id_tbl(i);
6365
6366 IF p_attribute_category_tbl.EXISTS(i) THEN
6367 l_resource_rec_tbl(i).attribute_category := p_attribute_category_tbl(i);
6368 END IF;
6369 IF p_attribute1_tbl.EXISTS(i) THEN
6370 l_resource_rec_tbl(i).attribute1 := p_attribute1_tbl(i);
6371 END IF;
6372 IF p_attribute2_tbl.EXISTS(i) THEN
6373 l_resource_rec_tbl(i).attribute2 := p_attribute2_tbl(i);
6374 END IF;
6375 IF p_attribute3_tbl.EXISTS(i) THEN
6376 l_resource_rec_tbl(i).attribute3 := p_attribute3_tbl(i);
6377 END IF;
6378 IF p_attribute4_tbl.EXISTS(i) THEN
6379 l_resource_rec_tbl(i).attribute4 := p_attribute4_tbl(i);
6380 END IF;
6381 IF p_attribute5_tbl.EXISTS(i) THEN
6382 l_resource_rec_tbl(i).attribute5 := p_attribute5_tbl(i);
6383 END IF;
6384 IF p_attribute6_tbl.EXISTS(i) THEN
6385 l_resource_rec_tbl(i).attribute6 := p_attribute6_tbl(i);
6386 END IF;
6387 IF p_attribute7_tbl.EXISTS(i) THEN
6388 l_resource_rec_tbl(i).attribute7 := p_attribute7_tbl(i);
6389 END IF;
6390
6391 IF p_attribute8_tbl.EXISTS(i) THEN
6392 l_resource_rec_tbl(i).attribute8 := p_attribute8_tbl(i);
6393 END IF;
6394 IF p_attribute9_tbl.EXISTS(i) THEN
6395 l_resource_rec_tbl(i).attribute9 := p_attribute9_tbl(i);
6396 END IF;
6397 IF p_attribute10_tbl.EXISTS(i) THEN
6398 l_resource_rec_tbl(i).attribute10 := p_attribute10_tbl(i);
6399 END IF;
6400 IF p_attribute11_tbl.EXISTS(i) THEN
6401 l_resource_rec_tbl(i).attribute11 := p_attribute11_tbl(i);
6402 END IF;
6403 IF p_attribute12_tbl.EXISTS(i) THEN
6404 l_resource_rec_tbl(i).attribute12 := p_attribute12_tbl(i);
6405 END IF;
6406 IF p_attribute13_tbl.EXISTS(i) THEN
6407 l_resource_rec_tbl(i).attribute13 := p_attribute13_tbl(i);
6408 END IF;
6409 IF p_attribute14_tbl.EXISTS(i) THEN
6410 l_resource_rec_tbl(i).attribute14 := p_attribute14_tbl(i);
6411 END IF;
6412 IF p_attribute15_tbl.EXISTS(i) THEN
6413 l_resource_rec_tbl(i).attribute15 := p_attribute15_tbl(i);
6414 END IF;
6415 IF p_attribute16_tbl.EXISTS(i) THEN
6416 l_resource_rec_tbl(i).attribute16 := p_attribute16_tbl(i);
6417 END IF;
6418 IF p_attribute17_tbl.EXISTS(i) THEN
6419 l_resource_rec_tbl(i).attribute17 := p_attribute17_tbl(i);
6420 END IF;
6421 IF p_attribute18_tbl.EXISTS(i) THEN
6422 l_resource_rec_tbl(i).attribute18 := p_attribute18_tbl(i);
6423 END IF;
6424 IF p_attribute19_tbl.EXISTS(i) THEN
6425 l_resource_rec_tbl(i).attribute19 := p_attribute19_tbl(i);
6426 END IF;
6427 IF p_attribute20_tbl.EXISTS(i) THEN
6428 l_resource_rec_tbl(i).attribute20 := p_attribute20_tbl(i);
6429 END IF;
6430 IF p_attribute21_tbl.EXISTS(i) THEN
6431 l_resource_rec_tbl(i).attribute21 := p_attribute21_tbl(i);
6432 END IF;
6433 IF p_attribute22_tbl.EXISTS(i) THEN
6434 l_resource_rec_tbl(i).attribute22 := p_attribute22_tbl(i);
6435 END IF;
6436 IF p_attribute23_tbl.EXISTS(i) THEN
6437 l_resource_rec_tbl(i).attribute23 := p_attribute23_tbl(i);
6438 END IF;
6439 IF p_attribute24_tbl.EXISTS(i) THEN
6440 l_resource_rec_tbl(i).attribute24 := p_attribute24_tbl(i);
6441 END IF;
6442 IF p_attribute25_tbl.EXISTS(i) THEN
6443 l_resource_rec_tbl(i).attribute25 := p_attribute25_tbl(i);
6444 END IF;
6445 IF p_attribute26_tbl.EXISTS(i) THEN
6446 l_resource_rec_tbl(i).attribute26 := p_attribute26_tbl(i);
6447 END IF;
6448 IF p_attribute27_tbl.EXISTS(i) THEN
6449 l_resource_rec_tbl(i).attribute27 := p_attribute27_tbl(i);
6450 END IF;
6451 IF p_attribute28_tbl.EXISTS(i) THEN
6452 l_resource_rec_tbl(i).attribute28 := p_attribute28_tbl(i);
6453 END IF;
6454 IF p_attribute29_tbl.EXISTS(i) THEN
6455 l_resource_rec_tbl(i).attribute29 := p_attribute29_tbl(i);
6456 END IF;
6457 IF p_attribute30_tbl.EXISTS(i) THEN
6458 l_resource_rec_tbl(i).attribute30 := p_attribute30_tbl(i);
6459 END IF;
6460
6461 --For bug 3948128
6462 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK AND p_scheduled_delay.EXISTS(i) THEN
6463 l_resource_rec_tbl(i).scheduled_delay := p_scheduled_delay(i);
6464 END IF;
6465 END LOOP;
6466
6467 l_trace_stage := 2500;
6468 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6469
6470 --dbms_output.put_line('3');
6471 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
6472 /*-------------------------------------------------
6473 Calling Task validation API
6474 -------------------------------------------------*/
6475 IF l_debug_mode = 'Y' THEN
6476 pa_debug.g_err_stage:='Calling API pa_task_assignment_utils.Validate_Update_Assignment';
6477 pa_debug.write(l_module_name,pa_debug.g_err_stage,
6478 l_debug_level3);
6479 END IF;
6480
6481 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: before calling validate_update_assignment');
6482
6483 --dbms_output.put_line(' l_resource_rec_tbl(i).cost_rate_override is '|| l_resource_rec_tbl(1).cost_rate_override);
6484 PA_TASK_ASSIGNMENT_UTILS.Validate_Update_Assignment(
6485 p_calling_context => p_calling_context, -- Added for Bug 6856934
6486 p_task_assignment_tbl => l_resource_rec_tbl,
6487 x_return_status => l_return_status);
6488 --dbms_output.put_line(' l_resource_rec_tbl(i).cost_rate_override is '|| l_resource_rec_tbl(1).cost_rate_override);
6489
6490 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: after calling validate_update_assignment');
6491
6492 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6493 IF l_debug_mode = 'Y' THEN
6494 pa_debug.g_err_stage:='Called API PA_TASK_ASSIGNMENT_UTILS.Validate_Update_Assignment returned error';
6495 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6496 END IF;
6497 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6498 END IF;
6499
6500 --If the rec tbl returned by validate API does not contain records then return
6501 IF l_resource_rec_tbl.COUNT=0 THEN
6502 IF l_debug_mode = 'Y' THEN
6503 pa_debug.g_err_stage:='Validate API returned 0 records';
6504 print_msg(pa_debug.g_err_stage,l_module_name);
6505 pa_debug.reset_curr_function;
6506 END IF;
6507 RETURN;
6508 END IF;
6509
6510
6511
6512 END IF;
6513
6514
6515 /*------------------------------------------------------------------------
6516 -- Repopulating all the resource data tables from the table l_resource_rec_tbl
6517 -- Now all the parameters not passed will be initialized to FND_API.G_MISS_XXX
6518 ------------------------------------------------------------------------ */
6519 FOR i IN l_resource_rec_tbl.FIRST .. l_resource_rec_tbl.LAST LOOP
6520
6521 IF l_resource_rec_tbl.EXISTS(i) THEN
6522 --dbms_output.put_line('E1');
6523
6524 l_resource_assignment_id_tbl(i) := l_resource_rec_tbl(i).resource_assignment_id;
6525 l_resource_list_member_id_tbl(i):= l_resource_rec_tbl(i).resource_list_member_id;
6526 l_assignment_description_tbl(i) := l_resource_rec_tbl(i).assignment_description;
6527 l_planning_resource_alias_tbl(i):= l_resource_rec_tbl(i).planning_resource_alias;
6528 l_resource_class_flag_tbl(i) := l_resource_rec_tbl(i).resource_class_flag;
6529 l_resource_class_code_tbl(i) := l_resource_rec_tbl(i).resource_class_code;
6530 l_resource_class_id_tbl(i) := l_resource_rec_tbl(i).resource_class_id;
6531 -- Added for bug 3698458
6532 l_rate_exp_org_id_tbl(i) := l_resource_rec_tbl(i).org_id;
6533 l_rate_exp_type_tbl(i) := l_resource_rec_tbl(i).rate_expenditure_type;
6534 l_rate_func_curr_code_tbl(i) := l_resource_rec_tbl(i).rate_func_curr_code;
6535 l_incur_by_res_type_tbl(i) := l_resource_rec_tbl(i).incur_by_res_type;
6536 l_incurred_by_res_flag_tbl(i) := l_resource_rec_tbl(i).incurred_by_res_flag;
6537 l_res_type_code_tbl(i) := l_resource_rec_tbl(i).res_type_code;
6538
6539 IF l_incurred_by_res_flag_tbl.EXISTS(i) AND nvl(l_incurred_by_res_flag_tbl(i),'N') = 'Y' THEN
6540 IF l_incur_by_res_type_tbl.EXISTS(i) THEN
6541 l_res_type_code_tbl(i) := l_incur_by_res_type_tbl(i);
6542 ELSE
6543 l_res_type_code_tbl(i) := NULL;
6544 END IF;
6545 END IF;
6546
6547 -- The following if-else clause has been added for bug 3678814
6548 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
6549 l_rate_based_flag_tbl(i) := l_resource_rec_tbl(i).rate_based_flag;
6550 ELSE
6551 l_rate_based_flag_tbl(i) := null;
6552 END If;
6553
6554 l_resource_code_tbl(i) := l_resource_rec_tbl(i).resource_code;
6555 l_person_id_tbl(i) := l_resource_rec_tbl(i).person_id;
6556 l_job_id_tbl(i) := l_resource_rec_tbl(i).job_id;
6557 l_person_type_code_tbl(i) := l_resource_rec_tbl(i).person_type_code;
6558 l_bom_resource_id_tbl(i) := l_resource_rec_tbl(i).bom_resource_id;
6559 l_non_labor_resource_tbl(i) := l_resource_rec_tbl(i).non_labor_resource;
6560 l_inventory_item_id_tbl(i) := l_resource_rec_tbl(i).inventory_item_id;
6561
6562 l_item_category_id_tbl(i) := l_resource_rec_tbl(i).item_category_id;
6563 l_project_role_id_tbl(i) := l_resource_rec_tbl(i).project_role_id;
6564 l_project_role_name_tbl(i) := l_resource_rec_tbl(i).project_role_name;
6565 l_organization_id_tbl(i) := l_resource_rec_tbl(i).organization_id;
6566 l_organization_name_tbl(i) := l_resource_rec_tbl(i).organization_name;
6567 l_fc_res_type_code_tbl(i) := l_resource_rec_tbl(i).fc_res_type_code;
6568 l_financial_category_code_tbl(i):= l_resource_rec_tbl(i).financial_category_code;
6569 l_expenditure_type_tbl(i) := l_resource_rec_tbl(i).expenditure_type;
6570 l_expenditure_category_tbl(i) := l_resource_rec_tbl(i).expenditure_category;
6571 l_event_type_tbl(i) := l_resource_rec_tbl(i).event_type;
6572 l_revenue_category_code_tbl(i) := l_resource_rec_tbl(i).revenue_category_code;
6573 l_supplier_id_tbl(i) := l_resource_rec_tbl(i).supplier_id;
6574 l_unit_of_measure_tbl(i) := l_resource_rec_tbl(i).unit_of_measure;
6575 l_spread_curve_id_tbl(i) := l_resource_rec_tbl(i).spread_curve_id;
6576 l_etc_method_code_tbl(i) := l_resource_rec_tbl(i).etc_method_code;
6577 l_mfc_cost_type_id_tbl(i) := l_resource_rec_tbl(i).mfc_cost_type_id;
6578 l_procure_resource_flag_tbl(i) := l_resource_rec_tbl(i).procure_resource_flag;
6579 l_incur_by_resource_code_tbl(i) := l_resource_rec_tbl(i).incur_by_resource_code;
6580 l_incur_by_resource_name_tbl(i) := l_resource_rec_tbl(i).incur_by_resource_name;
6581 l_Incur_by_res_class_code_tbl(i):= l_resource_rec_tbl(i).Incur_by_res_class_code;
6582 l_Incur_by_role_id_tbl(i) := l_resource_rec_tbl(i).Incur_by_role_id;
6583 l_use_task_schedule_flag_tbl(i) := l_resource_rec_tbl(i).use_task_schedule_flag;
6584 l_planning_start_date_tbl(i) := l_resource_rec_tbl(i).planning_start_date;
6585 l_planning_end_date_tbl(i) := l_resource_rec_tbl(i).planning_end_date;
6586 l_schedule_start_date_tbl(i) := l_resource_rec_tbl(i).schedule_start_date;
6587 l_schedule_end_date_tbl(i) := l_resource_rec_tbl(i).schedule_end_date;
6588 l_total_quantity_tbl(i) := l_resource_rec_tbl(i).total_quantity;
6589 l_override_currency_code_tbl(i) := l_resource_rec_tbl(i).override_currency_code;
6590 l_billable_percent_tbl(i) := l_resource_rec_tbl(i).billable_percent;
6591 l_cost_rate_override_tbl(i) := l_resource_rec_tbl(i).cost_rate_override;
6592 l_burdened_rate_override_tbl(i) := l_resource_rec_tbl(i).burdened_rate_override;
6593 l_sp_fixed_date_tbl(i) := l_resource_rec_tbl(i).sp_fixed_date;
6594 l_named_role_tbl(i) := l_resource_rec_tbl(i).named_role;
6595 l_financial_category_name_tbl(i):= l_resource_rec_tbl(i).financial_category_name;
6596 l_supplier_name_tbl(i) := l_resource_rec_tbl(i).supplier_name;
6597 l_wbs_element_version_id_tbl(i) := l_resource_rec_tbl(i).wbs_element_version_id;
6598 l_project_assignment_id_tbl(i) := l_resource_rec_tbl(i).project_assignment_id;
6599 l_attribute_category_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY;
6600 l_attribute1_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE1;
6601 l_attribute2_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE2;
6602 l_attribute3_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE3;
6603 l_attribute4_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE4;
6604 l_attribute5_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE5;
6605 l_attribute6_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE6;
6606
6607 l_attribute7_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE7;
6608 l_attribute8_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE8;
6609 l_attribute9_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE9;
6610 l_attribute10_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE10;
6611 l_attribute11_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE11;
6612 l_attribute12_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE12;
6613 l_attribute13_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE13;
6614 l_attribute14_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE14;
6615 l_attribute15_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE15;
6616 l_attribute16_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE16;
6617 l_attribute17_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE17;
6618 l_attribute18_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE18;
6619 l_attribute19_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE19;
6620 l_attribute20_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE20;
6621 l_attribute21_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE21;
6622 l_attribute22_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE22;
6623
6624 l_attribute23_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE23;
6625 l_attribute24_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE24;
6626 l_attribute25_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE25;
6627 l_attribute26_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE26;
6628 l_attribute27_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE27;
6629 l_attribute28_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE28;
6630 l_attribute29_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE29;
6631 l_attribute30_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE30;
6632
6633 --For bug 3948128
6634 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
6635 l_scheduled_delay(i) := l_resource_rec_tbl(i).scheduled_delay;
6636 END IF;
6637 END IF;
6638 /* Commenting out this code for check for spread curve date to be null
6639 since this check will be done in Process_res_chg_Derv_calc_prms 3762278
6640 -- Added for Bug 3607061 - Starts
6641 -- Please not that FIXED DATE SPREAD CURVE ID is SEEDED as 6, so we are able to hard code it below
6642 IF l_debug_mode = 'Y' THEN
6643 pa_debug.g_err_stage:='Deriving SP Fixed Date';
6644 print_msg(pa_debug.g_err_stage,l_module_name);
6645 END IF;
6646 IF l_spread_curve_id_tbl(i) = l_fixed_date_sp_id THEN
6647 IF l_debug_mode = 'Y' THEN
6648 pa_debug.g_err_stage:='Spread Curve Id is of FIXED_DATE';
6649 print_msg(pa_debug.g_err_stage,l_module_name);
6650 END IF;
6651 IF l_sp_fixed_date_tbl(i) = FND_API.G_MISS_DATE THEN
6652 IF l_debug_mode = 'Y' THEN
6653 pa_debug.g_err_stage:='Error - cannot nullify sp_fixed_date for Fixed Date Spread curve';
6654 print_msg(pa_debug.g_err_stage,l_module_name);
6655 END IF;
6656 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6657 p_msg_name => 'PA_FP_SP_FIXED_DATE_NULL');
6658 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6659 END IF;
6660 END IF;
6661 -- Added for Bug 3607061 - Ends
6662 */
6663 --dbms_output.put_line('E2');
6664
6665 END LOOP;
6666
6667 --dbms_output.put_line('l_total_quantity_tbl.last '||l_total_quantity_tbl.last||' l_total_quantity_tbl(1) '||l_total_quantity_tbl(1));
6668
6669 --Get the project currency so that it can be used in preparing pl/sql tables for calculate api
6670 pa_budget_utils.Get_Project_Currency_Info
6671 ( p_project_id => l_project_id
6672 , x_projfunc_currency_code => l_projfunc_currency_code_out
6673 , x_project_currency_code => l_existing_curr_code
6674 , x_txn_currency_code => l_projfunc_currency_code
6675 , x_msg_count => x_msg_count
6676 , x_msg_data => x_msg_data
6677 , x_return_status => x_return_status);
6678 --dbms_output.put_line('4');
6679 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6680 IF l_debug_mode = 'Y' THEN
6681 pa_debug.g_err_stage:='Cpa_budget_utils.Get_Project_Currency_Info returned error';
6682 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6683 END IF;
6684 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6685 END IF;
6686
6687 --Derive the tables that are required for Calculate API
6688 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR p_context = PA_FP_CONSTANTS_PKG.G_PLAN_CLASS_FORECAST THEN
6689
6690 IF l_debug_mode = 'Y' THEN
6691 pa_debug.g_err_stage:='Preparing the pl/sql tables for calling calc api for BF';
6692 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6693 END IF;
6694
6695
6696 l_override_currency_code_tbl := p_txn_currency_override_tbl;
6697 l_bill_rate_override_tbl := p_bill_rate_override_tbl;
6698 l_bill_rate_tbl := p_bill_rate_tbl;
6699 l_burdened_rate_override_tbl := p_burdened_rate_override_tbl;
6700 l_b_multiplier_tbl := p_burdened_rate_tbl;
6701 l_cost_rate_override_tbl := p_cost_rate_override_tbl;
6702 l_raw_cost_rate_tbl := p_cost_rate_tbl;
6703 l_revenue_tbl := p_revenue_tbl;
6704 l_burdened_cost_tbl := p_burdened_cost_tbl;
6705 l_total_raw_cost_tbl := p_raw_cost_tbl;
6706 --Added by Xin. Fix Bug 3430136
6707 --Feb-09-2004 Doosan iteration 1
6708 l_currency_code_tbl := p_currency_code_tbl;
6709
6710 l_override_currency_code_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_override_currency_code_tbl.COUNT );
6711 l_bill_rate_override_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_bill_rate_override_tbl.COUNT);
6712 l_bill_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_bill_rate_tbl.COUNT);
6713 l_burdened_rate_override_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_burdened_rate_override_tbl.COUNT);
6714 l_b_multiplier_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_b_multiplier_tbl.COUNT);
6715 --dbms_output.put_line('l_cost_rate_override_tbl count is '||l_cost_rate_override_tbl.count);
6716 l_cost_rate_override_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_cost_rate_override_tbl.COUNT);
6717 --dbms_output.put_line('A l_cost_rate_override_tbl count is '||l_cost_rate_override_tbl.count);
6718 l_raw_cost_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_raw_cost_rate_tbl.COUNT);
6719 l_revenue_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_revenue_tbl.COUNT);
6720 l_burdened_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_burdened_cost_tbl.COUNT);
6721 l_total_raw_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_total_raw_cost_tbl.COUNT);
6722 l_currency_code_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_currency_code_tbl.COUNT);
6723
6724
6725
6726 -- In the context of Task Assignment and Workplan, the block below will calculate the additional quantity
6727 -- i.e. the difference between the existing quantity and the quantity passed.
6728 ELSIF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
6729
6730 IF l_debug_mode = 'Y' THEN
6731 pa_debug.g_err_stage:='About to bulk collect into pl/sql tables req for calc api '||l_override_currency_code_tbl.last;
6732 print_msg(pa_debug.g_err_stage,l_module_name);
6733 END IF;
6734
6735 /* Preparing PLSql Tables for Rates for Calling Calculate API*/
6736 -- Bug 3760166
6737 l_bill_rate_tbl := p_bill_rate_tbl;
6738 l_b_multiplier_tbl := p_burdened_rate_tbl;
6739 l_raw_cost_rate_tbl := p_cost_rate_tbl;
6740
6741 l_bill_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_bill_rate_tbl.COUNT);
6742 l_b_multiplier_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_b_multiplier_tbl.COUNT);
6743 l_raw_cost_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_raw_cost_rate_tbl.COUNT);
6744
6745 /** added for progress upload **/
6746 -- Bug 3807763. For Workplan Context, check_and_create_task_rec info has already been called.
6747 -- This takes care of populating l_burdened_cost_tbl and l_total_raw_cost_tbl as per the I/P Data.
6748 If ((p_apply_progress_flag = 'Y' AND p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK) OR
6749 p_upd_cost_amts_too_for_ta_flg = 'Y' ) THEN --Added for bug#4538286.
6750 --l_revenue_tbl := p_revenue_tbl;
6751 l_burdened_cost_tbl := p_burdened_cost_tbl;
6752 l_total_raw_cost_tbl := p_raw_cost_tbl;
6753
6754 l_total_raw_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_total_raw_cost_tbl.COUNT);
6755 l_burdened_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_burdened_cost_tbl.COUNT);
6756 End If;
6757
6758 --The below LOOP will be used to derive the txn currency code for each task assignment
6759 FOR i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST LOOP
6760
6761 --Bug 6397725. From FP M RUP3 onwards check should be made against pa_resource_asgn_curr
6762 --table
6763 /*
6764 SELECT NVL(pbl.txn_currency_code,l_existing_curr_code)
6765 INTO l_currency_code_tbl(i)
6766 FROM pa_resource_assignments b,
6767 (SELECT pbl.txn_currency_code,
6768 pra.resource_assignment_id
6769 FROM pa_budget_lines pbl,
6770 pa_resource_assignments pra
6771 WHERE pbl.resource_assignment_id(+)=pra.resource_assignment_id
6772 AND pra.resource_assignment_id=l_resource_assignment_id_tbl(i)
6773 AND ROWNUM=1) pbl
6774 WHERE b.resource_assignment_id=l_resource_assignment_id_tbl(i);*/
6775
6776 SELECT NVL(rac.txn_currency_code,l_existing_curr_code)
6777 INTO l_currency_code_tbl(i)
6778 FROM pa_resource_asgn_curr rac,
6779 pa_resource_assignments pra
6780 WHERE rac.resource_assignment_id(+)=pra.resource_assignment_id
6781 AND pra.resource_assignment_id=l_resource_assignment_id_tbl(i);
6782
6783 END LOOP;
6784 /* Note that l_override_currency_code_tbl would be null in case of
6785 * WP which is correct. This can never be edited in WP flow. For TA,
6786 * l_override_curr_code_tbl would be having override curr code that
6787 * got passed from the UI and ultimately returned back by the
6788 * validate TA api */
6789
6790 IF l_debug_mode = 'Y' THEN
6791 pa_debug.g_err_stage:='Done with preparing the tables';
6792 print_msg(pa_debug.g_err_stage,l_module_name);
6793 END IF;
6794
6795 END IF;
6796
6797 /* Calling the api Derive_Parameters_For_Calc_Api
6798 */
6799 IF l_debug_mode = 'Y' THEN
6800 pa_debug.g_err_stage:='Calling API Derive_Parameters_For_Calc_Api';
6801 print_msg(pa_debug.g_err_stage,l_module_name);
6802 END IF;
6803 --dbms_output.put_line('l_b_multiplier_tbl cnt is '||l_burdened_rate_override_tbl.count);
6804 --dbms_output.put_line('5');
6805 Process_res_chg_Derv_calc_prms
6806 (
6807 p_context => p_context
6808 ,p_calling_context => p_calling_context -- Added for Bug 6856934
6809 ,p_budget_version_id => l_budget_version_id
6810 ,p_resource_assignment_id_tbl => l_resource_assignment_id_tbl
6811 ,p_resource_list_member_id_tbl => l_resource_list_member_id_tbl
6812 ,p_planning_start_date_tbl => l_planning_start_date_tbl
6813 ,p_planning_end_date_tbl => l_planning_end_date_tbl
6814 ,p_spread_curve_id_tbl => l_spread_curve_id_tbl
6815 ,p_sp_fixed_date_tbl => l_sp_fixed_date_tbl
6816 ,p_txn_currency_code_tbl => l_currency_code_tbl
6817 ,p_inventory_item_id_tbl => l_inventory_item_id_tbl
6818 ,p_expenditure_type_tbl => l_expenditure_type_tbl
6819 ,p_person_id_tbl => l_person_id_tbl
6820 ,p_job_id_tbl => l_job_id_tbl
6821 ,p_organization_id_tbl => l_organization_id_tbl
6822 ,p_event_type_tbl => l_event_type_tbl
6823 ,p_expenditure_category_tbl => l_expenditure_category_tbl
6824 ,p_revenue_category_code_tbl => l_revenue_category_code_tbl
6825 ,p_item_category_id_tbl => l_item_category_id_tbl
6826 ,p_bom_resource_id_tbl => l_bom_resource_id_tbl
6827 ,p_project_role_id_tbl => l_project_role_id_tbl
6828 ,p_person_type_code_tbl => l_person_type_code_tbl
6829 ,p_supplier_id_tbl => l_supplier_id_tbl
6830 ,p_named_role_tbl => l_named_role_tbl
6831 ,p_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
6832 ,p_fixed_date_sp_id => l_fixed_date_sp_id
6833 ,px_total_qty_tbl => l_total_quantity_tbl
6834 ,px_total_raw_cost_tbl => l_total_raw_cost_tbl
6835 ,px_total_burdened_cost_tbl => l_burdened_cost_tbl
6836 ,px_total_revenue_tbl => l_revenue_tbl
6837 ,px_raw_cost_rate_tbl => l_raw_cost_rate_tbl
6838 ,px_raw_cost_override_rate_tbl => l_cost_rate_override_tbl
6839 ,px_b_cost_rate_tbl => l_b_multiplier_tbl
6840 ,px_b_cost_rate_override_tbl => l_burdened_rate_override_tbl
6841 ,px_bill_rate_tbl => l_bill_rate_tbl
6842 ,px_bill_rate_override_tbl => l_bill_rate_override_tbl
6843 ,x_rbs_element_id_tbl => l_rbs_element_id_tbl
6844 ,x_txn_accum_header_id_tbl => l_txn_accum_header_id_tbl
6845 ,x_mfc_cost_type_id_old_tbl => l_mfc_cost_type_id_old_tbl
6846 ,x_mfc_cost_type_id_new_tbl => l_mfc_cost_type_id_new_tbl
6847 ,x_spread_curve_id_old_tbl => l_spread_curve_id_old_tbl
6848 ,x_spread_curve_id_new_tbl => l_spread_curve_id_new_tbl
6849 ,x_sp_fixed_date_old_tbl => l_sp_fixed_date_old_tbl
6850 ,x_sp_fixed_date_new_tbl => l_sp_fixed_date_new_tbl
6851 ,x_plan_start_date_old_tbl => l_plan_start_date_old_tbl
6852 ,x_plan_start_date_new_tbl => l_plan_start_date_new_tbl
6853 ,x_plan_end_date_old_tbl => l_plan_end_date_old_tbl
6854 ,x_plan_end_date_new_tbl => l_plan_end_date_new_tbl
6855 ,x_rlm_id_change_flag_tbl => l_rlm_id_change_flag_tbl
6856 ,x_return_status => x_return_status
6857 ,x_msg_data => x_msg_data
6858 ,x_msg_count => x_msg_count );
6859
6860 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6861 IF l_debug_mode = 'Y' THEN
6862 pa_debug.g_err_stage:='Derive_Parameters_For_Calc_Api returned error';
6863 print_msg(pa_debug.g_err_stage,l_module_name);
6864 END IF;
6865 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6866 END IF;
6867
6868 --The Sp Fixed Date will be defaulted in Process_res_chg_Derv_calc_prms to planning start date if not passed
6869 --for a resource assignment with fixed spread curve. Hence the value returned should be considered
6870 l_sp_fixed_date_tbl := l_sp_fixed_date_new_tbl;
6871 --dbms_output.put_line(' cccc l_burdened_rate_override_tbl cnt is '||l_burdened_rate_override_tbl.count);
6872 IF l_debug_mode = 'Y' THEN
6873 pa_debug.g_err_stage:='Bulk updating pa_resource_assignments. start '||l_resource_assignment_id_tbl.FIRST ||' end '||l_resource_assignment_id_tbl.LAST;
6874 print_msg(pa_debug.g_err_stage,l_module_name);
6875 END IF;
6876
6877 --dbms_output.put_line('6');
6878 --Prepare the pl/sql tables for the all columns in pa_resource_assignments to make use of bulk update
6879 FORALL i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST
6880
6881 UPDATE PA_RESOURCE_ASSIGNMENTS
6882 SET resource_list_member_id = DECODE (l_resource_list_member_id_tbl(i),l_g_miss_num,null,nvl(l_resource_list_member_id_tbl(i),resource_list_member_id))
6883 ,last_update_date = sysdate
6884 ,last_updated_by = FND_GLOBAL.user_id
6885 ,last_update_login = FND_GLOBAL.login_id
6886 ,unit_of_measure = DECODE (l_unit_of_measure_tbl(i), l_g_miss_char,null,nvl( l_unit_of_measure_tbl(i),unit_of_measure))
6887 ,project_assignment_id = DECODE (l_project_assignment_id_tbl(i), l_g_miss_num,null,nvl(l_project_assignment_id_tbl(i),project_assignment_id))
6888 ,planning_start_date = DECODE (l_planning_start_date_tbl(i), l_g_miss_date,null,nvl(l_planning_start_date_tbl(i),planning_start_date))
6889 ,planning_end_date = DECODE (l_planning_end_date_tbl(i), l_g_miss_date,null,nvl(l_planning_end_date_tbl(i),planning_end_date))
6890 ,schedule_start_date = DECODE (l_schedule_start_date_tbl(i), l_g_miss_date,null,nvl(l_schedule_start_date_tbl(i),schedule_start_date))
6891 ,schedule_end_date = DECODE (l_schedule_end_date_tbl(i), l_g_miss_date,null,nvl(l_schedule_end_date_tbl(i),schedule_end_date))
6892 ,spread_curve_id = DECODE (l_spread_curve_id_tbl(i), l_g_miss_num,null,nvl(l_spread_curve_id_tbl(i),spread_curve_id ))
6893 ,etc_method_code = DECODE (l_etc_method_code_tbl(i), l_g_miss_char,null,nvl(l_etc_method_code_tbl(i),etc_method_code))
6894 ,res_type_code = DECODE (l_res_type_code_tbl(i), l_g_miss_char,null,nvl(l_res_type_code_tbl(i),res_type_code))
6895 ,attribute_category = DECODE (l_attribute_category_tbl(i), l_g_miss_char,null,nvl(l_attribute_category_tbl(i),attribute_category))
6896 ,attribute1 = DECODE (l_attribute1_tbl(i), l_g_miss_char,null,nvl(l_attribute1_tbl(i),attribute1))
6897 ,attribute2 = DECODE (l_attribute2_tbl(i), l_g_miss_char,null,nvl(l_attribute2_tbl(i),attribute2))
6898 ,attribute3 = DECODE (l_attribute3_tbl(i), l_g_miss_char,null,nvl(l_attribute3_tbl(i),attribute3 ))
6899 ,attribute4 = DECODE (l_attribute4_tbl(i), l_g_miss_char,null,nvl(l_attribute4_tbl(i),attribute4))
6900 ,attribute5 = DECODE (l_attribute5_tbl(i), l_g_miss_char,null,nvl(l_attribute5_tbl(i),attribute5 ))
6901 ,attribute6 = DECODE (l_attribute6_tbl(i), l_g_miss_char,null,nvl(l_attribute6_tbl(i),attribute6 ))
6902 ,attribute7 = DECODE (l_attribute7_tbl(i), l_g_miss_char,null,nvl(l_attribute7_tbl(i),attribute7))
6903 ,attribute8 = DECODE (l_attribute8_tbl(i), l_g_miss_char,null,nvl(l_attribute8_tbl(i),attribute8))
6904 ,attribute9 = DECODE (l_attribute9_tbl(i), l_g_miss_char,null,nvl(l_attribute9_tbl(i),attribute9))
6905 ,attribute10 = DECODE (l_attribute10_tbl(i), l_g_miss_char,null, nvl(l_attribute10_tbl(i),attribute10))
6906 ,attribute11 = DECODE (l_attribute11_tbl(i), l_g_miss_char,null,nvl(l_attribute11_tbl(i),attribute11))
6907 ,attribute12 = DECODE (l_attribute12_tbl(i), l_g_miss_char,null,nvl(l_attribute12_tbl(i),attribute12))
6908 ,attribute13 = DECODE (l_attribute13_tbl(i), l_g_miss_char,null,nvl(l_attribute13_tbl(i),attribute13))
6909 ,attribute14 = DECODE (l_attribute14_tbl(i), l_g_miss_char,null,nvl(l_attribute14_tbl(i),attribute14)) -- for bug 6944671
6910 ,attribute15 = DECODE (l_attribute15_tbl(i), l_g_miss_char,null,nvl(l_attribute15_tbl(i),attribute15))
6911 ,attribute16 = DECODE (l_attribute16_tbl(i), l_g_miss_char,null,nvl(l_attribute16_tbl(i),attribute16))
6912 ,attribute17 = DECODE (l_attribute17_tbl(i), l_g_miss_char,null,nvl(l_attribute17_tbl(i),attribute17))
6913 ,attribute18 = DECODE (l_attribute18_tbl(i), l_g_miss_char,null,nvl(l_attribute18_tbl(i),attribute18))
6914 ,attribute19 = DECODE (l_attribute19_tbl(i), l_g_miss_char,null,nvl(l_attribute19_tbl(i),attribute19))
6915 ,attribute20 = DECODE (l_attribute20_tbl(i), l_g_miss_char,null,nvl(l_attribute20_tbl(i),attribute20))
6916 ,attribute21 = DECODE (l_attribute21_tbl(i), l_g_miss_char,null,nvl(l_attribute21_tbl(i),attribute21))
6917 ,attribute22 = DECODE (l_attribute22_tbl(i), l_g_miss_char,null,nvl(l_attribute22_tbl(i),attribute22))
6918 ,attribute23 = DECODE (l_attribute23_tbl(i), l_g_miss_char,null,nvl(l_attribute23_tbl(i),attribute23))
6919 ,attribute24 = DECODE (l_attribute24_tbl(i), l_g_miss_char,null,nvl(l_attribute24_tbl(i),attribute24))
6920 ,attribute25 = DECODE (l_attribute25_tbl(i), l_g_miss_char,null,nvl(l_attribute25_tbl(i),attribute25))
6921 ,attribute26 = DECODE (l_attribute26_tbl(i), l_g_miss_char,null,nvl(l_attribute26_tbl(i),attribute26))
6922 ,attribute27 = DECODE (l_attribute27_tbl(i), l_g_miss_char,null,nvl(l_attribute27_tbl(i),attribute27))
6923 ,attribute28 = DECODE (l_attribute28_tbl(i), l_g_miss_char,null,nvl(l_attribute28_tbl(i),attribute28))
6924 ,attribute29 = DECODE (l_attribute29_tbl(i), l_g_miss_char,null,nvl(l_attribute29_tbl(i),attribute29))
6925 ,attribute30 = DECODE (l_attribute30_tbl(i), l_g_miss_char,null,nvl(l_attribute30_tbl(i),attribute30))
6926 ,fc_res_type_code = DECODE (l_fc_res_type_code_tbl(i), l_g_miss_char,null,nvl(l_fc_res_type_code_tbl(i),fc_res_type_code))
6927 ,resource_class_code = DECODE (l_resource_class_code_tbl(i), l_g_miss_char,null,nvl(l_resource_class_code_tbl(i),resource_class_code))
6928 ,organization_id = DECODE (l_organization_id_tbl(i), l_g_miss_num,null,nvl(l_organization_id_tbl(i),organization_id))
6929 ,job_id = DECODE (l_job_id_tbl(i), l_g_miss_num,null,nvl(l_job_id_tbl(i),job_id))
6930 ,person_id = DECODE (l_person_id_tbl(i), l_g_miss_num,null,nvl(l_person_id_tbl(i),person_id))
6931 ,expenditure_type = DECODE (l_expenditure_type_tbl(i), l_g_miss_char,null,nvl(l_expenditure_type_tbl(i),expenditure_type))
6932 ,expenditure_category = DECODE (l_expenditure_category_tbl(i), l_g_miss_char,null,nvl(l_expenditure_category_tbl(i),expenditure_category))
6933 ,revenue_category_code = DECODE (l_revenue_category_code_tbl(i), l_g_miss_char,null,nvl(l_revenue_category_code_tbl(i),revenue_category_code))
6934 ,event_type = DECODE (l_event_type_tbl(i), l_g_miss_char,null,nvl(l_event_type_tbl(i),event_type))
6935 ,supplier_id = DECODE (l_supplier_id_tbl(i), l_g_miss_num,null,nvl(l_supplier_id_tbl(i),supplier_id))
6936 ,non_labor_resource = DECODE (l_non_labor_resource_tbl(i), l_g_miss_char,null,nvl(l_non_labor_resource_tbl(i),non_labor_resource))
6937 ,bom_resource_id = DECODE (l_bom_resource_id_tbl(i), l_g_miss_num,null,nvl(l_bom_resource_id_tbl(i),bom_resource_id))
6938 ,inventory_item_id = DECODE (l_inventory_item_id_tbl(i), l_g_miss_num,null,nvl(l_inventory_item_id_tbl(i),inventory_item_id))
6939 ,item_category_id = DECODE (l_item_category_id_tbl(i), l_g_miss_num,null,nvl(l_item_category_id_tbl(i),item_category_id))
6940 ,record_version_number = nvl(record_version_number,0)+1
6941 ,billable_percent = DECODE (l_billable_percent_tbl(i), l_g_miss_num,null,nvl(l_billable_percent_tbl(i),billable_percent))
6942 ,mfc_cost_type_id = DECODE (l_mfc_cost_type_id_tbl(i), l_g_miss_num,null,nvl(l_mfc_cost_type_id_tbl(i),mfc_cost_type_id ))
6943 ,procure_resource_flag = DECODE (l_procure_resource_flag_tbl(i), l_g_miss_char,null,nvl(l_procure_resource_flag_tbl(i),procure_resource_flag))
6944 ,assignment_description = DECODE (l_assignment_description_tbl(i), l_g_miss_char,null,nvl(l_assignment_description_tbl(i),assignment_description))
6945 ,incurred_by_res_flag = DECODE (l_incurred_by_res_flag_tbl(i), l_g_miss_char,null,nvl(l_incurred_by_res_flag_tbl(i),incurred_by_res_flag))
6946 ,sp_fixed_date = DECODE (l_sp_fixed_date_tbl(i), l_g_miss_date,null,nvl(l_sp_fixed_date_tbl(i),sp_fixed_date))
6947 ,person_type_code = DECODE (l_person_type_code_tbl(i), l_g_miss_char,null,nvl(l_person_type_code_tbl(i),person_type_code))
6948 ,use_task_schedule_flag = DECODE (l_use_task_schedule_flag_tbl(i), l_g_miss_char,null,nvl(l_use_task_schedule_flag_tbl(i),use_task_schedule_flag))
6949 ,incur_by_res_class_code = DECODE (l_Incur_by_res_class_code_tbl(i), l_g_miss_char,null,nvl(l_Incur_by_res_class_code_tbl(i),incur_by_res_class_code ))
6950 ,incur_by_role_id = DECODE (l_Incur_by_role_id_tbl(i), l_g_miss_num,null,nvl(l_Incur_by_role_id_tbl(i),incur_by_role_id))
6951 ,project_role_id = DECODE (l_project_role_id_tbl(i), l_g_miss_num,null,nvl(l_project_role_id_tbl(i),project_role_id))
6952 ,resource_class_flag = DECODE (l_resource_class_flag_tbl(i), l_g_miss_char,null,nvl(l_resource_class_flag_tbl(i),resource_class_flag ))
6953 ,named_role = DECODE (l_named_role_tbl(i), l_g_miss_char,null,nvl(l_named_role_tbl(i),named_role ))
6954 ,rbs_element_id = l_rbs_element_id_tbl(i)
6955 ,txn_accum_header_id = l_txn_accum_header_id_tbl(i)
6956 ,rate_expenditure_org_id = DECODE (p_context
6957 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
6958 ,DECODE(l_rate_exp_org_id_tbl(i)
6959 ,l_g_miss_num
6960 ,null
6961 ,nvl(l_rate_exp_org_id_tbl(i),rate_expenditure_org_id))
6962 ,rate_expenditure_org_id)
6963 ,rate_expenditure_type = DECODE (p_context
6964 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
6965 ,DECODE(l_rate_exp_type_tbl(i)
6966 ,l_g_miss_char
6967 ,null
6968 ,nvl(l_rate_exp_type_tbl(i),rate_expenditure_type))
6969 ,rate_expenditure_type)
6970 ,rate_exp_func_curr_code = DECODE (p_context
6971 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
6972 ,DECODE(l_rate_func_curr_code_tbl(i)
6973 ,l_g_miss_char
6974 ,null
6975 ,nvl(l_rate_func_curr_code_tbl(i),rate_exp_func_curr_code))
6976 ,rate_exp_func_curr_code)
6977 ,rate_based_flag = DECODE (p_context /* Bug 3678814 */
6978 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
6979 ,DECODE(l_rate_based_flag_tbl(i),
6980 l_g_miss_char,'N',
6981 nvl(l_rate_based_flag_tbl(i),rate_based_flag))
6982 ,rate_based_flag)
6983 /* Bug fix:5759413 */
6984 ,resource_rate_based_flag = DECODE (p_context,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
6985 ,DECODE(nvl(l_rlm_id_change_flag_tbl(i),'N'), 'N'
6986 ,resource_rate_based_flag
6987 ,DECODE(l_rate_based_flag_tbl(i),
6988 l_g_miss_char,'N',
6989 nvl(l_rate_based_flag_tbl(i),resource_rate_based_flag)))
6990 ,resource_rate_based_flag)
6991 ,scheduled_delay = DECODE (p_context /* Bug 3678814 */
6992 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
6993 ,DECODE(l_scheduled_delay(i),
6994 l_g_miss_num,null,
6995 nvl(l_scheduled_delay(i),scheduled_delay))
6996 ,scheduled_delay)
6997 WHERE resource_assignment_id= l_resource_assignment_id_tbl(i);
6998 /*-------------------------------------------------------------------------------
6999 The following block of code to call the api PA_FP_CALC_PLAN_PKG.calculate
7000 is commented as it has to be modified
7001 Calling the api PA_FP_CALC_PLAN_PKG.calculate*/
7002
7003 /* Start of coding done for Bug 5684639:
7004 If the user has selected not to distribute the amounts, then
7005 pass the l_plan_end_date_old_tbl as l_plan_end_date_new_tbl AND
7006 l_plan_start_date_old_tbl as l_plan_start_date_new_tbl so that there is
7007 no distribution of amounts as the old and the new dates are the same.
7008 */
7009 IF l_debug_mode = 'Y' THEN
7010 pa_debug.g_err_stage:='p_distrib_amts - '||p_distrib_amts;
7011 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7012 END IF;
7013 IF (nvl(p_distrib_amts,'Y') = 'N') THEN
7014 l_plan_start_date_old_tbl := l_plan_start_date_new_tbl ;
7015 l_plan_end_date_old_tbl := l_plan_end_date_new_tbl ;
7016 END IF;
7017
7018 /* End of coding done for Bug 5684639.*/
7019
7020 IF l_debug_mode = 'Y' THEN
7021 pa_debug.g_err_stage:='Calling API PA_FP_CALC_PLAN_PKG.calculate';
7022 print_msg(pa_debug.g_err_stage,l_module_name);
7023 pa_debug.g_err_stage:='Parameters to PA_FP_CALC_PLAN_PKG.calculate';
7024 print_msg(pa_debug.g_err_stage,l_module_name);
7025
7026 IF l_resource_assignment_id_tbl.COUNT>0 THEN
7027
7028 FOR i in l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST LOOP
7029
7030 pa_debug.g_err_stage:='l_resource_assignment_id_tbl('||i||') is '||l_resource_assignment_id_tbl(i);
7031 print_msg(pa_debug.g_err_stage,l_module_name);
7032 --dbms_output.put_line( pa_debug.g_err_stage);
7033
7034 pa_debug.g_err_stage:='l_currency_code_tbl('||i||') is '||l_currency_code_tbl(i);
7035 print_msg(pa_debug.g_err_stage,l_module_name);
7036 --dbms_output.put_line( pa_debug.g_err_stage);
7037
7038 IF p_currency_code_tbl.EXISTS(i) THEN
7039 pa_debug.g_err_stage:='p_currency_code_tbl('||i||') is '||p_currency_code_tbl(i);
7040 print_msg(pa_debug.g_err_stage,l_module_name);
7041 ELSE
7042 pa_debug.g_err_stage:='p_currency_code_tbl('||i||') does not exist ';
7043 print_msg(pa_debug.g_err_stage,l_module_name);
7044 END IF;
7045 --dbms_output.put_line( pa_debug.g_err_stage);
7046
7047 pa_debug.g_err_stage:='l_override_currency_code_tbl('||i||') is '||l_override_currency_code_tbl(i);
7048 print_msg(pa_debug.g_err_stage,l_module_name);
7049 --dbms_output.put_line( pa_debug.g_err_stage);
7050
7051 IF p_txn_currency_override_tbl.EXISTS(i) THEN
7052 pa_debug.g_err_stage:='p_txn_currency_override_tbl('||i||') is '||p_txn_currency_override_tbl(i);
7053 print_msg(pa_debug.g_err_stage,l_module_name);
7054 ELSE
7055 pa_debug.g_err_stage:='p_txn_currency_override_tbl('||i||') does not exist ';
7056 print_msg(pa_debug.g_err_stage,l_module_name);
7057 END IF;
7058 --dbms_output.put_line( pa_debug.g_err_stage);
7059
7060 pa_debug.g_err_stage:='l_total_quantity_tbl('||i||') is '||l_total_quantity_tbl(i);
7061 print_msg(pa_debug.g_err_stage,l_module_name);
7062 --dbms_output.put_line( pa_debug.g_err_stage);
7063
7064 IF p_quantity_tbl.EXISTS(i) THEN
7065 pa_debug.g_err_stage:='p_quantity_tbl('||i||') is '||p_quantity_tbl(i);
7066 print_msg(pa_debug.g_err_stage,l_module_name);
7067 ELSE
7068 pa_debug.g_err_stage:='p_quantity_tbl('||i||') does not exist ';
7069 print_msg(pa_debug.g_err_stage,l_module_name);
7070 END IF;
7071 --dbms_output.put_line( pa_debug.g_err_stage);
7072
7073 pa_debug.g_err_stage:='l_total_raw_cost_tbl('||i||') is '||l_total_raw_cost_tbl(i);
7074 print_msg(pa_debug.g_err_stage,l_module_name);
7075 --dbms_output.put_line( pa_debug.g_err_stage);
7076
7077 IF p_raw_cost_tbl.EXISTS(i) THEN
7078 pa_debug.g_err_stage:='p_raw_cost_tbl('||i||') is '||p_raw_cost_tbl(i);
7079 print_msg(pa_debug.g_err_stage,l_module_name);
7080 ELSE
7081 pa_debug.g_err_stage:='p_raw_cost_tbl('||i||') does not exist ';
7082 print_msg(pa_debug.g_err_stage,l_module_name);
7083 END IF;
7084 --dbms_output.put_line( pa_debug.g_err_stage);
7085
7086 pa_debug.g_err_stage:='l_burdened_cost_tbl('||i||') is '||l_burdened_cost_tbl(i);
7087 print_msg(pa_debug.g_err_stage,l_module_name);
7088 --dbms_output.put_line( pa_debug.g_err_stage);
7089
7090 IF p_burdened_cost_tbl.EXISTS(i) THEN
7091 pa_debug.g_err_stage:='p_burdened_cost_tbl('||i||') is '||p_burdened_cost_tbl(i);
7092 print_msg(pa_debug.g_err_stage,l_module_name);
7093 ELSE
7094 pa_debug.g_err_stage:='p_burdened_cost_tbl('||i||') does not exist ';
7095 print_msg(pa_debug.g_err_stage,l_module_name);
7096 END IF;
7097 --dbms_output.put_line( pa_debug.g_err_stage);
7098
7099 pa_debug.g_err_stage:='l_revenue_tbl('||i||') is '||l_revenue_tbl(i);
7100 print_msg(pa_debug.g_err_stage,l_module_name);
7101 --dbms_output.put_line( pa_debug.g_err_stage);
7102
7103 IF p_revenue_tbl.EXISTS(i) THEN
7104 pa_debug.g_err_stage:='p_revenue_tbl('||i||') is '||p_revenue_tbl(i);
7105 print_msg(pa_debug.g_err_stage,l_module_name);
7106 ELSE
7107 pa_debug.g_err_stage:='p_revenue_tbl('||i||') does not exist ';
7108 print_msg(pa_debug.g_err_stage,l_module_name);
7109 END IF;
7110 --dbms_output.put_line( pa_debug.g_err_stage);
7111
7112 pa_debug.g_err_stage:='l_raw_cost_rate_tbl('||i||') is '||l_raw_cost_rate_tbl(i);
7113 print_msg(pa_debug.g_err_stage,l_module_name);
7114 --dbms_output.put_line( pa_debug.g_err_stage);
7115
7116 IF p_cost_rate_tbl.EXISTS(i) THEN
7117 pa_debug.g_err_stage:='p_cost_rate_tbl('||i||') is '||p_cost_rate_tbl(i);
7118 print_msg(pa_debug.g_err_stage,l_module_name);
7119 ELSE
7120 pa_debug.g_err_stage:='p_cost_rate_tbl('||i||') does not exist ';
7121 print_msg(pa_debug.g_err_stage,l_module_name);
7122 END IF;
7123 --dbms_output.put_line( pa_debug.g_err_stage);
7124
7125 pa_debug.g_err_stage:='l_cost_rate_override_tbl('||i||') is '||l_cost_rate_override_tbl(i);
7126 print_msg(pa_debug.g_err_stage,l_module_name);
7127 --dbms_output.put_line( pa_debug.g_err_stage);
7128
7129 IF p_cost_rate_override_tbl.EXISTS(i) THEN
7130 pa_debug.g_err_stage:='p_cost_rate_override_tbl('||i||') is '||p_cost_rate_override_tbl(i);
7131 print_msg(pa_debug.g_err_stage,l_module_name);
7132 ELSE
7133 pa_debug.g_err_stage:='p_cost_rate_override_tbl('||i||') does not exist ';
7134 print_msg(pa_debug.g_err_stage,l_module_name);
7135 END IF;
7136 --dbms_output.put_line( pa_debug.g_err_stage);
7137
7138 pa_debug.g_err_stage:='l_b_multiplier_tbl('||i||') is '||l_b_multiplier_tbl(i);
7139 print_msg(pa_debug.g_err_stage,l_module_name);
7140 --dbms_output.put_line( pa_debug.g_err_stage);
7141
7142 IF p_burdened_rate_tbl.EXISTS(i) THEN
7143 pa_debug.g_err_stage:='p_burdened_rate_tbl('||i||') is '||p_burdened_rate_tbl(i);
7144 print_msg(pa_debug.g_err_stage,l_module_name);
7145 ELSE
7146 pa_debug.g_err_stage:='p_burdened_rate_tbl('||i||') does not exist ';
7147 print_msg(pa_debug.g_err_stage,l_module_name);
7148 END IF;
7149 --dbms_output.put_line( pa_debug.g_err_stage);
7150
7151 pa_debug.g_err_stage:='l_burdened_rate_override_tbl('||i||') is '||l_burdened_rate_override_tbl(i);
7152 print_msg(pa_debug.g_err_stage,l_module_name);
7153 --dbms_output.put_line( pa_debug.g_err_stage);
7154
7155 IF p_burdened_rate_override_tbl.EXISTS(i) THEN
7156 pa_debug.g_err_stage:='p_burdened_rate_override_tbl('||i||') is '||p_burdened_rate_override_tbl(i);
7157 print_msg(pa_debug.g_err_stage,l_module_name);
7158 ELSE
7159 pa_debug.g_err_stage:='p_burdened_rate_override_tbl('||i||') does not exist ';
7160 print_msg(pa_debug.g_err_stage,l_module_name);
7161 END IF;
7162 --dbms_output.put_line( pa_debug.g_err_stage);
7163
7164 pa_debug.g_err_stage:='l_bill_rate_tbl('||i||') is '||l_bill_rate_tbl(i);
7165 print_msg(pa_debug.g_err_stage,l_module_name);
7166 --dbms_output.put_line( pa_debug.g_err_stage);
7167
7168 IF p_bill_rate_tbl.EXISTS(i) THEN
7169 pa_debug.g_err_stage:='p_bill_rate_tbl('||i||') is '||p_bill_rate_tbl(i);
7170 print_msg(pa_debug.g_err_stage,l_module_name);
7171 ELSE
7172 pa_debug.g_err_stage:='p_bill_rate_tbl('||i||') does not exist ';
7173 print_msg(pa_debug.g_err_stage,l_module_name);
7174 END IF;
7175 --dbms_output.put_line( pa_debug.g_err_stage);
7176
7177 pa_debug.g_err_stage:='l_bill_rate_override_tbl('||i||') is '||l_bill_rate_override_tbl(i);
7178 print_msg(pa_debug.g_err_stage,l_module_name);
7179 --dbms_output.put_line( pa_debug.g_err_stage);
7180
7181 IF p_bill_rate_override_tbl.EXISTS(i) THEN
7182 pa_debug.g_err_stage:='p_bill_rate_override_tbl('||i||') is '||p_bill_rate_override_tbl(i);
7183 print_msg(pa_debug.g_err_stage,l_module_name);
7184 ELSE
7185 pa_debug.g_err_stage:='p_bill_rate_override_tbl('||i||') does not exist ';
7186 print_msg(pa_debug.g_err_stage,l_module_name);
7187 END IF;
7188 --dbms_output.put_line( pa_debug.g_err_stage);
7189
7190 pa_debug.g_err_stage:='l_rlm_id_change_flag_tbl('||i||') is '||l_rlm_id_change_flag_tbl(i);
7191 print_msg(pa_debug.g_err_stage,l_module_name);
7192 --dbms_output.put_line( pa_debug.g_err_stage);
7193 pa_debug.g_err_stage:='l_mfc_cost_type_id_old_tbl('||i||') is '||l_mfc_cost_type_id_old_tbl(i);
7194 print_msg(pa_debug.g_err_stage,l_module_name);
7195 --dbms_output.put_line( pa_debug.g_err_stage);
7196 pa_debug.g_err_stage:='l_mfc_cost_type_id_new_tbl('||i||') is '||l_mfc_cost_type_id_new_tbl(i);
7197 print_msg(pa_debug.g_err_stage,l_module_name);
7198 --dbms_output.put_line( pa_debug.g_err_stage);
7199 pa_debug.g_err_stage:='l_spread_curve_id_old_tbl('||i||') is '||l_spread_curve_id_old_tbl(i);
7200 print_msg(pa_debug.g_err_stage,l_module_name);
7201 --dbms_output.put_line( pa_debug.g_err_stage);
7202 pa_debug.g_err_stage:='l_spread_curve_id_new_tbl('||i||') is '||l_spread_curve_id_new_tbl(i);
7203 print_msg(pa_debug.g_err_stage,l_module_name);
7204 --dbms_output.put_line( pa_debug.g_err_stage);
7205 pa_debug.g_err_stage:='l_sp_fixed_date_old_tbl('||i||') is '||l_sp_fixed_date_old_tbl(i);
7206 print_msg(pa_debug.g_err_stage,l_module_name);
7207 --dbms_output.put_line( pa_debug.g_err_stage);
7208 if l_sp_fixed_date_new_tbl(i) = fnd_api.g_miss_date then
7209 pa_debug.g_err_stage:='l_sp_fixed_date_new_tbl('||i||') is g miss date';
7210 else
7211 pa_debug.g_err_stage:='l_sp_fixed_date_new_tbl('||i||') is '||l_sp_fixed_date_new_tbl(i);
7212 end if;
7213 print_msg(pa_debug.g_err_stage,l_module_name);
7214 --dbms_output.put_line( pa_debug.g_err_stage);
7215 pa_debug.g_err_stage:='l_plan_start_date_old_tbl('||i||') is '||l_plan_start_date_old_tbl(i);
7216 print_msg(pa_debug.g_err_stage,l_module_name);
7217 --dbms_output.put_line( pa_debug.g_err_stage);
7218 if l_plan_start_date_new_tbl(i) = fnd_api.g_miss_date then
7219 pa_debug.g_err_stage:='l_plan_start_date_new_tbl('||i||') is g miss date';
7220 else
7221 pa_debug.g_err_stage:='l_plan_start_date_new_tbl('||i||') is '||l_plan_start_date_new_tbl(i);
7222 end if;
7223 print_msg(pa_debug.g_err_stage,l_module_name);
7224 --dbms_output.put_line( pa_debug.g_err_stage);
7225 pa_debug.g_err_stage:='l_plan_end_date_old_tbl('||i||') is '||l_plan_end_date_old_tbl(i);
7226 print_msg(pa_debug.g_err_stage,l_module_name);
7227 --dbms_output.put_line( pa_debug.g_err_stage);
7228 if l_plan_end_date_new_tbl(i) = fnd_api.g_miss_date then
7229 pa_debug.g_err_stage:='l_plan_end_date_new_tbl('||i||') is g miss date';
7230 else
7231 pa_debug.g_err_stage:='l_plan_end_date_new_tbl('||i||') is '||l_plan_end_date_new_tbl(i);
7232 end if;
7233 print_msg(pa_debug.g_err_stage,l_module_name);
7234 --dbms_output.put_line( pa_debug.g_err_stage);
7235
7236 END LOOP;
7237 END IF;
7238 END IF;
7239
7240 --dbms_output.put_line('l_resource_assignment_id_tbl(1) is '||l_resource_assignment_id_tbl(1));
7241 --dbms_output.put_line('l_currency_code_tbl(1) is '||l_currency_code_tbl(1));
7242 --dbms_output.put_line('l_override_currency_code_tbl(1) is '||l_override_currency_code_tbl(1));
7243 --dbms_output.put_line('l_total_quantity_tbl(1) is '||l_total_quantity_tbl(1));
7244 --dbms_output.put_line('l_total_raw_cost_tbl(1) is '||l_total_raw_cost_tbl(1));
7245 --dbms_output.put_line('l_burdened_cost_tbl(1) is '||l_burdened_cost_tbl(1));
7246 --dbms_output.put_line('l_revenue_tbl(1) is '||l_revenue_tbl(1));
7247 --dbms_output.put_line('l_raw_cost_rate_tbl(1) is '||l_raw_cost_rate_tbl(1));
7248 --dbms_output.put_line('l_cost_rate_override_tbl(1) is '||l_cost_rate_override_tbl(1));
7249 --dbms_output.put_line('l_b_multiplier_tbl cnt is '||l_b_multiplier_tbl.count);
7250 --dbms_output.put_line('l_b_multiplier_tbl(1) is '||l_b_multiplier_tbl(1));
7251 --dbms_output.put_line('l_burdened_rate_override_tbl cnt is '||l_burdened_rate_override_tbl.count);
7252 --dbms_output.put_line('l_burdened_rate_override_tbl(1) is '||l_burdened_rate_override_tbl(1));
7253 --dbms_output.put_line('l_bill_rate_tbl(1) is '||l_bill_rate_tbl(1));
7254 --dbms_output.put_line('l_bill_rate_override_tbl(1) is '||l_bill_rate_override_tbl(1));
7255
7256 --dbms_output.put_line('quantity passed to calc is'||l_total_quantity_tbl(1));
7257 --dbms_output.put_line('Calling calc api');
7258 PA_FP_CALC_PLAN_PKG.calculate(
7259 p_project_id => l_project_id
7260 ,p_budget_version_id => l_budget_version_id
7261 --,p_refresh_rates_flag => 'N' --need to pass any variables that are passed from calling API
7262 --,p_refresh_conv_rates_flag => 'N' --need to pass any variables that are passed from calling API
7263 --,p_spread_required_flag => 'N'
7264 --,p_conv_rates_required_flag => 'N'
7265 ,p_source_context => PA_FP_CONSTANTS_PKG.G_CALC_API_RESOURCE_CONTEXT
7266 ,p_resource_assignment_tab => l_resource_assignment_id_tbl
7267 ,p_txn_currency_code_tab => l_currency_code_tbl
7268 ,p_txn_currency_override_tab => l_override_currency_code_tbl
7269 ,p_total_qty_tab => l_total_quantity_tbl
7270 ,p_total_raw_cost_tab => l_total_raw_cost_tbl
7271 ,p_total_burdened_cost_tab => l_burdened_cost_tbl
7272 ,p_total_revenue_tab => l_revenue_tbl
7273 ,p_raw_cost_rate_tab => l_raw_cost_rate_tbl
7274 ,p_rw_cost_rate_override_tab => l_cost_rate_override_tbl
7275 ,p_b_cost_rate_tab => l_b_multiplier_tbl
7276 ,p_b_cost_rate_override_tab => l_burdened_rate_override_tbl
7277 ,p_bill_rate_tab => l_bill_rate_tbl
7278 ,p_bill_rate_override_tab => l_bill_rate_override_tbl
7279 ,p_line_start_date_tab => SYSTEM.PA_DATE_TBL_TYPE()
7280 ,p_line_end_date_tab => SYSTEM.PA_DATE_TBL_TYPE()
7281 ,p_apply_progress_flag => p_apply_progress_flag /* Passed by apply_progress api (sakthi's team) */
7282 --Added for Bug 4152749
7283 ,p_mfc_cost_type_id_old_tab => l_mfc_cost_type_id_old_tbl
7284 ,p_mfc_cost_type_id_new_tab => l_mfc_cost_type_id_new_tbl
7285 ,p_spread_curve_id_old_tab => l_spread_curve_id_old_tbl
7286 ,p_spread_curve_id_new_tab => l_spread_curve_id_new_tbl
7287 ,p_sp_fixed_date_old_tab => l_sp_fixed_date_old_tbl
7288 ,p_sp_fixed_date_new_tab => l_sp_fixed_date_new_tbl
7289 ,p_plan_start_date_old_tab => l_plan_start_date_old_tbl
7290 ,p_plan_start_date_new_tab => l_plan_start_date_new_tbl
7291 ,p_plan_end_date_old_tab => l_plan_end_date_old_tbl
7292 ,p_plan_end_date_new_tab => l_plan_end_date_new_tbl
7293 ,p_rlm_id_change_flag_tab => l_rlm_id_change_flag_tbl
7294 ,p_rollup_required_flag => l_pji_rollup_required --Bug 4200168
7295 --End of parameters for Bug 4152749
7296 ,x_return_status => x_return_status
7297 ,x_msg_count => x_msg_count
7298 ,x_msg_data => x_msg_data);
7299
7300 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7301
7302 IF l_debug_mode = 'Y' THEN
7303 pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate returned error';
7304 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7305 END IF;
7306 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7307 END IF;
7308
7309 -- IPM changes - rollup amounts in new entity
7310
7311 -- Call the UTIL API to get the financial plan info l_fp_cols_rec
7312
7313 pa_fp_gen_amount_utils.get_plan_version_dtls
7314 (p_project_id => l_project_id,
7315 p_budget_version_id => l_budget_version_id,
7316 x_fp_cols_rec => l_fp_cols_rec,
7317 x_return_status => x_return_status,
7318 x_msg_count => x_msg_count,
7319 x_msg_data => x_msg_data);
7320
7321 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7322
7323 IF l_debug_mode = 'Y' THEN
7324 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
7325 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7326 END IF;
7327 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7328 END IF;
7329
7330 -- IPM changes - populate tmp table to use for update later
7331 /*
7332 IF l_resource_assignment_id_tbl.COUNT > 0 THEN
7333 FORALL i IN l_resource_assignment_id_tbl.first ..
7334 l_resource_assignment_id_tbl.last
7335 INSERT INTO pa_resource_asgn_curr_tmp
7336 (RA_TXN_ID
7337 ,RESOURCE_ASSIGNMENT_ID
7338 ,TXN_CURRENCY_CODE
7339 ,DELETE_FLAG
7340 )
7341 SELECT pa_resource_asgn_curr_s.nextval
7342 ,l_resource_assignment_id_tbl(i)
7343 ,l_currency_code_tbl(i)
7344 ,NULL
7345 FROM DUAL;
7346 END IF;
7347
7348 pa_res_asg_currency_pub.maintain_data(
7349 p_fp_cols_rec => l_fp_cols_rec,
7350 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
7351 p_delete_flag => 'N',
7352 p_copy_flag => 'N',
7353 p_src_version_id => NULL,
7354 p_copy_mode => NULL,
7355 p_rollup_flag => 'Y',
7356 p_version_level_flag => 'N',
7357 p_called_mode => 'SELF_SERVICE',
7358 x_return_status => x_return_status,
7359 x_msg_count => x_msg_count,
7360 x_msg_data => x_msg_data
7361 );
7362
7363 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7364
7365 IF l_debug_mode = 'Y' THEN
7366 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
7367 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7368 END IF;
7369 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7370 END IF;
7371 */
7372
7373 -- Added for bug 4492493
7374
7375 IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
7376 AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(l_project_id) = 'Y') OR
7377 (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
7378 AND pa_task_assignment_utils.g_require_progress_rollup = 'Y') THEN
7379
7380 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
7381 ( p_calling_context => 'ASGMT_PLAN_CHANGE'
7382 ,p_project_id => l_project_id
7383 ,p_structure_version_id => p_struct_elem_version_id
7384 ,p_pub_struc_ver_id => p_struct_elem_version_id
7385 ,x_return_status => x_return_status
7386 ,x_msg_count => x_msg_count
7387 ,x_msg_data => x_msg_data);
7388
7389 pa_task_assignment_utils.g_require_progress_rollup := 'N';
7390 END IF;
7391
7392
7393 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7394 IF l_debug_mode = 'Y' THEN
7395 pa_debug.g_err_stage:='Called API PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp';
7396 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.update_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
7397 END IF;
7398
7399 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7400 END IF;
7401 --End bug 4492493
7402
7403 IF l_debug_mode = 'Y' THEN
7404 pa_debug.reset_curr_function;
7405 END IF;
7406
7407 EXCEPTION
7408 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
7409 IF l_debug_mode = 'Y' THEN
7410 pa_debug.g_err_stage:='In invalid args exception';
7411 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7412 END IF;
7413
7414 l_msg_count := FND_MSG_PUB.count_msg;
7415 IF l_msg_count = 1 THEN
7416
7417 IF l_debug_mode = 'Y' THEN
7418 pa_debug.g_err_stage:='In invalid args exception 1';
7419 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7420 END IF;
7421
7422 PA_INTERFACE_UTILS_PUB.get_messages
7423 ( p_encoded => FND_API.G_TRUE
7424 ,p_msg_index => 1
7425 ,p_msg_count => l_msg_count
7426 ,p_msg_data => l_msg_data
7427 ,p_data => l_data
7428 ,p_msg_index_out => l_msg_index_out);
7429 x_msg_data := l_data;
7430 x_msg_count := l_msg_count;
7431 ELSE
7432 IF l_debug_mode = 'Y' THEN
7433 pa_debug.g_err_stage:='In invalid args exception 2';
7434 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7435 END IF;
7436
7437 x_msg_count := l_msg_count;
7438
7439 END IF;
7440 ROLLBACK TO Update_Planning_Transactions;
7441 x_return_status := FND_API.G_RET_STS_ERROR;
7442 IF l_debug_mode = 'Y' THEN
7443 pa_debug.g_err_stage:='In invalid args exception 3';
7444 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7445 pa_debug.reset_curr_function;
7446 END IF;
7447 IF l_debug_mode = 'Y' THEN
7448 pa_debug.g_err_stage:='In invalid args exception 4 ';
7449 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7450 END IF;
7451
7452
7453 WHEN OTHERS THEN
7454 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7455 x_msg_count := 1;
7456 x_msg_data := SQLERRM;
7457 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
7458 ,p_procedure_name => 'Update_Planning_Transactions');
7459
7460 IF l_debug_mode = 'Y' THEN
7461 pa_debug.g_err_stage:='Unexpected Error' || SQLERRM;
7462 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
7463 pa_debug.reset_curr_function;
7464 END IF;
7465 ROLLBACK TO Update_Planning_Transactions;
7466
7467 RAISE;
7468 END Update_Planning_Transactions;
7469
7470
7471 /*This procedure should be called to copy planning transactions
7472 valid values for p_context are 'WORKPLAN' and 'TASK_ASSIGNMENT'
7473 valid values for p_copy_amt_qty are 'Y' and 'N'
7474
7475 The parameters
7476 p_copy_people_flag
7477 p_copy_equip_flag
7478 p_copy_mat_item_flag
7479 p_copy_fin_elem_flag
7480 will be used only when the p_context is TASK_ASSIGNMENT.
7481 Irrespective of the context in which the API is called,
7482 the p_src_targ_version_id_tbl should never be empty.
7483 The other parameters can be derived based on the values
7484 in p_src_targ_version_id_tbl table.
7485
7486 Bug 3615617 Copy External Tasks development changes
7487 validate_copy_assignment api returns target rlm id for target
7488 resource assignment id as part of the output record table. This
7489 should be passed to create_res_task_maps api as input.
7490 */
7491 PROCEDURE copy_planning_transactions
7492 (
7493 p_context IN VARCHAR2
7494 ,p_copy_external_flag IN VARCHAR2
7495 ,p_src_project_id IN pa_projects_all.project_id%TYPE
7496 ,p_target_project_id IN pa_projects_all.project_id%TYPE
7497 ,p_src_budget_version_id IN pa_budget_versions.budget_version_id%TYPE DEFAULT NULL
7498 ,p_targ_budget_version_id IN pa_budget_versions.budget_version_id%TYPE DEFAULT NULL
7499 ,p_src_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
7500 ,p_targ_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
7501 ,p_copy_people_flag IN VARCHAR2 := NULL
7502 ,p_copy_equip_flag IN VARCHAR2 := NULL
7503 ,p_copy_mat_item_flag IN VARCHAR2 := NULL
7504 ,p_copy_fin_elem_flag IN VARCHAR2 := NULL
7505 -- Added this field p_pji_rollup_required for the 4200168
7506 ,p_pji_rollup_required IN VARCHAR2 DEFAULT 'Y'
7507 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7508 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7509 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7510
7511 ) IS
7512 --Start of variables used for debugging
7513 l_return_status VARCHAR2(1);
7514 l_msg_count NUMBER := 0;
7515 l_msg_data VARCHAR2(2000);
7516 l_data VARCHAR2(2000);
7517 l_msg_index_out NUMBER;
7518 l_debug_mode VARCHAR2(30);
7519 l_debug_level3 CONSTANT NUMBER :=3;
7520 l_debug_level5 CONSTANT NUMBER :=5;
7521 --End of variables used for debugging
7522 l_adj_percent NUMBER;
7523 i NUMBER;
7524 j NUMBER;
7525 l_row_count NUMBER;
7526 l_src_budget_version_id pa_budget_versions.budget_version_id%TYPE;
7527 l_targ_budget_version_id pa_budget_versions.budget_version_id%TYPE;
7528 l_ra_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7529 l_project_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7530 l_temp_ra_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7531 l_calc_ra_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7532 l_temp_proj_assmt_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7533 l_temp_planning_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
7534 l_temp_planning_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE() ;
7535 l_quantity_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7536 l_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
7537 l_module_name VARCHAR2(100):='pa.fp_planning_txn_pub.copy_planning_transactions';
7538 l_resource_rec_tbl PA_TASK_ASSIGNMENT_UTILS.l_resource_rec_tbl_type;
7539 l_planning_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
7540 l_planning_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
7541 l_schedule_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
7542 l_schedule_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
7543 l_calculate_flag VARCHAR2(1);
7544 l_projfunc_currency_code pa_projects_all.project_currency_code%TYPE;
7545 l_proj_curr_code pa_projects_all.projfunc_currency_code%TYPE;
7546 l_spread_amt_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE:= SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
7547
7548 -- Declared for Bug 3615617
7549 l_resource_list_member_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7550
7551 l_tot_rc_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
7552 l_pji_rollup_required VARCHAR2(1);
7553
7554 --Code addition for bug#4200168 starts here.
7555 TYPE l_txn_curr_code_table IS TABLE OF PA_BUDGET_LINES.TXN_CURRENCY_CODE%type
7556 INDEX BY BINARY_INTEGER;
7557
7558 l_txn_curr_code_tbl l_txn_curr_code_table;
7559
7560 l_proj_fp_options_id pa_proj_fp_options.proj_fp_options_id%type;
7561 l_project_id pa_proj_fp_options.project_id%type;
7562 l_fin_plan_type_id pa_proj_fp_options.fin_plan_type_id%type;
7563 l_pc pa_projects_all.project_currency_code%type;
7564 l_pfc pa_projects_all.projfunc_currency_code%type;
7565 --Code addition for bug#4200168 ends here.
7566
7567 l_fp_cols_rec pa_fp_gen_amount_utils.fp_cols; -- IPM
7568 l_resource_class_code VARCHAR2(30);
7569 l_exp_type VARCHAR2(30);
7570 l_inv_item_id NUMBER;
7571 l_res_rate_based_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE:=SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
7572
7573 CURSOR c_calc_api_param_csr
7574 IS
7575 SELECT pfrmt.source_res_assignment_id
7576 ,pfrmt.target_res_assignment_id
7577 FROM pa_fp_ra_map_tmp pfrmt;
7578
7579 c_calc_api_param_rec c_calc_api_param_csr%ROWTYPE;
7580
7581 l_rbs_diff_flag VARCHAR2(1);
7582 --Bug 4097749
7583 l_named_role_tbl SYSTEM.pa_varchar2_80_tbl_type:=SYSTEM.pa_varchar2_80_tbl_type();
7584
7585 BEGIN
7586 IF l_debug_mode = 'Y' THEN
7587 pa_debug.g_err_stage:='In copy planning txn';
7588 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7589 END IF;
7590 --dbms_output.put_line('in copy plan txn1');
7591 x_msg_count := 0;
7592 x_return_status := FND_API.G_RET_STS_SUCCESS;
7593
7594 SAVEPOINT copy_plan_txn;
7595
7596 --Added this if for the bug 4200168
7597 IF p_pji_rollup_required = 'Y' THEN
7598 l_pji_rollup_required := 'Y';
7599 ELSE
7600 l_pji_rollup_required := 'N';
7601 END IF;
7602
7603 pa_task_assignment_utils.g_require_progress_rollup := 'N';
7604
7605
7606 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
7607 l_debug_mode := NVL(l_debug_mode, 'Y');
7608
7609 -- Set curr function
7610 IF l_debug_mode = 'Y' THEN
7611 pa_debug.set_curr_function(
7612 p_function =>'plan_txn_pub.copy_plan_txn'
7613 ,p_debug_mode => l_debug_mode );
7614
7615 pa_debug.g_err_stage:='Validating input parameters';
7616 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7617 END IF;
7618
7619 IF p_src_version_id_tbl.count <> p_targ_version_id_tbl.count THEN
7620
7621 IF l_debug_mode = 'Y' THEN
7622 pa_debug.g_err_stage:='No of elements in p_src_version_id_tbl is not same as p_targ_version_id_tbl';
7623 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7624 END IF;
7625
7626 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7627 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
7628
7629 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7630
7631 END IF;
7632
7633 --If the tables are empty then return
7634 IF p_src_version_id_tbl.count=0 THEN
7635
7636 IF l_debug_mode = 'Y' THEN
7637
7638 pa_debug.g_err_stage:='The input tables are empty' ;
7639 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7640 pa_debug.reset_curr_function;
7641 END IF;
7642 RETURN;
7643
7644 END IF;
7645
7646 --Validate the input parameters
7647 IF p_context IS NULL OR
7648 p_src_project_id IS NULL OR
7649 p_target_project_id IS NULL THEN
7650
7651 IF l_debug_mode = 'Y' THEN
7652 pa_debug.g_err_stage:='p_context is '||p_context;
7653 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7654 END IF;
7655
7656 IF l_debug_mode = 'Y' THEN
7657 pa_debug.g_err_stage:='p_src_project_id is '||p_src_project_id;
7658 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7659 END IF;
7660
7661 IF l_debug_mode = 'Y' THEN
7662 pa_debug.g_err_stage:='p_target_project_id is '||p_target_project_id;
7663 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7664 END IF;
7665
7666 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7667 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
7668
7669 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7670
7671 END IF;
7672
7673
7674 --Initialise the variables the should be passed as parameters in other APIs
7675 IF p_src_project_id<>p_target_project_id THEN
7676 l_adj_percent := 0.9999;
7677 l_targ_budget_version_id:=l_src_budget_version_id;
7678 ELSE
7679 l_adj_percent := 0;
7680 END IF;
7681
7682 --If context is WORKPLAN call the TA Validation API with the required parameters
7683 IF p_context=PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN OR
7684 p_context=PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
7685
7686 IF l_debug_mode = 'Y' THEN
7687 pa_debug.g_err_stage:='The calling context is workplan / task assignment p_src_version_id_tbl(1) '||p_src_version_id_tbl(1);
7688 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7689 END IF;
7690 --dbms_output.put_line('in copy plan txn2');
7691 --Derive the plan version id for the source and target element version ids
7692 SELECT pbv.budget_version_id
7693 INTO l_src_budget_version_id
7694 FROM pa_struct_task_wbs_v pt,
7695 pa_budget_versions pbv
7696 WHERE pbv.project_structure_version_id= pt.parent_structure_version_id
7697 AND pt.element_version_id=p_src_version_id_tbl(1)
7698 AND pbv.wp_version_flag='Y';
7699
7700 IF l_debug_mode = 'Y' THEN
7701 pa_debug.g_err_stage:='The calling context is workplan / task assignment p_targ_version_id_tbl(1) '||p_targ_version_id_tbl(1);
7702 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7703 END IF;
7704
7705
7706 --dbms_output.put_line('in copy plan txn2.5');
7707 SELECT pbv.budget_version_id
7708 INTO l_targ_budget_version_id
7709 FROM pa_budget_versions pbv
7710 ,pa_struct_task_wbs_v pt
7711 WHERE pt.element_version_id=p_targ_version_id_tbl(1)
7712 AND pbv.project_structure_version_id=pt.parent_structure_version_id
7713 AND pbv.wp_version_flag='Y';
7714
7715 --CALL THE TA VALIDATION API
7716 IF l_debug_mode = 'Y' THEN
7717 pa_debug.g_err_stage:='The calling context is workplan / task assignment';
7718 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7719 END IF;
7720 --dbms_output.put_line('p_targ_version_id_tbl.count is '||p_targ_version_id_tbl.count);
7721
7722 --This value will be used only when the x_calculate_flag of the below validate api is
7723 --returned as 'N'
7724 l_adj_percent := 0;
7725
7726 --Added x_rbs_diff_flag for bug 3974569. This flag indicates that the the source/target resource assignments
7727 --being copied might not map to the same rbs_element_id. If this is passed as Y it means that
7728 ----> validate_copy_assignment has called RBS mapping API and
7729 ----> While copying the resource assignments rbs_element_id should be taken from pa_rbs_plans_out_tmp
7730 pa_task_assignment_utils.validate_copy_assignment
7731 ( p_copy_external_flag => p_copy_external_flag --Included this parameter for bug 3841130
7732 ,p_src_project_id => p_src_project_id
7733 ,p_target_project_id => p_target_project_id
7734 ,p_src_elem_ver_id_tbl => p_src_version_id_tbl
7735 ,p_targ_elem_ver_id_tbl => p_targ_version_id_tbl
7736 ,p_copy_people_flag => p_copy_people_flag
7737 ,p_copy_equip_flag => p_copy_equip_flag
7738 ,p_copy_mat_item_flag => p_copy_mat_item_flag
7739 ,p_copy_fin_elem_flag => p_copy_fin_elem_flag
7740 ,x_resource_rec_tbl => l_resource_rec_tbl
7741 ,x_calculate_flag => l_calculate_flag
7742 ,x_rbs_diff_flag => l_rbs_diff_flag
7743 ,x_return_status => x_return_status);
7744
7745 --dbms_output.put_line('l_resource_rec_tbl.count is '||l_resource_rec_tbl.count);
7746 --dbms_output.put_line('l_resource_rec_tbl.count is '||l_resource_rec_tbl(1).planning_start_date);
7747 --dbms_output.put_line('l_resource_rec_tbl.count is '||l_resource_rec_tbl(1).planning_end_date);
7748 --dbms_output.put_line('l_calculate_flag is '||l_calculate_flag);
7749 --This code is for debugging only. Should be removed later
7750 IF l_debug_mode = 'Y' THEN
7751
7752 pa_debug.g_err_stage:='validate_copy_assignment returned error '||x_return_status;
7753 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7754
7755 END IF;
7756
7757 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7758
7759 IF l_debug_mode = 'Y' THEN
7760
7761 pa_debug.g_err_stage:='validate_copy_assignment returned error';
7762 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7763
7764 END IF;
7765 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7766
7767 END IF;
7768
7769 IF l_resource_rec_tbl.COUNT =0 THEN
7770 IF l_debug_mode = 'Y' THEN
7771
7772 pa_debug.g_err_stage:='Validate API returned 0 records in the res rec table-- returning';
7773 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7774 pa_debug.reset_curr_function;
7775 END IF;
7776 RETURN;
7777 END IF;
7778
7779 --Extend the pl/sql tables
7780 l_ra_id_tbl.extend(l_resource_rec_tbl.last);
7781 l_planning_start_date_tbl.extend(l_resource_rec_tbl.last);
7782 l_planning_end_date_tbl.extend(l_resource_rec_tbl.last);
7783 l_schedule_start_date_tbl.extend(l_resource_rec_tbl.last);
7784 l_schedule_end_date_tbl.extend(l_resource_rec_tbl.last);
7785 l_project_assignment_id_tbl.extend(l_resource_rec_tbl.last);
7786 l_resource_list_member_id_tbl.extend(l_resource_rec_tbl.last); -- Bug 3615617
7787 --Bug 4097749
7788 l_named_role_tbl.extend(l_resource_rec_tbl.last);
7789
7790 --Copy the records from pl/sql table to local pl/sql tbls
7791 FOR i IN l_resource_rec_tbl.first..l_resource_rec_tbl.last LOOP
7792
7793 l_ra_id_tbl(i):=l_resource_rec_tbl(i).resource_assignment_id;
7794 l_planning_start_date_tbl(i):=l_resource_rec_tbl(i).planning_start_date;
7795 l_planning_end_date_tbl(i):=l_resource_rec_tbl(i).planning_end_date;
7796 l_schedule_start_date_tbl(i):=l_resource_rec_tbl(i).schedule_start_date;
7797 l_schedule_end_date_tbl(i):=l_resource_rec_tbl(i).schedule_end_date;
7798 l_project_assignment_id_tbl(i):=l_resource_rec_tbl(i).project_assignment_id;
7799 l_resource_list_member_id_tbl(i):=l_resource_rec_tbl(i).resource_list_member_id; -- Bug 3615617
7800 --Bug 4097749
7801 l_named_role_tbl(i):=l_resource_rec_tbl(i).named_role;
7802
7803 END LOOP;
7804
7805 END IF;
7806
7807 IF l_debug_mode = 'Y' THEN
7808 pa_debug.g_err_stage:='Calling pa_fp_copy_from_pkg.create_res_task_maps '||l_ra_id_tbl.last;
7809 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7810 END IF;
7811 --dbms_output.put_line('calling create res task maps');
7812
7813 --Call the API to create the mapping between source and target version ids.
7814 pa_fp_copy_from_pkg.create_res_task_maps(
7815 p_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
7816 ,p_src_ra_id_tbl => l_ra_id_tbl
7817 ,p_src_elem_ver_id_tbl => p_src_version_id_tbl
7818 ,p_targ_elem_ver_id_tbl => p_targ_version_id_tbl
7819 ,p_targ_proj_assmt_id_tbl => l_project_assignment_id_tbl
7820 ,p_targ_rlm_id_tbl => l_resource_list_member_id_tbl -- Bug 3615617
7821 ,p_planning_start_date_tbl=> l_planning_start_date_tbl
7822 ,p_planning_end_date_tbl => l_planning_end_date_tbl
7823 ,p_schedule_start_date_tbl=> l_schedule_start_date_tbl
7824 ,p_schedule_end_date_tbl => l_schedule_end_date_tbl
7825 ,x_return_status => x_return_status
7826 ,x_msg_count => x_msg_count
7827 ,x_msg_data => x_msg_data);
7828
7829
7830
7831 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7832
7833 IF l_debug_mode = 'Y' THEN
7834
7835 pa_debug.g_err_stage:='create_res_task_maps returned error';
7836 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7837
7838 END IF;
7839 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7840
7841 END IF;
7842
7843
7844 IF l_debug_mode = 'Y' THEN
7845 pa_debug.g_err_stage:='Calling PA_FP_COPY_FROM_PKG.Copy_Resource_Assignments';
7846 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7847 END IF;
7848
7849 --dbms_output.put_line('calling copy res assmts S '||l_src_budget_version_id ||' T '||l_targ_budget_version_id );
7850 --Call the API to copy the resource assignments for the target version
7851 PA_FP_COPY_FROM_PKG.Copy_Resource_Assignments(
7852 p_source_plan_version_id => l_src_budget_version_id
7853 ,p_target_plan_version_id => l_targ_budget_version_id
7854 ,p_adj_percentage => l_adj_percent
7855 ,p_rbs_map_diff_flag => l_rbs_diff_flag --For Bug 3974569
7856 --Bug 4200168
7857 ,p_calling_context => 'WORKPLAN'
7858 ,x_return_status => x_return_status
7859 ,x_msg_count => x_msg_count
7860 ,x_msg_data => x_msg_data);
7861
7862 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7863
7864 IF l_debug_mode = 'Y' THEN
7865
7866 pa_debug.g_err_stage:='Copy_Resource_Assignments returned error';
7867 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
7868
7869 END IF;
7870 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7871
7872 END IF;
7873
7874 -- IPM changes - rollup amounts in new entity
7875 -- Call the UTIL API to get the financial plan info l_fp_cols_rec
7876 -- Bug 5070740 - moved this to rollup into entity BEFORE calling calculate
7877
7878 pa_fp_gen_amount_utils.get_plan_version_dtls
7879 (p_project_id => p_target_project_id,
7880 p_budget_version_id => l_targ_budget_version_id,
7881 x_fp_cols_rec => l_fp_cols_rec,
7882 x_return_status => x_return_status,
7883 x_msg_count => x_msg_count,
7884 x_msg_data => x_msg_data);
7885
7886 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7887
7888 IF l_debug_mode = 'Y' THEN
7889 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
7890 print_msg(pa_debug.g_err_stage,l_module_name);
7891 END IF;
7892 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7893 END IF;
7894
7895 IF l_calculate_flag = 'Y' then
7896
7897 -- IPM changes - populate tmp table to use for rollup
7898 -- Bug 5034507: Delete temp table before inserting new records
7899 DELETE pa_resource_asgn_curr_tmp;
7900
7901 -- For bug 5017855, ensure that the combinations of
7902 -- (resource_assignment_id, txn_currency_code) are distinct.
7903 -- Bug 5042399: Copy Source override rates to the temp table for Target resources.
7904 -- Bug 5070740: Need to copy override rates before calculate is called
7905 INSERT INTO pa_resource_asgn_curr_tmp (
7906 RESOURCE_ASSIGNMENT_ID,
7907 TXN_CURRENCY_CODE,
7908 TXN_RAW_COST_RATE_OVERRIDE,
7909 TXN_BURDEN_COST_RATE_OVERRIDE,
7910 TXN_BILL_RATE_OVERRIDE )
7911 SELECT DISTINCT
7912 ra.RESOURCE_ASSIGNMENT_ID,
7913 src_rbc.txn_currency_code,
7914 src_rbc.TXN_RAW_COST_RATE_OVERRIDE,
7915 src_rbc.TXN_BURDEN_COST_RATE_OVERRIDE,
7916 src_rbc.TXN_BILL_RATE_OVERRIDE
7917 FROM pa_resource_asgn_curr src_rbc,
7918 pa_fp_ra_map_tmp map,
7919 --pa_budget_lines bl
7920 pa_resource_assignments ra
7921 WHERE ra.budget_version_id =l_targ_budget_version_id
7922 -- AND src_rbc.budget_version_id = l_src_budget_version_id
7923 AND map.target_res_assignment_id = ra.resource_assignment_id
7924 AND src_rbc.resource_assignment_id = map.source_res_assignment_id;
7925 -- AND src_rbc.txn_currency_code = bl.txn_currency_code;
7926
7927 -- Call maintain_data to copy override rates before calling calculate
7928 pa_res_asg_currency_pub.maintain_data(
7929 p_fp_cols_rec => l_fp_cols_rec,
7930 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
7931 p_rollup_flag => 'N',
7932 p_version_level_flag => 'N',
7933 p_called_mode => 'SELF_SERVICE',
7934 x_return_status => x_return_status,
7935 x_msg_count => x_msg_count,
7936 x_msg_data => x_msg_data
7937 );
7938
7939 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7940
7941 IF l_debug_mode = 'Y' THEN
7942 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
7943 print_msg(pa_debug.g_err_stage,l_module_name);
7944 END IF;
7945 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7946 END IF;
7947 -- END Bug 5070740
7948
7949 --Bug 4097749. Update the resource assigments created above with the named_role attribute returned by
7950 --the TA validate API
7951 IF l_debug_mode = 'Y' THEN
7952 pa_debug.g_err_stage:='About to update named role/parent assignment id in pa_resource_assignments';
7953 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
7954 END IF;
7955
7956 --Bug 4215676 . Modified the update sql for performance issues.
7957 --The parent assignment id should be NULLED out.Please see the comment on exaclty similar DML UPDATE below
7958
7959 -- IPM - get resource rate based flag
7960 l_res_rate_based_flag_tbl.extend(l_ra_id_tbl.last);
7961 FOR i IN 1..l_ra_id_tbl.COUNT LOOP
7962 SELECT rlm.resource_class_code, rlm.inventory_item_id,
7963 rlm.expenditure_type
7964 INTO l_resource_class_code, l_inv_item_id, l_exp_type
7965 FROM pa_resource_list_members rlm,
7966 pa_resource_assignments ra
7967 WHERE ra.resource_assignment_id = l_ra_id_tbl(i)
7968 AND ra.resource_list_member_id = rlm.resource_list_member_id;
7969
7970 IF l_resource_class_code IN ('PEOPLE', 'EQUIPMENT') THEN
7971 l_res_rate_based_flag_tbl(i) := 'Y';
7972 ELSIF l_resource_class_code = 'MATERIAL_ITEMS' AND
7973 l_inv_item_id IS NOT NULL THEN
7974 BEGIN
7975 SELECT 'Y'
7976 INTO l_res_rate_based_flag_tbl(i)
7977 FROM DUAL
7978 WHERE NOT EXISTS (select 'Y'
7979 from mtl_system_items_b item,
7980 mtl_units_of_measure meas
7981 where item.inventory_item_id = l_inv_item_id
7982 and item.primary_uom_code = meas.uom_code
7983 and meas.uom_class = 'Currency');
7984 EXCEPTION WHEN OTHERS THEN
7985 l_res_rate_based_flag_tbl(i) := 'N';
7986 END;
7987 ELSIF l_resource_class_code in ('MATERIAL_ITEMS',
7988 'FINANCIAL_ELEMENTS') AND
7989 l_inv_item_id IS NULL AND l_exp_type IS NOT NULL THEN
7990 BEGIN
7991 SELECT c.cost_rate_flag
7992 INTO l_res_rate_based_flag_tbl(i)
7993 FROM pa_expenditure_types c
7994 WHERE c.expenditure_type = l_exp_type;
7995 EXCEPTION WHEN OTHERS THEN
7996 l_res_rate_based_flag_tbl(i) := 'N';
7997 END;
7998 END IF;
7999 END LOOP;
8000 FORALL i IN 1..l_ra_id_tbl.COUNT
8001 UPDATE pa_resource_assignments
8002 SET named_role = l_named_role_tbl(i),
8003 parent_assignment_id=NULL,
8004 /* bug fix:5135927 : Added nvl for l_res_rate_base_flag */
8005 resource_rate_based_flag =NVL(l_res_rate_based_flag_tbl(i),'N')--IPM
8006 WHERE parent_assignment_id = l_ra_id_tbl(i)
8007 AND budget_version_id = l_targ_budget_version_id;
8008
8009 IF l_debug_mode = 'Y' THEN
8010 pa_debug.g_err_stage:='Done with updating named role/parent assignment id in pa_resource_assignments';
8011 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8012 END IF;
8013
8014
8015 IF l_debug_mode = 'Y' THEN
8016 pa_debug.g_err_stage:='Calling Calculate API';
8017 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8018 END IF;
8019 --dbms_output.put_line('in cal=y');
8020
8021 pa_budget_utils.Get_Project_Currency_Info
8022 ( p_project_id => p_target_project_id
8023 , x_projfunc_currency_code => l_projfunc_currency_code
8024 , x_project_currency_code => l_proj_curr_code
8025 , x_txn_currency_code => l_projfunc_currency_code
8026 , x_msg_count => x_msg_count
8027 , x_msg_data => x_msg_data
8028 , x_return_status => x_return_status);
8029
8030 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8031 IF l_debug_mode = 'Y' THEN
8032 pa_debug.g_err_stage:='Cpa_budget_utils.Get_Project_Currency_Info returned error';
8033 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8034 END IF;
8035 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8036 END IF;
8037
8038 i:=1;
8039 FOR c_calc_api_param_rec IN c_calc_api_param_csr LOOP
8040
8041 --dbms_output.put_line (' i is '||i);
8042 IF NOT l_calc_ra_id_tbl.EXISTS(i) THEN
8043 l_quantity_tbl.extend(1);
8044 l_tot_rc_tbl.extend(1);
8045 l_currency_code_tbl.extend(1);
8046 l_calc_ra_id_tbl.extend(1);
8047 l_spread_amt_flag_tbl.extend(1);
8048 END IF;
8049 -- Select the quantity for the resource assignment and the txn currency code. Note that
8050 -- for task assignments there will be only one currency code across all the budget lines
8051 -- in the ra id
8052 -- Changed the logic of populating quantity and raw cost to loop thru l_resource_rec_tbl
8053 -- instead of using tbls cached by ra id for bug 3678314
8054 FOR kk IN 1..l_resource_rec_tbl.COUNT LOOP
8055
8056 IF c_calc_api_param_rec.source_res_assignment_id = l_resource_rec_tbl(kk).resource_assignment_id THEN
8057
8058 l_quantity_tbl(i):=l_resource_rec_tbl(kk).total_quantity;
8059 l_tot_rc_tbl(i):=l_resource_rec_tbl(kk).total_raw_cost;
8060 EXIT;
8061
8062 END IF;
8063
8064 END LOOP;
8065
8066 l_calc_ra_id_tbl(i):=c_calc_api_param_rec.target_res_assignment_id;
8067 l_spread_amt_flag_tbl(i):='Y';
8068
8069 BEGIN
8070 SELECT nvl(txn_currency_code,l_proj_curr_code)--For workplan txn curr code can be null
8071 INTO l_currency_code_tbl(i)
8072 FROM pa_budget_lines
8073 WHERE resource_assignment_id=
8074 c_calc_api_param_rec.source_res_assignment_id -- bug 3781932 l_calc_ra_id_tbl(i)
8075 AND ROWNUM=1;
8076 EXCEPTION
8077 WHEN NO_DATA_FOUND THEN
8078 l_currency_code_tbl(i):=l_proj_curr_code;
8079 END;
8080 i:=i+1;
8081 END LOOP;
8082 l_quantity_tbl.DELETE(i,l_quantity_tbl.count);
8083 l_tot_rc_tbl.DELETE(i,l_tot_rc_tbl.count);
8084 l_currency_code_tbl.DELETE(i,l_currency_code_tbl.count);
8085 l_calc_ra_id_tbl.DELETE(i,l_calc_ra_id_tbl.count);
8086 l_spread_amt_flag_tbl.DELETE(i,l_spread_amt_flag_tbl.count);
8087 --dbms_output.put_line('Calling the calculate api'||l_calc_ra_id_tbl.count);
8088 --dbms_output.put_line('Calling the calculate api'||l_calc_ra_id_tbl(1));
8089 --dbms_output.put_line('Calling the calculate api'||l_calc_ra_id_tbl(2));
8090
8091 PA_FP_CALC_PLAN_PKG.calculate(
8092 p_project_id => p_target_project_id
8093 ,p_budget_version_id => l_targ_budget_version_id
8094 --,p_refresh_rates_flag => 'N' --need to pass any variables that are passed from calling API
8095 --,p_refresh_conv_rates_flag => 'N' --need to pass any variables that are passed from calling API
8096 --,p_spread_required_flag => 'N'
8097 --,p_conv_rates_required_flag => 'N'
8098 ,p_source_context => 'RESOURCE_ASSIGNMENT'
8099 ,p_resource_assignment_tab => l_calc_ra_id_tbl
8100 ,p_delete_budget_lines_tab => SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
8101 -- bug fix:5726773 ,p_spread_amts_flag_tab => l_spread_amt_flag_tbl
8102 ,p_txn_currency_code_tab => l_currency_code_tbl
8103 ,p_txn_currency_override_tab => SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
8104 ,p_total_qty_tab => l_quantity_tbl
8105 ,p_total_raw_cost_tab => l_tot_rc_tbl
8106 ,p_total_burdened_cost_tab => SYSTEM.PA_NUM_TBL_TYPE()
8107 ,p_total_revenue_tab => SYSTEM.PA_NUM_TBL_TYPE()
8108 ,p_raw_cost_rate_tab => SYSTEM.PA_NUM_TBL_TYPE()
8109 ,p_rw_cost_rate_override_tab => SYSTEM.PA_NUM_TBL_TYPE()
8110 ,p_b_cost_rate_tab => SYSTEM.PA_NUM_TBL_TYPE()
8111 ,p_b_cost_rate_override_tab => SYSTEM.PA_NUM_TBL_TYPE()
8112 ,p_bill_rate_tab => SYSTEM.PA_NUM_TBL_TYPE()
8113 ,p_bill_rate_override_tab => SYSTEM.PA_NUM_TBL_TYPE()
8114 ,p_line_start_date_tab => SYSTEM.PA_DATE_TBL_TYPE()
8115 ,p_line_end_date_tab => SYSTEM.PA_DATE_TBL_TYPE()
8116 ,p_rollup_required_flag => l_pji_rollup_required
8117 ,p_raTxn_rollup_api_call_flag => 'N' -- Added for bug 5017855
8118 ,x_return_status => x_return_status
8119 ,x_msg_count => x_msg_count
8120 ,x_msg_data => x_msg_data);
8121
8122 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8123
8124 IF l_debug_mode = 'Y' THEN
8125
8126 pa_debug.g_err_stage:='PA_FP_CALC_PLAN_PKG.calculate returned error';
8127 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8128
8129 END IF;
8130 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8131
8132 END IF;
8133
8134
8135 ELSE--Calculate Flag is N
8136
8137 --dbms_output.put_line('in cal<>y');
8138 IF l_debug_mode = 'Y' THEN
8139 pa_debug.g_err_stage:='Calling PA_FP_COPY_FROM_PKG.Copy_Budget_Lines';
8140 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8141 END IF;
8142
8143 PA_FP_COPY_FROM_PKG.Copy_Budget_Lines(
8144 p_source_plan_version_id => l_src_budget_version_id
8145 ,p_target_plan_version_id => l_targ_budget_version_id
8146 ,p_adj_percentage => l_adj_percent
8147 ,x_return_status => x_return_status
8148 ,x_msg_count => x_msg_count
8149 ,x_msg_data => x_msg_data);
8150
8151
8152
8153 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8154
8155 IF l_debug_mode = 'Y' THEN
8156
8157 pa_debug.g_err_stage:='Copy_Budget_Lines returned error';
8158 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8159
8160 END IF;
8161 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8162
8163 END IF;
8164
8165 --Bug 4097749. Update the resource assigments created above with the named_role attribute returned by
8166 --the TA validate API
8167 IF l_debug_mode = 'Y' THEN
8168 pa_debug.g_err_stage:='About to update named role/parent assignment id in pa_resource_assignments';
8169 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8170 END IF;
8171
8172 --Bug 4215676 . Modified the update sql for performance issues.
8173 --The parent assignment id should be NULLED out since (copy resource assignments copies the source
8174 --resource assignment to parent assignment id while copying the source to target)
8175 ---->Copy_Budget_Lines which is called above will consider all the resource assignments with Non Null
8176 ---->parent assignment id as candidates for copy. If parent_assignemt_id is not nulled out
8177 ---->then in future copy task flows the resource assignments which were are copied now will also be considered
8178 ---->as NEW and copy_budget_lines will try to insert them which will violate the unique constraint
8179 ---->on pa_budget_lines
8180 FORALL i IN 1..l_ra_id_tbl.COUNT
8181 UPDATE pa_resource_assignments
8182 SET named_role = l_named_role_tbl(i),
8183 parent_assignment_id=NULL
8184 WHERE parent_assignment_id = l_ra_id_tbl(i)
8185 AND budget_version_id = l_targ_budget_version_id;
8186
8187 IF l_debug_mode = 'Y' THEN
8188 pa_debug.g_err_stage:='Done with updating named role/parent assignment id in pa_resource_assignments';
8189 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8190 END IF;
8191
8192
8193 --Code changes for bug#4200168 starts here.
8194 --for the budget lines that get copied as a result of tasks copying,
8195 -- we need to ensure all the txn currencies are available in pa fp txn ccurrencies.
8196 IF p_src_project_id<>p_target_project_id THEN
8197
8198 -- Bug 4872216 changes - performance fix to remove full table
8199 -- scan on PA_FP_TXN_CURRENCIES
8200 SELECT DISTINCT BL.TXN_CURRENCY_CODE
8201 BULK COLLECT
8202 INTO l_txn_curr_code_tbl
8203 FROM PA_BUDGET_LINES BL
8204 WHERE BL.BUDGET_VERSION_ID = l_targ_budget_version_id
8205 AND NOT EXISTS
8206 (SELECT 1
8207 FROM PA_FP_TXN_CURRENCIES TC
8208 ,PA_PROJ_FP_OPTIONS pfo -- Bug 4872216
8209 WHERE tc.fin_plan_version_id =
8210 l_targ_budget_version_id
8211 AND pfo.project_id = p_target_project_id --4872216
8212 AND pfo.fin_plan_version_id =
8213 tc.fin_plan_version_id --4872216
8214 AND pfo.proj_fp_options_id =
8215 tc.proj_fp_options_id --4872216
8216 AND TC.txn_currency_code = BL.txn_currency_code);
8217
8218 select proj_fp_options_id, project_id, fin_plan_type_id
8219 INTO l_proj_fp_options_id, l_project_id, l_fin_plan_type_id
8220 from pa_proj_fp_options
8221 WHERE fin_plan_version_id = l_targ_budget_version_id;
8222
8223 select project_currency_code, projfunc_currency_code
8224 INTO l_pc, l_pfc
8225 from pa_projects_all
8226 WHERE project_id = l_project_id;
8227
8228 FORALL j IN 1..l_txn_curr_code_tbl.count
8229 INSERT INTO PA_FP_TXN_CURRENCIES
8230 (
8231 FP_TXN_CURRENCY_ID,
8232 PROJ_FP_OPTIONS_ID,
8233 PROJECT_ID,
8234 FIN_PLAN_TYPE_ID,
8235 FIN_PLAN_VERSION_ID,
8236 TXN_CURRENCY_CODE,
8237 DEFAULT_REV_CURR_FLAG,
8238 DEFAULT_COST_CURR_FLAG,
8239 DEFAULT_ALL_CURR_FLAG,
8240 PROJECT_CURRENCY_FLAG,
8241 PROJFUNC_CURRENCY_FLAG,
8242 CREATION_DATE ,
8243 CREATED_BY ,
8244 LAST_UPDATE_LOGIN ,
8245 LAST_UPDATED_BY ,
8246 LAST_UPDATE_DATE
8247 )
8248 VALUES
8249 (
8250 PA_FP_TXN_CURRENCIES_S.NEXTVAL,
8251 l_proj_fp_options_id ,
8252 l_project_id,
8253 l_fin_plan_type_id,
8254 l_targ_budget_version_id,
8255 l_txn_curr_code_tbl(j),
8256 'N',
8257 'N',
8258 'N',
8259 Decode(l_txn_curr_code_tbl(j),l_pc,'Y','N'),
8260 Decode(l_txn_curr_code_tbl(j),l_pfc,'Y','N'),
8261 sysdate,
8262 fnd_global.user_id,
8263 fnd_global.login_id,
8264 fnd_global.user_id,
8265 sysdate);
8266
8267 END IF; -- End of if p_src_project_id<>p_target_project_id
8268 --Code changes for bug#4200168 ends here.
8269
8270 --Call the multi currency conversion PKG if required i.e. if pc and pfc should be recalculated
8271 IF l_adj_percent <> 0 THEN
8272 PA_FP_MULTI_CURRENCY_PKG.convert_txn_currency (
8273 p_budget_version_id => l_targ_budget_version_id
8274 ,p_entire_version => 'Y'
8275 ,x_return_status => x_return_status
8276 ,x_msg_count => x_msg_count
8277 ,x_msg_data => x_msg_data );
8278
8279 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8280
8281 IF l_debug_mode = 'Y' THEN
8282
8283 pa_debug.g_err_stage:='convert_txn_currency returned error';
8284 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
8285
8286 END IF;
8287
8288 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
8289 END IF;
8290
8291 END IF;
8292
8293 --Call the reportiong lines API. This can called unconditionally as the reporting lines should always be
8294 --created for Workplan and Task Assignments versions.
8295
8296 --Added the if condition for the bug 4200168
8297 IF l_pji_rollup_required = 'Y' THEN
8298
8299 PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api
8300 ( p_source => 'PA_FP_RA_MAP_TMP'
8301 ,p_budget_version_id => l_targ_budget_version_id
8302 ,x_return_status => x_return_status
8303 ,x_msg_data => x_msg_data
8304 ,x_msg_count => x_msg_count);
8305
8306 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8307
8308 IF l_debug_mode = 'Y' THEN
8309 pa_debug.g_err_stage:='PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api returned error';
8310 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
8311 END IF;
8312 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
8313 END IF;
8314
8315 END IF;
8316
8317 -- Added for bug 4492493, Updated for bug 5198662
8318 IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
8319 AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(p_target_project_id) = 'Y') OR
8320 (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
8321 AND pa_task_assignment_utils.g_require_progress_rollup = 'Y') THEN
8322
8323 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
8324 ( p_calling_context => 'ASGMT_PLAN_CHANGE'
8325 ,p_project_id => p_target_project_id
8326 ,p_structure_version_id => pa_project_structure_utils.get_latest_wp_version(p_target_project_id)
8327 ,p_pub_struc_ver_id => pa_project_structure_utils.get_latest_wp_version(p_target_project_id)
8328 ,x_return_status => x_return_status
8329 ,x_msg_data => x_msg_data
8330 ,x_msg_count => x_msg_count );
8331
8332 pa_task_assignment_utils.g_require_progress_rollup := 'N';
8333
8334 END IF;
8335
8336 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8337 IF l_debug_mode = 'Y' THEN
8338 pa_debug.g_err_stage:='Called API PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp';
8339 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.copy_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
8340 END IF;
8341
8342 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8343 END IF;
8344 --End bug 4492493
8345
8346 END IF;
8347
8348 -- IPM changes - populate tmp table to use for rollup
8349 -- Bug 5034507: Delete temp table before inserting new records
8350 DELETE pa_resource_asgn_curr_tmp;
8351
8352 -- For bug 5017855, ensure that the combinations of
8353 -- (resource_assignment_id, txn_currency_code) are distinct.
8354 -- Bug 5042399: Copy Source override rates to the temp table for Target resources.
8355 INSERT INTO pa_resource_asgn_curr_tmp (
8356 RESOURCE_ASSIGNMENT_ID,
8357 TXN_CURRENCY_CODE,
8358 TXN_RAW_COST_RATE_OVERRIDE,
8359 TXN_BURDEN_COST_RATE_OVERRIDE,
8360 TXN_BILL_RATE_OVERRIDE )
8361 SELECT DISTINCT
8362 ra.RESOURCE_ASSIGNMENT_ID,
8363 src_rbc.txn_currency_code,
8364 src_rbc.TXN_RAW_COST_RATE_OVERRIDE,
8365 src_rbc.TXN_BURDEN_COST_RATE_OVERRIDE,
8366 src_rbc.TXN_BILL_RATE_OVERRIDE
8367 FROM pa_resource_asgn_curr src_rbc,
8368 pa_fp_ra_map_tmp map,
8369 --pa_budget_lines bl
8370 pa_resource_assignments ra
8371 WHERE ra.budget_version_id =l_targ_budget_version_id
8372 -- AND src_rbc.budget_version_id = l_src_budget_version_id
8373 AND map.target_res_assignment_id = ra.resource_assignment_id
8374 AND src_rbc.resource_assignment_id = map.source_res_assignment_id;
8375 -- AND src_rbc.txn_currency_code = bl.txn_currency_code;
8376
8377 -- Bug 5070740: In case Calculate is called, need to call maintain_data
8378 -- API again to rollup amounts; in case Calculate is not called, calling
8379 -- maintain data once in this flow to copy overrides and rollup amounts.
8380 pa_res_asg_currency_pub.maintain_data(
8381 p_fp_cols_rec => l_fp_cols_rec,
8382 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
8383 p_rollup_flag => 'Y',
8384 p_version_level_flag => 'N',
8385 p_called_mode => 'SELF_SERVICE',
8386 x_return_status => x_return_status,
8387 x_msg_count => x_msg_count,
8388 x_msg_data => x_msg_data
8389 );
8390
8391 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8392
8393 IF l_debug_mode = 'Y' THEN
8394 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
8395 print_msg(pa_debug.g_err_stage,l_module_name);
8396 END IF;
8397 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8398 END IF;
8399
8400 IF l_debug_mode = 'Y' THEN
8401 pa_debug.g_err_stage:='Exiting copy_planning_transactions';
8402 print_msg(pa_debug.g_err_stage,l_module_name);
8403 -- reset curr function
8404 pa_debug.reset_curr_function;
8405 END IF;
8406 EXCEPTION
8407
8408 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
8409 l_msg_count := FND_MSG_PUB.count_msg;
8410 IF l_msg_count = 1 THEN
8411 PA_INTERFACE_UTILS_PUB.get_messages
8412 (p_encoded => FND_API.G_TRUE
8413 ,p_msg_index => 1
8414 ,p_msg_count => l_msg_count
8415 ,p_msg_data => l_msg_data
8416 ,p_data => l_data
8417 ,p_msg_index_out => l_msg_index_out);
8418
8419 x_msg_data := l_data;
8420 x_msg_count := l_msg_count;
8421 ELSE
8422 x_msg_count := l_msg_count;
8423 END IF;
8424
8425 x_return_status := FND_API.G_RET_STS_ERROR;
8426 ROLLBACK TO copy_plan_txn;
8427
8428 IF l_debug_mode = 'Y' THEN
8429 pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
8430 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
8431 -- reset curr function
8432 pa_debug.reset_curr_function;
8433 END IF;
8434 RETURN;
8435 WHEN Others THEN
8436 ROLLBACK TO copy_plan_txn;
8437 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8438 x_msg_count := 1;
8439 x_msg_data := SQLERRM;
8440
8441 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_planning_transaction_pub'
8442 ,p_procedure_name => 'copy_planning_transactions');
8443
8444 IF l_debug_mode = 'Y' THEN
8445 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
8446 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
8447 pa_debug.Reset_Curr_Function();
8448 END IF;
8449 RAISE;
8450 END copy_planning_transactions;
8451
8452
8453
8454 /*=====================================================================
8455 Procedure Name: delete_planning_transactions
8456 Purpose: This procedure should be called to delete planning
8457 transactions
8458 Valid values for p_context are 'BUDGET','FORECAST',
8459 'WORKPLAN' and 'TASK_ASSIGNMENT'
8460
8461 Valid values for p_task_or_res are 'TASKS' and
8462 'ASSIGNMENT'
8463
8464 In the context of 'TASK_ASSIGNMENT' the fields
8465 task_number and task_name are required in
8466 p_task_rec_tbl
8467
8468 If p_task_or_res is TASKS,
8469 p_element_version_id_tbl,p_task_number_tbl,
8470 p_task_name_tbl are used.
8471
8472 If p_task_or_res is ASSIGNMENT,
8473 p_resource_assignment_tbl is used
8474
8475 p_calling_module can be NULL or PROCESS_RES_CHG_DERV_CALC_PRMS. If passed as Y
8476 resource assignments will be deleted otherwise they
8477 will not be deleted.(Please note that budget lines will be deleted
8478 always irrespective of the value for this parameter).
8479 Please note that this parameter cannot be PROCESS_RES_CHG_DERV_CALC_PRMS
8480 when p_task_or_res is passed as TASKS
8481 Whenever p_calling_module is passed as PROCESS_RES_CHG_DERV_CALC_PRMS,
8482 the parameters p_task_id_tbl,p_resource_class_code_tbl
8483 p_rbs_element_id_tbl and p_rate_based_flag_tbl should ALSO be
8484 passed. These tbls must be equal in length to p_resource_assignment_tbl
8485 and should contain the task id, rbs element id and rate based flag
8486 for the resource assignment
8487
8488 Bug - 3719918. New param p_currency_code_tbl is added below
8489 When p_context - Budget/Forecast and p_task_or_res is Assignment then only the bugdet lines
8490 Corresponding to currency code passed will be deleted. After deleting of the budget lines
8491 the corresponding RA will only we deleted if the budget line count is 0 from the RA.
8492 p_calling_module will be'EDIT_PLAN' when called from edit plan pages.
8493
8494 =======================================================================*/
8495
8496 PROCEDURE delete_planning_transactions
8497 (
8498 p_context IN VARCHAR2
8499 ,p_calling_context IN VARCHAR2 DEFAULT NULL -- Added for Bug 6856934
8500 ,p_task_or_res IN VARCHAR2 DEFAULT 'TASKS'
8501 ,p_element_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
8502 ,p_task_number_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
8503 ,p_task_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
8504 ,p_resource_assignment_tbl IN SYSTEM.PA_NUM_TBL_TYPE DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
8505 --Introduced for bug 3589130. If this parameter is passed as Y then an error will be thrown
8506 --When its required to delete a resource assignment containing budget lines. This parameter
8507 --will be considered only for BUDGET and FORECAST context
8508 ,p_validate_delete_flag IN VARCHAR2 DEFAULT 'N'
8509 -- This param will be used for B/F Context. Bug - 3719918
8510 ,p_currency_code_tbl IN SYSTEM.PA_VARCHAR2_15_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
8511 ,p_calling_module IN VARCHAR2 DEFAULT NULL
8512 ,p_task_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
8513 ,p_rbs_element_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
8514 ,p_rate_based_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
8515 ,p_resource_class_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
8516 --For Bug 3937716. Calls to PJI and budget version rollup APIs will be skipped if p_rollup_required_flag is N.
8517 ,p_rollup_required_flag IN VARCHAR2 DEFAULT 'Y'
8518 ,p_pji_rollup_required IN VARCHAR2 DEFAULT 'Y' /* Bug 4200168 */
8519 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8520 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8521 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8522 )
8523 IS
8524 --Start of variables used for debugging
8525 l_return_status VARCHAR2(1);
8526 l_msg_count NUMBER := 0;
8527 l_msg_data VARCHAR2(2000);
8528 l_data VARCHAR2(2000);
8529 l_msg_index_out NUMBER;
8530 l_debug_mode VARCHAR2(30);
8531 --End of variables used for debugging
8532
8533 l_module_name VARCHAR2(100):='PAFPPTPB.delete_planning_transactions';
8534 l_delete_task_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8535 l_delete_assmt_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8536 l_wp_version_flag VARCHAR2(1);
8537 l_ta_display_flag VARCHAR2(1);
8538
8539 l_period_name_tbl SYSTEM.pa_varchar2_30_tbl_type;
8540 l_start_date_tbl SYSTEM.pa_date_tbl_type;
8541 l_end_date_tbl SYSTEM.pa_date_tbl_type;
8542 l_txn_currency_code_tbl SYSTEM.pa_varchar2_15_tbl_type;
8543 l_txn_raw_cost_tbl SYSTEM.pa_num_tbl_type;
8544 l_txn_burdened_cost_tbl SYSTEM.pa_num_tbl_type;
8545 l_txn_revenue_tbl SYSTEM.pa_num_tbl_type;
8546 l_project_raw_cost_tbl SYSTEM.pa_num_tbl_type;
8547 l_project_burdened_cost_tbl SYSTEM.pa_num_tbl_type;
8548 l_project_revenue_tbl SYSTEM.pa_num_tbl_type;
8549 l_raw_cost_tbl SYSTEM.pa_num_tbl_type;
8550 l_burdened_cost_tbl SYSTEM.pa_num_tbl_type;
8551 l_revenue_tbl SYSTEM.pa_num_tbl_type;
8552 l_cost_rejection_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
8553 l_revenue_rejection_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
8554 l_burden_rejection_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
8555 l_other_rejection_code SYSTEM.pa_varchar2_30_tbl_type;
8556 l_pc_cur_conv_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
8557 l_pfc_cur_conv_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
8558 l_resource_assignment_id_tbl SYSTEM.pa_num_tbl_type;
8559 l_quantity_tbl SYSTEM.pa_num_tbl_type;
8560 l_task_id_tbl SYSTEM.pa_num_tbl_type:=SYSTEM.pa_num_tbl_type();
8561 l_rbs_element_id_tbl SYSTEM.pa_num_tbl_type:=SYSTEM.pa_num_tbl_type();
8562 l_res_class_code_tbl SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
8563 l_rate_based_flag_tbl SYSTEM.pa_varchar2_1_tbl_type:=SYSTEM.pa_varchar2_1_tbl_type();
8564 l_task_id_in_pra_tbl SYSTEM.pa_num_tbl_type;
8565 l_rbs_element_id_in_pra_tbl SYSTEM.pa_num_tbl_type;
8566 l_res_class_code_in_pra_tbl SYSTEM.pa_varchar2_30_tbl_type;
8567 l_rate_based_flag_in_pra_tbl SYSTEM.pa_varchar2_1_tbl_type;
8568 l_ra_id_in_pra_tbl SYSTEM.pa_num_tbl_type;
8569 --Bug 4951422
8570 l_task_assmt_ids_tbl SYSTEM.pa_num_tbl_type;
8571
8572 l_counter NUMBER;
8573 l_ra_index NUMBER;
8574 l_budget_version_id pa_budget_versions.budget_version_id%TYPE;
8575 l_ci_id pa_budget_versions.ci_id%TYPE;
8576 l_exists VARCHAR2(1);
8577 SKIP_LOOP EXCEPTION;
8578 i NUMBER;
8579 l_cntr NUMBER;
8580
8581 l_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
8582 l_task_id PA_RESOURCE_ASSIGNMENTS.TASK_ID%TYPE;
8583 l_rbs_element_id PA_RESOURCE_ASSIGNMENTS.RBS_ELEMENT_ID%TYPE;
8584 l_res_class_code PA_RESOURCE_ASSIGNMENTS.RESOURCE_CLASS_CODE%TYPE;
8585 l_rate_based_flag PA_RESOURCE_ASSIGNMENTS.RATE_BASED_FLAG%TYPE;
8586 l_mode varchar2(12) := null; --Bug 4160258
8587
8588
8589 l_project_id pa_projects_all.project_id%TYPE; --Bug 4218331
8590 l_project_currency_code VARCHAR2(30);
8591 l_fp_cols_rec pa_fp_gen_amount_utils.fp_cols; -- IPM
8592
8593 BEGIN
8594
8595 delete pa_resource_asgn_curr_tmp;
8596 x_msg_count := 0;
8597 x_return_status := FND_API.G_RET_STS_SUCCESS;
8598
8599 pa_task_assignment_utils.g_require_progress_rollup := 'N';
8600
8601 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
8602 l_debug_mode := NVL(l_debug_mode, 'N');
8603
8604 -- Set curr function
8605 IF l_debug_mode = 'Y' THEN
8606 pa_debug.set_curr_function(
8607 p_function =>'PA_FP_PLAN_TXN_PUB.delete_planning_transactions'
8608 ,p_debug_mode => l_debug_mode );
8609 END IF;
8610
8611 IF l_debug_mode = 'Y' THEN
8612 /** printing all in params */
8613 pa_debug.g_err_stage := 'p_context=>'|| p_context||']p_task_or_res =>'||p_task_or_res||']';
8614 pa_debug.g_err_stage := pa_debug.g_err_stage||'p_validate_delete_flag=>'||p_validate_delete_flag||']';
8615 pa_debug.g_err_stage := pa_debug.g_err_stage||'p_calling_module=>'||p_calling_module||']';
8616 pa_debug.g_err_stage := pa_debug.g_err_stage||'RollupReqFlg=>'||p_rollup_required_flag||']';
8617 pa_debug.g_err_stage := pa_debug.g_err_stage||'PJiRollupFlg=>'||p_pji_rollup_required||']';
8618 pa_debug.g_err_stage := pa_debug.g_err_stage||'ElemVerTbCt['||p_element_version_id_tbl.count||']';
8619 pa_debug.g_err_stage := pa_debug.g_err_stage||'RaIdCt['||p_resource_assignment_tbl.count||']';
8620 pa_debug.g_err_stage := pa_debug.g_err_stage||'TaskIdCt['||p_task_id_tbl.count||']';
8621 pa_debug.g_err_stage := pa_debug.g_err_stage||'rbsElmCt['||p_rbs_element_id_tbl.count||']';
8622 print_msg(pa_debug.g_err_stage,l_module_name);
8623 End If;
8624 -------------------------------------------------------------------------------------------
8625 -- Extending all table lengths to the permissible values they would take.
8626 -------------------------------------------------------------------------------------------
8627 IF l_debug_mode = 'Y' THEN
8628 pa_debug.g_err_stage:='Extending all table lengths to the permissible values they would take';
8629 print_msg(pa_debug.g_err_stage,l_module_name);
8630 END IF;
8631
8632 IF l_debug_mode = 'Y' THEN
8633 pa_debug.g_err_stage:='Extending all table lengths to the permissible values they would take';
8634 print_msg(pa_debug.g_err_stage,l_module_name);
8635 END IF;
8636
8637 IF p_element_version_id_tbl.COUNT > 0 THEN
8638 l_delete_task_flag_tbl.extend(p_element_version_id_tbl.LAST);
8639 END IF;
8640
8641 IF p_resource_assignment_tbl.COUNT > 0 THEN
8642 l_delete_assmt_flag_tbl.extend(p_resource_assignment_tbl.LAST);
8643 END IF;
8644
8645 ----------------------------------------------------
8646 -- Validating input parameters
8647 ----------------------------------------------------
8648 IF l_debug_mode = 'Y' THEN
8649 pa_debug.g_err_stage:='Validating input parameters';
8650 print_msg(pa_debug.g_err_stage,l_module_name);
8651 END IF;
8652
8653 --Check for mandatory parameters
8654 IF p_context IS NULL OR
8655 p_task_or_res IS NULL THEN
8656
8657 IF l_debug_mode = 'Y' THEN
8658 pa_debug.g_err_stage:='p_context Is'||p_context;
8659 pa_debug.g_err_stage:=pa_debug.g_err_stage||': p_task_or_res Is'||p_task_or_res;
8660 print_msg(pa_debug.g_err_stage,l_module_name);
8661 END IF;
8662
8663 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8664 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
8665 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8666 END IF;
8667
8668 IF p_task_or_res = 'TASKS' AND p_calling_module='PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
8669 IF l_debug_mode = 'Y' THEN
8670 pa_debug.g_err_stage:='calling module is PROCESS_RES_CHG_DERV_CALC_PRMS when p_task_or_res is TASKS';
8671 print_msg(pa_debug.g_err_stage,l_module_name);
8672 END IF;
8673 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8674 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
8675 p_token1 => 'PROCEDURENAME',
8676 p_value1 => 'PAFPPTPB.Delete_planning_transactions');
8677 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8678
8679 END IF;
8680 -- Bug 3546208
8681 IF ( p_task_or_res = 'TASKS'
8682 AND p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
8683 PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
8684 IF l_debug_mode = 'Y' THEN
8685 pa_debug.g_err_stage:='P_task_or_res is Task for B/F Context';
8686 print_msg(pa_debug.g_err_stage,l_module_name);
8687 END IF;
8688 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8689 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
8690 p_token1 => 'PROCEDURENAME',
8691 p_value1 => 'PAFPPTPB.Delete_planning_transactions',
8692 p_token2 => 'STAGE',
8693 p_value2 => 'Invalid Data : B/F - TASK');
8694 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8695 END IF;
8696
8697 IF p_calling_module='PROCESS_RES_CHG_DERV_CALC_PRMS' AND
8698 (p_task_id_tbl.COUNT <> p_resource_assignment_tbl.COUNT OR
8699 p_rbs_element_id_tbl.COUNT <> p_resource_assignment_tbl.COUNT OR
8700 p_rate_based_flag_tbl.COUNT <> p_resource_assignment_tbl.COUNT OR
8701 p_resource_class_code_tbl.COUNT <> p_resource_assignment_tbl.COUNT ) THEN
8702
8703 IF l_debug_mode = 'Y' THEN
8704 pa_debug.g_err_stage:='p_resource_assignment_tbl.COUNT IS '||p_resource_assignment_tbl.COUNT ;
8705 print_msg(pa_debug.g_err_stage,l_module_name);
8706
8707 pa_debug.g_err_stage:='p_task_id_tbl.COUNT IS '||p_task_id_tbl.COUNT ;
8708 print_msg(pa_debug.g_err_stage,l_module_name);
8709
8710 pa_debug.g_err_stage:='p_rbs_element_id_tbl.COUNT IS '||p_rbs_element_id_tbl.COUNT ;
8711 print_msg(pa_debug.g_err_stage,l_module_name);
8712
8713 pa_debug.g_err_stage:='p_rate_based_flag_tbl.COUNT IS '||p_rate_based_flag_tbl.COUNT ;
8714 print_msg(pa_debug.g_err_stage,l_module_name);
8715
8716 pa_debug.g_err_stage:='p_resource_class_code_tbl.COUNT IS '||p_resource_class_code_tbl.COUNT ;
8717 print_msg(pa_debug.g_err_stage,l_module_name);
8718
8719 pa_debug.g_err_stage:='p_resource_assignment_tbl.COUNT IS '||p_resource_assignment_tbl.COUNT ;
8720 print_msg(pa_debug.g_err_stage,l_module_name);
8721
8722 END IF;
8723 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8724 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
8725 p_token1 => 'PROCEDURENAME',
8726 p_value1 => 'PAFPPTPB.Delete_planning_transactions');
8727 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8728
8729 END IF;
8730
8731
8732 --Throw an error if the input tables do not have same no of elements
8733 IF (p_task_or_res = 'TASKS' AND
8734 p_element_version_id_tbl.count =0) OR
8735 (p_task_or_res = 'ASSIGNMENT' AND
8736 p_resource_assignment_tbl.count =0) THEN
8737
8738 IF l_debug_mode = 'Y' THEN
8739 pa_debug.g_err_stage:='The input table is empty. returning';
8740 print_msg(pa_debug.g_err_stage,l_module_name);
8741 pa_debug.reset_curr_function;
8742 END IF;
8743 RETURN;
8744 END IF;
8745
8746 IF p_calling_module='PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
8747 l_ra_id_in_pra_tbl :=p_resource_assignment_tbl;
8748 l_task_id_in_pra_tbl :=p_task_id_tbl;
8749 l_rbs_element_id_in_pra_tbl :=p_rbs_element_id_tbl;
8750 l_res_class_code_in_pra_tbl :=p_resource_class_code_tbl;
8751 l_rate_based_flag_in_pra_tbl :=p_rate_based_flag_tbl;
8752 END IF;
8753
8754 --Bug 4951422. Initialize these tbls to avoid "ORA-06531: Reference to uninitialized collection" error
8755 --when the element version id tbl passed do not have corresponding resource assignment ids
8756 l_resource_assignment_id_tbl := SYSTEM.pa_num_tbl_type();
8757 l_ra_id_in_pra_tbl := SYSTEM.pa_num_tbl_type();
8758
8759 /** when the context is Task assignment Call the Validation API
8760 * Modified Delete logic for Bug 3808720. Since Validate Delete Assignments API
8761 * needs to be called for WORKPLAN context as well. Merginng Delete Logic for
8762 * G_CALLING_MODULE_TASK and G_CALLING_MODULE_WORKPLAN below.
8763 */
8764 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
8765 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN --{
8766
8767 IF l_debug_mode = 'Y' THEN
8768 pa_debug.g_err_stage:='The calling context is task assignment. Calling the validation API';
8769 print_msg(pa_debug.g_err_stage,l_module_name);
8770 END IF;
8771
8772 PA_TASK_ASSIGNMENT_UTILS.VALIDATE_DELETE_ASSIGNMENT
8773 ( p_context => p_context
8774 ,p_calling_context => p_calling_context -- Added for Bug 6856934
8775 ,p_task_or_res => p_task_or_res
8776 ,p_elem_ver_id_tbl => p_element_version_id_tbl
8777 ,p_task_name_tbl => p_task_name_tbl
8778 ,p_task_number_tbl => p_task_number_tbl
8779 ,p_resource_assignment_id_tbl => p_resource_assignment_tbl
8780 ,x_delete_task_flag_tbl => l_delete_task_flag_tbl
8781 ,x_delete_asgmt_flag_tbl => l_delete_assmt_flag_tbl
8782 ,x_task_assmt_ids_tbl => l_task_assmt_ids_tbl --Bug 4951422
8783 ,x_return_status => x_return_status);
8784
8785 IF l_debug_mode = 'Y' THEN
8786 pa_debug.g_err_stage:= 'After calling Validate OutParms: l_delete_task_flag_tblCount[';
8787 pa_debug.g_err_stage:= pa_debug.g_err_stage||l_delete_task_flag_tbl.count||']';
8788 pa_debug.g_err_stage:= pa_debug.g_err_stage||'l_delete_assmt_flag_tblcount[';
8789 pa_debug.g_err_stage:= pa_debug.g_err_stage||l_delete_assmt_flag_tbl.count||']';
8790 pa_debug.g_err_stage:= pa_debug.g_err_stage||'l_task_assmt_ids_tblCount[';
8791 pa_debug.g_err_stage:= pa_debug.g_err_stage||l_task_assmt_ids_tbl.count||']';
8792 pa_debug.g_err_stage:= pa_debug.g_err_stage||'RetSts['||x_return_status||']';
8793 print_msg(pa_debug.g_err_stage,l_module_name);
8794 End If;
8795
8796 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8797 IF l_debug_mode = 'Y' THEN
8798 pa_debug.g_err_stage:='The calling context is task assignment. Calling the validation API';
8799 print_msg(pa_debug.g_err_stage,l_module_name);
8800 END IF;
8801 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8802 End If;
8803 END IF; --}
8804
8805 /* Bug fix:5349668: Get project,budget,ciid details upfront based on
8806 * in put params, If budget version is null then just return as there
8807 * nothing to delete any budget lines or resource assignments.
8808 * Note: executing this sql at many places to get budget version is failing with
8809 * ORA-No data found error
8810 */ --{
8811 IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
8812 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN --{
8813
8814 If p_task_or_res = 'TASKS' --- bug 6076066: added the checking of p_task_res to the existing IF loop
8815 and p_element_version_id_tbl.count > 0
8816 and NVL(p_element_version_id_tbl(1),0) <> 0
8817 and p_element_version_id_tbl(1) <> fnd_api.g_miss_num then
8818
8819 /* Bug fix: LOOP is required to get the budget version id. when multiple tasks are deleted
8820 * some of the task may not have assignments, but some may have assignments
8821 * without loop, the process skips all the records
8822 */
8823
8824 FOR i IN p_element_version_id_tbl.FIRST .. p_element_version_id_tbl.LAST LOOP
8825 l_cntr := i;
8826 BEGIN
8827 IF l_debug_mode = 'Y' THEN
8828 pa_debug.g_err_stage:=l_cntr||'..Getting budget version id from p_element_version_id_tbl';
8829 pa_debug.g_err_stage:=pa_debug.g_err_stage||'['||p_element_version_id_tbl(l_cntr)||']';
8830 print_msg(pa_debug.g_err_stage,l_module_name);
8831 END IF;
8832 SELECT pbv.project_id
8833 ,pbv.budget_version_id
8834 ,pbv.ci_id
8835 INTO l_project_id
8836 ,l_budget_version_id
8837 ,l_ci_id
8838 FROM pa_resource_assignments pra
8839 ,pa_budget_Versions pbv
8840 WHERE pbv.budget_version_id=pra.budget_version_id
8841 AND pbv.wp_version_flag='Y'
8842 AND pra.wbs_element_version_id=p_element_version_id_tbl(l_cntr)
8843 AND rownum < 2 ;
8844
8845 EXIT;
8846 EXCEPTION
8847 WHEN NO_DATA_FOUND THEN
8848 IF l_debug_mode = 'Y' THEN
8849 pa_debug.g_err_stage:='No Data Found: No budget Exists for this Task Element Version Ids';
8850 print_msg(pa_debug.g_err_stage,l_module_name);
8851 END IF;
8852 NULL;
8853 END;
8854 END LOOP;
8855
8856 /* check if any planning resource exists for l_task_assmt_ids_tbl passed from
8857 * validate_delete_assignment api.
8858 */
8859 IF l_budget_version_id is NULL and
8860 l_task_assmt_ids_tbl is NOT NULL and -- Bug 5408333 fix - ORA-06531: Reference to uninitialized collection
8861 l_task_assmt_ids_tbl.COUNT > 0 Then
8862 BEGIN
8863 IF l_debug_mode = 'Y' THEN
8864 pa_debug.g_err_stage:='2..Getting budget version id from l_task_assmt_ids_tbl';
8865 pa_debug.g_err_stage:=pa_debug.g_err_stage||'['||l_task_assmt_ids_tbl(1)||']';
8866 print_msg(pa_debug.g_err_stage,l_module_name);
8867 END IF;
8868 SELECT pbv.project_id
8869 ,pbv.budget_version_id
8870 ,pbv.ci_id
8871 INTO l_project_id
8872 ,l_budget_version_id
8873 ,l_ci_id
8874 FROM pa_resource_assignments pra
8875 ,pa_budget_Versions pbv
8876 WHERE pbv.budget_version_id=pra.budget_version_id
8877 AND pra.resource_assignment_id =l_task_assmt_ids_tbl(1);
8878 EXCEPTION
8879 WHEN NO_DATA_FOUND THEN
8880 IF l_debug_mode = 'Y' THEN
8881 pa_debug.g_err_stage:='No Data Found: No budget Exists for this Task Assignment Ids';
8882 print_msg(pa_debug.g_err_stage,l_module_name);
8883 END IF;
8884 NULL;
8885 END;
8886
8887 End If;
8888 END IF; --}
8889 END IF; -- Bug 5408333 fix - To handle FINPLAN case in which the above
8890 -- 2 SQL statements will not populate l_budget_version_id
8891
8892 IF l_budget_version_id is NULL -- Bug 5408333
8893 and p_resource_assignment_tbl.COUNT > 0
8894 and NVL(p_resource_assignment_tbl(1),0) <> 0
8895 and p_resource_assignment_tbl(1) <> fnd_api.g_miss_num Then
8896
8897 BEGIN
8898
8899 IF l_debug_mode = 'Y' THEN
8900 pa_debug.g_err_stage:='2..Getting budget version id from p_resource_assignment_tbl';
8901 pa_debug.g_err_stage:=pa_debug.g_err_stage||'['||p_resource_assignment_tbl(1)||']';
8902 print_msg(pa_debug.g_err_stage,l_module_name);
8903 END IF;
8904 SELECT pbv.project_id
8905 ,pbv.budget_version_id
8906 ,pbv.ci_id
8907 INTO l_project_id
8908 ,l_budget_version_id
8909 ,l_ci_id
8910 FROM pa_resource_assignments pra
8911 ,pa_budget_Versions pbv
8912 WHERE pbv.budget_version_id=pra.budget_version_id
8913 AND pra.resource_assignment_id =p_resource_assignment_tbl(1);
8914 EXCEPTION
8915 WHEN NO_DATA_FOUND THEN
8916 IF l_debug_mode = 'Y' THEN
8917 pa_debug.g_err_stage:='No Data Found: No budget Exists for this resource Assignment Ids';
8918 print_msg(pa_debug.g_err_stage,l_module_name);
8919 END IF;
8920 NULL;
8921 END;
8922
8923 END IF; --}
8924
8925 IF l_debug_mode = 'Y' THEN
8926 pa_debug.g_err_stage:='ProjId['||l_project_id||']BudgetVers['||l_budget_version_id||']Ciid['||l_ci_id||']';
8927 print_msg(pa_debug.g_err_stage,l_module_name);
8928 END IF;
8929
8930 If l_budget_version_id is NULL Then
8931 IF l_debug_mode = 'Y' THEN
8932 pa_debug.g_err_stage:='Exiting delete_planning_transactions as No budget version exists';
8933 print_msg(pa_debug.g_err_stage,l_module_name);
8934 pa_debug.reset_curr_function;
8935 END IF;
8936 RETURN;
8937 End If;
8938 /* End of Bug fix:5349668: */
8939
8940 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
8941 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
8942
8943 IF p_task_or_res = 'TASKS' THEN
8944
8945 IF l_delete_task_flag_tbl.count=0 THEN
8946 IF l_debug_mode = 'Y' THEN
8947 pa_debug.g_err_stage:='No elements in the l_delete_task_flag_tbl';
8948 print_msg(pa_debug.g_err_stage,l_module_name);
8949 pa_debug.reset_curr_function;
8950 END IF;
8951 RETURN;
8952 END IF;
8953
8954 IF l_delete_task_flag_tbl.count<>p_element_version_id_tbl.count THEN
8955 IF l_debug_mode = 'Y' THEN
8956 pa_debug.g_err_stage:='Num elements in l_delete_task_flag_tbl, p_element_version_id_tbl dont match';
8957 print_msg(pa_debug.g_err_stage,l_module_name);
8958 END IF;
8959 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8960 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
8961 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8962 END IF;
8963
8964 --Bug 4951422. Validate_Delete_Assignment returns the correct resource assignments that should be deleted.
8965 --Note:
8966 --that wbs_elememnt_version_id will be populated only for Workplan versions and hence all the checks done in
8967 --the commented SQL are already done in that API
8968 IF l_task_assmt_ids_tbl.COUNT > 0 Then --{
8969 IF l_debug_mode = 'Y' THEN
8970 pa_debug.g_err_stage:='Deleting all budget lines based on l_task_assmt_ids_tbl';
8971 print_msg(pa_debug.g_err_stage,l_module_name);
8972 END IF;
8973 FORALL i IN 1..l_task_assmt_ids_tbl.COUNT
8974 DELETE
8975 FROM pa_budget_lines pbl
8976 WHERE pbl.resource_assignment_id=l_task_assmt_ids_tbl(i)
8977 RETURNING
8978 pbl.period_name,
8979 pbl.start_date,
8980 pbl.end_date,
8981 pbl.txn_currency_code,
8982 -pbl.txn_raw_cost,
8983 -pbl.txn_burdened_cost,
8984 -pbl.txn_revenue,
8985 -pbl.project_raw_cost,
8986 -pbl.project_burdened_cost,
8987 -pbl.project_revenue,
8988 -pbl.raw_cost,
8989 -pbl.burdened_cost,
8990 -pbl.revenue,
8991 -pbl.quantity,
8992 pbl.cost_rejection_code ,
8993 pbl.revenue_rejection_code ,
8994 pbl.burden_rejection_code ,
8995 pbl.other_rejection_code ,
8996 pbl.pc_cur_conv_rejection_code,
8997 pbl.pfc_cur_conv_rejection_code,
8998 pbl.resource_assignment_id
8999 BULK COLLECT INTO
9000 l_period_name_tbl,
9001 l_start_date_tbl,
9002 l_end_date_tbl,
9003 l_txn_currency_code_tbl,
9004 l_txn_raw_cost_tbl,
9005 l_txn_burdened_cost_tbl,
9006 l_txn_revenue_tbl,
9007 l_project_raw_cost_tbl,
9008 l_project_burdened_cost_tbl,
9009 l_project_revenue_tbl,
9010 l_raw_cost_tbl,
9011 l_burdened_cost_tbl,
9012 l_revenue_tbl,
9013 l_quantity_tbl,
9014 l_cost_rejection_code_tbl,
9015 l_revenue_rejection_code_tbl,
9016 l_burden_rejection_code_tbl,
9017 l_other_rejection_code,
9018 l_pc_cur_conv_rej_code_tbl,
9019 l_pfc_cur_conv_rej_code_tbl,
9020 l_resource_assignment_id_tbl;
9021
9022 IF l_debug_mode = 'Y' THEN
9023 pa_debug.g_err_stage:='Deleting all resource assignments for the tasks for which the fla is passed as Y';
9024 print_msg(pa_debug.g_err_stage,l_module_name);
9025 END IF;
9026
9027 -- IPM changes - populate tmp table to use for deletion later
9028 IF l_resource_assignment_id_tbl.COUNT > 0 THEN
9029 FORALL i IN l_resource_assignment_id_tbl.first ..
9030 l_resource_assignment_id_tbl.last
9031 INSERT INTO pa_resource_asgn_curr_tmp
9032 (RA_TXN_ID
9033 ,RESOURCE_ASSIGNMENT_ID
9034 ,TXN_CURRENCY_CODE
9035 ,DELETE_FLAG
9036 )
9037 SELECT pa_resource_asgn_curr_s.nextval
9038 ,l_resource_assignment_id_tbl(i)
9039 ,l_txn_currency_code_tbl(i)
9040 ,'Y'
9041 FROM DUAL;
9042 END IF;
9043
9044 --Bug 4951422. Validate_Delete_Assignment returns the correct resource assignments that should be deleted.
9045 --Note:
9046 --that wbs_elememnt_version_id will be populated only for Workplan versions and hence all the checks done in
9047 --the commented SQL are already done in that API
9048 FORALL i IN 1..l_task_assmt_ids_tbl.COUNT
9049 DELETE
9050 FROM pa_resource_assignments pra
9051 WHERE resource_assignment_id=l_task_assmt_ids_tbl(i)
9052 RETURNING
9053 pra.resource_assignment_id,
9054 pra.task_id,
9055 pra.rbs_element_id,
9056 pra.resource_class_code,
9057 pra.rate_based_flag
9058 BULK COLLECT INTO
9059 l_ra_id_in_pra_tbl,
9060 l_task_id_in_pra_tbl,
9061 l_rbs_element_id_in_pra_tbl,
9062 l_res_class_code_in_pra_tbl,
9063 l_rate_based_flag_in_pra_tbl;
9064
9065 -- IPM changes - populate tmp table to use for deletion later
9066 -- hr_utility.trace('RM DEL4');
9067 IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
9068 FORALL i IN l_ra_id_in_pra_tbl.first ..
9069 l_ra_id_in_pra_tbl.last
9070 INSERT INTO pa_resource_asgn_curr_tmp
9071 (RA_TXN_ID
9072 ,RESOURCE_ASSIGNMENT_ID
9073 -- ,TXN_CURRENCY_CODE
9074 ,DELETE_FLAG
9075 )
9076 SELECT pa_resource_asgn_curr_s.nextval
9077 ,l_ra_id_in_pra_tbl(i)
9078 -- ,l_txn_currency_code_tbl(i)
9079 ,'Y'
9080 FROM DUAL;
9081 END IF;
9082 End if; --}
9083
9084 ELSIF p_task_or_res = 'ASSIGNMENT' THEN
9085
9086 IF l_delete_assmt_flag_tbl.count=0 THEN
9087 IF l_debug_mode = 'Y' THEN
9088 pa_debug.g_err_stage:='No elements in the l_delete_assmt_flag_tbl';
9089 print_msg(pa_debug.g_err_stage,l_module_name);
9090 pa_debug.reset_curr_function;
9091 END IF;
9092 RETURN;
9093 END IF;
9094
9095 IF l_delete_assmt_flag_tbl.count<>p_resource_assignment_tbl.count THEN
9096 IF l_debug_mode = 'Y' THEN
9097 pa_debug.g_err_stage:='No of elements in l_delete_task_flag_tbl ';
9098 pa_debug.g_err_stage:=pa_debug.g_err_stage||'and p_resource_assignment_tbl dont match';
9099 print_msg(pa_debug.g_err_stage,l_module_name);
9100 END IF;
9101 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9102 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
9103 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9104 END IF;
9105
9106 IF l_debug_mode = 'Y' THEN
9107 pa_debug.g_err_stage:='Deleting all budget lines for the res assmts for Assignment Context';
9108 print_msg(pa_debug.g_err_stage,l_module_name);
9109 END IF;
9110
9111 FORALL i IN l_delete_assmt_flag_tbl.first..l_delete_assmt_flag_tbl.last
9112 DELETE
9113 FROM pa_budget_lines pbl
9114 WHERE resource_assignment_id=p_resource_assignment_tbl(i)
9115 AND l_delete_assmt_flag_tbl(i)='Y'
9116 AND ( nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' OR
9117 (init_quantity is NULL AND
9118 txn_init_raw_cost is NULL AND
9119 txn_init_burdened_cost is NULL AND
9120 txn_init_revenue is NULL)
9121 )
9122 RETURNING
9123 pbl.period_name,
9124 pbl.start_date,
9125 pbl.end_date,
9126 pbl.txn_currency_code,
9127 -pbl.txn_raw_cost,
9128 -pbl.txn_burdened_cost,
9129 -pbl.txn_revenue,
9130 -pbl.project_raw_cost,
9131 -pbl.project_burdened_cost,
9132 -pbl.project_revenue,
9133 -pbl.raw_cost,
9134 -pbl.burdened_cost,
9135 -pbl.revenue,
9136 -pbl.quantity,
9137 pbl.cost_rejection_code ,
9138 pbl.revenue_rejection_code ,
9139 pbl.burden_rejection_code ,
9140 pbl.other_rejection_code ,
9141 pbl.pc_cur_conv_rejection_code,
9142 pbl.pfc_cur_conv_rejection_code,
9143 pbl.resource_assignment_id
9144 BULK COLLECT INTO
9145 l_period_name_tbl,
9146 l_start_date_tbl,
9147 l_end_date_tbl,
9148 l_txn_currency_code_tbl,
9149 l_txn_raw_cost_tbl,
9150 l_txn_burdened_cost_tbl,
9151 l_txn_revenue_tbl,
9152 l_project_raw_cost_tbl,
9153 l_project_burdened_cost_tbl,
9154 l_project_revenue_tbl,
9155 l_raw_cost_tbl,
9156 l_burdened_cost_tbl,
9157 l_revenue_tbl,
9158 l_quantity_tbl,
9159 l_cost_rejection_code_tbl,
9160 l_revenue_rejection_code_tbl,
9161 l_burden_rejection_code_tbl,
9162 l_other_rejection_code,
9163 l_pc_cur_conv_rej_code_tbl,
9164 l_pfc_cur_conv_rej_code_tbl,
9165 l_resource_assignment_id_tbl;
9166
9167 IF l_debug_mode = 'Y' THEN
9168 pa_debug.g_err_stage:='Deleting all resource assignments for the tasks for which the fla is passed as Y';
9169 print_msg(pa_debug.g_err_stage,l_module_name);
9170 END IF;
9171
9172 -- IPM changes - populate tmp table to use for deletion later
9173 -- hr_utility.trace('RM DEL6');
9174 IF l_resource_assignment_id_tbl.COUNT > 0 THEN
9175 FORALL i IN l_resource_assignment_id_tbl.first ..
9176 l_resource_assignment_id_tbl.last
9177 INSERT INTO pa_resource_asgn_curr_tmp
9178 (RA_TXN_ID
9179 ,RESOURCE_ASSIGNMENT_ID
9180 -- ,TXN_CURRENCY_CODE
9181 ,DELETE_FLAG
9182 )
9183 SELECT pa_resource_asgn_curr_s.nextval
9184 ,l_resource_assignment_id_tbl(i)
9185 -- ,l_txn_currency_code_tbl(i)
9186 ,'Y'
9187 FROM DUAL;
9188 END IF;
9189
9190 IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
9191
9192 FORALL i IN l_delete_assmt_flag_tbl.first..l_delete_assmt_flag_tbl.last
9193 DELETE
9194 FROM pa_resource_assignments pra
9195 WHERE resource_assignment_id=p_resource_assignment_tbl(i)
9196 AND l_delete_assmt_flag_tbl(i)='Y'
9197 RETURNING
9198 pra.resource_assignment_id,
9199 pra.task_id,
9200 pra.rbs_element_id,
9201 pra.resource_class_code,
9202 pra.rate_based_flag
9203 BULK COLLECT INTO
9204 l_ra_id_in_pra_tbl,
9205 l_task_id_in_pra_tbl,
9206 l_rbs_element_id_in_pra_tbl,
9207 l_res_class_code_in_pra_tbl,
9208 l_rate_based_flag_in_pra_tbl;
9209
9210 -- IPM changes - populate tmp table to use for deletion later
9211 -- hr_utility.trace('RM DEL3');
9212 IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
9213 FORALL i IN l_ra_id_in_pra_tbl.first ..
9214 l_ra_id_in_pra_tbl.last
9215 INSERT INTO pa_resource_asgn_curr_tmp
9216 (RA_TXN_ID
9217 ,RESOURCE_ASSIGNMENT_ID
9218 -- ,TXN_CURRENCY_CODE
9219 ,DELETE_FLAG
9220 )
9221 SELECT pa_resource_asgn_curr_s.nextval
9222 ,l_ra_id_in_pra_tbl(i)
9223 -- ,l_project_currency_code
9224 ,'Y'
9225 FROM DUAL;
9226 END IF;
9227 END IF; -- IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
9228
9229 END IF;
9230
9231 ELSE --The context is not Task Assignment
9232 -- or Workplan -- Bug 3808720
9233
9234 IF p_task_or_res = 'TASKS' THEN
9235
9236 IF p_element_version_id_tbl.count=0 THEN
9237 IF l_debug_mode = 'Y' THEN
9238 pa_debug.g_err_stage:='No elements in the p_element_version_id_tbl';
9239 print_msg(pa_debug.g_err_stage,l_module_name);
9240 pa_debug.reset_curr_function;
9241 END IF;
9242 RETURN;
9243 END IF;
9244
9245
9246 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
9247 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST THEN
9248 l_wp_version_flag:='N';
9249 l_ta_display_flag:=null;
9250 /* ELSIF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
9251 l_wp_version_flag:='Y';
9252 l_ta_display_flag:='N'; */ --Bug 3808720
9253 END IF;
9254
9255 IF l_debug_mode = 'Y' THEN
9256 pa_debug.g_err_stage:='l_wp_version_flag IS '||l_wp_version_flag;
9257 print_msg(pa_debug.g_err_stage,l_module_name);
9258 END IF;
9259
9260
9261 IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
9262 PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
9263
9264 -- Bug Fix: 4569365. Removed MRC code.
9265 null;
9266 END IF;
9267
9268
9269 If l_budget_version_id is NOT NULL Then --Bug fix:5349668 --{
9270 IF l_debug_mode = 'Y' THEN
9271 pa_debug.g_err_stage:='2..Deleting budget lines based on Task element Version Ids';
9272 print_msg(pa_debug.g_err_stage,l_module_name);
9273 END IF;
9274 FORALL i IN p_element_version_id_tbl.first..p_element_version_id_tbl.last
9275 DELETE
9276 FROM pa_budget_lines pbl
9277 WHERE pbl.resource_assignment_id IN (SELECT pra.resource_assignment_id
9278 FROM pa_resource_assignments pra,
9279 pa_budget_versions pbv
9280 WHERE pra.budget_Version_id=pbv.budget_Version_id
9281 AND nvl(pbv.wp_version_flag,'N')=l_wp_version_flag
9282 AND pra.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
9283 AND pbv.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
9284 AND pra.wbs_element_version_id=p_element_version_id_tbl(i)
9285 AND nvl(l_ta_display_flag , '-99')=nvl(ta_display_flag,'-99'))
9286 AND pbl.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
9287 RETURNING
9288 pbl.period_name,
9289 pbl.start_date,
9290 pbl.end_date,
9291 pbl.txn_currency_code,
9292 -pbl.txn_raw_cost,
9293 -pbl.txn_burdened_cost,
9294 -pbl.txn_revenue,
9295 -pbl.project_raw_cost,
9296 -pbl.project_burdened_cost,
9297 -pbl.project_revenue,
9298 -pbl.raw_cost,
9299 -pbl.burdened_cost,
9300 -pbl.revenue,
9301 -pbl.quantity,
9302 pbl.cost_rejection_code ,
9303 pbl.revenue_rejection_code ,
9304 pbl.burden_rejection_code ,
9305 pbl.other_rejection_code ,
9306 pbl.pc_cur_conv_rejection_code,
9307 pbl.pfc_cur_conv_rejection_code,
9308 pbl.resource_assignment_id
9309 BULK COLLECT INTO
9310 l_period_name_tbl,
9311 l_start_date_tbl,
9312 l_end_date_tbl,
9313 l_txn_currency_code_tbl,
9314 l_txn_raw_cost_tbl,
9315 l_txn_burdened_cost_tbl,
9316 l_txn_revenue_tbl,
9317 l_project_raw_cost_tbl,
9318 l_project_burdened_cost_tbl,
9319 l_project_revenue_tbl,
9320 l_raw_cost_tbl,
9321 l_burdened_cost_tbl,
9322 l_revenue_tbl,
9323 l_quantity_tbl,
9324 l_cost_rejection_code_tbl,
9325 l_revenue_rejection_code_tbl,
9326 l_burden_rejection_code_tbl,
9327 l_other_rejection_code,
9328 l_pc_cur_conv_rej_code_tbl,
9329 l_pfc_cur_conv_rej_code_tbl,
9330 l_resource_assignment_id_tbl;
9331
9332 -- IPM changes - populate tmp table to use for deletion later
9333 -- hr_utility.trace('RM DEL5');
9334 IF l_resource_assignment_id_tbl.COUNT > 0 THEN
9335 FORALL i IN l_resource_assignment_id_tbl.first ..
9336 l_resource_assignment_id_tbl.last
9337 INSERT INTO pa_resource_asgn_curr_tmp
9338 (RA_TXN_ID
9339 ,RESOURCE_ASSIGNMENT_ID
9340 -- ,TXN_CURRENCY_CODE
9341 ,DELETE_FLAG
9342 )
9343 SELECT pa_resource_asgn_curr_s.nextval
9344 ,l_resource_assignment_id_tbl(i)
9345 -- ,l_txn_currency_code_tbl(i)
9346 ,'Y'
9347 FROM DUAL;
9348 END IF;
9349 End If; --}
9350
9351 IF l_debug_mode = 'Y' THEN
9352 pa_debug.g_err_stage:='Deleting all res assmts for which the flag is passed as Y';
9353 print_msg(pa_debug.g_err_stage,l_module_name);
9354 END IF;
9355
9356 If p_element_version_id_tbl.COUNT > 0 AND l_budget_version_id is NOT NULL Then --Bug fix:5349668 --{
9357 FORALL i IN p_element_version_id_tbl.first..p_element_version_id_tbl.last
9358 DELETE
9359 FROM pa_resource_assignments pra
9360 WHERE pra.wbs_element_version_id=p_element_version_id_tbl(i)
9361 AND EXISTS (SELECT 'X'
9362 FROM pa_budget_Versions pbv
9363 WHERE pbv.budget_version_id=pra.budget_Version_id
9364 AND pbv.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
9365 AND nvl(pbv.wp_version_flag,'N')=l_wp_version_flag
9366 AND nvl(l_ta_display_flag , '-99')=nvl(ta_display_flag,'-99'))
9367 AND pra.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
9368 RETURNING
9369 pra.resource_assignment_id,
9370 pra.task_id,
9371 pra.rbs_element_id,
9372 pra.resource_class_code,
9373 pra.rate_based_flag
9374 BULK COLLECT INTO
9375 l_ra_id_in_pra_tbl,
9376 l_task_id_in_pra_tbl,
9377 l_rbs_element_id_in_pra_tbl,
9378 l_res_class_code_in_pra_tbl,
9379 l_rate_based_flag_in_pra_tbl;
9380
9381 -- IPM changes - populate tmp table to use for deletion later
9382 -- hr_utility.trace('RM DEL8');
9383 IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
9384 FORALL i IN l_ra_id_in_pra_tbl.first ..
9385 l_ra_id_in_pra_tbl.last
9386 INSERT INTO pa_resource_asgn_curr_tmp
9387 (RA_TXN_ID
9388 ,RESOURCE_ASSIGNMENT_ID
9389 -- ,TXN_CURRENCY_CODE
9390 ,DELETE_FLAG
9391 )
9392 SELECT pa_resource_asgn_curr_s.nextval
9393 ,l_ra_id_in_pra_tbl(i)
9394 -- ,l_project_currency_code
9395 ,'Y'
9396 FROM DUAL;
9397 END IF;
9398 End If; --}
9399
9400
9401 ELSIF p_task_or_res = 'ASSIGNMENT' THEN
9402
9403 IF p_resource_assignment_tbl.count=0 THEN
9404 IF l_debug_mode = 'Y' THEN
9405 pa_debug.g_err_stage:='No elements in the p_resource_assignment_tbl';
9406 print_msg(pa_debug.g_err_stage,l_module_name);
9407 pa_debug.reset_curr_function;
9408 END IF;
9409 RETURN;
9410 END IF;
9411
9412 l_currency_code_tbl.extend(p_resource_assignment_tbl.COUNT);
9413
9414 IF p_currency_code_tbl.COUNT > 0 THEN --If Currnecy Code is Passed.
9415 IF p_resource_assignment_tbl.count <> p_currency_code_tbl.COUNT THEN --Count Should be equal to ra id count
9416 IF l_debug_mode = 'Y' THEN
9417 pa_debug.g_err_stage:='Count Mismatch for currency code and Reource Assignment';
9418 print_msg(pa_debug.g_err_stage,l_module_name);
9419 END IF;
9420 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9421 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
9422 p_token1 => 'PROCEDURENAME',
9423 p_value1 => 'PAFPPTPB.Delete_planning_transactions',
9424 p_token2 => 'STAGE',
9425 p_value2 => 'Curr Code - RA Mismatch');
9426 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9427 END IF;
9428
9429 l_currency_code_tbl := p_currency_code_tbl;
9430
9431 END IF;
9432
9433 --Checking for the existence of budget lines for the element version ids passed. Bug 3589130
9434 IF p_validate_delete_flag='Y' THEN
9435
9436 IF l_debug_mode = 'Y' THEN
9437 pa_debug.g_err_stage:='Checking for the existence of budget lines';
9438 print_msg(pa_debug.g_err_stage,l_module_name);
9439 END IF;
9440
9441 BEGIN
9442 FOR i IN p_resource_assignment_tbl.first..p_resource_assignment_tbl.last LOOP
9443
9444 l_exists:='N';
9445
9446 BEGIN
9447 SELECT 'Y'
9448 INTO l_exists
9449 FROM DUAL
9450 WHERE EXISTS (SELECT 'X'
9451 FROM pa_budget_lines pbl,
9452 pa_resource_assignments pra
9453 WHERE pra.resource_assignment_id=p_resource_assignment_tbl(i)
9454 AND pbl.budget_Version_id=pra.budget_version_id
9455 AND pbl.resource_assignment_id=pra.resource_assignment_id);
9456 EXCEPTION
9457 WHEN NO_DATA_FOUND THEN
9458 l_exists:='N';
9459 END;
9460
9461 IF l_exists='Y' THEN
9462
9463 RAISE SKIP_LOOP;
9464
9465 END IF;
9466
9467 END LOOP;
9468
9469 EXCEPTION
9470 WHEN SKIP_LOOP THEN
9471 IF l_debug_mode = 'Y' THEN
9472 pa_debug.g_err_stage:='Budget lines exist for the resource assignment id passed '||p_resource_assignment_tbl(i);
9473 print_msg(pa_debug.g_err_stage,l_module_name);
9474 END IF;
9475 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9476 p_msg_name => 'PA_FP_AMT_EXISTS_FOR_PLAN_ELEM');
9477 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9478 END;
9479
9480 END IF ; --IF p_validate_delete_flag='Y' THEN
9481
9482 IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
9483 PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
9484 NULL;
9485 -- Bug Fix: 4569365. Removed MRC code.
9486 END IF;
9487
9488 IF l_debug_mode = 'Y' THEN
9489 pa_debug.g_err_stage:='Deleting all budget lines ';
9490 print_msg(pa_debug.g_err_stage,l_module_name);
9491 END IF;
9492
9493 FORALL i IN p_resource_assignment_tbl.first..p_resource_assignment_tbl.last
9494 DELETE
9495 FROM pa_budget_lines pbl
9496 WHERE pbl.resource_assignment_id=p_resource_assignment_tbl(i)
9497 AND ( nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' OR
9498 (init_quantity is NULL AND
9499 txn_init_raw_cost is NULL AND
9500 txn_init_burdened_cost is NULL AND
9501 txn_init_revenue is NULL)
9502 )
9503 AND nvl(l_currency_code_tbl(i),pbl.txn_currency_code) = pbl.txn_currency_code -- 3719918
9504 RETURNING
9505 pbl.period_name,
9506 pbl.start_date,
9507 pbl.end_date,
9508 pbl.txn_currency_code,
9509 -pbl.txn_raw_cost,
9510 -pbl.txn_burdened_cost,
9511 -pbl.txn_revenue,
9512 -pbl.project_raw_cost,
9513 -pbl.project_burdened_cost,
9514 -pbl.project_revenue,
9515 -pbl.raw_cost,
9516 -pbl.burdened_cost,
9517 -pbl.revenue,
9518 -pbl.quantity,
9519 pbl.cost_rejection_code ,
9520 pbl.revenue_rejection_code ,
9521 pbl.burden_rejection_code ,
9522 pbl.other_rejection_code ,
9523 pbl.pc_cur_conv_rejection_code,
9524 pbl.pfc_cur_conv_rejection_code,
9525 pbl.resource_assignment_id
9526 BULK COLLECT INTO
9527 l_period_name_tbl,
9528 l_start_date_tbl,
9529 l_end_date_tbl,
9530 l_txn_currency_code_tbl,
9531 l_txn_raw_cost_tbl,
9532 l_txn_burdened_cost_tbl,
9533 l_txn_revenue_tbl,
9534 l_project_raw_cost_tbl,
9535 l_project_burdened_cost_tbl,
9536 l_project_revenue_tbl,
9537 l_raw_cost_tbl,
9538 l_burdened_cost_tbl,
9539 l_revenue_tbl,
9540 l_quantity_tbl,
9541 l_cost_rejection_code_tbl,
9542 l_revenue_rejection_code_tbl,
9543 l_burden_rejection_code_tbl,
9544 l_other_rejection_code,
9545 l_pc_cur_conv_rej_code_tbl,
9546 l_pfc_cur_conv_rej_code_tbl,
9547 l_resource_assignment_id_tbl;
9548
9549 -- IPM changes populate tmp table to use for deletion later
9550 -- hr_utility.trace('RM DEL1');
9551 IF l_resource_assignment_id_tbl.COUNT > 0 THEN
9552 FORALL i IN l_resource_assignment_id_tbl.first ..
9553 l_resource_assignment_id_tbl.last
9554 INSERT INTO pa_resource_asgn_curr_tmp
9555 (RA_TXN_ID
9556 ,RESOURCE_ASSIGNMENT_ID
9557 ,TXN_CURRENCY_CODE -- Bug 5057010
9558 ,DELETE_FLAG
9559 )
9560 SELECT pa_resource_asgn_curr_s.nextval
9561 ,l_resource_assignment_id_tbl(i)
9562 ,l_txn_currency_code_tbl(i) -- Bug 5057010
9563 ,'Y'
9564 FROM DUAL;
9565 END IF;
9566
9567 IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
9568
9569 IF l_debug_mode = 'Y' THEN
9570 pa_debug.g_err_stage:='Deleting all res assmts for which the flag is passed as Y';
9571 print_msg(pa_debug.g_err_stage,l_module_name);
9572 END IF;
9573
9574 FORALL i IN p_resource_assignment_tbl.first..p_resource_assignment_tbl.last
9575 DELETE
9576 FROM pa_resource_assignments pra
9577 WHERE pra.resource_assignment_id=p_resource_assignment_tbl(i)
9578 AND (l_currency_code_tbl(i) IS NULL
9579 OR
9580 NOT EXISTS ( SELECT 'EXISTS'
9581 FROM PA_BUDGET_LINES PBL
9582 WHERE PBL.RESOURCE_ASSIGNMENT_ID = pra.resource_assignment_id))
9583 RETURNING
9584 pra.resource_assignment_id,
9585 pra.task_id,
9586 pra.rbs_element_id,
9587 pra.resource_class_code,
9588 pra.rate_based_flag
9589 BULK COLLECT INTO
9590 l_ra_id_in_pra_tbl,
9591 l_task_id_in_pra_tbl,
9592 l_rbs_element_id_in_pra_tbl,
9593 l_res_class_code_in_pra_tbl,
9594 l_rate_based_flag_in_pra_tbl;
9595
9596 -- hr_utility.trace('RM DEL2');
9597 -- IPM changes - populate temp table for deletion
9598 IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
9599 FORALL i IN l_ra_id_in_pra_tbl.first ..
9600 l_ra_id_in_pra_tbl.last
9601 INSERT INTO pa_resource_asgn_curr_tmp
9602 (RA_TXN_ID
9603 ,RESOURCE_ASSIGNMENT_ID
9604 -- ,TXN_CURRENCY_CODE
9605 ,DELETE_FLAG
9606 )
9607 SELECT pa_resource_asgn_curr_s.nextval
9608 ,l_ra_id_in_pra_tbl(i)
9609 -- ,l_project_currency_code
9610 ,'Y'
9611 FROM DUAL;
9612 END IF;
9613
9614 END IF;-- IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
9615
9616 END IF;-- IF p_task_or_res = 'TASKS' THEN
9617
9618 END IF;--IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
9619
9620 --Rollup the amounts to budget versions as some of the budget lines with amounts might have got
9621 --deleted
9622 IF l_debug_mode = 'Y' THEN
9623 pa_debug.g_err_stage:='No of Rec Deleted from RA : ' || l_ra_id_in_pra_tbl.COUNT;
9624 print_msg(pa_debug.g_err_stage,l_module_name);
9625 IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
9626 FOR i in l_ra_id_in_pra_tbl.FIRST .. l_ra_id_in_pra_tbl.LAST LOOP
9627 pa_debug.g_err_stage:='Deleted RA Id : ' || l_ra_id_in_pra_tbl(i);
9628 print_msg(pa_debug.g_err_stage,l_module_name);
9629 END LOOP;
9630 END IF;
9631 END IF;
9632
9633 -- IPM changes - delete from new entity --{
9634 -- new entity maintenance api to be called before call to pa_fp_rollup_pkg.rollup_budget_version.
9635 -- Call new entity maintenance api for the budget version id (which has to be derived),
9636 -- if records have been inserted in pa_Resource_asgn_curr_tmp, in the delete flow.
9637 -- Note: Deriving l_budget_version_id may not be the right approach as we avoid calling BV/RA
9638 -- rollup api and pji api when l_budget_version_id is null (No BLs deleted)
9639 IF l_budget_version_id IS NOT NULL THEN
9640 pa_debug.g_err_stage:='Calling pa_fp_gen_amount_utils.get_plan_version_dtls:bv_id ' || l_budget_version_id;
9641 print_msg(pa_debug.g_err_stage,l_module_name);
9642
9643 pa_fp_gen_amount_utils.get_plan_version_dtls
9644 (p_project_id => l_project_id,
9645 p_budget_version_id => l_budget_version_id,
9646 x_fp_cols_rec => l_fp_cols_rec,
9647 x_return_status => x_return_status,
9648 x_msg_count => x_msg_count,
9649 x_msg_data => x_msg_data);
9650
9651 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9652
9653 IF l_debug_mode = 'Y' THEN
9654 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
9655 print_msg(pa_debug.g_err_stage,l_module_name);
9656 END IF;
9657 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9658 END IF;
9659
9660 pa_debug.g_err_stage:='Calling pa_res_asg_currency_pub.maintain_data:bv_id ' || l_budget_version_id;
9661 print_msg(pa_debug.g_err_stage,l_module_name);
9662
9663 pa_res_asg_currency_pub.maintain_data(
9664 p_fp_cols_rec => l_fp_cols_rec,
9665 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
9666 p_delete_flag => 'Y',
9667 p_copy_flag => 'N',
9668 p_src_version_id => NULL,
9669 p_copy_mode => NULL,
9670 p_rollup_flag => 'N',
9671 p_version_level_flag => 'N',
9672 p_called_mode => 'SELF_SERVICE',
9673 x_return_status => x_return_status,
9674 x_msg_count => x_msg_count,
9675 x_msg_data => x_msg_data
9676 );
9677
9678 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9679
9680 IF l_debug_mode = 'Y' THEN
9681 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
9682 print_msg(pa_debug.g_err_stage,l_module_name);
9683 END IF;
9684 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9685 END IF;
9686
9687 END IF; --} IPM
9688
9689 --The code below will call budget version rollup and PJI APIs. These APIs should not be called if the input
9690 --parameter p_rollup_required_flag is N. For bug 3937716
9691 IF p_rollup_required_flag = 'Y' THEN
9692
9693 /* If there was nothing to delete, l_budget_version_id would be null and rollup need not be done for that case */
9694
9695 --Added for bug 4160258
9696 IF (p_calling_module = 'PROCESS_RES_CHG_DERV_CALC_PRMS') THEN
9697 l_mode := null;
9698 ELSIF (p_currency_code_tbl.COUNT = 0) THEN
9699 l_mode := 'DELETE_RA';
9700 ELSE
9701 l_mode := null;
9702 END IF;
9703
9704 IF l_budget_version_id IS NOT NULL THEN
9705 pa_debug.g_err_stage:='Calling PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION:l_budget_version_id '||l_budget_version_id;
9706 print_msg(pa_debug.g_err_stage,l_module_name);
9707
9708 PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION
9709 ( p_budget_version_id => l_budget_version_id
9710 ,p_entire_version => 'Y'
9711 ,p_context => l_mode -- Bug 4160258
9712 ,x_return_status => x_return_status
9713 ,x_msg_count => l_msg_count
9714 ,x_msg_data => l_msg_data);
9715
9716 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9717 IF l_debug_mode = 'Y' THEN
9718 pa_debug.g_err_stage:='The API PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION returned error';
9719 print_msg(pa_debug.g_err_stage,l_module_name);
9720 END IF;
9721 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9722 END IF;
9723
9724 END IF;
9725 END IF; /* p_rollup_required_flag = Y */
9726
9727
9728 /* Bug 4200168: Reporting lines rollup api would only be called if p_pji_rollup_required is
9729 * passed as Y */
9730 IF p_pji_rollup_required = 'Y'
9731 AND l_budget_version_id is NOT NULL THEN -- Bug 5381920
9732
9733 --Call the Reporting Lines API only if the version is not a CI version
9734 IF l_ci_id IS NULL THEN
9735
9736 IF l_resource_assignment_id_tbl.count >0 THEN
9737
9738 IF l_debug_mode = 'Y' THEN
9739 pa_debug.g_err_stage:='Prepare pl/sql tables for rbs element id and task id';
9740 print_msg(pa_debug.g_err_stage,l_module_name);
9741 END IF;
9742
9743 --Prepare the pl/sql tables for task id, rbs element id , resource class code and rate based flag.
9744 --These pl/sql tables should be same in length to the pl/sql tables prepared while deleting the budget
9745 --lines. This can be done by looping thru the l_resource_assignment_id_tbl and looking for a matching
9746 --ra id in l_ra_id_in_pra_tbl If a matching ra id is not found in l_ra_id_in_pra_tbl then data
9747 -- is fetched directly from pa_resource_assignments for ra id in l_resource_assignment_id_tbl.
9748 l_ra_index:=1;
9749 l_counter:=0;--This is used just to keep track of the length of the pl/sql tables being prepared
9750
9751 l_task_id_tbl.EXTEND(l_resource_assignment_id_tbl.last);
9752 l_rbs_element_id_tbl.EXTEND(l_resource_assignment_id_tbl.last);
9753 l_res_class_code_tbl.EXTEND(l_resource_assignment_id_tbl.last);
9754 l_rate_based_flag_tbl.EXTEND(l_resource_assignment_id_tbl.last);
9755
9756 FOR i IN l_resource_assignment_id_tbl.FIRST..l_resource_assignment_id_tbl.LAST LOOP
9757 --For bug 3840150
9758 l_ra_index:=1;
9759 LOOP
9760 IF l_ra_id_in_pra_tbl.EXISTS(l_ra_index) THEN
9761 IF l_ra_id_in_pra_tbl(l_ra_index) = l_resource_assignment_id_tbl(i) THEN
9762 IF l_debug_mode = 'Y' THEN
9763 pa_debug.g_err_stage:='Stepping In - l_ra_index : '||l_ra_index;
9764 print_msg(pa_debug.g_err_stage,l_module_name);
9765 END IF;
9766 l_task_id := l_task_id_in_pra_tbl(l_ra_index);
9767 l_rbs_element_id := l_rbs_element_id_in_pra_tbl(l_ra_index);
9768 l_res_class_code := l_res_class_code_in_pra_tbl(l_ra_index);
9769 l_rate_based_flag := l_rate_based_flag_in_pra_tbl(l_ra_index);
9770 EXIT; --Exit LOOP
9771 ELSE
9772 IF l_debug_mode = 'Y' THEN
9773 pa_debug.g_err_stage:='Stepping Over - l_ra_index : '||l_ra_index;
9774 print_msg(pa_debug.g_err_stage,l_module_name);
9775 END IF;
9776 l_ra_index:=l_ra_index+1;
9777 END IF;
9778 ELSE
9779 BEGIN
9780 IF l_debug_mode = 'Y' THEN
9781 pa_debug.g_err_stage:='Fetching Data from PA Res Assignment';
9782 print_msg(pa_debug.g_err_stage,l_module_name);
9783 END IF;
9784 SELECT TASK_ID,
9785 RBS_ELEMENT_ID,
9786 RESOURCE_CLASS_CODE,
9787 RATE_BASED_FLAG
9788 INTO l_task_id,
9789 l_rbs_element_id,
9790 l_res_class_code,
9791 l_rate_based_flag
9792 FROM PA_RESOURCE_ASSIGNMENTS
9793 WHERE RESOURCE_ASSIGNMENT_ID = l_resource_assignment_id_tbl(i);
9794
9795 EXIT; --Exit LOOP
9796
9797 EXCEPTION
9798 WHEN NO_DATA_FOUND THEN
9799 IF l_debug_mode = 'Y' THEN
9800 pa_debug.g_err_stage:='No Data Found in RA Table for Bl deleted.';
9801 print_msg(pa_debug.g_err_stage,l_module_name);
9802 END IF;
9803 RAISE;
9804 END;
9805 END IF;
9806 END LOOP;
9807
9808 IF l_debug_mode = 'Y' THEN
9809 pa_debug.g_err_stage:='Data for Update Rep Lines';
9810 print_msg(pa_debug.g_err_stage,l_module_name);
9811
9812 pa_debug.g_err_stage:='l_task_id '||l_task_id;
9813 print_msg(pa_debug.g_err_stage,l_module_name);
9814
9815 pa_debug.g_err_stage:='l_rbs_element_id '||l_rbs_element_id;
9816 print_msg(pa_debug.g_err_stage,l_module_name);
9817
9818 pa_debug.g_err_stage:='l_res_class_code '||l_res_class_code;
9819 print_msg(pa_debug.g_err_stage,l_module_name);
9820
9821 pa_debug.g_err_stage:='l_rate_based_flag '||l_rate_based_flag;
9822 print_msg(pa_debug.g_err_stage,l_module_name);
9823 END IF;
9824
9825 l_task_id_tbl(i) :=l_task_id;
9826 l_rbs_element_id_tbl(i) :=l_rbs_element_id;
9827 l_res_class_code_tbl(i) :=l_res_class_code;
9828 l_rate_based_flag_tbl(i) :=l_rate_based_flag;
9829 l_counter:=l_counter+1;
9830
9831 END LOOP;
9832
9833 IF l_counter <> l_resource_assignment_id_tbl.COUNT THEN
9834
9835 IF l_debug_mode = 'Y' THEN
9836 pa_debug.g_err_stage:='Error in preparing pl/sql tables for rbs element id and task id ';
9837 print_msg(pa_debug.g_err_stage,l_module_name);
9838 END IF;
9839
9840 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9841
9842 END IF;
9843
9844 IF l_debug_mode = 'Y' THEN
9845 pa_debug.g_err_stage:='No of rows deleted from pa_budget_lines= '||l_resource_assignment_id_tbl.count;
9846 print_msg(pa_debug.g_err_stage,l_module_name);
9847 END IF;
9848
9849 pa_planning_transaction_utils.call_update_rep_lines_api
9850 ( p_source => 'PL-SQL'
9851 ,p_budget_Version_id => l_budget_version_id
9852 ,p_resource_assignment_id_tbl => l_resource_assignment_id_tbl
9853 ,p_period_name_tbl => l_period_name_tbl
9854 ,p_start_date_tbl => l_start_date_tbl
9855 ,p_end_date_tbl => l_end_date_tbl
9856 ,p_txn_currency_code_tbl => l_txn_currency_code_tbl
9857 ,p_txn_raw_cost_tbl => l_txn_raw_cost_tbl
9858 ,p_txn_burdened_cost_tbl => l_txn_burdened_cost_tbl
9859 ,p_txn_revenue_tbl => l_txn_revenue_tbl
9860 ,p_project_raw_cost_tbl => l_project_raw_cost_tbl
9861 ,p_project_burdened_cost_tbl => l_project_burdened_cost_tbl
9862 ,p_project_revenue_tbl => l_project_revenue_tbl
9863 ,p_raw_cost_tbl => l_raw_cost_tbl
9864 ,p_burdened_cost_tbl => l_burdened_cost_tbl
9865 ,p_revenue_tbl => l_revenue_tbl
9866 ,p_cost_rejection_code_tbl => l_cost_rejection_code_tbl
9867 ,p_revenue_rejection_code_tbl => l_revenue_rejection_code_tbl
9868 ,p_burden_rejection_code_tbl => l_burden_rejection_code_tbl
9869 ,p_other_rejection_code => l_other_rejection_code
9870 ,p_pc_cur_conv_rej_code_tbl => l_pc_cur_conv_rej_code_tbl
9871 ,p_pfc_cur_conv_rej_code_tbl => l_pfc_cur_conv_rej_code_tbl
9872 ,p_quantity_tbl => l_quantity_tbl
9873 ,p_rbs_element_id_tbl => l_rbs_element_id_tbl
9874 ,p_task_id_tbl => l_task_id_tbl
9875 ,p_res_class_code_tbl => l_res_class_code_tbl
9876 ,p_rate_based_flag_tbl => l_rate_based_flag_tbl
9877 ,x_return_status => x_return_status
9878 ,x_msg_data => x_msg_data
9879 ,x_msg_count => x_msg_count );
9880
9881 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9882 IF l_debug_mode = 'Y' THEN
9883 pa_debug.g_err_stage:='The API pa_planning_transaction_utils.call_update_rep_lines_api returned error';
9884 print_msg(pa_debug.g_err_stage,l_module_name);
9885 END IF;
9886 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9887 END IF;
9888
9889 END IF;-- IF l_resource_assignment_id_tbl.count >0 THEN
9890
9891 END IF;--IF l_ci_id IS NULL THEN
9892
9893 END IF;--IF p_pji_rollup_required = 'Y' THEN /* Bug 4200168 */
9894
9895 -- Bug Fix 4635951
9896 -- Commenting out the below select as it has been moved into the below IF condition
9897 -- and it was a left out and this stranded select is causing this bug.
9898
9899 IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
9900 AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(l_project_id) = 'Y') OR -- 5198662
9901 (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
9902 AND pa_task_assignment_utils.g_require_progress_rollup = 'Y')) AND
9903 l_budget_version_id IS NOT NULL THEN -- Bug 5381920
9904
9905 IF l_debug_mode = 'Y' THEN
9906 pa_debug.g_err_stage:='Calling PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp API';
9907 print_msg(pa_debug.g_err_stage,l_module_name);
9908 END IF;
9909
9910 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
9911 ( p_calling_context => 'ASGMT_PLAN_CHANGE'
9912 ,p_project_id => l_project_id
9913 ,p_structure_version_id => pa_project_structure_utils.get_latest_wp_version(l_project_id)
9914 ,p_pub_struc_ver_id => pa_project_structure_utils.get_latest_wp_version(l_project_id)
9915 ,x_return_status => x_return_status
9916 ,x_msg_data => x_msg_data
9917 ,x_msg_count => x_msg_count );
9918
9919 pa_task_assignment_utils.g_require_progress_rollup := 'N';
9920
9921 END IF;
9922 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9923 IF l_debug_mode = 'Y' THEN
9924 pa_debug.g_err_stage:='After Called process_wbs_updates_wrp:retSts['||x_return_status||']';
9925 print_msg(pa_debug.g_err_stage,l_module_name);
9926 END IF;
9927
9928 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9929 END IF;
9930 --End bug 4492493
9931
9932 IF l_debug_mode = 'Y' THEN
9933 pa_debug.g_err_stage:='Exiting delete_planning_transactions';
9934 print_msg(pa_debug.g_err_stage,l_module_name);
9935 -- reset curr function
9936 pa_debug.reset_curr_function;
9937 END IF;
9938 EXCEPTION
9939
9940 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
9941 l_msg_count := FND_MSG_PUB.count_msg;
9942 IF l_msg_count = 1 THEN
9943 PA_INTERFACE_UTILS_PUB.get_messages
9944 (p_encoded => FND_API.G_TRUE
9945 ,p_msg_index => 1
9946 ,p_msg_count => l_msg_count
9947 ,p_msg_data => l_msg_data
9948 ,p_data => l_data
9949 ,p_msg_index_out => l_msg_index_out);
9950
9951 x_msg_data := l_data;
9952 x_msg_count := l_msg_count;
9953 ELSE
9954 x_msg_count := l_msg_count;
9955 END IF;
9956
9957 x_return_status := FND_API.G_RET_STS_ERROR;
9958
9959 IF l_debug_mode = 'Y' THEN
9960 pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
9961 print_msg(pa_debug.g_err_stage,l_module_name);
9962 -- reset curr function
9963 pa_debug.reset_curr_function;
9964 END IF;
9965 RETURN;
9966 WHEN OTHERS THEN
9967 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9968 x_msg_count := 1;
9969 x_msg_data := SQLERRM;
9970
9971 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_planning_transaction_pub'
9972 ,p_procedure_name => 'delete_planning_transactions');
9973
9974 IF l_debug_mode = 'Y' THEN
9975 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
9976 print_msg(pa_debug.g_err_stage,l_module_name);
9977 -- reset curr function
9978 pa_debug.Reset_Curr_Function();
9979 END IF;
9980 RAISE;
9981 END delete_planning_transactions;
9982
9983
9984 /*=====================================================================
9985 Procedure Name: ADD_WP_PLAN_TYPE
9986 Purpose: This API checks if a Work Plan type is present in
9987 the system.If is it not then it throws a error.
9988 If WorkPlan Type is not attached to the project
9989 then it attaches it.
9990 This would be called when workplan is enabled for
9991 a project or template.
9992 Parameters:(Note that all the input parameters are mandatory)
9993 IN 1)p_src_project_id IN pa_projects_all.project_id%TYPE
9994 IN 2)p_targ_project_id IN pa_projects_all.project_id%TYPE
9995 =======================================================================*/
9996 PROCEDURE Add_wp_plan_type
9997 (
9998 p_src_project_id IN pa_projects_all.project_id%TYPE
9999 ,p_targ_project_id IN pa_projects_all.project_id%TYPE
10000 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10001 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10002 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10003 ) AS
10004
10005 --Start of variables used for debugging
10006 l_msg_count NUMBER :=0;
10007 l_data VARCHAR2(2000);
10008 l_msg_data VARCHAR2(2000);
10009 l_error_msg_code VARCHAR2(30);
10010 l_msg_index_out NUMBER;
10011 l_return_status VARCHAR2(2000);
10012 l_debug_mode VARCHAR2(30);
10013 --End of variables used for debugging
10014
10015 l_wp_type_id NUMBER :=0;
10016 l_proj_wp_type_exists NUMBER :=0;
10017 l_proj_fp_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
10018 l_projfunc_currency_code pa_projects_all.projfunc_currency_code%type;
10019 l_proj_currency_code pa_projects_all.project_currency_code%type;
10020 l_appr_rev_plan_type_flag pa_fin_plan_types_b.approved_rev_plan_type_flag %TYPE;
10021
10022 l_plan_in_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
10023 l_src_fp_option_id pa_proj_fp_options.proj_fp_options_id%TYPE;
10024 BEGIN
10025
10026 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
10027 l_debug_mode := NVL(l_debug_mode, 'N');
10028 x_msg_count := 0;
10029 x_return_status := FND_API.G_RET_STS_SUCCESS;
10030 IF l_debug_mode = 'Y' THEN
10031 PA_DEBUG.Set_Curr_Function( p_function => 'PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type',
10032 p_debug_mode => l_debug_mode );
10033 END IF;
10034 ---------------------------------------------------------------
10035 -- validating input parameter p_project_id.
10036 -- p_project_id cannot be passed as null.
10037 ---------------------------------------------------------------
10038 IF l_debug_mode = 'Y' THEN
10039 pa_debug.g_err_stage:='Validating input parameters';
10040 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10041 END IF;
10042
10043 IF (p_src_project_id IS NULL) OR
10044 (p_targ_project_id IS NULL) THEN
10045 IF l_debug_mode = 'Y' THEN
10046 pa_debug.g_err_stage:='Invalid Arguments Passed - src and targ Project Ids are null';
10047 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
10048 END IF;
10049 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10050 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
10051 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10052 END IF;
10053
10054 ---------------------------------------------------------------
10055 -- checking if a workplan type is present in the system with
10056 -- enable_wp_flag = 'Y'
10057 ---------------------------------------------------------------
10058
10059 IF l_debug_mode = 'Y' THEN
10060 pa_debug.g_err_stage:='checking availability of a wp type';
10061 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10062 END IF;
10063
10064 ---------------------------------------------------------
10065 -- In case of no data found, the exception handling block
10066 -- shall throw PA_FP_NO_WP_PLAN_TYPE.
10067 ---------------------------------------------------------
10068 BEGIN -- BLOCK to check if workplan_type is is present in the system- Starts
10069
10070 SELECT fin_plan_type_id,approved_rev_plan_type_flag
10071 INTO l_wp_type_id,l_appr_rev_plan_type_flag
10072 FROM pa_fin_plan_types_b
10073 WHERE nvl(use_for_workplan_flag,'N') = 'Y';
10074
10075 EXCEPTION
10076
10077 WHEN NO_DATA_FOUND THEN
10078 IF l_debug_mode = 'Y' THEN
10079 pa_debug.g_err_stage :='No WORK PLAN TYPE present in the system';
10080 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,1);
10081 END IF;
10082
10083 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10084 p_msg_name => 'PA_FP_NO_WP_PLAN_TYPE' );
10085 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10086 END; -- BLOCK to check if workplan_type is is present in the system - Ends
10087
10088
10089 ---------------------------------------------------------
10090 -- Checking if workplan_type is already attched for the
10091 -- passed project_id
10092 ---------------------------------------------------------
10093 IF l_debug_mode = 'Y' THEN
10094 pa_debug.g_err_stage:='checking if wp type is already attched for project id';
10095 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10096 END IF;
10097
10098 BEGIN -- BLOCK to check if workplan_type is already attched for the passed project_id - Starts
10099
10100 SELECT 1
10101 INTO l_proj_wp_type_exists
10102 FROM DUAL
10103 WHERE EXISTS(
10104 SELECT 1
10105 FROM pa_proj_fp_options
10106 WHERE fin_plan_type_id = l_wp_type_id
10107 AND project_id = p_targ_project_id
10108 AND fin_plan_option_level_code = 'PLAN_TYPE');
10109
10110 EXCEPTION
10111 WHEN NO_DATA_FOUND THEN
10112 null;
10113 END; -- BLOCK to check if workplan_type is already attched for the passed project_id - Ends
10114
10115 ---------------------------------------------------------
10116 -- If workplan_type is not already attched for the
10117 -- passed project_id then a record is created in
10118 -- pa_proj_fp_options and the default fp txn currencies
10119 -- are created.
10120 ---------------------------------------------------------
10121
10122 IF l_proj_wp_type_exists = 0 THEN
10123
10124 IF l_debug_mode = 'Y' THEN
10125 pa_debug.g_err_stage:='Getting the fp option id for the wp plan type of the source project ';
10126 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10127 END IF;
10128
10129 IF p_src_project_id <> p_targ_project_id THEN
10130
10131 BEGIN
10132 SELECT proj_fp_options_id
10133 INTO l_src_fp_option_id
10134 FROM pa_proj_fp_options
10135 WHERE project_id=p_src_project_id
10136 AND fin_plan_type_id=l_wp_type_id
10137 AND fin_plan_option_level_code = 'PLAN_TYPE';
10138 EXCEPTION
10139 WHEN NO_DATA_FOUND THEN
10140 l_src_fp_option_id:=NULL;
10141 END;
10142 ELSE
10143 l_src_fp_option_id:=NULL;
10144 END IF;
10145
10146
10147 IF l_debug_mode = 'Y' THEN
10148 pa_debug.g_err_stage:='Calling API pa_proj_fp_options_pub.create_fp_option';
10149 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10150 END IF;
10151
10152 IF l_debug_mode = 'Y' THEN
10153 pa_debug.g_err_stage:='The source fp option id is '||l_src_fp_option_id;
10154 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10155 END IF;
10156
10157
10158 pa_proj_fp_options_pub.Create_FP_Option (
10159 px_target_proj_fp_option_id => l_proj_fp_options_id
10160 ,p_source_proj_fp_option_id => l_src_fp_option_id
10161 ,p_target_fp_option_level_code => PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE
10162 ,p_target_fp_preference_code => PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY
10163 ,p_target_fin_plan_version_id => null
10164 ,p_target_project_id => p_targ_project_id
10165 ,p_target_plan_type_id => l_wp_type_id
10166 ,x_return_status => l_return_status
10167 ,x_msg_count => l_msg_count
10168 ,x_msg_data => l_msg_data);
10169
10170 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10171 IF l_debug_mode = 'Y' THEN
10172 pa_debug.g_err_stage:='Called API pa_proj_fp_options_pub.Create_FP_Option returned error';
10173 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
10174 END IF;
10175 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10176 END IF;
10177
10178 SELECT plan_in_multi_curr_flag
10179 INTO l_plan_in_multi_curr_flag
10180 FROM pa_proj_fp_options
10181 WHERE proj_fp_options_id = l_proj_fp_options_id;
10182
10183 IF l_debug_mode = 'Y' THEN
10184 pa_debug.g_err_stage:='Calling API pa_fp_txn_currencies_pub.Copy_Fp_Txn_Currencies';
10185 pa_debug.write('Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10186 END IF;
10187
10188 PA_FP_TXN_CURRENCIES_PUB.COPY_FP_TXN_CURRENCIES (
10189 p_source_fp_option_id => l_src_fp_option_id
10190 ,p_target_fp_option_id => l_proj_fp_options_id
10191 ,p_target_fp_preference_code => null
10192 ,p_plan_in_multi_curr_flag => l_plan_in_multi_curr_flag
10193 ,x_return_status => l_return_status
10194 ,x_msg_count => l_msg_count
10195 ,x_msg_data => l_msg_data );
10196
10197 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10198 IF l_debug_mode = 'Y' THEN
10199 pa_debug.g_err_stage:='Called API PA_FP_TXN_CURRENCIES_PUB.COPY_FP_TXN_CURRENCIES returned error';
10200 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
10201 END IF;
10202 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10203 END IF;
10204
10205 END IF;
10206 IF l_debug_mode = 'Y' THEN
10207 pa_debug.reset_curr_function;
10208 END IF;
10209
10210 EXCEPTION
10211
10212 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
10213 l_msg_count := FND_MSG_PUB.count_msg;
10214 IF l_msg_count = 1 THEN
10215 PA_INTERFACE_UTILS_PUB.get_messages
10216 (p_encoded => FND_API.G_TRUE
10217 ,p_msg_index => 1
10218 ,p_msg_count => l_msg_count
10219 ,p_msg_data => l_msg_data
10220 ,p_data => l_data
10221 ,p_msg_index_out => l_msg_index_out);
10222 x_msg_data := l_data;
10223 x_msg_count := l_msg_count;
10224 ELSE
10225 x_msg_count := l_msg_count;
10226 END IF;
10227 x_return_status := FND_API.G_RET_STS_ERROR;
10228 IF l_debug_mode = 'Y' THEN
10229 pa_debug.reset_curr_function;
10230 END IF;
10231 WHEN OTHERS THEN
10232 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10233 x_msg_count := 1;
10234 x_msg_data := SQLERRM;
10235 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
10236 ,p_procedure_name => 'PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type');
10237
10238 IF l_debug_mode = 'Y' THEN
10239 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
10240 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
10241 pa_debug.reset_curr_function;
10242 END IF;
10243 RAISE;
10244
10245 END add_wp_plan_type;
10246
10247 /*=====================================================================
10248 Procedure Name: check_and_create_task_rec_info
10249 Purpose: This is a private api in the package. This API will
10250 validate the task data passed to the
10251 update_planning_transactions api This API checks
10252 for the existence of the element version id passed
10253 in pa_resource_assignments. If some of the element
10254 version Ids are not there then it call
10255 add_planning_transactions API to create records in
10256 pa_resource_assignments. This API will be called
10257 only when the context is WORKPLAN
10258 =======================================================================*/
10259 /*******************************************************************************************************
10260 As part of Bug 3749516 All References to Equipment Effort or Equip Resource Class has been removed in
10261 PROCEDURE check_and_create_task_rec_info.
10262 p_planned_equip_effort_tbl IN parameter has also been removed as they were not being used/referred.
10263 ********************************************************************************************************/
10264 PROCEDURE check_and_create_task_rec_info
10265 (
10266 p_project_id IN Pa_projects_all.project_id%TYPE
10267 ,p_struct_elem_version_id IN Pa_proj_element_versions.element_version_id%TYPE
10268 ,p_element_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
10269 ,p_planning_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
10270 ,p_planning_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
10271 ,p_planned_people_effort_tbl IN SYSTEM.PA_NUM_TBL_TYPE
10272 ,p_raw_cost_tbl IN SYSTEM.PA_NUM_TBL_TYPE /* Bug 3720357 */
10273 ,p_burdened_cost_tbl IN SYSTEM.PA_NUM_TBL_TYPE /* Bug 3720357 */
10274 ,p_apply_progress_flag IN VARCHAR2 /* Bug 3720357 */
10275 ,x_element_version_id_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
10276 ,x_planning_start_date_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
10277 ,x_planning_end_date_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
10278 ,x_planned_effort_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
10279 ,x_resource_assignment_id_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
10280 ,x_raw_cost_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE /* Bug 3720357 */ --File.Sql.39 bug 4440895
10281 ,x_burdened_cost_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE /* Bug 3720357 */ --File.Sql.39 bug 4440895
10282 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10283 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10284 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10285 ) AS
10286 --Start of variables used for debugging
10287 l_msg_count NUMBER :=0;
10288 l_data VARCHAR2(2000);
10289 l_msg_data VARCHAR2(2000);
10290 l_error_msg_code VARCHAR2(30);
10291 l_msg_index_out NUMBER;
10292 l_return_status VARCHAR2(2000);
10293 l_debug_mode VARCHAR2(30);
10294 l_module_name VARCHAR2(100):='pa.plsql.pa_fp_planning_transaction_pub.check_and_create_task_rec_info' ;
10295 l_rec_exsists VARCHAR2(1);
10296 --End of variables used for debugging
10297
10298
10299 l_elem_ver_id_cnt NUMBER := 0;
10300 l_ra_id_cnt NUMBER := 0;
10301 l_out_tbl_index NUMBER := 1;
10302 l_add_tbl_index NUMBER := 1;
10303 l_res_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
10304 l_ra_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10305 l_element_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10306 l_planning_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
10307 l_planning_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
10308 l_planned_people_effort_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10309 l_raw_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10310 l_burdened_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10311 l_index NUMBER;
10312 l_element_version_id_tbl_tmp SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10313 l_planning_start_date_tbl_tmp SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
10314 l_planning_end_date_tbl_tmp SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
10315 l_planned_effort_tbl_tmp SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10316 l_res_assignment_id_tbl_tmp SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10317 l_planned_ppl_effort_tbl_tmp SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10318 l_raw_cost_tbl_tmp SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10319 l_burdened_cost_tbl_tmp SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
10320
10321
10322 cursor c_res_assignment_id(c_wbs_element_version_id pa_resource_assignments.wbs_element_version_id%TYPE) IS
10323 SELECT resource_assignment_id,resource_class_code
10324 FROM pa_resource_assignments
10325 WHERE wbs_element_version_id = c_wbs_element_version_id
10326 AND ta_display_flag = 'N' -- Bug 3749516
10327 AND resource_class_code in (PA_FP_CONSTANTS_PKG.G_RESOURCE_CLASS_CODE_PPL);
10328
10329 BEGIN
10330
10331 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
10332 l_debug_mode := NVL(l_debug_mode, 'N');
10333 x_msg_count := 0;
10334 x_return_status := FND_API.G_RET_STS_SUCCESS;
10335 IF l_debug_mode = 'Y' THEN
10336 PA_DEBUG.Set_Curr_Function( p_function => 'fp_planning_txn_pub.chk_and_create_task',
10337 p_debug_mode => l_debug_mode );
10338 END IF;
10339 -----------------------------------------------------------------------
10340 -- Input Parameter Validation. If no element version id is passed then
10341 -- return.
10342 -----------------------------------------------------------------------
10343 l_elem_ver_id_cnt := p_element_version_id_tbl.COUNT;
10344
10345 --Extending the local pl/sql tables. The length of the local tables should be element version id count
10346 IF l_debug_mode = 'Y' THEN
10347 pa_debug.g_err_stage:='Extending the local pl/sql tbls';
10348 print_msg(pa_debug.g_err_stage,l_module_name);
10349 END IF;
10350 x_element_version_id_tbl := SYSTEM.PA_NUM_TBL_TYPE();
10351 x_planning_start_date_tbl := SYSTEM.PA_DATE_TBL_TYPE();
10352 x_planning_end_date_tbl := SYSTEM.PA_DATE_TBL_TYPE();
10353 x_planned_effort_tbl := SYSTEM.PA_NUM_TBL_TYPE();
10354 x_resource_assignment_id_tbl := SYSTEM.PA_NUM_TBL_TYPE();
10355 x_raw_cost_tbl := SYSTEM.PA_NUM_TBL_TYPE();
10356 x_burdened_cost_tbl := SYSTEM.PA_NUM_TBL_TYPE();
10357 l_element_version_id_tbl.extend(l_elem_ver_id_cnt);
10358 l_planning_start_date_tbl.extend(l_elem_ver_id_cnt);
10359 l_planning_end_date_tbl.extend(l_elem_ver_id_cnt);
10360 l_planned_people_effort_tbl.extend(l_elem_ver_id_cnt);
10361 l_raw_cost_tbl.extend(l_elem_ver_id_cnt);
10362 l_burdened_cost_tbl.extend(l_elem_ver_id_cnt);
10363 x_element_version_id_tbl.extend(l_elem_ver_id_cnt);
10364 x_planning_start_date_tbl.extend(l_elem_ver_id_cnt);
10365 x_planning_end_date_tbl.extend(l_elem_ver_id_cnt);
10366 x_planned_effort_tbl.extend(l_elem_ver_id_cnt);
10367 x_resource_assignment_id_tbl.extend(l_elem_ver_id_cnt);
10368 x_raw_cost_tbl.extend(l_elem_ver_id_cnt);
10369 x_burdened_cost_tbl.extend(l_elem_ver_id_cnt);
10370
10371 IF l_elem_ver_id_cnt = 0 THEN
10372 IF l_debug_mode = 'Y' THEN
10373 pa_debug.g_err_stage:='Validating input parameters - No element version id is passed - return to calling entity';
10374 print_msg(pa_debug.g_err_stage,l_module_name);
10375 pa_debug.reset_curr_function;
10376 END IF;
10377 RETURN;
10378 END IF;
10379
10380 --------------------------------------------------------------------------
10381 -- Logic manifested below ------------------------------------------------
10382 -- -----------------------------------------------------------------------
10383 -- For each record of element version id in input parameter
10384 -- p_element_version_id_tbl, we scan through pa_resource_assignments table
10385 -- and bulk fetch the resource_class_code and resource_assignment_id into
10386 -- local PLSql tables. Now we have a inner loop which we run for each of
10387 -- the resouce_assignment_id fetched corresponding to the elem_ver_id of
10388 -- the parent loop. In the inner loop we populate the corresponding out
10389 -- param tables - x_resource_assignment_id_tbl,x_element_version_id_tbl
10390 -- ,x_planning_end_date_tbl, x_planning_start_date_tbl and
10391 -- x_planned_effort_tbl.
10392 --
10393 -- In case if there no records are retrieved in pa_resource_assignments
10394 -- for any element version id then we populate a separate set of tables
10395 -- from the corresponding IN parameters as l_element_version_id_tbl,
10396 -- l_planning_start_date_tbl,l_planning_end_date_tbl,
10397 -- l_planned_people_effort_tbl.
10398 -- Bug 3720357 - l_raw_cost_tbl and l_burdened_cost_tbl also added.
10399 -- This set of local parameters form the IN parameters for Calling API
10400 -- add_planning_transactions.
10401 --------------------------------------------------------------------------
10402
10403
10404 IF l_debug_mode = 'Y' THEN
10405 pa_debug.g_err_stage:='Iterating through the IN Parameters and Populating the Out parameters.';
10406 print_msg(pa_debug.g_err_stage,l_module_name);
10407 END IF;
10408
10409 /* Loop through all element version ids and retrieve ra_id and res_class_code */
10410 FOR i IN p_element_version_id_tbl.FIRST .. p_element_version_id_tbl.LAST LOOP
10411 OPEN c_res_assignment_id(p_element_version_id_tbl(i));
10412 FETCH c_res_assignment_id BULK COLLECT INTO l_ra_id_tbl,l_res_class_code_tbl;
10413 l_ra_id_cnt := l_ra_id_tbl.COUNT;
10414 IF l_ra_id_cnt>0 THEN
10415 l_rec_exsists := 'Y';
10416 ELSE
10417 l_rec_exsists := 'N';
10418 END IF;
10419
10420
10421 /* If there is 1 records in resource_assignments for people then we do not need to call add_planning transaction */
10422 IF l_ra_id_cnt = 1 THEN
10423
10424 FOR j IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST LOOP
10425 x_resource_assignment_id_tbl(l_out_tbl_index) := l_ra_id_tbl(j);
10426 IF p_planning_start_date_tbl.EXISTS(i) THEN
10427 x_planning_start_date_tbl(l_out_tbl_index) := p_planning_start_date_tbl(i);
10428 END IF;
10429
10430 IF p_planning_end_date_tbl.EXISTS(i) THEN
10431 x_planning_end_date_tbl(l_out_tbl_index) := p_planning_end_date_tbl(i);
10432 END IF;
10433 /* In Update Flow for Workplan Context FND_API.G_MISS_XXXX will be considered
10434 as a valid value for effort/Quantity -- Bug 3640498*/
10435 IF (p_raw_cost_tbl.EXISTS(i)) THEN --AND
10436 -- NVL(p_raw_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
10437 -- p_raw_cost_tbl(i) <> 0) THEN
10438 x_raw_cost_tbl(l_out_tbl_index) := p_raw_cost_tbl(i);
10439 END IF;
10440
10441 IF (p_burdened_cost_tbl.EXISTS(i)) THEN -- AND
10442 -- NVL(p_burdened_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
10443 -- p_burdened_cost_tbl(i) <> 0) THEN
10444 x_burdened_cost_tbl(l_out_tbl_index) := p_burdened_cost_tbl(i);
10445 END IF;
10446
10447 x_element_version_id_tbl(l_out_tbl_index) := p_element_version_id_tbl(i);
10448 IF l_res_class_code_tbl(j) = PA_FP_CONSTANTS_PKG.G_RESOURCE_CLASS_CODE_PPL THEN
10449 IF (p_planned_people_effort_tbl.EXISTS(i)) THEN --AND
10450 -- (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
10451 -- (p_planned_people_effort_tbl(i) > 0)) THEN
10452 x_planned_effort_tbl(l_out_tbl_index) := p_planned_people_effort_tbl(i);
10453 END IF;
10454 END IF;
10455
10456 l_out_tbl_index := l_out_tbl_index + 1;
10457 END LOOP;
10458 END IF;
10459
10460 /* If there are no records in resource_assignments we have to populate the local PLSql tables to call
10461 add_planning_transactions */
10462 IF l_rec_exsists = 'N' THEN
10463
10464 --Add the record only if either people or equipment effort exists
10465 IF ((p_planned_people_effort_tbl.EXISTS(i)) AND
10466 (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
10467 /*Bug fix:5726773 (p_planned_people_effort_tbl(i) > 0))*/
10468 (p_planned_people_effort_tbl(i) is NOT NULL))
10469 OR
10470 (p_raw_cost_tbl.EXISTS(i) AND
10471 NVL(p_raw_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
10472 /* bug fix:Bug fix:5726773 p_raw_cost_tbl(i) <> 0) */
10473 p_raw_cost_tbl(i) is NOT NULL )
10474 OR
10475 (p_burdened_cost_tbl.EXISTS(i) AND
10476 NVL(p_burdened_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
10477 /* bug fix:Bug fix:5726773 P_burdened_cost_tbl(i) <> 0) THEN */
10478 P_burdened_cost_tbl(i) is NOT NULL) THEN
10479
10480 l_element_version_id_tbl(l_add_tbl_index) := p_element_version_id_tbl(i);
10481 IF p_planning_start_date_tbl.EXISTS(i) THEN
10482 l_planning_start_date_tbl(l_add_tbl_index) := p_planning_start_date_tbl(i);
10483 END IF;
10484
10485 IF p_planning_end_date_tbl.EXISTS(i) THEN
10486 l_planning_end_date_tbl(l_add_tbl_index) := p_planning_end_date_tbl(i);
10487 END IF;
10488
10489 IF ((p_planned_people_effort_tbl.EXISTS(i)) AND
10490 (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
10491 /* bug fix:5726773 (p_planned_people_effort_tbl(i) > 0)) THEN */
10492 (p_planned_people_effort_tbl(i) is NOT NULL )) THEN
10493 l_planned_people_effort_tbl(l_add_tbl_index) := p_planned_people_effort_tbl(i);
10494 END IF;
10495
10496 IF (p_raw_cost_tbl.EXISTS(i) AND
10497 NVL(p_raw_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
10498 /* bug fix:Bug fix:5726773 p_raw_cost_tbl(i) <> 0) THEN */
10499 p_raw_cost_tbl(i) is NOT NULL ) THEN
10500 l_raw_cost_tbl(l_add_tbl_index) := p_raw_cost_tbl(i);
10501 END IF;
10502
10503 IF (p_burdened_cost_tbl.EXISTS(i) AND
10504 NVL(p_burdened_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
10505 /* bug fix:Bug fix:572677312/29/2006 P_burdened_cost_tbl(i) <> 0) THEN */
10506 P_burdened_cost_tbl(i) is NOT NULL) THEN
10507 l_burdened_cost_tbl(l_add_tbl_index) := p_burdened_cost_tbl(i);
10508 END IF;
10509 l_add_tbl_index := l_add_tbl_index + 1;
10510
10511 END IF;
10512 END IF;
10513
10514 CLOSE c_res_assignment_id;
10515 END LOOP;
10516
10517 --Prepare the pl/sql tbls that should be returned from the API
10518 IF l_debug_mode = 'Y' THEN
10519 pa_debug.g_err_stage:='Making a copy of the pl/sql tables which should be returned by this API';
10520 print_msg(pa_debug.g_err_stage,l_module_name);
10521 END IF;
10522
10523
10524 l_element_version_id_tbl_tmp.extend(l_out_tbl_index-1);
10525 l_planning_start_date_tbl_tmp.extend(l_out_tbl_index-1);
10526 l_planning_end_date_tbl_tmp.extend(l_out_tbl_index-1);
10527 l_planned_effort_tbl_tmp.extend(l_out_tbl_index-1);
10528 l_res_assignment_id_tbl_tmp.extend(l_out_tbl_index-1);
10529 l_raw_cost_tbl_tmp.extend(l_out_tbl_index-1);
10530 l_burdened_cost_tbl_tmp.extend(l_out_tbl_index-1);
10531
10532 FOR i in 1..l_out_tbl_index-1 LOOP
10533
10534 l_element_version_id_tbl_tmp (i):= x_element_version_id_tbl (i);
10535 l_planning_start_date_tbl_tmp(i):= x_planning_start_date_tbl (i);
10536 l_planning_end_date_tbl_tmp (i):= x_planning_end_date_tbl (i);
10537 l_planned_effort_tbl_tmp (i):= x_planned_effort_tbl (i);
10538 l_res_assignment_id_tbl_tmp (i):= x_resource_assignment_id_tbl(i);
10539 l_raw_cost_tbl_tmp (i):= x_raw_cost_tbl (i);
10540 l_burdened_cost_tbl_tmp (i):= x_burdened_cost_tbl (i);
10541
10542 END LOOP;
10543
10544 x_element_version_id_tbl :=l_element_version_id_tbl_tmp ;
10545 x_planning_start_date_tbl :=l_planning_start_date_tbl_tmp;
10546 x_planning_end_date_tbl :=l_planning_end_date_tbl_tmp ;
10547 x_planned_effort_tbl :=l_planned_effort_tbl_tmp ;
10548 x_resource_assignment_id_tbl:=l_res_assignment_id_tbl_tmp ;
10549 x_raw_cost_tbl :=l_raw_cost_tbl_tmp ;
10550 x_burdened_cost_tbl :=l_burdened_cost_tbl_tmp ;
10551
10552 --Prepare the pl/sql tbls that should be passed to add planning txn APIs
10553 IF l_debug_mode = 'Y' THEN
10554 pa_debug.g_err_stage:='Making a copy of the pl/sql tables which should be used in calling add plan txn api';
10555 print_msg(pa_debug.g_err_stage,l_module_name);
10556 END IF;
10557
10558 l_element_version_id_tbl_tmp.DELETE;
10559 l_planning_start_date_tbl_tmp.DELETE;
10560 l_planning_end_date_tbl_tmp.DELETE;
10561 l_raw_cost_tbl_tmp.DELETE;
10562 l_burdened_cost_tbl_tmp.DELETE;
10563 l_element_version_id_tbl_tmp.extend(l_add_tbl_index-1);
10564 l_planning_start_date_tbl_tmp.extend(l_add_tbl_index-1);
10565 l_planning_end_date_tbl_tmp.extend(l_add_tbl_index-1);
10566 l_planned_ppl_effort_tbl_tmp.extend(l_add_tbl_index-1);
10567 l_raw_cost_tbl_tmp.extend(l_add_tbl_index-1);
10568 l_burdened_cost_tbl_tmp.extend(l_add_tbl_index-1);
10569
10570 FOR i in 1..l_add_tbl_index-1 LOOP
10571
10572 l_element_version_id_tbl_tmp (i):= l_element_version_id_tbl (i);
10573
10574 l_planning_start_date_tbl_tmp(i):= l_planning_start_date_tbl (i);
10575
10576 l_planning_end_date_tbl_tmp (i):= l_planning_end_date_tbl (i);
10577
10578 l_planned_ppl_effort_tbl_tmp (i):= l_planned_people_effort_tbl (i) ;
10579
10580 l_raw_cost_tbl_tmp (i) := l_raw_cost_tbl (i) ;
10581
10582 l_burdened_cost_tbl_tmp (i) := l_burdened_cost_tbl (i) ;
10583
10584 END LOOP;
10585 l_element_version_id_tbl :=l_element_version_id_tbl_tmp ;
10586 l_planning_start_date_tbl :=l_planning_start_date_tbl_tmp;
10587 l_planning_end_date_tbl :=l_planning_end_date_tbl_tmp ;
10588 l_planned_people_effort_tbl:=l_planned_ppl_effort_tbl_tmp ;
10589 l_raw_cost_tbl :=l_raw_cost_tbl_tmp ;
10590 l_burdened_cost_tbl :=l_burdened_cost_tbl_tmp ;
10591 IF l_debug_mode = 'Y' THEN
10592 pa_debug.g_err_stage:='Calling add_planning_transactions API if index of param tables if greater than 1, l_add_tbl_index:.' || l_add_tbl_index;
10593 print_msg(pa_debug.g_err_stage,l_module_name);
10594 END IF;
10595
10596
10597 IF l_add_tbl_index > 1 THEN
10598
10599 add_planning_transactions
10600 (
10601 p_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
10602 ,p_project_id => p_project_id
10603 ,p_struct_elem_version_id => p_struct_elem_version_id
10604 ,p_budget_version_id => NULL
10605 ,p_task_elem_version_id_tbl => l_element_version_id_tbl
10606 ,p_task_name_tbl => SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
10607 ,p_task_number_tbl => SYSTEM.PA_VARCHAR2_100_TBL_TYPE()
10608 ,p_start_date_tbl => l_planning_start_date_tbl
10609 ,p_end_date_tbl => l_planning_end_date_tbl
10610 ,p_planned_people_effort_tbl => l_planned_people_effort_tbl
10611 ,p_latest_eff_pub_flag_tbl => SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
10612 ,p_resource_list_member_id_tbl => SYSTEM.PA_NUM_TBL_TYPE()
10613 ,p_quantity_tbl => SYSTEM.PA_NUM_TBL_TYPE()
10614 ,p_currency_code_tbl => SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
10615 ,p_raw_cost_tbl => l_raw_cost_tbl
10616 ,p_burdened_cost_tbl => l_burdened_cost_tbl
10617 ,p_revenue_tbl => SYSTEM.PA_NUM_TBL_TYPE()
10618 ,p_cost_rate_tbl => SYSTEM.PA_NUM_TBL_TYPE()
10619 ,p_bill_rate_tbl => SYSTEM.PA_NUM_TBL_TYPE()
10620 ,p_burdened_rate_tbl => SYSTEM.PA_NUM_TBL_TYPE()
10621 ,p_apply_progress_flag => p_apply_progress_flag
10622 ,x_return_status => l_return_status
10623 ,x_msg_count => l_msg_count
10624 ,x_msg_data => l_msg_data
10625 );
10626
10627 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10628 IF l_debug_mode = 'Y' THEN
10629 pa_debug.g_err_stage:='Called API PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions ,api returned error';
10630 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
10631 END IF;
10632 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10633 END IF;
10634
10635 END IF;
10636
10637 IF l_debug_mode = 'Y' THEN
10638 pa_debug.reset_curr_function;
10639 END IF;
10640 EXCEPTION
10641 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
10642 l_msg_count := FND_MSG_PUB.count_msg;
10643 IF l_msg_count = 1 THEN
10644 PA_INTERFACE_UTILS_PUB.get_messages
10645 (p_encoded => FND_API.G_TRUE
10646 ,p_msg_index => 1
10647 ,p_msg_count => l_msg_count
10648 ,p_msg_data => l_msg_data
10649 ,p_data => l_data
10650 ,p_msg_index_out => l_msg_index_out);
10651 x_msg_data := l_data;
10652 x_msg_count := l_msg_count;
10653 ELSE
10654 x_msg_count := l_msg_count;
10655 END IF;
10656 x_return_status := FND_API.G_RET_STS_ERROR;
10657 IF l_debug_mode = 'Y' THEN
10658 pa_debug.reset_curr_function;
10659 END IF;
10660 WHEN OTHERS THEN
10661 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10662 x_msg_count := 1;
10663 x_msg_data := SQLERRM;
10664 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
10665 ,p_procedure_name => 'check_and_create_task_rec_info');
10666
10667 IF l_debug_mode = 'Y' THEN
10668 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
10669 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
10670 pa_debug.reset_curr_function;
10671 END IF;
10672 RAISE;
10673
10674 END check_and_create_task_rec_info;
10675
10676 /*=============================================================================
10677 This api would be called for a finplan version, whenever there is a change
10678 either in planning level or resource list or time phase or rbs version.
10679
10680 Logic: If no change in any of the parameters, simply return
10681 If planning level changes
10682 all the resource assignments would be deleted
10683 default planning resources are created
10684 If resource list changes
10685 all the task, resource mappings are deleted
10686 for task, financial element planning resources are updated with
10687 new rlm id and rbs id
10688 If RBS changes
10689 all the res assignments are updated with new rbs mapping
10690
10691 Bug 3867302 Sep 21 2004 For ci versions reporting data is not maintained
10692
10693 -- Note : This api is also called from PaFinPlanControlItemImpactAMImpl.java with p_time_phase_change_flag as 'Y' to
10694 -- delete the budget lines.
10695
10696 -- Bug 4724017: CDM Enhancement: Changes in behavior:
10697 Whenever the planning level is changed for an existing version,
10698 default planning transaction would be created only for the vesions
10699 which uses an uncategorized resource list.
10700 -- Bug 5754758: Modified to delete lines from pa_resource_asgn_curr before going to
10701 create_default_plan_txn api.
10702
10703 ==============================================================================*/
10704
10705 PROCEDURE Refresh_Plan_Txns(
10706 p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE
10707 ,p_plan_level_change IN VARCHAR2
10708 ,p_resource_list_change IN VARCHAR2
10709 ,p_rbs_version_change IN VARCHAR2
10710 ,p_time_phase_change_flag IN VARCHAR2
10711 ,p_ci_ver_agr_change_flag IN VARCHAR2 DEFAULT 'N' --IPM Arch Enhancement Bug 4865563
10712 ,p_rev_der_method_change IN VARCHAR2 DEFAULT 'N' --bug 5152892
10713 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10714 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10715 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
10716 AS
10717 --Start of variables used for debugging
10718 l_return_status VARCHAR2(1);
10719 l_msg_count NUMBER := 0;
10720 l_msg_data VARCHAR2(2000);
10721 l_data VARCHAR2(2000);
10722 l_msg_index_out NUMBER;
10723 l_debug_mode VARCHAR2(30);
10724 l_error_msg_code VARCHAR2(30);
10725
10726 l_people_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
10727 l_equip_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
10728 l_fin_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
10729 l_mat_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
10730
10731 l_txn_source_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10732 l_res_list_member_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10733 l_rbs_element_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10734 l_txn_accum_header_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10735
10736 l_budget_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10737
10738 -- IPM changes Bug 5003827 Issue 22
10739 l_fp_cols_rec pa_fp_gen_amount_utils.fp_cols;
10740 l_delete_ra_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10741 l_delete_flag VARCHAR2(1); -- Bug 5003827 Issue 28
10742 l_rollup_flag VARCHAR2(1); -- Bug 5003827 Issue 28
10743 -- END of IPM changes Bug 5003827 Issue 22
10744
10745 CURSOR budget_version_info_cur IS
10746 SELECT bv.project_id project_id
10747 ,bv.resource_list_id
10748 ,Decode(bv.version_type
10749 ,'COST', cost_fin_plan_level_code
10750 ,'REVENUE', revenue_fin_plan_level_code
10751 ,'ALL', all_fin_plan_level_code) fin_plan_level_code
10752 ,pfo.rbs_version_id rbs_version_id
10753 ,pfo.fin_plan_type_id fin_plan_type_id
10754 ,bv.ci_id ci_id
10755 FROM pa_proj_fp_options pfo, pa_budget_versions bv
10756 WHERE bv.project_id = pfo.project_id
10757 AND pfo.fin_plan_version_id = bv.budget_version_id
10758 AND bv.budget_version_id = p_budget_version_id;
10759
10760 budget_version_info_rec budget_version_info_cur%ROWTYPE;
10761
10762 -- added for bug 4724017:
10763 l_res_list_uncategorized_flag pa_resource_lists_all_bg.uncategorized_flag%TYPE;
10764
10765 BEGIN
10766
10767 x_msg_count := 0;
10768 x_return_status := FND_API.G_RET_STS_SUCCESS;
10769
10770 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
10771 l_debug_mode := NVL(l_debug_mode, 'Y');
10772
10773 -- Set curr function
10774 IF l_debug_mode = 'Y' THEN
10775 PA_DEBUG.set_curr_function(
10776 p_function =>'PA_FP_PLANNING_TRANSACTION_PUB.Refresh_Plan_Txns'
10777 ,p_debug_mode => l_debug_mode );
10778 END IF;
10779 -- Check for business rules violations
10780
10781 IF l_debug_mode = 'Y' THEN
10782 pa_debug.g_err_stage:='Validating input parameters';
10783 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
10784 END IF;
10785
10786 IF (p_budget_version_id IS NULL)
10787 THEN
10788
10789 IF l_debug_mode = 'Y' THEN
10790 pa_debug.g_err_stage:='p_budget_version_id = '|| p_budget_version_id;
10791 pa_debug.write('Refresh_Plan_Txns: ' ||g_module_name,pa_debug.g_err_stage,5);
10792 END IF;
10793
10794 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10795 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
10796
10797 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10798
10799 END IF;
10800
10801 -- If there is no change in planning level or res list or RBS return
10802
10803 IF nvl(p_plan_level_change, 'N') = 'N' AND
10804 nvl(p_resource_list_change, 'N') = 'N' AND
10805 nvl(p_rbs_version_change, 'N') = 'N' AND
10806 nvl(p_time_phase_change_flag, 'N') = 'N' AND
10807 nvl(p_rev_der_method_change,'N') = 'N' --Bug 5462471
10808 THEN
10809 IF l_debug_mode = 'Y' THEN
10810 pa_debug.g_err_stage:='No change required, Exiting Refresh_Plan_Txns';
10811 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
10812 -- reset curr function
10813 pa_debug.Reset_Curr_Function();
10814 END IF;
10815 RETURN;
10816 END IF;
10817
10818 OPEN budget_version_info_cur;
10819 FETCH budget_version_info_cur INTO budget_version_info_rec;
10820 CLOSE budget_version_info_cur;
10821
10822 IF nvl(p_plan_level_change, 'N') = 'Y' OR
10823 nvl(p_resource_list_change, 'N') = 'Y' OR
10824 nvl(p_time_phase_change_flag, 'N') = 'Y' OR
10825 nvl(p_rev_der_method_change,'N') = 'Y' --Bug 5462471
10826
10827 THEN
10828 -- Delete all the budget lines for the budget version
10829
10830 -- Bug Fix: 4569365. Removed MRC code.
10831 /*
10832 DELETE
10833 FROM pa_mc_budget_lines
10834 WHERE budget_version_id = p_budget_version_id;
10835 */
10836
10837 DELETE
10838 FROM pa_budget_lines
10839 WHERE budget_version_id = p_budget_version_id;
10840
10841 -- --IPM Arch Enhancement Bug 4865563, Bug 5003827 Issue 28
10842 IF (nvl(p_ci_ver_agr_change_flag,'N') = 'Y'
10843 OR nvl(p_time_phase_change_flag, 'N') = 'Y') THEN
10844
10845 pa_fp_gen_amount_utils.get_plan_version_dtls
10846 (p_budget_version_id => p_budget_version_id,
10847 x_fp_cols_rec => l_fp_cols_rec,
10848 x_return_status => x_return_status,
10849 x_msg_count => x_msg_count,
10850 x_msg_data => x_msg_data);
10851
10852 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10853
10854 IF l_debug_mode = 'Y' THEN
10855 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
10856 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
10857 END IF;
10858 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10859 END IF;
10860
10861 -- Bug 5003827 Issue 28
10862 IF nvl(p_ci_ver_agr_change_flag,'N') = 'Y' THEN
10863 l_delete_flag := 'Y';
10864 l_rollup_flag := 'N';
10865 ELSE -- nvl(p_time_phase_change_flag, 'N') = 'Y'
10866
10867 l_delete_flag := 'N';
10868 l_rollup_flag := 'Y';
10869 END IF;
10870 -- END Bug 5003827 Issue 28
10871
10872 pa_res_asg_currency_pub.maintain_data(
10873 p_fp_cols_rec => l_fp_cols_rec,
10874 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
10875 p_delete_flag => l_delete_flag, -- Bug 5003827 Issue 28
10876 p_copy_flag => 'N',
10877 p_src_version_id => NULL,
10878 p_copy_mode => NULL,
10879 p_rollup_flag => l_rollup_flag, -- Bug 5003827 Issue 28
10880 p_version_level_flag => 'Y',
10881 p_called_mode => 'SELF_SERVICE',
10882 x_return_status => x_return_status,
10883 x_msg_count => x_msg_count,
10884 x_msg_data => x_msg_data
10885 );
10886
10887 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10888
10889 IF l_debug_mode = 'Y' THEN
10890 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
10891 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
10892 END IF;
10893 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10894 END IF;
10895
10896 END IF;
10897 ----IPM Arch Enhancement Bug 4865563
10898
10899
10900 IF nvl(p_plan_level_change, 'N') = 'Y' OR
10901 nvl(p_rev_der_method_change,'N') = 'Y' THEN --Bug 5462471
10902 -- Delete all the planning transactions for the version.
10903
10904 IF l_debug_mode = 'Y' THEN
10905 pa_debug.g_err_stage:='Deleting all the resource assignment records for the version';
10906 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
10907 END IF;
10908
10909 DELETE
10910 FROM pa_resource_assignments
10911 WHERE budget_version_id = p_budget_version_id
10912 -- IPM changes Bug 5003827 Issue 22
10913 RETURNING resource_assignment_id BULK COLLECT INTO l_delete_ra_id_tbl;
10914 /* Bug 5754758 - Commenting the code, as the maintain_data is now called in version level mode to delete the RACs.
10915 IF l_delete_ra_id_tbl.COUNT > 0 THEN
10916 FORALL i IN l_delete_ra_id_tbl.first .. l_delete_ra_id_tbl.last
10917 INSERT INTO pa_resource_asgn_curr_tmp
10918 (RA_TXN_ID
10919 ,RESOURCE_ASSIGNMENT_ID
10920 ,DELETE_FLAG
10921 )
10922 SELECT pa_resource_asgn_curr_s.NEXTVAL
10923 ,l_delete_ra_id_tbl(i)
10924 ,'Y'
10925 FROM DUAL;
10926 END IF;
10927 -- END of IPM changes Bug 5003827 Issue 22
10928 */
10929 ----IPM Arch Enhancement Bug 5754758/4865563
10930 IF l_delete_ra_id_tbl.COUNT > 0 THEN --{
10931 pa_fp_gen_amount_utils.get_plan_version_dtls
10932 (p_budget_version_id => p_budget_version_id,
10933 x_fp_cols_rec => l_fp_cols_rec,
10934 x_return_status => x_return_status,
10935 x_msg_count => x_msg_count,
10936 x_msg_data => x_msg_data);
10937
10938 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10939
10940 IF l_debug_mode = 'Y' THEN
10941 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
10942 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
10943 END IF;
10944 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10945 END IF;
10946
10947 pa_res_asg_currency_pub.maintain_data(
10948 p_fp_cols_rec => l_fp_cols_rec,
10949 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
10950 p_delete_flag => 'Y',
10951 p_copy_flag => 'N',
10952 p_src_version_id => NULL,
10953 p_copy_mode => NULL,
10954 p_rollup_flag => 'N',
10955 p_version_level_flag => 'Y',
10956 p_called_mode => 'SELF_SERVICE',
10957 x_return_status => x_return_status,
10958 x_msg_count => x_msg_count,
10959 x_msg_data => x_msg_data
10960 );
10961
10962 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10963
10964 IF l_debug_mode = 'Y' THEN
10965 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
10966 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
10967 END IF;
10968 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10969 END IF;
10970
10971 END IF;
10972 ----IPM Arch Enhancement Bug 5754758/4865563
10973
10974 -- bug 4724017: Checking for categorized resource list to avoid
10975 -- calling create_default_task_plan_txns, not to create default
10976 -- planning txns for categorized RLs, when planning level changes.
10977 IF l_debug_mode = 'Y' THEN
10978 pa_debug.g_err_stage:='Fetching uncategorized flag when planning level changes';
10979 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
10980 END IF;
10981 BEGIN
10982 SELECT nvl(uncategorized_flag,'N')
10983 INTO l_res_list_uncategorized_flag
10984 FROM pa_resource_lists_all_bg
10985 WHERE resource_list_id = budget_version_info_rec.resource_list_id;
10986
10987 IF l_debug_mode = 'Y' THEN
10988 pa_debug.g_err_stage:='l_res_list_uncategorized_flag: ' || l_res_list_uncategorized_flag;
10989 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
10990 END IF;
10991 EXCEPTION
10992 WHEN NO_DATA_FOUND THEN
10993 IF l_debug_mode = 'Y' THEN
10994 pa_debug.g_err_stage:='No uncategorized flag found for the resource list id passed';
10995 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
10996 END IF;
10997 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10998 END;
10999
11000 -- added for bug 4724017:
11001 -- Creation of default planning transaction is not done for versions
11002 -- being created with categorized resource list.
11003 IF l_res_list_uncategorized_flag = 'Y' THEN
11004 -- Insert default task planning trasaction for the version
11005
11006 IF l_debug_mode = 'Y' THEN
11007 pa_debug.g_err_stage:='Calling pa_fp_planning_transaction_pub.create_default_task_plan_txns';
11008 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11009 END IF;
11010
11011 pa_fp_planning_transaction_pub.create_default_task_plan_txns (
11012 p_budget_version_id => p_budget_version_id
11013 ,p_version_plan_level_code => budget_version_info_rec.fin_plan_level_code
11014 ,x_return_status => x_return_status
11015 ,x_msg_count => x_msg_count
11016 ,x_msg_data => x_msg_data );
11017
11018 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11019 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11020 END IF;
11021
11022 END IF; -- end bug 4724017
11023 END IF;
11024
11025 IF nvl(p_resource_list_change, 'N') = 'Y' THEN
11026
11027 -- Delete all the planning resources where neither rlmID is 0
11028 -- Or resource is 'FINANCIAL_ELEMENTS'
11029 -- Bug 3658232 added null handling for resource class flag
11030
11031 DELETE FROM pa_resource_assignments
11032 WHERE budget_version_id = p_budget_version_id
11033 AND
11034 NOT (resource_class_code = 'FINANCIAL_ELEMENTS' AND nvl(resource_class_flag,'N') = 'Y')
11035 -- IPM changes Bug 5003827 Issue 22
11036 RETURNING resource_assignment_id BULK COLLECT INTO l_delete_ra_id_tbl;
11037
11038 IF l_delete_ra_id_tbl.COUNT > 0 THEN
11039 FORALL i IN l_delete_ra_id_tbl.first .. l_delete_ra_id_tbl.last
11040 INSERT INTO pa_resource_asgn_curr_tmp
11041 (RA_TXN_ID
11042 ,RESOURCE_ASSIGNMENT_ID
11043 ,DELETE_FLAG
11044 )
11045 SELECT pa_resource_asgn_curr_s.NEXTVAL
11046 ,l_delete_ra_id_tbl(i)
11047 ,'Y'
11048 FROM DUAL;
11049 END IF;
11050 -- END of IPM changes Bug 5003827 Issue 22
11051
11052
11053 -- Fetch rlm id of FINANCIAL ELEMENT resource class for new resource list id
11054
11055 PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
11056 ( p_project_id => budget_version_info_rec.project_id
11057 ,p_resource_list_id => budget_version_info_rec.resource_list_id
11058 ,x_people_res_class_rlm_id => l_people_res_class_rlm_id
11059 ,x_equip_res_class_rlm_id => l_equip_res_class_rlm_id
11060 ,x_fin_res_class_rlm_id => l_fin_res_class_rlm_id
11061 ,x_mat_res_class_rlm_id => l_mat_res_class_rlm_id
11062 ,x_return_status => l_return_status
11063 ,x_msg_count => l_msg_count
11064 ,x_msg_data => l_msg_data);
11065
11066 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11067 IF l_debug_mode = 'Y' THEN
11068 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
11069 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
11070 END IF;
11071 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11072 END IF;
11073
11074 -- Update all the task planning elements with new FINACIAL ELEMENT rlmid
11075 IF l_debug_mode = 'Y' THEN
11076 pa_debug.g_err_stage:='Updaing res assignments with new FINANCIAL ELEMENTS rlmid : ' || l_fin_res_class_rlm_id;
11077 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11078 END IF;
11079
11080 UPDATE pa_resource_assignments
11081 SET resource_list_member_id = l_fin_res_class_rlm_id
11082 WHERE budget_version_id = p_budget_version_id;
11083 --AND resource_class_code = 'FINANCIAL_ELEMENTS' --Bug 4200168. RL/PL change both can not happen at the same time.
11084 --AND resource_class_flag = 'Y';
11085
11086 END IF;
11087
11088 -- IPM changes Bug 5003827 Issue 22
11089 IF l_delete_ra_id_tbl.COUNT > 0 THEN --{
11090 pa_fp_gen_amount_utils.get_plan_version_dtls
11091 (p_project_id => budget_version_info_rec.project_id,
11092 p_budget_version_id => p_budget_version_id,
11093 x_fp_cols_rec => l_fp_cols_rec,
11094 x_return_status => x_return_status,
11095 x_msg_count => x_msg_count,
11096 x_msg_data => x_msg_data);
11097
11098 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11099
11100 IF l_debug_mode = 'Y' THEN
11101 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
11102 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
11103 END IF;
11104 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11105 END IF;
11106
11107 pa_res_asg_currency_pub.maintain_data(
11108 p_fp_cols_rec => l_fp_cols_rec,
11109 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
11110 p_delete_flag => 'Y',
11111 p_copy_flag => 'N',
11112 p_src_version_id => NULL,
11113 p_copy_mode => NULL,
11114 p_rollup_flag => 'N',
11115 p_version_level_flag => 'N',
11116 p_called_mode => 'SELF_SERVICE',
11117 x_return_status => x_return_status,
11118 x_msg_count => x_msg_count,
11119 x_msg_data => x_msg_data
11120 );
11121
11122 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11123
11124 IF l_debug_mode = 'Y' THEN
11125 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
11126 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
11127 END IF;
11128 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11129 END IF;
11130 END IF; --} IF l_delete_ra_id_tbl.COUNT > 0 THEN
11131 -- END of IPM changes Bug 5003827 Issue 22
11132
11133
11134 -- Calling the rollup api to correct the amounts related data in
11135 -- pa_budget_versions and pa_resource_assignments for the entire version
11136 PA_FP_ROLLUP_PKG.rollup_budget_version
11137 (p_budget_version_id => p_budget_version_id
11138 ,p_entire_version => 'Y'
11139 ,x_return_status => l_return_status
11140 ,x_msg_count => l_msg_count
11141 ,x_msg_data => l_msg_data);
11142
11143 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11144 IF l_debug_mode = 'Y' THEN
11145 pa_debug.g_err_stage:='Called API PA_FP_ROLLUP_PKG.rollup_budget_version returned error';
11146 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
11147 END IF;
11148 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11149 END IF;
11150 END IF;
11151
11152 -- Note: As of now rbs can not be changed at version level.
11153 -- It can only be changed at plan type level. This has been
11154 -- the initial design and not changed
11155 IF nvl(p_rbs_version_change, 'N') = 'Y' AND
11156 (budget_version_info_rec.ci_id IS NULL) -- bug 3867302
11157 THEN
11158
11159 Refresh_rbs_for_versions(
11160 p_project_id => budget_version_info_rec.project_id
11161 ,p_fin_plan_type_id => budget_version_info_rec.fin_plan_type_id
11162 ,p_calling_context => 'SINGLE_VERSION'
11163 ,p_budget_version_id => p_budget_version_id
11164 ,x_return_status => l_return_status
11165 ,x_msg_count => l_msg_count
11166 ,x_msg_data => l_msg_data);
11167
11168 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11169 IF l_debug_mode = 'Y' THEN
11170 pa_debug.g_err_stage:='Called API Refresh_rbs_for_versions returned error';
11171 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
11172 END IF;
11173 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11174 END IF;
11175 END IF;
11176
11177 -- If Planning Level, Resource list or Time phasing is changed, calling PJI apis for
11178 -- correct summarization data
11179 IF (budget_version_info_rec.ci_id IS NULL) AND -- bug 3867302
11180 (nvl(p_rbs_version_change, 'N') = 'N') AND -- put for clarity
11181 (nvl(p_plan_level_change, 'N') = 'Y' OR
11182 nvl(p_resource_list_change, 'N') = 'Y' OR
11183 nvl(p_time_phase_change_flag, 'N') = 'Y' OR
11184 nvl(p_rev_der_method_change,'N') ='Y' )--Bug 5462471
11185 THEN
11186 -- populating the l_budget_version_id_tbl with p_budget_version_id
11187 l_budget_version_id_tbl := SYSTEM.pa_num_tbl_type(p_budget_version_id);
11188
11189 IF l_debug_mode = 'Y' THEN
11190 pa_debug.g_err_stage:='Calling PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE';
11191 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11192 END IF;
11193
11194 -- Call PJI delete api first to delete existing summarization data
11195 PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
11196 p_fp_version_ids => l_budget_version_id_tbl,
11197 x_return_status => l_return_status,
11198 x_msg_code => l_error_msg_code);
11199
11200 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11201 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11202 p_msg_name => l_error_msg_code);
11203 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11204 END IF;
11205
11206 IF l_debug_mode = 'Y' THEN
11207 pa_debug.g_err_stage:='Call complete to PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE';
11208 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11209 END IF;
11210
11211 IF l_debug_mode = 'Y' THEN
11212 pa_debug.g_err_stage:='Calling PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE';
11213 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11214 END IF;
11215
11216 -- Call PLAN_CREATE to create summarization data as per the new RBS
11217 PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE (
11218 p_fp_version_ids => l_budget_version_id_tbl,
11219 x_return_status => l_return_status,
11220 x_msg_code => l_error_msg_code);
11221
11222 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11223 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11224 p_msg_name => l_error_msg_code);
11225 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11226 END IF;
11227
11228 IF l_debug_mode = 'Y' THEN
11229 pa_debug.g_err_stage:='Call complete to PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE';
11230 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11231 END IF;
11232
11233 END IF;
11234
11235 IF l_debug_mode = 'Y' THEN
11236 pa_debug.g_err_stage:='Exiting Refresh_Plan_Txns';
11237 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11238 -- reset curr function
11239 pa_debug.Reset_Curr_Function();
11240 END IF;
11241
11242 EXCEPTION
11243
11244 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11245 l_msg_count := FND_MSG_PUB.count_msg;
11246 IF l_msg_count = 1 THEN
11247 PA_INTERFACE_UTILS_PUB.get_messages
11248 (p_encoded => FND_API.G_TRUE
11249 ,p_msg_index => 1
11250 ,p_msg_count => l_msg_count
11251 ,p_msg_data => l_msg_data
11252 ,p_data => l_data
11253 ,p_msg_index_out => l_msg_index_out);
11254
11255 x_msg_data := l_data;
11256 x_msg_count := l_msg_count;
11257 ELSE
11258 x_msg_count := l_msg_count;
11259 END IF;
11260
11261 x_return_status := FND_API.G_RET_STS_ERROR;
11262
11263 IF l_debug_mode = 'Y' THEN
11264 pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
11265 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
11266 -- reset curr function
11267 pa_debug.Reset_Curr_Function();
11268 END IF;
11269
11270 RETURN;
11271 WHEN Others THEN
11272 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11273 x_msg_count := 1;
11274 x_msg_data := SQLERRM;
11275
11276 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
11277 ,p_procedure_name => 'Refresh_Plan_Txns');
11278
11279 IF l_debug_mode = 'Y' THEN
11280 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
11281 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
11282 -- reset curr function
11283 pa_debug.Reset_Curr_Function();
11284 END IF;
11285 RAISE;
11286 END Refresh_Plan_Txns;
11287
11288
11289 /* This api will call add_planning_transaction in such a way that calculate api would
11290 never be called . For IPM development added two parameters p_calling_context .
11291 This will be passed as SELECT_TASKS from the select tasks page. The add planning
11292 transactions will be called from here passing the context as create_version. This
11293 is because this flow is also used from the add tasks and resources page to add the
11294 tasks and resources as planning elements depending on the choice.*/
11295 PROCEDURE Create_Default_Task_Plan_Txns (
11296 P_budget_version_id IN Number
11297 ,P_version_plan_level_code IN VARCHAR2
11298 ,p_calling_context IN VARCHAR2
11299 ,p_add_all_resources_flag IN VARCHAR2
11300 ,X_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11301 ,X_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11302 ,X_msg_data OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
11303 AS
11304
11305
11306 l_module_name varchar2(100):= 'pa.plsql.pa_fp_planning_transaction_pub';
11307
11308 -- Start of variables used for debugging purpose
11309 l_msg_count NUMBER :=0;
11310 l_data VARCHAR2(2000);
11311 l_msg_data VARCHAR2(2000);
11312 l_error_msg_code VARCHAR2(30);
11313 l_msg_index_out NUMBER;
11314 l_return_status VARCHAR2(2000);
11315 l_debug_mode VARCHAR2(30);
11316 -- End of variables used for debugging purpose
11317
11318 CURSOR version_info_cur (c_budget_version_id number) is
11319 select bv.project_id
11320 ,PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(bv.project_id) STRUCTURE_VERSION_ID --Bug 3546208
11321 ,bv.fin_plan_type_id
11322 ,Decode(bv.version_type,PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST,pfo.cost_fin_plan_level_code
11323 ,PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE,pfo.revenue_fin_plan_level_code
11324 ,PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL,pfo.all_fin_plan_level_code) plan_level_code
11325 ,DECODE(fin_plan_preference_code,
11326 PA_FP_CONSTANTS_PKG.G_PREF_COST_AND_REV_SAME, pfo.all_resource_list_id,
11327 PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY, pfo.cost_resource_list_id,
11328 PA_FP_CONSTANTS_PKG.G_PREF_REVENUE_ONLY, pfo.revenue_resource_list_id) resource_list_id
11329 from pa_budget_versions bv,
11330 pa_proj_fp_options pfo
11331 where bv.budget_version_id = c_budget_version_id
11332 and pfo.project_id = bv.project_id
11333 and pfo.fin_plan_type_id = bv.fin_plan_type_id
11334 and pfo.fin_plan_version_id = bv.budget_version_id;
11335
11336 version_info_rec version_info_cur%ROWTYPE;
11337
11338 CURSOR lowest_tasks_cur (c_parent_structure_version_id number) is
11339 select v.element_version_id
11340 from pa_struct_task_wbs_v v
11341 where v.parent_structure_version_id = c_parent_structure_version_id
11342 and v.financial_task_flag = 'Y' -- raja bug 3690418
11343 and v.task_level = 'L'
11344 and not exists (select 'x'
11345 from pa_resource_assignments pra
11346 where pra.budget_version_id = P_budget_version_id
11347 and pra.task_id = v.task_id
11348 and p_calling_context = 'SELECT_TASKS');
11349
11350 CURSOR top_tasks_cur (c_project_id number, c_parent_structure_version_id number) is
11351 select b.element_version_id
11352 from pa_tasks a, pa_proj_element_versions b
11353 /* Replaced pa_struct_task_wbs_v with base tables for performance reasons.
11354 * Note that financial_task_flag of pa_proj_element_versions cannot be used
11355 * since it is set to Y even for tasks that are part of fin struct ver but not
11356 * yet published. (I.e., It could be Y for tasks not present in pa_tasks too). This
11357 * required a join with pa_tasks to identify true fin tasks which can be
11358 * budgeted for */
11359 where b.parent_structure_version_id = c_parent_structure_version_id
11360 and b.object_type = 'PA_TASKS'
11361 and a.project_id = c_project_id
11362 and a.project_id = b.project_id
11363 and a.task_id = b.proj_element_id
11364 and a.task_id = a.top_task_id
11365 and not exists (select 'x'
11366 from pa_resource_assignments pra
11367 where pra.budget_version_id = P_budget_version_id
11368 and pra.task_id = a.task_id
11369 and p_calling_context = 'SELECT_TASKS');
11370
11371 l_max_fetch_size NUMBER := 200;
11372
11373 l_element_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
11374
11375 --l_proj_element_id_tbl element_versions_tbl1_type;
11376 --l_element_version_id_tbl element_versions_tbl2_type;
11377 l_resource_list_member_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
11378
11379 l_start_date pa_projects_all.start_date%TYPE;
11380 l_completion_date pa_projects_all.completion_date%TYPE;
11381
11382 l_res_list_is_uncategorized VARCHAR2(1);
11383 l_is_resource_list_grouped VARCHAR2(1);
11384 l_group_resource_type_id NUMBER;
11385
11386 l_people_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
11387 l_equip_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
11388 l_fin_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE :=0;
11389 l_mat_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
11390
11391 l_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE;
11392
11393 BEGIN
11394 FND_MSG_PUB.initialize;
11395 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
11396 l_debug_mode := NVL(l_debug_mode, 'Y');
11397 IF l_debug_mode = 'Y' THEN
11398 pa_debug.set_curr_function( p_function => 'Create_Default_Task_Plan_Txns',
11399 p_debug_mode => l_debug_mode );
11400 END IF;
11401 x_msg_count := 0;
11402 x_return_status := FND_API.G_RET_STS_SUCCESS;
11403
11404
11405 -- Check for business rules violations
11406
11407 IF l_debug_mode = 'Y' THEN
11408 pa_debug.g_err_stage:='Validating input parameters';
11409 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11410 END IF;
11411
11412 -- Check if budget version id is null
11413
11414 IF (P_budget_version_id IS NULL) OR
11415 (nvl(p_calling_context,'-1') NOT IN ('CREATE_VERSION','SELECT_TASKS')) OR
11416 (nvl(p_add_all_resources_flag,'x') NOT IN ('Y','N'))
11417 THEN
11418
11419 IF l_debug_mode = 'Y' THEN
11420 pa_debug.g_err_stage:='P_budget_version_id = '||P_budget_version_id;
11421 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
11422 END IF;
11423
11424 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11425 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
11426
11427 IF l_debug_mode = 'Y' THEN
11428 pa_debug.g_err_stage:='Invalid Arguments Passed';
11429 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
11430 END IF;
11431 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11432
11433 END IF;
11434
11435 --Fetch budget version values
11436
11437 IF l_debug_mode = 'Y' THEN
11438 pa_debug.g_err_stage:='Fetching budget version properties';
11439 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11440 END IF;
11441
11442 OPEN version_info_cur(P_budget_version_id);
11443 FETCH version_info_cur INTO version_info_rec;
11444 CLOSE version_info_cur;
11445
11446 --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> valueof input '|| P_version_plan_level_code);
11447 IF P_version_plan_level_code IS NOT NULL THEN
11448 version_info_rec.plan_level_code := P_version_plan_level_code;
11449 END IF;
11450 --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> valueof version_info_rec '|| version_info_rec.plan_level_code);
11451
11452 --Fetch Start Date and Completion Date
11453
11454 BEGIN
11455 SELECT start_date,completion_date
11456 INTO l_start_date,l_completion_date
11457 FROM pa_projects_all
11458 WHERE project_id = version_info_rec.project_id;
11459 EXCEPTION
11460 WHEN OTHERS THEN
11461 IF l_debug_mode = 'Y' THEN
11462 pa_debug.g_err_stage:='Error while fetching start and completion dates for the project';
11463 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11464 END IF;
11465 RAISE;
11466 END;
11467
11468
11469 PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
11470 (p_project_id => version_info_rec.project_id,
11471 p_resource_list_id => version_info_rec.resource_list_id,
11472 x_people_res_class_rlm_id => l_people_res_class_rlm_id,
11473 x_equip_res_class_rlm_id => l_equip_res_class_rlm_id ,
11474 x_fin_res_class_rlm_id => l_fin_res_class_rlm_id ,
11475 x_mat_res_class_rlm_id => l_mat_res_class_rlm_id ,
11476 x_return_status => l_return_status,
11477 x_msg_count => l_msg_count,
11478 x_msg_data => l_msg_data);
11479 --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> rlmids'|| l_people_res_class_rlm_id || 'x' || l_equip_res_class_rlm_id || 'x' || l_fin_res_class_rlm_id || 'x' || l_mat_res_class_rlm_id);
11480
11481 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11482 IF l_debug_mode = 'Y' THEN
11483 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
11484 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
11485 END IF;
11486 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11487 END IF;
11488
11489 BEGIN
11490 SELECT plan_class_code
11491 INTO l_plan_class_code
11492 FROM pa_fin_plan_types_b
11493 where fin_plan_type_id = version_info_rec.fin_plan_type_id;
11494
11495 EXCEPTION
11496 WHEN OTHERS THEN
11497 IF l_debug_mode = 'Y' THEN
11498 pa_debug.g_err_stage:='Error while fetching plan_class_code for the budget_version_id';
11499 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
11500 END IF;
11501 RAISE;
11502 END;
11503
11504 --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> plan_class_code '|| l_plan_class_code);
11505
11506 IF p_add_all_resources_flag <> 'Y' THEN
11507 l_resource_list_member_id_tbl.extend(1);
11508 l_resource_list_member_id_tbl(1):= l_fin_res_class_rlm_id;
11509 ELSE
11510 SELECT resource_list_member_id BULK COLLECT
11511 INTO l_resource_list_member_id_tbl
11512 FROM pa_resource_list_members prl,
11513 PA_PLAN_RES_DEFAULTS pr, /*7291493*/
11514 (SELECT control_flag
11515 FROM pa_resource_lists_all_bg
11516 WHERE resource_list_id = version_info_rec.resource_list_id) rl_control_flag
11517 WHERE resource_list_id = version_info_rec.resource_list_id
11518 AND ((rl_control_flag.control_flag = 'N' AND
11519 prl.object_type = 'PROJECT' AND
11520 prl.object_id = version_info_rec.project_id)
11521 OR
11522 (rl_control_flag.control_flag = 'Y' AND
11523 prl.object_type = 'RESOURCE_LIST' AND
11524 prl.object_id = version_info_rec.resource_list_id)) AND
11525 prl.resource_class_id = pr.resource_class_id AND
11526 pr.enabled_flag = 'Y';
11527 END IF;
11528
11529
11530 IF version_info_rec.plan_level_code = PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_PROJECT THEN
11531 IF l_debug_mode = 'Y' THEN
11532 pa_debug.g_err_stage:= 'Planning at project level: Inserting a record';
11533 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11534 END IF;
11535
11536 l_element_version_id_tbl.extend(1);
11537 l_element_version_id_tbl(1):= 0;
11538
11539 pa_fp_planning_transaction_pub.add_planning_transactions (
11540 p_context => l_plan_class_code
11541 /* Passing calling module as creation version, since we dont want calculate api to be called */
11542 ,p_calling_module => 'CREATE_VERSION'
11543 ,p_project_id => version_info_rec.project_id
11544 ,p_budget_version_id => p_budget_version_id
11545 ,p_task_elem_version_id_tbl => l_element_version_id_tbl
11546 ,p_resource_list_member_id_tbl => l_resource_list_member_id_tbl
11547 ,x_return_status => l_return_status
11548 ,x_msg_count => l_msg_count
11549 ,x_msg_data => l_msg_data );
11550
11551 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11552 IF l_debug_mode = 'Y' THEN
11553 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
11554 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
11555 END IF;
11556 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11557 END IF;
11558
11559
11560 ELSIF version_info_rec.plan_level_code = PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_TOP THEN
11561 IF l_debug_mode = 'Y' THEN
11562 pa_debug.g_err_stage:= 'Planning at top task level: Opening cursor top_tasks_cur';
11563 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11564 END IF;
11565
11566 OPEN top_tasks_cur( version_info_rec.project_id, version_info_rec.structure_version_id);
11567
11568 IF l_debug_mode = 'Y' THEN
11569 pa_debug.g_err_stage:= 'Fetching cursor values for top tasks and doing bulk insert';
11570 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11571 END IF;
11572
11573 LOOP
11574 FETCH top_tasks_cur BULK COLLECT INTO l_element_version_id_tbl LIMIT l_max_fetch_size;
11575
11576 IF nvl(l_element_version_id_tbl.last,0) >= 1 THEN
11577 pa_fp_planning_transaction_pub.add_planning_transactions (
11578 p_context => l_plan_class_code
11579 /* Passing calling module as creation version, since we dont want calculate api to be called */
11580 ,p_calling_module => 'CREATE_VERSION'
11581 ,p_project_id => version_info_rec.project_id
11582 ,p_budget_version_id => p_budget_version_id
11583 ,p_task_elem_version_id_tbl => l_element_version_id_tbl
11584 ,p_resource_list_member_id_tbl => l_resource_list_member_id_tbl
11585 ,x_return_status => l_return_status
11586 ,x_msg_count => l_msg_count
11587 ,x_msg_data => l_msg_data );
11588 END IF;
11589
11590 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11591 IF l_debug_mode = 'Y' THEN
11592 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
11593 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
11594 END IF;
11595 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11596 END IF;
11597 -- Exit if fetch size is less than 200
11598 EXIT WHEN NVL(l_element_version_id_tbl.last,0) < l_max_fetch_size;
11599 END LOOP;
11600
11601 CLOSE top_tasks_cur;
11602
11603 ELSIF version_info_rec.plan_level_code = PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_LOWEST THEN
11604 --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> '||PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_LOWEST);
11605
11606 IF l_debug_mode = 'Y' THEN
11607 pa_debug.g_err_stage:= 'Planning at lowest task level: Opening cursor lowest_tasks_cur';
11608 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11609 END IF;
11610
11611 OPEN lowest_tasks_cur( version_info_rec.structure_version_id);
11612
11613 IF l_debug_mode = 'Y' THEN
11614 pa_debug.g_err_stage:= 'Fetching cursor values for lowest tasks and doing bulk insert';
11615 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11616 END IF;
11617
11618
11619
11620 LOOP
11621 FETCH lowest_tasks_cur BULK COLLECT INTO l_element_version_id_tbl LIMIT l_max_fetch_size;
11622
11623 IF nvl(l_element_version_id_tbl.last,0) >= 1 THEN
11624 pa_fp_planning_transaction_pub.add_planning_transactions (
11625 p_context => l_plan_class_code
11626 /* Passing calling module as creation version, since we dont want calculate api to be called */
11627 ,p_calling_module => 'CREATE_VERSION'
11628 ,p_project_id => version_info_rec.project_id
11629 ,p_budget_version_id => p_budget_version_id
11630 ,p_task_elem_version_id_tbl => l_element_version_id_tbl
11631 ,p_resource_list_member_id_tbl => l_resource_list_member_id_tbl
11632 ,x_return_status => l_return_status
11633 ,x_msg_count => l_msg_count
11634 ,x_msg_data => l_msg_data );
11635
11636 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11637 IF l_debug_mode = 'Y' THEN
11638 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
11639 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
11640 END IF;
11641 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11642 END IF;
11643 END IF;
11644 -- Exit if fetch size is less than 200
11645 EXIT WHEN NVL(l_element_version_id_tbl.last,0) < l_max_fetch_size;
11646 END LOOP;
11647
11648 CLOSE lowest_tasks_cur;
11649 END IF;
11650
11651 IF l_debug_mode = 'Y' THEN
11652 pa_debug.g_err_stage:='Exiting Create_Default_Task_Plan_Txns:';
11653 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
11654 --Reset the error stack
11655 pa_debug.reset_curr_function;
11656 END IF;
11657 EXCEPTION
11658
11659 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11660 l_msg_count := FND_MSG_PUB.count_msg;
11661 IF l_msg_count = 1 THEN
11662 PA_INTERFACE_UTILS_PUB.get_messages
11663 (p_encoded => FND_API.G_TRUE
11664 ,p_msg_index => 1
11665 ,p_msg_count => l_msg_count
11666 ,p_msg_data => l_msg_data
11667 ,p_data => l_data
11668 ,p_msg_index_out => l_msg_index_out);
11669 x_msg_data := l_data;
11670 x_msg_count := l_msg_count;
11671 ELSE
11672 x_msg_count := l_msg_count;
11673 END IF;
11674 x_return_status := FND_API.G_RET_STS_ERROR;
11675 -- pa_debug.g_err_stage:='Invalid Arguments Passed';
11676 -- pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
11677 IF l_debug_mode = 'Y' THEN
11678 pa_debug.reset_curr_function;
11679 END IF;
11680 RETURN;
11681
11682 WHEN Others THEN
11683 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11684 x_msg_count := 1;
11685 x_msg_data := SQLERRM;
11686 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
11687 ,p_procedure_name => 'CREATE_DEFAULT_TASK_PLAN_TXNS');
11688 IF l_debug_mode = 'Y' THEN
11689 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
11690 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
11691 pa_debug.reset_curr_function;
11692 END IF;
11693 RAISE;
11694
11695 END Create_Default_Task_Plan_Txns;
11696
11697 /*=============================================================================
11698 This api is called upon save from Additional Workplan Options page.
11699 For versioning disabled case working version should be updated with values
11700 that of parent plan type record. The changes include deleting all the
11701 existing budget lines, resource assignments. Pa_proj_fp_options and
11702 pa_budget_versions should be updated with changed values.
11703
11704 Bug 3595063 For a shared structure, update current working version with the
11705 new settings.
11706
11707 Bug 3619687 **** Completely changed as per the new business rules ********
11708 Whenever there is a change in the Additional Workplan setting page,
11709 all the chages should be propagated to all the underlying workplan
11710 versions immediately upon save. If there is a change in RBS header,
11711 effort data for all the versions including published versions
11712 should be re-mapped and re-summarized
11713
11714 Bug 3619687 **** 15-Jun-2004 Additional Change Request for RBS change ****
11715 Whenever there is a change for RBS if versioning is disabled for
11716 the workplan structure, the change should be propagated to the
11717 workplan version immediately. If versioning is enabled, the change
11718 is applicable for all the future versions.
11719
11720 Bug 3619687 **** 25-Jun-2004 Additional Change Request ****
11721 Whenever there is a change to track workplan costs flag, calculate
11722 should be called for the costs to be calculted or nulled out as per
11723 the change.
11724 Bug 3725414 **** 28-Jun-2004 rbs_version_change should be propagated to working
11725 workplan version(s) of shared + versioning enabled structure
11726
11727 Bug 3937716 **** 07-Oct-2004 When time phasing has changed, pji data is not
11728 correct at the end of the process. Reason: delete_planning_transactions
11729 and calculate() do not have the old time phased code to pass it to
11730 the PJI update api for negating existing data. So, its decided that we
11731 change the above two apis not to call PJI apis in this flow and call
11732 plan_delete(), plan_create() at the end.
11733 ===============================================================================*/
11734
11735 PROCEDURE REFRESH_WP_SETTINGS(
11736 p_project_id IN pa_budget_versions.project_id%TYPE
11737 ,p_resource_list_change IN VARCHAR2 DEFAULT 'N' -- Bug 3619687
11738 ,p_time_phase_change IN VARCHAR2 DEFAULT 'N' -- Bug 3619687
11739 ,p_rbs_version_change IN VARCHAR2 DEFAULT 'N' -- Bug 3619687
11740 ,p_track_costs_flag_change IN VARCHAR2 DEFAULT 'N' -- Bug 3619687
11741 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11742 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11743 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
11744 AS
11745
11746 --Start of variables used for debugging
11747
11748 l_return_status VARCHAR2(1);
11749 l_msg_count NUMBER := 0;
11750 l_msg_data VARCHAR2(2000);
11751 l_data VARCHAR2(2000);
11752 l_msg_index_out NUMBER;
11753 l_debug_mode VARCHAR2(30);
11754 l_error_msg_code VARCHAR2(30);
11755
11756 --End of variables used for debugging
11757
11758 l_budget_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
11759 l_proj_fp_options_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
11760 l_task_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
11761 l_task_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
11762 l_task_number_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
11763 l_res_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
11764
11765 l_people_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
11766 l_equip_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
11767 l_fin_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
11768 l_mat_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
11769
11770 l_txn_source_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11771 l_res_list_member_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11772 l_rbs_element_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11773 l_txn_accum_header_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11774
11775 l_res_assignment_count NUMBER;
11776 l_wp_versioning_enabled_flag VARCHAR2(1);
11777 l_pub_budget_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
11778 l_pub_proj_fp_options_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
11779 l_proj_struct_ver_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
11780
11781
11782 CURSOR parent_plan_type_cur IS
11783 SELECT pfo.proj_fp_options_id
11784 ,pfo.track_workplan_costs_flag
11785 ,pfo.plan_in_multi_curr_flag
11786 ,pfo.rbs_version_id
11787 ,pfo.margin_derived_from_code
11788 ,pfo.factor_by_code
11789 ,pfo.cost_resource_list_id
11790 ,pfo.select_cost_res_auto_flag
11791 ,pfo.cost_time_phased_code
11792 ,pfo.cost_current_planning_period
11793 ,pfo.cost_period_mask_id
11794 ,pfo.projfunc_cost_rate_type
11795 ,pfo.projfunc_cost_rate_date_type
11796 ,pfo.projfunc_cost_rate_date
11797 ,pfo.project_cost_rate_type
11798 ,pfo.project_cost_rate_date_type
11799 ,pfo.project_cost_rate_date
11800 ,pfo.use_planning_rates_flag
11801 ,pfo.res_class_raw_cost_sch_id
11802 ,pfo.cost_emp_rate_sch_id
11803 ,pfo.cost_job_rate_sch_id
11804 ,pfo.cost_non_labor_res_rate_sch_id
11805 ,pfo.cost_res_class_rate_sch_id
11806 ,pfo.cost_burden_rate_sch_id
11807 FROM pa_proj_fp_options pfo
11808 ,pa_fin_plan_types_b fpt
11809 WHERE pfo.project_id = p_project_id
11810 AND pfo.fin_plan_type_id = fpt.fin_plan_type_id
11811 AND fpt.use_for_workplan_flag = 'Y'
11812 AND pfo.fin_plan_option_level_code = 'PLAN_TYPE';
11813
11814 parent_plan_type_rec parent_plan_type_cur%ROWTYPE;
11815
11816 -- Cursor to fetch all the working version including submitted version
11817 -- if any to update the versions with the changes in workplan setting
11818 -- page. Change in resoruce list and time phasing is restricted if there
11819 -- is a baselined or submitted version.
11820 CURSOR working_workplan_versions_cur IS
11821 SELECT bv.budget_version_id
11822 ,pfo.proj_fp_options_id
11823 ,bv.project_structure_version_id
11824 FROM pa_budget_versions bv,
11825 pa_proj_elem_ver_structure ver,
11826 pa_proj_fp_options pfo
11827 WHERE bv.project_id = p_project_id
11828 AND bv.wp_version_flag = 'Y'
11829 AND bv.project_id = ver.project_id
11830 AND bv.project_structure_version_id = ver.element_version_id
11831 AND (l_wp_versioning_enabled_flag = 'N' OR -- UT
11832 ver.status_code IN('STRUCTURE_WORKING','STRUCTURE_SUBMITTED'))
11833 AND pfo.project_id = p_project_id
11834 AND pfo.fin_plan_version_id = bv.budget_version_id;
11835
11836 CURSOR published_versions_cur IS
11837 SELECT bv.budget_version_id
11838 ,pfo.proj_fp_options_id
11839 FROM pa_budget_versions bv,
11840 pa_proj_elem_ver_structure ver,
11841 pa_proj_fp_options pfo
11842 WHERE bv.project_id = p_project_id
11843 AND bv.wp_version_flag = 'Y'
11844 AND bv.project_id = ver.project_id
11845 AND bv.project_structure_version_id = ver.element_version_id
11846 AND ver.status_code IN ('STRUCTURE_PUBLISHED')
11847 AND pfo.project_id = p_project_id
11848 AND pfo.fin_plan_version_id = bv.budget_version_id;
11849
11850
11851 -- Cursor to fetch required input data to delete task assignments
11852 -- for a workplan version. Using this data delete_planning_transactions
11853 -- api is called
11854 CURSOR data_for_delete_plan_txns_cur (c_budget_version_id NUMBER) IS
11855 SELECT wbs_element_version_id
11856 ,name
11857 ,element_number
11858 ,resource_assignment_id
11859 FROM pa_resource_assignments pra
11860 ,pa_proj_elements ppe
11861 WHERE pra.project_id = p_project_id
11862 AND pra.budget_version_id = c_budget_version_id
11863 AND pra.ta_display_flag = 'Y'
11864 AND pra.task_id = ppe.proj_element_id;
11865
11866 -- Cursor to fetch all the workplan versions for the project
11867 -- including the publsihed versions for RBS refresh
11868 CURSOR all_workplan_versions_cur IS
11869 SELECT bv.budget_version_id
11870 ,pfo.proj_fp_options_id
11871 FROM pa_budget_versions bv
11872 ,pa_proj_fp_options pfo
11873 WHERE bv.project_id = p_project_id
11874 AND bv.wp_version_flag = 'Y'
11875 AND pfo.fin_plan_version_id = bv.budget_version_id
11876 AND pfo.project_id = bv.project_id;
11877
11878 BEGIN
11879
11880 x_msg_count := 0;
11881 x_return_status := FND_API.G_RET_STS_SUCCESS;
11882
11883 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
11884 l_debug_mode := NVL(l_debug_mode, 'Y');
11885
11886 -- Set curr function
11887 IF l_debug_mode = 'Y' THEN
11888 pa_debug.set_curr_function(
11889 p_function =>'PA_FP_PLANNING_TRANSACTION_PUB.REFRESH_WP_SETTINGS'
11890 ,p_debug_mode => l_debug_mode );
11891 END IF;
11892 -- Check for business rules violations
11893 IF l_debug_mode = 'Y' THEN
11894 pa_debug.g_err_stage:='Validating input parameters';
11895 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
11896 END IF;
11897
11898 IF (p_project_id IS NULL)
11899 THEN
11900
11901 IF l_debug_mode = 'Y' THEN
11902 pa_debug.g_err_stage:='Project_id = '||p_project_id;
11903 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
11904 END IF;
11905
11906 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11907 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
11908
11909 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11910
11911 END IF;
11912
11913 -- Fetch all the plan type values that could have changed
11914 OPEN parent_plan_type_cur;
11915 FETCH parent_plan_type_cur INTO parent_plan_type_rec;
11916 CLOSE parent_plan_type_cur;
11917
11918 IF l_debug_mode = 'Y' THEN
11919 pa_debug.g_err_stage:='getting plan type info';
11920 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
11921 END IF;
11922
11923
11924 -- Check if versioning is enabled for wp structure
11925 l_wp_versioning_enabled_flag := PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id);
11926
11927 -- Fetch all the working plan versions in a table
11928 OPEN working_workplan_versions_cur;
11929 FETCH working_workplan_versions_cur
11930 BULK COLLECT INTO l_budget_version_id_tbl,l_proj_fp_options_id_tbl , l_proj_struct_ver_id_tbl;
11931 CLOSE working_workplan_versions_cur;
11932
11933
11934 IF l_debug_mode = 'Y' THEN
11935 pa_debug.g_err_stage:='getting woking versions';
11936 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
11937 END IF;
11938
11939
11940 -- Adding for bug 4543744
11941 /* Collecting all the working version records and inserting into the pji table
11942 with negative values of budget lines */
11943 IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
11944 OR nvl(p_track_costs_flag_change, 'N') = 'Y' OR (nvl(p_rbs_version_change, 'N') = 'Y' AND
11945 (nvl(PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id),'N') = 'N'
11946 OR nvl(PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id),'N') = 'Y')) THEN
11947
11948 IF l_debug_mode = 'Y' THEN
11949 pa_debug.g_err_stage:='About to insert negative lines';
11950 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
11951 pa_debug.g_err_stage:='l_budget_version_id_tbl' || l_budget_version_id_tbl.count;
11952 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
11953
11954 END IF;
11955
11956
11957 FOR i IN l_budget_version_id_tbl.FIRST .. l_budget_version_id_tbl.LAST
11958 LOOP
11959
11960 IF l_debug_mode = 'Y' THEN
11961 pa_debug.g_err_stage:='Calling call_update_rep_lines' || l_budget_version_id_tbl(i);
11962 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
11963 END IF;
11964
11965 PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api
11966 --( p_source => 'POPULATE_PJI_TABLE' --Commented for bug 5073350.
11967 ( p_source => 'REFRESH_WP_SETTINGS'
11968 ,p_budget_version_id => l_budget_version_id_tbl(i)
11969 ,p_qty_sign => -1
11970 ,x_return_status => x_return_status
11971 ,x_msg_data => x_msg_data
11972 ,x_msg_count => x_msg_count);
11973
11974 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11975
11976 IF l_debug_mode = 'Y' THEN
11977 pa_debug.g_err_stage:='PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api returned error';
11978 pa_debug.write( g_module_name,pa_debug.g_err_stage,5);
11979 END IF;
11980 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
11981 END IF;
11982
11983 END LOOP;
11984
11985 END IF; -- inserting negative rows
11986
11987 IF l_debug_mode = 'Y' THEN
11988 pa_debug.g_err_stage:='inserted -ve lines';
11989 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
11990 END IF;
11991
11992
11993 IF nvl(p_resource_list_change, 'N') = 'Y' THEN
11994
11995 OPEN published_versions_cur;
11996 FETCH published_versions_cur
11997 BULK COLLECT INTO l_pub_budget_version_id_tbl,l_pub_proj_fp_options_id_tbl ;
11998 CLOSE published_versions_cur;
11999
12000 IF l_pub_budget_version_id_tbl.COUNT > 0 THEN
12001
12002 PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
12003 ( p_project_id => p_project_id
12004 ,p_resource_list_id => parent_plan_type_rec.cost_resource_list_id
12005 ,x_people_res_class_rlm_id => l_people_res_class_rlm_id
12006 ,x_equip_res_class_rlm_id => l_equip_res_class_rlm_id
12007 ,x_fin_res_class_rlm_id => l_fin_res_class_rlm_id
12008 ,x_mat_res_class_rlm_id => l_mat_res_class_rlm_id
12009 ,x_return_status => x_return_status
12010 ,x_msg_count => x_msg_count
12011 ,x_msg_data => x_msg_data);
12012
12013 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12014 IF l_debug_mode = 'Y' THEN
12015 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
12016 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12017 END IF;
12018 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12019 END IF;
12020
12021 FORALL i IN l_pub_budget_version_id_tbl.first .. l_pub_budget_version_id_tbl.last
12022 --Fix for bug#7279771, uncommented the code comment done earlier for resource_class_code,
12023 --resource_class_flag,ta_display_flag
12024 UPDATE pa_resource_assignments
12025 SET resource_list_member_id = l_people_res_class_rlm_id
12026 WHERE budget_version_id = l_pub_budget_version_id_tbl(i)
12027 /* The only records present in pa_resource_assignments for published versions with resource
12028 list NONE would fall under the below cateogry. Not including them as part of select as they
12029 dont add any value to performance interms of better index usage. Retaining them in the comment
12030 for understanding purpose */
12031 AND resource_class_code = 'PEOPLE'
12032 AND resource_class_flag = 'Y'
12033 AND ta_display_flag = 'N';
12034 /* Assumptions: When resource list changes for published version, pa_progress_rollup would have only task level PEOPLE assignments.
12035 Hence we are updating all records in pa_progress_rollup with the new rlmid petaining to people class rlm for published versions. */
12036 UPDATE pa_progress_rollup
12037 SET object_id = l_people_res_class_rlm_id
12038 WHERE project_id = p_project_id AND
12039 object_type = 'PA_ASSIGNMENTS' AND
12040 structure_type = 'WORKPLAN' AND
12041 structure_Version_id is NULL; /* Only published versions */
12042 /* Note that we are not updating working wp versions pa_progress_rollup since there is some
12043 processing done for working wp versions in the loop below (delete planning transactions etc
12044 and we want to ensure this update is done after the processing */
12045
12046 /* We also need to update the resource list id in the pa_budget_versions table as well as the
12047 pa_proj_fp_options table .*/
12048 FORALL i IN l_pub_proj_fp_options_id_tbl.first .. l_pub_proj_fp_options_id_tbl.last
12049 UPDATE pa_proj_fp_options
12050 SET cost_resource_list_id = parent_plan_type_rec.cost_resource_list_id
12051 ,record_version_number = record_version_number + 1
12052 ,last_update_date = SYSDATE
12053 ,last_updated_by = FND_GLOBAL.user_id
12054 ,last_update_login = FND_GLOBAL.login_id
12055 where proj_fp_options_id = l_pub_proj_fp_options_id_tbl(i);
12056
12057 FORALL i IN l_pub_budget_version_id_tbl.first .. l_pub_budget_version_id_tbl.last
12058 UPDATE pa_budget_versions
12059 SET resource_list_id = parent_plan_type_rec.cost_resource_list_id
12060 ,record_version_number = record_version_number + 1
12061 ,last_update_date = SYSDATE
12062 ,last_updated_by = FND_GLOBAL.user_id
12063 ,last_update_login = FND_GLOBAL.login_id
12064 where budget_version_id = l_pub_budget_version_id_tbl(i);
12065
12066 END IF;
12067 END IF;
12068
12069
12070
12071 IF nvl(l_budget_version_id_tbl.count, 0) > 0 THEN
12072
12073 -- Update proj_fp_options data for all the working versions in bulk
12074 FORALL i IN l_proj_fp_options_id_tbl.first .. l_proj_fp_options_id_tbl.last
12075 UPDATE pa_proj_fp_options
12076 SET track_workplan_costs_flag = parent_plan_type_rec.track_workplan_costs_flag
12077 ,plan_in_multi_curr_flag = parent_plan_type_rec.plan_in_multi_curr_flag
12078 -- Raja ,rbs_version_id = parent_plan_type_rec.rbs_version_id
12079 ,margin_derived_from_code = parent_plan_type_rec.margin_derived_from_code
12080 ,factor_by_code = parent_plan_type_rec.factor_by_code
12081 ,cost_resource_list_id = parent_plan_type_rec.cost_resource_list_id
12082 ,select_cost_res_auto_flag = parent_plan_type_rec.select_cost_res_auto_flag
12083 ,cost_time_phased_code = parent_plan_type_rec.cost_time_phased_code
12084 ,cost_current_planning_period = parent_plan_type_rec.cost_current_planning_period
12085 ,cost_period_mask_id = parent_plan_type_rec.cost_period_mask_id
12086 ,projfunc_cost_rate_type = parent_plan_type_rec.projfunc_cost_rate_type
12087 ,projfunc_cost_rate_date_type = parent_plan_type_rec.projfunc_cost_rate_date_type
12088 ,projfunc_cost_rate_date = parent_plan_type_rec.projfunc_cost_rate_date
12089 ,project_cost_rate_type = parent_plan_type_rec.project_cost_rate_type
12090 ,project_cost_rate_date_type = parent_plan_type_rec.project_cost_rate_date_type
12091 ,project_cost_rate_date = parent_plan_type_rec.project_cost_rate_date
12092 ,use_planning_rates_flag = parent_plan_type_rec.use_planning_rates_flag
12093 ,res_class_raw_cost_sch_id = parent_plan_type_rec.res_class_raw_cost_sch_id
12094 ,cost_emp_rate_sch_id = parent_plan_type_rec.cost_emp_rate_sch_id
12095 ,cost_job_rate_sch_id = parent_plan_type_rec.cost_job_rate_sch_id
12096 ,cost_non_labor_res_rate_sch_id = parent_plan_type_rec.cost_non_labor_res_rate_sch_id
12097 ,cost_res_class_rate_sch_id = parent_plan_type_rec.cost_res_class_rate_sch_id
12098 ,cost_burden_rate_sch_id = parent_plan_type_rec.cost_burden_rate_sch_id
12099 ,record_version_number = record_version_number + 1
12100 ,last_update_date = SYSDATE
12101 ,last_updated_by = FND_GLOBAL.user_id
12102 ,last_update_login = FND_GLOBAL.login_id
12103 WHERE proj_fp_options_id = l_proj_fp_options_id_tbl(i);
12104
12105 -- Update budget_versions data for all the working versions in bulk
12106
12107 FORALL i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last
12108 UPDATE pa_budget_versions
12109 SET resource_list_id = parent_plan_type_rec.cost_resource_list_id
12110 ,current_planning_period = parent_plan_type_rec.cost_current_planning_period
12111 ,period_mask_id = parent_plan_type_rec.cost_period_mask_id
12112 -- Bug 3630069 Amounts should not be updated with 0. These columns are taken care of
12113 -- by delete planning transactions api if there is any change to this amount
12114 /***
12115 ,raw_cost = 0
12116 ,burdened_cost = 0
12117 ,total_project_raw_cost = 0
12118 ,total_project_burdened_cost = 0
12119 ,labor_quantity = 0
12120 ,equipment_quantity = 0
12121 ***/
12122 ,last_update_date = SYSDATE
12123 ,last_updated_by = FND_GLOBAL.user_id
12124 ,last_update_login = FND_GLOBAL.login_id
12125 ,record_version_number = record_version_number + 1
12126 WHERE budget_version_id = l_budget_version_id_tbl(i);
12127
12128 /* Bug 4200168: FP.M:B12: Pref Changes: Called the following api outside the BV loop
12129 */
12130 -- If resource list has changed task level resource assignments
12131 -- should be re-mapped with new People resource class rlmid
12132 -- Fetching the resource class rlm only if not fetched already during published version processing
12133 IF nvl(p_resource_list_change, 'N') = 'Y' AND l_people_res_class_rlm_id IS NULL THEN
12134 PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
12135 ( p_project_id => p_project_id
12136 ,p_resource_list_id => parent_plan_type_rec.cost_resource_list_id
12137 ,x_people_res_class_rlm_id => l_people_res_class_rlm_id
12138 ,x_equip_res_class_rlm_id => l_equip_res_class_rlm_id
12139 ,x_fin_res_class_rlm_id => l_fin_res_class_rlm_id
12140 ,x_mat_res_class_rlm_id => l_mat_res_class_rlm_id
12141 ,x_return_status => x_return_status
12142 ,x_msg_count => x_msg_count
12143 ,x_msg_data => x_msg_data);
12144
12145 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12146 IF l_debug_mode = 'Y' THEN
12147 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
12148 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12149 END IF;
12150 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12151 END IF;
12152 END IF;
12153 /* Bug 4200168: FP.M:B12: Pref Changes:-----*/
12154
12155 FOR i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last
12156 LOOP
12157 -- For each of the workplan versions, MC currencies should also be copied
12158 -- from plan type
12159
12160 PA_FP_TXN_CURRENCIES_PUB.copy_fp_txn_currencies (
12161 p_source_fp_option_id => parent_plan_type_rec.proj_fp_options_id
12162 ,p_target_fp_option_id => l_proj_fp_options_id_tbl(i)
12163 ,p_target_fp_preference_code => NULL
12164 ,p_plan_in_multi_curr_flag => parent_plan_type_rec.plan_in_multi_curr_flag
12165 ,x_return_status => x_return_status
12166 ,x_msg_count => x_msg_count
12167 ,x_msg_data => x_msg_data );
12168
12169 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12170 IF l_debug_mode = 'Y' THEN
12171 pa_debug.g_err_stage:='Called API PA_FP_TXN_CURRENCIES_PUB.copy_fp_txn_currencies api returned error';
12172 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12173 END IF;
12174 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12175 END IF;
12176
12177 -- If resource list or time phasing has changed all the Task Assignments
12178 -- related data should be deleted
12179 IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
12180 OR nvl(p_track_costs_flag_change, 'N') = 'Y' -- bug 3797057
12181 THEN
12182 OPEN data_for_delete_plan_txns_cur(l_budget_version_id_tbl(i));
12183 FETCH data_for_delete_plan_txns_cur
12184 BULK COLLECT INTO l_task_version_id_tbl
12185 ,l_task_name_tbl
12186 ,l_task_number_tbl
12187 ,l_res_assignment_id_tbl ;
12188 CLOSE data_for_delete_plan_txns_cur;
12189
12190 IF l_debug_mode = 'Y' THEN
12191 pa_debug.g_err_stage:='about to call delete palnning trans';
12192 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12193 END IF;
12194
12195 IF nvl(l_res_assignment_id_tbl.count,0) > 0 THEN
12196 -- If there is any data to be deleted call delete_planning_txns api
12197 PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions (
12198 p_context => 'TASK_ASSIGNMENT'
12199 ,p_task_or_res => 'ASSIGNMENT'
12200 ,p_element_version_id_tbl => l_task_version_id_tbl
12201 ,p_task_number_tbl => l_task_number_tbl
12202 ,p_task_name_tbl => l_task_name_tbl
12203 ,p_resource_assignment_tbl => l_res_assignment_id_tbl
12204 ,p_rollup_required_flag => 'N' --For Bug 3937716
12205 ,p_pji_rollup_required => 'N' /* Bug 4200168 */
12206 ,x_return_status => x_return_status
12207 ,x_msg_count => x_msg_count
12208 ,x_msg_data => x_msg_data );
12209
12210 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12211 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12212 END IF;
12213 END IF;
12214
12215 /* Bug 4200168: FP.M:B12: Pref Changes: Clearing the pl/sql tables*/
12216 l_task_version_id_tbl.delete;
12217 l_task_name_tbl.delete;
12218 l_task_number_tbl.delete;
12219 l_res_assignment_id_tbl.delete;
12220
12221 END IF; -- res list or time phase change
12222
12223 IF nvl(p_resource_list_change, 'N') = 'Y' THEN
12224 -- Update all the task planning elements with new FINACIAL ELEMENT rlmid
12225 IF l_debug_mode = 'Y' THEN
12226 pa_debug.g_err_stage:='Updaing res assignments with new FINANCIAL ELEMENTS rlmid : ' || l_fin_res_class_rlm_id;
12227 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12228 END IF;
12229
12230 UPDATE pa_resource_assignments
12231 SET resource_list_member_id = l_people_res_class_rlm_id
12232 WHERE budget_version_id = l_budget_version_id_tbl(i)
12233 AND resource_class_code = 'PEOPLE'
12234 AND resource_class_flag = 'Y';
12235
12236 /* Assumptions: When resource list changes for working version, pa_progress_rollup would have
12237 only task level PEOPLE assignments at this point as ta_display_flag = Y records
12238 would have got deleted above.Hence we are updating all records in pa_progress_rollup
12239 with the new rlmid petaining to people class rlm for working versions. */
12240 UPDATE pa_progress_rollup
12241 SET object_id = l_people_res_class_rlm_id
12242 WHERE project_id = p_project_id AND
12243 object_type = 'PA_ASSIGNMENTS' AND
12244 structure_type = 'WORKPLAN' AND
12245 structure_Version_id = l_proj_struct_ver_id_tbl(i); /* for Working versions */
12246
12247 END IF;
12248
12249 -- If time phasing has changed call spread api to respread the
12250 -- task level effort data as per the new time phasing
12251
12252 -- If track workplan costs flag has changed call calculate to
12253 -- calculate the costs or null them out as per the changed value
12254 IF nvl(p_time_phase_change, 'N') = 'Y' OR
12255 nvl(p_track_costs_flag_change, 'N') = 'Y'
12256 THEN
12257
12258 -- Call calculate only if there are some planning transactions to be processed
12259 SELECT count(*)
12260 INTO l_res_assignment_count
12261 FROM pa_resource_assignments
12262 WHERE budget_version_id = l_budget_version_id_tbl(i);
12263
12264 IF l_res_assignment_count > 0 THEN
12265 PA_FP_CALC_PLAN_PKG.calculate(
12266 p_project_id => p_project_id
12267 ,p_budget_version_id => l_budget_version_id_tbl(i)
12268 ,p_spread_required_flag => 'Y'
12269 ,p_rollup_required_flag => 'N' -- bug 3937716
12270 ,p_source_context => 'RESOURCE_ASSIGNMENT'
12271 ,p_wp_cost_changed_flag => nvl(p_track_costs_flag_change,'N') -- bug 3699558
12272 ,p_time_phase_changed_flag => nvl(p_time_phase_change,'N') -- bug 3699558
12273 ,x_return_status => x_return_status
12274 ,x_msg_count => x_msg_count
12275 ,x_msg_data => x_msg_data);
12276
12277 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12278 IF l_debug_mode = 'Y' THEN
12279 pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate api returned error';
12280 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12281 END IF;
12282 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12283 END IF;
12284 END IF;
12285 END IF;
12286
12287 -- Bug 3937716 If there is any change to amounts call rollup api
12288 IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
12289 OR nvl(p_track_costs_flag_change, 'N') = 'Y'
12290 THEN
12291 PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION
12292 ( p_budget_version_id => l_budget_version_id_tbl(i)
12293 ,p_entire_version => 'Y'
12294 ,x_return_status => x_return_status
12295 ,x_msg_count => x_msg_count
12296 ,x_msg_data => x_msg_data);
12297
12298 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12299 IF l_debug_mode = 'Y' THEN
12300 pa_debug.g_err_stage:='Called API PA_FP_ROLLUP_PKG.rollup_budget_version api returned error';
12301 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12302 END IF;
12303 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12304 END IF;
12305 END IF;
12306 END LOOP;
12307
12308
12309 END IF; -- workplan budget versions exist
12310
12311 -- If RBS header has been changed all the workplan versions including published
12312 -- versions should be re-mapped and re-summarized
12313 -- Jun-15-2004 Bug 3619687 rbs_version_change should be propagated to workplan
12314 -- versions only if versioning is disabled for the workplan structure
12315 -- Jun-28-2004 Bug 3725414 rbs_version_change should be propagated to working
12316 -- workplan versions even though versioning is enbled but shared structure
12317
12318 IF nvl(p_rbs_version_change, 'N') = 'Y' AND
12319 (nvl(PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id),'N') = 'N' -- Jun-15-2004 Bug 3619687
12320 OR nvl(PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id),'N') = 'Y') -- Jun-28-2004 Bug 3725414
12321 THEN
12322 /** Bug 3725414
12323 -- Fetch all the workplan versions
12324 OPEN all_workplan_versions_cur;
12325 FETCH all_workplan_versions_cur
12326 BULK COLLECT INTO l_budget_version_id_tbl,l_proj_fp_options_id_tbl ;
12327 CLOSE all_workplan_versions_cur;
12328 **/
12329
12330 -- Fetch all the working plan versions in a table
12331
12332 IF l_debug_mode = 'Y' THEN
12333 pa_debug.g_err_stage:='rbs change Yes';
12334 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12335 END IF;
12336
12337
12338 OPEN working_workplan_versions_cur;
12339 FETCH working_workplan_versions_cur
12340 BULK COLLECT INTO l_budget_version_id_tbl,l_proj_fp_options_id_tbl,l_proj_struct_ver_id_tbl ;
12341 CLOSE working_workplan_versions_cur;
12342
12343 IF nvl(l_budget_version_id_tbl.count,0) > 0 THEN
12344
12345 -- Bulk update all the versions with the new RBS header
12346 FORALL i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last
12347 UPDATE pa_proj_fp_options
12348 SET rbs_version_id = parent_plan_type_rec.rbs_version_id
12349 ,record_version_number = record_version_number + 1
12350 ,last_update_date = SYSDATE
12351 ,last_updated_by = FND_GLOBAL.user_id
12352 ,last_update_login = FND_GLOBAL.login_id
12353 WHERE proj_fp_options_id = l_proj_fp_options_id_tbl(i);
12354
12355 -- For each of the versions, RBS re-mapping and re-summarization needs to be done
12356 FOR i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last LOOP
12357 IF parent_plan_type_rec.rbs_version_id IS NOT NULL THEN
12358 -- Call RBS mapping api for the entire version
12359 -- The api returns rbs element id, txn accum header id for each
12360 -- resource assignment id in the form of plsql tables
12361 PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
12362 p_budget_version_id => l_budget_version_id_tbl(i)
12363 ,p_resource_list_id => parent_plan_type_rec.cost_resource_list_id
12364 ,p_rbs_version_id => parent_plan_type_rec.rbs_version_id
12365 ,p_calling_process => 'RBS_REFRESH'
12366 ,p_calling_context => 'PLSQL'
12367 ,p_process_code => 'RBS_MAP'
12368 ,p_calling_mode => 'BUDGET_VERSION'
12369 ,p_init_msg_list_flag => 'N'
12370 ,p_commit_flag => 'N'
12371 ,x_txn_source_id_tab => l_txn_source_id_tbl
12372 ,x_res_list_member_id_tab => l_res_list_member_id_tbl
12373 ,x_rbs_element_id_tab => l_rbs_element_id_tbl
12374 ,x_txn_accum_header_id_tab => l_txn_accum_header_id_tbl
12375 ,x_return_status => x_return_status
12376 ,x_msg_count => x_msg_count
12377 ,x_msg_data => x_msg_data);
12378
12379 -- Check return status
12380 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12381 IF l_debug_mode = 'Y' THEN
12382 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api returned error';
12383 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12384 END IF;
12385 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12386 ELSE
12387 -- Check count of the required out tables to be the same
12388 IF l_txn_source_id_tbl.count <> l_rbs_element_id_tbl.count OR
12389 l_txn_source_id_tbl.count <> l_txn_accum_header_id_tbl.count
12390 THEN
12391 IF l_debug_mode = 'Y' THEN
12392 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api
12393 returned out tables with different count';
12394 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
12395 pa_debug.g_err_stage:='l_txn_source_id_tbl.count = ' || l_txn_source_id_tbl.count;
12396 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
12397 pa_debug.g_err_stage:='l_rbs_element_id_tbl.count = ' || l_rbs_element_id_tbl.count;
12398 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
12399 pa_debug.g_err_stage:=
12400 'l_txn_accum_header_id_tbl.count = ' || l_txn_accum_header_id_tbl.count;
12401 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
12402 END IF;
12403 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12404 END IF;
12405 END IF;
12406
12407 -- Check if out table has any records first
12408 IF nvl(l_txn_source_id_tbl.last,0) >= 1 THEN
12409 -- Update resource assignments data for the version
12410 -- Bug 3641252 changed the index from i to j
12411 FORALL j IN l_txn_source_id_tbl.first .. l_txn_source_id_tbl.last
12412 UPDATE pa_resource_assignments
12413 SET rbs_element_id = l_rbs_element_id_tbl(j)
12414 ,txn_accum_header_id = l_txn_accum_header_id_tbl(j)
12415 ,record_version_number = record_version_number + 1
12416 ,last_update_date = SYSDATE
12417 ,last_updated_by = FND_GLOBAL.user_id
12418 ,last_update_login = FND_GLOBAL.login_id
12419 WHERE budget_version_id = l_budget_version_id_tbl(i)
12420 AND resource_assignment_id = l_txn_source_id_tbl(j);
12421 END IF;
12422 ELSE -- rbs version id is null
12423
12424 -- Update all the resource assigments with null for rbs _element_id
12425 UPDATE pa_resource_assignments
12426 SET rbs_element_id = null
12427 ,txn_accum_header_id = null
12428 ,record_version_number = record_version_number + 1
12429 ,last_update_date = SYSDATE
12430 ,last_updated_by = FND_GLOBAL.user_id
12431 ,last_update_login = FND_GLOBAL.login_id
12432 WHERE budget_version_id = l_budget_version_id_tbl(i);
12433
12434 IF l_debug_mode = 'Y' THEN
12435 pa_debug.g_err_stage:='Done with mapping';
12436 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12437 END IF;
12438
12439
12440 END IF;
12441
12442 /* Bug 4200168: FP.M:B12: Pref Changes: Clearing the pl/sql tables*/
12443 l_txn_source_id_tbl.delete;
12444 l_res_list_member_id_tbl.delete;
12445 l_rbs_element_id_tbl.delete;
12446 l_txn_accum_header_id_tbl.delete;
12447 END LOOP;
12448 END IF; -- if versions exist
12449 END IF; -- if RBS has changed
12450
12451 -- Adding for bug 4543744
12452 /* Collecting all the working version records and inserting into the pji table
12453 with positive values of budget lines */
12454 IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
12455 OR nvl(p_track_costs_flag_change, 'N') = 'Y' OR ( nvl(p_rbs_version_change, 'N') = 'Y' AND
12456 (nvl(PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id),'N') = 'N'
12457 OR nvl(PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id),'N') = 'Y')) THEN
12458 IF l_debug_mode = 'Y' THEN
12459 pa_debug.g_err_stage:='About to insert positive values with new rbs element ids';
12460 pa_debug.write( g_module_name,pa_debug.g_err_stage,5);
12461 END IF;
12462
12463
12464 FOR i IN l_budget_version_id_tbl.FIRST .. l_budget_version_id_tbl.LAST
12465 LOOP
12466 PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api
12467 --( p_source => 'POPULATE_PJI_TABLE' --Commented for bug 5073350.
12468 ( p_source => 'REFRESH_WP_SETTINGS'
12469 ,p_budget_version_id => l_budget_version_id_tbl(i)
12470 ,p_qty_sign => 1
12471 ,x_return_status => x_return_status
12472 ,x_msg_data => x_msg_data
12473 ,x_msg_count => x_msg_count);
12474
12475 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12476 IF l_debug_mode = 'Y' THEN
12477 pa_debug.g_err_stage:='PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api returned error';
12478 pa_debug.write( g_module_name,pa_debug.g_err_stage,5);
12479 END IF; RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12480 END IF;
12481 END LOOP;
12482
12483 /* Start of commented code for bug 5073350.
12484 This call will update all the plan versions of a project which are affected due to the
12485 workplan paln settings change.If any of those versions is in pending processing status,
12486 as per the PJI design error will be thrown.So, commenting out this code.
12487 The PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE api will be called seperately for each plan version
12488 in PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api.
12489
12490 PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (
12491 x_return_status => x_return_status,
12492 x_msg_code => l_error_msg_code);
12493
12494 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12495 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12496 p_msg_name => l_error_msg_code);
12497 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12498 END IF;
12499
12500 End of commented code for bug 5073350*/
12501 END IF; -- inserting positive rows
12502
12503 IF l_debug_mode = 'Y' THEN
12504 pa_debug.g_err_stage:='Exiting REFRESH_WP_SETTINGS';
12505 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12506 -- reset curr function
12507 pa_debug.reset_curr_function();
12508 END IF;
12509
12510 EXCEPTION
12511
12512 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12513 l_msg_count := FND_MSG_PUB.count_msg;
12514 IF l_msg_count = 1 THEN
12515 PA_INTERFACE_UTILS_PUB.get_messages
12516 (p_encoded => FND_API.G_TRUE
12517 ,p_msg_index => 1
12518 ,p_msg_count => l_msg_count
12519 ,p_msg_data => l_msg_data
12520 ,p_data => l_data
12521 ,p_msg_index_out => l_msg_index_out);
12522
12523 x_msg_data := l_data;
12524 x_msg_count := l_msg_count;
12525 ELSE
12526 x_msg_count := l_msg_count;
12527 END IF;
12528
12529 x_return_status := FND_API.G_RET_STS_ERROR;
12530
12531 IF l_debug_mode = 'Y' THEN
12532 pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
12533 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12534 -- reset curr function
12535 pa_debug.reset_curr_function();
12536 END IF;
12537
12538 RETURN;
12539 WHEN Others THEN
12540 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12541 x_msg_count := 1;
12542 x_msg_data := SQLERRM;
12543
12544 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
12545 ,p_procedure_name => 'REFRESH_WP_SETTINGS');
12546
12547 IF l_debug_mode = 'Y' THEN
12548 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
12549 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12550 -- reset curr function
12551 pa_debug.Reset_Curr_Function();
12552 END IF;
12553 RAISE;
12554 END REFRESH_WP_SETTINGS;
12555
12556 /*=============================================================================
12557 This api is called when ever RBS should be changed for budget versions.
12558
12559 Usage:
12560 p_calling_context --> 'ALL_CHILD_VERSIONS'
12561 p_budget_version_id --> null
12562 If there is a change in RBS for a financial plan type
12563 to push the change to the underlying budget version.
12564 p_budget_version_id would be null
12565
12566 p_calling_context --> 'SINGLE_VERSION'
12567 p_budget_version_id --> not null, version id should be passed
12568 --> This mode is useful for creation of working versions
12569 out of published versions, or copy amounts case from
12570 a different version
12571
12572 Bug 3867302 Sep 21 2004 For ci versions reporting data is not maintained
12573 ==============================================================================*/
12574
12575 PROCEDURE Refresh_rbs_for_versions(
12576 p_project_id IN pa_projects_all.project_id%TYPE
12577 ,p_fin_plan_type_id IN pa_budget_versions.fin_plan_type_id%TYPE
12578 ,p_calling_context IN VARCHAR2 -- Default 'ALL_CHILD_VERSIONS'
12579 ,p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE -- Default null
12580 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12581 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12582 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
12583 AS
12584
12585 --Start of variables used for debugging
12586
12587 l_return_status VARCHAR2(1);
12588 l_msg_count NUMBER := 0;
12589 l_msg_data VARCHAR2(2000);
12590 l_data VARCHAR2(2000);
12591 l_msg_index_out NUMBER;
12592 l_debug_mode VARCHAR2(30);
12593 l_error_msg_code VARCHAR2(30);
12594
12595 --End of variables used for debugging
12596
12597 l_rbs_version_id NUMBER;
12598
12599 CURSOR working_budget_Versions_cur IS
12600 SELECT o.proj_fp_options_id,
12601 o.fin_plan_version_id,
12602 bv.resource_list_id
12603 FROM pa_proj_fp_options o,
12604 pa_budget_versions bv
12605 WHERE o.project_id = p_project_id
12606 AND o.fin_plan_type_id = p_fin_plan_type_id
12607 AND o.fin_plan_version_id = bv.budget_version_id
12608 AND bv.ci_id IS NULL -- bug 3867302
12609 AND bv.budget_status_code IN ('W', 'S');
12610
12611 CURSOR input_budget_version_cur IS
12612 SELECT o.proj_fp_options_id
12613 ,o.fin_plan_version_id
12614 ,bv.resource_list_id
12615 ,o.fin_plan_type_id
12616 ,bv.ci_id
12617 FROM pa_budget_versions bv,
12618 pa_proj_fp_options o
12619 WHERE bv.project_id = o.project_id
12620 AND bv.fin_plan_type_id = o.fin_plan_type_id
12621 AND bv.budget_version_id = o.fin_plan_version_id
12622 AND bv.budget_version_id = p_budget_version_id;
12623
12624 input_budget_version_rec input_budget_version_cur%ROWTYPE;
12625
12626
12627 l_budget_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12628 l_proj_fp_options_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12629 l_resource_list_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12630
12631 l_txn_source_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12632 l_res_list_member_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12633 l_rbs_element_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12634 l_txn_accum_header_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12635
12636 BEGIN
12637
12638 x_msg_count := 0;
12639 x_return_status := FND_API.G_RET_STS_SUCCESS;
12640
12641 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
12642 l_debug_mode := NVL(l_debug_mode, 'Y');
12643
12644 -- Set curr function
12645 IF l_debug_mode = 'Y' THEN
12646 pa_debug.set_curr_function(
12647 p_function =>'PAFPPTPB.Refresh_rbs_for_versions'
12648 ,p_debug_mode => l_debug_mode );
12649 END IF;
12650 -- Check for business rules violations
12651 IF l_debug_mode = 'Y' THEN
12652 pa_debug.g_err_stage:='Validating input parameters';
12653 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
12654 END IF;
12655
12656 IF (p_project_id IS NULL) OR
12657 (p_fin_plan_type_id IS NULL) OR
12658 (p_calling_context = 'SINGLE_VERSION' AND p_budget_version_id IS NULL )
12659 THEN
12660
12661 IF l_debug_mode = 'Y' THEN
12662 pa_debug.g_err_stage:='Project_id = '||p_project_id;
12663 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
12664
12665 pa_debug.g_err_stage:='Fin_plan_type_id = '||p_fin_plan_type_id;
12666 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
12667
12668 pa_debug.g_err_stage:='p_calling_context = '||p_calling_context;
12669 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
12670
12671 pa_debug.g_err_stage:='p_budget_version_id = '||p_budget_version_id;
12672 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
12673 END IF;
12674
12675 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
12676 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
12677 p_token1 => 'PROCEDURENAME',
12678 p_value1 => 'pa_fp_planning_transaction_pub.Refresh_rbs_for_versions');
12679
12680 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12681
12682 END IF;
12683
12684 -- fetch plan type level rbs version id
12685 Select rbs_version_id
12686 into l_rbs_version_id
12687 from pa_proj_fp_options
12688 where project_id = p_project_id
12689 and fin_plan_type_id = p_fin_plan_type_id
12690 and fin_plan_option_level_code = 'PLAN_TYPE';
12691
12692 -- if context is 'SINGLE_VERSION' fetch required info about budget version id is passed
12693 IF p_calling_context = 'SINGLE_VERSION' THEN
12694
12695 OPEN input_budget_version_cur;
12696 FETCH input_budget_version_cur
12697 INTO input_budget_version_rec;
12698 CLOSE input_budget_version_cur;
12699
12700 -- Bug 3867302 If i/p version is a ci version just return
12701 -- Added NOT for bug 4094762
12702 IF input_budget_version_rec.ci_id IS NOT NULL THEN
12703
12704 IF l_debug_mode = 'Y' THEN
12705 pa_debug.g_err_stage:=' PJI data not required for CI versions. Returning';
12706 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
12707 pa_debug.reset_curr_function();
12708 END IF;
12709 RETURN;
12710
12711 END IF;
12712
12713 l_proj_fp_options_id_tbl :=
12714 SYSTEM.pa_num_tbl_type(input_budget_version_rec.proj_fp_options_id);
12715 l_budget_version_id_tbl :=
12716 SYSTEM.pa_num_tbl_type(input_budget_version_rec.fin_plan_version_id);
12717 l_resource_list_id_tbl :=
12718 SYSTEM.pa_num_tbl_type(input_budget_version_rec.resource_list_id);
12719
12720 ELSE
12721
12722 OPEN working_budget_Versions_cur;
12723 FETCH working_budget_Versions_cur
12724 BULK COLLECT INTO l_proj_fp_options_id_tbl,
12725 l_budget_version_id_tbl,
12726 l_resource_list_id_tbl;
12727 CLOSE working_budget_Versions_cur;
12728
12729 -- if there are no budget versions for the plan type return
12730 IF l_budget_version_id_tbl.count = 0 THEN
12731 IF l_debug_mode = 'Y' THEN
12732 pa_debug.g_err_stage:='Working Versions do not exist for the plan type. Returning';
12733 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
12734 pa_debug.reset_curr_function();
12735 END IF;
12736 RETURN;
12737 END IF;
12738
12739 END IF;
12740
12741 -- bulk update all the budget versions with the rbs version id
12742 forall i in l_proj_fp_options_id_tbl.first .. l_proj_fp_options_id_tbl.last
12743 update pa_proj_fp_options
12744 set rbs_version_id = l_rbs_version_id
12745 ,record_version_number = record_version_number + 1
12746 ,last_update_date = SYSDATE
12747 ,last_updated_by = FND_GLOBAL.user_id
12748 ,last_update_login = FND_GLOBAL.login_id
12749 WHERE proj_fp_options_id = l_proj_fp_options_id_tbl(i);
12750
12751 -- for each of the versions, RBS re-mapping and re-summarization needs to be done
12752 FOR i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last LOOP
12753 IF l_rbs_version_id IS NOT NULL THEN
12754 -- Call RBS mapping api for the entire version
12755 -- The api returns rbs element id, txn accum header id for each
12756 -- resource assignment id in the form of plsql tables
12757 PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
12758 p_budget_version_id => l_budget_version_id_tbl(i)
12759 ,p_resource_list_id => l_resource_list_id_tbl(i)
12760 ,p_rbs_version_id => l_rbs_version_id
12761 ,p_calling_process => 'RBS_REFRESH'
12762 ,p_calling_context => 'PLSQL'
12763 ,p_process_code => 'RBS_MAP'
12764 ,p_calling_mode => 'BUDGET_VERSION'
12765 ,p_init_msg_list_flag => 'N'
12766 ,p_commit_flag => 'N'
12767 ,x_txn_source_id_tab => l_txn_source_id_tbl
12768 ,x_res_list_member_id_tab => l_res_list_member_id_tbl
12769 ,x_rbs_element_id_tab => l_rbs_element_id_tbl
12770 ,x_txn_accum_header_id_tab => l_txn_accum_header_id_tbl
12771 ,x_return_status => x_return_status
12772 ,x_msg_count => x_msg_count
12773 ,x_msg_data => x_msg_data);
12774
12775 -- Check return status
12776 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12777 IF l_debug_mode = 'Y' THEN
12778 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api returned error';
12779 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12780 END IF;
12781 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12782 ELSE
12783 -- Check count of the required out tables to be the same
12784 IF l_txn_source_id_tbl.count <> l_rbs_element_id_tbl.count OR
12785 l_txn_source_id_tbl.count <> l_txn_accum_header_id_tbl.count
12786 THEN
12787 IF l_debug_mode = 'Y' THEN
12788 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api
12789 returned out tables with different count';
12790 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
12791 pa_debug.g_err_stage:='l_txn_source_id_tbl.count = ' || l_txn_source_id_tbl.count;
12792 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
12793 pa_debug.g_err_stage:='l_rbs_element_id_tbl.count = ' || l_rbs_element_id_tbl.count;
12794 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
12795 pa_debug.g_err_stage:=
12796 'l_txn_accum_header_id_tbl.count = ' || l_txn_accum_header_id_tbl.count;
12797 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
12798 END IF;
12799 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12800 END IF;
12801 END IF;
12802
12803 -- Check if out table has any records first
12804 IF nvl(l_txn_source_id_tbl.last,0) >= 1 THEN
12805 -- Update resource assignments data for the version
12806 -- Bug 3641252 changed the index from i to j
12807 FORALL j IN l_txn_source_id_tbl.first .. l_txn_source_id_tbl.last
12808 UPDATE pa_resource_assignments
12809 SET rbs_element_id = l_rbs_element_id_tbl(j)
12810 ,txn_accum_header_id = l_txn_accum_header_id_tbl(j)
12811 ,record_version_number = record_version_number + 1
12812 ,last_update_date = SYSDATE
12813 ,last_updated_by = FND_GLOBAL.user_id
12814 ,last_update_login = FND_GLOBAL.login_id
12815 WHERE budget_version_id = l_budget_version_id_tbl(i)
12816 AND resource_assignment_id = l_txn_source_id_tbl(j);
12817 END IF;
12818 ELSE -- rbs version id is null
12819
12820 -- Update all the resource assigments with null for rbs _element_id
12821 UPDATE pa_resource_assignments
12822 SET rbs_element_id = null
12823 ,txn_accum_header_id = null
12824 ,record_version_number = record_version_number + 1
12825 ,last_update_date = SYSDATE
12826 ,last_updated_by = FND_GLOBAL.user_id
12827 ,last_update_login = FND_GLOBAL.login_id
12828 WHERE budget_version_id = l_budget_version_id_tbl(i);
12829
12830 END IF;
12831 END LOOP;
12832
12833 -- Call PJI delete api first to delete existing summarization data
12834 PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
12835 p_fp_version_ids => l_budget_version_id_tbl,
12836 x_return_status => x_return_status,
12837 x_msg_code => l_error_msg_code);
12838
12839 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12840 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12841 p_msg_name => l_error_msg_code);
12842 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12843 END IF;
12844
12845 -- Call PLAN_CREATE to create summarization data as per the new RBS
12846 PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE (
12847 p_fp_version_ids => l_budget_version_id_tbl,
12848 x_return_status => x_return_status,
12849 x_msg_code => l_error_msg_code);
12850
12851 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12852 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12853 p_msg_name => l_error_msg_code);
12854 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12855 END IF;
12856
12857 IF l_debug_mode = 'Y' THEN
12858 pa_debug.g_err_stage:='Exiting Refresh_rbs_for_versions';
12859 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
12860 -- reset curr function
12861 pa_debug.reset_curr_function();
12862 END IF;
12863
12864 EXCEPTION
12865
12866 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12867 l_msg_count := FND_MSG_PUB.count_msg;
12868 IF l_msg_count = 1 THEN
12869 PA_INTERFACE_UTILS_PUB.get_messages
12870 (p_encoded => FND_API.G_TRUE
12871 ,p_msg_index => 1
12872 ,p_msg_count => l_msg_count
12873 ,p_msg_data => l_msg_data
12874 ,p_data => l_data
12875 ,p_msg_index_out => l_msg_index_out);
12876
12877 x_msg_data := l_data;
12878 x_msg_count := l_msg_count;
12879 ELSE
12880 x_msg_count := l_msg_count;
12881 END IF;
12882
12883 x_return_status := FND_API.G_RET_STS_ERROR;
12884
12885 IF l_debug_mode = 'Y' THEN
12886 pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
12887 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
12888 -- reset curr function
12889 pa_debug.reset_curr_function();
12890 END IF;
12891 RETURN;
12892 WHEN Others THEN
12893 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12894 x_msg_count := 1;
12895 x_msg_data := SQLERRM;
12896
12897 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_planning_transaction_pub'
12898 ,p_procedure_name => 'Refresh_rbs_for_versions');
12899
12900 IF l_debug_mode = 'Y' THEN
12901 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
12902 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
12903 -- reset curr function
12904 pa_debug.Reset_Curr_Function();
12905 END IF;
12906 RAISE;
12907 END Refresh_rbs_for_versions;
12908
12909 --This function returns 'N' if a record already exists in pa_resource_assignments
12910 --for a given budget version id, task id and resource list member id
12911 --Returns 'Y' if the record is not already there
12912 FUNCTION DUP_EXISTS
12913 ( p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE
12914 ,p_task_id IN pa_tasks.task_id%TYPE
12915 ,p_resource_list_member_id IN pa_resource_list_members.resource_list_member_id%TYPE
12916 ,p_project_id IN pa_projects_all.project_id%TYPE)
12917 RETURN VARCHAR2
12918 IS
12919 l_dup_exists VARCHAR2(1);
12920 BEGIN
12921
12922 BEGIN
12923 SELECT 'Y'
12924 INTO l_dup_exists
12925 FROM pa_resource_assignments
12926 WHERE task_id=p_task_id
12927 AND resource_list_member_id=p_resource_list_member_id
12928 AND budget_version_id=p_budget_version_id
12929 AND project_assignment_id=-1
12930 AND project_id=p_project_id;
12931 EXCEPTION
12932 WHEN NO_DATA_FOUND THEN
12933 l_dup_exists:='N';
12934 END;
12935 RETURN l_dup_exists;
12936
12937 END DUP_EXISTS;
12938
12939 END PA_FP_PLANNING_TRANSACTION_PUB;
12940