[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.63.12020000.10 2013/05/29 09:50:22 bpottipa 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
39 -- Bug 12384023: Deriving job_id based on assignment start date
40 PROCEDURE get_default_job
41 (
42 p_person_id IN pa_resource_assignments.person_id%TYPE
43 ,p_resource_assignment_id IN pa_resource_assignments.resource_assignment_id%TYPE
44 ,p_planning_start_date IN pa_resource_assignments.planning_start_date%TYPE
45 ,p_project_role_id IN pa_resource_assignments.project_role_id%TYPE
46 ,x_job_id OUT NOCOPY pa_resource_assignments.job_id%TYPE
47 )
48 IS
49 l_person_id pa_resource_assignments.person_id%TYPE;
50 l_g_miss_num CONSTANT NUMBER := FND_API.G_MISS_NUM;
51
52
53 BEGIN
54 IF p_person_id IS NULL AND p_resource_assignment_id IS NOT NULL THEN
55 BEGIN
56 SELECT DECODE (p_person_id, l_g_miss_num,null,nvl(p_person_id,person_id))
57 INTO l_person_id
58 FROM PA_RESOURCE_ASSIGNMENTS
59 WHERE resource_assignment_id= p_resource_assignment_id;
60
61 EXCEPTION
62 WHEN NO_DATA_FOUND THEN
63 NULL;
64 END;
65
66 END IF;
67
68 select job_id INTO x_job_id
69 FROM per_all_assignments_f assn
70 WHERE assn.person_id = l_person_id
71 AND p_planning_start_date BETWEEN assn.effective_start_date
72 AND assn.effective_end_date
73 AND assn.assignment_type in ('C','E')
74 AND assn.primary_flag = 'Y'
75 AND assn.person_id IS NOT NULL;
76
77 EXCEPTION
78 WHEN NO_DATA_FOUND THEN
79 BEGIN
80 IF p_project_role_id is not null then
81 SELECT default_job_id into x_job_id
82 FROM pa_project_role_types_vl role
83 WHERE role.project_role_id = p_project_role_id
84 AND ROWNUM = 1;
85 END IF;
86 EXCEPTION
87 WHEN NO_DATA_FOUND THEN
88 NULL;
89 END;
90
91 END get_default_job;
92
93
94 --Bug 4152749. The API is changed for the calculate API enhancements. Replaced the existing logic with the new logic to
95 --pass the old/new values for required resource attribs to calcualte API so that it takes care of manipulating the
96 --budget lines based on the changes.
97 --This is private procedure. This replaces the derive_parameters_for_calc_api in the previous API
98 --This API
99 ------1.Will detect the changes in the rbs_element_id and call the reporting lines API to negate the amounts
100 --------for the old rbs_element_id
101 ------2.Prepare pl/sql tbls containing Old/New Values for MFC Cost Type Id, Spread Curve Id, SP Fixed Date,
102 ------- Planning Start/End Dates and another pl/sql tbl which indicates whether a change in RLM has occurred or not.
103 ------3.Gives the new rbs_element_id for each input RA ID as output.
104 --The values for p_context are 'BUDGET', 'FORECAST', 'WORKPLAN' and 'TASK_ASSIGNMENT'
105 PROCEDURE Process_res_chg_Derv_calc_prms
106 (
107 p_context IN VARCHAR2
108 ,p_calling_context IN VARCHAR2 DEFAULT NULL -- Added for Bug 6856934
109 ,p_budget_version_id IN Pa_budget_versions.budget_version_id%TYPE
110 ,p_resource_assignment_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
111 ,p_resource_list_member_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
112 ,p_planning_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
113 ,p_planning_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
114 ,p_spread_curve_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
115 ,p_sp_fixed_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
116 ,p_txn_currency_code_tbl IN SYSTEM.PA_VARCHAR2_15_TBL_TYPE
117 ,p_inventory_item_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
118 ,p_expenditure_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type
119 ,p_person_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
120 ,p_job_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
121 ,p_organization_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
122 ,p_event_type_tbl IN SYSTEM.pa_varchar2_30_tbl_type
123 ,p_expenditure_category_tbl IN SYSTEM.pa_varchar2_30_tbl_type
124 ,p_revenue_category_code_tbl IN SYSTEM.pa_varchar2_30_tbl_type
125 ,p_item_category_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
126 ,p_bom_resource_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
127 ,p_project_role_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
128 ,p_person_type_code_tbl IN SYSTEM.pa_varchar2_30_tbl_type
129 ,p_supplier_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
130 ,p_named_role_tbl IN SYSTEM.pa_varchar2_80_tbl_type
131 ,p_mfc_cost_type_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
132 ,p_fixed_date_sp_id IN pa_spread_curves_b.spread_curve_id%TYPE -- Added for Bug 3607061
133 ,px_total_qty_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
134 ,px_total_raw_cost_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
135 ,px_total_burdened_cost_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
136 ,px_total_revenue_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
137 ,px_raw_cost_rate_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
138 ,px_b_cost_rate_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
139 ,px_bill_rate_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
140 ,px_raw_cost_override_rate_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
141 ,px_b_cost_rate_override_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
142 ,px_bill_rate_override_tbl IN OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
143 ,x_rbs_element_id_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
144 ,x_txn_accum_header_id_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
145 ,x_mfc_cost_type_id_old_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
146 ,x_mfc_cost_type_id_new_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
147 ,x_spread_curve_id_old_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
148 ,x_spread_curve_id_new_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
149 ,x_sp_fixed_date_old_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
150 ,x_sp_fixed_date_new_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
151 ,x_plan_start_date_old_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
152 ,x_plan_start_date_new_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
153 ,x_plan_end_date_old_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
154 ,x_plan_end_date_new_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
155 ,x_rlm_id_change_flag_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_1_TBL_TYPE --File.Sql.39 bug 4440895
156 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
157 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
158 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
159 ) IS
160
161 CURSOR c_plan_ver_settings_csr
162 IS
163 SELECT nvl(pfo.cost_resource_list_id, nvl(pfo.revenue_resource_list_id, pfo.all_resource_list_id)) resource_list_id
164 ,pfo.rbs_version_id rbs_version_id
165 ,pbv.ci_id ci_id
166 ,pbv.etc_start_date etc_start_date
167 ,pbv.wp_version_flag wp_version_flag
168 FROM pa_proj_fp_options pfo
169 ,pa_budget_versions pbv
170 WHERE pfo.fin_plan_version_id=p_budget_version_id
171 AND pbv.budget_version_id=p_budget_version_id;
172
173
174 CURSOR c_data_in_db_csr(c_resource_asg_id pa_resource_assignments.resource_assignment_id%TYPE)
175 IS
176 SELECT sum(quantity) quantity
177 FROM pa_budget_lines
178 WHERE resource_assignment_id = c_resource_asg_id;
179 -- ORDER BY resource_assignment_id,txn_currency_code;
180
181 l_data_in_db_rec c_data_in_db_csr%ROWTYPE;
182
183 l_plan_ver_settings_rec c_plan_ver_settings_csr%ROWTYPE;
184
185 --Start of variables used for debugging
186 l_msg_count NUMBER :=0;
187 l_data VARCHAR2(2000);
188 l_msg_data VARCHAR2(2000);
189 l_error_msg_code VARCHAR2(30);
190 l_msg_index_out NUMBER;
191 l_return_status VARCHAR2(2000);
192 l_debug_mode VARCHAR2(30);
193 l_module_name VARCHAR2(100):='PAFPPTPB.Process_res_chg_Derv_calc_prms';
194 --End of variables used for debugging
195
196 l_ra_id_count NUMBER := 0;
197 l_rbs_map_index NUMBER:=0;
198
199 l_resource_class_code_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
200 l_rate_based_flag_tbl SYSTEM.pa_varchar2_1_tbl_type :=SYSTEM.pa_varchar2_1_tbl_type();
201 l_ra_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
202 l_person_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
203 l_job_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
204 l_organization_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
205 l_event_type_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
206 l_exp_category_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
207 l_rev_cat_code_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
208 l_inv_item_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
209 l_item_cat_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
210 l_bom_res_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
211 l_per_type_code_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
212 l_supplier_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
213 l_rbs_element_id_prm_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
214 l_inventory_item_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
215 l_expenditure_type_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
216 l_person_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
217 l_job_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
218 l_organization_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
219 l_event_type_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
220 l_expenditure_category_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
221 l_revenue_category_code_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
222 l_item_category_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
223 l_bom_resource_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
224 l_project_role_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
225 l_person_type_code_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
226 l_supplier_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
227 l_txn_src_typ_code_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
228 l_exp_type_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type :=SYSTEM.pa_varchar2_30_tbl_type();
229 l_non_labor_resource_tbl SYSTEM.pa_varchar2_20_tbl_type :=SYSTEM.pa_varchar2_20_tbl_type();
230 l_non_labor_res_rbs_prm_tbl SYSTEM.pa_varchar2_20_tbl_type :=SYSTEM.pa_varchar2_20_tbl_type();
231 l_named_role_tbl SYSTEM.pa_varchar2_80_tbl_type :=SYSTEM.pa_varchar2_80_tbl_type();
232 l_project_role_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
233 l_named_role_rbs_prm_tbl SYSTEM.pa_varchar2_80_tbl_type := SYSTEM.pa_varchar2_80_tbl_type();
234 l_txn_source_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
235 l_res_list_member_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
236 l_txn_accum_header_id_prm_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
237 l_task_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
238 -- Added for Bug 3762278
239 l_project_name pa_projects_all.name%TYPE;
240 l_task_name pa_proj_elements.name%TYPE;
241 l_resource_name pa_resource_list_members.alias%TYPE;
242
243 l_task_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
244 l_rbs_elem_id_rbs_prm_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
245 l_rbf_rbs_prm_tbl SYSTEM.pa_varchar2_1_tbl_type := SYSTEM.pa_varchar2_1_tbl_type();
246 l_res_class_code_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type := SYSTEM.pa_varchar2_30_tbl_type();
247
248 l_txn_currency_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
249
250 --Bug 4083605
251 l_actuals_start_date pa_budget_lines.start_date%TYPE;
252 l_actuals_end_date pa_budget_lines.start_date%TYPE;
253
254 /*Bug fix: 5752337 */
255 CURSOR get_line_info (p_resource_assignment_id IN NUMBER) IS
256 SELECT ppa.name project_name
257 ,pt.name task_name
258 ,prl.alias resource_name
259 FROM pa_projects_all ppa
260 ,pa_proj_elements pt
261 ,pa_resource_list_members prl
262 ,pa_resource_assignments pra
263 WHERE pra.resource_assignment_id = p_resource_assignment_id
264 AND ppa.project_id = pra.project_id
265 AND pt.proj_element_id(+) = pra.task_id
266 AND prl.resource_list_member_id = pra.resource_list_member_id;
267
268 /* Bug fix:5759413 */
269 CURSOR get_rateOvrds ( p_resource_assignment_id IN NUMBER) IS
270 SELECT rtx.txn_raw_cost_rate_override
271 ,rtx.txn_burden_cost_rate_override
272 ,rtx.txn_bill_rate_override
273 FROM pa_resource_asgn_curr rtx
274 WHERE rtx.resource_assignment_id = p_resource_assignment_id;
275
276 l_rtx_rateOvrds_rec get_rateOvrds%ROWTYPE;
277
278 BEGIN
279
280 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
281 l_debug_mode := NVL(l_debug_mode, 'N');
282 x_msg_count := 0;
283 x_return_status := FND_API.G_RET_STS_SUCCESS;
284 IF l_debug_mode = 'Y' THEN
285 PA_DEBUG.Set_Curr_Function( p_function => 'plan_txn_pub.drv_prms_for_calc',
286 p_debug_mode => l_debug_mode );
287 END IF;
288 -----------------------------------------------------------------------------
289 -- Validating input paramters p_context and p_budget_version_id vannot be null
290 -----------------------------------------------------------------------------
291 IF l_debug_mode = 'Y' THEN
292 pa_debug.g_err_stage:='Validating input parameters';
293 print_msg(pa_debug.g_err_stage,l_module_name);
294 END IF;
295
296 IF ((p_context IS NULL) OR (p_budget_version_id IS NULL)) THEN
297 IF l_debug_mode = 'Y' THEN
298 pa_debug.g_err_stage:='Required parameter is null - p_context : ' || p_context;
299 pa_debug.write(l_module_name ,pa_debug.g_err_stage,5);
300
301 pa_debug.g_err_stage:='Required parameter is null - p_budget_version_id : ' || p_budget_version_id;
302 pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
303 END IF;
304 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
305 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
306 p_token1 => 'PROCEDURENAME',
307 p_value1 => l_module_name);
308 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
309 END IF;
310
311 l_ra_id_count := p_resource_assignment_id_tbl.COUNT;
312
313 IF l_ra_id_count = 0 THEN
314 IF l_debug_mode = 'Y' THEN
315 pa_debug.g_err_stage:='Validating input parameters - No resource assignment id is passed -raising excp.';
316 print_msg(pa_debug.g_err_stage,l_module_name);
317 END IF;
318 IF l_debug_mode = 'Y' THEN
319 pa_debug.reset_curr_function;
320 END IF;
321 RETURN;
322 END IF;
323 --dbms_output.put_line('d2');
324 --Extending the output pl/sql tables
325 IF l_debug_mode = 'Y' THEN
326 pa_debug.g_err_stage:='Extending input params';
327 print_msg(pa_debug.g_err_stage,l_module_name);
328 END IF;
329 x_rbs_element_id_tbl := SYSTEM.PA_NUM_TBL_TYPE();
330 x_txn_accum_header_id_tbl := SYSTEM.PA_NUM_TBL_TYPE();
331 x_mfc_cost_type_id_old_tbl := SYSTEM.PA_NUM_TBL_TYPE();
332 x_mfc_cost_type_id_new_tbl := SYSTEM.PA_NUM_TBL_TYPE();
333 x_spread_curve_id_old_tbl := SYSTEM.PA_NUM_TBL_TYPE();
334 x_spread_curve_id_new_tbl := SYSTEM.PA_NUM_TBL_TYPE();
335 x_sp_fixed_date_old_tbl := SYSTEM.PA_DATE_TBL_TYPE();
336 x_sp_fixed_date_new_tbl := SYSTEM.PA_DATE_TBL_TYPE();
337 x_plan_start_date_old_tbl := SYSTEM.PA_DATE_TBL_TYPE();
338 x_plan_start_date_new_tbl := SYSTEM.PA_DATE_TBL_TYPE();
339 x_plan_end_date_old_tbl := SYSTEM.PA_DATE_TBL_TYPE();
340 x_plan_end_date_new_tbl := SYSTEM.PA_DATE_TBL_TYPE();
341 x_rlm_id_change_flag_tbl := SYSTEM.pa_varchar2_1_tbl_type();
342
343 x_rbs_element_id_tbl.extend(p_resource_assignment_id_tbl.last);
344 x_txn_accum_header_id_tbl.extend(p_resource_assignment_id_tbl.last);
345 x_mfc_cost_type_id_old_tbl.extend(p_resource_assignment_id_tbl.last);
346 x_mfc_cost_type_id_new_tbl.extend(p_resource_assignment_id_tbl.last);
347 x_spread_curve_id_old_tbl.extend(p_resource_assignment_id_tbl.last);
348 x_spread_curve_id_new_tbl.extend(p_resource_assignment_id_tbl.last);
349 x_sp_fixed_date_old_tbl.extend(p_resource_assignment_id_tbl.last);
350 x_sp_fixed_date_new_tbl.extend(p_resource_assignment_id_tbl.last);
351 x_plan_start_date_old_tbl.extend(p_resource_assignment_id_tbl.last);
352 x_plan_start_date_new_tbl.extend(p_resource_assignment_id_tbl.last);
353 x_plan_end_date_old_tbl.extend(p_resource_assignment_id_tbl.last);
354 x_plan_end_date_new_tbl.extend(p_resource_assignment_id_tbl.last);
355 x_rlm_id_change_flag_tbl.extend(p_resource_assignment_id_tbl.last);
356
357 --Open the plan version cursor to get the plan version settings. This will be used in the later part
358 --of the code
359 OPEN c_plan_ver_settings_csr;
360 FETCH c_plan_ver_settings_csr INTO l_plan_ver_settings_rec;
361 IF c_plan_ver_settings_csr%NOTFOUND THEN
362
363 IF l_debug_mode = 'Y' THEN
364 pa_debug.g_err_stage:='0 rows returned by c_plan_ver_settings_csr';
365 pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
366 END IF;
367 CLOSE c_plan_ver_settings_csr;
368 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
369
370 END IF;
371 CLOSE c_plan_ver_settings_csr;
372 --dbms_output.put_line('6.1');
373
374 ----------------------------------------------------------------------------------------------------------
375 --The logic below is placed to pass the data required by the calculate API. The tbls containing Old/New
376 --values for mfc cost type id, plan start/end dates, spread curve and sp fixed dates are prepared. A tbl
377 --to indicate a changed in rbs mapping is also prepared
378 ---------------------------------------------------------------------------------------------------------
379 l_txn_currency_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
380
381 l_inventory_item_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
382 l_expenditure_type_tbl.extend(p_resource_assignment_id_tbl.COUNT);
383 l_person_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
384 l_job_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
385 l_organization_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
386 l_event_type_tbl.extend(p_resource_assignment_id_tbl.COUNT);
387 l_expenditure_category_tbl.extend(p_resource_assignment_id_tbl.COUNT);
388 l_revenue_category_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
389 l_item_category_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
390 l_bom_resource_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
391 l_project_role_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
392 l_person_type_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
393 l_supplier_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
394 l_named_role_tbl.extend(p_resource_assignment_id_tbl.COUNT);
395 -- l_rate_func_curr_code_tbl
396 l_resource_class_code_tbl.extend(p_resource_assignment_id_tbl.COUNT);
397 l_rate_based_flag_tbl.extend(p_resource_assignment_id_tbl.COUNT);
398 l_non_labor_resource_tbl.extend(p_resource_assignment_id_tbl.COUNT);
399 l_task_id_tbl.extend(p_resource_assignment_id_tbl.COUNT);
400
401 --Added the check for FND_API.G_MISS_XXX in the below decodes as the UI can pass input parameters
402 --as FND_API.G_MISS_XXX even if the existing value of the attribute is NULL. NOTE: The input parameter
403 --to update_planning_transactions should be NULL if the corresponding column in pa_resource_assignments
404 --should not be changed and the input parameter should be FND_API.G_MISS_XXX if thhe corresponding column
405 --in pa_resource_assignments should be nulled out.
406 FOR i IN p_resource_assignment_id_tbl.FIRST .. p_resource_assignment_id_tbl.LAST LOOP
407
408 --dbms_output.put_line('6.2 '||p_resource_assignment_id_tbl(i) );
409
410 IF l_debug_mode = 'Y' THEN
411
412 pa_debug.g_err_stage:='p_project_role_id_tbl('||i||') is '||p_project_role_id_tbl(i);
413 print_msg(pa_debug.g_err_stage,l_module_name);
414 pa_debug.g_err_stage:='p_resource_list_member_id_tbl('||i||') is '||p_resource_list_member_id_tbl(i);
415 print_msg(pa_debug.g_err_stage,l_module_name);
416 pa_debug.g_err_stage:='p_planning_start_date_tbl('||i||') is '||p_planning_start_date_tbl(i);
417 print_msg(pa_debug.g_err_stage,l_module_name);
418 pa_debug.g_err_stage:='p_planning_end_date_tbl('||i||') is '||p_planning_end_date_tbl(i);
419 print_msg(pa_debug.g_err_stage,l_module_name);
420 pa_debug.g_err_stage:='p_spread_curve_id_tbl('||i||') is '||p_spread_curve_id_tbl(i);
421 print_msg(pa_debug.g_err_stage,l_module_name);
422 pa_debug.g_err_stage:='p_sp_fixed_date_tbl('||i||') is '||p_sp_fixed_date_tbl(i);
423 print_msg(pa_debug.g_err_stage,l_module_name);
424 pa_debug.g_err_stage:='p_mfc_cost_type_id_tbl('||i||') is '||p_mfc_cost_type_id_tbl(i);
425 print_msg(pa_debug.g_err_stage,l_module_name);
426
427
428 END IF;
429
430 --IF NULLs are passed for all the resource attributes, based on which the re-spread/re-derivation of amts will happen, then
431 --NULLs can be passed for both OLD/NEW resource attr parameters of calculate API to indicate that none of the resource
432 --attrs have changed.
433 IF p_project_role_id_tbl(i) IS NULL AND
434 p_resource_list_member_id_tbl(i) IS NULL AND
435 p_planning_start_date_tbl(i) IS NULL AND
436 p_planning_end_date_tbl(i) IS NULL AND
437 p_spread_curve_id_tbl(i) IS NULL AND
438 p_sp_fixed_date_tbl(i) IS NULL AND
439 p_mfc_cost_type_id_tbl(i) IS NULL THEN
440
441 IF l_debug_mode = 'Y' THEN
442 pa_debug.g_err_stage:='All the resource attrs passed are NULL and hence No change. Not firing the Select';
443 print_msg(pa_debug.g_err_stage,l_module_name);
444 END IF;
445
446 x_mfc_cost_type_id_old_tbl(i) := NULL;
447 x_mfc_cost_type_id_new_tbl(i) := NULL;
448 x_spread_curve_id_old_tbl(i) := NULL;
449 x_spread_curve_id_new_tbl(i) := NULL;
450 x_sp_fixed_date_old_tbl(i) := NULL;
451 x_sp_fixed_date_new_tbl(i) := NULL;
452 x_plan_start_date_old_tbl(i) := NULL;
453 x_plan_start_date_new_tbl(i) := NULL;
454 x_plan_end_date_old_tbl(i) := NULL;
455 x_plan_end_date_new_tbl(i) := NULL;
456 x_rlm_id_change_flag_tbl(i) := 'N';
457 --select the rbs_element_id and txn accum header id so as to pass them to update_planning_transactions API
458 SELECT rbs_element_id,
459 txn_accum_header_id
460 INTO x_rbs_element_id_tbl(i),
461 x_txn_accum_header_id_tbl(i)
462 FROM pa_resource_assignments
463 WHERE resource_assignment_id = p_resource_assignment_id_tbl(i);
464
465 --If Non Null values are passed then the existing values should be compared with the passed values to find out
466 --the changes. The Old Values should be passed in _old_.._tab parameters of calculate API and new values should
467 --be passed in _new_.._tabl parameters of calculate API.
468 ELSE
469
470 SELECT
471 DECODE(DECODE(NVL(p_project_role_id_tbl(i),project_role_id),
472 FND_API.G_MISS_NUM, decode(project_role_id,null,0,1),
473 project_role_id,0,
474 1)+
475 DECODE(NVL(p_resource_list_member_id_tbl(i),resource_list_member_id),
476 FND_API.G_MISS_NUM, decode(resource_list_member_id,null,0,1),
477 resource_list_member_id, 0,
478 1),
479 0, 'N',
480 'Y'),--Indicates whether the rbs mapping api should be called or not
481 mfc_cost_type_id,
482 NVL(p_mfc_cost_type_id_tbl(i),mfc_cost_type_id),
483 spread_curve_id,
484 NVL(p_spread_curve_id_tbl(i),spread_curve_id),
485 sp_fixed_date,
486 DECODE(nvl(p_spread_curve_id_tbl(i),spread_curve_id),
487 p_fixed_date_sp_id,DECODE(DECODE(p_sp_fixed_date_tbl(i),
488 FND_API.G_MISS_DATE,to_date(null),
489 nvl(p_sp_fixed_date_tbl(i),sp_fixed_date))
490 ,to_date(null),DECODE (p_planning_start_date_tbl(i),
491 FND_API.G_MISS_DATE,to_date(null),
492 nvl(p_planning_start_date_tbl(i),planning_start_date))
493 ,nvl(p_sp_fixed_date_tbl(i),sp_fixed_date))
494 ,to_date(null)),
495 planning_start_date,
496 NVL(p_planning_start_date_tbl(i),planning_start_date),
497 planning_end_date,
498 NVL(p_planning_end_date_tbl(i),planning_end_date),
499 DECODE (p_txn_currency_code_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_txn_currency_code_tbl(i),pbl.txn_currency_code)),
500 DECODE (p_inventory_item_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_inventory_item_id_tbl(i),inventory_item_id)) ,
501 DECODE (p_expenditure_type_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_expenditure_type_tbl(i),expenditure_type)),
502 DECODE (p_person_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_person_id_tbl(i),person_id)) ,
503 DECODE (p_job_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_job_id_tbl(i),job_id)) ,
504 DECODE (p_organization_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_organization_id_tbl(i),organization_id)) ,
505 DECODE (p_event_type_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_event_type_tbl(i),event_type)) ,
506 DECODE (p_expenditure_category_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_expenditure_category_tbl(i),expenditure_category)) ,
507 DECODE (p_revenue_category_code_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_revenue_category_code_tbl(i),revenue_category_code)) ,
508 DECODE (p_item_category_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_item_category_id_tbl(i),item_category_id)) ,
509 DECODE (p_bom_resource_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_bom_resource_id_tbl(i),bom_resource_id)) ,
510 DECODE (p_project_role_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_project_role_id_tbl(i),project_role_id)) ,
511 DECODE (p_person_type_code_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_person_type_code_tbl(i),person_type_code)) ,
512 DECODE (p_supplier_id_tbl(i), FND_API.G_MISS_NUM,null,nvl(p_supplier_id_tbl(i),supplier_id)),
513 DECODE (p_named_role_tbl(i), FND_API.G_MISS_CHAR,null,nvl(p_named_role_tbl(i),named_role )),
514 resource_class_code,
515 rate_based_flag,
516 rbs_element_id,
517 non_labor_resource,
518 txn_accum_header_id,
519 task_id
520 INTO
521 x_rlm_id_change_flag_tbl(i),
522 x_mfc_cost_type_id_old_tbl(i),
523 x_mfc_cost_type_id_new_tbl(i),
524 x_spread_curve_id_old_tbl(i),
525 x_spread_curve_id_new_tbl(i),
526 x_sp_fixed_date_old_tbl(i),
527 x_sp_fixed_date_new_tbl(i),
528 x_plan_start_date_old_tbl(i),
529 x_plan_start_date_new_tbl(i),
530 x_plan_end_date_old_tbl(i),
531 x_plan_end_date_new_tbl(i),
532 l_txn_currency_code_tbl(i),
533 l_inventory_item_id_tbl(i),
534 l_expenditure_type_tbl(i),
535 l_person_id_tbl(i),
536 l_job_id_tbl(i),
537 l_organization_id_tbl(i),
538 l_event_type_tbl(i),
539 l_expenditure_category_tbl(i),
540 l_revenue_category_code_tbl(i),
541 l_item_category_id_tbl(i),
542 l_bom_resource_id_tbl(i),
543 l_project_role_id_tbl(i),
544 l_person_type_code_tbl(i),
545 l_supplier_id_tbl(i),
546 l_named_role_tbl(i),
547 l_resource_class_code_tbl(i),
548 l_rate_based_flag_tbl(i),
549 x_rbs_element_id_tbl(i),
550 l_non_labor_resource_tbl(i),
551 x_txn_accum_header_id_tbl(i),
552 l_task_id_tbl(i)
553 FROM pa_resource_assignments pra,
554 (SELECT pra.resource_assignment_id
555 ,pbl.txn_currency_code
556 FROM pa_budget_lines pbl,
557 pa_resource_assignments pra
558 WHERE pbl.resource_assignment_id(+)=pra.resource_assignment_id
559 AND pra.resource_assignment_id=p_resource_assignment_id_tbl(i)
560 AND ROWNUM=1) pbl
561 WHERE pra.resource_assignment_id=p_resource_assignment_id_tbl(i);
562
563 IF l_debug_mode = 'Y' THEN
564
565 pa_debug.g_err_stage:='x_rlm_id_change_flag_tbl('||i||') is '||x_rlm_id_change_flag_tbl(i);
566 print_msg(pa_debug.g_err_stage,l_module_name);
567 pa_debug.g_err_stage:='x_mfc_cost_type_id_old_tbl('||i||') is '||x_mfc_cost_type_id_old_tbl(i);
568 print_msg(pa_debug.g_err_stage,l_module_name);
569 pa_debug.g_err_stage:='x_mfc_cost_type_id_new_tbl('||i||') is '||x_mfc_cost_type_id_new_tbl(i);
570 print_msg(pa_debug.g_err_stage,l_module_name);
571 pa_debug.g_err_stage:='x_spread_curve_id_old_tbl('||i||') is '||x_spread_curve_id_old_tbl(i);
572 print_msg(pa_debug.g_err_stage,l_module_name);
573 pa_debug.g_err_stage:='x_spread_curve_id_new_tbl('||i||') is '||x_spread_curve_id_new_tbl(i);
574 print_msg(pa_debug.g_err_stage,l_module_name);
575 pa_debug.g_err_stage:='x_sp_fixed_date_old_tbl('||i||') is '||x_sp_fixed_date_old_tbl(i);
576 print_msg(pa_debug.g_err_stage,l_module_name);
577 pa_debug.g_err_stage:='x_sp_fixed_date_new_tbl('||i||') is '||x_sp_fixed_date_new_tbl(i);
578 print_msg(pa_debug.g_err_stage,l_module_name);
579 pa_debug.g_err_stage:='x_plan_start_date_old_tbl('||i||') is '||x_plan_start_date_old_tbl(i);
580 print_msg(pa_debug.g_err_stage,l_module_name);
581 pa_debug.g_err_stage:='x_plan_start_date_new_tbl('||i||') is '||x_plan_start_date_new_tbl(i);
582 print_msg(pa_debug.g_err_stage,l_module_name);
583 pa_debug.g_err_stage:='x_plan_end_date_old_tbl('||i||') is '||x_plan_end_date_old_tbl(i);
584 print_msg(pa_debug.g_err_stage,l_module_name);
585 pa_debug.g_err_stage:='x_plan_end_date_new_tbl('||i||') is '||x_plan_end_date_new_tbl(i);
586 print_msg(pa_debug.g_err_stage,l_module_name);
587
588
589 END IF;--IF l_debug_mode = 'Y' THEN
590
591 --Added Validation for planning_start_date and planning end date
592 IF ((x_plan_start_date_new_tbl(i)=FND_API.G_MISS_DATE) OR
593 (x_plan_end_date_new_tbl(i) =FND_API.G_MISS_DATE) OR
594 (NVL(x_plan_start_date_new_tbl(i),trunc(sysdate))>NVL(x_plan_end_date_new_tbl(i),trunc(sysdate)))) THEN
595
596 IF l_debug_mode = 'Y' THEN
597
598 pa_debug.g_err_stage:='Invalid Planning Start/End Dates';
599 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
600
601 pa_debug.g_err_stage:='x_plan_start_date_new_tbl('||i||') is '|| x_plan_start_date_new_tbl(i);
602 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
603
604 pa_debug.g_err_stage:='x_plan_end_date_new_tbl('||i||') is '|| x_plan_end_date_new_tbl(i);
605 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
606
607 END IF;
608 /*Bug Fix:5752337: The meaningful message should be shown when dates are not entered properly
609 * made use of exisisting message PA_FP_PLAN_START_END_DATE_ERR which is used in the spread api
610 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
611 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
612 */
613 OPEN get_line_info(p_resource_assignment_id_tbl(i));
614 FETCH get_line_info
615 INTO l_project_name
616 , l_task_name
617 , l_resource_name;
618 CLOSE get_line_info;
619 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
620 ,p_msg_name => 'PA_FP_PLAN_START_END_DATE_ERR'
621 ,p_token1 => 'L_PROJECT_NAME'
622 ,p_value1 => l_project_name
623 ,p_token2 => 'L_TASK_NAME'
624 ,p_value2 => l_task_name
625 ,p_token3 => 'L_RESOURCE_NAME'
626 ,p_value3 => l_resource_name
627 ,p_token4 => 'L_LINE_START_DATE'
628 ,p_value4 => x_plan_start_date_new_tbl(i)
629 ,p_token5 => 'L_LINE_END_DATE'
630 ,p_value5 => x_plan_end_date_new_tbl(i)
631 );
632 /* end of bug fix: 5752337 */
633
634
635 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
636 END IF;--IF ((x_plan_start_date_new_tbl(i)=FND_API.G_MISS_DATE) OR
637
638 --Bug 4083605. This block of code makes sure that the planning start date is not changed to a date
639 --which falls after the date where actuals exist. Similar validations are done for planning end date too
640
641 --Bug 4448581
642 IF NVL(l_plan_ver_settings_rec.wp_version_flag,'N') <> 'Y' THEN
643
644 IF l_plan_ver_settings_rec.etc_start_date IS NOT NULL AND
645 (x_plan_start_date_new_tbl(i) <> x_plan_start_date_old_tbl(i) OR
646 x_plan_end_date_new_tbl(i) <> x_plan_end_date_old_tbl(i)) THEN
647
648 IF l_debug_mode = 'Y' THEN
649
650 pa_debug.g_err_stage:='Planning Start/End dates have changed. Validating with Etc Start date';
651 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
652
653 END IF;
654
655 SELECT min(start_date), max(end_date)
656 INTO l_actuals_start_date, l_actuals_end_date
657 FROM pa_budget_lines
658 WHERE budget_version_id = p_budget_version_id
659 AND resource_assignment_id = p_resource_assignment_id_tbl(i)
660 AND end_date < l_plan_ver_settings_rec.etc_start_date;
661
662 IF l_debug_mode = 'Y' THEN
663
664 pa_debug.g_err_stage:='x_plan_start_date_new_tbl('||i||') is '||x_plan_start_date_new_tbl(i);
665 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
666 pa_debug.g_err_stage:='x_plan_start_date_old_tbl('||i||') is '||x_plan_start_date_old_tbl(i);
667 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
668 pa_debug.g_err_stage:='l_actuals_start_date is '||l_actuals_start_date;
669 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
670 pa_debug.g_err_stage:='x_plan_end_date_new_tbl('||i||') is '||x_plan_end_date_new_tbl(i);
671 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
672 pa_debug.g_err_stage:='x_plan_end_date_old_tbl('||i||') is '||x_plan_end_date_old_tbl(i);
673 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
674 pa_debug.g_err_stage:='l_actuals_end_date is '||l_actuals_end_date;
675 pa_debug.write(l_module_name ,pa_debug.g_err_stage,3);
676
677 END IF;
678
679 --If either x_plan_start_date_new_tbl or x_plan_end_date_start_tbl is not null then all
680 --x_plan_start.end_date_new/old_tbls will be not null
681 IF ( x_plan_start_date_new_tbl(i) <> x_plan_start_date_old_tbl(i) AND
682 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
683 ( x_plan_end_date_new_tbl(i) <> x_plan_end_date_old_tbl(i) AND
684 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
685
686 IF ( x_plan_start_date_new_tbl(i) <> x_plan_start_date_old_tbl(i) AND
687 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
688
689 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
690 p_msg_name => 'PA_FP_PLAN_ST_DT_CHG_ACTL_EXST');
691 END IF;
692
693 IF ( x_plan_end_date_new_tbl(i) <> x_plan_end_date_old_tbl(i) AND
694 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
695
696 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
697 p_msg_name => 'PA_FP_PLAN_DT_CHG_ACTL_EXST');
698 END IF;
699
700 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
701
702 END IF;
703
704
705 END IF;--IF l_plan_ver_settings_rec.etc_start_date IS NOT NULL AND
706
707 END IF; -- If not a workplan version
708
709 --Added Validation for sp_fixed_date cannot be null and to be between planning_start_date and
710 --planning end date for fixed date spread curve. -- Added for Bug 3607061
711 --Modified Logic below for Bug 3762278 -- l_spread_curve_id_tbl is the final value of
712 --spread curve id that will be existing in db
713 IF (x_spread_curve_id_new_tbl(i) = p_fixed_date_sp_id) THEN
714
715 IF p_sp_fixed_date_tbl(i) = FND_API.G_MISS_DATE THEN
716
717 IF l_debug_mode = 'Y' THEN
718 pa_debug.g_err_stage:='Error - cannot nullify sp_fixed_date for Fixed Date Spread curve';
719 print_msg(pa_debug.g_err_stage,l_module_name);
720 END IF;
721
722 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
723 p_msg_name => 'PA_FP_SP_FIXED_DATE_NULL');
724 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
725
726 -- Added for bug 4247427. Fixed Date cannot be less than the etc_start_date
727 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
728 IF (x_sp_fixed_date_new_tbl(i) < l_plan_ver_settings_rec.etc_start_date) THEN
729 IF l_debug_mode = 'Y' THEN
730 pa_debug.g_err_stage :='Sp Fixed Date less than ETC Start date';
731 print_msg(pa_debug.g_err_stage,l_module_name);
732 END IF;
733 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
734 p_msg_name => 'PA_FP_SP_FIXED_DATE_LESS');
735 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
736 END IF; -- x_sp_fixed_date_new_tbl(i) < l_plan_ver_settings_rec.etc_start_date
737
738 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
739
740 IF l_debug_mode = 'Y' THEN
741 pa_debug.g_err_stage :='Sp Fixed Date not between planning start date and End Date';
742 print_msg(pa_debug.g_err_stage,l_module_name);
743 END IF;
744
745 -- Added for Bug 3762278
746 -- fetching details for message tokens
747 BEGIN
748 SELECT ppa.name project_name
749 ,pt.name task_name
750 ,prl.alias resource_name
751 INTO l_project_name
752 ,l_task_name
753 ,l_resource_name
754 FROM pa_projects_all ppa
755 ,pa_proj_elements pt
756 ,pa_resource_list_members prl
757 ,pa_resource_assignments pra
758 WHERE pra.resource_assignment_id = p_resource_assignment_id_tbl(i)
759 AND ppa.project_id = pra.project_id
760 AND pt.proj_element_id(+) = pra.task_id
761 /* Bug fix:4200168 AND prl.resource_list_member_id(+) = pra.resource_list_member_id;*/
762 AND prl.resource_list_member_id = pra.resource_list_member_id;
763 EXCEPTION
764 WHEN NO_DATA_FOUND THEN
765 IF l_debug_mode = 'Y' THEN
766 pa_debug.g_err_stage :='Invalid Data PA_FP_FIXED_DATE_NOT_MATCH will have no tokens';
767 print_msg(pa_debug.g_err_stage,l_module_name);
768 END IF;
769 NULL;
770 END;
771
772 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
773 p_msg_name => 'PA_FP_FIXED_DATE_NOT_MATCH',
774 p_token1 => 'L_PROJECT_NAME' ,
775 p_value1 => l_project_name,
776 p_token2 => 'L_TASK_NAME',
777 p_value2 => l_task_name,
778 p_token3 => 'L_RESOURCE_NAME',
779 p_value3 => l_resource_name,
780 p_token4 => 'L_LINE_START_DATE',
781 p_value4 => x_plan_start_date_new_tbl(i),
782 p_token5 => 'L_LINE_END_DATE',
783 p_value5 => x_plan_start_date_old_tbl(i));
784 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
785
786 END IF;--IF x_sp_fixed_date_new_tbl(i) = FND_API.G_MISS_DATE THEN
787
788 ELSE
789 -- if the Final Value of spread curve id is either null or not equal to fixed date
790 -- spread curve then the sp fixed date should be nulled out if it is not already null.
791 IF l_debug_mode = 'Y' THEN
792 pa_debug.g_err_stage:='Spread curve id not chosen to be updated and value in db for..';
793 print_msg(pa_debug.g_err_stage,l_module_name);
794 pa_debug.g_err_stage:='..spread curve id is either null or <> to fixed date spread curve id';
795 print_msg(pa_debug.g_err_stage,l_module_name);
796 END IF;
797
798 IF x_sp_fixed_date_old_tbl(i) IS NOT NULL THEN
799
800 x_sp_fixed_date_new_tbl(i) := FND_API.G_MISS_DATE;
801
802 ELSE
803
804 x_sp_fixed_date_new_tbl(i) := NULL;
805
806 END IF;
807
808 END IF;--IF (x_spread_curve_id_new_tbl(i) = p_fixed_date_sp_id) THEN
809
810
811 --RBS element Id should be re-derived if the rlm id/Project Role Id have changed.
812 --dbms_output.put_line('7');
813 IF l_debug_mode = 'Y' THEN
814 pa_debug.g_err_stage:='Finding out whether the RBS re-derivation is required or NOT';
815 print_msg(pa_debug.g_err_stage,l_module_name);
816 END IF;
817
818 IF x_rlm_id_change_flag_tbl(i)='Y' THEN
819
820 -- An rbs element id can change for a planning transaction only in Task Assignments Flow.
821 IF p_context <> PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
822
823 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
824 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
825 p_token1 => 'PROCEDURENAME',
826 p_value1 => 'PROCESS_RES_CHG_DERV_CALC_PRMS',
827 p_token2 => 'STAGE',
828 p_value2 => 'RBS Elem Id change in NON TA context');
829 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
830
831 END IF;
832 --dbms_output.put_line('7.1');
833
834 l_rbs_map_index:=l_rbs_map_index+1;
835
836 l_ra_id_rbs_prm_tbl.extend(1);
837 l_person_id_rbs_prm_tbl.extend(1);
838 l_job_id_rbs_prm_tbl.extend(1);
839 l_organization_id_rbs_prm_tbl.extend(1);
840 l_event_type_rbs_prm_tbl.extend(1);
841 l_exp_category_rbs_prm_tbl.extend(1);
842 l_rev_cat_code_rbs_prm_tbl.extend(1);
843 l_inv_item_id_rbs_prm_tbl.extend(1);
844 l_item_cat_id_rbs_prm_tbl.extend(1);
845 l_bom_res_id_rbs_prm_tbl.extend(1);
846 l_per_type_code_rbs_prm_tbl.extend(1);
847 l_supplier_id_rbs_prm_tbl.extend(1);
848 l_txn_src_typ_code_rbs_prm_tbl.extend(1);
849 l_exp_type_rbs_prm_tbl.extend(1);
850 l_project_role_id_rbs_prm_tbl.extend(1);
851 l_named_role_rbs_prm_tbl.extend(1);
852 l_non_labor_res_rbs_prm_tbl.extend(1);
853
854 --These pl/sql tbls are required as they have to be passed to the delete_planning_transactions API for
855 --deleting the PJI data for the planning transactions for which the rbs element id has changed
856 l_task_id_rbs_prm_tbl.extend(1);
857 l_rbs_elem_id_rbs_prm_tbl.extend(1);
858 l_rbf_rbs_prm_tbl.extend(1);
859 l_res_class_code_rbs_prm_tbl.extend(1);
860 --dbms_output.put_line('7.2');
861
862 l_ra_id_rbs_prm_tbl(l_rbs_map_index) := p_resource_assignment_id_tbl(i);
863 l_person_id_rbs_prm_tbl(l_rbs_map_index) := l_person_id_tbl(i);
864 l_job_id_rbs_prm_tbl(l_rbs_map_index) := l_job_id_tbl(i);
865 l_organization_id_rbs_prm_tbl(l_rbs_map_index) := l_organization_id_tbl(i);
866 l_event_type_rbs_prm_tbl(l_rbs_map_index) := l_event_type_tbl(i);
867 l_exp_category_rbs_prm_tbl(l_rbs_map_index) := l_expenditure_category_tbl(i);
868 l_rev_cat_code_rbs_prm_tbl(l_rbs_map_index) := l_revenue_category_code_tbl(i);
869 l_inv_item_id_rbs_prm_tbl(l_rbs_map_index) := l_inventory_item_id_tbl(i);
870 l_item_cat_id_rbs_prm_tbl(l_rbs_map_index) := l_item_category_id_tbl(i);
871 l_bom_res_id_rbs_prm_tbl(l_rbs_map_index) := l_bom_resource_id_tbl(i);
872 l_per_type_code_rbs_prm_tbl(l_rbs_map_index) := l_person_type_code_tbl(i);
873 l_supplier_id_rbs_prm_tbl(l_rbs_map_index) := l_supplier_id_tbl(i);
874 l_txn_src_typ_code_rbs_prm_tbl(l_rbs_map_index) := 'RES_ASSIGNMENT';
875 l_exp_type_rbs_prm_tbl(l_rbs_map_index) := l_expenditure_type_tbl(i);
876 l_project_role_id_rbs_prm_tbl(l_rbs_map_index) := l_project_role_id_tbl(i);
877 l_named_role_rbs_prm_tbl(l_rbs_map_index) := l_named_role_tbl(i);
878 l_non_labor_res_rbs_prm_tbl(l_rbs_map_index) := l_non_labor_resource_tbl(i);
879
880 l_task_id_rbs_prm_tbl(l_rbs_map_index) := l_task_id_tbl(i);
881 l_res_class_code_rbs_prm_tbl(l_rbs_map_index) := l_resource_class_code_tbl(i);
882 --Please note that here rbs element id for which the pji data has to deleted should be passed.
883 --x_rbs_element_id_tbl contains the old rbs element id and the new rbs element id will be derived only in the
884 --later part of the code
885 l_rbs_elem_id_rbs_prm_tbl(l_rbs_map_index) := x_rbs_element_id_tbl(i);
886 l_rbf_rbs_prm_tbl(l_rbs_map_index) := l_rate_based_flag_tbl(i);
887 --dbms_output.put_line('7.3');
888
889 /* Bug fix: 5759413 */
890 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
891 l_rtx_rateOvrds_rec := NULL;
892 OPEN get_rateOvrds (p_resource_assignment_id_tbl(i));
893 FETCH get_rateOvrds INTO l_rtx_rateOvrds_rec;
894 CLOSE get_rateOvrds;
895 END IF;
896
897 -- An rbs element id can change for a planning transaction only in Task Assignments Flow.
898 -- Resource list member id and project role id are the only two attributes of a planning
899 -- transaction, which on undergoing a change from the UI, can change the rbs element id
900 -- of the planning transaction. Quantities and amounts to be passed to calculate api
901 -- is derved as per the logic below
902 -- Details - /padev/pa/11.5/docs/CalcAPI_Behavior_Document2.doc
903 IF l_debug_mode = 'Y' THEN
904 pa_debug.g_err_stage:='Deriving Amts/Qty for rbs element id change';
905 print_msg(pa_debug.g_err_stage,l_module_name);
906 END IF;
907
908 IF px_total_qty_tbl(i) IS NOT NULL AND px_total_qty_tbl(i) <> FND_API.G_MISS_NUM THEN
909
910 IF l_debug_mode = 'Y' THEN
911 pa_debug.g_err_stage:='RBS Input Quantity Exists Set Amts to NULL';
912 print_msg(pa_debug.g_err_stage,l_module_name);
913 END IF;
914
915 px_total_raw_cost_tbl(i) := NULL;
916 px_total_burdened_cost_tbl(i) := NULL;
917 px_total_revenue_tbl(i) := NULL;
918 px_raw_cost_rate_tbl(i) := NULL;
919 px_b_cost_rate_tbl(i) := NULL;
920 px_bill_rate_tbl(i) := NULL;
921
922 /* Bug fix: 5759413: Check if the rate override is changed or not: if changed retain
923 * the new rate overrides entered by user, if not changed then set it to null
924 * so that, rate api derives the new rates for new planning resource
925 */
926 IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
927 px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM Then
928 IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
929 px_raw_cost_override_rate_tbl(i) := NULL;
930 END IF;
931 End IF;
932
933 IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
934 px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM Then
935 IF px_b_cost_rate_override_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_burden_cost_rate_override,0) Then
936 px_b_cost_rate_override_tbl(i) := NULL;
937 END IF;
938 END IF;
939
940 ELSIF px_total_qty_tbl(i) = FND_API.G_MISS_NUM THEN
941
942 IF l_debug_mode = 'Y' THEN
943 pa_debug.g_err_stage:='RBS Input Quantity IS G_MISS_NUM Set Amts to G_MISS_NUM';
944 print_msg(pa_debug.g_err_stage,l_module_name);
945 END IF;
946
947 px_total_raw_cost_tbl(i) := FND_API.G_MISS_NUM;
948 px_total_burdened_cost_tbl(i) := FND_API.G_MISS_NUM;
949 px_total_revenue_tbl(i) := FND_API.G_MISS_NUM;
950 px_raw_cost_rate_tbl(i) := FND_API.G_MISS_NUM;
951 px_b_cost_rate_tbl(i) := FND_API.G_MISS_NUM;
952 px_bill_rate_tbl(i) := FND_API.G_MISS_NUM;
953
954 /* Bug fix: 5759413 */
955 IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
956 px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM Then
957 IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
958 px_raw_cost_override_rate_tbl(i) := NULL;
959 END IF;
960 End IF;
961
962 IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
963 px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM Then
964 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;
965 END IF;
966 END IF;
967
968
969 ELSE -- px_total_qty_tbl IS NULL
970
971 IF l_debug_mode = 'Y' THEN
972 pa_debug.g_err_stage:='RBS Input Quantity IS NULL See in DB';
973 print_msg(pa_debug.g_err_stage,l_module_name);
974 END IF;
975 --dbms_output.put_line('7.3.1');
976
977 OPEN c_data_in_db_csr(p_resource_assignment_id_tbl(i));
978
979 FETCH c_data_in_db_csr INTO l_data_in_db_rec;
980
981 IF c_data_in_db_csr%FOUND THEN
982
983 IF l_debug_mode = 'Y' THEN
984 pa_debug.g_err_stage:='RBS Quantity found in DB, Set Amounts to NULL';
985 print_msg(pa_debug.g_err_stage,l_module_name);
986 END IF;
987 px_total_qty_tbl(i) := l_data_in_db_rec.quantity;
988 px_total_raw_cost_tbl(i) := NULL;
989 px_total_burdened_cost_tbl(i) := NULL;
990 px_total_revenue_tbl(i) := NULL;
991 px_raw_cost_rate_tbl(i) := NULL;
992 px_b_cost_rate_tbl(i) := NULL;
993 px_bill_rate_tbl(i) := NULL;
994 /* Bug fix: 5759413 */
995 IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
996 px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM Then
997 IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
998 px_raw_cost_override_rate_tbl(i) := NULL;
999 END IF;
1000 End IF;
1001
1002 IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
1003 px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM Then
1004 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;
1005 END IF;
1006 END IF;
1007
1008 ELSE -- If c_data_in_db_csr is not FOUND
1009
1010 IF l_debug_mode = 'Y' THEN
1011 pa_debug.g_err_stage:='RBS NO Record in DB';
1012 print_msg(pa_debug.g_err_stage,l_module_name);
1013 END IF;
1014
1015 px_total_qty_tbl(i) := NULL;
1016 px_total_raw_cost_tbl(i) := NULL;
1017 px_total_burdened_cost_tbl(i) := NULL;
1018 px_total_revenue_tbl(i) := NULL;
1019 px_raw_cost_rate_tbl(i) := NULL;
1020 px_b_cost_rate_tbl(i) := NULL;
1021 px_bill_rate_tbl(i) := NULL;
1022
1023 /* Bug fix: 5759413 */
1024 IF px_raw_cost_override_rate_tbl(i) is NOT NULL AND
1025 px_raw_cost_override_rate_tbl(i) <> FND_API.G_MISS_NUM Then
1026 IF px_raw_cost_override_rate_tbl(i) = nvl(l_rtx_rateOvrds_rec.txn_raw_cost_rate_override,0) Then
1027 px_raw_cost_override_rate_tbl(i) := NULL;
1028 END IF;
1029 End IF;
1030
1031 IF px_b_cost_rate_override_tbl(i) is NOT NULL AND
1032 px_b_cost_rate_override_tbl(i) <> FND_API.G_MISS_NUM Then
1033 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;
1034 END IF;
1035 END IF;
1036
1037 END IF;
1038
1039 CLOSE c_data_in_db_csr;
1040 --dbms_output.put_line('7.4');
1041
1042 END IF;--IF px_total_qty_tbl(i) IS NOT NULL AND px_total_qty_tbl(i) <> FND_API.G_MISS_NUM THEN
1043
1044 END IF;--IF x_rlm_id_change_flag_tbl(i)='Y' THEN
1045
1046 END IF;--IF p_project_role_id_tbl(i) IS NULL AND
1047
1048 END LOOP;--FOR i IN p_resource_assignment_id_tbl.FIRST
1049
1050 IF l_ra_id_rbs_prm_tbl.count > 0 THEN
1051
1052 /* Bug 3767322 - If resource list member changes, handling calculate
1053 * api call as per Sanjay:
1054 If planning resource is changed (resource_list_member_id is changed) then
1055 calculate API assumes that the calling API has cleaned up the data by deleting
1056 the entries in reporting data and then also deleted all the budget lines. This
1057 is important as this is one reason of data corruption happening in the reporting
1058 integration. Calculate cannot handle this case as the data seen by calculate is
1059 the changed data and not the old one.
1060 Pass the following to calculate API: Total QTY, ETC AMT (Plan-Actual)/ ETC
1061 QTY (Plan-actual) as ETC Rate (if qty and amounts are both present), Total
1062 Amount (Raw Cost, Burdened Cost and or Revenue) (These may ( if qty is null) or
1063 may not be passed) . No delete flag is required as all the lines have already
1064 been removed. */
1065
1066 IF l_debug_mode = 'Y' THEN
1067 pa_debug.g_err_stage:='Calling API delete_planning_transactions ';
1068 pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
1069 END IF;
1070 --dbms_output.put_line('7.5');
1071
1072 pa_fp_planning_transaction_pub.delete_planning_transactions
1073 (
1074 p_context => p_context
1075 ,p_calling_context => p_calling_context -- Added for Bug 6856934
1076 ,p_task_or_res => 'ASSIGNMENT'
1077 ,p_resource_assignment_tbl => l_ra_id_rbs_prm_tbl
1078 ,p_validate_delete_flag => 'N'
1079 ,p_calling_module => 'PROCESS_RES_CHG_DERV_CALC_PRMS'
1080 ,p_task_id_tbl => l_task_id_rbs_prm_tbl
1081 ,p_rbs_element_id_tbl => l_rbs_elem_id_rbs_prm_tbl
1082 ,p_rate_based_flag_tbl => l_rbf_rbs_prm_tbl
1083 ,p_resource_class_code_tbl => l_res_class_code_rbs_prm_tbl
1084 ,x_return_status => x_return_status
1085 ,x_msg_count => x_msg_count
1086 ,x_msg_data => x_msg_data
1087 );
1088
1089 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1090
1091 IF l_debug_mode = 'Y' THEN
1092 pa_debug.g_err_stage:='Called API delete_planning_transactions returned error';
1093 pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
1094 END IF;
1095 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1096
1097 END IF;
1098 --dbms_output.put_line('7.6');
1099
1100 END IF;
1101
1102 --dbms_output.put_line('8');
1103 --Call the rbs mapping api only if there are some resource assignments for which the rbs_element_id can change
1104 IF l_rbs_map_index>0 THEN
1105
1106 IF l_debug_mode = 'Y' THEN
1107 pa_debug.g_err_stage:='Calling PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs';
1108 print_msg(pa_debug.g_err_stage,l_module_name);
1109 END IF;
1110
1111 --Extend the output pl/sql tbls l_rbs_element_id_tbl and l_txn_accum_header_id_tbl so that they contatin
1112 --the same no of records as l_eligible_rlm_ids_tbl
1113 l_rbs_element_id_prm_tbl.EXTEND(l_ra_id_rbs_prm_tbl.COUNT);
1114 l_txn_accum_header_id_prm_tbl.EXTEND(l_ra_id_rbs_prm_tbl.COUNT);
1115
1116 --Call the RBS Mapping API only if the rbs version id is not null
1117 IF l_plan_ver_settings_rec.rbs_version_id IS NOT NULL THEN
1118
1119 --dbms_output.put_line('7.7');
1120 PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
1121 p_budget_version_id => p_budget_version_id
1122 ,p_resource_list_id => l_plan_ver_settings_rec.resource_list_id
1123 ,p_rbs_version_id => l_plan_ver_settings_rec.rbs_version_id
1124 ,p_calling_process => 'RBS_REFRESH'
1125 ,p_calling_context => 'PLSQL'
1126 ,p_process_code => 'RBS_MAP'
1127 ,p_calling_mode => 'PLSQL_TABLE'
1128 ,p_init_msg_list_flag => 'N'
1129 ,p_commit_flag => 'N'
1130 ,p_TXN_SOURCE_ID_tab => l_ra_id_rbs_prm_tbl
1131 ,p_TXN_SOURCE_TYPE_CODE_tab => l_txn_src_typ_code_rbs_prm_tbl
1132 ,p_PERSON_ID_tab => l_person_id_rbs_prm_tbl
1133 ,p_JOB_ID_tab => l_job_id_rbs_prm_tbl
1134 ,p_ORGANIZATION_ID_tab => l_organization_id_rbs_prm_tbl
1135 ,p_VENDOR_ID_tab => l_supplier_id_rbs_prm_tbl
1136 ,p_EXPENDITURE_TYPE_tab => l_exp_type_rbs_prm_tbl
1137 ,p_EVENT_TYPE_tab => l_event_type_rbs_prm_tbl
1138 ,p_NON_LABOR_RESOURCE_tab => l_non_labor_res_rbs_prm_tbl
1139 ,p_EXPENDITURE_CATEGORY_tab => l_exp_category_rbs_prm_tbl
1140 ,p_REVENUE_CATEGORY_CODE_tab => l_rev_cat_code_rbs_prm_tbl
1141 ,p_PROJECT_ROLE_ID_tab => l_project_role_id_rbs_prm_tbl
1142 ,p_RESOURCE_CLASS_CODE_tab => l_res_class_code_rbs_prm_tbl
1143 ,p_ITEM_CATEGORY_ID_tab => l_item_cat_id_rbs_prm_tbl
1144 ,p_PERSON_TYPE_CODE_tab => l_per_type_code_rbs_prm_tbl
1145 ,p_BOM_RESOURCE_ID_tab => l_bom_res_id_rbs_prm_tbl
1146 ,p_INVENTORY_ITEM_ID_tab => l_inv_item_id_rbs_prm_tbl -- Bug 3698596
1147 ,x_txn_source_id_tab => l_txn_source_id_tbl
1148 ,x_res_list_member_id_tab => l_res_list_member_id_tbl
1149 ,x_rbs_element_id_tab => l_rbs_element_id_prm_tbl
1150 ,x_txn_accum_header_id_tab => l_txn_accum_header_id_prm_tbl
1151 ,x_return_status => x_return_status
1152 ,x_msg_count => x_msg_count
1153 ,x_msg_data => x_msg_data);
1154
1155 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1156
1157 IF l_debug_mode = 'Y' THEN
1158 pa_debug.g_err_stage:='Called API PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs returned error';
1159 pa_debug.write(l_module_name,pa_debug.g_err_stage, 5);
1160 END IF;
1161 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1162
1163 END IF;
1164 --dbms_output.put_line('7.8');
1165
1166 END IF;--IF l_plan_ver_settings_rec.rbs_version_id IS NOT NULL THEN
1167
1168
1169 END IF;--IF l_rbs_map_index>0 THEN
1170
1171 IF l_rbs_map_index>0 THEN
1172
1173 --dbms_output.put_line('7.9');
1174 --Initialise the indexes so that they can be re-used in the loop below
1175 l_rbs_map_index:=1;
1176 IF l_debug_mode = 'Y' THEN
1177 pa_debug.g_err_stage:='About to loop thru to create the pl/sql tables for rbs element id ';
1178 print_msg(pa_debug.g_err_stage,l_module_name);
1179 END IF;
1180 -- Loop thru the input ra id tbl and change the value of rbs_element_id
1181 -- depending on the value returned by the above apis. Here it is assumed that the called APIs
1182 -- returns the output in the order in which the inputs are passed.
1183
1184 --Null out quantity if the UOM or Rate Based Flag have changed.
1185 FOR i IN p_resource_assignment_id_tbl.FIRST .. p_resource_assignment_id_tbl.LAST LOOP
1186
1187 IF p_resource_assignment_id_tbl(i) = l_ra_id_rbs_prm_tbl(l_rbs_map_index) THEN
1188
1189 x_rbs_element_id_tbl(i):=l_rbs_element_id_prm_tbl(l_rbs_map_index);
1190 x_txn_accum_header_id_tbl(i):=l_txn_accum_header_id_prm_tbl(l_rbs_map_index);
1191
1192 IF l_ra_id_rbs_prm_tbl.EXISTS(l_rbs_map_index+1) THEN
1193 l_rbs_map_index:=l_rbs_map_index+1;
1194 END IF;
1195
1196 END IF;
1197
1198 END LOOP;
1199 --dbms_output.put_line('8.0');
1200 END IF;--IF l_rbs_map_index>0 OR
1201 --dbms_output.put_line('10');
1202
1203 IF l_debug_mode = 'Y' THEN
1204 pa_debug.g_err_stage:='Leaving Process_res_chg_Derv_calc_prms API';
1205 print_msg(pa_debug.g_err_stage,l_module_name);
1206 pa_debug.reset_curr_function;
1207 END IF;
1208 EXCEPTION
1209 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
1210 l_msg_count := FND_MSG_PUB.count_msg;
1211 IF l_msg_count = 1 THEN
1212 PA_INTERFACE_UTILS_PUB.get_messages
1213 (p_encoded => FND_API.G_TRUE
1214 ,p_msg_index => 1
1215 ,p_msg_count => l_msg_count
1216 ,p_msg_data => l_msg_data
1217 ,p_data => l_data
1218 ,p_msg_index_out => l_msg_index_out);
1219 x_msg_data := l_data;
1220 x_msg_count := l_msg_count;
1221 ELSE
1222 x_msg_count := l_msg_count;
1223 END IF;
1224 x_return_status := FND_API.G_RET_STS_ERROR;
1225 IF l_debug_mode = 'Y' THEN
1226 pa_debug.reset_curr_function;
1227 END IF;
1228 WHEN OTHERS THEN
1229 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1230 x_msg_count := 1;
1231 x_msg_data := SQLERRM;
1232 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
1233 ,p_procedure_name => 'Process_res_chg_Derv_calc_prms');
1234
1235 IF l_debug_mode = 'Y' THEN
1236 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
1237 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
1238 pa_debug.reset_curr_function;
1239 END IF;
1240 RAISE;
1241
1242 END Process_res_chg_Derv_calc_prms;
1243
1244
1245 /*=====================================================================
1246 Procedure Name: add_planning_transactions
1247 Purpose: This procedure should be called to create planning
1248 transactions valid values for p_context are 'BUDGET'
1249 ,'FORECAST', 'WORKPLAN' and 'TASK_ASSIGNMENT'.The
1250 api will honor only resource list member
1251 id, resource name and resource class flag in the
1252 resource rec type and default all the other values
1253 by calling the get resurce defaults api of resource
1254 foundation.
1255
1256 Creates resource assignments and budget lines for
1257 workplan/budget/forecast. It is assumed that the
1258 duplicate rlm ids are not passed . If this API finds
1259 that there is no corresponding budget version then
1260 this API goes and creates a budget version for the
1261 work plan version.
1262 =======================================================================*/
1263 /*******************************************************************************************************
1264 As part of Bug 3749516 All References to Equipment Effort or Equip Resource Class has been removed in
1265 PROCEDURE add_planning_transactions.
1266 p_planned_equip_effort_tbl IN parameter has also been removed as they were not being used/referred.
1267 ********************************************************************************************************/
1268
1269 PROCEDURE add_planning_transactions
1270 (
1271 p_context IN VARCHAR2
1272 ,p_extraction_type IN VARCHAR2 DEFAULT NULL -- Added for Bug 13419867
1273 ,p_calling_context IN VARCHAR2 DEFAULT NULL -- Added for Bug 6856934
1274 ,p_one_to_one_mapping_flag IN VARCHAR2 DEFAULT 'N'
1275 ,p_calling_module IN VARCHAR2 DEFAULT NULL
1276 ,p_project_id IN Pa_projects_all.project_id%TYPE
1277 ,p_struct_elem_version_id IN Pa_proj_element_versions.element_version_id%TYPE DEFAULT NULL
1278 ,p_budget_version_id IN Pa_budget_versions.budget_version_id%TYPE DEFAULT NULL
1279 ,p_task_elem_version_id_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1280 ,p_cbs_element_id_tbl IN SYSTEM.pa_num_tbl_type
1281 DEFAULT SYSTEM.PA_NUM_TBL_TYPE() --bug#16200605
1282 ,p_task_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
1283 ,p_task_number_tbl IN SYSTEM.PA_VARCHAR2_100_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_100_TBL_TYPE()
1284 ,p_start_date_tbl IN SYSTEM.pa_date_tbl_type DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1285 ,p_end_date_tbl IN SYSTEM.pa_date_tbl_type DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1286 -- Bug 3793623 New params p_planning_start_date_tbl and p_planning_end_date_tbl added
1287 ,p_planning_start_date_tbl IN SYSTEM.pa_date_tbl_type DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1288 ,p_planning_end_date_tbl IN SYSTEM.pa_date_tbl_type DEFAULT SYSTEM.PA_DATE_TBL_TYPE()
1289 ,p_planned_people_effort_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1290 ,p_latest_eff_pub_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
1291 --One record in the above pl/sql tables correspond to all the records in the below pl/sql tables
1292 ,p_resource_list_member_id_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1293 ,p_project_assignment_id_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1294 /* The following columns are not (to be) passed by TA/WP. They are based by Edit Plan page BF case */
1295 ,p_quantity_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1296 ,p_currency_code_tbl IN SYSTEM.PA_VARCHAR2_15_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
1297 ,p_raw_cost_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1298 ,p_burdened_cost_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1299 ,p_revenue_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1300 ,p_cost_rate_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1301 ,p_bill_rate_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1302 ,p_burdened_rate_tbl IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
1303 ,p_skip_duplicates_flag IN VARCHAR2 DEFAULT 'N'
1304 ,p_unplanned_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
1305 ,p_expenditure_type_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE() --added for Enc
1306 ,p_pm_product_code IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
1307 ,p_pm_res_asgmt_ref IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
1308 ,p_attribute_category_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
1309 ,p_attribute1 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1310 ,p_attribute2 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1311 ,p_attribute3 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1312 ,p_attribute4 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1313 ,p_attribute5 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1314 ,p_attribute6 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1315 ,p_attribute7 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1316 ,p_attribute8 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1317 ,p_attribute9 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1318 ,p_attribute10 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1319 ,p_attribute11 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1320 ,p_attribute12 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1321 ,p_attribute13 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1322 ,p_attribute14 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1323 ,p_attribute15 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1324 ,p_attribute16 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1325 ,p_attribute17 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1326 ,p_attribute18 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1327 ,p_attribute19 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1328 ,p_attribute20 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1329 ,p_attribute21 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1330 ,p_attribute22 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1331 ,p_attribute23 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1332 ,p_attribute24 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1333 ,p_attribute25 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1334 ,p_attribute26 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1335 ,p_attribute27 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1336 ,p_attribute28 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1337 ,p_attribute29 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1338 ,p_attribute30 IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_150_TBL_TYPE()
1339 ,p_apply_progress_flag IN VARCHAR2 DEFAULT 'N' /* Bug# 3720357 */
1340 ,p_scheduled_delay IN SYSTEM.pa_num_tbl_type DEFAULT SYSTEM.PA_NUM_TBL_TYPE() --For bug 3948128
1341 ,p_pji_rollup_required IN VARCHAR2 DEFAULT 'Y' /* Bug# 4200168 */
1342 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1343 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
1344 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1345 ) IS
1346
1347 l_trace_stage number;
1348
1349 --Start of variables used for debugging
1350 l_msg_count NUMBER :=0;
1351 l_data VARCHAR2(2000);
1352 l_msg_data VARCHAR2(2000);
1353 l_error_msg_code VARCHAR2(30);
1354 l_msg_index_out NUMBER;
1355 l_return_status VARCHAR2(2000);
1356 l_debug_mode VARCHAR2(30);
1357 --End of variables used for debugging
1358
1359 l_budget_version_id pa_budget_versions.budget_version_id%TYPE;
1360 l_proj_fp_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
1361 l_fin_plan_type_id pa_fin_plan_types_b.fin_plan_type_id%TYPE;
1362 l_rlm_id_tbl_count NUMBER := 0;
1363 l_elem_version_id_count NUMBER := 0;
1364 l_resource_list_id pa_proj_fp_options.all_resource_list_id%TYPE;
1365 l_people_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
1366 l_equip_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE; -- Bug 3749516 dummy Variable
1367 l_fin_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
1368 l_mat_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
1369 l_eligible_rlm_ids_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1370 l_proj_element_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1371 l_proj_element_id pa_proj_element_versions.proj_element_id%TYPE;
1372 l_fixed_date_sp_id pa_spread_curves_b.spread_curve_id%TYPE; -- bug 3607061
1373
1374 -- Added for Bug 3719918 -- USED FOR INSERT WHEN p-one-t-one-mapping-flag is Y
1375 l_task_elem_rlm_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1376 l_proj_elem_rlm_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1377
1378 -- Bug 3719918, these tables will only be used for insert in B/F context
1379 l_bf_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1380 l_bf_compl_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1381 l_bf_proj_elem_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1382 l_bf_quantity_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1383 l_bf_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1384 l_bf_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1385 l_bf_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1386 l_bf_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1387 l_bf_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1388 l_bf_bill_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1389 l_bf_burdened_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1390 l_dup_flag varchar2(1) :='N';
1391 --Bug 4207150. These pl/sql tbls will be used to store the task/rlms that are inserted in B/F Flow
1392 l_bf_ra_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1393 l_bf_task_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1394 l_bf_rlm_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1395 l_bf_ins_quantity_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1396 l_bf_ins_raw_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1397 l_bf_ins_burdened_cost_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1398 l_bf_ins_revenue_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1399 l_bf_ins_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1400 l_bf_ins_cost_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1401 l_bf_ins_bill_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1402 l_bf_ins_burdened_rate_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1403 l_temp NUMBER;
1404 l_job_id_temp NUMBER; --bug#13566990
1405 dml_errors EXCEPTION;
1406 PRAGMA exception_init(dml_errors, -24381);
1407
1408 --Start of variables for Variable for Resource Attributes
1409 l_resource_class_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1410 l_resource_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1411 l_resource_class_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1412 l_res_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1413 l_person_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1414 l_job_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1415 l_person_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1416 l_named_role_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
1417 l_bom_resource_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1418 l_non_labor_resource_tbl SYSTEM.PA_VARCHAR2_20_TBL_TYPE := SYSTEM.PA_VARCHAR2_20_TBL_TYPE();
1419 l_inventory_item_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1420 l_item_category_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1421 l_project_role_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1422 l_organization_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1423 l_fc_res_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1424 l_direct_expenditure_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(); --EnC
1425 l_expenditure_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1426 l_event_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1427 l_revenue_category_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1428 l_supplier_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1429 l_unit_of_measure_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1430 l_spread_curve_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1431 l_etc_method_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1432 l_mfc_cost_type_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1433 l_procure_resource_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1434 l_incurred_by_res_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1435 l_Incur_by_res_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1436 l_Incur_by_role_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1437 l_org_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1438 l_rate_based_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1439 l_rate_expenditure_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1440 l_rate_func_curr_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1441 l_incur_by_res_type SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1442 l_resource_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1443 l_assignment_description_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1444 l_planning_resource_alias_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
1445 l_resource_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1446 l_project_role_name_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1447 l_organization_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1448 l_financial_category_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1449 l_project_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1450 l_use_task_schedule_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1451 l_planning_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1452 l_planning_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1453 l_schedule_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1454 l_schedule_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1455 l_total_quantity_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1456 l_override_currency_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1457 l_billable_percent_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1458 l_cost_rate_override_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1459 l_burdened_rate_override_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1460 l_unplanned_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1461 l_sp_fixed_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1462 l_financial_category_name_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
1463 l_supplier_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
1464 l_pm_product_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1465 l_pm_res_asgmt_ref_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1466 l_ATTRIBUTE_CATEGORY_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1467 l_ATTRIBUTE1_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1468 l_ATTRIBUTE2_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1469 l_ATTRIBUTE3_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1470 l_ATTRIBUTE4_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1471 l_ATTRIBUTE5_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1472 l_ATTRIBUTE6_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1473 l_ATTRIBUTE7_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1474 l_ATTRIBUTE8_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1475 l_ATTRIBUTE9_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1476 l_ATTRIBUTE10_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1477 l_ATTRIBUTE11_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1478 l_ATTRIBUTE12_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1479 l_ATTRIBUTE13_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1480 l_ATTRIBUTE14_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1481 l_ATTRIBUTE15_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1482 l_ATTRIBUTE16_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1483 l_ATTRIBUTE17_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1484 l_ATTRIBUTE18_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1485 l_ATTRIBUTE19_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1486 l_ATTRIBUTE20_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1487 l_ATTRIBUTE21_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1488 l_ATTRIBUTE22_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1489 l_ATTRIBUTE23_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1490 l_ATTRIBUTE24_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1491 l_ATTRIBUTE25_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1492 l_ATTRIBUTE26_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1493 l_ATTRIBUTE27_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1494 l_ATTRIBUTE28_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1495 l_ATTRIBUTE29_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1496 l_ATTRIBUTE30_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
1497 --For bug 3948128
1498 l_scheduled_delay SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1499 --End of variables for Variable for Resource Attributes
1500
1501 --Start of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
1502 l_task_rec_tbl pa_task_assignment_utils.l_task_rec_tbl_type;
1503 l_resource_rec_tbl pa_task_assignment_utils.l_resource_rec_tbl_type;
1504 l_del_task_level_rec_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1505 l_ra_id_del_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1506 l_ra_id_del_count NUMBER;
1507 --End of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
1508
1509 l_time_phased_code pa_proj_fp_options.all_time_phased_code%TYPE;
1510 l_spread_amounts_for_ver VARCHAR2(1);
1511 l_index NUMBER := 1;
1512 l_spread_amount_flags_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1513 l_delete_budget_lines_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
1514 l_res_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1515 -- IPM Tables
1516 l_orig_count NUMBER; -- bug 5003827 issue 22
1517 -- l_count_index NUMBER;
1518 l_ra_id_temp_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1519 l_curr_code_temp_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE:= SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1520 --
1521 l_res_assignment_id_temp_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1522 l_res_assignment_id pa_resource_assignments.resource_assignment_id%TYPE;
1523 l_call_calc_api VARCHAR2(1);
1524
1525 -- Start of variable to be used in Calculate API Call
1526 l_line_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1527 l_line_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1528
1529 l_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE:= SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1530 l_quantity_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1531 l_raw_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1532 l_burdened_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1533 l_revenue_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1534 l_cost_rate_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1535 l_burden_multiplier_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1536 l_bill_rate_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1537 l_expenditure_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE:= SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
1538 l_txn_src_typ_code_rbs_prm_tbl SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
1539 l_txn_source_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1540 l_res_list_member_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1541 l_rbs_element_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1542 l_txn_accum_header_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
1543
1544 -- End of variable to be used in Calculate API Call
1545
1546 -- Bug 3749516 Added for insert in Workplan Context
1547 l_ins_proj_element_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1548 l_ins_task_elem_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1549 l_ins_cbs_element_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(); -- satya
1550 l_ins_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1551 l_ins_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1552 l_ins_cal_people_effort_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1553 l_ins_cal_burdened_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1554 l_ins_cal_raw_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1555 l_ins_index NUMBER := 1;
1556
1557 l_start_date pa_resource_assignments.planning_start_date%TYPE := NULL;
1558 l_compl_date pa_resource_assignments.planning_start_date%TYPE := NULL;
1559 l_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1560 l_compl_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
1561
1562 l_rlm_id_no_of_rows NUMBER;
1563 l_elem_ver_id_no_of_rows NUMBER;
1564 l_ppl_index NUMBER;
1565 l_amount_exists VARCHAR2(1);
1566 l_rbs_version_id pa_proj_fp_options.rbs_version_id%TYPE;
1567
1568 l_proj_curr_code pa_projects_all.project_currency_code%TYPE;
1569 l_proj_func_curr_code pa_projects_all.projfunc_currency_code%TYPE;
1570
1571 -- Bug 3836358 -- ADDED for usage when p_skip_duplicates_flag is passed as Y
1572 l_task_id_temp PA_RESOURCE_ASSIGNMENTS.TASK_ID%TYPE;
1573 l_pji_rollup_required VARCHAR2(1);
1574
1575 l_fp_cols_rec pa_fp_gen_amount_utils.fp_cols; -- IPM
1576 l_rm_temp_count number;
1577
1578 -- Bug 8370812
1579 l_ra_id_rollup_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
1580 l_curr_code_rollup_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
1581 l_rollup_index NUMBER;
1582 l_add_flag BOOLEAN;
1583 --CBS related Chnages
1584 l_res_class_flag pa_resource_lists_all_bg.resource_class_flag%TYPE := 'Y';
1585
1586 CURSOR get_pc_code IS
1587 SELECT project_currency_code, projfunc_currency_code
1588 FROM pa_projects_all
1589 WHERE project_id = p_project_id;
1590
1591 --------------------------------------------------------------------------
1592 -- This cursor is to be used to retrieve the proj_element_id based on the
1593 -- element_version_id.
1594 -- This might be removed.
1595 --------------------------------------------------------------------------
1596 CURSOR c_proj_element_id(c_elem_version_id pa_proj_element_versions.element_version_id%TYPE) IS
1597 SELECT proj_element_id
1598 FROM pa_proj_element_versions
1599 WHERE element_version_id = c_elem_version_id;
1600
1601 -- gboomina added for bug 8586393 - start
1602 --Mcloseout
1603 -- rbruno bug 9468665 modified FROM clause so that correct workplan information is taken.
1604 CURSOR c2(p_project_id IN NUMBER) IS
1605 SELECT use_task_schedule_flag
1606 FROM pa_workplan_options_v
1607 WHERE project_id = p_project_id;
1608
1609 l_use_task_schedule_flag VARCHAR2(1);
1610 -- gboomina added for bug 8586393 - end
1611
1612 -- bug#16200605
1613 CURSOR check_cost_code_enabled(c_project_id NUMBER) IS
1614 select 'Y' from dual where
1615 EXISTS
1616 (SELECT *
1617 FROM pa_projects_all
1618 WHERE project_id = c_project_id
1619 AND CBS_VERSION_ID IS NOT NULL
1620 AND CBS_ENABLE_FLAG = 'Y');
1621
1622 -- bug#16200605
1623 CURSOR check_cbs_alt_tsk_gen(c_proj_elem_id NUMBER, c_cbs_element_id NUMBER) IS
1624 select 'Y' from dual where
1625 EXISTS
1626 (select * from PA_ALTERNATE_TASKS
1627 where proj_element_id =c_proj_elem_id
1628 and cbs_element_id = c_cbs_element_id);
1629
1630 l_prj_cbs_enabled VARCHAR2(1) := 'N'; --bug#16200605
1631 L_CBS_FLAG_TEMP VARCHAR2(1) := 'N'; --bug#16200605
1632 L_ALT_TSK_TEMP VARCHAR2(1) := 'N'; --bug#16200605
1633 l_alt_tsk_valid VARCHAR2(1) := 'N'; --bug#16200605
1634 l_cbs_id_rlm_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();--bug#16200605
1635
1636
1637 BEGIN
1638 l_trace_stage := 10;
1639 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
1640
1641 SAVEPOINT ADD_PLANNING_TRANS_SP;
1642 l_direct_expenditure_type_tbl :=p_expenditure_type_tbl;
1643 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
1644 l_debug_mode := NVL(l_debug_mode, 'Y');
1645
1646 IF p_pji_rollup_required = 'Y' THEN
1647 l_pji_rollup_required := 'Y';
1648 ELSE
1649 l_pji_rollup_required := 'N';
1650 END IF;
1651
1652 pa_task_assignment_utils.g_require_progress_rollup := 'N';
1653
1654
1655
1656 x_msg_count := 0;
1657 x_return_status := FND_API.G_RET_STS_SUCCESS;
1658 IF l_debug_mode = 'Y' THEN
1659 PA_DEBUG.Set_Curr_Function( p_function => 'PA_FP_PLAN_TXN_PUB.add_planning_transactions',
1660 p_debug_mode => l_debug_mode );
1661 END IF;
1662
1663 --p_context should never be null
1664 IF p_context IS NULL OR
1665 p_context NOT IN ( PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST
1666 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
1667 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
1668 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET ) THEN
1669
1670 IF l_debug_mode = 'Y' THEN
1671 pa_debug.g_err_stage:='p_context passed is '||p_context;
1672 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1673 END IF;
1674 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1675 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1676 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1677
1678 END IF;
1679
1680 -- Added for Bug 3719918 -- ONE-TO-ONE MAPPING BETWEEN ELEM_VER-RLM IDS PASSED
1681 -- Validation for p_one_to_one_mapping_flag passed as Y only for Budget/Forecast context
1682 -- Modified Validation Below for Only WORKPLAN Context - Changes for Bug 3665097
1683 IF (p_one_to_one_mapping_flag = 'Y'
1684 AND p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN
1685 IF l_debug_mode = 'Y' THEN
1686 pa_debug.g_err_stage:='p_one_to_one_mapping_flag passed as Y for WORKPLAN context :'||p_context;
1687 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1688 END IF;
1689 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1690 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1691 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1692 END IF;
1693
1694
1695 -- Added for Bug 3719918 and Bug 3665097
1696 -- Validation that when p_one_to_one_mapping_flag is passed as Y p_task_elem_version_id_tbl
1697 -- and p_resource_list_member_id_tbl should have same table count.
1698 IF (p_one_to_one_mapping_flag = 'Y' AND
1699 p_task_elem_version_id_tbl.COUNT <> p_resource_list_member_id_tbl.COUNT) THEN
1700
1701 IF l_debug_mode = 'Y' THEN
1702 pa_debug.g_err_stage:='Table Count Mismatch for p_one_to_one_mapping_flag Y in : '||p_context;
1703 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1704 END IF;
1705 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1706 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
1707 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1708
1709 END IF;
1710
1711
1712 -- Bug 3793623 Planning Start Date and Planning End Date can only be passed when
1713 -- p_one_to_one_mapping_flag IS Y
1714 IF (p_one_to_one_mapping_flag = 'N' AND
1715 (p_planning_start_date_tbl.COUNT <> 0 OR p_planning_end_date_tbl.COUNT <> 0)) THEN
1716
1717 IF l_debug_mode = 'Y' THEN
1718 pa_debug.g_err_stage:='Planning Date Passed when one to one mapping is N';
1719 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1720 END IF;
1721 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1722 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1723 p_token1 => 'PROCEDURENAME',
1724 p_value1 => 'PAFPPTPB.add_planning_transactions',
1725 p_token2 => 'STAGE',
1726 p_value2 => 'Planning Date Passed when one to one mapping is N');
1727 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1728
1729 END IF;
1730
1731 -- Bug 3793623 Planning Start Date and Planning End Date Should have the same
1732 -- number of records
1733 IF (p_planning_start_date_tbl.COUNT <> p_planning_end_date_tbl.COUNT) THEN
1734 IF l_debug_mode = 'Y' THEN
1735 pa_debug.g_err_stage:='Planning Start Date - End Date MISMATCH p_context :'||p_context;
1736 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1737 END IF;
1738 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1739 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1740 p_token1 => 'PROCEDURENAME',
1741 p_value1 => 'PAFPPTPB.add_planning_transactions',
1742 p_token2 => 'STAGE',
1743 p_value2 => 'Planning Start Date - End Date MISMATCH');
1744 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1745 END IF;
1746
1747 -- Bug 3793623 If Planning Start/End Date is passed its should be same as
1748 -- task_elem_version_id COUNT
1749 IF (p_planning_start_date_tbl.COUNT >0) THEN
1750 IF (p_planning_start_date_tbl.COUNT <> p_task_elem_version_id_tbl.COUNT) THEN
1751 IF l_debug_mode = 'Y' THEN
1752 pa_debug.g_err_stage:='Planning Start Date - Task Elem Mismatch :'||p_context;
1753 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1754 END IF;
1755 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1756 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1757 p_token1 => 'PROCEDURENAME',
1758 p_value1 => 'PAFPPTPB.add_planning_transactions',
1759 p_token2 => 'STAGE',
1760 p_value2 => 'Planning Start Date - Task Elem Mismatch');
1761 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1762 END IF;
1763 END IF;
1764
1765 /* bug#16200605 CBS enhancement
1766 * checking whether the project is cbs enabled
1767 */
1768 -- start of cbs enabled validation
1769 OPEN check_cost_code_enabled(p_project_id);
1770 FETCH check_cost_code_enabled INTO L_CBS_FLAG_TEMP;
1771 CLOSE check_cost_code_enabled;
1772 IF L_CBS_FLAG_TEMP = 'Y' THEN
1773 l_prj_cbs_enabled := 'Y'; -- CBS enabled
1774 ELSE
1775 l_prj_cbs_enabled := 'N'; -- CBS disabled
1776 END IF;
1777
1778 -- bug#16840460
1779 IF l_prj_cbs_enabled = 'Y' and p_cbs_element_id_tbl.count<1 THEN
1780 RETURN;
1781 END IF;
1782
1783
1784 -- Added for Bug 3719918 -- when p one to one mapping flag is N
1785 -- duplicate rlm/elem_ver ids cannot be passed
1786 IF p_one_to_one_mapping_flag = 'N' THEN
1787 IF p_skip_duplicates_flag = 'N' THEN
1788 IF l_debug_mode = 'Y' THEN
1789 pa_debug.g_err_stage:='Checking for duplicate rlm ids passed';
1790 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1791 END IF;
1792 IF p_resource_list_member_id_tbl.COUNT > 0 THEN
1793 FOR i IN p_resource_list_member_id_tbl.FIRST .. (p_resource_list_member_id_tbl.LAST-1) LOOP
1794 FOR j in (i+1) .. p_resource_list_member_id_tbl.LAST LOOP
1795 IF p_resource_list_member_id_tbl(j) = p_resource_list_member_id_tbl(i) THEN
1796 IF (l_prj_cbs_enabled = 'N' OR p_cbs_element_id_tbl.count <1) THEN
1797 IF l_debug_mode = 'Y' THEN
1798 pa_debug.g_err_stage:='Dup RLM ID Passed';
1799 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1800 END IF;
1801 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1802 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1803 p_token1 => 'PROCEDURENAME',
1804 p_value1 => 'PAFPPTPB.add_planning_transactions',
1805 p_token2 => 'STAGE',
1806 p_value2 => 'Duplicate RLM Id Passed');
1807 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1808 ELSE
1809 IF p_cbs_element_id_tbl(j) = p_cbs_element_id_tbl(i) THEN
1810 IF l_debug_mode = 'Y' THEN
1811 pa_debug.g_err_stage:='Dup RLM ID Passed';
1812 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1813 END IF;
1814 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1815 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1816 p_token1 => 'PROCEDURENAME',
1817 p_value1 => 'PAFPPTPB.add_planning_transactions',
1818 p_token2 => 'STAGE',
1819 p_value2 => 'Duplicate Cost Code Passed');
1820 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1821 END IF;
1822 END IF;
1823 END IF;
1824 END LOOP;
1825 END LOOP;
1826 END IF;
1827 IF l_debug_mode = 'Y' THEN
1828 pa_debug.g_err_stage:='Checking for duplicate elem ver ids passed';
1829 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1830 END IF;
1831 IF p_task_elem_version_id_tbl.COUNT > 0 THEN
1832 FOR i IN p_task_elem_version_id_tbl.FIRST .. (p_task_elem_version_id_tbl.LAST-1) LOOP
1833 FOR j in (i+1) .. p_task_elem_version_id_tbl.LAST LOOP
1834 IF p_task_elem_version_id_tbl(j) = p_task_elem_version_id_tbl(i) THEN
1835 IF l_debug_mode = 'Y' THEN
1836 pa_debug.g_err_stage:='Dup ELEM VER ID Passed';
1837 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1838 END IF;
1839 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1840 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1841 p_token1 => 'PROCEDURENAME',
1842 p_value1 => 'PAFPPTPB.add_planning_transactions',
1843 p_token2 => 'STAGE',
1844 p_value2 => 'Duplicate Task Elem Version Id Passed');
1845 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1846 END IF;
1847 END LOOP;
1848 END LOOP;
1849 END IF;
1850 END IF; -- p_skip_duplicate_flag = N
1851 ELSE
1852 -- when p one to one mapping flag is Y
1853 -- FOR B/F Context dup rlm/task elem combination cannot be passed until
1854 -- and unless the currecy code is diff
1855 -- for TA WOKRPLAN dup rlm/task elem combination cannot be passed
1856 IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR
1857 (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
1858 IF p_task_elem_version_id_tbl.COUNT > 1 THEN
1859 FOR i IN p_task_elem_version_id_tbl.FIRST .. (p_task_elem_version_id_tbl.LAST-1) LOOP
1860 FOR j in (i+1) .. p_task_elem_version_id_tbl.LAST LOOP
1861 IF ( (p_task_elem_version_id_tbl(i) = p_task_elem_version_id_tbl(j)) AND
1862 (p_resource_list_member_id_tbl(i) = p_resource_list_member_id_tbl(j))) THEN --AND changed for CBS
1863 --(p_currency_code_tbl(i) = p_currency_code_tbl(j))) THEN
1864 IF p_currency_code_tbl.COUNT > 0 THEN
1865 IF p_currency_code_tbl(i) = p_currency_code_tbl(j) THEN
1866 IF (l_prj_cbs_enabled = 'N' OR p_cbs_element_id_tbl.count <1) THEN
1867 IF l_debug_mode = 'Y' THEN
1868 pa_debug.g_err_stage:='Dup Rec passed - Curr Code (B/F) - will error out in Ins Stat';
1869 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1870 END IF;
1871 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1872 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1873 p_token1 => 'PROCEDURENAME',
1874 p_value1 => 'PAFPPTPB.add_planning_transactions',
1875 p_token2 => 'STAGE',
1876 p_value2 => 'Duplicate CurrCode/RlmId/TaskId Passed');
1877 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1878 ELSE
1879 IF p_cbs_element_id_tbl(j) = p_cbs_element_id_tbl(i) THEN
1880 IF l_debug_mode = 'Y' THEN
1881 pa_debug.g_err_stage:='Dup Rec passed - Curr Code (B/F) - will error out in Ins Stat';
1882 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1883 END IF;
1884 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1885 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1886 p_token1 => 'PROCEDURENAME',
1887 p_value1 => 'PAFPPTPB.add_planning_transactions',
1888 p_token2 => 'STAGE',
1889 p_value2 => 'Duplicate CurrCode/RlmId/TaskId/CostCode Passed');
1890 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1891 END IF;
1892 END IF;
1893 END IF;
1894 ELSE
1895 IF (l_prj_cbs_enabled = 'N' OR p_cbs_element_id_tbl.count <1) THEN
1896 IF l_debug_mode = 'Y' THEN
1897 pa_debug.g_err_stage:='Dup Rec passed - Curr Code (B/F) - will error out in Ins Stat';
1898 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1899 END IF;
1900 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1901 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1902 p_token1 => 'PROCEDURENAME',
1903 p_value1 => 'PAFPPTPB.add_planning_transactions',
1904 p_token2 => 'STAGE',
1905 p_value2 => 'Duplicate CurrCode/RlmId/TaskId Passed');
1906 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1907 ELSE
1908 IF p_cbs_element_id_tbl(j) = p_cbs_element_id_tbl(i) THEN
1909 IF l_debug_mode = 'Y' THEN
1910 pa_debug.g_err_stage:='Dup Rec passed - Curr Code (B/F) - will error out in Ins Stat';
1911 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1912 END IF;
1913 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1914 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1915 p_token1 => 'PROCEDURENAME',
1916 p_value1 => 'PAFPPTPB.add_planning_transactions',
1917 p_token2 => 'STAGE',
1918 p_value2 => 'Duplicate CurrCode/RlmId/TaskId/CostCode Passed');
1919 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1920 END IF;
1921 END IF;
1922 END IF;
1923
1924
1925 END IF;
1926 END LOOP;
1927 END LOOP;
1928 END IF;
1929 ELSE -- for TA/WOKRPLAN check for currency code is not there planning elements cannot be added using
1930 -- different currencies for Ta/Workplan FLow
1931 IF p_task_elem_version_id_tbl.COUNT > 1 THEN
1932 FOR i IN p_task_elem_version_id_tbl.FIRST .. (p_task_elem_version_id_tbl.LAST-1) LOOP
1933 FOR j in (i+1) .. p_task_elem_version_id_tbl.LAST LOOP
1934 IF ( (p_task_elem_version_id_tbl(i) = p_task_elem_version_id_tbl(j)) AND
1935 (p_resource_list_member_id_tbl(i) = p_resource_list_member_id_tbl(j))) THEN
1936 IF (l_prj_cbs_enabled = 'N' OR p_cbs_element_id_tbl.count <1) THEN
1937 IF l_debug_mode = 'Y' THEN
1938 pa_debug.g_err_stage:='Dup Rec passed - will error out in Ins Stat p_context :'||p_context;
1939 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1940 END IF;
1941 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1942 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1943 p_token1 => 'PROCEDURENAME',
1944 p_value1 => 'PAFPPTPB.add_planning_transactions',
1945 p_token2 => 'STAGE',
1946 p_value2 => 'Duplicate RlmId/TaskId Passed');
1947 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1948 ELSE
1949 IF p_cbs_element_id_tbl(j) = p_cbs_element_id_tbl(i) THEN
1950 IF l_debug_mode = 'Y' THEN
1951 pa_debug.g_err_stage:='Dup Rec passed - will error out in Ins Stat p_context :'||p_context;
1952 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1953 END IF;
1954 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1955 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
1956 p_token1 => 'PROCEDURENAME',
1957 p_value1 => 'PAFPPTPB.add_planning_transactions',
1958 p_token2 => 'STAGE',
1959 p_value2 => 'Duplicate RlmId/TaskId/CostCode Passed');
1960 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
1961 END IF;
1962 END IF;
1963 END IF;
1964 END LOOP;
1965 END LOOP;
1966 END IF;
1967 END IF;
1968 END IF;
1969
1970
1971 IF l_debug_mode = 'Y' THEN
1972 IF p_task_elem_version_id_tbl.COUNT > 0 THEN
1973 FOR i in p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
1974 pa_debug.g_err_stage:='p_task_elem_version_id_tbl :'||p_task_elem_version_id_tbl(i);
1975 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1976 END LOOP;
1977 END IF;
1978
1979 IF p_resource_list_member_id_tbl.COUNT > 0 THEN
1980 FOR i in p_resource_list_member_id_tbl.FIRST .. p_resource_list_member_id_tbl.LAST LOOP
1981 pa_debug.g_err_stage:='p_resource_list_member_id_tbl :'||p_resource_list_member_id_tbl(i);
1982 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1983 END LOOP;
1984 END IF;
1985
1986 IF p_currency_code_tbl.COUNT > 0 THEN
1987 FOR i in p_currency_code_tbl.FIRST .. p_currency_code_tbl.LAST LOOP
1988 pa_debug.g_err_stage:='p_currency_code_tbl :'||p_currency_code_tbl(i);
1989 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
1990 END LOOP;
1991 END IF;
1992 END IF;
1993
1994 -------------------------------------------------------------------------------------------
1995 -- Extending all table lengths to the permissible values they would take.
1996 -------------------------------------------------------------------------------------------
1997
1998 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
1999 -- Bug 3749516 only for PEOPLE
2000 l_rlm_id_no_of_rows := 1;
2001 ELSE
2002 l_rlm_id_no_of_rows := p_resource_list_member_id_tbl.LAST;
2003 END IF;
2004 l_elem_ver_id_no_of_rows := p_task_elem_version_id_tbl.LAST;
2005
2006 l_trace_stage := 20;
2007 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2008
2009 IF l_debug_mode = 'Y' THEN
2010 pa_debug.g_err_stage:='Extending all table lengths to the permissible values they would take - p_context = '||p_context;
2011 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2012 END IF;
2013
2014 l_task_elem_rlm_tbl.extend(l_rlm_id_no_of_rows);
2015 l_proj_elem_rlm_tbl.extend(l_rlm_id_no_of_rows);
2016
2017 l_cbs_id_rlm_tbl.extend(l_rlm_id_no_of_rows); --Bug#16200605
2018
2019 -- Bug 3719918 -- For Insert in BF Context.
2020 l_bf_start_date_tbl.extend(l_rlm_id_no_of_rows);
2021 l_bf_compl_date_tbl.extend(l_rlm_id_no_of_rows);
2022 l_bf_proj_elem_tbl.extend(l_rlm_id_no_of_rows);
2023 l_bf_quantity_tbl.extend((l_rlm_id_no_of_rows));
2024 l_bf_raw_cost_tbl.extend((l_rlm_id_no_of_rows));
2025 l_bf_burdened_cost_tbl.extend((l_rlm_id_no_of_rows));
2026 l_bf_revenue_tbl.extend((l_rlm_id_no_of_rows));
2027 l_bf_currency_code_tbl.extend((l_rlm_id_no_of_rows));
2028 l_bf_cost_rate_tbl.extend((l_rlm_id_no_of_rows));
2029 l_bf_bill_rate_tbl.extend((l_rlm_id_no_of_rows));
2030 l_bf_burdened_rate_tbl.extend((l_rlm_id_no_of_rows));
2031
2032 -- End for Bug 3719918
2033
2034 l_resource_class_flag_tbl.extend(l_rlm_id_no_of_rows);
2035 l_resource_class_code_tbl.extend(l_rlm_id_no_of_rows);
2036 l_resource_class_id_tbl.extend(l_rlm_id_no_of_rows);
2037 l_res_type_code_tbl.extend(l_rlm_id_no_of_rows);
2038 l_person_id_tbl.extend(l_rlm_id_no_of_rows);
2039 l_job_id_tbl.extend(l_rlm_id_no_of_rows);
2040 l_person_type_code_tbl.extend(l_rlm_id_no_of_rows);
2041 l_named_role_tbl.extend(l_rlm_id_no_of_rows);
2042 l_bom_resource_id_tbl.extend(l_rlm_id_no_of_rows);
2043 l_non_labor_resource_tbl.extend(l_rlm_id_no_of_rows);
2044 l_inventory_item_id_tbl.extend(l_rlm_id_no_of_rows);
2045 l_item_category_id_tbl.extend(l_rlm_id_no_of_rows);
2046 l_project_role_id_tbl.extend(l_rlm_id_no_of_rows);
2047 l_organization_id_tbl.extend(l_rlm_id_no_of_rows);
2048 l_fc_res_type_code_tbl.extend(l_rlm_id_no_of_rows);
2049 l_expenditure_type_tbl.extend(l_rlm_id_no_of_rows);
2050 l_expenditure_category_tbl.extend(l_rlm_id_no_of_rows);
2051 l_event_type_tbl.extend(l_rlm_id_no_of_rows);
2052 l_revenue_category_code_tbl.extend(l_rlm_id_no_of_rows);
2053 l_supplier_id_tbl.extend(l_rlm_id_no_of_rows);
2054 l_unit_of_measure_tbl.extend(l_rlm_id_no_of_rows);
2055 l_spread_curve_id_tbl.extend(l_rlm_id_no_of_rows);
2056 l_etc_method_code_tbl.extend(l_rlm_id_no_of_rows);
2057 l_mfc_cost_type_id_tbl.extend(l_rlm_id_no_of_rows);
2058 l_procure_resource_flag_tbl.extend(l_rlm_id_no_of_rows);
2059 l_incurred_by_res_flag_tbl.extend(l_rlm_id_no_of_rows);
2060 l_Incur_by_res_class_code_tbl.extend(l_rlm_id_no_of_rows);
2061 l_Incur_by_role_id_tbl.extend(l_rlm_id_no_of_rows);
2062 l_eligible_rlm_ids_tbl.extend(l_rlm_id_no_of_rows);
2063 l_txn_src_typ_code_rbs_prm_tbl.extend(l_rlm_id_no_of_rows);
2064 l_org_id_tbl.extend(l_rlm_id_no_of_rows);
2065 l_rate_based_flag_tbl.extend(l_rlm_id_no_of_rows);
2066 l_rate_expenditure_type_tbl.extend(l_rlm_id_no_of_rows);
2067 l_rate_func_curr_code_tbl.extend(l_rlm_id_no_of_rows);
2068 l_resource_assignment_id_tbl.extend(l_rlm_id_no_of_rows);
2069 l_assignment_description_tbl.extend(l_rlm_id_no_of_rows);
2070 l_planning_resource_alias_tbl.extend(l_rlm_id_no_of_rows);
2071 l_resource_name_tbl.extend(l_rlm_id_no_of_rows);
2072 l_project_role_name_tbl.extend(l_rlm_id_no_of_rows);
2073 l_organization_name_tbl.extend(l_rlm_id_no_of_rows);
2074 l_financial_category_code_tbl.extend(l_rlm_id_no_of_rows);
2075 l_project_assignment_id_tbl.extend(l_rlm_id_no_of_rows);
2076 l_use_task_schedule_flag_tbl.extend(l_rlm_id_no_of_rows);
2077 l_planning_start_date_tbl.extend(l_rlm_id_no_of_rows);
2078 l_planning_end_date_tbl.extend(l_rlm_id_no_of_rows);
2079 l_schedule_start_date_tbl.extend(l_rlm_id_no_of_rows);
2080 l_schedule_end_date_tbl.extend(l_rlm_id_no_of_rows);
2081 l_total_quantity_tbl.extend(l_rlm_id_no_of_rows);
2082 l_override_currency_code_tbl.extend(l_rlm_id_no_of_rows);
2083 l_billable_percent_tbl.extend(l_rlm_id_no_of_rows);
2084 l_cost_rate_override_tbl.extend(l_rlm_id_no_of_rows);
2085 l_burdened_rate_override_tbl.extend(l_rlm_id_no_of_rows);
2086 IF p_unplanned_flag_tbl.count = 0 THEN
2087 l_unplanned_flag_tbl.extend(l_rlm_id_no_of_rows);
2088 ELSE
2089 l_unplanned_flag_tbl := p_unplanned_flag_tbl;
2090 END IF;
2091 l_sp_fixed_date_tbl.extend(l_rlm_id_no_of_rows);
2092 l_financial_category_name_tbl.extend(l_rlm_id_no_of_rows);
2093 l_supplier_name_tbl.extend(l_rlm_id_no_of_rows);
2094 l_pm_product_code_tbl.extend(l_rlm_id_no_of_rows);
2095 l_pm_res_asgmt_ref_tbl.extend(l_rlm_id_no_of_rows);
2096 l_ATTRIBUTE_CATEGORY_tbl.extend(l_rlm_id_no_of_rows);
2097 l_ATTRIBUTE1_tbl.extend(l_rlm_id_no_of_rows);
2098 l_ATTRIBUTE2_tbl.extend(l_rlm_id_no_of_rows);
2099 l_ATTRIBUTE3_tbl.extend(l_rlm_id_no_of_rows);
2100 l_ATTRIBUTE4_tbl.extend(l_rlm_id_no_of_rows);
2101 l_ATTRIBUTE5_tbl.extend(l_rlm_id_no_of_rows);
2102 l_ATTRIBUTE6_tbl.extend(l_rlm_id_no_of_rows);
2103 l_ATTRIBUTE7_tbl.extend(l_rlm_id_no_of_rows);
2104 l_ATTRIBUTE8_tbl.extend(l_rlm_id_no_of_rows);
2105 l_ATTRIBUTE9_tbl.extend(l_rlm_id_no_of_rows);
2106 l_ATTRIBUTE10_tbl.extend(l_rlm_id_no_of_rows);
2107 l_ATTRIBUTE11_tbl.extend(l_rlm_id_no_of_rows);
2108 l_ATTRIBUTE12_tbl.extend(l_rlm_id_no_of_rows);
2109 l_ATTRIBUTE13_tbl.extend(l_rlm_id_no_of_rows);
2110 l_ATTRIBUTE14_tbl.extend(l_rlm_id_no_of_rows);
2111 l_ATTRIBUTE15_tbl.extend(l_rlm_id_no_of_rows);
2112 l_ATTRIBUTE16_tbl.extend(l_rlm_id_no_of_rows);
2113 l_ATTRIBUTE17_tbl.extend(l_rlm_id_no_of_rows);
2114 l_ATTRIBUTE18_tbl.extend(l_rlm_id_no_of_rows);
2115 l_ATTRIBUTE19_tbl.extend(l_rlm_id_no_of_rows);
2116 l_ATTRIBUTE20_tbl.extend(l_rlm_id_no_of_rows);
2117 l_ATTRIBUTE21_tbl.extend(l_rlm_id_no_of_rows);
2118 l_ATTRIBUTE22_tbl.extend(l_rlm_id_no_of_rows);
2119 l_ATTRIBUTE23_tbl.extend(l_rlm_id_no_of_rows);
2120 l_ATTRIBUTE24_tbl.extend(l_rlm_id_no_of_rows);
2121 l_ATTRIBUTE25_tbl.extend(l_rlm_id_no_of_rows);
2122 l_ATTRIBUTE26_tbl.extend(l_rlm_id_no_of_rows);
2123 l_ATTRIBUTE27_tbl.extend(l_rlm_id_no_of_rows);
2124 l_ATTRIBUTE28_tbl.extend(l_rlm_id_no_of_rows);
2125 l_ATTRIBUTE29_tbl.extend(l_rlm_id_no_of_rows);
2126 l_ATTRIBUTE30_tbl.extend(l_rlm_id_no_of_rows);
2127 --For bug 3948128
2128 l_scheduled_delay.extend(l_rlm_id_no_of_rows);
2129
2130 l_del_task_level_rec_code_tbl.extend(l_elem_ver_id_no_of_rows);
2131 l_proj_element_id_tbl.extend(l_elem_ver_id_no_of_rows);
2132 l_start_date_tbl.extend(l_elem_ver_id_no_of_rows);
2133 l_compl_date_tbl.extend(l_elem_ver_id_no_of_rows);
2134
2135 l_ins_proj_element_id_tbl.extend(l_elem_ver_id_no_of_rows);
2136 l_ins_task_elem_version_id_tbl.extend(l_elem_ver_id_no_of_rows);
2137 l_ins_cbs_element_id_tbl.extend(l_elem_ver_id_no_of_rows); -- satya
2138 l_ins_start_date_tbl.extend(l_elem_ver_id_no_of_rows);
2139 l_ins_end_date_tbl.extend(l_elem_ver_id_no_of_rows);
2140 l_ins_cal_people_effort_tbl.extend(l_elem_ver_id_no_of_rows);
2141 l_ins_cal_burdened_cost_tbl.extend(l_elem_ver_id_no_of_rows);
2142 l_ins_cal_raw_cost_tbl.extend(l_elem_ver_id_no_of_rows);
2143
2144 -- Bug 8829159 - Fix to reduce PGA memory usage and avoid ORA-4030
2145 IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK) AND (p_one_to_one_mapping_flag = 'Y')) THEN
2146 l_ra_id_del_tbl.extend(l_elem_ver_id_no_of_rows);
2147 l_spread_amount_flags_tbl.extend(l_elem_ver_id_no_of_rows);
2148 l_delete_budget_lines_tbl.extend(l_elem_ver_id_no_of_rows);
2149 l_res_assignment_id_tbl.extend(l_elem_ver_id_no_of_rows);
2150 l_res_assignment_id_temp_tbl.extend(l_elem_ver_id_no_of_rows);
2151 l_currency_code_tbl.extend(l_elem_ver_id_no_of_rows);
2152 l_quantity_tbl.extend(l_elem_ver_id_no_of_rows);
2153 l_raw_cost_tbl.extend(l_elem_ver_id_no_of_rows);
2154 l_burdened_cost_tbl.extend(l_elem_ver_id_no_of_rows);
2155 l_revenue_tbl.extend(l_elem_ver_id_no_of_rows);
2156 l_cost_rate_tbl.extend(l_elem_ver_id_no_of_rows);
2157 l_burden_multiplier_tbl.extend(l_elem_ver_id_no_of_rows);
2158 l_bill_rate_tbl.extend(l_elem_ver_id_no_of_rows);
2159 l_use_task_schedule_flag_tbl.extend(l_elem_ver_id_no_of_rows); -- Bug 9759832
2160 ELSE
2161
2162 l_ra_id_del_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2163 l_spread_amount_flags_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2164 l_delete_budget_lines_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2165 l_res_assignment_id_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2166 l_res_assignment_id_temp_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2167 l_currency_code_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2168 l_quantity_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2169 l_raw_cost_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2170 l_burdened_cost_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2171 l_revenue_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2172 l_cost_rate_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2173 l_burden_multiplier_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2174 l_bill_rate_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2175 l_use_task_schedule_flag_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows)); -- Bug 9759832
2176 -- l_expenditure_type_tbl.extend((l_rlm_id_no_of_rows)*(l_elem_ver_id_no_of_rows));
2177 END IF;
2178 l_trace_stage := 30;
2179 --dbms_output.put_line('done with extending');
2180 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2181
2182 -------------------------------------------------------------------------------------------
2183 -- validating input parameters
2184 -- 1. , p_task_elem_version_id_tbl table cannot be empty
2185 -------------------------------------------------------------------------------------------
2186
2187 --If the input tasks table is empty in the context of budget or forecast then return
2188 IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
2189 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
2190 l_elem_version_id_count := p_task_elem_version_id_tbl.COUNT;
2191 l_trace_stage := 140;
2192 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2193
2194 IF l_debug_mode = 'Y' THEN
2195 pa_debug.g_err_stage:='Validating input parameters - count of p_task_elem_version_id_tbl = '||l_elem_version_id_count;
2196 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2197 END IF;
2198
2199 IF l_elem_version_id_count = 0 THEN
2200 l_trace_stage := 150;
2201 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2202 IF l_debug_mode = 'Y' THEN
2203 pa_debug.g_err_stage:='Validating input parameters - elem_version_id table is empty - p_context = '||p_context;
2204 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2205 --dbms_output.put_line('Tasks tbl is empty for BF -- returning');
2206 pa_debug.reset_curr_function;
2207 END IF;
2208 RETURN;
2209 END IF;
2210 END IF;
2211
2212
2213 --In the context of workplan the start date and end date tbl count should always be equal to the input
2214 --task tbl count
2215 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
2216 IF (p_end_date_tbl.COUNT <> p_start_date_tbl.COUNT) OR
2217 (p_start_date_tbl.COUNT <> p_task_elem_version_id_tbl.COUNT) THEN
2218
2219 IF l_debug_mode = 'Y' THEN
2220 pa_debug.g_err_stage:='Invalid pl/sql tables for start and end dates';
2221 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2222 END IF;
2223 --dbms_output.put_line('$$$$%%%');
2224 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2225 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
2226 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2227 END IF;
2228 END IF;
2229
2230
2231 -------------------------------------------------------------------------------------------
2232 -- Validation - p_resource_list_member_id_tbl can be empty only for p_context = 'WORKPLAN'
2233 -- Otherwise return NULL
2234 -------------------------------------------------------------------------------------------
2235 IF NOT(p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN
2236 l_rlm_id_tbl_count := p_resource_list_member_id_tbl.COUNT;
2237
2238 IF l_debug_mode = 'Y' THEN
2239 pa_debug.g_err_stage:='Validating input parameters - count of p_resource_list_member_id_tbl = '||l_rlm_id_tbl_count;
2240 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2241 END IF;
2242
2243 IF l_rlm_id_tbl_count = 0 THEN
2244
2245 IF l_debug_mode = 'Y' THEN
2246 pa_debug.g_err_stage:='Validating input parameters - Resource List Member Id table is empty - p_context = '||p_context;
2247 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2248 --dbms_output.put_line('Rlm tbl is empty for BF -- returning');
2249 pa_debug.reset_curr_function;
2250 END IF;
2251 RETURN;
2252 END IF;
2253
2254 END IF;
2255
2256
2257
2258 l_trace_stage := 40;
2259 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2260
2261 IF l_debug_mode = 'Y' THEN
2262 pa_debug.g_err_stage:='Validating input parameters - checking for project id : ' || p_project_id;
2263 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2264 END IF;
2265
2266 l_trace_stage := 50;
2267 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2268 -------------------------------------------------------------------------------------------
2269 -- validating input parameters
2270 -- 1. p_project_id cannot be null
2271 -------------------------------------------------------------------------------------------
2272 IF (p_project_id IS NULL) THEN
2273 IF l_debug_mode = 'Y' THEN
2274 pa_debug.g_err_stage:='p_project_id is null';
2275 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2276 END IF;
2277 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2278 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
2279 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2280 END IF;
2281
2282 --dbms_output.put_line('2');
2283
2284 l_trace_stage := 60;
2285 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2286 -------------------------------------------------------------------------------------------
2287 -- validating input parameters
2288 -- 1. for p_context ('WORKPLAN','TASK_ASSIGNMENT')- p_struct_elem_version_id cannot be null
2289 -- 2. , p_task_elem_version_id_tbl table cannot be empty
2290 -------------------------------------------------------------------------------------------
2291
2292 IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK)) THEN
2293
2294 l_trace_stage := 70;
2295 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2296 IF p_struct_elem_version_id IS NULL THEN
2297
2298 IF l_debug_mode = 'Y' THEN
2299 pa_debug.g_err_stage:='p_struct_elem_version_id is NULL and p_context = ' || p_context;
2300 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2301 END IF;
2302 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2303 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
2304 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2305
2306 ELSE
2307
2308 l_trace_stage := 80;
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 pa_planning_transaction_utils.get_wp_budget_version_id p_struct_elem_version_id = ' || p_struct_elem_version_id;
2313 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2314 pa_debug.g_err_stage:='calling pa_planning_transaction_utils.get_wp_budget_version_id for deriving budget_version_id = ' || p_context;
2315 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2316 END IF;
2317
2318 l_budget_version_id := pa_planning_transaction_utils.get_wp_budget_version_id(p_struct_elem_version_id);
2319
2320 l_trace_stage := 90;
2321 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2322 pa_fp_planning_transaction_pub.add_wp_plan_type
2323 (p_src_project_id => p_project_id
2324 ,p_targ_project_id => p_project_id
2325 ,x_return_status => x_return_status
2326 ,x_msg_count => x_msg_count
2327 ,x_msg_data => x_msg_data);
2328 l_trace_stage := 100;
2329 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2330
2331 -- 4504452.Added this if codition to get the return status.
2332 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2333 IF l_debug_mode = 'Y' THEN
2334 pa_debug.g_err_stage:='Called API pa_fp_planning_transaction_pub.add_wp_plan_type api returned error';
2335 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2336 END IF;
2337 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2338 END IF;
2339 -----------------------------------------------------
2340 -- If l_budget_version_id IS NULL then create version
2341 -----------------------------------------------------
2342 IF l_budget_version_id IS NULL THEN
2343 l_trace_stage := 110;
2344 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2345
2346 IF l_debug_mode = 'Y' THEN
2347 pa_debug.g_err_stage:='calling pa_fin_plan_pub.create_version api = ' || p_context;
2348 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2349 END IF;
2350
2351 SELECT fin_plan_type_id
2352 INTO l_fin_plan_type_id
2353 FROM pa_fin_plan_types_b
2354 WHERE use_for_workplan_flag ='Y';
2355
2356 pa_fin_plan_pub.Create_Version (
2357 p_project_id => p_project_id
2358 ,p_fin_plan_type_id => l_fin_plan_type_id
2359 ,p_element_type => PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST
2360 ,p_version_name => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
2361 ,p_description => null
2362 ,p_ci_id => null
2363 ,p_est_proj_raw_cost => null
2364 ,p_est_proj_bd_cost => null
2365 ,p_est_proj_revenue => null
2366 ,p_est_qty => null
2367 ,p_impacted_task_id => null
2368 ,p_agreement_id => null
2369 ,p_calling_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
2370 ,p_resource_list_id => null
2371 ,p_time_phased_code => null
2372 ,p_fin_plan_level_code => null
2373 ,p_plan_in_multi_curr_flag => null
2374 ,p_amount_set_id => null
2375 ,p_attribute_category => null
2376 ,p_attribute1 => null
2377 ,p_attribute2 => null
2378 ,p_attribute3 => null
2379 ,p_attribute4 => null
2380 ,p_attribute5 => null
2381 ,p_attribute6 => null
2382 ,p_attribute7 => null
2383 ,p_attribute8 => null
2384 ,p_attribute9 => null
2385 ,p_attribute10 => null
2386 ,p_attribute11 => null
2387 ,p_attribute12 => null
2388 ,p_attribute13 => null
2389 ,p_attribute14 => null
2390 ,p_attribute15 => null
2391 ,p_pji_rollup_required => l_pji_rollup_required
2392 ,px_budget_version_id => l_budget_version_id
2393 ,p_struct_elem_version_id => p_struct_elem_version_id
2394 ,x_proj_fp_option_id => l_proj_fp_options_id
2395 ,x_return_status => l_return_status
2396 ,x_msg_count => l_msg_count
2397 ,x_msg_data => l_msg_data );
2398
2399 l_trace_stage := 120;
2400 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2401 IF l_debug_mode = 'Y' THEN
2402 pa_debug.g_err_stage:=' API pa_fin_plan_pub.create_version api return Status : '||l_return_status;
2403 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2404 pa_debug.g_err_stage:=' API pa_fin_plan_pub.create_version api l_budget_version_id : '||l_budget_version_id;
2405 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2406 pa_debug.g_err_stage:=' API pa_fin_plan_pub.create_version api l_proj_fp_options_id : '||l_proj_fp_options_id;
2407 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2408 END IF;
2409
2410 l_trace_stage := 130;
2411 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2412
2413 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2414 IF l_debug_mode = 'Y' THEN
2415 pa_debug.g_err_stage:='Called API pa_fin_plan_pub.create_version api returned error';
2416 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2417 END IF;
2418 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2419 END IF;
2420
2421 END IF;
2422
2423 IF l_debug_mode = 'Y' THEN
2424 pa_debug.g_err_stage:='l_budget_version_id, l_fin_plan_type_id = '||l_budget_version_id||','|| l_fin_plan_type_id;
2425 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2426 END IF;
2427
2428 END IF;
2429
2430 --Get the no of tasks passed . If none are passed then return
2431 l_elem_version_id_count := p_task_elem_version_id_tbl.COUNT;
2432 l_trace_stage := 140;
2433 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2434
2435 IF l_debug_mode = 'Y' THEN
2436 pa_debug.g_err_stage:='Validating input parameters - count of p_task_elem_version_id_tbl = '||l_elem_version_id_count;
2437 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2438 END IF;
2439
2440 IF l_elem_version_id_count = 0 THEN
2441 l_trace_stage := 150;
2442 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2443 IF l_debug_mode = 'Y' THEN
2444 pa_debug.g_err_stage:='Validating input parameters - elem_version_id table is empty - p_context = '||p_context;
2445 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2446 pa_debug.reset_curr_function;
2447 END IF;
2448 RETURN;
2449 END IF;
2450
2451 l_trace_stage := 160;
2452 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2453 ELSIF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
2454
2455 l_trace_stage := 170;
2456 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2457 IF p_budget_version_id IS NULL THEN
2458
2459 IF l_debug_mode = 'Y' THEN
2460 pa_debug.g_err_stage:='p_budget_version_id is null for p_context :' || p_context;
2461 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2462 END IF;
2463 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2464 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
2465 --dbms_output.put_line('bv id is null for BF');
2466 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2467 ELSE
2468 l_trace_stage := 180;
2469 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2470 l_budget_version_id := p_budget_version_id;
2471 END IF;
2472
2473 l_trace_stage := 190;
2474 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2475 END IF;
2476
2477 IF l_debug_mode = 'Y' THEN
2478 pa_debug.g_err_stage:='Fetching resource List id - l_resource_list_id : ';
2479 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2480 END IF;
2481 l_trace_stage := 200;
2482 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2483 --dbms_output.put_line('2.3 '||l_budget_version_id);
2484
2485 --Get the required details for the budget version id
2486 SELECT nvl(cost_resource_list_id, nvl(revenue_resource_list_id, all_resource_list_id))
2487 ,rbs_version_id
2488 INTO l_resource_list_id
2489 ,l_rbs_version_id
2490 FROM pa_proj_fp_options
2491 WHERE fin_plan_version_id=l_budget_version_id;
2492
2493 IF l_debug_mode = 'Y' THEN
2494 pa_debug.g_err_stage:='Fetching resource List id - l_resource_list_id : '|| l_resource_list_id;
2495 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2496 END IF;
2497
2498 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Starts
2499 BEGIN
2500 IF l_debug_mode = 'Y' THEN
2501 pa_debug.g_err_stage:='Fetching spread curve id for fixed date spread curve';
2502 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2503 END IF;
2504 Select spread_curve_id
2505 into l_fixed_date_sp_id
2506 from pa_spread_curves_b
2507 where spread_curve_code = 'FIXED_DATE';
2508
2509 IF l_debug_mode = 'Y' THEN
2510 pa_debug.g_err_stage:='Fetching spread curve id l_fixed_date_sp_id:'||l_fixed_date_sp_id;
2511 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2512 END IF;
2513
2514 EXCEPTION
2515 WHEN NO_DATA_FOUND THEN
2516 IF l_debug_mode = 'Y' THEN
2517 pa_debug.g_err_stage:='Fixed date spread curve not found in system';
2518 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,5);
2519 END IF;
2520 RAISE;
2521 END;
2522 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Ends
2523
2524
2525 l_trace_stage := 210;
2526 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2527
2528 --dbms_output.put_line('2.2');
2529 -----------------------------------------------------------------------------------------------------------------------
2530 -- Fetching the resource class member ids for Class Codes in ('FINANCIAL_ELEMENTS','PEOPLE','EQUIPMENT','MATERIAL')
2531 -- and setting all Cost PLsql tables that will be needed for calling Calculate API as Empty tabs
2532 -- Bug 3749516 Removing rlm id for EQUIPMENT below
2533 -----------------------------------------------------------------------------------------------------------------------
2534
2535 IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN
2536 l_trace_stage := 220;
2537 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2538
2539 IF l_debug_mode = 'Y' THEN
2540 pa_debug.g_err_stage:='Calling API pa_planning_transaction_utils.Get_Res_Class_Rlm_Ids';
2541 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2542 END IF;
2543
2544 pa_planning_transaction_utils.Get_Res_Class_Rlm_Ids
2545 (p_project_id => p_project_id,
2546 p_resource_list_id => l_resource_list_id,
2547 x_people_res_class_rlm_id => l_people_res_class_rlm_id,
2548 x_equip_res_class_rlm_id => l_equip_res_class_rlm_id,
2549 x_fin_res_class_rlm_id => l_fin_res_class_rlm_id,
2550 x_mat_res_class_rlm_id => l_mat_res_class_rlm_id,
2551 x_return_status => l_return_status,
2552 x_msg_count => l_msg_count,
2553 x_msg_data => l_msg_data);
2554 l_trace_stage := 230;
2555 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2556 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2557 IF l_debug_mode = 'Y' THEN
2558 pa_debug.g_err_stage:='Called API pa_planning_transaction_utils.Get_Res_Class_Rlm_Ids api returned error';
2559 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2560 END IF;
2561 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2562 END IF;
2563
2564 l_trace_stage := 240;
2565 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2566
2567 IF l_debug_mode = 'Y' THEN
2568 pa_debug.g_err_stage:='l_people_res_class_rlm_id : '||l_people_res_class_rlm_id;
2569 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2570 END IF;
2571
2572 l_eligible_rlm_ids_tbl(1) := l_people_res_class_rlm_id;
2573
2574 l_trace_stage := 250;
2575 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2576 ELSE
2577 --dbms_output.put_line('2.1');
2578 l_trace_stage := 260;
2579 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2580 l_eligible_rlm_ids_tbl := p_resource_list_member_id_tbl;
2581
2582 END IF;
2583
2584 /**************** initializing pm product code ************/
2585 IF l_eligible_rlm_ids_tbl.count > 0 Then
2586 FOR i IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST LOOP
2587 If (NOT p_pm_product_code.EXISTS(i))
2588 then
2589 l_pm_product_code_tbl(i) := null;
2590 elsif ( p_pm_product_code(i) = fnd_api.g_miss_char)
2591 Then
2592 l_pm_product_code_tbl(i) := null;
2593 Else
2594 l_pm_product_code_tbl(i) := p_pm_product_code(i);
2595 End If;
2596
2597 If (NOT p_pm_res_asgmt_ref.EXISTS(i))
2598 then
2599 l_pm_res_asgmt_ref_tbl(i) := null;
2600 elsif (p_pm_res_asgmt_ref(i) = fnd_api.g_miss_char)
2601 Then
2602 l_pm_res_asgmt_ref_tbl(i) := null;
2603 Else
2604 l_pm_res_asgmt_ref_tbl(i) := p_pm_res_asgmt_ref(i);
2605 End If;
2606 END loop;
2607 End IF;
2608
2609 /**************** end ------------------- initializing pm product code ************/
2610
2611
2612 l_trace_stage := 290;
2613 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2614
2615 --------------------------------------------------------------------
2616 -- Calling procedure PA_PLANNING_RESOURCE_UTILS.get_resource_defaults
2617 -- to get the resource defaults for the rlm ids passed
2618 -- Please note that this API call will be modified, once the API is
2619 -- finalised.
2620 -- - STARTS
2621 --------------------------------------------------------------------
2622
2623 IF l_debug_mode = 'Y' THEN
2624 pa_debug.g_err_stage:='Calling API PA_PLANNING_RESOURCE_UTILS.get_resource_defaults';
2625 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2626 END IF;
2627
2628 l_trace_stage := 300;
2629 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2630 PA_PLANNING_RESOURCE_UTILS.get_resource_defaults(
2631 p_resource_list_members => l_eligible_rlm_ids_tbl,
2632 p_project_id => p_project_id,
2633 x_resource_class_flag => l_resource_class_flag_tbl,
2634 x_resource_class_code => l_resource_class_code_tbl,
2635 x_resource_class_id => l_resource_class_id_tbl,
2636 x_res_type_code => l_res_type_code_tbl,
2637 x_person_id => l_person_id_tbl,
2638 x_job_id => l_job_id_tbl,
2639 x_person_type_code => l_person_type_code_tbl,
2640 x_named_role => l_named_role_tbl,
2641 x_bom_resource_id => l_bom_resource_id_tbl,
2642 x_non_labor_resource => l_non_labor_resource_tbl,
2643 x_inventory_item_id => l_inventory_item_id_tbl,
2644 x_item_category_id => l_item_category_id_tbl,
2645 x_project_role_id => l_project_role_id_tbl,
2646 x_organization_id => l_organization_id_tbl,
2647 x_fc_res_type_code => l_fc_res_type_code_tbl,
2648 x_expenditure_type => l_expenditure_type_tbl,
2649 x_expenditure_category => l_expenditure_category_tbl,
2650 x_event_type => l_event_type_tbl,
2651 x_revenue_category_code => l_revenue_category_code_tbl,
2652 x_supplier_id => l_supplier_id_tbl,
2653 x_unit_of_measure => l_unit_of_measure_tbl,
2654 x_spread_curve_id => l_spread_curve_id_tbl,
2655 x_etc_method_code => l_etc_method_code_tbl,
2656 x_mfc_cost_type_id => l_mfc_cost_type_id_tbl,
2657 x_incurred_by_res_flag => l_incurred_by_res_flag_tbl,
2658 x_incur_by_res_class_code => l_incur_by_res_class_code_tbl,
2659 x_Incur_by_role_id => l_Incur_by_role_id_tbl,
2660 x_org_id => l_org_id_tbl,
2661 X_rate_based_flag => l_rate_based_flag_tbl,
2662 x_rate_expenditure_type => l_rate_expenditure_type_tbl,
2663 x_rate_func_curr_code => l_rate_func_curr_code_tbl,
2664 x_incur_by_res_type => l_incur_by_res_type ,
2665 x_msg_data => l_msg_data,
2666 x_msg_count => l_msg_count,
2667 x_return_status => l_return_status);
2668 l_trace_stage := 310;
2669 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2670
2671 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2672
2673 IF l_debug_mode = 'Y' THEN
2674 pa_debug.g_err_stage:='Called APIPA_PLANNING_RESOURCE_UTILS.get_resource_defaults api returned error';
2675 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2676 END IF;
2677 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2678
2679 END IF;
2680
2681 IF l_debug_mode = 'Y' THEN
2682
2683 IF l_eligible_rlm_ids_tbl.COUNT >0 THEN
2684 pa_debug.g_err_stage:='Parameters to PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs';
2685 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2686
2687
2688 pa_debug.g_err_stage:='p_budget_version_id '||l_budget_version_id;
2689 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2690
2691 pa_debug.g_err_stage:='l_resource_list_id '||l_resource_list_id;
2692 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2693
2694 pa_debug.g_err_stage:='l_rbs_version_id '||l_rbs_version_id;
2695 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2696
2697 pa_debug.g_err_stage:='l_eligible_rlm_ids_tbl(1) '||l_eligible_rlm_ids_tbl(1);
2698 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2699
2700 pa_debug.g_err_stage:='l_txn_src_typ_code_rbs_prm_tbl(1) '||l_txn_src_typ_code_rbs_prm_tbl(1);
2701 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2702
2703 pa_debug.g_err_stage:='l_person_id_tbl(1) '||l_person_id_tbl(1);
2704 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2705
2706 pa_debug.g_err_stage:='l_job_id_tbl(1) '||l_job_id_tbl(1);
2707 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2708
2709 pa_debug.g_err_stage:='l_organization_id_tbl(1) '||l_organization_id_tbl(1);
2710 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2711
2712 pa_debug.g_err_stage:='l_supplier_id_tbl(1) '||l_supplier_id_tbl(1);
2713 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2714
2715 pa_debug.g_err_stage:='l_expenditure_type_tbl(1) '||l_expenditure_type_tbl(1);
2716 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2717
2718 pa_debug.g_err_stage:='l_event_type_tbl(1) '||l_event_type_tbl(1);
2719 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2720
2721 pa_debug.g_err_stage:='l_expenditure_category_tbl(1) '||l_expenditure_category_tbl(1);
2722 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2723
2724 pa_debug.g_err_stage:='l_revenue_category_code_tbl(1) '||l_revenue_category_code_tbl(1);
2725 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2726
2727 pa_debug.g_err_stage:='l_project_role_id_tbl(1) '||l_project_role_id_tbl(1);
2728 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2729
2730 pa_debug.g_err_stage:='l_resource_class_code_tbl(1) '||l_resource_class_code_tbl(1);
2731 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2732
2733 pa_debug.g_err_stage:='l_item_category_id_tbl(1) '||l_item_category_id_tbl(1);
2734 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2735
2736 pa_debug.g_err_stage:='l_person_type_code_tbl(1) '||l_person_type_code_tbl(1);
2737 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2738
2739 pa_debug.g_err_stage:='l_bom_resource_id_tbl(1) '||l_bom_resource_id_tbl(1);
2740 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2741
2742 END IF;
2743
2744
2745 END IF;
2746 --Added For CBS 12.2 Enhancement
2747 IF (((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN)
2748 OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK))
2749 AND p_struct_elem_version_id IS NOT NULL)
2750 THEN
2751 l_res_class_flag := PA_PROJECT_STRUCTURE_UTILS.get_resource_class_flag(p_project_id);
2752 IF l_res_class_flag = 'N'
2753 THEN
2754 FOR i IN l_rate_based_flag_tbl.FIRST..l_rate_based_flag_tbl.LAST LOOP
2755 --l_rate_based_flag_tbl(i) := 'N';
2756 l_unit_of_measure_tbl(i) := 'DOLLARS';
2757 END LOOP;
2758 END IF;
2759 END IF;
2760 --CBS Changes End here
2761 --Loop thru the passed rlm id table to prepare the l_txn_src_typ_code_rbs_prm_tbl pl/sql table.
2762 --All the elements in this table should be set to 'RES_ASSIGNMENT'
2763
2764 --NOTE : This loop is also used to transfer the l_incur_by_res_type(i) to l_res_type_code_tbl(i) if
2765 --l_incurred_by_res_flag_tbl(i) is Y. Ultimately l_res_type_code_tbl will be used in populationg
2766 --res type code in pa_resource_assignments
2767 l_res_type_code_tbl.EXTEND(l_eligible_rlm_ids_tbl.COUNT-l_res_type_code_tbl.COUNT);
2768 FOR i IN l_eligible_rlm_ids_tbl.FIRST..l_eligible_rlm_ids_tbl.LAST LOOP
2769
2770 l_txn_src_typ_code_rbs_prm_tbl(i):='RES_ASSIGNMENT';
2771
2772 IF l_incurred_by_res_flag_tbl.EXISTS(i) AND nvl(l_incurred_by_res_flag_tbl(i),'N') = 'Y' THEN
2773 IF l_incur_by_res_type.EXISTS(i) THEN
2774 l_res_type_code_tbl(i) := l_incur_by_res_type(i);
2775 ELSE
2776 l_res_type_code_tbl(i) := NULL;
2777 END IF;
2778 END IF;
2779
2780 END LOOP;
2781
2782 --Extend the output pl/sql tbls l_rbs_element_id_tbl and l_txn_accum_header_id_tbl so that they contatin
2783 --the same no of records as l_eligible_rlm_ids_tbl
2784 l_rbs_element_id_tbl.EXTEND(l_eligible_rlm_ids_tbl.COUNT);
2785 l_txn_accum_header_id_tbl.EXTEND(l_eligible_rlm_ids_tbl.COUNT);
2786
2787 --Bug#16200605 updating the cbs_element_id's into l_cbs_id_rlm_tbl
2788 FOR i IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST LOOP
2789 IF p_cbs_element_id_tbl.EXISTS(i) THEN
2790 l_cbs_id_rlm_tbl(i) := p_cbs_element_id_tbl(i);
2791 ELSE
2792 l_cbs_id_rlm_tbl(i) := NULL;
2793 END IF;
2794 END LOOP;
2795
2796 --Call the RBS Mapping API only if the rbs version id is not null
2797 IF l_rbs_version_id IS NOT NULL THEN
2798
2799 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,'before PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs',3);
2800
2801 PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
2802 p_budget_version_id => l_budget_version_id
2803 ,p_resource_list_id => l_resource_list_id
2804 ,p_rbs_version_id => l_rbs_version_id
2805 ,p_calling_process => 'RBS_REFRESH'
2806 ,p_calling_context => 'PLSQL'
2807 ,p_process_code => 'RBS_MAP'
2808 ,p_calling_mode => 'PLSQL_TABLE'
2809 ,p_init_msg_list_flag => 'N'
2810 ,p_commit_flag => 'N'
2811 ,p_TXN_SOURCE_ID_tab => l_eligible_rlm_ids_tbl
2812 ,p_TXN_SOURCE_TYPE_CODE_tab => l_txn_src_typ_code_rbs_prm_tbl
2813 ,p_PERSON_ID_tab => l_person_id_tbl
2814 ,p_JOB_ID_tab => l_job_id_tbl
2815 ,p_ORGANIZATION_ID_tab => l_organization_id_tbl
2816 ,p_VENDOR_ID_tab => l_supplier_id_tbl
2817 ,p_EXPENDITURE_TYPE_tab => l_expenditure_type_tbl
2818 ,p_EVENT_TYPE_tab => l_event_type_tbl
2819 ,p_EXPENDITURE_CATEGORY_tab => l_expenditure_category_tbl
2820 ,p_REVENUE_CATEGORY_CODE_tab => l_revenue_category_code_tbl
2821 ,p_PROJECT_ROLE_ID_tab => l_project_role_id_tbl
2822 ,p_RESOURCE_CLASS_CODE_tab => l_resource_class_code_tbl
2823 ,p_ITEM_CATEGORY_ID_tab => l_item_category_id_tbl
2824 ,p_PERSON_TYPE_CODE_tab => l_person_type_code_tbl
2825 ,p_BOM_RESOURCE_ID_tab => l_bom_resource_id_tbl
2826 ,p_NON_LABOR_RESOURCE_tab => l_non_labor_resource_tbl -- Bug 3711741
2827 ,p_INVENTORY_ITEM_ID_tab => l_inventory_item_id_tbl -- Bug 3698596
2828 ,P_CBS_ELEMENT_ID_TAB => l_cbs_id_rlm_tbl -- bug#16840460
2829 ,x_txn_source_id_tab => l_txn_source_id_tbl
2830 ,x_res_list_member_id_tab => l_res_list_member_id_tbl
2831 ,x_rbs_element_id_tab => l_rbs_element_id_tbl
2832 ,x_txn_accum_header_id_tab => l_txn_accum_header_id_tbl
2833 ,x_return_status => x_return_status
2834 ,x_msg_count => x_msg_count
2835 ,x_msg_data => x_msg_data);
2836
2837 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2838
2839 IF l_debug_mode = 'Y' THEN
2840 pa_debug.g_err_stage:='Called API PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs returned error';
2841 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2842 END IF;
2843 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
2844
2845 END IF;
2846
2847 END IF; --IF l_rbs_version_id IS NOT NULL THEN
2848
2849
2850 --Call the rbs mapping API for the rlm ids obtained above
2851
2852 l_trace_stage := 320;
2853 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2854 --------------------------------------------------------------------
2855 -- Calling procedure abcd.get_multiple_resource_defaults to get the
2856 -- resource defaults for the rlm ids passed
2857 -- Please note that this API call will be modified, once the API is
2858 -- finalised.
2859 -- - ENDS
2860 --------------------------------------------------------------------
2861
2862
2863
2864 -------------------------------------------------------------------------
2865 -- For p_context = TASK_ASSIGNMENTS - Processing Starts Here
2866 -------------------------------------------------------------------------
2867 l_trace_stage := 330;
2868 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2869 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
2870 l_trace_stage := 340;
2871 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2872 IF l_debug_mode = 'Y' THEN
2873 pa_debug.g_err_stage:='Doing processing for TASK ASSIGNMENTS : p_context is'|| p_context;
2874 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2875 END IF;
2876 -------------------------------------------------------------------------
2877 -- To call Task Validation API we populate the PLSql tables with task
2878 -- and resource data.
2879 -------------------------------------------------------------------------
2880
2881 IF l_debug_mode = 'Y' THEN
2882 pa_debug.g_err_stage:='Populating PlSql table with Task Data';
2883 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2884 END IF;
2885
2886 -----------------------------------------------------------------
2887 -- Populating Table of task_rec_type
2888 -----------------------------------------------------------------
2889 FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
2890 l_trace_stage := 350;
2891 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2892
2893 l_task_rec_tbl(i).project_id := p_project_id;
2894 l_task_rec_tbl(i).struct_elem_version_id := p_struct_elem_version_id;
2895 l_task_rec_tbl(i).task_elem_version_id := p_task_elem_version_id_tbl(i);
2896 IF p_task_name_tbl.EXISTS(i) THEN
2897 l_task_rec_tbl(i).task_name := p_task_name_tbl(i);
2898 END IF;
2899
2900 IF p_task_number_tbl.EXISTS(i) THEN
2901 l_task_rec_tbl(i).task_number := p_task_number_tbl(i);
2902 END IF;
2903
2904 IF p_start_date_tbl.EXISTS(i) THEN
2905 l_task_rec_tbl(i).start_date := p_start_date_tbl(i);
2906 END IF;
2907
2908 IF p_end_date_tbl.EXISTS(i) THEN
2909 l_task_rec_tbl(i).end_date := p_end_date_tbl(i);
2910 END IF;
2911
2912 IF p_planned_people_effort_tbl.EXISTS(i) THEN
2913 l_task_rec_tbl(i).planned_people_effort := p_planned_people_effort_tbl(i);
2914 END IF;
2915
2916 IF p_latest_eff_pub_flag_tbl.EXISTS(i) THEN
2917 l_task_rec_tbl(i).latest_eff_pub_flag := p_latest_eff_pub_flag_tbl(i);
2918 END IF;
2919 l_trace_stage := 360;
2920 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2921 END LOOP;
2922 l_trace_stage := 370;
2923 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2924
2925
2926 -----------------------------------------------------------------
2927 -- Populating Table of resource_rec_type
2928 -----------------------------------------------------------------
2929
2930 IF l_debug_mode = 'Y' THEN
2931 pa_debug.g_err_stage:='Populating PlSql table with Resource Data';
2932 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
2933 END IF;
2934
2935 l_trace_stage := 380;
2936 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2937 FOR i IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST LOOP
2938 l_trace_stage := 390;
2939 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
2940
2941 l_resource_rec_tbl(i).resource_list_member_id := l_eligible_rlm_ids_tbl(i);
2942
2943 IF p_project_assignment_id_tbl.EXISTS(i) THEN
2944 l_resource_rec_tbl(i).project_assignment_id := p_project_assignment_id_tbl(i);
2945 END IF;
2946
2947 IF l_resource_class_flag_tbl.EXISTS(i) THEN
2948 l_resource_rec_tbl(i).resource_class_flag := l_resource_class_flag_tbl(i);
2949 END IF;
2950
2951 IF l_resource_class_code_tbl.EXISTS(i) THEN
2952 l_resource_rec_tbl(i).resource_class_code := l_resource_class_code_tbl(i);
2953 END IF;
2954
2955 IF l_resource_class_id_tbl.EXISTS(i) THEN
2956 l_resource_rec_tbl(i).resource_class_id := l_resource_class_id_tbl(i);
2957 END IF;
2958
2959 IF l_res_type_code_tbl.EXISTS(i) THEN
2960 l_resource_rec_tbl(i).res_type_code := l_res_type_code_tbl(i);
2961 END IF;
2962
2963 IF l_person_id_tbl.EXISTS(i) THEN
2964 l_resource_rec_tbl(i).person_id := l_person_id_tbl(i);
2965 END IF;
2966
2967 IF l_job_id_tbl.EXISTS(i) THEN
2968 l_resource_rec_tbl(i).job_id := l_job_id_tbl(i);
2969 END IF;
2970
2971 IF l_person_type_code_tbl.EXISTS(i) THEN
2972 l_resource_rec_tbl(i).person_type_code := l_person_type_code_tbl(i);
2973 END IF;
2974
2975 IF l_bom_resource_id_tbl.EXISTS(i) THEN
2976 l_resource_rec_tbl(i).bom_resource_id := l_bom_resource_id_tbl(i);
2977 END IF;
2978
2979 IF l_inventory_item_id_tbl.EXISTS(i) THEN
2980 l_resource_rec_tbl(i).inventory_item_id := l_inventory_item_id_tbl(i);
2981 END IF;
2982
2983 IF l_item_category_id_tbl.EXISTS(i) THEN
2984 l_resource_rec_tbl(i).item_category_id := l_item_category_id_tbl(i);
2985 END IF;
2986
2987 IF l_project_role_id_tbl.EXISTS(i) THEN
2988 l_resource_rec_tbl(i).project_role_id := l_project_role_id_tbl(i);
2989 END IF;
2990
2991 IF l_organization_id_tbl.EXISTS(i) THEN
2992 l_resource_rec_tbl(i).organization_id := l_organization_id_tbl(i);
2993 END IF;
2994
2995 IF l_fc_res_type_code_tbl.EXISTS(i) THEN
2996 l_resource_rec_tbl(i).fc_res_type_code := l_fc_res_type_code_tbl(i);
2997 END IF;
2998
2999 IF l_expenditure_type_tbl.EXISTS(i) THEN
3000 l_resource_rec_tbl(i).expenditure_type := l_expenditure_type_tbl(i);
3001 END IF;
3002
3003 IF l_expenditure_category_tbl.EXISTS(i) THEN
3004 l_resource_rec_tbl(i).expenditure_category := l_expenditure_category_tbl(i);
3005 END IF;
3006
3007 IF l_event_type_tbl.EXISTS(i) THEN
3008 l_resource_rec_tbl(i).event_type := l_event_type_tbl(i);
3009 END IF;
3010
3011 IF l_revenue_category_code_tbl.EXISTS(i) THEN
3012 l_resource_rec_tbl(i).revenue_category_code := l_revenue_category_code_tbl(i);
3013 END IF;
3014
3015 IF l_supplier_id_tbl.EXISTS(i) THEN
3016 l_resource_rec_tbl(i).supplier_id := l_supplier_id_tbl(i);
3017 END IF;
3018
3019 IF l_unit_of_measure_tbl.EXISTS(i) THEN
3020 l_resource_rec_tbl(i).unit_of_measure := l_unit_of_measure_tbl(i);
3021 END IF;
3022
3023 IF l_spread_curve_id_tbl.EXISTS(i) THEN
3024 l_resource_rec_tbl(i).spread_curve_id := l_spread_curve_id_tbl(i);
3025 END IF;
3026
3027 IF l_etc_method_code_tbl.EXISTS(i) THEN
3028 l_resource_rec_tbl(i).etc_method_code := l_etc_method_code_tbl(i);
3029 END IF;
3030
3031 IF l_mfc_cost_type_id_tbl.EXISTS(i) THEN
3032 l_resource_rec_tbl(i).mfc_cost_type_id := l_mfc_cost_type_id_tbl(i);
3033 END IF;
3034
3035 IF l_incurred_by_res_flag_tbl.EXISTS(i) THEN
3036 l_resource_rec_tbl(i).incurred_by_res_flag := l_incurred_by_res_flag_tbl(i);
3037 END IF;
3038
3039 IF l_Incur_by_res_class_code_tbl.EXISTS(i) THEN
3040 l_resource_rec_tbl(i).Incur_by_res_class_code := l_Incur_by_res_class_code_tbl(i);
3041 END IF;
3042
3043 IF l_Incur_by_role_id_tbl.EXISTS(i) THEN
3044 l_resource_rec_tbl(i).Incur_by_role_id := l_Incur_by_role_id_tbl(i);
3045 END IF;
3046
3047 IF l_named_role_tbl.EXISTS(i) THEN
3048 l_resource_rec_tbl(i).named_role := l_named_role_tbl(i);
3049 END IF;
3050
3051 IF l_non_labor_resource_tbl.EXISTS(i) THEN
3052 l_resource_rec_tbl(i).non_labor_resource := l_non_labor_resource_tbl(i);
3053 END IF;
3054
3055 IF p_quantity_tbl.EXISTS(i) THEN
3056 l_resource_rec_tbl(i).total_quantity := p_quantity_tbl(i);
3057 END IF;
3058
3059 IF l_unplanned_flag_tbl.EXISTS(i) THEN
3060 l_resource_rec_tbl(i).unplanned_flag := l_unplanned_flag_tbl(i);
3061 END IF;
3062
3063 -- Bug 3793623
3064 IF p_planning_start_date_tbl.EXISTS(i) THEN
3065 l_resource_rec_tbl(i).planning_start_date := p_planning_start_date_tbl(i);
3066 END IF;
3067
3068 IF p_planning_end_date_tbl.EXISTS(i) THEN
3069 l_resource_rec_tbl(i).planning_end_date := p_planning_end_date_tbl(i);
3070 END IF;
3071
3072 --For Bug 3877875
3073 IF p_ATTRIBUTE_CATEGORY_tbl.EXISTS(i) THEN
3074 l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY := p_ATTRIBUTE_CATEGORY_tbl(i);
3075 END IF;
3076
3077 IF p_ATTRIBUTE1.EXISTS(i) THEN
3078 l_resource_rec_tbl(i).ATTRIBUTE1 := p_ATTRIBUTE1(i);
3079 END IF;
3080
3081 IF p_ATTRIBUTE2.EXISTS(i) THEN
3082 l_resource_rec_tbl(i).ATTRIBUTE2 := p_ATTRIBUTE2(i);
3083 END IF;
3084
3085 IF p_ATTRIBUTE3.EXISTS(i) THEN
3086 l_resource_rec_tbl(i).ATTRIBUTE3 := p_ATTRIBUTE3(i);
3087 END IF;
3088
3089 IF p_ATTRIBUTE4.EXISTS(i) THEN
3090 l_resource_rec_tbl(i).ATTRIBUTE4 := p_ATTRIBUTE4(i);
3091 END IF;
3092
3093 IF p_ATTRIBUTE5.EXISTS(i) THEN
3094 l_resource_rec_tbl(i).ATTRIBUTE5 := p_ATTRIBUTE5(i);
3095 END IF;
3096
3097 IF p_ATTRIBUTE6.EXISTS(i) THEN
3098 l_resource_rec_tbl(i).ATTRIBUTE6 := p_ATTRIBUTE6(i);
3099 END IF;
3100
3101 IF p_ATTRIBUTE7.EXISTS(i) THEN
3102 l_resource_rec_tbl(i).ATTRIBUTE7 := p_ATTRIBUTE7(i);
3103 END IF;
3104
3105 IF p_ATTRIBUTE8.EXISTS(i) THEN
3106 l_resource_rec_tbl(i).ATTRIBUTE8 := p_ATTRIBUTE8(i);
3107 END IF;
3108
3109 IF p_ATTRIBUTE9.EXISTS(i) THEN
3110 l_resource_rec_tbl(i).ATTRIBUTE9 := p_ATTRIBUTE9(i);
3111 END IF;
3112
3113 IF p_ATTRIBUTE10.EXISTS(i) THEN
3114 l_resource_rec_tbl(i).ATTRIBUTE10 := p_ATTRIBUTE10(i);
3115 END IF;
3116
3117 IF p_ATTRIBUTE11.EXISTS(i) THEN
3118 l_resource_rec_tbl(i).ATTRIBUTE11 := p_ATTRIBUTE11(i);
3119 END IF;
3120
3121 IF p_ATTRIBUTE12.EXISTS(i) THEN
3122 l_resource_rec_tbl(i).ATTRIBUTE12 := p_ATTRIBUTE12(i);
3123 END IF;
3124
3125 IF p_ATTRIBUTE13.EXISTS(i) THEN
3126 l_resource_rec_tbl(i).ATTRIBUTE13 := p_ATTRIBUTE13(i);
3127 END IF;
3128
3129 IF p_ATTRIBUTE14.EXISTS(i) THEN
3130 l_resource_rec_tbl(i).ATTRIBUTE14 := p_ATTRIBUTE14(i);
3131 END IF;
3132
3133 IF p_ATTRIBUTE15.EXISTS(i) THEN
3134 l_resource_rec_tbl(i).ATTRIBUTE15 := p_ATTRIBUTE15(i);
3135 END IF;
3136
3137 IF p_ATTRIBUTE16.EXISTS(i) THEN
3138 l_resource_rec_tbl(i).ATTRIBUTE16 := p_ATTRIBUTE16(i);
3139 END IF;
3140
3141 IF p_ATTRIBUTE17.EXISTS(i) THEN
3142 l_resource_rec_tbl(i).ATTRIBUTE17 := p_ATTRIBUTE17(i);
3143 END IF;
3144
3145 IF p_ATTRIBUTE18.EXISTS(i) THEN
3146 l_resource_rec_tbl(i).ATTRIBUTE18 := p_ATTRIBUTE18(i);
3147 END IF;
3148
3149 IF p_ATTRIBUTE19.EXISTS(i) THEN
3150 l_resource_rec_tbl(i).ATTRIBUTE19 := p_ATTRIBUTE19(i);
3151 END IF;
3152
3153 IF p_ATTRIBUTE20.EXISTS(i) THEN
3154 l_resource_rec_tbl(i).ATTRIBUTE20 := p_ATTRIBUTE20(i);
3155 END IF;
3156
3157 IF p_ATTRIBUTE21.EXISTS(i) THEN
3158 l_resource_rec_tbl(i).ATTRIBUTE21 := p_ATTRIBUTE21(i);
3159 END IF;
3160
3161 IF p_ATTRIBUTE22.EXISTS(i) THEN
3162 l_resource_rec_tbl(i).ATTRIBUTE22 := p_ATTRIBUTE22(i);
3163 END IF;
3164
3165 IF p_ATTRIBUTE23.EXISTS(i) THEN
3166 l_resource_rec_tbl(i).ATTRIBUTE23 := p_ATTRIBUTE23(i);
3167 END IF;
3168
3169 IF p_ATTRIBUTE24.EXISTS(i) THEN
3170 l_resource_rec_tbl(i).ATTRIBUTE24 := p_ATTRIBUTE24(i);
3171 END IF;
3172
3173 IF p_ATTRIBUTE25.EXISTS(i) THEN
3174 l_resource_rec_tbl(i).ATTRIBUTE25 := p_ATTRIBUTE25(i);
3175 END IF;
3176
3177 IF p_ATTRIBUTE26.EXISTS(i) THEN
3178 l_resource_rec_tbl(i).ATTRIBUTE26 := p_ATTRIBUTE26(i);
3179 END IF;
3180
3181 IF p_ATTRIBUTE27.EXISTS(i) THEN
3182 l_resource_rec_tbl(i).ATTRIBUTE27 := p_ATTRIBUTE27(i);
3183 END IF;
3184
3185 IF p_ATTRIBUTE28.EXISTS(i) THEN
3186 l_resource_rec_tbl(i).ATTRIBUTE28 := p_ATTRIBUTE28(i);
3187 END IF;
3188
3189 IF p_ATTRIBUTE29.EXISTS(i) THEN
3190 l_resource_rec_tbl(i).ATTRIBUTE29 := p_ATTRIBUTE29(i);
3191 END IF;
3192
3193 IF p_ATTRIBUTE30.EXISTS(i) THEN
3194 l_resource_rec_tbl(i).ATTRIBUTE30 := p_ATTRIBUTE30(i);
3195 END IF;
3196 --For bug 3877875
3197
3198 --For bug 3948128
3199 IF p_scheduled_delay.EXISTS(i) THEN
3200 l_resource_rec_tbl(i).scheduled_delay := p_scheduled_delay(i);
3201 END IF;
3202
3203 -- SPOKANAT bug 9759832 - start
3204 -- set the default value only if use_task_schedule_flag value is G_MISS_CHAR
3205 OPEN C2(p_project_id);
3206 FETCH C2 INTO l_use_task_schedule_flag;
3207 CLOSE C2;
3208 if l_use_task_schedule_flag is not null then
3209 l_resource_rec_tbl(i).use_task_schedule_flag :=l_use_task_schedule_flag;
3210 end if;
3211 -- SPOKANAT bug 9759832 - end
3212
3213
3214 l_trace_stage := 400;
3215 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3216
3217 END LOOP;
3218 l_trace_stage := 410;
3219 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3220
3221
3222 -------------------------------------------------
3223 -- Calling Task validation API
3224 -------------------------------------------------
3225 IF l_debug_mode = 'Y' THEN
3226 pa_debug.g_err_stage:='Calling API pa_task_assignment_utils.Validate_Create_Assignment';
3227 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3228 END IF;
3229
3230 l_trace_stage := 420;
3231 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3232 --dbms_output.put_line('qty bef is '||l_resource_rec_tbl(1).planning_start_Date);
3233 --dbms_output.put_line('qty aft is '||l_resource_rec_tbl(1).planning_end_date);
3234 -- For Bug 3665097 : New param p_one_to_one_mapping_flag added below.
3235 -- This will be synced up with Validate_Create_Assignment changes.
3236 pa_task_assignment_utils.Validate_Create_Assignment(
3237 p_calling_context => p_calling_context, -- Added for Bug 6856934
3238 p_one_to_one_mapping_flag => p_one_to_one_mapping_flag,
3239 p_task_rec_tbl => l_task_rec_tbl,
3240 p_task_assignment_tbl => l_resource_rec_tbl,
3241 x_del_task_level_rec_code_tbl => l_del_task_level_rec_code_tbl, --Paramater obsoletted , not in use any more
3242 x_return_status => l_return_status);
3243 --dbms_output.put_line('qty aft is '||l_resource_rec_tbl(1).planning_start_date);
3244 --dbms_output.put_line('qty aft is '||l_resource_rec_tbl(1).planning_end_date);
3245
3246 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3247 IF l_debug_mode = 'Y' THEN
3248 pa_debug.g_err_stage:='Called API pa_task_assignment_utils.Validate_Create_Assignment returned error';
3249 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3250 END IF;
3251 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3252 END IF;
3253 IF l_debug_mode = 'Y' THEN
3254 pa_debug.g_err_stage:='Returned from pa_task_assignment_utils.Validate_Create_Assignment';
3255 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3256 END IF;
3257
3258 l_trace_stage := 430;
3259 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3260
3261 -----------------------------------------------------------------------
3262 -- Check if the name of records in l_del_task_level_rec_code_tbl is same
3263 -- as the number of records in p_task_elem_version_id_tbl - Starts
3264 -----------------------------------------------------------------------
3265
3266 l_trace_stage := 460;
3267 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3268 -----------------------------------------------------------------------
3269 -- The resource data tables shall be re-populated by the in out parameter
3270 -- parameter l_resource_rec_tbl, in the API call pa_task_assignment_utils.
3271 -- Validate_Create_Assignment above. So deleting alll existing data from
3272 -- the resource data tables.
3273 -----------------------------------------------------------------------
3274
3275 IF l_debug_mode = 'Y' THEN
3276 pa_debug.g_err_stage:='Deleting Data from all resource PLSql tables';
3277 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3278 END IF;
3279
3280 l_trace_stage := 450;
3281 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3282
3283 -----------------------------------------------------------------------
3284 -- Repopulating all the resource data tables from the output parameter
3285 -- table l_resource_rec_tbl of the above API call pa_task_assignment_utils.
3286 -- Validate_Create_Assignment
3287 -----------------------------------------------------------------------
3288
3289 IF l_debug_mode = 'Y' THEN
3290 pa_debug.g_err_stage:='Populating resource data tables from the output parameter table l_resource_rec_tbl';
3291 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3292 END IF;
3293
3294 FOR i IN l_resource_rec_tbl.FIRST .. l_resource_rec_tbl.LAST LOOP
3295 l_trace_stage := 460;
3296 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3297
3298 IF l_resource_rec_tbl.EXISTS(i) THEN
3299
3300 IF l_resource_rec_tbl(i).resource_list_member_id = FND_API.G_MISS_NUM THEN
3301 l_eligible_rlm_ids_tbl(i) := NULL;
3302 ELSE
3303 l_eligible_rlm_ids_tbl(i) := l_resource_rec_tbl(i).resource_list_member_id;
3304 END IF;
3305
3306 IF l_resource_rec_tbl(i).resource_class_flag = FND_API.G_MISS_CHAR THEN
3307 l_resource_class_flag_tbl(i) := NULL;
3308 ELSE
3309 l_resource_class_flag_tbl(i) := l_resource_rec_tbl(i).resource_class_flag;
3310 END IF;
3311
3312 IF l_resource_rec_tbl(i).resource_class_code = FND_API.G_MISS_CHAR THEN
3313 l_resource_class_code_tbl(i) := NULL;
3314 ELSE
3315 l_resource_class_code_tbl(i) := l_resource_rec_tbl(i).resource_class_code;
3316 END IF;
3317
3318 IF l_resource_rec_tbl(i).resource_class_id = FND_API.G_MISS_NUM THEN
3319 l_resource_class_id_tbl(i) := NULL;
3320 ELSE
3321 l_resource_class_id_tbl(i) := l_resource_rec_tbl(i).resource_class_id;
3322 END IF;
3323
3324 IF l_resource_rec_tbl(i).res_type_code = FND_API.G_MISS_CHAR THEN
3325 l_res_type_code_tbl(i) := NULL;
3326 ELSE
3327 l_res_type_code_tbl(i) := l_resource_rec_tbl(i).res_type_code;
3328 END IF;
3329
3330 IF l_resource_rec_tbl(i).person_id = FND_API.G_MISS_NUM THEN
3331 l_person_id_tbl(i) := NULL;
3332 ELSE
3333 l_person_id_tbl(i) := l_resource_rec_tbl(i).person_id;
3334 END IF;
3335
3336 IF l_resource_rec_tbl(i).job_id = FND_API.G_MISS_NUM THEN
3337 l_job_id_tbl(i) := NULL;
3338 ELSE
3339 l_job_id_tbl(i) := l_resource_rec_tbl(i).job_id;
3340 END IF;
3341
3342 IF l_resource_rec_tbl(i).person_type_code = FND_API.G_MISS_CHAR THEN
3343 l_person_type_code_tbl(i) := NULL;
3344 ELSE
3345 l_person_type_code_tbl(i) := l_resource_rec_tbl(i).person_type_code;
3346 END IF;
3347
3348 IF l_resource_rec_tbl(i).bom_resource_id = FND_API.G_MISS_NUM THEN
3349 l_bom_resource_id_tbl(i) := NULL;
3350 ELSE
3351 l_bom_resource_id_tbl(i) := l_resource_rec_tbl(i).bom_resource_id;
3352 END IF;
3353
3354 IF l_resource_rec_tbl(i).inventory_item_id = FND_API.G_MISS_NUM THEN
3355 l_inventory_item_id_tbl(i) := NULL;
3356 ELSE
3357 l_inventory_item_id_tbl(i) := l_resource_rec_tbl(i).inventory_item_id;
3358 END IF;
3359
3360 IF l_resource_rec_tbl(i).item_category_id = FND_API.G_MISS_NUM THEN
3361 l_item_category_id_tbl(i) := NULL;
3362 ELSE
3363 l_item_category_id_tbl(i) := l_resource_rec_tbl(i).item_category_id;
3364 END IF;
3365
3366 IF l_resource_rec_tbl(i).project_role_id = FND_API.G_MISS_NUM THEN
3367 l_project_role_id_tbl(i) := NULL;
3368 ELSE
3369 l_project_role_id_tbl(i) := l_resource_rec_tbl(i).project_role_id;
3370 END IF;
3371
3372 IF l_resource_rec_tbl(i).organization_id = FND_API.G_MISS_NUM THEN
3373 l_organization_id_tbl(i) := NULL;
3374 ELSE
3375 l_organization_id_tbl(i) := l_resource_rec_tbl(i).organization_id;
3376 END IF;
3377
3378 IF l_resource_rec_tbl(i).fc_res_type_code = FND_API.G_MISS_CHAR THEN
3379 l_fc_res_type_code_tbl(i) := NULL;
3380 ELSE
3381 l_fc_res_type_code_tbl(i) := l_resource_rec_tbl(i).fc_res_type_code;
3382 END IF;
3383
3384 IF l_resource_rec_tbl(i).expenditure_type = FND_API.G_MISS_CHAR THEN
3385 l_expenditure_type_tbl(i) := NULL;
3386 ELSE
3387 l_expenditure_type_tbl(i) := l_resource_rec_tbl(i).expenditure_type;
3388 END IF;
3389
3390 IF l_resource_rec_tbl(i).expenditure_category = FND_API.G_MISS_CHAR THEN
3391 l_expenditure_category_tbl(i) := NULL;
3392 ELSE
3393 l_expenditure_category_tbl(i) := l_resource_rec_tbl(i).expenditure_category;
3394 END IF;
3395
3396 IF l_resource_rec_tbl(i).event_type = FND_API.G_MISS_CHAR THEN
3397 l_event_type_tbl(i) := NULL;
3398 ELSE
3399 l_event_type_tbl(i) := l_resource_rec_tbl(i).event_type;
3400 END IF;
3401
3402 IF l_resource_rec_tbl(i).revenue_category_code = FND_API.G_MISS_CHAR THEN
3403 l_revenue_category_code_tbl(i) := NULL;
3404 ELSE
3405 l_revenue_category_code_tbl(i) := l_resource_rec_tbl(i).revenue_category_code;
3406 END IF;
3407
3408 IF l_resource_rec_tbl(i).supplier_id = FND_API.G_MISS_NUM THEN
3409 l_supplier_id_tbl(i) := NULL;
3410 ELSE
3411 l_supplier_id_tbl(i) := l_resource_rec_tbl(i).supplier_id;
3412 END IF;
3413
3414 IF l_resource_rec_tbl(i).unit_of_measure = FND_API.G_MISS_CHAR THEN
3415 l_unit_of_measure_tbl(i) := NULL;
3416 ELSE
3417 l_unit_of_measure_tbl(i) := l_resource_rec_tbl(i).unit_of_measure;
3418 END IF;
3419
3420 IF l_resource_rec_tbl(i).spread_curve_id = FND_API.G_MISS_NUM THEN
3421 l_spread_curve_id_tbl(i) := NULL;
3422 ELSE
3423 l_spread_curve_id_tbl(i) := l_resource_rec_tbl(i).spread_curve_id;
3424 END IF;
3425
3426 IF l_resource_rec_tbl(i).etc_method_code = FND_API.G_MISS_CHAR THEN
3427 l_etc_method_code_tbl(i) := NULL;
3428 ELSE
3429 l_etc_method_code_tbl(i) := l_resource_rec_tbl(i).etc_method_code;
3430 END IF;
3431
3432 IF l_resource_rec_tbl(i).mfc_cost_type_id = FND_API.G_MISS_NUM THEN
3433 l_mfc_cost_type_id_tbl(i) := NULL;
3434 ELSE
3435 l_mfc_cost_type_id_tbl(i) := l_resource_rec_tbl(i).mfc_cost_type_id;
3436 END IF;
3437
3438 IF l_resource_rec_tbl(i).procure_resource_flag = FND_API.G_MISS_CHAR THEN
3439 l_procure_resource_flag_tbl(i) := NULL;
3440 ELSE
3441 l_procure_resource_flag_tbl(i) := l_resource_rec_tbl(i).procure_resource_flag;
3442 END IF;
3443
3444 IF l_resource_rec_tbl(i).incurred_by_res_flag = FND_API.G_MISS_CHAR THEN
3445 l_incurred_by_res_flag_tbl(i) := NULL;
3446 ELSE
3447 l_incurred_by_res_flag_tbl(i) := l_resource_rec_tbl(i).incurred_by_res_flag;
3448 END IF;
3449
3450 IF l_resource_rec_tbl(i).Incur_by_res_class_code = FND_API.G_MISS_CHAR THEN
3451 l_Incur_by_res_class_code_tbl(i) := NULL;
3452 ELSE
3453 l_Incur_by_res_class_code_tbl(i) := l_resource_rec_tbl(i).Incur_by_res_class_code;
3454 END IF;
3455
3456 IF l_resource_rec_tbl(i).Incur_by_role_id = FND_API.G_MISS_NUM THEN
3457 l_Incur_by_role_id_tbl(i) := NULL;
3458 ELSE
3459 l_Incur_by_role_id_tbl(i) := l_resource_rec_tbl(i).Incur_by_role_id;
3460 END IF;
3461
3462 IF l_resource_rec_tbl(i).named_role = FND_API.G_MISS_CHAR THEN
3463 l_named_role_tbl(i) := NULL;
3464 ELSE
3465 l_named_role_tbl(i) := l_resource_rec_tbl(i).named_role;
3466 END IF;
3467
3468 IF l_resource_rec_tbl(i).non_labor_resource = FND_API.G_MISS_CHAR THEN
3469 l_non_labor_resource_tbl(i) := NULL;
3470 ELSE
3471 l_non_labor_resource_tbl(i) := l_resource_rec_tbl(i).non_labor_resource;
3472 END IF;
3473
3474 IF l_resource_rec_tbl(i).resource_assignment_id = FND_API.G_MISS_NUM THEN
3475 l_resource_assignment_id_tbl(i) := NULL;
3476 ELSE
3477 l_resource_assignment_id_tbl(i) := l_resource_rec_tbl(i).resource_assignment_id;
3478 END IF;
3479
3480 IF l_resource_rec_tbl(i).assignment_description = FND_API.G_MISS_CHAR THEN
3481 l_assignment_description_tbl(i) := NULL;
3482 ELSE
3483 l_assignment_description_tbl(i) := l_resource_rec_tbl(i).assignment_description;
3484 END IF;
3485
3486 IF l_resource_rec_tbl(i).planning_resource_alias = FND_API.G_MISS_CHAR THEN
3487 l_planning_resource_alias_tbl(i) := NULL;
3488 ELSE
3489 l_planning_resource_alias_tbl(i) := l_resource_rec_tbl(i).planning_resource_alias;
3490 END IF;
3491
3492 IF l_resource_rec_tbl(i).resource_name = FND_API.G_MISS_CHAR THEN
3493 l_resource_name_tbl(i) := NULL;
3494 ELSE
3495 l_resource_name_tbl(i) := l_resource_rec_tbl(i).resource_name;
3496 END IF;
3497
3498 IF l_resource_rec_tbl(i).project_role_name = FND_API.G_MISS_CHAR THEN
3499 l_project_role_name_tbl(i) := NULL;
3500 ELSE
3501 l_project_role_name_tbl(i) := l_resource_rec_tbl(i).project_role_name;
3502 END IF;
3503
3504 IF l_resource_rec_tbl(i).organization_name = FND_API.G_MISS_CHAR THEN
3505 l_organization_name_tbl(i) := NULL;
3506 ELSE
3507 l_organization_name_tbl(i) := l_resource_rec_tbl(i).organization_name;
3508 END IF;
3509
3510 IF l_resource_rec_tbl(i).financial_category_code = FND_API.G_MISS_CHAR THEN
3511 l_financial_category_code_tbl(i) := NULL;
3512 ELSE
3513 l_financial_category_code_tbl(i) := l_resource_rec_tbl(i).financial_category_code;
3514 END IF;
3515
3516 IF l_resource_rec_tbl(i).project_assignment_id = FND_API.G_MISS_NUM THEN
3517 l_project_assignment_id_tbl(i) := NULL;
3518 ELSE
3519 l_project_assignment_id_tbl(i) := l_resource_rec_tbl(i).project_assignment_id;
3520 END IF;
3521
3522 -- gboomina modified for bug 8586393 - start
3523 /*IF l_resource_rec_tbl(i).use_task_schedule_flag = FND_API.G_MISS_CHAR THEN
3524 l_use_task_schedule_flag_tbl(i) := NULL;
3525 ELSE
3526 l_use_task_schedule_flag_tbl(i) := l_resource_rec_tbl(i).use_task_schedule_flag;
3527 END IF; */
3528 --OPEN C2(p_project_id);
3529 --FETCH C2 INTO l_use_task_schedule_flag;
3530 --CLOSE C2;
3531 --l_use_task_schedule_flag_tbl(i) := l_use_task_schedule_flag;
3532 -- gboomina modified for bug 8586393 - end
3533
3534 -- rbruno bug 9468665 - start
3535 -- set the default value only if use_task_schedule_flag value is G_MISS_CHAR
3536 -- SPOKANAT for Bug 9759832 - start
3537 IF l_resource_rec_tbl(i).use_task_schedule_flag = FND_API.G_MISS_CHAR then
3538 l_use_task_schedule_flag_tbl(i) := NULL;
3539 ELSE
3540 l_use_task_schedule_flag_tbl(i) := l_resource_rec_tbl(i).use_task_schedule_flag;
3541 END IF;
3542 -- SPOKANAT for Bug 9759832 - end
3543 -- rbruno bug 9468665 - end
3544
3545 IF l_resource_rec_tbl(i).planning_start_date = FND_API.G_MISS_DATE THEN
3546 l_planning_start_date_tbl(i) := NULL;
3547 ELSE
3548 l_planning_start_date_tbl(i) := l_resource_rec_tbl(i).planning_start_date;
3549 END IF;
3550
3551 IF l_resource_rec_tbl(i).planning_end_date = FND_API.G_MISS_DATE THEN
3552 l_planning_end_date_tbl(i) := NULL;
3553 ELSE
3554 l_planning_end_date_tbl(i) := l_resource_rec_tbl(i).planning_end_date;
3555 END IF;
3556
3557 IF l_resource_rec_tbl(i).schedule_start_date = FND_API.G_MISS_DATE THEN
3558 l_schedule_start_date_tbl(i) := NULL;
3559 ELSE
3560 l_schedule_start_date_tbl(i) := l_resource_rec_tbl(i).schedule_start_date;
3561 END IF;
3562
3563 IF l_resource_rec_tbl(i).schedule_end_date = FND_API.G_MISS_DATE THEN
3564 l_schedule_end_date_tbl(i) := NULL;
3565 ELSE
3566 l_schedule_end_date_tbl(i) := l_resource_rec_tbl(i).schedule_end_date;
3567 END IF;
3568
3569 IF l_resource_rec_tbl(i).supplier_name = FND_API.G_MISS_CHAR THEN
3570 l_supplier_name_tbl(i) := NULL;
3571 ELSE
3572 l_supplier_name_tbl(i) := l_resource_rec_tbl(i).supplier_name;
3573 END IF;
3574
3575 IF l_resource_rec_tbl(i).financial_category_name = FND_API.G_MISS_CHAR THEN
3576 l_financial_category_name_tbl(i) := NULL;
3577 ELSE
3578 l_financial_category_name_tbl(i) := l_resource_rec_tbl(i).financial_category_name;
3579 END IF;
3580
3581 IF l_resource_rec_tbl(i).sp_fixed_date = FND_API.G_MISS_DATE THEN
3582 l_sp_fixed_date_tbl(i) := NULL;
3583 ELSE
3584 l_sp_fixed_date_tbl(i) := l_resource_rec_tbl(i).sp_fixed_date;
3585 -- Added validation rule for sp_fixed_date to lie between planning start date and planning end date for
3586 -- fixed curve spread curve id. - Bug 3607061 Starts. Please NOTE that fixed date spread curve id is
3587 -- SEEDED as 6, so we are able to hard code it below
3588
3589 IF l_debug_mode = 'Y' THEN
3590 pa_debug.g_err_stage :='l_spread_curve_id_tbl - '||l_spread_curve_id_tbl(i);
3591 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3592
3593 pa_debug.g_err_stage :='l_sp_fixed_date_tbl'||l_sp_fixed_date_tbl(i);
3594 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3595
3596 pa_debug.g_err_stage :='l_planning_start_date_tbl'||l_planning_start_date_tbl(i);
3597 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3598
3599 pa_debug.g_err_stage :='l_planning_end_date_tbl'||l_planning_end_date_tbl(i);
3600 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3601 END IF;
3602
3603 IF ((l_spread_curve_id_tbl(i) = l_fixed_date_sp_id) AND
3604 (l_sp_fixed_date_tbl(i) IS NOT NULL) AND
3605 (l_sp_fixed_date_tbl(i) NOT BETWEEN l_planning_start_date_tbl(i) AND l_planning_end_date_tbl(i)))THEN
3606 IF l_debug_mode = 'Y' THEN
3607 pa_debug.g_err_stage :='Sp Fixed Date not between planning start date and End Date';
3608 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
3609 END IF;
3610 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3611 p_msg_name => 'PA_FP_SP_FIXED_DATE_OUT');
3612 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3613 END IF;
3614 -- Bug 3607061 Ends
3615 END IF;
3616
3617 IF l_resource_rec_tbl(i).burdened_rate_override = FND_API.G_MISS_NUM THEN
3618 l_burdened_rate_override_tbl(i) := NULL;
3619 ELSE
3620 l_burdened_rate_override_tbl(i) := l_resource_rec_tbl(i).burdened_rate_override;
3621 END IF;
3622
3623 IF l_resource_rec_tbl(i).cost_rate_override = FND_API.G_MISS_NUM THEN
3624 l_cost_rate_override_tbl(i) := NULL;
3625 ELSE
3626 l_cost_rate_override_tbl(i) := l_resource_rec_tbl(i).cost_rate_override;
3627 END IF;
3628
3629 IF l_resource_rec_tbl(i).billable_percent = FND_API.G_MISS_NUM THEN
3630 l_billable_percent_tbl(i) := NULL;
3631 ELSE
3632 l_billable_percent_tbl(i) := l_resource_rec_tbl(i).billable_percent;
3633 END IF;
3634
3635 IF l_resource_rec_tbl(i).override_currency_code = FND_API.G_MISS_CHAR THEN
3636 l_override_currency_code_tbl(i) := NULL;
3637 ELSE
3638 l_override_currency_code_tbl(i) := l_resource_rec_tbl(i).override_currency_code;
3639 END IF;
3640
3641 IF l_resource_rec_tbl(i).total_quantity = FND_API.G_MISS_NUM THEN
3642 l_total_quantity_tbl(i) := NULL;
3643 ELSE
3644 l_total_quantity_tbl(i) := l_resource_rec_tbl(i).total_quantity;
3645 END IF;
3646
3647 IF l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY = FND_API.G_MISS_CHAR THEN
3648 l_ATTRIBUTE_CATEGORY_tbl(i) := NULL;
3649 ELSE
3650 l_ATTRIBUTE_CATEGORY_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY;
3651 END IF;
3652
3653 IF l_resource_rec_tbl(i).ATTRIBUTE1 = FND_API.G_MISS_CHAR THEN
3654 l_ATTRIBUTE1_tbl(i) := NULL;
3655 ELSE
3656 l_ATTRIBUTE1_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE1;
3657 END IF;
3658
3659 IF l_resource_rec_tbl(i).ATTRIBUTE2 = FND_API.G_MISS_CHAR THEN
3660 l_ATTRIBUTE2_tbl(i) := NULL;
3661 ELSE
3662 l_ATTRIBUTE2_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE2;
3663 END IF;
3664
3665 IF l_resource_rec_tbl(i).ATTRIBUTE3 = FND_API.G_MISS_CHAR THEN
3666 l_ATTRIBUTE3_tbl(i) := NULL;
3667 ELSE
3668 l_ATTRIBUTE3_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE3;
3669 END IF;
3670
3671 IF l_resource_rec_tbl(i).ATTRIBUTE4 = FND_API.G_MISS_CHAR THEN
3672 l_ATTRIBUTE4_tbl(i) := NULL;
3673 ELSE
3674 l_ATTRIBUTE4_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE4;
3675 END IF;
3676
3677 IF l_resource_rec_tbl(i).ATTRIBUTE5 = FND_API.G_MISS_CHAR THEN
3678 l_ATTRIBUTE5_tbl(i) := NULL;
3679 ELSE
3680 l_ATTRIBUTE5_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE5;
3681 END IF;
3682
3683 IF l_resource_rec_tbl(i).ATTRIBUTE6 = FND_API.G_MISS_CHAR THEN
3684 l_ATTRIBUTE6_tbl(i) := NULL;
3685 ELSE
3686 l_ATTRIBUTE6_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE6;
3687 END IF;
3688
3689 IF l_resource_rec_tbl(i).ATTRIBUTE7 = FND_API.G_MISS_CHAR THEN
3690 l_ATTRIBUTE7_tbl(i) := NULL;
3691 ELSE
3692 l_ATTRIBUTE7_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE7;
3693 END IF;
3694
3695 IF l_resource_rec_tbl(i).ATTRIBUTE8 = FND_API.G_MISS_CHAR THEN
3696 l_ATTRIBUTE8_tbl(i) := NULL;
3697 ELSE
3698 l_ATTRIBUTE8_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE8;
3699 END IF;
3700
3701 IF l_resource_rec_tbl(i).ATTRIBUTE9 = FND_API.G_MISS_CHAR THEN
3702 l_ATTRIBUTE9_tbl(i) := NULL;
3703 ELSE
3704 l_ATTRIBUTE9_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE9;
3705 END IF;
3706
3707 IF l_resource_rec_tbl(i).ATTRIBUTE10 = FND_API.G_MISS_CHAR THEN
3708 l_ATTRIBUTE10_tbl(i) := NULL;
3709 ELSE
3710 l_ATTRIBUTE10_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE10;
3711 END IF;
3712
3713 IF l_resource_rec_tbl(i).ATTRIBUTE11 = FND_API.G_MISS_CHAR THEN
3714 l_ATTRIBUTE11_tbl(i) := NULL;
3715 ELSE
3716 l_ATTRIBUTE11_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE11;
3717 END IF;
3718
3719 IF l_resource_rec_tbl(i).ATTRIBUTE12 = FND_API.G_MISS_CHAR THEN
3720 l_ATTRIBUTE12_tbl(i) := NULL;
3721 ELSE
3722 l_ATTRIBUTE12_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE12;
3723 END IF;
3724
3725 IF l_resource_rec_tbl(i).ATTRIBUTE13 = FND_API.G_MISS_CHAR THEN
3726 l_ATTRIBUTE13_tbl(i) := NULL;
3727 ELSE
3728 l_ATTRIBUTE13_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE13;
3729 END IF;
3730
3731 IF l_resource_rec_tbl(i).ATTRIBUTE14 = FND_API.G_MISS_CHAR THEN
3732 l_ATTRIBUTE14_tbl(i) := NULL;
3733 ELSE
3734 l_ATTRIBUTE14_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE14;
3735 END IF;
3736
3737 IF l_resource_rec_tbl(i).ATTRIBUTE15 = FND_API.G_MISS_CHAR THEN
3738 l_ATTRIBUTE15_tbl(i) := NULL;
3739 ELSE
3740 l_ATTRIBUTE15_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE15;
3741 END IF;
3742
3743 IF l_resource_rec_tbl(i).ATTRIBUTE16 = FND_API.G_MISS_CHAR THEN
3744 l_ATTRIBUTE16_tbl(i) := NULL;
3745 ELSE
3746 l_ATTRIBUTE16_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE16;
3747 END IF;
3748
3749 IF l_resource_rec_tbl(i).ATTRIBUTE17 = FND_API.G_MISS_CHAR THEN
3750 l_ATTRIBUTE17_tbl(i) := NULL;
3751 ELSE
3752 l_ATTRIBUTE17_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE17;
3753 END IF;
3754
3755 IF l_resource_rec_tbl(i).ATTRIBUTE18 = FND_API.G_MISS_CHAR THEN
3756 l_ATTRIBUTE18_tbl(i) := NULL;
3757 ELSE
3758 l_ATTRIBUTE18_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE18;
3759 END IF;
3760
3761 IF l_resource_rec_tbl(i).ATTRIBUTE19 = FND_API.G_MISS_CHAR THEN
3762 l_ATTRIBUTE19_tbl(i) := NULL;
3763 ELSE
3764 l_ATTRIBUTE19_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE19;
3765 END IF;
3766
3767 IF l_resource_rec_tbl(i).ATTRIBUTE20 = FND_API.G_MISS_CHAR THEN
3768 l_ATTRIBUTE20_tbl(i) := NULL;
3769 ELSE
3770 l_ATTRIBUTE20_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE20;
3771 END IF;
3772 IF l_resource_rec_tbl(i).ATTRIBUTE21 = FND_API.G_MISS_CHAR THEN
3773 l_ATTRIBUTE21_tbl(i) := NULL;
3774 ELSE
3775 l_ATTRIBUTE21_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE21;
3776 END IF;
3777
3778 IF l_resource_rec_tbl(i).ATTRIBUTE22 = FND_API.G_MISS_CHAR THEN
3779 l_ATTRIBUTE22_tbl(i) := NULL;
3780 ELSE
3781 l_ATTRIBUTE22_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE22;
3782 END IF;
3783
3784 IF l_resource_rec_tbl(i).ATTRIBUTE23 = FND_API.G_MISS_CHAR THEN
3785 l_ATTRIBUTE23_tbl(i) := NULL;
3786 ELSE
3787 l_ATTRIBUTE23_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE23;
3788 END IF;
3789
3790 IF l_resource_rec_tbl(i).ATTRIBUTE24 = FND_API.G_MISS_CHAR THEN
3791 l_ATTRIBUTE24_tbl(i) := NULL;
3792 ELSE
3793 l_ATTRIBUTE24_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE24;
3794 END IF;
3795
3796 IF l_resource_rec_tbl(i).ATTRIBUTE25 = FND_API.G_MISS_CHAR THEN
3797 l_ATTRIBUTE25_tbl(i) := NULL;
3798 ELSE
3799 l_ATTRIBUTE25_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE25;
3800 END IF;
3801
3802 IF l_resource_rec_tbl(i).ATTRIBUTE26 = FND_API.G_MISS_CHAR THEN
3803 l_ATTRIBUTE26_tbl(i) := NULL;
3804 ELSE
3805 l_ATTRIBUTE26_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE26;
3806 END IF;
3807
3808 IF l_resource_rec_tbl(i).ATTRIBUTE27 = FND_API.G_MISS_CHAR THEN
3809 l_ATTRIBUTE27_tbl(i) := NULL;
3810 ELSE
3811 l_ATTRIBUTE27_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE27;
3812 END IF;
3813
3814 IF l_resource_rec_tbl(i).ATTRIBUTE28 = FND_API.G_MISS_CHAR THEN
3815 l_ATTRIBUTE28_tbl(i) := NULL;
3816 ELSE
3817 l_ATTRIBUTE28_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE28;
3818 END IF;
3819
3820 IF l_resource_rec_tbl(i).ATTRIBUTE29 = FND_API.G_MISS_CHAR THEN
3821 l_ATTRIBUTE29_tbl(i) := NULL;
3822 ELSE
3823 l_ATTRIBUTE29_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE29;
3824 END IF;
3825
3826 IF l_resource_rec_tbl(i).ATTRIBUTE30 = FND_API.G_MISS_CHAR THEN
3827 l_ATTRIBUTE30_tbl(i) := NULL;
3828 ELSE
3829 l_ATTRIBUTE30_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE30;
3830 END IF;
3831
3832 IF l_resource_rec_tbl(i).UNPLANNED_FLAG = FND_API.G_MISS_CHAR THEN
3833 l_UNPLANNED_FLAG_TBL(i) := NULL;
3834 ELSE
3835 l_UNPLANNED_FLAG_TBL(i) := l_resource_rec_tbl(i).UNPLANNED_FLAG;
3836 END IF;
3837
3838 IF l_resource_rec_tbl(i).scheduled_delay = FND_API.G_MISS_NUM THEN
3839 l_scheduled_delay(i) := NULL;
3840 ELSE
3841 l_scheduled_delay(i) := l_resource_rec_tbl(i).scheduled_delay;
3842 END IF;
3843
3844
3845 END IF;
3846 l_trace_stage := 470;
3847 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3848 END LOOP;
3849 l_trace_stage := 480;
3850 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3851
3852 ----------------------------------------------------------------------------
3853 -- Now derive the resource_assignment id for all the task_element_version_id
3854 -- based on the resource_class_code(l_del_task_level_rec_code_tbl) to be
3855 -- 'PEOPLE'.
3856 -- The resource_assignment_id is bulk collected into a PLSql table and then
3857 -- All data is deleted in bulk from pa_budget_lines and pa_resource_assignment
3858 -- based on the resource_assignment_id
3859
3860 --***************************************************************************************
3861 -- Bug 3749516 resource_class_code(l_del_task_level_rec_code_tbl) will not be 'EQUIPMENT'
3862 -- REMOVING CODE BELOW FOR SAME
3863 --***************************************************************************************
3864 ------------------------------------------------------------------------------
3865
3866 IF l_debug_mode = 'Y' THEN
3867 pa_debug.g_err_stage:='data is deleted in bulk from pa_budget_lines and pa_resource_assignment based on the resource_assignment_id ';
3868 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3869 END IF;
3870
3871 END IF;
3872 --------------------------------------------------------------------------
3873 -- Processing for p_context = TASK_ASSIGNMENTS End Here
3874 --------------------------------------------------------------------------
3875
3876 ------------------------------------------------------------------------------------------------
3877 -- Deriving Time Phased Code based on the budget version id and setting the spread amount flad
3878 -------------------------------------------------------------------------------------------------
3879 IF l_debug_mode = 'Y' THEN
3880 pa_debug.g_err_stage:='Deriving time phased code ';
3881 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3882 END IF;
3883
3884 l_time_phased_code := pa_fin_plan_utils.get_time_phased_code(p_budget_version_id);
3885
3886 IF l_debug_mode = 'Y' THEN
3887 pa_debug.g_err_stage:='Deriving time phased code l_time_phased_code: '||l_time_phased_code;
3888 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3889 END IF;
3890 l_trace_stage := 550;
3891 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3892
3893 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
3894 l_spread_amounts_for_ver := 'Y';
3895 ELSE
3896 l_spread_amounts_for_ver := 'N';
3897 END IF;
3898
3899 l_trace_stage := 560;
3900 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3901
3902 ------------------------------------------------------------------------------------------------
3903 -- Deriving Proj Element Id based on element version id
3904 -------------------------------------------------------------------------------------------------
3905 IF l_debug_mode = 'Y' THEN
3906 pa_debug.g_err_stage:='Deriving Proj Element Id based on element version id';
3907 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3908 END IF;
3909
3910 FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
3911 l_trace_stage := 570;
3912 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3913 IF p_task_elem_version_id_tbl(i) <> 0 THEN
3914 OPEN c_proj_element_id(p_task_elem_version_id_tbl(i));
3915 l_trace_stage := 580;
3916 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3917 FETCH c_proj_element_id INTO l_proj_element_id;
3918 IF l_debug_mode = 'Y' THEN
3919 pa_debug.g_err_stage:='Deriving Proj Element Id based on element version id l_proj_element_id : '|| l_proj_element_id;
3920 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3921 END IF;
3922 l_proj_element_id_tbl(i) := l_proj_element_id;
3923 CLOSE c_proj_element_id;
3924
3925 --Bug#16200605 For CBS enabled project, need to validate validate whether
3926 --for the provide cost code alternate task id is generated with the
3927 -- corresponding task.
3928 IF (l_prj_cbs_enabled = 'Y' AND p_cbs_element_id_tbl.count>0) THEN
3929 OPEN check_cbs_alt_tsk_gen(l_proj_element_id, p_cbs_element_id_tbl(i));
3930 FETCH check_cbs_alt_tsk_gen INTO L_ALT_TSK_TEMP;
3931 CLOSE check_cbs_alt_tsk_gen;
3932 IF L_ALT_TSK_TEMP = 'Y' THEN
3933 l_alt_tsk_valid := 'Y'; -- CBS enabled
3934 ELSE
3935 l_alt_tsk_valid := 'N'; -- CBS disabled
3936 END IF;
3937 IF l_alt_tsk_valid = 'N' THEN
3938 IF l_debug_mode = 'Y' THEN
3939 pa_debug.g_err_stage:='Cost Code for the given task is not valid : '|| l_proj_element_id;
3940 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3941 END IF;
3942 END IF;
3943 END IF;
3944
3945 ELSE
3946 l_proj_element_id_tbl(i):=0;
3947 END IF;
3948 l_trace_stage := 590;
3949 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3950 END LOOP;
3951
3952 IF l_debug_mode = 'Y' THEN
3953 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;
3954 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3955 END IF;
3956 l_trace_stage := 600;
3957 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3958
3959 ---------------------------------------------------------------
3960 -- For p_context = BUDGET or FORECAST
3961 -- Deriving start date and end date for task_element_version_id
3962 ---------------------------------------------------------------
3963 IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
3964 l_trace_stage := 610;
3965 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3966
3967 IF l_debug_mode = 'Y' THEN
3968 pa_debug.g_err_stage:='Deriving start date for task_element_version_ids';
3969 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
3970 END IF;
3971
3972 -- Bug 3793623 - Added new params p_planning_start_date_tbl and p_planning_end_date_tbl
3973 PA_PLANNING_TRANSACTION_UTILS.get_default_planning_dates
3974 ( p_project_id => p_project_id
3975 ,p_element_version_id_tbl => p_task_elem_version_id_tbl
3976 ,p_project_structure_version_id => PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id => p_project_id )
3977 ,p_planning_start_date_tbl => p_planning_start_date_tbl
3978 ,p_planning_end_date_tbl => p_planning_end_date_tbl
3979 ,x_planning_start_date_tbl => l_start_date_tbl
3980 ,x_planning_end_date_tbl => l_compl_date_tbl
3981 ,x_msg_data => x_msg_data
3982 ,x_msg_count => x_msg_count
3983 ,x_return_status => x_return_status );
3984
3985 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3986
3987 IF l_debug_mode = 'Y' THEN
3988 pa_debug.g_err_stage:='Called API pafpptub.get_default_planning_dates returned error';
3989 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ',pa_debug.g_err_stage, 3);
3990 END IF;
3991 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
3992 END IF;
3993
3994 l_trace_stage := 710;
3995 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3996 END IF;
3997 l_trace_stage := 720;
3998 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
3999
4000 -----------------------------------------------------------------------------------------------------
4001 -- BULK INSERTING DATA INTO PA_RESOURCE_ASSIGNMENTS--------------------------------------------------
4002 -----------------------------------------------------------------------------------------------------
4003 -- Loop throught the task element version id table and do a bulk insert in to pa_resource_assignments
4004 -- 1. In the context of WORKPLAN, Loop for p_task_element_version_id_tbl, and insert into pa_resource
4005 -- assignment. l_elligble_rlm_ids will only have rlm id for 'PEOPLE' resource class. so a local
4006 -- index l_ppl_index(=1) is used for resource data. Data is inserted in pa_resource_assignments
4007 -- only if quanity dat ais present. this check is done and eligible data to be inserted is fetched
4008 -- in local plsql tables.
4009 -- -- Bug 3749516 removing equipment_quantity reference - refer prev. code in source control for
4010 -- -- reference
4011 -- 2. Else if the context is not workplan then,records is inserted
4012 -- irrespective of the value of quantity.The bulk insert procedure in pa_fp_elements_pub is used
4013 -- for this. If l_spread_amts_for_ver = 'Y'For each record inserted prepare a pl/sql table containing
4014 -- 'Y' if the record is inserted and the amount exists(note that this amount can be raw cost, burdened
4015 -- cost, quantity in the case of Budget/Forecast and quantity in the case of Task Assignment).If the
4016 -- amount does not exist then the pl/sql table should contain 'N'. This will be used as the paramter
4017 -- for p_spread_amt_flags parameter in the calculate API (A separate loop may be required for this)
4018 -- Please note that in the context of TASK ASSIGNMENT, if some value is being returned by the TA
4019 -- validation API then that value should be used.
4020 -----------------------------------------------------------------------------------------------------
4021
4022 IF l_debug_mode = 'Y' THEN
4023 pa_debug.g_err_stage:='BULK INSERTING DATA INTO PA_RESOURCE_ASSIGNMENTS ';
4024 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4025 END IF;
4026
4027 l_call_calc_api := 'N';
4028
4029 OPEN get_pc_code;
4030 FETCH get_pc_code
4031 INTO l_proj_curr_code, l_proj_func_curr_code;
4032 CLOSE get_pc_code;
4033
4034 ---------------------------------------------------------------------
4035 -- These _rlm tables have been extented to the length of rlm_id table
4036 -- and they will be used for insert in Budget/Forecast context when
4037 -- One to One Mapping Flag is passed as Y
4038 -- Bug 3719918 and Bug 3665097
4039 ----------------------------------------------------------------------
4040 IF (p_one_to_one_mapping_flag = 'Y' AND
4041 (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
4042 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
4043 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST))THEN
4044 l_task_elem_rlm_tbl := p_task_elem_version_id_tbl;
4045 l_proj_elem_rlm_tbl := l_proj_element_id_tbl;
4046 IF l_prj_cbs_enabled = 'Y' THEN
4047 l_cbs_id_rlm_tbl := p_cbs_element_id_tbl;--Bug#16200605
4048 END IF;
4049 END IF;
4050
4051 -- Bug 3719918
4052 -- If One ONe to One Mapping Flag is Y in Bugdet and Forecast Context then ..
4053 -- there might be duplicate decords for resource assignments present in the
4054 -- IN tables correspoinging to different currency code.
4055 -- Eg. p_one_to_one_mapping_flag - 'Y'
4056 -- Task elem ver id - t1,t1,t2
4057 -- RLM - r1,r1,r2
4058 -- Currency Code - c1,c2,c2
4059 -- in this case ..2 resource assignments are created - t1r1 and t2r2
4060 -- calculate is called for three lines .. t1r1c1,t1r1c2,t2r2c2
4061 -- the below logic is used in BF context and will reduce the input data to the
4062 -- following form -- Task elem ver id : t1,t2 and RLM : r1,r2
4063 -- This will be used in the insert statment for B/F
4064
4065 IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
4066 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST ) THEN
4067
4068 IF (p_one_to_one_mapping_flag = 'Y') THEN
4069
4070 l_bf_start_date_tbl := l_start_date_tbl;
4071 l_bf_compl_date_tbl := l_compl_date_tbl;
4072 l_bf_proj_elem_tbl := l_proj_element_id_tbl;
4073 l_bf_quantity_tbl := p_quantity_tbl;
4074 l_bf_currency_code_tbl := p_currency_code_tbl;
4075 l_bf_raw_cost_tbl := p_raw_cost_tbl;
4076 l_bf_burdened_cost_tbl := p_burdened_cost_tbl;
4077 l_bf_revenue_tbl := p_revenue_tbl;
4078 l_bf_cost_rate_tbl := p_cost_rate_tbl;
4079 l_bf_bill_rate_tbl := p_bill_rate_tbl ;
4080 l_bf_burdened_rate_tbl := p_burdened_rate_tbl;
4081 l_ATTRIBUTE1_tbl := p_attribute1;
4082 l_ATTRIBUTE2_tbl := p_attribute2;
4083 l_ATTRIBUTE3_tbl := p_attribute3;
4084 l_ATTRIBUTE4_tbl := p_attribute4;
4085 l_ATTRIBUTE5_tbl := p_attribute5;
4086 l_ATTRIBUTE6_tbl := p_attribute6;
4087 l_ATTRIBUTE7_tbl := p_attribute7;
4088 l_ATTRIBUTE8_tbl := p_attribute8;
4089 l_ATTRIBUTE9_tbl := p_attribute9;
4090 l_ATTRIBUTE10_tbl := p_attribute10;
4091 l_ATTRIBUTE11_tbl := p_attribute11;
4092 l_ATTRIBUTE12_tbl := p_attribute12;
4093 l_ATTRIBUTE13_tbl := p_attribute13;
4094 l_ATTRIBUTE14_tbl := p_attribute14;
4095 l_ATTRIBUTE15_tbl := p_attribute15;
4096 l_ATTRIBUTE16_tbl := p_attribute16;
4097 l_ATTRIBUTE17_tbl := p_attribute17;
4098 l_ATTRIBUTE18_tbl := p_attribute18;
4099 l_ATTRIBUTE19_tbl := p_attribute19;
4100 l_ATTRIBUTE20_tbl := p_attribute20;
4101 l_ATTRIBUTE21_tbl := p_attribute21;
4102 l_ATTRIBUTE22_tbl := p_attribute22;
4103 l_ATTRIBUTE23_tbl := p_attribute23;
4104 l_ATTRIBUTE24_tbl := p_attribute24;
4105 l_ATTRIBUTE25_tbl := p_attribute25;
4106 l_ATTRIBUTE26_tbl := p_attribute26;
4107 l_ATTRIBUTE27_tbl := p_attribute27;
4108 l_ATTRIBUTE28_tbl := p_attribute28;
4109 l_ATTRIBUTE29_tbl := p_attribute29;
4110 l_ATTRIBUTE30_tbl := p_attribute30;
4111
4112
4113 END IF;--IF (p_one_to_one_mapping_flag = 'Y') THEN
4114
4115 --The l_bf<amounts> tbls should have elements equal in no to l_rlm_id_no_of_rows as these tbls will be used
4116 --in the FORALL insert which will loop thru the rlm id pl/sql tbl. Note that they are used only when
4117 --p_one_to_one_mapping_flag is Y
4118
4119 l_bf_quantity_tbl.extend(l_rlm_id_no_of_rows-l_bf_quantity_tbl.count);
4120 l_bf_currency_code_tbl.extend(l_rlm_id_no_of_rows-l_bf_currency_code_tbl.count);
4121 l_bf_raw_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_raw_cost_tbl.count);
4122 l_bf_burdened_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_burdened_cost_tbl.count);
4123 l_bf_revenue_tbl.extend(l_rlm_id_no_of_rows-l_bf_revenue_tbl.count);
4124 l_bf_cost_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_cost_rate_tbl.count);
4125 l_bf_bill_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_bill_rate_tbl.count);
4126 l_bf_burdened_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_burdened_rate_tbl.count);
4127
4128 END IF; -- IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
4129
4130 ----------------------------------------------------
4131 -- THESE DEBUG MESSAGES ARE BEING PLACED HERE ONLY FOR
4132 -- REFERENCE SO THAT THEY CAN BE USED WHEN AND WHERE
4133 -- NEEDED FOR DEBUGGIND ISSUE WITH BULK DTA INSERTION.
4134 -----------------------------------------------------
4135 /*
4136 pa_debug.g_err_stage:='l_proj_element_id_tbl :'||l_proj_element_id_tbl.COUNT;
4137 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4138 pa_debug.g_err_stage:='l_unit_of_measure_tbl :'||l_unit_of_measure_tbl.COUNT;
4139 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4140 pa_debug.g_err_stage:='p_task_elem_version_id_tbl :'||p_task_elem_version_id_tbl.COUNT;
4141 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4142 pa_debug.g_err_stage:='l_start_date_tbl :'||p_start_date_tbl.COUNT;
4143 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4144 pa_debug.g_err_stage:='l_end_date_tbl :'||p_end_date_tbl.COUNT;
4145 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4146 pa_debug.g_err_stage:='l_etc_method_code_tbl :'||l_etc_method_code_tbl.COUNT;
4147 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4148 pa_debug.g_err_stage:='l_res_type_code_tbl :'||l_res_type_code_tbl.COUNT;
4149 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4150 pa_debug.g_err_stage:='l_fc_res_type_code_tbl :'||l_fc_res_type_code_tbl.COUNT;
4151 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4152 pa_debug.g_err_stage:='l_resource_class_code_tbl :'||l_resource_class_code_tbl.COUNT;
4153 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4154 pa_debug.g_err_stage:='l_organization_id_tbl :'||l_organization_id_tbl.COUNT;
4155 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4156 pa_debug.g_err_stage:='l_job_id_tbl :'||l_job_id_tbl.COUNT;
4157 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4158 pa_debug.g_err_stage:='l_person_id_tbl :'||l_person_id_tbl.COUNT;
4159 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4160 pa_debug.g_err_stage:='l_revenue_category_code_tbl :'||l_revenue_category_code_tbl.COUNT;
4161 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4162 pa_debug.g_err_stage:='l_expenditure_type_tbl :'||l_expenditure_type_tbl.COUNT;
4163 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4164 pa_debug.g_err_stage:='l_expenditure_category_tbl :'||l_expenditure_category_tbl.COUNT;
4165 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4166 pa_debug.g_err_stage:='l_non_labor_resource_tbl :'||l_non_labor_resource_tbl.COUNT;
4167 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4168 pa_debug.g_err_stage:='l_event_type_tbl :'||l_event_type_tbl.COUNT;
4169 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4170 pa_debug.g_err_stage:='l_supplier_id_tbl :'||l_supplier_id_tbl.COUNT;
4171 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4172 pa_debug.g_err_stage:='l_inventory_item_id_tbl :'||l_inventory_item_id_tbl.COUNT;
4173 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4174 pa_debug.g_err_stage:='l_bom_resource_id_tbl :'||l_bom_resource_id_tbl.COUNT;
4175 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4176 pa_debug.g_err_stage:='l_inventory_item_id_tbl :'||l_inventory_item_id_tbl.COUNT;
4177 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4178 pa_debug.g_err_stage:='l_item_category_id_tbl :'||l_item_category_id_tbl.COUNT;
4179 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4180 pa_debug.g_err_stage:='l_mfc_cost_type_id_tbl :'||l_mfc_cost_type_id_tbl.COUNT;
4181 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4182 pa_debug.g_err_stage:='l_rate_expenditure_type_tbl :'||l_rate_expenditure_type_tbl.COUNT;
4183 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4184 pa_debug.g_err_stage:='l_rate_func_curr_code_tbl :'||l_rate_func_curr_code_tbl.COUNT;
4185 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4186 pa_debug.g_err_stage:='l_rate_based_flag_tbl :'||l_rate_based_flag_tbl.COUNT;
4187 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4188 pa_debug.g_err_stage:='l_resource_class_flag_tbl :'||l_resource_class_flag_tbl.COUNT;
4189 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4190 pa_debug.g_err_stage:='l_named_role_tbl :'||l_named_role_tbl.COUNT;
4191 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4192 pa_debug.g_err_stage:='l_incur_by_res_class_code_tbl :'||l_incur_by_res_class_code_tbl.COUNT;
4193 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4194 pa_debug.g_err_stage:='l_budget_version_id :'||l_budget_version_id;
4195 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4196 pa_debug.g_err_stage:='p_project_id :'||p_project_id;
4197 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4198 pa_debug.g_err_stage:='task_id :'||l_proj_element_id_tbl(i);
4199 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4200 pa_debug.g_err_stage:='project_assignment_id : -1';
4201 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4202 pa_debug.g_err_stage:='RESOURCE_LIST_MEMBER_ID :'||l_people_res_class_rlm_id;
4203 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);*/
4204
4205 /* l_trace_stage := 761;
4206 hr_utility.trace('l_proj_element_id_tbl(i) => '||to_char(l_proj_element_id_tbl(i)));
4207 hr_utility.trace('l_unit_of_measure_tbl(l_ppl_index) => '||to_char(l_unit_of_measure_tbl(l_ppl_index)));
4208 hr_utility.trace('p_task_elem_version_id_tbl(i) => '||to_char(p_task_elem_version_id_tbl(i)));
4209 hr_utility.trace('p_start_date_tbl(i) => '||to_char(p_start_date_tbl(i)));
4210 hr_utility.trace('p_end_date_tbl(i) => '||to_char(p_end_date_tbl(i)));
4211 hr_utility.trace(' l_spread_curve_id_tbl(l_ppl_index) => '||to_char(l_spread_curve_id_tbl(l_ppl_index)));
4212 hr_utility.trace('l_etc_method_code_tbl(l_ppl_index) => '||to_char(l_etc_method_code_tbl(l_ppl_index)));
4213 hr_utility.trace('l_res_type_code_tbl(l_ppl_index) => '||to_char(l_res_type_code_tbl(l_ppl_index)));
4214 hr_utility.trace('l_fc_res_type_code_tbl(l_ppl_index) => '||to_char(l_fc_res_type_code_tbl(l_ppl_index)));
4215 hr_utility.trace('l_resource_class_code_tbl(l_ppl_index) => '||to_char(l_resource_class_code_tbl(l_ppl_index)));
4216 hr_utility.trace('l_organization_id_tbl(l_ppl_index) => '||to_char(l_organization_id_tbl(l_ppl_index)));
4217 hr_utility.trace('l_job_id_tbl(l_ppl_index) => '||to_char(l_job_id_tbl(l_ppl_index)));
4218 hr_utility.trace('l_person_id_tbl(l_ppl_index) => '||to_char(l_person_id_tbl(l_ppl_index)));
4219 hr_utility.trace('l_expenditure_type_tbl(l_ppl_index) => '||to_char(l_expenditure_type_tbl(l_ppl_index)));
4220 hr_utility.trace('l_expenditure_category_tbl(l_ppl_index) => '||to_char(l_expenditure_category_tbl(l_ppl_index)));
4221 hr_utility.trace('l_revenue_category_code_tbl(l_ppl_index) => '||to_char(l_revenue_category_code_tbl(l_ppl_index)));
4222 hr_utility.trace('l_event_type_tbl(l_ppl_index) => '||to_char(l_event_type_tbl(l_ppl_index)));
4223 hr_utility.trace('l_supplier_id_tbl(l_ppl_index) => '||to_char(l_supplier_id_tbl(l_ppl_index)));
4224 hr_utility.trace('l_non_labor_resource_tbl(l_ppl_index) => '||to_char(l_non_labor_resource_tbl(l_ppl_index)));
4225 hr_utility.trace('l_bom_resource_id_tbl(l_ppl_index) => '||to_char(l_bom_resource_id_tbl(l_ppl_index)));
4226 hr_utility.trace('l_inventory_item_id_tbl(l_ppl_index) => '||to_char(l_inventory_item_id_tbl(l_ppl_index)));
4227 hr_utility.trace('l_mfc_cost_type_id_tbl(l_ppl_indexj) => '||to_char(l_mfc_cost_type_id_tbl(l_ppl_indexj)));
4228 hr_utility.trace('l_rate_expenditure_type_tbl(l_ppl_indexj) => '||to_char(l_rate_expenditure_type_tbl(l_ppl_index)));
4229 hr_utility.trace('l_rate_based_flag_tbl(l_ppl_index) => '||to_char(l_rate_based_flag_tbl(l_ppl_index)));
4230 hr_utility.trace('l_rate_func_curr_code_tbl(l_ppl_index) => '||to_char(l_rate_func_curr_code_tbl(l_ppl_index)));
4231 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)));
4232 hr_utility.trace('l_resource_class_flag_tbl(l_ppl_index) => '||to_char(l_resource_class_flag_tbl(l_ppl_index)));
4233 hr_utility.trace('l_named_role_tbl(l_ppl_index) => '||to_char(l_named_role_tbl(l_ppl_index)));*/
4234
4235 --------------------------------------------
4236 -- for p_context - WORKPLAN
4237 --------------------------------------------
4238 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
4239
4240 -- Bug 3749516 Changing All reference of l_ppl_equip_index to l_ppl_index below
4241 l_ppl_index:=1; --This will be used in the bulk insert for people -- -- Bug 3749516
4242
4243 IF l_debug_mode = 'Y' THEN
4244 pa_debug.g_err_stage:='BULK INSERTING DATA - p_context - Workplan :'||p_context ;
4245 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4246
4247 pa_debug.g_err_stage:='BULK INSERTING Workplan DATA - rlm id :'||l_eligible_rlm_ids_tbl(l_ppl_index) ;
4248 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,6);
4249 END IF;
4250 -- gboomina Bug 8586393 - start
4251 -- Get 'Assignment same as Task Duration' flag from workplan attribute
4252 -- and default it for hidden task assignments
4253 OPEN C2(p_project_id);
4254 FETCH C2 INTO l_use_task_schedule_flag;
4255 CLOSE C2;
4256 -- gboomina Bug 8586393 - end
4257
4258 FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
4259 IF ((p_planned_people_effort_tbl.EXISTS(i)) AND
4260 (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
4261 /* bug fix:5726773 (p_planned_people_effort_tbl(i) > 0)) THEN*/
4262 (p_planned_people_effort_tbl(i) is NOT NULL)) THEN
4263 l_ins_proj_element_id_tbl(l_ins_index) := l_proj_element_id_tbl(i);
4264 l_ins_task_elem_version_id_tbl(l_ins_index) := p_task_elem_version_id_tbl(i);
4265 IF(p_cbs_element_id_tbl.EXISTS(i)) THEN --bug#16876221
4266 l_ins_cbs_element_id_tbl(l_ins_index) := p_cbs_element_id_tbl(i); --satya
4267 ELSE
4268 l_ins_cbs_element_id_tbl(l_ins_index) := NULL; --satya
4269 END IF;
4270
4271 l_ins_start_date_tbl(l_ins_index) := p_start_date_tbl(i);
4272 l_ins_end_date_tbl(l_ins_index) := p_end_date_tbl(i);
4273 l_ins_cal_people_effort_tbl(l_ins_index) := p_planned_people_effort_tbl(i);
4274 -- gboomina Bug 8586393 - start
4275 --Bug 11782005 Avoid using this coz the variable l_use_task_schedule_flag
4276 -- can be used direclty to create the records.
4277 --l_use_task_schedule_flag_tbl(l_ins_index) := l_use_task_schedule_flag;
4278 -- gboomina Bug 8586393 - end
4279
4280 IF p_burdened_cost_tbl.EXISTS(i) THEN
4281 l_ins_cal_burdened_cost_tbl(l_ins_index) := p_burdened_cost_tbl(i);
4282 END IF;
4283 IF p_raw_cost_tbl.EXISTS(i) THEN
4284 l_ins_cal_raw_cost_tbl(l_ins_index) := p_raw_cost_tbl(i);
4285 END IF;
4286 l_ins_index := l_ins_index + 1;
4287 END IF;
4288 END LOOP;
4289
4290
4291 l_ins_proj_element_id_tbl.delete(l_ins_index,l_ins_proj_element_id_tbl.count);
4292 l_ins_task_elem_version_id_tbl.delete(l_ins_index,l_ins_task_elem_version_id_tbl.count);
4293 l_ins_cbs_element_id_tbl.delete(l_ins_index,l_ins_cbs_element_id_tbl.count); --satya
4294 l_ins_start_date_tbl.delete(l_ins_index,l_ins_start_date_tbl.count);
4295 l_ins_end_date_tbl.delete(l_ins_index,l_ins_end_date_tbl.count);
4296 l_ins_cal_people_effort_tbl.delete(l_ins_index,l_ins_cal_people_effort_tbl.count);
4297 l_ins_cal_burdened_cost_tbl.delete(l_ins_index,l_ins_cal_burdened_cost_tbl.count);
4298 l_ins_cal_raw_cost_tbl.delete(l_ins_index,l_ins_cal_raw_cost_tbl.count);
4299 -- gboomina Bug 8586393 - start
4300 --l_use_task_schedule_flag_tbl.delete(l_ins_index,l_use_task_schedule_flag_tbl.count); --Bug 11782005
4301 -- gboomina Bug 8586393 - end
4302
4303
4304 IF l_debug_mode = 'Y' THEN
4305 pa_debug.g_err_stage:='AFTER PREPARING INS DATA :'||p_context ;
4306 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4307
4308 IF l_ins_task_elem_version_id_tbl.COUNT >0 THEN
4309 FOR i in l_ins_task_elem_version_id_tbl.FIRST .. l_ins_task_elem_version_id_tbl.LAST LOOP
4310 pa_debug.g_err_stage:='l_ins_proj_element_id_tbl :'||l_ins_proj_element_id_tbl(i) ;
4311 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4312
4313 pa_debug.g_err_stage:='l_ins_task_elem_version_id_tbl :'||l_ins_task_elem_version_id_tbl(i) ;
4314 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4315
4316 pa_debug.g_err_stage:='l_ins_start_date_tbl :'||l_ins_start_date_tbl(i) ;
4317 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4318
4319 pa_debug.g_err_stage:='l_ins_end_date_tbl :'||l_ins_end_date_tbl(i) ;
4320 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4321 END LOOP;
4322 END IF;
4323 END IF;
4324
4325 IF l_ins_task_elem_version_id_tbl.COUNT > 0 THEN
4326 FORALL i IN l_ins_task_elem_version_id_tbl.FIRST .. l_ins_task_elem_version_id_tbl.LAST
4327 INSERT INTO PA_RESOURCE_ASSIGNMENTS (
4328 RESOURCE_ASSIGNMENT_ID,BUDGET_VERSION_ID,PROJECT_ID,TASK_ID,RESOURCE_LIST_MEMBER_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CREATION_DATE,CREATED_BY
4329 ,LAST_UPDATE_LOGIN,UNIT_OF_MEASURE,TRACK_AS_LABOR_FLAG,STANDARD_BILL_RATE,AVERAGE_BILL_RATE,AVERAGE_COST_RATE
4330 ,PROJECT_ASSIGNMENT_ID,PLAN_ERROR_CODE,TOTAL_PLAN_REVENUE,TOTAL_PLAN_RAW_COST,TOTAL_PLAN_BURDENED_COST,TOTAL_PLAN_QUANTITY
4331 ,AVERAGE_DISCOUNT_PERCENTAGE,TOTAL_BORROWED_REVENUE,TOTAL_TP_REVENUE_IN,TOTAL_TP_REVENUE_OUT,TOTAL_REVENUE_ADJ
4332 ,TOTAL_LENT_RESOURCE_COST,TOTAL_TP_COST_IN,TOTAL_TP_COST_OUT,TOTAL_COST_ADJ,TOTAL_UNASSIGNED_TIME_COST
4333 ,TOTAL_UTILIZATION_PERCENT,TOTAL_UTILIZATION_HOURS,TOTAL_UTILIZATION_ADJ,TOTAL_CAPACITY,TOTAL_HEAD_COUNT
4334 ,TOTAL_HEAD_COUNT_ADJ,RESOURCE_ASSIGNMENT_TYPE,TOTAL_PROJECT_RAW_COST,TOTAL_PROJECT_BURDENED_COST,TOTAL_PROJECT_REVENUE
4335 ,PARENT_ASSIGNMENT_ID,WBS_ELEMENT_VERSION_ID,CBS_ELEMENT_ID,RBS_ELEMENT_ID,PLANNING_START_DATE,PLANNING_END_DATE,SCHEDULE_START_DATE,SCHEDULE_END_DATE
4336 ,SPREAD_CURVE_ID,ETC_METHOD_CODE,RES_TYPE_CODE,ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5
4337 ,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE9,ATTRIBUTE10,ATTRIBUTE11,ATTRIBUTE12,ATTRIBUTE13,ATTRIBUTE14,ATTRIBUTE15
4338 ,ATTRIBUTE16,ATTRIBUTE17,ATTRIBUTE18,ATTRIBUTE19,ATTRIBUTE20,ATTRIBUTE21,ATTRIBUTE22,ATTRIBUTE23,ATTRIBUTE24,ATTRIBUTE25
4339 ,ATTRIBUTE26,ATTRIBUTE27,ATTRIBUTE28,ATTRIBUTE29,ATTRIBUTE30,FC_RES_TYPE_CODE,RESOURCE_CLASS_CODE,ORGANIZATION_ID,JOB_ID
4340 ,PERSON_ID,EXPENDITURE_TYPE,EXPENDITURE_CATEGORY,REVENUE_CATEGORY_CODE,EVENT_TYPE,SUPPLIER_ID,NON_LABOR_RESOURCE
4341 ,BOM_RESOURCE_ID,INVENTORY_ITEM_ID,ITEM_CATEGORY_ID,RECORD_VERSION_NUMBER,BILLABLE_PERCENT
4342 ,TRANSACTION_SOURCE_CODE,MFC_COST_TYPE_ID,PROCURE_RESOURCE_FLAG,ASSIGNMENT_DESCRIPTION
4343 ,INCURRED_BY_RES_FLAG,RATE_JOB_ID,RATE_EXPENDITURE_TYPE,TA_DISPLAY_FLAG
4344 ,SP_FIXED_DATE,PERSON_TYPE_CODE,RATE_BASED_FLAG,USE_TASK_SCHEDULE_FLAG,RATE_EXP_FUNC_CURR_CODE
4345 ,RATE_EXPENDITURE_ORG_ID,INCUR_BY_RES_CLASS_CODE,INCUR_BY_ROLE_ID
4346 ,PROJECT_ROLE_ID,RESOURCE_CLASS_FLAG,NAMED_ROLE,TXN_ACCUM_HEADER_ID
4347 ,PM_PRODUCT_CODE, PM_RES_ASSIGNMENT_REFERENCE, resource_rate_based_flag)
4348 VALUES (
4349 PA_RESOURCE_ASSIGNMENTS_S.NEXTVAL -- RESOURCE_ASSIGNMENT_ID
4350 ,l_budget_version_id -- BUDGET_VERSION_ID
4351 ,p_project_id -- PROJECT_ID
4352 ,l_ins_proj_element_id_tbl(i) -- TASK_ID
4353 ,l_people_res_class_rlm_id -- RESOURCE_LIST_MEMBER_ID
4354 ,sysdate -- LAST_UPDATE_DATE
4355 ,fnd_global.user_id -- LAST_UPDATED_BY
4356 ,sysdate -- CREATION_DATE
4357 ,fnd_global.user_id -- CREATED_BY
4358 ,fnd_global.login_id -- LAST_UPDATE_LOGIN
4359 ,l_unit_of_measure_tbl(l_ppl_index) -- UNIT_OF_MEASURE
4360 ,NULL -- TRACK_AS_LABOR_FLAG
4361 ,NULL -- STANDARD_BILL_RATE
4362 ,NULL -- AVERAGE_BILL_RATE
4363 ,NULL -- AVERAGE_COST_RATE
4364 ,-1 -- PROJECT_ASSIGNMENT_ID
4365 ,NULL -- PLAN_ERROR_CODE
4366 ,NULL -- TOTAL_PLAN_REVENUE
4367 ,NULL -- TOTAL_PLAN_RAW_COST
4368 ,NULL -- TOTAL_PLAN_BURDENED_COST
4369 ,NULL -- TOTAL_PLAN_QUANTITY
4370 ,NULL -- AVERAGE_DISCOUNT_PERCENTAGE
4371 ,NULL -- TOTAL_BORROWED_REVENUE
4372 ,NULL -- TOTAL_TP_REVENUE_IN
4373 ,NULL -- TOTAL_TP_REVENUE_OUT
4374 ,NULL -- TOTAL_REVENUE_ADJ
4375 ,NULL -- TOTAL_LENT_RESOURCE_COST
4376 ,NULL -- TOTAL_TP_COST_IN
4377 ,NULL -- TOTAL_TP_COST_OUT
4378 ,NULL -- TOTAL_COST_ADJ
4379 ,NULL -- TOTAL_UNASSIGNED_TIME_COST
4380 ,NULL -- TOTAL_UTILIZATION_PERCENT
4381 ,NULL -- TOTAL_UTILIZATION_HOURS
4382 ,NULL -- TOTAL_UTILIZATION_ADJ
4383 ,NULL -- TOTAL_CAPACITY
4384 ,NULL -- TOTAL_HEAD_COUNT
4385 ,NULL -- TOTAL_HEAD_COUNT_ADJ
4386 ,'USER_ENTERED' -- RESOURCE_ASSIGNMENT_TYPE
4387 ,NULL -- TOTAL_PROJECT_RAW_COST
4388 ,NULL -- TOTAL_PROJECT_BURDENED_COST
4389 ,NULL -- TOTAL_PROJECT_REVENUE
4390 ,NULL -- PARENT_ASSIGNMENT_ID
4391 ,l_ins_task_elem_version_id_tbl(i) -- WBS_ELEMENT_VERSION_ID
4392 ,l_ins_cbs_element_id_tbl(i) -- CBS_ELEMENT_ID --satya
4393 ,l_rbs_element_id_tbl(l_ppl_index) -- RBS_ELEMENT_ID
4394 ,l_ins_start_date_tbl(i) -- PLANNING_START_DATE
4395 ,l_ins_end_date_tbl(i) -- PLANNING_END_DATE
4396 ,l_ins_start_date_tbl(i) -- SCHEDULE_START_DATE
4397 ,l_ins_end_date_tbl(i) -- SCHEDULE_END_DATE
4398 ,l_spread_curve_id_tbl(l_ppl_index) -- SPREAD_CURVE_ID
4399 ,l_etc_method_code_tbl(l_ppl_index) -- ETC_METHOD_CODE
4400 ,l_res_type_code_tbl(l_ppl_index) -- RES_TYPE_CODE
4401 ,NULL -- ATTRIBUTE_CATEGORY
4402 /* Start Bug 11782005 For all ATTRIBUTE fields we are using l_ppl_index instead of i */
4403 ,l_ATTRIBUTE1_tbl(l_ppl_index) -- ATTRIBUTE1
4404 ,l_ATTRIBUTE2_tbl(l_ppl_index) -- ATTRIBUTE2
4405 ,l_ATTRIBUTE3_tbl(l_ppl_index) -- ATTRIBUTE3
4406 ,l_ATTRIBUTE4_tbl(l_ppl_index) -- ATTRIBUTE4
4407 ,l_ATTRIBUTE5_tbl(l_ppl_index) -- ATTRIBUTE5
4408 ,l_ATTRIBUTE6_tbl(l_ppl_index) -- ATTRIBUTE6
4409 ,l_ATTRIBUTE7_tbl(l_ppl_index) -- ATTRIBUTE7
4410 ,l_ATTRIBUTE8_tbl(l_ppl_index) -- ATTRIBUTE8
4411 ,l_ATTRIBUTE9_tbl(l_ppl_index) -- ATTRIBUTE9
4412 ,l_ATTRIBUTE10_tbl(l_ppl_index) -- ATTRIBUTE10
4413 ,l_ATTRIBUTE11_tbl(l_ppl_index) -- ATTRIBUTE11
4414 ,l_ATTRIBUTE12_tbl(l_ppl_index) -- ATTRIBUTE12
4415 ,l_ATTRIBUTE13_tbl(l_ppl_index) -- ATTRIBUTE13
4416 ,l_ATTRIBUTE14_tbl(l_ppl_index) -- ATTRIBUTE14
4417 ,l_ATTRIBUTE15_tbl(l_ppl_index) -- ATTRIBUTE15
4418 ,l_ATTRIBUTE16_tbl(l_ppl_index) -- ATTRIBUTE16
4419 ,l_ATTRIBUTE17_tbl(l_ppl_index) -- ATTRIBUTE17
4420 ,l_ATTRIBUTE18_tbl(l_ppl_index) -- ATTRIBUTE18
4421 ,l_ATTRIBUTE19_tbl(l_ppl_index) -- ATTRIBUTE19
4422 ,l_ATTRIBUTE20_tbl(l_ppl_index) -- ATTRIBUTE20
4423 ,l_ATTRIBUTE21_tbl(l_ppl_index) -- ATTRIBUTE21
4424 ,l_ATTRIBUTE22_tbl(l_ppl_index) -- ATTRIBUTE22
4425 ,l_ATTRIBUTE23_tbl(l_ppl_index) -- ATTRIBUTE23
4426 ,l_ATTRIBUTE24_tbl(l_ppl_index) -- ATTRIBUTE24
4427 ,l_ATTRIBUTE25_tbl(l_ppl_index) -- ATTRIBUTE25
4428 ,l_ATTRIBUTE26_tbl(l_ppl_index) -- ATTRIBUTE26
4429 ,l_ATTRIBUTE27_tbl(l_ppl_index) -- ATTRIBUTE27
4430 ,l_ATTRIBUTE28_tbl(l_ppl_index) -- ATTRIBUTE28
4431 ,l_ATTRIBUTE29_tbl(l_ppl_index) -- ATTRIBUTE29
4432 ,l_ATTRIBUTE30_tbl(l_ppl_index) -- ATTRIBUTE30
4433 /* End Bug 11782005 For all ATTRIBUTE fields we are using l_ppl_index instead of i */
4434 ,l_fc_res_type_code_tbl(l_ppl_index) -- FC_RES_TYPE_CODE
4435 ,l_resource_class_code_tbl(l_ppl_index) -- RESOURCE_CLASS_CODE
4436 ,l_organization_id_tbl(l_ppl_index) -- ORGANIZATION_ID
4437 ,l_job_id_tbl(l_ppl_index) -- JOB_ID
4438 ,l_person_id_tbl(l_ppl_index) -- PERSON_ID
4439 ,l_expenditure_type_tbl(l_ppl_index) -- EXPENDITURE_TYPE
4440 ,l_expenditure_category_tbl(l_ppl_index) -- EXPENDITURE_CATEGORY
4441 ,l_revenue_category_code_tbl(l_ppl_index) -- REVENUE_CATEGORY_CODE
4442 ,l_event_type_tbl(l_ppl_index) -- EVENT_TYPE
4443 ,l_supplier_id_tbl(l_ppl_index) -- SUPPLIER_ID
4444 ,l_non_labor_resource_tbl(l_ppl_index) -- NON_LABOR_RESOURCE
4445 ,l_bom_resource_id_tbl(l_ppl_index) -- BOM_RESOURCE_ID
4446 ,l_inventory_item_id_tbl(l_ppl_index) -- INVENTORY_ITEM_ID
4447 ,l_item_category_id_tbl(l_ppl_index) -- ITEM_CATEGORY_ID
4448 ,1 -- RECORD_VERSION_NUMBER
4449 ,NULL -- BILLABLE_PERCENT
4450 ,NULL -- TRANSACTION_SOURCE_CODE
4451 ,l_mfc_cost_type_id_tbl(l_ppl_index) -- MFC_COST_TYPE_ID
4452 ,NULL -- PROCURE_RESOURCE_FLAG
4453 ,NULL -- ASSIGNMENT_DESCRIPTION
4454 ,l_incurred_by_res_flag_tbl(l_ppl_index) -- INCURRED_BY_RES_FLAG
4455 ,NULL -- RATE_JOB_ID
4456 ,l_rate_expenditure_type_tbl(l_ppl_index) -- RATE_EXPENDITURE_TYPE
4457 ,'N' -- TA_DISPLAY_FLAG
4458 ,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
4459 ,l_person_type_code_tbl(l_ppl_index) -- PERSON_TYPE_CODE
4460 ,decode(l_res_class_flag,'N','N',l_rate_based_flag_tbl(l_ppl_index)) -- RATE_BASED_FLAG -- if context is workplan and prl is resource class disabled then set Rate_based_flag as 'N'
4461 -- gboomina bug 8586393 - start
4462 --,l_use_task_schedule_flag_tbl(i) -- USE_TASK_SCHEDULE_FLAG --Bug 11782005
4463 ,l_use_task_schedule_flag -- USE_TASK_SCHEDULE_FLAG --Bug 11782005
4464 -- gboomina bug 8586393 - end -- USE_TASK_SCHEDULE_FLAG
4465 ,l_rate_func_curr_code_tbl(l_ppl_index) -- RATE_EXP_FUNC_CURR_CODE
4466 ,l_org_id_tbl(l_ppl_index) -- RATE_EXPENDITURE_ORG_ID
4467 ,l_incur_by_res_class_code_tbl(l_ppl_index) -- INCUR_BY_RES_CLASS_CODE
4468 ,l_incur_by_role_id_tbl(l_ppl_index) -- INCUR_BY_ROLE_ID
4469 ,l_project_role_id_tbl(l_ppl_index) -- PROJECT_ROLE_ID
4470 ,l_resource_class_flag_tbl(l_ppl_index) -- RESOURCE_CLASS_FLAG
4471 ,l_named_role_tbl(l_ppl_index) -- NAMED_ROLE
4472 ,l_txn_accum_header_id_tbl(l_ppl_index) -- TXN ACCUM HEADER ID
4473 ,l_pm_product_code_tbl(l_ppl_index) -- PM_PRODUCT_CODE
4474 ,l_pm_res_asgmt_ref_tbl(l_ppl_index) -- PM_RES_ASSIGNMENT_REFERENCE
4475 ,l_rate_based_flag_tbl(l_ppl_index) -- RESOURCE_RATE_BASED_FLAG IPM
4476 )
4477 RETURNING resource_assignment_id BULK COLLECT INTO l_res_assignment_id_temp_tbl ;
4478 -- IPM changes - copy the RA ID's created so that the new entity
4479 -- can be populated.
4480 l_orig_count := l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
4481 l_ra_id_temp_tbl.extend(l_res_assignment_id_temp_tbl.COUNT);
4482 FOR i IN l_orig_count+1 .. l_orig_count+l_res_assignment_id_temp_tbl.COUNT LOOP -- bug 5003827 issue 22
4483 l_ra_id_temp_tbl(i) := l_res_assignment_id_temp_tbl(i-l_orig_count); -- bug 5003827 issue 22
4484 END LOOP; -- bug 5003827 issue 22
4485 -- hr_utility.trace('RMcopy1');
4486 -- hr_utility.trace('l_ra_id_temp_tbl.COUNT IS : ' || l_ra_id_temp_tbl.COUNT);
4487 -- hr_utility.trace('l_res_assignment_id_temp_tbl.COUNT IS : ' || l_res_assignment_id_temp_tbl.COUNT);
4488 -- hr_utility.trace('*****');
4489
4490 -----------------------------------------------------------------------
4491 -- Populating resource assignments and corresponding spread amount flags
4492 -- in PLSql tables. for IN parameters of Calculate API
4493 -- If Quantity exists in the IN parameter then set it to 'Y'
4494 -- or else set it to 'N'
4495 -----------------------------------------------------------------------
4496 l_index := 1; -- Initialise to avoid incorrect values that might come in
4497 -- due to any usage of this.
4498
4499 IF (l_res_assignment_id_temp_tbl.COUNT >0) THEN
4500 FOR k IN l_res_assignment_id_temp_tbl.FIRST .. l_res_assignment_id_temp_tbl.LAST LOOP
4501 -----------------------------------------------------------------------
4502 -- Populating resource assignments and corresponding spread amount flags
4503 -- in PLSql tables.for IN parameters of Calculate API
4504 -- If Record is inserted then spread amount flag is set to Y or else it
4505 -- is set to N
4506 -----------------------------------------------------------------------
4507 IF l_res_assignment_id_temp_tbl(k) IS NOT NULL THEN
4508 l_trace_stage := 780;
4509 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
4510 IF l_debug_mode = 'Y' THEN
4511 pa_debug.g_err_stage:='BULK INSERTING DATA - WORPLAN - PEOPLE '||l_res_assignment_id_temp_tbl(k);
4512 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4513 END IF;
4514 l_quantity_tbl(l_index) := l_ins_cal_people_effort_tbl(k);
4515 l_res_assignment_id_tbl(l_index) := l_res_assignment_id_temp_tbl(k);
4516 -- IF l_spread_amounts_for_ver = 'Y' THEN
4517 l_spread_amount_flags_tbl(l_index) := 'Y';
4518 l_currency_code_tbl(l_index) := l_proj_curr_code;
4519 -- END IF;
4520 IF l_ins_cal_raw_cost_tbl.EXISTS(k) AND
4521 NVL(l_ins_cal_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4522 /* bug fix:Bug fix:5726773 l_ins_cal_raw_cost_tbl(k) <> 0 THEN */
4523 l_ins_cal_raw_cost_tbl(k) is NOT NULL THEN
4524 l_raw_cost_tbl(l_index) := l_ins_cal_raw_cost_tbl(k);
4525 END IF;
4526 IF l_ins_cal_burdened_cost_tbl.EXISTS(k) AND
4527 NVL(l_ins_cal_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4528 /* bug fix:Bug fix:5726773 l_ins_cal_burdened_cost_tbl(k) <> 0 THEN */
4529 l_ins_cal_burdened_cost_tbl(k) is NOT NULL THEN
4530 l_burdened_cost_tbl(l_index) := l_ins_cal_burdened_cost_tbl(k);
4531 END IF;
4532 l_call_calc_api := 'Y';
4533 l_index := l_index + 1;
4534 END IF;
4535 l_trace_stage := 790;
4536 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
4537 END LOOP;
4538 END IF;
4539 END IF;
4540 /* -- Bug 3749516 Removed code below for Equipment resource class Starts refer source control for reference */
4541 -- Bug 3749516 BULK INSERT FOR WORKPLAN ENDS HERE
4542
4543 ----------------------------------------------------------------------------------
4544 -- Bug 3749516 BULK INSERT FOR B/F and TA starts here
4545 -----------------------------------------------------------------------------------
4546 -- Please note that the below FOR Loop has a EXIT condition with respect to the
4547 -- BUDGET / FORECAST context. When p_one_to_one_mapping_flag is Passed as Y
4548 -- for BUDGET / FORECAST context we do not have to insert the cartesan product
4549 -- of element_ver_ids and rlm_ids passed to the ADD_PLANNING_TXNS api.
4550 -- In this case there is one-to-one correspondance in the records passed for rlm_ids
4551 -- and elem_ver_ids passed, and we use this data directly for insertion.
4552 -----------------------------------------------------------------------------------
4553 ----------------------------------------------------
4554 -- Loop for all the task_elem_version_id --- Starts
4555 ----------------------------------------------------
4556 ELSIF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK)
4557 OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET)
4558 OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
4559
4560 -- Resetting value of l_index
4561 l_index := 1;
4562 FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
4563 l_trace_stage := 730;
4564 -- hr_utility.trace('PA_FP_PLAN_TXN_PUB.add_planning_transactions: '||to_char(l_trace_stage));
4565 --------------------------------------------
4566 -- for p_context - TASK_ASSIGNMENTS
4567 --------------------------------------------
4568 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
4569 IF l_debug_mode = 'Y' THEN
4570 pa_debug.g_err_stage:='BULK INSERTING DATA - Context TASK p_context : '||p_context;
4571 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4572 END IF;
4573
4574 -- Bug 12384023: Deriving job_id based on assignment start date :start
4575 FOR j IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST LOOP
4576
4577 IF l_debug_mode = 'Y' THEN
4578 pa_debug.g_err_stage:='PA_PLANNING_RESOURCE_UTILS: default_job l_job_id_tbl(j) : '||l_job_id_tbl(j);
4579 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4580 END IF;
4581
4582 l_job_id_temp := NULL; --bug#13566990
4583
4584 get_default_job
4585 (
4586 p_person_id => l_person_id_tbl(j)
4587 ,p_resource_assignment_id => null
4588 ,p_planning_start_date => l_planning_start_date_tbl(j)
4589 ,p_project_role_id => l_project_role_id_tbl(j)
4590 ,x_job_id => l_job_id_temp --bug#13566990
4591 );
4592
4593 --bug#13566990
4594 If l_job_id_temp IS NOT NULL THEN
4595 l_job_id_tbl(j) := l_job_id_temp;
4596 END IF;
4597
4598 IF l_debug_mode = 'Y' THEN
4599 pa_debug.g_err_stage:='l_job_id_tbl(j) : '||l_job_id_tbl(j);
4600 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4601 END IF;
4602
4603 END LOOP;
4604 -- Bug 12384023: Deriving job_id based on assignment start date :end
4605
4606 --dbms_output.put_line('Inserting for TA');
4607 ---------------------------------------------------------
4608 -- BULK Inserting records into pa_resource_assignments
4609 -- by iterating throught elligle resource list member ids
4610 ---------------------------------------------------------
4611 -----------------------------------------------------------------
4612 -- The Insert Statement below has been modified for changes due to
4613 -- Bug 3665097. When p_one_to_one_mapping_flag is passed as Y for
4614 -- TA context. The Bulk insert is run once once for the same index as of rlm_ids.
4615 -- The Exit Condition below takes care of the insert running only once.
4616 -------------------------------------------------------------------
4617 FORALL j IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST
4618 INSERT INTO PA_RESOURCE_ASSIGNMENTS (
4619 RESOURCE_ASSIGNMENT_ID,BUDGET_VERSION_ID,PROJECT_ID,TASK_ID,RESOURCE_LIST_MEMBER_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CREATION_DATE,CREATED_BY
4620 ,LAST_UPDATE_LOGIN,UNIT_OF_MEASURE,TRACK_AS_LABOR_FLAG,STANDARD_BILL_RATE,AVERAGE_BILL_RATE,AVERAGE_COST_RATE
4621 ,PROJECT_ASSIGNMENT_ID,PLAN_ERROR_CODE,TOTAL_PLAN_REVENUE,TOTAL_PLAN_RAW_COST,TOTAL_PLAN_BURDENED_COST,TOTAL_PLAN_QUANTITY
4622 ,AVERAGE_DISCOUNT_PERCENTAGE,TOTAL_BORROWED_REVENUE,TOTAL_TP_REVENUE_IN,TOTAL_TP_REVENUE_OUT,TOTAL_REVENUE_ADJ
4623 ,TOTAL_LENT_RESOURCE_COST,TOTAL_TP_COST_IN,TOTAL_TP_COST_OUT,TOTAL_COST_ADJ,TOTAL_UNASSIGNED_TIME_COST
4624 ,TOTAL_UTILIZATION_PERCENT,TOTAL_UTILIZATION_HOURS,TOTAL_UTILIZATION_ADJ,TOTAL_CAPACITY,TOTAL_HEAD_COUNT
4625 ,TOTAL_HEAD_COUNT_ADJ,RESOURCE_ASSIGNMENT_TYPE,TOTAL_PROJECT_RAW_COST,TOTAL_PROJECT_BURDENED_COST,TOTAL_PROJECT_REVENUE
4626 ,PARENT_ASSIGNMENT_ID,WBS_ELEMENT_VERSION_ID,RBS_ELEMENT_ID,PLANNING_START_DATE,PLANNING_END_DATE,SCHEDULE_START_DATE,SCHEDULE_END_DATE
4627 ,SPREAD_CURVE_ID,ETC_METHOD_CODE,RES_TYPE_CODE,ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5
4628 ,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE9,ATTRIBUTE10,ATTRIBUTE11,ATTRIBUTE12,ATTRIBUTE13,ATTRIBUTE14,ATTRIBUTE15
4629 ,ATTRIBUTE16,ATTRIBUTE17,ATTRIBUTE18,ATTRIBUTE19,ATTRIBUTE20,ATTRIBUTE21,ATTRIBUTE22,ATTRIBUTE23,ATTRIBUTE24,ATTRIBUTE25
4630 ,ATTRIBUTE26,ATTRIBUTE27,ATTRIBUTE28,ATTRIBUTE29,ATTRIBUTE30,FC_RES_TYPE_CODE,RESOURCE_CLASS_CODE,ORGANIZATION_ID,JOB_ID
4631 ,PERSON_ID,EXPENDITURE_TYPE,EXPENDITURE_CATEGORY,REVENUE_CATEGORY_CODE,EVENT_TYPE,SUPPLIER_ID,NON_LABOR_RESOURCE
4632 ,BOM_RESOURCE_ID,INVENTORY_ITEM_ID,ITEM_CATEGORY_ID,RECORD_VERSION_NUMBER,BILLABLE_PERCENT
4633 ,TRANSACTION_SOURCE_CODE,MFC_COST_TYPE_ID,PROCURE_RESOURCE_FLAG,ASSIGNMENT_DESCRIPTION
4634 ,INCURRED_BY_RES_FLAG,RATE_JOB_ID,RATE_EXPENDITURE_TYPE,TA_DISPLAY_FLAG
4635 ,SP_FIXED_DATE,PERSON_TYPE_CODE,RATE_BASED_FLAG,USE_TASK_SCHEDULE_FLAG,RATE_EXP_FUNC_CURR_CODE
4636 ,RATE_EXPENDITURE_ORG_ID,INCUR_BY_RES_CLASS_CODE,INCUR_BY_ROLE_ID
4637 ,PROJECT_ROLE_ID,RESOURCE_CLASS_FLAG,NAMED_ROLE,TXN_ACCUM_HEADER_ID,UNPLANNED_FLAG
4638 ,PM_PRODUCT_CODE, PM_RES_ASSIGNMENT_REFERENCE,SCHEDULED_DELAY, resource_rate_based_flag,
4639 cbs_element_id) --Bug#16200605
4640 VALUES(PA_RESOURCE_ASSIGNMENTS_S.NEXTVAL -- RESOURCE_ASSIGNMENT_ID
4641 ,l_budget_version_id -- BUDGET_VERSION_ID
4642 ,p_project_id -- PROJECT_ID
4643 ,decode(p_one_to_one_mapping_flag,'Y',l_proj_elem_rlm_tbl(j)
4644 ,l_proj_element_id_tbl(i)) -- TASK_ID
4645 ,l_eligible_rlm_ids_tbl(j) -- RESOURCE_LIST_MEMBER_ID
4646 ,sysdate -- LAST_UPDATE_DATE
4647 ,fnd_global.user_id -- LAST_UPDATED_BY
4648 ,sysdate -- CREATION_DATE
4649 ,fnd_global.user_id -- CREATED_BY
4650 ,fnd_global.login_id -- LAST_UPDATE_LOGIN
4651 ,l_unit_of_measure_tbl(j) -- UNIT_OF_MEASURE
4652 ,NULL -- TRACK_AS_LABOR_FLAG
4653 ,NULL -- STANDARD_BILL_RATE
4654 ,NULL -- AVERAGE_BILL_RATE
4655 ,NULL -- AVERAGE_COST_RATE
4656 ,nvl(l_project_assignment_id_tbl(j),-1) -- PROJECT_ASSIGNMENT_ID
4657 ,NULL -- PLAN_ERROR_CODE
4658 ,NULL -- TOTAL_PLAN_REVENUE
4659 ,NULL -- TOTAL_PLAN_RAW_COST
4660 ,NULL -- TOTAL_PLAN_BURDENED_COST
4661 ,NULL -- TOTAL_PLAN_QUANTITY
4662 ,NULL -- AVERAGE_DISCOUNT_PERCENTAGE
4663 ,NULL -- TOTAL_BORROWED_REVENUE
4664 ,NULL -- TOTAL_TP_REVENUE_IN
4665 ,NULL -- TOTAL_TP_REVENUE_OUT
4666 ,NULL -- TOTAL_REVENUE_ADJ
4667 ,NULL -- TOTAL_LENT_RESOURCE_COST
4668 ,NULL -- TOTAL_TP_COST_IN
4669 ,NULL -- TOTAL_TP_COST_OUT
4670 ,NULL -- TOTAL_COST_ADJ
4671 ,NULL -- TOTAL_UNASSIGNED_TIME_COST
4672 ,NULL -- TOTAL_UTILIZATION_PERCENT
4673 ,NULL -- TOTAL_UTILIZATION_HOURS
4674 ,NULL -- TOTAL_UTILIZATION_ADJ
4675 ,NULL -- TOTAL_CAPACITY
4676 ,NULL -- TOTAL_HEAD_COUNT
4677 ,NULL -- TOTAL_HEAD_COUNT_ADJ
4678 ,'USER_ENTERED' -- RESOURCE_ASSIGNMENT_TYPE
4679 ,NULL -- TOTAL_PROJECT_RAW_COST
4680 ,NULL -- TOTAL_PROJECT_BURDENED_COST
4681 ,NULL -- TOTAL_PROJECT_REVENUE
4682 ,NULL -- PARENT_ASSIGNMENT_ID
4683 ,decode(p_one_to_one_mapping_flag,'Y',l_task_elem_rlm_tbl(j)
4684 ,p_task_elem_version_id_tbl(i)) -- WBS_ELEMENT_VERSION_ID
4685 ,l_rbs_element_id_tbl(j) -- RBS_ELEMENT_ID
4686 ,l_planning_start_date_tbl(j) -- PLANNING_START_DATE
4687 ,l_planning_end_date_tbl(j) -- PLANNING_END_DATE
4688 ,l_schedule_start_date_tbl(j) -- SCHEDULE_START_DATE
4689 ,l_schedule_end_date_tbl(j) -- SCHEDULE_END_DATE
4690 ,l_spread_curve_id_tbl(j) -- SPREAD_CURVE_ID
4691 ,l_etc_method_code_tbl(j) -- ETC_METHOD_CODE
4692 ,l_res_type_code_tbl(j) -- RES_TYPE_CODE
4693 ,l_attribute_category_tbl(j) -- ATTRIBUTE_CATEGORY
4694 ,l_ATTRIBUTE1_tbl(j) -- ATTRIBUTE1
4695 ,l_ATTRIBUTE2_tbl(j) -- ATTRIBUTE2
4696 ,l_ATTRIBUTE3_tbl(j) -- ATTRIBUTE3
4697 ,l_ATTRIBUTE4_tbl(j) -- ATTRIBUTE4
4698 ,l_ATTRIBUTE5_tbl(j) -- ATTRIBUTE5
4699 ,l_ATTRIBUTE6_tbl(j) -- ATTRIBUTE6
4700 ,l_ATTRIBUTE7_tbl(j) -- ATTRIBUTE7
4701 ,l_ATTRIBUTE8_tbl(j) -- ATTRIBUTE8
4702 ,l_ATTRIBUTE9_tbl(j) -- ATTRIBUTE9
4703 ,l_ATTRIBUTE10_tbl(j) -- ATTRIBUTE10
4704 ,l_ATTRIBUTE11_tbl(j) -- ATTRIBUTE11
4705 ,l_ATTRIBUTE12_tbl(j) -- ATTRIBUTE12
4706 ,l_ATTRIBUTE13_tbl(j) -- ATTRIBUTE13
4707 ,l_ATTRIBUTE14_tbl(j) -- ATTRIBUTE14
4708 ,l_ATTRIBUTE15_tbl(j) -- ATTRIBUTE15
4709 ,l_ATTRIBUTE16_tbl(j) -- ATTRIBUTE16
4710 ,l_ATTRIBUTE17_tbl(j) -- ATTRIBUTE17
4711 ,l_ATTRIBUTE18_tbl(j) -- ATTRIBUTE18
4712 ,l_ATTRIBUTE19_tbl(j) -- ATTRIBUTE19
4713 ,l_ATTRIBUTE20_tbl(j) -- ATTRIBUTE20
4714 ,l_ATTRIBUTE21_tbl(j) -- ATTRIBUTE21
4715 ,l_ATTRIBUTE22_tbl(j) -- ATTRIBUTE22
4716 ,l_ATTRIBUTE23_tbl(j) -- ATTRIBUTE23
4717 ,l_ATTRIBUTE24_tbl(j) -- ATTRIBUTE24
4718 ,l_ATTRIBUTE25_tbl(j) -- ATTRIBUTE25
4719 ,l_ATTRIBUTE26_tbl(j) -- ATTRIBUTE26
4720 ,l_ATTRIBUTE27_tbl(j) -- ATTRIBUTE27
4721 ,l_ATTRIBUTE28_tbl(j) -- ATTRIBUTE28
4722 ,l_ATTRIBUTE29_tbl(j) -- ATTRIBUTE29
4723 ,l_ATTRIBUTE30_tbl(j) -- ATTRIBUTE30
4724 ,l_fc_res_type_code_tbl(j) -- FC_RES_TYPE_CODE
4725 ,l_resource_class_code_tbl(j) -- RESOURCE_CLASS_CODE
4726 ,l_organization_id_tbl(j) -- ORGANIZATION_ID
4727 ,l_job_id_tbl(j) -- JOB_ID
4728 ,l_person_id_tbl(j) -- PERSON_ID
4729 ,l_expenditure_type_tbl(j) -- EXPENDITURE_TYPE
4730 ,l_expenditure_category_tbl(j) -- EXPENDITURE_CATEGORY
4731 ,l_revenue_category_code_tbl(j) -- REVENUE_CATEGORY_CODE
4732 ,l_event_type_tbl(j) -- EVENT_TYPE
4733 ,l_supplier_id_tbl(j) -- SUPPLIER_ID
4734 ,l_non_labor_resource_tbl(j) -- NON_LABOR_RESOURCE
4735 ,l_bom_resource_id_tbl(j) -- BOM_RESOURCE_ID
4736 ,l_inventory_item_id_tbl(j) -- INVENTORY_ITEM_ID
4737 ,l_item_category_id_tbl(j) -- ITEM_CATEGORY_ID
4738 ,1 -- RECORD_VERSION_NUMBER
4739 ,l_billable_percent_tbl(j) -- BILLABLE_PERCENT
4740 ,NULL -- TRANSACTION_SOURCE_CODE
4741 ,l_mfc_cost_type_id_tbl(j) -- MFC_COST_TYPE_ID
4742 ,l_procure_resource_flag_tbl(j) -- PROCURE_RESOURCE_FLAG
4743 ,l_assignment_description_tbl(j) -- ASSIGNMENT_DESCRIPTION
4744 ,l_incurred_by_res_flag_tbl(j) -- INCURRED_BY_RES_FLAG
4745 ,NULL -- RATE_JOB_ID
4746 ,l_rate_expenditure_type_tbl(j) -- RATE_EXPENDITURE_TYPE
4747 ,'Y' -- TA_DISPLAY_FLAG
4748 ,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
4749 ,l_person_type_code_tbl(j) -- PERSON_TYPE_CODE
4750 ,decode(l_res_class_flag,'N','N',l_rate_based_flag_tbl(j)) -- RATE_BASED_FLAG -- if context is workplan and prl is resource class disabled then set Rate_based_flag as 'N'
4751 ,l_use_task_schedule_flag_tbl(j) -- USE_TASK_SCHEDULE_FLAG
4752 ,l_rate_func_curr_code_tbl(j) -- RATE_EXP_FUNC_CURR_CODE
4753 ,l_org_id_tbl(j) -- RATE_EXPENDITURE_ORG_ID
4754 ,l_incur_by_res_class_code_tbl(j) -- INCUR_BY_RES_CLASS_CODE
4755 ,l_incur_by_role_id_tbl(j) -- INCUR_BY_ROLE_ID
4756 ,l_project_role_id_tbl(j) -- PROJECT_ROLE_ID
4757 ,l_resource_class_flag_tbl(j) -- RESOURCE_CLASS_FLAG
4758 ,l_named_role_tbl(j) -- NAMED_ROLE
4759 ,l_txn_accum_header_id_tbl(j) -- TXN ACCUM HEADER ID
4760 ,l_unplanned_flag_tbl(j) -- UNPLANNED_FLAG
4761 ,l_pm_product_code_tbl(j) -- PM_PRODUCT_CODE
4762 ,l_pm_res_asgmt_ref_tbl(j) -- PM_RES_ASSIGNMENT_REFERENCE
4763 ,l_scheduled_delay(j) -- SCHEDULED_DELAY. For bug 3948128
4764 ,l_rate_based_flag_tbl(j) -- resource_RATE_BASED_FLAG
4765 ,l_cbs_id_rlm_tbl(j) -- CBS_ELEMENT_ID --Bug#16200605
4766 )
4767 RETURNING resource_assignment_id
4768 BULK COLLECT INTO l_res_assignment_id_temp_tbl ;
4769
4770 -- IPM changes - copy the RA ID's created so that the new entity
4771 -- can be populated.
4772 l_orig_count := l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
4773 l_ra_id_temp_tbl.extend(l_res_assignment_id_temp_tbl.COUNT);
4774 l_curr_code_temp_tbl.extend(l_res_assignment_id_temp_tbl.COUNT);
4775 FOR i IN l_orig_count+1 .. l_orig_count+l_res_assignment_id_temp_tbl.COUNT LOOP -- bug 5003827 issue 22
4776 l_ra_id_temp_tbl(i) := l_res_assignment_id_temp_tbl(i-l_orig_count); -- bug 5003827 issue 22
4777 -- Bug 5003827 issue 1
4778 IF p_currency_code_tbl.EXISTS(i-l_orig_count) AND
4779 NVL(p_currency_code_tbl(i-l_orig_count),FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
4780 l_curr_code_temp_tbl(i) := p_currency_code_tbl(i-l_orig_count);
4781 ELSE
4782 l_curr_code_temp_tbl(i) := l_proj_curr_code;
4783 END IF;
4784 END LOOP; -- bug 5003827 issue 22
4785
4786 -------------------------------------------------------------------------------
4787 --No of records in rlm id tbl should be equal to the no of records in ra id tb;
4788 -------------------------------------------------------------------------------
4789
4790 IF l_res_assignment_id_temp_tbl.COUNT <> l_eligible_rlm_ids_tbl.COUNT THEN
4791 IF l_debug_mode = 'Y' THEN
4792 pa_debug.g_err_stage:='For Budget and Forcast p_context - data mismatch';
4793 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4794 END IF;
4795 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
4796 END IF;
4797 -----------------------------------------------------------------------
4798 -- Populating resource assignments and corresponding spread amount flags
4799 -- in PLSql tables. for IN parameters of Calculate API
4800 -- If Quantity exists in the IN parameter then set it to 'Y'
4801 -- or else set it to 'N'
4802 -----------------------------------------------------------------------
4803
4804 IF ( l_res_assignment_id_temp_tbl.COUNT >0) THEN
4805
4806 -- Bug 8370812 - Initialize the index l_rollup_index used for l_ra_id_rollup_tbl
4807 l_rollup_index := 1;
4808
4809 FOR k IN l_res_assignment_id_temp_tbl.FIRST .. l_res_assignment_id_temp_tbl.LAST LOOP
4810
4811 IF l_debug_mode = 'Y' THEN
4812 pa_debug.g_err_stage:='BULK INSERTING DATA - TASK Setting DATA - raid count : '||l_res_assignment_id_temp_tbl.COUNT;
4813 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4814 END IF;
4815
4816 -- Bug 8370812 - Moved inside the IF loop
4817 -- l_res_assignment_id_tbl(l_index) := l_res_assignment_id_temp_tbl(k);
4818
4819 IF (((l_total_quantity_tbl.EXISTS(k)) AND (l_total_quantity_tbl.COUNT > 0))
4820 AND ((nvl(l_total_quantity_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM)
4821 /* bug fix:Bug fix:5726773 AND (l_total_quantity_tbl(k) <> 0))) OR */
4822 AND (l_total_quantity_tbl(k) is NOT NULL ))) OR
4823 (((p_raw_cost_tbl.EXISTS(k)) AND (p_raw_cost_tbl.COUNT > 0))
4824 AND ((nvl(p_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM)
4825 /* bug fix:Bug fix:5726773 AND (p_raw_cost_tbl(k) <> 0))) OR */
4826 AND (p_raw_cost_tbl(k) is NOT NULL))) OR
4827 (((p_burdened_cost_tbl.EXISTS(k)) AND (p_burdened_cost_tbl.COUNT > 0))
4828 AND ((nvl(p_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM)
4829 /* bug fix:Bug fix:5726773 AND (p_burdened_cost_tbl(k) <> 0))) THEN */
4830 AND (p_burdened_cost_tbl(k) is NOT NULL))) THEN
4831
4832 IF l_debug_mode = 'Y' THEN
4833 pa_debug.g_err_stage:='BULK INSERTING DATA - TASK spread amount flag';
4834 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4835 END IF;
4836
4837 -- Bug 8370812
4838 l_res_assignment_id_tbl(l_index) := l_res_assignment_id_temp_tbl(k);
4839
4840 l_spread_amount_flags_tbl(l_index) := 'Y';
4841 l_call_calc_api := 'Y';
4842
4843 -- Bug 3861653
4844 IF p_currency_code_tbl.EXISTS(k) AND
4845 NVL(p_currency_code_tbl(k),FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
4846
4847 l_currency_code_tbl(l_index) := p_currency_code_tbl(k);
4848 ELSE
4849 l_currency_code_tbl(l_index) := l_proj_curr_code;
4850 END IF;
4851
4852 IF l_total_quantity_tbl.EXISTS(k) AND
4853 NVL(l_total_quantity_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4854 /* bug fix:Bug fix:5726773 l_total_quantity_tbl(k) <> 0 THEN */
4855 l_total_quantity_tbl(k) is NOT NULL THEN
4856
4857 l_quantity_tbl(l_index) := l_total_quantity_tbl(k);
4858 END IF;
4859
4860 l_cost_rate_tbl(l_index) := l_cost_rate_override_tbl(k);
4861 l_burden_multiplier_tbl(l_index) := l_burdened_rate_override_tbl(k);
4862
4863 IF p_raw_cost_tbl.EXISTS(k) AND
4864 NVL(p_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4865 /* bug fix:Bug fix:5726773 p_raw_cost_tbl(k) <> 0 THEN */
4866 p_raw_cost_tbl(k) is NOT NULL THEN
4867
4868 l_raw_cost_tbl(l_index) := p_raw_cost_tbl(k);
4869 END IF;
4870
4871 IF p_burdened_cost_tbl.EXISTS(k) AND
4872 NVL(p_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
4873 /* bug fix:Bug fix:5726773 P_burdened_cost_tbl(k) <> 0 THEN */
4874 P_burdened_cost_tbl(k) is NOT NULL THEN
4875
4876 l_burdened_cost_tbl(l_index) := p_burdened_cost_tbl(k);
4877 END IF;
4878
4879 l_index := l_index + 1;
4880 -- Bug 8370812 - TAs for which quantity/raw cost/burdened cost is not passed.
4881 ELSE
4882 l_ra_id_rollup_tbl.extend;
4883 l_curr_code_rollup_tbl.extend;
4884 l_ra_id_rollup_tbl(l_rollup_index) := l_res_assignment_id_temp_tbl(k);
4885
4886 IF p_currency_code_tbl.EXISTS(k) AND
4887 NVL(p_currency_code_tbl(k),FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
4888
4889 l_curr_code_rollup_tbl(l_rollup_index) := p_currency_code_tbl(k);
4890 ELSE
4891 l_curr_code_rollup_tbl(l_rollup_index) := l_proj_curr_code;
4892 END IF;
4893
4894 l_rollup_index := l_rollup_index + 1;
4895 END IF;
4896 END LOOP;
4897 END IF;
4898 -- Bug 3665097
4899 EXIT WHEN p_one_to_one_mapping_flag = 'Y';
4900
4901 -----------------------------------------------------------
4902 -- For p_context = BUDGET or FORECAST
4903 -----------------------------------------------------------
4904 ELSIF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET) OR
4905 (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
4906
4907 ---------------------------------------------------------
4908 -- BULK Inserting records into pa_resource_assignments
4909 -- by iterating throught elligle resource list member ids
4910 ---------------------------------------------------------
4911
4912 ----------------------------------------------------------------
4913 /* Notes to Dev - These changes are only done for B/F Context.
4914 If Skip Duplicate Flag is Passed as Y to Add Planning Transaction API then
4915 if a record already exists in PA_RESOURCE_ASSIGNMENTS for a given Planning
4916 Element passed then the particular record is to be skipped whcile doing a
4917 bulk insert into PA_RESOURCE_ASSIGNMENT.
4918 However If quantity/amounts are passed for the planning elment which has
4919 been skipped for Insert. Calculate API would still be called for it.
4920
4921 As of Now Version - 115.122, the usage of p_skip_duplicate_flags is from
4922 1) Add task and resource page. When Resources are selected to be added as
4923 planning elements for multiple tasks. One or Resource Assignments would
4924 already exists and Insert in RA table would have to be skipped.
4925 But in this case Quantities/Amounts are not passed so Calculate API is
4926 not getting called.
4927 2) Edit Plan Page "Add Another Row" feature.
4928 Consider the following input data.
4929 1) t1 r1 c1
4930 2) t1 r1 c2
4931 3) t2 r2 c2
4932 4) t3 r3 c2
4933 5) t4 r4 c4
4934
4935 System State is such that RA Already Exists for
4936 1) t1 r1
4937 2) t3 r3
4938
4939 In this case Only the following RAs will be inserted.
4940 1)t2 r2 and
4941 3)t4 r4
4942
4943 Basically records 1)2) and 4) have to be skipped.
4944 However calculate API still Will be called for All the 5 records.
4945 This will be taken care by using save exceptions clause in the FORALL Insert below
4946 */
4947 ----------------------------------------------------------------
4948
4949 -----------------------------------------------------------------
4950 -- The Insert Statement below has been modified for changes due to
4951 -- Bug 3719918. When p_one_to_one_mapping_flag is passed as Y for
4952 -- Bugdet/Forecast context. The Bulk insert is run once once for
4953 -- the same index as of rlm_ids.
4954 -- The Exit Condition below takes care of the insert running only once.
4955 -------------------------------------------------------------------
4956
4957 BEGIN
4958 IF l_debug_mode = 'Y' THEN
4959 pa_debug.g_err_stage:='BULK INSERTING DATA - Context TASK p_context : '||p_context;
4960 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4961
4962 pa_debug.g_err_stage:='l_eligible_rlm_ids_tbl.count '||l_eligible_rlm_ids_tbl.count;
4963 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4964
4965 pa_debug.g_err_stage:='l_bf_quantity_tbl.count '||l_bf_quantity_tbl.count;
4966 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4967
4968 pa_debug.g_err_stage:='l_bf_raw_cost_tbl.count '||l_bf_raw_cost_tbl.count;
4969 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4970
4971 pa_debug.g_err_stage:='l_bf_burdened_cost_tbl.count '||l_bf_burdened_cost_tbl.count;
4972 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4973
4974 pa_debug.g_err_stage:='l_bf_revenue_tbl.count '||l_bf_revenue_tbl.count;
4975 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4976
4977 pa_debug.g_err_stage:='l_bf_currency_code_tbl.count '||l_bf_currency_code_tbl.count;
4978 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4979
4980 pa_debug.g_err_stage:='l_bf_cost_rate_tbl.count '||l_bf_cost_rate_tbl.count;
4981 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4982
4983 pa_debug.g_err_stage:='l_bf_bill_rate_tbl.count '||l_bf_bill_rate_tbl.count;
4984 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4985
4986 pa_debug.g_err_stage:='l_bf_burdened_rate_tbl.count '||l_bf_burdened_rate_tbl.count;
4987 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
4988
4989
4990 END IF;
4991
4992 /* Added for bug 11718094 starts */
4993 /* Added for bug 12712061 starts */
4994 /* Modified fix added for bug 11718094 */
4995
4996
4997 if l_ATTRIBUTE1_tbl.count = 0 then
4998 l_ATTRIBUTE1_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
4999
5000 end if;
5001 if l_ATTRIBUTE2_tbl.count = 0 then
5002 l_ATTRIBUTE2_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5003
5004 end if;
5005 if l_ATTRIBUTE3_tbl.count = 0 then
5006 l_ATTRIBUTE3_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5007
5008 end if;
5009 if l_ATTRIBUTE4_tbl.count = 0 then
5010 l_ATTRIBUTE4_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5011
5012 end if;
5013 if l_ATTRIBUTE5_tbl.count = 0 then
5014 l_ATTRIBUTE5_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5015
5016 end if;
5017 if l_ATTRIBUTE6_tbl.count = 0 then
5018 l_ATTRIBUTE6_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5019
5020 end if;
5021 if l_ATTRIBUTE7_tbl.count = 0 then
5022 l_ATTRIBUTE7_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5023
5024 end if;
5025 if l_ATTRIBUTE8_tbl.count = 0 then
5026 l_ATTRIBUTE8_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5027
5028 end if;
5029 if l_ATTRIBUTE9_tbl.count = 0 then
5030 l_ATTRIBUTE9_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5031
5032 end if;
5033 if l_ATTRIBUTE10_tbl.count = 0 then
5034 l_ATTRIBUTE10_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5035
5036 end if;
5037 if l_ATTRIBUTE11_tbl.count = 0 then
5038 l_ATTRIBUTE11_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5039
5040 end if;
5041 if l_ATTRIBUTE12_tbl.count = 0 then
5042 l_ATTRIBUTE12_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5043
5044 end if;
5045 if l_ATTRIBUTE13_tbl.count = 0 then
5046 l_ATTRIBUTE13_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5047
5048 end if;
5049 if l_ATTRIBUTE14_tbl.count = 0 then
5050 l_ATTRIBUTE14_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5051
5052 end if;
5053 if l_ATTRIBUTE15_tbl.count = 0 then
5054 l_ATTRIBUTE15_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5055
5056 end if;
5057 if l_ATTRIBUTE16_tbl.count = 0 then
5058 l_ATTRIBUTE16_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5059
5060 end if;
5061 if l_ATTRIBUTE17_tbl.count = 0 then
5062 l_ATTRIBUTE17_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5063
5064 end if;
5065 if l_ATTRIBUTE18_tbl.count = 0 then
5066 l_ATTRIBUTE18_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5067
5068 end if;
5069 if l_ATTRIBUTE19_tbl.count = 0 then
5070 l_ATTRIBUTE19_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5071
5072 end if;
5073 if l_ATTRIBUTE20_tbl.count = 0 then
5074 l_ATTRIBUTE20_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5075
5076 end if;
5077 if l_ATTRIBUTE21_tbl.count = 0 then
5078 l_ATTRIBUTE21_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5079
5080 end if;
5081 if l_ATTRIBUTE22_tbl.count = 0 then
5082 l_ATTRIBUTE22_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5083
5084 end if;
5085 if l_ATTRIBUTE23_tbl.count = 0 then
5086 l_ATTRIBUTE23_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5087
5088 end if;
5089 if l_ATTRIBUTE24_tbl.count = 0 then
5090 l_ATTRIBUTE24_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5091
5092 end if;
5093 if l_ATTRIBUTE25_tbl.count = 0 then
5094 l_ATTRIBUTE25_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5095
5096 end if;
5097 if l_ATTRIBUTE26_tbl.count = 0 then
5098 l_ATTRIBUTE26_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5099
5100 end if;
5101 if l_ATTRIBUTE27_tbl.count = 0 then
5102 l_ATTRIBUTE27_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5103
5104 end if;
5105 if l_ATTRIBUTE28_tbl.count = 0 then
5106 l_ATTRIBUTE28_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5107
5108 end if;
5109 if l_ATTRIBUTE29_tbl.count = 0 then
5110 l_ATTRIBUTE29_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5111
5112 end if;
5113 if l_ATTRIBUTE30_tbl.count = 0 then
5114 l_ATTRIBUTE30_tbl.extend(l_eligible_rlm_ids_tbl.COUNT);
5115
5116 end if;
5117
5118 FOR j IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST loop
5119 l_ATTRIBUTE1_tbl(j) := NULL;
5120 l_ATTRIBUTE2_tbl(j) := NULL;
5121 l_ATTRIBUTE3_tbl(j) := NULL;
5122 l_ATTRIBUTE4_tbl(j) := NULL;
5123 l_ATTRIBUTE5_tbl(j) := NULL;
5124 l_ATTRIBUTE6_tbl(j) := NULL;
5125 l_ATTRIBUTE7_tbl(j) := NULL;
5126 l_ATTRIBUTE8_tbl(j) := NULL;
5127 l_ATTRIBUTE9_tbl(j) := NULL;
5128 l_ATTRIBUTE10_tbl(j) := NULL;
5129
5130 l_ATTRIBUTE11_tbl(j) := NULL;
5131 l_ATTRIBUTE12_tbl(j) := NULL;
5132 l_ATTRIBUTE13_tbl(j) := NULL;
5133 l_ATTRIBUTE14_tbl(j) := NULL;
5134 l_ATTRIBUTE15_tbl(j) := NULL;
5135 l_ATTRIBUTE16_tbl(j) := NULL;
5136 l_ATTRIBUTE17_tbl(j) := NULL;
5137 l_ATTRIBUTE18_tbl(j) := NULL;
5138 l_ATTRIBUTE19_tbl(j) := NULL;
5139 l_ATTRIBUTE20_tbl(j) := NULL;
5140
5141 l_ATTRIBUTE21_tbl(j) := NULL;
5142 l_ATTRIBUTE22_tbl(j) := NULL;
5143 l_ATTRIBUTE23_tbl(j) := NULL;
5144 l_ATTRIBUTE24_tbl(j) := NULL;
5145 l_ATTRIBUTE25_tbl(j) := NULL;
5146 l_ATTRIBUTE26_tbl(j) := NULL;
5147 l_ATTRIBUTE27_tbl(j) := NULL;
5148 l_ATTRIBUTE28_tbl(j) := NULL;
5149 l_ATTRIBUTE29_tbl(j) := NULL;
5150 l_ATTRIBUTE30_tbl(j) := NULL;
5151
5152 end loop;
5153 /* Added for bug 11718094 ends */
5154 /* Added for bug 12712061 starts */
5155 /* Modified fix added for bug 11718094 */
5156
5157
5158 FORALL j IN l_eligible_rlm_ids_tbl.FIRST .. l_eligible_rlm_ids_tbl.LAST SAVE EXCEPTIONS
5159 INSERT INTO PA_RESOURCE_ASSIGNMENTS (
5160 RESOURCE_ASSIGNMENT_ID,BUDGET_VERSION_ID,PROJECT_ID,TASK_ID,RESOURCE_LIST_MEMBER_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,CREATION_DATE,CREATED_BY
5161 ,LAST_UPDATE_LOGIN,UNIT_OF_MEASURE,TRACK_AS_LABOR_FLAG,STANDARD_BILL_RATE,AVERAGE_BILL_RATE,AVERAGE_COST_RATE
5162 ,PROJECT_ASSIGNMENT_ID,PLAN_ERROR_CODE,TOTAL_PLAN_REVENUE,TOTAL_PLAN_RAW_COST,TOTAL_PLAN_BURDENED_COST,TOTAL_PLAN_QUANTITY
5163 ,AVERAGE_DISCOUNT_PERCENTAGE,TOTAL_BORROWED_REVENUE,TOTAL_TP_REVENUE_IN,TOTAL_TP_REVENUE_OUT,TOTAL_REVENUE_ADJ
5164 ,TOTAL_LENT_RESOURCE_COST,TOTAL_TP_COST_IN,TOTAL_TP_COST_OUT,TOTAL_COST_ADJ,TOTAL_UNASSIGNED_TIME_COST
5165 ,TOTAL_UTILIZATION_PERCENT,TOTAL_UTILIZATION_HOURS,TOTAL_UTILIZATION_ADJ,TOTAL_CAPACITY,TOTAL_HEAD_COUNT
5166 ,TOTAL_HEAD_COUNT_ADJ,RESOURCE_ASSIGNMENT_TYPE,TOTAL_PROJECT_RAW_COST,TOTAL_PROJECT_BURDENED_COST,TOTAL_PROJECT_REVENUE
5167 ,PARENT_ASSIGNMENT_ID,WBS_ELEMENT_VERSION_ID,RBS_ELEMENT_ID,PLANNING_START_DATE,PLANNING_END_DATE,SCHEDULE_START_DATE,SCHEDULE_END_DATE
5168 ,SPREAD_CURVE_ID,ETC_METHOD_CODE,RES_TYPE_CODE,ATTRIBUTE_CATEGORY,ATTRIBUTE1,ATTRIBUTE2,ATTRIBUTE3,ATTRIBUTE4,ATTRIBUTE5
5169 ,ATTRIBUTE6,ATTRIBUTE7,ATTRIBUTE8,ATTRIBUTE9,ATTRIBUTE10,ATTRIBUTE11,ATTRIBUTE12,ATTRIBUTE13,ATTRIBUTE14,ATTRIBUTE15
5170 ,ATTRIBUTE16,ATTRIBUTE17,ATTRIBUTE18,ATTRIBUTE19,ATTRIBUTE20,ATTRIBUTE21,ATTRIBUTE22,ATTRIBUTE23,ATTRIBUTE24,ATTRIBUTE25
5171 ,ATTRIBUTE26,ATTRIBUTE27,ATTRIBUTE28,ATTRIBUTE29,ATTRIBUTE30,FC_RES_TYPE_CODE,RESOURCE_CLASS_CODE,ORGANIZATION_ID,JOB_ID
5172 ,PERSON_ID,EXPENDITURE_TYPE,EXPENDITURE_CATEGORY,REVENUE_CATEGORY_CODE,EVENT_TYPE,SUPPLIER_ID,NON_LABOR_RESOURCE
5173 ,BOM_RESOURCE_ID,INVENTORY_ITEM_ID,ITEM_CATEGORY_ID,RECORD_VERSION_NUMBER,BILLABLE_PERCENT
5174 ,TRANSACTION_SOURCE_CODE,MFC_COST_TYPE_ID,PROCURE_RESOURCE_FLAG,ASSIGNMENT_DESCRIPTION
5175 ,INCURRED_BY_RES_FLAG,RATE_JOB_ID,RATE_EXPENDITURE_TYPE,TA_DISPLAY_FLAG
5176 ,SP_FIXED_DATE,PERSON_TYPE_CODE,RATE_BASED_FLAG,USE_TASK_SCHEDULE_FLAG,RATE_EXP_FUNC_CURR_CODE
5177 ,RATE_EXPENDITURE_ORG_ID,INCUR_BY_RES_CLASS_CODE,INCUR_BY_ROLE_ID
5178 ,PROJECT_ROLE_ID,RESOURCE_CLASS_FLAG,NAMED_ROLE,TXN_ACCUM_HEADER_ID
5179 ,PM_PRODUCT_CODE, PM_RES_ASSIGNMENT_REFERENCE, resource_rate_based_flag,
5180 cbs_element_id --Bug#16200605
5181 )
5182 VALUES
5183 ( pa_resource_assignments_s.nextval -- RESOURCE_ASSIGNMENT_ID
5184 ,l_budget_version_id -- BUDGET_VERSION_ID
5185 ,p_project_id -- PROJECT_ID
5186 ,decode(p_one_to_one_mapping_flag,'Y',l_bf_proj_elem_tbl(j)
5187 ,l_proj_element_id_tbl(i)) -- TASK_ID
5188 ,l_eligible_rlm_ids_tbl(j) -- RESOURCE_LIST_MEMBER_ID
5189 ,sysdate -- LAST_UPDATE_DATE
5190 ,fnd_global.user_id -- LAST_UPDATED_BY
5191 ,sysdate -- CREATION_DATE
5192 ,fnd_global.user_id -- CREATED_BY
5193 ,fnd_global.login_id -- LAST_UPDATE_LOGIN
5194 ,l_unit_of_measure_tbl(j) -- UNIT_OF_MEASURE
5195 ,NULL -- TRACK_AS_LABOR_FLAG
5196 ,NULL -- STANDARD_BILL_RATE
5197 ,NULL -- AVERAGE_BILL_RATE
5198 ,NULL -- AVERAGE_COST_RATE
5199 ,-1 -- PROJECT_ASSIGNMENT_ID
5200 ,NULL -- PLAN_ERROR_CODE
5201 ,NULL -- TOTAL_PLAN_REVENUE
5202 ,NULL -- TOTAL_PLAN_RAW_COST
5203 ,NULL -- TOTAL_PLAN_BURDENED_COST
5204 ,NULL -- TOTAL_PLAN_QUANTITY
5205 ,NULL -- AVERAGE_DISCOUNT_PERCENTAGE
5206 ,NULL -- TOTAL_BORROWED_REVENUE
5207 ,NULL -- TOTAL_TP_REVENUE_IN
5208 ,NULL -- TOTAL_TP_REVENUE_OUT
5209 ,NULL -- TOTAL_REVENUE_ADJ
5210 ,NULL -- TOTAL_LENT_RESOURCE_COST
5211 ,NULL -- TOTAL_TP_COST_IN
5212 ,NULL -- TOTAL_TP_COST_OUT
5213 ,NULL -- TOTAL_COST_ADJ
5214 ,NULL -- TOTAL_UNASSIGNED_TIME_COST
5215 ,NULL -- TOTAL_UTILIZATION_PERCENT
5216 ,NULL -- TOTAL_UTILIZATION_HOURS
5217 ,NULL -- TOTAL_UTILIZATION_ADJ
5218 ,NULL -- TOTAL_CAPACITY
5219 ,NULL -- TOTAL_HEAD_COUNT
5220 ,NULL -- TOTAL_HEAD_COUNT_ADJ
5221 ,'USER_ENTERED' -- RESOURCE_ASSIGNMENT_TYPE
5222 ,NULL -- TOTAL_PROJECT_RAW_COST
5223 ,NULL -- TOTAL_PROJECT_BURDENED_COST
5224 ,NULL -- TOTAL_PROJECT_REVENUE
5225 ,NULL -- PARENT_ASSIGNMENT_ID
5226 ,NULL -- WBS_ELEMENT_VERSION_ID --Bug 3546208
5227 ,l_rbs_element_id_tbl(j) -- RBS_ELEMENT_ID
5228 ,decode(p_one_to_one_mapping_flag,'Y',l_bf_start_date_tbl(j)
5229 ,l_start_date_tbl(i)) -- PLANNING_START_DATE
5230 ,decode(p_one_to_one_mapping_flag,'Y',l_bf_compl_date_tbl(j)
5231 ,l_compl_date_tbl(i)) -- PLANNING_END_DATE
5232 ,decode(p_one_to_one_mapping_flag,'Y',l_bf_start_date_tbl(j)
5233 ,l_start_date_tbl(i)) -- SCHEDULE_START_DATE
5234 ,decode(p_one_to_one_mapping_flag,'Y',l_bf_compl_date_tbl(j)
5235 ,l_compl_date_tbl(i)) -- SCHEDULE_END_DATE
5236 ,l_spread_curve_id_tbl(j) -- SPREAD_CURVE_ID
5237 ,l_etc_method_code_tbl(j) -- ETC_METHOD_CODE
5238 ,l_res_type_code_tbl(j) -- RES_TYPE_CODE
5239 ,NULL -- ATTRIBUTE_CATEGORY
5240 ,l_ATTRIBUTE1_tbl(j) -- ATTRIBUTE1
5241 ,l_ATTRIBUTE2_tbl(j) -- ATTRIBUTE2
5242 ,l_ATTRIBUTE3_tbl(j) -- ATTRIBUTE3
5243 ,l_ATTRIBUTE4_tbl(j) -- ATTRIBUTE4
5244 ,l_ATTRIBUTE5_tbl(j) -- ATTRIBUTE5
5245 ,l_ATTRIBUTE6_tbl(j) -- ATTRIBUTE6
5246 ,l_ATTRIBUTE7_tbl(j) -- ATTRIBUTE7
5247 ,l_ATTRIBUTE8_tbl(j) -- ATTRIBUTE8
5248 ,l_ATTRIBUTE9_tbl(j) -- ATTRIBUTE9
5249 ,l_ATTRIBUTE10_tbl(j) -- ATTRIBUTE10
5250 ,l_ATTRIBUTE11_tbl(j) -- ATTRIBUTE11
5251 ,l_ATTRIBUTE12_tbl(j) -- ATTRIBUTE12
5252 ,l_ATTRIBUTE13_tbl(j) -- ATTRIBUTE13
5253 ,l_ATTRIBUTE14_tbl(j) -- ATTRIBUTE14
5254 ,l_ATTRIBUTE15_tbl(j) -- ATTRIBUTE15
5255 ,l_ATTRIBUTE16_tbl(j) -- ATTRIBUTE16
5256 ,l_ATTRIBUTE17_tbl(j) -- ATTRIBUTE17
5257 ,l_ATTRIBUTE18_tbl(j) -- ATTRIBUTE18
5258 ,l_ATTRIBUTE19_tbl(j) -- ATTRIBUTE19
5259 ,l_ATTRIBUTE20_tbl(j) -- ATTRIBUTE20
5260 ,l_ATTRIBUTE21_tbl(j) -- ATTRIBUTE21
5261 ,l_ATTRIBUTE22_tbl(j) -- ATTRIBUTE22
5262 ,l_ATTRIBUTE23_tbl(j) -- ATTRIBUTE23
5263 ,l_ATTRIBUTE24_tbl(j) -- ATTRIBUTE24
5264 ,l_ATTRIBUTE25_tbl(j) -- ATTRIBUTE25
5265 ,l_ATTRIBUTE26_tbl(j) -- ATTRIBUTE26
5266 ,l_ATTRIBUTE27_tbl(j) -- ATTRIBUTE27
5267 ,l_ATTRIBUTE28_tbl(j) -- ATTRIBUTE28
5268 ,l_ATTRIBUTE29_tbl(j) -- ATTRIBUTE29
5269 ,l_ATTRIBUTE30_tbl(j) -- ATTRIBUTE30
5270 ,l_fc_res_type_code_tbl(j) -- FC_RES_TYPE_CODE
5271 ,l_resource_class_code_tbl(j) -- RESOURCE_CLASS_CODE
5272 ,l_organization_id_tbl(j) -- ORGANIZATION_ID
5273 ,l_job_id_tbl(j) -- JOB_ID
5274 ,l_person_id_tbl(j) -- PERSON_ID
5275 ,l_expenditure_type_tbl(j) -- EXPENDITURE_TYPE
5276 ,l_expenditure_category_tbl(j) -- EXPENDITURE_CATEGORY
5277 ,l_revenue_category_code_tbl(j) -- REVENUE_CATEGORY_CODE
5278 ,l_event_type_tbl(j) -- EVENT_TYPE
5279 ,l_supplier_id_tbl(j) -- SUPPLIER_ID
5280 ,l_non_labor_resource_tbl(j) -- NON_LABOR_RESOURCE
5281 ,l_bom_resource_id_tbl(j) -- BOM_RESOURCE_ID
5282 ,l_inventory_item_id_tbl(j) -- INVENTORY_ITEM_ID
5283 ,l_item_category_id_tbl(j) -- ITEM_CATEGORY_ID
5284 ,1 -- RECORD_VERSION_NUMBER
5285 ,NULL -- BILLABLE_PERCENT
5286 ,NULL -- TRANSACTION_SOURCE_CODE
5287 ,l_mfc_cost_type_id_tbl(j) -- MFC_COST_TYPE_ID
5288 ,NULL -- PROCURE_RESOURCE_FLAG
5289 ,NULL -- ASSIGNMENT_DESCRIPTION
5290 ,l_incurred_by_res_flag_tbl(j) -- INCURRED_BY_RES_FLAG
5291 ,NULL -- RATE_JOB_ID
5292 ,l_rate_expenditure_type_tbl(j) -- RATE_EXPENDITURE_TYPE
5293 ,NULL -- TA_DISPLAY_FLAG
5294 ,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)
5295 ,decode(l_spread_curve_id_tbl(j),l_fixed_date_sp_id,l_start_date_tbl(i),null)) -- SP_FIXED_DATE -- Bug 3607061
5296 ,l_person_type_code_tbl(j) -- PERSON_TYPE_CODE
5297 ,decode(l_res_class_flag,'N','N',l_rate_based_flag_tbl(j)) -- RATE_BASED_FLAG -- if context is workplan and prl is resource class disabled then set Rate_based_flag as 'N'
5298 ,l_use_task_schedule_flag_tbl(j) -- USE_TASK_SCHEDULE_FLAG
5299 ,l_rate_func_curr_code_tbl(j) -- RATE_EXP_FUNC_CURR_CODE
5300 ,l_org_id_tbl(j) -- RATE_EXPENDITURE_ORG_ID
5301 ,l_incur_by_res_class_code_tbl(j) -- INCUR_BY_RES_CLASS_CODE
5302 ,l_incur_by_role_id_tbl(j) -- INCUR_BY_ROLE_ID
5303 ,l_project_role_id_tbl(j) -- PROJECT_ROLE_ID
5304 ,l_resource_class_flag_tbl(j) -- RESOURCE_CLASS_FLAG
5305 ,l_named_role_tbl(j) -- NAMED_ROLE
5306 ,l_txn_accum_header_id_tbl(j) -- TXN ACCUM HEADER ID
5307 ,l_pm_product_code_tbl(j) -- PM_PRODUCT_CODE
5308 ,l_pm_res_asgmt_ref_tbl(j) -- PM_RES_ASSIGNMENT_REFERENCE
5309 ,l_rate_based_flag_tbl(j) -- resource_RATE_BASED_FLAG
5310 ,l_cbs_id_rlm_tbl(j) -- CBS_ELEMENT_ID --Bug#16200605
5311 )
5312 RETURNING
5313 task_id,
5314 resource_list_member_id,
5315 resource_assignment_id,
5316 l_bf_quantity_tbl(j),
5317 l_bf_raw_cost_tbl(j),
5318 l_bf_burdened_cost_tbl(j),
5319 l_bf_revenue_tbl(j),
5320 l_bf_currency_code_tbl(j),
5321 l_bf_cost_rate_tbl(j),
5322 l_bf_bill_rate_tbl(j),
5323 l_bf_burdened_rate_tbl(j)
5324 BULK COLLECT INTO
5325 l_bf_task_id_tbl,
5326 l_bf_rlm_id_tbl,
5327 l_bf_ra_id_tbl,
5328 l_bf_ins_quantity_tbl,
5329 l_bf_ins_raw_cost_tbl,
5330 l_bf_ins_burdened_cost_tbl,
5331 l_bf_ins_revenue_tbl,
5332 l_bf_ins_currency_code_tbl,
5333 l_bf_ins_cost_rate_tbl,
5334 l_bf_ins_bill_rate_tbl,
5335 l_bf_ins_burdened_rate_tbl;
5336
5337 -- IPM changes - copy the RA ID's created so that the new entity
5338 -- can be populated.
5339 l_orig_count := l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
5340 l_ra_id_temp_tbl.extend(l_bf_ra_id_tbl.COUNT);
5341 l_curr_code_temp_tbl.extend(l_bf_ins_currency_code_tbl.COUNT);
5342 FOR i IN l_orig_count+1 .. l_orig_count+l_bf_ra_id_tbl.COUNT LOOP -- bug 5003827 issue 22
5343 l_ra_id_temp_tbl(i) := l_bf_ra_id_tbl(i-l_orig_count); -- bug 5003827 issue 22
5344 l_curr_code_temp_tbl(i) := l_bf_ins_currency_code_tbl(i-l_orig_count); -- bug 5003827 issue 22
5345 END LOOP; -- bug 5003827 issue 22
5346
5347 -- hr_utility.trace('after copy 1');
5348 -- hr_utility.trace('l_ra_id_temp_tbl.COUNT IS : ' || l_ra_id_temp_tbl.COUNT);
5349 -- hr_utility.trace('l_bf_ra_id_tbl.COUNT IS : ' || l_bf_ra_id_tbl.COUNT);
5350 -- hr_utility.trace('l_bf_ins_currency_code_tbl(1) IS : ' || l_bf_ins_currency_code_tbl(1));
5351 -- hr_utility.trace('*****');
5352 EXCEPTION
5353 WHEN dml_errors THEN
5354
5355 IF p_skip_duplicates_flag='Y' THEN
5356
5357 --If p_one_to_one_mapping_flag is not Y then the amounts will never be passed to this API
5358 --Hence we can ignore the pl/sql tbls bulk collected above
5359 IF p_one_to_one_mapping_flag='Y' THEN
5360
5361 l_index := l_bf_task_id_tbl.count;
5362
5363
5364
5365 IF (l_index + SQL%BULK_EXCEPTIONS.COUNT ) <> l_eligible_rlm_ids_tbl.COUNT THEN
5366
5367 pa_debug.g_err_stage:='No of inserted records + No. of errored records is not equal to total no. of input records';
5368 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5369
5370 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5371 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
5372 p_token1 => 'PROCEDURENAME',
5373 p_value1 => 'ADD_PLANNING_TRANSACTIONS',
5374 p_token2 => 'STAGE',
5375 p_value2 => 'Ins Recs + Err Recs <> Total Recs ['||l_index||' , '||SQL%BULK_EXCEPTIONS.COUNT ||' , '||l_eligible_rlm_ids_tbl.COUNT );
5376
5377 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5378
5379 END IF;
5380
5381 l_bf_task_id_tbl.extend(l_rlm_id_no_of_rows-l_bf_task_id_tbl.count);
5382 l_bf_rlm_id_tbl.extend(l_rlm_id_no_of_rows-l_bf_rlm_id_tbl.count);
5383 l_bf_ra_id_tbl.extend(l_rlm_id_no_of_rows-l_bf_ra_id_tbl.count);
5384 l_bf_ins_quantity_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_quantity_tbl.count);
5385 l_bf_ins_currency_code_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_currency_code_tbl.count);
5386 l_bf_ins_raw_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_raw_cost_tbl.count);
5387 l_bf_ins_burdened_cost_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_burdened_cost_tbl.count);
5388 l_bf_ins_revenue_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_revenue_tbl.count);
5389 l_bf_ins_cost_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_cost_rate_tbl.count);
5390 l_bf_ins_bill_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_bill_rate_tbl.count);
5391 l_bf_ins_burdened_rate_tbl.extend(l_rlm_id_no_of_rows-l_bf_ins_burdened_rate_tbl.count);
5392
5393
5394 --Even though the above INSERT statement fails for duplicated records, those records should also be
5395 --prepared since the calculate API has to be called for those records. This can be done by using
5396 --SQL%BULK_EXCEPTIONS through which it is possible to identify the iteration in which the dml has
5397 --failed
5398 FOR kk IN 1..SQL%BULK_EXCEPTIONS.COUNT LOOP
5399
5400
5401 l_temp:=SQL%BULK_EXCEPTIONS(kk).ERROR_INDEX;
5402 SELECT task_id,
5403 resource_list_member_id,
5404 resource_assignment_id,
5405 l_bf_quantity_tbl(l_temp),
5406 l_bf_raw_cost_tbl(l_temp),
5407 l_bf_burdened_cost_tbl(l_temp),
5408 l_bf_revenue_tbl(l_temp),
5409 l_bf_currency_code_tbl(l_temp),
5410 l_bf_cost_rate_tbl(l_temp),
5411 l_bf_bill_rate_tbl(l_temp),
5412 l_bf_burdened_rate_tbl(l_temp)
5413 INTO l_bf_task_id_tbl(l_index+kk),
5414 l_bf_rlm_id_tbl(l_index+kk),
5415 l_bf_ra_id_tbl(l_index+kk),
5416 l_bf_ins_quantity_tbl(l_index+kk),
5417 l_bf_ins_raw_cost_tbl(l_index+kk),
5418 l_bf_ins_burdened_cost_tbl(l_index+kk),
5419 l_bf_ins_revenue_tbl(l_index+kk),
5420 l_bf_ins_currency_code_tbl(l_index+kk),
5421 l_bf_ins_cost_rate_tbl(l_index+kk),
5422 l_bf_ins_bill_rate_tbl(l_index+kk),
5423 l_bf_ins_burdened_rate_tbl(l_index+kk)
5424 FROM pa_resource_assignments
5425 WHERE project_id=p_project_id
5426 AND budget_version_id=l_budget_version_id
5427 AND task_id =l_bf_proj_elem_tbl(l_temp)
5428 AND resource_list_member_id=l_eligible_rlm_ids_tbl(l_temp)
5429 AND project_assignment_id=-1;
5430
5431
5432 END LOOP;
5433
5434 --_ins_ tbls are used only for the FORALL Insert above. Copy them back to _bf_ tbls
5435 --which are used in processing below
5436 l_bf_quantity_tbl := l_bf_ins_quantity_tbl;
5437 l_bf_raw_cost_tbl := l_bf_ins_raw_cost_tbl ;
5438 l_bf_burdened_cost_tbl := l_bf_ins_burdened_cost_tbl;
5439 l_bf_revenue_tbl := l_bf_ins_revenue_tbl ;
5440 l_bf_currency_code_tbl := l_bf_ins_currency_code_tbl;
5441 l_bf_cost_rate_tbl := l_bf_ins_cost_rate_tbl;
5442 l_bf_bill_rate_tbl := l_bf_ins_bill_rate_tbl;
5443 l_bf_burdened_rate_tbl := l_bf_ins_burdened_rate_tbl;
5444
5445 -- IPM changes - copy the RA ID's created so that the new entity
5446 -- can be populated.
5447 l_orig_count := l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
5448 l_ra_id_temp_tbl.extend(l_bf_ra_id_tbl.COUNT);
5449 l_curr_code_temp_tbl.extend(l_bf_ins_currency_code_tbl.COUNT);
5450 FOR i IN l_orig_count+1 .. l_orig_count+l_bf_ra_id_tbl.COUNT LOOP -- bug 5003827 issue 22
5451 l_ra_id_temp_tbl(i) := l_bf_ra_id_tbl(i-l_orig_count); -- bug 5003827 issue 22
5452 l_curr_code_temp_tbl(i) := l_bf_ins_currency_code_tbl(i-l_orig_count); -- bug 5003827 issue 22
5453 END LOOP; -- bug 5003827 issue 22
5454
5455 -- hr_utility.trace('after copy 2');
5456 -- hr_utility.trace('l_ra_id_temp_tbl.COUNT IS : ' || l_ra_id_temp_tbl.COUNT);
5457 -- hr_utility.trace('l_bf_ra_id_tbl.COUNT IS : ' || l_bf_ra_id_tbl.COUNT);
5458 -- hr_utility.trace('*****');
5459
5460 --Added for bug#14201002
5461 ELSE --ELSE case for p_one_to_one_mapping_flag='Y' THEN
5462 l_index := l_bf_task_id_tbl.count;
5463
5464 IF (l_index + SQL%BULK_EXCEPTIONS.COUNT ) <> l_eligible_rlm_ids_tbl.COUNT THEN
5465
5466 pa_debug.g_err_stage:='No of inserted records + No. of errored records is not equal to total no. of input records';
5467 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5468
5469 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5470 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
5471 p_token1 => 'PROCEDURENAME',
5472 p_value1 => 'ADD_PLANNING_TRANSACTIONS',
5473 p_token2 => 'STAGE',
5474 p_value2 => 'Ins Recs + Err Recs <> Total Recs ['||l_index||' , '||SQL%BULK_EXCEPTIONS.COUNT ||' , '||l_eligible_rlm_ids_tbl.COUNT );
5475
5476 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5477
5478 END IF;
5479
5480 l_orig_count := l_ra_id_temp_tbl.COUNT; -- bug 5003827 issue 22
5481 l_ra_id_temp_tbl.extend(l_bf_ra_id_tbl.COUNT);
5482 l_curr_code_temp_tbl.extend(l_bf_ins_currency_code_tbl.COUNT);
5483
5484 FOR i IN l_orig_count+1 .. l_orig_count+l_bf_ra_id_tbl.COUNT LOOP
5485 l_ra_id_temp_tbl(i) := l_bf_ra_id_tbl(i-l_orig_count);
5486 END LOOP;
5487 -- End of code changes done for bug#14201002
5488 END IF;--IF p_one_to_one_mapping_flag='Y' THEN
5489
5490 ELSE
5491
5492 pa_debug.g_err_stage:='No of duplicates found '||SQL%BULK_EXCEPTIONS.COUNT;
5493 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5494
5495 RAISE;
5496
5497 END IF;
5498
5499 END;
5500
5501 IF l_debug_mode = 'Y' THEN
5502 pa_debug.g_err_stage:='FLAG 2 '||l_bf_ra_id_tbl.COUNT;
5503 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5504 END IF;
5505
5506 -------------------------------------------------------------------------------
5507 --No of records in rlm id tbl should be equal to the no of records in ra id tb;
5508 -------------------------------------------------------------------------------
5509 IF l_bf_ra_id_tbl.COUNT <> l_eligible_rlm_ids_tbl.COUNT AND
5510 (p_skip_duplicates_flag = 'N') THEN
5511
5512 IF l_debug_mode = 'Y' THEN
5513 pa_debug.g_err_stage:='INSIDE Bulk Data insert for budget/forecast';
5514 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5515
5516 pa_debug.g_err_stage:='For Budget and Forcast p_context - data mismatch';
5517 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5518 END IF;
5519 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5520
5521 END IF;
5522
5523 l_index := 1;
5524
5525 -----------------------------------------------------------------------
5526 -- Populating resource assignments and corresponding spread amount flags
5527 -- in PLSql tables. for IN parameters of Calculate API
5528 -- If Quantity/Raw_Cost/Burdened_Cost exists in the IN parameter then
5529 -- set it to 'Y'or else set it to 'N'.
5530 --Calculate API will be called only when p_one_to_one_mapping_flag is Y
5531 -----------------------------------------------------------------------
5532 --IF nvl(p_skip_duplicates_flag,'N') = 'N' THEN -- Bug 3836358
5533 IF p_one_to_one_mapping_flag='Y' THEN
5534
5535 IF l_bf_ra_id_tbl.COUNT >0 THEN
5536
5537 FOR k IN l_bf_ra_id_tbl.FIRST .. l_bf_ra_id_tbl.LAST LOOP
5538
5539 l_res_assignment_id_tbl(l_index) := l_bf_ra_id_tbl(k);
5540 l_amount_exists :='N';
5541
5542 IF l_bf_quantity_tbl.EXISTS(k) AND
5543 NVL(l_bf_quantity_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
5544 /* bug fix:Bug fix:5726773 l_bf_quantity_tbl(k) <> 0 THEN */
5545 l_bf_quantity_tbl(k) is NOT NULL THEN
5546 l_quantity_tbl(l_index) := l_bf_quantity_tbl(k);
5547 l_amount_exists := 'Y';
5548 END IF;
5549
5550 IF l_bf_raw_cost_tbl.EXISTS(k) AND
5551 NVL(l_bf_raw_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
5552 /* bug fix:Bug fix:5726773 l_bf_raw_cost_tbl(k) <> 0 THEN */
5553 l_bf_raw_cost_tbl(k) is NOT NULL THEN
5554 l_raw_cost_tbl(l_index) := l_bf_raw_cost_tbl(k);
5555 l_amount_exists := 'Y';
5556 END IF;
5557
5558 IF l_bf_burdened_cost_tbl.EXISTS(k) AND
5559 NVL(l_bf_burdened_cost_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
5560 /* bug fix:Bug fix:5726773 l_bf_burdened_cost_tbl(k) <> 0 THEN */
5561 l_bf_burdened_cost_tbl(k) is NOT NULL THEN
5562 l_burdened_cost_tbl(l_index) := l_bf_burdened_cost_tbl(k);
5563 l_amount_exists := 'Y';
5564 END IF;
5565
5566 IF l_bf_revenue_tbl.EXISTS(k) AND
5567 NVL(l_bf_revenue_tbl(k),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
5568 /* bug fix:Bug fix:5726773 l_bf_revenue_tbl(k) <> 0 THEN */
5569 l_bf_revenue_tbl(k) is NOT NULL THEN
5570 l_revenue_tbl(l_index) := l_bf_revenue_tbl(k);
5571 l_amount_exists := 'Y';
5572 END IF;
5573
5574 IF l_amount_exists ='Y' THEN
5575 IF l_debug_mode = 'Y' THEN
5576 pa_debug.g_err_stage:='Amount exists and preparing the tbls for calc API';
5577 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5578 END IF;
5579
5580 IF l_bf_currency_code_tbl.EXISTS(k) AND
5581 NVL(l_bf_currency_code_tbl(k),FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
5582 l_currency_code_tbl(l_index) := l_bf_currency_code_tbl(k);
5583 ELSE
5584
5585 IF l_debug_mode = 'Y' THEN
5586 pa_debug.g_err_stage:='Currency code not passed when amounts are passed';
5587 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5588 END IF;
5589 --dbms_output.put_line('curr code not passed');
5590 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5591 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
5592
5593 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5594
5595 END IF;
5596
5597
5598 IF l_bf_cost_rate_tbl.EXISTS(k) THEN
5599 l_cost_rate_tbl(l_index) := l_bf_cost_rate_tbl(k);
5600 END IF;
5601
5602 IF l_bf_bill_rate_tbl.EXISTS(k) THEN
5603 l_bill_rate_tbl(l_index) := l_bf_bill_rate_tbl(k);
5604 END IF;
5605
5606 IF l_bf_burdened_rate_tbl.EXISTS(k) THEN
5607 l_burden_multiplier_tbl(l_index) := l_bf_burdened_rate_tbl(k);
5608 END IF;
5609
5610 l_call_calc_api := 'Y';
5611 l_spread_amount_flags_tbl(l_index) := 'Y';
5612 l_index := l_index + 1;
5613
5614 END IF;
5615
5616 END LOOP;
5617
5618 END IF;--IF l_bf_ra_id_tbl.COUNT >0 THEN
5619
5620 END IF;--IF p_one_to_one_mapping_flag='Y' THEN
5621 -- END IF; -- Bug 3836358
5622
5623 EXIT WHEN p_one_to_one_mapping_flag = 'Y';
5624 END IF; -- if condition for p_context
5625 END LOOP; -- loop for task_element_version_id
5626 END IF; -- p_context in TA/BF
5627 ----------------------------------------------------
5628 -- Loop for all the task_elem_version_id --- Ends
5629 ----------------------------------------------------
5630
5631 /* In create version calculate need not and should not be called... */
5632 IF NVL(p_calling_module,'-99') <> 'CREATE_VERSION' AND l_index > 1 THEN
5633 -- Remove the extra records from the input pl/sql tables
5634 l_res_assignment_id_tbl.delete(l_index,l_res_assignment_id_tbl.count);
5635 l_delete_budget_lines_tbl.delete(l_index,l_delete_budget_lines_tbl.count);
5636 l_spread_amount_flags_tbl.delete(l_index,l_spread_amount_flags_tbl.count);
5637 l_currency_code_tbl.delete(l_index,l_currency_code_tbl.count);
5638 l_quantity_tbl.delete(l_index,l_quantity_tbl.count);
5639 l_raw_cost_tbl.delete(l_index,l_raw_cost_tbl.count);
5640 l_burdened_cost_tbl.delete(l_index,l_burdened_cost_tbl.count);
5641 l_revenue_tbl.delete(l_index,l_revenue_tbl.count);
5642 l_cost_rate_tbl.delete(l_index,l_cost_rate_tbl.count);
5643 l_burden_multiplier_tbl.delete(l_index,l_burden_multiplier_tbl.count);
5644 l_bill_rate_tbl.delete(l_index,l_bill_rate_tbl.count);
5645 l_line_start_date_tbl.delete(l_index,l_line_start_date_tbl.count);
5646 l_line_end_date_tbl.delete(l_index,l_line_end_date_tbl.count);
5647
5648 IF l_debug_mode = 'Y' THEN
5649 IF l_res_assignment_id_tbl.COUNT > 0 THEN
5650 FOR i in l_res_assignment_id_tbl.FIRST .. l_res_assignment_id_tbl.LAST LOOP
5651 pa_debug.g_err_stage:='CALCULATE PARAM l_res_assignment_id_tbl :'||l_res_assignment_id_tbl(i);
5652 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5653
5654 pa_debug.g_err_stage:='CALCULATE PARAM l_quantity_tbl :'||l_quantity_tbl(i);
5655 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5656
5657 pa_debug.g_err_stage:='CALCULATE PARAM l_raw_cost_tbl :'||l_raw_cost_tbl(i);
5658 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5659
5660 pa_debug.g_err_stage:='CALCULATE PARAM l_burdened_cost_tbl :'||l_burdened_cost_tbl(i);
5661 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5662
5663 pa_debug.g_err_stage:='CALCULATE PARAM l_revenue_tbl :'||l_revenue_tbl(i);
5664 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5665
5666 pa_debug.g_err_stage:='CALCULATE PARAM l_currency_code_tbl :'||l_currency_code_tbl(i);
5667 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5668
5669 pa_debug.g_err_stage:='CALCULATE PARAM l_cost_rate_tbl :'||l_cost_rate_tbl(i);
5670 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5671
5672 pa_debug.g_err_stage:='CALCULATE PARAM l_burden_multiplier_tbl :'||l_burden_multiplier_tbl(i);
5673 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5674
5675 pa_debug.g_err_stage:='CALCULATE PARAM l_bill_rate_tbl :'||l_bill_rate_tbl(i);
5676 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5677 END LOOP;
5678 END IF;
5679 END IF;
5680
5681 PA_FP_CALC_PLAN_PKG.calculate(
5682 p_project_id => p_project_id
5683 ,p_budget_version_id => l_budget_version_id
5684 ,p_source_context => PA_FP_CONSTANTS_PKG.G_CALC_API_RESOURCE_CONTEXT
5685 ,p_resource_assignment_tab => l_res_assignment_id_tbl
5686 ,p_delete_budget_lines_tab => l_delete_budget_lines_tbl
5687 -- bug fix:5726773,p_spread_amts_flag_tab => l_spread_amount_flags_tbl
5688 ,p_txn_currency_code_tab => l_currency_code_tbl -- derive
5689 -- as told by sanjay ,p_txn_currency_override_tab => l_currency_code_tbl
5690 ,p_total_qty_tab => l_quantity_tbl -- derive
5691 ,p_total_raw_cost_tab => l_raw_cost_tbl -- dervie
5692 ,p_total_burdened_cost_tab => l_burdened_cost_tbl -- dervie
5693 ,p_total_revenue_tab => l_revenue_tbl -- derive
5694 ,p_raw_cost_rate_tab => l_cost_rate_tbl -- derive
5695 ,p_rw_cost_rate_override_tab => l_cost_rate_tbl
5696 ,p_b_cost_rate_tab => l_burden_multiplier_tbl -- derive
5697 ,p_b_cost_rate_override_tab => l_burden_multiplier_tbl
5698 ,p_bill_rate_tab => l_bill_rate_tbl -- derive
5699 ,p_bill_rate_override_tab => l_bill_rate_tbl
5700 ,p_line_start_date_tab => l_line_start_date_tbl --PA_PLSQL_DATATYPES.EmptyDateTab
5701 ,p_line_end_date_tab => l_line_end_date_tbl --PA_PLSQL_DATATYPES.EmptyDateTab
5702 ,p_apply_progress_flag => p_apply_progress_flag
5703 ,p_rollup_required_flag => l_pji_rollup_required --Bug 4200168
5704 ,x_return_status => l_return_status
5705 ,x_msg_count => l_msg_count
5706 ,x_msg_data => l_msg_data);
5707
5708 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5709 IF l_debug_mode = 'Y' THEN
5710 pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate api returned error';
5711 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5712 END IF;
5713
5714 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5715 END IF;
5716
5717 -- Added for bug 4492493, 4548240
5718 IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
5719 AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(p_project_id) = 'Y') OR
5720 (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
5721 AND pa_task_assignment_utils.g_require_progress_rollup = 'Y') THEN
5722 /* Bug 13419867 starts */
5723 /* PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
5724 ( p_calling_context => 'ASGMT_PLAN_CHANGE'
5725 ,p_project_id => p_project_id
5726 ,p_structure_version_id => pa_project_structure_utils.get_latest_wp_version(p_project_id)
5727 ,p_pub_struc_ver_id => pa_project_structure_utils.get_latest_wp_version(p_project_id)
5728 ,x_return_status => l_return_status
5729 ,x_msg_count => l_msg_count
5730 ,x_msg_data => l_msg_data);
5731
5732 pa_task_assignment_utils.g_require_progress_rollup := 'N';
5733 */
5734 IF (p_extraction_type IN ('INCREMENTAL', 'FULL')) THEN
5735 -- Log the occurence, so that request can be submitted at the end
5736 insert into pa_asgmt_plan_change_t (project_id, strcut_ver_id, pub_strcut_ver_id)
5737 values(p_project_id, pa_project_structure_utils.get_latest_wp_version(p_project_id),
5738 pa_project_structure_utils.get_latest_wp_version(p_project_id));
5739 ELSE
5740 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
5741 ( p_calling_context => 'ASGMT_PLAN_CHANGE'
5742 ,p_project_id => p_project_id
5743 ,p_structure_version_id => pa_project_structure_utils.get_latest_wp_version(p_project_id)
5744 ,p_pub_struc_ver_id => pa_project_structure_utils.get_latest_wp_version(p_project_id)
5745 ,x_return_status => l_return_status
5746 ,x_msg_count => l_msg_count
5747 ,x_msg_data => l_msg_data);
5748
5749 pa_task_assignment_utils.g_require_progress_rollup := 'N';
5750 END IF;
5751 /* Bug 13419867 End */
5752
5753 END IF;
5754
5755 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5756 IF l_debug_mode = 'Y' THEN
5757 pa_debug.g_err_stage:='Called API PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp';
5758 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5759 END IF;
5760
5761 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5762 END IF;
5763 --End bug 4492493
5764
5765 END IF;
5766
5767
5768 -- Bug 8370812 - Fix is done for the TASK_ASSIGNMENTS context.
5769 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
5770
5771 PA_FIN_PLAN_PUB.create_default_plan_txn_rec
5772 (p_budget_version_id => l_budget_version_id,
5773 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
5774 p_ra_id_tbl => l_ra_id_rollup_tbl,
5775 p_curr_code_tbl => l_curr_code_rollup_tbl,
5776 x_return_status => x_return_status,
5777 x_msg_count => x_msg_count,
5778 x_msg_data => x_msg_data
5779 );
5780 ELSE
5781 -- IPM changes - rollup amounts in new entity
5782 /* Start of Addition for bug 7161809 */
5783
5784 PA_FIN_PLAN_PUB.create_default_plan_txn_rec
5785 (p_budget_version_id => l_budget_version_id,
5786 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
5787 p_ra_id_tbl => l_ra_id_temp_tbl,
5788 p_curr_code_tbl => l_curr_code_temp_tbl,
5789 p_expenditure_type_tbl => l_direct_expenditure_type_tbl,
5790 x_return_status => x_return_status,
5791 x_msg_count => x_msg_count,
5792 x_msg_data => x_msg_data
5793 );
5794 END IF;
5795
5796 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5797 IF l_debug_mode = 'Y' THEN
5798 pa_debug.g_err_stage:='Called API PA_FIN_PLAN_PUB.create_default_plan_txn_rec returned error';
5799 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage, 3);
5800 END IF;
5801 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5802 END IF; /* 7161809 */
5803
5804 -- Call the UTIL API to get the financial plan info l_fp_cols_rec
5805
5806 /* Commented for bug 7161809
5807 -- hr_utility.trace('p_project_id IS : ' || p_project_id);
5808 -- hr_utility.trace('l_budget_version_id IS : ' || l_budget_version_id);
5809 pa_fp_gen_amount_utils.get_plan_version_dtls
5810 (p_project_id => p_project_id,
5811 p_budget_version_id => l_budget_version_id,
5812 x_fp_cols_rec => l_fp_cols_rec,
5813 x_return_status => x_return_status,
5814 x_msg_count => x_msg_count,
5815 x_msg_data => x_msg_data);
5816
5817 -- hr_utility.trace('x_return_status IS : ' || x_return_status);
5818 -- hr_utility.trace('x_msg_count IS : ' || x_msg_count);
5819 -- hr_utility.trace('x_msg_data IS : ' || x_msg_data);
5820
5821 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5822
5823 IF l_debug_mode = 'Y' THEN
5824 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
5825 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage, 3);
5826 END IF;
5827 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5828 END IF;
5829
5830 -- IPM changes - populate tmp table to use for rollup
5831 delete pa_resource_asgn_curr_tmp;
5832
5833 IF l_ra_id_temp_tbl.COUNT > 0 THEN
5834 -- IPM - populate the currency code
5835 l_curr_code_temp_tbl.extend(l_ra_id_temp_tbl.COUNT);
5836 FOR j IN l_ra_id_temp_tbl.first .. l_ra_id_temp_tbl.last LOOP
5837 IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN,
5838 PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK) THEN
5839 -- Use project currency for workplan
5840 -- Bug 5003827 Issue 1
5841 l_curr_code_temp_tbl(j) := nvl(l_curr_code_temp_tbl(j),
5842 l_proj_curr_code);
5843 ELSE
5844 l_curr_code_temp_tbl(j) := nvl(l_curr_code_temp_tbl(j),
5845 l_proj_func_curr_code);
5846
5847 END IF;
5848 END LOOP;
5849
5850 FORALL i IN l_ra_id_temp_tbl.first .. l_ra_id_temp_tbl.last
5851 INSERT INTO pa_resource_asgn_curr_tmp
5852 (RA_TXN_ID
5853 ,RESOURCE_ASSIGNMENT_ID
5854 ,TXN_CURRENCY_CODE
5855 ,DELETE_FLAG
5856 ,TXN_RAW_COST_RATE_OVERRIDE -- 6839167
5857 ,TXN_BURDEN_COST_RATE_OVERRIDE
5858 ,TXN_BILL_RATE_OVERRIDE
5859 ,expenditure_type --added for EnC
5860 )
5861 SELECT pa_resource_asgn_curr_s.nextval
5862 ,l_ra_id_temp_tbl(i)
5863 ,l_curr_code_temp_tbl(i)
5864 ,NULL
5865 ,prac.TXN_RAW_COST_RATE_OVERRIDE --6839167
5866 ,prac.TXN_BURDEN_COST_RATE_OVERRIDE
5867 ,prac.TXN_BILL_RATE_OVERRIDE
5868 ,l_direct_expenditure_type_tbl(i)
5869 from pa_resource_asgn_curr prac
5870 where prac.RESOURCE_ASSIGNMENT_ID=l_ra_id_temp_tbl(i);
5871 END IF;
5872
5873 pa_res_asg_currency_pub.maintain_data(
5874 p_fp_cols_rec => l_fp_cols_rec,
5875 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
5876 p_delete_flag => 'N',
5877 p_copy_flag => 'N',
5878 p_src_version_id => NULL,
5879 p_copy_mode => NULL,
5880 p_rollup_flag => 'Y',
5881 p_version_level_flag => 'N',
5882 p_called_mode => 'SELF_SERVICE',
5883 x_return_status => x_return_status,
5884 x_msg_count => x_msg_count,
5885 x_msg_data => x_msg_data
5886 );
5887
5888 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5889
5890 IF l_debug_mode = 'Y' THEN
5891 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
5892 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage, 3);
5893 END IF;
5894 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
5895 END IF; */
5896
5897 IF l_debug_mode = 'Y' THEN
5898 pa_debug.g_err_stage:='CALLED THE PA_FP_CALC_PLAN_PKG.CALCULATE API';
5899 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
5900 pa_debug.reset_curr_function;
5901 END IF;
5902 EXCEPTION
5903
5904 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
5905 ROLLBACK TO SAVEPOINT ADD_PLANNING_TRANS_SP;
5906 l_msg_count := FND_MSG_PUB.count_msg;
5907 IF l_msg_count = 1 THEN
5908 PA_INTERFACE_UTILS_PUB.get_messages
5909 (p_encoded => FND_API.G_TRUE
5910 ,p_msg_index => 1
5911 ,p_msg_count => l_msg_count
5912 ,p_msg_data => l_msg_data
5913 ,p_data => l_data
5914 ,p_msg_index_out => l_msg_index_out);
5915 x_msg_data := l_data;
5916 x_msg_count := l_msg_count;
5917
5918 ELSE
5919
5920 x_msg_count := l_msg_count;
5921 END IF;
5922 x_return_status := FND_API.G_RET_STS_ERROR;
5923 IF l_debug_mode = 'Y' THEN
5924 pa_debug.reset_curr_function;
5925 END IF;
5926 WHEN OTHERS THEN
5927
5928 ROLLBACK TO SAVEPOINT ADD_PLANNING_TRANS_SP;
5929 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5930 x_msg_count := 1;
5931 x_msg_data := SQLERRM;
5932 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
5933 ,p_procedure_name => 'add_planning_transactions');
5934
5935 IF l_debug_mode = 'Y' THEN
5936 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
5937 pa_debug.write('add_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,5);
5938 pa_debug.reset_curr_function;
5939 END IF;
5940 RAISE;
5941
5942 END add_planning_transactions;
5943
5944
5945 /*This procedure should be called to update planning transactions
5946 valid values for p_context are 'BUDGET' , 'FORECAST', 'WORKPLAN' and 'TASK_ASSIGNMENT'
5947 */
5948 /*******************************************************************************************************
5949 As part of Bug 3749516 All References to Equipment Effort or Equip Resource Class has been removed in
5950 PROCEDURE update_planning_transactions.
5951 All _addl_ and p_equip_people_effort_tbl IN parameters have also been removed as they were not being
5952 used/referred.
5953 ********************************************************************************************************/
5954 PROCEDURE update_planning_transactions
5955 (
5956 p_context IN VARCHAR2
5957 ,p_calling_context IN VARCHAR2 DEFAULT NULL -- Added for Bug 6856934
5958 ,p_struct_elem_version_id IN Pa_proj_element_versions.element_version_id%TYPE
5959 ,p_budget_version_id IN Pa_budget_versions.budget_version_id%TYPE
5960 ,p_task_elem_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5961 ,p_task_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5962 ,p_task_number_tbl IN SYSTEM.PA_VARCHAR2_100_TBL_TYPE
5963 ,p_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
5964 ,p_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
5965 ,p_planned_people_effort_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5966 -- One pl/sql record in The Above tables
5967 ,p_resource_assignment_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5968 ,p_resource_list_member_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5969 ,p_assignment_description_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5970 ,p_project_assignment_id_tbl IN SYSTEM.pa_num_tbl_type
5971 ,p_resource_alias_tbl IN SYSTEM.PA_VARCHAR2_80_TBL_TYPE
5972 ,p_resource_class_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE
5973 ,p_resource_class_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5974 ,p_resource_class_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5975 ,p_res_type_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5976 ,p_resource_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5977 ,p_resource_name IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE -- bug fix 3461537
5978 ,p_person_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5979 ,p_job_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5980 ,p_person_type_code IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5981 ,p_bom_resource_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5982 ,p_non_labor_resource_tbl IN SYSTEM.PA_VARCHAR2_20_TBL_TYPE
5983 ,p_inventory_item_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5984 ,p_item_category_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5985 ,p_project_role_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5986 ,p_project_role_name_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
5987 ,p_organization_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5988 ,p_organization_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE
5989 ,p_fc_res_type_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5990 ,p_financial_category_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5991 ,p_expenditure_type_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5992 ,p_expenditure_category_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5993 ,p_event_type_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5994 ,p_revenue_category_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5995 ,p_supplier_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5996 ,p_unit_of_measure_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5997 ,p_spread_curve_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
5998 ,p_etc_method_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
5999 ,p_mfc_cost_type_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
6000 ,p_procure_resource_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE
6001 ,p_incurred_by_res_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE
6002 ,p_incur_by_resource_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
6003 ,p_incur_by_resource_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE
6004 ,p_incur_by_res_class_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
6005 ,p_incur_by_role_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
6006 ,p_use_task_schedule_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE
6007 ,p_planning_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
6008 ,p_planning_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
6009 ,p_schedule_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
6010 ,p_schedule_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
6011 ,p_quantity_tbl IN SYSTEM.PA_NUM_TBL_TYPE
6012 ,p_currency_code_tbl IN SYSTEM.PA_VARCHAR2_15_TBL_TYPE
6013 ,p_txn_currency_override_tbl IN SYSTEM.PA_VARCHAR2_15_TBL_TYPE
6014 ,p_raw_cost_tbl IN SYSTEM.PA_NUM_TBL_TYPE
6015 ,p_burdened_cost_tbl IN SYSTEM.PA_NUM_TBL_TYPE
6016 ,p_revenue_tbl IN SYSTEM.PA_NUM_TBL_TYPE
6017 ,p_cost_rate_tbl IN SYSTEM.PA_NUM_TBL_TYPE
6018 ,p_cost_rate_override_tbl IN SYSTEM.PA_NUM_TBL_TYPE
6019 ,p_burdened_rate_tbl IN SYSTEM.PA_NUM_TBL_TYPE
6020 ,p_burdened_rate_override_tbl IN SYSTEM.PA_NUM_TBL_TYPE
6021 ,p_bill_rate_tbl IN SYSTEM.PA_NUM_TBL_TYPE
6022 ,p_bill_rate_override_tbl IN SYSTEM.PA_NUM_TBL_TYPE
6023 ,p_billable_percent_tbl IN SYSTEM.PA_NUM_TBL_TYPE
6024 ,p_sp_fixed_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
6025 ,p_named_role_tbl IN SYSTEM.PA_VARCHAR2_80_TBL_TYPE
6026 ,p_financial_category_name_tbl IN SYSTEM.PA_VARCHAR2_80_TBL_TYPE
6027 ,p_supplier_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE
6028 ,p_attribute_category_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE
6029 ,p_attribute1_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6030 ,p_attribute2_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6031 ,p_attribute3_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6032 ,p_attribute4_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6033 ,p_attribute5_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6034 ,p_attribute6_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6035 ,p_attribute7_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6036 ,p_attribute8_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6037 ,p_attribute9_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6038 ,p_attribute10_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6039 ,p_attribute11_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6040 ,p_attribute12_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6041 ,p_attribute13_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6042 ,p_attribute14_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6043 ,p_attribute15_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6044 ,p_attribute16_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6045 ,p_attribute17_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6046 ,p_attribute18_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6047 ,p_attribute19_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6048 ,p_attribute20_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6049 ,p_attribute21_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6050 ,p_attribute22_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6051 ,p_attribute23_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6052 ,p_attribute24_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6053 ,p_attribute25_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6054 ,p_attribute26_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6055 ,p_attribute27_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6056 ,p_attribute28_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6057 ,p_attribute29_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6058 ,p_attribute30_tbl IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE
6059 ,p_apply_progress_flag IN VARCHAR2 /* Passed from apply_progress api (sakthi's team) */
6060 ,p_scheduled_delay IN SYSTEM.pa_num_tbl_type --For bug 3948128
6061 ,p_pji_rollup_required IN VARCHAR2 DEFAULT 'Y' /* Bug# 4200168 */
6062 ,p_upd_cost_amts_too_for_ta_flg IN VARCHAR2 DEFAULT 'N' --Added for bug #4538286
6063 ,p_distrib_amts IN VARCHAR2 DEFAULT 'Y' -- Bug 5684639.
6064 ,p_direct_expenditure_type_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE() --added for Enc
6065 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6066 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6067 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6068 ) IS
6069 l_return_status VARCHAR2(2000);
6070 l_msg_count NUMBER := 0;
6071 l_data VARCHAR2(2000);
6072 l_msg_data VARCHAR2(2000);
6073
6074 l_msg_index_out NUMBER;
6075 l_debug_mode VARCHAR2(1);
6076 l_debug_level3 CONSTANT NUMBER := 3;
6077 l_debug_level5 CONSTANT NUMBER := 5;
6078 l_module_name VARCHAR2(100) := 'Update_Planning_Transactions' || 'pa.plsql.pa_fp_planning_transaction_pub';
6079 l_loop_start NUMBER;
6080 l_loop_end NUMBER;
6081
6082 l_budget_version_id pa_budget_versions.budget_version_id%TYPE;
6083 l_project_id pa_projects_all.project_id%TYPE;
6084 l_fixed_date_sp_id pa_spread_curves_b.spread_curve_id%TYPE; -- bug 3607061
6085 l_pji_rollup_required VARCHAR2(1); --Bug 4200168
6086
6087 l_job_id_temp NUMBER; --bug#13566990
6088
6089
6090 /* Start of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
6091 */
6092 l_task_rec_tbl PA_TASK_ASSIGNMENT_UTILS.l_task_rec_tbl_type;
6093 l_resource_rec_tbl PA_TASK_ASSIGNMENT_UTILS.l_resource_rec_tbl_type;
6094 /* End of variables for Variable for TA Validations for p_context = TASK_ASSIGNMENTS
6095 */
6096
6097 /* Start of variables for Variable for Resource Attributes
6098 */
6099 l_resource_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6100 l_resource_list_member_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6101 l_assignment_description_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
6102 l_planning_resource_alias_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
6103 l_resource_class_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6104 l_resource_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6105 l_resource_class_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6106 l_res_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6107 l_resource_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6108 l_person_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6109 l_job_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6110 l_person_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6111 l_bom_resource_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6112 l_non_labor_resource_tbl SYSTEM.PA_VARCHAR2_20_TBL_TYPE := SYSTEM.PA_VARCHAR2_20_TBL_TYPE();
6113 l_inventory_item_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6114 l_item_category_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6115 l_project_role_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6116 l_project_role_name_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6117 l_organization_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6118 -- bug 3455288, 19-FEB-04, jwhite: Changed varchar2 length to 240 from 30 --------------------------------
6119 -- l_organization_name_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6120
6121 l_organization_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
6122
6123 -- End, bug 3455288, 19-FEB-04, jwhite: ------------------------------------------------------------------
6124 l_direct_expenditure_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(); /*EnC*/
6125 l_fc_res_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6126 l_financial_category_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6127 l_expenditure_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6128 l_expenditure_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6129 l_event_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6130 l_revenue_category_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6131 l_supplier_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6132 l_unit_of_measure_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6133 l_spread_curve_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6134 l_etc_method_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6135 l_mfc_cost_type_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6136 l_procure_resource_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6137 l_incurred_by_res_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6138 l_incur_by_resource_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
6139 l_Incur_by_resource_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6140 l_Incur_by_res_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6141 l_Incur_by_role_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6142 l_use_task_schedule_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6143 l_planning_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6144 l_planning_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6145 l_schedule_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6146 l_schedule_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6147 l_total_quantity_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6148 l_override_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
6149 l_billable_percent_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6150 l_cost_rate_override_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6151 l_burdened_rate_override_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6152 l_sp_fixed_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6153 l_named_role_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
6154 l_financial_category_name_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := SYSTEM.PA_VARCHAR2_80_TBL_TYPE();
6155 l_supplier_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
6156 l_wbs_element_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6157 l_project_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6158 l_attribute_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6159 l_attribute1_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6160 l_attribute2_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6161 l_attribute3_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6162 l_attribute4_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6163 l_attribute5_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6164 l_attribute6_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6165 l_attribute7_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6166 l_attribute8_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6167 l_attribute9_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6168 l_attribute10_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6169 l_attribute11_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6170 l_attribute12_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6171 l_attribute13_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6172 l_attribute14_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6173 l_attribute15_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6174 l_attribute16_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6175 l_attribute17_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6176 l_attribute18_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6177 l_attribute19_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6178 l_attribute20_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6179 l_attribute21_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6180 l_attribute22_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6181 l_attribute23_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6182 l_attribute24_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6183 l_attribute25_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6184 l_attribute26_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6185 l_attribute27_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6186 l_attribute28_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6187 l_attribute29_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6188 l_attribute30_tbl SYSTEM.PA_VARCHAR2_150_TBL_TYPE := SYSTEM.PA_VARCHAR2_150_TBL_TYPE();
6189 l_bill_rate_override_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6190 l_bill_rate_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6191 l_b_multiplier_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6192 l_raw_cost_rate_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6193 l_revenue_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6194 l_burdened_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6195 l_total_raw_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6196 l_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
6197 --For bug 3948128
6198 l_scheduled_delay SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6199
6200 -- Added for bug 3698458
6201 l_rate_exp_org_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6202 l_rate_exp_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6203 l_rate_func_curr_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6204 l_incur_by_res_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
6205
6206 /* End of variables for Variable for Resource Attributes
6207 */
6208 l_spread_amt_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6209 l_delete_budget_lines_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6210 l_currency_code_tmp_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
6211 l_existing_curr_code pa_budget_lines.txn_currency_code%TYPE;
6212 l_projfunc_currency_code pa_budget_lines.txn_currency_code%TYPE;
6213 l_projfunc_currency_code_out pa_budget_lines.txn_currency_code%TYPE;
6214 l_rbs_element_id_tbl SYSTEM.pa_num_tbl_type;
6215 l_txn_accum_header_id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.pa_num_tbl_type();
6216
6217 /* added for bug 3678814 */
6218 l_rate_based_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6219
6220 l_trace_stage NUMBER;
6221
6222 -- Added for bug 3817356
6223 l_in_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6224 l_in_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6225 l_in_planning_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6226 l_in_planning_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6227 l_in_schedule_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6228 l_in_schedule_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6229 l_in_sp_fixed_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6230 l_temp_gmiss_date date := to_date('01-01-4712','DD-MM-YYYY');
6231
6232 --These parameters are introduced for calculate API enhancements tracked thru bug 4152749
6233 l_mfc_cost_type_id_old_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6234 l_mfc_cost_type_id_new_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6235 l_spread_curve_id_old_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6236 l_spread_curve_id_new_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6237 l_sp_fixed_date_old_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6238 l_sp_fixed_date_new_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6239 l_plan_start_date_old_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6240 l_plan_start_date_new_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6241 l_plan_end_date_old_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6242 l_plan_end_date_new_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6243 l_rlm_id_change_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
6244
6245 --Added for Bug 4200168
6246 l_g_miss_char CONSTANT VARCHAR(1) := FND_API.G_MISS_CHAR;
6247 l_g_miss_num CONSTANT NUMBER := FND_API.G_MISS_NUM;
6248 l_g_miss_date CONSTANT DATE := FND_API.G_MISS_DATE;
6249
6250 l_fp_cols_rec pa_fp_gen_amount_utils.fp_cols; -- IPM
6251
6252 -- Bug 5906826
6253 l_ra_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6254 l_line_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6255 l_line_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
6256 l_txn_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
6257 l_tot_qty_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6258 l_txn_raw_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6259 l_txn_burdened_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
6260 l_cal_api_called_flg VARCHAR2(1) := 'N';
6261 --CBS related Chnages
6262 l_res_class_flag pa_resource_lists_all_bg.resource_class_flag%TYPE := 'Y';
6263 BEGIN
6264
6265 l_trace_stage := 10;
6266 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6267
6268
6269 x_msg_count := 0;
6270 x_return_status := FND_API.G_RET_STS_SUCCESS;
6271 l_debug_mode := 'Y'; --NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6272
6273 --Added for Bug 4200168
6274 IF p_pji_rollup_required = 'Y' THEN
6275 l_pji_rollup_required := 'Y';
6276 ELSE
6277 l_pji_rollup_required := 'N';
6278 END IF;
6279
6280 pa_task_assignment_utils.g_require_progress_rollup := 'N';
6281
6282 IF l_debug_mode = 'Y' THEN
6283 pa_debug.set_curr_function( p_function => 'Update_Planning_Transactions',
6284 p_debug_mode => l_debug_mode );
6285 END IF;
6286 --dbms_output.put_line('In upd planning txn');
6287
6288
6289 /* A savepoint is set
6290 */
6291 SAVEPOINT Update_Planning_Transactions;
6292
6293 IF l_debug_mode = 'Y' THEN
6294 pa_debug.g_err_stage := 'Checking for required parameters';
6295 print_msg(pa_debug.g_err_stage,l_module_name);
6296 END IF;
6297
6298 /* Check for required parameters
6299 */
6300
6301 IF l_debug_mode = 'Y' THEN
6302 pa_debug.g_err_stage := 'Extending the local pl/sql tables: p_context =>' ||p_context;
6303 print_msg(pa_debug.g_err_stage,l_module_name);
6304 END IF;
6305
6306
6307
6308 IF p_context IS NULL OR
6309 p_context NOT IN ( PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST
6310 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
6311 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
6312 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET ) THEN
6313
6314 pa_debug.g_err_stage := 'The Context IN parameter is NULL';
6315 pa_debug.write(l_module_name, pa_debug.g_err_stage,l_debug_level5);
6316 --dbms_output.put_line('p_context is null');
6317
6318 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6319 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
6320 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6321 END IF;
6322 --dbms_output.put_line('U01');
6323
6324 IF l_debug_mode = 'Y' THEN
6325 pa_debug.g_err_stage:= 'Checking for required parameters';
6326 print_msg(pa_debug.g_err_stage,l_module_name);
6327 END IF;
6328
6329
6330 /* Check for business rules violations
6331 */
6332 IF l_debug_mode = 'Y' THEN
6333 pa_debug.g_err_stage:= 'Validating input parameters';
6334 print_msg(pa_debug.g_err_stage,l_module_name);
6335 END IF;
6336
6337 l_trace_stage := 50;
6338 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6339
6340
6341 /* If the calling Context is Workplan or Task Assignment, the element version Id can't be null
6342 */
6343 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
6344 IF p_struct_elem_version_id IS NULL THEN
6345 IF l_debug_mode = 'Y' THEN
6346 pa_debug.g_err_stage:= 'p_struct_elem_version_id is null';
6347 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6348 END IF;
6349 --dbms_output.put_line('p_struct_elem_version_id is null');
6350
6351 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6352 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
6353 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6354 ELSE
6355 l_budget_version_id := PA_PLANNING_TRANSACTION_UTILS.Get_wp_budget_version_id(p_struct_elem_version_id);
6356 IF l_budget_version_id IS NULL THEN
6357 IF l_debug_mode = 'Y' THEN
6358 pa_debug.g_err_stage:='Calling add plan txn to create the version';
6359 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6360 END IF;
6361
6362 BEGIN
6363 SELECT project_id
6364 INTO l_project_id
6365 FROM pa_struct_task_wbs_v
6366 WHERE parent_Structure_version_id=p_struct_elem_version_id
6367 AND ROWNUM=1;
6368 EXCEPTION
6369 WHEN NO_DATA_FOUND THEN
6370 IF l_debug_mode = 'Y' THEN
6371 pa_debug.g_err_stage:='Invalid value for p_struct_elem_version_id';
6372 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6373 END IF;
6374 --dbms_output.put_line('Invalid value for p_struct_elem_version_id');
6375 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6376 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
6377 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6378 END;
6379
6380
6381
6382 pa_fp_planning_transaction_pub.add_planning_transactions
6383 (p_context =>'WORKPLAN'
6384 ,p_calling_context => p_calling_context -- Added for Bug 6856934
6385 ,p_project_id => l_project_id
6386 ,p_struct_elem_version_id => p_struct_elem_version_id
6387 ,x_return_status => l_return_status
6388 ,x_msg_data => l_msg_data
6389 ,x_msg_count => l_msg_count);
6390 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6391 IF l_debug_mode = 'Y' THEN
6392 pa_debug.g_err_stage:='Called API pa_fp_planning_transaction_pub.add_planning_transaction api returned error';
6393 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6394 END IF;
6395 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6396 END IF;
6397 l_budget_version_id := PA_PLANNING_TRANSACTION_UTILS.Get_wp_budget_version_id(p_struct_elem_version_id);
6398 END IF;
6399
6400 END IF;
6401 /* If the calling Context is BUDGET or FORECAST, the budget version Id can't be null
6402 */
6403 ELSIF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST THEN
6404 IF p_budget_version_id IS NULL THEN
6405 IF l_debug_mode = 'Y' THEN
6406 pa_debug.g_err_stage:= 'p_budget_version_id is null';
6407 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6408 END IF;
6409 --dbms_output.put_line('p_budget_version_id is null');
6410 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6411 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
6412 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6413 ELSE
6414 l_budget_version_id := p_budget_version_id;
6415 END IF;
6416 END IF;
6417 --dbms_output.put_line('U1');
6418 l_trace_stage := 100;
6419 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6420
6421
6422 /* Validation Done
6423 */
6424 /* Getting the project id for the corresponding budget version
6425 */
6426 BEGIN
6427 SELECT project_id
6428 INTO l_project_id
6429 FROM pa_budget_versions
6430 WHERE budget_version_id = l_budget_version_id;
6431 EXCEPTION
6432 WHEN OTHERS THEN
6433 IF l_debug_mode = 'Y' THEN
6434 pa_debug.g_err_stage:='Select failed on pa_budget_versions.';
6435 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6436 END IF;
6437 RAISE;
6438 END;
6439
6440 /* Bug 3817356 - We to cannot pass negative date from Java to PLSql hence we are not
6441 able to pass FND_API.G_MISS_DATE ('01-Jan--4712') to this API when called from Java.
6442 Instead when this API is called from Java instead of G_MISS_DATE '01-Jan-4712' is passed.
6443 Added code below to Replace '01-Jan-4712' by FND_API.G_MISS_DATE
6444 */
6445 IF l_debug_mode = 'Y' THEN
6446 pa_debug.g_err_stage:='Processing IN Date Tables for G_MISS_DATE';
6447 pa_debug.write('PA_FP_PLANNING_TXN_PUB.update_planning_transactions:'||l_module_name,pa_debug.g_err_stage,3);
6448 END IF;
6449
6450 l_in_start_date_tbl := p_start_date_tbl;
6451 l_in_end_date_tbl := p_end_date_tbl;
6452 l_in_planning_start_date_tbl := p_planning_start_date_tbl;
6453 l_in_planning_end_date_tbl := p_planning_end_date_tbl;
6454 l_in_schedule_start_date_tbl := p_schedule_start_date_tbl;
6455 l_in_schedule_end_date_tbl := p_schedule_end_date_tbl;
6456 l_in_sp_fixed_date_tbl := p_sp_fixed_date_tbl;
6457 l_direct_expenditure_type_tbl :=p_direct_expenditure_type_tbl;
6458 -- Please note that the l_in_ tables will be reference instead of p_ tables in Code Flow
6459 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
6460 IF p_task_elem_version_id_tbl.COUNT > 0 THEN
6461 FOR i IN p_task_elem_version_id_tbl.FIRST .. p_task_elem_version_id_tbl.LAST LOOP
6462 IF p_start_date_tbl.EXISTS(i)
6463 AND p_start_date_tbl(i) = l_temp_gmiss_date THEN
6464 l_in_start_date_tbl(i) := FND_API.G_MISS_DATE;
6465 END IF;
6466 IF p_end_date_tbl.EXISTS(i)
6467 AND p_end_date_tbl(i) = l_temp_gmiss_date THEN
6468 l_in_end_date_tbl(i) := FND_API.G_MISS_DATE;
6469 END IF;
6470 IF p_planning_start_date_tbl.EXISTS(i)
6471 AND p_planning_start_date_tbl(i) = l_temp_gmiss_date THEN
6472 l_in_planning_start_date_tbl(i) := FND_API.G_MISS_DATE;
6473 END IF;
6474 IF p_planning_end_date_tbl.EXISTS(i)
6475 AND p_planning_end_date_tbl(i) = l_temp_gmiss_date THEN
6476 l_in_planning_end_date_tbl(i) := FND_API.G_MISS_DATE;
6477 END IF;
6478 IF p_schedule_start_date_tbl.EXISTS(i)
6479 AND p_schedule_start_date_tbl(i) = l_temp_gmiss_date THEN
6480 l_in_schedule_start_date_tbl(i) := FND_API.G_MISS_DATE;
6481 END IF;
6482 IF p_schedule_end_date_tbl.EXISTS(i)
6483 AND p_schedule_end_date_tbl(i) = l_temp_gmiss_date THEN
6484 l_in_schedule_end_date_tbl(i) := FND_API.G_MISS_DATE;
6485 END IF;
6486 IF p_sp_fixed_date_tbl.EXISTS(i)
6487 AND p_sp_fixed_date_tbl(i) = l_temp_gmiss_date THEN
6488 l_in_sp_fixed_date_tbl(i) := FND_API.G_MISS_DATE;
6489 END IF;
6490 END LOOP;
6491 END IF;
6492 ELSE
6493 IF p_resource_assignment_id_tbl.COUNT > 0 THEN
6494 FOR i IN p_resource_assignment_id_tbl.FIRST .. p_resource_assignment_id_tbl.LAST LOOP
6495 IF p_start_date_tbl.EXISTS(i)
6496 AND p_start_date_tbl(i) = l_temp_gmiss_date THEN
6497 l_in_start_date_tbl(i) := FND_API.G_MISS_DATE;
6498 END IF;
6499 IF p_end_date_tbl.EXISTS(i)
6500 AND p_end_date_tbl(i) = l_temp_gmiss_date THEN
6501 l_in_end_date_tbl(i) := FND_API.G_MISS_DATE;
6502 END IF;
6503 IF p_planning_start_date_tbl.EXISTS(i)
6504 AND p_planning_start_date_tbl(i) = l_temp_gmiss_date THEN
6505 l_in_planning_start_date_tbl(i) := FND_API.G_MISS_DATE;
6506 END IF;
6507 IF p_planning_end_date_tbl.EXISTS(i)
6508 AND p_planning_end_date_tbl(i) = l_temp_gmiss_date THEN
6509 l_in_planning_end_date_tbl(i) := FND_API.G_MISS_DATE;
6510 END IF;
6511 IF p_schedule_start_date_tbl.EXISTS(i)
6512 AND p_schedule_start_date_tbl(i) = l_temp_gmiss_date THEN
6513 l_in_schedule_start_date_tbl(i) := FND_API.G_MISS_DATE;
6514 END IF;
6515 IF p_schedule_end_date_tbl.EXISTS(i)
6516 AND p_schedule_end_date_tbl(i) = l_temp_gmiss_date THEN
6517 l_in_schedule_end_date_tbl(i) := FND_API.G_MISS_DATE;
6518 END IF;
6519 IF p_sp_fixed_date_tbl.EXISTS(i)
6520 AND p_sp_fixed_date_tbl(i) = l_temp_gmiss_date THEN
6521 l_in_sp_fixed_date_tbl(i) := FND_API.G_MISS_DATE;
6522 END IF;
6523 END LOOP;
6524 END IF;
6525 END IF;
6526
6527
6528 /* If the calling context is workplan, then checking, if the passed task info is present or not
6529 * If not present, the called procedure would insert it.
6530 */
6531 --dbms_output.put_line ('pq1 is '||p_planned_people_effort_tbl(1));
6532 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
6533 check_and_create_task_rec_info
6534 ( p_project_id => l_project_id
6535 ,p_struct_elem_version_id => p_struct_elem_version_id
6536 ,p_element_version_id_tbl => p_task_elem_version_id_tbl
6537 ,p_planning_start_date_tbl => l_in_start_date_tbl -- 3817356
6538 ,p_planning_end_date_tbl => l_in_end_date_tbl -- 3817356
6539 ,p_planned_people_effort_tbl => p_planned_people_effort_tbl
6540 ,p_raw_cost_tbl => p_raw_cost_tbl
6541 ,p_burdened_cost_tbl => p_burdened_cost_tbl
6542 ,p_apply_progress_flag => p_apply_progress_flag
6543 ,x_element_version_id_tbl => l_wbs_element_version_id_tbl
6544 ,x_planning_start_date_tbl => l_planning_start_date_tbl
6545 ,x_planning_end_date_tbl => l_planning_end_date_tbl
6546 ,x_planned_effort_tbl => l_total_quantity_tbl
6547 ,x_resource_assignment_id_tbl => l_resource_assignment_id_tbl
6548 ,x_raw_cost_tbl => l_total_raw_cost_tbl
6549 ,x_burdened_cost_tbl => l_burdened_cost_tbl
6550 ,x_return_status => l_return_status
6551 ,x_msg_data => l_msg_data
6552 ,x_msg_count => l_msg_count);
6553
6554 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6555 IF l_debug_mode = 'Y' THEN
6556 pa_debug.g_err_stage:='Called API pa_planning_transaction_pub.check_and_create_task_rec_info api returned error';
6557 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6558 END IF;
6559 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6560 END IF;
6561 --dbms_output.put_line ('pq1 is '||l_total_quantity_tbl(1));
6562 l_trace_stage := 150;
6563 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6564
6565
6566 /* If l ra id tbl count is zero, it means, the check_and_create_task_rec_info
6567 has called add plan tran api with effort and hence no more prorcessing is required.
6568 */
6569 IF l_resource_assignment_id_tbl.COUNT = 0 THEN
6570 IF l_debug_mode = 'Y' THEN
6571 pa_debug.g_err_stage:='No Data Returned from the api-----Returning';
6572 print_msg(pa_debug.g_err_stage,l_module_name);
6573 END IF;
6574 --dbms_output.put_line('No Data Returned from the api-----Returning');
6575 IF l_debug_mode = 'Y' THEN
6576 pa_debug.reset_curr_function;
6577 END IF;
6578 RETURN;
6579 END IF;
6580
6581 /* For WP, the sch dates and planning dates are always in synch */
6582
6583 l_schedule_start_date_tbl := l_planning_start_Date_tbl;
6584 l_schedule_end_date_tbl := l_planning_end_Date_tbl;
6585
6586 ELSE
6587 /* The context is of not work plan type
6588 */
6589 --dbms_output.put_line('U3');
6590 IF l_debug_mode = 'Y' THEN
6591 pa_debug.g_err_stage:='Non Workplan type context';
6592 print_msg(pa_debug.g_err_stage,l_module_name);
6593 END IF;
6594 IF p_resource_assignment_id_tbl.COUNT =0 THEN
6595 IF l_debug_mode = 'Y' THEN
6596 pa_debug.g_err_stage:='Resource Assignment Id table is empty---- Returning';
6597 print_msg(pa_debug.g_err_stage,l_module_name);
6598 END IF;
6599 IF l_debug_mode = 'Y' THEN
6600 pa_debug.reset_curr_function;
6601 END IF;
6602 --dbms_output.put_line('Empty ra id tbl returning');
6603 RETURN;
6604 ELSE
6605 -- 3817356 Replacing p_xxxx_date_tbls by l_in_xxxx_date_tbls
6606 l_resource_assignment_id_tbl := p_resource_assignment_id_tbl;
6607 IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
6608 /* Budgets and forecasts case schedule start/end dates,
6609 * though not relevant are always kept in synch with planning start and end
6610 * dates */
6611 l_schedule_start_date_tbl := l_in_planning_start_date_tbl;
6612 l_schedule_end_date_tbl := l_in_planning_end_date_tbl;
6613 l_planning_start_date_tbl := l_in_planning_start_date_tbl;
6614 l_planning_end_date_tbl := l_in_planning_end_date_tbl;
6615 ELSE /* Context is TA */
6616 l_planning_start_date_tbl := l_in_planning_start_date_tbl;
6617 l_planning_end_date_tbl := l_in_planning_end_date_tbl;
6618 l_schedule_start_date_tbl := l_in_schedule_start_date_tbl;
6619 l_schedule_end_date_tbl := l_in_schedule_end_date_tbl;
6620 END IF;
6621 l_total_quantity_tbl := p_quantity_tbl;
6622 --In the context of BUDGET or FORECAST throw an error if the p_currency_code_tbl does not
6623 --have same no of elements as that p_resource_assignment_id_tbl
6624 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST THEN
6625 IF p_resource_assignment_id_tbl.COUNT <> p_currency_code_tbl.COUNT THEN
6626 IF l_debug_mode = 'Y' THEN
6627 pa_debug.g_err_stage:='the contents of p_currency_code_tbl not equal in number to contents in res assmt tbl';
6628 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6629 END IF;
6630 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6631 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
6632 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
6633 END IF;
6634 END IF;
6635 END IF;
6636 END IF;
6637 -- End for calling Context of workplan
6638
6639 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Starts
6640 BEGIN
6641 IF l_debug_mode = 'Y' THEN
6642 pa_debug.g_err_stage:='Fetching spread curve id for fixed date spread curve';
6643 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6644 END IF;
6645 Select spread_curve_id
6646 into l_fixed_date_sp_id
6647 from pa_spread_curves_b
6648 where spread_curve_code = 'FIXED_DATE';
6649
6650 IF l_debug_mode = 'Y' THEN
6651 pa_debug.g_err_stage:='Fetching spread curve id l_fixed_date_sp_id:'||l_fixed_date_sp_id;
6652 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6653 END IF;
6654
6655 EXCEPTION
6656 WHEN NO_DATA_FOUND THEN
6657 IF l_debug_mode = 'Y' THEN
6658 pa_debug.g_err_stage:='Fixed date spread curve not found in system';
6659 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
6660 END IF;
6661 RAISE;
6662 END;
6663 -- Fetching spread curve id for fixed date spread curve : Bug 3607061 - Ends
6664
6665 --Extend all the local pl/sql tables.
6666 IF l_debug_mode = 'Y' THEN
6667 pa_debug.g_err_stage := 'Extending the local pl/sql tables';
6668 print_msg(pa_debug.g_err_stage,l_module_name);
6669 END IF;
6670
6671 l_trace_stage := 200;
6672 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6673
6674 l_resource_list_member_id_tbl.extend(l_resource_assignment_id_tbl.last);
6675
6676 l_trace_stage := 201;
6677 --hr_uility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6678
6679 --dbms_output.put_line('2');
6680 l_assignment_description_tbl.extend(l_resource_assignment_id_tbl.last);
6681 l_planning_resource_alias_tbl.extend(l_resource_assignment_id_tbl.last);
6682 l_resource_class_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6683 l_resource_class_code_tbl.extend(l_resource_assignment_id_tbl.last);
6684 l_resource_class_id_tbl.extend(l_resource_assignment_id_tbl.last);
6685 l_res_type_code_tbl.extend(l_resource_assignment_id_tbl.last);
6686 l_resource_code_tbl.extend(l_resource_assignment_id_tbl.last);
6687 l_person_id_tbl.extend(l_resource_assignment_id_tbl.last);
6688 l_job_id_tbl.extend(l_resource_assignment_id_tbl.last);
6689
6690 l_person_type_code_tbl.extend(l_resource_assignment_id_tbl.last);
6691 l_bom_resource_id_tbl.extend(l_resource_assignment_id_tbl.last);
6692 l_non_labor_resource_tbl.extend(l_resource_assignment_id_tbl.last);
6693 l_inventory_item_id_tbl.extend(l_resource_assignment_id_tbl.last);
6694 l_item_category_id_tbl.extend(l_resource_assignment_id_tbl.last);
6695 l_project_role_id_tbl.extend(l_resource_assignment_id_tbl.last);
6696 l_project_role_name_tbl.extend(l_resource_assignment_id_tbl.last);
6697 l_organization_id_tbl.extend(l_resource_assignment_id_tbl.last);
6698 l_organization_name_tbl.extend(l_resource_assignment_id_tbl.last);
6699 l_fc_res_type_code_tbl.extend(l_resource_assignment_id_tbl.last);
6700 l_financial_category_code_tbl.extend(l_resource_assignment_id_tbl.last);
6701 l_expenditure_type_tbl.extend(l_resource_assignment_id_tbl.last);
6702 l_expenditure_category_tbl.extend(l_resource_assignment_id_tbl.last);
6703
6704 -- Added for bug 3698458
6705 l_rate_exp_org_id_tbl.extend(l_resource_assignment_id_tbl.last);
6706 l_rate_exp_type_tbl.extend(l_resource_assignment_id_tbl.last);
6707 l_rate_func_curr_code_tbl.extend(l_resource_assignment_id_tbl.last);
6708 l_incur_by_res_type_tbl.extend(l_resource_assignment_id_tbl.last);
6709
6710 -- Added for bug 3678814
6711 l_rate_based_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6712
6713 l_trace_stage := 210;
6714 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6715
6716 l_event_type_tbl.extend(l_resource_assignment_id_tbl.last);
6717 l_revenue_category_code_tbl.extend(l_resource_assignment_id_tbl.last);
6718 l_supplier_id_tbl.extend(l_resource_assignment_id_tbl.last);
6719 l_unit_of_measure_tbl.extend(l_resource_assignment_id_tbl.last);
6720 l_spread_curve_id_tbl.extend(l_resource_assignment_id_tbl.last);
6721 l_etc_method_code_tbl.extend(l_resource_assignment_id_tbl.last);
6722 l_mfc_cost_type_id_tbl.extend(l_resource_assignment_id_tbl.last);
6723 l_procure_resource_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6724 l_incurred_by_res_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6725 l_incur_by_resource_name_tbl.extend(l_resource_assignment_id_tbl.last);
6726 l_Incur_by_resource_code_tbl.extend(l_resource_assignment_id_tbl.last);
6727 l_Incur_by_res_class_code_tbl.extend(l_resource_assignment_id_tbl.last);
6728 l_Incur_by_role_id_tbl.extend(l_resource_assignment_id_tbl.last);
6729 l_use_task_schedule_flag_tbl.extend(l_resource_assignment_id_tbl.last);
6730 IF l_planning_start_date_tbl.COUNT <> l_resource_assignment_id_tbl.COUNT THEN
6731 l_planning_start_date_tbl.extend(l_resource_assignment_id_tbl.last-l_planning_start_date_tbl.COUNT);
6732 END IF;
6733 IF l_planning_end_date_tbl.COUNT<> l_resource_assignment_id_tbl.COUNT THEN
6734 l_planning_end_date_tbl.extend(l_resource_assignment_id_tbl.last-l_planning_end_date_tbl.COUNT);
6735 END IF;
6736 IF l_schedule_start_date_tbl.COUNT <> l_resource_assignment_id_tbl.COUNT THEN
6737 l_schedule_start_date_tbl.extend(l_resource_assignment_id_tbl.last-l_schedule_start_date_tbl.COUNT);
6738 END IF;
6739 IF l_schedule_end_date_tbl.COUNT<> l_resource_assignment_id_tbl.COUNT THEN
6740 l_schedule_end_date_tbl.extend(l_resource_assignment_id_tbl.last-l_schedule_end_date_tbl.COUNT);
6741 END IF;
6742 IF l_total_quantity_tbl.COUNT<>l_resource_assignment_id_tbl.COUNT THEN
6743 l_total_quantity_tbl.extend(l_resource_assignment_id_tbl.last-l_total_quantity_tbl.COUNT);
6744 END IF;
6745 IF l_burdened_cost_tbl.COUNT<>l_resource_assignment_id_tbl.COUNT THEN
6746 l_burdened_cost_tbl.extend(l_resource_assignment_id_tbl.last);
6747 END IF;
6748 IF l_total_raw_cost_tbl.COUNT<>l_resource_assignment_id_tbl.COUNT THEN
6749 l_total_raw_cost_tbl.extend(l_resource_assignment_id_tbl.last);
6750 END IF;
6751 --dbms_output.put_line('l_total_quantity_tbl.last '||l_total_quantity_tbl.last||' l_total_quantity_tbl(1) '||l_total_quantity_tbl(1));
6752 l_override_currency_code_tbl.extend(l_resource_assignment_id_tbl.last);
6753
6754 l_trace_stage := 220;
6755 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6756
6757 l_billable_percent_tbl.extend(l_resource_assignment_id_tbl.last);
6758 l_cost_rate_override_tbl.extend(l_resource_assignment_id_tbl.last);
6759 l_burdened_rate_override_tbl.extend(l_resource_assignment_id_tbl.last);
6760 l_sp_fixed_date_tbl.extend(l_resource_assignment_id_tbl.last);
6761 l_named_role_tbl.extend(l_resource_assignment_id_tbl.last);
6762 l_financial_category_name_tbl.extend(l_resource_assignment_id_tbl.last);
6763 l_supplier_name_tbl.extend(l_resource_assignment_id_tbl.last);
6764 l_wbs_element_version_id_tbl.extend(l_resource_assignment_id_tbl.last);
6765 l_project_assignment_id_tbl.extend(l_resource_assignment_id_tbl.last);
6766 l_attribute_category_tbl.extend(l_resource_assignment_id_tbl.last);
6767 l_attribute1_tbl.extend(l_resource_assignment_id_tbl.last);
6768 l_attribute2_tbl.extend(l_resource_assignment_id_tbl.last);
6769 l_attribute3_tbl.extend(l_resource_assignment_id_tbl.last);
6770 l_attribute4_tbl.extend(l_resource_assignment_id_tbl.last);
6771 l_attribute5_tbl.extend(l_resource_assignment_id_tbl.last);
6772 l_attribute6_tbl.extend(l_resource_assignment_id_tbl.last);
6773 l_attribute7_tbl.extend(l_resource_assignment_id_tbl.last);
6774 l_attribute8_tbl.extend(l_resource_assignment_id_tbl.last);
6775 l_attribute9_tbl.extend(l_resource_assignment_id_tbl.last);
6776 l_attribute10_tbl.extend(l_resource_assignment_id_tbl.last);
6777 l_attribute11_tbl.extend(l_resource_assignment_id_tbl.last);
6778 l_attribute12_tbl.extend(l_resource_assignment_id_tbl.last);
6779 l_attribute13_tbl.extend(l_resource_assignment_id_tbl.last);
6780 l_attribute14_tbl.extend(l_resource_assignment_id_tbl.last);
6781 l_attribute15_tbl.extend(l_resource_assignment_id_tbl.last);
6782 l_attribute16_tbl.extend(l_resource_assignment_id_tbl.last);
6783 l_trace_stage := 230;
6784 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6785
6786
6787 l_attribute17_tbl.extend(l_resource_assignment_id_tbl.last);
6788 l_attribute18_tbl.extend(l_resource_assignment_id_tbl.last);
6789 l_attribute19_tbl.extend(l_resource_assignment_id_tbl.last);
6790 l_attribute20_tbl.extend(l_resource_assignment_id_tbl.last);
6791 l_attribute21_tbl.extend(l_resource_assignment_id_tbl.last);
6792 l_attribute22_tbl.extend(l_resource_assignment_id_tbl.last);
6793 l_attribute23_tbl.extend(l_resource_assignment_id_tbl.last);
6794 l_attribute24_tbl.extend(l_resource_assignment_id_tbl.last);
6795 l_attribute25_tbl.extend(l_resource_assignment_id_tbl.last);
6796 l_attribute26_tbl.extend(l_resource_assignment_id_tbl.last);
6797 l_attribute27_tbl.extend(l_resource_assignment_id_tbl.last);
6798 l_attribute28_tbl.extend(l_resource_assignment_id_tbl.last);
6799 l_attribute29_tbl.extend(l_resource_assignment_id_tbl.last);
6800 l_attribute30_tbl.extend(l_resource_assignment_id_tbl.last);
6801 l_bill_rate_override_tbl.extend(l_resource_assignment_id_tbl.last);
6802 l_bill_rate_tbl.extend(l_resource_assignment_id_tbl.last);
6803 l_b_multiplier_tbl.extend(l_resource_assignment_id_tbl.last);
6804 l_raw_cost_rate_tbl.extend(l_resource_assignment_id_tbl.last);
6805 l_revenue_tbl.extend(l_resource_assignment_id_tbl.last);
6806
6807 l_currency_code_tbl.extend(l_resource_assignment_id_tbl.last);
6808
6809 --For Bug 3948128.
6810 l_scheduled_delay.extend(l_resource_assignment_id_tbl.last);
6811 l_trace_stage := 240;
6812 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6813
6814
6815 -- Assiging all the passed tbls to record type . This is done because
6816 -- 1. TA validation API expects a pl/sql table of records
6817 -- 2. BULK update will possible since the values that are not passed will be defaulted to FND_API.G_MISS_XXX
6818
6819
6820 IF l_debug_mode = 'Y' THEN
6821 pa_debug.g_err_stage:='About to loop thru for assigning to rec types';
6822 print_msg(pa_debug.g_err_stage,l_module_name);
6823 END IF;
6824
6825
6826 FOR i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST LOOP
6827
6828
6829 IF l_resource_assignment_id_tbl.EXISTS(i) THEN
6830 l_resource_rec_tbl(i).resource_assignment_id := l_resource_assignment_id_tbl(i);
6831 END IF;
6832
6833 IF p_assignment_description_tbl.EXISTS(i) THEN
6834 l_resource_rec_tbl(i).assignment_description := p_assignment_description_tbl(i);
6835 END IF;
6836 IF p_resource_list_member_id_tbl.EXISTS(i) THEN
6837 l_resource_rec_tbl(i).resource_list_member_id := p_resource_list_member_id_tbl(i);
6838 END IF;
6839 IF p_project_assignment_id_tbl.EXISTS(i) THEN
6840 l_resource_rec_tbl(i).project_assignment_id := p_project_assignment_id_tbl(i);
6841 END IF;
6842 IF p_resource_alias_tbl.EXISTS(i) THEN
6843 l_resource_rec_tbl(i).planning_resource_alias := p_resource_alias_tbl(i);
6844 END IF;
6845 IF p_resource_class_flag_tbl.EXISTS(i) THEN
6846 l_resource_rec_tbl(i).resource_class_flag := p_resource_class_flag_tbl(i);
6847 END IF;
6848 IF p_resource_class_code_tbl.EXISTS(i) THEN
6849 l_resource_rec_tbl(i).resource_class_code := p_resource_class_code_tbl(i);
6850 END IF;
6851 IF p_resource_class_id_tbl.EXISTS(i) THEN
6852 l_resource_rec_tbl(i).resource_class_id := p_resource_class_id_tbl(i);
6853 END IF;
6854 IF p_res_type_code_tbl.EXISTS(i) THEN
6855 l_resource_rec_tbl(i).res_type_code := p_res_type_code_tbl(i);
6856 END IF;
6857 IF p_resource_code_tbl.EXISTS(i) THEN
6858 l_resource_rec_tbl(i).resource_code := p_resource_code_tbl(i);
6859 END IF;
6860 IF p_resource_name.EXISTS(i) THEN
6861 l_resource_rec_tbl(i).resource_name := p_resource_name(i);
6862 END IF;
6863
6864 l_trace_stage := 250;
6865 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6866
6867 IF p_person_id_tbl.EXISTS(i) THEN
6868 l_resource_rec_tbl(i).person_id := p_person_id_tbl(i);
6869 END IF;
6870 IF p_job_id_tbl.EXISTS(i) THEN
6871 l_resource_rec_tbl(i).job_id := p_job_id_tbl(i);
6872 END IF;
6873 IF p_person_type_code.EXISTS(i) THEN
6874 l_resource_rec_tbl(i).person_type_code := p_person_type_code(i);
6875 END IF;
6876 IF p_bom_resource_id_tbl.EXISTS(i) THEN
6877 l_resource_rec_tbl(i).bom_resource_id := p_bom_resource_id_tbl(i);
6878 END IF;
6879 IF p_non_labor_resource_tbl.EXISTS(i) THEN
6880 l_resource_rec_tbl(i).non_labor_resource := p_non_labor_resource_tbl(i);
6881 END IF;
6882 IF p_inventory_item_id_tbl.EXISTS(i) THEN
6883 l_resource_rec_tbl(i).inventory_item_id := p_inventory_item_id_tbl(i);
6884 END IF;
6885 IF p_item_category_id_tbl.EXISTS(i) THEN
6886 l_resource_rec_tbl(i).item_category_id := p_item_category_id_tbl(i);
6887 END IF;
6888 IF p_project_role_id_tbl.EXISTS(i) THEN
6889 l_resource_rec_tbl(i).project_role_id := p_project_role_id_tbl(i);
6890 END IF;
6891 IF p_project_role_name_tbl.EXISTS(i) THEN
6892 l_resource_rec_tbl(i).project_role_name := p_project_role_name_tbl(i);
6893 END IF;
6894 IF p_organization_id_tbl.EXISTS(i) THEN
6895 l_resource_rec_tbl(i).organization_id := p_organization_id_tbl(i);
6896 END IF;
6897 l_trace_stage := 251;
6898 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6899
6900
6901 IF p_organization_name_tbl.EXISTS(i) THEN
6902 l_resource_rec_tbl(i).organization_name := p_organization_name_tbl(i);
6903 END IF;
6904 IF p_fc_res_type_code_tbl.EXISTS(i) THEN
6905 l_resource_rec_tbl(i).fc_res_type_code := p_fc_res_type_code_tbl(i);
6906 END IF;
6907
6908 l_trace_stage := 2511;
6909 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6910
6911 IF p_financial_category_code_tbl.EXISTS(i) THEN
6912 l_resource_rec_tbl(i).financial_category_code := p_financial_category_code_tbl(i);
6913 END IF;
6914
6915 l_trace_stage := 2512;
6916 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6917
6918 IF p_expenditure_type_tbl.EXISTS(i) THEN
6919 l_resource_rec_tbl(i).expenditure_type := p_expenditure_type_tbl(i);
6920 END IF;
6921 l_trace_stage := 2513;
6922 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6923
6924 IF p_expenditure_category_tbl.EXISTS(i) THEN
6925 l_resource_rec_tbl(i).expenditure_category := p_expenditure_category_tbl(i);
6926 END IF;
6927 l_trace_stage := 2514;
6928 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6929
6930 IF p_event_type_tbl.EXISTS(i) THEN
6931 l_resource_rec_tbl(i).event_type := p_event_type_tbl(i);
6932 END IF;
6933 l_trace_stage := 2515;
6934 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6935
6936 IF p_revenue_category_code_tbl.EXISTS(i) THEN
6937 l_resource_rec_tbl(i).revenue_category_code := p_revenue_category_code_tbl(i);
6938 END IF;
6939 l_trace_stage := 252;
6940 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6941
6942 IF p_supplier_id_tbl.EXISTS(i) THEN
6943 l_resource_rec_tbl(i).supplier_id := p_supplier_id_tbl(i);
6944 END IF;
6945 IF p_unit_of_measure_tbl.EXISTS(i) THEN
6946 l_resource_rec_tbl(i).unit_of_measure := p_unit_of_measure_tbl(i);
6947 END IF;
6948 IF p_spread_curve_id_tbl.EXISTS(i) THEN
6949 l_resource_rec_tbl(i).spread_curve_id := p_spread_curve_id_tbl(i);
6950 END IF;
6951 IF p_etc_method_code_tbl.EXISTS(i) THEN
6952 l_resource_rec_tbl(i).etc_method_code := p_etc_method_code_tbl(i);
6953 END IF;
6954 IF p_mfc_cost_type_id_tbl.EXISTS(i) THEN
6955 l_resource_rec_tbl(i).mfc_cost_type_id := p_mfc_cost_type_id_tbl(i);
6956 END IF;
6957 l_trace_stage := 253;
6958 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6959
6960
6961 IF p_procure_resource_flag_tbl.EXISTS(i) THEN
6962 l_resource_rec_tbl(i).procure_resource_flag := p_procure_resource_flag_tbl(i);
6963 END IF;
6964 IF p_incurred_by_res_flag_tbl.EXISTS(i) THEN
6965 l_resource_rec_tbl(i).incurred_by_res_flag := p_incurred_by_res_flag_tbl(i);
6966 END IF;
6967 IF p_incur_by_resource_code_tbl.EXISTS(i) THEN
6968 l_resource_rec_tbl(i).incur_by_resource_code := p_incur_by_resource_code_tbl(i);
6969 END IF;
6970 IF p_incur_by_resource_name_tbl.EXISTS(i) THEN
6971 l_resource_rec_tbl(i).incur_by_resource_name := p_incur_by_resource_name_tbl(i);
6972 END IF;
6973 IF p_Incur_by_res_class_code_tbl.EXISTS(i) THEN
6974 l_resource_rec_tbl(i).Incur_by_res_class_code := p_Incur_by_res_class_code_tbl(i);
6975 END IF;
6976 IF p_Incur_by_role_id_tbl.EXISTS(i) THEN
6977 l_resource_rec_tbl(i).Incur_by_role_id := p_Incur_by_role_id_tbl(i);
6978 END IF;
6979 IF p_use_task_schedule_flag_tbl.EXISTS(i) THEN
6980 l_resource_rec_tbl(i).use_task_schedule_flag := p_use_task_schedule_flag_tbl(i);
6981 END IF;
6982 IF l_planning_start_date_tbl.EXISTS(i) THEN
6983 l_resource_rec_tbl(i).planning_start_date := l_planning_start_date_tbl(i);
6984 END IF;
6985 IF l_planning_end_date_tbl.EXISTS(i) THEN
6986 l_resource_rec_tbl(i).planning_end_date := l_planning_end_date_tbl(i);
6987 END IF;
6988 IF l_schedule_start_date_tbl.EXISTS(i) THEN
6989 l_resource_rec_tbl(i).schedule_start_date := l_schedule_start_date_tbl(i);
6990 END IF;
6991 IF l_schedule_end_date_tbl.EXISTS(i) THEN
6992 l_resource_rec_tbl(i).schedule_end_date := l_schedule_end_date_tbl(i);
6993 END IF;
6994
6995 l_trace_stage := 254;
6996 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
6997
6998 IF l_total_quantity_tbl.EXISTS(i) THEN
6999 l_resource_rec_tbl(i).total_quantity := l_total_quantity_tbl(i);
7000 END IF;
7001 IF p_txn_currency_override_tbl.EXISTS(i) THEN
7002 l_resource_rec_tbl(i).override_currency_code := p_txn_currency_override_tbl(i);
7003 END IF;
7004 IF p_billable_percent_tbl.EXISTS(i) THEN
7005 l_resource_rec_tbl(i).billable_percent := p_billable_percent_tbl(i);
7006 END IF;
7007 IF p_cost_rate_override_tbl.EXISTS(i) THEN
7008 l_resource_rec_tbl(i).cost_rate_override := p_cost_rate_override_tbl(i);
7009 END IF;
7010 IF p_burdened_rate_override_tbl.EXISTS(i) THEN
7011 l_resource_rec_tbl(i).burdened_rate_override := p_burdened_rate_override_tbl(i);
7012 END IF;
7013 -- 3817356 Replacing p_xxxx_date_tbls by l_in_xxxx_date_tbls
7014 IF l_in_sp_fixed_date_tbl.EXISTS(i) THEN
7015 l_resource_rec_tbl(i).sp_fixed_date := l_in_sp_fixed_date_tbl(i);
7016 END IF;
7017 IF p_financial_category_name_tbl.EXISTS(i) THEN
7018 l_resource_rec_tbl(i).financial_category_name := p_financial_category_name_tbl(i);
7019 END IF;
7020 IF p_named_role_tbl.EXISTS(i) THEN
7021 l_resource_rec_tbl(i).named_role := p_named_role_tbl(i);
7022 END IF;
7023 IF p_supplier_name_tbl.EXISTS(i) THEN
7024 l_resource_rec_tbl(i).supplier_name := p_supplier_name_tbl(i);
7025 END IF;
7026 l_trace_stage := 260;
7027 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
7028
7029
7030 --Select the element version id for each ra id
7031 SELECT wbs_element_version_id
7032 INTO l_resource_rec_tbl(i).wbs_element_version_id
7033 FROM pa_resource_assignments
7034 WHERE resource_assignment_id = l_resource_assignment_id_tbl(i);
7035
7036 IF p_attribute_category_tbl.EXISTS(i) THEN
7037 l_resource_rec_tbl(i).attribute_category := p_attribute_category_tbl(i);
7038 END IF;
7039 IF p_attribute1_tbl.EXISTS(i) THEN
7040 l_resource_rec_tbl(i).attribute1 := p_attribute1_tbl(i);
7041 END IF;
7042 IF p_attribute2_tbl.EXISTS(i) THEN
7043 l_resource_rec_tbl(i).attribute2 := p_attribute2_tbl(i);
7044 END IF;
7045 IF p_attribute3_tbl.EXISTS(i) THEN
7046 l_resource_rec_tbl(i).attribute3 := p_attribute3_tbl(i);
7047 END IF;
7048 IF p_attribute4_tbl.EXISTS(i) THEN
7049 l_resource_rec_tbl(i).attribute4 := p_attribute4_tbl(i);
7050 END IF;
7051 IF p_attribute5_tbl.EXISTS(i) THEN
7052 l_resource_rec_tbl(i).attribute5 := p_attribute5_tbl(i);
7053 END IF;
7054 IF p_attribute6_tbl.EXISTS(i) THEN
7055 l_resource_rec_tbl(i).attribute6 := p_attribute6_tbl(i);
7056 END IF;
7057 IF p_attribute7_tbl.EXISTS(i) THEN
7058 l_resource_rec_tbl(i).attribute7 := p_attribute7_tbl(i);
7059 END IF;
7060
7061 IF p_attribute8_tbl.EXISTS(i) THEN
7062 l_resource_rec_tbl(i).attribute8 := p_attribute8_tbl(i);
7063 END IF;
7064 IF p_attribute9_tbl.EXISTS(i) THEN
7065 l_resource_rec_tbl(i).attribute9 := p_attribute9_tbl(i);
7066 END IF;
7067 IF p_attribute10_tbl.EXISTS(i) THEN
7068 l_resource_rec_tbl(i).attribute10 := p_attribute10_tbl(i);
7069 END IF;
7070 IF p_attribute11_tbl.EXISTS(i) THEN
7071 l_resource_rec_tbl(i).attribute11 := p_attribute11_tbl(i);
7072 END IF;
7073 IF p_attribute12_tbl.EXISTS(i) THEN
7074 l_resource_rec_tbl(i).attribute12 := p_attribute12_tbl(i);
7075 END IF;
7076 IF p_attribute13_tbl.EXISTS(i) THEN
7077 l_resource_rec_tbl(i).attribute13 := p_attribute13_tbl(i);
7078 END IF;
7079 IF p_attribute14_tbl.EXISTS(i) THEN
7080 l_resource_rec_tbl(i).attribute14 := p_attribute14_tbl(i);
7081 END IF;
7082 IF p_attribute15_tbl.EXISTS(i) THEN
7083 l_resource_rec_tbl(i).attribute15 := p_attribute15_tbl(i);
7084 END IF;
7085 IF p_attribute16_tbl.EXISTS(i) THEN
7086 l_resource_rec_tbl(i).attribute16 := p_attribute16_tbl(i);
7087 END IF;
7088 IF p_attribute17_tbl.EXISTS(i) THEN
7089 l_resource_rec_tbl(i).attribute17 := p_attribute17_tbl(i);
7090 END IF;
7091 IF p_attribute18_tbl.EXISTS(i) THEN
7092 l_resource_rec_tbl(i).attribute18 := p_attribute18_tbl(i);
7093 END IF;
7094 IF p_attribute19_tbl.EXISTS(i) THEN
7095 l_resource_rec_tbl(i).attribute19 := p_attribute19_tbl(i);
7096 END IF;
7097 IF p_attribute20_tbl.EXISTS(i) THEN
7098 l_resource_rec_tbl(i).attribute20 := p_attribute20_tbl(i);
7099 END IF;
7100 IF p_attribute21_tbl.EXISTS(i) THEN
7101 l_resource_rec_tbl(i).attribute21 := p_attribute21_tbl(i);
7102 END IF;
7103 IF p_attribute22_tbl.EXISTS(i) THEN
7104 l_resource_rec_tbl(i).attribute22 := p_attribute22_tbl(i);
7105 END IF;
7106 IF p_attribute23_tbl.EXISTS(i) THEN
7107 l_resource_rec_tbl(i).attribute23 := p_attribute23_tbl(i);
7108 END IF;
7109 IF p_attribute24_tbl.EXISTS(i) THEN
7110 l_resource_rec_tbl(i).attribute24 := p_attribute24_tbl(i);
7111 END IF;
7112 IF p_attribute25_tbl.EXISTS(i) THEN
7113 l_resource_rec_tbl(i).attribute25 := p_attribute25_tbl(i);
7114 END IF;
7115 IF p_attribute26_tbl.EXISTS(i) THEN
7116 l_resource_rec_tbl(i).attribute26 := p_attribute26_tbl(i);
7117 END IF;
7118 IF p_attribute27_tbl.EXISTS(i) THEN
7119 l_resource_rec_tbl(i).attribute27 := p_attribute27_tbl(i);
7120 END IF;
7121 IF p_attribute28_tbl.EXISTS(i) THEN
7122 l_resource_rec_tbl(i).attribute28 := p_attribute28_tbl(i);
7123 END IF;
7124 IF p_attribute29_tbl.EXISTS(i) THEN
7125 l_resource_rec_tbl(i).attribute29 := p_attribute29_tbl(i);
7126 END IF;
7127 IF p_attribute30_tbl.EXISTS(i) THEN
7128 l_resource_rec_tbl(i).attribute30 := p_attribute30_tbl(i);
7129 END IF;
7130
7131 --For bug 3948128
7132 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK AND p_scheduled_delay.EXISTS(i) THEN
7133 l_resource_rec_tbl(i).scheduled_delay := p_scheduled_delay(i);
7134 END IF;
7135 END LOOP;
7136
7137 l_trace_stage := 2500;
7138 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: '||to_char(l_trace_stage));
7139
7140 --dbms_output.put_line('3');
7141 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
7142 /*-------------------------------------------------
7143 Calling Task validation API
7144 -------------------------------------------------*/
7145 IF l_debug_mode = 'Y' THEN
7146 pa_debug.g_err_stage:='Calling API pa_task_assignment_utils.Validate_Update_Assignment';
7147 pa_debug.write(l_module_name,pa_debug.g_err_stage,
7148 l_debug_level3);
7149 END IF;
7150
7151 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: before calling validate_update_assignment');
7152
7153 --dbms_output.put_line(' l_resource_rec_tbl(i).cost_rate_override is '|| l_resource_rec_tbl(1).cost_rate_override);
7154 PA_TASK_ASSIGNMENT_UTILS.Validate_Update_Assignment(
7155 p_calling_context => p_calling_context, -- Added for Bug 6856934
7156 p_task_assignment_tbl => l_resource_rec_tbl,
7157 x_return_status => l_return_status);
7158 --dbms_output.put_line(' l_resource_rec_tbl(i).cost_rate_override is '|| l_resource_rec_tbl(1).cost_rate_override);
7159
7160 --hr_utility.trace('PA_FP_PLAN_TXN_PUB.update_planning_transactions: after calling validate_update_assignment');
7161
7162 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7163 IF l_debug_mode = 'Y' THEN
7164 pa_debug.g_err_stage:='Called API PA_TASK_ASSIGNMENT_UTILS.Validate_Update_Assignment returned error';
7165 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7166 END IF;
7167 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7168 END IF;
7169
7170 --If the rec tbl returned by validate API does not contain records then return
7171 IF l_resource_rec_tbl.COUNT=0 THEN
7172 IF l_debug_mode = 'Y' THEN
7173 pa_debug.g_err_stage:='Validate API returned 0 records';
7174 print_msg(pa_debug.g_err_stage,l_module_name);
7175 pa_debug.reset_curr_function;
7176 END IF;
7177 RETURN;
7178 END IF;
7179
7180
7181
7182 END IF;
7183
7184
7185 /*------------------------------------------------------------------------
7186 -- Repopulating all the resource data tables from the table l_resource_rec_tbl
7187 -- Now all the parameters not passed will be initialized to FND_API.G_MISS_XXX
7188 ------------------------------------------------------------------------ */
7189 FOR i IN l_resource_rec_tbl.FIRST .. l_resource_rec_tbl.LAST LOOP
7190
7191 IF l_resource_rec_tbl.EXISTS(i) THEN
7192 --dbms_output.put_line('E1');
7193
7194 l_resource_assignment_id_tbl(i) := l_resource_rec_tbl(i).resource_assignment_id;
7195 l_resource_list_member_id_tbl(i):= l_resource_rec_tbl(i).resource_list_member_id;
7196 l_assignment_description_tbl(i) := l_resource_rec_tbl(i).assignment_description;
7197 l_planning_resource_alias_tbl(i):= l_resource_rec_tbl(i).planning_resource_alias;
7198 l_resource_class_flag_tbl(i) := l_resource_rec_tbl(i).resource_class_flag;
7199 l_resource_class_code_tbl(i) := l_resource_rec_tbl(i).resource_class_code;
7200 l_resource_class_id_tbl(i) := l_resource_rec_tbl(i).resource_class_id;
7201 -- Added for bug 3698458
7202 l_rate_exp_org_id_tbl(i) := l_resource_rec_tbl(i).org_id;
7203 l_rate_exp_type_tbl(i) := l_resource_rec_tbl(i).rate_expenditure_type;
7204 l_rate_func_curr_code_tbl(i) := l_resource_rec_tbl(i).rate_func_curr_code;
7205 l_incur_by_res_type_tbl(i) := l_resource_rec_tbl(i).incur_by_res_type;
7206 l_incurred_by_res_flag_tbl(i) := l_resource_rec_tbl(i).incurred_by_res_flag;
7207 l_res_type_code_tbl(i) := l_resource_rec_tbl(i).res_type_code;
7208
7209 IF l_incurred_by_res_flag_tbl.EXISTS(i) AND nvl(l_incurred_by_res_flag_tbl(i),'N') = 'Y' THEN
7210 IF l_incur_by_res_type_tbl.EXISTS(i) THEN
7211 l_res_type_code_tbl(i) := l_incur_by_res_type_tbl(i);
7212 ELSE
7213 l_res_type_code_tbl(i) := NULL;
7214 END IF;
7215 END IF;
7216
7217 -- The following if-else clause has been added for bug 3678814
7218 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
7219 l_rate_based_flag_tbl(i) := l_resource_rec_tbl(i).rate_based_flag;
7220 ELSE
7221 l_rate_based_flag_tbl(i) := null;
7222 END If;
7223
7224 l_resource_code_tbl(i) := l_resource_rec_tbl(i).resource_code;
7225 l_person_id_tbl(i) := l_resource_rec_tbl(i).person_id;
7226 --l_job_id_tbl(i) := l_resource_rec_tbl(i).job_id; -- Bug 12384023
7227 l_person_type_code_tbl(i) := l_resource_rec_tbl(i).person_type_code;
7228 l_bom_resource_id_tbl(i) := l_resource_rec_tbl(i).bom_resource_id;
7229 l_non_labor_resource_tbl(i) := l_resource_rec_tbl(i).non_labor_resource;
7230 l_inventory_item_id_tbl(i) := l_resource_rec_tbl(i).inventory_item_id;
7231
7232 l_item_category_id_tbl(i) := l_resource_rec_tbl(i).item_category_id;
7233 l_project_role_id_tbl(i) := l_resource_rec_tbl(i).project_role_id;
7234 l_project_role_name_tbl(i) := l_resource_rec_tbl(i).project_role_name;
7235 l_organization_id_tbl(i) := l_resource_rec_tbl(i).organization_id;
7236 l_organization_name_tbl(i) := l_resource_rec_tbl(i).organization_name;
7237 l_fc_res_type_code_tbl(i) := l_resource_rec_tbl(i).fc_res_type_code;
7238 l_financial_category_code_tbl(i):= l_resource_rec_tbl(i).financial_category_code;
7239 l_expenditure_type_tbl(i) := l_resource_rec_tbl(i).expenditure_type;
7240 l_expenditure_category_tbl(i) := l_resource_rec_tbl(i).expenditure_category;
7241 l_event_type_tbl(i) := l_resource_rec_tbl(i).event_type;
7242 l_revenue_category_code_tbl(i) := l_resource_rec_tbl(i).revenue_category_code;
7243 l_supplier_id_tbl(i) := l_resource_rec_tbl(i).supplier_id;
7244 l_unit_of_measure_tbl(i) := l_resource_rec_tbl(i).unit_of_measure;
7245 l_spread_curve_id_tbl(i) := l_resource_rec_tbl(i).spread_curve_id;
7246 l_etc_method_code_tbl(i) := l_resource_rec_tbl(i).etc_method_code;
7247 l_mfc_cost_type_id_tbl(i) := l_resource_rec_tbl(i).mfc_cost_type_id;
7248 l_procure_resource_flag_tbl(i) := l_resource_rec_tbl(i).procure_resource_flag;
7249 l_incur_by_resource_code_tbl(i) := l_resource_rec_tbl(i).incur_by_resource_code;
7250 l_incur_by_resource_name_tbl(i) := l_resource_rec_tbl(i).incur_by_resource_name;
7251 l_Incur_by_res_class_code_tbl(i):= l_resource_rec_tbl(i).Incur_by_res_class_code;
7252 l_Incur_by_role_id_tbl(i) := l_resource_rec_tbl(i).Incur_by_role_id;
7253 l_use_task_schedule_flag_tbl(i) := l_resource_rec_tbl(i).use_task_schedule_flag;
7254 l_planning_start_date_tbl(i) := l_resource_rec_tbl(i).planning_start_date;
7255 l_planning_end_date_tbl(i) := l_resource_rec_tbl(i).planning_end_date;
7256 l_schedule_start_date_tbl(i) := l_resource_rec_tbl(i).schedule_start_date;
7257 l_schedule_end_date_tbl(i) := l_resource_rec_tbl(i).schedule_end_date;
7258 l_total_quantity_tbl(i) := l_resource_rec_tbl(i).total_quantity;
7259 l_override_currency_code_tbl(i) := l_resource_rec_tbl(i).override_currency_code;
7260 l_billable_percent_tbl(i) := l_resource_rec_tbl(i).billable_percent;
7261 l_cost_rate_override_tbl(i) := l_resource_rec_tbl(i).cost_rate_override;
7262 l_burdened_rate_override_tbl(i) := l_resource_rec_tbl(i).burdened_rate_override;
7263 l_sp_fixed_date_tbl(i) := l_resource_rec_tbl(i).sp_fixed_date;
7264 l_named_role_tbl(i) := l_resource_rec_tbl(i).named_role;
7265 l_financial_category_name_tbl(i):= l_resource_rec_tbl(i).financial_category_name;
7266 l_supplier_name_tbl(i) := l_resource_rec_tbl(i).supplier_name;
7267 l_wbs_element_version_id_tbl(i) := l_resource_rec_tbl(i).wbs_element_version_id;
7268 l_project_assignment_id_tbl(i) := l_resource_rec_tbl(i).project_assignment_id;
7269 l_attribute_category_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE_CATEGORY;
7270 l_attribute1_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE1;
7271 l_attribute2_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE2;
7272 l_attribute3_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE3;
7273 l_attribute4_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE4;
7274 l_attribute5_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE5;
7275 l_attribute6_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE6;
7276
7277 l_attribute7_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE7;
7278 l_attribute8_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE8;
7279 l_attribute9_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE9;
7280 l_attribute10_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE10;
7281 l_attribute11_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE11;
7282 l_attribute12_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE12;
7283 l_attribute13_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE13;
7284 l_attribute14_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE14;
7285 l_attribute15_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE15;
7286 l_attribute16_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE16;
7287 l_attribute17_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE17;
7288 l_attribute18_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE18;
7289 l_attribute19_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE19;
7290 l_attribute20_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE20;
7291 l_attribute21_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE21;
7292 l_attribute22_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE22;
7293
7294 l_attribute23_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE23;
7295 l_attribute24_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE24;
7296 l_attribute25_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE25;
7297 l_attribute26_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE26;
7298 l_attribute27_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE27;
7299 l_attribute28_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE28;
7300 l_attribute29_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE29;
7301 l_attribute30_tbl(i) := l_resource_rec_tbl(i).ATTRIBUTE30;
7302
7303 l_job_id_temp := NULL; --bug#13566990
7304
7305 -- Bug 12384023: Deriving job_id based on assignment start date :start
7306 get_default_job
7307 (
7308 p_person_id => l_person_id_tbl(i)
7309 ,p_resource_assignment_id => l_resource_assignment_id_tbl(i)
7310 ,p_planning_start_date => l_planning_start_date_tbl(i)
7311 ,p_project_role_id => l_project_role_id_tbl(i)
7312 ,x_job_id => l_job_id_temp --bug#13566990
7313 );
7314 -- Bug 12384023: Deriving job_id based on assignment start date :end
7315
7316 --bug#13566990
7317 If l_job_id_temp IS NOT NULL THEN
7318 l_job_id_tbl(i) := l_job_id_temp;
7319 END IF;
7320
7321
7322 --For bug 3948128
7323 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
7324 l_scheduled_delay(i) := l_resource_rec_tbl(i).scheduled_delay;
7325 END IF;
7326 END IF;
7327 /* Commenting out this code for check for spread curve date to be null
7328 since this check will be done in Process_res_chg_Derv_calc_prms 3762278
7329 -- Added for Bug 3607061 - Starts
7330 -- Please not that FIXED DATE SPREAD CURVE ID is SEEDED as 6, so we are able to hard code it below
7331 IF l_debug_mode = 'Y' THEN
7332 pa_debug.g_err_stage:='Deriving SP Fixed Date';
7333 print_msg(pa_debug.g_err_stage,l_module_name);
7334 END IF;
7335 IF l_spread_curve_id_tbl(i) = l_fixed_date_sp_id THEN
7336 IF l_debug_mode = 'Y' THEN
7337 pa_debug.g_err_stage:='Spread Curve Id is of FIXED_DATE';
7338 print_msg(pa_debug.g_err_stage,l_module_name);
7339 END IF;
7340 IF l_sp_fixed_date_tbl(i) = FND_API.G_MISS_DATE THEN
7341 IF l_debug_mode = 'Y' THEN
7342 pa_debug.g_err_stage:='Error - cannot nullify sp_fixed_date for Fixed Date Spread curve';
7343 print_msg(pa_debug.g_err_stage,l_module_name);
7344 END IF;
7345 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7346 p_msg_name => 'PA_FP_SP_FIXED_DATE_NULL');
7347 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7348 END IF;
7349 END IF;
7350 -- Added for Bug 3607061 - Ends
7351 */
7352 --dbms_output.put_line('E2');
7353
7354 END LOOP;
7355
7356 --dbms_output.put_line('l_total_quantity_tbl.last '||l_total_quantity_tbl.last||' l_total_quantity_tbl(1) '||l_total_quantity_tbl(1));
7357
7358 --Get the project currency so that it can be used in preparing pl/sql tables for calculate api
7359 pa_budget_utils.Get_Project_Currency_Info
7360 ( p_project_id => l_project_id
7361 , x_projfunc_currency_code => l_projfunc_currency_code_out
7362 , x_project_currency_code => l_existing_curr_code
7363 , x_txn_currency_code => l_projfunc_currency_code
7364 , x_msg_count => x_msg_count
7365 , x_msg_data => x_msg_data
7366 , x_return_status => x_return_status);
7367 --dbms_output.put_line('4');
7368 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7369 IF l_debug_mode = 'Y' THEN
7370 pa_debug.g_err_stage:='Cpa_budget_utils.Get_Project_Currency_Info returned error';
7371 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7372 END IF;
7373 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7374 END IF;
7375
7376 --Derive the tables that are required for Calculate API
7377 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR p_context = PA_FP_CONSTANTS_PKG.G_PLAN_CLASS_FORECAST THEN
7378
7379 IF l_debug_mode = 'Y' THEN
7380 pa_debug.g_err_stage:='Preparing the pl/sql tables for calling calc api for BF';
7381 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7382 END IF;
7383
7384
7385 l_override_currency_code_tbl := p_txn_currency_override_tbl;
7386 l_bill_rate_override_tbl := p_bill_rate_override_tbl;
7387 l_bill_rate_tbl := p_bill_rate_tbl;
7388 l_burdened_rate_override_tbl := p_burdened_rate_override_tbl;
7389 l_b_multiplier_tbl := p_burdened_rate_tbl;
7390 l_cost_rate_override_tbl := p_cost_rate_override_tbl;
7391 l_raw_cost_rate_tbl := p_cost_rate_tbl;
7392 l_revenue_tbl := p_revenue_tbl;
7393 l_burdened_cost_tbl := p_burdened_cost_tbl;
7394 l_total_raw_cost_tbl := p_raw_cost_tbl;
7395 --Added by Xin. Fix Bug 3430136
7396 --Feb-09-2004 Doosan iteration 1
7397 l_currency_code_tbl := p_currency_code_tbl;
7398
7399 l_override_currency_code_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_override_currency_code_tbl.COUNT );
7400 l_bill_rate_override_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_bill_rate_override_tbl.COUNT);
7401 l_bill_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_bill_rate_tbl.COUNT);
7402 l_burdened_rate_override_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_burdened_rate_override_tbl.COUNT);
7403 l_b_multiplier_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_b_multiplier_tbl.COUNT);
7404 --dbms_output.put_line('l_cost_rate_override_tbl count is '||l_cost_rate_override_tbl.count);
7405 l_cost_rate_override_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_cost_rate_override_tbl.COUNT);
7406 --dbms_output.put_line('A l_cost_rate_override_tbl count is '||l_cost_rate_override_tbl.count);
7407 l_raw_cost_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_raw_cost_rate_tbl.COUNT);
7408 l_revenue_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_revenue_tbl.COUNT);
7409 l_burdened_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_burdened_cost_tbl.COUNT);
7410 l_total_raw_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_total_raw_cost_tbl.COUNT);
7411 l_currency_code_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_currency_code_tbl.COUNT);
7412
7413
7414
7415 -- In the context of Task Assignment and Workplan, the block below will calculate the additional quantity
7416 -- i.e. the difference between the existing quantity and the quantity passed.
7417 ELSIF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
7418
7419 IF l_debug_mode = 'Y' THEN
7420 pa_debug.g_err_stage:='About to bulk collect into pl/sql tables req for calc api '||l_override_currency_code_tbl.last;
7421 print_msg(pa_debug.g_err_stage,l_module_name);
7422 END IF;
7423
7424 /* Preparing PLSql Tables for Rates for Calling Calculate API*/
7425 -- Bug 3760166
7426 l_bill_rate_tbl := p_bill_rate_tbl;
7427 l_b_multiplier_tbl := p_burdened_rate_tbl;
7428 l_raw_cost_rate_tbl := p_cost_rate_tbl;
7429
7430 l_bill_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_bill_rate_tbl.COUNT);
7431 l_b_multiplier_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_b_multiplier_tbl.COUNT);
7432 l_raw_cost_rate_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_raw_cost_rate_tbl.COUNT);
7433
7434 /** added for progress upload **/
7435 -- Bug 3807763. For Workplan Context, check_and_create_task_rec info has already been called.
7436 -- This takes care of populating l_burdened_cost_tbl and l_total_raw_cost_tbl as per the I/P Data.
7437 If ((p_apply_progress_flag = 'Y' AND p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK) OR
7438 p_upd_cost_amts_too_for_ta_flg = 'Y' ) THEN --Added for bug#4538286.
7439 --l_revenue_tbl := p_revenue_tbl;
7440 l_burdened_cost_tbl := p_burdened_cost_tbl;
7441 l_total_raw_cost_tbl := p_raw_cost_tbl;
7442
7443 l_total_raw_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_total_raw_cost_tbl.COUNT);
7444 l_burdened_cost_tbl.EXTEND(l_resource_assignment_id_tbl.COUNT-l_burdened_cost_tbl.COUNT);
7445 End If;
7446
7447 --The below LOOP will be used to derive the txn currency code for each task assignment
7448 FOR i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST LOOP
7449
7450 --Bug 6397725. From FP M RUP3 onwards check should be made against pa_resource_asgn_curr
7451 --table
7452 /*
7453 SELECT NVL(pbl.txn_currency_code,l_existing_curr_code)
7454 INTO l_currency_code_tbl(i)
7455 FROM pa_resource_assignments b,
7456 (SELECT pbl.txn_currency_code,
7457 pra.resource_assignment_id
7458 FROM pa_budget_lines pbl,
7459 pa_resource_assignments pra
7460 WHERE pbl.resource_assignment_id(+)=pra.resource_assignment_id
7461 AND pra.resource_assignment_id=l_resource_assignment_id_tbl(i)
7462 AND ROWNUM=1) pbl
7463 WHERE b.resource_assignment_id=l_resource_assignment_id_tbl(i);*/
7464
7465 SELECT NVL(rac.txn_currency_code,l_existing_curr_code)
7466 INTO l_currency_code_tbl(i)
7467 FROM pa_resource_asgn_curr rac,
7468 pa_resource_assignments pra
7469 WHERE rac.resource_assignment_id(+)=pra.resource_assignment_id
7470 AND pra.resource_assignment_id=l_resource_assignment_id_tbl(i);
7471
7472 END LOOP;
7473 /* Note that l_override_currency_code_tbl would be null in case of
7474 * WP which is correct. This can never be edited in WP flow. For TA,
7475 * l_override_curr_code_tbl would be having override curr code that
7476 * got passed from the UI and ultimately returned back by the
7477 * validate TA api */
7478
7479 IF l_debug_mode = 'Y' THEN
7480 pa_debug.g_err_stage:='Done with preparing the tables';
7481 print_msg(pa_debug.g_err_stage,l_module_name);
7482 END IF;
7483
7484 END IF;
7485
7486 /* Calling the api Derive_Parameters_For_Calc_Api
7487 */
7488 IF l_debug_mode = 'Y' THEN
7489 pa_debug.g_err_stage:='Calling API Derive_Parameters_For_Calc_Api';
7490 print_msg(pa_debug.g_err_stage,l_module_name);
7491 END IF;
7492 --dbms_output.put_line('l_b_multiplier_tbl cnt is '||l_burdened_rate_override_tbl.count);
7493 --dbms_output.put_line('5');
7494 Process_res_chg_Derv_calc_prms
7495 (
7496 p_context => p_context
7497 ,p_calling_context => p_calling_context -- Added for Bug 6856934
7498 ,p_budget_version_id => l_budget_version_id
7499 ,p_resource_assignment_id_tbl => l_resource_assignment_id_tbl
7500 ,p_resource_list_member_id_tbl => l_resource_list_member_id_tbl
7501 ,p_planning_start_date_tbl => l_planning_start_date_tbl
7502 ,p_planning_end_date_tbl => l_planning_end_date_tbl
7503 ,p_spread_curve_id_tbl => l_spread_curve_id_tbl
7504 ,p_sp_fixed_date_tbl => l_sp_fixed_date_tbl
7505 ,p_txn_currency_code_tbl => l_currency_code_tbl
7506 ,p_inventory_item_id_tbl => l_inventory_item_id_tbl
7507 ,p_expenditure_type_tbl => l_expenditure_type_tbl
7508 ,p_person_id_tbl => l_person_id_tbl
7509 ,p_job_id_tbl => l_job_id_tbl
7510 ,p_organization_id_tbl => l_organization_id_tbl
7511 ,p_event_type_tbl => l_event_type_tbl
7512 ,p_expenditure_category_tbl => l_expenditure_category_tbl
7513 ,p_revenue_category_code_tbl => l_revenue_category_code_tbl
7514 ,p_item_category_id_tbl => l_item_category_id_tbl
7515 ,p_bom_resource_id_tbl => l_bom_resource_id_tbl
7516 ,p_project_role_id_tbl => l_project_role_id_tbl
7517 ,p_person_type_code_tbl => l_person_type_code_tbl
7518 ,p_supplier_id_tbl => l_supplier_id_tbl
7519 ,p_named_role_tbl => l_named_role_tbl
7520 ,p_mfc_cost_type_id_tbl => l_mfc_cost_type_id_tbl
7521 ,p_fixed_date_sp_id => l_fixed_date_sp_id
7522 ,px_total_qty_tbl => l_total_quantity_tbl
7523 ,px_total_raw_cost_tbl => l_total_raw_cost_tbl
7524 ,px_total_burdened_cost_tbl => l_burdened_cost_tbl
7525 ,px_total_revenue_tbl => l_revenue_tbl
7526 ,px_raw_cost_rate_tbl => l_raw_cost_rate_tbl
7527 ,px_raw_cost_override_rate_tbl => l_cost_rate_override_tbl
7528 ,px_b_cost_rate_tbl => l_b_multiplier_tbl
7529 ,px_b_cost_rate_override_tbl => l_burdened_rate_override_tbl
7530 ,px_bill_rate_tbl => l_bill_rate_tbl
7531 ,px_bill_rate_override_tbl => l_bill_rate_override_tbl
7532 ,x_rbs_element_id_tbl => l_rbs_element_id_tbl
7533 ,x_txn_accum_header_id_tbl => l_txn_accum_header_id_tbl
7534 ,x_mfc_cost_type_id_old_tbl => l_mfc_cost_type_id_old_tbl
7535 ,x_mfc_cost_type_id_new_tbl => l_mfc_cost_type_id_new_tbl
7536 ,x_spread_curve_id_old_tbl => l_spread_curve_id_old_tbl
7537 ,x_spread_curve_id_new_tbl => l_spread_curve_id_new_tbl
7538 ,x_sp_fixed_date_old_tbl => l_sp_fixed_date_old_tbl
7539 ,x_sp_fixed_date_new_tbl => l_sp_fixed_date_new_tbl
7540 ,x_plan_start_date_old_tbl => l_plan_start_date_old_tbl
7541 ,x_plan_start_date_new_tbl => l_plan_start_date_new_tbl
7542 ,x_plan_end_date_old_tbl => l_plan_end_date_old_tbl
7543 ,x_plan_end_date_new_tbl => l_plan_end_date_new_tbl
7544 ,x_rlm_id_change_flag_tbl => l_rlm_id_change_flag_tbl
7545 ,x_return_status => x_return_status
7546 ,x_msg_data => x_msg_data
7547 ,x_msg_count => x_msg_count );
7548
7549 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7550 IF l_debug_mode = 'Y' THEN
7551 pa_debug.g_err_stage:='Derive_Parameters_For_Calc_Api returned error';
7552 print_msg(pa_debug.g_err_stage,l_module_name);
7553 END IF;
7554 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7555 END IF;
7556
7557 --The Sp Fixed Date will be defaulted in Process_res_chg_Derv_calc_prms to planning start date if not passed
7558 --for a resource assignment with fixed spread curve. Hence the value returned should be considered
7559 l_sp_fixed_date_tbl := l_sp_fixed_date_new_tbl;
7560 --dbms_output.put_line(' cccc l_burdened_rate_override_tbl cnt is '||l_burdened_rate_override_tbl.count);
7561 IF l_debug_mode = 'Y' THEN
7562 pa_debug.g_err_stage:='Bulk updating pa_resource_assignments. start '||l_resource_assignment_id_tbl.FIRST ||' end '||l_resource_assignment_id_tbl.LAST;
7563 print_msg(pa_debug.g_err_stage,l_module_name);
7564 END IF;
7565
7566 --dbms_output.put_line('6');
7567 --Prepare the pl/sql tables for the all columns in pa_resource_assignments to make use of bulk update
7568 FORALL i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST
7569
7570 UPDATE PA_RESOURCE_ASSIGNMENTS
7571 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))
7572 ,last_update_date = sysdate
7573 ,last_updated_by = FND_GLOBAL.user_id
7574 ,last_update_login = FND_GLOBAL.login_id
7575 ,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))
7576 ,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))
7577 ,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))
7578 ,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))
7579 ,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))
7580 ,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))
7581 ,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 ))
7582 ,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))
7583 ,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))
7584 ,attribute_category = DECODE (l_attribute_category_tbl(i), l_g_miss_char,null,nvl(l_attribute_category_tbl(i),attribute_category))
7585 ,attribute1 = DECODE (l_attribute1_tbl(i), l_g_miss_char,null,nvl(l_attribute1_tbl(i),attribute1))
7586 ,attribute2 = DECODE (l_attribute2_tbl(i), l_g_miss_char,null,nvl(l_attribute2_tbl(i),attribute2))
7587 ,attribute3 = DECODE (l_attribute3_tbl(i), l_g_miss_char,null,nvl(l_attribute3_tbl(i),attribute3 ))
7588 ,attribute4 = DECODE (l_attribute4_tbl(i), l_g_miss_char,null,nvl(l_attribute4_tbl(i),attribute4))
7589 ,attribute5 = DECODE (l_attribute5_tbl(i), l_g_miss_char,null,nvl(l_attribute5_tbl(i),attribute5 ))
7590 ,attribute6 = DECODE (l_attribute6_tbl(i), l_g_miss_char,null,nvl(l_attribute6_tbl(i),attribute6 ))
7591 ,attribute7 = DECODE (l_attribute7_tbl(i), l_g_miss_char,null,nvl(l_attribute7_tbl(i),attribute7))
7592 ,attribute8 = DECODE (l_attribute8_tbl(i), l_g_miss_char,null,nvl(l_attribute8_tbl(i),attribute8))
7593 ,attribute9 = DECODE (l_attribute9_tbl(i), l_g_miss_char,null,nvl(l_attribute9_tbl(i),attribute9))
7594 ,attribute10 = DECODE (l_attribute10_tbl(i), l_g_miss_char,null, nvl(l_attribute10_tbl(i),attribute10))
7595 ,attribute11 = DECODE (l_attribute11_tbl(i), l_g_miss_char,null,nvl(l_attribute11_tbl(i),attribute11))
7596 ,attribute12 = DECODE (l_attribute12_tbl(i), l_g_miss_char,null,nvl(l_attribute12_tbl(i),attribute12))
7597 ,attribute13 = DECODE (l_attribute13_tbl(i), l_g_miss_char,null,nvl(l_attribute13_tbl(i),attribute13))
7598 ,attribute14 = DECODE (l_attribute14_tbl(i), l_g_miss_char,null,nvl(l_attribute14_tbl(i),attribute14)) -- for bug 6944671
7599 ,attribute15 = DECODE (l_attribute15_tbl(i), l_g_miss_char,null,nvl(l_attribute15_tbl(i),attribute15))
7600 ,attribute16 = DECODE (l_attribute16_tbl(i), l_g_miss_char,null,nvl(l_attribute16_tbl(i),attribute16))
7601 ,attribute17 = DECODE (l_attribute17_tbl(i), l_g_miss_char,null,nvl(l_attribute17_tbl(i),attribute17))
7602 ,attribute18 = DECODE (l_attribute18_tbl(i), l_g_miss_char,null,nvl(l_attribute18_tbl(i),attribute18))
7603 ,attribute19 = DECODE (l_attribute19_tbl(i), l_g_miss_char,null,nvl(l_attribute19_tbl(i),attribute19))
7604 ,attribute20 = DECODE (l_attribute20_tbl(i), l_g_miss_char,null,nvl(l_attribute20_tbl(i),attribute20))
7605 ,attribute21 = DECODE (l_attribute21_tbl(i), l_g_miss_char,null,nvl(l_attribute21_tbl(i),attribute21))
7606 ,attribute22 = DECODE (l_attribute22_tbl(i), l_g_miss_char,null,nvl(l_attribute22_tbl(i),attribute22))
7607 ,attribute23 = DECODE (l_attribute23_tbl(i), l_g_miss_char,null,nvl(l_attribute23_tbl(i),attribute23))
7608 ,attribute24 = DECODE (l_attribute24_tbl(i), l_g_miss_char,null,nvl(l_attribute24_tbl(i),attribute24))
7609 ,attribute25 = DECODE (l_attribute25_tbl(i), l_g_miss_char,null,nvl(l_attribute25_tbl(i),attribute25))
7610 ,attribute26 = DECODE (l_attribute26_tbl(i), l_g_miss_char,null,nvl(l_attribute26_tbl(i),attribute26))
7611 ,attribute27 = DECODE (l_attribute27_tbl(i), l_g_miss_char,null,nvl(l_attribute27_tbl(i),attribute27))
7612 ,attribute28 = DECODE (l_attribute28_tbl(i), l_g_miss_char,null,nvl(l_attribute28_tbl(i),attribute28))
7613 ,attribute29 = DECODE (l_attribute29_tbl(i), l_g_miss_char,null,nvl(l_attribute29_tbl(i),attribute29))
7614 ,attribute30 = DECODE (l_attribute30_tbl(i), l_g_miss_char,null,nvl(l_attribute30_tbl(i),attribute30))
7615 ,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))
7616 ,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))
7617 ,organization_id = DECODE (l_organization_id_tbl(i), l_g_miss_num,null,nvl(l_organization_id_tbl(i),organization_id))
7618 ,job_id = DECODE (l_job_id_tbl(i), l_g_miss_num,null,nvl(l_job_id_tbl(i),job_id))
7619 ,person_id = DECODE (l_person_id_tbl(i), l_g_miss_num,null,nvl(l_person_id_tbl(i),person_id))
7620 ,expenditure_type = DECODE (l_expenditure_type_tbl(i), l_g_miss_char,null,nvl(l_expenditure_type_tbl(i),expenditure_type))
7621 ,expenditure_category = DECODE (l_expenditure_category_tbl(i), l_g_miss_char,null,nvl(l_expenditure_category_tbl(i),expenditure_category))
7622 ,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))
7623 ,event_type = DECODE (l_event_type_tbl(i), l_g_miss_char,null,nvl(l_event_type_tbl(i),event_type))
7624 ,supplier_id = DECODE (l_supplier_id_tbl(i), l_g_miss_num,null,nvl(l_supplier_id_tbl(i),supplier_id))
7625 ,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))
7626 ,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))
7627 ,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))
7628 ,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))
7629 ,record_version_number = nvl(record_version_number,0)+1
7630 ,billable_percent = DECODE (l_billable_percent_tbl(i), l_g_miss_num,null,nvl(l_billable_percent_tbl(i),billable_percent))
7631 ,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 ))
7632 ,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))
7633 ,assignment_description = DECODE (l_assignment_description_tbl(i), l_g_miss_char,null,nvl(l_assignment_description_tbl(i),assignment_description))
7634 ,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))
7635 ,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))
7636 ,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))
7637 ,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))
7638 ,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 ))
7639 ,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))
7640 ,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))
7641 ,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 ))
7642 ,named_role = DECODE (l_named_role_tbl(i), l_g_miss_char,null,nvl(l_named_role_tbl(i),named_role ))
7643 ,rbs_element_id = l_rbs_element_id_tbl(i)
7644 ,txn_accum_header_id = l_txn_accum_header_id_tbl(i)
7645 ,rate_expenditure_org_id = DECODE (p_context
7646 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
7647 ,DECODE(l_rate_exp_org_id_tbl(i)
7648 ,l_g_miss_num
7649 ,null
7650 ,nvl(l_rate_exp_org_id_tbl(i),rate_expenditure_org_id))
7651 ,rate_expenditure_org_id)
7652 ,rate_expenditure_type = DECODE (p_context
7653 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
7654 ,DECODE(l_rate_exp_type_tbl(i)
7655 ,l_g_miss_char
7656 ,null
7657 ,nvl(l_rate_exp_type_tbl(i),rate_expenditure_type))
7658 ,rate_expenditure_type)
7659 ,rate_exp_func_curr_code = DECODE (p_context
7660 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
7661 ,DECODE(l_rate_func_curr_code_tbl(i)
7662 ,l_g_miss_char
7663 ,null
7664 ,nvl(l_rate_func_curr_code_tbl(i),rate_exp_func_curr_code))
7665 ,rate_exp_func_curr_code)
7666 ,rate_based_flag = DECODE (p_context /* Bug 3678814 */
7667 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
7668 ,DECODE(l_rate_based_flag_tbl(i),
7669 l_g_miss_char,'N',
7670 nvl(l_rate_based_flag_tbl(i),rate_based_flag))
7671 ,rate_based_flag)
7672 /* Bug fix:5759413 */
7673 ,resource_rate_based_flag = DECODE (p_context,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
7674 ,DECODE(nvl(l_rlm_id_change_flag_tbl(i),'N'), 'N'
7675 ,resource_rate_based_flag
7676 ,DECODE(l_rate_based_flag_tbl(i),
7677 l_g_miss_char,'N',
7678 nvl(l_rate_based_flag_tbl(i),resource_rate_based_flag)))
7679 ,resource_rate_based_flag)
7680 ,scheduled_delay = DECODE (p_context /* Bug 3678814 */
7681 ,PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
7682 ,DECODE(l_scheduled_delay(i),
7683 l_g_miss_num,null,
7684 nvl(l_scheduled_delay(i),scheduled_delay))
7685 ,scheduled_delay)
7686 WHERE resource_assignment_id= l_resource_assignment_id_tbl(i);
7687 /*-------------------------------------------------------------------------------
7688 The following block of code to call the api PA_FP_CALC_PLAN_PKG.calculate
7689 is commented as it has to be modified
7690 Calling the api PA_FP_CALC_PLAN_PKG.calculate*/
7691
7692 /* Start of coding done for Bug 5684639:
7693 If the user has selected not to distribute the amounts, then
7694 pass the l_plan_end_date_old_tbl as l_plan_end_date_new_tbl AND
7695 l_plan_start_date_old_tbl as l_plan_start_date_new_tbl so that there is
7696 no distribution of amounts as the old and the new dates are the same.
7697 */
7698 IF l_debug_mode = 'Y' THEN
7699 pa_debug.g_err_stage:='p_distrib_amts - '||p_distrib_amts;
7700 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
7701 END IF;
7702 IF (nvl(p_distrib_amts,'Y') = 'N') THEN
7703
7704 -- Start Bug 5906826
7705 /* Commented for Bug 9610380
7706 IF (l_resource_assignment_id_tbl.count > 1) THEN
7707
7708 IF l_debug_mode = 'Y' THEN
7709 pa_debug.g_err_stage:= 'p_distrib_amts is N and resource assignment > 1';
7710 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
7711 END IF;
7712
7713 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7714 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
7715 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
7716
7717 END IF;
7718 */
7719
7720 FOR i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST LOOP
7721
7722 l_ra_id_tbl := SYSTEM.PA_NUM_TBL_TYPE();
7723 l_line_start_date_tbl := SYSTEM.PA_DATE_TBL_TYPE();
7724 l_line_end_date_tbl := SYSTEM.PA_DATE_TBL_TYPE();
7725 l_txn_currency_code_tbl := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
7726 l_tot_qty_tbl := SYSTEM.PA_NUM_TBL_TYPE();
7727 l_txn_raw_cost_tbl := SYSTEM.PA_NUM_TBL_TYPE();
7728 l_txn_burdened_cost_tbl := SYSTEM.PA_NUM_TBL_TYPE();
7729 l_delete_budget_lines_tbl := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
7730
7731 -- If condition to delete budget lines, when dates are trucated and spread curve is not changed
7732 -- and spread curve is other than fixed date when p_distrib_amts flag is checked.
7733 IF ((l_plan_start_date_old_tbl(i) < l_plan_start_date_new_tbl(i)) OR
7734 (l_plan_end_date_old_tbl(i) > l_plan_end_date_new_tbl(i))) AND
7735 (l_spread_curve_id_old_tbl(i) = l_spread_curve_id_new_tbl(i)) AND
7736 (l_spread_curve_id_old_tbl(i) <> 6)THEN
7737
7738 SELECT pbl.resource_assignment_id,
7739 pbl.start_date,
7740 pbl.end_date,
7741 pbl.txn_currency_code,
7742 pbl.quantity,
7743 pbl.txn_raw_cost,
7744 pbl.txn_burdened_cost,
7745 'Y'
7746 BULK COLLECT INTO
7747 l_ra_id_tbl,
7748 l_line_start_date_tbl,
7749 l_line_end_date_tbl,
7750 l_txn_currency_code_tbl,
7751 l_tot_qty_tbl,
7752 l_txn_raw_cost_tbl,
7753 l_txn_burdened_cost_tbl,
7754 l_delete_budget_lines_tbl
7755 FROM pa_budget_lines pbl,
7756 pa_budget_versions pbv
7757 WHERE pbl.budget_version_id=l_budget_version_id
7758 AND pbl.resource_assignment_id=l_resource_assignment_id_tbl(i)
7759 AND pbl.txn_currency_code=l_currency_code_tbl(i)
7760 AND pbv.budget_version_id=pbl.budget_version_id
7761 AND pbl.start_date>=nvl(pbv.etc_start_date,pbl.start_date)
7762 AND (
7763 (pbl.start_date>l_plan_end_date_new_tbl(i))
7764 OR
7765 (pbl.end_date<l_plan_start_date_new_tbl(i))
7766 );
7767
7768 -- This is set to 'Y' so that calculate api is called only once.
7769 l_cal_api_called_flg := 'Y';
7770
7771 -- Used to delete the budget lines which are falling out of planning start/end date
7772 -- range when p_distrib_amts flag is checked.
7773 PA_FP_CALC_PLAN_PKG.calculate(
7774 p_project_id => l_project_id,
7775 p_budget_version_id => l_budget_version_id,
7776 p_refresh_rates_flag => 'N',
7777 p_refresh_conv_rates_flag => 'N',
7778 p_spread_required_flag => 'Y',
7779 p_conv_rates_required_flag => 'Y',
7780 p_rollup_required_flag => 'Y',
7781 p_mass_adjust_flag => 'N',
7782 p_quantity_adj_pct => NULL,
7783 p_cost_rate_adj_pct => NULL,
7784 p_burdened_rate_adj_pct => NULL,
7785 p_bill_rate_adj_pct => NULL,
7786 p_source_context => 'BUDGET_LINE',
7787 p_resource_assignment_tab => l_ra_id_tbl,
7788 p_delete_budget_lines_tab => l_delete_budget_lines_tbl,
7789 p_txn_currency_code_tab => l_txn_currency_code_tbl,
7790 p_total_qty_tab => l_tot_qty_tbl,
7791 p_total_raw_cost_tab => l_txn_raw_cost_tbl,
7792 p_total_burdened_cost_tab => l_txn_burdened_cost_tbl,
7793 p_line_start_date_tab => l_line_start_date_tbl,
7794 p_line_end_date_tab => l_line_end_date_tbl,
7795 x_return_status => l_return_status,
7796 x_msg_count => l_msg_count,
7797 x_msg_data => l_msg_data);
7798
7799 END IF;
7800 END LOOP;
7801 -- End Bug 5906826
7802
7803 l_plan_start_date_old_tbl := l_plan_start_date_new_tbl ;
7804 l_plan_end_date_old_tbl := l_plan_end_date_new_tbl ;
7805 END IF;
7806
7807 /* End of coding done for Bug 5684639.*/
7808
7809 IF l_debug_mode = 'Y' THEN
7810 pa_debug.g_err_stage:='Calling API PA_FP_CALC_PLAN_PKG.calculate';
7811 print_msg(pa_debug.g_err_stage,l_module_name);
7812 pa_debug.g_err_stage:='Parameters to PA_FP_CALC_PLAN_PKG.calculate';
7813 print_msg(pa_debug.g_err_stage,l_module_name);
7814
7815 IF l_resource_assignment_id_tbl.COUNT>0 THEN
7816
7817 FOR i in l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST LOOP
7818
7819 pa_debug.g_err_stage:='l_resource_assignment_id_tbl('||i||') is '||l_resource_assignment_id_tbl(i);
7820 print_msg(pa_debug.g_err_stage,l_module_name);
7821 --dbms_output.put_line( pa_debug.g_err_stage);
7822
7823 pa_debug.g_err_stage:='l_currency_code_tbl('||i||') is '||l_currency_code_tbl(i);
7824 print_msg(pa_debug.g_err_stage,l_module_name);
7825 --dbms_output.put_line( pa_debug.g_err_stage);
7826
7827 IF p_currency_code_tbl.EXISTS(i) THEN
7828 pa_debug.g_err_stage:='p_currency_code_tbl('||i||') is '||p_currency_code_tbl(i);
7829 print_msg(pa_debug.g_err_stage,l_module_name);
7830 ELSE
7831 pa_debug.g_err_stage:='p_currency_code_tbl('||i||') does not exist ';
7832 print_msg(pa_debug.g_err_stage,l_module_name);
7833 END IF;
7834 --dbms_output.put_line( pa_debug.g_err_stage);
7835
7836 pa_debug.g_err_stage:='l_override_currency_code_tbl('||i||') is '||l_override_currency_code_tbl(i);
7837 print_msg(pa_debug.g_err_stage,l_module_name);
7838 --dbms_output.put_line( pa_debug.g_err_stage);
7839
7840 IF p_txn_currency_override_tbl.EXISTS(i) THEN
7841 pa_debug.g_err_stage:='p_txn_currency_override_tbl('||i||') is '||p_txn_currency_override_tbl(i);
7842 print_msg(pa_debug.g_err_stage,l_module_name);
7843 ELSE
7844 pa_debug.g_err_stage:='p_txn_currency_override_tbl('||i||') does not exist ';
7845 print_msg(pa_debug.g_err_stage,l_module_name);
7846 END IF;
7847 --dbms_output.put_line( pa_debug.g_err_stage);
7848
7849 pa_debug.g_err_stage:='l_total_quantity_tbl('||i||') is '||l_total_quantity_tbl(i);
7850 print_msg(pa_debug.g_err_stage,l_module_name);
7851 --dbms_output.put_line( pa_debug.g_err_stage);
7852
7853 IF p_quantity_tbl.EXISTS(i) THEN
7854 pa_debug.g_err_stage:='p_quantity_tbl('||i||') is '||p_quantity_tbl(i);
7855 print_msg(pa_debug.g_err_stage,l_module_name);
7856 ELSE
7857 pa_debug.g_err_stage:='p_quantity_tbl('||i||') does not exist ';
7858 print_msg(pa_debug.g_err_stage,l_module_name);
7859 END IF;
7860 --dbms_output.put_line( pa_debug.g_err_stage);
7861
7862 pa_debug.g_err_stage:='l_total_raw_cost_tbl('||i||') is '||l_total_raw_cost_tbl(i);
7863 print_msg(pa_debug.g_err_stage,l_module_name);
7864 --dbms_output.put_line( pa_debug.g_err_stage);
7865
7866 IF p_raw_cost_tbl.EXISTS(i) THEN
7867 pa_debug.g_err_stage:='p_raw_cost_tbl('||i||') is '||p_raw_cost_tbl(i);
7868 print_msg(pa_debug.g_err_stage,l_module_name);
7869 ELSE
7870 pa_debug.g_err_stage:='p_raw_cost_tbl('||i||') does not exist ';
7871 print_msg(pa_debug.g_err_stage,l_module_name);
7872 END IF;
7873 --dbms_output.put_line( pa_debug.g_err_stage);
7874
7875 pa_debug.g_err_stage:='l_burdened_cost_tbl('||i||') is '||l_burdened_cost_tbl(i);
7876 print_msg(pa_debug.g_err_stage,l_module_name);
7877 --dbms_output.put_line( pa_debug.g_err_stage);
7878
7879 IF p_burdened_cost_tbl.EXISTS(i) THEN
7880 pa_debug.g_err_stage:='p_burdened_cost_tbl('||i||') is '||p_burdened_cost_tbl(i);
7881 print_msg(pa_debug.g_err_stage,l_module_name);
7882 ELSE
7883 pa_debug.g_err_stage:='p_burdened_cost_tbl('||i||') does not exist ';
7884 print_msg(pa_debug.g_err_stage,l_module_name);
7885 END IF;
7886 --dbms_output.put_line( pa_debug.g_err_stage);
7887
7888 pa_debug.g_err_stage:='l_revenue_tbl('||i||') is '||l_revenue_tbl(i);
7889 print_msg(pa_debug.g_err_stage,l_module_name);
7890 --dbms_output.put_line( pa_debug.g_err_stage);
7891
7892 IF p_revenue_tbl.EXISTS(i) THEN
7893 pa_debug.g_err_stage:='p_revenue_tbl('||i||') is '||p_revenue_tbl(i);
7894 print_msg(pa_debug.g_err_stage,l_module_name);
7895 ELSE
7896 pa_debug.g_err_stage:='p_revenue_tbl('||i||') does not exist ';
7897 print_msg(pa_debug.g_err_stage,l_module_name);
7898 END IF;
7899 --dbms_output.put_line( pa_debug.g_err_stage);
7900
7901 pa_debug.g_err_stage:='l_raw_cost_rate_tbl('||i||') is '||l_raw_cost_rate_tbl(i);
7902 print_msg(pa_debug.g_err_stage,l_module_name);
7903 --dbms_output.put_line( pa_debug.g_err_stage);
7904
7905 IF p_cost_rate_tbl.EXISTS(i) THEN
7906 pa_debug.g_err_stage:='p_cost_rate_tbl('||i||') is '||p_cost_rate_tbl(i);
7907 print_msg(pa_debug.g_err_stage,l_module_name);
7908 ELSE
7909 pa_debug.g_err_stage:='p_cost_rate_tbl('||i||') does not exist ';
7910 print_msg(pa_debug.g_err_stage,l_module_name);
7911 END IF;
7912 --dbms_output.put_line( pa_debug.g_err_stage);
7913
7914 pa_debug.g_err_stage:='l_cost_rate_override_tbl('||i||') is '||l_cost_rate_override_tbl(i);
7915 print_msg(pa_debug.g_err_stage,l_module_name);
7916 --dbms_output.put_line( pa_debug.g_err_stage);
7917
7918 IF p_cost_rate_override_tbl.EXISTS(i) THEN
7919 pa_debug.g_err_stage:='p_cost_rate_override_tbl('||i||') is '||p_cost_rate_override_tbl(i);
7920 print_msg(pa_debug.g_err_stage,l_module_name);
7921 ELSE
7922 pa_debug.g_err_stage:='p_cost_rate_override_tbl('||i||') does not exist ';
7923 print_msg(pa_debug.g_err_stage,l_module_name);
7924 END IF;
7925 --dbms_output.put_line( pa_debug.g_err_stage);
7926
7927 pa_debug.g_err_stage:='l_b_multiplier_tbl('||i||') is '||l_b_multiplier_tbl(i);
7928 print_msg(pa_debug.g_err_stage,l_module_name);
7929 --dbms_output.put_line( pa_debug.g_err_stage);
7930
7931 IF p_burdened_rate_tbl.EXISTS(i) THEN
7932 pa_debug.g_err_stage:='p_burdened_rate_tbl('||i||') is '||p_burdened_rate_tbl(i);
7933 print_msg(pa_debug.g_err_stage,l_module_name);
7934 ELSE
7935 pa_debug.g_err_stage:='p_burdened_rate_tbl('||i||') does not exist ';
7936 print_msg(pa_debug.g_err_stage,l_module_name);
7937 END IF;
7938 --dbms_output.put_line( pa_debug.g_err_stage);
7939
7940 pa_debug.g_err_stage:='l_burdened_rate_override_tbl('||i||') is '||l_burdened_rate_override_tbl(i);
7941 print_msg(pa_debug.g_err_stage,l_module_name);
7942 --dbms_output.put_line( pa_debug.g_err_stage);
7943
7944 IF p_burdened_rate_override_tbl.EXISTS(i) THEN
7945 pa_debug.g_err_stage:='p_burdened_rate_override_tbl('||i||') is '||p_burdened_rate_override_tbl(i);
7946 print_msg(pa_debug.g_err_stage,l_module_name);
7947 ELSE
7948 pa_debug.g_err_stage:='p_burdened_rate_override_tbl('||i||') does not exist ';
7949 print_msg(pa_debug.g_err_stage,l_module_name);
7950 END IF;
7951 --dbms_output.put_line( pa_debug.g_err_stage);
7952
7953 pa_debug.g_err_stage:='l_bill_rate_tbl('||i||') is '||l_bill_rate_tbl(i);
7954 print_msg(pa_debug.g_err_stage,l_module_name);
7955 --dbms_output.put_line( pa_debug.g_err_stage);
7956
7957 IF p_bill_rate_tbl.EXISTS(i) THEN
7958 pa_debug.g_err_stage:='p_bill_rate_tbl('||i||') is '||p_bill_rate_tbl(i);
7959 print_msg(pa_debug.g_err_stage,l_module_name);
7960 ELSE
7961 pa_debug.g_err_stage:='p_bill_rate_tbl('||i||') does not exist ';
7962 print_msg(pa_debug.g_err_stage,l_module_name);
7963 END IF;
7964 --dbms_output.put_line( pa_debug.g_err_stage);
7965
7966 pa_debug.g_err_stage:='l_bill_rate_override_tbl('||i||') is '||l_bill_rate_override_tbl(i);
7967 print_msg(pa_debug.g_err_stage,l_module_name);
7968 --dbms_output.put_line( pa_debug.g_err_stage);
7969
7970 IF p_bill_rate_override_tbl.EXISTS(i) THEN
7971 pa_debug.g_err_stage:='p_bill_rate_override_tbl('||i||') is '||p_bill_rate_override_tbl(i);
7972 print_msg(pa_debug.g_err_stage,l_module_name);
7973 ELSE
7974 pa_debug.g_err_stage:='p_bill_rate_override_tbl('||i||') does not exist ';
7975 print_msg(pa_debug.g_err_stage,l_module_name);
7976 END IF;
7977 --dbms_output.put_line( pa_debug.g_err_stage);
7978
7979 pa_debug.g_err_stage:='l_rlm_id_change_flag_tbl('||i||') is '||l_rlm_id_change_flag_tbl(i);
7980 print_msg(pa_debug.g_err_stage,l_module_name);
7981 --dbms_output.put_line( pa_debug.g_err_stage);
7982 pa_debug.g_err_stage:='l_mfc_cost_type_id_old_tbl('||i||') is '||l_mfc_cost_type_id_old_tbl(i);
7983 print_msg(pa_debug.g_err_stage,l_module_name);
7984 --dbms_output.put_line( pa_debug.g_err_stage);
7985 pa_debug.g_err_stage:='l_mfc_cost_type_id_new_tbl('||i||') is '||l_mfc_cost_type_id_new_tbl(i);
7986 print_msg(pa_debug.g_err_stage,l_module_name);
7987 --dbms_output.put_line( pa_debug.g_err_stage);
7988 pa_debug.g_err_stage:='l_spread_curve_id_old_tbl('||i||') is '||l_spread_curve_id_old_tbl(i);
7989 print_msg(pa_debug.g_err_stage,l_module_name);
7990 --dbms_output.put_line( pa_debug.g_err_stage);
7991 pa_debug.g_err_stage:='l_spread_curve_id_new_tbl('||i||') is '||l_spread_curve_id_new_tbl(i);
7992 print_msg(pa_debug.g_err_stage,l_module_name);
7993 --dbms_output.put_line( pa_debug.g_err_stage);
7994 pa_debug.g_err_stage:='l_sp_fixed_date_old_tbl('||i||') is '||l_sp_fixed_date_old_tbl(i);
7995 print_msg(pa_debug.g_err_stage,l_module_name);
7996 --dbms_output.put_line( pa_debug.g_err_stage);
7997 if l_sp_fixed_date_new_tbl(i) = fnd_api.g_miss_date then
7998 pa_debug.g_err_stage:='l_sp_fixed_date_new_tbl('||i||') is g miss date';
7999 else
8000 pa_debug.g_err_stage:='l_sp_fixed_date_new_tbl('||i||') is '||l_sp_fixed_date_new_tbl(i);
8001 end if;
8002 print_msg(pa_debug.g_err_stage,l_module_name);
8003 --dbms_output.put_line( pa_debug.g_err_stage);
8004 pa_debug.g_err_stage:='l_plan_start_date_old_tbl('||i||') is '||l_plan_start_date_old_tbl(i);
8005 print_msg(pa_debug.g_err_stage,l_module_name);
8006 --dbms_output.put_line( pa_debug.g_err_stage);
8007 if l_plan_start_date_new_tbl(i) = fnd_api.g_miss_date then
8008 pa_debug.g_err_stage:='l_plan_start_date_new_tbl('||i||') is g miss date';
8009 else
8010 pa_debug.g_err_stage:='l_plan_start_date_new_tbl('||i||') is '||l_plan_start_date_new_tbl(i);
8011 end if;
8012 print_msg(pa_debug.g_err_stage,l_module_name);
8013 --dbms_output.put_line( pa_debug.g_err_stage);
8014 pa_debug.g_err_stage:='l_plan_end_date_old_tbl('||i||') is '||l_plan_end_date_old_tbl(i);
8015 print_msg(pa_debug.g_err_stage,l_module_name);
8016 --dbms_output.put_line( pa_debug.g_err_stage);
8017 if l_plan_end_date_new_tbl(i) = fnd_api.g_miss_date then
8018 pa_debug.g_err_stage:='l_plan_end_date_new_tbl('||i||') is g miss date';
8019 else
8020 pa_debug.g_err_stage:='l_plan_end_date_new_tbl('||i||') is '||l_plan_end_date_new_tbl(i);
8021 end if;
8022 print_msg(pa_debug.g_err_stage,l_module_name);
8023 --dbms_output.put_line( pa_debug.g_err_stage);
8024
8025 END LOOP;
8026 END IF;
8027 END IF;
8028
8029 --dbms_output.put_line('l_resource_assignment_id_tbl(1) is '||l_resource_assignment_id_tbl(1));
8030 --dbms_output.put_line('l_currency_code_tbl(1) is '||l_currency_code_tbl(1));
8031 --dbms_output.put_line('l_override_currency_code_tbl(1) is '||l_override_currency_code_tbl(1));
8032 --dbms_output.put_line('l_total_quantity_tbl(1) is '||l_total_quantity_tbl(1));
8033 --dbms_output.put_line('l_total_raw_cost_tbl(1) is '||l_total_raw_cost_tbl(1));
8034 --dbms_output.put_line('l_burdened_cost_tbl(1) is '||l_burdened_cost_tbl(1));
8035 --dbms_output.put_line('l_revenue_tbl(1) is '||l_revenue_tbl(1));
8036 --dbms_output.put_line('l_raw_cost_rate_tbl(1) is '||l_raw_cost_rate_tbl(1));
8037 --dbms_output.put_line('l_cost_rate_override_tbl(1) is '||l_cost_rate_override_tbl(1));
8038 --dbms_output.put_line('l_b_multiplier_tbl cnt is '||l_b_multiplier_tbl.count);
8039 --dbms_output.put_line('l_b_multiplier_tbl(1) is '||l_b_multiplier_tbl(1));
8040 --dbms_output.put_line('l_burdened_rate_override_tbl cnt is '||l_burdened_rate_override_tbl.count);
8041 --dbms_output.put_line('l_burdened_rate_override_tbl(1) is '||l_burdened_rate_override_tbl(1));
8042 --dbms_output.put_line('l_bill_rate_tbl(1) is '||l_bill_rate_tbl(1));
8043 --dbms_output.put_line('l_bill_rate_override_tbl(1) is '||l_bill_rate_override_tbl(1));
8044
8045 --dbms_output.put_line('quantity passed to calc is'||l_total_quantity_tbl(1));
8046 --dbms_output.put_line('Calling calc api');
8047
8048 -- If condition added for Bug 5906826
8049 IF l_cal_api_called_flg = 'N' THEN
8050
8051 PA_FP_CALC_PLAN_PKG.calculate(
8052 p_project_id => l_project_id
8053 ,p_budget_version_id => l_budget_version_id
8054 --,p_refresh_rates_flag => 'N' --need to pass any variables that are passed from calling API
8055 --,p_refresh_conv_rates_flag => 'N' --need to pass any variables that are passed from calling API
8056 --,p_spread_required_flag => 'N'
8057 --,p_conv_rates_required_flag => 'N'
8058 ,p_source_context => PA_FP_CONSTANTS_PKG.G_CALC_API_RESOURCE_CONTEXT
8059 ,p_resource_assignment_tab => l_resource_assignment_id_tbl
8060 ,p_txn_currency_code_tab => l_currency_code_tbl
8061 ,p_txn_currency_override_tab => l_override_currency_code_tbl
8062 ,p_total_qty_tab => l_total_quantity_tbl
8063 ,p_total_raw_cost_tab => l_total_raw_cost_tbl
8064 ,p_total_burdened_cost_tab => l_burdened_cost_tbl
8065 ,p_total_revenue_tab => l_revenue_tbl
8066 ,p_raw_cost_rate_tab => l_raw_cost_rate_tbl
8067 ,p_rw_cost_rate_override_tab => l_cost_rate_override_tbl
8068 ,p_b_cost_rate_tab => l_b_multiplier_tbl
8069 ,p_b_cost_rate_override_tab => l_burdened_rate_override_tbl
8070 ,p_bill_rate_tab => l_bill_rate_tbl
8071 ,p_bill_rate_override_tab => l_bill_rate_override_tbl
8072 ,p_line_start_date_tab => SYSTEM.PA_DATE_TBL_TYPE()
8073 ,p_line_end_date_tab => SYSTEM.PA_DATE_TBL_TYPE()
8074 ,p_apply_progress_flag => p_apply_progress_flag /* Passed by apply_progress api (sakthi's team) */
8075 --Added for Bug 4152749
8076 ,p_mfc_cost_type_id_old_tab => l_mfc_cost_type_id_old_tbl
8077 ,p_mfc_cost_type_id_new_tab => l_mfc_cost_type_id_new_tbl
8078 ,p_spread_curve_id_old_tab => l_spread_curve_id_old_tbl
8079 ,p_spread_curve_id_new_tab => l_spread_curve_id_new_tbl
8080 ,p_sp_fixed_date_old_tab => l_sp_fixed_date_old_tbl
8081 ,p_sp_fixed_date_new_tab => l_sp_fixed_date_new_tbl
8082 ,p_plan_start_date_old_tab => l_plan_start_date_old_tbl
8083 ,p_plan_start_date_new_tab => l_plan_start_date_new_tbl
8084 ,p_plan_end_date_old_tab => l_plan_end_date_old_tbl
8085 ,p_plan_end_date_new_tab => l_plan_end_date_new_tbl
8086 ,p_rlm_id_change_flag_tab => l_rlm_id_change_flag_tbl
8087 ,p_rollup_required_flag => l_pji_rollup_required --Bug 4200168
8088 --End of parameters for Bug 4152749
8089 ,x_return_status => x_return_status
8090 ,x_msg_count => x_msg_count
8091 ,x_msg_data => x_msg_data);
8092
8093 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8094
8095 IF l_debug_mode = 'Y' THEN
8096 pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate returned error';
8097 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8098 END IF;
8099 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8100 END IF;
8101
8102 END IF; -- If condition added for Bug 5906826
8103
8104 -- IPM changes - rollup amounts in new entity
8105
8106 -- Call the UTIL API to get the financial plan info l_fp_cols_rec
8107 --Added For CBS 12.2 Enhancement
8108 --If context is workplan and resource class flag is N, then we need to set
8109 --rate_based_flag as N and uom as Dollor
8110 IF (((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN)
8111 OR (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK))
8112 AND p_struct_elem_version_id IS NOT NULL)
8113 THEN
8114 l_res_class_flag := PA_PROJECT_STRUCTURE_UTILS.get_resource_class_flag(l_project_id);
8115 IF l_res_class_flag = 'N'
8116 THEN
8117 FORALL i IN l_resource_assignment_id_tbl.FIRST .. l_resource_assignment_id_tbl.LAST
8118 UPDATE PA_RESOURCE_ASSIGNMENTS
8119 SET rate_based_flag = 'N',
8120 unit_of_measure = 'DOLLARS'
8121 WHERE resource_assignment_id= l_resource_assignment_id_tbl(i);
8122 END IF;
8123 END IF;
8124 --CBS Changes End here
8125 pa_fp_gen_amount_utils.get_plan_version_dtls
8126 (p_project_id => l_project_id,
8127 p_budget_version_id => l_budget_version_id,
8128 x_fp_cols_rec => l_fp_cols_rec,
8129 x_return_status => x_return_status,
8130 x_msg_count => x_msg_count,
8131 x_msg_data => x_msg_data);
8132
8133 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8134
8135 IF l_debug_mode = 'Y' THEN
8136 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
8137 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8138 END IF;
8139 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8140 END IF;
8141
8142
8143 --Enc changes
8144 l_direct_expenditure_type_tbl.extend(l_resource_assignment_id_tbl.count);
8145
8146 /*Update exp type for the transaction in pa_resource_asgn_curr */
8147
8148 IF l_resource_assignment_id_tbl.COUNT > 0 THEN
8149 FORALL i IN 1 .. l_resource_assignment_id_tbl.COUNT
8150 update pa_resource_asgn_curr
8151 set expenditure_type=l_direct_expenditure_type_tbl(i)
8152 where resource_assignment_id= l_resource_assignment_id_tbl(i)
8153 and txn_currency_code=l_currency_code_tbl(i);
8154 END IF;
8155 /*end Enc */
8156 -- IPM changes - populate tmp table to use for update later
8157 /*
8158 IF l_resource_assignment_id_tbl.COUNT > 0 THEN
8159 FORALL i IN l_resource_assignment_id_tbl.first ..
8160 l_resource_assignment_id_tbl.last
8161 INSERT INTO pa_resource_asgn_curr_tmp
8162 (RA_TXN_ID
8163 ,RESOURCE_ASSIGNMENT_ID
8164 ,TXN_CURRENCY_CODE
8165 ,DELETE_FLAG
8166 )
8167 SELECT pa_resource_asgn_curr_s.nextval
8168 ,l_resource_assignment_id_tbl(i)
8169 ,l_currency_code_tbl(i)
8170 ,NULL
8171 FROM DUAL;
8172 END IF;
8173
8174 pa_res_asg_currency_pub.maintain_data(
8175 p_fp_cols_rec => l_fp_cols_rec,
8176 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
8177 p_delete_flag => 'N',
8178 p_copy_flag => 'N',
8179 p_src_version_id => NULL,
8180 p_copy_mode => NULL,
8181 p_rollup_flag => 'Y',
8182 p_version_level_flag => 'N',
8183 p_called_mode => 'SELF_SERVICE',
8184 x_return_status => x_return_status,
8185 x_msg_count => x_msg_count,
8186 x_msg_data => x_msg_data
8187 );
8188
8189 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8190
8191 IF l_debug_mode = 'Y' THEN
8192 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
8193 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8194 END IF;
8195 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8196 END IF;
8197 */
8198
8199 -- Added for bug 4492493
8200
8201 IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
8202 AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(l_project_id) = 'Y') OR
8203 (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
8204 AND pa_task_assignment_utils.g_require_progress_rollup = 'Y') THEN
8205
8206 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
8207 ( p_calling_context => 'ASGMT_PLAN_CHANGE'
8208 ,p_project_id => l_project_id
8209 ,p_structure_version_id => p_struct_elem_version_id
8210 ,p_pub_struc_ver_id => p_struct_elem_version_id
8211 ,x_return_status => x_return_status
8212 ,x_msg_count => x_msg_count
8213 ,x_msg_data => x_msg_data);
8214
8215 pa_task_assignment_utils.g_require_progress_rollup := 'N';
8216 END IF;
8217
8218
8219 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8220 IF l_debug_mode = 'Y' THEN
8221 pa_debug.g_err_stage:='Called API PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp';
8222 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.update_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
8223 END IF;
8224
8225 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8226 END IF;
8227 --End bug 4492493
8228
8229 IF l_debug_mode = 'Y' THEN
8230 pa_debug.reset_curr_function;
8231 END IF;
8232
8233 EXCEPTION
8234 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
8235 IF l_debug_mode = 'Y' THEN
8236 pa_debug.g_err_stage:='In invalid args exception';
8237 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8238 END IF;
8239
8240 l_msg_count := FND_MSG_PUB.count_msg;
8241 IF l_msg_count = 1 THEN
8242
8243 IF l_debug_mode = 'Y' THEN
8244 pa_debug.g_err_stage:='In invalid args exception 1';
8245 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8246 END IF;
8247
8248 PA_INTERFACE_UTILS_PUB.get_messages
8249 ( p_encoded => FND_API.G_TRUE
8250 ,p_msg_index => 1
8251 ,p_msg_count => l_msg_count
8252 ,p_msg_data => l_msg_data
8253 ,p_data => l_data
8254 ,p_msg_index_out => l_msg_index_out);
8255 x_msg_data := l_data;
8256 x_msg_count := l_msg_count;
8257 ELSE
8258 IF l_debug_mode = 'Y' THEN
8259 pa_debug.g_err_stage:='In invalid args exception 2';
8260 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8261 END IF;
8262
8263 x_msg_count := l_msg_count;
8264
8265 END IF;
8266 ROLLBACK TO Update_Planning_Transactions;
8267 x_return_status := FND_API.G_RET_STS_ERROR;
8268 IF l_debug_mode = 'Y' THEN
8269 pa_debug.g_err_stage:='In invalid args exception 3';
8270 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8271 pa_debug.reset_curr_function;
8272 END IF;
8273 IF l_debug_mode = 'Y' THEN
8274 pa_debug.g_err_stage:='In invalid args exception 4 ';
8275 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8276 END IF;
8277
8278
8279 WHEN OTHERS THEN
8280 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8281 x_msg_count := 1;
8282 x_msg_data := SQLERRM;
8283 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
8284 ,p_procedure_name => 'Update_Planning_Transactions');
8285
8286 IF l_debug_mode = 'Y' THEN
8287 pa_debug.g_err_stage:='Unexpected Error' || SQLERRM;
8288 pa_debug.write(l_module_name,pa_debug.g_err_stage, l_debug_level3);
8289 pa_debug.reset_curr_function;
8290 END IF;
8291 ROLLBACK TO Update_Planning_Transactions;
8292
8293 RAISE;
8294 END Update_Planning_Transactions;
8295
8296
8297 /*This procedure should be called to copy planning transactions
8298 valid values for p_context are 'WORKPLAN' and 'TASK_ASSIGNMENT'
8299 valid values for p_copy_amt_qty are 'Y' and 'N'
8300
8301 The parameters
8302 p_copy_people_flag
8303 p_copy_equip_flag
8304 p_copy_mat_item_flag
8305 p_copy_fin_elem_flag
8306 will be used only when the p_context is TASK_ASSIGNMENT.
8307 Irrespective of the context in which the API is called,
8308 the p_src_targ_version_id_tbl should never be empty.
8309 The other parameters can be derived based on the values
8310 in p_src_targ_version_id_tbl table.
8311
8312 Bug 3615617 Copy External Tasks development changes
8313 validate_copy_assignment api returns target rlm id for target
8314 resource assignment id as part of the output record table. This
8315 should be passed to create_res_task_maps api as input.
8316 */
8317 PROCEDURE copy_planning_transactions
8318 (
8319 p_context IN VARCHAR2
8320 ,p_copy_external_flag IN VARCHAR2
8321 ,p_src_project_id IN pa_projects_all.project_id%TYPE
8322 ,p_target_project_id IN pa_projects_all.project_id%TYPE
8323 ,p_src_budget_version_id IN pa_budget_versions.budget_version_id%TYPE DEFAULT NULL
8324 ,p_targ_budget_version_id IN pa_budget_versions.budget_version_id%TYPE DEFAULT NULL
8325 ,p_src_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
8326 ,p_targ_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
8327 ,p_copy_people_flag IN VARCHAR2 := NULL
8328 ,p_copy_equip_flag IN VARCHAR2 := NULL
8329 ,p_copy_mat_item_flag IN VARCHAR2 := NULL
8330 ,p_copy_fin_elem_flag IN VARCHAR2 := NULL
8331 -- Added this field p_pji_rollup_required for the 4200168
8332 ,p_pji_rollup_required IN VARCHAR2 DEFAULT 'Y'
8333 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8334 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8335 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8336
8337 ) IS
8338 --Start of variables used for debugging
8339 l_return_status VARCHAR2(1);
8340 l_msg_count NUMBER := 0;
8341 l_msg_data VARCHAR2(2000);
8342 l_data VARCHAR2(2000);
8343 l_msg_index_out NUMBER;
8344 l_debug_mode VARCHAR2(30);
8345 l_debug_level3 CONSTANT NUMBER :=3;
8346 l_debug_level5 CONSTANT NUMBER :=5;
8347 --End of variables used for debugging
8348 l_adj_percent NUMBER;
8349 i NUMBER;
8350 j NUMBER;
8351 l_row_count NUMBER;
8352 l_src_budget_version_id pa_budget_versions.budget_version_id%TYPE;
8353 l_targ_budget_version_id pa_budget_versions.budget_version_id%TYPE;
8354 l_ra_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8355 l_project_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8356 l_temp_ra_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8357 l_calc_ra_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8358 l_temp_proj_assmt_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8359 l_temp_planning_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
8360 l_temp_planning_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE() ;
8361 l_quantity_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8362 l_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
8363 l_module_name VARCHAR2(100):='pa.fp_planning_txn_pub.copy_planning_transactions';
8364 l_resource_rec_tbl PA_TASK_ASSIGNMENT_UTILS.l_resource_rec_tbl_type;
8365 l_planning_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
8366 l_planning_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
8367 l_schedule_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
8368 l_schedule_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE:= SYSTEM.PA_DATE_TBL_TYPE();
8369 l_calculate_flag VARCHAR2(1);
8370 l_projfunc_currency_code pa_projects_all.project_currency_code%TYPE;
8371 l_proj_curr_code pa_projects_all.projfunc_currency_code%TYPE;
8372 l_spread_amt_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE:= SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8373
8374 -- Declared for Bug 3615617
8375 l_resource_list_member_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8376
8377 l_tot_rc_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
8378 l_pji_rollup_required VARCHAR2(1);
8379
8380 --Code addition for bug#4200168 starts here.
8381 TYPE l_txn_curr_code_table IS TABLE OF PA_BUDGET_LINES.TXN_CURRENCY_CODE%type
8382 INDEX BY BINARY_INTEGER;
8383
8384 l_txn_curr_code_tbl l_txn_curr_code_table;
8385
8386 l_proj_fp_options_id pa_proj_fp_options.proj_fp_options_id%type;
8387 l_project_id pa_proj_fp_options.project_id%type;
8388 l_fin_plan_type_id pa_proj_fp_options.fin_plan_type_id%type;
8389 l_pc pa_projects_all.project_currency_code%type;
8390 l_pfc pa_projects_all.projfunc_currency_code%type;
8391 --Code addition for bug#4200168 ends here.
8392
8393 l_fp_cols_rec pa_fp_gen_amount_utils.fp_cols; -- IPM
8394 l_resource_class_code VARCHAR2(30);
8395 l_exp_type VARCHAR2(30);
8396 l_inv_item_id NUMBER;
8397 l_res_rate_based_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE:=SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
8398
8399 CURSOR c_calc_api_param_csr
8400 IS
8401 SELECT pfrmt.source_res_assignment_id
8402 ,pfrmt.target_res_assignment_id
8403 FROM pa_fp_ra_map_tmp pfrmt;
8404
8405 c_calc_api_param_rec c_calc_api_param_csr%ROWTYPE;
8406
8407 l_rbs_diff_flag VARCHAR2(1);
8408 --Bug 4097749
8409 l_named_role_tbl SYSTEM.pa_varchar2_80_tbl_type:=SYSTEM.pa_varchar2_80_tbl_type();
8410
8411 BEGIN
8412 IF l_debug_mode = 'Y' THEN
8413 pa_debug.g_err_stage:='In copy planning txn';
8414 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8415 END IF;
8416 --dbms_output.put_line('in copy plan txn1');
8417 x_msg_count := 0;
8418 x_return_status := FND_API.G_RET_STS_SUCCESS;
8419
8420 SAVEPOINT copy_plan_txn;
8421
8422 --Added this if for the bug 4200168
8423 IF p_pji_rollup_required = 'Y' THEN
8424 l_pji_rollup_required := 'Y';
8425 ELSE
8426 l_pji_rollup_required := 'N';
8427 END IF;
8428
8429 pa_task_assignment_utils.g_require_progress_rollup := 'N';
8430
8431
8432 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
8433 l_debug_mode := NVL(l_debug_mode, 'Y');
8434
8435 -- Set curr function
8436 IF l_debug_mode = 'Y' THEN
8437 pa_debug.set_curr_function(
8438 p_function =>'plan_txn_pub.copy_plan_txn'
8439 ,p_debug_mode => l_debug_mode );
8440
8441 pa_debug.g_err_stage:='Validating input parameters';
8442 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8443 END IF;
8444
8445 IF p_src_version_id_tbl.count <> p_targ_version_id_tbl.count THEN
8446
8447 IF l_debug_mode = 'Y' THEN
8448 pa_debug.g_err_stage:='No of elements in p_src_version_id_tbl is not same as p_targ_version_id_tbl';
8449 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8450 END IF;
8451
8452 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8453 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
8454
8455 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8456
8457 END IF;
8458
8459 --If the tables are empty then return
8460 IF p_src_version_id_tbl.count=0 THEN
8461
8462 IF l_debug_mode = 'Y' THEN
8463
8464 pa_debug.g_err_stage:='The input tables are empty' ;
8465 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8466 pa_debug.reset_curr_function;
8467 END IF;
8468 RETURN;
8469
8470 END IF;
8471
8472 --Validate the input parameters
8473 IF p_context IS NULL OR
8474 p_src_project_id IS NULL OR
8475 p_target_project_id IS NULL THEN
8476
8477 IF l_debug_mode = 'Y' THEN
8478 pa_debug.g_err_stage:='p_context is '||p_context;
8479 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8480 END IF;
8481
8482 IF l_debug_mode = 'Y' THEN
8483 pa_debug.g_err_stage:='p_src_project_id is '||p_src_project_id;
8484 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8485 END IF;
8486
8487 IF l_debug_mode = 'Y' THEN
8488 pa_debug.g_err_stage:='p_target_project_id is '||p_target_project_id;
8489 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8490 END IF;
8491
8492 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8493 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
8494
8495 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8496
8497 END IF;
8498
8499
8500 --Initialise the variables the should be passed as parameters in other APIs
8501 IF p_src_project_id<>p_target_project_id THEN
8502 l_adj_percent := 0.9999;
8503 l_targ_budget_version_id:=l_src_budget_version_id;
8504 ELSE
8505 l_adj_percent := 0;
8506 END IF;
8507
8508 --If context is WORKPLAN call the TA Validation API with the required parameters
8509 IF p_context=PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN OR
8510 p_context=PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK THEN
8511
8512 IF l_debug_mode = 'Y' THEN
8513 pa_debug.g_err_stage:='The calling context is workplan / task assignment p_src_version_id_tbl(1) '||p_src_version_id_tbl(1);
8514 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8515 END IF;
8516 --dbms_output.put_line('in copy plan txn2');
8517 --Derive the plan version id for the source and target element version ids
8518 SELECT pbv.budget_version_id
8519 INTO l_src_budget_version_id
8520 FROM pa_struct_task_wbs_v pt,
8521 pa_budget_versions pbv
8522 WHERE pbv.project_structure_version_id= pt.parent_structure_version_id
8523 AND pt.element_version_id=p_src_version_id_tbl(1)
8524 AND pbv.wp_version_flag='Y';
8525
8526 IF l_debug_mode = 'Y' THEN
8527 pa_debug.g_err_stage:='The calling context is workplan / task assignment p_targ_version_id_tbl(1) '||p_targ_version_id_tbl(1);
8528 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8529 END IF;
8530
8531
8532 --dbms_output.put_line('in copy plan txn2.5');
8533 SELECT pbv.budget_version_id
8534 INTO l_targ_budget_version_id
8535 FROM pa_budget_versions pbv
8536 ,pa_struct_task_wbs_v pt
8537 WHERE pt.element_version_id=p_targ_version_id_tbl(1)
8538 AND pbv.project_structure_version_id=pt.parent_structure_version_id
8539 AND pbv.wp_version_flag='Y';
8540
8541 --CALL THE TA VALIDATION API
8542 IF l_debug_mode = 'Y' THEN
8543 pa_debug.g_err_stage:='The calling context is workplan / task assignment';
8544 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8545 END IF;
8546 --dbms_output.put_line('p_targ_version_id_tbl.count is '||p_targ_version_id_tbl.count);
8547
8548 --This value will be used only when the x_calculate_flag of the below validate api is
8549 --returned as 'N'
8550 l_adj_percent := 0;
8551
8552 --Added x_rbs_diff_flag for bug 3974569. This flag indicates that the the source/target resource assignments
8553 --being copied might not map to the same rbs_element_id. If this is passed as Y it means that
8554 ----> validate_copy_assignment has called RBS mapping API and
8555 ----> While copying the resource assignments rbs_element_id should be taken from pa_rbs_plans_out_tmp
8556 pa_task_assignment_utils.validate_copy_assignment
8557 ( p_copy_external_flag => p_copy_external_flag --Included this parameter for bug 3841130
8558 ,p_src_project_id => p_src_project_id
8559 ,p_target_project_id => p_target_project_id
8560 ,p_src_elem_ver_id_tbl => p_src_version_id_tbl
8561 ,p_targ_elem_ver_id_tbl => p_targ_version_id_tbl
8562 ,p_copy_people_flag => p_copy_people_flag
8563 ,p_copy_equip_flag => p_copy_equip_flag
8564 ,p_copy_mat_item_flag => p_copy_mat_item_flag
8565 ,p_copy_fin_elem_flag => p_copy_fin_elem_flag
8566 ,x_resource_rec_tbl => l_resource_rec_tbl
8567 ,x_calculate_flag => l_calculate_flag
8568 ,x_rbs_diff_flag => l_rbs_diff_flag
8569 ,x_return_status => x_return_status);
8570
8571 --dbms_output.put_line('l_resource_rec_tbl.count is '||l_resource_rec_tbl.count);
8572 --dbms_output.put_line('l_resource_rec_tbl.count is '||l_resource_rec_tbl(1).planning_start_date);
8573 --dbms_output.put_line('l_resource_rec_tbl.count is '||l_resource_rec_tbl(1).planning_end_date);
8574 --dbms_output.put_line('l_calculate_flag is '||l_calculate_flag);
8575 --This code is for debugging only. Should be removed later
8576 IF l_debug_mode = 'Y' THEN
8577
8578 pa_debug.g_err_stage:='validate_copy_assignment returned error '||x_return_status;
8579 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8580
8581 END IF;
8582
8583 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8584
8585 IF l_debug_mode = 'Y' THEN
8586
8587 pa_debug.g_err_stage:='validate_copy_assignment returned error';
8588 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8589
8590 END IF;
8591 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8592
8593 END IF;
8594
8595 IF l_resource_rec_tbl.COUNT =0 THEN
8596 IF l_debug_mode = 'Y' THEN
8597
8598 pa_debug.g_err_stage:='Validate API returned 0 records in the res rec table-- returning';
8599 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8600 pa_debug.reset_curr_function;
8601 END IF;
8602 RETURN;
8603 END IF;
8604
8605 --Extend the pl/sql tables
8606 l_ra_id_tbl.extend(l_resource_rec_tbl.last);
8607 l_planning_start_date_tbl.extend(l_resource_rec_tbl.last);
8608 l_planning_end_date_tbl.extend(l_resource_rec_tbl.last);
8609 l_schedule_start_date_tbl.extend(l_resource_rec_tbl.last);
8610 l_schedule_end_date_tbl.extend(l_resource_rec_tbl.last);
8611 l_project_assignment_id_tbl.extend(l_resource_rec_tbl.last);
8612 l_resource_list_member_id_tbl.extend(l_resource_rec_tbl.last); -- Bug 3615617
8613 --Bug 4097749
8614 l_named_role_tbl.extend(l_resource_rec_tbl.last);
8615
8616 --Copy the records from pl/sql table to local pl/sql tbls
8617 FOR i IN l_resource_rec_tbl.first..l_resource_rec_tbl.last LOOP
8618
8619 l_ra_id_tbl(i):=l_resource_rec_tbl(i).resource_assignment_id;
8620 l_planning_start_date_tbl(i):=l_resource_rec_tbl(i).planning_start_date;
8621 l_planning_end_date_tbl(i):=l_resource_rec_tbl(i).planning_end_date;
8622 l_schedule_start_date_tbl(i):=l_resource_rec_tbl(i).schedule_start_date;
8623 l_schedule_end_date_tbl(i):=l_resource_rec_tbl(i).schedule_end_date;
8624 l_project_assignment_id_tbl(i):=l_resource_rec_tbl(i).project_assignment_id;
8625 l_resource_list_member_id_tbl(i):=l_resource_rec_tbl(i).resource_list_member_id; -- Bug 3615617
8626 --Bug 4097749
8627 l_named_role_tbl(i):=l_resource_rec_tbl(i).named_role;
8628
8629 END LOOP;
8630
8631 END IF;
8632
8633 IF l_debug_mode = 'Y' THEN
8634 pa_debug.g_err_stage:='Calling pa_fp_copy_from_pkg.create_res_task_maps '||l_ra_id_tbl.last;
8635 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8636 END IF;
8637 --dbms_output.put_line('calling create res task maps');
8638
8639 --Call the API to create the mapping between source and target version ids.
8640 pa_fp_copy_from_pkg.create_res_task_maps(
8641 p_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
8642 ,p_src_ra_id_tbl => l_ra_id_tbl
8643 ,p_src_elem_ver_id_tbl => p_src_version_id_tbl
8644 ,p_targ_elem_ver_id_tbl => p_targ_version_id_tbl
8645 ,p_targ_proj_assmt_id_tbl => l_project_assignment_id_tbl
8646 ,p_targ_rlm_id_tbl => l_resource_list_member_id_tbl -- Bug 3615617
8647 ,p_planning_start_date_tbl=> l_planning_start_date_tbl
8648 ,p_planning_end_date_tbl => l_planning_end_date_tbl
8649 ,p_schedule_start_date_tbl=> l_schedule_start_date_tbl
8650 ,p_schedule_end_date_tbl => l_schedule_end_date_tbl
8651 ,x_return_status => x_return_status
8652 ,x_msg_count => x_msg_count
8653 ,x_msg_data => x_msg_data);
8654
8655
8656
8657 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8658
8659 IF l_debug_mode = 'Y' THEN
8660
8661 pa_debug.g_err_stage:='create_res_task_maps returned error';
8662 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8663
8664 END IF;
8665 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8666
8667 END IF;
8668
8669
8670 IF l_debug_mode = 'Y' THEN
8671 pa_debug.g_err_stage:='Calling PA_FP_COPY_FROM_PKG.Copy_Resource_Assignments';
8672 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8673 END IF;
8674
8675 --dbms_output.put_line('calling copy res assmts S '||l_src_budget_version_id ||' T '||l_targ_budget_version_id );
8676 --Call the API to copy the resource assignments for the target version
8677 PA_FP_COPY_FROM_PKG.Copy_Resource_Assignments(
8678 p_source_plan_version_id => l_src_budget_version_id
8679 ,p_target_plan_version_id => l_targ_budget_version_id
8680 ,p_adj_percentage => l_adj_percent
8681 ,p_rbs_map_diff_flag => l_rbs_diff_flag --For Bug 3974569
8682 --Bug 4200168
8683 ,p_calling_context => 'WORKPLAN'
8684 ,x_return_status => x_return_status
8685 ,x_msg_count => x_msg_count
8686 ,x_msg_data => x_msg_data);
8687
8688 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8689
8690 IF l_debug_mode = 'Y' THEN
8691
8692 pa_debug.g_err_stage:='Copy_Resource_Assignments returned error';
8693 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8694
8695 END IF;
8696 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8697
8698 END IF;
8699
8700 -- IPM changes - rollup amounts in new entity
8701 -- Call the UTIL API to get the financial plan info l_fp_cols_rec
8702 -- Bug 5070740 - moved this to rollup into entity BEFORE calling calculate
8703
8704 pa_fp_gen_amount_utils.get_plan_version_dtls
8705 (p_project_id => p_target_project_id,
8706 p_budget_version_id => l_targ_budget_version_id,
8707 x_fp_cols_rec => l_fp_cols_rec,
8708 x_return_status => x_return_status,
8709 x_msg_count => x_msg_count,
8710 x_msg_data => x_msg_data);
8711
8712 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8713
8714 IF l_debug_mode = 'Y' THEN
8715 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
8716 print_msg(pa_debug.g_err_stage,l_module_name);
8717 END IF;
8718 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8719 END IF;
8720
8721 IF l_calculate_flag = 'Y' then
8722
8723 -- IPM changes - populate tmp table to use for rollup
8724 -- Bug 5034507: Delete temp table before inserting new records
8725 DELETE pa_resource_asgn_curr_tmp;
8726
8727 -- For bug 5017855, ensure that the combinations of
8728 -- (resource_assignment_id, txn_currency_code) are distinct.
8729 -- Bug 5042399: Copy Source override rates to the temp table for Target resources.
8730 -- Bug 5070740: Need to copy override rates before calculate is called
8731 INSERT INTO pa_resource_asgn_curr_tmp (
8732 RESOURCE_ASSIGNMENT_ID,
8733 TXN_CURRENCY_CODE,
8734 TXN_RAW_COST_RATE_OVERRIDE,
8735 TXN_BURDEN_COST_RATE_OVERRIDE,
8736 TXN_BILL_RATE_OVERRIDE )
8737 SELECT DISTINCT
8738 ra.RESOURCE_ASSIGNMENT_ID,
8739 src_rbc.txn_currency_code,
8740 src_rbc.TXN_RAW_COST_RATE_OVERRIDE,
8741 src_rbc.TXN_BURDEN_COST_RATE_OVERRIDE,
8742 src_rbc.TXN_BILL_RATE_OVERRIDE
8743 FROM pa_resource_asgn_curr src_rbc,
8744 pa_fp_ra_map_tmp map,
8745 --pa_budget_lines bl
8746 pa_resource_assignments ra
8747 WHERE ra.budget_version_id =l_targ_budget_version_id
8748 -- AND src_rbc.budget_version_id = l_src_budget_version_id
8749 AND map.target_res_assignment_id = ra.resource_assignment_id
8750 AND src_rbc.resource_assignment_id = map.source_res_assignment_id;
8751 -- AND src_rbc.txn_currency_code = bl.txn_currency_code;
8752
8753 -- Call maintain_data to copy override rates before calling calculate
8754 pa_res_asg_currency_pub.maintain_data(
8755 p_fp_cols_rec => l_fp_cols_rec,
8756 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
8757 p_rollup_flag => 'N',
8758 p_version_level_flag => 'N',
8759 p_called_mode => 'SELF_SERVICE',
8760 x_return_status => x_return_status,
8761 x_msg_count => x_msg_count,
8762 x_msg_data => x_msg_data
8763 );
8764
8765 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8766
8767 IF l_debug_mode = 'Y' THEN
8768 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
8769 print_msg(pa_debug.g_err_stage,l_module_name);
8770 END IF;
8771 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8772 END IF;
8773 -- END Bug 5070740
8774
8775 --Bug 4097749. Update the resource assigments created above with the named_role attribute returned by
8776 --the TA validate API
8777 IF l_debug_mode = 'Y' THEN
8778 pa_debug.g_err_stage:='About to update named role/parent assignment id in pa_resource_assignments';
8779 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8780 END IF;
8781
8782 --Bug 4215676 . Modified the update sql for performance issues.
8783 --The parent assignment id should be NULLED out.Please see the comment on exaclty similar DML UPDATE below
8784
8785 -- IPM - get resource rate based flag
8786 l_res_rate_based_flag_tbl.extend(l_ra_id_tbl.last);
8787 FOR i IN 1..l_ra_id_tbl.COUNT LOOP
8788 SELECT rlm.resource_class_code, rlm.inventory_item_id,
8789 rlm.expenditure_type
8790 INTO l_resource_class_code, l_inv_item_id, l_exp_type
8791 FROM pa_resource_list_members rlm,
8792 pa_resource_assignments ra
8793 WHERE ra.resource_assignment_id = l_ra_id_tbl(i)
8794 AND ra.resource_list_member_id = rlm.resource_list_member_id;
8795
8796 IF l_resource_class_code IN ('PEOPLE', 'EQUIPMENT') THEN
8797 l_res_rate_based_flag_tbl(i) := 'Y';
8798 ELSIF l_resource_class_code = 'MATERIAL_ITEMS' AND
8799 l_inv_item_id IS NOT NULL THEN
8800 BEGIN
8801 SELECT 'Y'
8802 INTO l_res_rate_based_flag_tbl(i)
8803 FROM DUAL
8804 WHERE NOT EXISTS (select 'Y'
8805 from mtl_system_items_b item,
8806 mtl_units_of_measure meas
8807 where item.inventory_item_id = l_inv_item_id
8808 and item.primary_uom_code = meas.uom_code
8809 and meas.uom_class = 'Currency');
8810 EXCEPTION WHEN OTHERS THEN
8811 l_res_rate_based_flag_tbl(i) := 'N';
8812 END;
8813 ELSIF l_resource_class_code in ('MATERIAL_ITEMS',
8814 'FINANCIAL_ELEMENTS') AND
8815 l_inv_item_id IS NULL AND l_exp_type IS NOT NULL THEN
8816 BEGIN
8817 SELECT c.cost_rate_flag
8818 INTO l_res_rate_based_flag_tbl(i)
8819 FROM pa_expenditure_types c
8820 WHERE c.expenditure_type = l_exp_type;
8821 EXCEPTION WHEN OTHERS THEN
8822 l_res_rate_based_flag_tbl(i) := 'N';
8823 END;
8824 END IF;
8825 END LOOP;
8826 FORALL i IN 1..l_ra_id_tbl.COUNT
8827 UPDATE pa_resource_assignments
8828 SET named_role = l_named_role_tbl(i),
8829 parent_assignment_id=NULL,
8830 /* bug fix:5135927 : Added nvl for l_res_rate_base_flag */
8831 resource_rate_based_flag =NVL(l_res_rate_based_flag_tbl(i),'N')--IPM
8832 WHERE parent_assignment_id = l_ra_id_tbl(i)
8833 AND budget_version_id = l_targ_budget_version_id;
8834
8835 IF l_debug_mode = 'Y' THEN
8836 pa_debug.g_err_stage:='Done with updating named role/parent assignment id in pa_resource_assignments';
8837 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8838 END IF;
8839
8840
8841 IF l_debug_mode = 'Y' THEN
8842 pa_debug.g_err_stage:='Calling Calculate API';
8843 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8844 END IF;
8845 --dbms_output.put_line('in cal=y');
8846
8847 pa_budget_utils.Get_Project_Currency_Info
8848 ( p_project_id => p_target_project_id
8849 , x_projfunc_currency_code => l_projfunc_currency_code
8850 , x_project_currency_code => l_proj_curr_code
8851 , x_txn_currency_code => l_projfunc_currency_code
8852 , x_msg_count => x_msg_count
8853 , x_msg_data => x_msg_data
8854 , x_return_status => x_return_status);
8855
8856 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8857 IF l_debug_mode = 'Y' THEN
8858 pa_debug.g_err_stage:='Cpa_budget_utils.Get_Project_Currency_Info returned error';
8859 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level5);
8860 END IF;
8861 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8862 END IF;
8863
8864 i:=1;
8865 FOR c_calc_api_param_rec IN c_calc_api_param_csr LOOP
8866
8867 --dbms_output.put_line (' i is '||i);
8868 IF NOT l_calc_ra_id_tbl.EXISTS(i) THEN
8869 l_quantity_tbl.extend(1);
8870 l_tot_rc_tbl.extend(1);
8871 l_currency_code_tbl.extend(1);
8872 l_calc_ra_id_tbl.extend(1);
8873 l_spread_amt_flag_tbl.extend(1);
8874 END IF;
8875 -- Select the quantity for the resource assignment and the txn currency code. Note that
8876 -- for task assignments there will be only one currency code across all the budget lines
8877 -- in the ra id
8878 -- Changed the logic of populating quantity and raw cost to loop thru l_resource_rec_tbl
8879 -- instead of using tbls cached by ra id for bug 3678314
8880 FOR kk IN 1..l_resource_rec_tbl.COUNT LOOP
8881
8882 IF c_calc_api_param_rec.source_res_assignment_id = l_resource_rec_tbl(kk).resource_assignment_id THEN
8883
8884 l_quantity_tbl(i):=l_resource_rec_tbl(kk).total_quantity;
8885 l_tot_rc_tbl(i):=l_resource_rec_tbl(kk).total_raw_cost;
8886 EXIT;
8887
8888 END IF;
8889
8890 END LOOP;
8891
8892 l_calc_ra_id_tbl(i):=c_calc_api_param_rec.target_res_assignment_id;
8893 l_spread_amt_flag_tbl(i):='Y';
8894
8895 BEGIN
8896 SELECT nvl(txn_currency_code,l_proj_curr_code)--For workplan txn curr code can be null
8897 INTO l_currency_code_tbl(i)
8898 FROM pa_budget_lines
8899 WHERE resource_assignment_id=
8900 c_calc_api_param_rec.source_res_assignment_id -- bug 3781932 l_calc_ra_id_tbl(i)
8901 AND ROWNUM=1;
8902 EXCEPTION
8903 WHEN NO_DATA_FOUND THEN
8904 l_currency_code_tbl(i):=l_proj_curr_code;
8905 END;
8906 i:=i+1;
8907 END LOOP;
8908 l_quantity_tbl.DELETE(i,l_quantity_tbl.count);
8909 l_tot_rc_tbl.DELETE(i,l_tot_rc_tbl.count);
8910 l_currency_code_tbl.DELETE(i,l_currency_code_tbl.count);
8911 l_calc_ra_id_tbl.DELETE(i,l_calc_ra_id_tbl.count);
8912 l_spread_amt_flag_tbl.DELETE(i,l_spread_amt_flag_tbl.count);
8913 --dbms_output.put_line('Calling the calculate api'||l_calc_ra_id_tbl.count);
8914 --dbms_output.put_line('Calling the calculate api'||l_calc_ra_id_tbl(1));
8915 --dbms_output.put_line('Calling the calculate api'||l_calc_ra_id_tbl(2));
8916
8917 PA_FP_CALC_PLAN_PKG.calculate(
8918 p_project_id => p_target_project_id
8919 ,p_budget_version_id => l_targ_budget_version_id
8920 --,p_refresh_rates_flag => 'N' --need to pass any variables that are passed from calling API
8921 --,p_refresh_conv_rates_flag => 'N' --need to pass any variables that are passed from calling API
8922 --,p_spread_required_flag => 'N'
8923 --,p_conv_rates_required_flag => 'N'
8924 ,p_source_context => 'RESOURCE_ASSIGNMENT'
8925 ,p_resource_assignment_tab => l_calc_ra_id_tbl
8926 ,p_delete_budget_lines_tab => SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
8927 -- bug fix:5726773 ,p_spread_amts_flag_tab => l_spread_amt_flag_tbl
8928 ,p_txn_currency_code_tab => l_currency_code_tbl
8929 ,p_txn_currency_override_tab => SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
8930 ,p_total_qty_tab => l_quantity_tbl
8931 ,p_total_raw_cost_tab => l_tot_rc_tbl
8932 ,p_total_burdened_cost_tab => SYSTEM.PA_NUM_TBL_TYPE()
8933 ,p_total_revenue_tab => SYSTEM.PA_NUM_TBL_TYPE()
8934 ,p_raw_cost_rate_tab => SYSTEM.PA_NUM_TBL_TYPE()
8935 ,p_rw_cost_rate_override_tab => SYSTEM.PA_NUM_TBL_TYPE()
8936 ,p_b_cost_rate_tab => SYSTEM.PA_NUM_TBL_TYPE()
8937 ,p_b_cost_rate_override_tab => SYSTEM.PA_NUM_TBL_TYPE()
8938 ,p_bill_rate_tab => SYSTEM.PA_NUM_TBL_TYPE()
8939 ,p_bill_rate_override_tab => SYSTEM.PA_NUM_TBL_TYPE()
8940 ,p_line_start_date_tab => SYSTEM.PA_DATE_TBL_TYPE()
8941 ,p_line_end_date_tab => SYSTEM.PA_DATE_TBL_TYPE()
8942 ,p_rollup_required_flag => l_pji_rollup_required
8943 ,p_raTxn_rollup_api_call_flag => 'N' -- Added for bug 5017855
8944 ,x_return_status => x_return_status
8945 ,x_msg_count => x_msg_count
8946 ,x_msg_data => x_msg_data);
8947
8948 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8949
8950 IF l_debug_mode = 'Y' THEN
8951
8952 pa_debug.g_err_stage:='PA_FP_CALC_PLAN_PKG.calculate returned error';
8953 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8954
8955 END IF;
8956 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8957
8958 END IF;
8959
8960
8961 ELSE--Calculate Flag is N
8962
8963 --dbms_output.put_line('in cal<>y');
8964 IF l_debug_mode = 'Y' THEN
8965 pa_debug.g_err_stage:='Calling PA_FP_COPY_FROM_PKG.Copy_Budget_Lines';
8966 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8967 END IF;
8968
8969 PA_FP_COPY_FROM_PKG.Copy_Budget_Lines(
8970 p_source_plan_version_id => l_src_budget_version_id
8971 ,p_target_plan_version_id => l_targ_budget_version_id
8972 ,p_adj_percentage => l_adj_percent
8973 ,x_return_status => x_return_status
8974 ,x_msg_count => x_msg_count
8975 ,x_msg_data => x_msg_data);
8976
8977
8978
8979 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8980
8981 IF l_debug_mode = 'Y' THEN
8982
8983 pa_debug.g_err_stage:='Copy_Budget_Lines returned error';
8984 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level5);
8985
8986 END IF;
8987 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
8988
8989 END IF;
8990
8991 --Bug 4097749. Update the resource assigments created above with the named_role attribute returned by
8992 --the TA validate API
8993 IF l_debug_mode = 'Y' THEN
8994 pa_debug.g_err_stage:='About to update named role/parent assignment id in pa_resource_assignments';
8995 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
8996 END IF;
8997
8998 --Bug 4215676 . Modified the update sql for performance issues.
8999 --The parent assignment id should be NULLED out since (copy resource assignments copies the source
9000 --resource assignment to parent assignment id while copying the source to target)
9001 ---->Copy_Budget_Lines which is called above will consider all the resource assignments with Non Null
9002 ---->parent assignment id as candidates for copy. If parent_assignemt_id is not nulled out
9003 ---->then in future copy task flows the resource assignments which were are copied now will also be considered
9004 ---->as NEW and copy_budget_lines will try to insert them which will violate the unique constraint
9005 ---->on pa_budget_lines
9006 FORALL i IN 1..l_ra_id_tbl.COUNT
9007 UPDATE pa_resource_assignments
9008 SET named_role = l_named_role_tbl(i),
9009 parent_assignment_id=NULL
9010 WHERE parent_assignment_id = l_ra_id_tbl(i)
9011 AND budget_version_id = l_targ_budget_version_id;
9012
9013 IF l_debug_mode = 'Y' THEN
9014 pa_debug.g_err_stage:='Done with updating named role/parent assignment id in pa_resource_assignments';
9015 pa_debug.write( l_module_name,pa_debug.g_err_stage,l_debug_level3);
9016 END IF;
9017
9018
9019 --Code changes for bug#4200168 starts here.
9020 --for the budget lines that get copied as a result of tasks copying,
9021 -- we need to ensure all the txn currencies are available in pa fp txn ccurrencies.
9022 IF p_src_project_id<>p_target_project_id THEN
9023
9024 -- Bug 4872216 changes - performance fix to remove full table
9025 -- scan on PA_FP_TXN_CURRENCIES
9026 SELECT DISTINCT BL.TXN_CURRENCY_CODE
9027 BULK COLLECT
9028 INTO l_txn_curr_code_tbl
9029 FROM PA_BUDGET_LINES BL
9030 WHERE BL.BUDGET_VERSION_ID = l_targ_budget_version_id
9031 AND NOT EXISTS
9032 (SELECT 1
9033 FROM PA_FP_TXN_CURRENCIES TC
9034 ,PA_PROJ_FP_OPTIONS pfo -- Bug 4872216
9035 WHERE tc.fin_plan_version_id =
9036 l_targ_budget_version_id
9037 AND pfo.project_id = p_target_project_id --4872216
9038 AND pfo.fin_plan_version_id =
9039 tc.fin_plan_version_id --4872216
9040 AND pfo.proj_fp_options_id =
9041 tc.proj_fp_options_id --4872216
9042 AND TC.txn_currency_code = BL.txn_currency_code);
9043
9044 select proj_fp_options_id, project_id, fin_plan_type_id
9045 INTO l_proj_fp_options_id, l_project_id, l_fin_plan_type_id
9046 from pa_proj_fp_options
9047 WHERE fin_plan_version_id = l_targ_budget_version_id;
9048
9049 select project_currency_code, projfunc_currency_code
9050 INTO l_pc, l_pfc
9051 from pa_projects_all
9052 WHERE project_id = l_project_id;
9053
9054 FORALL j IN 1..l_txn_curr_code_tbl.count
9055 INSERT INTO PA_FP_TXN_CURRENCIES
9056 (
9057 FP_TXN_CURRENCY_ID,
9058 PROJ_FP_OPTIONS_ID,
9059 PROJECT_ID,
9060 FIN_PLAN_TYPE_ID,
9061 FIN_PLAN_VERSION_ID,
9062 TXN_CURRENCY_CODE,
9063 DEFAULT_REV_CURR_FLAG,
9064 DEFAULT_COST_CURR_FLAG,
9065 DEFAULT_ALL_CURR_FLAG,
9066 PROJECT_CURRENCY_FLAG,
9067 PROJFUNC_CURRENCY_FLAG,
9068 CREATION_DATE ,
9069 CREATED_BY ,
9070 LAST_UPDATE_LOGIN ,
9071 LAST_UPDATED_BY ,
9072 LAST_UPDATE_DATE
9073 )
9074 VALUES
9075 (
9076 PA_FP_TXN_CURRENCIES_S.NEXTVAL,
9077 l_proj_fp_options_id ,
9078 l_project_id,
9079 l_fin_plan_type_id,
9080 l_targ_budget_version_id,
9081 l_txn_curr_code_tbl(j),
9082 'N',
9083 'N',
9084 'N',
9085 Decode(l_txn_curr_code_tbl(j),l_pc,'Y','N'),
9086 Decode(l_txn_curr_code_tbl(j),l_pfc,'Y','N'),
9087 sysdate,
9088 fnd_global.user_id,
9089 fnd_global.login_id,
9090 fnd_global.user_id,
9091 sysdate);
9092
9093 END IF; -- End of if p_src_project_id<>p_target_project_id
9094 --Code changes for bug#4200168 ends here.
9095
9096 --Call the multi currency conversion PKG if required i.e. if pc and pfc should be recalculated
9097 IF l_adj_percent <> 0 THEN
9098 PA_FP_MULTI_CURRENCY_PKG.convert_txn_currency (
9099 p_budget_version_id => l_targ_budget_version_id
9100 ,p_entire_version => 'Y'
9101 ,x_return_status => x_return_status
9102 ,x_msg_count => x_msg_count
9103 ,x_msg_data => x_msg_data );
9104
9105 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9106
9107 IF l_debug_mode = 'Y' THEN
9108
9109 pa_debug.g_err_stage:='convert_txn_currency returned error';
9110 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9111
9112 END IF;
9113
9114 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
9115 END IF;
9116
9117 END IF;
9118
9119 --Call the reportiong lines API. This can called unconditionally as the reporting lines should always be
9120 --created for Workplan and Task Assignments versions.
9121
9122 --Added the if condition for the bug 4200168
9123 IF l_pji_rollup_required = 'Y' THEN
9124
9125 PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api
9126 ( p_source => 'PA_FP_RA_MAP_TMP'
9127 ,p_budget_version_id => l_targ_budget_version_id
9128 ,x_return_status => x_return_status
9129 ,x_msg_data => x_msg_data
9130 ,x_msg_count => x_msg_count);
9131
9132 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9133
9134 IF l_debug_mode = 'Y' THEN
9135 pa_debug.g_err_stage:='PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api returned error';
9136 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9137 END IF;
9138 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
9139 END IF;
9140
9141 END IF;
9142
9143 -- Added for bug 4492493, Updated for bug 5198662
9144 IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
9145 AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(p_target_project_id) = 'Y') OR
9146 (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
9147 AND pa_task_assignment_utils.g_require_progress_rollup = 'Y') THEN
9148
9149 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
9150 ( p_calling_context => 'ASGMT_PLAN_CHANGE'
9151 ,p_project_id => p_target_project_id
9152 ,p_structure_version_id => pa_project_structure_utils.get_latest_wp_version(p_target_project_id)
9153 ,p_pub_struc_ver_id => pa_project_structure_utils.get_latest_wp_version(p_target_project_id)
9154 ,x_return_status => x_return_status
9155 ,x_msg_data => x_msg_data
9156 ,x_msg_count => x_msg_count );
9157
9158 pa_task_assignment_utils.g_require_progress_rollup := 'N';
9159
9160 END IF;
9161
9162 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9163 IF l_debug_mode = 'Y' THEN
9164 pa_debug.g_err_stage:='Called API PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp';
9165 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.copy_planning_transactions: ' || g_module_name,pa_debug.g_err_stage,3);
9166 END IF;
9167
9168 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9169 END IF;
9170 --End bug 4492493
9171
9172 END IF;
9173
9174 -- IPM changes - populate tmp table to use for rollup
9175 -- Bug 5034507: Delete temp table before inserting new records
9176 DELETE pa_resource_asgn_curr_tmp;
9177
9178 -- For bug 5017855, ensure that the combinations of
9179 -- (resource_assignment_id, txn_currency_code) are distinct.
9180 -- Bug 5042399: Copy Source override rates to the temp table for Target resources.
9181 INSERT INTO pa_resource_asgn_curr_tmp (
9182 RESOURCE_ASSIGNMENT_ID,
9183 TXN_CURRENCY_CODE,
9184 TXN_RAW_COST_RATE_OVERRIDE,
9185 TXN_BURDEN_COST_RATE_OVERRIDE,
9186 TXN_BILL_RATE_OVERRIDE )
9187 SELECT DISTINCT
9188 ra.RESOURCE_ASSIGNMENT_ID,
9189 src_rbc.txn_currency_code,
9190 src_rbc.TXN_RAW_COST_RATE_OVERRIDE,
9191 src_rbc.TXN_BURDEN_COST_RATE_OVERRIDE,
9192 src_rbc.TXN_BILL_RATE_OVERRIDE
9193 FROM pa_resource_asgn_curr src_rbc,
9194 pa_fp_ra_map_tmp map,
9195 --pa_budget_lines bl
9196 pa_resource_assignments ra
9197 WHERE ra.budget_version_id =l_targ_budget_version_id
9198 -- AND src_rbc.budget_version_id = l_src_budget_version_id
9199 AND map.target_res_assignment_id = ra.resource_assignment_id
9200 AND src_rbc.resource_assignment_id = map.source_res_assignment_id;
9201 -- AND src_rbc.txn_currency_code = bl.txn_currency_code;
9202
9203 -- Bug 5070740: In case Calculate is called, need to call maintain_data
9204 -- API again to rollup amounts; in case Calculate is not called, calling
9205 -- maintain data once in this flow to copy overrides and rollup amounts.
9206 pa_res_asg_currency_pub.maintain_data(
9207 p_fp_cols_rec => l_fp_cols_rec,
9208 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
9209 p_rollup_flag => 'Y',
9210 p_version_level_flag => 'N',
9211 p_called_mode => 'SELF_SERVICE',
9212 x_return_status => x_return_status,
9213 x_msg_count => x_msg_count,
9214 x_msg_data => x_msg_data
9215 );
9216
9217 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9218
9219 IF l_debug_mode = 'Y' THEN
9220 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
9221 print_msg(pa_debug.g_err_stage,l_module_name);
9222 END IF;
9223 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9224 END IF;
9225
9226 IF l_debug_mode = 'Y' THEN
9227 pa_debug.g_err_stage:='Exiting copy_planning_transactions';
9228 print_msg(pa_debug.g_err_stage,l_module_name);
9229 -- reset curr function
9230 pa_debug.reset_curr_function;
9231 END IF;
9232 EXCEPTION
9233
9234 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
9235 l_msg_count := FND_MSG_PUB.count_msg;
9236 IF l_msg_count = 1 THEN
9237 PA_INTERFACE_UTILS_PUB.get_messages
9238 (p_encoded => FND_API.G_TRUE
9239 ,p_msg_index => 1
9240 ,p_msg_count => l_msg_count
9241 ,p_msg_data => l_msg_data
9242 ,p_data => l_data
9243 ,p_msg_index_out => l_msg_index_out);
9244
9245 x_msg_data := l_data;
9246 x_msg_count := l_msg_count;
9247 ELSE
9248 x_msg_count := l_msg_count;
9249 END IF;
9250
9251 x_return_status := FND_API.G_RET_STS_ERROR;
9252 ROLLBACK TO copy_plan_txn;
9253
9254 IF l_debug_mode = 'Y' THEN
9255 pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
9256 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9257 -- reset curr function
9258 pa_debug.reset_curr_function;
9259 END IF;
9260 RETURN;
9261 WHEN Others THEN
9262 ROLLBACK TO copy_plan_txn;
9263 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9264 x_msg_count := 1;
9265 x_msg_data := SQLERRM;
9266
9267 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_planning_transaction_pub'
9268 ,p_procedure_name => 'copy_planning_transactions');
9269
9270 IF l_debug_mode = 'Y' THEN
9271 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
9272 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
9273 pa_debug.Reset_Curr_Function();
9274 END IF;
9275 RAISE;
9276 END copy_planning_transactions;
9277
9278
9279
9280 /*=====================================================================
9281 Procedure Name: delete_planning_transactions
9282 Purpose: This procedure should be called to delete planning
9283 transactions
9284 Valid values for p_context are 'BUDGET','FORECAST',
9285 'WORKPLAN' and 'TASK_ASSIGNMENT'
9286
9287 Valid values for p_task_or_res are 'TASKS' and
9288 'ASSIGNMENT'
9289
9290 In the context of 'TASK_ASSIGNMENT' the fields
9291 task_number and task_name are required in
9292 p_task_rec_tbl
9293
9294 If p_task_or_res is TASKS,
9295 p_element_version_id_tbl,p_task_number_tbl,
9296 p_task_name_tbl are used.
9297
9298 If p_task_or_res is ASSIGNMENT,
9299 p_resource_assignment_tbl is used
9300
9301 p_calling_module can be NULL or PROCESS_RES_CHG_DERV_CALC_PRMS. If passed as Y
9302 resource assignments will be deleted otherwise they
9303 will not be deleted.(Please note that budget lines will be deleted
9304 always irrespective of the value for this parameter).
9305 Please note that this parameter cannot be PROCESS_RES_CHG_DERV_CALC_PRMS
9306 when p_task_or_res is passed as TASKS
9307 Whenever p_calling_module is passed as PROCESS_RES_CHG_DERV_CALC_PRMS,
9308 the parameters p_task_id_tbl,p_resource_class_code_tbl
9309 p_rbs_element_id_tbl and p_rate_based_flag_tbl should ALSO be
9310 passed. These tbls must be equal in length to p_resource_assignment_tbl
9311 and should contain the task id, rbs element id and rate based flag
9312 for the resource assignment
9313
9314 Bug - 3719918. New param p_currency_code_tbl is added below
9315 When p_context - Budget/Forecast and p_task_or_res is Assignment then only the bugdet lines
9316 Corresponding to currency code passed will be deleted. After deleting of the budget lines
9317 the corresponding RA will only we deleted if the budget line count is 0 from the RA.
9318 p_calling_module will be'EDIT_PLAN' when called from edit plan pages.
9319
9320 =======================================================================*/
9321
9322 PROCEDURE delete_planning_transactions
9323 (
9324 p_context IN VARCHAR2
9325 ,p_calling_context IN VARCHAR2 DEFAULT NULL -- Added for Bug 6856934
9326 ,p_task_or_res IN VARCHAR2 DEFAULT 'TASKS'
9327 ,p_element_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
9328 ,p_task_number_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
9329 ,p_task_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
9330 ,p_resource_assignment_tbl IN SYSTEM.PA_NUM_TBL_TYPE DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
9331 --Introduced for bug 3589130. If this parameter is passed as Y then an error will be thrown
9332 --When its required to delete a resource assignment containing budget lines. This parameter
9333 --will be considered only for BUDGET and FORECAST context
9334 ,p_validate_delete_flag IN VARCHAR2 DEFAULT 'N'
9335 -- This param will be used for B/F Context. Bug - 3719918
9336 ,p_currency_code_tbl IN SYSTEM.PA_VARCHAR2_15_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
9337 ,p_calling_module IN VARCHAR2 DEFAULT NULL
9338 ,p_task_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
9339 ,p_rbs_element_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE DEFAULT SYSTEM.PA_NUM_TBL_TYPE()
9340 ,p_rate_based_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
9341 ,p_resource_class_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE DEFAULT SYSTEM.PA_VARCHAR2_30_TBL_TYPE()
9342 --For Bug 3937716. Calls to PJI and budget version rollup APIs will be skipped if p_rollup_required_flag is N.
9343 ,p_rollup_required_flag IN VARCHAR2 DEFAULT 'Y'
9344 ,p_pji_rollup_required IN VARCHAR2 DEFAULT 'Y' /* Bug 4200168 */
9345 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9346 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9347 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9348 )
9349 IS
9350 --Start of variables used for debugging
9351 l_return_status VARCHAR2(1);
9352 l_msg_count NUMBER := 0;
9353 l_msg_data VARCHAR2(2000);
9354 l_data VARCHAR2(2000);
9355 l_msg_index_out NUMBER;
9356 l_debug_mode VARCHAR2(30);
9357 --End of variables used for debugging
9358
9359 l_module_name VARCHAR2(100):='PAFPPTPB.delete_planning_transactions';
9360 l_delete_task_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
9361 l_delete_assmt_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM.PA_VARCHAR2_1_TBL_TYPE();
9362 l_wp_version_flag VARCHAR2(1);
9363 l_ta_display_flag VARCHAR2(1);
9364
9365 l_period_name_tbl SYSTEM.pa_varchar2_30_tbl_type;
9366 l_start_date_tbl SYSTEM.pa_date_tbl_type;
9367 l_end_date_tbl SYSTEM.pa_date_tbl_type;
9368 l_txn_currency_code_tbl SYSTEM.pa_varchar2_15_tbl_type;
9369 l_txn_raw_cost_tbl SYSTEM.pa_num_tbl_type;
9370 l_txn_burdened_cost_tbl SYSTEM.pa_num_tbl_type;
9371 l_txn_revenue_tbl SYSTEM.pa_num_tbl_type;
9372 l_project_raw_cost_tbl SYSTEM.pa_num_tbl_type;
9373 l_project_burdened_cost_tbl SYSTEM.pa_num_tbl_type;
9374 l_project_revenue_tbl SYSTEM.pa_num_tbl_type;
9375 l_raw_cost_tbl SYSTEM.pa_num_tbl_type;
9376 l_burdened_cost_tbl SYSTEM.pa_num_tbl_type;
9377 l_revenue_tbl SYSTEM.pa_num_tbl_type;
9378 l_cost_rejection_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
9379 l_revenue_rejection_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
9380 l_burden_rejection_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
9381 l_other_rejection_code SYSTEM.pa_varchar2_30_tbl_type;
9382 l_pc_cur_conv_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
9383 l_pfc_cur_conv_rej_code_tbl SYSTEM.pa_varchar2_30_tbl_type;
9384 l_resource_assignment_id_tbl SYSTEM.pa_num_tbl_type;
9385 l_quantity_tbl SYSTEM.pa_num_tbl_type;
9386 l_task_id_tbl SYSTEM.pa_num_tbl_type:=SYSTEM.pa_num_tbl_type();
9387 l_rbs_element_id_tbl SYSTEM.pa_num_tbl_type:=SYSTEM.pa_num_tbl_type();
9388 l_res_class_code_tbl SYSTEM.pa_varchar2_30_tbl_type:=SYSTEM.pa_varchar2_30_tbl_type();
9389 l_rate_based_flag_tbl SYSTEM.pa_varchar2_1_tbl_type:=SYSTEM.pa_varchar2_1_tbl_type();
9390 l_task_id_in_pra_tbl SYSTEM.pa_num_tbl_type;
9391 l_rbs_element_id_in_pra_tbl SYSTEM.pa_num_tbl_type;
9392 l_res_class_code_in_pra_tbl SYSTEM.pa_varchar2_30_tbl_type;
9393 l_rate_based_flag_in_pra_tbl SYSTEM.pa_varchar2_1_tbl_type;
9394 l_ra_id_in_pra_tbl SYSTEM.pa_num_tbl_type;
9395 --Bug 4951422
9396 l_task_assmt_ids_tbl SYSTEM.pa_num_tbl_type;
9397
9398 l_counter NUMBER;
9399 l_ra_index NUMBER;
9400 l_budget_version_id pa_budget_versions.budget_version_id%TYPE;
9401 l_ci_id pa_budget_versions.ci_id%TYPE;
9402 l_exists VARCHAR2(1);
9403 SKIP_LOOP EXCEPTION;
9404 i NUMBER;
9405 l_cntr NUMBER;
9406
9407 l_currency_code_tbl SYSTEM.PA_VARCHAR2_15_TBL_TYPE := SYSTEM.PA_VARCHAR2_15_TBL_TYPE();
9408 l_task_id PA_RESOURCE_ASSIGNMENTS.TASK_ID%TYPE;
9409 l_rbs_element_id PA_RESOURCE_ASSIGNMENTS.RBS_ELEMENT_ID%TYPE;
9410 l_res_class_code PA_RESOURCE_ASSIGNMENTS.RESOURCE_CLASS_CODE%TYPE;
9411 l_rate_based_flag PA_RESOURCE_ASSIGNMENTS.RATE_BASED_FLAG%TYPE;
9412 l_mode varchar2(12) := null; --Bug 4160258
9413
9414
9415 l_project_id pa_projects_all.project_id%TYPE; --Bug 4218331
9416 l_project_currency_code VARCHAR2(30);
9417 l_fp_cols_rec pa_fp_gen_amount_utils.fp_cols; -- IPM
9418
9419 l_cbs_element_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type() ; --bug#16688443
9420
9421 BEGIN
9422
9423 delete pa_resource_asgn_curr_tmp;
9424 x_msg_count := 0;
9425 x_return_status := FND_API.G_RET_STS_SUCCESS;
9426
9427 pa_task_assignment_utils.g_require_progress_rollup := 'N';
9428
9429 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
9430 l_debug_mode := NVL(l_debug_mode, 'N');
9431
9432 -- Set curr function
9433 IF l_debug_mode = 'Y' THEN
9434 pa_debug.set_curr_function(
9435 p_function =>'PA_FP_PLAN_TXN_PUB.delete_planning_transactions'
9436 ,p_debug_mode => l_debug_mode );
9437 END IF;
9438
9439 IF l_debug_mode = 'Y' THEN
9440 /** printing all in params */
9441 pa_debug.g_err_stage := 'p_context=>'|| p_context||']p_task_or_res =>'||p_task_or_res||']';
9442 pa_debug.g_err_stage := pa_debug.g_err_stage||'p_validate_delete_flag=>'||p_validate_delete_flag||']';
9443 pa_debug.g_err_stage := pa_debug.g_err_stage||'p_calling_module=>'||p_calling_module||']';
9444 pa_debug.g_err_stage := pa_debug.g_err_stage||'RollupReqFlg=>'||p_rollup_required_flag||']';
9445 pa_debug.g_err_stage := pa_debug.g_err_stage||'PJiRollupFlg=>'||p_pji_rollup_required||']';
9446 pa_debug.g_err_stage := pa_debug.g_err_stage||'ElemVerTbCt['||p_element_version_id_tbl.count||']';
9447 pa_debug.g_err_stage := pa_debug.g_err_stage||'RaIdCt['||p_resource_assignment_tbl.count||']';
9448 pa_debug.g_err_stage := pa_debug.g_err_stage||'TaskIdCt['||p_task_id_tbl.count||']';
9449 pa_debug.g_err_stage := pa_debug.g_err_stage||'rbsElmCt['||p_rbs_element_id_tbl.count||']';
9450 print_msg(pa_debug.g_err_stage,l_module_name);
9451 End If;
9452 -------------------------------------------------------------------------------------------
9453 -- Extending all table lengths to the permissible values they would take.
9454 -------------------------------------------------------------------------------------------
9455 IF l_debug_mode = 'Y' THEN
9456 pa_debug.g_err_stage:='Extending all table lengths to the permissible values they would take';
9457 print_msg(pa_debug.g_err_stage,l_module_name);
9458 END IF;
9459
9460 IF l_debug_mode = 'Y' THEN
9461 pa_debug.g_err_stage:='Extending all table lengths to the permissible values they would take';
9462 print_msg(pa_debug.g_err_stage,l_module_name);
9463 END IF;
9464
9465 IF p_element_version_id_tbl.COUNT > 0 THEN
9466 l_delete_task_flag_tbl.extend(p_element_version_id_tbl.LAST);
9467 END IF;
9468
9469 IF p_resource_assignment_tbl.COUNT > 0 THEN
9470 l_delete_assmt_flag_tbl.extend(p_resource_assignment_tbl.LAST);
9471 END IF;
9472
9473
9474
9475
9476
9477 ----------------------------------------------------
9478 -- Validating input parameters
9479 ----------------------------------------------------
9480 IF l_debug_mode = 'Y' THEN
9481 pa_debug.g_err_stage:='Validating input parameters';
9482 print_msg(pa_debug.g_err_stage,l_module_name);
9483 END IF;
9484
9485 --Check for mandatory parameters
9486 IF p_context IS NULL OR
9487 p_task_or_res IS NULL THEN
9488
9489 IF l_debug_mode = 'Y' THEN
9490 pa_debug.g_err_stage:='p_context Is'||p_context;
9491 pa_debug.g_err_stage:=pa_debug.g_err_stage||': p_task_or_res Is'||p_task_or_res;
9492 print_msg(pa_debug.g_err_stage,l_module_name);
9493 END IF;
9494
9495 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9496 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
9497 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9498 END IF;
9499
9500 IF p_task_or_res = 'TASKS' AND p_calling_module='PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
9501 IF l_debug_mode = 'Y' THEN
9502 pa_debug.g_err_stage:='calling module is PROCESS_RES_CHG_DERV_CALC_PRMS when p_task_or_res is TASKS';
9503 print_msg(pa_debug.g_err_stage,l_module_name);
9504 END IF;
9505 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9506 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
9507 p_token1 => 'PROCEDURENAME',
9508 p_value1 => 'PAFPPTPB.Delete_planning_transactions');
9509 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9510
9511 END IF;
9512 -- Bug 3546208
9513 IF ( p_task_or_res = 'TASKS'
9514 AND p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
9515 PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST)) THEN
9516 IF l_debug_mode = 'Y' THEN
9517 pa_debug.g_err_stage:='P_task_or_res is Task for B/F Context';
9518 print_msg(pa_debug.g_err_stage,l_module_name);
9519 END IF;
9520 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9521 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
9522 p_token1 => 'PROCEDURENAME',
9523 p_value1 => 'PAFPPTPB.Delete_planning_transactions',
9524 p_token2 => 'STAGE',
9525 p_value2 => 'Invalid Data : B/F - TASK');
9526 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9527 END IF;
9528
9529 IF p_calling_module='PROCESS_RES_CHG_DERV_CALC_PRMS' AND
9530 (p_task_id_tbl.COUNT <> p_resource_assignment_tbl.COUNT OR
9531 p_rbs_element_id_tbl.COUNT <> p_resource_assignment_tbl.COUNT OR
9532 p_rate_based_flag_tbl.COUNT <> p_resource_assignment_tbl.COUNT OR
9533 p_resource_class_code_tbl.COUNT <> p_resource_assignment_tbl.COUNT ) THEN
9534
9535 IF l_debug_mode = 'Y' THEN
9536 pa_debug.g_err_stage:='p_resource_assignment_tbl.COUNT IS '||p_resource_assignment_tbl.COUNT ;
9537 print_msg(pa_debug.g_err_stage,l_module_name);
9538
9539 pa_debug.g_err_stage:='p_task_id_tbl.COUNT IS '||p_task_id_tbl.COUNT ;
9540 print_msg(pa_debug.g_err_stage,l_module_name);
9541
9542 pa_debug.g_err_stage:='p_rbs_element_id_tbl.COUNT IS '||p_rbs_element_id_tbl.COUNT ;
9543 print_msg(pa_debug.g_err_stage,l_module_name);
9544
9545 pa_debug.g_err_stage:='p_rate_based_flag_tbl.COUNT IS '||p_rate_based_flag_tbl.COUNT ;
9546 print_msg(pa_debug.g_err_stage,l_module_name);
9547
9548 pa_debug.g_err_stage:='p_resource_class_code_tbl.COUNT IS '||p_resource_class_code_tbl.COUNT ;
9549 print_msg(pa_debug.g_err_stage,l_module_name);
9550
9551 pa_debug.g_err_stage:='p_resource_assignment_tbl.COUNT IS '||p_resource_assignment_tbl.COUNT ;
9552 print_msg(pa_debug.g_err_stage,l_module_name);
9553
9554 END IF;
9555 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9556 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
9557 p_token1 => 'PROCEDURENAME',
9558 p_value1 => 'PAFPPTPB.Delete_planning_transactions');
9559 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9560
9561 END IF;
9562
9563
9564 --Throw an error if the input tables do not have same no of elements
9565 IF (p_task_or_res = 'TASKS' AND
9566 p_element_version_id_tbl.count =0) OR
9567 (p_task_or_res = 'ASSIGNMENT' AND
9568 p_resource_assignment_tbl.count =0) THEN
9569
9570 IF l_debug_mode = 'Y' THEN
9571 pa_debug.g_err_stage:='The input table is empty. returning';
9572 print_msg(pa_debug.g_err_stage,l_module_name);
9573 pa_debug.reset_curr_function;
9574 END IF;
9575 RETURN;
9576 END IF;
9577
9578 IF p_calling_module='PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
9579 l_ra_id_in_pra_tbl :=p_resource_assignment_tbl;
9580 l_task_id_in_pra_tbl :=p_task_id_tbl;
9581 l_rbs_element_id_in_pra_tbl :=p_rbs_element_id_tbl;
9582 l_res_class_code_in_pra_tbl :=p_resource_class_code_tbl;
9583 l_rate_based_flag_in_pra_tbl :=p_rate_based_flag_tbl;
9584 END IF;
9585
9586 --Bug 4951422. Initialize these tbls to avoid "ORA-06531: Reference to uninitialized collection" error
9587 --when the element version id tbl passed do not have corresponding resource assignment ids
9588 l_resource_assignment_id_tbl := SYSTEM.pa_num_tbl_type();
9589 l_ra_id_in_pra_tbl := SYSTEM.pa_num_tbl_type();
9590
9591 /** when the context is Task assignment Call the Validation API
9592 * Modified Delete logic for Bug 3808720. Since Validate Delete Assignments API
9593 * needs to be called for WORKPLAN context as well. Merginng Delete Logic for
9594 * G_CALLING_MODULE_TASK and G_CALLING_MODULE_WORKPLAN below.
9595 */
9596 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
9597 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN --{
9598
9599 IF l_debug_mode = 'Y' THEN
9600 pa_debug.g_err_stage:='The calling context is task assignment. Calling the validation API';
9601 print_msg(pa_debug.g_err_stage,l_module_name);
9602 END IF;
9603
9604 PA_TASK_ASSIGNMENT_UTILS.VALIDATE_DELETE_ASSIGNMENT
9605 ( p_context => p_context
9606 ,p_calling_context => p_calling_context -- Added for Bug 6856934
9607 ,p_task_or_res => p_task_or_res
9608 ,p_elem_ver_id_tbl => p_element_version_id_tbl
9609 ,p_task_name_tbl => p_task_name_tbl
9610 ,p_task_number_tbl => p_task_number_tbl
9611 ,p_resource_assignment_id_tbl => p_resource_assignment_tbl
9612 ,x_delete_task_flag_tbl => l_delete_task_flag_tbl
9613 ,x_delete_asgmt_flag_tbl => l_delete_assmt_flag_tbl
9614 ,x_task_assmt_ids_tbl => l_task_assmt_ids_tbl --Bug 4951422
9615 ,x_return_status => x_return_status);
9616
9617 IF l_debug_mode = 'Y' THEN
9618 pa_debug.g_err_stage:= 'After calling Validate OutParms: l_delete_task_flag_tblCount[';
9619 pa_debug.g_err_stage:= pa_debug.g_err_stage||l_delete_task_flag_tbl.count||']';
9620 pa_debug.g_err_stage:= pa_debug.g_err_stage||'l_delete_assmt_flag_tblcount[';
9621 pa_debug.g_err_stage:= pa_debug.g_err_stage||l_delete_assmt_flag_tbl.count||']';
9622 pa_debug.g_err_stage:= pa_debug.g_err_stage||'l_task_assmt_ids_tblCount[';
9623 pa_debug.g_err_stage:= pa_debug.g_err_stage||l_task_assmt_ids_tbl.count||']';
9624 pa_debug.g_err_stage:= pa_debug.g_err_stage||'RetSts['||x_return_status||']';
9625 print_msg(pa_debug.g_err_stage,l_module_name);
9626 End If;
9627
9628 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9629 IF l_debug_mode = 'Y' THEN
9630 pa_debug.g_err_stage:='The calling context is task assignment. Calling the validation API';
9631 print_msg(pa_debug.g_err_stage,l_module_name);
9632 END IF;
9633 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9634 End If;
9635 END IF; --}
9636
9637 /* Bug fix:5349668: Get project,budget,ciid details upfront based on
9638 * in put params, If budget version is null then just return as there
9639 * nothing to delete any budget lines or resource assignments.
9640 * Note: executing this sql at many places to get budget version is failing with
9641 * ORA-No data found error
9642 */ --{
9643 IF (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
9644 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN) THEN --{
9645
9646 If p_task_or_res = 'TASKS' --- bug 6076066: added the checking of p_task_res to the existing IF loop
9647 and p_element_version_id_tbl.count > 0
9648 and NVL(p_element_version_id_tbl(1),0) <> 0
9649 and p_element_version_id_tbl(1) <> fnd_api.g_miss_num then
9650
9651 /* Bug fix: LOOP is required to get the budget version id. when multiple tasks are deleted
9652 * some of the task may not have assignments, but some may have assignments
9653 * without loop, the process skips all the records
9654 */
9655
9656 FOR i IN p_element_version_id_tbl.FIRST .. p_element_version_id_tbl.LAST LOOP
9657 l_cntr := i;
9658 BEGIN
9659 IF l_debug_mode = 'Y' THEN
9660 pa_debug.g_err_stage:=l_cntr||'..Getting budget version id from p_element_version_id_tbl';
9661 pa_debug.g_err_stage:=pa_debug.g_err_stage||'['||p_element_version_id_tbl(l_cntr)||']';
9662 print_msg(pa_debug.g_err_stage,l_module_name);
9663 END IF;
9664 SELECT pbv.project_id
9665 ,pbv.budget_version_id
9666 ,pbv.ci_id
9667 INTO l_project_id
9668 ,l_budget_version_id
9669 ,l_ci_id
9670 FROM pa_resource_assignments pra
9671 ,pa_budget_Versions pbv
9672 WHERE pbv.budget_version_id=pra.budget_version_id
9673 AND pbv.wp_version_flag='Y'
9674 AND pra.wbs_element_version_id=p_element_version_id_tbl(l_cntr)
9675 AND rownum < 2 ;
9676
9677 EXIT;
9678 EXCEPTION
9679 WHEN NO_DATA_FOUND THEN
9680 IF l_debug_mode = 'Y' THEN
9681 pa_debug.g_err_stage:='No Data Found: No budget Exists for this Task Element Version Ids';
9682 print_msg(pa_debug.g_err_stage,l_module_name);
9683 END IF;
9684 NULL;
9685 END;
9686 END LOOP;
9687
9688 /* check if any planning resource exists for l_task_assmt_ids_tbl passed from
9689 * validate_delete_assignment api.
9690 */
9691 IF l_budget_version_id is NULL and
9692 l_task_assmt_ids_tbl is NOT NULL and -- Bug 5408333 fix - ORA-06531: Reference to uninitialized collection
9693 l_task_assmt_ids_tbl.COUNT > 0 Then
9694 BEGIN
9695 IF l_debug_mode = 'Y' THEN
9696 pa_debug.g_err_stage:='2..Getting budget version id from l_task_assmt_ids_tbl';
9697 pa_debug.g_err_stage:=pa_debug.g_err_stage||'['||l_task_assmt_ids_tbl(1)||']';
9698 print_msg(pa_debug.g_err_stage,l_module_name);
9699 END IF;
9700 SELECT pbv.project_id
9701 ,pbv.budget_version_id
9702 ,pbv.ci_id
9703 INTO l_project_id
9704 ,l_budget_version_id
9705 ,l_ci_id
9706 FROM pa_resource_assignments pra
9707 ,pa_budget_Versions pbv
9708 WHERE pbv.budget_version_id=pra.budget_version_id
9709 AND pra.resource_assignment_id =l_task_assmt_ids_tbl(1);
9710 EXCEPTION
9711 WHEN NO_DATA_FOUND THEN
9712 IF l_debug_mode = 'Y' THEN
9713 pa_debug.g_err_stage:='No Data Found: No budget Exists for this Task Assignment Ids';
9714 print_msg(pa_debug.g_err_stage,l_module_name);
9715 END IF;
9716 NULL;
9717 END;
9718
9719 End If;
9720 END IF; --}
9721 END IF; -- Bug 5408333 fix - To handle FINPLAN case in which the above
9722 -- 2 SQL statements will not populate l_budget_version_id
9723
9724 IF l_budget_version_id is NULL -- Bug 5408333
9725 and p_resource_assignment_tbl.COUNT > 0
9726 and NVL(p_resource_assignment_tbl(1),0) <> 0
9727 and p_resource_assignment_tbl(1) <> fnd_api.g_miss_num Then
9728
9729 BEGIN
9730
9731 IF l_debug_mode = 'Y' THEN
9732 pa_debug.g_err_stage:='2..Getting budget version id from p_resource_assignment_tbl';
9733 pa_debug.g_err_stage:=pa_debug.g_err_stage||'['||p_resource_assignment_tbl(1)||']';
9734 print_msg(pa_debug.g_err_stage,l_module_name);
9735 END IF;
9736 SELECT pbv.project_id
9737 ,pbv.budget_version_id
9738 ,pbv.ci_id
9739 INTO l_project_id
9740 ,l_budget_version_id
9741 ,l_ci_id
9742 FROM pa_resource_assignments pra
9743 ,pa_budget_Versions pbv
9744 WHERE pbv.budget_version_id=pra.budget_version_id
9745 AND pra.resource_assignment_id =p_resource_assignment_tbl(1);
9746 EXCEPTION
9747 WHEN NO_DATA_FOUND THEN
9748 IF l_debug_mode = 'Y' THEN
9749 pa_debug.g_err_stage:='No Data Found: No budget Exists for this resource Assignment Ids';
9750 print_msg(pa_debug.g_err_stage,l_module_name);
9751 END IF;
9752 NULL;
9753 END;
9754
9755 END IF; --}
9756
9757 IF l_debug_mode = 'Y' THEN
9758 pa_debug.g_err_stage:='ProjId['||l_project_id||']BudgetVers['||l_budget_version_id||']Ciid['||l_ci_id||']';
9759 print_msg(pa_debug.g_err_stage,l_module_name);
9760 END IF;
9761
9762 If l_budget_version_id is NULL Then
9763 IF l_debug_mode = 'Y' THEN
9764 pa_debug.g_err_stage:='Exiting delete_planning_transactions as No budget version exists';
9765 print_msg(pa_debug.g_err_stage,l_module_name);
9766 pa_debug.reset_curr_function;
9767 END IF;
9768 RETURN;
9769 End If;
9770 /* End of Bug fix:5349668: */
9771
9772 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK OR
9773 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
9774
9775 IF p_task_or_res = 'TASKS' THEN
9776
9777 IF l_delete_task_flag_tbl.count=0 THEN
9778 IF l_debug_mode = 'Y' THEN
9779 pa_debug.g_err_stage:='No elements in the l_delete_task_flag_tbl';
9780 print_msg(pa_debug.g_err_stage,l_module_name);
9781 pa_debug.reset_curr_function;
9782 END IF;
9783 RETURN;
9784 END IF;
9785
9786 IF l_delete_task_flag_tbl.count<>p_element_version_id_tbl.count THEN
9787 IF l_debug_mode = 'Y' THEN
9788 pa_debug.g_err_stage:='Num elements in l_delete_task_flag_tbl, p_element_version_id_tbl dont match';
9789 print_msg(pa_debug.g_err_stage,l_module_name);
9790 END IF;
9791 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9792 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
9793 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9794 END IF;
9795
9796 --Bug 4951422. Validate_Delete_Assignment returns the correct resource assignments that should be deleted.
9797 --Note:
9798 --that wbs_elememnt_version_id will be populated only for Workplan versions and hence all the checks done in
9799 --the commented SQL are already done in that API
9800 IF l_task_assmt_ids_tbl.COUNT > 0 Then --{
9801 IF l_debug_mode = 'Y' THEN
9802 pa_debug.g_err_stage:='Deleting all budget lines based on l_task_assmt_ids_tbl';
9803 print_msg(pa_debug.g_err_stage,l_module_name);
9804 END IF;
9805 FORALL i IN 1..l_task_assmt_ids_tbl.COUNT
9806 DELETE
9807 FROM pa_budget_lines pbl
9808 WHERE pbl.resource_assignment_id=l_task_assmt_ids_tbl(i)
9809 RETURNING
9810 pbl.period_name,
9811 pbl.start_date,
9812 pbl.end_date,
9813 pbl.txn_currency_code,
9814 -pbl.txn_raw_cost,
9815 -pbl.txn_burdened_cost,
9816 -pbl.txn_revenue,
9817 -pbl.project_raw_cost,
9818 -pbl.project_burdened_cost,
9819 -pbl.project_revenue,
9820 -pbl.raw_cost,
9821 -pbl.burdened_cost,
9822 -pbl.revenue,
9823 -pbl.quantity,
9824 pbl.cost_rejection_code ,
9825 pbl.revenue_rejection_code ,
9826 pbl.burden_rejection_code ,
9827 pbl.other_rejection_code ,
9828 pbl.pc_cur_conv_rejection_code,
9829 pbl.pfc_cur_conv_rejection_code,
9830 pbl.resource_assignment_id
9831 BULK COLLECT INTO
9832 l_period_name_tbl,
9833 l_start_date_tbl,
9834 l_end_date_tbl,
9835 l_txn_currency_code_tbl,
9836 l_txn_raw_cost_tbl,
9837 l_txn_burdened_cost_tbl,
9838 l_txn_revenue_tbl,
9839 l_project_raw_cost_tbl,
9840 l_project_burdened_cost_tbl,
9841 l_project_revenue_tbl,
9842 l_raw_cost_tbl,
9843 l_burdened_cost_tbl,
9844 l_revenue_tbl,
9845 l_quantity_tbl,
9846 l_cost_rejection_code_tbl,
9847 l_revenue_rejection_code_tbl,
9848 l_burden_rejection_code_tbl,
9849 l_other_rejection_code,
9850 l_pc_cur_conv_rej_code_tbl,
9851 l_pfc_cur_conv_rej_code_tbl,
9852 l_resource_assignment_id_tbl;
9853
9854 IF l_debug_mode = 'Y' THEN
9855 pa_debug.g_err_stage:='Deleting all resource assignments for the tasks for which the fla is passed as Y';
9856 print_msg(pa_debug.g_err_stage,l_module_name);
9857 END IF;
9858
9859 -- IPM changes - populate tmp table to use for deletion later
9860 IF l_resource_assignment_id_tbl.COUNT > 0 THEN
9861 FORALL i IN l_resource_assignment_id_tbl.first ..
9862 l_resource_assignment_id_tbl.last
9863 INSERT INTO pa_resource_asgn_curr_tmp
9864 (RA_TXN_ID
9865 ,RESOURCE_ASSIGNMENT_ID
9866 ,TXN_CURRENCY_CODE
9867 ,DELETE_FLAG
9868 )
9869 SELECT pa_resource_asgn_curr_s.nextval
9870 ,l_resource_assignment_id_tbl(i)
9871 ,l_txn_currency_code_tbl(i)
9872 ,'Y'
9873 FROM DUAL;
9874 /*Start bug#16688443 */
9875 l_cbs_element_id_tbl := SYSTEM.pa_num_tbl_type();
9876 l_cbs_element_id_tbl.extend(l_resource_assignment_id_tbl.last);
9877 FOR i IN l_resource_assignment_id_tbl.first..l_resource_assignment_id_tbl.last LOOP
9878 select cbs_element_id into l_cbs_element_id_tbl(i) from pa_resource_assignments where resource_assignment_id = l_resource_assignment_id_tbl (i);
9879 END LOOP; /*End bug#16688443 */
9880
9881 END IF;
9882
9883 --Bug 4951422. Validate_Delete_Assignment returns the correct resource assignments that should be deleted.
9884 --Note:
9885 --that wbs_elememnt_version_id will be populated only for Workplan versions and hence all the checks done in
9886 --the commented SQL are already done in that API
9887 FORALL i IN 1..l_task_assmt_ids_tbl.COUNT
9888 DELETE
9889 FROM pa_resource_assignments pra
9890 WHERE resource_assignment_id=l_task_assmt_ids_tbl(i)
9891 RETURNING
9892 pra.resource_assignment_id,
9893 pra.task_id,
9894 pra.rbs_element_id,
9895 pra.resource_class_code,
9896 pra.rate_based_flag
9897 BULK COLLECT INTO
9898 l_ra_id_in_pra_tbl,
9899 l_task_id_in_pra_tbl,
9900 l_rbs_element_id_in_pra_tbl,
9901 l_res_class_code_in_pra_tbl,
9902 l_rate_based_flag_in_pra_tbl;
9903
9904 -- IPM changes - populate tmp table to use for deletion later
9905 -- hr_utility.trace('RM DEL4');
9906 IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
9907 FORALL i IN l_ra_id_in_pra_tbl.first ..
9908 l_ra_id_in_pra_tbl.last
9909 INSERT INTO pa_resource_asgn_curr_tmp
9910 (RA_TXN_ID
9911 ,RESOURCE_ASSIGNMENT_ID
9912 -- ,TXN_CURRENCY_CODE
9913 ,DELETE_FLAG
9914 )
9915 SELECT pa_resource_asgn_curr_s.nextval
9916 ,l_ra_id_in_pra_tbl(i)
9917 -- ,l_txn_currency_code_tbl(i)
9918 ,'Y'
9919 FROM DUAL;
9920 END IF;
9921 End if; --}
9922
9923 ELSIF p_task_or_res = 'ASSIGNMENT' THEN
9924
9925 IF l_delete_assmt_flag_tbl.count=0 THEN
9926 IF l_debug_mode = 'Y' THEN
9927 pa_debug.g_err_stage:='No elements in the l_delete_assmt_flag_tbl';
9928 print_msg(pa_debug.g_err_stage,l_module_name);
9929 pa_debug.reset_curr_function;
9930 END IF;
9931 RETURN;
9932 END IF;
9933
9934 IF l_delete_assmt_flag_tbl.count<>p_resource_assignment_tbl.count THEN
9935 IF l_debug_mode = 'Y' THEN
9936 pa_debug.g_err_stage:='No of elements in l_delete_task_flag_tbl ';
9937 pa_debug.g_err_stage:=pa_debug.g_err_stage||'and p_resource_assignment_tbl dont match';
9938 print_msg(pa_debug.g_err_stage,l_module_name);
9939 END IF;
9940 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9941 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
9942 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
9943 END IF;
9944
9945 IF l_debug_mode = 'Y' THEN
9946 pa_debug.g_err_stage:='Deleting all budget lines for the res assmts for Assignment Context';
9947 print_msg(pa_debug.g_err_stage,l_module_name);
9948 END IF;
9949
9950 FORALL i IN l_delete_assmt_flag_tbl.first..l_delete_assmt_flag_tbl.last
9951 DELETE
9952 FROM pa_budget_lines pbl
9953 WHERE resource_assignment_id=p_resource_assignment_tbl(i)
9954 AND l_delete_assmt_flag_tbl(i)='Y'
9955 AND ( nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' OR
9956 (init_quantity is NULL AND
9957 txn_init_raw_cost is NULL AND
9958 txn_init_burdened_cost is NULL AND
9959 txn_init_revenue is NULL)
9960 )
9961 RETURNING
9962 pbl.period_name,
9963 pbl.start_date,
9964 pbl.end_date,
9965 pbl.txn_currency_code,
9966 -pbl.txn_raw_cost,
9967 -pbl.txn_burdened_cost,
9968 -pbl.txn_revenue,
9969 -pbl.project_raw_cost,
9970 -pbl.project_burdened_cost,
9971 -pbl.project_revenue,
9972 -pbl.raw_cost,
9973 -pbl.burdened_cost,
9974 -pbl.revenue,
9975 -pbl.quantity,
9976 pbl.cost_rejection_code ,
9977 pbl.revenue_rejection_code ,
9978 pbl.burden_rejection_code ,
9979 pbl.other_rejection_code ,
9980 pbl.pc_cur_conv_rejection_code,
9981 pbl.pfc_cur_conv_rejection_code,
9982 pbl.resource_assignment_id
9983 BULK COLLECT INTO
9984 l_period_name_tbl,
9985 l_start_date_tbl,
9986 l_end_date_tbl,
9987 l_txn_currency_code_tbl,
9988 l_txn_raw_cost_tbl,
9989 l_txn_burdened_cost_tbl,
9990 l_txn_revenue_tbl,
9991 l_project_raw_cost_tbl,
9992 l_project_burdened_cost_tbl,
9993 l_project_revenue_tbl,
9994 l_raw_cost_tbl,
9995 l_burdened_cost_tbl,
9996 l_revenue_tbl,
9997 l_quantity_tbl,
9998 l_cost_rejection_code_tbl,
9999 l_revenue_rejection_code_tbl,
10000 l_burden_rejection_code_tbl,
10001 l_other_rejection_code,
10002 l_pc_cur_conv_rej_code_tbl,
10003 l_pfc_cur_conv_rej_code_tbl,
10004 l_resource_assignment_id_tbl;
10005
10006 IF l_debug_mode = 'Y' THEN
10007 pa_debug.g_err_stage:='Deleting all resource assignments for the tasks for which the fla is passed as Y';
10008 print_msg(pa_debug.g_err_stage,l_module_name);
10009 END IF;
10010
10011 -- IPM changes - populate tmp table to use for deletion later
10012 -- hr_utility.trace('RM DEL6');
10013 IF l_resource_assignment_id_tbl.COUNT > 0 THEN
10014 FORALL i IN l_resource_assignment_id_tbl.first ..
10015 l_resource_assignment_id_tbl.last
10016 INSERT INTO pa_resource_asgn_curr_tmp
10017 (RA_TXN_ID
10018 ,RESOURCE_ASSIGNMENT_ID
10019 -- ,TXN_CURRENCY_CODE
10020 ,DELETE_FLAG
10021 )
10022 SELECT pa_resource_asgn_curr_s.nextval
10023 ,l_resource_assignment_id_tbl(i)
10024 -- ,l_txn_currency_code_tbl(i)
10025 ,'Y'
10026 FROM DUAL;
10027
10028 /*Start bug#16688443 */
10029 l_cbs_element_id_tbl := SYSTEM.pa_num_tbl_type();
10030 l_cbs_element_id_tbl.extend(l_resource_assignment_id_tbl.last);
10031 FOR i IN l_resource_assignment_id_tbl.first..l_resource_assignment_id_tbl.last LOOP
10032 select cbs_element_id into l_cbs_element_id_tbl(i) from pa_resource_assignments where resource_assignment_id = l_resource_assignment_id_tbl (i);
10033 END LOOP; /*End bug#16688443 */
10034 END IF;
10035
10036 IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
10037
10038 FORALL i IN l_delete_assmt_flag_tbl.first..l_delete_assmt_flag_tbl.last
10039 DELETE
10040 FROM pa_resource_assignments pra
10041 WHERE resource_assignment_id=p_resource_assignment_tbl(i)
10042 AND l_delete_assmt_flag_tbl(i)='Y'
10043 RETURNING
10044 pra.resource_assignment_id,
10045 pra.task_id,
10046 pra.rbs_element_id,
10047 pra.resource_class_code,
10048 pra.rate_based_flag
10049 BULK COLLECT INTO
10050 l_ra_id_in_pra_tbl,
10051 l_task_id_in_pra_tbl,
10052 l_rbs_element_id_in_pra_tbl,
10053 l_res_class_code_in_pra_tbl,
10054 l_rate_based_flag_in_pra_tbl;
10055
10056 -- IPM changes - populate tmp table to use for deletion later
10057 -- hr_utility.trace('RM DEL3');
10058 IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
10059 FORALL i IN l_ra_id_in_pra_tbl.first ..
10060 l_ra_id_in_pra_tbl.last
10061 INSERT INTO pa_resource_asgn_curr_tmp
10062 (RA_TXN_ID
10063 ,RESOURCE_ASSIGNMENT_ID
10064 -- ,TXN_CURRENCY_CODE
10065 ,DELETE_FLAG
10066 )
10067 SELECT pa_resource_asgn_curr_s.nextval
10068 ,l_ra_id_in_pra_tbl(i)
10069 -- ,l_project_currency_code
10070 ,'Y'
10071 FROM DUAL;
10072 END IF;
10073 END IF; -- IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
10074
10075 END IF;
10076
10077 ELSE --The context is not Task Assignment
10078 -- or Workplan -- Bug 3808720
10079
10080 IF p_task_or_res = 'TASKS' THEN
10081
10082 IF p_element_version_id_tbl.count=0 THEN
10083 IF l_debug_mode = 'Y' THEN
10084 pa_debug.g_err_stage:='No elements in the p_element_version_id_tbl';
10085 print_msg(pa_debug.g_err_stage,l_module_name);
10086 pa_debug.reset_curr_function;
10087 END IF;
10088 RETURN;
10089 END IF;
10090
10091
10092 IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET OR
10093 p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST THEN
10094 l_wp_version_flag:='N';
10095 l_ta_display_flag:=null;
10096 /* ELSIF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN THEN
10097 l_wp_version_flag:='Y';
10098 l_ta_display_flag:='N'; */ --Bug 3808720
10099 END IF;
10100
10101 IF l_debug_mode = 'Y' THEN
10102 pa_debug.g_err_stage:='l_wp_version_flag IS '||l_wp_version_flag;
10103 print_msg(pa_debug.g_err_stage,l_module_name);
10104 END IF;
10105
10106
10107 IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
10108 PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
10109
10110 -- Bug Fix: 4569365. Removed MRC code.
10111 null;
10112 END IF;
10113
10114
10115 If l_budget_version_id is NOT NULL Then --Bug fix:5349668 --{
10116 IF l_debug_mode = 'Y' THEN
10117 pa_debug.g_err_stage:='2..Deleting budget lines based on Task element Version Ids';
10118 print_msg(pa_debug.g_err_stage,l_module_name);
10119 END IF;
10120 FORALL i IN p_element_version_id_tbl.first..p_element_version_id_tbl.last
10121 DELETE
10122 FROM pa_budget_lines pbl
10123 WHERE pbl.resource_assignment_id IN (SELECT pra.resource_assignment_id
10124 FROM pa_resource_assignments pra,
10125 pa_budget_versions pbv
10126 WHERE pra.budget_Version_id=pbv.budget_Version_id
10127 AND nvl(pbv.wp_version_flag,'N')=l_wp_version_flag
10128 AND pra.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
10129 AND pbv.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
10130 AND pra.wbs_element_version_id=p_element_version_id_tbl(i)
10131 AND nvl(l_ta_display_flag , '-99')=nvl(ta_display_flag,'-99'))
10132 AND pbl.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
10133 RETURNING
10134 pbl.period_name,
10135 pbl.start_date,
10136 pbl.end_date,
10137 pbl.txn_currency_code,
10138 -pbl.txn_raw_cost,
10139 -pbl.txn_burdened_cost,
10140 -pbl.txn_revenue,
10141 -pbl.project_raw_cost,
10142 -pbl.project_burdened_cost,
10143 -pbl.project_revenue,
10144 -pbl.raw_cost,
10145 -pbl.burdened_cost,
10146 -pbl.revenue,
10147 -pbl.quantity,
10148 pbl.cost_rejection_code ,
10149 pbl.revenue_rejection_code ,
10150 pbl.burden_rejection_code ,
10151 pbl.other_rejection_code ,
10152 pbl.pc_cur_conv_rejection_code,
10153 pbl.pfc_cur_conv_rejection_code,
10154 pbl.resource_assignment_id
10155 BULK COLLECT INTO
10156 l_period_name_tbl,
10157 l_start_date_tbl,
10158 l_end_date_tbl,
10159 l_txn_currency_code_tbl,
10160 l_txn_raw_cost_tbl,
10161 l_txn_burdened_cost_tbl,
10162 l_txn_revenue_tbl,
10163 l_project_raw_cost_tbl,
10164 l_project_burdened_cost_tbl,
10165 l_project_revenue_tbl,
10166 l_raw_cost_tbl,
10167 l_burdened_cost_tbl,
10168 l_revenue_tbl,
10169 l_quantity_tbl,
10170 l_cost_rejection_code_tbl,
10171 l_revenue_rejection_code_tbl,
10172 l_burden_rejection_code_tbl,
10173 l_other_rejection_code,
10174 l_pc_cur_conv_rej_code_tbl,
10175 l_pfc_cur_conv_rej_code_tbl,
10176 l_resource_assignment_id_tbl;
10177
10178 -- IPM changes - populate tmp table to use for deletion later
10179 -- hr_utility.trace('RM DEL5');
10180 IF l_resource_assignment_id_tbl.COUNT > 0 THEN
10181 FORALL i IN l_resource_assignment_id_tbl.first ..
10182 l_resource_assignment_id_tbl.last
10183 INSERT INTO pa_resource_asgn_curr_tmp
10184 (RA_TXN_ID
10185 ,RESOURCE_ASSIGNMENT_ID
10186 -- ,TXN_CURRENCY_CODE
10187 ,DELETE_FLAG
10188 )
10189 SELECT pa_resource_asgn_curr_s.nextval
10190 ,l_resource_assignment_id_tbl(i)
10191 -- ,l_txn_currency_code_tbl(i)
10192 ,'Y'
10193 FROM DUAL;
10194
10195 /*Start bug#16688443 */
10196 l_cbs_element_id_tbl := SYSTEM.pa_num_tbl_type();
10197 l_cbs_element_id_tbl.extend(l_resource_assignment_id_tbl.last);
10198 FOR i IN l_resource_assignment_id_tbl.first..l_resource_assignment_id_tbl.last LOOP
10199 select cbs_element_id into l_cbs_element_id_tbl(i) from pa_resource_assignments where resource_assignment_id = l_resource_assignment_id_tbl (i);
10200 END LOOP; /*End bug#16688443 */
10201
10202 END IF;
10203 End If; --}
10204
10205 IF l_debug_mode = 'Y' THEN
10206 pa_debug.g_err_stage:='Deleting all res assmts for which the flag is passed as Y';
10207 print_msg(pa_debug.g_err_stage,l_module_name);
10208 END IF;
10209
10210 If p_element_version_id_tbl.COUNT > 0 AND l_budget_version_id is NOT NULL Then --Bug fix:5349668 --{
10211 FORALL i IN p_element_version_id_tbl.first..p_element_version_id_tbl.last
10212 DELETE
10213 FROM pa_resource_assignments pra
10214 WHERE pra.wbs_element_version_id=p_element_version_id_tbl(i)
10215 AND EXISTS (SELECT 'X'
10216 FROM pa_budget_Versions pbv
10217 WHERE pbv.budget_version_id=pra.budget_Version_id
10218 AND pbv.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
10219 AND nvl(pbv.wp_version_flag,'N')=l_wp_version_flag
10220 AND nvl(l_ta_display_flag , '-99')=nvl(ta_display_flag,'-99'))
10221 AND pra.budget_Version_id = l_budget_version_id--Bug#4548675--Bug 4218331
10222 RETURNING
10223 pra.resource_assignment_id,
10224 pra.task_id,
10225 pra.rbs_element_id,
10226 pra.resource_class_code,
10227 pra.rate_based_flag
10228 BULK COLLECT INTO
10229 l_ra_id_in_pra_tbl,
10230 l_task_id_in_pra_tbl,
10231 l_rbs_element_id_in_pra_tbl,
10232 l_res_class_code_in_pra_tbl,
10233 l_rate_based_flag_in_pra_tbl;
10234
10235 -- IPM changes - populate tmp table to use for deletion later
10236 -- hr_utility.trace('RM DEL8');
10237 IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
10238 FORALL i IN l_ra_id_in_pra_tbl.first ..
10239 l_ra_id_in_pra_tbl.last
10240 INSERT INTO pa_resource_asgn_curr_tmp
10241 (RA_TXN_ID
10242 ,RESOURCE_ASSIGNMENT_ID
10243 -- ,TXN_CURRENCY_CODE
10244 ,DELETE_FLAG
10245 )
10246 SELECT pa_resource_asgn_curr_s.nextval
10247 ,l_ra_id_in_pra_tbl(i)
10248 -- ,l_project_currency_code
10249 ,'Y'
10250 FROM DUAL;
10251 END IF;
10252 End If; --}
10253
10254
10255 ELSIF p_task_or_res = 'ASSIGNMENT' THEN
10256
10257 IF p_resource_assignment_tbl.count=0 THEN
10258 IF l_debug_mode = 'Y' THEN
10259 pa_debug.g_err_stage:='No elements in the p_resource_assignment_tbl';
10260 print_msg(pa_debug.g_err_stage,l_module_name);
10261 pa_debug.reset_curr_function;
10262 END IF;
10263 RETURN;
10264 END IF;
10265
10266 l_currency_code_tbl.extend(p_resource_assignment_tbl.COUNT);
10267
10268 IF p_currency_code_tbl.COUNT > 0 THEN --If Currnecy Code is Passed.
10269 IF p_resource_assignment_tbl.count <> p_currency_code_tbl.COUNT THEN --Count Should be equal to ra id count
10270 IF l_debug_mode = 'Y' THEN
10271 pa_debug.g_err_stage:='Count Mismatch for currency code and Reource Assignment';
10272 print_msg(pa_debug.g_err_stage,l_module_name);
10273 END IF;
10274 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10275 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
10276 p_token1 => 'PROCEDURENAME',
10277 p_value1 => 'PAFPPTPB.Delete_planning_transactions',
10278 p_token2 => 'STAGE',
10279 p_value2 => 'Curr Code - RA Mismatch');
10280 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10281 END IF;
10282
10283 l_currency_code_tbl := p_currency_code_tbl;
10284
10285 END IF;
10286
10287 --Checking for the existence of budget lines for the element version ids passed. Bug 3589130
10288 IF p_validate_delete_flag='Y' THEN
10289
10290 IF l_debug_mode = 'Y' THEN
10291 pa_debug.g_err_stage:='Checking for the existence of budget lines';
10292 print_msg(pa_debug.g_err_stage,l_module_name);
10293 END IF;
10294
10295 BEGIN
10296 FOR i IN p_resource_assignment_tbl.first..p_resource_assignment_tbl.last LOOP
10297
10298 l_exists:='N';
10299
10300 BEGIN
10301 SELECT 'Y'
10302 INTO l_exists
10303 FROM DUAL
10304 WHERE EXISTS (SELECT 'X'
10305 FROM pa_budget_lines pbl,
10306 pa_resource_assignments pra
10307 WHERE pra.resource_assignment_id=p_resource_assignment_tbl(i)
10308 AND pbl.budget_Version_id=pra.budget_version_id
10309 AND pbl.resource_assignment_id=pra.resource_assignment_id);
10310 EXCEPTION
10311 WHEN NO_DATA_FOUND THEN
10312 l_exists:='N';
10313 END;
10314
10315 IF l_exists='Y' THEN
10316
10317 RAISE SKIP_LOOP;
10318
10319 END IF;
10320
10321 END LOOP;
10322
10323 EXCEPTION
10324 WHEN SKIP_LOOP THEN
10325 IF l_debug_mode = 'Y' THEN
10326 pa_debug.g_err_stage:='Budget lines exist for the resource assignment id passed '||p_resource_assignment_tbl(i);
10327 print_msg(pa_debug.g_err_stage,l_module_name);
10328 END IF;
10329 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10330 p_msg_name => 'PA_FP_AMT_EXISTS_FOR_PLAN_ELEM');
10331 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10332 END;
10333
10334 END IF ; --IF p_validate_delete_flag='Y' THEN
10335
10336 IF p_context in (PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_BUDGET,
10337 PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_FORECAST) THEN
10338 NULL;
10339 -- Bug Fix: 4569365. Removed MRC code.
10340 END IF;
10341
10342 IF l_debug_mode = 'Y' THEN
10343 pa_debug.g_err_stage:='Deleting all budget lines ';
10344 print_msg(pa_debug.g_err_stage,l_module_name);
10345 END IF;
10346
10347 FORALL i IN p_resource_assignment_tbl.first..p_resource_assignment_tbl.last
10348 DELETE
10349 FROM pa_budget_lines pbl
10350 WHERE pbl.resource_assignment_id=p_resource_assignment_tbl(i)
10351 AND ( nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' OR
10352 (init_quantity is NULL AND
10353 txn_init_raw_cost is NULL AND
10354 txn_init_burdened_cost is NULL AND
10355 txn_init_revenue is NULL)
10356 )
10357 AND nvl(l_currency_code_tbl(i),pbl.txn_currency_code) = pbl.txn_currency_code -- 3719918
10358 RETURNING
10359 pbl.period_name,
10360 pbl.start_date,
10361 pbl.end_date,
10362 pbl.txn_currency_code,
10363 -pbl.txn_raw_cost,
10364 -pbl.txn_burdened_cost,
10365 -pbl.txn_revenue,
10366 -pbl.project_raw_cost,
10367 -pbl.project_burdened_cost,
10368 -pbl.project_revenue,
10369 -pbl.raw_cost,
10370 -pbl.burdened_cost,
10371 -pbl.revenue,
10372 -pbl.quantity,
10373 pbl.cost_rejection_code ,
10374 pbl.revenue_rejection_code ,
10375 pbl.burden_rejection_code ,
10376 pbl.other_rejection_code ,
10377 pbl.pc_cur_conv_rejection_code,
10378 pbl.pfc_cur_conv_rejection_code,
10379 pbl.resource_assignment_id
10380 BULK COLLECT INTO
10381 l_period_name_tbl,
10382 l_start_date_tbl,
10383 l_end_date_tbl,
10384 l_txn_currency_code_tbl,
10385 l_txn_raw_cost_tbl,
10386 l_txn_burdened_cost_tbl,
10387 l_txn_revenue_tbl,
10388 l_project_raw_cost_tbl,
10389 l_project_burdened_cost_tbl,
10390 l_project_revenue_tbl,
10391 l_raw_cost_tbl,
10392 l_burdened_cost_tbl,
10393 l_revenue_tbl,
10394 l_quantity_tbl,
10395 l_cost_rejection_code_tbl,
10396 l_revenue_rejection_code_tbl,
10397 l_burden_rejection_code_tbl,
10398 l_other_rejection_code,
10399 l_pc_cur_conv_rej_code_tbl,
10400 l_pfc_cur_conv_rej_code_tbl,
10401 l_resource_assignment_id_tbl;
10402
10403 -- IPM changes populate tmp table to use for deletion later
10404 -- hr_utility.trace('RM DEL1');
10405 IF l_resource_assignment_id_tbl.COUNT > 0 THEN
10406 FORALL i IN l_resource_assignment_id_tbl.first ..
10407 l_resource_assignment_id_tbl.last
10408 INSERT INTO pa_resource_asgn_curr_tmp
10409 (RA_TXN_ID
10410 ,RESOURCE_ASSIGNMENT_ID
10411 ,TXN_CURRENCY_CODE -- Bug 5057010
10412 ,DELETE_FLAG
10413 )
10414 SELECT pa_resource_asgn_curr_s.nextval
10415 ,l_resource_assignment_id_tbl(i)
10416 ,l_txn_currency_code_tbl(i) -- Bug 5057010
10417 ,'Y'
10418 FROM DUAL;
10419
10420 /*Start bug#16688443 */
10421 l_cbs_element_id_tbl := SYSTEM.pa_num_tbl_type();
10422 l_cbs_element_id_tbl.extend(l_resource_assignment_id_tbl.last);
10423 FOR i IN l_resource_assignment_id_tbl.first..l_resource_assignment_id_tbl.last LOOP
10424 select cbs_element_id into l_cbs_element_id_tbl(i) from pa_resource_assignments where resource_assignment_id = l_resource_assignment_id_tbl (i);
10425 END LOOP; /*End bug#16688443 */
10426
10427 END IF;
10428
10429 IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
10430
10431 IF l_debug_mode = 'Y' THEN
10432 pa_debug.g_err_stage:='Deleting all res assmts for which the flag is passed as Y';
10433 print_msg(pa_debug.g_err_stage,l_module_name);
10434 END IF;
10435
10436 FORALL i IN p_resource_assignment_tbl.first..p_resource_assignment_tbl.last
10437 DELETE
10438 FROM pa_resource_assignments pra
10439 WHERE pra.resource_assignment_id=p_resource_assignment_tbl(i)
10440 AND (l_currency_code_tbl(i) IS NULL
10441 OR
10442 NOT EXISTS ( SELECT 'EXISTS'
10443 FROM PA_BUDGET_LINES PBL
10444 WHERE PBL.RESOURCE_ASSIGNMENT_ID = pra.resource_assignment_id))
10445 RETURNING
10446 pra.resource_assignment_id,
10447 pra.task_id,
10448 pra.rbs_element_id,
10449 pra.resource_class_code,
10450 pra.rate_based_flag
10451 BULK COLLECT INTO
10452 l_ra_id_in_pra_tbl,
10453 l_task_id_in_pra_tbl,
10454 l_rbs_element_id_in_pra_tbl,
10455 l_res_class_code_in_pra_tbl,
10456 l_rate_based_flag_in_pra_tbl;
10457
10458 -- hr_utility.trace('RM DEL2');
10459 -- IPM changes - populate temp table for deletion
10460 IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
10461 FORALL i IN l_ra_id_in_pra_tbl.first ..
10462 l_ra_id_in_pra_tbl.last
10463 INSERT INTO pa_resource_asgn_curr_tmp
10464 (RA_TXN_ID
10465 ,RESOURCE_ASSIGNMENT_ID
10466 -- ,TXN_CURRENCY_CODE
10467 ,DELETE_FLAG
10468 )
10469 SELECT pa_resource_asgn_curr_s.nextval
10470 ,l_ra_id_in_pra_tbl(i)
10471 -- ,l_project_currency_code
10472 ,'Y'
10473 FROM DUAL;
10474 END IF;
10475
10476 END IF;-- IF nvl(p_calling_module,'-99') <> 'PROCESS_RES_CHG_DERV_CALC_PRMS' THEN
10477
10478 END IF;-- IF p_task_or_res = 'TASKS' THEN
10479
10480 END IF;--IF p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
10481
10482 --Rollup the amounts to budget versions as some of the budget lines with amounts might have got
10483 --deleted
10484 IF l_debug_mode = 'Y' THEN
10485 pa_debug.g_err_stage:='No of Rec Deleted from RA : ' || l_ra_id_in_pra_tbl.COUNT;
10486 print_msg(pa_debug.g_err_stage,l_module_name);
10487 IF l_ra_id_in_pra_tbl.COUNT > 0 THEN
10488 FOR i in l_ra_id_in_pra_tbl.FIRST .. l_ra_id_in_pra_tbl.LAST LOOP
10489 pa_debug.g_err_stage:='Deleted RA Id : ' || l_ra_id_in_pra_tbl(i);
10490 print_msg(pa_debug.g_err_stage,l_module_name);
10491 END LOOP;
10492 END IF;
10493 END IF;
10494
10495 -- IPM changes - delete from new entity --{
10496 -- new entity maintenance api to be called before call to pa_fp_rollup_pkg.rollup_budget_version.
10497 -- Call new entity maintenance api for the budget version id (which has to be derived),
10498 -- if records have been inserted in pa_Resource_asgn_curr_tmp, in the delete flow.
10499 -- Note: Deriving l_budget_version_id may not be the right approach as we avoid calling BV/RA
10500 -- rollup api and pji api when l_budget_version_id is null (No BLs deleted)
10501 IF l_budget_version_id IS NOT NULL THEN
10502 pa_debug.g_err_stage:='Calling pa_fp_gen_amount_utils.get_plan_version_dtls:bv_id ' || l_budget_version_id;
10503 print_msg(pa_debug.g_err_stage,l_module_name);
10504
10505 pa_fp_gen_amount_utils.get_plan_version_dtls
10506 (p_project_id => l_project_id,
10507 p_budget_version_id => l_budget_version_id,
10508 x_fp_cols_rec => l_fp_cols_rec,
10509 x_return_status => x_return_status,
10510 x_msg_count => x_msg_count,
10511 x_msg_data => x_msg_data);
10512
10513 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10514
10515 IF l_debug_mode = 'Y' THEN
10516 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
10517 print_msg(pa_debug.g_err_stage,l_module_name);
10518 END IF;
10519 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10520 END IF;
10521
10522 pa_debug.g_err_stage:='Calling pa_res_asg_currency_pub.maintain_data:bv_id ' || l_budget_version_id;
10523 print_msg(pa_debug.g_err_stage,l_module_name);
10524
10525 pa_res_asg_currency_pub.maintain_data(
10526 p_fp_cols_rec => l_fp_cols_rec,
10527 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
10528 p_delete_flag => 'Y',
10529 p_copy_flag => 'N',
10530 p_src_version_id => NULL,
10531 p_copy_mode => NULL,
10532 p_rollup_flag => 'N',
10533 p_version_level_flag => 'N',
10534 p_called_mode => 'SELF_SERVICE',
10535 x_return_status => x_return_status,
10536 x_msg_count => x_msg_count,
10537 x_msg_data => x_msg_data
10538 );
10539
10540 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10541
10542 IF l_debug_mode = 'Y' THEN
10543 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
10544 print_msg(pa_debug.g_err_stage,l_module_name);
10545 END IF;
10546 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10547 END IF;
10548
10549 END IF; --} IPM
10550
10551 --The code below will call budget version rollup and PJI APIs. These APIs should not be called if the input
10552 --parameter p_rollup_required_flag is N. For bug 3937716
10553 IF p_rollup_required_flag = 'Y' THEN
10554
10555 /* If there was nothing to delete, l_budget_version_id would be null and rollup need not be done for that case */
10556
10557 --Added for bug 4160258
10558 IF (p_calling_module = 'PROCESS_RES_CHG_DERV_CALC_PRMS') THEN
10559 l_mode := null;
10560 ELSIF (p_currency_code_tbl.COUNT = 0) THEN
10561 l_mode := 'DELETE_RA';
10562 ELSE
10563 l_mode := null;
10564 END IF;
10565
10566 IF l_budget_version_id IS NOT NULL THEN
10567 pa_debug.g_err_stage:='Calling PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION:l_budget_version_id '||l_budget_version_id;
10568 print_msg(pa_debug.g_err_stage,l_module_name);
10569
10570 PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION
10571 ( p_budget_version_id => l_budget_version_id
10572 ,p_entire_version => 'Y'
10573 ,p_context => l_mode -- Bug 4160258
10574 ,x_return_status => x_return_status
10575 ,x_msg_count => l_msg_count
10576 ,x_msg_data => l_msg_data);
10577
10578 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10579 IF l_debug_mode = 'Y' THEN
10580 pa_debug.g_err_stage:='The API PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION returned error';
10581 print_msg(pa_debug.g_err_stage,l_module_name);
10582 END IF;
10583 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10584 END IF;
10585
10586 END IF;
10587 END IF; /* p_rollup_required_flag = Y */
10588
10589
10590 /* Bug 4200168: Reporting lines rollup api would only be called if p_pji_rollup_required is
10591 * passed as Y */
10592 IF p_pji_rollup_required = 'Y'
10593 AND l_budget_version_id is NOT NULL THEN -- Bug 5381920
10594
10595 --Call the Reporting Lines API only if the version is not a CI version
10596 IF l_ci_id IS NULL THEN
10597
10598 IF l_resource_assignment_id_tbl.count >0 THEN
10599
10600 IF l_debug_mode = 'Y' THEN
10601 pa_debug.g_err_stage:='Prepare pl/sql tables for rbs element id and task id';
10602 print_msg(pa_debug.g_err_stage,l_module_name);
10603 END IF;
10604
10605 --Prepare the pl/sql tables for task id, rbs element id , resource class code and rate based flag.
10606 --These pl/sql tables should be same in length to the pl/sql tables prepared while deleting the budget
10607 --lines. This can be done by looping thru the l_resource_assignment_id_tbl and looking for a matching
10608 --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
10609 -- is fetched directly from pa_resource_assignments for ra id in l_resource_assignment_id_tbl.
10610 l_ra_index:=1;
10611 l_counter:=0;--This is used just to keep track of the length of the pl/sql tables being prepared
10612
10613 l_task_id_tbl.EXTEND(l_resource_assignment_id_tbl.last);
10614 l_rbs_element_id_tbl.EXTEND(l_resource_assignment_id_tbl.last);
10615 l_res_class_code_tbl.EXTEND(l_resource_assignment_id_tbl.last);
10616 l_rate_based_flag_tbl.EXTEND(l_resource_assignment_id_tbl.last);
10617
10618 FOR i IN l_resource_assignment_id_tbl.FIRST..l_resource_assignment_id_tbl.LAST LOOP
10619 --For bug 3840150
10620 l_ra_index:=1;
10621 LOOP
10622 IF l_ra_id_in_pra_tbl.EXISTS(l_ra_index) THEN
10623 IF l_ra_id_in_pra_tbl(l_ra_index) = l_resource_assignment_id_tbl(i) THEN
10624 IF l_debug_mode = 'Y' THEN
10625 pa_debug.g_err_stage:='Stepping In - l_ra_index : '||l_ra_index;
10626 print_msg(pa_debug.g_err_stage,l_module_name);
10627 END IF;
10628 l_task_id := l_task_id_in_pra_tbl(l_ra_index);
10629 l_rbs_element_id := l_rbs_element_id_in_pra_tbl(l_ra_index);
10630 l_res_class_code := l_res_class_code_in_pra_tbl(l_ra_index);
10631 l_rate_based_flag := l_rate_based_flag_in_pra_tbl(l_ra_index);
10632 EXIT; --Exit LOOP
10633 ELSE
10634 IF l_debug_mode = 'Y' THEN
10635 pa_debug.g_err_stage:='Stepping Over - l_ra_index : '||l_ra_index;
10636 print_msg(pa_debug.g_err_stage,l_module_name);
10637 END IF;
10638 l_ra_index:=l_ra_index+1;
10639 END IF;
10640 ELSE
10641 BEGIN
10642 IF l_debug_mode = 'Y' THEN
10643 pa_debug.g_err_stage:='Fetching Data from PA Res Assignment';
10644 print_msg(pa_debug.g_err_stage,l_module_name);
10645 END IF;
10646 SELECT TASK_ID,
10647 RBS_ELEMENT_ID,
10648 RESOURCE_CLASS_CODE,
10649 RATE_BASED_FLAG
10650 INTO l_task_id,
10651 l_rbs_element_id,
10652 l_res_class_code,
10653 l_rate_based_flag
10654 FROM PA_RESOURCE_ASSIGNMENTS
10655 WHERE RESOURCE_ASSIGNMENT_ID = l_resource_assignment_id_tbl(i);
10656
10657 EXIT; --Exit LOOP
10658
10659 EXCEPTION
10660 WHEN NO_DATA_FOUND THEN
10661 IF l_debug_mode = 'Y' THEN
10662 pa_debug.g_err_stage:='No Data Found in RA Table for Bl deleted.';
10663 print_msg(pa_debug.g_err_stage,l_module_name);
10664 END IF;
10665 RAISE;
10666 END;
10667 END IF;
10668 END LOOP;
10669
10670 IF l_debug_mode = 'Y' THEN
10671 pa_debug.g_err_stage:='Data for Update Rep Lines';
10672 print_msg(pa_debug.g_err_stage,l_module_name);
10673
10674 pa_debug.g_err_stage:='l_task_id '||l_task_id;
10675 print_msg(pa_debug.g_err_stage,l_module_name);
10676
10677 pa_debug.g_err_stage:='l_rbs_element_id '||l_rbs_element_id;
10678 print_msg(pa_debug.g_err_stage,l_module_name);
10679
10680 pa_debug.g_err_stage:='l_res_class_code '||l_res_class_code;
10681 print_msg(pa_debug.g_err_stage,l_module_name);
10682
10683 pa_debug.g_err_stage:='l_rate_based_flag '||l_rate_based_flag;
10684 print_msg(pa_debug.g_err_stage,l_module_name);
10685 END IF;
10686
10687 l_task_id_tbl(i) :=l_task_id;
10688 l_rbs_element_id_tbl(i) :=l_rbs_element_id;
10689 l_res_class_code_tbl(i) :=l_res_class_code;
10690 l_rate_based_flag_tbl(i) :=l_rate_based_flag;
10691 l_counter:=l_counter+1;
10692
10693 END LOOP;
10694
10695 IF l_counter <> l_resource_assignment_id_tbl.COUNT THEN
10696
10697 IF l_debug_mode = 'Y' THEN
10698 pa_debug.g_err_stage:='Error in preparing pl/sql tables for rbs element id and task id ';
10699 print_msg(pa_debug.g_err_stage,l_module_name);
10700 END IF;
10701
10702 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10703
10704 END IF;
10705
10706 IF l_debug_mode = 'Y' THEN
10707 pa_debug.g_err_stage:='No of rows deleted from pa_budget_lines= '||l_resource_assignment_id_tbl.count;
10708 print_msg(pa_debug.g_err_stage,l_module_name);
10709 END IF;
10710
10711
10712
10713 pa_planning_transaction_utils.call_update_rep_lines_api
10714 ( p_source => 'PL-SQL'
10715 ,p_budget_Version_id => l_budget_version_id
10716 ,p_resource_assignment_id_tbl => l_resource_assignment_id_tbl
10717 ,p_cbs_element_id_tbl => l_cbs_element_id_tbl
10718 ,p_period_name_tbl => l_period_name_tbl
10719 ,p_start_date_tbl => l_start_date_tbl
10720 ,p_end_date_tbl => l_end_date_tbl
10721 ,p_txn_currency_code_tbl => l_txn_currency_code_tbl
10722 ,p_txn_raw_cost_tbl => l_txn_raw_cost_tbl
10723 ,p_txn_burdened_cost_tbl => l_txn_burdened_cost_tbl
10724 ,p_txn_revenue_tbl => l_txn_revenue_tbl
10725 ,p_project_raw_cost_tbl => l_project_raw_cost_tbl
10726 ,p_project_burdened_cost_tbl => l_project_burdened_cost_tbl
10727 ,p_project_revenue_tbl => l_project_revenue_tbl
10728 ,p_raw_cost_tbl => l_raw_cost_tbl
10729 ,p_burdened_cost_tbl => l_burdened_cost_tbl
10730 ,p_revenue_tbl => l_revenue_tbl
10731 ,p_cost_rejection_code_tbl => l_cost_rejection_code_tbl
10732 ,p_revenue_rejection_code_tbl => l_revenue_rejection_code_tbl
10733 ,p_burden_rejection_code_tbl => l_burden_rejection_code_tbl
10734 ,p_other_rejection_code => l_other_rejection_code
10735 ,p_pc_cur_conv_rej_code_tbl => l_pc_cur_conv_rej_code_tbl
10736 ,p_pfc_cur_conv_rej_code_tbl => l_pfc_cur_conv_rej_code_tbl
10737 ,p_quantity_tbl => l_quantity_tbl
10738 ,p_rbs_element_id_tbl => l_rbs_element_id_tbl
10739 ,p_task_id_tbl => l_task_id_tbl
10740 ,p_res_class_code_tbl => l_res_class_code_tbl
10741 ,p_rate_based_flag_tbl => l_rate_based_flag_tbl
10742 ,x_return_status => x_return_status
10743 ,x_msg_data => x_msg_data
10744 ,x_msg_count => x_msg_count );
10745
10746 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10747 IF l_debug_mode = 'Y' THEN
10748 pa_debug.g_err_stage:='The API pa_planning_transaction_utils.call_update_rep_lines_api returned error';
10749 print_msg(pa_debug.g_err_stage,l_module_name);
10750 END IF;
10751 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10752 END IF;
10753
10754 END IF;-- IF l_resource_assignment_id_tbl.count >0 THEN
10755
10756 END IF;--IF l_ci_id IS NULL THEN
10757
10758 END IF;--IF p_pji_rollup_required = 'Y' THEN /* Bug 4200168 */
10759
10760 -- Bug Fix 4635951
10761 -- Commenting out the below select as it has been moved into the below IF condition
10762 -- and it was a left out and this stranded select is causing this bug.
10763
10764 IF ((p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
10765 AND NVL(p_calling_context, 'X' ) <> 'PA_DELETE_TASKS' -- Bug 9535723
10766 AND PA_TASK_ASSIGNMENT_UTILS.Is_Progress_Rollup_Required(l_project_id) = 'Y') OR -- 5198662
10767 (p_context = PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_TASK
10768 AND pa_task_assignment_utils.g_require_progress_rollup = 'Y')) AND
10769 l_budget_version_id IS NOT NULL THEN -- Bug 5381920
10770
10771 IF l_debug_mode = 'Y' THEN
10772 pa_debug.g_err_stage:='Calling PA_PROJ_TASK_STRUC_PUB.process_wbs_updates_wrp API';
10773 print_msg(pa_debug.g_err_stage,l_module_name);
10774 END IF;
10775
10776 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
10777 ( p_calling_context => 'ASGMT_PLAN_CHANGE'
10778 ,p_project_id => l_project_id
10779 ,p_structure_version_id => pa_project_structure_utils.get_latest_wp_version(l_project_id)
10780 ,p_pub_struc_ver_id => pa_project_structure_utils.get_latest_wp_version(l_project_id)
10781 ,x_return_status => x_return_status
10782 ,x_msg_data => x_msg_data
10783 ,x_msg_count => x_msg_count );
10784
10785 pa_task_assignment_utils.g_require_progress_rollup := 'N';
10786
10787 END IF;
10788 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10789 IF l_debug_mode = 'Y' THEN
10790 pa_debug.g_err_stage:='After Called process_wbs_updates_wrp:retSts['||x_return_status||']';
10791 print_msg(pa_debug.g_err_stage,l_module_name);
10792 END IF;
10793
10794 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10795 END IF;
10796 --End bug 4492493
10797
10798 IF l_debug_mode = 'Y' THEN
10799 pa_debug.g_err_stage:='Exiting delete_planning_transactions';
10800 print_msg(pa_debug.g_err_stage,l_module_name);
10801 -- reset curr function
10802 pa_debug.reset_curr_function;
10803 END IF;
10804 EXCEPTION
10805
10806 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
10807 l_msg_count := FND_MSG_PUB.count_msg;
10808 IF l_msg_count = 1 THEN
10809 PA_INTERFACE_UTILS_PUB.get_messages
10810 (p_encoded => FND_API.G_TRUE
10811 ,p_msg_index => 1
10812 ,p_msg_count => l_msg_count
10813 ,p_msg_data => l_msg_data
10814 ,p_data => l_data
10815 ,p_msg_index_out => l_msg_index_out);
10816
10817 x_msg_data := l_data;
10818 x_msg_count := l_msg_count;
10819 ELSE
10820 x_msg_count := l_msg_count;
10821 END IF;
10822
10823 x_return_status := FND_API.G_RET_STS_ERROR;
10824
10825 IF l_debug_mode = 'Y' THEN
10826 pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
10827 print_msg(pa_debug.g_err_stage,l_module_name);
10828 -- reset curr function
10829 pa_debug.reset_curr_function;
10830 END IF;
10831 RETURN;
10832 WHEN OTHERS THEN
10833 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10834 x_msg_count := 1;
10835 x_msg_data := SQLERRM;
10836
10837 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_planning_transaction_pub'
10838 ,p_procedure_name => 'delete_planning_transactions');
10839
10840 IF l_debug_mode = 'Y' THEN
10841 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
10842 print_msg(pa_debug.g_err_stage,l_module_name);
10843 -- reset curr function
10844 pa_debug.Reset_Curr_Function();
10845 END IF;
10846 RAISE;
10847 END delete_planning_transactions;
10848
10849
10850 /*=====================================================================
10851 Procedure Name: ADD_WP_PLAN_TYPE
10852 Purpose: This API checks if a Work Plan type is present in
10853 the system.If is it not then it throws a error.
10854 If WorkPlan Type is not attached to the project
10855 then it attaches it.
10856 This would be called when workplan is enabled for
10857 a project or template.
10858 Parameters:(Note that all the input parameters are mandatory)
10859 IN 1)p_src_project_id IN pa_projects_all.project_id%TYPE
10860 IN 2)p_targ_project_id IN pa_projects_all.project_id%TYPE
10861 =======================================================================*/
10862 PROCEDURE Add_wp_plan_type
10863 (
10864 p_src_project_id IN pa_projects_all.project_id%TYPE
10865 ,p_targ_project_id IN pa_projects_all.project_id%TYPE
10866 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10867 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10868 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10869 ) AS
10870
10871 --Start of variables used for debugging
10872 l_msg_count NUMBER :=0;
10873 l_data VARCHAR2(2000);
10874 l_msg_data VARCHAR2(2000);
10875 l_error_msg_code VARCHAR2(30);
10876 l_msg_index_out NUMBER;
10877 l_return_status VARCHAR2(2000);
10878 l_debug_mode VARCHAR2(30);
10879 --End of variables used for debugging
10880
10881 l_wp_type_id NUMBER :=0;
10882 l_proj_wp_type_exists NUMBER :=0;
10883 l_proj_fp_options_id pa_proj_fp_options.proj_fp_options_id%TYPE;
10884 l_projfunc_currency_code pa_projects_all.projfunc_currency_code%type;
10885 l_proj_currency_code pa_projects_all.project_currency_code%type;
10886 l_appr_rev_plan_type_flag pa_fin_plan_types_b.approved_rev_plan_type_flag %TYPE;
10887
10888 l_plan_in_multi_curr_flag pa_proj_fp_options.plan_in_multi_curr_flag%TYPE;
10889 l_src_fp_option_id pa_proj_fp_options.proj_fp_options_id%TYPE;
10890 BEGIN
10891
10892 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
10893 l_debug_mode := NVL(l_debug_mode, 'N');
10894 x_msg_count := 0;
10895 x_return_status := FND_API.G_RET_STS_SUCCESS;
10896 IF l_debug_mode = 'Y' THEN
10897 PA_DEBUG.Set_Curr_Function( p_function => 'PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type',
10898 p_debug_mode => l_debug_mode );
10899 END IF;
10900 ---------------------------------------------------------------
10901 -- validating input parameter p_project_id.
10902 -- p_project_id cannot be passed as null.
10903 ---------------------------------------------------------------
10904 IF l_debug_mode = 'Y' THEN
10905 pa_debug.g_err_stage:='Validating input parameters';
10906 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10907 END IF;
10908
10909 IF (p_src_project_id IS NULL) OR
10910 (p_targ_project_id IS NULL) THEN
10911 IF l_debug_mode = 'Y' THEN
10912 pa_debug.g_err_stage:='Invalid Arguments Passed - src and targ Project Ids are null';
10913 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
10914 END IF;
10915 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10916 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
10917 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10918 END IF;
10919
10920 ---------------------------------------------------------------
10921 -- checking if a workplan type is present in the system with
10922 -- enable_wp_flag = 'Y'
10923 ---------------------------------------------------------------
10924
10925 IF l_debug_mode = 'Y' THEN
10926 pa_debug.g_err_stage:='checking availability of a wp type';
10927 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10928 END IF;
10929
10930 ---------------------------------------------------------
10931 -- In case of no data found, the exception handling block
10932 -- shall throw PA_FP_NO_WP_PLAN_TYPE.
10933 ---------------------------------------------------------
10934 BEGIN -- BLOCK to check if workplan_type is is present in the system- Starts
10935
10936 SELECT fin_plan_type_id,approved_rev_plan_type_flag
10937 INTO l_wp_type_id,l_appr_rev_plan_type_flag
10938 FROM pa_fin_plan_types_b
10939 WHERE nvl(use_for_workplan_flag,'N') = 'Y';
10940
10941 EXCEPTION
10942
10943 WHEN NO_DATA_FOUND THEN
10944 IF l_debug_mode = 'Y' THEN
10945 pa_debug.g_err_stage :='No WORK PLAN TYPE present in the system';
10946 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,1);
10947 END IF;
10948
10949 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10950 p_msg_name => 'PA_FP_NO_WP_PLAN_TYPE' );
10951 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
10952 END; -- BLOCK to check if workplan_type is is present in the system - Ends
10953
10954
10955 ---------------------------------------------------------
10956 -- Checking if workplan_type is already attched for the
10957 -- passed project_id
10958 ---------------------------------------------------------
10959 IF l_debug_mode = 'Y' THEN
10960 pa_debug.g_err_stage:='checking if wp type is already attched for project id';
10961 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10962 END IF;
10963
10964 BEGIN -- BLOCK to check if workplan_type is already attched for the passed project_id - Starts
10965
10966 SELECT 1
10967 INTO l_proj_wp_type_exists
10968 FROM DUAL
10969 WHERE EXISTS(
10970 SELECT 1
10971 FROM pa_proj_fp_options
10972 WHERE fin_plan_type_id = l_wp_type_id
10973 AND project_id = p_targ_project_id
10974 AND fin_plan_option_level_code = 'PLAN_TYPE');
10975
10976 EXCEPTION
10977 WHEN NO_DATA_FOUND THEN
10978 null;
10979 END; -- BLOCK to check if workplan_type is already attched for the passed project_id - Ends
10980
10981 ---------------------------------------------------------
10982 -- If workplan_type is not already attched for the
10983 -- passed project_id then a record is created in
10984 -- pa_proj_fp_options and the default fp txn currencies
10985 -- are created.
10986 ---------------------------------------------------------
10987
10988 IF l_proj_wp_type_exists = 0 THEN
10989
10990 IF l_debug_mode = 'Y' THEN
10991 pa_debug.g_err_stage:='Getting the fp option id for the wp plan type of the source project ';
10992 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
10993 END IF;
10994
10995 IF p_src_project_id <> p_targ_project_id THEN
10996
10997 BEGIN
10998 SELECT proj_fp_options_id
10999 INTO l_src_fp_option_id
11000 FROM pa_proj_fp_options
11001 WHERE project_id=p_src_project_id
11002 AND fin_plan_type_id=l_wp_type_id
11003 AND fin_plan_option_level_code = 'PLAN_TYPE';
11004 EXCEPTION
11005 WHEN NO_DATA_FOUND THEN
11006 l_src_fp_option_id:=NULL;
11007 END;
11008 ELSE
11009 l_src_fp_option_id:=NULL;
11010 END IF;
11011
11012
11013 IF l_debug_mode = 'Y' THEN
11014 pa_debug.g_err_stage:='Calling API pa_proj_fp_options_pub.create_fp_option';
11015 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
11016 END IF;
11017
11018 IF l_debug_mode = 'Y' THEN
11019 pa_debug.g_err_stage:='The source fp option id is '||l_src_fp_option_id;
11020 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
11021 END IF;
11022
11023
11024 pa_proj_fp_options_pub.Create_FP_Option (
11025 px_target_proj_fp_option_id => l_proj_fp_options_id
11026 ,p_source_proj_fp_option_id => l_src_fp_option_id
11027 ,p_target_fp_option_level_code => PA_FP_CONSTANTS_PKG.G_OPTION_LEVEL_PLAN_TYPE
11028 ,p_target_fp_preference_code => PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY
11029 ,p_target_fin_plan_version_id => null
11030 ,p_target_project_id => p_targ_project_id
11031 ,p_target_plan_type_id => l_wp_type_id
11032 ,x_return_status => l_return_status
11033 ,x_msg_count => l_msg_count
11034 ,x_msg_data => l_msg_data);
11035
11036 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11037 IF l_debug_mode = 'Y' THEN
11038 pa_debug.g_err_stage:='Called API pa_proj_fp_options_pub.Create_FP_Option returned error';
11039 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
11040 END IF;
11041 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11042 END IF;
11043
11044 SELECT plan_in_multi_curr_flag
11045 INTO l_plan_in_multi_curr_flag
11046 FROM pa_proj_fp_options
11047 WHERE proj_fp_options_id = l_proj_fp_options_id;
11048
11049 IF l_debug_mode = 'Y' THEN
11050 pa_debug.g_err_stage:='Calling API pa_fp_txn_currencies_pub.Copy_Fp_Txn_Currencies';
11051 pa_debug.write('Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,3);
11052 END IF;
11053
11054 PA_FP_TXN_CURRENCIES_PUB.COPY_FP_TXN_CURRENCIES (
11055 p_source_fp_option_id => l_src_fp_option_id
11056 ,p_target_fp_option_id => l_proj_fp_options_id
11057 ,p_target_fp_preference_code => null
11058 ,p_plan_in_multi_curr_flag => l_plan_in_multi_curr_flag
11059 ,x_return_status => l_return_status
11060 ,x_msg_count => l_msg_count
11061 ,x_msg_data => l_msg_data );
11062
11063 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11064 IF l_debug_mode = 'Y' THEN
11065 pa_debug.g_err_stage:='Called API PA_FP_TXN_CURRENCIES_PUB.COPY_FP_TXN_CURRENCIES returned error';
11066 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
11067 END IF;
11068 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11069 END IF;
11070
11071 END IF;
11072 IF l_debug_mode = 'Y' THEN
11073 pa_debug.reset_curr_function;
11074 END IF;
11075
11076 EXCEPTION
11077
11078 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11079 l_msg_count := FND_MSG_PUB.count_msg;
11080 IF l_msg_count = 1 THEN
11081 PA_INTERFACE_UTILS_PUB.get_messages
11082 (p_encoded => FND_API.G_TRUE
11083 ,p_msg_index => 1
11084 ,p_msg_count => l_msg_count
11085 ,p_msg_data => l_msg_data
11086 ,p_data => l_data
11087 ,p_msg_index_out => l_msg_index_out);
11088 x_msg_data := l_data;
11089 x_msg_count := l_msg_count;
11090 ELSE
11091 x_msg_count := l_msg_count;
11092 END IF;
11093 x_return_status := FND_API.G_RET_STS_ERROR;
11094 IF l_debug_mode = 'Y' THEN
11095 pa_debug.reset_curr_function;
11096 END IF;
11097 WHEN OTHERS THEN
11098 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11099 x_msg_count := 1;
11100 x_msg_data := SQLERRM;
11101 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
11102 ,p_procedure_name => 'PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type');
11103
11104 IF l_debug_mode = 'Y' THEN
11105 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
11106 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Add_wp_plan_type: ' || g_module_name,pa_debug.g_err_stage,5);
11107 pa_debug.reset_curr_function;
11108 END IF;
11109 RAISE;
11110
11111 END add_wp_plan_type;
11112
11113 /*=====================================================================
11114 Procedure Name: check_and_create_task_rec_info
11115 Purpose: This is a private api in the package. This API will
11116 validate the task data passed to the
11117 update_planning_transactions api This API checks
11118 for the existence of the element version id passed
11119 in pa_resource_assignments. If some of the element
11120 version Ids are not there then it call
11121 add_planning_transactions API to create records in
11122 pa_resource_assignments. This API will be called
11123 only when the context is WORKPLAN
11124 =======================================================================*/
11125 /*******************************************************************************************************
11126 As part of Bug 3749516 All References to Equipment Effort or Equip Resource Class has been removed in
11127 PROCEDURE check_and_create_task_rec_info.
11128 p_planned_equip_effort_tbl IN parameter has also been removed as they were not being used/referred.
11129 ********************************************************************************************************/
11130 PROCEDURE check_and_create_task_rec_info
11131 (
11132 p_project_id IN Pa_projects_all.project_id%TYPE
11133 ,p_struct_elem_version_id IN Pa_proj_element_versions.element_version_id%TYPE
11134 ,p_element_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
11135 ,p_planning_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
11136 ,p_planning_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE
11137 ,p_planned_people_effort_tbl IN SYSTEM.PA_NUM_TBL_TYPE
11138 ,p_raw_cost_tbl IN SYSTEM.PA_NUM_TBL_TYPE /* Bug 3720357 */
11139 ,p_burdened_cost_tbl IN SYSTEM.PA_NUM_TBL_TYPE /* Bug 3720357 */
11140 ,p_apply_progress_flag IN VARCHAR2 /* Bug 3720357 */
11141 ,x_element_version_id_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
11142 ,x_planning_start_date_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
11143 ,x_planning_end_date_tbl OUT NOCOPY SYSTEM.PA_DATE_TBL_TYPE --File.Sql.39 bug 4440895
11144 ,x_planned_effort_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
11145 ,x_resource_assignment_id_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE --File.Sql.39 bug 4440895
11146 ,x_raw_cost_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE /* Bug 3720357 */ --File.Sql.39 bug 4440895
11147 ,x_burdened_cost_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE /* Bug 3720357 */ --File.Sql.39 bug 4440895
11148 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11149 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11150 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11151 ) AS
11152 --Start of variables used for debugging
11153 l_msg_count NUMBER :=0;
11154 l_data VARCHAR2(2000);
11155 l_msg_data VARCHAR2(2000);
11156 l_error_msg_code VARCHAR2(30);
11157 l_msg_index_out NUMBER;
11158 l_return_status VARCHAR2(2000);
11159 l_debug_mode VARCHAR2(30);
11160 l_module_name VARCHAR2(100):='pa.plsql.pa_fp_planning_transaction_pub.check_and_create_task_rec_info' ;
11161 l_rec_exsists VARCHAR2(1);
11162 --End of variables used for debugging
11163
11164
11165 l_elem_ver_id_cnt NUMBER := 0;
11166 l_ra_id_cnt NUMBER := 0;
11167 l_out_tbl_index NUMBER := 1;
11168 l_add_tbl_index NUMBER := 1;
11169 l_res_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();
11170 l_ra_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
11171 l_element_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
11172 l_planning_start_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
11173 l_planning_end_date_tbl SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
11174 l_planned_people_effort_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
11175 l_raw_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
11176 l_burdened_cost_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
11177 l_index NUMBER;
11178 l_element_version_id_tbl_tmp SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
11179 l_planning_start_date_tbl_tmp SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
11180 l_planning_end_date_tbl_tmp SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE();
11181 l_planned_effort_tbl_tmp SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
11182 l_res_assignment_id_tbl_tmp SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
11183 l_planned_ppl_effort_tbl_tmp SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
11184 l_raw_cost_tbl_tmp SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
11185 l_burdened_cost_tbl_tmp SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
11186
11187
11188 cursor c_res_assignment_id(c_wbs_element_version_id pa_resource_assignments.wbs_element_version_id%TYPE) IS
11189 SELECT resource_assignment_id,resource_class_code
11190 FROM pa_resource_assignments
11191 WHERE wbs_element_version_id = c_wbs_element_version_id
11192 AND ta_display_flag = 'N' -- Bug 3749516
11193 AND resource_class_code in (PA_FP_CONSTANTS_PKG.G_RESOURCE_CLASS_CODE_PPL);
11194
11195 BEGIN
11196
11197 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
11198 l_debug_mode := NVL(l_debug_mode, 'N');
11199 x_msg_count := 0;
11200 x_return_status := FND_API.G_RET_STS_SUCCESS;
11201 IF l_debug_mode = 'Y' THEN
11202 PA_DEBUG.Set_Curr_Function( p_function => 'fp_planning_txn_pub.chk_and_create_task',
11203 p_debug_mode => l_debug_mode );
11204 END IF;
11205 -----------------------------------------------------------------------
11206 -- Input Parameter Validation. If no element version id is passed then
11207 -- return.
11208 -----------------------------------------------------------------------
11209 l_elem_ver_id_cnt := p_element_version_id_tbl.COUNT;
11210
11211 --Extending the local pl/sql tables. The length of the local tables should be element version id count
11212 IF l_debug_mode = 'Y' THEN
11213 pa_debug.g_err_stage:='Extending the local pl/sql tbls';
11214 print_msg(pa_debug.g_err_stage,l_module_name);
11215 END IF;
11216 x_element_version_id_tbl := SYSTEM.PA_NUM_TBL_TYPE();
11217 x_planning_start_date_tbl := SYSTEM.PA_DATE_TBL_TYPE();
11218 x_planning_end_date_tbl := SYSTEM.PA_DATE_TBL_TYPE();
11219 x_planned_effort_tbl := SYSTEM.PA_NUM_TBL_TYPE();
11220 x_resource_assignment_id_tbl := SYSTEM.PA_NUM_TBL_TYPE();
11221 x_raw_cost_tbl := SYSTEM.PA_NUM_TBL_TYPE();
11222 x_burdened_cost_tbl := SYSTEM.PA_NUM_TBL_TYPE();
11223 l_element_version_id_tbl.extend(l_elem_ver_id_cnt);
11224 l_planning_start_date_tbl.extend(l_elem_ver_id_cnt);
11225 l_planning_end_date_tbl.extend(l_elem_ver_id_cnt);
11226 l_planned_people_effort_tbl.extend(l_elem_ver_id_cnt);
11227 l_raw_cost_tbl.extend(l_elem_ver_id_cnt);
11228 l_burdened_cost_tbl.extend(l_elem_ver_id_cnt);
11229 x_element_version_id_tbl.extend(l_elem_ver_id_cnt);
11230 x_planning_start_date_tbl.extend(l_elem_ver_id_cnt);
11231 x_planning_end_date_tbl.extend(l_elem_ver_id_cnt);
11232 x_planned_effort_tbl.extend(l_elem_ver_id_cnt);
11233 x_resource_assignment_id_tbl.extend(l_elem_ver_id_cnt);
11234 x_raw_cost_tbl.extend(l_elem_ver_id_cnt);
11235 x_burdened_cost_tbl.extend(l_elem_ver_id_cnt);
11236
11237 IF l_elem_ver_id_cnt = 0 THEN
11238 IF l_debug_mode = 'Y' THEN
11239 pa_debug.g_err_stage:='Validating input parameters - No element version id is passed - return to calling entity';
11240 print_msg(pa_debug.g_err_stage,l_module_name);
11241 pa_debug.reset_curr_function;
11242 END IF;
11243 RETURN;
11244 END IF;
11245
11246 --------------------------------------------------------------------------
11247 -- Logic manifested below ------------------------------------------------
11248 -- -----------------------------------------------------------------------
11249 -- For each record of element version id in input parameter
11250 -- p_element_version_id_tbl, we scan through pa_resource_assignments table
11251 -- and bulk fetch the resource_class_code and resource_assignment_id into
11252 -- local PLSql tables. Now we have a inner loop which we run for each of
11253 -- the resouce_assignment_id fetched corresponding to the elem_ver_id of
11254 -- the parent loop. In the inner loop we populate the corresponding out
11255 -- param tables - x_resource_assignment_id_tbl,x_element_version_id_tbl
11256 -- ,x_planning_end_date_tbl, x_planning_start_date_tbl and
11257 -- x_planned_effort_tbl.
11258 --
11259 -- In case if there no records are retrieved in pa_resource_assignments
11260 -- for any element version id then we populate a separate set of tables
11261 -- from the corresponding IN parameters as l_element_version_id_tbl,
11262 -- l_planning_start_date_tbl,l_planning_end_date_tbl,
11263 -- l_planned_people_effort_tbl.
11264 -- Bug 3720357 - l_raw_cost_tbl and l_burdened_cost_tbl also added.
11265 -- This set of local parameters form the IN parameters for Calling API
11266 -- add_planning_transactions.
11267 --------------------------------------------------------------------------
11268
11269
11270 IF l_debug_mode = 'Y' THEN
11271 pa_debug.g_err_stage:='Iterating through the IN Parameters and Populating the Out parameters.';
11272 print_msg(pa_debug.g_err_stage,l_module_name);
11273 END IF;
11274
11275 /* Loop through all element version ids and retrieve ra_id and res_class_code */
11276 FOR i IN p_element_version_id_tbl.FIRST .. p_element_version_id_tbl.LAST LOOP
11277 OPEN c_res_assignment_id(p_element_version_id_tbl(i));
11278 FETCH c_res_assignment_id BULK COLLECT INTO l_ra_id_tbl,l_res_class_code_tbl;
11279 l_ra_id_cnt := l_ra_id_tbl.COUNT;
11280 IF l_ra_id_cnt>0 THEN
11281 l_rec_exsists := 'Y';
11282 ELSE
11283 l_rec_exsists := 'N';
11284 END IF;
11285
11286
11287 /* If there is 1 records in resource_assignments for people then we do not need to call add_planning transaction */
11288 IF l_ra_id_cnt = 1 THEN
11289
11290 FOR j IN l_ra_id_tbl.FIRST .. l_ra_id_tbl.LAST LOOP
11291 x_resource_assignment_id_tbl(l_out_tbl_index) := l_ra_id_tbl(j);
11292 IF p_planning_start_date_tbl.EXISTS(i) THEN
11293 x_planning_start_date_tbl(l_out_tbl_index) := p_planning_start_date_tbl(i);
11294 END IF;
11295
11296 IF p_planning_end_date_tbl.EXISTS(i) THEN
11297 x_planning_end_date_tbl(l_out_tbl_index) := p_planning_end_date_tbl(i);
11298 END IF;
11299 /* In Update Flow for Workplan Context FND_API.G_MISS_XXXX will be considered
11300 as a valid value for effort/Quantity -- Bug 3640498*/
11301 IF (p_raw_cost_tbl.EXISTS(i)) THEN --AND
11302 -- NVL(p_raw_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
11303 -- p_raw_cost_tbl(i) <> 0) THEN
11304 x_raw_cost_tbl(l_out_tbl_index) := p_raw_cost_tbl(i);
11305 END IF;
11306
11307 IF (p_burdened_cost_tbl.EXISTS(i)) THEN -- AND
11308 -- NVL(p_burdened_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
11309 -- p_burdened_cost_tbl(i) <> 0) THEN
11310 x_burdened_cost_tbl(l_out_tbl_index) := p_burdened_cost_tbl(i);
11311 END IF;
11312
11313 x_element_version_id_tbl(l_out_tbl_index) := p_element_version_id_tbl(i);
11314 IF l_res_class_code_tbl(j) = PA_FP_CONSTANTS_PKG.G_RESOURCE_CLASS_CODE_PPL THEN
11315 IF (p_planned_people_effort_tbl.EXISTS(i)) THEN --AND
11316 -- (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
11317 -- (p_planned_people_effort_tbl(i) > 0)) THEN
11318 x_planned_effort_tbl(l_out_tbl_index) := p_planned_people_effort_tbl(i);
11319 END IF;
11320 END IF;
11321
11322 l_out_tbl_index := l_out_tbl_index + 1;
11323 END LOOP;
11324 END IF;
11325
11326 /* If there are no records in resource_assignments we have to populate the local PLSql tables to call
11327 add_planning_transactions */
11328 IF l_rec_exsists = 'N' THEN
11329
11330 --Add the record only if either people or equipment effort exists
11331 IF ((p_planned_people_effort_tbl.EXISTS(i)) AND
11332 (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
11333 /*Bug fix:5726773 (p_planned_people_effort_tbl(i) > 0))*/
11334 (p_planned_people_effort_tbl(i) is NOT NULL))
11335 OR
11336 (p_raw_cost_tbl.EXISTS(i) AND
11337 NVL(p_raw_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
11338 /* bug fix:Bug fix:5726773 p_raw_cost_tbl(i) <> 0) */
11339 p_raw_cost_tbl(i) is NOT NULL )
11340 OR
11341 (p_burdened_cost_tbl.EXISTS(i) AND
11342 NVL(p_burdened_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
11343 /* bug fix:Bug fix:5726773 P_burdened_cost_tbl(i) <> 0) THEN */
11344 P_burdened_cost_tbl(i) is NOT NULL) THEN
11345
11346 l_element_version_id_tbl(l_add_tbl_index) := p_element_version_id_tbl(i);
11347 IF p_planning_start_date_tbl.EXISTS(i) THEN
11348 l_planning_start_date_tbl(l_add_tbl_index) := p_planning_start_date_tbl(i);
11349 END IF;
11350
11351 IF p_planning_end_date_tbl.EXISTS(i) THEN
11352 l_planning_end_date_tbl(l_add_tbl_index) := p_planning_end_date_tbl(i);
11353 END IF;
11354
11355 IF ((p_planned_people_effort_tbl.EXISTS(i)) AND
11356 (nvl(p_planned_people_effort_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM) AND
11357 /* bug fix:5726773 (p_planned_people_effort_tbl(i) > 0)) THEN */
11358 (p_planned_people_effort_tbl(i) is NOT NULL )) THEN
11359 l_planned_people_effort_tbl(l_add_tbl_index) := p_planned_people_effort_tbl(i);
11360 END IF;
11361
11362 IF (p_raw_cost_tbl.EXISTS(i) AND
11363 NVL(p_raw_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
11364 /* bug fix:Bug fix:5726773 p_raw_cost_tbl(i) <> 0) THEN */
11365 p_raw_cost_tbl(i) is NOT NULL ) THEN
11366 l_raw_cost_tbl(l_add_tbl_index) := p_raw_cost_tbl(i);
11367 END IF;
11368
11369 IF (p_burdened_cost_tbl.EXISTS(i) AND
11370 NVL(p_burdened_cost_tbl(i),FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM AND
11371 /* bug fix:Bug fix:572677312/29/2006 P_burdened_cost_tbl(i) <> 0) THEN */
11372 P_burdened_cost_tbl(i) is NOT NULL) THEN
11373 l_burdened_cost_tbl(l_add_tbl_index) := p_burdened_cost_tbl(i);
11374 END IF;
11375 l_add_tbl_index := l_add_tbl_index + 1;
11376
11377 END IF;
11378 END IF;
11379
11380 CLOSE c_res_assignment_id;
11381 END LOOP;
11382
11383 --Prepare the pl/sql tbls that should be returned from the API
11384 IF l_debug_mode = 'Y' THEN
11385 pa_debug.g_err_stage:='Making a copy of the pl/sql tables which should be returned by this API';
11386 print_msg(pa_debug.g_err_stage,l_module_name);
11387 END IF;
11388
11389
11390 l_element_version_id_tbl_tmp.extend(l_out_tbl_index-1);
11391 l_planning_start_date_tbl_tmp.extend(l_out_tbl_index-1);
11392 l_planning_end_date_tbl_tmp.extend(l_out_tbl_index-1);
11393 l_planned_effort_tbl_tmp.extend(l_out_tbl_index-1);
11394 l_res_assignment_id_tbl_tmp.extend(l_out_tbl_index-1);
11395 l_raw_cost_tbl_tmp.extend(l_out_tbl_index-1);
11396 l_burdened_cost_tbl_tmp.extend(l_out_tbl_index-1);
11397
11398 FOR i in 1..l_out_tbl_index-1 LOOP
11399
11400 l_element_version_id_tbl_tmp (i):= x_element_version_id_tbl (i);
11401 l_planning_start_date_tbl_tmp(i):= x_planning_start_date_tbl (i);
11402 l_planning_end_date_tbl_tmp (i):= x_planning_end_date_tbl (i);
11403 l_planned_effort_tbl_tmp (i):= x_planned_effort_tbl (i);
11404 l_res_assignment_id_tbl_tmp (i):= x_resource_assignment_id_tbl(i);
11405 l_raw_cost_tbl_tmp (i):= x_raw_cost_tbl (i);
11406 l_burdened_cost_tbl_tmp (i):= x_burdened_cost_tbl (i);
11407
11408 END LOOP;
11409
11410 x_element_version_id_tbl :=l_element_version_id_tbl_tmp ;
11411 x_planning_start_date_tbl :=l_planning_start_date_tbl_tmp;
11412 x_planning_end_date_tbl :=l_planning_end_date_tbl_tmp ;
11413 x_planned_effort_tbl :=l_planned_effort_tbl_tmp ;
11414 x_resource_assignment_id_tbl:=l_res_assignment_id_tbl_tmp ;
11415 x_raw_cost_tbl :=l_raw_cost_tbl_tmp ;
11416 x_burdened_cost_tbl :=l_burdened_cost_tbl_tmp ;
11417
11418 --Prepare the pl/sql tbls that should be passed to add planning txn APIs
11419 IF l_debug_mode = 'Y' THEN
11420 pa_debug.g_err_stage:='Making a copy of the pl/sql tables which should be used in calling add plan txn api';
11421 print_msg(pa_debug.g_err_stage,l_module_name);
11422 END IF;
11423
11424 l_element_version_id_tbl_tmp.DELETE;
11425 l_planning_start_date_tbl_tmp.DELETE;
11426 l_planning_end_date_tbl_tmp.DELETE;
11427 l_raw_cost_tbl_tmp.DELETE;
11428 l_burdened_cost_tbl_tmp.DELETE;
11429 l_element_version_id_tbl_tmp.extend(l_add_tbl_index-1);
11430 l_planning_start_date_tbl_tmp.extend(l_add_tbl_index-1);
11431 l_planning_end_date_tbl_tmp.extend(l_add_tbl_index-1);
11432 l_planned_ppl_effort_tbl_tmp.extend(l_add_tbl_index-1);
11433 l_raw_cost_tbl_tmp.extend(l_add_tbl_index-1);
11434 l_burdened_cost_tbl_tmp.extend(l_add_tbl_index-1);
11435
11436 FOR i in 1..l_add_tbl_index-1 LOOP
11437
11438 l_element_version_id_tbl_tmp (i):= l_element_version_id_tbl (i);
11439
11440 l_planning_start_date_tbl_tmp(i):= l_planning_start_date_tbl (i);
11441
11442 l_planning_end_date_tbl_tmp (i):= l_planning_end_date_tbl (i);
11443
11444 l_planned_ppl_effort_tbl_tmp (i):= l_planned_people_effort_tbl (i) ;
11445
11446 l_raw_cost_tbl_tmp (i) := l_raw_cost_tbl (i) ;
11447
11448 l_burdened_cost_tbl_tmp (i) := l_burdened_cost_tbl (i) ;
11449
11450 END LOOP;
11451 l_element_version_id_tbl :=l_element_version_id_tbl_tmp ;
11452 l_planning_start_date_tbl :=l_planning_start_date_tbl_tmp;
11453 l_planning_end_date_tbl :=l_planning_end_date_tbl_tmp ;
11454 l_planned_people_effort_tbl:=l_planned_ppl_effort_tbl_tmp ;
11455 l_raw_cost_tbl :=l_raw_cost_tbl_tmp ;
11456 l_burdened_cost_tbl :=l_burdened_cost_tbl_tmp ;
11457 IF l_debug_mode = 'Y' THEN
11458 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;
11459 print_msg(pa_debug.g_err_stage,l_module_name);
11460 END IF;
11461
11462
11463 IF l_add_tbl_index > 1 THEN
11464
11465 add_planning_transactions
11466 (
11467 p_context => PA_FP_CONSTANTS_PKG.G_CALLING_MODULE_WORKPLAN
11468 ,p_project_id => p_project_id
11469 ,p_struct_elem_version_id => p_struct_elem_version_id
11470 ,p_budget_version_id => NULL
11471 ,p_task_elem_version_id_tbl => l_element_version_id_tbl
11472 ,p_task_name_tbl => SYSTEM.PA_VARCHAR2_240_TBL_TYPE()
11473 ,p_task_number_tbl => SYSTEM.PA_VARCHAR2_100_TBL_TYPE()
11474 ,p_start_date_tbl => l_planning_start_date_tbl
11475 ,p_end_date_tbl => l_planning_end_date_tbl
11476 ,p_planned_people_effort_tbl => l_planned_people_effort_tbl
11477 ,p_latest_eff_pub_flag_tbl => SYSTEM.PA_VARCHAR2_1_TBL_TYPE()
11478 ,p_resource_list_member_id_tbl => SYSTEM.PA_NUM_TBL_TYPE()
11479 ,p_quantity_tbl => SYSTEM.PA_NUM_TBL_TYPE()
11480 ,p_currency_code_tbl => SYSTEM.PA_VARCHAR2_15_TBL_TYPE()
11481 ,p_raw_cost_tbl => l_raw_cost_tbl
11482 ,p_burdened_cost_tbl => l_burdened_cost_tbl
11483 ,p_revenue_tbl => SYSTEM.PA_NUM_TBL_TYPE()
11484 ,p_cost_rate_tbl => SYSTEM.PA_NUM_TBL_TYPE()
11485 ,p_bill_rate_tbl => SYSTEM.PA_NUM_TBL_TYPE()
11486 ,p_burdened_rate_tbl => SYSTEM.PA_NUM_TBL_TYPE()
11487 ,p_apply_progress_flag => p_apply_progress_flag
11488 ,x_return_status => l_return_status
11489 ,x_msg_count => l_msg_count
11490 ,x_msg_data => l_msg_data
11491 );
11492
11493 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11494 IF l_debug_mode = 'Y' THEN
11495 pa_debug.g_err_stage:='Called API PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions ,api returned error';
11496 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11497 END IF;
11498 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11499 END IF;
11500
11501 END IF;
11502
11503 IF l_debug_mode = 'Y' THEN
11504 pa_debug.reset_curr_function;
11505 END IF;
11506 EXCEPTION
11507 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
11508 l_msg_count := FND_MSG_PUB.count_msg;
11509 IF l_msg_count = 1 THEN
11510 PA_INTERFACE_UTILS_PUB.get_messages
11511 (p_encoded => FND_API.G_TRUE
11512 ,p_msg_index => 1
11513 ,p_msg_count => l_msg_count
11514 ,p_msg_data => l_msg_data
11515 ,p_data => l_data
11516 ,p_msg_index_out => l_msg_index_out);
11517 x_msg_data := l_data;
11518 x_msg_count := l_msg_count;
11519 ELSE
11520 x_msg_count := l_msg_count;
11521 END IF;
11522 x_return_status := FND_API.G_RET_STS_ERROR;
11523 IF l_debug_mode = 'Y' THEN
11524 pa_debug.reset_curr_function;
11525 END IF;
11526 WHEN OTHERS THEN
11527 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11528 x_msg_count := 1;
11529 x_msg_data := SQLERRM;
11530 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
11531 ,p_procedure_name => 'check_and_create_task_rec_info');
11532
11533 IF l_debug_mode = 'Y' THEN
11534 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
11535 pa_debug.write( l_module_name,pa_debug.g_err_stage,5);
11536 pa_debug.reset_curr_function;
11537 END IF;
11538 RAISE;
11539
11540 END check_and_create_task_rec_info;
11541
11542 /*=============================================================================
11543 This api would be called for a finplan version, whenever there is a change
11544 either in planning level or resource list or time phase or rbs version.
11545
11546 Logic: If no change in any of the parameters, simply return
11547 If planning level changes
11548 all the resource assignments would be deleted
11549 default planning resources are created
11550 If resource list changes
11551 all the task, resource mappings are deleted
11552 for task, financial element planning resources are updated with
11553 new rlm id and rbs id
11554 If RBS changes
11555 all the res assignments are updated with new rbs mapping
11556
11557 Bug 3867302 Sep 21 2004 For ci versions reporting data is not maintained
11558
11559 -- Note : This api is also called from PaFinPlanControlItemImpactAMImpl.java with p_time_phase_change_flag as 'Y' to
11560 -- delete the budget lines.
11561
11562 -- Bug 4724017: CDM Enhancement: Changes in behavior:
11563 Whenever the planning level is changed for an existing version,
11564 default planning transaction would be created only for the vesions
11565 which uses an uncategorized resource list.
11566 -- Bug 5754758: Modified to delete lines from pa_resource_asgn_curr before going to
11567 create_default_plan_txn api.
11568
11569 ==============================================================================*/
11570
11571 PROCEDURE Refresh_Plan_Txns(
11572 p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE
11573 ,p_plan_level_change IN VARCHAR2
11574 ,p_resource_list_change IN VARCHAR2
11575 ,p_rbs_version_change IN VARCHAR2
11576 ,p_time_phase_change_flag IN VARCHAR2
11577 ,p_ci_ver_agr_change_flag IN VARCHAR2 DEFAULT 'N' --IPM Arch Enhancement Bug 4865563
11578 ,p_rev_der_method_change IN VARCHAR2 DEFAULT 'N' --bug 5152892
11579 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11580 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11581 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
11582 AS
11583 --Start of variables used for debugging
11584 l_return_status VARCHAR2(1);
11585 l_msg_count NUMBER := 0;
11586 l_msg_data VARCHAR2(2000);
11587 l_data VARCHAR2(2000);
11588 l_msg_index_out NUMBER;
11589 l_debug_mode VARCHAR2(30);
11590 l_error_msg_code VARCHAR2(30);
11591
11592 l_people_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
11593 l_equip_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
11594 l_fin_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
11595 l_mat_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
11596
11597 l_txn_source_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11598 l_res_list_member_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11599 l_rbs_element_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11600 l_txn_accum_header_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11601
11602 l_budget_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11603
11604 -- IPM changes Bug 5003827 Issue 22
11605 l_fp_cols_rec pa_fp_gen_amount_utils.fp_cols;
11606 l_delete_ra_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
11607 l_delete_flag VARCHAR2(1); -- Bug 5003827 Issue 28
11608 l_rollup_flag VARCHAR2(1); -- Bug 5003827 Issue 28
11609 -- END of IPM changes Bug 5003827 Issue 22
11610
11611 CURSOR budget_version_info_cur IS
11612 SELECT bv.project_id project_id
11613 ,bv.resource_list_id
11614 ,Decode(bv.version_type
11615 ,'COST', cost_fin_plan_level_code
11616 ,'REVENUE', revenue_fin_plan_level_code
11617 ,'ALL', all_fin_plan_level_code) fin_plan_level_code
11618 ,pfo.rbs_version_id rbs_version_id
11619 ,pfo.fin_plan_type_id fin_plan_type_id
11620 ,bv.ci_id ci_id
11621 FROM pa_proj_fp_options pfo, pa_budget_versions bv
11622 WHERE bv.project_id = pfo.project_id
11623 AND pfo.fin_plan_version_id = bv.budget_version_id
11624 AND bv.budget_version_id = p_budget_version_id;
11625
11626 budget_version_info_rec budget_version_info_cur%ROWTYPE;
11627
11628 -- added for bug 4724017:
11629 l_res_list_uncategorized_flag pa_resource_lists_all_bg.uncategorized_flag%TYPE;
11630 --Bug 13701718 CBS related Chnages
11631 l_res_class_flag pa_resource_lists_all_bg.resource_class_flag%TYPE := 'Y';
11632 BEGIN
11633
11634 x_msg_count := 0;
11635 x_return_status := FND_API.G_RET_STS_SUCCESS;
11636
11637 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
11638 l_debug_mode := NVL(l_debug_mode, 'Y');
11639
11640 -- Set curr function
11641 IF l_debug_mode = 'Y' THEN
11642 PA_DEBUG.set_curr_function(
11643 p_function =>'PA_FP_PLANNING_TRANSACTION_PUB.Refresh_Plan_Txns'
11644 ,p_debug_mode => l_debug_mode );
11645 END IF;
11646 -- Check for business rules violations
11647
11648 IF l_debug_mode = 'Y' THEN
11649 pa_debug.g_err_stage:='Validating input parameters';
11650 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11651 END IF;
11652
11653 IF (p_budget_version_id IS NULL)
11654 THEN
11655
11656 IF l_debug_mode = 'Y' THEN
11657 pa_debug.g_err_stage:='p_budget_version_id = '|| p_budget_version_id;
11658 pa_debug.write('Refresh_Plan_Txns: ' ||g_module_name,pa_debug.g_err_stage,5);
11659 END IF;
11660
11661 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11662 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
11663
11664 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11665
11666 END IF;
11667
11668 -- If there is no change in planning level or res list or RBS return
11669
11670 IF nvl(p_plan_level_change, 'N') = 'N' AND
11671 nvl(p_resource_list_change, 'N') = 'N' AND
11672 nvl(p_rbs_version_change, 'N') = 'N' AND
11673 nvl(p_time_phase_change_flag, 'N') = 'N' AND
11674 nvl(p_rev_der_method_change,'N') = 'N' --Bug 5462471
11675 THEN
11676 IF l_debug_mode = 'Y' THEN
11677 pa_debug.g_err_stage:='No change required, Exiting Refresh_Plan_Txns';
11678 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11679 -- reset curr function
11680 pa_debug.Reset_Curr_Function();
11681 END IF;
11682 RETURN;
11683 END IF;
11684
11685 OPEN budget_version_info_cur;
11686 FETCH budget_version_info_cur INTO budget_version_info_rec;
11687 CLOSE budget_version_info_cur;
11688
11689 IF nvl(p_plan_level_change, 'N') = 'Y' OR
11690 nvl(p_resource_list_change, 'N') = 'Y' OR
11691 nvl(p_time_phase_change_flag, 'N') = 'Y' OR
11692 nvl(p_rev_der_method_change,'N') = 'Y' --Bug 5462471
11693
11694 THEN
11695 -- Delete all the budget lines for the budget version
11696
11697 -- Bug Fix: 4569365. Removed MRC code.
11698 /*
11699 DELETE
11700 FROM pa_mc_budget_lines
11701 WHERE budget_version_id = p_budget_version_id;
11702 */
11703
11704 DELETE
11705 FROM pa_budget_lines
11706 WHERE budget_version_id = p_budget_version_id;
11707
11708 -- --IPM Arch Enhancement Bug 4865563, Bug 5003827 Issue 28
11709 IF (nvl(p_ci_ver_agr_change_flag,'N') = 'Y'
11710 OR nvl(p_time_phase_change_flag, 'N') = 'Y') THEN
11711
11712 pa_fp_gen_amount_utils.get_plan_version_dtls
11713 (p_budget_version_id => p_budget_version_id,
11714 x_fp_cols_rec => l_fp_cols_rec,
11715 x_return_status => x_return_status,
11716 x_msg_count => x_msg_count,
11717 x_msg_data => x_msg_data);
11718
11719 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11720
11721 IF l_debug_mode = 'Y' THEN
11722 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
11723 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
11724 END IF;
11725 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11726 END IF;
11727
11728 -- Bug 5003827 Issue 28
11729 IF nvl(p_ci_ver_agr_change_flag,'N') = 'Y' THEN
11730 l_delete_flag := 'Y';
11731 l_rollup_flag := 'N';
11732 ELSE -- nvl(p_time_phase_change_flag, 'N') = 'Y'
11733
11734 l_delete_flag := 'N';
11735 l_rollup_flag := 'Y';
11736 END IF;
11737 -- END Bug 5003827 Issue 28
11738
11739 pa_res_asg_currency_pub.maintain_data(
11740 p_fp_cols_rec => l_fp_cols_rec,
11741 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
11742 p_delete_flag => l_delete_flag, -- Bug 5003827 Issue 28
11743 p_copy_flag => 'N',
11744 p_src_version_id => NULL,
11745 p_copy_mode => NULL,
11746 p_rollup_flag => l_rollup_flag, -- Bug 5003827 Issue 28
11747 p_version_level_flag => 'Y',
11748 p_called_mode => 'SELF_SERVICE',
11749 x_return_status => x_return_status,
11750 x_msg_count => x_msg_count,
11751 x_msg_data => x_msg_data
11752 );
11753
11754 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11755
11756 IF l_debug_mode = 'Y' THEN
11757 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
11758 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
11759 END IF;
11760 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11761 END IF;
11762
11763 END IF;
11764 ----IPM Arch Enhancement Bug 4865563
11765
11766
11767 IF nvl(p_plan_level_change, 'N') = 'Y' OR
11768 nvl(p_rev_der_method_change,'N') = 'Y' THEN --Bug 5462471
11769 -- Delete all the planning transactions for the version.
11770
11771 IF l_debug_mode = 'Y' THEN
11772 pa_debug.g_err_stage:='Deleting all the resource assignment records for the version';
11773 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11774 END IF;
11775
11776 DELETE
11777 FROM pa_resource_assignments
11778 WHERE budget_version_id = p_budget_version_id
11779 -- IPM changes Bug 5003827 Issue 22
11780 RETURNING resource_assignment_id BULK COLLECT INTO l_delete_ra_id_tbl;
11781 /* Bug 5754758 - Commenting the code, as the maintain_data is now called in version level mode to delete the RACs.
11782 IF l_delete_ra_id_tbl.COUNT > 0 THEN
11783 FORALL i IN l_delete_ra_id_tbl.first .. l_delete_ra_id_tbl.last
11784 INSERT INTO pa_resource_asgn_curr_tmp
11785 (RA_TXN_ID
11786 ,RESOURCE_ASSIGNMENT_ID
11787 ,DELETE_FLAG
11788 )
11789 SELECT pa_resource_asgn_curr_s.NEXTVAL
11790 ,l_delete_ra_id_tbl(i)
11791 ,'Y'
11792 FROM DUAL;
11793 END IF;
11794 -- END of IPM changes Bug 5003827 Issue 22
11795 */
11796 ----IPM Arch Enhancement Bug 5754758/4865563
11797 IF l_delete_ra_id_tbl.COUNT > 0 THEN --{
11798 pa_fp_gen_amount_utils.get_plan_version_dtls
11799 (p_budget_version_id => p_budget_version_id,
11800 x_fp_cols_rec => l_fp_cols_rec,
11801 x_return_status => x_return_status,
11802 x_msg_count => x_msg_count,
11803 x_msg_data => x_msg_data);
11804
11805 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11806
11807 IF l_debug_mode = 'Y' THEN
11808 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
11809 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
11810 END IF;
11811 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11812 END IF;
11813
11814 pa_res_asg_currency_pub.maintain_data(
11815 p_fp_cols_rec => l_fp_cols_rec,
11816 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
11817 p_delete_flag => 'Y',
11818 p_copy_flag => 'N',
11819 p_src_version_id => NULL,
11820 p_copy_mode => NULL,
11821 p_rollup_flag => 'N',
11822 p_version_level_flag => 'Y',
11823 p_called_mode => 'SELF_SERVICE',
11824 x_return_status => x_return_status,
11825 x_msg_count => x_msg_count,
11826 x_msg_data => x_msg_data
11827 );
11828
11829 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11830
11831 IF l_debug_mode = 'Y' THEN
11832 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
11833 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
11834 END IF;
11835 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11836 END IF;
11837
11838 END IF;
11839 ----IPM Arch Enhancement Bug 5754758/4865563
11840
11841 -- bug 4724017: Checking for categorized resource list to avoid
11842 -- calling create_default_task_plan_txns, not to create default
11843 -- planning txns for categorized RLs, when planning level changes.
11844 IF l_debug_mode = 'Y' THEN
11845 pa_debug.g_err_stage:='Fetching uncategorized flag when planning level changes';
11846 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11847 END IF;
11848 BEGIN
11849 SELECT nvl(uncategorized_flag,'N')
11850 INTO l_res_list_uncategorized_flag
11851 FROM pa_resource_lists_all_bg
11852 WHERE resource_list_id = budget_version_info_rec.resource_list_id;
11853
11854 IF l_debug_mode = 'Y' THEN
11855 pa_debug.g_err_stage:='l_res_list_uncategorized_flag: ' || l_res_list_uncategorized_flag;
11856 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11857 END IF;
11858 EXCEPTION
11859 WHEN NO_DATA_FOUND THEN
11860 IF l_debug_mode = 'Y' THEN
11861 pa_debug.g_err_stage:='No uncategorized flag found for the resource list id passed';
11862 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11863 END IF;
11864 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11865 END;
11866
11867 -- added for bug 4724017:
11868 -- Creation of default planning transaction is not done for versions
11869 -- being created with categorized resource list.
11870 IF l_res_list_uncategorized_flag = 'Y' THEN
11871 -- Insert default task planning trasaction for the version
11872
11873 IF l_debug_mode = 'Y' THEN
11874 pa_debug.g_err_stage:='Calling pa_fp_planning_transaction_pub.create_default_task_plan_txns';
11875 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11876 END IF;
11877
11878 pa_fp_planning_transaction_pub.create_default_task_plan_txns (
11879 p_budget_version_id => p_budget_version_id
11880 ,p_version_plan_level_code => budget_version_info_rec.fin_plan_level_code
11881 ,x_return_status => x_return_status
11882 ,x_msg_count => x_msg_count
11883 ,x_msg_data => x_msg_data );
11884
11885 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11886 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11887 END IF;
11888
11889 END IF; -- end bug 4724017
11890 END IF;
11891
11892 IF nvl(p_resource_list_change, 'N') = 'Y' THEN
11893
11894 -- Delete all the planning resources where neither rlmID is 0
11895 -- Or resource is 'FINANCIAL_ELEMENTS'
11896 -- Bug 3658232 added null handling for resource class flag
11897 --Bug 13701718 CBS related Chnages start here
11898 l_res_class_flag := PA_FP_GEN_AMOUNT_UTILS.get_src_resource_class_flag(p_budget_version_id);
11899 IF nvl(l_res_class_flag,'Y') = 'N' THEN
11900 DELETE FROM pa_resource_assignments
11901 WHERE budget_version_id = p_budget_version_id
11902 RETURNING resource_assignment_id BULK COLLECT INTO l_delete_ra_id_tbl;
11903 ELSE
11904 DELETE FROM pa_resource_assignments
11905 WHERE budget_version_id = p_budget_version_id
11906 AND
11907 NOT (resource_class_code = 'FINANCIAL_ELEMENTS' AND nvl(resource_class_flag,'N') = 'Y')
11908 -- IPM changes Bug 5003827 Issue 22
11909 RETURNING resource_assignment_id BULK COLLECT INTO l_delete_ra_id_tbl;
11910 END IF;
11911 --Bug 13701718 CBS related Chnages end here
11912 IF l_delete_ra_id_tbl.COUNT > 0 THEN
11913 FORALL i IN l_delete_ra_id_tbl.first .. l_delete_ra_id_tbl.last
11914 INSERT INTO pa_resource_asgn_curr_tmp
11915 (RA_TXN_ID
11916 ,RESOURCE_ASSIGNMENT_ID
11917 ,DELETE_FLAG
11918 )
11919 SELECT pa_resource_asgn_curr_s.NEXTVAL
11920 ,l_delete_ra_id_tbl(i)
11921 ,'Y'
11922 FROM DUAL;
11923 END IF;
11924 -- END of IPM changes Bug 5003827 Issue 22
11925
11926
11927 -- Fetch rlm id of FINANCIAL ELEMENT resource class for new resource list id
11928
11929 PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
11930 ( p_project_id => budget_version_info_rec.project_id
11931 ,p_resource_list_id => budget_version_info_rec.resource_list_id
11932 ,x_people_res_class_rlm_id => l_people_res_class_rlm_id
11933 ,x_equip_res_class_rlm_id => l_equip_res_class_rlm_id
11934 ,x_fin_res_class_rlm_id => l_fin_res_class_rlm_id
11935 ,x_mat_res_class_rlm_id => l_mat_res_class_rlm_id
11936 ,x_return_status => l_return_status
11937 ,x_msg_count => l_msg_count
11938 ,x_msg_data => l_msg_data);
11939
11940 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11941 IF l_debug_mode = 'Y' THEN
11942 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
11943 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
11944 END IF;
11945 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11946 END IF;
11947
11948 -- Update all the task planning elements with new FINACIAL ELEMENT rlmid
11949 IF l_debug_mode = 'Y' THEN
11950 pa_debug.g_err_stage:='Updaing res assignments with new FINANCIAL ELEMENTS rlmid : ' || l_fin_res_class_rlm_id;
11951 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
11952 END IF;
11953
11954 UPDATE pa_resource_assignments
11955 SET resource_list_member_id = l_fin_res_class_rlm_id
11956 WHERE budget_version_id = p_budget_version_id;
11957 --AND resource_class_code = 'FINANCIAL_ELEMENTS' --Bug 4200168. RL/PL change both can not happen at the same time.
11958 --AND resource_class_flag = 'Y';
11959
11960 END IF;
11961
11962 -- IPM changes Bug 5003827 Issue 22
11963 IF l_delete_ra_id_tbl.COUNT > 0 THEN --{
11964 pa_fp_gen_amount_utils.get_plan_version_dtls
11965 (p_project_id => budget_version_info_rec.project_id,
11966 p_budget_version_id => p_budget_version_id,
11967 x_fp_cols_rec => l_fp_cols_rec,
11968 x_return_status => x_return_status,
11969 x_msg_count => x_msg_count,
11970 x_msg_data => x_msg_data);
11971
11972 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11973
11974 IF l_debug_mode = 'Y' THEN
11975 pa_debug.g_err_stage:='Called API pa_fp_gen_amount_utils.get_plan_version_dtls returned error';
11976 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
11977 END IF;
11978 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
11979 END IF;
11980
11981 pa_res_asg_currency_pub.maintain_data(
11982 p_fp_cols_rec => l_fp_cols_rec,
11983 p_calling_module => 'UPDATE_PLAN_TRANSACTION',
11984 p_delete_flag => 'Y',
11985 p_copy_flag => 'N',
11986 p_src_version_id => NULL,
11987 p_copy_mode => NULL,
11988 p_rollup_flag => 'N',
11989 p_version_level_flag => 'N',
11990 p_called_mode => 'SELF_SERVICE',
11991 x_return_status => x_return_status,
11992 x_msg_count => x_msg_count,
11993 x_msg_data => x_msg_data
11994 );
11995
11996 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11997
11998 IF l_debug_mode = 'Y' THEN
11999 pa_debug.g_err_stage:='Called API pa_res_asg_currency_pub.maintain_data returned error';
12000 pa_debug.WRITE('pa_fp_planning_transaction_pub.Refresh_Plan_Txns',pa_debug.g_err_stage, 3);
12001 END IF;
12002 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12003 END IF;
12004 END IF; --} IF l_delete_ra_id_tbl.COUNT > 0 THEN
12005 -- END of IPM changes Bug 5003827 Issue 22
12006
12007
12008 -- Calling the rollup api to correct the amounts related data in
12009 -- pa_budget_versions and pa_resource_assignments for the entire version
12010 PA_FP_ROLLUP_PKG.rollup_budget_version
12011 (p_budget_version_id => p_budget_version_id
12012 ,p_entire_version => 'Y'
12013 ,x_return_status => l_return_status
12014 ,x_msg_count => l_msg_count
12015 ,x_msg_data => l_msg_data);
12016
12017 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12018 IF l_debug_mode = 'Y' THEN
12019 pa_debug.g_err_stage:='Called API PA_FP_ROLLUP_PKG.rollup_budget_version returned error';
12020 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
12021 END IF;
12022 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12023 END IF;
12024 END IF;
12025
12026 -- Note: As of now rbs can not be changed at version level.
12027 -- It can only be changed at plan type level. This has been
12028 -- the initial design and not changed
12029 IF nvl(p_rbs_version_change, 'N') = 'Y' AND
12030 (budget_version_info_rec.ci_id IS NULL) -- bug 3867302
12031 THEN
12032
12033 Refresh_rbs_for_versions(
12034 p_project_id => budget_version_info_rec.project_id
12035 ,p_fin_plan_type_id => budget_version_info_rec.fin_plan_type_id
12036 ,p_calling_context => 'SINGLE_VERSION'
12037 ,p_budget_version_id => p_budget_version_id
12038 ,x_return_status => l_return_status
12039 ,x_msg_count => l_msg_count
12040 ,x_msg_data => l_msg_data);
12041
12042 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12043 IF l_debug_mode = 'Y' THEN
12044 pa_debug.g_err_stage:='Called API Refresh_rbs_for_versions returned error';
12045 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
12046 END IF;
12047 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12048 END IF;
12049 END IF;
12050
12051 -- If Planning Level, Resource list or Time phasing is changed, calling PJI apis for
12052 -- correct summarization data
12053 IF (budget_version_info_rec.ci_id IS NULL) AND -- bug 3867302
12054 (nvl(p_rbs_version_change, 'N') = 'N') AND -- put for clarity
12055 (nvl(p_plan_level_change, 'N') = 'Y' OR
12056 nvl(p_resource_list_change, 'N') = 'Y' OR
12057 nvl(p_time_phase_change_flag, 'N') = 'Y' OR
12058 nvl(p_rev_der_method_change,'N') ='Y' )--Bug 5462471
12059 THEN
12060 -- populating the l_budget_version_id_tbl with p_budget_version_id
12061 l_budget_version_id_tbl := SYSTEM.pa_num_tbl_type(p_budget_version_id);
12062
12063 IF l_debug_mode = 'Y' THEN
12064 pa_debug.g_err_stage:='Calling PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE';
12065 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
12066 END IF;
12067
12068 -- Call PJI delete api first to delete existing summarization data
12069 PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
12070 p_fp_version_ids => l_budget_version_id_tbl,
12071 x_return_status => l_return_status,
12072 x_msg_code => l_error_msg_code);
12073
12074 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12075 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12076 p_msg_name => l_error_msg_code);
12077 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12078 END IF;
12079
12080 IF l_debug_mode = 'Y' THEN
12081 pa_debug.g_err_stage:='Call complete to PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE';
12082 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
12083 END IF;
12084
12085 IF l_debug_mode = 'Y' THEN
12086 pa_debug.g_err_stage:='Calling PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE';
12087 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
12088 END IF;
12089
12090 -- Call PLAN_CREATE to create summarization data as per the new RBS
12091 PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE (
12092 p_fp_version_ids => l_budget_version_id_tbl,
12093 x_return_status => l_return_status,
12094 x_msg_code => l_error_msg_code);
12095
12096 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12097 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12098 p_msg_name => l_error_msg_code);
12099 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12100 END IF;
12101
12102 IF l_debug_mode = 'Y' THEN
12103 pa_debug.g_err_stage:='Call complete to PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE';
12104 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
12105 END IF;
12106
12107 END IF;
12108
12109 IF l_debug_mode = 'Y' THEN
12110 pa_debug.g_err_stage:='Exiting Refresh_Plan_Txns';
12111 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,3);
12112 -- reset curr function
12113 pa_debug.Reset_Curr_Function();
12114 END IF;
12115
12116 EXCEPTION
12117
12118 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12119 l_msg_count := FND_MSG_PUB.count_msg;
12120 IF l_msg_count = 1 THEN
12121 PA_INTERFACE_UTILS_PUB.get_messages
12122 (p_encoded => FND_API.G_TRUE
12123 ,p_msg_index => 1
12124 ,p_msg_count => l_msg_count
12125 ,p_msg_data => l_msg_data
12126 ,p_data => l_data
12127 ,p_msg_index_out => l_msg_index_out);
12128
12129 x_msg_data := l_data;
12130 x_msg_count := l_msg_count;
12131 ELSE
12132 x_msg_count := l_msg_count;
12133 END IF;
12134
12135 x_return_status := FND_API.G_RET_STS_ERROR;
12136
12137 IF l_debug_mode = 'Y' THEN
12138 pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
12139 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
12140 -- reset curr function
12141 pa_debug.Reset_Curr_Function();
12142 END IF;
12143
12144 RETURN;
12145 WHEN Others THEN
12146 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12147 x_msg_count := 1;
12148 x_msg_data := SQLERRM;
12149
12150 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
12151 ,p_procedure_name => 'Refresh_Plan_Txns');
12152
12153 IF l_debug_mode = 'Y' THEN
12154 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
12155 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
12156 -- reset curr function
12157 pa_debug.Reset_Curr_Function();
12158 END IF;
12159 RAISE;
12160 END Refresh_Plan_Txns;
12161
12162
12163 /* This api will call add_planning_transaction in such a way that calculate api would
12164 never be called . For IPM development added two parameters p_calling_context .
12165 This will be passed as SELECT_TASKS from the select tasks page. The add planning
12166 transactions will be called from here passing the context as create_version. This
12167 is because this flow is also used from the add tasks and resources page to add the
12168 tasks and resources as planning elements depending on the choice.*/
12169 PROCEDURE Create_Default_Task_Plan_Txns (
12170 P_budget_version_id IN Number
12171 ,P_version_plan_level_code IN VARCHAR2
12172 ,p_calling_context IN VARCHAR2
12173 ,p_add_all_resources_flag IN VARCHAR2
12174 ,X_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12175 ,X_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12176 ,X_msg_data OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
12177 AS
12178
12179
12180 l_module_name varchar2(100):= 'pa.plsql.pa_fp_planning_transaction_pub';
12181
12182 -- Start of variables used for debugging purpose
12183 l_msg_count NUMBER :=0;
12184 l_data VARCHAR2(2000);
12185 l_msg_data VARCHAR2(2000);
12186 l_error_msg_code VARCHAR2(30);
12187 l_msg_index_out NUMBER;
12188 l_return_status VARCHAR2(2000);
12189 l_debug_mode VARCHAR2(30);
12190 -- End of variables used for debugging purpose
12191
12192 CURSOR version_info_cur (c_budget_version_id number) is
12193 select bv.project_id
12194 ,PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(bv.project_id) STRUCTURE_VERSION_ID --Bug 3546208
12195 ,bv.fin_plan_type_id
12196 ,Decode(bv.version_type,PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_COST,pfo.cost_fin_plan_level_code
12197 ,PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_REVENUE,pfo.revenue_fin_plan_level_code
12198 ,PA_FP_CONSTANTS_PKG.G_ELEMENT_TYPE_ALL,pfo.all_fin_plan_level_code) plan_level_code
12199 ,DECODE(fin_plan_preference_code,
12200 PA_FP_CONSTANTS_PKG.G_PREF_COST_AND_REV_SAME, pfo.all_resource_list_id,
12201 PA_FP_CONSTANTS_PKG.G_PREF_COST_ONLY, pfo.cost_resource_list_id,
12202 PA_FP_CONSTANTS_PKG.G_PREF_REVENUE_ONLY, pfo.revenue_resource_list_id) resource_list_id
12203 from pa_budget_versions bv,
12204 pa_proj_fp_options pfo
12205 where bv.budget_version_id = c_budget_version_id
12206 and pfo.project_id = bv.project_id
12207 and pfo.fin_plan_type_id = bv.fin_plan_type_id
12208 and pfo.fin_plan_version_id = bv.budget_version_id;
12209
12210 version_info_rec version_info_cur%ROWTYPE;
12211
12212 CURSOR lowest_tasks_cur (c_parent_structure_version_id number) is
12213 select v.element_version_id
12214 from pa_struct_task_wbs_v v
12215 where v.parent_structure_version_id = c_parent_structure_version_id
12216 and v.financial_task_flag = 'Y' -- raja bug 3690418
12217 and v.task_level = 'L'
12218 and not exists (select 'x'
12219 from pa_resource_assignments pra
12220 where pra.budget_version_id = P_budget_version_id
12221 and pra.task_id = v.task_id
12222 and p_calling_context = 'SELECT_TASKS');
12223
12224 CURSOR top_tasks_cur (c_project_id number, c_parent_structure_version_id number) is
12225 select b.element_version_id
12226 from pa_tasks a, pa_proj_element_versions b
12227 /* Replaced pa_struct_task_wbs_v with base tables for performance reasons.
12228 * Note that financial_task_flag of pa_proj_element_versions cannot be used
12229 * since it is set to Y even for tasks that are part of fin struct ver but not
12230 * yet published. (I.e., It could be Y for tasks not present in pa_tasks too). This
12231 * required a join with pa_tasks to identify true fin tasks which can be
12232 * budgeted for */
12233 where b.parent_structure_version_id = c_parent_structure_version_id
12234 and b.object_type = 'PA_TASKS'
12235 and a.project_id = c_project_id
12236 and a.project_id = b.project_id
12237 and a.task_id = b.proj_element_id
12238 and a.task_id = a.top_task_id
12239 and not exists (select 'x'
12240 from pa_resource_assignments pra
12241 where pra.budget_version_id = P_budget_version_id
12242 and pra.task_id = a.task_id
12243 and p_calling_context = 'SELECT_TASKS');
12244
12245 l_max_fetch_size NUMBER := 200;
12246
12247 l_element_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
12248
12249 --l_proj_element_id_tbl element_versions_tbl1_type;
12250 --l_element_version_id_tbl element_versions_tbl2_type;
12251 l_resource_list_member_id_tbl SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE();
12252
12253 l_start_date pa_projects_all.start_date%TYPE;
12254 l_completion_date pa_projects_all.completion_date%TYPE;
12255
12256 l_res_list_is_uncategorized VARCHAR2(1);
12257 l_is_resource_list_grouped VARCHAR2(1);
12258 l_group_resource_type_id NUMBER;
12259
12260 l_people_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
12261 l_equip_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
12262 l_fin_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE :=0;
12263 l_mat_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
12264
12265 l_plan_class_code pa_fin_plan_types_b.plan_class_code%TYPE;
12266
12267 BEGIN
12268 FND_MSG_PUB.initialize;
12269 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
12270 l_debug_mode := NVL(l_debug_mode, 'Y');
12271 IF l_debug_mode = 'Y' THEN
12272 pa_debug.set_curr_function( p_function => 'Create_Default_Task_Plan_Txns',
12273 p_debug_mode => l_debug_mode );
12274 END IF;
12275 x_msg_count := 0;
12276 x_return_status := FND_API.G_RET_STS_SUCCESS;
12277
12278
12279 -- Check for business rules violations
12280
12281 IF l_debug_mode = 'Y' THEN
12282 pa_debug.g_err_stage:='Validating input parameters';
12283 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12284 END IF;
12285
12286 -- Check if budget version id is null
12287
12288 IF (P_budget_version_id IS NULL) OR
12289 (nvl(p_calling_context,'-1') NOT IN ('CREATE_VERSION','SELECT_TASKS')) OR
12290 (nvl(p_add_all_resources_flag,'x') NOT IN ('Y','N'))
12291 THEN
12292
12293 IF l_debug_mode = 'Y' THEN
12294 pa_debug.g_err_stage:='P_budget_version_id = '||P_budget_version_id;
12295 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
12296 END IF;
12297
12298 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12299 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
12300
12301 IF l_debug_mode = 'Y' THEN
12302 pa_debug.g_err_stage:='Invalid Arguments Passed';
12303 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
12304 END IF;
12305 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12306
12307 END IF;
12308
12309 --Fetch budget version values
12310
12311 IF l_debug_mode = 'Y' THEN
12312 pa_debug.g_err_stage:='Fetching budget version properties';
12313 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12314 END IF;
12315
12316 OPEN version_info_cur(P_budget_version_id);
12317 FETCH version_info_cur INTO version_info_rec;
12318 CLOSE version_info_cur;
12319
12320 --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> valueof input '|| P_version_plan_level_code);
12321 IF P_version_plan_level_code IS NOT NULL THEN
12322 version_info_rec.plan_level_code := P_version_plan_level_code;
12323 END IF;
12324 --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> valueof version_info_rec '|| version_info_rec.plan_level_code);
12325
12326 --Fetch Start Date and Completion Date
12327
12328 BEGIN
12329 SELECT start_date,completion_date
12330 INTO l_start_date,l_completion_date
12331 FROM pa_projects_all
12332 WHERE project_id = version_info_rec.project_id;
12333 EXCEPTION
12334 WHEN OTHERS THEN
12335 IF l_debug_mode = 'Y' THEN
12336 pa_debug.g_err_stage:='Error while fetching start and completion dates for the project';
12337 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12338 END IF;
12339 RAISE;
12340 END;
12341
12342
12343 PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
12344 (p_project_id => version_info_rec.project_id,
12345 p_resource_list_id => version_info_rec.resource_list_id,
12346 x_people_res_class_rlm_id => l_people_res_class_rlm_id,
12347 x_equip_res_class_rlm_id => l_equip_res_class_rlm_id ,
12348 x_fin_res_class_rlm_id => l_fin_res_class_rlm_id ,
12349 x_mat_res_class_rlm_id => l_mat_res_class_rlm_id ,
12350 x_return_status => l_return_status,
12351 x_msg_count => l_msg_count,
12352 x_msg_data => l_msg_data);
12353 --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);
12354
12355 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12356 IF l_debug_mode = 'Y' THEN
12357 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
12358 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
12359 END IF;
12360 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12361 END IF;
12362
12363 BEGIN
12364 SELECT plan_class_code
12365 INTO l_plan_class_code
12366 FROM pa_fin_plan_types_b
12367 where fin_plan_type_id = version_info_rec.fin_plan_type_id;
12368
12369 EXCEPTION
12370 WHEN OTHERS THEN
12371 IF l_debug_mode = 'Y' THEN
12372 pa_debug.g_err_stage:='Error while fetching plan_class_code for the budget_version_id';
12373 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
12374 END IF;
12375 RAISE;
12376 END;
12377
12378 --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> plan_class_code '|| l_plan_class_code);
12379
12380 IF p_add_all_resources_flag <> 'Y' THEN
12381 l_resource_list_member_id_tbl.extend(1);
12382 l_resource_list_member_id_tbl(1):= l_fin_res_class_rlm_id;
12383 ELSE
12384 SELECT resource_list_member_id BULK COLLECT
12385 INTO l_resource_list_member_id_tbl
12386 FROM pa_resource_list_members prl,
12387 PA_PLAN_RES_DEFAULTS pr, /*7291493*/
12388 (SELECT control_flag
12389 FROM pa_resource_lists_all_bg
12390 WHERE resource_list_id = version_info_rec.resource_list_id) rl_control_flag
12391 WHERE resource_list_id = version_info_rec.resource_list_id
12392 AND ((rl_control_flag.control_flag = 'N' AND
12393 prl.object_type = 'PROJECT' AND
12394 prl.object_id = version_info_rec.project_id)
12395 OR
12396 (rl_control_flag.control_flag = 'Y' AND
12397 prl.object_type = 'RESOURCE_LIST' AND
12398 prl.object_id = version_info_rec.resource_list_id)) AND
12399 prl.resource_class_id = pr.resource_class_id AND
12400 pr.enabled_flag = 'Y';
12401 END IF;
12402
12403
12404 IF version_info_rec.plan_level_code = PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_PROJECT THEN
12405 IF l_debug_mode = 'Y' THEN
12406 pa_debug.g_err_stage:= 'Planning at project level: Inserting a record';
12407 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12408 END IF;
12409
12410 l_element_version_id_tbl.extend(1);
12411 l_element_version_id_tbl(1):= 0;
12412
12413 pa_fp_planning_transaction_pub.add_planning_transactions (
12414 p_context => l_plan_class_code
12415 /* Passing calling module as creation version, since we dont want calculate api to be called */
12416 ,p_calling_module => 'CREATE_VERSION'
12417 ,p_project_id => version_info_rec.project_id
12418 ,p_budget_version_id => p_budget_version_id
12419 ,p_task_elem_version_id_tbl => l_element_version_id_tbl
12420 ,p_resource_list_member_id_tbl => l_resource_list_member_id_tbl
12421 ,x_return_status => l_return_status
12422 ,x_msg_count => l_msg_count
12423 ,x_msg_data => l_msg_data );
12424
12425 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12426 IF l_debug_mode = 'Y' THEN
12427 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
12428 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
12429 END IF;
12430 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12431 END IF;
12432
12433
12434 ELSIF version_info_rec.plan_level_code = PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_TOP THEN
12435 IF l_debug_mode = 'Y' THEN
12436 pa_debug.g_err_stage:= 'Planning at top task level: Opening cursor top_tasks_cur';
12437 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12438 END IF;
12439
12440 OPEN top_tasks_cur( version_info_rec.project_id, version_info_rec.structure_version_id);
12441
12442 IF l_debug_mode = 'Y' THEN
12443 pa_debug.g_err_stage:= 'Fetching cursor values for top tasks and doing bulk insert';
12444 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12445 END IF;
12446
12447 LOOP
12448 FETCH top_tasks_cur BULK COLLECT INTO l_element_version_id_tbl LIMIT l_max_fetch_size;
12449
12450 IF nvl(l_element_version_id_tbl.last,0) >= 1 THEN
12451 pa_fp_planning_transaction_pub.add_planning_transactions (
12452 p_context => l_plan_class_code
12453 /* Passing calling module as creation version, since we dont want calculate api to be called */
12454 ,p_calling_module => 'CREATE_VERSION'
12455 ,p_project_id => version_info_rec.project_id
12456 ,p_budget_version_id => p_budget_version_id
12457 ,p_task_elem_version_id_tbl => l_element_version_id_tbl
12458 ,p_resource_list_member_id_tbl => l_resource_list_member_id_tbl
12459 ,x_return_status => l_return_status
12460 ,x_msg_count => l_msg_count
12461 ,x_msg_data => l_msg_data );
12462 END IF;
12463
12464 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12465 IF l_debug_mode = 'Y' THEN
12466 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
12467 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
12468 END IF;
12469 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12470 END IF;
12471 -- Exit if fetch size is less than 200
12472 EXIT WHEN NVL(l_element_version_id_tbl.last,0) < l_max_fetch_size;
12473 END LOOP;
12474
12475 CLOSE top_tasks_cur;
12476
12477 ELSIF version_info_rec.plan_level_code = PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_LOWEST THEN
12478 --hr_utility.trace('G_BUDGET_ENTRY_LEVEL_LOWEST -> '||PA_FP_CONSTANTS_PKG.G_BUDGET_ENTRY_LEVEL_LOWEST);
12479
12480 IF l_debug_mode = 'Y' THEN
12481 pa_debug.g_err_stage:= 'Planning at lowest task level: Opening cursor lowest_tasks_cur';
12482 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12483 END IF;
12484
12485 OPEN lowest_tasks_cur( version_info_rec.structure_version_id);
12486
12487 IF l_debug_mode = 'Y' THEN
12488 pa_debug.g_err_stage:= 'Fetching cursor values for lowest tasks and doing bulk insert';
12489 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12490 END IF;
12491
12492
12493
12494 LOOP
12495 FETCH lowest_tasks_cur BULK COLLECT INTO l_element_version_id_tbl LIMIT l_max_fetch_size;
12496
12497 IF nvl(l_element_version_id_tbl.last,0) >= 1 THEN
12498 pa_fp_planning_transaction_pub.add_planning_transactions (
12499 p_context => l_plan_class_code
12500 /* Passing calling module as creation version, since we dont want calculate api to be called */
12501 ,p_calling_module => 'CREATE_VERSION'
12502 ,p_project_id => version_info_rec.project_id
12503 ,p_budget_version_id => p_budget_version_id
12504 ,p_task_elem_version_id_tbl => l_element_version_id_tbl
12505 ,p_resource_list_member_id_tbl => l_resource_list_member_id_tbl
12506 ,x_return_status => l_return_status
12507 ,x_msg_count => l_msg_count
12508 ,x_msg_data => l_msg_data );
12509
12510 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12511 IF l_debug_mode = 'Y' THEN
12512 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
12513 pa_debug.write('PA_FP_PLANNING_TRANSACTION_PUB.Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
12514 END IF;
12515 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12516 END IF;
12517 END IF;
12518 -- Exit if fetch size is less than 200
12519 EXIT WHEN NVL(l_element_version_id_tbl.last,0) < l_max_fetch_size;
12520 END LOOP;
12521
12522 CLOSE lowest_tasks_cur;
12523 END IF;
12524
12525 IF l_debug_mode = 'Y' THEN
12526 pa_debug.g_err_stage:='Exiting Create_Default_Task_Plan_Txns:';
12527 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,3);
12528 --Reset the error stack
12529 pa_debug.reset_curr_function;
12530 END IF;
12531 EXCEPTION
12532
12533 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
12534 l_msg_count := FND_MSG_PUB.count_msg;
12535 IF l_msg_count = 1 THEN
12536 PA_INTERFACE_UTILS_PUB.get_messages
12537 (p_encoded => FND_API.G_TRUE
12538 ,p_msg_index => 1
12539 ,p_msg_count => l_msg_count
12540 ,p_msg_data => l_msg_data
12541 ,p_data => l_data
12542 ,p_msg_index_out => l_msg_index_out);
12543 x_msg_data := l_data;
12544 x_msg_count := l_msg_count;
12545 ELSE
12546 x_msg_count := l_msg_count;
12547 END IF;
12548 x_return_status := FND_API.G_RET_STS_ERROR;
12549 -- pa_debug.g_err_stage:='Invalid Arguments Passed';
12550 -- pa_debug.write(l_module_name,pa_debug.g_err_stage,5);
12551 IF l_debug_mode = 'Y' THEN
12552 pa_debug.reset_curr_function;
12553 END IF;
12554 RETURN;
12555
12556 WHEN Others THEN
12557 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12558 x_msg_count := 1;
12559 x_msg_data := SQLERRM;
12560 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
12561 ,p_procedure_name => 'CREATE_DEFAULT_TASK_PLAN_TXNS');
12562 IF l_debug_mode = 'Y' THEN
12563 pa_debug.g_err_stage:='Unexpected Error ' || SQLERRM;
12564 pa_debug.write('Create_Default_Task_Plan_Txns: ' || l_module_name,pa_debug.g_err_stage,5);
12565 pa_debug.reset_curr_function;
12566 END IF;
12567 RAISE;
12568
12569 END Create_Default_Task_Plan_Txns;
12570
12571 /*=============================================================================
12572 This api is called upon save from Additional Workplan Options page.
12573 For versioning disabled case working version should be updated with values
12574 that of parent plan type record. The changes include deleting all the
12575 existing budget lines, resource assignments. Pa_proj_fp_options and
12576 pa_budget_versions should be updated with changed values.
12577
12578 Bug 3595063 For a shared structure, update current working version with the
12579 new settings.
12580
12581 Bug 3619687 **** Completely changed as per the new business rules ********
12582 Whenever there is a change in the Additional Workplan setting page,
12583 all the chages should be propagated to all the underlying workplan
12584 versions immediately upon save. If there is a change in RBS header,
12585 effort data for all the versions including published versions
12586 should be re-mapped and re-summarized
12587
12588 Bug 3619687 **** 15-Jun-2004 Additional Change Request for RBS change ****
12589 Whenever there is a change for RBS if versioning is disabled for
12590 the workplan structure, the change should be propagated to the
12591 workplan version immediately. If versioning is enabled, the change
12592 is applicable for all the future versions.
12593
12594 Bug 3619687 **** 25-Jun-2004 Additional Change Request ****
12595 Whenever there is a change to track workplan costs flag, calculate
12596 should be called for the costs to be calculted or nulled out as per
12597 the change.
12598 Bug 3725414 **** 28-Jun-2004 rbs_version_change should be propagated to working
12599 workplan version(s) of shared + versioning enabled structure
12600
12601 Bug 3937716 **** 07-Oct-2004 When time phasing has changed, pji data is not
12602 correct at the end of the process. Reason: delete_planning_transactions
12603 and calculate() do not have the old time phased code to pass it to
12604 the PJI update api for negating existing data. So, its decided that we
12605 change the above two apis not to call PJI apis in this flow and call
12606 plan_delete(), plan_create() at the end.
12607 ===============================================================================*/
12608
12609 PROCEDURE REFRESH_WP_SETTINGS(
12610 p_project_id IN pa_budget_versions.project_id%TYPE
12611 ,p_resource_list_change IN VARCHAR2 DEFAULT 'N' -- Bug 3619687
12612 ,p_time_phase_change IN VARCHAR2 DEFAULT 'N' -- Bug 3619687
12613 ,p_rbs_version_change IN VARCHAR2 DEFAULT 'N' -- Bug 3619687
12614 ,p_track_costs_flag_change IN VARCHAR2 DEFAULT 'N' -- Bug 3619687
12615 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12616 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12617 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
12618 AS
12619
12620 --Start of variables used for debugging
12621
12622 l_return_status VARCHAR2(1);
12623 l_msg_count NUMBER := 0;
12624 l_msg_data VARCHAR2(2000);
12625 l_data VARCHAR2(2000);
12626 l_msg_index_out NUMBER;
12627 l_debug_mode VARCHAR2(30);
12628 l_error_msg_code VARCHAR2(30);
12629
12630 --End of variables used for debugging
12631
12632 l_budget_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12633 l_proj_fp_options_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12634 l_task_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12635 l_task_name_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
12636 l_task_number_tbl SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE();
12637 l_res_assignment_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12638
12639 l_people_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
12640 l_equip_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
12641 l_fin_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
12642 l_mat_res_class_rlm_id pa_resource_list_members.resource_list_member_id%TYPE;
12643
12644 l_txn_source_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12645 l_res_list_member_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12646 l_rbs_element_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12647 l_txn_accum_header_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12648
12649 l_res_assignment_count NUMBER;
12650 l_wp_versioning_enabled_flag VARCHAR2(1);
12651 l_pub_budget_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12652 l_pub_proj_fp_options_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12653 l_proj_struct_ver_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
12654
12655
12656 CURSOR parent_plan_type_cur IS
12657 SELECT pfo.proj_fp_options_id
12658 ,pfo.track_workplan_costs_flag
12659 ,pfo.plan_in_multi_curr_flag
12660 ,pfo.rbs_version_id
12661 ,pfo.margin_derived_from_code
12662 ,pfo.factor_by_code
12663 ,pfo.cost_resource_list_id
12664 ,pfo.select_cost_res_auto_flag
12665 ,pfo.cost_time_phased_code
12666 ,pfo.cost_current_planning_period
12667 ,pfo.cost_period_mask_id
12668 ,pfo.projfunc_cost_rate_type
12669 ,pfo.projfunc_cost_rate_date_type
12670 ,pfo.projfunc_cost_rate_date
12671 ,pfo.project_cost_rate_type
12672 ,pfo.project_cost_rate_date_type
12673 ,pfo.project_cost_rate_date
12674 ,pfo.use_planning_rates_flag
12675 ,pfo.res_class_raw_cost_sch_id
12676 ,pfo.cost_emp_rate_sch_id
12677 ,pfo.cost_job_rate_sch_id
12678 ,pfo.cost_non_labor_res_rate_sch_id
12679 ,pfo.cost_res_class_rate_sch_id
12680 ,pfo.cost_burden_rate_sch_id
12681 FROM pa_proj_fp_options pfo
12682 ,pa_fin_plan_types_b fpt
12683 WHERE pfo.project_id = p_project_id
12684 AND pfo.fin_plan_type_id = fpt.fin_plan_type_id
12685 AND fpt.use_for_workplan_flag = 'Y'
12686 AND pfo.fin_plan_option_level_code = 'PLAN_TYPE';
12687
12688 parent_plan_type_rec parent_plan_type_cur%ROWTYPE;
12689
12690 -- Cursor to fetch all the working version including submitted version
12691 -- if any to update the versions with the changes in workplan setting
12692 -- page. Change in resoruce list and time phasing is restricted if there
12693 -- is a baselined or submitted version.
12694 CURSOR working_workplan_versions_cur IS
12695 SELECT bv.budget_version_id
12696 ,pfo.proj_fp_options_id
12697 ,bv.project_structure_version_id
12698 FROM pa_budget_versions bv,
12699 pa_proj_elem_ver_structure ver,
12700 pa_proj_fp_options pfo
12701 WHERE bv.project_id = p_project_id
12702 AND bv.wp_version_flag = 'Y'
12703 AND bv.project_id = ver.project_id
12704 AND bv.project_structure_version_id = ver.element_version_id
12705 AND (l_wp_versioning_enabled_flag = 'N' OR -- UT
12706 ver.status_code IN('STRUCTURE_WORKING','STRUCTURE_SUBMITTED'))
12707 AND pfo.project_id = p_project_id
12708 AND pfo.fin_plan_version_id = bv.budget_version_id;
12709
12710 CURSOR published_versions_cur IS
12711 SELECT bv.budget_version_id
12712 ,pfo.proj_fp_options_id
12713 FROM pa_budget_versions bv,
12714 pa_proj_elem_ver_structure ver,
12715 pa_proj_fp_options pfo
12716 WHERE bv.project_id = p_project_id
12717 AND bv.wp_version_flag = 'Y'
12718 AND bv.project_id = ver.project_id
12719 AND bv.project_structure_version_id = ver.element_version_id
12720 AND ver.status_code IN ('STRUCTURE_PUBLISHED')
12721 AND pfo.project_id = p_project_id
12722 AND pfo.fin_plan_version_id = bv.budget_version_id;
12723
12724
12725 -- Cursor to fetch required input data to delete task assignments
12726 -- for a workplan version. Using this data delete_planning_transactions
12727 -- api is called
12728 CURSOR data_for_delete_plan_txns_cur (c_budget_version_id NUMBER) IS
12729 SELECT wbs_element_version_id
12730 ,name
12731 ,element_number
12732 ,resource_assignment_id
12733 FROM pa_resource_assignments pra
12734 ,pa_proj_elements ppe
12735 WHERE pra.project_id = p_project_id
12736 AND pra.budget_version_id = c_budget_version_id
12737 AND pra.ta_display_flag = 'Y'
12738 AND pra.task_id = ppe.proj_element_id;
12739
12740 --CBS changes: Bug 13639638
12741 CURSOR data_for_del_all_plan_txns_cur (c_budget_version_id NUMBER) IS
12742 SELECT wbs_element_version_id
12743 ,name
12744 ,element_number
12745 ,resource_assignment_id
12746 FROM pa_resource_assignments pra
12747 ,pa_proj_elements ppe
12748 WHERE pra.project_id = p_project_id
12749 AND pra.budget_version_id = c_budget_version_id
12750 --AND pra.ta_display_flag = 'Y'
12751 AND pra.task_id = ppe.proj_element_id;
12752
12753 -- Cursor to fetch all the workplan versions for the project
12754 -- including the publsihed versions for RBS refresh
12755 CURSOR all_workplan_versions_cur IS
12756 SELECT bv.budget_version_id
12757 ,pfo.proj_fp_options_id
12758 FROM pa_budget_versions bv
12759 ,pa_proj_fp_options pfo
12760 WHERE bv.project_id = p_project_id
12761 AND bv.wp_version_flag = 'Y'
12762 AND pfo.fin_plan_version_id = bv.budget_version_id
12763 AND pfo.project_id = bv.project_id;
12764
12765 BEGIN
12766
12767 x_msg_count := 0;
12768 x_return_status := FND_API.G_RET_STS_SUCCESS;
12769
12770 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
12771 l_debug_mode := NVL(l_debug_mode, 'Y');
12772
12773 -- Set curr function
12774 IF l_debug_mode = 'Y' THEN
12775 pa_debug.set_curr_function(
12776 p_function =>'PA_FP_PLANNING_TRANSACTION_PUB.REFRESH_WP_SETTINGS'
12777 ,p_debug_mode => l_debug_mode );
12778 END IF;
12779 -- Check for business rules violations
12780 IF l_debug_mode = 'Y' THEN
12781 pa_debug.g_err_stage:='Validating input parameters';
12782 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12783 END IF;
12784
12785 IF (p_project_id IS NULL)
12786 THEN
12787
12788 IF l_debug_mode = 'Y' THEN
12789 pa_debug.g_err_stage:='Project_id = '||p_project_id;
12790 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12791 END IF;
12792
12793 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12794 p_msg_name => 'PA_FP_INV_PARAM_PASSED');
12795
12796 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12797
12798 END IF;
12799
12800 -- Fetch all the plan type values that could have changed
12801 OPEN parent_plan_type_cur;
12802 FETCH parent_plan_type_cur INTO parent_plan_type_rec;
12803 CLOSE parent_plan_type_cur;
12804
12805 IF l_debug_mode = 'Y' THEN
12806 pa_debug.g_err_stage:='getting plan type info';
12807 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12808 END IF;
12809
12810
12811 -- Check if versioning is enabled for wp structure
12812 l_wp_versioning_enabled_flag := PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id);
12813
12814 -- Fetch all the working plan versions in a table
12815 OPEN working_workplan_versions_cur;
12816 FETCH working_workplan_versions_cur
12817 BULK COLLECT INTO l_budget_version_id_tbl,l_proj_fp_options_id_tbl , l_proj_struct_ver_id_tbl;
12818 CLOSE working_workplan_versions_cur;
12819
12820
12821 IF l_debug_mode = 'Y' THEN
12822 pa_debug.g_err_stage:='getting woking versions';
12823 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12824 END IF;
12825
12826
12827 -- Adding for bug 4543744
12828 /* Collecting all the working version records and inserting into the pji table
12829 with negative values of budget lines */
12830 IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
12831 OR nvl(p_track_costs_flag_change, 'N') = 'Y' OR (nvl(p_rbs_version_change, 'N') = 'Y' AND
12832 (nvl(PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id),'N') = 'N'
12833 OR nvl(PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id),'N') = 'Y')) THEN
12834
12835 IF l_debug_mode = 'Y' THEN
12836 pa_debug.g_err_stage:='About to insert negative lines';
12837 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12838 pa_debug.g_err_stage:='l_budget_version_id_tbl' || l_budget_version_id_tbl.count;
12839 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12840
12841 END IF;
12842
12843
12844 FOR i IN l_budget_version_id_tbl.FIRST .. l_budget_version_id_tbl.LAST
12845 LOOP
12846
12847 IF l_debug_mode = 'Y' THEN
12848 pa_debug.g_err_stage:='Calling call_update_rep_lines' || l_budget_version_id_tbl(i);
12849 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12850 END IF;
12851
12852 PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api
12853 --( p_source => 'POPULATE_PJI_TABLE' --Commented for bug 5073350.
12854 ( p_source => 'REFRESH_WP_SETTINGS'
12855 ,p_budget_version_id => l_budget_version_id_tbl(i)
12856 ,p_qty_sign => -1
12857 ,x_return_status => x_return_status
12858 ,x_msg_data => x_msg_data
12859 ,x_msg_count => x_msg_count);
12860
12861 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12862
12863 IF l_debug_mode = 'Y' THEN
12864 pa_debug.g_err_stage:='PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api returned error';
12865 pa_debug.write( g_module_name,pa_debug.g_err_stage,5);
12866 END IF;
12867 RAISE PA_FP_CONSTANTS_PKG.INVALID_ARG_EXC;
12868 END IF;
12869
12870 END LOOP;
12871
12872 END IF; -- inserting negative rows
12873
12874 IF l_debug_mode = 'Y' THEN
12875 pa_debug.g_err_stage:='inserted -ve lines';
12876 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
12877 END IF;
12878
12879
12880 IF nvl(p_resource_list_change, 'N') = 'Y' THEN
12881
12882 OPEN published_versions_cur;
12883 FETCH published_versions_cur
12884 BULK COLLECT INTO l_pub_budget_version_id_tbl,l_pub_proj_fp_options_id_tbl ;
12885 CLOSE published_versions_cur;
12886
12887 IF l_pub_budget_version_id_tbl.COUNT > 0 THEN
12888
12889 PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
12890 ( p_project_id => p_project_id
12891 ,p_resource_list_id => parent_plan_type_rec.cost_resource_list_id
12892 ,x_people_res_class_rlm_id => l_people_res_class_rlm_id
12893 ,x_equip_res_class_rlm_id => l_equip_res_class_rlm_id
12894 ,x_fin_res_class_rlm_id => l_fin_res_class_rlm_id
12895 ,x_mat_res_class_rlm_id => l_mat_res_class_rlm_id
12896 ,x_return_status => x_return_status
12897 ,x_msg_count => x_msg_count
12898 ,x_msg_data => x_msg_data);
12899
12900 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12901 IF l_debug_mode = 'Y' THEN
12902 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
12903 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
12904 END IF;
12905 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
12906 END IF;
12907
12908 FORALL i IN l_pub_budget_version_id_tbl.first .. l_pub_budget_version_id_tbl.last
12909 --Fix for bug#7279771, uncommented the code comment done earlier for resource_class_code,
12910 --resource_class_flag,ta_display_flag
12911 UPDATE pa_resource_assignments
12912 SET resource_list_member_id = l_people_res_class_rlm_id
12913 WHERE budget_version_id = l_pub_budget_version_id_tbl(i)
12914 /* The only records present in pa_resource_assignments for published versions with resource
12915 list NONE would fall under the below cateogry. Not including them as part of select as they
12916 dont add any value to performance interms of better index usage. Retaining them in the comment
12917 for understanding purpose */
12918 AND resource_class_code = 'PEOPLE'
12919 AND resource_class_flag = 'Y'
12920 AND ta_display_flag = 'N';
12921 /* Assumptions: When resource list changes for published version, pa_progress_rollup would have only task level PEOPLE assignments.
12922 Hence we are updating all records in pa_progress_rollup with the new rlmid petaining to people class rlm for published versions. */
12923 UPDATE pa_progress_rollup
12924 SET object_id = l_people_res_class_rlm_id
12925 WHERE project_id = p_project_id AND
12926 object_type = 'PA_ASSIGNMENTS' AND
12927 structure_type = 'WORKPLAN' AND
12928 structure_Version_id is NULL; /* Only published versions */
12929 /* Note that we are not updating working wp versions pa_progress_rollup since there is some
12930 processing done for working wp versions in the loop below (delete planning transactions etc
12931 and we want to ensure this update is done after the processing */
12932
12933 /* We also need to update the resource list id in the pa_budget_versions table as well as the
12934 pa_proj_fp_options table .*/
12935 FORALL i IN l_pub_proj_fp_options_id_tbl.first .. l_pub_proj_fp_options_id_tbl.last
12936 UPDATE pa_proj_fp_options
12937 SET cost_resource_list_id = parent_plan_type_rec.cost_resource_list_id
12938 ,record_version_number = record_version_number + 1
12939 ,last_update_date = SYSDATE
12940 ,last_updated_by = FND_GLOBAL.user_id
12941 ,last_update_login = FND_GLOBAL.login_id
12942 where proj_fp_options_id = l_pub_proj_fp_options_id_tbl(i);
12943
12944 FORALL i IN l_pub_budget_version_id_tbl.first .. l_pub_budget_version_id_tbl.last
12945 UPDATE pa_budget_versions
12946 SET resource_list_id = parent_plan_type_rec.cost_resource_list_id
12947 ,record_version_number = record_version_number + 1
12948 ,last_update_date = SYSDATE
12949 ,last_updated_by = FND_GLOBAL.user_id
12950 ,last_update_login = FND_GLOBAL.login_id
12951 where budget_version_id = l_pub_budget_version_id_tbl(i);
12952
12953 END IF;
12954 END IF;
12955
12956
12957
12958 IF nvl(l_budget_version_id_tbl.count, 0) > 0 THEN
12959
12960 -- Update proj_fp_options data for all the working versions in bulk
12961 FORALL i IN l_proj_fp_options_id_tbl.first .. l_proj_fp_options_id_tbl.last
12962 UPDATE pa_proj_fp_options
12963 SET track_workplan_costs_flag = parent_plan_type_rec.track_workplan_costs_flag
12964 ,plan_in_multi_curr_flag = parent_plan_type_rec.plan_in_multi_curr_flag
12965 -- Raja ,rbs_version_id = parent_plan_type_rec.rbs_version_id
12966 ,margin_derived_from_code = parent_plan_type_rec.margin_derived_from_code
12967 ,factor_by_code = parent_plan_type_rec.factor_by_code
12968 ,cost_resource_list_id = parent_plan_type_rec.cost_resource_list_id
12969 ,select_cost_res_auto_flag = parent_plan_type_rec.select_cost_res_auto_flag
12970 ,cost_time_phased_code = parent_plan_type_rec.cost_time_phased_code
12971 ,cost_current_planning_period = parent_plan_type_rec.cost_current_planning_period
12972 ,cost_period_mask_id = parent_plan_type_rec.cost_period_mask_id
12973 ,projfunc_cost_rate_type = parent_plan_type_rec.projfunc_cost_rate_type
12974 ,projfunc_cost_rate_date_type = parent_plan_type_rec.projfunc_cost_rate_date_type
12975 ,projfunc_cost_rate_date = parent_plan_type_rec.projfunc_cost_rate_date
12976 ,project_cost_rate_type = parent_plan_type_rec.project_cost_rate_type
12977 ,project_cost_rate_date_type = parent_plan_type_rec.project_cost_rate_date_type
12978 ,project_cost_rate_date = parent_plan_type_rec.project_cost_rate_date
12979 ,use_planning_rates_flag = parent_plan_type_rec.use_planning_rates_flag
12980 ,res_class_raw_cost_sch_id = parent_plan_type_rec.res_class_raw_cost_sch_id
12981 ,cost_emp_rate_sch_id = parent_plan_type_rec.cost_emp_rate_sch_id
12982 ,cost_job_rate_sch_id = parent_plan_type_rec.cost_job_rate_sch_id
12983 ,cost_non_labor_res_rate_sch_id = parent_plan_type_rec.cost_non_labor_res_rate_sch_id
12984 ,cost_res_class_rate_sch_id = parent_plan_type_rec.cost_res_class_rate_sch_id
12985 ,cost_burden_rate_sch_id = parent_plan_type_rec.cost_burden_rate_sch_id
12986 ,record_version_number = record_version_number + 1
12987 ,last_update_date = SYSDATE
12988 ,last_updated_by = FND_GLOBAL.user_id
12989 ,last_update_login = FND_GLOBAL.login_id
12990 WHERE proj_fp_options_id = l_proj_fp_options_id_tbl(i);
12991
12992 -- Update budget_versions data for all the working versions in bulk
12993
12994 FORALL i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last
12995 UPDATE pa_budget_versions
12996 SET resource_list_id = parent_plan_type_rec.cost_resource_list_id
12997 ,current_planning_period = parent_plan_type_rec.cost_current_planning_period
12998 ,period_mask_id = parent_plan_type_rec.cost_period_mask_id
12999 -- Bug 3630069 Amounts should not be updated with 0. These columns are taken care of
13000 -- by delete planning transactions api if there is any change to this amount
13001 /***
13002 ,raw_cost = 0
13003 ,burdened_cost = 0
13004 ,total_project_raw_cost = 0
13005 ,total_project_burdened_cost = 0
13006 ,labor_quantity = 0
13007 ,equipment_quantity = 0
13008 ***/
13009 ,last_update_date = SYSDATE
13010 ,last_updated_by = FND_GLOBAL.user_id
13011 ,last_update_login = FND_GLOBAL.login_id
13012 ,record_version_number = record_version_number + 1
13013 WHERE budget_version_id = l_budget_version_id_tbl(i);
13014
13015 /* Bug 4200168: FP.M:B12: Pref Changes: Called the following api outside the BV loop
13016 */
13017 -- If resource list has changed task level resource assignments
13018 -- should be re-mapped with new People resource class rlmid
13019 -- Fetching the resource class rlm only if not fetched already during published version processing
13020 IF nvl(p_resource_list_change, 'N') = 'Y' AND l_people_res_class_rlm_id IS NULL THEN
13021 PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids
13022 ( p_project_id => p_project_id
13023 ,p_resource_list_id => parent_plan_type_rec.cost_resource_list_id
13024 ,x_people_res_class_rlm_id => l_people_res_class_rlm_id
13025 ,x_equip_res_class_rlm_id => l_equip_res_class_rlm_id
13026 ,x_fin_res_class_rlm_id => l_fin_res_class_rlm_id
13027 ,x_mat_res_class_rlm_id => l_mat_res_class_rlm_id
13028 ,x_return_status => x_return_status
13029 ,x_msg_count => x_msg_count
13030 ,x_msg_data => x_msg_data);
13031
13032 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13033 IF l_debug_mode = 'Y' THEN
13034 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Get_Res_Class_Rlm_Ids api returned error';
13035 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
13036 END IF;
13037 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13038 END IF;
13039 END IF;
13040 /* Bug 4200168: FP.M:B12: Pref Changes:-----*/
13041
13042 FOR i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last
13043 LOOP
13044 -- For each of the workplan versions, MC currencies should also be copied
13045 -- from plan type
13046
13047 PA_FP_TXN_CURRENCIES_PUB.copy_fp_txn_currencies (
13048 p_source_fp_option_id => parent_plan_type_rec.proj_fp_options_id
13049 ,p_target_fp_option_id => l_proj_fp_options_id_tbl(i)
13050 ,p_target_fp_preference_code => NULL
13051 ,p_plan_in_multi_curr_flag => parent_plan_type_rec.plan_in_multi_curr_flag
13052 ,x_return_status => x_return_status
13053 ,x_msg_count => x_msg_count
13054 ,x_msg_data => x_msg_data );
13055
13056 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13057 IF l_debug_mode = 'Y' THEN
13058 pa_debug.g_err_stage:='Called API PA_FP_TXN_CURRENCIES_PUB.copy_fp_txn_currencies api returned error';
13059 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
13060 END IF;
13061 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13062 END IF;
13063
13064 -- If resource list or time phasing has changed all the Task Assignments
13065 -- related data should be deleted
13066 IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
13067 OR nvl(p_track_costs_flag_change, 'N') = 'Y' -- bug 3797057
13068 THEN
13069
13070 --CBS changes: Bug 13639638 start
13071 IF (PA_PROJECT_STRUCTURE_UTILS.get_resource_class_flag(p_project_id) = 'Y') then
13072 OPEN data_for_delete_plan_txns_cur(l_budget_version_id_tbl(i));
13073 FETCH data_for_delete_plan_txns_cur
13074 BULK COLLECT INTO l_task_version_id_tbl
13075 ,l_task_name_tbl
13076 ,l_task_number_tbl
13077 ,l_res_assignment_id_tbl ;
13078 CLOSE data_for_delete_plan_txns_cur;
13079 ELSE
13080
13081 OPEN data_for_del_all_plan_txns_cur(l_budget_version_id_tbl(i));
13082 FETCH data_for_del_all_plan_txns_cur
13083 BULK COLLECT INTO l_task_version_id_tbl
13084 ,l_task_name_tbl
13085 ,l_task_number_tbl
13086 ,l_res_assignment_id_tbl ;
13087 CLOSE data_for_del_all_plan_txns_cur;
13088 END IF;
13089 --CBS changes: Bug 13639638 end
13090
13091 IF l_debug_mode = 'Y' THEN
13092 pa_debug.g_err_stage:='about to call delete palnning trans';
13093 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
13094 END IF;
13095
13096 IF nvl(l_res_assignment_id_tbl.count,0) > 0 THEN
13097 -- If there is any data to be deleted call delete_planning_txns api
13098 PA_FP_PLANNING_TRANSACTION_PUB.delete_planning_transactions (
13099 p_context => 'TASK_ASSIGNMENT'
13100 ,p_task_or_res => 'ASSIGNMENT'
13101 ,p_element_version_id_tbl => l_task_version_id_tbl
13102 ,p_task_number_tbl => l_task_number_tbl
13103 ,p_task_name_tbl => l_task_name_tbl
13104 ,p_resource_assignment_tbl => l_res_assignment_id_tbl
13105 ,p_rollup_required_flag => 'N' --For Bug 3937716
13106 ,p_pji_rollup_required => 'N' /* Bug 4200168 */
13107 ,x_return_status => x_return_status
13108 ,x_msg_count => x_msg_count
13109 ,x_msg_data => x_msg_data );
13110
13111 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13112 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13113 END IF;
13114 END IF;
13115
13116 /* Bug 4200168: FP.M:B12: Pref Changes: Clearing the pl/sql tables*/
13117 l_task_version_id_tbl.delete;
13118 l_task_name_tbl.delete;
13119 l_task_number_tbl.delete;
13120 l_res_assignment_id_tbl.delete;
13121
13122 END IF; -- res list or time phase change
13123
13124 IF nvl(p_resource_list_change, 'N') = 'Y' THEN
13125 -- Update all the task planning elements with new FINACIAL ELEMENT rlmid
13126 IF l_debug_mode = 'Y' THEN
13127 pa_debug.g_err_stage:='Updaing res assignments with new FINANCIAL ELEMENTS rlmid : ' || l_fin_res_class_rlm_id;
13128 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
13129 END IF;
13130
13131 UPDATE pa_resource_assignments
13132 SET resource_list_member_id = l_people_res_class_rlm_id
13133 WHERE budget_version_id = l_budget_version_id_tbl(i)
13134 AND resource_class_code = 'PEOPLE'
13135 AND resource_class_flag = 'Y';
13136
13137 /* Assumptions: When resource list changes for working version, pa_progress_rollup would have
13138 only task level PEOPLE assignments at this point as ta_display_flag = Y records
13139 would have got deleted above.Hence we are updating all records in pa_progress_rollup
13140 with the new rlmid petaining to people class rlm for working versions. */
13141 UPDATE pa_progress_rollup
13142 SET object_id = l_people_res_class_rlm_id
13143 WHERE project_id = p_project_id AND
13144 object_type = 'PA_ASSIGNMENTS' AND
13145 structure_type = 'WORKPLAN' AND
13146 structure_Version_id = l_proj_struct_ver_id_tbl(i); /* for Working versions */
13147
13148 END IF;
13149
13150 -- If time phasing has changed call spread api to respread the
13151 -- task level effort data as per the new time phasing
13152
13153 -- If track workplan costs flag has changed call calculate to
13154 -- calculate the costs or null them out as per the changed value
13155 IF nvl(p_time_phase_change, 'N') = 'Y' OR
13156 nvl(p_track_costs_flag_change, 'N') = 'Y'
13157 THEN
13158
13159 -- Call calculate only if there are some planning transactions to be processed
13160 SELECT count(*)
13161 INTO l_res_assignment_count
13162 FROM pa_resource_assignments
13163 WHERE budget_version_id = l_budget_version_id_tbl(i);
13164
13165 IF l_res_assignment_count > 0 THEN
13166 PA_FP_CALC_PLAN_PKG.calculate(
13167 p_project_id => p_project_id
13168 ,p_budget_version_id => l_budget_version_id_tbl(i)
13169 ,p_spread_required_flag => 'Y'
13170 ,p_rollup_required_flag => 'N' -- bug 3937716
13171 ,p_source_context => 'RESOURCE_ASSIGNMENT'
13172 ,p_wp_cost_changed_flag => nvl(p_track_costs_flag_change,'N') -- bug 3699558
13173 ,p_time_phase_changed_flag => nvl(p_time_phase_change,'N') -- bug 3699558
13174 ,x_return_status => x_return_status
13175 ,x_msg_count => x_msg_count
13176 ,x_msg_data => x_msg_data);
13177
13178 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13179 IF l_debug_mode = 'Y' THEN
13180 pa_debug.g_err_stage:='Called API PA_FP_CALC_PLAN_PKG.calculate api returned error';
13181 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
13182 END IF;
13183 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13184 END IF;
13185 END IF;
13186 END IF;
13187
13188 -- Bug 3937716 If there is any change to amounts call rollup api
13189 IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
13190 OR nvl(p_track_costs_flag_change, 'N') = 'Y'
13191 THEN
13192 PA_FP_ROLLUP_PKG.ROLLUP_BUDGET_VERSION
13193 ( p_budget_version_id => l_budget_version_id_tbl(i)
13194 ,p_entire_version => 'Y'
13195 ,x_return_status => x_return_status
13196 ,x_msg_count => x_msg_count
13197 ,x_msg_data => x_msg_data);
13198
13199 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13200 IF l_debug_mode = 'Y' THEN
13201 pa_debug.g_err_stage:='Called API PA_FP_ROLLUP_PKG.rollup_budget_version api returned error';
13202 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
13203 END IF;
13204 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13205 END IF;
13206 END IF;
13207 END LOOP;
13208
13209
13210 END IF; -- workplan budget versions exist
13211
13212 -- If RBS header has been changed all the workplan versions including published
13213 -- versions should be re-mapped and re-summarized
13214 -- Jun-15-2004 Bug 3619687 rbs_version_change should be propagated to workplan
13215 -- versions only if versioning is disabled for the workplan structure
13216 -- Jun-28-2004 Bug 3725414 rbs_version_change should be propagated to working
13217 -- workplan versions even though versioning is enbled but shared structure
13218
13219 IF nvl(p_rbs_version_change, 'N') = 'Y' AND
13220 (nvl(PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id),'N') = 'N' -- Jun-15-2004 Bug 3619687
13221 OR nvl(PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id),'N') = 'Y') -- Jun-28-2004 Bug 3725414
13222 THEN
13223 /** Bug 3725414
13224 -- Fetch all the workplan versions
13225 OPEN all_workplan_versions_cur;
13226 FETCH all_workplan_versions_cur
13227 BULK COLLECT INTO l_budget_version_id_tbl,l_proj_fp_options_id_tbl ;
13228 CLOSE all_workplan_versions_cur;
13229 **/
13230
13231 -- Fetch all the working plan versions in a table
13232
13233 IF l_debug_mode = 'Y' THEN
13234 pa_debug.g_err_stage:='rbs change Yes';
13235 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
13236 END IF;
13237
13238
13239 OPEN working_workplan_versions_cur;
13240 FETCH working_workplan_versions_cur
13241 BULK COLLECT INTO l_budget_version_id_tbl,l_proj_fp_options_id_tbl,l_proj_struct_ver_id_tbl ;
13242 CLOSE working_workplan_versions_cur;
13243
13244 IF nvl(l_budget_version_id_tbl.count,0) > 0 THEN
13245
13246 -- Bulk update all the versions with the new RBS header
13247 FORALL i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last
13248 UPDATE pa_proj_fp_options
13249 SET rbs_version_id = parent_plan_type_rec.rbs_version_id
13250 ,record_version_number = record_version_number + 1
13251 ,last_update_date = SYSDATE
13252 ,last_updated_by = FND_GLOBAL.user_id
13253 ,last_update_login = FND_GLOBAL.login_id
13254 WHERE proj_fp_options_id = l_proj_fp_options_id_tbl(i);
13255
13256 -- For each of the versions, RBS re-mapping and re-summarization needs to be done
13257 FOR i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last LOOP
13258 IF parent_plan_type_rec.rbs_version_id IS NOT NULL THEN
13259 -- Call RBS mapping api for the entire version
13260 -- The api returns rbs element id, txn accum header id for each
13261 -- resource assignment id in the form of plsql tables
13262 PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
13263 p_budget_version_id => l_budget_version_id_tbl(i)
13264 ,p_resource_list_id => parent_plan_type_rec.cost_resource_list_id
13265 ,p_rbs_version_id => parent_plan_type_rec.rbs_version_id
13266 ,p_calling_process => 'RBS_REFRESH'
13267 ,p_calling_context => 'PLSQL'
13268 ,p_process_code => 'RBS_MAP'
13269 ,p_calling_mode => 'BUDGET_VERSION'
13270 ,p_init_msg_list_flag => 'N'
13271 ,p_commit_flag => 'N'
13272 ,x_txn_source_id_tab => l_txn_source_id_tbl
13273 ,x_res_list_member_id_tab => l_res_list_member_id_tbl
13274 ,x_rbs_element_id_tab => l_rbs_element_id_tbl
13275 ,x_txn_accum_header_id_tab => l_txn_accum_header_id_tbl
13276 ,x_return_status => x_return_status
13277 ,x_msg_count => x_msg_count
13278 ,x_msg_data => x_msg_data);
13279
13280 -- Check return status
13281 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13282 IF l_debug_mode = 'Y' THEN
13283 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api returned error';
13284 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
13285 END IF;
13286 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13287 ELSE
13288 -- Check count of the required out tables to be the same
13289 IF l_txn_source_id_tbl.count <> l_rbs_element_id_tbl.count OR
13290 l_txn_source_id_tbl.count <> l_txn_accum_header_id_tbl.count
13291 THEN
13292 IF l_debug_mode = 'Y' THEN
13293 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api
13294 returned out tables with different count';
13295 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
13296 pa_debug.g_err_stage:='l_txn_source_id_tbl.count = ' || l_txn_source_id_tbl.count;
13297 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
13298 pa_debug.g_err_stage:='l_rbs_element_id_tbl.count = ' || l_rbs_element_id_tbl.count;
13299 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
13300 pa_debug.g_err_stage:=
13301 'l_txn_accum_header_id_tbl.count = ' || l_txn_accum_header_id_tbl.count;
13302 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
13303 END IF;
13304 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13305 END IF;
13306 END IF;
13307
13308 -- Check if out table has any records first
13309 IF nvl(l_txn_source_id_tbl.last,0) >= 1 THEN
13310 -- Update resource assignments data for the version
13311 -- Bug 3641252 changed the index from i to j
13312 FORALL j IN l_txn_source_id_tbl.first .. l_txn_source_id_tbl.last
13313 UPDATE pa_resource_assignments
13314 SET rbs_element_id = l_rbs_element_id_tbl(j)
13315 ,txn_accum_header_id = l_txn_accum_header_id_tbl(j)
13316 ,record_version_number = record_version_number + 1
13317 ,last_update_date = SYSDATE
13318 ,last_updated_by = FND_GLOBAL.user_id
13319 ,last_update_login = FND_GLOBAL.login_id
13320 WHERE budget_version_id = l_budget_version_id_tbl(i)
13321 AND resource_assignment_id = l_txn_source_id_tbl(j);
13322 END IF;
13323 ELSE -- rbs version id is null
13324
13325 -- Update all the resource assigments with null for rbs _element_id
13326 UPDATE pa_resource_assignments
13327 SET rbs_element_id = null
13328 ,txn_accum_header_id = null
13329 ,record_version_number = record_version_number + 1
13330 ,last_update_date = SYSDATE
13331 ,last_updated_by = FND_GLOBAL.user_id
13332 ,last_update_login = FND_GLOBAL.login_id
13333 WHERE budget_version_id = l_budget_version_id_tbl(i);
13334
13335 IF l_debug_mode = 'Y' THEN
13336 pa_debug.g_err_stage:='Done with mapping';
13337 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
13338 END IF;
13339
13340
13341 END IF;
13342
13343 /* Bug 4200168: FP.M:B12: Pref Changes: Clearing the pl/sql tables*/
13344 l_txn_source_id_tbl.delete;
13345 l_res_list_member_id_tbl.delete;
13346 l_rbs_element_id_tbl.delete;
13347 l_txn_accum_header_id_tbl.delete;
13348 END LOOP;
13349 END IF; -- if versions exist
13350 END IF; -- if RBS has changed
13351
13352 -- Adding for bug 4543744
13353 /* Collecting all the working version records and inserting into the pji table
13354 with positive values of budget lines */
13355 IF nvl(p_resource_list_change, 'N') = 'Y' OR nvl(p_time_phase_change, 'N') = 'Y'
13356 OR nvl(p_track_costs_flag_change, 'N') = 'Y' OR ( nvl(p_rbs_version_change, 'N') = 'Y' AND
13357 (nvl(PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id),'N') = 'N'
13358 OR nvl(PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id),'N') = 'Y')) THEN
13359 IF l_debug_mode = 'Y' THEN
13360 pa_debug.g_err_stage:='About to insert positive values with new rbs element ids';
13361 pa_debug.write( g_module_name,pa_debug.g_err_stage,5);
13362 END IF;
13363
13364
13365 FOR i IN l_budget_version_id_tbl.FIRST .. l_budget_version_id_tbl.LAST
13366 LOOP
13367 PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api
13368 --( p_source => 'POPULATE_PJI_TABLE' --Commented for bug 5073350.
13369 ( p_source => 'REFRESH_WP_SETTINGS'
13370 ,p_budget_version_id => l_budget_version_id_tbl(i)
13371 ,p_qty_sign => 1
13372 ,x_return_status => x_return_status
13373 ,x_msg_data => x_msg_data
13374 ,x_msg_count => x_msg_count);
13375
13376 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13377 IF l_debug_mode = 'Y' THEN
13378 pa_debug.g_err_stage:='PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api returned error';
13379 pa_debug.write( g_module_name,pa_debug.g_err_stage,5);
13380 END IF; RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13381 END IF;
13382 END LOOP;
13383
13384 /* Start of commented code for bug 5073350.
13385 This call will update all the plan versions of a project which are affected due to the
13386 workplan paln settings change.If any of those versions is in pending processing status,
13387 as per the PJI design error will be thrown.So, commenting out this code.
13388 The PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE api will be called seperately for each plan version
13389 in PA_PLANNING_TRANSACTION_UTILS.call_update_rep_lines_api.
13390
13391 PJI_FM_XBS_ACCUM_MAINT.PLAN_UPDATE (
13392 x_return_status => x_return_status,
13393 x_msg_code => l_error_msg_code);
13394
13395 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13396 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
13397 p_msg_name => l_error_msg_code);
13398 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13399 END IF;
13400
13401 End of commented code for bug 5073350*/
13402 END IF; -- inserting positive rows
13403
13404 IF l_debug_mode = 'Y' THEN
13405 pa_debug.g_err_stage:='Exiting REFRESH_WP_SETTINGS';
13406 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,3);
13407 -- reset curr function
13408 pa_debug.reset_curr_function();
13409 END IF;
13410
13411 EXCEPTION
13412
13413 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
13414 l_msg_count := FND_MSG_PUB.count_msg;
13415 IF l_msg_count = 1 THEN
13416 PA_INTERFACE_UTILS_PUB.get_messages
13417 (p_encoded => FND_API.G_TRUE
13418 ,p_msg_index => 1
13419 ,p_msg_count => l_msg_count
13420 ,p_msg_data => l_msg_data
13421 ,p_data => l_data
13422 ,p_msg_index_out => l_msg_index_out);
13423
13424 x_msg_data := l_data;
13425 x_msg_count := l_msg_count;
13426 ELSE
13427 x_msg_count := l_msg_count;
13428 END IF;
13429
13430 x_return_status := FND_API.G_RET_STS_ERROR;
13431
13432 IF l_debug_mode = 'Y' THEN
13433 pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
13434 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
13435 -- reset curr function
13436 pa_debug.reset_curr_function();
13437 END IF;
13438
13439 RETURN;
13440 WHEN Others THEN
13441 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13442 x_msg_count := 1;
13443 x_msg_data := SQLERRM;
13444
13445 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_FP_PLANNING_TRANSACTION_PUB'
13446 ,p_procedure_name => 'REFRESH_WP_SETTINGS');
13447
13448 IF l_debug_mode = 'Y' THEN
13449 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
13450 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
13451 -- reset curr function
13452 pa_debug.Reset_Curr_Function();
13453 END IF;
13454 RAISE;
13455 END REFRESH_WP_SETTINGS;
13456
13457 /*=============================================================================
13458 This api is called when ever RBS should be changed for budget versions.
13459
13460 Usage:
13461 p_calling_context --> 'ALL_CHILD_VERSIONS'
13462 p_budget_version_id --> null
13463 If there is a change in RBS for a financial plan type
13464 to push the change to the underlying budget version.
13465 p_budget_version_id would be null
13466
13467 p_calling_context --> 'SINGLE_VERSION'
13468 p_budget_version_id --> not null, version id should be passed
13469 --> This mode is useful for creation of working versions
13470 out of published versions, or copy amounts case from
13471 a different version
13472
13473 Bug 3867302 Sep 21 2004 For ci versions reporting data is not maintained
13474 ==============================================================================*/
13475
13476 PROCEDURE Refresh_rbs_for_versions(
13477 p_project_id IN pa_projects_all.project_id%TYPE
13478 ,p_fin_plan_type_id IN pa_budget_versions.fin_plan_type_id%TYPE
13479 ,p_calling_context IN VARCHAR2 -- Default 'ALL_CHILD_VERSIONS'
13480 ,p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE -- Default null
13481 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13482 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13483 ,x_msg_data OUT NOCOPY VARCHAR2) --File.Sql.39 bug 4440895
13484 AS
13485
13486 --Start of variables used for debugging
13487
13488 l_return_status VARCHAR2(1);
13489 l_msg_count NUMBER := 0;
13490 l_msg_data VARCHAR2(2000);
13491 l_data VARCHAR2(2000);
13492 l_msg_index_out NUMBER;
13493 l_debug_mode VARCHAR2(30);
13494 l_error_msg_code VARCHAR2(30);
13495
13496 --End of variables used for debugging
13497
13498 l_rbs_version_id NUMBER;
13499
13500 CURSOR working_budget_Versions_cur IS
13501 SELECT o.proj_fp_options_id,
13502 o.fin_plan_version_id,
13503 bv.resource_list_id
13504 FROM pa_proj_fp_options o,
13505 pa_budget_versions bv
13506 WHERE o.project_id = p_project_id
13507 AND o.fin_plan_type_id = p_fin_plan_type_id
13508 AND o.fin_plan_version_id = bv.budget_version_id
13509 AND bv.ci_id IS NULL -- bug 3867302
13510 AND bv.budget_status_code IN ('W', 'S');
13511
13512 CURSOR input_budget_version_cur IS
13513 SELECT o.proj_fp_options_id
13514 ,o.fin_plan_version_id
13515 ,bv.resource_list_id
13516 ,o.fin_plan_type_id
13517 ,bv.ci_id
13518 FROM pa_budget_versions bv,
13519 pa_proj_fp_options o
13520 WHERE bv.project_id = o.project_id
13521 AND bv.fin_plan_type_id = o.fin_plan_type_id
13522 AND bv.budget_version_id = o.fin_plan_version_id
13523 AND bv.budget_version_id = p_budget_version_id;
13524
13525 input_budget_version_rec input_budget_version_cur%ROWTYPE;
13526
13527
13528 l_budget_version_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
13529 l_proj_fp_options_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
13530 l_resource_list_id_tbl SYSTEM.PA_NUM_TBL_TYPE :=SYSTEM.pa_num_tbl_type();
13531
13532 l_txn_source_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13533 l_res_list_member_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13534 l_rbs_element_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13535 l_txn_accum_header_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13536
13537 BEGIN
13538
13539 x_msg_count := 0;
13540 x_return_status := FND_API.G_RET_STS_SUCCESS;
13541
13542 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
13543 l_debug_mode := NVL(l_debug_mode, 'Y');
13544
13545 -- Set curr function
13546 IF l_debug_mode = 'Y' THEN
13547 pa_debug.set_curr_function(
13548 p_function =>'PAFPPTPB.Refresh_rbs_for_versions'
13549 ,p_debug_mode => l_debug_mode );
13550 END IF;
13551 -- Check for business rules violations
13552 IF l_debug_mode = 'Y' THEN
13553 pa_debug.g_err_stage:='Validating input parameters';
13554 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
13555 END IF;
13556
13557 IF (p_project_id IS NULL) OR
13558 (p_fin_plan_type_id IS NULL) OR
13559 (p_calling_context = 'SINGLE_VERSION' AND p_budget_version_id IS NULL )
13560 THEN
13561
13562 IF l_debug_mode = 'Y' THEN
13563 pa_debug.g_err_stage:='Project_id = '||p_project_id;
13564 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
13565
13566 pa_debug.g_err_stage:='Fin_plan_type_id = '||p_fin_plan_type_id;
13567 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
13568
13569 pa_debug.g_err_stage:='p_calling_context = '||p_calling_context;
13570 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
13571
13572 pa_debug.g_err_stage:='p_budget_version_id = '||p_budget_version_id;
13573 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
13574 END IF;
13575
13576 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
13577 p_msg_name => 'PA_FP_INV_PARAM_PASSED',
13578 p_token1 => 'PROCEDURENAME',
13579 p_value1 => 'pa_fp_planning_transaction_pub.Refresh_rbs_for_versions');
13580
13581 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13582
13583 END IF;
13584
13585 -- fetch plan type level rbs version id
13586 Select rbs_version_id
13587 into l_rbs_version_id
13588 from pa_proj_fp_options
13589 where project_id = p_project_id
13590 and fin_plan_type_id = p_fin_plan_type_id
13591 and fin_plan_option_level_code = 'PLAN_TYPE';
13592
13593 -- if context is 'SINGLE_VERSION' fetch required info about budget version id is passed
13594 IF p_calling_context = 'SINGLE_VERSION' THEN
13595
13596 OPEN input_budget_version_cur;
13597 FETCH input_budget_version_cur
13598 INTO input_budget_version_rec;
13599 CLOSE input_budget_version_cur;
13600
13601 -- Bug 3867302 If i/p version is a ci version just return
13602 -- Added NOT for bug 4094762
13603 IF input_budget_version_rec.ci_id IS NOT NULL THEN
13604
13605 IF l_debug_mode = 'Y' THEN
13606 pa_debug.g_err_stage:=' PJI data not required for CI versions. Returning';
13607 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
13608 pa_debug.reset_curr_function();
13609 END IF;
13610 RETURN;
13611
13612 END IF;
13613
13614 l_proj_fp_options_id_tbl :=
13615 SYSTEM.pa_num_tbl_type(input_budget_version_rec.proj_fp_options_id);
13616 l_budget_version_id_tbl :=
13617 SYSTEM.pa_num_tbl_type(input_budget_version_rec.fin_plan_version_id);
13618 l_resource_list_id_tbl :=
13619 SYSTEM.pa_num_tbl_type(input_budget_version_rec.resource_list_id);
13620
13621 ELSE
13622
13623 OPEN working_budget_Versions_cur;
13624 FETCH working_budget_Versions_cur
13625 BULK COLLECT INTO l_proj_fp_options_id_tbl,
13626 l_budget_version_id_tbl,
13627 l_resource_list_id_tbl;
13628 CLOSE working_budget_Versions_cur;
13629
13630 -- if there are no budget versions for the plan type return
13631 IF l_budget_version_id_tbl.count = 0 THEN
13632 IF l_debug_mode = 'Y' THEN
13633 pa_debug.g_err_stage:='Working Versions do not exist for the plan type. Returning';
13634 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
13635 pa_debug.reset_curr_function();
13636 END IF;
13637 RETURN;
13638 END IF;
13639
13640 END IF;
13641
13642 -- bulk update all the budget versions with the rbs version id
13643 forall i in l_proj_fp_options_id_tbl.first .. l_proj_fp_options_id_tbl.last
13644 update pa_proj_fp_options
13645 set rbs_version_id = l_rbs_version_id
13646 ,record_version_number = record_version_number + 1
13647 ,last_update_date = SYSDATE
13648 ,last_updated_by = FND_GLOBAL.user_id
13649 ,last_update_login = FND_GLOBAL.login_id
13650 WHERE proj_fp_options_id = l_proj_fp_options_id_tbl(i);
13651
13652 -- for each of the versions, RBS re-mapping and re-summarization needs to be done
13653 FOR i IN l_budget_version_id_tbl.first .. l_budget_version_id_tbl.last LOOP
13654 IF l_rbs_version_id IS NOT NULL THEN
13655 -- Call RBS mapping api for the entire version
13656 -- The api returns rbs element id, txn accum header id for each
13657 -- resource assignment id in the form of plsql tables
13658 PA_RLMI_RBS_MAP_PUB.Map_Rlmi_Rbs(
13659 p_budget_version_id => l_budget_version_id_tbl(i)
13660 ,p_resource_list_id => l_resource_list_id_tbl(i)
13661 ,p_rbs_version_id => l_rbs_version_id
13662 ,p_calling_process => 'RBS_REFRESH'
13663 ,p_calling_context => 'PLSQL'
13664 ,p_process_code => 'RBS_MAP'
13665 ,p_calling_mode => 'BUDGET_VERSION'
13666 ,p_init_msg_list_flag => 'N'
13667 ,p_commit_flag => 'N'
13668 ,x_txn_source_id_tab => l_txn_source_id_tbl
13669 ,x_res_list_member_id_tab => l_res_list_member_id_tbl
13670 ,x_rbs_element_id_tab => l_rbs_element_id_tbl
13671 ,x_txn_accum_header_id_tab => l_txn_accum_header_id_tbl
13672 ,x_return_status => x_return_status
13673 ,x_msg_count => x_msg_count
13674 ,x_msg_data => x_msg_data);
13675
13676 -- Check return status
13677 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13678 IF l_debug_mode = 'Y' THEN
13679 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api returned error';
13680 pa_debug.write('REFRESH_WP_SETTINGS: ' || g_module_name,pa_debug.g_err_stage,5);
13681 END IF;
13682 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13683 ELSE
13684 -- Check count of the required out tables to be the same
13685 IF l_txn_source_id_tbl.count <> l_rbs_element_id_tbl.count OR
13686 l_txn_source_id_tbl.count <> l_txn_accum_header_id_tbl.count
13687 THEN
13688 IF l_debug_mode = 'Y' THEN
13689 pa_debug.g_err_stage:='Called API PA_PLANNING_TRANSACTION_UTILS.Map_Rlmi_Rbs api
13690 returned out tables with different count';
13691 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
13692 pa_debug.g_err_stage:='l_txn_source_id_tbl.count = ' || l_txn_source_id_tbl.count;
13693 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
13694 pa_debug.g_err_stage:='l_rbs_element_id_tbl.count = ' || l_rbs_element_id_tbl.count;
13695 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
13696 pa_debug.g_err_stage:=
13697 'l_txn_accum_header_id_tbl.count = ' || l_txn_accum_header_id_tbl.count;
13698 pa_debug.write('Refresh_Plan_Txns: ' || g_module_name,pa_debug.g_err_stage,5);
13699 END IF;
13700 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13701 END IF;
13702 END IF;
13703
13704 -- Check if out table has any records first
13705 IF nvl(l_txn_source_id_tbl.last,0) >= 1 THEN
13706 -- Update resource assignments data for the version
13707 -- Bug 3641252 changed the index from i to j
13708 FORALL j IN l_txn_source_id_tbl.first .. l_txn_source_id_tbl.last
13709 UPDATE pa_resource_assignments
13710 SET rbs_element_id = l_rbs_element_id_tbl(j)
13711 ,txn_accum_header_id = l_txn_accum_header_id_tbl(j)
13712 ,record_version_number = record_version_number + 1
13713 ,last_update_date = SYSDATE
13714 ,last_updated_by = FND_GLOBAL.user_id
13715 ,last_update_login = FND_GLOBAL.login_id
13716 WHERE budget_version_id = l_budget_version_id_tbl(i)
13717 AND resource_assignment_id = l_txn_source_id_tbl(j);
13718 END IF;
13719 ELSE -- rbs version id is null
13720
13721 -- Update all the resource assigments with null for rbs _element_id
13722 UPDATE pa_resource_assignments
13723 SET rbs_element_id = null
13724 ,txn_accum_header_id = null
13725 ,record_version_number = record_version_number + 1
13726 ,last_update_date = SYSDATE
13727 ,last_updated_by = FND_GLOBAL.user_id
13728 ,last_update_login = FND_GLOBAL.login_id
13729 WHERE budget_version_id = l_budget_version_id_tbl(i);
13730
13731 END IF;
13732 END LOOP;
13733
13734 -- Call PJI delete api first to delete existing summarization data
13735 PJI_FM_XBS_ACCUM_MAINT.PLAN_DELETE (
13736 p_fp_version_ids => l_budget_version_id_tbl,
13737 x_return_status => x_return_status,
13738 x_msg_code => l_error_msg_code);
13739
13740 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13741 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
13742 p_msg_name => l_error_msg_code);
13743 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13744 END IF;
13745
13746 -- Call PLAN_CREATE to create summarization data as per the new RBS
13747 PJI_FM_XBS_ACCUM_MAINT.PLAN_CREATE (
13748 p_fp_version_ids => l_budget_version_id_tbl,
13749 x_return_status => x_return_status,
13750 x_msg_code => l_error_msg_code);
13751
13752 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13753 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
13754 p_msg_name => l_error_msg_code);
13755 RAISE PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc;
13756 END IF;
13757
13758 IF l_debug_mode = 'Y' THEN
13759 pa_debug.g_err_stage:='Exiting Refresh_rbs_for_versions';
13760 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,3);
13761 -- reset curr function
13762 pa_debug.reset_curr_function();
13763 END IF;
13764
13765 EXCEPTION
13766
13767 WHEN PA_FP_CONSTANTS_PKG.Invalid_Arg_Exc THEN
13768 l_msg_count := FND_MSG_PUB.count_msg;
13769 IF l_msg_count = 1 THEN
13770 PA_INTERFACE_UTILS_PUB.get_messages
13771 (p_encoded => FND_API.G_TRUE
13772 ,p_msg_index => 1
13773 ,p_msg_count => l_msg_count
13774 ,p_msg_data => l_msg_data
13775 ,p_data => l_data
13776 ,p_msg_index_out => l_msg_index_out);
13777
13778 x_msg_data := l_data;
13779 x_msg_count := l_msg_count;
13780 ELSE
13781 x_msg_count := l_msg_count;
13782 END IF;
13783
13784 x_return_status := FND_API.G_RET_STS_ERROR;
13785
13786 IF l_debug_mode = 'Y' THEN
13787 pa_debug.g_err_stage:='Invalid Arguments Passed Or called api raised an error';
13788 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
13789 -- reset curr function
13790 pa_debug.reset_curr_function();
13791 END IF;
13792 RETURN;
13793 WHEN Others THEN
13794 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13795 x_msg_count := 1;
13796 x_msg_data := SQLERRM;
13797
13798 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'pa_fp_planning_transaction_pub'
13799 ,p_procedure_name => 'Refresh_rbs_for_versions');
13800
13801 IF l_debug_mode = 'Y' THEN
13802 pa_debug.g_err_stage:='Unexpected Error'||SQLERRM;
13803 pa_debug.write('Refresh_rbs_for_versions: ' || g_module_name,pa_debug.g_err_stage,5);
13804 -- reset curr function
13805 pa_debug.Reset_Curr_Function();
13806 END IF;
13807 RAISE;
13808 END Refresh_rbs_for_versions;
13809
13810 --This function returns 'N' if a record already exists in pa_resource_assignments
13811 --for a given budget version id, task id and resource list member id
13812 --Returns 'Y' if the record is not already there
13813 FUNCTION DUP_EXISTS
13814 ( p_budget_version_id IN pa_budget_versions.budget_version_id%TYPE
13815 ,p_task_id IN pa_tasks.task_id%TYPE
13816 ,p_resource_list_member_id IN pa_resource_list_members.resource_list_member_id%TYPE
13817 ,p_project_id IN pa_projects_all.project_id%TYPE)
13818 RETURN VARCHAR2
13819 IS
13820 l_dup_exists VARCHAR2(1);
13821 BEGIN
13822
13823 BEGIN
13824 SELECT 'Y'
13825 INTO l_dup_exists
13826 FROM pa_resource_assignments
13827 WHERE task_id=p_task_id
13828 AND resource_list_member_id=p_resource_list_member_id
13829 AND budget_version_id=p_budget_version_id
13830 AND project_assignment_id=-1
13831 AND project_id=p_project_id;
13832 EXCEPTION
13833 WHEN NO_DATA_FOUND THEN
13834 l_dup_exists:='N';
13835 END;
13836 RETURN l_dup_exists;
13837
13838 END DUP_EXISTS;
13839
13840 END PA_FP_PLANNING_TRANSACTION_PUB;
13841